commit 59d19cb48c7374cdb30470856b2477b424f33711 Author: François Date: Mon Dec 29 10:46:05 2025 +0100 Project restart diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6c7d8ab --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +*__pycache__ +build +dist +*.egg-info/ +.env +/.project +/.pydevproject +/.vscode +/.venv +crash.tx* +report_test.tx* +*.autosave +*.swp +.buildinfo +_autosummary/ +test/venv +test/tmp/* +test/validation/tmp +!test/tmp/.gitkeep +package/appimage/appimage-build* +package/appimage/*.zsync +package/appimage/*.AppImage +package/appimage/src +package/appimage/*.py +AppDir +doc/manual/doxygen +doc/manual/sphinx/build/* +doc/manual/sphinx/source/_build/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..c9010b8 --- /dev/null +++ b/README.md @@ -0,0 +1,247 @@ +# Documentation + +[See here](doc/manual/testium_manual.pdf). + +# Installation + +## Installation from local pypi repository + +### Virtualenv + +It is strongly recommended to create a python virtual environment to be able to install testium with pip. + +This method is also required for git sources install and debug. + +#### Virtualenv setup + +Creation of the python virtual environment: + + python3 -m venv / + +Each time it is needed to enter the virtual environment, just execute: + + source //bin/activate + +this line can also be inserted in the `.bashrc` to be automatically called in a linux terminal. + +It is possible to configure the *code* IDE to use this virtual environment by setting it +in the preferences: "File->Settings", search "venv", then setup the virtual env. + +And when properly set, you can select the interpreter from your newly created venv. + +### install testium + +From the python virtual environment run: + + pip install testium + +all the dependencies are automatically installed in the virtual env. + +### run testium + +From the python virtual environment just run: + + python -m testium + +or simply + + testium + +## Installation from sources + +The python virtual environment should be installed first (see above). + +### Requirements + +In the virtual environment, the following modules must be installed: + +* pyside6 +* pyserial +* pyyaml +* pexpect +* gitpython +* jinja2 +* colorama +* matplotlib +* junit-xml +* lxml + +A `requirements.txt` file is also available in the git repository in the path `testium/src/`. + +### Git repository + +Clone testium from the company's git repository. + +### Tagged version + +In the case testium must be executed at a given release, the tagged version +is expected. + +To know the tags which exist for the software, just execute the following command in the `testium` directory: + + $ git tag --list + +Then the list of tags is displayed. + +To switch to the considered tag, execute the following commands: + + $ git checkout + +If you want to be sure that you're on the right tag, just execute: + $ git status + +And the console may return: + + HEAD detached at + nothing to commit, working tree clean + $ + +### Execution from sources + +**Windows** + + $ python.exe \src\testium + +**Linux** + + $ python /src/testium + +# Documentation generation + +This section describes how to generate the documentation. + +The testium's user's manual is genearted with the help of the sphinx +framework. + +## Install sphinx + + pip install sphinx + +## Generate the doc + +Execute + + doc/manual/sphinx/./build_doc.sh + +This command works if texlive package has been installed on the system. It can be done by invoking the following command. + + sudo apt install texlive-full + +# QT GUI + +## QT GUI modification + +Open the ".ui" file with `qtcreator` and modify the gui. Then regenerate the python code. + +On linux, a helper script has been created: + scripts/./qt_generate.sh + +# Debugging + +In order to debug testium or your python script executed within testium. + +## In VSCODE + +This is the prefered method : + +1. Create a debug configuration like the following: + +``` + "configurations": [ + { + "name": "Python : testium", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/src/testium", + "console": "integratedTerminal", + "args": ["-g"], + "justMyCode": true + }, + ] +``` + +2. Install debugpy module in python + + python -m pip install debugpy +3. Then got to the "RUN AND DEBUG" tab and press the play button. +4. A testium window will pops up ; start execution of your tum. +5. Do not forget to put breakpoints where you want to investigate. + +## Icons + +Icons are coming from the following site: https://github.com/free-icons/free-icons.git + +# testium Release + +## Pre-requisite + +A `python` virtual environment must have been set as described above. + +### Install appimage-builder + +Install `appimage-builder` package using pip. + +### Install pyinstaller + +Install `pyinstaller` package using pip. + +## Generate the binary package + +The procedure for a binary release is as follows: + +1. update the `release_note.txt` file +2. modify the version in `src/VERSION` file +3. be sure that the documentation is up to date, and if not execute `doc/manual/sphinx/build_doc.sh` script +4. push modifications and create a tag with the new version on the git repository +5. generate an appimage by calling `package/appimage/./build.sh` +6. generate an executable file by calling `package/pyinstaller/./build.sh` +7. run the complete validation test for each generated binary +8. check that all the validation results are OK +9. On artifactory add the following files to a new testium version: + + * release note + * testium binary(ies) + * testium user's manual + * validation results + +# Troubleshooting + +## The testium exe crashes `wl_proxy_marshal_flags` + +### Error message + + /testium: symbol lookup error: /tmp/_MEIOhDCPF/libQt6WaylandClient.so.6: undefined symbol: wl_proxy_marshal_flags + +### Solution + +Set the appropriate environment variable + + export QT_QPA_PLATFORM=xcb + testium + +## xcb plugin missing + +### Error message + + qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. + +### Solution + +A package is missing + + sudo apt install libxcb-cursor0 + sudo apt-get install libicu-dev + sudo apt-get install libxcb-cursor-dev + +## The testium appimage crashes when opening a file + +This is usually because wayland is defined as the default X server. + +To change it : + +* Disable Wayland by uncommenting WaylandEnable=false in the `/etc/gdm3/daemon.conf` +* Add `QT_QPA_PLATFORM=xcb` in `/etc/environment` +* After a reboot, check that the environment variable value returns `x11`: + + $ echo $XDG_SESSION_TYPE + x11 diff --git a/doc/examples/dummy/cpt/endurance.tum b/doc/examples/dummy/cpt/endurance.tum new file mode 100644 index 0000000..37d1709 --- /dev/null +++ b/doc/examples/dummy/cpt/endurance.tum @@ -0,0 +1,4 @@ + + - unittest_file: + name: Test 5 + test_file: dummy.py diff --git a/doc/examples/dummy/cpt/temperature.tum b/doc/examples/dummy/cpt/temperature.tum new file mode 100644 index 0000000..ad47ee6 --- /dev/null +++ b/doc/examples/dummy/cpt/temperature.tum @@ -0,0 +1,16 @@ + +sequence: &endurance_test + !include endurance.tum + +sequence: + - unittest_file: + name: Test 3 + test_file: dummy.py + test_method: test_01_pass + - loop: + iterator: 10 + steps: + *endurance_test + - unittest_file: + name: Test 4 + test_file: dummy.py diff --git a/doc/examples/dummy/cycle_temperature.py b/doc/examples/dummy/cycle_temperature.py new file mode 100644 index 0000000..59909ae --- /dev/null +++ b/doc/examples/dummy/cycle_temperature.py @@ -0,0 +1,10 @@ + +def setTemperature(param): + print('Tempe set : %s'%param) + +def temperatureAtteinte(param): + if int(param) > 50: + return True + else: + return False + \ No newline at end of file diff --git a/doc/examples/dummy/dummy.py b/doc/examples/dummy/dummy.py new file mode 100644 index 0000000..c61f423 --- /dev/null +++ b/doc/examples/dummy/dummy.py @@ -0,0 +1,40 @@ +import unittest +from time import sleep + +def donothing(): + return 0 + +class DummyTests(unittest.TestCase): + @unittest.skip("test skipped") + def test_00_skipped(self): + ''' Test 00 is skipped + ''' + sleep(0.5) + + def test_01_pass(self): + ''' Test 01 is passed and adds a report key + ''' + self.reported_values['key reported']= 'value_reported' + sleep(0.5) + + def test_02_pass(self): + ''' Test 02 is passed and adds a report key + ''' + self.reported_values['key reported']= 'toto' + sleep(0.5) + + def test_03_fail(self): + ''' Test 03 is fail by unittest method + ''' + sleep(0.5) + self.fail(msg='Fail message') + + def test_04_disabled(self): + ''' Test 04 is disabled + ''' + sleep(0.5) + + def test_05_crash(self): + ''' Test 05 crashes + ''' + print(crash) \ No newline at end of file diff --git a/doc/examples/dummy/dummy.tum b/doc/examples/dummy/dummy.tum new file mode 100644 index 0000000..391ec02 --- /dev/null +++ b/doc/examples/dummy/dummy.tum @@ -0,0 +1,51 @@ + +sequence: &temperature_step_sequence + !include tum/temperature.tum + + + +main: + name: Test Sample number one + version: 0.1 + steps: + - dialog_references: + name: Ask for reference + question: Please give the reference of the product + reference: + - $(reference_1) + - $(reference_2) + report_show_success: true + - unittest_file: + name: Test 1 + test_file: dummy.py + doc: | + Ceci est le test n°1 + Voilà... + - sleep: + {name: Sleep between one and two, timeout: 10, dialog: true} + - unittest_file: + {name: Test 2, test_file: dummy.py,execute_on_stop: true} + - loop: + name: Cycle Temperature + iterator : [10,20] + steps: + - py_func: + name: set temperature + file: cycle_temperature.py + func_name: setTemperature + param : $(loop_param) + - *temperature_step_sequence + - py_func: + name: temperature reached + file: cycle_temperature.py + func_name: temperatureAtteinte + param : $(loop_param) + +####### REPORT ###### + +report: + module: test_report_text.py + class: TestReportTxt + title: My Dummy Tests + headers: False + banners: False \ No newline at end of file diff --git a/doc/examples/dummy/param_func.xml b/doc/examples/dummy/param_func.xml new file mode 100644 index 0000000..22344c1 --- /dev/null +++ b/doc/examples/dummy/param_func.xml @@ -0,0 +1,4 @@ + + + + diff --git a/doc/examples/dummy/plot.py b/doc/examples/dummy/plot.py new file mode 100644 index 0000000..ee218fd --- /dev/null +++ b/doc/examples/dummy/plot.py @@ -0,0 +1,13 @@ +import random +import libs.testium as tm +from libs.testium import FunctionItem + +def random_value(): + return random.random() + +class LastValues(FunctionItem): + def exec(self, name): + res = tm.last_plot_value(name) + self.reportValue('my_reported_value', res) + print("Last plot value: {}".format(res)) + return res diff --git a/doc/examples/dummy/post_execution.py b/doc/examples/dummy/post_execution.py new file mode 100644 index 0000000..ab383d9 --- /dev/null +++ b/doc/examples/dummy/post_execution.py @@ -0,0 +1,10 @@ + +import libs.testium as tm + +def post_exec(): + print('Success !!!!') + print(str(tm.gd('test_outputs'))) + +def post_exec_fail(): + print('Failure :(') + print(str(tm.gd('test_outputs'))) diff --git a/doc/examples/dummy/unittest_str.py b/doc/examples/dummy/unittest_str.py new file mode 100644 index 0000000..6b92b2d --- /dev/null +++ b/doc/examples/dummy/unittest_str.py @@ -0,0 +1,18 @@ +import unittest + + +class TestStringMethods(unittest.TestCase): + + def test_upper(self): + self.assertEqual('foo'.upper(), 'FOO') + + def test_isupper(self): + self.assertTrue('FOO'.isupper()) + self.assertFalse('Foo'.isupper()) + + def test_split(self): + s = 'hello world' + self.assertEqual(s.split(), ['hello', 'world']) + # check that s.split fails when the separator is not a string + with self.assertRaises(TypeError): + s.split(2) \ No newline at end of file diff --git a/doc/examples/example_conditional.tum b/doc/examples/example_conditional.tum new file mode 100644 index 0000000..b4db3ae --- /dev/null +++ b/doc/examples/example_conditional.tum @@ -0,0 +1,110 @@ +main: + name: Test conditionals + version: 0.1 + stop_on_failure: False + steps: + + - group: + name: Set test variables depending on the OS + steps: + + - let: + name: Set test variables for Linux + condition: "'$(os)' == 'Linux'" + values: + - terminal_prompt: $(linux_prompt) + - let: + name: Set test variables for Windows + condition: "'$(os)' == 'Windows'" + values: + - terminal_prompt: $(windows_prompt) + +# This loop illustrate the way to exit the loop upon operator answer + - loop: + doc: This loop illustrate the way to exit the loop upon operator answer. + name: Infine loop with conditional exit + stop_on_failure: False + steps: + - sleep: + name: sleep item + timeout: 5 + + - dialog_question: + name: Question to continue + question: Answer yes to exit the loop + no_fail: True + + exit_condition: + value: "'$(last_test_result)' == 'PASS'" + + + - let: + name: let + eval: + - conditional_exec: "random.randint(1, 4)" + + - console: + name: Console creation + condition: "$(conditional_exec) == 1" + console_name: consname + doc: Opening the console + steps: + - open: + protocol: terminal + terminal_path: $(test_directory) + + - console: + name: Console read_until with timeout + condition: "$(conditional_exec) == 1" + console_name: consname + steps: + - read_until: {expected: "$(terminal_prompt)", timeout: 10} + + - console: + name: Console write + condition: "$(conditional_exec) == 1" + console_name: consname + steps: + - writeln: echo 0 + + - sleep: + name: sleep item + condition: "$(conditional_exec) == 1" + timeout: 5 + + - console: + name: Console read_until immediate + condition: "$(conditional_exec) == 1" + console_name: consname + steps: + - read_until: {expected: "0", timeout: 0} + + - console: + name: Console read_until immediate (2) + condition: "$(conditional_exec) == 1" + console_name: consname + steps: + - read_until: {expected: "$(terminal_prompt)", timeout: 0} + + - console: + name: Console closure + condition: "$(conditional_exec) == 1" + console_name: consname + steps: + - close: consname + + - sleep: + name: sleep item + condition: "$(conditional_exec) == 2" + timeout: 5 + + - dialog_image: + name: dialog image item + condition: "$(conditional_exec) == 3" + question: click ok if you see the image + filename: image.jpg + + - dialog_value: + name: dialog_value item + condition: "$(conditional_exec) == 4" + question: enter something and click ok \ No newline at end of file diff --git a/doc/examples/example_cycle.tum b/doc/examples/example_cycle.tum new file mode 100644 index 0000000..d6ba343 --- /dev/null +++ b/doc/examples/example_cycle.tum @@ -0,0 +1,278 @@ +#This suite make the simplest call to each item. +# + +main: + name: Test Sample number one + version: 0.1 + stop_on_failure: False + steps: + +# This loop contains a failing step and exits. + - loop: + doc: This loop contains a failing step and exits. + name: Infine loop step fails + key: report-key-2 + stop_on_failure: True + steps: + - unittest_file: + name: unittest item + doc: | + The purpose of this unittest test item is to demonstrate + its various features. + test_file: dummy/dummy.py + test_method: test_01_pass + + - py_func: + name: function test item + doc: The purpose of this step is to demonstrate func test item + file: utils.py + func_name: funcToBeExecuted + param: + - 123 + + - py_func: + name: function test item + doc: | + The purpose of this step is to demonstrate func test item + and the report key feature. + key: report-key-1 + file: utils.py + func_name: funcToBeExecuted + param: + - 123 + + - unittest_file: + name: Unittest item + test_file: dummy/dummy.py + test_method: + - test_04_disabled + - test_03_fail + + exit_condition: + file: utils.py + func_name: dummy_exit + +# This loop contains a crashing function and exits. + - loop: + doc: This loop contains a crashing function and exits. + name: Infinite loop func crashes + stop_on_failure: True + steps: + - py_func: + name: function crash + file: utils.py + func_name: funcToBeExecuted2 + param: + - 123 + +# This function crashes and does not fail because of expected result. + + - py_func: + name: function crash but no fail + file: utils.py + func_name: funcToBeExecuted2 + expected_result: FAIL + param: + - 123 + + - report: + name: Intermediate report + doc: | + The purpose of this step is to demonstrate the report test item + and its various export features. + export: + - junit: + path: $(home)/reports/report-key-1.junit + pattern: + - Unittest% + key: report-key-1 + - text: + file_name: report-key-1.txt + path: $(home)/reports + key: + - report-key-1 + +# This loop contains a crashing unittest step and exits. + - loop: + doc: This loop contains a crashing unittest step and exits. + name: Infine loop unittest step crashes + stop_on_failure: True + steps: + - unittest_file: + name: Unittest item + test_file: dummy/dummy.py + test_method: + - test_05_crash + +# This loop is an example of simple iterator. + - !include seq_cycle.tum + +# This loop is an example of time exit condition. + - loop: + doc: This loop is an example of time exit condition. + name: Elapsed time exit condition + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) + - sleep: + name: Sleep + timeout: 0.2 + dialog: false + exit_condition: + time: 0.2 + +# This loop is an example of value exit condition. + - loop: + doc: This loop is an example of value exit condition + name: Loop exits on a condition + steps: + - let: + name: Set a variable to the loop index + values: + - variable: $(loop_index) + - sleep: + name: Sleep + timeout: 0.2 + dialog: false + exit_condition: + value: "$(variable) >= 10" + +# This loop must fail du to an exception in exit condition. + - loop: + doc: This loop must fail du to an exception in exit condition. + name: Loop exit_condition crash + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - 123 + + exit_condition: + file: utils.py + func_name: exit_exc + +# This loops include complex iterator composed by global variables + - loop: + doc: This loop includes a complex iterator composed by global variables + name: Loop complex iterator + iterator: + - $(global_loop_param_txt) + - $(global_loop_param_num) + - $(global_loop_param_list) + steps: + - loop: + doc: Loop which print the iterators + name: Simple loop + iterator: $(loop_param) + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) + - sleep: + name: Sleep be + timeout: 0.5 + dialog: false + +# Loop with function having a number element of a list as expected result + - loop: + doc: Loop with function having a number element of a list as expected result + name: num list loop + iterator: $(global_loop_param_num) + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) + expected_result: ($(global_loop_param_num))[$(loop_index)] + - sleep: + name: Sleep be + timeout: 0.5 + dialog: false + +# Loop with function having a text element of a list as expected result + - loop: + doc: Loop with function having a text element of a list as expected result + name: text list loop + iterator: $(global_loop_param_txt) + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) + expected_result: ($(global_loop_param_txt))[$(loop_index)] + - sleep: + name: Sleep be + timeout: 0.5 + dialog: false + +# Loop with function having a list element of a list as expected result + - loop: + doc: Loop with function having a list element of a list as expected result + name: list of list loop + iterator: $(global_loop_param_list) + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) + expected_result: ($(global_loop_param_list))[$(loop_index)] + - sleep: + name: Sleep be + key: report-key-3 + timeout: 0.5 + dialog: false + +# This is an infinite loop to be stopped manually + - loop: + doc: This is an infinite loop to be stopped manually + name: Infinite loop + skipped: True + steps: + - unittest_file: + name: Unittest item + test_file: dummy/dummy.py + test_method: test_01_pass + + - sleep: + name: Sleep between one and two + timeout: 0.5 + dialog: false + +report: + enabled: True + # log_stored: True + export: + - sqlite: + file_name: $(test_name).sqlite + path: $(home)/reports + + # - junit: + # file_name: $(test_name)_report-key-1.junit + # path: $(home)/reports + # pattern: + # - function% + # - Unittest% + # key: report-key-1 + + # - text: + # file_name: $(test_name)_report-key-2_3.txt + # path: $(home)/reports + # pattern: function% + # key: + # - report-key-2 + # - report-key-3 diff --git a/doc/examples/example_items.tum b/doc/examples/example_items.tum new file mode 100644 index 0000000..817286b --- /dev/null +++ b/doc/examples/example_items.tum @@ -0,0 +1,190 @@ +#This suite make the simplest call to each item. +# + +config_file: + - param.xml + - param.yaml + - param.json + - $(test_directory)/dummy/param_func.xml + +main: + name: Test Sample number one + version: 0.1 + steps: + - unittest_file: + name: Unittest item + test_file: dummy/unittest_str.py + doc: Unittest test + + - group: + name: Set test variables for Linux + condition: "'$(os)' == 'Linux'" + steps: + + - let: + name: Set test variables for Linux + values: + - terminal_prompt: $(linux_prompt) + + - group: + name: Set test variables for Windows + condition: "'$(os)' == 'Windows'" + steps: + + - let: + name: Set test variables for Windows + values: + - terminal_prompt: $(windows_prompt) + + - group: + name: Console test group + steps: + + - console: + name: Console creation + console_name: consname + doc: Opening the console + steps: + - open: + protocol: terminal + terminal_path: $(test_directory) + + - console: + name: Console read_until with timeout + console_name: consname + steps: + - read_until: {expected: "$(terminal_prompt)", timeout: 10} + + - console: + name: Console write + console_name: consname + steps: + - writeln: echo 0 + + - sleep: + name: sleep item + timeout: 5 + + - console: + name: Console read_until immediate + console_name: consname + steps: + - read_until: {expected: "0", timeout: 0} + + - console: + name: Console read_until immediate (2) + console_name: consname + steps: + - read_until: {expected: "$(terminal_prompt)", timeout: 0} + + - console: + name: Console closure + console_name: consname + steps: + - close: consname + + - loop: + name: cycle item + iterator : 3 + steps: + - unittest_file: + name: Unittest item + test_file: dummy/dummy.py + test_method: test_01_pass + - sleep: + name: sleep item + timeout: 1 + - loop: + name: cycle item + iterator : 3 + steps: + - unittest_file: + name: Unittest item + test_file: dummy/dummy.py + test_method: test_01_pass + - sleep: + name: sleep item + timeout: 1 + + - py_func: + name: func item + file: dummy/dummy.py + func_name: donothing + + - dialog_choices: + name: Choices + question: Select the items you want + icon: $(test_directory)/../../src/testium/main_win/resources/black/document.png + choices: + - name: choice 1 + description: My first choice description + icon: $(test_directory)/../../src/testium/main_win/resources/black/document-save.png + choices: + - name: choice 1.1 + description: My choice 1 first subchoice description + icon: $(test_directory)/../../src/testium/main_win/resources/black/Label.png + - name: choice 1.2 + description: My choice 1 first subchoice description + - name: choice 2 + description: My second choice description + icon: $(test_directory)/../../src/testium/main_win/resources/black/image.png + - name: choice 3 + description: My third choice description + icon: $(test_directory)/../../src/testium/main_win/resources/black/image.png + choices: + - name: choice 3.1 + description: My choice 3 first subchoice description + - name: choice 3.2 + description: My choice 3 second subchoice description + icon: $(test_directory)/../../src/testium/main_win/resources/black/Label.png + + - dialog_image: + name: dialog image item + question: click ok if you see the image + filename: image.jpg + + - sleep: + name: sleep item + timeout: 3 + dialog: true + + - git: + name: Testium repo + repo: $(test_directory) + + - group: + name: group item + steps: + - sleep: + name: sleep item + timeout: 1 + - sleep: + name: sleep item + timeout: 1 + + - dialog_references: + name: dialog_reference item + question: click ok +# reference: +# - ref 1 +# - ref 2/rev +# - ref 3/rev/01 + + - dialog_value: + name: dialog_value item + question: enter something and click ok + + - dialog_message: + name: dialog_message item + question: click ok + + - dialog_question: + name: dialog_question item + question: click yes + +report: + enabled: True + file_name: $(test_name).rep + path: $(home)/reports + pattern: "Console%" + log_stored: False diff --git a/doc/examples/example_plot.tum b/doc/examples/example_plot.tum new file mode 100644 index 0000000..166ecb8 --- /dev/null +++ b/doc/examples/example_plot.tum @@ -0,0 +1,87 @@ +config_file: + - param.yaml + +main: + name: Example of plot item usage + version: 0.1 + steps: + + - console: + name: Creation of the log dir + console_name: console + steps: + - open: + protocol: terminal + terminal_path: $(test_directory) + - writeln: mkdir -p "$(plot_log_path)" && echo Fini + - read_until: {expected: Fini, timeout: 5} + + - console: + name: Console closure + execute_on_stop: true + console_name: console + steps: + - close: + + - plot: + name: Open the plot + plot_name: Mon Plot + steps: + - open: + log_path: $(plot_log_path) + + - plot: + name: Add periodic to the plot + plot_name: Mon Plot + steps: + - periodic: + period: 1 + file: $(test_directory)/dummy/plot.py + func_name: random_value + eval: '{"periodic": $(result)}' + + - sleep: + name: sleep + dialog: true + timeout: 3 + + - loop: + name: Add of other data in the plot + iterator: 10 + steps: + + - plot: + name: Add to the plot + plot_name: Mon Plot + steps: + - add: + value1: $(loop_index) + value2: $(loop_index)+2 + + - sleep: + name: sleep between values + timeout: 1 + + - py_func: + name: last plot values + file: $(test_directory)/dummy/plot.py + func_name: LastValues + param: + - Mon Plot + + - plot: + name: Export + execute_on_stop: True + plot_name: Mon Plot + steps: + - export: $(plot_log_path)/plot_export.pdf + - export: $(plot_log_path)/plot_export.csv + + - plot: + name: Close the plot + execute_on_stop: True + plot_name: Mon Plot + steps: + - close: + wait_dialog_exit: True + timeout: 60 diff --git a/doc/examples/example_run.tum b/doc/examples/example_run.tum new file mode 100644 index 0000000..aa6a781 --- /dev/null +++ b/doc/examples/example_run.tum @@ -0,0 +1,11 @@ +main: + name: Test run Item + steps: + + - run: + name: Execute TUM + tum_file: example_cycle.tum + python_path: python3 + testium_path: /home/francois/Projets/testium/src/testium + log_file: $(home)/reports/test.log + report_file: $(home)/reports/test.rep diff --git a/doc/examples/example_sequence.tum b/doc/examples/example_sequence.tum new file mode 100644 index 0000000..12fc00b --- /dev/null +++ b/doc/examples/example_sequence.tum @@ -0,0 +1,27 @@ +#This suite use a sequence as a macro to repeat items +# +sequence: &seq_sleep + !include $(sequence) + +main: + name: Test Sample number one + version: 0.1 + stop_on_failure: False + steps: + +# This loop is an example of value exit condition. + - loop: + doc: This loop is an example of value exit condition + name: Loop exits on a condition + steps: + - let: + name: Set a variable to the loop index + values: + - variable: $(loop_index) + - sleep_timeout: $(loop_index) + - *seq_sleep + + exit_condition: + value: "$(variable) >= 3" + + - !include {file: seq2.tum, is_dialog: True, sleep_timeout: 12, func_para: truc} \ No newline at end of file diff --git a/doc/examples/example_simple.tum b/doc/examples/example_simple.tum new file mode 100644 index 0000000..7db71e1 --- /dev/null +++ b/doc/examples/example_simple.tum @@ -0,0 +1,18 @@ +main: + name: Test conditionals + version: 0.1 + stop_on_failure: False + steps: + + - py_func: + name: function test item + doc: The purpose of this step is to demonstrate func test item + file: utils.py + func_name: funcToBeExecuted + param: + - 123 + + - sleep: + name: sleep item + dialog: True + timeout: 3600 diff --git a/doc/examples/example_ssh.tum b/doc/examples/example_ssh.tum new file mode 100644 index 0000000..4828a15 --- /dev/null +++ b/doc/examples/example_ssh.tum @@ -0,0 +1,40 @@ +main: + name: Test ssh + version: 0.1 + stop_on_failure: False + steps: + + - console: + name: Console creation + console_name: consname + doc: Opening the console + steps: + - open: + protocol: ssh + ssh_host: "my_hostname" + ssh_user: "francois" + + - console: + name: Console read + console_name: consname + doc: Opening the console + steps: + - writeln: rm -f /tmp/toto.txt && echo done + - read_until: {expected: "done", timeout: 10} + - read_until: {expected: "$ ", timeout: 1} + - writeln: touch /tmp/toto.txt && echo done + - read_until: {expected: "done", timeout: 10} + - read_until: {expected: "$ ", timeout: 1} + - writeln: echo "blablabla" >> /tmp/toto.txt && echo done + - read_until: {expected: "done", timeout: 10} + - read_until: {expected: "$ ", timeout: 1} + - writeln: cat /tmp/toto.txt && echo done + - read_until: {expected: "done", timeout: 10} + - read_until: {expected: "$ ", timeout: 1} + + - console: + name: Console deletion + console_name: consname + doc: Closing the console + steps: + - close: consname diff --git a/doc/examples/example_text_manip.tum b/doc/examples/example_text_manip.tum new file mode 100644 index 0000000..2003122 --- /dev/null +++ b/doc/examples/example_text_manip.tum @@ -0,0 +1,29 @@ +main: + name: Test illustrating string manipulation + version: 0.1 + stop_on_failure: False + steps: + - let: + name: Set string value + values: + - rand_text: | + Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub + Bus 002 Device 005: ID 0bda:0487 Realtek Semiconductor Corp. Dell dock + Bus 002 Device 006: ID 0bda:0413 Realtek Semiconductor Corp. Dell dock + Bus 002 Device 007: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter + Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub + Bus 003 Device 003: ID 04f2:b684 Chicony Electronics Co., Ltd Chicony USB2.0 Camera + Bus 003 Device 004: ID 8087:0029 Intel Corp. AX200 Bluetooth + + - text_searched: "0bda:8153" + + - let: + name: Extract data + eval: + - text_extract: "[l for l in '''$(rand_text)'''.splitlines() if '$(text_searched)' in l][0]" + + - dialog_message: + condition: len('$(text_extract)') > 0 + name: dialog value test item + question: Tataaaaa ! \ No newline at end of file diff --git a/doc/examples/image.jpg b/doc/examples/image.jpg new file mode 100644 index 0000000..72f7bbd Binary files /dev/null and b/doc/examples/image.jpg differ diff --git a/doc/examples/param.json b/doc/examples/param.json new file mode 100644 index 0000000..43c6642 --- /dev/null +++ b/doc/examples/param.json @@ -0,0 +1,4 @@ + +{ + "global_loop_param_list": [["one", "two", "three"],[1, 2, 3]] +} diff --git a/doc/examples/param.xml b/doc/examples/param.xml new file mode 100644 index 0000000..67ab619 --- /dev/null +++ b/doc/examples/param.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/doc/examples/param.yaml b/doc/examples/param.yaml new file mode 100644 index 0000000..3e5fcac --- /dev/null +++ b/doc/examples/param.yaml @@ -0,0 +1,10 @@ + +#**************************************************************************** +# Test configuration +#**************************************************************************** --> +# loops parameters +global_loop_param_txt: ['one', 'two', 'three'] +global_loop_param_num: [1, 2, 3] + +# Plot parameters +plot_log_path: /tmp/testium_plot/$(testrun_date)/$(testrun_time)/ diff --git a/doc/examples/post_execution.py b/doc/examples/post_execution.py new file mode 100644 index 0000000..6100620 --- /dev/null +++ b/doc/examples/post_execution.py @@ -0,0 +1,7 @@ +import py_func.tm as tm + +def post_exec(): + print("post_exec PASS") + +def post_exec_fail(): + print("post_exec_fail PASS") \ No newline at end of file diff --git a/doc/examples/seq.tum b/doc/examples/seq.tum new file mode 100644 index 0000000..ee429dc --- /dev/null +++ b/doc/examples/seq.tum @@ -0,0 +1,17 @@ +# This sequence uses a parameter defined at the upper level in the file including this sequence +- sequence: + - sleep: + name: Sleep + timeout: $(sleep_timeout) + dialog: false + + - dialog_message: + name: dialog_message item + question: value is $(sleep_timeout) + + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) \ No newline at end of file diff --git a/doc/examples/seq2.tum b/doc/examples/seq2.tum new file mode 100644 index 0000000..9079a69 --- /dev/null +++ b/doc/examples/seq2.tum @@ -0,0 +1,16 @@ + +- sleep: + name: Sleep {{ sleep_timeout }} sec + timeout: {{ sleep_timeout }} + dialog: {{ is_dialog }} + +- dialog_message: + name: dialog_message item + question: value is {{ sleep_timeout }} + +- py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - {{ func_param }} \ No newline at end of file diff --git a/doc/examples/seq_cycle.tum b/doc/examples/seq_cycle.tum new file mode 100644 index 0000000..2f62fb2 --- /dev/null +++ b/doc/examples/seq_cycle.tum @@ -0,0 +1,14 @@ + +# This loop is an example of simple iterator. +- loop: + doc: This loop is an example of simple iterator. + name: Simple iterator + iterator: 25 + steps: + - py_func: + name: function test item + file: utils.py + func_name: funcToBeExecuted + param: + - $(loop_param) + expected_result: $(loop_param) \ No newline at end of file diff --git a/doc/examples/utils.py b/doc/examples/utils.py new file mode 100644 index 0000000..86687d0 --- /dev/null +++ b/doc/examples/utils.py @@ -0,0 +1,13 @@ +def dummy_exit(useless1, useless2): + return True + +def exit_exc(useless1, useless2): + raise Exception('Crash of exit function') + +def funcToBeExecuted (bla): + print(bla) + return bla + +def funcToBeExecuted2 (bla): + print(bla) + return blo \ No newline at end of file diff --git a/doc/manual/sphinx/Makefile b/doc/manual/sphinx/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/doc/manual/sphinx/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/doc/manual/sphinx/build_doc.sh b/doc/manual/sphinx/build_doc.sh new file mode 100755 index 0000000..8b5a8e4 --- /dev/null +++ b/doc/manual/sphinx/build_doc.sh @@ -0,0 +1,15 @@ +#! /bin/env sh + +SCRIPT_DIR=$(realpath $( dirname "$0")) + +ver_file="$(realpath $SCRIPT_DIR/../../../src/VERSION)" +ver=$(echo "$(cat $ver_file)" | cut -d "_" -f 1) +echo "Version of the manual: $ver" + +export APP_VERSION=$ver + +rm -r $SCRIPT_DIR/build +mkdir $SCRIPT_DIR/build + +make -C $SCRIPT_DIR latexpdf || exit +cp -vf $SCRIPT_DIR/build/latex/testium.pdf $SCRIPT_DIR/../testium_manual.pdf diff --git a/doc/manual/sphinx/make.bat b/doc/manual/sphinx/make.bat new file mode 100644 index 0000000..6fcf05b --- /dev/null +++ b/doc/manual/sphinx/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/doc/manual/sphinx/source/cdl_interface.rst b/doc/manual/sphinx/source/cdl_interface.rst new file mode 100644 index 0000000..302a5cd --- /dev/null +++ b/doc/manual/sphinx/source/cdl_interface.rst @@ -0,0 +1,128 @@ +Command Line Interface +====================== + +.. code-block:: text + + usage: testium.pyw [-h] [--version] [-b] [-m] [-c CONFIG_FILE [CONFIG_FILE ...]] [-r] [-l LOG_FILE] + [-d DEFINE [DEFINE ...]] [-p REPORT_FILE] [-t {sqlite,json,junit,html,text}] + [-n REPORT_PATTERN [REPORT_PATTERN ...]] [-i INCLUDE_PATH [INCLUDE_PATH ...]] [-o] [-g] + [test_file] + + positional arguments: + test_file the test script file + + optional arguments: + -h, --help show this help message and exit + --version Returns the version of testium + -b, --batch-execution + Executes the test in batch mode + -m, --terminal Starts terminal mode + -c CONFIG_FILE [CONFIG_FILE ...], --config-file CONFIG_FILE [CONFIG_FILE ...] + -o, --no-color Deactivates stdout colors in batch and terminal mode + Configuration file + -r, --run-and-close Runs the test then closes the application + -l LOG_FILE, --log-file LOG_FILE + log file name + -d DEFINE [DEFINE ...], --define DEFINE [DEFINE ...] + Configuration passed to the executed tests. + -p REPORT_FILE, --report-file REPORT_FILE + report file name + -t {sqlite,json,junit,html,text}, --report-type {sqlite,json,junit,html,text} + report file type + -n REPORT_PATTERN [REPORT_PATTERN ...], --report-pattern REPORT_PATTERN [REPORT_PATTERN ...] + report file pattern + -i INCLUDE_PATH [INCLUDE_PATH ...], --include-path INCLUDE_PATH [INCLUDE_PATH ...] + Python modules search path + -g, --debug GUI debug mode + +``-h, --help`` +-------------- + +Returns what's in the previous section. + +``-b, --batch-execution`` +------------------------- + +Executes the test in text mode. No need to have QT installed in that case. + +``-m, --terminal`` +------------------ + +Starts a testium interactive console. It allows to run commands and sub-tests manually +in a console. + + +``-o, --no-color`` +------------------ + +Switch allowing to disable the colored output in terminal or batch modes. + +``-c, --config-file`` +--------------------- + +This option allows to provide configuration file(s) from the command line. +The configuration files format and content is detailed in the :ref:`config files` section. + +If this parameter is not given while calling *testium*, the default configuration files will be used. + +``-r, --run-and-close`` +----------------------- + +This parameter makes testium to close immediately after running the ``test_file`` argument passed during its call. + +If there is no ``test_file`` argument passed, this option is ignored. + +``-l, --log-file`` +------------------ + +Path of the log file where to store the log of the test execution. +Goes in a temporary folder if not provided. + +.. _sec_option_define: + +``-d, --define`` +------------------------------------ + +Defines one or more variables in the form ``VARIABLE1=value1 VARIABLE2=value2 ..."``. +Then, these variables are available from the test scripts, using the :ref:`global variables` +*testium* feature. + +.. _sec_p_param: + +``-p, --report-file`` +---------------------- + +Path of the report file, stored during the test execution. + +This option is only useful in :ref:`batch mode`. + +``-t, --report-type`` +--------------------- + +This option is used in conjuction with option :ref:`-p` and is defining +the type of report to be generated. + +Please read the :ref:`reports` section for more details on +the possible types of report. + +``-n, --report-pattern`` +------------------------- + +This option is used in conjuction with option :ref:`-p` and is defining +the report parttern(s) used to filter the report results which will be +included in the report file. + +More details in :ref:`reports` section. + +``-i, --include-path`` +---------------------- + +Addtional python paths. These paths are appended to the +`sys.path `_ python +variable. + + +``-g, --debug`` +--------------- + +This option is only usefull while debugging *testium* in ``vscode`` in :ref:`graphical mode`. \ No newline at end of file diff --git a/doc/manual/sphinx/source/conf.py b/doc/manual/sphinx/source/conf.py new file mode 100644 index 0000000..a307446 --- /dev/null +++ b/doc/manual/sphinx/source/conf.py @@ -0,0 +1,84 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os + +import sys +sys.path.insert(0, os.path.abspath('../../../../src/testium/')) + + +# -- Project information ----------------------------------------------------- + +project = "testium" +copyright = "2025, François Dausseur" +author = "François Dausseur" + +# The full version, including alpha/beta/rc tags +try: + release = os.environ["APP_VERSION"] + version = release +except: + raise Exception("APP_VERSION not defined in environment !") + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +master_doc = "index" +extensions = [ + "sphinx.ext.duration", + "sphinx.ext.doctest", + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + 'linuxdoc.rstFlatTable', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. + +exclude_patterns = ["includes.rst", "templates.rst", "other_features.rst", "reports.rst"] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +# html_theme = "alabaster" +html_theme = "classic" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +numfig = True + +latex_engine = "xelatex" +latex_elements = { + "papersize": "a4paper", + 'fontpkg': r''' + \setmainfont{DejaVu Sans} + \setsansfont{DejaVu Sans} + \setmonofont{DejaVu Sans Mono} + ''' +} +latex_show_urls = "footnote" + +pdf_stylesheets = ["style_code_font_size"] + +add_module_names = False # Remove namespaces from class/method signatures diff --git a/doc/manual/sphinx/source/doc_illustration.png b/doc/manual/sphinx/source/doc_illustration.png new file mode 100644 index 0000000..ec0f6b2 Binary files /dev/null and b/doc/manual/sphinx/source/doc_illustration.png differ diff --git a/doc/manual/sphinx/source/helper_lib.rst b/doc/manual/sphinx/source/helper_lib.rst new file mode 100644 index 0000000..4203d15 --- /dev/null +++ b/doc/manual/sphinx/source/helper_lib.rst @@ -0,0 +1,75 @@ +.. _sec_python_helper_library: + +Python helper library +====================== + +A python library including helper function for python modules called from +testium. + +To include the support of this library in a python script, the following +line must be included in the script header: + +.. code-block:: python + :caption: testium helper library import + + import py_func.tm as tm + +.. _sec_global_variables_helpers: + +Global variables helper functions +---------------------------------- +To manage values in the global variables dataset, the following testium library API +must be used: + +.. automodule:: interpreter.utils.globdict + :members: gd, setgd, delgd + :undoc-members: + :no-index: + +Console helper functions +------------------------ + +Every opened console instance is added to a list with the +key ``console_instances`` of the global variables. + +The instance is removed from the list on close step of the ``console`` test item. + +To manage consoles from within ``py_func`` python functions, +the following testium library API can be used: + +.. automodule:: libs.testium + :members: add_console, remove_console, console + :undoc-members: + :no-index: + +Plot helper functions +------------------------ + +Every opened plot window instance is added to a list with the +key ``plot_instances`` of the global variables. + +The instance is removed from the list on close step of the ``plot`` test item. + +To manage plots from within ``py_func`` python functions, +the following testium library API can be used: + +.. automodule:: libs.testium + :members: add_plot, remove_plot, plot, add_plot_values, last_plot_value + :undoc-members: + :no-index: + +Other helper functions +------------------------ + +.. automodule:: libs.testium + :members: OS, get_main_dir, timestamp, timestamp_as_sec + :undoc-members: + :no-index: + +Debug mode +------------------------ + +.. automodule:: libs.testium + :members: debug_enabled, enable_debug, print_debug, print_info, print_warn + :undoc-members: + :no-index: diff --git a/doc/manual/sphinx/source/includes.rst b/doc/manual/sphinx/source/includes.rst new file mode 100644 index 0000000..8527fd9 --- /dev/null +++ b/doc/manual/sphinx/source/includes.rst @@ -0,0 +1,37 @@ + +Includes +--------- + +It is possible to include TUM files from another one by using the ``!include`` tag before the included file. + +This feature is a testium specific implementation and is not part of the YAML language, +although it is based on the tagging feature of the language and the customization possibility +offered by the python pyYaml package. + +Here is a basic example of file inclusion: + +.. code-block:: yaml + :caption: included_file.tum + + - test_item: + name: test_2 + - test_item: + name: test_3 + + +.. code-block:: yaml + :caption: main.tum + + #include with the sub-sequence reference mechanism + sequence: &included_sequence + !include included_file.tum + + main: + name: Test example + steps: + - test_item1: + name: test_1 + - *included_sequence + + #include can also be inserted directly within the steps list + - !include included_file.tum \ No newline at end of file diff --git a/doc/manual/sphinx/source/index.rst b/doc/manual/sphinx/source/index.rst new file mode 100644 index 0000000..1b8e77d --- /dev/null +++ b/doc/manual/sphinx/source/index.rst @@ -0,0 +1,12 @@ +testium's User's Manual +===================================== + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + overview.rst + cdl_interface.rst + modes.rst + tum_syntax.rst + helper_lib.rst diff --git a/doc/manual/sphinx/source/modes.rst b/doc/manual/sphinx/source/modes.rst new file mode 100644 index 0000000..f140a30 --- /dev/null +++ b/doc/manual/sphinx/source/modes.rst @@ -0,0 +1,45 @@ + +Modes of operation +==================== + +.. _sec_graphical_mode: + +Graphical mode +--------------- + +*testium* tool has been initially designed to have Graphical User's interface. + +The way to call it is simply by executing the ``testium`` command. It is the normal mode. + +.. _sec_batch_mode: + +Batch mode +---------- + +The batch mode allows to execute a test in text mode. In this mode, the test does not start any +graphical interface. + +.. code-block:: text + :caption: call a test in batch mode + + testium -b test/my_test/main.tum + +Terminal mode +------------- + +The terminal mode starts *testium* in interactive mode. From this console, some tests and +sequences of tests can be called interactively. + +.. code-block:: text + :caption: call a test in terminal mode + + $ testium -m + Configuration file loaded: /my/execution/path/param.xml + [...] + ================================================================================ + ====== Test configuration + ================================================================================ + Test executed with testium : 2.4.0 (binary release) + + + (testium)~ diff --git a/doc/manual/sphinx/source/other_features.rst b/doc/manual/sphinx/source/other_features.rst new file mode 100644 index 0000000..9647279 --- /dev/null +++ b/doc/manual/sphinx/source/other_features.rst @@ -0,0 +1,96 @@ + +Test outputs +---------------- + +A list of test result outputs is automatically updated by *testium*. + +This is a member of global variables dataset which key is ``test_outputs``. + +This global_dict member contains the log file path and, if configured, +the report path as a list. + +Other custom logged files may be added by user updated this global variables entry. + +Post execution +------------------ + +A post execution script can be run for example to copy the output files. + +For that, a ``post_execution`` element can be defined in the .tum file. + +If the test set execution succeeded the ``post_exec`` function of file_name module is run else the ``post_exec_fail`` is run. + +If the post_execution element is not defined, the post_execution.py file in the test directory is used by default if existing. + +.. code-block:: yaml + :caption: custom post execution python file + + post_execution: + file_name: test_report_text.py + + +Sub-sequence references +------------------------- + +It is possible to alias any part of the TUM description file (typically a sequence of steps to be executed) to be inserted within another sequence. + +This feature uses the anchor/alias mechanism of the ``YAML`` `language `_. + +Here is an implementation example of a reference to a sub-sequence in a TUM file: + +.. code-block:: yaml + :caption: sub-sequences call + + sequence: &temperature_step_sequence + - test_item: + name: test_2 + - test_item: + name: test_3 + + main: + name: Test example + steps: + - test_item1: + name: test_1 + - *temperature_step_sequence + +.. note:: + The entry before the alias (``sequence``: in the example above) is needed + mandatorily by YAML language syntax. Nevertheless, its value is not + used by *testium* and thus can be any value. + + +Test documentation +-------------------- + +It is possible to display some explicative text user in the GUI. + +The ``doc`` attribute of test items is used for that purpose and is displayed as +a tooltip on the test row. + +.. code-block:: yaml + :caption: tests documentation + + main: + name: Test example + steps: + + - unittest_file: + name: unittest item + doc: | + The purpose of this unittest test item is to demonstrate + its various features. + test_file: dummy/dummy.py + test_method: test_01_pass + +See illustration in :numref:`Figure %s`. + +.. figure:: doc_illustration.png + :name: doc-illustration + + Illustration of the ``doc`` attribute effect in the GUI. + +Unittest +^^^^^^^^^ + +For ``unittest_file`` type test items, the python docstring of the test method is used as documentation. diff --git a/doc/manual/sphinx/source/overview.rst b/doc/manual/sphinx/source/overview.rst new file mode 100644 index 0000000..465d2fe --- /dev/null +++ b/doc/manual/sphinx/source/overview.rst @@ -0,0 +1,32 @@ +Overview +======== + +*testium* is an automated test framework developed in python by François Dausseur. +This software is developed in python and it implements the Qt6 graphical framework. + +It has been developed since 2013 with production and development testing in mind. + +It's function is to automate the execution of tests. It can be invoked either as command line terminal application or as a graphical interface application. + +Tests reports generation and customization are also in this tool's scope. + +Its main features are: + +* YAML test description, +* Test configuration files in YAML, JSON or XML, +* Full range of pre-existing Test items, +* Test steps, loops, +* Dynamic variables expansion at test runtime, +* Conditional test step execution, +* Modularity of tests (reusable test sequences), +* etc. + +All these features give the ability to the test engineer to perform efficient and robust testings. + +.. figure:: testium_snapshot.png + + testium + +Each test is described with the help of a `YAML `_ file having .tum as extension. +This file is analyzed and then displayed as a tree in a graphical way in the +GUI (see Figure above). diff --git a/doc/manual/sphinx/source/reports.rst b/doc/manual/sphinx/source/reports.rst new file mode 100644 index 0000000..e4c78c5 --- /dev/null +++ b/doc/manual/sphinx/source/reports.rst @@ -0,0 +1,47 @@ +.. _sec_reports: + +Reports +--------- + +If a report is required (in addition to the log), the ``report`` YAML element +must be added at the root of the TUM main test file. + +The ``report`` YAML element has the following form: + +.. code-block:: yaml + :caption: reports global settings + + report: + enabled: True + file_name: $(test_name).rep + path: $(home)/reports + pattern: "Console%" + export: junit + log_stored: False + +.. table:: report attributes + :widths: 20, 30, 50 + + +-----------------+-----------------------+-------------------------------------------+ + | Attribute | default value | Description | + +-----------------+-----------------------+-------------------------------------------+ + | ``enabled`` | ``True`` | Report activated | + +-----------------+-----------------------+-------------------------------------------+ + | ``file_name`` | / | Report file name | + +-----------------+-----------------------+-------------------------------------------+ + | ``path`` | ``$(report_path)`` | Report storage path By default, it uses | + | | | the default one set in the | + | | | preferences. | + +-----------------+-----------------------+-------------------------------------------+ + | ``pattern`` | / | The pattern in SQL wildachars syntax | + | | | to be applied on test names to | + | | | selected reported tests. | + +-----------------+-----------------------+-------------------------------------------+ + | ``export`` | / | The type of export. For exemple junit. | + | | | By default, the sqlite format is | + | | | used to generate reports. | + +-----------------+-----------------------+-------------------------------------------+ + | ``log_stored`` | / | Defines if the output log of each | + | | | test is accessible to generate the | + | | | report export. | + +-----------------+-----------------------+-------------------------------------------+ diff --git a/doc/manual/sphinx/source/style_code_font_size.yaml b/doc/manual/sphinx/source/style_code_font_size.yaml new file mode 100644 index 0000000..133baf4 --- /dev/null +++ b/doc/manual/sphinx/source/style_code_font_size.yaml @@ -0,0 +1,4 @@ +styles: + code: + parent: literal + fontSize: 8 diff --git a/doc/manual/sphinx/source/templates.rst b/doc/manual/sphinx/source/templates.rst new file mode 100644 index 0000000..7527114 --- /dev/null +++ b/doc/manual/sphinx/source/templates.rst @@ -0,0 +1,51 @@ + +Templates +--------------------------- + +*testium* embeds the `jinja2 `_ template engine. It allows a great customization of the +test files, and enforces reusability of test scripts. + +In the main test file +^^^^^^^^^^^^^^^^^^^^^^^ + +The *testium* main test files are systematically passed through the jinja template engine. + +The parameters passed to jinja are all the variables contained into the +:ref:`configuration files` plus the +:ref:`built-in values`. + +In ``!include`` directive +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Along with the basic inclusion capability, there is the possibility to use file inclusion parameters. +Theses parameters are replacing corresponding keywords in bracket in the included file. + +See examples below. + +.. code-block:: yaml + :caption: including a template + + main: + name: Test example + steps: + - test_item1: + name: test_1 + + #include can also be inserted directly within the steps list + - !include + file: included_template_file.tum + inclusion_parameter_1: param1 + inclusion_parameter_2: param2 + + +.. code-block:: yaml + :caption: included template + + - test_item: + name: {{ inclusion_parameter_1 }} + - {{ inclusion_parameter_2 }}: + name: test_3 + # The following construction is not allowed and will fail to load: + - test_item: + name: {{ $(inclusion)_parameter_3 }} + diff --git a/doc/manual/sphinx/source/test_items/check_test_item.rst b/doc/manual/sphinx/source/test_items/check_test_item.rst new file mode 100644 index 0000000..710bfcf --- /dev/null +++ b/doc/manual/sphinx/source/test_items/check_test_item.rst @@ -0,0 +1,12 @@ +**check** test item +============================================================ + +The ``check`` test item returns the result of a python string evaluation: + +.. code-block:: yaml + :caption: example of ``check`` test item usage + + - check: + name: check test item example + values: + - '"tictactoe" in "$(my_global_string)"' \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/console_test_item.rst b/doc/manual/sphinx/source/test_items/console_test_item.rst new file mode 100644 index 0000000..a36ff89 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/console_test_item.rst @@ -0,0 +1,136 @@ +.. _sec_console_test_item: + +**console** test item +============================================================ + +The console test item is of the form: + +.. code-block:: yaml + :caption: example of ``console`` test item usage + + - console: + name: test name in GUI + console_name: console name in dict + steps: + - open: + protocol: telnet + telnet_host: $(target_ip) + telnet_port: $(target_port) + - writeln: reset + - read_until: {expected: U-Boot, timeout: 50} + - write: $(boot_vxworks_1) + - writeln: $(boot_vxworks_2) + - read_until: + expected: U-Boot + timeout: 15 + - read_until: + expected: Something that will never occurs + timeout: 5 + no_fail: True + mute: True + - close: + +Attributes +----------------------- + +Beside common test items attributes, console test item has specific attributes: + +* ``console_name``: console instance name +* ``write_delay``: optional parameter giving the delay to wait in + milliseconds between each character sent. +* ``steps``: a sequence of actions to be applied to the console, as listed above. + +The console test item steps accept the parameters and configurations defined in the next sections. + +All the following actions support the ``name`` attribute. The ``name`` is concatenated with +the step type in the *testium* GUI, and recalled in the test log and reports. + +``open`` action +------------------------- + +The ``open`` action initializes the console with the attributes defined as described below. +The console instance is then added to the ``console_instances`` entry of the global +variables (cf :ref:`global variables`). + +Open step accepts the following attribute: + +* ``protocol``: Setting of the console protocol, supported protocol are listed + in table below +* Other attributes are dependent of the protocol in used and are listed + in table below + +.. table:: console protocols + :widths: 20, 30, 50 + + +---------------+------------------------+-------------------------------------------+ + | **Protocol** | **protocol parameter** | **Description** | + +---------------+------------------------+-------------------------------------------+ + |``telnet`` | ``telnet_host`` | hostname of the target. | + | +------------------------+-------------------------------------------+ + | | ``telnet_port`` | port of the telnet server of the target. | + +---------------+------------------------+-------------------------------------------+ + |``ssh`` | ``ssh_host`` | Hostname or IP address of the target. | + | +------------------------+-------------------------------------------+ + | | ``ssh_user`` | port of the telnet server of the target. | + | +------------------------+-------------------------------------------+ + | | ``ssh_pwd`` | Password (optional). | + +---------------+------------------------+-------------------------------------------+ + |``serial`` | ``serial_port`` | Serial port to the target. | + | +------------------------+-------------------------------------------+ + | | ``serial_baudrate`` | Baud rate of the serial connection. | + | +------------------------+-------------------------------------------+ + | | ``buffered`` | Optinal boolean parameter. If ``False``, | + | | | it forces the | + | | | console to read directly the device. | + | | | Default: ``True``. | + +---------------+------------------------+-------------------------------------------+ + |``rawtcp`` | ``tcp_host`` | hostname of the target. | + | +------------------------+-------------------------------------------+ + | | ``tcp_port`` | port of the rawtcp server of the target. | + +---------------+------------------------+-------------------------------------------+ + |``terminal`` | ``terminal_path`` | Path of the terminal console. | + + +------------------------+-------------------------------------------+ + | | ``shell`` | Shell to execute in the terminal | + | | | Default: /usr/bin/env bash | + +---------------+------------------------+-------------------------------------------+ + +* ``log``: is available only for Telnet and Serial console and is a path to a folder or a file, where the log will be stored. + +``close`` action +--------------------------- + +The ``close`` action closes the console devices and removes its instance from +the ``console_instances`` list accessible in the global variables +(cf :ref:`global variables`). + +No parameters required for this action. + +``write`` action +--------------------------- + +``write`` action takes as parameter the string to be written on the console. + +``writeln`` action +------------------------- + +writeln function is similar to the write function except that a '\n' (newline) character is sent at the end of the string to be written. + +``read_until`` action +---------------------------- + +The ``read_until`` action is waiting for a string pattern from the console, +its parameter are listed below + +* ``expected``: Character string to wait for +* ``timeout``: Timeout setting for the action (in seconds) +* ``no_fail``: Boolean value (``True`` or ``False``) leading to no error reported + if the expected input is not read +* ``mute``: Boolean value (``True`` or ``False``) does not log any readen data + +The text read by the ``read_until`` action is stored in the global +variable named ``cn_`` (See :ref:`global variables` +for more detail on accessing global variables from test items and scripts). + +In the example above, the global variable ``$(cn_test name in GUI)`` +would be created at the end of the step. It would contain the resulting +data of the read. diff --git a/doc/manual/sphinx/source/test_items/dialog_choices.png b/doc/manual/sphinx/source/test_items/dialog_choices.png new file mode 100644 index 0000000..f5c34ac Binary files /dev/null and b/doc/manual/sphinx/source/test_items/dialog_choices.png differ diff --git a/doc/manual/sphinx/source/test_items/dialog_choices_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_choices_test_item.rst new file mode 100644 index 0000000..038ed52 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_choices_test_item.rst @@ -0,0 +1,109 @@ +.. _sec_dialog_choices_test_item: + +**dialog_choices** test item +============================================================ + +This test item displays a dialog asking a question and waiting for +a selection to be done among defined list of items. + +These selectable items can be passed as a tree. + +The :numref:`Figure %s` displays an example of this item. + +.. figure:: dialog_choices.png + :name: choices-dialog + :figwidth: 50 % + :width: 50 % + :align: center + + choices dialog + +The item parameters corresponding to :numref:`Figure %s` +is shown below. + +.. code-block:: yaml + :caption: example of ``choices_dialog`` test item usage + + - dialog_choices: + name: Choices + question: Select the items you want + icon: $(test_directory)/document.png + choices: + - name: choice 1 + description: My first choice description + icon: $(test_directory)/document-save.png + choices: + - name: choice 1.1 + description: My choice 1 first subchoice description + icon: $(test_directory)/Label.png + + - name: choice 1.2 + description: My choice 1 first subchoice description + + - name: choice 2 + description: My second choice description + icon: $(test_directory)/image.png + + - name: choice 3 + description: My third choice description + icon: $(test_directory)/image.png + choices: + - name: choice 3.1 + description: My choice 3 first subchoice description + + - name: choice 3.2 + description: My choice 3 second subchoice description + icon: $(test_directory)/Label.png + + +Attributes +--------------- + +The supported attributes of the ``dialog_choices`` test item are: + +* ``question``: Question to be displayed in the dialog box. +* ``choices``: List of the choicies presented to the user. +* ``icon``: Optional. Path of the icon used in the + selection tree, for all the items by default. + +``Choices`` attribute content +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each choice element is a dictionary which can have the following attributes + +* ``name``: name of the choice to be done. +* ``description``: description of the choice to be done. +* ``icon``: Optional. Path of the icon displayed in the + selection tree in front of the corresponding choice. +* ``choices``: List of sub-choicies presented to the user (recursive). + +Feature +------------------ + +The dialog references test item creates the ``cs_`` entry in the +global dictionary. + +In the example above, the global variable name containing the +result of the test item would be ``cs_Choices``, and it would contain an +object of this form: + +.. code-block:: + :caption: example of result of the ``dialog_choices`` test item + + [ + {'name': 'choice 1', + 'checked': True, + 'choices': [ {'name': 'choice 1.1', 'checked': True}, + {'name': 'choice 1.2', 'checked': False} ] + }, + { 'name': 'choice 2', + 'checked': False}, + { 'name': 'choice 3', + 'checked': True, + 'choices': [ {'name': 'choice 3.1', 'checked': False}, + {'name': 'choice 3.2', 'checked': True} ] + } + ] + +See :ref:`global variables` for more detail +on how to access to global variables from test items and scripts. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/dialog_image_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_image_test_item.rst new file mode 100644 index 0000000..19eb37d --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_image_test_item.rst @@ -0,0 +1,27 @@ +**dialog_image** test item +============================================================ + +This test item displays an image within a dialog box. + +``dialog_image`` test item has the following description format + +.. code-block:: yaml + :caption: example of ``dialog_image`` test item usage + + - dialog_image: + name: dialog image test item + question: operator question + filename: imageToBeDisplayed.jpg + +Attributes +---------------------- + +``dialog_image`` has the following specific attributes: + +* ``question``: Question to be displayed in the dialog box +* ``filename``: File name of the image to be displayed in the dialog box. + +Feature +---------------------- + +The test returns a ``FAIL`` if the answer is No and ``PASS`` if yes. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/dialog_message_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_message_test_item.rst new file mode 100644 index 0000000..b5aa7cc --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_message_test_item.rst @@ -0,0 +1,24 @@ +**dialog_message** test item +============================================================ + +This test item displays a simple dialog asking a question and returning the entered value. +dialog_message test item has the following description format + +.. code-block:: yaml + :caption: example of ``dialog_message`` test item usage + + - dialog_message: + name: dialog value test item + question: operator question + +Attributes +--------------------- + +``dialog_message`` has the following specific attribute: + +* ``question``: Sentence to be displayed in the dialog box + +Feature +--------------------- + +Just display the message. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/dialog_note_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_note_test_item.rst new file mode 100644 index 0000000..f8f1ac9 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_note_test_item.rst @@ -0,0 +1,25 @@ +**dialog_note** test items +============================================================ + +This test item displays a simple dialog allowing to enter some text and printing the entered value in logs. + +``dialog_note`` test item has the following description format + +.. code-block:: yaml + :caption: example of ``dialog_note`` test item usage + + - dialog_note: + name: dialog value test item + question: operator question + +Attributes +----------------- + +``dialog_note`` has the following specific attribute: + +* ``question``: Question to be displayed in the dialog box + +Feature +-------------------- + +Prints the entered text in the log. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/dialog_question_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_question_test_item.rst new file mode 100644 index 0000000..ff8f14a --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_question_test_item.rst @@ -0,0 +1,26 @@ +**dialog_question** test item +============================================================ + +This test item displays a simple dialog asking a question and returning +the entered value. + +``dialog_question`` test item has the following description format + +.. code-block:: yaml + :caption: example of ``dialog_question`` test item usage + + - dialog_question: + name: dialog value test item + question: operator question + +Attributes +-------------------- + +``dialog_question`` has the following specific attribute: + +* ``question``: Question to be asked in the dialog box + +Feature +---------------------- + +The test returns a ``FAIL`` if the answer is No and ``PASS`` if yes. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/dialog_reference.png b/doc/manual/sphinx/source/test_items/dialog_reference.png new file mode 100644 index 0000000..e869018 Binary files /dev/null and b/doc/manual/sphinx/source/test_items/dialog_reference.png differ diff --git a/doc/manual/sphinx/source/test_items/dialog_reference_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_reference_test_item.rst new file mode 100644 index 0000000..7d3b413 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_reference_test_item.rst @@ -0,0 +1,54 @@ +.. _sec_dialog_references_test_item: + +**dialog_references** test item +============================================================ + +This test item displays a dialog asking a question and waiting for +references of the devices under test. + +This test item has the following format: + +.. code-block:: yaml + :caption: example of ``dialog_references`` test item usage + + - dialog_references: + name: ask for a reference + question: Please give the reference of the product + reference: + - ref 1 + - ref 2/rev + +The example above displays the dialog box in :numref:`Figure %s`. + +.. figure:: dialog_reference.png + :name: dialog-reference + :figwidth: 50 % + :width: 50 % + :align: center + + dialog reference + +Attributes +--------------- + +All the following attributes are mandatory. + +* ``question``: Question to be displayed in the dialog box. +* ``reference``: For each of this parameter in the test correspond to a + row to fill in the dialog. + +Every field for a reference can be pre-filled using separating +each filed with an '/' (cf :numref:`Figure %s`). + +Feature +------------------ + +The dialog references test item creates the ``tested_items`` entry in the +global_dict global variable. This entry is a list of dictionaries of +this form: + +.. code-block:: text + :caption: example of ``tested_items`` global variable result of ``dialog_reference`` + test item + + [{'reference': 'XXXXX', 'revision': 'YYYYY', 'serial': 'ZZZZZ'}, …] \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/dialog_value_test_item.rst b/doc/manual/sphinx/source/test_items/dialog_value_test_item.rst new file mode 100644 index 0000000..18a458e --- /dev/null +++ b/doc/manual/sphinx/source/test_items/dialog_value_test_item.rst @@ -0,0 +1,29 @@ +.. _sec_dialog_value_test_item: + +**dialog_value** test items +============================================================ + +This test item displays a simple dialog asking a question and returning the entered value. + +``dialog_value`` test item has the following description format + +.. code-block:: yaml + :caption: example of ``dialog_value`` test item usage + + - dialog_value: + name: dialog value test item + question: operator question + +Attributes +------------------- + +``dialog_value`` has the following specific attribute: + +* ``question``: Question to be displayed in the dialog box +* ``default``: default value to place in the dialog form (optional) + +Feature +---------------------- + +The returned value is added in the global variable entry with the key being the +``dialog_value`` test item name. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/func_test_item.rst b/doc/manual/sphinx/source/test_items/func_test_item.rst new file mode 100644 index 0000000..701706b --- /dev/null +++ b/doc/manual/sphinx/source/test_items/func_test_item.rst @@ -0,0 +1,108 @@ +.. _sec_func_item: + +**py_func** test item +============================================================ + +The ``py_func`` test item is used to execute custom python scripts with the given +input parameters. + +There are two modes for executing a ``py_func`` item. The class mode and the function mode. + +class py_func item +------------------------- + +This is the normal way of calling some custom python code. + +A class must be defined and derived from ``FunctionItem`` from the ``libs.testium`` module. + +From this class it is possible to define some custom reported values with the following API + +* ``reportValue(key, value)``: This ``FunctionItem`` method is adding a value added to the report, +* ``reportedValues()``: This ``FunctionItem`` method is retrieving the current report values. + +.. code-block:: python + :caption: ``py_func`` test item implementation example + :name: scriptFunctionItem.py + + import py_func.tm as tm + + class TestItemFunc(tm.FunctionItem) + + def exec(param1, param2, param4, param4): + ... + self.reportValue('my_reported_value', reported_value) + print(self.reportedValues()) + return 10 + +The ``exec`` method of the ``FunctionItem`` derived class is executed while running the ``py_func`` test item. + +.. code-block:: yaml + :caption: legacy ``py_func`` test item implementation + + - py_func: + name: function test item + file: scriptTestFile.py + func_name: TestItemFunc + param: + - 123 + - 0.123 + - True + - $(global_dict_key) + expected_result: 10 + +**legacy py_func** + +The legacy py_func test item is of the form: + +.. code-block:: python + :caption: legacy ``py_func`` python function example + :name: scriptTestFile.py + + def dummy_func(param1, param2, param4, param4): + ... + return 10 + +There is no possibility to access the report features in that mode. + +.. code-block:: yaml + :caption: corresponding ``py_func`` tum extract + + - py_func: + name: function test item + file: scriptTestFile.py + func_name: funcToBeExecuted + param: + - 123 + - 0.123 + - True + - $(global_dict_key) + expected_result: 10 + +**Attributes** + +Beside common test items attributes, py_func item has specific attribute, some of which being mandatory. + +* ``file``: the script file name that contains the function to be executed. + Only python script format is supported. +* ``func_name``: The function name to be executed. +* ``param``: This is a list of parameters that are passed to the function + in the order they are presented in the script. These parameters are not + mandatory and are highly dependent of the function prototype. + +.. code-block:: yaml + :caption: ``py_func`` test item example of usage + + - py_func: + file: script_name.py + func_name: methodName + param: + - $(my_param) + +The result of the function (after eventual post treatment) is stored in the global +variable named ``fn_`` +(See :ref:`global variables` for more detail +on how to access to global variables from test items and scripts). + +In the example above, the global variable ``$(fn_function test item)`` +would be created at the end of the item execution. It would contain the resulting +value of the funcToBeExecuted python function. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/git_test_item.rst b/doc/manual/sphinx/source/test_items/git_test_item.rst new file mode 100644 index 0000000..1c849f9 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/git_test_item.rst @@ -0,0 +1,17 @@ +**git** test item +============================================================ + +Git test item allows +this item has the following description format + +.. code-block:: yaml + :caption: ``git`` test item usage example + + - git: + name: git test item + repo: [$(test_directory), "/path_to/another/repo"] + +Attributes +----------------- + +* ``repo``: a string or list of string path to the root of the git repositery(ies) to follow. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/group_test_item.rst b/doc/manual/sphinx/source/test_items/group_test_item.rst new file mode 100644 index 0000000..2984a4c --- /dev/null +++ b/doc/manual/sphinx/source/test_items/group_test_item.rst @@ -0,0 +1,26 @@ +**group** test item +============================================================ + +This element is of the following form: + +.. code-block:: yaml + :caption: ``group`` test item usage example + + - group: + name: Group Item + condition: "'$(OS)' == 'Linux'" + steps: + - unittest_file: + test_file: test_prod_rio6_8093.py + test_method: + ... + - sleep: + timeout: 10 + +The ``group`` element is used to manage a sequence of item as a group. + +Attributes +-------------------- + +* The ``steps`` list describes the sequence executed in the group. + It is a list of any of the testium test items, \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/items_common_attributes.rst b/doc/manual/sphinx/source/test_items/items_common_attributes.rst new file mode 100644 index 0000000..fa16c54 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/items_common_attributes.rst @@ -0,0 +1,222 @@ +.. _sec_item_common: + +Items common attributes +============================================================ + +All test items have common attributes independently of their types, which are +listed in next table, those are all optional parameters and their default value +if not provided is given in the table as well. + +.. table:: test items common attributes + :widths: 25, 15, 60 + + +-----------------------+-------------------+-------------------------------------------------------+ + | **Parameter name** | **Default value** | **Description** | + +-----------------------+-------------------+-------------------------------------------------------+ + |``name`` | test item type | This is the test item name as displayed | + | | | in the test tree window of the | + | | | testium. | + | | | | + | | | This attribute is also supported by actions of | + | | | ``console``, ``jsonrpc`` or ``plot`` test items. | + | | | | + | | | Default value, if not provided, is the | + | | | test item type. | + +-----------------------+-------------------+-------------------------------------------------------+ + |``stop_on_failure`` |``False`` | If ``stop_on_failure`` is set to | + | | | ``True``, the test sequence execution | + | | | stops on test tem failure and no | + | | | further test items are executed, | + | | | except those withexecute_on_stop | + | | | attribute set (see below) | + | | | | + | | | It depends on the test item to take it | + | | | into account or not. | + | | | For example it makes sense to use it | + | | | for ``unittest_file`` test type | + | | | because it can contain many sub-tests, | + | | | but not for sleep test type. | + | | | In cycles, it means that the child | + | | | sequence execution is stopped at first | + | | | failure. It also means that the | + | | | remaining loops are not executed. | + +-----------------------+-------------------+-------------------------------------------------------+ + |``execute_on_stop`` |``False`` | When this attribute is set to True, the | + | | | test item is always run, even on test | + | | | failure of any test before. | + | | | This feature is useful, to end the | + | | | test | + | | | sequence properly on test failure | + | | | (switch off power supplies, climatic | + | | | chamber temperature set to ambient | + | | | temperature….) | + +-----------------------+-------------------+-------------------------------------------------------+ + |``skipped`` |``False`` | The test item execution is to be | + | | | skipped during test sequence execution | + | | | if set to ``True``. It will be | + | | | displayed as failed in the report. | + +-----------------------+-------------------+-------------------------------------------------------+ + | ``no_fail`` | ``False`` | The result of the test step is forced to PASS if this | + | | | attribute is set to ``true``. | + +-----------------------+-------------------+-------------------------------------------------------+ + |``doc`` |``""`` | Documentation for the test item that | + | | | appears in the test doc field and the | + | | | contextual text window in the testium | + | | | GUI. | + +-----------------------+-------------------+-------------------------------------------------------+ + |``Key`` | / | This attribute defines a key which | + | | | will be attached to the test result and | + | | | which will allow to be filtered during | + | | | the report generation. | + +-----------------------+-------------------+-------------------------------------------------------+ + |``report`` | / | This attribute defines values (a dictionary) which | + | | | will be added in the ``data`` field of the report. | + +-----------------------+-------------------+-------------------------------------------------------+ + | ``condition`` | / | The test item is not executed if its | + | | | ``condition`` attribute content is | + | | | evaluated as ``False``. | + | | | see :ref:`Conditional | + | | | execution`. | + +-----------------------+-------------------+-------------------------------------------------------+ + | ``process_result`` | / | Process an evaluation of the process_result | + | | | and store it in the result | + | | | see :ref:`Process result` | + | | | for details. | + +-----------------------+-------------------+-------------------------------------------------------+ + | ``expected_result`` | / | Expected result value or string. | + | | | see :ref:`Expected result` | + | | | for details. | + +-----------------------+-------------------+-------------------------------------------------------+ + + +last test result +----------------------------------------------- + +The global variable ``last_test_result`` is automatically set at the end of a test item execution. + +If the corresponding test item does not return any acutal, the content of the ``last_test_result`` +variable will be the test success (``PASS``, ``FAIL`` or ``SKIP``). + +It the test item returns a value, the ``last_test_result`` variable will contain the returned value. + +The main test items returning a value are: + +* :ref:`console` test item, +* :ref:`jsonrpc` test item, +* :ref:`dialog references` test item, +* :ref:`dialog value` test item. + +Test timings +----------------------------------------------- + +After the execution of a test step, the following global variables are set : + +* ``ts_start_`` + +* ``ts_end_`` + +and + +* duration: ``ts_duration_`` + +See :ref:`global variables` for more detail on how to access to global variables from +test items and scripts. + +Skipped test items +----------------------------------------------- + +A variable named ``skipped_test_item`` can be defined in the global variable entries +or in configuration file (see :ref:`config files`) as a list of item to be skipped. + +.. _sec_conditional_execution: + +Conditional execution +----------------------------------------------- + +The ``condition`` attribute content is evaluated as a python string. + + +.. _sec_process_result: + +Process result +----------------------------------------------- + +The ``process_result`` attribute can be applied to all the test items. However, it's behavior is different +depending if the test item is returning a value or not. + +The ``process_result`` attribute content is evaluated as a python line. + +The special ``$(result)`` variable is replaced in the ``process_result`` attribute content with the test result value. + +The process result is done before the ``expected_result`` + +If the result of the evaluation is a boolean, the test will be *PASSED* if ``True``, and *FAIL* otherwise. + +.. _sec_expected_result: + +Expected result +----------------------------------------------- + +The ``expected_result`` attribute can be applied to all the test items. However, it's behavior is different +depending if the test item is returning a value or not. + +The test items returning a value are: + +* :ref:`dialog_references test item` + +* :ref:`dialog_value test items` + +* :ref:`py_func test item` + +* :ref:`dialog_choices test item` + +* :ref:`json_rpc test item` + +For test items which don't return a value, the ``expected_result`` attribute content is +compared to ``PASS`` or ``FAIL``. + +The ``expected_result`` attribute content is a simple comparison with ``$(result)``. + +If the result and the expected_result is equal, the test will be *PASSED* if ``True``, and *FAIL* otherwise. + +The special ``$(result)`` variable is replaced in the ``expected_result`` attribute content with the test result value. + + +Export attribute +----------------------------------------------- + +.. code-block:: yaml + :caption: Example of ``export`` common attribute usage + + - check: + name: Example of result specific to the step 001 + values: + - $(last_test_result) == PASS + key: + - GID-1510554_step_1 + report: + reported_list: <@ random.sample(range(0,20), k=10) @> + reported_float: <@ math.sqrt(float(1)) @> + reported_str: This is my reported sentence + + +.. _sec_item_default_folded: + +Container items GUI default folding +============================================================ + +The container items are items which are the parent of other test items. For example loops and groups +are container test items. + +In the GUI, if the user wants that a container test item is folded when he opens a test, the ``.`` +character has to be place before the test item declaration. + +See an example below: + +.. code-block:: yaml + :caption: example of ``loop`` folded by default in the GUI + + - .loop: + doc: An example loop + name: An example loop + ... \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/json-rpc_test_item.rst b/doc/manual/sphinx/source/test_items/json-rpc_test_item.rst new file mode 100644 index 0000000..bf00f23 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/json-rpc_test_item.rst @@ -0,0 +1,178 @@ +.. _sec_jsonrpc_test_item: + +**jsonrpc** test item +============================================================ + +The `jsonrpc` test item is used to access jsonrpc servers, by sending queries and analysing the +answers. +It supports JSONRPC `v1.0 `_ or +`v2.0 `_. + +This test item can access the jsonrpc server by using an existing +:ref:`console` or directly using a UDP protocol. +Two low level *adapters* can be then chosen: ``udp`` or ``console``. + +Example of ``jsonrpc`` test item with the console adapter: + +.. code-block:: yaml + :caption: ``json_rpc`` test item usage example + + - json_rpc: + name: JSONRPC console Query + doc: JSONRPC console Query not waiting (only send) + console: + name : jsonrpc_server + prompt: "@@>" + timeout: 1 + version: "2.0" + steps: + - query: + method: echo + params: + a: Hello world + b: [0, 1, 2, 3] + id: 3095372 + no_wait: True + + - [...] + + - json_rpc: + name: JSONRPC console Reception + doc: JSONRPC console reception of the previous request + console: {name : jsonrpc_server} + timeout: 1 + steps: + - receive: + name: console reception + id: 3095372 + timeout: 0.5 + +Attributes +----------------------- + +the jsonrpc attributes are: + +* ``timeout``: global communication timeout in seconds. It is a floating point number. +* ``version``: "1.0" or "2.0" (as a string) depending on the version of the JSONRPC + standard which is supported. +* ``mute``: a boolean giving the verbosity of the jsonrpc exchanges on the log output. +* An :ref:`Adapter` is to be chosen between: + + * Console, + * UDP, +* ``steps``: a sequence of actions as described in the sections below. + +.. _sec_jsonrpc_adapters: + +Steps +----------------------- + +the jsonrpc steps can be of the following: + +* ``open``: used by UDP to open the socket explicitely, +* ``close``: used by UDP adapter to close the socket explicitely, +* ``query``: performs a complete or partial JSONRPC call, +* ``receive``: used to receive the JSONRPC result of call previously + done by the ``query`` action. + +If no ``expected_value`` attribute is defined for ``query`` or ``receive`` actions, +the success of the step will depend on the value returned by the JSONRPC frame. +Indeed, this protocol defines a mean to notify if the remote procedure has succeeded +or failed. + +All the actions support the ``name`` attribute. The ``name`` is concatenated with +the action type in the *testium* GUI, and recalled in the test log and reports. + +adapter attributes +^^^^^^^^^^^^^^^^^^^^^^ + +The adapters attributes are listed in the table below. + +.. flat-table:: jsonrpc adapters + :header-rows: 2 + :stub-columns: 1 + :widths: 10 20 15 10 10 10 + + * - :rspan:`1` adapter + - :cspan:`2` attribute + - :cspan:`1` Description + + * - attribute + - *type* + + * - :rspan:`2` Console + - ``console`` + - *dictionary* + - The console adapter configuration + + * - ``console.name`` + - *string* + - The name of the console which will be retrieved from + the :ref:`global variables`. See also + the :ref:`console test item`. + + * - ``console.prompt`` + - *string* + - the eventual enclosing suffix of the jsonrpc frame. + + * - :rspan:`4` UDP + - ``udp`` + - *dictionary* + - The UDP adapter configuration + + * - ``udp.server`` + - *string* + - UDP server hostname or IP address. + + * - ``udp.snd_port`` + - *integer* + - UDP server listening port + + * - ``udp.rcv_port`` + - *integer* + - UDP answer reception port (on client side) + + * - ``bufsize`` + - *integer* + - the maximum expected size of the buffer received while waiting for + a jsonrpc frame. + +``open`` action +------------------------- + +The ``open`` jsonrpc action is only used with the +`UDP adapter` but is mandatory before any ``query`` action. + +No parameter is required. + +``close`` action +--------------------------- + +The ``close`` jsonrpc action is only used with the +`UDP adapter` but is mandatory after JSONRPC transfers are finished. + +No parameter is required. + +``query`` action +--------------------------- + +The ``query`` jsonrpc action has the following attributes: + +* ``method``: JSONRPC method to be called, +* ``params``: JSONRPC param (must be conforming to the version defined above), by default it is an empty list. +* ``id``: JSONRPC id. If not defined or starts with ``rand``, it is chosen randomly. + Otherwise it must be an integer value, +* ``timeout``: reception timeout in seconds. It is a floating point number. + It is by default the jsonrpc timeout. +* ``no_wait``: Optional boolean. False by default. This attribute defines if + the reception is performed in this step (reception can be done appart, in the + ``receive`` action described below), + +``receive`` action +--------------------------- + +The ``receive`` jsonrpc action has the following attributes: + +* ``id``: JSONRPC id as an integer value, +* ``timeout``: reception timeout in seconds. It is a floating point number, + It is by default the jsonrpc timeout. diff --git a/doc/manual/sphinx/source/test_items/let_test_item.rst b/doc/manual/sphinx/source/test_items/let_test_item.rst new file mode 100644 index 0000000..de57704 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/let_test_item.rst @@ -0,0 +1,25 @@ +**let** test item +============================================================ + +This element is of the following form: + +.. code-block:: yaml + :caption: ``let`` test item usage example + + - let: + name: Let Item + values: + key1: value1 + key2: value2 + eval: + key3: $(variable)[$(loop_index)] + +The ``let`` element is used to set values in the global directory. + +Attributes +---------------- + +* The values list gives the {, } couples to set in the + global directory, +* The eval list gives the strings to evaluate prior to its storage into + the of global directory. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/loop_test_item.rst b/doc/manual/sphinx/source/test_items/loop_test_item.rst new file mode 100644 index 0000000..2d7055a --- /dev/null +++ b/doc/manual/sphinx/source/test_items/loop_test_item.rst @@ -0,0 +1,95 @@ +.. _sec_loop_item: + +**loop** test items +============================================================ + +This element is of the following form: + +.. code-block:: yaml + :caption: ``loop`` test item usage example + + - loop: + name: Cycle Temperature + iterator: 10 + steps: + - unittest_file: + test_file: test_prod_rio6_8093.py + - py_func: + name: function test item + file: scriptTestFile.py + func_name: funcToBeExecuted + param: + - $(loop_param) + exit_condition: + file: script_name.py + func_name: methodName + +The loop element executes repeatedly the ``steps`` sequence of items. + +The configuration of the iteration process is done according to the iterator +cycle sub-item. As described later in this chapter the iterator is +configurable per cycle and allows to call a python function at each +cycle loop. + +Attributes +---------------- + +Below are described loop test item specific attributes. + +* ``Iterator``: giving the number of loop iteration (see dedicated chapter below). +* ``steps``: describes the sequence executed at each cycle; it is + a list of any of the testium test items. +* ``exit_condition``: allows to exit the loop. If False is returned, loop continues + else, it breaks. exit_condition attributes are: + + * ``time``: the loop stops after the time (in minutes) is elapsed (optional) + * ``value``: the loop stops when the content of the value attribute is + evaluated as True (optional) + * ``file``: the loop the script file name that contains a function to be + executed on each loop. Only python script format is supported (optional + if another exit_condition attribute is defined) + * ``func_name``: the function to execute on each loop when the file attribute + is defined. The function referenced by the ``func_name`` attribute must + have two parameters: the current loop iterator value and the report, + even if they are not used. This attribute is mandatory if the file + attribute is defined. + * ``eval``: optional parameter allowing post treatment of the function result. + It is a python evaluable string in which the ``$(result)`` keywork + is replaced by the actual function call result (see exemple below). + +.. code-block:: yaml + :caption: ``loop`` exit condition + + - loop: + ... + exit_condition: + file: script_name.py + func_name: methodName + eval: $(result) < 2 + +**Iterator** + +The iterator attribute can be of the following types: + +* An integer giving the cycle loop number, +* A list. The number of elements of the list gives the loop number, and + the list member are the consecutive loop parameters, +* Undefined. Then cycle loops until the exit condition is reached. + +**Loop variables** + +The following loop variables are automatically defined: + +* ``$(loop_param)``: parameter of the loop. It contains the iterator value. +* ``$(loop_index)``: index of the loop, starting with 0 and incremented at each cycle. +* ``$(loop_index_inverse)``: inverse of index of the loop, starting from cycle length + -1 and decremented at each cycle. +* ``$(loop_count)``: loop total iteration number. If the number of loops is undefined + its value is the python ``inf``. + +When these variables are found in a parameter, an attribute, etc, a +loop is searched recursively in the test hierarchy. And the variable value +is replaced by the corresponding loop value. + +If more than one loop exists in the test item hierarchy, the lowest level +loop iterator is used. diff --git a/doc/manual/sphinx/source/test_items/plot_test_item.rst b/doc/manual/sphinx/source/test_items/plot_test_item.rst new file mode 100644 index 0000000..75765f4 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/plot_test_item.rst @@ -0,0 +1,180 @@ +**plot** test item +============================================================ + +This test item is used to display runtime values of tests variables or any evolving value in +a independent external window. + +The plot window is defined using the ``plot`` test item: + +.. code-block:: yaml + :caption: ``plot`` test item usage example + + - plot: + name: test name in GUI + plot_name: plot identifier + steps: + - open: + - add: + ... + + +Attributes +---------------------- + +In addition to common test items attributes, console test item has specific attributes: + +* ``plot_name``: plot window instance name. +* ``steps``: a sequence of actions to be applied to the plot window. More than one action can be + executed in a ``plot`` item. + +The plot test item can accept the actions described in further sections. + +All the following actions support the ``name`` attribute. The ``name`` is concatenated with +the action type in the *testium* GUI, and recalled in the test log and reports. + +``open`` action +---------------------- + +This action initializes and opens the plot window with the corresponding attributes as defined below. + +This action accepts one optional ``path`` parameter defining a path where are stored the +plot lines values in csv format. + +.. code-block:: yaml + :caption: ``plot`` ``open`` action + + - plot: + name: Open the plot window + plot_name: plot identifier + steps: + - open: + name: open the plot + log_path: $(test_directory)/tmp + +``close`` action +---------------------- + +The ``close`` action closes the plot window and removes its from the managed instances of *testium*. + +This action does not have mandatory parameters. However, ``close`` optional action parameters are: + +* ``wait_dialog_exit``: Boolean value. If set to True, the window + is kept opened until the user closes it manually. +* ``timeout``: Value expressed in seconds. It is active if the ``wait_dialog_exit`` is set to True. + If this parameter is defined, and if not closed manually, the dialog window is kept opened until + the timeout elapses. + +.. code-block:: yaml + :caption: ``plot`` ``close`` action + + - plot: + name: Closes the plot + plot_name: plot identifier + steps: + - close: + wait_dialog_exit: True + timeout: 600 + +.. note:: + When the ``close`` action is entered, the ``periodic`` plots are stopped. + +``add`` action +---------------------- + +The ``add`` action is used to add a single data to the ``plot`` window. + +.. code-block:: yaml + :caption: ``plot`` ``add`` action + + - plot: + name: Add to the plot + plot_name: plot identifier + steps: + - add: + name: add value 1 & 2 + value1: $(loop_index) + value2: $(loop_index)+2 + +The parameter of the ``add`` action is a dictionnary of (*key*, *values*) pairs where the *key* is the plot line name and +*value* is the numeric value to add to the plot line. + +The *value* content is evaluated as a python statement if not a number, but a string. + +``periodic`` action +---------------------- + +This action allows to specify a python function to be called and which result is used to update the +plot. + +``periodic`` plots are updated automatically and don't require further steps in a test sequence, once executed. + +``periodic`` action parameters are: + +* ``period``: period of the automatic value update. +* ``file``: python file containing the function to call. +* ``func_name``: the name of the python function to be periodicaly called. +* ``eval``: optional parameter allowing post treatment of the function result. + +The ``eval`` parameter of the periodic action is a python evaluable string in which the $(result) keywork +is replaced by the actual function call result. + +The result of the action must be a dictionnary of (*key*, *values*) pairs where the *key* is the plot line name and +*value* is the numeric value to add to the plot line. + +.. code-block:: yaml + :caption: ``plot`` ``periodic`` action + + - plot: + name: Add periodic to the plot + plot_name: plot identifier + steps: + - periodic: + period: 1 + file: $(test_path)$(psep)plot.py + func_name: random_value + eval: '{"periodic": $(result)}' + + +``last_value`` action +---------------------- + +The ``last_value`` action returns the last values added to the plot (periodicaly or not) into +the global variables entries. + +``last_value`` action parameters are: + +* ``name``: Optional parameter giving the list of measures to be returned. If + it is not defined, all the measures are returned. + +.. code-block:: yaml + :caption: ``plot`` ``last_value`` action + + - plot: + name: Plot measure_1 value + plot_name: plot identifier + steps: + - last_value: + name: [measure_1] + +The result of the action is stored in the global +variable named ``plv_`` in the example above, it would be +``$(plv_Plot measure_1 value)``. See :ref:`global variables` for more detail +on how to access to global variables from test items and scripts. + + +``export`` action +---------------------- + +The ``export`` action saves the plot window data in various formats to the filesystem. + +.. code-block:: yaml + :caption: ``plot`` ``export`` action + + - plot: + name: Plot export + plot_name: plot identifier + steps: + - export: $(my_custom_path)/plot_export.pdf + - export: $(my_custom_path)/plot_export.csv + +At the time of writing of this documentation, ``.pdf`` and ``.csv`` files are supported. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/report_test_item.rst b/doc/manual/sphinx/source/test_items/report_test_item.rst new file mode 100644 index 0000000..06fbf23 --- /dev/null +++ b/doc/manual/sphinx/source/test_items/report_test_item.rst @@ -0,0 +1,51 @@ +**report** test item +============================================================ + +This test item exports a report file. + +To have this functionality activated, a ``report section`` must be defined at the root of the test file. +The root report section is described in :ref:`report` section. + +report test item has the following description format + +.. code-block:: yaml + :caption: ``report`` test item usage example + + - report: + name: Intermediate report + export: + - junit: + path: $(home)/reports/report-key-1.junit + pattern: + - Unittest% + key: report-key-1 + - text: + file_name: report-key-1.txt + path: $(home)/reports + key: + - report-key-1Attributes + +This item is useful to generate intermediate reports in any format other than ``sqlite``. Nevertheless, +if ``sqlite`` export is defined, It won't generate anything. + +Attributes +--------------------- + +``report`` test item has the following specific attributes: + +* ``export``: reports to be exported. It is a list of the reports exports to be executed. + The supported exports are: + + * ``junit`` + * ``json`` + * ``html`` + * text + +The export sub-attributes (see example above) may contain the following attributes. + +* ``path``: path of the report files directory, +* ``filename``: report file name, +* ``Pattern``: list of the patterns (applied on test names) used to select the + tests to exportinto the report, +* ``Key``: list of selected keys which are used to select the tests to export + into the report. diff --git a/doc/manual/sphinx/source/test_items/run_test_item.rst b/doc/manual/sphinx/source/test_items/run_test_item.rst new file mode 100644 index 0000000..340cbaa --- /dev/null +++ b/doc/manual/sphinx/source/test_items/run_test_item.rst @@ -0,0 +1,30 @@ +**run** test item +============================================================ + +This test item executes a new instance of testium. + +.. code-block:: yaml + :caption: ``run`` test item usage example + + - run: + name: Execute TUM + tum_fime: example_cycle.tum + python_path: python3 + testium_path: /home/francois/projets/testium-new-report/testium.pyw + log_file: $(home)/reports/test.log + report_file: $(home)/reports/test.rep + +Attributes +--------------------- + +run test item has the following specific attributes: + +* ``tum_fime``: mandatory the path of the file to execute, it can be relative to current execution folder, +* ``param_file`` (optional) the path of the parameter file to use, otherwise default parameter file is used. +* ``python_path`` (optional) the path of a specific python to run your scripts, +* ``testium_path`` (optional) the path of a specific testium to run your scripts, +* ``log_file`` (optional) the path of log file to register, if not provided a file is created with timestamp at the location of TUM file. +* ``report_file`` (optional), the path of report file to create +* ``start_time`` (optional), start time for the script execution, in HH:MM format. +* ``end_time`` (optional), end time for an execution within a time frame, in HH:MM format. +* ``wait_for_exec`` (optional). True or False, wait to be in the execution window defined by start_time and end_time to run the script. \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/sleep_test_item.rst b/doc/manual/sphinx/source/test_items/sleep_test_item.rst new file mode 100644 index 0000000..46dbd3c --- /dev/null +++ b/doc/manual/sphinx/source/test_items/sleep_test_item.rst @@ -0,0 +1,18 @@ +**sleep** test item +============================================================ + +sleep test item has the following description format + +.. code-block:: yaml + :caption: ``sleep`` test item example usage + + - sleep: + name: sleep test item + timeout: 10 + dialog: True + +Attributes +--------------- + +* ``timeout``: sleep duration in second or in relative date format like "2d 5h 31m 3s", which translate into 2 days, 5 hours, 31 minutes and 3 seconds. +* ``dialog``: If set to True, a window showing the remaining time to wait is displayed (optional parameter set to ``False`` by default) \ No newline at end of file diff --git a/doc/manual/sphinx/source/test_items/unittest_file_test_item.rst b/doc/manual/sphinx/source/test_items/unittest_file_test_item.rst new file mode 100644 index 0000000..43dd10d --- /dev/null +++ b/doc/manual/sphinx/source/test_items/unittest_file_test_item.rst @@ -0,0 +1,81 @@ +**unittest_file** test item +============================================================ + +unittest_file test item allows the execution of unittest test script which +is part of python standard libraries. + +The tum file prototype is as followed: + +.. code-block:: yaml + :caption: ``unittest_file`` test item usage example + + - unittest_file: + name: unitTest test item + test_file: unitTestScript.py + test_method: + - test_1 + - test_2 + +Attributes +------------------ + +Beside common test items attributes, unittest test item has specific attribute, some of which being mandatory. + +* ``test_file``: it is the name (and eventually path) of the unittest file + to be processed. +* ``test_method``: it is an optional unittest_file test sub-item. If one or more + elements are present, the unittest python script file is parsed and only + the corresponding methods are included in the test tree. Otherwise, all + the test methods are included in the test tree. + +Access to global variables entries +---------------------------------- + +``unittest`` file tests instances have access to the testium global variables +by using the :ref:`helper's library`. + +Report value from unittest +---------------------------------- + +Value can be added to the test report from unitTest test at runtime. + +.. code-block:: python + :caption: example of ``unittest`` test item python function + + from unittest import (TestCase) + + class DummyTests(TestCase): + def test_01_report(self): + self.reported_values['key reported']= 'value_reported' + +Console use example with unittest item +----------------------------------------- + +Here is an example how to use the console module from python ``unittest``. + +.. code-block:: python + :caption: example of a *testium* console usage from a ``unittest`` python function + + from unittest import (TestCase) + import console + + class DummyTests(TestCase): + @classmethod + def setUpClass(cls): + cls.consA0= console.TelnetConsole('cons name','192.168.98.123',7001) + cls.consA0.open() + cls.promptA0 = 'test-computer>' + + def test_01_console(self): + self.consA0.write('config') + self.assertEqual(self.consA0.read_until(self.promptA0, 10), 0) + self.consA0.write('lsusb && echo "Done."\n') + status, read_data = self.consA0.read_until('Done.', + 10, return_data=True) + self.assertEqual(status, 0) + if read_data.find('ID 04f2:b684 Chicony Electronics Co.')!=-1: + index=0 + + @classmethod + def tearDownClass(cls): + cls.consA0.close() \ No newline at end of file diff --git a/doc/manual/sphinx/source/testium_snapshot.png b/doc/manual/sphinx/source/testium_snapshot.png new file mode 100644 index 0000000..54696f8 Binary files /dev/null and b/doc/manual/sphinx/source/testium_snapshot.png differ diff --git a/doc/manual/sphinx/source/tum_syntax.rst b/doc/manual/sphinx/source/tum_syntax.rst new file mode 100644 index 0000000..87270c3 --- /dev/null +++ b/doc/manual/sphinx/source/tum_syntax.rst @@ -0,0 +1,254 @@ +TUM file syntax +================ + +*testium* is a python-based tool which uses a ``YAML`` based description file to operate tests: the TUM file. + +The description of tests is based on the definition of test sequences. There is a main ``YAML`` element which is the *testium* tool entry point. + +All other steps are listed in the step list of the main. Some steps are themselves list of steps as well, such as loop or console items. + +``YAML`` is an indented language and parameter encapsulation is defined by their indentation. + +``YAML`` language auto detects data type so that it is not necessary to cast the element type explicitly. See `YAML home page `_ for further information on the language. + +The example below shows a basic implementation of the TUM description file: + +.. code-block:: yaml + :caption: main test file + + main: + name: Test example + steps: + - test_item1: + name: test_1 + - loop : + name: test cyle + iterator: 5 + steps: + - test_item: + name: test_2 + - test_item: + name: test_3 + + +.. _sec_configuration_files: + +Configuration files +-------------------- + +A configuration file can be specified in the .tum file or by the command line. +This configuration file is optional. + +It can be of three different syntax: + +* XML +* YAML +* JSON + +The type of file is recognized by the file name extension (.xml, .yaml, .json). + +During the test script loading process, the values defined in these configuration files +are added to the global variables and are then accessible from the test items and scripts +(cf. :ref:`global variables`). + +The parameter file can be specified in the .tum file root: + +.. code-block:: yaml + :caption: configuration files definition + + config_file: + - myparam.xml + - config1.json + - config2.yaml + + main: + name: Test example + [...] + +If nothing is specified, the ``param.xml``, ``param.yaml`` and ``param.json`` +are automatically loaded, if present in the test directory. + +Files loading +^^^^^^^^^^^^^^^^^^ + +The ``JSON`` and ``YAML`` configuration files variables are evaluated directly. + +The XML files content is evaluated as follows. + +.. code-block:: xml + :name: param.xml + + + + + + + + +If the ``parameter`` XML item defines: + +* ``value`` argument: its content is parsed for variable substitution + (see :ref:`variables expansion`) and then evaluated as a python statement, +* ``str`` argument: its content is not evaluated and is kept as a string. + +.. _sec_global_variables: + +Global variables +------------------- + +Global variables feature is adding the possibility for test items and test scripts to access a common +and global variables database. + +The global variables dataset is populated from various sources: + +* the :ref:`command line`, +* :ref:`built-in values`, +* the :ref:`configuration files`, +* some test items results, +* the :ref:`helper library API`, accessible from python scripts. + +Theses global variables are used for variable expansion in scripts (see :ref:`variables expansion`). + +Another possible usage of the global variables is to share persistent data between test steps. + +A library allowing python functions to access global variables is available from the +python scripts. See details in section :ref:`helper library`. + +Apart from the value obtained from the param.xml file, the global varibles entries +contains also built-in specific value, and test item specific values. + +.. _sec_global_variables_builtin: + +Built-in values +^^^^^^^^^^^^^^^^^^^ + +The following keys are automatically accessible through the testium +library API (see :ref:`helper library`) + +* ``test_directory``: the absolute path of the directory of the main .tum file, +* ``test_main_file``: the main .tum file, +* ``os``: the name of the platform which is used. Can be Linux or Windows, +* ``host_name``: The name of the host on which testium is running, +* ``home``: home directory of the current user, +* ``testrun_date``: The date when the test has started (as a string) in + format YYYY-MM-DD, +* ``testrun_time``: The time when the test has started (as a string) in + format HH:MM:SS, +* ``test_name``: The name of the file being executed without extension, +* ``home``: the path of the current user's home directory, +* ``test_outputs``: list of the paths of the test log and test report (if any), +* ``last_test_result``: test result of the last step (see :ref:`sec_item_common`), +* ``ts_start_``: timestamp at the start of test item execution (see :ref:`sec_item_common`), +* ``ts_end_``: timestamp at the end of test item execution (see :ref:`sec_item_common`), +* ``ts_duration_``: duration of test item execution in seconds (see :ref:`sec_item_common`), +* ``cn_``: console test item result (see section :ref:`sec_console_test_item`), +* ``fn_``: py_func test item result (see section :ref:`sec_func_item`), +* ``cs_``: dialog_choices test item result (see section :ref:`sec_dialog_choices_test_item`), +* ``loop_param``: loop iterator (available from within a loop item, + see :ref:`sec_loop_item`), +* ``loop_index``: loop index (available from within a loop item, see + :ref:`sec_loop_item`), +* ``loop_count``: loop number (available from within a loop item, see + :ref:`sec_loop_item`). If the loop number its value is the python constant + ``inf``. + + +Test items entries +^^^^^^^^^^^^^^^^^^^^ + +All test items attributes can be global variable entry; +when using the entry ``$()`` before a key value, the corresponding +key entry is searched within the global variables dataset. + +References +^^^^^^^^^^^^^^ + +If the ``dialog_references`` test item has been included (see +:ref:`dialog_reference test item`), the global +dict will contain the result of this test item in the key ``tested_items``. + +Dialog values +^^^^^^^^^^^^^^^^ + +All dialog returned values are inserted in the global variables entries with the +key value being the test item name attribute (see :ref:`dialog_value test item`). + +.. _sec_variable_expansion: + +Paramers passing, variable expansion and evaluations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +One of the most useful functionalities for scalability and flexibility of the +.tum files is the ability to expanse variables at test runtime. + +It is done by replacing any occurrence of ``$(my_global)`` with the content of +the variable in the global variables entries (see :ref:`global variables`). + +The variable substitution is recursive and checks all the occurrences of the +``$(x)`` pattern in a string. + +It is also possible to perform evaluation of python substrings during parameters passing. +It is done by using the ``<@ expr @>`` pattern in a string. +`expr` may then be a correct python expression. + +Below are illustrated simple and more complicated cases of expansion and evaluation depending on +their pattern. + +.. code-block:: yaml + :caption: variables expansion and evaluation + + - let: + name: Dynamic variables expansion + key: $(test)_PASS + values: + - expanse_select: <@"$(expanse_select)".replace("o", "a")@> + - expanse_index: $(expanse_index_$(expanse_select)) + - expanse_table: $(expanse_table_$(expanse_select)) + - expanse_eval: <@$(expanse_index) == 1@> + +Test Items +-------------------- + +All *testium* steps are described in sequence as test items in the step +list of the main test item (and eventually of the loop test item). + +TUM file ``main`` item is itself a variant of test items with a name and an +step list attributes. + + + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + test_items/items_common_attributes.rst + test_items/check_test_item.rst + test_items/console_test_item.rst + test_items/dialog_choices_test_item.rst + test_items/dialog_image_test_item.rst + test_items/dialog_message_test_item.rst + test_items/dialog_note_test_item.rst + test_items/dialog_question_test_item.rst + test_items/dialog_reference_test_item.rst + test_items/dialog_value_test_item.rst + test_items/func_test_item.rst + test_items/git_test_item.rst + test_items/group_test_item.rst + test_items/json-rpc_test_item.rst + test_items/let_test_item.rst + test_items/loop_test_item.rst + test_items/plot_test_item.rst + test_items/report_test_item.rst + test_items/run_test_item.rst + test_items/sleep_test_item.rst + test_items/unittest_file_test_item.rst + + + +.. include:: includes.rst + +.. include:: templates.rst + +.. include:: reports.rst + +.. include:: other_features.rst diff --git a/doc/manual/testium_manual.pdf b/doc/manual/testium_manual.pdf new file mode 100644 index 0000000..53e6201 Binary files /dev/null and b/doc/manual/testium_manual.pdf differ diff --git a/package/Testium.desktop b/package/Testium.desktop new file mode 100644 index 0000000..a453ee0 --- /dev/null +++ b/package/Testium.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=Testium +Exec=testium +Icon=testium +Terminal=false +Categories=Utility;Automated test diff --git a/package/appimage/AppImageBuilder.yml b/package/appimage/AppImageBuilder.yml new file mode 100644 index 0000000..43e1b46 --- /dev/null +++ b/package/appimage/AppImageBuilder.yml @@ -0,0 +1,85 @@ +# appimage-builder recipe see https://appimage-builder.readthedocs.io for details +version: 1 + +script: + - echo "APP_VERSION={{APP_VERSION}}" >> $BUILDER_ENV + - rm -rf AppDir | true + # Make usr and icons dirs + - mkdir -p AppDir/usr/lib/python + - mkdir -p AppDir/usr/share/icons + - mkdir -p AppDir/usr/bin + # Copy the icon + - cp ../testium.png AppDir/usr/share/icons/ + +AppDir: + path: AppDir/ + + app_info: + id: testium + name: Testium + icon: testium + version: "{{APP_VERSION}}" + exec: usr/bin/python3 + exec_args: -m testium $@ + + runtime: + env: + SEQUENCER_REV: '{{APP_VERSION}}' + PYTHONPATH: $APPDIR/usr/lib/python3.11/site-packages:$APPDIR/usr/lib/python3.11 + QT_QPA_PLATFORM: xcb + + path_mappings: + - /usr/share/matplotlib/mpl-data/matplotlibrc:$APPDIR/etc/matplotlibrc + + apt: + arch: [amd64] + + allow_unauthenticated: true + + sources: + - sourceline: deb http://ftp.fr.debian.org/debian bookworm main non-free contrib + - sourceline: deb http://security.debian.org/debian-security bookworm-security + main contrib non-free + - sourceline: deb http://ftp.fr.debian.org/debian bookworm-updates main contrib + non-free + + include: + - libxcb-cursor0 + - python3 + - python3-distutils + - python3-pkg-resources + + exclude: [] + + files: + include: [] + + exclude: + - usr/share/man + - usr/share/doc/*/README.* + - usr/share/doc/*/changelog.* + - usr/share/doc/*/NEWS.* + - usr/share/doc/*/TODO.* + + after_bundle: | + # Set python 3.11 env + export PYTHONHOME=$TARGET_APPDIR/usr + export PYTHONPATH=$TARGET_APPDIR/usr/lib/python3.11/site-packages:$TARGET_APPDIR/usr/lib/python3.11 + export PATH=$TARGET_APPDIR/usr/bin:$PATH + + # Set python 3.11 as default + ln -fs python3.11 $TARGET_APPDIR/usr/bin/python3 + # Install pip + if [ ! -f "get-pip.py" ]; then curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py; fi + python3.11 get-pip.py --break-system-packages + + # Install application dependencies in AppDir + python3.11 -m pip install --break-system-packages --upgrade --isolated --no-input --ignore-installed --prefix=$TARGET_APPDIR/usr -r requirements.txt + + export PIP_CONFIG_FILE=$HOME/.pip/pip.conf + python3.11 -m pip install --break-system-packages --upgrade --isolated --no-input --ignore-installed --prefix=$TARGET_APPDIR/usr ../../src/dist/testium-{{APP_VERSION}}-py3-none-any.whl + + +AppImage: + arch: x86_64 + update-information: guess diff --git a/package/appimage/build.sh b/package/appimage/build.sh new file mode 100755 index 0000000..54efe00 --- /dev/null +++ b/package/appimage/build.sh @@ -0,0 +1,12 @@ +#!/usr/bin/bash + +export APP_VERSION=$(<../../src/VERSION) + +appimage-builder --recipe AppImageBuilder.yml + +RESULT=$? +if [ -n "$1" ] && [ "$1" = "install" ]; then + if [ $RESULT -eq 0 ]; then + install -v "testium-${APP_VERSION}-x86_64.AppImage" "${HOME}/.local/bin/testium" + fi +fi diff --git a/package/appimage/requirements.txt b/package/appimage/requirements.txt new file mode 100644 index 0000000..197a428 --- /dev/null +++ b/package/appimage/requirements.txt @@ -0,0 +1,3 @@ +tables +pandas +scapy \ No newline at end of file diff --git a/package/pyinstaller/build.sh b/package/pyinstaller/build.sh new file mode 100755 index 0000000..a54b313 --- /dev/null +++ b/package/pyinstaller/build.sh @@ -0,0 +1,16 @@ +#! /bin/env sh + +SCRIPT_DIR=$(realpath $( dirname "$0")) + +rm -r "${SCRIPT_DIR}/build" "${SCRIPT_DIR}/dist" + +pwd=$(pwd) +cd ${SCRIPT_DIR} +pyinstaller testium.spec +RESULT=$? +if [ -n "$1" ] && [ "$1" = "install" ]; then + if [ $RESULT -eq 0 ]; then + install -v "dist/testium" "${HOME}/.local/bin/" + fi +fi +cd $pwd diff --git a/package/pyinstaller/testium.spec b/package/pyinstaller/testium.spec new file mode 100644 index 0000000..8f7f7c8 --- /dev/null +++ b/package/pyinstaller/testium.spec @@ -0,0 +1,58 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['../../src/testium/__main__.py'], + pathex=['../../src/testium', + '../../src/testium/main_win/resources'], + binaries=[], + datas=[ ('../../src/VERSION', '.')], + hiddenimports=["git", + "interpreter", + "main_win", + "libs", + "libs.console", + "libs.termconsole", + "libs.console_ssh", + "libs.raw_tcp_console", + "libs.runtime_plot", + "matplotlib.backends.backend_pdf", + "telnetlib3", + "serial", + "yaml", + "pexpect", + "jinja2", + "colorama", + "matplotlib", + "junit_xml", + "lxml", + "tables", + "pandas",], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='testium', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/package/testium.png b/package/testium.png new file mode 100644 index 0000000..3485fcc Binary files /dev/null and b/package/testium.png differ diff --git a/release_note.txt b/release_note.txt new file mode 100644 index 0000000..703c22f --- /dev/null +++ b/release_note.txt @@ -0,0 +1,3 @@ +version 0.1 +============== +- Start of the project diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..da8131d --- /dev/null +++ b/run.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +#set -x + +SCRIPT_PATH="$(readlink -f "$0")" +SCRIPT_DIR=$(realpath $( dirname "$SCRIPT_PATH")) + +export PY_VENV_NAME=".venv" +export PY_VENV_DIR="$SCRIPT_DIR/test/tmp/$PY_VENV_NAME" +export REQ_PATH="$SCRIPT_DIR/src/requirements.txt" + +bash $SCRIPT_DIR/scripts/build_env.sh +source $SCRIPT_DIR/scripts/set_env.sh + +python3 "$SCRIPT_DIR/src/testium" $@ diff --git a/scripts/build_env.sh b/scripts/build_env.sh new file mode 100755 index 0000000..c35eafe --- /dev/null +++ b/scripts/build_env.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +if [ -z $PY_VENV_DIR ]; then + echo "PY_VENV_DIR must be defined" + exit -1 +fi + +if [ -z $REQ_PATH ]; then + echo "REQ_PATH must be defined" + exit -1 +fi + +if [ "$1" == "clean" ]; then + rm -Rf "$PY_VENV_DIR" +fi + +# Check if venv is installed +python3 -c "import venv" +if [ "$?" -ne 0 ]; then + echo "venv must be installed on the host distribution." + exit -1 +fi + +# Install the virtual environment if needed +if [ ! -d "$PY_VENV_DIR" ]; then + echo "Creation of the virtual environment" + python3 -m venv "$PY_VENV_DIR" + source "$PY_VENV_DIR/bin/activate" + pip install --extra-index-url https://pypi.python.org/pypi -r $REQ_PATH +fi diff --git a/scripts/qt_generate.sh b/scripts/qt_generate.sh new file mode 100755 index 0000000..8a02d57 --- /dev/null +++ b/scripts/qt_generate.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +SCRIPT_DIR=$(realpath $( dirname "$0")) +MAIN_DIR=${SCRIPT_DIR}/../src/testium + +EXE_UI=pyside6-uic +EXE_RCC=pyside6-rcc + +UIFILES="main_win/testium_core_win.ui" +UIFILES+=" main_win/about_win/about_win.ui" +UIFILES+=" main_win/preference_win/preference_core_win.ui" +UIFILES+=" main_win/f1_win/f1_win_core.ui" +UIFILES+=" interpreter/test_items/dialog_choices_files/choices_dialog_win.ui" +UIFILES+=" interpreter/test_items/dialog_image_files/dialog_image_win.ui" +UIFILES+=" interpreter/test_items/dialog_note_files/dialog_note_win.ui" +UIFILES+=" interpreter/test_items/dialog_sleep_files/dialog_sleep_win.ui" +UIFILES+=" interpreter/test_items/dialog_value_files/dialog_value_win.ui" +UIFILES+=" interpreter/test_items/tested_references_files/tested_refs_win.ui" + +RCFILES="main_win/resources/testium_core_win.qrc" +RCFILES+=" main_win/resources/about_win.qrc" +RCFILES+=" main_win/resources/f1_win.qrc" + +for f in ${UIFILES} +do + ${EXE_UI} "${MAIN_DIR}/$f" > "${MAIN_DIR}/${f%.*}.py" +done + +for f in ${RCFILES} +do + ${EXE_RCC} "${MAIN_DIR}/$f" > "${MAIN_DIR}/${f%.*}_rc.py" +done diff --git a/scripts/set_env.sh b/scripts/set_env.sh new file mode 100755 index 0000000..98eb22d --- /dev/null +++ b/scripts/set_env.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +if [ -z $PY_VENV_DIR ]; then + echo "PY_VENV_NAME must be defined" + exit -1 +fi + +source "$PY_VENV_DIR/bin/activate" diff --git a/src/VERSION b/src/VERSION new file mode 100644 index 0000000..ceab6e1 --- /dev/null +++ b/src/VERSION @@ -0,0 +1 @@ +0.1 \ No newline at end of file diff --git a/src/pyproject.toml b/src/pyproject.toml new file mode 100644 index 0000000..539136b --- /dev/null +++ b/src/pyproject.toml @@ -0,0 +1,38 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name="testium" +requires-python = ">=3.11" +authors = [ + {name = "François Dausseur", email = "francois@beafrancois.fr"}, +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python" +] +dependencies = [ + "setuptools", + "pyside6", + "pyyaml", + "pyserial", + "colorama", + "matplotlib", + "telnetlib3", + "jinja2", + "pexpect", + "gitpython", + "junit-xml", + "lxml", +] +dynamic = ["version"] + +[project.scripts] +testium = "testium:main" + +[tool.setuptools.package-data] +docpkg = ["*.pdf"] + +[tool.setuptools.dynamic] +version = {file = ["VERSION"]} diff --git a/src/requirements.txt b/src/requirements.txt new file mode 100644 index 0000000..677c58f --- /dev/null +++ b/src/requirements.txt @@ -0,0 +1,12 @@ +setuptools +pyside6 +pyserial +telnetlib3 +pyyaml +pexpect +gitpython +jinja2 +colorama +matplotlib +junit-xml +lxml \ No newline at end of file diff --git a/src/testium/__init__.py b/src/testium/__init__.py new file mode 100755 index 0000000..599c7dc --- /dev/null +++ b/src/testium/__init__.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +import sys +import os +import multiprocessing +from pathlib import Path + +ourpath = Path(__file__) +ourpath = ourpath.resolve() +sys.path.append(os.path.abspath(ourpath.parent)) +from interpreter.utils.eval import evaluate + +import interpreter.utils.constants as cst + +def main(): + # This line sets the method for the "Process" function. It is required for Linux + # support of the test dialogs. + multiprocessing.set_start_method('spawn') + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--version", + help="Returns the version of testium", action='store_true') + parser.add_argument("-b", "--batch-execution", + help="Executes the test in batch mode", action='store_true') + parser.add_argument("-m", "--terminal", + help="Starts terminal mode", action='store_true') + parser.add_argument("-o", "--no-color", + help="Deactivates stdout colors in batch and terminal mode", action='store_true') + parser.add_argument("-c", "--config-file", help="Configuration file", + nargs='+', + default=[]) + parser.add_argument("-r", "--run-and-close", action='store_true', + help="Runs the test then closes the application", + required=False) + parser.add_argument("-l", "--log-file", help="log file name", default='') + parser.add_argument("-d", "--define", + help="Configuration passed to the executed tests.", + nargs='+', + type=str, + action='append', + default=[]) + parser.add_argument("-p", "--report-file", + help="report file name", default='') + parser.add_argument("-t", "--report-type", help="report file type", + choices=cst.REP_TYPES, + default='') + parser.add_argument("-n", "--report-pattern", help="report file pattern", + nargs='+', + default=[]) + parser.add_argument("-i", "--include-path", + help="Python modules search path", + nargs='+', + default=[]) + parser.add_argument("-g", "--debug", action='store_true', + help="GUI debug mode", + required=False) + + parser.add_argument( + 'test_file', help='the test script file', nargs='?', default='') + args = parser.parse_args() + + if len(args.include_path)>0: + for p in args.include_path: + sys.path.append(p) + + defines = {} + defs = [] + for define in args.define: + defs += define + for define in defs: + d = define.split('=', 1) + if d[0].strip() != '': + if len(d) > 1: + _, edef = evaluate(d[1]) + defines.update({d[0].strip(): edef}) + else: + defines.update({d[0].strip(): True}) + + cf = [] + for c in args.config_file: + conf = c.strip('\"').strip("\'") + if not os.path.isabs(conf): + conf = os.path.join(os.getcwd(), conf) + cf.append(conf) + tf = args.test_file.strip('\"').strip("\'") + rf = args.report_file.strip('\"').strip("\'") + lf = args.log_file.strip('\"').strip("\'") + pn = [] + for p in args.report_pattern: + pn.append(p.strip('\"').strip("\'")) + + if args.version: + # initilization of the settings (used to know if git supported) + import interpreter.utils.settings as prefs + prefs.init() + + from interpreter.utils.version import get_testium_version + print(get_testium_version()) + + elif args.terminal: + import select + from interpreter.terminal import Terminal + + if (lf != '') or (rf != '') or (tf != '') or (pn != []): + print('"-l", "-p", "-t", "-n" options are not supported in this mode.') + + t = Terminal(os.getcwd(), cf, defines, args.no_color) + + loop = 1 + while loop: + try: + loop = 0 + t.cmdloop() + except KeyboardInterrupt: + print("\n") + loop = 1 + except Exception as exc: + if str(exc) == 'quit': + break + print(exc) + loop = 1 + + + elif args.batch_execution: + if (lf != ''): + print('"-l" option is not supported in this mode.') + + from interpreter.batch import Batch + b = Batch(tf, cf, defines, rf, args.report_type, pn, args.no_color) + + else: + from main_win.testium_win import MainWin + MainWin(tf, config_files=cf, + run=args.run_and_close, + log_file=lf, + defines=defines, + report=rf, + report_type=args.report_type, + report_pattern=pn, + debug=args.debug) diff --git a/src/testium/__main__.py b/src/testium/__main__.py new file mode 100644 index 0000000..1f37e3a --- /dev/null +++ b/src/testium/__main__.py @@ -0,0 +1,25 @@ +import os, sys +import logging +import traceback + +logging.basicConfig( + level=logging.ERROR, + filename=os.path.join(os.path.normpath(os.getcwd()), "crash.txt"), + format="%(asctime)s - %(levelname)s - %(message)s" +) + +def exception_handler(typ_exc, value, trbk): + """Testium Exception handling""" + logging.error("An unmanaged exception occured", exc_info=(typ_exc, value, trbk)) + print(f"Critical failure : '{value}'.") + tb = traceback.format_exception(typ_exc, value, trbk) + print("".join(tb[-4:])) + +sys.excepthook = exception_handler + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) + +from testium import main + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/src/testium/interpreter/__init__.py b/src/testium/interpreter/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/batch.py b/src/testium/interpreter/batch.py new file mode 100644 index 0000000..3deb722 --- /dev/null +++ b/src/testium/interpreter/batch.py @@ -0,0 +1,98 @@ +import os +import sys +import platform +from time import sleep +from signal import signal, SIGINT +from queue import Empty +from multiprocessing import Queue + +from interpreter.process import TestProcess +from interpreter.utils.test_ctrl import TestSetController +from interpreter.utils.tum_except import ETUMFileError +from interpreter.utils.stdout_redirect import stdio_redir + + +class Batch: + def __init__( + self, + test_file, + config_files, + defines, + report_file, + report_type, + report_pattern, + no_color, + ): + try: + try: + file_name = os.path.abspath(test_file) + initial_dir = os.path.dirname(file_name) + + if not os.path.isdir(initial_dir): + raise ETUMFileError("Could not find %s directory" % (initial_dir)) + if not os.path.isfile(file_name): + raise ETUMFileError("Could not find %s file" % (file_name)) + + if not file_name: + raise ETUMFileError("No file to load") + + outstream = sys.stdout + if "Linux" in platform.system() and not no_color: + try: + from interpreter.utils.termlog import TermLog + + outstream = TermLog(sys.stdout) + stdio_redir.redirect(outstream) + except ModuleNotFoundError: + print( + "Colored console not supported by the system." + + " If you want it, please install colorama module" + ) + + signal(SIGINT, self.sigint_handler) + + msg_queue = Queue() + self.tst_ctrl = TestSetController() + tst_proc = TestProcess( + file_name, + msg_queue, + self.tst_ctrl, + config_files, + defines, + ) + tst_proc.start() + + while not self.tst_ctrl.control("loaded"): + sleep(0.1) + + self.tst_ctrl.control( + "report", + rep_path=report_file, + rep_type=report_type, + pattern=report_pattern, + ) + # Start test execution + self.tst_ctrl.control("execute") + + # Wait for the "finished" signal + while True: + try: + m = msg_queue.get(timeout=0.2) + if m.get("id", None) is None: + # No id -> finished + break + except Empty: + continue + + # Close the process and wait for termination + self.tst_ctrl.control("close") + tst_proc.join() + + except Exception as e: + print("Exception encountered:") + print(str(e)) + finally: + stdio_redir.restore() + + def sigint_handler(self, signal_received, frame): + self.tst_ctrl.control("stop") diff --git a/src/testium/interpreter/process.py b/src/testium/interpreter/process.py new file mode 100644 index 0000000..1e390da --- /dev/null +++ b/src/testium/interpreter/process.py @@ -0,0 +1,230 @@ +import os +import sys +from multiprocessing import Process, Queue, Pipe +from queue import Empty +from threading import Thread +from time import sleep +import traceback + +import libs.testium as tm +from interpreter.utils.params import expanse +from interpreter.utils.string_queue import StringQueue +from interpreter.utils.test_ctrl import TestSetController +from interpreter.utils.test_init import ( + env_init, + load_test, + test_run_init, + test_run_header, + locate_report_file, + backup_gd, + restore_gd, +) +from interpreter.test_set import TestSet +from interpreter.utils.stdout_redirect import stdio_redir +from interpreter.utils.tum_except import print_exception +from interpreter.utils.func_exec import func_call_init +from interpreter.utils.api_srv import api_request + + +class TestProcess(Process): + def __init__( + self, + file_name, + status_queue: Queue, + tst_control: TestSetController, + config_files, + defines, + ) -> None: + super().__init__() + self.__fname = file_name + self.__squeue = status_queue + self.__tctrl = tst_control + self.__cfgf = config_files + self.__defs = defines + self.__exec = False + self.__loaded = False + self.__closed = False + self.__pconn = self.redirect_stdout() + + def run(self): + try: + try: + # Thread for stdout redirection + in_stream = StringQueue() + self.redir = Thread(target=self.send_stdout, args=[in_stream]) + self.redir.daemon = True + stdio_redir.redirect(in_stream) + self.redir.start() + test_dir = os.path.dirname(os.path.abspath(self.__fname)) + + env_init() + + # Load the test file + test_dict, cfg_files = load_test( + self.__fname, test_dir, self.__cfgf, self.__defs) + + # Backup the global dict in case of restart of the test + gdict = backup_gd() + + # The path of the test file is included in PYTHONPATH + sys.path.append(os.path.dirname(self.__fname)) + + # Now create the test structure and objects + test_set = TestSet(self.__fname, test_dict, self.__squeue) + + # Thread for incoming control commands + self.init_commands(test_set) + self.cmd_th = Thread( + target=self.process_control_commands, args=[self.__tctrl]) + self.cmd_th.daemon = True + self.cmd_th.start() + + test_set.report_path = locate_report_file(test_set.report_path) + + # Python functions call subprocess initialization + fproc = func_call_init(tm.gd("python_path", ""), api_request) + + self.__loaded = True + + while True: + # waiting for a control command + while (not self.__exec) and (not self.__closed): + sleep(0.2) + # if close is required + if self.__closed: + break + # Test is started + try: + try: + try: + test_run_init() + print(test_run_header()) + fproc.start() + fproc.wait_ready() + test_set.execute() + finally: + if test_set.success(): + print("Test run success.") + else: + print("Test run failed.") + + test_set.run_post_exec() + finally: + # Stop function execution process + fproc.stop() + fproc.join() + self.__exec = False + # Sends signal to the GUI + self.send_finished() + restore_gd(gdict) + except Exception as e: + print_exception(e) + + except Exception as e: + print_exception(e) + + finally: + self.exit() + + def init_commands(self, test_set: TestSet): + self.__cmds = { + "pause": test_set.pause, + "cont": test_set.cont, + "tree": test_set.tree, + "report": test_set.set_report, + "stop": test_set.stop, + "loaded": self.loaded, + "execute": self.execute, + "add_breakpoint": test_set.addBreakpoint, + "del_breakpoint": test_set.delBreakpoint, + "skipped_state": test_set.getSkippedState, + "enabled_state": test_set.getEnabledState, + "process_param": self.process_param, + "set_test_outputs": self.set_test_outputs, + "set_enabled_state": test_set.setEnabledState, + "check_uncheck_all": test_set.checkUncheckAll, + "get_folded": test_set.getFolded, + "close": self.close, + } + + def exit(self): + self.__closed = True + if hasattr(self, "cmd_th"): + self.cmd_th.join() + self.redir.join() + stdio_redir.restore() + stdio_redir.stop() + + def send_finished(self): + status = {'id': None, + 'name': "test_process", + 'status': 'finished'} + self.__squeue.put(status) + + def execute(self): + self.__exec = True + + def loaded(self): + return self.__loaded + + def close(self): + self.__closed = True + + def process_param(self, param): + return expanse(param) + + def set_test_outputs(self, outputs: list): + tm.setgd("test_outputs", outputs) + + def process_control_commands(self, tctrl): + term = False + while (not term) and (not self.__closed): + cmd = "" + res = None + args = {} + try: + qcontent = tctrl.ctrl.get(timeout=0.2) + try: + cmd = list(qcontent.keys())[0] + args = qcontent[cmd] + if cmd == "exit": + term = True + break + try: + if isinstance(args, dict): + res = {cmd: self.__cmds[cmd](**args)} + elif args is None: + res = {cmd: self.__cmds[cmd]()} + except: + res = (None, "function unknown or call failed") + except: + res = (None, "Malformed command") + tctrl.resp.put(res) + except Empty: + continue + + def redirect_stdout(self): + pipe = pconn, cconn = Pipe() + redir = Thread(target=self.capture_stdout, args=(cconn,)) + redir.daemon = True + redir.start() + return pconn + + def send_stdout(self, stream): + while not self.__closed: + try: + data = stream.read(block=True, timeout=0.2) + if data != "": + self.__pconn.send(data) + except RuntimeError: + continue + + def capture_stdout(self, cconn): + while True: + try: + # read the pipe data + data = cconn.recv() + print(data, end="") + except EOFError: + # exit the loop is the pipe is closed + break diff --git a/src/testium/interpreter/terminal.py b/src/testium/interpreter/terminal.py new file mode 100644 index 0000000..bb50c64 --- /dev/null +++ b/src/testium/interpreter/terminal.py @@ -0,0 +1,243 @@ +try: + import readline +except: + pass +from cmd import Cmd +import os +import sys +from yaml import load, Loader +import functools +import platform +import types +import inspect + +# test modules +from interpreter.utils.test_init import ( + env_init, prepare_global, set_standard_gd_keys, + update_global, test_run_init, test_run_header, load_test) +from interpreter.utils.globdict import (global_dict) +import libs.testium as tm +from interpreter.utils.constants import TestItemType as cst +from interpreter.test_report.test_report import TestReport + + +class FakeQueue: + def put(self, arg): + pass + + +def func(self, args): + if not args.startswith("{"): + args = "{"+args+"}" + y = load(args, Loader) + obj = self.current_item(y, status_queue=FakeQueue()) + obj.report = self.report + res = obj.execute() + if not (res.value is None): + print('result : {}'.format(res.value)) + print(res.test_result) + + +class Terminal(Cmd): + SUPPORTED_TESTS = [ + cst.TYPE_SLEEP, + cst.TYPE_LET, + cst.TYPE_FUNCTION, + cst.TYPE_CONSOLE, + cst.TYPE_IMAGE_DLG, + cst.TYPE_MESSAGE_DLG, + cst.TYPE_QUESTION_DLG, + cst.TYPE_VALUE_DLG, + ] + + SUPPORTED_GROUPS = [ + cst.TYPE_GROUP, + cst.TYPE_CYCLE + ] + + def __init__(self, working_dir, config_files, defines, no_color): + super().__init__() + self.working_dir = working_dir + self.config_files = config_files + self.current_item = None + report = TestReport(None) + self.report = report + + env_init() + prepare_global() + # Define the builtin variables + set_standard_gd_keys("Unnamed", self.working_dir, '', config_files) + update_global([], defines) + + # creation of the functions + for tst in self.SUPPORTED_TESTS: + meth_name = "do_" + tst.item_cmd + # copy of the function + f = types.FunctionType(func.__code__, func.__globals__, name=meth_name, + argdefs=func.__defaults__, + closure=func.__closure__) + f = functools.update_wrapper(f, func) + f.__kwdefaults__ = func.__kwdefaults__ + f.__doc__ = tst.item_class.__doc__ + setattr(self, meth_name, types.MethodType(f, self)) + + test_run_init() + self.prompt = "(testium)~ " + + # display header + print(test_run_header()) + # redirect output + + if 'Linux' in platform.system() and not no_color: + from interpreter.utils.stdout_redirect import stdio_redir + try: + from interpreter.utils.termlog import TermLog + stdio_redir.redirect(TermLog(sys.stdout)) + except ModuleNotFoundError: + tm.print_info('Colored console not supported by the system.' + + ' If you want it, please install colorama module') + + def precmd(self, line: str) -> str: + c = line.split(" ", 1)[0].strip() + self.current_item = None + for tst in self.SUPPORTED_TESTS: + if c == tst.item_cmd: + self.current_item = tst.item_class + break + return line + + def load_test_recursively(self, tree_parent, parent_seq, status_queue): + try: + parent_seq_name = parent_seq['name'] + except KeyError: + parent_seq['name'] = "sequence" + except TypeError: + raise Exception("Syntax error in an item of type {} which is a child of {}".format( + tree_parent.type(), tree_parent.parent().name())) + try: + parent_seq_actions = parent_seq['steps'] + except KeyError: + raise Exception(' No action list found for "%s" sequence' + % (parent_seq_name)) + # if action is a dictionary , we assume it is a single action + # that has not been nested in a list, so do it + if isinstance(parent_seq_actions, (dict)): + parent_seq_actions = [parent_seq_actions] + if not isinstance(parent_seq_actions, (list, tuple)): + raise Exception('Actions list not valid.') + # first we merged to the same level 'sequence dict entries and list within the list + counter = 0 + test_dir = tm.gd('test_directory') + while (counter < len(parent_seq_actions)): + action = parent_seq_actions[counter] + # if action is a list raise up to the the same level, + # ie insert action element into the parent_seq_actions + if isinstance(action, (list, tuple)): + parent_seq_actions[counter:counter+1] = action + continue + # if action is a NoneType skip and continue + # (when pointing to an unused alias for instance) + if action is None: + counter += 1 + continue + # if action is a sequence we insert its entry into the action list + if 'sequence' in action: + parent_seq_actions[counter:counter+1] = action['sequence'] + continue + else: + executed = False + for it in [*self.SUPPORTED_TESTS, *self.SUPPORTED_GROUPS]: + if it.item_cmd in action: + executed = True + item = (it.item_class)(action[it.item_cmd], + tree_parent, + status_queue) + # check for sequence type: + if it.item_cmd == cst.TYPE_UNITTEST_FILE.item_cmd: + item.setTestDir(test_dir) + item.load() + elif ((it.item_cmd == cst.TYPE_CYCLE.item_cmd) or + (it.item_cmd == cst.TYPE_GROUP.item_cmd)): + self.load_test_recursively( + item, action[it.item_cmd], status_queue) + + if not executed: + raise Exception('action type is not known "{}"'.format( + list(action.keys())[0])) + + counter += 1 + + def __setReportRecursively(self, parent): + for i in range(parent.childCount()): + parent.child(i).report = self.report + self.__setReportRecursively(parent.child(i)) + + def setReport(self, root_item): + root_item.report = self.report + self.__setReportRecursively(root_item) + + def get_names(self): + memb = inspect.getmembers(self) + return [n[0] for n in memb if (inspect.ismethod(n[1]) and n[0].startswith("do_"))] + + def do_load(self, args): + """load function. + +This function loads and executes a testium sub-script. + +The loaded sequence can't be a main testium script ("testium -b" option is +defined for such a usage). + +Accepted files are with extension "*.tum". + +usage: + load path/to/my/sequence.tum +""" + file = args.strip() + suff = file[-4:] + if not suff in ['.tum']: + raise Exception('Wrong input file extension') + + if not (os.path.exists(file) and os.path.isfile(file)): + raise Exception( + '"{}" does not exist or is not a file.'.format(file)) + + d, _ = load_test(file) + if not isinstance(d, list): + raise Exception( + "The file root object must be a list. A \"main\" tum can't be loaded from here (use batch mode instead).") + + if (len(d) == 1) and isinstance(d[0], dict) and (not d[0].get('sequence', None) is None): + d = d[0]['sequence'] + + sq = FakeQueue() + root_item = (cst.TYPE_ROOT.item_class)( + dict_item={'steps': d}, status_queue=sq) + self.load_test_recursively(root_item, {'steps': d}, sq) + self.setReport(root_item) + res = root_item.execute() + if not (res.value is None): + print('"{}" execution overall result: {}'.format(file, res.value)) + print(res.test_result) + + def do_gd(self, args): + """Variables lists and values. + +usage: + gd + gd home +""" + if args != '': + res = tm.gd(args, None) + if res is None: + raise Exception( + 'the variable: "{}" has not been found.'.format(args)) + print(res) + return + + for k in global_dict.keys(): + print('{}: {}'.format(str(k), str(global_dict[k]))) + + def do_quit(self, args): + '''Quit the application.''' + raise Exception('quit') diff --git a/src/testium/interpreter/test_items/__init__.py b/src/testium/interpreter/test_items/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_choices_files/__init__.py b/src/testium/interpreter/test_items/dialog_choices_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog.py b/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog.py new file mode 100644 index 0000000..cac9e35 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog.py @@ -0,0 +1,254 @@ +import sys +import os +from multiprocessing import freeze_support +from itertools import chain + +from PySide6.QtGui import QIcon, QPixmap +from PySide6.QtWidgets import QApplication, QDialog, QDialogButtonBox +from PySide6.QtCore import Qt, QSettings, QSize +from PySide6.QtGui import QFont, QFontInfo +from PySide6.QtWidgets import QTreeWidgetItem + +# try: +from interpreter.test_items.dialog_choices_files import choices_dialog_win + +# except: +# import choices_dialog_win + + +def __iter__QTreeWidgetItem(self): + for item in chain(*map(iter, self.children())): + yield item + yield self + + +def childrenQTreeWidgetItem(self): + return [self.child(i) for i in range(self.childCount())] + + +QTreeWidgetItem.name = "" +QTreeWidgetItem.__iter__ = __iter__QTreeWidgetItem +QTreeWidgetItem.children = childrenQTreeWidgetItem + + +class ChoicesTreeItem(QTreeWidgetItem): + + def __init__(self, parent, dic, default_icon): + super().__init__() + self.name = dic.get("name", "") + self.setFlags(self.flags() | Qt.ItemIsUserCheckable) + self.setCheckState(0, Qt.Checked) + parent.addChild(self) + self._default_icon = default_icon + self.setRowIcon(dic.get("icon", "")) + + def setRowIcon(self, icon_path): + icon = None + if icon_path != "": + if os.path.exists(icon_path): + try: + pmap = QPixmap(icon_path) + icon = QIcon(pmap) + self.setIcon(0, icon) + except: + # we don't want to crash for an icon + print(f"WARN Impossible to load '{icon_path}' icon.") + if (icon is None) and (self._default_icon is not None): + self.setIcon(0, self._default_icon) + + +class ChoicesDialog(QDialog, choices_dialog_win.Ui_Dialog): + def __init__(self): + super().__init__() + self._default_icon = None + self.setupUi(self) + self.choicesView.setColumnCount(2) + self.choicesView.setAlternatingRowColors(True) + self.choicesView.setIconSize(QSize(24, 24)) + font = QFont() + font.setPointSize(12) + self.choicesView.setFont(font) + self.choicesView.setAlternatingRowColors(True) + self.choicesView.header().setVisible(True) + self.choicesView.header().setDefaultSectionSize(50) + self.choicesView.header().setMinimumSectionSize(50) + self.choicesView.header().setStretchLastSection(False) + + self.choicesView.headerItem().setText(0, "name") + self.choicesView.setColumnWidth(0, 300) + self.choicesView.headerItem().setText(1, "description") + self.choicesView.setColumnWidth(1, 800) + self.root = self.choicesView.invisibleRootItem() + + def connect_checked(self): + self.choicesView.itemChanged.connect(self.on_testChecked) + + def apply_default_icon(self, path): + if (path is not None) and os.path.exists(path): + try: + pmap = QPixmap(path) + self._default_icon = QIcon(pmap) + except: + # we don't want to crash for an icon + print(f"WARN Impossible to load '{path}' icon.") + elif path is not None: + print("Icon not loaded since it is not a valid path.") + + def populate_tree(self, parent, choices): + if not isinstance(choices, list): + return + + for choice in choices: + name = choice.get("name", "") + desc = choice.get("description", "") + if name == "": + continue + tree_item = ChoicesTreeItem(parent, choice, self._default_icon) + tree_item.setText(0, name) + tree_item.setText(1, desc) + sub_choices = choice.get("choices", None) + if sub_choices is not None: + self.populate_tree(tree_item, sub_choices) + + def __foldRecursively(self, tree_item, is_fold): + for i in range(tree_item.childCount()): + if tree_item.child(i).childCount() > 0: + tree_item.child(i).setExpanded(not is_fold) + self.__foldRecursively(tree_item.child(i), is_fold) + + def foldAll(self, is_fold): + self.__foldRecursively(self.root, is_fold) + + def on_testChecked(self, item, index): + self.updateTreeCheckState(item, Qt.Checked == item.checkState(0)) + + def updateTreeCheckState(self, tree_item, is_checked): + # treat the case of the invisible root + if tree_item is self.root: + for i in range(self.root.childCount()): + self.updateTreeCheckState(self.root.child(i), is_checked) + else: + if is_checked: + tree_item.setCheckState(0, Qt.Checked) + else: + tree_item.setCheckState(0, Qt.Unchecked) + + for i in range(tree_item.childCount()): + self.updateTreeCheckState(tree_item.child(i), is_checked) + + def checked_state(self, parent=None): + if parent is None: + return self.checked_state(self.root) + + sub_choices = [] + for i in range(parent.childCount()): + sub_choices.append(self.checked_state(parent.child(i))) + + if parent is self.root: + res = sub_choices + else: + res = { + "name": parent.name, + "checked": Qt.Checked == parent.checkState(0), + } + if len(sub_choices) > 0: + res.update({"choices": sub_choices}) + + return res + + def apply_checked(self, choice, parent=None): + if parent is None: + self.apply_checked(choice, self.root) + return + + if not isinstance(choice, list): + return + + if len(choice) != parent.childCount(): + return + + for i in range(parent.childCount()): + if not isinstance(choice[i], dict): + return + if choice[i].get("checked", True) == True: + parent.child(i).setCheckState(0, Qt.Checked) + else: + parent.child(i).setCheckState(0, Qt.Unchecked) + + sub_choices = choice[i].get("choices", None) + if sub_choices is not None: + self.apply_checked(sub_choices, parent.child(i)) + + +def main(args, conn=None): + SettingsCompagny = "Testium" + SettingsApplication = "testium_choices_dlg_" + args[0] + SettingsLastChoices = "last_choice" + success = True + app = QApplication() + d = ChoicesDialog() + d.setFixedSize(800, 600) + d.setWindowFlags(Qt.WindowStaysOnTopHint) + d.setWindowTitle(args[0]) + d.labelDialog.setText(args[1]) + d.labelDialog.setAlignment(Qt.AlignCenter) + d.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) + d.apply_default_icon(args[3]) + d.populate_tree(d.root, args[2]) + d.foldAll(False) + + settings = QSettings(SettingsCompagny, SettingsApplication) + last_choice = settings.value(SettingsLastChoices, "") + + d.apply_checked(last_choice) + + d.connect_checked() + + d.choicesView.setFocus() + dres = d.exec() + + if dres == QDialog.Rejected: + success = False + + # build the answer: + + result = d.checked_state() + + if conn: + settings.setValue(SettingsLastChoices, result) + conn.send([result, success]) + conn.close() + else: + print(result, end="") + + if hasattr(sys, "frozen"): + # all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + """dummyStream behaves like a stream but does nothing.""" + + def __init__(self): + pass + + def write(self, data): + pass + + def read(self, data): + pass + + def flush(self): + pass + + def close(self): + pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog_win.py b/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog_win.py new file mode 100644 index 0000000..8762d07 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog_win.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'choices_dialog_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QHeaderView, QLabel, QSizePolicy, QTreeWidget, + QTreeWidgetItem, QVBoxLayout, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(481, 386) + Dialog.setModal(True) + self.verticalLayout_2 = QVBoxLayout(Dialog) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout = QVBoxLayout() + self.verticalLayout.setObjectName(u"verticalLayout") + self.labelDialog = QLabel(Dialog) + self.labelDialog.setObjectName(u"labelDialog") + font = QFont() + font.setPointSize(22) + self.labelDialog.setFont(font) + + self.verticalLayout.addWidget(self.labelDialog) + + self.choicesView = QTreeWidget(Dialog) + self.choicesView.setObjectName(u"choicesView") + self.choicesView.setColumnCount(0) + + self.verticalLayout.addWidget(self.choicesView) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + + self.verticalLayout.addWidget(self.buttonBox) + + + self.verticalLayout_2.addLayout(self.verticalLayout) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) + self.labelDialog.setText(QCoreApplication.translate("Dialog", u"TextLabel", None)) + # retranslateUi + diff --git a/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog_win.ui b/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog_win.ui new file mode 100644 index 0000000..537ec1a --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_choices_files/choices_dialog_win.ui @@ -0,0 +1,83 @@ + + + Dialog + + + + 0 + 0 + 481 + 386 + + + + Dialog + + + true + + + + + + + + + 22 + + + + TextLabel + + + + + + + 0 + + + + + + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 240 + 362 + + + 240 + 192 + + + + + buttonBox + rejected() + Dialog + reject() + + + 240 + 362 + + + 240 + 192 + + + + + diff --git a/src/testium/interpreter/test_items/dialog_image_files/__init__.py b/src/testium/interpreter/test_items/dialog_image_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_image_files/dialog_image.py b/src/testium/interpreter/test_items/dialog_image_files/dialog_image.py new file mode 100644 index 0000000..508ca58 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_image_files/dialog_image.py @@ -0,0 +1,72 @@ +import sys +import os + +from PySide6.QtCore import (Qt) +from PySide6.QtWidgets import (QApplication, QDialog) +from PySide6 import (QtGui) + +try: + from interpreter.test_items.dialog_image_files import dialog_image_win +except: + import dialog_image_win +from multiprocessing import freeze_support + +class TestDialogWindow(QDialog, dialog_image_win.Ui_Dialog): + def __init__(self): + super().__init__() + self.setupUi(self) + +def main(args, conn): + success = True + app = QApplication(args) + d = TestDialogWindow() + d.setFixedSize(700,600) + d.setWindowFlags(Qt.WindowStaysOnTopHint) + d.setWindowTitle(args[0]) + d.labelDialog.setText(args[1]) + + image = QtGui.QImage(args[2]) + + if image.isNull(): + print('Image %s could not be loaded...' % (args[2])) + success = False + + else: + image2 = image.scaled(d.labelImage.width(), d.labelImage.height(), + aspectMode=Qt.KeepAspectRatio) + + d.labelImage.setPixmap(QtGui.QPixmap.fromImage(image2)) + + dres = d.exec() + + if dres == QDialog.Rejected: + success = False + + if conn is not None: + conn.send(success) + conn.close() + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + + +if __name__ == '__main__': + main(sys.argv[1:], None) + + + diff --git a/src/testium/interpreter/test_items/dialog_image_files/dialog_image_win.py b/src/testium/interpreter/test_items/dialog_image_files/dialog_image_win.py new file mode 100644 index 0000000..131fbc6 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_image_files/dialog_image_win.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'dialog_image_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QLabel, QSizePolicy, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.setWindowModality(Qt.WindowModal) + Dialog.resize(700, 600) + Dialog.setSizeGripEnabled(False) + Dialog.setModal(True) + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setGeometry(QRect(10, 560, 681, 32)) + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) + self.labelDialog = QLabel(Dialog) + self.labelDialog.setObjectName(u"labelDialog") + self.labelDialog.setGeometry(QRect(10, 10, 681, 71)) + font = QFont() + font.setPointSize(20) + self.labelDialog.setFont(font) + self.labelDialog.setAlignment(Qt.AlignCenter) + self.labelDialog.setWordWrap(True) + self.labelImage = QLabel(Dialog) + self.labelImage.setObjectName(u"labelImage") + self.labelImage.setGeometry(QRect(10, 80, 681, 471)) + self.labelImage.setAlignment(Qt.AlignCenter) + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) + self.labelDialog.setText(QCoreApplication.translate("Dialog", u"TextLabel", None)) + self.labelImage.setText("") + # retranslateUi + diff --git a/src/testium/interpreter/test_items/dialog_image_files/dialog_image_win.ui b/src/testium/interpreter/test_items/dialog_image_files/dialog_image_win.ui new file mode 100644 index 0000000..1346e1b --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_image_files/dialog_image_win.ui @@ -0,0 +1,117 @@ + + + Dialog + + + Qt::WindowModal + + + + 0 + 0 + 700 + 600 + + + + Dialog + + + false + + + true + + + + + 10 + 560 + 681 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 681 + 71 + + + + + 20 + + + + TextLabel + + + Qt::AlignCenter + + + true + + + + + + 10 + 80 + 681 + 471 + + + + + + + Qt::AlignCenter + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/testium/interpreter/test_items/dialog_msg_files/__init__.py b/src/testium/interpreter/test_items/dialog_msg_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_msg_files/msg_dialog.py b/src/testium/interpreter/test_items/dialog_msg_files/msg_dialog.py new file mode 100644 index 0000000..0bcfc02 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_msg_files/msg_dialog.py @@ -0,0 +1,36 @@ +import sys +import os + +from PySide6.QtWidgets import (QApplication, QDialog) +from PySide6.QtCore import (Qt) +from PySide6.QtWidgets import QMessageBox +from multiprocessing import freeze_support + +def main(args): + app = QApplication(sys.argv) + reply = QMessageBox.information(None, args[0], args[1], QMessageBox.Ok) + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + + +if __name__ == '__main__': + main(sys.argv[1:]) + + + diff --git a/src/testium/interpreter/test_items/dialog_note_files/__init__.py b/src/testium/interpreter/test_items/dialog_note_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_note_files/dialog_note_win.py b/src/testium/interpreter/test_items/dialog_note_files/dialog_note_win.py new file mode 100644 index 0000000..885ad9a --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_note_files/dialog_note_win.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'dialog_note_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QGridLayout, QLabel, QSizePolicy, QTextEdit, + QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(501, 337) + Dialog.setModal(True) + self.gridLayout = QGridLayout(Dialog) + self.gridLayout.setObjectName(u"gridLayout") + self.labelDialog = QLabel(Dialog) + self.labelDialog.setObjectName(u"labelDialog") + font = QFont() + font.setPointSize(20) + self.labelDialog.setFont(font) + self.labelDialog.setAlignment(Qt.AlignCenter) + self.labelDialog.setWordWrap(True) + + self.gridLayout.addWidget(self.labelDialog, 0, 0, 1, 1) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) + + self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 1) + + self.textEdit = QTextEdit(Dialog) + self.textEdit.setObjectName(u"textEdit") + + self.gridLayout.addWidget(self.textEdit, 1, 0, 1, 1) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) + self.labelDialog.setText(QCoreApplication.translate("Dialog", u"TextLabel", None)) + # retranslateUi + diff --git a/src/testium/interpreter/test_items/dialog_note_files/dialog_note_win.ui b/src/testium/interpreter/test_items/dialog_note_files/dialog_note_win.ui new file mode 100644 index 0000000..9887cc9 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_note_files/dialog_note_win.ui @@ -0,0 +1,88 @@ + + + Dialog + + + + 0 + 0 + 501 + 337 + + + + Dialog + + + true + + + + + + + 20 + + + + TextLabel + + + Qt::AlignCenter + + + true + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/testium/interpreter/test_items/dialog_note_files/test_dialog.py b/src/testium/interpreter/test_items/dialog_note_files/test_dialog.py new file mode 100644 index 0000000..019d608 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_note_files/test_dialog.py @@ -0,0 +1,54 @@ +import sys +import os + +from PySide6.QtWidgets import (QApplication, QDialog) +from PySide6.QtCore import (Qt) +from interpreter.test_items.dialog_note_files import dialog_note_win +from multiprocessing import freeze_support + +class TestDialogWindow(QDialog, dialog_note_win.Ui_Dialog): + def __init__(self): + super().__init__() + self.setupUi(self) + + +def main(args, conn=None): + success = True + app = QApplication(args) + d = TestDialogWindow() + d.setFixedSize(387,224) + d.setWindowFlags(Qt.WindowStaysOnTopHint) + d.setWindowTitle(args[0]) + d.labelDialog.setText(args[1]) + d.textEdit.setFocus() + dres = d.exec() + + if dres == QDialog.Rejected: + success = False + if conn: + conn.send([d.textEdit.toPlainText(), success]) + conn.close() + else: + print(d.textEdit.text(), end='') + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/src/testium/interpreter/test_items/dialog_question_files/__init__.py b/src/testium/interpreter/test_items/dialog_question_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_question_files/question_dialog.py b/src/testium/interpreter/test_items/dialog_question_files/question_dialog.py new file mode 100644 index 0000000..106f7c6 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_question_files/question_dialog.py @@ -0,0 +1,32 @@ +import sys +import os + +from PySide6.QtWidgets import (QApplication, QDialog) +from PySide6.QtCore import (Qt) +from PySide6.QtWidgets import QMessageBox +from multiprocessing import freeze_support + +def main(args, conn): + app = QApplication(sys.argv) + reply = QMessageBox.question(None, args[0], args[1], QMessageBox.Yes|QMessageBox.No) + + conn.send(reply) + conn.close() + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() diff --git a/src/testium/interpreter/test_items/dialog_sleep_files/__init__.py b/src/testium/interpreter/test_items/dialog_sleep_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep.py b/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep.py new file mode 100644 index 0000000..b5552bc --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep.py @@ -0,0 +1,81 @@ +import sys +import os +from PySide6.QtCore import (Qt, QTimer, QTime) +from PySide6.QtWidgets import (QApplication, QDialog) + +from interpreter.test_items.dialog_sleep_files import dialog_sleep_win + +class DialogSleepWindow(QDialog, dialog_sleep_win.Ui_SleepDialogWindow): + def __init__(self): + super().__init__() + self.setupUi(self) + self.timeEdit.setDisplayFormat("HH:mm:ss") + self.timer = QTimer() + self.timer.setSingleShot(False) + self.timer.stop() + self.timer.timeout.connect(self.on_timerEvent) + + def time(self, secs): + hrs = secs//(3600) + min = (secs - (hrs * 3600))//60 + s = secs - (hrs * 3600) - (min * 60) + return QTime(hrs, min, s) + + def setupTimer(self, timeout): + self.timeout = int(timeout) + + # time settings ... + self.timeEdit.setTime(self.time(self.timeout)) + self.timer.setSingleShot(False) + self.timer.setInterval(1000) + self.timer.start() + + def on_timerEvent(self): + self.timeout = self.timeout - 1 + if self.timeout <= 0: + self.accept() + else: + self.timeEdit.setTime(self.time(self.timeout)) + +def main(args, conn=None): + success = True + app = QApplication(sys.argv) + d = DialogSleepWindow() + d.setFixedSize(379,129) + d.setWindowFlags(Qt.WindowStaysOnTopHint) + d.setModal(True) + d.setWindowTitle(args[0]) + d.setupTimer(float(args[1])) + + dres = d.exec() + if dres == QDialog.Rejected: + success = False + res = -1 + if success: + res = 0 + + if conn: + conn.send(success) + conn.close() + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep_win.py b/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep_win.py new file mode 100644 index 0000000..f77f446 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep_win.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'dialog_sleep_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QAbstractSpinBox, QApplication, QDateTimeEdit, + QDialog, QDialogButtonBox, QHBoxLayout, QLabel, + QLayout, QSizePolicy, QSpacerItem, QTimeEdit, + QVBoxLayout, QWidget) + +class Ui_SleepDialogWindow(object): + def setupUi(self, SleepDialogWindow): + if not SleepDialogWindow.objectName(): + SleepDialogWindow.setObjectName(u"SleepDialogWindow") + SleepDialogWindow.resize(493, 124) + font = QFont() + font.setFamilies([u"Sans"]) + SleepDialogWindow.setFont(font) + SleepDialogWindow.setModal(True) + self.verticalLayout = QVBoxLayout(SleepDialogWindow) + self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setSizeConstraint(QLayout.SetMinimumSize) + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.label = QLabel(SleepDialogWindow) + self.label.setObjectName(u"label") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) + self.label.setSizePolicy(sizePolicy) + font1 = QFont() + font1.setFamilies([u"Sans"]) + font1.setPointSize(21) + self.label.setFont(font1) + + self.horizontalLayout.addWidget(self.label) + + self.timeEdit = QTimeEdit(SleepDialogWindow) + self.timeEdit.setObjectName(u"timeEdit") + font2 = QFont() + font2.setFamilies([u"Sans"]) + font2.setPointSize(24) + self.timeEdit.setFont(font2) + self.timeEdit.setFrame(False) + self.timeEdit.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter) + self.timeEdit.setReadOnly(True) + self.timeEdit.setButtonSymbols(QAbstractSpinBox.NoButtons) + self.timeEdit.setCurrentSection(QDateTimeEdit.HourSection) + + self.horizontalLayout.addWidget(self.timeEdit) + + + self.verticalLayout.addLayout(self.horizontalLayout) + + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_2.addItem(self.horizontalSpacer) + + self.label_4 = QLabel(SleepDialogWindow) + self.label_4.setObjectName(u"label_4") + font3 = QFont() + font3.setFamilies([u"Sans"]) + font3.setPointSize(10) + self.label_4.setFont(font3) + + self.horizontalLayout_2.addWidget(self.label_4) + + self.label_3 = QLabel(SleepDialogWindow) + self.label_3.setObjectName(u"label_3") + self.label_3.setFont(font3) + + self.horizontalLayout_2.addWidget(self.label_3) + + self.label_2 = QLabel(SleepDialogWindow) + self.label_2.setObjectName(u"label_2") + self.label_2.setFont(font3) + + self.horizontalLayout_2.addWidget(self.label_2) + + + self.verticalLayout.addLayout(self.horizontalLayout_2) + + self.buttonBox = QDialogButtonBox(SleepDialogWindow) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel) + + self.verticalLayout.addWidget(self.buttonBox) + + + self.retranslateUi(SleepDialogWindow) + self.buttonBox.accepted.connect(SleepDialogWindow.accept) + self.buttonBox.rejected.connect(SleepDialogWindow.reject) + + QMetaObject.connectSlotsByName(SleepDialogWindow) + # setupUi + + def retranslateUi(self, SleepDialogWindow): + SleepDialogWindow.setWindowTitle(QCoreApplication.translate("SleepDialogWindow", u"Dialog", None)) + self.label.setText(QCoreApplication.translate("SleepDialogWindow", u"Remaining time", None)) + self.timeEdit.setDisplayFormat(QCoreApplication.translate("SleepDialogWindow", u"HH:mm:ss", None)) + self.label_4.setText(QCoreApplication.translate("SleepDialogWindow", u"hr", None)) + self.label_3.setText(QCoreApplication.translate("SleepDialogWindow", u"min", None)) + self.label_2.setText(QCoreApplication.translate("SleepDialogWindow", u"sec", None)) + # retranslateUi + diff --git a/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep_win.ui b/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep_win.ui new file mode 100644 index 0000000..b32299e --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_sleep_files/dialog_sleep_win.ui @@ -0,0 +1,182 @@ + + + SleepDialogWindow + + + + 0 + 0 + 493 + 124 + + + + + Sans + + + + Dialog + + + true + + + + QLayout::SetMinimumSize + + + + + + + + 0 + 0 + + + + + Sans + 21 + + + + Remaining time + + + + + + + + Sans + 24 + + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + true + + + QAbstractSpinBox::NoButtons + + + QDateTimeEdit::HourSection + + + HH:mm:ss + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Sans + 10 + + + + hr + + + + + + + + Sans + 10 + + + + min + + + + + + + + Sans + 10 + + + + sec + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel + + + + + + + + + buttonBox + accepted() + SleepDialogWindow + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SleepDialogWindow + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/testium/interpreter/test_items/dialog_value_files/__init__.py b/src/testium/interpreter/test_items/dialog_value_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/dialog_value_files/dialog_value_win.py b/src/testium/interpreter/test_items/dialog_value_files/dialog_value_win.py new file mode 100644 index 0000000..7d528da --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_value_files/dialog_value_win.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'dialog_value_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QLabel, QLineEdit, QSizePolicy, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(387, 224) + Dialog.setModal(True) + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setGeometry(QRect(20, 180, 351, 32)) + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) + self.labelDialog = QLabel(Dialog) + self.labelDialog.setObjectName(u"labelDialog") + self.labelDialog.setGeometry(QRect(10, 10, 371, 111)) + font = QFont() + font.setPointSize(20) + self.labelDialog.setFont(font) + self.labelDialog.setAlignment(Qt.AlignCenter) + self.labelDialog.setWordWrap(True) + self.lineEdit = QLineEdit(Dialog) + self.lineEdit.setObjectName(u"lineEdit") + self.lineEdit.setGeometry(QRect(20, 130, 351, 40)) + self.lineEdit.setFont(font) + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) + self.labelDialog.setText(QCoreApplication.translate("Dialog", u"TextLabel", None)) + # retranslateUi + diff --git a/src/testium/interpreter/test_items/dialog_value_files/dialog_value_win.ui b/src/testium/interpreter/test_items/dialog_value_files/dialog_value_win.ui new file mode 100644 index 0000000..cc7c86e --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_value_files/dialog_value_win.ui @@ -0,0 +1,110 @@ + + + Dialog + + + + 0 + 0 + 387 + 224 + + + + Dialog + + + true + + + + + 20 + 180 + 351 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 371 + 111 + + + + + 20 + + + + TextLabel + + + Qt::AlignCenter + + + true + + + + + + 20 + 130 + 351 + 40 + + + + + 20 + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/testium/interpreter/test_items/dialog_value_files/test_dialog.py b/src/testium/interpreter/test_items/dialog_value_files/test_dialog.py new file mode 100644 index 0000000..b30bc28 --- /dev/null +++ b/src/testium/interpreter/test_items/dialog_value_files/test_dialog.py @@ -0,0 +1,59 @@ +import sys +import os + +from PySide6.QtWidgets import (QApplication, QDialog) +from PySide6.QtCore import (Qt) + +from interpreter.test_items.dialog_value_files import dialog_value_win +from multiprocessing import freeze_support + +class TestDialogWindow(QDialog, dialog_value_win.Ui_Dialog): + def __init__(self): + super().__init__() + self.setupUi(self) + + +def main(args, conn=None): + success = True + app = QApplication(args) + d = TestDialogWindow() + d.setFixedSize(387,224) + d.setWindowFlags(Qt.WindowStaysOnTopHint) + d.setWindowTitle(args[0]) + d.labelDialog.setText(args[1]) + d.lineEdit.setText(args[2]) + d.lineEdit.setFocus() + dres = d.exec() + + if dres == QDialog.Rejected: + success = False + if conn: + conn.send([d.lineEdit.text(), success]) + conn.close() + else: + print(d.lineEdit.text(), end='') + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + + +if __name__ == '__main__': + main(sys.argv[1:]) + + + diff --git a/src/testium/interpreter/test_items/item_actions/__init__.py b/src/testium/interpreter/test_items/item_actions/__init__.py new file mode 100644 index 0000000..8171554 --- /dev/null +++ b/src/testium/interpreter/test_items/item_actions/__init__.py @@ -0,0 +1,118 @@ +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.test_items.test_item import TestItem, test_run, test_data +from interpreter.test_items.test_result import TestResult, TestValue +from interpreter.test_items.item_actions.action import TestItemAction + + +class TestItemActions(TestItem): + def __init__( + self, item_type, dict_actions, parent=None, status_queue=None, filename="" + ): + self._name = item_type.item_name + super().__init__(dict_actions, parent, status_queue, filename=filename) + self._type = item_type + self.is_container = False + self.action_classes = {} + self.actions_token = None + self.actions = [] + try: + self.dict_actions = dict_actions["steps"] + except KeyError: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has no action list", + self.seqFilename(), + ) + + def register_actions(self, **args: TestItemAction): + for action_name, action_class in args.items(): + self.action_classes.update({action_name: action_class}) + + def load(self): + ret = {} + for action in self.dict_actions: + # Action should be only dict of length 1 + if not isinstance(action, dict) or (not len(action) == 1): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' action should be only dict of length = 1.", + self.seqFilename() + ) + action_name = list(action.keys())[0] + if not (action_name in self.action_classes.keys()): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has an unknown action '{action.keys()[0]}'.", + self.seqFilename() + ) + + item = (self.action_classes[action_name])( + action_name, + action[action_name], + self, + self.status_queue, + filename=self.seqFilename(), + ) + self.actions.append(item) + ret.update(test_data(item, {})) + return ret + + def __run(self): + results = [] + i = 0 + to_be_stopped = False + while ( + (not self.isStopped()) and (i < self.childCount()) and (not to_be_stopped) + ): + result = self.child(i).execute() + results.append(result) + if result.test_result == TestValue.FAILURE and self._stop_on_failure: + to_be_stopped = True + i = i + 1 + + if self.isStopped() or to_be_stopped: + for j in range(self.childCount()): + if self.child(j).executedOnStop() and (j >= i): + self.child(j).execute() + + test_success = TestValue.SUCCESS + for res in results: + if res.test_result == TestValue.FAILURE: + test_success = TestValue.FAILURE + break + + result = TestResult(None, test_success, "Group iteration") + return result + + def setSeqFilename(self, filename): + super().setSeqFilename(filename) + for action in self.actions: + action.setSeqFilename(filename) + + @test_run + def execute(self): + results = [] + to_be_stopped = False + if (not self.isStopped()) and (not to_be_stopped): + result = self.__run() + + # Test results + results.append(result) + + if result.test_result == TestValue.FAILURE and self._stop_on_failure: + to_be_stopped = True + + # end of loop test + if self.isStopped() or to_be_stopped: + if to_be_stopped: + self.result.set( + TestValue.FAILURE, + f"'{self._name}' item execution aborted on failure", + ) + else: + self.result.set( + TestValue.NORUN, + f"'{self._name}' item execution aborted on user request", + ) + else: + self.result.set(TestValue.SUCCESS, "") + for res in results: + if not res.success: + self.result.set(TestValue.FAILURE, "") diff --git a/src/testium/interpreter/test_items/item_actions/action.py b/src/testium/interpreter/test_items/item_actions/action.py new file mode 100644 index 0000000..4428d8e --- /dev/null +++ b/src/testium/interpreter/test_items/item_actions/action.py @@ -0,0 +1,39 @@ +from interpreter.test_items.test_item import TestItem, LOG_TEST_START, LOG_TEST_STOP + + +class TestItemAction(TestItem): + def __init__( + self, + action_name, + item_type, + dict_item: dict, + parent: TestItem, + status_queue, + filename="", + ): + if dict_item is None: + dict_item = {} + super().__init__(dict_item, parent, status_queue, filename=filename) + self._dict_name = self._name + self._name = ( + action_name + " - " + self._name if self._name != "" else action_name + ) + self._type = item_type + + self.banner = "" + self.footer = "" + if self._dict_name != "": + self.banner = LOG_TEST_START.format(self._name) + self.footer = LOG_TEST_STOP.format(self._name) + + def write_banner(self): + if self.banner != "": + super().write_banner() + + def write_footer(self): + if self.banner != "": + super().write_footer() + + @property + def token(self): + return self._parent.actions_token diff --git a/src/testium/interpreter/test_items/test_item.py b/src/testium/interpreter/test_items/test_item.py new file mode 100644 index 0000000..5d2ed79 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item.py @@ -0,0 +1,509 @@ +from functools import wraps +from time import sleep +import yaml +from copy import deepcopy +from interpreter.test_items.test_result import TestResult, TestValue +import libs.testium as tm +from interpreter.utils.params import TestItemParams +from interpreter.utils.constants import TestItemType as cst_type +from interpreter.utils.eval import eval_to_boolean, evaluate, post_evaluate +from interpreter.utils.tum_except import ETUMSyntaxError + +LOG_TEST_STOP = '<----- step "{}" finished' +LOG_TEST_START = '-----> step "{}" started' + + +class TestItem: + pass + + +def test_run(f): + @wraps(f) + def wrapper(self): + if not self.skipped: + if self.enabled: + self.run_test_init() + # Conditional execution + raw_condition = self._prms.getParam( + "condition", default=None, processed=False + ) + if raw_condition is None: + condition = True + else: + c = self._prms.expanse(raw_condition) + if isinstance(c, bool): + condition = c + elif isinstance(c, (str, bytes)): + is_evaluated, condition = evaluate(c) + if not is_evaluated: + print("eval with c: {}".format(c)) + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a 'condition' impossible to evaluate", + self.seqFilename(), + ) + else: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a 'condition' result ({c}) which is not string or bool", + self.seqFilename(), + ) + + msg = '"{}" --> "{}"'.format(raw_condition, c) + + # Do we have to skip the test because of a true condition ? + if condition: + if not raw_condition is None: + msg = "condition met: " + msg + self.result.reported = {"input_condition": msg} + print(msg) + # Test preparation + self.run_before_test() + # Test execution + f(self) + else: + msg = "condition not met: " + msg + self.result.set(TestValue.NORUN, msg) + self.result.reported = {"input_condition": msg} + self.run_test_end() + else: + self.result.set(TestValue.NORUN, "test disabled") + print("Test is disabled.") + else: + self.result.set(TestValue.NORUN, "test skipped") + print("Test is skipped.") + + return self.result + + return wrapper + + +def test_data(item: TestItem, child: dict) -> dict: + return { + item.id(): { + "id": item.id(), + "name": item.name(), + "type": item.type(), + "doc": None if (item.doc() == "") or (item.doc() == None) else item.doc(), + "content": item.content(), + "folded": item.is_folded, + "seq_filename": item.seqFilename(), + "child": child, + } + } + + +class TestItem: + def __init__( + self, dict_item: dict = None, parent: TestItem = None, status_queue=None, filename = "" + ): + self.enabled = True + self.skipped = False + self.is_container = True + self.is_folded = False + self._children = [] + self._parent = parent + self._id = id(self) + self._type = cst_type.TYPE_ROOT + self._report_key = None + self._reported = None + self.status_queue = status_queue + self._execute_on_stop = False + self._post_eval = None + self._expected_result = None + self._no_fail = None + self._is_stopped = False + self._is_running = False + self._is_breakpoint = False + self._is_paused = False + self._stop_on_failure = False + self._doc = "" + self._name = "" + self.report = None + self._dict_item = self._filter_dict_item(dict_item) + self._seq_filename = filename + + if parent is not None: + parent.addChild(self) + + if dict_item is not None: + # creation of the params object + self._prms = TestItemParams(dict_item, parent) + + # getting parameters for the test item + try: + self._name = self._prms.getParam("name", default="", processed=True) + # robustness if "name:" followed by an empty string in the yaml. + if self._name == None: + self._name = "" + s = self._prms.getParam("skipped", default=None, processed=True) + if s: + try: + self.skipped = eval_to_boolean(s) + except: + raise ETUMSyntaxError( + f"'{self.cmd()}' test item named '{self.name()}':\nskipped expresion can only be a static expression as it is evaluated during loading of TUM : {s}", + self.seqFilename(), + ) + # This allow disabling test item directly by using its name inside param.xml file + elif self._name in tm.gd("skipped_test_item", []): + self.skipped = True + else: + self.skipped = False + + self._report_key = self._prms.getParam("key", default=None) + self._stop_on_failure = self._prms.getParam( + "stop_on_failure", default=False, processed=True + ) + self._doc = self._prms.getParam("doc", default="", processed=True) + # + self._execute_on_stop = self._prms.getParam( + "execute_on_stop", default=False, processed=True + ) + + if "process_result" in dict_item: + self._post_eval = dict_item["process_result"] + + if "expected_result" in dict_item: + self._expected_result = dict_item["expected_result"] + + if "no_fail" in dict_item: + self._no_fail = dict_item["no_fail"] + + self.banner = LOG_TEST_START.format(self._name) + self.footer = LOG_TEST_STOP.format(self._name) + + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + self.result = TestResult(self, TestValue.FAILURE, "Failure by default") + + def _filter_dict_item(self, dict_item): + # Stores the content of the step to be displayed + # in the GUI + c = {} + if isinstance(dict_item, dict): + for k, v in dict_item.items(): + if k == "steps" or k == "name" or k == "doc" or k == "seq_filename": + continue + if isinstance(v, (list, dict)): + val = deepcopy(v) + else: + val = v + c.update({k: val}) + else: + c = str(dict_item) + + return c + + # default behavior... must be overloaded by children + # this is mostly used by root item + @test_run + def execute(self): + test_results = [] + i = 0 + to_be_stopped = False + while (not self.isStopped()) and (i < self.childCount()) and not to_be_stopped: + test_res = self.child(i).execute() + test_results.append(test_res) + i = i + 1 + if test_res.test_result == TestValue.FAILURE and self._stop_on_failure: + to_be_stopped = True + if self.isStopped() or to_be_stopped: + for j in range(self.childCount()): + if self.child(j).executedOnStop() and (j >= i): + self.child(j).execute() + if to_be_stopped: + self.result.set(TestValue.FAILURE, "test stopped on failure") + else: + test_success = TestValue.SUCCESS + for res in test_results: + if res.test_result != TestValue.SUCCESS: + test_success = TestValue.FAILURE + break + self.result.test_result = test_success + else: + test_success = TestValue.SUCCESS + for res in test_results: + if res.test_result != TestValue.SUCCESS: + test_success = TestValue.FAILURE + break + self.result.test_result = test_success + self.result.message = "Test run failed" + + def write_banner(self): + if self.parent() is not None: + s = self.banner + s = (s + "{:>" + str(max(1, 80 - len(s))) + "}").format( + str("@@{}@@".format(self.t0)) + ) + print(s) + + def write_footer(self): + if self.parent() is not None: + print(self.result.message) + print(self.footer + f": {str(self.result.test_result)}") + + def run_test_init(self): + """Common test items execution initialization.""" + self.t0 = tm.timestamp() + if self._name != "": + tm.setgd("ts_start_" + self._name, self.t0) + self.duration = -1 + self.write_banner() + self._is_running = True + self._sendStatusStarted() + if self._is_breakpoint: + self._is_paused = True + while self._is_paused: + sleep(0.2) + + if self.is_container: + self.report.incLevel() + + self._reported = self._prms.getParam("report", default=None, processed=False) + + def run_before_test(self): + """Peace of code executed just before the test is + executed. + """ + pass + + def run_test_end(self): + """Common test items execution closure.""" + if self.is_container: + self.report.decLevel() + + while self._is_paused: + sleep(0.2) + + # Post evaluation of the test result + self.process_result() + # expected_result treatment + self.result_expected() + # Case of the no_fail true parameter + self.process_no_fail() + + self.result.sendStatus(self.status_queue) + if not self.result.value is None: + tm.setgd("last_test_result", str(self.result.value)) + else: + tm.setgd("last_test_result", str(self.result.test_result)) + self.write_footer() + self._is_running = False + self._is_stopped = False + self.t1 = tm.timestamp() + self.duration = self.t1 - self.t0 + if self._name != "": + tm.setgd("ts_end_" + self._name, self.t1) + tm.setgd("ts_duration_" + self._name, tm.timestamp_as_sec(self.duration)) + rk = self._prms.expanse(self._report_key) + + # Report value export + if hasattr(self.report, "value") and self.report.value is not None: + self.result.reported = {"result": self.report.value} + + if not self._reported is None: + self.process_report(self._reported) + self.report.addTest(self, self.result, rk) + self._sendStatusFinished() + + def process_result(self): + if self._post_eval is None: + return + print(f"Post-processed the test result:") + r = self.result.value + pe = self._prms.expanse(self._post_eval) + try: + self.result.value = self.post_evaluate(pe) + print(f" was: {r}") + print(f" is: {str(self.result.value)}") + except Exception as e: + print(" Result processing failed!") + print(e) + self.result.set(TestValue.FAILURE, "Result processing failed") + + if isinstance(self.result.value, bool): + if self.result.value: + self.result.set(TestValue.SUCCESS, "Processing result returned 'True'") + else: + self.result.set(TestValue.FAILURE, "Processing result returned 'False'") + + def process_report(self, report_eval): + tm.print_debug(f"Export reported values:") + rep_eval = self._prms.expanse(report_eval) + if isinstance(rep_eval, dict): + self.result.reported = rep_eval + if tm.debug_enabled(): + for k, v in rep_eval.items(): + tm.print_debug(f" {k}: {v}") + else: + tm.print_debug(" Failed: the reported value must be a dictionnary.") + + def result_expected(self): + res = self.result.value + + # if a result is expected + e = None + eres = None + + if not self._expected_result is None: + e = self._prms.expanse(self._expected_result) + _, eres = evaluate(e) + + if not eres is None: + if not res is None: + print("Compare the result to expected:") + print(" Result = " + str(res)) + msg = " Expected = " + str(self._expected_result) + if self._expected_result != eres: + msg = msg + " -> " + str(eres) + print(msg) + self.result.reported = {"expected": eres} + + if eres == res: + self.result.set(TestValue.SUCCESS, f"Expected result met.") + else: + self.result.set(TestValue.FAILURE, f"Expected result not met.") + else: + if str(eres).lower() != str(self.result.test_result).lower(): + self.result.set( + TestValue.FAILURE, "Expected result not met : {}.".format(e) + ) + else: + self.result.set( + TestValue.SUCCESS, "Expected result met: {}.".format(e) + ) + + def process_no_fail(self): + # Treatment of the no_fail parameters + if self._no_fail is None: + return + + no_fail = False + no_fail_exp = self._prms.expanse(self._no_fail) + try: + no_fail = bool(no_fail_exp) + except: + tm.print_debug( + f"The 'no_fail' parameter evaluation did not lead to a boolean value: '{no_fail}'" + ) + tm.print_warn( + "The 'no_fail' parameter is ignored due to evaluation error." + ) + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a 'no_fail' parameter impossible to evaluate", + self.seqFilename(), + ) + if no_fail: + if self.result.test_result == TestValue.FAILURE: + tm.print_info(f"'no_fail' is True. Test forced to PASS.") + self.result.test_result = TestValue.SUCCESS + + def post_evaluate(self, post_eval): + res = self.result.value + if self.result.value is None: + res = self.result.test_result + return post_evaluate(post_eval, res) + + def doc(self) -> str: + return self._doc + + def _sendStatusStarted(self): + status = { + "id": self._id, + "name": self._name, + "status": "started", + "timestamp": self.t0, + } + self.status_queue.put(status) + + def _sendStatusFinished(self): + status = { + "id": self._id, + "name": self._name, + "status": "finished", + "duration": self.duration, + } + self.status_queue.put(status) + + def sendMessage(self, msg): + status = {"id": self._id, "name": self._name, "message": msg} + self.status_queue.put(status) + + def isRunning(self): + return self._is_running + + def isStopped(self): + return self._is_stopped + + def stop(self): + self._is_stopped = True + + def pause(self): + self._is_paused = True + + def addBreakpoint(self): + self._is_breakpoint = True + + def delBreakpoint(self): + self._is_breakpoint = False + + def cont(self): + self._is_paused = False + + def name(self): + return self._name + + def content(self): + ret = ( + yaml.dump( + {self.cmd(): self._dict_item}, allow_unicode=True, sort_keys=False + ) + if len(self._dict_item) != 0 + else "" + ) + return ret + + def type(self): + return self._type.item_name + + def cmd(self): + return self._type.item_cmd + + def childCount(self): + return len(self._children) + + def setId(self, id): + self._id = id + + def id(self): + return self._id + + def setEnabled(self): + self.enabled = True + + def executedOnStop(self): + return self._execute_on_stop + + def addChild(self, child): + self._children.append(child) + + def hasChildren(self): + return self.childCount() > 0 + + def parent(self): + return self._parent + + def child(self, index): + return self._children[index] + + def load(self): + pass + + def setSeqFilename(self, filename): + self._seq_filename = filename + + def seqFilename(self): + return self._seq_filename diff --git a/src/testium/interpreter/test_items/test_item_check.py b/src/testium/interpreter/test_items/test_item_check.py new file mode 100644 index 0000000..30c1e19 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_check.py @@ -0,0 +1,59 @@ + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import TestValue +from interpreter.utils.tum_except import ETUMSyntaxError +import libs.testium as tm +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.eval import evaluate + +class TestItemCheckValue(TestItem): + """check item usage. + check usage:{check: {name: check my func output, steps: ['$(fn_echo) < 5']}} + """ + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_CHECK.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_CHECK + self.is_container = False + try: + self._action_list = self._prms.getParamAll('steps', default=[], required=False) + if len(self._action_list) > 0: + tm.print_warn("'steps' argument of check test item is deprecated and is replaced by 'values'") + self._action_list += self._prms.getParamAll('values', default=[], required=False) + if len(self._action_list) <= 0: + raise ETUMSyntaxError( + f" The '{self.cmd()}' test item named '{self.name()}' must have a 'values' parameter", + self.seqFilename() + ) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' (a child of: '{self.parent().name()}') has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + if isinstance(self._action_list, str): + self._action_list = [self._action_list] + + is_success = True + #test core function + for v in self._action_list: + val = self._prms.expanse(v) + is_evaluated, ev = evaluate(val) + if not is_evaluated: + self.result.set(TestValue.FAILURE, "Error evaluating: '{}'".format(val)) + return + + if not isinstance(ev, bool): + self.result.set(TestValue.FAILURE, "The check of '{}' must result in a boolean: ".format(v)) + return + + print("Evaluation of '{}' --> '{}' is {}.".format(v, val, str(ev))) + if not ev: + is_success = False + + if is_success: + self.result.set(TestValue.SUCCESS, 'Check passed') + else: + self.result.set(TestValue.FAILURE, 'Check failed') diff --git a/src/testium/interpreter/test_items/test_item_choices_dialog.py b/src/testium/interpreter/test_items/test_item_choices_dialog.py new file mode 100644 index 0000000..d5b4c41 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_choices_dialog.py @@ -0,0 +1,50 @@ +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import TestItem, test_run +from interpreter.test_items.test_result import TestResult, TestValue +from interpreter.test_items.dialog_choices_files import choices_dialog +import libs.testium as tm +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.constants import TestItemType as cst + + +class TestItemChoicesDialog(TestItem): + def __init__(self, dict_item, parent=None, status_queue=None, filename=""): + self._name = cst.TYPE_CHOICES_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_CHOICES_DLG + self.is_container = False + try: + self._question = self._prms.getParam("question", required=True) + self._choices = self._prms.getParam("choices", required=True) + self._default_icon = self._prms.getParam( + "icon", required=False, default=None + ) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' (a child of: '{self.parent().name()}') has a missing or wrong parameter", + self.seqFilename() + ) + + @test_run + def execute(self): + q = self._prms.expanse(self._question) + choices = self._prms.expanse(self._choices) + icon = self._prms.expanse(self._default_icon) + parent_conn, child_conn = Pipe() + p = Process( + target=choices_dialog.main, args=([self.name(), q, choices, icon], child_conn) + ) + p.start() + val, succ = parent_conn.recv() + p.join() + + self.result.value = val + + if succ: + # The result of the test item is put into the global dict + tm.setgd("cs_" + self._name, val) + self.result.set(TestValue.SUCCESS, str(val)) + else: + tm.delgd("cs_" + self._name) + self.result.set(TestValue.FAILURE, str(val)) diff --git a/src/testium/interpreter/test_items/test_item_console.py b/src/testium/interpreter/test_items/test_item_console.py new file mode 100644 index 0000000..af009e0 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_console.py @@ -0,0 +1,361 @@ +import sys +import os +import importlib +import traceback + +from libs import testium as tm +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.stdout_redirect import stdio_redir +from interpreter.test_items.test_item import test_run +from interpreter.test_items.item_actions import TestItemActions +from interpreter.test_items.item_actions.action import TestItemAction +from interpreter.utils.constants import TestItemType as cst +from interpreter.test_items.test_result import TestResult, TestValue + + +class TestItemConsoleAction(TestItemAction): + + def get_console(self): + cname = self._prms.expanse(self.token["console_name"]) + return tm.console(cname) + + +class TestItemConsoleOpen(TestItemConsoleAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_CONSOLE_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + self._protocol = self._prms.getParam("protocol", required=True) + + @test_run + def execute(self): + self._protocol = self._prms.expanse(self._protocol) + if not (self._protocol in ["telnet", "ssh", "rawtcp", "serial", "terminal"]): + self.result.set( + TestValue.FAILURE, + '"protocol" can only be "telnet", "ssh", "rawtcp", "serial" or "terminal"', + ) + return + + cname = self._prms.expanse(self.token["console_name"]) + write_delay = ( + self._prms.getParam("write_delay", default=0, processed=True) / 1000.0 + ) + log = self._prms.getParam("log", processed=True) + erase_log = self._prms.getParam("overwrite_log", default=True, processed=True) + + if self._protocol == "telnet": + telnet_host = self._prms.getParam( + "telnet_host", required=True, processed=True + ) + telnet_port = self._prms.getParam("telnet_port", default=69) + + elif self._protocol == "ssh": + if sys.platform.startswith("win"): + self.result.set( + TestValue.FAILURE, "SSH protocol not supported on Windows" + ) + return + ssh_host = self._prms.getParam("ssh_host", required=True, processed=True) + ssh_user = self._prms.getParam("ssh_user", required=True, processed=True) + ssh_pwd = self._prms.getParam( + "ssh_pwd", required=False, default=None, processed=True + ) + + elif self._protocol == "rawtcp": + rawtcp_host = self._prms.getParam("tcp_host", required=True, processed=True) + rawtcp_port = self._prms.getParam("tcp_port", required=True, processed=True) + + elif self._protocol == "serial": + serial_port = self._prms.getParam( + "serial_port", required=True, processed=True + ) + serial_bauds = self._prms.getParam( + "serial_baudrate", required=True, processed=True + ) + buffered = self._prms.getParam( + "buffered", default=True, required=False, processed=True + ) + + else: + terminal_path = self._prms.getParam("terminal_path", processed=True) + if terminal_path is not None: + terminal_path = os.path.normpath(terminal_path) + terminal_shell = self._prms.getParam( + "shell", default="/usr/bin/env bash", required=False, processed=True + ) + + try: + if self._protocol == "telnet": + if log: + cons = console.TelnetLoggedConsole( + name=cname, + host=telnet_host, + port=telnet_port, + overwriteFile=erase_log, + logPath=log, + write_delay=write_delay, + ) + else: + cons = console.TelnetConsole( + name=cname, + host=telnet_host, + port=telnet_port, + write_delay=write_delay, + ) + + elif self._protocol == "ssh": + if sys.platform.startswith("win"): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' does not support SSH protocol on Windows", + self.seqFilename() + ) + if log: + tm.print_warn( + f"Warning : For '{self.cmd()}' test item named '{self.name()}', logging of {self._protocol} is not yet supported" + ) + cons = console_ssh.SshConsole( + name=cname, + host=ssh_host, + user=ssh_user, + password=ssh_pwd, + echoOn=True, + ) + + elif self._protocol == "rawtcp": + if log: + tm.print_warn( + "Warning : logging of {} is not yet supported".format( + self._protocol + ) + ) + cons = raw_tcp_console.RawTCPConsole( + name=cname, + address=rawtcp_host, + port=rawtcp_port, + echoOn=True, + write_delay=write_delay, + ) + + elif self._protocol == "serial": + if log: + cons = console.SerialLoggedConsole( + name=cname, + baudrate=serial_bauds, + port=serial_port, + overwriteFile=erase_log, + logPath=log, + echoOn=False, + write_delay=write_delay, + ) + else: + cons = console.SerialConsole( + name=cname, + baudrate=int(serial_bauds), + port=serial_port, + bufferize=bool(buffered), + echoOn=False, + write_delay=write_delay, + ) + + else: + if log: + print( + "Warning : logging of {} is not yet supported".format( + self._protocol + ) + ) + if terminal_path and not os.path.exists(terminal_path): + raise ETUMSyntaxError( + f"'{self.cmd()}' test item named '{self.name()}' (console '{cname}'): terminal path is not mandatory but must exist when provided: {terminal_path}", + self.seqFilename() + ) + cons = termconsole.TermConsole( + name=cname, + project_path=terminal_path, + cust_shell=terminal_shell, + echoOn=True, + write_delay=write_delay, + ) + + cons.stream = stdio_redir.stream + # record the console instance in the global dict as consolename instance + # and consolename key entry in the dictionnary if it exists + tm.add_console(cons) + cons.open() + self.result.set(TestValue.SUCCESS) + except Exception as e: + self.result.set( + result=TestValue.FAILURE, + message="Impossible to open the console ({}) (exception: {})".format( + cname, e + ), + ) + traceback.print_exception(*sys.exc_info()) + + +class TestItemConsoleClose(TestItemConsoleAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_CONSOLE_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + @test_run + def execute(self): + cons = self.get_console() + try: + cons.close() + tm.remove_console(self._prms.expanse(self.token["console_name"])) + except: + pass + self.result.set(result=TestValue.SUCCESS) + + +class TestItemConsoleWrite(TestItemConsoleAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_CONSOLE_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + @test_run + def execute(self): + try: + msg = self._prms.expanse(self._prms.getData()) + cons = self.get_console() + cons.write(str(msg)) + self.result.set(result=TestValue.SUCCESS) + self.result.reported = {"data": msg} + except: + test_res = TestResult( + result=TestValue.FAILURE, + message=f"Console '{self.token['console_name']}': impossible to write", + ) + + +class TestItemConsoleWriteLn(TestItemConsoleAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_CONSOLE_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + @test_run + def execute(self): + try: + msg = self._prms.expanse(self._prms.getData()) + cons = self.get_console() + cons.write(str(msg) + "\n") + self.result.set(result=TestValue.SUCCESS) + self.result.reported = {"data": msg} + except: + self.result.set( + result=TestValue.FAILURE, + message=f"Console '{self.token['console_name']}': impossible to write", + ) + + +class TestItemConsoleReadUntil(TestItemConsoleAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_CONSOLE_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + self._read_until = self._prms.getParam("expected", required=True) + + @test_run + def execute(self): + cons = self.get_console() + ru = self._prms.expanse(self._read_until) + read_timeout = int(self._prms.getParam("timeout", default=-1, processed=True)) + mute = self._prms.getParam("mute", default=False, processed=True) + if read_timeout < 0: + read_timeout = None + + try: + status, data = cons.read_until( + ru, timeout=read_timeout, return_data=True, mute=mute + ) + if status == 0: + self.result.set(TestValue.SUCCESS) + self.result.value = data + else: + self.result.set(result=TestValue.FAILURE, message="No matching text") + if mute: + self.result.reported = {"data": ""} + else: + self.result.reported = {"data": data} + # The result is put in global dir + tm.setgd("cn_" + self.parent()._name, data) + + except: + print(traceback.format_exc()) + self.result.set( + result=TestValue.FAILURE, + message=f"Console '{self.token['console_name']}': impossible to read", + ) + + +class TestItemConsole(TestItemActions): + def __init__(self, dict_item, parent=None, status_queue=None, filename=""): + super().__init__( + cst.TYPE_CONSOLE, dict_item, parent, status_queue, filename=filename + ) + + self.register_actions( + open=TestItemConsoleOpen, + close=TestItemConsoleClose, + write=TestItemConsoleWrite, + writeln=TestItemConsoleWriteLn, + read_until=TestItemConsoleReadUntil, + ) + self.actions_token = {} + + global console + console = importlib.import_module("libs.console") + + if not sys.platform.startswith("win"): + global console_ssh + console_ssh = importlib.import_module("libs.console_ssh") + + global termconsole + termconsole = importlib.import_module("libs.termconsole") + + global raw_tcp_console + raw_tcp_console = importlib.import_module("libs.raw_tcp_console") + + self.actions_token["console_name"] = self._prms.getParam( + "console_name", required=True + ) diff --git a/src/testium/interpreter/test_items/test_item_cycle.py b/src/testium/interpreter/test_items/test_item_cycle.py new file mode 100644 index 0000000..78a8b5e --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_cycle.py @@ -0,0 +1,263 @@ +import traceback + +from interpreter.utils.tum_except import ETUMSyntaxError, ETUMRuntimeError +from interpreter.utils.func_exec import func_exec +from interpreter.test_items.test_item import TestItem, test_run +from interpreter.test_items.test_result import TestResult, TestValue +import libs.testium as tm +from interpreter.utils.params import TestItemParams +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.eval import evaluate + + +class TestItemCycle(TestItem): + def __init__(self, dict_cycle, parent=None, status_queue=None, filename=""): + self._name = cst.TYPE_CYCLE.item_name + super().__init__(dict_cycle, parent, status_queue, filename=filename) + self._type = cst.TYPE_CYCLE + self.is_container = True + self._exit_file = None + self._exit_func = None + self._exit_time = None + self._exit_condition = None + self._start_time = None + self._niter = None + + if "iterator" in dict_cycle: + self._iter = dict_cycle["iterator"] + + if isinstance(self._iter, str): + self._iter = self._prms.expanse(self._iter) + + else: + self._iter = None + + if "exit_condition" in dict_cycle: + if not isinstance(dict_cycle["exit_condition"], dict): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has an error in its exit condition", + self.seqFilename() + ) + + exit_params = TestItemParams(dict_cycle["exit_condition"], self._parent) + self._exit_time = exit_params.getParam("time", processed=False) + self._exit_condition = exit_params.getParam("value", processed=False) + + req = False + if (self._exit_time is None) and (self._exit_condition is None): + req = True + + self._exit_file = exit_params.getParam("file", required=req) + self._exit_func = exit_params.getParam("func_name", required=req) + self._exit_func_param = exit_params.getParam("param") + self._exit_eval = exit_params.getParam("eval", default="") + + def __runALoop(self): + failcount = 0 + i = 0 + to_be_stopped = False + while ( + (not self.isStopped()) and (i < self.childCount()) and (not to_be_stopped) + ): + result = self.child(i).execute() + if result.test_result == TestValue.FAILURE: + failcount = failcount + 1 + if self._stop_on_failure: + to_be_stopped = True + i = i + 1 + + if self.isStopped() or to_be_stopped: + for j in range(self.childCount()): + if self.child(j).executedOnStop() and (j >= i): + self.child(j).execute() + + test_success = TestValue.SUCCESS + if failcount > 0: + test_success = TestValue.FAILURE + + result = TestResult(None, test_success, "Cycle iteration") + return result + + def nbLoops(self, iter): + if iter is None: + # infinite number of loop + self._niter = float("inf") + elif isinstance(iter, int): + self._niter = iter + else: + self._niter = len(iter) + return self._niter + + @test_run + def execute(self): + failcount = 0 + iter = self._iter + if iter is not None: + if isinstance(iter, str): + iter = self._prms.expanse(iter) + + if not isinstance(iter, (list, tuple, int)): + _, iter = evaluate(iter) + if not isinstance(iter, (list, tuple, int)): + self.result.set(TestValue.FAILURE, f"unrecognized type for iterator '{str(iter)}'") + return + if not isinstance(iter, int): + r = [] + for i in iter: + r.append(self._prms.expanse(i)) + iter = r + + + # test core function + self._niter = self.nbLoops(iter) + i = 1 + to_be_stopped = False + self._start_time = tm.timestamp_as_sec() + self.result.set(TestValue.SUCCESS, "Initial cycle setup") + while (i <= self._niter) and (not self.isStopped()) and (not to_be_stopped): + try: + msg = "" + if isinstance(iter, int) or iter is None: + msg = "{}/{}".format(i, self._niter) + self.sendMessage("Cycle " + msg) + msg = 'Cycle "' + self._name + '" iteration ' + msg + "." + else: + msg = '{}/{} - Current: "{}"'.format(i, self._niter, str(iter[i - 1])) + self.sendMessage("Cycle " + msg) + msg = 'Cycle "' + self._name + '" iteration ' + msg + "." + print(msg) + + # store the current loop params + self._currentIter = i - 1 + self._currentInverseIter = self._niter - i - 1 + if isinstance(iter, int) or iter is None: + self._currentLoop = i + else: + self._currentLoop = iter[i - 1] + # Cycle loop execution + res_loop = self.__runALoop() + + if not res_loop.success: + failcount = failcount + 1 + self.result.set( + TestValue.FAILURE, "(Cycle {}/{})".format(i - 1, self._niter) + ) + # Cycle time exit condition check + if res_loop.success or ( + (not res_loop.success) and (not self._stop_on_failure) + ): + if self._exit_time is not None: + ela = tm.timestamp_as_sec() + etime = self._prms.expanse(self._exit_time) + if (ela - self._start_time) > float(etime) * 60: + self.result.reported = { + "exit": "time elapsed", + "timeout": etime, + "elapsed": (ela - self._start_time) / 60, + "count": self._currentIter, + } + print( + "Exiting loop: {:.1f} minutes elapsed (defined: {}).".format( + (ela - self._start_time) / 60, etime + ) + ) + break + else: + print( + "loop: {:.1f} minutes elapsed (exiting when > {}).".format( + (ela - self._start_time) / 60, etime + ) + ) + + # Cycle value exit condition check + if self._exit_condition is not None: + exit_val = self._prms.expanse( + self._exit_condition + ) + _, exit_val = evaluate(exit_val) + if exit_val: + # exit condition is True + self.result.reported = { + "exit": "condition", + "condition": self._exit_condition, + "count": self._currentIter, + } + print( + 'Exiting loop: "{}" is True.'.format( + self._exit_condition + ) + ) + break + else: + print( + 'Continuing. Condition "{}" not met.'.format( + self._exit_condition + ) + ) + + if self._exit_func: + file = self._prms.expanse(self._exit_file) + func = self._prms.expanse(self._exit_func) + post_eval = self._prms.expanse(self._exit_eval) + if self._exit_func_param: + param_list = self._prms.getParamFromList(self._exit_func_param) + pl = self._prms.expanse(param_list) + else: + pl = [self._currentLoop] + fsucc, res = func_exec(file, func, pl) + if fsucc == TestValue.SUCCESS: + fres, _ = res + if fres: + # function returned True + self.result.reported = { + "exit": "returned value", + "returned": fres, + "count": self._currentIter, + } + print("Exiting loop: exit function condition met.") + break + else: + print("Exiting condition not met : \"{}\"".format(fres)) + else: + raise ETUMRuntimeError(f"Loop exiting function failed: \"{res}\"") + + if post_eval: + print(f"Evaluation: \"{post_eval}\"") + + except: + print(traceback.format_exc()) + self.result.set(TestValue.FAILURE, "(Cycle {}/{})".format(i - 1, self._niter)) + to_be_stopped = True + + if (self.result.test_result == TestValue.FAILURE) and self._stop_on_failure: + to_be_stopped = True + i = i + 1 + + # end of loop test exit condition + if self.isStopped() or to_be_stopped: + if to_be_stopped: + self.result.set( + TestValue.FAILURE, + "(Cycle {}/{}) execution aborted on failure".format(i - 1, self._niter), + ) + else: + if self._exit_func: + self.result.set( + TestValue.FAILURE, + "(Cycle {}/{}) execution aborted on user request".format( + i - 1, self._niter + ), + ) + else: + self.result.set( + TestValue.SUCCESS, "(Cycle {}/{})".format(self._niter, self._niter) + ) + if failcount > 0: + self.result.set( + TestValue.FAILURE, "(Cycle {}/{})".format(i - 1, self._niter) + ) + + else: + self.result.set(TestValue.SUCCESS, "(Cycle {}/{})".format(self._niter, self._niter)) + if failcount > 0: + self.result.set(TestValue.FAILURE, "(Cycle {}/{})".format(i - 1, self._niter)) diff --git a/src/testium/interpreter/test_items/test_item_func.py b/src/testium/interpreter/test_items/test_item_func.py new file mode 100644 index 0000000..59d9abb --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_func.py @@ -0,0 +1,77 @@ +import sys +import traceback + +import pprint +import textwrap + +from interpreter.test_items.test_item import TestItem, test_run +from interpreter.test_items.test_result import TestValue +import libs.testium as tm +from interpreter.utils.func_exec import func_exec +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.constants import TestItemType as cst + + +class TestItemFunc(TestItem): + """py_func item usage. + func file: func_file.py, func_name: func, param: [$(variable1), [1, 2, 3], true] + """ + + def __init__(self, dict_item, parent=None, status_queue=None, filename=""): + self._name = cst.TYPE_FUNCTION.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_FUNCTION + self.is_container = False + try: + self.file_name = self._prms.getParam("file", required=True) + self.func_name = self._prms.getParam("func_name", required=True) + self.params = self._prms.getParamAll("param") + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' (child of '{self.parent.name()}') has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + self.result.set( + TestValue.FAILURE, "an exception occured during function execution." + ) + try: + self.file_name = self._prms.expanse(self.file_name) + self.func_name = self._prms.expanse(self.func_name) + param_list = self._prms.getParamFromList(self.params) + pl = self._prms.expanse(param_list) + if tm.debug_enabled(): + tm.print_debug("Parameters list:") + tm.print_debug(textwrap.indent(pprint.pformat(pl), " |")) + success, ret = func_exec(self.file_name, self.func_name, pl) + + if success == TestValue.SUCCESS: + self.result.set(TestValue.SUCCESS) + res, reported_values = ret + reported_values = {**reported_values, "returned": res} + self.result.reported = ret[1] + + if tm.debug_enabled(): + tm.print_debug("Returned value:") + tm.print_debug(textwrap.indent(pprint.pformat(res), " |")) + + # The result of the func test item is put in global dir and result + tm.setgd("fn_" + self._name, res) + self.result.value = res + + else: + self.result.set(TestValue.FAILURE, ret) + if tm.debug_enabled(): + tm.print_debug("Failed:") + tm.print_debug(textwrap.indent(pprint.pformat(ret), " |")) + + return + + except: + traceback.print_exception(*sys.exc_info()) + self.result.set( + TestValue.FAILURE, + 'Unrecoverable "py_func" item error from {}'.format(self.func_name), + ) diff --git a/src/testium/interpreter/test_items/test_item_git.py b/src/testium/interpreter/test_items/test_item_git.py new file mode 100644 index 0000000..9d986aa --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_git.py @@ -0,0 +1,37 @@ +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestValue) +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.tum_except import ETUMParamError, ETUMSyntaxError +import interpreter.utils.version as git + +class TestItemGit(TestItem): + """ + This item expect only one parameter which is a string or list of string being the path to the git folder + """ + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_GIT.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_GIT + self.is_container = False + self.repo = self._prms.getParamAll('repo', processed=True, required=True) + + @test_run + def execute(self): + ret='' + if isinstance(self.repo[0], str): + repo = self._prms.expanse(self.repo[0]) + ret = git.get_version(repo) + elif isinstance(self.repo, list): + for r in self.repo: + repo = self._prms.expanse(r) + ret += git.get_version(repo) + '\n' + else: + ETUMSyntaxError(f"The '{self.cmd()}' test item named '{self.name()}' expected a string or list but has '{self.repo}'", + self.seqFilename()) + + if "Warning" in ret: + res = TestValue.FAILURE + else: + res = TestValue.SUCCESS + + self.result.set(res, ret) diff --git a/src/testium/interpreter/test_items/test_item_group.py b/src/testium/interpreter/test_items/test_item_group.py new file mode 100644 index 0000000..eb15022 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_group.py @@ -0,0 +1,62 @@ +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.tum_except import ETUMSyntaxError +import libs.testium as tm + +class TestItemGroup(TestItem): + def __init__(self, dict_cycle, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_GROUP.item_name + super().__init__(dict_cycle, parent, status_queue, filename=filename) + self._type = cst.TYPE_GROUP + self.is_container = True + + def __runALoop(self): + results = [] + i = 0 + to_be_stopped = False + while (not self.isStopped()) and (i < self.childCount()) and (not to_be_stopped): + result = self.child(i).execute() + results.append(result) + if result.test_result == TestValue.FAILURE and self._stop_on_failure: + to_be_stopped = True + i = i + 1 + + if self.isStopped() or to_be_stopped: + for j in range(self.childCount()): + if self.child(j).executedOnStop() and (j >= i): + self.child(j).execute() + + test_success = TestValue.SUCCESS + for res in results: + if res.test_result == TestValue.FAILURE: + test_success = TestValue.FAILURE + break + + result = TestResult(None, test_success, 'Group iteration') + return result + + @test_run + def execute(self): + results = [] + to_be_stopped = False + if (not self.isStopped()) and (not to_be_stopped): + result = self.__runALoop() + + # Test results + results.append(result) + + if result.test_result == TestValue.FAILURE and self._stop_on_failure: + to_be_stopped = True + + # end of loop test + if self.isStopped() or to_be_stopped: + if to_be_stopped: + self.result.set(TestValue.FAILURE, 'Group execution aborted on failure') + else: + self.result.set(TestValue.NORUN, 'Group execution aborted on user request') + else: + self.result.set(TestValue.SUCCESS, '') + for res in results: + if not res.success: + self.result.set(TestValue.FAILURE, '') diff --git a/src/testium/interpreter/test_items/test_item_image_dialog.py b/src/testium/interpreter/test_items/test_item_image_dialog.py new file mode 100644 index 0000000..c436108 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_image_dialog.py @@ -0,0 +1,71 @@ +import os +import sys +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import TestItem, test_run +from interpreter.test_items.test_result import TestResult, TestValue +from interpreter.test_items.dialog_image_files import dialog_image +import libs.testium as tm +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.tum_except import ETUMSyntaxError + + +class TestItemImageDialog(TestItem): + """dialog_image item usage. + dialog_image name: Nice image, question: could you press the red button, filename: img.jpg + """ + + def __init__(self, dict_item, parent=None, status_queue=None, filename=""): + self._name = cst.TYPE_IMAGE_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_IMAGE_DLG + self.is_container = False + try: + self._question = self._prms.getParam("question", required=True) + self._filename = self._prms.getParam("filename", required=True) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + ourpath = __file__ + test_file = os.path.join( + os.path.dirname(ourpath), "dialog_image_files", "dialog_image.py" + ) + + q = self._prms.expanse(self._question) + image_path = self._prms.expanse(self._filename) + print("Image Displayed:\n" + q + "\n" + image_path) + if not os.path.isfile(image_path): + image_path = os.path.normpath( + os.path.join(tm.gd("test_directory"), image_path) + ) + + parent_conn, child_conn = Pipe() + p = Process( + target=dialog_image.main, args=([self.name(), q, image_path], child_conn) + ) + p.start() + succ = parent_conn.recv() + p.join() + if succ: + self.result.set(TestValue.SUCCESS) + else: + self.result.set(TestValue.FAILURE) + + +def mypath(): + if hasattr(sys, "frozen"): + return os.path.dirname(sys.executable) + return os.path.dirname(__file__) + + +from multiprocessing import Process + +if __name__ == "__main__": + p = Process(target=test_dialog.main, args=(["bob", "bab"],)) + p.start() + p.join() diff --git a/src/testium/interpreter/test_items/test_item_json_rpc/__init__.py b/src/testium/interpreter/test_items/test_item_json_rpc/__init__.py new file mode 100644 index 0000000..1610cb9 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_json_rpc/__init__.py @@ -0,0 +1,246 @@ +import sys +import traceback +from functools import wraps +from random import randint + +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.test_items.test_item import TestItem, test_run +from interpreter.test_items.test_result import TestResult, TestValue + +from interpreter.test_items.item_actions import TestItemActions +from interpreter.test_items.item_actions.action import TestItemAction + +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.eval import evaluate + +from interpreter.test_items.test_item_json_rpc.jsonrpc_adapters import ( + JrpcAdapter, + JrpcConsoleAdapter, + JrpcUdpAdapter, +) + + +class TestItemJSRPCActionOpen(TestItemAction): + + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_JSON_RPC_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + @test_run + def execute(self): + try: + self.token.open() + except Exception as e: + self.result.set( + result=TestValue.FAILURE, + message=f"Error while performing the JSONRPC '{self._name}' action (exception: {e})", + ) + traceback.print_exception(*sys.exc_info()) + else: + self.result.set(result=TestValue.SUCCESS) + + +class TestItemJSRPCActionClose(TestItemAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_JSON_RPC_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + @test_run + def execute(self): + try: + self.token.close() + except Exception as e: + test_res = TestResult( + result=TestValue.FAILURE, + message=f"Error while performing the JSONRPC '{self._name}' action (exception: {e})", + ) + traceback.print_exception(*sys.exc_info()) + else: + self.result.set(result=TestValue.SUCCESS) + + +class TestItemJSRPCActionQuery(TestItemAction): + + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_JSON_RPC_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + self._meth = self._prms.getParam("method", required=True) + self._obj = self._prms.getParam("params", required=False) + if self._obj is None: + self._obj = list() + self._jrpc_id = self._prms.getParam("id", required=False, default="rand") + self._send_only = self._prms.getParam("no_wait", required=False, default=False) + self._timeout = self._prms.getParam("timeout", required=False, default=None) + + @test_run + def execute(self): + meth = self._prms.expanse(self._meth) + obj = self._prms.expanse(self._obj) + jrpc_id = self._prms.expanse(self._jrpc_id) + if isinstance(jrpc_id, str) and jrpc_id.lower().startswith("rand"): + jrpc_id = randint(1, (2**32) - 1) + send_only = self._prms.expanse(self._send_only) + timeout = self._prms.expanse(self._timeout) + try: + success, result = self.token.query( + meth, obj, jrpc_id, send_only, timeout=timeout + ) + except Exception as e: + self.result.set( + result=TestValue.FAILURE, + message=f"Error while performing the JSONRPC '{self._name}' action (exception: {e})", + ) + traceback.print_exception(*sys.exc_info()) + else: + # in case the action returned without error, we + # set the test result value to the data returned by the action. + if not self._send_only: + self.result.value = result + if self._send_only or success: + self.result.set(result=TestValue.SUCCESS) + else: + self.result.set(result=TestValue.FAILURE, message=str(result)) + + +class TestItemJSRPCActionReceive(TestItemAction): + + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_JSON_RPC_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + self._timeout = self._prms.getParam("timeout", required=False, default=None) + self._jrpc_id = self._prms.getParam("id", required=True) + + @test_run + def execute(self): + timeout = self._prms.expanse(self._timeout) + jrpc_id = self._prms.expanse(self._jrpc_id) + + try: + success, result = self.token.receive(jrpc_id, timeout) + except Exception as e: + self.result.set( + result=TestValue.FAILURE, + message=f"Error while performing the JSONRPC '{self._name}' action (exception: {e})", + ) + traceback.print_exception(*sys.exc_info()) + else: + # in case the action returned without error, we + # set the test result value to the data returned by the action. + self.result.value = result + if success: + self.result.set(result=TestValue.SUCCESS) + else: + self.result.set(result=TestValue.FAILURE, message=str(result)) + + +class TestItemJSON_RPC(TestItemActions): + """ + This item TBD + """ + + def __init__( + self, dict_item: dict, parent: TestItem = None, status_queue=None, filename="" + ): + super().__init__( + cst.TYPE_JSON_RPC, dict_item, parent, status_queue, filename=filename + ) + + self.register_actions( + open=TestItemJSRPCActionOpen, + close=TestItemJSRPCActionClose, + query=TestItemJSRPCActionQuery, + receive=TestItemJSRPCActionReceive, + ) + + # Console specific params + self._console = self._prms.getParam("console", required=False) + # UDP specific params + self._udp = self._prms.getParam("udp", required=False) + # Common params + self._jrpc_version = self._prms.getParam( + "version", required=False, default="1.0" + ) + self._timeout = self._prms.getParam("timeout", required=True) + self._mute = self._prms.getParam("mute", required=False, default=False) + + if (self._console is None) and (self._udp is None): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' must have a 'console' or 'udp' parameter", + self.seqFilename(), + ) + + self._is_console = False + if not self._console is None: + self._is_console = True + + def run_before_test(self): + jrpc_version = self._prms.expanse(self._jrpc_version) + mute = self._prms.expanse(self._mute) + timeout = self._prms.expanse(self._timeout) + if self._is_console: + console = self._prms.expanse(self._console) + console_name = console.get("name") + console_prompt = console.get("prompt", "\n") + if console_name is None: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' 'console' configuration needs member 'name' defined", + self.seqFilename(), + ) + jrpc_adapter = JrpcConsoleAdapter( + console_name, console_prompt, timeout, jrpc_version, mute + ) + else: + udp = self._prms.expanse(self._udp) + if udp is None or not isinstance(udp, dict): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' UDP configuration needs 'udp' parameters define", + self.seqFilename(), + ) + + server = udp.get("server") + snd_port = udp.get("snd_port") + rcv_port = udp.get("rcv_port") + bufsize = udp.get("bufsize", 1450) + if server is None or snd_port is None or rcv_port is None: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' UDP configuration needs 'server', 'snd_port' and 'rcv_port' defined", + self.seqFilename(), + ) + jrpc_adapter = JrpcUdpAdapter( + server, snd_port, rcv_port, bufsize, timeout, jrpc_version, mute + ) + + self.actions_token = jrpc_adapter diff --git a/src/testium/interpreter/test_items/test_item_json_rpc/jsonrpc_adapters.py b/src/testium/interpreter/test_items/test_item_json_rpc/jsonrpc_adapters.py new file mode 100644 index 0000000..c8eaff1 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_json_rpc/jsonrpc_adapters.py @@ -0,0 +1,355 @@ +import json +import socket +import re +import struct + +from interpreter.utils.tum_except import ETUMRuntimeError +import libs.testium as tm +from libs.console import Console + + +def is_ip_address(address): + ip_regex = r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$" + return re.match(ip_regex, address) is not None + + +def is_ip_multicast(ip): + # convert the IP as an integer + ip_int = struct.unpack("!I", socket.inet_aton(ip))[0] + # Checks if it is in a multicast range + return 0xE0000000 <= ip_int <= 0xEFFFFFFF + + +def jrpc_query(version: str, method: str, obj, jrpc_id: int): + req = { + "1.0": { + "method": method, + }, + "2.0": { + "jsonrpc": "2.0", + "method": method, + }, + } + if not version in ["1.0", "2.0"]: + raise ETUMRuntimeError("JSONRPC frame creation with bad version value.") + req = req[version] + req["params"] = obj + req["id"] = jrpc_id + return json.dumps(req) + + +class JrpcAdapter: + """Base class for defining a JSONRPC messages handler for the jsonrpc test item.""" + + def __init__(self, timeout: float = 1.0, version="1.0", mute=False) -> None: + self._jrpc_version = version + self._mute = mute + self._timeout = timeout + if not (version == "1.0" or version == "2.0"): + raise ETUMRuntimeError("Invalid JSONRPC version passed.") + + @property + def timeout(self): + return self._timeout + + def check_answer(self, obj, jrpc_id: int) -> None: + if "1.0" == self._jrpc_version: + if not ("error" in obj.keys()): + raise ETUMRuntimeError( + "Malformed JSONRPC 1.0 answer. 'error' required." + ) + if not ("result" in obj.keys()): + raise ETUMRuntimeError( + "Malformed JSONRPC 1.0 answer. 'result' required." + ) + + if obj["result"] is not None and obj["error"] is not None: + raise ETUMRuntimeError( + "Malformed JSONRPC 1.0 answer. If 'result' is not null, 'error' must be null." + ) + + if not ("id" in obj.keys()): + raise ETUMRuntimeError( + "Malformed JSONRPC 1.0 answer. 'id' must be defined." + ) + else: + if "2.0" != obj.get("jsonrpc", ""): + raise ETUMRuntimeError( + "Malformed JSONRPC 2.0 answer. 'jsonrpc' required." + ) + + is_error = True + is_result = True + if not ("error" in obj.keys()): + is_error = False + if not ("result" in obj.keys()): + is_result = False + + if not (is_error ^ is_result): + raise ETUMRuntimeError( + "Malformed JSONRPC 2.0 answer. 'result' and 'result' can't exist together." + ) + + if not ("id" in obj.keys()): + raise ETUMRuntimeError("The JSONRPC answer 'id' must be defined.") + if obj["id"] != jrpc_id: + raise ETUMRuntimeError( + "The JSONRPC answer ID does not correspond to the request" + ) + + def _build_query(self, method: str, obj, jrpc_id: int): + return jrpc_query(self._jrpc_version, method, obj, jrpc_id) + + def _send(self, message: str): + pass + + def _receive(self, timeout: float) -> str: + pass + + def _open(self): + pass + + def _close(self): + pass + + def query( + self, + method: str, + obj, + jrpc_id="rand", + send_only: bool = False, + timeout: float = None, + ): + """This performs a jsonrpc query to a jsonrpc server. + The returned value is a tuple of size 2: + success, data + + if send_only is true, the function returns immediately after sending the request. + None is returned. + + if timeout is None: + the inherited timeout is used. + + if timeout <= 0: + If the response does not come before the end of the timeout, it fails with an exception. + if the id doesn't match, an exception is raised. + success depends on content of the jsonrpc response. + data is the error code if the success if false, otherwise it is the returned value. + + if timeout > 0: + If the response does not come before the end of the timeout, it fails with an exception. + success depends on content of the jsonrpc response. + data is the error code if the success if false, otherwise it is the returned value. + """ + tmout = self._timeout if timeout is None else timeout + self._send(self._build_query(method, obj, jrpc_id)) + if not send_only: + return self.receive(jrpc_id, tmout) + else: + return None, None + + def receive(self, jrpc_id: int, timeout: float = None) -> tuple: + """This function only receives an answer from a jsonrpc request. + The values returned are : + success, data + + if timeout is None: + the inherited timeout is used. + + if timeout <= 0: + if no data is available on the port/console, an exception is raised. + if the id doesn't match, an exception is raised. + success depends on content of the jsonrpc response. + data is the error code if the success if false, otherwise it is the returned value. + + if timeout > 0: + If the response does not come before the end of the timeout, it fails with an exception. + success depends on content of the jsonrpc response. + data is the error code if the success if false, otherwise it is the returned value. + + """ + tmout = self._timeout if timeout is None else timeout + obj = json.loads(self._receive(tmout)) + self.check_answer(obj, jrpc_id) + + if self._jrpc_version == "1.0": + success = obj["error"] is None + else: + success = not obj.get("error", None) is None + if success: + data = obj["result"] + else: + data = obj["error"] + + return success, data + + def open(self): + self._open() + + def close(self): + self._close() + + +class JrpcUdpAdapter(JrpcAdapter): + description = "JSONRPC UDP adapter" + + def __init__( + self, + server: str, + snd_port: int = -1, + rcv_port: int = -1, + bufsize: int = 1450, + timeout: float = 1.0, + version: str = "1.0", + mute: bool = False, + ) -> None: + """server: hostname or ip of the UDP server to which we'll send requests. + snd_port: port to which we'll send requests. + rcv_port: port on which we'll wait for responses. + bufsize: max size of the data to receive + version: jsonrpc version + """ + super().__init__(timeout, version, mute) + self._bufsize = bufsize + self._server = server + self._multicast = False + self._rcv_port = rcv_port + self._snd_port = snd_port + + @property + def sock(self): + return tm.gd(f"jrpc_udp_rcv_port_{self._rcv_port}") + + @sock.setter + def sock(self, s): + tm.setgd(f"jrpc_udp_rcv_port_{self._rcv_port}", s) + + def del_global_sock(self): + tm.delgd(f"jrpc_udp_rcv_port_{self._rcv_port}") + + def _send(self, message: str): + + # gets the address from the hostname if necessary + srv = (self._server, self._snd_port) + if not is_ip_address(self._server): + try: + socket.gethostbyname(self._server) + addrinfo = socket.getaddrinfo( + self._server, self._snd_port, socket.AF_INET, socket.SOCK_DGRAM + ) + srv = addrinfo[0][4] + except socket.gaierror as e: + raise ETUMRuntimeError("JSONRPC udp send unknown address.") + + # Sends the message to the server + self.sock.sendto(message.encode(), srv) + + # Don't log if mute + if not self._mute: + print(f" | sent to @{self._server}:{self._snd_port}") + + def _receive(self, timeout: float) -> str: + + # configures the reception timeout + self.sock.settimeout(timeout) + + # Receives the answer from the server + try: + data, addr = self.sock.recvfrom(self._bufsize) + + # In case of buffer overload we chose to complain + if len(data) >= self._bufsize: + raise ETUMRuntimeError( + "JSONRPC udp answer size overflow. Try to increase the bufsize" + ) + + # Converts binary to string + res = data.decode() + + # Don't log if mute + if not self._mute: + print(f" | UDP answer: '{res}'") + print(f" | received from @{addr[0]}:{addr[1]}") + + except socket.timeout: + raise ETUMRuntimeError( + "JSONRPC udp answer took too long. Try to increase the timeout." + ) + return res + + def _build_query(self, method: str, obj, jrpc_id: int): + # Overload of the super build query to allow display of the sent message + message = super()._build_query(method, obj, jrpc_id) + print(f" | UDP query: '{message}'") + return message + + def _open(self): + # Complain if the socket already exists + if not tm.gd(f"jrpc_udp_rcv_port_{self._rcv_port}") is None: + raise ETUMRuntimeError( + f"A unclosed socket exists for the current reception port ({self._rcv_port})" + ) + + if is_ip_address(self._server) and is_ip_multicast(self._server): + self._multicast = True + + # Creates the socket and bind to the reception port + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + if self._multicast: + ttl = struct.pack("b", 1) + self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl) + + self.sock.settimeout(self.timeout) + self.sock.bind(("", self._rcv_port)) + + def _close(self): + + try: + self.sock.close() + except: + pass + self.del_global_sock() + + +class JrpcConsoleAdapter(JrpcAdapter): + description = "JSONRPC console adapter" + + def __init__( + self, + cons_name: str, + endswith: str = "\n", + timeout: float = 1.0, + version: str = "1.0", + mute: bool = False, + ) -> None: + """ """ + super().__init__(timeout, version, mute) + self._endswith = endswith + self._json_regexp = re.compile(r"^\s*{", re.MULTILINE) + + # if the console is not defined in global we complain + self._cons = tm.console(cons_name) + if self._cons is None: + raise ETUMRuntimeError( + f"The '{cons_name}' console can't be found in global directory." + ) + + def _send(self, message: str): + self._cons.write(message + "\n") + + def _receive(self, timeout: float) -> str: + status, data = self._cons.read_until( + self._endswith, timeout, return_data=True, mute=self._mute + ) + + # if we did not receive anything, we complain + if not status == 0: + raise ETUMRuntimeError( + f"The '{self._cons.name}' console did not answer in the requested time." + ) + + res = list(self._json_regexp.finditer(data)) + if len(res) <= 0: + raise ETUMRuntimeError("Not found JSON '^{'") + + return data[res[-1].start() : -len(self._endswith)] diff --git a/src/testium/interpreter/test_items/test_item_let.py b/src/testium/interpreter/test_items/test_item_let.py new file mode 100644 index 0000000..8ab6ac2 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_let.py @@ -0,0 +1,70 @@ +import random +import os +import sys +import time + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.utils.tum_except import ETUMSyntaxError +import libs.testium as tm +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.eval import evaluate + +class TestItemLet(TestItem): + """let item usage. + let values: {variable1: a, variable2: /dev/ttyUSB0, variable3: 115200} + let eval: {conditional_exec: "random.randint(1, 4)"} + """ + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_LET.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_LET + self.is_container = False + try: + self._values_list = self._prms.getParamAll('values', default=[], required=False) + self._eval_list = self._prms.getParamAll('eval', default=[], required=False) + if (len(self._values_list) <= 0) and (len(self._eval_list) <= 0): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' must have a 'values' or 'eval' parameter", + self.seqFilename(), + ) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + if isinstance(self._values_list, dict): + l = [] + for k in self._values_list.keys(): + l.append({k: self._values_list[k]}) + self._values_list = l + if isinstance(self._eval_list, dict): + l = [] + for k in self._eval_list.keys(): + l.append({k: self._eval_list[k]}) + self._eval_list = l + #test core function + for i in self._values_list: + for k, v in i.items(): + key = self._prms.expanse(k) + ev = self._prms.expanse(v) + tm.setgd(key, ev) + self.result.reported = {key: ev} + print('global value "{}" set to "{}"'.format(key, ev)) + + for i in self._eval_list: + for k, v in i.items(): + key = self._prms.expanse(k) + val = self._prms.expanse(v) + is_evaluated, ev = evaluate(val) + if not is_evaluated: + self.result.set(TestValue.FAILURE, "Error evaluating: '{}'".format(val)) + return + tm.setgd(key, ev) + self.result.reported = {key: ev} + print('global value "{}" set to "{}"'.format(key, ev)) + + self.result.set(TestValue.SUCCESS, 'Variable set') diff --git a/src/testium/interpreter/test_items/test_item_msg_dialog.py b/src/testium/interpreter/test_items/test_item_msg_dialog.py new file mode 100644 index 0000000..f071004 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_msg_dialog.py @@ -0,0 +1,54 @@ +import os +import sys +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestValue) +from interpreter.test_items.dialog_msg_files import msg_dialog +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.tum_except import ETUMSyntaxError + +class TestItemMsgDialog(TestItem): + """dialog_message item usage. + dialog_message name: Nice message, question: Open the door and press OK + """ + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_MESSAGE_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_MESSAGE_DLG + self.is_container = False + try: + self._question = self._prms.getParam('question', required = True) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + ourpath = __file__ + test_file = os.path.join(os.path.dirname(ourpath), + 'dialog_msg_files', + 'msg_dialog.py') + + q = self._prms.expanse(self._question) + print("Message Displayed:\n" + q) + parent_conn, child_conn = Pipe() + p=Process(target=msg_dialog.main, + args=([self.name(), q],)) + p.start() + p.join() + self.result.set(TestValue.SUCCESS) + +def mypath(): + if hasattr(sys, "frozen"): + return os.path.dirname(sys.executable) + return os.path.dirname(__file__) + +from multiprocessing import Process + +if __name__=='__main__': + p=Process(target=msg_dialog.main, args=(['bob', 'bab'],)) + p.start() + p.join() diff --git a/src/testium/interpreter/test_items/test_item_note_dialog.py b/src/testium/interpreter/test_items/test_item_note_dialog.py new file mode 100644 index 0000000..1174a70 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_note_dialog.py @@ -0,0 +1,62 @@ +import os +import sys +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.test_items.dialog_note_files import test_dialog +from interpreter.utils.tum_except import ETUMSyntaxError +import libs.testium as tm +from interpreter.utils.constants import TestItemType as cst + +class TestItemNoteDialog(TestItem): + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_NOTE_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_NOTE_DLG + self.is_container = False + try: + self._question = self._prms.getParam('question', required = True) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + ourpath = __file__ + test_file = os.path.join(os.path.dirname(ourpath), + 'dialog_note_files', + 'test_dialog.py') + + q = self._prms.expanse(self._question) + print("Question:\n" + q) + parent_conn, child_conn = Pipe() + p=Process(target=test_dialog.main, args=([self.name(), q],child_conn)) + p.start() + val, succ = parent_conn.recv() + p.join() + tm.setgd(self.name(), val) + print("\n" + ("-" * 80) + "\n") + print("- Test note\n") + print("-" * 80 + "\n") + print(val) + print("-" * 80 + "\n") + self.result.reported = {'note': val} + if succ: + self.result.set(TestValue.SUCCESS, val) + else: + self.result.set(TestValue.FAILURE, val) + +def mypath(): + if hasattr(sys, "frozen"): + return os.path.dirname(sys.executable) + return os.path.dirname(__file__) + +from multiprocessing import Process + +if __name__=='__main__': + p=Process(target=test_dialog.main, args=(['bob', 'bab'],)) + p.start() + p.join() diff --git a/src/testium/interpreter/test_items/test_item_question_dialog.py b/src/testium/interpreter/test_items/test_item_question_dialog.py new file mode 100644 index 0000000..5b9d6e0 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_question_dialog.py @@ -0,0 +1,62 @@ +import os +import sys +from multiprocessing import Process, Pipe + +from PySide6.QtWidgets import QMessageBox + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.test_items.dialog_question_files import question_dialog +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.constants import TestItemType as cst + +class TestItemQuestionDialog(TestItem): + """dialog_question item usage. + dialog_question name: Nice question, question: "If OK, press OK, If not, press cancel" + """ + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_QUESTION_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_QUESTION_DLG + self.is_container = False + try: + self._question = self._prms.getParam('question', required = True) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + ourpath = __file__ + test_file = os.path.join(os.path.dirname(ourpath), + 'dialog_question_files', + 'question_dialog.py') + + q = self._prms.expanse(self._question) + print('Question asked:\n' + q + '\n') + parent_conn, child_conn = Pipe() + p=Process(target=question_dialog.main, + args=([self.name(), q],child_conn)) + p.start() + succ = parent_conn.recv() + p.join() + if succ == QMessageBox.Yes: + self.result.set(TestValue.SUCCESS) + print('Answer: YES\n') + else: + self.result.set(TestValue.FAILURE) + print('Answer: NO\n') + +def mypath(): + if hasattr(sys, "frozen"): + return os.path.dirname(sys.executable) + return os.path.dirname(__file__) + +from multiprocessing import Process + +if __name__=='__main__': + p=Process(target=test_dialog.main, args=(['bob', 'bab'],)) + p.start() + p.join() diff --git a/src/testium/interpreter/test_items/test_item_report.py b/src/testium/interpreter/test_items/test_item_report.py new file mode 100644 index 0000000..e30ccee --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_report.py @@ -0,0 +1,41 @@ + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestValue) +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.constants import TestItemType as cst +from interpreter.test_report.test_report import Export + +class TestItemReport(TestItem): + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_REPORT.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_REPORT + self.is_container = False + + if not 'export' in dict_item: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' needs an 'export' section", + self.seqFilename() + ) + + self.tum_report = dict_item['export'] + + @test_run + def execute(self): + self.result.set(TestValue.FAILURE, 'an exception occured during report execution.') + + dict_rep = self._prms.expanse(self.tum_report) + if not isinstance(dict_rep, list): + self.result.set(TestValue.FAILURE, 'Report item needs a "report" section') + return + rep_name = self._prms.expanse(self._name) + + reports = [] + for exp in dict_rep: + reports.append(Export(exp)) + + success = TestValue.SUCCESS + for rep in reports: + rep.exec(self.report.db_connection, rep_name, no_header=True) + + self.result.set(success) diff --git a/src/testium/interpreter/test_items/test_item_run.py b/src/testium/interpreter/test_items/test_item_run.py new file mode 100644 index 0000000..f308db7 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_run.py @@ -0,0 +1,127 @@ +import os +from posixpath import splitext +import sys +import subprocess +from datetime import datetime +from time import sleep +import traceback + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestValue) +import libs.testium as tm +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.tum_except import ETUMSyntaxError, ETUMRuntimeError + + +def nowInBetween(start, end): + """ + Check wether current time is within boundaries + """ + now = datetime.now().time() + if start <= end: + return start <= now < end + else: + return start <= now or now < end + + +class TestItemRun(TestItem): + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_RUN.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_RUN + self.is_container = False + try: + self.tum_fime = self._prms.getParam('tum_fime', required=True) + self.param_file = self._prms.getParam('param_file', default='') + self.python_path = self._prms.getParam('python_path', default='') + self.testium_path = self._prms.getParam('testium_path', default='') + self.log_path = self._prms.getParam('log_file', default='') + self.report_path = self._prms.getParam('report_file', default='') + self.start_time = self._prms.getParam('start_time') + self.end_time = self._prms.getParam('end_time') + self.wait_for_exec = self._prms.getParam('wait_for_exec') + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + res = -1 + try: + file_path = self._prms.expanse(self.tum_fime) + if not os.path.exists(file_path) and not os.path.isabs(file_path): + file_path = os.path.join(tm.gd('test_directory'), self.tum_fime) + if not os.path.isfile(file_path): + raise ETUMRuntimeError( + '"{}" file could not be found'.format(file_path)) + self.tum_fime = file_path + pf = self._prms.expanse(self.param_file) + pp = self._prms.expanse(self.python_path) + sp = self._prms.expanse(self.testium_path) + lp = self._prms.expanse(self.log_path) + rp = self._prms.expanse(self.report_path) + cmd = [] + if pp != '': + cmd.append(pp) + if sp == '': + sp = os.path.join(tm.get_main_dir(), "testium.pyw") + cmd.append(sp) + if lp == '': + lp = os.path.splitext(self.tum_fime)[0] + "_" + \ + datetime.utcnow().isoformat(timespec='seconds') + '.log' + cmd.append("-r") + if pf != '': + cmd.append("-c") + cmd.append('"' + pf + '"') + cmd.append("-l") + cmd.append('"' + lp + '"') + if rp != '': + cmd.append("-p") + cmd.append('"' + rp + '"') + cmd.append(self.tum_fime) + for c in cmd: + print(c, end = ' ') + + if self.start_time is not None: + self.start_time = datetime.strptime( + self.start_time, '%H:%M').time() + + if self.end_time is not None: + self.end_time = datetime.strptime(self.end_time, '%H:%M').time() + + if self.wait_for_exec and (self.start_time is None or self.end_time is None): + raise ETUMRuntimeError( + '"wait_for_exec" set but not start_time or end_time') + + if self.wait_for_exec: + while not nowInBetween(self.start_time, self.end_time): + sleep(60) + r = subprocess.run( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + elif self.start_time is not None and self.end_time is not None: + if nowInBetween(self.start_time, self.end_time): + r = subprocess.run( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + elif self.start_time is not None: + if self.start_time < datetime.now().time(): + r = subprocess.run( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + else: + r = subprocess.run( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if isinstance(r, subprocess.CompletedProcess): + print((r.stdout).decode()) + print(r.stderr.decode()) + res = r.returncode + if res >= 0: + self.result.set(TestValue.SUCCESS) + else: + self.result.set(TestValue.FAILURE, + 'Test execution returned negative value.') + except: + traceback.print_exception(*sys.exc_info()) + self.result.set(TestValue.FAILURE, 'Unrecoverable "run" item error') + + diff --git a/src/testium/interpreter/test_items/test_item_runtime_plot.py b/src/testium/interpreter/test_items/test_item_runtime_plot.py new file mode 100644 index 0000000..888f0f4 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_runtime_plot.py @@ -0,0 +1,243 @@ +import sys +import importlib +import traceback +from functools import wraps + +import libs.testium as tm +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.test_items.test_item import TestItem, test_run +from interpreter.test_items.test_result import TestResult, TestValue +from interpreter.test_items.item_actions import TestItemActions +from interpreter.test_items.item_actions.action import TestItemAction +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.eval import evaluate + + +class TestItemPlotAction(TestItemAction): + + def get_plot(self): + gname = self._prms.expanse(self.token) + return gname, tm.plot(gname) + + +class TestItemPlotActionOpen(TestItemPlotAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_GRAPH_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + self._log_path = self._prms.getParam("log_path", None, required=False) + + @test_run + def execute(self): + try: + gname = self._prms.expanse(self.token) + lpath = self._prms.expanse(self._log_path) + gr = runtime_plot.RuntimePlot(gname, lpath) + tm.add_plot(gr) + + except Exception as e: + self.result.set( + result=TestValue.FAILURE, + message="Impossible to open the plot ({}) (exception: {})".format( + self._plot_name, e + ), + ) + traceback.print_exception(*sys.exc_info()) + else: + self.result.set(result=TestValue.SUCCESS) + + +class TestItemPlotActionClose(TestItemPlotAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_GRAPH_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + self._wait_dialog_exit = self._prms.getParam("wait_dialog_exit", False) + self._timeout = self._prms.getParam("timeout", -1) + + @test_run + def execute(self): + gname, gr = self.get_plot() + wait_exit = self._prms.expanse(self._wait_dialog_exit) + tmout = self._prms.expanse(self._timeout) + try: + if wait_exit: + gr.close_wait_dialog_exit(tmout) + else: + gr.close() + except Exception as e: + self.result.set( + result=TestValue.FAILURE, + message="Impossible to close the plot ({}) (exception: {})".format( + gname, e + ), + ) + traceback.print_exception(*sys.exc_info()) + else: + self.result.set(result=TestValue.SUCCESS) + tm.remove_plot(gname) + + +class TestItemPlotActionPeriodic(TestItemPlotAction): + def __init__( + self, action_name, dict_item, parent=None, status_queue=None, filename="" + ): + super().__init__( + action_name, + cst.TYPE_GRAPH_ACTION, + dict_item, + parent, + status_queue, + filename=filename, + ) + + # Periodic function call + try: + self.period = self._prms.getParam("period", required=True) + self.file_name = self._prms.getParam("file", required=True) + self.func_name = self._prms.getParam("func_name", required=True) + self.params = self._prms.getParamAll("param") + self.post_eval = self._prms.getParam("eval", default="") + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' 'periodic' action settings syntax error", + self.seqFilename(), + ) + + @test_run + def execute(self): + gname, gr = self.get_plot() + try: + file = self._prms.expanse(self.file_name) + func_name = self._prms.expanse(self.func_name) + param_list = self._prms.getParamFromList(self.params) + pl = self._prms.expanse(param_list) + post_eval = self._prms.expanse(self.post_eval) + gr.add_periodic(self.period, file, func_name, pl, post_eval) + + except: + traceback.print_exception(*sys.exc_info()) + self.result.set( + result=TestValue.FAILURE, message='Unrecoverable "plot" item error' + ) + else: + self.result.set(result=TestValue.SUCCESS) + + +class TestItemPlotActionAdd(TestItemPlotAction): + def __init__(self, action_name, dict_item, parent=None, status_queue=None, filename=""): + super().__init__( + action_name, cst.TYPE_GRAPH_ACTION, dict_item, parent, status_queue, filename=filename + ) + + @test_run + def execute(self): + gname, gr = self.get_plot() + input = self._prms.getData() + data = {} + if isinstance(input, str): + input = self._prms.expanse(input) + + if isinstance(input, dict): + for k, v in input.items(): + v = self._prms.expanse(v) + _, v = evaluate(v) + data.update({k: v}) + + gr.add(data) + + else: + self.result.set( + TestValue.FAILURE, + f"Plot item ({self._name}) 'add' content must be a dict.", + ) + return + + self.result.set(result=TestValue.SUCCESS) + + +class TestItemPlotActionLastValues(TestItemPlotAction): + def __init__(self, action_name, dict_item, parent=None, status_queue=None, filename=""): + super().__init__( + action_name, cst.TYPE_GRAPH_ACTION, dict_item, parent, status_queue, filename=filename + ) + + @test_run + def execute(self): + gname, gr = self.get_plot() + test_res = {} + keys = self._prms.getParam("name", [], processed=True) + if isinstance(keys, list): + last_values = gr.last_values() + for k in keys: + test_res.update({k: last_values.get(k, None)}) + else: + self.result.set( + TestValue.FAILURE, + f"Plot item ({self._name}) 'name' parameter of 'last_value' action must be a list.", + ) + return + + tm.setgd("plv_" + gname, test_res) + self.result.value = test_res + self.result.set(result=TestValue.SUCCESS) + + +class TestItemPlotActionExport(TestItemPlotAction): + def __init__(self, action_name, dict_item, parent=None, status_queue=None, filename=""): + super().__init__( + action_name, cst.TYPE_GRAPH_ACTION, dict_item, parent, status_queue, filename=filename + ) + + self.file_name = self._prms.getData() + if not isinstance(self.file_name, str): + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' 'export' parameter must be a file name", + self.seqFilename() + ) + + @test_run + def execute(self): + gname, gr = self.get_plot() + fn = self._prms.expanse(self.file_name) + if gr is not None: + gr.save(fn) + print(f"Saved '{gname}' plot in '{fn}'") + self.result.set(result=TestValue.SUCCESS) + + +class TestItemPlot(TestItemActions): + def __init__(self, dict_item, parent=None, status_queue=None, filename=""): + super().__init__( + cst.TYPE_GRAPH, dict_item, parent, status_queue, filename=filename + ) + + self.register_actions( + open=TestItemPlotActionOpen, + close=TestItemPlotActionClose, + periodic=TestItemPlotActionPeriodic, + add=TestItemPlotActionAdd, + last_value=TestItemPlotActionLastValues, + export=TestItemPlotActionExport, + ) + + self.actions_token = self._prms.getParam("plot_name", required=True) + + global runtime_plot + runtime_plot = importlib.import_module("libs.runtime_plot") diff --git a/src/testium/interpreter/test_items/test_item_sleep.py b/src/testium/interpreter/test_items/test_item_sleep.py new file mode 100644 index 0000000..40a6b3a --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_sleep.py @@ -0,0 +1,71 @@ +import re +from time import sleep +from datetime import timedelta +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestValue) +from interpreter.test_items.dialog_sleep_files import dialog_sleep +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.tum_except import ETUMSyntaxError, ETUMRuntimeError + +class TestItemSleep(TestItem): + """sleep item usage. + sleep timeout: 10 + """ + + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_SLEEP.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_SLEEP + self.is_container = False + try: + self._timeout = self._prms.getParam('timeout', required = True) + self._has_dialog = self._prms.getParam('dialog', default=False) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + + timeout = self._prms.expanse(self._timeout) + + if isinstance(timeout, str) and timeout.isnumeric(): + timeout = float(timeout) + elif isinstance(timeout, str): + m = re.search(r"((?P\d+)d)?\s*((?P\d+)h)?\s*((?P\d+)m)?\s*((?P\d+)s)?", timeout, flags=re.IGNORECASE) + if m.lastindex is not None : + day = int(m.group("day")) if m.group("day") is not None else 0 + hour = int(m.group("hour")) if m.group("hour") is not None else 0 + minute = int(m.group("minute")) if m.group("minute") is not None else 0 + second = int(m.group("second")) if m.group("second") is not None else 0 + timeout = timedelta(days=day, hours=hour, minutes=minute, seconds=second).total_seconds() + + has_dialog = self._prms.expanse(self._has_dialog) + + #test core function + if has_dialog: + parent_conn, child_conn = Pipe() + p=Process(target=dialog_sleep.main, args=([self.name(), timeout],child_conn)) + p.start() + succ = parent_conn.recv() + p.join() + + if succ: + mesg = 'Sleep %s sec' % (str(timeout)) + res = TestValue.SUCCESS + else: + mesg = 'Sleep aborted' + print("Aborted") + res = TestValue.FAILURE + + self.result.set(res, mesg) + + else: + if not isinstance(timeout, (int, float)): + raise ETUMRuntimeError(f"Timeout value of sleep test item \"{self.name}\" is not valid: \"{timeout}\".") + sleep(timeout) + self.result.set(TestValue.SUCCESS, 'Sleep %s sec' % (str(timeout))) diff --git a/src/testium/interpreter/test_items/test_item_tested_references.py b/src/testium/interpreter/test_items/test_item_tested_references.py new file mode 100644 index 0000000..09548cc --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_tested_references.py @@ -0,0 +1,77 @@ +import os +import sys +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.test_items.tested_references_files import tested_refs_dialog +import libs.testium as tm +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.constants import TestItemType as cst + +class TestItemTestedRefsDialog(TestItem): + def __init__(self, dict_item, parent=None, status_queue=None, filename=""): + self._name = cst.TYPE_REFERENCE_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_REFERENCE_DLG + self.is_container = False + try: + self._question = self._prms.getParam('question', required=True) + self._init_values = self._prms.getParamAll('reference', required=False, processed=True) + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + ourpath=__file__ + test_file=os.path.join(os.path.dirname(ourpath), + 'tested_references_files', + 'tested_refs_dialog.py') + + q=self._prms.expanse(self._question) + parent_conn, child_conn=Pipe() + init_values=','.join(self._init_values) + p=Process(target=tested_refs_dialog.main, + args=([self.name(), q, init_values], + child_conn)) + p.start() + val, succ=parent_conn.recv() + p.join() + + titems=[] + if len(val) > 0: + i = 0 + for sitem in val.split(','): + titem={} + telems=sitem.split('/') + titem['reference']=telems[0] + titem['revision']=telems[1] + titem['serial']=telems[2] + print("Identification:\n" + str(titem)) + titems.append(titem) + self.result.reported = {'reference_{}'.format(i): titem} + i = i + 1 + self.result.value = titems + tm.setgd('tested_items', titems) + if len(val) > 0: + if succ: + self.result.set(TestValue.SUCCESS, val) + else: + self.result.set(TestValue.FAILURE, val) + else: + self.result.set(TestValue.FAILURE, 'The dialog did not return any value') + +def mypath(): + if hasattr(sys, "frozen"): + return os.path.dirname(sys.executable) + return os.path.dirname(__file__) + +from multiprocessing import Process + +if __name__ == '__main__': + p=Process(target=test_dialog.main, args=(['bob', 'bab'],)) + p.start() + p.join() diff --git a/src/testium/interpreter/test_items/test_item_unittest.py b/src/testium/interpreter/test_items/test_item_unittest.py new file mode 100644 index 0000000..ed27f47 --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_unittest.py @@ -0,0 +1,220 @@ +import os +import sys +from unittest import (TestCase, TestSuite, TextTestRunner, + TextTestResult) +from unittest.loader import defaultTestLoader + +import libs.testium as tm +from interpreter.utils.tum_except import (ETUMFileError) +from interpreter.utils.modules import load_source +from interpreter.test_items.test_item import (TestItem, test_run, LOG_TEST_STOP, LOG_TEST_START) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.test_items.test_item import test_data +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.stdout_redirect import stdio_redir + +class UnittestResult(TextTestResult): + """Test result adapted for unittest test""" + _status_queue = None + reported_values = {} + + def __init__(self, stream, descriptions, verbosity): + super().__init__(stdio_redir.stream, descriptions, verbosity) + self.separator2 = "" + + @classmethod + def setStatusQueue(self, status_queue): + self._status_queue = status_queue + + def __sendStatus(self, test, result, msg=''): + if hasattr(test, '_id'): + self.res = TestResult(result=result, message = msg) + self.res.test_id = test._id + self.res.sendStatus(self._status_queue) + self.duration = tm.timestamp() - self._timestamp + + def __sendStatusStarted(self, test): + self._status_queue.put({'id':test._id, 'status':'started', + 'timestamp':self._timestamp}) + + def __sendStatusStopped(self, test): + self._status_queue.put({'id':test._id, 'status':'finished', 'duration': self.duration}) + + def stop(self): + super().stop() + + def addSuccess(self, test): + super().addSuccess(test) + self.__sendStatus(test, TestValue.SUCCESS) + + def addError(self, test, err): + super().addError(test, err) + self.__sendStatus(test, TestValue.FAILURE, str(err[1])) + + def addFailure(self, test, err): + super().addFailure(test, err) + self.__sendStatus(test, TestValue.FAILURE, str(err[1])) + + def addSkip(self, test, reason): + super().addSkip(test, reason) + self.__sendStatus(test, TestValue.NORUN) + + def addExpectedFailure(self, test, err): + super().addExpectedFailure(test, err) + self.__sendStatus(test, TestValue.FAILURE, str(err[1])) + + def addUnexpectedSuccess(self, test): + super().addUnexpectedSuccess(test) + self.__sendStatus(test, TestValue.SUCCESS) + + def startTest(self, test): + """Called when the given test is about to be run. + """ + self._timestamp = test.t0 + s = LOG_TEST_START.format(test._item_name) + s = (s + '{:>'+str(max(1, 80-len(s))) + + '}').format(str('@@{}@@'.format(test.t0))) + print(s) + self.__sendStatusStarted(test) + super().startTest(test) + + def stopTest(self, test): + "Called when the given test is about to be run" + super().stopTest(test) + print(LOG_TEST_STOP.format(test._item_name) + ": " + str(self.res.test_result)) + self.__sendStatusStopped(test) + +class TestItemUnittestElement(TestItem): + def __init__(self, name, parent = None, status_queue=None, filename=""): + super().__init__(None, parent, status_queue, filename=filename) + self.is_container = False + self._name = name + self._type = cst.TYPE_UNITTEST_STEP + self.banner = "" + self.footer = "" + + +class TestItemUnittestFile(TestItem): + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_UNITTEST_FILE.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self.is_container = True + self._type = cst.TYPE_UNITTEST_FILE + self._fileName = self._prms.getParam('test_file', required = True, processed = True) + self._testDir = '' + self._test_methods = self._prms.getParamAll('test_method', processed=True) + + def setTestDir(self, dir): + self._testDir=dir + + def __runALoop(self): + results = [] + i = 0 + to_be_stopped = False + while (not self.isStopped()) and (i < self.childCount()) and (not to_be_stopped): + if not self.child(i).enabled: + res = TestResult(self.child(i), TestValue.NORUN) + else: + ts = TestSuite() + test = self.child(i).test + test.t0 = tm.timestamp() + test._item_name = self.child(i).name() + ts.addTest(test) + self.child(i).t0 = test.t0 + try: + try: + result = self.test_runner.run(ts) + finally: + self.child(i).duration = tm.timestamp() - self.child(i).t0 + except: + res = TestResult(self.child(i), TestValue.FAILURE, '"{}" crashed.'.format(test._item_name)) + else: + if len(result.failures)>0 or len(result.errors)>0: + res = TestResult(self.child(i), TestValue.FAILURE) + elif (len(result.skipped)>0): + res = TestResult(self.child(i), TestValue.NORUN) + else: + res = TestResult(self.child(i), TestValue.SUCCESS) + self.report.addTest(self.child(i), res) + if res.test_result == TestValue.FAILURE and self._stop_on_failure: + to_be_stopped = True + results.append(res) + i = i + 1 + + test_success = TestValue.SUCCESS + for res in results: + if res.test_result == TestValue.FAILURE: + test_success = TestValue.FAILURE + break + + result = TestResult(None, test_success, 'Unittest file') + return result + + @test_run + def execute(self): + # set the queue where steps have to send their results + self.test_runner.resultclass.setStatusQueue(self.status_queue) + + # Execute the tests + result = self.__runALoop() + + if self.isStopped(): + self.result.set(TestValue.NORUN, 'Group execution aborted on user request') + else: + self.result.set(result.test_result, 'unittest file ' + str(result.test_result)) + + def load(self): + ret = {} + if self._fileName == '': + raise ETUMFileError('A file name is expected but got "None"') + + if not os.path.isabs(self._fileName): + self._fileName = os.path.normpath(os.path.join(self._testDir, self._fileName)) + + if not os.path.isfile(self._fileName): + raise ETUMFileError('File "%s" is not found' % (self._fileName)) + + sys.path.append(os.path.dirname(self._fileName)) + + self.test_runner = TextTestRunner(verbosity=2, + resultclass=UnittestResult, + failfast=self._stop_on_failure) + self.test_loader = defaultTestLoader + + test_suites = [] + modulename = os.path.basename(self._fileName).split('.')[0] + module = load_source(modulename, os.path.abspath(self._fileName)) + testnames = [] + for name in dir(module): + try: + obj = getattr(module, name) + if (isinstance(obj, type) and issubclass(obj, TestCase)): + tcn = self.test_loader.getTestCaseNames(obj) + testnames = [*testnames, *tcn] + test_suites.append(TestSuite(list(map(obj, tcn)))) + except ImportError: + # case where the module in scope can't be imported for any reason + pass + + for test_method in self._test_methods: + if not test_method in testnames: + raise ETUMFileError('Test method "%s" is not found in "%s"' % ( + test_method, self._fileName)) + + for tests in test_suites: + for test in tests: + test_name = (str(test).split('(')[0]).strip() + if (test_name in self._test_methods) or (len(self._test_methods) == 0): + item = TestItemUnittestElement(test_name, self) + # set the test_item id in the test_step instance for + # later status sending + test._id = item.id() + test.reported_values = {} + item.test = test + item._doc = test._testMethodDoc + if item._doc is None: + item._doc = '' + + ret.update(test_data(item, {})) + + return ret \ No newline at end of file diff --git a/src/testium/interpreter/test_items/test_item_value_dialog.py b/src/testium/interpreter/test_items/test_item_value_dialog.py new file mode 100644 index 0000000..53341be --- /dev/null +++ b/src/testium/interpreter/test_items/test_item_value_dialog.py @@ -0,0 +1,67 @@ +import os +import sys +from multiprocessing import Process, Pipe + +from interpreter.test_items.test_item import (TestItem, test_run) +from interpreter.test_items.test_result import (TestResult, TestValue) +from interpreter.test_items.dialog_value_files import test_dialog +import libs.testium as tm +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.constants import TestItemType as cst + +class TestItemValueDialog(TestItem): + """dialog_value item usage. + dialog_value name: Enter value, question: "Which value did you measure?" + """ + def __init__(self, dict_item, parent = None, status_queue=None, filename=""): + self._name = cst.TYPE_VALUE_DLG.item_name + super().__init__(dict_item, parent, status_queue, filename=filename) + self._type = cst.TYPE_VALUE_DLG + self.is_container = False + try: + self._question = self._prms.getParam('question', required = True) + self._default = self._prms.getParam('default', '') + except: + raise ETUMSyntaxError( + f"The '{self.cmd()}' test item named '{self.name()}' has a missing or wrong parameter", + self.seqFilename(), + ) + + @test_run + def execute(self): + ourpath = __file__ + test_file = os.path.join(os.path.dirname(ourpath), + 'dialog_value_files', + 'test_dialog.py') + + q = self._prms.expanse(self._question) + d = self._prms.expanse(self._default) + print("Question:\n" + q) + parent_conn, child_conn = Pipe() + p=Process(target=test_dialog.main, args=([self.name(), q, d],child_conn)) + p.start() + val, succ = parent_conn.recv() + p.join() + tm.setgd(self.name(), val) + print("Answer: " + val) + if len(val) > 0: + self.result.reported = {'question': q, 'answer': val} + self.result.value = val + if succ: + self.result.set(TestValue.SUCCESS, val) + else: + self.result.set(TestValue.FAILURE, val) + else: + self.result.set(TestValue.FAILURE, 'The dialog did not return any value') + +def mypath(): + if hasattr(sys, "frozen"): + return os.path.dirname(sys.executable) + return os.path.dirname(__file__) + +from multiprocessing import Process + +if __name__=='__main__': + p=Process(target=test_dialog.main, args=(['bob', 'bab'],)) + p.start() + p.join() diff --git a/src/testium/interpreter/test_items/test_result.py b/src/testium/interpreter/test_items/test_result.py new file mode 100644 index 0000000..9b5ab0d --- /dev/null +++ b/src/testium/interpreter/test_items/test_result.py @@ -0,0 +1,83 @@ +from interpreter.utils.tum_except import (ETUMRuntimeError) + +from datetime import datetime +from enum import Enum +import json + +class TestValue(Enum): + SUCCESS = 0 + FAILURE = -1 + NORUN = -2 + + def __str__(self): + r = '' + if self == self.SUCCESS: + r = 'PASS' + if self == self.FAILURE: + r = 'FAIL' + if self == self.NORUN: + r = 'SKIP' + return r + +class TestResult: + def __init__(self, test=None, result=None, message=''): + + self.test_name = '' + self.id = -1 + self.test_id = -1 + self.value = None # Optional : used to handle values to + # be evaluated if success of failure (function item for ex.) + + if test is not None: + self.test_name = test.name() + self.test_id = test.id() + + self.__reported_values = {} + self.set(result, message) + + def set(self, result, message = ''): + self.test_result = result + if not (message == ''): + self.message = message + else: + self.message = str(self.test_result) + + @property + def success(self): + return TestValue.SUCCESS == self.test_result + + @property + def test_result(self): + return self._result + + @test_result.setter + def test_result(self, result): + if (isinstance(result, TestValue)) or (result is None): + self._result = result + else: + raise(ETUMRuntimeError('Test result (for reporting) must be a "TestValue" class instance')) + + @property + def reported(self): + return self.__reported_values + + @reported.setter + def reported(self, value): + self.__reported_values.update(value) + + def reportedJSON(self): + return json.dumps(self.__reported_values) + + def sendStatus(self, status_queue): + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + date_str = '[{}]'.format(date_str) + status = {'id':self.test_id, + 'name':self.test_name, + 'value':self.test_result.value, + 'message':self.message, + 'date':date_str} + if status_queue is not None: + status_queue.put(status) + else: + raise(ETUMRuntimeError("TestResult can't send status. status_queue is 'None'")) + diff --git a/src/testium/interpreter/test_items/tested_references_files/__init__.py b/src/testium/interpreter/test_items/tested_references_files/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_items/tested_references_files/tested_refs_dialog.py b/src/testium/interpreter/test_items/tested_references_files/tested_refs_dialog.py new file mode 100644 index 0000000..6e4868f --- /dev/null +++ b/src/testium/interpreter/test_items/tested_references_files/tested_refs_dialog.py @@ -0,0 +1,99 @@ +import sys +import os +from multiprocessing import freeze_support + +from PySide6.QtWidgets import (QApplication, QDialog, QTableWidgetItem) +from PySide6.QtCore import (Qt, QSettings) + +try: + from interpreter.test_items.tested_references_files import tested_refs_win +except: + import tested_refs_win + +class TestedRefsWindow(QDialog, tested_refs_win.Ui_Dialog): + def __init__(self): + super().__init__() + self.setupUi(self) + +def main(args, conn=None): + SettingsCompagny = 'Testium' + SettingsApplication = 'testium_ref_item' + SettingsLastReference = 'lastReference' + success = True + app = QApplication(args) + d = TestedRefsWindow() + d.setFixedSize(481,386) + d.setWindowFlags(Qt.WindowStaysOnTopHint) + d.setWindowTitle(args[0]) + d.labelDialog.setText(args[1]) + d.tableReferences.horizontalHeader().setStretchLastSection(True) + + settings = QSettings(SettingsCompagny, SettingsApplication) + last_reference = settings.value(SettingsLastReference, '') + + last_rows_content = last_reference.split(sep=',') + args_rows_content = args[2].split(sep=',') + + d.tableReferences.setRowCount(len(args_rows_content)) + i = 0 + for row in args_rows_content: + j = 0 + for val in row.split('/'): + d.tableReferences.setItem(i, j, QTableWidgetItem(val)) + j += 1 + j = 0 + if i < len(last_rows_content): + last_row = last_rows_content[i] + for val in last_row.split('/'): + if d.tableReferences.item(i, j) is None: + d.tableReferences.setItem(i, j, QTableWidgetItem(val)) + j += 1 + i += 1 + + d.tableReferences.setFocus() + dres = d.exec() + + if dres == QDialog.Rejected: + success = False + + #build the answer: + row_items=[] + for i in range(d.tableReferences.rowCount()): + col_items=[] + for j in range(d.tableReferences.columnCount()): + try: + col_items.append(d.tableReferences.item(i,j).text()) + except: + col_items.append('') + + row_items.append('/'.join(col_items)) + + result=','.join(row_items) + + if conn: + settings.setValue(SettingsLastReference, result) + conn.send([result, success]) + conn.close() + else: + print(result, end='') + + if hasattr(sys, "frozen"): + #all standard streams are replaced by dummy one to avoid cx_freeze flushing bug. + class dummyStream: + ''' dummyStream behaves like a stream but does nothing. ''' + def __init__(self): pass + def write(self,data): pass + def read(self,data): pass + def flush(self): pass + def close(self): pass + + # and now redirect all default streams to this dummyStream: + sys.stdout = dummyStream() + sys.stderr = dummyStream() + sys.stdin = dummyStream() + sys.__stdout__ = dummyStream() + sys.__stderr__ = dummyStream() + sys.__stdin__ = dummyStream() + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/src/testium/interpreter/test_items/tested_references_files/tested_refs_win.py b/src/testium/interpreter/test_items/tested_references_files/tested_refs_win.py new file mode 100644 index 0000000..7e4206d --- /dev/null +++ b/src/testium/interpreter/test_items/tested_references_files/tested_refs_win.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'tested_refs_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QHeaderView, QLabel, QSizePolicy, QTableWidget, + QTableWidgetItem, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(481, 386) + Dialog.setModal(True) + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setGeometry(QRect(10, 350, 461, 32)) + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) + self.labelDialog = QLabel(Dialog) + self.labelDialog.setObjectName(u"labelDialog") + self.labelDialog.setGeometry(QRect(10, 10, 461, 111)) + font = QFont() + font.setPointSize(20) + self.labelDialog.setFont(font) + self.labelDialog.setAlignment(Qt.AlignCenter) + self.labelDialog.setWordWrap(True) + self.tableReferences = QTableWidget(Dialog) + if (self.tableReferences.columnCount() < 3): + self.tableReferences.setColumnCount(3) + font1 = QFont() + font1.setPointSize(10) + __qtablewidgetitem = QTableWidgetItem() + __qtablewidgetitem.setFont(font1); + self.tableReferences.setHorizontalHeaderItem(0, __qtablewidgetitem) + __qtablewidgetitem1 = QTableWidgetItem() + __qtablewidgetitem1.setFont(font1); + self.tableReferences.setHorizontalHeaderItem(1, __qtablewidgetitem1) + __qtablewidgetitem2 = QTableWidgetItem() + __qtablewidgetitem2.setFont(font1); + self.tableReferences.setHorizontalHeaderItem(2, __qtablewidgetitem2) + self.tableReferences.setObjectName(u"tableReferences") + self.tableReferences.setGeometry(QRect(10, 130, 461, 211)) + self.tableReferences.setMinimumSize(QSize(461, 0)) + self.tableReferences.setFont(font1) + self.tableReferences.setAlternatingRowColors(True) + self.tableReferences.setRowCount(0) + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) + self.labelDialog.setText(QCoreApplication.translate("Dialog", u"TextLabel", None)) + ___qtablewidgetitem = self.tableReferences.horizontalHeaderItem(0) + ___qtablewidgetitem.setText(QCoreApplication.translate("Dialog", u"Reference", None)); + ___qtablewidgetitem1 = self.tableReferences.horizontalHeaderItem(1) + ___qtablewidgetitem1.setText(QCoreApplication.translate("Dialog", u"Revision", None)); + ___qtablewidgetitem2 = self.tableReferences.horizontalHeaderItem(2) + ___qtablewidgetitem2.setText(QCoreApplication.translate("Dialog", u"Serial number", None)); + # retranslateUi + diff --git a/src/testium/interpreter/test_items/tested_references_files/tested_refs_win.ui b/src/testium/interpreter/test_items/tested_references_files/tested_refs_win.ui new file mode 100644 index 0000000..db886b5 --- /dev/null +++ b/src/testium/interpreter/test_items/tested_references_files/tested_refs_win.ui @@ -0,0 +1,152 @@ + + + Dialog + + + + 0 + 0 + 481 + 386 + + + + Dialog + + + true + + + + + 10 + 350 + 461 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 461 + 111 + + + + + 20 + + + + TextLabel + + + Qt::AlignCenter + + + true + + + + + + 10 + 130 + 461 + 211 + + + + + 461 + 0 + + + + + 10 + + + + true + + + 0 + + + + Reference + + + + 10 + + + + + + Revision + + + + 10 + + + + + + Serial number + + + + 10 + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/testium/interpreter/test_report/__init__.py b/src/testium/interpreter/test_report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/interpreter/test_report/report_export.py b/src/testium/interpreter/test_report/report_export.py new file mode 100644 index 0000000..3b9d47e --- /dev/null +++ b/src/testium/interpreter/test_report/report_export.py @@ -0,0 +1,100 @@ +import os + +import interpreter.test_report.test_report as tr +from interpreter.utils.paths import prepare_file_to_save +import interpreter.utils.constants as cst +import libs.testium as tm + + +class ReportExport: + KEY_SUCCESS = 'success' + KEY_TITLE = 'title' + KEY_MESSAGE = 'message' + KEY_DURATION = 'duration' + KEY_LOG = 'log' + ROW_TEXTS = [ + ['Test title', KEY_TITLE], + ['Message', KEY_MESSAGE], + ['Duration (s)', KEY_DURATION], + ['Test Result', KEY_SUCCESS] + ] + HEADER_TEXTS = { + 'test_file': 'Test file name', + 'test_name': 'Test name', + 'testrun_date': 'Date of the test', + 'testrun_time': 'Time of the test', + 'test_revision': 'Git revision of the test', + 'report_version': 'Report tool version', + } + TEXT_INDEX = 0 + KEY_INDEX = 1 + + def __init__(self, name, report_db, report_file, pattern, key): + self.name = name + self.pattern = pattern + self._report_file = report_file + self.key = key + self._con = report_db + self.header = {} + for row in self._con.execute('SELECT * FROM header'): + self.header.update({row[0]: row[1]}) + + def process_tests(self): + req = 'SELECT * FROM tests ' + lp = len(self.pattern) + lk = len(self.key) + + # If key or patterns are defined + # the query is adapted + if (lp != 0) or (lk != 0): + + req = req + 'WHERE ' + + for i in range(lp): + pat = self.pattern[i] + req = req + cst.DB_TEST_NAME + ' LIKE ' + req = req + '"' + pat + '" ' + 'OR ' + + for i in range(lk): + k = self.key[i] + req = req + cst.DB_TEST_KEY + ' LIKE ' + req = req + '"' + k + '" ' + 'OR ' + + req = req[:-len('OR ')] + ' ' + + req = req + 'ORDER BY ' + cst.DB_TEST_TIMESTAMP_START + for row in self._con.execute(req): + self.testsIterate(row) + + def testsIterate(self, row): + pass + + def rowData(self, row, name): + return row[tr.TestReport.indexOf(name)] + + def prepareFile(self, file_ext=''): + self._file_name = prepare_file_to_save(self._report_file, file_ext) + + def extract_info(self, row): + ret = {} + ret[self.KEY_SUCCESS] = self.rowData(row, cst.DB_TEST_RESULT) + ret[self.KEY_MESSAGE] = self.rowData(row, cst.DB_TEST_MESSAGE) + ret[self.KEY_TITLE] = self.rowData(row, cst.DB_TEST_NAME) + ret[self.KEY_DURATION] = tm.timestamp_as_sec(self.rowData( + row, cst.DB_TEST_DURATION)) + log = self.rowData(row, cst.DB_TEST_LOG) + if (log is None) or (log == ''): + ret[self.KEY_LOG] = '' + else: + ret[self.KEY_LOG] = log + + return ret + + def extract_test(self, row): + ret = {} + for key in cst.DB_TEST_FIELDS: + r = self.rowData(row, key) + if isinstance(r, bytes): + r = r.decode() + ret[key] = r + return ret \ No newline at end of file diff --git a/src/testium/interpreter/test_report/report_export_html.py b/src/testium/interpreter/test_report/report_export_html.py new file mode 100644 index 0000000..93dd2cd --- /dev/null +++ b/src/testium/interpreter/test_report/report_export_html.py @@ -0,0 +1,72 @@ + +from lxml import (etree, html) +import interpreter.test_report.report_export as rpe +import interpreter.test_report.test_report as tr +import interpreter.utils.constants as cst + +class ReportExportHTML(rpe.ReportExport): + + def __init__(self, name, report_db, report_file, pattern, key, no_header=False): + super().__init__(name, report_db, report_file, pattern, key) + + self.prepareFile() + self.create_base() + self.process_tests() + with open(self._file_name, 'w') as f: + f.write(html.tostring(self.root, pretty_print=True).decode()) + + def testsIterate(self, row): + super().testsIterate(row) + rdata = self.extract_info(row) + trow = etree.SubElement(self.table, 'tr') + for r in self.ROW_TEXTS: + rh = etree.SubElement(trow, 'td') + if r[self.KEY_INDEX] == self.KEY_DURATION: + rh.text = '{:.4f}'.format(rdata[r[self.KEY_INDEX]]) + else: + rh.text = rdata[r[self.KEY_INDEX]] + + if rdata[self.KEY_LOG] != '': + h2 = etree.SubElement(self.logsection, 'h3') + h2.text = rdata[self.KEY_TITLE] + for l in rdata[self.KEY_LOG].splitlines(): + p = etree.SubElement(self.logsection, 'p') + p.text = l + + def create_base(self): + repname = self.header[cst.DB_TEST_SET_NAME] + if self.name != '': + repname = self.name + + self.root = etree.Element('html', lang='en') + head = etree.SubElement(self.root, 'head') + title = etree.SubElement(head, 'title') + title.text = repname + self.body = etree.SubElement(self.root, 'body') + h1 = etree.SubElement(self.body, 'h1') + h1.text = repname + + div = etree.SubElement(self.body, 'div') + h2 = etree.SubElement(div, 'h2') + h2.text = 'Test conditions' + + for k in self.HEADER_TEXTS.keys(): + if k in self.header.keys(): + h = etree.SubElement(div, 'h3') + h.text = self.HEADER_TEXTS[k] + p = etree.SubElement(div, 'p') + p.text = self.header[k] + + div = etree.SubElement(self.body, 'div') + h2 = etree.SubElement(div, 'h2') + h2.text = 'Test results' + + self.table = etree.SubElement(self.body, 'table') + row = etree.SubElement(self.table, 'tr') + for r in self.ROW_TEXTS: + rh = etree.SubElement(row, 'th') + rh.text = r[self.TEXT_INDEX] + + self.logsection = etree.SubElement(self.body, 'div') + h2 = etree.SubElement(self.logsection, 'h2') + h2.text = 'Logs' diff --git a/src/testium/interpreter/test_report/report_export_json.py b/src/testium/interpreter/test_report/report_export_json.py new file mode 100644 index 0000000..6a892bb --- /dev/null +++ b/src/testium/interpreter/test_report/report_export_json.py @@ -0,0 +1,32 @@ +import json +import interpreter.test_report.report_export as rpe +import interpreter.utils.constants as cst + + +class ReportExportJSON(rpe.ReportExport): + + def __init__(self, name, report_db, report_file, pattern, key, no_header=False): + super().__init__(name, report_db, report_file, pattern, key) + + self._no_header = no_header + self._tests = [] + self.prepareFile() + self.process_tests() + if no_header: + if self.name != "": + json_export = {self.name: self._tests} + else: + tests_name = "tests" + if self.name != "": + tests_name = self.name + json_export = {"header": self.header} + json_export.update({tests_name: self._tests}) + with open(self._file_name, "w", encoding="utf-8") as fd: + fd.write(json.dumps(json_export, indent=4)) + + def testsIterate(self, row): + super().testsIterate(row) + r = self.extract_test(row) + if r[cst.DB_TEST_DATA].strip().startswith("{"): + r[cst.DB_TEST_DATA] = json.loads(r[cst.DB_TEST_DATA]) + self._tests.append(r) diff --git a/src/testium/interpreter/test_report/report_export_junit.py b/src/testium/interpreter/test_report/report_export_junit.py new file mode 100644 index 0000000..eb52b0e --- /dev/null +++ b/src/testium/interpreter/test_report/report_export_junit.py @@ -0,0 +1,45 @@ +from junit_xml import (TestSuite, TestCase) +import libs.testium as tm +from interpreter.test_items.test_result import (TestValue) +import interpreter.test_report.report_export as rpe +import interpreter.test_report.test_report as tr +import interpreter.utils.constants as cst + + +class ReportExportJUnit(rpe.ReportExport): + + def __init__(self, name, report_db, report_file, pattern, key, no_header=False): + super().__init__(name, report_db, report_file, pattern, key) + + self.prepareFile() + self.test_cases = [] + repname = self.header[cst.DB_TEST_SET_NAME] + if self.name != '': + repname = self.name + self.process_tests() + + ts = TestSuite(repname, test_cases=self.test_cases, + hostname=tm.gd('host_ip')) + with open(self._file_name, 'w') as f: + TestSuite.to_file(f, [ts]) + + def testsIterate(self, row): + super().testsIterate(row) + rdata = self.extract_info(row) + log = rdata[self.KEY_LOG] + if log == '': + log = rdata[self.KEY_MESSAGE] + try: + tc = TestCase(rdata[self.KEY_TITLE], elapsed_sec=rdata[self.KEY_DURATION], + log=log, status=rdata[self.KEY_SUCCESS]) + # Workaround for old versions of os. + except TypeError: + tc = TestCase(rdata[self.KEY_TITLE], elapsed_sec=rdata[self.KEY_DURATION], stdout=log) + if rdata[self.KEY_SUCCESS] == str(TestValue.FAILURE): + m = rdata[self.KEY_MESSAGE] + if m == '': + m = 'test failure' + tc.add_failure_info(output=m) + elif rdata[self.KEY_SUCCESS] == str(TestValue.NORUN): + tc.add_skipped_info('test skipped') + self.test_cases.append(tc) diff --git a/src/testium/interpreter/test_report/report_export_txt.py b/src/testium/interpreter/test_report/report_export_txt.py new file mode 100644 index 0000000..d2858c5 --- /dev/null +++ b/src/testium/interpreter/test_report/report_export_txt.py @@ -0,0 +1,127 @@ + +from interpreter.test_items.test_result import (TestValue) +import interpreter.test_report.report_export as rpe +import interpreter.test_report.test_report as tr +from interpreter.test_report.report_interface import (adapt_json, convert_json) +from interpreter.utils.constants import TestItemType as cst_type +import interpreter.utils.constants as cst + +class ReportExportTxt(rpe.ReportExport): + no_value_types = [cst_type.TYPE_CONSOLE.item_name, cst_type.TYPE_SLEEP.item_name, + cst_type.TYPE_IMAGE_DLG.item_name, cst_type.TYPE_LET.item_name, cst_type.TYPE_CHECK, + cst_type.TYPE_CYCLE.item_name, cst_type.TYPE_GROUP.item_name, + cst_type.TYPE_UNITTEST_FILE.item_name, cst_type.TYPE_MESSAGE_DLG.item_name, + cst_type.TYPE_QUESTION_DLG.item_name] + + def __init__(self, name, report_db, report_file, pattern, key, no_header=False): + super().__init__(name, report_db, report_file, pattern, key) + + self.prepareFile() + self._file_descriptor = open(self._file_name, 'w', encoding="utf-8") + + if not no_header: + self.write_header() + self.process_tests() + self.write_footer() + + self._file_descriptor.close() + + def testsIterate(self, row): + super().testsIterate(row) + level = self.rowData(row, cst.DB_TEST_LEVEL) + if level > 0: + succ = self.rowData(row, cst.DB_TEST_RESULT) + msg = self.rowData(row, cst.DB_TEST_MESSAGE) + tiname = self.rowData(row, cst.DB_TEST_NAME) + j = self.rowData(row, cst.DB_TEST_DATA) + if succ == str(TestValue.SUCCESS): + msg = '' + if succ != str(TestValue.NORUN): + self.line_result(tiname, succ, msg, level) + + ty = self.rowData(row, cst.DB_TEST_TYPE) + if ty in self.no_value_types: + pass + else: + if isinstance(j, bytes): + j = convert_json(j) + if isinstance(j, dict): + for k, v in j.items(): + self.line_value(tiname, k, '=', v, level) + + def addtxt(self, str): + self._file_descriptor.write(str) + + def separator(self): + self.addtxt('=' * 60 + '\n') + + def banner(self, level): + if level <= 0: + b = '=' + elif level == 1: + b = '-' + else: + b = '- ' + + sstart = self.line_start(0) + line = sstart + b * int((60 - len(sstart))/len(b)) + self.addtxt(line + '\n') + + def write_header(self): + repname = self.header[cst.DB_TEST_SET_NAME] + if self.name != '': + repname = self.name + self.addtxt('Testium' + '\n') + self.addtxt('{:^96}'.format(repname)+'\n') + self.addtxt('{:^96}'.format( + self.header[cst.DB_TESTRUN_DATE] + ' ' + + self.header[cst.DB_TESTRUN_TIME]) + '\n\n\n') + + def write_footer(self): + + self.separator() + self.addtxt('\n') + succ = 'Not finished' + if cst.DB_TEST_SET_RESULT in self.header: + succ = self.header[cst.DB_TEST_SET_RESULT] + + self.addtxt('{:<40}'.format('Overall test status') + + '{:>55}'.format(succ) + '\n\n\n') + + self.addtxt('{:<40}'.format('Operator:') + + '{:<40}'.format('signature:') + '\n\n\n') + + def line_text(self, text, level): + self.addtxt('{:.<45}'.format(self.line_start(level)) + + ': ' + text + '\n') + + def line_begin(self, ti_name): + sstart = self.line_start(0) + ' ' + ti_name + self.addtxt('{:.<45}'.format(sstart) + ': test Begins' + '\n') + + def line_result(self, ti_name, tresult, tmessage, level): + sstart = '' + if len(self.pattern) == 0: + sstart = self.line_start(level) + ' ' + sstart = sstart + ti_name + + if tresult == str(TestValue.SUCCESS) or tresult == str(TestValue.FAILURE): + self.addtxt('{:.<45}'.format(sstart) + + ': {:<43}{:>5}'.format(tmessage, + tresult) + '\n') + + def line_value(self, title, key, sep, value, level): + sstart = '' + if len(self.pattern) == 0: + sstart = self.line_start(level) + ' ' + sstart = '{:.<45}'.format(sstart + ' ' + title) + self.addtxt('{:}: {:} {:} {:}'.format(sstart, + str(key), + str(sep), + str(value)) + '\n') + + def line_start(self, level): + sstart = '' + pat = ' |' + sstart = pat * (level-1) + return sstart diff --git a/src/testium/interpreter/test_report/report_interface.py b/src/testium/interpreter/test_report/report_interface.py new file mode 100644 index 0000000..461cf7c --- /dev/null +++ b/src/testium/interpreter/test_report/report_interface.py @@ -0,0 +1,7 @@ +import json + +def adapt_json(data): + return (json.dumps(data, sort_keys=True)).encode() + +def convert_json(blob): + return json.loads(blob.decode()) diff --git a/src/testium/interpreter/test_report/test_report.py b/src/testium/interpreter/test_report/test_report.py new file mode 100644 index 0000000..2d1415c --- /dev/null +++ b/src/testium/interpreter/test_report/test_report.py @@ -0,0 +1,344 @@ +import os +from functools import wraps +import sqlite3 +from time import (time, sleep) +import traceback +from interpreter.utils.tum_except import (ETUMRuntimeError, ETUMSyntaxError) +from interpreter.utils.stdout_redirect import stdio_redir +from interpreter.utils.params import (expanse) +from interpreter.utils.paths import prepare_file_to_save +import interpreter.utils.constants as cst +from interpreter.utils.constants import TestItemType as cst_type +from interpreter.test_report.report_interface import (adapt_json, convert_json) + +sqlite3.register_adapter(dict, adapt_json) +sqlite3.register_adapter(list, adapt_json) +sqlite3.register_adapter(tuple, adapt_json) +sqlite3.register_converter('JSON', convert_json) + +TEST_REPORT_FILE_REV = '0.1' + + +def tr_procedure(f): + @wraps(f) + def wrapper(self, *args, **kwds): + if not self._active: + return + return f(self, *args, **kwds) + return wrapper + + +class Export: + + def __init__(self, dict_export, con=None): + if (not isinstance(dict_export, dict)) or (len(dict_export) != 1): + raise ETUMSyntaxError( + 'Syntax error in the report export description') + + self.con = con + self.type = list(dict_export.keys())[0] + self.tum_pattern = dict_export[self.type].get('pattern', []) + self.tum_key = dict_export[self.type].get('key', []) + self.path = dict_export[self.type].get('path', '') + self.filename = dict_export[self.type].get('file_name', '') + + if len(self.tum_pattern) > 0: + if not isinstance(self.tum_pattern, (list, str)): + raise ETUMSyntaxError( + 'pattern must be a string or a list of string') + if isinstance(self.tum_pattern, (str)): + self.tum_pattern = [self.tum_pattern] + + if len(self.tum_key) > 0: + if not isinstance(self.tum_key, (list, str)): + raise ETUMSyntaxError( + 'pattern must be a string or a list of string') + if isinstance(self.tum_key, (str)): + self.tum_key = [self.tum_key] + + def exec(self, con=None, name : str ='', no_header: bool = False): + if con is None: + con = self.con + + if con is None: + return + + pats = [] + for p in self.tum_pattern: + pats.append(expanse(p)) + + keys = [] + for k in self.tum_key: + keys.append(expanse(k)) + + et = expanse(self.type) + path = expanse(self.path) + fname = expanse(self.filename) + if fname != '' and path == '': + path = fname + elif fname == '' and path != '': + pass + else: + path = os.path.join(path, fname) + + if et == cst.REP_TYPE_TEXT: + from interpreter.test_report.report_export_txt import ReportExportTxt + ReportExportTxt(name, con, path, pats, keys, no_header) + elif et == cst.REP_TYPE_JSON: + from interpreter.test_report.report_export_json import ReportExportJSON + ReportExportJSON(name, con, path, pats, keys, no_header) + elif et == cst.REP_TYPE_JUNIT: + try: + from interpreter.test_report.report_export_junit import ReportExportJUnit + ReportExportJUnit(name, con, path, pats, keys, no_header) + except ModuleNotFoundError: + raise ETUMRuntimeError('"junit_xml" module not available') + elif et == cst.REP_TYPE_HTML: + try: + from interpreter.test_report.report_export_html import ReportExportHTML + ReportExportHTML(name, con, path, pats, keys, no_header) + except ModuleNotFoundError: + raise ETUMRuntimeError('"lxml" module not available') + elif et == cst.REP_TYPE_SQLITE: + pass + else: + raise ETUMSyntaxError('Report export not recognized') + +class TestReport: + TEST_COLS = [[cst.DB_TEST_TIMESTAMP_START, 'INT'], + [cst.DB_TEST_ID, 'INT NOT NULL'], + [cst.DB_TEST_PARENT_ID, 'INT'], + [cst.DB_TEST_LEVEL, 'INT'], + [cst.DB_TEST_NAME, 'TEXT'], + [cst.DB_TEST_TYPE, 'TEXT'], + [cst.DB_TEST_KEY, 'TEXT'], + [cst.DB_TEST_RESULT, 'TEXT'], + [cst.DB_TEST_MESSAGE, 'TEXT'], + [cst.DB_TEST_DURATION, 'INT'], + [cst.DB_TEST_LOG, 'TEXT'], + [cst.DB_TEST_DATA, 'JSON'], + ] + + @classmethod + def indexOf(cls, name): + i = 0 + for l in cls.TEST_COLS: + if l[0] == name: + break + i = i + 1 + return i + + @classmethod + def export_to_dict(cls, etype, filename, path, pattern, key): + return {etype: {'file_name': filename, 'path': path, + 'pattern': pattern, 'key': key}} + + def __init__(self, dict_report): + self._path = "" + self.tum_path = '' + self.has_sqlite = False + self._active = True + self.export = [] + self.tum_export = [] + self._level = 0 + self._log_stored = False + self._con = None + + if dict_report is None: + self._active = False + return + + # Process parameters + a = expanse(dict_report.get('enabled', True)) + if isinstance(a, bool): + self._active = a + else: + if str(a).lower() == 'false': + self._active = False + + if self._active: + self.dict_report = dict_report + ls = expanse(dict_report.get('log_stored', False)) + if isinstance(ls, bool): + self._log_stored = ls + else: + if str(ls).lower() == 'true': + self._log_stored = True + + exports = self.dict_report.get('export', []) + if isinstance(exports, dict): + exports = [{k: v} for k, v in exports.items()] + for exp in exports: + self.add_export(self.tum_export, exp) + + if self._log_stored: + stdio_redir.intercept() + + # Path + @property + def path(self): + ret = self.tum_path + if self._path != '': + ret = self._path + return ret + + @path.setter + def path(self, value): + self._path = value + if (self._path != '') and (self._active == False): + self._log_stored = True + self._active = True + stdio_redir.intercept() + + for exp in self.exports: + exp.path = self.path + + # export + @property + def exports(self): + ret = self.tum_export + if len(self.export) > 0: + ret = self.export + return ret + + @exports.setter + def exports(self, exp): + self.add_export(self.export, exp) + if (len(self.export) > 0): + self._active = True + + def add_export(self, elist, exp): + e = Export(exp) + elist.append(e) + if e.type == cst.REP_TYPE_SQLITE: + self.has_sqlite = True + self.tum_path = e.path + if e.filename != '': + self.tum_path = os.path.join(self.tum_path, e.filename) + + @property + def db_connection(self): + return self._con + + @tr_procedure + def open(self, header): + + rep_path = self.path + if not self.has_sqlite: + rep_path = ':memory:' + else: + rep_path = expanse(rep_path) + prepare_file_to_save(rep_path) + if not os.path.exists(os.path.dirname(rep_path)): + raise ETUMRuntimeError("Report path does not exist: " + rep_path) + self._con = sqlite3.connect(rep_path) + self.createHeader(header) + self.createTestTable() + self._con.commit() + + @tr_procedure + def close(self, header): + try: + try: + for k, v in header.items(): + self._con.execute( + "INSERT INTO header VALUES('{}', '{}')".format(k, v)) + self._con.commit() + + # stop stdout interception thread + stdio_redir.stop() + + for export in self.exports: + export.exec(self._con) + + except: + print(traceback.format_exc()) + finally: + self._con.close() + + @tr_procedure + def createHeader(self, header): + self._con.execute("CREATE TABLE header(key TEXT, value TEXT)") + self._con.execute("INSERT INTO header VALUES(?, ?)", (cst.DB_REPORT_VERSION, + TEST_REPORT_FILE_REV)) + for k, v in header.items(): + self._con.execute( + "INSERT INTO header VALUES('{}', '{}')".format(k, v)) + + @tr_procedure + def createTestTable(self): + req = '' + for l in self.TEST_COLS: + req = req + l[0] + ' ' + l[1] + ',' + req = req[:-1] + self._con.execute('CREATE TABLE tests(' + req + ')') + + @tr_procedure + def addTest(self, test_item, result, key=None): + p = test_item.parent() + pid = None + if p is not None: + pid = p.id() + param = () + for l in self.TEST_COLS: + if l[0] == cst.DB_TEST_TIMESTAMP_START: + param = param + (test_item.t0,) + elif l[0] == cst.DB_TEST_ID: + param = param + (test_item.id(),) + elif l[0] == cst.DB_TEST_PARENT_ID: + param = param + (pid,) + elif l[0] == cst.DB_TEST_NAME: + param = param + (test_item.name(),) + elif l[0] == cst.DB_TEST_TYPE: + param = param + (test_item.type(),) + elif l[0] == cst.DB_TEST_KEY: + skey = key + if isinstance(key, list): + skey = "" + for k in key: + skey += f"{k}, " + skey = skey if len(key) == 0 else skey[:-len(", ")] + param = param + (skey,) + elif l[0] == cst.DB_TEST_RESULT: + param = param + (str(result.test_result),) + elif l[0] == cst.DB_TEST_MESSAGE: + param = param + (str(result.message),) + elif l[0] == cst.DB_TEST_DURATION: + param = param + (test_item.duration,) + elif l[0] == cst.DB_TEST_DATA: + param = param + (result.reported,) + elif l[0] == cst.DB_TEST_LEVEL: + param = param + (self._level,) + elif l[0] == cst.DB_TEST_LOG: + if self._log_stored and (test_item.type() != cst_type.TYPE_ROOT.item_name): + lo = '' + pat = test_item.footer + t0 = time() + while pat != "": + lo = lo + stdio_redir.read() + if (pat in lo): + break + if (time() - t0) < 10.0: + sleep(0.1) + else: + break + + param = param + (lo,) + else: + param = param + ('',) + else: + raise ETUMRuntimeError('unknow database key') + + req = 'INSERT INTO tests VALUES(' + for l in self.TEST_COLS: + req = req + '?,' + req = req[:-1] + ')' + + self._con.execute(req, param) + + def incLevel(self): + self._level = self._level + 1 + + def decLevel(self): + if self._level > 0: + self._level = self._level - 1 diff --git a/src/testium/interpreter/test_set.py b/src/testium/interpreter/test_set.py new file mode 100644 index 0000000..f507f19 --- /dev/null +++ b/src/testium/interpreter/test_set.py @@ -0,0 +1,491 @@ +import os +import datetime +from queue import Queue +from interpreter.utils.params import expanse +import libs.testium as tm +from interpreter.utils.tum_except import ( + ETUMSyntaxError, +) +import interpreter.utils.settings as prefs +from interpreter.test_report.test_report import TestReport +from interpreter.utils.func_exec import func_exec +from interpreter.utils.constants import TestItemType as cst_type +import interpreter.utils.constants as cst +from interpreter.utils.constants import TEST_TYPE_LIST +from interpreter.test_items.test_item import test_data +from interpreter.test_items.item_actions import TestItemActions +from interpreter.test_items.test_result import TestValue + + +class TestSet: + def __init__( + self, + tum_fime: str, + test_dict: dict, + status_queue: Queue, + ): + self._test_file = tum_fime + self.post_exec_file = None + + self._report = None + self._success = False + self.status_queue = status_queue + self.report_path = "" + self.report_type = "" + self.report_pattern = [] + self._testdict = test_dict + + self._tree = self.__loadTestTree(tum_fime) + self.dict_report = self._testdict.get("report", None) + self.set_post_exec() + + def execute(self): + self._report = TestReport(self.dict_report) + report_header = { + cst.DB_TEST_FILE: os.path.abspath(self._test_file), + cst.DB_TEST_SET_NAME: os.path.splitext(os.path.split(self._test_file)[1])[ + 0 + ], + cst.DB_TEST_REVISION: tm.gd("test_version"), + cst.DB_SEQUENCER_VERSION: tm.gd("testium_version"), + cst.DB_TESTRUN_DATE: tm.gd("testrun_date"), + cst.DB_TESTRUN_TIME: tm.gd("testrun_time"), + } + if self.report_type != "": + rep = TestReport.export_to_dict( + self.report_type, "", self.report_path, self.report_pattern, [] + ) + self._report.exports = rep + self._report.open(report_header) + self.setReport() + + res = None + try: + a_test_is_skipped = self.__aTestIsSkipped(self._rootItem) + a_test_is_disabled = self.__aTestIsDisabled(self._rootItem) + res = self._rootItem.execute() + finally: + self._end_test_date = datetime.datetime.now() + self._test_duration = self._end_test_date - tm.gd("start_test_date") + + # report ending + d = {} + if res is not None: + self._success = res.test_result == TestValue.SUCCESS + d.update({cst.DB_TEST_SET_RESULT: str(res.test_result)}) + d.update({cst.DB_TEST_SET_DURATION: self._test_duration}) + self._report.close(d) + + # updating global dict with report output + outs = tm.gd("test_outputs", None) + if outs is not None: + outs.append(self._report.path) + else: + outs = [self._report.path] + + # test cleanup + del self._report + + # updating global dict with outputs + tm.setgd("test_outputs", outs) + + tm.cleanup_instances("console") + tm.cleanup_instances("plot") + + if a_test_is_skipped or a_test_is_disabled: + tm.print_warn("A test has been skipped or disabled in this test run.") + + def set_report(self, rep_path: str, rep_type: str, pattern: list): + if rep_path != "": + self.report_path = rep_path + self.report_type = rep_type + self.report_pattern = pattern + + def success(self) -> bool: + "Returns if the test has been a success" + return self._success + + def extractReportPath(self): + r = "" + if self.dict_report is None: + return r + + n = self.dict_report.get("file_name", "") + if n == "": + return r + + n = expanse(n) + + f = expanse(self.dict_report.get("path", "")) + if f == "": + f = expanse(prefs.settings.report_path) + + if not os.path.isabs(f): + f = os.path.abspath(f) + if not os.path.exists(f): + os.makedirs(f) + + f = os.path.join(f, n) + return f + + def __stopRunningTestsRecursively(self, parent): + for i in range(parent.childCount()): + if parent.child(i).isRunning(): + parent.child(i).stop() + self.__stopRunningTestsRecursively(parent.child(i)) + + def stop(self): + self._rootItem.stop() + self.__stopRunningTestsRecursively(self._rootItem) + + def __pauseTestsRecursively(self, parent): + for i in range(parent.childCount()): + if parent.child(i).isRunning(): + parent.child(i).pause() + self.__pauseTestsRecursively(parent.child(i)) + + def pause(self): + self._rootItem.pause() + self.__pauseTestsRecursively(self._rootItem) + + def __setReportRecursively(self, parent): + for i in range(parent.childCount()): + parent.child(i).report = self._report + self.__setReportRecursively(parent.child(i)) + + def setReport(self): + self._rootItem.report = self._report + self.__setReportRecursively(self._rootItem) + + def addBreakpoint(self, item_id): + item = self.__findItemById(item_id) + item.addBreakpoint() + + def delBreakpoint(self, item_id): + item = self.__findItemById(item_id) + item.delBreakpoint() + + def __continueTestsRecursively(self, parent): + for i in range(parent.childCount()): + if parent.child(i).isRunning(): + parent.child(i).cont() + self.__continueTestsRecursively(parent.child(i)) + + def cont(self): + self._rootItem.cont() + self.__continueTestsRecursively(self._rootItem) + + def updateParentsState(self, child): + parent = child.parent() + if parent is not None: + n = parent.childCount() + all_unchecked = True + one_checked = False + for i in range(n): + if parent.child(i).enabled: + all_unchecked = False + else: + one_checked = True + if (n > 0) and all_unchecked: + parent.enabled = False + self.updateParentsState(parent) + + elif n > 0: + parent.enabled = True + self.updateParentsState(parent) + + def __aTestIsSkipped(self, parent): + res = False + i = 0 + while (res is False) and (i < parent.childCount()): + if parent.child(i).skipped: + res = True + i = i + 1 + + i = 0 + while (res is False) and (i < parent.childCount()): + res = self.__aTestIsSkipped(parent.child(i)) + i = i + 1 + + return res + + def __aTestIsDisabled(self, parent): + res = False + i = 0 + while (res is False) and (i < parent.childCount()): + if not parent.child(i).enabled: + res = True + i = i + 1 + + i = 0 + while (res is False) and (i < parent.childCount()): + res = self.__aTestIsDisabled(parent.child(i)) + i = i + 1 + + return res + + def __findItemByIdRecursively(self, item_id, parent): + res = None + i = 0 + while (res is None) and (i < parent.childCount()): + if parent.child(i).id() == item_id: + res = parent.child(i) + i = i + 1 + + i = 0 + while (res is None) and (i < parent.childCount()): + res = self.__findItemByIdRecursively(item_id, parent.child(i)) + i = i + 1 + + return res + + def __findItemById(self, item_id): + item = self.__findItemByIdRecursively(item_id, self._rootItem) + return item + + def getEnabledState(self, item_id): + """Return True if the item is enabled, False otherwise.""" + item = self.__findItemById(item_id) + return item.enabled + + def getSkippedState(self, item_id): + """Return True if the item is skipped, False otherwise.""" + item = self.__findItemById(item_id) + return item.skipped + + def getItemDoc(self, item_id): + item = self.__findItemById(item_id) + return item.doc() + + def getFolded(self, item_id): + item = self.__findItemById(item_id) + return item.is_folded + + def setEnabledState(self, item_id, enabled_state, unitary=False): + """Set the item_id item enabled attributes to enabled_state.""" + parent = self.__findItemById(item_id) + parent.enabled = enabled_state + if not unitary: + for i in range(parent.childCount()): + parent.child(i).enabled = enabled_state + self.enableDisableAll(parent.child(i), enabled_state) + self.updateParentsState(parent) + + def checkUncheckAll(self, checked: bool): + self.enableDisableAll(self._rootItem, checked) + + def enableDisableAll(self, parent, enabled_state): + """If enabled_state, enable all the child of parent item, else disable them.""" + if enabled_state: + for i in range(parent.childCount()): + parent.child(i).enabled = True + self.enableDisableAll(parent.child(i), enabled_state) + else: + for i in range(parent.childCount()): + parent.child(i).enabled = False + self.enableDisableAll(parent.child(i), enabled_state) + + def __loadTestTree(self, filename): + try: + dict_main = self._testdict["main"] + except: + raise ETUMSyntaxError( + f"the 'main' root item of the principal 'tum' file could not be found.", + filename + ) + + self._rootItem = (cst_type.TYPE_ROOT.item_class)( + dict_item=dict_main, status_queue=self.status_queue + ) + ret = self.load_test_recursively(self._rootItem, dict_main, filename) + self.set_post_exec() + return ret + + def set_post_exec(self): + post_exec = self._testdict.get("post_execution", None) + if post_exec is None: + if self.post_exec_file is not None: + self.post_exec_file = None + return + + postexec_file = post_exec["file_name"] + + if not os.path.isfile(os.path.join(self._testDir, postexec_file)): + raise ETUMSyntaxError(f"Post execution file '{postexec_file}' not found") + + self.post_exec_file = postexec_file + + def run_post_exec(self): + + post_exec_file = self.post_exec_file + test_dir = tm.gd("test_directory") + + if post_exec_file is None: + post_exec_file = os.path.join(test_dir, "post_execution.py") + + if not os.path.isfile(post_exec_file): + tm.print_info(f"No post exec in this test.") + tm.print_debug(f' No file: "{post_exec_file}".') + return + + tm.print_debug(f'Post-execution from: "{post_exec_file}"') + if self.rootItem().result.success: + # tests backup is done here + succ, res = func_exec(post_exec_file, "post_exec", []) + if not succ == TestValue.SUCCESS: + tm.print_debug( + f"Test success but the \"post_exec\" function failed: {res}" + ) + else: + succ, res = func_exec(post_exec_file, "post_exec_fail", []) + if not succ == TestValue.SUCCESS: + tm.print_debug( + f"Test failed but the \"post_exec_fail\" function failed: {res}" + ) + + + def rootItem(self): + return self._rootItem + + def load_test_recursively(self, tree_parent, parent_seq, file_name): + ret = {} + try: + parent_seq_name = parent_seq["name"] + except KeyError: + parent_seq["name"] = "sequence" + except TypeError: + raise ETUMSyntaxError( + f"No 'name' attribute in '{tree_parent.type()}' (a child of '{tree_parent.parent().name()}')", + file_name + ) + try: + parent_seq_actions = parent_seq["steps"] + except KeyError: + raise ETUMSyntaxError( + f"No step list found for '{parent_seq_name}' sequence. \n" + + f"Check the syntax of the 'steps' parameter of the '{tree_parent.cmd()}' test item definition.", + file_name + ) + # if action is a dictionary , we assume it is a single action + # that has not been nested in a list, so do it + if isinstance(parent_seq_actions, (dict)): + parent_seq_actions = [parent_seq_actions] + if not isinstance(parent_seq_actions, (list, tuple)): + raise ETUMSyntaxError( + f"No valid list of actions in sequence {parent_seq_name}", + file_name + ) + # first we merged to the same level 'sequence dict entries and list within the list + counter = 0 + test_dir = tm.gd("test_directory") + la = len(parent_seq_actions) + while counter < la: + action = parent_seq_actions[counter] + # if action is a list raise up to the the same level, + # ie insert action element into the parent_seq_actions + if isinstance(action, (list, tuple)): + parent_seq_actions[counter : counter + 1] = action + parent_seq_actions = ( + parent_seq_actions[:counter] + + action + + parent_seq_actions[counter + 1 :] + ) + la = len(parent_seq_actions) + continue + # if action is a NoneType skip and continue + # (when pointing to an unused alias for instance) + if action is None: + counter += 1 + continue + # if action is a sequence we insert its entry into the action list + if "sequence" in action: + sequence = action["sequence"]["data"] + f = action["sequence"]["filename"] + if isinstance(sequence, dict): + sequence = [{k: v} for k, v in sequence.items()] + # Case of an empty sequence + elif sequence is None: + tm.print_info( + f"An empty sequence is loaded in '{parent_seq_name}'." + ) + sequence = [] + elif not isinstance(sequence, list): + raise ETUMSyntaxError( + f"Syntax error in '{parent_seq_name}' step number {counter+1}. Sequence definition: '{str(action)}'", + f + ) + for s in sequence: + s[list(s.keys())[0]]["seq_filename"] = f + parent_seq_actions = ( + parent_seq_actions[:counter] + + sequence + + parent_seq_actions[counter + 1 :] + ) + la = len(parent_seq_actions) + continue + + # Action is now for sure a list of dict of length 1 + k = list(action.keys())[0] + if action[k].get("seq_filename", None) is None: + action[k]["seq_filename"] = file_name + + executed = False + for it in TEST_TYPE_LIST: + # Test items not executable + if ( + (it == cst_type.TYPE_ROOT) + or + # Items which don't have to be loaded by test_set module + (it.item_class is None) + ): + continue + if (it.item_cmd in action) or ( + (cst.FOLDED_CHAR + it.item_cmd) in action + ): + executed = True + is_folded = False + action_name = it.item_cmd + + # Check if a "." is before the cmd_name (meaning folded) + if (cst.FOLDED_CHAR + it.item_cmd) in action: + is_folded = True + action_name = cst.FOLDED_CHAR + it.item_cmd + + seq_filename = action[action_name]["seq_filename"] + item = (it.item_class)( + action[action_name], + tree_parent, + self.status_queue, + filename=seq_filename + ) + item.is_folded = is_folded + child = {} + # case where the test item loads itself its descendants + if it == cst_type.TYPE_UNITTEST_FILE: + item.setTestDir(test_dir) + child = item.load() + elif issubclass(it.item_class, TestItemActions): + child = item.load() + # case where the test item is an items container + elif item.is_container: + child = self.load_test_recursively( + item, action[action_name], seq_filename + ) + + ret.update(test_data(item, child)) + + if not executed: + raise ETUMSyntaxError( + f"test item '{k}' is not known.", + action[k]["seq_filename"] + ) + + counter += 1 + + return ret + + def tree(self): + return self._tree + + def skipped_state(self): + ret = {} diff --git a/src/testium/interpreter/utils/__init__.py b/src/testium/interpreter/utils/__init__.py new file mode 100644 index 0000000..01ac4f5 --- /dev/null +++ b/src/testium/interpreter/utils/__init__.py @@ -0,0 +1,13 @@ + + +def clear_recursively(obj): + if not isinstance(obj, (dict, list)): + del obj + return + if isinstance(obj, list): + for o in obj: + clear_recursively(o) + else: + for key in list(obj.keys()): + clear_recursively(obj[key]) + o = obj.pop(key, None) diff --git a/src/testium/interpreter/utils/api.py b/src/testium/interpreter/utils/api.py new file mode 100644 index 0000000..508b9ca --- /dev/null +++ b/src/testium/interpreter/utils/api.py @@ -0,0 +1,9 @@ + +SUPPORTED_API = [ + "gd", + "setgd", + "delgd", + "add_plot_values", + "last_plot_value" +] + diff --git a/src/testium/interpreter/utils/api_srv.py b/src/testium/interpreter/utils/api_srv.py new file mode 100644 index 0000000..198ce71 --- /dev/null +++ b/src/testium/interpreter/utils/api_srv.py @@ -0,0 +1,23 @@ +from interpreter.utils.api import SUPPORTED_API + +import libs.testium as tm + +# Fill the api_dict with the function of tm +api_dict = {k: getattr(tm, k) for k in SUPPORTED_API if hasattr(tm, k)} + + +def api_request(method, params): + if method in api_dict.keys(): + if params is None: + params = [] + if not isinstance(params, list): + params = [params] + try: + return {"result": api_dict[method](*params)} + except Exception as e: + return {"error": str(e)} + elif method == "print": + print(*params, end="") + return {"result": 0} + else: + return {"error": "unsupported function"} diff --git a/src/testium/interpreter/utils/constants.py b/src/testium/interpreter/utils/constants.py new file mode 100644 index 0000000..4faecbc --- /dev/null +++ b/src/testium/interpreter/utils/constants.py @@ -0,0 +1,133 @@ + +from enum import Enum + +class TestItemEnum(): + def __init__(self, cmd, name, item_class=None) -> None: + self.name = name + self.cmd = cmd + self.item_class = item_class + +class TestItemType(Enum): + TYPE_UNITTEST_FILE = TestItemEnum("unittest_file", "unittest file") + TYPE_UNITTEST_STEP = TestItemEnum("unittest_step", "unittest step") + TYPE_CONSOLE = TestItemEnum("console", "Console") + TYPE_CONSOLE_ACTION = TestItemEnum("console_action", "Console action") + TYPE_CYCLE = TestItemEnum("loop", "Cycle") + TYPE_FUNCTION = TestItemEnum("py_func", "python Function") + TYPE_REPORT = TestItemEnum("report", "Report") + TYPE_GIT = TestItemEnum("git", "git repository") + TYPE_GRAPH = TestItemEnum("plot", "Runtime plot") + TYPE_GRAPH_ACTION = TestItemEnum("plot_action", "Runtime plot action") + TYPE_GROUP = TestItemEnum("group", "Group") + TYPE_IMAGE_DLG = TestItemEnum("dialog_image", "Image Dialog") + TYPE_MESSAGE_DLG = TestItemEnum("dialog_message", "Message Dialog") + TYPE_LET = TestItemEnum("let", "Let") + TYPE_CHECK = TestItemEnum("check", "Check value") + TYPE_NOTE_DLG = TestItemEnum("dialog_note", "Note Dialog") + TYPE_QUESTION_DLG = TestItemEnum("dialog_question", "Question Dialog") + TYPE_SLEEP = TestItemEnum("sleep", "Sleep") + TYPE_REFERENCE_DLG = TestItemEnum("dialog_references", "References Dialog") + TYPE_VALUE_DLG = TestItemEnum("dialog_value", "Value Dialog") + TYPE_CHOICES_DLG = TestItemEnum("dialog_choices", "Choices Dialog") + TYPE_RUN = TestItemEnum("run", "Run tum") + TYPE_JSON_RPC = TestItemEnum("json_rpc", "JSON-RPC") + TYPE_JSON_RPC_ACTION = TestItemEnum("json_rpc_action", "JSON-RPC action") + TYPE_ROOT = TestItemEnum("default", "default") + + @staticmethod + def list(): + return list(map(lambda c: c.value, TestItemType)) + + @property + def item_name(self): + return self.value.name + + @property + def item_cmd(self): + return self.value.cmd + + @property + def item_class(self): + return self.value.item_class + + @item_class.setter + def item_class(self, c): + self.value.item_class = c + + def __str__(self): + return self.value.name + +TEST_TYPE_LIST = [e for e in TestItemType] + +REP_TYPE_SQLITE = "sqlite" +REP_TYPE_JUNIT = "junit" +REP_TYPE_JSON = "json" +REP_TYPE_HTML = "html" +REP_TYPE_TEXT = "text" + +REP_TYPES = [ + REP_TYPE_SQLITE, + REP_TYPE_JUNIT, + REP_TYPE_JSON, + REP_TYPE_HTML, + REP_TYPE_TEXT, + ] + +# Report related constants + +DB_REPORT_VERSION = "report_version" +DB_TEST_FILE = "test_file" +DB_TEST_SET_NAME = "test_name" +DB_TEST_SET_RESULT = "test_result" +DB_TEST_REVISION = "test_revision" +DB_SEQUENCER_VERSION = "testium_version" +DB_TESTRUN_DATE = "testrun_date" +DB_TESTRUN_TIME = "testrun_time" +DB_TEST_SET_DURATION = "test_duration" + +DB_HEADER_FIELDS = [ + DB_REPORT_VERSION, + DB_TEST_FILE, + DB_TEST_SET_NAME, + DB_TEST_SET_RESULT, + DB_TEST_REVISION, + DB_SEQUENCER_VERSION, + DB_TESTRUN_DATE, + DB_TESTRUN_TIME, + DB_TEST_SET_DURATION, +] + +DB_TEST_TIMESTAMP_START = "timestamp_start" +DB_TEST_ID = "test_id" +DB_TEST_PARENT_ID = "parent_id" +DB_TEST_NAME = "test_name" +DB_TEST_TYPE = "test_type" +DB_TEST_KEY = "report_key" +DB_TEST_RESULT = "result" +DB_TEST_MESSAGE = "message" +DB_TEST_DURATION = "duration" +DB_TEST_DATA = "data" +DB_TEST_LEVEL = "level" +DB_TEST_LOG = "log" + +DB_TEST_FIELDS = [ + DB_TEST_TIMESTAMP_START, + DB_TEST_ID, + DB_TEST_PARENT_ID, + DB_TEST_NAME, + DB_TEST_TYPE, + DB_TEST_KEY, + DB_TEST_RESULT, + DB_TEST_MESSAGE, + DB_TEST_DURATION, + DB_TEST_DATA, + DB_TEST_LEVEL, + DB_TEST_LOG, +] + +ICON_THEMES_PREFIX = [ + ":/color", + ":/black" +] + +FOLDED_CHAR = "." \ No newline at end of file diff --git a/src/testium/interpreter/utils/eval.py b/src/testium/interpreter/utils/eval.py new file mode 100644 index 0000000..efa7aff --- /dev/null +++ b/src/testium/interpreter/utils/eval.py @@ -0,0 +1,65 @@ +import random +import os +import sys +import time +import platform +import math +import json +import libs.testium as tm +from interpreter.utils.tum_except import (ETUMSyntaxError, ETUMRuntimeError) + +def evaluate(val, **replacement_dict): + v2 = val + evaluated = False + if isinstance(val, str): + + for key, replacement in replacement_dict.items(): + val = val.replace(f"$({key})", str(replacement)) + try: + v2 = eval(val) + except Exception as e: + # eval can crash + if tm.debug_enabled(): + s=f"Evaluation of '{val}' failed with message:\n "+str(e) + tm.print_debug(s) + v2 = val + evaluated = (val != v2) + return evaluated, v2 + +def eval_to_boolean(c): + if isinstance(c, bool): + condition = c + elif isinstance(c, (str, bytes)): + if c.lower() in ['true', 't', 'y', 'yes', 'ok', ]: + condition = True + elif c.lower() in ['f', 'n', 'nok', 'ko', 'false', 'no',]: + condition = False + else: + try: + cond = eval(c) + condition = eval_to_boolean(cond) + except Exception as e: + print("eval with c: {}".format(c)) + raise e + elif type(c) is int: + condition = (c > 0) + else: + raise ETUMSyntaxError('c : {} not string, int or bool'.format(c)) + return condition + +def post_evaluate(post_eval, res): + """This function is evaluating the result of a test, + therefore it may include a $(result) parameter. + """ + if (not post_eval is None) and (post_eval != ""): + if (not isinstance(post_eval, str)) or (not ("$(result)" in post_eval)): + raise ETUMRuntimeError( + f"'eval' ({post_eval}) must be a string and have the '$(result)' substitution keyword." + ) + + is_evaluated, res = evaluate(post_eval, result=res) + if not is_evaluated: + raise ETUMRuntimeError( + f"Function result evaluation fails: '{post_eval}' syntax error." + ) + return res diff --git a/src/testium/interpreter/utils/func_exec.py b/src/testium/interpreter/utils/func_exec.py new file mode 100644 index 0000000..c98246c --- /dev/null +++ b/src/testium/interpreter/utils/func_exec.py @@ -0,0 +1,156 @@ +import sys +import shutil +import subprocess +import socket +import libs.testium as tm +from interpreter.utils.tum_except import ETUMRuntimeError +from interpreter.utils.jrpc import JsonRpcClient +from interpreter.test_items.test_result import TestValue + +function_call_process = None + + +def func_call_init(python_path, request_handler): + global function_call_process + function_call_process = FuncExecEngine(python_path, request_handler) + return function_call_process + + +def python_version(path: str): + result = subprocess.run( + [path, "-c", "import sys; print(sys.version_info[:3])"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + return eval(result.stdout.strip()) + + +def is_python_interpreter(path: str, timeout=2) -> bool: + try: + result = subprocess.run( + [path, "-c", "import sys; print(sys.executable)"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + timeout=timeout, + ) + return result.returncode == 0 + except (FileNotFoundError, PermissionError, subprocess.TimeoutExpired): + return False + + +class FuncExecEngine: + + def __init__(self, python_path="", request_handler=None): + if python_path != "": + + if shutil.which(python_path) is None: + raise ETUMRuntimeError( + f"The passed python path is not pointing to an executable: '{python_path}'" + ) + + if not is_python_interpreter(python_path): + raise ETUMRuntimeError( + f"The passed executable is not a python interpreter: '{python_path}'" + ) + + else: + python_path = sys.executable + + self._ppath = python_path + self._req_handler = request_handler + self._process = None + self._port = 0 + self._rpc = None + + def start(self): + """ + run the subprocess to execute the python functions of the test. + """ + # This thread is not closed until new test is loaded + if self._process is not None: + raise ETUMRuntimeError("The function subprocess has already been started.") + + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.bind(("localhost", 0)) + self._port = sock.getsockname()[1] + + func_proc_path = tm.gd("testium_path") + + self._process = subprocess.Popen( + [self._ppath, "-m", "py_func", "-p", f"{self._port}"], cwd=func_proc_path + ) + + # Port was reserved until the sub-process is started. Now released. + if sock is not None: + sock.close() + + self._rpc = JsonRpcClient(self._port, req_handler=self._req_handler) + self._rpc.start() + + def join(self): + if self._rpc is not None: + self._rpc.join() + self._rpc = None + self._process = None + + def wait_ready(self, timeout=None): + if self._rpc is not None and self._rpc.is_alive(): + return self._rpc.wait_ready(timeout) + return False + + def stop(self): + if self._rpc is not None: + self._rpc.stop() + + def func_call(self, file: str, func_name: str, params: list, verbose: bool = True): + if (self._rpc is not None) and self._rpc.is_alive(): + answer = self._rpc.call( + "func_call", + { + "file": file, + "fname": func_name, + "params": params, + "verbose": verbose, + }, + ) + if "result" in answer: + reported_values = answer["result"].get("reported_values", {}) + if "returned_value" in answer["result"]: + res = answer["result"]["returned_value"] + return TestValue.SUCCESS, (res, reported_values) + else: + raise ETUMRuntimeError( + "Unexepected py_func jrpc result. To be reported to testium support team." + ) + + # In case an error was encountered in the called function + elif "error" in answer: + msg = f"{answer["error"]}" + return TestValue.FAILURE, msg + + else: + raise ETUMRuntimeError( + "Unexepected py_func call failure to be reported to testium support team." + ) + else: + raise ETUMRuntimeError( + "No function execution process active. To be reported to testium support team." + ) + + +def func_exec(file: str, func_name: str, params: list, verbose: bool = True): + """Executes a python function and returns its result and reported values""" + global function_call_process + + if function_call_process is not None: + success, result = function_call_process.func_call( + file, func_name, params, verbose + ) + else: + raise ETUMRuntimeError( + "No function execution process active. To be reported to testium support team." + ) + + return success, result diff --git a/src/testium/interpreter/utils/globdict.py b/src/testium/interpreter/utils/globdict.py new file mode 100644 index 0000000..6f5ab15 --- /dev/null +++ b/src/testium/interpreter/utils/globdict.py @@ -0,0 +1,52 @@ +from threading import Lock + + +global_dict = {} + +global_dict_lock = Lock() + +# Global dictionnary helper functions +def gd(name, default=None): + ''' Function which returns a variable from the global dictionary of testium + + :param name: The name of the element to return. + :type name: str + :param default: The default value returned by the function if the item + has not been found in the global dictionary (``None`` by default). + :type default: object + :return: The value of the item of the global dictionary or the default value. + :rtype: object + ''' + with global_dict_lock: + return global_dict.get(name, default) + +def setgd(name, value): + ''' Function which updates a variable from the global dictionary of testium + + :param name: The name of the element to set. + :type name: str + :param value: The object to include in the global dictionary. + :type name: str + :return: No returned value + ''' + with global_dict_lock: + global_dict.update({name: value}) + +def delgd(name): + ''' Function which removes a variable from the global dictionary of testium + + :param name: The name of the element to be removed. + :type name: str + :return: No returned value + ''' + with global_dict_lock: + try: + del global_dict[name] + except: + pass + +def cleargd(): + with global_dict_lock: + if global_dict is not None: + global_dict.clear() + diff --git a/src/testium/interpreter/utils/icons.py b/src/testium/interpreter/utils/icons.py new file mode 100644 index 0000000..13601ac --- /dev/null +++ b/src/testium/interpreter/utils/icons.py @@ -0,0 +1,8 @@ + +import interpreter.utils.constants as cst +import interpreter.utils.settings as prefs + +def icon_prefix(): + if not hasattr(prefs, "settings"): + prefs.init() + return cst.ICON_THEMES_PREFIX[1] if prefs.settings.icons_theme != 0 else cst.ICON_THEMES_PREFIX[0] \ No newline at end of file diff --git a/src/testium/interpreter/utils/include.py b/src/testium/interpreter/utils/include.py new file mode 100644 index 0000000..bb8e1e6 --- /dev/null +++ b/src/testium/interpreter/utils/include.py @@ -0,0 +1,95 @@ +import yaml +import os.path +import libs.testium as tm +from interpreter.utils.params import expanse +from interpreter.utils.tum_except import ETUMFileError +from interpreter.utils.template import template_to_test +from copy import copy +from interpreter.utils.globdict import global_dict +from interpreter.utils.yaml_load import yaml_load + + +class TUMLoaderNoIncludes(yaml.Loader): + + def __init__(self, stream): + + if hasattr(stream, "root"): + self._root = stream.root + else: + self._root = os.path.split(stream.name)[0] + + super().__init__(stream) + + def include_none(self, node): + return None + + +class TUMLoaderRawIncludes(TUMLoaderNoIncludes): + """Class used to preload the test files. + When this class is used, the files are not included + recursively.""" + + def _include(self, node, is_raw: bool = False): + data = None + try: + # Check if templating used on the include file + # {file: , ...} dictionnary required. + p = self.construct_mapping(node, deep=True) + filename = expanse(p["file"]) + p.pop("file") + except: + # Only file parameter + p = self.construct_scalar(node) + filename = expanse(p) + + if not os.path.isabs(filename): + filename = os.path.join(self._root, filename) + + if not os.path.isfile(filename): + raise ETUMFileError('File "{}" not found'.format(filename)) + + # Copy of the global dict content to be passed as parameter + gd_copy = copy(global_dict) + + if not isinstance(p, str): + # Case where there are template explicit params + for k, v in p.items(): + gd_copy.update({k: expanse(v)}) + + # Processes eventual jinja2 template + tmpf = template_to_test(filename, gd_copy) + + # load the yaml test file (with potential includes) + data = yaml_load(tmpf, filename, TUMLoader) + + if not is_raw: + # This part allows to define include with no "sequence: " before + if ( + isinstance(data, dict) + and (len(data) == 1) + and "sequence" in data.keys() + ): + data = {"sequence": {"filename": filename, "data": data["sequence"]}} + else: + data = {"sequence": {"filename": filename, "data": data}} + + return data + + def raw_include(self, node): + return self._include(node, True) + + +class TUMLoader(TUMLoaderRawIncludes): + """Class used to include sub-sequences recursively. + A jinja2 based templating of included files is supported.""" + + def include(self, node): + return self._include(node, False) + + +TUMLoaderNoIncludes.add_constructor("!include", TUMLoaderRawIncludes.include_none) +TUMLoaderNoIncludes.add_constructor("!raw_include", TUMLoaderRawIncludes.include_none) +TUMLoaderRawIncludes.add_constructor("!include", TUMLoaderRawIncludes.include_none) +TUMLoaderRawIncludes.add_constructor("!raw_include", TUMLoaderRawIncludes.raw_include) +TUMLoader.add_constructor("!include", TUMLoader.include) +TUMLoader.add_constructor("!raw_include", TUMLoader.raw_include) diff --git a/src/testium/interpreter/utils/jrpc.py b/src/testium/interpreter/utils/jrpc.py new file mode 100644 index 0000000..3850059 --- /dev/null +++ b/src/testium/interpreter/utils/jrpc.py @@ -0,0 +1,408 @@ +import sys +import socket +import json +import threading +import itertools +from time import sleep +from typing import Callable, Any + +from interpreter.utils.tum_except import ETUMRuntimeError + +"""Lightweight JSON-RPC 2.0 helpers over TCP sockets. + +This module implements a minimal JSON-RPC 2.0 messaging layer using +newline-delimited JSON over TCP sockets. It is intended for simple +request/response exchanges useful during development and testing. The +implementation favors clarity and small surface area rather than full +JSON-RPC compliance. + +Main public classes +- `JsonRpcConnection` -- Wraps a connected TCP socket and manages + sending requests and dispatching incoming requests and responses. It + runs a background receiver thread and pairs outgoing requests with + responses using per-request identifiers and `threading.Event` objects. + +- `JsonRpcBase` -- Threaded base class for simple server/client helpers. + Provides a `call()` method to send requests to the connected peer and + a `handle_request()` hook that can be overridden or supplied at + construction. + +- `JsonRpcSrv` / `JsonRpcClient` -- Convenience single-connection server + and client classes that accept/connect to a peer and create a + `JsonRpcConnection` to handle message I/O. + +Usage example (server): + + srv = JsonRpcSrv(port, req_handler=my_handler) + srv.start() # runs in background thread + +Usage example (client): + + clt = JsonRpcClient(port) + clt.start() + result = clt.call('method_name', {'foo': 'bar'}) + +Notes: +- Messages must be valid JSON objects and are expected to be + single-line (newline-delimited). +- This helper is intended for local/testing use; it does not provide + authentication, encryption, or advanced JSON-RPC features (notifications, + batch requests, error objects beyond simple dicts). +""" + + +class JsonRpcConnection: + + def __init__(self, name, conn: socket.socket, req_handler: Callable[..., Any], timeout=0.2, dbg_out=None): + + self.name = name + self.conn = conn + if not callable(req_handler): + raise TypeError("req_handler must be a callable (function)") + + # User-provided function called to handle incoming requests. + # It may accept either the full request dict or (method, params). + self.req_handler = req_handler + self.send_lock = threading.Lock() + self.pending = {} # id -> Event + response + self.id_gen = itertools.count(1) + self.running = True + self._dbg_out = dbg_out + + self.conn.settimeout(timeout) + + self.recv_thread = threading.Thread(target=self._recv_loop, daemon=True) + self.recv_thread.start() + + @property + def dbg_out(self): + return self._dbg_out + + @dbg_out.setter + def dbg_out(self, dbg_out): + self._dbg_out = dbg_out + + # ---------- Reception ---------- + def _recv_loop(self): + buffer = b"" + + try: + while self.running: + try: + data = self.conn.recv(4096) + if not data: + self.print_info("Connection closed") + break + except socket.timeout: + continue + else: + buffer += data + + while b"\n" in buffer: + line, buffer = buffer.split(b"\n", 1) + try: + msg = json.loads(line.decode()) + except Exception as e: + self.print_info(str(e)) + else: + if isinstance(msg, dict): + self._dispatch(msg) + else: + self.print_info(f"msg not dict ! = '{msg}'") + + except (ConnectionResetError, OSError): + self.print_info("Connection lost") + + finally: + self.running = False + + # ---------- Dispatch ---------- + def _dispatch(self, msg): + if "method" in msg: + # request to be sent + meth=msg["method"] + params=msg.get("params", None) + rid=msg.get("id", None) + + threading.Thread( + target=self._handle_request, args=(meth, params, rid), daemon=True + ).start() + + elif "id" in msg: + # we just received an answer to a previously sent request + if msg["id"] in self.pending: + self.pending[msg["id"]]["response"] = msg + self.pending[msg["id"]]["event"].set() + else: + self.print_info(f"msg id '{msg["id"]}' inconsistency") + + # ---------- Handler ---------- + def _handle_request(self, meth, params, rid=None): + """Basic request handler. + + In this implementation + a `req_handler` callable provided at construction is invoked to handle + the request and produce a response value. + """ + # print(f"Request received: m:'{meth}', p:'{params}'") + + # Delegate handling to the user-provided function. Accept both + # `handler(req_dict)` and `handler(method, params)` signatures; if + # the handler raises, capture the exception message as the result. + try: + result = self.req_handler(meth, params) + except Exception as exc: + result = {"error": str(exc)} + + self.print_info(f"result: {result}") + + # If the request contains an `id`, send a JSON-RPC response. + if rid is not None: + msg = {"jsonrpc": "2.0", **result, "id": rid} + self._send(msg) + + # ---------- Send ---------- + def _send(self, obj): + """Send a JSON-serializable object terminated by newline. + + The send operation is protected by a lock to avoid interleaving when + multiple threads attempt to write to the underlying socket. + """ + + msg = json.dumps(obj) + "\n" + data = (msg).encode() + self.print_info("sending : " + msg) + with self.send_lock: + self.conn.sendall(data) + + # ---------- Outgoing request ---------- + def call(self, method, params=None, timeout=5.0): + """Send a request and wait for its response. + + Args: + method: The RPC method name. + params: Parameters for the method (any JSON-serializable object). + timeout: Seconds to wait for a response before raising + `TimeoutError`. + + Returns: + The response message (dict) received from the peer. + + Raises: + TimeoutError: If no response is received within `timeout`. + """ + + req_id = next(self.id_gen) + event = threading.Event() + + self.pending[req_id] = {"event": event, "response": None} + + self._send({"jsonrpc": "2.0", "method": method, "params": params, "id": req_id}) + + if not event.wait(timeout): + # Timeout: remove pending entry and raise + self.pending.pop(req_id, None) + raise TimeoutError("Timeout JSON-RPC") + + return self.pending.pop(req_id)["response"] + + def print_info(self, msg): + if self.dbg_out is not None: + print(f"{self.name}: " + str(msg), file=self.dbg_out) + + def stop(self): + if self.running: + self.running = False + + def join(self): + self.recv_thread.join() + +class JsonRpcBase(threading.Thread): + """Threaded base class for simple JSON-RPC server/client helpers. + + Subclasses implement `run()` to accept or establish a single TCP + connection and create a `JsonRpcConnection` instance assigned to + `self._rpc`. The base class provides a `call()` helper that forwards + to the active connection, and a `handle_request(method, params)` hook + which may be overridden or supplied via the `req_handler` constructor + argument. + + Constructor: + - `port` (int): TCP port to bind/connect to. + - `req_handler` (callable|None): optional request handler. + - `timeout` (int|float): operation timeout in seconds. + + Behavior: + - `call()` raises `ETUMRuntimeError` if no active connection exists. + """ + + def __init__(self, port, req_handler: Callable[[dict], Any]=None, timeout=10, dbg_out=None): + super().__init__() + self._port = port + self._timeout = timeout + self._rpc = None + self._req_handler = req_handler + self._dbg_out = dbg_out + self._event_ready = threading.Event() + + def handle_request(self, method, params): + """Override to implement server-side request handling. + + The default implementation delegates to the `req_handler` provided + at construction (if any). Override this method to customize + behaviour. + """ + if self._req_handler is not None: + return self._req_handler(method, params) + + self.print_info("No handler defined for the calls") + + def call(self, method, params): + if (self._rpc is not None) and self._rpc.running: + return self._rpc.call(method, params) + else: + raise ETUMRuntimeError(f"'{self.name}' JRPC Server not started.") + + def print_info(self, msg): + if self.dbg_out is not None: + print(f"{self.name}: " + str(msg), file=self.dbg_out) + + def run(self): + pass + + def stop(self): + if self._rpc is not None: + self._rpc.stop() + + def connect(self, sock): + self._rpc = JsonRpcConnection(self.name, sock, self.handle_request, dbg_out=self.dbg_out) + self._event_ready.set() + + def wait_ready(self, timeout=None): + return self._event_ready.wait(timeout) + + @property + def dbg_out(self): + return self._dbg_out + + @dbg_out.setter + def dbg_out(self, dbg_out): + self._dbg_out = dbg_out + if self._rpc is not None: + self._rpc.dbg_out = dbg_out + +class JsonRpcSrv(JsonRpcBase): + """Single-connection JSON-RPC server. + + `JsonRpcSrv` binds to `localhost` on the provided port and waits for a + single client connection. When a client connects it creates a + `JsonRpcConnection` and runs until the connection closes or is stopped. + + Typical usage:: + + srv = JsonRpcSrv(port, req_handler=my_handler) + srv.start() # runs in background thread + + The server will raise `ETUMRuntimeError` on accept/connect timeout. + """ + + def __init__(self, port, req_handler = None, timeout=10): + super().__init__(port, req_handler, timeout) + self.name = f"JsonRpcSvr_{port}" + + def run(self): + # TCP/IP socket creation + try: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + + # Link of the socket at the configured port + sock.bind(("localhost", self._port)) + + sock.settimeout(self._timeout) + + # Listens incoming connections + sock.listen(1) + + self.print_info("awaiting connection") + tslice = 0.2 + t = self._timeout + while True: + try: + conn, addr = sock.accept() + except socket.timeout: + if t >= 0: + sleep(tslice) + continue + else: + raise ETUMRuntimeError(f"{self.name}: Timeout") + break + + self.print_info("Client connected") + with conn: + self.connect(conn) + + while self._rpc.running: + # Sleep a short time to avoid a busy loop and allow + # the receiver thread to process messages. + sleep(0.1) + + finally: + if self._rpc is not None: + self._rpc.stop() + self._rpc.join() + self.print_info("stopped") + + +class JsonRpcClient(JsonRpcBase): + """Simple JSON-RPC client that connects to a server on localhost. + + `JsonRpcClient` will attempt to connect to the given port until the + configured timeout elapses. On successful connection it creates a + `JsonRpcConnection` and serves requests/responses until closed. + + Typical usage:: + + clt = JsonRpcClient(port) + clt.start() + resp = clt.call('method', {'a': 1}) + """ + + def __init__(self, port, req_handler = None, timeout=10): + super().__init__(port, req_handler, timeout) + self.name = f"JsonRpcClt_{port}" + + def run(self): + # TCP/IP socket creation + try: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + + # Link of the socket at the configured port + tslice = 0.2 + t = self._timeout + while True: + try: + sock.connect(("localhost", self._port)) + except OSError: + t -= tslice + if t >= 0: + sleep(tslice) + continue + else: + raise ETUMRuntimeError(f"{self.name}: failed to connect") + break + self.print_info("Connected to server") + + self.connect(sock) + + while self._rpc.running: + # Sleep a short time to avoid a busy loop and allow + # the receiver thread to process messages. + sleep(0.1) + + finally: + if self._rpc is not None: + self._rpc.stop() + self._rpc.join() + self.print_info("closed") diff --git a/src/testium/interpreter/utils/modules.py b/src/testium/interpreter/utils/modules.py new file mode 100644 index 0000000..2f149b8 --- /dev/null +++ b/src/testium/interpreter/utils/modules.py @@ -0,0 +1,12 @@ +import importlib.util +import importlib.machinery + +def load_source(modname, filename): + loader = importlib.machinery.SourceFileLoader(modname, filename) + spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) + module = importlib.util.module_from_spec(spec) + # The module is always executed and not cached in sys.modules. + # Uncomment the following line to cache the module. + # sys.modules[module.__name__] = module + loader.exec_module(module) + return module \ No newline at end of file diff --git a/src/testium/interpreter/utils/params.py b/src/testium/interpreter/utils/params.py new file mode 100644 index 0000000..ba400aa --- /dev/null +++ b/src/testium/interpreter/utils/params.py @@ -0,0 +1,379 @@ +import interpreter.utils.globdict as globdict +from interpreter.utils.eval import evaluate +from interpreter.utils.tum_except import ETUMSyntaxError, ETUMRuntimeError + + +class TestItemParams: + + def __init__(self, dict_item={}, parent=None): + self._dicoparam = dict_item + self._parent = parent + + def expanse(self, param_value): + return expanse(param_value, self._parent) + + def getParam(self, parameter, default=None, required=False, processed=False): + """Returns a parameter value from the test item dictionnary. + + :param parameter: list or string which are the parameter name(s). + :type parameter: list or string + :param default: default value if no param and not required. + :type default: string + :param required: if True, the function raises an Exception in case of missing param. + :type required: bool + :param processed: if True, variable substitution is applied. + :type processed: bool + :return: a parameter value or default + """ + result = default + + if not isinstance(parameter, (tuple, list)): + if not isinstance(parameter, str): + raise ETUMSyntaxError('"%s" parameter syntax error' % (parameter)) + parameter = [parameter] + + has_parameter = False + for para in parameter: + if ( + (not (self._dicoparam is None)) + and (isinstance(self._dicoparam, dict)) + and (para in self._dicoparam) + ): + result = self._dicoparam[para] + if processed: + result = self.expanse(result) + has_parameter = True + break + + if (not has_parameter) and required: + raise ETUMSyntaxError('"%s" parameter must exist' % (parameter[0])) + return result + + def getParamAll(self, parameter, default=[], required=False, processed=False): + """Returns a parameter list (if any) from the test item dictionnary. + + :param parameter: list or string giving the parameter name. + :type parameter: list or string + :param default: default value if no param and not required. + :type default: list + :param required: if True, the function raises an Exception in case of missing param. + :type required: bool + :param processed: if True, variable substitution is applied. + :type processed: bool + :return: a parameter list or default + """ + results = default + + if not isinstance(parameter, (tuple, list)): + if not isinstance(parameter, str): + raise ETUMSyntaxError('"%s" parameter syntax error' % (parameter)) + parameter = [parameter] + + has_parameter = False + for para in parameter: + if para in self._dicoparam: + has_parameter = True + results = [] + if isinstance(self._dicoparam[para], (tuple, list)): + list_params = self._dicoparam[para] + else: + list_params = [self._dicoparam[para]] + + for p in list_params: + if processed: + p = self.expanse(p) + results.append(p) + + if (not has_parameter) and required: + raise ETUMSyntaxError('"%s" parameter must exist' % (parameter[0])) + + return results + + def getParamFromList(self, params): + results = [] + + for param in params: + if "$(loop_param)" == param: + result = getLoopParam(self._parent) + if result is None: + raise ETUMSyntaxError("parent sequence is not a loop") + elif "$(loop_index)" == param: + result = getLoopIndex(self._parent) + if result is None: + raise ETUMSyntaxError("parent sequence is not a loop") + else: + # If not in global, try in local + result = param + + results.append(result) + return results + + def getData(self): + return self._dicoparam + + +def getLoopParam(parent): + """This function is returning the first found loop_param value. + The loop_param is searched recursively into the upper layers of tests + items. + It returns the loop_param or 'None'. + """ + res = None + if hasattr(parent, "_currentLoop"): + res = parent._currentLoop + else: + # Parent is None in case of a root item + if parent._parent is not None: + res = getLoopParam(parent._parent) + return res + + +def getLoopIndex(parent): + """This function is returning the first found loop_index value. + The loop_index is searched recursively into the upper layers of tests + items. + It returns the loop_index or 'None'. + """ + res = None + try: + res = parent._currentIter + except AttributeError: + # Parent is None in case of a root item + if parent._parent is not None: + res = getLoopIndex(parent._parent) + return res + +def getLoopCount(parent): + """This function is returning the first found loop_count value. + The loop_count is searched recursively into the upper layers of tests + items. + It returns the loop_index or 'None'. + """ + res = None + try: + res = parent._niter + except AttributeError: + # Parent is None in case of a root item + if parent._parent is not None: + res = getLoopCount(parent._parent) + return res + +def getInverseLoopIndex(parent): + """This function is returning the first found loop_index_inverse value. + The loop_index_inverse is searched recursively into the upper layers of tests + items. + It returns the loop_index_inverse or 'None'. + """ + res = None + try: + res = parent._currentInverseIter + except AttributeError: + # Parent is None in case of a root item + if parent._parent is not None: + res = getInverseLoopIndex(parent._parent) + return res + + +def find_matches(string, left_patt, right_patt): + """ The object of this function is to identify the expandable + parts of a string. + The returned values are tables of doublets corresponding to + the index of extractable sub-strings. + """ + result = [] + + # find all left pattern + l = len(string) + i = 0 + while i < l: + # first we are looking for the first left pattern + leftind = string.find(left_patt, i) + if leftind >= 0: + leftind += len(left_patt) + # Second we are looking for the first right pattern + # (on the right of the first left pattern) + rightind = string.find(right_patt, leftind) + if rightind >= 0: + # Right pattern found + next_left = leftind + while next_left < rightind: + # third we are looking for the last left pattern + # before the right pattern + j = string.find(left_patt, next_left) + if j > 0 and j < rightind: + next_left = j + len(left_patt) + else: + break + if (next_left >= 0) and next_left < rightind: + result.append([next_left, rightind]) + i = rightind + len(right_patt) + else: + i = next_left + else: + # right pattern not found on the right of the first left pattern + # No match then + break + else: + # left pattern not found + # No match then + break + + return result + + +def _parse_and_process(left_patt, right_patt, value, func, *fparam): + """This function parses a string value to check if patterns corresponding + to expr exist. + syntax_weight is the size of the syntax around the extracted variable name. + for ex: $(toto) syntax weight is len("$()") + When this kind of pattern is found, operation on the extracted value is + performed. this is the object of func and fparam (fparam: func + params as table). + """ + result = value + cont = True + while cont and (isinstance(result, str)): + cont = False + o = 0 + tmp_res = "" + matches = find_matches(result, left_patt, right_patt) + for s in matches: + len_left = len(left_patt) + len_right = len(right_patt) + # Get the positions of the match + r = s[0] - len_left + tmp_res = tmp_res + result[o : r] + o = s[1] + len_right + # Get the global value to search + extract = result[s[0] : s[1]] + # Try to access to the global value + treated, g = func(extract, *fparam) + if not treated: + # No result found in globals + tmp_res = tmp_res + result[r : o] + else: + # Results found, we continue to loop + cont = True + if isinstance(g, str): + tmp_res = tmp_res + g + else: + if len(result.strip()) == ( + len(extract) + len_left + len_right + ): + tmp_res = g + else: + tmp_res = tmp_res + str(g) + + # if something has been replaced + if isinstance(tmp_res, str) and cont: + tmp_res = tmp_res + result[o:] + result = tmp_res + elif cont: + result = tmp_res + + return result + + +def _operate_param(glob, parent): + """This function checks if glog exists in the global dict or + if it is a loop variable. + """ + treated = True + if (glob == "loop_param") and (parent is not None): + g = getLoopParam(parent) + elif (glob == "loop_index") and (parent is not None): + g = getLoopIndex(parent) + elif (glob == "loop_index_inverse") and (parent is not None): + g = getInverseLoopIndex(parent) + elif (glob == "loop_count") and (parent is not None): + g = getLoopCount(parent) + else: + g = globdict.gd(glob) + if g is None: + treated = False + g = glob + return treated, g + + +# def _dummy_eval(val): +# bla = evaluate(val) +# print("******** evaluate(" + str(val) + ") = " + str(bla[1])) +# return bla + + +def _preprocess_string(value, parent=None): + """This function parses a string value to check if patterns corresponding + to $(xxx) exists. + When this kind of pattern is found, an attempt to replace the variable + by its value in the global dict is performed. + If it can't be found in the global dict, not replaced. + """ + return _parse_and_process("$(", ")", value, _operate_param, parent) + + +def _eval_param(value): + """This function parses a string value to check if patterns corresponding + to <@xxx@ exists. + When this kind of pattern is found, an attempt to evaluate its + content is done. + If it is not evaluable, not replaced. + """ + return _parse_and_process("<@", "@>", value, evaluate) + + +def _process_recursively(func, param_value, *fparams): + """This function is scaning recursively param_value to expand it with + global variables or loop variables. + """ + result = None + if isinstance(param_value, str): + # If a string --> direct expansion + result = func(param_value, *fparams) + elif isinstance(param_value, dict): + # If a dictionary --> check all elements + result = {} + for key, val in param_value.items(): + k = key + if isinstance(key, str): + k = func(key, *fparams) + v = _process_recursively(func, val, *fparams) + result.update({k: v}) + elif isinstance(param_value, list): + # If a list --> check all elements + result = [] + for val in param_value: + result.append(_process_recursively(func, val, *fparams)) + else: + result = param_value + + return result + +def ProcessParam(param_value, parent=None): + """This function is scaning recursively param_value to expand it with + global variables or loop variables. + """ + return _process_recursively(_preprocess_string, param_value, parent) + + +def ProcessEval(param_value): + """This function is scaning recursively param_value to expand it with + global variables or loop variables. + """ + return _process_recursively(_eval_param, param_value) + + +def expanse(param_value, parent=None): + """This function is scaning recursively param_value to expand it: + - with global variables or loop variables when $() pattern is found. + - with evaluation of the content of %() pattern when found. + """ + n = 0 + result = param_value + while n < 10: + tmp_res = ProcessParam(result, parent) + tmp_res = ProcessEval(tmp_res) + if tmp_res == result: + break + result = tmp_res + n += 1 + return result diff --git a/src/testium/interpreter/utils/paths.py b/src/testium/interpreter/utils/paths.py new file mode 100644 index 0000000..565b078 --- /dev/null +++ b/src/testium/interpreter/utils/paths.py @@ -0,0 +1,36 @@ +import os +import inspect +from pathlib import Path +import testium +from interpreter.utils.params import expanse + +import libs.testium as tm + + +def testium_path(): + tp = inspect.getfile(inspect.getmodule(testium)) + return str(Path(tp).parent.resolve()) + + +def prepare_file_to_save(file_name, file_ext=""): + iname = file_name + if file_ext != "": + iname = os.path.splitext(file_name)[0] + file_ext + + if os.path.isfile(iname): + i = 0 + fname = iname + while os.path.isfile(fname): + i += 1 + fname = iname + "-" + str(i) + ".saved" + os.rename(iname, fname) + return iname + + +def abs_path_from_file(file): + abs_file_path = Path(expanse(file)) + if not abs_file_path.is_absolute(): + abs_file_path = Path(tm.gd("test_directory")) / abs_file_path + abs_file_path = abs_file_path.resolve() + return abs_file_path + diff --git a/src/testium/interpreter/utils/periodic_timer.py b/src/testium/interpreter/utils/periodic_timer.py new file mode 100644 index 0000000..880b323 --- /dev/null +++ b/src/testium/interpreter/utils/periodic_timer.py @@ -0,0 +1,32 @@ + +from threading import Timer +from time import monotonic + +class PeriodicTimer: + def __init__(self, interval, function): + self.interval = interval + self.function = function + self.execution = None + self.active = False + self.t0 = 0 + + def exec_periodically(self): + if self.active: + self.function() + time_elapsed = monotonic() - self.t0 + time_waiting = max(0.01, self.interval-time_elapsed) + self.execution = Timer(time_waiting, self.exec_periodically) + self.t0 = self.t0 + self.interval + self.execution.start() + + def start(self): + if not self.active: + self.active = True + self.t0 = monotonic() + self.execution = Timer(self.interval, self.exec_periodically) + self.execution.start() + + def stop(self): + if self.active: + self.execution.cancel() + self.active = False \ No newline at end of file diff --git a/src/testium/interpreter/utils/settings.py b/src/testium/interpreter/utils/settings.py new file mode 100644 index 0000000..fddaeb8 --- /dev/null +++ b/src/testium/interpreter/utils/settings.py @@ -0,0 +1,258 @@ +import os +import configparser +import json +import platform +from interpreter.utils.tum_except import ETUMRuntimeError + +SettingsCompany = 'Testium' +SettingsApplication = 'testium' + + +def init(): + global settings + settings = TestiumSettings() + + +class SettingsItem(): + def __init__(self, name: str, item_type: type) -> None: + self.name = name + self.t = item_type + + +class TestiumSettings(): + SettingsRecentFiles = SettingsItem('recentFileList', list) + SettingsLastLogFile = SettingsItem('lastLogFile', str) + SettingsLogFileSaved = SettingsItem('logFileSaved', bool) + SettingsHideDocPane = SettingsItem('docPaneHidden', bool) + SettingsHideLogPane = SettingsItem('logPaneHidden', bool) + SettingsShowCheckboxes = SettingsItem('checkBoxesShow', bool) + SettingsLogPath = SettingsItem('defaultLogPath', str) + SettingsReportPath = SettingsItem('defaultReportPath', str) + SettingsShowTimeColumn = SettingsItem('showTimeColumn', bool) + SettingsColumnsSize = SettingsItem('columnsSize', dict) + SettingsDblClickEnabled = SettingsItem('dblClickEnabled', bool) + SettingsIconsTheme = SettingsItem('iconsTheme', int) + SettingsLogFont = SettingsItem('logFont', str) + SettingsLogFontSize = SettingsItem('logFontSize', int) + SettingsGitSupported = SettingsItem('logGitSupported', bool) + + def __init__(self): + if 'windows' in platform.system().lower(): + user_path = os.getenv('APPDATA') + else: + user_path = os.path.join(os.getenv('HOME'), '.config') + + self.settings_fname = os.path.join(user_path, SettingsCompany, + SettingsApplication, + SettingsApplication + '.conf') + + if not os.path.isfile(self.settings_fname): + try: + if not os.path.isdir(os.path.dirname(os.path.dirname(self.settings_fname))): + os.mkdir(os.path.dirname(os.path.dirname(self.settings_fname))) + if not os.path.isdir(os.path.dirname(self.settings_fname)): + os.mkdir(os.path.dirname(self.settings_fname)) + except FileNotFoundError: + pass + + if os.path.exists(os.path.dirname(self.settings_fname)): + with open(self.settings_fname, "x") as fd: + pass + + self.conf = configparser.ConfigParser() + if os.path.isfile(self.settings_fname): + self.conf.read(self.settings_fname) + if not 'Default' in self.conf: + self.clear() + + def clear(self): + self.conf['Default'] = {} + self.sync() + + def value(self, key: SettingsItem, default=''): + if not isinstance(key, SettingsItem): + raise ETUMRuntimeError('Not a proper Settings item.') + if type(default) != key.t: + raise ETUMRuntimeError( + 'Types mismatch in config file. You could try to erase "{}" to solve the issue'.format(self.settings_fname)) + ret = default + try: + if key.t == int: + ret = int(self.conf.getint('Default', key.name, fallback=default)) + elif key.t == bool: + ret = bool(self.conf.getboolean( + 'Default', key.name, fallback=default)) + elif key.t == str: + ret = self.conf.get('Default', key.name, fallback=default) + elif key.t == bytearray: + ba = json.loads(self.conf.get( + 'Default', key.name, fallback=default)) + ret = bytearray(ba) + else: + ret = self.conf.get('Default', key.name, fallback=default) + if isinstance(ret, str): + ret = json.loads(ret) + except: + self.clear() + return ret + + def set_value(self, key: SettingsItem, value: any): + if type(value) != key.t: + raise ETUMRuntimeError( + 'Types mismatch in config file. You could try to erase "{}" to solve the issue'.format(self.settings_fname)) + if key.t == int: + self.conf.set('Default', key.name, str(int(value))) + elif key.t == bool: + self.conf.set('Default', key.name, str(bool(value))) + elif key.t == str: + self.conf.set('Default', key.name, str(value)) + elif key.t == bytearray: + ba = [int(v) for v in value] + self.conf.set('Default', key.name, json.dumps(ba)) + else: + self.conf.set('Default', key.name, json.dumps(value)) + + def sync(self): + if os.path.isfile(self.settings_fname): + with open(self.settings_fname, 'w') as configfile: + if configfile.writable(): + self.conf.write(configfile) + +# SettingsRecentFiles = 'recentFileList' + @property + def recent_files(self): + return self.value(self.SettingsRecentFiles, []) + + @recent_files.setter + def recent_files(self, value): + self.set_value(self.SettingsRecentFiles, value) + +# SettingsLastLogFile = 'lastLogFile' + @property + def log_file(self): + return self.value(self.SettingsLastLogFile) + + @log_file.setter + def log_file(self, value): + self.set_value(self.SettingsLastLogFile, value) + +# SettingsLogFileSaved = 'logFileSaved' + @property + def log_file_saved(self): + return self.value(self.SettingsLogFileSaved, False) + + @log_file_saved.setter + def log_file_saved(self, value): + self.set_value(self.SettingsLogFileSaved, value) + +# SettingsHideDocPane = 'docPaneHidden' + @property + def hide_doc_pane(self): + return self.value(self.SettingsHideDocPane, False) + + @hide_doc_pane.setter + def hide_doc_pane(self, value): + self.set_value(self.SettingsHideDocPane, value) + +# SettingsHideLogPane = 'logPaneHidden' + @property + def hide_log_pane(self): + return self.value(self.SettingsHideLogPane, False) + + @hide_log_pane.setter + def hide_log_pane(self, value): + self.set_value(self.SettingsHideLogPane, value) + +# SettingsShowCheckboxes = 'checkBoxesShow' + @property + def show_checkboxes(self): + return self.value(self.SettingsShowCheckboxes, False) + + @show_checkboxes.setter + def show_checkboxes(self, value): + self.set_value(self.SettingsShowCheckboxes, value) + +# SettingsLogPath = 'defaultLogPath' + @property + def log_path(self): + return self.value(self.SettingsLogPath, '$(test_directory)') + + @log_path.setter + def log_path(self, value): + self.set_value(self.SettingsLogPath, value) + +# SettingsReportPath = 'defaultReportPath' + @property + def report_path(self): + return self.value(self.SettingsReportPath, '$(home)') + + @report_path.setter + def report_path(self, value): + self.set_value(self.SettingsReportPath, value) + +# SettingsShowTimeColumn = 'showTimeColumn' + @property + def show_time_column(self): + return self.value(self.SettingsShowTimeColumn, False) + + @show_time_column.setter + def show_time_column(self, value): + self.set_value(self.SettingsShowTimeColumn, value) + +# SettingsColumnsSize = 'columnsSize' + @property + def columns_size(self): + return self.value(self.SettingsColumnsSize, {}) + + @columns_size.setter + def columns_size(self, value): + self.set_value(self.SettingsColumnsSize, value) + +# SettingsDblClickEnabled = 'dblClickEnabled' + @property + def dbl_click_enabled(self): + return self.value(self.SettingsDblClickEnabled, False) + + @dbl_click_enabled.setter + def dbl_click_enabled(self, value): + self.set_value(self.SettingsDblClickEnabled, value) + +# SettingsIconsTheme = 'iconsTheme' + @property + def icons_theme(self): + return self.value(self.SettingsIconsTheme, 0) + + @icons_theme.setter + def icons_theme(self, value): + self.set_value(self.SettingsIconsTheme, value) + +# SettingsLogFont = 'logFont' + @property + def log_font(self): + return self.value(self.SettingsLogFont, 'Monospace') + + @log_font.setter + def log_font(self, value): + self.set_value(self.SettingsLogFont, value) + +# SettingsLogFontSize = 'logFontSize' + @property + def log_font_size(self): + v = self.value(self.SettingsLogFontSize, 8) + if v <= 0: + v = 8 + return v + + @log_font_size.setter + def log_font_size(self, value): + self.set_value(self.SettingsLogFontSize, value) + +# SettingsGitSupported = 'gitSupported' + @property + def git_supported(self): + r = self.value(self.SettingsGitSupported, True) + return r + + @git_supported.setter + def git_supported(self, value): + self.set_value(self.SettingsGitSupported, value) diff --git a/src/testium/interpreter/utils/stdout_redirect.py b/src/testium/interpreter/utils/stdout_redirect.py new file mode 100644 index 0000000..25b66a7 --- /dev/null +++ b/src/testium/interpreter/utils/stdout_redirect.py @@ -0,0 +1,75 @@ +import sys +from threading import (Thread, Event) +from interpreter.utils.string_queue import StringQueue +from time import (sleep) + +class StdioRedirect: + + def __init__(self): + self.redirect_enabled = False + self.spy_enabled = False + self.ini_stdout = sys.stdout + self.ini_stderr = sys.stderr + self.stream = self.ini_stdout + + def redirect(self, stream): + if not self.spy_enabled: + self.out_stream = stream + self.stream = self.out_stream + sys.stdout = self.out_stream + sys.stderr = self.out_stream + self.redirect_enabled = True + + def restore(self): + if not self.spy_enabled and self.redirect_enabled: + sys.stdout = self.ini_stdout + sys.stderr = self.ini_stderr + self.redirect_enabled = False + + def intercept(self): + if not self.spy_enabled: + self.thr_started = Event() + self.log_buf = StringQueue() + self.in_stream = StringQueue() + self.stop_output = Event() + self.thrd_out = Thread(target=self.interceptStdOut) + self.thrd_out.daemon = True + sys.stdout = self.in_stream + sys.stderr = self.in_stream + self.stream = self.in_stream + self.thrd_out.start() + self.thr_started.wait() + self.spy_enabled = True + + + def stop(self): + if self.spy_enabled: + sys.stdout = self.out_stream + sys.stderr = self.out_stream + self.stream = self.out_stream + self.stop_output.set() + self.thrd_out.join() + del self.log_buf + del self.in_stream + del self.stop_output + del self.thrd_out + del self.thr_started + + self.spy_enabled = False + + def interceptStdOut(self): + self.thr_started.set() + while not self.stop_output.is_set(): + data = self.in_stream.read() + self.log_buf.write(data) + self.out_stream.write(data) + if data == '': + sleep(0.1) + + def read(self): + ret = '' + if self.spy_enabled: + ret = self.log_buf.read() + return ret + +stdio_redir = StdioRedirect() diff --git a/src/testium/interpreter/utils/string_queue.py b/src/testium/interpreter/utils/string_queue.py new file mode 100644 index 0000000..72358ac --- /dev/null +++ b/src/testium/interpreter/utils/string_queue.py @@ -0,0 +1,60 @@ +# from io import (StringIO, SEEK_SET, SEEK_CUR, SEEK_END) +from multiprocessing import Queue +from queue import (Empty) +from threading import (Thread, Event, Condition) +from threading import Lock + +class StringQueue(object): + """ Class used to store the buffered consoles data: + - SerialConsole + - TermConsole + """ + def __init__(self): + self.cond = Condition() + self.string = '' + + def write(self, data): + with self.cond: + self.string += data + self.cond.notify() # Wake 1 thread waiting on cond (if any) + + def writeln(self, data=''): + self.write(data + '\n') + + def read(self, block=False, timeout=None): + ret = '' + with self.cond: + # If blocking is true, always return at least 1 item + if block and len(self.string) == 0: + self.cond.wait(timeout) + if len(self.string) != 0: + ret = self.string + self.string = '' + return ret + + def flush(self): + pass + +class BufferedStringQueue(StringQueue): + def __init__(self, stream_out): + super().__init__() + self.stream_out = stream_out + self.thr_started = Event() + self.stop_evt = Event() + self.thrd = Thread(target=self.loop) + self.thrd.daemon = True + self.thrd.start() + self.thr_started.wait() + + def stop(self): + self.stop_evt.set() + self.thrd.join() + del self.stop_evt + del self.thrd + del self.thr_started + + def loop(self): + self.thr_started.set() + while not self.stop_evt.is_set(): + data = self.read(True, 0.1) + self.stream_out.write(data) diff --git a/src/testium/interpreter/utils/template.py b/src/testium/interpreter/utils/template.py new file mode 100644 index 0000000..6ad38a2 --- /dev/null +++ b/src/testium/interpreter/utils/template.py @@ -0,0 +1,38 @@ +import os +from sys import exc_info +from jinja2 import Template +from jinja2.exceptions import TemplateError, UndefinedError +from tempfile import TemporaryFile +from interpreter.utils.yaml_load import print_yaml +from interpreter.utils.tum_except import ETUMSyntaxError + + +def template_to_test(filename: str, params: list): + """ Function which processes an eventual jinja2 template to a test file + """ + # Temporary file created to receive the processed include + # file + tmpf = TemporaryFile('w+t') + with open(filename, 'r') as f: + try: + j2_template = Template(f.read()) + except TemplateError as e: + print_yaml(f, filename) + type, value, tb = exc_info() + msg = "Template error" + if hasattr(value, 'lineno'): + msg = msg + f" on line {value.lineno}: " + else: + msg += ": " + raise ETUMSyntaxError(msg + str(e), filename) + try: + params["include_directory"] = os.path.dirname(os.path.abspath(filename)) + tmpf.write(j2_template.render(params)) + except (UndefinedError, TypeError): + raise ETUMSyntaxError(f"Template loading of file '{filename}' with following parameters '{str(params)}'") + + # return to begining of the temp file + tmpf.seek(0, os.SEEK_SET) + tmpf.root = os.path.dirname(filename) + + return tmpf \ No newline at end of file diff --git a/src/testium/interpreter/utils/termlog.py b/src/testium/interpreter/utils/termlog.py new file mode 100644 index 0000000..1cef03d --- /dev/null +++ b/src/testium/interpreter/utils/termlog.py @@ -0,0 +1,104 @@ +import colorama +import re + +from colorama import Fore, Style + +COLOR_DEFAULT = Fore.WHITE +COLOR_RESET = Fore.RESET + Style.RESET_ALL + COLOR_DEFAULT + + +def colored_string(string: str, inputs: list) -> None: + """Function which calculate the coloring of strings with many layers. + Overlap of layers and inner layers are managed. + """ + cols = [COLOR_DEFAULT for i in range(len(string))] + for input in inputs: + for i in range(input[0][0], input[0][1]): + cols[i] = input[1] + + # construction of the string + s = "" + ilast = 0 + last_col = COLOR_DEFAULT + for i in range(len(string)): + if last_col != cols[i]: + s = s + string[ilast:i] + COLOR_RESET + cols[i] + ilast = i + last_col = cols[i] + + return s + string[ilast:] + COLOR_RESET + + +class TermLog: + PASS = ["PASS", "Success", "SUCCESS"] + FAIL = ["FAIL", "Fail", "fail", "Error", "ERROR", "error"] + WARN = ["Warning", "warning", "WARNING", "Warn", "WARN"] + INFO = ["INFO"] + DEBUG = ["DEBUG"] + BOOL = ["False", "True", "false", "true", "FALSE", "TRUE"] + + def __init__(self, out) -> None: + """Class used to color the stdout in batch and terminal mode.""" + colorama.init() + self.out = out + self.pats = [] + self.pats = self.pats + [ + [re.compile('(\\"[^\\"]+\\")'), Fore.LIGHTBLUE_EX + Style.BRIGHT], + [re.compile("(\\'[^\\']+\\')"), Fore.LIGHTBLUE_EX + Style.BRIGHT], + [re.compile("(<-----|----->) step"), Fore.BLUE], + [ + re.compile( + r"([\d\.]+)", + ), + Fore.MAGENTA, + ], + [re.compile(r"(@@\d+@@)"), Fore.BLACK], + ] + for word in self.BOOL: + self.pats.append([re.compile("({})".format(word)), Fore.MAGENTA]) + for word in self.WARN: + self.pats.append([re.compile("({})".format(word)), Fore.YELLOW]) + for word in self.INFO: + self.pats.append([re.compile("({})".format(word)), Style.BRIGHT]) + for word in self.DEBUG: + self.pats.append([re.compile("({})".format(word)), Fore.BLUE + Style.BRIGHT]) + for word in self.PASS: + self.pats.append( + [re.compile("({})".format(word)), Fore.GREEN + Style.BRIGHT] + ) + for word in self.FAIL: + self.pats.append([re.compile("({})".format(word)), Fore.RED + Style.BRIGHT]) + self.residue = "" + + def find_pats(self, line): + spans = [] + for p in self.pats: + it = p[0].finditer(line) + for m in it: + if m: + spans.append([m.span(), p[1]]) + return spans + + def write(self, s: str) -> None: + if s == "": + return + s = self.residue + s + self.residue = "" + if s[-1:] != "\n": + pos = s.rfind("\n") + if pos >= 0: + self.residue = s[pos:] + s = s[:pos] + else: + # only one line + self.out.write(colored_string(s, self.find_pats(s))) + return + # multiline case + for l in s.splitlines(): + self.out.write(colored_string(l, self.find_pats(l)) + "\n") + + def flush(self): + if self.residue != "": + self.out.write(self.residue) + self.residue = "" + self.out.flush() diff --git a/src/testium/interpreter/utils/test_ctrl.py b/src/testium/interpreter/utils/test_ctrl.py new file mode 100644 index 0000000..d7c87be --- /dev/null +++ b/src/testium/interpreter/utils/test_ctrl.py @@ -0,0 +1,51 @@ +from multiprocessing import Queue +from queue import Empty +from interpreter.utils.tum_except import ETUMRuntimeError + + +class TestSetController: + + def __init__(self) -> None: + self._test_ctrl = Queue() + self._test_resp = Queue() + + @property + def ctrl(self) -> Queue: + return self._test_ctrl + + @property + def resp(self) -> Queue: + return self._test_resp + + def control(self, cmd: str, **args): + block = True + timeout = None + if "block" in args: + block = args.pop("block") + if "timeout" in args: + timeout = args.pop("timeout") + self._test_ctrl.put({cmd: args}) + res = self._test_resp.get(block, timeout) + if isinstance(res, tuple): + raise ETUMRuntimeError(f"Test set command '{cmd}' failed: '{res[1]}'") + if isinstance(res, dict) and not cmd in res.keys(): + raise ETUMRuntimeError(f"Unexpected return error in test set controller") + return res[cmd] + + def clear(self): + while True: + try: + self._test_ctrl.get_nowait() + except Empty: + # we return without error in that case + break + while True: + try: + self._test_resp.get_nowait() + except Empty: + # we return without error in that case + break + + def close(self): + self.ctrl.close() + self.resp.close() \ No newline at end of file diff --git a/src/testium/interpreter/utils/test_init.py b/src/testium/interpreter/utils/test_init.py new file mode 100644 index 0000000..89ba304 --- /dev/null +++ b/src/testium/interpreter/utils/test_init.py @@ -0,0 +1,473 @@ +import os +from pathlib import Path +import datetime +from socket import gethostname +import ast +import json +import yaml +import xml.etree.ElementTree as ET +import copy + +import yaml + +from interpreter.utils.constants import TestItemType as cst +import libs.testium as tm +import interpreter.utils.globdict as globdict +import interpreter.utils.settings as prefs +from interpreter.utils.paths import testium_path +from interpreter.utils.yaml_load import yaml_load +from interpreter.utils import clear_recursively +from interpreter.utils.include import TUMLoader, TUMLoaderNoIncludes, TUMLoaderRawIncludes +from interpreter.utils.tum_except import ETUMSyntaxError +from interpreter.utils.params import (expanse) +from interpreter.utils.version import ( + get_version, get_testium_version, get_modifications) +from interpreter.utils.eval import evaluate +from interpreter.utils.template import template_to_test + +from interpreter.test_items.test_item import TestItem +from interpreter.test_items.test_item_sleep import TestItemSleep +from interpreter.test_items.test_item_unittest import TestItemUnittestFile +from interpreter.test_items.test_item_cycle import TestItemCycle +from interpreter.test_items.test_item_runtime_plot import TestItemPlot +from interpreter.test_items.test_item_group import TestItemGroup +from interpreter.test_items.test_item_git import TestItemGit +from interpreter.test_items.test_item_func import TestItemFunc +from interpreter.test_items.test_item_let import TestItemLet +from interpreter.test_items.test_item_check import TestItemCheckValue +from interpreter.test_items.test_item_json_rpc import TestItemJSON_RPC +from interpreter.test_items.test_item_value_dialog import TestItemValueDialog +from interpreter.test_items.test_item_note_dialog import TestItemNoteDialog +from interpreter.test_items.test_item_image_dialog import TestItemImageDialog +from interpreter.test_items.test_item_msg_dialog import TestItemMsgDialog +from interpreter.test_items.test_item_question_dialog import TestItemQuestionDialog +from interpreter.test_items.test_item_tested_references import TestItemTestedRefsDialog +from interpreter.test_items.test_item_choices_dialog import TestItemChoicesDialog +from interpreter.test_items.test_item_console import TestItemConsole +from interpreter.test_items.test_item_run import TestItemRun +from interpreter.test_items.test_item_report import TestItemReport + + +def _constants_init(): + cst.TYPE_CONSOLE.item_class = TestItemConsole + cst.TYPE_CYCLE.item_class = TestItemCycle + cst.TYPE_FUNCTION.item_class = TestItemFunc + cst.TYPE_GIT.item_class = TestItemGit + cst.TYPE_GRAPH.item_class = TestItemPlot + cst.TYPE_GROUP.item_class = TestItemGroup + cst.TYPE_IMAGE_DLG.item_class = TestItemImageDialog + cst.TYPE_JSON_RPC.item_class = TestItemJSON_RPC + cst.TYPE_LET.item_class = TestItemLet + cst.TYPE_CHECK.item_class = TestItemCheckValue + cst.TYPE_MESSAGE_DLG.item_class = TestItemMsgDialog + cst.TYPE_NOTE_DLG.item_class = TestItemNoteDialog + cst.TYPE_QUESTION_DLG.item_class = TestItemQuestionDialog + cst.TYPE_REFERENCE_DLG.item_class = TestItemTestedRefsDialog + cst.TYPE_CHOICES_DLG.item_class = TestItemChoicesDialog + cst.TYPE_REPORT.item_class = TestItemReport + cst.TYPE_ROOT.item_class = TestItem + cst.TYPE_RUN.item_class = TestItemRun + cst.TYPE_SLEEP.item_class = TestItemSleep + cst.TYPE_UNITTEST_FILE.item_class = TestItemUnittestFile + cst.TYPE_VALUE_DLG.item_class = TestItemValueDialog + + +def _locate_config_files(test_dir, config_files, silent=False): + ret = [] + pf = [] + if len(config_files) == 0: + for p in ['param.xml', 'param.yaml', 'param.json']: + param_filename = os.path.join(test_dir, p) + if os.path.exists(param_filename): + pf.append(param_filename) + if not silent: + tm.print_info(f"Configuration file loaded: {p}.") + else: + if not silent: + tm.print_info(f"Default param file \"{p}\" does not exist.") + else: + pf = config_files + + for p in pf: + ret.append(p) + return ret + + +def locate_report_file(rep_file): + # report file name treatment + if rep_file != '': + if not os.path.isabs(rep_file): + rep_file = os.path.join( + os.getcwd(), rep_file) + rep_file = os.path.normpath(rep_file) + if not os.path.exists(os.path.dirname(rep_file)): + os.makedirs(os.path.dirname(rep_file)) + + return rep_file + + +def _config_files_from_test(test_dict, config_files=None): + test_dir = tm.gd('test_directory') + pf = [] + if isinstance(config_files, list) and len(config_files) == 0: + param_filename = test_dict.get('config_file', None) + if param_filename is None: + param_node = test_dict.get('param_file', None) + if param_node is not None: + if isinstance(param_node, dict): + p = param_node.get('file_name', None) + if p is not None: + param_filename = p + else: + param_filename = param_node + else: + param_filename = param_node + if param_filename is None: + pf = _locate_config_files(test_dir, []) + elif isinstance(param_filename, str): + pf.append(param_filename) + elif isinstance(param_filename, (list)): + pf = [] + for p in param_filename: + if isinstance(p, list): + for pp in p: + pf.append(pp) + elif p is not None: + pf.append(p) + else: + raise ETUMSyntaxError( + 'Unrecognized tum "param_file" : {}'.format(param_filename)) + elif isinstance(config_files, list): + pf = config_files + elif isinstance(config_files, str): + pf = [config_files] + else: + raise ETUMSyntaxError( + 'Unrecognized config_files parameter : {}'.format(config_files)) + return pf + + +def _load_test_dict(test_file, variables: dict, no_include: bool = False, raw_include: bool = False): + loader = TUMLoader + loader = TUMLoaderRawIncludes if raw_include else loader + loader = TUMLoaderNoIncludes if no_include else loader + + # Jinja template processing + tmpf = template_to_test(test_file, variables) + try: + d = yaml_load(tmpf, test_file, loader) + finally: + tmpf.close() + + return d + + +def load_test(test_file, test_dir, cmdline_pfs, cmdline_defs): + # First step: populate config files without includes considered + test_dict = _load_test_dict(test_file, {}, no_include=True) + _check_test_dict(test_dict) + prepare_global() + + # Define the global builtin variables + set_standard_gd_keys(test_dict["main"].get( + "name", "Unnamed"), test_dir, test_file, cmdline_pfs) + + # Include the content of the first config files into glob dict + old_pfs = _config_files_from_test(test_dict, cmdline_pfs) + + # Variables updated + gd = update_global(old_pfs, cmdline_defs, silent=True) + + while True: + # Loop to check param files until all param files are identified + test_dict = _load_test_dict(test_file, gd, raw_include=True) + new_pfs = _config_files_from_test(test_dict, cmdline_pfs) + + # Check if things have changed since previous evaluation of + # config files + new_stuff = False + if len(old_pfs) != len(new_pfs): + new_stuff = True + + if not new_stuff: + for i in range(len(old_pfs)): + if old_pfs[i] != new_pfs[i]: + new_stuff = True + break + + # If the param files are identical, we continue in loading process + if not new_stuff: + break + + # Variables updated + gd = update_global(new_pfs, cmdline_defs, silent=False) + old_pfs = copy.copy(new_pfs) + + # Processing (with includes) for complete file loading + test_dict = _load_test_dict(test_file, gd) + return test_dict, new_pfs + + +def xmltodict(xml_param_file, silent=True): + """ return a dictionnarie of parameter from xml file. + """ + tag = 'parameter' + returned_dict = {} + returned_str_dict = {} + xml_tree = ET.parse(xml_param_file) + xml_root = xml_tree.getroot() + xml_params = xml_root.findall(tag) + + for param in xml_params: + name = param.get('name', '') + if name != '': + v = param.get('value', None) + if v is None: + v = param.get('str', '') + v = v.replace("\\n", "\n") + v = v.replace("\\r", "\r") + v = v.replace("\\t", "\t") + returned_str_dict[name] = v + else: + v = v.replace("\\n", "\n") + v = v.replace("\\r", "\r") + v = v.replace("\\t", "\t") + returned_dict[name] = v + + # reinitializes the global dict values with the xml file content + globdict.global_dict.update(returned_str_dict) + globdict.global_dict.update(returned_dict) + + for i in range(10): + for key, val in returned_dict.items(): + val = expanse(val) + returned_dict.update({key: val}) + + globdict.global_dict.update(returned_dict) + + if not silent: + if not tm.debug_enabled(): + tm.print_info(f"\"{xml_param_file}\" loaded.") + else: + tm.print_debug(f"\"{xml_param_file}\" loading:") + for k, v in returned_str_dict.items(): + tm.print_debug(f" {k}: {v}") + for k, v in returned_dict.items(): + tm.print_debug(f" {k}: {v}") + tm.print_debug(f"done.") + + +def yamltodict(param_file, silent=True): + # load of the file + with open(param_file, 'r') as fd: + dp = yaml_load(fd, param_file, yaml.Loader) + + if dp is None: + tm.print_info(f"The YAML file '{param_file}' is empty.") + return + + # update the global dict with raw data + globdict.global_dict.update(dp) + + # Apply variables expansion + for i in range(10): + for key, val in dp.items(): + val = expanse(val) + dp.update({key: val}) + + if not silent: + if not tm.debug_enabled(): + tm.print_info(f"\"{param_file}\" loaded.") + else: + tm.print_debug(f"\"{param_file}\" loading:") + for k, v in dp.items(): + tm.print_debug(f" {k}: {v}") + tm.print_debug(f"done.") + + # Finalize the global dict update + globdict.global_dict.update(dp) + + +def jsontodict(param_file, silent=True): + with open(param_file, 'r') as fd: + s = fd.read() + dp = json.loads(s) + + # update the global dict with raw data + globdict.global_dict.update(dp) + + # Apply variables expansion + for i in range(10): + for key, val in dp.items(): + val = expanse(val) + dp.update({key: val}) + + if not silent: + if not tm.debug_enabled(): + tm.print_info(f"\"{param_file}\" loaded.") + else: + tm.print_debug(f"\"{param_file}\" loading:") + for k, v in dp.items(): + tm.print_debug(f" {k}: {v}") + tm.print_debug(f"done.") + + # Finalize the global dict update + globdict.global_dict.update(dp) + + +def _feed_gd_with_params(param_file, silent=True): + test_dir = tm.gd('test_directory') + # param files pre-processing + files = [] + for p in param_file: + if isinstance(p, str): + files.append(p) + elif isinstance(p, list): + for pp in p: + files.append(pp) + for p in files: + if p is None: + continue + if not isinstance(p, str): + raise ETUMSyntaxError(f'Parameter file "{p}" not a file path.') + p = expanse(p) + pf = p + if not os.path.isabs(pf): + pf = os.path.normpath(os.path.join(test_dir, pf)) + if not os.path.isfile(pf): + raise ETUMSyntaxError(f'Parameter file "{pf}" not found') + + ext = os.path.splitext(pf)[1] + if ext == '.xml': + xmltodict(pf, silent) + elif ext == '.json': + jsontodict(pf, silent) + elif ext == '.yaml': + yamltodict(pf, silent) + else: + raise ETUMSyntaxError( + 'config files must be "*.xml", "*.yaml" or "*.json"') + + +def set_standard_gd_keys(test_name, test_dir, test_file, config_files): + tm.setgd('testium_version', get_testium_version()) + tm.setgd('testium_path', testium_path()) + tm.setgd('test_name', test_name) + tm.setgd('test_directory', test_dir) + tm.setgd('test_main_file', test_file) + tm.setgd('config_files', config_files) + tm.setgd('host_name', gethostname()) + tm.setgd('home', str(Path.home())) + tm.setgd('os', tm.OS()) + + +def env_init(): + if not hasattr(prefs, "settings"): + prefs.init() + _constants_init() + + +def _check_test_dict(test_dict): + if not isinstance(test_dict, dict): + raise ETUMSyntaxError( + "The tum file has a major problem. Please check the documentation for syntax.") + if not 'main' in test_dict.keys(): + raise ETUMSyntaxError( + "The tum file has a major problem. The 'main' section could not be found.") + + +def update_global(config_files, defines, silent=False): + '''Global dict updated with the content of the config file and a dict provided. + this function returns the resulting dict. + ''' + # command line defines are applied first + for k, v in defines.items(): + try: + val = ast.literal_eval(v) + except: + val = v + tm.setgd(k, val) + + # Then the configuration files + # load global dic before test item + _feed_gd_with_params(config_files, silent) + + # Re-apply command line defines to ensure it has not been + # overloaded by the configuration files + for k, v in defines.items(): + try: + val = ast.literal_eval(v) + except: + val = v + + conf_val = tm.gd(k) + if val != conf_val: + if not silent: + tm.print_info(f"Variable $({k}) overloaded by command line arg --> \"{val}\".") + tm.setgd(k, val) + + return globdict.global_dict + + +def prepare_global(): + # Global dict setup + globdict.cleargd() + + +def backup_gd(): + return copy.deepcopy(globdict.global_dict) + + +def restore_gd(dict): + clear_recursively(globdict.global_dict) + globdict.global_dict.update(dict) + + +def test_run_init(): + tm.init_timestamp() + + test_dir = tm.gd('test_directory') + tm.setgd('test_version', get_version(test_dir)) + tm.setgd('test_modifs', get_modifications(test_dir)) + + start_test_date = datetime.datetime.now() + tm.setgd('start_test_date', start_test_date) + tm.setgd('testrun_date', start_test_date.strftime("%Y-%m-%d")) + tm.setgd('testrun_time', start_test_date.strftime("%H:%M:%S")) + + +def test_run_header(): + tool_version = tm.gd('testium_version') + test_file = tm.gd('test_main_file', '') + has_test_file = (tm.gd('test_main_file') != '') + + s = '' + s += (80*'=') + '\n' + s += '====== Test overview' + '\n' + s += (80*'=') + '\n' + if has_test_file: + s += ('Executed test file : ' + test_file) + '\n' + for cf in tm.gd('config_files'): + s += ('With param file : {}'.format(cf)) + '\n' + s += ('Test started : ' + tm.gd('testrun_date') + ' ' + + tm.gd('testrun_time')) + '\n' + + s += (80*'=') + '\n' + s += ('====== Test configuration') + '\n' + s += (80*'=') + '\n' + s += ('Test executed with testium : ' + + tool_version.splitlines()[0]) + '\n' + for l in tool_version.splitlines()[1:]: + s += (32*' ' + ': ' + l) + '\n' + s += (' \n') + if has_test_file: + test_version = tm.gd('test_version') + test_modifs = tm.gd('test_modifs') + s += ('Test scripts revision : ' + + test_version.splitlines()[0]) + '\n' + + for l in test_version.splitlines()[1:]: + s += (32*' ' + ': ' + l) + '\n' + for l in test_modifs.splitlines(): + s += (' '+l) + '\n' + return s diff --git a/src/testium/interpreter/utils/tum_except.py b/src/testium/interpreter/utils/tum_except.py new file mode 100644 index 0000000..ef875bf --- /dev/null +++ b/src/testium/interpreter/utils/tum_except.py @@ -0,0 +1,76 @@ +import traceback +import textwrap + + +class ETUMError(Exception): + def __init__(self, message: str, file: str): + self._message = message + self._file = file + + def str_lines(self): + return [self._message, self._file] + + def __str__(self): + return "\n".join(self.str_lines()) + + +class ETUMRuntimeError(ETUMError): + def __init__(self, message: str, file: str = ""): + super().__init__(message, file) + + def str_lines(self): + lines = ["TUM runtime error:"] + if self._file != "": + lines += [f"In \"{self._file}\""] + lines += [f"{self._message}"] + return lines + + +class ETUMFileError(ETUMError): + def __init__(self, message, file: str = ""): + super().__init__(message, file) + + def str_lines(self): + lines = ["TUM I/O error:"] + if self._file != "": + lines += [f"In \"{self._file}\""] + lines += [f"{self._message}"] + return lines + + +class ETUMSyntaxError(ETUMError): + def __init__(self, message: str, file: str = ""): + super().__init__(message, file) + + def str_lines(self): + lines = ["TUM file syntax error:"] + if self._file != "": + lines += [f" In File \"{self._file}\""] + lines += textwrap.indent(f"{self._message}", " |").splitlines() + return lines + + +class ETUMParamError(ETUMError): + def __init__(self, message: str, param: str = "", item: str = "", item_name: str = "", file: str = ""): + super().__init__(message, file) + self._item_name=item_name + self._item = item + self._param = param + + def str_lines(self): + lines = ["TUM Item parameter missing:"] + if self._file != "": + lines += [f"In \"{self._file}\""] + lines += [f"Item of type {self._item} with name \"{self._item_name}\""] + lines += [f"Concerning parameter \"{self._param}\""] + lines += [f"{self._message}"] + return lines + + +def print_exception(exc: ETUMError): + if not isinstance(exc, ETUMError): + print(traceback.format_exc(4)) + + print("\n" + "*"*80) + print(exc) + print("*"*80) diff --git a/src/testium/interpreter/utils/version.py b/src/testium/interpreter/utils/version.py new file mode 100644 index 0000000..6d64fd0 --- /dev/null +++ b/src/testium/interpreter/utils/version.py @@ -0,0 +1,127 @@ +import os +import sys +from importlib import import_module + +import interpreter.utils.settings as prefs +import libs.testium as tm + +_cached_versions = {} + +def repo_rev(path): + ret = _cached_versions.get(path, None) + if ret: + return ret + git = import_module("git") + repo = git.Repo(path, search_parent_directories=True) + if repo.bare: + ret ="Warning Bare repo: {}, modifications cannot be tracked !".format(path) + else: + ret = getSubmoduleVersion(git, repo) + _cached_versions.update({path: ret}) + repo.close() + return ret + +def get_version(path :str)-> str: + if prefs.settings.git_supported: + try: + return repo_rev(path) + except: + return "Warning : {} not versioned".format(path) + else: + return "Warning git not supported in your settings, version of {} unknown".format(path) + +def get_testium_version(): + # case where we're executing from an Appimage + if 'APPIMAGE' in os.environ: + ver = 'unknown' + if 'SEQUENCER_REV' in os.environ: + ver = os.getenv('SEQUENCER_REV') + return (ver + " (binary release)") + + # case where we're executing from pyinstaller exe + if getattr(sys, 'frozen', False): + file_path = os.path.join(sys._MEIPASS, "VERSION") + with open(file_path, 'r') as file: + ver = file.read() + return (ver + " (binary release)") + + # Executed from sources + if prefs.settings.git_supported: + git = import_module("git") + path = tm.get_main_dir() + try: + return repo_rev(path) + except git.InvalidGitRepositoryError: + pkg_rec = import_module("pkg_resources") + try: + ret = pkg_rec.get_distribution("testium").version + _cached_versions.update({path: ret}) + return str(ret) + " (wheel release)" + except: + return "Warning : testium not versioned" + else: + return "Warning git not supported in your settings, version of testium is unknown." + +def get_modifications(path : str)-> str: + + if prefs.settings.git_supported: + git = import_module("git") + modifs = "" + try: + repo = git.Repo(path, search_parent_directories=True) + for item in repo.index.diff(None): + modifs = modifs + '"' + item.a_path + '"' + ' (modified)\n' + for item in repo.untracked_files: + modifs = modifs + '"' + item + '"' + ' (untracked)\n' + repo.close() + return modifs + except git.InvalidGitRepositoryError: + return "Warning : {} not versioned".format(path) + else: + return "Warning git not supported in your settings, version of {} unknown".format(path) + +def getSubmoduleVersion(git, repo) -> str: + v = "" + for subM in repo.iter_submodules(ignore_self=False): + try: + v = v + getCommitVsTag(subM.module()) + "\n" + except git.InvalidGitRepositoryError: + v = v +"{} not versioned".format(subM.module().git_dir) + "\n" + return v + +def getCommitVsTag(repo) -> str: + sha = repo.head.object.hexsha + short_sha = repo.git.rev_parse(sha, short=12) + url = change = '' + + # check if a tag or no + t = None + for tag in repo.tags: + # Try excepted added after crash encountered because of strange tag + try: + if tag.commit == repo.head.commit: + t = tag + except: + pass + + if repo.is_dirty(): + change = '(M)' + try: + url = "".join(repo.remote().urls) + except: + pass + if t: + ret = "tag {}".format(t.name) + else: + branch = "" + if not repo.head.is_detached: + branch = repo.active_branch.name + else: + for h in repo.heads: + if h.commit == repo.head.commit: + branch = "detached from " + h.name + ret = "{}{}, commit {}".format(branch, change, short_sha) + if url: + ret = ret + " from : " + url + repo.close() + return ret diff --git a/src/testium/interpreter/utils/yaml_load.py b/src/testium/interpreter/utils/yaml_load.py new file mode 100644 index 0000000..5c1619a --- /dev/null +++ b/src/testium/interpreter/utils/yaml_load.py @@ -0,0 +1,30 @@ +from yaml.parser import ParserError +from yaml import load, Loader +from yaml.scanner import ScannerError +from libs.testium import print_debug +from interpreter.utils.tum_except import ETUMSyntaxError +import io + + +def print_yaml(file: io.TextIOWrapper, file_name): + """ Prints YAML file if debug mode is activated. + """ + file.seek(0) + print_debug(f"Dump of \"{file_name}\":") + lines = file.read().splitlines() + lines = [f"{i+1:>3d}: " + lines[i] for i in range(len(lines))] + print_debug("\n".join(lines)) + + +def yaml_load(file, real_file_name: str, loader: Loader): + try: + return load(file, loader) + + except ParserError as e: + if isinstance(file, io.TextIOWrapper): + print_yaml(file, real_file_name) + raise ETUMSyntaxError(f"yaml file parsing error: " + str(e), real_file_name) + except ScannerError as e: + if isinstance(file, io.TextIOWrapper): + print_yaml(file, real_file_name) + raise ETUMSyntaxError("yaml file scanning error: " + str(e), real_file_name) diff --git a/src/testium/libs/__init__.py b/src/testium/libs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/libs/console.py b/src/testium/libs/console.py new file mode 100755 index 0000000..025184e --- /dev/null +++ b/src/testium/libs/console.py @@ -0,0 +1,629 @@ +from datetime import datetime +import sys +import os +import re +from queue import Queue, Empty +from time import sleep +import collections +import serial +import threading + +from telnetlib3 import Telnet, DO, WILL, WONT, TTYPE, IAC, SB, SE, theNULL + +TIMEOUT_NULL = 0.000001 + + +class BytesStore(object): + """ Class used to store the buffered consoles data: + - SerialConsole + - TermConsole + """ + + def __init__(self): + self.cond = threading.Condition() + self.items = b'' + + def put(self, item): + with self.cond: + self.items += item + self.cond.notify() # Wake 1 thread waiting on cond (if any) + + def get(self, block=False, timeout=None): + with self.cond: + # If blocking is true, always return at least 1 item + if block and len(self.items) == 0: + self.cond.wait(timeout) + if len(self.items) != 0: + c = bytes([self.items[0]]) + self.items = self.items[1:] + return c + else: + return None + + def getAll(self): + with self.cond: + items = self.items + self.items = b'' + return items + + def pushBack(self, data): + with self.cond: + self.items = data + self.items + + +class Console(object): + + def __init__(self, name, echoOn=False, write_delay=0): + self.stream = sys.stdout + self.name = name + self.echo_on = echoOn + self.write_delay = write_delay + self.string_buffer = '['+str(datetime.now()).split('.')[0].split(' ')[1]+' '+self.name+']' + self.port = None + self.isOpened = False + + def __del__(self): + """ This is a safeguard that tries to close the telnet connection, in case it was not done, + before the Console object is terminated by the garbage collector (GC). + """ + if self.isOpened: + print('Warning: {classname} is about to be deleted but the connection was not closed. \ +A {classname}.close() is missing somewhere in your code !'.format(classname=type(self).__name__)) + self.close() + + def __enter__(self): + """ Make Console a context manager and allow the use of the 'with ... as' statement + """ + self.open() + return self + + def __exit__(self, type, value, traceback): + """ Make Console a context manager and allow the use of the 'with ... as' statement + """ + self.close() + + def set_read_timeout(self, timeout): + pass + + def readchar(self, timeout): + pass + + def read_nowait(self, mute=False): + pass + + def flush(self): + self.read_nowait(mute=True) + + def is_opened(self): + return self.isOpened + + def _is_valid_character(self, data): + """ return True if data is a valid ascii char [0x20-0x7E] or '\n' or '\r' + """ + if data == '': + return False + + # new line and carriage return are fine + if data == '\n' or data == '\r': + return True + + # reject all other non-ascii charaters + code = ord(data) + if code == 0x09: # TAB + return True + if code <= 0x1f or code >= 0x7f: + return False + + return True + + def _compute_char(self, data): + c = data.decode('utf-8', errors='replace') + if not self._is_valid_character(c): + c = '' + return c + + def read_until(self, match, timeout=None, return_data=False, mute=False): + """ + read until the string 'match is found + If timeout is not set (None), this function runs indefinitely + If timeout is set to zero, this function returns immediately + If mute is set to True the characters read from the console will not be displayed + + If function fails (because of a timeout) it will return a 'status' integer set to -1 + otherwise it will return 0. + The returned data may be a list in the form of [status, data] with the "data" string + being the data read on the device when return_data has been set to true. + """ + read_data = '' + status = -1 + if not match: + raise ValueError('match parameter can not be empty') + # replace all '\r' by '\n' as any '\r' read will undergo the same replacement + # match = match.replace('\r\n', '\n') + # match = match.replace('\r', '') + + # update the console timeout in conformity with what is required. + + self.set_read_timeout(timeout) + + if timeout is None: + timeout = 1000000 + + # Fixed-length queue that will contain the readout characters + search_deque = collections.deque(maxlen=len(match)) + # convert match string into a deque for faster comparisons + match_deque = collections.deque(match) + + # In case of a timeout equal to zero, it must be looped until the + # buffer is empty + # Otherwise we are waiting for the timeout to rise + if timeout < TIMEOUT_NULL: + data = self.readchar(0) + + while (status < 0) and ((data is not None) and (data != b'')): + + data = self._compute_char(data) + + if data != '': + if not mute: + self.string_buffer += data + read_data += data + + search_deque.append(data) + if search_deque == match_deque: + status = 0 + if (not mute) and (data != '\n'): + self.string_buffer += '\n' + + if data == '\n' or (status >= 0): + # the datas are written line by line for display optimisation in GUI mode + if not mute: + self.string_buffer = self.string_buffer.replace('\r\n', '\n') + self.string_buffer = self.string_buffer.replace('\r', '') + self.stream.write(self.string_buffer) + + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.string_buffer = '[{} {}]'.format(date_str, self.name) + + if status < 0: + data = self.readchar(0) + + # Timeout different than zero + else: + + time_is_out = threading.Event() + timer = threading.Timer(timeout, lambda: time_is_out.set()) + timer.start() + + # We are waiting for the timeout to rise + + while (status < 0) and (not time_is_out.isSet()): + + data = self.readchar(timeout) + if data is not None: + data = self._compute_char(data) + if data != '': + if not mute: + self.string_buffer += data + read_data += data + + search_deque.append(data) + if search_deque == match_deque: + timer.cancel() + status = 0 + if (not mute) and (data != '\n'): + self.string_buffer += '\n' + + if data == '\n' or (status >= 0): + # the datas are written line by line for display optimisation in GUI mode + if not mute: + self.string_buffer = self.string_buffer.replace('\r\n', '\n') + self.string_buffer = self.string_buffer.replace('\r', '') + self.stream.write(self.string_buffer) + + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.string_buffer = '[{} {}]'.format(date_str, self.name) + + if return_data: + return status, read_data + return status + + def write(self, characters, mute=False): + if self.echo_on and not mute: + ech = '' if characters.strip(" ").endswith('\n') else '\n' + print(('[>' + self.name + '] : ' + characters), end=ech) + if self.write_delay != 0: + for char in characters: + self.port.write(char.encode('utf-8')) + sleep(self.write_delay) + return len(characters) + else: + return self.port.write(characters.encode('utf-8')) + + +if not sys.platform.startswith('win'): + # import SshConsole if pexpect is installed + try: + from libs.console_ssh import SshConsole + + except ImportError: + pass + + +class TelnetConsole(Console): + TYPE = 'telnet' + + def __init__(self, name, host, port=23, echoOn=False, write_delay=0, tries=1, try_delay=2): + + super().__init__(name, echoOn, write_delay) + self.port = None + self.host = host + self.port_id = port + self.tries = tries + self.try_delay = try_delay + + def open(self, user=None, pwd=None): + + mtries, mdelay = self.tries, self.try_delay + while mtries > 1: + try: + self.port = Telnet(self.host, self.port_id) + break + except (TimeoutError, ConnectionRefusedError) as exc: + msg = '{}, Retrying in {} seconds...'.format(str(exc), mdelay) + print(msg) + sleep(mdelay) + mtries -= 1 + mdelay *= 2 + else: + self.port = Telnet(self.host, self.port_id) + + self.isOpened = True + + if not user: + return + self.stream.write(self.port.read_until("login: ")) + self.port.write(user + "\n") + + self.stream.write(self.port.read_until("assword")) + self.stream.write(self.port.read_until(":")) + self.port.write(pwd + "\n") + + def readchar(self, timeout): + return self.port.expect([re.compile(b'.{1}', re.DOTALL), ], timeout)[2] + + def readline(self): + return self.read_until('\n', return_data=True)[1] + + def read_nowait(self, mute=False): + st = self.port.read_very_eager().decode('utf-8', errors='replace') + if not mute: + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.stream.write('[{} {}]'.format(date_str, self.name)+st) + return st + + def close(self): + if self.isOpened: + self.port.close() + self.isOpened = False + + def neg(self, sock, command, option): + negotiation_list = [ + ['BINARY', WONT, 'WONT'], + ['ECHO', WONT, 'WONT'], + ['RCP', WONT, 'WONT'], + ['SGA', WONT, 'WONT'], + ['NAMS', WONT, 'WONT'], + ['STATUS', WONT, 'WONT'], + ['TM', WONT, 'WONT'], + ['RCTE', WONT, 'WONT'], + ['NAOL', WONT, 'WONT'], + ['NAOP', WONT, 'WONT'], + ['NAOCRD', WONT, 'WONT'], + ['NAOHTS', WONT, 'WONT'], + ['NAOHTD', WONT, 'WONT'], + ['NAOFFD', WONT, 'WONT'], + ['NAOVTS', WONT, 'WONT'], + ['NAOVTD', WONT, 'WONT'], + ['NAOLFD', WONT, 'WONT'], + ['XASCII', WONT, 'WONT'], + ['LOGOUT', WONT, 'WONT'], + ['BM', WONT, 'WONT'], + ['DET', WONT, 'WONT'], + ['SUPDUP', WONT, 'WONT'], + ['SUPDUPOUTPUT', WONT, 'WONT'], + ['SNDLOC', WONT, 'WONT'], + ['TTYPE', WILL, 'WILL'], + ['EOR', WONT, 'WONT'], + ['TUID', WONT, 'WONT'], + ['OUTMRK', WONT, 'WONT'], + ['TTYLOC', WONT, 'WONT'], + ['VT3270REGIME', WONT, 'WONT'], + ['X3PAD', WONT, 'WONT'], + ['NAWS', WONT, 'WONT'], + ['TSPEED', WONT, 'WONT'], + ['LFLOW', WONT, 'WONT'], + ['LINEMODE', WONT, 'WONT'], + ['XDISPLOC', WONT, 'WONT'], + ['OLD_ENVIRON', WONT, 'WONT'], + ['AUTHENTICATION', WONT, 'WONT'], + ['ENCRYPT', WONT, 'WONT'], + ['NEW_ENVIRON', WONT, 'WONT'] + ] + if ord(option) < 40: + response = negotiation_list[ord(option)][1] + else: + response = WONT + if command == DO: + s = b''.join((IAC, response, option)) + sock.sendall(s) + elif command == SE: + s = ("%s%s%s%sDEC-VT100%s%s" % (IAC, SB, TTYPE, chr(0), IAC, SE)) + s = b''.join((IAC, SB, TTYPE, theNULL, b'DEC-VT100', IAC, SE)) + sock.sendall(s) + return + + +class ETSConsole(TelnetConsole): + TYPE = 'ETS' + + def open(self, port): + TelnetConsole.open(self) + self.port.set_option_negotiation_callback(self.neg) + self.read_until("Username>", 5) + self.write("rach_script\n") + self.read_until(">", 2) + self.write('c local port_'+str(port)+'\n') + + self.write("\r\n") + self.read_until(">", 5) + + +class SerialConsole(Console): + TYPE = 'serial' + + def __init__(self, name, port=None, baudrate=9600, parity="none", stopbits=1, xonxoff=False, + bufferize=False, echoOn=False, write_delay=0): + super().__init__(name, echoOn, write_delay) + self.baudrate = baudrate + self.bufferize = bufferize + self.xonxoff = False + if xonxoff: + self.xonxoff = True + self.parity = serial.PARITY_NONE + if parity.lower() == "even": + self.parity = serial.PARITY_EVEN + if parity.lower() == "odd": + self.parity = serial.PARITY_ODD + self.stopbits = serial.STOPBITS_ONE + if stopbits == 2: + self.stopbits = serial.STOPBITS_TWO + if bufferize: + self.rx_queue = BytesStore() + self.stop = threading.Event() + self.port = None + self.port_id = port + + def open(self): + self.port = serial.Serial(port=self.port_id, + baudrate=self.baudrate, + stopbits=self.stopbits, + parity=self.parity, + xonxoff=self.xonxoff, + timeout=None) + self.isOpened = True + if self.bufferize: + self.port.timeout = 2 + self._thd = threading.Thread(target=self.read_thread) + self._thd.start() + + def read_thread(self): + while not self.stop.is_set(): + c = self.port.read(1) + if c: + self.rx_queue.put(c) + + def close(self): + if self.bufferize: + self.stop.set() + self._thd.join() + if self.port is not None: + self.port.close() + self.isOpened = False + + def set_read_timeout(self, timeout): + if not self.bufferize: + self.port.timeout = timeout + + def readchar(self, timeout): + if self.bufferize: + if not self._thd.is_alive() and not self.stop.isSet(): + raise RuntimeError( + "Impossible to read the serial console, it may be already openned") + if timeout < TIMEOUT_NULL: + return self.rx_queue.get(block=False) + else: + return self.rx_queue.get(block=True, timeout=timeout) + + return self.port.read(1) + + def flush(self): + self.port.flush() + + def read_nowait(self, mute=False): + if self.bufferize: + if not self._thd.is_alive() and not self.stop.isSet(): + raise RuntimeError( + "Impossible to read the serial console, it may be already openned") + st = self.rx_queue.getAll().decode('utf-8', errors='replace') + if not mute: + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.stream.write('[{} {}]'.format(date_str, self.name)+st) + return st + + st = self.port.read(self.port.inWaiting()).decode('utf-8', errors='replace') + if not mute: + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.stream.write('[{} {}]'.format(date_str, self.name)+st) + return st + + +class TelnetSerialConsole(TelnetConsole): + TYPE = 'telnet&serial' + + def __init__(self, name, host, port=23, serial_port=None, baudrate=9600, echoOn=False, write_delay=0): + Console.__init__(self, name, echoOn, write_delay) + self.port = None + self.host = host + self.port_id = port + self.serial_port = serial_port + self.baudrate = baudrate + + def open(self, user=None, pwd=None): + self.port = Telnet(self.host, self.port_id) + self.isOpened = True + if not user: + return + self.stream.write(self.port.read_until("login: ")) + self.port.write(user + "\n") + self.stream.write(self.port.read_until("assword")) + self.stream.write(self.port.read_until(":")) + self.port.write(pwd + "\n") + # then connect to the serial port using miniterm console + self.stream.write(self.port.read_until("~]$")) + self.stream.write("miniterm.py -p " + str(self.serial_port) + + " -b " + str(self.baudrate) + " --parity=N --lf\n") + if (self.read_until("--- Miniterm on", 5) == -1): + return + + +class LoggedConsole(Console): + def __init__(self, name, overwriteFile=True, echoOn=False, logPath='', write_delay=0): + super().__init__(name, echoOn, write_delay) + self.rx_queue = Queue() + self.stop = threading.Event() + if logPath.endswith('.log'): + if os.path.exists(os.path.dirname(logPath)): + self.logfile_name = logPath + else: + os.makedirs(os.path.join(os.getcwd(), os.path.dirname(logPath)), exist_ok=True) + self.logfile_name = os.path.join(os.getcwd(), logPath) + else: + if not os.path.isabs(logPath): + logPath = os.path.join(os.getcwd(), logPath) + os.makedirs(logPath, exist_ok=True) + self.logfile_name = '{}/{}.log'.format(logPath, self.name) + self.overwriteFile = overwriteFile + if self.overwriteFile: + open_mode = "w" + else: + open_mode = "a" + # open with flush every new line + self.log_fd = open(self.logfile_name, open_mode, buffering=1) + + def open(self): + self.isOpened = True + if self.log_fd is None: + self.log_fd = open(self.logfile_name, "a", buffering=1) + self._thd = threading.Thread(target=self.read_thread) + self._thd.start() + + def _readPort(self): + pass + + def read_thread(self): + line_buffer = None + while not self.stop.is_set(): + data = self._readPort() + + if data: + self.rx_queue.put(data) + else: + continue + data = data.decode('utf-8', errors='replace') + # if valid char, write into the file + if self._is_valid_character(data): + # replace '\r' by '\n' and '\r\n' by '\n' + if data == '\r': + data = '' + continue + # date at reception of first new char of the line + if line_buffer is None: + line_buffer = '['+str(datetime.now()).split('.')[0].split(' ')[1]+']' + line_buffer += data + if data == '\n': + # the datas are written line by line + self.log_fd.write(line_buffer) + line_buffer = None + # if exit, flush data first + if line_buffer is not None: + self.log_fd.write(line_buffer) + print('closing console "%s" log file' % (self.name)) + self.log_fd.close() + self.log_fd = None + + def close(self): + self.stop.set() + self._thd.join() + if self.port is not None: + print('closing console "%s"' % (self.name)) + self.port.close() + self.isOpened = False + + def readchar(self, timeout=None): + if self.log_fd is None: + raise ConnectionAbortedError + try: + return self.rx_queue.get(timeout=timeout) + except Empty: + return None + + def read_nowait(self, mute=False): + if self.log_fd is None: + raise ConnectionAbortedError + chars = '' + for _ in range(self.rx_queue.qsize()): + chars = chars + self.rx_queue.get().decode('utf-8', errors='replace') + + if not mute: + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.stream.write('[{} {}]'.format(date_str, self.name)+chars) + return chars + + +class SerialLoggedConsole(LoggedConsole): + TYPE = 'serial' + + def __init__(self, name, port=None, baudrate=9600, overwriteFile=True, echoOn=False, logPath='', write_delay=0): + super().__init__(name, overwriteFile, echoOn, logPath, write_delay) + self.baudrate = baudrate + self.port = None + self.port_id = port + + def _readPort(self): + return self.port.read(1) + + def open(self): + self.port = serial.Serial(port=self.port_id, baudrate=self.baudrate, timeout=None) + super().open() + + +class TelnetLoggedConsole(LoggedConsole): + TYPE = 'telnet' + + def __init__(self, name, host, port=23, overwriteFile=True, echoOn=False, logPath='', write_delay=0): + super().__init__(name, overwriteFile, echoOn, logPath, write_delay) + self.port = None + self.host = host + self.port_id = port + + def open(self): + self.port = Telnet(self.host, self.port_id) + super().open() + + def _readPort(self, timeout=0.2): + try: + c = self.port.expect([re.compile(b'.{1}', re.DOTALL), ], timeout)[2] + except (ConnectionAbortedError, ConnectionResetError): + return None + return c diff --git a/src/testium/libs/console_ssh.py b/src/testium/libs/console_ssh.py new file mode 100755 index 0000000..d35efe1 --- /dev/null +++ b/src/testium/libs/console_ssh.py @@ -0,0 +1,569 @@ +"""A concrete implementation of Console based on SSH access. +This requires the pexpect library to be installed. +""" + +from datetime import datetime +import time +import os +import pexpect +from pexpect import ExceptionPexpect, TIMEOUT, EOF, spawn + +from libs.console import Console + +# Exception classes used by this module. + + +class ExceptionPxssh(ExceptionPexpect): + """Raised for pxssh exceptions.""" + + +# pxssh is a modified version of the pxssh class from the pexpect library. That custom version +# returns an exception when a timeout occurs during the login phase +class pxssh(spawn): + """This class extends pexpect.spawn to specialize setting up SSH + connections. This adds methods for login, logout, and expecting the shell + prompt. It does various tricky things to handle many situations in the SSH + login process. For example, if the session is your first login, then pxssh + automatically accepts the remote certificate; or if you have public key + authentication setup then pxssh won't wait for the password prompt. + + pxssh uses the shell prompt to synchronize output from the remote host. In + order to make this more robust it sets the shell prompt to something more + unique than just $ or #. This should work on most Borne/Bash or Csh style + shells. + + Example that runs a few commands on a remote server and prints the result:: + + from pexpect import pxssh + import getpass + try: + s = pxssh.pxssh() + hostname = raw_input('hostname: ') + username = raw_input('username: ') + password = getpass.getpass('password: ') + s.login(hostname, username, password) + s.sendline('uptime') # run a command + s.prompt() # match the prompt + print(s.before) # print everything before the prompt. + s.sendline('ls -l') + s.prompt() + print(s.before) + s.sendline('df') + s.prompt() + print(s.before) + s.logout() + except pxssh.ExceptionPxssh as e: + print("pxssh failed on login.") + print(e) + + Example showing how to specify SSH options:: + + from pexpect import pxssh + s = pxssh.pxssh(options={ + "StrictHostKeyChecking": "no", + "UserKnownHostsFile": "/dev/null"}) + ... + + Note that if you have ssh-agent running while doing development with pxssh + then this can lead to a lot of confusion. Many X display managers (xdm, + gdm, kdm, etc.) will automatically start a GUI agent. You may see a GUI + dialog box popup asking for a password during development. You should turn + off any key agents during testing. The 'force_password' attribute will turn + off public key authentication. This will only work if the remote SSH server + is configured to allow password logins. Example of using 'force_password' + attribute:: + + s = pxssh.pxssh() + s.force_password = True + hostname = raw_input('hostname: ') + username = raw_input('username: ') + password = getpass.getpass('password: ') + s.login (hostname, username, password) + """ + + def __init__( + self, + timeout=30, + maxread=2000, + searchwindowsize=None, + logfile=None, + cwd=None, + env=None, + ignore_sighup=True, + echo=True, + options={}, + encoding=None, + codec_errors="strict", + dimensions=(24, 1000), + ): + + spawn.__init__( + self, + None, + timeout=timeout, + maxread=maxread, + searchwindowsize=searchwindowsize, + logfile=logfile, + cwd=cwd, + env=env, + ignore_sighup=ignore_sighup, + echo=echo, + encoding=encoding, + codec_errors=codec_errors, + dimensions=dimensions, + ) + + self.name = "" + + # SUBTLE HACK ALERT! Note that the command that SETS the prompt uses a + # slightly different string than the regular expression to match it. This + # is because when you set the prompt the command will echo back, but we + # don't want to match the echoed command. So if we make the set command + # slightly different than the regex we eliminate the problem. To make the + # set command different we add a backslash in front of $. The $ doesn't + # need to be escaped, but it doesn't hurt and serves to make the set + # prompt command different than the regex. + + # used to match the command-line prompt + self.UNIQUE_PROMPT = "\[PEXPECT\][\$\#] " + self.PROMPT = self.UNIQUE_PROMPT + + # used to set shell command-line prompt to UNIQUE_PROMPT. + self.PROMPT_SET_SH = "PS1='[PEXPECT]\$ '" + self.PROMPT_SET_CSH = "set prompt='[PEXPECT]\$ '" + self.SSH_OPTS = "-o'RSAAuthentication=no'" + " -o 'PubkeyAuthentication=no'" + # Disabling host key checking, makes you vulnerable to MITM attacks. + # + " -o 'StrictHostKeyChecking=no'" + # + " -o 'UserKnownHostsFile /dev/null' ") + # Disabling X11 forwarding gets rid of the annoying SSH_ASKPASS from + # displaying a GUI password dialog. I have not figured out how to + # disable only SSH_ASKPASS without also disabling X11 forwarding. + # Unsetting SSH_ASKPASS on the remote side doesn't disable it! Annoying! + # self.SSH_OPTS = "-x -o'RSAAuthentication=no' -o 'PubkeyAuthentication=no'" + self.force_password = False + + # User defined SSH options, eg, + # ssh.otions = dict(StrictHostKeyChecking="no",UserKnownHostsFile="/dev/null") + self.options = options + + self.dimensions = dimensions + + def levenshtein_distance(self, a, b): + """This calculates the Levenshtein distance between a and b.""" + + n, m = len(a), len(b) + if n > m: + a, b = b, a + n, m = m, n + current = range(n + 1) + for i in range(1, m + 1): + previous, current = current, [i] + [0] * n + for j in range(1, n + 1): + add, delete = previous[j] + 1, current[j - 1] + 1 + change = previous[j - 1] + if a[j - 1] != b[i - 1]: + change = change + 1 + current[j] = min(add, delete, change) + return current[n] + + def try_read_prompt(self, timeout_multiplier): + """This facilitates using communication timeouts to perform + synchronization as quickly as possible, while supporting high latency + connections with a tunable worst case performance. Fast connections + should be read almost immediately. Worst case performance for this + method is timeout_multiplier * 3 seconds. + """ + + # maximum time allowed to read the first response + first_char_timeout = timeout_multiplier * 0.5 + + # maximum time allowed between subsequent characters + inter_char_timeout = timeout_multiplier * 0.1 + + # maximum time for reading the entire prompt + total_timeout = timeout_multiplier * 3.0 + + prompt = self.string_type() + begin = time.time() + expired = 0.0 + timeout = first_char_timeout + + while expired < total_timeout: + try: + prompt += self.read_nonblocking(size=1, timeout=timeout) + expired = time.time() - begin # updated total time expired + timeout = inter_char_timeout + except TIMEOUT: + break + + return prompt + + def sync_original_prompt(self, sync_multiplier=1.0): + """This attempts to find the prompt. Basically, press enter and record + the response; press enter again and record the response; if the two + responses are similar then assume we are at the original prompt. + This can be a slow function. Worst case with the default sync_multiplier + can take 12 seconds. Low latency connections are more likely to fail + with a low sync_multiplier. Best case sync time gets worse with a + high sync multiplier (500 ms with default).""" + + # All of these timing pace values are magic. + # I came up with these based on what seemed reliable for + # connecting to a heavily loaded machine I have. + self.sendline() + time.sleep(0.1) + + try: + # Clear the buffer before getting the prompt. + self.try_read_prompt(sync_multiplier) + except TIMEOUT: + pass + + self.sendline() + x = self.try_read_prompt(sync_multiplier) + + self.sendline() + a = self.try_read_prompt(sync_multiplier) + + self.sendline() + b = self.try_read_prompt(sync_multiplier) + + ld = self.levenshtein_distance(a, b) + len_a = len(a) + if len_a == 0: + return False + if float(ld) / len_a < 0.4: + return True + return False + + # TODO: This is getting messy and I'm pretty sure this isn't perfect. + # TODO: I need to draw a flow chart for this. + def login( + self, + server, + username, + password="", + terminal_type="ansi", + original_prompt=r"[#$]", + login_timeout=10, + port=None, + auto_prompt_reset=True, + ssh_key=None, + quiet=True, + sync_multiplier=1, + check_local_ip=True, + ): + """This logs the user into the given server. + + It uses + 'original_prompt' to try to find the prompt right after login. When it + finds the prompt it immediately tries to reset the prompt to something + more easily matched. The default 'original_prompt' is very optimistic + and is easily fooled. It's more reliable to try to match the original + prompt as exactly as possible to prevent false matches by server + strings such as the "Message Of The Day". On many systems you can + disable the MOTD on the remote server by creating a zero-length file + called :file:`~/.hushlogin` on the remote server. If a prompt cannot be found + then this will not necessarily cause the login to fail. In the case of + a timeout when looking for the prompt we assume that the original + prompt was so weird that we could not match it, so we use a few tricks + to guess when we have reached the prompt. Then we hope for the best and + blindly try to reset the prompt to something more unique. If that fails + then login() raises an :class:`ExceptionPxssh` exception. + + In some situations it is not possible or desirable to reset the + original prompt. In this case, pass ``auto_prompt_reset=False`` to + inhibit setting the prompt to the UNIQUE_PROMPT. Remember that pxssh + uses a unique prompt in the :meth:`prompt` method. If the original prompt is + not reset then this will disable the :meth:`prompt` method unless you + manually set the :attr:`PROMPT` attribute. + """ + + ssh_options = "".join( + [" -o '%s=%s'" % (o, v) for (o, v) in self.options.items()] + ) + if quiet: + ssh_options = ssh_options + " -q" + if not check_local_ip: + ssh_options = ssh_options + " -o'NoHostAuthenticationForLocalhost=yes'" + if self.force_password: + ssh_options = ssh_options + " " + self.SSH_OPTS + if port is not None: + ssh_options = ssh_options + " -p %s" % (str(port)) + if ssh_key is not None: + try: + os.path.isfile(ssh_key) + except: + raise ExceptionPxssh("private ssh key does not exist") + ssh_options = ssh_options + " -i %s" % (ssh_key) + cmd = "ssh %s -l %s %s" % (ssh_options, username, server) + + # This does not distinguish between a remote server 'password' prompt + # and a local ssh 'passphrase' prompt (for unlocking a private key). + spawn._spawn(self, cmd, dimensions=self.dimensions) + i = self.expect( + [ + "(?i)are you sure you want to continue connecting", + original_prompt, + "(?i)(?:password)|(?:passphrase for key)", + "(?i)permission denied", + "(?i)terminal type", + TIMEOUT, + "(?i)connection closed by remote host", + EOF, + ], + timeout=login_timeout, + ) + + # First phase + if i == 0: + # New certificate -- always accept it. + # This is what you get if SSH does not have the remote host's + # public key stored in the 'known_hosts' cache. + self.sendline("yes") + i = self.expect( + [ + "(?i)are you sure you want to continue connecting", + original_prompt, + "(?i)(?:password)|(?:passphrase for key)", + "(?i)permission denied", + "(?i)terminal type", + TIMEOUT, + ] + ) + if i == 2: # password or passphrase + self.sendline(password) + i = self.expect( + [ + "(?i)are you sure you want to continue connecting", + original_prompt, + "(?i)(?:password)|(?:passphrase for key)", + "(?i)permission denied", + "(?i)terminal type", + TIMEOUT, + ] + ) + if i == 4: + self.sendline(terminal_type) + i = self.expect( + [ + "(?i)are you sure you want to continue connecting", + original_prompt, + "(?i)(?:password)|(?:passphrase for key)", + "(?i)permission denied", + "(?i)terminal type", + TIMEOUT, + ] + ) + if i == 7: + self.close() + raise ExceptionPxssh("Could not establish connection to host") + + # Second phase + if i == 0: + # This is weird. This should not happen twice in a row. + self.close() + raise ExceptionPxssh('Weird error. Got "are you sure" prompt twice.') + elif i == 1: # can occur if you have a public key pair set to authenticate. + # TODO: May NOT be OK if expect() got tricked and matched a false prompt. + pass + elif i == 2: # password prompt again + # For incorrect passwords, some ssh servers will + # ask for the password again, others return 'denied' right away. + # If we get the password prompt again then this means + # we didn't get the password right the first time. + self.close() + raise ExceptionPxssh("password refused") + elif i == 3: # permission denied -- password was bad. + self.close() + raise ExceptionPxssh("permission denied") + elif i == 4: # terminal type again? WTF? + self.close() + raise ExceptionPxssh('Weird error. Got "terminal type" prompt twice.') + elif i == 5: # Timeout + # This is tricky... I presume that we are at the command-line prompt. + # It may be that the shell prompt was so weird that we couldn't match + # it. Or it may be that we couldn't log in for some other reason. I + # can't be sure, but it's safe to guess that we did login because if + # I presume wrong and we are not logged in then this should be caught + # later when I try to set the shell prompt. + raise ExceptionPxssh("connection timeout") + elif i == 6: # Connection closed by remote host + self.close() + raise ExceptionPxssh("connection closed") + else: # Unexpected + self.close() + raise ExceptionPxssh("unexpected login response") + if not self.sync_original_prompt(sync_multiplier): + self.close() + raise ExceptionPxssh("could not synchronize with original prompt") + # We appear to be in. + # set shell prompt to something unique. + if auto_prompt_reset: + if not self.set_unique_prompt(): + self.close() + raise ExceptionPxssh( + "could not set shell prompt " + "(received: %r, expected: %r)." + % ( + self.before, + self.PROMPT, + ) + ) + return True + + def logout(self): + """Sends exit to the remote shell. + + If there are stopped jobs then this automatically sends exit twice. + """ + self.sendline("exit") + index = self.expect([EOF, "(?i)there are stopped jobs"]) + if index == 1: + self.sendline("exit") + self.expect(EOF) + self.close() + + def prompt(self, timeout=-1): + """Match the next shell prompt. + + This is little more than a short-cut to the :meth:`~pexpect.spawn.expect` + method. Note that if you called :meth:`login` with + ``auto_prompt_reset=False``, then before calling :meth:`prompt` you must + set the :attr:`PROMPT` attribute to a regex that it will use for + matching the prompt. + + Calling :meth:`prompt` will erase the contents of the :attr:`before` + attribute even if no prompt is ever matched. If timeout is not given or + it is set to -1 then self.timeout is used. + + :return: True if the shell prompt was matched, False if the timeout was + reached. + """ + + if timeout == -1: + timeout = self.timeout + i = self.expect([self.PROMPT, TIMEOUT], timeout=timeout) + if i == 1: + return False + return True + + def set_unique_prompt(self): + """This sets the remote prompt to something more unique than ``#`` or ``$``. + This makes it easier for the :meth:`prompt` method to match the shell prompt + unambiguously. This method is called automatically by the :meth:`login` + method, but you may want to call it manually if you somehow reset the + shell prompt. For example, if you 'su' to a different user then you + will need to manually reset the prompt. This sends shell commands to + the remote host to set the prompt, so this assumes the remote host is + ready to receive commands. + + Alternatively, you may use your own prompt pattern. In this case you + should call :meth:`login` with ``auto_prompt_reset=False``; then set the + :attr:`PROMPT` attribute to a regular expression. After that, the + :meth:`prompt` method will try to match your prompt pattern. + """ + + self.sendline("unset PROMPT_COMMAND") + self.sendline(self.PROMPT_SET_SH) # sh-style + i = self.expect([TIMEOUT, self.PROMPT], timeout=10) + if i == 0: # csh-style + self.sendline(self.PROMPT_SET_CSH) + i = self.expect([TIMEOUT, self.PROMPT], timeout=10) + if i == 0: + return False + return True + + +class SshConsole(Console): + """Concrete implementation of Console based on SSH.""" + + TYPE = "ssh" + + class LoginException(Exception): + """Raised when failed to login""" + + pass + + def __init__( + self, + name, + host, + user="root", + password="", + options={"StrictHostKeyChecking": "no"}, + port=None, + sync_multiplier=2.0, + echoOn=False, + mirror=False, + ): + super().__init__(name, echoOn=echoOn) + self.name = name + self.host = host + self.user = user + self.echo_on = echoOn + self.mirror = mirror + self.password = password + self.options = options + self.port = port + self.sync_multiplier = sync_multiplier + self.session = None + + def open(self, logfile=None, login_timeout=5): + """Start the SSH session""" + + # have to create a new pxssh for each login temptative + session = pxssh(logfile=logfile, options=self.options, echo=self.mirror) + try: + session.login( + server=self.host, + username=self.user, + password=self.password, + auto_prompt_reset=False, + login_timeout=login_timeout, + port=self.port, + sync_multiplier=self.sync_multiplier, + ) + except ExceptionPxssh as exc: + raise SshConsole.LoginException(exc) + + self.session = session + self.isOpened = True + + def close(self): + """Close the SSH session""" + if self.isOpened: + self.session.close() + self.session = None + self.isOpened = False + + def write(self, characters, mute=False): + """Write a set of characters into the SSH session""" + if self.echo_on and not mute: + ech = "" if characters.strip(' ').endswith("\n") else "\n" + print(("[>" + self.name + "] : " + characters), end=ech) + self.session.write(characters) + + def readchar(self, timeout): + """Read a single character from the SSH session""" + try: + return self.session.read_nonblocking(size=1, timeout=timeout) + except pexpect.exceptions.TIMEOUT: + return None + + def readline(self): + """Read until a \r\n is found.""" + return self.session.readline() + + def read_nowait(self, mute=False): + """Read a single character from the SSH session""" + try: + st = self.session.read_nonblocking(size=self.session.maxread, timeout=0) + except pexpect.TIMEOUT: + return "" + + s = st.decode("utf-8", errors="replace") + if not mute: + date_str = str(datetime.now()).split(".")[0].split(" ")[1] + self.stream.write("[{} {}]".format(date_str, self.name) + s) + return s diff --git a/src/testium/libs/raw_tcp_console.py b/src/testium/libs/raw_tcp_console.py new file mode 100644 index 0000000..42dfc16 --- /dev/null +++ b/src/testium/libs/raw_tcp_console.py @@ -0,0 +1,73 @@ +from datetime import datetime +import sys +import socket +import traceback + +from libs.console import * + +class RawTCPConsole(Console): + TYPE = 'rawtcp' + + def __init__(self, name, address, port, echoOn=False, write_delay=0): + super().__init__(name, echoOn, write_delay) + self.sock = None + self.address = address + self.port = int(port) + self.stimeout = 0 + + def open(self): + #if trying to connect when already connected. + _socket = None + if self.sock is not None: + raise Exception('Already connected to the target') + else: + try: + _socket = socket.create_connection((self.address, self.port)) + self.sock = _socket + self.isOpened = True + self.sock.settimeout(self.stimeout) + except: + if _socket is not None: + _socket.close() + traceback.print_exception(*sys.exc_info()) + self.sock = None + + def close(self): + try: + if self.sock != None: + self.sock.close() + self.sock = None + self.isOpened = False + except: + pass + + def set_read_timeout(self, timeout): + if self.stimeout != timeout: + self.sock.settimeout(timeout) + self.stimeout = timeout + + def readchar(self, timeout): + c = ''.encode() + try: + c = self.sock.recv(1) + except: + pass + return c + + def read_nowait(self, mute=False): + s = ''.encode() + self.sock.settimeout(0) + self.stimeout = 0 + s = self.sock.recv(4096) + st = s.decode('utf-8', errors='replace') + if not mute: + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.stream.write('[{} {}]'.format(date_str, self.name)+st) + return st + + def write(self, s, mute=False): + if self.echo_on and not mute: + ech = '' if s.strip(' ').endswith('\n') else '\n' + print(('[>' + self.name + '] : ' + s), end=ech) + res = self.sock.sendall(s.encode('utf-8')) + return res diff --git a/src/testium/libs/runtime_plot.py b/src/testium/libs/runtime_plot.py new file mode 100644 index 0000000..4e057de --- /dev/null +++ b/src/testium/libs/runtime_plot.py @@ -0,0 +1,358 @@ +import sys +import os +import multiprocessing as mp +from threading import Timer +from time import sleep, monotonic + +from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget +from PySide6.QtCore import Signal, QThread +from PySide6.QtCore import Qt +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.backends.backend_qtagg import NavigationToolbar2QT as NavigationToolbar +from matplotlib.figure import Figure + +import numpy as np + +import matplotlib.dates as mdates +from datetime import datetime, timedelta, timezone + +from interpreter.test_items.test_result import TestValue +from interpreter.utils.tum_except import ETUMRuntimeError +from interpreter.utils.func_exec import func_exec +from interpreter.utils.eval import post_evaluate +from interpreter.utils.periodic_timer import PeriodicTimer +from interpreter.utils.paths import abs_path_from_file, prepare_file_to_save + + +class ThreadMsgDispatch(QThread): + message_received = Signal(dict) + + def __init__(self, queue, parent=None): + super().__init__(parent) + self.__to_be_stopped = False + self._queue = queue + + def run(self): + stopping = False + while True: + if self._queue is None: + sleep(1) + continue + while not self._queue.empty(): + m = self._queue.get() + self.message_received.emit(m) + if stopping: + break + if self.__to_be_stopped: + stopping = True + sleep(0.1) + + def stop(self): + self.__to_be_stopped = True + + +class RealTimePlotCurve: + def __init__( + self, name, init_value: float, date0: datetime, t0: float, log_path: str + ) -> None: + self.name = name + self.data = np.array([init_value]) + self.date0 = date0 + self.t0 = t0 + self.basetime = datetime.fromtimestamp(0) + sec = monotonic() - self.t0 + self.time = np.array([self.date0 + timedelta(seconds=sec)]) + self.timestamp = np.array([sec]) + self.file_path = log_path + if self.file_path != "": + self.file_path = os.path.join( + self.file_path, "plot_line-" + self.name + ".csv" + ) + try: + prepare_file_to_save(self.file_path) + with open(self.file_path, "x") as f: + f.write("time; timestamp; {}\n".format(self.name)) + except: + pass + + def __str__(self) -> str: + return self.name + + def add(self, value): + self.data = np.append(self.data, value) + secs = monotonic() - self.t0 + self.timestamp = np.append(self.timestamp, secs) + time_value = self.date0 + timedelta(seconds=secs) + self.time = np.append(self.time, time_value) + if self.file_path != "": + try: + with open(self.file_path, "a") as f: + f.write("{};{};{}\n".format(str(time_value), secs, value)) + except: + pass + + def values(self): + return self.time, self.timestamp, self.data + + def last_value(self): + return self.time[-1], self.timestamp[-1], self.data[-1] + + +class DialogRealTimePlot(QMainWindow): + MARGINS = {"left": 70, "right": 10, "top": 10, "bottom": 80} + + def __init__( + self, name: str, msg_queue: mp.Queue, msg_out: mp.Queue, log_path: str + ): + super().__init__() + self.lines = [] + self.name = name + self.msg_queue = msg_queue + self.msg_out = msg_out + self.log_path = log_path + + self.setWindowFlag(Qt.WindowCloseButtonHint, False) + + central_widget = QWidget() + self.setCentralWidget(central_widget) + + layout = QVBoxLayout(central_widget) + + # Creation of the matplotlib figure + self.fig = Figure(figsize=(5, 4), dpi=100) + self.canvas = FigureCanvas(self.fig) + layout.addWidget(self.canvas) + self.toolbar = NavigationToolbar(self.canvas, self) + layout.addWidget(self.toolbar) + + # Plot creation + self.ax = self.fig.add_subplot() + self.ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M:%S")) + self.ax.grid(True, which='both') + self.ax.grid('on', which='minor', linestyle='--') + self.ax.minorticks_on() + self.t0 = monotonic() + self.date0 = datetime.now() + + # Command queue instantiation + self.thr_dispatch = ThreadMsgDispatch(self.msg_queue) + self.thr_dispatch.message_received.connect(self.compute_message) + self.thr_dispatch.start() + + # Connects resizeEvent to the margin resizing function + self.canvas.mpl_connect("resize_event", self.adjust_margins) + + self.adjust_margins() + + def __val_to_json(self, obj): + if isinstance(obj, np.integer): + return int(obj) + if isinstance(obj, np.floating): + return float(obj) + + def adjust_margins(self, event=None): + # adjusts margins according to the actual canvas size + width, height = self.canvas.get_width_height() + + left_margin = self.MARGINS["left"] / width # value in pixels + right_margin = self.MARGINS["right"] / width # value in pixels + top_margin = self.MARGINS["top"] / height # value in pixels + bottom_margin = self.MARGINS["bottom"] / height # value in pixels + + # Adjusts the figure size space + self.fig.subplots_adjust( + left=left_margin, + right=1.0 - right_margin, + top=1.0 - top_margin, + bottom=bottom_margin, + ) + + # Redraw the figure + self.canvas.draw() + + def update_plot(self): + self.ax.relim() + self.ax.autoscale_view() + for tick_label in self.ax.get_xticklabels(): + tick_label.set_rotation(60) + self.canvas.draw() + + def compute_message(self, message): + # Plot update + command = message["command"] + if command == "stop": + self.thr_dispatch.stop() + self.thr_dispatch.wait() + self.close() + + command = message["command"] + if command == "enable_exit_btn": + size = self.size() + self.setWindowFlag(Qt.WindowCloseButtonHint, True) + self.resize(size) + self.show() + + if command == "add": + values = message["values"] + for k in values.keys(): + curve = None + line = None + for l, c in self.lines: + if str(c) == k: + curve = c + line = l + c.add(values[k]) + + if curve is None: + curve = RealTimePlotCurve( + k, values[k], self.date0, self.t0, self.log_path + ) + t, _, v = curve.values() + (line,) = self.ax.plot(t, v, label=k) + self.ax.legend() + self.lines.append((line, curve)) + + else: + t, _, v = curve.values() + line.set_xdata(t) + line.set_ydata(v) + + self.update_plot() + + if command == "last_values": + res = {} + for _, curve in self.lines: + time, timeout, value = curve.last_value() + + res.update( + { + curve.name: [ + str(time), + self.__val_to_json(timeout), + self.__val_to_json(value), + ] + } + ) + self.msg_out.put(res) + + if command.startswith("export"): + tf = command.split(".")[1] + if tf == "pdf": + prepare_file_to_save(message["values"]) + self.canvas.figure.savefig(message["values"]) + if tf == "csv": + headers = "" + for l, c in self.lines: + t, _, v = c.values() + data = np.column_stack((t, v)) + headers = "time;" + str(c) + fname = os.path.splitext(message["values"])[0] + "-" + str(c) + fname = fname + os.path.splitext(message["values"])[1] + prepare_file_to_save(fname) + np.savetxt(fname, data, delimiter=";", fmt="%s", header=headers) + + +def plot_app(args, queue_in, queue_out): + app = QApplication([]) + d = DialogRealTimePlot(args[0], queue_in, queue_out, args[1]) + d.setWindowTitle(args[0]) + d.show() + sys.exit(app.exec()) + + +class RuntimePlotPeriodic(PeriodicTimer): + def __init__(self, msg_queue, period, file, func_name, args, post_eval="") -> None: + super().__init__(period, self.on_timer_event) + self.msg_queue = msg_queue + self.file = file + self.func_name = func_name + self.args = args + self.post_eval = post_eval + self.start() + self.on_timer_event() + + def on_timer_event(self): + succ, ret = func_exec(self.file, self.func_name, self.args) + if succ == TestValue.SUCCESS: + res, _ = ret + res = post_evaluate(self.post_eval, res) + self.msg_queue.put({"command": "add", "values": res}) + else: + print("Plot periodic timer function ({self.file}/{self.func_name}) failed: \"{ret}\"") + +class RuntimePlot: + EXPORTS = [".pdf", ".csv"] + + def __init__(self, name: str, log_path: str = None) -> None: + self.name = name + self.periodic = [] + self._log_path = "" + if log_path: + self._log_path = log_path + self.msg_queue_out = mp.Queue() + self.msg_queue_in = mp.Queue() + print(f"Opening the \"{self.name}\" plot window") + self.p = mp.Process( + target=plot_app, + name=self.name, + args=([self.name, self._log_path], self.msg_queue_out, self.msg_queue_in), + ) + self.p.start() + + def close(self): + for p in self.periodic: + p.stop() + + if self.p.is_alive(): + self.msg_queue_out.put({"command": "stop"}) + self.p.join() + print("Plot window closed.") + else: + raise ETUMRuntimeError(f"The plot window \"{self.name}\" has died unexpectedly") + + def close_wait_dialog_exit(self, timeout=-1): + for p in self.periodic: + p.stop() + self.periodic = [] + if self.p.is_alive(): + if timeout > 0: + tmr = Timer(timeout, self.on_close_timeout) + tmr.start() + self.msg_queue_out.put({"command": "enable_exit_btn"}) + self.p.join() + print("Plot window closed.") + else: + raise ETUMRuntimeError(f"The plot window \"{self.name}\" has died unexpectedly") + + def on_close_timeout(self): + if self.p.is_alive(): + self.close() + + def add_periodic(self, period, module, func_name, args=None, post_eval=""): + self.periodic.append( + RuntimePlotPeriodic( + self.msg_queue_out, period, module, func_name, args, post_eval + ) + ) + + def add(self, dict_values): + self.msg_queue_out.put({"command": "add", "values": dict_values}) + + def save(self, file_name): + path = abs_path_from_file(file_name) + if not path.suffix in self.EXPORTS: + raise ETUMRuntimeError( + f"The \"{self.name}\" plot exported file type is unknown (file = {str(path)})" + ) + + self.msg_queue_out.put({"command": "export" + path.suffix, "values": str(path)}) + + def last_values(self) -> dict: + while not self.msg_queue_in.empty(): + self.msg_queue_in.get() + self.msg_queue_out.put({"command": "last_values"}) + try: + res = self.msg_queue_in.get(timeout=1) + except: + raise ETUMRuntimeError(f"Impossible to retrieve the last values of the \"{self.name}\" plot") + return res diff --git a/src/testium/libs/termconsole.py b/src/testium/libs/termconsole.py new file mode 100644 index 0000000..7244d43 --- /dev/null +++ b/src/testium/libs/termconsole.py @@ -0,0 +1,136 @@ +from datetime import datetime +import sys +if sys.platform.startswith('win'): + import subprocess +else: + import pexpect +import threading +import os + +ourPath = os.path.dirname(__file__) +sys.path.append(ourPath) +from libs.console import (Console, BytesStore, TIMEOUT_NULL) + +class TermConsole(Console): + TYPE = 'term' + + def __init__(self, name, project_path=None, cust_shell=None, echoOn=False, write_delay=0): + Console.__init__(self, name, echoOn, write_delay) + if not project_path: + self.ppath = os.getcwd() + else: + self.ppath = project_path + self.cust_shell = cust_shell + self.stop = threading.Event() + + self.term = None + + def __del__(self): + try: + self.term.kill() + self.term = None + except: + pass + + def enqueue_output(self): + if sys.platform.startswith('win'): + while not self.stop.is_set(): + c = None + try: + c = self.term.stdout.read(1) + except: + pass + if c is not None: + self.q.put(c) + else: + while not self.stop.is_set(): + c = None + try: + c = self.term.read_nonblocking(1, timeout=0.2) + except pexpect.TIMEOUT: + pass + if c is not None: + self.q.put(c) + + def open(self): + + if (self.cust_shell == None): + if sys.platform.startswith('win'): + shell_cmd = ['cmd.exe'] + else: + shell_cmd = '/bin/sh' + else: + shell_cmd = self.cust_shell + + + if sys.platform.startswith('win'): + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + self.term = subprocess.Popen(shell_cmd, + shell=False, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=False, + startupinfo=startupinfo, + cwd=self.ppath, + bufsize=0) + + else: + self.term = pexpect.spawn( shell_cmd, + echo=False, + cwd=self.ppath) + + self.q = BytesStore() + self.t = threading.Thread(target=self.enqueue_output) + self.t.daemon = True # thread dies with the program + self.t.start() + self.isOpened = True + + def close(self): + try: + self.stop.set() + self.t.join(1) + if self.term: + self.term.terminate() + self.term = None + self.isOpened = False + except: + pass + + def readchar(self, timeout): + if timeout < TIMEOUT_NULL: + c = self.q.get(block=False) + return c + else: + c = self.q.get(block=True, timeout=timeout) + return c + + def read_nowait(self, mute=False): + s = ''.encode() + + s += self.q.getAll() + + st = s.decode('utf-8', errors='replace') + + ls = st.splitlines() + if (len(st) > 0) and (st[-1] != '\r') and (st[-1] !='\n'): + self.q.pushBack(ls[-1].encode()) + ls = ls[0:-1] + + st = '\n'.join(ls) + if not mute: + date_str = str(datetime.now()).split('.')[0].split(' ')[1] + self.stream.write('[{} {}]'.format(date_str, self.name)+st) + return st + + def write(self, s, mute=False): + if self.echo_on and not mute: + ech = '' if s.strip(' ').endswith('\n') else '\n' + print(('[>' + self.name + '] : ' + s), end=ech) + if sys.platform.startswith('win'): + res = self.term.stdin.write(s.encode('utf-8')) + else: + res = self.term.send(s) + + return res diff --git a/src/testium/libs/testium.py b/src/testium/libs/testium.py new file mode 100644 index 0000000..8d71291 --- /dev/null +++ b/src/testium/libs/testium.py @@ -0,0 +1,304 @@ +import os +import platform +import sys +import textwrap +from time import monotonic +import interpreter.utils.globdict as globdict +from interpreter.utils.tum_except import (ETUMSyntaxError) + +############################################################################### +# Console helper functions + + +def add_console(console): + ''' Function which adds a ``Console`` class instance to *testium* + + :param console: The ``Console`` instance. + :type console: ``libs.console.Console`` or child class instance + :return: No returned value + + ''' + console_instances = globdict.gd('console_instances', []) + console_instances.append(console) + globdict.setgd('console_instances', console_instances) + + +def remove_console(name): + ''' Function which removes a ``Console`` class instance from *testium* + + :param name: The name of the ``Console`` object to be removed. + :type name: str + :return: No returned value + ''' + console_instances = globdict.gd('console_instances', []) + cons = None + for c in console_instances: + if c.name == name: + cons = c + break + if cons is not None: + console_instances.remove(cons) + globdict.setgd('console_instances', console_instances) + + +def console(name): + """ + Function which removes a ``Console`` instance from *testium* + + :param name: The name of the ``Console`` instance. + :type name: str + :return: The ``Console`` or child class object + :rtype: ``libs.console.Console`` or child class instance + """ + cons = None + for c in globdict.gd('console_instances', []): + if c.name == name: + cons = c + break + return cons + +############################################################################### +# Plot helper functions + + +def add_plot(plot: object) -> None: + ''' Function which adds a ``RuntimePlot`` class instance to *testium* + + :param plot: The ``RuntimePlot`` instance. + :type plot: ``libs.runtime_plot.RuntimePlot`` or child class instance + :return: No returned value + + ''' + plot_instances = globdict.gd('plot_instances', []) + plot_instances.append(plot) + globdict.setgd('plot_instances', plot_instances) + + +def remove_plot(name: str) -> None: + ''' Function which removes a ``RuntimePlot`` class instance from *testium* + + :param name: The name of the ``RuntimePlot`` object to be removed. + :type name: str + :return: No returned value + ''' + plot_instances = globdict.gd('plot_instances', []) + plot = None + for g in plot_instances: + if g.name == name: + plot = g + break + if plot is not None: + plot_instances.remove(plot) + globdict.setgd('plot_instances', plot_instances) + + +def plot(name: str) -> object: + """ + Function which removes a ``RuntimePlot`` instance from *testium* + + :param name: The name of the ``RuntimePlot`` instance. + :type name: str + :return: The ``RuntimePlot`` or child class object + :rtype: ``libs.runtime_plot.RuntimePlot`` or child class instance + """ + plot = None + for g in globdict.gd('plot_instances', []): + if g.name == name: + plot = g + break + return plot + + +def add_plot_values(name: str, values: dict) -> None: + """ + Function which add values in a runing plot. + + The ``values`` param is the dictionnary of points to add to the plot. + Each of its keys correspond to a plot line variable name. + + :param name: The name of the ``RuntimePlot`` instance. + :type name: str + :param values: a dictionnary of numbers which keys are plot line names + :rtype: dict + """ + p = plot(name) + if p is None: + raise ETUMSyntaxError('plot with name "{}" was not found'.format(name)) + p.add(values) + + +def last_plot_value(name: str) -> dict: + """ + Function which returns the last values acquired in a runing plot. + + :param name: The name of the ``RuntimePlot`` instance. + :type name: str + :return: a dictionnary of numbers which keys are plot line names + :rtype: dict + """ + p = plot(name) + if p is None: + raise ETUMSyntaxError('plot with name "{}" was not found'.format(name)) + return p.last_values() + + +############################################################################### +class FunctionItem(): + """Class allowing extended capabilities of function.""" + module_count = 0 + + def __init__(self): + self._reported_value = {} + + def reportValue(self, key, value): + self._reported_value[key] = value + + def reportedValues(self): + return self._reported_value + + def exec(self): + pass + + +def get_main_dir(): + return os.path.abspath(os.path.dirname(sys.argv[0])) + + +def init_timestamp(): + globdict.setgd('test_items_tinit', monotonic()) + + +def timestamp(): + """*testium* timestamp value. + + The ``timestamp`` is started at the beginning of the test, and it is monotonic: + it is guaranteed that it will always increase, even if the PC time is changed. + + :return: *testium* timestamp in 10th of milliseconds. + :rtype: float + """ + return int((monotonic()-globdict.gd('test_items_tinit'))*10000) + + +def timestamp_as_sec(val=None): + """*testium* timestamp value. + + If the argument ``val`` is provided, this function converts the timestamp in seconds. + + If ``val`` is not provided, it returns *testium* timestamp. + The ``timestamp`` is started at the beginning of the test, and it is monotonic: + it is guaranteed that it will always increase, even if the PC time is changed. + + :param val: Value to be converted. If not provided, the *testium* timestamp is returned. + :type val: float + :return: Timestamp returned as seconds. + :rtype: float + """ + if val is not None: + return val/10000.0 + else: + return monotonic()-globdict.gd('test_items_tinit') + + +def OS(): + """OS on which *testium* is running. + + :return: "Linux" or "Windows" + :rtype: str + """ + return platform.system() + + +def line_number(phrase, filename): + with open(filename, 'r') as f: + for (i, line) in enumerate(f): + if phrase in line: + return i + return -1 + + +def cleanup_instances(instances): + """Cleanup remaining instances of plot and consoles. + + Must be called after a test is finished, to ensure everything's clean. + + :return: nothing returned + """ + inst = globdict.gd(instances + '_instances', None) + if inst is not None: + for i in inst: + print('closing {} {}'.format(instances, i.name)) + i.close() + # all element of the list shall be closed now, we can empty the list + globdict.delgd(instances + '_instances') + + +setgd = globdict.setgd +delgd = globdict.delgd +gd = globdict.gd + +# Keep backward compatibility +addConsole = add_console +removeConsole = remove_console + + +############################################################################### +def debug_enabled(): + ''' Function which checks is debug mode is activated. + + :return: bool + ''' + return gd("test_debug", False) + + +def enable_debug(enabled=True): + ''' Function which enables the debug mode. + + :param enabled: Set debug mode active if ``True``. + + :return: No returned value + ''' + setgd("test_debug", enabled) + + +def _custom_print(pref: str, *vargs, lf_first: bool = False): + to_print = "" + for varg in vargs: + to_print += f"{varg}" + if lf_first: + print("\n") + print(textwrap.indent(to_print, pref)) + + +def print_debug(*vargs, lf_first: bool = False): + ''' Function which prints debug only if the debug mode is activated. + + :param *vargs: values to be printed. + :param lf_first: Adds a line feed first if ``True``. + + :return: No returned value + ''' + if gd("test_debug", False): + _custom_print("DEBUG ", *vargs, lf_first=lf_first) + + +def print_info(*vargs, lf_first: bool = False): + ''' Function which prints an information for the user. + + :param *vargs: values to be printed. + :param lf_first: Adds a line feed first if ``True``. + + :return: No returned value + ''' + _custom_print("INFO ", *vargs, lf_first=lf_first) + + +def print_warn(*vargs, lf_first: bool = False): + ''' Function which prints a warning for the user. + + :param *vargs: values to be printed. + :param lf_first: Adds a line feed first if ``True``. + + :return: No returned value + ''' + _custom_print("WARN ", *vargs, lf_first=lf_first) diff --git a/src/testium/main_win/__init__.py b/src/testium/main_win/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/main_win/about_win/__init__.py b/src/testium/main_win/about_win/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/main_win/about_win/about_win.py b/src/testium/main_win/about_win/about_win.py new file mode 100644 index 0000000..84ddae1 --- /dev/null +++ b/src/testium/main_win/about_win/about_win.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'about_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox, + QFrame, QLabel, QPlainTextEdit, QSizePolicy, + QWidget) +import about_win_rc + +class Ui_About(object): + def setupUi(self, About): + if not About.objectName(): + About.setObjectName(u"About") + About.resize(400, 247) + self.buttonBox = QDialogButtonBox(About) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setGeometry(QRect(30, 200, 341, 32)) + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Ok) + self.label = QLabel(About) + self.label.setObjectName(u"label") + self.label.setGeometry(QRect(30, 20, 341, 31)) + font = QFont() + font.setPointSize(14) + self.label.setFont(font) + self.label.setWordWrap(True) + self.labelVersion = QLabel(About) + self.labelVersion.setObjectName(u"labelVersion") + self.labelVersion.setGeometry(QRect(30, 60, 341, 16)) + self.plainTextEdit = QPlainTextEdit(About) + self.plainTextEdit.setObjectName(u"plainTextEdit") + self.plainTextEdit.setGeometry(QRect(30, 100, 341, 91)) + self.plainTextEdit.setFrameShape(QFrame.NoFrame) + self.plainTextEdit.setFrameShadow(QFrame.Sunken) + self.plainTextEdit.setReadOnly(True) + self.labelCesUnitVersion = QLabel(About) + self.labelCesUnitVersion.setObjectName(u"labelCesUnitVersion") + self.labelCesUnitVersion.setGeometry(QRect(30, 70, 341, 16)) + + self.retranslateUi(About) + self.buttonBox.accepted.connect(About.accept) + + QMetaObject.connectSlotsByName(About) + # setupUi + + def retranslateUi(self, About): + About.setWindowTitle(QCoreApplication.translate("About", u"A propos", None)) + self.label.setText(QCoreApplication.translate("About", u"Testium", None)) + self.labelVersion.setText(QCoreApplication.translate("About", u"Version", None)) + self.plainTextEdit.setPlainText(QCoreApplication.translate("About", u"This gui was developed with the help of Qt by Fran\u00e7ois Dausseur.", None)) + self.labelCesUnitVersion.setText(QCoreApplication.translate("About", u"Version", None)) + # retranslateUi + diff --git a/src/testium/main_win/about_win/about_win.ui b/src/testium/main_win/about_win/about_win.ui new file mode 100644 index 0000000..5f8a7df --- /dev/null +++ b/src/testium/main_win/about_win/about_win.ui @@ -0,0 +1,123 @@ + + + About + + + + 0 + 0 + 400 + 247 + + + + A propos + + + + + 30 + 200 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + 30 + 20 + 341 + 31 + + + + + 14 + + + + Testium + + + true + + + + + + 30 + 60 + 341 + 16 + + + + Version + + + + + + 30 + 100 + 341 + 91 + + + + QFrame::NoFrame + + + QFrame::Sunken + + + true + + + This gui was developed with the help of Qt by François Dausseur. + + + + + + 30 + 70 + 341 + 16 + + + + Version + + + + + + + + + buttonBox + accepted() + About + accept() + + + 248 + 254 + + + 157 + 274 + + + + + diff --git a/src/testium/main_win/f1_win/__init__.py b/src/testium/main_win/f1_win/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/main_win/f1_win/d_f1_win.py b/src/testium/main_win/f1_win/d_f1_win.py new file mode 100644 index 0000000..1304083 --- /dev/null +++ b/src/testium/main_win/f1_win/d_f1_win.py @@ -0,0 +1,73 @@ +import os +import sys +import subprocess +import re + +from PySide6.QtWidgets import QDialog +from PySide6.QtGui import QSyntaxHighlighter, QTextCharFormat, QColor, QFont, QDesktopServices +from PySide6.QtCore import Qt, QUrl + +from testium.main_win.f1_win.f1_win_core import Ui_F1Dialog + + +class YamlHighlighter(QSyntaxHighlighter): + def __init__(self, parent=None): + super(YamlHighlighter, self).__init__(parent) + + self.highlightingRules = [] + + # --- KEY formatting (before colon) --- + key_format = QTextCharFormat() + key_format.setForeground(QColor("#268bd2")) # Solarized blue + key_format.setFontWeight(QFont.Bold) + self.highlightingRules.append((r"^\s*[^:]+(?=:)", key_format)) + + # --- VALUE formatting (strings) --- + value_format = QTextCharFormat() + value_format.setForeground(QColor("#2aa198")) # teal + self.highlightingRules.append((r":\s*[^#\n]+", value_format)) + + # --- Booleans (true/false) --- + bool_format = QTextCharFormat() + bool_format.setForeground(QColor("#b58900")) # yellow + bool_format.setFontWeight(QFont.Bold) + self.highlightingRules.append((r"\b(true|false)\b", bool_format)) + + # --- Numbers --- + num_format = QTextCharFormat() + num_format.setForeground(QColor("#d33682")) # magenta + self.highlightingRules.append((r"\b[0-9]+\b", num_format)) + + # --- Comments (# ...) --- + comment_format = QTextCharFormat() + comment_format.setForeground(QColor("#586e75")) # gray + self.highlightingRules.append((r"#.*", comment_format)) + + def highlightBlock(self, text): + for pattern, fmt in self.highlightingRules: + + for match in re.finditer(pattern, text): + start, end = match.span() + self.setFormat(start, end-start, fmt) + + +class DialogF1(QDialog): + def __init__(self, parent = None): + super().__init__(parent) + self.ui = Ui_F1Dialog() + self.ui.setupUi(self) + self.highlighter = YamlHighlighter(self.ui.TestContentEdit.document()) + self.setWindowFlags( + Qt.Window | Qt.WindowStaysOnTopHint | Qt.Tool + ) + self.ui.ButtLocOpen.clicked.connect(self.on_butlocopen_click) + self.ui.ButtClose.clicked.connect(self.close) + + def on_butlocopen_click(self): + file = self.ui.sequenceFileNameLineEdit.text() + if os.path.exists(file): + if sys.platform.startswith("win"): # Windows + subprocess.Popen(f'explorer "{file}"') + else: # Linux / autres + subprocess.Popen(["xdg-open", file]) + QDesktopServices.openUrl(QUrl.fromLocalFile(file)) \ No newline at end of file diff --git a/src/testium/main_win/f1_win/f1_win_core.py b/src/testium/main_win/f1_win/f1_win_core.py new file mode 100644 index 0000000..1e2b1e5 --- /dev/null +++ b/src/testium/main_win/f1_win/f1_win_core.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'f1_win_core.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QApplication, QDialog, QFormLayout, QHBoxLayout, + QLabel, QLineEdit, QPushButton, QSizePolicy, + QSpacerItem, QTextEdit, QToolButton, QVBoxLayout, + QWidget) +import f1_win_rc + +class Ui_F1Dialog(object): + def setupUi(self, F1Dialog): + if not F1Dialog.objectName(): + F1Dialog.setObjectName(u"F1Dialog") + F1Dialog.resize(400, 300) + icon = QIcon() + if QIcon.hasThemeIcon(QIcon.ThemeIcon.HelpAbout): + icon = QIcon.fromTheme(QIcon.ThemeIcon.HelpAbout) + else: + icon.addFile(u":/icons/testium_logo.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + + F1Dialog.setWindowIcon(icon) + F1Dialog.setLayoutDirection(Qt.LayoutDirection.LeftToRight) + self.verticalLayout_2 = QVBoxLayout(F1Dialog) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + + self.verticalLayout_2.addLayout(self.horizontalLayout_2) + + self.formLayout = QFormLayout() + self.formLayout.setObjectName(u"formLayout") + self.typeLabel = QLabel(F1Dialog) + self.typeLabel.setObjectName(u"typeLabel") + + self.formLayout.setWidget(0, QFormLayout.ItemRole.LabelRole, self.typeLabel) + + self.typeLineEdit = QLineEdit(F1Dialog) + self.typeLineEdit.setObjectName(u"typeLineEdit") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.typeLineEdit.sizePolicy().hasHeightForWidth()) + self.typeLineEdit.setSizePolicy(sizePolicy) + self.typeLineEdit.setReadOnly(True) + + self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.typeLineEdit) + + self.sequenceFileNameLabel = QLabel(F1Dialog) + self.sequenceFileNameLabel.setObjectName(u"sequenceFileNameLabel") + + self.formLayout.setWidget(1, QFormLayout.ItemRole.LabelRole, self.sequenceFileNameLabel) + + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.sequenceFileNameLineEdit = QLineEdit(F1Dialog) + self.sequenceFileNameLineEdit.setObjectName(u"sequenceFileNameLineEdit") + self.sequenceFileNameLineEdit.setReadOnly(True) + + self.horizontalLayout_3.addWidget(self.sequenceFileNameLineEdit) + + self.ButtLocOpen = QToolButton(F1Dialog) + self.ButtLocOpen.setObjectName(u"ButtLocOpen") + + self.horizontalLayout_3.addWidget(self.ButtLocOpen) + + + self.formLayout.setLayout(1, QFormLayout.ItemRole.FieldRole, self.horizontalLayout_3) + + + self.verticalLayout_2.addLayout(self.formLayout) + + self.label = QLabel(F1Dialog) + self.label.setObjectName(u"label") + + self.verticalLayout_2.addWidget(self.label) + + self.TestContentEdit = QTextEdit(F1Dialog) + self.TestContentEdit.setObjectName(u"TestContentEdit") + self.TestContentEdit.setReadOnly(True) + + self.verticalLayout_2.addWidget(self.TestContentEdit) + + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout.addItem(self.horizontalSpacer) + + self.ButtClose = QPushButton(F1Dialog) + self.ButtClose.setObjectName(u"ButtClose") + icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.WindowClose)) + self.ButtClose.setIcon(icon1) + + self.horizontalLayout.addWidget(self.ButtClose) + + + self.verticalLayout_2.addLayout(self.horizontalLayout) + + + self.retranslateUi(F1Dialog) + + QMetaObject.connectSlotsByName(F1Dialog) + # setupUi + + def retranslateUi(self, F1Dialog): + F1Dialog.setWindowTitle(QCoreApplication.translate("F1Dialog", u"Test information", None)) + self.typeLabel.setText(QCoreApplication.translate("F1Dialog", u"Test step type", None)) + self.sequenceFileNameLabel.setText(QCoreApplication.translate("F1Dialog", u"Test file name", None)) + self.ButtLocOpen.setText(QCoreApplication.translate("F1Dialog", u"...", None)) + self.label.setText(QCoreApplication.translate("F1Dialog", u"Test content:", None)) + self.ButtClose.setText(QCoreApplication.translate("F1Dialog", u"Close", None)) + # retranslateUi + diff --git a/src/testium/main_win/f1_win/f1_win_core.ui b/src/testium/main_win/f1_win/f1_win_core.ui new file mode 100644 index 0000000..fb48f24 --- /dev/null +++ b/src/testium/main_win/f1_win/f1_win_core.ui @@ -0,0 +1,126 @@ + + + F1Dialog + + + + 0 + 0 + 400 + 300 + + + + Test information + + + + :/icons/testium_logo.png:/icons/testium_logo.png + + + Qt::LayoutDirection::LeftToRight + + + + + + + + + + + Test step type + + + + + + + + 0 + 0 + + + + true + + + + + + + Test file name + + + + + + + + + true + + + + + + + ... + + + + + + + + + + + Test content: + + + + + + + true + + + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Expanding + + + + 40 + 20 + + + + + + + + Close + + + + + + + + + + + + + + + diff --git a/src/testium/main_win/preference_win/__init__.py b/src/testium/main_win/preference_win/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/main_win/preference_win/preference_core_win.py b/src/testium/main_win/preference_win/preference_core_win.py new file mode 100644 index 0000000..9171227 --- /dev/null +++ b/src/testium/main_win/preference_win/preference_core_win.py @@ -0,0 +1,350 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'preference_core_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QCheckBox, QComboBox, + QDialog, QDialogButtonBox, QFontComboBox, QFormLayout, + QFrame, QGridLayout, QHBoxLayout, QLabel, + QLineEdit, QScrollArea, QSizePolicy, QSpacerItem, + QSpinBox, QTabWidget, QToolButton, QVBoxLayout, + QWidget) + +class Ui_preferenceWindow(object): + def setupUi(self, preferenceWindow): + if not preferenceWindow.objectName(): + preferenceWindow.setObjectName(u"preferenceWindow") + preferenceWindow.resize(597, 386) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(preferenceWindow.sizePolicy().hasHeightForWidth()) + preferenceWindow.setSizePolicy(sizePolicy) + font = QFont() + font.setFamilies([u"Sans"]) + font.setPointSize(9) + preferenceWindow.setFont(font) + self.verticalLayout_2 = QVBoxLayout(preferenceWindow) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.tabWidget = QTabWidget(preferenceWindow) + self.tabWidget.setObjectName(u"tabWidget") + font1 = QFont() + font1.setFamilies([u"Sans"]) + font1.setPointSize(10) + self.tabWidget.setFont(font1) + self.tabInterfaceParams = QWidget() + self.tabInterfaceParams.setObjectName(u"tabInterfaceParams") + self.verticalLayout = QVBoxLayout(self.tabInterfaceParams) + self.verticalLayout.setObjectName(u"verticalLayout") + self.scrollArea = QScrollArea(self.tabInterfaceParams) + self.scrollArea.setObjectName(u"scrollArea") + self.scrollArea.setFrameShape(QFrame.NoFrame) + self.scrollArea.setFrameShadow(QFrame.Sunken) + self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.scrollArea.setWidgetResizable(True) + self.scrollAreaWidgetContents = QWidget() + self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents") + self.scrollAreaWidgetContents.setGeometry(QRect(0, -9, 557, 152)) + self.formLayout = QFormLayout(self.scrollAreaWidgetContents) + self.formLayout.setObjectName(u"formLayout") + self.label_4 = QLabel(self.scrollAreaWidgetContents) + self.label_4.setObjectName(u"label_4") + + self.formLayout.setWidget(0, QFormLayout.ItemRole.LabelRole, self.label_4) + + self.checkDocPane = QCheckBox(self.scrollAreaWidgetContents) + self.checkDocPane.setObjectName(u"checkDocPane") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.MinimumExpanding) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.checkDocPane.sizePolicy().hasHeightForWidth()) + self.checkDocPane.setSizePolicy(sizePolicy1) + self.checkDocPane.setLayoutDirection(Qt.RightToLeft) + + self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.checkDocPane) + + self.label_5 = QLabel(self.scrollAreaWidgetContents) + self.label_5.setObjectName(u"label_5") + + self.formLayout.setWidget(1, QFormLayout.ItemRole.LabelRole, self.label_5) + + self.checkLogPane = QCheckBox(self.scrollAreaWidgetContents) + self.checkLogPane.setObjectName(u"checkLogPane") + sizePolicy1.setHeightForWidth(self.checkLogPane.sizePolicy().hasHeightForWidth()) + self.checkLogPane.setSizePolicy(sizePolicy1) + self.checkLogPane.setLayoutDirection(Qt.RightToLeft) + + self.formLayout.setWidget(1, QFormLayout.ItemRole.FieldRole, self.checkLogPane) + + self.label_3 = QLabel(self.scrollAreaWidgetContents) + self.label_3.setObjectName(u"label_3") + + self.formLayout.setWidget(2, QFormLayout.ItemRole.LabelRole, self.label_3) + + self.checkBoxTest = QCheckBox(self.scrollAreaWidgetContents) + self.checkBoxTest.setObjectName(u"checkBoxTest") + sizePolicy1.setHeightForWidth(self.checkBoxTest.sizePolicy().hasHeightForWidth()) + self.checkBoxTest.setSizePolicy(sizePolicy1) + self.checkBoxTest.setLayoutDirection(Qt.RightToLeft) + + self.formLayout.setWidget(2, QFormLayout.ItemRole.FieldRole, self.checkBoxTest) + + self.label_6 = QLabel(self.scrollAreaWidgetContents) + self.label_6.setObjectName(u"label_6") + + self.formLayout.setWidget(3, QFormLayout.ItemRole.LabelRole, self.label_6) + + self.checkShowTime = QCheckBox(self.scrollAreaWidgetContents) + self.checkShowTime.setObjectName(u"checkShowTime") + sizePolicy1.setHeightForWidth(self.checkShowTime.sizePolicy().hasHeightForWidth()) + self.checkShowTime.setSizePolicy(sizePolicy1) + self.checkShowTime.setLayoutDirection(Qt.RightToLeft) + + self.formLayout.setWidget(3, QFormLayout.ItemRole.FieldRole, self.checkShowTime) + + self.label_7 = QLabel(self.scrollAreaWidgetContents) + self.label_7.setObjectName(u"label_7") + + self.formLayout.setWidget(4, QFormLayout.ItemRole.LabelRole, self.label_7) + + self.checkDblClick = QCheckBox(self.scrollAreaWidgetContents) + self.checkDblClick.setObjectName(u"checkDblClick") + sizePolicy1.setHeightForWidth(self.checkDblClick.sizePolicy().hasHeightForWidth()) + self.checkDblClick.setSizePolicy(sizePolicy1) + self.checkDblClick.setLayoutDirection(Qt.RightToLeft) + + self.formLayout.setWidget(4, QFormLayout.ItemRole.FieldRole, self.checkDblClick) + + self.choiceIconsTheme = QComboBox(self.scrollAreaWidgetContents) + self.choiceIconsTheme.addItem("") + self.choiceIconsTheme.addItem("") + self.choiceIconsTheme.setObjectName(u"choiceIconsTheme") + + self.formLayout.setWidget(5, QFormLayout.ItemRole.FieldRole, self.choiceIconsTheme) + + self.label_10 = QLabel(self.scrollAreaWidgetContents) + self.label_10.setObjectName(u"label_10") + + self.formLayout.setWidget(5, QFormLayout.ItemRole.LabelRole, self.label_10) + + self.scrollArea.setWidget(self.scrollAreaWidgetContents) + + self.verticalLayout.addWidget(self.scrollArea) + + self.verticalSpacer = QSpacerItem(20, 0, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.verticalLayout.addItem(self.verticalSpacer) + + self.tabWidget.addTab(self.tabInterfaceParams, "") + self.tabTestParams = QWidget() + self.tabTestParams.setObjectName(u"tabTestParams") + self.verticalLayout_3 = QVBoxLayout(self.tabTestParams) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.scrollArea_2 = QScrollArea(self.tabTestParams) + self.scrollArea_2.setObjectName(u"scrollArea_2") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.scrollArea_2.sizePolicy().hasHeightForWidth()) + self.scrollArea_2.setSizePolicy(sizePolicy2) + self.scrollArea_2.setWidgetResizable(True) + self.scrollAreaWidgetContents_2 = QWidget() + self.scrollAreaWidgetContents_2.setObjectName(u"scrollAreaWidgetContents_2") + self.scrollAreaWidgetContents_2.setGeometry(QRect(0, 0, 555, 141)) + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.scrollAreaWidgetContents_2.sizePolicy().hasHeightForWidth()) + self.scrollAreaWidgetContents_2.setSizePolicy(sizePolicy3) + self.formLayout_2 = QFormLayout(self.scrollAreaWidgetContents_2) + self.formLayout_2.setObjectName(u"formLayout_2") + self.label = QLabel(self.scrollAreaWidgetContents_2) + self.label.setObjectName(u"label") + sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.MinimumExpanding) + sizePolicy4.setHorizontalStretch(0) + sizePolicy4.setVerticalStretch(0) + sizePolicy4.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) + self.label.setSizePolicy(sizePolicy4) + + self.formLayout_2.setWidget(0, QFormLayout.ItemRole.LabelRole, self.label) + + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.editDefaultLogPath = QLineEdit(self.scrollAreaWidgetContents_2) + self.editDefaultLogPath.setObjectName(u"editDefaultLogPath") + sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.editDefaultLogPath.sizePolicy().hasHeightForWidth()) + self.editDefaultLogPath.setSizePolicy(sizePolicy5) + + self.horizontalLayout.addWidget(self.editDefaultLogPath) + + self.butLogPath = QToolButton(self.scrollAreaWidgetContents_2) + self.butLogPath.setObjectName(u"butLogPath") + + self.horizontalLayout.addWidget(self.butLogPath) + + + self.formLayout_2.setLayout(0, QFormLayout.ItemRole.FieldRole, self.horizontalLayout) + + self.label_2 = QLabel(self.scrollAreaWidgetContents_2) + self.label_2.setObjectName(u"label_2") + sizePolicy4.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) + self.label_2.setSizePolicy(sizePolicy4) + + self.formLayout_2.setWidget(1, QFormLayout.ItemRole.LabelRole, self.label_2) + + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.editDefaultReportPath = QLineEdit(self.scrollAreaWidgetContents_2) + self.editDefaultReportPath.setObjectName(u"editDefaultReportPath") + sizePolicy5.setHeightForWidth(self.editDefaultReportPath.sizePolicy().hasHeightForWidth()) + self.editDefaultReportPath.setSizePolicy(sizePolicy5) + + self.horizontalLayout_2.addWidget(self.editDefaultReportPath) + + self.butReportPath = QToolButton(self.scrollAreaWidgetContents_2) + self.butReportPath.setObjectName(u"butReportPath") + + self.horizontalLayout_2.addWidget(self.butReportPath) + + + self.formLayout_2.setLayout(1, QFormLayout.ItemRole.FieldRole, self.horizontalLayout_2) + + self.labelgit = QLabel(self.scrollAreaWidgetContents_2) + self.labelgit.setObjectName(u"labelgit") + + self.formLayout_2.setWidget(2, QFormLayout.ItemRole.LabelRole, self.labelgit) + + self.checkGitSupported = QCheckBox(self.scrollAreaWidgetContents_2) + self.checkGitSupported.setObjectName(u"checkGitSupported") + self.checkGitSupported.setLayoutDirection(Qt.RightToLeft) + + self.formLayout_2.setWidget(2, QFormLayout.ItemRole.FieldRole, self.checkGitSupported) + + self.scrollArea_2.setWidget(self.scrollAreaWidgetContents_2) + + self.verticalLayout_3.addWidget(self.scrollArea_2) + + self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.verticalLayout_3.addItem(self.verticalSpacer_2) + + self.tabWidget.addTab(self.tabTestParams, "") + self.tabLog = QWidget() + self.tabLog.setObjectName(u"tabLog") + self.verticalLayout_4 = QVBoxLayout(self.tabLog) + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.scrollArea_3 = QScrollArea(self.tabLog) + self.scrollArea_3.setObjectName(u"scrollArea_3") + sizePolicy5.setHeightForWidth(self.scrollArea_3.sizePolicy().hasHeightForWidth()) + self.scrollArea_3.setSizePolicy(sizePolicy5) + self.scrollArea_3.setWidgetResizable(True) + self.scrollAreaWidgetContents_3 = QWidget() + self.scrollAreaWidgetContents_3.setObjectName(u"scrollAreaWidgetContents_3") + self.scrollAreaWidgetContents_3.setGeometry(QRect(0, 0, 555, 72)) + self.gridLayout = QGridLayout(self.scrollAreaWidgetContents_3) + self.gridLayout.setObjectName(u"gridLayout") + self.label_8 = QLabel(self.scrollAreaWidgetContents_3) + self.label_8.setObjectName(u"label_8") + sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy6.setHorizontalStretch(0) + sizePolicy6.setVerticalStretch(0) + sizePolicy6.setHeightForWidth(self.label_8.sizePolicy().hasHeightForWidth()) + self.label_8.setSizePolicy(sizePolicy6) + + self.gridLayout.addWidget(self.label_8, 0, 0, 1, 1) + + self.font_choice = QFontComboBox(self.scrollAreaWidgetContents_3) + self.font_choice.setObjectName(u"font_choice") + sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + sizePolicy7.setHorizontalStretch(0) + sizePolicy7.setVerticalStretch(0) + sizePolicy7.setHeightForWidth(self.font_choice.sizePolicy().hasHeightForWidth()) + self.font_choice.setSizePolicy(sizePolicy7) + + self.gridLayout.addWidget(self.font_choice, 0, 1, 1, 1) + + self.label_9 = QLabel(self.scrollAreaWidgetContents_3) + self.label_9.setObjectName(u"label_9") + + self.gridLayout.addWidget(self.label_9, 1, 0, 1, 1) + + self.font_size = QSpinBox(self.scrollAreaWidgetContents_3) + self.font_size.setObjectName(u"font_size") + self.font_size.setMinimum(1) + self.font_size.setValue(8) + + self.gridLayout.addWidget(self.font_size, 1, 1, 1, 1) + + self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_3) + + self.verticalLayout_4.addWidget(self.scrollArea_3) + + self.verticalSpacer_3 = QSpacerItem(20, 0, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.verticalLayout_4.addItem(self.verticalSpacer_3) + + self.tabWidget.addTab(self.tabLog, "") + + self.verticalLayout_2.addWidget(self.tabWidget) + + self.buttonBox = QDialogButtonBox(preferenceWindow) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) + + self.verticalLayout_2.addWidget(self.buttonBox) + + + self.retranslateUi(preferenceWindow) + + self.tabWidget.setCurrentIndex(0) + self.choiceIconsTheme.setCurrentIndex(0) + + + QMetaObject.connectSlotsByName(preferenceWindow) + # setupUi + + def retranslateUi(self, preferenceWindow): + preferenceWindow.setWindowTitle(QCoreApplication.translate("preferenceWindow", u"preferenceWindow", None)) + self.label_4.setText(QCoreApplication.translate("preferenceWindow", u"Hide documentation pane", None)) + self.checkDocPane.setText("") + self.label_5.setText(QCoreApplication.translate("preferenceWindow", u"Hide log pane", None)) + self.checkLogPane.setText("") + self.label_3.setText(QCoreApplication.translate("preferenceWindow", u"Tests selection available", None)) + self.checkBoxTest.setText("") + self.label_6.setText(QCoreApplication.translate("preferenceWindow", u"Show step time column (requires restart)", None)) + self.checkShowTime.setText("") + self.label_7.setText(QCoreApplication.translate("preferenceWindow", u"Test tree item double click enabled", None)) + self.checkDblClick.setText("") + self.choiceIconsTheme.setItemText(0, QCoreApplication.translate("preferenceWindow", u"Colored icons", None)) + self.choiceIconsTheme.setItemText(1, QCoreApplication.translate("preferenceWindow", u"Black icons", None)) + + self.label_10.setText(QCoreApplication.translate("preferenceWindow", u"Icons theme", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabInterfaceParams), QCoreApplication.translate("preferenceWindow", u"Interface parameters", None)) + self.label.setText(QCoreApplication.translate("preferenceWindow", u"Default log files path", None)) + self.butLogPath.setText(QCoreApplication.translate("preferenceWindow", u"...", None)) + self.label_2.setText(QCoreApplication.translate("preferenceWindow", u"Default reports path", None)) + self.butReportPath.setText(QCoreApplication.translate("preferenceWindow", u"...", None)) + self.labelgit.setText(QCoreApplication.translate("preferenceWindow", u"git supported", None)) + self.checkGitSupported.setText("") + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabTestParams), QCoreApplication.translate("preferenceWindow", u"Tests parameters", None)) + self.label_8.setText(QCoreApplication.translate("preferenceWindow", u"Font", None)) + self.label_9.setText(QCoreApplication.translate("preferenceWindow", u"Font size", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabLog), QCoreApplication.translate("preferenceWindow", u"Log", None)) + # retranslateUi + diff --git a/src/testium/main_win/preference_win/preference_core_win.ui b/src/testium/main_win/preference_win/preference_core_win.ui new file mode 100644 index 0000000..948c9e1 --- /dev/null +++ b/src/testium/main_win/preference_win/preference_core_win.ui @@ -0,0 +1,467 @@ + + + preferenceWindow + + + + 0 + 0 + 597 + 386 + + + + + 0 + 0 + + + + + Sans + 9 + + + + preferenceWindow + + + + + + + Sans + 10 + + + + 0 + + + + Interface parameters + + + + + + QFrame::NoFrame + + + QFrame::Sunken + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAsNeeded + + + true + + + + + 0 + -9 + 557 + 152 + + + + + + + Hide documentation pane + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + + + + + + + + Hide log pane + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + + + + + + + + Tests selection available + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + + + + + + + + Show step time column (requires restart) + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + + + + + + + + Test tree item double click enabled + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + + + + + + + + 0 + + + + Colored icons + + + + + Black icons + + + + + + + + Icons theme + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + Tests parameters + + + + + + + 0 + 0 + + + + true + + + + + 0 + 0 + 555 + 141 + + + + + 0 + 0 + + + + + + + + 0 + 0 + + + + Default log files path + + + + + + + + + + 0 + 0 + + + + + + + + ... + + + + + + + + + + 0 + 0 + + + + Default reports path + + + + + + + + + + 0 + 0 + + + + + + + + ... + + + + + + + + + git supported + + + + + + + Qt::RightToLeft + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Log + + + + + + + 0 + 0 + + + + true + + + + + 0 + 0 + 555 + 72 + + + + + + + + 0 + 0 + + + + Font + + + + + + + + 0 + 0 + + + + + + + + Font size + + + + + + + 1 + + + 8 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 0 + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + diff --git a/src/testium/main_win/preference_win/preference_win.py b/src/testium/main_win/preference_win/preference_win.py new file mode 100644 index 0000000..81598b2 --- /dev/null +++ b/src/testium/main_win/preference_win/preference_win.py @@ -0,0 +1,186 @@ + +from PySide6.QtCore import (Slot, Qt) +from PySide6.QtWidgets import (QDialog, QFileDialog) +from PySide6.QtGui import (QFont) + +from main_win.preference_win.preference_core_win import Ui_preferenceWindow + +import interpreter.utils.settings as prefs + +class PrefWindow(QDialog): + def __init__(self, parent=None): + super().__init__(parent) + self.ui = Ui_preferenceWindow() + self.ui.setupUi(self) + self.setModal = (True) + self.ui.buttonBox.accepted.connect(self.on_buttOKPressed) + self.ui.buttonBox.rejected.connect(self.on_buttCancelPressed) + self.finished.connect(self.on_finishedPressed) + self.ui.butLogPath.triggered.connect(self.on_butLogPath_pressed) + self.ui.butReportPath.triggered.connect(self.on_butReportPath_pressed) + self.elements = { + prefs.settings.SettingsHideDocPane: { + 'type': 'bool', + 'widget': self.ui.checkDocPane, + 'value': prefs.settings.hide_doc_pane, + 'default': False, + 'changed': False, + }, + prefs.settings.SettingsHideLogPane: { + 'type': 'bool', + 'widget': self.ui.checkLogPane, + 'value': prefs.settings.hide_log_pane, + 'default': False, + 'changed': False, + }, + prefs.settings.SettingsShowCheckboxes: { + 'type': 'bool', + 'widget': self.ui.checkBoxTest, + 'value': prefs.settings.show_checkboxes, + 'default': False, + 'changed': False, + }, + prefs.settings.SettingsShowTimeColumn: { + 'type': 'bool', + 'widget': self.ui.checkShowTime, + 'value': prefs.settings.show_time_column, + 'default': False, + 'changed': False, + }, + prefs.settings.SettingsLogPath: { + 'type': 'text', + 'widget': self.ui.editDefaultLogPath, + 'value': prefs.settings.log_path, + 'default': '$(test_directory)', + 'changed': False, + }, + prefs.settings.SettingsReportPath: { + 'type' : 'text', + 'widget': self.ui.editDefaultReportPath, + 'value': prefs.settings.report_path, + 'default': '$(test_directory)', + 'changed': False, + }, + prefs.settings.SettingsDblClickEnabled: { + 'type' : 'bool', + 'widget': self.ui.checkDblClick, + 'value': prefs.settings.dbl_click_enabled, + 'default': False, + 'changed': False, + }, + prefs.settings.SettingsIconsTheme: { + 'type' : 'combo', + 'widget': self.ui.choiceIconsTheme, + 'value': prefs.settings.icons_theme, + 'default': 0, + 'changed': False, + }, + prefs.settings.SettingsLogFont: { + 'type' : 'font', + 'widget': self.ui.font_choice, + 'value': prefs.settings.log_font, + 'default': 'Monospace', + 'changed': False, + }, + prefs.settings.SettingsLogFontSize: { + 'type' : 'int', + 'widget': self.ui.font_size, + 'value': prefs.settings.log_font_size, + 'default': 8, + 'changed': False, + }, + prefs.settings.SettingsGitSupported: { + 'type' : 'bool', + 'widget': self.ui.checkGitSupported, + 'value': prefs.settings.git_supported, + 'default': True, + 'changed': False, + } + } + + self.restore_prefs() + + def store_prefs(self): + for k, v in self.elements.items(): + self.elements[k]['changed'] = False + if v['type'] == 'bool': + val = v['widget'].isChecked() + if self.elements[k]['value'] != val: + self.elements[k]['value'] = val + self.elements[k]['changed'] = True + + if v['type'] == 'text': + val = v['widget'].text() + if self.elements[k]['value'] != val: + self.elements[k]['value'] = val + self.elements[k]['changed'] = True + + if v['type'] == 'font': + val = v['widget'].currentFont().toString() + if self.elements[k]['value'] != val: + self.elements[k]['value'] = val + self.elements[k]['changed'] = True + + if v['type'] == 'int': + val = int(v['widget'].value()) + if self.elements[k]['value'] != val: + self.elements[k]['value'] = val + self.elements[k]['changed'] = True + + if v['type'] == 'combo': + val = int(v['widget'].currentIndex()) + if self.elements[k]['value'] != val: + self.elements[k]['value'] = val + self.elements[k]['changed'] = True + + if self.elements[k]['changed']: + prefs.settings.set_value(k, v['value']) + + prefs.settings.sync() + + def restore_prefs(self): + for k, v in self.elements.items(): + v['value'] = prefs.settings.value(k, v['default']) + if v['type'] == 'bool': + v['widget'].setChecked(v['value']) + elif v['type'] == 'text': + v['widget'].setText(self.elements[k]['value']) + elif v['type'] == 'font': + f = QFont() + f.fromString(self.elements[k]['value']) + v['widget'].setCurrentFont(f) + elif v['type'] == 'int': + v['widget'].setValue(self.elements[k]['value']) + elif v['type'] == 'combo': + v['widget'].setCurrentIndex(self.elements[k]['value']) + + def isChanged(self, setting): + return self.elements[setting]['changed'] + + @Slot() + def on_buttOKPressed(self): + self.store_prefs() + self.accept() + + @Slot() + def on_buttCancelPressed(self): + self.restore_prefs() + self.reject() + + @Slot() + def on_finishedPressed(self): + self.restore_prefs() + + @Slot() + def on_butReportPath_pressed(self): + path = QFileDialog.getExistingDirectory(self, "Select the default report directory", + self.ui.editDefaultReportPath.text()) + if path: + self.ui.editDefaultReportPath.setText(path) + + @Slot() + def on_butLogPath_pressed(self): + path = QFileDialog.getExistingDirectory(self, "Select the default log directory", + self.ui.editDefaultLogPath.text()) + if path: + self.ui.editDefaultLogPath.setText(path) diff --git a/src/testium/main_win/resources/RIOV-2478BF.PNG b/src/testium/main_win/resources/RIOV-2478BF.PNG new file mode 100644 index 0000000..f8d632e Binary files /dev/null and b/src/testium/main_win/resources/RIOV-2478BF.PNG differ diff --git a/src/testium/main_win/resources/about_win.qrc b/src/testium/main_win/resources/about_win.qrc new file mode 100644 index 0000000..ab44657 --- /dev/null +++ b/src/testium/main_win/resources/about_win.qrc @@ -0,0 +1,5 @@ + + + testium_logo.png + + diff --git a/src/testium/main_win/resources/about_win_rc.py b/src/testium/main_win/resources/about_win_rc.py new file mode 100644 index 0000000..03af375 --- /dev/null +++ b/src/testium/main_win/resources/about_win_rc.py @@ -0,0 +1,1838 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.10.1 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00p\xc7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x01\xdd\x00\x00\x01\xc1\x08\x06\x00\x00\x00,)a\x8e\ +\x00\x00\x00\x01sRGB\x01\xd9\xc9,\x7f\x00\x00\x00\ +\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\ + cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\ +\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\ +\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKG\ +D\x00\xc9\x00\xc9\x00\xc9a\x80\xe6\x0e\x00\x00\x00\x09p\ +HYs\x00\x00.#\x00\x00.#\x01x\xa5?v\ +\x00\x00\x00\x07tIME\x07\xe9\x0c\x17\x0b2\x18\x07\ +\xe8A\x0b\x00\x00 \x00IDATx\xda\xec\x9dw\ +\x9cT\xe5\xd5\xc7\x7f\xe7\xb9\xf7\xce\xcc6\xca\x82\x88H\ +\xb1PL0\xa8\x11\xb1\x1bD\xa3A\xc5\x9a\xb5\x17\xea\ +\xec\xaa\xd1T\xbby\xb3I,1\x9a\xa8I\x8c\xbb\x03\ +\x08\x82-l\xa2X\xa21\xb1`\x02\xc6\x18Q\xb1E\ +\xc1\x82\x82\x02\xca.,l\x99\x99[\xce\xfb\x07\x88\x94\ +e\xdb\xdc\x99{\x9f\x99\xf3\xfd#\x9f(x\xef\x9ds\ +\xef\xf3\xfc\x9es\x9e\xf3\x9cC\x10\x04!/x%\x0e\ +s\xa4\x1d\xeb\x8f\x883P1\x97\x93R\xe5\xc4\x5c\xce\ +\xa0r\x10\xca\x89\xb9\x1c@\x19@\xc5D(\x01s\x84\ +\x81\x9e \x98`\xea\xb9\xf5\xb5\x88\xd0{g\xf7a\xc6\ +z\x00\xdc\xe6\x1f\x12\xaf\x07\xef\xf8g\x04\xb4\x02H\xee\ +\xf8\xf7)\xcd\x8c\xe6\xcd\xff\xed|\xab\xc6\xb9K\xde\xa4\ +\x90\xcf\x98b\x02A\xd0\x87\xd6)\xb1\xc1d\xd9\xfb\x18\ +\x1e\x8d`\xa2=\x09\xbc;\x81\x062x\x08\x88\xfaS\ +\xd45\x00\x02\x88\xb6\xa8'm\xa5\xa4\xdb\x09\xdeV\x7f\ +\xd6\xf9g B\xafv\xfe\xb4wW\xae\xb5\xf5c\xb1\ +\x87\xa7\xe5\x0d\x0b\x22\xba\x82 \xe4\x94\xb7+`\xed\xdd\ +;:\x88\x98G*\xc3\xfb:\x18{\x11h$\x13F\ +\x11\xdc2@\x01\xeaK\x9d\xfc\xf2\x7fI\xfb\xdf\xed\xb1\ +\xfaP\xde\xbe \xa2+\x08B\xd6\xf8\xbc\x02%e\xe5\ +\xe67M\xc6A \x1c\x04\xe0\x9b\x00\xedE\xe4\x99[\ +\x5cP\xea\xb23\xaa%\x0e\xf8\x03\xf9\x22\x04\x11]A\ +\x10\xe0\xd7\x9e\xeb>\xca\x1a\x11\xf1p \x08\x07*\xe0\ +@&\x1cD@$\xef\x15\xb5\x03\x18H~\xb6\xd2\xfe\ +\x9f|%\x82\x88\xae \x08\xdd\xa2\xfe<\x94\x95\x96\x19\ +G\x11\xd48\x05\x1c\xca\x8c\xfd\x09(\x82\x02\xba\xb1\x95\ +\x9a\xd7\x10\xe3\x8daO!-\x96\x10Dt\x05A\xe8\ +\x14+*\x10\xdb\xa5\xdc8LA\x8dS\x84q\xcc8\ +\x88\xb6\x1ac$\x0a\xbbS<\xe0\xbfaZ,\xf5(\ +5/\x02h\x02\x88\xbf\x0e\xa6\x92\xcd+\x83U`\xfa\ +\x90\x81\xf7\xc1\xf8wZ\xd9\xcf\x97\xd6\xe0\x0by{B\ +\x97\x16\x98b\x02A@\xf7\x8f\xe8(s\x8c\x09\x8c\x03\ +\xd3\xd1 \x1cF@L,\xd3\x0d\xd1\xf5pn$a\ +?\x18\xf4s$+\x8dq\x06\xd1\xbd\x04\x1a\x88\x8eC\ +\xe2L\xe07<\xa6\xc7\xd8\xa1\x07\xa23\xd3\xef\xca\x9b\ +\x14Dt\x05\xc1G\xd6OD\xcfb\xcb\xfa\x0e)>\ +\x15D\xe3\x09\xe8)VA\xa6\xfb\xb9\x9cr\xec\xfe\xa5\ +3\xf0y\xc0\x82{\xacA\xea\xf1\xee/\x9c\xf8U\xf6\ +0\xa79\xed\xcc\xee5\x1b\x8d\xf2f\x05\x11]A\xe8\ +\x06MS\xd1/\xa2\xac\xef\x10\xa1\x02\xc0\xb7\x89\x10\x15\ +\xab\xf8\xa9\xba\xfc\xbaY\xeb\x1c\x10\xf4;\x8e\x1a\xd6\x9b\ +D\xe8\x97\xf9\xcfA\x13\xc0\x0f\xa4\x98~_\x9a\xb0\xdf\ +\x92\x17,@\xf6t\x05\xa1\xa3I\xd8\xfaF\xd4\xe4S\ +\x08t\x0a\x03\x07\x92,P\x91\xbd\xfd\x5c\xfaG\xd0\xcf\ +\x105\xcd\xdf\x112\x17\xdc\xcd{\xf7\xa5\x00\xc5\xa3\x84\ +iv\xa5\xf5\x0f\x8f\xbc\xdf=Z\xef>uf\x1d<\ +y\xdb\x82L$\x82\xb0\x99\xd4\xe4\xc8p\x8a\xf0y\x04\ +>\x8f@{\x8bEr\x83\xcd|TQ\xad\xf3\xaf\xa0\ +\xee\xdf2\xcd\x1cm\x19\xf4r6\x17V\xcc\xfc>\x18\ +\xbfkt\x9cY}\xefA\x93\xbcu\x11]A(H\ +\x1a\xa7\xa0w\xb1eV\x10\xd3\x85\xbc)\x11J\xc6\x04\ +r\x19YF\xfd\x12\xb6\xfb\x8fN\xc0\x09L\xf4\xab\xcc\ +:\x02}7G\xbfw\x03\x03\xb3]\xc7\xf8M\xd1\xcc\ +\xe4'\xf2\x05\x88\xe8\x0aB\xde\xf3Y\x1cE}\xc9:\ +\x85\x80\xf3A8\x8e\x00K\xac\x12T\x12\x15\xcf\xb1j\ +\x9c\x8b\x10`-k\xd3r?$\xc0\xc8q\xf2\x98\x0d\ +\xe6:\xdb\xc3\xed\xc5\xd3\x9dW\xe4K\x80\xec\xe9\x0aB\ +>Q\x0d\xd0\xd5U\xc6X\x03t!\x98N'B\x0f\ +\xb1\x0a\xc2Po\xf9/A\xde\xdf0\xdci\xb9\x16\xdc\ +\xcd\xde\x8e\x05\xa2s#\x06\xceu*\xadE\x1e\xe3w\ +o\xc0~8H\x8f_\x10OW\x102\xa6!\x8e\x1e\ +e\xca<\x9b\x18\x97\x81h_\xb1H\xa8B\xcb\x1bV\ +7\xd8\xbb\x0e\xaak\xa3\xe5\x1fr\xd3Xbx\xb9\xb9\ +\x9c\x88\x06\x84\xe4\xe8\xd4*f$Ri\xfb\x0fe\xb3\ +\xb0V\xbe\x10\x11]A\xd0\x86\xe6\xb8u@D\xf1\xc5\ +\x00\x9dK@\x89X$\x8c\xa2\xcbs\xadZ\xe7\xc2\xa0\ +\xee\x9f\x9ef\x9d\xa5\x0c<\x14\xc2\xc5H+\x88\xefK\ +y\xf4;9r$\xa2+\x08\xa1e\xf9DD\x07\xc4\ +\xac\x0a\x05\x5c\x02\xe0P\xb1H\xb8q]:9:=\ +\xfdxP\xf7w*\xad\x7f\x82pd\xc8\x0b\x87<\xeb\ +\xb9t\xe7\xcd\xd3\xd3OT\x03,_\x8d\x88\xae \x04\ +Nrjt\x0f\xa5\xbc*\x22L&\xc2.b\x11-\ +\xaaP5~\x9a\xb4w\xddc6RA\xdc\xbf\xb9\xd2\ +\x1a\x15%,\xd1\xc8bK\x5cO\xdd\xf0\xe8\xba\xf4\xc3\ +r\xdeWDW\x10\x02\xa1)n\xed\x1b%\xbe\x12D\ +gK\x06\xb2v\xa1\xe5{\xadZgbP\xf7\xb7+\ +\xcdZ\x22\x8ak\x98\xed\xfd\x0e{t\xcb\x1b\xb0\x1f\x90\ +\xa4+\x11]A\xc8\x09\xadS\xcd#L\x83\xae\x02\xe1\ +D9W\x0b\x09-w\x91\xf5\x17\xa3W\x09[+u\ +\xde\xebg\xf02\xf6\xe8\xa6e\xeb\xec\xfbG\xd6\xc1\x96\ +/J\x1f\x94\x98@\xd0Il\xedJ\xeb\x1f\x96I\xff\ +\x22\xc2I\x22\xb8\xdaf-7}\xbe>\x1dX\xe9\xc7\ +\x126'\xea\x9e\x5cG\xa0aJa\xd6\xf0rs\x99\ +\x1d7\xbf\xbf\xa2B\xba[\x89\xe8\x0a\x82\x0f\xcc\xab\x80\ +JM\x8bLp*\xcdW6\x8b\xed\xb1b\x15\xede\ +\xf7\xa9\xa0\x8e\x09U\x03\x04FU\xbeX\x92\x88\x86\x90\ +\xa2;\xfa\x97\x9bK\xed*3>\xafB\xe6t\x09/\ +\x0b\x02\xba\xd7\xabv\x14\xac\x8bH\xf1\xf5\x04\xdaC,\ +\x82|jX\x7fA\xa4\xc6\xbe/\x88{'\xab\x8c\xe3\ +L\xa8\xa7\xf38\x8c\xb0\xd8!\xbe\x22V\xe3>/_\ +\x9ax\xba\x82\xd0)O$5-2a\x7fe\xbe\xaa\ +\x14f\x88\xe0\xe6]\xd6\xb2\xddj\xdb\x7f\x0d\xea\xfe\x06\ +\xe8{\xf9\xedF\xd1\x81&\xd4sv\xa5\xf5\x8f\xe6i\ +\xd6~\xf2\xc5\x89\xa7+\x08\xed6\x117I\xdd\x0c`\ +\xb4X#oE\xf7\x1fV\x8d}\x5c0^nl\x88\ +\x01\xf7\x83 \xca>\x06\xb4w\xee\x01\xfc\x17\xd75\xae\ +\x8c\xcdH-\x97\xafO<]A\x00\x00\xb4N3\x0f\ +u*\xad\x05&\xa9\x7f\x88\xe0\xe6\xbd\x14<\x1a\xd8d\ +\xe7\xb9\x17\x17\x8a\xe0n\xee\xeb\xab\x88\xa8\xc20\xbd\xb7\ +\xd3\x95\xd6\x0d\x9fWHe6\xf1t\x05H\xa3x\xbe\ +\x91@\x13\xc4\x1a\x85\x81\x93R{\xc5f\xa5>\xca\xf5\ +}WT \xd6\xbf\x8f\xb5\x82\x80\xbe\x05|6z\x85\ +\x07\xf5\xfdhm\xfa\x11\xf9\x12Et\x85\x02\xa2e2\ +v\xb3,\xf3f\x80. \x92hK\x01M\xfa\x1f[\ +\xb5\xce\x1eA\xdc;]e]\xa4\x80\xd9\xf2\x16\x00f\ +\xfc\xd5M\xab\xcb\x82X\xfc\x08\x12^\x16r\xc8\xb2\xf1\ +\x88\xd8U\xe6\x15\x96e\xbdKD\x17\x89\xe0\x16\x1c\x0b\ +\x02\x9b\xe8\x18\x97\x88\xf9\xb7\x84\x9dO4\x22\xde\xdbv\ +\xa5y\xdd\xb2\xf1\x88\x88EDt\x85<$9\xcd8\ +f\xcf\xc1\xe6\xab\x04\xfa\xb5\xf4\xb2-P\x0f\x8b\xe8\x99\ + \xee\xdb\x127\xc7\x800F\xde\xc06\xc2[DD\ +7\xec1\xd8|;Yi\x1c/\x16\x11\xd1\x15\xf2\x84\ +Ted\xa8]e>f\x1a\xea\x19\x10\x8d\x14\x8b\x14\ +l\xd62\xdb\x9e\x1d\x88\xe8Z$^n;\xc55\x86\ +\x9a\xa4\xfefW\x9a\xf77O\xc4\xaeb\x11\xd9\xd3\x15\ +4e\xedd\x94\xf6\xb0\xac\xeb\x08\xf8!\x11\xa2b\x91\ +\x82\xdfH|\xdd\xacu\x0e\xc8\xf5m7NB\xdfX\ +\xd4ZA\x902\x89\x9dX\x18\xade\xe0\x92H\x8d]\ +'\xd6\x10OW\xd0\x88t\xa5uvO\xcb|W\x11\ +\xae\x16\xc1\x156'\xef\xdc\x1f\xc4}cQs\x8a\x08\ +n\xa7=\xb0\xbe\x0a\x98gW\x9a\x0fn\xb8\x10\xe5b\ +\x11\xf1t\x85\x90\xd3\x1cG\xff\x882\xef\x22\xd0\xe9b\ +\x0da+\xc1\xdd\xd0\xdaj\xef\xd9c\x0e\x1a\x90\xe3\xba\ +\xdd\xa7\xf51\xdf'\xd0\x9e\xf2\x16\xba\xec\xf5\xae\xf1<\ +\xaa\x8c&\xd2\x8f\x8a5\xc4\xd3\x15\x10\xbe\xd2\x8d\xe9\xb8\ +5-\xa2\xacwEp\x856T\xf7\x97\xb9\x16\x5c\x00\ +8\xa5g\xc6o\x975\xd8\xd7\ +\x8c\xac\x83-\x16\x11\xd1\x15rHS\x9552\x06\xcc\ +\x04p\xb0XC\xbf.?`\xfe\x82\x08\xab\x19\xb4\x1a\ +\xe0\xcf\x19\xb4\x8a\xc0\x8d\xf0\xb0\x11\x0a\x0e{\xb4\x9eA\ +\x1e\x93\xbb\x1e\x0c\xc7#\xda\xa8\x08\xa5\xc4\x5cL\xa4J\ +\xc1\xe8I\xe020\xca\x98\xa8\x14\x80\x05F\x8a\x88\x9b\ +\x99\xe8\x93\xb4\x83Wo\x9ba\xbfU\x0dpP\xbf3\ +]e\xdd\xa1\x80\xef\xcb\x1b\xf7\xfd\x03z\xd1N\x1bg\ +\x15\xcdJ\xae\x14c\x88\xe8\x0a\xb9\xf0n\x87\x9bWB\ +Q5A*\xd9\x84TT\xd3`^\x0e\xa2\x0f\x99\xf1\ +\x01\x81?\xf0X}h\x83?\x80\xb2\xd7\x94\xd6\xe0\x8b\ +|\xb7\xc1\xe7\x15(\xe9]n\xad$B/\xf9\x22\xb2\ +s\xb4\xc8e\xef\xfcX\xad\xfb\xb4XCDW\xc8\x12\ +\xad\xf1\xd8 K\xb9s\x00\x8c\x15k\x84b\xe2k&\ +\xc6;\x0c~\x0b\xc0\xdb.\xf1\x9b\x80\xf5\xdeK\xef&\ +W\x06\x11\xce\x0d\x13v\x95\x19'P\xad|%\xd9m\ +\x1b\xc8\x8c\x9b^\x5cjW\x17\xfa\xf7&\xa2+ \x0b\ +U\xa5\xceP\xc4\x09\x82\x9c\xdd\x0bh\x7f\xf4\x130\x16\ +\x03X\xec\xb1z\x8bAo>\xb6.\xb5\xfc\xcc:x\ +b\x9d\x1dq*\xcd% \x1a%\x96\xc8\x89\xf8>\x97\ +N\xd9\xe7\x96\xcc\xc6\x1a\xb1\x86\x88\xae\x00\x1f\xc2t}\ +\xcc\xdb\x094M\xac\x91\xbb3\xad \xbc\x08\xe6\x17=\ +\xf0+6\xb9\xaf\x14BH\xd8/Z+\xcd#-\xa2\ +\x7f\x8a%r\x1auY\xe5\x82\xcf\x89\xd58/\x885\ +Dt\x05t\xb7\xd0\x85u@D\xf1\x03\x04\xdaG\xac\ +\x91U\x91\xad\x07\xf13\x00\xfe\x95vi\xe1\x7f\x97\xd9\ +oI\xb8\x0e\x99\x84\x96\x1f\x22\xd0Yb\x89\x9c\x7f\xc7\ +\x0e\x88\xaf\xb0j\x9c;\xc4\x1a\x22\xba\x02\xbaV\xe8\xe2\ +\xba\xb8y9\x88n\x91\x12\x8eY\xf1\x0a\x5cb~\xdd\ +cz\xc6#\xef\x99\x0f\x1a\xdc\x17\xe4\x08\x06\xfc\xeb\xd3\ +\x1c\xb1>&\xc0\x12k\x04v.{\xc6\xd2\x06\xe7\x12\ +\xf9\xa6!\xc51\x04t\xe2(\x10v\x89\xb2u\x1f\x11\ +\x8e\x13k\xf8:\x11\xad\x00\xf0\xb4\xc7\xea\xe9\xa4\x9b~\ +\xb6\xe7L\xac\x13\xabda2\xb3\xacJ\x11\xdc\xc0\xbb\ +\x16M\x1d^n\xed\xb1\xfeb\xbb\xa2\xd7\xddX/\x16\ +\x11OW\xd8\x99\x970\xcd\x1cm)\x92\ +\xf1\xe8^\xa6\xf2$aG\x8f\x04\xab\xb9K\xd8\x99<\ +:\x01\x07\xb2\xa7+ \xdf\xf7o\xc9\xfa\x03\x11*\xc5\ +\x1a\x1d\xb71\x03\xe3Y\x8f\xa9\xf6\xfdu\xe9G\xc5\xab\ +\x0d\xb9\xe7\xc0,\x1e\xae>G\x8a.\xd8\x0ff\xd9\xf2\ +\x89\xce\xd9{\xccFJ<]!/Y;\x19\xa5=\ +#\xd6\x9f\x088A\xac\xd1\xaeW\xdb\xc4\x84\x99\x9e\xad\ +~/G\x1d4\xfb\xbe-\xab\x91\x08J\xac\xa1\xcd\xc2\ +\xf6\x1f\xeb\xea\xed\xd3\xfa\xd5\xa1YDW@\xfe%L\ +\xd9O\x80\xe8\x00\xb1\xc6N\xc5\xf6s\x10\xff\xbe\xb5\xc5\ +\xf9c\x8f9h\x10\x8b@\xc7D\xaa7A\xb4\xafX\ +B\xaf\xde\xbcM\xca>\xb1\xd0\x8ah\xc8\xca\x10\xf9\xdd\ +l\xdeb\xfbE\x11\xdc\x9d\x1e\xf7\xf9\x88=\xfeA}\ +\x8b\xbd\xa7U\xe3\xdc \x82\xab\xf1\xbb$\xcc\x14+h\ +\xe7\xf2\x1dV\xea\x99\x0b[&\x17VB\xa7x\xbay\ +Jr\x9aq\x8ca\xa8\xbf\x10\xd0S\xac\xb1\x83\xda\xfe\ +\xd7#\xdc\xfa\xe2\xbb\xf6\xc3\xd2\x5c\x00y\xd4\xb8\xde|\ +\x9d\x88\x86\x8a5\xb4K\xaez\xcfu\x8d\xef\xc4f\xa4\ +\x96\x8b\xe8\x0a\xd0\xb4\xc2\xd4E\x04$$Cy\xc7\xde\ +\x9f.y7\xc4j\xdc\xe7\xc5\x1a\xf9G\xf34k\xbf\ +\x88\x81\xe7\xa4\xef\xb3\x96\xc2\xfbY\xca\xa5\xef\x94\xce\xb0\ +\xdf\x84\x84\x97\x05hT\x7f\xd6\xa92\x7fF\xc0,\x11\ +\xdcm<\xdb\x97\x1c\xd7;\xd6\xaa\xb5\x8f\x11\xc1\xcd_\ +J\xa6\xdbK\xd2\x8c\xa3\x19,Ip\xfae5\x0f\x88\ +\x1a\xf8g\xeb4\xf3(\xf1t\x05-\x98W\x01uj\ +\x1f\xeb.\x05T\x895\xb6\xa8\xed\x9b.\xab\xeb\xa3\xb5\ +\xe9\xc7\xc4\x16\x85\xc3\xfa\x89\xe8Y\x1c\xb3~E\x8c\xb8\ +d4k\x97\xd5\x9c\xf4\x98\xce\x8d\xd6\xa6\x1f\x11\xd1\x15\ +B\xcb\x82\xb10\x0e\x1fa\xce$\xa2\x8b\xc4\x1a\x00\x83\ +\x971\xa8z~\xbd\xfdP\xa1W\xbfA\x81'\x12F\ +\x99\xaf\x06\xe8l\x22\xa9I\xa0S\xcfi\x80/\xb1j\ +\x9c\x84\x88\xae\x10:\xde\xae\x805\xbc\x8f9\x97@g\ +\xc9\xbe\x10\xaf`\xa6_\xbe\x01{V!W\xbc\x11\xb0\ +C\xc5*\xa5\xbc\xcb\x89q\x0e\x11\xfa\x89E\xf4\xc0c\ +\xfcj5s\x89\xe7T\xe5\xd3\ +\x22ZDWSV_\x80\xe2>\xc5\xd6\xc3D8\xbe\ +\xa0\xcb5\x82\xe7\xdai\xe7\xea\xe2{\xb0J\xbe\x0a\xa1\ ++\x0b\xd6\xfeQc\xac\x22u2\x81O\x22\xd0`\xb1\ +Jh\xc7\xf9\x93\xf5\xcdvE\xff\xb9h\x11\xd1\x15\x10\ +T\xd9\xbb^\x11\xebq\x00c\x0bx$\xbe\x9cv\xf9\ +\xf2\xe2\x19\xce\x7f\xe4\x8b\x102\xa5\xb9\xca\xda?\xc2<\ +\x81@\x13\x980\x9adn\x0c\x1b\x0b\x9b\x92\xf6I\xbd\ +f\xa3QDW\xc8)\xeb/F\xafR\xb6\x9e\x04p\ +h\xc1v\xfda\x5c3\x7f\x9d=G\x92\xa4\x84l\xd0\ +:)6\xd0\x8c:\xa7\x00t\x1a\x80\xb1\xd2204\ +\x83\x7fqk\xda\xf9N\xd9,\xac\x15\xd1\x15r'\xb8\ +\x9e\xf9\x0c\x88\x0e,\xc0\x10S\x9a\x19w6\xb1}C\ +y\x02\x1b\xe4k\x10r&\xc0\x963\x19\x84\xc9D4\ +D,\x12\xf8\x1e\xef;i\xcf9\xa6$\x81\xd5\x22\xba\ +\x02\xb2]\xe6\xae\xbc\xdc\xfa;\x08\x87\x15\xa0w\xfb\xbc\ +gSU\xf4\x9e\xf4R\xf9\x12\x04\x04\xd5\x1a\x13\xd6\xb9\ +D|-\x11\x8d\x10\x8b\x04:!\xbc\xd1\xd2\xea\x1c\xad\ +k\xadt98\xae\x01\xcb\xc6#\xd2\xbb\xdc\xaa+4\ +\xc1e\xa0\x91=\xfe\xc1#\x0d\xf6\xb1\x22\xb8B\x90\x8c\ +N\xc0\x89$\xec9\x8f48_w]:\x19\xcc\xaf\ +\x89U\x02+_5\xaa\xb8\xd8z\xb2\xfe<\x94\x89\xa7\ ++de\x85\xbd\x1f\x99uDtj\x81\x85\x91\x1e\xb6\ +\xd3\xce\xf7$+Y@x+\xc0\x9d\xa1\x98\xaf\x07\xd1\ +(\xb1H \x8b\xf2g\x97\x7fl\x9f0\xec)\xa4E\ +t\x05\xdf\x06\xf6i\xe5\xe6\xbdDt~\x01\x0d\xa4U\ +\x9eK\xdf\x8bNO?,_\x80\x00\x0d\xea\x9d_\x1b\ +\xb7*H\xf1\x0d\x04\x1a&\x16\xc9-\x1e\xf0\xfbH\x8d\ +}9$\xbc,\xf81\x98O-\xb7\xfeP(\x82\xcb\ +\x003\xf3\xdc\xa4g\x7fC\x04W\xd0h\x9cr$a\ +\xcf[Z\xef\x8cdp%C\x2239\x16\xb0\xcb\xd2\ +q\xebB\xf1t\x85\x8cIWZ\xb7(\xc2\x95\x05\x12\ +J\xfe\xc0e\x8e\xc7j\xdd\xe7\xe4\xcd\x0b\xd0\xbd\xafo\ +\x1f\xf3\x87`\xba\x82\x08=\xc4\x229Y\xb07\xa7\x80\ +\x83Kk\xec\xb7Et\x85naW\x9a\xd7\x11\xd1\x0d\ +\x05R/9\xd1h;?\xee{\x0f\x9a\xe4\xcd\x0b\xf9\ +\xc2\xc6I\xe8\x1b\x8dX?%\xe0\x12i\xb6\x90\x13\xfe\ +\xf3p\xbd}\x98\x0eg\xf7Et\xc3\xe6\xe1\xc6\xad)\ +JaF\x01\xacN\xd7x\xecM\x8d\xd6\xbaO\xc8[\ +\x17\x90\xcf\x9d\x8e\x80;\x098F\xac\x81l7H\x98\ +\x16\xa9\xb5g\x88\xe8\x0a\x9d&Ye~\xcb\x00\xfd=\ +\xdf\x1b\xd03\xe3)\xdb\xb6\xa7Hf\xb2P(\xa4\xa6\ +E&(\xc3\xbb\x93@{\x8a5\xb2\xb6M\xf5\xc9\xf2\ +\x8f\x9daa\xcff\x96D\xaa\xb0\x0c\xca\xca\xc8\xd7\x0c\ +\xa6\xf9\xf9,\xb8\x0c$\xd9\xe3\x8b\xadZ\xfb\x04\x11\x5c\ +\xa1\x90\x88NO?\xfe\x85\xe7\x8c\xf4\x18?gF\xab\ +X$\x1b\x1e$\x0d\x1e<82\x01\x92\xbd,\xa0\xc3\ +\x10\x14vQ\xf0\x9e B\xaf<\xde\xbb]\x9avq\ +\x88\x95pj\xe4\x8d\x0b\x85\xc8\x80\x04Z#\xb5v\xb5\ +\x9bV#\x19\xf8\x87X$\x1b\x82\xe6\x9d%\xa2+\xb4\ +\xcb\x8a\x0a\xc4bl\xcd'\xa2\xbd\xf2\xb9\xd0E\xb3r\ +\x0e.\x99n/\x917.\x14:\xb1Y\xa9\x8f\xac\x1a\ +\xfb8\x0f8\x93\xa1w\xf1\xfe\x10r\x98\x88\xae\x80\xf6\ +\xce\xe2\xf6/7g\xe5kyGf\xa4\x18\x5ci\xd5\ +8g\xf4\xba\x1b\xeb\xe5\x8d\x0b\xc2WDj\xec\xbat\ +\xd2\xde\x97\x99\xeb\xc4\x1a\xf0\xabD\xe4\x80y\x15\xe1\xd6\ +5I\xa4B\xa0gq\x7f\xa1\x08?\xcd\xd3p\xf2\xa7\ +\xb6\x8b3\xa4\xdf\xad tL*\x1e9E\x91\xf7G\ +\x22\x1a \xd6\xc8\xec\xcc\xaeUc\x97\x8a\xa7+\xb4%\ +\xb8g\x13\xe1\xfa<\xfd\xf2\x17\xd9\xb6s\x90\x08\xae \ +t\x8eh\x22\xfdhs\xca\xf9:3\xdf/\xd6\xc8\x88\ +\x17 \xe1ea{Z+\xcdC\x08\x98My\x18i\ +\xf0\x80?~\xf4\x89=N\xb2\x93\x05\xa1k\xf4\x9a\x8d\ +F\xab\xd69\xdf\xf3p\x11\xb3\xf4\x8c\xee\xd6\xfc\xe3R\ +\x8d\x9c\xd3\x15\xb6\xa1y\x22v\x8dD\xcd\xc5D\xb4{\ +\x9e\xed\xdf: \xbe\xd4\xaaq\x12\xf2\x96\x05!3\x92\ +\x93\xa2{\x9a\x11\xef\xbeB\xec\x9f\x9dA\xc2\xe6\x9f\xad\ +\x1a\xa7B<]\x01[\xb7\xe9\x8bF\xad?\xe5\x9d\xe0\ +\x02\x1b=\xf2N\x15\xc1\x15\x04\xf8\x96\xe1\xbc\xf0=\xfb\ +(\x06_\xcd\xd0\xabu]P\xd3\xeb\x86\x8d\xcedH\ +\xede\x01\xdb\xee\xe3\xde\xa9\x08\x97#\xbfV\x97\xcbS\ +\xa0\x93t)6.\x08\xba\xd1\x1a7\x0f7\x09\xf3$\ +\xc9j\xa7\x93\xd0\x0b\xadl\x9fQ\x96@=\xa4\xb5\x1f\ +\xb4\xeee\x9b\xaa\x8c\x9c\xe1\x9b\xe0VY\xe7\xe7\x9b\xe0\ +\x02\xf8O:\xe9\x1c\x22\x82+\x08\xd9\xa3(\xe1,J\ +\xb3s 8\xfcIB\x08 \x87\xe4\xbd\x06\xfb\xdb\xba\ +\x08\xae\x88n;\x9c\xda\xc7\xba\x95\x88\xc7\xc1\xa7\x12\x8f\ +\x04\xd4\xe4\xd9\x1e\xee\x13k\x9b\xedq%\xb3\xb1F\xbe\ +\x16A\xc8.%\x09\xac~\x9d\xedc=\xc6o\x18`\ +qn\x91\xf4<\xc4#5\xf6\xa5#\xeb`C\x9a\xd8\ +\xeb\x8d]e^\xaa\x80\x1f\x81\xb18\xd3k}\x16G\ +\x91A\xde\x9f\x08(\xc9\xa3\x90\xf2\xec%l\x9f\xd6\x7f\ +.Z\xe4k\x11\x84\xdc0:\x01'Rk\xff\x84\x81\ +\xb3\x18\xd8X\xb0\x82\xcb\xfc\xbf4\xe3\xe0H\xc2\x9e\x0e\ +-KU\x0a\xdby\xa5\xc6I\x00\xdd\xc9\x0c'\xc5\xf6\ +\xa3\x99^o\x17e\xde\x09\xd07\xf2\xc5>\x9e\x87[\ +n\xacq&\x8fN\xc0\x91\xafE\x10\x10H%+\x8f\ +\xe9`f~\xbf\x00\x05w\xee\xba\x06\xe7\xa0\x92Z\xfb\ +\x0dh\xdb\x98A\xd8BK\xa5y\xa0E\xf4\x02\x01%\ +\xccx\xc2\xaa\xb5'dZ\x00C\x11\x1e\xcc\x93p\x0e\ +\x03\xfc#\xab\xc6\xb9C\xbe\x14A\x08\x9e\x8d\x93\xd0\xb7\ +(j=\x02\xe0\x88\xfc\x17[x \xbe\xd6\xaaqn\ +\x81\xf6M\x19\x04\x00@\xeb\x94\xd8`\x8b\xe8q\x02J\ +\x18`\xdb\xe3\x9fg\xb8\x8f;\x94\x80\xda|\xf9\xe0\x99\ +1U\x04W\x10\xc2C\xd9,\xac]\x99\xb4\x8fe\xf0\ +\x83\xc8\xf3\xd2\x8e\x1e\xd1\x19\xf9 \xb8\x00`\xc8\xa7\x0b\ +\xac\x9f\x88\x9eE\x11\x1f\xda\xf2y.\x9d\x11\ +M\xa4\xff,\xd3\x9a \x84\x9fH\xc2\x9e\xed\xc2\x9b\xc0\ +\xc8\x83S\x05\xcco\xd8i\xe7\xb0\xe8\xf4\xf4\xb2|{\ +O\xaa\xc0\x8f\x06]OD\x93\xb6>{zc\xc2\xb9\ +\xbb\xbb\xd7\xfb\xbc\x02%\x16a.\x11L\xcd=\xdc\xb4\ +G\xde\x19\xd1\xe9\xe9\xc7e*\x13\x04}\x88\xd5\xb8\x7f\ +w\x1c>\x9e\x81F\x8d\x7f\xc6\xc2&\xe5|+_\x9b\ +\xa6\x14\xac\xe8\xa6\xe3\xd6y\x00\xfdb\xabT\xf4\x8f[\ +[\xed\x8b\xaa38x\xde\xab\x8fu\x1b\x11\x0d\xd7>\ +\xa4\x0c:+Z\xe3\xfeU\xa60A\xd0\x8f\xa2\x19\xce\ +B\x9b\xf9\x18\x06\xd6j\x18a\xfb\xeb\xdaf\xfb\xf8^\ +wc}\xbe\xbe\x1fU\xa0\xad\xf5\x8e$\xc2\xcc/[\ +\xeb1\x90\xb6\x19g\xf6\x98\x83\x86\xee^39\xcd8\ +\x86\x80J\xed\x93\xa6\x80\xf3\xa25\xe9\xf92u\x09\x82\ +\xbe\x14\xd7:\x8bS\xc0X\x86>\xde\x223\xdf\xbf\xb4\ +!\xff\x8b\xee\x14\x9c\xe8&\xa7F\xf70A\x7f&B\ +t\xcb\xbf\xf4\xf8'\xc5\x09\xe7\xe5\xee^s\xf5\x05(\ +6\x0c\xaa\xd5\xb9?.3<&L\x8a\xd4\xd8u2\ +e\x09\x82\xfe\x94\xd6\xd8o\xbb\x8e:\x8c\xc1\x1f\x84\xfd\ +Y=\xc6]\x8f48\x17\xeaV\xd2\x11R\x1c\xa3}\ +\xea\xcfCY\xcfR\xf3\xc5/3\x95\xfd\xea\xc1\x98\xae\ +\xb2\xeeP\xc0\xf7u.|\xc1\x8cx\xa4\xd6\x9e!S\ +\x95 \xe4\x9f\xa3a\x18\xee\xa2\xf0v)\xe2j\xb3\xc6\ +\xf9y\xa1\xbc\x0fUH]\x83z\x94\x9a\xf7m'\xb8\ +\x1f4'\x9d\xa9\xc8,T}\x08\x01\xdf\x83\xdeq\xe5\ +kEp\x05!?\x89\xcdH-O1\x1d\xcf\x8cu\ +\xe1[\xec\xf3\x8f\x0aIp\x0bJtO-\xb7~E\ +D'o}$\xc6f\x9c\xd5kv\xf7\xb3\xfcVT\ + f\x12f\x91\xc6EF<\xc6\xedV\xad\xf3+\x99\ +\x9a\x04!\x7f)M\xd8o\xb9\xec\x9d\xce@2,\x09\ +\x9b\x0c\x9co\xd5:\xb7\x17\xda\xbbP\x05\x92\xa9\xee\x93K\xeb\ +\xedS\x0b!qA\x10\x84\xaf\xb0\xe3\xe6%\xa4\xe8\xae\ +\x80\x16\xfa+\xd2L\xa7\xe4[\x95)\xf1t7\x93\xac\ +\x8a\x0d1\x89\x1e\xdeNp[\x5cO]\x9a\xb1\xe1,\ +\xbeCW\xc1\x05\xf3k\x8di\xfb,\x11\x5cA(<\ +\xac\x84\xf3G\xcf\xc3\x0d\x01\xac\xf4_J\xb33\xa6\x90\ +\x05\x17\xc8\xe3\x86\x07k'\xa3\xb4X\xe1\x19\x22\xda\x0b\ +\xdbnb^\x1dM\xd8O\x22\xb3p\xf59J\xe1j\ +MC\xca\x9f:i\xf3\x98\x9e\xb3\x9c\xb52\xfd\x08B\ +\x81N\xfc\x8b\xbd\x05G\x1e\xa8v'\xa2o\xe6h\xde\ +y\xe8\x0bvN\xef\x93\xc8\xdf\xa2\x17\x9d\xc5D\x9ef\ +*\xf7\xb4\xcc\xfbA4j\xbb7\xbfx\x09\x9c\xdf!\ +\xc3\x8eD\xa4\xf0\x1bM\xcf\xe2nH\xb94\xbetV\ +r\xa5L;\x82\x80\x82n\x92p\x12;\x17\xef\x07\xb3\ +\x94\x88\xce\xce\xe2\x9c\xd3\x0a\xe6\x9fX\x09\xe7\x8fbu\ +\xe4ox\xf9\xd4\xde\xd6M[g*\x7fYm)\xe5\ +R|t\x02N&\xd7.\x8eZ\xd5\x04\xec\xa6cy\ +G\x97\xbc\x8a\xd2\x19\xf6\x9b\xf2\xd9\x0b\x820:\x01g\ +\xd1{\xce\xf9\xcc\x9c\xa5\x84&^\xc2\x1eF\x8b\xe0\xe6\ +\xb9\xe8\xa6+\xad\x0b\x94\xc2Um\x88\xce\x9d%3\xec\ +W3\xb9vjJd\x1f\x22\x5c\x0a=\xcf\x06]\x1e\ +\xabq\xff.\x9f\xbc \x08_2v\x01\xdcE\xef9\ +\x172\xf3\x0c?\xcf\xdfz\x8c\xdbW&\x9d\x83#\xd3\ +\xedw\xc4\xca\xc8\xdf\xec\xe5\xe6JkT\x84\xf0o\x02\ +\x8a\xb7\xdbO\xf8\xb8\xd1v\xf6\xed{\x0f\x9a2\xb9\xbe\ +]i=I\x84\xf1\xd0\xef,\xee\xdd\x91Z\xfb\x12\xf9\ +\xdc\x05Ah\xa7\xebZ\x1c\xa0\xdf\x13\x10\xc9 \x9e\xfc\ +\xba\xed\xe2\xb2\xa2\x19\xceB\xb1h\x9e{\xba\x8dS\xd0\ +;\x02~d{\xc1\x05\x00\xd7\xe3\xaaL\x0579\xcd\ +\xf8\x8e\x8e\x82\x0b\xe0\x9f\xcb\x1a\xec\xef\xcb\xa7.\x08B\ +{X5N\xc2a>\x96\xc1\xcb\xbb\xd1p\xfe#\x8f\ +1e\xe1{\xceh\xdd\x05\xb7)n\xed\x9b\xae\xb4n\ +\xb6+\xcdy\xe2\xe9b\xe7\x89S\xa7\xf5\xb1\x1e'\xe0\ +\x846\xb2\xe6\x1e\xb0j\x9d\xf32\xb9\xfe\xdb\x15\xb0\x86\ +\x97\x9bK\x88\xe8k\xd0+S\xf9\xe3\x149\x07\x95\xd6\ +\xe0\x0b\x99R\x04A@'\x1b\xb8\x94\x17[W\x12\xf0\ +}\x22\xf4\xea@m\x17y@\xed\xb2\x06\xfb!\x9d\x8f\ + ~\x16G\xd1.\xca\x9cL\x8c\xf8\xd6\x09\xb8)\x17\ +\xfb\x97L\xb7\x97@\xb2\x97\xb7\xe5\xf4>\xe6O\xd1\x96\ +\xe0\x02\x1b\xd3\xecd\x5cqixo\xb3J;\xc1\x05\ +Z\xd2D\xa7\x8a\xe0\x0a\x82\xd0\x156\xb5\xd6\xb3\xab\xd7\ +N\xc6m=L\xeb\x14R|\x1c1\xbe\xc1@O\x02\ +\x9a\x98\xf0>\x18\xcf{P\x7f\x8b\xd6\xa6\xdf\x87\xe6\x11\ +\xd2b\xcb\xbc\x14L\x97\x11\xd0o{7\xd4R\xa8\x04\ +p\x89x\xba[\x91\xaa4\xc6+\xa8'\x88v\x0c\x95\ +3\xf8:\xab\xc6\xb9\x09\x19v&\xeaQj\xbdO\x84\ +~:\xd9\xc5\xf3pQ$a\xcf\x91)D\x10\x04\xa1\ +\x0d\xcf\x96\xcc\x1f\x81\xe8*\x02\xca\xda;f\xd9h\xdb\ +\xbbg\xba=\x89|\xd9\xd3MV\xc5\x86(Rs\xda\ +\x14\x5c\xe6\x15\xf5\xcd\xce\x1d\x99\xde\xa3\xac\xd4\xfa\xb1v\ +\x82\xcb\xa8\x15\xc1\x15\x04A\xc0\xf6\xe7\x93)]eU\ +\xec\xa2\xccw\x88\xe8\x86\xf6\x04\x17\x00\x88\xd0\xa3g\xc4\ +<\x17\x12^\xde\xb4R1\xe1<\x0cP\xdf6W(\ +\x1e]\xb1)L\xd2}\x9a\xa6\xa2\x1f\x11~\x04\xbd6\ +r\x17\xafip~ \xc3K\x10\x04\xe1+\x9a\xa7Y\ +\xfbE\x15\x12\x00\xc6t%\xc8K\x8c*\x00\x89\x82\xf7\ +tw!\xf3\x0f\xc0NK\x98\xfd\xfb\xa6\xe9v\xc6\x99\ +g\x11\xd3\xba\xbe\xa3\x95P\xc8*N\xads\xd88s\ +P]8\xdaw\x09\x82 \x84\xc1AKWZ\xd5\x11\ +\x03/\x830\xa6\xcb\x17 :\xa0%n\x8eA!{\ +\xbav\x95\x19'\xd0\xe4\x9d\x1d\xcc\xb6=\xfeA5\xc0\ +\x99\xdc#95\xba\x07\xc1\xab\xd4(q\x8a=\xd0\xc4\ +X\x22\xf5\xa1\x0c3A\x10\x04 \x197\xc6\x1a\x8a\xee\ +!`\xcfL\xaec\x11\xaa\x00\xbc\x5c\x90\x9enK\xdc\ +\x1c\x03\xa6\xdf\xb5\xe3\xee\xddW\x9cp26\x8ea\xb8\ +?\xcd\xe8\x90x\xeeE\xf7\x0f\xd1\xda\xf4c2\xcc\x04\ +A(tVT \x96\x8e[\xbf2H=K\xa0=\ +3\xbf\x22\x9d\xdd8\x05\xbd\x0bNt7NB_K\ +\xa1ng-\xf5\x18hq\xd2\xe6\xb5\x19\xaf\x8e&E\ +\xf7\x04\xd1\x05\xfaX\x86\xdf\x5cSo_)CM\x10\ +\x84B\xa79n\x1d\xb0[\xb9\xf9\x8aR\xb8\xaa\xad$\ +\xdbnI.\xa1\xa8\xd84/((\xd1\xad\x06(\x16\ +\xb5\xe6\x12hp;{\x9a\xb7\x16\xf9\xd0A\xc7\x88\xba\ +\xd7\x10`i\xb2\x8f\xdb\x9a\x04\x9d#\xfb\xb8\x82 \x14\ +2\x0b\xc6\xc2\xb0\xab\xcck#\x0a/\x81h\xa4\xdf\xd7\ +'\xc2\xe4\x82:\xa7k\xc7\xcd\x9f\x90\xa2[\xdb\x11\x9f\ +\xcf\xd75\xd8{\xf5\xabCs\xa6\xc7\x90\x0c\xb8Ku\ +\x09-\xb3\xc7\x97J\x17\x0fA\x10\x0a\x99Ted\xa8\ +A<\x07\xc0\xa1Y\xbd\x8f\x83\x033m\x9c\xa3\x85\xa7\ +\xdbRe\x1e\x04E7v ?\xbf\xceTp\x01@\ +\xb1{\x8d6\x82\xcbx\xe2\xc6\x84s\xb7\x0c9A\x10\ +P\xc0\x8d\x1a\x14\xf1\xeb\xd9\x16\x5c\x00\xb0\x0cL\xca{\ +O\xb7!\x8e\x1ee\xca|\x95@{\xb7\x93D\xb4\xaa\ +\xbe\xd9\x1e\x9a\xe9\xb9\xdc\xd6I\xb1\x81f\xd4\xfd@\x07\ +\xd1eF}\x9a\xed}K\x12X-\xc3N\xd0\x89W\ +\xe20\xbf\xc1\x91=\xa1\xdc\x11\x04\xd5\x9b\xc0=A(\ +\xd9\xea\xaf41\xa8\x89]\xda\xc8\xca\xdd\xe0\x115\x1a\ +\xac\x9a8M\xc9\x94J\xado6\x90\x1c\x90@k>\ +\xd8\xe2\xf3\x0a\x94\x94\x94\xa0\xd40\xa2\xa5\x9e\xe9\xf6R\ +\xcce\xc4F\x19\x19\x5cF\xe0\xd2\xaf\xe68ja\xf6\ +\xea]\xa6z\xdbu\x96\xf5\x9c\x89u\x85\xfe\x1d5O\ +\xc4\xae\x91\xa85\x83\x08'\xe50a\xb5\xe1\xd3\xa4=\ +`\x8f\xd9H!_\x8f\x0c\x95\x91Y\xdb\x9e\xe0nV\ +\xa0_e*\xb8\x00`D\xdc\x1f\xe8\x13V\xc6\xa5%\ +\xd3Ep\x05hrt#\xba\x97A\xeew\x89h\x02\ +\x03c\x08\x1c\xf9*\xd0Fm{\x03\x06c\xcb\xdf!\ +\x06\xa2\x0c\x13\x16J\x008U\x00\x03\x8d`x\xd0\xb7\ +\xb1j/\xda\xf2\xe3\xbdM\xbf\x9a\x08_\x9dv\xa4m\ +\xedA\x0a\x06\x01\x96\xb2\xd8\xae\xe4\xa5\x00^\xf2<\xf5\ +\x97\x7f/K?9v\x01\x5c\x14V8\xf9d\x05\x9e\ +\x9e\xebj\x81\x04\x94\x0f\x88X\xa7\x00\xdd\xaf\x03A!\ +oH?Y\x11fv\xd0I\xe7\xd3\xd5\x0d\xce\xd0L\ +\x13\x89\xd6_\x8c^%\x9e\xf51\x11z\x84\xffx\x10\ +\xff\xc9\xaaq\xce\x96\xa9\x5c\x08;\x1b\xe3\xe8\x13#\xf3\ +\x0e\x10\x9dC\x80!\x16\xc9\xca|\xf0\x8e\x0b\x5c\x12\xab\ +q^\xc8\xf7\xdf\xbav2J{F\xcc\xdf\x12hZ\ +\x80Q\xc6\xa7\xadZ\xfb;\xc8\xb7=\xddTed(\ +\x01wv\xe2\x8b\xbb\xc9\x8f\xcc\xdd\x12\xcf\xac\xd2Bp\ +\x19\xab\x93\x9es\xa9L5B\xe8\xbd\xdb)\xd1\xbdc\ +d\xbeFD\xe7\x8b\xe0f\xd3\xfb\xa2\xaf\x1b\xa0g\xd3\ +U\xd6E\xf9\xfc;[\xab\xcc\xc3zZ\xe6kA\x0a\ +\xeef\x83\x1f\xdb:)60\xafDw\xc1X\x18\x06\ +\xf8^\x22\x94v\xd4/v\xf9\x0agF\xa6\xf7[>\ +\x11Q\x10]\x0e-\x9a\x19PUY\x02\xf52\xd5\x08\ +\x08\xf9^\xa5a\xba\x7f#\xa2Ab\x8d\x9c\x84=\x0d\ +b\xcch\xa92\x0f\xca\xb7\xdf\xd68\x05\xbd\xd3\x95V\ +\x8d\xc9\xf4/\x22\x1a\x1a\x06[\x9b\x11\xe7\xa2\xbc\x12\xdd\ +\xc3G\x98W\x83pX\xc7^\x1f\xdd8\xec)\xa43\ +\xbd\xdf\x80\x88u>\x01\xbbi\x10F\xfas4\x91~\ +T\xa6\x18!\xec\xf4\xeac]\x17\x86\x09\xb2\xa0\x84\x97\ +`F@\xbf\xcd\xa7\xdf\x94\xae\xb4\xce.\xb6\xac\xff)\ +B\xa5_\x85.|bbu7\xb7gC'\xba\xcd\ +S\xado\x82\xe8g\x1d\x0b.\x7f\xb8l\x9d=\x1b>\ +\x14\xddP\xc4?\xd4 \xac\xbc\xdeN;\x97\xcb\xd4\x22\ +\x84\x9d\xd5\x17\xa0\x98|n\xfc-t\x9a#\xd2\xd3\xac\ +\xaf\xeb\xfe#Z\xaa\x8a\x06\xd8U\xe6|Ex\x90\x80\ +]\xc3\xb7\xc0\xa1\xa1WU\x99\x87j/\xba\x9f\xc5Q\ +\x141yng\xaaA1\xd3M#\xeb`gz\xcf\ +\xab\xab\x8c\xb1\xd9\xa8^\xe2\xff[\xe6\xab\x8a\xef\xc1*\ +\x99S\x84\xb0\xd3\xbb8r,\x01=\xc5\x12\x01M\x15\ +\x8a\x8f\xd7\xf9\xf9S\xf1\xc8)\x16;o\x13\xe8\x940\ +?\xa7\xc1t\x8e\xf6\xa2\xdb\x97\xac\x9b\x08\xf4\xf5N\x9c\ +\x95Z\xf5Y\xda\xbe\xcf\x17\xc3\x81\xbe\x87\xf0\xc7\x95\xff\ +uc\x8d3]\xa6\x13A\x8f0'\x1f(V\x08\xf4\ +\x0d\x8c\xd3\xf5\xc9\xedJ\xf3J\xa5\xf8\x11\x22\xf4\xd2 \ +\x9c_\xb1`l\xd7\x13\x04C#\xba\xadS\xcd#\x08\ +\xe8d\xf8\x94\xff\x90\xc9\xe1\xe4-\xf7\x8c\xc7\x06\x81\xe9\ +\xe4\x90w\x0fJ\xbb\xa0\xca\xea\x0c[\x15\x0aB\xee\x82\ +2<\x5c\xac\x10\xe8\x0b\x18\xaaie\xa9\x1f\x10\xd1-\ +\xa4Iyb\x02v=d\xb81NK\xd1\xfd,\x8e\ +\x22\xd3\xc0\xcc\xcel\x943\xd0\xdc\xda\xe2\xd4\xf8\xe2\xe5\ +\x92[E\x14\xee\x02!\xcc\xb8#Z\x9b\xfe\x9f\xcc$\ +\x82FGX\xf6\x16+\x04\xfa\x06\x06WkTW\x1f\ +\xd8\xdc\xb2\x15\xf4k\xdd,mP\xd7C\xcc*$a\ +\xe5\x9f\x13\xd1\xf0Nz~\xf7\xf4\x98\x83\x06\xf8pL\ +\x88\x80i\x08\xb5\xe0\xf2\xa7\x1bl\xfb\x972\x89\x08z\ +\xc1\xc5b\x83@=\xb0\xe2K*\xa0\x91\xe4\xa8\xee\x00\ +\x00 \x00IDAT\xd5;\xb0\x88~\xa1Kg\xb7\ +\xed\xac}\xda\xf2\x89m\xb7\x9a\x0d\xad\xe8\xb6\xc4\xcd1\ +D\xf8Q'\x05\xd7\xf5\xb9\xdc\x18GDCBMv\xdaF\x1az\xce\xc4:0?\ +\xa0\xb1\xf1\xbf\x91\x8cG\xf7\x0aTt[\xaa\x8a\x06@\ +\xd1\x95\xdd\x08\xb9\xfe\xd5\xaf\x04\xaa\xcf\xe2(\x02\xe8\xf8\ +Pz\xb9\xe4\xfdTf\x09A\x10\x84\xcds\xa2\x8b{\ +u~~C\xb9\xe3\x03\x15]\x0b\xf6\xcd\x04\x94t]\ +s\xe9A\xbf\x9e\xa1\x0f\x22\xc7u\xe7\x19r\xe0\xe5\xbe\ +\x14\xabq\x9f\x97a&\x08\x82\xb0\x89\xc7\x1b\x9d\x17\x99\ +\xf93\xe8\x9bHxL`\xa2\xdb\x5ci\x8d\x02\xd3\xf9\ +\xdd\xc8\xbekjh\xb5\x9f\xf0\xeb9\x14y\xa7\x84\xf1\ +\xdd\xb8\xe4\xdd CL\x10\x04\xe1+\xce\xac\x83\xc7\xa0\ +G\xf4\xfd\x054v\xc1\xd8\x9dw\xce\xcb\xaa\xe8F\x88\ +o\xe8^c\x01\x9e\xdf\x7f\xae?\x9b\xe9\x0b\xc6\xc2\x00\ +\xd1\x84\x10.\x87\x96\xdc\x5c\xe3>)CL\x10\x04a\ +[<\xf2\xfe\xa2q\x97\xad\xdec\x86\x99\x07\xe4\x5ct\ +[+\xcdC\x08\xdd\x13;\x8f\xd8\xb7>\xb2\x07\x0f5\ +\x0f%\xa0o\xf8\x0e\x82\xd3\x8d\xd5\x92\xb1,\x08\x82\xb0\ +\x03/\xbd\xeb\xfe\x93\x19\x9f\xeb\xfa\xfc\x96\xb1\xf3\x10s\ +\xd6D\xd7\x04\xdd\xd8\xcd\x83\xdd\xf5\xef\xd7\xbb\x7f\x87o\ +\x9b\xda\xe1K\xa0b\xe6\xf7\xe6\xd7\xdb\x7f\x91\xa1%\x08\ +\x82\xb0#c\x17\xc0\x05X\xe3\xda\x05\x94[\xd1MN\ +3\x8e!\xc2\xb8n\xf6\x92\xad\x1bY\x07\x1b\xbe\x9d\x9b\ +\xc2wB\xf8Fn\x97\xeaS\x82 \x08h\xaf\x1a\xe1\ +\x9f5~\xfc\xc3w\xd6u(+\xa2k*uC\xf7\ +\xc3\xae\xfe\x85\x967NB_f|3d\xbd.\xd7\ +\xd6\xb78RcY\x10\x04\xa1\x1d\xde\x82\xfb<\x03\x0d\ +\xba6\xb6\xef\x1f1\x0e\xcd\x89\xe8\xa6*\x8d\x93@8\ +\xa4\x9b\x82\xb4\xea\xb1z\xe7_~=K\xd4\xb2\xbe\xdd\ +\xbdD\xae\xac\xd6E\xad\xf5+IL\x10\x04!_\x19\ +\x9d\x80\x03\xf0\xd3\xba>\xbf\x82:&'\xa2k@]\ +\x97\x81\x22\xfd\xd5\xcf\xb0+\x11\x1f\x1f2/7\xed\xd8\ +\xf6]2\x9c\x04A\x10:\xd5\xee\xf4I}KB\x22\ +\xfb\xa2\x9b\xac4\xc6u\xd7\xcb\x05\x00\x0f\xeaq\x9f}\ +\xfc\xa3C\xf6\x09=\xe0W\x95-A\x10\x84|'\x95\ +\xb2\xff\xc6\xacg\xfe\x0b\x03\x07\xb6\xb5\xaf\xab|\xf6r\ +\xaf\xc9\xe0\x01\x93\x8d\x0d\xe9g\xfdz\x96\xe4\xa4\xe8\x9e\ +]\xad\xf7\x9cml\xc6\x1fd\x18\x09\x82 t\x8e\xb2\ +YXK\xc0\xcb\xd0s_7\xd2\xcf4\xf7\xcf\x9a\xe8\ +\xb6\xc4\xcd1D86\x83e\xc1\xb3\xfd\xea\xfc\xeb\x8e\ +\xa1,\xef[![\xf6\xfc\xb7\xb8\xd6Y,\xc3H\x10\ +\x04\xa1KG,\x9f\xd2\xf5\xd9-\x851Y\x13]K\ +\xe1\xda\x0cM\xfbW\x7f\xab\x82\xf0\x91a2\xbe\xc7\xa8\ +\x95\xe1#\x08\x82\x80\xaeF\x08\x9f\xd4\xb8\xe3\xd3AY\ +\x11\xddTe\xe4k\xe0\xccJ-\xbad>\xe9\xf3\x8f\ +\xfdV\x88b\xfb\x8d\xeb\xd7\xd9\x0f\xc9\xf0\x11\x04A\xe8\ +\x1a\xbf\x9e\xee,fh\x9b\x0b\x93\x1dOW\xc1\xbb\x22\ +\xb3\xa39\xbc$V\x93\xfc\x18>\xb6\x13$\xd0\xde!\ +:&4\xd7\xcf\xd0\xb9 \x08B\xa1P\x0d0\x98\x9f\ +\xd1\xb4\x10\xf3\xf0\xc6)\xe8\xed\xab\xe86Ua\x17\x10\ +\x9d\x83\x8cB\xaf\xf4\x84\x9f\xbf\xd3p\xddC\xc2d\xf7\ +\xb4\x84\x96\x05A\x102\x89\x5c.\xd44\x99\x8a\xa2\x86\ +1\xdaW\xd1\x8d\xb2\x19' \x96\x99\xe8z\xcf\xf8\xbc\ +\x9f;\x06!J\xa0*M\xd8o\xc9\xa8\x11\x04A\xe8\ +\x1e)\xd0\x22h\xdb\xd4\x9e\x0e\xf6Mt_\x89\xc3\x04\ +\xa1*\xc3\xd0k\xaa\x01\xee\x7f|n\xadtPh4\ +\x97\xf8^\x192\x82 \x08\xdd\xe7\xb6\x1a\xfb\x1df\xd4\ +C\xcf\x03\xbb\x07\xf9&\xba\xa3\x94u\x1a\x81\x06f(\ +\x90\xff\x19\x90@+\xfc\x8b\xff\x13\x10\x8ez\xcb\x0c\xa4\ +\x93\x9e#\x09T\x82 \x08\x99\xee\xeb\x82\x17i\xba\xaf\ +\xeb\x9f\xe8*\xe0rd\xdcW\x16\x0b\xfc\xfc}\xd7L\ +\x8e\x0c#B\xaf\x90,q\x9e(Kh\xba:\x13\x04\ +A\x08\x17\x8b4\xdd\xd7\xddm\xc3\x85(\xcfXt\x9b\ +\xe3\xd6\x01\x00\x8e\xc8\xfc\xfc\xaa\xf7\x82\xaf?0\xc2\xa3\ +\xc3bl\xcfSsd\x9c\x08\x82 d\x8e\xa3i2\ +\x15\x00XQsD\xc6\xa2k\x11\xa6\xf9p\x94&\xd5\ +\xc0\xee\xbf}\x8e\xe9\xee\x17\x92\xd0r\xc3\xfb\xeb\xd2O\ +\xcaP\x11\x04A\xc8\x9c5Ig1\xb3\x7f[\x91\xb9\ +\xc40h\x9f\x8cDwE\x05b\x04\x9c\xed\x83\xdb\xfd\ +\xb2\x9f\xfb\xb9\x9b\xf7\x88\xf7\x0d\x87\x99\xf9\x91\x91u\xb0\ +e\xa8\x08\x82 d\xce\x1e\xb3\x91\x22\xc2\xeb\xd03\x99\ +*3\xd1\xdd\xb5\x8fu:\xd1\xb6\x07~\x11\x82\xfd\xdc\ +\xcd\xbf.\x14\xa2\xeb\x82\xe7\xc90\x11\x04A\xf0\x0f\x0f\ +X\x02-s\xa98\xb3\xf02\x01\x13}1 y\xbe\ +\xc6\xe8\x1b\xe2\xe8\x01\xd0\xa00\x84\x96?\xa8w\x9f\x97\ +!\x22\x08\x82\xe0\xa3xy\xbcDSO\xf7k\xdd\x16\ +\xdd\xd6I\xb1\x81\x00\xc6\xf9 L\x9cnq_\xf1\xf3\ +w\x15)s_\xdatd(\xe8\xba\x8f\x0fKhY\ +\x10\x04\xc1_\x1c\xd6\xd3\xd3\x05h\xafe\xe3\x11\xe9\x96\ +\xe8\x9a\x963\x99\x00\xc3\x07eZ\xdec\x0e\x1a\xfc\xfc\ +Y\x86G#\x11\x8e\xd0\xf2\x9fex\x08\x82 \xf8K\ +\xcav\xde\xd13\xbc\x0cs\xc8@kh\x97E\xb7\x1a\ + \x10.\xf2\xe99\x16g\xe1@\xd4\xb0\x1047\xd8\ +\xb0\xe2\x13\x09-\x0b\x82 \xf8M\xaf\xd9hd\xc6\xe7\ +:>;+\x1a\xd1e\xd1\xbd\xaa\xd2<\x98\x88\xf6\xf2\ +)\xc6\xbd\xd8\x7f\xcd\xe5\xbd\x02\xb7,\xf1\xdf\x87=\x85\ +\xb4\x0c\x0fA\x10\x84\xacx\x8dKu|n\xc5\xde>\ +]\x16]\x83\xa8\xc2\xaf\x07p\x99\xb3 \xba\xd8;\xf8\ +\xfdr\x7f;&\x09\x82 \x08[G\x13y\x99\x96\xcf\ +M4\xa4K\xa2[\x0d\x10\x81\xbf\xebSv/\xa7\x93\ +\xae\xef\xa2\xcb\xa0\xbd\x02\x0e-{i\xc7~J\x86\x85\ + \x08B\xd6<\x9b\xe5\x9a\x96\x83\x1c\xd8%\xd1\xbd\xaa\ +\xca<\x94@\x83}R\xa7\x8f\xfcN\xa2\xda8\x09}\ +\x89\xd0#`\xa3\xbeT:C\xcf\xfd\x06A\x10\x04M\ +<\xc6\x95z\x8a.\x0f\xea\x92\xe8\x1aL\xdf\xf5\xf1\xfe\ +\xbe{\xb9\x86e\xee\x15\x826~\x7f\x95!!\x08\x82\ +\x90=<\xf2V\xea\xe9\xa0S\xe7E\xb7\xda\xc7\xd0\xf2\ +f\xde\xf4]tY\x0d\x0c\xda\xa8\xb6\x87gdH\x08\ +\x82 d\x0f\x07\xeaSM\x13\xc0z\x7f^\x81\x92N\ +\x89\xeeU\xd3\xccC\x88\xfc\xab\xf4\xc4L\xef\xf9\xfd\x83\ +\x94\xe1\xed\x16p\x15\xaa\xc6\x97\x97:\x8beH\x08\x82\ + dQt\x93\xf6J]\x9f\xbdG\x8fh\x7f\xd5\xc9\ +\xac\xe5S|\xf5\x08\x95\xff)\xdf\xcc\x14\xa8\xe8\x82\xf9\ +\x85\xb1\x0b\xe0\xca\x90\x10\x04A@\xb6\xcf\xea6\xe9\xf8\ +\xecl\xba\xbb\x98\x9d\xf2\x22\x15\x9f\xe0WuE\x06\xb8\ +\xb9\xde^\x96\x85\x82\xd2\xfd\x03\xad\x00\xc9xN\x86C\ +a\xb0l<\x22\x03\x07\xc5v\x85r\x06\x11s1\xc1\ +\xe8I\xc4\x0a@\x94\xc0\xc5\xdb|\x16\x1e\xb9P\xd8\xb0\ +i]\xe6\xb52\x90\xf4\x986\x18P\x8d\x0e\xd2\x8d\x8d\ +@\xa3\xdf\x9d\xb6\x04!\xef!^\x03P\xa9n\x8f\xad\ +\xa0\xfau(\xba\xadSb\x83\x01\xf7\x1b>z\x84+\ +\xfb\xd5\xa19\x0bo!PO7\x05zVFB\xfe\ +\xb0`,\x8c\x83\xf6\xb1\xbeay\xd8\x1f\x84Q\x04\x0c\ +#\xf0@\x06\xf5'B\x7f\xc0\xdd\x94\xafN\xb4i)\ +\xb9u\x0e\xfb\xd6\xff\xa4\xda\xf8\x07\xda\xb4J3`\xa1\ +\x1f\x00\xbb\x0ai0\x1aA\xbc\x81\x18\xeb\x99h=\xc0\ +\x8d`42\xa8\x11\x84\x0d\xc4\xbc\x01\x84\x8d\x0cZ\xe7\ +\xb1\xb7\x81=\xda\xc0\x0ai\xc3V\x1b\xd9$\x87]r\ +\xd2Hn\xfc\xf2V\x9f\x7f\x86f)\xd2\x22\xe4\xad\xe6\ +\x82\xd6\x22\x04u\x19\xba\xbeV\xe0\x8e=]\xd3pN\ +\xf0\xd5\x83$Z\x9a\xa5\x1f\xb3\xdb\xa6\x090\x90\xf3\xb9\ +_\xdc\x96\xb0\xdf\x96\xa1\xa07\xeb'\xa2gI\xc4<\ +\x0fD\xe3A8\x92\x80\x9e\xdb\xa6\x1aRVb)\x04\ +D@\xd8\x05\xa0]\xb0\xa5c\x07\xe1\xab\xff\x0f|\xf9\ +m\x13\x00E\xea\xab\xea\xe7\x11\xde$\xfa\x0a\xb0`m\ +\xb9\xe6\x9eC\x00\xa7j\xcb\xf7\xd9\x0a\xe2z\x02-g\ +\xe6w\x98iQ\xca\xb6\x9f,\x9b\x85\xb5\xf2\xd6\x05h\ +Y \x03k\x89\xa0\xe3\xb1\xa1\x8e=](\x9c\xe0s\ +\xc2\xd1{\xd99\xae\x83>\xc1\xbd\x03\xfew\xf5\xb6\xee\ +\x8e\xa0\x11\xaf\xc4a\xee\xa7\xcc\xab\x01\xba\x9a\x80\x92<\ +,\x9bW\x04\xd0@\x00\x03\x89\xe8\x08\x22\xc4cQ\xcb\ +\xb5+\xf9\xe1\x94K\xbf,\x9da\xbf)_\x81\xa0\x99\ +\xec\xae\x0dCC\xb9n\x9c1\xee\xd5n\x22\xd5\x8a\x0a\ +\xc4\x00:\xc6\xe7~\x88K\xb3\xf4kz\x04\xb8|y\ +Q\x06\x81\x9e4\xc4\xd1c\x7fe=K\xa0_\xe6\xa3\ +\xe0\xb6\xe3]\x1bDT\x115\xf1\x9a\x1d7\xaf\xa9\xd6\ +q\x06\x13\x0a\xb8(\x15\xe9\x1a\xa5i\xff\xc8\xd0.\xbd\ +\x8c\xb1\x04\x14\xc3\xd7\x83\xcd\xfe\x8b\xee\xe6\x09#0\xd1\ +u\x5c\xfc[\x86\x81~|\x16GQ\x0f\xb2\x9e\x04p\ +\x14\x0avo\x0c\x06)\xba\xe9\xbaJs\xa6|\x11\x82\ +F{\xa3\xf5zF\x9d\xb8}\xd1UJ\x9d\xe8\xfbM\ +=\xf5\xb1\xdf\xd7\xbc<\x8e2\xa2\xae\xf7\x06\xf6)\x5c\ +n7&\x9dWd\x18\xe8G_e\xdd\x06\xc2\xe1b\ +\x09\x80\x88&\xd9U\xe6Ub\x09A\x93\xd5\xe2FM\ +]\xf4\xf6E\x97\x88\xc7\xfb}\xcfV\xcf^\xe5\xf75\ +\x8b\x10\xeb\x19\xdc\x8a\x0b\xaf\xf7\x9f\x8b\x16\x19\x05z\x91\ +\xac2\x8e&\xe0b\xb1\xc46_\xf3\x8d\xa9xd\x84\ +\xd8A\xd0`ot\xa3\xa6c\xact\xa7\xa2\x9b\x9c\x14\ +\xdd\x93@{\xfb\x9cq\xd6\xdas&\xd6\xf9\xfd3\x5c\ +\xe5\x06\x16Z\xf6\x80\x97e\x08\xe8E5@&\xab[\ +H\xf61w\x085+\xe5\xfdL,!\x84?{\x99\ +\x9a4Mj\xdc\xb9\xa7\xab,\xef[Y0\xd5*d\ +\xe5\xc01\x17\x07h\xc7\xd7e\x08\xe8\xc55\x95\xc6w\ +@8H,\xd1\xe6\xb4\xf0\xdd\x86x\xb0\xdd\xba\x04\xa1\ +\xe3(\xad\xdb\xa4\xe9ja\xe7\xa2K\xc4c\xb3p\xa0\ +9+\x85\xaa\x09[\x1dP\xcc1\x8e\xc7\x22\xba\x9a\xa1\ +\x88\xa6\x8a\x15v>\x96J8rl\x86'\x14\xa2b\ +I!\xab\xda\xe5R\xb3\x9ea\xf1\xf6\xf6t\xc9\xff\x8c\ +N\xce\x92\xa7\x1b\x94\xe82\xc3YO\x8e\x14\xc5\x80^\ +\x050\x00\x9a \x96hg<\x19|h\x86\x97(\x15\ ++\x0a\xc8j{?]\xf7t\xd1\xf6\x9en\xb2*6\ +\x84@{fa\xf3{Uv\xde\x00G\x02\xaa.\xf2\ +\x9e\xd4\xcd\xd5\x8b\xa2hd\x5c\x90\x91\x11M\xaa\xe6\x0c\ +\xcbh\x9c+*\x13+\x06\x1a{\xcd\xfbH\x83\x05\xd8\ +\x9a\x8e\xae\xe26EWy\xee\xb7\xb2t\xb6\xea\xb3\xbc\ +\xf2te?WGA9F\xac\xd0\xe1x\xdaC<\ +]\xad_`1\xf2\xbf8\x86\xad\xe9\x83\x9bj'\xfb\ +\xb9\xdf\xca\x92\xa1\xb2\xe3\xe9\xc2\xb0\x02\xfa\xb8\xdf\x91\x11\ +\x0e\xcd\xf6s\xb1\x9fX\xa1\xc3\xc5d\x8f\x0c\x176\xe2\ +\xe9\x06\xbbq\x98\xf7\x95\xd5\xd8!G\xd7U\xbf\xda\xc9\ +\x1fdKt\x1b\xf3\xe9\xc5{\x9eZ*#\x5c\xbbB\ +\xe9#\xc5\x0aY\x9f\xb4\xc5\xd3\x0d\xf8X\x8ax\xbaa\ +n\xef\xb7\x1d\xad\x93b\x03\xfd>\x9f\xfb\xd5Xv\xb3\ +\xb4\xf9\xed\x06\xf2\x02l\x8f\xdf\x93!\xae\x0f\x9fW\xa0\ +\x84\x08\xbd\xc5\x12\x9d9~.\xa2\xab\xb1$\xe5}x\ +\xd9\xb3\x92\x8e\xa6\xab\x85\x1d=]\xc3t\xb3V\x16\xcf\ +s\xb3\x93q\xc6\x01l\xaa3\xc3\xdb\xa0\xec\xf7e\x80\ +\xebC\x8f\x9e\xd1]\xc4\x0a\x9dJ\xbeHf\xb8\xba\x16\ +\xd1\x0dv{ \xffE\xd7\x86\x83|\xf1t\xa1p`\ +\xb6nfx*[\x07\x9a\x03\xf0ty\x85d.\xeb\ +\xb6\x9f\xeb\x15\x8b\x15:5k\xa72L\xc4*\x11#\ +\x06J,\xef\xc72o\xe9(\xad\xdd\xe8Rm\x0c\x98\ +\xd1\xd9\xba\x9bK\xc6\xc6\xfc\x89\xef\x93\x84\x96\xf5\xab\xd7\ +\xea\x8a\x15:\xb5'\x98\xcc\xcc\xce,\x9en\xb0o0\ +\xef\x8f\x0cQ\xac\xc8\xc8\x0bO\xb7\x1a \x10\xbe\x99\xad\ +\x9b%U\xeb\xc6,-\x1d\xd2\x01\x84\xe0>\x96\xc1\xad\ +\xdb\x12S%\xc5\x0a\x9dR\xcdT\x86\xab\xe0\x88\x181\ +d\x11\xcc|\x13]\x9b\xcd\xbc\xc8^\xbefrd\x18\ +\x01=\xb3\xb4\xcf\xc0\xcf\xacCSv\xb2\x88\xa95\x80\ +T\x93\x952\xb6\xf5b\xc5\xc7\xc9U\x0c\xb0X\xa2\xc3\ +\x89\xa1%\xc3\xf0rJ\x8c\x18\xe8\xaa\xa9\xa5\x00\xaa\xa6\ +\x99\xc8\x87\x15\x11Ext\x16\xf7\x89\x9a\xcf\xac\xcb8\ ++\xb2M\x0c\x18\x8d\x01\x84*Et5c\xd8SH\ +\x03X-\x96\xe8\xb8\x1bX\x86\x97H\x8b\x15\x83\xcc\x83\ +\xcb\xffV\xa3\xc4\xackx\xd9S\xdb\x09\xe3\xe8,\xae\ +\x9e\xb3V\xa0\xba\xa59\xb9>\xe7\x96co\x85\x0co\ +-%\xe5\x15\xb1Av=%\x06}.6\x0ctS\ +\xbe>\xdf\x7f\xa2mpD\xd7\xb1\xa5\xb6\xab\xd6s`\ +6\xcf'e\xeb\xd2\xbf\xbf\x1fM\x0c\xb8\xb9\xfd\xae\x0d\ +\xf1t\xf5\xcc\xcc}Q\x8c\xd0\xf1:6C#K\xbe\ +C\x90\xae\x14\xe3\x7f\xc8\xfbMk=\xcf\x22\x13c\xe3\ +\x16\xd1\x9dW\x01\xc5\xc0\x01\xd0\xb3)9\x83\xb1!\x97\ +\xf7ljJ\x8b\xe8j9!\xa9G\xc4\x0a\x1d\x92\xe9\ +\x19H\xa9\xd4\x16l\xae\xce;\x05 \xba\xa5\x9aF!\ +\x9a\xb6\x88\xee)=\x22\xc3\x09(\xd38\xc8\xdf\x98\xc3\ +=\xafT\x9f\xfb\xb1Q\x86\xb7~D\x13\xe9\xf7\x00H\ +\x889\x8b\xa4\x99\x9e\x13+\x04\x87\xcdx\xa9\x00\xf6\xad\ +K4\xcd\x97\xf8\xca\xd3\x85\x85}\xf4^\xdd\xd1\xda\x1c\ +\x9a\xae^\x86\xb6\xbe\xb8L\xbf\x14+d\x8f[\x13\xf6\ +\xeb\xcc\x92\xb0\x16\xcc\xa4\xce\x1f\xff:\xe1\xfc7\xff\xbd\ +y\xa5\xe9Yp\xfeJt\x15\xbc\x11\xd9V\xc5,\x97\ +\xb4\xfc4\x87\xc5\x03Dtu\xf6vk\xd3\x8f1C\ +\xbc1do\xbb\x87\x81\xe9b\x89@\xb8\xb3\xba\x10\x8e\ +\xc5\xb1\xb6U\xcf\xbe\x0a/\x831B\xef\x15\x1e}\x96\ +\xbb\xbb\x91\x88.t\x0f\x81\xda\xe71\xb0J,\x91\x1d\ +66\xd9\xb72\xf8\x13\xb1DN'\xc17\x96\x7f\xe2\ +\xdc\x85\x82H\xd0\xe6\x1e\x9aV\xc5\xfb\xca\xd3%\xa2}\ +4\x7f\x09\x9f\xe50\x84#\xa2\xab9%\x09\xac\xf6\xd2\ +4\x96\xc1\x1f\x885\xfc\xa7\xcf\xfd\xd8\x98\xf6\xe8T\xce\ +q\x82c\xe1&\xe5\xf3'\x0e\x99'o>\x8b^\x00\ +\xbf\x97\xfah\xfa\xe0_y\xba\x0c\xcd=]\xd0\xa79\ +\xbc\xdd:\x19\xe6\xfa\x13\xbd'\xbd4\xe99\x07{\x8c\ +?p M3\xf2}ac\xbf\x96b\x1c\xce\xe0w\ +\xc5\x1aY\xeb(\xc4\x0c\xfeS\x0a\xce\xe8XM\xf2\xe3\ +\x02J\xd1\xee\xa3\xa9s\xb8\xd1\x04\x80\xa6*\xecB@\ +y\x96\xbf\x0e3\xcb\xc5*>S\xa4r\x15\x22\x90\xee\ +ByBY\x02\xf5\x80}YrJ\xf4\x0eez\x17\ +(\xf0\x19 \xda\xb7\x8b\x13\xdf*b\xac`\xf0\x0a\x06\ +\xad \xe6O\x99h\x8d\x07o\x95Cj\x15\xa7\xec5\ +e\xb3\xb0%\xd1oE\x05b\xe5\xbd\xd1\x8b\x949\xc8\ +d\xda\x8f\x88\xc7\x80\xe9t\xd2t\x22i\x8f\xd2\x84\xfd\ +\xd6\xb2\xf1\xd8o\x8f!\xe64bTu\xd5\xb6\xdbe\ +~\xae\x03\xb8\x15@RS\xa10\xc1T\x06B\x09\xa1\ +\xfb\xf5\xa9\x19H\x12\xe3Uf~\xc2s\xd5#\xd1\x99\ +\xf6\xbb\x85Wu\x8b\xfb\x80\x08\x1av\xaan4\x01\xc0\ +p\xcc\x110\xb3\xfe\xc1e\xf58\x129\xc6\xc7\xb08\ +W\xcbK\x11\xdd<#63\xf5\x01\x80j\x00\xd5\xeb\ +/F\xaf\xa8c~\xcd \x1aF\xe0R\xa8\xcd\xdf\xae\ +\x87$\x1353\xd1Z\xcf\xf1\xd6*C\xad^\x95J\ +\xaf\xd8cv{\xb5\x86w\xac\xd92\xa8\x0eI\x00\xab\ +\x01g5\x80\xff\x02\x98\xf1v\x05.\x1d\xda+2A\ +)\xeff\x22\x1a\x8e\xbc+\xbf\xe9\xdc\x05\xe0\xae\xa6\xa9\ +\xe8g\x19\x91C\x14\xbc\xfd\x18\xd4\x9b\xc0=\xb1\xa9\xff\ +\xeb\x06\x06%\x014\x12\xf3\x17\x0cZ\xe32\xafV\x9e\ +\xfa\xbc\xd5M\xaf\xea5\x1b\x8d\xc8\xafd3\xfa\xe1\x14\ +\xf4\xb2\x181\xc3\x88\x94\xba\xca\xeb\xa1<\xeeE\x86Q\ +F\xcceD\x5c\xb4U\xbe\x8a\x07B\xa3\xe7z\x0d \ +\xf3\xa3\xc7\xd6\xa5\x96g\xab\xa4\xaeF\xb2\xdbW\xcf\xa6\ ++\xb4\x9a\x00 \x1d\xb7\xa6(\x85\x19\xd9\xbe\xe1\xaaz\ +\xbbh\xf3\x84\xe3;\xcb\xc6#\xb2\xc7\x10\xab\x85\x90\xfd\ +>\x8b\x1e\xf0\x8bH\x8d\xfd3\x91*!\x1b\xdf\xf1\x90\ +!\xd6u\x04\xfc\x94\x90\xdd\x8c\xffvr\x16fY\xb5\ +\xcedy\x1bBXq*\xcd% \x1a\x05\xed\xceP\ +\xf3Qj\xb3\x17\x9a\x93\xfd\xdc\xde=\xd1#\xab\xabi\ +\xceM\xf99b\x16OW\xc8\xdaw\xbciA\xc7U\ +\xb9.m*\x08\x1a\xe5\xf0\xf4\xd3\xf1\xb9\x95\xa7V\xab\ +\xcde\xc3\xf6\xc8\xc5\x0d-#\x92\xe54oZ\x96\xa3\ +\xbd\x19\xe9\xcb*dw\xac\xd48\x09\x80\xaf\x13K\x08\ +\xc2\xb6\xbc]\x01\x0b\x80\x96\xa2\xdb\xd4\x92\xfeRti\ +@NB\x02nv\xcfV1\xb0,G\x9b\xe1\xd2\xba\ +L\xc8:\x8f\xd4;\xb7\xa2\x00J\xfa\x09BW\xd8\xbb\ +Ol\x00\x11\x14\xf4\xcb4o\xees\xff\xe62\x90L\ +\x9c\x13\xd15L.\xcbr\xa1\xef\x5cy\xbaJ>}\ +!\xdb\x9cY\x07\xcfa\xef\x1a\xb1\x84 l-^\xce\ +\xee\x9a\x16/Y\x05\x00\xaa\x1a \x80v\xcb\x89V\xb9\ +*\xab\x9e\xae\x9b\xab\xee\x1a\x0c\x92O_\xc8\x05\xb1\x84\ +\xbb\x80\x0b\xa0k\x8c t\xday\xf3h \xb4<\xa3\ +K\xab\x01@\xfdx\x12\xfa\x10\x10\xcb\x87\xd2]6\xbb\ +\xaf\xe5\xc8\xd3\x15\xd1\x15rY\xe2\xb4N\xac \x08[\ +\x22\x9a\x035mF\xb1\xc9\xd3%\xc3\xda-\x87\xc6\xea\ +\x9b\xedB\x07\x0c^)\xe1e!\x9fp\xc1\xcf\x8a\x15\ +\x04a\xcbY\xd7\xc1\x9af\x5c\xaf\x01\x00e\x92\xb7{\ +\x0e\x8d50\x07\xe5\xa2^\x97\xf0\xb2\x90O\xd8\xad\xce\ +\xdbb\x05A\xd8\xd2Kw\xa8\xa6% ?\x01\x00\xa5\ +\x0c\x95KOwP\x0e2\xc4r\x11b\x8e\xca\xa7/\ +\xe4\x8a\x1es\xd0\xc0,\xed$\x05a\xf3,\xaf\xa5\xe8\ +z\xac\xde\xdf\x14^\xe6\xdcd.oZ\xa1d\xdf\xd3\ +e/\xfb\x9e.\x83J\xe5\xc3\x17r\xbbJ\xc6R\xb1\ +\x82P\xe8,\x18\x0b\x03D{\xea\xf8\xec\xb6\xcb\x9bD\ +\x97A\xfds\xd8~*\xeb\xa2\xeb9\xea\xe5\x1c\xfc\x94\ +2\xf9\xfc\x85\xdc&a\x88\xa7+\x08\x87\xec\x19\x1d\x9c\ +I\xb3\x88 \xbbA5\xa5\xec\x0f6y\xba\xc4\xa59\ +\x5c\xae\x0f\x98W\x91\xdd$\xa4\xa2Y\xc9\x95\x0c^\x9e\ +\xe50\xb9x\xbaB\xae\x87\xad\x94\x1e\x15\x04\xcb\x19\xaa\ +\xe9\xf8\xfd\xb4\xff\x5c\xb4\x00\x80\x02P\x9a\xbb=]X\ +'\x95a\xd7\x1c,+\x16f\xf9\x0e\x22\xbaB\xae\x91\ +\xd2\xa3B\xc1c\x10}MO\xcd\xfd\xaaD\xb1\x09P\ +qNo\x1e1\x07\x02\xce\xaa,\xdfe!\x80\xf3\xb3\ +\xb8|(\xcb\xd7\xfd\x92C\xf7\x8a\xec\xcd\x86\xbb\x97A\ +\xb4\x17\x80\x9e\x0c\xea\x09B\x0f\x02\x1b\x0cZ\x0f\x06\x13\ +\xb8\x05\x0a\xad\x00\x1a\xd9\xa3f\x06\xa5\x98\xdc\xf5 \xb8\ +\x1e\xd3\x06\x06\xd9\x06\xab&\x9d~\xbb\xe3y%Jq\ +\x91\x22\xeeAd\x94\x92\xc7E\xa4\xb8\x0c\x8c2\xd0v\ +\x8d/\x19\x1b<\xa8\xd5.y+?\xaaw^\x1fY\ +\x07;\x07\x8f\x98\x92)W\x100RSO\xf7\x83-\ +\xa2K\x8c\x92\x5c\x1e\x801X\x0d\xc4\xa6\x1e\xa2\xd9\x9b\ +\x9d\x88\x16\xc6\xb2\x9b\xd4R\x9e/_\xf0\xfa\x89\xe8Y\ +\x121\xcf\x01a<@G\x11q/l\xb5\x03@\xd8\ +\xae\x22\x08m\xf7o\xd5\xe6\x1d\x8b/\xff\x9b/\xff\x88\ +\xf4j\xf7i\xaa/\x1f\x9e6\xfd\x9e/\xff\xb9\xad\xb1\ +A\x80\x01\x86\x01\xc2\xf0r\xab\xd5\xa9\xc4+\x0c~4\ +\xc9\xce\xec\xb2D\xd6\xf6^c\x10\x04\x14za\x0c\xda\ +W\xd3\x07\x7f\xff\xcb\xff\xab@(\xc9\xe5\xbd\x15\xbc\xac\ +\xb7\x11\xbc\xad\xc6~\x87\x81\x86,&\x84\xf5\xd3\xfd\xe3\ +\x9dW\x01e\xc7\xcd\x1f\x95\xc4\xac\x15\xa4\xe8n\x22:\ +\x99\x08\xbddXwy\x01V\x04\xc2\x91Dt[\x8c\ +\xac\x0f\xedJ\xf3\x87\xd5\xc8\xc22\x96P,\xd6\x16\x0a\ +\x99j\x80\x18\xd8W\xe7\xe3B\x9b\xb2\x97\x99K\x90g\ +\xe1\x81\xeaM\xc9b\xcfe1>\xbf\x0b4\x0f#\x9f\ +\xd6\xc7|\x80\x14\xfd\x86$\x13\xdbO\x01\xeeAD\xbf\ +\xbd\xae\xca|\xf0\x95\xf8v!\xe9\xcc\xaf.\xa2+\x14\ +4WW\xc5\x06\x13\xa1\x07\xf4<.\xb440O\x97\ +r\x14\x93g\x8f\xfe\x96\xc5\xc9\xb5t\xf5\x05\xfaz\x1e\ +\x87\x8d\xb0n \xd0Y2\x8c\xb3\x16\x02;k\x14Y\ +\xbf\xf6\xb9\x0a\x8f,\x8e\x84\x02\x1fW\xf6\xbez\x96\x7f\ +Dz\xd5\xa7\xf6{_\x89.SI\x8e\xebO\xee\xb3\ +`,\x0cd=1\xc6\xfc\x1bo\xdal\xcc\x0a\xbd\xa2\ +Q-C\xcc\xa9\xca\xc8\xd7\x08\xf8\x89\x0c\xe1\xac{\xbd\ +?h\xa92\x0f\xf2qK\xa3\xafXU\xd0\x8d\x868\ +zl\x9c\x04_\xbe]\xc5\xf4MM\x1b4\xfco\xd8\ +S_\xf5`W\xb9>\xfeB\x84\xa2CGD\xb2^\ +Q\xa4xF\xeb\xa7\x04~+[\xd7\xf7LW\xcb\x10\ +\xb3\x82\xf7\x03\x22\xbfC\x9fB\x1b\x11\x1d\xb2\xd8\xc7\xc5\ +\x0d\xe9\xbd\xa5!\x14&ed\xce.\x8a\x9a\x97\xfa4\ +\x08\xc6h\xea\xe9\xbe\xb6\xed\x1c\x0cX\x01<\xc5\xc8\xdc\ +l^\xd3S\xc8^\x16\xf6nz\x0e\x03:Y\xa6\x82\ +\x9c\xad0O^?\x11=\xe1G\xe9;\x96$7A\ +/\x92S\xa2{\x83\xe8d\x97\x95_\xce\xcfh\xe8\xa9\ +\xbaol+\xba\x94\xbd\x10\xecN\xbd-\xf2\xf6\xcd\x8d\ +\xe8zOe\xd1c\xd4\xae\xbdTrjt\x0f\x22\xf4\ +\x97\xe9 g\xden\xac8b\x9d\x90\xf1L\xb3\x0f\xca\ +I\xdaI\x0a\x9a\xa1,\xef\xfb\x9bO\xd7e,\xba\xad\ +\xf1\xd8 ]\xe7.\x97\xf8\xf5m\xb5\x83s/\xba\xa0\ +\xdcx\xbao\xc1]\xc8\xc0\xda,\xedMk'\xbaJ\ +ycd*\xc8\xf9\xb7\xbe\x7f\xe6\x17\xb1\xfa\x89!\x05\ +\x9dh\x9c\x82\xde\xc4\x98\xc4\x8c\xd6\x7f/M\xbf\x9f\xf9\ +~\xaew\x90\xae\xb6H\xb7\xb8K\x02\xf7t\x89\xf1\x8d\ +\x5c\xdcgt\x02\x0e\x98\x1f\xce\xd2\xe6\xf8\x10\x0d7\xf4\ +\x07\xcat\x90\xf3\x84\xaaQ\x99^\xc3\x84'\xa2+h\ +E\xb1iV\x12\xa1\x94\x88\xff7v\x01\xdc\x8c\xc7\x91\ +\xe2\x83\xf4\x8c,\xf3'=\xe6l[3B\x01\xb9\x17\ +]\x06}\xdd\x8f\xbd\xaeN\xb9\xf6\xcc\x7f\xce\xd2\xb1\x90\ +\xc1\xfa\x95\xff\xa4>2\x1d\xe4z\x81\x99\xf9BG\xb9\ +JDW\xd0\x86e\xe3\x11\x01\xf0\xbd\xcd\xdd\xb1\xde\x84\ +/[\x928BSs,\xd9qk2\x80\x9a\xaeD\ +P\xb1\xa8q\x08r\x13b~>\x1b!f&\x0c\xd1\ +0\xd4)\xc98\xb9\xcf\x5c\xec\x9d\xf9xa\x11]A\ +\x1b\x86\x0c\xb6\xce\x22\xa2\xdd7\x0f\x80\x8c\xf7sWT\ + \xc6\x0c==]\xde\xb1\xbf\xbb\x026\xb5\x1bB\xce\ +\x8f\xae\xa8\xc3\x91\xab\x103\xf8\x91,\xcc\xa6\xbb\xae\xa8\ +\x90z\xb8B\x87\x92\xd9\xd3\x87\xc8\x90\x88\xae\x00]J\ +5*\xf0\x8f\xbe\xfcg\x17\xbc$\xd3k\xee\xd2\xc7<\ +\x98\x08Q=\x17\xdd\xf4J\x1b\xa2\x1bL\x9fN\x02\x0e\ +\xcf\xd5\xbd\x5c\xe6y\xd9\xf0\xd6{\xf7\xb6t\xeb\xed\xe8\ +\xca\xb4\x90\xf3\x0f\xdd\x15OW(\x14\xae\x89GN\x06\ +\xd1\xfe\x9bC\xcbNs\xb3\xfbR\xa6\xd74\x80#5\ +\x8drq:\x9d~14\x9e.\x801\xfe\xd7\xa7m\ +\x9b\xc7\x1a\xdc\xe7\x18\xfc\x89\xdf\xd7\xb5\x88Fh\xf6\x15\ +82-\xe4\xdc\xe6~l\xdf\x88\xe8\x0aZx\xb9\x86\ +\xf2~\xbe\x95c\xf5j\x9f\xfb\xb1\xd1\x87\xbd\xbc#\xf5\ +\x1c\xfb\xfcn\xd9\xac\x1d\xb76\x1515\x07\x94\xd5Y\ +\xfau2\xf7\xcb\xc5\xbd\xce\xac\x83\xc7\xa0\xd9\xf0\xff\xbc\ +\xf1\x08\xcd>\x83V\x99\x1ar\x9eI\x95\xce|\xacP\ +\xb9\x18R\x08\xbd\x97[\x199\x1d\xa0-s\xbaG\xf8\ +'\xfcI\xca:LS\x93,j\xfb\xf8S\x16[\xe0\ +u\xe8)r\xee\x8c\xe99j\x163<\x9f\xbd\x98\xe1\ +z\x1d_a\x11\xdd\xdc\x93\xf2a\xc5\x5c\x22f\x14\x10\ +\xf2V\xa1\x06\xbc\xff\xdb\xf6\xb3\xf5^\xc8\xf4\xba\x83\x06\ +\x19\x87\x11\xe5\xb6T\xb1\x8f\xa7E\x16\xb6\x9d\xcf\x04\xae\ +Gp\x85\x80s\xb6\xaf\x1b\x9b\x91Z\x0e\xe09\x7fE\ +\x8c\xf6\xd1\xea+\xf0\x02\xdbJ@\x01\x87\x97\xd3>\xec\ +\x0dI[?!\xd4\x9cZn\x9d\x09\xa2Q_\x09.\ +\xbcV\xe5.\xcc\xbc\xa0\x8f:N\xdb\xa1\xcf\xb4\x13O\ +\x97\xa8>\xc0\xa5\xc0\xd1\xf3*rW\xde\x8e\x19\xf7\xf8\ +|\xbd\xe1\x9a%\xf5\x88\xa7\x9b\xfbm\x94V\x1f\xde\x9b\ +x\xba\x02\xc2\xdc\x9f\x9b\xc0\xff\xb7]!\x9e%\xbd\xee\ +\xc6\xfa\xcc\xfd2>^\xd3$\xaa5\xd1\xda\xb6+q\ +)\x15\xa0\xa7K\x84~\x13\xca\xcd\x9c\x95&\x5c\xb3\xce\ +~\xc4\xcf3\xbbD\xe8\xdd:)6P\xa3\x95\x97\x88\ +n\xee\xbf\xf2\x16?\xce\x1d\x88\x1d\x85\xb0r\xd8>\xd6\ +9D\xf4\xb5\xad\xff\x9dG\x94\xf1~n\xf3D\xec\xca\ +\xa0\x034us\x17\xee\xbc\xa4%\xe3\xf3 \x9f\xcd`\ +:1W\xf7\x1aT\x87$3\x12~^SE\xec\xfd\ +Q@\xc7W\x84.GC\x9a}xo\xc9\x1c\x7f'\ +\x92\xe5.\xa0\xb3\x89N\xc4\xfc\xb3\x1d\xbf{\xef\xe9L\ +\xafm\xc5\xaco\x13\xb4]p.\xda\xa9fx\x9eZ\ +\x19\xe4\x93)\xe2\x93ry?\x87\xcc\xbb\x18\x99\xef\xb3\ +}\xf5\xfc\xb4\xbf\x0c=\xa1\x1d\xd9m\xf1\xe1L{2\ +\xc7\x11\x91\xb4\xbc7\xa13\xec1\xc8\xbc\x9c\x88\x86n\ +\xb7\xd0\xdc\xb0*\xe5>\xe7C\x09\xd5\x13u\xb5\x8b\xed\ +\xe1_;\xd5\x0c\xc7\xe0\x15\x01gx\xed\x97\xcb\x10m\ +qM\xebg\xf0\xb3X\x06CDWh\x0f\x1f\xc2\xcb\ +9>\xd6\xc7h\x92\xd7&tD\xd3T\xf4\x83\xa2\xeb\ +\xdb\xf8\x80\x9e\xdccvfY\xfb\xcb\xc6#\x02\xa2\xf1\ +\x9aF\xb7\xea\x9fX\xef\xbc\xda\x8e\xa7k\xaf\x08\xb8\xe7\ +(\x99\x96\x93So7\xed\xd2\xed\xe1j\xdd&\xe41\ +\x8e\x0f\x9dJ>\xcc\xf1\xd1\xb2/\xe4\xb5\x09\x1d\x115\ +\xcc_\x12vl\x5c\xc3L\x19\x97\xdd\x1d<\xd88\xa6\ +\xadkk\x22\xbb\xff8\xb3n\xe7\xc7SUY\x02\xf5\ +\x8c\x80\x8f\x92\x10\xe54\x8cP2\xc3~\x15\xbcs\xf7\ +\xbf\x8b\x0f\xbfWC\x1c=d\x08\x0aYL8\x5c\x9a\ +\xe3\xf0\xf2j\xb1\xba\xd0\x1e\xcd\x95\xd6(\x10Mi\xc3\ +\xcbK5\xc1\xfe[\xe6\xdf\xbc:YW\xdb0\xd1\xdf\ +\xd1nF\xf6\xa6\xd8\xf9\x87\x08\xd6\xdd\x1d\xf7Y\x1cE\ +\xb9\xbc\xa5\xeb\xd1\xad~y\xea\xc50\xbe)\xc3P\xc8\ +\x16\x9eG9\x15]\x1bxG\xac.\xb4G\x04\xb8\x9d\ +\x00\xa3\x8d\x09\xf1\xd9\xf2\x046 \xc3B\x1b\xc4|\xb2\ +\xae\xf5\x96\x1d\x98Ow(\xba\x0c,\x0b8\xc4\x5c\xdc\ +\x87\x22\xdf\xce\xe5=o\x9e\x9e~\x02\xcc\x8b\xfd\xb8\x96\ +\x01:T\x86\xa1\x90\xbd.\x15\xc6\xc2\x1cN\x1a\xe9/\ +\xd2\xb6\x88\xae\xb0SR\xf1\xc8)D\x18\xd7\xe6\xf7\xe3\ +a~\xa6\xd7\x9fPn\x8e!\xa2\x01\xd0\xb2\xbf\x09\xbf\ +U\x5c\xd3\xfaY'D\x97\x96\x05\xfd\xb0\x0a\xde\xf9\xc8\ +mqnv\xa1~\xe1\x93\xa5\x0f\x91\xa1(d\x8b\xa2\ +Dr\x05\x98_\xcb\x91\xea>\x9fi\x12\x8c\x90\xbf,\ +\x9f\x88\xa8\x22\xef\xb6\x9d$\x109v\xda~\xcc\x07'\ +\xe6,]\xed\xe3q\xfb\xa1\xe5-\xa2\x0b\xce\xed\x9e\xd1\ +N\x82\xf8\x13\xd6_\x9c\xdb&\xeb7\xd7\xa6\x1f\xf7g\ +2#\x11]!\xdb\x19\x91\x89\x1c5hxX\xac-\ +\xec\x8c\x01Q\xeb\xba\xed\x8f\x08m\xc5\xd3%\xb3\xb1\x06\ +\x99V\xb7\x22h,\xba\x1d\x9fOV\x00\xe0)~?\ +x\xb7\x1c\xb1\x126\xcf\xcc\xb9\xb7K\x99{\xbbD\xe8\ +\x97\x9c\x12\xdd[\x86\xa4\x905\x0fc\x85s\x0f\x83?\ +\xc8\xae\xb0\xf3g\xf5\xcd\xce}bm\xa1-RS\x22\ +\xfb\x10p\xe5\xceK\xbb\xd3\xacL\xefq\xc8pc\x1c\ +\x01\xbbi\xba0nm@\xc7\xf5\xa67\x89n\xdaY\ +\x8aPtA\xa3\x0bs}\xcf\x9bk\xd2\x8f\xfa\xe1\xed\ +*\xcb\x93}]!k\x0c{\x0ai\xd7\xe5J\xdf;\ +em\x9buy}\xff\xb9\xd2\x14C@\xdb]\x84L\ +\x9eI\x84\xe8Nr\x01\xd6~\xf2I\xfa\xf1L\xefc\ +\x10\x9d\xa3\xb1\x99\x16\x0cHt\x5ck]\x01\xc0\xaf\xef\ +\xc1j\x86\x0f\xcd\x863\x1e\xf48,\xd7\x1ec5\xc0\ +\x8e\xc7\xd7\xfa\xb0\x17v\x98\x0cM!\x9b\xc4\xa6\xbb\xcf\ +\x82\xf9R\x06\x18\xbe\x87\xc5pW\xa4\xc6\x9e%V\x16\ +\xda\xe2\xb4\xdef\x15h\xe7s\x1c\x03\xf7\x0f{*\xb3\ +J\x7f+*\x10\x03\xd1\xe9\xfaZ\x89\x1f\xed\x5c\xfe\xd2\ +f\xe1!\xf0\xb2\x10\x84\x98I\x99\xde\x05\x01Lf\x7f\ +c\xc63\x19\x16\x148Z\x86\xa6\x90m\xac\x84S\xe3\ +1\x9d\xc1\x8cz\xff:>\xe2\x8f/\xbeg\x7f_\xac\ ++\xb4E\xcb\xd4\xa2\xddAts{\x7f\xc7v\x91\xf1\ +\x82m\xd7>\xd6\x04]\x0bb0\xe0\xa6S\xce\xfcN\ +\x8b\xee\xe6x\xf4\xd2\x90\xa4\x5c_P\x1d@\x91\xeb4\ +\xe3\xcaLBw\x04\xda\xa7ej\xd1\xee2D\x85l\ +\x13\xadM?\x92L\xdb\xfbx\x8c\x9b2jX\xc2X\ +\xe4\xb8\xde\xb1\x91\x1a\xfb\xd2\xb1\x0b\xa4\x19\x86\xb0\x93\x85\ +\x9ea\xff\x81\xa8\xbd\x02@\xfcj\xc9t{I\xe6\xdb\ +\x8b\x98\xaa\xab\x8d\x08X\xd4\xd9$2\xb5\xd5\x7f\xf5f\ +8\xaa\xef\xd0^WU\x9aG\xe4\xfa\xbe%\x09\xfb5\ +\x80\x1f\xc8\xe4\x1a\xa6\xe1\x8c\x93!*\xe4\x82\xb2YX\ +\x1b\xa9\xb5\xaf[\xf4\x9e=\xc0v\xf8H\xf6\xf8\xc7\x0c\ +\x9e\xcd\x8c\xbf\x82\xf1\x12\x98\x17\x83y13\xff\x8f\xc1\ +\x1fl\xfa\xff\xf8\xbb\x07\xd40\xf3e\xaeK\xc3\xcdZ\ +\xfb\x88\xd8t\xf7Y\xb1\xa6\xb03R\xd3\x22\xa7\x13\xd1\ +\xa9\x1d$\x10e\xec\xe5&\xabbC\x00\x1c\x0bmO\ +\x17\xf0_:\xad\x13\xd8\xb2\xa7\xc3o\x18\x14\x8e.J\ +&P\x05\xf8U\xa6\xb1\xf3\xb8d^o\xc0\xfd.\x01\ +\xb1n\x86\x98\xc7\x01\x98+CU\xc8\x15c\x17\xc0\xc5\ +\x02g!\x80\x85b\x0d\xc1O\x9a'bW\xa5\xf8\xee\ +\x0e\xc2\xaa\x1b\x9bU\xe6\x19\xef\x8a\xddID[9\x81\ +\xbaU\xa1J\x9b\x0fw\xb6\xcc\xfa\x96\x1f\xe99\xd6\x1b\ +!*6\xfb\xdd\xe68\xfa\xe7\xfa\xb6\xb1\x9a\xe4\xc7\xcc\ +\xb8#\x83K\x88\xa7+\x08\x82\xf6T\x03\x14\x89Z3\ +\x89\xd0\xaf\x03\xc1\xb9\xa7\xd7\xddX\x8f\x8c\xcf\xe6\xf2$\ +\xe8\x1bZ~\xb9hVre\xe7\x0bAm\xe6\x96\x99\ +\xc9\x15\xcc\x99\x19\xcf\xc7\x1f\x11\x89\xc0\x8c\x07q\xef\x0d\ +\xb6}#\x83Wvs_wp\xaa22T\x86\xac\ + \x08:s]\xdc\xbcE\xafK\xc3\x00\x00 \x00I\ +DAT\x98\x08'v\x94<\xe4\xa5\xd4\x9d\x99\xde\xeb\ +\xd0\x11\xc6q\x04\x1a\xac\xab\xad\x18\x9d\x0f-o#\xba\ +\xd5\x00\x13\xc2\xb1\xaf\xbbY\xc1*\xdf\xae\x80\x95\xeb\xdb\ +\xf6\xbd\x07M\xec\xd2O\xd0\xfdr\x96'\xc8\x90\x15\x04\ +\x01\x1a\x17\xc1\x80\xeaDC\x18\xe6\xf9\xb1Y\xa9\x8f\x90\ +q\x09`u\xa9\xce\xf6r=\xa3{\xa2\x0b\x00\x1e\xf0\ +Fx\x22\xcc4`X\x1f\xeb\xdc \xee\x1d\x99n\xff\ +\x89\x19\xcfu\xf3\xc9O\x94a+\x08\x82\x8e\xbc]\x01\ +\xcb0\xbd\xfb\x08(\xee\xe8\xef:\x84\xdff,\xf0\x93\ +#\xc3\x01\x8c\x87\xbe\x19T\xaf\xc5\x12\xa9\x0f\xbb-\xba\ +\x04~\x13\xe1\xea\xd8p\xf5\xbc\x8a`6\xd7\xd9\xc3e\ +\x0c\xd8\xddx\xe8\xb1\xf5\xe7\xa1L\x86\xaf \x08\xba1\ +\xac\x8f\xf5s\x10\x1d\xd8\x89\x98\xea\x7f\x8bj\x9c\x173\ +\x9e\xe3#\xfc}]\x13\xa86\x17tz\xb0\xeb\x9e\xfd\ +\xd6+\x17/<\x9e\xee\x97g_O\xe9\x1591 \ +o\xf7\x1df\xfc\xae;\xfb\xd1\xa5\xa5\x91ce\xf8\x0a\ +\x82\xa0\x13\xad\xd3\xcc\xa3\xda\xab\xad\x8cm+\x98\xdd\x96\ +\xe9\xfd\xd6_\x8c^\x04\x5c\xa4\xef^.\x5c\x1b\xd6\xfd\ +\x19\x89\xee:r^\xef\x96w\x97E\x0c\xc5W\x05u\ +\xef\x86\x16\xfb\xff\xbaSd^\xf6u\x05A\x80f\xc7\ +\x83L\x85\x07\xdblL\xbf\xe3\x99\xd4\x0f\xdf\x80\x9dq\ +7\xaa\x126\xa7\x11P\x02}U\xf7\x99\x8ez\xe7v\ +(\xba\x03\x12h%\xe67B\x96\x8f}xr\x9aq\ +L\x10\xb7\xee?\x17-.xZ7j\xdd\x9eP\x1d\ +@U-A\x10\x84\xae\xf2J\x1cf$j=\xd8\xd9\ +\xc6\xf1\xcc\xf4\xcb\xd1\x89N\x1eJm\xe7\x9e`\x5c\xaa\ +y\xbb\xcd{\xd1\xad\xc4\xb1\x1d\xdb3\xbd\x14\xb6\x1fg\ +*\x9f\x9a\xcd\xa3;gw\xdd\xe7\xbb\xda\xcb\x94\x88\x06\ +\x5cUeJ\xd7!A\x10B\xcf(\xb2n$\xc2\xd1\ +\x9d\xac\xbc\xf4\xfe\x1b\xb03.\x861\x0a\xd6\xe9D4\ +Dc\xc1\xdd\xd0\xd0j?\x0a?D\x17\xc0\x7f\x10\xbe\ +\xd3\xc7\x87%\xab\x8c\xe3\x82\xba}\x13\xdbW2\xf3\x8a\ +\xae\xfc7\x06S\x85\x0cgA\x10\x10\xee2\x8f\x13\x88\ +pE\xe7#\xaa\xf4\x8bL\xbd\x5c\x00P\x04\xcd\x1bl\ +\xf0\xbc\xee\xb6\xc1T;f\xed\x86\xcf\xd3\xddT\x1a2\ +8o\xb7<\x81\x0d\x1esU\x173\xaf\xcf\xa8\x96\x10\ +\xb3 \x08a\x15\xdc\xca\xc8Pe\xf0\x5c\xea\xe4<\xc5\ +\xcc\xef\xbd\xf8\x9e\xfd\x002O\xd8:\xb4\xbd6\x81:\ +\xe0\x00s\xba\x7f.y;n\x9e\x9e~\x9f\x81\xb5!\ +\xfc\x9d\x07\xa7\xe2F`\x09J\xd1\x84\xfb\xa4\xc7\xa8\xed\ +B\x88y\xd0U\xd3\xccCdh\x0b\x82\x106VT\ + f\xc0\x9b\xd7\x95VzL\xf4\x0b?\xbaQ\x99\x8a\ +~\xaa\xb5\x8f\x0b^~K\xad\xb3\xd07\xd1\xad\xde\x94\ +4\xf4r\x18\x7f\xac\xa1\xe8\xa6\xa0\xce\xed\x02\xc0Z\xb6\ +\x7f\x08\xe6\xb7\xbb\xf0\xbc\x12b\x16\x04!t\xf4/7\ +\x13 :\xa0\x0bB\xf3\xce\x8b\xef\xda\x7f\xca\xf4\xbe-\ +\x95\xe6\x81D\x1a\x17\xc3\xd8\x94Hvou\xd7\x93k\ +\xdb\xdd\xd3\x05\x98_\x0a\xe7\xcf\xa5\xfdN-\xb7&\x06\ +u\xf7\x01\x09\xb4&\x99\xcefFk'C\xcc\xdf\x0d\ +r\x91 \x08\x82\xb0=v\x95y-\x11]\xd0\xb5b\ +A\xf4s?\xbc\x5c\x0b\xb8^o/\x17\xae\xeb\x18\xf7\ + \xa3\xb2\x97h\xab\xc5\x1d/\x0coG\x07\xfe\xe5\xe7\ +\x15\xc1\x9d\xed*M\xd8o\x01\xfc\xe3\xce\x86\x98O\xee\ +\x15\x5c\x02\x98 \x08\xc2\xd6\xa4\xab\xac\x0a\x80n\xe8\xa2\ +\xd2\xbctS\xc2\xae\xcb\xf4\xde\xcd\x95\xd6(\x10\x9d\xa2\ +\xb7\x05\xf9\x89\xa2\x99\xc9O|\x17\xdd\x15\x1f\xbb\x8b\x18\ +\xdd\xcb\xcc\xcaEM\xe6\xf2>\xe6O\x82|\x06\xab\xd6\ +\xb9\x9b\x99\xe7\xa3s!\xe6\x8be\xa8\x0b\x82\x104-\ +\x95\xe6\x81\x04\xcc\xa6.$x2\xc06\xf3O\xaa3\ +\x08\xa7~I\x04|=i\x9e\x5c\xeaz|\x172n\ +\xf0\xd0\x06\xc3\x9eB\x1a\xc0\xa2\xf0\xba\xf8tEKU\ +\xd1\x80@?`\xc7\x99\xcc\xcc\xefwb\x95pb\xb2\ +*6D\x86\xbc \x08A\xd1:%6\xd8\x02=\xd1\ +\x99F\x06\xdb\xcd\xb6\x0f\x15%\x9cE>dJ\x7f\x0d\ +\xa03\xf4\xde\xcb\xe5\xa5\xbfJ\xb8\xcfdEt7\xdf\ +\xe2Y\x84\xb7ip\x89\xc5\xf6\xaf\x82|\x86\x9e3\xb1\ +\xcecu\x12\x03\x8d\x1d<\xab\xa1\xd8\x8d\xcb\xb0\x17\x04\ +!\x08\xea\xcfC\x99e9\x8f\x11\xa1\x7f\x17\x0b@\xb4\ +\xba0\xaf\xf1\xe3\x19\x14\xbckunl\xb0y2\xbf\ +\xdb\x0f\x8f\x7f\xa7F\xb0]<\x1bn\x03\xd0\xf9\xc9*\ +\xf3[A>B4\x91~\xcfc\xef|fx\x1d\x08\ +\xef\xd4\xe5\x13\x11\x95\xe1/\x08B.Y0\x16F\x8f\ +R\xebA\x80\xf6\xebF\xd2\xd0oc5\xc9\x8f\xfdi\ +\xdfGgk\x9e@\xd5\xd2b;\xf7\xc2\x97\x05\xc8N\ +xy\x99\xf3\x1a\x03\x0d!\xf6v\xc9\x00\xfe\x18D\xa3\ +\xfbm\x84\xb7\xd6}\x02\xcc\xd7\xb7\xbf>@\xbf\xddc\ +\xe6E2\x05\x08\x82\x90+\xaa\x01:|\x1f\xf3n\x22\ +\x9c\xd8\x0d\x91Y\xd3\xc4\xf6\xaf}\x11\x19\xcb\xbb\x89\x08\ +\xa6\xde\xd6\xe4\xfb{\xce\xc4\xba\xac\x8a\xee\xa6\xf4p^\ +\x10no\x9f\xbe>\xbc\xdc\xfca\xd0\xcfqc\xc2\xf9\ +\x153?\xd4\xc1_\xbb:\xe8\x05\x82 \x08\x85\xc3\xb5\ +q\xebf\x02M\xebfm\xe1k\xcb\x13\xd8\x90\xe93\ +\xb4L5\x0f\x06\xd1\xe9\xba\xdb2\xed\xd1\xdd~]K\ +u\xd4\xba(\xf4\xd6 \xfa\xbf\xd6)\xb1\xc1\x01\xaf(\ +\xf9\x0bv&\x83\xf1B;\x0b\x84=\x87\xf5\xb6\xce\x93\ +\xa9@\x10\x04d\xff,\xee\x15J\xe1\xaan\xc6R_\ +\x9c\xdf`\xcf\xf6\xe39\x22&\xfdJ\xf7\x8ce0^\ +,I\xd8\xaf\xe5Dt]6\x9e\x0e\xff\xde6JL\ +\xd3\xad\x09\xfa9\x06$\xd0\xba\x81\xed\x93\xc1\xbcx\xe7\ +\xeb\x03\xbef\xc1\xd8\x8e\xfbU\x0a\x82 t\xdb+\xab\ +\xb4&\x03tK7\xf7.\xed$\xa3\xf2\xcc\xba\xf6\xf3\ +T:\xc3\xe6\xb2\xbdcu\xb7\xa7\xcbt\xbb\x9f\xd7k\ +Wtc\x89\xd4\x87\x00\xbf\x19~g\x17\xe3\xd3\xf1\xe0\ +*Ua\xab\xc6\x08Ir\xc63\xf8\xdd\x9d\x9c1\x1e\ +~\xd8>\xd6Y2-\x08\x82\x80\xec418\x8d\x08\ +\x89\xeez\x97\x0c\xdc\xb6\xa9\x00Pf\xcc\xab\x802\x88\ +n\xd6\xdd\x9e\x0c^\xf6\xef\xa5\xe9Gr&\xba\x00\xe0\ +\x81\x1e\xd1\xc18\xa4pG\xeb\xa4\xd8\xc0\xa0\x9f\xa3\xb4\ +\x06_\xd8\x8eu,\x83\x97\xb7mp\xbe\xbaZ\xba\x0f\ +\x09\x82\xe03\xc9*\xe3hE\xfc\x00\xa1{\xd14\x06\ +/__o\xdf\xe8\xc7\xb3\x9c\xda\xdb\xba\x10D\xa3\xb4\ +\x17]\x8fn\xf5\xa3\xfce\x97D\xd7v\xf0(\xb48\ +B\x85\x9ef\xc4\xbd;\x0c\xcfR<\xa3\xf5S/\xad\ +\x8eg`U\x1bO\xfa\x8dk\xaa\x82\xeb\x96$\x08B\ +\xfe\xd1\x1a7\x0f7\xa0\x1e% \x86n\x87Q\xb9\xaa\ +_\x1d\x9a\xe1C\x07#\x22\xae\xd6^p\x19\xab\xd7\xac\ +\xb3\xe7\xfa}\xdd\x0eE\xf7\xd6\x19\xf6k\x0c\xfeD\x07\ +#\x11\xe1\xa4t\x95\x15\x8a\xa39\xd1{\xd2K][\ +\x1d\xc9\xcc\x1fn\xffg\x06\xd4\xd52M\x08\x82\xe0\x8b\ +\xe0N5\x8f0\x15=E@Y\x06a\xd4\x07c\xb5\ +\xae/9<\xfd\xfb\x98\x97\x11\x91\xfeU\xf8\x98\x7f7\ +\xa8\x0e\xc9\x9c\x8bn5\xc0\x0czT\x17;\x11\xe3w\ +\xc9xt\xaf0\x9c\xcc\ +`\xbe\xafxF\xeb\xa7\x81\x8a.\x008\x1e\xee\x85V\ +\x0d!`\x98\x06\xeeo\x9a\x8a~ay\xa6\xd1\x098\ +\x91Z\xfbJ\x8f\xe9\x0cfl \xe2\x8b\xaa\xe5\xf8\x90\ + \x08\xe8|\xc1\x09\x03\x99\x0b.\x00x\x1e\xc5\xcbf\ +a\xad\x1f\xcfu\xf8\x083\x0e\xa2\xfd\xf3\xc0\xcb\xb5]\ +6n\xcc\xe6=:-\xba\xb7Lw\xfe\xd5V&n\ +\xc8k3\x0f\x8c\x1a\xd6Ca\xd9\xdf\xc5\x96&\x09\xe9\ +G<\x8fF\x13\xa3\xe1\xaai\xe6!\xb9\xf3\xfe\xb9H\ +\xa6-A\xd0\x93t\xdc:O)5\xbf\xeb=q\xdb\ +\x0c+\xcf\x8cNO?\xee\xc7sm\xb8\x10\xe5 \xfa\ +E>\xd8\x98\x19\xf7l*\x0a\x15\x02\xd1\xad\x06\x98\x89\ +\xee\xd3\xcd\x88D8z\x14\xac\x1b\xc2\xf6\x5c\xd1\xe9\xe9\ +e\x0d\x0d\xcea0r\xe8\xe9r\xe6\xabcA\x10\x10\ +D-\xe5\x1f\x90\xc2\x5cB\xe6MS\x18\xbc|\xa3\xe7\ +\xfc\xc8\xafg\x8b\x15Y7\x11\xd07\x0f\x047\x95m\ +/\xb7K\xa2\x0b\x00\x9e\xad\xe6\xb0\x0fM|\x03\xa8V\ +ue\xaa*rj\xd8\x9e\xab_\x1d\x9a\x8bj\x9c\x17\ +sx\xcbR\x99\xbe\x04\x01Z\xb5\xe7KWY7\x11\ +\xe8v?\xf6K\x19p]`\xa2\x1f\x1d\x84\x00\xa0%\ +n\x8e!`Z>\xd8\x9a\x09\x89\xa2DrE\xa8D\ +763\xf5\x01a\xdb\xa3/\x9a\xec\xef\x92\x02\xcfN\ +\xc5##\x0ay\x003\x93x\xba\x01\xecq\x88\x11\x04\ +t39\xe9\xbaJ3\xa1\x80k|\xdc\xb3\xbc1V\ +\xe3\xbc\xe0\xc7\xb5\x96\x8dG$B\x98I\xd45\x1d\x09\ +k\x93z'm\xe7\xa4V\xb4\xea\xfa\xe6;\xe6\xe89\ +\xf7\xa1\xa7\x22\xef\x89\x8dq\xf4)`\x01\x10\xd1\xcd\xfd\ +h\x96\xaeR\x02\xbaSJ\xf1\xf0\x11f\x1d\x11M\xf5\ +\xf1[|\xe1\xc5wm\xdf\xf6^\xf7\x1cb^\x83\xff\ +o\xef\xcc\xc3\xa4\xaa\xae\xae\xbf\xd6\xb9\xf7VU\x0fH\ +\xd3\x0dN(\xce\x0aJb\x0c$\x0eq\xc0\x98|F\ +\x13#\xa8\xadq@\x86\xa6\xab\xda\xa8o\x9c\xe2\x98h\ +'\x0a\xce_\x12c\xb4\xab\x9a\xc9)QP\x89S\x9c\ +\x105\x11\xc5\x88yU\x1cP\xd4\xa0\x18D\x84\x06l\ +z\xa8\xba\xc3~\xff\x10\x13\xa32WUW\xdd\xbb\x7f\ +\x7f\xf9\xf8\xef;\x03\xed3\x01\xec\x1b\x12\xc1m\xeb\xf2\ +\xdc\xeb\x8a\xf977It+\xd3\xde\x8b_\xf4\x12.\ +\xc3\x5c\xf3\xd5\xb9&\xe7\xa4\x88=\xd7\xba\xd3\xd5\x9d\xae\ +R\x82\xb8I\xfbL\xcb2\x0f\x92\xd8\x22\xcf\xaa2g\ +A\x9b{I\xfe\xec'\xe3;\x03\xbc\x224\x81\x0f\xe4\ +\xd7\xbd'aE\xc9\x8b\xee\xa7\xdf\x157\x94\xb7\xe6\xc2\ +\x10\x98\xd2\x9d\xb2\x0e\x8fNvYE\xb7'\x0e\xd25\ +\x08\xca\xda\x98\x9b\x84\x9dkr\xfe@\xc3\x1b6\xb5\xf9\ +\xfc\xba\xceq]\xcf:a\xaf\xe9p\x91\xa7\xebK\x16\ +\x83t>\xdc\xb0J\xe3,W\xdezk\x85wS\xb1\ +\xff\xee&\x8b\xee+p\xef\x15\xc8\x07e.B1\x0b\ +\xe6\xee\xce&\xfb[\xfa\xf8+\x05\xca_y\x1a\x04\x05\ +k)\x98\xda\xdb8\x7f1\xc0O\x0bP\x1c\xe4\xf9\x0c\ +N\xa8\x98\xd4\x9d\xb7^\xe8\x97$\xed\xd3H|/<\ +\x9b\x5cs~\xbe^H\x8a\x22\xbaC3\xf0\x00\xdc\x5c\ +\xee\x81'Q\xed\x08\x1f\x8a\xc4\x1d^\xe6\xbf!\xb3\xb2\ +\xde\x06\xcf9\x0d\x82\xf2E:S\xf6\x90\x84\xb1\xe7\x12\ +\xf8~\x81\xb6q\xe7%Z\xfc'\xf3\xf5q\xd9\x86\xd8\ +@\x18^\x8b\xd0x\x16\xe0\xc9x&\xd7#}\xe27\ +\xebRs\x16^\xab\xa0\xfc\x17r\x12\xfd\x8c\x09fv\ +7\xc4w\x09\xb79\x06:t\xb9+\xba!\xc9G\x1a\ +\x05\x05\xff\xed\xa1\xdc\xe0\x90\xcf\xe4\xbb`\xeasi\xd3\ +\xdb\x9c\x8c\xf7\xbb|}\xdek\xf5p,;\xb8=,\ +\xc7S\x22\x08r\x82s{\xea\xefo\x96\xe8V\xb7\xe0\ +c\x88\xfc1$\xc6A\xdbY\x8e?+\xcc=n\x05\ +\xf8\x00J\x91_\xe8d\xb1FA\x01>5\xbcpS\ +v\xab1\x98H Q Ey\xf1c\xf1R\xf9\xfc\ +\xc8\xddj\x9df\x90CB\xb4\x12\xdeR\x95q\xff\xb7\ +,E\x17\x00\x02\xcf\x5c+\xc8\xcf\x85\xeb\x12\x10\xde\x01\ +\x96\xed\xcf\xeaJ&\xb6\x0fiM\xcf\xbbP\x8a\xfbx\ +\xfb\x5c\xa0QP\xba\x9b\x12;lS\xe7\xfc-\xaf\x0e\ +S_\xde\xc1-u=\xfb\x98m3\xf93/\xea\x1a\ +g\x1fH\xe2\x82\x10m<:\x5c:\xbf\xe8\xc9\xef\xb0\ +\xd9\xa2\x1b\x9f\x94\x9b_\xd6f\x19_\x16\xde\x9dlz\ +\xb3:\xc7U\xf4\x0f\xdb\x83\xef\x07\xf2\x8a.\x7fE}\ +\xc0\xc5\xa5\xfb\xb4F\x22\xe2\x82\x9b\xb2\x0e\xb7\xc4\x7f\x11\ +\xc0\xd0\x02\xce\xb5\x9cO9>\x9f\x85SmIla\ +\xdb\xb85\xdfU\xd5\xe8\xd9\xea\xa9k*[\xba\x16\x97\ +\xb5\xe8\xaey\x9b\xbfB\x04AxR\x82\xdc\xd5\xb1\xdc\ +\xbfv\x8f\x89\xef\x14\xa6\x87\xbf\x8d\xfe\xd3\xe5j\xe1Y\ +\x9e5T\xf2zU\x06K4\x12\xd1d\xc1\x11\x88\xe5\ +R\xceu\x16\xcd\xc3da=\xdf%@*_\x8d\x0c\ +>\xa3\x17\xed\x1b\x08\xee\x14\x9e\xfa\x0ay{\xc9\x0a\xef\ +\x9a\x9e\xfe\x1ey\x11\xddX\xab\xfb: w\x87\xeb,\ +\x8e;[q\xff\xaf\xd9\x86\xd8\xc0\xb0\xfc\xa6O\xd3N\ +\xf2\xb8.\x87E\xdb\xe9N\xd1(D\x93lCl\xe0\ +N\x03\xec9\x8687\x1f-\xf9\xd6\xe3\x990>\x96\ +q\xa7\xe6\xf33s\x8d\xce\x09$G\x85iL|\xc8\ +\x19\xdbO\xef\xf9\xc2\xdf\xbc\xb5d\xca\x0a/\x0f\xd3n\ +\xf7\xb3\xe2*c\xcb\xd3\x1d\x8d\xce\xdea\xf9Mn\x80\ +\xcb\xcb\xb1'r\x19\xbeU\xffkE\x9b\xd7\xa2\x91@\ +\x14\xab\x93\x1b\x8d#sA\xeeS\x84yv\xe7\x84\xb4\ +\xfb\xcb\xbc\xbe0\x8c\x8d\xedN\x0b\xad!{\x1e\xa7'\ +\xd2\xfe\xa3\xa5\xf0]\xf2&\xba\xd5\x19\xf7UP\xeeE\ +\xe8\xaaO\xb1e\xcc\xe0\xc9\xae&\xfb\x800\xfc\x9e\xca\ +Vo.D\xee\xd0\xa5\xb1\xa0W\x12<\x1fr\xea\x96\ +\xd3\xf5\x8aV\x94\xf8\xe4T\xd4\xbaM\xf6=\xc6 S\ +\x14\xd7&\xc1\xec%m\xde\x98\xe6<\xbeD/\x19\x89\ +J+\x16\xdcM\xa0W\x88\x9e\xc7O\x5c\xdf9\xbbT\ +\xbeO^\x9b\x0f\xe7\x84\xa1\xdcE\x91\xe8c\x0bgf\ +\x1bc\xc7\x84\xe1\xf7\xach\xf3\x9a\x00<\xa7\xcbda\ +\x9aa\x07d}\x22\xed\xcf\xd2h B\xd5\xc9\xd6\xa1\ +\x15\x95\xf6\xcb\x04\x8f)\xce<\x93w\xbar\xee\xf0|\ +\xa7K\xeb*\xed\x1b\x01~-d\xc5\x15\x97\xe5\xab\xc3\ +R\xc9\x89nU\xda}\x05\x90\x19\x08\xe5}KT\x18\ +#\xd3\xdd\xa4}f\xb9\xff\x96-\xa7\xa3ci\xe0\x1e\ +\x16\x007\x85\xedH\xa0'+\x95\x05r_ \xdc;\ +\xde\x92\xfb\xb3F$\x1a,\x1b\x8b\xea\x5c\xca\xb9\xd1\x82\ +y\x82\xe0v\xc5\xea\x8c\x13\x04\xe6\x87\xbd\xa6`Y^\ +7M)g,\xc91!K;\xbd\xf4r\xe0\xddX\ +b\xf6\xc3\xc8{\x01\x81\xb1e\x1e\x09;\xac\x0fZ\x00\ +\x5c7\xa1\xc5=\xbf9\x04\xbb\xfal2\xb6\x07)\x8d\ +\x86r\xa8\x80{o\xc8\xf5\x00\x01:\x01YJ\xc1r\ +\x80\xab\x05p\x01\xb8\x80\xac^\xcb,\xeb\x80 \xb7\x16\ +\xc7\xa6\x15k\xf979R:6p@\x8c\x80\xbd\xd7\ +\xfc\xbb\x0aB\x12k\xfe\xbb7\x04\x06\x80\x03\xb0\x1a\x80\ +!\xa4V\x88Z\x08kITo\xee\xae\x16\xc0l\x04\ +\xf2\x90\x0f\xeb\x81D&\xab\xf7\xa0#\xb6\xbb\xb5\xc0I\ +\xc5\xac\xf0\x15\xa0\xc3\xf3\xe5\xfb\x15\xad^^3U\x1d\ +)\xe7\xeb1`\x0e\x89\x8a\x10\xa5\x95\x03\x0f\xf2\x9d\x8a\ +\xb47'\xd4\xa2\xbb\xe6\x8d\xe9&C\x9c\x16\xf2B\x99\ +{V\xb4y\xa3\xc2tn\xb7\xfcd\xf4J\xf4rv\ +\xb1$\xa8\xa5X\xb54B\xf1\xd9-\xc6\xef\x0a\xc0\x15\ +\xf4\xec\x8fW\xe5\xba\x97m}\x1b:\x11\x92+\x1d\xdb\ +n\x8fZ\x9b\xb1>A\x10\xd4\x18#5\x14SCH\ +\x1f\x18\xd4H\xc0->\xf7\xa4x\x14Y)\xe4JA\ +\xf0/\xc9\xd9\xf3\xaf\x9a\x92]\xd8\xacEi\x91c\xf9\ +\xc9\xe8\xd5\xab\xda\xb9\x9aDS\xa1+\x93\xbft\x17\xd7\ +\x0f\x8eN\xb4\xfa\x8f\xe4\xf3s\xdb\x92\xd8\xa2\x17\xed\x17\ +H\xee\x1e\xaa\xcd\x91 \x1dK\xbbM(\xbdF;\xf9\ +g\xf58l\x19\xb7\x9d\xb7\xc3t\x18\xbf\x96\xc7\xe0e\ +\x0f\xf6\xd1\x89\x96\xee\xf7t)R\x94H4\x9a?\xcc\ +\xb28\xb1P\xbe\xc9\xeb\xda\xb5\x09pr,\xed\xde\x99\ +\xcf\xcfm\x06xI\xca\xbe\x8bd}\xd8n\x0ft\x18\ +op\xcd\xcdX\x19\x09\xd1\x05\x007e_B\x86\xa8\ +\xd9\xf1:zVz\x90c+\xd2\xde\xdftIR\x94\ +p\xb2\xaa\x01}*m\xfb*\x90\x8d\xc5\xdc\xdd\xfe\xc7\ +\xfcBNw2\xf9\xef\xfd\xea&\xed\x8bh8!l\ +\xe3\xe5#\xf8Q\xbc\xc5\x7f\xa8\x14\xbf\x9b)\xd4\x07/\ +\xef\xf4~S\xee\xfdv7\xb4C\x91M\xcet\x93v\ +\x93.M\x8a\x12.\x9a\x01\xe6R\xce\xc8J\xc7y\x83\ +d\xb2\x87\x04\xf7\xb2B\x08n6\x15\xfb1B\xb81\ +\x12\x91[JUp\x0b\xba\xd3\x05\x80\x5c\x93s\x8a\x01\ +nCt\x0c\x11n_\xd1\xe65\xe9\xfdLE)\x7f\ +r\x8d\xce\x9e\xc6\xc2\x1f\x00\x0cC\xcf\x9dK\xde\x10K\ +\xbb?\xcb\xf7\xe7\xaenr\xf6\x8a\x03\xcf\x85\xed\x08P\ +D\x16wz\xde\xe0\xde\x93\xb0\xa2T\xbf\xa3)\xe4\x87\ +\xc7Z\xdc\xdbE\xf0$\x22\xd3\xc6\x8d\xa7\xf4\xa9\xb3\xe7\ +\xaeN:\x83u\xc9R\x94\xf2dq\x12\x15\xb9\x94\xd3\ +L\x83\x7f\xf4\xa4\xe0\x0ad\xd2\x9f\xdb\xdc\xb3\x0ba\xe2\ +\x11\x17\xf9s\x18kn\x02\x9a\xd3KYp\x0b.\xba\ +\x00\x90%\xce\x5cs\xa5$\x1a\xc2\x0b\x0e\x8c\x13\xcf\xe5\ +\x9a\x9c\x93t\xf9R\x94\xf2\x22\x9b\x8a\xfd\xb8\x1f\xed7\ +\x0cq\x19\x89x\x0f\xee\xd8&\x8eo\xf1\x1a\x8f\x9f\x9e\ +\xdf{\xf4\xaf\xd5\xc3\xa9\xa8p\xee&\xb9+\xc2\x97i\ +\xbc\xad\x1c\xee\xc8\x17\x5ct\xab[\xdc\xd7\x04\xf8\x1d\x22\ +\xd5\xb8\x1c\xd5\x06\xb8\xc3M\xd9\xd3V5\xa0\x8f.e\ +\x8aR\xfa\xf7\xd5\xdd\x94\xf3\x80E\xb9\x8f\xe4\x0e=}\ +&9\xa3\xcdK5\x17\xe0:\xdanu\xceoI\x1c\ +\x1aBs\x9a\x0f\xbb\xba\xbc\xb3\xcacc\x86\xe2\xb8\xb6\ +\xf4\x8e\xd9o\x14\xcb\xb1\xa5\xb4&\x83\xfc\xd3\x03N\xa9\ +h\xf1\x9e\xd5\xa5MQJ\x8b\xd5M\xe8\x17\x13\xe7W\ +\x04\x1aK\xc1\xd0GDn\x9b\xd1\xe6\x8d\xce\xf7\x0e\x17\ +\x00\xdc\x94\x9d\x22\x19\xca&\x1c\xbe\xf0\xe8x:w\xbf\ +\x8a\xee\xe7\xdf$\x1bc\xc7X\x96\xdc\x83hZ\x04\xfa\ +\x02\x8c\x7f%p/\x1f\x9a\x81\xa7K\x9d\xa2\xf4,\x0b\ +G#\xde?a\xff\x0f\xc0K\x08\xf4.\x91\x17\xf4?\ +\xcd\x9e\xef\x8d\x1c\xf6\x14\xfc\xfc\xa7\xcd\xad#\x0c\xcc\xfd\ +at\x0a\x14\x91)N\xda\x1b\x8b\xb29\x82,\x22n\ +\x93=\x9d\xe0q\x88n\xfb\x99\x17\xb3\xe0\xd8O=\xaa\ +\x15EA\xcf\x9c\xdb\x1ek\x10\x5cCr\xe7\x12\x12\x8e\ +?\xbe,\xde\xa8B\xbc\x94w6\xdaC\x1d\xc3'7\ +\xd7\xf6\xb4D\x05\xf7\xadU\xae7\xa4\xefd\xacV\xd1\ +\xc5Z\x9d\xaa^#\xd07\xc2\xc6\xf89B&\xbc\xb9\ +\xdc\x9b\xb0\xd7\xf4\xe8\x14\x98)JO\xd3\xd5h\x1f\xec\ +X\x1c\x0f\xe0\xc0\x12;\x82j\x9d\xb1\xdck*DJ\ +\xb9;\x19\xdf\xd92\xc1\xb3\x04\xb6\x0a\xe3Z\xea\x8a\x1c\ +P\x99\xf6^DY\x15\xdb\x16\x99\x5c\x93s\x92\x01\xb4\ +\x9f\xab\xc8+Y\x9fc\xaa&\xba\xff\xd0\xe5PQ\x0a\ +Gg\xd2\xfe\xb6cx\x05\x81\xef\xa3\xf4\xfc\x81\x7f;\ +!\xed\x9e\xd3\x5c\x80\xa2\xa9\xf61\xe8\x9b\x88\xdb\xcf\x12\ +\xdc-\x94Kh ?w2\xdeu(\xbb\x1b.=\ +\x80\x9b\xb2\xef%9Bu\x17\x01 \x13\xdb\xc5\xfby\ +m\x06\x9f\xe8\xf2\xa8(\xc8\xaf\x01\x84\xc8e \x8fc\ +\x0f\xadu\xeb\x14\xdc\x00W\xc72\xee\x85(\xd0]\xe3\ +-\xe9\xcc\x04q@H3\x86\x8f\xcfX\xee\xfe\xa0\x10\ +\xd9\x81P\x8an\xe7Xl\xe38\xce<\x12u\xba4\ +|\xea\xa2\x22\xc2\xb3c\x19w\x9aFCQ\x90\x87\xf6\ +\xa2\xc1\xaf\x00\x1eG\x16\xfeZ\xe4\xa6\xf4^\x86\xc8\x85\ +N\xda\xbb\xa6\x10\x9f\xff\xd40X\xdf\x19h\xcf x\ +TH7+Ks\xe2\xee]\x95\xc1\x12\x94\xa5\x97C\ +\xcf\x153\x8c\xb0(\xf7\xea\x12\xf1_\x93\xe9\xb1 \xe0\ +\x19\xf1\xd6\xdc\x02\x8d\x86\xa2l\xe4\xce6\xe9\x0c\x8eS\ +.\x04\xf9\x93\x0d\xe9\x0b\xddc\xd9-\x913\x0b\xe1\xa5\ +\x8c\xffd\x12\xd3$\x93!\xdd\xe1J\x80\xe0\xa8R\xf6\ +V.Y\xd1\x05\x80\x5c\xcai1DJ\x97\x8b\xff.\ +\x0e\x10\xe0\xc6.\xd7\xbd\xa2\xd4\xed\xcc\x14\x05\xa5Q \ +\xb5\xbfmp!\xc8\xa3J1\x8d\xfc\xb9g\xbb;\x08\ +82\x9e\xc9\xdd]\xc05\xf5jC\x9c\x1f\xd6\xb1.\ +\x94\x17udDw\xc9HT\xd6U\xdasI\x0e\xd2\ +\xa5\xe3K\x0fh\x1b \xd7,|\xcf\xfb\xcdn\x0f#\ +\xa7\x11Q\x94/\x88\xed8\xfb@\xdb\xe2\x05$~T\ +\x06Y\xac\x15^ \xc3+Z\xbd\xbf\x16l\x87\x9b\xb4\ +/\xa5\xe1\xafB\xbc(\xfe\xfd\x83\xac{\xf0\x8eS\x91\ +U\xd1\xdd\x0c:\x9a\x9co\xc4\x04sz\xd2\xe7\xb4\xc4\ +\xcf{\xdf\x08\xc4\x5c\x14\xcf\xe4\xee\xd3h(QgZ\ +=\xcc\xd1\xb5\xb1\x11\x16\x82\x8b@\x0e)\x93gxQ\ +\x96<\xa2\xba\xc5}\xad\x80\x82{\x0e\x0d\xaf\x0f\xf1&\ +d\x99\xe7ZC*&u\xbf\x8f\xb2\xf7\xe7/\x01\xdc\ +\xa4\xfd3\x1a\xfeV\x97\x94u\xf2\xbc\xe7\x07\x97$Z\ +\xfd'4\x14J\xd4X9\x1a\xbd\xab\x12\xf6\x18\x00g\ +\x10\xdc\xa5\x8c\xe4b\x9e\x9b\xb5\x8f\xac\x98\xd2\xfdA\x01\ +\xcfpS o.\xe5\xd4\xfa\xe6:\xfa\xf9\x08\x8eL\ +\xb4\xf8\x8f!\x14MqJ\x04\xb7\xc9\xbe\x93\xe0\x09\xba\ +\xbc\xacw\x02>\xe1zrI\xe5D\xefy\x8d\x86\x12\ +v\xb2cc\xbb\xd3\x913I\x8c*\xb7Vt\x22x\ +\xb2\xc3\xb8\xc7\xd4\xdc\x8c\x95(\xdc\x19\xeeH\x02SK\ +\xb1J;\x8f\xe6!\xbftZ\xbc+\x10\x9aNt%\ +\xc2\xd2zT\xd5\xd6\xda\xcf\x83\xdcK\x97\x9a\x0d\x9a\x89\ +\xb3\xbd \xb8Lw\xbe\x0aB{^\x8b\xff\x01yL\ +\xa9V\x22\xaf'\xa5\x9cy\xab\xcd;\xa3\x90\xaes\xd9\ +\xa6\xd8p#2=\x8c~\xca\x9f{qypF\x9b\ +{t9\xde\xc7-y\xd1\xfd\xf7\xfd:G\xfe\x1e\xc6\ +\xe6\xca\x05\x14\xdf\xa7=\x09\xc6'2\xfe\xe3\x1a\x0c\xa5\ +\x9ciO\xa2.a\xec\x91\x104\x91\xdc\xa3\x5co\x1f\ +\x00r\xa6\xd3\xe2e\x0a\xdc@\xe6(c\xc9\xdd\x04b\ +!\xaegy\xb7\xd3\xf3\x86\x86\xed\x16\x07K\xb0\xaf\xe5\ +q\xc6\xc8\xb4\xb0\x9eO\x14\xb2\xb2\xcf\x17^\xfb\xdc[\ +\xb9\x19\x85\xe8R\xa2(\x85\xa0\x19\xe0\x85\x8d\xd6w-\ +\xc3q\x00G\x94sA\xa5\x00\x1fy\x9e\x1cW1\xd1\ +{\xa6\xd0\x1d\xdb\x8c%\x7f\x0a\xb7\xe0\xa2+G\x1cP\ +\xd5\xe2\xbe\x14\xb6\xdfV\x92\xc2\x96K:\x97\x1b\x83_\ +\xe8\x92\xb4i\xfd{\x01\xdc\xf0I\xbb7\xa9\xee\x0e\xb4\ +kD\x94R\xa4s,\xb6ql{4\x0c\x1a\xca\xab\ +0j\xadO\xde?\xdc\xc0\x1e^\x91\xe9^T`o\ +\x83\x9f\x10\xb8-\xcc)e\x00\x08\x02\x8c\x89e\xdc\xa9\ +a\xfcm,\xd5\xb7\xdfKR\xf6]$\xebuy\xda\ +\xe4\xb7\xeeU\x02\xb4\x06\x81\xb99\x91\xc9\xbe\xab\x11Q\ +P\x02=l\xb7\x89\xc7\x8e4\x0cFA\xf8\xc3\xb0\x08\ +\x87\x88\xdc\xb9\xbc\xd3k\xd8\xfa6t\x16XpG\x92\ +\x98R\x8eg\xdc\x1bi\x80q},\xed\x9e\x17\xd6\xdf\ +W\xb2)\xdc5\x86\xdd\xb3@\xec\xa7\xcb\xd5\xe66U\ +\xc0,!2\xaf\x04\xee\x8cB\xf4\xebT\x14\xac\xe3^\ +\xedQ\xbd\xed\x03,\x8b\xf5$N\x0aS[O\x01D\ +\x04\xbf\x9e\x90v\x7f\xd5\x5c\x80.A_\xc8\xfe5\x90\ +\xc8\x84\xb9JyML\x1f\x99=\xdf\xfdQ\x98\x8f\xc8\ +J\xfa\xdc\xb4#\x89\xadc\xc6~\x9e\xe0\x00]\xbe\xf2\ +\x92z\xfe\x00\x01Z=\xd8S\x0a\x9d\x06S\xa2Mg\ +\xa3=\xd46<\x89\x90\x13Hn\x1bF\xc7\xb8\x00\xc1\ +\xa9\xc5\xf0\x00vS\xf6i \xff\x10\xfe:\x17\x99\xb7\ +\xaa\xdd\xfbN\xd8\x8f\xc5J~\x10;\x1a\x9d\xbdc\x16\ +\x9e&\xd0[\x97\xb2\xbc\xef~oi\xebp\xef-t\ +ZL\x89\x06\x1d\xe3\x9co:\x16\x86\x13r|\xb9V\ +\x1fo\xe8u=\xd7\xb3N*\x86;\x92\xdbd\x9f\x05\ +\xf0\xff\x87]pE\xb0\xd4\xf7\xcd\xbe\x89\x89\xd9\x85a\ +\x7fN\xcab \xbb\x9b\xecC,\xf0\x11\x02\x09]\xda\ +\xf2>\xd9?\x01e\xba\x1f\xc8\xed\xf7\xaf\xf0\xff\x1a\xa6\ +\xfbpJayj\x18\xac\xfd\x06\xda\x07\x1ap\x04E\ +\x86\x93\xdc!\xec/\xab\x02\x5c\xf9\x8a\xb8\xcd\xc58\xa6\ +\xc9\xa5\x9c_\x1b\xe2\x97\x11X\x83\xb2\x9e\xc8a\x15\x19\ +ov\x14\x9e\x9b\xb2y{\xca\xa6b?6\x90{\xc2\ +^\xb5\xd7\xc3\x93\x7f9 \x7f\xf1!\xb7\xde\xdf\xe6\xcf\ +R\x01V\xbe\xc8\xa2z$\xfa\xd5Z\x07\x1a\x98\xa3\x08\ +\x1cOb\xeb\x88<\x1bK\xfd \x18\x95h\xf5\x1f)\ +\xc6\xcb\xcc\x01{8\x7f\x88J\x07\xb6@\xd0\x18K\xbb\ +\x13\xa3\xf2\x0c\x95U\xca\x22\x97r\xc6\x91\xc8\xe8\x1d\xde\ +\xe2\x98\xb4\x0bxO\xc0\xe0\xfeW\x03\xffoZ\x80\x15\ +]\xb2\xc9\xd8\x1e\x06\xc1\x0f@\x1e\x0e\xe2\x10\x02\x95\x11\ +{\x19}4\xeb\xbb\xa7VO\xc4\xd2b\xbc\xd4l]\ +k\xff\x91\xe4\x88\x88\x08\xeeU\xb1\xb4{Q\x94\xe6S\ +\xd9\x89\x97\x9b\xb2/$y\xa5.\x85En3(\xf2\ +P\x00s_\xbb\x9b{\xb4\xefd\xac\xd6\xa8 \xd4\xcd\ +\x05*\x9c\xd8a\xc6\x04\x87\x038<\xeci\xe3u\xcc\ +{\x17\x22\xbf\x18\x9f\xf6\xaem.pu2\x00\xac<\ +\x0d5\xd5\xe2\xdc\x07\xe0\xe0\x88\x14v\xde5c\xb9w\ +R\xd42je\xb9c\xcc\xa5\x9cfC\x5c\xa6\xcbc\ +\xcf\x9c\xbf\x00\x98\x0d\xc8\xa39\xf2\xb1k[\xdc\x97\x8b\ +\xb1 )\x85c\xd9XTW\xdb\xd6\xfe\x06\xe6`C\ +\x1c*\xc0\xbeQ?\xc6\x11\xc8BOpbE\xda\x9b\ +\x83\x22\x99\x85\xc4\x1c\xfb\x11\x90_\x8f\xc8:\xf2\xe4\xbf\ +\xb2\xee\x11\xe5\xde\x1b72\xa2\xab\xaeU\xa5e}\x07\ +\x91\xc7\x85\x9c\x15\x04\xe6i5\xe2(\x83\x9d\xeci\xa8\ +\xa9\xf0b\x07\xd1\x92\x83\x0dp\x90\x08\x86h\xad\xc4\x7f\ +\xee\xde\x022\xb9\xa3\xdb;\xb7f*V\xa1H\x9d\x94\ +L,x\x84\xe0N\x11\x89\xf2\xcb\xab\xbb\xbdC\x8a\x15\ +_\x15\xdd|\x0ao\x933\xc1\x00\x17\xe9RQZg\ +\xc1\x00\x9e\x16\xf0i\xf1\xf8\xcc\x95\x93ro\xeaN\x18\ +=Za\xdb\xe5?\xbf\xc5\xadh\xd3\xc8\xa0 \ +\xf6\xa9\x17\x8d\x8d\xed\xc6\x98\x0c\x85\xe0[\x86\x18*\xc0\ +>\x04\xaa4:\xeb\xdd\xddNl\x0f\xbc\xf3j3\xf8\ +\xa4\x88\x9b\x86Q\x14\xa4\xcb\xb9\xc9\xc3F\xc6yY\x10\ +\xf0\xc0x&\xf7f\x94\xe7[(\xaa\x80\xdd\x94\xfdK\ +\x92\xbf\xd6\xe5\xa3\x8c\x9a2\x08^\x82\xe0\xa5\x80\xe6\xa5\ +\xc03/\x15\xc3h Lt\x8c\xc6V\x96c\x0d\xb6\ +\x0c\xf7\x02\xb0\x17\xc1\xc1B\xec\xa5&2\x1b\x9d\x99y\ +\xcf\x17i,fk\xcci\xf50\xc3k\x9d\xf1\x86\xb8\ +0B/6\x9d\x9e\xc8a\xc5:#W\xd1-\x8e\xf0\ +\x9e\x01\xf0w\x9a6+\xdf\x1d1\x89\xf9\x02y\x1d\x01\ +\xe6\x07\x90\xd7\x05\xf6\xfc9oe\xdf\x8bj\xab\xc2E\ +\xf5HlY\x1b\xdb\x09\xf4w6\x01w\x16r\x0f\x02\ +{\x82\xf8ZT\xd2\x91\x05\xf6M\xce\xb4\xafv\x7f^\ +L\xdb\xc1%#QYWe\xdfF\xf0\x98\x08=\xdb\ +^\x80`D<\xed?\xa83/d\xf7]s)g\ +$\x81\xc9Z\x14\x12\xaa\xc51\x07\xc8{\x10\xbe+\xc0\ +\xbb\x14y7\x80Y\x18 \xf8\x90\xbe\xb5de.\xfb\ +a\xb9\xdaX\xb6%\xb1E\x15c\xfd\x85\xfe\xd6\x06\xa6\ +?!;\x02\xd8\x85\xe0\xce\x02\xd9\x19`\x7f\xbd\x93^\ +\x98sE\xdf\x97q\x89V\xff\x89b\xfe\xdd\xce\xa6\x8a\ +mc\xe2\xde\x0frH\x94,gE\xd0\x10\xd66}\ +\x91\x17]\xe0\xdf\xceUw\x92\xa8\xd0\xe1\x8d\xcc\x83\xbd\ +\x1a\x90\x7f\x11\x5c*\x94\xc5\x22\xfc\x88\x22K\xc4p\xb1\ +H\xb04\x08\xb82\x00;-\x9av\x17\xd9U\xed@\ +\xe7\xb6\x19t\xe5\xf3;,?\x19\xbd*\xab\x125~\ +\xe0\xd7X\x90\xde\xc6\x92\x1a\xd2\xd4P\xa4\x06D\x8d\x80\ +}\x09\xd9\x9a`\x7f\x11\xd9\x1a\xe4\xb6Q3\x99(\x85\ +\x1d\x97\x107\xb4\xb7\xbb\xcd\xc56\xd5\xef\x18\xe7|3\ +f\xc9\xfd$\xfbG\xea\xac\x5c\xe4t'\xed\xdd\xac\xb3\ +/\xc4\xa2\x0b\x00]){?\x1b\xbc\x8f\xc4\x96:\xc4\ +\xca:\x9a>\xac\x02\xa5\x1d\xf2\x1f\xb7-\x12+!_\ +]m-\x9f\x8ad\x1c\x04!\xacY\xf3\x04U\xa8'\ +xY(\xc0\xd3\xdd\x823\xaa3\xee\xab(\xfe-\x8b\ +S\x08\xa4\xa3\xe7\xe4%\xe78i\xef7:\xf9\x22 \ +\xba\x00\xd0=&\xbe\x93\x15\xf3\x1f\x229H\x87YQ\ +\x22\xfbr\xb5D\x04\x17L\xc8\xb8\xb75\x17\xf9\xea\xda\ +\xdc$\xec\xaf\xc3\xb9\x22\x8a\xb7+\x04r\x89\xd3\xe2M\ +\xd0\x19\x18!\xd1\x05\x80U\x0d\xe8S\xe58\xf7\x02\x18\ +\xa6C\xad(\x11K%\x037uf\xddK{\xc2\x84\ +a\xf58l\x19\xb7\x9c;I\x1c\x1a\xb5\xd8\x07\x82\xcb\ +ci\xf7R\x9d\x85\x11\x14]\x00X8\x1a\xf1\xfe\x09\ +\xbb\x85\xe0h\x1dnE\x89\xc46\xebo\xdd>N\xaf\ +\x9e\xe8\xce\xeb\x89?\xdf5\xce>\xd0\xb69\x8d\xc06\ +\x91\x13\x5c\xe0\xbaX\x8b\xfbs\x9d\x84k'\xf4\xd7k\ +v\x9c\x8a\xac\xd3\xe2\x8d\x11H\xea\xd3JXEQ\xc2\ +\x9aJ\x0e\x02\x8c\xba\x22\xed\x1e\xd2S\x82\xeb6\xd9I\ +\xdb\xe6\x13\x91\x14\x5c\xc1\x8d\x13Z\xdc\xf3u&F|\ +\xa7\xfb_o\xa0\x8d\xf6\xc1\xb6\xc5i\x04\xb6\xd2\xa1W\ +\x94\xd0T\xc9v\x88\xe0\xb7\xab\xc5\xbd\xa6\x98\x8eR\xf8\ +B\xd3\x88\xde\x8e\x9d&yR\x14\xc7 \x10\xa4'\xa4\ +\xdd\xd3\x9a\xd5\xf2UE\xf7K\xc2;&\xb1\x9d\x13\xf3\ +\xef\x01\xf1m\x1d~E)\xefs[@&\xbbt~\ +U\xd9\xd2\xb5\xb8\xa7\xbeGG\xd2\xd9'F\xf9\x13\xc9\ +=\x22*\xb87LH\xbbg\xa9\xe0\xaa\xe8\xae\x95\xd7\ +\xea\xe1\xecV\xeb\x5cB\xe0\x97\xea`\xa5(e)\xb8\ +3\xb3>\xce\xe9\xa942\xf0\xa9\xd7\xf5%I\xfb\x7f\ +@^\x1d\x15\xff\xe4\xaf\x10\xdckciM)\xab\xe8\ +n \xd9\xc6\xd8Q\xc6\xc8\x14\x12u:\x15\x14\xa5,\ +r\xc9s\xdc@.\xa8h\xf5\xfe\xda\x93_\xa3}\x0c\ +\xfa&\xe2\xf6d\x82GEu(\x82\x00W\xc72\xee\ +\x85:)Ut\xb1\x09\xe9\xe6?\x828H\xa7\x83\xa2\ +\x94\xec\xbd\xcf\xf9\x02^\x1akq\xa7\xf7\xf4w\xe9N\ +Z\xc3,\xf2\xf6(\xb9K}\x85\xf1\xc5\xa5N\xda\xbb\ +\x5cg&\xb4zyc\xa9\x98\xd2\xfd\xc1K\xe2~W\ +\x02\xb9L\x00W\xa7\x84\xa2\x94VG\xaa@\xd00{\ +\xbe7\xb8\xa7\x05wn\x12v.\xe9\x5cn\xd1<\x11\ +U\xc1\x15@$\x90\xb3Tpu\xa7\x8b|\xf9\xa3\xc6\ +-\xb9\x05\xe4`\x8d\x86\xa2\xf4\xe8N\xea-!'\xbc\ +\x12\xb8w\x0c\xcd\xfc\xc7\xa6\xb3\xa7\xc8\x8e\x8d\xedn9\ +r\x0b\x88\xfd\x22m\x9d*r\xba\x93\xf1Zt\x86\xaa\ +\xe8\x22\x9ff\x1a\xdb\xc6\x9d_\x938\x97\x80\xa5\x11Q\ +\x94\xa2\xae\xec\xaf\x05\xc2\xf1\xcf\xbe\xe5N+\x85\x96\x8e\ +\xd3\xeaaF\xf4\xb1\xcf\x04ye\x94\x9b\xa8\x08\x90\x93\ +\x00cc\x19\xf7\x0e\x9d\xa4*\xba\x05\xa1\xab\xc9>\xc0\ +\x06Z\x09\xee\xa9\xd1P\x94\x82\x8b\xedK>\xcc\x15\xf7\ +\xb5\xe5f\x1c?\x1d\x01J\xc4\xbf\xdd\x8e\x07\x93\x11q\ +\x1bY\x11\xac\xf6\x19\x1c\x9bh\xf1\x1f\xd3\x89\xaa\xa2\x8b\ +B_-\xda\xbd\xce>\x07`\xb3v\x92Q\x94\xc2\x88\ +m@N\x98\xd0\xe2\xde\xdd\x5cB\xf7\x82\xab\x13i\xff\xd1R\xfa^\x9d\xe3\ +*\xfa;5O\xe6\xdc\x00\x00\x0f\xe7IDAT\xb6\ +7\x91\xc0\x0f\xb4\x88M\xde\x09\xc4\xfc \x9e\xce\xbd\xad\ +3VE\x17=q\x11\xfe\xe2\xa43\x92\x06WE\xd1\ +WUQ\xf2p.\xd8\x0d\x91?\xe6\x02\xdeP\xd5\xea\ +\xbe\x5cr\xcfw\xca\x19C\xe0z\x125:X\xf2b\ +6\xeb\xfd\xb0j*>\xd2\x99\xab\xa2\xdb\xa3,\xadG\ +UM\xad\xf3s\x12\x17h\xcaYQ6Hl?\x92\ +\x00S=c\xdf\xd0\x93v\x8dk#\x9b\x8a\xedj(\ +-\x04\x0e\xd3\xd1\x02D0\xab]\xdc\x11=\xe5c\xad\ +\xa2\xab|%\xdd\x0d\xf1],\xdb\xbf\x8e\xe4p\x8d\x86\ +\xa2|\xf5n) \x7f\xfb\xde{\xee\xb4\xdd\x1e.\xbd\ +\x0e_\x8b\xea\x91\xd8\xaa\xce\xb9\x88\x82\x0b\xa2j\xe3\xf8\ +\x15W\xb5n_\xf8\xbe\xd7P\x8a\xe3\xa5\xa2\xab|*\ +\xbeM\xd6\xa16\xcc\x95\x00\xf6\xd5h(\xba\xab\x85\x0f\ +\xc8\x0c\xcf\xc3\xef*&z\xcf\x94\xf2sk\x09[H\ +\xee\xae\xa3\xf6\xa9\xe9\x05D.\x1b\x9f\xf6\xaeh\xd6\xc6\ +\x05*\xba(\x83\xf3\xde\x8bR\xb1\xe1\x06\xc1x\x92\x83\ +4\x22J\x04wH\x8b\x04\x9c\x1a\xd0\x9a\x94h\xe9~\ +\xafT\xbf\xe7\x1a\xcf\xe4k\x01\x8e\xa2\xae\x7f\x9f\xa5\x93\ +\xbb\x84\x18U\x0a\x16\x9b*\xba\xcaF\xf1\xd40X\x07\ +\xec\xe1\x8c\x22\xe4R\x92;hD\x94\xb0\x1b&@\xe4\ +\x81\x002\xe9\xb97\xfd\xc7J\xc1\xccb]\xcf\xe6w\ +\x06\xda\x0d\x00\xc7\x13\xe8\xab\xa3\xf7\xef1\xfc\xd0\x85\x1c\ +]\xd9\xe2\xbd\xa0\xd1P\xd1EY\xb7\x0e\xec\xe3\x9cH\ +\xca\xc5Q\xed\xb1\xa9\x84zW\xfb&\x88)Y\xcf\x9b\ +R=\x11KK\xfd\xfbv\x8e\xb3\xf7\x8d\xd9\xfc\x1d\xf4\ +\x08\xe8\x8b\x03\xf9\x8a\xeb\xd9GUL\xea~_\x83\xa1\ +\xa2\x1b\x0a\xa6\xd5\xc3\x0c\xafs\x8e%\xa4Y\x9d\xad\x94\ +rOA\x02\xf2\xa0\x0f\xc9\x5c\x95\xf6\x9fh.\x83s\ +\xbf\xceq\x15\xfd\x1d\xcb\xbd\x12\xe4)\x9aJ\xfe\xd2\x0e\ +\xf7/\xed\x81{\xa2V(\xab\xe8\x86V|\x8f\xae\x8d\ +\x1dmQ\xce\x01p\xa0FD)\x9f\xa2(<%\x82\ +?~\xe2\xba\xd3\xfaN\xc6\xear\xf8\xdeKF\xa2\xb2\ +\xb6\xd29\x9f\xc4\xcf\x09T\xeaH\xe2\x8b\x8d\xe7\xaf\xfa\ +s\x9b{I\xa9\xd8m\xaa\xe8*\x85}\xfbn\xb2\xbf\ +\xe5\x00\xe7Bx,\x09[#\xa2\x94Z'\x19\x12\xcf\ +\x08dZ\xae\xdb\xbb\xbb\x9c\xcc\x11\x9a\x01^\xdc\xe8\x1c\ +OK\xae!8@G\xf3\xcb\x1e\xca\x22h\x88e\xdc\ +i\x1a\x0d\x15\xdd\xc8\xd1\xd5\x90\x18`\xd9\xfe\xe9\x04\xc6\ +\x90\xe8\xa7\x11Qz\xf2\xba\x08\x819\x02\x99\xe6z\xce\ +\xf4\xca\x89]\xffB9^\xdd\x13s\x15\x88o\xeb\x88\ +~\xa5\xa5\xe3|\xf1yl\xac\xd5}]\xa3\xa1\xa2\x1b\ +i\x16\x1c\x81\xd8\x0e;8GS\x90\x04q\x98\x9e=\ +)E\x5c\x88_\x17\xe1t\x01o/W\x7f\xdd\xd5I\ +gp\x9cr)\xc9z\x1d\xd1\xb5\x16\xbe\xdd\xdf\x91\xf5\ +N\xad\x99\x8aU\x1a\x0d\x15]\xe5sd\x1bb\x03i\ +K\x92\xc4I\x04\xb6\xd2\x88(y\xde\xd1\xba\x10<\x03\ +\xc8C\xbeg\xfd91)\xfbN\xd9>+\xa9\xd8\xae\ +\x06\xc1\xe5 O\xd0\x17\xd5\xb5\xa6\x93=\x88\x5c4>\ +\xe3]\xdf\xac\x86\x17*\xba\x0a\xd6y\xa7p\xbf=\xac\ +C-\xf0T\x90\xc7\x10\xa8\xd2\xa8(\x9b\xda\x9a\x0d\x90\ +Y\x22|\xb0\xd3r\xef\xaf\xb9\x19+\xcb\xf9\xf7\xacn\ +B\xbfX\xe0\x9cK\xe2,\xb5n\x5c\xe7\xb8\x7f\xec#\ +8)\x91\xf6gj4Tt\x95\x8d`\xe5i\xa8\xa9\ +\xf4\x9dz\x1a\x9c\x00`\x18\x01K\xa3\xa2\xac\xb7G-\ +\xf8\x90\x0fy\xf0\x816\xef\xefa\xa8R\xed\x18\x8d\xad\ +\x9c\xb8s.\x89\x9f\xeaK\xe8zS\x1a\xb3s\xb4\x8f\ +/\xc5\xe6\x12\x8a\x8an^hKb\x8bX\x80D\xa1\ +\x8d\x02V7\xa1_\x1c\xf6\x08\x80\xc7Ap\xa8V?\ ++k\xd2\xc6m\x10\xf9+\x80G\xbc\x9c\xfdP\xc5\x94\ +\xee\x0f\x10\x9aj\xff\x8ammx\xe7\x13h\xd4\xeb?\ +\xeb\xaf<\x17\xe2\xeaW\x02\xf7\xd2\xa1\x19x\x1a\x11\x15\ +\xddP\xe36\xd9\xb7@\x10\xf3E\xd2We\xfc\xa7\x9b\ +\x0b|\x86\xd2\x9eD]\x1c\xceQ4\xf2C\x80\x87\x13\ +\xe8\xa5\xa3\x101\x91\x15<\x95\x13>\xf5\xd0Jw^\ +\xd8\xee\x5cv5$\x06X\x8e\x7f\x01\x05\x0d\x9aF\xde\ +\xa0b\xa9\xc5>dd\x22\xed\xcf\xd2h\xa8\xe8F\x82\ +ecQ\xdd\xdb\xb1\xffNr\x90@\xe6\x03Hwu\ +z\xb7nq+\xdaP\x84\x0a\xe8\xed\x07X\x07\x1b\x9a\ +\x1f\x11r$\xc1\xddtDTd\xcb\x91\xeed|g\ +\xcb\xf8\x17\xaeiH\x10\xd3\xd1\xdf\xa0*\xf4\x07\xba\xb3\ +\xde\xd8^S\xb0L\xa3\xa1\xa2\x8b\xa8U\x1f\x1b[\x9e\ +%\xd1\xe7\xdf\xd6y\x94\xe9\x9e\x8f\x96\x8aV\xef\xb9\xe2\ +\xddYL\xec`\xc4?\x8c\x94\xef\x01\xfc\xaeVB\x97\ +\xdd\xae\xe5m\x10/ \xc0\xf3a\x17\xd9\xcf\xe8hr\ +\xbe\x11\x139\x07\xe0\x89zl\xb2\xc1/c\xdd\x08\xe4\ +\xfc\xf1\x19\xef\xc6f\xadNV\xd1\x8d*]\x8d\xf6\xc1\ +\xb6\xc5G\x09$\xbeh..@K\xbbxw\x14\xd3\ +\xef\xb4\x19\xe0y\xe3\x9c\xc1qK\x0e\x01q\x00\x04\x07\ +\x92\xdc^G\xaadv)\x1f@\xf0\x02\x88\xb9~ \ +/d}\x7fn\xefIX\x81\xc8\xd8\xa3ZG\x1a\x98\ +\xb3I|Wg\xc3\xc6\xdd\xb1\xce\x09O\xacJ\xbb\xaf\ +h4Tt#O\xae\xc9\xa9\xa7\xe0N\x12\xe6\xab\xac\ +\xd8@\xf9\x93\xeb#S\xd9\xea\xcd\xed\x91\x17\x83db\ +{\xcb\xf8\x07A\xb0\xbf!\x86\x88\xe0\x1b$*t\xe4\ +\x0a\xbe3\xf9\x08\x82\x7f\x080W\x02\xbe\xe01\xf7B\ +U\x06K\xa2\x16\x87%#QYWa\x9f\x0a\xe2,\ +\xed\xc2\xb5\xf1\xeea\x22\xc8\xb4u\xba\xe7l}\x1b:\ +5\x22*\xba\xcag\xc2\x9br\xc6\x12h\xfd*\xe1\xfd\ +\xdc#4O\x04S\xb2\xf4n\xafn\xc1\xc7=\xf5]\ +\xe7&a\x0f\x0c\x9cA1\x1bC!\x18b\x80\xaf\x0b\ +0\xf8\xb34\xb9\xb2q\x8b\x22D\xde\x078_\x80\xd7\ +!x\xc3\x0f\xe4\x0d7\xe7\xbd^\x8c\xf3\xfdR\xa6s\ +,\xb6\xb1\x1d\xe7t\x02M$\xeat\xb6l\xf4\xb1\xc3\ +\x22\x1f\xd2\x98H\xfb\x8fj4Tt\x95\xaf\x12\xde\xa4\ +3\x9a\xc4\xa4u\x0b\xefgNA\xf2P\x10\x98\xc9\xf3\ +\x98{\xb8T\xca\xfd\xbb\xc6$\xb6c\xdc\xdd\xd3\x0a\xf8\ +u\x10\x83H\xee.\xc0nzF\x0c\x08\xb0\x8a\x22\x8b\ +\x04X \xe4|\x08\xde\xf0\x02y\xa3\xd3\xf7\xe6\x97K\ +7\x1e\x14\xe9x\xe3\xc2&k\x98\x05\xa6\x00\x8e\xd0\xe2\ +\xa8M\x16\xdc)\x1dY\xefl\xb5rT\xd1U\xd6\xbf\ +\xe3\x1dIb\x12\x01g\x03\xef\xda-\x11\xe2v\xf8\x98\ +R\xaa\xe6\xe4mIl\x11\x0f\x9c]\x1d\x83]\x09\xd9\ +E\xc8\xed\x09lO\xc8\x8ek\xfe\xbbw\xd9\xdb\xe7Q\ +\x16\x13|_D\xde\x13\xf2}\x8a,\x0a \x8b\x5c1\ +\x0b\xbd\x9c\xbbH\x17?\xac\xf7J[\x02\xf6(\x10I\ +M!o\xdeU\xa0@\xa41\x9e\xf1\xff\xa2\xd1P\xd1\ +U6\x90\xeeF\xeb\x07\x961\xd3ITo\xe4?}\ +^D\xa6t\x18\xef\xaer\xb2\xef[~2zU\xc7\ +c\xdb\x04VPg\x8c\xd4\x91\xa6\x8e\x81\xd4\x09Y\x07\ +\xa0\x8e\x94~\x14\xd6\x01k\xfe\x9f\xa0\xb6Pw1\x05\ +\xe8\x06\xb0\x82\x22m\x00\xdb\x84\xd2\x06A\x9b\x80m\xa4\ +\xb4!@\x9b\x18.\x0f\xfc\xa0\xcd\xa7ic`/\xfd\ +\xfb\xdb]K\x86=\x05_g\xee&dG\xc6\xd9\x07\ +\xda\x16R \x8f\xfbR1\xa1\xb2\xb1\x82{[\xa7\xe7\ +\xfd,*\x85u*\xbaJ^\xe9L\xd9C\x1c\xf0A\ +\x12[o\xc2\xce\xab\x0b\x90\x19\x81\xc8\x1do\xaf\xf0\x1f\ +\xdfk:\xdc\xb0\xc6i\xe5h\xf4\xa6\x05c9\xb0\xed\ + \xde\x0b\x00<\x13T\x18\x91\x04\x00\x18Ho\x08\x82\ +\x80l\x07\x00;`W@\xd3\x0d\x00\xae\x9b\xfd$0\ +\xf0\xc5G\xa0;Q\x14\xd5\xa21\x16\xb3\x7fB\xa2\x11\ +\xe4^\x1a\x91\xcd\xce\xb4,\x09\xc0T<\x9d\xbb_\xa3\ +\xa1\xa2\xablf\xd5\xb0c\xfc{\x01\x0c\xdd,\x03{\ +\xca\xbd\xbe\xc8\x9ds\xde\xf4\x9f\xd6\x1d\x99\x82\x1e\xaa@\ +\xae\xadr\x86\x138\x19\x82\xff\xa7wk\xf3T\x84\x07\ +\x99\xd8\xe9z\x17\xe8\xeeVEW\xc9\x13\x0bG#\xde\ +?n\xdfDrl\x9e:\xc8\xfc\xc5\x87\xdczU\xda\ +\x7f\xa2Y/\xc8+(\xec\xbd\xda\xa3z\xdb\x07\xd8\x16\ +F\x82\xce\x8e\xb5\xbawi\ +4Tt\x15\xf4Tw\x15k\x98e8\x91\xe0.\x05\ +|\xd8\x97A\xe4\x81\x80\xe6\xfe\xf6\x5cn\xa6\x9a8D\ +\x9bU\x0d\xe8S\xe18\xdf#\xe4H\x80?&P\xab\ +Q)\xa8\xd8\xe6D\xf0\xfb\xce\xac{\xb9V\xd7\xab\xe8\ +*%\xc0\xe2$*\xfa\xc2\xb9\x8c\x06\xe7\x11\xb0\x0am\ +\x00A\xe0y\xa1<\xe0\x0af\xea90\x22\x916\xfe\ +Q\xad\xbd\x8fC|\x0f\xc2\xef\x818dCM[\x94\ +\xcd~\xdefJ\x80\x9f\x95\xaa\xe1\x8d\xa2\xa2\x1bi\xba\ +R\xf6~61\x89\xe0\x9eE\xecZ\xf2O\x01\x1f\x16\ +\xf0\xf1.\xe6\x9e*'3\x0ee\xedt$\xb1\xb5c\ +\x9c\xc3\x099\x1c\xe0\xf7\x09\xf4\xd5\xa8\x14Um_\xf5\ + g'\xd2\xfeL\x0d\x86\xa2\xa2\x8b\xd2\xbeZ\xb4m\ +\xc2\xb9\x98\xc0\xf9\xc5v\xf6\x11\xc0'\xf0\xbfA\x80'\ +\x02\x13\xccZ\xd9\xe1?\xa3\x1dM\xca\x835\xbd\x94\x0f\ +&\xe5 \x00\x07\x11\x1c\xa8Q\xe9\x91T\xf22\x88\x5c\ +:\xfbM/\xa3u\x14\x8a\x8an9-\xa2\xe3\xe2;\ +Z\x96\x7f\x0d\xc9\xfa\x9e<\x8b\x22\xf0\xf7@\xf0\x8c \ +\x98\x9d\xed\xf2\x9f\x8dz\xc7\x1c\x94H3\x81\x8b\x1b\x9d\ +A4r\x10\x80\x03\x01\x1c\xa2\xbd\x92{\x5cl]\x01\ +~\xdfI\xf7r\xcd\x16)*\xba(\xeb\x94\xf3A\x0e\ +\xf1[\x80\xdf,\x05\xe7\x1c\x8a\xbc.\xc0l\x11\xce\x16\ +\xf2\x85\xfb\xdaro\x1e?\x1d\x81\x8eT\x01\xe7@C\ +b\x80\xb1\x83!\x84\x0c!1\x04\xc0PM\x17\x97\xcc\ +\x99m\x00\xc8\x9f|\xcf\xba,1)\xfb\x8eFDQ\ +\xd1E8\x0aa\x86\xd7:\xa3\x09\x8c/\xb5+\x1d\x22\ +XM\xe2\x1f\x81\xe0E\x10s%\xc7\xb9WN\xce-\ +hV\x97,lj\x9a\x98\x08\xf6\xa1\xc8P\x12C \ +\x18B\xa2\x9fF\xa6$\xdd\xa4\xee\xcf\xfa\xfc\x85\xde\x89\ +WTtC\xca\xf2\x93\xd1\xabW/\xe7<\x02g\x97\ +\xb2\x15\x9f\x00\x1d\x14\xbc.\x90y\x10\xbc\xe6C\xe6\x05\ +\x9e\xffj\xe5d|\xa8\xa3\x08<5\x0c\xd6\xfe\xbb\xc5\ +v\x86\xc1 \xc3`\x10\x04\x83\x08\x0e\x12` \x89-\ +4B%\xbf\xbb}\xd2\x83\x5c\x5c\x91\xf6\xe6h4\x14\ +\x15\xdd\x08\xd0>\x06}\xe3q\xe7\x02\x0aN'QQ\ +F\xe7^m\x04\x16\x88\xc8;B\xbe\x0d\xc1\xdb~ \ +o\xfb\xe2\xbdS=\x11K\xc3\xf6\x82\x14\xafrvp\ +\x18\xech\x84\x03\x04\x1c@\xcaN$\x06\x89p\xf7B\ +\xb54T\x0a\xca\x5c/\x08.Nd\xfc\xc75\x14\x8a\ +\x8an\x04\xe9l\xaa\xd8\xd6\x16\xefb\x12\x8d\x04b!\ +\xf0\xa2]\x04p1 \x1f\x08\xb8\x88\x94\xc5\x81\x98E\ +A\x10|l|\xb3\xaf\xd2\xab?\x8a\x8a\xae\x82\ +|U\xd2nQe\x8f\x85\xc1y\x04\xb7\xd3\x88(*\ +\xb6X%\x82[|\xcf\xba\xbebR\xf7\xfb\x1a\x11E\ +EW\xc9;\x0b\x8e@l\x87\xed\x9d\x9f\xd0\xc8\x05\xc5\ +l\xaa\xa0(%dh\xf1\x16\x047-\xef\xf2Z\xd5\ +W\x5cQ\xd1UP\xac\xab/G\xd7\xc5~lA\xce\ +\x07\xb0\xbfFD\x09\xbfU#\xfe\xe2#\xf8\xddUi\ +\xff\x89f\xadDVTt\x15\xf4l;\xc1\xb3 <\ +\x96\x84\xad\x11Q\xc2\xd4\xf1G\x04\xb7\x0b\xf8\x87x:\ +\xf7\xb6FDQ\xd1UJ\x86\xce\xb1\xd8\xc6v\x9c\x14\ +\x813H\xd4iD\x942\xde\xd5\xce\x12\xc1m\xcb\xe0\ +N\xdf6\x83.\x8d\x8a\xa2\xa2\xab\x94,K\xebQ\xd5\ +\xa7\xd6>\x85@\x0a\xe4>\x1a\x11\xa5L\xcej\xdf\x06\ +1\xc5\xf5\x9c[*'v\xfdK#\xa2\xa8\xe8*\xe5\ +\xb7\xfbM\xd9C\x1c \x09\xf2d\x02U\x1a\x11\xa5\xc4\ +\xd2\xc7\xdd\x10y\xc0\x87d\xf4\xacVQ\xd1UB\xc3\ +\xca\xd1\xe8]\x15\xb7G\x92\x1c\x05`\xa8FD\xe9\xc9\ +\xf41\x89g\x03\xc1-\xed\xab\xdd\xbb\xea\xee@\xbbF\ +EQ\xd1UBK6\x15\x1bD\xc8\x09\x84\x8c&\xb9\ +\x83FD)\x8a\xd0\x02\xcf\x89\xc8t7p\xee\xd6\xf4\ +\xb1\xa2\xa2\xab \x8a=a\xf7\xdb\xcd\xfa\xbeex2\ +\xc0\x1f\xab\xdd\xa4\x92\xe7\xd4\xb1\x0f\xe0)\x88\xdc\x93\xcb\ +z\xf7VM\xc5G\x1a\x15EEWQ\x00,\xaaG\ +b\xcb\x9a\xd8\xf7\x8d\x09\xeaA\x0e'\xd0K\xa3\xa2l\ +\x8a\xd0R0GD\xa6\xe7\xe0\xddU\x95\xc1\x12\x8d\x8a\ +\xa2\xa2\xab(\xeb`\xc9HT\xd6V9?\xa4\xc8p\ +\x80Gh_Ye=B\xdb\x06\x91\x99B>\xd2\xdd\ +\xe9\xde\xb7\xc5\xadh\xd3\xa8(*\xba\x8a\x82MKA\ +\xef\xbb\xab\xbd\xbfe\xf8#R\x86\x93\xdcC\xa3\xa2\xbb\ +Y\x8a\xbc\x14\x08g\x06\x0cf\xbe\xd3\xe6?\xbd\xd7t\ +\xb8\x1a\x19EEWQ\xf2\xcc\xea\xa438N9\x1c\ +\xe4\xe1\x00\x0e\x22\x90\xd0\xa8D\xe2\x0e\xed\xbbB>&\ +\xc2\xc7\xba\xb2\xb9Y5S\xb1J\xa3\xa2\xa8\xe8*J\ +\x11Y\x9cDE-\xad\x83\x0d\xcc\xe1\x06r\x98\x80\x83\ +I\x18\x8dL(Dv1\x80\xe7@<\x19\xf8\xe6\xb1\ +xkn\x81FEQ\xd1U\x14\x94V\xfb\xc1\xaaj\ +k_#\xe6{\x868P\x88o\x13p42\xe5P\ +e,oB\xf0\x8c\x08g\xe7\x0c^\xacnq_\xd3\ +\xc8(\x8a\x8a\xae\x82\xf22\xe4H8\xd6\xfe\xb6\xc5}\ +E\xb8/\x80\xfd\xb4(\xab$\xee\xcc~\x0c\xca\x1c\x08\ +\x9e\xf5\x02<\xbb\xaa\xdb\x9b\xab-\xf2\x14EEW\x09\ +\x19\xcd\x00/j\x88\xedAG\xf6\x85\xe0\x9b\x86\xf8\x86\ +\x00{\x13\xe8\xad\xd1)\xd8\x0e\xf6]\x08^\x11\xf0U\ +\x11\xbe\x0a\xe2%\xed\xd6\xa3(*\xbaJ\x84\x85\xf8\xc2\ +d|'R\xf6!doB\xf6\x04\xb0'\xc8]5\ +5\xbd\xb1g\xb0|U\x80y\x10\xbc\xeaQ\xe6\xad\x14\ +\xefu\xed\xd0\xa3(*\xba\x8a\xb2^^\xab\x87\xb3k\ +mlW\x00{\x1a\x06{@\xb0\x0b\xc1]\x04\xb23\ +\xc8\xed\x18\xb1\xf9/\x02\x0f\x94\x0f\x08.\x14\xc8B\x02\ +\x0b\x83\x80\xff\xf4E\x16\xbaY\xefU\xbd\x1b\xab(*\ +\xba\x8aR\x10\x16\x8eF|\x1b+\xb6\x13l\x7f'\x8a\ +\xd9\x0eD\x7fB\x06\x00\xec\x0f\xcav\x10nK\xa2\xa6\ +\x8c\xd2\xc09\x00\xcb\x09Y&\xc2e\xa0,\x12\xe1?\ +!X\x18 X\x88\xc0^\xf8\xaa\xc9~04\x03O\ +G_QTt\x15\xa5\xe4Xp\x04b\xfdw\xa8\xe8\ ++\xbe\xd7\xcf\xb2\x82\xadL`\xfa\x91\xd2\x07@o\x01\ +{\x13\xd2\x1b@\x0d\xc0\xde\x04*\x01\xa9\x04\x11\x13A\ +\x15\x88\x18\x84\x9fo\x83\xe8\x90\xa8\xfe\x9cH\x0a\x04+\ +?}\x0a\xa5\x1d\x02\x8f@\x17\x80n\x90\x9e\xc8\x9a\xae\ +9\x94\x95\x10\x88\x80m\x00\x96\x91\xb2L\x84\xcbE\x82\ +\xe5>\xb8\xcc\xc0Z\xd6\xd1\x91\xfdX\xbb\xec(Jy\ +\xf0\x7f\xc0D\xab\xfd\x86#\xc3\xfe\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +" + +qt_resource_name = b"\ +\x00\x10\ +\x03\xf0\x89\x87\ +\x00t\ +\x00e\x00s\x00t\x00i\x00u\x00m\x00_\x00l\x00o\x00g\x00o\x00.\x00p\x00n\x00g\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x9bK\x0b\xd0\x9d\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/src/testium/main_win/resources/black/JSON-LD.png b/src/testium/main_win/resources/black/JSON-LD.png new file mode 100644 index 0000000..2809131 Binary files /dev/null and b/src/testium/main_win/resources/black/JSON-LD.png differ diff --git a/src/testium/main_win/resources/black/Label.png b/src/testium/main_win/resources/black/Label.png new file mode 100644 index 0000000..eae2b95 Binary files /dev/null and b/src/testium/main_win/resources/black/Label.png differ diff --git a/src/testium/main_win/resources/black/checkList.png b/src/testium/main_win/resources/black/checkList.png new file mode 100644 index 0000000..9f3039b Binary files /dev/null and b/src/testium/main_win/resources/black/checkList.png differ diff --git a/src/testium/main_win/resources/black/checkbox-checked.png b/src/testium/main_win/resources/black/checkbox-checked.png new file mode 100644 index 0000000..8db93da Binary files /dev/null and b/src/testium/main_win/resources/black/checkbox-checked.png differ diff --git a/src/testium/main_win/resources/black/cycle.png b/src/testium/main_win/resources/black/cycle.png new file mode 100644 index 0000000..512a18f Binary files /dev/null and b/src/testium/main_win/resources/black/cycle.png differ diff --git a/src/testium/main_win/resources/black/document-open.png b/src/testium/main_win/resources/black/document-open.png new file mode 100644 index 0000000..de6c6e0 Binary files /dev/null and b/src/testium/main_win/resources/black/document-open.png differ diff --git a/src/testium/main_win/resources/black/document-save.png b/src/testium/main_win/resources/black/document-save.png new file mode 100644 index 0000000..4b920bc Binary files /dev/null and b/src/testium/main_win/resources/black/document-save.png differ diff --git a/src/testium/main_win/resources/black/document.png b/src/testium/main_win/resources/black/document.png new file mode 100644 index 0000000..cf112c4 Binary files /dev/null and b/src/testium/main_win/resources/black/document.png differ diff --git a/src/testium/main_win/resources/black/edit-clear.png b/src/testium/main_win/resources/black/edit-clear.png new file mode 100644 index 0000000..ab1a0b0 Binary files /dev/null and b/src/testium/main_win/resources/black/edit-clear.png differ diff --git a/src/testium/main_win/resources/black/folder-open.png b/src/testium/main_win/resources/black/folder-open.png new file mode 100644 index 0000000..0f508c6 Binary files /dev/null and b/src/testium/main_win/resources/black/folder-open.png differ diff --git a/src/testium/main_win/resources/black/folder.png b/src/testium/main_win/resources/black/folder.png new file mode 100644 index 0000000..e7b4346 Binary files /dev/null and b/src/testium/main_win/resources/black/folder.png differ diff --git a/src/testium/main_win/resources/black/gears.png b/src/testium/main_win/resources/black/gears.png new file mode 100644 index 0000000..eeafebb Binary files /dev/null and b/src/testium/main_win/resources/black/gears.png differ diff --git a/src/testium/main_win/resources/black/git.png b/src/testium/main_win/resources/black/git.png new file mode 100644 index 0000000..b49591f Binary files /dev/null and b/src/testium/main_win/resources/black/git.png differ diff --git a/src/testium/main_win/resources/black/gnome-settings.png b/src/testium/main_win/resources/black/gnome-settings.png new file mode 100644 index 0000000..44a539d Binary files /dev/null and b/src/testium/main_win/resources/black/gnome-settings.png differ diff --git a/src/testium/main_win/resources/black/go-bottom.png b/src/testium/main_win/resources/black/go-bottom.png new file mode 100644 index 0000000..a3e9df2 Binary files /dev/null and b/src/testium/main_win/resources/black/go-bottom.png differ diff --git a/src/testium/main_win/resources/black/group.png b/src/testium/main_win/resources/black/group.png new file mode 100644 index 0000000..a3cd64b Binary files /dev/null and b/src/testium/main_win/resources/black/group.png differ diff --git a/src/testium/main_win/resources/black/help.png b/src/testium/main_win/resources/black/help.png new file mode 100644 index 0000000..c015f17 Binary files /dev/null and b/src/testium/main_win/resources/black/help.png differ diff --git a/src/testium/main_win/resources/black/hide.png b/src/testium/main_win/resources/black/hide.png new file mode 100644 index 0000000..dbf98a3 Binary files /dev/null and b/src/testium/main_win/resources/black/hide.png differ diff --git a/src/testium/main_win/resources/black/image.png b/src/testium/main_win/resources/black/image.png new file mode 100644 index 0000000..1bb4052 Binary files /dev/null and b/src/testium/main_win/resources/black/image.png differ diff --git a/src/testium/main_win/resources/black/info.png b/src/testium/main_win/resources/black/info.png new file mode 100644 index 0000000..44e672c Binary files /dev/null and b/src/testium/main_win/resources/black/info.png differ diff --git a/src/testium/main_win/resources/black/input-mouse.png b/src/testium/main_win/resources/black/input-mouse.png new file mode 100644 index 0000000..b69ddcc Binary files /dev/null and b/src/testium/main_win/resources/black/input-mouse.png differ diff --git a/src/testium/main_win/resources/black/let.png b/src/testium/main_win/resources/black/let.png new file mode 100644 index 0000000..f3804df Binary files /dev/null and b/src/testium/main_win/resources/black/let.png differ diff --git a/src/testium/main_win/resources/black/media-playback-start.png b/src/testium/main_win/resources/black/media-playback-start.png new file mode 100644 index 0000000..dc487fe Binary files /dev/null and b/src/testium/main_win/resources/black/media-playback-start.png differ diff --git a/src/testium/main_win/resources/black/media-playback-stop.png b/src/testium/main_win/resources/black/media-playback-stop.png new file mode 100644 index 0000000..42a2ca1 Binary files /dev/null and b/src/testium/main_win/resources/black/media-playback-stop.png differ diff --git a/src/testium/main_win/resources/black/nespresso.png b/src/testium/main_win/resources/black/nespresso.png new file mode 100644 index 0000000..375317f Binary files /dev/null and b/src/testium/main_win/resources/black/nespresso.png differ diff --git a/src/testium/main_win/resources/black/note.png b/src/testium/main_win/resources/black/note.png new file mode 100644 index 0000000..4c00383 Binary files /dev/null and b/src/testium/main_win/resources/black/note.png differ diff --git a/src/testium/main_win/resources/black/pause.png b/src/testium/main_win/resources/black/pause.png new file mode 100644 index 0000000..c32cb99 Binary files /dev/null and b/src/testium/main_win/resources/black/pause.png differ diff --git a/src/testium/main_win/resources/black/pause2.png b/src/testium/main_win/resources/black/pause2.png new file mode 100644 index 0000000..ba9ec33 Binary files /dev/null and b/src/testium/main_win/resources/black/pause2.png differ diff --git a/src/testium/main_win/resources/black/plot.png b/src/testium/main_win/resources/black/plot.png new file mode 100644 index 0000000..c9e2fbd Binary files /dev/null and b/src/testium/main_win/resources/black/plot.png differ diff --git a/src/testium/main_win/resources/black/question.png b/src/testium/main_win/resources/black/question.png new file mode 100644 index 0000000..c41ae86 Binary files /dev/null and b/src/testium/main_win/resources/black/question.png differ diff --git a/src/testium/main_win/resources/black/report.png b/src/testium/main_win/resources/black/report.png new file mode 100644 index 0000000..dcd9163 Binary files /dev/null and b/src/testium/main_win/resources/black/report.png differ diff --git a/src/testium/main_win/resources/black/results.png b/src/testium/main_win/resources/black/results.png new file mode 100644 index 0000000..72b93b9 Binary files /dev/null and b/src/testium/main_win/resources/black/results.png differ diff --git a/src/testium/main_win/resources/black/sleep.png b/src/testium/main_win/resources/black/sleep.png new file mode 100644 index 0000000..e532c1a Binary files /dev/null and b/src/testium/main_win/resources/black/sleep.png differ diff --git a/src/testium/main_win/resources/black/system-log-out.png b/src/testium/main_win/resources/black/system-log-out.png new file mode 100644 index 0000000..fa09d7b Binary files /dev/null and b/src/testium/main_win/resources/black/system-log-out.png differ diff --git a/src/testium/main_win/resources/black/terminal.png b/src/testium/main_win/resources/black/terminal.png new file mode 100644 index 0000000..9396755 Binary files /dev/null and b/src/testium/main_win/resources/black/terminal.png differ diff --git a/src/testium/main_win/resources/black/text-x-python.png b/src/testium/main_win/resources/black/text-x-python.png new file mode 100644 index 0000000..c7ce8ad Binary files /dev/null and b/src/testium/main_win/resources/black/text-x-python.png differ diff --git a/src/testium/main_win/resources/black/verif.png b/src/testium/main_win/resources/black/verif.png new file mode 100644 index 0000000..35c72ce Binary files /dev/null and b/src/testium/main_win/resources/black/verif.png differ diff --git a/src/testium/main_win/resources/black/view-refresh.png b/src/testium/main_win/resources/black/view-refresh.png new file mode 100644 index 0000000..214a72d Binary files /dev/null and b/src/testium/main_win/resources/black/view-refresh.png differ diff --git a/src/testium/main_win/resources/color/JSON-LD.png b/src/testium/main_win/resources/color/JSON-LD.png new file mode 100644 index 0000000..43a2c3c Binary files /dev/null and b/src/testium/main_win/resources/color/JSON-LD.png differ diff --git a/src/testium/main_win/resources/color/Label.png b/src/testium/main_win/resources/color/Label.png new file mode 100644 index 0000000..6427111 Binary files /dev/null and b/src/testium/main_win/resources/color/Label.png differ diff --git a/src/testium/main_win/resources/color/RIOV-2478BF.PNG b/src/testium/main_win/resources/color/RIOV-2478BF.PNG new file mode 100644 index 0000000..f8d632e Binary files /dev/null and b/src/testium/main_win/resources/color/RIOV-2478BF.PNG differ diff --git a/src/testium/main_win/resources/color/checkList.png b/src/testium/main_win/resources/color/checkList.png new file mode 100644 index 0000000..bf0d706 Binary files /dev/null and b/src/testium/main_win/resources/color/checkList.png differ diff --git a/src/testium/main_win/resources/color/checkbox-checked.png b/src/testium/main_win/resources/color/checkbox-checked.png new file mode 100644 index 0000000..a74e237 Binary files /dev/null and b/src/testium/main_win/resources/color/checkbox-checked.png differ diff --git a/src/testium/main_win/resources/color/cycle.png b/src/testium/main_win/resources/color/cycle.png new file mode 100644 index 0000000..2596611 Binary files /dev/null and b/src/testium/main_win/resources/color/cycle.png differ diff --git a/src/testium/main_win/resources/color/document-open.png b/src/testium/main_win/resources/color/document-open.png new file mode 100644 index 0000000..583772e Binary files /dev/null and b/src/testium/main_win/resources/color/document-open.png differ diff --git a/src/testium/main_win/resources/color/document-save.png b/src/testium/main_win/resources/color/document-save.png new file mode 100644 index 0000000..ab3c238 Binary files /dev/null and b/src/testium/main_win/resources/color/document-save.png differ diff --git a/src/testium/main_win/resources/color/document.png b/src/testium/main_win/resources/color/document.png new file mode 100644 index 0000000..a8a5cd6 Binary files /dev/null and b/src/testium/main_win/resources/color/document.png differ diff --git a/src/testium/main_win/resources/color/edit-clear.png b/src/testium/main_win/resources/color/edit-clear.png new file mode 100644 index 0000000..a4d33c7 Binary files /dev/null and b/src/testium/main_win/resources/color/edit-clear.png differ diff --git a/src/testium/main_win/resources/color/folder-open.png b/src/testium/main_win/resources/color/folder-open.png new file mode 100644 index 0000000..8b1c3c0 Binary files /dev/null and b/src/testium/main_win/resources/color/folder-open.png differ diff --git a/src/testium/main_win/resources/color/folder.png b/src/testium/main_win/resources/color/folder.png new file mode 100644 index 0000000..8b1c3c0 Binary files /dev/null and b/src/testium/main_win/resources/color/folder.png differ diff --git a/src/testium/main_win/resources/color/gears.png b/src/testium/main_win/resources/color/gears.png new file mode 100644 index 0000000..cf3d499 Binary files /dev/null and b/src/testium/main_win/resources/color/gears.png differ diff --git a/src/testium/main_win/resources/color/git.png b/src/testium/main_win/resources/color/git.png new file mode 100644 index 0000000..28768dd Binary files /dev/null and b/src/testium/main_win/resources/color/git.png differ diff --git a/src/testium/main_win/resources/color/gnome-settings.png b/src/testium/main_win/resources/color/gnome-settings.png new file mode 100644 index 0000000..d9551eb Binary files /dev/null and b/src/testium/main_win/resources/color/gnome-settings.png differ diff --git a/src/testium/main_win/resources/color/go-bottom.png b/src/testium/main_win/resources/color/go-bottom.png new file mode 100644 index 0000000..e116960 Binary files /dev/null and b/src/testium/main_win/resources/color/go-bottom.png differ diff --git a/src/testium/main_win/resources/color/group.png b/src/testium/main_win/resources/color/group.png new file mode 100644 index 0000000..c19f97e Binary files /dev/null and b/src/testium/main_win/resources/color/group.png differ diff --git a/src/testium/main_win/resources/color/help.png b/src/testium/main_win/resources/color/help.png new file mode 100644 index 0000000..498edc5 Binary files /dev/null and b/src/testium/main_win/resources/color/help.png differ diff --git a/src/testium/main_win/resources/color/hide.png b/src/testium/main_win/resources/color/hide.png new file mode 100644 index 0000000..0cdf28c Binary files /dev/null and b/src/testium/main_win/resources/color/hide.png differ diff --git a/src/testium/main_win/resources/color/image.png b/src/testium/main_win/resources/color/image.png new file mode 100644 index 0000000..e185863 Binary files /dev/null and b/src/testium/main_win/resources/color/image.png differ diff --git a/src/testium/main_win/resources/color/info.png b/src/testium/main_win/resources/color/info.png new file mode 100644 index 0000000..f6ea2ab Binary files /dev/null and b/src/testium/main_win/resources/color/info.png differ diff --git a/src/testium/main_win/resources/color/input-mouse.png b/src/testium/main_win/resources/color/input-mouse.png new file mode 100644 index 0000000..d5236e8 Binary files /dev/null and b/src/testium/main_win/resources/color/input-mouse.png differ diff --git a/src/testium/main_win/resources/color/let.png b/src/testium/main_win/resources/color/let.png new file mode 100644 index 0000000..5bba95f Binary files /dev/null and b/src/testium/main_win/resources/color/let.png differ diff --git a/src/testium/main_win/resources/color/media-playback-start.png b/src/testium/main_win/resources/color/media-playback-start.png new file mode 100644 index 0000000..6be180a Binary files /dev/null and b/src/testium/main_win/resources/color/media-playback-start.png differ diff --git a/src/testium/main_win/resources/color/media-playback-stop.png b/src/testium/main_win/resources/color/media-playback-stop.png new file mode 100644 index 0000000..440e0a3 Binary files /dev/null and b/src/testium/main_win/resources/color/media-playback-stop.png differ diff --git a/src/testium/main_win/resources/color/nespresso.png b/src/testium/main_win/resources/color/nespresso.png new file mode 100644 index 0000000..6f2f8d5 Binary files /dev/null and b/src/testium/main_win/resources/color/nespresso.png differ diff --git a/src/testium/main_win/resources/color/note.png b/src/testium/main_win/resources/color/note.png new file mode 100644 index 0000000..c8a560c Binary files /dev/null and b/src/testium/main_win/resources/color/note.png differ diff --git a/src/testium/main_win/resources/color/pause.png b/src/testium/main_win/resources/color/pause.png new file mode 100644 index 0000000..97708e6 Binary files /dev/null and b/src/testium/main_win/resources/color/pause.png differ diff --git a/src/testium/main_win/resources/color/pause2.png b/src/testium/main_win/resources/color/pause2.png new file mode 100644 index 0000000..d48c43b Binary files /dev/null and b/src/testium/main_win/resources/color/pause2.png differ diff --git a/src/testium/main_win/resources/color/plot.png b/src/testium/main_win/resources/color/plot.png new file mode 100644 index 0000000..0fa4283 Binary files /dev/null and b/src/testium/main_win/resources/color/plot.png differ diff --git a/src/testium/main_win/resources/color/question.png b/src/testium/main_win/resources/color/question.png new file mode 100644 index 0000000..df7994b Binary files /dev/null and b/src/testium/main_win/resources/color/question.png differ diff --git a/src/testium/main_win/resources/color/report.png b/src/testium/main_win/resources/color/report.png new file mode 100644 index 0000000..3333ae2 Binary files /dev/null and b/src/testium/main_win/resources/color/report.png differ diff --git a/src/testium/main_win/resources/color/results.png b/src/testium/main_win/resources/color/results.png new file mode 100644 index 0000000..f95e850 Binary files /dev/null and b/src/testium/main_win/resources/color/results.png differ diff --git a/src/testium/main_win/resources/color/sleep.png b/src/testium/main_win/resources/color/sleep.png new file mode 100644 index 0000000..e2718c7 Binary files /dev/null and b/src/testium/main_win/resources/color/sleep.png differ diff --git a/src/testium/main_win/resources/color/system-log-out.png b/src/testium/main_win/resources/color/system-log-out.png new file mode 100644 index 0000000..f02f602 Binary files /dev/null and b/src/testium/main_win/resources/color/system-log-out.png differ diff --git a/src/testium/main_win/resources/color/terminal.png b/src/testium/main_win/resources/color/terminal.png new file mode 100644 index 0000000..4e9b9f8 Binary files /dev/null and b/src/testium/main_win/resources/color/terminal.png differ diff --git a/src/testium/main_win/resources/color/text-x-python.png b/src/testium/main_win/resources/color/text-x-python.png new file mode 100644 index 0000000..fe505a6 Binary files /dev/null and b/src/testium/main_win/resources/color/text-x-python.png differ diff --git a/src/testium/main_win/resources/color/verif.png b/src/testium/main_win/resources/color/verif.png new file mode 100644 index 0000000..1f5c54f Binary files /dev/null and b/src/testium/main_win/resources/color/verif.png differ diff --git a/src/testium/main_win/resources/color/view-refresh.png b/src/testium/main_win/resources/color/view-refresh.png new file mode 100644 index 0000000..073889f Binary files /dev/null and b/src/testium/main_win/resources/color/view-refresh.png differ diff --git a/src/testium/main_win/resources/f1_win.qrc b/src/testium/main_win/resources/f1_win.qrc new file mode 100644 index 0000000..f42cf78 --- /dev/null +++ b/src/testium/main_win/resources/f1_win.qrc @@ -0,0 +1,5 @@ + + + testium_logo.png + + diff --git a/src/testium/main_win/resources/f1_win_rc.py b/src/testium/main_win/resources/f1_win_rc.py new file mode 100644 index 0000000..4a9b441 --- /dev/null +++ b/src/testium/main_win/resources/f1_win_rc.py @@ -0,0 +1,1844 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.10.1 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00p\xc7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x01\xdd\x00\x00\x01\xc1\x08\x06\x00\x00\x00,)a\x8e\ +\x00\x00\x00\x01sRGB\x01\xd9\xc9,\x7f\x00\x00\x00\ +\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\ + cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\ +\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\ +\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKG\ +D\x00\xc9\x00\xc9\x00\xc9a\x80\xe6\x0e\x00\x00\x00\x09p\ +HYs\x00\x00.#\x00\x00.#\x01x\xa5?v\ +\x00\x00\x00\x07tIME\x07\xe9\x0c\x17\x0b2\x18\x07\ +\xe8A\x0b\x00\x00 \x00IDATx\xda\xec\x9dw\ +\x9cT\xe5\xd5\xc7\x7f\xe7\xb9\xf7\xce\xcc6\xca\x82\x88H\ +\xb1PL0\xa8\x11\xb1\x1bD\xa3A\xc5\x9a\xb5\x17\xea\ +\xec\xaa\xd1T\xbby\xb3I,1\x9a\xa8I\x8c\xbb\x03\ +\x08\x82-l\xa2X\xa21\xb1`\x02\xc6\x18Q\xb1E\ +\xc1\x82\x82\x02\xca.,l\x99\x99[\xce\xfb\x07\x88\x94\ +e\xdb\xdc\x99{\x9f\x99\xf3\xfd#\x9f(x\xef\x9ds\ +\xef\xf3\xfc\x9es\x9e\xf3\x9cC\x10\x04!/x%\x0e\ +s\xa4\x1d\xeb\x8f\x883P1\x97\x93R\xe5\xc4\x5c\xce\ +\xa0r\x10\xca\x89\xb9\x1c@\x19@\xc5D(\x01s\x84\ +\x81\x9e \x98`\xea\xb9\xf5\xb5\x88\xd0{g\xf7a\xc6\ +z\x00\xdc\xe6\x1f\x12\xaf\x07\xef\xf8g\x04\xb4\x02H\xee\ +\xf8\xf7)\xcd\x8c\xe6\xcd\xff\xed|\xab\xc6\xb9K\xde\xa4\ +\x90\xcf\x98b\x02A\xd0\x87\xd6)\xb1\xc1d\xd9\xfb\x18\ +\x1e\x8d`\xa2=\x09\xbc;\x81\x062x\x08\x88\xfaS\ +\xd45\x00\x02\x88\xb6\xa8'm\xa5\xa4\xdb\x09\xdeV\x7f\ +\xd6\xf9g B\xafv\xfe\xb4wW\xae\xb5\xf5c\xb1\ +\x87\xa7\xe5\x0d\x0b\x22\xba\x82 \xe4\x94\xb7+`\xed\xdd\ +;:\x88\x98G*\xc3\xfb:\x18{\x11h$\x13F\ +\x11\xdc2@\x01\xeaK\x9d\xfc\xf2\x7fI\xfb\xdf\xed\xb1\ +\xfaP\xde\xbe \xa2+\x08B\xd6\xf8\xbc\x02%e\xe5\ +\xe67M\xc6A \x1c\x04\xe0\x9b\x00\xedE\xe4\x99[\ +\x5cP\xea\xb23\xaa%\x0e\xf8\x03\xf9\x22\x04\x11]A\ +\x10\xe0\xd7\x9e\xeb>\xca\x1a\x11\xf1p \x08\x07*\xe0\ +@&\x1cD@$\xef\x15\xb5\x03\x18H~\xb6\xd2\xfe\ +\x9f|%\x82\x88\xae \x08\xdd\xa2\xfe<\x94\x95\x96\x19\ +G\x11\xd48\x05\x1c\xca\x8c\xfd\x09(\x82\x02\xba\xb1\x95\ +\x9a\xd7\x10\xe3\x8daO!-\x96\x10Dt\x05A\xe8\ +\x14+*\x10\xdb\xa5\xdc8LA\x8dS\x84q\xcc8\ +\x88\xb6\x1ac$\x0a\xbbS<\xe0\xbfaZ,\xf5(\ +5/\x02h\x02\x88\xbf\x0e\xa6\x92\xcd+\x83U`\xfa\ +\x90\x81\xf7\xc1\xf8wZ\xd9\xcf\x97\xd6\xe0\x0by{B\ +\x97\x16\x98b\x02A@\xf7\x8f\xe8(s\x8c\x09\x8c\x03\ +\xd3\xd1 \x1cF@L,\xd3\x0d\xd1\xf5pn$a\ +?\x18\xf4s$+\x8dq\x06\xd1\xbd\x04\x1a\x88\x8eC\ +\xe2L\xe07<\xa6\xc7\xd8\xa1\x07\xa23\xd3\xef\xca\x9b\ +\x14Dt\x05\xc1G\xd6OD\xcfb\xcb\xfa\x0e)>\ +\x15D\xe3\x09\xe8)VA\xa6\xfb\xb9\x9cr\xec\xfe\xa5\ +3\xf0y\xc0\x82{\xacA\xea\xf1\xee/\x9c\xf8U\xf6\ +0\xa79\xed\xcc\xee5\x1b\x8d\xf2f\x05\x11]A\xe8\ +\x06MS\xd1/\xa2\xac\xef\x10\xa1\x02\xc0\xb7\x89\x10\x15\ +\xab\xf8\xa9\xba\xfc\xbaY\xeb\x1c\x10\xf4;\x8e\x1a\xd6\x9b\ +D\xe8\x97\xf9\xcfA\x13\xc0\x0f\xa4\x98~_\x9a\xb0\xdf\ +\x92\x17,@\xf6t\x05\xa1\xa3I\xd8\xfaF\xd4\xe4S\ +\x08t\x0a\x03\x07\x92,P\x91\xbd\xfd\x5c\xfaG\xd0\xcf\ +\x105\xcd\xdf\x112\x17\xdc\xcd{\xf7\xa5\x00\xc5\xa3\x84\ +iv\xa5\xf5\x0f\x8f\xbc\xdf=Z\xef>uf\x1d<\ +y\xdb\x82L$\x82\xb0\x99\xd4\xe4\xc8p\x8a\xf0y\x04\ +>\x8f@{\x8bEr\x83\xcd|TQ\xad\xf3\xaf\xa0\ +\xee\xdf2\xcd\x1cm\x19\xf4r6\x17V\xcc\xfc>\x18\ +\xbfkt\x9cY}\xefA\x93\xbcu\x11]A(H\ +\x1a\xa7\xa0w\xb1eV\x10\xd3\x85\xbc)\x11J\xc6\x04\ +r\x19YF\xfd\x12\xb6\xfb\x8fN\xc0\x09L\xf4\xab\xcc\ +:\x02}7G\xbfw\x03\x03\xb3]\xc7\xf8M\xd1\xcc\ +\xe4'\xf2\x05\x88\xe8\x0aB\xde\xf3Y\x1cE}\xc9:\ +\x85\x80\xf3A8\x8e\x00K\xac\x12T\x12\x15\xcf\xb1j\ +\x9c\x8b\x10`-k\xd3r?$\xc0\xc8q\xf2\x98\x0d\ +\xe6:\xdb\xc3\xed\xc5\xd3\x9dW\xe4K\x80\xec\xe9\x0aB\ +>Q\x0d\xd0\xd5U\xc6X\x03t!\x98N'B\x0f\ +\xb1\x0a\xc2Po\xf9/A\xde\xdf0\xdci\xb9\x16\xdc\ +\xcd\xde\x8e\x05\xa2s#\x06\xceu*\xadE\x1e\xe3w\ +o\xc0~8H\x8f_\x10OW\x102\xa6!\x8e\x1e\ +e\xca<\x9b\x18\x97\x81h_\xb1H\xa8B\xcb\x1bV\ +7\xd8\xbb\x0e\xaak\xa3\xe5\x1fr\xd3Xbx\xb9\xb9\ +\x9c\x88\x06\x84\xe4\xe8\xd4*f$Ri\xfb\x0fe\xb3\ +\xb0V\xbe\x10\x11]A\xd0\x86\xe6\xb8u@D\xf1\xc5\ +\x00\x9dK@\x89X$\x8c\xa2\xcbs\xadZ\xe7\xc2\xa0\ +\xee\x9f\x9ef\x9d\xa5\x0c<\x14\xc2\xc5H+\x88\xefK\ +y\xf4;9r$\xa2+\x08\xa1e\xf9DD\x07\xc4\ +\xac\x0a\x05\x5c\x02\xe0P\xb1H\xb8q]:9:=\ +\xfdxP\xf7w*\xad\x7f\x82pd\xc8\x0b\x87<\xeb\ +\xb9t\xe7\xcd\xd3\xd3OT\x03,_\x8d\x88\xae \x04\ +Nrjt\x0f\xa5\xbc*\x22L&\xc2.b\x11-\ +\xaaP5~\x9a\xb4w\xddc6RA\xdc\xbf\xb9\xd2\ +\x1a\x15%,\xd1\xc8bK\x5cO\xdd\xf0\xe8\xba\xf4\xc3\ +r\xdeWDW\x10\x02\xa1)n\xed\x1b%\xbe\x12D\ +gK\x06\xb2v\xa1\xe5{\xadZgbP\xf7\xb7+\ +\xcdZ\x22\x8ak\x98\xed\xfd\x0e{t\xcb\x1b\xb0\x1f\x90\ +\xa4+\x11]A\xc8\x09\xadS\xcd#L\x83\xae\x02\xe1\ +D9W\x0b\x09-w\x91\xf5\x17\xa3W\x09[+u\ +\xde\xebg\xf02\xf6\xe8\xa6e\xeb\xec\xfbG\xd6\xc1\x96\ +/J\x1f\x94\x98@\xd0Il\xedJ\xeb\x1f\x96I\xff\ +\x22\xc2I\x22\xb8\xdaf-7}\xbe>\x1dX\xe9\xc7\ +\x126'\xea\x9e\x5cG\xa0aJa\xd6\xf0rs\x99\ +\x1d7\xbf\xbf\xa2B\xba[\x89\xe8\x0a\x82\x0f\xcc\xab\x80\ +JM\x8bLp*\xcdW6\x8b\xed\xb1b\x15\xede\ +\xf7\xa9\xa0\x8e\x09U\x03\x04FU\xbeX\x92\x88\x86\x90\ +\xa2;\xfa\x97\x9bK\xed*3>\xafB\xe6t\x09/\ +\x0b\x02\xba\xd7\xabv\x14\xac\x8bH\xf1\xf5\x04\xdaC,\ +\x82|jX\x7fA\xa4\xc6\xbe/\x88{'\xab\x8c\xe3\ +L\xa8\xa7\xf38\x8c\xb0\xd8!\xbe\x22V\xe3>/_\ +\x9ax\xba\x82\xd0)O$5-2a\x7fe\xbe\xaa\ +\x14f\x88\xe0\xe6]\xd6\xb2\xddj\xdb\x7f\x0d\xea\xfe\x06\ +\xe8{\xf9\xedF\xd1\x81&\xd4sv\xa5\xf5\x8f\xe6i\ +\xd6~\xf2\xc5\x89\xa7+\x08\xed6\x117I\xdd\x0c`\ +\xb4X#oE\xf7\x1fV\x8d}\x5c0^nl\x88\ +\x01\xf7\x83 \xca>\x06\xb4w\xee\x01\xfc\x17\xd75\xae\ +\x8c\xcdH-\x97\xafO<]A\x00\x00\xb4N3\x0f\ +u*\xad\x05&\xa9\x7f\x88\xe0\xe6\xbd\x14<\x1a\xd8d\ +\xe7\xb9\x17\x17\x8a\xe0n\xee\xeb\xab\x88\xa8\xc20\xbd\xb7\ +\xd3\x95\xd6\x0d\x9fWHe6\xf1t\x05H\xa3x\xbe\ +\x91@\x13\xc4\x1a\x85\x81\x93R{\xc5f\xa5>\xca\xf5\ +}WT \xd6\xbf\x8f\xb5\x82\x80\xbe\x05|6z\x85\ +\x07\xf5\xfdhm\xfa\x11\xf9\x12Et\x85\x02\xa2e2\ +v\xb3,\xf3f\x80. \x92hK\x01M\xfa\x1f[\ +\xb5\xce\x1eA\xdc;]e]\xa4\x80\xd9\xf2\x16\x00f\ +\xfc\xd5M\xab\xcb\x82X\xfc\x08\x12^\x16r\xc8\xb2\xf1\ +\x88\xd8U\xe6\x15\x96e\xbdKD\x17\x89\xe0\x16\x1c\x0b\ +\x02\x9b\xe8\x18\x97\x88\xf9\xb7\x84\x9dO4\x22\xde\xdbv\ +\xa5y\xdd\xb2\xf1\x88\x88EDt\x85<$9\xcd8\ +f\xcf\xc1\xe6\xab\x04\xfa\xb5\xf4\xb2-P\x0f\x8b\xe8\x99\ + \xee\xdb\x127\xc7\x800F\xde\xc06\xc2[DD\ +7\xec1\xd8|;Yi\x1c/\x16\x11\xd1\x15\xf2\x84\ +Ted\xa8]e>f\x1a\xea\x19\x10\x8d\x14\x8b\x14\ +l\xd62\xdb\x9e\x1d\x88\xe8Z$^n;\xc55\x86\ +\x9a\xa4\xfefW\x9a\xf77O\xc4\xaeb\x11\xd9\xd3\x15\ +4e\xedd\x94\xf6\xb0\xac\xeb\x08\xf8!\x11\xa2b\x91\ +\x82\xdfH|\xdd\xacu\x0e\xc8\xf5m7NB\xdfX\ +\xd4ZA\x902\x89\x9dX\x18\xade\xe0\x92H\x8d]\ +'\xd6\x10OW\xd0\x88t\xa5uvO\xcb|W\x11\ +\xae\x16\xc1\x156'\xef\xdc\x1f\xc4}cQs\x8a\x08\ +n\xa7=\xb0\xbe\x0a\x98gW\x9a\x0fn\xb8\x10\xe5b\ +\x11\xf1t\x85\x90\xd3\x1cG\xff\x882\xef\x22\xd0\xe9b\ +\x0da+\xc1\xdd\xd0\xdaj\xef\xd9c\x0e\x1a\x90\xe3\xba\ +\xdd\xa7\xf51\xdf'\xd0\x9e\xf2\x16\xba\xec\xf5\xae\xf1<\ +\xaa\x8c&\xd2\x8f\x8a5\xc4\xd3\x15\x10\xbe\xd2\x8d\xe9\xb8\ +5-\xa2\xacwEp\x856T\xf7\x97\xb9\x16\x5c\x00\ +8\xa5g\xc6o\x975\xd8\xd7\ +\x8c\xac\x83-\x16\x11\xd1\x15rHS\x9552\x06\xcc\ +\x04p\xb0XC\xbf.?`\xfe\x82\x08\xab\x19\xb4\x1a\ +\xe0\xcf\x19\xb4\x8a\xc0\x8d\xf0\xb0\x11\x0a\x0e{\xb4\x9eA\ +\x1e\x93\xbb\x1e\x0c\xc7#\xda\xa8\x08\xa5\xc4\x5cL\xa4J\ +\xc1\xe8I\xe020\xca\x98\xa8\x14\x80\x05F\x8a\x88\x9b\ +\x99\xe8\x93\xb4\x83Wo\x9ba\xbfU\x0dpP\xbf3\ +]e\xdd\xa1\x80\xef\xcb\x1b\xf7\xfd\x03z\xd1N\x1bg\ +\x15\xcdJ\xae\x14c\x88\xe8\x0a\xb9\xf0n\x87\x9bWB\ +Q5A*\xd9\x84TT\xd3`^\x0e\xa2\x0f\x99\xf1\ +\x01\x81?\xf0X}h\x83?\x80\xb2\xd7\x94\xd6\xe0\x8b\ +|\xb7\xc1\xe7\x15(\xe9]n\xad$B/\xf9\x22\xb2\ +s\xb4\xc8e\xef\xfcX\xad\xfb\xb4XCDW\xc8\x12\ +\xad\xf1\xd8 K\xb9s\x00\x8c\x15k\x84b\xe2k&\ +\xc6;\x0c~\x0b\xc0\xdb.\xf1\x9b\x80\xf5\xdeK\xef&\ +W\x06\x11\xce\x0d\x13v\x95\x19'P\xad|%\xd9m\ +\x1b\xc8\x8c\x9b^\x5cjW\x17\xfa\xf7&\xa2+ \x0b\ +U\xa5\xceP\xc4\x09\x82\x9c\xdd\x0bh\x7f\xf4\x130\x16\ +\x03X\xec\xb1z\x8bAo>\xb6.\xb5\xfc\xcc:x\ +b\x9d\x1dq*\xcd% \x1a%\x96\xc8\x89\xf8>\x97\ +N\xd9\xe7\x96\xcc\xc6\x1a\xb1\x86\x88\xae\x00\x1f\xc2t}\ +\xcc\xdb\x094M\xac\x91\xbb3\xad \xbc\x08\xe6\x17=\ +\xf0+6\xb9\xaf\x14BH\xd8/Z+\xcd#-\xa2\ +\x7f\x8a%r\x1auY\xe5\x82\xcf\x89\xd58/\x885\ +Dt\x05t\xb7\xd0\x85u@D\xf1\x03\x04\xdaG\xac\ +\x91U\x91\xad\x07\xf13\x00\xfe\x95vi\xe1\x7f\x97\xd9\ +oI\xb8\x0e\x99\x84\x96\x1f\x22\xd0Yb\x89\x9c\x7f\xc7\ +\x0e\x88\xaf\xb0j\x9c;\xc4\x1a\x22\xba\x02\xbaV\xe8\xe2\ +\xba\xb8y9\x88n\x91\x12\x8eY\xf1\x0a\x5cb~\xdd\ +cz\xc6#\xef\x99\x0f\x1a\xdc\x17\xe4\x08\x06\xfc\xeb\xd3\ +\x1c\xb1>&\xc0\x12k\x04v.{\xc6\xd2\x06\xe7\x12\ +\xf9\xa6!\xc51\x04t\xe2(\x10v\x89\xb2u\x1f\x11\ +\x8e\x13k\xf8:\x11\xad\x00\xf0\xb4\xc7\xea\xe9\xa4\x9b~\ +\xb6\xe7L\xac\x13\xabda2\xb3\xacJ\x11\xdc\xc0\xbb\ +\x16M\x1d^n\xed\xb1\xfeb\xbb\xa2\xd7\xddX/\x16\ +\x11OW\xd8\x99\x970\xcd\x1cm)\x92\ +\xf1\xe8^\xa6\xf2$aG\x8f\x04\xab\xb9K\xd8\x99<\ +:\x01\x07\xb2\xa7+ \xdf\xf7o\xc9\xfa\x03\x11*\xc5\ +\x1a\x1d\xb71\x03\xe3Y\x8f\xa9\xf6\xfdu\xe9G\xc5\xab\ +\x0d\xb9\xe7\xc0,\x1e\xae>G\x8a.\xd8\x0ff\xd9\xf2\ +\x89\xce\xd9{\xccFJ<]!/Y;\x19\xa5=\ +#\xd6\x9f\x088A\xac\xd1\xaeW\xdb\xc4\x84\x99\x9e\xad\ +~/G\x1d4\xfb\xbe-\xab\x91\x08J\xac\xa1\xcd\xc2\ +\xf6\x1f\xeb\xea\xed\xd3\xfa\xd5\xa1YDW@\xfe%L\ +\xd9O\x80\xe8\x00\xb1\xc6N\xc5\xf6s\x10\xff\xbe\xb5\xc5\ +\xf9c\x8f9h\x10\x8b@\xc7D\xaa7A\xb4\xafX\ +B\xaf\xde\xbcM\xca>\xb1\xd0\x8ah\xc8\xca\x10\xf9\xdd\ +l\xdeb\xfbE\x11\xdc\x9d\x1e\xf7\xf9\x88=\xfeA}\ +\x8b\xbd\xa7U\xe3\xdc \x82\xab\xf1\xbb$\xcc\x14+h\ +\xe7\xf2\x1dV\xea\x99\x0b[&\x17VB\xa7x\xbay\ +Jr\x9aq\x8ca\xa8\xbf\x10\xd0S\xac\xb1\x83\xda\xfe\ +\xd7#\xdc\xfa\xe2\xbb\xf6\xc3\xd2\x5c\x00y\xd4\xb8\xde|\ +\x9d\x88\x86\x8a5\xb4K\xaez\xcfu\x8d\xef\xc4f\xa4\ +\x96\x8b\xe8\x0a\xd0\xb4\xc2\xd4E\x04$$Cy\xc7\xde\ +\x9f.y7\xc4j\xdc\xe7\xc5\x1a\xf9G\xf34k\xbf\ +\x88\x81\xe7\xa4\xef\xb3\x96\xc2\xfbY\xca\xa5\xef\x94\xce\xb0\ +\xdf\x84\x84\x97\x05hT\x7f\xd6\xa92\x7fF\xc0,\x11\ +\xdcm<\xdb\x97\x1c\xd7;\xd6\xaa\xb5\x8f\x11\xc1\xcd_\ +J\xa6\xdbK\xd2\x8c\xa3\x19,Ip\xfae5\x0f\x88\ +\x1a\xf8g\xeb4\xf3(\xf1t\x05-\x98W\x01uj\ +\x1f\xeb.\x05T\x895\xb6\xa8\xed\x9b.\xab\xeb\xa3\xb5\ +\xe9\xc7\xc4\x16\x85\xc3\xfa\x89\xe8Y\x1c\xb3~E\x8c\xb8\ +d4k\x97\xd5\x9c\xf4\x98\xce\x8d\xd6\xa6\x1f\x11\xd1\x15\ +B\xcb\x82\xb10\x0e\x1fa\xce$\xa2\x8b\xc4\x1a\x00\x83\ +\x971\xa8z~\xbd\xfdP\xa1W\xbfA\x81'\x12F\ +\x99\xaf\x06\xe8l\x22\xa9I\xa0S\xcfi\x80/\xb1j\ +\x9c\x84\x88\xae\x10:\xde\xae\x805\xbc\x8f9\x97@g\ +\xc9\xbe\x10\xaf`\xa6_\xbe\x01{V!W\xbc\x11\xb0\ +C\xc5*\xa5\xbc\xcb\x89q\x0e\x11\xfa\x89E\xf4\xc0c\ +\xfcj5s\x89\xe7T\xe5\xd3\ +\x22ZDWSV_\x80\xe2>\xc5\xd6\xc3D8\xbe\ +\xa0\xcb5\x82\xe7\xdai\xe7\xea\xe2{\xb0J\xbe\x0a\xa1\ ++\x0b\xd6\xfeQc\xac\x22u2\x81O\x22\xd0`\xb1\ +Jh\xc7\xf9\x93\xf5\xcdvE\xff\xb9h\x11\xd1\x15\x10\ +T\xd9\xbb^\x11\xebq\x00c\x0bx$\xbe\x9cv\xf9\ +\xf2\xe2\x19\xce\x7f\xe4\x8b\x102\xa5\xb9\xca\xda?\xc2<\ +\x81@\x13\x980\x9adn\x0c\x1b\x0b\x9b\x92\xf6I\xbd\ +f\xa3QDW\xc8)\xeb/F\xafR\xb6\x9e\x04p\ +h\xc1v\xfda\x5c3\x7f\x9d=G\x92\xa4\x84l\xd0\ +:)6\xd0\x8c:\xa7\x00t\x1a\x80\xb1\xd2204\ +\x83\x7fqk\xda\xf9N\xd9,\xac\x15\xd1\x15r'\xb8\ +\x9e\xf9\x0c\x88\x0e,\xc0\x10S\x9a\x19w6\xb1}C\ +y\x02\x1b\xe4k\x10r&\xc0\x963\x19\x84\xc9D4\ +D,\x12\xf8\x1e\xef;i\xcf9\xa6$\x81\xd5\x22\xba\ +\x02\xb2]\xe6\xae\xbc\xdc\xfa;\x08\x87\x15\xa0w\xfb\xbc\ +gSU\xf4\x9e\xf4R\xf9\x12\x04\x04\xd5\x1a\x13\xd6\xb9\ +D|-\x11\x8d\x10\x8b\x04:!\xbc\xd1\xd2\xea\x1c\xad\ +k\xadt98\xae\x01\xcb\xc6#\xd2\xbb\xdc\xaa+4\ +\xc1e\xa0\x91=\xfe\xc1#\x0d\xf6\xb1\x22\xb8B\x90\x8c\ +N\xc0\x89$\xec9\x8f48_w]:\x19\xcc\xaf\ +\x89U\x02+_5\xaa\xb8\xd8z\xb2\xfe<\x94\x89\xa7\ ++de\x85\xbd\x1f\x99uDtj\x81\x85\x91\x1e\xb6\ +\xd3\xce\xf7$+Y@x+\xc0\x9d\xa1\x98\xaf\x07\xd1\ +(\xb1H \x8b\xf2g\x97\x7fl\x9f0\xec)\xa4E\ +t\x05\xdf\x06\xf6i\xe5\xe6\xbdDt~\x01\x0d\xa4U\ +\x9eK\xdf\x8bNO?,_\x80\x00\x0d\xea\x9d_\x1b\ +\xb7*H\xf1\x0d\x04\x1a&\x16\xc9-\x1e\xf0\xfbH\x8d\ +}9$\xbc,\xf81\x98O-\xb7\xfeP(\x82\xcb\ +\x003\xf3\xdc\xa4g\x7fC\x04W\xd0h\x9cr$a\ +\xcf[Z\xef\x8cdp%C\x2239\x16\xb0\xcb\xd2\ +q\xebB\xf1t\x85\x8cIWZ\xb7(\xc2\x95\x05\x12\ +J\xfe\xc0e\x8e\xc7j\xdd\xe7\xe4\xcd\x0b\xd0\xbd\xafo\ +\x1f\xf3\x87`\xba\x82\x08=\xc4\x229Y\xb07\xa7\x80\ +\x83Kk\xec\xb7Et\x85naW\x9a\xd7\x11\xd1\x0d\ +\x05R/9\xd1h;?\xee{\x0f\x9a\xe4\xcd\x0b\xf9\ +\xc2\xc6I\xe8\x1b\x8dX?%\xe0\x12i\xb6\x90\x13\xfe\ +\xf3p\xbd}\x98\x0eg\xf7Et\xc3\xe6\xe1\xc6\xad)\ +JaF\x01\xacN\xd7x\xecM\x8d\xd6\xbaO\xc8[\ +\x17\x90\xcf\x9d\x8e\x80;\x098F\xac\x81l7H\x98\ +\x16\xa9\xb5g\x88\xe8\x0a\x9d&Ye~\xcb\x00\xfd=\ +\xdf\x1b\xd03\xe3)\xdb\xb6\xa7Hf\xb2P(\xa4\xa6\ +E&(\xc3\xbb\x93@{\x8a5\xb2\xb6M\xf5\xc9\xf2\ +\x8f\x9daa\xcff\x96D\xaa\xb0\x0c\xca\xca\xc8\xd7\x0c\ +\xa6\xf9\xf9,\xb8\x0c$\xd9\xe3\x8b\xadZ\xfb\x04\x11\x5c\ +\xa1\x90\x88NO?\xfe\x85\xe7\x8c\xf4\x18?gF\xab\ +X$\x1b\x1e$\x0d\x1e<82\x01\x92\xbd,\xa0\xc3\ +\x10\x14vQ\xf0\x9e B\xaf<\xde\xbb]\x9avq\ +\x88\x95pj\xe4\x8d\x0b\x85\xc8\x80\x04Z#\xb5v\xb5\ +\x9bV#\x19\xf8\x87X$\x1b\x82\xe6\x9d%\xa2+\xb4\ +\xcb\x8a\x0a\xc4bl\xcd'\xa2\xbd\xf2\xb9\xd0E\xb3r\ +\x0e.\x99n/\x917.\x14:\xb1Y\xa9\x8f\xac\x1a\ +\xfb8\x0f8\x93\xa1w\xf1\xfe\x10r\x98\x88\xae\x80\xf6\ +\xce\xe2\xf6/7g\xe5kyGf\xa4\x18\x5ci\xd5\ +8g\xf4\xba\x1b\xeb\xe5\x8d\x0b\xc2WDj\xec\xbat\ +\xd2\xde\x97\x99\xeb\xc4\x1a\xf0\xabD\xe4\x80y\x15\xe1\xd6\ +5I\xa4B\xa0gq\x7f\xa1\x08?\xcd\xd3p\xf2\xa7\ +\xb6\x8b3\xa4\xdf\xad tL*\x1e9E\x91\xf7G\ +\x22\x1a \xd6\xc8\xec\xcc\xaeUc\x97\x8a\xa7+\xb4%\ +\xb8g\x13\xe1\xfa<\xfd\xf2\x17\xd9\xb6s\x90\x08\xae \ +t\x8eh\x22\xfdhs\xca\xf9:3\xdf/\xd6\xc8\x88\ +\x17 \xe1ea{Z+\xcdC\x08\x98My\x18i\ +\xf0\x80?~\xf4\x89=N\xb2\x93\x05\xa1k\xf4\x9a\x8d\ +F\xab\xd69\xdf\xf3p\x11\xb3\xf4\x8c\xee\xd6\xfc\xe3R\ +\x8d\x9c\xd3\x15\xb6\xa1y\x22v\x8dD\xcd\xc5D\xb4{\ +\x9e\xed\xdf: \xbe\xd4\xaaq\x12\xf2\x96\x05!3\x92\ +\x93\xa2{\x9a\x11\xef\xbeB\xec\x9f\x9dA\xc2\xe6\x9f\xad\ +\x1a\xa7B<]\x01[\xb7\xe9\x8bF\xad?\xe5\x9d\xe0\ +\x02\x1b=\xf2N\x15\xc1\x15\x04\xf8\x96\xe1\xbc\xf0=\xfb\ +(\x06_\xcd\xd0\xabu]P\xd3\xeb\x86\x8d\xcedH\ +\xede\x01\xdb\xee\xe3\xde\xa9\x08\x97#\xbfV\x97\xcbS\ +\xa0\x93t)6.\x08\xba\xd1\x1a7\x0f7\x09\xf3$\ +\xc9j\xa7\x93\xd0\x0b\xadl\x9fQ\x96@=\xa4\xb5\x1f\ +\xb4\xeee\x9b\xaa\x8c\x9c\xe1\x9b\xe0VY\xe7\xe7\x9b\xe0\ +\x02\xf8O:\xe9\x1c\x22\x82+\x08\xd9\xa3(\xe1,J\ +\xb3s 8\xfcIB\x08 \x87\xe4\xbd\x06\xfb\xdb\xba\ +\x08\xae\x88n;\x9c\xda\xc7\xba\x95\x88\xc7\xc1\xa7\x12\x8f\ +\x04\xd4\xe4\xd9\x1e\xee\x13k\x9b\xedq%\xb3\xb1F\xbe\ +\x16A\xc8.%\x09\xac~\x9d\xedc=\xc6o\x18`\ +qn\x91\xf4<\xc4#5\xf6\xa5#\xeb`C\x9a\xd8\ +\xeb\x8d]e^\xaa\x80\x1f\x81\xb18\xd3k}\x16G\ +\x91A\xde\x9f\x08(\xc9\xa3\x90\xf2\xec%l\x9f\xd6\x7f\ +.Z\xe4k\x11\x84\xdc0:\x01'Rk\xff\x84\x81\ +\xb3\x18\xd8X\xb0\x82\xcb\xfc\xbf4\xe3\xe0H\xc2\x9e\x0e\ +-KU\x0a\xdby\xa5\xc6I\x00\xdd\xc9\x0c'\xc5\xf6\ +\xa3\x99^o\x17e\xde\x09\xd07\xf2\xc5>\x9e\x87[\ +n\xacq&\x8fN\xc0\x91\xafE\x10\x10H%+\x8f\ +\xe9`f~\xbf\x00\x05w\xee\xba\x06\xe7\xa0\x92Z\xfb\ +\x0dh\xdb\x98A\xd8BK\xa5y\xa0E\xf4\x02\x01%\ +\xccx\xc2\xaa\xb5'dZ\x00C\x11\x1e\xcc\x93p\x0e\ +\x03\xfc#\xab\xc6\xb9C\xbe\x14A\x08\x9e\x8d\x93\xd0\xb7\ +(j=\x02\xe0\x88\xfc\x17[x \xbe\xd6\xaaqn\ +\x81\xf6M\x19\x04\x00@\xeb\x94\xd8`\x8b\xe8q\x02J\ +\x18`\xdb\xe3\x9fg\xb8\x8f;\x94\x80\xda|\xf9\xe0\x99\ +1U\x04W\x10\xc2C\xd9,\xac]\x99\xb4\x8fe\xf0\ +\x83\xc8\xf3\xd2\x8e\x1e\xd1\x19\xf9 \xb8\x00`\xc8\xa7\x0b\ +\xac\x9f\x88\x9eE\x11\x1f\xda\xf2y.\x9d\x11\ +M\xa4\xff,\xd3\x9a \x84\x9fH\xc2\x9e\xed\xc2\x9b\xc0\ +\xc8\x83S\x05\xcco\xd8i\xe7\xb0\xe8\xf4\xf4\xb2|{\ +O\xaa\xc0\x8f\x06]OD\x93\xb6>{zc\xc2\xb9\ +\xbb\xbb\xd7\xfb\xbc\x02%\x16a.\x11L\xcd=\xdc\xb4\ +G\xde\x19\xd1\xe9\xe9\xc7e*\x13\x04}\x88\xd5\xb8\x7f\ +w\x1c>\x9e\x81F\x8d\x7f\xc6\xc2&\xe5|+_\x9b\ +\xa6\x14\xac\xe8\xa6\xe3\xd6y\x00\xfdb\xabT\xf4\x8f[\ +[\xed\x8b\xaa38x\xde\xab\x8fu\x1b\x11\x0d\xd7>\ +\xa4\x0c:+Z\xe3\xfeU\xa60A\xd0\x8f\xa2\x19\xce\ +B\x9b\xf9\x18\x06\xd6j\x18a\xfb\xeb\xdaf\xfb\xf8^\ +wc}\xbe\xbe\x1fU\xa0\xad\xf5\x8e$\xc2\xcc/[\ +\xeb1\x90\xb6\x19g\xf6\x98\x83\x86\xee^39\xcd8\ +\x86\x80J\xed\x93\xa6\x80\xf3\xa25\xe9\xf92u\x09\x82\ +\xbe\x14\xd7:\x8bS\xc0X\x86>\xde\x223\xdf\xbf\xb4\ +!\xff\x8b\xee\x14\x9c\xe8&\xa7F\xf70A\x7f&B\ +t\xcb\xbf\xf4\xf8'\xc5\x09\xe7\xe5\xee^s\xf5\x05(\ +6\x0c\xaa\xd5\xb9?.3<&L\x8a\xd4\xd8u2\ +e\x09\x82\xfe\x94\xd6\xd8o\xbb\x8e:\x8c\xc1\x1f\x84\xfd\ +Y=\xc6]\x8f48\x17\xeaV\xd2\x11R\x1c\xa3}\ +\xea\xcfCY\xcfR\xf3\xc5/3\x95\xfd\xea\xc1\x98\xae\ +\xb2\xeeP\xc0\xf7u.|\xc1\x8cx\xa4\xd6\x9e!S\ +\x95 \xe4\x9f\xa3a\x18\xee\xa2\xf0v)\xe2j\xb3\xc6\ +\xf9y\xa1\xbc\x0fUH]\x83z\x94\x9a\xf7m'\xb8\ +\x1f4'\x9d\xa9\xc8,T}\x08\x01\xdf\x83\xdeq\xe5\ +kEp\x05!?\x89\xcdH-O1\x1d\xcf\x8cu\ +\xe1[\xec\xf3\x8f\x0aIp\x0bJtO-\xb7~E\ +D'o}$\xc6f\x9c\xd5kv\xf7\xb3\xfcVT\ + f\x12f\x91\xc6EF<\xc6\xedV\xad\xf3+\x99\ +\x9a\x04!\x7f)M\xd8o\xb9\xec\x9d\xce@2,\x09\ +\x9b\x0c\x9co\xd5:\xb7\x17\xda\xbbP\x05\x92\xa9\xee\x93K\xeb\ +\xedS\x0b!qA\x10\x84\xaf\xb0\xe3\xe6%\xa4\xe8\xae\ +\x80\x16\xfa+\xd2L\xa7\xe4[\x95)\xf1t7\x93\xac\ +\x8a\x0d1\x89\x1e\xdeNp[\x5cO]\x9a\xb1\xe1,\ +\xbeCW\xc1\x05\xf3k\x8di\xfb,\x11\x5cA(<\ +\xac\x84\xf3G\xcf\xc3\x0d\x01\xac\xf4_J\xb33\xa6\x90\ +\x05\x17\xc8\xe3\x86\x07k'\xa3\xb4X\xe1\x19\x22\xda\x0b\ +\xdbnb^\x1dM\xd8O\x22\xb3p\xf59J\xe1j\ +MC\xca\x9f:i\xf3\x98\x9e\xb3\x9c\xb52\xfd\x08B\ +\x81N\xfc\x8b\xbd\x05G\x1e\xa8v'\xa2o\xe6h\xde\ +y\xe8\x0bvN\xef\x93\xc8\xdf\xa2\x17\x9d\xc5D\x9ef\ +*\xf7\xb4\xcc\xfbA4j\xbb7\xbfx\x09\x9c\xdf!\ +\xc3\x8eD\xa4\xf0\x1bM\xcf\xe2nH\xb94\xbetV\ +r\xa5L;\x82\x80\x82n\x92p\x12;\x17\xef\x07\xb3\ +\x94\x88\xce\xce\xe2\x9c\xd3\x0a\xe6\x9fX\x09\xe7\x8fbu\ +\xe4ox\xf9\xd4\xde\xd6M[g*\x7fYm)\xe5\ +R|t\x02N&\xd7.\x8eZ\xd5\x04\xec\xa6cy\ +G\x97\xbc\x8a\xd2\x19\xf6\x9b\xf2\xd9\x0b\x820:\x01g\ +\xd1{\xce\xf9\xcc\x9c\xa5\x84&^\xc2\x1eF\x8b\xe0\xe6\ +\xb9\xe8\xa6+\xad\x0b\x94\xc2Um\x88\xce\x9d%3\xec\ +W3\xb9vjJd\x1f\x22\x5c\x0a=\xcf\x06]\x1e\ +\xabq\xff.\x9f\xbc \x08_2v\x01\xdcE\xef9\ +\x172\xf3\x0c?\xcf\xdfz\x8c\xdbW&\x9d\x83#\xd3\ +\xedw\xc4\xca\xc8\xdf\xec\xe5\xe6JkT\x84\xf0o\x02\ +\x8a\xb7\xdbO\xf8\xb8\xd1v\xf6\xed{\x0f\x9a2\xb9\xbe\ +]i=I\x84\xf1\xd0\xef,\xee\xdd\x91Z\xfb\x12\xf9\ +\xdc\x05Ah\xa7\xebZ\x1c\xa0\xdf\x13\x10\xc9 \x9e\xfc\ +\xba\xed\xe2\xb2\xa2\x19\xceB\xb1h\x9e{\xba\x8dS\xd0\ +;\x02~d{\xc1\x05\x00\xd7\xe3\xaaL\x0579\xcd\ +\xf8\x8e\x8e\x82\x0b\xe0\x9f\xcb\x1a\xec\xef\xcb\xa7.\x08B\ +{X5N\xc2a>\x96\xc1\xcb\xbb\xd1p\xfe#\x8f\ +1e\xe1{\xceh\xdd\x05\xb7)n\xed\x9b\xae\xb4n\ +\xb6+\xcdy\xe2\xe9b\xe7\x89S\xa7\xf5\xb1\x1e'\xe0\ +\x846\xb2\xe6\x1e\xb0j\x9d\xf32\xb9\xfe\xdb\x15\xb0\x86\ +\x97\x9bK\x88\xe8k\xd0+S\xf9\xe3\x149\x07\x95\xd6\ +\xe0\x0b\x99R\x04A@'\x1b\xb8\x94\x17[W\x12\xf0\ +}\x22\xf4\xea@m\x17y@\xed\xb2\x06\xfb!\x9d\x8f\ + ~\x16G\xd1.\xca\x9cL\x8c\xf8\xd6\x09\xb8)\x17\ +\xfb\x97L\xb7\x97@\xb2\x97\xb7\xe5\xf4>\xe6O\xd1\x96\ +\xe0\x02\x1b\xd3\xecd\x5cqixo\xb3J;\xc1\x05\ +Z\xd2D\xa7\x8a\xe0\x0a\x82\xd0\x156\xb5\xd6\xb3\xab\xd7\ +N\xc6m=L\xeb\x14R|\x1c1\xbe\xc1@O\x02\ +\x9a\x98\xf0>\x18\xcf{P\x7f\x8b\xd6\xa6\xdf\x87\xe6\x11\ +\xd2b\xcb\xbc\x14L\x97\x11\xd0o{7\xd4R\xa8\x04\ +p\x89x\xba[\x91\xaa4\xc6+\xa8'\x88v\x0c\x95\ +3\xf8:\xab\xc6\xb9\x09\x19v&\xeaQj\xbdO\x84\ +~:\xd9\xc5\xf3pQ$a\xcf\x91)D\x10\x04\xa1\ +\x0d\xcf\x96\xcc\x1f\x81\xe8*\x02\xca\xda;f\xd9h\xdb\ +\xbbg\xba=\x89|\xd9\xd3MV\xc5\x86(Rs\xda\ +\x14\x5c\xe6\x15\xf5\xcd\xce\x1d\x99\xde\xa3\xac\xd4\xfa\xb1v\ +\x82\xcb\xa8\x15\xc1\x15\x04A\xc0\xf6\xe7\x93)]eU\ +\xec\xa2\xccw\x88\xe8\x86\xf6\x04\x17\x00\x88\xd0\xa3g\xc4\ +<\x17\x12^\xde\xb4R1\xe1<\x0cP\xdf6W(\ +\x1e]\xb1)L\xd2}\x9a\xa6\xa2\x1f\x11~\x04\xbd6\ +r\x17\xafip~ \xc3K\x10\x04\xe1+\x9a\xa7Y\ +\xfbE\x15\x12\x00\xc6t%\xc8K\x8c*\x00\x89\x82\xf7\ +tw!\xf3\x0f\xc0NK\x98\xfd\xfb\xa6\xe9v\xc6\x99\ +g\x11\xd3\xba\xbe\xa3\x95P\xc8*N\xads\xd88s\ +P]8\xdaw\x09\x82 \x84\xc1AKWZ\xd5\x11\ +\x03/\x830\xa6\xcb\x17 :\xa0%n\x8eA!{\ +\xbav\x95\x19'\xd0\xe4\x9d\x1d\xcc\xb6=\xfeA5\xc0\ +\x99\xdc#95\xba\x07\xc1\xab\xd4(q\x8a=\xd0\xc4\ +X\x22\xf5\xa1\x0c3A\x10\x04 \x197\xc6\x1a\x8a\xee\ +!`\xcfL\xaec\x11\xaa\x00\xbc\x5c\x90\x9enK\xdc\ +\x1c\x03\xa6\xdf\xb5\xe3\xee\xddW\x9cp26\x8ea\xb8\ +?\xcd\xe8\x90x\xeeE\xf7\x0f\xd1\xda\xf4c2\xcc\x04\ +A(tVT \x96\x8e[\xbf2H=K\xa0=\ +3\xbf\x22\x9d\xdd8\x05\xbd\x0bNt7NB_K\ +\xa1ng-\xf5\x18hq\xd2\xe6\xb5\x19\xaf\x8e&E\ +\xf7\x04\xd1\x05\xfaX\x86\xdf\x5cSo_)CM\x10\ +\x84B\xa79n\x1d\xb0[\xb9\xf9\x8aR\xb8\xaa\xad$\ +\xdbnI.\xa1\xa8\xd84/((\xd1\xad\x06(\x16\ +\xb5\xe6\x12hp;{\x9a\xb7\x16\xf9\xd0A\xc7\x88\xba\ +\xd7\x10`i\xb2\x8f\xdb\x9a\x04\x9d#\xfb\xb8\x82 \x14\ +2\x0b\xc6\xc2\xb0\xab\xcck#\x0a/\x81h\xa4\xdf\xd7\ +'\xc2\xe4\x82:\xa7k\xc7\xcd\x9f\x90\xa2[\xdb\x11\x9f\ +\xcf\xd75\xd8{\xf5\xabCs\xa6\xc7\x90\x0c\xb8Ku\ +\x09-\xb3\xc7\x97J\x17\x0fA\x10\x0a\x99Ted\xa8\ +A<\x07\xc0\xa1Y\xbd\x8f\x83\x033m\x9c\xa3\x85\xa7\ +\xdbRe\x1e\x04E7v ?\xbf\xceTp\x01@\ +\xb1{\x8d6\x82\xcbx\xe2\xc6\x84s\xb7\x0c9A\x10\ +P\xc0\x8d\x1a\x14\xf1\xeb\xd9\x16\x5c\x00\xb0\x0cL\xca{\ +O\xb7!\x8e\x1ee\xca|\x95@{\xb7\x93D\xb4\xaa\ +\xbe\xd9\x1e\x9a\xe9\xb9\xdc\xd6I\xb1\x81f\xd4\xfd@\x07\ +\xd1eF}\x9a\xed}K\x12X-\xc3N\xd0\x89W\ +\xe20\xbf\xc1\x91=\xa1\xdc\x11\x04\xd5\x9b\xc0=A(\ +\xd9\xea\xaf41\xa8\x89]\xda\xc8\xca\xdd\xe0\x115\x1a\ +\xac\x9a8M\xc9\x94J\xado6\x90\x1c\x90@k>\ +\xd8\xe2\xf3\x0a\x94\x94\x94\xa0\xd40\xa2\xa5\x9e\xe9\xf6R\ +\xcce\xc4F\x19\x19\x5cF\xe0\xd2\xaf\xe68ja\xf6\ +\xea]\xa6z\xdbu\x96\xf5\x9c\x89u\x85\xfe\x1d5O\ +\xc4\xae\x91\xa85\x83\x08'\xe50a\xb5\xe1\xd3\xa4=\ +`\x8f\xd9H!_\x8f\x0c\x95\x91Y\xdb\x9e\xe0nV\ +\xa0_e*\xb8\x00`D\xdc\x1f\xe8\x13V\xc6\xa5%\ +\xd3Ep\x05hrt#\xba\x97A\xeew\x89h\x02\ +\x03c\x08\x1c\xf9*\xd0Fm{\x03\x06c\xcb\xdf!\ +\x06\xa2\x0c\x13\x16J\x008U\x00\x03\x8d`x\xd0\xb7\ +\xb1j/\xda\xf2\xe3\xbdM\xbf\x9a\x08_\x9dv\xa4m\ +\xedA\x0a\x06\x01\x96\xb2\xd8\xae\xe4\xa5\x00^\xf2<\xf5\ +\x97\x7f/K?9v\x01\x5c\x14V8\xf9d\x05\x9e\ +\x9e\xebj\x81\x04\x94\x0f\x88X\xa7\x00\xdd\xaf\x03A!\ +oH?Y\x11fv\xd0I\xe7\xd3\xd5\x0d\xce\xd0L\ +\x13\x89\xd6_\x8c^%\x9e\xf51\x11z\x84\xffx\x10\ +\xff\xc9\xaaq\xce\x96\xa9\x5c\x08;\x1b\xe3\xe8\x13#\xf3\ +\x0e\x10\x9dC\x80!\x16\xc9\xca|\xf0\x8e\x0b\x5c\x12\xab\ +q^\xc8\xf7\xdf\xbav2J{F\xcc\xdf\x12hZ\ +\x80Q\xc6\xa7\xadZ\xfb;\xc8\xb7=\xddTed(\ +\x01wv\xe2\x8b\xbb\xc9\x8f\xcc\xdd\x12\xcf\xac\xd2Bp\ +\x19\xab\x93\x9es\xa9L5B\xe8\xbd\xdb)\xd1\xbdc\ +d\xbeFD\xe7\x8b\xe0f\xd3\xfb\xa2\xaf\x1b\xa0g\xd3\ +U\xd6E\xf9\xfc;[\xab\xcc\xc3zZ\xe6kA\x0a\ +\xeef\x83\x1f\xdb:)60\xafDw\xc1X\x18\x06\ +\xf8^\x22\x94v\xd4/v\xf9\x0agF\xa6\xf7[>\ +\x11Q\x10]\x0e-\x9a\x19PUY\x02\xf52\xd5\x08\ +\x08\xf9^\xa5a\xba\x7f#\xa2Ab\x8d\x9c\x84=\x0d\ +b\xcch\xa92\x0f\xca\xb7\xdf\xd68\x05\xbd\xd3\x95V\ +\x8d\xc9\xf4/\x22\x1a\x1a\x06[\x9b\x11\xe7\xa2\xbc\x12\xdd\ +\xc3G\x98W\x83pX\xc7^\x1f\xdd8\xec)\xa43\ +\xbd\xdf\x80\x88u>\x01\xbbi\x10F\xfas4\x91~\ +T\xa6\x18!\xec\xf4\xeac]\x17\x86\x09\xb2\xa0\x84\x97\ +`F@\xbf\xcd\xa7\xdf\x94\xae\xb4\xce.\xb6\xac\xff)\ +B\xa5_\x85.|bbu7\xb7gC'\xba\xcd\ +S\xado\x82\xe8g\x1d\x0b.\x7f\xb8l\x9d=\x1b>\ +\x14\xddP\xc4?\xd4 \xac\xbc\xdeN;\x97\xcb\xd4\x22\ +\x84\x9d\xd5\x17\xa0\x98|n\xfc-t\x9a#\xd2\xd3\xac\ +\xaf\xeb\xfe#Z\xaa\x8a\x06\xd8U\xe6|Ex\x90\x80\ +]\xc3\xb7\xc0\xa1\xa1WU\x99\x87j/\xba\x9f\xc5Q\ +\x141yng\xaaA1\xd3M#\xeb`gz\xcf\ +\xab\xab\x8c\xb1\xd9\xa8^\xe2\xff[\xe6\xab\x8a\xef\xc1*\ +\x99S\x84\xb0\xd3\xbb8r,\x01=\xc5\x12\x01M\x15\ +\x8a\x8f\xd7\xf9\xf9S\xf1\xc8)\x16;o\x13\xe8\x940\ +?\xa7\xc1t\x8e\xf6\xa2\xdb\x97\xac\x9b\x08\xf4\xf5N\x9c\ +\x95Z\xf5Y\xda\xbe\xcf\x17\xc3\x81\xbe\x87\xf0\xc7\x95\xff\ +uc\x8d3]\xa6\x13A\x8f0'\x1f(V\x08\xf4\ +\x0d\x8c\xd3\xf5\xc9\xedJ\xf3J\xa5\xf8\x11\x22\xf4\xd2 \ +\x9c_\xb1`l\xd7\x13\x04C#\xba\xadS\xcd#\x08\ +\xe8d\xf8\x94\xff\x90\xc9\xe1\xe4-\xf7\x8c\xc7\x06\x81\xe9\ +\xe4\x90w\x0fJ\xbb\xa0\xca\xea\x0c[\x15\x0aB\xee\x82\ +2<\x5c\xac\x10\xe8\x0b\x18\xaaie\xa9\x1f\x10\xd1-\ +\xa4Iyb\x02v=d\xb81NK\xd1\xfd,\x8e\ +\x22\xd3\xc0\xcc\xcel\x943\xd0\xdc\xda\xe2\xd4\xf8\xe2\xe5\ +\x92[E\x14\xee\x02!\xcc\xb8#Z\x9b\xfe\x9f\xcc$\ +\x82FGX\xf6\x16+\x04\xfa\x06\x06WkTW\x1f\ +\xd8\xdc\xb2\x15\xf4k\xdd,mP\xd7C\xcc*$a\ +\xe5\x9f\x13\xd1\xf0Nz~\xf7\xf4\x98\x83\x06\xf8pL\ +\x88\x80i\x08\xb5\xe0\xf2\xa7\x1bl\xfb\x972\x89\x08z\ +\xc1\xc5b\x83@=\xb0\xe2K*\xa0\x91\xe4\xa8\xee\x00\ +\x00 \x00IDAT\xd5;\xb0\x88~\xa1Kg\xb7\ +\xed\xac}\xda\xf2\x89m\xb7\x9a\x0d\xad\xe8\xb6\xc4\xcd1\ +D\xf8Q'\x05\xd7\xf5\xb9\xdc\x18GDCBMv\xdaF\x1az\xce\xc4:0?\ +\xa0\xb1\xf1\xbf\x91\x8cG\xf7\x0aTt[\xaa\x8a\x06@\ +\xd1\x95\xdd\x08\xb9\xfe\xd5\xaf\x04\xaa\xcf\xe2(\x02\xe8\xf8\ +Pz\xb9\xe4\xfdTf\x09A\x10\x84\xcds\xa2\x8b{\ +u~~C\xb9\xe3\x03\x15]\x0b\xf6\xcd\x04\x94t]\ +s\xe9A\xbf\x9e\xa1\x0f\x22\xc7u\xe7\x19r\xe0\xe5\xbe\ +\x14\xabq\x9f\x97a&\x08\x82\xb0\x89\xc7\x1b\x9d\x17\x99\ +\xf93\xe8\x9bHxL`\xa2\xdb\x5ci\x8d\x02\xd3\xf9\ +\xdd\xc8\xbekjh\xb5\x9f\xf0\xeb9\x14y\xa7\x84\xf1\ +\xdd\xb8\xe4\xdd CL\x10\x04\xe1+\xce\xac\x83\xc7\xa0\ +G\xf4\xfd\x054v\xc1\xd8\x9dw\xce\xcb\xaa\xe8F\x88\ +o\xe8^c\x01\x9e\xdf\x7f\xae?\x9b\xe9\x0b\xc6\xc2\x00\ +\xd1\x84\x10.\x87\x96\xdc\x5c\xe3>)CL\x10\x04a\ +[<\xf2\xfe\xa2q\x97\xad\xdec\x86\x99\x07\xe4\x5ct\ +[+\xcdC\x08\xdd\x13;\x8f\xd8\xb7>\xb2\x07\x0f5\ +\x0f%\xa0o\xf8\x0e\x82\xd3\x8d\xd5\x92\xb1,\x08\x82\xb0\ +\x03/\xbd\xeb\xfe\x93\x19\x9f\xeb\xfa\xfc\x96\xb1\xf3\x10s\ +\xd6D\xd7\x04\xdd\xd8\xcd\x83\xdd\xf5\xef\xd7\xbb\x7f\x87o\ +\x9b\xda\xe1K\xa0b\xe6\xf7\xe6\xd7\xdb\x7f\x91\xa1%\x08\ +\x82\xb0#c\x17\xc0\x05X\xe3\xda\x05\x94[\xd1MN\ +3\x8e!\xc2\xb8n\xf6\x92\xad\x1bY\x07\x1b\xbe\x9d\x9b\ +\xc2wB\xf8Fn\x97\xeaS\x82 \x08h\xaf\x1a\xe1\ +\x9f5~\xfc\xc3w\xd6u(+\xa2k*uC\xf7\ +\xc3\xae\xfe\x85\x967NB_f|3d\xbd.\xd7\ +\xd6\xb78RcY\x10\x04\xa1\x1d\xde\x82\xfb<\x03\x0d\ +\xba6\xb6\xef\x1f1\x0e\xcd\x89\xe8\xa6*\x8d\x93@8\ +\xa4\x9b\x82\xb4\xea\xb1z\xe7_~=K\xd4\xb2\xbe\xdd\ +\xbdD\xae\xac\xd6E\xad\xf5+IL\x10\x04!_\x19\ +\x9d\x80\x03\xf0\xd3\xba>\xbf\x82:&'\xa2k@]\ +\x97\x81\x22\xfd\xd5\xcf\xb0+\x11\x1f\x1f2/7\xed\xd8\ +\xf6]2\x9c\x04A\x10:\xd5\xee\xf4I}KB\x22\ +\xfb\xa2\x9b\xac4\xc6u\xd7\xcb\x05\x00\x0f\xeaq\x9f}\ +\xfc\xa3C\xf6\x09=\xe0W\x95-A\x10\x84|'\x95\ +\xb2\xff\xc6\xacg\xfe\x0b\x03\x07\xb6\xb5\xaf\xab|\xf6r\ +\xaf\xc9\xe0\x01\x93\x8d\x0d\xe9g\xfdz\x96\xe4\xa4\xe8\x9e\ +]\xad\xf7\x9cml\xc6\x1fd\x18\x09\x82 t\x8e\xb2\ +YXK\xc0\xcb\xd0s_7\xd2\xcf4\xf7\xcf\x9a\xe8\ +\xb6\xc4\xcd1D86\x83e\xc1\xb3\xfd\xea\xfc\xeb\x8e\ +\xa1,\xef[![\xf6\xfc\xb7\xb8\xd6Y,\xc3H\x10\ +\x04\xa1KG,\x9f\xd2\xf5\xd9-\x851Y\x13]K\ +\xe1\xda\x0cM\xfbW\x7f\xab\x82\xf0\x91a2\xbe\xc7\xa8\ +\x95\xe1#\x08\x82\x80\xaeF\x08\x9f\xd4\xb8\xe3\xd3AY\ +\x11\xddTe\xe4k\xe0\xccJ-\xbad>\xe9\xf3\x8f\ +\xfdV\x88b\xfb\x8d\xeb\xd7\xd9\x0f\xc9\xf0\x11\x04A\xe8\ +\x1a\xbf\x9e\xee,fh\x9b\x0b\x93\x1dOW\xc1\xbb\x22\ +\xb3\xa39\xbc$V\x93\xfc\x18>\xb6\x13$\xd0\xde!\ +:&4\xd7\xcf\xd0\xb9 \x08B\xa1P\x0d0\x98\x9f\ +\xd1\xb4\x10\xf3\xf0\xc6)\xe8\xed\xab\xe86Ua\x17\x10\ +\x9d\x83\x8cB\xaf\xf4\x84\x9f\xbf\xd3p\xddC\xc2d\xf7\ +\xb4\x84\x96\x05A\x102\x89\x5c.\xd44\x99\x8a\xa2\x86\ +1\xdaW\xd1\x8d\xb2\x19' \x96\x99\xe8z\xcf\xf8\xbc\ +\x9f;\x06!J\xa0*M\xd8o\xc9\xa8\x11\x04A\xe8\ +\x1e)\xd0\x22h\xdb\xd4\x9e\x0e\xf6Mt_\x89\xc3\x04\ +\xa1*\xc3\xd0k\xaa\x01\xee\x7f|n\xadtPh4\ +\x97\xf8^\x192\x82 \x08\xdd\xe7\xb6\x1a\xfb\x1df\xd4\ +C\xcf\x03\xbb\x07\xf9&\xba\xa3\x94u\x1a\x81\x06f(\ +\x90\xff\x19\x90@+\xfc\x8b\xff\x13\x10\x8ez\xcb\x0c\xa4\ +\x93\x9e#\x09T\x82 \x08\x99\xee\xeb\x82\x17i\xba\xaf\ +\xeb\x9f\xe8*\xe0rd\xdcW\x16\x0b\xfc\xfc}\xd7L\ +\x8e\x0c#B\xaf\x90,q\x9e(Kh\xba:\x13\x04\ +A\x08\x17\x8b4\xdd\xd7\xddm\xc3\x85(\xcfXt\x9b\ +\xe3\xd6\x01\x00\x8e\xc8\xfc\xfc\xaa\xf7\x82\xaf?0\xc2\xa3\ +\xc3bl\xcfSsd\x9c\x08\x82 d\x8e\xa3i2\ +\x15\x00XQsD\xc6\xa2k\x11\xa6\xf9p\x94&\xd5\ +\xc0\xee\xbf}\x8e\xe9\xee\x17\x92\xd0r\xc3\xfb\xeb\xd2O\ +\xcaP\x11\x04A\xc8\x9c5Ig1\xb3\x7f[\x91\xb9\ +\xc40h\x9f\x8cDwE\x05b\x04\x9c\xed\x83\xdb\xfd\ +\xb2\x9f\xfb\xb9\x9b\xf7\x88\xf7\x0d\x87\x99\xf9\x91\x91u\xb0\ +e\xa8\x08\x82 d\xce\x1e\xb3\x91\x22\xc2\xeb\xd03\x99\ +*3\xd1\xdd\xb5\x8fu:\xd1\xb6\x07~\x11\x82\xfd\xdc\ +\xcd\xbf.\x14\xa2\xeb\x82\xe7\xc90\x11\x04A\xf0\x0f\x0f\ +X\x02-s\xa98\xb3\xf02\x01\x13}1 y\xbe\ +\xc6\xe8\x1b\xe2\xe8\x01\xd0\xa00\x84\x96?\xa8w\x9f\x97\ +!\x22\x08\x82\xe0\xa3xy\xbcDSO\xf7k\xdd\x16\ +\xdd\xd6I\xb1\x81\x00\xc6\xf9 L\x9cnq_\xf1\xf3\ +w\x15)s_\xdatd(\xe8\xba\x8f\x0fKhY\ +\x10\x04\xc1_\x1c\xd6\xd3\xd3\x05h\xafe\xe3\x11\xe9\x96\ +\xe8\x9a\x963\x99\x00\xc3\x07eZ\xdec\x0e\x1a\xfc\xfc\ +Y\x86G#\x11\x8e\xd0\xf2\x9fex\x08\x82 \xf8K\ +\xcav\xde\xd13\xbc\x0cs\xc8@kh\x97E\xb7\x1a\ + \x10.\xf2\xe99\x16g\xe1@\xd4\xb0\x1047\xd8\ +\xb0\xe2\x13\x09-\x0b\x82 \xf8M\xaf\xd9hd\xc6\xe7\ +:>;+\x1a\xd1e\xd1\xbd\xaa\xd2<\x98\x88\xf6\xf2\ +)\xc6\xbd\xd8\x7f\xcd\xe5\xbd\x02\xb7,\xf1\xdf\x87=\x85\ +\xb4\x0c\x0fA\x10\x84\xacx\x8dKu|n\xc5\xde>\ +]\x16]\x83\xa8\xc2\xaf\x07p\x99\xb3 \xba\xd8;\xf8\ +\xfdr\x7f;&\x09\x82 \x08[G\x13y\x99\x96\xcf\ +M4\xa4K\xa2[\x0d\x10\x81\xbf\xebSv/\xa7\x93\ +\xae\xef\xa2\xcb\xa0\xbd\x02\x0e-{i\xc7~J\x86\x85\ + \x08B\xd6<\x9b\xe5\x9a\x96\x83\x1c\xd8%\xd1\xbd\xaa\ +\xca<\x94@\x83}R\xa7\x8f\xfcN\xa2\xda8\x09}\ +\x89\xd0#`\xa3\xbeT:C\xcf\xfd\x06A\x10\x04M\ +<\xc6\x95z\x8a.\x0f\xea\x92\xe8\x1aL\xdf\xf5\xf1\xfe\ +\xbe{\xb9\x86e\xee\x15\x826~\x7f\x95!!\x08\x82\ +\x90=<\xf2V\xea\xe9\xa0S\xe7E\xb7\xda\xc7\xd0\xf2\ +f\xde\xf4]tY\x0d\x0c\xda\xa8\xb6\x87gdH\x08\ +\x82 d\x0f\x07\xeaSM\x13\xc0z\x7f^\x81\x92N\ +\x89\xeeU\xd3\xccC\x88\xfc\xab\xf4\xc4L\xef\xf9\xfd\x83\ +\x94\xe1\xed\x16p\x15\xaa\xc6\x97\x97:\x8beH\x08\x82\ + dQt\x93\xf6J]\x9f\xbdG\x8fh\x7f\xd5\xc9\ +\xac\xe5S|\xf5\x08\x95\xff)\xdf\xcc\x14\xa8\xe8\x82\xf9\ +\x85\xb1\x0b\xe0\xca\x90\x10\x04A@\xb6\xcf\xea6\xe9\xf8\ +\xecl\xba\xbb\x98\x9d\xf2\x22\x15\x9f\xe0WuE\x06\xb8\ +\xb9\xde^\x96\x85\x82\xd2\xfd\x03\xad\x00\xc9xN\x86C\ +a\xb0l<\x22\x03\x07\xc5v\x85r\x06\x11s1\xc1\ +\xe8I\xc4\x0a@\x94\xc0\xc5\xdb|\x16\x1e\xb9P\xd8\xb0\ +i]\xe6\xb52\x90\xf4\x986\x18P\x8d\x0e\xd2\x8d\x8d\ +@\xa3\xdf\x9d\xb6\x04!\xef!^\x03P\xa9n\x8f\xad\ +\xa0\xfau(\xba\xadSb\x83\x01\xf7\x1b>z\x84+\ +\xfb\xd5\xa19\x0bo!PO7\x05zVFB\xfe\ +\xb0`,\x8c\x83\xf6\xb1\xbeay\xd8\x1f\x84Q\x04\x0c\ +#\xf0@\x06\xf5'B\x7f\xc0\xdd\x94\xafN\xb4i)\ +\xb9u\x0e\xfb\xd6\xff\xa4\xda\xf8\x07\xda\xb4J3`\xa1\ +\x1f\x00\xbb\x0ai0\x1aA\xbc\x81\x18\xeb\x99h=\xc0\ +\x8d`42\xa8\x11\x84\x0d\xc4\xbc\x01\x84\x8d\x0cZ\xe7\ +\xb1\xb7\x81=\xda\xc0\x0ai\xc3V\x1b\xd9$\x87]r\ +\xd2Hn\xfc\xf2V\x9f\x7f\x86f)\xd2\x22\xe4\xad\xe6\ +\x82\xd6\x22\x04u\x19\xba\xbeV\xe0\x8e=]\xd3pN\ +\xf0\xd5\x83$Z\x9a\xa5\x1f\xb3\xdb\xa6\x090\x90\xf3\xb9\ +_\xdc\x96\xb0\xdf\x96\xa1\xa07\xeb'\xa2gI\xc4<\ +\x0fD\xe3A8\x92\x80\x9e\xdb\xa6\x1aRVb)\x04\ +D@\xd8\x05\xa0]\xb0\xa5c\x07\xe1\xab\xff\x0f|\xf9\ +m\x13\x00E\xea\xab\xea\xe7\x11\xde$\xfa\x0a\xb0`m\ +\xb9\xe6\x9eC\x00\xa7j\xcb\xf7\xd9\x0a\xe2z\x02-g\ +\xe6w\x98iQ\xca\xb6\x9f,\x9b\x85\xb5\xf2\xd6\x05h\ +Y \x03k\x89\xa0\xe3\xb1\xa1\x8e=](\x9c\xe0s\ +\xc2\xd1{\xd99\xae\x83>\xc1\xbd\x03\xfew\xf5\xb6\xee\ +\x8e\xa0\x11\xaf\xc4a\xee\xa7\xcc\xab\x01\xba\x9a\x80\x92<\ +,\x9bW\x04\xd0@\x00\x03\x89\xe8\x08\x22\xc4cQ\xcb\ +\xb5+\xf9\xe1\x94K\xbf,\x9da\xbf)_\x81\xa0\x99\ +\xec\xae\x0dCC\xb9n\x9c1\xee\xd5n\x22\xd5\x8a\x0a\ +\xc4\x00:\xc6\xe7~\x88K\xb3\xf4kz\x04\xb8|y\ +Q\x06\x81\x9e4\xc4\xd1c\x7fe=K\xa0_\xe6\xa3\ +\xe0\xb6\xe3]\x1bDT\x115\xf1\x9a\x1d7\xaf\xa9\xd6\ +q\x06\x13\x0a\xb8(\x15\xe9\x1a\xa5i\xff\xc8\xd0.\xbd\ +\x8c\xb1\x04\x14\xc3\xd7\x83\xcd\xfe\x8b\xee\xe6\x09#0\xd1\ +u\x5c\xfc[\x86\x81~|\x16GQ\x0f\xb2\x9e\x04p\ +\x14\x0avo\x0c\x06)\xba\xe9\xbaJs\xa6|\x11\x82\ +F{\xa3\xf5zF\x9d\xb8}\xd1UJ\x9d\xe8\xfbM\ +=\xf5\xb1\xdf\xd7\xbc<\x8e2\xa2\xae\xf7\x06\xf6)\x5c\ +n7&\x9dWd\x18\xe8G_e\xdd\x06\xc2\xe1b\ +\x09\x80\x88&\xd9U\xe6Ub\x09A\x93\xd5\xe2FM\ +]\xf4\xf6E\x97\x88\xc7\xfb}\xcfV\xcf^\xe5\xf75\ +\x8b\x10\xeb\x19\xdc\x8a\x0b\xaf\xf7\x9f\x8b\x16\x19\x05z\x91\ +\xac2\x8e&\xe0b\xb1\xc46_\xf3\x8d\xa9xd\x84\ +\xd8A\xd0`ot\xa3\xa6c\xact\xa7\xa2\x9b\x9c\x14\ +\xdd\x93@{\xfb\x9cq\xd6\xdas&\xd6\xf9\xfd3\x5c\ +\xe5\x06\x16Z\xf6\x80\x97e\x08\xe8E5@&\xab[\ +H\xf61w\x085+\xe5\xfdL,!\x84?{\x99\ +\x9a4Mj\xdc\xb9\xa7\xab,\xef[Y0\xd5*d\ +\xe5\xc01\x17\x07h\xc7\xd7e\x08\xe8\xc55\x95\xc6w\ +@8H,\xd1\xe6\xb4\xf0\xdd\x86x\xb0\xdd\xba\x04\xa1\ +\xe3(\xad\xdb\xa4\xe9ja\xe7\xa2K\xc4c\xb3p\xa0\ +9+\x85\xaa\x09[\x1dP\xcc1\x8e\xc7\x22\xba\x9a\xa1\ +\x88\xa6\x8a\x15v>\x96J8rl\x86'\x14\xa2b\ +I!\xab\xda\xe5R\xb3\x9ea\xf1\xf6\xf6t\xc9\xff\x8c\ +N\xce\x92\xa7\x1b\x94\xe82\xc3YO\x8e\x14\xc5\x80^\ +\x050\x00\x9a \x96hg<\x19|h\x86\x97(\x15\ ++\x0a\xc8j{?]\xf7t\xd1\xf6\x9en\xb2*6\ +\x84@{fa\xf3{Uv\xde\x00G\x02\xaa.\xf2\ +\x9e\xd4\xcd\xd5\x8b\xa2hd\x5c\x90\x91\x11M\xaa\xe6\x0c\ +\xcbh\x9c+*\x13+\x06\x1a{\xcd\xfbH\x83\x05\xd8\ +\x9a\x8e\xae\xe26EWy\xee\xb7\xb2t\xb6\xea\xb3\xbc\ +\xf2te?WGA9F\xac\xd0\xe1x\xdaC<\ +]\xad_`1\xf2\xbf8\x86\xad\xe9\x83\x9bj'\xfb\ +\xb9\xdf\xca\x92\xa1\xb2\xe3\xe9\xc2\xb0\x02\xfa\xb8\xdf\x91\x11\ +\x0e\xcd\xf6s\xb1\x9fX\xa1\xc3\xc5d\x8f\x0c\x176\xe2\ +\xe9\x06\xbbq\x98\xf7\x95\xd5\xd8!G\xd7U\xbf\xda\xc9\ +\x1fdKt\x1b\xf3\xe9\xc5{\x9eZ*#\x5c\xbbB\ +\xe9#\xc5\x0aY\x9f\xb4\xc5\xd3\x0d\xf8X\x8ax\xbaa\ +n\xef\xb7\x1d\xad\x93b\x03\xfd>\x9f\xfb\xd5Xv\xb3\ +\xb4\xf9\xed\x06\xf2\x02l\x8f\xdf\x93!\xae\x0f\x9fW\xa0\ +\x84\x08\xbd\xc5\x12\x9d9~.\xa2\xab\xb1$\xe5}x\ +\xd9\xb3\x92\x8e\xa6\xab\x85\x1d=]\xc3t\xb3V\x16\xcf\ +s\xb3\x93q\xc6\x01l\xaa3\xc3\xdb\xa0\xec\xf7e\x80\ +\xebC\x8f\x9e\xd1]\xc4\x0a\x9dJ\xbeHf\xb8\xba\x16\ +\xd1\x0dv{ \xffE\xd7\x86\x83|\xf1t\xa1p`\ +\xb6nfx*[\x07\x9a\x03\xf0ty\x85d.\xeb\ +\xb6\x9f\xeb\x15\x8b\x15:5k\xa72L\xc4*\x11#\ +\x06J,\xef\xc72o\xe9(\xad\xdd\xe8Rm\x0c\x98\ +\xd1\xd9\xba\x9bK\xc6\xc6\xfc\x89\xef\x93\x84\x96\xf5\xab\xd7\ +\xea\x8a\x15:\xb5'\x98\xcc\xcc\xce,\x9en\xb0o0\ +\xef\x8f\x0cQ\xac\xc8\xc8\x0bO\xb7\x1a \x10\xbe\x99\xad\ +\x9b%U\xeb\xc6,-\x1d\xd2\x01\x84\xe0>\x96\xc1\xad\ +\xdb\x12S%\xc5\x0a\x9dR\xcdT\x86\xab\xe0\x88\x181\ +d\x11\xcc|\x13]\x9b\xcd\xbc\xc8^\xbefrd\x18\ +\x01=\xb3\xb4\xcf\xc0\xcf\xacCSv\xb2\x88\xa95\x80\ +T\x93\x952\xb6\xf5b\xc5\xc7\xc9U\x0c\xb0X\xa2\xc3\ +\x89\xa1%\xc3\xf0rJ\x8c\x18\xe8\xaa\xa9\xa5\x00\xaa\xa6\ +\x99\xc8\x87\x15\x11Ext\x16\xf7\x89\x9a\xcf\xac\xcb8\ ++\xb2M\x0c\x18\x8d\x01\x84*Et5c\xd8SH\ +\x03X-\x96\xe8\xb8\x1bX\x86\x97H\x8b\x15\x83\xcc\x83\ +\xcb\xffV\xa3\xc4\xackx\xd9S\xdb\x09\xe3\xe8,\xae\ +\x9e\xb3V\xa0\xba\xa59\xb9>\xe7\x96co\x85\x0co\ +-%\xe5\x15\xb1Av=%\x06}.6\x0ctS\ +\xbe>\xdf\x7f\xa2mpD\xd7\xb1\xa5\xb6\xab\xd6s`\ +6\xcf'e\xeb\xd2\xbf\xbf\x1fM\x0c\xb8\xb9\xfd\xae\x0d\ +\xf1t\xf5\xcc\xcc}Q\x8c\xd0\xf1:6C#K\xbe\ +C\x90\xae\x14\xe3\x7f\xc8\xfbMk=\xcf\x22\x13c\xe3\ +\x16\xd1\x9dW\x01\xc5\xc0\x01\xd0\xb3)9\x83\xb1!\x97\ +\xf7ljJ\x8b\xe8j9!\xa9G\xc4\x0a\x1d\x92\xe9\ +\x19H\xa9\xd4\x16l\xae\xce;\x05 \xba\xa5\x9aF!\ +\x9a\xb6\x88\xee)=\x22\xc3\x09(\xd38\xc8\xdf\x98\xc3\ +=\xafT\x9f\xfb\xb1Q\x86\xb7~D\x13\xe9\xf7\x00H\ +\x889\x8b\xa4\x99\x9e\x13+\x04\x87\xcdx\xa9\x00\xf6\xad\ +K4\xcd\x97\xf8\xca\xd3\x85\x85}\xf4^\xdd\xd1\xda\x1c\ +\x9a\xae^\x86\xb6\xbe\xb8L\xbf\x14+d\x8f[\x13\xf6\ +\xeb\xcc\x92\xb0\x16\xcc\xa4\xce\x1f\xff:\xe1\xfc7\xff\xbd\ +y\xa5\xe9Yp\xfeJt\x15\xbc\x11\xd9V\xc5,\x97\ +\xb4\xfc4\x87\xc5\x03Dtu\xf6vk\xd3\x8f1C\ +\xbc1do\xbb\x87\x81\xe9b\x89@\xb8\xb3\xba\x10\x8e\ +\xc5\xb1\xb6U\xcf\xbe\x0a/\x831B\xef\x15\x1e}\x96\ +\xbb\xbb\x91\x88.t\x0f\x81\xda\xe71\xb0J,\x91\x1d\ +66\xd9\xb72\xf8\x13\xb1DN'\xc17\x96\x7f\xe2\ +\xdc\x85\x82H\xd0\xe6\x1e\x9aV\xc5\xfb\xca\xd3%\xa2}\ +4\x7f\x09\x9f\xe50\x84#\xa2\xab9%\x09\xac\xf6\xd2\ +4\x96\xc1\x1f\x885\xfc\xa7\xcf\xfd\xd8\x98\xf6\xe8T\xce\ +q\x82c\xe1&\xe5\xf3'\x0e\x99'o>\x8b^\x00\ +\xbf\x97\xfah\xfa\xe0_y\xba\x0c\xcd=]\xd0\xa79\ +\xbc\xdd:\x19\xe6\xfa\x13\xbd'\xbd4\xe99\x07{\x8c\ +?p M3\xf2}ac\xbf\x96b\x1c\xce\xe0w\ +\xc5\x1aY\xeb(\xc4\x0c\xfeS\x0a\xce\xe8XM\xf2\xe3\ +\x02J\xd1\xee\xa3\xa9s\xb8\xd1\x04\x80\xa6*\xecB@\ +y\x96\xbf\x0e3\xcb\xc5*>S\xa4r\x15\x22\x90\xee\ +ByBY\x02\xf5\x80}YrJ\xf4\x0eez\x17\ +(\xf0\x19 \xda\xb7\x8b\x13\xdf*b\xac`\xf0\x0a\x06\ +\xad \xe6O\x99h\x8d\x07o\x95Cj\x15\xa7\xec5\ +e\xb3\xb0%\xd1oE\x05b\xe5\xbd\xd1\x8b\x949\xc8\ +d\xda\x8f\x88\xc7\x80\xe9t\xd2t\x22i\x8f\xd2\x84\xfd\ +\xd6\xb2\xf1\xd8o\x8f!\xe64bTu\xd5\xb6\xdbe\ +~\xae\x03\xb8\x15@RS\xa10\xc1T\x06B\x09\xa1\ +\xfb\xf5\xa9\x19H\x12\xe3Uf~\xc2s\xd5#\xd1\x99\ +\xf6\xbb\x85Wu\x8b\xfb\x80\x08\x1av\xaan4\x01\xc0\ +p\xcc\x110\xb3\xfe\xc1e\xf58\x129\xc6\xc7\xb08\ +W\xcbK\x11\xdd<#63\xf5\x01\x80j\x00\xd5\xeb\ +/F\xaf\xa8c~\xcd \x1aF\xe0R\xa8\xcd\xdf\xae\ +\x87$\x1353\xd1Z\xcf\xf1\xd6*C\xad^\x95J\ +\xaf\xd8cv{\xb5\x86w\xac\xd92\xa8\x0eI\x00\xab\ +\x01g5\x80\xff\x02\x98\xf1v\x05.\x1d\xda+2A\ +)\xeff\x22\x1a\x8e\xbc+\xbf\xe9\xdc\x05\xe0\xae\xa6\xa9\ +\xe8g\x19\x91C\x14\xbc\xfd\x18\xd4\x9b\xc0=\xb1\xa9\xff\ +\xeb\x06\x06%\x014\x12\xf3\x17\x0cZ\xe32\xafV\x9e\ +\xfa\xbc\xd5M\xaf\xea5\x1b\x8d\xc8\xafd3\xfa\xe1\x14\ +\xf4\xb2\x181\xc3\x88\x94\xba\xca\xeb\xa1<\xeeE\x86Q\ +F\xcceD\x5c\xb4U\xbe\x8a\x07B\xa3\xe7z\x0d \ +\xf3\xa3\xc7\xd6\xa5\x96g\xab\xa4\xaeF\xb2\xdbW\xcf\xa6\ ++\xb4\x9a\x00 \x1d\xb7\xa6(\x85\x19\xd9\xbe\xe1\xaaz\ +\xbbh\xf3\x84\xe3;\xcb\xc6#\xb2\xc7\x10\xab\x85\x90\xfd\ +>\x8b\x1e\xf0\x8bH\x8d\xfd3\x91*!\x1b\xdf\xf1\x90\ +!\xd6u\x04\xfc\x94\x90\xdd\x8c\xffvr\x16fY\xb5\ +\xcedy\x1bBXq*\xcd% \x1a\x05\xed\xceP\ +\xf3Qj\xb3\x17\x9a\x93\xfd\xdc\xde=\xd1#\xab\xabi\ +\xceM\xf99b\x16OW\xc8\xdaw\xbciA\xc7U\ +\xb9.m*\x08\x1a\xe5\xf0\xf4\xd3\xf1\xb9\x95\xa7V\xab\ +\xcde\xc3\xf6\xc8\xc5\x0d-#\x92\xe54oZ\x96\xa3\ +\xbd\x19\xe9\xcb*dw\xac\xd48\x09\x80\xaf\x13K\x08\ +\xc2\xb6\xbc]\x01\x0b\x80\x96\xa2\xdb\xd4\x92\xfeRti\ +@NB\x02nv\xcfV1\xb0,G\x9b\xe1\xd2\xba\ +L\xc8:\x8f\xd4;\xb7\xa2\x00J\xfa\x09BW\xd8\xbb\ +Ol\x00\x11\x14\xf4\xcb4o\xees\xff\xe62\x90L\ +\x9c\x13\xd15L.\xcbr\xa1\xef\x5cy\xbaJ>}\ +!\xdb\x9cY\x07\xcfa\xef\x1a\xb1\x84 l-^\xce\ +\xee\x9a\x16/Y\x05\x00\xaa\x1a \x80v\xcb\x89V\xb9\ +*\xab\x9e\xae\x9b\xab\xee\x1a\x0c\x92O_\xc8\x05\xb1\x84\ +\xbb\x80\x0b\xa0k\x8c t\xday\xf3h \xb4<\xa3\ +K\xab\x01@\xfdx\x12\xfa\x10\x10\xcb\x87\xd2]6\xbb\ +\xaf\xe5\xc8\xd3\x15\xd1\x15rY\xe2\xb4N\xac \x08[\ +\x22\x9a\x035mF\xb1\xc9\xd3%\xc3\xda-\x87\xc6\xea\ +\x9b\xedB\x07\x0c^)\xe1e!\x9fp\xc1\xcf\x8a\x15\ +\x04a\xcbY\xd7\xc1\x9af\x5c\xaf\x01\x00e\x92\xb7{\ +\x0e\x8d50\x07\xe5\xa2^\x97\xf0\xb2\x90O\xd8\xad\xce\ +\xdbb\x05A\xd8\xd2Kw\xa8\xa6% ?\x01\x00\xa5\ +\x0c\x95KOwP\x0e2\xc4r\x11b\x8e\xca\xa7/\ +\xe4\x8a\x1es\xd0\xc0,\xed$\x05a\xf3,\xaf\xa5\xe8\ +z\xac\xde\xdf\x14^\xe6\xdcd.oZ\xa1d\xdf\xd3\ +e/\xfb\x9e.\x83J\xe5\xc3\x17r\xbbJ\xc6R\xb1\ +\x82P\xe8,\x18\x0b\x03D{\xea\xf8\xec\xb6\xcb\x9bD\ +\x97A\xfds\xd8~*\xeb\xa2\xeb9\xea\xe5\x1c\xfc\x94\ +2\xf9\xfc\x85\xdc&a\x88\xa7+\x08\x87\xec\x19\x1d\x9c\ +I\xb3\x88 \xbbA5\xa5\xec\x0f6y\xba\xc4\xa59\ +\x5c\xae\x0f\x98W\x91\xdd$\xa4\xa2Y\xc9\x95\x0c^\x9e\ +\xe50\xb9x\xbaB\xae\x87\xad\x94\x1e\x15\x04\xcb\x19\xaa\ +\xe9\xf8\xfd\xb4\xff\x5c\xb4\x00\x80\x02P\x9a\xbb=]X\ +'\x95a\xd7\x1c,+\x16f\xf9\x0e\x22\xbaB\xae\x91\ +\xd2\xa3B\xc1c\x10}MO\xcd\xfd\xaaD\xb1\x09P\ +qNo\x1e1\x07\x02\xce\xaa,\xdfe!\x80\xf3\xb3\ +\xb8|(\xcb\xd7\xfd\x92C\xf7\x8a\xec\xcd\x86\xbb\x97A\ +\xb4\x17\x80\x9e\x0c\xea\x09B\x0f\x02\x1b\x0cZ\x0f\x06\x13\ +\xb8\x05\x0a\xad\x00\x1a\xd9\xa3f\x06\xa5\x98\xdc\xf5 \xb8\ +\x1e\xd3\x06\x06\xd9\x06\xab&\x9d~\xbb\xe3y%Jq\ +\x91\x22\xeeAd\x94\x92\xc7E\xa4\xb8\x0c\x8c2\xd0v\ +\x8d/\x19\x1b<\xa8\xd5.y+?\xaaw^\x1fY\ +\x07;\x07\x8f\x98\x92)W\x100RSO\xf7\x83-\ +\xa2K\x8c\x92\x5c\x1e\x801X\x0d\xc4\xa6\x1e\xa2\xd9\x9b\ +\x9d\x88\x16\xc6\xb2\x9b\xd4R\x9e/_\xf0\xfa\x89\xe8Y\ +\x121\xcf\x01a<@G\x11q/l\xb5\x03@\xd8\ +\xae\x22\x08m\xf7o\xd5\xe6\x1d\x8b/\xff\x9b/\xff\x88\ +\xf4j\xf7i\xaa/\x1f\x9e6\xfd\x9e/\xff\xb9\xad\xb1\ +A\x80\x01\x86\x01\xc2\xf0r\xab\xd5\xa9\xc4+\x0c~4\ +\xc9\xce\xec\xb2D\xd6\xf6^c\x10\x04\x14za\x0c\xda\ +W\xd3\x07\x7f\xff\xcb\xff\xab@(\xc9\xe5\xbd\x15\xbc\xac\ +\xb7\x11\xbc\xad\xc6~\x87\x81\x86,&\x84\xf5\xd3\xfd\xe3\ +\x9dW\x01e\xc7\xcd\x1f\x95\xc4\xac\x15\xa4\xe8n\x22:\ +\x99\x08\xbddXwy\x01V\x04\xc2\x91Dt[\x8c\ +\xac\x0f\xedJ\xf3\x87\xd5\xc8\xc22\x96P,\xd6\x16\x0a\ +\x99j\x80\x18\xd8W\xe7\xe3B\x9b\xb2\x97\x99K\x90g\ +\xe1\x81\xeaM\xc9b\xcfe1>\xbf\x0b4\x0f#\x9f\ +\xd6\xc7|\x80\x14\xfd\x86$\x13\xdbO\x01\xeeAD\xbf\ +\xbd\xae\xca|\xf0\x95\xf8v!\xe9\xcc\xaf.\xa2+\x14\ +4WW\xc5\x06\x13\xa1\x07\xf4<.\xb440O\x97\ +r\x14\x93g\x8f\xfe\x96\xc5\xc9\xb5t\xf5\x05\xfaz\x1e\ +\x87\x8d\xb0n \xd0Y2\x8c\xb3\x16\x02;k\x14Y\ +\xbf\xf6\xb9\x0a\x8f,\x8e\x84\x02\x1fW\xf6\xbez\x96\x7f\ +Dz\xd5\xa7\xf6{_\x89.SI\x8e\xebO\xee\xb3\ +`,\x0cd=1\xc6\xfc\x1bo\xdal\xcc\x0a\xbd\xa2\ +Q-C\xcc\xa9\xca\xc8\xd7\x08\xf8\x89\x0c\xe1\xac{\xbd\ +?h\xa92\x0f\xf2qK\xa3\xafXU\xd0\x8d\x868\ +zl\x9c\x04_\xbe]\xc5\xf4MM\x1b4\xfco\xd8\ +S_\xf5`W\xb9>\xfeB\x84\xa2CGD\xb2^\ +Q\xa4xF\xeb\xa7\x04~+[\xd7\xf7LW\xcb\x10\ +\xb3\x82\xf7\x03\x22\xbfC\x9fB\x1b\x11\x1d\xb2\xd8\xc7\xc5\ +\x0d\xe9\xbd\xa5!\x14&ed\xce.\x8a\x9a\x97\xfa4\ +\x08\xc6h\xea\xe9\xbe\xb6\xed\x1c\x0cX\x01<\xc5\xc8\xdc\ +l^\xd3S\xc8^\x16\xf6nz\x0e\x03:Y\xa6\x82\ +\x9c\xad0O^?\x11=\xe1G\xe9;\x96$7A\ +/\x92S\xa2{\x83\xe8d\x97\x95_\xce\xcfh\xe8\xa9\ +\xbaol+\xba\x94\xbd\x10\xecN\xbd-\xf2\xf6\xcd\x8d\ +\xe8zOe\xd1c\xd4\xae\xbdTrjt\x0f\x22\xf4\ +\x97\xe9 g\xden\xac8b\x9d\x90\xf1L\xb3\x0f\xca\ +I\xdaI\x0a\x9a\xa1,\xef\xfb\x9bO\xd7e,\xba\xad\ +\xf1\xd8 ]\xe7.\x97\xf8\xf5m\xb5\x83s/\xba\xa0\ +\xdcx\xbao\xc1]\xc8\xc0\xda,\xedMk'\xbaJ\ +ycd*\xc8\xf9\xb7\xbe\x7f\xe6\x17\xb1\xfa\x89!\x05\ +\x9dh\x9c\x82\xde\xc4\x98\xc4\x8c\xd6\x7f/M\xbf\x9f\xf9\ +~\xaew\x90\xae\xb6H\xb7\xb8K\x02\xf7t\x89\xf1\x8d\ +\x5c\xdcgt\x02\x0e\x98\x1f\xce\xd2\xe6\xf8\x10\x0d7\xf4\ +\x07\xcat\x90\xf3\x84\xaaQ\x99^\xc3\x84'\xa2+h\ +E\xb1iV\x12\xa1\x94\x88\xff7v\x01\xdc\x8c\xc7\x91\ +\xe2\x83\xf4\x8c,\xf3'=\xe6l[3B\x01\xb9\x17\ +]\x06}\xdd\x8f\xbd\xaeN\xb9\xf6\xcc\x7f\xce\xd2\xb1\x90\ +\xc1\xfa\x95\xff\xa4>2\x1d\xe4z\x81\x99\xf9BG\xb9\ +JDW\xd0\x86e\xe3\x11\x01\xf0\xbd\xcd\xdd\xb1\xde\x84\ +/[\x928BSs,\xd9qk2\x80\x9a\xaeD\ +P\xb1\xa8q\x08r\x13b~>\x1b!f&\x0c\xd1\ +0\xd4)\xc98\xb9\xcf\x5c\xec\x9d\xf9xa\x11]A\ +\x1b\x86\x0c\xb6\xce\x22\xa2\xdd7\x0f\x80\x8c\xf7sWT\ + \xc6\x0c==]\xde\xb1\xbf\xbb\x026\xb5\x1bB\xce\ +\x8f\xae\xa8\xc3\x91\xab\x103\xf8\x91,\xcc\xa6\xbb\xae\xa8\ +\x90z\xb8B\x87\x92\xd9\xd3\x87\xc8\x90\x88\xae\x00]J\ +5*\xf0\x8f\xbe\xfcg\x17\xbc$\xd3k\xee\xd2\xc7<\ +\x98\x08Q=\x17\xdd\xf4J\x1b\xa2\x1bL\x9fN\x02\x0e\ +\xcf\xd5\xbd\x5c\xe6y\xd9\xf0\xd6{\xf7\xb6t\xeb\xed\xe8\ +\xca\xb4\x90\xf3\x0f\xdd\x15OW(\x14\xae\x89GN\x06\ +\xd1\xfe\x9bC\xcbNs\xb3\xfbR\xa6\xd74\x80#5\ +\x8drq:\x9d~14\x9e.\x801\xfe\xd7\xa7m\ +\x9b\xc7\x1a\xdc\xe7\x18\xfc\x89\xdf\xd7\xb5\x88Fh\xf6\x15\ +82-\xe4\xdc\xe6~l\xdf\x88\xe8\x0aZx\xb9\x86\ +\xf2~\xbe\x95c\xf5j\x9f\xfb\xb1\xd1\x87\xbd\xbc#\xf5\ +\x1c\xfb\xfcn\xd9\xac\x1d\xb76\x1515\x07\x94\xd5Y\ +\xfau2\xf7\xcb\xc5\xbd\xce\xac\x83\xc7\xa0\xd9\xf0\xff\xbc\ +\xf1\x08\xcd>\x83V\x99\x1ar\x9eI\x95\xce|\xacP\ +\xb9\x18R\x08\xbd\x97[\x199\x1d\xa0-s\xbaG\xf8\ +'\xfcI\xca:LS\x93,j\xfb\xf8S\x16[\xe0\ +u\xe8)r\xee\x8c\xe99j\x163<\x9f\xbd\x98\xe1\ +z\x1d_a\x11\xdd\xdc\x93\xf2a\xc5\x5c\x22f\x14\x10\ +\xf2V\xa1\x06\xbc\xff\xdb\xf6\xb3\xf5^\xc8\xf4\xba\x83\x06\ +\x19\x87\x11\xe5\xb6T\xb1\x8f\xa7E\x16\xb6\x9d\xcf\x04\xae\ +Gp\x85\x80s\xb6\xaf\x1b\x9b\x91Z\x0e\xe09\x7fE\ +\x8c\xf6\xd1\xea+\xf0\x02\xdbJ@\x01\x87\x97\xd3>\xec\ +\x0dI[?!\xd4\x9cZn\x9d\x09\xa2Q_\x09.\ +\xbcV\xe5.\xcc\xbc\xa0\x8f:N\xdb\xa1\xcf\xb4\x13O\ +\x97\xa8>\xc0\xa5\xc0\xd1\xf3*rW\xde\x8e\x19\xf7\xf8\ +|\xbd\xe1\x9a%\xf5\x88\xa7\x9b\xfbm\x94V\x1f\xde\x9b\ +x\xba\x02\xc2\xdc\x9f\x9b\xc0\xff\xb7]!\x9e%\xbd\xee\ +\xc6\xfa\xcc\xfd2>^\xd3$\xaa5\xd1\xda\xb6+q\ +)\x15\xa0\xa7K\x84~\x13\xca\xcd\x9c\x95&\x5c\xb3\xce\ +~\xc4\xcf3\xbbD\xe8\xdd:)6P\xa3\x95\x97\x88\ +n\xee\xbf\xf2\x16?\xce\x1d\x88\x1d\x85\xb0r\xd8>\xd6\ +9D\xf4\xb5\xad\xff\x9dG\x94\xf1~n\xf3D\xec\xca\ +\xa0\x034us\x17\xee\xbc\xa4%\xe3\xf3 \x9f\xcd`\ +:1W\xf7\x1aT\x87$3\x12~^SE\xec\xfd\ +Q@\xc7W\x84.GC\x9a}xo\xc9\x1c\x7f'\ +\x92\xe5.\xa0\xb3\x89N\xc4\xfc\xb3\x1d\xbf{\xef\xe9L\ +\xafm\xc5\xaco\x13\xb4]p.\xda\xa9fx\x9eZ\ +\x19\xe4\x93)\xe2\x93ry?\x87\xcc\xbb\x18\x99\xef\xb3\ +}\xf5\xfc\xb4\xbf\x0c=\xa1\x1d\xd9m\xf1\xe1L{2\ +\xc7\x11\x91\xb4\xbc7\xa13\xec1\xc8\xbc\x9c\x88\x86n\ +\xb7\xd0\xdc\xb0*\xe5>\xe7C\x09\xd5\x13u\xb5\x8b\xed\ +\xe1_;\xd5\x0c\xc7\xe0\x15\x01gx\xed\x97\xcb\x10m\ +qM\xebg\xf0\xb3X\x06CDWh\x0f\x1f\xc2\xcb\ +9>\xd6\xc7h\x92\xd7&tD\xd3T\xf4\x83\xa2\xeb\ +\xdb\xf8\x80\x9e\xdccvfY\xfb\xcb\xc6#\x02\xa2\xf1\ +\x9aF\xb7\xea\x9fX\xef\xbc\xda\x8e\xa7k\xaf\x08\xb8\xe7\ +(\x99\x96\x93So7\xed\xd2\xed\xe1j\xdd&\xe41\ +\x8e\x0f\x9dJ>\xcc\xf1\xd1\xb2/\xe4\xb5\x09\x1d\x115\ +\xcc_\x12vl\x5c\xc3L\x19\x97\xdd\x1d<\xd88\xa6\ +\xadkk\x22\xbb\xff8\xb3n\xe7\xc7SUY\x02\xf5\ +\x8c\x80\x8f\x92\x10\xe54\x8cP2\xc3~\x15\xbcs\xf7\ +\xbf\x8b\x0f\xbfWC\x1c=d\x08\x0aYL8\x5c\x9a\ +\xe3\xf0\xf2j\xb1\xba\xd0\x1e\xcd\x95\xd6(\x10Mi\xc3\ +\xcbK5\xc1\xfe[\xe6\xdf\xbc:YW\xdb0\xd1\xdf\ +\xd1nF\xf6\xa6\xd8\xf9\x87\x08\xd6\xdd\x1d\xf7Y\x1cE\ +\xb9\xbc\xa5\xeb\xd1\xad~y\xea\xc50\xbe)\xc3P\xc8\ +\x16\x9eG9\x15]\x1bxG\xac.\xb4G\x04\xb8\x9d\ +\x00\xa3\x8d\x09\xf1\xd9\xf2\x046 \xc3B\x1b\xc4|\xb2\ +\xae\xf5\x96\x1d\x98Ow(\xba\x0c,\x0b8\xc4\x5c\xdc\ +\x87\x22\xdf\xce\xe5=o\x9e\x9e~\x02\xcc\x8b\xfd\xb8\x96\ +\x01:T\x86\xa1\x90\xbd.\x15\xc6\xc2\x1cN\x1a\xe9/\ +\xd2\xb6\x88\xae\xb0SR\xf1\xc8)D\x18\xd7\xe6\xf7\xe3\ +a~\xa6\xd7\x9fPn\x8e!\xa2\x01\xd0\xb2\xbf\x09\xbf\ +U\x5c\xd3\xfaY'D\x97\x96\x05\xfd\xb0\x0a\xde\xf9\xc8\ +mqnv\xa1~\xe1\x93\xa5\x0f\x91\xa1(d\x8b\xa2\ +Dr\x05\x98_\xcb\x91\xea>\x9fi\x12\x8c\x90\xbf,\ +\x9f\x88\xa8\x22\xef\xb6\x9d$\x109v\xda~\xcc\x07'\ +\xe6,]\xed\xe3q\xfb\xa1\xe5-\xa2\x0b\xce\xed\x9e\xd1\ +N\x82\xf8\x13\xd6_\x9c\xdb&\xeb7\xd7\xa6\x1f\xf7g\ +2#\x11]!\xdb\x19\x91\x89\x1c5hxX\xac-\ +\xec\x8c\x01Q\xeb\xba\xed\x8f\x08m\xc5\xd3%\xb3\xb1\x06\ +\x99V\xb7\x22h,\xba\x1d\x9fOV\x00\xe0)~?\ +x\xb7\x1c\xb1\x126\xcf\xcc\xb9\xb7K\x99{\xbbD\xe8\ +\x97\x9c\x12\xdd[\x86\xa4\x905\x0fc\x85s\x0f\x83?\ +\xc8\xae\xb0\xf3g\xf5\xcd\xce}bm\xa1-RS\x22\ +\xfb\x10p\xe5\xceK\xbb\xd3\xacL\xefq\xc8pc\x1c\ +\x01\xbbi\xba0nm@\xc7\xf5\xa67\x89n\xdaY\ +\x8aPtA\xa3\x0bs}\xcf\x9bk\xd2\x8f\xfa\xe1\xed\ +*\xcb\x93}]!k\x0c{\x0ai\xd7\xe5J\xdf;\ +em\x9buy}\xff\xb9\xd2\x14C@\xdb]\x84L\ +\x9eI\x84\xe8Nr\x01\xd6~\xf2I\xfa\xf1L\xefc\ +\x10\x9d\xa3\xb1\x99\x16\x0cHt\x5ck]\x01\xc0\xaf\xef\ +\xc1j\x86\x0f\xcd\x863\x1e\xf48,\xd7\x1ec5\xc0\ +\x8e\xc7\xd7\xfa\xb0\x17v\x98\x0cM!\x9b\xc4\xa6\xbb\xcf\ +\x82\xf9R\x06\x18\xbe\x87\xc5pW\xa4\xc6\x9e%V\x16\ +\xda\xe2\xb4\xdef\x15h\xe7s\x1c\x03\xf7\x0f{*\xb3\ +J\x7f+*\x10\x03\xd1\xe9\xfaZ\x89\x1f\xed\x5c\xfe\xd2\ +f\xe1!\xf0\xb2\x10\x84\x98I\x99\xde\x05\x01Lf\x7f\ +c\xc63\x19\x16\x148Z\x86\xa6\x90m\xac\x84S\xe3\ +1\x9d\xc1\x8cz\xff:>\xe2\x8f/\xbeg\x7f_\xac\ ++\xb4E\xcb\xd4\xa2\xddAts{\x7f\xc7v\x91\xf1\ +\x82m\xd7>\xd6\x04]\x0bb0\xe0\xa6S\xce\xfcN\ +\x8b\xee\xe6x\xf4\xd2\x90\xa4\x5c_P\x1d@\x91\xeb4\ +\xe3\xcaLBw\x04\xda\xa7ej\xd1\xee2D\x85l\ +\x13\xadM?\x92L\xdb\xfbx\x8c\x9b2jX\xc2X\ +\xe4\xb8\xde\xb1\x91\x1a\xfb\xd2\xb1\x0b\xa4\x19\x86\xb0\x93\x85\ +\x9ea\xff\x81\xa8\xbd\x02@\xfcj\xc9t{I\xe6\xdb\ +\x8b\x98\xaa\xab\x8d\x08X\xd4\xd9$2\xb5\xd5\x7f\xf5f\ +8\xaa\xef\xd0^WU\x9aG\xe4\xfa\xbe%\x09\xfb5\ +\x80\x1f\xc8\xe4\x1a\xa6\xe1\x8c\x93!*\xe4\x82\xb2YX\ +\x1b\xa9\xb5\xaf[\xf4\x9e=\xc0v\xf8H\xf6\xf8\xc7\x0c\ +\x9e\xcd\x8c\xbf\x82\xf1\x12\x98\x17\x83y13\xff\x8f\xc1\ +\x1fl\xfa\xff\xf8\xbb\x07\xd40\xf3e\xaeK\xc3\xcdZ\ +\xfb\x88\xd8t\xf7Y\xb1\xa6\xb03R\xd3\x22\xa7\x13\xd1\ +\xa9\x1d$\x10e\xec\xe5&\xabbC\x00\x1c\x0bmO\ +\x17\xf0_:\xad\x13\xd8\xb2\xa7\xc3o\x18\x14\x8e.J\ +&P\x05\xf8U\xa6\xb1\xf3\xb8d^o\xc0\xfd.\x01\ +\xb1n\x86\x98\xc7\x01\x98+CU\xc8\x15c\x17\xc0\xc5\ +\x02g!\x80\x85b\x0d\xc1O\x9a'bW\xa5\xf8\xee\ +\x0e\xc2\xaa\x1b\x9bU\xe6\x19\xef\x8a\xddID[9\x81\ +\xbaU\xa1J\x9b\x0fw\xb6\xcc\xfa\x96\x1f\xe99\xd6\x1b\ +!*6\xfb\xdd\xe68\xfa\xe7\xfa\xb6\xb1\x9a\xe4\xc7\xcc\ +\xb8#\x83K\x88\xa7+\x08\x82\xf6T\x03\x14\x89Z3\ +\x89\xd0\xaf\x03\xc1\xb9\xa7\xd7\xddX\x8f\x8c\xcf\xe6\xf2$\ +\xe8\x1bZ~\xb9hVre\xe7\x0bAm\xe6\x96\x99\ +\xc9\x15\xcc\x99\x19\xcf\xc7\x1f\x11\x89\xc0\x8c\x07q\xef\x0d\ +\xb6}#\x83Wvs_wp\xaa22T\x86\xac\ + \x08:s]\xdc\xbcE\xafK\xc3\x00\x00 \x00I\ +DAT\x98\x08'v\x94<\xe4\xa5\xd4\x9d\x99\xde\xeb\ +\xd0\x11\xc6q\x04\x1a\xac\xab\xad\x18\x9d\x0f-o#\xba\ +\xd5\x00\x13\xc2\xb1\xaf\xbbY\xc1*\xdf\xae\x80\x95\xeb\xdb\ +\xf6\xbd\x07M\xec\xd2O\xd0\xfdr\x96'\xc8\x90\x15\x04\ +\x01\x1a\x17\xc1\x80\xeaDC\x18\xe6\xf9\xb1Y\xa9\x8f\x90\ +q\x09`u\xa9\xce\xf6r=\xa3{\xa2\x0b\x00\x1e\xf0\ +Fx\x22\xcc4`X\x1f\xeb\xdc \xee\x1d\x99n\xff\ +\x89\x19\xcfu\xf3\xc9O\x94a+\x08\x82\x8e\xbc]\x01\ +\xcb0\xbd\xfb\x08(\xee\xe8\xef:\x84\xdff,\xf0\x93\ +#\xc3\x01\x8c\x87\xbe\x19T\xaf\xc5\x12\xa9\x0f\xbb-\xba\ +\x04~\x13\xe1\xea\xd8p\xf5\xbc\x8a`6\xd7\xd9\xc3e\ +\x0c\xd8\xddx\xe8\xb1\xf5\xe7\xa1L\x86\xaf \x08\xba1\ +\xac\x8f\xf5s\x10\x1d\xd8\x89\x98\xea\x7f\x8bj\x9c\x173\ +\x9e\xe3#\xfc}]\x13\xa86\x17tz\xb0\xeb\x9e\xfd\ +\xd6+\x17/<\x9e\xee\x97g_O\xe9\x1591 \ +o\xf7\x1df\xfc\xae;\xfb\xd1\xa5\xa5\x91ce\xf8\x0a\ +\x82\xa0\x13\xad\xd3\xcc\xa3\xda\xab\xad\x8cm+\x98\xdd\x96\ +\xe9\xfd\xd6_\x8c^\x04\x5c\xa4\xef^.\x5c\x1b\xd6\xfd\ +\x19\x89\xee:r^\xef\x96w\x97E\x0c\xc5W\x05u\ +\xef\x86\x16\xfb\xff\xbaSd^\xf6u\x05A\x80f\xc7\ +\x83L\x85\x07\xdblL\xbf\xe3\x99\xd4\x0f\xdf\x80\x9dq\ +7\xaa\x126\xa7\x11P\x02}U\xf7\x99\x8ez\xe7v\ +(\xba\x03\x12h%\xe67B\x96\x8f}xr\x9aq\ +L\x10\xb7\xee?\x17-.xZ7j\xdd\x9eP\x1d\ +@U-A\x10\x84\xae\xf2J\x1cf$j=\xd8\xd9\ +\xc6\xf1\xcc\xf4\xcb\xd1\x89N\x1eJm\xe7\x9e`\x5c\xaa\ +y\xbb\xcd{\xd1\xad\xc4\xb1\x1d\xdb3\xbd\x14\xb6\x1fg\ +*\x9f\x9a\xcd\xa3;gw\xdd\xe7\xbb\xda\xcb\x94\x88\x06\ +\x5cUeJ\xd7!A\x10B\xcf(\xb2n$\xc2\xd1\ +\x9d\xac\xbc\xf4\xfe\x1b\xb03.\x861\x0a\xd6\xe9D4\ +Dc\xc1\xdd\xd0\xd0j?\x0a?D\x17\xc0\x7f\x10\xbe\ +\xd3\xc7\x87%\xab\x8c\xe3\x82\xba}\x13\xdbW2\xf3\x8a\ +\xae\xfc7\x06S\x85\x0cgA\x10\x10\xee2\x8f\x13\x88\ +pE\xe7#\xaa\xf4\x8bL\xbd\x5c\x00P\x04\xcd\x1bl\ +\xf0\xbc\xee\xb6\xc1T;f\xed\x86\xcf\xd3\xddT\x1a2\ +8o\xb7<\x81\x0d\x1esU\x173\xaf\xcf\xa8\x96\x10\ +\xb3 \x08a\x15\xdc\xca\xc8Pe\xf0\x5c\xea\xe4<\xc5\ +\xcc\xef\xbd\xf8\x9e\xfd\x002O\xd8:\xb4\xbd6\x81:\ +\xe0\x00s\xba\x7f.y;n\x9e\x9e~\x9f\x81\xb5!\ +\xfc\x9d\x07\xa7\xe2F`\x09J\xd1\x84\xfb\xa4\xc7\xa8\xed\ +B\x88y\xd0U\xd3\xccCdh\x0b\x82\x106VT\ + f\xc0\x9b\xd7\x95VzL\xf4\x0b?\xbaQ\x99\x8a\ +~\xaa\xb5\x8f\x0b^~K\xad\xb3\xd07\xd1\xad\xde\x94\ +4\xf4r\x18\x7f\xac\xa1\xe8\xa6\xa0\xce\xed\x02\xc0Z\xb6\ +\x7f\x08\xe6\xb7\xbb\xf0\xbc\x12b\x16\x04!t\xf4/7\ +\x13 :\xa0\x0bB\xf3\xce\x8b\xef\xda\x7f\xca\xf4\xbe-\ +\x95\xe6\x81D\x1a\x17\xc3\xd8\x94Hvou\xd7\x93k\ +\xdb\xdd\xd3\x05\x98_\x0a\xe7\xcf\xa5\xfdN-\xb7&\x06\ +u\xf7\x01\x09\xb4&\x99\xcefFk'C\xcc\xdf\x0d\ +r\x91 \x08\x82\xb0=v\x95y-\x11]\xd0\xb5b\ +A\xf4s?\xbc\x5c\x0b\xb8^o/\x17\xae\xeb\x18\xf7\ + \xa3\xb2\x97h\xab\xc5\x1d/\x0coG\x07\xfe\xe5\xe7\ +\x15\xc1\x9d\xed*M\xd8o\x01\xfc\xe3\xce\x86\x98O\xee\ +\x15\x5c\x02\x98 \x08\xc2\xd6\xa4\xab\xac\x0a\x80n\xe8\xa2\ +\xd2\xbctS\xc2\xae\xcb\xf4\xde\xcd\x95\xd6(\x10\x9d\xa2\ +\xb7\x05\xf9\x89\xa2\x99\xc9O|\x17\xdd\x15\x1f\xbb\x8b\x18\ +\xdd\xcb\xcc\xcaEM\xe6\xf2>\xe6O\x82|\x06\xab\xd6\ +\xb9\x9b\x99\xe7\xa3s!\xe6\x8be\xa8\x0b\x82\x104-\ +\x95\xe6\x81\x04\xcc\xa6.$x2\xc06\xf3O\xaa3\ +\x08\xa7~I\x04|=i\x9e\x5c\xeaz|\x172n\ +\xf0\xd0\x06\xc3\x9eB\x1a\xc0\xa2\xf0\xba\xf8tEKU\ +\xd1\x80@?`\xc7\x99\xcc\xcc\xefwb\x95pb\xb2\ +*6D\x86\xbc \x08A\xd1:%6\xd8\x02=\xd1\ +\x99F\x06\xdb\xcd\xb6\x0f\x15%\x9cE>dJ\x7f\x0d\ +\xa03\xf4\xde\xcb\xe5\xa5\xbfJ\xb8\xcfdEt7\xdf\ +\xe2Y\x84\xb7ip\x89\xc5\xf6\xaf\x82|\x86\x9e3\xb1\ +\xcecu\x12\x03\x8d\x1d<\xab\xa1\xd8\x8d\xcb\xb0\x17\x04\ +!\x08\xea\xcfC\x99e9\x8f\x11\xa1\x7f\x17\x0b@\xb4\ +\xba0\xaf\xf1\xe3\x19\x14\xbckunl\xb0y2\xbf\ +\xdb\x0f\x8f\x7f\xa7F\xb0]<\x1bn\x03\xd0\xf9\xc9*\ +\xf3[A>B4\x91~\xcfc\xef|fx\x1d\x08\ +\xef\xd4\xe5\x13\x11\x95\xe1/\x08B.Y0\x16F\x8f\ +R\xebA\x80\xf6\xebF\xd2\xd0oc5\xc9\x8f\xfdi\ +\xdfGgk\x9e@\xd5\xd2b;\xf7\xc2\x97\x05\xc8N\ +xy\x99\xf3\x1a\x03\x0d!\xf6v\xc9\x00\xfe\x18D\xa3\ +\xfbm\x84\xb7\xd6}\x02\xcc\xd7\xb7\xbf>@\xbf\xddc\ +\xe6E2\x05\x08\x82\x90+\xaa\x01:|\x1f\xf3n\x22\ +\x9c\xd8\x0d\x91Y\xd3\xc4\xf6\xaf}\x11\x19\xcb\xbb\x89\x08\ +\xa6\xde\xd6\xe4\xfb{\xce\xc4\xba\xac\x8a\xee\xa6\xf4p^\ +\x10no\x9f\xbe>\xbc\xdc\xfca\xd0\xcfqc\xc2\xf9\ +\x153?\xd4\xc1_\xbb:\xe8\x05\x82 \x08\x85\xc3\xb5\ +q\xebf\x02M\xebfm\xe1k\xcb\x13\xd8\x90\xe93\ +\xb4L5\x0f\x06\xd1\xe9\xba\xdb2\xed\xd1\xdd~]K\ +u\xd4\xba(\xf4\xd6 \xfa\xbf\xd6)\xb1\xc1\x01\xaf(\ +\xf9\x0bv&\x83\xf1B;\x0b\x84=\x87\xf5\xb6\xce\x93\ +\xa9@\x10\x04d\xff,\xee\x15J\xe1\xaan\xc6R_\ +\x9c\xdf`\xcf\xf6\xe39\x22&\xfdJ\xf7\x8ce0^\ +,I\xd8\xaf\xe5Dt]6\x9e\x0e\xff\xde6JL\ +\xd3\xad\x09\xfa9\x06$\xd0\xba\x81\xed\x93\xc1\xbcx\xe7\ +\xeb\x03\xbef\xc1\xd8\x8e\xfbU\x0a\x82 t\xdb+\xab\ +\xb4&\x03tK7\xf7.\xed$\xa3\xf2\xcc\xba\xf6\xf3\ +T:\xc3\xe6\xb2\xbdcu\xb7\xa7\xcbt\xbb\x9f\xd7k\ +Wtc\x89\xd4\x87\x00\xbf\x19~g\x17\xe3\xd3\xf1\xe0\ +*Ua\xab\xc6\x08Ir\xc63\xf8\xdd\x9d\x9c1\x1e\ +~\xd8>\xd6Y2-\x08\x82\x80\xec418\x8d\x08\ +\x89\xeez\x97\x0c\xdc\xb6\xa9\x00Pf\xcc\xab\x802\x88\ +n\xd6\xdd\x9e\x0c^\xf6\xef\xa5\xe9Gr&\xba\x00\xe0\ +\x81\x1e\xd1\xc18\xa4pG\xeb\xa4\xd8\xc0\xa0\x9f\xa3\xb4\ +\x06_\xd8\x8eu,\x83\x97\xb7mp\xbe\xbaZ\xba\x0f\ +\x09\x82\xe03\xc9*\xe3hE\xfc\x00\xa1{\xd14\x06\ +/__o\xdf\xe8\xc7\xb3\x9c\xda\xdb\xba\x10D\xa3\xb4\ +\x17]\x8fn\xf5\xa3\xfce\x97D\xd7v\xf0(\xb48\ +B\x85\x9ef\xc4\xbd;\x0c\xcfR<\xa3\xf5S/\xad\ +\x8eg`U\x1bO\xfa\x8dk\xaa\x82\xeb\x96$\x08B\ +\xfe\xd1\x1a7\x0f7\xa0\x1e% \x86n\x87Q\xb9\xaa\ +_\x1d\x9a\xe1C\x07#\x22\xae\xd6^p\x19\xab\xd7\xac\ +\xb3\xe7\xfa}\xdd\x0eE\xf7\xd6\x19\xf6k\x0c\xfeD\x07\ +#\x11\xe1\xa4t\x95\x15\x8a\xa39\xd1{\xd2K][\ +\x1d\xc9\xcc\x1fn\xffg\x06\xd4\xd52M\x08\x82\xe0\x8b\ +\xe0N5\x8f0\x15=E@Y\x06a\xd4\x07c\xb5\ +\xae/9<\xfd\xfb\x98\x97\x11\x91\xfeU\xf8\x98\x7f7\ +\xa8\x0e\xc9\x9c\x8bn5\xc0\x0czT\x17;\x11\xe3w\ +\xc9xt\xaf0\x9c\xcc\ +`\xbe\xafxF\xeb\xa7\x81\x8a.\x008\x1e\xee\x85V\ +\x0d!`\x98\x06\xeeo\x9a\x8a~ay\xa6\xd1\x098\ +\x91Z\xfbJ\x8f\xe9\x0cfl \xe2\x8b\xaa\xe5\xf8\x90\ + \x08\xe8|\xc1\x09\x03\x99\x0b.\x00x\x1e\xc5\xcbf\ +a\xad\x1f\xcfu\xf8\x083\x0e\xa2\xfd\xf3\xc0\xcb\xb5]\ +6n\xcc\xe6=:-\xba\xb7Lw\xfe\xd5V&n\ +\xc8k3\x0f\x8c\x1a\xd6Ca\xd9\xdf\xc5\x96&\x09\xe9\ +G<\x8fF\x13\xa3\xe1\xaai\xe6!\xb9\xf3\xfe\xb9H\ +\xa6-A\xd0\x93t\xdc:O)5\xbf\xeb=q\xdb\ +\x0c+\xcf\x8cNO?\xee\xc7sm\xb8\x10\xe5 \xfa\ +E>\xd8\x98\x19\xf7l*\x0a\x15\x02\xd1\xad\x06\x98\x89\ +\xee\xd3\xcd\x88D8z\x14\xac\x1b\xc2\xf6\x5c\xd1\xe9\xe9\ +e\x0d\x0d\xcea0r\xe8\xe9r\xe6\xabcA\x10\x10\ +D-\xe5\x1f\x90\xc2\x5cB\xe6MS\x18\xbc|\xa3\xe7\ +\xfc\xc8\xafg\x8b\x15Y7\x11\xd07\x0f\x047\x95m\ +/\xb7K\xa2\x0b\x00\x9e\xad\xe6\xb0\x0fM|\x03\xa8V\ +ue\xaa*rj\xd8\x9e\xab_\x1d\x9a\x8bj\x9c\x17\ +sx\xcbR\x99\xbe\x04\x01Z\xb5\xe7KWY7\x11\ +\xe8v?\xf6K\x19p]`\xa2\x1f\x1d\x84\x00\xa0%\ +n\x8e!`Z>\xd8\x9a\x09\x89\xa2DrE\xa8D\ +763\xf5\x01a\xdb\xa3/\x9a\xec\xef\x92\x02\xcfN\ +\xc5##\x0ay\x003\x93x\xba\x01\xecq\x88\x11\x04\ +t39\xe9\xbaJ3\xa1\x80k|\xdc\xb3\xbc1V\ +\xe3\xbc\xe0\xc7\xb5\x96\x8dG$B\x98I\xd45\x1d\x09\ +k\x93z'm\xe7\xa4V\xb4\xea\xfa\xe6;\xe6\xe89\ +\xf7\xa1\xa7\x22\xef\x89\x8dq\xf4)`\x01\x10\xd1\xcd\xfd\ +h\x96\xaeR\x02\xbaSJ\xf1\xf0\x11f\x1d\x11M\xf5\ +\xf1[|\xe1\xc5wm\xdf\xf6^\xf7\x1cb^\x83\xff\ +o\xef\xcc\xc3\xa4\xaa\xae\xae\xbf\xd6\xb9\xf7VU\x0fH\ +\xd3\x0dN(\xce\x0aJb\x0c$\x0eq\xc0\x98|F\ +\x13#\xa8\xadq@\x86\xa6\xab\xda\xa8o\x9c\xe2\x98h\ +'\x0a\xce_\x12c\xb4\xab\x9a\xc9)QP\x89S\x9c\ +\x105\x11\xc5\x88yU\x1cP\xd4\xa0\x18D\x84\x06l\ +z\xa8\xba\xc3~\xff\x10\x13\xa32WUW\xdd\xbb\x7f\ +\x7f\xf9\xf8\xef;\x03\xed3\x01\xec\x1b\x12\xc1m\xeb\xf2\ +\xdc\xeb\x8a\xf977It+\xd3\xde\x8b_\xf4\x12.\ +\xc3\x5c\xf3\xd5\xb9&\xe7\xa4\x88=\xd7\xba\xd3\xd5\x9d\xae\ +R\x82\xb8I\xfbL\xcb2\x0f\x92\xd8\x22\xcf\xaa2g\ +A\x9b{I\xfe\xec'\xe3;\x03\xbc\x224\x81\x0f\xe4\ +\xd7\xbd'aE\xc9\x8b\xee\xa7\xdf\x157\x94\xb7\xe6\xc2\ +\x10\x98\xd2\x9d\xb2\x0e\x8fNvYE\xb7'\x0e\xd25\ +\x08\xca\xda\x98\x9b\x84\x9dkr\xfe@\xc3\x1b6\xb5\xf9\ +\xfc\xba\xceq]\xcf:a\xaf\xe9p\x91\xa7\xebK\x16\ +\x83t>\xdc\xb0J\xe3,W\xdezk\x85wS\xb1\ +\xff\xee&\x8b\xee+p\xef\x15\xc8\x07e.B1\x0b\ +\xe6\xee\xce&\xfb[\xfa\xf8+\x05\xca_y\x1a\x04\x05\ +k)\x98\xda\xdb8\x7f1\xc0O\x0bP\x1c\xe4\xf9\x0c\ +N\xa8\x98\xd4\x9d\xb7^\xe8\x97$\xed\xd3H|/<\ +\x9b\x5cs~\xbe^H\x8a\x22\xbaC3\xf0\x00\xdc\x5c\ +\xee\x81'Q\xed\x08\x1f\x8a\xc4\x1d^\xe6\xbf!\xb3\xb2\ +\xde\x06\xcf9\x0d\x82\xf2E:S\xf6\x90\x84\xb1\xe7\x12\ +\xf8~\x81\xb6q\xe7%Z\xfc'\xf3\xf5q\xd9\x86\xd8\ +@\x18^\x8b\xd0x\x16\xe0\xc9x&\xd7#}\xe27\ +\xebRs\x16^\xab\xa0\xfc\x17r\x12\xfd\x8c\x09fv\ +7\xc4w\x09\xb79\x06:t\xb9+\xba!\xc9G\x1a\ +\x05\x05\xff\xed\xa1\xdc\xe0\x90\xcf\xe4\xbb`\xeasi\xd3\ +\xdb\x9c\x8c\xf7\xbb|}\xdek\xf5p,;\xb8=,\ +\xc7S\x22\x08r\x82s{\xea\xefo\x96\xe8V\xb7\xe0\ +c\x88\xfc1$\xc6A\xdbY\x8e?+\xcc=n\x05\ +\xf8\x00J\x91_\xe8d\xb1FA\x01>5\xbcpS\ +v\xab1\x98H Q Ey\xf1c\xf1R\xf9\xfc\ +\xc8\xddj\x9df\x90CB\xb4\x12\xdeR\x95q\xff\xb7\ +,E\x17\x00\x02\xcf\x5c+\xc8\xcf\x85\xeb\x12\x10\xde\x01\ +\x96\xed\xcf\xeaJ&\xb6\x0fiM\xcf\xbbP\x8a\xfbx\ +\xfb\x5c\xa0QP\xba\x9b\x12;lS\xe7\xfc-\xaf\x0e\ +S_\xde\xc1-u=\xfb\x98m3\xf93/\xea\x1a\ +g\x1fH\xe2\x82\x10m<:\x5c:\xbf\xe8\xc9\xef\xb0\ +\xd9\xa2\x1b\x9f\x94\x9b_\xd6f\x19_\x16\xde\x9dlz\ +\xb3:\xc7U\xf4\x0f\xdb\x83\xef\x07\xf2\x8a.\x7fE}\ +\xc0\xc5\xa5\xfb\xb4F\x22\xe2\x82\x9b\xb2\x0e\xb7\xc4\x7f\x11\ +\xc0\xd0\x02\xce\xb5\x9cO9>\x9f\x85SmIla\ +\xdb\xb85\xdfU\xd5\xe8\xd9\xea\xa9k*[\xba\x16\x97\ +\xb5\xe8\xaey\x9b\xbfB\x04AxR\x82\xdc\xd5\xb1\xdc\ +\xbfv\x8f\x89\xef\x14\xa6\x87\xbf\x8d\xfe\xd3\xe5j\xe1Y\ +\x9e5T\xf2zU\x06K4\x12\xd1d\xc1\x11\x88\xe5\ +R\xceu\x16\xcd\xc3da=\xdf%@*_\x8d\x0c\ +>\xa3\x17\xed\x1b\x08\xee\x14\x9e\xfa\x0ay{\xc9\x0a\xef\ +\x9a\x9e\xfe\x1ey\x11\xddX\xab\xfb: w\x87\xeb,\ +\x8e;[q\xff\xaf\xd9\x86\xd8\xc0\xb0\xfc\xa6O\xd3N\ +\xf2\xb8.\x87E\xdb\xe9N\xd1(D\x93lCl\xe0\ +N\x03\xec9\x8687\x1f-\xf9\xd6\xe3\x990>\x96\ +q\xa7\xe6\xf33s\x8d\xce\x09$G\x85iL|\xc8\ +\x19\xdbO\xef\xf9\xc2\xdf\xbc\xb5d\xca\x0a/\x0f\xd3n\ +\xf7\xb3\xe2*c\xcb\xd3\x1d\x8d\xce\xdea\xf9Mn\x80\ +\xcb\xcb\xb1'r\x19\xbeU\xffkE\x9b\xd7\xa2\x91@\ +\x14\xab\x93\x1b\x8d#sA\xeeS\x84yv\xe7\x84\xb4\ +\xfb\xcb\xbc\xbe0\x8c\x8d\xedN\x0b\xad!{\x1e\xa7'\ +\xd2\xfe\xa3\xa5\xf0]\xf2&\xba\xd5\x19\xf7UP\xeeE\ +\xe8\xaaO\xb1e\xcc\xe0\xc9\xae&\xfb\x800\xfc\x9e\xca\ +Vo.D\xee\xd0\xa5\xb1\xa0W\x12<\x1fr\xea\x96\ +\xd3\xf5\x8aV\x94\xf8\xe4T\xd4\xbaM\xf6=\xc6 S\ +\x14\xd7&\xc1\xec%m\xde\x98\xe6<\xbeD/\x19\x89\ +J+\x16\xdcM\xa0W\x88\x9e\xc7O\x5c\xdf9\xbbT\ +\xbeO^\x9b\x0f\xe7\x84\xa1\xdcE\x91\xe8c\x0bgf\ +\x1bc\xc7\x84\xe1\xf7\xach\xf3\x9a\x00<\xa7\xcbda\ +\x9aa\x07d}\x22\xed\xcf\xd2h B\xd5\xc9\xd6\xa1\ +\x15\x95\xf6\xcb\x04\x8f)\xce<\x93w\xbar\xee\xf0|\ +\xa7K\xeb*\xed\x1b\x01~-d\xc5\x15\x97\xe5\xab\xc3\ +R\xc9\x89nU\xda}\x05\x90\x19\x08\xe5}KT\x18\ +#\xd3\xdd\xa4}f\xb9\xff\x96-\xa7\xa3ci\xe0\x1e\ +\x16\x007\x85\xedH\xa0'+\x95\x05r_ \xdc;\ +\xde\x92\xfb\xb3F$\x1a,\x1b\x8b\xea\x5c\xca\xb9\xd1\x82\ +y\x82\xe0v\xc5\xea\x8c\x13\x04\xe6\x87\xbd\xa6`Y^\ +7M)g,\xc91!K;\xbd\xf4r\xe0\xddX\ +b\xf6\xc3\xc8{\x01\x81\xb1e\x1e\x09;\xac\x0fZ\x00\ +\x5c7\xa1\xc5=\xbf9\x04\xbb\xfal2\xb6\x07)\x8d\ +\x86r\xa8\x80{o\xc8\xf5\x00\x01:\x01YJ\xc1r\ +\x80\xab\x05p\x01\xb8\x80\xac^\xcb,\xeb\x80 \xb7\x16\ +\xc7\xa6\x15k\xf979R:6p@\x8c\x80\xbd\xd7\ +\xfc\xbb\x0aB\x12k\xfe\xbb7\x04\x06\x80\x03\xb0\x1a\x80\ +!\xa4V\x88Z\x08kITo\xee\xae\x16\xc0l\x04\ +\xf2\x90\x0f\xeb\x81D&\xab\xf7\xa0#\xb6\xbb\xb5\xc0I\ +\xc5\xac\xf0\x15\xa0\xc3\xf3\xe5\xfb\x15\xad^^3U\x1d\ +)\xe7\xeb1`\x0e\x89\x8a\x10\xa5\x95\x03\x0f\xf2\x9d\x8a\ +\xb47'\xd4\xa2\xbb\xe6\x8d\xe9&C\x9c\x16\xf2B\x99\ +{V\xb4y\xa3\xc2tn\xb7\xfcd\xf4J\xf4rv\ +\xb1$\xa8\xa5X\xb54B\xf1\xd9-\xc6\xef\x0a\xc0\x15\ +\xf4\xec\x8fW\xe5\xba\x97m}\x1b:\x11\x92+\x1d\xdb\ +n\x8fZ\x9b\xb1>A\x10\xd4\x18#5\x14SCH\ +\x1f\x18\xd4H\xc0->\xf7\xa4x\x14Y)\xe4JA\ +\xf0/\xc9\xd9\xf3\xaf\x9a\x92]\xd8\xacEi\x91c\xf9\ +\xc9\xe8\xd5\xab\xda\xb9\x9aDS\xa1+\x93\xbft\x17\xd7\ +\x0f\x8eN\xb4\xfa\x8f\xe4\xf3s\xdb\x92\xd8\xa2\x17\xed\x17\ +H\xee\x1e\xaa\xcd\x91 \x1dK\xbbM(\xbdF;\xf9\ +g\xf58l\x19\xb7\x9d\xb7\xc3t\x18\xbf\x96\xc7\xe0e\ +\x0f\xf6\xd1\x89\x96\xee\xf7t)R\x94H4\x9a?\xcc\ +\xb28\xb1P\xbe\xc9\xeb\xda\xb5\x09pr,\xed\xde\x99\ +\xcf\xcfm\x06xI\xca\xbe\x8bd}\xd8n\x0ft\x18\ +op\xcd\xcdX\x19\x09\xd1\x05\x007e_B\x86\xa8\ +\xd9\xf1:zVz\x90c+\xd2\xde\xdftIR\x94\ +p\xb2\xaa\x01}*m\xfb*\x90\x8d\xc5\xdc\xdd\xfe\xc7\ +\xfcBNw2\xf9\xef\xfd\xea&\xed\x8bh8!l\ +\xe3\xe5#\xf8Q\xbc\xc5\x7f\xa8\x14\xbf\x9b)\xd4\x07/\ +\xef\xf4~S\xee\xfdv7\xb4C\x91M\xcet\x93v\ +\x93.M\x8a\x12.\x9a\x01\xe6R\xce\xc8J\xc7y\x83\ +d\xb2\x87\x04\xf7\xb2B\x08n6\x15\xfb1B\xb81\ +\x12\x91[JUp\x0b\xba\xd3\x05\x80\x5c\x93s\x8a\x01\ +nCt\x0c\x11n_\xd1\xe65\xe9\xfdLE)\x7f\ +r\x8d\xce\x9e\xc6\xc2\x1f\x00\x0cC\xcf\x9dK\xde\x10K\ +\xbb?\xcb\xf7\xe7\xaenr\xf6\x8a\x03\xcf\x85\xed\x08P\ +D\x16wz\xde\xe0\xde\x93\xb0\xa2T\xbf\xa3)\xe4\x87\ +\xc7Z\xdc\xdbE\xf0$\x22\xd3\xc6\x8d\xa7\xf4\xa9\xb3\xe7\ +\xaeN:\x83u\xc9R\x94\xf2dq\x12\x15\xb9\x94\xd3\ +L\x83\x7f\xf4\xa4\xe0\x0ad\xd2\x9f\xdb\xdc\xb3\x0ba\xe2\ +\x11\x17\xf9s\x18kn\x02\x9a\xd3KYp\x0b.\xba\ +\x00\x90%\xce\x5cs\xa5$\x1a\xc2\x0b\x0e\x8c\x13\xcf\xe5\ +\x9a\x9c\x93t\xf9R\x94\xf2\x22\x9b\x8a\xfd\xb8\x1f\xed7\ +\x0cq\x19\x89x\x0f\xee\xd8&\x8eo\xf1\x1a\x8f\x9f\x9e\ +\xdf{\xf4\xaf\xd5\xc3\xa9\xa8p\xee&\xb9+\xc2\x97i\ +\xbc\xad\x1c\xee\xc8\x17\x5ct\xab[\xdc\xd7\x04\xf8\x1d\x22\ +\xd5\xb8\x1c\xd5\x06\xb8\xc3M\xd9\xd3V5\xa0\x8f.e\ +\x8aR\xfa\xf7\xd5\xdd\x94\xf3\x80E\xb9\x8f\xe4\x0e=}\ +&9\xa3\xcdK5\x17\xe0:\xdanu\xceoI\x1c\ +\x1aBs\x9a\x0f\xbb\xba\xbc\xb3\xcacc\x86\xe2\xb8\xb6\ +\xf4\x8e\xd9o\x14\xcb\xb1\xa5\xb4&\x83\xfc\xd3\x03N\xa9\ +h\xf1\x9e\xd5\xa5MQJ\x8b\xd5M\xe8\x17\x13\xe7W\ +\x04\x1aK\xc1\xd0GDn\x9b\xd1\xe6\x8d\xce\xf7\x0e\x17\ +\x00\xdc\x94\x9d\x22\x19\xca&\x1c\xbe\xf0\xe8x:w\xbf\ +\x8a\xee\xe7\xdf$\x1bc\xc7X\x96\xdc\x83hZ\x04\xfa\ +\x02\x8c\x7f%p/\x1f\x9a\x81\xa7K\x9d\xa2\xf4,\x0b\ +G#\xde?a\xff\x0f\xc0K\x08\xf4.\x91\x17\xf4?\ +\xcd\x9e\xef\x8d\x1c\xf6\x14\xfc\xfc\xa7\xcd\xad#\x0c\xcc\xfd\ +at\x0a\x14\x91)N\xda\x1b\x8b\xb29\x82,\x22n\ +\x93=\x9d\xe0q\x88n\xfb\x99\x17\xb3\xe0\xd8O=\xaa\ +\x15EA\xcf\x9c\xdb\x1ek\x10\x5cCr\xe7\x12\x12\x8e\ +?\xbe,\xde\xa8B\xbc\x94w6\xdaC\x1d\xc3'7\ +\xd7\xf6\xb4D\x05\xf7\xadU\xae7\xa4\xefd\xacV\xd1\ +\xc5Z\x9d\xaa^#\xd07\xc2\xc6\xf89B&\xbc\xb9\ +\xdc\x9b\xb0\xd7\xf4\xe8\x14\x98)JO\xd3\xd5h\x1f\xec\ +X\x1c\x0f\xe0\xc0\x12;\x82j\x9d\xb1\xdck*DJ\ +\xb9;\x19\xdf\xd92\xc1\xb3\x04\xb6\x0a\xe3Z\xea\x8a\x1c\ +P\x99\xf6^DY\x15\xdb\x16\x99\x5c\x93s\x92\x01\xb4\ +\x9f\xab\xc8+Y\x9fc\xaa&\xba\xff\xd0\xe5PQ\x0a\ +Gg\xd2\xfe\xb6cx\x05\x81\xef\xa3\xf4\xfc\x81\x7f;\ +!\xed\x9e\xd3\x5c\x80\xa2\xa9\xf61\xe8\x9b\x88\xdb\xcf\x12\ +\xdc-\x94Kh ?w2\xdeu(\xbb\x1b.=\ +\x80\x9b\xb2\xef%9Bu\x17\x01 \x13\xdb\xc5\xfby\ +m\x06\x9f\xe8\xf2\xa8(\xc8\xaf\x01\x84\xc8e \x8fc\ +\x0f\xadu\xeb\x14\xdc\x00W\xc72\xee\x85(\xd0]\xe3\ +-\xe9\xcc\x04q@H3\x86\x8f\xcfX\xee\xfe\xa0\x10\ +\xd9\x81P\x8an\xe7Xl\xe38\xce<\x12u\xba4\ +|\xea\xa2\x22\xc2\xb3c\x19w\x9aFCQ\x90\x87\xf6\ +\xa2\xc1\xaf\x00\x1eG\x16\xfeZ\xe4\xa6\xf4^\x86\xc8\x85\ +N\xda\xbb\xa6\x10\x9f\xff\xd40X\xdf\x19h\xcf x\ +TH7+Ks\xe2\xee]\x95\xc1\x12\x94\xa5\x97C\ +\xcf\x153\x8c\xb0(\xf7\xea\x12\xf1_\x93\xe9\xb1 \xe0\ +\x19\xf1\xd6\xdc\x02\x8d\x86\xa2l\xe4\xce6\xe9\x0c\x8eS\ +.\x04\xf9\x93\x0d\xe9\x0b\xddc\xd9-\x913\x0b\xe1\xa5\ +\x8c\xffd\x12\xd3$\x93!\xdd\xe1J\x80\xe0\xa8R\xf6\ +V.Y\xd1\x05\x80\x5c\xcai1DJ\x97\x8b\xff.\ +\x0e\x10\xe0\xc6.\xd7\xbd\xa2\xd4\xed\xcc\x14\x05\xa5Q \ +\xb5\xbfmp!\xc8\xa3J1\x8d\xfc\xb9g\xbb;\x08\ +82\x9e\xc9\xdd]\xc05\xf5jC\x9c\x1f\xd6\xb1.\ +\x94\x17udDw\xc9HT\xd6U\xdasI\x0e\xd2\ +\xa5\xe3K\x0fh\x1b \xd7,|\xcf\xfb\xcdn\x0f#\ +\xa7\x11Q\x94/\x88\xed8\xfb@\xdb\xe2\x05$~T\ +\x06Y\xac\x15^ \xc3+Z\xbd\xbf\x16l\x87\x9b\xb4\ +/\xa5\xe1\xafB\xbc(\xfe\xfd\x83\xac{\xf0\x8eS\x91\ +U\xd1\xdd\x0c:\x9a\x9co\xc4\x04sz\xd2\xe7\xb4\xc4\ +\xcf{\xdf\x08\xc4\x5c\x14\xcf\xe4\xee\xd3h(QgZ\ +=\xcc\xd1\xb5\xb1\x11\x16\x82\x8b@\x0e)\x93gxQ\ +\x96<\xa2\xba\xc5}\xad\x80\x82{\x0e\x0d\xaf\x0f\xf1&\ +d\x99\xe7ZC*&u\xbf\x8f\xb2\xf7\xe7/\x01\xdc\ +\xa4\xfd3\x1a\xfeV\x97\x94u\xf2\xbc\xe7\x07\x97$Z\ +\xfd'4\x14J\xd4X9\x1a\xbd\xab\x12\xf6\x18\x00g\ +\x10\xdc\xa5\x8c\xe4b\x9e\x9b\xb5\x8f\xac\x98\xd2\xfdA\x01\ +\xcfpS o.\xe5\xd4\xfa\xe6:\xfa\xf9\x08\x8eL\ +\xb4\xf8\x8f!\x14MqJ\x04\xb7\xc9\xbe\x93\xe0\x09\xba\ +\xbc\xacw\x02>\xe1zrI\xe5D\xefy\x8d\x86\x12\ +v\xb2cc\xbb\xd3\x913I\x8c*\xb7Vt\x22x\ +\xb2\xc3\xb8\xc7\xd4\xdc\x8c\x95(\xdc\x19\xeeH\x02SK\ +\xb1J;\x8f\xe6!\xbftZ\xbc+\x10\x9aNt%\ +\xc2\xd2zT\xd5\xd6\xda\xcf\x83\xdcK\x97\x9a\x0d\x9a\x89\ +\xb3\xbd \xb8Lw\xbe\x0aB{^\x8b\xff\x01yL\ +\xa9V\x22\xaf'\xa5\x9cy\xab\xcd;\xa3\x90\xaes\xd9\ +\xa6\xd8p#2=\x8c~\xca\x9f{qypF\x9b\ +{t9\xde\xc7-y\xd1\xfd\xf7\xfd:G\xfe\x1e\xc6\ +\xe6\xca\x05\x14\xdf\xa7=\x09\xc6'2\xfe\xe3\x1a\x0c\xa5\ +\x9ciO\xa2.a\xec\x91\x104\x91\xdc\xa3\x5co\x1f\ +\x00r\xa6\xd3\xe2e\x0a\xdc@\xe6(c\xc9\xdd\x04b\ +!\xaegy\xb7\xd3\xf3\x86\x86\xed\x16\x07K\xb0\xaf\xe5\ +q\xc6\xc8\xb4\xb0\x9eO\x14\xb2\xb2\xcf\x17^\xfb\xdc[\ +\xb9\x19\x85\xe8R\xa2(\x85\xa0\x19\xe0\x85\x8d\xd6w-\ +\xc3q\x00G\x94sA\xa5\x00\x1fy\x9e\x1cW1\xd1\ +{\xa6\xd0\x1d\xdb\x8c%\x7f\x0a\xb7\xe0\xa2+G\x1cP\ +\xd5\xe2\xbe\x14\xb6\xdfV\x92\xc2\x96K:\x97\x1b\x83_\ +\xe8\x92\xb4i\xfd{\x01\xdc\xf0I\xbb7\xa9\xee\x0e\xb4\ +kD\x94R\xa4s,\xb6ql{4\x0c\x1a\xca\xab\ +0j\xadO\xde?\xdc\xc0\x1e^\x91\xe9^T`o\ +\x83\x9f\x10\xb8-\xcc)e\x00\x08\x02\x8c\x89e\xdc\xa9\ +a\xfcm,\xd5\xb7\xdfKR\xf6]$\xebuy\xda\ +\xe4\xb7\xeeU\x02\xb4\x06\x81\xb99\x91\xc9\xbe\xab\x11Q\ +P\x02=l\xb7\x89\xc7\x8e4\x0cFA\xf8\xc3\xb0\x08\ +\x87\x88\xdc\xb9\xbc\xd3k\xd8\xfa6t\x16XpG\x92\ +\x98R\x8eg\xdc\x1bi\x80q},\xed\x9e\x17\xd6\xdf\ +W\xb2)\xdc5\x86\xdd\xb3@\xec\xa7\xcb\xd5\xe66U\ +\xc0,!2\xaf\x04\xee\x8cB\xf4\xebT\x14\xac\xe3^\ +\xedQ\xbd\xed\x03,\x8b\xf5$N\x0aS[O\x01D\ +\x04\xbf\x9e\x90v\x7f\xd5\x5c\x80.A_\xc8\xfe5\x90\ +\xc8\x84\xb9JyML\x1f\x99=\xdf\xfdQ\x98\x8f\xc8\ +J\xfa\xdc\xb4#\x89\xadc\xc6~\x9e\xe0\x00]\xbe\xf2\ +\x92z\xfe\x00\x01Z=\xd8S\x0a\x9d\x06S\xa2Mg\ +\xa3=\xd46<\x89\x90\x13Hn\x1bF\xc7\xb8\x00\xc1\ +\xa9\xc5\xf0\x00vS\xf6i \xff\x10\xfe:\x17\x99\xb7\ +\xaa\xdd\xfbN\xd8\x8f\xc5J~\x10;\x1a\x9d\xbdc\x16\ +\x9e&\xd0[\x97\xb2\xbc\xef~oi\xebp\xef-t\ +ZL\x89\x06\x1d\xe3\x9co:\x16\x86\x13r|\xb9V\ +\x1fo\xe8u=\xd7\xb3N*\x86;\x92\xdbd\x9f\x05\ +\xf0\xff\x87]pE\xb0\xd4\xf7\xcd\xbe\x89\x89\xd9\x85a\ +\x7fN\xcab \xbb\x9b\xecC,\xf0\x11\x02\x09]\xda\ +\xf2>\xd9?\x01e\xba\x1f\xc8\xed\xf7\xaf\xf0\xff\x1a\xa6\ +\xfbpJayj\x18\xac\xfd\x06\xda\x07\x1ap\x04E\ +\x86\x93\xdc!\xec/\xab\x02\x5c\xf9\x8a\xb8\xcd\xc58\xa6\ +\xc9\xa5\x9c_\x1b\xe2\x97\x11X\x83\xb2\x9e\xc8a\x15\x19\ +ov\x14\x9e\x9b\xb2y{\xca\xa6b?6\x90{\xc2\ +^\xb5\xd7\xc3\x93\x7f9 \x7f\xf1!\xb7\xde\xdf\xe6\xcf\ +R\x01V\xbe\xc8\xa2z$\xfa\xd5Z\x07\x1a\x98\xa3\x08\ +\x1cOb\xeb\x88<\x1bK\xfd \x18\x95h\xf5\x1f)\ +\xc6\xcb\xcc\x01{8\x7f\x88J\x07\xb6@\xd0\x18K\xbb\ +\x13\xa3\xf2\x0c\x95U\xca\x22\x97r\xc6\x91\xc8\xe8\x1d\xde\ +\xe2\x98\xb4\x0bxO\xc0\xe0\xfeW\x03\xffoZ\x80\x15\ +]\xb2\xc9\xd8\x1e\x06\xc1\x0f@\x1e\x0e\xe2\x10\x02\x95\x11\ +{\x19}4\xeb\xbb\xa7VO\xc4\xd2b\xbc\xd4l]\ +k\xff\x91\xe4\x88\x88\x08\xeeU\xb1\xb4{Q\x94\xe6S\ +\xd9\x89\x97\x9b\xb2/$y\xa5.\x85En3(\xf2\ +P\x00s_\xbb\x9b{\xb4\xefd\xac\xd6\xa8 \xd4\xcd\ +\x05*\x9c\xd8a\xc6\x04\x87\x038<\xeci\xe3u\xcc\ +{\x17\x22\xbf\x18\x9f\xf6\xaem.pu2\x00\xac<\ +\x0d5\xd5\xe2\xdc\x07\xe0\xe0\x88\x14v\xde5c\xb9w\ +R\xd42je\xb9c\xcc\xa5\x9cfC\x5c\xa6\xcbc\ +\xcf\x9c\xbf\x00\x98\x0d\xc8\xa39\xf2\xb1k[\xdc\x97\x8b\ +\xb1 )\x85c\xd9XTW\xdb\xd6\xfe\x06\xe6`C\ +\x1c*\xc0\xbeQ?\xc6\x11\xc8BOpbE\xda\x9b\ +\x83\x22\x99\x85\xc4\x1c\xfb\x11\x90_\x8f\xc8:\xf2\xe4\xbf\ +\xb2\xee\x11\xe5\xde\x1b72\xa2\xab\xaeU\xa5e}\x07\ +\x91\xc7\x85\x9c\x15\x04\xe6i5\xe2(\x83\x9d\xeci\xa8\ +\xa9\xf0b\x07\xd1\x92\x83\x0dp\x90\x08\x86h\xad\xc4\x7f\ +\xee\xde\x022\xb9\xa3\xdb;\xb7f*V\xa1H\x9d\x94\ +L,x\x84\xe0N\x11\x89\xf2\xcb\xab\xbb\xbdC\x8a\x15\ +_\x15\xdd|\x0ao\x933\xc1\x00\x17\xe9RQZg\ +\xc1\x00\x9e\x16\xf0i\xf1\xf8\xcc\x95\x93ro\xeaN\x18\ +=Za\xdb\xe5?\xbf\xc5\xadh\xd3\xc8\xa0 \ +\xf6\xa9\x17\x8d\x8d\xed\xc6\x98\x0c\x85\xe0[\x86\x18*\xc0\ +>\x04\xaa4:\xeb\xdd\xddNl\x0f\xbc\xf3j3\xf8\ +\xa4\x88\x9b\x86Q\x14\xa4\xcb\xb9\xc9\xc3F\xc6yY\x10\ +\xf0\xc0x&\xf7f\x94\xe7[(\xaa\x80\xdd\x94\xfdK\ +\x92\xbf\xd6\xe5\xa3\x8c\x9a2\x08^\x82\xe0\xa5\x80\xe6\xa5\ +\xc03/\x15\xc3h Lt\x8c\xc6V\x96c\x0d\xb6\ +\x0c\xf7\x02\xb0\x17\xc1\xc1B\xec\xa5&2\x1b\x9d\x99y\ +\xcf\x17i,fk\xcci\xf50\xc3k\x9d\xf1\x86\xb8\ +0B/6\x9d\x9e\xc8a\xc5:#W\xd1-\x8e\xf0\ +\x9e\x01\xf0w\x9a6+\xdf\x1d1\x89\xf9\x02y\x1d\x01\ +\xe6\x07\x90\xd7\x05\xf6\xfc9oe\xdf\x8bj\xab\xc2E\ +\xf5HlY\x1b\xdb\x09\xf4w6\x01w\x16r\x0f\x02\ +{\x82\xf8ZT\xd2\x91\x05\xf6M\xce\xb4\xafv\x7f^\ +L\xdb\xc1%#QYWe\xdfF\xf0\x98\x08=\xdb\ +^\x80`D<\xed?\xa83/d\xf7]s)g\ +$\x81\xc9Z\x14\x12\xaa\xc51\x07\xc8{\x10\xbe+\xc0\ +\xbb\x14y7\x80Y\x18 \xf8\x90\xbe\xb5de.\xfb\ +a\xb9\xdaX\xb6%\xb1E\x15c\xfd\x85\xfe\xd6\x06\xa6\ +?!;\x02\xd8\x85\xe0\xce\x02\xd9\x19`\x7f\xbd\x93^\ +\x98sE\xdf\x97q\x89V\xff\x89b\xfe\xdd\xce\xa6\x8a\ +mc\xe2\xde\x0frH\x94,gE\xd0\x10\xd66}\ +\x91\x17]\xe0\xdf\xceUw\x92\xa8\xd0\xe1\x8d\xcc\x83\xbd\ +\x1a\x90\x7f\x11\x5c*\x94\xc5\x22\xfc\x88\x22K\xc4p\xb1\ +H\xb04\x08\xb82\x00;-\x9av\x17\xd9U\xed@\ +\xe7\xb6\x19t\xe5\xf3;,?\x19\xbd*\xab\x125~\ +\xe0\xd7X\x90\xde\xc6\x92\x1a\xd2\xd4P\xa4\x06D\x8d\x80\ +}\x09\xd9\x9a`\x7f\x11\xd9\x1a\xe4\xb6Q3\x99(\x85\ +\x1d\x97\x107\xb4\xb7\xbb\xcd\xc56\xd5\xef\x18\xe7|3\ +f\xc9\xfd$\xfbG\xea\xac\x5c\xe4t'\xed\xdd\xac\xb3\ +/\xc4\xa2\x0b\x00]){?\x1b\xbc\x8f\xc4\x96:\xc4\ +\xca:\x9a>\xac\x02\xa5\x1d\xf2\x1f\xb7-\x12+!_\ +]m-\x9f\x8ad\x1c\x04!\xacY\xf3\x04U\xa8'\ +xY(\xc0\xd3\xdd\x823\xaa3\xee\xab(\xfe-\x8b\ +S\x08\xa4\xa3\xe7\xe4%\xe78i\xef7:\xf9\x22 \ +\xba\x00\xd0=&\xbe\x93\x15\xf3\x1f\x229H\x87YQ\ +\x22\xfbr\xb5D\x04\x17L\xc8\xb8\xb75\x17\xf9\xea\xda\ +\xdc$\xec\xaf\xc3\xb9\x22\x8a\xb7+\x04r\x89\xd3\xe2M\ +\xd0\x19\x18!\xd1\x05\x80U\x0d\xe8S\xe58\xf7\x02\x18\ +\xa6C\xad(\x11K%\x037uf\xddK{\xc2\x84\ +a\xf58l\x19\xb7\x9c;I\x1c\x1a\xb5\xd8\x07\x82\xcb\ +ci\xf7R\x9d\x85\x11\x14]\x00X8\x1a\xf1\xfe\x09\ +\xbb\x85\xe0h\x1dnE\x89\xc46\xebo\xdd>N\xaf\ +\x9e\xe8\xce\xeb\x89?\xdf5\xce>\xd0\xb69\x8d\xc06\ +\x91\x13\x5c\xe0\xbaX\x8b\xfbs\x9d\x84k'\xf4\xd7k\ +v\x9c\x8a\xac\xd3\xe2\x8d\x11H\xea\xd3JXEQ\xc2\ +\x9aJ\x0e\x02\x8c\xba\x22\xed\x1e\xd2S\x82\xeb6\xd9I\ +\xdb\xe6\x13\x91\x14\x5c\xc1\x8d\x13Z\xdc\xf3u&F|\ +\xa7\xfb_o\xa0\x8d\xf6\xc1\xb6\xc5i\x04\xb6\xd2\xa1W\ +\x94\xd0T\xc9v\x88\xe0\xb7\xab\xc5\xbd\xa6\x98\x8eR\xf8\ +B\xd3\x88\xde\x8e\x9d&yR\x14\xc7 \x10\xa4'\xa4\ +\xdd\xd3\x9a\xd5\xf2UE\xf7K\xc2;&\xb1\x9d\x13\xf3\ +\xef\x01\xf1m\x1d~E)\xefs[@&\xbbt~\ +U\xd9\xd2\xb5\xb8\xa7\xbeGG\xd2\xd9'F\xf9\x13\xc9\ +=\x22*\xb87LH\xbbg\xa9\xe0\xaa\xe8\xae\x95\xd7\ +\xea\xe1\xecV\xeb\x5cB\xe0\x97\xea`\xa5(e)\xb8\ +3\xb3>\xce\xe9\xa942\xf0\xa9\xd7\xf5%I\xfb\x7f\ +@^\x1d\x15\xff\xe4\xaf\x10\xdckciM)\xab\xe8\ +n \xd9\xc6\xd8Q\xc6\xc8\x14\x12u:\x15\x14\xa5,\ +r\xc9s\xdc@.\xa8h\xf5\xfe\xda\x93_\xa3}\x0c\ +\xfa&\xe2\xf6d\x82GEu(\x82\x00W\xc72\xee\ +\x85:)Ut\xb1\x09\xe9\xe6?\x828H\xa7\x83\xa2\ +\x94\xec\xbd\xcf\xf9\x02^\x1akq\xa7\xf7\xf4w\xe9N\ +Z\xc3,\xf2\xf6(\xb9K}\x85\xf1\xc5\xa5N\xda\xbb\ +\x5cg&\xb4zyc\xa9\x98\xd2\xfd\xc1K\xe2~W\ +\x02\xb9L\x00W\xa7\x84\xa2\x94VG\xaa@\xd00{\ +\xbe7\xb8\xa7\x05wn\x12v.\xe9\x5cn\xd1<\x11\ +U\xc1\x15@$\x90\xb3Tpu\xa7\x8b|\xf9\xa3\xc6\ +-\xb9\x05\xe4`\x8d\x86\xa2\xf4\xe8N\xea-!'\xbc\ +\x12\xb8w\x0c\xcd\xfc\xc7\xa6\xb3\xa7\xc8\x8e\x8d\xedn9\ +r\x0b\x88\xfd\x22m\x9d*r\xba\x93\xf1Zt\x86\xaa\ +\xe8\x22\x9ff\x1a\xdb\xc6\x9d_\x938\x97\x80\xa5\x11Q\ +\x94\xa2\xae\xec\xaf\x05\xc2\xf1\xcf\xbe\xe5N+\x85\x96\x8e\ +\xd3\xeaaF\xf4\xb1\xcf\x04ye\x94\x9b\xa8\x08\x90\x93\ +\x00cc\x19\xf7\x0e\x9d\xa4*\xba\x05\xa1\xab\xc9>\xc0\ +\x06Z\x09\xee\xa9\xd1P\x94\x82\x8b\xedK>\xcc\x15\xf7\ +\xb5\xe5f\x1c?\x1d\x01J\xc4\xbf\xdd\x8e\x07\x93\x11q\ +\x1bY\x11\xac\xf6\x19\x1c\x9bh\xf1\x1f\xd3\x89\xaa\xa2\x8b\ +B_-\xda\xbd\xce>\x07`\xb3v\x92Q\x94\xc2\x88\ +m@N\x98\xd0\xe2\xde\xdd\x5cB\xf7\x82\xab\x13i\xff\xd1R\xfa^\x9d\xe3\ +*\xfa;5O\xe6\xdc\x00\x00\x0f\xe7IDAT\xb6\ +7\x91\xc0\x0f\xb4\x88M\xde\x09\xc4\xfc \x9e\xce\xbd\xad\ +3VE\x17=q\x11\xfe\xe2\xa43\x92\x06WE\xd1\ +WUQ\xf2p.\xd8\x0d\x91?\xe6\x02\xdeP\xd5\xea\ +\xbe\x5cr\xcfw\xca\x19C\xe0z\x125:X\xf2b\ +6\xeb\xfd\xb0j*>\xd2\x99\xab\xa2\xdb\xa3,\xadG\ +UM\xad\xf3s\x12\x17h\xcaYQ6Hl?\x92\ +\x00S=c\xdf\xd0\x93v\x8dk#\x9b\x8a\xedj(\ +-\x04\x0e\xd3\xd1\x02D0\xab]\xdc\x11=\xe5c\xad\ +\xa2\xab|%\xdd\x0d\xf1],\xdb\xbf\x8e\xe4p\x8d\x86\ +\xa2|\xf5n) \x7f\xfb\xde{\xee\xb4\xdd\x1e.\xbd\ +\x0e_\x8b\xea\x91\xd8\xaa\xce\xb9\x88\x82\x0b\xa2j\xe3\xf8\ +\x15W\xb5n_\xf8\xbe\xd7P\x8a\xe3\xa5\xa2\xab|*\ +\xbeM\xd6\xa16\xcc\x95\x00\xf6\xd5h(\xba\xab\x85\x0f\ +\xc8\x0c\xcf\xc3\xef*&z\xcf\x94\xf2sk\x09[H\ +\xee\xae\xa3\xf6\xa9\xe9\x05D.\x1b\x9f\xf6\xaeh\xd6\xc6\ +\x05*\xba(\x83\xf3\xde\x8bR\xb1\xe1\x06\xc1x\x92\x83\ +4\x22J\x04wH\x8b\x04\x9c\x1a\xd0\x9a\x94h\xe9~\ +\xafT\xbf\xe7\x1a\xcf\xe4k\x01\x8e\xa2\xae\x7f\x9f\xa5\x93\ +\xbb\x84\x18U\x0a\x16\x9b*\xba\xcaF\xf1\xd40X\x07\ +\xec\xe1\x8c\x22\xe4R\x92;hD\x94\xb0\x1b&@\xe4\ +\x81\x002\xe9\xb97\xfd\xc7J\xc1\xccb]\xcf\xe6w\ +\x06\xda\x0d\x00\xc7\x13\xe8\xab\xa3\xf7\xef1\xfc\xd0\x85\x1c\ +]\xd9\xe2\xbd\xa0\xd1P\xd1EY\xb7\x0e\xec\xe3\x9cH\ +\xca\xc5Q\xed\xb1\xa9\x84zW\xfb&\x88)Y\xcf\x9b\ +R=\x11KK\xfd\xfbv\x8e\xb3\xf7\x8d\xd9\xfc\x1d\xf4\ +\x08\xe8\x8b\x03\xf9\x8a\xeb\xd9GUL\xea~_\x83\xa1\ +\xa2\x1b\x0a\xa6\xd5\xc3\x0c\xafs\x8e%\xa4Y\x9d\xad\x94\ +rOA\x02\xf2\xa0\x0f\xc9\x5c\x95\xf6\x9fh.\x83s\ +\xbf\xceq\x15\xfd\x1d\xcb\xbd\x12\xe4)\x9aJ\xfe\xd2\x0e\ +\xf7/\xed\x81{\xa2V(\xab\xe8\x86V|\x8f\xae\x8d\ +\x1dmQ\xce\x01p\xa0FD)\x9f\xa2(<%\x82\ +?~\xe2\xba\xd3\xfaN\xc6\xear\xf8\xdeKF\xa2\xb2\ +\xb6\xd29\x9f\xc4\xcf\x09T\xeaH\xe2\x8b\x8d\xe7\xaf\xfa\ +s\x9b{I\xa9\xd8m\xaa\xe8*\x85}\xfbn\xb2\xbf\ +\xe5\x00\xe7Bx,\x09[#\xa2\x94Z'\x19\x12\xcf\ +\x08dZ\xae\xdb\xbb\xbb\x9c\xcc\x11\x9a\x01^\xdc\xe8\x1c\ +OK\xae!8@G\xf3\xcb\x1e\xca\x22h\x88e\xdc\ +i\x1a\x0d\x15\xdd\xc8\xd1\xd5\x90\x18`\xd9\xfe\xe9\x04\xc6\ +\x90\xe8\xa7\x11Qz\xf2\xba\x08\x819\x02\x99\xe6z\xce\ +\xf4\xca\x89]\xffB9^\xdd\x13s\x15\x88o\xeb\x88\ +~\xa5\xa5\xe3|\xf1yl\xac\xd5}]\xa3\xa1\xa2\x1b\ +i\x16\x1c\x81\xd8\x0e;8GS\x90\x04q\x98\x9e=\ +)E\x5c\x88_\x17\xe1t\x01o/W\x7f\xdd\xd5I\ +gp\x9cr)\xc9z\x1d\xd1\xb5\x16\xbe\xdd\xdf\x91\xf5\ +N\xad\x99\x8aU\x1a\x0d\x15]\xe5sd\x1bb\x03i\ +K\x92\xc4I\x04\xb6\xd2\x88(y\xde\xd1\xba\x10<\x03\ +\xc8C\xbeg\xfd91)\xfbN\xd9>+\xa9\xd8\xae\ +\x06\xc1\xe5 O\xd0\x17\xd5\xb5\xa6\x93=\x88\x5c4>\ +\xe3]\xdf\xac\x86\x17*\xba\x0a\xd6y\xa7p\xbf=\xac\ +C-\xf0T\x90\xc7\x10\xa8\xd2\xa8(\x9b\xda\x9a\x0d\x90\ +Y\x22|\xb0\xd3r\xef\xaf\xb9\x19+\xcb\xf9\xf7\xacn\ +B\xbfX\xe0\x9cK\xe2,\xb5n\x5c\xe7\xb8\x7f\xec#\ +8)\x91\xf6gj4Tt\x95\x8d`\xe5i\xa8\xa9\ +\xf4\x9dz\x1a\x9c\x00`\x18\x01K\xa3\xa2\xac\xb7G-\ +\xf8\x90\x0fy\xf0\x816\xef\xefa\xa8R\xed\x18\x8d\xad\ +\x9c\xb8s.\x89\x9f\xeaK\xe8zS\x1a\xb3s\xb4\x8f\ +/\xc5\xe6\x12\x8a\x8an^hKb\x8bX\x80D\xa1\ +\x8d\x02V7\xa1_\x1c\xf6\x08\x80\xc7Ap\xa8V?\ ++k\xd2\xc6m\x10\xf9+\x80G\xbc\x9c\xfdP\xc5\x94\ +\xee\x0f\x10\x9aj\xff\x8ammx\xe7\x13h\xd4\xeb?\ +\xeb\xaf<\x17\xe2\xeaW\x02\xf7\xd2\xa1\x19x\x1a\x11\x15\ +\xddP\xe36\xd9\xb7@\x10\xf3E\xd2We\xfc\xa7\x9b\ +\x0b|\x86\xd2\x9eD]\x1c\xceQ4\xf2C\x80\x87\x13\ +\xe8\xa5\xa3\x101\x91\x15<\x95\x13>\xf5\xd0Jw^\ +\xd8\xee\x5cv5$\x06X\x8e\x7f\x01\x05\x0d\x9aF\xde\ +\xa0b\xa9\xc5>dd\x22\xed\xcf\xd2h\xa8\xe8F\x82\ +ecQ\xdd\xdb\xb1\xffNr\x90@\xe6\x03Hwu\ +z\xb7nq+\xdaP\x84\x0a\xe8\xed\x07X\x07\x1b\x9a\ +\x1f\x11r$\xc1\xddtDTd\xcb\x91\xeed|g\ +\xcb\xf8\x17\xaeiH\x10\xd3\xd1\xdf\xa0*\xf4\x07\xba\xb3\ +\xde\xd8^S\xb0L\xa3\xa1\xa2\x8b\xa8U\x1f\x1b[\x9e\ +%\xd1\xe7\xdf\xd6y\x94\xe9\x9e\x8f\x96\x8aV\xef\xb9\xe2\ +\xddYL\xec`\xc4?\x8c\x94\xef\x01\xfc\xaeVB\x97\ +\xdd\xae\xe5m\x10/ \xc0\xf3a\x17\xd9\xcf\xe8hr\ +\xbe\x11\x139\x07\xe0\x89zl\xb2\xc1/c\xdd\x08\xe4\ +\xfc\xf1\x19\xef\xc6f\xadNV\xd1\x8d*]\x8d\xf6\xc1\ +\xb6\xc5G\x09$\xbeh..@K\xbbxw\x14\xd3\ +\xef\xb4\x19\xe0y\xe3\x9c\xc1qK\x0e\x01q\x00\x04\x07\ +\x92\xdc^G\xaadv)\x1f@\xf0\x02\x88\xb9~ \ +/d}\x7fn\xefIX\x81\xc8\xd8\xa3ZG\x1a\x98\ +\xb3I|Wg\xc3\xc6\xdd\xb1\xce\x09O\xacJ\xbb\xaf\ +h4Tt#O\xae\xc9\xa9\xa7\xe0N\x12\xe6\xab\xac\ +\xd8@\xf9\x93\xeb#S\xd9\xea\xcd\xed\x91\x17\x83db\ +{\xcb\xf8\x07A\xb0\xbf!\x86\x88\xe0\x1b$*t\xe4\ +\x0a\xbe3\xf9\x08\x82\x7f\x080W\x02\xbe\xe01\xf7B\ +U\x06K\xa2\x16\x87%#QYWa\x9f\x0a\xe2,\ +\xed\xc2\xb5\xf1\xeea\x22\xc8\xb4u\xba\xe7l}\x1b:\ +5\x22*\xba\xcag\xc2\x9br\xc6\x12h\xfd*\xe1\xfd\ +\xdc#4O\x04S\xb2\xf4n\xafn\xc1\xc7=\xf5]\ +\xe7&a\x0f\x0c\x9cA1\x1bC!\x18b\x80\xaf\x0b\ +0\xf8\xb34\xb9\xb2q\x8b\x22D\xde\x078_\x80\xd7\ +!x\xc3\x0f\xe4\x0d7\xe7\xbd^\x8c\xf3\xfdR\xa6s\ +,\xb6\xb1\x1d\xe7t\x02M$\xeat\xb6l\xf4\xb1\xc3\ +\x22\x1f\xd2\x98H\xfb\x8fj4Tt\x95\xaf\x12\xde\xa4\ +3\x9a\xc4\xa4u\x0b\xefgNA\xf2P\x10\x98\xc9\xf3\ +\x98{\xb8T\xca\xfd\xbb\xc6$\xb6c\xdc\xdd\xd3\x0a\xf8\ +u\x10\x83H\xee.\xc0nzF\x0c\x08\xb0\x8a\x22\x8b\ +\x04X \xe4|\x08\xde\xf0\x02y\xa3\xd3\xf7\xe6\x97K\ +7\x1e\x14\xe9x\xe3\xc2&k\x98\x05\xa6\x00\x8e\xd0\xe2\ +\xa8M\x16\xdc)\x1dY\xefl\xb5rT\xd1U\xd6\xbf\ +\xe3\x1dIb\x12\x01g\x03\xef\xda-\x11\xe2v\xf8\x98\ +R\xaa\xe6\xe4mIl\x11\x0f\x9c]\x1d\x83]\x09\xd9\ +E\xc8\xed\x09lO\xc8\x8ek\xfe\xbbw\xd9\xdb\xe7Q\ +\x16\x13|_D\xde\x13\xf2}\x8a,\x0a \x8b\x5c1\ +\x0b\xbd\x9c\xbbH\x17?\xac\xf7J[\x02\xf6(\x10I\ +M!o\xdeU\xa0@\xa41\x9e\xf1\xff\xa2\xd1P\xd1\ +U6\x90\xeeF\xeb\x07\x961\xd3ITo\xe4?}\ +^D\xa6t\x18\xef\xaer\xb2\xef[~2zU\xc7\ +c\xdb\x04VPg\x8c\xd4\x91\xa6\x8e\x81\xd4\x09Y\x07\ +\xa0\x8e\x94~\x14\xd6\x01k\xfe\x9f\xa0\xb6Pw1\x05\ +\xe8\x06\xb0\x82\x22m\x00\xdb\x84\xd2\x06A\x9b\x80m\xa4\ +\xb4!@\x9b\x18.\x0f\xfc\xa0\xcd\xa7ic`/\xfd\ +\xfb\xdb]K\x86=\x05_g\xee&dG\xc6\xd9\x07\ +\xda\x16R \x8f\xfbR1\xa1\xb2\xb1\x82{[\xa7\xe7\ +\xfd,*\x85u*\xbaJ^\xe9L\xd9C\x1c\xf0A\ +\x12[o\xc2\xce\xab\x0b\x90\x19\x81\xc8\x1do\xaf\xf0\x1f\ +\xdfk:\xdc\xb0\xc6i\xe5h\xf4\xa6\x05c9\xb0\xed\ + \xde\x0b\x00<\x13T\x18\x91\x04\x00\x18Ho\x08\x82\ +\x80l\x07\x00;`W@\xd3\x0d\x00\xae\x9b\xfd$0\ +\xf0\xc5G\xa0;Q\x14\xd5\xa21\x16\xb3\x7fB\xa2\x11\ +\xe4^\x1a\x91\xcd\xce\xb4,\x09\xc0T<\x9d\xbb_\xa3\ +\xa1\xa2\xablf\xd5\xb0c\xfc{\x01\x0c\xdd,\x03{\ +\xca\xbd\xbe\xc8\x9ds\xde\xf4\x9f\xd6\x1d\x99\x82\x1e\xaa@\ +\xae\xadr\x86\x138\x19\x82\xff\xa7wk\xf3T\x84\x07\ +\x99\xd8\xe9z\x17\xe8\xeeVEW\xc9\x13\x0bG#\xde\ +?n\xdfDrl\x9e:\xc8\xfc\xc5\x87\xdczU\xda\ +\x7f\xa2Y/\xc8+(\xec\xbd\xda\xa3z\xdb\x07\xd8\x16\ +F\x82\xce\x8e\xb5\xbawi\ +4Tt\x15\xf4Tw\x15k\x98e8\x91\xe0.\x05\ +|\xd8\x97A\xe4\x81\x80\xe6\xfe\xf6\x5cn\xa6\x9a8D\ +\x9bU\x0d\xe8S\xe18\xdf#\xe4H\x80?&P\xab\ +Q)\xa8\xd8\xe6D\xf0\xfb\xce\xac{\xb9V\xd7\xab\xe8\ +*%\xc0\xe2$*\xfa\xc2\xb9\x8c\x06\xe7\x11\xb0\x0am\ +\x00A\xe0y\xa1<\xe0\x0af\xea90\x22\x916\xfe\ +Q\xad\xbd\x8fC|\x0f\xc2\xef\x818dCM[\x94\ +\xcd~\xdefJ\x80\x9f\x95\xaa\xe1\x8d\xa2\xa2\x1bi\xba\ +R\xf6~61\x89\xe0\x9eE\xecZ\xf2O\x01\x1f\x16\ +\xf0\xf1.\xe6\x9e*'3\x0ee\xedt$\xb1\xb5c\ +\x9c\xc3\x099\x1c\xe0\xf7\x09\xf4\xd5\xa8\x14Um_\xf5\ + g'\xd2\xfeL\x0d\x86\xa2\xa2\x8b\xd2\xbeZ\xb4m\ +\xc2\xb9\x98\xc0\xf9\xc5v\xf6\x11\xc0'\xf0\xbfA\x80'\ +\x02\x13\xccZ\xd9\xe1?\xa3\x1dM\xca\x835\xbd\x94\x0f\ +&\xe5 \x00\x07\x11\x1c\xa8Q\xe9\x91T\xf22\x88\x5c\ +:\xfbM/\xa3u\x14\x8a\x8an9-\xa2\xe3\xe2;\ +Z\x96\x7f\x0d\xc9\xfa\x9e<\x8b\x22\xf0\xf7@\xf0\x8c \ +\x98\x9d\xed\xf2\x9f\x8dz\xc7\x1c\x94H3\x81\x8b\x1b\x9d\ +A4r\x10\x80\x03\x01\x1c\xa2\xbd\x92{\x5cl]\x01\ +~\xdfI\xf7r\xcd\x16)*\xba(\xeb\x94\xf3A\x0e\ +\xf1[\x80\xdf,\x05\xe7\x1c\x8a\xbc.\xc0l\x11\xce\x16\ +\xf2\x85\xfb\xdaro\x1e?\x1d\x81\x8eT\x01\xe7@C\ +b\x80\xb1\x83!\x84\x0c!1\x04\xc0PM\x17\x97\xcc\ +\x99m\x00\xc8\x9f|\xcf\xba,1)\xfb\x8eFDQ\ +\xd1E8\x0aa\x86\xd7:\xa3\x09\x8c/\xb5+\x1d\x22\ +XM\xe2\x1f\x81\xe0E\x10s%\xc7\xb9WN\xce-\ +hV\x97,lj\x9a\x98\x08\xf6\xa1\xc8P\x12C \ +\x18B\xa2\x9fF\xa6$\xdd\xa4\xee\xcf\xfa\xfc\x85\xde\x89\ +WTtC\xca\xf2\x93\xd1\xabW/\xe7<\x02g\x97\ +\xb2\x15\x9f\x00\x1d\x14\xbc.\x90y\x10\xbc\xe6C\xe6\x05\ +\x9e\xffj\xe5d|\xa8\xa3\x08<5\x0c\xd6\xfe\xbb\xc5\ +v\x86\xc1 \xc3`\x10\x04\x83\x08\x0e\x12` \x89-\ +4B%\xbf\xbb}\xd2\x83\x5c\x5c\x91\xf6\xe6h4\x14\ +\x15\xdd\x08\xd0>\x06}\xe3q\xe7\x02\x0aN'QQ\ +F\xe7^m\x04\x16\x88\xc8;B\xbe\x0d\xc1\xdb~ \ +o\xfb\xe2\xbdS=\x11K\xc3\xf6\x82\x14\xafrvp\ +\x18\xech\x84\x03\x04\x1c@\xcaN$\x06\x89p\xf7B\ +\xb54T\x0a\xca\x5c/\x08.Nd\xfc\xc75\x14\x8a\ +\x8an\x04\xe9l\xaa\xd8\xd6\x16\xefb\x12\x8d\x04b!\ +\xf0\xa2]\x04p1 \x1f\x08\xb8\x88\x94\xc5\x81\x98E\ +A\x10|l|\xb3\xaf\xd2\xab?\x8a\x8a\xae\x82\ +|U\xd2nQe\x8f\x85\xc1y\x04\xb7\xd3\x88(*\ +\xb6X%\x82[|\xcf\xba\xbebR\xf7\xfb\x1a\x11E\ +EW\xc9;\x0b\x8e@l\x87\xed\x9d\x9f\xd0\xc8\x05\xc5\ +l\xaa\xa0(%dh\xf1\x16\x047-\xef\xf2Z\xd5\ +W\x5cQ\xd1UP\xac\xab/G\xd7\xc5~lA\xce\ +\x07\xb0\xbfFD\x09\xbfU#\xfe\xe2#\xf8\xddUi\ +\xff\x89f\xadDVTt\x15\xf4l;\xc1\xb3 <\ +\x96\x84\xad\x11Q\xc2\xd4\xf1G\x04\xb7\x0b\xf8\x87x:\ +\xf7\xb6FDQ\xd1UJ\x86\xce\xb1\xd8\xc6v\x9c\x14\ +\x813H\xd4iD\x942\xde\xd5\xce\x12\xc1m\xcb\xe0\ +N\xdf6\x83.\x8d\x8a\xa2\xa2\xab\x94,K\xebQ\xd5\ +\xa7\xd6>\x85@\x0a\xe4>\x1a\x11\xa5L\xcej\xdf\x06\ +1\xc5\xf5\x9c[*'v\xfdK#\xa2\xa8\xe8*\xe5\ +\xb7\xfbM\xd9C\x1c \x09\xf2d\x02U\x1a\x11\xa5\xc4\ +\xd2\xc7\xdd\x10y\xc0\x87d\xf4\xacVQ\xd1UB\xc3\ +\xca\xd1\xe8]\x15\xb7G\x92\x1c\x05`\xa8FD\xe9\xc9\ +\xf41\x89g\x03\xc1-\xed\xab\xdd\xbb\xea\xee@\xbbF\ +EQ\xd1UBK6\x15\x1bD\xc8\x09\x84\x8c&\xb9\ +\x83FD)\x8a\xd0\x02\xcf\x89\xc8t7p\xee\xd6\xf4\ +\xb1\xa2\xa2\xab \x8a=a\xf7\xdb\xcd\xfa\xbeex2\ +\xc0\x1f\xab\xdd\xa4\x92\xe7\xd4\xb1\x0f\xe0)\x88\xdc\x93\xcb\ +z\xf7VM\xc5G\x1a\x15EEWQ\x00,\xaaG\ +b\xcb\x9a\xd8\xf7\x8d\x09\xeaA\x0e'\xd0K\xa3\xa2l\ +\x8a\xd0R0GD\xa6\xe7\xe0\xddU\x95\xc1\x12\x8d\x8a\ +\xa2\xa2\xab(\xeb`\xc9HT\xd6V9?\xa4\xc8p\ +\x80Gh_Ye=B\xdb\x06\x91\x99B>\xd2\xdd\ +\xe9\xde\xb7\xc5\xadh\xd3\xa8(*\xba\x8a\x82MKA\ +\xef\xbb\xab\xbd\xbfe\xf8#R\x86\x93\xdcC\xa3\xa2\xbb\ +Y\x8a\xbc\x14\x08g\x06\x0cf\xbe\xd3\xe6?\xbd\xd7t\ +\xb8\x1a\x19EEWQ\xf2\xcc\xea\xa438N9\x1c\ +\xe4\xe1\x00\x0e\x22\x90\xd0\xa8D\xe2\x0e\xed\xbbB>&\ +\xc2\xc7\xba\xb2\xb9Y5S\xb1J\xa3\xa2\xa8\xe8*J\ +\x11Y\x9cDE-\xad\x83\x0d\xcc\xe1\x06r\x98\x80\x83\ +I\x18\x8dL(Dv1\x80\xe7@<\x19\xf8\xe6\xb1\ +xkn\x81FEQ\xd1U\x14\x94V\xfb\xc1\xaaj\ +k_#\xe6{\x868P\x88o\x13p42\xe5P\ +e,oB\xf0\x8c\x08g\xe7\x0c^\xacnq_\xd3\ +\xc8(\x8a\x8a\xae\x82\xf22\xe4H8\xd6\xfe\xb6\xc5}\ +E\xb8/\x80\xfd\xb4(\xab$\xee\xcc~\x0c\xca\x1c\x08\ +\x9e\xf5\x02<\xbb\xaa\xdb\x9b\xab-\xf2\x14EEW\x09\ +\x19\xcd\x00/j\x88\xedAG\xf6\x85\xe0\x9b\x86\xf8\x86\ +\x00{\x13\xe8\xad\xd1)\xd8\x0e\xf6]\x08^\x11\xf0U\ +\x11\xbe\x0a\xe2%\xed\xd6\xa3(*\xbaJ\x84\x85\xf8\xc2\ +d|'R\xf6!doB\xf6\x04\xb0'\xc8]5\ +5\xbd\xb1g\xb0|U\x80y\x10\xbc\xeaQ\xe6\xad\x14\ +\xefu\xed\xd0\xa3(*\xba\x8a\xb2^^\xab\x87\xb3k\ +mlW\x00{\x1a\x06{@\xb0\x0b\xc1]\x04\xb23\ +\xc8\xed\x18\xb1\xf9/\x02\x0f\x94\x0f\x08.\x14\xc8B\x02\ +\x0b\x83\x80\xff\xf4E\x16\xbaY\xefU\xbd\x1b\xab(*\ +\xba\x8aR\x10\x16\x8eF|\x1b+\xb6\x13l\x7f'\x8a\ +\xd9\x0eD\x7fB\x06\x00\xec\x0f\xcav\x10nK\xa2\xa6\ +\x8c\xd2\xc09\x00\xcb\x09Y&\xc2e\xa0,\x12\xe1?\ +!X\x18 X\x88\xc0^\xf8\xaa\xc9~04\x03O\ +G_QTt\x15\xa5\xe4Xp\x04b\xfdw\xa8\xe8\ ++\xbe\xd7\xcf\xb2\x82\xadL`\xfa\x91\xd2\x07@o\x01\ +{\x13\xd2\x1b@\x0d\xc0\xde\x04*\x01\xa9\x04\x11\x13A\ +\x15\x88\x18\x84\x9fo\x83\xe8\x90\xa8\xfe\x9cH\x0a\x04+\ +?}\x0a\xa5\x1d\x02\x8f@\x17\x80n\x90\x9e\xc8\x9a\xae\ +9\x94\x95\x10\x88\x80m\x00\x96\x91\xb2L\x84\xcbE\x82\ +\xe5>\xb8\xcc\xc0Z\xd6\xd1\x91\xfdX\xbb\xec(Jy\ +\xf0\x7f\xc0D\xab\xfd\x86#\xc3\xfe\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00o\xa6S\ +\x00i\ +\x00c\x00o\x00n\x00s\ +\x00\x10\ +\x03\xf0\x89\x87\ +\x00t\ +\x00e\x00s\x00t\x00i\x00u\x00m\x00_\x00l\x00o\x00g\x00o\x00.\x00p\x00n\x00g\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x9bK\x0b\xd0\x9d\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/src/testium/main_win/resources/fail.png b/src/testium/main_win/resources/fail.png new file mode 100644 index 0000000..28c94aa Binary files /dev/null and b/src/testium/main_win/resources/fail.png differ diff --git a/src/testium/main_win/resources/gray.png b/src/testium/main_win/resources/gray.png new file mode 100644 index 0000000..4e3d617 Binary files /dev/null and b/src/testium/main_win/resources/gray.png differ diff --git a/src/testium/main_win/resources/green.png b/src/testium/main_win/resources/green.png new file mode 100644 index 0000000..1d6cf24 Binary files /dev/null and b/src/testium/main_win/resources/green.png differ diff --git a/src/testium/main_win/resources/red.png b/src/testium/main_win/resources/red.png new file mode 100644 index 0000000..edfe105 Binary files /dev/null and b/src/testium/main_win/resources/red.png differ diff --git a/src/testium/main_win/resources/stop.png b/src/testium/main_win/resources/stop.png new file mode 100644 index 0000000..9662a29 Binary files /dev/null and b/src/testium/main_win/resources/stop.png differ diff --git a/src/testium/main_win/resources/success.png b/src/testium/main_win/resources/success.png new file mode 100644 index 0000000..2d6f360 Binary files /dev/null and b/src/testium/main_win/resources/success.png differ diff --git a/src/testium/main_win/resources/success_orange.png b/src/testium/main_win/resources/success_orange.png new file mode 100644 index 0000000..cae5554 Binary files /dev/null and b/src/testium/main_win/resources/success_orange.png differ diff --git a/src/testium/main_win/resources/testium_core_win.qrc b/src/testium/main_win/resources/testium_core_win.qrc new file mode 100644 index 0000000..27f0424 --- /dev/null +++ b/src/testium/main_win/resources/testium_core_win.qrc @@ -0,0 +1,102 @@ + + + testium_logo.png + testium_logo.svg + red.png + gray.png + green.png + fail.png + stop.png + success_orange.png + success.png + RIOV-2478BF.PNG + black/checkbox-checked.png + black/checkList.png + black/cycle.png + black/document-open.png + black/document-save.png + black/document.png + black/edit-clear.png + black/folder-open.png + black/folder.png + black/gears.png + black/git.png + black/gnome-settings.png + black/go-bottom.png + black/group.png + black/help.png + black/hide.png + black/image.png + black/info.png + black/input-mouse.png + black/JSON-LD.png + black/Label.png + black/let.png + black/media-playback-start.png + black/media-playback-stop.png + black/nespresso.png + black/note.png + black/pause.png + black/pause2.png + black/plot.png + black/question.png + black/report.png + black/results.png + black/sleep.png + black/system-log-out.png + black/terminal.png + black/text-x-python.png + black/verif.png + black/view-refresh.png + + + testium_logo.png + testium_logo.svg + red.png + gray.png + green.png + fail.png + stop.png + success_orange.png + success.png + RIOV-2478BF.PNG + color/checkbox-checked.png + color/checkList.png + color/cycle.png + color/document-open.png + color/document-save.png + color/document.png + color/edit-clear.png + color/folder-open.png + color/folder.png + color/gears.png + color/git.png + color/gnome-settings.png + color/go-bottom.png + color/group.png + color/help.png + color/hide.png + color/image.png + color/info.png + color/input-mouse.png + color/JSON-LD.png + color/Label.png + color/let.png + color/media-playback-start.png + color/media-playback-stop.png + color/nespresso.png + color/note.png + color/pause.png + color/pause2.png + color/plot.png + color/question.png + color/report.png + color/results.png + color/sleep.png + color/system-log-out.png + color/terminal.png + color/text-x-python.png + color/verif.png + color/view-refresh.png + + diff --git a/src/testium/main_win/resources/testium_core_win_rc.py b/src/testium/main_win/resources/testium_core_win_rc.py new file mode 100644 index 0000000..4481717 --- /dev/null +++ b/src/testium/main_win/resources/testium_core_win_rc.py @@ -0,0 +1,20692 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.10.1 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x07\x22\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xde\x01\x17\x07\x15\x05V\xde\x95w\x00\x00\x06\xafID\ +ATX\xc3\xc5\x96[h\x1b\xd9\x19\xc7\xffgFs\ +W4\x92,\xdf-G\xb6d\xc5j\x1c7\xa9\x0b\xb5\ +\xb1I\xec\x85\x90\x96\xdd4\x97\xb7\x12J\x09\x0d\xa1}\ +\xc9k\x9f\xca\xbaM\xa1/}I^K`\xa1\x0f\x0d\ +mi\x1f\xb6,8\xb4%\xe4\x02m\x82\xc9n\x89b\ +(vb{|\x91,\xd7c\x8f\xa4\x99\xd1\x5c\xfb\xb0\ +\x96*\xc9r\xbc\x9b.\xf4\xc0\xc7\xd1\x8c\xce\xcc\xff\xf7\ +\xfd\xcf9\xdf\x1c\xe0\xff\xdc\xc8\x97\x1cO\x03\x90\xf6\x83\ +\x01\x10\x00@\x01p\x018\x00,\x00%\x00:\x00\xff\ +\xab\x04`\x01\xb4\x018V\xbd\x11\x0c\x06\x03\xa9T\xaa\ +\xc3\xf7}\x7fii\xa9P*\x95\x9c\xba\xf1\x1e\x80]\ +\x00\xea>\xdc;\x03\x90`0\xd8n\xdb\xb6\x1c\x0a\x85\ +\xd8\xa9\xa9\xa9\xf7\xc2\xe1\xf0\x07\x0c\xc3\x8c\x03\x08\x09\x82\ +`\x03\x80a\x18\x0c\x00\xcd\xb6\xed\xa7\xaa\xaa~\xf2\xf4\ +\xe9\xd3\xbfi\x9a\xe6\x00\xf0DQ,\xa8\xaa\xba\xf7.\ +\x00\x81h4\xda-\x08\x82899\xf9\xddp8\xfc\ +\x93D\x22\x11\xccd2\x5c__\x1fDQ\x04!\x9f\ +?\xee\xfb>\xca\xe52\x14E\xc1\xc2\xc2Beuu\ +USU\xf5\x97\x8f\x1e=\xfa\xc4\xf3<\x8f\x10\xa2m\ +mmm\xb5\x9a\x96\xc3\x00\xe8D\x22\x11\xef\xe8\xe8\x88\ +\x8d\x8e\x8e\xfe:\x91Hd\xce\x9d;\xc7E\x22\x11h\ +\x9a\x86b\xb1\x08\xcb\xb2\xe0y\xde\x7f\xe7\x88e!I\ +\x12B\xa1\x10vww\xf1\xf8\xf1\xe3\xca\xca\xca\xcag\ +/^\xbc\xf8q>\x9f/\x02\xd0\xd7\xd6\xd66\x9a!\ +\xe8V\xae\xa4R\xa9\x9et:\x9d:q\xe2\xc4\x1f\xa7\ +\xa6\xa6\x06fff\x18]\xd7\xb1\xb9\xb9\x09]\xd7a\ +\xdb6|\xdf\xaf\x85\xe7y\xb0m\x1b\xe5r\x19;;\ +;`Y\x16\xa7O\x9f\x0ep\x1c\xd7\xed\xba\xeee\x9a\ +\xa6\x1fT*\x153\x1c\x0eS;;;\xfa[\x01\xc6\ +\xc6\xc6b===}\x89D\xe2\x0f\x17.\x5c\xe8\x18\ +\x1e\x1e\xa6\x14EA\xa9Tj\x10\xad\x17o\xbe\xd6u\ +\x1d\xc5b\x11\xc9d\x92D\xa3QIU\xd5\xf7\x1c\xc7\ +\xf9\xbd\xef\xfbt{{{%\x9f\xcf\xdb-\x01\xa6\xa7\ +\xa7\x03\x84\x90\xcet:\xfd\xd1\xc4\xc4Drxx\x98\ +Z^^>\x90q\xbdpu\x0d\x00h\x80\xb1m\x1b\ +\xaa\xaab``\x80\xd04\x1d4\x0c#\xa3i\xda\xc7\ +\x0c\xc3\xf0\x8a\xa2h-\x01\xd2\xe9t\xac\xaf\xaf\xef\xdb\ +\xf1x\xfc\x07\xd3\xd3\xd3\xec\xca\xca\x0a,\xcbj\x10j\ +%~\x98#\x9e\xe7A\xd34d2\x19j}}\xbd\ +\x8b\x10\xf2\xa9\xe38\x1b\xe9t\xdaY\x5c\x5c\xac`\xbf\ +\x88\x00\x00fgg)\x9e\xe7C\x92$}899\ +)\x14\x0a\x05\x98\xa6Y{\x91\xe7yp]\xf7\x80\xc0\ +Q\xff\x99\xa6\x89|>\x8f\xf1\xf1qA\x10\x84\x9f\x0b\ +\x82@X\x96\x95\xab\xba5\x80l6+\xb6\xb5\xb5}\ +\xbd\xad\xad-\x12\x8dF\xb1\xbd\xbd\xdd\xf0b\xd7uk\ +/\xae\xde\xabF\xbd`\xbd\x0b\xd5{\x85B\x01\xb2,\ +#\x1c\x0ewD\x22\x91\x0c\xcf\xf3\xec\xf4\xf4t\x00\xfb\ +\xa5\x14\x00\xc0\xf3\xbc\xc80\xcc\xfb\xc3\xc3\xc3\x82\xaa\xaa\ +p\xdd\xcf\x0b\x18!\xa4\xb6\xdf\xab}\xbd\xf5\xcd\xd7\xd5\ +\xb0,\x0b\x86a\xc00\x0c\x98\xa6\x09\x9a\xa6\xd1\xdb\xdb\ +\xcb\xef\xed\xed}\xc7\xf3\xbcloo\xaf\x08@\xab\x01\ +\xc8\xb2\x1cp\x1c\xe7\x5cgg'\xa5iZm\x8f\xd7\ +\x8b7\x03\xd47\xcf\xf3jb\xd5\xadZ\x0f\xa6\xaa*\ +\xba\xbb\xbb\xa9\x85\x85\x85iI\x92~\xc5q\x5c\xa3\x03\ +,\xcb\xd2\xb6m\xc7\x04A@.\x97\x83\xeb\xba\x07\xb2\ +o\x060M\x13\xa6i\xa2R\xa9\x1c\x10$\x84\xd4\xfa\ +\xfdr\x0dA\x10\xe0\xfb~\x87$I\xf0}\xbf\x11@\ +\x14E\xba\x5c.\x8b\x95J\x05\xdb\xdb\xdb`Y\x16\x14\ +E\x81\xa6\xe9Z\x86\xd5\x82c\xdb6\x1c\xc7ip\xa1\ +\x1e\xae\xbeU\xc7X\x96\x05\x8e\xe3\x00 (IRm\ +\xfd\xd5\x00\x8e\x1d;\xe6\x14\x0a\x05\xbfZ\xd14M\xab\ +e\xdd*\x9aE\xab\x19\x1f\xd6(\x8a\xaaN\xab/I\ +\x92o\xdb\xb6\xdb\xb0\x0bX\x96u\x09!E\xcb\xb2\xc0\ +\xb2l\x83\xed\x87\x05EQ\xa0(\xea\xc8q\x00\xc0q\ +\x1c,\xcb\x02\x80\xdd@ \x00\x9e\xe7\xdd\xe6)\xb0\x09\ +!9]\xd7\xa3\x92$\xc14\xcd\x86\xec\x8er\xe0m\ +\xf6\x13B \x8a\x22t]\x07M\xd3\x1b\xc1`\xd0\xa7\ +(\xcanp@\x10\x04\x83a\x98\x8f777\x9dh\ +4z\xe4\xdc\xb6\x02j5\xa6\xdab\xb1\x18666\ +,\x86a\xfe\xccq\x1c\x14E1\x1a\x00^\xbf~m\ +\xc4b\xb1\xbf(\x8abG\x22\x110\x0cs`\x8e\xbf\ +L\xd4?\xc70\x0cdY\x86\xa2(^{{\xfb_\ +eY\xae\xcc\xce\xce:\xcd\xa5\xd8;s\xe6\xcc\xa7\xb6\ +m\xbf\x5c__\xf7\xe3\xf1\xf8Wv\xf0\xec\xef\xef\xc7\ +\xda\xda\x9a\xef8\xce\xfc\xd8\xd8\xd8\x0a\x80\xe2\x81R\xbc\ +\x7f\xce\xdb\xed\xe9\xe9\xf90\x9b\xcdV\xa2\xd1(B\xa1\ +\xd0\xff,.\xcb2\x22\x91\x08^\xbe|Y\xe9\xef\xef\ +\xff\x19\xcb\xb2\xf6\xa5K\x97Z\x03\xcc\xcc\xcc8g\xcf\ +\x9e\xfd;\x80\xdf\xce\xcf\xcf\x9b\xe9t\x1a\xa2(\xb6,\ +\xb5G\xc5\xfe\xc2\xc6\xd0\xd0\x10\x9e?\x7fnP\x14\xf5\ +\xd1\xf9\xf3\xe7\xff%\xcb\xb2z\xd4\x91\x8c!dwtt\ +T=\xeaH\x86{\xf7\xee\x95\x1d\xc7y4??\xff\ +MUUc###\x0c\xcf\xf3\xd0u\xbdV\xa2\x0f\ +\xdbv,\xcb\x22\x1e\x8f\xa3\xab\xab\x0b\xcf\x9e=3s\ +\xb9\xdc?.^\xbc\xf8\xa3\xc1\xc1\xc1\xddT*\xf5\xef\ +\x03\x05\xaa\xc9\x0d\x02\x80\x22\x84 \x97\xcb\xbd\xbe|\xf9\ +\xf2\xf7\xf6\xf6\xf6~777W1\x0c\xc3\x1f\x19\x19\ +\xc1\xd0\xd0\x10b\xb1\x18$I\x02\xc7q\xe08\x0e\x92\ +$!\x16\x8b!\x95J\xe1\xe4\xc9\x93\xd0u\xdd\x9f\x9b\ +\x9b\xab\x94J\xa5\xdf\x5c\xbf~\xfd\x87\xc7\x8f\x1f\xdf\xba\ +u\xeb\xd6\xce\xbe\x1e\xa9w\xbe\xfe\xe2@?66F\ +n\xdf\xbe\x1d~\xf5\xea\xd5\xb7\xde\xbcy\xf3\x0b\x00_\ +\xeb\xef\xef'\x9d\x9d\x9d\x01Q\x14\xab\xb5\x1d\x96e\xa1\ +\x5c.#\x97\xcb9\x8a\xa2\xf8\x84\x90\x7f&\x93\xc9\x9f\ +\x8e\x8f\x8f/\xe4r\xb9\xdd+W\xae\x94\xeaN\xc3\x0d\ +=y\x0bD\xed\xf7\xcd\x9b7\x03W\xaf^\x95\x17\x17\ +\x17O,//_0M\xf3\xbc\xe7y]\x9e\xe7\x85\ +\x09!>!d\x8f\xa6\xe9M\x9e\xe7\x1f$\x93\xc9\x07\ +\xa7N\x9dZ\xcb\xe7\xf3\xc5\xbbw\xefj\x0f\x1f>t\ +\xeb\x04\x0f@\xb4\x028\xd4\x91\x89\x89\x09\xea\xda\xb5k\ +b<\x1e\xe7\x02\x81\x00\xc3\xf3|\x80\xa2(\xe2\xba\xae\ +\xe7\xfb\xbe\xa3i\x9a\xbd\xba\xbaj\xdc\xb9s\xc7\x5c^\ +^\xf6Ze\xdc\x0cr\x948\xde\x02t\xe8'\xe0\x90\ +\xbe\xa5\x0b\xef\x22\xf8E\x01\xbe\x10\xd0\x7f\x00o\x07\xfa\ +7;2Zj\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x04\xfc\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x086,\xe3}\x83?\x00\x00\x02\xfaIDA\ +Tx\xda\xed\x9bIh\x14A\x14\x86\xbf\x99I\x5c\x22\ +\x9a\xc0\xb8\x81AT\xc8\x8c\x11\x0f\x22\x22\xa2\x07AE\ +\x04\x11\xd4\x8b\x0a\x82\x9er\x11A\xc7$7/\x1e\x82\ +\xe0rP\x10\x17\x90\x88\x8a\x82\x9e\x15\x8d\x12\xbcx\x08\ +\x18A\x04\x17\x22\x1ed2\x09D\xd0\x80\xd1\xb8$\x1e\ +\xba\x02C\xa5k\x92\x0e]5\xd5\xdd\xf5C1\xf4\xeb\ +n\xaa\xff\x7f^\xd5{\xf5\xaa\x1b\x1c\x1c\x1c\x1c\x1c\x92\ +\x8bT\x85ss\x81\xd5@#0\xa7J\xcfW\x02^\ +\x03?Lv\xba\x0ex :\x1d\xb7\xa0\xfd\x04\xae\x01\ +\x0d\xba\x89\xa7\x81\x0e\xe0\x9f%\xc4\xe5\xf6N\xb7\x08\x9d\ +\x96\x12/oWt\x91/D\x80\xfc80\x02\xd4\x85\ +=\x09.\x06\xfa\x80\xf9\xd2\xb9_\xc0=\xe0\x8d\xe8\xd8\ +4j\x81\xe3@^\xb2o\x01^\x86\xd9Q\xbb\x8f\xd2\ +%`\xad\x05Q\xea\xa4\xcf\xb3\xed\x0d{\xe2\xdb\xedc\ +?\x08\xbc\xb5@\x80\xb1\x80\xa1{F\x024I\xb6O\ +\xc0\x8b\xa4$Bi`\x89d+&)\x13L\x8b6\ +\x95\xdb\xc5Z\x808\xa1\x05\x18\x02\xbe\x02\xa7\xa6sC\ +M\x8c\xc8\xe7D\xa2\x94\x11\xc7\xe7\x81\xa5@[\x94\x05\ +x\x04\xf4K\xb6\x1e\xc5\xb5\xf92\xf2\x13h\x15\xbf\x15\ +E\x90\xe3lwD=\xa0\x01\x18Td\x90\xe7\x92 \ +\x00\xc0f\xe0\xbbB\x84\x8bI\x10`B\x84a\x85\x08\ +\x17\x92 @ \x11LO\x82Y\xa0\xde@?\x03\xc0\ +1\xe0\xa6\x0f\xc7\x82\xa8y\xb4\x9b\xf4\x80\x05\xc03\xcb\ +\x96\xd6gL\x0ap\xda\xc2\xda\xc2_`\xa5\xa9Lp\ +\xb9\x85\xf3D\x06h4%\xc0}\xa1\xbaM\xf8\x08\xf4\ +\x98\x9a\x04\x9f\x03[\x81\xfd\x84\x5c\xd2\x9a\x22\xcb=\x0c\ +\xcc\xf29\xd7\x0f\xec\x01F\xe3\x1a\x063\xc0]\xc5\xd8\ +\x1f\x00\xd6\xc49\x0f\x08D>n\x02d\x80;A\xc8\ +\xc7M\x80N\x05\xf9\x22\x93\xab\xcb\xb1\x13`\xc3L\xc8\ +\xdb^\x11:\x8aW\xa4-o;\x15\xd7.T\xcc\xf6\ +\xdb\x80\x0fQ-\x88\xd4\x03\xab$\xdb<\xc5\xb5\xddx\ +\xfb\x87\xcd\xe2\xb8\x08l\xafD>n%\xb1Q`\x13\ +pDx\xf6-\xe0\xdbt\x92\x858a\x18\xb8\x1c\xe4\ +\x86\xb8U\x85\x03\xc3v\x01j}l\xa1\xee[\xa8\x86\ +\xc0\x22`\x07\xde\xeb1\xd9*\x91O\x01\x87|\xec\x9f\ +\xc3\xeeD^\xa5\x8d\x88\x05\x84\x8d\xf3\xc3\x10\xb0\x0c\xf8\ +\xad\xd3\x03\xea,\x1e\x12\x97\xc2$\xaf\xca\x04mm\x8f\ +uye\x14\xc8\x9f\xd5E>\xa5\xa8\xd4\x8c\x01\xd7\x81\ +.\x11[M\xe2\x04\x93_\xda\xc8\x8b\x0a\x0e\xa6<\xa0\ +\xa5\x8a\xe3\xfc\xaa\xcf\xf3\xe4L\xe6\x01\x83\xc0\x8d$%\ +B\x7f$\xdb\x17\xec+`j\x15\xa0$\xd9\x9a\x80\xd9\ +I\x12\xe0\x95\xcf\x12\xb4\x83\x90\xdf\xc6\xb2\x155\xc0C\ +`\x9fd/\x88\xa5\xe5S\x1f\x0f\xd1\x8df\x1f\xdb\x01\ +\xa0\x17x\x82\xb7\xa3\x13\xba\x08\xef#\x92\x0ft\xe9Z\ +\xc0\xad\x17k\x80(\x88\xb0QG\x18\xec\x05v\x89\x10\ +\x18\x85\xca\x8f6dE\xdaY\xb4\xf4\xdf\xbf\xad#\x15\ +V\xd9s\xc0\x0a\xbc\xbd}\x1b\xd0\x87\xf7\xf9\x8c\x83\x83\ +\x83\x83\x83CH\xf8\x0f\x89\xf9\x8e{\x81~\xfa1\x00\ +\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x1a(\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x04\x03\x00\x00\x00XGl\xed\ +\x00\x00\x09\xdczTXtRaw prof\ +ile type exif\x00\x00x\ +\xda\xadXm\x96\xeb*\x0e\xfc\xcf*f\x09\x80\x10\x82\ +\xe5\xf0y\xce\xdb\xc1,\x7fJ\x80\x9d\xeet\xfa\xbet\ +\xdfINb\x07; TR\xa9d3\xfe\xfb\xcf4\ +\xff\xc1\x8b8\x07\x13XR\xcc1Z\xbcB\x0e\xd9\x17\ +\x9c$\xbb_e};\x1b\xd6\xf7z\x85s\x09\xbf?\ +\x8d\x9b\xfb\x82\xc7\x10\xe1H\xfbg\x8a\xe7\xfek\xdc\xdd\ +\x13\xecC\xc1\x19\x7f\x98(\xb5s\xa1~\xbe\x90\xcf\x0a\ +>=Mt\x16\x22\xb5\xc8\xe3\xa4\x9f\x89\xf2\x99\x88\xfc\ +\xbe\xe0\xce\x04eo\xcb\xc6\x9c\xe4\xe3\x16\xea\xd8\xc7~\ +\xed$\xed\x8f\xd1/\x925\xf7=\xc9\xf3\xef \xf0^\ +g\x0c\x92\xf7\x83\x1cY|\x13\x85m\x00\xe9'\x18*\ +8I\xf8v\x14q\xa3\xc3[\xcfi}\xcb\xb1\x04\x0e\ +y\xe5\xa7\xfb\x95a\xd1\x1c\x07\x8a\xaf7}B\xe5>\ +s\xaf\xc7\xcd3Z\xc1\x9f[\xe8\xc9\xc9\xf1>\xbe\x1c\ +7\x8e_\xa3\xb2\x5c\xff1~\xd29\xf3\x9f\xc7k\xb5\ +m[\xf4\xe4}\xfd\xcc\xd9\xd3\x5c{\xc6.J\x88p\ +u<\x9b\xba\xb6\xb2\xcep_\xc5\x12\xbat20-\ +Z\xc1\x871\x85\xacw\xc6;!\xaa\x1bP\xebX\xaf\ +\xe2\xdd\x5cv\x1epM\x17\x5cw\xc5M7\xd6\xb1\xb9\ +\x06\x13\x83\x1f\xc6\x0bN\xbco\x9e\xd6`\x22\xf1\xd97\ +R\xfc\x82\xbe\xdd\xf4B\x99:\x90\xf5\xd46\xec\xe4o\ +[\xdcZ6\xdbf\xd6j\x09+w\x87[\xbd\xc3d\ +\x0e\x7f\xf9\xf1\xdb\xfc\xf4\x0fs\xaao\x9d\xb3\xe9\xf6\x15\ +\xec\xf2^\x9d\x0d3\x149\xfd\xc6m@\xc4\xcd\xe3T\ +^\x0e\xbe\xde\xcf/\xc5\x95\x80 \xab\x975E2\x1c\ +[\xf7\x14\x95\xdd\x83\x09h\x01M\xb8\x91q\xdc\xe9\xe2\ +\xa4\x9f\x09\xe0\x22,\xcd0\x06\xd9\x10\x1cPs\xc4.\ +:+\xde\x8bspd\x02@\x05\xa6#\x81|\x05\x02\ +\x8e\xd9w\x18\xe9\x03!\x8b\xc4'\xafK\xe3/\xe2\xd6\ +\xad\x9e=\x86\x0d\xc6Af@\x82)\x92\x00\x9bL\x05\ +`\x85\xc0\x88\x1f\x09\x091T\x9880sd\xe1\xc4\ +\x99K\xa4\x18\x22\xc7\x18%*)\x16!\x09FX\xa2\ +\x88$\xc9R\x12\xa5\x908\xc5$)\xa5\x9cJ\xf6\x99\ +@\x9a\x9cc\x96\x9cr\xce\xa5`\xcd\x82\x99\x0b\xfe]\ +pC)\xd5W\xaa\xa1\xb2\xa9\xb1JM5\xd7\xd2\x10\ +>-4n\xb1IK-\xb7\xd2}\xa7\x0e\xfe\xe8\xb1\ +KO=\xf72\xdc@(\x8d0x\xc4!#\x8d<\ +\xcaD\xa8M23L\x9eq\xcaL3\xcfr\xa3v\ +`\xfd\xf2\xfe\x01j\xee\xa0\xe6\x17Rz\xa3\xdc\xa8a\ +T\xe4\x9a\xc2)\x9d\xb0b\x06\xc0\xbc\x09\x0e\x88\x8bB\ +\x80\x80\xf6\x8a\x99M.\x04\xaf\xc8)f6{d\x05\ +{\x18\xc9\x8aYw\x8a\x18\x10\x0c\xc3y\x9e\xee\xc2\xce\ +\xf8\x8d\xa8\x22\xf7W\xb8\x19\x09\x9fp\xf3\xbfE\xce(\ +t?D\xee+n\xafP\xebZ\x86\xdaBlg\xa1\ +:\xd5\x12\xb2O\xffV|*\x83\xa9M\xabg\xa8y\ +\xf7\xd1<\x0f\xfc\xf6\xf8\x17\x13U7\x83\xef\x22\x13\x9e\ +\x19\xdd\xb89R\x1faf\xaa\xba=\xf8\x9d\xf2\x8cn\ +d\xae.\xf4Rcj\xb1\x03\xeb\xd6\xd6\x0c\x05U\xe6\ +\xe5\xdc\xe6M#\x9a`m\xees4\x9e\x95\xe6,$\ +\xb9\x0f\x89c\x0e\xea\x15\x8b\x19B\xc1(X\xb2\xcc\xe2\ +]\x09\xbdV\x0f\xb2\xf8\xe3\xe2\x8f#\xb9\xc9}\xed\xce\ +\x19\x19m\xae\xdd\x09\x96\xa8\x15\xbb\x8b\xa8\xee\xf8\xa6Q\ +\x81\xf0\x0c\xec\xb8;\x0cx\x5c\x06I\xa5\xb2g)\xa9\ +\xda2\x10,\x9a] `\xa3\xd5\x09\xe5\xb2\xe9\xf7\x8c\ +\xb1 FP\xf3@cH>\xdc\x82\xd1\xae[\xe9\x88\ +\xbb(\xd3\xe6\xdcy\x22'zb\xa7k\xb4\x81\x14\xd1\ +S\xa3\x8ac\x8d}\x7ft\x0d0\x8c:\x077\x9a\xa3\ +\x17\x81\xa7*\xab\xd7\x00\x0a\x15],#\xfb'\xe0\xcb\ +\xfa\xa3\x02K\xdd\xb3\xb33\x01\xa5\xc20\xeb\xdaF\xb7\ +\xbev\xe5\xde\x1b\xeeg\xb4\xcd\x03\xee\xe5\x90\xd0\x0a\xb5\ +\x16\xc2\xb0%\xc0Q{\xa2\x9a\xdbx\xe1\xf8\x85d\xf0\ +j\xe4\xacF\xa1\xd4y\x91=\x80\xd2\xf6\x8e?Qo\ +R86\xec\xabS\x8d\x05\x09^q9\x81\x0b\xf7\xc4\ +%\x8c\x9d$\xbaT\xce\xa1B\xd5\xb6Q8\x8c@M\ +\xbes2\x86\xf1_P\xc0\x18\xa5E(\xb0\xda\x90\xcb\ +\x97\xb1\x04^\xd33\xf3F:\x10\xa4\x89\xeb\x82\x05\x92\ +\xa0\xe6\x07\x9d>V\x84\xdf\xdaz\x0d\xa9\xc1\xa3\x06\x09\ +`\xb1F\xc1\x1aj\xd5\xb6V\xf7\x00\xdf\xfa\x01\x02+\ +\xc2\x94O~h\xd9\xda>G\xf4T'\xcb\xe7p\x0b\ +b\xd0tu:i\x10\xe6)\x1a\x84u\xc7G\xeb}\ +r\x14K\x11aZ\xb7qy\x05\xa4\xc6\xa4\xbd\x8e\xb7\ +\xdbLI3(\xb6\xc9Wu\x93\x1e}\xc9\x1d\xecS\ +f?\xf7\xb74\xe4\xdf\xf6o\xbe\xbfA\x17\xbb\xf7\x89\ +Pc\xc2\xb8\xf0q2~\xd9Gx\x84i\xa8=[\ +\xfb\xc5\xea\xb7\x8c6oX\xfd\x96\xd1\xe6\x0d\xab_\x18\ +\x0d\xf0\x11i\x1fc\xc2\xac\xd0CX\x00\x98I\x17{\ +i\xcc\x93^Q\xfe:AO'\xe8\x13\x82\x9e\x9bC\ +\xe1!\x06\x905\x03aQ\x86\xc4\xaaB\xa8C\x7f\x09\ +\x9cy\xd7\x07\xdf\xb8\xe0\xa6\xb6\xb5\xb5'j\x83u\xad\ +_\x15\xe2\x84\xefE\xa1r(4\x1f\x0a\xcd\x8eS\xe8\ +\xd8\xa7\xa1\x8c\x8d\xc4\xc2\xc7p\xc8\xf44\xe0\x9e\xe1\x94\ +\xb1J\xc2\x5c#\x08~\xb7\x08\xff\x82\xa7\xc0o\xc5\xf5\ +Efn-]\x9d\xb2j2\x05U7\xa4\xdc3\x12\ +\xcf\xf5t\xe7\xd4\x9d\xb1\xf1J\xadCg\xea\xfcCg\ +\xb4\x8b\x97(\x9b\x99e\xdc\x84RI\x8c\x0e\xa4\xce\xb8\ +\x80\x0dyRm\xa3\xd7\xd9\x5c\x05+\xb7Y\xe1\xa1\xd2\ +\xe1u\x88\x97Z)\x0de\xb1<\xf3\xe6c\xb6&\xc6\ +E\xcc\xac\xfd\xe2\x0f\x8f\xca\xa9\x05|\xb7,0\x13\xb5\ +a^\x06\xf4\xcb\x00Y\x06\xcc\x90>\xf3\xe9\x8e\xad\x97\ +\x84j\x10\x5c^\x15\x13\x08PZ\x99-!,7\xba\ +B\xf5\x0e\xe5\xa1\xf5\xc3\xed\x8a\xf1@@\xc7\xb7+R\ +07\x0c\x0a\x82\xd6\x92\x0dB\xc9\x0aA\x9e\x15q\xb3\ +x\xb0\xda\xfd\x07\x87I\x8a\x87i\xd9\xd2\xae=E\xd7\ +\xb0\x86\x15\xe45\xeb\x08Va.\x88\xe1\x94\xa42\x16\ +\x06\xc9>\xea\xd1E\x0a\x01?\xea\x95H0l\xa7\x91\ +\x09\xa3_y$+\x8fP<$W\xb8\xb0\x8c\x15\xa8\ +\x1e\xda\x8bfw\xf0!\x1c\x19W\xb2\x8e\xaeU`\xc0\ +\x7f\x11\xe5\xceW\x9b\x9b\x89\x0d\xde*\xd9\x0e\x96\x116\ + \xc1\xe5\xf4/\xc5\xf7\xeb\xd1\x5c'\x1a\xf1U\x8dP\ +\x13V\xe5\xbd\x8c\x80k\xb7\x09n\x9b\x10W\x06\x1d\x15\ +\x82(\xdd\x22\xc4\xec0\xadGc\xa5]t\xc5&l\ +\x16\xa28\x09\xd1D\x97\xba\xd5cG\xdd\xf9(\xd9>\ +\x02`^!\xf0\x15\x80\x22y\xf8\x88\xfc\x8dNg\xdb\ +\x8e\x1fX\xb8]\xe6\x99S\xa0V\xee\x9f\x12\xb5d\x12\ +m\x99$W\x8e\xbfT$\xe8\xc9\x916=\xa6\x1a\x0d\ +`\xba@\xfe\x01\xc1m\xaa\xfd\xc8\x06\xe6\x13\x1d4P\ +gB\x8d\xcc\xac\x1d\xc0\x18\x1bE\x8f\xbe>-\x15{\ +\xe9\xbck\x07\x1f\x84\x9e\xf9\xa0\xf4B\xf7\x88\x1fH\x0f\ +l\xab\xa5\x9e\x9e\x15\xf0\x1f\x05\xb0!\x8e\xda\xf1\xab~\ +\xa1O\x85Y\xad_\x98\xbcH\xa2X|\x87\xbe\x0d\x11\ +\xe1W\xdd\x92\x81\x06\x9f\x94\xdfa\xe7\xae\x99q\xd1\x80\ +f\xc6!\x81\xbeI\xc0hf\xa8\xac\x92\x12\x18\xcao\ +(\xf6\xaa\x09\xb7\xdf\xe2:VB\x03\xb5\xc8y\xd4\xa8\ +\xdc\x8c\xbds|p\xf3\x16\xec\xbf(\xd2\xefG\xb6\x06\ +\x0eJ@@36tQ\xb8\xff\xd2\xc3p\x89\x97j\ +yG\x96\xc64/\xcf\x99\xa1\x895\x1a\x1a\xb2\xc4B\ +\xda\xe1\xf54\x5cn\x921\x82\xc9\x9a\xe0F?V\x88\ +\xa0)A.\xf2\xa5\xc5?\xa98s\xc9\xb8\x8e{-\ +\xd4x\xa8\xc3\xa2\xcf\x05\xa3\x5c\xcba\xcbc\xa7\xb1\xae\ +w\xe4\xb5\xbaR\x1d\xa9\x1eTGB\xd5\xb2#D\xa8\ +\x07\xcb\xda\x93E\xf5\xa5f\xb4\x09\xb2\x14\xed2N&\ +\x11N\xa4\xaf\xbdb\xa7\x826\xda\xa0\x10\xc1C\x1f\x0a\ +Q\xbc\x0b\x91\x9cB\xe4N\x1d\xb8B\xa4!\x8c\x06\xfa\ +a\x96\x90)\xb4\x0d\x889\xc8\xe4N\x03=\xaf\xeba\ +C\xd8\xc3Ht\xd5\xcb\xd7\xcd\xe7UA\x97\x84U\xf8\ +1AW\xc1\x10\x1fa\xa9\xbc\x11(#\xa6\x83}\xb3\ + \x99#\xf19\x17\x89\x9d]\xf2\x80\xa6\x96\xa5\xdf\xdf\ +,\xd6\x88\x95\xc0l*\x02M\xbbpL\x13\xd3\xd9J\ +kp\xfc\x9b\x85Q+EG`!\xd7\x90\x19`\x82\ +@\x9c\x18\xa7\xbct{\xfdF\x96\xbfV\xe5\xe8\x09\xa7\ +\x09\x1a<\xe2?\xa6\xce\x96\x80j\xcdi`\xb75\xa7\ +\x85\xb5\xab\x85\x855\x9a\xdd\xd4w\x94\xc3\xd9\xd8\x19D\ +>\x922\xa3\x0b\xd2H>\xad\xe5\x0b\xf9\xa5\xebxl\ +m\x8c\x88\xae\x02e\xa1\x22\x19\xd2\x5cs\x89\xc1\x09\xea\ +\xfe,\xb9\xb2\x05\xed,JD\xff\x11P{\xf6\x0f\xf1\ +\x19\xa5\xf7U=\xbb+\x98\x96Q\xb3\x8a\xd87%\x0c\ +\x05\x09\xe1k;\x90\xec\xd9\xedN9h\x18\x22\x9f\x18\ +\x0b\xad\xc4>\xbd\x22:H\xf6\x105y\x19\xb0\x0c}\ +\x95I\xe0Q\xf1\xfa\xc0\xa7\xb5(\xe8\xf3\x98\x07S\xe1\xee\x94\xe0J\xecB \xa9#{\ +0\xfc\xc3\xd5\xeb\xa8\xde\xf8\xa2\xcb\xcdKa\xbe\x9f\x09\ +\xa4\xdc:\xfeXO\x84\xc3]\xe1\xfb\xf08q\xb4\xa3\ +\x1d>\xd1g{[\xaf\xa9\xc7\xe1v\x04\xbb\x85\x14\x18\ +\xa0\x1e\xf0\x86\xaf\xeb\xd9\x12\xb2\x1d\xa5\xb7\x82\xc0\xd2\xf5\ +\xa8\xc9\xfc\xbe\x0f\xfd\xccX\xe6\x0f\x94\xf5\xf5\xe1\xc8\x1f\ +\x9et\x99\xff\xcf\xc3\xc3\xdfN\xb4\x9e\xbe -\xfe\x07\ +\x85_snbF\xd2[\x00\x00\x01\x83iCCP\ +ICC profile\x00\x00x\x9c}\ +\x91=H\xc3@\x1c\xc5_S\xa5E*\x0av\x10q\ +\x08X\x9d\xec\xa2\x22\x8eZ\x85\x22T\x08\xb5B\xab\x0e\ +&\x97~A\x93\x86$\xc5\xc5Qp-8\xf8\xb1X\ +upq\xd6\xd5\xc1U\x10\x04?@\x9c\x1d\x9c\x14]\ +\xa4\xc4\xff%\x85\x161\x1e\x1c\xf7\xe3\xdd\xbd\xc7\xdd;\ +@hT\x98fu\xcd\x02\x9an\x9b\xe9dB\xcc\xe6\ +V\xc5\xd0+\xc2\xe8G\x08#\x88\xcb\xcc2\xe6$)\ +\x05\xdf\xf1u\x8f\x00_\xef\xe2<\xcb\xff\xdc\x9f\xa3W\ +\xcd[\x0c\x08\x88\xc4\xb3\xcc0m\xe2\x0d\xe2\xe9M\xdb\ +\xe0\xbcO\x1ce%Y%>'\x1e7\xe9\x82\xc4\x8f\ +\x5cW<~\xe3\x5ctY\xe0\x99Q3\x93\x9e'\x8e\ +\x12\x8b\xc5\x0eV:\x98\x95L\x8dx\x8a8\xa6j:\ +\xe5\x0bY\x8fU\xce[\x9c\xb5J\x8d\xb5\xee\xc9_\x18\ +\xc9\xeb+\xcb\x5c\xa79\x8c$\x16\xb1\x04\x09\x22\x14\xd4\ +PF\x056\xe2\xb4\xea\xa4XH\xd3~\xc2\xc7?\xe4\ +\xfa%r)\xe4*\x83\x91c\x01Uh\x90]?\xf8\ +\x1f\xfc\xee\xd6*LNxI\x91\x04\xd0\xfd\xe28\x1f\ +\xa3@h\x17h\xd6\x1d\xe7\xfb\xd8q\x9a'@\xf0\x19\ +\xb8\xd2\xdb\xfej\x03\x98\xf9$\xbd\xde\xd6bG@\xdf\ +6pq\xdd\xd6\x94=\xe0r\x07\x18|2dSv\ +\xa5 M\xa1P\x00\xde\xcf\xe8\x9br\xc0\xc0-\xd0\xb3\ +\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\xa1\xaeR7\xc0\xc1!0\ +V\xa4\xecu\x9fw\x87;{\xfb\xf7L\xab\xbf\x1f\xb2\ +\xe0r\xc0\x943\x99\xfd\x00\x00\x0dxiTXtX\ +ML:com.adobe.xmp\ +\x00\x00\x00\x00\x00\x0a\x0a \ +\x0a \x0a \ + \x0a \x0a\ + \x0a \x0a \x0a \x0a \x0a\x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ +\x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a\ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \x0a\x8e\x7f\x83%\x00\x00\x00!P\ +LTE\x00\x00\x00GpL\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x80\xac\xe3\xf5\x00\x00\x00\x01tRNS\ +\x00@\xe6\xd8f\x00\x00\x00\x01bKGD\x00\x88\x05\ +\x1dH\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\ +\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\ +\xe8\x08\x10\x09\x0d\x13hk+\x0d\x00\x00\x00\x85ID\ +ATH\xc7\xed\x94\xdd\x0e\x80 \x08\x85\x1dO\xc2\xce\ +\xfb?d+\xfaS@\xb2\x5c[K.\xd8\xc4o\x0a\ +z \xa5a\x87\x11\x00\xae\x05`\x01(\x96\x1a\xe0\xec\ +\x00\x03@\x13\xa0\x13\xcf\x016+\x1b\xc0\xeb\x00y\x00\ +_\x05\xe0\x01\xd8\xc5\xe2\x013\x83\x5c;\x85\x927\xc0\ +n\x86\x16 \xbc\xa2\x96dXf\x97\x97\xec\xf6\xdd\xe2\ +\xb0\xecY\x80\x04V\xc7\x1e \x99\xdd\x06N9\xf0'\ +\x1b'\x1cbO\xe7d8\x8a\xc3a\xaeeI\xb6N\ +\x7fl\x13\xd2\x971g\xe22\xb9|\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x07\xa2\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\ +\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\ +\xde\x01\x17\x07\x12\x0c`C\xbb\x14\x00\x00\x07/ID\ +ATX\xc3\xc5\x97mh\x1c\xc7\x19\xc7\xff3\xbb\xb7\ +\xb7w\xb7\xb7wZ\x9f\xac\xb3\xa2\x5c\xb1ld[\x96\ +\x0c\x09\x0e\xd4/\xd8\xbe\xbc4\x91\x8d\xeb\xb4\xa9\xc0\x04\ +5\xe08qI\xfa\xd1\x946\x04\x13A\x08\xb4\xfd\x10\ +h\x8dK?\x04\x0cI\x09\xa4\xb4`\xe2&\x02\xd7$\ +N\xfcB\x83cc\x8c.\xb2\x15\xcb\x8e,\xc9\xb2\xa4\ +{\xd3\xbd\xec\xed\xed\xcbL?\xec\xadt'\x9f-\xa7\ +-t`\xd8\x99\x87\xddy~\xf3\x9fg\x9e\x9d\x01\xfe\ +\xcf\x85|\xcf\xf7)\x00\x05@\x10\x80\x04@\xac\xd9\xec\ +Z5\x01\xe8\x00J\xffk\x00\x11@\x0c\x80\xea\x19\x12\ +\x80\xb8\x13\x889\x00\xce\x01\xe9\xdb.\x80W\x18\x80<\ +\x80l\xad\xfd\x9f\x03\x84\xc3a\xcd4Mm5\xe7\xf2\ +\xafl{G'\xe7{\x15`+\xe1\x5c\xa5\x8ab\x10\ +\xce\xa9S.K\x8c\x90B\x098w\x83\x90\x93\xbf\x17\ +\xc5/'\x08\xb1\x01\xd8\xd5ju\xf6A\x8a<\x08\x80\ +\xc6b\xb1x\x18P~\x9b\xcf\xff\xb4\xd3q~\x1dy\ +\xec1Y\xdb\xb9S\x0e\xf6\xf6B\x88\xc5@(\x058\ +\x07\xb7m8\xe94\xca\xc3\xc3\xc8\x9c9c\xcc_\xbd\ +j\xdc\x12\x84w\xde\x88F?.\x11\xc2\x0c\xc3\xc8\x16\ +\x8b\xc5\xec\xf7\x01\xa0\xed\xed\xed\x1d\xc9ju\xe5/s\ +\xb9\xe3Zww\xd7#\xaf\xbc\x22\xf9\x12\x09X\xb3\xb3\ +\xb0\xd2i0]\x07w\x1c\x801\x80\x10\x08\x81\x00\xc4\ +\x15+ \xb5\xb6\xc2\xbc}\x1bS\xc7\x8f\x9b\xb9\xd1\xd1\ +\xe1?j\xda/\xce\xc9r^\x10\x84\xd2\xf8\xf8\xf8\xdd\ +\xa5\x8e\x84f\xde\xbb\xba\xbaV\xed\xcf\xe5\xba\x0e\xe4\xf3\ +'~\xb0\x7f\x7f\xa2\xfd\xf5\xd7Ek~\x1e\xc6\xf5\xeb\ +\xb03\x19\xf0J\xc5u\xecU\xdb\x06\xabT`\xa7\xd3\ +\xa8NNB\x08\x85\x10\xdb\xbbW\xf0\x0bB\xdb\xc6\xaf\ +\xbf\xfe\x09\xf3\xfb?\x1d\x8fDLM\xd3h&\x93\xd1\ +\x1f\x08\xb0~\xfdzm\xbb\xe3\xb4\x0f\xcc\xcc\xfc\xb5\xf3\ +\xb5\xd7\xe2\xeaSO\x91\xf2\x95+\xb03\x19\xc0\x9b1\ +\xe7\xee\xd3q\x16l\xa4\x0e\xc6\xce\xe5`\xcd\xcc@\xdd\ +\xb6\x8d\x04W\xae\x0c=z\xe1\xc2\xd3\xa3\x9a\xf67]\ +Q\x84\xd6\xd6Vcff\xc6j\x0a\xb0k\xd7.Q\ +\x92\xa4\xb6\xdf\xa4R\x7fzt\xdf\xbe\x9e\xe8\x93O\x92\ +\xd2\xa5K`\x86\x01\xc2\xb9\xeb\xac\xde\xb9\x07S\x07\xe2\ +=\x99a\xc0\x9c\x9aBx\xf3f\x88@h\xc3\xc5\x8b\ +\xebNwt|\x22\xcb\xb2\x7fbbb\xbe~_/\ +\x14I\x92\xb4\x83\xdf~\xbbYmk\xdb\x1c\xdb\xbb\x97\ +\x96._v\xe5\xb6m\xc0\xb2\xdc\xc1-\xcb\xad\xb6\xbd\ +\xd8\xaf\x01\x10\xcff\xdb \x8c\x81W\xab(]\xbc\x88\ +\x15{\xf6\x88-\xf1\xf8\x0f\x0f\xdd\xbe\xdd#I\x92\xd4\ +\xd7\xd7\xa76\x05\xf0\xfb\xfd\xc1\xde\x5c\xee\xedG\x06\x06\ +\x94\xca\xd8\x18X\xb1\xb80\xe0\x02\x84\xd7\xae\xef\xd7\x03\ +y \x96\x05b\xdb`\x85\x02*\xa3\xa3h\x7f\xe1\x05\ +\xa5gn\xee\x1dUU\xe1\xf3\xf9\x94{\x00\xfa\xfb\xfb\ +\xe5\xfe\xe1\xe1\x9eP<\xde\xee\xef\xec\x849>\xbe8\ +x\xbdc\x0fh)L=T\x0d\x84\xd7l\xe6\xad[\ +\xf0'\x12\x08\xb6\xb4$~\x9cJ\xadU\x14E\x1e\x1c\ +\x1c\xa4^\x86sS\x9d(*\x89\xb9\xb9=\xb1\xdd\xbb\ +\x83\xd6\xf4\xb4;\x10\x00N\x08\x08Y\xdc\xad\x84\x10p\ +\xce\x01B\xdc\xb8\xe0\x1c\x1ch\x0cN\xce\xc1+\x158\ +\xb9\x1c\xd8\xfc\x1d\xe8\xea\xa2\xa6\x07\xe09&\xa4\xa1\ +M\x00\xd7\x99W8\x07,\x0b,\x9fw\x1d\xce\xcf\x83\ +U\xab\xe0\x9c\xbb\xb0\x9c\xc3\x9a\x98@p\xe3F\xaa|\ +\xf5\xd5\x8fT\xbf\xff\x0fz\xb5*5(\x10\x8dF)\ +u\x9c\x98\x10\x89\xc0\x19\x1b\x03\xb7,\x10B\xdclW\ +\x0fQ\x9b=8\x07/\x97\xc1k3d\xba\x0e0\xe6\ +\xaa\xc1y\x83j\x1c\x80],B\x8cD\x00\xc6V\xca\ +~?\x14Ei\x5c\x82@ @9\xe7\x0a)\x97a\ +_\xbf\x0e\xaa(\x80(\x02\xa2\x08\xc29\x98\xb7\xc6\x86\ +\x01\xae\xeb\x80a\xb8r{\x0e\x01\xc0K\xcdMR,\ +/\x97!\x84B\xa0\x8c)\xfeH\x04\xa2(\x8a\x0d\x00\ +\xaa\xaa2\x00\xe0\x95\x0aX&\x03\xe7\xee]\x10J]\ +\x15\x96T/\x16\x1a\x96\xa8&\xb5g\xe3\x0d\xde9 \ +\x08np\x02\x08\x85B\xe0\x9c\xdb\x0d\x00\x92$\xd9\xa0\ +\xb4\xc0t]\xa3\xc1 X\xa1\x00R\x9b\xc9}\x01\xee\ +\xf9\xb3\x90\xc5\xd8\xa8\x8f\x11B \x84Bpt\x1d\x9c\ +\xd2\xbc,\xcb\xf0\xfb\xfdv\xc36\xf4\xf9|&D\xf1\ +\x8e\x9d\xcdBhi\xb9'\xf8H\xdd`\x0b\xcaP\xda\ +\xd0nx\xd7\xfb\xb6f\x13ZZ`e2\x80(N\ +*\x8a\xc2\x14E1\x1b\x00B\xa1\x90nE\xa3\x1f\x97\ +\xc6\xc6l\x7f\x22\xe1\x0eZ\xa7\x00<\x05\xee\xa3\xcar\ +\xefJ\x89\x04\x8acc\xb6\xd5\xd2\xf2\x0fQ\x14q\xf3\ +\xe6M\xa3\x01\xe0\xc0\x81\x03F\xf1\xf1\xc7?\xc9|\xf3\ +\x8d!\xadZ\x05\xe2\xf3-\xaa\xd0\xa0r\x9d\x83\xfae\ +\xa9\x8f\x89\xfa%\x01@|>H\xf18r\xa9\x94Y\ +N&\x874M\xd3\x07\x07\x07\xd9=\xa9\x98\x1e>|\ +\x8d9\xce\xe5\xd2\xc8\x08\x02==\xcd\xd7\xb8N\xe2z\ +\xe7\xa4^\xfa%%\xd0\xdb\x8bb*\x05F\xc8\x05\xeb\ +\xa5\x97\xee\xaa\xaa\xaa7\xfd\x17\x08\x82P\xa8<\xfb\xec\ +\x91\x99/\xbe(Ik\xd6@lm]\xb2\x97\xdc-\ +\xc6\x81\x85$\xb3P\xbd\xc8_\x92\xa0\xc4\xb66H\xab\ +Wc\xfa\xec\xd9Ru\xdf\xbe\xb7$I2\x93\xc9d\ +\xa9)@2\x99\xb4\x83G\x8e\x5c\xb5B\xa1\x0f\xa7O\ +\x9e4\x94]\xbb \x84\xc3\xf7@x\xb5>\xd3-\xd4\ +\xfa\x09E\x22Pv\xec\xc0\x9d\x93'\x0d'\x1c\xfe\x8b\ +\xff\xf0\xe1\xc9@ \x90]\xf6Hv\xf9\xd4\xa9v\xfe\ +\xfc\xf3\x7f\x8fm\xd8\xb09\x96L\x8a\xfa\xf9\xf3\xb0\xa7\ +\xa7\x9bn\xc7E\xaeFE\xc4x\x1c\xc1\xed\xdb1\xf7\ +\xd9gv\xe6\xda\xb5\x7f\x05\xcf\x9f\xff\xb9%\x08\xf9M\ +\x9b6\xe5\x97=\x92\xfd\xf9\xfd\xf7\xcb\xf3\x81\xc0\x97\x85\ +\x8f>\xdafNM\xc5\xb4g\x9e\x11\x84h\x14,\x9b\ +\x05\xb7\xac\xa6\x87H\xcf1\x0d\x06\x11x\xe2\x09\xf8\xbb\ +\xbb1u\xe2\x849\xff\xddw\x97\x94\xf7\xde;\xa8\xf6\ +\xf4\xe4\xd7\xae]\x9b}\xe8Sq\x7f\x7f?}\xe3\xd5\ +W\xe3\xfc\xc5\x17\x7f'\xea\xfa\xcfV\xed\xdc)+\xbd\ +\xbd\xb0\xd3i\xd8\x93\x93`\x85\x02\xb8a\xb8\x83\xc82\ +\xa8\xaaB\xec\xe8\x80\xb8b\x05\x8a\xc3\xc3\xb8\xfb\xf9\xe7\ +&\x0b\x87?T\x86\x86\xde\x9e3\xcd\xfc\xd6\xad[\x1f\ +\xeaTL\x97\xf6O\x9f>\xad\x86\xdf}w\xab\xef\xcc\ +\x99\xb7\xa8\xe3l\x8atwS\xb5\xb3S\xf4i\x1ah\ + \xe0\xdeB*\x15X\xd9,Jccfnd\x04\ +L\x10\xae\xd0\xdd\xbb\x8f\xf07\xdf\x1cM\xa5R\xd9\x81\ +\x81\x81\xa5\xf7\x02\xd6\x0c\x80\xde\x0f\xe4\xd0\xa1C\xd2\xc0\ +\xc0\x80*\x7f\xf0A\x17N\x9dzFL\xa7\x9f\xe3\x96\ +\xd5\xc1m;\x0a\x00T\x14\xb3\xdc\xe7\xbb\x83\xd6\xd6O\ +\xed\xbe\xbe\x7f\xd2\x97_\xbe377W8z\xf4h\ +ahh\x885s\xec\xb5\x1f\x0a\xc0\xebo\xd9\xb2\x85\ +\x1e'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x13\x04>;\xfb\x22\x00\x00\x05\x09IDA\ +Tx\xda\xed\x9bkl\x14U\x14\xc7\x7f\x9dV0\xd0\ +\x87\xad\x16Z\xd4\x88(>\xd0(\xd5\x88\xf1\x89\x10\x12\ +\x88\xc6\x98h\xd4D\x13\xa3\x91\x0f\xa2\x11\xe3\x13\x12_\ +\x09~\x00\x12\x9f\x18\x88\x89\x96\xc4gc4DB\x0c\ +$\xb6\x82~h@\x89$*\x05|Pk(\xd8b\ +k%\x22\x0a\xad\xeb\x879\x83\x9bf\xce\x9d;\xbbw\ +g\xa7\xeb\xfe\x93\xbb\xed\xce\xcc=w\xce\xb9\xf7\x9e\xd7\ +=\x0be\x94Q\xc6\xff\x19\x15\x09\x8c1\x05\x98\x01\x9c\ +'\x7f\x1b\x81\x93\xa4\xd5\x01\x95\xc0\x10\xf0\xbb\xb4\xdf\x80\ +=\xc0.\xa0\x0b\xe8\x06F\xc6\x92P\xa7\x00w\x03m\ +@?\x90\xc9\xb3\x1d\x066\x02\x0f\x03\x17\xa4\x95\xe9\x89\ +\xc0B\xe0\x0b\x07\x0cG\xb5\x9f\x80\xa7E\xd0E\xc7T\ +`\xb5,\xddL\xc2\xed\x18\xb0\x0e\xb8\xaa\x18\x8c\xd7\x03\ ++\x80#E`<\xac}\x02\x5c\x98\x94\xd2\xbc\x1f\x18\ +H\x09\xe3\xd9\xed(\xf0\x0a0\xa1PV`\x12\xb0\x16\ +\xb8!\xa6\xd0\x86\x81\x9d\xc0\x0e\xe0G\xd1\xea\xfbd\xdb\ +\x0c\xc9\xfd:\xb1\x0aM\xc0\x99\xd2.\x06f\x8a~\x89\ +\x83]\xc0\x9d2\x9e3\xcc\x05\x0e\xc4\x98\x8d.`%\ +0\x0781\x8fq+E\x08K\x81\xcf\xc5\x1c\xda\x8c\ +\xff\x17\xf0\x90+\xe6o\x07\xfe\xb64Wk\x80\xcb\x0a\ +\xb8\x05\xcf\x00\x9e\x01z-\x05\xf1B\xbe\xbe\xce}\x16\ +R\xffS\x14\xe2\xa4\x04\x95\xf0x\xd1E6\x82X+\ ++)6\xee\xb5 \xfe10\xad\x88f\xb8\x06xI\ +\xf4H\x94\x10b\xe1J\xd9G\x89\xec1\x07\xb8\xd6b\ +5<\x1ag\x9f\xf5\x19\x08\xf5\x03\x97\xa7\xd0\x1b\x9d\x0c\ +|ix\xefa\xe0z\x1b\xb3\xf8\xa9\x81\xc8\xcf\x12\xd4\ +\xa4\x155\xc0\xe6\x88\xc9k0\x11\xb8\xcb\xd0\xf9\xd7\x94\ +3\x1f`\x02\xd0i\xe0\xe3u\xadc\x83a\xe9\x1f\x15\ +\xbd0V\xd0\x08\xf4(\xbc\xfc\xa3\xc5\x0f\xcf\xbaP \ +)\xc2,\x99\xb80~\xdaG?|\x82A\x8bv&\ +\x948)\x04V\x1aV\xc1\x8c\xecX\xe06\xe0\xfd\x10\ +\x02\x19\x91\xe4\xf6\x88\x81\xee\x01\x1e\x94\xf08\x09\x0c\x00\ +\x1f\x00\xcb\xc4$\x9b\x94\xe2\x1e\xa09\xe4\xde\x1a\xe0\x81\ +\xe0\xcbz\x83\xa3\x13\x85[\x8a\x18\x01\xbel\xf1~K\ +\x95\xbe\x03\x80\x87|\x0c*\x0f\xcd\xb7\x18`}\x11\x05\ +p\x9c\x09\x03\x1a\x0cN\xddLO\xc2\xce\xfa\x90\x8e\x83\ +@\x87e\xc4V,TZ\xe8\xa7A\xf1m\xc20\xdb\ +3\x98\xb7\x0e\xf1\x9e\xa2\xf0n\x11\x05\xf0\x9ee\xc6x\ +\x93\xe6\xf2{\xc0\xa9\xcaM\xdb\x84B\x1b\xb0\x18\xf8>\ +A\xc6\xfb\x80U\xc0\xe3\x96\xcf\x7f\xa5\x5c?\x0d\xa0U\ +\xd9\x1f\xb7R:\x98\xac\xf0\xf8\x83'i(\xcd\xd4\x94\ +\x0a\x02%?\x1aM\x1eP\x95B\xe5\x96\x142\x1ep\ +H\xb9\xd9TB\x8c6(\xd6\xa2\xcf\x13\x85\xa2\xed\x9b\ +R\xc1tM\x99z\x06\xed}I\x09\x09\xa0E\xb9\xde\ +\xeb\x01_+7\x17\x18\xf4\xc3h,\x16\x9f;W\x8f\ +\xae\x1fx\x0d\xa8-\x90\x00\x16(\xd7;\x83\x04\x82\x96\ +\xf6\xbe\xce\x82\xf8\x1d\x0e]\xdb\xb7\x0a\xc0|\xbd\xc1\x15\ +>\xbe2\xda\x95\x07>\xb2\x18`\x83C\x01\x1c\xc1O\ +y\xbb\xc4\x12e\xac\xc1\xec8b\xa1!n\x9e\x95`\ +0t\x18\x18\xe7\x90\xf9j`\xbf2\xd6\xea\xec\x07k\ +\xd1\x8f\xb87GD\x5c.\xc3\xe17\x1c\xcf\xfe\x8a\xa8\ +\x84H6\x9e7\xbc\xd8S\x16\x09\x91\x1dD\x1fPh\ +\xadG\xc6\x9f\xe8\x90\xf9+\xe2\xa4\xc4\xc0?\xda\xd2V\ +\xc100o\x0c\x99\xbdS\xf0+I\xb4\xd9\xbfZ\xeb\ +\xf8\x98a\x96\x0e\x08\xe1\xb4\xa3\x1a\xd8f\xe0\xa3\xd5\xd4\ +\xb9\x0asN}\xd5\x18`\xdet\xb0s\x1089\x8a\ +\xc8Y\x86\x14\xd9P\x8a\x83\xa4\xc6\x88\x99\x1f\x01n\xb4\ +%6\x0f\xbf\x08)\x8c\xd0\xf4\x142\x7f\x0d~\xd5\x89\ +I\xd1>\x11\x97\xe8w\x0a\xa1\x8bR\xc4x\x0d\xf0\xa2\ +a\xb2\x82\xf6f.{iDYF\xd5)`|<\ +\xb0\xc8b\xd6\x03\xf7\xba*\xee\x00\xb3\xb5\x14\x92\xf2|\ +\xad\xc4\x0ds\x0b\x1cF\x9f\x8e_$i\xc3x\x06x\ +\x95\xe8\xb4y(\x96+\x04\xd7\x85\xbc\xd0;!K\xf0\ +\x1b\xe09\x09\xa9\xbd<\x18\x0e\x8a\xa4\x96\x00[\xb0/\ +\x92:&}\x22Q\xa1\x5c\xeb\x22\xfc(|\x91\x84\xad\ +\x9e\xfc\xbf\x5c\xf6\xa1\x09\x87\xf0\x0b\x17\xb6\x03{\xc5A\ +\xf9\x05\xf8\x03\xbf\xbe\x08\xfe+\x9en\xc6/\x91\x9b&\ +\xba\xa6%\x87-\xd7-\x11\xea\xd6\x5c\xa5>\xc7`F\ +\x9a\xc4Bl#}\x85\x92#\xf8\xb5@u\xf9\xee\xb3\ +\x8d\xca\x00\xbd\xf8\x87%\x99\x14\xb6-\xae2X\xf3S\ +\xca\xa0\xe6\xd3w\x007\xb94-\xbb\xf3\x8c\xe5\xb7\xc6\ +PT\xb9\xb6\xfd\x12\xe6\x9e\xed\xda\xc4,#\xbfj\xed\ +\xa0^\xb0\x19\xbf\xc0r\x83\xf8\xde.\xb2D\xed\xe2\xc9\ +\xb5\xe0\xb8X# v3\xf0a\x0e\xc4\xf7\x01O\x02\ +o\x13~\xf2\x02p\x0ep\xa9\xc4\x18SE\xcb\xd7I\ +\xec?N\x9c\x94\xe0'3C\xf8?\x99\xd9-m\xa7\ +X\x8ea\x0a\x88\xf3\xc5T\xc5\x99\x95\x83\xc0#\xe4W\ +\x08\x9d\x1a\xb4\xc5`\xbc[f\xbc\x86\x12A\x15\xe6\x1a\ +\x1b$\x11\xb2I\x96\xf9g\xa2}K\x06\x15\xa2\xb4Z\ +\x81s\xc5\x85\xec\xc1?\xe4\xd8+\xca\xe7[\xca(\xa3\ +\x8c2J\x14\xff\x02\xca1Ka\xb9P\xe5\x0b\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00\x03\xe7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x07'\x04\x8eMO\xe8\x00\x00\x01\xe5IDA\ +Tx\xda\xed\x9b?R\x021\x14\x87?a\x06\x96J\ +/\xa0\xad\x9d\x95\x85\x8d\x9d'\xb0\xf70\x02j\xc1\x01\ +\xec\xbd\x82\x05cecamg\xe3\x0c\xa0P\xeb\x05\ +\xb00\xa0\xa3\x04\xf3\xe7\x05\x86\xe4\xfdf^CvB\ +~_\xde\xbel2\xbb\xa0R\xa9JW\x13\xb8\x04F\ +\xc0\x10\xb8\x00\x1a%\x01\xb8\x02\xa6\xbf\xa2[\x12\x80\xd1\ +\x02\x00\x83R\xcco\x19\xc3\xb6\xb6\xecU+\xbd\x00*\ +\x00\x05\xa0\x00\x14\x80\x02P\x00\x0a \xdb=N\x17\x18\ +\x9b\xe8\x98\xdf\xfehj\x89MV\x05\xf4\x17xj\x97\ +\x00\xa0\x01\xdcZ<\x8ds\x07\xb0\xcc\xfc\xd4l\xfc\xb2\ +\x05`K\xfb\x9fq\xbe.\x00M\xa0\x07LL\xf4l\ +\x05)\xa1\xf9\xfe\xba\x8a\xa0--\xef\x80\xd6\x0a\xd2~\ +\xf6_\x95\xad\x83\x94\x00\xfe\x1b\x5c,\x84h\xf3)\x01\ +\xb8\x0c.\x06\x82\x88\xf9T\x00\x5c\xcd\x87B\x103\x9f\ +\x02\x80\xafy_\x08\xa2\xe6\xa5\x01\x84\x9aw\x85 n\ +^\x12\x80\xebR\xe4rM\x15\xd1\x7f\xe5;p\x09\x00\ +>3\xe3zm+\xf5\xccK\x01\x08\x19\x9c\x0f\x84\xa4\ +\xe6c\x01T+H\xe9$i/\x01@bf$\x8a\ +f\x94\xf9P\x00M\xc1\x99q\xc9\x84$3\x1f\x03\xa0\ ++<8_\x08b\xe6C\x01L\x12\xa4\xa5\xcf\xa3\xb3\ +\x98\xf9P\x00\xe3D\x83s\xd9<\x89\x9a\x0f\x05\xd0I\ +\x98\x96\xb6\xdb\xa1\x9f\xc2|L\x11l\x03o\xc0\xab9\ +i\x91<\xe0H\xdd\xff\x5c\xfa~\x00\x85K\x01(\x00\ +\x05\xa0\x00\x14\x80\x02P\x00\x0a@\x01\x94\x0c\xe0\xc3\xd2\ +\xb6[\x0a\x80\x91\xa5\xed\xac\x04\x00u\xe0\x008\x5c\xd0\ +v\xcc\xf7\xab\xf3\xef9C8!\xfcTvSc\xfe\ +eL\x1dx1\x10\xf6\x0a\xaa}\xdb&\xc3k\xb3C\ +\x8f}\xe0\x11\xd8)l\x11\x18\xce\x96\xc1g\xe04\xf7\ +{\xfd\xbf\xe7\x80{\xe0\x08x(\xc8\xff\xcd\xb2\xc2x\ +\x0d<\x99\xac\xc8\xad\x08\x0e\xf8:\xd9n\xa0R\xa9\x8a\ +\xd6',\xa1\x88 1\xc4@\x97\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x000\xb5\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x02X\x00\x00\x02\x22\x08\x06\x00\x00\x00\x14\xdf\xb6{\ +\x00\x000|IDATx\xda\xed\xddy\xfc\xa5s\ +\xdd?p\xb3/\xccb\x88\x09\x83\x90\x9d\x10\xb2d\xa9\ +\xc8\xbe\xb5(KTd_SJ\xc9N\xa4\xa4DD\ +n\x94\x90%K\xcbHD\x88\xba\xa5\xb2\x97}\xdf\xd7\ +1\x9813\xf7\xfd\xber\xaa\xd9\xbe3\xe7\x9c\xefY\ +\xae\xcf\xe7z\xbe\x1e\x8f\xe7\xe3\xf7\xc7\xef\xf7\xbbo\xe7\ +:\x9f\xcf\xfb\xf3\x9a\xef9\xe7\xba\xe6\x98C$\xd3\x8c\ +\x1d3zhX>l\x19\xf6\x0b\xdf\x08'\x84S\xc3\ +\xb9\xe1\xe2p\x09\xd0V\x17\xd4\xf6[\xb1\xef\x8e\x0a\xfb\ +\x87\x8f\x87\xd5\xc3\xbc&\x95\x88Hy\x8bT\x9f\xb0D\ +\xd8>\x9c\x1cn\x0cO\x87\xff\x03J\xef\x85\xda\x9e\xfd\ +A\xd8%\xac\x10\xfa\x99l\x22\x22\xdd)T\xcb\x85\x83\ +\xc2o\xc2\x8b\x0e)\xc8\xca\xabal88\xac\x12\xfa\ +\x9a|\x22\x22\xed)Us\x86m\xc2\x8f\xc2c\x0e \ +\xa8\x94\xe7\xc29\xb5\x8f\x16\xe74\x11EDzW\xaa\ +\x06\xd6\xbe?U|\x87c\xbcC\x06\x08o\xd4\xbe\xdb\ +\xf5\xa9\xe2{\x96&\xa5\x88H\xfd\x1f\xff\xad\x13\xce\x0c\ +/9L\x80Yx-\xfc\xb863\xfa\x98\xa0\x22\x22\ +3\x16\xab\xe1a\xafp\x97C\x03h\xc2\xbd\xe1\x8ba\ +\x94\x89*\x22\x8a\xd5;\xb7Q8-\x8cs@\x00-\ +\xfa\x08\xf1\x8c\xe2\x870&\xac\x88T\xb1X\xad\x15~\ +\xe90\x00\xda\xe8Wa=\x1f\x1f\x8aH\xee\xa5\xaa\xf8\ +~\xd5\x86\xe1\xf7\x06?\xd0A\xb7\x84\x8d\x15-\x11\xc9\ +\xb1\x5c\x15\xc5\xeaO\x06=\xd0E\xb7\x86\x0dLd\x11\ +\xc9\xa1X\xad\x14\xae6\xd8\x81\x12\xb9\xb6xT\x8f\x09\ +-\x22)\x16\xabE\xc2ya\x8aa\x0e\x94Tq\x8f\ +\xbdEMl\x11I\xa1X\x0d\xa9=\xd0\xf5-\xc3\x1b\ +H@1\xab\x8eq\xd3R\x11)s\xb9\xda$\ +\x9c6\xfe\xff/\x15\xbe\x1f\xc6\xbb\xae0K\x1b;i\ +\xa5\x8a\xe5j`\xf8\xa7\x01@\x05\xfc:,\xdf\x86=\ +4\x7f85Lv\x8da\xa6\xee-\xfe\x02\xec\xc4\x95\ +\xaa\x15\xac\x83l~2W\xfc2\xf6\x93\xbd\xfd\x8bU\ +\x1d{\xe9\xfd\xe1.\xd7\x1bfj\x7f'\xaeT\xa9\x5c\ +\x15\xff\xf2~\xd5\xc6'c\x7f\x0c\x0bvpO\x0d\x09\ +g\xbb\xee0\x83\x97\xc3\xbcN^\xa9J\xc1:\xd3\xa6\ +'c\x17\x85\xc1]\xd8W\xc5\x8fF\x0ev\xfda\x06\ +\xa79y\xa5\x0a\xe5j\xe5\xda\x17~mzr\xf4\x93\ +\xb1]~TG\xfc\xef\xdf\xdb\xfb\x00\xd3(\xbe\xa7\xb8\ +\xa2\x13Xr.W\xc5\xbf\xb0\xff`\xb3\x93\xeb\xcf\xc2\ +C\xff\x92\xec\xb5ox?`\x1a\xd7\xb5\xfb\xfb\x90\x22\ +\xdd\x1c\xfa\xdb\xda\xe4d\xfck\xa5a%\xfb\xc7\xccE\ +\xde\x17\x98\xc6\xc7\x9c\xc4\x92c\xb9\x1a\x1a\x1e\xb5\xc1\xc9\ +\xd0\x842~\xfc\x10\xffM\xc3\xc3\xc3\xde\x1f\xf8\x8f\x87\ +\xbb\xf1\xfdH\x91v\x0f\xfb\xc3ln2uX\x89\xf7\ +\xdd\x86\xde\x1f\x98\xc6\xd7\x9c\xc8\x92S\xb9\x1a\x13\xde\xb0\ +\xb1\xc9\xd0#e\xff\x17q\xfc\xf7]\xea}\x82\xffx\ +=,\xe0d\x96\x5c\x0a\xd6\xf965\x99\xfa|\x02\xfb\ +o\x19\xbf\xdc\x85i\x9c\xebd\x96\x1c\xca\xd5\xda63\ +\x99z*\x0cLd\x1f^\xee\xfd\x82i|\xc0\x09-\ +)\x97\xab\xbe\xe16\x1b\x99L\x1d\x9d\xd0^\xdc\xd8\xfb\ +\x05\xd3\xb8\xb58\xa3\x9c\xd4\x92j\xc1\xfa\x9cML\xc6\ +\x96Ih/\xf6\x0f\xcf{\xcf`\x1a\x9fqRK\x8a\ +\xe5\xaa\xf8\x89\xf8360\x99\xba?\xc1=y\xae\xf7\ +\x0df\xf8\x98\x7f.'\xb6\xa46\xcc\x8f\xb7y\xc9\xd8\ +\x8f\x12\xdc\x93;{\xdf`\x06\xc78\xb1%\xa5A\xbe\ +D\xed\xe6\x8b6/\xb9\xda-\xc1}\xb9\xac\xf7\x0df\ +\xf0Vx\x8f\x93[R\x19\xe4~\xb1D\xee\xd6Ip\ +_\x0e\x18\xfb\xceCo\xbd\x7f0\xadK\x9c\xdc\x92\xc2\ +\x10\xdf\xc0f\xa5\x02\x16It\x7f>\xe6\xbd\x83\x99\xfa\ +\x90\x13\x5c\xca<\xbc\x8b_*\xdde\xa3R\x01\xc3\x12\ +\xdd\xa3\x7f\xf5\xde\xc1L\xfd=\xf4s\x92KY\x87\xf7\ +\xde6)\x1510\xd1=z\x8b\xf7\x0ez\xb4\xbb\x93\ +\x5c\xca8\xb8\xe7\x09/\xd9\xa0TD\xffD\xf7\xe9M\ +\xde;\xe8\xd1\x0ban'\xba\x94mp\x9fbs\xa2\ +`)X\x90\xb8\xef:\xd1\xa5LC{\xb90\xc9\xc6\ +D\xc1R\xb0 qo\xa7\xf4\x94\x06\xc9\xbb\x5c\xf5\x09\ +\xbf\xb5)Q\xb0\x14,\xc8\xc4\xd8\xe2ls\xc2K\xb7\ +\x07\xf6\x966#\x0a\x96\x82\x05\x99\xd9\xcc\x09/\xdd\x1c\ +\xd6\x83\xc2\x036\x22\x0a\x96\x82\x05\x99\xf9G\xaa\xbf\x16\ +\x96<\x0a\xd6\xc16!\x0a\x96\x82\x05\x99\xfa\xa2\x93^\ +\xba1\xa8G\x87q6 \x0a\x96\x82\x05\x99z5\xcc\ +\xe7\xc4\x97N\x0f\xea\x1f\xdb|(X\x0a\x16d\xeeG\ +N|\xe9\xe4\x90^5L\xb1\xf1P\xb0\x14,\xc8\x5c\ +q\xd6\xad\xec\xe4\x97N\x0c\xe8\xe2\xb6\x0c7\xdbt(\ +X\x0a\x16T\xc4\x0dn\xdb \x9d\x18\xd0\xdb\xd9l\xa0\ +`A\xc5|R\x03\x90v\x0e\xe79\xc3\xe36\x1a(\ +XP1\x8f\x86!\x9a\x80\xb4k8\x1fa\x93\x81\x82\ +\x05\x15\xf5\x0dM@\xda1\x98\x17\x0eo\xda`\xa0`\ +AE\xbd\x11\xc6h\x04\xd2\xea\xc1|\xa1\xcd\x05\x0a\x16\ +T\xdc\xf9\x1a\x81\xb4r(\xafcS\x81\x82\x05\xfc\xcb\ +Z\x9a\x81\xb4b \xf7\x0b\xb7\xdbP\xa0`\x01\xff\xf2\ +\xbf\xa1\xaf\x86 \xbd\x1d\xc8\xbb\xd8L\xa0`\x01\xd3\xf8\ +\xac\x86 \xbd\x19\xc6#\xc2\xb36\x12(X\xc04\x9e\ +\x09\xc35\x05iv\x18\x9fh\x13\xd1%\xc5\xfd\xd6.\ +.~\x16\x1dv\x0c\x1f\x0dk\xd7l\x14>\x13\x0e\x0f\ +\x97\x84'\x15\xac\xd2\x16\xacW\xc2\xd8p|\xd85l\ +V\xfbN\xe7Z\xe1#a\xdb\xf0\xe5pN\xb8\xdb\xba\ +'1\xc7k\x0a\xd2\xcc ^2L\xb4\x81\xe8\xa0\xfb\ +\xc2!a\xe9\xb1\x0d<\x96b\xec;\x8foZ.\x1c\ +\x1a\xeeW\xb0\xba^\xb0\x9e\x0f'\xd7\xcap\xff\x06\xff\ +\xfbF\x87/\x84\xeb\xed\x07\x120!,\xae1H\xa3\ +\x83\xf8*\x9b\x87\x0e)\x0e\xd3\x0d\xc7\xb6\xe0Y_\xc5\ +\x17O\xc3&\x1d(\x12\x0a\xd6\x8c\x1e\x08\x9f\x0f\x83[\ +\xf4\xdfZ\x94\xe6\xf3\xc2d{\x84\x12\xfb\x85\xc6 \x8d\ +\x0c\xb6\x8dl\x1a:\xe0\xc1\xdaGF}\xda\xb0\x86\x8b\ +\xbfjm=\xf6\x9d\xc7[(X\xed-X\xe3\xc2\x01\ +a@\x9b\xfe\x9b\x97\xf7\x17-Jn\x03\xcdA\xea\x19\ +f\x03\xc2=6\x0cmvZ\x98\xb3\x03\xebyX8\ +K\xc1j[\xc1\xba!,\xd2\x81\xff\xee\xe2/\x93{\ +\x87\xb7\xec\x1dJ\xe8\xaeTg\x82tv\x00\xefg\xb3\ +\xd0F\xc5\x01\xb9}\x17\xd6\xf5g[\xfc\x9dB\x05k\ +\xcc\xe8\x93:}\x1d\xe2\x7f\xdf*\xe1\x09\xfb\x88\x12\xda\ +[\x83\x90Y\x0d\xafy\xc3\xcb6\x0am\xf2ZX\xb7\ +\x8b\xeb\xbb\xf8\xd5\xda\xeb\x0aVK^\xff\x01]|\x0d\ +\x0b\x85{\xed'J\xe6\xc50J\x93\x90\x9e\x06\xd7i\ +6\x09m2\xbe\xf8UY\x09\xd6\xf8zc[\xf3\xd0\ +\xf2*\x17\xac\x03J\xf0:Fw\xf0\x17\xa3P\xaf\xef\ +k\x122\xb3\x81\xb5\x82_\xeb\xd0&S\xc2\x16%Z\ +\xeb\x9fP\xb0\x9avb\x89^\xcb\xe2\xe1\x05\xfb\x8b\x12\ +\x99T\xfc\xfaU\xa3\x90\xa9\x07U\xf1\x8b\xab\xebl\x0e\ +\xda\xe4\xf0\x12\xae\xf9\xe3\x15\xac\x86]\x1b\xfa\x95\xec\xf5\ +|\xd4\xfe\xa2d~\xdb\x8e_FK\xba\x05k\x1b\x9b\ +\x826\xb9\xa5\x8ce\xa4\xf6k\xd9\xbf(X\x0d\xdd\x91\ +}\xc1\x92\xbe\xa6\xef\xdag\x94\xcc\x96\x9a\x85\x14\xc3i\ +px\xc8\x86\xa0j\x7f.\xaf\xfd\x22m\x8a\x82U\x97\ +=J\xfc\x9a\xe6\x0c\x8f\xd9o\x94Hq\xd3\xddA\x1a\ +\x86\x82u\x88\xcd@\x9b\xfc0\x81\xf5\x7f\x8e\x825[\ +w\x97\xed\xa3\xc1\x99\xbc\xae\x1d\xec7J\xe6`\x0d\xa3\ +\xda\xe5j\x81\x16\xfel\x1d\xa6\xf6v\xf1s\xfa\x04\xf6\ +\xc0bM\xfe\xb8\xa3J\x05\xeb\xd3\x09\xbc\xae~\xe1\x1f\ +\xf6\x1d%\xbb-\xcdhM\xa3\xba\x05\xeb\x1c\x9b\x806\ +9?\xa1}p\xa9\x82\xd5\xa3\xc7Sy\xad\xf1\xdf\xb9\ +\x97}G\xc9\xfcX\xd3\xa8f\xb9Z\xdd\xe2\xa7\x8d>\ +\x94\xd0^\xd8L\xc1\xea\xd1\xd1\x09\xbd\xb6\x11\x1e\xa5C\ +\x09oQ\xb3\xaa\xc6Q\xadrU<\xd7\xebV\x8b\x9f\ +6y\xb6\xec\xdf\xd9\x99n?\x0c\xac\xfdJN\xc1\x9a\ +\xd1\x0a\x89\xbd\xbe+\xed?J\xe6f\xb7m\xa8V\xc1\ +\xda\xd1\xa2\xa7\x8d\xceMpO\x5c\xa2`\xcd\xe0\x89\xd4\ +\x0e\x86\xe2\xd7\x8e\xf6\x1f%\xb4\x9d\xe6Q\x8dr5W\ +x\xd2\x82\xa7\x8d\xbe\x90\xe0\xbe\xd8O\xc1\x9a\xc1E\x09\ +\xbe\xbe\xe5\xec?J\xa8\xf8.\xe3P\x0d$\xff\x82u\ +\xb4\xc5N\x9b\xad\x9a\xe0\xbeXW\xc1\x9a\xc1W\x13|\ +}\xfd}\x0f\x8b\x92:B\x03\xc9\xbb\x5c-j\xf8\xd0\ +\x01#\x12\xdc\x1b\xefV\xb0f\xf0\xb1D_\xe3\xdd\xf6\ + %T\x1f>X\xbby\xed\xa80<\xbc+,\x156\ +\x08\xfb\x86\xf3<\xd6\xa7\xf2\xd6\xd1H\xf2*W\xfdj\ +C\xc0\xe2\xa6\xdd\x1eMx\x9f<\xab`M\xe3\xbd\x89\ +\xbe\xc6\xf3;\xb0\xce\xef\x0a\x07\x8cm\xe2\x01\xd8\xc5/\ +3\xc3J\xe1[\xe193\xa3rnO\xe9662\ +\xfb\x0d\xbd\x9bEM\x87<\x92\xf0>yF\xc1\x9a\xc6\ +\x12\x89\xbe\xc6\x9f\xb6q}\xdf\x12>\xda\xaa\xdbW\xc4\ +\xff\x9c\xc1a\xf7\xda\xaf\xcc\xcc\x8f\xea\xd8E3\xc9\xa3\ +\x5c\x8d\x0c\xcf[\xd0(X\x0a\x96\x82\xd5\xab\x9b\xe7n\ +\xd7\xae\xfb\x82\x15?\xe1\x0fG\x8d}\xe7\x19\x9e\xe6H\ +5n\xc6\x99\xe8k\xfc\xa1Y\ +S\x19;j<\x9d\xdd\x5c\xc3\xc2S\x16\x1e\x0a\x96\x82\ +\xa5`\xf5\xaa`m\x9c\xe8k\xfc\x96YS\x19O\x86\ +\xb94\x9f\xcem\xae\xe3,:\x14,\x05K\xc1\xeau\ +\xc1\xda \xd1\xd7x\xacYS)\xc7h>\x9d\xd9X\ +\x8b\x85\x09\x16\x1c\x0a\x96\x82\xa5`U\xb6`\x1dc\xd6\ +T\xca[aQ\x0d\xa8\xfd\x1b\xeb2\x8b\x0d\x05K\xc1\ +R\xb0\x14,*\xe5b\x0d\xa8\xbd\x9b\xea\xc3\x16\x19\x0a\ +\x96\x82\xa5`)XfM%\xad\xaf\x09\xb5gC\xf5\ +\x0fwX`(X\x0a\x96\x82\xa5`\x995\x95\xf4\xf7\ +\xd0O#j\xfd\x86\xda\xd3\xe2B\xc1R\xb0\x14,\x05\ +K\xc1\xaa\xb4\xdd5\xa2\xd6n\xa6Q\xe1\x05\x0b\x0b\x05\ +K\xc1R\xb0\x14,\x05\xab\xd2\x9e\x0f#5\xa3\xd6m\ +\xa6\xefYT(X\x0a\x96\x82\xa5`)X\x84\x934\ +\xa3\xd6l\xa4e\xc3$\x0b\x0a\x05K\xc1R\xb0\x14,\ +\x05\x8b\xf0vXZC\xea\xdd&\xea\x13\xae\xb6\x98P\ +\xb0\x14,\x05K\xc1R\xb0\x98\xca\xaf\xb5\xa4\xdem\xa2\ +\xcd-\x22\x14,\x05K\xc1R\xb0\x14,fbSM\ +\xa9\xb9\x0d40\xdco\x01\xa1`)X\x0a\x96\x82\xa5\ +`1\x13\xff(\xba\x82\xc6\xd4\xf8\x06\xfa\x92\xc5\x83\x82\ +\xa5`)X\x0a\x96\x82\xc5,\x1c\xa815\xb6y\xe6\ +\x0f\xafZ8(X\x0a\x96\x82\xa5`)X\xcc\xc2+\ +a>\xcd\xa9\xfe\xcds\xa6E\x83\x82\xa5`)X\x0a\ +\x96\x82E\x1d\xce\xd0\x9c\xea\xdb8\xab\x84)\x16\x0c\x0a\ +\x96\x82\xa5`)X\x0a\x16u(:\xc3J\x1a\xd4\xac\ +7Mq[\x86\x1b-\x16\x14,\x05K\xc1R\xb0\x14\ +,\x1apC\xd1!4\xa9\x9e7\xcd\xa7,\x12\x14,\ +\x05K\xc1R\xb0\x14,\x9a\xf0IMj\xe6\x1bfh\ +x\xd4\x02A\xc1R\xb0\x14,\x05K\xc1\xa2\x99\xf9\x1b\ +\x86hT3n\x98\xc3,\x0e\x14,\x05K\xc1R\xb0\ +\x14,z\xe1P\x8dj\xda\xcd2&\xbcaa\xa0`\ +)X\x0a\x96\x82\xa5`\xd1\x0b\xe3\xc3B\x9a\xd5\x7f7\ +\xcb\xcf,\x0a\x14,\x05K\xc1R\xb0\x14,Z\xe0\xa7\ +\x9a\xd5;\x1bem\x8b\x01\x05K\xc1R\xb0\x14,\x05\ +\x8b\x16Z\xb3\xea\xe5\xaao\xb8\xcdB@\xc1R\xb0\x14\ +,\x05K\xc1\xa2\x85\xfe\x5ct\x8c*\x17\xac\xcfY\x04\ +(X\x0a\x96\x82\xa5`)X\xb4\xc1\xceU-W\xc3\ +\x1b\x1c\xe8\xa0`)X\x0a\x96\x82\xa5`Q\xaf\xa7\xc3\ +\xb0*\x16\xac\x13\xbc\xf9(X\x0a\x96\x82\xa5`)X\ +\xb4\xd17\xabV\xae\x96\x08\x13\xbd\xf1(X\x0a\x96\x82\ +\xa5`)X\xb4\xd1\x84\xb0x\x95\x0a\xd6\xe5\xdet\x14\ +,\x05K\xc1R\xb0\x14,:\xe0\x17U)W\x1bz\ +\xb3Q\xb0\x14,\x05K\xc1R\xb0\xe8\xa0\x8f\xe4^\xae\ +\xfa\x87\xbb\xbd\xd1(X\x0a\x96\x82\xa5`)Xt\xd0\ +\x9d\xa9\xce\xadz7\xc5>\xded\x14,\x05K\xc1R\ +\xb0\x14,\xba`\xaf\x5c\xcb\xd5<\xe1%o0\x0a\x96\ +\x82\xa5`)X\x0a\x16]\xf0b\x18\x95c\xc1:\xc5\ +\x9b\x8b\x82\xa5`)X\x0a\x96\x82E\x17}?\xb7r\ +\xb5|\x98\xe4\x8dE\xc1R\xb0\x14,\x05K\xc1\xa2\x8b\ +\x8a.\xb2\x5c.\xe5\xaaO\xf8\x9d7\x15\x05K\xc1R\ +\xb0\x14,\x05\x8b\x12\xf8m\xd1Mr(X[y3\ +Q\xb0\x14,\x05K\xc1R\xb0(\x91-R/W\x83\ +\xc2\x03\xdeH\x14,\x05K\xc1R\xb0\x14,J\xe4\xfe\ +\xa2\xa3\xa4\x5c\xb0\x0e\xf6&\xa2`)X\x0a\x96\x82\xa5\ +`QB_NuX\x8f\x0e\xe3\xbc\x81(X\x0a\x96\ +\x82\xa5`)X\x94\xd0ka\xfe\x147\xc0\xd9\xde<\ +\x14,\x05K\xc1R\xb0\x14,J\xec\xac\xd4\x16\xffj\ +\xde4\x14,\x05K\xc1R\xb0\x14,JnJx\x7f\ +*\x0b\xbf\xb8-\xc3\xcd\xde4\x14,\x05K\xc1R\xb0\ +\x14,\x12pS\x12\xb7m\x88\xff\xc8\xed\xbcY(X\ +\x0a\x96\x82\xa5`)X$\xe4\xd3e_\xf4s\x86\xc7\ +\xbdQ(X\x0a\x96\x82\xa5`)X$\xa4\xe8.C\ +\xcb\xbc\xe8\x8f\xf4&\xa1`)X\x0a\x96\x82\xa5`\x91\ +\xa0#\xca\xba\xe0\x17\x09oz\x83P\xb0\x14,\x05K\ +\xc1R\xb0H\xd0\x1ba\xe12.\xf8\x8b\xbc9\xa0`\ +)X\x0a\x96\x82E\xc2.(\xdbb_\xc7\x9b\x02\x0a\ +\x96\x82\xa5`)Xd`\x9d\xb2,\xf4~\xe1vo\ +\x08(X\x0a\x96\x82\xa5`\x91\x81\xa2\xd3\xf4+\xc3B\ +\xdf\xd5\x9b\x01\x0a\x96\x82\xa5`)Xdd\x97n/\ +\xf2\x11\xe19o\x04(X\x0a\x96\x82\xa5`\x91\x91g\ +\xc3\xf0n.\xf2o{\x13@\xc1R\xb0\x14,\x05\x8b\ +\x0c}\xab[\x0b|\xc90\xd1\x1b\x00\x0a\x96\x82\xa5`\ +)Xd\xa8\xe88\xef\xed\xc6\x02\xbf\xca\xc5\x07\x05K\ +\xc1R\xb0\x14,2ve\xa7\x17\xf7\xc6.:(X\ +\x0a\x96\x82\xa5`Q\x01\x1buja\x0f\x08\xf7\xba\xe0\ +\xa0`)X\x0a\x96\x82E\x05\xdcSt\x9fN,\xec\ +\xfd]lP\xb0\x14,\x05K\xc1\xa2B\xf6m\xf7\xa2\ +\x9e7\xbc\xecB\x83\x82\xa5`)X\x0a\x16\x15Rt\ +\x9fy\xdb\xb9\xa8Os\x91A\xc1R\xb0\x14,\x05\x8b\ +\x0a:\xb5]\x0bz\xc50\xd9\x05\x06\x05K\xc1R\xb0\ +\x14,*\xa8\xe8@+\xb4z1\xf7\x09\xd7\xb9\xb8\xa0\ +`)X\x0a\x96\x82E\x85][t\xa2V.\xe6m\ +\x5cTP\xb0\x14,\x05K\xc1\x82\xd1[\xb7j!\x0f\ +\x0c\xf7\xbb\xa0\xa0`)X\x0a\x96\x82\x05\xa3\xff\xd1\x92\ +\xdb6\xc4\xff\x90}\x5cLP\xb0\x14,\x05K\xc1\x82\ +\xff\xd8\xb3\xb7\x8bxpx\xca\x85\x04\x05K\xc1R\xb0\ +\x14,\xf8\x8f'\xc2\xa0\xde,\xe2\xbd]DP\xb0\x14\ +,\x05K\xc1\x82\x19\xec\xde\xec\x02\xee\x17\x1ev\x01A\ +\xc1R\xb0\x14,\x05\x0bf\xf0@\xd1\x95\x9aY\xc0~\ +9\x08\x0a\x96\x82\xa5`)X\xd0\xb3-\x9aY\xc0\xee\ +{\x05\x0a\x96\x82\xa5`)X\xd0\xb3\xab\x1b]\xbc\x8b\ +\xbbh\xa0`)X\x0a\x96\x82\x05\xb34%,\xda\xc8\ +\xe2=\xd6E\x03\x05K\xc1R\xb0\x14,\x98\xad\xa3\xea\ +]\xb8\xc5cq\x1eq\xc1@\xc1R\xb0\x14,\x05\x0b\ +f\xeb\xc1\xb1\xf5<>'\xfe\x1f\xad\xe5b\x81\x82\xa5\ +`)X\x0a\x16\xd4m\xb5z\x16\xee\xc9.\x14(X\ +\x0a\x96\x82\xa5`A\xddN\xac\xe7\xe3\xc1\x87\x5c(P\ +\xb0\x14,\x05K\xc1\x82\xba\xfds\x96\x1f\x13\xc6\xff\xe5\ +\xf2.\x12(X\x0a\x96\x82\xa5`A\xc3\x96\x99\xd5\xa2\ +\xfd\xb2\x0b\x04\x0a\x96\x82\xa5`)X\xd0\xb0\x03g\xb5\ +h\xafq\x81@\xc1R\xb0\x14,\x05\x0b\x1a\xf6\xeb\x9e\ +\x16\xec\xa0\xf0\x96\x0b\x04\x0a\x96\x82\xa5`)X\xd0\xb0\ +\xf1a\xe0\xcc\x16\xec\xda.\x0e(X\x0a\x96\x82\xa5`\ +A\xd3\xd6\x98\xd9\x82\xfd\xaa\x0b\x03\x0a\x96\x82\xa5`)\ +X\xd0\xb4/\xcfl\xc1^\xe1\xc2\x80\x82\xa5`)X\ +\x0a\x164\xed\xb2\x99-\xd8\xa7\x5c\x18P\xb0\x14,\x05\ +K\xc1\x82\xa6=6\xfdb]\xd0E\x01\x05K\xc1R\ +\xb0\x14,\xe8\xb5\xf9\xa7^\xac\x9b\xb9 \xa0`)X\ +\x0a\x96\x82\x05\xbd\xf6Q_p\x07\x05K\xc1R\xb0\x14\ +,h\xad\x83\x9a\xdd\x90@\xcf\x9eP\xb0\x14,\x05K\ +\xc1\xa2\xd2\xce\x99z\xb1\xfe\xaf\x0b\x02\x0a\x96\x82\xa5`\ +)X\xd0k\x7f\xfc\xf7B\xed\x13^qA@\xc1R\ +\xb0\x14,\x05\x0bz\xed\xf9\x7f/\xd4y]\x0cP\xb0\ +\x14,\x05K\xc1\x82\x96\x19Y,\xd4U\x5c\x08P\xb0\ +\x14,\x05K\xc1\x82\x96Y\xb1X\xa8[\xbb\x10\xa0`\ +)X\x0a\x96\x82\x05-\xb3y\xb1P\xf7q!@\xc1\ +R\xb0\x14,\x05\x0bZf/\x0b\x15\x14,\x05K\xc1\ +R\xb0\xa0\xb5\x8e,\x16\xeaY.\x04(X\x0a\x96\x82\ +\xa5`A\xcb\x9c^,\xd4+\x5c\x08P\xb0\x14,\x05\ +K\xc1\x82\x96\xb9\xacX\xa8\x7fp!@\xc1R\xb0\x14\ +,\x05\x0bZ\xe6\xbab\xa1\xde\xe1B\x80\x82\xa5`)\ +X\x0a\x16\xb4\xcc_\x8b\x85\xfa\x88\x0b\x01\x0a\x96\x82\xa5\ +`)X\xd02\x0f\x15\x0b\xf59\x17\x02\x14,\x05K\ +\xc1R\xb0\xa0e\x9e.\x16\xea8\x17\x02\x14,\x05K\ +\xc1R\xb0\xa0e^-\x16\xeaD\x17\x02\x14,\x05K\ +\xc1R\xb0\xa0e&\x14\x0bu\xb2\x0b\x01\x0a\x96\x82\xa5\ +`)X\xd02\x93\xe6p\x11@\xc1R\xb0\x14,\x05\ +\x0bZK\xc1\x02\x05K\xc1R\xb0\x14,hC\xc1\xf2\ +\x11!\xff\xf6zx<<\x18\x1e\x0d/\xbb&\x95*\ +X\xf5\xde\xb2\xa5\xf8\xdef\x9fD_\xe3\xef\x1ax/\ +\x17H\xf45\xfe\xb8\x81\xd7\xb8\x96\x82\x05\xed\xfb\x88\xd0\ +\x97\xdc\xab[\xa6.\x0f\xfb\x17C6\x8c\xeaa\x90\xcd\ +\x19\xde\x17>\x1b\xce\x0eO\xbav\xd9\x16\xacK\xea|\ +\x8d\x7fL\xf85\x9eX\xefO\xac\x13.\x91{\xd4\xfb\ +%\xdc0L\xc1\x82\xf6}\xc9\xddm\x1a\xaa\xe5\xba\xb0\ +m\x18\xdc\xe4`\xeb\x1b>\x18\xfe'\xbc\xe5zfU\ +\xb0>T\xe7k\xdc!\xe1\xd7\xb8dx\xbb\x8e\xd7x\ +x\xc2\xafqDx\xb1\x8e\xd7xf\xc2\xafQ\xc1\x22\ +\x89\xdb4\xb8\xd1h5\xfc6\xac\xda\xe2!7:\x9c\ +\xec\xaf\xa0y\x14\xac\xda{z\xf2l^\xdfE\xa9\xfe\ +eg\xaa\xd7\xf8\xc5\xd9\xbc\xc6[\x9b\xfd\x07H\x89^\ +\xe36\xb3\xf9\xfa\xc7\xbdan\x05\x0b\xda{\xa3Q\x8f\ +\xca\xc9\xdbSa\xeb\x0e\xfcU\xe0z\xd7:\x8b\x82U\ +\xfc\x85\xf2+\xb5\x8f\x90\xa7~]\xc5_+\x8f\x0b\x03\ +\xe6\xc8 \xb5\x8f\xbc_\x98\xee5N\xa9}\x7fiX\ +&\xafq\x93\xdaw)\xa7_\xa3\x17\x87y\x13\x7fm\ +\x0a\x16e\xf7\x90\x87=\xe7\xed\x8a\x9e\xbe[\xd5\xa6\x83\ +\xf9\xe0\xe2\x8b}\x0aV\x16\x87\xf3\xf0\xb0U\xd8+|\ +<\xcc3Gf)\xfeJ\x156\x0e{\x86\xed\xc2\x82\ +\x19\xbe\xc6\xfea\xfd\xb0{\xd8),\x96\xc9\xebR\xb0\ +(\xbb\x7f=\xec\xf9\x06\x17\x22KG\x17\xa5\xa7\x0b\x83\ +o\xc3\xf0\x9a\x82%\x22\x0a\x16U\xfe\xbe\xf3\x1c\xb5\xbf\ +r\xb8\x18y\xd9\xbf\xcb\xc3o\xd5\x0a\xdf\xe2A\xc1\x12\ +Q\xb0\xe0\xd2b\xa1\x9e\xe9Bd\xe5\x90\x92\x0c\xc05\ +\xc3\x1b\x0a\x96\x88(XT\xd0\x0f\xe7\xa8}\x94\xe4b\ +\xe4\xe1\xec2\xfd\xc2+\xfe[>\xa9`\x89\x88\x82E\ +\x05\x1dQ,\xd4\xbd]\x88,\xdc\x15\x86\x94p\x10~\ +_\xc1\x12\x11\x05\x8b\x8a\xd9s\x8e\xda/\x85\x5c\x8c\xb4\ +\x15\xf7\xbbY\xa5\xa4\x83pH\xb8_\xc1\x12\x11\x05\x8b\ +\x0a\xd9\xacX\xa8+\xbb\x10\xc9;\xb5\xe4\xc3p\x03\x05\ +KD\x14,*d\x85b\xa1\xce\xe3B$m|\x98\ +/\x81\x81x\x81\x82%\x22\x0a\x16\x151\xa2X\xa8}\ +*\xfc\x93\xfa\x1c|/\x91\x81\xf8\xee\xe2\xd9L\x0a\x96\ +\x88(Xd\xee\xb9\xa9\x17\xeb\x9f]\x90d-\x99\xd0\ +P\xdcW\xc1\x12\x11\x05\x8b\xcc\xdd<\xf5b\xfd\x89\x0b\ +\x92\xa4[\x13\x1b\x8a\xfd\xc2m\x0a\x96\x88(X\xe4|\ +\xcb\xa4\xa9\x17\xeb\xc1.H\x92\xbe\x92\xe0`,\xee\xf2\ +>E\xc1\x12\x11\x05\x8bL\x1d8\xf5b\xdd\xd4\x05I\ +\xd2\xfb\x13\x1d\x8e\xa7*X\x22\xa2`\x91\xa9\x0d\xa7^\ +\xac\x0b\xb8 \xc9y3\xf4Ot8\x8e\x0c\xcf(X\ +\x22\xa2`\x91\xa1\xf9\xa6_\xb0O\xba(I\xb9=\xf1\ +\x01\xb9\x83\x82%\x22\x0a\x16\x99ytf\x0b\xf6r\x17\ +&)\x97&> \x8b\xdb\x83\x5c\xab`\x89\x88\x82E\ +\xd6g\xb3/\xba'\xe7\xf4\x0c\x86\xe4Ra\x82\x82%\ +\x22\x0a\x16\x998hf\x0bv-\x17&)'e2\ +(\x8fV\xb0DD\xc1\x22\x13\xab\xcfl\xc1\x0e\x0ao\ +\xb88\x0aV\x87\x07e\xf10\xe8\x07\x15,\x11Q\xb0\ +H\xdc\xeba@O\x8bv\xac\x0b\xe4#\xc2.\x0c\xcb\ +M\x14,\x11Q\xb0H\xdc/g\xb5h\x0fr\x81\x92\ +qYf\x03\xf3b\x05KD\x14,\x12\xb6\xff\xac\x16\ +\xed\xb2.P2\xfe\x9e\xd9\xc0\x5c0\x8cS\xb0DD\ +\xc1\x22QK\xcdj\xd1\x16?\x9d\x7f\xc0EJB\xf1\ +\xeb\xbb\x81\x99\x0d\xcd\x03\x15,\x11Q\xb0H\xd0}\xf5\ +,\xdc\xef\xb8P\xc9\xf8@fC\xb3\x7f\xf8\x9b\x82%\ +\x22\x0a\x16\x899\xa1\x9e\x85\xfb\x01\x17*\x19\x87f8\ +8\xd7T\xb0DD\xc1\x221\xab\xd4\xb3p\xfbd\xf6\ +\xb3\xf9\x9c\xfd%\xd3\xe1y\x86\x82%\x22\x0a\x16\x89\xf8\ +g\xd1\x9d\xea]\xbcG\xb9`\xc9X!\xc3\xe19*\ +<\xa7`\x89\x88\x82E\x02\x0eod\xf1\xbe\xc7\x05K\ +\xc6\x99\x99\x0e\xd0\x9d\x15,\x11Q\xb0(\xb9)a\xe1\ +F\x17\xf05.\x5c\x12&6\xfc\xe6\xa61@\x8b\x8f\ +\xaaoP\xb0DD\xc1\xa2\xc4~\xd3\xcc\x02\xde\xd2\x85\ +K\xc6O2\x1d\xa2\xcb\x85\xb7\x15,\x11Q\xb0(\xa9\ +M\x9bY\xc0\xfd\xdc\x13+)\xebf:H\xbf\xa9`\ +\x89\x88\x82E\x09\xfd#\xf4mv\x11\xef\xe1\x02&\xe3\ +\xee\xdcnLvq\x93\ +qb\xa6\x83\xf5\x83\x0a\x96\x88\x82e\xc6\xd3\x05\x93\x8a\ +\xfb3\xb6kQ\xff\xc0\x05Nj!\xac\x90\xe9p=\ +[\xc1\x12Q\xb0\xa0\xc3Ni\xe7\xa2\x9e'\xbc\xe4\x22\ +'\xe3\xa6\xa6o\x82V\xee\xe1:oxQ\xc1\x12Q\ +\xb0\xa0C\x8a3gT\xbb\x17\xf6>.tRv\xc9\ +t\xc0\xee\xa2`\x89(X\xd0!{wba\xf7\x0f\ +w\xb9\xd8I\xb5\xeey3\x1c\xb0}\xc3\xcd\x0a\x96\x88\ +\x82\x05mvW\xcbn\xcbP\xc7\xe2\xde\xd0\x05O\xca\ +\xd9\x99\x0e\xd9\x15k\xdf5S\xb0D\x14,h\x97\x0d\ +:\xbd\xc0\xafp\xd1\x93\xf2\xc1L\x07\xed\xb7\x15,\x11\ +\x05\x0b\xda\xe4\xf2n,\xf0%\xc2D\x17?\xa9?q\ +\x0e\xc8p\xd0\xce\x15\x1eW\xb0D\x14,h\xb1\x09E\ +\xd7\xe9\xd6\x22?\xc1\x1b\x90\x94\x833\x1d\xb6\xdb(X\ +\x22\x0a\x16\xb4\xd8\xf1\xdd\x5c\xe4\xc3\xc33\xde\x84d\x14\ +\xcf\xf2[$\xc3a[\x0cz\xbe\xf0\xb2\x82%\ +\xa2`A\x03\xbeQ\xe6E?4<\xe6MJ\xca\xe7\ +2\x1d\xc0{(X\x22\x0a\x164\xf0\xdd\xe4!e_\ +\xf8\x9f\xf2F%\xe5\x850O\x86\x03\xb8\xf8u\xeb\xad\ +]\xb8\x9eO:\xfeD\x14,\x92\xb3m\x0a\x0b\xbfO\ +\xed\xa3'oX:\xce\xcat\x08\xaf\x1c&+X\x22\ +\x0a\x16\xcc\xc2\x1f\x8a\xee\x92\xca\xe2_%L\xf1\xa6%\ +e\xedL\x07\xf1\xc9\x1d\xbe\x8eO9\xfeD\x14,\x92\ +Qt\x95\x95S\xdb\x00gy\xe3\x92rg\xa6\x0f\x83\ +.\x1e\xe7\xf4\xa4\x82%\xa2`\xc1L\xfc(\xc5\x0d0\ +\x7fx\xcd\x9b\x97\x94/e:\x8c\xb7\xed\xe4\xf3\xab\x1c\ +\x7f\x22\x0a\x16Ix\xb5\xf8\xd5y\xaa\x9b\xe0K\xde\xc0\ +\xe4\xee\x01\xb2p\x86\xc3\xb8\xf8^\xe0X\x05KD\xc1\ +\x82\xa9\x1c\x94\xf2&(\x1e]\xf2OobR~\x91\ +\xe9@^\x22\xbc\xd5\x81\xeb\xf7\x8c\xe3OD\xc1\xa2\xf4\ +\x8an20\xf5\x8d\xb0\xb9729[d:\x94\x0f\ +S\xb0D\x14,\x08\x9b\xe5\xf2\xf1\xcc\xd5\xde\xcc\xa4<\ +\x92\xe9\xc3\xa0\x07u\xe0/\xaa\xcf:\xfeD\x14,J\ +\xed7\xc9\xdc\x96\xa1\x8e\xcd\xb0l\x98\xe4MM\xca7\ +3\x1d\xcc\x1b(X\x22\x0a\x16\x95Ut\x91er\xdb\ +\x10\xdf\xf3\xc6&\xf70\xe8\xe52\x1d\xce?k\xe3u\ +{\xce\xf1'\xa2`QZ'\xe7\xb8!\xe6\xae=\x96\ +\xc5\x1b\xec\xee\xb6\xdd^\x8b\xa3k?\xcfU\xb0D\x14\ +,\xaa\xf5h\xb8\xb9s\xdd\x14{z\x83\x93\xf3\xd9L\ +\xd7\xe2>m\xba^\xcf;\xfeD\x14,Ji\x8f\x9c\ +7E\xff\xda\x1d\xc3\xbd\xd1\xe9x>\xd3\x87A\xf7\x0b\ +\xb7)X\x22\x0a\x16\x95\xf0\xf7b\xee\xe7\xbe1>\xe2\ +\x8dN\xce\x99\x99\xae\xc5U\xdb\xf0\xcc\xcc\x17\x1c\x7f\x22\ +\x0a\x16\xa5\xf3\xa1\xaal\x8e\xcb\xbc\xd9\xc9Y+\xd3\xb5\ +\xf8\x03\x05KD\xc1\x22k\x97Vis,\x16&x\ +\xd3\x93rG\xa6\x0f\x83\x1eY\xdc\x1c\xb4\x85\xd7\xe9E\ +\xc7\x9f\x88\x82Ei\x14O\xf0X\xacj\x1b\xe48o\ +\xbc\xe76\x95d-n\xaf`\x89(Xd\xe9\xd8*\ +n\x90a\xc5\x83q\xbd\xf9Iy=\x8c\xc9p-\x16\ +O\x1b\xf8]\x8b\xae\xd1K\x8e?\x11\x05\x8bRx*\ +\xccU\xd5M\xb2\xb3\x05\x90\x9c\xcb2]\x8bK\xb5\xe8\ +ck\x05KD\xc1\xa2\x1c>S\xe5M\xd27\xfc\xd9\ +\x22\xf0\x90\xcc\x92\xac\xc7\xa3Zpm^v\xfc\x89(\ +Xt\xdd\x9f\x8a\x8eQ\xf5\x8d\xb2\xa6\x85\x90\x9c\x87\xc3\ +\xd0\x0c\xd7\xe2\x90\xf0`/\xaf\xcd+\x8e?\x11\x05\x8b\ +\xae[\xc3Nyg\xb3\xfc\xc4bH\xceq\x99\xae\xc5\ +\x8d\x15,\x11\x05\x8b\xa4\x9dg\x97\xfcw\xb3,\x18\xc6\ +[\x14I\x99\x18\x96\xcdt=^\xdc\x8b\xeb\xf2\xaa\x1d\ +-\xa2`\xd1\xd5\x1fc-h\x97L\xbba\x0e\xb50\ +\x92s}\xa6\x0f\x83.\x0a\xff8\x05KD\xc1\x229\ +_\xb3Cf\xdc0\xc5\xf7_\x1e\xb18\x92\xb3S\xa6\ +\xeb\xf1\x80&\xaf\xc7kv\xb3\x88\x82E\xd7\xbe\x1f<\ +\xd8\x0e\x99\xf9\xa6\xf9\x84\x05\x92\xe4\xc3\xa0Ge\xb8\x16\ +\x8b\x07\x93\xffU\xc1\x12Q\xb0H\xc6\xc7\xed\x8e\x9e7\ +M\x9f\xda\xc7N\x16JZ\xce\xc8t=\xae\xd1\xc4\xc3\ +\xa0\xc7\xd9\xc9\x22\x0a\x16\x1d\xf7\xfb\x1c\xbf\xb2\xd2\xea\x8d\ +\xb3R\x13\x87\x1a\xdd\xb7f\xa6\xeb\xf1\x0c\x05KD\xc1\ +\xa2\xd4&\x87\xf7\xd9\x19\xed9\xd4\xe8\xbe\xbf\x15\x1f\xab\ +e\xb8\x16G\x85\xe7\x14,\x11\x05\x8b\xd2\xfa\xa1]Q\ +\xff\xe6yWq?!\x8b&9\x07f\xba\x1ewj\ +\xe0\x1a\x0c\xba\xb6\x1eW,\xfeJW{\ +\x1c\xc3\xff\xd5\x1e\xf1T\x0czA+XDzy\x06\x9cb\ +\x9eV\xc6\x13aN\xab\xbe\xb3\x1blG\x0b\xcf\xe7\xe8\ +\x22R\xc9\xf9\xff#\xb3\xb42\xb6\xb7\xe2;\xbf\xc1\x8a\ +G\x95\xdcb\xf1y@\xa7\x88Tn\xfe\xff\xd4\x1c\xad\ +\x84?\xbaYu\xf76\xd9\xea\x16`\x92\x1e\x0cC\xac\ +`\x11ir\xf6_e\x8eV\xc2jV{w7\xda\ +\xb9\x16a\x92\x8e\xb6zE\xa4\xc9\xb9\x7f\xa3\x19\x9a\xbd\ +\xff\xb1\xd2\xbb\xbf\xd1\x16\x08\xaf[\x8cI>\x0czi\ ++XD\x9a\x98\xfb\xf7\x99\xa1\xd9\xff \xea\xddVz\ +96\xdb!\x16d\x92\xae\xf3\xf9\xba\x8841\xf3_\ +2?\xb3\xf6\x15\xab\xbc<\x9bmpx\xc8\xa2L\xd2\ +\x8eV\xb0\x8840\xef\x87\x9a\x9b\xd9\x7fGw\x90\x95\ +^\xaeM\xb7\x8d\x85\xe9a\xd0\x22\x92\xfd\xac_\xca\xdc\ +\xcc\xda\xd6Vy\xf96]\x9f\xdaGN\x16\xa8\x87A\ +\x8bH\xbe\xb3~\x1333[\xbf\xf3\xb5\x91\xf2n\xbc\ +\x15\xc3d\x8b\xd4\xc3\xa0E$\xdb9\xbf\xaf\x99\x99\xa5\ +\xe2\xec^\xde\x0a/\xf7\xe6;\xcdB\xf50h\x11\xc9\ +v\xc6\x9fj^f\xe9\x07Vw\xf97\xdf\xbc\xe1e\ +\x8b\xd5\xc3\xa0E$\xcb\x19\x7f\xbdY\x99\x9d\xe2W\xa1\ +\xf3X\xddil\xc0\xfd,X\x0f\x83\x16\x91\xecf{\ +\x1f\xff\x80\xce\xd2\xbeVw:\x9bp@\xb8\xc7\xa2M\ +\xd2\xc5V\xb0\x88\xf40\xdb\x175#\xb3swqf\ +[\xddim\xc4\x8d,\x5c\x0f\x83\x16\x91\xac\xe6\xfa\xb6\ +\xe6cv6\xb4\xb2\xd3\xdc\x8c\x1e\x08\xeaa\xd0\x22\x92\ +\xcfL\xff\xae\xf9\x98\x95+\xac\xeat7\xe3\x92\xb5g\ +\xdeY\xc8\x1e\x06-\x22\xe9\xcf\xf4\xdb\xcc\xc6\xac\x9eG\ +\xfb^\xab:\xed\x0dy\xa2\x85\xeca\xd0\x22\x92\xfc,\ +\x1f\xe1>\x87Y\xf9\x96U\x9d\xc7\xa6|\xceb\xf60\ +h\x11Iz\x96om&f\xe3\xd90\xdc\xaa\xcec\ +c\xeejA'k\x07+XD\x8aGj\x99\x87\xd9\ +\xf8\xbc\x15\x9d\xcf\xc6\xec\x17n\xb7\xa8\x93\xfd\x97\x8e\x87\ +A\x8bT{\x86\x17\xf7\xbfz\xcc<\xccB\xf1=\xba\ +\xbeVu^\x1bt\x1d\x0b;Y\xa7Y\xc1\x22\x95\x9e\ +\xdf+\x99\x83\xd9X\xdb\x8a\xces\x93^hq'\xfb\ +0\xe8\xd5\xad`\x91\xca\xce\xeec\xcc\xc1,\x5c`5\ +\xe7\xbbI\x17\x0eoZ\xe4I\xba\xdd\xc3\xa0E*9\ +\xb7\x8b\x8f\x07\xffi\x06&\xef\x8d\xe2\x0c\xb6\xa2\xf3\xde\ +\xacGZ\xe8\xc9\xda\xcf\x0a\x16\xa9\xdc\xcc^\xd5\xec\xcb\ +\xc2\xe1Vs\xfe\x9bu\xce\xf0\xb8\xc5\x9e\xa4\xd7\xc2\x02\ +V\xb1H\xa5f\xf6)f_\xf2\x8a\x1f(\x0c\xb5\x9a\ +\xab\xb1a\xb7\xb3\xe0\x93u\x91\x15,R\x99Y=(\ +\xbch\xee%\xefSVsu6m\xf1\x99\xfeM\x16\ +}\xb26\xb2\x8aE*1\xab\xb77\xef\x92w\xa3\x1b\ +FWo\xe3\xfa\x5c?]\x0fx\x18\xb4H%\xe6\xb4\ +\x7f\x08\xa7\xff\x0b\xf0\xf7[\xc9\xd5\xdc\xbcg\xdb\x00\xc9\ +:\xd2\x0a\x16\xf1\x8f`J\xed,+\xb9\xba\x1bxt\ +\x18g\x13$iBX\xd2*\x16\xc9v>_`\xce\ +%\xff\xa3\xa4\xf9\xad\xe4jo\xe2\x83m\x84d\xfd\xce\ +g\xfb\x22Y\xce\xe5\xc5\xc3d3.i_\xb2\x92m\ +\xe4A\xb5\xef\xf4\xd8\x10i\xda\xde*\x16\xc9n.\x9f\ +i\xb6%\xed\xfe0\xd0J\x96b3oeC$\xeb\ +\x990\xd2*\x16\xc9f\x1e/\x1a\xde6\xdb\x92\xb6\x85\ +\x95,\xff\xde\xd0\xc5m\x1b\xae\xb1)\x92u\xaaU,\ +\x92\xcd<>\xc7LK\xda\xd5\xbe\xba!\xd3o\xea\xe5\ +\xc3$\x9b#\xd9\x9f\x02\xaff\x15\x8b$?\x87\x97\xf3\ +\xdd\xab\xa4\x15g\xe8\xb2V\xb2\xccls{$C\xba\ +n\x0b\xfd\xacb\x91\xa4g\xf0o\xcc\xb2\xa4}\xcf*\ +\x96\x9e6\xf7(\x8feH\xda>V\xb1H\xb2\xf3w\ +s3,i\xc5\xd99\xcaJ\x96Ym\xf2}l\x94\ +d\xbd\x1a\xdem\x15\x8b$7w\x07\xfb5w\xf2\xf6\ +\xb2\x92ev\x1b\xbd\x7f\xb8\xcbf\xf10h\x11\xe9\xd8\ +\xdc=\xca\xecJ\xda\x9d\xc5\xd9i%K=\x9b}\x03\ +\x1b&i\x9b[\xc5\x22\xc9\xcc\xdb\xe5jOf0\xbb\ +\xd2\xf5\x11+Y\x1a\xd9\xf4\x97\xdb4\xc9z\xc2\xbd\xb1\ +D\x92\xf9\xc4\xe0V3+i\x97Y\xc9\xd2\xe8\xc6_\ +\xc2\xbf\xaa\x92v\xaeU,R\xfa9\xfb5\xb3*\xf9\ +g\xc2.f%K3\x9b\xff\x04\x1b(i\x9f\xb0\x8a\ +EJ;_Wu\xc7\xf6\xe4}\xd3J\x96f\x07\xc0\ +\xf0\xda\xa3Xl\xa44\xbd\x1c\x16\xb1\x92EJ9[\ +\xfdj0mO\x87aV\xb3\xf4f\x10|\xceFJ\ +\xda-\x1e:*R\xaa\x99Z<\x9a\xec\x22\xb3)y\ +;[\xcd\xd2\xdba\xd0\xb7v\x97p\x1b*]\xdf\xb7\ +\x92EJ3S\xf77\x93\x92\xf7\xe7\xe2l\xb4\x9a\xa5\ +\x15\x03a-\x1b*y;Y\xc9\x22]\x9f\xa5\x1f\xf2\ +\xcc\xd7,\xaci5K+\x07\xc3\xcfl\xaa\xe4\x7f\xed\ +\xb2\x96\x95,\xd2\xb5\x19\xba\x84G\x91e\xe1\xa7V\xb3\ +\xb4z8\x8c\x09o\xd8\x5cI{.,n5\x8bt\ +|~\xce\x13\xfea\x06%o|X\xc8\x8a\x96v\x0c\ +\x89\xc3l\xb0\xe4\xdd\x1f\xdee5\x8btln\x0e\x0d\ +7\x9b=Y8\xd4\x8a\x96v\x0e\x8aGm\xb2\xe4\x15\ +?Z\x18nE\x8b\xb4}f\x0e\x0c\xbf2s\xb2\xf0\ +H\x18bUK;\x07\xc6\xb66Z\x16\xfeP\x14f\ ++Z\xa4m\xb3\xb2\xbf\xdb1\xb8q\xb3H#C\xa3\ +O\xedp\xb6\xe1\xd2w]\x98\xd3\xaa\x16iK\xb9\xfa\ +\xa9\x19\x93\x8d\x1b\x8a\xb3\xcf\xca\x96N\x0c\x8fU\xc2\x14\ +\x9b.\x0b\xbfw7b\x91\x96\xce\xc7\x01\xfer\x95\x95\ +\xe2\xac[\xc9\xca\x96N\x0e\x913m\xbcl\xfc)\x8c\ +\xb2\xaaEz=\x17\x87\xfa\xceUv\xce\xb0\xb2\xa5\xd3\ +\x83d\xfe\xf0\xaa\xcd\x97\x8d{<\xb7P\xa4W3\xb1\ +\xb8\x15\xc3MfIV^\xf1\xabk\xe9\xd6@9\xc8\ +\x06\xcc\xcaS\xc5\xc7\xbfV\xb6H\xc3\xb3p\xf1p\x9f\ +\x19\x92\x9d\x03\xadn\xe9\xd6P)~\x82\xfcO\x9b0\ +\xbb\x1b\xe9\xf9\xb5\x8cH\xfdsp\xbd\xf0\x82\xd9\x91\x9d\ +\xe2\xc6\xb0\x03\xadp\xe9\xe6p\xd9\xdcF\xcc\xd21\xa1\ +\x9f\x15.\xd2\xe3\xec+~Q\xbdox\xdb\xbc\xc8\xd2\ +\xa6V\xb9\x94a\xc8\x8c\xb5\x19\xb3tM\x98\xcf*\x17\ +\x99a\xee\xcd\x15.0#\xb2\xf5k\xab\x5c\xca2l\ +\x96\xf1\x84\xf8l=\x1d6\xb0\xcaE\xfe3\xefV\xf1\ +\xd5\x88\xac\x15\x7f\x91\x5c\xdaJ\x972\x0d\x9d\x93m\xcc\ +\xac\xef\x03s\x92\xc7DH\xc5g\x5c\xbf\xf0\x950\xd1\ +L\xc8\xdaIV\xbb\x94m\xf8\xcc\xed\x8b\x9e\x95\xb8\x95\ +\xc3\x1aV\xbbTp\xbe-\xed\x81\xcd\x95\xf0|\x18i\ +\xc5K\x19\x87\xd0\x9e6h%\xfe\x9au\x8a\x87EK\ +Ef\xda\xa0\xf0\x8d\xf0\x96\xbd_\x09\xbb[\xf5R\xd6\ +aT<\x7f\xeb\x0e\x9b\xb42\xdf\xcd\xda\xd1\xf3\xb9$\ +\xe3y\xb6Q\xed\xa7\xfa\xf6{5\xfc\xdd/\xa7\xa5\xec\ +C\xe9\xc36j\xa5\xfc1\xace\xe5KF3\xac\xf8\ +8\xf0J{\xbbr\xd6\xb7\xfa%\x85\x01u\xa9\xcdZ\ +9\xbf\x08+X\xfd\x92\xf0\xdcZ(\xfc\xc8/\xa2+\ +\xe9b;@R\x19T\x8b\x85\x096m%\xbf\x9f\xf5\ +sO\x9e\x97\xc4\xe6\xd5\xc2\xe1T3\xab\xb2\x8a\xef\xd7\ +-j'HJC\xeb8\x1b\xb7\xda7\xea+\xee\x9f\ +\xe5;ZR\xe2\x19\xb5b8\xd7\x9d\xd8=\xb5\xc2n\ +\x90\xd4\x86\xd7\xb0\xda\xc3\x83m\xe0j\xbb3\xec\xe5W\ +\x87R\x92\xb94 |<\x5cko\x12\x9e,\xee\xca\ +ogH\x8a\xc3l'\x1b\x98\x9a\xd7\xc39\xe1C\xa1\ +\xaf\xdd!\x1d\x9eE\xcb\x87\x13\xc33\xf6\x22S\xd9\xd1\ +\xee\x90T\x87Z\xdf\xf0'\x9b\x98\xe9<\x11\xbe\x1b\xd6\ +\xf6\xb3hi\xe3\xfc)~\x0d\xf8u\xb7\x8e\xa1\x07\xb7\ +\xf8\xc7\x9e\xa4>\xe4\xd6\xb0\x91\x99\x85\xe7\xc2\xd9\xe1S\ +a^;Fz1k\x86\xd6\xee]u\x92\xfbWQ\ +\x87\xd5\xed\x1a\xc9a\xf0\xfd\xc4f\xa6Nw\xd4\xee\x14\ +\xbf]X\xc2\x97\xe4e\x16se\xbe\xb0y86\xdc\ +\xe8W\x804\xe0\x5c;Hr\x19\x84\x0b\x86\xf165\ +Mx9\xdcP+]{\x87\x0d\xc3\xe2a\xa0\x9dU\ +\x89\xd9Q<`yLX/\xecR\xfb\x1e\xd5\xafk\ +_N\xb6?h\xf6\xfb\xa0\x0b\xd8]\x92\xd3\xa0\xfc\xba\ +\x8dM\x8b\xef\xb9U<\xae\xe7o\xe1\xeapa8=\ +\x9c<\x13\xdf\x9d\xceI\xd3\xf9\xcet\xbe=\x9d\x13g\ +\xe2[\xd39a:\xc7O\xe7\x9b\xd39n:\xc7\xce\ +\xc41\xd39z:GM\xe7\xc8\xe9\x1cQrG\xd6\ +^\xc77k\xef\xcb\x19\xe1\x8206\xfc%<\xee\xa6\ +\x9f\xb4\xc1!Nd\xc9\xad`\x0d\x09\x0f\xdb\xdc\x00t\ +\xc9Ca\xb0\x13Yr,Y\x9f\xb0\xc1\x01\xe8\x92m\ +\x9c\xc4\x92k\xc1\xea\x13\xae\xb7\xc9\x01\xe8\xb0\xeb\xfch\ +Fr/Y+\x85\xc96;\x00\x1dR\x9c9+:\ +\x81\xa5\x0a%\xebt\x1b\x1e\x80\x0e9\xcd\xc9+U)\ +X\xef\x0a\xaf\xd8\xf4\x00t\xe0V/nb,\x95*\ +Y\x07\xda\xf8\x00\xb4\xd9~N\x5c\xa9Z\xc1\x1a\x18\xee\ +\xb3\xf9\x01h\x93{\xc2\x00'\xaeT\xb1dmb\x00\ +\x00\xd0&\x1b9i\xa5\xca%\xebW\x86\x00\x00-v\ +\x95\x13V\xaa^\xb0\x96\x0ao\x1b\x06\x00\xb4\xc8\xc4\xb0\ +\xa4\x13V\x94\xacw\x9e\x07g(\x00\xd0\x0a':Y\ +E\xde)X#\xc3\xf3\x86\x02\x00\xbd\xf4l\x18\xe1d\ +\x15\xf9o\xc9\xda\xcd`\x00\xa0\x97vu\xa2\x8aL[\ +\xb0\xfa\x85\xbf\x19\x0e\x004\xe9\xf6\xe2,q\xa2\x8a\xcc\ +X\xb2\xd63 \x00h\xd2:NR\x91\x9eK\xd6\xc5\ +\x86\x04\x00\x0d\xba\xd0\x09*2\xeb\x82\xb5hx\xcb\xb0\ +\x00\xa0No\x86\x85\x9d\xa0\x22\xb3/YG\x1b\x18\x00\ +\xd4\xe9H'\xa7H}\x05k\xce\xf0\x84\xa1\x01\xc0l\ +<^\x9c\x19NN\x91\xfaK\xd6\x0e\x06\x07\x00\xb3\xb1\ +\x9d\x13S\xa4\xb1\x82\xd5'\xdcbx\x00\xd0\x83\x9b\x8a\ +\xb3\xc2\x89)\xd2x\xc9Z\xdd\x00\x01`&\xa6\x84\xf7\ +;)E\x9a/Y\xe7\x18$\x00L\xe7l'\xa4H\ +\xef\x0a\xd6\xbb\xc38\xc3\x04\x80\x9a\xe2L\x18\xed\x84\x14\ +\xe9}\xc9\xfa\xaa\x81\x02@\xcd\xc1NF\x91\xd6\x14\xac\ +\xc1\xe1!C\x05\xa0\xf2\x1e\x08\x83\x9c\x8c\x22\xad+Y\ +\xdb\x18,\x00\x95\xb7\xa5\x13Q\xa4\xb5\x05\xab\xb8m\xc3\ +\xb5\x86\x0b@e]\xe3\xb6\x0c\x22\xed)Y+\x84\xc9\ +\x86\x0c@\xe5L\x0a\xcb;\x09E\xdaW\xb2N5h\ +\x00*\xe7\x14'\xa0H{\x0b\xd6\xbc\xe1e\xc3\x06\xa0\ +2^\x0c\xa3\x9c\x80\x22\xed/Y\xfb\x198\x00\x95\xb1\ +\xb7\x93O\xa43\x05k@\xb8\xc7\xd0\x01\xc8\xde]\xa1\ +\xbf\x93O\xa4s%k#\x83\x07 {\x1b8\xf1D\ +:_\xb2\xae4|\x00\xb2u\xb9\x93N\xa4;\x05\xeb\ +\xbda\xa2!\x04\x90\x9d\x09a\x09'\x9dH\xf7J\xd6\ +\x89\x06\x11@v\x8ew\xc2\x89t\xb7`\x8d\x08\xcf\x1a\ +F\x00\xd9x:\x0cs\xc2\x89t\xbfd\xedb \x01\ +d\xe3sN6\x91r\x14\xac~\xe1/\x86\x12@\xf2\ +n\x0b}\x9dl\x22\xe5)Y\xeb\x18L\x00\xc9[\xcb\ +\x89&R\xbe\x92u\xa1\xe1\x04\x90\xac\xf3\x9dd\x22\xe5\ +,X\x0b\x877\x0d)\x80\xe4\x8c\x0f\x0b9\xc9D\xca\ +[\xb2\x8e0\xa8\x00\x92s\x98\x13L\xa4\xdc\x05kh\ +x\xdc\xb0\x02H\xc6\xa3\xc5\xecv\x82\x89\x94\xbfdm\ +g`\x01$c['\x97H\x1a\x05\xabO\xf8\x83\xa1\ +\x05Pz\xd7\x173\xdb\xc9%\x92N\xc9Z!L2\ +\xbc\x00J\xeb\xed\xb0\xac\x13K$\xbd\x92u\x82\x01\x06\ +PZ\xc7:\xa9D\xd2,X\x83\xc3\xdd\x86\x18@\xe9\ +\xdc\x11\x069\xa9D\xd2-Y\xef\x0f\x13\x0d3\x80\xd2\ +\x98\x10VrB\x89\xa4_\xb2\xbeh\xa0\x01\x94\xc6\xbe\ +N&\x91<\x0aV\xf1\xab\xc2+\x0c5\x80\xae\xbb\xcc\ +\xaf\x06E\xf2*Y#\xc2}\x86\x1b@\xd7\xdc\x13\x86\ +9\x91D\xf2+YK\x87W\x0c9\x80\x8e{),\ +\xe9$\x12\xc9\xb7d}\xb8v\xef\x15\x03\x0f\xa0s_\ +j_\xd7\x09$\x92\x7f\xc9\xfa\x8c\x81\x07\xd0\x11S\xc2\ +\xa7\x9d<\x22\xd5)Y\x07\x18|\x00m\xb7\x97\x13G\ +\xa4z%\xeb\x08\xc3\x0f\xa0m\xbe\xe6\xa4\x11\xa9f\xc1\ +*n\xdfp\x8c!\x08\xd0r\x87:eD\x94\xac\xa3\ +\x0dC\x80\x96\xf9\xba\xd3ED\xfe]\xb4\xbel(\x02\ +\xf4\xda\xfeN\x14\x11\x99\xbed\xed\x1a&\x19\x90\x00\x0d\ ++n\x7f\xb3\xb3\x93DDz*Y\x9b\x85\xf1\x86%\ +@\xdd\xc6\x85\x8d\x9c \x222\xbb\x92\xb5jx\xd2\xd0\ +\x04\x98\xad\xc7\xc2JN\x0e\x11\xa9\xb7d-\x18n3\ +<\x01ztk\x18\xed\xc4\x10\x91FK\xd6\x90p\x9e\ +!\x0a0\x83\xb3\xc2`'\x85\x884[\xb2\x8a\xdb8\ +\xec\x1d&\x1a\xa8\x00\xffz\xae\xe0nN\x07\x11iU\ +\xd1Z-\x1cP\xfb%\xe2\x0b\x0e \xc8\xca\xf3\xb5\x07\xc8\x17\ +\xdf\xcb\x5c\xd6\xc7\x7f\x22\x22\xdd+\x5cK\x87\x1d\xc3I\ +\xe1:\x7f\xe5\x82d<\x19\xae\x0d\xdf\x0e;\x14\xbf\xfe\ +S\xa8DD\xca]\xbc\x86\x87\x95j\x1f+\xec\x19\x0e\ +\xad\x15\xb0\xe2c\xc6\xf3\xc2\x85@\xdb\x9d[\xdbs\xc5\ +\xde\xfbz\xd8#l\x1e\xde\x17\x86\x99T\x92k\xfe\x1f\ +\x02g\xedA\xf2\xbe\xe7\xfe\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x07\xc8\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xde\x01\x17\x07\x10.\x87\x15\x98r\x00\x00\x07UID\ +ATX\xc3\xc5\x96kl\x14\xd7\x15\xc7\xff\xf7\xce\xec\ +\xcc\xec\xeczg\xbd\xb6\xc1o\x19p\x9b\x1a\x12\x070\ +\x11\x8fR\xb0\x89\x92\xd6\xcd\xc3\x01Um\x12\x145\x8a\ +ZJ\xa2*U?\xb4\x91Z\xda8!j\xa4\xaa\xf9\ +\x00\xca\x87\xd2~A\xa8\x12\x95h\x9bHT| m\ +x$\xa8\x01\x11\x1a\x0a\xc6`\x17\x1b\xb0\xf1\x13\xef\xfb\ +=\xf7\xce\xe9\x07\xef\xaew\xed5PT\xa9s4\x9a\ +3\xf7\xce\xcc\xf9\xdd\xff\xbd\xe7\xcc\x05\xfe\xcf\x07\xfb/\ +\x9fW\x00xr\xa7\x0b\x80\x0a\x80\x03\x90\x00\x04\x80,\ +\x808\x80$\x00\xfa_\x02h\x00\xaa\x00T\x14^\xac\ +\x85\xaa~\x03K A\xe2#L\xd3\x04D\xd1\xf3\x0e\ +\x800\x80P\x0e\xee\x81\x01\x98\xd7\xeb\xad\xb1m\xdbB\ +\x13i\xca\xcf\xc56,\xa3\xa7\x99\x07\x1b\x08\xe4\xf3\xb9\ +|6\x81\x10\xb3c.\x06\x16\xa5\x04\xce`\x88\x1d\x93\ +\xbfR?\xc6\x08\x13\x00\x1c\xd34\xa7C\xa1P\xe4A\ +\x00\xd4@ P\xa7X\xdcL\xbd\x1b~\x96V\xc87\ +\xda\xad\xd5\xde-\x81N}\x95\xe7\x11\x04\x94\x008)\ +\x00\x00\xc9\x04\x82\x22\x88K\x89\x8b8\x1d<\x99\xe9\x8b\ +\x5c\x8a\xf2A\xf5]\xfd'\xd61f3\x871\x16\x9d\ +\x9a\x9a\x9a*7-\x8b\x01(---M\xa9\x0d\xf1\ +\xea\xc4\xeb\xc1\xdf\xaf\xaaz\xa4\xed\xbb\x0d\xaf\xe8\x8d\xae\ +&Le\xa70c\xdfA\xd2I\xc0!\x07\x94\xfb\xa6\ +\xa1\xb8\x11P\x03X\xa2-\xc5m{\x14\x7f\x18;\x98\ +\xb9z\xa7\xff\xa2\xf9^\xe5\xab\xaesF\x0c@rt\ +ttl>\x84RN\x95\xd6\xd6\xd6\xfa\xe4\x8b\x91\xd6\ +\xf8\xcb\xc1\xbf|\xbb\xe5\x85e\xdf\xab\xdb\xed\x8a\xdaQ\ +\x5cK\xf5#$\x83H;i8E& \x90\xa64\ +\x82b\x06\xa3\x99\x11\x98\x8a\x07\xddUO\xab\xaa[\xad\ +\xbb\xd8~\xfe9\x17s\x1d\xb7nV\xa6\xfd~?\x0f\ +\x06\x83\xc9\xbb\x02tttTg7\xa7\x1a\x83/L\ +\xfci\xf7\x8a\x1f.\xe9\xf4=\xce/%.bF\xdc\ +\x81\x84,\x09\xec\xc0)i\x939\x0b\x89\x10\xa6\xc5\x14\ +\xd6\xfb6\xb1Zo\x9d\xe7l\xdd\xa7\xdb\xfc\xb7\x03G\ +<\x91\x0a\xa5\xa6\xa6&399i\x97\x05\xe8\xec\xec\ +T\x19cK\x87\x7fz\xe5`O\xf3\x8e\x15[}]\ +\xfcB\xfc\xaa+\xba122\x12\xcd\xc7\ +\xe4%\xb9\xa6i\x81\xeb\xaf\xf7u5U6\xaf\xfaf\ +\xe0\x19\xe5\x8b\xc4\x05$)\x09\x1b6\x04\xc4\x82\xab\xc3\ +$$\x13\x90\xc8\x9dLB@\x14\xe02\x94\xc1\xf9\xd8\ +9tW?\xa54\x06\x1a7\xdc\xfc\xc1\xc0\xc6\x8a\x8a\ +\x0aWwww\xc5\x02\x80\xde\xde^\xce-\xe6K.\ +\x8f\xbf\xf9b\xfdK\xee\xe1\xf4u\xc4d47\xd6\xd9\ +\x00\x026$\xc4l\x1b\x13\xc8\x9b\xcd\xec\x02\x94d\x12\ +\x22\xdf\xc7\x04\x22N\x04\x83\xa9\x01|\xab\xfe;\xee\xd8\ +\xf2\xf0\xdb.\xaf\x8bi\x9af-\x00\xe8\xeb\xeb3\x07\ +\xb7\xf7=Z\xefm\xa8l\xd0\x1bq#3\x5c\x18m\ +\xded\x01c\xce\xcf\x8fx\x81\xcf\xe6\xee\x873CX\ +\xaa\xd5\xa2\xdaS\xb3d\xf0\x99\xbe6\xc30\xb4\xce\xce\ +N\x15\xb9R:\x9bF\x86a\x86\x1b\x83O=[\xf5\ +\x9c{<3\x86,\xb2`9+\xa4\x07+\xcd\xda|\ +\x0a\x12\x08\xc4\x08Ds\xeb!\xed\xa4\x10vB\x88\xc8\ +\x08\xe2N\x0c<\xc9\xf0%\xff\x97\x8d\x7f.\xbb\xd0m\ +\x18F_CC\x83\x09 Z\x00\xb0,K\x15\x86\xbd\ +u\x85\xd9\xca'\xb2\xe3\x10\xb9\xca\xca\xc1\x01Z\x1d\xaaTy\x09@\xa5\xbbR\ +\x00\xa0\x14\xa5p\xc7\x99\x86\xed\xd8`\x8c\x95\x9e\x98\xf3\ +\xc1P\xba>\xc0f\xa7\x85\xca\x17x\x05\x0a$$@\ + \x8f\xd7C\x94\x22Y\x92\x05\x9a\xa6I\x0e\x1eK:\ +\x09\xb8\x15\xb3D\xf6\x82\xcd\x03\xe2\x9c\x83s^\x1e\xb4\ +\xc8\x00\xc0T\ +Sm\xd7\xe1ccG\xd3\x9b\xbd[\xe1W*g\x0b\ +\x0c\xcd\x96Z\x10J\xee\x17k\x07\x00\xbfR\x89\xafz\ +\xb7\xe0\xe8\xd8\x87)]\x18\x07\x7f\xa9\xbd3`YV\ +\xe8^[2\xf6\xd1\x85\xe3u\xcf\xa3\xe7\x83\x87k\xda\ +\xd7n\xae\xda\xa2~\x96<\x83\x091\xbe \x03\xf2\xb2\ +\xe7\xf3\x9f0\x07T\xa7\xd6c\xbd\xb9\x09\xa7\xa7O\xda\ +\xfd\xc1\xbes\xc7\xdc'^2\xb2\xeep{{{\xe8\ +^[2\x1c\xfa\xed\xa1\x849\xed=}$~x\xdd\ +xf\xacz[\xe0\x09\x97O\xb1\x10\x92!\xd8d/\ +\xc0.L\x03\x11L\xe6\xc1jc-\x1e\xd2\xdbp\xf4\ +\xf6\x87\xe9\x1b\x91\xe1\xb3\xef\xe9\xef\xef^[\xb9.\xdc\ +\xda\xda:s\xb7M)+\xbe\x1e8p@iXU\ +_\xf7\x9a\xf1\xca\xdbIW\xe2\xf9\xce\xfamZ\x9bg\ +\x15\x9b\x11w0*G\x10\x95\x11d(\x03\x00\xd0\x99\ +\x0e\x9fb\xa1AiD\xb5Z\x83+\xf1\xcbtj\xec\ +D\xd6K\x15\x87\x0ek\x1f\xfc:\xa0V\x85\xf7\xec\xd9\ +\x13:r\xe4\x08\x15mJ\x09sI\xb5\x10\x00\x00\xeb\ +\xe8\xe8`{\xf7\xee\xf5\xffn\xe9\xfb\xeb?\xc1\x89w\ +\x1c\xe6\xacl\x0b\xacd\xcb*\x96\xab\x96\xea\x87G\xf1\ +\x00\x00\x12N\x02\x11;\x8c\xa1\xd8uq5\xd4O\x0a\ +)\xff\xda\x86'\x7f\xf1\xe3\xcc\x1b\xfd\x13\x13\x13\xe1\xed\ +\xdb\xb7\xc7\xe7\x07\x9e\x0fP\x0e\xa2\xe0\xef\xda\xb5K\xdd\ +\xb1c\x87\xf5g\xeb\x8f\x0f\x9dR>\xfezH\x99y\ +\xc2fv\xadt\xa4\x1f\x1c\xa4\x92\x1aQ\x99:\x1e\x90\ +\xd5\xc7\x1f\xa7'\x8f\xef\xb4_\x1e\x9d\x9c\x9c\x8c\xed\xdf\ +\xbf?z\xf2\xe4IY\x14p\x01D9\x80E\x15\xd9\ +\xb8q#\xdf\xb9s\xa7\xd9\xd4\xd4\xa4\xab\xaa\xea2\x0c\ +C\xe5\x9c3)\xa5CD\x22\x1a\x8d\xda\xb7n\xddJ\ +\xed\xdb\xb7/}\xe3\xc6\x0d\xa7\xdc\x88\xe7\x83\xdc+8\ +\xee\x02\xb4\xd8A\x8b\x5c\xcb\xaa\xf0 \x01\xef\x17\xe0\xbe\ +\x80\xfe\x03\xc75\xc0>\x8b+\x95y\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x03\x8c\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x078/\xef\xab\xb86\x00\x00\x01\x8aIDA\ +Tx\xda\xed\xdbAJ\xc3P\x14\x85\xe1?\x06\xa1\x82\ +\x1b\x90\xb4#\xed\xc8\x0d\x08n\xc8=8\x95\xa6\xc5\xa5\ +\x88TG\xc5\x05\x88\x93\xd8\x99kpf*\x88`A\ +\xe2 /\xd2\x8a\xaf\x08\xa6\xb9\x8f\xe4\x1c\xb8\x83\xb6\xd0\ +\xf6|$M\x077\xa0(\x8a\xb2\x9e!0\x06\xe6\xc0\ +\x02(\xfe9\x9f\xc03p\x0f\x9c\x03\x07\xa1\x16\x8f\x81\ +\x09\xb0\xac\xa1\xf4\xa6ys\x10Qh\xe5o\xb6\x5c\xfc\ +\xe7\x5c\x03\xbdP\x00&\x0d\x97\xaff\x16\x02\xc2\xb0\x81\ +\xc3>h\x84\xb1a\xf9j\xee\x80=+\x80\xf9\x86s\ +4\xa9\xe1\xfdw\x81\x13\xe0!\xd4#\xc1w\xa9Kj\ +\xfe\x9c\x9e+\x19\x1c\x82\xef\xcbl#\x7fA\xa8{\x16\ +\xee(\x1f\xbb\xdf;S\x00+\x84j\x96\xee\x8a\x17[\ +\x02X#\x14\xee?Ol\x09\x10\x02Bj\x0dP!\ +\xdc\x1a\x01|\x00G\xd6\x00\x00;\xc0\x19\xf0\x08\xbc7\ +\x8c0\x0a\x01`\xdbI\x80\xa9\xa7c\xd6\x05\x00\x80\xbe\ +\xa7c\x1em(\x1b\xb5\x0c\xa1\xf0\x9d\x7f\x9d\x8e\x00\x04\ + \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\ +\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\ +\x04 \x00\x01\x08\xa0+\x00\xaf\x9e\xd7\xfa-\xea9\xf0\ +<\xbf\x00\xff\xaa\xec\xb4%\x08\x03\xfc\xb7\x02dP\xae\ +\x8b\x15\x1d\x9d\x8b\x88r}\xf4\x89r\xa9\xb9KY\x02\ +\xc71\xf0\x02\xec\x03\xa7\x1d\x03\xb8\x04\xae\xaa\x07\x16\xb7\ +\xccX\xce\xda\xaa\xec*B\x8a\xed\xdd#M,K\xa7\ +\xbf\x95_\xcd!\xe5\x06e\x06\xe4-(\x9d\xbb.#\ +\xd7MQ\x14\xe5;_\xd2\x13\xba\xa5\xa9\x05)F\x00\ +\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x05c\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x07;\x0b\xf8\x85\x0f$\x00\x00\x03aIDA\ +Tx\xda\xe5\x9b\xcfk\x13A\x14\xc7?\x8d\xf5'=\ +\xf4\xd6\xfa\x0bZ\x7f\xa0\xf8\xa3\x1e\xf4 \x12k)V\ +\x1a\xb1\x18\x8dU\xa1\xa4E=\xf9\x0fx\xf5\xe6I\xc4\ +\x83\x88\x07AQA\xaf\x22z\xa8 VE\xbd\xeaI\ +\xc4ZQ\xebO\xf0`\xd4\xaaIY\x0f;\x0b!\xee\ +&\xb3\xbb\x93\xcd\xdb\xcd\x83wI&\xf3\xf6\xfba\xe6\ +\xcd\x9b\x99\x0d4\xc6\xd2\xc08\xf0\x03\xf8\x08\xdc\x00\xba\ +h\x12\x1b\x01\x8a\x80U\xe1\x05\xa0/\xe9\xe2s\x1e\xe2\ +\x1d\xff\x09\xf4'U|\x16\xf8[E|\xa2!\x0c\x02\ +\xbf5\xc4'\x12\xc2\x000\xe3C|\xa2 lW\x99\ +\xde\x0a\xe8u\x87\x90\x12\x0ep\x11p+\xee#!\xe8\ +\x14\x88\xedt\x98\xeb\xf2\xd9n\x9fI\xd0\x0b\x82\xf8:\ +\xa1\x17\x98\x04\xd6\x19X\x09b7\x12zU5g\x01\ +\x9f\x80\xb5.m\xf6i\xd6\x02\xb1\x830\x00\xfc\xaax\ +\xd0w\xc0\xca\x00\xd5`\xec \xecr\x11\xef\xf8[\xa0\ +\xdb\xe57\xc3I\x810\xa8\x91\xe1'\x81\xe5.\xbf\xed\ +\x07v\x02[\x81Q\xe0I\xdc\x12c\xc6\xc7\xf2\xf6\x12\ +XR\xa3\xbf9\xc0\x99\xb8@\x08\xb2\xac\xbd\x00:5\ +\x0a\xb3\xbb\xd2!\xec\x09\xb1\x9c\x9d\xd0\xcc)b\xeb\x84\ +!\xe0O\x88\xc4\x95\xd5\x88\xd1!\xb5X\xda\x1bR\xbc\ +\x05\x1c\xd3\x88\xb3Tb\xc5\x985 \xde\x02Nk\xc4\ +\xda\x08\x94$A\xd8o\xa0zs\xfc=\xd0\xa6\x113\ +/\x05B\xce\xa0x\xc7o\x02\x0b\xe3\x00\xc1D\xb5V\ +\xad.X\xedR\x07T\xdah\xa3 \x1c\xa8\xa3x\xc7\ +3\x151\xcf\xaa\x04Xi\x87\xa2.\x9b\x87#\x10\xef\ +\x06\xe0\x0e\xf0\x1a\xf7\x0b\x92\xc3QA8\x18\x91x/\ +\x00\x16\xf0\x06X\xd1\x08\x08#\x06\xe6\x9b\x09\x00\x0e\x84\ +n\x8fg\xbc\x04\x9c\x04.\x00\xafL\xe5\x84|\xc4\xe2\ +k\x01p\xb6\xd2\xabj\x8c\xd8y\xc0\xa9\xb0\x10\xd2\x11\ +\x0e{?\x00,`\x1aX\xa3\x91\xb7.\x07\x88_p\ +\xf2\xcdx\x03\xc4\xeb\x02\xb0\x80)\xcd\xf29H\xbdr\ +=\x05l\x13~\xd0\xfaY\xa3\xcd4\xf04@\xdf;\ +Rj(H\xb6)\xcdv_\x03\xf4\xdd\x96\x02&\x84\ +\x03\xe8\xd0l\xb7>@\xdf\x8fP\x89\xa0 8\x07\xcc\ +xT\x88\xe5\xb69@\xfc\x22\xd0\x93Rk\xee\x90:\ +\xd9\x95h\x0b\x80\xf3\xc0|\x8f\xef[\x81s>\xfb\x9c\ +\x05\x8e\x02\xcf\xcb?\xecS\xeb\xa3\xb4\x11\xe0\xf8\x04\xb0\ +\xa5\xac}\x8bz\xe6g>\xe3\x96T\xdd\xe3jQB\ +\xf0\x0b\xa0\xfcp\xf5\xbe\xba}\xb2L\x8a//\x8c\x0a\ +\x82\x01\x04\xf5\x92\xda^\xffw\x0c\xed\x96\x193\xd8/\ +6$\xc5\x9c9\x7fE\x07@\xd2 x\x8a\xd7\xb1z\ +\xe5\x84\x8b@{E\xac\xb1:L=\xad9\x1f5\x84\ +j\x97#\x9b\x80o\x92\xc4\x9b\x86\xf0@-_\xd5\xec\ +\xb84\xf1&!\x8ci\xc4\xe9\x94(\xde\x14\x84\xb4F\ +\x8cV\xa9\xe2M@\xc8i\xf4\xbfX\xb2\xf8\xb0\x10\xae\ +i\xf4}D\xba\xf80\x10\x8a\xd8o\x8fzY\xbb:\ +\x1a\x17/>\x0c\x84/\x1e75\xcb\x80\xc7Q\x8bo\ +1\x04\xe16\xf6k\xad\xbaf\x01\xf7\x80\x87\xd8\xb7\xce\ +\x1b\xb0_\xa1\xf3\xd3\xc7\xac\x9a.W%\x94\x9bQm\ +\xa0\xaanl\x9a\x05\x82H\xf1QA\x10-\xbe\xde\x10\ +b!\xbe^\x10b%\xde4\x84X\x8a7\x05!\xd6\ +\xe2\xc3BH\x84\xf8\xa0\x10\x12%\xde/\x84D\x8a\xd7\ +\x85\x90h\xf1\xe5{\x87\x82\xc7N1O\x93X\x17\xf6\ +_\xe6?\x00\xdf\xb1/Ez\x1a\xf1 \xff\x00\x84\x84\ +'\xd6v\x14\x1d\x07\x00\x00\x00\x00IEND\xaeB\ +`\x82\ +\x00\x00\x04\xc9\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x02\x0b\xfd]\xc5\xa3\x00\x00\x02\xc7IDA\ +Tx\xda\xed\x9b=h\x14A\x18\x86\x9fh\x8c\x11\x91\ +HR\xa8\x95\x85\xa2\x8d\x08F\xb08\x8c\x82\xc6\xc4\x9f\ +\x18\xa3x\x22\xc1\xc3\xcaJIe'\x96\xf6\xdaXj\ +*\x83\xd8\xa8\x98B\xfc\x03\x0b\x8bX\xd8\xa60`\xb4\ +Q\x88\x8ax\xc6\xd3l\x88\xcd,\xc8\xe9\xed|{\xf7\ +\xcd\xfee^\x188nv\xf6\x9b\xf7\x99\xdd\xd9\xf9f\ +\xef\xc0\xbd\x06\x81\x09`\x16\x08\x80%K\x09\xcc\xb1\x13\ +\xa6mn\xd5\x0dL\x0a\x0c\xdb\xca#s\xae\x5c\xa9\x13\ +\x98R0\x1f\x967\xc0\x9a<\x01\xb8\xaah>,W\ +\xf2b~\x150\xe7\x00\xc0\x1c\xd0\x9e\x07\x00{\x1d\x98\ +\x0fKI\xbb\xb3.\x88n\x8b\xa8\xfb\x0c|\xb3\xb4\xef\ +\x02z\x1a\xd4m\x07^e\xfd\x0a\x18\x8b\x18\xc1\xb1\x04\ +\xda\xc7\xd2\x0a\x96\xb9<\x00\x0f\xc0\x03\xf0\x00<\x00\x0f\ +\xc0\x03\xf0\x00<\x00\x0f`\x99\xaa\xd9lp\x1d\xb0\x1f\ +\xd8\x04\xb4\xd5\xd5\x95\x1c\xf6\xb7\x04\xd4\xea\xbe\x0b\x80\x19\ +\x93%.\xb8\x06\xd6\x01\x5c\x03\xe6\x9b\xcc\xe7[\xcd\x06\ +m\x1b&\x97\x81\x95\xae\xccw\x02\x8f[\xdc\xd0p\x09\ + ,\x93\xa6\xaf\xeas\xc080\x90\x83\xdb\xfa(p\ +[\xfb\xa4\x07\xd1\xd9\xd2\x1a\x11\xc4\x1aQ\x8au@\x13\ +\xc0\xb8B\x87\xbe\x00\xeb\x05\xb1\xba\x81\xaf\x0a\xf1ni\ +\x02x\xad`~(F\xbca\xd3\xa6\x95\x98S\x9a\x8f\ +\xc1\x8e\x88\xba\xa7\xc0\xbd\x88\xfaO\xc0K3\xaaR=\ +\x04\xb6\x00\xfb\x80\x0d\x11\xc7\x95\x81\xfe\x06u\xab5\xaf\ +\x80\xa8W\x5c\x01PIa\xb2\xab\x10\xfd\xae\xf1\xbef\ +\xb0K\xd8_hV2d~\x09\xb8\xa0\x19p-\xf0\ +!#\x10$\xe6g\xb4o\x01\x80=@5e\x08\x12\ +\xf3U\xa0\xd7U\x07\xfa\x80\xef\x96\x0e,\x02\xe7\x1d\xc4\ +>k\xd6\xfaQ\xb1\x7fh?\xff\x1bA\xa8&\x0cA\ +b~\xde,\xd8\x12Q\xbf !\xd2\x82 1_3\ +K\xe0Du\x08\xf8\xe9\x18\x82\xc4\xfc/\xe0XZ\x89\ +\xc7\x80C\x08R\xf3C\xa4\xacA\x07\x10\xa4\xe6\x8fg\ +%\x05=\xac\x08Aj~8ky\xf8\x113\x19\xb5\ +\x02Aj\xfeDV7#Z\x81 1\xff[\xb8\xa7\ +\x90\xaaN\x9a\x8e\xc6\x81P\x18\xf3\xa1N\xc5\x80 1\ +\x1f\x98\xe3r\xa5\xb2\xd0\x98mm\xbf`\xce\x95K\x9d\ +\x16@\xb0\x01\x1a%\xe7*7\x09!\x00\xceQ\x10\x9d\ +\x89\x09\xa1P\xe6\xe3BXLi\x8b-\x11\x8dZ\xd6\ +\x09\xb5\x22\xdc\xf36\xed\x06\x9e\x9b\x91\xfe{\xd4\x9f\x99\ +\xbaD\xd5\x96\x22\x88\x8d\xc0V\xf3\xf9-\xf0\x11//\ +///\xafL<\x06\xdb\x81\x8bf\xe7es\xce=\ +\xbe\x03\x1e\x007\xcd\x12[\xa4\xbb\xb8\xfb\xe3SZ\xe5\ +\x8e\xd4\xfc\xce\x02\x9a\x0f\xcb\x8ez\xb3\xff\xfb\x91\xd4\xae\ +\x02\xdf\xf2\xbd\x12\x00\xd3\x05\x060-\x9d\x18\x9f\x14\xf0\ +\xf2\x7f\x11'\xf7\xe9\x02n\x00\xef\x0b`|\x16\xb8n\ +<\xfd\xa3?\xa9\xe0\x84!^n\x19,\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00\x04O\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x09\x04#\x9fp\xa0\xe8\x00\x00\x02MIDA\ +Tx\xda\xed\x9b;,\x04A\x18\xc7\x7f'\x1c\xe2U\ +H<\x82B\xaf\xa3\x90 !\x11\x15:$\x1e%\x1a\ +\x89F\xa2\xa5\x11\xbdJ\x22Q\xa8\x88J{\xc5)$\ +\x5ch%\x0a\x85\x84x%\x1a\x8dWq\x8a\x1b\xc9\x86\ +\x9du\xbb\xf6\xce\xce|\xfbO&\x9bKn\xe6\xdb\xef\ +?\xf3=w7A\xfe\xa8\x03F\xd4\xe8\x00\xda\x80\x1a\ +\xccC\xc2\xef\x84r`\x09x\x02\xb2\x16\x0c_\xa8\x07\ +\x0e-Q\xdc7\x01\x0d\xc0\xa5e\xcag\xfd\x1c\xfb#\ +\x0b\x95\xffA@\x89\x86\x80E\xa0\x07\xa1\xa8\xfb\xc5\xe1\ +\x1d\x00}@U\xc4\xf5\x08l\x02\xd3\x1e\x93\xd7\x0c\xda\ +\xc8\xc0\x04\xecz\xec<\x12\x088\xd7L\xec\x93B\xc0\ +\xb3f\xe2_l\xbe_\x8d\xc8\x11\x90\xd0L\x0c%\x85\ +t \xad\xae\x03E& \x90\x1e\xa1\xa4\x90\xdfv\xff\ +k\x8d~\x13L l\x02\xd2\x8e5\xd2\x92\x08\xe8\x05\ +R.\xeb\x1c\x01\x836\x13\xa0S\xbc\xd8D\xfc)\x15\ +\x16\x8d\xd8\x04b'((\x0cF=\x11\xeaV\xf7\x93\ +)T\x22TZ\xa4\xddX\x0d8oA]3\x98`\ +;!\xa3\x19x\x03\xde\x81\x16\x89ap\x1eH\x02e\ +\xc0\xac\xb4\x13\x90\x04\xee\x1c\xb2\x1f\xc8\xf5)\x8d\x8c\x02\ +A\xe0\xd6\x95\x9a\x92D@\xc6E\xfe\x99\xed\x04$\x81\ +1\xbc\xdb\xf1g\xc0\x1cPa\x13\x01\x8d\xc02pM\ +\xfe\xbd\xfd{`\x1dh5\x99\x80N`\x13x!\xf8\ +C\x8e7`OS[\x88\xaa\x06_L\x0e\x83bM\ +@\xe7\x04S\xd2\x9c\xa0\x1bN\x5c\xe4\x1fK\xca\x03\xa6\ +\x5c\xe4OJ\x22\xa0\x0c\xb8q\xc8\xbeU&\x22\xa6\x18\ +\xfa\x00\xb6\x1c\xbf7UU(\xaa\x1cn\x00^U\xac\ +o*\x94\x1e\xa5D\x17\x8f\xc0\xbe#\xec\x15\x04Q&\ +\x00`\xa3\xd0\x02\x8a\xd5\x13\xfc\x0f\xe4\xa5\x87\xf8\x07#\ +1\x01\xd2\x09\xf0\xe3\x04\x87\x81q\xa0\x8b\xdc{\xc2\xd5\ +6\x10\xe0\xc7\x09\xda\x82\xd8\x09\xc6\x04\xc4\x04\xc4\x04\x04\ +*\x22\xb2\xc0)0D4\xdf\x13\x0e\xad\x88\xf3R\xbe\ +\xd2\xc0\x8d\x0bm\xa1!COnh\x0bY\xf9z\xbc\ +\x9b\x13|\x96\x1e\x05n4\xff\x15\xf3\x05\xc9\x0e\xfa\x9e\ +\xbc\x08'8!)\x0c\xba\x15CI\xe0\x02h\x97Z\ +\x0c\xbd\x03+q>\x98\xeb\xcb[\xff\xdd\xa0\x17\xca\x81\ +m\xc9\x04|a\x06\xb8\xb2\x95\x80\x84\x8f\xd30\xaa\xda\ +b\x9d\xaa%Vk\x83\x13\xfc\x04\x8bh\x85Ul\xc2\ +\x85`\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x07\xe9\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x00*\x83\x02\xb7\x7f\x00\x00\x05\xe7IDA\ +Tx\xda\xe5\x9b[lVE\x10\xc7\x7f\xbd\xc8\xa5\xb6\ +\xd8\x8a\xf6\xa1-xy\xb0H\x0aF\x11%\x82\xa2\x80\ +\xbchB\x10M\xea\x83\x0f\xc6F-\x8dxE\xaaF\ +\xd2G}\xc0\xe2\x03\xd6KD\xc4\x10\x12\x03\x12\x10\xb1\ +\xb4jTD\xa5\xa1\x1a\x8d\x174j\xaa\xd6K\xec\x95\ +Zl\xb9\xb4\xf5\xe1\xccg\xbe|\x9e\xd9s\xf6\x9c\xfd\ +Z\x8eNr\x92/\xfb\xed\xcc\xce\xee\xd9\xdd\x99\xf9\xcf\ +\x9c\x1c\xb2O\x93\x80\xa5\xc0<\xe0b\xa0\x12\x98\x0e\x9c\ +\x05\x14J\x9fA\xe0(\xd0\x03|\x03|\x0d\xb4\x03o\ +\x03'H0\xdd\x0b\xf4\x02c\x11\x9f^`MR'\ +\xbf:\xc6\xc43\x9f\xbb\x936\xf9\xb3\x81c\x0e\x17\xe0\ +\x98\xc8tN\xb9YZ\x80\xdb\x80\x02\x87\xf2\x0aDf\ +b\x16`y\x16d^\x9f\x94\xed\x9f\x0b\xf4)[\xf9\ +!`!P\x0e\x94\x00y\xf2\x94H\xdbB\xe0\x01\x85\ +\xb7/\x8b/\xcc)\xcdU&0\x0cL\x0e\xc1\x9f/\ +&\xd1O\xc6\xdc$\x1c\x81\xab\x95\xf6O\x80\xe3!\xf8\ +O\x01\x07\x94\xff\x16M\xd4\x02T\x03\x07\x81\x01\xa0\x0b\ +h\x05\x1e\x06\xaa|\xfa\xaePd|l\xa1\xd7;J\ +\xbb\x9f\xec*\xd1\xa5Ut;*\xbaV\x039.\x16\ +\xe8\x95\x00\x13\xf5#\xd0\x04\xdc\x05\xec4\xf4\xbb\xc5b\ +\xdcK\x0crv\xcaXM2\xb6I\xb7]!\x8f\x9d\ +J\x0d\x8e\xec\xf8\x9f\xc04\xcb\xb1\xbfr4\xf6\xd6\xa8\ +\x93\xbf\x11\x18q\xa4\xc4\x13\x11\xc6\xafq\xe8H\xddi\ +;\xf8L\x83)\xb3}>\x03\xa6F<~\xad\x8et\ +\x18\x06\xe6\xd8\x0c\xfe\x86\xa3\x81\x0f\x01\xe7\xc68\x82E\ +\xc0{\x8et\xf9(\xec\xa5\x7f\xabAH\x07\xb0\x18X\ +/\x93\xd3\x8e\xc8\x1f@\xbd\xd8\xf4\xb8\x94'\xb2\xb4\xa8\ +rDtY/\xbau\x18\xf4\xaf\xcb\x14\x9ei&\xa6\ +\x02\xdf\x01e>\x8a\x0c\x8b\x1dnOk+\x15\x17u\ +\xb6\xc4\xf7=@\x9b\x98\xb1!\xc7&\xbb\x08\xb8\x01\xb8\ +J~w\xcb\xf1j\x91\x05O\xd1\xe5\xe2GL\xf1\x91\ +\xd1\x03\x5c \x97\xb2/\xddoX\xbd\x07\x13\x14\x8d\xae\ +3\xcc\xe3QS\xc4\xf5\xbb\xc2t\xd8\xd1v\x1e/\xca\ +\x17\xcf\xd3o.\xdd\xb2\x83\xfeE\xb7\x1bVmq\x02\ +\x01\x99E\x86\xf9\xd4\xf81\x1cP:7;T\xea<\ +\xd9\x9e\xcd\xc0orO\x0c\x01\xbfJ\xdb:\xe9\xe3\x8a\ +43z0\xb3c%0\xaat\xbe\xd6\x81\x22\xe5\xc0\ +\xcb\x12\xe8\x04\x99\xabS\xc0\x16\xe5\x22\xb6\xa5\xa5\x86q\ +f\xa5w|\x5c\xe9t\xc4A@\xb1*\xa2S\xd5\x0b\ +\xac\x8c9v\x0e\x1e\xca\xac^\x86)\xc7`\x86\x22\xa0\ +#f\xc8\x5c\x07\xbc\x0a\x14G\xe0-\x01v\x00\xb51\ +}\x88\x0e\xc3q\xfc\x876\x18\xde\xc4\xf6\x88\x16`\x95\ +\xa3Xb$\xe2N\x98\x22\xd1\xa0&wCz\xe7%\ +\x01J\xbc\xae8\x16\x1a\x95\x11/\x1f\xe0\x07\x87\xcd\xb0\ +\x18\xbfP\x1c$\x93\xcc%\x99gew\x00\xc3^\x8b\ +\x9d\xf0R\x00\xc4\xbd\x11X G\xa3X~o\xc4\x0c\ +\xa5o\xb6@\x90\xdb\x02\xe6\xb2\xdb\xefn\x9b\x16\x82\xf1\ +\xe9\x10\x0aT\xe0\xa5\xb3\xfc\xf8;\x81K\x0d\xbc\x97\x01\ +\xbf(\xbc'BZ\x86-\x01sh3a\x13Ex\ +\xf98\xd3y\x0c\x02&5T\xf780?\xc4\x04\xae\ +\x94\xbe~2\xee\x0b\xe0\x9dg0\xe7c2\xb7\xa2 \ +\x05&\xcb\xed\xab\x09\xd9\x14\xc0\xbfO\xe1{\xd6\xe2\x0c\ +\xbf`\xb8\x8bL\xd4d\xd0{\x8f\x0d.\x91\x0fl3\ +\xf8\x06&\xfaY\xe1\xb3At\x17+2~\x0a\xe0;\ +\xa2\xf0m\x8bb\xc9J\x15a\x83\x01|C\x0a\x9fM\ +no\xba\x22\xe3\xaf\x00\xbeA\x85\xaft<\xf3\x02\x89\ +\xa2\x5c\xc3\x11hT\xfe\xeb\x0c\x90\xd9\xad\xb4\xcf\xb6\xd0\ +\xabJi\xef\x0aq\xfc\xfc\xa8\xd1\xe6\x08\x04]\x82\xcf\ +D\xc4\x13\x9fsp\x09\xee\x09\xe0\xdb\x14\xf7\x12\x0c2\ +\x83\xa3b\xabOW38'\xc0\xfd6\x9a\xc10\x8e\ +P\x18o\xac|\x82\x1d\xa1\xc6(\x8eP\x18W\xb8\x8d\ +\xf0E\x0f\x9b\xb3\xe0\x0a\xbfha\xc2\xf7\xda\xba\xc2\xcb\ +\x03\x18\xde\x15\xd4\xd7&\x18\xeaq\x1c\x0cUX\x8c?\ +\x09s\x9erL\x16=\xd4\xb6\xd9e\x19\x09\xa6h\xa5\ +\xc3pxED`t\xbbAnCz\xe7\xe7\x95N\ +\xfbc\xa2\xc1\xb51\x17a\x04/\x13\x1c\x07\x10i6\ +Y\xa5\xdc4\xe4GCMFb(\xd0\x04\xdc,[\ +\xd8\x96z\x81\x9b,\xcdg&\x8d\xe2%B\x02\xfd\x99\ +J\xc3[\xb8\xce\x81\xc3U&a\xea\xc9\x10o\xfd\xa4\ +CPtYXP\x14\x81\x8a\xfd:\xb68\xf4EO\x8d\x15j\x8c\xa6\xa4\ +\xe2\xda\x04-@\xbda\x1e\x8fdz\x80\xe9t&\xf0\ +\x83\x12?\x0f\xe3\x95\xc0\x1d\xce\xc0\xee\x97\xe1\xa5\xa4+\ +\xe4\xe6>$\x81\xc7\x80\xe3I\x15\xe0ez\xae\x00\xce\ +\x11\xcb\xf2%^\xfa+==>\x1f/\xcd\xe7W\x1c\ +\x15\x98\x1eG\xce\x87\xa9@\xe2\x1a\xe01\xe0\x03\xf4T\ +W/^\xe6\xe5\x0cG\xdb\xb9\xdep<3\x0b$L\ +\x95c\xab\xc3\x0c\x98c\xb8=m\x9f6\x13\x1a\x13\x82\ +\x8ae\xa1]\xe8\xf2\xa1\x0d\x00t\xa1la\x17\x03\x7f\ +N\xb4\xca\xf1<\xe0}G:\x0c\x19@\x16\xa3/?\ +\xeaH\x81'#,\xc0\x1a\x87\xc1TM\xd4-\xd8\xc0\ +\xc4\x14J\xe6\x00\xdf3\xc1\x85\x92\xa9Xa+\xe3_\ +*\xbb\xc0 g\x07\xe1Ke_#f\xa9l\x8a\xaa\ +\xe52\xea'\xb8XZKJ>\xe5\xc0\x8e\xefW\x00\ +\xd4\xf4b\xe9~\xd1\xb5z\xa2\x9c\x90:\xf4B\xc5\xb0\ +\xf4f\x1c36\xd1\xe4\xe2\x83\x09\xcd\x029\xff`\x22\ +\x1b\xfe\xfd\x17\xb2\x0d\x8b}\xe0\xf6{d't\xe0e\ +y\x06\xd2\x00\xd9\x02\xe0|A\x85\xfd\x90\xdb~\x91\x9d\ +\x08rUk\x9cY\x9f\xe0\x9c\xb2\x95\x1ak\xc9\x82\xcc\ +\xd6$\xc5\xe2\x89\xf9p2\x9bT\xcb\xff\xf8\xd3\xd9\x14\ +\x9d\xf6\x1fO\xe7\x8c\xc3\x22\xa4\x7f>?\x0b\xb8\x08/\ +\xff_\x22\xf8\x03\xb2\xc5\xfb$^\xff\x16\xaf\xd0a\x5c\ +>\x9f\xff\x1b\x19\xef\x5c\xc7\xa6\xcdG\xd2\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00\x06-\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x069Q\xe6Q'\x00\x00\x04+IDA\ +Tx\xda\xed\x9bIh\x14A\x14\x86\xbf\x19\xe3J\xf4\ +`\x8c\x82\x22\xd1\xb8\x1f\x8c\xd1\x04A\x8c1n\x07\xbd\ +\x88\xb8\xe1]\xf0*^T\ +\xc1m&\x196{\x1f\x05#X\x01|R\xf8\xfd\xf3\ +3m\x043M\xc0\x08\xf9\x95U\xdfl'y\xb8\x92\ +\xb3\xab\xc0\x1a,\x19\x9a6q\x82\xd5\xb9l\x04\xa7k\ +\xb4\x99\x91\xcb\x04\xfc\xd6h\xf3+\xa8\x04,\x04\xae\xcb\ +n\xeen\x9a\x81\x8a\xdb\x86\xdaX\xb1\x0e\xb8'\xb2]\ +\x03*M\xaf\x02\xe5\xf4ME\xebJc\xbe\xc6EA\ +\xd57o\xa51*\xd7\xda\xf4\xd3I\xef\x04.\xdf\xab\ +@\x0d\xe6\xc2\xd4\x85\xc0e\x9b\xbe\xea]\x0c\xa4\x0a\xf7\ +\x14\xb2\x9d\xd2!@\xd7\x11\x9af\xd0`uH\xd0c\ +\xb6\x94.\x92\xa7\xc6-iN\xe3i>\x0c\xae\xb6'\ +\xd8\x22\xd3\xc0\x8a&\x1f\xf6\xa7\xc5\x87\xd2\xd6~\xaal\ +\x9e7\x9b\xb4\x01\xc5\xd8\xa7\xcaV\x04\xc0\x9d\xaf\xc4>\ +Uv\xa2_\x1b`M\x96.&\x99~\xdaH2\x03\ +l\x0e\xc1A\x99\xcc\xf9F\xe0\x08}#\xcf\x8e\xc9\xd2\ +\x1dD8]>\x0e\xbcqxq?\xea\x1b\x17aQ\ +\xfe\x80\x83\x0e\xafc@5\xb0\xd5\xa1\x930_\x99\x19\ +\xe72\x8a\xabc@\x89,CQ\xbb4\x95\xa0G\xa6\ +y-\xd1\xbb6W\xd3\x93\x8d\x91D\xef\xe2d\x9fT\ +\xbcH_\x9dM\xa1@\xa6C.^\x9e\xfe+\xc3\xbe\ +W\xd2\xb5\xca\xf0\x95\xd0}}~\x02\xe1\xbe>\xff\x86\ +\xee\xeb\xf3\x8f\xad\x0d\xfe\x01\x17O\x99\xa5\x0a\x0c\xf9s\ +\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x05\xa1\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x082\x06\x5c\xaa\x8f\xed\x00\x00\x03\x9fIDA\ +Tx\xda\xed\x9bohMq\x18\xc7?\xf7\xbaM\xfe\ +\x8dFY[\xa3\xcc\x0bSdY-\x91\x08i\x8a\x22\ +e\x8axAK\x88\xa4%\xa2\x9b(y!/\x84\x88\ +\x17\xf6B\xb4$\xa5\x15\x8b\x12/\xe6\xdd^\xd9\xfc[\ +\x96q\xe5\xce\xd6\x86\x19\xdbxq\x9e[\xeb\xba\xbf\xdf\ +=\xf7\xee\x9cs\xef\xf9\x9d}\xeb\xa9\xdd\xf3\xec\x9c\xdf\ +\xef\xf9\xde\xe7\xf7\xfc\x9e\xdfs\x9e\x0b\xff\xa3\x14\x88\x02\ +-@7\xf0\xd7\xe7\xd2-\xb6D\xc56%B@=\ +\xf0\xd3\x00\xa3U\xf2\x038\xaa\x22\xe0\xaa\xc1\x86'\xcb\ +\x95d\xe3\x0f\x06\xc8\xf8\x84\xecO\xb8\xfdL\xe0-0\ +\x83`\xa1\x17(\x0f\x03\xb5\x014\x1e\xb1y\x1b\xc0}\ +\x85\x8b4\x03e\x06\x18Z&\xb6\xa4\xb2\xf1\x1e@\xab\ +B\xb9\xd4\xa0o\xbbJack\x18(T\xdc\xf4\xd9\ + \x02>)\xae\x17F<\x9eH\x18\x98\xae\xd1\xf7\x01\ +\xc3^N\xc8\x0b\x02\x16\x01\xfb\x80j\xa0\x02\x98\xa4\xf9\ +\xdf!\xa0\x0bx\x02\xdc\x04\x9e{AB\x87b}\x94\ +\x8c\xf1\xb9!\xe0\xb4\x18\x95\xed^}\x07\x98\xea\x80\x8d\ +%\x8a\xe7w\xb8I@\xd4\xa1\x84\xe5%0\xd9o\x04\ +\xcc\x07\x06\x1d\xcc\xdan\xb8E@\xd8\xa5eu\x06(\ +p\xf0y\xbb%\x96\xb8\x12\x95\xdd\xc0JM\x90\xeb\xd1\ +\xc8\x90f\x9e;\xfdD@w\x8ak=\xe2\x8aE\x1a\ +)\x04\xae+\x9e\xb9\xcaO\xbb\xc0V\xd9\xcf\x13\xcf\x1a\ +\x01\xf6\xd8\xbc\xb7X1\x9f/n\xc4\x00\xb7\xf2\x80F\ +`\x05\xb0\x0b\x98 \xdbY\xb3\xcd{\xe7i\x92$_\ +\xe5\x01\xd9`\x83\xa4\xe0\xa9\xe6\xd3\xe4\xa7] S\x94\ +\x03w\x81\x87\xb2\x04R\xe1\x81\x89\x1e0E\xb6\xcc\x81\ +4y@\xaf\xe6\xd0\x96\xb7\x99`:l\x06:m$\ +A#\xc0\x16?\xa6\xc2:\x1c\xb0\x99\x01\xfe\x01\x0e\xfb\ +\xf5,\xa0\xc3G\x1b\xc6\x7f\x00V;4^\xde\x05\xc1\ +b\x8d\xae\x1f8\x01,\x00\x9e\x9aP\x0f\xb0\x8b\xc4\xa1\ +\xe7$\x10\xf3\xb2B\x93\x0b\xbcKq\xad\x1d\xd8\xeb\xa5\ +\xf1\xb9$\xe0\x9a\xcdk\x98\xba\x04.\x00\xdf\x81\x1d\xf2\ +\xb9As\x08\xf2mI,\x9f\x90\xf7\xa9p\xce0N\ +@\x8e\xc7\x9f-\x128\x026\x01od\xcb\x8b\xc9\xdf\ +\x1b\x83\x12\x04\xd7%U\x8b\x122\x0c\xac\x0dB\x10<\ +\xa5\xf0\xbc\xb0\xe8\x8c_\x02K4\xba\xca \x10\xf0K\ +\xa3\x1b\x08\x02\x01\x8f\xb3\xd4\x19\x13\x04\xe7`\xbd\xafO\ +\x1e\xafKt\x9e\x06\xc1\x5c\x9c\x05:\xb1\xbaO\xea\x81\ +\xe52\x91\x17\xc0y\xafO\x82\xe3g\x814\xdb`\xc8\ + \x02B\xba \x18W\xe8*\x0c\x22`\xa1\xe2\xfa\xd7\ +\x08V%\xa6*\x85\xf22p\x0c\xab8\x99\x09\xe2X\ +E\xcf\xb1\xf4\xfa\x14\x89\xdbNt\xc0\xf8\xb9\xc09\x85\ +\xae\x1d`;\xce\xb7\xa1~\xc3\xea=.\xcdp\xb2\xcb\ +\x80g\x8aT\xd9\x0d\xa9EX\xeepi\x80\xb8Dz\ +;\xf9\xc8q\xac\xf7\x00^\xf5\x0a\xbf\x1f\xeda5\x8c\ +\xad\x99I'1qi\x15\x8a%\x01\xf2\xb2Qz\x08\ +X\x9f<\x91:\x17I\x88jN\x86\xb1\x1c\x18_\xa7\ +;\xaa\xb6\xb90hk\xd28\x11\xe0\xac\x87k=!\ +\xaf\x805\xe9\xf6\xc7\x88\xb8G\x0dV\xb7\xd7\xac\x0c\x03\ +Ye\x8a3\xc6 V\xab\xdb\x08V\xf3\xf2m\x1b\xb1\ +\xa1\xcb\xa1\xcc0.\x05\x97&\xe0\x11\xea>$\xc7\xd0\ +\xaf`\xbf@*Aq\x1b\xdf\xd4-\xacW\xe7\xbe\x84\ +\x8a\x80K\xe2\x01\xe9~\xd3\xb3\xdb\xefYW\x7f\x96\xeb\ +\xb3\x0d\x97z\x01\xfd@@\x03\xce\xf4\x04\xfb\x8e\x80\x01\ +\xe0\x10\x86\xc1.\x01\xed\xc0b\x0c\x84\x1d\x02\x1a\xd1\xff\ +p\xc2X\x02\x8cty\xbb\x04\xbcF_\x127\x06}\ +\x0a\x97\x9fF@\xd02\xca\xf0\xdf\xc0\x11\xc3\xcaki\ +Q\x06\x5c\xc4\xfa\xd1Su\xbeO\xf6\x1f)]\xdb|\ +\x1e\xda\xe6\xcc\x00\x00\x00\x00IEND\xaeB`\x82\ +\ +\x00\x00\x06\x92\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x09\x07\x16\xe2\xee7\x08\x00\x00\x04\x90IDA\ +Tx\xda\xed\xdb[\xa8UU\x14\x06\xe0\xcf[\xa1'\ +\xed\xa6\x19f\xa8],2$\xa3\xf4H\x81\x10\x89\x0f\ +I/\x91oQaHt\xa3\x92n\x10YY \x94\ +\x0fE)E\x19u\xb4\x1b\x04A\x14B=\x89)\x1a\ +\x85\xc7\x22\xcb\xa4\xf0\x88\xdd\xacL\xbcu\xd4\xe3\xe9a\ +\xcd\x03r\xda{\xed\xb9\xf6^k/7\xed\x1f\xc6\xcb\ +\xdek\x8e5\xff\xb1\xe6\x1cs\xcc1\xc7\xa4\x8d\xff7\ +\x864\xe9=\x17b\x06.\xc7\x14\x9c\x8f1\x18\x8d\xe3\ +\xd8\x8f\xbf\xb0\x13\xdb\xb1\x05\x1bq\xa8U\x0d{*n\ +\xc4\x1b\xd8\x85\xfe:\xe4\x08\xd6\xe1>\x9c\xd3*\xc4/\ +\xc6\x0b\xd8['\xe9jr\x14\xef\x86Q\x94\x15#p\ ++\xd6\xe0\x13\xbc\x8c\xd9E\x10_\x83\xbe\x9c\x89W\x92\ +\x0fqAd\xbf\xc6\x86\xa9TI\xcf\xd2<\x88\x8f\xc2\ +\xb20\x5c\xfb\x9b(\x87\xf18\x86\xd5 \xdf]C\xcf\ +\xcd\x8d\x90\xef\xc4\x8e&\x13\x1f,\xeb0\xb1B\xdf\xc6\ +E\x90\xef\xc7\x86!u\xae\x1c\x0f\xe3\x19\x0c\xcf\xd8\xb6\ +\x0f\xdf\xe3\xb7 {\xc2ocp\x1e\xa6br\xc6\xd5\ +i\x0f\xe6c\xf3\x09\xe4?\xc3\xf4\x88\xb6\x87\xea\xf1\xee\ +]\x19\xbf\xd2\x16,\xc1\xdc\xb0\xec\xc5\xcc\xdb\x9b\xb0\x1a\ +\x07\x22\xdfq\x007d\xf8\xf2'J4Fbm\xa4\ +\xd2\xfdX\x89\xab\x1a\xf41\xa3\xf1\x10~\x89\x5c6\xeb\ +\x99\x92Q8\x05\x9fF(;\x8e71!\xe7Uf\ +4\x9e\x0f\xcba\xde~$j\xce\xbf\x1d\xa1\xe8\x1b\xcc\ +,8\xce\xb8\x06=\xcd6\xc0c\x11JV\xa3\xa3I\ +\xc1\xd68l\xca@p\x1fV\xd5k\x8098\x96\xd2\ +\xb8/\x84\xaa\xcdFG\xf0\xf41\xe4gcQ=\x06\ +\x18U\xc3\xa9\x1c\xc7\x9d%\x85\xdc1\xde~_\x88U\ +\xd4k\x80\xe7j\xbc\xe0\xfe\x92\xc8\x8f\x8d$\x7fb\xbc\ +\x9f\xd9\x00S\xf0OJ\xa3\x95-\xf2\xe5\xeb6\xc0\xea\ +\x94\x06\xdf\x86\xe9q\xb2~\xf9\xce\x0am3\x19`r\ +\xcaz\xdb\x8b+J \x7fv\x03\xe43\x1b`I\xca\ +\xc3+J\x1a\xfak\x1b \x9fj\x80J\x9b\x99\xcb\xaa\ +(9\x8cgK \x7f5\xe6\xd5xf\x17\x1eL\xf9\ +\xbfj\xfe\xa0\x92\x01~\xac\xf2\xec\x0a\xec.\xc9\x00\xb5\ +0-Hn\xce\xa6\xa7\x82\xe3\xeb(i\xf8\xdf[d\ +NaX\x95=r\x17\x86\xe2w|\x80\x85a\x87W\ +\x06F\xe2\xb6\x82t\xf7\xb6B\xa2u(\xbe(h\x04\ +\xaco\x95l\xf3d\xc9yA\x9e\xe4\x8f\xe0\xba!Z\ +\x07\xa3p{\xd8\xa0\x9d\xd9\x80\x9e~l\x0b;\xc4n\ +m\xb4\xd1F\x1bm\xb4\xd1\xc6\xff\x16\x03\x81\xd0\x8c\x10\ +d\x5c\xaa\xb1\xaa\x91\xbd\x92\x03\xcbUZ\xa8\xbac\xae\ +\xfcO\x5c\xb6\x87\xf0\xb5%\xf0yA\x1b\x8d\xcd\x9aW\ +\x83\xd4\xd0\x14\xe8\x95\x9c\xfd\x15\x819aJ\x94\x81\xd3\ +qw\x18\x89_\xe35IV\xab\xe2\xe6\xa0(\xb9\xa7\ +$\xf2\xa7\xe1;\xff=\xbb<\xa3\xd2^\xbbH\xf4\x95\ +d\x80\xa7p\xc9\xa0\xdf\xa6a\xf1\xe0\x07\xd3*<\xbe\ +T=?H\x92<\xad\x95\x87\xdbT\x02\xf9\x89\xb8\xab\ +\xca\x7f\x17e\x99\x02\x8bR^\xd2)IE\xa7\x0d\xff\ +\x8fK\xfa\xfa\xaf\xa4\xf4\xe9\x89<\x0c\x10C\xbe[r\ +\x98\xd1l\x5c\xa9z\xc5\xdaAU\x0a7\xb2\x18`v\ +$\xf9\xb1%e\x8c\xb6\xa5\xf4kYZ\x8a(\xc6\x00\ +'3\xf9ZC\xffo\x9c\xd5\x88\x01Nv\xf2\x8bk\ +\xf4\xed\xd1\xb4\xc6\xb5\x0cp\xb2\x93_()\xd6H\x8b\ +HG\xd4k\x80\x18\xf2\xfd\x92r\x952N\x8e\x1e\xa8\ +A~\x9f\x88\xba\xe2j\x8dWE\x92\x1f\x90M\x92\x02\ +\x86f\xa0\x03\xefD\xf4\xe9\x96\x18ey\x86\xbe=\xb8\ +\xb6`\xf2\xb3BX[\xab//\xc6*\xcc;\xfe?\ +\x8a\xe5\x92\xfa\xdf\xbc#\xbc\xae\x1aC~@\xde\xcf\x12\ +\xe6g%\xb8C\x5cy\xfc\xafx$\x07C\xcc\xc2\xab\ +\xe2\xeb\x86\xdf\xab\xe5\xf4\x1a1@w\x98\xe7\xf3Cd\ +\x15\xd3\xe6`\x98\xaf\x0b0>r\x1b;\x0fObk\ +\xc6\xfe-\x97~\x87\xa0b>\xe0\xa0\xb8\xa2\xa7\xad\xb8\ +^R\x9e>\xb0<~TG\xc8\xdb\x132F\xbbC\ +\x802Lr'h<\xce\x95\xdc>\xc9\xbaK=\x84\ +;\x82\xa13cc\x86/?\x18\x93\xb0A\xb9\x97&\ +~\x10w7\xa0*\x164\x18\xe4\x8c\xc0\xd3\xd2\xeb\x0a\ +\x8b\x90^I\xcd\xd2\xc8<<\xec\xd2*/\xd9\x90!\ +\xc2\x9b*\xb9\x95U4\xf1>\xbc%\xfe\xe2T4:\ +\xf1R \xd1\x15\x82\x88\xe1u\xe8\x99)\xb9\xd9u,\ +g\xe2\x7f\x06'\x97;\xf1\xa20!\x84\xaa\xeb\xd5\x7f\ +\xabl'^\x0f\xabN!\x89\xdbf\xa5\xad;\xc2\xaa\ +1=L\x95I\x92*\x8f1\xc1\xe3\x1f\xc0\x1f\xf8\x19\ +?\x85H\xef\xab`\x806\xda(\x10\xff\x02Zo\x90\ +\xc4$\xf4\xda4\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x06\x99\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x149)\x12!\xf4\x00\x00\x04\x97IDA\ +Tx\xda\xe5\x9bKo\x14G\x10\xc7\x7f;`[q\ +b\xec\xe5\x95\x80\xc1\x88\x0b\x10\x0e`l\xe0\x00\x88\xc7\ +\x07\xc8\x11\x11\x04\xe4L\x84\x02\x01\x82\x90x\xad\x11\xcf\ +O\x00\x1c\x80\x9cr\x00\x85CH\x0e\x09\xb1o\x1cP\ +\xe4\xf5bC@\x5c \xc6!R\x1c\xf0b\x90\x12\x01\ +\xc2\xe6\xb0\xb5\xf2\xc4\xea\xeay\xec\xce\xee\xecPR\xcb\ +r\xcfv=\xfe\xd3S]\xdd]\x95\x22z\x9a\x09t\ +\xb8\xda|\xa0\xc5\xd5\x00\x9e\xbb\xda\x10\xd0\x07d\xe5\xef\ +3j\x90\x96\x02]\xc0\xef\xc0x\x89\xed.\x90\x01>\ +\x8d\xbb\xd1\x1f\x02_\x8b\xc2\xe3\x11\xb5;\xc0\x1e\xa01\ +N\x86\x7f$J\xfd\x15\xa1\xe1\x93\xdb?2\xc3Z\xaa\ +ix\x0a\xd8\x09\xe4+h\xf8\xe4\x96\x17\x1dR\x956\ +\xfe\x13\xe0\xc7*\x1a>\xb9\xdd\x10\xe7\x1a\xea-\x06\xa5\ +\xad\xc0\xb9\x80\xd3\xef>\xd0+\x9e\xfd6\xf0\xb7\xcb\xeb\ +\xe3Z\x11>\x06\xda\x81N`e@\xc7\xf7\x5cf\xc3\ +\x95(\xdf|\x06\x18\x0b\xe0\xbd\x8f\x02\x8bJ\x90\xb7\x18\ +8\x16`5\x19\x13\x99e\xa7)\xc0\x05\x9fJ\xdc\x04\ +>\x8b@\x87u@\xb7O\x1d\xbe\x05\xea\xca%\xb8\x0e\ +\xf8\xc9\x87\xd0\xdb\xc0\xc6\x0a\xf8\x9f\x8d\x22\xcbK\x9f\xeb\ +\xe5\x00!%h\xda\x04\xbd\x01\xce\x02\xf5\x15t\xc2S\ +\x81\x83\xc0+\x0f\xdd\xbe+u\x858\xee!\xe0\x0fq\ +X\xd5\xa2\x95\xc0\xa0\x87\x8e]a\x99\x7f\xe1\xc1\xb8\x0f\ +\x98\x13\x83@l.\x90\xf3p\x8c\xdb\x832]\x00\x8c\ +z\xac\xbbM1\x8aF\x9b<\x1c\xe4(\xd0\x16\xe4\xbb\ +\xff\xc5\xc2\xacW\xc2\xdf\xb8Q#p\xcb\xa2w\x8f_\ +\x7f\xb0\xcb\xc2\xe4\x91D\x81q\xa59\xe2\x974\xfd\xbf\ +\xf4b\xd0l\x89\xed_\x01\xcbk`+\xdenY\x1d\ +\xf2b\xa3JG,\xe8\x1d\xa5v(c\xb1\xe3\x90m\ +??l\x09r\xeaj\x08\x80\xa9\xe2\xabL\xb6<\xd5\ +|\xd87\x16\xd46\xd4\xe0\xa9\xd4\x06\x8b=\xfbL\x03\ +\xb4\x93\x9c_C*\xd0\x00\x9c\x963\xbe\xc7\xc0)\x9f\ +\xd1b\xd8q&\xeaQl\x1a0\x9d\xe1ih\xad\x09\ +)\xfc\x8c\x81\xd7\xc9\x08\xc7\x99h\xad\xc5\xae%~B\ +\xde\xdfJ\x98\x82C\x06~\x83\x11\x8e\xd3(\xab\xd8\x96\ +q\xff\xe8\x8e\xf2\xa3\xfd%\x08\xd6\x90\x8fj\x9cF\x07\ +\x14~\xfd\xee\xb5\x7fL\x89\xa1\xdb\x12\x00\xc0|\x8b}\ +\xcd\xc5\xfd\xb5I`\xaeD/\x1c\x17\x00\x90\xb7m\xe2\ +\xb9\xde\x91-\xa5\x89zI\x0ee\x95\xfeNGBG\ +\x13\xe5\x12\x04@\x9f\xd2\xbf\xc2\x01Z\x95\x87\x03\x09\x02\ +\xa0_\xe9ou\x80\x19\xca\xc3\xe1\x04\x01\xf0T\xe9\x9f\ +a\x03`4A\x00\xe45\x00\x00\xfeS\xe4\xf1J\x92\xea&^IR\xd3,K\xde8\ +\x85<\xe2\xc0\xb7\x5c;\xb0\xa7\xc9\xe5(\xa4\xa8U\x9b\ +Z\xd1o~\x8a{\x9ama\x99wy\x80\xf0\x18X\ +UE\xe3Wc\xbeMv\xb7c\xa5\x08H\x01\x97\xf1\ +\x97*\xdbPA\xc3\xeb(\xa4\xca\xbe\xf6\xd0\xedb\xb9\ +\x84]\xc7_\xb2\xf4\xa6\x0a\x18\xbf\x09\x7f\xc9\xd2?H\ +@T\x16\x9a\x02\x9c\xa7\xfa\xe9\xf2=>u\xb8DD\ +I]{\xf0_0\xf1P>\x8dR\xca\xdd\x16\xcaT\ +\xbf\x87\xff\x82\x89\xae\xa0\xdfxP\xda\x22\xb3!\x1d`\ +\xcc\x03&Jfr\xb2\xe7\xc83qe\x95\x966\x1b\ +X!\xc7q\xab\x08VmR,\xa0\xbaZ\x09'\x14\ +\xc7\xa2\xa9\x8aG\xa8q(\x9b\x1b\xa1Jesn\xaa\ +F\xe1\xe401(\x9c\x9cL\x8d\xc0n\x0a\x89\x15Q\ +\x19\xde\x0f|\x05|\x10\xf7-\xe9\x12\x89\xc0\xca\x01\xc6\ +\x00\x85D\xed\xc5Q}\xc7Q\xd3t&J\xe7;\xc5\ +Y\xa5e\xfa\xa6]\x1e<\xcf\xff\xcb\xe7\x8b%\xf4\xf9\ +(\x95{\x07w\x86\xf4>|\xff\xa46\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00&{\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\ +\x00\x00\x00\x04gAMA\x00\x00\xaf\xc87\x05\x8a\xe9\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x00H\x00\x00\ +\x00H\x00F\xc9k>\x00\x00\x00\x09vpAg\x00\ +\x00\x00\x80\x00\x00\x00\x80\x000\xe11\x9a\x00\x00%&\ +IDATx\xda\xed\x9d{|SU\xba\xf7\xbfI\ +\x9a\xb4\x94\xa6\x0d\x04\x84\xc6)\xa4\x0a\x15)\x97:0\ +Hq\x80\x02\x8a\xf8*#\x8e\xca\xe0\xe8(^\xde\xb9\ +\xe8{>\x88\xce\xcc\xf1\x9d\xf7\x1d\xb1\xce\xf1\x8c03\ +\xe2e\xc6\xb9\xa8\x5c\x06\x1d\xa5\xa3\x07\x14t*\x83R\ +\xe4RP\xd1B)h\x0f\x97\x00\xa5\xe5\x16\x09I\xe9\ +%m\x92\xf3\xc7\xcaNwvn;\xb7^<\xe7\xf7\ +\xf9\xecO\x92\x9d\xec\xb5W\xf6\xf3[\xcf\xf3\xacg=\ +k-\x8d\xcf\xe7\xe3\x7f\xf0\xdf\x17\x9a\x9e\xae@\x8a\xff\ +K\xb8\x03\xc5{\x00\x9f\xec\x90>{\x15\xe7\xfe[\xa0\ +/\x12@\x12\xa6V:\xee\x86\x81W@I'hs\ +a\xaa\x0f4>\xff\x7f\xcb\x84)\xf2\xff\xe9\x86\xfd^\ +p\xfa\x0b\xf2]\x84\xda\x0ep\xd8\xc1\xf6\x22\xd8\x10D\ +\xf0\xf8_\xa5C\x22\xc8\xd7\x0e}\x81\x00\x92\xc0u\x80\ +\xae\x1c\xae\xea\x0f%\x190>\x03\xc6\xea\x85\x80S\x86\ +N8\xe0\x81\x13\xedP\xd7\x02\xfbv\xc3G\xef\x81]\ +|\x85\x87`r\xf4y\xf4V\x02H-\x5c\xf7\xafp\ +\xf9P\xb89\x03\xa6\xe9\xe1\x1a\x0d\xe4vwe:\xe1\ +d;T_\x84\x1d;\xe0\x9dJ8\x07t\xd0E\x8a\ +>k:z\x1b\x01$\xa1\x8f\xb8\x14\xfeE\x0f7i\ +\xa1@\xcd\x85\xe6\xa2\x222\x8dFr,\x16\x8c\x16\x0b\ +h4\xa0\xd1`\xbe\xf2J2\xf3\xf2\xc4g\xad\x96v\ +\x97\x0b\xfb\x17_\x04\xbew54\xd0\xdc\xd0@\xbb\xd3\ +\x89\xbd\xaeNU%;\xe0\xa0\x13*\xeaa\xc3*8\ +$N\xd1A\x97v\xe83\xe8\x0d\x04\xd0\x00\xda\x07a\ +\xd0\xe5pK?xH\x07c\xa2]`\x19?\x9e\xfc\ +\x92\x12\xcc#Gb\xb4X0\x17\x15\x81V\x9b\x92\xc3\ +\xd5\xd0\x80\xfd\xc0\x01\xec\xfb\xf7\xd3\xb4s'\xe7jk\ +q_\xb8\x10\xb1.\x1dp\xf0\x02\xfc}\x0b\xac\xd9\x0c\ +g\x007\xc1\x9a\xa1W\xa3'\x09\xa0\x01t\xbf\x84\xcb\ +\x07\xc3\x22\x03\xdc\x19I\xbd\x9b\x0b\x0b\xb1\x96\x96b\x19\ +7\x8e\xfc\x92\x12u\xc2\xf4\xb7\xf8T\x1c\xf6\xfd\xfbi\ +\xdc\xb1\x83\xa6\xed\xdbi\xdc\xb6-\x22!\x5c\xf0\x1fg\ +\xe0o\xcb`\x0b\xd0F\x1f\xd0\x0a=A\x00\x0d\xa0\xfd\ +%\x8c\x18\x02\x8f\xeb\xe1\xfb\xe1~d\xb6Z)*+\ +\xc3:y2\xc6!C\x92\x17\xa4F\x03:]J\x88\ +a{\xf7]l\x1b6`\xdb\xb8\x11\xb7\xc3\x11R\xf7\ +\x0e\xf8\xe2\x1c\xbc\xfc\x04\xacF\x10A\xd2\x0a\xbd\x8e\x08\ +\xddM\x00\xed\x830x4<\x13N\xf0\x86\xecl\xac\ +\x13&0\xf6\x86\x1b0\x17\x16\xa6\xadE\xa7\xb2\x5c\xdb\ +\xc6\x8d\xd4\xafY\x83\xed\x9dwB\xfel'4\x9e\x82\ +g\x7f\x05\xab\x80V\xa0\x9d^\xa6\x11\xba\x8b\x00Z \ +\xe3yx\xc2\x00\x0f)U\xbd\xd1l\xa6\xe8\x9ak\x18\ +;{6\x86\x9c\x9cn\x17b*\xcau\x9d8A\xfd\ +\x9a5\xd4>\xff|\x88V\xe8\x84\xc6\xe3\xf0\xe4Rx\ +\x8b`\x22\xf4\xb8\x8f\x90n\x02h\x00\xed2\xb8\xd6\x08\ +/)=zC\xbf~L\xb9\xed6\x8a\xa6LI\x8f\ +\xe0R\xa4\xf2\xe3)\xd7\xedtb\xdb\xb0\x81=O>\ +\x89\xcbf\x0bz\x18m\xf0I\x1d<\xfe\x17\xf8\xd8O\ +\x047]\x81\xa6\x1e\x81.\x8dek\x17\xc1\xe0\xbb`\ +i\x7fxN\x03yr\xc1\x97\xcc\x9a\xc5\xb5\x0b\x17r\ +Iaa\xe8\x95>\x9fx\xc0\xa9\x1e\xa7\xe8\x86ru\ +YY\x98\xc7\x8fg\xec\xa2E\x18\x0b\x0b\xb1\xef\xdd\x1b\ +\xd0\x08\x19p\xa9\x05\xee\xfa6\xe4\xb7C\xedq\xa1\x09\ +\x94a\xe9nE\xba\x08\xa0}\x1a&^\x0ao\xe9\xe1\ +F\xf9\x17\xd6\xd1\xa3\x99\xbdp!\xd61c\xd0ed\ +\xc4Wj\x1f#\x86\xb9\xa4\x84+\x16.D\x97\x95\x85\ +}\xef^\x13f\xcd\x223++\xb5\ +wL\xd7\x88f\x0a\xca\xd5eea)+c\xf4O\ +~B\xcb\xe9\xd3\xd8kj\x00\xd0@\xa6\x19n\x9c\x06\ +E\x17a\xcf\x09\xd1[\xe8\xf6\x01\xa9T\xfa\x00\x1a@\ +\xf7\x02\x09\xcf\x01.\x84\ +FH{O!\x15\x04\xd0,\x82\xc1\xa3`\xb3\x16\xc6\ +J'\x0d\x99\x99\x5c?o\x1e\xf9\xc3\x86\xa5\xae\x85\xb7\ +\xb5a\xdb\xbb\x17[M\x0d\xb6\xcf>K\xe7s\x09\xc0\ +`4b\x994\x09\xeb\xb5\xd7\x92\x7f\xf5\xd5\x18\x0b\x0a\ +\xe2'r\x04R4m\xdd\xca\xfb\xb7\xdc\x12\xd4mt\ +\xc0;\xeb\xe0\xff\xed\x82\xe3\x88\x9eB'i$A\xb2\ +\x04\x08+|\xf3\xa0A\x94\xcd\x9e\x8d9\x5c\x04/\x01\ +\xd5i\xdb\xbf\x9f\xfa\xdd\xbb\xb1\xed\xdd\x9bTe\xcd%\ +%d\x9aL\xb8l\xb6\x90.\x9aZX&M\xa2\xe8\ +\xd6[\xb1\xce\x9e\x8d!//yR_\xb8\xc0\xa6[\ +n\xa1\xb1\xaa*p\x8fv\xa8_\x0d\xdf\xdb#Hp\ +\x11\x11RNK\xf0(\x19\x02\x84\x17\xbe\xd9\xcc\xdcy\ +\xf30\xf4\xeb\x97\x94\xcaw\xbb\xdd\xd4n\xdfN\xfd'\ +\x9f\xe0\xfa\xea\xab\x98\x951Z\xad\x98KJ\xc41~\ +<\x99&\x13\xe6\x92\x12\x0c&S\xcck\xed55\xb8\ +\x1d\x0e\xce\xd5\xd4\xd0|\xec\x18\xf6\x9a\x9a \x81\x84\x83\ +!7\x17\xebu\xd71a\xd1\xa2\xf8\xb5B\x98\xff^\ +\xfd\xc8#A&\xc1\x0b\xcd;\xe1\xae5\xb0\x03h\xa6\ ++f\xd0+\x08\x10Y\xf87\xdd\x84!++\xf1\x16\ +\xd1\xdeNmu5\xb5;w\xe2nm\x8d,\x00\x93\ +\x09KY\x19\xd6\x9bo&\xbf\xac\x0c\xa3\xd5\x9a\xeag\ +\x13 B\xd3\xd6\xad\xd8\xd6\xaf\x8f\xf8;\xcb\xd5W3\ +\xe1\xe1\x87\xc9\x9f2%)\xa7\xb6~\xf5jv.^\ +\x1c0\x09^h\xde\x0ew\xbf&H\xe0B\xc4\x0dR\ +J\x82D\x09\xa0\xff#\xec\x09\x12\xfe\xc0\x81\xcc\x9d3\ +G\xb4\xfc\x04\x07^\xea\xf7\xedcOU\x15\xae0\x03\ +,\x12\xac\xf3\xe6Qt\xcf=X\xe7\xcdK\xe5sP\ +\x05\xdb\xfa\xf5\xd8\xde~\x9b\xfaU\xab\xc2~o\x99<\ +\x99\xd2\xc7\x1f\xc76\ +\xcc\x9c\x19\xe4\x1c\x1e\x86\xc7\x97\x09\x128H!\x09\xe2\ +%\x80\xeey\xf8U&\xfc_\xe9\x84\xd9db\xee\xcc\ +\x99\x1823\x13R{\xb5\x9f\x7f\xce\x9e\x1d;p\xb7\ +\xb7\x87\xdc\xcc`21e\xf9r\x8a\x16.L\xb7L\ +\x13FSU\x15{\xca\xcbC|\x06Cn.\x13\x16\ +/f\xec\xfd\xf7'f\x0a\x9dN6\xcc\x9c\x19\x08\x1c\ +\x01\xec\x87\xc5/\xc0Z\xe0\x02]\x81\xa3\xa4\x10\x0f\x01\ +\xb4\xcb\xe0\xba<\xa8\x0c\xfcI\xbd\x9e\xb9\xd3\xa6a\x1e\ +80nu\xef\xee\xe8\xa0j\xf3fl\x87\x0f\x87\xdc\ +\xa8\xb7\xb5x5\x88D\x04\xcb\xe4\xc9L\xff\xdd\xef0\ +&\xd0\x1dv;\x9dl\x985+@\x02/4o\x81\ +\xfb*\xe0#\xba\xccAR$PK\x00\xcd\x22\x18|\ +%\xd4\xcb\x07ufO\x9a\x84\xd5b\x89[\xcd\xd9\xcf\ +\x9f\xa7\xea\xc3\x0f\xb1\x9f;\x17r#KY\x19\xd3W\ +\xaeL\x8bS\xd7\x1d\xb0\xad_O\xf5\xe2\xc5A\xa6\xc1\ +\x90\x9b\xcb\x94%K(\xba\xfd\xf6\x84H\xf0\xd6\xc4\x89\ +\x81\xf2\xbc\xd0\xbc\x15\x16\xbe\x01\xdb\x10$H\xaaw\xa0\ +v, \xe3\x1exO\x0bE\xd2\x89\x09#G2z\ +\xd8\xb0\xb8oh\xb7\xdb\xd9\xf0\xce;4\xbb\x5cA\xe7\ +\x0d&\x13\x93~\xfdk\xa6\xfe\xe9Od\xf6\x91V\x1f\ +\x0e\xa6Q\xa3\xc4\x00P\xbf~4\xf9\xb5\x81\xa7\xbd\x1d\ +\xdb\xa6M\xb8N\x9c\xc02y2\xba\xcc\xcc\xae\x0bb\ +\x8c7Hc\x09\x87+*\xf0\xb4\xb5\xa1\x01\xc37`\ +Z\x03T\x9eNA\x8c@\x8d\x06\xd0>\x0b?\xeb\x07\ +OK',\x03\x06p\xd3\xb7\xbe\x15\x7f7\xe7\xc8\x11\ +\xaa\xb6o\x0f\xb9\x81\xb9\xa4\x84\xb2\x95+1\x97\x94t\ +\xa3\xa8\xd2\x0f{M\x0dU\xf7\xde\x1bd\xc7\xcd\xa3G\ +3w\xed\xda\xb8\x1dD{m-\x1b\xae\xbb.\xe0\x18\ +\xb6\xc1\xa1\x15p\xc7^8\x8c\x88\x13$\x141\x8c\xa5\ +\x014\xbf\x84\xa2\x81\xf0W\x0dd\x02\x1822\xb8a\ +\xfcx2\xf5\xfa\xae_I,\x8e2\xa4Z\x7f\xe4\x08\ +U;w\x86\x9c\xb7\xce\x9b\xc7\xf5\xeb\xd6\xf5Y\x95\x1f\ +\x0d\xd9C\x872b\xc1\x02<\xed\xed\x9c\xd9\xb5\x0b\x80\ +\xd6\xb3g9\xf0\xdak\x14L\x9bF\xf6\xe0\xc1q\x95\ +\x95=th \xf5,\x03\x06^\x06\xdf\xf8@$\xa0\ +&\x9c|\x1a\x8b\x00\x19\xdf\x83\x95:Y\x7f\x7f\x92\xd5\ +J\xc1\xc0\x81\xeaJ\xf7\x8f\xb37\x9d9\xc3\xa6m\xdb\ +B\xbe.Z\xb8\x90Y\xaf\xbf\x8e.\x9e\xe1a\x87\x03\ +\x96.\x85\xad[\xc5\xfb\xa1C!\xd5\xc3\xcb)\x84.\ ++\x8b\x829s0Z\xad4n\xdd\x8a\xa7\xad\x0dO\ +{;\x877l\x10$\x184HuY\xe6\xf1\xe3\xc5\ +\xf3\xfc\xe8#\x00\xb2a\xe4Hp\xee\x82:\xbaH\x10\ +\x97\x16\x88F\x00\xcd2\xb8.\x1b\x9e\x94NXrs\ +\x99z\xd9eq=\x00\xbb\xc3\xc1{\xdb\xb7\xe3\xf1\x06\ +\x93\xb3h\xe1B\xcaV\xae\x8c\xefi\xd6\xd4\xc0-\xb7\ +\xc0\x1bo@U\x15\xac]\x0b\x7f\xfe3\xb4\xb7CY\ +Y|eu3\xcc%%\x14\xcc\x99\xc3\xe1\xb5k\x83\ +H\x90=h\x10\xe6\xd1\xa3U\xe7\x1eX\xa6M\xc3\xbe\ +o\x1f\x8e\xfaz\x00\x06\xc0\xc4l\xf8\xfc\x004\xd1\xe5\ +\x0f\xa8&A4\x1f@\xff\x07\xd8\x92\x01\xd7H'\xe6\ +\x8e\x1aE\xbe\xc9\xa4:\xd2\xe7\xf6x\xf8\xdb\x07\x1f\xe0\ +\xee\xe8\x08*\xb8\xe8\x9e{\x98\xber%\x1aM\x1c\xbd\ +\xd0\x9a\x1a\x981C\xb4\xfap\xb0Za\xdd:\xe8\xe5\ +~\x84\xdb\xe1`\xc3\x8c\x19A~\xc1\xec?\xff\x19\xeb\ +\xf5\xd7\xab\x0e\x14\xb9].\xde*-\xc5\xe5\x0f\x9c\xb5\ +\xc1\xa1W\xe0\xce}\xc2\x1fp!\x88\xa0\x8a\x04\xdaH\ +\xe7\x97\xc3}r\xe1\x17\x0d\x1cH~\xff\xfe\xe0\xf1\x80\ +\xd7\xdb\xf5*?<\x9e\xa0c\xd3'\x9f\x84\x08\x7f\xe4\ +\xddw3m\xc5\x0a|>_\xe0\x88\x89U\xab\xe0\xaa\ +\xab\x22\x0b\x1f\xc0f\x13\xbfQ\x8c\xb1\xf76\x18L&\ +\xe6n\xd9\x12\xe4\xf0V\xfd\xecg\xd8\xf7\xef\x0fy~\ +!\xcf\xd7\x7f\x18rr\x98\xfd\xfa\xeb\x81\xeb\xb3`\xc4\ +m\xf0(\xa2\x8b\x9eEd\xb9\x86 \x92\x09\xd0\xcf\x83\ +7\x83\xfa\xfc\xc3\x87\x93\xa9S\x9fA\xb6\xe7\xf0a\xea\ +O\x9e\x0c:7t\xfat\xae}\xeb\xad\x88\xd7\x84\xd5\ +\x08\xe5\xe5\xb0x\xb1\xfa'\xfc\xfe\xfbp\xec\x18\xf4\xc0\ +X\x81Z\xe8\xb2\xb2\x18\xb1`\x01'\xde\x7f\x9f\xd6S\ +\xa7\x849\xd8\xb8\x91\x82\xa9SU\xfb\x04\xd9C\x86\x00\ +\xd0\xe4\xefU\xe5@\xb1\x19\x0e\xee\x85c\xc4\x91m\x1c\ +\x8e)\xda\xe5p\xafV\x96\xcfWd2a\xd4\xe9B\ +\x19\x1a\xe1h\xb2\xdb\xd9\xa3\x88\xf0\xe5\x0c\x1f\xce\xcc\xbf\ +\xff=\xa8\xe5\x87;\x82p\xef\xbd\xf0\xc4\x13\xf1?\xe1\ +U\xab\xa2\x9b\x8b^\x00\xa5&p;\x9dl\xfa\xf1\x8f\ +E7O\xe5s\x9e\xf0\xd8c\x98\xc7\x06\xfcs&B\ +90\x00\xe8\x0f\xa8\xca\xb8\x0dG\x00\x9d\x01~ ?\ +1a\xe0\xc0\x88\xea(\x5c\xc5\xaa\x0e\x1e\x0c)tF\ +E\x05\xfa\xdc\x5c|>\x1f^\xaf7:\x11\xce\x9f\x17\ +\x02\x8c0\xea\xa6\x0aUU}\x8e\x04\xae\x93'\xd9p\ +\xe7\x9d\xaa\x9e\xb1t\x94\xbd\xf8bWy0\xe4\xff\xc3\ +#\x88\x897\x99\xa80\x05J\x9d\xae\xf9\x15|\xcb(\ +\x98\x04@\x91\xd1\xc8\x15F\xa3\xea?\xb5\xe7\xc4\x09l\ +\x8a\x04\x8e\x89\xcb\x961\xec;\xdfQW\x80\xc3\x81v\ +\xe6L\xd8\xbd;\xf9'|\xea\x14\x9c>\xdd\xeb\xcd\xc1\ +\x90\xc9\x93\x03\xbd\x83\xd6s\xe7p;\x9d\x14|\xfb\xdb\ +\xd1/\xf4k\xcb\xecK.\xc1\xedtr\xe6\xd3O\x01\ +\xc8\x11Y\xc6[m]k\x18D\x1d5T2D7\ +\x00\xfeE~\xe2\x8a\xecl\xd5*\xc9\xd5\xd2Bmc\ +cP\x81C\xa6Ne\xd4C\x0f\xc5T\xfd>\x9f\x0f\ +jj\xd0^~9$\x99\xfa\x15\x84U\xab\x84)\xe9\ +\xc50\x97\x94p\xfd\xbau\x81\xcf\xb5\xabWc\xdb\xb4\ +)\xfa\xf3\x96i\x88\x09?\xff\xb9HO\x03t\xd0\xff\ +Z\xf8?t9\x84Q\x1d\xb7\xa0/\x1f\x84\xc1\xf9\xf0\ +\x82\x14\xf53\xeb\xf5L\xca\xcbS\xddG\xadnh\xe0\ +\x8c\x223w\xda\x1bo\xd0\xcf\xef\xb0\xc4B\xc6\xdc\xb9\ +h\x22\xe4\x04$\x85\x9a\x1a\xb8p\x01\xe6\xccI}\xd9\ +\xb1\xb0j\x15\xac^\x1d\xf3\xdeF\xab\x15\x83\xc9D\xc3\ +\xfb\xef\x03pb\xdb6F\xcf\x9f\x8f\xce`\x88y\x0b\ +]f&\xba\xac,\x1a>\xfc\x10\x80\xfe0b\x00\x1c\ +\xd8'\xd6<\x8a\x9a; '\x80v\x01\xdc\x95\x09\xb7\ +J'Jrr\x18\x22\x0f\xf9*!#\x86\xab\xa3\x83\ +\xad'N\x04}]x\xe7\x9d\x8c\xb8\xef>U\xcfI\ +\xb7f\x0d\xba\x97^J\xe5\xa3\x0f\xc6\xae]\x22V\xd0\ +\x1dq\x02\x9b\x0d\x9e{N\x04\xad\xd6\xae\x15\xf7\xd6h\ +b\x06\xab\x86L\x9eL\xd3\xd6\xad\xb8l66\xf0\xc8#\x81r\x8c0\xee\xdb\ +p\x05\x90\x0d\xe8\x09\xa3\x05\x02\x04\xe8\xa7P\xff\x16\x8d\ +F]h\xd2\xe3\xa1\xdeow$\x0c\xbf\xe3\x0e\xfa\xc5\ +\xd1\xfa\xa5\xc33u*\x9dw\xdd\x95\x1a\x01E\x13\x5c\ +2Z`\xfdz\xd1\xd2\x0b\x0bE9\xf1\xc6\x19TF\ +5\xa7\xcb\xb4@\xedk\xaf\x89u\x89T\x10\xa0\xe8\xd6\ +[1\xe4v\xad\xbfq=\xfc\x08\xa1\x05\xc2\xc6\x05\xa4\ +\x13:=\x04:\x9eF\x8d\x06\xb3J\xf5\xefr\xbb\xb1\ +\xbb\xddA\x85\x0e_\xb0 fk\x8ft\xb8\x97.\xc5\ +\x97\x97GZ\x11\xaf\x16p8\xc45\x85\x85\xc2\xc6\xc7\ +\x984\x12\x15\xeb\xd7\xab\xba\xdeh\xb52\xf6\xe1\x87\x01\ +p\xbb\x5c\xd4\xbe\xfa\xaa\xea`\xdcX\x99\xe3}\x09\xcc\ +\x1e\x09\x16\xba\xb4@\x10\xb4\x00\xf7\xc1@y\xe87\x1f\ +BmM\x84\xc3\xd6\xd2\x12T`vA\x01\xe6\xd2\xd2\ +\xb8[\x7f\x80(\xb9\xb9\xb8\x97.M\xa1\xb4\xc3 \x1e\ +-PS#\x06\x99T:q\xaa\xa0R\x0bL\x90R\ +\xcb\x81\xda\xd7_\x8f\x1c&V\x90\xa1\xe8\xbb\xdf\x0d*\ +\xe7;\xf0]Dx\xd8\x80B\x0bh\x01m\x91\xf0\x16\ +\x030\x83\xea\x11\xbfz\x05\x01\xf2o\xb8!a\xe1\x07\ +|\x81;\xef\xc43ujj\x1ev$<\xf7\x5c\xec\ +\xdf\x94\x97\x0b\xe1\xa7J\xf0\x12jjT\x8dZJ\xd9\ +\xd1\xe0\xd7\x02\xaf\xbf\x1e[+{\xbd\x18-\x16\xac\xd7\ +]\x17(\xe7\x1b0\x07\xd1\x1b\x08q\x06\xb5\x80&\x13\ +\xc6\xcbO\x0e\x8a\xa6\xfeedpwvb\xef\xec\x0c\ +\xaa\xf4\xd09s\x92&\x80\xcf\xe7\xa3\xfd\xe9\xa7I+\ +jj\x22\xabby\xabO\x17T\x9a\xa1\xa2{\xee\x09\ +\xbcWE\x00\xffa\xbd\xf6\xda\xc0u\xd9p\xd9MP\ +\x02\xf4C\xe1\x0cj\x01m\x86,\xe5\x0b\xfc&\x00b\ +\x9a\x80F\x85\xed\xd7\xe7\xe6&\xa5\xfe\x83\xba\x85c\xc6\ +\xe0~\xf0A\xd2\x8apBx\xf6Y!|Y\xc2F\ +Z\xa02\xf3\xd9h\xb5\x06&\xc6\xb8\x9b\x9b\xa9\xdf\xb8\ +QU\xcf\xac\xe8\xe6\x9b\x83\x9c\xc1o\x0a'?\x1b\x85\ +\x19\xd0\x22\xf2L\x02\xf9\xdd!\xc3>>_\xc4\x1b)\ +[\x7fnqqbv?\x82\x83\xd8\xfe\xd8c\xe9u\ +\x08\xab\xaa\xba\xb4\x80\xcd&\xbc\xfbxr\x0f\x92A\x1c\ +)lc\x17-\x0a\xbc\xb7}\xf4\x91\xaa\xa4\x11\xbc^\ +\xac\xb3f\x05\xae\x1b$\x92{\xfa\xa30\x03\x92\x06(\ +\x96N\x84\x1d\xf7\x93H\xa0 B\x93\x82\x00\xe6)S\ +R\xd2\xfa\xe5\x0ea\xabl\xb83-(/\x17\x9e\xf9\ +UW%\xe7\xdd\xc7\x03\x93\x09\x96/W\xfdssI\ +I k\xda\xb6m\x1b\xae\x93'U\x99\x01\xcb\xc4\x89\ +\x8122\xe1\x92R\xb8L\xbc%\x03\xbf\x19\xd0\xfe\x14\ +\x82\xd6i3G\xab\x89\x82a.E\xf8\xd6\x5cZ\x1a\ +x\x1fok\x8f\xe8\x10\xdex#\x9d\xb1\x86F\x93\x81\ +\x14\xbe\xed\xce\xbc\x81u\xebT\x9b\x00\x09c\xa2i\x81\ +H~\x80B\xcbL\x16\xce~\x162?@;\x00\xac\ +\xf2\x1f\xc5\x1c{\x929\x88J\x02d\x7f\xe3\x1b\x8a\x9f\ +\xa6F\x13\xb4\xfc\xe1\x0f\xdd'\x9ctc\xe5\xca\x842\ +\x98\xe5\xd3\xe1\x9bjjT\xc5\x03\x0c\xd9\xd9\x98\xaf\xb8\ +\x22p\xdd\xe0.G\xd0\x80\xdf\x0ch;\xe3H \x94\ +\xc3\xee\x0d\x1d\x5c\xea'\x8bC\xcb\x91,\x01<\x05\x05\ +}\x9f\x04&\x93\x10~\x823\x9d\xa5\x15P\x00l;\ +v\x84\x8f\x0c\x86!\x84e\xc2\x84@\x19f\x98\x8c\x92\ +\x00\xfd!h\x04\xc6\xa2\xb2Bn\xc5\xe7\xdc\xe2\xe2\x98\ +\xd7$\xd5-\xbc\xe3\x0e\xdcw\xdc\x91~A\xa5\x03&\ +\x13l\xd9\x92\xb0\xf0%Xd\x9a\xa3\xb1\xa6FUL\ + \xff\x9b\xdf\x0c*\xe3\x06\xb1\x17C\xc0\x0f\xd0j\xc1\ +\x94\x8a\xff\xa8\x97u9b!\xd1\x1e\xc2\xc5\xa7\x9e\xc2\ +3f\x8c\xea\xfb\xf4\x0a\x94\x95\xc1\xd1\xa3)\xc9C\xc8\ +\x9f>=\xf0\xde~\xe8\x90:GPq\xdfQ0\x01\ +9\x01|\x09.\x13\xd3\x98\xc8E2$\xda+p\xad\ +Y\x93\xfe\xb1\x82Ta\xf9r\xd1\xf2S4\xdbY\xae\ +\x01\x9a\xf6\xed\x0b\x9f#\x10\xc6\x0f0\xe4\xe4\x04\xae\x1b\ +\x00#\xe8\x22\x806!\xfb\x9fJ\xc4\xdbC\xf0\x14\x14\ +\xd0\xfc\xc2\x0b=]\xed\xe8()\x81\xcf?\x07\x7f\x18\ +7U0\x98L\x81\xee`cmm\xf8\x1c\x810\xce\ +\xe1\xa0\x91#\x03ed\xc1P\x84\x0f\xa0\x07t)#\ +\x80\x1a\x1f \x1a\xe2\xf2\x07n\xb8\x81\x96\x9f\xff<\xa5\ +\x0f7ex\xe2\x09!\xfc4\xa5\x9e\xc9g\x14\xb9\x9a\ +\x9aT\x99\x01\xf3\x88\x11\x81k\xf2D\xcc\xc7@\xaa5\ +\x80>EjYu\xd7\xf0g?\xa3\xe3\x9ak\x92\xbf\ +a\xaa\xb0p\xa1\xb0\xf5K\x96\xa4\xf56r\x024\x9f\ +:\xa5\x8a\x00\x86\xfe\xfd\x83\xca\xb8ZD~\xf5\xa4\x92\ +\x00\xf60s\xff\x13\x85Z\x128W\xaf\xeey\x7f`\ +\xfat|[\xb6\x88.^7\xacq`\x1c><\xf0\ +\xfe\xdc\xd1\xa3\xe1\xe3\x00\x0a_\xc0\xa2H\xb5\x1b&:\ +{\x19$c\x02\xd4O\x15I\x1c1\xfd\x01\xa3\x91\x0b\ +\xa9\xce\xf1S[\xb7\xe9\xd3\xf1~\xf0\x01\xde\x0f?\xc4\ +7m\x1a>_7$\xb5B\xd0B\x1a\xee\xe6\xe6\xf0\ +q\x80p\xbe\x80\x0c\x03\xa3\x11@\xadw\xdf\x1d\x04\x90\ +\x10\xcdAtO\x99B\xeb\x0f\x7f\xd8}u\x996\x8d\ +\xce\xcd\x9b\xf1l\xde\x8c\xd7/x\xe5\xd1mP\x91\xb0\ +\x83\xc7C\x8eb%\x92<\xe1\x08\x0a\x1f\xc0.\x96!\ +M\x1a\x1d\x8a\xbc\xc0t \xdc\xc3\xd6\xd5\xd6\x92\xb5v\ +m\xfa\xef=|8\x1d\x15\x15\xb87m\xc2;u\xaa\ +\xaaq\x8et G\xa6\x01\x9a\x0e\x1eTE\x00\xa3b\ +\xc6\xb1\xafk/fm\x86^1k\xc4\xa5\xa2\x12\x10\ +:h\xe4T\xb9\xedj\xb2\x90?\xd8\xac\xcaJL\x0f\ +?\x8c&\x8d\xe4\xf3\x0d\x1fN\xc7/~\x81\xe7\x07?\ +\x10\xd3\xd7\xfd\xf7\xf7\xf9|\xaa\x17\xb8\x88k!\x8c\x18\ +\x08ZKI\x1a\xa5\x0d}H\xa1\x87\x0c\x061,,\ +\x08p\x16\x8e\xc9\xc3\xbf\xcd*+\x12n\xd0\xa8\xc3\xe9\ +\x8c+\x22\x98\x0c\xfa\xad]\x8b\xa9\x1b\xc6\xee[\xea\xea\ +\x82\x04\x9f(RI\x82\x00\xa4\x819\xa5\xb0c\xf8\xf6\ +ybXX\xe4\x82\xbc(\xe6\x8f\x05\xa0V\x03@\xe8\ +\xb8Awi\x81\xec\x8a\x8an\x11>@\xc6\xab\xaf\xa6\ +4\xc7!\xe5P\x99\x22\x16\x06:@\xa3E(\x91\x06\ +\xe9l<\x04\xc8Q|\xee\x0e\x02\x18\x9fy\xa6\xdb\x84\ +\x0f\xa0\xff\xf7\x7fO)\x01RJ\x04I\x03\xa8q\x06\ +C\xa1\xc1\xaf+\xbc\x9d2\x02\x80XnJ\x0d\xba\xdb\ +\x0f0-^\x8c\xf1w\xbfK\xeb=\x94\xd0\x1e?\x9e\ +r-\x90\x0c\x11\x9a\xe4YK>\x9f\xea\xec\xed0\x10\ +\x09!\x80\xb7\x0d\x82\xa28\xe7P\x07\xa5\x09\xb0WW\ +\xa7M\x10\xa6\xc5\x8b\xc9\xae\xa8H[\xf9\xd1`\xf8\xf5\ +\xaf\x93\x16t\xb4q\x8eDa\xbe\xf4RU\xd9\xdba\ +\x1dE?\xb4\x80\xf7\x22\xd4\xcaO\xda\xd5V\x80`g\ +\xb0\xe5\xc4\x09Z\x15S\xc4S\x81\x9e\x14>\x08-\xa0\ +\x7f\xed\xb5\x94\x08;\x95\xda\xc0\x90\x99\x99\x8c\x0f\xe0\x03\ +?\x01\x1a\xa1F\xfe\x8dZ\x13\x00\xa1Z\xe0\x94\x7f\x81\ +\x83T!\xbb\xa2\xa2G\x85/!\xf3\xe9\xa7\xd3f\x06\ +\xe2!B\xe3\xd6\xad\x81\xf7\x86\xac,U\xf6\xbfIa\ +\x9a\x1dp\x14A\x00\xaf\x16\xf0\xfe\x05\x8etB`M\ +7\x17\xea\x9dA\xab\xe2s*\xcd@\xaa\xbc}o\x0a\ +\xba\xa6\xda\xe3\xc7\xd1m\xdb\x96\xb2\xd6\x9e(\x11\xe4\xbb\ +\x88\x0c\x1a:4zj\xb8\xfc;y\x19\xd0\x82\x88\xff\ +\xf8\xb4\x88\x95#:;\xc5z\xb3\x01\xd8T>\x18\xab\ +\xe2\xf3\xa9\xca\xca\x94D\x05\xb3*+\x93\x16\xbe\xbb\xb4\ +\x14\xfb\x9borf\xf7n<\x11\xf2\x15\xe3\xaa\xd3\xd2\ +\xa5\xdd\xa6\x05\x22\x91@\xbe\xc2hNnn\xcc\x940\ +<\x1e\x5cg\xcf*\x8b\xf1!\xe4\xee\x95\x22\x06\x1e'\ +\xfcC\xfe\x0b\xb5f\xc0@(\x09\x1a\x92T\xd9\xfa\xba\ +\xba\xa4\x84/\x09\xfe\xdc\x9bo\xd2^Z\x8a77\x97\ +\xaf^y%iM\x90\xb1};\x19\xdb\xb7w;\x09\ +\xe4D\x90v$1dea\x8cE\x00){[A\ +\x80&\xb1a\xb5\x079\x01\x8e\xc1V\xf9\x8fl\x84&\ +~F\x82U\xf1\xf9\xe8\xcb/'\xfc\x90\xb5N'\xe6\ +\xdbnC\x9b\x80\x16\xf1\x14\x14\x04\x09^\x8e\x8e\xe2b\ +\x1cqL\xc6\x88\x84th\x01\xb5f\xe4\x9c\xac\xf5\x0f\ +\x1a:T\xf5Z\x82v\x85c\xde*v\x1a\xe9DF\ +\x00\xef\xcbp\xa4\x03\x82Vx\xb4\xa9|(E\x84\xf6\ +\x06\x12\xf5\x05\x12\x11\xbe\xa7\xa0\x00\xc7\xf2\xe5\x9c\xde\xb5\ ++D\xf0r\xb4\xcd\x99\x934\x09\xf4;v$\xa5\x05\ +\x92\xf1\x19\x1a\xb7l\x09\xd4#\x7f\xd8\xb0\x98)\xe1\x01\ +\x13`\x0f\xee\xd7}\x02\x87\x10\x04\xf0\x04\x08\x00t\x5c\ +\x84 \x17\xde\x16\xc7\x83\xb9B\xf19\x11-\x90\xb7d\ +\x09\xfa8\x82Ir\xc1\xb7\xcc\x9f\xaf\xea\x9a\x96\xf9\xf3\ +U\xff6\x12\xfa-[\x96va\x87;\x8e\xbd\xfdv\ +\xa0\x0e\x96\x82\x02U\xf6\x1f\xaf\x17\xbbb\xcd\xe6\x13b\ +\xd7\xb1 \x02\x00t\x1e\x84W\xe5?\xb4\xa1\xbe7\xa0\ +L\xd6>UY\x19WL \xab\xb2\x92\xfe*I\xe3\ +\xcd\xcd\xe5Byy\x5c\x82\x97\xc3\xb1|yR$\xd0\ +\xef\xd8\x81\xf6\xf8\xf1n\xf5\x01\xda\xcf\x9f\xa7\xc9\xdf\x05\ +4df\x92\x1f-\x08$\xef\x02\xfa\xf7\x15\x08\xfcw\ +8\x80\x10~\x90\x09\x00\xe8\x5c\x05\x87;\xe0\x0b\xf9\x05\ +\xf5\xa8\x83\x11\xd9\x8eR\xd2\xb5\xcf<\xa3\xeaZ\xad\xd3\ +\xa9\xca\xe9\xf3\xe6\xe6\xe2z\xf4Q\xce\xec\xde\xcd\xc5\x07\ +\x1eHX\x80\x00\xce\xf2r:\x92Hd\xcd\xfe\xcdo\ +\xba\xa5;(\x95kS\xb6~\x95\xeb6\x9fS\xb4\xfe\ +\x0b\x22\x06\xd0\xe1?\x824\x80\x0fp_\x80 \x17^\ +-\x01@\xcc8\x90\xe3DE\x85*_`\xe0}\xf7\ +E\xb5\xfbr\xc1\xbb\x1ey$%\xfdzon.\xf6\ +7\xdfL\x98\x04Yo\xbc\xd1\xadZ\xe0\xd0_\xff\x1a\ +\xb8\xb7\xb5\xb0P]\xf8\xd7\xeb\xa5I\xb1j\xfbY\xd1\ +\x03h'\x8c\x06\xf0\x01\x1d[`\x8d\xfc\x02\x17Ij\ +\x81\x18\x837\xd9\x15\x15\x18\xa2\x90\xe4\xe2\x03\x0f\xa4T\ +\xf0r$K\x02\xa5\x16H\xd7\xe1\xb2\xd98\xe5\xdf'\ +\xc8\x90\x99\x89\xd5jU\x1d\x02n\ +\xb6\xb88\xfa\xf0\xaf\xec\xbdM\xb1o\x83]8\x80\xed\ +D0\x01\x12:_\x84O\xdb\xe0\x13\xf9\xc9=q<\ +\x94\x09\x04\xe7\x0at8\x9d\xec\x8d\xe0\xe4\xb9\x1ey\x04\ +\xfb\x9bo\xe2z\xf4\xd1n\x17\xbc\x1c\x89\x92\xa0_E\ +\x058\x1ci\xeb\x0e\xee{\xea\xa9\xc0\xbd,C\x87b\ +6\x99\xa2\xdb\x7f\xd9{\x9b\xa2\x07pR\x8c\xfa\xb6!\ +[A<\xdc\xfa\xb1>@3\x1a\xce\x0d\x82\xdb\x03\x82\ +B\x8c\xfc\xa9M\x07\x1f@\xb0\xe9h>t\x88\xec\x82\ +\x82\xb0S\xc8<\x05\x05\xb8KK{|\x92\x87/3\ +\x93\xb6\x9bo&\xb3\xaa\x0a]h\xfc<\xf2uYY\ +Q\x03P\x89\xe2\xe2\xb1c\xec\xfa\xc9O\x02\x9f\xcb\xa6\ +L\xc1\xa8\x98\xe5\x13\x09\xb6C\x878\xa8\xd8wa\x05\ +\xfc\xce\x09\xa7\x10[\xd0\xb7\x12A\x03\xf8\x00\xf73\xb0\ +Y\xa9\x05\xaa\xe2\xa8|>\xa1\xbd\x82\xba%K\xba-\ +o0QH\x9a\xa0-\x8e\xbd\x05\xfa\xbf\xf4\x12Z\xa7\ +3\xe5\xddA\xb9\xf0-\x97\x5cB\xfe\xe0\xc1\xaaB\xbf\ +x<\xd8\xfe\xf3?\x83\xeax\x16>m\x10\xa9\x1e-\ +\xc8\x96\x8f\x8f\x94>\xea\x01\xda\x8e\xc1o\xe5'](\ +2Gb \x9c)\xa8Y\xbc\xb8[\xe6\x10$\x03i\ +\xf0Hm\xb0H\xebt\x06\x05\xb1R!\xfc\x86\x8d\x1b\ +9#\xdbg\xb9\xb4\xa4$f\x97/\xb0~ck+\ +\xf5\x07\x0e\x04\xd5\xf1(\xecF\x08\xbf\x0d\xd9\x8e\xe3\x91\ +\x08 i\x81\x0f\xc2\xf9\x02j\x07\x89\x00f\x13\xdc+\ +p\xd6\xd5\xf1\xa9\xcaM$z\x1a\x8e\xe5\xcbU\x8f\x1d\ +HZ@BRQ?\x87\x83\x8f\x1fz(P\xd6\xd8\ +\x11#0\x1b\x8d\xaa\xbb~\xb5\x9f\x7f\x1eT\xb7Nh\ +yE\x8c\xf6^D\x10 \xb0\xbc[\xb4\x04r\x0f\xd0\ +Z\x07\x8f\xcbO\xba\x89\xcf\x14\x18\x812\xc59{u\ +uD\xa7\xb0\xb7\xa1e\xfe|\xcen\xda\x14\xd31U\ +j\x01\x09\x89\x10\xe0\x93\x87\x1e\xa2\xe3\xc2\x05\x00\x0cz\ +=\x13\x8a\x8aTO\x03s\xb7\xb6R\xbbo_P\x1d\ +\xce\x88F|\x91.\x02\x042D\xa2\x11\xc0\x07\xb8\xff\ +\x02\x1f\x9f\x87\xbf\xca\xbf\xb0\x11\xdf@\x91\x15P\xbaH\ +'**\xfa\x0c\x09:\x8a\x8b9\xbbiSL\xbf\xa0\ +\x7f\x94-o\xd4\xf6\x10\x0e,]J\xe3{\xef\x05\xae\ ++\x1b7\x0e\x83V\x1bs\xc4/\xd0\xfakkq+\ +Vp}\x1b\xfe\x86\x10~\x90\xfd\x87\xd8+\x84y\x80\ +\xd6w\xe1\xd7^\xc5\xb8P\x15\xf1\x99\x82\xb1\x84F\x09\ +\xfb\x12\x09$\xbf \x99\xc4\x92X-\xbf\xf1\xbd\xf78\ +\xf8\x9b\xdft=\xb3a\xc3\xb0\x0e\x1a\xa4j\xc4\x0f\xaf\ +\x17w[\x1b\xb5\xa1\xf9\x7f\x07k\xba\xc6\xf5Z\x91\xa9\ +\x7f\x88\xbd}<\x80\xef8\xb4_\x09\xa7\xcdp\xa3t\ +\xd2#\x0a\xe7\xf28\x1e\x80\xd5_\x0b\xf9\xe8\xb4\xb3\xae\ +\x8e\xd6\x86\x06\x86\xf6\xc4\x8e^\x09\xa0s\xc4\x08Z\xee\ +\xbe\x1bM{;\x86\xcf>\x0b\xfa\xae}\xc6\x0cZo\ +\xbe9\xa1r/\xec\xdf\xcf\xc7\xf7\xde\x8b\xb7\xbd\x1d\x00\ +sN\x0eeW^\x89.\x8e%\x1cj\x0e\x1c\xa0\xa1\ +)8d\xf7!\xbc\xf0\xa5\x18\xe0;G\xd7\xc6\xd2\x01\ +\xa8\xdd\x0c\xd8\xb7\x13\x8e\xcc\x84\x09\x06\xd9\xca\xa2\x0e\x84\ +\x83\xa7nS8\x01+}\x9f\x04\xbe\xccL\xdag\xcc\ +\xa0m\xce\x1ctg\xcf\xe2\x1d<\x18OA\x01\x17\x7f\ +\xf0\x03:e\xcb\xb1\xa8\x85\xb3\xae\x8e\x9d\xb7\xde\x1a\xe8\ +\x1d\x1922\x98;n\x1c\xd9\xf2-\xe3|\xd1\xb3\x85\ +]--T\xed\xde\x8dG\x96\x00\xea\x80\x83\xbf\x87\x95\ +\xc0Y\xe0<\xfe\xbe\xbf\xfc:\xb53\x16\xb5@V)\ +\x14\xde\x0d\xd5ZE<\xe8Vb,1\x1b\x06U\x84\ +\x8e1\x98KK\x99\xb8bE\xb7M0\xed\x0dp\xd6\ +\xd5Q}\xdbm]\xc2\xd7\xe9\x98[\x5c,\xbc\xfe0\ +[\xc7G\xdab~\xd3\xc7\x1fcSl\xda\xf9.,\ +y\x076#\xe2\xff\xe7\x10\x04\x08b\x92Z\xfd\xe2\x05\ +\xdc\xd5p\xf20\xfc\xab\xf2\xcb\x0d\xc4\xe7\x0f\x80\xe8\x19\ +(}\x02{u5\xdbf\xcf\xee\xf5\xc1\xa2T\xc1^\ +]\x1d$|\x80)\xc3\x86a\xce\xcaR?\xe1\xc3\xeb\ +\xc5v\xf2d\x88\xf0\x1dp\xf0\x1d\xd1\xf7\xbf\x80\x98\xf4\ +\xed&\xccn\xe2\xea\xf7\x83\x17\x17\xfbv\xc2\x91)\x90\ +\x9f-[a\xd4\x03\x9c@,@\x17O\x81V\xff\xab\ +\xdcju8\x9d4\xbe\xfd6\xba\xac,\x06(V\xb9\ +\xfc:\xa1\xa1\xa2\x82O\xef\xbf?`\xf3\x01\xca\x86\x0d\ +\xa3\xc8\xec\xd7\xa5>u3\x85\xdc\x1d\x1dlP\xa8~\ +\x80\x15\xf0\xcb\xd3b+y\xc9\xf6\x87m\xa3\xf1\xc8\x0b\ +\xfc\xf9\xe4\x1f\xc0\xce\xd9pS\x86L\xf3\xb7\x22\xfa\x18\ +\xd68\x0b\x94\xc6\x17\x1a\xe9Z\xa9\xc2\xdb\xde\xce\xd9\xaa\ +*\x9c\x07\x0e0x\xc6\x0ct\x99\x99\xa9z\xee=\x8e\ +\x0e\xa7\x93\xfd\x8f=\x16\x94-e\xd0\xe9\x98j\xb1P\ +4`@\xec\x02\x14\xc4\xf8`\xdf>\xec\x8a=\x1b\xbf\ +\x84\xb7\xd6\xc3?\x813D\xb0\xfd\x12\x12\x22\x00\xe0\xcb\ +\x84\x8f/\x87\xdb5\xb2@\x9f\x1dA5k\x9c\x85\x9a\ +\x11;V\x9d\xf1\xd7TB\xf3\xa1C\x1c_\xb3\xe6k\ +\xa3\x0d\x9cuu|z\xff\xfd\x9c\x95\xcd\xf05h\xb5\ +\xcc-(\xa0@\xe5 \x8f\x1c\xb5'N\xb0_\x91w\ +\xd9\x06\xe7^\x12\x83>'\x89\xe0\xf9\xcb\x11/\x01\xc0\ +O\x82/\xc01\x00>\x1b\x0e\x0b\xe4_&J\x82l\ +\x84\x09i!\xb8\x87 i\x03{u5\xd9\x05\x05d\ +\xf7\xc0Pq\xb2\xe8p:9\xfc\x87?\xf0\xd9\x83\x0f\ +\xd2.\x1be4\x1b\x0c\xcc\xcd\xcf\xc7\x14m\x7f\xe6\x08\ +\xb0_\xbc\xc8\xa60\xbeR%,\xfbT\x0c\xd9\x9cE\ +t\xd4\x82\x22\x7fJ$B\x00\xf0\x93`\x1f\x9c)\x86\ +\x0b\x03\x14\xbb\x8e&J\x02\x9d\xff\x1a3\xc2\xa7\x90\xcf\ +immh\xa0\xa1\xa2\x02\xe7\x81\x03\x0c\xf8\xe67S\ +\xb60e\xba\xd1PQ\xc1\xe7\x0f>\xc8\xa9\xca\xca\xa0\ +\xf3E\xd9\xd9\x5ck6\x93\xad\x8b\x22\x02\x9fOx\xf9\ +\x0a\xb5\xefjog}mm\x88\xdd?\x02\x95+\xe0\ +\xef\x08ejGD\xff:\x89\x82D\x09\x00~\x12\xec\ +\x80\x03\xa3\xc19P\xb1\xf5\x5c\xa2$\x00\xb1|\xf9h\ +\x04\x01\xce(\xbek>t\x88\xa3/\xbfLkC\x03\ +\xfa\xbc\xbc^\xab\x11\xa4\xf1\x8e\xa3/\xbf\x1c\xe4\xe5\x1b\ +4\x1af\xe5\xe5Q\x92\x93\x83.\x81u\x83\xdc\x9d\x9d\ +\xfc\xa3\xbe\x9ef\x99\xf3\x08\xd0\x0c\xc7\x1f\x87'\x10-\ +\xff,b\xf6O\x07a<\x7f9\x92]\xb9H\x8b\xd8\ +\x82\xc4\xb4\x14\xfeh\x82\xef(\x7fPD\xe8`P\x5c\ +\x0f\x12\xa8&\xf2\xfa\x85\xb9\xc5\xc5\x5c\xf6\xc0\x03\x0c\x99\ +3\xa7\xc7\xe3\x07\x1dN'\xa7++\xa9\x7f\xe6\x19Z\ +\xc2\xcc\x89\xb0\xea\xf5\x94\xf5\xef\x8fA\xa7S\xd7\xc7W\ +\x1cn\x9f\x8f\x0d\x87\x0fcom\x0d*\xb7\x13Z\xfe\ +\x02\x8f\xee\x15\xaa\xbf\x11a\xfb\xa5\x19\xc0Q\x91\x8a\xa5\ +\xabt\x88](\x06<\x0d/\x0e\x80\x9bB\xfe8\x82\ +\x041\xb7\xa3\x89\x82&D\xf0(\xd2D\x15}n.\ +C\xe7\xcca\xc8\xf5\xd7w{D\xf1Te%\xa7\xdf\ +\x7f?\xe2\xcch\xb3V\xcb\x14\x83\x81|\xbd>f@\ +'\xa2\xf0\x81\x0d6\x1bvY\x92\xa7\x84\x8dP\xbeA\ +<\x9e&D\xeb\x8f\xea\xf8\xc9\x91\xaa\xb5\xcb2\x10$\ +\x18\xf84\xfc>\x1c\x09\xcc\x88\xdc\x80dW\x18\xb5\x01\ +\xfb\x89\xbd\xa2\xa9\xb9\xb4\x94\xa1s\xe6\x90[\x5c\x1c\xb4\ +\x99U*\xd0\xea\x9f\xfbh\xaf\xae\x8e:\x1d\xde\x08L\ +\xd0j)\xca\xc8\x88\xbf\xc5k4\xa0\xd3\x81F#\x84\ +\xdf\xd0\x80]\xa1\xf6\x01v\xc1\x9fV\x8a,\xee&\x84\ +\xc5\xbc@\x84\xa0O8\xa4r\xf1\xba\x0c\x843? \ +\x12\x09\x0c\xc0\xf5\xc86\xa6L\x02v\x84\xbe\xb3\xa1.\ +\x0a\x99[\x5cL^q1\xfd\x0a\x0a\xc8\x1d=:\xe0\ +DF\x22G\x87\xd3\x19\x88H:\xeb\xea\xe8p:\xb1\ +\xef\xdc\x19x\x1f\x0d\x16\xc4T9+\xc4l\xd91\xd5\ +>\xb0\xe1\xd4\xa9\xb0\xc2?\x02\x95K\xe19D\x9e\xdf\ +i\x84\xd7\xdfN\x14\xaf_\x89T\xaf^\x18 \xc1\xa3\ +po\x11\x84];}\x02\xa1\xf9\x82\x89\xc2MW~\ +\x82-\xc5\x7f&\x1e\x18\x11\x02\x1fC\x18-'\x91@\ +z\xf5\xb7\xecX\xc2\xb7{\xa4\x97\x00 \xe2\x04\x06\xffs\x1c\xf8$<9\x04\ +\xbe\x17\xee\x87\xd2\x94\xb2T\xf9\x06}\x022mP\xeb\ +\xf3\xb1\xc7\xe3\xc1\x1d\xc1T\xec\x86?\xae\x80\xb7\x11\xc2\ +?\x87P\xfbI\x09\x1fR\xef\x03(!\x0d\x1eu \ +f\x1e\xef0\xc3\xc1K\xa1L\xe9\x17x\x10j\xba\x1e\ +\xa16\xe2M0\xe9\xab\xb0\x03\x1fz\xbd\x1c\xf4z\xc3\ +\x1a\xf0NhY\x0b\xbfX\x07[\x10\xad^\x8a\xf1\x87\ +\xe4\xf7%\x82tk\x00\xf9}\x02~A1\x0c\xbb\x1b\ +\x96\x99 \xe2\xae\xd0F\x846(RW~\x9f\x83\x0b\ +1\xc7\x22\xda\xcck\x07\x1c|\x1e\x9e:\xd9\x95\xd1c\ +G\x84x\x03s\xfb\x92Ew\x11@\x82\xe4\x17\xf4\x07\ +L?\x86[\x8a\xe1\x11C\x94\xb4\xc2\xaf\x1b\x11\xd4\x08\ +\x1e\x02\xf6~%\xf0\x15B\xf8\xe7\xe9\xca\xecQ\xdd\xcf\ +\x8f\x85\xee&\x00\x08\xbf@\x8a\x1c\xe6^\x09\xc3\x16\xc0\ +\xa2\xa1\xb2\x89\xa8\xe1 ->QD\xf7\xeeW\x94*\ +\xa8\x15|3\x1c\xdf\x00\xcfW\xc1^\x84\xf0\xbf\x22\xd8\ +\xde\xa7L\xf8\xd03\x04\x90\xee\xabC\xf8\x01\xfd\x81\xbc\ +2\xb8\xf2&\xf8\x95\x11\xc6\xc7\xba\xd8\x8a \x82\xb5\x87\ +*\x1f\x0f\xea\xfdG\xac\xd0u'\xb4\x1c\x86\x7f<\x03\ +\xab\x10\x02\xff\x0a\xd1\xea]t\xf5\xf1S\xbe\xe3DO\ +\x11@\x82\xa4\x0d\xb2\x10=\x85\xdc\xbb`V\x09\xfc\xd0\ +\xa8\xd8\xd5<\x1c\xa4UJ-\xfe\xd7d\x06\x9bR\x09\ +\x9b\xecP\x13\x8c:\x09\x1f\xbd\x03\xaf\xd5\x88\xf5\xfb\x1c\ +\x08\xc1_\xa0k&OJ\xec}8\xf44\x01\xa4:\ +h\x11;Y\xf6\xa3\x8b\x08e%*\x89 \xc1\x82\x18\ +g\x90^\xbb\x0bv\xbaVQ\xb1\xc5q\x9d\x03\x0e\xfe\ +\x03^\xa9\x12\xc3\x1a\x0e\xff\xe1D\xd8zi\x15\x8f\xb4\ +\xeeC\xd7\x1b\x08 \xaf\x8bd\x16\x02\x1aa.L\x98\ +\x04\xdf\xbfD\x0c&\xc6\x053]\x11<\x8b\xbf\xe0d\ +\xba\x97n\xba\x12]\xa4\x08c\x22\xbb\xa8\x9f\x84\x8f\xf6\ +\xc2\xe6\xb7E\xda\xb6\x0b\xd1\xda%\xc1\x07M\xdfN7\ +z\x13\x01\xe4u\x92\x13\xa1?`\x1c\x09\xf9s\xe1V\ ++\xdc\x9a\x09\x97${\x13\xe5>\x07\xf2\x88\x9f\x9d`\ +\xd5\x9dL\x08YB'\xb44@U%\xac\xff\x5c\xac\ +\xd5\xd7\x8c\x10\xba\x0b\x91\xba\xd5J\x97\xba\xef\xb6\xdd'\ +{#\x01\xe4u\x93\x88\x90\x890\x0f\xfd\x81\x9c\x1b\xe1\ +\xaa\x09p\xd3 \xb8&\x15dH'\xce\xc2\xa7Ga\ +\xf7+\xf0\x1e\xc2\xa67\xd3%t\xf9\x82\x0d\xdd*x\ +\x09\xbd\x99\x00\xf2:\xea\x10\xce\xa2\xa4\x15$2d\xdf\ +\x08\xe3\xc6\xc2\x8c!pM\xb6l\xdebO\xa1\x13Z\ +\xce\xc3\x01\x1b\xec\xaa\x84\xed\x0d]\xe9Y\x17\x11\xc2o\ +A\xb4v7=\xd0\xe2\x95\xe8\x0b\x04\x90C\xea5\xc8\ +\xc9 \x11\x22\xfb2\x18<\x1d\xae\xbe\x04\x8a\x06\xc1\xb8\ +\xdc\xd0%\x8cS\x8eNhi\x06\xdb\x19\xa8;\x0c{\ +\xd7\x8b\xee~;]seZ\xfdG\x9b\xff\xe8\xa0\xab\ +?\xdfc\x82\x97\xd0\xd7\x08 \xaf\xb7\x16\xa1\x19\xf4\xfe\ +C\x22\x84\x9c\x18\x99W\xc3\xb0ap\xe9ep\x95\x1e\ +r\xf2\xe02\x1fh\xf2 \xae\xf5\xe0\x1cb\x8d=.\ +\xc0Q74\x1f\x82}\xc7\xa1\xe931\x01CJ?\ +hS\x1cn\xd9!\x09\xbd[\x9c\xbbx\x1ed_\x87\ +\x9c\x0c\x92\xa9\xd0\x879\x0c\xfe\xd7\x0c\xd9\xab\xce\x7fm\ +\xac\xe7 \x0djy\x10\x82\x94Z\xb1\xa4\xc6\xa5C\xfe\ +9\xb0\x227\xbdL\xe8\xca\x87\xf7u\x83$PI\xb8\ +rb\xe8\x14\x87\xf4[5\x04\x90\x93@~t*>\ +K\x02\xefq\xf5\xae\x06_G\x02\x84\x83$h\xe5\xab\ +\x1a\xe1K\xf0\x11L\x04\xe5k\x9f\x84\xc6\xa7r\x1a\xf2\ +\xff\xe0\xeb\x89\xff\x02\xb0(\x1dJ\x5c\x9b\x97N\x00\x00\ +\x00=tEXtcomment\x00Fa\ +il agt action fr\ +om Icon Gallery \ +http://icongal.c\ +om/\xda2\xc48\x00\x00\x00%tEXtd\ +ate:create\x002011-\ +08-21T13:33:48-0\ +6:00\x08#\x8b:\x00\x00\x00%tEXt\ +date:modify\x002011\ +-08-21T13:33:48-\ +06:00y~3\x86\x00\x00\x00\x19tEX\ +tSoftware\x00Adobe \ +ImageReadyq\xc9e<\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00&*\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\ +\x00\x00\x00\x04gAMA\x00\x00\xaf\xc87\x05\x8a\xe9\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x00H\x00\x00\ +\x00H\x00F\xc9k>\x00\x00\x00\x09vpAg\x00\ +\x00\x00\x80\x00\x00\x00\x80\x000\xe11\x9a\x00\x00$\xd2\ +IDATx\xda\xed\x9dyx\x14U\xba\xff?\xd5\ +\xd9\x13\xe84d\x81`B\x12\x945\x81\xb4\x08B\xe2\ +(\x8b\x22 ((\xca\xb8\x8cNPf\xf99\xfeF\ +\xf4:\xcfu\x9c{\x7fz\x9d\xc7{gS\x86Y\xf5\ +QG\x11\xaf\xce #:\x8a\x02*$\x841,\x1a\ +\x12\x92\x80,1+[BB\xa7!{\xd2\xfd\xfb\xe3\ +\xa4\xaa\xabz\xad\xeet6\x9co\x9ez\xbas\xaa\xfa\ +\xd4\xa9\xf3~\xcf\xfb\xbe\xe7=\xa7\xce\x91\xecv;\xff\ +\xc27\x17\x86\xc1.\xc0\xbf0\xb8\x90\x06\xbb\x00}(\ +\xb7\x84 \xb0\xfa\xe8\xeb\xf3\xd8{\x0f\x9b\xd3q\xd9\xaa\ +\xc9\xe1B\x00Y\xd8!@\x08\x8b\x98O\x08f$R\ +\x09a:\x12\x99H\x18\xfb|\x97\x1e\xf6a\xa3\x16\x1b\ +5\xb4\xb1\x97s\x14s\x8cF\xa0Gu\xc8\xa4\xb8,\ +0\x94\x09 \xb7\xeaP\x16\xb1\x800n\xc5@\x16\x06\ +r\x06\xb4\x146N\xd1M!]\xfc\x13\x0b\xf9|\xc9\ +\xd7@\x17\xd0\x8d\x83\x10\xc3VC\x0c5\x02H\xc8\xad\ +|\x09k\x08\xe5V$\xbe\xa5\xb7u'\xc5'1.\ +a\x1c\x12\x12\x93\xc7O\xc6\x18cDBB\x92$4\ +\x7f\x92\xc4\xd1\xea\xa3\x5cl\xb9\x08@yu9\xd6\x16\ +\xab\xbe\x12\xda8E\x17;h\xe6-\xf6Q\x04t\x22\ +\x081,\xc90T\x08 \xd4\xfb\x22n$\x9c\x070\ +\xb0\xcc\x9b\xd0\xc7\xc6\x8f\xe5\xca\x94+\x998~\x223\ +\xa7\xcc\xc4\x18cd\xf2\xf8\xc9\x18$\x838\xf0\xf0\xe9\ +!MB\xc2 \x198Zu\x94\xba\x86:\xca\xab\xcb\ +)\xab*\xa3\xac\xaa\x8c\x9a\xfa\x1a\xcf\xa5\xd6\x92\xe1K\ +\x5c\xc90\xe41\xd8\x04\x10*~)k\x08\xe5gH\ +\xa4\xb8\xbb(&:\x86\xb9\xe6\xb9dM\xce\x22kr\ +\x16I\x09I\xfa\x84\xebC\xf0z\xd2j\x1bj\xf9\xbc\ +\xfcs\xf6\x96\xef\xa5\xa0\xbc\xc03!z\xf8\x8aV^\ +\xa1\x86\xf7\xa9\xe0\x1c\x82\x0c\xdd\x0cq\xad0X\x040\ +\x90M<\xa3Y\x87\x81\xef\xb8\x13|LT\x0c\xb3\xcd\ +\xb3\x99c\x9eC\xb69\xdb\xa3\x80\xe4\xd6\x1b\x22\x85(\ +\xdf\x83!xO\xe7J\xabJ\xd9v`\x1b\x1f\x1c\xf8\ +\x80\xc3\x95\x87]\x9f\xcc\xceE\xday\x8dz\xde\xa4\x84\ +\xe3@\x07\x0e\x7fa\xc8\x11a\xa0\x09 T\xfdR\x1e\ +$\x8c_\x02\xb1\xce\x17L\x9d8\x95\x1b\xb2o`~\ +\xf6\xfc\xa0\xb4n\x85\x14}\x14\xbc\xbbs\xa5U\xa5\xbc\ +\xb9\xfbM6\xed\xda\x84\xa5\xc5\xe2\xfa\xb4\x1dl\xe54\ +\xbf\xa4\x94c@;\xc2<\x0c)\x8d0P\x04\x10\xce\ +\xdd\xcd\xdcH\x04/\xbbk\xf19sr\xb8}\xd9\xed\ +$\xc4%\xf4\xbbZ\x97\xbfK\x92\x144S\xf2\xe6\xee\ +7yc\xd7\x1b\xe4\x97\xe5\xbb>};\x1b9\xc6/\ +\xa8\xe6\x0cZ\x22\x0c:\x06\x82\x00\x06\xae%\x81D^\ +\xc5\xc02\xe7\x93s\xe7\xcc\xe5\xd6\xa5\xb7\xba\x15\xbc,\ + \x8dz\x0f6\x19\xbc\x9c\x0b\xe4\x9e\x05e\x05\xbc\xb1\ +\xeb\x0d6\xee\xda\xa8}Pa\x1a^\xe7\x13\xfe\x1bh\ +\xc1a\x1a\x06\x95\x08\xfdI\x00\xd1\xea\x97\xb0\x8ap^\ +\xc2I\xddO\x9f>\x9d;n\xbf\x83\xf8\xb8\xf8\xc0\x05\ +\xd4\x17\x82\xf4Ak\x84\x10\xe2\x93 5\xf55<\xfb\ +\xd7g]\x89`\xe34\xe7y\x82}|\x02\xb4\x22\x9c\ +\xc5A\xf3\x0fB\xfa)_\x03\xd9$`\xe6mBy\ +\x0a\x88\x94O\x8c\x1a=\x8a\xdc\x07sYx\xe3B\xa2\ +\xa2\xa2\x1cT\xf1\x04)\xf04{o\x9dJH\xca\xf7\ +`\xe4\xab\xe7\x9e\xa3F\x8cb\xc5\x9c\x15,\x98\xbe\x80\ +\xea\xfaj\xaa\xea\xab\xe4\xdf\x8c$\x86U\xa42\x99.\ +\xbe\xa4\x99v\x1c~\xc1\x80\x93\xa0?\x08``\x11\xb3\ +0\xf2)\x06f\xa9O,\xbcy!\xf7\xaf\xb9\x9fQ\ +\xa3F\x89\x8a\x92<\x08\xc7C\xe5\x06C@r\x9a\xe6\ +\x9e\xc1\xc8\xd7\xc3\xb9\xb4\xc44ro\xcc\xc5<\xc1\xcc\ +\xfec\xfb\x1d\xceb(S\x18\xc3\x03\x8c\xe2\x04\xa78\ +\x85c\x0cb@I\x10l\x13\x10\xc2R\x1e\x22\x94_\ +\xab\x039c\xc6\x8da\xe5\xb7W2n\xdc8\xdd*\ +Y\xa3\xde\xfdp\xd6\xaa\xeb\xaaimk\xa5\xa1\xb1\x81\ +\xfa\xc6z\xd7H\xa0\xea\xbb\x1c@\x92\x90\x98=u\xb6\ +P\xefRH\xd0\x1dD\xf9\xd3\xdaj\xe5\xbf\xde\xfe/\ +~\xfb\xc1o\xb5\xb5\xd6\xc6&>\xe1\xa7\x80\x15\xe1$\ +v\x0f\x14\x11\x82I\x80P\x96\xf1,!\xfcT\x9d8\ +\xfd\x9a\xe9,\xbam\x11\xd1Q\xd1A\xb7\xc5uuu\ +|u\xe2+\xaa\xeb\xaa\xa9\xaa\xab\xa2\xaa\xb6\xaaO\x0f\ +02z$\x93S'3{\xeal\xa6\xa4N\xe1\xda\ +\xa9\xd7b\x8a1\x05\xdd)\xcd/\xcbg\xcd\x865\x0e\ +\xb3\x00\xd0\xcdq*Y\xcbQ\xca\x11N\xe2\x80\xf4\x14\ +\x82E\x80P\x96\xf3:\x06\xeeS'.X\xbe\x80Y\ +\xdf\x9a\x15T\xc1\x97\x94\x96P|\xb8\x98\xa2\x92\x22Z\ +\xdbZ\xfb\xbb~\x14\x22\xdc4\xeb&\xe6N\x9b\xeb\xf5\ +Yt\x13\xc4\x936\xb0s\x89F\x9e\xe4s\xde\x01.\ +!z\x0a=\xfd\xf9|\xc1 \x80\x8b\xf0#\x22#X\ +~\xffr\xc6O\x18\xefV\x90J\xf4\x0e'\xf5\xeeA\ +\xf0\x15'+8p\xe0\x00%\x87K\x06D\xe8\x9e`\ +\x8c6r\xd3\xac\x9b\xc8]\x9aKFZF\xc0\xddJ\ +5A\xde\xdf\xff>k6\xac\xd1\x06\x92\xac\xfc\x8a<\ +6\xa05\x09\xfd\x82\xbe\x12\xc0\xad\xf0W\xac]Ab\ +Rb\xc0\xfdrI\x12\x95St\xa0\x88\x1d;v\xd0\ +\xd4\xd4\xe4\xb3 \xa6\x18\x13\xe6t3\xe6t3\xa9c\ +R1\xa7\x9b\x01\x98\x9f9\xdf\xeb\xef\x8a+\x8b\xb1\xb4\ +X\xa8\xaa\xaf\xa2\xba\xbe\x9a\xe2\xaf\x8b)\xae,\xd6\xaa\ +g7HNH\xe6\xc7\xab~\xcc\xcd\xb3o\x16f\xa2\ +\x0f~BIe\x09k6\xac\xa1\xb8\xb2\xd8q\x83v\ +\xfe\xc1N\x1e\x01\x9a\x11\xdd\xc5~\xe9*\xf6\x85\x00.\ +\xc2\x0f\x8f\x0cg\xf9C\xcbIHJ\x08H\xf0\xf2\xb9\ +C\x07\x0f\xf1\xd9\xce\xcf\xb8\xd0t\xc1k\x01V\xceY\ +\xc9\xbc\xe9\xf3\x98\x9f9_\x11x\xb0`i\xb1\x90W\ +\x96G~i>yeyZ\xe1\xa8`\x8c6\xb2\xe6\ +\x965<\xb4\xf4!bcb\xfb\xe4 \xae\xd9\xb0\x86\ +\xf7\xf6\xbf\xe7\xc8\xbc\x8d\x0f9\xc2\xcf8E5\x82\x04\ +Aw\x0e\x03%\x80[\xe1/Y\xb3\x84\xf8\xa4x\xff\ +\x06gT\xe7j*jxo\xf3{X\x9a,\x1eo\ +\xbcr\xceJV\xcc]\xc1\xca9+1\xc5\x98\x82Y\ +\x17^QU_\xc5{\xfb\xdfc\xe3g\x1b\xdd\x92\xc1\ +\x18m\xe4\xc1[\x1e\xe4\xa1[\x1e\x226:6`\x07\ +\xf1\xc1\x0d\x0f\xf2\xfa\xae\xd7\x1d\x19ws\x9cb\xbe\xcd\ +i\xaaq8\x87A#A \x04\x08a)k\x09\xe3\ +E9!<2\x9cE\xb9\x8b\x88K\x8a\xd3=8\xa3\ +\xd8\x7f\xc9@W{\x17\xdb6o\xe3X\xf91\xb77\ +4\xc5\x98\xc8]\x98\xcb\xa3\xb7=JZbZ\xbf\x08\ +\xd8\x1fT\xd5W\xb1\xe1\x1f\x1bx}\xd7\xeb.\x83@\ +\xc6\x18#\xeb\xee\x5c\xc7\xda\xa5k\x03v\x10\x7f\xf7\xe1\ +\xefx\xec\x95\xc7\x1c\x99vs\x82C\xdc\xcd\x19\xaa\x10\ +\xcea\xd0H\xe0/\x01\x0c\xdc\xcc\x22\x22\xd9.'\x84\ +E\x86\xb1\xf0\xbb\x0b\x19\x9d4:\xa0~s\xc5\x91\x0a\ +>\xde\xf21\x1dm\x1d.73\xc5\x98Xw\xdb:\ +\x1e\xbd\xf5\xd1\x01m\xedzai\xb1\xf0\xfa\xae\xd7\xd9\ +\xf0\x8f\x0d.>\xc3\xb4\xb4i<\xff\x7f\x9e'3-\ +3 \x07q\xd3\xaeM\xac\xf9\xdd\x1aG\x86\x0e\x12T\ +\x22H\x10\x14s\xe0O$Pb!\x13\x89f'\xaa\ +\xd0\xee\x9c;\xe6\x10\x9f\x16\xef|\xa5\xb7\x5c\x14\xec\xdc\ +\xb2\x93\x82\x1d\x05\xf4t\xbb\xf6t\xd6\xdd\xba\x8e\xadO\ +me\xc9\xcc%D\x86G2\x14\x11\x19\x1e\xc9\xdc\xc9\ +sYw\xdb:\xd2\xc6\xa4\x91_\x96O{W;\x00\ +\x0d\x96\x06\xfe\xf7\xd3\xff\x15u4m\x8e_\xf5\x02`\ +\x9e`&-1\x8d\xf7\xf7\xbf/\x12\x0c\xc4\x11\xcfT\ +*\xd8\x89\x10~P\x06\x92\xfc!@\x18\x19\xbc\x8b\xc4\ +$9a\xf2\x0d\x93I\xbb&M\xb9\xc0.\xe9\x8b\xbd\ +w\xb6w\xb2\xe5\xc5-T\x9f\xa8v\xb9\xc9\xfc\xcc\xf9\ +l}j+\xb97\xe6\x0eY\xc1\xbb\x839\xdd\xcc\x0f\ +\x97\xfc\x90\xa8\xf0(\xf2\xca\xf2\x94\xf4}G\xf6\xb1\xe3\ +\x8b\x1d\x98'\x9aI0%\xb8\xfe\xd0K\x18\xda<\xc1\ +Lzb\xba\x83\x04\xa1\xa42\x9e+\xf9\x9a]h'\ +\xa5\x06\x0c\xbd\x04\x08\xe9\x8d\xf2)N\xdf\x98Ic\xc8\ +\x5c\x9a\xe9\xf9!\xdc<\xa0\x1d;Mg\x9a\xd8\xf2\xc7\ +-\x5c\xb4\x5ct\xb9\xf4\x99{\x9e\xe1\xb5G_c\xec\ +\xa8\xb1}y\xa6ACdx$\xf33\xe7\x93{c\ +.%\x95%\x8aYh\xb04\xf0A\xe1\x07$\xc4&\ +05u\xaa\xe7:s\x93\x965!\x0b\x09\xc91\xcf\ + \x8cI$3\x96J\xf6\xe2\xd0\x02\x01\x93@\x0f\x01\ +$\x161\x8bp\x94q\xcd\xd0\xc8Pf\xdf7\x1bC\ +\x98\xc1\xdb\xaf\x5c\xd0t\xb6\x89\x8f^\xfb\x88\xce\xf6N\ +MzZb\x1a\xbb\x9f\xdb\xcd\xdd\xd7\xdf\xddw)\x0c\ +\x01\x98bL\xe4\xde\x98\x8bi\x84\x89\xfd\xc7\xf6\xd3\xde\ +\xd5NGW\x07;\xbf\xd8Isk3\xf3\xb2\xe6i\ +\xaew\xab9U\xf57/s\x1e5\x0d5\x94T\x96\ +\x88\x84p2\x89\xc3J-GpLB\x0d\xc8\x1f\xd0\ +C\x8002\xd8\x86\xc4\x189!ku\x16\xd1q\xd1\ +\xee\xaf\xf6\xc0\xec\x0bg/\xb0\xf3\xf5\x9d.\xc27\xa7\ +\x9b)\xfcu\xe1\x90\xf0\xee\x83\x8d\xb9\x93\xe7r\xf7\xf5\ +w\x93_\x96\xcfY\xcbY\x00\x0e\x9d8Dyu9\ +7d\xdd@Dx\x84\xae\xfa\xb3c\xe7\xb69\xb7\xb1\ +\xa7|\x0f\xd5\xf5\xbdf3\x92\xd9\x84QD\x03g\xe9\ +\xc3T3_\x040\xb0\x94'4\xaa\x7f\xfa\x18\xae\x98\ +}\x85k!\xbd\xb0\xd8r\xd6\xc2\xae\x8d\xbb\x5c\x84\x9f\ +\xbb0\x97\x8f\x9f\xf9xX\xd9z\x7fa\x8a1\xf1\xc3\ +%?\x14Q\xc6\xde\xf8A\xc5\xe9\x0a\xf2K\xf2Y\x9e\ +\xbd\x9c\x88\xb0\x08M]\xb9E\xef\xb9\xdb\xe6\xdc\xc6'\ +\x87>\xe1\x9c\xe5\x1cH\x84\x13\xcb\xf5X\xd9NK\xe0\ +\x83G\xde\x08 q-\x89\xc4\xf27z\xbd\xfe\xd0\x88\ +P\xa6\xde5\x15C\xa8A}\x95\xc7\x02\x03\xb44\xb7\ +\xb0\xfb/\xbb\xe9j\xef\xd2\x5c\x92\xbb0\x97\xd7\x1e}\ +m@\x840\x14\xb0r\xeeJ\xd2\xc68\xbc\xfa\x06K\ +\x83 A\xcer\xc2\xc3\xc2\xdd\xff\xc8\xa9n#\xc3#\ +\xb9v\xf2\xb5\xbc\xb3\xf7\x1d:\xba:\xc0\xc0\x08\xe2\x99\ +L\x05;p\xbc\xad\xe4\x17\x09B\xbc\x9e3\xf3\x0b\x0c\ +\x5c/'\xa4\xde\x9c\xca\x88\xa4\x11n\x0b\xe7.\xad\xab\ +\xbd\x8b}o\xed\xa3\xb5Y;\x80\xf3\xdd\x85\xdf\xe5\xb5\ +\x1f\xbf\x86$\x0d\xf6k\x09\x03\x0bs\xba\x19\xf3\x043\ +;\x8av\xd0\xde\xd5NC\xb3\x83\x04\x11a\x11n\xed\ +\xbf\x82\xde\xb41\xa3\xc60v\xd4X><\xf0\xa1H\ +\x08%\x95Dl\xd4p\x88\x00\xa6\x97y\x22\x80\xc4|\ +&\x12\xe5p\xfc\xc2\x8d\xe1\xa4-MST\xbd\xbb\xc2\ +9\xa7\x95}\x5cF\xc3\xd7\x0d\x9a\xe4\x07\x16<\xc0_\ +\xfe\xef_\xb4\x97z B\xd5\xc5*\x8a\x9b\x8a\xa9\xba\ +T\xc5\xc6\xe3\x1b\xb1tZ\x98b\x9a\xd2O\xe2\x19\x18\ +LI\x9e\xc2\x92\x99K\xf8[\xc1\xdf4$X\x96\xb3\ +\xcc\xadO\xe0\xce\xb4\xceH\x9fAie)\xc7O\x1d\ +\x17\x17E0\x9dn\xf2\xb9@\x13\x0e\xa7P\x17<5\ +\xc1P\x96\xb1\x91\x10\xee\x95\x13&\xac\x9e\x801\xc5\xe8\ +5\xc4\xab\x0es\xd6\x1d\xac\xe3\xd8\xa7\xda\xd0nVZ\ +\x16\x9f>\xfb)\xa6\x18\x93\x98\x99\xd3+\xf8\xfc\xb3\xf9\ +<\xfb\xe5\xb3\x147\x16c\xe9\xb4x-\xf0\xba\xe9\xeb\ +X\x9f\xbd~0e\x18\x14\x14W\x16\xb3\xe0g\x0b\x94\ +P\xf2\x9cisx\xeb?\xdf\xd2=f`m\xb1r\ +\xdd\x13\xd79\xdeT\xea\xa4\x84\xed\xdc\x0d\x9c\x03.\xa2\ +s\x08\xd9\x9d\x06\x90[\xffKrBtr4\x09\xd9\ +\x09\xea+\xed=\xed>\x0b\xfc\x95\xe5+\x9e4?9@\ +b\xea?\x8c\x1d5V\xa3\x09N5\x9c\xa2\xae\xa1\x8e\ +\x9bf\xdf\xe4z\xb1\x9b\xfa\x8e\x0c\x8bdF\xfa\x0c\xde\ +\xda\xfd\x96H\x08a,\x09\xd8\xa8\xa1\x08\x87?\xe0\xd3\ +\x14\x18\xdc\xa6E\xf3\xa8:\xc1t\xb5\x89\x1e{\x0f=\ +\xf4\x88Ow\x87\xea\xdc\x91mG\xe8n\xd7\x12p\xf3\ +\x13\x9b1F\x19\xb1\xdb\xed.\x87?\xb0tZx\xaf\ +\xea\xbd\x01\x14U\xff\xc1\x9cnf\xebS[\x95\xff\xdf\ +\xdd\xf3.[\xf2\xb7\xb8\xadSw\xf5\x9d3-\x87{\ +\x17\xdc\xeb\xc8\xd0\xc4C\xc43\x1e\x88\x01\xc2\xd01\xd6\ +\xe3J\x80k\x89Ww\xfbB\x8d\xa1D]\x19\x85\xcd\ +n\xf3)\xf8\x1e{\x0fgK\xcf\xd2\x5c\xd3\xac\xc9\xf2\ +\x91[\x1e\xe1\xfai\xd7\xbb\x15\xbe\xddn\xc7\xd2a\xf1\ +\xab\xe2\xde\xafz\x7f\xb0e\x174\xcc\xcf\x9c\xaf\xe9\x0d\ +=\xf9\xe2\x93\x94W\x97k\xea[S\xf7N\xf5\xfd\x5c\ +\xees\xc4\xc6\xf4\xbera \x063O\x01FD\xcf\ +\xcd\xe7\x12@\xce&\xc0\xc0t\xbeC(\xab\xe4\x84\xd8\ +9\xb1D\x8cu\x1f\xb0\xb0cW\x9c\x13\x09\x89\xee\x8e\ +n*>\xac\xa0\xa7\xc3\xe1\x83\xa4&\xa4\xf2\xde\x93\xef\ +\xb9\xbd\xb9\xdc\xfa\x1f)|\xc4\xafJ\xab\xbaXuY\ +\x98\x01\x19\xe6t3\xcd-\xcd\xec;\xbe\x0f\x80\x82\xc3\ +\x05\xac\xb8a\x85#F\x00\xee\x03D\x92\x9d\x88\xb0\x08\ +\x22\xc3#\xd9U\xbcK$\x86q\x15\x06\x0ep\x9e\xd3\ +8z\x05\x1e\xe1\xcc\x90\x10B\xf9\x91:!jj\x94\ +\xc7\x16/3\xd3\x86\xf8<\xfb\xe5Y:\x9a\xb5\xc3\xba\ +/\xfe\xe0E\x8f-?\x10\x13\x00\xc2\x0c\x147\x16\x0f\ +\x8a\xb0\xfa\x0b\xeb\xd7\xaeWf5\x9dj8\xc5O_\ +\xfa\xa9g3\x80\xa3\xfemv\x1b\xdf\xbf\xe5\xfb\xa4$\ +\xa8^\xb7L\xe5\x09\xc4\x9bXQ\xf8\x08\xf6\xa9\x09 \ +q=Wa SN\x88\x9a\x1a\x85=\xcc\xee\xb3 \ +=\xf6\x1e:\xdb;\xa9\xff\xb2^\x93\xf9\xf2k\x96s\ +\xdd\x94\xeb\xbc\x0a\xdf_\xf5/#\xeft\xde`\xcb,\ +\xe8\xd8\xfa\xd4V\xc5I\xfe\xec\x8b\xcf\xf8\xe4\x8bO\xb4\ +\xf5\xecE\x06?\xcf\xfd\xb9#\xa3p\xb2\xc8b\x010\ +\x02\x08\xc7\x8b/\xa0%\xc0\x08V\xa8O\x86\xa5\x87\xd1\ +C\x8f\xab\xfdwS\x90\xa6\xf2&\x8d\xea\x07\xf8\x9f\xfb\ +\xfe\xc7g\xeb/n*\x0e\xa8\xb2.'?@FZ\ +b\x9a\xc6\x1f\xf8\xc5\x9b\xbf\xc0\xd2b\xd1\xe5{-\x9e\ +\xbd\x98\x9c\x0c\xd5\xf2Ic\xf9>\xc2\x17\xf0\xaa\x05\xd4\ +\x04\x08Q;\x7fR\x84DhZ\xa8\x10~/\x09l\ +\xd8\x14\xb5\xa3\x98\x80\xde\x824\x165j2\xbe\xf7[\ +\xf7\x92\x12\x9f\xa2\x08\xdaf\xb3\xb9W\xff\x01\xcei\xc9\ +;\x93\x17\xb0\x09\x19\xcaX9g%+\xe7\xac\x04\xe0\ +t\xc3i6m\xdf\xa4\xd4\xb9Z\x06\xee\x1c\xc4\xb5\xb7\ +\xacud\x14\xc1\x0c\xb2\x98\x87\xe8\x11x\xd4\x02\x0e\x02\ +\xcc\x22N\xad\xfeC\xd3B\xbdvCd\xbbo\xb3\xdb\ +\xb8Xq\x91.\xab6\xd6\xff\x83\x9b\x7f\xe0\xb3\xf5\xdb\ +\xedv\xaa.U\x05\x5cYy\xa7/O\x12\xac_\xbb\ +^1\x05\x7f~\xf7\xcf\xd46\xd4\xba\xc8B\xd3\x10{\ +Iq\xf3\xac\x9b\xb5\xbe@\x22\xf7\x02#\x11=\x02\xb7\ +Z\xc0\xa0|\xc6q\xbb\xe6\xc48\x83.\xd5\xd3c\xef\ +\xc1zD\xbb\xc2\xd6uS\xae#3%S\x17\x01\xaa\ +/U\x13(\xd4\x04\xb8\x9c\x88\x90\x96\x98\xc6\xba\xdb\xd6\ +)\xff\xff\xf9\xdd?\xeb\x96\xc5\xba;\x1d\xbf#\x8a\x1c\ +R\x99\x04D\xe3!.\xe0 @\xa8c\xd0\x07\x80$\ +|\xde\xac\xc7\xdeCW{\x17\xad\x15\xda\xc1\x9e\xbbs\ +\xee\xd6%\xfc\xbe\x98\x00\x10!\xe4`\xf5,\x86\x1a\x1e\ +\xbd\xd51\x03\xfa\x83\x82\x0f\xa8k\xa8\xd3\xe5\x0c\xae\x9a\ +\xb7\x0ac\x8cj\x81\xb5\x09|\x07\xe1\x0cF\xe0&.\ + '\x84 1CI\x1d\x09\xb6\x116\x17\xbb\xef\xce\ +\xfe\xb7~\xad\x15~lt,K\xaf^\xaa\x9b\x00\x87\ +/\xb8YhI'\xf2\xcf\xe4\xfb&\xd80\x85)\xc6\ +\xc4\xd3\xf7<\xad\xfc\xff\xd2\xd6\x974\xf5\xef\x8d\x0c\xab\ +nX\xe5\xc8(\x86\xc5\x08\x02D\x02\xa1\xce\xf7\x11\x04\ +\x98\xc9h\x0cd(\xa9Ix\xef\x7f\xaa\xec\x7fG\x9d\ +\xb6\xdf\xbf\xc4\xbc\x84\x91\x91#\xbd:~\xea\xa3\xb9\xab\ +\x99\xbe\xe0r&A\xee\xc2\x5cE\x0b|X\xf0\xa1\xa2\ +\x05\x9c\x1b\xa4\xb3\x83\x98\xbb4\xd7\x91\x89\x81\x18\xe6p\ +'\x0e3\xa0\xd1\x02b\x81\xe5\xd1\x5c\xad\xb9\xf3H\xbc\ +\x86\x1f\xd5i\x1d\x95Z\x02\xe4L\xca\xf1*\x0cgR\ +\xf4uf\xbbl\x06\xf4\x90m8B\xad\x05\xde\xde\xf1\ +\xb6._ )>\xc91\xf9\x14\xc0\xc8\x0d8\xb4\x80\ +\x0b\x01\x0c\x84b\xd6\xdc5I|\xd8\xb1{\x8d\x01t\ +Y\xbb\xb0wh+vq\xd6b\xdd\xea\xdfn\xb7S\ +j)\xedS\x05\x954\x95\xf8u\xbf\xe1F\x04\xf5+\ +p\xdb\xf6n\xd3\xe5\x97\xf5\xd8{\xb8\xfd\x06\x95O\x1f\ +E6\xa3\x19\x83\x1b3 4\x80\xc4x\xcd]\xe3\x1c\ +_e\x12\xa8\xfb\x9f\xf2g\xd7)m\xd7/#9\xc3\ +\xe3\x88_\x7f\x99\x80=g\xf7\xf8M\x80\xe1D\x04S\ +\x8cI\x89\x0b\x5cj\xbd\xc4\xb6\x82m\x8a\x09\xf6\xa6\x0d\ +\x16\x5c\xb3@\x9b\xd1U,B\x04\x85\xc2Qi\x01\xa1\ +\x01B\x98\xae\xb9\xd8\xcd\x145g\xe1\xdb\xec6z\xce\ +k#\x7f\x19)\x19~\x0b!36\x93\xbe\xa0\xb9\xb3\ +\x99\x92F\xff\xb5\xc0p\x22\xc1\xa3\xb79F\xe7\xf7\x1c\ +\xda\xa3\x89\x03(N:Z\x07ql\xfcX\xa6\xa4\xaa\ +fO\xc5r=\x1e\x09\xa0\xd6\x00q\x9e\x0bb\xc7i\ +\x5c\xa0\xd1\x89\x00\xc9\x0e?\xd2W\xc5\xcb6;6,\ +\x96\xbeb\xcf\xb9=.\xf9^ND0\xa7\x9b\x15g\ +po\xd1^\x9a[\x9a=\xfaej\xa7p\xd6T\xd5\ +\x1a]\x11LG8\x82\xe1\xa8\xcc\x80L\x80d\xe5\xc2\ +p\xdf\x05\x92\x99f\xbf\xa8\xad85\x01d\xf8\x12J\ +Jt\x8a\xef\x1b\xfa\xc0\xe1\xa6\xc3~9\x9e\xc3\x91\x08\ +\xb2\x19\x00((*\xd0\xe5\x0b\xcc\x9f9\xdf\x91\x81\x81\ +\x18&\x92\x89\xc3\x0f\x90D\xb2st(\xc2WQ\x04\ +\xec\xd8\xc5\xcc3\x15\x92\xe3\x92=_\xef\xa1\xc2\x93\xa3\ +\x93\xe9+\xd4\x1a X\xc7P\xc3wo\xfc\xae\xf2\xbd\ +\xf8X\xb1g\x1f@E\x8a\xab\xa7h;w\x8ce>\ +B\xc2\xa1\xf4\x9a\x01\x03\x0b\xc8\xd2\x5c\x14G\xc0H\x89\ +\xf3\xde\x9a\xddj\x80\xa8\xbek\x80\x9a\x96\x1a\xaa/U\ +_\xd6$0\xa7\x9b\x95\xde@\xc9\xb1\x12\x8fA:g\ +\x07\xf1\x9a)\xd782\x89\xe4J\x9c\xfc\x00\x03!\x98\ +\x02*\xd1\x99\xc0\x1fF\xa3\x01\xa2\xfa\xae\x01\x00\x0e_\ +8\x1ct\x02\x0c5\x22\xc8\xeb\x1d\x9d;\x7f\x8e\xd3\xe7\ +O{\x9d\xa8#\x93a\xe2\xf8\x89\x8e\x0c\x84\x1f\x10\x81\ +\x08\x08\x85\x00\x18\xb0\xf9\x9e7\xa6\x07\xd9\x93\xb2\xfd\xfe\ +M0\x09Pp\xae@\xb7\xe39\x5c\xfd\x03\xf3\x04\xb3\ +\xf2\xfdd\xcdI]\x13u\xae\x1a\x7f\x95#\x03\x031\ +$\x93\x8a\x86\x00\xf6\xc1\xdd5$X\x04(\xb5\x94\x06\ +,\xd8\xe1\xa2\x11\xe6e:\xde*\xae\xa8\xad\xd05:\ +8&~\x8c6\x93X\x92\x11& \x040\x0c\x89\x8d\ +#3\x8c\x19}\xceco\xfd\xde~\x13\xf8P!\x81\ +z%\xb4\xb2ce\xae\xb1\x0073\xb7gL\x9e\xa1\ +\xcdD\x84\xfd\xe5\xae\xa04$\x08\x10\x8c\xae @A\ +\xbdo30\x9c\x89`\x8a1)\x8e\xe0\xa5\xb6Kn\ +[\xbc;Rh\x10\xc6\x18\x84\x09\x08\xe5r\xd2\x00\x00\ +\xa5\x17J\x83*\xdc\xa1\xe8\x1f\xc8Z\xa0\xaa\xb6J\xf7\ +$\x91\xac\xc9\xaa\x8e^(cq\xf8\x00\x06\x03\x92\xd3\ +x\x5c\x87\xde\xa2\x04\x0f\xd3\x8c\xd3\x82\x92\xcf?\x1b\xfe\ +\x19\xb0`\x83\xe53\x0c$|\x06\x83z\xd340(\ +o\x0d\x85\x00\x92\x81\xb3hgd4\xea\xbc\xbbS\xbc\ +\xa0\xf0xa\xc0\x0f\x12,\x13\xa0\x97\x00\xc3\xd9,\xa8\ +\xfd\x80\xf2\xe3\xe5.\x93D\xdd\x91!1.\xd1\x91A\ +8i\xf4\xb6~@2p\x04K@%\xd1\x112\xd6\ +\x8b\x0cc\x06\xc6\xb0\xbeo\xfd\xdb\xdc\xd5LMK\xcd\ +\xa0\x13\xa0?\x89`\x1aaR\xbe;\xcf\x0ev\x0e\x0c\ +\xc9\x93w\x12\xe3\x13\x9d\xb3\x91#\x81\x92\x01\xe7\x15%\ +\xf4j\x00\x10\xf3MU\xa8m\xac\x0d\xf8\xc1\x82\xe5\x07\ +8k\x81\xfe\xea\x0e\x0e\x05\xff\xc0ez\x98\x9b\x81!\ +\x99\x1cN\x90w_\x97B\x01\x1b=\xec#\x84\xb9\x80\ +x\x9bL/F\xa0\x19\x0f\xa8k\xac\xf3\x19\x0e\xf6\x84\ +\x9c\xb8\x1c\x0a\x1b\x037#2\xca\x9a\xcb\xfa\xb5\xd2\x9b\ +;\x9b9|\xe1\xb0\xb2\xb6\x81\xb2\xb8E\xef\xf67\xca\ +\xa7\xea\x9c$IX:-\x944\x96\x04t\xcf\x15i\ ++0\xc7\x99]\xd2e\xc1\xdb\xd5\x7fR/\xf1\x9c\xfe\ +\x9c \x13\x80P\xdcmV\xd4\x88\xbe1\x8184!\ +\xe1\xc2\x13\x85\x01E\x04\x01\xb2\xe3\x02\xfb\x9d3>>\ +\xf31\xb5\xad\xb5\xcaD\x13Y\x18\xce\xe1\xae\xe6\xaef\ +\xca,eA\xb9g\x7f\xe3\xb7\xa5\xbfe\xf7\xad\xbb]\ +H \xabzo\x82\xb7\xf7N\xe8\xf1\x04A\x80n\x0a\ +\x09\xc1!\x81\x8b\xe8'\x80\x0a}1\x01\xc1\x22@m\ +k-\xb5\xad\x81\x97c(\xc2\xd2iaC\xe9\x06^\ +\x9b\xaf]TK\x9e\x99m\xb0\xbb\xf6\xe6\xed\xbd\x9br\ +a\xc7\x9d\x06P |\x80\x1e\xb4og\xf8\xde\x9fA\ + \x88=\x01\x80%c\x97\xf4W\x1d\x0e{<:]\ +\xcc\x0a\xb2\x5c\xb2(i\x1e\xa7\x869\xbd\xcf\xe9\xcd$\ +\x0a\x02t9\x11\xe0\xb4\xceR\xc5\xa1\xe9\x0d\xd46\xd6\ +bm\xb3\xea\xfc\xb1+\x82\xa5\x05.7\xacL[\xa9\ +\xa8\x7f\xf5^\x05\xa6Q&]\xb1\x00\x9b\x97\x95\xe3\x04\ +\x01\xf2\xd1nx\xebOO`\x9c\xf6\xdf\xed\xc5\xdb\xfd\ +\xf8\xb1\x16\x8b\xc7.\x1e\xa0*\x1d>x\xe6\x9ag\xd8\ +z\xf3V\xb7\xe7\x14\x02\xf8\x18\x11lhl\xf0\x98\xbf\ +\x01\xe1\x00vc\xe3\xa8\x92\xda\x89~\x12$i\xff-\ +<\xd1\x87\x80PTJ\xd0\xba\x83\xc3\x1d\xe683\x87\ +V\x1d\xe2\xe9k\x9e\xd6\xa4\xcb\x1a **\xca\xfdK\ +\x22\xaa\x97vd3\xa0\x87\x00=t\xf3\xb9\xe6\x8c\xde\ +\x09\x1f\xa9\xda\x7f\xfb\xa2\x01\x00V\xa7\xac\x1e\x80\xea\x1d\ +\xba0\x85\x9bX\x9f\xbd\x9e\xa2;\x8a\x5c\xbc~K\x8b\ +EYV.i\x5c\x92\xcf\x95[d\x82\xf8r\x02\x01\ +z\xe8`\xaf\xe6L\x95\xce\x12\x8fD\xe3\x0cZ\xdb\xac\ +l/\x09\x9c\x04\xab\x93\xbf\xb9\x04x`\xe2\x03\x9c\xfc\ +\xf6I~\x9c\xf1c\xb7A$\x8d\xfd\x1f\xadO\xfd\xf7\ +\xd8{\xa8\xadS\xf5\x8al\xb4\xa2ZX\xda\xa0$\x9f\ +r\xf2\x03\xce\xa0?(4I\xfb\xef;\x85\xef\x04\x5c\ +\x09\xc60\xe37N\x0b\xdc\x7f\xd5\xfd\x9c\xb8\xeb\x04\xaf\ +^\xff*\xb1a\xb1\x1e\xa3\x89\xca\x9e\x01\x88\xedx\xf5\ +\x8c\x04\xf6\xd8{\xb4{-vR\x85c\x8f\x01\xbb\x83\ +\x00\xc7i\xd4\xf8\x01\xa0_\x0b8\x11`{\xc9\xf6>\ +\xc5\x04\xbe\x09Z 6<\x96\xfb\xaf\xbc\x9fc\xab\x8e\ +\xf1\xf2u/3>f\xbc\xcf\x90\xf2\xa1\xaf\x0f)\xbf\ +OLJ\xf4:!D\xfe~\xec\x84\xd3F\x5c6Z\ +p,*\xad\x22\x00t\xd1\xcef\xcd\xc5z\xd7n\x08\ +\xc7U\x0b\xec\x0b\x5c\x0bd\xc7e\x07m\x84p\xa8!\ +5&\x95_\xcd\xfa\x15Go?\xcaK9/i\x04\ +\xefk\x98Z\xad\x01R&\xa4x\x9d\x10\x22\xdb\xff\xf3\ +M\xe7\xb5\x05h\xa3\x12\xd5v3\xea\x10R7\x8d|\ +\xa0\xb9\xb8\x8a\x80\xcd\xc0\xcb\x9f\xbd\xdc\xa7\x98\xc0\xe3\x93\ +\x1e\x1fX\xc9\xf4#b\xc3c\xb9/\xfd>>\xba\xf1\ +#\xcaV\x94\xf1\xf0\xe4\x87=\xaazOG^i\x9e\ +\xe2\x00\x8e\x9f0\xde\xe7\xbb\x81\x8a\xfd?\xe5\xa4\x89;\ +\x94\x0d&zPi\x00\x80\x1e\x0eq\xd2\xc5\x0c\x1c\xd7\ +\xf9\x94Ih\xba\x84\xd66+\xaf\xecz%\xe0J[\ +\x9d\xbc:(C\xc4\x83\x89eW,\xe3O\xd7\xfe\x89\ +\x9a;j\xf8\xd3\x9c?\xf1\xad\xc4o\x05<\xfa\xa8l\ +\x1c\x05\x5c5\xed*}\xf6\x9f\x1e*NVh\x0b\xd5\ +D\x05\xaa\xbd\x05\xd4\x04\xb0#\xcc\x80Vw\xfb3^\ +\x12d-\xf0\xbd\xf4\xef\x0d\xa0\xb8\xfa\x8e\xd8\xb0X\xee\ +I\xbd\x87M9\x9b\xa8\x5cQ\xc9\xa6\x9cM\xdc\x93v\ +OP\x86\x9f\xdf\xc8{C\xb9O\xfa\xb4t\xef\xf6\xbf\ +7\x16\xd0\xd2\xda\xc2\xe9SNa\xdd\xaf9\x8e\xd0\xeb\ +\x1e\x08P\xc9&\xcd\x0f.\xa2?&0\x09\x97.a\ +_\xb4\xc0\xda\xf4\xb5C^\x0bd\xc6f\xf2\x93)?\ +a\xd7\xc2]\x9c\xbc\xf5$\xbf\xbb\xe6w,MZ\x8a\ +1\xcc\xfbk\xf2\xfe\xcc'x\xff\xc0\xfb\x8a\xfa\x8fO\ +\x8ag\x84i\x84{\xfb\xef\xf4\x0a\xbfK\xebo\xe7\x08\ +B\xf8\xca\xc6\x12\xcek\xc6\xf4PA=\x13y\x97p\ +\xeePR\xcbp\x89\xf8yD6\xf0\xa1\xe3\xdf\x97?\ +{\x99\xbb\xe6\xde\x15\xd0<\x01c\x98\x91\xef\xa5\x7f\x8f\ +\xe7\x8f??\x982\xd6 \xc3\x98AN|\x8er\xc4\ +\x86\xc5*\xe3\xfe\x9e\x06]\xecv{\x9fvG\xf9\xc3\ +\xb6?(\xdf\xa7\xcc\x9c\xa2o\x0e\x80d\xe7\xeb\x8a\xaf\ +\xb5\x19\xb5P\x8e\x98\xf5)k\x00\x17\x02\xd8\x80N.\ +\xf1\x16\xa3U\x04\xa8Bh\x82\x91\xf8\x86\xec\x0b\xf4j\ +\x0dk\x9b\x95g\xdey\x86W\x7f\xf8j@\x0f\xbf6\ +}-/W\xbe\x8c\xb5+pS\xd2\x17d\xc7e\x93\ +a\xcc ;.\x9b\x9c\xb8\x1cE#\xc9\x1b^\xf4\xf7\ +\x1c\xc0\x9a\x86\x1a\xf6\x1c\xd9\x03\x88=\x9a'^=\xd1\ +A\x00\x0f\x82\x97\xd3\xbe*\xfbJ\x9bY\x13%@;\ +\x82\x006p\xb3j\x14\xd0\xcd^v\xb3\x8c\xaf\x08\xc1\ +\xb1\xc2@\x110\x0f}\x98\x07\xfc\xd5\xf1\xef\xf6\x92\xed\ +l/\xd9\xce\x92,\xff\x87{\x8daFV'\xaf\xe6\ +\x95\xca\xc0M\x89?\xf7\xca\x89\xcbQ\x04\xeemtR\ +V\xcf\xfd\xbd\xef\xd1s[\x9eS\xbe\xa7NM%4\ +\x22T\x8c\xee9\xf1N\x16<\x88\xf1\xffs\xa7\xcfa\ +\xb9`\xd1^t\x94\x22\xa0\x0d\xd5\xb62\xee\x08\xd0\x03\ +\xb4\xd3\xca+\x8c\xe47J\xeaq`&\xfa\xb4\xc0H\ +\xe0\x1a\xe0KG\xd2c\x1b\x1f#\xe7\xb9\x1c\x8cQ\xfe\ +\xdb\xf4%c\x97\xf4\x0b\x01R\xa2S\x14Ag\x183\ +\x02\x1a\x88\xea\x0f\x0d \x13\xebp\xf5a\xde\xdc\xf3\xa6\ +\x92\x9e5?\xcb\xa3\xfa7\xa8^\xf14`\xa0\xe4\x0b\ +\xa7\xe9g-|\x81P\xff\xed\xa8\xb6\x98sG\x00\xe1\ +\x0c\xeef#\xcby\x1c\x83j\xc07\x1fX\xae\xf3)\ +f\x22LG\xef\xa8\xa2\xb5\xcd\xca\x83/>\xc8\x96\xc7\ +\xb6\xf8]!\xc1\x1a!T\xb7l\xb5:\xef+\xfa\xcb\ +\x0c\xfc\xfb\xa6\x7fW\xbeO0O \xca\x14\xe5]\xfd\ +\xabHq\xe2\xc8\x09mf\x17\xd8\x8fh\xfd\x1d\xa8\xb6\ +\x93\x09\xf5po\xa1\x05.\xf1[\x8c\xfcJI=\xd3\ +{\xe8u\x08\xe7\x01\xef:\xfe-<^\xc8\x0b\xdb^\ +\xe0\xf1e\xfe\x05y\x8caF\x96\x8c]\xc2\xf6\xb3\xfa\ +\x06\x99R\xa2SH\x8eJ&%:\x85\x94\xa8\x14\xa6\ +\x19\xa7\x05U\xe0\x9e\xe0\x8b\x08\xeeL\x86'3\xb2\xed\ +\xcbm\xec=\xea\x18\x9f\xcb\x98\x97!F\xf6|\x08\xde\ +n\xb7Sq\xa4\x02\xeb\x05'\x9f\xe9$\x05@+\x0e\ +\x02\x00\x9e\x09 \x9c\xc1<^g9\xeb4Z\xa0\x10\ +T\xee\xa1w\xc4!z\x05\xaa)\x02\xcf\x7f\xf8<\xd3\ +\x92\xa7\xf9\xed\x0f<>\xe9q>o\xfc\x1ck\x97U\ +y\x8f \xc3\x98AlX,\xc9\xd1\xc9\xa4D\xa5(\ +\x9f\x83\x8d\xbe\xfa\x07\xcd\xad\xcd<\xfc\xf2\xc3\xca\xff\xd3\ +\xe6MSZ\xbf\xc1\xcd\xdb\xfc\xce\xf6\xff\xd0?\x0fi\ +/h\xe1\x0b\xac\x9cG\x10@q\x00\xc13\x01@\xb0\ +\xa4\x8dF\xfe\x8d\x04\xdeVR\x1b\x11\xddB\xbd\x8b{\ +e\xf6\xfeF\x15Q|l\xe3c\xa4<\x9e\xe2vM\ +!O\xc80fpt\xf1Q\xdd\xd7\x0f\x05\x04j\x1a\ +~\xf4\xca\x8fhn\x15\xb3\x9a\xa3M\xd1L\xb8v\x82\ +\xd6\xf6\xcbZ\xc0\x8d\xfdo\xb1\xb4p\xaa\xf2\x946\xc3\ +\x06>\x03ZpC\x00o/\x87\xda\x80\x0e\x0a\xf9\x94\ +n\x0ej\xce|\x89\xcb\xfa@^\x91\x8dK\x80\xe8\xce\ +\x17\xee\xa4\xbc\xae\xbc\x9f\xaa~\xe8\xc0\xdf\x88\xdf[{\ +\xdf\xe2\xa3\xa2\x8f\x94\xdfg,\xca\xc0\x10a\xf0=\xf6\ +\xdf\xfbyp\x97VTts\x9e\xc3\xe4\x03\x97\x10\x0e\ +\xa0f;7_o\x07\xf7\x00\xadT\xb3N\x93\xda\x09\ +N\xb3\x07\xbc#\x1c\xe1<\xaa&\x90Z\xdb\xac<\xb6\ +\xf1\xb1>\x85\x8a\x87\x13\xf4\x08\xbf\xb4\xa6\x94\xffx\xfb\ +?\x94\xdf\x5c1\xe3\x0a\xe2'\xc5\xeb\xde\xb5\xa5\xf9B\ +3'\x0e99\x7f\x16\xf2\x10\xad\xbf\x05a\xff53\ +D}\x11@\xf8\x02\xe5\x1c\xa5\x95?j\xce\x9c\xc1\xbf\ +q\x027$(\xaf+\xe7\xce\x17\xee\xfc\xc6\x90\x00<\ +/\x9bgi\xb1p\xfb\xafoWT\xff\x881#\x98\ +t\xd3$\x97\x15\xda\xdd\xbd\xff'\x9f+\xde]\xac\xbd\ +\x99\x8dV\xca\xf8;\xa2\xf5\xb7\xe0\xa4\xfeA\xc7\xber\ +\x08-\xd0\xc6I~\x8f\xcdi\xc2x!\xfe\xcd \x8e\ +\xc3-\x09\xe6\xfcl\xce7\xc2\x1c\xa8\xe1\x22\xfc\xdf8\ +\x84\x1f\x1a\x11\xca\x94eS\x90\x22$\x9f\xb3}dR\ +\x9c\xa9\xa1\x1b\x12|\x93|\x025\xecv;\xcd\xad\xcd\ +\xacza\x15\xe5\xb5\x8eg\x9f\xb8l\x22Q\x09Q\x9e\ +\xc7\xfc\xdd\x90\xa2hG\x916sG\xeb\xb7\x224\x80\ +\x8b\xfa\x07\x1f{\xca\xa9\xcb\x0a\xd8\xa9\xe3\x14\xc9\x8c \ +\x9c\xd9\xca\x996\xa0\x19\xb8\xd2\x8f'\x8f\x06R\x80\x0a\ +\x94m\x0d;\xba;\xd8T\xb0\x89\x94\xb8\x142R\xbe\ +\x19S\xc3\xdd\x11\x7f\xc2\xd2\x09\xc4O\x8dw\x5c\xd4\xdb\ +\x93\xd4\xcc\xecu\xea]V\xec\xaf\xa0\xa6\xa4F\x9b\xd8\ +\xc8?8\xc9n\xa0\x1e\xb0 \x08\xe0\xd2-\xd1K\x00\ +z\x7fl\xa3\x92\x83\x5c\xc9\xad\x18T~\xbd\xa5\xb7P\ +z\x03D\xe0\x96\x04\x00;JvP\xd7TG\xce\xa4\ +\x1c\xed\xce\x99\x97\x19\xca\xeb\xca\xb9k\xfd]\x9c\x82\xb5\xcd\xca\xf6\xe2\xed\ +\xbc\xb0\xed\x05\x97\xb7\xa3\xa4\x08\x89\x11\x0bG\x105!\ +\x0a\x83d\xc0 \x19\x90\x90\xc4w\x0cJ\x9a\xf2\xdd\xf9\ +S2p\xec\x8dc\xb4\xd6k\xf7j\xc4F+{\xf8\ +>V*zk\xab\x11\x94w\x00\xbd\x22\x18\xf3\x99\xc2\ +\x80\x18\x92\x98\xc0\xd5\xfc\xd5-\x09\xe6!l|\xa08\ +\x83\xd7\xa8cJ\x5c\x0ak\x17\xaeeq\xd6\xe2A\xf3\ +\x13\xca\xeb\xca\xd9\x5c\xb8\x99\xcd\x85\x9b\xdd\x86\xb6\xc3g\ +\x84\x139;\x92\x90\x88\x10\x8f\xc2u'xIr\x10\ +\xe4\xf4\x8e\xd34\x95\xbbY\xbe\xe50?\xa1\x8a\x83\x88\ +\xa5=\x1a\xf0\xe1\xf8\xa9\x11\x0c\x02H\x08\x12\x8c \x89\ +4\xb7$\x00A\x82I\xfef\xed\x84\xe3\x88\xb9\x89^\ +F\x223\x923X\x9d-\xb4\x82?\xc3\xcd\x81\xa0\xbc\ +\xae\x9c\x1d%;\xd8^\xbc\xddc\x14S\x1a'\x11>\ +?\x9c\x10\xa3\x7f\x82w>wv\xe7Y,\xe5\x16\xd7\ +\x1b\xd4\xf1\x22E\xfc\x1d\xd1L\xe4\xb0o\x17:wd\ +\x0c\xd6\x8cF}$\x98\x84\xfe\x89\xa5\xdep\x061$\ +\xed\xe3}\x05c\x94\x91\x9cI9d\xa4d\x90=1\ +\x9b\xe4\xb8\xe4\x805\x84\xb5\xcdJym9\x85'\x0a\ +)\xaf-\xe7\xf3\xe3\x9f{\x1f\xc4J\x03)S\xc20\ +\xce\xb7p\xbd\x9d\xa3\x13\x1av6p\xa9\xe2\x92\xeb=\ +.\xb0\x9d\x026\x00g{\x0f\x0bn\x06||\x09.\ +X\xd0G\x828`\x11\xfa&\x97\xfa\xc2E\xc4\x88d\ +5~\xcdO\xc8H\xce\xc0\x18m$6*\xd6c\xd8\ +\xb9\xb9\xb5Yi\xd5\xba\x17\xbf\x92_\x92\xcdt<\x9f\ +7\x1b\xef\xcb\xfe\xd3\x09\xf5\xef\xd6\xd3\xd9\xe0f\xb0\xc5\ +\xca\x1e\xf2\xf8%\xa2\xd5\x9f\x03. \xfaN\xba\x85/\ +\x0b-\x98\xd0\x92`\x06\xeb\x89\xe0\x06\xb7\x15\xd5W\xbf\ +\xc0\x19\xf2\xac#?\xc9\xd0g\x84\xf7>G\xaa\xf7\xe7\ +\xd1\xdb\xe2\xe5\xcf\x9e\xf3=\x5c\xf8\xe8\x02\xddV7\xa6\ +\x5c\x08\xffW\x08\x8f_-|]v_\x8d\xfe\x98\xd4\ +.\x93 \x06\x18\xcd\x226\x10\xc52\xb7Wf\x22\xa6\ +\x8f\x07q\xdda\xc0\xf1:\x9b\xec\x0f\xfb3d\xed\x0b\ +\xe1\x08-6\x0e!t?z8\xba<~\xc9@W\ +e\x17\x17?\xbb\xe8\xb2-/\xa0\x16~\x03\x0e\xe1\xb7\ +\x12\x80\xf0E\x99\xfa\x07\x12\xa2\x8b\x18\x03\x98\xc8a\x0d\ +\xf1\xfc?\xb7W\x8eDh\x03\x7f\x06\x92\x02\xc1\x19\x04\ +1\xe4\x81Q5)\xd4\x8bb9\x97c\x9c*}\x04\ +A1]\x9e\x04/uJt\x1e\xec\xa4\xe3\xb0\x875\ +\xfb\x83,|\xe8?\x02\xc8y\x87 B;F2\xb8\ +\x8e46\x10\xc2\x18\xb7WOB\xcc\x1d\x0c\xb66\x18\ +\xa2P\xb4\x81\xdc\xddk\x94\xe8\xcc\xeb\xc4v\xde\x83\x09\ +?\xcb&\x0e\xf06B\xf8\x0d\x04A\xf8\x10x$P\ +/l\x88\xb8`\x17\x0d\x9c\xc1\xca\xc7\xc43\x99P\xe7\ +\xb5\xc5\x10-\xf0h\xef/\xfa[\x1b\x0c%t@\xcf\ +\x81\x1e\xba\xf2\xba\xb0\xb7\xbaQ\xf96Z9\xc5+|\ +\xc1f\x84\xe0\xeb\xe9\x83\xcdwF\x7f\x13@<\x82L\ +\x82\x16Z\xa8`\x07\x89\xd8\x88`\xbaf8\x99\xde\xab\ +\xce\x00'p\xd8\xda\xcb\x19\xc7\xc1\xbe\xcb\x8e\xbd\xd6C\ +\x97\xbd\x9b\xf3\x94\xf3s\x8e\xb2\x0b!xyx\xd7\xed\ +\xf4\xae@0\x90[\xc6\x19\x90C\xc7`d\x02\x99L\ +\xe2\xbf\x09w\xda\xb9T\x8d\x91\x88W\xcc\xfa\x1a@\x1a\ +j\xd0\x13\xc7h\xe1K\x0e\xf2\x02V\xea\x10\xb1\xfd&\ +D\x90\xa7\x03\x1f\x03<\xfe`\xa0\xf7\x0c\x94\xfd\x82\x08\ +\x84xc\xc9\xe6~\xe2X\xd7\xbb\x97\x8d{\x8c\xc4\xd1\ +\xbf\x1e\xce>B\x15\x22n\xe1M\xf06Z\xa9\xe6O\ +\x94\xf2\x19B\xd57\x22Z\xfd%\xfc\x0c\xf2\xe8\xc1`\ +m\x1ai@\x882\x0a0\x92@\x0a\x99<\xcaH\xee\ +\xf4\xf9\xcbI\xbd\xc7p\xf1\x13:\x11\xf1\x892|\xc7\ +'D\xab_\x8f\x95S\x88\x16\x7f\x01\xd1\xeae{\x1f\ +T\xe1\xc3\xe0\x11@\xbe\xb7\xac\x0db\x00#iL\xe5\ +J\x1e!\x86\x9b}\xfez$\xa2\x1f\xee\xb4,\xcd\x90\ +A\x15\x22(\xa5g\x91\xadn\xceS\xc1\x1f8\xc6>\ +DkoBL\xe6\x90[}\x0f:c\xfb\xfebP\ +\xb7\x8d\xed\x85\xec\x1bD\x22\xf7\xb4\xd3\x98\xc2\x95<\xac\ +\x8b\x08 \xc8\x90\x84 \xc48\x06\xc7Lt\x22\x84~\ +\x06\xfd\xcb\xeb\xd9h\xa5\x9e-\x1c`3\xa2\xa5_@\ +\x10\xe0\x22N\xef\xf1\xf7\x17\x86\x02\x01\xe4r\x18\x10\x11\ +\xc4H\x84F\x18I\x1a\x93\xfd\x22\x82\x8c\xb8\xde#\x09\ +\x079\x82\x8dF\xd5!G\x1c\xf5\xc2F+M|D\ +\x19\x7f\xc7\xcaYDk\xb7 \x04/\xbf\xc0\xd9o\xad\ +^\x8d\xa1B\x00uyBph\x04A\x848\xae \ +\x83\x07\x18\xc9\x12B\x08l\x9a\xf0H\x84~\x89C\x18\ +\x1d\xd0G\x0c9z\x08b\xb4\xdd\x9f\xa5\xf4\x9d\xd1\xcd\ +y\xce\xb2\x99\x22>\xee\xcd\xd5\xda{\x5c\xc4\xf1\xee^\ +\x0f\xfd\xdc\xea\xd5\x18j\x04P\x97KM\x84h\x84\xf8\ +Fp\x0dK11\x8f(r\xbc\xf6\x1c\x86\x12\xac\xec\ +\xe1,\x9f\xf2\x15\x07\x11\x82\x97\x85\xdf\x82c\xd5\x8e~\ +W\xf7\xee0T\x09\xa0.\x9fl\x1a\xe4^C4B\ +3D3\x93\xc5\x98\xb8\x81h\xb2\x87\x1c\x19Z\xf8\x82\ +\x0b\xec\xe7$\x05Xi@\x08[\x16~+B\xf0\xca\ +\x82\x8d\x83U\xcc\xa1N\x005dg1\x0c\xa1\xc4#\ +qh\x87h&2\x83\x04f\x11C\x16\x11L\x1fp\ +BtRM\x0b\xe54s\x98\xc3\x14 \x9c\xb86\x1c\ +\x0b3\xb4\xf6\xa6\xc9\xeb\xf4\x0d\xa8\xaa\xf7\x84\xe1D\x00\ +u\x99Cz\x0fY3\xc8\x84\x88@h\x89H&\x92\ +\xc1(\xa6\x10\xce8b\x98N\x08c\x08%!(%\ +h\xe7\x08]\xd4\xd3I=M\x94p\x9a\xe34+o\ +\xe0\xb4\xe1\x10\xbe,pY\xc5\xcb\xabt\x0f\xec.\xd3\ +>*s8CM\x06Y;\xc8\xa4\x90\x89\x11\xae:\ +\x94]\xb3\xfb\xf0\xecb\x8b\x1d!\xcc.\x1cK\xafv\ +\xa8\xbe\xcbG7\x0e\x15?\xe8\xad\xddS\x05^.\x90\ +\x85\x1a\x82\x96\x14\xeaC\xde5[\xcfk\xf1\x9e \xbf\ +#)\x93\xc0\xf9\x90U\xfb\x90j\xe9\xde*\xedr\x85\ +L\x08\x83\xd3\x11\x8c\xe7\x96I`s:\x86\xbc\xc0]\ +*\xa9\xbf\xd7\xba\xfd\x17\x866\xfa\xa2\x0a\xff\x85\xcb\x00\ +\xff\x1f\xef\x83\xa0\xb6}\xbcC*\x00\x00\x00@tE\ +Xtcomment\x00Agt ac\ +tion success fro\ +m Icon Gallery h\ +ttp://icongal.co\ +m/)\x1e!P\x00\x00\x00%tEXtda\ +te:create\x002011-0\ +8-21T13:33:49-06\ +:00\xaeT\x80\x8e\x00\x00\x00%tEXtd\ +ate:modify\x002011-\ +08-21T13:33:49-0\ +6:00\xdf\x0982\x00\x00\x00\x19tEXt\ +Software\x00Adobe I\ +mageReadyq\xc9e<\x00\x00\x00\ +\x00IEND\xaeB`\x82\ +\x00\x00\x04\xb7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x0c\x1c\xe0\x0dm\xea\x00\x00\x02\xb5IDA\ +Tx\xda\xdd\xdb\xbdk\x14A\x18\xc7\xf1\xef\xc5\x1ch\ +\xb0\x13D\xb4R\x11_A0\xa8\x07\xa2\x10\x10D\x22\ +\x88A\xb0\xb1\x14k\xad.\x9d\x7f\x80\xad\x82\xd8(Z\ +\x04\x22)\x14+_\x0a\xb5P!\x88\x8d\x95\x88\x82\x06\ +A\x081\x8a\xe2i\xf0,n\x17\xce\x90\x9b{fo\ +\xde\x9e\x19\xd8\xee\x99\xdb\xfd}f.3\xbb\x97\xad\xf1\ +\x7f[\x0d\x9c\x05N\x02;\x80u\xf8i\xdf\x809\xe0\ +\x190\x0d\xbc\x22\x816\x06|\x04\xda\x81\x8f\xbf\xc0\x1d\ +`c\xcc\xf0G\x81?\x11\xc2w\x1f\x9f\x80}1\xc2\ +\xaf\x05>G\x0e_\x1e_\x81\x83\xa1\x01.$\x12>\ +\x1a\xc2\x93\xc4\x00\x82#\xcc'\x08\xd0\x06\x16\x81\x86\xef\ +\xf0\xb5\xe2d\xbd\xdaz`\xc9\xf19\x87\x80]\xc0e\ +\xc1(/\x02\xc7\x80\x97>\x11L\xa30\xec\xf1\xbck\ +\x80\x87)\xcc\x84X\x00\xc9 \xc4\x04H\x02\xa1*@\ +\x0d\xd8\x0e\xecw\xb0\x8b\x1b\x01\x1e\xc7Z\x1d\xaa\x00L\ +\x00\x1f\x96\xd5>\x05vjD\xb0\x058S\xec\xdfW\ +\xaa\x9f\x07\xb6jC\xb0\x01\xa8\x0b\xb6\xcdS\xda\xbe\x0e\ +6\x00\x07\x84\x17\x86&\x04\x1b\x80\xe3\xc2]\x5c]\x13\ +\x82\x0d\xc0^\xc1\x05}q\xf8\xf7)\x08\x82\x0d\xc0\x10\ +\xf0\xb6O\x9fk\x8eW)\xef\x08\xb6\xab\xc0\x18\xd0\xea\ +Q\xff\xbe\xb8\x7f@\x13B\x95}@\xa3\xb8\x8d^*\ +\xea~\x00\xb7\x80\x0d\x1ew\x8c\xde\x10\x06\xd9\x0a\x8f\x14\ +#^'L\xf3\x82\x10\xfb^\xa0\x0a\xc2#!B#\ +G\x00\xe7\x08\x1a\x01\x9c\x22h\x05p\x86\xa0\x19\xc0\x09\ +\x82v\x80\x81\x11r\x00\xb0]\x22G\xbb;~7\x14\ +oFW\x93\x22\xcc\x01\x9b\xcaN\xa6\xbd\xfdL\xb1\xff\ +\xcf\x11\xe1^\xd9\xe1f\x9f\xc2\x1b\x19#\x1c\x028!\ +(\xcc\x15\xe1J\xf9t\xf7y\xc6\x08/\x0c\x99\xde\x94\ +\x85{\xe8\xfc\xd7F\x8e\x08G\x0cy\x16\xba\x0b\xc7\x81\ +\xdf\x19\x22\xec6d\xf9\xb9\xbcx\x22C\x84\xeb\x86\x1c\ +\xefV\xea0\x0e\xfc\x12 L\x01\xab\x12\x0f\xdf\xec\x93\ +\xe1v\xaf\x8e9\xcc\x84K\x82\xeb?e\xfa\x00\xcd3\ +\xa1)\xb8\xee\xd7\x92\xc1\xd38\x13$#\xdf\xc2\xe2\x97\ +fM\x08\x92\xf0m\xe0\x9c\xed\x07k\xf8:4\x85\xe1\ +'\xab\x9e@:\x13b x\x0f\x9f2B\xb0\xf0)\ +\x22\x04\x0f\x9f\x12B\xb4\xf0) D\x0f\x1f\x13!\x99\ +\xf01\x10\x92\x0b\x1f\x12!\xd9\xf0!\x10\x92\x0f\xef\x13\ +AMx\x1f\x08\xea\xc2\xbbDP\x1b\xde\x05\x82\xfa\xf0\ +\xb6\x083\xc06:?W]\x15\x86\xbf\xa8\xe5\xa9\xac\ +\x14\xc1\xe6\x98DYs\x89\xa0.\xbcK\x04\xb5\xe1]\ + \xa8\x0f\xdf\xfdxm\xc1\x22x\x0b8Ofm\x0b\ +p_\x10~\x16\xcfo\x8c\xd5\x22C\x8c\x02\xa7\x81\xc3\ +\xc5\x128L\xe7\x85\x8cY\xe0.\xf0\x00\xf3{\x8d\x03\ +\xb7\x7f\x93V\xf9\xaf\xed\xda\x9d\xb7\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00\x04>\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x09\x01#\xe2\x07T\xad\x00\x00\x02TGp\xc3~\x83\x8bZ=E/\xaf\xa6\x01\ +\xc0}\x8a\x00\xeeBu\x14\x06\xfch\x0d]\xdf\x83\x04\ +p\xa2\xa5\xef$\xa6tS\xd8\x8c\xd4\xdctMr\xea\ +\xefe\xf5\x12\x5c\x17 4\x815-\xab\x99\xed\x05\xcc\ +\x134\x00\x06\xc0\x00\x18\x00\x03\x90\x8aU\x80[\xe0\x06\ +X\xcc\xe3v\xb8\x97\xad\x02/]m\xaf4\xe9\xf8/\ +\x80M\xbe?Bt\xfa\x00H\x22>\x90Y<`\xa9\ +kzW\xba\xaeo\x01\xef\x91v\xcf@9\xe5\xf8\xc0\ +\xc0\xe3\x01\xb7\xfc\xfe\xe4\xb4\x05l\x03\x1f1\xe2\xab\xc2\ +\xef4\x87!\x1e\x10\x0a\xe0&r\xef\xd3\x15_\xf1\xea\ +\x01\x94\x9d@\xa9n?\xf1\xb8g7)\x00{Y\xbc\ +\x04\xab\x02\x04\x1f\xf1I\xc5\x072\x8d\x07\x00,G \ +\xbc\x02+\xda\x97\xf3\xbf6,\x03\xd7n\xa9+k\xf3\ +g, b{\x01\x03`\x00\x0c\x80\x010\x00Af\ +\xe7\x03\xb0\xf3\x01v>\xc0\xce\x07$\xe0\x9af\xda\xb7\ +\x9d\x0f\xf8\xc7#`\xe7\x03\xb0\xf3\x01\xb6\x1d6W\xd8\ +\x00\xe4\x10\xc0\x93P\xb7\xa4H\xd7\x8cp\xbd\xed\xd3X\ +J\x99i(\x810\x83\x9c\xf2\xe7\x952\x93\xa6\xcf\x9e\ +u\xa9\xf9\x00\x18\xa9\xb4\xb9\xb8l\xca\x07`\x1aX\xc8\ +\xd9\xfb\xee\x188\xf5\xad<\xf2\xa9\xb3?\x10\xea\xe8O\ +\x9e\xae\x87\x88\xef\xb6Y\x17\xc9\xb9\xe0;\xefn\xd8E\ +?\xba\xb1\x1e\xb8\xb1\xf7\xb4/\xf09\xcbf\xb6\xb5G\ +\xae\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x06\x9b\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x111Z\xbe]\x83\x00\x00\x04\x99IDA\ +Tx\xda\xe5\x9b\xcfoTU\x14\xc7?\xf3\xa0\xfc(\ +\x96v\x00\x7f`\xa5\xc4\x0d \x0b(\x1dt\x01$\xc0\ +\x1f\xc0\x92(QXc\x88\x02\xa2!Ah\xc7\x9d\x7f\ +\x81\xba\x00\x5c\xb9\xd0\xb8\x11\x5cXmw\x90\x98\xd8i\ +i\xf9a\xdc\xc8\x8f\x82\x09\x15:\x14+\x08\x84\xd6\xc5\ +\x9c\xa6\x8f\xe6\x9d\xfb\xde\xbb3w\xe6\xbd\xc7In&\ +y?\xce\x8f\xef\xbbs\xee\xb9\xe7\x9e\x93\xc3=\xad\x00\ +\xba|c\x15\xd0\xe6\x1b\x00\xf7|c\x14\x18\x04J\xf2\ +{\x97\x14\xd2z\xa0\x08\x5c\x06\xa6\xab\x1c\x97\x80\x1e\xe0\ +\x8d\xa4\x1b\xbd\x048$\x0aO;\x1a\x17\x81\x83@s\ +\x92\x0c\x7fA\x94\xfa\xcb\xa1\xe1s\xc7\xdf2\xc3\xda\x1a\ +ix\x0e\xd8\x0f\x94\xebh\xf8\xdcQ\x16\x1dr\xf56\ +\xfe\x15\xe0l\x03\x0d\x9f;~\x16\xe7j\xf5\x15\xe3\xd2\ +\x1e\xe0\x8b\x98\xd3\xefw`@<\xfb\x05\xe0\xb6\xcf\xeb\ +\xe3[\x11^\x06:\x81\x02\xb09\xa6\xe3\xbb'\xb3\xe1\ +[\x97_\xbe\x07\x98\x8a\xe1\xbdO\x00k\xaa\x90\xb7\x16\ +\xe8\x8e\xb1\x9aL\x89\xcc\x9a\xd3<\xe0\xab\x88J\x9c\x03\ +v9\xd0a\x1b\xd0\x17Q\x87\xaf\x81\xa6Z\x09n\x02\ +~\x8c \xf4\x02\xb0\xa3\x0e\xfeg\x87\xc8\x0a\xd3\xe7L\ +-@\xc8\x09\x9a&AO\x80\xcf\x81\x05ut\xc2\xf3\ +\x81\xa3\xc0\xa3\x10\xdd\xbe\xa9v\x85\xf8,D\xc05q\ +X\x8d\xa2\xcd\xc0\xf5\x10\x1d\x8b\xb6\xcc\xf7\x850\x1e\x04\ +V& \x10{\x15\x18\x0aq\x8c\xef\xc5e\xba\x1a\x98\ +\x08Yw[\x12\x14\x8d\xb6\x848\xc8\x09\xa0#\xce\xff\ +\xbe\xd7\xc0l@\xc2\xdf\xa4Q3\xf0\xabA\xef\xfe\xa8\ +\xfe\xe0\x80\x81\xc9U\x89\x02\x93J+\xc5/i\xfa\xbf\ +\x1f\xc6\xa0\xd5\x10\xdb?\x026\xa6`+\xdeiX\x1d\ +\xcab\xa3J\xc7\x0d\xe8\x9d =\xd4c\xb0\xe3\x98i\ +??f\x08r\x9aR\x04\xc0|\xf1UA\xb6\xdc\xd1\ +|\xd8\xc7\x06\xd4\xb6\xa70+\xb5\xdd`\xcfGA/\ +h\x99\x9c_,\x03\x94^`\xb2\x06[\xddI\xe1e\ +\x13p\xf5+\x96\x07\x8c\ ++7\xdb2\x04\x80f\xcb]\x0f\xbd\x02\xa35C\x00\ +\xe4M\x00h3\xe0\xc5\x0c\x01\xb0B\xb9>\xee\x01\xb7\ +\x94\x9b\x1b2\x04\x80f\xcb-\xcf\x10%ue\x08\x00\ +-\x99R2\x01P\xc8\x10\x00]\xa6p\x7f)\xf0T\ +\xd9.\xae\xce\xc0v\xb8C\xd9\x0e?\x05Z<\xe0>\ +pE\x89\x03v[\x08\xfc\xd7\xe1\x97\xb4\xe1\xfd\x8e\x12\ +\xd3\x5c\x02\xfe\x99\x09\x10\xbe7\xbc\x1c\x97\xce;\x04\xe0\ +\xbc%\x00A\xf4\x8c\xcd\xa6\xa4\xe8V\x0b\x87\xe3*)\ +\x1a\xd7/m#bR\x14\xf4\xbc`\x9f\x05\xeaIO\ +\x8b\x07n\x8f\x8f\xf0\xfc\x1c\x8c\x1c\x0ez!\xechl\ +A\x8a\x8c\xb7:\x1a\x03\xf8\xd4\x80ZO\x8a\x000\x95\ +\xf6\x1c3\xbd\x18v<\xde\x99\x92\xa0\xe71\x96\xc7\xe3\ +P)\x22\xd0\xd0\xbb\x09\xbc\x96`\xe3\xc3\x0a$\xf6G\ +\xcd\xb8\xfcd`R\x22\x99%2-\x12\xd6O\x1bV\ +\xb3\xc8I\x9e\xb0\x22\xa9>\x92U$\xb5\xd4\xb0\xe4M\ +S\xa9#\x8e}\xca\xb57d}\x1e\xa2R\xa2\xd6h\ +j\x97u\xddT&\xf7\xae-\xf3b\x08\x087\x807\ +\x1bh\xfc[T\x8e\xbeL:vW# \x07\x9c&\ +Z\xa9\xec\xc2:\x1a\xdeD\xa5T\xf6q\x88n'k\ +%\xec\x0c\xd1\x8a\xa5w\xd6\xc1\xf8\x9dD+\x96\xfeA\ +\x02\xa2\x9a\xd0<\xe0K\x1a_.\xdf\x1fQ\x87S8\ +*\xea:H\xf4\x86\x89?\xe5\xafQM\xbb\xdb\xeb2\ +\xd5\xaf\x10\xbda\xa2\x18\xf7?\x1e\x97\xde\x96\xd9\x90\x8f\ +\xf1\xce\x1f\xcc\xb6\xcc\x0c\xc9\x9e\xa3\xcc\xec\x91U^\xc6\ +KT\xea\x15\x0a\xe2\x5c\xe3t\x9b\xcc4P}W\x0f\ +'\x94\xc4\xa6\xa9\xbaG\xa8Ih\x9b\x1b\xa7Ams\ +~jD\xe3\xe4\x18\x09h\x9c\x9cK\xcd\xc0\x87T\x0a\ ++\x5c\x19>\x0c|\x00,N\xfa\x96t\x9dD`\xb5\ +\x00c\x84J\xa1\xf6ZW\xffc\xd7\xb4\x8c\xd9\xd6\xf9\ +\x828\xab\xbcL\xdf\xbc\xcf\x83\x97y\xb6}~\xa6\x85\ +\xbe\xecR\xb9\xff\x01\x03h1\x15\x1eh\xa2\xd8\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00)\x0e\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\ +\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\ +\xdf\x01\x14\x0f\x05\x02U\x82?v\x00\x00 \x00ID\ +ATx\xda\xed}y|\x15\xd5\xd9\xff\xf7\xcc\xdc5\ +7+Y\x81\x90\x10 \x10 $\xac\x02A\x14\xc1\xe2\ +\x82\x88\x80(\xb5\xb4J\xd1Z\x8a[\xfbC_\xdb\xbe\ +\xb6?m_K\xad\xaf\xd5\xba\xa0-\x15w\x0b\x88\x88\ +\x0a*\xa2\xaca\x07\xd9\x09;\x84\x04H\xc8Fn\x92\ +\xbb\xcd\xccy\xff\x98\xb9\xb3\xdd\xb9\xc9\xcd\xbd7\x98\x04\ +\xcf\xe7s?\x84\x99\xbb\xcc\xcc\xf3}\xbe\xcf\xf7<\xe7\ +\x9c\xe7\x10J)~hWoc~x\x04Ww#\ +\x1d\xf8\xba\x89\x04`\xf5+\xd2\xfb\xa1\xd2K\xd0\xbd\xe8\ +\x0f\x00\xf8\xfe\xaf\x93\x01\xc0\x02`\xe7N\xb5\x8d3\x9b\ +\xc8`\x00\xd9\x163\x06\x11B\xf2\x19\x06\xf1\x91\xfe\x88\ +\xcfG\xb7q<\xce\x01(\xbd\xdcH7\x1f?\xc7\xef\ +\xddr\xc0W\x0d\x80W\xbd\xfc\xa0\xf8\x01\x00W <\ +1\x00Ls\xa7\xdan\xb0Z\xc8d\x13\x8bB\x96%\ +EW\xf2\x22x\x9e\x96{}\xd8\xea\xf1\xd1\xe2\xf3U\ +\xc2\x86\xcf6{O\x01\xf0\x01\xe0T\x80\xa0?\x00 \ +z\xd7\xc3\x02`\x1f\x99a\x9fm1c2!\xe4\xda\ +P\xbd\xbbww\x16\x03sX\x00@\xbf\xde\xe9`\xac\ +i\xc62\x871\xa1\xf6\xfcw\xb8tY\xb4\xdb\xe6\xbd\ +^\xf9\xef\x10\x01\xf1\xd5\xf9*\xe1\x83\x8f\xd6y\xf6\x00\ +\xf0J\x80\xe8\x90` \xed\xc8\xdb\xd9\xb9Sm\x13\xec\ +V\xf23\x96%\x93\x9a3z\xef\xee,\xc6\x14\x98\x91\ +\xd1\xbd\x0f\xac\xe9\x93\xc0X\xd3`N\x1a\x0d\x10\x13@\ +$\x83\x13\x91@\x08!\xcaO\xc8\xe7L\x06\xe7\x01o\ +\xf5f\xf0\xce#\xf0\xd5l\xc2\xe5\x8b\xbb\xb1q\xaf\x17\ +\x87N\xf3\xa1\x82a\xb7\x01\x18~\x00@\x08\x867=\ +2\xc3>\xdbj!\xbfg\x18\xf40zSR\x1c\xc1\ +=\x13m\x88\xef>\x11\x96\xf4\x9bar\xf4\x95>m\ +\x91\x8dM\xfc\xb7\x22\x19Vml\x0d\x08\xfc\xefQ\x83\ +E\x07\x04\xf9\xf3\x8c\x05|\xfd!x\xce/\x83\xfb\xfc\ +G\xf8\xa2\xb86( |>ZR\xeb\xa4\x8b\x0e\x9e\ +\xe2V\xee<\xc2UH`\xe0\xda;+|_\x00`\ +\xee\x9a`M\xc9Le\x1ecY2\xcb\xc8\xf0\x09\x0e\ +\xd1\xe8I9Sa\xcb\x9c\xa5\xf3X\x15\xad\xeb\x8c\xa9\ +\x00!26\x90\xdf\xc7XT@\x01|\xd5\x9b\xe0:\ +\xfd*\xb6n)\xc6\x86\xbd\xbe\x80\x1b\x13\x048\x1b\x9a\ +\x84\xc5'\xcb\xf9\xf7\xd6\xec\xf0\x1d\x03\xe0Q\xe9\x05z\ +\xb5\x03\x80\x91\xe2\xfb\xcf\xed6\xf2W\x00\x09\xfa7L\ +\x18f\xc65\xa3\xc7\xc1\x9e3Oe,\x93\xc6\xe0\x84\ +\xb0\xc6\x1e\x1d\xc0\x06&\xd5\xf9P@\xd0<\x1b(\x0f\ +\x8dH!c#\x1a\x8f>\x8d\xc5\xcb\x0e\x19j\x08\x97\ +\x9b\xae8|\x86\xfb\xeb\xda\x9d\xbe\xa3\x00\xdcRxh\ +W\x8c@\xae\xe0\xef\xb0\xbf\x9an\x9f\xe0\xb0\x91\x7f\x19\ +y\xfc/n\xb7!c\xd83`cr\xb4\x86\xf0S\ +\xba\xde\xa0Fl\xa0\x0a\x09\xb2\xa1\x9a\x0d\x09\x91\xb1\x81\ +\xf2\xfd@\xe3\xd1\xa7qt\xc7\xbf\xb0\xec[O\xc0\xcd\ +;\x9b\xe8\xdb\x9b\xf7z\x17\xec?\xc9_\xd0\x01\xe1\xaa\ +\x00\x003m\x9c5\xb5W7\xe6\xdf,K&\x19\x1a\ +~\xf0\x93`c\xfb\x05\x1aD\x03\x82\xe6\xd8\xc0 $\ +\x18\xb1A+C\x02\x80\x90\xd9@\xfc]\x0b<\xe5\x1f\ +\xa2\xa1\xe4\x0fx\xfe\xddJ\xa3\xd0\xf0\xd6\xc2\x15\xeeg\ +\x014\xaaB\x83\xd0Y\x01@$\xba\x9fn\xb7\x917\ +\xf4t?}\x9c\x15\x03\xc6>\x09\xd6\xd1[\xf9\x00a\ +u\x1e\xcf\xe8\x8e\xc3\x90\x0d\x02B\xc2\x15\x12\x88\x86 \ +\x00\x00b\x01\xe7<\x88\xcb;\xa6\x06\x00\x81\xe7\xe9\xf9\ +3\x17\x84\xf9\x1f\xad\xf3|\x0d\xa0I\x12\x8b\xdf\x9b>\ +h+\x000wM\xb0\xa6d\xa53o\xea\xbd>\xa7\ ++\x8b\x1f\xff\xf8nXR\xc6)\x1eM\xb4}u\xc2\ +\x98[`\x83\x10C\xc2\x15\x16\x88z6\x00\x00\xcf\xf9\ +%8\xb4\xf6\xe1\x80\xd0\xe0l\xa2+7~\xe7\xfd\xdd\ +\xc1S|9\x00\xd7\xf7\xc5\x06m\x01\x00f\xeeT\xdb\ +\xf0\xd8\x18\xe6#}\xac\x9f?+\x05\x8e\xfe\x7f2\x88\ +\xcf&\xad\x07\x05e\x83PCB(\x02Q\xc5\x06m\ + \x105\xf7F\x18\xb8N\xbd\x84\xe5\xef\xfcQ\xd3\x8d\ +\x14\x048O\x96\xf3s?^\xefY\xa3\x0a\x0b|G\ +\x06\x00\xfb\xc8\x0c\xfb\x1c\xab\x85\xfcM\x9d\xc8)\xe8m\ +\xc2\xe4i\xf7\xc2\x9404\xb8H\x0bx\xd8j6`\ +t\x00\x09\xce\x06\x5c\xdd.\x08\xbe\x1a\xf0\x8d\xa7\xc17\ +\x1e\xd5\xb1\x886L0\x96\x14\x98\x93\xc7\x00``\xcd\ +\x98\xac\x03P\xf4\x04\xa2\x9f\x0d\x04o%.\xef\x98\x8e\ +\xe7\x16\xed\xd7|\xba\xbeAxw\xe1\x0a\xf7o\x01\xd4\ +K\x22\x91\xbbR!!\x9a\x000\xfdf\xa6\xfd\x19\xb3\ +\x99\xfcV}p\xd6M6\xf4\x1a\xf9$\x88)N~\ +\x10Z\xfa\x0d\x81\x0d\x82\x84\x04\xaen\x17\xbc\x97\xd6\xa0\ +\xfe\xd2a\xec.\xf1a\xc7\x11.\xa2\x1bH\x8a#\x18\ +[hF\xff\x01\x83`N\x1e\x0bk\xc6\x140\x96\x94\ +\xa8\x09D\xff\xdf\x9e\xf2\x0f\xb1\xec_s5l\xe0\xf1\ +\xd2c\xbbJ\xb8\xfb7\xef\xf3\x1d\x92\xd8\xe0\x8a\xf4\x14\ +\xa2\x05\x00\xd3\xfc{\xeco\xb1,\xf9\x89\xfa\xe0\xe3\xf7\ +\xf6@L\xafG\xb41Y\x1f\xf7C\x05\x81\x14\x12<\ +\xe7\x97\xa1\xfa\xcc\x17\xf8\xcf\xd7n\x5cnl{'\x19\ +3\xc8\x8c\xa2a\xdd`\xcf\x9a\x03k\xb7\xe9-\x87\x04\ +\x00`m\xcd\x0a\xc4`l \x08h8W\xc1?\xf9\ +\x9f\xb5\x9ee\x00\x1a\xaeDH ma\xfc\x04\x07\xc1\ +\xaf~~+\xcc\xc9c\x15\xe3i@ =\x08\xa2\x15\ +l\xc1\xe2\xa7\xaf\xea\x1b\x5c:\xb6\x04K\xbe\xf1\x5c\x11\ +\xa3\x07k\xc9\xf1\x04\xb3os 6\xff\x05\x98\x93\xaf\ +\x8fX \xfa\xb5\xc1\xc2\x17\x9f\xd2$\x92*k\x84\xe7\ +\x16\xafr\xbf\xa4\x0b\x09\xed\x12\x00\x86\xc6\x9f\xf7\x8b\x19\ +0\xc5\xe5\x07x:Q\xff\x9c\xeeA\x18\xb1\x81\xbb\xf4\ +-,Y\xb9\x1d\xa7/\xb4\xec\x04\xa9\x09\x04\xe3\x86Y\ +\x90\xd3\xab\x1fL\xf1\xf9R/\x03\xb0v\xffq\xb3\x9f\ +\xf3U}\x03\xc1S\x09\xcey\x18\x5c\xfdA8/\x16\ +c\xfd\x9e\xe6\x07\x81\x00``\x0e\x8b;\xa6\xdd\x03[\ +\xcf_\xca\xa3\x8e\xe1\x0aD_\xd57X\xf7\xfe\x0c\xac\ +\xdb\xe3S\xf7\x12>}m\xb9\xeb!\x00\x97\xa5\xeeb\ +\x9bt\x15I\xd4\x8d\xff\xc0T\xb0q\x83\x94.\x99N\ +\xd8\x05\xb2A`Hp\x97\xbe\x85\xa5\x9f\xeej\xd1\xf0\ +\xf3\xa6\xdb\x91\x90=\x15\xb6\xeew\xc1\x9c2!\xaa\x0f\ +F\xf0\x5c\x84\xa7|\x09\xdc\xe5K\xb1s\xcf\x11\x8dq\ +\xf4\xacp\xff=\xa3\x10;\xf0y0\xd6\x8c\x88\x04\xe2\ +\xf9\xaf\x0a\xf0\xear\x97Z\x1c~\xben\x8f\xef\xf7%\ +g\xf9\xb3\x12\x08\xa2.\x0eITi\x7f\xce\xed0%\ +\x14h\x94\xb6l\xf0\x10\xd8\xc0W\xbd\x0e\x1f.Y\xd9\ +\xac\xe1\xe7M\xb7#\xa9\xef\x83\xb0\xe7\xcc\x03c\xcd\xb8\ +b\xf4\xcf\xd7\x1f@\xd3\xe9W\xb0u\xfd2C0\xf8\ +\x81\x10\x97\xffw\x10Kj\xd8\x02\xb1zmoM\xf2\ +\xc8\xe3\xa5\xc7Vo\xf5\xde}\xac\x94?\xab\x12\x87\xf4\ +\xfb\x04\x00\xfb\xc8\x0c\xfb\xfdv\x1by]\x1f\xf3M\xf1\ +\x05\x9a~u\xa8 \xa0|#\xf6\xac}\x16\x9fo\xf1\ +\x06\xa5\xf7\xd93\x06!\xbe\xf0u\xb0\xf1\x83\xbe\xf7\xfc\ +9_\x7f\x00\xf5\xfb~\x89\xc5\xcb\x0e\x04\x0c\x02\xa5&\ +\x10\xdc\x7f\xefm\x88\xcd\x7f1l\x81\xe8\xdc?\x17\xcf\ +\xbe\xf0\x81\x1a\x04\xc7?/\xf6\xce\x137L\x98\ +\x8cd\xcf{8,\x85\x85\xd2\x0a\x01\x87v}\x8a\x82\ +\xecz\x98\x93\xafS\xb1\x01\x15\x9f\x0d\x04@\xd5;\x22\ +*\x90XR'bD\xf7]2\xa8\xac\x16\xd27\xbf\ +\x17\x9b\xb1\xbb\x84\xdb\x0ce\x00IhK\x00\x90\xb9S\ +m\xc3c\xec\xcc\xdb\xea\xb8?}\xfa\x0c\x10\xd6\xee\x8f\ +\x86\x22\x9ae \xe8A\x00\x80Rp\xf5\x07\xf1\xda\xa2\ +\x95\x01\xf1~`\x0e\x8b\x87\x9fZ\x81\x98\xdc\xdf\xa23\ +4\xc6\x9a\x8e\xae\x83\x9f\xc0\xc8^gQr\xf8 \x9a\ +<@\x93\x07\xd8\xb4e/\x86\xa7~\x09k\xe6O\xb4\ + \x00\x00\xcaI\xbaI\x1d\x12D\x10\xd8\xba\xdd\x89!\ +\xf1oc\xcb\xfeF\x00\x80\xcdJ\xf2{\xa41\xf5\x07\ +O\xf1\x87\xa1LB\xa5m\x05\x00\xf3\x0d\xc3,\xab\x08\ +A\xba\xff\xc0\xaf\xef+\x94\xe8L\x8a\x5c\xf2\xcd\x18\xb3\ +\x01\x01\xc09\x0f\xe2\xb57?\x0f0\xfe\x0dC\xcd\x98\ +\xf2\xeb#b\x0f\xa2\x935k\xc6d\x5c3\xe66\xd0\ +\x8awp\xe6\x82\xf8<\x8a\xbf\xabF\x1f\xf2O\xc4\xf7\ +\x9c\x01br\xa8@@\x83\x87\x04P\xc4\xf4z\x08]\ +\x9c\xff\x90Y%.\x86\x8c\xb0Y\xc8\x9e\xd3\x17\x84\x8b\ +\x88`\xaaYK\x22\x90yd\x86\xfdq\xbb\x8d,\xf0\ +\x1f\xb8\xad\xc8\x82\xc21?\xd5\x08\x1a\xed\x84\x0d\xe8\xba\ +|\x0c\xf8\x86\xa3x\xed\xcd\xd5\x01\xc6\x9f\xff\xd34$\ +\xdfx\x12WC\xd3\xf7\xef\xc7\x16\x9a1\xf1\xfe\xf5\x06\ +\xc9\xa3\xe0\x02Q\xf0\xd6`\xcd\xeb\x05\xf2dT\x9f\x8f\ +^\x5c\xb1\xc1s\xc7\xe9\x0b\xc2I)m\xdc\xea\xeea\ +s\x0c@\xa6\x8d\xb3\xa6\xa5'3K\x00\xd8\x00\xc0a\ +#\xb8\xfd\xf6\xdb\xa5\xd19A20\xd5R\x96\x8e\x0d\ +\x04w\x19^Y\xf4)\xea\x9b\xae^\xe3\x03@L\xaf\ +G1\xba\xbf\x0b\x1b7o\x93u\x01w\xfe]\xf4*\ +\xbc\x13\x84\x8d\xd5\x85\x04c\x81\xc8\xb01\xc8\xea3\x1c\ +\x87v|\x84&\x0f\xc0\xb2$6+\x83\xed\xb7\xf3\x08\ +\xf7\x15\x94\xd5JB\xb4\x00\xc0\xde2\xca\xb2\x80e\xc9\ +X\xff\x81G\xefN\x84)n\x80\xd4\xd5#:\x10\x08\ +RrG\x09\x09\x94wb\xc5\xf2\xa5(\xaf\x12\x02\x8d\ +?\xe1\xb8\xe6\xe6\xae\x86fI\x19\x8f1\x85\x0e\x1c\xde\ +\xbb\x0eM\x9e@\x10(\xf9\x92\xe0\x02\xd1\x14\xd3\x13\x05\ +9\x8d\xd8X\xbcS\x0c3f\x92\x9d\xd3\x95\x11\xf6\x9f\ +\xe4\xbfC\x18\xd3\xcb\x82\x01\x80\xcc\x9ed\xcb\x8d\x8fU\ +\x84_Z\x12\x83\x11c\xa6\xc8j^\x11)TE\xff\ +\x82*\x17@pp\xdb\xbb\xd8\xbc_\xdb\xd5\x9b?+\ +\x05\xc9\x13J\x14\xbd\xa0a\x0d]\xa2\xc5U\x0a\xae~\ +?\x04W)<\xe7\x97\x81\xfa\xea\xc0\xc6\xe6vh\x10\ +\x98\x93Fa\xf8\x88kpp\xfb\x12\x19\x04\xde\xb2w\ +\xd1{\xf0\x9d \xa6\x18\xf1\xe9\xb5 \x10-)\xe3\xd0\ +\x97y\x15\xbbJ\xc44\x80\xc3F\x06y|\xd8p\xa1\ +J\xa8Q\x89\xc2\xd0r\xfa\xc1\x80\x91\x14G\xfe\xa0>\ +p\xdf\x1d\xbd$jR.\x8d\x10VB)\xa7\xca\x02\ +\x0a\xa0T\x80\xfb\xdc\x7f\xb0r\x936\xc9s\xfd`3\ +\x92\xc6\xac\x93\x8c\xcf\x887\x06\xc0W\xb3\x1dM'_\ +\x00_\x7f\x00\x02\xd7\xd0\xec\x05\xdb{>\x08G\xde\xd3\ +\x1d\x1b\x04)\x13\xf0\xf0\x1fV\xe0\xe5g\xa6\xe2\xd2e\ +\x8a\xe2\x03>\xa4,\x1d\x8fkf\xed\x17S'T=\ +\xb2(\xb1'\xef\x963\x88\x14\x14\x99\x13w`\xe0\xde\ +\xc18t\x9a\x07\xcb\x12\xc7\x98A\xe6gw\x97p3\ +\xa1\xcc6\x0e)I\xc4\x04\xf1\xfe\xdef3\xb9\xc7\x7f\ + \xbf\x97I\x1c\xe4\xa1\xaa.'\x15@)\x0fJy\ +\xf18\x15d\x83\x0a\xee\xf3\xf8\xe7\xca\xa6\x80\xb4\xee\xc4\ +\x07w\x89C\xa7T\xdbum:\xf1<|5[[\ +4>\x00x\xca\xde\xef\x14\xe1\xc0\x0f\x82\xd4\x04\xd1\xd0\ ++7yP\xbba\x98\xfcl\xc4g\xabfr\x01\x10\ +\xbc\xe2\x0b\x00\xb1\xa6\xe2\xce9J\xaa\xd8n#\x85\xf7\ +L\xb4\xce\x05\x10/i6&\x5c\x000\x09\xb1\xe4Q\ +\xf5\x81\x9b\x8b\x12A\x05)\xe9DU\xb9\x07\xc9\xf0\x94\ +\xf22(@9|\xf5\xd5\xd7p\xeaD\xdf\xaf\xe6\xbf\ +\x08bN\xd6\x82&\x8c\x1c\x86\xc05\xc0[\xb1\xba\xd3\ +\x80`\xde\x7f\xbd!\xff\xff\xf9\x0f\x1a\xd0t\xec\xcf\xa2\ +\x91e \xe8@@9\x91\x0d\xa8\x00k\xb7\xe9\x98?\ ++E>\xdb-\x85\x99\xd3#\x8d\xc9\x02\xe0\x00`\x0e\ +%\xd5\x1f\x00\x80i\xe3\xac)fU\xc6/-\x89\x81\ +\xb9\xcb\x18\xc9\xbe\xbc\x08\x04\xca\x05e\x03\xcf\xc5\xcf\xb0\ +\xe7\x98\x96}\x9e\x98\x93\x07k\xd7\xa9\x81\xa0\xf1\xff\xcd\ +]n\xd5\x83\xf3Vv\x0e\x00\x00\xe2\x84\x95\xff\xfe\xed\ +c\xf2\xff\xff\xe7\x7f\xdf\x85\xaf\xa6X\xf3\x8c)\xa5A\ +\xd9 \xb1h\xad\xcc\x22,K\x1c\xb7\x16Y~\xd7\x1a\ +\x16\xd0\xbf\x81\xc9Le\xa6\xaag\xf4\xde~\xad%\xc0\ +S\x83\xb1\x01\xe5\x9cxou]@\x96/q\xd4\x97\ +J\x98P\xbf_\xf0\x81R\x1e\x9c\xb3\xa4u\x00\xa8\xf8\ +\xb2S\xf5\x0e\x1cy\x7f\xc2\x13\xf7+\x89\xb0\x0f_\x9f\ +\x0b\xc1S)>_\xc1+?\xb3@6\x10\xc0\x98\x13\ +\xf1\xc0\xec\xa9\xf2\xd1\xc48\xe6\xe6k\x0b\xcd#\x01\xc4\ +\x02\xb0\xb4\xc4\x02z\x00\xb0\x163\xe6\xa9\x0f\xa4d\x0e\ +\x97(\x89\x0b\x00\x01\xa5T\x8e\xfb\x80\x80\xf2\xe3_\xe3\ +b\x8d\x96\xd2\xef\xbco\x81\x12\x22\xe40\xa1\x05Bk\ +\x9b\xc05\x80\xaf?\xd0\xa9@\x904\xb6\x187\x0c\x15\ +g?\x1f-\xe5q\xfa\xeb[\x94g\xd3\x5cH\x80\x80\ +\xd8\x81/\xc8\x851\x00`h_\xd3|\x88#\xb6\xf6\ +\x96\xb2\xbdj\x00\x90Y7Y\xfb\xb0,\xc9W\xa7i\ +\xc1\xd8\x14C\xa9\xd0(S\xbf\x14\x12(\xe7\xc4\xf2u\ +Z\xd5\x7f\xffd\x1b,]\xefP\x89\x9a@ \xb4\x96\ +\xfe\xfd\xcdWS\xdc\xe9\xf2\x04\x13fo\x90\xe9\xfc\xcd\ +\xcf\xddp\x95\xfe[\x01\x81&$\x04\x0a\xc4i\xf7<\ +\xa1\x11\x84\x13\xaf1\xdf\x10\x0a\x0bh\x00\xd0%\x9e\x99\ +\xa2>9\xac\xbf8\xd8#\xfeX \x1a\xd5lPW\ +\xb6\x1e\x8dn\xad\xf0\xcb\xba\xfe\x03\x95\x87\x0b\x86@\xe0\ +\x9c\x87\xc3zX\x9e\xca\xaf:\x1d\x00\xd8\xf8A\x98\xfb\ +\xd8\x9f\xe4\xff/{\xffe\x08\xde*\xc5\xf8\xfe\x90`\ +\xc0\x06\xf6\x9e\x0f`\xfa8\xab\xfc\xff\xbcl\xd3/$\ +-\xd0,\x0b0:\xfa\x97\xc5\x9f\xc3F\xc4\x95<\x92\ +\x015 \xd0\xc4&\xb1-_\xaf\xf5\xfe\xf9\xf7\xc4\x82\ +\x8d\xed\xaf\xea\x226\x0f\x84\xd63\xc0V\xdd\xf7v\x8e\ +f\xef\xf5(\xe6M\xb7\xcb\xa1\xa0\xe1\xd0|M\xcc\x0f\ +d\x03E \x0e\x18\xf3\x1b5\x0b\x14L\xbc\xc6|\xbd\ +\xd4#\x08\xca\x022\x00\xa6\x8c\xb5$\xab\xe9\x7fh?\ +\x93\xf6\x87\xa9\xff\xc7x-\x1b@\x80\xaf\xa6\x18\x95\xb5\ +ZC8\x06\xfeM\xbaP\xce\x00\x04\x0a\x10\x04Wi\ +\x04 P\xab\xe5\xce\xd3\xba\x8e\xfbF\x0e\x05\x7f\xfd\xe7\ +n\x15K\x0a\xda\x9c\x8bN \xda{>\xa0\xd1\x02\xbd\ +\xbb\xb3\xf7\x00\x88\x93z\x04ls\x00`\xb23\xd8\xa9\ +\xea\x13\xfd\xb3Y\x9d\xf8\x13\x8c\xd9@\xf0\xa2x\xaf6\ +\x8eO\x19k\x85\xa5\x8b\xaa\x9a[3@\xe0\xdd\x17\x22\ +\x03\x80\xda#:\x09\x10\xd8\xf8A\x983K\x99\xe6^\ +\xff\xdd\xfd\xaa\xb8\xaf\x13\xcf\xba\x90p\xc7\xf4\x9f\xc9\x9f\ +\x8b\x8fe\x8a\x0az\xb3}\x01\xc4\x04\xcb\x0b\xc8\x000\ +\xb1\x18\xab>\x91\x98\xdc\x0d\x14\x92\xc7\x0b\xde\xa0l@\ +9'\xb6\x1e\xd4\xe6\xfb\x07\x0e\x9f\xaa\xbdX\x0d\x10\x04\ +\xdd\x8b\x8b\x00\x00[\xb5a\xa9\x13\x01!\xaep\xa1\xec\ +\xcd\xff\xfba#x\xe7!]\xdc\xd7=C\x09\x041\ +}\x7f'\xb3\x07\x00\x0c\xcb3\xcf\x92\xc4\xa0\xd5(/\ +\xe0?\xc02\x0c\x0a\xd4i[bNV<\x1e4(\ +\x1b\xb8j\xbe\xd3|ar<\x81-\xeb>\xb1g \ +\xc7'!\xa8\xa1\xf8\x86\xe3\xe1\x03\xa0v{\x80 \xed\ +,@`\xac\x19\x98:\xf3a\x85\x05\xf6\xfeR6\xb6\ +\xa2\x9d\xd4\x19YE \xce\x9e\xa6\x14\xddHN 7\ +I\x00\xb0\xc1`\xec\x87\x01\x80IE\x96.,K\x06\ +\xfa\x0f\xf6\xe9a\xd2\xf5\xd9%\x10h\xa7\ +\x84\x13\x968\xa6\x8d\xb3\xde\xa9\x0a\x03\x8c\x1e\x00$3\ +\x8d\x19\xa2>\x98\x96\xc4\x04&n\xa8`\x18\x12v\x1c\ +\xd6\x02\xc0\xdeuR`\xa2\xc7ol\xbd\x88\x94Q\x8c\ +\x88\xc2\x00\xa5<\xa8\xe0k\x06\x08\x1d\x97\x0d\xd4,\xd0\ +p\xf8I]\x18\xe5\x0cC\x02\x1b\xdb\x0fc\x06\x99\xe5\ +\xcf\xa5'\x91\xebT,\x10\x00\x00\xc6j&\x83\xd5\x07\ +s{\x98\xb5W\xa1\x13o\xfe\x90 \xb8\xcf\x07\xf4\xfd\ +m=f\x05f\xfch \x10\xfc\x86\xe2\x1a\x8eE\xf4\ +\x808\xe7a\xc3\xf1\x85\xe6\xc2N\x87\xea\x16\xe6\xcc\x93\ +c\xfa\xa2\x8f\xcf\xebb>\xe4\x90\xa0\x17\x88\xd7\x8d\xbb\ +Q-\x06GwMa\xd2\x8d\xc2\x80\xbf\xc4z\x96\xe6\ +\xa0=\xcb\xf8jt \xa8\xab\xd2v\xe1F\x0d4\xc9\ +#~\x9a\xcf \x10\x08\xfe\xb0@\xb9\xc6\xc8\x00P\xbb\ +C\xf3\xfd\x01C\xd4\x1d\x5c\x1f0\xd6\x0c\xdc{{*\ +\x00\xa0\xd6I\xd1x\xe2oAzVZ6\xb0e\xfd\ +\x5c\xf3=\xa3\xf3\xcd?\x92\x92B\x165\x0b0\x00\x18\ +\x8b\x19\x9a\x05w\x84u\x04\xbf\x22*\x00\x82\xf8\xc3g\ +.\x0a\xfa\x1f1N\xf4\x18\xe5\xff\xa5\x1bPW\x09\x0b\ +\xa7\x09\x5c\x83\xc2\x02\xba\xd1\xc6\xa0\xc3\xce\x1dL\x1f\xc4\ +\x0f\xfe\xa7\xfcw\xf9\xb1/\xc4P\xac\x9e2\xa6c\x03\ +\x000\xc5\xf6\xd5\x87\x81\xb1A\x01@\x08\x91]>+\ +=\xc4MD\xa8\x80s\x15\xdaL\x9e\xb5\xcb\x88\x80D\ +O\xd0\x81 \xc9\x00L\x14V\xffp\xb5\xdbT\xdf\xcf\ +!\xd8\xb0sG\xd5\x07\xe6\x94\x09\xb2\x18|\xe7\x0b7\ +\xa8\xa7B\xd6d\x81!A\x11\x88E\xc3\xba)\x82\xd2\ +N\x06IB\xd0\xa2\x0e\x03\x0c\x00\x86a\x90)\xc7\x1c\ +k\xe8\x135\xab\xea\xb4\x0f\xce\xdce\xb4\x91\x8f\x82R\ +_P 0\xb6\xc8\xd7\xfeq\xce\x92f\xc3\x8e\x7f\xd8\ +\xb9#\xeb\x83I\x13\xe4N\x1a\x5c\xa5o+\xc6V\xcf\ +\x1b\xd4\x85\x04{\xd6lMo`\xe4\x00S\xbeJ\x07\ +\x10\xb5\x06\x80z\x0c \xd4\xa6_\x08\xc9:\x9a\x9b\xb0\ +i<\x22\x18\x8d\xc5\x9f\x5c\xdd\x8e\x90\xc2NG\xd6\x07\ +\xb1\xfd\x9f\x91\xffvW\xacQ\xf22\xfe\xfb2`\x03\ +K\xfam\xd0\x8a{v\x9c\x94\x10\x92\x97n3\xb3'\ +\xd9\x0a\xd5o\xea\x91\xce\x86}\x91-\xcf\xd8\x0d\xd4\x07\ +\xc4\x92\x1a\xf1\xc3\xe1\xdd\x15\x10\xdc\xe7C\x08;\x1dW\ +\x1f\x98S&\xc8\xbd\x81O7{u!/8\x1b\xdc\ +V\xa4,0\x89\x8b!\xbd\xf5:\x80\xb1\x98\x91\x18\xd6\ +C\xf7'%\xc2\x93n\xb2\xa1\xa2\x11\x02\xe4\xee`\x0b\ +lc8\x97\xb1\x03\xe9\x83\xbbn\x14\x8bK\x9c,\xe7\ +\xc15\x1eS\x89r\xaf\x06\x04j\x81\xd8?7U\xaf\ +\x03\xacRB\x88\x05\x00F\x10\xa2\xb3u\xdc\xad\xa3-\ +a\x01\x81\xb1\xa4D\x07\x00u\xbbZ\x1evnfZ\ +ZG\xd0\x07q\x19c\x94\xfb\xad\xd9\xa2\x05\xac*$\ +\xa8\x05\xa29i\xb4F\x07\xe4e\xb3\xd9\x1a\x00p\xfc\ +\xf7\xbbk\x88Xa+\xf2\xc67\x1c\x0f\x1chj\x0d\ +\x10:\x80>\xb0u\xbfK\x95\x02\xdf\xae\xba'!(\ +\x1b(U\xd8\xc5\xd6-\x85\xc9\x94B\x00\x0b\x80i\x17\ +\x1bG\xb2\x8e\x9c\x88\xbf\xc3W\xb7;\xa4\xf9\x07\x1dY\ +\x1f\x98Sn\x90\xff\xde{\xf0\x8cnf\x901\x1bX\ +\xd2n\xd6\x03`\x88\xaa+H\xda\x07\x00l]\xa3\xf2\ +=\xbe\xba\xddA\xbaDB\xa7\xd0\x07\x8c5C\x16\x82\ +uNA#\x04\x15&\x10\x02\x05\xa2:\xb5l%\xe9\ +R\x080\xb5\x1b\x06`\xa2T\x11\x84o8\x8a\x16\xe7\ +\x1ftp}0n\x98\xa8\xb5v\x1c\xe1\x94k\xd0%\ +\x80\xf4!\xe1\xe6\x91\x8a>3\x9bI\x86J\x030\x8c\ +\x89\xd5\xae$\xd5\x0f\xee\x5c\x11\x06\x88\xc9\x89\xca\xf7p\ +\xf5{[\x9c\x7f\xd0\xb9\xf4\x81*\xabj\xc8\x06\x81\xcd\ +\xc4\xc8\xab\x86X\x00\x849Z\xcakj\x97\xeb\xd3\xbb\ +A\xbdV7`\xb4z\xab7\x22j\x8bZ\x08ha\ +\xfeAG\xd7\x079\xbd\x14Q\xe7\xa9\xf8B\xb9~C\ +6\x10\x81\xd0;S\xc9\xed\xd8m\xa4\xa7\xdf\xfb\x01\x10\ +f\xe3^_]8\x17\xd2\xec\x80Q\x18\x22P)\x97\ +\x12~\xa3\x5c\xa3\x98\x102\x18v\x0e\x15\x08\xed]\x1f\ +\xe8{M\xe2\xba\x0c\x1d\xe3i\xd8\x80\xc2\x91\x98\x1d@\ +\x042\x00\xf4\x5cq\xf6B\xe8S\xb5\xd5s\xcf\xe4\xae\ +X\xd8 \xe8\x1d\x95\x07\xc4]\xde\xab\x1d\x22\x15|\xa1\ +\xcfO\xech\xfa@\xdd\x0b\xd0\x5c\x1f\x17x\x9f:\xff\ +\xf5\xbfL\x00\x04\x9f\x8fn3\x9b\xc9(\x00p\xfbB\ +\xff\xfd.\x09\x0c.]V\x00\xc37\x1e\x0f\xbb\x80\x83\ +)\xbe\x00\xdc\xe5\xfd\x91\x0b\xc1\xc6\xe3\x00&J7/\ +\xc3\x02T\x1a\x00#\xc4\xff0\x18\xd5\x83\xd2n;\xa3\ +\x00\x01\xa0TU\xdcRZ\xff\xc85\x1cS\xd6\xef\xeb\ +7\xb3\x0ar\x8cr\xce\xb0\x17\xc1X\xd3n\x0aR\x22\ +W\x02\x18\x11\xaf\x13\x94J;\xa9\xa8\x98\x80\x18\x96\x80\ +\x90\x0b7\x9a \x97\xf9P=D\xd7Y\xb0\xf6\xec\x16\ +/\xacG:\x8b\xa3\xa5\xaa]/*V\xc1\x92~k\ +\xd8\x00\x88\x8a\x0e\xa8)\x86\xe0\xb9(\xd7\x1a A\xf2\ +\x5c\x94o\x04\xd7p\x02\x1d\xa1\xb9\xcf\xbc\x8e\x84kV\ +\x04\x82@\xd6(\x0a\x99S\xca\x80@P\xd5\xe5l^\ +\x97\x98\x00P\x8e\xc7V\xb3\x19r\xce\xd0\xd5\xe4D\xac\ +\xbd\xe5\x0b\xcbL\xd5\xf6\x22}\xce\xf0\x8b>\x99\xe2\xf3\ +\xa3\xd3\x15tW\x80wW\xa035\x81k\x80\xeb\xec\ +\x1b\x88\x1d\xf4JP\x06\x90]X\xcd\x06\x0c\x8b\x96\xe6\ +\x5c2\x00\x04\x8f\x8f\x9eU\x1f,\xab\x0c-n\xa5$\ +k7\xf8\xfe\xbc\xd8\x1b\xd1\x8dZ\x92\x8b\xf0C3n\ +\xf6\xec\x07E\x93{\xb4\xfb\x10\xca\x13b\x03V[\x0b\ +\x81\x021\x18\x00\xbc>h\x00Pr6\xb4\xc5\x1a\xac\ +=\x1b6\xd5\xfc\xd1\xe3e<\xa8\xb7:|!\x187\ +\xe8\x07K\x1bi\x80tE\x03\x9c>uT\xd5\x15\xef\ +\xa9\x8a\x06\xbe\xc0I\xb8\x86\xc5%\x0c\x00\xb0x\x95{\ +C\xb8=\x81\x019Z\x91\xe1:\xf7n\xd87j<\ +\xa3\xe8\xean1}\xe6#n\xc8\xdbA\x1c\xb0\x87&\ +\xbek\xd9@\xd1\x08\xf5u\x17\x9b\x05\x00\x05\xc0\xf1<\ +\x95\x07\xf8\xdd>Q\x08\x86\xd2\xfaei'\x90\xb8/\ +\x86_\xbd\x83\xb1\xa6Ee`\xa834S\xdc\x00$\ +\x15}\x8d\x98>\xf35\xc7\xd7\xef\x16\xc3l\x82\x83@\ +=\xb7R\x03\x04]H8q\x8ek\x11\x00\xbc\xd7\x87\ +-\xea\x13\xe5\x17B+\xdc\x90\x99\xa9\xcd\xe2\xbd\xb5\xda\ +\x1d\x99\x0eH\x9dxU\x1b\x9e1\xc5\x226\xef\xff#\ +\xb1hm\x80\xea\x17<\x17\xe5ixC\xfb\x99\xb4\x13\ +le\x8f7\x08\x09-\x88@\x00\xe0\x9dMt\xb3\xfa\ +\x84\xbe\xd0S\xd0/\xb0\xa4if\x12\xd7:)\xdc\xe7\ +\xde\x8b\x00\x007^\xb5\xc6\xb7u\xbf\x13I\xd7m\x17\ +\xe7\xf4\x1bt\xdf|U\xeb4]p\xed<@o\xc0\ +g\xfc!\xc1_P\x12\x00x\x9e6AUXZ\xce\ +z\x1c-\xe55:\xe0h)\x0f\xca\x87\xb6hC=\ +\xff\x1c\x00\xce\x1d\x0c_\x07\x10\x93\x03\x96\xb4\xab\x8b\x05\ +l\xdd\xa6!\xe9\xda\x0d\x88\x1d\xf8\xbc6%\xae\xa3w\ +w\xf9R\xf9TF\xd7,\xc3)`F!A]\xa4\ +\xbb\xc9\x833J|\x00\x95\x01\xb0\xe5\x80\xafZ\xad\x03\ +\x00\xa0\xf2\xc2\xa9\x90n\xa0G\xb66\x8d\xfb\xce\x17\xee\ +\x88\xd2\xc2W\x03\x0b0\xa6XX\xbbNA\xd2\x98u\ +p\xf4\xff\x0b\x18[\xb7\x16\xd3\xca\xce\x8b\xc5\x81y\x13\ +\xa3\xc5\xbb*6\xf0V\xae\xd1\xe6Ix\xda\x08\xa5\xa8\ +4U\xe7=}\xce&\xbaT\xfdf\xfd\xca\xdf\xa0^\ +\xcb:\xa4UAJk:\xf5bDI!\xd6\x96\xde\ +)\x0d\xcf\xda\xd2\xe1\xc8}\x1c\x89Ek\x11\xdb\xffY\ +iRlh\xe3\x0bK\xd7\xbaU=\xa61\x01c\x19\ +Fl 4i\x9d\xd8\xd9DOC\xb5\xdd\x8c:\x95\ +\xc7\x95V\x08\x9f\xe9u@\xc8a\xa0\xc0\xaa\xf9\xff\xbf\ +\x96\x1c\x8a('`\xcd\xfcI\xe7\xf2\xf6\x8c\xc9\x88\x1f\ +\xb2\x08\x09\xa3\xbf\x825\xf3\xa7\xe2f\xda~\x0f\x0ea\ +\xfe\x81\xfb\xfcRY\x00\x8e\x19d\x96\xcey\x03V\x05\ +i\xd8\x00\x02\xbcu{5\xd7\xd2\xe8\xa2\xfe\x0d&x\ +5\x03\x00\x00\xff\xc5V\xef\x09}\x188w6\xb4\xf4\ +.\x1b\xdb_\xd3%\xacuR4\x94\xfc!\xa20\x10\ +\x8d!\xe2\xef\xb3YR\xc6\xc1\x91\xf7G$^\xbb\x11\ +\x8e\xbc\xa7aJ\x1c\xaed\xe9\x82\x94\xcd\x0b6\xff\xc0\ +u\xea%\xf9\xadEC3T\x9f\xf1S~ \x1b\x80\ +\x0a\xf8v\xb76;[vI8\x09\xd5\xde\x02j\x00\ +P)\x0c,S\x7f`\xed\xce\xd0\xd3\xbb\xfa0\x101\ +\x0bt\x9d\xda\xa1\x0cNL\x0eX\xd3oA\xec\x80g\ +\x91T\xf45b\x07,\x805\xed\x96\xd0\x87\x9dU\xc9\ +\x1b=\x10\x16\x7f\xa4d\x00\xad\x19\x93\x95E 2\x10\ +\x02\xd9@\xf0\xd5a\xefqm\x18\xdf]\xc2\x1d\x83\xb8\ +\xaf\x801\x00\xf6\x1c\xe54\x12\xfe\xd2e\x1a\xf2\x22\x90\ +\xf4\xccA\x01]\xc2HX\xc0\x9a1\xa5\xdd\xb3\x00\xeb\ +\xe8\x0d{\xd6\xbd\x88\x1f\xb2\x08\x89\xa3V#&\xf7I\ +\x98\x93\xaf\x97\xae;:\xd3\xd2\x5cg\x16\xca\xf4?0\ +\x87\x15gcQ\xc1\x188*\x10x/\xad\xd5\xc7\xff\ +\xc3\x92\xf1\xbdF!\x00\x00\xf8\x9dG\xb8J\x97\x9b~\ +\xac>\xf8\xed\xae\xd0\x93;wM\x88\x09`\x81p{\ +\x04\xc4\xe4hw,\xc0:r`\xed:UL\xd6\x8c\ +\xfc\x04\xf1\x85\xaf\xc3\xd6\xe3g\xe2\xbcF\x83\xfa\x07-\ +\xceOT\xd2<\x086-\xed\xe0F\xa5\xe4\xcb\xad\xd7\ +e\xa8*\x83AY\x17h\x10\x12\x5c\x97\xb4\xd5T\xeb\ +\x9c\xc2!\x88\xfb\x09\xf8\x19 \x00\x00\x02\x00o\xd5e\ +\xe1\x03\xbd\x18\x14\xbc\x95ak\x81S\x9b\x1e\xea\xb0,\ +`J(\x80\xb5\xeb\x148\xfa=\x85\x84\x11\xcb\x10W\ +\xf0*\xec=\x1f\x80)i\x942-\xae\x99\xfa\x07\xe1\ +\xccOT\xb3\x01\xe7<\x8c\x15\x1b\x00n\x09\x00\x82:\x11\xa4n\xdc\x07k<\xeb|\ +>\xaa)\xe1\xbdy\xd7\xf9\x90\x1f\xda\xed\xe33\x03\xf2\ +\x02\xe1f\x07\x89\xc9q\xc5\xf2\x02\xc4\xe4\x80%\xb9\x08\ +\xb6\x1e\xb3\x10;\xf09$\x8e^\x8d\xd8\x01\x0b`\xef\ +\xf9 \xcc]F\xeb\x80\xd8\xfc\xb2\xf7\xe6\xca\xe2\x18&\ +z\x82\x84\x85\xfa\xdd3\xe5\xb7O\x1ci\x011\xc5)\ +\xdf%\x17\x8bT2\x7f\xb2\x11\xeb\xf7\x07\x14\xf0\xd8\xbc\ +\xcf\xb7\x07\x80K\xd5\x0b0\x04\x00\x0f\xc0]\xeb\xa4\x8b\ +\xd4\x07\xb7\x1e\xf4\x85\xcc\x02\x8c%\x0dS\xc6j\xbb\x85\ +\xaf\xbd\xbe(lA\xe8\xdf\xaf\xa0-\xfa\xe4\x96\xb4\x89\ +\x88\xe9\xf3\x1b\xc4\x15\xbc\x8a\x84\x11\xcb\x10\xd3\xf7\xbfa\ +\xcb\xbc\xa7\x15\x13TB\x13r\xad\x0a\x0b\x12\x10|\xd5\ +\x9b\xf0\xfc\xfb\xf5\xf2\xd7\xf6\x1dr\x17\x94\xa9jT\xf9\ +M\x83\x90Psr\xa9\x9e\xfewI\xf4\xef\x86\xb2\xcf\ +\xa0!\x00(\x00\xdf\xe2U\xee\xb7y\x9ej\xdc\xfe\xd3\ +o\xcbB~\xb8y\xfd\x0b\x02\x04\xe1\xb6\xe53\xc33\ +T\x94\xd6\x0d\x88\xf1[E\xe7C\x16#\xa6\xf7c\xb0\ +\xa4\xde\x18\xe1(d\xeb\xca\xe2\x84\x1a\x16\xf6}\xf9\xa0\ +|z\xfa8+\x18[\xa6X\x9e\x07\x82\xce\xebul\ +@\x05\xac\xda\xa2\xa5\xff\xb2Ja\xbb\xe4\xfd\xfe=\x85\ +(\x10|\xd3(\x1e\x80\xbb\xfa2}1\xad\x0byN\ +=>\xc07\x1c\x11\x8b@\x87\x22\x08'\xa6h6K\ +\x5c\xbd\xd5\x8b\xfc\x81\xf3\x10W\xf0jX\xd4\xec\xad\xde\ +\x12\xb2g\x13k:\x18k\x868\xc4\x1c\x93\x03S|\ +\xc1\x15\xd0\x12\xc6\x13I\xc5\x9b\xf0\xff\xcd\xc0\xbf\x9f\x93\ +8Q\x95\x97&\x982\x0a\x10\x00\xb8\xce.\x96c?\ +\x00\xf4\x1b2U\ +\xe8\xbd\x7f\x81\xce\xfb\x0d\xd7}\xb7\x16\x00\x14\x005\x99\ +\xc8\x8e\xccTv\x06!\xb0\xa8Eanz\x0db\xe3\ +[\x07\x82\x91\x05\x898w\xbeZ3su\xdb!\x0e\ +\xae\xf2\xe5\xc8\xe9\x9d\xd7)C\x82\xfb\xdc{x\xf5\x1f\ +\xcf\xa1\xbcJ\xd0\x19\xfffhWzR\x95\xc7\x0b\xda\ +\x90@\x18\x10\x00k\xbf\xf8\x0fN_\xd0f\xfd\x0e\x9f\ +\xe6\x17\xed?\xc1o\x07p\xa99\xefo-\x00d\x10\ +\x94V\x08uY\xe9LEb\x1c\xa3Y\x0b\xbe\xf78\ +\x87\xd1\x038q\xcb\x98P{\x07\x8c\x05\xf9\xb9\x09\x10\ +|u\x911\x0e\xcc\x00\x00\x08\x8fIDAT\x9aE\ +\xa9e\x97\x04lX\xff5Ft\xdf\x05k\xfa\xa4N\ +c\xfc\xfa]3\xb1`\xe1\x06\xb8U\x13\xad~33\ +\x06\xd6\xf4\x89\x92aU\x00\x90\xfe\x96=^\x17\x12\xaa\ +\x8e\xbf\xa7\x94\x8d\x95\x9a\xb3\x89\x1e\xf9`\x8d\xe7e\xc9\ +\xf8Ac\x7f\xb8\x00\x90C\xc1\xc1S\xfcI\xbd\x1e\x00\ +\x80=G\x1a1\x22\xaf\xf5 \xc8\xee\x91\x81\xac\xa4j\ +\x9c8\xc7kBB\xf1\x9eJ\xb8J\xdfC\xcf\x1e\xa9\ +a\x17\x9fh/\x94\xff\xe5;\xf7b\xe9Zet\xcf\ +a#xtf\x0a,)\xe3\xa45\xdd\x04D62\ +\xd5\xa5\x0b\xfd\x95\x0eD\x06\xe0.\xef\xc1K\x1f\x94\x05\ +t\xfbVm\xf1>SSO\xcfJ\x00\xb8,u\xfd\ +h4\x01\xa0\xd6\x03;\x0asM}\xadf\x22W.\ +\xe2\x84\xf0@\x00\x00\x09I\xe9\x18\x91\xc7\xa1\xac\xc2\xa5\ +\x09\x09e\x97\x04l\xdcT\x8c\xc1\xf1K`\xe92\x12\ +\x8c%\xb9C\x09\xbd\x86C\x8f\xe3\xd9\x17\xdeG\xd9%\ +\x05\xd99]Y\xdc7\xad\x0fL\x09\x83\xa5\xc7)y\ +9\xa5\x8a\xc6#P\x8e\x13%$\x08\x9e\x0bx\xf9\xad\ +\xad\xf0\xe9\xfc\xfad\xb9\xf0a\xf1~\xdf\xb7\x92\xf1k\ +\xa4\xd4o\xb3+}#)\x13\xcbB\xac<\xdd\xe5\xb1\ +\xbb\xed_[-\xa4\xaf\xfa\xa4\xcd\x0c<43-\xa4\ +J#F\xad\xe4\xc8~\xac\xdc\xe41<\xf7\xeb\xbb\xed\ +H(|\xb9\xdd3B\xd3\xc9\x17\xf1\xfa\x9b\x9f\xa0\xd6\ +\xa9u\xc0\x1b\x86\x9a1\xf2\x9a\x11\xca\xd4pb\xd2\x0e\ +\xf0\x00Rq\x07\xa8J\xbc\x88\xe7(\xef\xc2\xd2\xe5\x9f\ +\xe3d9\x1f@\xfd\xaf-w\xcd\x07p\x1e\xc0\xc5\x96\ +b\x7f4\x00\x00\x88\x83I1y\xd9l\xce\xcd\xa3,\ +\xcb\xac\x16\x92\x1bM\x10\x08\xdeJ|\xfam\x99\xa6\x0c\ +\x8d\x1e\x08\xb1}\x1e\x09\xbb,M[y\xbc\xeb\xdc\xbb\ +\xf8h\xf9\xa78^\xa6\xbdn\x87\x8d\xe0\x97Sc\xc4\ +A0\xc2hF\x00\xc5\x7f,\x01\xb99\x11\x08\xca\xd0\ +\xef\x92\xa5\xcb\x02\x8c\xcf\xf3\xb4\xe9\xcd\xcf\xdd\xbf\xa8\xa9\ +\xa7'\x01\x5c\x90b\x7f\x13B\xd8\x92-\x1a\x85\xa2\xcd\ +\x00\x1c}2\xd9^\xb7\x8d\xb1\xfc\xc7\x08\x04sn\xb7\ +#69\xfc\x120|\xc3\x11,\xfd\xa6)`\x8c\xdb\ +\xdfr3YL\x9f\xbe\xef\ +8\xb7S\xf2\xfeK-\x09\xbfh\x03\x80H \x88\xed\ +\x93\xc9\xf64\x02\x01\x00\xdcw\xab\x0d\xe9\x99\x91U\x00\ +\xa9(;\x80U\xc5\x9e\x80\x9dJ\xd4m\xd4@\x13\xc6\ +]W\x04K\xc6m\xad\x1an\x0e\xd7\xe8\xees\xef`\ +\xe3\xd6\x12M2G\xdd\xfag\xb3\x98<>\x1b\xc4\x9a\ +\xae\x8c\xe5\xabi\xdd\x08\x04\xf2{\x14\x10\xec\xde\xf6\x85\ +\xa1\xf1\x0f\x9e\xe4^_\xb5\xc5\xbb\x5c\xf2|\x7f\xda\xd7\ +\xd7\x12\xf5G\x13\x00!\x83`t\xbe\x19\xd7\x15\x0d\x8e\ +\xf8\xc7\xf8\x86#\xf8l\xb3+hh\xf0\xb7\xa48\x82\ +\xc9\xd7Z\x91\xd1\xbd\x0f\xac\xe9\x93\xc0:r\xc3f\x08\ +\xea\xad\x86\xafv;<\x15\xabp\xb1\xfc\x04>\xdb\xec\ +1\xf4t\x7f\x1b\xda\xd7\x84\xf1\xc3m\xe2\xec)\xa2\xf3\ +x\x90@O\x0f\xc2\x06\x94k\xc4\x86\x8d\x9b\x02\xc6\xf8\ +\x01\xa0\xbc\x92\xff\xf2\xbd\xaf'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08; _e\xb1Y\x00\x00\x04\x10IDA\ +Tx\xda\xed\x9b]h\x8fQ\x1c\xc7?\xff\xf9\xc7\xca\ +\xcb4\xe6\xe5B,/C\x0a\x99&\xa6p\xa1\x91L\ +.0n\xe6-I\x92\x1b\x5c(/\x11.(\xf2\xae\ +d\x85\x94\x91Z^6\xae\x94\x96f.\x14\xd3,a\ +.\x86\xcd\x92\xec\xcf^\xcc\xc5\xf3{\xe6\xec\xe9?\xf3\ +\x7f\x9e\xf3\xd89\xfb\xfb\xd5\xe9\x7f\x9e\xb7\xdf\xff\xfc\xbe\ +\xcf\xef\xfc\xde\xcey\x22\x84O)\xc0\x08 S~\xfb\ +\x02\x03\x81T\xa0\x05h\x03\x1a\xa5_\x07\xd4\xcao\x1b\ +\x96R\x1aP\x08\x5c\x02^\x02?\x80\xf6\x04[+\xf0\ +\x06\xb8\x0c\xe4\x03}l\x10<\x038\x0d\xc4|\x08\xdc\ +]{\x01\xcc5Y\xf8\x89\xc0\xfb\x10\x04W[\x0b\xb0\ +\xc1D\xe1S\x81\xaa\x90\x85w[\x9bL\x09\xa3\xa8\xd0\ +3\xc8\x18\xb0\x17\xc8\x01\xd6\x00\xaf4\x83P'F\xd4\ +\x18\xba\xee\x19\xe0:\xcf\xf5\x91b\xe5u\x82\xb0\xc5$\ +\x00\x9ey\xde~j\x9c{\xaeh\x06\xe0\xb6N\x1f\x1d\ +\x94\xfa)\xfdh\x17.\xab\x9ff\xd0'\x98\x04@\x8a\ +\x07\x80\xb5\x9e\xeb\xa3\x81<\xcd\x00\x0c\xd2\xc5(\x1a\xc2\ +\x948&\xf3\xbe\x04\xc8\x02\xf6\x01\xfd\xe9\xc5\xa4\xdb\xca\ +\xffM\xfb`\xd2\x14\xb0\x9a\x92\x1e\x00\x1d6\xe0\x1a0\ +\xcc\xe7\xb3\xebmIt\xc2\xa2\xef=m\x03\xba\xd3\x80\ +\xe1\xc0<`\x120Dry\xd34\xb0@\xc6\xe8\xa5\ +O@5p\x07\xa8O\x94i\x96\x84\xb8-=`\xe1\ +\x13\xd5\x80\x93\xdd\xdc\xdb\x0c\x1cO\xc4\x15o\x0e\xa0\x9a\ +&\x02\xe0\xb6G\x7f\x03\xc2V\xc3\x05\x0f\x02@;p\ +\xeaO\xc2O\xf3Y\xbe\xb2\x09\x80V`JWq\xc0\ +\xc1\x10\x8c\x9ci\xd4\x07\xd8\x16\x0f\x80\xf1\xc0\xa2$q\ +\xbd\xcb\xd5\x17\xed\x02\xb0\x04\x88X$\xc4W\xa5\x9fh\ +u(\x1dX\xe8\x05`\x81eo\xb1F\xe9\x8f\xf1\xf1\ +|\xbe\x0a@\x04\x98e\x19\x00\xa5J\xa1e\xba\x8f\xe7\ +\xb3\xd5\x83\xb1\x96X~\xb7}\x01\x86*o\xd2\x0f\x8f\ +f\xb5t\xb7\xc62\x006\xc9\xb8#@E\x00>3\ +\xdd)0\xd6\x22\xd5?\x0c\x9cS\x82\xb6\xec\xa0u\xc5\ +\xa8\xa2N&\xd3G`\x07P$\xc7\x8b\x80\xa3\x01y\ +\xa6\x87\x09\xc0G\x9c\xf5\xbcw\x92W\x04\xe1\xf3T\x8c\ +^\x93\x9c+\x04\xcek\xc8$\xd3\xddN\x89\xc6\xf9y\ +\x03\xc8\x0d\xa9\xd24\x15g=@\xd7XO\xb8\x1a\xf0\ +E\xc3\xe0\x1a\x80U\xc0\x03\xc5\xbd\xe6\xe0,\x9a\x0e\x0d\ +\xf0\xb6\xfa\xe2\x94\xd5gKM\x22\x94\x92X}@\x1e\ +u8K\xd75\x8a\x8a\xee\x07F\x19nW\x1a\x5c\x00\ +\x1a\x020\xf9\x01,\x13\xe1S\x80\xb3\xc0FK!\xee`\xfbW[\xe3\ +\x06K$\x97+\x86-\x03gUi\x00\xce\xeat\x83\ +\x08\x5c+\x80Uh\xaa7\xfc\xa7\xee\xe8\x17\x1a\xc8\xde\ +\x8ea3\x8ev\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x06\xd5\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x0a\x0b5\x84O\xab\x00\x00\x04\xd3IDA\ +Tx\xda\xe5\x9b\xdbo\x17E\x14\xc7?\xdd@1\xd8\ +BmQ\x04->\xa8\xb1@\x90\xd2\x02!<\x00\x8d\ +\xc0_`@\x13\xe2+Z\x22\x17!\x01c*\x0d\xe5\ +\xf6N4\x06L$Q\x9f|\x02\x8dI\xb9<\x08\xbc\ +\xd1\x16z\x03\xde\xb8T\xbcpi\x01\x1bn\x0d\xc8\xc3\ +\x9e_\xfa\xb3\xee\xcc\xce\xee\xce\xeco\xbb\x9cd\xb2\xed\ +og\xe6{\xce\xd9\x993g\xe6\x9c)\xc3=M\x05\ +\x16\x00\x8d\xf2|\x0d\xa8\x06j\xe4\x090\x08\xdc\x96\xe7\ +u\xa0\xab\xa8\xdcc\x1c\xd2\x1c\xa0\x15\xe8\x05\x9e\x02\xff\ +\xc6,O\x81\x1e`\xa7\xf4\x99i\xaa\x00\xb6\x01}\x09\ +\x04\x0e+\xbd\xc0V\xc1\xca\x0cU\x02\x9b\x80?\x1d\x0a\ +>\xb6\xdc\x92\x11\xf6R)\x05/\x03\x9a\x81\xa1\x14\x05\ +\x1f[\x86\x80O\x84\x97T\xe9\x0d\xe0D\x09\x05\x1f[\ +N\x03o\xc5\xfd\x8aQ\xe9#\xe0\x000\xc5\xb0~\xc1\ +\x90u\x8aU\xef\x96!|\x07\xb8[\xb4RT\x01/\ +\x03\xef\x02\x0d\xc0B\xf9\xdb\x94\xc7{\xc0\x06\xe0\x07\x97\ +C~W\x84\xafrV\x0cVm\x02\xccZ1\xac\x1d\ +\x11p[]L\x89\x09\xc0AC\x06\xce\x00+\x1c|\ +\x80%\xc0\xcf\x86<\x1c\x06&\xda\x14\xfe\x17\x03\xd0s\ +\xc0\xb2\x14\xec\xcf2\xc1\x0a\xe3\xe7\xa8\xf0\x9e\x98\xbe\x0e\ +\x01z\x0c\xec\x07\xcaS4\xc2\x13\x80\xed\xc0\xa3\x10\xde\ +\xbeM\x0a\xb43\x04\xe020\xbf\x84Kq=p%\ +\x84\xc7\x96\xb8\x9d\x7f\x18\xe2\xc6v\x00\xaff\xc0\x11\x9b\ +!+\x8c\xce\x9d^\x1b\xb5\xd3\xd7C\x1c\x9cc\x19s\ +G+B\xfc\x92A\xd9\x84\x19/w\xbfj:\xeb\x91\ +u;kT\x19b\x1c\x8f\x9b.\x8f\xcd\x9aN\x06d\ +td\x95f\x86\xd8\x84\x8f\xc3:\x98\xa2\x19\xfa\x8fe\ +Oo\x83\x16\x02\xed\xc0\xb0\x94v\x8b}/\x02F4\ +SA\xeb\xc1~\xae\xd1\xde.\x8b\xc2\xdf\x0f\xe8\xff\xbe\ +\xbc\xb3Am\x1a9v\xa8\x1a\xbd\x08\xdcP4:o\ +q\x9do\xd70\xd7n\x09\xa3\x5cx\x0e\xc2\xf8\x1b\x98\ +\x1c\xd4h\xb3\x861\x9b\xae\xed\xb0\x06g\xd8\x22N\x93\ +\x06gcP\x03\xd5I\xceo\x96\x0dUZ\x0a\x008\ +\xa5Y\xc9\xfew\x86\xa7b\xea=\xcbL\xa51\x05\x0a\ +\xb4J\x83UW\x5c\xb1UQ\xa9\xcf\xc1R\xd5\xa81\ +\x82\x8d\x0e\xf0.(d\xfb\xb2\xb8R\xbfm?\xba\x84\ +\xcb\xa0\xe9~\xa6\xb7Pa\x9af\x98\xbc\xcd\xf8\xa7w\ +4\xf2\xd5\x00\xacV\xbc\xbc@~\xe8\x92B\xc6\x95\x9e\ +\xc6\xf98\x9b#\x05t\xa8\xec\x91'{\xea \xea\xca\ +\x91\x02:\x15\xbf/\xf04\x87\x96\xe7-\x81O\x02\xf6\ +\xcaFJ5\x17\xaf\x01{\x1c\x9e*\xa9d\xa9\x05\xb8\ +h\xb2N&\xa0}\x98\x9f\xe8\xeev\xa4\x809:;\ +\xf7\x97\xe2\xe5tK\xe0\x03\x11\x14p\xd5\xe1\xa9Q\x10\ +\xde\x1f\x00\x0f\x15/'Y\x02\xbfF\xb4(\x8f\x0bz\ +A\x81\xf5\xc0\xd3\x80\xda\x0a.|\x9fu\x0b\xa9\x8a\xea\ +\xda:\xf0,\x97\xb9}\xb5\x84#@;\x05\x5c\x1bA\ +\x15\xa5\xa9\x80\xb9\x0a\xac~\x0f?H\x19D\xd3\xc9\x0f\ +\xbd\xa2\xf8\xfd\x8e'V:\x88\xeas\xa4\x00\x95,\x03\ +\x9e\xc6\xe3k\xcc\x91\x02T\xee~\xa7N\x01\x8b\x9e\x03\ +\x05\x9cC\xb6\x84*\x834;\x07F\xb0\x0eu\xc8\xac\ +\xda\xc3\xcf\xcf\xebW4~?\x07__\x15\x17\xec\x03\ +\x06=\xf9\xe7'E\xa5\x0fr\xa0\x00\x95\x0c\xff\x91y\ +\xb6fH\xaeJa7\xe8jw\xb8\x1a\xc3CQ\xf0\ +\xcf\xc8\x82*\x9eJq7h{wxZ\xd1ow\ +P\xe5M\x1aF\x9aR\xdc\x0c\xd9\xda\x1d\xea\x02#\x9f\ +\x065\x98\x8c\x1f6\xb2\x1d\x1aK\xa2\x80+11'\ +\xa2\xce,S\x86\xc6\xc0MptO\x02\x05\xb4\xc5\xc4\ +\xdcM\x8c\xe0(\xf8\xa1\xe3AE\xc3\x11\xe2Eo\xa3\ +\xee\x06\x0bC\xbf-\xe6\xa8[L\x82\xf08\xf8I\x04\ +*\xc6~'Y\xe2\xa3k\x9a\x19\xa2\xe8\xf5&\x9d\x84\ +\xa5\xc8\xf42>Sd\x8eE9\xe4\x09K\x92:A\ +\xb6\x92\xa4*\x81\x93XJ\x92*\xf6\xa0tir\x9d\ +r\xd2\x92\x85a\xdf\x85>MnM\xdc\xce[\x0c\x96\ +\xa9R\x9e\x1b4\x18\x18\xd7/\x92\x82|\x15\x020B\ +vSe\x0f\xd9\x02;\x8aY\xb2\xf4\xf2\x14\x84_\x8e\ +Y\xb2\xf4\x11,%K\x17\x94\xf0\x0d\xe6\xe9\xf2M\x0e\ +\x04_\x8ay\xba\xfcwXL\x97/\xa6\xed\x98_\x83\ +\xeb\xc7\xcf_/K[\xe1\xfa|\x8d\xd4\ +\xb9\xcd\xe8\xf5\xf9\x01qt\xba\xe4\xf9\x8fK\xe6\x9e\x01\ +\xdaq~\xfe\xb6\xc1X\x0d\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x05\xb0\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x0731\xf6P\x5c\x9e\x00\x00\x03\xaeIDA\ +Tx\xda\xed\x9b=L\x14A\x14\xc7\x7fw(\xa2\xf8\ +E\x82Q\xd4\xc2\xc4\x18\x8d\x854h\x01\x85F\x0bc\ +\xe2\x07&\x16&H#b\xb4\xd2\xd8\xd0\x12\x11\xb5\xb5\ +4\x91P\x10\xa9\x8c\x85\x86\x10c\x81\x16\x5c\x14\xb5\xc0\ +BP\x83\xca\x87QC\x8c@@ \x22X\xdc\xbb\xe4\ +\xdc\xec\xde\xce\xec\xcd\xde\xedr\xfb\x92W\xdc\xc7\xce\xbc\ +\xff\xfff\xde\xbc\xf9\xdf\x0c\xe8Y\x05p\x1dx\x0dL\ +\x00K\x01\xf1\x09\xe0\x95\xc4\xb6\x05\x9f\xec\x020\x13 \ +\xd0N>\x034\x98\x06\xdf\x18\x02\xe0V7FBE\ +H~y\xabO\xabL\x87\xb8\x02\x01\x97\x815\x84\xcf\ +J\x81K&\x088Fx\xcdH\xecN\xd9\xfeT\x80\ +\x80\xd6:\xc4\xf8\xcb\xed\xc1\x98B\xe3KY<\x9bK\ +\xf3\x14g\x9c\x02\xb7\x88\x80\x88\x80\x88\x00\xe3\xb6\x0a\xb8\ +\x09\x8c\x1a,jF\x80V\xa08_\xd9\xd5\xce\x9d\xec\ +\x96\x8f\xd5\xdd\x0d\x83q\xfaF\xc0\xa8\x8f\x04\x0c\x9b&\ + \xee\xd3\x88\xc9\xf5Z\x1f\xa8\x1c\xd0\xe1#\x01\x1da\ +\xc8\x01\xc52W\x87\x0d\x0f\xfd\x16\x97$\xe8i\x0aD\ +\xa5pT\x07D\x04D\x04D\x95\xa0\x8bu\x86\xb8\x12\ +\xec4E\xc2\x15`!D\x95\xe0\x22\xd0lz\xa5:\ +*\x12\x93\x1b\x01#>\x12\xf0E\x81\x80)\xe0\xa4.\ +\xb8\x1a \x01\xcc\x01\x9f\x84\xbd\x12\x9b\xef\xed\x06\x06\x5c\ +\x08h\xf5\x91\x80\x16\x17\x02\x06$F\xab\x95\x08\xa6\xcf\ +\x82\xb1\x17\xa8N\x07?k\xd3\xd9\x0b`\xabMc\x1b\ +\x80\xae\x00V\x82]\x12\x9b\xd5*\x04\x8b\xb5\xcdY\xc1\ +N\x22C\xc7_\x81\x03!Y>\xedb\xaa\x02\xc62\ +\xe0K C\x22\x13\xfb\xb3\xc0\xb9\x10.\xf1g\x81\xdf\ +.\xd8\xe6\xd0\x18\x86w\x80\xa2\x10\x00\x8f\x01M\xb2\x12\ +\xa8\xe0\xd2\x9a\x8b\xdd\xc0\xc6\x00\x83_\x0b<\xd4\xc4\xa4\ +\x9d\x90>\x00{\x02\x08~;\xf0\xc6\x03\x1eOYy\ +\x128\x1e \xf05\xc0w\x8fX\x1c?\x18ty\xf0\ +\x0fp5\x00\xe0\x1b\x81y\x97X\x07\xbd\x10\xb0\x0ex\ +\xa4\xc0\xe0}`u\x1e\x80\x17\x01\xb7\x15\xe2{\x02\x94\ +y!@\xa7\x93\x04>\x9e\xcd\xb1\xb12\xe0\xa9B\x5c\ +w\x81\x15n\x92\x99\x8a\x96V\xe7P-\xa6\xfb\x18\xb0\ +?\x07\xe0w\xa5\x95\xe3N>\x0f\x9cW\xd5\x0cU\xc5\ +\xc4j\xe0\x9bB\xd1T\xef#x\xeb\x86\xcc\xce\xc7\x81\ +C:\xa2\xa9\x8e\x9a\xba\x8d\xe4\x11\xb9L\x01,\xca\xb4\ +1]._\x94\xc4\x9b\xa9\xef~`\x87\xaej\xac+\ +'\x97\x02\x0f\x14\xe6\x9f\xd3\xe6\xc4\x8b\xc2\xd4\xa6\xd0\xdf\ +c`\xbd\xa6`\xe2\x89\x80\xf4r\xf3\xafKP\xef\x1d\ +\xb6\xa7\xaaV\x0e<34\xe2\x8c\x12\x90\xb23$\x8f\ +\xa3e\x0a\xf0'p\xc4\x03\xf8}\xb2\x7fw\xcb9u\ +\x8a\xed\xf9B\x00@\xa5(5nES\x93F\x9b*\ +\xc4\x8e\xc9v\x97|\x13\x00\xb0YT\x16\xb7yz\x8f\ +\xccg\x0eW\x8a\x98\xe2\xb6\x93\xeb\x95>\x09\x0a\x01\xa9\ +d\xd5\xae@\xc2\x90\x94\xaf\xe5\x96\xc2\xa6\x0ex\xab\xf0\ +|\xbb\xf4E\xd0\x08H\xd95\x1b\x05\xd9\xc9\x7f\x88\xab\ +\xec\xdd\x17\xa4m\xaf\x963\x02T\x0b\x16\x1d\x9f\x02N\ +d\x19SN\x09H\x95\xac\xef\x0c\x80\xff\x08\xec5\x10\ +O\xce\x09H)\xc8m\x1a\xf2\x94u}o3TL\ +\xe5\x8d\x80\x94\x1d\x06z4\xc0\xf7\xc83&\xcd\xb6\xaf\ +\x18\xb9=\x00Q)s\xf9\xa0L\x91M\xf2\xfe\xb8\x0c\ +\xf5\xe7R\xd2\xf6\xfb\xd0\xf7\x92\x13\xc8\xb0\x9c\x00\xf1\x85\ +\x80\xe8|@D@D@D\xc0\xa4\xc3g\xb5\xcb\x08\ +\xe7i\x87\xf7'b$o\x5cV\x15\xe8\x00\xe8\x8b\x93\ +\xfc\xbf\xafP\xad;FR\xcf\x1f\x22\x9cw\x03\xb3\xb1\ +\x19`g\xeaE=\xe1\xbb\x19\x9a\xad[\xff7\xa0A\ +A\x86Z\x0e>m\x07>]\xdaj\x06\xfa\x08\xd6\xf5\ +x\x13\xd7\xeb_\x0a\xb6\xff\xa4\xb4\x7f(\x10?F\x03\ +VhU\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x05\x11\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x14\x06\x9ft\x0c\xc9\x00\x00\x03\x0fIDA\ +Tx\xda\xed\x9b;h\x14A\x1c\x87\xbf\xe4\x8e\x13_\ + DD1\x5cNA\x0d\xa2\x88\x8a\x85\x12\x14Q\x14\ +\x05\xb5\x88\x166\x82\x856\x16b@D\xd0V\x9bh\ +\x13\x05A,\xc4FR\xd8\xa8`\xc0\x18.\x95\xa2\xf8\ +\xc2\xc2\xe2D\x04-\x04\x83\x84\xa8\xf1\x91\xbbX\xdc,\ +\x9e\xc3\xecf\xf657\xbb\xb7?\x18\x0e\xf6fg\xe6\ +\xf7\xcd\x7ffggw!S\xa6\x96V\x9b\xe2X\x01\ +\xe8\x01\xd6\x00\xb3#\xack\x02x\x02<\x07\xa6m\x84\ +\x91\x03\xfa\x80/\xa2\x81q\xa5\xd7\xc0v\xdb\xcc\xcf\x02\ +\xee\xc6l\xbc1M\x01'l\x02p\xc3\xa0\xf9\xc6\xd4\ +g\x83\xf9\xcd@\xadI\x00\x9a\x0e!\x0f\x1cs\x99\x0c\ +'\x80\x8a\x80\x13F\x05`\xad\xc7\xff\x97\xc4\xef\xe5f\ +A\xa8(z\xe5!0'\xa2\xf2;m\x8f\x84_\x8a\ +\xc6\x1c\x89\xb0\xfcN\xdb\x87\x83\xaa!\x87\x9a\x04`\x1a\ +8k\xd2|\xbb\x85\xeb\x91\x0b&!\xd8\x08\xc0(\x04\ +[\x01\x18\x83`3\x00\x07\xc2\xc9V\x06\xe0\xac\x0f\xf6\ +&\x19@-\x826^\x11\xf7+\x89\x04\xf0\x19\x98\x0c\ +Y\xc62`WR\x01T\x81\xdb\x11\x94\xb35\xc9s\ +\xc0)\xe0N\xc82\x96\xc4u3dB\xe3@\xafX\ +\x15\xae\x10\x9b/^:\xaf\xe8\xf1B\x92\x018\xfa(\ +\xd2L:\xde\xea+A2\x00\x19\x80\x0c@\x06\xc0\x84\ +\xf2-\xe0\xaf\x17\xd8\x02\xfc\x06\x86\x81!\xa4\x073q\ +\xef\x08\x05\xd1\xa0\xa2M\x83>\xcb(\xf2\xef)\x94\xbc\ +\xdf\xd9\x91\xf6!P\x04F\x80\xf5\x8a\xffv\x88HX\ +\x98V\x00%\xa0\x0c,\xf7\xc8\xb3N\x0c\x85\xb9i\x03\ +\xd0%z\xbe\xa4\x91w\x03p.m\x00\xbe\x89\xfb\x0e\ +]\x1dN\x1b\x8011\xc6_i\xe6_\xdc\x9e\x921\ +_R@x\xa9qn%I\x00\xaa.\xe6G\x14\xe3\ +~\x0c\xd8\xa9\x01\xe1zR\xd6\x01\xef\x15\x13[I\x1c\ +\xf7\xca\xd3\x01\xbcp\xf1\xf8\xc0\xd9\x97\xb0\x1d\xc0\x07\xc5\ +%\xad\x08\xbcS\xb4[\x95w\x01\xf0T\xcaW\x06\xe6\ +%a%\xe8\xc7\xbc.\x84\xff\xcc\xdb\x0c@'\xec\xdd\ +\x92\xdbp\x18@\xf1\xd8\xdfF\x00\xfd\x01z^'\x12\ +\x94\xb2\x11@.`\xcf\xebDB\x22\x00Da\xdeI\ +7\x93\x0c\xc0o\xd8\xcbiT\x9e\xf0\x92\x04\xc0\x88y\ +[\x01\x183o#\x00\xa3\xe6m\x03`\xdc\xbcM\x00\ +\xbaB\xce\xf6\xc3\x04|\xb7\xd1\x06\x009\x8f\x9b\x96X\ +\xcd\xdb\x02`\x7f\xb3\xcc\xdb\xb2\x1f\xb0;\xe0y\xa3\xc0\ +\x01\xe0G\x18\x00?\x15\xc7\xe7\x1b\x06\xb0-\xc09\x8f\ +\x80=b\x1f0\x94\xde*\xc2\xea\x19\xb0\xd4\x90\xf9E\ +\xf8\x7f]?T\xd87*O\xfdI\xc9*\xe9\xf8F\ +\xea/2|\x8d\xc1p\x0d\xe8\xa6\xfei\x8e\xd3\xfbm\ +>{~_\x98\xb0\x97\xd5\x0d\xfc\xc1\xdc\x07\x12\x8f\xa5\ +\xfa\xaf\xfa8\xb7\x1c\xe4:\xaf\xa3\x8b\x06\x01\xf4Ku\ +\xbf\xd1\x0dl2a\xda\ +m\xf2Y\x09\xac\x163t\xd4\xfa\x04\xdc\x97\xa2\xaf\x07\ +\xf8N}\x1f\xbfJ\xa6L\x99L\xe9/\x09\xb7\xc20\ +\xe4r>[\x00\x00\x00\x00IEND\xaeB`\x82\ +\ +\x00\x00p\xc7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x01\xdd\x00\x00\x01\xc1\x08\x06\x00\x00\x00,)a\x8e\ +\x00\x00\x00\x01sRGB\x01\xd9\xc9,\x7f\x00\x00\x00\ +\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\ + cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\ +\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\ +\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKG\ +D\x00\xc9\x00\xc9\x00\xc9a\x80\xe6\x0e\x00\x00\x00\x09p\ +HYs\x00\x00.#\x00\x00.#\x01x\xa5?v\ +\x00\x00\x00\x07tIME\x07\xe9\x0c\x17\x0b2\x18\x07\ +\xe8A\x0b\x00\x00 \x00IDATx\xda\xec\x9dw\ +\x9cT\xe5\xd5\xc7\x7f\xe7\xb9\xf7\xce\xcc6\xca\x82\x88H\ +\xb1PL0\xa8\x11\xb1\x1bD\xa3A\xc5\x9a\xb5\x17\xea\ +\xec\xaa\xd1T\xbby\xb3I,1\x9a\xa8I\x8c\xbb\x03\ +\x08\x82-l\xa2X\xa21\xb1`\x02\xc6\x18Q\xb1E\ +\xc1\x82\x82\x02\xca.,l\x99\x99[\xce\xfb\x07\x88\x94\ +e\xdb\xdc\x99{\x9f\x99\xf3\xfd#\x9f(x\xef\x9ds\ +\xef\xf3\xfc\x9es\x9e\xf3\x9cC\x10\x04!/x%\x0e\ +s\xa4\x1d\xeb\x8f\x883P1\x97\x93R\xe5\xc4\x5c\xce\ +\xa0r\x10\xca\x89\xb9\x1c@\x19@\xc5D(\x01s\x84\ +\x81\x9e \x98`\xea\xb9\xf5\xb5\x88\xd0{g\xf7a\xc6\ +z\x00\xdc\xe6\x1f\x12\xaf\x07\xef\xf8g\x04\xb4\x02H\xee\ +\xf8\xf7)\xcd\x8c\xe6\xcd\xff\xed|\xab\xc6\xb9K\xde\xa4\ +\x90\xcf\x98b\x02A\xd0\x87\xd6)\xb1\xc1d\xd9\xfb\x18\ +\x1e\x8d`\xa2=\x09\xbc;\x81\x062x\x08\x88\xfaS\ +\xd45\x00\x02\x88\xb6\xa8'm\xa5\xa4\xdb\x09\xdeV\x7f\ +\xd6\xf9g B\xafv\xfe\xb4wW\xae\xb5\xf5c\xb1\ +\x87\xa7\xe5\x0d\x0b\x22\xba\x82 \xe4\x94\xb7+`\xed\xdd\ +;:\x88\x98G*\xc3\xfb:\x18{\x11h$\x13F\ +\x11\xdc2@\x01\xeaK\x9d\xfc\xf2\x7fI\xfb\xdf\xed\xb1\ +\xfaP\xde\xbe \xa2+\x08B\xd6\xf8\xbc\x02%e\xe5\ +\xe67M\xc6A \x1c\x04\xe0\x9b\x00\xedE\xe4\x99[\ +\x5cP\xea\xb23\xaa%\x0e\xf8\x03\xf9\x22\x04\x11]A\ +\x10\xe0\xd7\x9e\xeb>\xca\x1a\x11\xf1p \x08\x07*\xe0\ +@&\x1cD@$\xef\x15\xb5\x03\x18H~\xb6\xd2\xfe\ +\x9f|%\x82\x88\xae \x08\xdd\xa2\xfe<\x94\x95\x96\x19\ +G\x11\xd48\x05\x1c\xca\x8c\xfd\x09(\x82\x02\xba\xb1\x95\ +\x9a\xd7\x10\xe3\x8daO!-\x96\x10Dt\x05A\xe8\ +\x14+*\x10\xdb\xa5\xdc8LA\x8dS\x84q\xcc8\ +\x88\xb6\x1ac$\x0a\xbbS<\xe0\xbfaZ,\xf5(\ +5/\x02h\x02\x88\xbf\x0e\xa6\x92\xcd+\x83U`\xfa\ +\x90\x81\xf7\xc1\xf8wZ\xd9\xcf\x97\xd6\xe0\x0by{B\ +\x97\x16\x98b\x02A@\xf7\x8f\xe8(s\x8c\x09\x8c\x03\ +\xd3\xd1 \x1cF@L,\xd3\x0d\xd1\xf5pn$a\ +?\x18\xf4s$+\x8dq\x06\xd1\xbd\x04\x1a\x88\x8eC\ +\xe2L\xe07<\xa6\xc7\xd8\xa1\x07\xa23\xd3\xef\xca\x9b\ +\x14Dt\x05\xc1G\xd6OD\xcfb\xcb\xfa\x0e)>\ +\x15D\xe3\x09\xe8)VA\xa6\xfb\xb9\x9cr\xec\xfe\xa5\ +3\xf0y\xc0\x82{\xacA\xea\xf1\xee/\x9c\xf8U\xf6\ +0\xa79\xed\xcc\xee5\x1b\x8d\xf2f\x05\x11]A\xe8\ +\x06MS\xd1/\xa2\xac\xef\x10\xa1\x02\xc0\xb7\x89\x10\x15\ +\xab\xf8\xa9\xba\xfc\xbaY\xeb\x1c\x10\xf4;\x8e\x1a\xd6\x9b\ +D\xe8\x97\xf9\xcfA\x13\xc0\x0f\xa4\x98~_\x9a\xb0\xdf\ +\x92\x17,@\xf6t\x05\xa1\xa3I\xd8\xfaF\xd4\xe4S\ +\x08t\x0a\x03\x07\x92,P\x91\xbd\xfd\x5c\xfaG\xd0\xcf\ +\x105\xcd\xdf\x112\x17\xdc\xcd{\xf7\xa5\x00\xc5\xa3\x84\ +iv\xa5\xf5\x0f\x8f\xbc\xdf=Z\xef>uf\x1d<\ +y\xdb\x82L$\x82\xb0\x99\xd4\xe4\xc8p\x8a\xf0y\x04\ +>\x8f@{\x8bEr\x83\xcd|TQ\xad\xf3\xaf\xa0\ +\xee\xdf2\xcd\x1cm\x19\xf4r6\x17V\xcc\xfc>\x18\ +\xbfkt\x9cY}\xefA\x93\xbcu\x11]A(H\ +\x1a\xa7\xa0w\xb1eV\x10\xd3\x85\xbc)\x11J\xc6\x04\ +r\x19YF\xfd\x12\xb6\xfb\x8fN\xc0\x09L\xf4\xab\xcc\ +:\x02}7G\xbfw\x03\x03\xb3]\xc7\xf8M\xd1\xcc\ +\xe4'\xf2\x05\x88\xe8\x0aB\xde\xf3Y\x1cE}\xc9:\ +\x85\x80\xf3A8\x8e\x00K\xac\x12T\x12\x15\xcf\xb1j\ +\x9c\x8b\x10`-k\xd3r?$\xc0\xc8q\xf2\x98\x0d\ +\xe6:\xdb\xc3\xed\xc5\xd3\x9dW\xe4K\x80\xec\xe9\x0aB\ +>Q\x0d\xd0\xd5U\xc6X\x03t!\x98N'B\x0f\ +\xb1\x0a\xc2Po\xf9/A\xde\xdf0\xdci\xb9\x16\xdc\ +\xcd\xde\x8e\x05\xa2s#\x06\xceu*\xadE\x1e\xe3w\ +o\xc0~8H\x8f_\x10OW\x102\xa6!\x8e\x1e\ +e\xca<\x9b\x18\x97\x81h_\xb1H\xa8B\xcb\x1bV\ +7\xd8\xbb\x0e\xaak\xa3\xe5\x1fr\xd3Xbx\xb9\xb9\ +\x9c\x88\x06\x84\xe4\xe8\xd4*f$Ri\xfb\x0fe\xb3\ +\xb0V\xbe\x10\x11]A\xd0\x86\xe6\xb8u@D\xf1\xc5\ +\x00\x9dK@\x89X$\x8c\xa2\xcbs\xadZ\xe7\xc2\xa0\ +\xee\x9f\x9ef\x9d\xa5\x0c<\x14\xc2\xc5H+\x88\xefK\ +y\xf4;9r$\xa2+\x08\xa1e\xf9DD\x07\xc4\ +\xac\x0a\x05\x5c\x02\xe0P\xb1H\xb8q]:9:=\ +\xfdxP\xf7w*\xad\x7f\x82pd\xc8\x0b\x87<\xeb\ +\xb9t\xe7\xcd\xd3\xd3OT\x03,_\x8d\x88\xae \x04\ +Nrjt\x0f\xa5\xbc*\x22L&\xc2.b\x11-\ +\xaaP5~\x9a\xb4w\xddc6RA\xdc\xbf\xb9\xd2\ +\x1a\x15%,\xd1\xc8bK\x5cO\xdd\xf0\xe8\xba\xf4\xc3\ +r\xdeWDW\x10\x02\xa1)n\xed\x1b%\xbe\x12D\ +gK\x06\xb2v\xa1\xe5{\xadZgbP\xf7\xb7+\ +\xcdZ\x22\x8ak\x98\xed\xfd\x0e{t\xcb\x1b\xb0\x1f\x90\ +\xa4+\x11]A\xc8\x09\xadS\xcd#L\x83\xae\x02\xe1\ +D9W\x0b\x09-w\x91\xf5\x17\xa3W\x09[+u\ +\xde\xebg\xf02\xf6\xe8\xa6e\xeb\xec\xfbG\xd6\xc1\x96\ +/J\x1f\x94\x98@\xd0Il\xedJ\xeb\x1f\x96I\xff\ +\x22\xc2I\x22\xb8\xdaf-7}\xbe>\x1dX\xe9\xc7\ +\x126'\xea\x9e\x5cG\xa0aJa\xd6\xf0rs\x99\ +\x1d7\xbf\xbf\xa2B\xba[\x89\xe8\x0a\x82\x0f\xcc\xab\x80\ +JM\x8bLp*\xcdW6\x8b\xed\xb1b\x15\xede\ +\xf7\xa9\xa0\x8e\x09U\x03\x04FU\xbeX\x92\x88\x86\x90\ +\xa2;\xfa\x97\x9bK\xed*3>\xafB\xe6t\x09/\ +\x0b\x02\xba\xd7\xabv\x14\xac\x8bH\xf1\xf5\x04\xdaC,\ +\x82|jX\x7fA\xa4\xc6\xbe/\x88{'\xab\x8c\xe3\ +L\xa8\xa7\xf38\x8c\xb0\xd8!\xbe\x22V\xe3>/_\ +\x9ax\xba\x82\xd0)O$5-2a\x7fe\xbe\xaa\ +\x14f\x88\xe0\xe6]\xd6\xb2\xddj\xdb\x7f\x0d\xea\xfe\x06\ +\xe8{\xf9\xedF\xd1\x81&\xd4sv\xa5\xf5\x8f\xe6i\ +\xd6~\xf2\xc5\x89\xa7+\x08\xed6\x117I\xdd\x0c`\ +\xb4X#oE\xf7\x1fV\x8d}\x5c0^nl\x88\ +\x01\xf7\x83 \xca>\x06\xb4w\xee\x01\xfc\x17\xd75\xae\ +\x8c\xcdH-\x97\xafO<]A\x00\x00\xb4N3\x0f\ +u*\xad\x05&\xa9\x7f\x88\xe0\xe6\xbd\x14<\x1a\xd8d\ +\xe7\xb9\x17\x17\x8a\xe0n\xee\xeb\xab\x88\xa8\xc20\xbd\xb7\ +\xd3\x95\xd6\x0d\x9fWHe6\xf1t\x05H\xa3x\xbe\ +\x91@\x13\xc4\x1a\x85\x81\x93R{\xc5f\xa5>\xca\xf5\ +}WT \xd6\xbf\x8f\xb5\x82\x80\xbe\x05|6z\x85\ +\x07\xf5\xfdhm\xfa\x11\xf9\x12Et\x85\x02\xa2e2\ +v\xb3,\xf3f\x80. \x92hK\x01M\xfa\x1f[\ +\xb5\xce\x1eA\xdc;]e]\xa4\x80\xd9\xf2\x16\x00f\ +\xfc\xd5M\xab\xcb\x82X\xfc\x08\x12^\x16r\xc8\xb2\xf1\ +\x88\xd8U\xe6\x15\x96e\xbdKD\x17\x89\xe0\x16\x1c\x0b\ +\x02\x9b\xe8\x18\x97\x88\xf9\xb7\x84\x9dO4\x22\xde\xdbv\ +\xa5y\xdd\xb2\xf1\x88\x88EDt\x85<$9\xcd8\ +f\xcf\xc1\xe6\xab\x04\xfa\xb5\xf4\xb2-P\x0f\x8b\xe8\x99\ + \xee\xdb\x127\xc7\x800F\xde\xc06\xc2[DD\ +7\xec1\xd8|;Yi\x1c/\x16\x11\xd1\x15\xf2\x84\ +Ted\xa8]e>f\x1a\xea\x19\x10\x8d\x14\x8b\x14\ +l\xd62\xdb\x9e\x1d\x88\xe8Z$^n;\xc55\x86\ +\x9a\xa4\xfefW\x9a\xf77O\xc4\xaeb\x11\xd9\xd3\x15\ +4e\xedd\x94\xf6\xb0\xac\xeb\x08\xf8!\x11\xa2b\x91\ +\x82\xdfH|\xdd\xacu\x0e\xc8\xf5m7NB\xdfX\ +\xd4ZA\x902\x89\x9dX\x18\xade\xe0\x92H\x8d]\ +'\xd6\x10OW\xd0\x88t\xa5uvO\xcb|W\x11\ +\xae\x16\xc1\x156'\xef\xdc\x1f\xc4}cQs\x8a\x08\ +n\xa7=\xb0\xbe\x0a\x98gW\x9a\x0fn\xb8\x10\xe5b\ +\x11\xf1t\x85\x90\xd3\x1cG\xff\x882\xef\x22\xd0\xe9b\ +\x0da+\xc1\xdd\xd0\xdaj\xef\xd9c\x0e\x1a\x90\xe3\xba\ +\xdd\xa7\xf51\xdf'\xd0\x9e\xf2\x16\xba\xec\xf5\xae\xf1<\ +\xaa\x8c&\xd2\x8f\x8a5\xc4\xd3\x15\x10\xbe\xd2\x8d\xe9\xb8\ +5-\xa2\xacwEp\x856T\xf7\x97\xb9\x16\x5c\x00\ +8\xa5g\xc6o\x975\xd8\xd7\ +\x8c\xac\x83-\x16\x11\xd1\x15rHS\x9552\x06\xcc\ +\x04p\xb0XC\xbf.?`\xfe\x82\x08\xab\x19\xb4\x1a\ +\xe0\xcf\x19\xb4\x8a\xc0\x8d\xf0\xb0\x11\x0a\x0e{\xb4\x9eA\ +\x1e\x93\xbb\x1e\x0c\xc7#\xda\xa8\x08\xa5\xc4\x5cL\xa4J\ +\xc1\xe8I\xe020\xca\x98\xa8\x14\x80\x05F\x8a\x88\x9b\ +\x99\xe8\x93\xb4\x83Wo\x9ba\xbfU\x0dpP\xbf3\ +]e\xdd\xa1\x80\xef\xcb\x1b\xf7\xfd\x03z\xd1N\x1bg\ +\x15\xcdJ\xae\x14c\x88\xe8\x0a\xb9\xf0n\x87\x9bWB\ +Q5A*\xd9\x84TT\xd3`^\x0e\xa2\x0f\x99\xf1\ +\x01\x81?\xf0X}h\x83?\x80\xb2\xd7\x94\xd6\xe0\x8b\ +|\xb7\xc1\xe7\x15(\xe9]n\xad$B/\xf9\x22\xb2\ +s\xb4\xc8e\xef\xfcX\xad\xfb\xb4XCDW\xc8\x12\ +\xad\xf1\xd8 K\xb9s\x00\x8c\x15k\x84b\xe2k&\ +\xc6;\x0c~\x0b\xc0\xdb.\xf1\x9b\x80\xf5\xdeK\xef&\ +W\x06\x11\xce\x0d\x13v\x95\x19'P\xad|%\xd9m\ +\x1b\xc8\x8c\x9b^\x5cjW\x17\xfa\xf7&\xa2+ \x0b\ +U\xa5\xceP\xc4\x09\x82\x9c\xdd\x0bh\x7f\xf4\x130\x16\ +\x03X\xec\xb1z\x8bAo>\xb6.\xb5\xfc\xcc:x\ +b\x9d\x1dq*\xcd% \x1a%\x96\xc8\x89\xf8>\x97\ +N\xd9\xe7\x96\xcc\xc6\x1a\xb1\x86\x88\xae\x00\x1f\xc2t}\ +\xcc\xdb\x094M\xac\x91\xbb3\xad \xbc\x08\xe6\x17=\ +\xf0+6\xb9\xaf\x14BH\xd8/Z+\xcd#-\xa2\ +\x7f\x8a%r\x1auY\xe5\x82\xcf\x89\xd58/\x885\ +Dt\x05t\xb7\xd0\x85u@D\xf1\x03\x04\xdaG\xac\ +\x91U\x91\xad\x07\xf13\x00\xfe\x95vi\xe1\x7f\x97\xd9\ +oI\xb8\x0e\x99\x84\x96\x1f\x22\xd0Yb\x89\x9c\x7f\xc7\ +\x0e\x88\xaf\xb0j\x9c;\xc4\x1a\x22\xba\x02\xbaV\xe8\xe2\ +\xba\xb8y9\x88n\x91\x12\x8eY\xf1\x0a\x5cb~\xdd\ +cz\xc6#\xef\x99\x0f\x1a\xdc\x17\xe4\x08\x06\xfc\xeb\xd3\ +\x1c\xb1>&\xc0\x12k\x04v.{\xc6\xd2\x06\xe7\x12\ +\xf9\xa6!\xc51\x04t\xe2(\x10v\x89\xb2u\x1f\x11\ +\x8e\x13k\xf8:\x11\xad\x00\xf0\xb4\xc7\xea\xe9\xa4\x9b~\ +\xb6\xe7L\xac\x13\xabda2\xb3\xacJ\x11\xdc\xc0\xbb\ +\x16M\x1d^n\xed\xb1\xfeb\xbb\xa2\xd7\xddX/\x16\ +\x11OW\xd8\x99\x970\xcd\x1cm)\x92\ +\xf1\xe8^\xa6\xf2$aG\x8f\x04\xab\xb9K\xd8\x99<\ +:\x01\x07\xb2\xa7+ \xdf\xf7o\xc9\xfa\x03\x11*\xc5\ +\x1a\x1d\xb71\x03\xe3Y\x8f\xa9\xf6\xfdu\xe9G\xc5\xab\ +\x0d\xb9\xe7\xc0,\x1e\xae>G\x8a.\xd8\x0ff\xd9\xf2\ +\x89\xce\xd9{\xccFJ<]!/Y;\x19\xa5=\ +#\xd6\x9f\x088A\xac\xd1\xaeW\xdb\xc4\x84\x99\x9e\xad\ +~/G\x1d4\xfb\xbe-\xab\x91\x08J\xac\xa1\xcd\xc2\ +\xf6\x1f\xeb\xea\xed\xd3\xfa\xd5\xa1YDW@\xfe%L\ +\xd9O\x80\xe8\x00\xb1\xc6N\xc5\xf6s\x10\xff\xbe\xb5\xc5\ +\xf9c\x8f9h\x10\x8b@\xc7D\xaa7A\xb4\xafX\ +B\xaf\xde\xbcM\xca>\xb1\xd0\x8ah\xc8\xca\x10\xf9\xdd\ +l\xdeb\xfbE\x11\xdc\x9d\x1e\xf7\xf9\x88=\xfeA}\ +\x8b\xbd\xa7U\xe3\xdc \x82\xab\xf1\xbb$\xcc\x14+h\ +\xe7\xf2\x1dV\xea\x99\x0b[&\x17VB\xa7x\xbay\ +Jr\x9aq\x8ca\xa8\xbf\x10\xd0S\xac\xb1\x83\xda\xfe\ +\xd7#\xdc\xfa\xe2\xbb\xf6\xc3\xd2\x5c\x00y\xd4\xb8\xde|\ +\x9d\x88\x86\x8a5\xb4K\xaez\xcfu\x8d\xef\xc4f\xa4\ +\x96\x8b\xe8\x0a\xd0\xb4\xc2\xd4E\x04$$Cy\xc7\xde\ +\x9f.y7\xc4j\xdc\xe7\xc5\x1a\xf9G\xf34k\xbf\ +\x88\x81\xe7\xa4\xef\xb3\x96\xc2\xfbY\xca\xa5\xef\x94\xce\xb0\ +\xdf\x84\x84\x97\x05hT\x7f\xd6\xa92\x7fF\xc0,\x11\ +\xdcm<\xdb\x97\x1c\xd7;\xd6\xaa\xb5\x8f\x11\xc1\xcd_\ +J\xa6\xdbK\xd2\x8c\xa3\x19,Ip\xfae5\x0f\x88\ +\x1a\xf8g\xeb4\xf3(\xf1t\x05-\x98W\x01uj\ +\x1f\xeb.\x05T\x895\xb6\xa8\xed\x9b.\xab\xeb\xa3\xb5\ +\xe9\xc7\xc4\x16\x85\xc3\xfa\x89\xe8Y\x1c\xb3~E\x8c\xb8\ +d4k\x97\xd5\x9c\xf4\x98\xce\x8d\xd6\xa6\x1f\x11\xd1\x15\ +B\xcb\x82\xb10\x0e\x1fa\xce$\xa2\x8b\xc4\x1a\x00\x83\ +\x971\xa8z~\xbd\xfdP\xa1W\xbfA\x81'\x12F\ +\x99\xaf\x06\xe8l\x22\xa9I\xa0S\xcfi\x80/\xb1j\ +\x9c\x84\x88\xae\x10:\xde\xae\x805\xbc\x8f9\x97@g\ +\xc9\xbe\x10\xaf`\xa6_\xbe\x01{V!W\xbc\x11\xb0\ +C\xc5*\xa5\xbc\xcb\x89q\x0e\x11\xfa\x89E\xf4\xc0c\ +\xfcj5s\x89\xe7T\xe5\xd3\ +\x22ZDWSV_\x80\xe2>\xc5\xd6\xc3D8\xbe\ +\xa0\xcb5\x82\xe7\xdai\xe7\xea\xe2{\xb0J\xbe\x0a\xa1\ ++\x0b\xd6\xfeQc\xac\x22u2\x81O\x22\xd0`\xb1\ +Jh\xc7\xf9\x93\xf5\xcdvE\xff\xb9h\x11\xd1\x15\x10\ +T\xd9\xbb^\x11\xebq\x00c\x0bx$\xbe\x9cv\xf9\ +\xf2\xe2\x19\xce\x7f\xe4\x8b\x102\xa5\xb9\xca\xda?\xc2<\ +\x81@\x13\x980\x9adn\x0c\x1b\x0b\x9b\x92\xf6I\xbd\ +f\xa3QDW\xc8)\xeb/F\xafR\xb6\x9e\x04p\ +h\xc1v\xfda\x5c3\x7f\x9d=G\x92\xa4\x84l\xd0\ +:)6\xd0\x8c:\xa7\x00t\x1a\x80\xb1\xd2204\ +\x83\x7fqk\xda\xf9N\xd9,\xac\x15\xd1\x15r'\xb8\ +\x9e\xf9\x0c\x88\x0e,\xc0\x10S\x9a\x19w6\xb1}C\ +y\x02\x1b\xe4k\x10r&\xc0\x963\x19\x84\xc9D4\ +D,\x12\xf8\x1e\xef;i\xcf9\xa6$\x81\xd5\x22\xba\ +\x02\xb2]\xe6\xae\xbc\xdc\xfa;\x08\x87\x15\xa0w\xfb\xbc\ +gSU\xf4\x9e\xf4R\xf9\x12\x04\x04\xd5\x1a\x13\xd6\xb9\ +D|-\x11\x8d\x10\x8b\x04:!\xbc\xd1\xd2\xea\x1c\xad\ +k\xadt98\xae\x01\xcb\xc6#\xd2\xbb\xdc\xaa+4\ +\xc1e\xa0\x91=\xfe\xc1#\x0d\xf6\xb1\x22\xb8B\x90\x8c\ +N\xc0\x89$\xec9\x8f48_w]:\x19\xcc\xaf\ +\x89U\x02+_5\xaa\xb8\xd8z\xb2\xfe<\x94\x89\xa7\ ++de\x85\xbd\x1f\x99uDtj\x81\x85\x91\x1e\xb6\ +\xd3\xce\xf7$+Y@x+\xc0\x9d\xa1\x98\xaf\x07\xd1\ +(\xb1H \x8b\xf2g\x97\x7fl\x9f0\xec)\xa4E\ +t\x05\xdf\x06\xf6i\xe5\xe6\xbdDt~\x01\x0d\xa4U\ +\x9eK\xdf\x8bNO?,_\x80\x00\x0d\xea\x9d_\x1b\ +\xb7*H\xf1\x0d\x04\x1a&\x16\xc9-\x1e\xf0\xfbH\x8d\ +}9$\xbc,\xf81\x98O-\xb7\xfeP(\x82\xcb\ +\x003\xf3\xdc\xa4g\x7fC\x04W\xd0h\x9cr$a\ +\xcf[Z\xef\x8cdp%C\x2239\x16\xb0\xcb\xd2\ +q\xebB\xf1t\x85\x8cIWZ\xb7(\xc2\x95\x05\x12\ +J\xfe\xc0e\x8e\xc7j\xdd\xe7\xe4\xcd\x0b\xd0\xbd\xafo\ +\x1f\xf3\x87`\xba\x82\x08=\xc4\x229Y\xb07\xa7\x80\ +\x83Kk\xec\xb7Et\x85naW\x9a\xd7\x11\xd1\x0d\ +\x05R/9\xd1h;?\xee{\x0f\x9a\xe4\xcd\x0b\xf9\ +\xc2\xc6I\xe8\x1b\x8dX?%\xe0\x12i\xb6\x90\x13\xfe\ +\xf3p\xbd}\x98\x0eg\xf7Et\xc3\xe6\xe1\xc6\xad)\ +JaF\x01\xacN\xd7x\xecM\x8d\xd6\xbaO\xc8[\ +\x17\x90\xcf\x9d\x8e\x80;\x098F\xac\x81l7H\x98\ +\x16\xa9\xb5g\x88\xe8\x0a\x9d&Ye~\xcb\x00\xfd=\ +\xdf\x1b\xd03\xe3)\xdb\xb6\xa7Hf\xb2P(\xa4\xa6\ +E&(\xc3\xbb\x93@{\x8a5\xb2\xb6M\xf5\xc9\xf2\ +\x8f\x9daa\xcff\x96D\xaa\xb0\x0c\xca\xca\xc8\xd7\x0c\ +\xa6\xf9\xf9,\xb8\x0c$\xd9\xe3\x8b\xadZ\xfb\x04\x11\x5c\ +\xa1\x90\x88NO?\xfe\x85\xe7\x8c\xf4\x18?gF\xab\ +X$\x1b\x1e$\x0d\x1e<82\x01\x92\xbd,\xa0\xc3\ +\x10\x14vQ\xf0\x9e B\xaf<\xde\xbb]\x9avq\ +\x88\x95pj\xe4\x8d\x0b\x85\xc8\x80\x04Z#\xb5v\xb5\ +\x9bV#\x19\xf8\x87X$\x1b\x82\xe6\x9d%\xa2+\xb4\ +\xcb\x8a\x0a\xc4bl\xcd'\xa2\xbd\xf2\xb9\xd0E\xb3r\ +\x0e.\x99n/\x917.\x14:\xb1Y\xa9\x8f\xac\x1a\ +\xfb8\x0f8\x93\xa1w\xf1\xfe\x10r\x98\x88\xae\x80\xf6\ +\xce\xe2\xf6/7g\xe5kyGf\xa4\x18\x5ci\xd5\ +8g\xf4\xba\x1b\xeb\xe5\x8d\x0b\xc2WDj\xec\xbat\ +\xd2\xde\x97\x99\xeb\xc4\x1a\xf0\xabD\xe4\x80y\x15\xe1\xd6\ +5I\xa4B\xa0gq\x7f\xa1\x08?\xcd\xd3p\xf2\xa7\ +\xb6\x8b3\xa4\xdf\xad tL*\x1e9E\x91\xf7G\ +\x22\x1a \xd6\xc8\xec\xcc\xaeUc\x97\x8a\xa7+\xb4%\ +\xb8g\x13\xe1\xfa<\xfd\xf2\x17\xd9\xb6s\x90\x08\xae \ +t\x8eh\x22\xfdhs\xca\xf9:3\xdf/\xd6\xc8\x88\ +\x17 \xe1ea{Z+\xcdC\x08\x98My\x18i\ +\xf0\x80?~\xf4\x89=N\xb2\x93\x05\xa1k\xf4\x9a\x8d\ +F\xab\xd69\xdf\xf3p\x11\xb3\xf4\x8c\xee\xd6\xfc\xe3R\ +\x8d\x9c\xd3\x15\xb6\xa1y\x22v\x8dD\xcd\xc5D\xb4{\ +\x9e\xed\xdf: \xbe\xd4\xaaq\x12\xf2\x96\x05!3\x92\ +\x93\xa2{\x9a\x11\xef\xbeB\xec\x9f\x9dA\xc2\xe6\x9f\xad\ +\x1a\xa7B<]\x01[\xb7\xe9\x8bF\xad?\xe5\x9d\xe0\ +\x02\x1b=\xf2N\x15\xc1\x15\x04\xf8\x96\xe1\xbc\xf0=\xfb\ +(\x06_\xcd\xd0\xabu]P\xd3\xeb\x86\x8d\xcedH\ +\xede\x01\xdb\xee\xe3\xde\xa9\x08\x97#\xbfV\x97\xcbS\ +\xa0\x93t)6.\x08\xba\xd1\x1a7\x0f7\x09\xf3$\ +\xc9j\xa7\x93\xd0\x0b\xadl\x9fQ\x96@=\xa4\xb5\x1f\ +\xb4\xeee\x9b\xaa\x8c\x9c\xe1\x9b\xe0VY\xe7\xe7\x9b\xe0\ +\x02\xf8O:\xe9\x1c\x22\x82+\x08\xd9\xa3(\xe1,J\ +\xb3s 8\xfcIB\x08 \x87\xe4\xbd\x06\xfb\xdb\xba\ +\x08\xae\x88n;\x9c\xda\xc7\xba\x95\x88\xc7\xc1\xa7\x12\x8f\ +\x04\xd4\xe4\xd9\x1e\xee\x13k\x9b\xedq%\xb3\xb1F\xbe\ +\x16A\xc8.%\x09\xac~\x9d\xedc=\xc6o\x18`\ +qn\x91\xf4<\xc4#5\xf6\xa5#\xeb`C\x9a\xd8\ +\xeb\x8d]e^\xaa\x80\x1f\x81\xb18\xd3k}\x16G\ +\x91A\xde\x9f\x08(\xc9\xa3\x90\xf2\xec%l\x9f\xd6\x7f\ +.Z\xe4k\x11\x84\xdc0:\x01'Rk\xff\x84\x81\ +\xb3\x18\xd8X\xb0\x82\xcb\xfc\xbf4\xe3\xe0H\xc2\x9e\x0e\ +-KU\x0a\xdby\xa5\xc6I\x00\xdd\xc9\x0c'\xc5\xf6\ +\xa3\x99^o\x17e\xde\x09\xd07\xf2\xc5>\x9e\x87[\ +n\xacq&\x8fN\xc0\x91\xafE\x10\x10H%+\x8f\ +\xe9`f~\xbf\x00\x05w\xee\xba\x06\xe7\xa0\x92Z\xfb\ +\x0dh\xdb\x98A\xd8BK\xa5y\xa0E\xf4\x02\x01%\ +\xccx\xc2\xaa\xb5'dZ\x00C\x11\x1e\xcc\x93p\x0e\ +\x03\xfc#\xab\xc6\xb9C\xbe\x14A\x08\x9e\x8d\x93\xd0\xb7\ +(j=\x02\xe0\x88\xfc\x17[x \xbe\xd6\xaaqn\ +\x81\xf6M\x19\x04\x00@\xeb\x94\xd8`\x8b\xe8q\x02J\ +\x18`\xdb\xe3\x9fg\xb8\x8f;\x94\x80\xda|\xf9\xe0\x99\ +1U\x04W\x10\xc2C\xd9,\xac]\x99\xb4\x8fe\xf0\ +\x83\xc8\xf3\xd2\x8e\x1e\xd1\x19\xf9 \xb8\x00`\xc8\xa7\x0b\ +\xac\x9f\x88\x9eE\x11\x1f\xda\xf2y.\x9d\x11\ +M\xa4\xff,\xd3\x9a \x84\x9fH\xc2\x9e\xed\xc2\x9b\xc0\ +\xc8\x83S\x05\xcco\xd8i\xe7\xb0\xe8\xf4\xf4\xb2|{\ +O\xaa\xc0\x8f\x06]OD\x93\xb6>{zc\xc2\xb9\ +\xbb\xbb\xd7\xfb\xbc\x02%\x16a.\x11L\xcd=\xdc\xb4\ +G\xde\x19\xd1\xe9\xe9\xc7e*\x13\x04}\x88\xd5\xb8\x7f\ +w\x1c>\x9e\x81F\x8d\x7f\xc6\xc2&\xe5|+_\x9b\ +\xa6\x14\xac\xe8\xa6\xe3\xd6y\x00\xfdb\xabT\xf4\x8f[\ +[\xed\x8b\xaa38x\xde\xab\x8fu\x1b\x11\x0d\xd7>\ +\xa4\x0c:+Z\xe3\xfeU\xa60A\xd0\x8f\xa2\x19\xce\ +B\x9b\xf9\x18\x06\xd6j\x18a\xfb\xeb\xdaf\xfb\xf8^\ +wc}\xbe\xbe\x1fU\xa0\xad\xf5\x8e$\xc2\xcc/[\ +\xeb1\x90\xb6\x19g\xf6\x98\x83\x86\xee^39\xcd8\ +\x86\x80J\xed\x93\xa6\x80\xf3\xa25\xe9\xf92u\x09\x82\ +\xbe\x14\xd7:\x8bS\xc0X\x86>\xde\x223\xdf\xbf\xb4\ +!\xff\x8b\xee\x14\x9c\xe8&\xa7F\xf70A\x7f&B\ +t\xcb\xbf\xf4\xf8'\xc5\x09\xe7\xe5\xee^s\xf5\x05(\ +6\x0c\xaa\xd5\xb9?.3<&L\x8a\xd4\xd8u2\ +e\x09\x82\xfe\x94\xd6\xd8o\xbb\x8e:\x8c\xc1\x1f\x84\xfd\ +Y=\xc6]\x8f48\x17\xeaV\xd2\x11R\x1c\xa3}\ +\xea\xcfCY\xcfR\xf3\xc5/3\x95\xfd\xea\xc1\x98\xae\ +\xb2\xeeP\xc0\xf7u.|\xc1\x8cx\xa4\xd6\x9e!S\ +\x95 \xe4\x9f\xa3a\x18\xee\xa2\xf0v)\xe2j\xb3\xc6\ +\xf9y\xa1\xbc\x0fUH]\x83z\x94\x9a\xf7m'\xb8\ +\x1f4'\x9d\xa9\xc8,T}\x08\x01\xdf\x83\xdeq\xe5\ +kEp\x05!?\x89\xcdH-O1\x1d\xcf\x8cu\ +\xe1[\xec\xf3\x8f\x0aIp\x0bJtO-\xb7~E\ +D'o}$\xc6f\x9c\xd5kv\xf7\xb3\xfcVT\ + f\x12f\x91\xc6EF<\xc6\xedV\xad\xf3+\x99\ +\x9a\x04!\x7f)M\xd8o\xb9\xec\x9d\xce@2,\x09\ +\x9b\x0c\x9co\xd5:\xb7\x17\xda\xbbP\x05\x92\xa9\xee\x93K\xeb\ +\xedS\x0b!qA\x10\x84\xaf\xb0\xe3\xe6%\xa4\xe8\xae\ +\x80\x16\xfa+\xd2L\xa7\xe4[\x95)\xf1t7\x93\xac\ +\x8a\x0d1\x89\x1e\xdeNp[\x5cO]\x9a\xb1\xe1,\ +\xbeCW\xc1\x05\xf3k\x8di\xfb,\x11\x5cA(<\ +\xac\x84\xf3G\xcf\xc3\x0d\x01\xac\xf4_J\xb33\xa6\x90\ +\x05\x17\xc8\xe3\x86\x07k'\xa3\xb4X\xe1\x19\x22\xda\x0b\ +\xdbnb^\x1dM\xd8O\x22\xb3p\xf59J\xe1j\ +MC\xca\x9f:i\xf3\x98\x9e\xb3\x9c\xb52\xfd\x08B\ +\x81N\xfc\x8b\xbd\x05G\x1e\xa8v'\xa2o\xe6h\xde\ +y\xe8\x0bvN\xef\x93\xc8\xdf\xa2\x17\x9d\xc5D\x9ef\ +*\xf7\xb4\xcc\xfbA4j\xbb7\xbfx\x09\x9c\xdf!\ +\xc3\x8eD\xa4\xf0\x1bM\xcf\xe2nH\xb94\xbetV\ +r\xa5L;\x82\x80\x82n\x92p\x12;\x17\xef\x07\xb3\ +\x94\x88\xce\xce\xe2\x9c\xd3\x0a\xe6\x9fX\x09\xe7\x8fbu\ +\xe4ox\xf9\xd4\xde\xd6M[g*\x7fYm)\xe5\ +R|t\x02N&\xd7.\x8eZ\xd5\x04\xec\xa6cy\ +G\x97\xbc\x8a\xd2\x19\xf6\x9b\xf2\xd9\x0b\x820:\x01g\ +\xd1{\xce\xf9\xcc\x9c\xa5\x84&^\xc2\x1eF\x8b\xe0\xe6\ +\xb9\xe8\xa6+\xad\x0b\x94\xc2Um\x88\xce\x9d%3\xec\ +W3\xb9vjJd\x1f\x22\x5c\x0a=\xcf\x06]\x1e\ +\xabq\xff.\x9f\xbc \x08_2v\x01\xdcE\xef9\ +\x172\xf3\x0c?\xcf\xdfz\x8c\xdbW&\x9d\x83#\xd3\ +\xedw\xc4\xca\xc8\xdf\xec\xe5\xe6JkT\x84\xf0o\x02\ +\x8a\xb7\xdbO\xf8\xb8\xd1v\xf6\xed{\x0f\x9a2\xb9\xbe\ +]i=I\x84\xf1\xd0\xef,\xee\xdd\x91Z\xfb\x12\xf9\ +\xdc\x05Ah\xa7\xebZ\x1c\xa0\xdf\x13\x10\xc9 \x9e\xfc\ +\xba\xed\xe2\xb2\xa2\x19\xceB\xb1h\x9e{\xba\x8dS\xd0\ +;\x02~d{\xc1\x05\x00\xd7\xe3\xaaL\x0579\xcd\ +\xf8\x8e\x8e\x82\x0b\xe0\x9f\xcb\x1a\xec\xef\xcb\xa7.\x08B\ +{X5N\xc2a>\x96\xc1\xcb\xbb\xd1p\xfe#\x8f\ +1e\xe1{\xceh\xdd\x05\xb7)n\xed\x9b\xae\xb4n\ +\xb6+\xcdy\xe2\xe9b\xe7\x89S\xa7\xf5\xb1\x1e'\xe0\ +\x846\xb2\xe6\x1e\xb0j\x9d\xf32\xb9\xfe\xdb\x15\xb0\x86\ +\x97\x9bK\x88\xe8k\xd0+S\xf9\xe3\x149\x07\x95\xd6\ +\xe0\x0b\x99R\x04A@'\x1b\xb8\x94\x17[W\x12\xf0\ +}\x22\xf4\xea@m\x17y@\xed\xb2\x06\xfb!\x9d\x8f\ + ~\x16G\xd1.\xca\x9cL\x8c\xf8\xd6\x09\xb8)\x17\ +\xfb\x97L\xb7\x97@\xb2\x97\xb7\xe5\xf4>\xe6O\xd1\x96\ +\xe0\x02\x1b\xd3\xecd\x5cqixo\xb3J;\xc1\x05\ +Z\xd2D\xa7\x8a\xe0\x0a\x82\xd0\x156\xb5\xd6\xb3\xab\xd7\ +N\xc6m=L\xeb\x14R|\x1c1\xbe\xc1@O\x02\ +\x9a\x98\xf0>\x18\xcf{P\x7f\x8b\xd6\xa6\xdf\x87\xe6\x11\ +\xd2b\xcb\xbc\x14L\x97\x11\xd0o{7\xd4R\xa8\x04\ +p\x89x\xba[\x91\xaa4\xc6+\xa8'\x88v\x0c\x95\ +3\xf8:\xab\xc6\xb9\x09\x19v&\xeaQj\xbdO\x84\ +~:\xd9\xc5\xf3pQ$a\xcf\x91)D\x10\x04\xa1\ +\x0d\xcf\x96\xcc\x1f\x81\xe8*\x02\xca\xda;f\xd9h\xdb\ +\xbbg\xba=\x89|\xd9\xd3MV\xc5\x86(Rs\xda\ +\x14\x5c\xe6\x15\xf5\xcd\xce\x1d\x99\xde\xa3\xac\xd4\xfa\xb1v\ +\x82\xcb\xa8\x15\xc1\x15\x04A\xc0\xf6\xe7\x93)]eU\ +\xec\xa2\xccw\x88\xe8\x86\xf6\x04\x17\x00\x88\xd0\xa3g\xc4\ +<\x17\x12^\xde\xb4R1\xe1<\x0cP\xdf6W(\ +\x1e]\xb1)L\xd2}\x9a\xa6\xa2\x1f\x11~\x04\xbd6\ +r\x17\xafip~ \xc3K\x10\x04\xe1+\x9a\xa7Y\ +\xfbE\x15\x12\x00\xc6t%\xc8K\x8c*\x00\x89\x82\xf7\ +tw!\xf3\x0f\xc0NK\x98\xfd\xfb\xa6\xe9v\xc6\x99\ +g\x11\xd3\xba\xbe\xa3\x95P\xc8*N\xads\xd88s\ +P]8\xdaw\x09\x82 \x84\xc1AKWZ\xd5\x11\ +\x03/\x830\xa6\xcb\x17 :\xa0%n\x8eA!{\ +\xbav\x95\x19'\xd0\xe4\x9d\x1d\xcc\xb6=\xfeA5\xc0\ +\x99\xdc#95\xba\x07\xc1\xab\xd4(q\x8a=\xd0\xc4\ +X\x22\xf5\xa1\x0c3A\x10\x04 \x197\xc6\x1a\x8a\xee\ +!`\xcfL\xaec\x11\xaa\x00\xbc\x5c\x90\x9enK\xdc\ +\x1c\x03\xa6\xdf\xb5\xe3\xee\xddW\x9cp26\x8ea\xb8\ +?\xcd\xe8\x90x\xeeE\xf7\x0f\xd1\xda\xf4c2\xcc\x04\ +A(tVT \x96\x8e[\xbf2H=K\xa0=\ +3\xbf\x22\x9d\xdd8\x05\xbd\x0bNt7NB_K\ +\xa1ng-\xf5\x18hq\xd2\xe6\xb5\x19\xaf\x8e&E\ +\xf7\x04\xd1\x05\xfaX\x86\xdf\x5cSo_)CM\x10\ +\x84B\xa79n\x1d\xb0[\xb9\xf9\x8aR\xb8\xaa\xad$\ +\xdbnI.\xa1\xa8\xd84/((\xd1\xad\x06(\x16\ +\xb5\xe6\x12hp;{\x9a\xb7\x16\xf9\xd0A\xc7\x88\xba\ +\xd7\x10`i\xb2\x8f\xdb\x9a\x04\x9d#\xfb\xb8\x82 \x14\ +2\x0b\xc6\xc2\xb0\xab\xcck#\x0a/\x81h\xa4\xdf\xd7\ +'\xc2\xe4\x82:\xa7k\xc7\xcd\x9f\x90\xa2[\xdb\x11\x9f\ +\xcf\xd75\xd8{\xf5\xabCs\xa6\xc7\x90\x0c\xb8Ku\ +\x09-\xb3\xc7\x97J\x17\x0fA\x10\x0a\x99Ted\xa8\ +A<\x07\xc0\xa1Y\xbd\x8f\x83\x033m\x9c\xa3\x85\xa7\ +\xdbRe\x1e\x04E7v ?\xbf\xceTp\x01@\ +\xb1{\x8d6\x82\xcbx\xe2\xc6\x84s\xb7\x0c9A\x10\ +P\xc0\x8d\x1a\x14\xf1\xeb\xd9\x16\x5c\x00\xb0\x0cL\xca{\ +O\xb7!\x8e\x1ee\xca|\x95@{\xb7\x93D\xb4\xaa\ +\xbe\xd9\x1e\x9a\xe9\xb9\xdc\xd6I\xb1\x81f\xd4\xfd@\x07\ +\xd1eF}\x9a\xed}K\x12X-\xc3N\xd0\x89W\ +\xe20\xbf\xc1\x91=\xa1\xdc\x11\x04\xd5\x9b\xc0=A(\ +\xd9\xea\xaf41\xa8\x89]\xda\xc8\xca\xdd\xe0\x115\x1a\ +\xac\x9a8M\xc9\x94J\xado6\x90\x1c\x90@k>\ +\xd8\xe2\xf3\x0a\x94\x94\x94\xa0\xd40\xa2\xa5\x9e\xe9\xf6R\ +\xcce\xc4F\x19\x19\x5cF\xe0\xd2\xaf\xe68ja\xf6\ +\xea]\xa6z\xdbu\x96\xf5\x9c\x89u\x85\xfe\x1d5O\ +\xc4\xae\x91\xa85\x83\x08'\xe50a\xb5\xe1\xd3\xa4=\ +`\x8f\xd9H!_\x8f\x0c\x95\x91Y\xdb\x9e\xe0nV\ +\xa0_e*\xb8\x00`D\xdc\x1f\xe8\x13V\xc6\xa5%\ +\xd3Ep\x05hrt#\xba\x97A\xeew\x89h\x02\ +\x03c\x08\x1c\xf9*\xd0Fm{\x03\x06c\xcb\xdf!\ +\x06\xa2\x0c\x13\x16J\x008U\x00\x03\x8d`x\xd0\xb7\ +\xb1j/\xda\xf2\xe3\xbdM\xbf\x9a\x08_\x9dv\xa4m\ +\xedA\x0a\x06\x01\x96\xb2\xd8\xae\xe4\xa5\x00^\xf2<\xf5\ +\x97\x7f/K?9v\x01\x5c\x14V8\xf9d\x05\x9e\ +\x9e\xebj\x81\x04\x94\x0f\x88X\xa7\x00\xdd\xaf\x03A!\ +oH?Y\x11fv\xd0I\xe7\xd3\xd5\x0d\xce\xd0L\ +\x13\x89\xd6_\x8c^%\x9e\xf51\x11z\x84\xffx\x10\ +\xff\xc9\xaaq\xce\x96\xa9\x5c\x08;\x1b\xe3\xe8\x13#\xf3\ +\x0e\x10\x9dC\x80!\x16\xc9\xca|\xf0\x8e\x0b\x5c\x12\xab\ +q^\xc8\xf7\xdf\xbav2J{F\xcc\xdf\x12hZ\ +\x80Q\xc6\xa7\xadZ\xfb;\xc8\xb7=\xddTed(\ +\x01wv\xe2\x8b\xbb\xc9\x8f\xcc\xdd\x12\xcf\xac\xd2Bp\ +\x19\xab\x93\x9es\xa9L5B\xe8\xbd\xdb)\xd1\xbdc\ +d\xbeFD\xe7\x8b\xe0f\xd3\xfb\xa2\xaf\x1b\xa0g\xd3\ +U\xd6E\xf9\xfc;[\xab\xcc\xc3zZ\xe6kA\x0a\ +\xeef\x83\x1f\xdb:)60\xafDw\xc1X\x18\x06\ +\xf8^\x22\x94v\xd4/v\xf9\x0agF\xa6\xf7[>\ +\x11Q\x10]\x0e-\x9a\x19PUY\x02\xf52\xd5\x08\ +\x08\xf9^\xa5a\xba\x7f#\xa2Ab\x8d\x9c\x84=\x0d\ +b\xcch\xa92\x0f\xca\xb7\xdf\xd68\x05\xbd\xd3\x95V\ +\x8d\xc9\xf4/\x22\x1a\x1a\x06[\x9b\x11\xe7\xa2\xbc\x12\xdd\ +\xc3G\x98W\x83pX\xc7^\x1f\xdd8\xec)\xa43\ +\xbd\xdf\x80\x88u>\x01\xbbi\x10F\xfas4\x91~\ +T\xa6\x18!\xec\xf4\xeac]\x17\x86\x09\xb2\xa0\x84\x97\ +`F@\xbf\xcd\xa7\xdf\x94\xae\xb4\xce.\xb6\xac\xff)\ +B\xa5_\x85.|bbu7\xb7gC'\xba\xcd\ +S\xado\x82\xe8g\x1d\x0b.\x7f\xb8l\x9d=\x1b>\ +\x14\xddP\xc4?\xd4 \xac\xbc\xdeN;\x97\xcb\xd4\x22\ +\x84\x9d\xd5\x17\xa0\x98|n\xfc-t\x9a#\xd2\xd3\xac\ +\xaf\xeb\xfe#Z\xaa\x8a\x06\xd8U\xe6|Ex\x90\x80\ +]\xc3\xb7\xc0\xa1\xa1WU\x99\x87j/\xba\x9f\xc5Q\ +\x141yng\xaaA1\xd3M#\xeb`gz\xcf\ +\xab\xab\x8c\xb1\xd9\xa8^\xe2\xff[\xe6\xab\x8a\xef\xc1*\ +\x99S\x84\xb0\xd3\xbb8r,\x01=\xc5\x12\x01M\x15\ +\x8a\x8f\xd7\xf9\xf9S\xf1\xc8)\x16;o\x13\xe8\x940\ +?\xa7\xc1t\x8e\xf6\xa2\xdb\x97\xac\x9b\x08\xf4\xf5N\x9c\ +\x95Z\xf5Y\xda\xbe\xcf\x17\xc3\x81\xbe\x87\xf0\xc7\x95\xff\ +uc\x8d3]\xa6\x13A\x8f0'\x1f(V\x08\xf4\ +\x0d\x8c\xd3\xf5\xc9\xedJ\xf3J\xa5\xf8\x11\x22\xf4\xd2 \ +\x9c_\xb1`l\xd7\x13\x04C#\xba\xadS\xcd#\x08\ +\xe8d\xf8\x94\xff\x90\xc9\xe1\xe4-\xf7\x8c\xc7\x06\x81\xe9\ +\xe4\x90w\x0fJ\xbb\xa0\xca\xea\x0c[\x15\x0aB\xee\x82\ +2<\x5c\xac\x10\xe8\x0b\x18\xaaie\xa9\x1f\x10\xd1-\ +\xa4Iyb\x02v=d\xb81NK\xd1\xfd,\x8e\ +\x22\xd3\xc0\xcc\xcel\x943\xd0\xdc\xda\xe2\xd4\xf8\xe2\xe5\ +\x92[E\x14\xee\x02!\xcc\xb8#Z\x9b\xfe\x9f\xcc$\ +\x82FGX\xf6\x16+\x04\xfa\x06\x06WkTW\x1f\ +\xd8\xdc\xb2\x15\xf4k\xdd,mP\xd7C\xcc*$a\ +\xe5\x9f\x13\xd1\xf0Nz~\xf7\xf4\x98\x83\x06\xf8pL\ +\x88\x80i\x08\xb5\xe0\xf2\xa7\x1bl\xfb\x972\x89\x08z\ +\xc1\xc5b\x83@=\xb0\xe2K*\xa0\x91\xe4\xa8\xee\x00\ +\x00 \x00IDAT\xd5;\xb0\x88~\xa1Kg\xb7\ +\xed\xac}\xda\xf2\x89m\xb7\x9a\x0d\xad\xe8\xb6\xc4\xcd1\ +D\xf8Q'\x05\xd7\xf5\xb9\xdc\x18GDCBMv\xdaF\x1az\xce\xc4:0?\ +\xa0\xb1\xf1\xbf\x91\x8cG\xf7\x0aTt[\xaa\x8a\x06@\ +\xd1\x95\xdd\x08\xb9\xfe\xd5\xaf\x04\xaa\xcf\xe2(\x02\xe8\xf8\ +Pz\xb9\xe4\xfdTf\x09A\x10\x84\xcds\xa2\x8b{\ +u~~C\xb9\xe3\x03\x15]\x0b\xf6\xcd\x04\x94t]\ +s\xe9A\xbf\x9e\xa1\x0f\x22\xc7u\xe7\x19r\xe0\xe5\xbe\ +\x14\xabq\x9f\x97a&\x08\x82\xb0\x89\xc7\x1b\x9d\x17\x99\ +\xf93\xe8\x9bHxL`\xa2\xdb\x5ci\x8d\x02\xd3\xf9\ +\xdd\xc8\xbekjh\xb5\x9f\xf0\xeb9\x14y\xa7\x84\xf1\ +\xdd\xb8\xe4\xdd CL\x10\x04\xe1+\xce\xac\x83\xc7\xa0\ +G\xf4\xfd\x054v\xc1\xd8\x9dw\xce\xcb\xaa\xe8F\x88\ +o\xe8^c\x01\x9e\xdf\x7f\xae?\x9b\xe9\x0b\xc6\xc2\x00\ +\xd1\x84\x10.\x87\x96\xdc\x5c\xe3>)CL\x10\x04a\ +[<\xf2\xfe\xa2q\x97\xad\xdec\x86\x99\x07\xe4\x5ct\ +[+\xcdC\x08\xdd\x13;\x8f\xd8\xb7>\xb2\x07\x0f5\ +\x0f%\xa0o\xf8\x0e\x82\xd3\x8d\xd5\x92\xb1,\x08\x82\xb0\ +\x03/\xbd\xeb\xfe\x93\x19\x9f\xeb\xfa\xfc\x96\xb1\xf3\x10s\ +\xd6D\xd7\x04\xdd\xd8\xcd\x83\xdd\xf5\xef\xd7\xbb\x7f\x87o\ +\x9b\xda\xe1K\xa0b\xe6\xf7\xe6\xd7\xdb\x7f\x91\xa1%\x08\ +\x82\xb0#c\x17\xc0\x05X\xe3\xda\x05\x94[\xd1MN\ +3\x8e!\xc2\xb8n\xf6\x92\xad\x1bY\x07\x1b\xbe\x9d\x9b\ +\xc2wB\xf8Fn\x97\xeaS\x82 \x08h\xaf\x1a\xe1\ +\x9f5~\xfc\xc3w\xd6u(+\xa2k*uC\xf7\ +\xc3\xae\xfe\x85\x967NB_f|3d\xbd.\xd7\ +\xd6\xb78RcY\x10\x04\xa1\x1d\xde\x82\xfb<\x03\x0d\ +\xba6\xb6\xef\x1f1\x0e\xcd\x89\xe8\xa6*\x8d\x93@8\ +\xa4\x9b\x82\xb4\xea\xb1z\xe7_~=K\xd4\xb2\xbe\xdd\ +\xbdD\xae\xac\xd6E\xad\xf5+IL\x10\x04!_\x19\ +\x9d\x80\x03\xf0\xd3\xba>\xbf\x82:&'\xa2k@]\ +\x97\x81\x22\xfd\xd5\xcf\xb0+\x11\x1f\x1f2/7\xed\xd8\ +\xf6]2\x9c\x04A\x10:\xd5\xee\xf4I}KB\x22\ +\xfb\xa2\x9b\xac4\xc6u\xd7\xcb\x05\x00\x0f\xeaq\x9f}\ +\xfc\xa3C\xf6\x09=\xe0W\x95-A\x10\x84|'\x95\ +\xb2\xff\xc6\xacg\xfe\x0b\x03\x07\xb6\xb5\xaf\xab|\xf6r\ +\xaf\xc9\xe0\x01\x93\x8d\x0d\xe9g\xfdz\x96\xe4\xa4\xe8\x9e\ +]\xad\xf7\x9cml\xc6\x1fd\x18\x09\x82 t\x8e\xb2\ +YXK\xc0\xcb\xd0s_7\xd2\xcf4\xf7\xcf\x9a\xe8\ +\xb6\xc4\xcd1D86\x83e\xc1\xb3\xfd\xea\xfc\xeb\x8e\ +\xa1,\xef[![\xf6\xfc\xb7\xb8\xd6Y,\xc3H\x10\ +\x04\xa1KG,\x9f\xd2\xf5\xd9-\x851Y\x13]K\ +\xe1\xda\x0cM\xfbW\x7f\xab\x82\xf0\x91a2\xbe\xc7\xa8\ +\x95\xe1#\x08\x82\x80\xaeF\x08\x9f\xd4\xb8\xe3\xd3AY\ +\x11\xddTe\xe4k\xe0\xccJ-\xbad>\xe9\xf3\x8f\ +\xfdV\x88b\xfb\x8d\xeb\xd7\xd9\x0f\xc9\xf0\x11\x04A\xe8\ +\x1a\xbf\x9e\xee,fh\x9b\x0b\x93\x1dOW\xc1\xbb\x22\ +\xb3\xa39\xbc$V\x93\xfc\x18>\xb6\x13$\xd0\xde!\ +:&4\xd7\xcf\xd0\xb9 \x08B\xa1P\x0d0\x98\x9f\ +\xd1\xb4\x10\xf3\xf0\xc6)\xe8\xed\xab\xe86Ua\x17\x10\ +\x9d\x83\x8cB\xaf\xf4\x84\x9f\xbf\xd3p\xddC\xc2d\xf7\ +\xb4\x84\x96\x05A\x102\x89\x5c.\xd44\x99\x8a\xa2\x86\ +1\xdaW\xd1\x8d\xb2\x19' \x96\x99\xe8z\xcf\xf8\xbc\ +\x9f;\x06!J\xa0*M\xd8o\xc9\xa8\x11\x04A\xe8\ +\x1e)\xd0\x22h\xdb\xd4\x9e\x0e\xf6Mt_\x89\xc3\x04\ +\xa1*\xc3\xd0k\xaa\x01\xee\x7f|n\xadtPh4\ +\x97\xf8^\x192\x82 \x08\xdd\xe7\xb6\x1a\xfb\x1df\xd4\ +C\xcf\x03\xbb\x07\xf9&\xba\xa3\x94u\x1a\x81\x06f(\ +\x90\xff\x19\x90@+\xfc\x8b\xff\x13\x10\x8ez\xcb\x0c\xa4\ +\x93\x9e#\x09T\x82 \x08\x99\xee\xeb\x82\x17i\xba\xaf\ +\xeb\x9f\xe8*\xe0rd\xdcW\x16\x0b\xfc\xfc}\xd7L\ +\x8e\x0c#B\xaf\x90,q\x9e(Kh\xba:\x13\x04\ +A\x08\x17\x8b4\xdd\xd7\xddm\xc3\x85(\xcfXt\x9b\ +\xe3\xd6\x01\x00\x8e\xc8\xfc\xfc\xaa\xf7\x82\xaf?0\xc2\xa3\ +\xc3bl\xcfSsd\x9c\x08\x82 d\x8e\xa3i2\ +\x15\x00XQsD\xc6\xa2k\x11\xa6\xf9p\x94&\xd5\ +\xc0\xee\xbf}\x8e\xe9\xee\x17\x92\xd0r\xc3\xfb\xeb\xd2O\ +\xcaP\x11\x04A\xc8\x9c5Ig1\xb3\x7f[\x91\xb9\ +\xc40h\x9f\x8cDwE\x05b\x04\x9c\xed\x83\xdb\xfd\ +\xb2\x9f\xfb\xb9\x9b\xf7\x88\xf7\x0d\x87\x99\xf9\x91\x91u\xb0\ +e\xa8\x08\x82 d\xce\x1e\xb3\x91\x22\xc2\xeb\xd03\x99\ +*3\xd1\xdd\xb5\x8fu:\xd1\xb6\x07~\x11\x82\xfd\xdc\ +\xcd\xbf.\x14\xa2\xeb\x82\xe7\xc90\x11\x04A\xf0\x0f\x0f\ +X\x02-s\xa98\xb3\xf02\x01\x13}1 y\xbe\ +\xc6\xe8\x1b\xe2\xe8\x01\xd0\xa00\x84\x96?\xa8w\x9f\x97\ +!\x22\x08\x82\xe0\xa3xy\xbcDSO\xf7k\xdd\x16\ +\xdd\xd6I\xb1\x81\x00\xc6\xf9 L\x9cnq_\xf1\xf3\ +w\x15)s_\xdatd(\xe8\xba\x8f\x0fKhY\ +\x10\x04\xc1_\x1c\xd6\xd3\xd3\x05h\xafe\xe3\x11\xe9\x96\ +\xe8\x9a\x963\x99\x00\xc3\x07eZ\xdec\x0e\x1a\xfc\xfc\ +Y\x86G#\x11\x8e\xd0\xf2\x9fex\x08\x82 \xf8K\ +\xcav\xde\xd13\xbc\x0cs\xc8@kh\x97E\xb7\x1a\ + \x10.\xf2\xe99\x16g\xe1@\xd4\xb0\x1047\xd8\ +\xb0\xe2\x13\x09-\x0b\x82 \xf8M\xaf\xd9hd\xc6\xe7\ +:>;+\x1a\xd1e\xd1\xbd\xaa\xd2<\x98\x88\xf6\xf2\ +)\xc6\xbd\xd8\x7f\xcd\xe5\xbd\x02\xb7,\xf1\xdf\x87=\x85\ +\xb4\x0c\x0fA\x10\x84\xacx\x8dKu|n\xc5\xde>\ +]\x16]\x83\xa8\xc2\xaf\x07p\x99\xb3 \xba\xd8;\xf8\ +\xfdr\x7f;&\x09\x82 \x08[G\x13y\x99\x96\xcf\ +M4\xa4K\xa2[\x0d\x10\x81\xbf\xebSv/\xa7\x93\ +\xae\xef\xa2\xcb\xa0\xbd\x02\x0e-{i\xc7~J\x86\x85\ + \x08B\xd6<\x9b\xe5\x9a\x96\x83\x1c\xd8%\xd1\xbd\xaa\ +\xca<\x94@\x83}R\xa7\x8f\xfcN\xa2\xda8\x09}\ +\x89\xd0#`\xa3\xbeT:C\xcf\xfd\x06A\x10\x04M\ +<\xc6\x95z\x8a.\x0f\xea\x92\xe8\x1aL\xdf\xf5\xf1\xfe\ +\xbe{\xb9\x86e\xee\x15\x826~\x7f\x95!!\x08\x82\ +\x90=<\xf2V\xea\xe9\xa0S\xe7E\xb7\xda\xc7\xd0\xf2\ +f\xde\xf4]tY\x0d\x0c\xda\xa8\xb6\x87gdH\x08\ +\x82 d\x0f\x07\xeaSM\x13\xc0z\x7f^\x81\x92N\ +\x89\xeeU\xd3\xccC\x88\xfc\xab\xf4\xc4L\xef\xf9\xfd\x83\ +\x94\xe1\xed\x16p\x15\xaa\xc6\x97\x97:\x8beH\x08\x82\ + dQt\x93\xf6J]\x9f\xbdG\x8fh\x7f\xd5\xc9\ +\xac\xe5S|\xf5\x08\x95\xff)\xdf\xcc\x14\xa8\xe8\x82\xf9\ +\x85\xb1\x0b\xe0\xca\x90\x10\x04A@\xb6\xcf\xea6\xe9\xf8\ +\xecl\xba\xbb\x98\x9d\xf2\x22\x15\x9f\xe0WuE\x06\xb8\ +\xb9\xde^\x96\x85\x82\xd2\xfd\x03\xad\x00\xc9xN\x86C\ +a\xb0l<\x22\x03\x07\xc5v\x85r\x06\x11s1\xc1\ +\xe8I\xc4\x0a@\x94\xc0\xc5\xdb|\x16\x1e\xb9P\xd8\xb0\ +i]\xe6\xb52\x90\xf4\x986\x18P\x8d\x0e\xd2\x8d\x8d\ +@\xa3\xdf\x9d\xb6\x04!\xef!^\x03P\xa9n\x8f\xad\ +\xa0\xfau(\xba\xadSb\x83\x01\xf7\x1b>z\x84+\ +\xfb\xd5\xa19\x0bo!PO7\x05zVFB\xfe\ +\xb0`,\x8c\x83\xf6\xb1\xbeay\xd8\x1f\x84Q\x04\x0c\ +#\xf0@\x06\xf5'B\x7f\xc0\xdd\x94\xafN\xb4i)\ +\xb9u\x0e\xfb\xd6\xff\xa4\xda\xf8\x07\xda\xb4J3`\xa1\ +\x1f\x00\xbb\x0ai0\x1aA\xbc\x81\x18\xeb\x99h=\xc0\ +\x8d`42\xa8\x11\x84\x0d\xc4\xbc\x01\x84\x8d\x0cZ\xe7\ +\xb1\xb7\x81=\xda\xc0\x0ai\xc3V\x1b\xd9$\x87]r\ +\xd2Hn\xfc\xf2V\x9f\x7f\x86f)\xd2\x22\xe4\xad\xe6\ +\x82\xd6\x22\x04u\x19\xba\xbeV\xe0\x8e=]\xd3pN\ +\xf0\xd5\x83$Z\x9a\xa5\x1f\xb3\xdb\xa6\x090\x90\xf3\xb9\ +_\xdc\x96\xb0\xdf\x96\xa1\xa07\xeb'\xa2gI\xc4<\ +\x0fD\xe3A8\x92\x80\x9e\xdb\xa6\x1aRVb)\x04\ +D@\xd8\x05\xa0]\xb0\xa5c\x07\xe1\xab\xff\x0f|\xf9\ +m\x13\x00E\xea\xab\xea\xe7\x11\xde$\xfa\x0a\xb0`m\ +\xb9\xe6\x9eC\x00\xa7j\xcb\xf7\xd9\x0a\xe2z\x02-g\ +\xe6w\x98iQ\xca\xb6\x9f,\x9b\x85\xb5\xf2\xd6\x05h\ +Y \x03k\x89\xa0\xe3\xb1\xa1\x8e=](\x9c\xe0s\ +\xc2\xd1{\xd99\xae\x83>\xc1\xbd\x03\xfew\xf5\xb6\xee\ +\x8e\xa0\x11\xaf\xc4a\xee\xa7\xcc\xab\x01\xba\x9a\x80\x92<\ +,\x9bW\x04\xd0@\x00\x03\x89\xe8\x08\x22\xc4cQ\xcb\ +\xb5+\xf9\xe1\x94K\xbf,\x9da\xbf)_\x81\xa0\x99\ +\xec\xae\x0dCC\xb9n\x9c1\xee\xd5n\x22\xd5\x8a\x0a\ +\xc4\x00:\xc6\xe7~\x88K\xb3\xf4kz\x04\xb8|y\ +Q\x06\x81\x9e4\xc4\xd1c\x7fe=K\xa0_\xe6\xa3\ +\xe0\xb6\xe3]\x1bDT\x115\xf1\x9a\x1d7\xaf\xa9\xd6\ +q\x06\x13\x0a\xb8(\x15\xe9\x1a\xa5i\xff\xc8\xd0.\xbd\ +\x8c\xb1\x04\x14\xc3\xd7\x83\xcd\xfe\x8b\xee\xe6\x09#0\xd1\ +u\x5c\xfc[\x86\x81~|\x16GQ\x0f\xb2\x9e\x04p\ +\x14\x0avo\x0c\x06)\xba\xe9\xbaJs\xa6|\x11\x82\ +F{\xa3\xf5zF\x9d\xb8}\xd1UJ\x9d\xe8\xfbM\ +=\xf5\xb1\xdf\xd7\xbc<\x8e2\xa2\xae\xf7\x06\xf6)\x5c\ +n7&\x9dWd\x18\xe8G_e\xdd\x06\xc2\xe1b\ +\x09\x80\x88&\xd9U\xe6Ub\x09A\x93\xd5\xe2FM\ +]\xf4\xf6E\x97\x88\xc7\xfb}\xcfV\xcf^\xe5\xf75\ +\x8b\x10\xeb\x19\xdc\x8a\x0b\xaf\xf7\x9f\x8b\x16\x19\x05z\x91\ +\xac2\x8e&\xe0b\xb1\xc46_\xf3\x8d\xa9xd\x84\ +\xd8A\xd0`ot\xa3\xa6c\xact\xa7\xa2\x9b\x9c\x14\ +\xdd\x93@{\xfb\x9cq\xd6\xdas&\xd6\xf9\xfd3\x5c\ +\xe5\x06\x16Z\xf6\x80\x97e\x08\xe8E5@&\xab[\ +H\xf61w\x085+\xe5\xfdL,!\x84?{\x99\ +\x9a4Mj\xdc\xb9\xa7\xab,\xef[Y0\xd5*d\ +\xe5\xc01\x17\x07h\xc7\xd7e\x08\xe8\xc55\x95\xc6w\ +@8H,\xd1\xe6\xb4\xf0\xdd\x86x\xb0\xdd\xba\x04\xa1\ +\xe3(\xad\xdb\xa4\xe9ja\xe7\xa2K\xc4c\xb3p\xa0\ +9+\x85\xaa\x09[\x1dP\xcc1\x8e\xc7\x22\xba\x9a\xa1\ +\x88\xa6\x8a\x15v>\x96J8rl\x86'\x14\xa2b\ +I!\xab\xda\xe5R\xb3\x9ea\xf1\xf6\xf6t\xc9\xff\x8c\ +N\xce\x92\xa7\x1b\x94\xe82\xc3YO\x8e\x14\xc5\x80^\ +\x050\x00\x9a \x96hg<\x19|h\x86\x97(\x15\ ++\x0a\xc8j{?]\xf7t\xd1\xf6\x9en\xb2*6\ +\x84@{fa\xf3{Uv\xde\x00G\x02\xaa.\xf2\ +\x9e\xd4\xcd\xd5\x8b\xa2hd\x5c\x90\x91\x11M\xaa\xe6\x0c\ +\xcbh\x9c+*\x13+\x06\x1a{\xcd\xfbH\x83\x05\xd8\ +\x9a\x8e\xae\xe26EWy\xee\xb7\xb2t\xb6\xea\xb3\xbc\ +\xf2te?WGA9F\xac\xd0\xe1x\xdaC<\ +]\xad_`1\xf2\xbf8\x86\xad\xe9\x83\x9bj'\xfb\ +\xb9\xdf\xca\x92\xa1\xb2\xe3\xe9\xc2\xb0\x02\xfa\xb8\xdf\x91\x11\ +\x0e\xcd\xf6s\xb1\x9fX\xa1\xc3\xc5d\x8f\x0c\x176\xe2\ +\xe9\x06\xbbq\x98\xf7\x95\xd5\xd8!G\xd7U\xbf\xda\xc9\ +\x1fdKt\x1b\xf3\xe9\xc5{\x9eZ*#\x5c\xbbB\ +\xe9#\xc5\x0aY\x9f\xb4\xc5\xd3\x0d\xf8X\x8ax\xbaa\ +n\xef\xb7\x1d\xad\x93b\x03\xfd>\x9f\xfb\xd5Xv\xb3\ +\xb4\xf9\xed\x06\xf2\x02l\x8f\xdf\x93!\xae\x0f\x9fW\xa0\ +\x84\x08\xbd\xc5\x12\x9d9~.\xa2\xab\xb1$\xe5}x\ +\xd9\xb3\x92\x8e\xa6\xab\x85\x1d=]\xc3t\xb3V\x16\xcf\ +s\xb3\x93q\xc6\x01l\xaa3\xc3\xdb\xa0\xec\xf7e\x80\ +\xebC\x8f\x9e\xd1]\xc4\x0a\x9dJ\xbeHf\xb8\xba\x16\ +\xd1\x0dv{ \xffE\xd7\x86\x83|\xf1t\xa1p`\ +\xb6nfx*[\x07\x9a\x03\xf0ty\x85d.\xeb\ +\xb6\x9f\xeb\x15\x8b\x15:5k\xa72L\xc4*\x11#\ +\x06J,\xef\xc72o\xe9(\xad\xdd\xe8Rm\x0c\x98\ +\xd1\xd9\xba\x9bK\xc6\xc6\xfc\x89\xef\x93\x84\x96\xf5\xab\xd7\ +\xea\x8a\x15:\xb5'\x98\xcc\xcc\xce,\x9en\xb0o0\ +\xef\x8f\x0cQ\xac\xc8\xc8\x0bO\xb7\x1a \x10\xbe\x99\xad\ +\x9b%U\xeb\xc6,-\x1d\xd2\x01\x84\xe0>\x96\xc1\xad\ +\xdb\x12S%\xc5\x0a\x9dR\xcdT\x86\xab\xe0\x88\x181\ +d\x11\xcc|\x13]\x9b\xcd\xbc\xc8^\xbefrd\x18\ +\x01=\xb3\xb4\xcf\xc0\xcf\xacCSv\xb2\x88\xa95\x80\ +T\x93\x952\xb6\xf5b\xc5\xc7\xc9U\x0c\xb0X\xa2\xc3\ +\x89\xa1%\xc3\xf0rJ\x8c\x18\xe8\xaa\xa9\xa5\x00\xaa\xa6\ +\x99\xc8\x87\x15\x11Ext\x16\xf7\x89\x9a\xcf\xac\xcb8\ ++\xb2M\x0c\x18\x8d\x01\x84*Et5c\xd8SH\ +\x03X-\x96\xe8\xb8\x1bX\x86\x97H\x8b\x15\x83\xcc\x83\ +\xcb\xffV\xa3\xc4\xackx\xd9S\xdb\x09\xe3\xe8,\xae\ +\x9e\xb3V\xa0\xba\xa59\xb9>\xe7\x96co\x85\x0co\ +-%\xe5\x15\xb1Av=%\x06}.6\x0ctS\ +\xbe>\xdf\x7f\xa2mpD\xd7\xb1\xa5\xb6\xab\xd6s`\ +6\xcf'e\xeb\xd2\xbf\xbf\x1fM\x0c\xb8\xb9\xfd\xae\x0d\ +\xf1t\xf5\xcc\xcc}Q\x8c\xd0\xf1:6C#K\xbe\ +C\x90\xae\x14\xe3\x7f\xc8\xfbMk=\xcf\x22\x13c\xe3\ +\x16\xd1\x9dW\x01\xc5\xc0\x01\xd0\xb3)9\x83\xb1!\x97\ +\xf7ljJ\x8b\xe8j9!\xa9G\xc4\x0a\x1d\x92\xe9\ +\x19H\xa9\xd4\x16l\xae\xce;\x05 \xba\xa5\x9aF!\ +\x9a\xb6\x88\xee)=\x22\xc3\x09(\xd38\xc8\xdf\x98\xc3\ +=\xafT\x9f\xfb\xb1Q\x86\xb7~D\x13\xe9\xf7\x00H\ +\x889\x8b\xa4\x99\x9e\x13+\x04\x87\xcdx\xa9\x00\xf6\xad\ +K4\xcd\x97\xf8\xca\xd3\x85\x85}\xf4^\xdd\xd1\xda\x1c\ +\x9a\xae^\x86\xb6\xbe\xb8L\xbf\x14+d\x8f[\x13\xf6\ +\xeb\xcc\x92\xb0\x16\xcc\xa4\xce\x1f\xff:\xe1\xfc7\xff\xbd\ +y\xa5\xe9Yp\xfeJt\x15\xbc\x11\xd9V\xc5,\x97\ +\xb4\xfc4\x87\xc5\x03Dtu\xf6vk\xd3\x8f1C\ +\xbc1do\xbb\x87\x81\xe9b\x89@\xb8\xb3\xba\x10\x8e\ +\xc5\xb1\xb6U\xcf\xbe\x0a/\x831B\xef\x15\x1e}\x96\ +\xbb\xbb\x91\x88.t\x0f\x81\xda\xe71\xb0J,\x91\x1d\ +66\xd9\xb72\xf8\x13\xb1DN'\xc17\x96\x7f\xe2\ +\xdc\x85\x82H\xd0\xe6\x1e\x9aV\xc5\xfb\xca\xd3%\xa2}\ +4\x7f\x09\x9f\xe50\x84#\xa2\xab9%\x09\xac\xf6\xd2\ +4\x96\xc1\x1f\x885\xfc\xa7\xcf\xfd\xd8\x98\xf6\xe8T\xce\ +q\x82c\xe1&\xe5\xf3'\x0e\x99'o>\x8b^\x00\ +\xbf\x97\xfah\xfa\xe0_y\xba\x0c\xcd=]\xd0\xa79\ +\xbc\xdd:\x19\xe6\xfa\x13\xbd'\xbd4\xe99\x07{\x8c\ +?p M3\xf2}ac\xbf\x96b\x1c\xce\xe0w\ +\xc5\x1aY\xeb(\xc4\x0c\xfeS\x0a\xce\xe8XM\xf2\xe3\ +\x02J\xd1\xee\xa3\xa9s\xb8\xd1\x04\x80\xa6*\xecB@\ +y\x96\xbf\x0e3\xcb\xc5*>S\xa4r\x15\x22\x90\xee\ +ByBY\x02\xf5\x80}YrJ\xf4\x0eez\x17\ +(\xf0\x19 \xda\xb7\x8b\x13\xdf*b\xac`\xf0\x0a\x06\ +\xad \xe6O\x99h\x8d\x07o\x95Cj\x15\xa7\xec5\ +e\xb3\xb0%\xd1oE\x05b\xe5\xbd\xd1\x8b\x949\xc8\ +d\xda\x8f\x88\xc7\x80\xe9t\xd2t\x22i\x8f\xd2\x84\xfd\ +\xd6\xb2\xf1\xd8o\x8f!\xe64bTu\xd5\xb6\xdbe\ +~\xae\x03\xb8\x15@RS\xa10\xc1T\x06B\x09\xa1\ +\xfb\xf5\xa9\x19H\x12\xe3Uf~\xc2s\xd5#\xd1\x99\ +\xf6\xbb\x85Wu\x8b\xfb\x80\x08\x1av\xaan4\x01\xc0\ +p\xcc\x110\xb3\xfe\xc1e\xf58\x129\xc6\xc7\xb08\ +W\xcbK\x11\xdd<#63\xf5\x01\x80j\x00\xd5\xeb\ +/F\xaf\xa8c~\xcd \x1aF\xe0R\xa8\xcd\xdf\xae\ +\x87$\x1353\xd1Z\xcf\xf1\xd6*C\xad^\x95J\ +\xaf\xd8cv{\xb5\x86w\xac\xd92\xa8\x0eI\x00\xab\ +\x01g5\x80\xff\x02\x98\xf1v\x05.\x1d\xda+2A\ +)\xeff\x22\x1a\x8e\xbc+\xbf\xe9\xdc\x05\xe0\xae\xa6\xa9\ +\xe8g\x19\x91C\x14\xbc\xfd\x18\xd4\x9b\xc0=\xb1\xa9\xff\ +\xeb\x06\x06%\x014\x12\xf3\x17\x0cZ\xe32\xafV\x9e\ +\xfa\xbc\xd5M\xaf\xea5\x1b\x8d\xc8\xafd3\xfa\xe1\x14\ +\xf4\xb2\x181\xc3\x88\x94\xba\xca\xeb\xa1<\xeeE\x86Q\ +F\xcceD\x5c\xb4U\xbe\x8a\x07B\xa3\xe7z\x0d \ +\xf3\xa3\xc7\xd6\xa5\x96g\xab\xa4\xaeF\xb2\xdbW\xcf\xa6\ ++\xb4\x9a\x00 \x1d\xb7\xa6(\x85\x19\xd9\xbe\xe1\xaaz\ +\xbbh\xf3\x84\xe3;\xcb\xc6#\xb2\xc7\x10\xab\x85\x90\xfd\ +>\x8b\x1e\xf0\x8bH\x8d\xfd3\x91*!\x1b\xdf\xf1\x90\ +!\xd6u\x04\xfc\x94\x90\xdd\x8c\xffvr\x16fY\xb5\ +\xcedy\x1bBXq*\xcd% \x1a\x05\xed\xceP\ +\xf3Qj\xb3\x17\x9a\x93\xfd\xdc\xde=\xd1#\xab\xabi\ +\xceM\xf99b\x16OW\xc8\xdaw\xbciA\xc7U\ +\xb9.m*\x08\x1a\xe5\xf0\xf4\xd3\xf1\xb9\x95\xa7V\xab\ +\xcde\xc3\xf6\xc8\xc5\x0d-#\x92\xe54oZ\x96\xa3\ +\xbd\x19\xe9\xcb*dw\xac\xd48\x09\x80\xaf\x13K\x08\ +\xc2\xb6\xbc]\x01\x0b\x80\x96\xa2\xdb\xd4\x92\xfeRti\ +@NB\x02nv\xcfV1\xb0,G\x9b\xe1\xd2\xba\ +L\xc8:\x8f\xd4;\xb7\xa2\x00J\xfa\x09BW\xd8\xbb\ +Ol\x00\x11\x14\xf4\xcb4o\xees\xff\xe62\x90L\ +\x9c\x13\xd15L.\xcbr\xa1\xef\x5cy\xbaJ>}\ +!\xdb\x9cY\x07\xcfa\xef\x1a\xb1\x84 l-^\xce\ +\xee\x9a\x16/Y\x05\x00\xaa\x1a \x80v\xcb\x89V\xb9\ +*\xab\x9e\xae\x9b\xab\xee\x1a\x0c\x92O_\xc8\x05\xb1\x84\ +\xbb\x80\x0b\xa0k\x8c t\xday\xf3h \xb4<\xa3\ +K\xab\x01@\xfdx\x12\xfa\x10\x10\xcb\x87\xd2]6\xbb\ +\xaf\xe5\xc8\xd3\x15\xd1\x15rY\xe2\xb4N\xac \x08[\ +\x22\x9a\x035mF\xb1\xc9\xd3%\xc3\xda-\x87\xc6\xea\ +\x9b\xedB\x07\x0c^)\xe1e!\x9fp\xc1\xcf\x8a\x15\ +\x04a\xcbY\xd7\xc1\x9af\x5c\xaf\x01\x00e\x92\xb7{\ +\x0e\x8d50\x07\xe5\xa2^\x97\xf0\xb2\x90O\xd8\xad\xce\ +\xdbb\x05A\xd8\xd2Kw\xa8\xa6% ?\x01\x00\xa5\ +\x0c\x95KOwP\x0e2\xc4r\x11b\x8e\xca\xa7/\ +\xe4\x8a\x1es\xd0\xc0,\xed$\x05a\xf3,\xaf\xa5\xe8\ +z\xac\xde\xdf\x14^\xe6\xdcd.oZ\xa1d\xdf\xd3\ +e/\xfb\x9e.\x83J\xe5\xc3\x17r\xbbJ\xc6R\xb1\ +\x82P\xe8,\x18\x0b\x03D{\xea\xf8\xec\xb6\xcb\x9bD\ +\x97A\xfds\xd8~*\xeb\xa2\xeb9\xea\xe5\x1c\xfc\x94\ +2\xf9\xfc\x85\xdc&a\x88\xa7+\x08\x87\xec\x19\x1d\x9c\ +I\xb3\x88 \xbbA5\xa5\xec\x0f6y\xba\xc4\xa59\ +\x5c\xae\x0f\x98W\x91\xdd$\xa4\xa2Y\xc9\x95\x0c^\x9e\ +\xe50\xb9x\xbaB\xae\x87\xad\x94\x1e\x15\x04\xcb\x19\xaa\ +\xe9\xf8\xfd\xb4\xff\x5c\xb4\x00\x80\x02P\x9a\xbb=]X\ +'\x95a\xd7\x1c,+\x16f\xf9\x0e\x22\xbaB\xae\x91\ +\xd2\xa3B\xc1c\x10}MO\xcd\xfd\xaaD\xb1\x09P\ +qNo\x1e1\x07\x02\xce\xaa,\xdfe!\x80\xf3\xb3\ +\xb8|(\xcb\xd7\xfd\x92C\xf7\x8a\xec\xcd\x86\xbb\x97A\ +\xb4\x17\x80\x9e\x0c\xea\x09B\x0f\x02\x1b\x0cZ\x0f\x06\x13\ +\xb8\x05\x0a\xad\x00\x1a\xd9\xa3f\x06\xa5\x98\xdc\xf5 \xb8\ +\x1e\xd3\x06\x06\xd9\x06\xab&\x9d~\xbb\xe3y%Jq\ +\x91\x22\xeeAd\x94\x92\xc7E\xa4\xb8\x0c\x8c2\xd0v\ +\x8d/\x19\x1b<\xa8\xd5.y+?\xaaw^\x1fY\ +\x07;\x07\x8f\x98\x92)W\x100RSO\xf7\x83-\ +\xa2K\x8c\x92\x5c\x1e\x801X\x0d\xc4\xa6\x1e\xa2\xd9\x9b\ +\x9d\x88\x16\xc6\xb2\x9b\xd4R\x9e/_\xf0\xfa\x89\xe8Y\ +\x121\xcf\x01a<@G\x11q/l\xb5\x03@\xd8\ +\xae\x22\x08m\xf7o\xd5\xe6\x1d\x8b/\xff\x9b/\xff\x88\ +\xf4j\xf7i\xaa/\x1f\x9e6\xfd\x9e/\xff\xb9\xad\xb1\ +A\x80\x01\x86\x01\xc2\xf0r\xab\xd5\xa9\xc4+\x0c~4\ +\xc9\xce\xec\xb2D\xd6\xf6^c\x10\x04\x14za\x0c\xda\ +W\xd3\x07\x7f\xff\xcb\xff\xab@(\xc9\xe5\xbd\x15\xbc\xac\ +\xb7\x11\xbc\xad\xc6~\x87\x81\x86,&\x84\xf5\xd3\xfd\xe3\ +\x9dW\x01e\xc7\xcd\x1f\x95\xc4\xac\x15\xa4\xe8n\x22:\ +\x99\x08\xbddXwy\x01V\x04\xc2\x91Dt[\x8c\ +\xac\x0f\xedJ\xf3\x87\xd5\xc8\xc22\x96P,\xd6\x16\x0a\ +\x99j\x80\x18\xd8W\xe7\xe3B\x9b\xb2\x97\x99K\x90g\ +\xe1\x81\xeaM\xc9b\xcfe1>\xbf\x0b4\x0f#\x9f\ +\xd6\xc7|\x80\x14\xfd\x86$\x13\xdbO\x01\xeeAD\xbf\ +\xbd\xae\xca|\xf0\x95\xf8v!\xe9\xcc\xaf.\xa2+\x14\ +4WW\xc5\x06\x13\xa1\x07\xf4<.\xb440O\x97\ +r\x14\x93g\x8f\xfe\x96\xc5\xc9\xb5t\xf5\x05\xfaz\x1e\ +\x87\x8d\xb0n \xd0Y2\x8c\xb3\x16\x02;k\x14Y\ +\xbf\xf6\xb9\x0a\x8f,\x8e\x84\x02\x1fW\xf6\xbez\x96\x7f\ +Dz\xd5\xa7\xf6{_\x89.SI\x8e\xebO\xee\xb3\ +`,\x0cd=1\xc6\xfc\x1bo\xdal\xcc\x0a\xbd\xa2\ +Q-C\xcc\xa9\xca\xc8\xd7\x08\xf8\x89\x0c\xe1\xac{\xbd\ +?h\xa92\x0f\xf2qK\xa3\xafXU\xd0\x8d\x868\ +zl\x9c\x04_\xbe]\xc5\xf4MM\x1b4\xfco\xd8\ +S_\xf5`W\xb9>\xfeB\x84\xa2CGD\xb2^\ +Q\xa4xF\xeb\xa7\x04~+[\xd7\xf7LW\xcb\x10\ +\xb3\x82\xf7\x03\x22\xbfC\x9fB\x1b\x11\x1d\xb2\xd8\xc7\xc5\ +\x0d\xe9\xbd\xa5!\x14&ed\xce.\x8a\x9a\x97\xfa4\ +\x08\xc6h\xea\xe9\xbe\xb6\xed\x1c\x0cX\x01<\xc5\xc8\xdc\ +l^\xd3S\xc8^\x16\xf6nz\x0e\x03:Y\xa6\x82\ +\x9c\xad0O^?\x11=\xe1G\xe9;\x96$7A\ +/\x92S\xa2{\x83\xe8d\x97\x95_\xce\xcfh\xe8\xa9\ +\xbaol+\xba\x94\xbd\x10\xecN\xbd-\xf2\xf6\xcd\x8d\ +\xe8zOe\xd1c\xd4\xae\xbdTrjt\x0f\x22\xf4\ +\x97\xe9 g\xden\xac8b\x9d\x90\xf1L\xb3\x0f\xca\ +I\xdaI\x0a\x9a\xa1,\xef\xfb\x9bO\xd7e,\xba\xad\ +\xf1\xd8 ]\xe7.\x97\xf8\xf5m\xb5\x83s/\xba\xa0\ +\xdcx\xbao\xc1]\xc8\xc0\xda,\xedMk'\xbaJ\ +ycd*\xc8\xf9\xb7\xbe\x7f\xe6\x17\xb1\xfa\x89!\x05\ +\x9dh\x9c\x82\xde\xc4\x98\xc4\x8c\xd6\x7f/M\xbf\x9f\xf9\ +~\xaew\x90\xae\xb6H\xb7\xb8K\x02\xf7t\x89\xf1\x8d\ +\x5c\xdcgt\x02\x0e\x98\x1f\xce\xd2\xe6\xf8\x10\x0d7\xf4\ +\x07\xcat\x90\xf3\x84\xaaQ\x99^\xc3\x84'\xa2+h\ +E\xb1iV\x12\xa1\x94\x88\xff7v\x01\xdc\x8c\xc7\x91\ +\xe2\x83\xf4\x8c,\xf3'=\xe6l[3B\x01\xb9\x17\ +]\x06}\xdd\x8f\xbd\xaeN\xb9\xf6\xcc\x7f\xce\xd2\xb1\x90\ +\xc1\xfa\x95\xff\xa4>2\x1d\xe4z\x81\x99\xf9BG\xb9\ +JDW\xd0\x86e\xe3\x11\x01\xf0\xbd\xcd\xdd\xb1\xde\x84\ +/[\x928BSs,\xd9qk2\x80\x9a\xaeD\ +P\xb1\xa8q\x08r\x13b~>\x1b!f&\x0c\xd1\ +0\xd4)\xc98\xb9\xcf\x5c\xec\x9d\xf9xa\x11]A\ +\x1b\x86\x0c\xb6\xce\x22\xa2\xdd7\x0f\x80\x8c\xf7sWT\ + \xc6\x0c==]\xde\xb1\xbf\xbb\x026\xb5\x1bB\xce\ +\x8f\xae\xa8\xc3\x91\xab\x103\xf8\x91,\xcc\xa6\xbb\xae\xa8\ +\x90z\xb8B\x87\x92\xd9\xd3\x87\xc8\x90\x88\xae\x00]J\ +5*\xf0\x8f\xbe\xfcg\x17\xbc$\xd3k\xee\xd2\xc7<\ +\x98\x08Q=\x17\xdd\xf4J\x1b\xa2\x1bL\x9fN\x02\x0e\ +\xcf\xd5\xbd\x5c\xe6y\xd9\xf0\xd6{\xf7\xb6t\xeb\xed\xe8\ +\xca\xb4\x90\xf3\x0f\xdd\x15OW(\x14\xae\x89GN\x06\ +\xd1\xfe\x9bC\xcbNs\xb3\xfbR\xa6\xd74\x80#5\ +\x8drq:\x9d~14\x9e.\x801\xfe\xd7\xa7m\ +\x9b\xc7\x1a\xdc\xe7\x18\xfc\x89\xdf\xd7\xb5\x88Fh\xf6\x15\ +82-\xe4\xdc\xe6~l\xdf\x88\xe8\x0aZx\xb9\x86\ +\xf2~\xbe\x95c\xf5j\x9f\xfb\xb1\xd1\x87\xbd\xbc#\xf5\ +\x1c\xfb\xfcn\xd9\xac\x1d\xb76\x1515\x07\x94\xd5Y\ +\xfau2\xf7\xcb\xc5\xbd\xce\xac\x83\xc7\xa0\xd9\xf0\xff\xbc\ +\xf1\x08\xcd>\x83V\x99\x1ar\x9eI\x95\xce|\xacP\ +\xb9\x18R\x08\xbd\x97[\x199\x1d\xa0-s\xbaG\xf8\ +'\xfcI\xca:LS\x93,j\xfb\xf8S\x16[\xe0\ +u\xe8)r\xee\x8c\xe99j\x163<\x9f\xbd\x98\xe1\ +z\x1d_a\x11\xdd\xdc\x93\xf2a\xc5\x5c\x22f\x14\x10\ +\xf2V\xa1\x06\xbc\xff\xdb\xf6\xb3\xf5^\xc8\xf4\xba\x83\x06\ +\x19\x87\x11\xe5\xb6T\xb1\x8f\xa7E\x16\xb6\x9d\xcf\x04\xae\ +Gp\x85\x80s\xb6\xaf\x1b\x9b\x91Z\x0e\xe09\x7fE\ +\x8c\xf6\xd1\xea+\xf0\x02\xdbJ@\x01\x87\x97\xd3>\xec\ +\x0dI[?!\xd4\x9cZn\x9d\x09\xa2Q_\x09.\ +\xbcV\xe5.\xcc\xbc\xa0\x8f:N\xdb\xa1\xcf\xb4\x13O\ +\x97\xa8>\xc0\xa5\xc0\xd1\xf3*rW\xde\x8e\x19\xf7\xf8\ +|\xbd\xe1\x9a%\xf5\x88\xa7\x9b\xfbm\x94V\x1f\xde\x9b\ +x\xba\x02\xc2\xdc\x9f\x9b\xc0\xff\xb7]!\x9e%\xbd\xee\ +\xc6\xfa\xcc\xfd2>^\xd3$\xaa5\xd1\xda\xb6+q\ +)\x15\xa0\xa7K\x84~\x13\xca\xcd\x9c\x95&\x5c\xb3\xce\ +~\xc4\xcf3\xbbD\xe8\xdd:)6P\xa3\x95\x97\x88\ +n\xee\xbf\xf2\x16?\xce\x1d\x88\x1d\x85\xb0r\xd8>\xd6\ +9D\xf4\xb5\xad\xff\x9dG\x94\xf1~n\xf3D\xec\xca\ +\xa0\x034us\x17\xee\xbc\xa4%\xe3\xf3 \x9f\xcd`\ +:1W\xf7\x1aT\x87$3\x12~^SE\xec\xfd\ +Q@\xc7W\x84.GC\x9a}xo\xc9\x1c\x7f'\ +\x92\xe5.\xa0\xb3\x89N\xc4\xfc\xb3\x1d\xbf{\xef\xe9L\ +\xafm\xc5\xaco\x13\xb4]p.\xda\xa9fx\x9eZ\ +\x19\xe4\x93)\xe2\x93ry?\x87\xcc\xbb\x18\x99\xef\xb3\ +}\xf5\xfc\xb4\xbf\x0c=\xa1\x1d\xd9m\xf1\xe1L{2\ +\xc7\x11\x91\xb4\xbc7\xa13\xec1\xc8\xbc\x9c\x88\x86n\ +\xb7\xd0\xdc\xb0*\xe5>\xe7C\x09\xd5\x13u\xb5\x8b\xed\ +\xe1_;\xd5\x0c\xc7\xe0\x15\x01gx\xed\x97\xcb\x10m\ +qM\xebg\xf0\xb3X\x06CDWh\x0f\x1f\xc2\xcb\ +9>\xd6\xc7h\x92\xd7&tD\xd3T\xf4\x83\xa2\xeb\ +\xdb\xf8\x80\x9e\xdccvfY\xfb\xcb\xc6#\x02\xa2\xf1\ +\x9aF\xb7\xea\x9fX\xef\xbc\xda\x8e\xa7k\xaf\x08\xb8\xe7\ +(\x99\x96\x93So7\xed\xd2\xed\xe1j\xdd&\xe41\ +\x8e\x0f\x9dJ>\xcc\xf1\xd1\xb2/\xe4\xb5\x09\x1d\x115\ +\xcc_\x12vl\x5c\xc3L\x19\x97\xdd\x1d<\xd88\xa6\ +\xadkk\x22\xbb\xff8\xb3n\xe7\xc7SUY\x02\xf5\ +\x8c\x80\x8f\x92\x10\xe54\x8cP2\xc3~\x15\xbcs\xf7\ +\xbf\x8b\x0f\xbfWC\x1c=d\x08\x0aYL8\x5c\x9a\ +\xe3\xf0\xf2j\xb1\xba\xd0\x1e\xcd\x95\xd6(\x10Mi\xc3\ +\xcbK5\xc1\xfe[\xe6\xdf\xbc:YW\xdb0\xd1\xdf\ +\xd1nF\xf6\xa6\xd8\xf9\x87\x08\xd6\xdd\x1d\xf7Y\x1cE\ +\xb9\xbc\xa5\xeb\xd1\xad~y\xea\xc50\xbe)\xc3P\xc8\ +\x16\x9eG9\x15]\x1bxG\xac.\xb4G\x04\xb8\x9d\ +\x00\xa3\x8d\x09\xf1\xd9\xf2\x046 \xc3B\x1b\xc4|\xb2\ +\xae\xf5\x96\x1d\x98Ow(\xba\x0c,\x0b8\xc4\x5c\xdc\ +\x87\x22\xdf\xce\xe5=o\x9e\x9e~\x02\xcc\x8b\xfd\xb8\x96\ +\x01:T\x86\xa1\x90\xbd.\x15\xc6\xc2\x1cN\x1a\xe9/\ +\xd2\xb6\x88\xae\xb0SR\xf1\xc8)D\x18\xd7\xe6\xf7\xe3\ +a~\xa6\xd7\x9fPn\x8e!\xa2\x01\xd0\xb2\xbf\x09\xbf\ +U\x5c\xd3\xfaY'D\x97\x96\x05\xfd\xb0\x0a\xde\xf9\xc8\ +mqnv\xa1~\xe1\x93\xa5\x0f\x91\xa1(d\x8b\xa2\ +Dr\x05\x98_\xcb\x91\xea>\x9fi\x12\x8c\x90\xbf,\ +\x9f\x88\xa8\x22\xef\xb6\x9d$\x109v\xda~\xcc\x07'\ +\xe6,]\xed\xe3q\xfb\xa1\xe5-\xa2\x0b\xce\xed\x9e\xd1\ +N\x82\xf8\x13\xd6_\x9c\xdb&\xeb7\xd7\xa6\x1f\xf7g\ +2#\x11]!\xdb\x19\x91\x89\x1c5hxX\xac-\ +\xec\x8c\x01Q\xeb\xba\xed\x8f\x08m\xc5\xd3%\xb3\xb1\x06\ +\x99V\xb7\x22h,\xba\x1d\x9fOV\x00\xe0)~?\ +x\xb7\x1c\xb1\x126\xcf\xcc\xb9\xb7K\x99{\xbbD\xe8\ +\x97\x9c\x12\xdd[\x86\xa4\x905\x0fc\x85s\x0f\x83?\ +\xc8\xae\xb0\xf3g\xf5\xcd\xce}bm\xa1-RS\x22\ +\xfb\x10p\xe5\xceK\xbb\xd3\xacL\xefq\xc8pc\x1c\ +\x01\xbbi\xba0nm@\xc7\xf5\xa67\x89n\xdaY\ +\x8aPtA\xa3\x0bs}\xcf\x9bk\xd2\x8f\xfa\xe1\xed\ +*\xcb\x93}]!k\x0c{\x0ai\xd7\xe5J\xdf;\ +em\x9buy}\xff\xb9\xd2\x14C@\xdb]\x84L\ +\x9eI\x84\xe8Nr\x01\xd6~\xf2I\xfa\xf1L\xefc\ +\x10\x9d\xa3\xb1\x99\x16\x0cHt\x5ck]\x01\xc0\xaf\xef\ +\xc1j\x86\x0f\xcd\x863\x1e\xf48,\xd7\x1ec5\xc0\ +\x8e\xc7\xd7\xfa\xb0\x17v\x98\x0cM!\x9b\xc4\xa6\xbb\xcf\ +\x82\xf9R\x06\x18\xbe\x87\xc5pW\xa4\xc6\x9e%V\x16\ +\xda\xe2\xb4\xdef\x15h\xe7s\x1c\x03\xf7\x0f{*\xb3\ +J\x7f+*\x10\x03\xd1\xe9\xfaZ\x89\x1f\xed\x5c\xfe\xd2\ +f\xe1!\xf0\xb2\x10\x84\x98I\x99\xde\x05\x01Lf\x7f\ +c\xc63\x19\x16\x148Z\x86\xa6\x90m\xac\x84S\xe3\ +1\x9d\xc1\x8cz\xff:>\xe2\x8f/\xbeg\x7f_\xac\ ++\xb4E\xcb\xd4\xa2\xddAts{\x7f\xc7v\x91\xf1\ +\x82m\xd7>\xd6\x04]\x0bb0\xe0\xa6S\xce\xfcN\ +\x8b\xee\xe6x\xf4\xd2\x90\xa4\x5c_P\x1d@\x91\xeb4\ +\xe3\xcaLBw\x04\xda\xa7ej\xd1\xee2D\x85l\ +\x13\xadM?\x92L\xdb\xfbx\x8c\x9b2jX\xc2X\ +\xe4\xb8\xde\xb1\x91\x1a\xfb\xd2\xb1\x0b\xa4\x19\x86\xb0\x93\x85\ +\x9ea\xff\x81\xa8\xbd\x02@\xfcj\xc9t{I\xe6\xdb\ +\x8b\x98\xaa\xab\x8d\x08X\xd4\xd9$2\xb5\xd5\x7f\xf5f\ +8\xaa\xef\xd0^WU\x9aG\xe4\xfa\xbe%\x09\xfb5\ +\x80\x1f\xc8\xe4\x1a\xa6\xe1\x8c\x93!*\xe4\x82\xb2YX\ +\x1b\xa9\xb5\xaf[\xf4\x9e=\xc0v\xf8H\xf6\xf8\xc7\x0c\ +\x9e\xcd\x8c\xbf\x82\xf1\x12\x98\x17\x83y13\xff\x8f\xc1\ +\x1fl\xfa\xff\xf8\xbb\x07\xd40\xf3e\xaeK\xc3\xcdZ\ +\xfb\x88\xd8t\xf7Y\xb1\xa6\xb03R\xd3\x22\xa7\x13\xd1\ +\xa9\x1d$\x10e\xec\xe5&\xabbC\x00\x1c\x0bmO\ +\x17\xf0_:\xad\x13\xd8\xb2\xa7\xc3o\x18\x14\x8e.J\ +&P\x05\xf8U\xa6\xb1\xf3\xb8d^o\xc0\xfd.\x01\ +\xb1n\x86\x98\xc7\x01\x98+CU\xc8\x15c\x17\xc0\xc5\ +\x02g!\x80\x85b\x0d\xc1O\x9a'bW\xa5\xf8\xee\ +\x0e\xc2\xaa\x1b\x9bU\xe6\x19\xef\x8a\xddID[9\x81\ +\xbaU\xa1J\x9b\x0fw\xb6\xcc\xfa\x96\x1f\xe99\xd6\x1b\ +!*6\xfb\xdd\xe68\xfa\xe7\xfa\xb6\xb1\x9a\xe4\xc7\xcc\ +\xb8#\x83K\x88\xa7+\x08\x82\xf6T\x03\x14\x89Z3\ +\x89\xd0\xaf\x03\xc1\xb9\xa7\xd7\xddX\x8f\x8c\xcf\xe6\xf2$\ +\xe8\x1bZ~\xb9hVre\xe7\x0bAm\xe6\x96\x99\ +\xc9\x15\xcc\x99\x19\xcf\xc7\x1f\x11\x89\xc0\x8c\x07q\xef\x0d\ +\xb6}#\x83Wvs_wp\xaa22T\x86\xac\ + \x08:s]\xdc\xbcE\xafK\xc3\x00\x00 \x00I\ +DAT\x98\x08'v\x94<\xe4\xa5\xd4\x9d\x99\xde\xeb\ +\xd0\x11\xc6q\x04\x1a\xac\xab\xad\x18\x9d\x0f-o#\xba\ +\xd5\x00\x13\xc2\xb1\xaf\xbbY\xc1*\xdf\xae\x80\x95\xeb\xdb\ +\xf6\xbd\x07M\xec\xd2O\xd0\xfdr\x96'\xc8\x90\x15\x04\ +\x01\x1a\x17\xc1\x80\xeaDC\x18\xe6\xf9\xb1Y\xa9\x8f\x90\ +q\x09`u\xa9\xce\xf6r=\xa3{\xa2\x0b\x00\x1e\xf0\ +Fx\x22\xcc4`X\x1f\xeb\xdc \xee\x1d\x99n\xff\ +\x89\x19\xcfu\xf3\xc9O\x94a+\x08\x82\x8e\xbc]\x01\ +\xcb0\xbd\xfb\x08(\xee\xe8\xef:\x84\xdff,\xf0\x93\ +#\xc3\x01\x8c\x87\xbe\x19T\xaf\xc5\x12\xa9\x0f\xbb-\xba\ +\x04~\x13\xe1\xea\xd8p\xf5\xbc\x8a`6\xd7\xd9\xc3e\ +\x0c\xd8\xddx\xe8\xb1\xf5\xe7\xa1L\x86\xaf \x08\xba1\ +\xac\x8f\xf5s\x10\x1d\xd8\x89\x98\xea\x7f\x8bj\x9c\x173\ +\x9e\xe3#\xfc}]\x13\xa86\x17tz\xb0\xeb\x9e\xfd\ +\xd6+\x17/<\x9e\xee\x97g_O\xe9\x1591 \ +o\xf7\x1df\xfc\xae;\xfb\xd1\xa5\xa5\x91ce\xf8\x0a\ +\x82\xa0\x13\xad\xd3\xcc\xa3\xda\xab\xad\x8cm+\x98\xdd\x96\ +\xe9\xfd\xd6_\x8c^\x04\x5c\xa4\xef^.\x5c\x1b\xd6\xfd\ +\x19\x89\xee:r^\xef\x96w\x97E\x0c\xc5W\x05u\ +\xef\x86\x16\xfb\xff\xbaSd^\xf6u\x05A\x80f\xc7\ +\x83L\x85\x07\xdblL\xbf\xe3\x99\xd4\x0f\xdf\x80\x9dq\ +7\xaa\x126\xa7\x11P\x02}U\xf7\x99\x8ez\xe7v\ +(\xba\x03\x12h%\xe67B\x96\x8f}xr\x9aq\ +L\x10\xb7\xee?\x17-.xZ7j\xdd\x9eP\x1d\ +@U-A\x10\x84\xae\xf2J\x1cf$j=\xd8\xd9\ +\xc6\xf1\xcc\xf4\xcb\xd1\x89N\x1eJm\xe7\x9e`\x5c\xaa\ +y\xbb\xcd{\xd1\xad\xc4\xb1\x1d\xdb3\xbd\x14\xb6\x1fg\ +*\x9f\x9a\xcd\xa3;gw\xdd\xe7\xbb\xda\xcb\x94\x88\x06\ +\x5cUeJ\xd7!A\x10B\xcf(\xb2n$\xc2\xd1\ +\x9d\xac\xbc\xf4\xfe\x1b\xb03.\x861\x0a\xd6\xe9D4\ +Dc\xc1\xdd\xd0\xd0j?\x0a?D\x17\xc0\x7f\x10\xbe\ +\xd3\xc7\x87%\xab\x8c\xe3\x82\xba}\x13\xdbW2\xf3\x8a\ +\xae\xfc7\x06S\x85\x0cgA\x10\x10\xee2\x8f\x13\x88\ +pE\xe7#\xaa\xf4\x8bL\xbd\x5c\x00P\x04\xcd\x1bl\ +\xf0\xbc\xee\xb6\xc1T;f\xed\x86\xcf\xd3\xddT\x1a2\ +8o\xb7<\x81\x0d\x1esU\x173\xaf\xcf\xa8\x96\x10\ +\xb3 \x08a\x15\xdc\xca\xc8Pe\xf0\x5c\xea\xe4<\xc5\ +\xcc\xef\xbd\xf8\x9e\xfd\x002O\xd8:\xb4\xbd6\x81:\ +\xe0\x00s\xba\x7f.y;n\x9e\x9e~\x9f\x81\xb5!\ +\xfc\x9d\x07\xa7\xe2F`\x09J\xd1\x84\xfb\xa4\xc7\xa8\xed\ +B\x88y\xd0U\xd3\xccCdh\x0b\x82\x106VT\ + f\xc0\x9b\xd7\x95VzL\xf4\x0b?\xbaQ\x99\x8a\ +~\xaa\xb5\x8f\x0b^~K\xad\xb3\xd07\xd1\xad\xde\x94\ +4\xf4r\x18\x7f\xac\xa1\xe8\xa6\xa0\xce\xed\x02\xc0Z\xb6\ +\x7f\x08\xe6\xb7\xbb\xf0\xbc\x12b\x16\x04!t\xf4/7\ +\x13 :\xa0\x0bB\xf3\xce\x8b\xef\xda\x7f\xca\xf4\xbe-\ +\x95\xe6\x81D\x1a\x17\xc3\xd8\x94Hvou\xd7\x93k\ +\xdb\xdd\xd3\x05\x98_\x0a\xe7\xcf\xa5\xfdN-\xb7&\x06\ +u\xf7\x01\x09\xb4&\x99\xcefFk'C\xcc\xdf\x0d\ +r\x91 \x08\x82\xb0=v\x95y-\x11]\xd0\xb5b\ +A\xf4s?\xbc\x5c\x0b\xb8^o/\x17\xae\xeb\x18\xf7\ + \xa3\xb2\x97h\xab\xc5\x1d/\x0coG\x07\xfe\xe5\xe7\ +\x15\xc1\x9d\xed*M\xd8o\x01\xfc\xe3\xce\x86\x98O\xee\ +\x15\x5c\x02\x98 \x08\xc2\xd6\xa4\xab\xac\x0a\x80n\xe8\xa2\ +\xd2\xbctS\xc2\xae\xcb\xf4\xde\xcd\x95\xd6(\x10\x9d\xa2\ +\xb7\x05\xf9\x89\xa2\x99\xc9O|\x17\xdd\x15\x1f\xbb\x8b\x18\ +\xdd\xcb\xcc\xcaEM\xe6\xf2>\xe6O\x82|\x06\xab\xd6\ +\xb9\x9b\x99\xe7\xa3s!\xe6\x8be\xa8\x0b\x82\x104-\ +\x95\xe6\x81\x04\xcc\xa6.$x2\xc06\xf3O\xaa3\ +\x08\xa7~I\x04|=i\x9e\x5c\xeaz|\x172n\ +\xf0\xd0\x06\xc3\x9eB\x1a\xc0\xa2\xf0\xba\xf8tEKU\ +\xd1\x80@?`\xc7\x99\xcc\xcc\xefwb\x95pb\xb2\ +*6D\x86\xbc \x08A\xd1:%6\xd8\x02=\xd1\ +\x99F\x06\xdb\xcd\xb6\x0f\x15%\x9cE>dJ\x7f\x0d\ +\xa03\xf4\xde\xcb\xe5\xa5\xbfJ\xb8\xcfdEt7\xdf\ +\xe2Y\x84\xb7ip\x89\xc5\xf6\xaf\x82|\x86\x9e3\xb1\ +\xcecu\x12\x03\x8d\x1d<\xab\xa1\xd8\x8d\xcb\xb0\x17\x04\ +!\x08\xea\xcfC\x99e9\x8f\x11\xa1\x7f\x17\x0b@\xb4\ +\xba0\xaf\xf1\xe3\x19\x14\xbckunl\xb0y2\xbf\ +\xdb\x0f\x8f\x7f\xa7F\xb0]<\x1bn\x03\xd0\xf9\xc9*\ +\xf3[A>B4\x91~\xcfc\xef|fx\x1d\x08\ +\xef\xd4\xe5\x13\x11\x95\xe1/\x08B.Y0\x16F\x8f\ +R\xebA\x80\xf6\xebF\xd2\xd0oc5\xc9\x8f\xfdi\ +\xdfGgk\x9e@\xd5\xd2b;\xf7\xc2\x97\x05\xc8N\ +xy\x99\xf3\x1a\x03\x0d!\xf6v\xc9\x00\xfe\x18D\xa3\ +\xfbm\x84\xb7\xd6}\x02\xcc\xd7\xb7\xbf>@\xbf\xddc\ +\xe6E2\x05\x08\x82\x90+\xaa\x01:|\x1f\xf3n\x22\ +\x9c\xd8\x0d\x91Y\xd3\xc4\xf6\xaf}\x11\x19\xcb\xbb\x89\x08\ +\xa6\xde\xd6\xe4\xfb{\xce\xc4\xba\xac\x8a\xee\xa6\xf4p^\ +\x10no\x9f\xbe>\xbc\xdc\xfca\xd0\xcfqc\xc2\xf9\ +\x153?\xd4\xc1_\xbb:\xe8\x05\x82 \x08\x85\xc3\xb5\ +q\xebf\x02M\xebfm\xe1k\xcb\x13\xd8\x90\xe93\ +\xb4L5\x0f\x06\xd1\xe9\xba\xdb2\xed\xd1\xdd~]K\ +u\xd4\xba(\xf4\xd6 \xfa\xbf\xd6)\xb1\xc1\x01\xaf(\ +\xf9\x0bv&\x83\xf1B;\x0b\x84=\x87\xf5\xb6\xce\x93\ +\xa9@\x10\x04d\xff,\xee\x15J\xe1\xaan\xc6R_\ +\x9c\xdf`\xcf\xf6\xe39\x22&\xfdJ\xf7\x8ce0^\ +,I\xd8\xaf\xe5Dt]6\x9e\x0e\xff\xde6JL\ +\xd3\xad\x09\xfa9\x06$\xd0\xba\x81\xed\x93\xc1\xbcx\xe7\ +\xeb\x03\xbef\xc1\xd8\x8e\xfbU\x0a\x82 t\xdb+\xab\ +\xb4&\x03tK7\xf7.\xed$\xa3\xf2\xcc\xba\xf6\xf3\ +T:\xc3\xe6\xb2\xbdcu\xb7\xa7\xcbt\xbb\x9f\xd7k\ +Wtc\x89\xd4\x87\x00\xbf\x19~g\x17\xe3\xd3\xf1\xe0\ +*Ua\xab\xc6\x08Ir\xc63\xf8\xdd\x9d\x9c1\x1e\ +~\xd8>\xd6Y2-\x08\x82\x80\xec418\x8d\x08\ +\x89\xeez\x97\x0c\xdc\xb6\xa9\x00Pf\xcc\xab\x802\x88\ +n\xd6\xdd\x9e\x0c^\xf6\xef\xa5\xe9Gr&\xba\x00\xe0\ +\x81\x1e\xd1\xc18\xa4pG\xeb\xa4\xd8\xc0\xa0\x9f\xa3\xb4\ +\x06_\xd8\x8eu,\x83\x97\xb7mp\xbe\xbaZ\xba\x0f\ +\x09\x82\xe03\xc9*\xe3hE\xfc\x00\xa1{\xd14\x06\ +/__o\xdf\xe8\xc7\xb3\x9c\xda\xdb\xba\x10D\xa3\xb4\ +\x17]\x8fn\xf5\xa3\xfce\x97D\xd7v\xf0(\xb48\ +B\x85\x9ef\xc4\xbd;\x0c\xcfR<\xa3\xf5S/\xad\ +\x8eg`U\x1bO\xfa\x8dk\xaa\x82\xeb\x96$\x08B\ +\xfe\xd1\x1a7\x0f7\xa0\x1e% \x86n\x87Q\xb9\xaa\ +_\x1d\x9a\xe1C\x07#\x22\xae\xd6^p\x19\xab\xd7\xac\ +\xb3\xe7\xfa}\xdd\x0eE\xf7\xd6\x19\xf6k\x0c\xfeD\x07\ +#\x11\xe1\xa4t\x95\x15\x8a\xa39\xd1{\xd2K][\ +\x1d\xc9\xcc\x1fn\xffg\x06\xd4\xd52M\x08\x82\xe0\x8b\ +\xe0N5\x8f0\x15=E@Y\x06a\xd4\x07c\xb5\ +\xae/9<\xfd\xfb\x98\x97\x11\x91\xfeU\xf8\x98\x7f7\ +\xa8\x0e\xc9\x9c\x8bn5\xc0\x0czT\x17;\x11\xe3w\ +\xc9xt\xaf0\x9c\xcc\ +`\xbe\xafxF\xeb\xa7\x81\x8a.\x008\x1e\xee\x85V\ +\x0d!`\x98\x06\xeeo\x9a\x8a~ay\xa6\xd1\x098\ +\x91Z\xfbJ\x8f\xe9\x0cfl \xe2\x8b\xaa\xe5\xf8\x90\ + \x08\xe8|\xc1\x09\x03\x99\x0b.\x00x\x1e\xc5\xcbf\ +a\xad\x1f\xcfu\xf8\x083\x0e\xa2\xfd\xf3\xc0\xcb\xb5]\ +6n\xcc\xe6=:-\xba\xb7Lw\xfe\xd5V&n\ +\xc8k3\x0f\x8c\x1a\xd6Ca\xd9\xdf\xc5\x96&\x09\xe9\ +G<\x8fF\x13\xa3\xe1\xaai\xe6!\xb9\xf3\xfe\xb9H\ +\xa6-A\xd0\x93t\xdc:O)5\xbf\xeb=q\xdb\ +\x0c+\xcf\x8cNO?\xee\xc7sm\xb8\x10\xe5 \xfa\ +E>\xd8\x98\x19\xf7l*\x0a\x15\x02\xd1\xad\x06\x98\x89\ +\xee\xd3\xcd\x88D8z\x14\xac\x1b\xc2\xf6\x5c\xd1\xe9\xe9\ +e\x0d\x0d\xcea0r\xe8\xe9r\xe6\xabcA\x10\x10\ +D-\xe5\x1f\x90\xc2\x5cB\xe6MS\x18\xbc|\xa3\xe7\ +\xfc\xc8\xafg\x8b\x15Y7\x11\xd07\x0f\x047\x95m\ +/\xb7K\xa2\x0b\x00\x9e\xad\xe6\xb0\x0fM|\x03\xa8V\ +ue\xaa*rj\xd8\x9e\xab_\x1d\x9a\x8bj\x9c\x17\ +sx\xcbR\x99\xbe\x04\x01Z\xb5\xe7KWY7\x11\ +\xe8v?\xf6K\x19p]`\xa2\x1f\x1d\x84\x00\xa0%\ +n\x8e!`Z>\xd8\x9a\x09\x89\xa2DrE\xa8D\ +763\xf5\x01a\xdb\xa3/\x9a\xec\xef\x92\x02\xcfN\ +\xc5##\x0ay\x003\x93x\xba\x01\xecq\x88\x11\x04\ +t39\xe9\xbaJ3\xa1\x80k|\xdc\xb3\xbc1V\ +\xe3\xbc\xe0\xc7\xb5\x96\x8dG$B\x98I\xd45\x1d\x09\ +k\x93z'm\xe7\xa4V\xb4\xea\xfa\xe6;\xe6\xe89\ +\xf7\xa1\xa7\x22\xef\x89\x8dq\xf4)`\x01\x10\xd1\xcd\xfd\ +h\x96\xaeR\x02\xbaSJ\xf1\xf0\x11f\x1d\x11M\xf5\ +\xf1[|\xe1\xc5wm\xdf\xf6^\xf7\x1cb^\x83\xff\ +o\xef\xcc\xc3\xa4\xaa\xae\xae\xbf\xd6\xb9\xf7VU\x0fH\ +\xd3\x0dN(\xce\x0aJb\x0c$\x0eq\xc0\x98|F\ +\x13#\xa8\xadq@\x86\xa6\xab\xda\xa8o\x9c\xe2\x98h\ +'\x0a\xce_\x12c\xb4\xab\x9a\xc9)QP\x89S\x9c\ +\x105\x11\xc5\x88yU\x1cP\xd4\xa0\x18D\x84\x06l\ +z\xa8\xba\xc3~\xff\x10\x13\xa32WUW\xdd\xbb\x7f\ +\x7f\xf9\xf8\xef;\x03\xed3\x01\xec\x1b\x12\xc1m\xeb\xf2\ +\xdc\xeb\x8a\xf977It+\xd3\xde\x8b_\xf4\x12.\ +\xc3\x5c\xf3\xd5\xb9&\xe7\xa4\x88=\xd7\xba\xd3\xd5\x9d\xae\ +R\x82\xb8I\xfbL\xcb2\x0f\x92\xd8\x22\xcf\xaa2g\ +A\x9b{I\xfe\xec'\xe3;\x03\xbc\x224\x81\x0f\xe4\ +\xd7\xbd'aE\xc9\x8b\xee\xa7\xdf\x157\x94\xb7\xe6\xc2\ +\x10\x98\xd2\x9d\xb2\x0e\x8fNvYE\xb7'\x0e\xd25\ +\x08\xca\xda\x98\x9b\x84\x9dkr\xfe@\xc3\x1b6\xb5\xf9\ +\xfc\xba\xceq]\xcf:a\xaf\xe9p\x91\xa7\xebK\x16\ +\x83t>\xdc\xb0J\xe3,W\xdezk\x85wS\xb1\ +\xff\xee&\x8b\xee+p\xef\x15\xc8\x07e.B1\x0b\ +\xe6\xee\xce&\xfb[\xfa\xf8+\x05\xca_y\x1a\x04\x05\ +k)\x98\xda\xdb8\x7f1\xc0O\x0bP\x1c\xe4\xf9\x0c\ +N\xa8\x98\xd4\x9d\xb7^\xe8\x97$\xed\xd3H|/<\ +\x9b\x5cs~\xbe^H\x8a\x22\xbaC3\xf0\x00\xdc\x5c\ +\xee\x81'Q\xed\x08\x1f\x8a\xc4\x1d^\xe6\xbf!\xb3\xb2\ +\xde\x06\xcf9\x0d\x82\xf2E:S\xf6\x90\x84\xb1\xe7\x12\ +\xf8~\x81\xb6q\xe7%Z\xfc'\xf3\xf5q\xd9\x86\xd8\ +@\x18^\x8b\xd0x\x16\xe0\xc9x&\xd7#}\xe27\ +\xebRs\x16^\xab\xa0\xfc\x17r\x12\xfd\x8c\x09fv\ +7\xc4w\x09\xb79\x06:t\xb9+\xba!\xc9G\x1a\ +\x05\x05\xff\xed\xa1\xdc\xe0\x90\xcf\xe4\xbb`\xeasi\xd3\ +\xdb\x9c\x8c\xf7\xbb|}\xdek\xf5p,;\xb8=,\ +\xc7S\x22\x08r\x82s{\xea\xefo\x96\xe8V\xb7\xe0\ +c\x88\xfc1$\xc6A\xdbY\x8e?+\xcc=n\x05\ +\xf8\x00J\x91_\xe8d\xb1FA\x01>5\xbcpS\ +v\xab1\x98H Q Ey\xf1c\xf1R\xf9\xfc\ +\xc8\xddj\x9df\x90CB\xb4\x12\xdeR\x95q\xff\xb7\ +,E\x17\x00\x02\xcf\x5c+\xc8\xcf\x85\xeb\x12\x10\xde\x01\ +\x96\xed\xcf\xeaJ&\xb6\x0fiM\xcf\xbbP\x8a\xfbx\ +\xfb\x5c\xa0QP\xba\x9b\x12;lS\xe7\xfc-\xaf\x0e\ +S_\xde\xc1-u=\xfb\x98m3\xf93/\xea\x1a\ +g\x1fH\xe2\x82\x10m<:\x5c:\xbf\xe8\xc9\xef\xb0\ +\xd9\xa2\x1b\x9f\x94\x9b_\xd6f\x19_\x16\xde\x9dlz\ +\xb3:\xc7U\xf4\x0f\xdb\x83\xef\x07\xf2\x8a.\x7fE}\ +\xc0\xc5\xa5\xfb\xb4F\x22\xe2\x82\x9b\xb2\x0e\xb7\xc4\x7f\x11\ +\xc0\xd0\x02\xce\xb5\x9cO9>\x9f\x85SmIla\ +\xdb\xb85\xdfU\xd5\xe8\xd9\xea\xa9k*[\xba\x16\x97\ +\xb5\xe8\xaey\x9b\xbfB\x04AxR\x82\xdc\xd5\xb1\xdc\ +\xbfv\x8f\x89\xef\x14\xa6\x87\xbf\x8d\xfe\xd3\xe5j\xe1Y\ +\x9e5T\xf2zU\x06K4\x12\xd1d\xc1\x11\x88\xe5\ +R\xceu\x16\xcd\xc3da=\xdf%@*_\x8d\x0c\ +>\xa3\x17\xed\x1b\x08\xee\x14\x9e\xfa\x0ay{\xc9\x0a\xef\ +\x9a\x9e\xfe\x1ey\x11\xddX\xab\xfb: w\x87\xeb,\ +\x8e;[q\xff\xaf\xd9\x86\xd8\xc0\xb0\xfc\xa6O\xd3N\ +\xf2\xb8.\x87E\xdb\xe9N\xd1(D\x93lCl\xe0\ +N\x03\xec9\x8687\x1f-\xf9\xd6\xe3\x990>\x96\ +q\xa7\xe6\xf33s\x8d\xce\x09$G\x85iL|\xc8\ +\x19\xdbO\xef\xf9\xc2\xdf\xbc\xb5d\xca\x0a/\x0f\xd3n\ +\xf7\xb3\xe2*c\xcb\xd3\x1d\x8d\xce\xdea\xf9Mn\x80\ +\xcb\xcb\xb1'r\x19\xbeU\xffkE\x9b\xd7\xa2\x91@\ +\x14\xab\x93\x1b\x8d#sA\xeeS\x84yv\xe7\x84\xb4\ +\xfb\xcb\xbc\xbe0\x8c\x8d\xedN\x0b\xad!{\x1e\xa7'\ +\xd2\xfe\xa3\xa5\xf0]\xf2&\xba\xd5\x19\xf7UP\xeeE\ +\xe8\xaaO\xb1e\xcc\xe0\xc9\xae&\xfb\x800\xfc\x9e\xca\ +Vo.D\xee\xd0\xa5\xb1\xa0W\x12<\x1fr\xea\x96\ +\xd3\xf5\x8aV\x94\xf8\xe4T\xd4\xbaM\xf6=\xc6 S\ +\x14\xd7&\xc1\xec%m\xde\x98\xe6<\xbeD/\x19\x89\ +J+\x16\xdcM\xa0W\x88\x9e\xc7O\x5c\xdf9\xbbT\ +\xbeO^\x9b\x0f\xe7\x84\xa1\xdcE\x91\xe8c\x0bgf\ +\x1bc\xc7\x84\xe1\xf7\xach\xf3\x9a\x00<\xa7\xcbda\ +\x9aa\x07d}\x22\xed\xcf\xd2h B\xd5\xc9\xd6\xa1\ +\x15\x95\xf6\xcb\x04\x8f)\xce<\x93w\xbar\xee\xf0|\ +\xa7K\xeb*\xed\x1b\x01~-d\xc5\x15\x97\xe5\xab\xc3\ +R\xc9\x89nU\xda}\x05\x90\x19\x08\xe5}KT\x18\ +#\xd3\xdd\xa4}f\xb9\xff\x96-\xa7\xa3ci\xe0\x1e\ +\x16\x007\x85\xedH\xa0'+\x95\x05r_ \xdc;\ +\xde\x92\xfb\xb3F$\x1a,\x1b\x8b\xea\x5c\xca\xb9\xd1\x82\ +y\x82\xe0v\xc5\xea\x8c\x13\x04\xe6\x87\xbd\xa6`Y^\ +7M)g,\xc91!K;\xbd\xf4r\xe0\xddX\ +b\xf6\xc3\xc8{\x01\x81\xb1e\x1e\x09;\xac\x0fZ\x00\ +\x5c7\xa1\xc5=\xbf9\x04\xbb\xfal2\xb6\x07)\x8d\ +\x86r\xa8\x80{o\xc8\xf5\x00\x01:\x01YJ\xc1r\ +\x80\xab\x05p\x01\xb8\x80\xac^\xcb,\xeb\x80 \xb7\x16\ +\xc7\xa6\x15k\xf979R:6p@\x8c\x80\xbd\xd7\ +\xfc\xbb\x0aB\x12k\xfe\xbb7\x04\x06\x80\x03\xb0\x1a\x80\ +!\xa4V\x88Z\x08kITo\xee\xae\x16\xc0l\x04\ +\xf2\x90\x0f\xeb\x81D&\xab\xf7\xa0#\xb6\xbb\xb5\xc0I\ +\xc5\xac\xf0\x15\xa0\xc3\xf3\xe5\xfb\x15\xad^^3U\x1d\ +)\xe7\xeb1`\x0e\x89\x8a\x10\xa5\x95\x03\x0f\xf2\x9d\x8a\ +\xb47'\xd4\xa2\xbb\xe6\x8d\xe9&C\x9c\x16\xf2B\x99\ +{V\xb4y\xa3\xc2tn\xb7\xfcd\xf4J\xf4rv\ +\xb1$\xa8\xa5X\xb54B\xf1\xd9-\xc6\xef\x0a\xc0\x15\ +\xf4\xec\x8fW\xe5\xba\x97m}\x1b:\x11\x92+\x1d\xdb\ +n\x8fZ\x9b\xb1>A\x10\xd4\x18#5\x14SCH\ +\x1f\x18\xd4H\xc0->\xf7\xa4x\x14Y)\xe4JA\ +\xf0/\xc9\xd9\xf3\xaf\x9a\x92]\xd8\xacEi\x91c\xf9\ +\xc9\xe8\xd5\xab\xda\xb9\x9aDS\xa1+\x93\xbft\x17\xd7\ +\x0f\x8eN\xb4\xfa\x8f\xe4\xf3s\xdb\x92\xd8\xa2\x17\xed\x17\ +H\xee\x1e\xaa\xcd\x91 \x1dK\xbbM(\xbdF;\xf9\ +g\xf58l\x19\xb7\x9d\xb7\xc3t\x18\xbf\x96\xc7\xe0e\ +\x0f\xf6\xd1\x89\x96\xee\xf7t)R\x94H4\x9a?\xcc\ +\xb28\xb1P\xbe\xc9\xeb\xda\xb5\x09pr,\xed\xde\x99\ +\xcf\xcfm\x06xI\xca\xbe\x8bd}\xd8n\x0ft\x18\ +op\xcd\xcdX\x19\x09\xd1\x05\x007e_B\x86\xa8\ +\xd9\xf1:zVz\x90c+\xd2\xde\xdftIR\x94\ +p\xb2\xaa\x01}*m\xfb*\x90\x8d\xc5\xdc\xdd\xfe\xc7\ +\xfcBNw2\xf9\xef\xfd\xea&\xed\x8bh8!l\ +\xe3\xe5#\xf8Q\xbc\xc5\x7f\xa8\x14\xbf\x9b)\xd4\x07/\ +\xef\xf4~S\xee\xfdv7\xb4C\x91M\xcet\x93v\ +\x93.M\x8a\x12.\x9a\x01\xe6R\xce\xc8J\xc7y\x83\ +d\xb2\x87\x04\xf7\xb2B\x08n6\x15\xfb1B\xb81\ +\x12\x91[JUp\x0b\xba\xd3\x05\x80\x5c\x93s\x8a\x01\ +nCt\x0c\x11n_\xd1\xe65\xe9\xfdLE)\x7f\ +r\x8d\xce\x9e\xc6\xc2\x1f\x00\x0cC\xcf\x9dK\xde\x10K\ +\xbb?\xcb\xf7\xe7\xaenr\xf6\x8a\x03\xcf\x85\xed\x08P\ +D\x16wz\xde\xe0\xde\x93\xb0\xa2T\xbf\xa3)\xe4\x87\ +\xc7Z\xdc\xdbE\xf0$\x22\xd3\xc6\x8d\xa7\xf4\xa9\xb3\xe7\ +\xaeN:\x83u\xc9R\x94\xf2dq\x12\x15\xb9\x94\xd3\ +L\x83\x7f\xf4\xa4\xe0\x0ad\xd2\x9f\xdb\xdc\xb3\x0ba\xe2\ +\x11\x17\xf9s\x18kn\x02\x9a\xd3KYp\x0b.\xba\ +\x00\x90%\xce\x5cs\xa5$\x1a\xc2\x0b\x0e\x8c\x13\xcf\xe5\ +\x9a\x9c\x93t\xf9R\x94\xf2\x22\x9b\x8a\xfd\xb8\x1f\xed7\ +\x0cq\x19\x89x\x0f\xee\xd8&\x8eo\xf1\x1a\x8f\x9f\x9e\ +\xdf{\xf4\xaf\xd5\xc3\xa9\xa8p\xee&\xb9+\xc2\x97i\ +\xbc\xad\x1c\xee\xc8\x17\x5ct\xab[\xdc\xd7\x04\xf8\x1d\x22\ +\xd5\xb8\x1c\xd5\x06\xb8\xc3M\xd9\xd3V5\xa0\x8f.e\ +\x8aR\xfa\xf7\xd5\xdd\x94\xf3\x80E\xb9\x8f\xe4\x0e=}\ +&9\xa3\xcdK5\x17\xe0:\xdanu\xceoI\x1c\ +\x1aBs\x9a\x0f\xbb\xba\xbc\xb3\xcacc\x86\xe2\xb8\xb6\ +\xf4\x8e\xd9o\x14\xcb\xb1\xa5\xb4&\x83\xfc\xd3\x03N\xa9\ +h\xf1\x9e\xd5\xa5MQJ\x8b\xd5M\xe8\x17\x13\xe7W\ +\x04\x1aK\xc1\xd0GDn\x9b\xd1\xe6\x8d\xce\xf7\x0e\x17\ +\x00\xdc\x94\x9d\x22\x19\xca&\x1c\xbe\xf0\xe8x:w\xbf\ +\x8a\xee\xe7\xdf$\x1bc\xc7X\x96\xdc\x83hZ\x04\xfa\ +\x02\x8c\x7f%p/\x1f\x9a\x81\xa7K\x9d\xa2\xf4,\x0b\ +G#\xde?a\xff\x0f\xc0K\x08\xf4.\x91\x17\xf4?\ +\xcd\x9e\xef\x8d\x1c\xf6\x14\xfc\xfc\xa7\xcd\xad#\x0c\xcc\xfd\ +at\x0a\x14\x91)N\xda\x1b\x8b\xb29\x82,\x22n\ +\x93=\x9d\xe0q\x88n\xfb\x99\x17\xb3\xe0\xd8O=\xaa\ +\x15EA\xcf\x9c\xdb\x1ek\x10\x5cCr\xe7\x12\x12\x8e\ +?\xbe,\xde\xa8B\xbc\x94w6\xdaC\x1d\xc3'7\ +\xd7\xf6\xb4D\x05\xf7\xadU\xae7\xa4\xefd\xacV\xd1\ +\xc5Z\x9d\xaa^#\xd07\xc2\xc6\xf89B&\xbc\xb9\ +\xdc\x9b\xb0\xd7\xf4\xe8\x14\x98)JO\xd3\xd5h\x1f\xec\ +X\x1c\x0f\xe0\xc0\x12;\x82j\x9d\xb1\xdck*DJ\ +\xb9;\x19\xdf\xd92\xc1\xb3\x04\xb6\x0a\xe3Z\xea\x8a\x1c\ +P\x99\xf6^DY\x15\xdb\x16\x99\x5c\x93s\x92\x01\xb4\ +\x9f\xab\xc8+Y\x9fc\xaa&\xba\xff\xd0\xe5PQ\x0a\ +Gg\xd2\xfe\xb6cx\x05\x81\xef\xa3\xf4\xfc\x81\x7f;\ +!\xed\x9e\xd3\x5c\x80\xa2\xa9\xf61\xe8\x9b\x88\xdb\xcf\x12\ +\xdc-\x94Kh ?w2\xdeu(\xbb\x1b.=\ +\x80\x9b\xb2\xef%9Bu\x17\x01 \x13\xdb\xc5\xfby\ +m\x06\x9f\xe8\xf2\xa8(\xc8\xaf\x01\x84\xc8e \x8fc\ +\x0f\xadu\xeb\x14\xdc\x00W\xc72\xee\x85(\xd0]\xe3\ +-\xe9\xcc\x04q@H3\x86\x8f\xcfX\xee\xfe\xa0\x10\ +\xd9\x81P\x8an\xe7Xl\xe38\xce<\x12u\xba4\ +|\xea\xa2\x22\xc2\xb3c\x19w\x9aFCQ\x90\x87\xf6\ +\xa2\xc1\xaf\x00\x1eG\x16\xfeZ\xe4\xa6\xf4^\x86\xc8\x85\ +N\xda\xbb\xa6\x10\x9f\xff\xd40X\xdf\x19h\xcf x\ +TH7+Ks\xe2\xee]\x95\xc1\x12\x94\xa5\x97C\ +\xcf\x153\x8c\xb0(\xf7\xea\x12\xf1_\x93\xe9\xb1 \xe0\ +\x19\xf1\xd6\xdc\x02\x8d\x86\xa2l\xe4\xce6\xe9\x0c\x8eS\ +.\x04\xf9\x93\x0d\xe9\x0b\xddc\xd9-\x913\x0b\xe1\xa5\ +\x8c\xffd\x12\xd3$\x93!\xdd\xe1J\x80\xe0\xa8R\xf6\ +V.Y\xd1\x05\x80\x5c\xcai1DJ\x97\x8b\xff.\ +\x0e\x10\xe0\xc6.\xd7\xbd\xa2\xd4\xed\xcc\x14\x05\xa5Q \ +\xb5\xbfmp!\xc8\xa3J1\x8d\xfc\xb9g\xbb;\x08\ +82\x9e\xc9\xdd]\xc05\xf5jC\x9c\x1f\xd6\xb1.\ +\x94\x17udDw\xc9HT\xd6U\xdasI\x0e\xd2\ +\xa5\xe3K\x0fh\x1b \xd7,|\xcf\xfb\xcdn\x0f#\ +\xa7\x11Q\x94/\x88\xed8\xfb@\xdb\xe2\x05$~T\ +\x06Y\xac\x15^ \xc3+Z\xbd\xbf\x16l\x87\x9b\xb4\ +/\xa5\xe1\xafB\xbc(\xfe\xfd\x83\xac{\xf0\x8eS\x91\ +U\xd1\xdd\x0c:\x9a\x9co\xc4\x04sz\xd2\xe7\xb4\xc4\ +\xcf{\xdf\x08\xc4\x5c\x14\xcf\xe4\xee\xd3h(QgZ\ +=\xcc\xd1\xb5\xb1\x11\x16\x82\x8b@\x0e)\x93gxQ\ +\x96<\xa2\xba\xc5}\xad\x80\x82{\x0e\x0d\xaf\x0f\xf1&\ +d\x99\xe7ZC*&u\xbf\x8f\xb2\xf7\xe7/\x01\xdc\ +\xa4\xfd3\x1a\xfeV\x97\x94u\xf2\xbc\xe7\x07\x97$Z\ +\xfd'4\x14J\xd4X9\x1a\xbd\xab\x12\xf6\x18\x00g\ +\x10\xdc\xa5\x8c\xe4b\x9e\x9b\xb5\x8f\xac\x98\xd2\xfdA\x01\ +\xcfpS o.\xe5\xd4\xfa\xe6:\xfa\xf9\x08\x8eL\ +\xb4\xf8\x8f!\x14MqJ\x04\xb7\xc9\xbe\x93\xe0\x09\xba\ +\xbc\xacw\x02>\xe1zrI\xe5D\xefy\x8d\x86\x12\ +v\xb2cc\xbb\xd3\x913I\x8c*\xb7Vt\x22x\ +\xb2\xc3\xb8\xc7\xd4\xdc\x8c\x95(\xdc\x19\xeeH\x02SK\ +\xb1J;\x8f\xe6!\xbftZ\xbc+\x10\x9aNt%\ +\xc2\xd2zT\xd5\xd6\xda\xcf\x83\xdcK\x97\x9a\x0d\x9a\x89\ +\xb3\xbd \xb8Lw\xbe\x0aB{^\x8b\xff\x01yL\ +\xa9V\x22\xaf'\xa5\x9cy\xab\xcd;\xa3\x90\xaes\xd9\ +\xa6\xd8p#2=\x8c~\xca\x9f{qypF\x9b\ +{t9\xde\xc7-y\xd1\xfd\xf7\xfd:G\xfe\x1e\xc6\ +\xe6\xca\x05\x14\xdf\xa7=\x09\xc6'2\xfe\xe3\x1a\x0c\xa5\ +\x9ciO\xa2.a\xec\x91\x104\x91\xdc\xa3\x5co\x1f\ +\x00r\xa6\xd3\xe2e\x0a\xdc@\xe6(c\xc9\xdd\x04b\ +!\xaegy\xb7\xd3\xf3\x86\x86\xed\x16\x07K\xb0\xaf\xe5\ +q\xc6\xc8\xb4\xb0\x9eO\x14\xb2\xb2\xcf\x17^\xfb\xdc[\ +\xb9\x19\x85\xe8R\xa2(\x85\xa0\x19\xe0\x85\x8d\xd6w-\ +\xc3q\x00G\x94sA\xa5\x00\x1fy\x9e\x1cW1\xd1\ +{\xa6\xd0\x1d\xdb\x8c%\x7f\x0a\xb7\xe0\xa2+G\x1cP\ +\xd5\xe2\xbe\x14\xb6\xdfV\x92\xc2\x96K:\x97\x1b\x83_\ +\xe8\x92\xb4i\xfd{\x01\xdc\xf0I\xbb7\xa9\xee\x0e\xb4\ +kD\x94R\xa4s,\xb6ql{4\x0c\x1a\xca\xab\ +0j\xadO\xde?\xdc\xc0\x1e^\x91\xe9^T`o\ +\x83\x9f\x10\xb8-\xcc)e\x00\x08\x02\x8c\x89e\xdc\xa9\ +a\xfcm,\xd5\xb7\xdfKR\xf6]$\xebuy\xda\ +\xe4\xb7\xeeU\x02\xb4\x06\x81\xb99\x91\xc9\xbe\xab\x11Q\ +P\x02=l\xb7\x89\xc7\x8e4\x0cFA\xf8\xc3\xb0\x08\ +\x87\x88\xdc\xb9\xbc\xd3k\xd8\xfa6t\x16XpG\x92\ +\x98R\x8eg\xdc\x1bi\x80q},\xed\x9e\x17\xd6\xdf\ +W\xb2)\xdc5\x86\xdd\xb3@\xec\xa7\xcb\xd5\xe66U\ +\xc0,!2\xaf\x04\xee\x8cB\xf4\xebT\x14\xac\xe3^\ +\xedQ\xbd\xed\x03,\x8b\xf5$N\x0aS[O\x01D\ +\x04\xbf\x9e\x90v\x7f\xd5\x5c\x80.A_\xc8\xfe5\x90\ +\xc8\x84\xb9JyML\x1f\x99=\xdf\xfdQ\x98\x8f\xc8\ +J\xfa\xdc\xb4#\x89\xadc\xc6~\x9e\xe0\x00]\xbe\xf2\ +\x92z\xfe\x00\x01Z=\xd8S\x0a\x9d\x06S\xa2Mg\ +\xa3=\xd46<\x89\x90\x13Hn\x1bF\xc7\xb8\x00\xc1\ +\xa9\xc5\xf0\x00vS\xf6i \xff\x10\xfe:\x17\x99\xb7\ +\xaa\xdd\xfbN\xd8\x8f\xc5J~\x10;\x1a\x9d\xbdc\x16\ +\x9e&\xd0[\x97\xb2\xbc\xef~oi\xebp\xef-t\ +ZL\x89\x06\x1d\xe3\x9co:\x16\x86\x13r|\xb9V\ +\x1fo\xe8u=\xd7\xb3N*\x86;\x92\xdbd\x9f\x05\ +\xf0\xff\x87]pE\xb0\xd4\xf7\xcd\xbe\x89\x89\xd9\x85a\ +\x7fN\xcab \xbb\x9b\xecC,\xf0\x11\x02\x09]\xda\ +\xf2>\xd9?\x01e\xba\x1f\xc8\xed\xf7\xaf\xf0\xff\x1a\xa6\ +\xfbpJayj\x18\xac\xfd\x06\xda\x07\x1ap\x04E\ +\x86\x93\xdc!\xec/\xab\x02\x5c\xf9\x8a\xb8\xcd\xc58\xa6\ +\xc9\xa5\x9c_\x1b\xe2\x97\x11X\x83\xb2\x9e\xc8a\x15\x19\ +ov\x14\x9e\x9b\xb2y{\xca\xa6b?6\x90{\xc2\ +^\xb5\xd7\xc3\x93\x7f9 \x7f\xf1!\xb7\xde\xdf\xe6\xcf\ +R\x01V\xbe\xc8\xa2z$\xfa\xd5Z\x07\x1a\x98\xa3\x08\ +\x1cOb\xeb\x88<\x1bK\xfd \x18\x95h\xf5\x1f)\ +\xc6\xcb\xcc\x01{8\x7f\x88J\x07\xb6@\xd0\x18K\xbb\ +\x13\xa3\xf2\x0c\x95U\xca\x22\x97r\xc6\x91\xc8\xe8\x1d\xde\ +\xe2\x98\xb4\x0bxO\xc0\xe0\xfeW\x03\xffoZ\x80\x15\ +]\xb2\xc9\xd8\x1e\x06\xc1\x0f@\x1e\x0e\xe2\x10\x02\x95\x11\ +{\x19}4\xeb\xbb\xa7VO\xc4\xd2b\xbc\xd4l]\ +k\xff\x91\xe4\x88\x88\x08\xeeU\xb1\xb4{Q\x94\xe6S\ +\xd9\x89\x97\x9b\xb2/$y\xa5.\x85En3(\xf2\ +P\x00s_\xbb\x9b{\xb4\xefd\xac\xd6\xa8 \xd4\xcd\ +\x05*\x9c\xd8a\xc6\x04\x87\x038<\xeci\xe3u\xcc\ +{\x17\x22\xbf\x18\x9f\xf6\xaem.pu2\x00\xac<\ +\x0d5\xd5\xe2\xdc\x07\xe0\xe0\x88\x14v\xde5c\xb9w\ +R\xd42je\xb9c\xcc\xa5\x9cfC\x5c\xa6\xcbc\ +\xcf\x9c\xbf\x00\x98\x0d\xc8\xa39\xf2\xb1k[\xdc\x97\x8b\ +\xb1 )\x85c\xd9XTW\xdb\xd6\xfe\x06\xe6`C\ +\x1c*\xc0\xbeQ?\xc6\x11\xc8BOpbE\xda\x9b\ +\x83\x22\x99\x85\xc4\x1c\xfb\x11\x90_\x8f\xc8:\xf2\xe4\xbf\ +\xb2\xee\x11\xe5\xde\x1b72\xa2\xab\xaeU\xa5e}\x07\ +\x91\xc7\x85\x9c\x15\x04\xe6i5\xe2(\x83\x9d\xeci\xa8\ +\xa9\xf0b\x07\xd1\x92\x83\x0dp\x90\x08\x86h\xad\xc4\x7f\ +\xee\xde\x022\xb9\xa3\xdb;\xb7f*V\xa1H\x9d\x94\ +L,x\x84\xe0N\x11\x89\xf2\xcb\xab\xbb\xbdC\x8a\x15\ +_\x15\xdd|\x0ao\x933\xc1\x00\x17\xe9RQZg\ +\xc1\x00\x9e\x16\xf0i\xf1\xf8\xcc\x95\x93ro\xeaN\x18\ +=Za\xdb\xe5?\xbf\xc5\xadh\xd3\xc8\xa0 \ +\xf6\xa9\x17\x8d\x8d\xed\xc6\x98\x0c\x85\xe0[\x86\x18*\xc0\ +>\x04\xaa4:\xeb\xdd\xddNl\x0f\xbc\xf3j3\xf8\ +\xa4\x88\x9b\x86Q\x14\xa4\xcb\xb9\xc9\xc3F\xc6yY\x10\ +\xf0\xc0x&\xf7f\x94\xe7[(\xaa\x80\xdd\x94\xfdK\ +\x92\xbf\xd6\xe5\xa3\x8c\x9a2\x08^\x82\xe0\xa5\x80\xe6\xa5\ +\xc03/\x15\xc3h Lt\x8c\xc6V\x96c\x0d\xb6\ +\x0c\xf7\x02\xb0\x17\xc1\xc1B\xec\xa5&2\x1b\x9d\x99y\ +\xcf\x17i,fk\xcci\xf50\xc3k\x9d\xf1\x86\xb8\ +0B/6\x9d\x9e\xc8a\xc5:#W\xd1-\x8e\xf0\ +\x9e\x01\xf0w\x9a6+\xdf\x1d1\x89\xf9\x02y\x1d\x01\ +\xe6\x07\x90\xd7\x05\xf6\xfc9oe\xdf\x8bj\xab\xc2E\ +\xf5HlY\x1b\xdb\x09\xf4w6\x01w\x16r\x0f\x02\ +{\x82\xf8ZT\xd2\x91\x05\xf6M\xce\xb4\xafv\x7f^\ +L\xdb\xc1%#QYWe\xdfF\xf0\x98\x08=\xdb\ +^\x80`D<\xed?\xa83/d\xf7]s)g\ +$\x81\xc9Z\x14\x12\xaa\xc51\x07\xc8{\x10\xbe+\xc0\ +\xbb\x14y7\x80Y\x18 \xf8\x90\xbe\xb5de.\xfb\ +a\xb9\xdaX\xb6%\xb1E\x15c\xfd\x85\xfe\xd6\x06\xa6\ +?!;\x02\xd8\x85\xe0\xce\x02\xd9\x19`\x7f\xbd\x93^\ +\x98sE\xdf\x97q\x89V\xff\x89b\xfe\xdd\xce\xa6\x8a\ +mc\xe2\xde\x0frH\x94,gE\xd0\x10\xd66}\ +\x91\x17]\xe0\xdf\xceUw\x92\xa8\xd0\xe1\x8d\xcc\x83\xbd\ +\x1a\x90\x7f\x11\x5c*\x94\xc5\x22\xfc\x88\x22K\xc4p\xb1\ +H\xb04\x08\xb82\x00;-\x9av\x17\xd9U\xed@\ +\xe7\xb6\x19t\xe5\xf3;,?\x19\xbd*\xab\x125~\ +\xe0\xd7X\x90\xde\xc6\x92\x1a\xd2\xd4P\xa4\x06D\x8d\x80\ +}\x09\xd9\x9a`\x7f\x11\xd9\x1a\xe4\xb6Q3\x99(\x85\ +\x1d\x97\x107\xb4\xb7\xbb\xcd\xc56\xd5\xef\x18\xe7|3\ +f\xc9\xfd$\xfbG\xea\xac\x5c\xe4t'\xed\xdd\xac\xb3\ +/\xc4\xa2\x0b\x00]){?\x1b\xbc\x8f\xc4\x96:\xc4\ +\xca:\x9a>\xac\x02\xa5\x1d\xf2\x1f\xb7-\x12+!_\ +]m-\x9f\x8ad\x1c\x04!\xacY\xf3\x04U\xa8'\ +xY(\xc0\xd3\xdd\x823\xaa3\xee\xab(\xfe-\x8b\ +S\x08\xa4\xa3\xe7\xe4%\xe78i\xef7:\xf9\x22 \ +\xba\x00\xd0=&\xbe\x93\x15\xf3\x1f\x229H\x87YQ\ +\x22\xfbr\xb5D\x04\x17L\xc8\xb8\xb75\x17\xf9\xea\xda\ +\xdc$\xec\xaf\xc3\xb9\x22\x8a\xb7+\x04r\x89\xd3\xe2M\ +\xd0\x19\x18!\xd1\x05\x80U\x0d\xe8S\xe58\xf7\x02\x18\ +\xa6C\xad(\x11K%\x037uf\xddK{\xc2\x84\ +a\xf58l\x19\xb7\x9c;I\x1c\x1a\xb5\xd8\x07\x82\xcb\ +ci\xf7R\x9d\x85\x11\x14]\x00X8\x1a\xf1\xfe\x09\ +\xbb\x85\xe0h\x1dnE\x89\xc46\xebo\xdd>N\xaf\ +\x9e\xe8\xce\xeb\x89?\xdf5\xce>\xd0\xb69\x8d\xc06\ +\x91\x13\x5c\xe0\xbaX\x8b\xfbs\x9d\x84k'\xf4\xd7k\ +v\x9c\x8a\xac\xd3\xe2\x8d\x11H\xea\xd3JXEQ\xc2\ +\x9aJ\x0e\x02\x8c\xba\x22\xed\x1e\xd2S\x82\xeb6\xd9I\ +\xdb\xe6\x13\x91\x14\x5c\xc1\x8d\x13Z\xdc\xf3u&F|\ +\xa7\xfb_o\xa0\x8d\xf6\xc1\xb6\xc5i\x04\xb6\xd2\xa1W\ +\x94\xd0T\xc9v\x88\xe0\xb7\xab\xc5\xbd\xa6\x98\x8eR\xf8\ +B\xd3\x88\xde\x8e\x9d&yR\x14\xc7 \x10\xa4'\xa4\ +\xdd\xd3\x9a\xd5\xf2UE\xf7K\xc2;&\xb1\x9d\x13\xf3\ +\xef\x01\xf1m\x1d~E)\xefs[@&\xbbt~\ +U\xd9\xd2\xb5\xb8\xa7\xbeGG\xd2\xd9'F\xf9\x13\xc9\ +=\x22*\xb87LH\xbbg\xa9\xe0\xaa\xe8\xae\x95\xd7\ +\xea\xe1\xecV\xeb\x5cB\xe0\x97\xea`\xa5(e)\xb8\ +3\xb3>\xce\xe9\xa942\xf0\xa9\xd7\xf5%I\xfb\x7f\ +@^\x1d\x15\xff\xe4\xaf\x10\xdckciM)\xab\xe8\ +n \xd9\xc6\xd8Q\xc6\xc8\x14\x12u:\x15\x14\xa5,\ +r\xc9s\xdc@.\xa8h\xf5\xfe\xda\x93_\xa3}\x0c\ +\xfa&\xe2\xf6d\x82GEu(\x82\x00W\xc72\xee\ +\x85:)Ut\xb1\x09\xe9\xe6?\x828H\xa7\x83\xa2\ +\x94\xec\xbd\xcf\xf9\x02^\x1akq\xa7\xf7\xf4w\xe9N\ +Z\xc3,\xf2\xf6(\xb9K}\x85\xf1\xc5\xa5N\xda\xbb\ +\x5cg&\xb4zyc\xa9\x98\xd2\xfd\xc1K\xe2~W\ +\x02\xb9L\x00W\xa7\x84\xa2\x94VG\xaa@\xd00{\ +\xbe7\xb8\xa7\x05wn\x12v.\xe9\x5cn\xd1<\x11\ +U\xc1\x15@$\x90\xb3Tpu\xa7\x8b|\xf9\xa3\xc6\ +-\xb9\x05\xe4`\x8d\x86\xa2\xf4\xe8N\xea-!'\xbc\ +\x12\xb8w\x0c\xcd\xfc\xc7\xa6\xb3\xa7\xc8\x8e\x8d\xedn9\ +r\x0b\x88\xfd\x22m\x9d*r\xba\x93\xf1Zt\x86\xaa\ +\xe8\x22\x9ff\x1a\xdb\xc6\x9d_\x938\x97\x80\xa5\x11Q\ +\x94\xa2\xae\xec\xaf\x05\xc2\xf1\xcf\xbe\xe5N+\x85\x96\x8e\ +\xd3\xeaaF\xf4\xb1\xcf\x04ye\x94\x9b\xa8\x08\x90\x93\ +\x00cc\x19\xf7\x0e\x9d\xa4*\xba\x05\xa1\xab\xc9>\xc0\ +\x06Z\x09\xee\xa9\xd1P\x94\x82\x8b\xedK>\xcc\x15\xf7\ +\xb5\xe5f\x1c?\x1d\x01J\xc4\xbf\xdd\x8e\x07\x93\x11q\ +\x1bY\x11\xac\xf6\x19\x1c\x9bh\xf1\x1f\xd3\x89\xaa\xa2\x8b\ +B_-\xda\xbd\xce>\x07`\xb3v\x92Q\x94\xc2\x88\ +m@N\x98\xd0\xe2\xde\xdd\x5cB\xf7\x82\xab\x13i\xff\xd1R\xfa^\x9d\xe3\ +*\xfa;5O\xe6\xdc\x00\x00\x0f\xe7IDAT\xb6\ +7\x91\xc0\x0f\xb4\x88M\xde\x09\xc4\xfc \x9e\xce\xbd\xad\ +3VE\x17=q\x11\xfe\xe2\xa43\x92\x06WE\xd1\ +WUQ\xf2p.\xd8\x0d\x91?\xe6\x02\xdeP\xd5\xea\ +\xbe\x5cr\xcfw\xca\x19C\xe0z\x125:X\xf2b\ +6\xeb\xfd\xb0j*>\xd2\x99\xab\xa2\xdb\xa3,\xadG\ +UM\xad\xf3s\x12\x17h\xcaYQ6Hl?\x92\ +\x00S=c\xdf\xd0\x93v\x8dk#\x9b\x8a\xedj(\ +-\x04\x0e\xd3\xd1\x02D0\xab]\xdc\x11=\xe5c\xad\ +\xa2\xab|%\xdd\x0d\xf1],\xdb\xbf\x8e\xe4p\x8d\x86\ +\xa2|\xf5n) \x7f\xfb\xde{\xee\xb4\xdd\x1e.\xbd\ +\x0e_\x8b\xea\x91\xd8\xaa\xce\xb9\x88\x82\x0b\xa2j\xe3\xf8\ +\x15W\xb5n_\xf8\xbe\xd7P\x8a\xe3\xa5\xa2\xab|*\ +\xbeM\xd6\xa16\xcc\x95\x00\xf6\xd5h(\xba\xab\x85\x0f\ +\xc8\x0c\xcf\xc3\xef*&z\xcf\x94\xf2sk\x09[H\ +\xee\xae\xa3\xf6\xa9\xe9\x05D.\x1b\x9f\xf6\xaeh\xd6\xc6\ +\x05*\xba(\x83\xf3\xde\x8bR\xb1\xe1\x06\xc1x\x92\x83\ +4\x22J\x04wH\x8b\x04\x9c\x1a\xd0\x9a\x94h\xe9~\ +\xafT\xbf\xe7\x1a\xcf\xe4k\x01\x8e\xa2\xae\x7f\x9f\xa5\x93\ +\xbb\x84\x18U\x0a\x16\x9b*\xba\xcaF\xf1\xd40X\x07\ +\xec\xe1\x8c\x22\xe4R\x92;hD\x94\xb0\x1b&@\xe4\ +\x81\x002\xe9\xb97\xfd\xc7J\xc1\xccb]\xcf\xe6w\ +\x06\xda\x0d\x00\xc7\x13\xe8\xab\xa3\xf7\xef1\xfc\xd0\x85\x1c\ +]\xd9\xe2\xbd\xa0\xd1P\xd1EY\xb7\x0e\xec\xe3\x9cH\ +\xca\xc5Q\xed\xb1\xa9\x84zW\xfb&\x88)Y\xcf\x9b\ +R=\x11KK\xfd\xfbv\x8e\xb3\xf7\x8d\xd9\xfc\x1d\xf4\ +\x08\xe8\x8b\x03\xf9\x8a\xeb\xd9GUL\xea~_\x83\xa1\ +\xa2\x1b\x0a\xa6\xd5\xc3\x0c\xafs\x8e%\xa4Y\x9d\xad\x94\ +rOA\x02\xf2\xa0\x0f\xc9\x5c\x95\xf6\x9fh.\x83s\ +\xbf\xceq\x15\xfd\x1d\xcb\xbd\x12\xe4)\x9aJ\xfe\xd2\x0e\ +\xf7/\xed\x81{\xa2V(\xab\xe8\x86V|\x8f\xae\x8d\ +\x1dmQ\xce\x01p\xa0FD)\x9f\xa2(<%\x82\ +?~\xe2\xba\xd3\xfaN\xc6\xear\xf8\xdeKF\xa2\xb2\ +\xb6\xd29\x9f\xc4\xcf\x09T\xeaH\xe2\x8b\x8d\xe7\xaf\xfa\ +s\x9b{I\xa9\xd8m\xaa\xe8*\x85}\xfbn\xb2\xbf\ +\xe5\x00\xe7Bx,\x09[#\xa2\x94Z'\x19\x12\xcf\ +\x08dZ\xae\xdb\xbb\xbb\x9c\xcc\x11\x9a\x01^\xdc\xe8\x1c\ +OK\xae!8@G\xf3\xcb\x1e\xca\x22h\x88e\xdc\ +i\x1a\x0d\x15\xdd\xc8\xd1\xd5\x90\x18`\xd9\xfe\xe9\x04\xc6\ +\x90\xe8\xa7\x11Qz\xf2\xba\x08\x819\x02\x99\xe6z\xce\ +\xf4\xca\x89]\xffB9^\xdd\x13s\x15\x88o\xeb\x88\ +~\xa5\xa5\xe3|\xf1yl\xac\xd5}]\xa3\xa1\xa2\x1b\ +i\x16\x1c\x81\xd8\x0e;8GS\x90\x04q\x98\x9e=\ +)E\x5c\x88_\x17\xe1t\x01o/W\x7f\xdd\xd5I\ +gp\x9cr)\xc9z\x1d\xd1\xb5\x16\xbe\xdd\xdf\x91\xf5\ +N\xad\x99\x8aU\x1a\x0d\x15]\xe5sd\x1bb\x03i\ +K\x92\xc4I\x04\xb6\xd2\x88(y\xde\xd1\xba\x10<\x03\ +\xc8C\xbeg\xfd91)\xfbN\xd9>+\xa9\xd8\xae\ +\x06\xc1\xe5 O\xd0\x17\xd5\xb5\xa6\x93=\x88\x5c4>\ +\xe3]\xdf\xac\x86\x17*\xba\x0a\xd6y\xa7p\xbf=\xac\ +C-\xf0T\x90\xc7\x10\xa8\xd2\xa8(\x9b\xda\x9a\x0d\x90\ +Y\x22|\xb0\xd3r\xef\xaf\xb9\x19+\xcb\xf9\xf7\xacn\ +B\xbfX\xe0\x9cK\xe2,\xb5n\x5c\xe7\xb8\x7f\xec#\ +8)\x91\xf6gj4Tt\x95\x8d`\xe5i\xa8\xa9\ +\xf4\x9dz\x1a\x9c\x00`\x18\x01K\xa3\xa2\xac\xb7G-\ +\xf8\x90\x0fy\xf0\x816\xef\xefa\xa8R\xed\x18\x8d\xad\ +\x9c\xb8s.\x89\x9f\xeaK\xe8zS\x1a\xb3s\xb4\x8f\ +/\xc5\xe6\x12\x8a\x8an^hKb\x8bX\x80D\xa1\ +\x8d\x02V7\xa1_\x1c\xf6\x08\x80\xc7Ap\xa8V?\ ++k\xd2\xc6m\x10\xf9+\x80G\xbc\x9c\xfdP\xc5\x94\ +\xee\x0f\x10\x9aj\xff\x8ammx\xe7\x13h\xd4\xeb?\ +\xeb\xaf<\x17\xe2\xeaW\x02\xf7\xd2\xa1\x19x\x1a\x11\x15\ +\xddP\xe36\xd9\xb7@\x10\xf3E\xd2We\xfc\xa7\x9b\ +\x0b|\x86\xd2\x9eD]\x1c\xceQ4\xf2C\x80\x87\x13\ +\xe8\xa5\xa3\x101\x91\x15<\x95\x13>\xf5\xd0Jw^\ +\xd8\xee\x5cv5$\x06X\x8e\x7f\x01\x05\x0d\x9aF\xde\ +\xa0b\xa9\xc5>dd\x22\xed\xcf\xd2h\xa8\xe8F\x82\ +ecQ\xdd\xdb\xb1\xffNr\x90@\xe6\x03Hwu\ +z\xb7nq+\xdaP\x84\x0a\xe8\xed\x07X\x07\x1b\x9a\ +\x1f\x11r$\xc1\xddtDTd\xcb\x91\xeed|g\ +\xcb\xf8\x17\xaeiH\x10\xd3\xd1\xdf\xa0*\xf4\x07\xba\xb3\ +\xde\xd8^S\xb0L\xa3\xa1\xa2\x8b\xa8U\x1f\x1b[\x9e\ +%\xd1\xe7\xdf\xd6y\x94\xe9\x9e\x8f\x96\x8aV\xef\xb9\xe2\ +\xddYL\xec`\xc4?\x8c\x94\xef\x01\xfc\xaeVB\x97\ +\xdd\xae\xe5m\x10/ \xc0\xf3a\x17\xd9\xcf\xe8hr\ +\xbe\x11\x139\x07\xe0\x89zl\xb2\xc1/c\xdd\x08\xe4\ +\xfc\xf1\x19\xef\xc6f\xadNV\xd1\x8d*]\x8d\xf6\xc1\ +\xb6\xc5G\x09$\xbeh..@K\xbbxw\x14\xd3\ +\xef\xb4\x19\xe0y\xe3\x9c\xc1qK\x0e\x01q\x00\x04\x07\ +\x92\xdc^G\xaadv)\x1f@\xf0\x02\x88\xb9~ \ +/d}\x7fn\xefIX\x81\xc8\xd8\xa3ZG\x1a\x98\ +\xb3I|Wg\xc3\xc6\xdd\xb1\xce\x09O\xacJ\xbb\xaf\ +h4Tt#O\xae\xc9\xa9\xa7\xe0N\x12\xe6\xab\xac\ +\xd8@\xf9\x93\xeb#S\xd9\xea\xcd\xed\x91\x17\x83db\ +{\xcb\xf8\x07A\xb0\xbf!\x86\x88\xe0\x1b$*t\xe4\ +\x0a\xbe3\xf9\x08\x82\x7f\x080W\x02\xbe\xe01\xf7B\ +U\x06K\xa2\x16\x87%#QYWa\x9f\x0a\xe2,\ +\xed\xc2\xb5\xf1\xeea\x22\xc8\xb4u\xba\xe7l}\x1b:\ +5\x22*\xba\xcag\xc2\x9br\xc6\x12h\xfd*\xe1\xfd\ +\xdc#4O\x04S\xb2\xf4n\xafn\xc1\xc7=\xf5]\ +\xe7&a\x0f\x0c\x9cA1\x1bC!\x18b\x80\xaf\x0b\ +0\xf8\xb34\xb9\xb2q\x8b\x22D\xde\x078_\x80\xd7\ +!x\xc3\x0f\xe4\x0d7\xe7\xbd^\x8c\xf3\xfdR\xa6s\ +,\xb6\xb1\x1d\xe7t\x02M$\xeat\xb6l\xf4\xb1\xc3\ +\x22\x1f\xd2\x98H\xfb\x8fj4Tt\x95\xaf\x12\xde\xa4\ +3\x9a\xc4\xa4u\x0b\xefgNA\xf2P\x10\x98\xc9\xf3\ +\x98{\xb8T\xca\xfd\xbb\xc6$\xb6c\xdc\xdd\xd3\x0a\xf8\ +u\x10\x83H\xee.\xc0nzF\x0c\x08\xb0\x8a\x22\x8b\ +\x04X \xe4|\x08\xde\xf0\x02y\xa3\xd3\xf7\xe6\x97K\ +7\x1e\x14\xe9x\xe3\xc2&k\x98\x05\xa6\x00\x8e\xd0\xe2\ +\xa8M\x16\xdc)\x1dY\xefl\xb5rT\xd1U\xd6\xbf\ +\xe3\x1dIb\x12\x01g\x03\xef\xda-\x11\xe2v\xf8\x98\ +R\xaa\xe6\xe4mIl\x11\x0f\x9c]\x1d\x83]\x09\xd9\ +E\xc8\xed\x09lO\xc8\x8ek\xfe\xbbw\xd9\xdb\xe7Q\ +\x16\x13|_D\xde\x13\xf2}\x8a,\x0a \x8b\x5c1\ +\x0b\xbd\x9c\xbbH\x17?\xac\xf7J[\x02\xf6(\x10I\ +M!o\xdeU\xa0@\xa41\x9e\xf1\xff\xa2\xd1P\xd1\ +U6\x90\xeeF\xeb\x07\x961\xd3ITo\xe4?}\ +^D\xa6t\x18\xef\xaer\xb2\xef[~2zU\xc7\ +c\xdb\x04VPg\x8c\xd4\x91\xa6\x8e\x81\xd4\x09Y\x07\ +\xa0\x8e\x94~\x14\xd6\x01k\xfe\x9f\xa0\xb6Pw1\x05\ +\xe8\x06\xb0\x82\x22m\x00\xdb\x84\xd2\x06A\x9b\x80m\xa4\ +\xb4!@\x9b\x18.\x0f\xfc\xa0\xcd\xa7ic`/\xfd\ +\xfb\xdb]K\x86=\x05_g\xee&dG\xc6\xd9\x07\ +\xda\x16R \x8f\xfbR1\xa1\xb2\xb1\x82{[\xa7\xe7\ +\xfd,*\x85u*\xbaJ^\xe9L\xd9C\x1c\xf0A\ +\x12[o\xc2\xce\xab\x0b\x90\x19\x81\xc8\x1do\xaf\xf0\x1f\ +\xdfk:\xdc\xb0\xc6i\xe5h\xf4\xa6\x05c9\xb0\xed\ + \xde\x0b\x00<\x13T\x18\x91\x04\x00\x18Ho\x08\x82\ +\x80l\x07\x00;`W@\xd3\x0d\x00\xae\x9b\xfd$0\ +\xf0\xc5G\xa0;Q\x14\xd5\xa21\x16\xb3\x7fB\xa2\x11\ +\xe4^\x1a\x91\xcd\xce\xb4,\x09\xc0T<\x9d\xbb_\xa3\ +\xa1\xa2\xablf\xd5\xb0c\xfc{\x01\x0c\xdd,\x03{\ +\xca\xbd\xbe\xc8\x9ds\xde\xf4\x9f\xd6\x1d\x99\x82\x1e\xaa@\ +\xae\xadr\x86\x138\x19\x82\xff\xa7wk\xf3T\x84\x07\ +\x99\xd8\xe9z\x17\xe8\xeeVEW\xc9\x13\x0bG#\xde\ +?n\xdfDrl\x9e:\xc8\xfc\xc5\x87\xdczU\xda\ +\x7f\xa2Y/\xc8+(\xec\xbd\xda\xa3z\xdb\x07\xd8\x16\ +F\x82\xce\x8e\xb5\xbawi\ +4Tt\x15\xf4Tw\x15k\x98e8\x91\xe0.\x05\ +|\xd8\x97A\xe4\x81\x80\xe6\xfe\xf6\x5cn\xa6\x9a8D\ +\x9bU\x0d\xe8S\xe18\xdf#\xe4H\x80?&P\xab\ +Q)\xa8\xd8\xe6D\xf0\xfb\xce\xac{\xb9V\xd7\xab\xe8\ +*%\xc0\xe2$*\xfa\xc2\xb9\x8c\x06\xe7\x11\xb0\x0am\ +\x00A\xe0y\xa1<\xe0\x0af\xea90\x22\x916\xfe\ +Q\xad\xbd\x8fC|\x0f\xc2\xef\x818dCM[\x94\ +\xcd~\xdefJ\x80\x9f\x95\xaa\xe1\x8d\xa2\xa2\x1bi\xba\ +R\xf6~61\x89\xe0\x9eE\xecZ\xf2O\x01\x1f\x16\ +\xf0\xf1.\xe6\x9e*'3\x0ee\xedt$\xb1\xb5c\ +\x9c\xc3\x099\x1c\xe0\xf7\x09\xf4\xd5\xa8\x14Um_\xf5\ + g'\xd2\xfeL\x0d\x86\xa2\xa2\x8b\xd2\xbeZ\xb4m\ +\xc2\xb9\x98\xc0\xf9\xc5v\xf6\x11\xc0'\xf0\xbfA\x80'\ +\x02\x13\xccZ\xd9\xe1?\xa3\x1dM\xca\x835\xbd\x94\x0f\ +&\xe5 \x00\x07\x11\x1c\xa8Q\xe9\x91T\xf22\x88\x5c\ +:\xfbM/\xa3u\x14\x8a\x8an9-\xa2\xe3\xe2;\ +Z\x96\x7f\x0d\xc9\xfa\x9e<\x8b\x22\xf0\xf7@\xf0\x8c \ +\x98\x9d\xed\xf2\x9f\x8dz\xc7\x1c\x94H3\x81\x8b\x1b\x9d\ +A4r\x10\x80\x03\x01\x1c\xa2\xbd\x92{\x5cl]\x01\ +~\xdfI\xf7r\xcd\x16)*\xba(\xeb\x94\xf3A\x0e\ +\xf1[\x80\xdf,\x05\xe7\x1c\x8a\xbc.\xc0l\x11\xce\x16\ +\xf2\x85\xfb\xdaro\x1e?\x1d\x81\x8eT\x01\xe7@C\ +b\x80\xb1\x83!\x84\x0c!1\x04\xc0PM\x17\x97\xcc\ +\x99m\x00\xc8\x9f|\xcf\xba,1)\xfb\x8eFDQ\ +\xd1E8\x0aa\x86\xd7:\xa3\x09\x8c/\xb5+\x1d\x22\ +XM\xe2\x1f\x81\xe0E\x10s%\xc7\xb9WN\xce-\ +hV\x97,lj\x9a\x98\x08\xf6\xa1\xc8P\x12C \ +\x18B\xa2\x9fF\xa6$\xdd\xa4\xee\xcf\xfa\xfc\x85\xde\x89\ +WTtC\xca\xf2\x93\xd1\xabW/\xe7<\x02g\x97\ +\xb2\x15\x9f\x00\x1d\x14\xbc.\x90y\x10\xbc\xe6C\xe6\x05\ +\x9e\xffj\xe5d|\xa8\xa3\x08<5\x0c\xd6\xfe\xbb\xc5\ +v\x86\xc1 \xc3`\x10\x04\x83\x08\x0e\x12` \x89-\ +4B%\xbf\xbb}\xd2\x83\x5c\x5c\x91\xf6\xe6h4\x14\ +\x15\xdd\x08\xd0>\x06}\xe3q\xe7\x02\x0aN'QQ\ +F\xe7^m\x04\x16\x88\xc8;B\xbe\x0d\xc1\xdb~ \ +o\xfb\xe2\xbdS=\x11K\xc3\xf6\x82\x14\xafrvp\ +\x18\xech\x84\x03\x04\x1c@\xcaN$\x06\x89p\xf7B\ +\xb54T\x0a\xca\x5c/\x08.Nd\xfc\xc75\x14\x8a\ +\x8an\x04\xe9l\xaa\xd8\xd6\x16\xefb\x12\x8d\x04b!\ +\xf0\xa2]\x04p1 \x1f\x08\xb8\x88\x94\xc5\x81\x98E\ +A\x10|l|\xb3\xaf\xd2\xab?\x8a\x8a\xae\x82\ +|U\xd2nQe\x8f\x85\xc1y\x04\xb7\xd3\x88(*\ +\xb6X%\x82[|\xcf\xba\xbebR\xf7\xfb\x1a\x11E\ +EW\xc9;\x0b\x8e@l\x87\xed\x9d\x9f\xd0\xc8\x05\xc5\ +l\xaa\xa0(%dh\xf1\x16\x047-\xef\xf2Z\xd5\ +W\x5cQ\xd1UP\xac\xab/G\xd7\xc5~lA\xce\ +\x07\xb0\xbfFD\x09\xbfU#\xfe\xe2#\xf8\xddUi\ +\xff\x89f\xadDVTt\x15\xf4l;\xc1\xb3 <\ +\x96\x84\xad\x11Q\xc2\xd4\xf1G\x04\xb7\x0b\xf8\x87x:\ +\xf7\xb6FDQ\xd1UJ\x86\xce\xb1\xd8\xc6v\x9c\x14\ +\x813H\xd4iD\x942\xde\xd5\xce\x12\xc1m\xcb\xe0\ +N\xdf6\x83.\x8d\x8a\xa2\xa2\xab\x94,K\xebQ\xd5\ +\xa7\xd6>\x85@\x0a\xe4>\x1a\x11\xa5L\xcej\xdf\x06\ +1\xc5\xf5\x9c[*'v\xfdK#\xa2\xa8\xe8*\xe5\ +\xb7\xfbM\xd9C\x1c \x09\xf2d\x02U\x1a\x11\xa5\xc4\ +\xd2\xc7\xdd\x10y\xc0\x87d\xf4\xacVQ\xd1UB\xc3\ +\xca\xd1\xe8]\x15\xb7G\x92\x1c\x05`\xa8FD\xe9\xc9\ +\xf41\x89g\x03\xc1-\xed\xab\xdd\xbb\xea\xee@\xbbF\ +EQ\xd1UBK6\x15\x1bD\xc8\x09\x84\x8c&\xb9\ +\x83FD)\x8a\xd0\x02\xcf\x89\xc8t7p\xee\xd6\xf4\ +\xb1\xa2\xa2\xab \x8a=a\xf7\xdb\xcd\xfa\xbeex2\ +\xc0\x1f\xab\xdd\xa4\x92\xe7\xd4\xb1\x0f\xe0)\x88\xdc\x93\xcb\ +z\xf7VM\xc5G\x1a\x15EEWQ\x00,\xaaG\ +b\xcb\x9a\xd8\xf7\x8d\x09\xeaA\x0e'\xd0K\xa3\xa2l\ +\x8a\xd0R0GD\xa6\xe7\xe0\xddU\x95\xc1\x12\x8d\x8a\ +\xa2\xa2\xab(\xeb`\xc9HT\xd6V9?\xa4\xc8p\ +\x80Gh_Ye=B\xdb\x06\x91\x99B>\xd2\xdd\ +\xe9\xde\xb7\xc5\xadh\xd3\xa8(*\xba\x8a\x82MKA\ +\xef\xbb\xab\xbd\xbfe\xf8#R\x86\x93\xdcC\xa3\xa2\xbb\ +Y\x8a\xbc\x14\x08g\x06\x0cf\xbe\xd3\xe6?\xbd\xd7t\ +\xb8\x1a\x19EEWQ\xf2\xcc\xea\xa438N9\x1c\ +\xe4\xe1\x00\x0e\x22\x90\xd0\xa8D\xe2\x0e\xed\xbbB>&\ +\xc2\xc7\xba\xb2\xb9Y5S\xb1J\xa3\xa2\xa8\xe8*J\ +\x11Y\x9cDE-\xad\x83\x0d\xcc\xe1\x06r\x98\x80\x83\ +I\x18\x8dL(Dv1\x80\xe7@<\x19\xf8\xe6\xb1\ +xkn\x81FEQ\xd1U\x14\x94V\xfb\xc1\xaaj\ +k_#\xe6{\x868P\x88o\x13p42\xe5P\ +e,oB\xf0\x8c\x08g\xe7\x0c^\xacnq_\xd3\ +\xc8(\x8a\x8a\xae\x82\xf22\xe4H8\xd6\xfe\xb6\xc5}\ +E\xb8/\x80\xfd\xb4(\xab$\xee\xcc~\x0c\xca\x1c\x08\ +\x9e\xf5\x02<\xbb\xaa\xdb\x9b\xab-\xf2\x14EEW\x09\ +\x19\xcd\x00/j\x88\xedAG\xf6\x85\xe0\x9b\x86\xf8\x86\ +\x00{\x13\xe8\xad\xd1)\xd8\x0e\xf6]\x08^\x11\xf0U\ +\x11\xbe\x0a\xe2%\xed\xd6\xa3(*\xbaJ\x84\x85\xf8\xc2\ +d|'R\xf6!doB\xf6\x04\xb0'\xc8]5\ +5\xbd\xb1g\xb0|U\x80y\x10\xbc\xeaQ\xe6\xad\x14\ +\xefu\xed\xd0\xa3(*\xba\x8a\xb2^^\xab\x87\xb3k\ +mlW\x00{\x1a\x06{@\xb0\x0b\xc1]\x04\xb23\ +\xc8\xed\x18\xb1\xf9/\x02\x0f\x94\x0f\x08.\x14\xc8B\x02\ +\x0b\x83\x80\xff\xf4E\x16\xbaY\xefU\xbd\x1b\xab(*\ +\xba\x8aR\x10\x16\x8eF|\x1b+\xb6\x13l\x7f'\x8a\ +\xd9\x0eD\x7fB\x06\x00\xec\x0f\xcav\x10nK\xa2\xa6\ +\x8c\xd2\xc09\x00\xcb\x09Y&\xc2e\xa0,\x12\xe1?\ +!X\x18 X\x88\xc0^\xf8\xaa\xc9~04\x03O\ +G_QTt\x15\xa5\xe4Xp\x04b\xfdw\xa8\xe8\ ++\xbe\xd7\xcf\xb2\x82\xadL`\xfa\x91\xd2\x07@o\x01\ +{\x13\xd2\x1b@\x0d\xc0\xde\x04*\x01\xa9\x04\x11\x13A\ +\x15\x88\x18\x84\x9fo\x83\xe8\x90\xa8\xfe\x9cH\x0a\x04+\ +?}\x0a\xa5\x1d\x02\x8f@\x17\x80n\x90\x9e\xc8\x9a\xae\ +9\x94\x95\x10\x88\x80m\x00\x96\x91\xb2L\x84\xcbE\x82\ +\xe5>\xb8\xcc\xc0Z\xd6\xd1\x91\xfdX\xbb\xec(Jy\ +\xf0\x7f\xc0D\xab\xfd\x86#\xc3\xfe\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00.\xe4\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x8b\x00\x00\x00Z\x08\x02\x00\x00\x00\x07\x192\x22\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00.\x9bIDATx^\xed}\x07@\x94W\ +\xb6\xffg\xb21&n\xa2\xc6\x86\xa2\xd2\xbb\xf4\x22\xd2\ +AAP#b\x03\xa4\xf7\xde\x87:\x0c\x0cS\x19f\ +\x98\x81\xa1w\x90^E\xb0 *\xdd\x02v\xa3\xa6\x99\ +\x97l\xfeIv\xdf\xdb\xff\xeef\x93\xec&\xbb\x9b\xec\ +}\xe7\xfb>\x18F\xc0\xca\xf8\x9e/\xc9\xf8\xcb\xe4\xce\ +\xfd\xbe\xb9\xcc\xdc\xdf\x9cs\xcf=\xf7\xdc{\x96p\x8b\ +[\xfeM<\xd0\xbf\x7f\x82\xff\xf0'\xfc\xf1o\x0c\x9e\ +0\x0cC\xc4\xbf_\x1f\x8f\xee\x81%\xf8\xa5%\xf0\x8f\ +|\xcc\x96\xc8\xce\x9by,Y\x82\xdf\x01\xcfK\x96\xbc\ +\x02E\xfc\x99\xfc\x87\xbfx\xe5\x15\xfc\xff\xd3\xf5\xf8]\ +x\x11\xff?%\xf4\x10\xc6\x1671D\x0d\xf4\xfcZ\ +Z^\x155\xb7<\x9d]\x92\xc6*J\xc9\x11'\xd3\ +\x0b(tQR\xb60)\x0b\x90/\x05\xb2\xe6\x17\x0b\ +\xe9\xae\xc8O\xca\x16Qp\x08)Dw\x01\xa0\xdf\x08\ +\xe0\x05\xa2\x06\x9e\xc9\x97\x85)9\x85)\x0cq*\xab\ +\x18:9\x83S\x96\xc9\xab\xc8\xca\xab\xca\x16\xd4\xe4\xe4\ +\xd7\x01\x05\xac\xc2F\xe0\x82S\xdc\xc2-n\xe5\x95\xb6\ +\xe7\x95u\xf0\xcb;q1a\x8a\xea\xe9\x82jZn\ +\x05\xbc\x0d\x9a\xa0d\x09\x13\xa8yq\x19\xb9\xb1i\x9c\ +\x98Tvt\x0a+\x0a\x90\xcc\x9c\x8f\xc8d\xe6/\x04\ +\x0b~}\xb2\x12\xfa\x07G*\x0b\xfaj\x1a\xd0oD\ +\xd7\x11 \xfa\x90,\xa7qb\xd3\xb9\xd0\xb1\x09\x99\xfc\ +D\x9a\x00H\x85\xdeNg\x15Q9\xa5\x99\xb9\xe5@\ +\x15]P\xc3\x10\xd6\xb1\x0a\x1a8\xe2\xa6\xdc\xe2\x16^\ +i+\x90\x843\x04\x1c\xc2\x1d\x84\xdc\x14\xc6Q\x05Q\ +)\x9c\x90\xf8\x9c\xa0\xd8\xac\x80\xe8L\xbf\xc8\x0c\xdf\x88\ +t\xdf\x884\x9f\xf0\xd4i\x84\xa5\xfa\xfc\x0a\xbc7\xf0\ +>\xf1\x0dO\xc3\x81wQ\xba_$ #0\x86\x1a\ +\x1cK\x0d\x8d\xa1\x05Gf\x06G\x92\xcf\xd3\x08\x89\xa2\ +\x85Fg\x87\xc5\xd0#\xe2\x18Q\x89@*\x9bd\x0b\ +\xb4T\x0a\x03\xa8*\xa6r\xcbhy\x95\xf4\xfc\x1a\x86\ +\xa8\x9e-n\xe4\x167\x03I8CY\xbcJ\xb8\x9c\ +\x9c-\xde} \xd0'\xd0'(,0%#.>\ +9*\x8e\x12\x11\x9b\x14\x1e\x9b\x08\x08\x8bI\xf8\x15\x0b\ +\xf5@b\x18t\x0e\x01\xbc\xa3\x12\x92#\xdc<\xfc=\ +\xfd\x12\x9d\x02\xdd\xf6%{\xeeK\xf2\xd8\x97\xe8\xbe/\ +q\xe69\xc9\xc35\xc9\xd3\x95\xe2\xb9?\xc5k_\xec\ +\xd1\xa0\xc0\xcc\xb0\x84\xac\xc8$FL\x0a+>\x83\x97\ +D\x13\xa4\xe4\x14\x00\x11\x99\xdc\xf2l~5\x08\x13\xbb\ +\xb0\x11$\x09g\x08\xa4\x8c\x92]\x18\x18\x19\x8d\xd0%\ +\x84n\xde\xbcQ\x8e\xd00BS\x08M\x12\xb8\x89\xd0\ +\x0d\x02P\xb8\x83\xd0\xdd\x87q\x0f!\xc0\x9cJY\xbd\ +\x5c|\xe3\x8bo\xe11\xdfe\xfe\x17\x7f\x1f\xa1\x8b\xef\ +\xee\xf6\xf2\x1d\xf1\xe7!.\x1b\xb18\x88\x93\x87r%\ +\xe0\xa1\x5c\x12\xf9(\xcf\xa3\xdc\xd7\xd7'90:-\ +$>3\x22\x89\x0ez2\x9e\xca\xa3\xd0\x85\xa0\xf72\ +s\xcb\xb2\xf9U0\xfap\x8a\x9ap\x86\xd2\x18\xe2\x88\ +d^w\x0f\x17\xa1\xcb\x08\x8d\x00+\x83\x83|\x84&\ +\x88\xf2\xa5\xeen\xc6\xf5\xeb%W\xa7\x0aGF\x04\xd5\ +\xd5\xc9\x99\x99>t\xba\xff\xff\x15dg\xbf\xc0\x8f:\ +\xbf\xf1\xac,?\x0e'8\x8b\xe2\xf3n\xafG6b\ +f\xa2\x9c\xf8\xdf'\xecn\xd9\xb5\xbb\xddi>\xdc\xc6\ +\xf6\xe8\xdbo\xdb\xe1r\xd0\xe9\xdd#\xbb\xdd\x8e\xee;\ +\xe2w\xc0+\xc4\xdd?\xd2;$!\x91\xc6\xa7\xe5\x96\ +\xd1\xf9\xd5\xec\x82\x06\x9c\xa1\x94\x1cQH\x02\xab\xa3\x8b\ +C\xc8\x10\xb021<,\x920t\xf2d\x0e\x9bW\ +\xd1\xd25\x1a\x12\x12\x97\x9d\x96\xaa\xabkdbbN\ +b\xdb6\xcb\x8d\x1b\xb7(*\xaaBAR\xb9\xf8\x82\ +\xa9\xe9vh\xc4\xcc\xccBYY}\xf5;k\x8d\x8d\ +L\x0d\xf4\x8dH\xe8\xe9\x19\xe8\xe9\xeaK^\xce)l\ +\xdd\xaa+]cll\xbaj\xe5\x1a\x0d\x0d\x1dh\x0a\ +\x1a\x84f\x8d\x8d\xb7\x91\x8d/\x12\xd0\x88\xbe\xbe\xf1\x9a\ +5rzzF\x92\x06\xa1\xa0\xa4\xa4\xd6\xd7w\xb6\xbb\ +]\xd4}\x91S3\x9c\xdd0\xc1a\x8a\xb4\xea\xcb\xa7\ +F\xce\x7fqa\xe0\xb398?\xf0\xd9\xf0\xf8\xe7C\ +\x13\x9f^\x18\x07\xfc\xc7\xf91\xc0'\x80K\xd7\xfe\xb0\ +\xfb]\x0f\x10\xa3\xac\xbc\x0a\x10#\x9c!J\x96 (\ +&\xa7\xbd\x83\xbd\x10CW\x8a\x8b\xc2J*\xcf~\xfc\ +\x05\x08gI\x0e5\xd9\xccl\x9b\xcd\xcc\xc3\xce\xceN\ +MMMGG\x07\x0ad\x9d\xb5\xb5\xb5\xe4\xeab\x0a\ +\xd0\x0e\xb4\xa9\xae\xa6\x1a\x1a\x91J\xcd\x16\xa6e\xf2\x01\ +\xa9\x19<\x0e\xbf\x86_\xd0\x98\x92\xc1#k\xa4\x91\x9c\ +\xce\xadm\x1cLN\xe3J*\xb3\x19b\x87\x9d\xbb\xf5\ +tummme\xfb\xf1\xa0\xb5\xed\xdb\xb7+**\ +\x9a\x9b\x9bK\x7fM\xe8\x8a\x81\x813\x0e;\x0f\xff\xed\ +\xaf\xfd\xc40q\xe7\xdc\xc0\xc1\xce\x13\x1f\xdcz\xffo\ +\xd7\xde\xfb\xeb\xd3\xe0\xf6\x87\xdf7\xb6\x8fXX\xed\xcc\ +`\x17\xc3\xe8\xc3\xc8\xaf\xc1\x19J\xcc\xcc\xf3\x8f\xa2I\ +342R0#CWJJ\xc2K*\xcf|\xf8\ +;\xc4\xcd\x15?\x91\xa1\xc5\xb0\x22\xfd^\x92!e%\ +\x85\xa2\x8a\xde\xb6\x9e\xcb\xcd\x9d\xe3\x80\xc6\xf6\xd13C\ +\x1f^\xbd\xf3\xd7c\xad\xc3d\x8d4\x1aZ\x86>\xf8\ +\x0c\xd5\xb7\x0cI*\xbb\xfb\xaf\x1f\xf5\x0a\xd6\xd1\xd1\x96\ +0dee\xb5\xf8OH\xfe\x0a\x1f\xc9\xd0\x993\xce\ +\xbb\xbd\xbf\xf8\xa2\x0d\xa1q\x84\xae\x9e:\xe9\xdav\xfc\ +\xde\xf5\xbb\xdfL\xdd\xfe\xf3\xd3\xe0\xe6\xfd\xef\x80!\xbf\ +\xe0\x04Jv>\x90\x94#\xa8\xc6\x19J\xa0\xf2\xfc\x22\ +\xa8m\x1d\xac\x19\x19\xbar\xea\x14\x8cIW\x09\x92\xae\ +\xd7\xd5\xc6g\xb1\xdaF&\xbfNI\xcd\xa5R\x12\xb7\ +\xea\x1a\x12*h;\xc0\xdc\xdcr\xd3&\x05ee5\ +(\x905$LM\xa7o\x90\xae|\xa62\xb4\x00m\ +\xaa\xaaj\xaeZ\xb9\xca@\xdf@\x97x\xe8\xe9\xeai\ +\xa8\xab+)*B\x81\xac\x91~\xe8\xe9\xe9m\xde\xb4\ +\x09\x9e%\x95\x86\x06\x06\xabV\xad\xd6\xd2\xda\x0aJX\ +V\x1f\x8c\xfcv\xdb\xb6Y\x18\x1a\x9a\xac[\xb7\xc1\xc0\ +\xc0\x18\xcad\xe3PPQQ\xef\xef\x1f\xe0\xe5\xa5\x11\ +#\xfa\x18B\xd7N\x9fz\x1e\x86|\xfcc`(\x02\ +\x93\x01\xe6\xa9\x04C\x19\xb9\xbea\xe93\x0cM|\xf5\ +Uwaa\xf4\x993y\x97.\x95tu1\xc08\ +\xf9\xfc\xf3\xc6\xdf}V7yE|\xf6\x8c\x98\xc1\x08\ +\x15\x08b(\x14\xef\x94\x14\x9f\x94\x14\xdf\xb8\xb8#\xf1\ +\xf1\x1e\xa9\xa9\xbe\xc4K\x99!9\xd9\x07\xdaLH\xf0\ +\x80\xf6SS\xfd\xe0\x0f\x91\x80J\xe2o-\x0c\xe9;\ +\x89\x9b\xfdbb\x0e'&\x1e\x95|0hVV\x1f\ +29\xd9;&\xe6\x10\x85\xe2%\xdd`|\xbc\xbbX\ +\x9cy\xf9r\xc5\xb7\xdf\x9e\xfe\xd3\x9f\xfa\xfe\xf6\xb7\x0b\ +\x9d\x9d\xce\xed\xbd\xf7\x9fY\x86\x02\xe3\x133y\xe9L\ +1\x9d_\x893\x14\x9f\xc1\xf5\x09Kko\x07\x19\xba\ +\xf2\xa7?\xf5\x83\x99P \x8c\xb9~\xad\xea\xc1\x83f\ +\x90!`\x88\xf8E\x00\xc0\xf2\x06\xdd\xfa\xde\xd4T\x19\ +\xb0\xf8\xc5\x17\x9d_~\x09\xe8\x02@Y\xb6\x80\x96\x89\ +\xf6\x17\xdb\xf8\x9c\x16\xc8fe\x02h\xf9\xab\xaf\xe6~\ +\xea]d=\xfcP\xc0x\x91\xbeG\xf2\x87\xa0\ +\xfe\xc4\x09\xf6\x9c\xab\x8fo\xed1W\xa5[\x83\xaf\xd9\ +\xd3\xc1:v>\xa7e\x98\xd92\x84\xa3}\x9c-*\ +\x88f\xa6\xf9CM\xeb0\x0bj\xda\xc6\x18\x15m\xdc\ +\x8a\xee\xea\xb2\xe6\xfc\xbaS\xd9%\xad\xf9\x95]\x95\x15\ +]\xe5\x95\xdd\x95%\xc7\x84\xdd\x97\xb8\xbc^\xdf\xdf,\ +\xc3\x96\xfe\xe6\xd5\xdf._\xb6\xfa\x9d\x15\x80wV\xbd\ +-\x0d\xb2Rri\xc5\xcaU\xce\xfb\xdd\xbdC\xe2\xc0\ +\xc0\xa6r\x8a\x18\xc2\xe9q\x88\xeb\x13B\xca\x10\xce\xd0\ +\xcd\x9b Y\x1f\x11\xee\x03\xd0o`,Hc\xea\xcb\ +\xfb\xf0\x1e\xf8\xb1\xcc\xa9'_N\xde\x7f\xbf\xee\x11W\ +qU\xf9\xe5\x1f{\x09m\xb9\xe0{\x1fSy\xf9\x9b\ +o\xe0\x8d`\x1a\xc1\x0f\x93\xbc\xed\xea\xbd{`\x86\x92\ +\xbf\xd9[\x84\xe5\x09?\xe4gmv\xe1\xaf@\xb4\x06\ +V\x12\xfc\xad\xbb\xad\xe5\x8ea\x7fO\xa1\x22z\x06\xca\ +\x02@\x81\x85\xb2\xd9\x88\xc1@\x994\xbc2;\x07Q\ +\x8d\x05\xa5\x86\xb5H-u`\xef\x95\xd8u\xb4!\x83\ +j\xa4_\x81\x0cj\x90|\xc4\x18\x0b\xa5\xd1\x11[E\ +CUo\xab\x9e\xa9\xe96\x07{\x07;;{;{\ +{[[\xbb\x19@\xd9\x1e\xacV\xbc\x1e.\xd8\xdbo\ +\xd51\x89\x88\xca\x8aNb&g\x0929%La\ +-i)\x80\x96\x9b\x95\xa1k\xd7\xc0\xebC:\x14\xe6\ +`\xfc\xeb\xfb\x15\xd8\xbd?\x7fz\xab\x82\xe8\xaf9W\ +\xc7\xfe\xf0\x9f\x9d\xb7G\xaf\xc1\xef}\xa1\xb7Oue\ +\x06\x0a^_\x09\x1d\xbaP\xcb\xf3\xff\x96t\xcdu\x0c\ +\xdb~\xe8\xd0\x01\xa2\xe3\xf0\x09\xf5\xc5K\x05\x1fN\xdd\ +\xff\xec\xd3\xa6\x1b\x1f\xd7\x96\x8eeN],}\xc4\x07\ +~|\xb3\x0b^\x9d\x18\x1d-\x80q~\xe4t\xf7\x7f\ +<8\xdeS\xe7\x1a\xf3u*\x031\xb2\x11\x97\x8ex\ +\x19(\x1d\xc3\x1c0\xcc\x1c\xc3\x5c\xddG\x02\xd8(\x8f\ +\x8b2mD%V\x0dH?\xe3\x0c\xfd\xa70\xd7\xd6\ +0\xb7.\xa6['\xdd\xad\x8b\xb1\xbb:>\x171\x12\ +\xfe_\xc2;\xaf\xafVUQ355\x03V\xacl\ +l\xad\xad\xf1\xc9\x99\x95\x15n\xb4\x03,\xf1\x12^\xb0\ +\xb1\xb1u\xb0qx\xd3\xe8-\xe5p-\x97\x10\x8f\xf4\ +\x9cBZn)\xbb\x00~\xf1\x8fch\xe2\x87\x1f\x06\ +\x7f\xf8\xe1\x9c\x04\x08\x8d\xfe\xfeZ\x11u \ +\xfa\xda\xa52\xd91t\x11\x0c%0\x01\x86\xfbO\x7f\ +\xf2Q_u\x81}\x0a\xca\xa6\xfc\x83\x9a\xeenF\x8f\ +\xb0\xcd\x89\xb6\x17q\x1dE\x5c'x\xe6\xc4;D\x06\ +m\xcfEL`\xc8\xa6\x09\xe9&wa\xd8Vy\x8b\ +\x03\xfb:\x8b\x5c\xea\x05.\x0d\x22\xfb\xfcT.\xca\xce\ +G\xf9\x9b\xd5\xb6(+\xaa\x90\x0c\x01\x0d\xd66\xc0\x90\ +\xad\xa5\x84!\xa0\x08\xcaV8I J\xeb\xd6\xc8[\ +Y:\x1fp\x0f\xcc`\x89\xb3ye\xdcB\xc2\xa7\x00\ +\xd66X\x0am3ZnF\x86\xc6\xaf]\xab\x98\x9a\ +*\xbfz\xb5B\x1a7oV\xcf\xa9y\xf8j\xd5\xa3\ +\xae^\xbbV\x09\xfa\xf31\xef}\xcc\xa5\x1b7\xaa\xae\ +_\xaf\x94\xbe\xe1\xf6\xed\x9a\xde^0>A\xaa\xaeK\ +\xf9\xa8\x9eCh$o\x19C?]D\xff\x02\xddp\ +\xf9T7(\xfc\xa9\xf7\xaf\x09B\xeb\x0d\x99\x88\x17\xf2\ +M\xca\xe4J\x95\xfb:\x86wu\x0c$\xf8H\xcb\xb0\ +v\x932\x17\xf1\xccY\xa5&\xc5H;\xe1\xac\xef\xbd\ +\x085z\xbfm3\x02\x91\xb2nBZ\x89c<\x94\ +\x9e\x87\xf2\x14\xd4\x954\xd44ge\x88`\xc8\xda\xca\ +\x1a\x88\xc1\xa9\xb1\x84\x7fD\x19\x7fa\xad\xa4\xa2\xee\xe6\ +\x11\xe8\x1f\x9e\x84\x1bry\x95\x1c1\xe1\x97K\xa4\xc2\ +|h\x0eC0Z\x5c\x19\x1a\x12\x12\x8a\x1e>\xf4K\ +\x88+3\x8e\x0fi/\xe2s34\xf6\xed\xef\xfb\xf7\ +\x9c?\xe4~\xd3\xcf\xfb\xe3`\x87\xba=\xea\x9a\xaf8\ +Fi\xb3P>8\xa7C\xbeM\x1d\x93S\xbfal\ +|M\x0aw\x0c\x8d\xabu4C\xff\x18\x9d\xf4ED\ +\xf4{\xeeI\x9f\xfa{\x8c\xc6(\x85r\x8dY\x93\xba\ +\xe9\xa3:)\x13\xf2\xfb\x0a\xf2\x10M\x80\x04\xca\xda*\ +Z\x1a\xda&&f\xd6\xa4\x96#\x00|X\x12\xdc\xc0\ +\xb3\x05\x14\xa6a\xa1\xa6\xb9\xd5;(6,\x8eJe\ +\x89s\x04\x95\xbc\xa2c$C\x1ci\x86n\xdf\xaez\ +\xefV\xfb\xc8\xb9\x86\x8b\x97\x16\x1cQ\x9e\xbb\x17d\xfb\ +F\x0912ah\xfc\xd3[Mq\xffJI\xfd*\ +5\xf2|dBLB\x89\xb8\x9c\x16\x9f\xe3\xdb\xe1\x1b\ +\xd4\x17\x14\xf1\x13uA\x86Z\xed\xb51\xcc3\xf3\xfb\ +D\x16b\xc1XU\x80xvi\xb6\xa0\xeb\xf6\x14\xe8\ +R>\xdb\x1f\xff\xb1;\x07\xb1\xc3\xae\x87\xae\xc0V(\ +\xab\xa8\x9a\x98\x98\xda\xd8\xe0\x0c\x91\x8a\x8ed\x08\xb8\xb1\ +\xb0\xb0\x04X\xc23\xa1\xf8\xd6\xc9m\xb4\xb4\xdbu\xf0\ +h0\x8d[\xc2\x10T\xe5\x167\xce\xf8\x14\xc2\xd3\xda\ +p\xcf)n\xcb\xdd\xba]u\xffn\xdb\xf8p\xdd/\ +\x8a\xa1\xdf\xddiNB\x19V\xf1V\xcb\xb1\xe5+\xde\ +^\xf1\xe6\x9bojjjjl\xd6\xd0T\xd7\x8cC\ +\xf4\x05\x19\xaa\xd5\xd7r\xe9\x0b\xcc\xfe\x89FGt\x06\ +\xca\x89\xfe8\xc2(\xab\xcc\xb1\x1fY\xd5\xa3\xedUH\ +5b\x04\xb4\x9c\x10\x097\xa9oVRP\x06\x86\x08\ +bp\x8b\x00@\xaa5+\xb0\x14\xa4x\x82kk\xd7\ +o\xd8n\xebx\xc030+\xb7\x94\x99_\xcd#\x19\ +J\xcc\xe0\xc2R\xae\x84!b\x1c\xc2\xb5\x9c\x8c\xf4\xbb\ +lEG\xd2\x9a\x8ce\x08\x18\xa2\xa0\x0c\x07\xaa\xc3\x9a\ +\xb7\xd6l\xd8\xb0a\xfd\xfa\xf5\x86\x86\x86\xba:\xbaz\ +&z\xb1\x88~e\x8d\xda=}\xa3\xf7\xa4\xf0\xa1\xae\ +Q\x8d\x82\x8a\x00\x15\x09\x11'\x17\xb1E\x88\xe5r*\ +U-w\xd8\xb1\x17\x18\xfa\xb7E\x0dR\x8f\x1e&\xc7\ +!\x15\x1d5=\x1d=#c\x13`\x077\x13\xacm\ +\xad\xacI\x8b\x0e\x17&\x89\xae\xb3\xb2\xc4\xc7!c#\ +\x8b\x14z~Z\x8e\x90\xca.\x02\x86\xf2\x8a\x89\x15\xbc\ +\xa4\xcc\x5c\xbfp\xd2/\x87\xcb\xd0\x8c\xa5 \x13\xed\xf1\ +\x82\xe8\x91^\xc4\x92\xc9\xe7\x1c\xff\xfc\xbd\x96\xd8\x1f\x92\ +\x1dh\xd3\x0c\xad[\xb7\xde\xc0\x80`\xc8X\x8f\x868\ +%.:u~\xe6\xb5~\xdbj\xfd\xcc\xca\x0f\x9bV\ +z\x98V\xee7\xe6\xc7\xd8\xac5\xdf\x8dav;\x98\ +\xeeJ;\xfc3\xfe\x12i\x1a\xea\x8caq;\xf9\xfb\ +\x83.G\xfa\x9c\x0bf\xa1\x1c\x89\x0c\x19\xe3Z\x0e\x8c\ +l\x1b0\xdb\x80!Pw\x84\xc7\x1dg\x08\xb8!U\ +\x9c\x9d\x95\xfdo\xcdVX\xd98\x1f:\x1a\x0c\x86\x1c\ +KX\x9dW\x02\x8e7\x9c!\xde\xaf\x0c}\xf1A\xfb\ +\xfe\x0b\xee\x8e\x0c\xc7uo\xaf\xdb\xb8Q^YY\xce\ +\xdc\xdcX_W\xdf\xd8\xca\xc8w,\x10\xc3v`\x98\ +\x0e\x86m\x03\xa8\xf8\xb9\xae\xde\xe1o\x98\x1enT\xe8\ +\xa8\xcf\xb47-tP=j\xb1\xc1\xc0\xae\x04\xb1m\ +\xd9\x91\x0a\x87\xb9&Y\xb5V\xc2\x0e\xbdX&\x1f1\ +B\xaf\xc28\xb4REE\xd5\xd8\xc4\x8cPn C\ +\x04C\xd6\xb3\x0c\x01I\xb8i\x07\xb3\xa2\xed6o\x1b\ +\xaf\xb2\xb6u9\xec\x15\x92\xcd+g\x09k\xf8%\x84\ +\x0cQ2y\xfe\xbfx\x19\x02\x86\x0e\x8e\x1du\xc8v\ +\x80\xe8\xc2e\xcb\x96\xbd\xf6\xdaR\xd0ukW\xafU\ +TS\xe4\xa14m\xcay\xd3\xbcIS\xde%c\xee\ +u\xe7z\x1e\x86\x19i\xb8\xecQM\xb2P\xa2\xefR\ +\xa09\xda\xd58/\xc1\x02l\xcb\x8f(\xa5\x1ew\xe8\ +D\xd6\x8d\xb3\xd66\x1f\xf17+m\xd1\xd6\xd4!\xac\ +m{[\x1b;\x1b\x98\x15\xcd\xf8\x14\xc0v \xf5\x9e\ +-\x90\x07%\x0b[\xb9\xfd\x9b\xbd}c\xc2\xe32`\ +\x1cb\x03C\xa5$C4\x9e\x7f\xc4/]\xcbM3\ +\x94\xe5\xf0*\xf6\xea\x1bo\xbc\x01$\xc9\xcb\xcb\xcb\xad\ +\x93S\xd2P\xa2\xff\x14e,\xfc\xab};\xb2i\xfa\ +\xd1\xae\x1d\xb9\x9eh\x5c\xf2\xca^\xadw}U\x93\xb7\ +\x13\x0c9Y\x979\xbf\x829\xbb\x8f\x85\x98\x8b\xf9N\ +\x0d'\xed+z\xec+\xfa\xcc\x19\x82\xcd\x90\xbaR\x1e\xa2\xae\ +w\xaaU\x0fn6c5m\xda\xdfm\x93\x0b\xbe\x9f\ +=\x0a\x96Gu\xe2M\xd5)\xd6\xba\x0c\x1b\xd7\xde\xbd\ +\xcb~{@\xceP\x1f\xc3\xd40l\xf3[\xaa[\xd7\ +\x9a\x1a`\x98\x1c\x0de\xc3|h\x93\xcaf\xf0)@\ +\xf4\x00\xe1\x8b\x83\x07\xeeY\x98\x03\xd2M\x07\x8e;\xb9\ +\xf5\xf2\xd6\x0e\xce\x87\xbdCs\xf2\xca9\xa2ZA\x19\ +\xc1\x10%37`\xae\x0c\x01+W\xbb\xbar\xe8\xd4\ +\x08NWl\xdd\x18\x9d\xe0\xe9\xf9\xba\xf2\x05\xbd\x8bd\ +\x08l\xce)Y\xd8\x9c\xe3\x9f\xdfk\x0d\xfb\xafXg\ +\x86\xf3o\xb0\xdf\xbc\xb1\xec\x8d\x95\xebW\xcao\xc4e\ +HQU\xb1\x04\x15\xa89\xedu`\x1c\x16\xa0d\xad\ +\xfd\x1e\x07\x8e\x05\xe7\xa0X\xea\xdf\x13E(?\xfe\xc3\ +\xd85\xaa\x1e\x9b\xb7\x1f\xc40\xcb\xf0\x01\xc7\xe3_\x1a\ +\xb4}f\xd4\xfc\xa1a\xd3\x07\x06]\xbf3\x8c\xa9\x01\ +'j\xe5\xe6\x19k\x9b4\x0d`\x04\x22|\x0a0\x1a\ +\x91\xae9\xdc\xe5\x03*\x0e\x1e\xe0<]\xbfA\xdef\ +\x87\xcb\x11\x9f\xb0\x9c\xbc2NAm\xfe4C4^\ +@D\x86\xc4\x96\x03\x87\xca\x9d;5\xf7\xee\xd5\xd6\xd6\ +&[\xa8;\x04~\x14\xe2\xfe~\xc0\x8d\xd1G\xb9S\ +_\x10\x01Olvbt\xac\xf0\xdb\xafOMN\x96\ +^\xbcT\xbch\xbf\xdc\xf8\xe7w[b\xbeK\xb2\xa7\ +\xda\x83\x96[\xbe|\xf9\xebK\xa7e\x08\x18\x02\x8b\x99\ +\x87G\xbe1\x85\x88\x0bL`\x18LTw\xbc\xbd\xc9\ +\xb6\x18\x09B\xae\x04a\xd8a\x0cs\x04\x0b\x22\xb0g\ +g\xfdm\xc3\x8ak\xc6$jo\x1b%v\x99\xbc\xb2\ +|\x87\xb2\xfc&}}\x03\x98\x0f\x91\xd23\xcd\x10\xd8\ +\x0b3\xae9|b\x84\xdbrx\x8d\x91\xe9\xf6T\xba\ + \x9d!\xca\xe2\x96p\x0b\xea\xf2\xcb\x88\x88\xc6\xe4\xac\ +\xbc\xc0Hj\xfb\x8c\xb5}\xff~]U\x15=\x22\x22\ +\xe4\xce\xd5F\x1d\x8a\x01hR\x9f;A\xe3\xa7\xc1'\ +\x0f+\x08O\xec\xb8'\xde\xf0\x1c\xab\x0f\x0b.\x13L\ +]\xbb]=@\x0b\xb6wP\xbdu\x1bV\x22\x16t\ +\xc6?\xf1\xc3Hn\x18\xff\xfd\x83\x0e\xb3\x0a'G\xc6\ +N\xd2R\x00-GZ\x0a[\x94\xb7\x00C0'\x05\ +\xb0\x10C\x8c\xd8\x85(\x17f?\x02\xc4>z*L\ +7\xd0=\xa5\x0a\x1c\xa7\x05\x18\xe6\xe7\xd7n\xdbx\xcf\ +\xa8\xfa\x96\x09\x89\x86{\xc6I]F\x18\xe6\xac\xe3\xa0\ +\xaa\xac\xa8<\xeb9%d\x88t\x9e\xe2\xf6\x1b1i\ +\xc5mn+k;[\xfbu\xeb7X\xd99\x1d\xf6\ +\x0af\xf0+\xb8\x85u\xc2r\x92!\x1a/02C\ +\xc2\x108L\x89\xa5\x97k'O\xf2\xd7b\x1b\xc11\ +\xe5\xfb^\xf0\xc5\x01\x18\x93\x16\xcf\xd0\xe5\xaa*\xcac\ +\x16\x00\x9fr\xe5\x0d\x16\x03\xe1N\x1e/\x8cX\xcb\xb8\ +)\x13-\x07\x0cY\x1e\xdb\xed\xcc\xd9\xb5n\xc5:|\ +\x04\x92\x933666\x80\xf0<#=\x1e\xe2\x01=\ +L\xc4\xf09\x1b\xa5\xbe7\xd8\x9e\xb1\xdf\xb3/L\x80\ +\xb8&\x91\x9e@@\xb6\xc2\x125\xdf0'\x91k\xdc\ +\xd4\xbe\x82s*\xdc\xb3\x1a\xb4\x93:y\x83\x1a\xc2A\ +\xd5\x88:\xbd&T\xb5Iu\xaeo\x9b\x9c\xae\x12n\ +\x05r\x01\x02\x97!\x00\x08\xd9z\xb9\x8d\xd6\xf60\x0e\ +\x85<\xc4Pj6?0*\x93\x88S\x90\xccX\x81\ +\x8c\xc9\x9a\xb2dy7\xb05y C2bh\x82\ +\xb0>\x16\xbf\xda\x06\x1f\xef\x0a\x87\x13B4\x85\xaf\x17\ +\xc8D\x86\x80\xa1]l\xa79>\x85\xad\x06[\xf9(\ +\x0f\xe2{\xf3\x11-\xe2F\xc0\x9e\x22oug\x17\xb3\ +h\x08\xfaeq\x11S\x80\x984\xc4\xdc\x91\x17\xac\xe4\ +\x08sU\x18\x8d\xcc7`\x0eb\xf3\xd5\x18\xb6\x13\xfb\ +\xcd\x9e\xb7\x14\x8f`\xaf\xee6p\xd2\xd6\xd6 \xadm\ +B\xcb\x91\x0b\x10\xe0V \xa7\xab0\x0c\xcdxQA\ +\x8e4\xb5\xf5\x82\x22)1)90\x0e\xe5\x8a\xebE\ +\x15Dd}*h\xb9\xb9\x0c\x81\xd2\xb8t\xfe\x8c\xf8\ +M\xed\x15\xb2eH\x16\xbdI\xaa\xa6\x89\x19\x86d\xe3\ +S\x00\x19\xda^\xe72\x9f!\xf0\xfad\xa1\xac\xc3-\ +{\x14}O\xe8\xa6\x0e\x19d]\xd0\xcd\x18\xb7`\xd2\ +ae(\xf2rd\xd4d\x14D\xff\xc6Lx[\x84\ +\xed~m\xad\xf7R%g=S7q\xb8\xf6j\x8d\ +\x83\xabu\xde\x95\xdfu\xf4\xb5\x15\x8e*\xaa[\xc0\xd4\ +61\x9d\xf6m\xcfqo\xe3\xab\x0f\x84\xff\x94\xd4u\ +J\xaa\x1a\x87\xbc\x82C\xa3S\x18\xfc\xf2Y\x86R\xb2\ +\xf9AQ\x99==\xb9\x10\xf9\xc0`\x04\xcex}.\ +\xf7u\xe5\xeeHu\x06-,C\x19zi\x19\xfa\xf2\ +\xc3\xf6\xdd\x03\x87\x9d\x98N\xa0\xe5\xc0\xa7\xb0~\xfd\x06\ +##\x5c\xcb\x19[\x19z_\x88\x5c\x829\xda4}\ +o\xd7\x86O\x89\x1cz\x90n4\xf7`\x98\x9a\xeaZ\ +\x0d\xc5U\xca\xb6\xdez\x19\x0a+\x1a\xb8\x0e\xa1M\x0e\ +\xc9a\xf2\xf1Q\x0aa\xa1\xca\xc9!\x1b<\x8e\xef\x17\ +\xc5\xaaeLznT\xc5\xadm\xd2\xb7\x8d;O%\ +\xeemb\x04\x02\x01\x92\xac>@Yn\xddf{\xbb\ +\xbd\x9e>\xe1\xac\xfcJ\x9e\xb8\xbe\xa0\x92\x90\xa1\x14\xba\ + \x22>;)\xc9\x1b\xc2\xaczz\x98W\xae\x90\x8b\ +\xcaWj*)k\xb0\x0d!7B\xfc?\x08\x95\x95\ +\x96{i\x19\x02\xcfi*\xca\xb2\xc5\x97\x0f\x96\xac\x5c\ +\xb9l\xf5\xea\xd7\xd4\xd4\x14\xd7\xbc\xb3FQM\x81\x01\ +^Q\xd1\x1e%\xef\xa2\xad\x89M\xc6\xf4\x1e\xb5\xb0z\ +\xb5#\xde\x1e\xc9z\xa6F\xdb\xcd\x8c\xcd\x1d#\x8c\xbc\ +\x15V\xa4\xa5\xd9\x84\xc7i\x15\x1ba\x05\xe68*\x8c\ +\xb0\x1d4\x0b\x0c\x0b\xb7\xe5\x04\xa8\x9b)\xab(\xe1\xab\ +\x0f8=\xb8\xcb\xe7!\xf76\xb9|G\xca\x90\xb5\x85\ +\xcd\xdbf\xab\xb4\xe2\x0c\x0e\xc4\x06\xb0\x05\xd5\xbc\x22`\ +\xa8\x9d\xd8\xfb@\x17\x84DQ\xfb\xfaa\xbf\xc3=\x18\ +' \xa0\x87`\xe8\xd2\xa9\x89\xfc\xf8o\x933\x7f\xc8\ +\xc4e\xe8\x8cLl9\x99h\xa4\x17\xa2\xe5\xc8\xd5\x07\ +\x9b4\xdb\xb7\x96\xbe\xfa\xd6[o.]\xba\x0c$\x89\ +\x9c\x0f\x09Q>\x0b\x8fP\xd8\xa6dc-BI\x18\ +\xe6d\x1e\xbf\xc7!\xcd\xc1T\xd7t\x9b\xc16\xe3\x18\ +\xbb\xe8w\x96\xe5\xa5\xdb\x86&\xea\x14\x9aa\xf9\xd68\ +J\xcc0\xc7\x1c+\x0c\x8bq*\x08\xd6\x82e95\ +M\xf0\x9c\x82o\x9b0\x0d\xa6\x07!2<\x01\x07\xb8\ +{\x08a\x02\x96\xb4T\xf5\x82|)I)\x1c&\xbf\ +<\xaf\xa8\xbe\xb0\x0a\xa2\x8b\x81\xa1lAx|6\x83\ +\x196J\x04\xcd\xcc\xfc\xcc/\x9d\x1c\xe5C\xa8\x0a\x1b\ +\xb1C\xbf\x8a\xbet\x16V\xf3\x16o\xcb\xbd\xec\x0c\x81\ +\x0c\xbd\x0a3\xd67\xde\x94x}\x80!\xf0\x0b\xd0\xfe\ +I\xc107\xb5\xdd\xfb\xf9\x88#B\xdc\xd4\xbf&\xef\ +L\xda\x09\xe68<\x9c(N!\x9f\xc5e!QX\ +\x90\x8a4C\x0e\xd4\xed\x18\x16\xab\xe9\xb6[Y]A\ +]M\x03\x18\x02\xe1\xb1\xb6\x82u\x87\x19\xf7\xf6\x8c\xd9\ +M2\x84\xd7[\xd8\xae\xdd.g\x9e\xeep$>\x98\ +\x83/=\x00C\x84\x0c\xa5\xd3\x05\xc1\xd14b\xff\x10\ +,\xfbKL\xa3K\xfd\x03y;\xd9.\xa1e\xa1\xe1\ +\x9f\xc5^\x9d\x00\xd5\xf7\xf3g\xc8)\xcb\x096`\xbf\ +\xf1\xfa\x1b\xaf\xbe\xf2*\xbeJ\xb4z\xbd\x82\x92\x02\x8c\ +\xc4`j\x8bQ.X\xd8\xb0\x9c\x0a\x80\x19\x08\x17q\ +\xa1^\x84\x84%\x88\xcfE\x1c\x06\xe2\x87\x1e\x96/Q\ +\xc7\xc4\xbaX\xb1\x19V\xa5\x8d\xf9\x1e?\x14r=,\ +\xfewq\xeb\xd6\xae\x87q\x88\xf0m\xe3\x02\x04\xb2B\ +.\x11\x91\x03\x12<\x80\x1bR\x86l,\xed\x96\xeb\xbe\ +\xa5\xea\xa7\xed\x1a\xe6\xcd\xcd\xaf\xe1\x177\x88\xab\x88}\ +\xac\xe99\xfc\x90\x18\xd8\xfb@F\xd6K~\xe6\x97\xbb\ +\xbbXF\xea\xdb\x9c\xc3\x9cC?\x89\xbe:\x01\xf14\ +?s\x86\x12Q\xba\x8b\xc0e\xd9k\xcb\xde~\xebm\ +3\x0b35\x15\xb5\xd5kWoR\xdd\x04s\xf6\x94\ +\xff\x9f\xe2\xde\xe3\x1f\xf3a\x8c\xf7\xa0\x8f\xcf9_\xcf\ +S^Y?f\x81\x09\xee;\xe2\x8da\xbb=\xcf\x07\ +\xf0\x90(\xea+\x8a\xff\xdd(\xff\xf7\xa3\xadS\xadl\ +2l\x5c\x8f\x1d\xa1\xfe=\xbd\x00\x89\x14\xb5\x945\xd4\ +\xb4\x8c\xa6W\x1fp\x01\x22=\x0b\x12\x86\xa6W\x89@\ +\x8a,m\x14\x8cU])>\x91\x99Tv~%0\ +TTM\xc8P\x06]\x00;cgv\xa7H\x18\xba\ +\x043V.C`\xe1k\x11\xfa\xe5/\x82\xa1\xe8o\ +\x12A2DH\x94\xfe\xaf\xec\xc8\x98\xf8\xa3\x05\x81\x05\ +H\x0c\x82\xc2F\xcc\xa3}\xc0D\x94\x9c\x81\xf1\xa6\xec\ +\x1d\xf2\xa9\x0ek\xe2l\x03\xc7\xfdA\xaa\xa2+\xe9Q\ +u\xd4\xa4r\xc7(o\xbd\xb0`\xa3\x8cx\xf3\xb00\ +\x93j\x83\xd5\x19\xca\x10S\x17s\xa0\xd9\xaf\x10\x89\x94\ +\xb4 \xd6G\xcb\xc4\xc4\x04\x8fS\xc0\xed\x04\x22N\x81\ +`\x88\x18\x93p\xdb\x81\x98\xb4B\xc9VEO\xc3=\ +6$,)\x8d\x93_%(i,\xaa&e\x88\x91\ +\x1f\x1a\x93\xf50C\xf8\x94\xb0\xbf?/'\x8b\xb3\xd5\ +f\xeb\xa1\xf3G\xaf_\x01\xbf\xdc\xcb)C2Y\xad\ +\x1f\x07K\x01\x18\xcaA90\x03\x0d+\xdf\x9aN\xb3\ +H+\xdeB\xfdg:\x1d\xe5H\x18\x9273S\xe1\ +8\xa9d;)1\x1c\xf5\xbc\x1dV\xeb\xf9\x85\xa7f\ +E\x0b\x8a84\xf3\x5c3y\x9a\xf9\xa6jg\xd5|\ +C\xb9}\x13\x81\x81\x17\x03}\xce\xfb\xa6}\x9d\x9a\x8d\ +\xb2\xd6\xac\x5c\xab\xac\xa4bJh9r\xff\x129%\ +\x22\x17\xf1\x80$R\xf5\x81\xaes\xb0v\x00-\xa7\x16\ +\xa0\xe3\x12p8\xaf\xa0NP\xdaX\x5c3\xcd\x90 \ +L\x8a!\x22\xcai\xfc\xbb\xefN\x9f>-\x00\x86t\ +\xedu\x0f\x8fx\xbd\x84\x0cq\xb9\xe0S\xb8\xf1\xfb/\ +\xba!\x86{\xf1>\x05\x92!\x06\xca\x0d\xad\xd2\x1a\xed\ +\x1fJI\xce:s|,!G)\x07\xf1\x80\xb6\x8c\ +\xef2\x02/\x86\xb96\xb8\xadK\xb2\x97Oq\x90\xa7\ +\xed\xdch\xa6\x07\x1e\x84,Da!nD\x88q\xa0\ +\xc6\xea\xa3:k\x13\xcc\xe4\x03u\xd6\x86\x1bo\xe0 \ +!\x0b1\x99\x88I\xf9O\xca\x9a\xe5k\xd5\xd44\x88\ +\xf9\x10\xb0Bxz\xc8Y\x11\xe9\xe4\x9e\xf1\x00\xe1c\ +\x92\xb5\xfd;fkM(V\x07\xa3\xfdx\xa2\xda|\ +\x09C\x19\x8c\xfc\xb0\xd8Y\x19\xbaz\xb5\x8c\xc9\x8c\x0d\ +\x09\xf1\x1f\x1b+\x9efh\xe8edHX\x14{\x81\ +\x19\xee\xea\xac}\xf3\x96\x0c<\xa7$C\x10\xbf\x18\x96\ +\xa1\xce\xe7\x14\x09\x85\xc2\xa0\xa0\x88\xbc4\xaf\xa4\xef\xd3\ +\x98\x88\x15~+4;\x0eim\xd7:0\xe0\xf1\x12j\xb9\ +\x19\xbf\x9c\xec\xc7\xa1\xc8F\xfd\x8c,\x8b\xb4\x8a-\x99\ +?e\xc08\x94\x03\x16A\xa3y\xc3{\x86\x94F\xfd\ +\xd8n\x9b\xc6\xdb\xba\xb5\xd7\xf5I4\xdd\xd0\x0e\x18\xf6\ +M\xfc\x82\xe25\x18\xe8\x96{\xc8\x9d\xeb}\x84\xebE\ +\xc0\xdb5\xe7\x10\x18{`z\xac[\x8f[\xdb\x10s\ +JX\x0a G\xd3\xebx\xb3\x8an:&\xcb\x0a\x18\ +Z\xae\xf7\x96j\x80\xf6\x81\x08_\x18\x87\x80\xa1\xd2:\ +B\x862\x19\xc2\xf0\xb89\x0c\xe1>\x05\xb0\xe5X4\ +\xde\x91\xd2#\x10H69Z\xf2\xb2Z\x0a2\x99\x05\ +O[\x0a\xd0\xa1\x85\xa80 '4:=\xf1\x88\xbb\ +/\x0bq@\x08\xa4\x19\x8a9\xeePssv\x99\xae\ +\xee\x9an\xc8d\xe0\xbb\xd5A\xcb\xb6\xf8Xa\xbb\x8e\ +.\xa5\xb8/\x8d\x07x\xbe\x96d\x83\x1d\x80C/\xa2\ +\xde\x8f\xda\xb0r\xa3\xa6\x866am\xcf\xcc\x87H[\ +\x8e\xb0\x14\xc8\xf9\x10\xe9\xa0\xb3\xb6\xb4V\xd1\xd7\xf4\x8c\ +\x0f\x0d\xa7\xa4\xe5\x8ajD8C]8C4\x86(\ +\x22.\xfba\x19\x02\x86\xa6\xe7C\x8e\x81\x8e!\x9fD\ +]\x19\xfb\xf93D\xce\x87^\x7f\xedu\x85\x0d\x0a\xc6\ +\xdb\x8d-\xb7Y\xce\xcc\x87\xc4\xb1\xcd\xe6\xcd\x1f\x18\xa5\ +\xb6\xe8\xc7\x9d\xb0o\xbck\x08\xeb\xa7$\x9a\xee\xe8\xfa\ +_\xf0\xcdE\x5c\xb0\xbcw\xae?\xec\xf9N\x82\xc7\xda\ +8\x80\xe7\xea\x04\xbb\xd7\x0ep\xf05\x8b|%me\ +M\xdc\xda\xc6-\x05\xd2\xbc\xc6\x97\x1e\x88\xd5\x07r\xc6\ +\x0a\xcf3>\x05\x1b%\x13\xd5\x83)\xbe1Y4\xb0\ +\x14p\x86j\xbb\x09\x86X\xa2\x88\x84\xecn\xdc\xb7\xfd\ +\x90O\xa1\xefl\x9e\xb5`\x97\x7f}\xc8\xbbc\x9e_\ +~\x02f\xdf\xfc=CO\xbf\x889\xedL{\x99=\ +\xa7\xe0\x97#}\x0a\xb0\xc0\x0a>\x05X\xc4#}\x0a\ +BT\xe4%0\xa2\xd6\xab\xf9\xb0\xd4\xbdZ\xf6\x04\x96\ +\x18\x07\x94\x9aN\xa3P?\xf4Z(\x031\x81\x0c\x87\ +5\x07\xe73\x04\x22\xb8Qi\xa3\xc2&EC#\xe3\ +\xed\xb0\xca\xb0\x9dXe\xb0 #\xb6g\x0a\x96V\xdb\ +\xcca\xf7\xbf\x85\xc56K\xdc\xda\xf6\xd7v\x8b\xf0\x11\ +\x88\xebD\xe5\x12\x19b\x0ac(L&3|d\x04\ +F \x89_\xee\xe2\xd9A\xfe\xd0u\xf1\xf9\xa9\x82\x0b\ +\x13d\xcc\xc6\xb3\xf21\xff~\x99h\xa4\x17\xe99M\ +\xb5Y\xfe\xdb\xe5\x10I\x22\xed\x97\x039\x88z\x90\xe8\ +7\x15\x15\xf6 %\xa4\xda\x8c\xd7\xa7\xc9\xee\xd5&\xc1\ +\xebQ\xf5;\xef\x0b\xc6\x1e\x17\xb1w\xact\xf7z#\ +\xd9\xfd\xf5x\x80\xe7R\x5c\xcb\x01m\xc0\xd0\xea\x0d\xab\ +W\xaf\x5c\xad\xa0\xa0\xa8\xa6\x0a\xe7\x83\xa8\xe2\xff\xe6=\ +\xe0\x02<\xd4\x95\xd5\xc1\xda\xb6\xa4\xee8\x9a\x14\xca/\ +\xac+(o.\xab#d(\x93-\x8c\x88\xa7\xf7\xf5\ +\x0b\x1e\xf6m\x93F\x1d,\x87\x83\xd5\xb0\xf8\xb9\xea\xff\ +\x0d\x19\xb2M\xb7%\xa3\xb1\x1e\xf6\x9c\x16\x81-\xd7v\ +W'\xa5N3\xf6\x84C\xfd\x1d\xa3\xaa\x9b\xc6$\x1a\ +n\xe9\xf9\x0f\xf91\x11\x9b\x86h\xfa\xdb\x0cwz\xec\ +9L\xf3>\x94~\xf4P\x9a\xd7\xdeD7\xb0\x14\xc0\ +\xdaV\xd1Q\x86\xdd)\x10\x8d\x05\x9b !\x9a\xc7\x96\ +\xd8\x0d\x09!\x09\x0f\xed\x95\x9c\xd9%\xa9\xa5\xa1\x17\x12\ +\x92\x94J\xe5\xe5\x16T\x17T4\x97\xd5\xf7\xe0\x0ce\ +\xb1\x85q\xc9\xac$\xca\x9c\xf5!\x19\xfe\xde\xe7\x87\xc3\ +\xcb@\x1ce\xbb\xc6J\xae>\x80o{&\xe6\xf45\ +8\x14\x06\xd6\x87 \x92\x04\xc2\xe7gm\xb9^\x87\xda\ +[\x86\x15\xd7\x8dI\xd4\xdd\xd0\x05\x86\xd8\x88\x1b|%\ +\xf8\x98\x97N\x5c\x87\x1b\x07\xf1\x08S\x9b\x09\xf4\xc0T\ +7\xe5O)k\x96\xafQS\x01k{v\x15\x9c\x18\ +\x87$\xb1>x<\x09\xe9S\x801i\xf3\x16\xc5\xbd\ +\xfb\x8f\x04\x86\xc7\xf1\xc5\xb5\x85\x15\xcd\xe5\xf5\xe48\xc4\ +.\x88L\xa0\x1f\xef\xe5=\xbc\xc6\xfaKd\xc8!\xd3\ +\x81\x8c$\x01\xc7\xb6$\x92$\x0f\x15N3\xd4\xa4\x1f\ +\xdehQ1\xa2^|A\xb3lR\xb7dJ\xafj\ +J\xd3w\x22\x00\xe6\xb9L\x94\x9b\x85\x84\xc4D\x95\x0d\ +\xc8\xc1\x9f\xe9\xb8\x0f\xe9G\xda\x86\x8d\x1bU\xc0\xeb#\ +\xd9%9\x13\xb1=\xbb\x95\x95X\xff\x06\x8a@\xaa\xe4\ +6nrp\xda\xeb\x13\x18\xc9\x87\xc5\xa1\x8a\x96\xf2\x06\ +\x82\xa1lNAT\x02\xbd\xbdsz\xff\xd0\x8b\xdc\xfb\ + C\xd6e\x1c\xa7@\xca\x90dw\x8ad\xef\x03D\ +\x92\x00C\xb1-\x84-W\xaf\x15\xff\x97\xec\xe0{\x09\ +a\x9f\xa7\xee\x8e\xb5?\x14\xbf\xc3-\xc6>\xa2\xc85\ +\xb6\xea@L\x85\x9b\x04\xb1\x15n\x91\xf9{\xd3\xfe\x91\ +\x09$\x09\x10_Q\x83\xf0)H\xefc\x9d\xf1\xf4\x90\ +\xdbW\xc9X\x1f \x09dKE]\xd3\xcb?<:\ +1\x03dH\x5c\xd9R1\xcbP\xe2\x1c\x86\xf0\xb1G\ +vv\xd7\xac\x96{ic}\xa4\x19\x92\x93\xdb\xa0\xa8\ +\xb8\xde\xd4\x14\xdf\x9d\x02\x0c\x09P\xa1\x07K7\xa3b\ +\xcb\x91896\x12\x10[\xc3\x05\x0d[T\xfeC\xcb\ +\xf0\x03m\xc3\xf75\xf4\xef\xab\xebI\xe3\x03u\xfd\x9b\ +\xcb\x95\x03\xfe\x94\x04w\x82\xa5\x00\xbb$\x17\x88\xf5\xc1\ +-o\x9c\x1bx\x80C\x81\xdcE\x04R\xa5\xa3k\x10\ +\x19\x9f\x9eLe\xe7\x15V\x03C\x95\xc7\x88q\x88\xce\ +.\x8cJ\xca\x91\x92!\x88\x97\x83p\xed\xdb/\x80\xa1\ +\x17\x12/\xf7\x8c\xac\xc3\x81H\xf3GA|\xc6\x8a\xcb\ +\xd0\x8c\x96\x9b\x13/\xc7Ay\x0c\xc4c\xe3^T8\ +C!+\x1b\xf1+\xd4\xd5`+\xab\xf4\xceVI\xf9\ +\xba\xb1\xf1%9\xf5\xa0\xbfP\xc0s\x0ab\xb4\xf6\x9d\ +u\xca\xca\xb8\x96\x83-\x0f\xa4\xcftz+\xab\x141\ +\xb8\xf1M,\xb3\xcam\x94\xdfAh9aI}\x11\ +0\xd4x|\x96\xa1\x8e\x19-w\xe7N\xd3\xc5\x8b\x07\ +N\x9dZv\xe9R\xfd\xa2}\xc6\xf3\xfbBf1\xa7\ +0q\x81\x98\xd3\x1d\x8e\xeag\xce\xf0\x9f2J\xf2\xdc\ +\xb9\xfc?\xfc\x01~\x95\xf3I\x9afHb)H\xc7\ +\x9c\xc2*\xdc\x9e87[\xec\x88=\x01(8\xe7{\ +\xd5\x9aj?\x91!p\xcd%}\x95\xb4n\xd5:%\ +%\x15\xd0r\xc0\xd0\xb4\xcf\x94\xdc}G\x84\xc9I\xc2\ +H\xc8\xb2\xdc\x06y\xfb\x9d.\xde\x01\x11\xf9\x04CU\ +\xa4\x0ces\x0b\xa3\x93r:g\x18\xbay\xb3\xe6\xcb\ +/\x8f}\xfe\xf9\xb1\xf1q8:a\x91\xd1\xb6\x8b\xb7\ +\xd9\x1e\xd5\xc2l\xdc6\x11\x9c\xf4\x94Q\x92\x93\xe7\xce\ +\xc1\xa4b\xfe\x97\x9af\xc8.\xddn~\xdc6,u\ +\x1f\xa1{{\xbe\x9e\xe4\xb96\x01\xc7\xebI\x07jB\ +kM\xb5\x9e\xc8\x10h9\xb0\xb6Uu\xd5tu\xf4\ +\x8d\x8d\xf1\x15<\xdc\xb1-\x09O \xd4\x1a\xa9\xdf\xc8\ +X\x1f\x98\xb4\x9a\x99[2x\xc5lA\x19_\x5c]\ +\x5c\xd5R\xd5D\xca\x10G\x1c\x9d\xc8\x90\xc8\x10a)\ +\xe0g\xd0\xbe\x00-'C\xc2\x9eo\xef\xc3\xa3L\x95\ +i\x86\x9c\xe8N\xf3\xf7>\x00C\x87\xe9^0\x0f%\ +=:\xe0v;P\x13\xf2\x94\x0c\xc18\xb4Ie\x93\ +\xb2\x02\x1e/G\xee4\x9eeH\x12\xebc\x8d{}\ +H\xaa6\xcaovt\xde\xe7\x1f\x1c-,i(\xae\ +j\xadj\xec%\x18\xe2\x8ac\x92\xe60\x84\x07\xb3\xff\ +_`\xe8Y?\xe7\x93\x19\x9a\xb3\x7f\x08b}\x16\xc3\ +\x10(\xba\x8d\x0a\xf2D$\x09Dc\xe1\x9bR\x88\x15\ +\x87\xe9\xa5U2\xc4^\x12\xeb\x03\x22\xb5a\xe3\xa6\x9d\ +\xbb\xf6\xfa\x05G\x09\xcb\x1a\x8a\xab[\xa7e(\x87+\ +\x8e\xa50\x1f\x96\xa1g\xfd\xe62\x14\x8e\xa7l\xea\xf9\ +vx=\x81!\x22\x1a\xeb\xa1=x\x0a\xaa\x0a8C\ +4/\x8f%I\x9e+\x12\x00Pp\xab\x08n\xdc\xaa\ +\xfe\x91\xa6\xc1]\xad\x05p_\xdb\xe0\xc6\x0a\x95\xc0?\ +\xc3\xf2++\xee\xd3\xb8\xb5o\xac\xd5\xd4\xd4\x22w\x1a\ +K\x16\xbcg\xe3\x14\x08\x92@\xcb\xe1\x1a\xcf\xcaZS\ +['8\x22!1\x8d\x91_R\x07\x0cU7\x132\ +\x94\x93[D0\x04g\x05\xff\xec\xf7\x82?\x99!\xd2\ +\xa7\xb0t\xe9\xf4>V\xf0)\xe0\x0c\x09=\x1c\x95\x0f\ +\xed\xd2=\x0c\xd8\xa9x\xc8\xaf/<\x8e\xe7Bc\xee\ +\xa6\xb2\x16F*e\x07\xe5\x07*\xccX\xf3\x91@Q\ +[\x05|\xdb\xd3\xb1> =D0\x89\x95\x15\xb1\x1d\ +|&\x1a\x8b4\x13\xe0?-\x1d\xdd\xd0\xe8\xa4\xe4\x0c\ +\x16\xd8r%\xd5m\xd5M'p\x86\x18\xbc\xa2\xd8\xe4\ +_\x19\x9a\xb1\xb6\xdf\x9e\xdd\x9d\x02{\xc1\xc9\xdd)\xb0\ +\xbe\xc0G\xb9\x12\xe4\x22A\x14\xcd\x91\xc6p\xa1\x02I\ +\xf3\x90\xc9\xdc\x9d\x9a\xe4@2D\x8eCJ\xc484\ +\x1d\xebC\xac;H\xc9\x10\x1e\xb6@\x86\xd5\x03a\xf8\ +8\xe4\xb2/ 4\xba\xb0\xbc\xb1\xa4\xa6\xad\xa6\x89\x90\ +!\xe6\xaf\x0c\xa1\x99\xf9\xd0\xbc\x13/\x88\x19\xab\xc0\xaf\ +'\xc0\xd5\xdf\xc3-\xc2\x13\xb0\xcf\xcf#\xf8CJ\x83\ +\x9a*\xae\xe5\xb4\x17\x80D\xcb\x81-\x07\xe7)\xc0.\ +I\xb0\x14\x88X\x1fb\xb7\xfe\xcc\x94h\xdad V\ +\xc1\xf1(G|\x87\x97\x1d1\x0e\xbd\xeb\x1f2\xc3P\ +3!C\xcc\xbc\xa2\xb8\x9492\xf4s=\x93\xe4\x09\ +Z\x8e\xf4\xfa\x80Oa\xed\xda\xe9\x13/\x80!\x88\xdb\ +\x06w\xb5;\x96\xe8\xf1F<\x00\x0a\xfbK\x82\x9e\xc6\ +\x96\x83\x80\xea\x90\xa9\x90\xf5K\xe5`\x97$am\xe3\ +\x96\x82$\x92\x04\xf7\xc3\x11\xd1X\xe4n/\xf2\xd9\xdc\ +\xd2&\xaf\xa0\x8a/\xae\x11\x95\xd4\x97\xd5v\xd4\xb5\xc2\ +\xb9\xdd\x08c\xe5\x89\xa5\x19\xfaY\x9f\xeb\xf3\x04\x86\xe0\ +\x5c\x9f7\xb1\xe5\x1b\xd7\xac\x92\x93{SOG[]\ +^]CE\x03\x18znk\x1b?\x93D\x0d\xb4\x1c\ +~\xae\xcf\xf4\x06c\x08\xdd~T4\x96\xad\xdd\xc6\xf5\ +\x9b\x9dv\xba\x06\x06\xc5\x88\xcb\x9b\xca\xeb:\xeaZ\xfa\ +H-W\x9c\x90\xc2\x92X\x0a?\xeb\xb3\xb1\x1e\xc9\x90\ +\xe4l\xac\xe8\xc1h\x8f|\xcf\xb2\xfc\xea\xa0\xb4\xb0\xf0\ +\xb3\xe1\xfe\xdd\xfe0\x08=7C\xf88\xa4L\x8eC\ +\x0fi9\xa9x9\x5c\xc5\xe1\xfe9+\x1b{k\x87\ +\xdf\x1a\xbe\xad\x11\xba\xd5=>\xb0\xa4\xa2\xb5\xbc\xae\xb3\ +\xa1\xed$!C\xfc\xe2x)\x86$'/\xfd\x1c\xcf\ +\x97{\x14C\xb3\xe7\xcby\xbd\x1ftp\xd2GU\x05\ +\xdb\x9fo\x92\x8b\x0a\xc1\xb7\x06\x8b=\xcf\xcd\x10\x1e\xa7\ +0\x1b/GD\x05\xcf\xb5\x14\xa6]\xa8\xb8o\xdb\xd2\ +v\x8b\x95\xb2+\xcb#\x8eM\x13\x97\x112\xd4J\xc8\ +\x10\x87_\x022\xd49\xd7\xda\x96\xfd\x19\x8dp\xd4\xe2\ +\xff\xf6\x19\x8d\x8f\x99\x86\xcf\x9e\xd1x\x12\xdf\xd2;\xf5\ +\xfe$?\xa4\xce0\x07\xdf\xef\xc0<\x98\x8a\x8fC\xee\ +\xaf\xc5\xe3\xc0\x12]\x8b\x9ev\x1c\x8a\xb8\x1d!\xf7\xf6\ +FMM2\xd6\x87\x08\x93#C\xe6\x08k[\x12I\ +2mm[Zi\xeb\xe8G\xc6\xa6\xa6Q\xd9\xe2\xf2\ +\xc6\x8a\xba\x8e\x06r\x1c\xe2\x08J\x12R\xd9\x9dx\xee\ +\x14\xe9\xf9\x10\xbeWt\x81sNo\x82\x13\xec9\xcf\ +9}\xf0\x95\xcc\xcf9\x15<\xe39\xa7Ot\x94\xcc\ +=\xe74\xf9\xc7,\x10\xa3\xb0\xcb\xe1\xee\x05^\x9e\xa5\ +\xde\x80#\x22\xaf\xe8\xbfR\x1b\xb6(?P\x9d\xbb\xee\ +@\xaeAH\xaf>@`\xfe\xfa\x0d\xe4\xee\x94\x05f\ +\xac\xb3\xb1>\xc4\x8c\xd5\xd6\xc2\xee-\x83\x15\x9a\xa1\xba\ +\x1eq\x81%\x95\xa0\xe5:\xea\xdb\x08\x19b\x0b\x8a\x93\ +\xd2\x16dh\xce\xf4~\xfc\xeb\x0f\xab\xb1\xbek\x9f\xbe\ +\x07\x07:?\xf3Y\xc1\xed\x99\x81\xc9K\xde\x84E\x8d\ +g\x8fH\x91\xe1Y\xc1Odh\xeeY\xc1q\xdfS\ +a\xdd\x81\x8b\x04\xb02\x94\x8b\xf2\x01\x5c\xfch\xcd\xc2\ +\xe0rWX\xa9\x8b\xa9<\xb0 \x22E\xd3+x0\ +\x0e\xad\x97\x93\xdb\xb2Z\xc1@\xc3p\xbb\x91\xd5vC\ +KK#+KC(\xe0\xb0\xb5\x9e>\x9b\x16\x1c\xa7\ +\xf8\x86}s\xab\xdf\x1a\xbc\xad\x17m\xec\x9d\x14ZR\ +\xde\x0c2TO\xca\x10WP\x0a\xbb!:\xbb\x9e\xe6\ +\xbc\xed\xab_\xde\x80\xc092i\xc7|<\xe1\xbc\xed\ +O\xff\x0b<\xb5pp\xea\xb3\x1e\x8c-\xc3\xf3\xb6'\ +\x9ft87y\xc3\xf4y\xdbmu.\x07z\x0fR\ +B\xf5\x9cL\xd6\xa5\x84\x1b\xec\xb6\x90\xdbc\xb51\xc0\ +E1H\xfe\x0dX\xf3\xa6\x22\xd6\xa3@Cl*\xca\ +\x86#\xbaY\x88w\xa0\xd9\xc3\xad\xc1\xe3`\xd3\xd1\xc3\ +-\xde\x80#3\xf0\xea\xf7\xd71\xd231\xddnn\ +\x01\x9a\xcf\xc1~\xe7.G\xe7\xbd\xee\xee\x01\x8c\x9cB\ +.\xbfLTZ_^\xd7^O\x8eC\xb9\xf9e\x94\ +\xf4\x5c\xc98\xf4\x843\xeb\xa7\xca\x9f\xfb\xcc\xfa\xc7\x9c\ +h\xff?sf\xfd\x13\x0f\xb8\x9f{f}\x17\xbb\xb6\ +;\xbd\xbb5\xf5XMbw[ZcmRc]\ +R\xfb\xb1\xe4\xce\x8a\xf8\x96\x09\x0ey\x90\xfd|\xb4\x8e\ +\xb2\xca\xea)\xf0\xdc9\x96\x9b]\xeb\x19\xda\xa2\x14\xda\ +\xac\x1c\xda\x04P\x92 \xacY\xc9\xa7QU\xc1H\x15\ +\xcf\xb8ef\x0ev\xdc\xce].\xef\xee?|\xe4\xa8\ +\xafO@h*\x95YX\xdaPV\xd3V\xdfB\xcc\ +Xs\x85e\x94\x0c\x92!<\xefCW;\x03[\xf9\ +3\xce\xfb\xf0\xc4$\x11s\xf2>\x80\x8b\ +\xcf?\x94\x96\x06\xf9\x87\x0e\xfd\xef\xe5\x1f\xea\x7f\xbe\xfc\ +C\xc7\xdaF\x82B\x93\x0a\xcb\xc1\xeb3#C\x82\xc2\ +\xaa\x8c\xec\xfc\xce.\xd8\x0bN\x9e\xf4'\x9d\xc3\xeb\xc6\ +crxm\xdfn\xb5`\x0e\xafgJ\xd7\xb5\xe0\xcd\ +39\xbc4\x9e/\x87\x17\x99\xc9k~\x0e/I\xf6\ +\xb1E~\xc2\xc7\xe4\xf0\xea\xeb\x1b\xc8[\x5c\x0e/`\ +\xc8?8\xbe\xa8\xfcXy\xed\xcc8$,\xae\xa11\ +\x0a\xbb\xba%\x0c\x91\xf1\xc0\xe4b\xfe\xb3\xe5\xc1\x93m\ +\xa6\xc2\xe7\xc8\x83\x07\xd9\xf0Z\xba&*\xeaN\xb5t\ +N@\x1e\x87[\xd2\xdd\x0d{\x1f\xe6g\xfb\ +|\xaa\x5c\x92\x92T\x80\x8b\xcf\x03(I\xfa\x08m\xaa\ +\xab?g.\xc9t\x9a\x002J\xe2\xb9$w\xb8\xe8\ +\xean\xfd\x1f\xcdT\xb8\xe8\x5c\x92\x0d\xad\xc3\xbb\xdf=\ +\x5c\xd5\xd0Y}\xac\xbb\xa9\xe3\x14\xcePIe\x13\x9b\ +_\xd1\xd3\x03Q\xc1d\x04\xbddZ\x07QK\x93\x8f\ +\xca\xc7\x0a\xe9G!\xcf)\x99\x8f\x95LxJ\x82\xcc\ +O\xba\x98\xb4\xa7d\xe2T\xd9\xe4c]%\xe3|\xac\ +\x92o\xf7\xa8|\xac\xfd\xfd\x833\xf9X\xb3f\xf3\xb1\ +\x9e[8\x1f\xeb\x85\xb1\xcf\xce\x8d~2\x08\x18yp\ +v\xf8\xe3\x01\x1c\x1f\x8d^\xf9r\xef>\x8f\xfa\xe6\xe3\ +\xf5-\xc7[\xba ]\x1a\xc2@\xdf\xf1\xc5u\xbd\xbd\ +y32D\xe64\xbe\xfc;\xd4\xfe\x07\xd4\xd3\xdb\xcd\ +\xfa5\xa7\xf1\x829\x9c\x17\xcci\x0cG\xcagS|\ +\xf6\xf7\x1f\xcdF\x8c\xc7\xe74\xde7\xecb\xeb\xea\xe0\ +\xeb\x17\xea\x1f\x1c\x1e\x12\x11\x1b\x19K\x89O\xa6\xa6d\ +\xd0\xa99\xdc\xa2\x8acu\xcd\xc7\x1b;N\xb6\xf7\x0e\ +\xe2\x0c\xd5\x1c\xeb.\xadnM\xa5f\x10\xbe\x9c\x1b\xd7\ +\xaf\xc3\xf1#CP\xb8\x8d\xaa\x1e \xc8\xdd\x01\xc9\xbc\ + \xf3\x1b\x00\x0fD\x85L\x85\x0f\xe3.\x91\x14|N\ +\xa5\xac^.\xbe\xf1\xc5\xb7\xf0\x98\xef2\xff\x8b\xdf\x83\ +p\xc9 \xaf\x08\xc8\x0b\x0eG\xc9\xc0Y3\xb0\x88\x07\ +\x8b\x17\xf3\x01\x99\xc2\xfd\xea\x023Sy\xd9L\x013\ +\xb7 WP\x22(\xac,,\xad+\xadj\xae\xaa\xef\ +\x00\x01jl\xefo\xeb\x1e\xe8\xee\xbb\x803\xd4\xd0z\ +\xa2\xaa\xa1\xa3\xbc\xb6=(<1*&,\x81\x12\xc5\ +\xe2\xa4\xe5d\xa5\xf8U\xb9g\xd1\x13\xa9\xb4\xf8\x8cL\ +@\x1c\x89tiP\x1f~9\xe7\xea\xcf\xe6\xe5\xbc\xaf\ +)\xe9\x0d\xa2g\xe23\xa0\x8bh\xf1\xd0Q4zB\ +XdlJ\x1a\xfbP\xac\xa7\x17=\xc0+\xcb\xff(\ +m\x16^Y\x01\xdeY\x01>\xf4@\x9f\x9c \x1fj\ +\x10\x93V\xc8\xe6\x8by\xc2RAQUAimq\ +%\x18o\xad\xd5\xc7\xba\xeaZ\x8e7u\x9cl\xeb\x19\ +\xe8\xea;\x7f\xfc4\x0c:\x08\x03e\x07$U7t\ +V\xd4\xb5\x17\x957\x0a\xc5\xb5\x5cA9+\xb7\x84\x97\ +S\xc1\xcd*\xcfb\x08i\x8c|Z\x8e\x00\x90\x89\x83\ +O<\x13\xa0\xf3\x7f)\x90|\xe5\x99\x1e ;\x04\x07\ +#?\x0b\xc0\x14f3\x85t\x96\x88\xc1)`pD\ +lN\x11\x8b%\xc6\xc1,\x94\x80\xcd.\xe2p\x8as\ +sK\xf9y\x15\xf9\xc2*\xa1\xb8\xba\x00B\xae\xca\x8f\ +\x95U\xb7T\xd6\xb5\xd7\x1c\xeb\x82\xf9iS\xfb\xc9\xd6\ +\xae3\x1d\xc7\x07\xbb\xfb\x87zO\x8d\xf6\x0d\x80E\x8d\ +\xb0\xce\x13\xe7Z\xba\xcf\x1ck\xeb\xabm\xea\xae\xaco\ +/\xadn)\xaah\xa8\x16v*\xfc^\xc5\xfa\xd6\x8e\ +\xd2\xfcf\x10@Aa\x05\x9f\x00^((\xff\x05c\ +\xb6\x1f\xa0+\x08T\x0a\xc4\x95\xf9\xe2\xaa\xfc\xa2*!\ +\x8eja1\x01(\x105PO^\x12\x15W\x8bJ\ +j\xc0r.*o(\xadj*\xabi\xa9\xac\xef\xc0\ +\x89i9\x0e\x9d\xdf\xd4y\xb2\xb5g\x00\x06\x1e\x10\x9d\ +\x9eS\xc3\xbdg\xc6\xfa\xcfN\x9c<\x07\xd65\xc2\x8e\ +\x9f\x1c\xee:q\xbe\xbdg\xa0\xa5\xf3dc[_}\ +s\x0f\xbc\xad\xb9\xe2\xa4\xcd\xa7;\xbc.\xf9W\x14\x82\ +a\xdeV^\xd3R^\xddL\xa2\xec\x97\x0dI?\x90\ +]\x01=S\x01\x9d\x03\xcf\xb5\xad\x95\x04*j\xdb\x00\ +\x95\x04\xc8Jx\x06T\xd5\xb5\x81\xacT7\x10\xac4\ +\xf54\xb4\x82\xc4\xf4\xb5t\x9ej\xeb\x06\xa19\xdbu\ +\xe2\x5cO\xff\x85\xe3\xa7\x86O\x9c\x19\xed\x1f\x18?9\ +x\xf1\xf4\xf9Kg.\xc0R\x00\xc2\xfa\x06\xc6{O\ +\x8f\xf6\xf4\x0fu\x02O\xc7\x07[\xbb\xcf4w\x9e:\ +\xde8b\xf3\x07[\x8f\xa9#\xe5\xc2zQa)\x8c\ +]\xc7Z\xfb@\x19\xd6\xb7\xf7\x03\xa0\xf0+\xa4{\xe0\ +X\xeb\x09\x90\x03\x12\xf0+\x97\xe0\xa1\xca\xf6~Pb\ +0\xc6\xb4t\x9en\xed\x1eh\xef9\xdb\xd1{\xae\xab\ +\xef\x02(4\x18oN\x9c\x1e\x03\x22\xfa\xcf^\x04\xb9\ +9u\xee\xf2\xe9\x0bW\xce\x5c\x98\x1c\x18\x02\xf7+\xc2\ +\x80\xab\x93\x83\x13}\x03c\xc0\x1ep\x08L\x82\xa0\x9d\ +\xed\x9d0;\x1bc*\x88\x17q\x0b\xca*\xeb\x8aJ\ ++\xa1\xb2\xbd\xef|\x7fM3\xa0\xfd\xc49\xa0\xfdW\ +\xcc\xf6@\xef`G\xef`\xa74N\x9c{\xe8%\x5c\ +:q\x0e\x04\x05\xba\xb1\xbb\xffB\xcf\xc9!\xe8\xea\xde\ +\xd3#}\xb86\x1b?yv\xe2\xd49Bh\xce_\ +\x06\xb9\x19\x18\x9a<;498258\x02>r\ +\x84A\x15\x5c8\x0d\xd4\x0d^$\xa8\x1a\x87\xb7\x0d\x9d\ +\xba\xb6\xe3\x0b\xb7\xcd\x07=Mv8\xd2\xcbk\x84\xcd\ +\x1d\x0d\x83\xe3\x1d\x97n\x8f\x14\x94\x8f\x8aJ{\xceN\ +\xf4\xc2\x1f\xf8\x15x\x0f\x8c\xe08=\x17'N\x8f\x9e\ +\x90\xaa$^\x8e\x82\x0c\x00@\x18@\x8f\xc10\x03\xac\ +\x9c:w\xe94\xc1\x0aI\xcc\xc0\xf0\xe4\xd9\xe1\xa9A\ +\xc0\xc8U\xc0\xb9QX\xf5@\x18p\x05\xb5\x00\xb8\x83\ +\xb8\xf52\xbcg\xf4\xf2\xd8\x1e\x17\xe4\xea\xfa\xe3\xddW\ +\xb0\x8f\xe4\xe4\xbe\xd2\xd4\xfa/C\xe3o\x14\x94F\xab\ +\x1a\xaf\xe4\x15\xf6\x0fO\x81\xa2\xfc\x85\x83\xe8\xdf\xa7\x04\ +(.\x1c\xd0\xb1$$\x94\x9c%)!\xc4\x85\xa4d\ +p\xf4\xda\xf91\xc0u\xc0\xb91\x98\x86\xa2\xff\x06\x90\ + \xf6Vm\xad\xde8\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x08d\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x166\x8b\x9b^\xe7\x00\x00\x06bIDA\ +Tx\xda\xe5\x9b[l\x16U\x10\xc7\x7f](&\x22\ +\x97\x22(XD\x8dQX\x08\x14\xa8\xf2\x22Q.\x89\ +>@L\x18\x84\x0a\x11DA.\xa2b \xc6@\xa2\ +m\x05/D\xe5\x92\xa0\x82\xd4\x0b\x81\x07\x0a2D\xd1\ +\x07\xa3\x18\x101!P\x0a\xe5\xb2\xa21r\x11o\x5c\ +Z@1\x01\xa4>\xec\x81.u\xcf\xf6\xeb\xc7\xb7\xfd\ +\xbe~N\xb2/{f\xf6\xec\xfc\xcf9s\xe6\x9c\x99\ +\xc9!f\x12\x91\x8e@\xff\xc0s3\xd0>\xf0\x00\xd4\ +\x04\x9e#\xc0N\xa0\x02\xd8\xa9\xaa'\xe2\xfc\xbf\x9c\x98\ +\x94\xee\x09\x8c\x06F\x01=\xaf\xf2s\xfb\x80\xb5\xc0\x1a\ +U\xf52\x16\x00\x11i\x0d<\x01L\x02z\xc54`\ +{\x812`\xb9\xaa\x9e\xcd\x08\x00D\xe4:`\x22\xf0\ +<\xd0\x85\xa6\xa1\xe3\xc0[\xc0\x22U\xadI\x0b\x00\x22\ +\x92\x03L\x01^\x0d\xac\xe5\xa6\xa6\x1a`6\xb0LU\ +k\x9b\x0c\x00\x11\xe9\x0c,\x07\x86\x93\x19\xf4\x050Q\ +U\x8f\xc4\x0e\x80\x88\x8c\x01\xden\xe4\xa8{\xc0\x0ec\ +\xd9w\x01\xbf\x07\xac>\x81\x1d\xe1F\xa0/P\x08\xdc\ +\x05\xb8\x8d\x9c\x0dSU\xb5<6\x00D\xa4\x18(N\ +Pn\x1fP\x0e\x94\xab\xea\xf7I\xce\xb4\xee@\x91y\ +\x12\xd9Mj\x81bU\x9d\x9bR\x00D\xa4\x851:\ +S\x12`\xdf\x0a\xccW\xd5\x0d)\xdeZ\x07\x02%\xc0\ +\xd0\x04\xd8?\x04&\xab\xea\xf9\xab\x06@Dr\x81\xf5\ +\xc0\xb0\x06Xw\x03\xcf\xaa\xea\xa6\x98\x1d\xabA\xc0\x22\ +\xa0\xa0\x01\xd6\x0d\xc0\xc8\x86@h\x91\x80\xa5/3N\ +\x8d\x8d.\x00\xaf\x03cU\xf5\xc7\xb8\xad\x9d\xe7y\x07\ +]\xd7-\x03\xce\x02\xf7F\xe8\xd0\x1d\xb8\xddu\xdd\xf5\ +\x9eg\xf7\x9fZ6\xd0_\x090!\xa2\xfd\x90A\xb9\ +\xa2)M\xbe\xaa^\x00\xe6\x8b\xc8F`\x1d\xd0\xcd\xc2\ +:\x16\xf8\xc1\xe8\xd1\xb8% \x22\xe3\x81\x15\x11\xffQ\ +\x09\x0cS\xd5_\xd3\xb9\xff\x89\xc8M\xc0gf\xf7\xb0\ +\x19\xc6\xf1\xaa\xba*a\x00D\xe4\x16\xa0\x0ah\x1b\xb1\ +\xef\x8eT\xd53\x99\xe0\x04\x88H\x1bc\xa7l\x06\xf2\ +4\xd0[U\x0f\xd7op,\xeb\xfe\xdd\x08\xe5+\x00\ +\xc9\x14\xe5\xcd\x928\x03<\x08l\xb3\xb0\xb4\x05>0\ +\xbaE\x03\x00<\x09\xdco\xf9\xd0A`\xb8\xaa\xfeI\ +\x86\x919\x1c\x8d0v)\x8c\x86\x00S#\x97\x80\x88\ +\xb43J\x86yy\xe7\x80\x01\xaa\xba\x9b\x0c&\x11\xe9\ +kfB+\x8b\xb7x\xab\xaa\x9e\xb2\xcd\x80\xa7#\x5c\ +\xdcy\x99\xae\xbc\x99\x09\xbb\x80W,\xcd\xed\x81\xe9\xa1\ +K\xc0\x9c\xe7\x9f\x89pr^\xa3\xf9\xd0\xcb\xc6V\x85\ +\xd1Ls\x84\xff\xcf\x0c\x98\x06t\xb2\x08\xcdH\xc4\xad\ +\xcc\xa0Yp\x01\x98ei\xbe\x1e\x98\x1c\xe6\x08\xd9\x1c\ +\x9e/Uus\x12k\xf1\x1asp\x1ag\xf6\xe2\x95\ +@\xa9\xaa\x9e\x8bC.\x04\x84\xcd\x22\xf2\x951~\xf5\ +i\x02\xb0\xe0\xf2\x0c0wx\xb6k\xac\xe2$\x07\xa2\ +\xc4\x5cVt\xc5\xbf\x08\x9d\x03\xbc\x18\xa3\x5c\x18\xd9\xe4\ +z\x8bH\x8f\xe0\x12(\xb20nW\xd5o\x93\xec\xfc\ +\x91\x90w\xe3b\x94\x0b\x9b\x05[\xf1o\x98\xc3\xa8(\ +\x08\x80X\x98\xca\xafb)v\x0dy\xd7-F9\x1b\ +\xad\xb6\xad6\x00\xc7\xec\xfd\xbd,>\xf4Z\x9a?\xad\ +6\xba\x84-\x83v\x0e\xd0\xcfr&\xd8\x1d\xe6;7\ +72\xf7\x84{,\xe7\xa0\x02\x07\xff\xee-\x8cv\x90\ +=d\xf3\x09\x0a\x9d\x88cde\x16\x01`3\x84\xfd\ +\x1c \xdf\xd2X\x95E\x00\xd8\x5c\xf8|\xc7xFa\ +\xf4G\x16\x01p\xdc\xe6\x15F\x01p*\x8b\x00\xa8\x8e\ +\x02\xa0\x83\xa5\xb1\xe6\xff\x02\x80-\xa6\x96\x93E\x008\ +\x96\xf7\xb5\x0ep2\xe2\xec\x9c-d\xd3\xe5\x84\x03\xd8\ +20\xdae\x11\x00yQ\x00\xd8f@\xa7,\x02\xa0\ +\xa3\xe5\xfdI\x078ji\xec\x93E\x00\xd8t9\xea\ +DxI\xfd\xb3\x08\x80B\x9b\x8b\x1c\x05@a\x16\x01\ +`\x1b\xcc\xcaK\x00\x5c\x0ci,0\x11\xa2fM\x22\ +\xd2\x0d\xe8\x1d\xd2t\x11\xa8tT\xf54\xb0\xdf\xe2\x07\ +\x8c\xca\x82\xd1\x7f\xd8\xe2\xd3\xecU\xd53\x97\x1c\x84u\ +\x11\xc2\xc9RX\xbe\xce\xa1\x18\xe5l4\xc6\xf2\xfe\xa3\ +\xa0\x87\xb4\xc6f\x07D\xe4\x9e$;^\x99\xe0\xbbT\ +\xc9\x85M\xff\x81\x11\xc7\xfd\xb5\x97\x01P\xd5\xfd\xf8I\ +\x88aT\x9a$\x00\xa5\xf8\x01\x8a\xc3\xe6\x99\x07\xcc\x8d\ +Q\xae1\xff^\xa5\xaa\xdf]\xe1\xef\x8b\xc8,\xe0\x0d\ +\x8b\xc0\xa0db\x03i6~\xf7\x01\x9b,\xcd3U\ +ua\xfdC\xc2R\xe0\x98E`\xb1\x88\xb4jF\xca\ +\xb7\x04\xde\xb4\xb9\xbf\xf89\x8eW\x9e\x92T\xf5/`\ +\xb1E\xa8\x00?X\xd1\x5c\xe8\x85\x08?fA0\xbc\ +_\xff\x98\xb8$\xe2\x1e`\x8e\x09=g\xfa\xe8\xf7\x8f\ +\x18\xac\x1a\xfct\xbf\xf0s\xb2\x89\x9b\xcf\xb1\x08\xb7\x02\ +>\x15\x91\xae\x19\xac|\x17@\x81\x5c\x0b\xcb\xec`n\ +\x80\xed\xa2`)\xf0\xb9\xe5\x03\xf9\xc0\xc7\xc1\xf0r\x06\ +)\xdf\x06?Y\xca\xe6\xbdn\x04\x96\x85y{a\x1f\ +k(Ij#0\x22\x83\x92\xa4\xda\xe2'I\x0d\xb1\ +\xb0\x9c\x02\xfa$\x94$e\x96\xc2!\xe0\xa9\x88>\x87\ +\x02_\x9b\x14\xb5t+\x9f\x0fl\x89P\xbe\x16\x98n\ +\x8brY3E=\xcf\xabr]7\x07\x18da\xe9\ +\x0c\x8cv]\xf7\x1b\xcf\xf3~I\x93\xf2\x03\xf0S\xf6\ +\xee\x88`+Q\xd5%\xb6\xc6\xc8TY\xd7u7\xe3\ +Gf\xfbYX\xda\x01\x8f\xb9\xae\xdb\xdau\xdd-\x9e\ +\xe7\xfd\xd3D\x8a\xe7\xba\xae\xfb\x1c\xb0\x0a\xfbu\x17\xc0\ +{\xaa:+\xea[NT\xa3\xa9\xc2\x98\x82\x9fxl\ +\xa3\x96\xf8\xe52\xdbDdp\x13(?\x18\xd8\x8e\x9f\ +\xb3\x94\x1b\xc1\xfa\x09!iq\x09\x19\xc1\x90N[\x18\ +\x1faj\x02\xecq\xa6\xcb\x97F\xac\xf5 \xbd\x8f_\ +%\x00\x04~b\x06\xb00A\xb9\x9f\xcc)\ +sE\xb2\xe5n\x22r\x1b~\xa6\xfa\xa3$V=R\ +\x0b\xbc\xa4\xaa%\x89\xf6\x91L\xc9L\x11\xf0N\x03k\ +\xaf>\x1d\xa0\xaed\xa6\x12?\xeeXM]\xc4&\xcf\ +<7\x18{S\x08\xdc\x0d\xdc\xd9\x88>\xaa\xcd\xa8\xaf\ +i\x8c>\xd9T4\xf5\xb8\xaa\xfe\xdcXA'\x99\xde\ +T\xf57\xfc\xe4\xe4i\xa47\x86Xm\xfe\xe1\x81d\ +\x94Oz\x06\xd4\x9b\x0d\xe9(\x9c<\x86_\xb9\x96\xbe\ +\xc2\xc9\x10 \xae\xc5/\x9b\x9dD\xf8-l*\xa8\x0a\ +\xbf\x84\xa7LU\xffN\xc5\x07\xe3*\x9e\xeea\xac\xf7\ +C)\x00c\x0fu\xc5\xd3\x07R\xfd\xaf\xb1\x87\xc0E\ +\xa4\x03u\xa5\xf3\x85\xf8y\x80y\xf8\x11\xdb\xbc\xc0Z\ +\xae\xe6\xca\xf2\xf9\x9d@\x85\xaaV\xc7\xf9\x7f\xff\x02\xef\ +$\x0a\xa5\x06S\xe0~\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x04\xf8\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08:\x1e\x87\x1f\x9d\xb3\x00\x00\x02\xf6IDA\ +Tx\xda\xed\xdbK\x8cLY\x18\x07\xf0_\xb5\xce\xb0\ +\xf0H4!\xde\xb3\x99\x15\x8d\x05a\x81\x05V\x16v\ +d2\x1b\xabYH\xac%\x86\xbdD\x82\x05\xb6\x22\xd1\ +\xcd\xcaBXaK\xd2\xe2\x11B\xa2=\xc6c\x10A\ +\xd2\x89\x89G\xe8bQ\xa7\xa2\xf5T\xdd{\xa7\xba\xab\ +\xf4=\xf7\xfe\x93\x93\xd4\xeb\x9c\xe4\xff\xaf\xfb}\xe7\xfb\ +\xbes\xbe\x8a\xc6X\x8e\xdf\xb1\x09\x8b1K>\xf1\x06\ +Op\x11\xfd\xb8\x956a\x16N\xa1\x8a\xaf\x91\x8d*\ +\xfa\xd0\xd3\x8c\xfcox\x10!\xf1\xd1\xe3A\xe0\xfa\x03\ +zp\xbf\x00\xe4\xeb\xe3\x11f\x8f\x14\xa0\xbf@\xe4\xeb\ +\xa3\x0f*\xc1\xe1\xdd\x08\xaf\x8b\x84\xafX\xd1\x1d\xbc}\ +\x12\xf9\x8fx\x91S\x92\xf30\xa5\xc9w\x95\xc0\xdd\xd5\ +\x84\xc7\xe4\x08~\xc9\xf1\xbf<\x19\xc7\x12\xf8\x0d\xd4\xf7\ +\xcaF_~\x08\x0b\xe4\x1dS\x02\x97F\x1c_KP\ +\xe7~D\xf6\xdet\x87\xebJq\x1219\xbc\x86\xe8\ +Rp\x94\x02\x94\x02\x94\x02\x94\x02\xb4\x8an\xec\x09\x89\ +\xc5[\x9c\xc6\x92\xbcn\x11\x8d\xc6`\xca\xbc\xe3M\x02\ +\x8b\xd5\x13\x90\xe3`\x02\xcf\x96\x04X\x88\xe1&\xf3\xde\ +as^\x04h\xd5\x04~M0\x9f\xa98\x87m1\ +\x9b\xc0\x0c|J\xc9\xb7\x87\xb13V\x13\x80\xbf2\x16\ +\x1e\xf6\xc7*@\x05\x073\x8ap\xf4'o\xb9m\x11\ +\xa0\x8e\xdd\x19E8\xf3\x13\xd3\xeb\xb6\x0a\x00;\xf09\ +\x83\x08\x970-F\x01`+\xdeg\x10a\xc0\xa8\x8a\ +l,\x02\xc0\x06\x0ce\x10\xe1n\x88%\xa2\x13\x00\x96\ +\xe2\x9f\x0c\x22<\xc7\xb2\x18\x05\xa8\x07J\xf72\x88\xf0\ +\x16kc\x14\x00\xe6\xe0Z\x06\x11\xdeaU\x8c\x02\xc0\ +\xf4\xe0\xf9\xd3D\x18\xc4\xa4\x18\x05\xa0v\xaep:\x83\ +\x08\xbdyJ\x86\xfe\x0f*\x19\xa3\xc0\xa9y\xab\x07\x8c\ +\xa7\x09\xbchs\x948\xe1\x9d\xe0\xbar\x1b,\x03\xa1\ +2\x14.\x93\xa12\x1d.\x0b\x22eI,W\x02\xec\ +\x8b\xa1(\xda\xdd\xe2\x823\xb07\xe57U\xecR\xbb\ +\xa33\x1ak\xd4\x0eO\x16\x8c\x81T\x15wp\x16O\ +;\x1d\x0a\xafO\xf9\xd7?i~0r\xc0\xf8\xde\xf7\ +\xfb\x17[:m\x02\xad\x1e\x8d\xad\xd1\x9eK\x8f/\xd5\ +\x0ek;\x96\x0d>\xc3\x89\x06\x9f\xbf\xc1F\x5ch2\ +oS\x9bl|n\xab\xe9\xf4X<\xf3\x9fj\xc7\xe3\ +\x0f\x03\xf1\xfeP\xd9\x19H\x983\xd4FG7\xd4I\ +\x1f\xd0*\x16\x05\x9b\x1do\x13\xb8<\x91\x0b\x22#\xf1\ +\x14\xdb\xf1j\x1c\xd7\xbc\x82?Z\x9d\xdc\xad\xf38\x1f\ +\xb6\xbf^\xcc\x1c\xe3Z\x8f\xc2\x90'\x01\xe0\x0b\xaeO\ +\x80\x00\xa9\xbc$U\x0a\x90\x92\xec\xc4\x82D.\xaf\x15\ +\xf8\xba|\x17\x1e'L<\xa4y\xc7E^\xc8\x1fN\ +\xe0\xf0w%\xa4\xab\xbb\x13\x16\xc9s\xcb\xcc\xfc\x94\xa7\ +x\x7f%\xec\xc77\x15\xafi\xaa\x8a\x95\xf57}\x8a\ +\xd76wr\xa4\x1a3\x15\xafq\xf2?\xfd\xd0\x85n\ +\x9d\xad\xa3'\x98C\x8c\xcd\xd3\xc3\xe1\xb1\xef\xc9\x12 \ +\xf4\xfa\xde>\xbfD\xbe\xdb\xe7\x1f\xfb\xde>\x7f{\xf4\ +\x0f\xbe\x01\xb3\xd6\xeb\x94@\xfa\x93D\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x04<\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x0e/m\xebn~\x00\x00\x02:IDA\ +Tx\xda\xed\x9b\xb1N\xc30\x10@\x1f \xc1G\x94\ +v\x01\xfe\x06T\xc4T>\x82\x1dQ6\x0ai\xe7n\ +\x1daF\xed\x87T\x9d\x8b\xc4\x02eo\x91X\xe8R\ +\x06.R\x15\xc5\x90\x86\xb3\x93\xa0;\xe9\x06\x8c\xe3\xdc\ +\xbd\xe4\x5c\xdf\xc5\x86\xb0\xb2\x0b\xb4\x80{`\x0a|\x88\ +N\xa5\xad%}\xfe\xa5\x9c\x03o\xc0\xea\x17}\x93\xbe\ +\xffF\xb6\x81A\x06\xc7\x93:\x90k+/\xfd\x1c\xce\ +\xc7\xda\xaf\xba\xf3\xcd?8\x1fk\xb3\xaa\xce\xef\x00O\ +\x0a\x00\x9ee\xac\xca\xc9\xb1\x82\xf3\xb1\x1e\xfb\x9c\xa0|\ +\xc9\xc9\x0f\xff\xfb\x04\xae\x80:\xd0\x00\xda\xc02\xe7X\ +\xc1\xe5\x08\xe8\x02\x13`\x91\xf3\x89^\xa6\x8c\xdb\xce9\ +\xd6Bl\xe9\x8am^c\xba'O\xea\xaf\xaft=\ +e\xfc\x86\xc2\xb8K\xb1q\xc7\x87\xf3#\xc5\x98\xf6\x05\ + \xd6\x916\x84\x9e\xa2q+\x89\xff\xa4\x5c+\xdf#\ +\xd2\x8c\xf9\xa5\xb2q\x9f\x12\xf3\x0d\xd1ki\xd3\xbe\xc7\ +\xa1\x06\x80\xae\xb2a!\xf5V\x03\xc0\xc41\xf8#P\ +[\xeb\x17\xda\xb9Xj\xc0\xd0\xd1g\xac\x01\xc0\xf5S\ +WK\xf4+\x0a\x00\xc0\xbe\xa3\xcf\xfc7\xe7\xb62\x00\ +Xe\xbcv\x15x=\xb2\x95\xd3No+\xc1Y@\ +\xe7_\xca\xb8\x14~\x08\x08 \xe4\xbd2\xc5`\x5c\xee\ +\xea\xc8\xd3\xf1\x15\xf7/\xc0\x8d\xa3l\x96\xd5Nos\ +@\xd1R\xf8\x1cP\xd9z\x9d\x010\x00\x06\xc0\x00\x18\ +\x00\x03`\x00\x0c\x80\x01P\x90=\xe0N2\xc3W\xa9\ +\xc8T\xfes\xf7&IF\x94\xd2\xaf\x93\xe8sF\xb6\ +\xcf\xe4i\x9f\xcdO\x95\xec\xf4\x06\xe0\xd5\x91\xc1\xadK\ +\x1e\xe7c\x9di\x03\xd8.\xe8\x8d*\xe2\xda \x00\xd2\ +\x0a\x15\xf7\x89\xbf/\xe4-\xd8Tfrm\xa9\xe7\x80\ +\xf5\xa2\xc8O\xc5\x8b\xa2\xed\xb4\x82\x88\xad\x03\x0c\x80\x01\ +0\x00\x06\xc0r\x01\xcb\x05,\x17\xb0\x5c\xc0r\x01\xcb\ +\x05,\x17\xb0u\x80\x010\x00\x06\xc0\x00\x18\x00\xb7\xbc\ +;\xda\xf7K\xe4G\xdd\xd1\xbe\xd0\x18\xdc\xb5UvX\ +\x12\x08u\xdc[\xf9U\xb6\xcaFTw\xb3tG\x03\ +\x80\x8f\xed\xf2!Tm\xbb<\xe8\x1f\x98\x08\xa1\x91f\ +\x9ci\x1f\x99\xf1\xad\xeaGfb\x08Q\xc9\xc3a)\ +6z=hy u\xbf1\xdf\xfb\xf1\x8bvz.\ +\xb6\xdc\x89m\x1b\xc9\x17\xf5>\x93\xb1{\xa7\x13\xa8\x00\ +\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x04\x7f\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x077/h3\xa4\xf9\x00\x00\x02}IDA\ +Tx\xda\xed\x9b;H\x1cA\x18\xc7\x7f\xe7#Q\x09\ +h4\x8a \xd8$]\x9a\x14\xe9-\xc4\xc6\x14A\x8b\ +`{E\x10\x0b!ER\xa6\x0b\x9akC \x09i\ +\xb40(b\xc0<\x10|\xe0\xa3Hc!Xh\x1e\ +M\x8a\x10\x22D\x92\x80\xe4\x05w\xa6\xd8=\x90\xe5v\ +\xd7\xbb\xec\xcc\xf7\xcd\xdd\xfea\xb8fgv~\xff\xff\ +7\xb3\xc7> U\xaaT\xb5\xac\x8c\x92y\xb4\x02#\ +\xc0 p\x118\x0f|\x03\xde\x03\xaf\x819\xe0\xa8Z\ +\x03\x18\x07\xbe\x02\xc7\x11\xed\x00\xb8Ym\xf0\xcd\xc0l\ +\x0cx\xb0M\x03g\xaa\x01\xfe,\xf0\xaaL\xf8b[\ +\x02\x9aj\x15\xdey\x13\x92\x80w\xd6\x84$\xe1\x9d3\ +\xc1\x04\xbc3&\x98\x84Wo\x82\x0dx\xb5&\xd8\x84\ +Wg\x82\x04\xbc\x1a\x13$\xe1\xc5M\xd0\x00/f\x82\ +&x\xeb&h\x84\xb7f\x82fx\xe3&\xb8\x00o\ +\xcc\x84f`\xd9\x11\xf8b{\x99\xd4\xfd\x04\x97\x92\x0f\ +\xb6G6\x92\xdf\x05\x1e(6a\xd84|\xa7\x7f|\ +N\xa9\x01\xef\x80\x06\x13e\xbf\x07t\x07\xfa\xddSj\ +B\x9f\xc9\xe4\x83\xd2X\x09\x13\xe5\xc0\xafT\x90<\xca\ ++a\xc6F\xf2\x9a+\xe1\x85\xad\xe4\xb5V\xc2S\x9b\ +\xc9k\xac\x84[R\xf0\x1aL(\xe0=\x83\xb4V\xf6\ +\xda\x96\xc3\xbcd\xf2\xd2\x95\xf0\x03\xb8\x14\x9cD\x06X\ +\x10\x80\xb7mB\x1e\xb8^j\x02w\x04\xe1m\x99\x90\ +\x07\xb2\xa5N|\xc1/\x0b\x1bk^jO(\x00\xa3\ +a'\xbd-\x9c\xbc\xe9J\x08M\xbe\xa8\x8d\x90\x8e\x9f\ +\x04\xe0\x936!\x16\x1e\xe0sH\xe7,\xb2\xca\xd9\x80\ +\x07\xf8\x132\xc0e\x05O\x98r\xa6\xe1\xc1{\x01\xa9\ +\xd4 7\x94\xd0\ +\xe2\x98\x09\xf9J\x96\xee\xdd\x88\x01\xd7\x14\x99\xf0\xdc\x04\ +<@\x0f\xf03b\xe0-\xe0\x9c0\xfc5\xe0w\xa5\ +\xd7\xf9\xd3\xe8~\x8c\xbb\x92\x950\x04\xfc5\x91\xfcI\ +5\x02\xeb1&HT\x82\xf1\xe4O\xaa\x03\xd8QT\ +\x09V\x92\x0f\xaa\x0d\xd8VP\x09V\x93\xd7f\x82(\ +\xbc\xb4\x09*\xe0\xa5\xf6\x04\x915\x9f9\x85\x09\xab\xc0\ +\x95\x88c\xde\x02\x93\xfeo\xbe\x829\xb4\xfbwi\xc6\ +\x80\xba\x88\xe3\x1e\x02S\x09q\x7f\x04\x0e\x93\xac\x04\xd7\ +Z\x01X\xc4\xfb2\xa5fM8\x06\x9e$\xbd'\xb8\ +\xd6\xbe\xd4\x95a\xc0!\xd0\x0flR=\xfa^_f\ +\x87_\xc03\xbc\x97\x0b\xae\xfa\x7f\xa1]\xd6\xc4\xff|\ +6\xd7\x83\xf7\xa9\xdb\x00\xd0\x0bt\xc5\xec\xe2\x9a\xf4\xc1\ +\xbf\xa2<&U\xaaT5\xad\x7f\xcd\xed,A\x1d*\ +\x89#\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x04\xce\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x07)UJp\x02\x00\x00\x02\xccIDA\ +Tx\xda\xed\x9b\xbfn\x131\x1c\x80\xbf\xb4\xf4h\x15\ +\x01\x03\x02\x16\xca\x13\xf0\x0a\xe1\x01\x90:#\x10\xb0 \ +\xfa\x00\x14\xb12\x00}\x01\x18\xd8\xf8O(PZR\ +\xa9U\x06D\xa5\xc2\x02\x82\xa5 \x96.\xad\x18i#\ +\x10\xd01\x0c\xf1I\xa7*w\xf9\x9d}\xf6\x9d\x83\x7f\ +\x92\x97(\xf6\xf9\xfb\xec8\xfeY\xbe\x1a\xf28\x04L\ +\xa9r\x12\x98\x04\x0eP\x8d\xf8\x05|\x07\xbe\x00-`\ +I}VH\xec\x07\xae\x02\xdb@\xd7\x93\xb2\x0d\xcc\x00\ +\x91)\xfca`\xd5#\xf0\xbd\xe5=pL\x17\xfe(\ +\xb0\xe11|\x5c6\x80#:\xd3\xfe\xdd\x10\xc0\xc7e\ +-\xef\xcf\xe1\xda\x10\xc1\xc7\xe5J\x9e\xd5>k\xc1k\ +\x01\x0d\xa0Nu\xa2\x0e\x9cR\xab\x7fZ\xbf\x7f\x00\x07\ +%\x8d\x9d\xcfhd\x96\xea\xc7lF\xff\xcfI\x1a\x98\ +\xcb\x18y_\xa2\x95\xc2\xd0\x94T\xfe\x9aR\xb9\xe1\x91\ +\x80F\x0a\xc3\xbatW\xd5\xafr\xdd#\x01\xf5\x14\x86\ +\x9f{\xbfX\xebS\xb9\x9b\xd2h\x0d\xbfB\xc41\xc2\ +\x7f\x1eA@\x10\x10\x04\x04\x01A@\x10\x10\x04X\x8d\ +\x08\x98V'K\x1dA\xda\xda\x01\xde\x02\x97\x81\xb12\ +\xa4l\xf5\xe9\xd4\xa6f[\x93\xc0g\x83\x1c\xfe\x13p\ +\xdc5\xc7\xad>\x15oh\x8e\xbc\x09|R\x82\xceL\ +\xd0\xe6\x88\x80\x9b\xca\xd6\xa6\xaa\xa4s\xba:]\xe0i\ +\xce%\xcd\x01(\x82C;V\x0b\x14\xf0\xc6\xc7\x05\xb6\ +S\xa0\x80\x1d[\x9d\xb4\x99\xe2\xea\xa6\xd5N\xd3\xf1\xb0\ +\x0f\x08\x02\x82\x80 \x08\x08\x02\x82\x80 \x08\x08\ +\x02\x82\x80\xdc1A\xef\x22\xd2G`\xb7O\x02c#\ +\xb7H\x96\xbf\xc0\x07z\x17\x1f\xc6]\x8b;A\xefJ\ +\x9aNf\x97\x17TR\xd6U\x9f\x9c\xc4\x84\x01\xbc-\ +\x01]\xe0\x1b\x8e\xee-\xce\x18tRr&\xb7e\xd0\ +\xfeu\x17k\xc0Y\x03y\x0f\x05\xdfyd\xd0\xfe\x19\ +\x173\xe0\x8f\xe6\xc8K\xcf\xe4\x92gyy\x9f\xb3\xeb\ +B\xc0N\xca\xc3W\x1c\xad\xc6\xe3\xeaYiWd\xad\ +G;c\x04\xdaj\x91\xb4\x15\x11\xd9W\xe1\x96]\x08\ +\x98\x1a0\x0dmI\x18\x04\xdf\x05N\xbb\xfa+\xbc3\ +\xa0#E\xff\x1c\xb2\xa6}\x5cn\xbb\xdc\x08\xd5\x80\xbb\ +\x8ef\x82d\xe4\xef\x95\xb1\xad\x1f\x01\xee[\x96 \x81\ +o\x02\xa3e\xe6\x12\x0f,I\x90\xc0?\x03\xf6\x95\x9d\ +P\x8d\xaa\xcdK\x91\x12$\xf0sU\x80\xb7!A\x02\ +\xff\xbcJ\xf0I\x09\x8f\x0d%H\xe0_T\x11>)\ +\xe1\x89\xa6\x04\x09\xfc\xcb*\xc3'%<\xcd)A\x02\ +?OIWft%4\x85\x12$\xf0\xaf|\x82\x8f\ +c\x0cX\x10\xec\x18\x07\xed\xf0\x16|\x84OJX4\ +8\xe0X\xa6\xf7\x06\x9b\xd7\x11\x01\xaf5\xe0W\x86\x01\ +^W\x82\xab\xb3\x05\xe7\x12\x96\x04\xf0\xeda\x84O\xa6\ +\xb5\xf3\x03\xfe\xea\x86\x16>\x99J_\xa4\xf7j\xeeo\ +U\xd6\x80\x0b\x94\xf0^\xd2?q\x05i\xcd+\xcfB\ +\xb2\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x07!\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x07-;\xc2\xc4\x8a_\x00\x00\x05\x1fIDA\ +Tx\xda\xe5\x9b\x7fhVU\x18\xc7?\xfb\xe5tC\ +\x8d\xb5~7%\x95\x22\x7fGB\x09\xf5_F\xa4$\ +\x19\xd2l\xba\x08-\x8a\xb2\x92\x8ar\x11DbbE\ +efDa3\xed\x0f\x0d\xec\x17\x19\xeaZE\x98N\ +1H\xa3\xccj\xd2\xf0-[\xa3\xd6t.\x9d\xba\xfc\ +\xe3>/\x8e\xd7\xfb\x9c{\xcf{\xcf\xfb\xbe\xf7\xce/\ +\x1c\x18\xbb\xe7\x9c\xe7|\x9f\xf7\xdc\xe79\xcf\xf3\x9c[\ +D~1\x14\x98\x09\xdc\x0cL\x02.\x90\xffw\x00{\ +\x80&\xe0c\xe00\x03\x0ce\xc0b\xe0\x1f\xe0\xff\x80\ +\xd6\x09<\x03\x94\x0f\x14\xf2\x97\x00;C\x10\xcfl\xdf\ +\x01#\x93N\xbe\x1a\xd8\x97\x05\xf9t;\x08\x5c\x91T\ +\xf2\xc5@s\x04\xf2\xe9\xf6=P\x91D\x05<\xe6\x80\ +|\xba\xadH\x1a\xf9\xd1\xc0Q\x03\xa1\x1d@\xad\xf4\x1b\ +\x0d\xcc\x01Z\x0c\xfdO\x01\xd7%\x85|Q\xc0\xd6\x7f\ +\x15(\xf1\x19W\x02\xbcf\x18\xb7G\xbcI\xec\xb1\xc0\ +@b\xb3\xd8\x06\x93\xdd\xd8l\x18\xffT\xdc\xc9\x0f\x13\ +?\xee\xb7\xf8\xa3!-\xfa\x08\xe0\x882G\x8f\xbc2\ +\xb1\xc5\x9d\x86_o\xb1\xc5<\x0f\x1b\xe6i\x92\xd7,\ +\x96\xa8W\x16\xfd\x030\xc8\xd2\x85\x9a\x8cb\xbd\xcf\x98\ +r`\x19\xb0\x0b\xf8\x0a\x98]\x08\x05\x9c\x07\xb4g,\ +\xb6\x17\xb81\x8b\xb9&\xc8X?\x05t\xc8!\xab?\ +\xd6\xf9\xf4\xab-\x84\x12\xc6\x02_\x00'\x81\xbd\xc0\xb4\ +\x08s-1\xec\x82\xb5\xfd\xfa\xd5\x88\xab\xcc\xec\xf3Y\ +\xd2\x8f\xd2\x83\x81\x9f\x0cJ\xb8I\xfa\xdd\xa1\x91X\ +!S\xfe\x01\x1cV\x95.\xc7\xab\xd3i1y[\x8e\ +\x0c\xa1M\x0a\xae\x0eX\x0f|#\xe7\x90\xcb\x5c\x0a\xf8\ +\xd0\xf0K\xcf\x13\xc1\xb90\x84\xb1\xc0,\x03\xf9f\xc9\ +\xcb5\xe4\xf0DX\xf0\xecn\xca\x90\xdd\x1d%\xfd\xa6\ +g\x9b\x88\xc8\x13\xc6\x89A\x1cg;\xf0u\xc3\xaf\xff\ +x\xbf~\x17)V\xf9\xd3\x02\x13/\xca\xe0\xd0'^\ +-\x14\xae7\x04A\xbb}B\xcc\x979\xbb\x8cu[\ +\x81\x150SY\xff\x9c\xa0\x81e\x92\xc8\xf4\x1b|\x02\ +\xb8F9L-\x02\xbe\x96d\xe8\xad1\xd8\xfaK\x15\ +\x0e\x87\xc4\x8d\xaah0l\xfd\xe5\x09\xb2as\x0d<\ +Vi\x83\xc6H\x16\xc5o\xd0\xaf$\xabF_\x09\xfc\ +\x86e\xa5y\xabAk\xd3H\x1en\xc1\xa2\xd2\x5cg\ +\xe8\xdc\x98`w\xbe\xce\xc0\xeb\xc1t\xa7\xc1xwq\ +\xfc:\xb5\x03\xe7'X\x01\xd5\xc0_\x06n\x15\x00w\ +\x19\xb4TK\xf2a\xe2W\x07\xb0!&\xa7\xb92\xe0\ +\x09\xe0G`\xbf\xfc\xed\xaar\xa5\xddX\xd9\x80\x84\x8f\ +~\x0f\xa7\xe7\x91\xfcPI|d\xae\xe1iG\xf3k\ +G\xf6V\xd0/3U\xe7\x89\xfc\xc5\xc0\xb7\xca\x1a\xda\ +\x1c\xda\x02-w\xa8^G\xc9\x87\xdf\xbf\xca\xb0\x03\xd3\ +\x86\xca\x05*\x94\xf9\x0f\x17\xe3\xd5\xdc\xfc0)\xc7\xe4\ +\xa7J\x12\xc3to\xe8=G\xb2\xb4\x14y\x0a\xe0#\ +E;\xef\xe78X\xe9\x09H\xad5\x01C\x1c\xc9[\ +\xad\xc8\xf8\x00\xce\xd4\xdf\xfd\xda\x939 \xff\x00\xde\xed\ +\x11\x13\xf9w\x1d\xe6\x15\xe7\xa1\xd75\x17\x00\x5c\x88\xf9\ +V\xe7Z\xbc\xfb:.b\xf4\xa5\x04'U\x97\xe0\xe6\ +\x16\xd8\x04\xe0-\x03\xf9n\xce|\xaf\xc0\xf2\x10\x0b\xeb\ +\xc5\xbb\xef\xef\xd7\xf6\x8a\xdf\xd6\xaa1%\xc0\x9a\x102\ +N\x19d\xd8\xb40E\x95e\xfd\x178\x1c\xf8\x99\xe8\ +U!\xcdo?\x87\xbb\x8b\xd3.\xda~\xe1|\x96\xa5\ +\xec\x8a8q\xab\xa2\x80\x831\x22\xdfe\xca\x11\x8e\x0f\ +\xf0\xcbA-\xa5\xcc\xdb\x1e\x13\xf2\xad\x84\xa8\x1aW\xe1\ +Uh\x8fg!\xe0%e\xceU\x05&~\x0c\xef\x96\ +z\x95\x8d\x15\xad\x01\x1e\x95DI*\xc0uu\xe2\xdd\ +\xc8\xd0N\x8fC\xc4\xaf\xe7\x8b\xf0IY\xf3\x16\xe0\x11\ +\xbc\x0a\x97\xea\x9a\xc2\xa2T\x82\x16?t\x89\xbb1a\ +\x10\xf0N:\x04U\xd0'g\x8f\xd5\x11]\xe0\x11Q\ +B\xecP\x04'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x070)\xce\x11\x97\x0b\x00\x00\x02\x11IDA\ +Tx\xda\xed\x9b\xbdN\x02A\x10\x80?\xa0\xd4\xc6X\ +\x22\x95\xf2\x04\xf0\x18&\x12K}\x11\x0bM,\x0c?\ +\x0fc\xa4\xe5\x01(L\x0c\x0f\x01T&\x0a&@\x22\ +\x89`s&\x14\x9e\xdc\xc1\xec\xdc\x5c\x9cI\xa6\xb9\xe4\ +nf\xbe\x9b\xdd\x99\xbd\xbd\x85\xf4R\x05\xda\xc0\x00\x98\ +\x02\xeb\x00\xfa\x06<\x03w\xc01F\xa4\x04t\x80e\ +\xa0\xa0\xe3t\x02\x5c[\x08\xbe\xab\x1c\xf8\xa6\xae\x80\xdb\ +,\x01t2\x0c~S\xef\xb3\x08\xbe\x9aA\xda\x9b\x82\ +\xd06\x14\xfc\x8f\xb65\x01\x0cb\x9cx\x04\xca\x01\xec\ +\x99\xcb\x84\xb8RW\x0ed\xcf\xdcp\x883\x8e\x01\x00\ +*\xc3\xc1:\x80\xe0\x10\xf2\x00 (\x84\xbc\x00\x08\x06\ +!)\x80K`\x9c\xc2\xd91\xd0\x10\x06\x10dbL\ +\x0a`\xbc\x83\xb3\xa3\x00\x00\xd6\xd1\x22J\x1d\xc0h\x07\ +G\x87\x81\x00\xac\x80+m\x00\x8d\x94\x10\x86\xc0E \ +\x00k\xe0\x1d8\xca\xe3$8\x13\x84p\xb3\xcdX\x11\ +{\xd2\x17|\xd6y\x1e3\xa0\x06,\x842\xe05\x8f\ +\x00\x00\xea@O`8|\xe5\xb1\x0f0\xf7\xa2\xb4\xfb\ +\x00U\x00Ea\x074\xeeQ\x17\xed>@5\x03\x0a\ +{\xbc\xa5\x82\xc1\x17\x95\xda\xcf\x22\xff\x5c\x1c\x80\x03\xb0\ +\xd9\xc0\xfc\xa6\xb3\xe8\xd95\xabU\xa0.\xd8\xc2\xfe\xa5\ +\x8b\xc8\x96\xb9F\xa8\x87\xde\xc6H\xcfb\x19\x9c\x01\x07\ +JY9\x07\x0e%\xca\xa0$\x00\xed\xae\xae \x01\xc0\ +\xab\x80\x03p\x00\x0e\xc0\x018\x00\x07 \xd6\x9ch\xc9\ +\xdc\x22\x80\xbe\x22\x00M[\x89{l\xc9\xef\xf9\xdb\x16\ +C5\x8b\x8b\xa1\xac\x97\xc3\xfeM\xd0\xd7\x02^\x06\x1d\ +@.\x01d\xbd\xa7(Z\x05v\x91\xd0\xff\x16\x99\xcf\ +\x00\xf3{\x8a\xa13 \xf4\xbfE\xde\x07x\x15p\x00\ +\x0e`/\x00\x1f1\xd7O\x0c\xc5Q\x89\xb9>\x95x\ +x\xdc\x91\x99'#\x10*\xc4\x1f\xe9{\x910\xd0\xc2\ +\xde\xa1\xa9\xa4\xfa \x01\xc0\xda\xb1\xb9\xa4\xfa\x09\x9cI\ +\xa5Y'\x87\x00Z\x92\xe3,\xeb\xa3\xb3i\xb5\x1b\xf9\ +\x8c4\x84\x96\xf1\xe1\xb0\x8c|,\x85\x9cuO\x81f\ +4\xc3N\x0c\x04=\x89|iF\xbe\xa5\x92o\x1c\xe2\ +p\xb6\xab\xa18u\x00\x00\x00\x00IEND\xaeB\ +`\x82\ +\x00\x00\x1c\xad\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x02\x00\x00\x00\x02\x00\x08\x06\x00\x00\x00\xf4x\xd4\xfa\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x075\x13uj\xba\xfc\x00\x00\x1a\xabIDA\ +Tx\xda\xed\xdd{\xac&w}\xdf\xf1\xf7\x1e\xdb\x98\ +\xf5%\xe0`@$\x84\x04Jm0\x06gm\xe35\ +`(\x89(\x84\x1a\x02\x14\x93\x82C-\xe2\x80\x13\xa1\ +\xb6\x96*+\x06E)\x8br)\x11R\x0a\x84\xaa!\ +!\xa8\x14)4%\xb4R\xab\xa8D\xa1\x88\x16\x5cc\ +\x1307\xef\xdaN\x04\x89Sl\xc0\xd7\x80\xbd\xc6\xb7\ +\xdd\xfe\xf1<\x1b\xec\xf5^\xce9{.\xcf\xcc\xbc^\ +\xd2Wk\xd8\xdd\xb33\xf3\x9bg\xbe\x9f\xf9\xcd<3\ +[\x02\xa6\xe0\xc9\xd5\xb9\xd5\xb6\xea\xf4\xea\xa9\xd5S\xe6\ +\xbfwc\xf5\x8d\xeak\xd55\xd5\x95\xd57m2\x00\ +\x18\xa6\xed\xd5{\xaa]\xd5\xde\x15\xd6\xce\xeaw\xaas\ +lF\x00X|[\xab\xb7V\xd7\xad\xa2\xe9\x1f\xacv\ +U\xbf\x5c=\xda\xe6\x05\x80\xc5\xb2T]R}{\x0d\ +\x1b\xff\xfe\xf5\xad\xea\xcd\xf3\x7f\x0b\x00\xd8d\xa7V\x9f\ +_\xc7\xc6\xbf\x7f]U\x9db\xb3\x03\xc0\xe6\xb9\xb0\xba\ +k\x03\x9b\xff\xbe\xfa^\xf5z\x9b\x1f\x006\xde\xa5\xd5\ +\x83\x9b\xd0\xfc\xf7\xd5\x9ej\x87a\x00\x80\x8ds\xf9&\ +6\xfe\xfd\xeb2\xc3\x01\x00\xeb\xef\xc2\xf9\xd9\xf7\xa2\x04\ +\x80=\xb9\x1c\x00\x00\xeb\xea\xe9\xd5w\x17\xa8\xf9\xef\xab\ +\xbb\x9a\xdd\x8c\x08\x00\xac\xb1\xa56\xf6n\xff\x95\xd6\xe7\ +\xf2\x15A\x00Xs\xbf\xb4\xc0\xcd\x7f_]l\x98\x00\ +`\xedlm}\x1f\xf2\xb3VuS\x9e\x18\x08\x83`\ +\xba\x0e\x86\xe1\xe2\xea\x09\x03X\xce'U\x17\x19.\x00\ +X\x1bk\xf9l\xff\xf5\xaek\x0d\x17\x00\x1c\xb9\xed\x03\ +j\xfe\xfb\xeaL\xc3\x06\x8b\xcd%\x00X|o\xb0\xcc\ +\x000=C\x9a\xfe\xdfW_5l\x00\xb0z?6\ +\xc0\xe6\xbf\xef\xe9\x80?b\xf8`q\xb9\x04\x00\x8b\xed\ +\xdc\x81.\xf7\x96f\xf7.\x00\x02\x00\xb0\x0a\xdb,;\ + \x00\xc0\xf4\x9c>\xe0e\x7f\xb6\xe1\x03\x01\x00X\x9d\ +\x9f\xb0\xec\x80\x00\x00\xd3\xf3\x14\x01\x00X\x0f[l\x02\ +Xh{\x1dc\x003\x00\x00\x80\x00\x00\x00\x08\x00\x00\ +\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x02\x00\x00 \x00\ +\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\ +\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\ +\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \ +\x00\x00\x00\x02\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\ +\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\ +\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\ +\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\ +\x00\x80\x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \ +\x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\ +\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\ +\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00\ +\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\ +\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\ +\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\ +\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00 \x00\x00\x00\x02\ +\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00\ + \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\ +\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\ +\x02\x00\x00 \x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\ +\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\ +\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\ +\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\ +\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\ +\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\ +\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \ +\x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\ +\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\ +\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\ +\x08\x00\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\ +\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x02\x00\x00 \ +\x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\ +\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\ +\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00\x02\x00\x00\ + \x00\x00\x00\x02\x00\x00\x08\x00\x00\x80\x00\x00\x00\x08\x00\ +\x00\x80\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00,\xb8\xa3m\ +\x82Q8\xb6:\xb7\xfa\xa9\xea9\xd5\xa9\xd5\x93\xaa\x13\ +\xaa\xbd\xd5\xdd\xd5M\xd5\xf5\xd5W\xaaOUWU\xf7\ +\xd9t\xe0\xf8\xe1\xf8\x01\xc3\xf3\xa2\xea\x0f\xab;\xe7\x1f\ +\xd4\x95\xd4\x1d\xd5\x07\xab\xf3l\xc6\x85\xb6w\xe0\x85\xe3\ +\x07\xb0F\xb6T\x17T\x9f_\xc3\x83\xf4U\xd5k\xe6\ +?\x1b\x01@\x00p\xfcp\xfc\x80\x05\xb3\xbd\xbar\x1d\ +\x0f\xd6\x9f\xad\xce\xb1\x99\x05\x00\x01\xc0\xf1\xc3\xf1\x03\x16\ +\xc3\xd6\xea]\xd5\x83\x1bp\xc0\xdeS}\xa0:\xdef\ +\x17\x00\x04\x00\xc7\x0f\xc7\x0f\xd87\xd0\x03\ +\xbc\x99\x00\x01@\x00\xd0\xfcWRW\x1b:\xf8\x81\x17\ +\x0d\xfc o&@\x00\x10\x004\xff\x95\xd4\x0b\x0c!\ +\xcc\xfc\xe1\x08\x0e\xf4f\x02\x04\x00\x01@\xf3_n}\ +\xc00B\x1d\xdb\xea\xde\xc7m&@\x00\x10\x004\xff\ +\xa1\xd6\xed\xd51\x86\x93\xa9{\xf1H>\xd0f\x02\x04\ +\x00\x01@\xf3w\x19`@\x96l\x82\x85\x08\x00cr\ +\xb9\x99\x00X\x97\xe6\xff\x8e\x91\xad\xd3O\x1bV\xa6\xee\ +\xbf\x8d,\xd5\x9b\x090\x03`\x06\xc0\x99\xffr\xeac\ +\x86\x96\xa9\xbbv\xa4\x1fn\xf7\x04\x08\x00\x02\x80\xe6\x7f\ +\xa8\xfa\xaa\xe1e\xean\x1b\xf1\x07\xdcL\x80\x00\x80\xe6\ +\x7f\xb0\xfa\xb6!f\xea\xee\x1d\xf9\x87\x5c\x08\x10\x00\xd0\ +\xfc\x0f\xf6\x9a`\x10\x00\x84\x00\x04\x00&\xd4\xfc\x05\x00\ +h\xfc\x97\x00\x84\x00\x01\x00\xcd\xdf%\x008\x80k'\ +\xf4\x81wc\xa0\x00\x80\xe6\xbf\xaf\xbeb\xc87\x97\xe7\ +\x00l\xbe\xeb'\xb6\xbe\xef0\x13\x00\x07l\xfe\xef\x98\ +\xd8:_g\xd8\x05\x80\xa9\xfb\xf2\x04\xd7\xd9\xc3\x82`\ +\xda\xcd\x7f\xaa\xc7>x\x98\xa1\xbf\x09\xd0=\x01\xeb\xcb\ +%\x80\xf17\xff\xa9~\xfe\x9fg\xf8\x99\xbaGUw\ +L\xf8 `&@\x00\xd0\xfc\xa7W\xb7\xe5e@P\ +\xd5\x07'| 0\x13 \x00h\xfe\xd3\xab\xdf\xb3\x0b\ +\xc0\xcc\x0b'~00\x13 \x00h\xfe\xa6\xffa\xb2\ +\xaetP0\x13 \x00h\xfe\x13\xa8\xcf\xd9\x0d\xe0\xe1\ +^\xe3\xc0`&@\x00\xd0\xfc'P\xaf\xb0+\xc0#\ +\xfd\x1f\x07\x073\x01\x02\x80\xe6?\xe2\xfa\xb4]\x01\x0e\ +\xec\x9c\xeaA\x07\x093\x01\x02\x80\xe6?\xc2z\xb0:\ +\xcb\xee\x00\x07\xf7\xef\x1c(\xcc\x04\x08\x00\x9a\xff\x08\xeb\ +\xddv\x078\xb4\xe3\x9a=\x1e\xd8\x01\xc3L\x80\x00\xa0\ +\xf9\x8f\xa5vU[\x1d\xde\xe1\xf0\x9eS\xdd\xed\xa0a\ +&@\x00\xd0\xfcGP\xf7T\xdb\x1c\xd6a\xf9\xde\xe8\ +\xc0!\x04\x08\x00\x9a\xff\x08\xea\x17\x1c\xcea\xe5.w\ +\xf0\x98|\x08\x10\x004\xff!\xd7;\x1c\xc6A\x08\x10\ +\x02\x04\x00\xcd_\xf3\x07\x84\x00!@\x00\xd0\xfc5\x7f\ +@\x08\x10\x02\x04\x00\xcd_\xf3\x07\x84\x00!@\x00\xd0\ +\xfc5\x7f@\x08\x98r\x08\x10\x004\x7f\xcd\x1f\x10\x02\ +&\x18\x02\x04\x00\xcd_\xf3\x07\x84\x80\x09\x86\x00\x01@\ +\xf3\xd7\xfc\x01!`\x82!@\x00\xd0\xfc5\x7f@\x08\ +\x98`\x08\x10\x004\x7f\xcd\x1f\x10\x02&\x18\x02\x04\x00\ +\xcd_\xf3\x07\x84\x80\x09\x86\x00\x01@\xf3\xd7\xfc\x01!\ +`\x82!@\x00\xd0\xfc5\x7f@\x08\x98`\x08\x10\x00\ +4\x7f\xcd\x1f\x10\x02&\x18\x02\x04\x00\xcd_\xf3\x07\x84\ +\x80\x09\x86\x00\x01@\xf3\xd7\xfc\x01!`\x82!@\x00\ +\xd0\xfc5\x7f@\x08\x98`\x08\x10\x004\x7f\xcd\x1f\x10\ +\x02&\x18\x02\x04\x00\xcd_\xf3\x07\x84\x80\x09\x86\x00\x01\ +@\xf3\xd7\xfc\x01!`\x82!@\x00\xd0\xfc5\x7f@\ +\x08\x98`\x08\x10\x004\x7f\xcd\x1f\x10\x02&\x18\x02\x04\ +\x00\xcd_\xf3\x07\x84\x80\x09\x86\x00\x01@\xf3\xd7\xfc\x01\ +!`\x82!@\x00\xd0\xfc5\x7f@\x08\x98`\x08\x10\ +\x004\x7f\xcd\x1f\x10\x02&\x18\x02\x04\x00\xcd_\xf3\x07\ +\x84\x80\x09\x86\x00\x01@\xf3\xd7\xfc\x01!`\x82!@\ +\x00\xd0\xfc5\x7f@\x08\x98`\x08\x10\x004\x7f\xcd\x1f\ +\x10\x02&\x18\x02\x04\x00\xcd_\xf3\x07\x84\x80\x09\x86\x00\ +\x01@\xf3\xd7\xfc\x01!`\x82!@\x00\xd0\xfc5\x7f\ +@\x08\x98`\x08\x10\x004\x7f\xcd\x1f\x10\x02&\x18\x02\ +\x04\x00\xcd_\xf3\x07\x84\x80\x09\x86\x00\x01@\xf3\xd7\xfc\ +\x01!`\x82!@\x00\xd0\xfc5\x7f@\x08\x98`\x08\ +\x10\x004\x7f\xcd\x1f\x10\x02&\x18\x02\x04\x00\xcd_\xf3\ +\x07\x84\x80\x09\x86\x00\x01@\xf3\xd7\xfc\x01!`\x82!\ +@\x00\xd0\xfc5\x7f@\x08\x98`\x08\x10\x004\x7f\xcd\ +\x1f\x10\x02&\x18\x02\x04\x00\xcd_\xf3\x07\x84\x80\x09\x86\ +\x00\x01@\xf3\xd7\xfc\x01!`\x82!`\xea\x01@\xf3\ +\xd7\xfc\x01!`\x92!`\xca\x01@\xf3\xd7\xfc\x01!\ +`\xb2!`\xaa\x01@\xf3\xd7\xfc\x01!`\xd2!`\ +\x8a\x01@\xf3\xd7\xfc\x01!`\xf2!`j\x01@\xf3\ +\xd7\xfc\x01!@\x08\x98X\x00\xd0\xfc5\x7f@\x08\x10\ +\x02&\x16\x004\x7f\xcd\x1f\x10\x02\x84\x80\x89\x05\x00\xcd\ +_\xf3\x07\x84\x00!`b\x01@\xf3\xd7\xfc\x01!@\ +\x08\x98X\x00\xd0\xfc5\x7f@\x08\x10\x02&\x16\x004\ +\x7f\xcd\x1f\x10\x02\xd4!B\xc0\x18\x03\x80\xe6\xaf\xf9\x03\ +B\x80\x06p\x98\x100\xb6\x00\xa0\xf9k\xfe\x00B\xc0\ +2B\xc0\x98\x02\x80\xe6\xaf\xf9\x03\x08\x01\xcb\x0c\x01c\ +\x09\x00\x9a\xbf\xe6\x0f \x04\xac \x04\x8c!\x00h\xfe\ +\x9a?\x0b\xe8(\x9b\x80\x05qE\xb5\xa5z\xb1MQ\ +\xd5y#\xd9\x1e[4\xbc\x87y\xe7\xbc\x000\x13\xa0\ +\x9c\xf9\x83\x19\x00\xb8\xa2\xfa~\xf5\x12\x9b\x82\x11\xd9\xe1\ +\xcc\x1f\x01\x00\x84\x004\x7f\x10\x00@\x08@\xf3\x07\x01\ +\x00\x84\x004\x7f\x10\x00@\x08@\xf3\x07\x01\x00!\x00\ +4\x7f\x10\x00\x10\x02@\xf3\x07\x01\x00!\x004\x7f\x10\ +\x00\x10\x02@\xf3\x87\x839z\xc4\xeb\xf6\xa8\xea\x19\xd5\ +3\xe7\xbf\x9e\x5c=n\xfe\xeb\xe3\xe7\xff\xfd\xb8\xea8\ +\xbbA\xef\x9c\x1f\xc0\x86\xe2\xb7\xab\xady\xb2\x1a\x8b\xf3\ +\xf9\x19Z\xf3\xdf\xe1\xf3S\xd5\xee\xea\xb6y\xddR\xdd\ +:\xff\xef[\xab\xeb\xaa]\xf3_\xef\xb3\xa9\x16\xd7\x89\ +\xd5\xf9\xd5oT\x1f\x9f\x0f\xd8\xfdy\xf4\xe8Jj\xc7\ +\x00\xc7}\x87qS>7>7\xeb\x5c\xf7\xcf{\xca\ +\xc7\xe7=\xe6\xfcy\xcfa\x13g.\xcej\xf6\xdc\xf8\ +?\xaf\xee\xb5\x93\xae\xcb\xbb\xe8\x87\xc0\xbb\x03\x94g\xfb\ +k\xfe\x1b]\x0fT\x7f1?f\xbe\xa4z\xb4\xb6\xbc\ +\xfeS\xfa\xaf\x9a\xa7\xb0\xddv@g4\x0ej\xca\xe7\ +\xc4\xe7dAj\xf7\xbc7\xbdj\xde\xabX#\xcf\x9a\ +\xa7\xaco\xdb\xc9\xcc\x04\x98\x09P\xce\xfc5\xff\x05\xaf\ +\xdb\xab\x0f\xf4\x83Wz\xb3B\xc7Womv\x03\x86\ +\x1d\xca\x19\x8e\x83\x9c\xf2\xb9\xf0\xb9\x18b\xed\x9a\xf7\xb2\ +\xe3\xb5\xf5\xc3;\xa9\xfa\xf5fw`\xday\x1c\xec\x1c\ +\xec\x94\xcf\x83\xcf\xc3\x18\xea\xd6yo;I\x9b\x7f\xa4\ +\x13\xab\x7fS\xddiGq\xd0s\xd0S>\x07>\x07\ +#\xad;\xe7\xbd\xce\xb7\x08\xaa\xa5\xea\xa2\xeaf;\x86\ +{\x02\xdc\x13\xa0\x5c\xf3\xd7\xfc'4#pi\x13~\ +\x18\xdfs\xab/\xd8\x11\x9c\x019\x08*\xfb\xbd\xfd~\ +\xa2\xf5\x85y/\x9c\x8c\xad\xf33\xca\x07\x0c\xbe\x99\x00\ +3\x01\xca\x99\xbf\xe6?\xf1z\xb0\xd9\xb7\x06N\x18{\ +\xf3\x7fv\xb3'*\x19tgD\x0e\x8a\xca~n?\ +W?\xa8\xeb\xe6=r\x94.\xaa\xee6\xc8f\x02\xcc\ +\x04(g\xfe\x9a\xbf:`\xdd3\xbf7`TS\xfe\ +\x7f``\x85\x00!@i\xfe\x9a\xbfZV}d\x0c\ +\x97\x04N\xabv\x1aL\xd3\xa4\x0e\x96\xca\xfel\x7fV\ ++\xaa\x9d\xf3\x1e:H\xdb\xf3@\x1f3\x01f\x02\x94\ +3\x7f\xcd_\xad\xb6\xee\xa8^8\xb4\x1d\xf3\x15\xae\xf7\ +\x0b\x01B\x80\xd2\xfc5\x7fu\xc4\xf5\xfd\xea\x9f\x0ee\ +\xc7|cu\x9fA\x13\x02\x84\x00\xa5\xf9k\xfejM\ +\xea\x81\xea\xcd\x8b\xbec^\xda\xec;\x8d\x06L\x08\x10\ +\x02\x94\xe6\xaf\xf9\xab\xb5\xab=\xf3\xe3\xd5B\xfa\x15\x03\ +\xa4\x84\x00\xa5\xf9k\xfej]\xeb\xb2E\x9c\xf6\xdfc\ +`\x94\x10\xa04\x7f\xcd_\xad\xfbL\xc0\xc5\x8b\xb2c\ +\xbe\xa2\xba\xdf\xa0(!@i\xfe\x9a\xbf\xda\xb0{\x02\ +^\xb3\xd9;\xe6\xb9\xd5]\x06C\x09\x01J\xf3\xd7\xfc\ +\xd5\x86\xd6\xee\xea\xbc\xcd\xda1O\xabn7\x08*\x0f\ +WQ\xf6C\xfb\xa1\xda\x8c\xba\xbdz\xe6F\xef\x98\xc7\ +W\xd7\xda\xf8\xcaL\x80r\xe6\xaf\xf9\xabM\xad\xeb\xab\ +\x137r\xe7\xfc\xb0\x8d\xae\x84\x00\xa5\xf9k\xfej!\ +\xea\x8f6j\xe7|\xb3\x8d\xad\x84\x00\xa5\xf9k\xfej\ +\xa1\xea\x17\xd6{\xe7<=\x8f\xf8UB\x80\xd2\xfc5\ +\x7f\xb5huOu\xc6z\xed\x9c\xc7U\xd7\xd9\xc8\xca\ +\x0dY\xca\xfee\xffR\x0bY;\xab\xad\xcb\xdd\xe9\x8e\ +Z\xc1\x0e\xfao\xabW\x06G\xee\xc5\xf3\x9d\xf4\x93\x03\ +Z\xe6O7{)\xc7K\x0c\xdf\xc27\xd2w\x0ep\ +\x99\xdfa\xe8X\x03\x8f\xaf\x8e^\xebc\xebs\x9b=\ +x@\xc2R.\x07\x187\xd3\xfe\xce\xfc\xd5\xe2\xd6\xfd\ +\xd5Yk5\x03\xb0T\xfd\xf7\xeaG\x85+\xd6\xd8y\ +\xd5\x96\xf9\xd9\xf5P\x5c1_\xe6\x17\x1b\xbe\x85\xf2N\ +g\xfe\xf0\xf7=\xfb'\xab\x0f\xcd\x03\xc1\x11q\xd7\xbf\ +2\x13`&\xc0\x99\xbf3\x7f5\xacz\xd3\x91\xee\xa4\ +?T}\xcb\x86T\x1bP;\x1c\xc4\x95\xfdF\xa95\ +\xab\x9b\xaa\x13\x8e\xe4\x12\xc0\xdb\x9a\xbd\xec\x07\xd6\xdb\x8b\ +sc +o\xa4\xa6\xfd\xe1\xc0Nl\xf6\xb5\xfd\xcf\ +\xac\xe6/?6\xcf\xfaW.\x07\xb8\x1c`\xda\xdf\x99\ +\xbf\x1aj\xddQ\x9d\xb4\x9a\x19\x80_\xad^&D\xb1\ +\xc1\xdc\x18\xc8\xe1\xb8\xe1\x0f\x96\xe7\xd1\xcd\xde\x1a\xf8\xbf\ +W\xf2\x97\x8e\xabn\x95\x9e\x94\x99\x003\x01\xce\xfc\x9d\ +\xf9\xabA\xd7\xad\xcd^\xe0\xb7\xec\x19\x80K\xaa\x0b\x84\ +'6y&`h\xf7\x04\x5c\x91{\x02\xd6\xbb\x91:\ +\xf3\x87\x959\xae\xfa\xdb\xea/\x96\xfb\x17vIMj\ +Aj\x873>e?P\xea\x88\xea\xda\xe5\xee\xb4\xdb\ +m,\xe5r\x80\xcb\x01\xa6\xfd5\x7f5\xaa:k9\ +\x97\x00\xde^\x9dc\xd6\x04\x97\x03\x5c\x0e0\xedo\xda\ +\x9f\xd1\xb8\xa7\xfa\xc4\xa1\xfe\xc01\xd5-\x92\x922\x13\ +`&\xc0\x99\xbf3\x7f5\xaa\xfa\xce\xbc\xc7\x1ft\x06\ +\xe0g\xab\x8b\x05%\xcc\x04\x98\x09p\xe6\xef\xcc\x9fQ\ +9\xbe\xba\xba\xba\xe1`\x01\xe07\xabg\xdaN\x08\x01\ +B\x80\xe6\xaf\xf93:GW\x7fr\xa0\xdf8\xb6\xd9\ +\x03\x03L\x95(\x97\x03\xd6\x87\xcb\x01\xa6\xfd\x95\xda\xcc\ +\xba\xabz\xd4\x81v\xe2\x9f\xb2q\x94\x10 \x04h\xfe\ +\x9a\xbf\x1au\x9dw\xa0K\x00\xbfX\xbd\xc8\x0c\x09.\ +\x07\xb8\x1c`\xda\xdf\xb4?\xa3uc\x07x4\xf0\x15\ +#O=\xf7U\x9fj\xf65\xc7\xd7Vgv\x88\x97\ +$\x803G\x0f\xf9a\xf4N\x9a\xf7\x82\xd7\xce{\xc3\ +\xa7\xe6\xbdb\xcc\x9f\xb7G\xbc\x1d\xf0\xc4\xea\xfe\x91\xae\ +\xec\x17\xab\xd7W\x8f\xb1\xaf#\x04h\xfep\x18\x8f\xa9\ +\xdeP]3\xd2\xcf\xdc\xbd\xd5\x09\x0f]\xe1\xf3G\xb8\ +\x92;\xabW7{K\x1b\x08\x01\x9a?\xac\xc4\x96\xea\ +5\x8d\xf3\xd1\xf8/\x7f\xe8\x8a\xfe\xfa\xc8V\xee\xf7\x9b\ +]\x1b\x06!@\xf3\x87#\xb1\xb5\xfa\xd0\xc8>\x7f\x0f\ +\xbb\xdf\xe6\xe3#Z\xb1\xdf\xb0\xbf\x22\x04h\xfe\xb0\xc6\ +~kD\x9f\xc1\x8f=t\xc5\xae\x1b\xd1\x99?\x08\x01\ +\x9a?\xac\x87\xb1\xcc\x04\xfc\xfd\xdb\x01\x8fm\x1c7\x00\ +^\x9bi\x7f\x84\x00\xcd\x1f\xd6\xcfq#9a\xbe\xaf\ +\xf9\x03\x81\x9e3\x92\x83\xcb\xab\xec\x9b\x8c\xc4\x18\x1f\x16\ +\xe4\xfb\xf2\x8c\xc5\x05#\xf9L\x9eV\xb3\xaf\xc8\x8d\xe1\ +\xab~\xee\xf6G\x08\xd0\xfca\xbdm\xa9\xbe4\x82\xcf\ +\xe5\xeb\x96\xaaSF0 \xef\x9e\xaf\x10\x8c\xc5o7\ +\xbc'\xe3\x1d\xc8;G\xb2\x1e\xb0\xcf\xdey\xcf\x19\xba\ +S\xaa\xde\xdf\xf0\xafe<\xd6>\x89\x99\x00g\xfe\xb0\ +A\x1e\xd3\xf0\x9f\x18\xf8\x9e\xa5\xea\xe4\x81\x0f\xc4g\xaa\ +;\xed\x8f\x8cx&\xe0m\x03\x5c\xee\x1d\xce\xfc\x19\xb1\ +\xbf\xab\xae\x1c\xf8:<~\xa9\xfa\xe1\x81\xaf\xc4'\xed\ +\x8bL \x04\x0c\xa9\x99\x9a\xf6g\x0a\xfe|\xe0\xcb\x7f\ +\xf2R\xf5\xf8\x81\xaf\xc4\x0d\xf6C&`\xc7@f\x02\ +v\xe4\xeb~L\xc3\xd0{\xcf\xc9U\x7f\xdb\xb0\xafc\ +l\xb3\x1f2!\x8b|O\x80k\xfeL\xc9\xd9\x03\xef\ +\x9d\x7fS\xb5{\xe0+\xe1\x06@\x84\x00\xcd\x1f6\xda\ +I\x03\xef\x9d\xbbk\xf8\xdfe\x04!@\xf3\x87\xcd0\ +\xf8\xfe)\x00\xc00]T\xdd\xbd\x89\x9f\xbd{\xaaK\ +\x0c\x03\x02\x80\x00 \x00\xc0\xc6\xfb\xc9\xea\xfaM\xf8\xdc\ +\xed\xaa\xce\xb0\xf9\x11\x00\x04\x00\x01\x006\xcf\xa3\xabw\ +U\x0fl\xc0\xe7mO\xf5\x81\xeax\x9b\x1d\x04\x00\x01\ +\x00\x16\xc3\xd9\xcd\x1e\x8c\xb5^\x9f\xb5OWg\xd9\xcc\ + \x00\x08\x00\xb0\x98^\xd5\xec)ek\xf5\x19\xbb\xa2\ +z\xa5\xcd\x0a\x02\x80\x00\x00\xc3\xf0\x82\xea\xf7\xab\xdbW\ +\xf1\xb9\xba\xad\xfa\xbd\xeay6#\x8c3\x00l\x19A\ +\x13\xf5\x1a`8\xb4c\xaas\xaa\x9f\xae\x9eS\x9dZ\ +=\xa9:a\xfe\xfbwU75{\xb2\xd9\x97\xabO\ +UW7\xbb\xa7\x008t\x00\x18t\xf3\x14\x00\x00`\ +b\x01`\xc9\xf8\x01\xc0\xf4\x08\x00\x00 \x00\x00\x00\x02\ +\x00\x00 \x00\x00\x00\x02\x00\x00 \x00\x00\x00Cq\xb4\ +M\x00\xc0\x11zrun\xb5\xad:\xbdzj\xf5\x94\ +\xf9\xef\xddX}\xa3\xfaZuM\xb3\xc7T\x7f\xd3&\ +\xdb|\x1e\x04\x04\xc0jl\xaf\xdeP\xbd\xacz\xc6\x0a\ +\xff\xee\xae\xea\x13\xd5\x7fn\xf6\xd4\xc9\xa1\x1a\xfc\xe3\xe8\ +\xbd\x0b\x00\x80\xe5\xd8Z\xbd\xb5\xban\x0d\x8f\xe1\xbb\xaa\ +_n\xf6Zk\xfd\xd3\xcb\x80\x04\x00\x80\x05\xb2T]\ +R}{\x1d\x8f\xe5\xdf\xaa\xde\xdc\xb0\xeeM\x13\x00\x04\ +\x00\x80\xd1:\xb5\xfa\xfc\x06\x1e\xd3\xaf\xaaN\x11\x00\x04\ +\x00\x01\x00`\xf3\x5c\xd8\xecm\x91\x1b}\x5c\xff^\xf5\ +z\x01@\x00\x10\x00\x006\xde\xa5\xd5\x83\x9bxl\xdf\ +S\xed\x10\x00\x04\x00\x01\x00`\xe3\x5c\xbe@\xc7\xf8\xcb\ +\x04\x00\x01@\x00\x00X\x7f\x17\xce\xcf\xbe\x17\xe5\x18\xbf\ +\xa7\xc5\xbd\x1c0\xe8\xfe\xe99\x00\x00\xec\xf3\xf4\xea\x8b\ +\xd5\x89\x0b\xb6\x5cwWgU\xd7/`\x00\x18,\x8f\ +\x02\x06`_?\xf8\xe8\x026\xff\xaa\xe3\xab\x0f\xebY\ +\x02\x00\x00k\xef-\xd5\xd9\x0b\xbc|\xdb\xab7\x19\xa6\ +\xb5\xe3\x12\x00\x00[\xab\xbf\xae\x9e\xb0\xe0\xcbys\xf5\ +\xb4\xea\xfb\x0b\xb2<.\x01\x000h\x17\x0f\xa0\xf9W\ +=\xa9\xba\xc8p\x99\x010\x03\x00\xb06\xaek\xf6\xc4\ +\xbf!\xd8Y=\xcb\x0c\x80\x19\x00\x00\x8e\xcc\xf6\x015\ +\xff\xaa\xd3\xaa3\x0d\x9b\x00\x00\xc0\x91y\x83e\x16\x00\ +\x00\x98\x9e\x9f\xb1\xcc\xd3\xe4\x1e\x00\x80\xe9\xfa\xb1\xea\xc6\ +\x01.\xf7\xde\xea\xc9\xd5M\x0b\xb0\x1cf\x00\x00\x18\x9c\ +s\x07|\xe2\xb7\xdd\xf0\x09\x00\x00\xac\xce6\xcb.\x00\ +\x000=\xa7\x0fx\xd9\x9fm\xf8\x04\x00\x00V\xe7'\ +,\xbb\x00\x00\xc0\xf4\xf9\xb1\xfa\xc1\xcb\x80\ +v\x8eh\xa0\xde>\x9f\x098\xce>\x0b\xc0\x11:\xbe\ +\xfa\x8f\xd5\xe5#Z\xa7\x87\xf5\xfc\xf3G\x94l\xf6\xd5\ +u\xd5k\xf3\xed\x00\x00Vn\xa9z]\xe3\xb8\xe6\xbf\ +\x7f\xbd\xfc\xa1+zb\xe3\xb8\x11\xf0@\xf5\xa5\xea\xc2\ +<,\x08\x80\xc3;\xa9\xfa\xf9\xea\xcb#\xed\x89\xf7V\ +'\xb4\xdf\xd9\xf1\x15\xd5\xf3G<\xa8\x0f\xcc\xd7\xf1\x93\ +\xf3D\xf7\xf5y\xdda\x7f\x07\x98l\xb3\x7f\xda\xbcN\ +\xad\xfe\xf1\xbc\x0f\x1e=\xe2u\xfel\xf5\xc2\xf6[\xc9\ +O\x8d<\x00\x1c]\xfd\xa3y\x01\xc0\x14}r\xdf\x7f\ +,\xed\x17\x00\x00\x80\xf1\xfa_\xfb\xfe\xe3\xa1\x97\x00\x8e\ +m6\x1d\xeea:\x000>wW?\xdc\xecA@\ +\x0f\x9b\x01\xb8\xb7\xfa\x9f\xb6\x0f\x00\x8c\xd2\x9f\xeek\xfe\ +\xfb\x07\x80\xaa\x8f\xd8>\x000J\x0f\xeb\xf1\xfb\x7fG\ +\xfe\x98\xea\xa6\xead\xdb\x09\x00F\xe3\x96\xeaG\x9b}\ +\xe5\xff\x803\x00\xf7W\x7fl;\x01\xc0\xa8\xfc\xd1C\ +\x9b\xff\x81\x02\xc0#\xa6\x08\x00\x80\xc1{Do?\xd8\ +crwU\xcf\xb0\xbd\x00`\xf0vV\xcf\xda\xff\xff\ +\x5c:\xc8\x1f\xfe]\xdb\x0b\x00F\xe1}\x07\xfa?\x0f\ +6\x03p\x5cuc\xf58\xdb\x0d\x00\x06\xeb\x96\xea\xc7\ +\xab{\x96;\x03\xb0\xbb\xfa\x0f\xb6\x1b\x00\x0c\xda\xfb\x0f\ +\xd4\xfc\x0f5\x03P\xb3\xb7\xe7}\xbd\xd9\xcb\x12\x00\x80\ +a\xb9\xb3\xd9\x8b\x8e\x0e\xf8\xd2\xbb\xa5\xc3\xfc\xc5\xf7\xda\ +~\x000H\xef\xee\x10o\xbc\xddr\x98\xbf\xfcC\xd5\ +\x0d\xd5\x13mG\x00\x18\x8c\x9b\xabS\xaa\xbb\x0e\xf6\x07\ +\x8e:\xcc\x0f\xb8w\x9e\x1e~\xd6\xb6\x04\x80\xc1\xf8\x97\ +\xd5\xe7\x0f\xf5\x07\xb6,\xe3\x87,\xcd\x7f\xc8\x99\xb6'\ +\x00,\xbc\xab\xab\xe7U{\x8e4\x00Tm\x9b\xff\xc0\ +\xa3mW\x00XX\x0fT\xe7V_8\xdc\x1fP=\xd7\xf8\x030A\x9fo\xf6\xfd\xfek6\xe3\ +\x1f_\xda\xc4\x15\xbf\xa6\xda\xdel\xca\xe3F\xfb\x01\x00\ +\x13q\xf3\xbc\xf1\x9f\xbbY\xcd\xbf\x16c\x0a~g\xf5\ +\xc1j\xf7|V`\xab}\x03\x80\x11\xba\xa3\xfa\xcd\xea\ +\x8d\xd5\x95\xcd\x1e\xef\xbbi\x16\xed\x99\xfd\x8f\xa9.\xad\ +\xfeE\xf5x\xfb\x0a\x00#pK\xb3\xeb\xfc\xef\xad\xfe\ +nQ\x16jQ_\xda\xb3\xb5\xba\xa8\xfaW\xd5i\xf6\ +\x1d\x00\x06hg\xf5\xbe\xea?U\xf7,\xda\xc2\x0d\xe1\ +\xad}\xcf\xaa\xfey\xf5\xa6\xea\x89\xf6'\x00\x16\xd8\xed\ +\xd5\x9f4{\x98\xcfg\x17yA\x87\xf4\xda\xdec\xaa\ +\x97\xcd\xc3\xc0\xf9\xd5\xf1\xf63\x00\x16\xc0\xdd\xcd\xde}\ +\xf3\x91\xea\xcf\xda\x80\x87\xf8L-\x00<\xd4\xd1\xd5\x19\ +\xd5K\xe6\xf5\xc2\xeaX\xfb \x00\x1b\xe0\xc1\xeaK\xd5\ +'\xe7\xf5\x99fo\xed\x1b\x94-#\x19\x8c\x13\xe6!\ +\xe0\xdcf\xf7\x0c<\xabz\xfa|\xd6\x00\x00V\xeb\xfe\ +\xea\xaf\xaak\x9b]\xd3\xff\xdc\xbc\xe1\xdf5\xf4\x15\xdb\ +2\xe2A;\xa6:e\x1e\x08N\xa9\x9eP=\xae\xd9\ +\xeb\x89\x9f0\xff\xf5q\xd5q\xf6o\x80I\xda]\xdd\ +V\xdd\xda\xecI\xb5\xb7\xce\xff\xf7w\xaa\x1b\xe6\x0d\xff\ +\x86\x062\xa5\xbfR\xff\x1f\xa6\x86\x8a%{\x22\x02\xab\ +\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x05E\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x07+3\x9aE\xa5\xeb\x00\x00\x03CIDA\ +Tx\xda\xed\x9a\xcdK\x15Q\x14\xc0\x7fj\x9a\x92\xda\ +\x07Y\x9bD\xc2\x85!aQ\xb6\xa8\x90\x0c\x93\x5c\xa4\ +\x10D\x8b\xd0]\x91m\x12\x8a\x08\xa2\x85\x1b)\xa4?\ + Z\x05VD \x05}\x91Q \x11\xb9\xb0\x85\x94\ +\x0b+#K\xe8\xe3YF\x85e\x99\xaf\xc5\x9c\xa9i\ +\x98;\xf7=\x93\xbc\xf3\xe6\xfe\xe0\xc2\xe3\xdd;g\xe6\ +\x9c\xb9\xf7\x9cs\xcf\x5c\xb0X,\x16K|\xc9\x99\x05\ +\x19\xb9@%0)-V4\x00o\x80$0\x01\x1c\ +\x8d\x93\xf2\xdb\xe4\x8d'=m\x1a\xa8\x8d\x83\xf2\xeb\x80\ +O>\xe5\xddv2J\x8ad\xcf\xe0\x9ar\xe0\x06P\ +\xa4\xe8\x1f\x8d\x92\x01\xb2<\xbf\xe7\x03k\x81\x0f\xc0S\ +\xc5\xf8\xe5\xc0}1B\x10\xaf\x81\x0a\xe0s@\xdf\x22\ +`\x8d8\xcd\xb9\xe6-0(K\xf6\xf7\x94\x1e\xf6L\ +\xe3n`\xa1\xef\xa2\x22\xa0_1\xed\x93\xb2$\xd6+\ +n\xd8\x16\xe0/\xe6\xba\x0d\x00e\xee\x03\x0e\x04\x0c\xe8\ +\xf3\x18!\x0f\xe8\x09\x116\x09\xd4+\x94_\x05L\x19\ +\xa6\xbc\xf7ES\x122\xa0\x0fX\x0c\x5c\x08\x193\x0d\ +\xec\x09\x99n\xfb\x0cU>)\xcb\x9d\x1c\xe0c\xc8\xa0\ +\x84F\xc8!\xcdz\xab7\xd8\x00\xfd\xeeC\x1e\x9c\xa1\ +\x80S)F\x9a\xbb\x06*\xff\x03h\xf4F\x81N\xe0\ +H\x1a\x9e\xf4<\xd0\x22\xc2RI\x97\x9b\x81j`\x9e\ +\x01Q`\x0c\xb8$\xbe\xef/:R\xb4\xde\x1d\x09\x9b\ +\x19IG\x0a\xeb\xa60\xd3S]\x95\x11\x9eI2\x14\ +\x0b:$\xc4y\x95/\xcf4%\xb34\xfd\x9b\x80:\ +\xd9\xf2^T\xa4\xb8\x16\x8b%\xde5\xc1j`7\xb0\ +D\x1ce\xac8\xe1\x8b\x14=\xb3d\xd4Hp\x5c\x91\ ++\xb4\xc4A\xf9\xbd\xbe7\xefm\x9d\x99\xae|\x93\xec\ +\xa4T\xa9\xf2\xae\xa8&BU@#0\x0e\x9c\x93\x12\ +\x97\x9f\xcd\xc0m\xa0@!\xef\x1eNY|:\xe0>\ +M\xc0\x06Cv\x83\xef\x80+\xc0s\xf7\x8ff\xdf[\ +\x1d\xc5)`z\xa9\x04\xde\x87\xbc\xf9A\x89\x04AF\ +\xbel`=`\x02\xd8\xea\x16,\x82\xaa>c8U\ +b\x80\x15\xc0\xcb\x10a\xaf\x80R\x85\xb5\xb7\x18\x5c\x11\ +z\x00\xb0,d\xc0\x98X\xe9\xb1\xa6\xae\xb6:d\xba\ +\xed7\xd8\x00\xe3\xeeC\x0e\xcdP\xc0W\xa0F\xb3\xde\ +\xaaB\x22\xc6\x5c\xb7\xeb\xeeC\xd6\x92~\xdd~\x0a\xd8\ +\x99\xa2\xd3i\x07~\x1a\xa6\xfc0P\xe1\x8d\x02;p\ +\xea\xe4y)*u\x008\x9d\x86\xe7-\xc3\xf9\x00c\ +B\x14H\xe0\x94\xfc\xbf\xf9;\x1adZ\xeb\xac\xd7\x9e\ +\xc9\x89\x8e\xce\x08g\xe2\x90\xea\xaa\x8cp\xd5\x90)\xfc\ +_\xd8\xce\x9f\xd3\x1fI\x9c\xef\x00\x05q\xdb\xee.\x00\ +6\x02+m\xe9\xc4b\xb1X,\x96\x8c#K\xb3\x8d\ +m\x95\xbd~\x02\xe8\x95\xcd\xcf\xf78\x18\xa0\x0e\xb8\x06\ +\xe4\xfb\xfe\xbf%\xbb\xc6)\x8d\xdc\xa5\xc01I\xa2r\ +\x0d\xd4;\x81s\xf0\xabK5\xe0I\xc8fHW\xf7\ +\xcf\x03\x1e\x19\x5c\x05\xf2\xb6\xb6 \x05J4\x17ui\ +\x0cP\x17\x11\xe5\x93\xc0P\xb6\x22\xff\x0f#_\xd3_\ +\x1c!\x17\xb00\xc8\x00#x\x8a\x85\x01<\xd4\x08\xed\ +E\x0e F\x80nU\xc7a\xc5\x94\x19\xc199\xaa\ +\xa3\x86\xe0\xe3\xb7&}\x138\x0b\x14\x87\x85\xc1V\xf1\ +\xe4\xa58\x1fMn\x8a\xd3x\x91\x86\x85\x0b\x0d\x8d\x02\ +_D\xa7\x94(6T\x09\x8b\xc5b\xb1\xfc+\xbf\x00\ +\xd6\x169\x86\xf8\xf4L\xa4\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x04\xa3\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x079!\x11\x08\xa4p\x00\x00\x02\xa1IDA\ +Tx\xda\xed\xda\xcd\x8b\xcdQ\x18\x07\xf0\xcf\xbc,\x14\ +\x0bo\xe3%\x14\x8a\xa64\xd1\x94\x85\xad\x10y\xc9\x8e\ +\x99\x85\xff@\x11){\x0bi\x94bC\x16S\x16V\ +2\xc6\x14\xb2\x91\x84\xb2\xb03\xa2H^J\x0c\x8d\x94\ +\xc1\xbd\xae\xc5\xfcnM\xd3\xef\xde\xb9\xbf\xfb\xd6\xef\x9e\ +\xfb\xfb\xd6\xb39\xf7\xde\xd3y\xbe\xe7y\xbe\xe79\xcf\ +=d\xc8\x90!C\x86\x0cm\x8b\x8e\x98\xb1-8\x88\ +\x8d\xe8\xa9b\xceI\xbc\xc1\x1d<@\xa1U\xc8\xe8\xc1\ +H\xb4\xe0z\xd9\x13lh\x05\xe7WE\xbbVh\x80\ +M`[\x9a\x9d\xef\xc4\xd3\x069_\xb4\xc94\x930\ +\xd0`\xe7SMB\x07\xc6\xb0w\xd6x\x01w\xf1\xbe\ +\x8a9\x97\xe3@\x09\x81\xfd\x81C\xd1\xdc\xa9\xc1\xa7\x98\ +\xdd\x1a\xaaq\xceA\xe4JDB\x0e\x17\xb1&-\x11\ +\x90\x8ft`&\x0e\xe2V\x1dR\xeb\x1a\xbaJ|^\ +\xc0\x0b\xbc\xc5\xaf*\xe6\xff\x82\x97\x18\xc5\xbbZ\x16\x1a\ +\xb7K\xfb\xea\xa8/\xb9\x06kK\x0e\x97\xb1 \x8d\x04\ +\xc0n|k\x82\xc8>\xc7\xa24\x12 *\x86\x1e5\ +\x81\x84\xb1\xb4\x12P\xc4\x01\x0a\x0a\ +\x0a\x0a \x0a \x0a \ + \x0a \x0a <\ +g\x0a inkscape:\ +groupmode=\x22layer\ +\x22\x0a inkscape:\ +label=\x22Image\x22\x0a \ + id=\x22g1\x22\x0a \ +transform=\x22trans\ +late(-452.00522,\ +-236.6526)\x22>\x0a \ + \x0a \ + \x0a \x0a \x0a\ +\x0a\ +\x00\x00\x08z\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x087 \xf3\xd0\xfeU\x00\x00\x06xIDA\ +Tx\xda\xe5\x9bilUE\x14\xc7\x7f}m\x91\xc5\ +\xb2\xb5\xa9l\xc65,\xd5\xa8\x80\xa0b\xdcE\x8c\x8a\ +Q\x11\xc5\x0d4\x8a&T\x14d\xd1\x0f\x04\xfd`\x22\ +\xd1(X\xc1DDbD\x05EP\xf9`\x5c\xa8\x86\ +\x04\x03\x08(\x82\x82,bQ\x01\x15\xfa\x84\x0a-\x8b\ +m\xfdp\xcfK.\x8f{\xe6\xce]\xde{\xf4\xf9O\ +&M\xef\x9b93g\xb63\xf3?g\x0a\xc8<\x12\ +@O\xa0?p\x01P\x0et\x06J\xe5/\xc0\x01\xe0\ +o`?\xf0\x13\xb0\x11\xd8\x04\xac\x07\x1a\x03\xd67\x0a\ +\x18\x07\xb47\xe4i\x02\x96I\xbe\x8c\xa0\x0b0\x16\xa8\ +\x16\xa5\x9aC\xa6$\xb0\x10\x18\x0d\x94Y\xd4[\x06\x1c\ +\x0d \xff\xb58\x95.\x96\xde_\x0a\xfc\x1bAi-\ +\x1d\x02\xde\x01.7\xb4\xe1\xb4\x802\xdf\x8dC\xf1\x22\ +\xe0~\xe0\xe7\x0c(\xad\xa5E@\x1b\xa5=3e\xd9\ +\xf8\xc9\xa8\x05\xfaDU~(\xb09\x8b\x8a\xbb\xd3T\ +C\xbb\xda\x03gJ\x9a\xedQv\x1fpa\x14\xc5;\ +\x01o\xe5H\xf1T\xfa\xd2\xa2\x9d\x13<\xca\xd5\x01\x97\ +\xb8\xa7oP\xdc\x00\xcc\x01\xba\x06(\xb3\x0fX\x0e\xfc\ + 3\xa6F\xbe\xd5\xc9\xef\x1d\x80\x93\x81\xb3eZ\x9e\ +\x0f\x5cf\x98\xe6\x00\x7f\xfa\xd49\x16x!\xed\xdbA\ +\xe0F`E\xd8\x91\x1fo\xb9\xbe\x9a\x81_\x80g\x81\ +~@a\x88\xba\xda\x00C\x80\xb9\xd2p\xb7\xecz1\ +\xa9\x1a\x1e\x16S\x97^\xe6\xea(\xb6|F\x80\xa9y\ +\x1dP\x10\xa3\x85\xe9\x08\x8c\x01\xde\x04f\x01\x15\x86\xbc\ +#\x95A:\x22f5\x09\xfc\x05|\x02\x9cjSy\ +!\xf0\x9e\x85\xe2\xdf\xcb\xb4\xcd%\xca\xc4\x5c\xda\xee#\ +sl\x84\xbe\xe2#\xe400)\xe4~\x127N\xf7\ +\x98\xfa\xa6\xb4\xc0O\xe0$\x1f\x01\xdb\x81\x01\x9cXx\ +\xc2\xf2\xf4\xb9\x03\xe8k\x12t\xab\xcf\x86\xf7\x8d\xe5\xf1\ +4,F\x8a\xc5H\x1a\xd2^`\xb1\xdc/\xdch%\ +\xa6ZK\x1d\xfd*/\x07\xf6\x18\x94\xaf\x16\xb3\x95)\ +\xb4\x93\xa5e;\x95\x17\xc6\xdd\x80E\x86\xcaVfX\ +\xf9\xd4\xae\xdf\x18\xa0\x03>\x8e\xb3\xf2\xbb\x0c\x15m\x91\ +kl60\x05h\xb0\xbc1\x9e\x1bW\xa5\xad\x81\xdf\ +\x95\x8a\x1a\xe4\x84\x96M\x14\xbb\xd6\xed4\xe5L?0\ +\xce\x0a\x1f7\xf4\xf4\x98\x1c\xee\xec\xe3=\xda\xf3\x0f0\ +\xc8\xa2\xec\x03\xc0\xb7b\xb1f\x00m\xb5\x8cm\x81\xdd\ +\x8a\xf2+\xe44\x98\x0b\x8c\xf1\xb0\xed\x07\x81+,\xca\ +\xde\xed\xa1\xcb\xdbAz\xb9Y6\xa3\xbe9R\xfe!\ +\x0f\xe5\x1b\x80k-\xcb/Ut:\xc7+\xf3:%\ +\xf3\xe2\x1c)\x7f\x8f\xc5\x99>)VI\xbb\x1bT+\ +:\xbd\x9c\x9e\xb1\x8fa\xed\x0f\xcc\x81\xf2%r{\xb3\ +5\x83\xda =m\xb0\x1cmp\xad\xeb\x11\x8a\x80\xb5\ +r\xe2\xcb6\x8a%\x05\xc9\xef\x85\xb9\x0a\xab\xdc\x09\xb8\ +\xc6\xfd\xe1G\xa5\xa7\xc6\x91;\xdc\x0b\xec\xb2\x18\xfd-\ +B\xb9kX\xa2\x94\xab\xc2\xc5\xc6h7\xa8\xee\xb4|\ +\x8cRt\xdb\x9c\xcap\x95_\x86\x16\x8e.\x86\x01.\ +O\x18\xa6\xcf\xb2<\xe9\x80?d\x89{\xa1O\xc2`\ +\xe3\xd7\x93?\xd8\xa0|\xef\x9d@gw7\xe7Q\x07\ +lR\xbe\xf7,2\xdc\xee\xb6\x1b\x04v\x95cf\x12\ +\xc7\xbdtX\xc9\xd7\x1d\xb8\x13\xc7\x0b3_\x0e16\ +8\x03\x18\x0e\xfc\x06\xbc\x8f\xee =\x0b\xb8M\xf2-\ +4\xe4\xabQ\xbewB\x0a{m\x10\x9d\x0dJ\xd5\xba\ +\xf2\xad\xc7\xe1\xf3\xd31Tnkn\x12\xc5\x86)\xae\ +H;\x04-\x07\xba)\xbb{\xbd%\xbfw\xb3\x89H\ +\xf1:q5\xa1s\xf9S\xf0&F\x97\x00\xcf\x03/\ +\x02_+\x15\xf6\xb3\xe8\x80\x99\x1e\xe5\x0e\x08I3M\ +ntk\x03\x9am\xcd\xd2}\x16\x86\xc9m\xf2\xf8\xd6\ +JF|h\x88\xb26y\xda\xc9T\xf7C\xb3\xf2]\ +\x9by\x8da\x96@7Y\xfbA}y_Yvp\ +\x05\xc7{\x82\xa2R\xdc\xc3\x942\xf3\x12\xa2\x8c\xbaA\ +x`\x17\x0e\x15\xbe.\xc0\xacY\x00\xdcd\x99w\xa3\ +\x10\x1d\xdb\x02\xc8\x9f\x05\xdcg\xf8]\xdb\xe8k\xc1q\ +ey\xf5\xce`\x8b\x0b\xc8ht\xf7x\x93\x10)\xd7\ +G\xa0\xe7\xc6\xe3\xf0\xf7\x1aOQ\x0d\x5cj!\xeb9\ +E\xc6\xd4\x22a\x81\xbc\xd0\x0b\xf8\xc2 \xf4(\xf0\xba\ +\xa4\x9e2+\xca\xa5a\xbbe#\xdc\x15\xc1v\x1f\x02\ +\xa6K:OR\xb9\x98\xd2\x9db\x1d\xf6X\xca\xeae\ +\x98\xcdLTzgv\x1e\x1d\x84\xb6):\xf6\xff?\ +\x5c\x86z\xa0\xfb4O\xf2\xbb\x0e\xf7\xc8\x83\x0e\x18\xa9\ +\xe8\xb6:\xc5\x08\xed\x97\x9d\xd7\x0b\xb7\xe7A\x07h:\ +\xacr\xff\xf3\x8c\xa9\x97Z0:\xa3\xfb\x18\x8f\xa1\xd5\ +sE\x8af\xda\xd70Y\xd1i\xa7W\xdd\xdf)\x99\ +?\x8c\xb9Q\x05\xc0#r\x9e?\x8c\x13(\xf5i:\ +I\x19\x03Z\xa3;z\xa6{\x15\x18g8p\xf4\x8f\ +\xa9Q\x858\x14\xb6vp\x8a\x93\x84\x9d`\xa8\xc73\ +\xc0\xca\xe4\x1a[\x19\xd3t\x9d\xecs\x9eo\x04.\x8e\ +\xa1\x9en2\xb3\xbc\xea\xf8\xc8T\xd0\xe4\x1c\xad\x8c\xa1\ +a\xdb\x89)p\xc9\x07\x8b\x82\x8e\xbe{\xdd\x98\xdc\xe3\ +Q|\x84%\x96\xb7\xba5\x11\x95\xaf\xc4\x1cc\xec\x8b\ +\x11\x06\x01[\x09\x1f\x17\xd4\x16\xbb\x08\xae\x95\x11\x94\x1f\ +\x84\x1e&w@a\xae<\xf1\x81\xa1\x81\xab\x08\x1f\x22\ +\xb3\xc1\xa2\x03\xaaB\xca\xaeH\xa3\xea\xd2\xd3\xa3A\x84\ +\x95\xe3DS\x9a\x82\xa4JB4\xf2A\x1f\xe5\x1bP\ +\x5c\xd7>\xe8m vR\xd1\xab\x81#Wo\xc1\x1c\ +\xa8\xb4\x9a\xe3\xc3\xd3l\xf0\x92\x22\xaf^\x98\xe0\xa0\xb8\ +\x08'\x5cNk\xe7^\x9c\x00\xcaP\x98\xe83b5\ +\xd2\x80\xa0\x18,\xcbl+N\x88\xed\xab2\x8aaf\ +\x94\xc9\x8d^\x8f]\x18\x8d\x11U>\x9dp\x04x\x8a\ +`\xee\xec\xa8(\xc5y>\xe3w\xa6\x18\x16\xd7\xe9m\ +\xbe\xc5\xe6\xb5\x01\xb82\xc3\x8a\x17\xe1\x84\xc2\xef\xb5P\ +\xbe2\xce\x8a\x13\x86\xb5\x9b\x9e\x96\x09\x0f\x18g\xb8|\ +kQ\xdc\xe6]R\x03pG\xa6F\xe01\xec#8\ +w\x08\x199\x80p\x0f&\xdaIG\xce\xe5X\x0f\x93\ +\xdfC\xa8@!\xfbaFi\x08\xf0\x06\xc1\x82'\xea\ +\x84$u?\x99I\x0a\x19S\x88C\xc1\x97\xe1\ +\x9bk\xc6\x89\x03\xac\xc85\xed\x94\x90\x03\xcc\x96,*\ +\xbe\x9c\x08\x0f\xa02\x85bY\x83\x9f\x93\x99\xa7\xb3u\ +\xc0\xbc,\x98\xdaXp\x8a\x5c>\x96\x12\xed\xf1\xf4N\ +\x1c\x1f\xfep\xcco\x08#\xf1s\x99F\x01\xc7?\x9f\ +O=\x9d/\x95\xd9R+)\x09\xfc*\xfc\xe4\x1at\ +\xb7]l\xf8\x0fW\xe6\xe5\x86qH_\xe8\x00\x00\x00\ +\x00IEND\xaeB`\x82\ +\x00\x00\x04\xa8\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x07,:\xac\xd8\x8b\x88\x00\x00\x02\xa6IDA\ +Tx\xda\xed\x9b\xcbj\x14A\x14\x86\xbf\x1e\x07\x0d\x8d\ +\x0a:\x91\xa0.\x8c\xa0\x06]\xc4\xe4\x01\x5c\x04\xd4W\ +\x90l|\x0d_!\x0b!.\xc4\x07\x10'q\xa9x\ +Yi\x96.\x12HB\xc4\xa8I0q\xe1\x05\xe2\xc2\ +\x95F43.\xac&\xe3\xd8]]3Xg\xa6.\ +\x07\x0af\xe8\xa9\xa2\xff\xafO\x9d\xaa:='!\xdf\ +.\x02\x93\xc0e\xe0\x140\x88\x9b\xf6\x05x\x0f<\x03\ +f\x80\x95\xb2\x0e\x83\xc0,\xd0\x00\x9a\x9e\xb5\x06P\x07\ +jE\xe2\xcf\x01\x1b\x1e\x0aoo\x1bJ\xeb_V\x03\ +\xd6\x03\x10\x9f\xb5w\xc0\xb1V\x003\x01\x89\xcfZ\x1d\ + Q\x01oI}\x0e\xc9\x9a\xc0XUE{\x9d\xf8\ +\x1d\xe0\xa3\xa3\x22O\x00\x03\x05\xd7\x12\xa5\x9d\x05\x8d\x9b\ +\xdc\x06\xf6;\xfc\x94\x0f\x00w4\xfa\xe6\xb3\xb52\xef\ +\xe2w5\x80\xeb6\xa0\xb4\xe4i\xdcFCg\xdd\xa3\ +\xf9^\xb8\xc2UJ\x82\x84O\x01/\xd7*\x04n\x11\ +@\x04\x10\x01D\x00\x11@\x04\x10\xb0U\x1d\xbc\xe7\xab\ +\xc0%u@\x9b\x05\xbe\xfe\x8f]R^[\xeb3\xe1\ +)\xf0\xa0\xed\x1e?\x01c\x06}\xd74:\x9d\x00\x90\ +\x02s\x05\xf7\xf9\xc2w\x00:\xf1Y\xb2\xf3H\xb7\x00\ +\xfa=\x08\xa6\xc0#`B\xf3\x9b\x9f\xc07\x1f\x83`\ +\x0a<.\x11\x0f\x7f\xf2\x99?|\x0b\x82en\x9f\xb5\ +U4y~Wc@\x0a<7\x10\xff\x068n8\ +\xa63\x00l\x88\xb7\x0e\xa0\x0a\x5c\x01\xae\x03g\x84\xdc\ +~\xa8\xc3\xb1\xad\x01\x18\x06\x96[\xfa\xfc\x02n\x02\xfb\ +,\x89\x7f\xd5\x85x\xab\x00\x9e\x16\xf4\xbd\xdb\x01\x04\xdb\ +\xe2\xad\x018\x04\xecj\xfa\xdf7Xfm\xcdy\x11\ +\x00\x07K\x00\x94A\x90\x12ou\x0a<1\x10\x907\ +\x1d$\xdc^\x04\xc0i\xe0s\x87\x10\xa4\xc5[_\x06\ +G\xd4\xd9\xbci0\x1d\x0e\x0b\xba\xbd\xe8F\xe8\x82\xa1\ +'l\x0b?y\xd1\x9d\xa0\xa9'H>y\xf1\xad\xf0\ +\x08\xf0\xa1\xcf\xc4\x8b\x9f\x05\xba\x81`S|O\x0eC\ +\x9d@\xb0-\xbeg\xa7A\x13\x08\x12\xe2{z\x1c\xd6\ +A\x90\x12\xdf\xf3|\xc0y\xe0mN&w\x089+\ +\x04 \x91\x13|\x0d\x8c\x02\xd7\x80\xb3\xc0\x22\xf0Pe\ +s\xfb\xc2\x5cy1b\xc5\x03\xe2\xcb\xd1\x08 \x02\x88\ +\x00\x22\x80\x08 \x02\x88\x00\xf2\xcc\xa7\x02\x0a\xad\x96\xa2\ +4U\x10\x7f\x97\xaf\x00[\x9a\x8e\xd3\x14W\x5c\xb8\x22\ +\xfe\x96F\xc3f\x02L\x0174\x83\xb8\x5c2s\xb2\ +\xc4\x8b\xa7\x12uR[&\xbc\xa2\xa9\x060\x9e}\xa9\ +\x13^\xd9\xdc\xbdV\x1aG\x09\xafp\xf2\x9fz\xe8\xa0\ +Kg3\xab\xa9\xe9\xe0c\xf1\xf4\xaer\xfb\x9a\xc9\x06\ +a\x94\xbd\xf2\xf9a\xdc.\x9f\xdfb\xaf|\xfee\xfb\ +\x0f~\x03\xc0t\x81\xc7\xa5\xa4\xc4=\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x05F\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x0b\x00\xbbM\xa7b\x00\x00\x03DIDA\ +Tx\xda\xed\x9b\xbdNTA\x14\xc7\x7f\xbb\x14B\xdc\ +\x8d\x82D\x11\xac\x84B%\x81\x84\x0f-\xb40$t\ +\xda\x88>\x86\xf1\x054*/\x80\x1bx\x05@\x0b5\ +\xd1j\x1b\xa3\x05\x98 kc\x22F\x14\x1a\xb6X\x15\ +m\xc8B\xa3X\xdc1Q\xdc\x99;w\x98\x99\x1d\xe3\ +\x9cd\x9as\xef=\x1f\xff\x999gf\xf7\x9c\x1cn\ +(\x07\x0c\x00\x17\x81a\xe04\xd0\x0d\xb4\x03m)\xdf\ +n\x03\xdf\x80*\xb0\x02T\x80\xe7\xc0\x1b`\x97\xc0\xa9\ +\x1b\x98\x04\xd6\x84\xb16\xc7G\xe0.p\xe0\ +>\xe9\x0d\x13S>\xf6_\x0bI{\x8aN\xcb\xcc\xb2\ +\x88\xc6\xe3\x22'\xeb\x5c\xa0\x8a\xe2\xddq\x92\x82\xe7\x0a\ +z-3\x0f\xf1\xd8<\xd5\xaa\x09\x82\xcf\xa6\xa9\x03\xbe\ +\xd3P\x8b\xc6v\xf01\xa6hB\xdb\xdc\xef4\x91\x92\ +\x1d\x5c\x8d\x9a\x8f\x80\x97%E\x96\x90W\x95\xda\x1cu\ +\x91\xe7\x0f\x87\xf8\x0bS\x97\x08\x5c\xab\x0e\x1c\x7f/\x02\ +\xaa\xd5\xb3\x86\xcbR\xb7~\x92\xe6\xc7!\x92F\xc8\x1e\ +q\x88\xd1i\x9f\xdf\xe4\xcf\xf6\xf9g\xc0[\x17F\xfe\ +\x04\x94\x0e\xd6\xbex\x0b{\xd6\x00\x00\x00\x00IEN\ +D\xaeB`\x82\ +\x00\x00\x06t\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x089%\x1d9'T\x00\x00\x04rIDA\ +Tx\xda\xed\x9aMhTW\x14\xc7\x7fQ\xc1\x8fh\ +\xe8$\x11\x8d\xa2\xb1Z\x22R\xa5\xb6D\xdd(Ub\ +c?Q\x0anD\xd0n\xdaeU\x84B\xdd\xd8\x16\ +\xa4\xf1\xa3T#\x05\xd1\x8d\xb4\xd4\x16$\xad\xb5M\xc9\ +\xa2\xed\xc6\xa2\xa5\xa9\x0d\xba\x10\x89\xa0\xd1R\x1a\xa2\xa3\ +\x91PM\xaa\x99.\xde\x990N\xde9of\xf2\xde\ +\x9b\xb9I\xfe\xf0\x163\xdc{>\xfe\xef\xdd{\xcf9\ +\xf7@\xf10\x19\xd8\x07t\x01\xb7\x80\xfd\xc0T\xc6\x10\ +\x0e\x00\xa9\xac\xa7y,\x11\xf0\x8f\x0f\x01\xbd\xc0\xc4\xb1\ +\xe0\xfc4\x1f\xe7\xd3Ou\x9c\x86L`\x8cc\x9c\x80\ +q\x02\xc6\x09(\x08\xd3\x81=\xc09\xe04\xb0\xb4\x08\ +\xb6/\x13\xdd\xe7\xc4\x96\xe9q)^\x08\x5c\xce\xda\xb9\ +\xef\x02\x8bb<\x05\x16\x89\xce\xccy\x97\xc5\xb6H\xb1\ +\x0e\xb8\xad\x18\xfeI\x8c\x04|\xaa\xcc\xed\x01\xd6F\xe5\ +\xfc\xeb@\xbfa\xf8\xe9\x18\x09h1\xe6\xf7\x03\xaf\x85\ +\xed\xfcz\xe0\x81\xa14\x05l\x8b\x91\x80\xb7\x02ly\ +\x004\x84\xe5\xfc*\xa0/@\xe1\x91\x22D\x82\xcd\x01\ +6\xf5\x89\xed#B%p\xddP\xf2\x08x\xaf\x88\xa1\ +\xf0\xbbb\x83&\xeb\xe6HB\xeb\x09\xc0\x8f\x86\xf0\x87\ +\xc0\x1b%\x90\x0bl\x0c\xd8\x9bZ\x0b=\xeew\x19B\ +\xff\x036\x95P2\xf4\xa6\xd8\xa4\xc9\xdc\x91\xaf\xc0\x1a\ +\xe0~H\x1b^\x5c\xd9\xe0vCf/0;\x1fa\ +\x9f\x1b\xc2>+\xe1t\xf8\x98!\xf7d\xaeB\xea\x81\ +AE\xc8E)e\x95*\x01S\x80\x0eE\xee\xa0\xf8\ +\x16\x88\xaf\x15\x01\x8f\x81\x95\x0e\x14D\xea\xc5V?\xd9\ +\xa7\x82&\xd7\x1a\x9b\xc91\x87*B'\x8c\xcd{\xbe\ +5\xf1\xa0\x11Y\xcdr\x88\x80\xd9rL\xfb\xc9o\xd2\ +&\x95I\xe0\x10\xf5\xdb\x8f\xab&xR\x91\x7fC|\ +\x1d\x86\xe7\x8d\xcdc\x89\x83\x04\xac0t<\xe7W\x10\ +\xd9\xa8\x08\xfa\x13\xb8\xe2`\xb1\xe7w\xe0\x9a\x11=\x0e\ +#`\x9d2\xf8{\x87+^\xadF]c\xd8\xfa\xbf\ +\xab|.\xab\x220,\xae{\x81\x97\x15\x1d\xc9\xec\x81\ +O\x1b\xd9\xdeT\x87\x09\x98i\xe8\x99\x9f\xb9\x04\x96)\ +\x02\xae\xc9\x11\xe8*z\xf0\xae\xe0\xb4\xa2\xea\x10\x01Z\ +\xa2p\x15\xf7q\xc5\x88\x15\x86\x08\xa8T\x06%G\x01\ +\x01=\xca\xffU\x99\x04$\x94A\xf7G\x01\x01w\x8c\ +j\xd7\x10\x01\xe5\xca\xa0\x87\x11\x19\x95NV\xfc\xf0(\ +d]}\xca\xff\xe5\x99\x04\xdcS\x06UDD@\xbf\ +\xb2\xbft\x19\xb6\x14\x0a\xcd\x87{\x99\x04h\x9f\xc9S\ +\x11~\x9a\x1fe}\x05)\xe0\x83\x08\xf4$\xac\xa51\ +)\x80\x80y\x11\x12\xf0%\xf0\x17\xb0E^\xc4)\xe0\ +\x97\x08\xf4h\xe9\xef\xed\xcc\x1f\xaf\xa0_5\xb9\x8e\xa4\ +\xe2[c\xe6\xa09F\xc44\xcba\xe7\x03\xfdJ\xef\ +\x01\x7f\xcb\xe3\x875\x0e\x13\xf0\xa2\xf2\xffM\xa0;;\ +\x1bl\xcf5s\x1a\x05\x04\x5c\xf4K\x87/(\x837\ +\xe1f\xeb\xdaD\xf4\xcb\x1b__\xeb\x8c\xf5\xb2\xdeA\ +\x02\x1a\x0d\x7f\x9e\xd1&\xb5+\x13Z\x1c$\xe0\x8c\xe2\ +\xcbo\xd6\xa4\xdd\xe8u\xc1g\x1dr~\x09\xfa\xdd\xc0\ +Nkb\x0dz#D\xcb(x\xfb\xff\x92\xc3\x1d\xe1\ +ac\xed\xbc\xea\x80\xf3\x1b\x0c\xfbs\xeac\xaa\x11\xa6\ +\xb4\x9az\xa2\x84\x9d\xaf\x94\x84\xaa\xe0\xb7\x9f\xc6!\x83\ +\xc5oQ.\x16\x8a\x8c2\xe0;\xc3\xeeC\xf9\xa6\x90\ +7\x0ca\xfbJ\x90\x80&\xc3\xde[\x85d\xb6\x0d\xe8\ +\xd7\xe4)\xbc\x0e\x92R\x81\xd5\xcd2\xc8\x08:\xc6\x8e\ +bwb}\x5c\x02\x9f\xfd^\xc2\xed`{\x02\xd3$\ +l\xb4\x14\x1c\xc7kL\x88\x1b\xe5\xd8\x9d,)\xe0<\ +!\xdck\xcc\x04:\x03\x14u\x10\xfe\x05\xaa\x85\xe5x\ +\xe5n\xcb\xa6N\xb1=\x14,\x94\xf4\xd1R8 1\ +\xc4\x8c\x88\xdf\xfa^\xec\xb6\xb8t!\xa7.l\xe5K\ +\xd1\xfb\x072\x9fn\xe0}\xc2\xad'V\x03\x1f\xe2\x95\ +\xee\x82\xf4wE\x19\xb6\xcfEoB\xf2\x0b<\xbe\x92\ +\x94\xb4\x90\xaf\x22\x01l\x06\xbeA\xef\xf6\xf0[\x8as\ +\xf2\xddE\xf3E\x05\xf0\x05\xf9u\x89>\x96\x22\xc4\x1f\ +x\xe5\xf0N\xa9\xd5%\xc5\x86\x84Dq\x8b\xe5\xa9\x97\ +u\x9eO\x87\xe7Y`+1^\xe6lF/8\xc6\ +\xf9\xf4\x02o\x17+:\xad\x05\xda\x8a\xe8|\x9b\xd8P\ +t\xac\x06~\x8a\xd1\xf1_)\xbcQ;R\xbc\x04\xfc\ + Gb\xd8N\x0f\xe0\xb5\xeb4\xe0\x00\xaa\x80w\xf0\ +nz\x06F\xe8\xf4\xcf\x22\xab*\xaaX:jL\xc6\ +kK\xab\x07^\x00\x16\x883Ur\xbe\xa7\xe4|\xbf\ +\x83w]\xd5%\xa7E;pI\x82\x9e\xc8\xf0?z\ +\x1eV0\x12`\xcaG\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x07\xad\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x07:\x10k\xfb\xf7\x89\x00\x00\x05\xabIDA\ +Tx\xda\xed\x9akl\x15E\x14\xc7\x7f-\x85\x96w\ +\xa8\xd1 \x22\x88\xca\xa3\xe5\x91\xa0\xa2`\x02\xd1\x120\ +\x86hk\x82\x86\xa8\xf1\x8b\x8dR\x9f\x08(\x18\x0d\x01\ +\xf5\x8b\x86\xa0\x08\x18A+\x89\x82 \xe0#\x98H\x22\ +F\xa3\xd1 A\x0c\x22!(\x8a El\x8b\xb5P\ +\xe9\x83>\xae\x1f\xee\xb9\xc9fzfv\xee\xadp\xf7\ +\xd6\xfbO\xf6\xc3\xee\x9esf\xce\xd9\x99\xf3\x9a\x85,\ +\xb2\xc8\x22\x8b,\xfe\xbf\xc8I\x81\xa7\x1fp\x1d0\x02\ +\x18\x08\xe4\x03\xf5@\x0dp\x008\xdc\x9d\x0d6\x0e8\ +\x09\xc4,W\x07\xf0bw6\xc0\x07\x0e\xe5\x13W;\ +0\xaa;*\xdf\x138\xeda\x80\x18\xf0X\xa6(\x95\ +\x9b\x04\xed\x14`@\xe0\xbeIV\xc4\x06`\xbfA;\ +#\x93\x9d\xe2\xed\xc0B`:\xd0[\x9e\xdd\x05\x1c5\ +\xbe\xf2\xf6\x00\xdf4\xe3]\x1b\xb0\x16\xb8D\xde_\x0d\ +\x94\x03\x8f\x00\x17G\xd9\x00\xaf\x1b\x8a4\x89W\xd7\x96\ +\xf9\xe3\x01\xbe^\xc0?\x0aM=p\xccxV\x0b\x5c\ +\x19E\xe5\xef\xf7\xdc\xdf1\xe0\x0c0\xd8\xe0\x7f-\x09\ +\xfe}\x12>#\x83\xcb\xe4k\xf9x\xf8\xed@\xb1\xc5\ +I.\x0e\x09\x93\xc1ki\x94\x0cP\xa9(\xfa\xb7\xf1\ +l\xaf\xe4\x01a\xc8\x07\x9e\x03Z\x8d\xfc\xe0/C^\ +#0$\x0a\xca_aL6\x06\xac\x06z\x00\x93d\ +\xaf\xdf\x0b\xe4%)w,\xb0\x08\x98-\xcep\x04\xd0\ +b\x8c\xf3r\x14\x0c\xf0\xbc\xb2\xbf\x0b\xcf\xd3Xk\x8c\ +\xb1\xea$\xd2\xa45\x0f\xb8\xc6x\xd6\x08\x0c\xba@u\ +\xc7 Y\x19i\xc5\x22\xc5A\xfd\x1e\x12\xaa\xf2\x80\x0a\ +`\x07\xf0\x8d|\xd9\xd1!\xe3\xbcb\x19\xa7w\xba\x0d\ +\xd0\x13\xd8\xaaL\xeek\x0b}\x0f\xe0\x13Kh\xbc\xd1\ +\xc2S\xa6\xd07Hv\x19\x99<\x7f\xab\xb2?5T\ +8B\xdbaKz\xfd\xb4\x92`\x95D-\x11\x9a\xa4\ +,O\x0d\x9f\x85\xc4\xf7\x89\x0a\xcf\xa3\x06\xcd\xc7Q,\ +\x86\x0a\x8cw-\x16\x9e\xb0\x08q\x91\xf2\xac%\x13\xaa\ +\xc1~\xc6\xbb\x81\x16\x9e}\x0eym\xc0\x8f\xca\xf3\x01\ +J\xe6\x99\x17\xb5\xe5of~5\x16\xda\xf1@\xb3e\ +\xf9\xaf\xb5\xf0<\xa5\xd0n\xf4,\xc7\x87\x03\xcbd\xdb\ +,\x10'\xac\xa1\x18\xd8\x22\xe5\xf9\x1d\xc9\x18\xb8HQ\ +>\x06,q\xf0\xcc\x02N\x19\xa9\xee\x06GH\x1b\xaa\ +\xa4\xc21`eH}R\xa9d\xa9\x9b\x14#h\x1f\ +\xf0\x17\xe0\x1e<\xfa\x9e\x1b\x95\x89Uz0\xe6\x8b'\ +/\xf5Lf\xae\x97Pi\xd6\x1c\xc3,\x95\xa9\xab8\ +\xdb$J\x97\x00\xb7Z>`\xe2\xda)\x1f\xc0\x8a-\ +\x06\xc3o\x8ee\xd6U<\xa4Lp\xb8\x91-\xaeK\ +\xa2\xac\xf6\xbd\xfe\x94\x0f\xa0b\xb6\xc2p\xdbyJ\x85\ +w\x1b\xe3|k\xd0\x94:\xfa\x0f5\x9e\xca\x1e\xb3<\ +?\xe8J\x82\x8e(\xfb\xe7\x01`\xb3\x08\xdc\x0f\xdc\x92\ +\x84\xb2\x85\xc0\x1b\xd2\xfd\xd9E\xbcU\xbeL\x99\xd4\x1c\ +\x83o\xa1\xb2EV\x8b\xbcQ\xc0\x89\x10\xe5\xdf\x94\xd5\ +[\xa6\xe8\xe4\x0c\xc5\xf7yX\xb6\x03X\x0f\x8cq\xc8\ +)\x90\xde\xdf\x09\xfc\xbaBf\x14\x98i\xd0\x9c2h\ +F\xca\xaa\xa9\x03\xaa\x80_\x85\xa6V\x9cv\x8e#c\ +\xfd.ly~\xee\xb9\xc4:,\xde\xfb\x06\xe0\xb8\xa7\ +\x8c6\xa17\xd1W\xe9\x19LLq\xcbm3\xe4\xbc\ +\xe4\x13ok\x92p,f.\xbf7\x09\xde%\x8e\x0f\ +a.\xdd\x8a\x14\x0dPe\xc8)\xf7a\x9a\x22\xce\xa2\ +\x1d\xf8\x1eX\x0e\xcc\xb5t\x86W\x04\xf8\x86\xc8\xca\x08\ +\xbeo\x05V\x11?$\xf9HBU\x8b\xf0\xd9\x12\xa0\ +9\xca8w\xa7h\x80\x83\x86\x9cC\xe2\xefRB/\ +Y\xf6A\x81\x07d\xd5\x0c\x96\xb6Y\xf0\xddqK\xe3\ +\xd4\xe5\x88\xa7*\x1e|O\x17R\xe6Y\x8a1\x97\x87\ +\xe5\x04a[\xc4w\x89\xaf\xf6\x949\x0ex_I\x90\ +\x12~\xa2\x98\xae\xe1\x1dGH|2\x95\x15\xf1\x93\xa7\ +\x01J=d\xf5\x07\xaa\x1d2>t4d\xe6J\x86\ +\xb7GB\xdfX\x87\x81;\x1cc<\x93\xac\x01\x16{\ +(\x7f\x1c\xe8\xe3!k\xbaC\xc6i\xa9Q\xb4V\xdc\ +\x0e\x85\xbe\xc9\x91\xa7\xb8\x0elv\xa5\xe2\x0b\x96\x8a\xe5\ +\xab\x03\x85\xca\x19\xe0g\xf9j\x13\xbf\xe1\ +\xd5K\xa9\xbc\x1b\xfd\x7f\x84\xc8c\x88\xe2\xbc\xfe\xab+\ +c\xfeb\x1fI\xfc\x84\xd9\xa5L\xa34Dvz\xd0\ +\x9e#~8\x9bC\x06\xa1\x00x\x01\xfd\x14\xba\x01\xb8\ +\xc9\xa8*\xdf\xb3(\xff\x85\xa3[\x94\x11\xb8\x9cxg\ +\xb9>\x90\x1eO\xb6\xb4\xc9VI&\xd9J\xbc\x0b}\ +3\xdd\x08}\xa4\x5c\x0eK_\x87\xa2\xff\xa1\x92E\x16\ +Yd\x91E\x16\x0a\xfe\x05\x15@e5@N\xdd\xa4\ +\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x04\xbd\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x08&Bmq\x5c\x00\x00\x02\xbbIDA\ +Tx\xda\xed\x9b=h\x14A\x14\xc7\x7fw\x17OO\ +EAm\xf4D\x84(\xa2)-,D+\xc5\xde\xca\ +J\x9b \xa42\x956V\x16\xb9\x04EA\x88ho\ +a\x141\x85E,DB\x84\x9c1\x18\x1bA\x0b%\ +\x956\xc6=4\x229?\x0b\xdfb\x0f\xd3.)\x9c\xd2\x1elz@\xaf.\ +\x00\xae(|\xefFT\x90\xcf\xe8\xfetw.\x06\xe8\ +\xdc\x01\x1c\x97[R\xe5\x7f&\xc0g\x94\xec\x8e\xb8o\ +\xaf&\x80m\xc0\xfb\x10\xff/\xc0\x9e\x0e\x9fSd\x7f\ +\xce\xdf\xbfZ\x00\xe2t\x94<\xe5_'\xc6>\xe0s\ +\x0e\x00\xbe\x01\x07W\x1a\xc0@\x82\x01^\x006\xf2\xb7\ +\x09#\xafn\x8fy`\xebJ\x018\x00|M0\xb8\ +%\xe01\xf9\xb7\xbc<\x8c\xd8\xe1\xca\x04\xc0Z\x99}\ +u\xed\xfb\xb9\x987\x80\xab\xe8\xdd\xf8\xf4\x138\x91\x17\ +\x80\xb0\x94\xa7\x93-\x00\xbb\xb3\x06\x10\x95\xf2t\xb3\xa6\ +b[\xae+\x00El\xa2\xbc\x9e\x15\x80\x01\x8a\xdb\x0c\ +y\xba[\x00\xfb\x13\xa6<\xddl\x11\xe8K\x0b@\xf7\ +\x94\x17\xd7\xde\x00\x9b\xd2\x00\xb8a@\xf0\xcb\x17M\xca\ +\xefJ\xb2\xff\xbe\x19;\xd5*\x03\xef\xb0Wo\xcb\xc0\ +#\x8b\x01L\xb8vy\xe0\x93,W\x0f[\x06\xe02\ +p\xcf\x7fc\xfd#3>\x84\x06\xe6?4\xd5P\x05\ +\xbf\x5c\xbdr\xf80K\xb2\x8e0]\xcd\x93X\x86R\ +l\xa5;99\x19\xae?:\xd9,\x81\xfd7YS\ +\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x03\xe4\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x05\x0d[\x7f\xf6Q\x00\x00\x01\xe2IDA\ +Tx\xda\xed\x9bAN\xc2@\x14\x86\xbf\xda\x88\x98x\ +\x01\x03\xac\x94\x95\x170\xf1B\xde\xc1\xa5H!\x1e\xc3\ +\xa51\xe8\xcax\x00\xe3\x06\xd9y\x00d\xe1N01\ +&\x92\x18\x5c05@\x98\xda\xa6\xa5o(\xefO\xde\ +\x02\x98\x07\xfd\xbfL\xdb7\xe5\x0d\xa8T*\xd5\xbc\xea\ +@\x0b\xe8\x01#`\x922~\x807\xe0\x118\x03\xf6\ +]5\xee\x03m`\x9c\x81\xe9\xa8\xf84 <\xd7\xcc\ +\xdf\xae\xd8\xf8b\xdc\x00eW\x00\xb4s6\x1f\xc6\xbd\ +\x0b\x10\xea9L{\xa7!\xb4\x04\xcd\x87\xf1\x00\xecJ\ +\x01\xe8E\x9c\xa3\x95\x0c\xbe\x7f\x1b8\x06\x9e\x5c\x9d\x09\ +\xb6[]%\xe3\xdf)\x1b\x93\xceA\xb0\x1d\xcc*\x14\ +\x07B\xd612\xb3\xbce\xaew\xa2\x00\xa4 \x841\ +6w<_\x12\x804\x84\x89\xa9y|I\x00.@\ +\x08\xa4\x01\x84\x10\xee\x84\x00|\x03\x87\xd2\x00\x00\xb6\x80\ +S\xe0\x19\xf8\xca\x19B\xd3\x05\x00\xabV\x05\xe8X<\ +v7\x01\x00@\xd5\xe2q\xe8E\x98\xf5\x0a\x06ab\ +;\xff6Z\x0a@\x01(\x00\x05\xa0\x00\x14\x80\x02P\ +\x00q\xb4c\x16\x0f\x83\x88\xf2\xf9\x15\xb8\x00J\x0e\xe6\ +\xa7~$\x16$Xe5\x1c\xcc\xb7\xfa\x8c\x0b`\x90\ +\xe0\x00\xfa\x0e\xe6/\x1d\x9bd1\x94t\x85\xb8\x16\xf9\ +z\x11T\x00\x0a@\x01(\x80\x98\x1a$\x18\xdbw0\ +?5\x80\xab\x94c\xa5\xf3SW\x82%Sa\xf5\xff\ +)@\xce-\xa5\xa8t~\xeaBh\xdd\xa5\x85\x90\x02\ +P\x00\x0a@\x01(\x00\x05\xa0\x00\x14\xc0\x22\x80\x0f\xcb\ +g\xd5\x02\xf9\xacY\xde\x1f\x81\xbdU\xb6S\x10\x085\ +\xec[\x01\xba\x90\xecqs\xd1\xa2\xe11m\x1f}a\ +\xda\xd4\xbcI\x1a\x03G>\xf0\x0e\xec\x01'\x1b\x06\xe0\ +\x12\xb8\x0e_Hl\x99\x91\x8c\xb9V\xd9Y\x08\x01\xb2\ +\xbbG\xf2h\x96\x0e\x96\x99\x9f\xd5\x01\xd3?!\xbb\xc0\ +\xb0\x00\xa6\x87\xc6K\xd3xS\xa9T\xaa?\xfd\x02L\ +Tg\xc7f\xe0gW\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x07\x17\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x83iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5E*\x0av\x10q\x08X\x9d\xec\xa2\x22\x8eZ\ +\x85\x22T\x08\xb5B\xab\x0e&\x97~A\x93\x86$\xc5\ +\xc5Qp-8\xf8\xb1Xupq\xd6\xd5\xc1U\x10\ +\x04?@\x9c\x1d\x9c\x14]\xa4\xc4\xff%\x85\x161\x1e\ +\x1c\xf7\xe3\xdd\xbd\xc7\xdd;@hT\x98fu\xcd\x02\ +\x9an\x9b\xe9dB\xcc\xe6V\xc5\xd0+\xc2\xe8G\x08\ +#\x88\xcb\xcc2\xe6$)\x05\xdf\xf1u\x8f\x00_\xef\ +\xe2<\xcb\xff\xdc\x9f\xa3W\xcd[\x0c\x08\x88\xc4\xb3\xcc\ +0m\xe2\x0d\xe2\xe9M\xdb\xe0\xbcO\x1ce%Y%\ +>'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5ctY\ +\xe0\x99Q3\x93\x9e'\x8e\x12\x8b\xc5\x0eV:\x98\x95\ +L\x8dx\x8a8\xa6j:\xe5\x0bY\x8fU\xce[\x9c\ +\xb5J\x8d\xb5\xee\xc9_\x18\xc9\xeb+\xcb\x5c\xa79\x8c\ +$\x16\xb1\x04\x09\x22\x14\xd4PF\x056\xe2\xb4\xea\xa4\ +XH\xd3~\xc2\xc7?\xe4\xfa%r)\xe4*\x83\x91\ +c\x01Uh\x90]?\xf8\x1f\xfc\xee\xd6*LNx\ +I\x91\x04\xd0\xfd\xe28\x1f\xa3@h\x17h\xd6\x1d\xe7\ +\xfb\xd8q\x9a'@\xf0\x19\xb8\xd2\xdb\xfej\x03\x98\xf9\ +$\xbd\xde\xd6bG@\xdf6pq\xdd\xd6\x94=\xe0\ +r\x07\x18|2dSv\xa5 M\xa1P\x00\xde\xcf\ +\xe8\x9br\xc0\xc0-\xd0\xb3\xe6\xf5\xd6\xda\xc7\xe9\x03\x90\ +\xa1\xaeR7\xc0\xc1!0V\xa4\xecu\x9fw\x87;\ +{\xfb\xf7L\xab\xbf\x1f\xb2\xe0r\xc0h\xc9\xc4\x8f\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe8\ +\x08\x10\x08\x11\x09r\xbc\xe5\x1d\x00\x00\x05\x15IDA\ +Tx\xda\xe5\x9b[lTE\x18\xc7\x7f\xbb\xb5\x82\x85\ +\xd2.\x8a\x82\x95\x12^\xa46\x06K\x0b`\x00Xki\xf8fd5|\ +\x92\xe5\x9b/\x02\xb3\x16\xd6{'pc\x02z\xab\x80\ +]\x16\xdedVh\xa6\x8e\x16`wD&\xbe\x07\xee\ +\xce\x80\x87\xdb\x81\xe1\x88<|\x00\xb4\xa6E\xb8\x15\xf8\ +\x22\x02\xd1\x03\xc0F\x07\xf6g\xa3\xd02\xf1\xb3/\x0d\ +%\xe4D\x9b:B\x17\x81\x97\x81+\x1d\x1a\xe1+\x80\ +\xe7\x80\xf3\x06\xde>J\xea!^2\x10\xf8C\x0cV\ +\xa3\xb0\x16\xf8\xd3\xc0\xe3P\xdc\xc9\x1f3L<\x0e,\ +\xf3 \x10\xbb\x1e(\x19\x0c\xe3#\xb6\x93\xae\x00\xce\x1a\ +\xfcn\xbbG\xd1h\xbb\xc1@\x9e\x05\xbam\xbe\xfb\xaf\ +4\x93\x8dJ\xf8\xeb\x1b\xda\x80\x1f4|\x8fD\xb5\x07\ +\x8fk&\xf9]\xa2@_\xb1L\xec\x92\x8a\xff-\xa6\ +\x09:4\xb1\xfdy\xe0\x96&H\xc5\xfb4\xde\xa1,\ +2*\xf1\xa2F{;i\x1e\x145r\x0c\xea\xd2\xda\ +S\x8a\x87J1\x82\x8a6\xe0M\xe080\x05\xbcj\ +\xd2~\x8ah\xd5x\x86i\x95\x0d\xdb\xae\xd1\xda\x86\x18\ +L\xbcSg\x9e\xe3\xc0C\x8e\x94\xb0A#\xcf3\xf5\ +\x1ePUr\xbe\x89\xc9\xc0\x8c\xc1\x22\xf78P\xc2\x88\ +\x82\xfed\xed\x1fo\xd60{GL\xe2\xa6X\xfd\x02\ +\xf0z\xc6.\xf5V\x0d\xfd\xde(!\xefO\x09\x88G\ +-f\x1c\x05\xee\xcbP\x09c\x0a\xba\xc5\xf0\x9f\x0e*\ +\xfe\xb4\xcd\x81\x02\xaac\xafM\xb4f\x81\x1d\x0az\x13\ +a\xdf?\xab\x88\xa1\xbb\x1d*\xa0\x02\xfc#\xc9\xcb\xbc\ +\x14\x15\xb0\x5c#_G5\xbfV\xb9>\x1c+\xa0:\ +\x0e\xc5\xf4<*L(\xe8\xdc\x99\x97\x94\xb2\x1eF\x1b\ +\x18\xc8\xf4\x02\xdf\x02{\xa4N\x98\x86\x1d\xa8\x87\x81\xbc\ +\x84\x8e\xf5P\xa2\xf1\xb8_\x0a\xaa[\x80|\x82y\xc6\ +\x15\xd7\xd7\xe4\x81.\xc5\xcdIO\xc2\xda\x02A\x15z\ +\x7f\x82\xe2\xcb\x84\xe2zW\x1eX\xac\xb89\xedY|\ +\xbf\x1e\xf8\x11x-F\xf9\xed\x94\xe2\xfa\xd5\x00\xc7\x14\ +\x06\x22i\xda\x9b\xe5F\xc8\x1b\x96\xbc,\xd5\xc4 \x9c\ +S\xdc\x9c\xef\xb1\x02\xceX\xf22_1\xcf\xb9<\xff\ +s\xe4Q7 tz\xcc\xb7\xed\xf6\x97J\x96\xd3y\ +\xcdr\xea\xf0T\xf8\xbd\x92\xba\xdbz\x12k\x05,\xf1\ +L\xf0#\xc0=\xc0\xbd\x122\xdb`\x89N\x01S\x8a\ +\x9b\xab=\x11\xfc\x22\xf0\x8aD\x87\x9f\xc6\x9cC%\xcb\ +T^\x13%\xf5{ \xfcw\xc2\xc7\xf31\xde\xfa\x9c\ +\x90W\x17\x22\xfb\x98\x0c\x9d \xd8\x99J\xab\xf3C\x99\ +\x0c\x01,\x02.)\xd2\xc5\x15\x8e\x150\x0b|H\xd0\ +Z\x97\x16\xba\x15\xe9\xf0%B\xbb[\xaa\x82\xc8v\x87\ +\x0a\x18\x95p7m\x83\xe1\x98\xc4u\xeds\x87\x81\xbb\x1cx\ +\x91\x91(\xcb\xbf\x8am\xa4\xbb1\xb2[Q\xf3\x1b\xc4\ +M7\x89nc\xe4\xe9z\x0f,\x94\x1a@Z[c\ +W\x11l\x8dM\x03\x7f\x03\x1f\x03+\x1d\xc5\x0f\xa6\xad\ +\xb1\x05\xaa\x07_\xd0h\xad\xd8DI\x9e\xae\xb5gP\ +\xf7\xa0i{\xbc\xaf\x09\x84\xef'\xd8u\x8a\xb5=\x8e\ +\x14 U\xda;\x96\xb1\xd5N\x0aS\x83\xc4\xe6(\x93\ +\xe4\x80/5\x93\x8c\xe1g\x8bL\xbb\xe45\x15\x8d7\ +\x8b\x1cZ\x9b\x9a\xa4\x86\xf1\xabIj\x91\xc6\xe5U\x83\ +-\xeb]\xaeG\x0dAL\x89\xa0E\xad\xd1\xe8\xd2$\ +;\xd5\xfc\xe2\xe1\xb8\x93\x0f\x19\x94p\x04X\xd7@\xe1\ +\xd7\x13Tvu<\xeeJB \x07\xbcO\xb4V\xd9\ +y\x0e\x05o%h\x95\xbd`\xe0\xed\xdd\xb4\x88\xed#\ +Z\xb3\xf4&\x07\xc2o\x22Z\xb3\xf4g\x04=\xc5\xa9\ +\xa0\x05x\x9b\xc6\xb7\xcb\x8fD\xe4\xe1=Rl\x97\x0f\ +c+\xd1\x0fL\xfc&\x9fF\x92\xe3n+e\xa9\xff\ +bQP\x19\xb2\xfd\xc6m\xf1\x80\xac\x86\x82\xc53\xbf\ +r\xf9\xc8L\x098)QYY\xee\x17d\x5c\x0b\xac\ +\x91\x1a\xde:\xecN\x9bT\x0fP\xedqa\x84|<\ +4\xe5\xdc;\x03\x90`0\xd8n\xdb\xb6\x1c\x0a\x85\ +\xd8\xa9\xa9\xa9\xf7\xc2\xe1\xf0\x07\x0c\xc3\x8c\x03\x08\x09\x82\ +`\x03\x80a\x18\x0c\x00\xcd\xb6\xed\xa7\xaa\xaa~\xf2\xf4\ +\xe9\xd3\xbfi\x9a\xe6\x00\xf0DQ,\xa8\xaa\xba\xf7.\ +\x00\x81h4\xda-\x08\x82899\xf9\xddp8\xfc\ +\x93D\x22\x11\xccd2\x5c__\x1fDQ\x04!\x9f\ +?\xee\xfb>\xca\xe52\x14E\xc1\xc2\xc2Beuu\ +USU\xf5\x97\x8f\x1e=\xfa\xc4\xf3<\x8f\x10\xa2m\ +mmm\xb5\x9a\x96\xc3\x00\xe8D\x22\x11\xef\xe8\xe8\x88\ +\x8d\x8e\x8e\xfe:\x91Hd\xce\x9d;\xc7E\x22\x11h\ +\x9a\x86b\xb1\x08\xcb\xb2\xe0y\xde\x7f\xe7\x88e!I\ +\x12B\xa1\x10vww\xf1\xf8\xf1\xe3\xca\xca\xca\xcag\ +/^\xbc\xf8q>\x9f/\x02\xd0\xd7\xd6\xd66\x9a!\ +\xe8V\xae\xa4R\xa9\x9et:\x9d:q\xe2\xc4\x1f\xa7\ +\xa6\xa6\x06fff\x18]\xd7\xb1\xb9\xb9\x09]\xd7a\ +\xdb6|\xdf\xaf\x85\xe7y\xb0m\x1b\xe5r\x19;;\ +;`Y\x16\xa7O\x9f\x0ep\x1c\xd7\xed\xba\xeee\x9a\ +\xa6\x1fT*\x153\x1c\x0eS;;;\xfa[\x01\xc6\ +\xc6\xc6b===}\x89D\xe2\x0f\x17.\x5c\xe8\x18\ +\x1e\x1e\xa6\x14EA\xa9Tj\x10\xad\x17o\xbe\xd6u\ +\x1d\xc5b\x11\xc9d\x92D\xa3QIU\xd5\xf7\x1c\xc7\ +\xf9\xbd\xef\xfbt{{{%\x9f\xcf\xdb-\x01\xa6\xa7\ +\xa7\x03\x84\x90\xcet:\xfd\xd1\xc4\xc4Drxx\x98\ +Z^^>\x90q\xbdpu\x0d\x00h\x80\xb1m\x1b\ +\xaa\xaab``\x80\xd04\x1d4\x0c#\xa3i\xda\xc7\ +\x0c\xc3\xf0\x8a\xa2h-\x01\xd2\xe9t\xac\xaf\xaf\xef\xdb\ +\xf1x\xfc\x07\xd3\xd3\xd3\xec\xca\xca\x0a,\xcbj\x10j\ +%~\x98#\x9e\xe7A\xd34d2\x19j}}\xbd\ +\x8b\x10\xf2\xa9\xe38\x1b\xe9t\xdaY\x5c\x5c\xac`\xbf\ +\x88\x00\x00fgg)\x9e\xe7C\x92$}899\ +)\x14\x0a\x05\x98\xa6Y{\x91\xe7yp]\xf7\x80\xc0\ +Q\xff\x99\xa6\x89|>\x8f\xf1\xf1qA\x10\x84\x9f\x0b\ +\x82@X\x96\x95\xab\xba5\x80l6+\xb6\xb5\xb5}\ +\xbd\xad\xad-\x12\x8dF\xb1\xbd\xbd\xdd\xf0b\xd7uk\ +/\xae\xde\xabF\xbd`\xbd\x0b\xd5{\x85B\x01\xb2,\ +#\x1c\x0ewD\x22\x91\x0c\xcf\xf3\xec\xf4\xf4t\x00\xfb\ +\xa5\x14\x00\xc0\xf3\xbc\xc80\xcc\xfb\xc3\xc3\xc3\x82\xaa\xaa\ +p\xdd\xcf\x0b\x18!\xa4\xb6\xdf\xab}\xbd\xf5\xcd\xd7\xd5\ +\xb0,\x0b\x86a\xc00\x0c\x98\xa6\x09\x9a\xa6\xd1\xdb\xdb\ +\xcb\xef\xed\xed}\xc7\xf3\xbcloo\xaf\x08@\xab\x01\ +\xc8\xb2\x1cp\x1c\xe7\x5cgg'\xa5iZm\x8f\xd7\ +\x8b7\x03\xd47\xcf\xf3jb\xd5\xadZ\x0f\xa6\xaa*\ +\xba\xbb\xbb\xa9\x85\x85\x85iI\x92~\xc5q\x5c\xa3\x03\ +,\xcb\xd2\xb6m\xc7\x04A@.\x97\x83\xeb\xba\x07\xb2\ +o\x060M\x13\xa6i\xa2R\xa9\x1c\x10$\x84\xd4\xfa\ +\xfdr\x0dA\x10\xe0\xfb~\x87$I\xf0}\xbf\x11@\ +\x14E\xba\x5c.\x8b\x95J\x05\xdb\xdb\xdb`Y\x16\x14\ +E\x81\xa6\xe9Z\x86\xd5\x82c\xdb6\x1c\xc7ip\xa1\ +\x1e\xae\xbeU\xc7X\x96\x05\x8e\xe3\x00 (IRm\ +\xfd\xd5\x00\x8e\x1d;\xe6\x14\x0a\x05\xbfZ\xd14M\xab\ +e\xdd*\x9aE\xab\x19\x1f\xd6(\x8a\xaaN\xab/I\ +\x92o\xdb\xb6\xdb\xb0\x0bX\x96u\x09!E\xcb\xb2\xc0\ +\xb2l\x83\xed\x87\x05EQ\xa0(\xea\xc8q\x00\xc0q\ +\x1c,\xcb\x02\x80\xdd@ \x00\x9e\xe7\xdd\xe6)\xb0\x09\ +!9]\xd7\xa3\x92$\xc14\xcd\x86\xec\x8er\xe0m\ +\xf6\x13B \x8a\x22t]\x07M\xd3\x1b\xc1`\xd0\xa7\ +(\xcanp@\x10\x04\x83a\x98\x8f777\x9dh\ +4z\xe4\xdc\xb6\x02j5\xa6\xdab\xb1\x18666\ +,\x86a\xfe\xccq\x1c\x14E1\x1a\x00^\xbf~m\ +\xc4b\xb1\xbf(\x8abG\x22\x110\x0cs`\x8e\xbf\ +L\xd4?\xc70\x0cdY\x86\xa2(^{{\xfb_\ +eY\xae\xcc\xce\xce:\xcd\xa5\xd8;s\xe6\xcc\xa7\xb6\ +m\xbf\x5c__\xf7\xe3\xf1\xf8Wv\xf0\xec\xef\xef\xc7\ +\xda\xda\x9a\xef8\xce\xfc\xd8\xd8\xd8\x0a\x80\xe2\x81R\xbc\ +\x7f\xce\xdb\xed\xe9\xe9\xf90\x9b\xcdV\xa2\xd1(B\xa1\ +\xd0\xff,.\xcb2\x22\x91\x08^\xbe|Y\xe9\xef\xef\ +\xff\x19\xcb\xb2\xf6\xa5K\x97Z\x03\xcc\xcc\xcc8g\xcf\ +\x9e\xfd;\x80\xdf\xce\xcf\xcf\x9b\xe9t\x1a\xa2(\xb6,\ +\xb5G\xc5\xfe\xc2\xc6\xd0\xd0\x10\x9e?\x7fnP\x14\xf5\ +\xd1\xf9\xf3\xe7\xff%\xcb\xb2z\xd4\x91\x8c!dwtt\ +T=\xeaH\x86{\xf7\xee\x95\x1d\xc7y4??\xff\ +MUUc###\x0c\xcf\xf3\xd0u\xbdV\xa2\x0f\ +\xdbv,\xcb\x22\x1e\x8f\xa3\xab\xab\x0b\xcf\x9e=3s\ +\xb9\xdc?.^\xbc\xf8\xa3\xc1\xc1\xc1\xddT*\xf5\xef\ +\x03\x05\xaa\xc9\x0d\x02\x80\x22\x84 \x97\xcb\xbd\xbe|\xf9\ +\xf2\xf7\xf6\xf6\xf6~777W1\x0c\xc3\x1f\x19\x19\ +\xc1\xd0\xd0\x10b\xb1\x18$I\x02\xc7q\xe08\x0e\x92\ +$!\x16\x8b!\x95J\xe1\xe4\xc9\x93\xd0u\xdd\x9f\x9b\ +\x9b\xab\x94J\xa5\xdf\x5c\xbf~\xfd\x87\xc7\x8f\x1f\xdf\xba\ +u\xeb\xd6\xce\xbe\x1e\xa9w\xbe\xfe\xe2@?66F\ +n\xdf\xbe\x1d~\xf5\xea\xd5\xb7\xde\xbcy\xf3\x0b\x00_\ +\xeb\xef\xef'\x9d\x9d\x9d\x01Q\x14\xab\xb5\x1d\x96e\xa1\ +\x5c.#\x97\xcb9\x8a\xa2\xf8\x84\x90\x7f&\x93\xc9\x9f\ +\x8e\x8f\x8f/\xe4r\xb9\xdd+W\xae\x94\xeaN\xc3\x0d\ +=y\x0bD\xed\xf7\xcd\x9b7\x03W\xaf^\x95\x17\x17\ +\x17O,//_0M\xf3\xbc\xe7y]\x9e\xe7\x85\ +\x09!>!d\x8f\xa6\xe9M\x9e\xe7\x1f$\x93\xc9\x07\ +\xa7N\x9dZ\xcb\xe7\xf3\xc5\xbbw\xefj\x0f\x1f>t\ +\xeb\x04\x0f@\xb4\x028\xd4\x91\x89\x89\x09\xea\xda\xb5k\ +b<\x1e\xe7\x02\x81\x00\xc3\xf3|\x80\xa2(\xe2\xba\xae\ +\xe7\xfb\xbe\xa3i\x9a\xbd\xba\xbaj\xdc\xb9s\xc7\x5c^\ +^\xf6Ze\xdc\x0cr\x948\xde\x02t\xe8'\xe0\x90\ +\xbe\xa5\x0b\xef\x22\xf8E\x01\xbe\x10\xd0\x7f\x00o\x07\xfa\ +7;2Zj\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x05y\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a+2\x0dK`\xa7\x00\x00\x03vID\ +ATh\xde\xedXKL\x13Q\x14=o\xda\xa9\x10\ +\xb0F\xa4~@te\xc5(\xc5D\x91\x04\xe2\xc2\x0d\ +&\xba\xc0\x18Q\x137\x82QV\xc6\x80\x22\xd1\x18\x83\ +\xd1\x84\x88hBd\xa3\xc1\x85;\xfc\xb0PW\x9a\x18\ +%\x0a\xfe\x0d\x16AZQ#E)\xe5\x13\xa1\x9f\xe9\ +o\xe6\xbaAD\x1dc\xe9\xcc\xb46\xe9Y\xbd\xcc$\ +\xef\x9d\xf3\xde}\xf7\xdd{\x80$\x92H\x22\x89\xff\x0a\ +DTID\x03D4I\xdaarj\x8dJ\xa5|\ +\x99\x8c\x00\x07\x80\xa51\xda\xafA\xc6X\x8e\x92\x098\ +\x99o\x0bbx\xe0\x19J'\x90\x13`\x88\xa1\x809\ +Z\x08\xd0i\xc9xO\xebG\xd4?\x18\x82?,\xa9\ +\xb2\x96>\xd6I\xa2gX\xc0\xcbA/\x9e;\xbc\xb8\ +X\xba\x0cZ\x9c\x80\xa6\x08\x86\x09\x00\xd0\xeb\x12Pz\ +\xf5=\xcc\x8d\xd6m\x09%@$\x9a\x1e{\x82\x12@\ +h37ZO\xa2\x8e\xb8\x84\x10 \xcb\x81p\xca\x9c\ +\xd6}'\xaf\xde:?\x11\x05\xfc\xc0\x96\xa0\x1e]+\ +\xcfv\xafOT\x01 `\x19q\xf4heCwE\ +B\x0a\x98B\x0a1\xbabn\xb0^Z]\xd7\xf3\xcf\ +7I\xae\x94 \xa5\x97\xf4\xadS@\xd7W\x1fz\x86\ +\x058&\x82p|\x0b\x22 \x12\xbc\x01\xe9\x97K\x1c\ +\x01:\xa1\x93v\xda\xab\xd7~\xd1\x5c\x80m\xc4\x8f\xd6\ +7\xe3\xb8k\x9f\xc0\x98/\xacf\x5c\x0dK\xc0\xae\xfe\ +\xa3\x96vM\x04\xbc\x1f\xf5\xa3\xa1\xdd\x89G\x9f\xdc \ +\xed\xc2*\x0c\xa0\xd6^c\xb9\xa0\x9a\x00\x91\x08\xcd\x9d\ +.\x5c~6\x82\xb0D\xb1\xb9\x1d\x8c\xae\xf98o\xf9\ +`u\x91\xa0H\x80; \xe2\xe0\xad\x01<\x19\xf0\xc4\ +#Wup!Ci\xdf\xf1UcQe\xa1\xc9\x80\ +\x88\xf2\x1b\x9f\xe2D\x1e\x00X\xb1\xc4\x87Z\xa3J\xa3\ +\xa2D8t{\x00\xddN!\xde\xa9vUT\x02\x9a\ +:\x86\xd1\xf9\xd9\x13o\xf2\x02\x18\xf6\xcf\xba\x9c\xeeu\ +\x09hy1\x1ao\xf2c\x8c\xb8R[\xcd\x9a\x8eY\ +\x9f\xc0\xb9v'\xc4Xe\x1b\xf9\xcb\xdb\x05=6\xd8\ +\x8e\xfe$\x1f\xb1\x80\xae!_\xbcC\xe7\xaaO\xe7-\ +\xb2WY>F\xd5\x91]\xb7\x8e\xc7\x8bx\x98\x01'\ +l5\x96\xb3Q\xb7\x94a\x89p\xcf>\x19\xd1j\xa9\ +<\x87\x5cS\x0a\xf2\x16\xa7bEf\x0a\x16\xa6\xf3\xc8\ +2\xf2H\xe59\xe89\x864\x9eCAso\xc4\x96\ +\x8b\xc4QY\xff\xe1\xfc\xa7\x8az\xe2W\x83>\xb8\x03\ +\xe2_\xff\xcf\x9d\xa3C\xc9\x0a#J\xcc\xf3P\xb4<\ +\x1d\x06\x1dS\xe3\xc5} \x12v\x7f8\x9c\xefR\xdc\ +\xd4\xbf\xfe\xea\x95\xfd\x9ee\xe4\xb1w]&v\xe4e\ + \xcd\xa0ZUN\x0ct~\x89g\xfc\xd8\xc3\xbaM\ +\x11U\x84\xff\x14\xf0\xce\xe5\xff#L*\x0bM\xd8W\ +`Rg\xb7gT(\x8cQ\x85\xedH\xfeM\x9b\x9a\ +\xb6\x8a\xe3[pz\xbc.;\x0d\x8d[s\x90e\xe4\ +\xa3f\xa9cL\xae'\xe8#\x89m\xb7\xd7Z\xde\xa9\ +\xee\x0b9=!0\x00\x07\x0aM8T\xbc\x08:N\ +\xd9\xae\x1b\xf4\x0cB\x88f\x94\xc3\xac\x0d\x12_n\xaf\ +\xcdukbl\xf9C\x12No\xceFY^\x86*\ +q\x92m\xe4\xd1?\x16\x80\x8e1Tm\x5c\x84\x03\x1b\ +Le`L\xbd\x17\xf2w\x1f\xfc~\xff\x84\xaa\xbez\ +\xd3c'\x95\xb4\xd8\xe8\xe9g\x0f)m_\xff\xd6\x0f\ +\x84\xa1\xb1?:\xb3\xc0e\x8c)\xb27\xe5\xf2_0\ +\x86/m@\xb9+&S\xf1\xc5P\xc0\xb8\x16\x02\xce\ +\x00p\x00pkH\xdc=\xb5\xc6\x19$\x91D\x12I\ +$4\xbe\x03f\x17\x22\x10s\xbf@\xdd\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00\x188\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\xa0\x00\x00\x00\xa0\x08\x06\x00\x00\x00\x8b\xcfg-\ +\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\ +\x09pHYs\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7o\ +\xa8d\x00\x00\x17\xcdIDATx^\xed\x9d\x09x\ +T\xd5\xd9\xc7\xcf$!,I\x94E6\x0b\x8a\x08*\ +\x8a\x80\xa5Z\x0b\xa8\xfd\x5c\x18j\x05\x97bm]\xe0\ +S\x82\xb6\x1fn\xd8j[\xeb\xda\xa2~u\xb7\xad\xa2\ +\x12\xd0\xd2E\x14jA\xab\x100\x14\xb5* \x8bX\ +6\x11A\x91E\x08\xb2&,\x012\xfd\xff\xef\x9d\x5c\ +2\xc9\xbd3\xe7\xcc=\xf7&\x93\x9c\xdf\xf3\xbc\xde;\ +\xa3Nf\xe6\xbcs\x96w\x15\x06\x83\xc1`0\x18\x0c\ +\x06\x83\xc1`0\x18\x0c\x06\x83\xc1`0\x18\x0c\x06\x83\ +\xc1`0\x18\x0c\x06\x83\xc1`0\x18\x0c\x06\x83\xc1`\ +0\x18\x0c\x06\x83\xc1`0d\x0c\x91\xf8\xb5\xaei\x06\ +\xe9\x0e\xe9\x00\xf9\x06\xe4\xb8\xf8\xf5(H>\x84\xff\xbe\ +)$+.\xd5\x19\x0d\x99c\xdf6:\xfe\x17r\x8b\ +}\xebp\x08r\x10\xb2\x1fR\x0e)\x83\xec\x82|\x05\ +Y\x0b\xf9\x12\xb2\x22~m\xb4t\x82\x5c\x08\x99\x00\xf9\ +\x08\xb2\x07\x12KS8\x08\x8d\x15~v\xb7\xefDF\ +*!\x0b!\xcfB.\x85\xd4\xfca78r \xe7\ +C\xde\x83\xec\x83\xb8})\xe9\x88Q@}2\x09r\ +\x01\xa4\xc1\xf1?\x90\xff@\xdc>\xb4_1\x0a\xa8_\ +>\x84|\x13\x128AO\xbb\x9c\xf5\x1e\x85\x94@z\ +\xf2\x09CF\xf0-\x08\x97\xe7\x9b\xacG\x01\x12\xa4\x02\ +\xf2\x80\xf34\xe4g\xf1{C\xe6\xf1{\x08\xc7/0\ +\x82T\xc0\xff\x83\x5co\xdf\x1a2\x18\xae`\xe7\xd9\xb7\ +\xfa\x09J\x01O\x84\xa7\x00\x95\xef\xc1\x9c\xfd\xd9w\xef\xd0\xaf\x88\x9c\ +}7\xd9\xb7R0rf\xaa}\xeb\x1f\xdd\x0a\xf8*\ +\x84oP\x86\x0d\x10\x9e\xc8\x1a\ +'\x12\xcb*\xc2\xedp\xfb\x19!\xce\xe9}\xb4\xf8\xc3\ +\xad\xfdk)\xde\xf2\xcf\xb7\x8b\x92E\x1b\xc4\xa4\x92\xd5\ +\xe2\x93u;\xc4\xfe\x03\xdc\xeb\xdbdE\x22\xa2O\xf7\ +6b\xe9\xdam\xa2\xe2@\x82\x0d\xfe\x01(\xe1]\xf1\ +{\xbf\xfc\x05r\x95}\x9b\x12\xaer?\xb0o\xfd\xa3\ +\xdb\x15Wu\x92\x93Ae\xdf\x91q@\xf9~\x8b\x8b\ +\xa3|7^\xd6SL{hP\x82\xf2\xfdg\xcd6\ +q\xcd\x03%\xe2\xac\x1b\xa7\x8a;\x9f\x9f'>\xfe\xec\ +\xeb\x04\xe5#\x95\xb1\x98X\xb4jkM\xe5#\xbf\xc6\ +\xd2\xce\x80\x0f\x1dl\x8c_eP\x19\xe3\x94\xe8V@\ +\x15\xf7[i\xfc\xda\xe0\x80b\x5c\x81\xcb/\xedGB\ +\xfc\xe2\xca>\xe2\xa1\xeb\xbf-\xb2\xb3\x0e/8\x95\x95\ +1q\xc3\xa3o\x8b\xa9\xef~.*\x0e\xa6\xed]|\ +\x1a\x7f\x8b.6\xbf\xa8\x8c\x05]|\xda\xd0\xad\x80\xc9\ +L\x0a5\xa1\xc1\xba\xc1\x91\x1f\x1d\xd7\x1e\x97'\xedG\ +8\xf2^\xd0]\xdc5\x8c\xe6\xd1D\xb2\xa0\x8c\xb7\xff\ +\xb8O\xfc\x91/^\x8f_\xfd\xa02\x16*c\x9c\x12\ +\xdd\x0a\x98\x1d\xbf\xca@\xffo\x03$2\x12\xff\xa0i\ +C\x9c\xdc\xa5\x95x\xf8\xa7\xdf\xe1\xad+\xa7v\x95=\ +x&\xa5\x03fA\xbf\xde$\x06y\xc8\xa2Ugt\ ++\xa0\xca\xa1\xa6\xc1y?\x0a\xa2E\xadp\xa1q\xdd\ +\xe2\x97W\x9d&\x0aZ00\xc5\x9d\xb5\x9b\xb4-\x02\ +\xb4\xbf\xfaAe,\xb4\x1e\x5cu+`\xa3\x06\xa3x\ +\x11.TBqZ\xf7\xa3\xc4%\x03\x98\xde\xec\xce\x01\ +\xec\xfb\xfe\xf8*\xa3\xce\xb4p\x14fAY\xf3W\xbd\ +\xc2(\xa0^.\x89_\xc5\x0f\xce\xe9*\x22\xd5\xe6\x8a\ +\x8f>\xdd*6X\xf6\xbdCb\xde\xf2\xcd\xe2\xf2{\ +g\x8a\xd9\x8bh\x8b\xd7\xc6\x8f\xe3\xd7\x8c\xc2(\xa0^\ +\xfa\xc7\xafbH\xff.\xf1;!~\xf2\xd8;\xe2\xac\ +\x9b\xa6\x89\x93\xae\x99$\xda\x0eyQ\x9c\x7f\xdb?E\ +\xc9B\xad\xcaG\xa2\xf1kFa\x14P\x13\xf9\x83\x8a\ +XJ\x84'`q\xf4Qy\xe2\xb8\x8evF\x02g\ +\xb9\xbf\xce\xa2}>p\xba\xe5\x7fo\x82n\xc7B\xe0\ +\x18\x05\xd4E\xccV>\xd2\xa9m^\xfcNX\xae\xb4\ +\x90\xc8\x16\x87*\xdb\xc5\xef3\x06\xa3\x80\xfap\x8c\xf0\ +\xf9\xcd\xed\x93\xef\xd7\xbb\xf6YA\x05!R\xdb\xb9\x5c\ +\xcf1\x0a\xa8\x0f'H\x93\x07\x0d\xf2\xe1\xca\xd2Z\xae\ +\xb5@\x89d^\xc2\x96Q@}8\xee\xac\xf5\xa5\x8c\ +\x9a\x12b\xd9Z&\xf3\x85HD\xec\x88\xdfe\x0cF\ +\x01\xf5\xe18\xe9\xd7m.\x13\xe5\xfb\x0e\xea44\xcb\ +PZ6\xa3\x90q}\x19\x85Q@}$\xa4,\x96\ +,\x5c/\x0e\x1e\x0auE\xfc8~\xcd(\x8c\x02\xea\ +#!\xb6\xf1\xd1IK\x12N\xc3!\xf0N\xfc\x9aQ\ +\x18\x05\xd4@~\xb4h(.\xdf\xb5\x1f\xd9,\xfet\ +\xabh\x96\xcb\xeat\xa1\xc0\xa9\xf6%\xfb6\xb30\x0a\ +\xe8\x13(\xdfI\xb8\xfc\xc1~\x94\xc8\x93S>\x16\xed\ +[i\x0d\x9f\xf3bzYqa(\xd6n\xdd\xe8T\ +\xc0\x8c\xb3\xc2\xfb\x05\xca\xc7$\xa3\xbfB\xac\xf0\xab\x9a\ +\xec,\xab\x10\xbb\xf6\xb0\xf8@\xa00\x92\xe5w\xf6m\ +(\xd4\xdbh\x18\x95X@\x92\xd1\xe1XP>\x16\xfc\ +\xf9\x07$i)\xdb\xbd\xfb\xb5\xe5p{1\x11\xb3\xdf\ +\xbb\xf1\xfbtQ\x19\x0b\xd5qN\x8aN\x05T]k\ +B\xb4\xd0\xea\x05\xca\xc7\xba*3 \xdf\xb6\x9e\xa8;\ +\x96AtT0U\x19\x8bz\x1b\x92\xaf\xea\x06R\x89\ +\xc2\xad7@\xf9\xd8^\xe2\x0d\x08\xf7~u\x09\x0d\xdf\ +\xc31\xfb\xe9\xb0\xfd\xa9\x8cE\xbdMJj\x1b\xbf\xca\ +\xc2&*\x19\x03\x14\xefh\x08\xcb\x8eP\xf9\xd8@\xa7\ +.a\xad\xbe\x1fB\xf9XH\x5c\x07\xb6\xebF\x0e\xe6\ +\x11h\xdb\x07\xeaT@\x86#\xa9\x90\x11n\xa3\xf6\x03\ +'F\xa0x\x03q\xcb\xe4m\xd5\xda\xc2\xb2\xe2\x11\xbe\x94\x1c\ +\x8aw6.\xacu-[5`\x1e\xe4\xdf\x90W \ +\x1b\x9a\x1c:\xb4q\xfb[7\xc4\xf0:\x8c\xcdgm\ +=\x96CK\x17\x1e\xa7_\x11\xb1\xd8-e3G\xea\ +v\xb9\xf1\xfd\xad\xb1o\xa5`=G-\x86o\x9d\x0a\ +\xc8\x0a\xa7?\xb4oSB\xc3)\x0b\xf4\xec\xb5\x1e)\ +P0h\x5c^,\x16\xa1b\xfc\x0aB\xe5\xb3r0\ +<\xe0>i2\xe4i\xcc\x18r\x15\x9d\x06?\x17\xc9\ +\xaf\xc8\xe6\x17|\x0f\x84\xc6\xe5T\xdf\x11K\x08\xcf\x82\ +\x8c\xc1\xdfXb=\xe3\x01\x14\x91)r|\xdf\x83\xad\ +'\xd4x\x0c\xaf\xcf\xe2FA\xc0\xf81\x95,E\xbe\ +\x8f\xc7\xec[\x7f\xe8R@\xbe\xce:\x88l\xb1!\xfe\ +\xdaX-J\x9a\x82AE\xcdb1q9n\xef\x87\ +xg\xfbx3\x13\xf2HnV\xb3\x92m\xd3\xafN\ +X\x16\xf3\x06\x16\xe5D\x22V\x0d\xe5\x01\x10V3\x90\ +i\xaa\xc3\x06\x80lm\xf5 \x14\xe3\x0b\xeb\x19I\xa0\ +\x88\x0c\x97fm\x97\x1b\xac'R3\x15\xb3\xe9e\x9c\ +M\xe3\x8f\x83\x80\x95*d\x97V\x9a}8\x09\xf8F\ +\x97\x022#\x8b\x85\x89d\xe1F\x9e\x19dR`\xc0\ +\xb8\x04\xb2\xae\xb1k&w\xc76-D\x87\xd6-D\ +\x8bf9V\xb6\xd9\x9a\x8d\xbb\xc4\xd6\x9dlG\xe7\x09\ +7\xef\xec\x1e\xc9$k.\xdd\xc7@d\x93t\xa9\x04\ +\xac\xdbw3\x14\xcf\x97\xf7\x01\x9f\xeb_\xb8$\xb8\xf0\ +\x5c\xa0\x89\xa4\x97\xf4\x0c\x9e>oAd\xfb\x81p\x05\ +\xe3iX\xe5\xf0\xe2\x8a.\x05d\x81C\x95\xb6N\xf7\ +B~c\xdf&\x07\x83\xc4\xe5\x8a\x85\x8c\x12\x8e\xff}\ +Ol+.\x19\xd0ED\xcf\xe8,N:\xb6U\xad\ +\x0f\xb2g\xdfA\xf1\xca\x9c\xcf\xac\xd4G\x16\xfc\xd1\x04\ ++\xba\xde\x06e\xe0\x81\xc47\xf8l\x0c\xe3\xe7\x0f!\ +\x19t\xb3\xd1\xf4\x134\xf7A8.\xb2\xdc\x08\xe1\xa4\ +\xe0\x0b\x1d\x0a\xc8\x8a\x99\x1c\x18\x95\xba0\x9c1\xb9a\ +O\x0a\x06\x88\xa9\x86\x13!\x8eW\xbf\x07\x94\xed\xee\xe1\ +}\xc5\xf7\xcf<\xc6*oQ\x9dO\xd7\xef\xb4\x94\xed\ +\xbd\xa5_\x89\xb5\x9bvY\x95\xa5\xda\xb5j.\xbe\xda\ +\xb6WL\x9f\xb7\xce\xaa\xc7\x92&\x9c\x85\x8ab\x22r\ +{y\xf1\x08\xadA~\xf8\x8c\x5c\x0d\x92)\xd8\xf5P\ +\xc0q\xf1\xfb a8\x19[\xe7\xca\xc2\xd9\xaf\x0d\xc4\ +W\x85\x0b\xbf\x0a\x98\x0by\x0d\xa2\x92\x12\xf8\x09\xe4d\ +H\xd2`9\x0c\x0c_s\x1a\xc4\xa9E2\xf0\xf4\xce\ +\xe2\xd9\x9f\x9d%\xda\xb64\xf0\xb9i\xd4\ +}\xdb~\x94\xc0=x/,\xf5[\x17\xd0\xfap\x8d\ +}\x1b\x1c~\x0e!2P\xf3\xe9\xc0\xe7^Q&2\ +\x93\x0d\x5c,\xe5#7\x0c\xf6\xdeV\xd0\xe0n\x07\x8f\x9bq^\ +k\xf8{\x9a\xd0\xf2\xcf\xb6\x13\x9c\x05h\x90\xe7,\xa8\ +-\x1d!\xa8)\x9eFd\xb6tb\x88\x96l0'\ +q\xf6<\xb99v\xf2\xd5\x9bs\xf9\x12\xa1\x91\xd4C\ +\x13\x14G\x5c0\x81\xe3\xe06\x16u]\xef\x8f\x91:\ +\xb4Q2\xec\xac\x07\x9f\xd0MP\x0aXEg\x08#\ +G~b=J\x8d\xb3t\xef\xdec\x1b\xe4?X\xc6\ +\xf4\x87\xd0pf\xe00\x89E\x0e\xb1\x86\x87\x8b\xa9]\ +_\xe8{\x1a0V\x91{\xfa\xb4<\x1c\xb2x\x19\xa2\ +9\xedr9\xe2\x9e\x88\xc5\x8eO\x87\xf8-~\x982\ +|'?Z\xc48;\xe6_\x88\xfb\xae\xfd\x96\xb8u\ +h/\xd1\xf6\xe2\x17-\x93KHl\xcf\x8b\xe5\xb6\xd9\ +U\xe5\xa3\xe2\xf1;\xe3\x04\xc3R%\xd2\xbe\ +\xd1t\xf7\x80\xac\x0a@\x93\x09\xf7\x08*0\x81\xc83\ +~\x0c\xbfv\xd6\xb8\xb3\x14;\x86\xdf\x13m~\x9d\xdb\ +\xab6\x17\xf7\x0du\xfe\x1d\x0c\xbcl\xdbY\x1d\xb0\xd2\ +\x82\x17\xde\xbd\xbe\xf4C\xd7\x9b\xaa\xc2\xd3\xcd\xcam\xd3\ +\x22\xeb\x91\x22~\x0e!\xdc\x98q&\x5ca=\x92\xe7\ +\xee\xf8\xd5\x0b\x9e\x9e-Xc\xafW\xd7:\xb1\x8cp\ +\x0f\xbc\x14J\x18V\xf7\xa1dy!N\xf3\x9b\x10\xa0\ +\xbf^\x05\x9e\x8e\x19`\x92vT\xb4\x8e\x15\x8eEz\ +h\x80V\x81\xbf2\xd7\xff\x07\x83\xce=\x0f#s\xad\ +\x13){\xadq)\x0e\xf1 R\x93B\xcc\xccn\x91\ +*Z\xc0\xe7eq\xa3d\x15\x0e\xf6c\x94\x0a\xcaf\ +\x14\x06]f\x8b\xfb\xfa\xa4i\xa55\xa0\x97\x8b!y\ +<\x5c\xa4\x8d\x9f\x19\xb0\x0aF\xaf0,_\x05\xcf(\ +j\x0c6C\x97\x9d\x82;\xbb\xf7\x1c\x08\xbb\xd4mM\ +\x8a\xa0$\x93\x0b\xa2\x13\xe8\xe9\x09\x82T\xc9\xeaM\xb1\ +\xbd\x0f<*\x05\xa8\xa6Y2z\xda\x97\xf2\x11\x1d\x0a\ +HT\xbb5\x0e\x8a_]\x81\x122\x09\x87\xc1\x8d\x16\ +\xdc\x0f\xd61Cc\xa2r7\x14\xd1\x09\x94\xd5\x01^\ +\x8f\xf9\xc72\x1e\xa3'\xf2\xa2\xe3\x83\xfa\x01T\xc1(\ +wY8\x1b\xf3@\xea\x1b]\x0a\xf8>D%[,\ +u4u$\xc6\xbdO}\xaa\xfaI\x05\x18\x0f\xa5Y\ +\x04\xf1\x0eR\x94$?:\x9e\xbeFVV\x95\xf1\xf7\ +\x1e\x11\x111\xd5UF\x15\x15\xd3\x1a\xc7\x9b\xeeV\xdf\ +\xe8\xb4r8Fd\x09\xb8\xa6r@\x93\x86\x1b\xe5\x0d\ +\x1a\x9f\x17\x89\xc5\x98/\x11\xd4\x89\xb4\xca8\xca\xa3\xb6\ +j\xf7hZ\x02~\x83\xd9Z%!\xdf\x02\x0a\xcc\xb4\ +\x03\xe6E\xcb~_U\xf0o\xde\x8f\xbf\xc9Hc\x9d\ +p\xdf\xcd\x88\x1c\xd9\xa2\xd6\xacs\x93\xea0)\x85N\ +\x05TMl\xa6\x9b.e\xb8V\xfe\xc0q9\x22\x12\ +a%R\xe9J\x0a)`I\x0d\x1aK\x8b0\x90\xce\ +\x09\xbeE\xf4\xb9\xac,\x91\xcd\xca\x0b4{\xd0\xe0N\ +\x9b\x96\x0ct5\xb2\xf6L\xca\x22\xe1\x05\xd1\xf1\xadc\ +\x22\xc6\xef\x89n\xae\x84%5;+\x22z\x1d\xdf\xc6\ +\x0a\xc2hsd3+\xc3\x8f\xd5\x1d\xe6-\xdf\x22v\ +\x94\xd5\xca\xe8\x9b\x8c\x91\x1b\x8e\x83\x89rm\x1d\x0f\xba\ +BT\x22\x5c\x98J:\xdd\xbe\xf5\x87N\x05\x1c\x02Q\ +\x09\xe8\xa4\xe1R\xba\xbe\x1df\x8d\x9bqa\xf5-?\ +\xdb\x06zan\x82\xb2\xa4\xec\x14\x8d\xbf\xc7\xa5\x91\xfb\ +\xb3_C\x92\x15@\xaa\x82\x11\xdf\xb4\x89\xbd\x8e\xf9}\ +z\xd9\xac\xc4S+^\x8f&\x1d\xe6\xc5$8\xf5\xfb\ +\xf5\xec F^\xd4C\xf4?\xb5\x83\x13\x01T\x13&\ +\xd9?\xf7\xda\x0a\xf1\xf4?\x12\xde6\xb5\xf2B|\x16\ +F\x1f\xf9\x85v\xc8\x94\x85\x02\xaa\xc1\xba>Z2\xf6\ +t* g\x8f\xc5\xf6\xad\x14\x5c~XUJ\x9a\xfc\ +(fC\x11\xb9\x0b\xb7w@\x0e'\x08'\x87G\x18\ +\x96\x12\xfbm\xf3\xfd\xfbg\x97\xce\x19\xa5|\xa4\x81\xf2\ +0I\x8a\xb9\x19\x87\x9b\x00\xa7\x86\x06u&\xe1s\xbb\ +A\x05\xa6S\xdf\x99\xf5N\xee\xd2J\x8c\x19q\x868\ +\xff\xf4N\xb5\x06a\xc1\xcaR\xb1\xe0\x93R1c\xfe\ +:Q\xbac\x9f\xa88p\xc8\xaa}C\x05\xfdh\xf5\ +\xd7b\xc5\x17\x09\xe1\x96\x97C\x09\x99k\xed\x07\x1e\x0a\ +eg4n\x9b\xf8\xddk1\x0b\xe9T@zFT\ +\x22\xa0\xb9\xcc\xd15\x97\x16P\x0a\xd6\x8c\xe1\xc9\x8d\xfb\ +)\x96\x07i\x09\xe1\xe7\xe1\x12[\xe5\x04\xa7\xa7f\x16\ +\x06\x88)\x83\xbe\xc1\xdf\xe4)\xf8)\xdeZO\xa4\xc9\ +y}\xbf!\x9e\xbf\xfd\x1c\xd1\xaeZ\x92=MMl\ +b}\xdf\x8b\x0b\xc4\xd25\xca\xd1\xdeQ|FU\xaf\ +Tu\xd8\xe7\x84e\xecd\xa0\x8dV[\x98\x98N\x05\ +\xe4\xa0\xa8\x9c\x84\xaf\x82\xfc\xcd\xbe\xcd,\xa0\x88\xcc\x91\ +\x18m?R\xe3\x8as\xbbY\xe5Er\xb2\x0f\xef$\ +\xb6l\xdf+.\xbes\x86X\x9a~\x9aA\x05\xf6\xc9\ +]\xcaf\x8cH\xf7d\xca\xb1\xf8\x8b}\x9b\x12\xfay\ +\xfd\xa6\xe8:\xe82\xc3\x90\xa4\xf5\xd0\x5c\x08\xad\x8d\x90\ +n0\xdb\xdc\x86\x0b=\x18\x0c\xd0\x90\xe6\xa2~\xc7\xd6\ +R>\xc2\x02JG\xe6\xfb2\xf3\xe5\x8aX\xcc\xb1\x9b\ +\xa6\x81\xcaX\xa8\x8esRt*\xa0L\xdaeut\ +\xfe\xed\xd0\x81\x12.\x8eTZ\xdb\x0e\xa9\xbd\xd3\x89\xc7\ +\xb4\x14cG\xd7V\xbe*.\xff\xaeR\xbdN7\xfa\ +`f\xbe,~\xaf\x8a\xcaJ\xa85S/\xa3\x95\xa0\ +\xae\xd9=\xab\xf0 \x14\x91&\x09:\xe5\x93r\xf7\xb0\ +\xbe\xa2eA\xe0\xa1}\xae-\xc34\xa3\xd5/e\x14\ +P\x03PB\xd61|\xdd~T\x1b\x9aX.\x1e\xe0\ +}\x80\xe6\x88N\xfd\xb7[@\xb42l%\x91,\xb4\ +\xab\xdea\x14P\x131\x11a>\xb4k\x84\xcfu\x17\ +zG\xd5W\x1c\xa8\x14\x0f\xffm\xb1\x98\xb3\xd8\xab8\ +\x822\xbe\xea\xf5\x85\x8d\xceS0Q\x99\x9eY\xae\x83\ +\x86\xdb\x06C\xfe\xc0\xa2\x9e\xf8F\x13\x92\x98\xf3\x9a7\ +\x11\x9f\xbdt\xa5\xc8kf\xef\xf3\x8b\xfe\xb9B\x8c\x9d\ +\xb6L\x1c\xdb\xbe\xc0*\xbe\xb4z\xc3N\xb1\xeaK\xad\ +E\xb8\xd6cF\xa6\x97I\x05*\xadlm@\xbaF\ +\xd3\xa9\x8c\xe6\x8a\x99\x015R6\xd3\xf2\xb0$\x14\xb3\ +\xec}|\x1bG\xf9\xde\xf8\xe0\x0b1\xfa\x8f\xef[\x0a\ +7k\xc1z+\xe5T\xb3\xf2\x91Ny\xd1\xf1\xa1v\ +\xca\xf6\x83Q@\xfd\xb0&\x8eC\xf7N\x87s\xcb\x9f\ +\x99\xaa\xc5\x1e\x9e\x92\x88\x88\xa9xl\xea\x14\xa3\x80\xfa\ +I\xf0owhm{;X\xc9\xf5\xdd\x8f\xb5D0\ +\xc9P\x97\x15\x1e\x940\x0a\xa8\x9f\x04{hv\x96\xfd\ +\x15\xbf\xbddc\x98\x81\xb5\x19c\xe47\x0a\xa8\x19\x9c\ +\xea\x126u[v\xd8\x11S\xef/\x0d\xb5\xc2C\xc6\ +t\x225\x0a\xa8\x99\xdd\xc5\x85,\xed\xeb\xb8\xab\xaa\x02\ +\x0b\x18R\x15\x1e1\x16\x06\xcd\x08\x8c\x02\x06\xc3\xca\xf8\ +\xd5j\x1f\xc1\x8c\xbe\xf2\xbd\xaa\x9e\xca\xb4\xd9\x1c9\x98\ +k\x14\xb0\x91\xc3\xfe\x22\x16T\xbe\xd7\xde\xfb\xdc\xeac\ +\x17\x12sw\x97\x0c\x0fo\xb7\xe9\x13\xa3\x80\xc1\xc0\xc8\ +g\x87;\xc7\xcd\x17=\x8fSM9I\x1bO\x97`\ +}\xc4(`\x00\x94\x15\x17\xd2[\xe04\xb8\xd9\xb8\xb5\ +<\xac\xc4\xfa-\xb1H\x84\xcd\xb23\x06\xa3\x80\xc1\xf1\ +@\xfcj1i\xf6\xea0\x96\xe1\x89\xe53\xf46S\ +\x0c\x1a\xdd\x0a\xa8\xf23\xcf\x18[U:`\x16dr\ +}B\x95(\xb6\x90\x0d\x9058\xfd>\x18\xbfWE\ +e,\xeau<\xa0J\xa2\x8aLBv\xa6\xf3\xfd\xf8\ +5\x0c\xee-+\x1e\x99nqx\x95\xb1\xd0Z\xa3F\ +\xb7\x02\xaa\xe4\xa9\xca\xa4:f4\x98\x05W\xe1\x92N\ +\xef5U\xc6\xe2o\xc9\xe6t\xb8\xa12\x16\xbar\x91\ +-t+\xa0\xca\xfe\x83\xfd\xe7\x1a\x90fx\x06W\xb8Ub=@\xb7\ +\xb1H&\xac\xa2U\xef\xa1M\xc9\xed\xcd\xcb\x08K\xd0\ +\xb2(d\x98Mb\x1a\x03M ,\xa6\xc4*XT\ +\x84\xf8mw\xc5\x0fM\xb3\x0ekV0\xcc\x9d\ +{\x15\x1a\x5c\xf9|u\xfe\x04\xf1\xec?\xd7\xc0a\x83\ +\x9b\xe1\xf6\xad\x03-\x1b,\xb5\xc5%\x96\xd9q4\xfb\ +\xd0\xe4\xe5Wy\xd8@h\x94}[\xff\xe1\x14_\xfd\ +\xd7\x13\xa4dT)\x0a\xcd\xf0\xb3\xbb}'\xba\x85I\ +N\xac#\xad\x1d\xddv\xc0*h\xb7\xca\xa8\xc8\x5cC\ +R8\xfbi\xa9\x09]\x93\xa0\x14\x90\xb0\xcd{\xa8\xb9\ +\x88\x86@\xe0\xf6FKK\x067\x82T@\x86\xed\x9c\ +\x0a1J\x98\xb9\xd0\xa9\xc0\x89DkU\xd4\xea\x04\xa9\ +\x80\x84\x05\xad;A\xfel=2d\x0a\x0cp\xe0\xe1\ +\x8e\x01\xb5Je\x88U\x09Z\x01\x09O\xae\xc3 l\ +\x00\x13t\xbb)\x83?\xb8j\xb1\xe3\x15-\x18<\xe0\ +dT~\x89,4\x0b\xdc\x08a\x8f\x10\xe6\x90\xb8\x9d\ +\xbaT\xc4\x9c\x82\xfd\x09W\xa9\x12H!$\xf4\xaaZ\ +A\xd9\x01U\xa0\x81\xb47\x84\xfb\xc5\x13 \xfc\x12\x8e\ +\x86T\xf5\xfdHE\x83+t\xa9\x00\x15P\xa6\xb0$\ +\xbb*\xd1\x90\xcc\xe69\x5cR\x19\xd1\xc2\x16c\xf4\xed\ +R\xd2n8\xed\x97\xfa\xa0\x80\xc9\xa01\x95\xc2\xa4\x99\ +f\x10\x860Q\xaaC#\xb5j\xc3\xec\x86\x04;T\ +U\x87\xab\x0a\x85J\xc7%\x951\x84\x0c\x82\x0d%1\ +\xd9`0\x18\x0c\x06\x83\xc1`0\x18\x0c\x06\x83\xc1`\ +0\x18\x0c\x06\x83\xc1`0\x18\x0c\x06\x83\xc1`0\x18\ +\x0c\x06\x83\xc1`0\x18\x0c\x06\x83\xc1`0\x18\x02D\ +\x88\xff\x02!B^Ai}j\x1b\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x07\xa2\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\ +\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\ +\xde\x01\x17\x07\x12\x0c`C\xbb\x14\x00\x00\x07/ID\ +ATX\xc3\xc5\x97mh\x1c\xc7\x19\xc7\xff3\xbb\xb7\ +\xb7w\xb7\xb7wZ\x9f\xac\xb3\xa2\x5c\xb1ld[\x96\ +\x0c\x09\x0e\xd4/\xd8\xbe\xbc4\x91\x8d\xeb\xb4\xa9\xc0\x04\ +5\xe08qI\xfa\xd1\x946\x04\x13A\x08\xb4\xfd\x10\ +h\x8dK?\x04\x0cI\x09\xa4\xb4`\xe2&\x02\xd7$\ +N\xfcB\x83cc\x8c.\xb2\x15\xcb\x8e,\xc9\xb2\xa4\ +{\xd3\xbd\xec\xed\xed\xcbL?\xec\xadt'\x9f-\xa7\ +-t`\xd8\x99\x87\xddy~\xf3\x9fg\x9e\x9d\x01\xfe\ +\xcf\x85|\xcf\xf7)\x00\x05@\x10\x80\x04@\xac\xd9\xec\ +Z5\x01\xe8\x00J\xffk\x00\x11@\x0c\x80\xea\x19\x12\ +\x80\xb8\x13\x889\x00\xce\x01\xe9\xdb.\x80W\x18\x80<\ +\x80l\xad\xfd\x9f\x03\x84\xc3a\xcd4Mm5\xe7\xf2\ +\xafl{G'\xe7{\x15`+\xe1\x5c\xa5\x8ab\x10\ +\xce\xa9S.K\x8c\x90B\x098w\x83\x90\x93\xbf\x17\ +\xc5/'\x08\xb1\x01\xd8\xd5ju\xf6A\x8a<\x08\x80\ +\xc6b\xb1x\x18P~\x9b\xcf\xff\xb4\xd3q~\x1dy\ +\xec1Y\xdb\xb9S\x0e\xf6\xf6B\x88\xc5@(\x058\ +\x07\xb7m8\xe94\xca\xc3\xc3\xc8\x9c9c\xcc_\xbd\ +j\xdc\x12\x84w\xde\x88F?.\x11\xc2\x0c\xc3\xc8\x16\ +\x8b\xc5\xec\xf7\x01\xa0\xed\xed\xed\x1d\xc9ju\xe5/s\ +\xb9\xe3Zww\xd7#\xaf\xbc\x22\xf9\x12\x09X\xb3\xb3\ +\xb0\xd2i0]\x07w\x1c\x801\x80\x10\x08\x81\x00\xc4\ +\x15+ \xb5\xb6\xc2\xbc}\x1bS\xc7\x8f\x9b\xb9\xd1\xd1\ +\xe1?j\xda/\xce\xc9r^\x10\x84\xd2\xf8\xf8\xf8\xdd\ +\xa5\x8e\x84f\xde\xbb\xba\xbaV\xed\xcf\xe5\xba\x0e\xe4\xf3\ +'~\xb0\x7f\x7f\xa2\xfd\xf5\xd7Ek~\x1e\xc6\xf5\xeb\ +\xb03\x19\xf0J\xc5u\xecU\xdb\x06\xabT`\xa7\xd3\ +\xa8NNB\x08\x85\x10\xdb\xbbW\xf0\x0bB\xdb\xc6\xaf\ +\xbf\xfe\x09\xf3\xfb?\x1d\x8fDLM\xd3h&\x93\xd1\ +\x1f\x08\xb0~\xfdzm\xbb\xe3\xb4\x0f\xcc\xcc\xfc\xb5\xf3\ +\xb5\xd7\xe2\xeaSO\x91\xf2\x95+\xb03\x19\xc0\x9b1\ +\xe7\xee\xd3q\x16l\xa4\x0e\xc6\xce\xe5`\xcd\xcc@\xdd\ +\xb6\x8d\x04W\xae\x0c=z\xe1\xc2\xd3\xa3\x9a\xf67]\ +Q\x84\xd6\xd6Vcff\xc6j\x0a\xb0k\xd7.Q\ +\x92\xa4\xb6\xdf\xa4R\x7fzt\xdf\xbe\x9e\xe8\x93O\x92\ +\xd2\xa5K`\x86\x01\xc2\xb9\xeb\xac\xde\xb9\x07S\x07\xe2\ +=\x99a\xc0\x9c\x9aBx\xf3f\x88@h\xc3\xc5\x8b\ +\xebNwt|\x22\xcb\xb2\x7fbbb\xbe~_/\ +\x14I\x92\xb4\x83\xdf~\xbbYmk\xdb\x1c\xdb\xbb\x97\ +\x96._v\xe5\xb6m\xc0\xb2\xdc\xc1-\xcb\xad\xb6\xbd\ +\xd8\xaf\x01\x10\xcff\xdb \x8c\x81W\xab(]\xbc\x88\ +\x15{\xf6\x88-\xf1\xf8\x0f\x0f\xdd\xbe\xdd#I\x92\xd4\ +\xd7\xd7\xa76\x05\xf0\xfb\xfd\xc1\xde\x5c\xee\xedG\x06\x06\ +\x94\xca\xd8\x18X\xb1\xb80\xe0\x02\x84\xd7\xae\xef\xd7\x03\ +y \x96\x05b\xdb`\x85\x02*\xa3\xa3h\x7f\xe1\x05\ +\xa5gn\xee\x1dUU\xe1\xf3\xf9\x94{\x00\xfa\xfb\xfb\ +\xe5\xfe\xe1\xe1\x9eP<\xde\xee\xef\xec\x849>\xbe8\ +x\xbdc\x0fh)L=T\x0d\x84\xd7l\xe6\xad[\ +\xf0'\x12\x08\xb6\xb4$~\x9cJ\xadU\x14E\x1e\x1c\ +\x1c\xa4^\x86sS\x9d(*\x89\xb9\xb9=\xb1\xdd\xbb\ +\x83\xd6\xf4\xb4;\x10\x00N\x08\x08Y\xdc\xad\x84\x10p\ +\xce\x01B\xdc\xb8\xe0\x1c\x1ch\x0cN\xce\xc1+\x158\ +\xb9\x1c\xd8\xfc\x1d\xe8\xea\xa2\xa6\x07\xe09&\xa4\xa1\ +M\x00\xd7\x99W8\x07,\x0b,\x9fw\x1d\xce\xcf\x83\ +U\xab\xe0\x9c\xbb\xb0\x9c\xc3\x9a\x98@p\xe3F\xaa|\ +\xf5\xd5\x8fT\xbf\xff\x0fz\xb5*5(\x10\x8dF)\ +u\x9c\x98\x10\x89\xc0\x19\x1b\x03\xb7,\x10B\xdclW\ +\x0fQ\x9b=8\x07/\x97\xc1k3d\xba\x0e0\xe6\ +\xaa\xc1y\x83j\x1c\x80],B\x8cD\x00\xc6V\xca\ +~?\x14Ei\x5c\x82@ @9\xe7\x0a)\x97a\ +_\xbf\x0e\xaa(\x80(\x02\xa2\x08\xc29\x98\xb7\xc6\x86\ +\x01\xae\xeb\x80a\xb8r{\x0e\x01\xc0K\xcdMR,\ +/\x97!\x84B\xa0\x8c)\xfeH\x04\xa2(\x8a\x0d\x00\ +\xaa\xaa2\x00\xe0\x95\x0aX&\x03\xe7\xee]\x10J]\ +\x15\x96T/\x16\x1a\x96\xa8&\xb5g\xe3\x0d\xde9 \ +\x08np\x02\x08\x85B\xe0\x9c\xdb\x0d\x00\x92$\xd9\xa0\ +\xb4\xc0t]\xa3\xc1 X\xa1\x00R\x9b\xc9}\x01\xee\ +\xf9\xb3\x90\xc5\xd8\xa8\x8f\x11B \x84Bpt\x1d\x9c\ +\xd2\xbc,\xcb\xf0\xfb\xfdv\xc36\xf4\xf9|&D\xf1\ +\x8e\x9d\xcdBhi\xb9'\xf8H\xdd`\x0b\xcaP\xda\ +\xd0nx\xd7\xfb\xb6f\x13ZZ`e2\x80(N\ +*\x8a\xc2\x14E1\x1b\x00B\xa1\x90nE\xa3\x1f\x97\ +\xc6\xc6l\x7f\x22\xe1\x0eZ\xa7\x00<\x05\xee\xa3\xcar\ +\xefJ\x89\x04\x8acc\xb6\xd5\xd2\xf2\x0fQ\x14q\xf3\ +\xe6M\xa3\x01\xe0\xc0\x81\x03F\xf1\xf1\xc7?\xc9|\xf3\ +\x8d!\xadZ\x05\xe2\xf3-\xaa\xd0\xa0r\x9d\x83\xfae\ +\xa9\x8f\x89\xfa%\x01@|>H\xf18r\xa9\x94Y\ +N&\x874M\xd3\x07\x07\x07\xd9=\xa9\x98\x1e>|\ +\x8d9\xce\xe5\xd2\xc8\x08\x02==\xcd\xd7\xb8N\xe2z\ +\xe7\xa4^\xfa%%\xd0\xdb\x8bb*\x05F\xc8\x05\xeb\ +\xa5\x97\xee\xaa\xaa\xaa7\xfd\x17\x08\x82P\xa8<\xfb\xec\ +\x91\x99/\xbe(Ik\xd6@lm]\xb2\x97\xdc-\ +\xc6\x81\x85$\xb3P\xbd\xc8_\x92\xa0\xc4\xb66H\xab\ +Wc\xfa\xec\xd9Ru\xdf\xbe\xb7$I2\x93\xc9d\ +\xa9)@2\x99\xb4\x83G\x8e\x5c\xb5B\xa1\x0f\xa7O\ +\x9e4\x94]\xbb \x84\xc3\xf7@x\xb5>\xd3-\xd4\ +\xfa\x09E\x22Pv\xec\xc0\x9d\x93'\x0d'\x1c\xfe\x8b\ +\xff\xf0\xe1\xc9@ \x90]\xf6Hv\xf9\xd4\xa9v\xfe\ +\xfc\xf3\x7f\x8fm\xd8\xb09\x96L\x8a\xfa\xf9\xf3\xb0\xa7\ +\xa7\x9bn\xc7E\xaeFE\xc4x\x1c\xc1\xed\xdb1\xf7\ +\xd9gv\xe6\xda\xb5\x7f\x05\xcf\x9f\xff\xb9%\x08\xf9M\ +\x9b6\xe5\x97=\x92\xfd\xf9\xfd\xf7\xcb\xf3\x81\xc0\x97\x85\ +\x8f>\xdafNM\xc5\xb4g\x9e\x11\x84h\x14,\x9b\ +\x05\xb7\xac\xa6\x87H\xcf1\x0d\x06\x11x\xe2\x09\xf8\xbb\ +\xbb1u\xe2\x849\xff\xddw\x97\x94\xf7\xde;\xa8\xf6\ +\xf4\xe4\xd7\xae]\x9b}\xe8Sq\x7f\x7f?}\xe3\xd5\ +W\xe3\xfc\xc5\x17\x7f'\xea\xfa\xcfV\xed\xdc)+\xbd\ +\xbd\xb0\xd3i\xd8\x93\x93`\x85\x02\xb8a\xb8\x83\xc82\ +\xa8\xaaB\xec\xe8\x80\xb8b\x05\x8a\xc3\xc3\xb8\xfb\xf9\xe7\ +&\x0b\x87?T\x86\x86\xde\x9e3\xcd\xfc\xd6\xad[\x1f\ +\xeaTL\x97\xf6O\x9f>\xad\x86\xdf}w\xab\xef\xcc\ +\x99\xb7\xa8\xe3l\x8atwS\xb5\xb3S\xf4i\x1ah\ + \xe0\xdeB*\x15X\xd9,Jccfnd\x04\ +L\x10\xae\xd0\xdd\xbb\x8f\xf07\xdf\x1cM\xa5R\xd9\x81\ +\x81\x81\xa5\xf7\x02\xd6\x0c\x80\xde\x0f\xe4\xd0\xa1C\xd2\xc0\ +\xc0\x80*\x7f\xf0A\x17N\x9dzFL\xa7\x9f\xe3\x96\ +\xd5\xc1m;\x0a\x00T\x14\xb3\xdc\xe7\xbb\x83\xd6\xd6O\ +\xed\xbe\xbe\x7f\xd2\x97_\xbe377W8z\xf4h\ +ahh\x885s\xec\xb5\x1f\x0a\xc0\xebo\xd9\xb2\x85\ +\x1e,\xb9\x14E;\xcek\x07\xbb8\x98\xb33\xf3\xfb\ +\xfe\xdf\xf7\xcd7\xb3\x82Oi\x17.\x5c\x18\x0f9|\ +Ob<\xab\xd0\x03\x80\x89\xd6\xbe\x14\xc6|\xa0\xbc\x1f\ +\x17W\xaa\xff\xfe\xfc\xf3\xcfw?i\xbe\xf8\xa4\x1f\xce\ +\x9d;'\xd3#\x89\x1f\x19B~{,;\x9e\xf0}\ +-K\xe5\x0a\xedv\x9bd\x22A*\x95`\xadZi\ +\xae\x16W\xab\x9e\xef}\xf3\xe9\xd3\xcf\xbc\xf6;\x03\xce\ +\x9d;'\x87\x86\xe3\xbf4-\xfb\xd8\x9bo\xbe\xe7\xbe\ +\xf9\xd6\xaf0\x0c\x89\xeb8\x18R\xd2\xf1\xba\xd4ju\ +\xc6\xc6\xc6x\xee\xcc\xd7\x18\x88G*]\xcf\xfb\xeb\xd3\ +\xa7\xbe\xf4\xaf\xbf\x13\xe0\xb5\xff\xfd\x9f\xb3\xd7fo\xfe\ +\xc5\x7f\xbf\xf2Sk\xd7\x8eq\xacp\x88\x5c~\x99j\ +\xb5\x8e\xe7\xf9\xd8N\x98t*E2\x11'\xbfR\xc0\ +\xb6]\xbe\xf5\x8d?)IK\x9c|\xfa\xa9\xaf^\xfd\ +\xad\x80\xf3\xaf\x9f\xdfu\xe1g\xbf\x9c\xfdh\xe1#w\ +b|\x94\x99+\xd7\x19L\xc6\x19\x1b\x1d&\x1a\x8b`\ +HI\xab\xdd\xa1X*s\xf7~\x8e\xa8\xeb2>6\ +\xca\xed\x8f\xee\xf3\xe2\x8b/\x5c\xfd\xd33_\x9f\xfa\xad\ +\x80\xbf\xf9\xfe\xdf\xbe~\xf7\xee\xe2\xa9t:\xc9\x877\ +n1\xfd\xd9)\x1c\xdbF)\x8d\xd6\xaa\xff\xd4Z\xa3\ +\x94b)\xbf\xc2\xdd{9\xa6\x1e9\xc0\xc2\xdd\xfb\xea\ +\x9b_\x7fv\xfa\x85\x17\xbes\xf1c\x01\x07\x8f\x1dK\ +\xed\x1c\xca\x14\x0e\x1f\xda/?\xb8<\xcb\xe7\x1e\x7f\x0c\ +!%Z+j\xf5:\xb9|\x81V\xbb\x83e\x9a\x0c\ +\x0d\xa5\x88\xb8.Z+*\xd5\x1a\xb7\xef\xdcg\xf7\xae\ +\x9d\xb4\x9a\x9d\x8b\x95j\xe5\xcf\x7f\xf6\xea\xab\xbf\x010\ +6\x16?\xf3\xdcs\xcf\x0c%\x06\xdf\x98\x98\x18q\xae\ +]\xbf\xc9g\x8f\x1c\xc24\x0d\xfc\xc0\xe7\x83\xcb\xd7\xb1\ +\xed\x08_:\xfd\x05\xfe\xf0\xf4\x17\xf9\xfc\x93O\xd2h\ +\xb4x\xfb\xbd\xdf\x90\x8c\x0f\x10\xb6Bx]\x1fa\x08\ +\xea\xcd\xce\xf0cG\x8e>][+\xfd[>\x9fo\ +\xf7\x01\xc7\xff\xe0\xf4?;\x8e}\xc0\x0e\x87d\xab\xd5\ +ftx\x08\xad53\x97\xaf\x91\x1d\xcd\x90\x19Lq\ +\xe5\xcae\xdey\xfbW\x5c\xb9z\x99\xbd\xbb\xf7\xf0\x95\ +g\xbe\xcc+?=O*\x99\xc0u\xc2\xdc\xb8y\x87\ +X\xc4\x09\x9ex\xe2\xc9\x81Ry\xcd\xbc6{\xe5\x17\ +\x06\xc0\xe7\x9f\xfa\xa3\xfdO\x9d<\xfe\xc3\xb9\x9b7d\ +\xb5V5\x87\xd2I\xec\xb0\xc5\xeaj\x99by\x8d\x90\ +\xd4\x94\xca%\xba\x9d\x0eJk:\xed\x0e\xb7n\xdd\xc4\ +\xebzLNNr\xe3\xe6<\xaecSk\xb4H\xc4\ +c\xb2Zo\xd6S\xa9\xc1t8d\xfc\x8b\x04\xd89\ +>\xf2\xd2\xfe\xc9\x03\x89\xb5j\xd5l\xd4\x9b\xf8*\xa0\ +\xd5ns\xf7\xfe\x12\x03n\x98@)T\x10\xac?\x15\ +J\x05\x04\x81\xe2\xe2\x07\x17\x09\x19\x92\xe5B\x91V\xbb\ +\x83\x14\x92NW\xb1\xb2\x9c\xb7N\x9e8q8\x9a\x1c\ +|\xd1\x04\x88\xc7\x13\x8f\xc4\x07\x06\xf8\xc7\x1f\xfc\x83Y\ +\xabU)\x96J\x14\x0a+\xb8\x91A\x02\xdfC)\x8d\ +\x14\x02/\xe8\x22\x85\xc44M\xac\xb0Mvd\x84\xe1\ +\xe1a\xfe\xea/\xf7QX)\x92\x19\xce02<\x82\ +eYvauU\xb9n\xf43\x02\xe0\xe9\xaf>{\ +l \x16})l\x87\x9f\x09[a+\x91\x8c\xe3\xd8\ +\x0eBJ\x22N\x84D\x22N\x22\x91 \xe2F0M\ +\x13\xcf\xeb\xe2y\x1d\x94\x82R\xa9D>\xbfL\xa3U\ +\xa7Vk\xe0\xfb]\x16\x97\x96+\xa8\xe0\xbb\x11;\xf4\ +\x9f\xfd4=r\xf4\x89\xe3\x13;F\x7f\x12q\x9d\x94\ +\xd6\x8aLz\x90{\xf7\x96\xa8\xd6\xea\xd8a\x93 \x08\ +\x00\x81R\x01J\xe9\xf5Y\x1a\xdfW\x18f\x88\xec\xe8\ +\x10\xb7\xef\xe588\xb9\x9bKWo\x5c{\xff\xed\xb7\ +\x0e\x01H\x80\x1f\x1e\xc2\x9a\xf6V\xbf,U\xe0fG\ +\x87Y)\x94P* \x93\x19\xa4\xd5\xe9\xa2\xb5\xc2\x90\ +\x12)@\x0a\x81!{_)\x04m\xcf'\x9dN\xd2\ +nw0\xa4\x81i\x9a8\xda\xcb\xfc\xe8`\xe2T\x1f\ +\x90\xd4\x89\xbf{\xea\xe8\xe1\xef[\x86a;v\x98X\ +\xc4\xa5\xb0Z\x06`\xf7\x8e,\xc5J\x1d\xa5\x14A\x10\ +\xa0\xf5\x86\xf5P\xa9\xb7\x19J\xa7\x90\x02\xf2\x852{\ +w\x8d\xa3\x94\x22.T:f\x8a\x9f\x9c\x9d\x1c<(\ +\x01\x0c\xc9d*\x1e3\xb5\xef\x13\x04\x8a\xfd\x93\xbb\xc9\ +-\xaf\xb2V\xadc\xdbaR\xc9\x04\xcd\xd6\xd6\x92\xdf\ +\xf5|\x1c'\x8ck[,\x17J$\xe21\x5c\xd7A\ ++\x05\x02\x12!\xa1\x02\xa1\xd2rc\x82W)\xa2\xb4\ +B)\x85\x10\x92#S\x07Y\xcc\xaf\xb0\x94/\x90N\ +\xc5i\xfb~\xdfz\xad5\x8d\x8eG\x22\x16a1_\ +\xc4\xb6mv\x8c\x8f\xf6T*\xb5\xc5\x90> hT\ +A\xf5\x00J)\xacP\x88\xc7\x1f=\x84m\xdb\xcc\xdf\ +\xb9\x8fD\xe0\x07\x9b\x93\xb5\xd2\x14\xd7\xea\xec\x1c\x1fe\ +\xd7\x8el\x7f\x9eR\x0a4l\x8c4\xfb\x80\xda\x1a\xb1\ +T\x96\xd1\xd1Q\xb4\xeeY\x89\xd6\x8ce\xc7\xa8\xd5\x9a\ +\xbc\xf3\xfeE\xca\xe52a\xd3@ip\x1c\x97\xe3\x9f\ +\x9b&\x1au\xd1Z\xa35\xa05\x8dV\x8b\xe2\x87\xd7\ +\xfa\x86l\x02\xeaU\xc6\xa6&8\xf6\xf84\xfd$\xd4\ +\xbdT\xac\xd5\x1a\x1c:>\xde\xef\ +o\xd8\x11O\xa4h4[\xdb\x00\x8e\x1d&\x16u\xb7\ +\xa4o\xadV\xdf4\x7f\x03\xb0QZn\xcc\xcd\x91\xce\ +f\x09[\xf6\xba\x82\x9e\xd8Bq\x8d\xcaZm\xbb\x82\ +\x98K*1\xd0\x8b\xd5:`\xf6\xda\xec\x03.{\xc8\ +EZ\x83i\x18\x98!c\x8b\xec\xb0\x15\xc2\xb6\xadm\ +\x00+\x14\xc2\x0c\x99[\xc6>\xdc\xb6\x00F\xb3\xa3\xc4\ +b\x03}\xeb7&\xd9\xe10B\x1a\x18R\xa2\xd7k\ +\x92\xe7\xfb\x08\x04hA(\x14\xea/x\xf8\xd0\x14o\ +\xcd\xdf\xd8\x1ed\x80p\xd8!\x99L\xf6\xfd\x09P\xab\ +5H%-\xf6\xee\xdd\xc3\xd0P\x06\xc7\xb1i\xb7\xdb\ +\x94\xcb\x15\x16\x16\x16\x98\x9b\x9b\xc30$\x9fy\xe4 \ +B\x08\xecF\xfd\xe3\x15\x00,\xcc\xdf$\xbbs\x02\xdb\ +q\xd6\xfd/\x89FbLO\x1f\xe5\xd7o^\xe0\xbd\ +\xfb\xb3\x04\xed\x0a\x0aA8\x96ad\xf7\xa3\x9c8q\ +\x9c\xd7^{\x9d\xd9\xd9Y\x92\xa9$3\x97.}2\ +@\xa3\xe9t\xbb z%J \x18\xce\x0cSX\xba\ +\xc5\xf2\xcc\x7f\xe15\x0aXN\x14\xa1\x02\xea\xf9\x8b|\ +T\xba\x8d:\xfag\x08!X\xb8u\x87x\xb1\xbc\xa5\ +\x9co\x03\x0c\xc4\xe3t:]\xda\xed^n\x1b\x86\xc9\ +\xeaj\x91\x93'\xff\x98\xa3\xbf\xffsVW\x16\xa9\x16\ +\x97\xe9z\x1e\x98\x11\x0a\xc5\x0a\x8b\x8bK\xd4j5\xf6\ +\xee\xdbKn)Gf(C\xf5\xd6\xcd\x8f\xdfh\x13\ +\x13\x13\x9c:yjS\x91\xd6\x5c\x9a\xb9L\xb7\xdb\xc5\ +0\x0c\x22\xb1A\x8cP\x84V\xabI\xb5Z\xc3\xf7}\ +\x82 \xa0\xddn35u\x184\x1cy\xf4\xf7\x98\x7f\ +\xe7\xad\xed\x0a40\xf7\xe1\x1c\xca41\x8c\xfe}\x8c\ +\x88\x1b\xe1\xfa\xf59\x0e\x1e\xdc\x8fR\x8an\xd7\xc3\xf7\ +{\x8bv:\x1dJ\xa5\x12\x96e\xf1\xce\xdb\xef\xe2D\ +l\xce_8\xff\xc9.\xeav\xbbL\xee\x9bd``\ +\xa0\xff\xce\xf7}\xde}\xf7]\xd2\xe9\x14\xd1h\x94N\ +\xa7K\xbd^\xa7\xd9l\xd2j\xb5\x99\x9f\x9f'\x95J\ +1\xb9\x7f\x1f\xc9d\x82\x5c>\xd77x\x9b\x82\xc5\xfc\ +\x0a\x7f\xff\xd2\x0f\x18\x1c\x1c\x04!z{\x01\x18\x1e\x1e\ +\xa6Z\xadr\xe2\xc4\x09\xc6\xc6\xb2\x04A@.\x97\xe7\ +\x8d7\xde`ye\x85\xd9\xd9Y^y\xf5U\xd0\x9a\ +R\xa9\xc4c{w\x80\xd0[\x01\xdd\x00r\xcb\xcb\xec\ +\x9b\xdc\xc7\xd9\x7f:\x8beYx\x9e\x87\xef\xfbx\x9e\ +G\xb1Xdff\x86\xf3\xe7\xcf\x13\x04\x01\xae\xeb2\ +==M<\x1e\xef\x8f+\x14\x0a\xbc\xfc\xf2\xcb\xdcY\ +-\xc3\xd0C\x0a\x024\xe3\xe3cT*\x15\xbev\xe6\ +\x0c\x11\xd7exd\x84\xfd\x93\x93\x8c\x8c\x8c\xe0\xba.\ +\xe1p\x98={\xf6P\xab\xd5h6\x9b\xcc\xcc\xccp\ +\xef\xde=\x16\x97\x96\xa8T* \x04;v\xed\xa0U\ +\xa9\xa0u{{\x0c\x00\xc2\xb6\x0dB\xd2h\xb5\xb9\xb5\ +p\x9b[\x0b\xb77=\xaa{\x9e\x03\x10\xd2@J\x81\ +\x94\x06\x86a`9.\x96eaY\x16\x0f\xd6\xdd\xfe\ +\xa1\xaf\x01\xa5\xd4\xe6F\xd1\x1a\xc1C\xffP\xc4F\xe5\ +\xedS\x10R\x82\x10\xfd\xd3o\xa3\xb2n\xc9\xa2n\x80\ +\x0c\x82\x80 \x08\x084\xbd\x0b\x96R\x08!\x10B`\ +\x18\x12\xb1\xbe\x984\xe4\xfaA\xa4\xd0Z\xe1w\xfd\x1e\ +\xb0\xf7\xc1\xf3\ +\x00\x19\x9aU\xea\x0688\x04\xc6\x8a\x94\xbd\xde\xe5\xdd\ +}\x9ds\xfb\xb7\xa75\xbf\x1f\x94\xdar\xb4\x9a\xd6]\ +R\x00\x00\x0dxiTXtXML:com\ +.adobe.xmp\x00\x00\x00\x00\x00<\ +?xpacket begin=\x22\ +\xef\xbb\xbf\x22 id=\x22W5M0MpC\ +ehiHzreSzNTczkc9\ +d\x22?>\x0a\x0a \x0a \x0a \x0a \ +\x0a <\ +rdf:li\x0a stE\ +vt:action=\x22saved\ +\x22\x0a stEvt:ch\ +anged=\x22/\x22\x0a \ +stEvt:instanceID\ +=\x22xmp.iid:1c7c1d\ +40-4c31-4f33-bf2\ +6-be1e708601ce\x22\x0a\ + stEvt:soft\ +wareAgent=\x22Gimp \ +2.10 (Linux)\x22\x0a \ + stEvt:when=\x22\ +2023-11-10T20:05\ +:47+01:00\x22/>\x0a \ + \x0a <\ +/xmpMM:History>\x0a\ + \x0a \ +\x0a\x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ +\x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a\ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \x0a\xf1\xc9\xac\x91\x00\x00\x00\x06bKGD\x00\xff\x00\ +\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x00\x09pHYs\x00\ +\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\ +tIME\x07\xe7\x0b\x0a\x13\x05/\x17>\x84\xda\x00\ +\x00\x00QtEXtComment\x00C\ +opyright INCORS \ +GmbH (www.iconex\ +perience.com) - \ +Unlicensed previ\ +ew image\xb6\x9ai\xa6\x00\x00\x04&\ +IDATh\xde\xedZ\xcfK#g\x18~\xbeI\ +\xa6\xeca\x97^\x8a\x0a\x8a\x99,\x0e\x0b\xbb\xd0X\x13\ +0\x06z\xde\x93\xdeV\xf4\x10\x03\xe2A\xbd\xf5\xb2\x97\ +\x1e\xc4k/\xed\xa5\xf8\x1fD\xf1\xd6H/{\xf0\xd0\ +\x96d\xc4Lk\x96\xaeP\xba\xc4\xc4U0\xd2K*\ +\xa563\x99\xb7\x87Mf'\x93\xf9\x11g&k\x04\ +_\x08L\x86\xc9|\xcf\xf3\xbc\xcf\xfb\xbd3\xdf\x17F\ +D\x84;\x1ca/?\xea\x07g\xc6\xd8\xc7#\xe0u\ +\xb0~\x04\x87;\x1e\xf7\x04\x06\xaa\x88\xc7\xc6\xc6\xc0\xf3\ +<\x14E\xc1\xd9\xd9\xd9\xdd\xcb\x00\xcf\xf3\xfa\xe7c\x87\ +\xa65\xf1\xea\xe8;\x9c\x5c\xfc\x0aMk\xf6w\x16\xea\ +GT/K\xb8\xa8K\xb8\xa8K8\xaa\x0a\x88E\xe6\ +!\x0c\xc5\xc0q\xa1\xc1\xaf\x01Mk\xe2\xa8\xba\xab\x7f\ +\xbf\xba\xae\xe0\x97?\xbe\xc1\x0f\x87_\xbbf\x84\x1b\x14\ +\xf5\xaf\xae+]\xe7\xaf\xae+\xf8\xb9Ed`-d\ +V?%~\x85\x10\xc7\xe3\xa8\xba\xab\x93\xfa\xfb\xba<\ +\xb8\x04*\x06\xf5\x1f=\x10\xf0x$\x01\x8e\x0b!2\ +\x14C\xe5\xb2\x84Ruwp\x09hZ\x13%\x83\xfa\ +\x93\x91y\xbdh9.\x84\xc7#S\x10ZD\xac\x9e\ +\xc7\x18c\xefk\xe0\xb6\x1eH\xab&\xf5#C\xb1\xee\ +\x22m\x11\x09\xa4\x88\xeb\xff\xd4\x00P_\xbcoT\xbf\ +/\x8f\x12\x9a\xd6\xc4\xfe\xef\xdf\xa2\xf86\xd7#\x09\xc2\ +\xeb\xca+\xdbi\xb0\x17\xf5\x03md\xed\x01\x8f\xcf\xdf\ +\x0f\x9a\x98\x98\x03\xc0l\xc1\x17\xdf\xe6p|\xbe\x0d\x00\ +]\x8d\xc9\xac~\xcc\xa3\xfa=\x130\x0fx|\xbe\x0d\ +\x06 nI\x82 \x1b\xc0\x1b\x1bS\xa9*`22\ +\x8f\xa6\xa6t\xa8/xT\xbfg\x02V\x8d\xe6\xcd\xf9\ +6\xa8+\x13\x9d\xca\x03\xc0'\xa1O\xd1h\xd6;\x1a\ +\x931&}\xa8\xdfS\x0d\x98\xd5\xff\xec\xe1\xe7\x1d\x99\ +\xf8P\x13\xdd\xe0\x9f\x8d.\xe2E\xea{|\xf9\xe4%\ +\x1e=\x10\xba\xee\xed\xc7\xfb=g\xc0\xdch\x9e\x7f\xf1\ +\x12\xbf\x95\x7f\xd4\x81\xb6\xed\xd4>n\xc7\xd3\xd1E\xdd\ +b\xd1\x91\xa9\x8e\xc6\xd4\xbe\x9f_\xf5]\x09X5\x9a\ +\x10\x17n\xd9\xe6\x03\xe07\x06\xe0m\xf0\xe6\x2276\ +\xa6\xeae\x09\x7f^\xfc\xe4[}W\x02\xef\xfe:\xb6\ +\x99\xea\x18\x12\x13s`\x16\xe0\x9f\x19\x94\xb7\xf4,\x17\ +Btd\x0aQ\x87\xe6\x14X\x0d\xfc\xfb_\xdd\xa1\xd8\ +\x18\xe2\x13sx:\xbahi\x9b\x81Z\x17\xb2/6\ +\xa6\xdb\xc9\xbd7\xb8\xaf5\xed\xed\xedaxx\x18\xf1\ +x\x1c\xe1p88\x02\xce\x8d\xc6H\xc2;\xf8\x9d\x9d\ +\x1dlll\x00\x00\x92\xc9$\xd6\xd7\xd7\x91H$\x5c\ +\x89p\xbd\xa8\xef\xdehX`\xe0\x01@\x92$,-\ +-aee\x05\x07\x07\x07PU\xd5;\x01\xafS\x1d\ +\x11!\x97\xcb9\x02\xb0\x02?>>\xae\x1f\xe7\xf3y\ +\xa4\xd3i,//;\x0eD\x9a\xa6\x11\x11\x91 \x08\ +$\x8a\x22\x09\x82@DD\x95Z\x89\x9aM\x95n\x1a\ +\x9a\xa6Q6\x9b%Q\x14I\x14EJ\xa7\xd3T(\ +\x14HQ\x14\xdbkDQ\xa4l6K\x8dF\x83$\ +I\xa2L&\xa3\x9fo\xe31\x8fAD\xe4H \x08\ +\xf0\xc6O&\x93!I\x92\xa8\xd1hX\x82o\xe3 \ +\x22R\x14\x85\x0a\x85\x02\xa5\xd3iG\x02\xac\xf5\x1d\x8c\ +1D\xa3Q}a\xeb\xe4\xe4\xa4#S\xaa\xaaB\x96\ +e\x00\xb0\x9d%\xec,qzz\xdaq\x9d\xf9\xdc\xe6\ +\xe6&\x16\x16\x16,\x17\x8dUUE\xb1XD2\x99\ +\xb4|#s\xcc\x80Y\x89\xa0,\xe1\xa4\xfcM2\xed\ +j\xa1r\xb9l;\xb0\x1fK\xf8\x05\xdf\xb3\x85\xf6\xf7\ +\xf7\xb1\xba\xba\xaa\xa7mff\x06\x00P(\x14|Y\ +B\x96e\xd4j5\xcc\xce\xce\xfa\xdek\x08\x03\xee\x1b\ +\x16\xa9T\x0akkk\x88\xc7\xe3\x00\x00Y\x96\xb1\xb5\ +\xb5\x85|>\x0f\x00=\x83\x07\x80p8\x8c\xe9\xe9\xe9\ +\xe0\x9e%\x8ci1[\xe8\xf0\xf0\xb0\xcb\xeb\xfd\xb2\x84\ +\xd7`\xc6M>\xa7Y\xc8.\x82\xb6D\xdf^\xeam\ +o\x10\xb4%\xfa\xb5\xacr'68\xee\x09\xdcBX\ +\xd6\x00\xcf\xf3\x88F\xa3\x03\x09\xd8\xbc\x7fg[\xc4\xb7\ +\xb1O\xe6;\x03\x8a\xa2\x0c<`3Fv\xffg\x8f\ +\x00\xc3K\x13\xe4\xbc\x0e\xd4\x1e\xccx\xec\x06\xc2\xee:\ +\xf3=n\x12\xff\x03\xed\x89\xf2\xb9\x8a)_|\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x000\xb5\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x02X\x00\x00\x02\x22\x08\x06\x00\x00\x00\x14\xdf\xb6{\ +\x00\x000|IDATx\xda\xed\xddy\xfc\xa5s\ +\xdd?p\xb3/\xccb\x88\x09\x83\x90\x9d\x10\xb2d\xa9\ +\xc8\xbe\xb5(KTd_SJ\xc9N\xa4\xa4DD\ +n\x94\x90%K\xcbHD\x88\xba\xa5\xb2\x97}\xdf\xd7\ +1\x9813\xf7\xfd\xber\xaa\xd9\xbe3\xe7\x9c\xefY\ +\xae\xcf\xe7z\xbe\x1e\x8f\xe7\xe3\xf7\xc7\xef\xf7\xbbo\xe7\ +:\x9f\xcf\xfb\xf3\x9a\xef9\xe7\xba\xe6\x98C$\xd3\x8c\ +\x1d3zhX>l\x19\xf6\x0b\xdf\x08'\x84S\xc3\ +\xb9\xe1\xe2p\x09\xd0V\x17\xd4\xf6[\xb1\xef\x8e\x0a\xfb\ +\x87\x8f\x87\xd5\xc3\xbc&\x95\x88Hy\x8bT\x9f\xb0D\ +\xd8>\x9c\x1cn\x0cO\x87\xff\x03J\xef\x85\xda\x9e\xfd\ +A\xd8%\xac\x10\xfa\x99l\x22\x22\xdd)T\xcb\x85\x83\ +\xc2o\xc2\x8b\x0e)\xc8\xca\xabal88\xac\x12\xfa\ +\x9a|\x22\x22\xed)Us\x86m\xc2\x8f\xc2c\x0e \ +\xa8\x94\xe7\xc29\xb5\x8f\x16\xe74\x11EDzW\xaa\ +\x06\xd6\xbe?U|\x87c\xbcC\x06\x08o\xd4\xbe\xdb\ +\xf5\xa9\xe2{\x96&\xa5\x88H\xfd\x1f\xff\xad\x13\xce\x0c\ +/9L\x80Yx-\xfc\xb863\xfa\x98\xa0\x22\x22\ +3\x16\xab\xe1a\xafp\x97C\x03h\xc2\xbd\xe1\x8ba\ +\x94\x89*\x22\x8a\xd5;\xb7Q8-\x8cs@\x00-\ +\xfa\x08\xf1\x8c\xe2\x870&\xac\x88T\xb1X\xad\x15~\ +\xe90\x00\xda\xe8Wa=\x1f\x1f\x8aH\xee\xa5\xaa\xf8\ +~\xd5\x86\xe1\xf7\x06?\xd0A\xb7\x84\x8d\x15-\x11\xc9\ +\xb1\x5c\x15\xc5\xeaO\x06=\xd0E\xb7\x86\x0dLd\x11\ +\xc9\xa1X\xad\x14\xae6\xd8\x81\x12\xb9\xb6xT\x8f\x09\ +-\x22)\x16\xabE\xc2ya\x8aa\x0e\x94Tq\x8f\ +\xbdEMl\x11I\xa1X\x0d\xa9=\xd0\xf5-\xc3\x1b\ +H@1\xab\x8eq\xd3R\x11)s\xb9\xda$\ +\x9c6\xfe\xff/\x15\xbe\x1f\xc6\xbb\xae0K\x1b;i\ +\xa5\x8a\xe5j`\xf8\xa7\x01@\x05\xfc:,\xdf\x86=\ +4\x7f85Lv\x8da\xa6\xee-\xfe\x02\xec\xc4\x95\ +\xaa\x15\xac\x83l~2W\xfc2\xf6\x93\xbd\xfd\x8bU\ +\x1d{\xe9\xfd\xe1.\xd7\x1bfj\x7f'\xaeT\xa9\x5c\ +\x15\xff\xf2~\xd5\xc6'c\x7f\x0c\x0bvpO\x0d\x09\ +g\xbb\xee0\x83\x97\xc3\xbcN^\xa9J\xc1:\xd3\xa6\ +'c\x17\x85\xc1]\xd8W\xc5\x8fF\x0ev\xfda\x06\ +\xa79y\xa5\x0a\xe5j\xe5\xda\x17~mzr\xf4\x93\ +\xb1]~TG\xfc\xef\xdf\xdb\xfb\x00\xd3(\xbe\xa7\xb8\ +\xa2\x13Xr.W\xc5\xbf\xb0\xff`\xb3\x93\xeb\xcf\xc2\ +C\xff\x92\xec\xb5ox?`\x1a\xd7\xb5\xfb\xfb\x90\x22\ +\xdd\x1c\xfa\xdb\xda\xe4d\xfck\xa5a%\xfb\xc7\xccE\ +\xde\x17\x98\xc6\xc7\x9c\xc4\x92c\xb9\x1a\x1a\x1e\xb5\xc1\xc9\ +\xd0\x842~\xfc\x10\xffM\xc3\xc3\xc3\xde\x1f\xf8\x8f\x87\ +\xbb\xf1\xfdH\x91v\x0f\xfb\xc3ln2uX\x89\xf7\ +\xdd\x86\xde\x1f\x98\xc6\xd7\x9c\xc8\x92S\xb9\x1a\x13\xde\xb0\ +\xb1\xc9\xd0#e\xff\x17q\xfc\xf7]\xea}\x82\xffx\ +=,\xe0d\x96\x5c\x0a\xd6\xf965\x99\xfa|\x02\xfb\ +o\x19\xbf\xdc\x85i\x9c\xebd\x96\x1c\xca\xd5\xda63\ +\x99z*\x0cLd\x1f^\xee\xfd\x82i|\xc0\x09-\ +)\x97\xab\xbe\xe16\x1b\x99L\x1d\x9d\xd0^\xdc\xd8\xfb\ +\x05\xd3\xb8\xb58\xa3\x9c\xd4\x92j\xc1\xfa\x9cML\xc6\ +\x96Ih/\xf6\x0f\xcf{\xcf`\x1a\x9fqRK\x8a\ +\xe5\xaa\xf8\x89\xf8360\x99\xba?\xc1=y\xae\xf7\ +\x0df\xf8\x98\x7f.'\xb6\xa46\xcc\x8f\xb7y\xc9\xd8\ +\x8f\x12\xdc\x93;{\xdf`\x06\xc78\xb1%\xa5A\xbe\ +D\xed\xe6\x8b6/\xb9\xda-\xc1}\xb9\xac\xf7\x0df\ +\xf0Vx\x8f\x93[R\x19\xe4~\xb1D\xee\xd6Ip\ +_\x0e\x18\xfb\xceCo\xbd\x7f0\xadK\x9c\xdc\x92\xc2\ +\x10\xdf\xc0f\xa5\x02\x16It\x7f>\xe6\xbd\x83\x99\xfa\ +\x90\x13\x5c\xca<\xbc\x8b_*\xdde\xa3R\x01\xc3\x12\ +\xdd\xa3\x7f\xf5\xde\xc1L\xfd=\xf4s\x92KY\x87\xf7\ +\xde6)\x1510\xd1=z\x8b\xf7\x0ez\xb4\xbb\x93\ +\x5c\xca8\xb8\xe7\x09/\xd9\xa0TD\xffD\xf7\xe9M\ +\xde;\xe8\xd1\x0ban'\xba\x94mp\x9fbs\xa2\ +`)X\x90\xb8\xef:\xd1\xa5LC{\xb90\xc9\xc6\ +D\xc1R\xb0 qo\xa7\xf4\x94\x06\xc9\xbb\x5c\xf5\x09\ +\xbf\xb5)Q\xb0\x14,\xc8\xc4\xd8\xe2ls\xc2K\xb7\ +\x07\xf6\x966#\x0a\x96\x82\x05\x99\xd9\xcc\x09/\xdd\x1c\ +\xd6\x83\xc2\x036\x22\x0a\x96\x82\x05\x99\xf9G\xaa\xbf\x16\ +\x96<\x0a\xd6\xc16!\x0a\x96\x82\x05\x99\xfa\xa2\x93^\ +\xba1\xa8G\x87q6 \x0a\x96\x82\x05\x99z5\xcc\ +\xe7\xc4\x97N\x0f\xea\x1f\xdb|(X\x0a\x16d\xeeG\ +N|\xe9\xe4\x90^5L\xb1\xf1P\xb0\x14,\xc8\x5c\ +q\xd6\xad\xec\xe4\x97N\x0c\xe8\xe2\xb6\x0c7\xdbt(\ +X\x0a\x16T\xc4\x0dn\xdb \x9d\x18\xd0\xdb\xd9l\xa0\ +`A\xc5|R\x03\x90v\x0e\xe79\xc3\xe36\x1a(\ +XP1\x8f\x86!\x9a\x80\xb4k8\x1fa\x93\x81\x82\ +\x05\x15\xf5\x0dM@\xda1\x98\x17\x0eo\xda`\xa0`\ +AE\xbd\x11\xc6h\x04\xd2\xea\xc1|\xa1\xcd\x05\x0a\x16\ +T\xdc\xf9\x1a\x81\xb4r(\xafcS\x81\x82\x05\xfc\xcb\ +Z\x9a\x81\xb4b \xf7\x0b\xb7\xdbP\xa0`\x01\xff\xf2\ +\xbf\xa1\xaf\x86 \xbd\x1d\xc8\xbb\xd8L\xa0`\x01\xd3\xf8\ +\xac\x86 \xbd\x19\xc6#\xc2\xb36\x12(X\xc04\x9e\ +\x09\xc35\x05iv\x18\x9fh\x13\xd1%\xc5\xfd\xd6.\ +.~\x16\x1dv\x0c\x1f\x0dk\xd7l\x14>\x13\x0e\x0f\ +\x97\x84'\x15\xac\xd2\x16\xacW\xc2\xd8p|\xd85l\ +V\xfbN\xe7Z\xe1#a\xdb\xf0\xe5pN\xb8\xdb\xba\ +'1\xc7k\x0a\xd2\xcc ^2L\xb4\x81\xe8\xa0\xfb\ +\xc2!a\xe9\xb1\x0d<\x96b\xec;\x8foZ.\x1c\ +\x1a\xeeW\xb0\xba^\xb0\x9e\x0f'\xd7\xcap\xff\x06\xff\ +\xfbF\x87/\x84\xeb\xed\x07\x120!,\xae1H\xa3\ +\x83\xf8*\x9b\x87\x0e)\x0e\xd3\x0d\xc7\xb6\xe0Y_\xc5\ +\x17O\xc3&\x1d(\x12\x0a\xd6\x8c\x1e\x08\x9f\x0f\x83[\ +\xf4\xdfZ\x94\xe6\xf3\xc2d{\x84\x12\xfb\x85\xc6 \x8d\ +\x0c\xb6\x8dl\x1a:\xe0\xc1\xdaGF}\xda\xb0\x86\x8b\ +\xbfjm=\xf6\x9d\xc7[(X\xed-X\xe3\xc2\x01\ +a@\x9b\xfe\x9b\x97\xf7\x17-Jn\x03\xcdA\xea\x19\ +f\x03\xc2=6\x0cmvZ\x98\xb3\x03\xebyX8\ +K\xc1j[\xc1\xba!,\xd2\x81\xff\xee\xe2/\x93{\ +\x87\xb7\xec\x1dJ\xe8\xaeTg\x82tv\x00\xefg\xb3\ +\xd0F\xc5\x01\xb9}\x17\xd6\xf5g[\xfc\x9dB\x05k\ +\xcc\xe8\x93:}\x1d\xe2\x7f\xdf*\xe1\x09\xfb\x88\x12\xda\ +[\x83\x90Y\x0d\xafy\xc3\xcb6\x0am\xf2ZX\xb7\ +\x8b\xeb\xbb\xf8\xd5\xda\xeb\x0aVK^\xff\x01]|\x0d\ +\x0b\x85{\xed'J\xe6\xc50J\x93\x90\x9e\x06\xd7i\ +6\x09m2\xbe\xf8UY\x09\xd6\xf8zc[\xf3\xd0\ +\xf2*\x17\xac\x03J\xf0:Fw\xf0\x17\xa3P\xaf\xef\ +k\x122\xb3\x81\xb5\x82_\xeb\xd0&S\xc2\x16%Z\ +\xeb\x9fP\xb0\x9avb\x89^\xcb\xe2\xe1\x05\xfb\x8b\x12\ +\x99T\xfc\xfaU\xa3\x90\xa9\x07U\xf1\x8b\xab\xebl\x0e\ +\xda\xe4\xf0\x12\xae\xf9\xe3\x15\xac\x86]\x1b\xfa\x95\xec\xf5\ +|\xd4\xfe\xa2d~\xdb\x8e_FK\xba\x05k\x1b\x9b\ +\x826\xb9\xa5\x8ce\xa4\xf6k\xd9\xbf(X\x0d\xdd\x91\ +}\xc1\x92\xbe\xa6\xef\xdag\x94\xcc\x96\x9a\x85\x14\xc3i\ +px\xc8\x86\xa0j\x7f.\xaf\xfd\x22m\x8a\x82U\x97\ +=J\xfc\x9a\xe6\x0c\x8f\xd9o\x94Hq\xd3\xddA\x1a\ +\x86\x82u\x88\xcd@\x9b\xfc0\x81\xf5\x7f\x8e\x825[\ +w\x97\xed\xa3\xc1\x99\xbc\xae\x1d\xec7J\xe6`\x0d\xa3\ +\xda\xe5j\x81\x16\xfel\x1d\xa6\xf6v\xf1s\xfa\x04\xf6\ +\xc0bM\xfe\xb8\xa3J\x05\xeb\xd3\x09\xbc\xae~\xe1\x1f\ +\xf6\x1d%\xbb-\xcdhM\xa3\xba\x05\xeb\x1c\x9b\x806\ +9?\xa1}p\xa9\x82\xd5\xa3\xc7Sy\xad\xf1\xdf\xb9\ +\x97}G\xc9\xfcX\xd3\xa8f\xb9Z\xdd\xe2\xa7\x8d>\ +\x94\xd0^\xd8L\xc1\xea\xd1\xd1\x09\xbd\xb6\x11\x1e\xa5C\ +\x09oQ\xb3\xaa\xc6Q\xadrU<\xd7\xebV\x8b\x9f\ +6y\xb6\xec\xdf\xd9\x99n?\x0c\xac\xfdJN\xc1\x9a\ +\xd1\x0a\x89\xbd\xbe+\xed?J\xe6f\xb7m\xa8V\xc1\ +\xda\xd1\xa2\xa7\x8d\xceMpO\x5c\xa2`\xcd\xe0\x89\xd4\ +\x0e\x86\xe2\xd7\x8e\xf6\x1f%\xb4\x9d\xe6Q\x8dr5W\ +x\xd2\x82\xa7\x8d\xbe\x90\xe0\xbe\xd8O\xc1\x9a\xc1E\x09\ +\xbe\xbe\xe5\xec?J\xa8\xf8.\xe3P\x0d$\xff\x82u\ +\xb4\xc5N\x9b\xad\x9a\xe0\xbeXW\xc1\x9a\xc1W\x13|\ +}\xfd}\x0f\x8b\x92:B\x03\xc9\xbb\x5c-j\xf8\xd0\ +\x01#\x12\xdc\x1b\xefV\xb0f\xf0\xb1D_\xe3\xdd\xf6\ + %T\x1f>X\xbby\xed\xa80<\xbc+,\x156\ +\x08\xfb\x86\xf3<\xd6\xa7\xf2\xd6\xd1H\xf2*W\xfdj\ +C\xc0\xe2\xa6\xdd\x1eMx\x9f<\xab`M\xe3\xbd\x89\ +\xbe\xc6\xf3;\xb0\xce\xef\x0a\x07\x8cm\xe2\x01\xd8\xc5/\ +3\xc3J\xe1[\xe193\xa3rnO\xe9662\ +\xfb\x0d\xbd\x9bEM\x87<\x92\xf0>yF\xc1\x9a\xc6\ +\x12\x89\xbe\xc6\x9f\xb6q}\xdf\x12>\xda\xaa\xdbW\xc4\ +\xff\x9c\xc1a\xf7\xda\xaf\xcc\xcc\x8f\xea\xd8E3\xc9\xa3\ +\x5c\x8d\x0c\xcf[\xd0(X\x0a\x96\x82\xd5\xab\x9b\xe7n\ +\xd7\xae\xfb\x82\x15?\xe1\x0fG\x8d}\xe7\x19\x9e\xe6H\ +5n\xc6\x99\xe8k\xfc\xa1Y\ +S\x19;j<\x9d\xdd\x5c\xc3\xc2S\x16\x1e\x0a\x96\x82\ +\xa5`\xf5\xaa`m\x9c\xe8k\xfc\x96YS\x19O\x86\ +\xb94\x9f\xcem\xae\xe3,:\x14,\x05K\xc1\xeau\ +\xc1\xda \xd1\xd7x\xacYS)\xc7h>\x9d\xd9X\ +\x8b\x85\x09\x16\x1c\x0a\x96\x82\xa5`U\xb6`\x1dc\xd6\ +T\xca[aQ\x0d\xa8\xfd\x1b\xeb2\x8b\x0d\x05K\xc1\ +R\xb0\x14,*\xe5b\x0d\xa8\xbd\x9b\xea\xc3\x16\x19\x0a\ +\x96\x82\xa5`)XfM%\xad\xaf\x09\xb5gC\xf5\ +\x0fwX`(X\x0a\x96\x82\xa5`\x995\x95\xf4\xf7\ +\xd0O#j\xfd\x86\xda\xd3\xe2B\xc1R\xb0\x14,\x05\ +K\xc1\xaa\xb4\xdd5\xa2\xd6n\xa6Q\xe1\x05\x0b\x0b\x05\ +K\xc1R\xb0\x14,\x05\xab\xd2\x9e\x0f#5\xa3\xd6m\ +\xa6\xefYT(X\x0a\x96\x82\xa5`)X\x84\x934\ +\xa3\xd6l\xa4e\xc3$\x0b\x0a\x05K\xc1R\xb0\x14,\ +\x05\x8b\xf0vXZC\xea\xdd&\xea\x13\xae\xb6\x98P\ +\xb0\x14,\x05K\xc1R\xb0\x98\xca\xaf\xb5\xa4\xdem\xa2\ +\xcd-\x22\x14,\x05K\xc1R\xb0\x14,fbSM\ +\xa9\xb9\x0d40\xdco\x01\xa1`)X\x0a\x96\x82\xa5\ +`1\x13\xff(\xba\x82\xc6\xd4\xf8\x06\xfa\x92\xc5\x83\x82\ +\xa5`)X\x0a\x96\x82\xc5,\x1c\xa815\xb6y\xe6\ +\x0f\xafZ8(X\x0a\x96\x82\xa5`)X\xcc\xc2+\ +a>\xcd\xa9\xfe\xcds\xa6E\x83\x82\xa5`)X\x0a\ +\x96\x82E\x1d\xce\xd0\x9c\xea\xdb8\xab\x84)\x16\x0c\x0a\ +\x96\x82\xa5`)X\x0a\x16u(:\xc3J\x1a\xd4\xac\ +7Mq[\x86\x1b-\x16\x14,\x05K\xc1R\xb0\x14\ +,\x1apC\xd1!4\xa9\x9e7\xcd\xa7,\x12\x14,\ +\x05K\xc1R\xb0\x14,\x9a\xf0IMj\xe6\x1bfh\ +x\xd4\x02A\xc1R\xb0\x14,\x05K\xc1\xa2\x99\xf9\x1b\ +\x86hT3n\x98\xc3,\x0e\x14,\x05K\xc1R\xb0\ +\x14,z\xe1P\x8dj\xda\xcd2&\xbcaa\xa0`\ +)X\x0a\x96\x82\xa5`\xd1\x0b\xe3\xc3B\x9a\xd5\x7f7\ +\xcb\xcf,\x0a\x14,\x05K\xc1R\xb0\x14,Z\xe0\xa7\ +\x9a\xd5;\x1bem\x8b\x01\x05K\xc1R\xb0\x14,\x05\ +\x8b\x16Z\xb3\xea\xe5\xaao\xb8\xcdB@\xc1R\xb0\x14\ +,\x05K\xc1\xa2\x85\xfe\x5ct\x8c*\x17\xac\xcfY\x04\ +(X\x0a\x96\x82\xa5`)X\xb4\xc1\xceU-W\xc3\ +\x1b\x1c\xe8\xa0`)X\x0a\x96\x82\xa5`Q\xaf\xa7\xc3\ +\xb0*\x16\xac\x13\xbc\xf9(X\x0a\x96\x82\xa5`)X\ +\xb4\xd17\xabV\xae\x96\x08\x13\xbd\xf1(X\x0a\x96\x82\ +\xa5`)X\xb4\xd1\x84\xb0x\x95\x0a\xd6\xe5\xdet\x14\ +,\x05K\xc1R\xb0\x14,:\xe0\x17U)W\x1bz\ +\xb3Q\xb0\x14,\x05K\xc1R\xb0\xe8\xa0\x8f\xe4^\xae\ +\xfa\x87\xbb\xbd\xd1(X\x0a\x96\x82\xa5`)Xt\xd0\ +\x9d\xa9\xce\xadz7\xc5>\xded\x14,\x05K\xc1R\ +\xb0\x14,\xba`\xaf\x5c\xcb\xd5<\xe1%o0\x0a\x96\ +\x82\xa5`)X\x0a\x16]\xf0b\x18\x95c\xc1:\xc5\ +\x9b\x8b\x82\xa5`)X\x0a\x96\x82E\x17}?\xb7r\ +\xb5|\x98\xe4\x8dE\xc1R\xb0\x14,\x05K\xc1\xa2\x8b\ +\x8a.\xb2\x5c.\xe5\xaaO\xf8\x9d7\x15\x05K\xc1R\ +\xb0\x14,\x05\x8b\x12\xf8m\xd1Mr(X[y3\ +Q\xb0\x14,\x05K\xc1R\xb0(\x91-R/W\x83\ +\xc2\x03\xdeH\x14,\x05K\xc1R\xb0\x14,J\xe4\xfe\ +\xa2\xa3\xa4\x5c\xb0\x0e\xf6&\xa2`)X\x0a\x96\x82\xa5\ +`QB_NuX\x8f\x0e\xe3\xbc\x81(X\x0a\x96\ +\x82\xa5`)X\x94\xd0ka\xfe\x147\xc0\xd9\xde<\ +\x14,\x05K\xc1R\xb0\x14,J\xec\xac\xd4\x16\xffj\ +\xde4\x14,\x05K\xc1R\xb0\x14,JnJx\x7f\ +*\x0b\xbf\xb8-\xc3\xcd\xde4\x14,\x05K\xc1R\xb0\ +\x14,\x12pS\x12\xb7m\x88\xff\xc8\xed\xbcY(X\ +\x0a\x96\x82\xa5`)X$\xe4\xd3e_\xf4s\x86\xc7\ +\xbdQ(X\x0a\x96\x82\xa5`)X$\xa4\xe8.C\ +\xcb\xbc\xe8\x8f\xf4&\xa1`)X\x0a\x96\x82\xa5`\x91\ +\xa0#\xca\xba\xe0\x17\x09oz\x83P\xb0\x14,\x05K\ +\xc1R\xb0H\xd0\x1ba\xe12.\xf8\x8b\xbc9\xa0`\ +)X\x0a\x96\x82E\xc2.(\xdbb_\xc7\x9b\x02\x0a\ +\x96\x82\xa5`)Xd`\x9d\xb2,\xf4~\xe1vo\ +\x08(X\x0a\x96\x82\xa5`\x91\x81\xa2\xd3\xf4+\xc3B\ +\xdf\xd5\x9b\x01\x0a\x96\x82\xa5`)Xdd\x97n/\ +\xf2\x11\xe19o\x04(X\x0a\x96\x82\xa5`\x91\x91g\ +\xc3\xf0n.\xf2o{\x13@\xc1R\xb0\x14,\x05\x8b\ +\x0c}\xab[\x0b|\xc90\xd1\x1b\x00\x0a\x96\x82\xa5`\ +)Xd\xa8\xe88\xef\xed\xc6\x02\xbf\xca\xc5\x07\x05K\ +\xc1R\xb0\x14,2ve\xa7\x17\xf7\xc6.:(X\ +\x0a\x96\x82\xa5`Q\x01\x1buja\x0f\x08\xf7\xba\xe0\ +\xa0`)X\x0a\x96\x82E\x05\xdcSt\x9fN,\xec\ +\xfd]lP\xb0\x14,\x05K\xc1\xa2B\xf6m\xf7\xa2\ +\x9e7\xbc\xecB\x83\x82\xa5`)X\x0a\x16\x15Rt\ +\x9fy\xdb\xb9\xa8Os\x91A\xc1R\xb0\x14,\x05\x8b\ +\x0a:\xb5]\x0bz\xc50\xd9\x05\x06\x05K\xc1R\xb0\ +\x14,*\xa8\xe8@+\xb4z1\xf7\x09\xd7\xb9\xb8\xa0\ +`)X\x0a\x96\x82E\x85][t\xa2V.\xe6m\ +\x5cTP\xb0\x14,\x05K\xc1\x82\xd1[\xb7j!\x0f\ +\x0c\xf7\xbb\xa0\xa0`)X\x0a\x96\x82\x05\xa3\xff\xd1\x92\ +\xdb6\xc4\xff\x90}\x5cLP\xb0\x14,\x05K\xc1\x82\ +\xff\xd8\xb3\xb7\x8bxpx\xca\x85\x04\x05K\xc1R\xb0\ +\x14,\xf8\x8f'\xc2\xa0\xde,\xe2\xbd]DP\xb0\x14\ +,\x05K\xc1\x82\x19\xec\xde\xec\x02\xee\x17\x1ev\x01A\ +\xc1R\xb0\x14,\x05\x0bf\xf0@\xd1\x95\x9aY\xc0~\ +9\x08\x0a\x96\x82\xa5`)X\xd0\xb3-\x9aY\xc0\xee\ +{\x05\x0a\x96\x82\xa5`)X\xd0\xb3\xab\x1b]\xbc\x8b\ +\xbbh\xa0`)X\x0a\x96\x82\x05\xb34%,\xda\xc8\ +\xe2=\xd6E\x03\x05K\xc1R\xb0\x14,\x98\xad\xa3\xea\ +]\xb8\xc5cq\x1eq\xc1@\xc1R\xb0\x14,\x05\x0b\ +f\xeb\xc1\xb1\xf5<>'\xfe\x1f\xad\xe5b\x81\x82\xa5\ +`)X\x0a\x16\xd4m\xb5z\x16\xee\xc9.\x14(X\ +\x0a\x96\x82\xa5`A\xddN\xac\xe7\xe3\xc1\x87\x5c(P\ +\xb0\x14,\x05K\xc1\x82\xba\xfds\x96\x1f\x13\xc6\xff\xe5\ +\xf2.\x12(X\x0a\x96\x82\xa5`A\xc3\x96\x99\xd5\xa2\ +\xfd\xb2\x0b\x04\x0a\x96\x82\xa5`)X\xd0\xb0\x03g\xb5\ +h\xafq\x81@\xc1R\xb0\x14,\x05\x0b\x1a\xf6\xeb\x9e\ +\x16\xec\xa0\xf0\x96\x0b\x04\x0a\x96\x82\xa5`)X\xd0\xb0\ +\xf1a\xe0\xcc\x16\xec\xda.\x0e(X\x0a\x96\x82\xa5`\ +A\xd3\xd6\x98\xd9\x82\xfd\xaa\x0b\x03\x0a\x96\x82\xa5`)\ +X\xd0\xb4/\xcfl\xc1^\xe1\xc2\x80\x82\xa5`)X\ +\x0a\x164\xed\xb2\x99-\xd8\xa7\x5c\x18P\xb0\x14,\x05\ +K\xc1\x82\xa6=6\xfdb]\xd0E\x01\x05K\xc1R\ +\xb0\x14,\xe8\xb5\xf9\xa7^\xac\x9b\xb9 \xa0`)X\ +\x0a\x96\x82\x05\xbd\xf6Q_p\x07\x05K\xc1R\xb0\x14\ +,h\xad\x83\x9a\xdd\x90@\xcf\x9eP\xb0\x14,\x05K\ +\xc1\xa2\xd2\xce\x99z\xb1\xfe\xaf\x0b\x02\x0a\x96\x82\xa5`\ +)X\xd0k\x7f\xfc\xf7B\xed\x13^qA@\xc1R\ +\xb0\x14,\x05\x0bz\xed\xf9\x7f/\xd4y]\x0cP\xb0\ +\x14,\x05K\xc1\x82\x96\x19Y,\xd4U\x5c\x08P\xb0\ +\x14,\x05K\xc1\x82\x96Y\xb1X\xa8[\xbb\x10\xa0`\ +)X\x0a\x96\x82\x05-\xb3y\xb1P\xf7q!@\xc1\ +R\xb0\x14,\x05\x0bZf/\x0b\x15\x14,\x05K\xc1\ +R\xb0\xa0\xb5\x8e,\x16\xeaY.\x04(X\x0a\x96\x82\ +\xa5`A\xcb\x9c^,\xd4+\x5c\x08P\xb0\x14,\x05\ +K\xc1\x82\x96\xb9\xacX\xa8\x7fp!@\xc1R\xb0\x14\ +,\x05\x0bZ\xe6\xbab\xa1\xde\xe1B\x80\x82\xa5`)\ +X\x0a\x16\xb4\xcc_\x8b\x85\xfa\x88\x0b\x01\x0a\x96\x82\xa5\ +`)X\xd02\x0f\x15\x0b\xf59\x17\x02\x14,\x05K\ +\xc1R\xb0\xa0e\x9e.\x16\xea8\x17\x02\x14,\x05K\ +\xc1R\xb0\xa0e^-\x16\xeaD\x17\x02\x14,\x05K\ +\xc1R\xb0\xa0e&\x14\x0bu\xb2\x0b\x01\x0a\x96\x82\xa5\ +`)X\xd02\x93\xe6p\x11@\xc1R\xb0\x14,\x05\ +\x0bZK\xc1\x02\x05K\xc1R\xb0\x14,hC\xc1\xf2\ +\x11!\xff\xf6zx<<\x18\x1e\x0d/\xbb&\x95*\ +X\xf5\xde\xb2\xa5\xf8\xdef\x9fD_\xe3\xef\x1ax/\ +\x17H\xf45\xfe\xb8\x81\xd7\xb8\x96\x82\x05\xed\xfb\x88\xd0\ +\x97\xdc\xab[\xa6.\x0f\xfb\x17C6\x8c\xeaa\x90\xcd\ +\x19\xde\x17>\x1b\xce\x0eO\xbav\xd9\x16\xacK\xea|\ +\x8d\x7fL\xf85\x9eX\xefO\xac\x13.\x91{\xd4\xfb\ +%\xdc0L\xc1\x82\xf6}\xc9\xddm\x1a\xaa\xe5\xba\xb0\ +m\x18\xdc\xe4`\xeb\x1b>\x18\xfe'\xbc\xe5zfU\ +\xb0>T\xe7k\xdc!\xe1\xd7\xb8dx\xbb\x8e\xd7x\ +x\xc2\xafqDx\xb1\x8e\xd7xf\xc2\xafQ\xc1\x22\ +\x89\xdb4\xb8\xd1h5\xfc6\xac\xda\xe2!7:\x9c\ +\xec\xaf\xa0y\x14\xac\xda{z\xf2l^\xdfE\xa9\xfe\ +eg\xaa\xd7\xf8\xc5\xd9\xbc\xc6[\x9b\xfd\x07H\x89^\ +\xe36\xb3\xf9\xfa\xc7\xbdan\x05\x0b\xda{\xa3Q\x8f\ +\xca\xc9\xdbSa\xeb\x0e\xfcU\xe0z\xd7:\x8b\x82U\ +\xfc\x85\xf2+\xb5\x8f\x90\xa7~]\xc5_+\x8f\x0b\x03\ +\xe6\xc8 \xb5\x8f\xbc_\x98\xee5N\xa9}\x7fiX\ +&\xafq\x93\xdaw)\xa7_\xa3\x17\x87y\x13\x7fm\ +\x0a\x16e\xf7\x90\x87=\xe7\xed\x8a\x9e\xbe[\xd5\xa6\x83\ +\xf9\xe0\xe2\x8b}\x0aV\x16\x87\xf3\xf0\xb0U\xd8+|\ +<\xcc3Gf)\xfeJ\x156\x0e{\x86\xed\xc2\x82\ +\x19\xbe\xc6\xfea\xfd\xb0{\xd8),\x96\xc9\xebR\xb0\ +(\xbb\x7f=\xec\xf9\x06\x17\x22KG\x17\xa5\xa7\x0b\x83\ +o\xc3\xf0\x9a\x82%\x22\x0a\x16U\xfe\xbe\xf3\x1c\xb5\xbf\ +r\xb8\x18y\xd9\xbf\xcb\xc3o\xd5\x0a\xdf\xe2A\xc1\x12\ +Q\xb0\xe0\xd2b\xa1\x9e\xe9Bd\xe5\x90\x92\x0c\xc05\ +\xc3\x1b\x0a\x96\x88(XT\xd0\x0f\xe7\xa8}\x94\xe4b\ +\xe4\xe1\xec2\xfd\xc2+\xfe[>\xa9`\x89\x88\x82E\ +\x05\x1dQ,\xd4\xbd]\x88,\xdc\x15\x86\x94p\x10~\ +_\xc1\x12\x11\x05\x8b\x8a\xd9s\x8e\xda/\x85\x5c\x8c\xb4\ +\x15\xf7\xbbY\xa5\xa4\x83pH\xb8_\xc1\x12\x11\x05\x8b\ +\x0a\xd9\xacX\xa8+\xbb\x10\xc9;\xb5\xe4\xc3p\x03\x05\ +KD\x14,*d\x85b\xa1\xce\xe3B$m|\x98\ +/\x81\x81x\x81\x82%\x22\x0a\x16\x151\xa2X\xa8}\ +*\xfc\x93\xfa\x1c|/\x91\x81\xf8\xee\xe2\xd9L\x0a\x96\ +\x88(Xd\xee\xb9\xa9\x17\xeb\x9f]\x90d-\x99\xd0\ +P\xdcW\xc1\x12\x11\x05\x8b\xcc\xdd<\xf5b\xfd\x89\x0b\ +\x92\xa4[\x13\x1b\x8a\xfd\xc2m\x0a\x96\x88(X\xe4|\ +\xcb\xa4\xa9\x17\xeb\xc1.H\x92\xbe\x92\xe0`,\xee\xf2\ +>E\xc1\x12\x11\x05\x8bL\x1d8\xf5b\xdd\xd4\x05I\ +\xd2\xfb\x13\x1d\x8e\xa7*X\x22\xa2`\x91\xa9\x0d\xa7^\ +\xac\x0b\xb8 \xc9y3\xf4Ot8\x8e\x0c\xcf(X\ +\x22\xa2`\x91\xa1\xf9\xa6_\xb0O\xba(I\xb9=\xf1\ +\x01\xb9\x83\x82%\x22\x0a\x16\x99ytf\x0b\xf6r\x17\ +&)\x97&> \x8b\xdb\x83\x5c\xab`\x89\x88\x82E\ +\xd6g\xb3/\xba'\xe7\xf4\x0c\x86\xe4Ra\x82\x82%\ +\x22\x0a\x16\x998hf\x0bv-\x17&)'e2\ +(\x8fV\xb0DD\xc1\x22\x13\xab\xcfl\xc1\x0e\x0ao\ +\xb88\x0aV\x87\x07e\xf10\xe8\x07\x15,\x11Q\xb0\ +H\xdc\xeba@O\x8bv\xac\x0b\xe4#\xc2.\x0c\xcb\ +M\x14,\x11Q\xb0H\xdc/g\xb5h\x0fr\x81\x92\ +qYf\x03\xf3b\x05KD\x14,\x12\xb6\xff\xac\x16\ +\xed\xb2.P2\xfe\x9e\xd9\xc0\x5c0\x8cS\xb0DD\ +\xc1\x22QK\xcdj\xd1\x16?\x9d\x7f\xc0EJB\xf1\ +\xeb\xbb\x81\x99\x0d\xcd\x03\x15,\x11Q\xb0H\xd0}\xf5\ +,\xdc\xef\xb8P\xc9\xf8@fC\xb3\x7f\xf8\x9b\x82%\ +\x22\x0a\x16\x899\xa1\x9e\x85\xfb\x01\x17*\x19\x87f8\ +8\xd7T\xb0DD\xc1\x221\xab\xd4\xb3p\xfbd\xf6\ +\xb3\xf9\x9c\xfd%\xd3\xe1y\x86\x82%\x22\x0a\x16\x89\xf8\ +g\xd1\x9d\xea]\xbcG\xb9`\xc9X!\xc3\xe19*\ +<\xa7`\x89\x88\x82E\x02\x0eod\xf1\xbe\xc7\x05K\ +\xc6\x99\x99\x0e\xd0\x9d\x15,\x11Q\xb0(\xb9)a\xe1\ +F\x17\xf05.\x5c\x12&6\xfc\xe6\xa61@\x8b\x8f\ +\xaaoP\xb0DD\xc1\xa2\xc4~\xd3\xcc\x02\xde\xd2\x85\ +K\xc6O2\x1d\xa2\xcb\x85\xb7\x15,\x11Q\xb0(\xa9\ +M\x9bY\xc0\xfd\xdc\x13+)\xebf:H\xbf\xa9`\ +\x89\x88\x82E\x09\xfd#\xf4mv\x11\xef\xe1\x02&\xe3\ +\xee\xdcnLvq\x93\ +qb\xa6\x83\xf5\x83\x0a\x96\x88\x82e\xc6\xd3\x05\x93\x8a\ +\xfb3\xb6kQ\xff\xc0\x05Nj!\xac\x90\xe9p=\ +[\xc1\x12Q\xb0\xa0\xc3Ni\xe7\xa2\x9e'\xbc\xe4\x22\ +'\xe3\xa6\xa6o\x82V\xee\xe1:oxQ\xc1\x12Q\ +\xb0\xa0C\x8a3gT\xbb\x17\xf6>.tRv\xc9\ +t\xc0\xee\xa2`\x89(X\xd0!{wba\xf7\x0f\ +w\xb9\xd8I\xb5\xeey3\x1c\xb0}\xc3\xcd\x0a\x96\x88\ +\x82\x05mvW\xcbn\xcbP\xc7\xe2\xde\xd0\x05O\xca\ +\xd9\x99\x0e\xd9\x15k\xdf5S\xb0D\x14,h\x97\x0d\ +:\xbd\xc0\xafp\xd1\x93\xf2\xc1L\x07\xed\xb7\x15,\x11\ +\x05\x0b\xda\xe4\xf2n,\xf0%\xc2D\x17?\xa9?q\ +\x0e\xc8p\xd0\xce\x15\x1eW\xb0D\x14,h\xb1\x09E\ +\xd7\xe9\xd6\x22?\xc1\x1b\x90\x94\x833\x1d\xb6\xdb(X\ +\x22\x0a\x16\xb4\xd8\xf1\xdd\x5c\xe4\xc3\xc33\xde\x84d\x14\ +\xcf\xf2[$\xc3a[\x0cz\xbe\xf0\xb2\x82%\ +\xa2`A\x03\xbeQ\xe6E?4<\xe6MJ\xca\xe7\ +2\x1d\xc0{(X\x22\x0a\x164\xf0\xdd\xe4!e_\ +\xf8\x9f\xf2F%\xe5\x850O\x86\x03\xb8\xf8u\xeb\xad\ +]\xb8\x9eO:\xfeD\x14,\x92\xb3m\x0a\x0b\xbfO\ +\xed\xa3'oX:\xce\xcat\x08\xaf\x1c&+X\x22\ +\x0a\x16\xcc\xc2\x1f\x8a\xee\x92\xca\xe2_%L\xf1\xa6%\ +e\xedL\x07\xf1\xc9\x1d\xbe\x8eO9\xfeD\x14,\x92\ +Qt\x95\x95S\xdb\x00gy\xe3\x92rg\xa6\x0f\x83\ +.\x1e\xe7\xf4\xa4\x82%\xa2`\xc1L\xfc(\xc5\x0d0\ +\x7fx\xcd\x9b\x97\x94/e:\x8c\xb7\xed\xe4\xf3\xab\x1c\ +\x7f\x22\x0a\x16Ix\xb5\xf8\xd5y\xaa\x9b\xe0K\xde\xc0\ +\xe4\xee\x01\xb2p\x86\xc3\xb8\xf8^\xe0X\x05KD\xc1\ +\x82\xa9\x1c\x94\xf2&(\x1e]\xf2OobR~\x91\ +\xe9@^\x22\xbc\xd5\x81\xeb\xf7\x8c\xe3OD\xc1\xa2\xf4\ +\x8an20\xf5\x8d\xb0\xb9729[d:\x94\x0f\ +S\xb0D\x14,\x08\x9b\xe5\xf2\xf1\xcc\xd5\xde\xcc\xa4<\ +\x92\xe9\xc3\xa0\x07u\xe0/\xaa\xcf:\xfeD\x14,J\ +\xed7\xc9\xdc\x96\xa1\x8e\xcd\xb0l\x98\xe4MM\xca7\ +3\x1d\xcc\x1b(X\x22\x0a\x16\x95Ut\x91er\xdb\ +\x10\xdf\xf3\xc6&\xf70\xe8\xe52\x1d\xce?k\xe3u\ +{\xce\xf1'\xa2`QZ'\xe7\xb8!\xe6\xae=\x96\ +\xc5\x1b\xec\xee\xb6\xdd^\x8b\xa3k?\xcfU\xb0D\x14\ +,\xaa\xf5h\xb8\xb9s\xdd\x14{z\x83\x93\xf3\xd9L\ +\xd7\xe2>m\xba^\xcf;\xfeD\x14,Ji\x8f\x9c\ +7E\xff\xda\x1d\xc3\xbd\xd1\xe9x>\xd3\x87A\xf7\x0b\ +\xb7)X\x22\x0a\x16\x95\xf0\xf7b\xee\xe7\xbe1>\xe2\ +\x8dN\xce\x99\x99\xae\xc5U\xdb\xf0\xcc\xcc\x17\x1c\x7f\x22\ +\x0a\x16\xa5\xf3\xa1\xaal\x8e\xcb\xbc\xd9\xc9Y+\xd3\xb5\ +\xf8\x03\x05KD\xc1\x22k\x97Vis,\x16&x\ +\xd3\x93rG\xa6\x0f\x83\x1eY\xdc\x1c\xb4\x85\xd7\xe9E\ +\xc7\x9f\x88\x82Ei\x14O\xf0X\xacj\x1b\xe48o\ +\xbc\xe76\x95d-n\xaf`\x89(Xd\xe9\xd8*\ +n\x90a\xc5\x83q\xbd\xf9Iy=\x8c\xc9p-\x16\ +O\x1b\xf8]\x8b\xae\xd1K\x8e?\x11\x05\x8bRx*\ +\xccU\xd5M\xb2\xb3\x05\x90\x9c\xcb2]\x8bK\xb5\xe8\ +ck\x05KD\xc1\xa2\x1c>S\xe5M\xd27\xfc\xd9\ +\x22\xf0\x90\xcc\x92\xac\xc7\xa3Zpm^v\xfc\x89(\ +Xt\xdd\x9f\x8a\x8eQ\xf5\x8d\xb2\xa6\x85\x90\x9c\x87\xc3\ +\xd0\x0c\xd7\xe2\x90\xf0`/\xaf\xcd+\x8e?\x11\x05\x8b\ +\xae[\xc3Nyg\xb3\xfc\xc4bH\xceq\x99\xae\xc5\ +\x8d\x15,\x11\x05\x8b\xa4\x9dg\x97\xfcw\xb3,\x18\xc6\ +[\x14I\x99\x18\x96\xcdt=^\xdc\x8b\xeb\xf2\xaa\x1d\ +-\xa2`\xd1\xd5\x1fc-h\x97L\xbba\x0e\xb50\ +\x92s}\xa6\x0f\x83.\x0a\xff8\x05KD\xc1\x229\ +_\xb3Cf\xdc0\xc5\xf7_\x1e\xb18\x92\xb3S\xa6\ +\xeb\xf1\x80&\xaf\xc7kv\xb3\x88\x82E\xd7\xbe\x1f<\ +\xd8\x0e\x99\xf9\xa6\xf9\x84\x05\x92\xe4\xc3\xa0Ge\xb8\x16\ +\x8b\x07\x93\xffU\xc1\x12Q\xb0H\xc6\xc7\xed\x8e\x9e7\ +M\x9f\xda\xc7N\x16JZ\xce\xc8t=\xae\xd1\xc4\xc3\ +\xa0\xc7\xd9\xc9\x22\x0a\x16\x1d\xf7\xfb\x1c\xbf\xb2\xd2\xea\x8d\ +\xb3R\x13\x87\x1a\xdd\xb7f\xa6\xeb\xf1\x0c\x05KD\xc1\ +\xa2\xd4&\x87\xf7\xd9\x19\xed9\xd4\xe8\xbe\xbf\x15\x1f\xab\ +e\xb8\x16G\x85\xe7\x14,\x11\x05\x8b\xd2\xfa\xa1]Q\ +\xff\xe6yWq?!\x8b&9\x07f\xba\x1ewj\ +\xe0\x1a\x0c\xba\xb6\x1eW,\xfeJW{\ +\x1c\xc3\xff\xd5\x1e\xf1T\x0czA+XDzy\x06\x9cb\ +\x9eV\xc6\x13aN\xab\xbe\xb3\x1blG\x0b\xcf\xe7\xe8\ +\x22R\xc9\xf9\xff#\xb3\xb42\xb6\xb7\xe2;\xbf\xc1\x8a\ +G\x95\xdcb\xf1y@\xa7\x88Tn\xfe\xff\xd4\x1c\xad\ +\x84?\xbaYu\xf76\xd9\xea\x16`\x92\x1e\x0cC\xac\ +`\x11ir\xf6_e\x8eV\xc2jV{w7\xda\ +\xb9\x16a\x92\x8e\xb6zE\xa4\xc9\xb9\x7f\xa3\x19\x9a\xbd\ +\xff\xb1\xd2\xbb\xbf\xd1\x16\x08\xaf[\x8cI>\x0czi\ ++XD\x9a\x98\xfb\xf7\x99\xa1\xd9\xff \xea\xddVz\ +96\xdb!\x16d\x92\xae\xf3\xf9\xba\x8841\xf3_\ +2?\xb3\xf6\x15\xab\xbc<\x9bmpx\xc8\xa2L\xd2\ +\x8eV\xb0\x8840\xef\x87\x9a\x9b\xd9\x7fGw\x90\x95\ +^\xaeM\xb7\x8d\x85\xe9a\xd0\x22\x92\xfd\xac_\xca\xdc\ +\xcc\xda\xd6Vy\xf96]\x9f\xdaGN\x16\xa8\x87A\ +\x8bH\xbe\xb3~\x1333[\xbf\xf3\xb5\x91\xf2n\xbc\ +\x15\xc3d\x8b\xd4\xc3\xa0E$\xdb9\xbf\xaf\x99\x99\xa5\ +\xe2\xec^\xde\x0a/\xf7\xe6;\xcdB\xf50h\x11\xc9\ +v\xc6\x9fj^f\xe9\x07Vw\xf97\xdf\xbc\xe1e\ +\x8b\xd5\xc3\xa0E$\xcb\x19\x7f\xbdY\x99\x9d\xe2W\xa1\ +\xf3X\xddil\xc0\xfd,X\x0f\x83\x16\x91\xecf{\ +\x1f\xff\x80\xce\xd2\xbeVw:\x9bp@\xb8\xc7\xa2M\ +\xd2\xc5V\xb0\x88\xf40\xdb\x175#\xb3swqf\ +[\xddim\xc4\x8d,\x5c\x0f\x83\x16\x91\xac\xe6\xfa\xb6\ +\xe6cv6\xb4\xb2\xd3\xdc\x8c\x1e\x08\xeaa\xd0\x22\x92\ +\xcfL\xff\xae\xf9\x98\x95+\xac\xeat7\xe3\x92\xb5g\ +\xdeY\xc8\x1e\x06-\x22\xe9\xcf\xf4\xdb\xcc\xc6\xac\x9eG\ +\xfb^\xab:\xed\x0dy\xa2\x85\xeca\xd0\x22\x92\xfc,\ +\x1f\xe1>\x87Y\xf9\x96U\x9d\xc7\xa6|\xceb\xf60\ +h\x11Iz\x96om&f\xe3\xd90\xdc\xaa\xcec\ +c\xeejA'k\x07+XD\x8aGj\x99\x87\xd9\ +\xf8\xbc\x15\x9d\xcf\xc6\xec\x17n\xb7\xa8\x93\xfd\x97\x8e\x87\ +A\x8bT{\x86\x17\xf7\xbfz\xcc<\xccB\xf1=\xba\ +\xbeVu^\x1bt\x1d\x0b;Y\xa7Y\xc1\x22\x95\x9e\ +\xdf+\x99\x83\xd9X\xdb\x8a\xces\x93^hq'\xfb\ +0\xe8\xd5\xad`\x91\xca\xce\xeec\xcc\xc1,\x5c`5\ +\xe7\xbbI\x17\x0eoZ\xe4I\xba\xdd\xc3\xa0E*9\ +\xb7\x8b\x8f\x07\xffi\x06&\xef\x8d\xe2\x0c\xb6\xa2\xf3\xde\ +\xacGZ\xe8\xc9\xda\xcf\x0a\x16\xa9\xdc\xcc^\xd5\xec\xcb\ +\xc2\xe1Vs\xfe\x9bu\xce\xf0\xb8\xc5\x9e\xa4\xd7\xc2\x02\ +V\xb1H\xa5f\xf6)f_\xf2\x8a\x1f(\x0c\xb5\x9a\ +\xab\xb1a\xb7\xb3\xe0\x93u\x91\x15,R\x99Y=(\ +\xbch\xee%\xefSVsu6m\xf1\x99\xfeM\x16\ +}\xb26\xb2\x8aE*1\xab\xb77\xef\x92w\xa3\x1b\ +FWo\xe3\xfa\x5c?]\x0fx\x18\xb4H%\xe6\xb4\ +\x7f\x08\xa7\xff\x0b\xf0\xf7[\xc9\xd5\xdc\xbcg\xdb\x00\xc9\ +:\xd2\x0a\x16\xf1\x8f`J\xed,+\xb9\xba\x1bxt\ +\x18g\x13$iBX\xd2*\x16\xc9v>_`\xce\ +%\xff\xa3\xa4\xf9\xad\xe4jo\xe2\x83m\x84d\xfd\xce\ +g\xfb\x22Y\xce\xe5\xc5\xc3d3.i_\xb2\x92m\ +\xe4A\xb5\xef\xf4\xd8\x10i\xda\xde*\x16\xc9n.\x9f\ +i\xb6%\xed\xfe0\xd0J\x96b3oeC$\xeb\ +\x990\xd2*\x16\xc9f\x1e/\x1a\xde6\xdb\x92\xb6\x85\ +\x95,\xff\xde\xd0\xc5m\x1b\xae\xb1)\x92u\xaaU,\ +\x92\xcd<>\xc7LK\xda\xd5\xbe\xba!\xd3o\xea\xe5\ +\xc3$\x9b#\xd9\x9f\x02\xaff\x15\x8b$?\x87\x97\xf3\ +\xdd\xab\xa4\x15g\xe8\xb2V\xb2\xccls{$C\xba\ +n\x0b\xfd\xacb\x91\xa4g\xf0o\xcc\xb2\xa4}\xcf*\ +\x96\x9e6\xf7(\x8feH\xda>V\xb1H\xb2\xf3w\ +s3,i\xc5\xd99\xcaJ\x96Ym\xf2}l\x94\ +d\xbd\x1a\xdem\x15\x8b$7w\x07\xfb5w\xf2\xf6\ +\xb2\x92ev\x1b\xbd\x7f\xb8\xcbf\xf10h\x11\xe9\xd8\ +\xdc=\xca\xecJ\xda\x9d\xc5\xd9i%K=\x9b}\x03\ +\x1b&i\x9b[\xc5\x22\xc9\xcc\xdb\xe5jOf0\xbb\ +\xd2\xf5\x11+Y\x1a\xd9\xf4\x97\xdb4\xc9z\xc2\xbd\xb1\ +D\x92\xf9\xc4\xe0V3+i\x97Y\xc9\xd2\xe8\xc6_\ +\xc2\xbf\xaa\x92v\xaeU,R\xfa9\xfb5\xb3*\xf9\ +g\xc2.f%K3\x9b\xff\x04\x1b(i\x9f\xb0\x8a\ +EJ;_Wu\xc7\xf6\xe4}\xd3J\x96f\x07\xc0\ +\xf0\xda\xa3Xl\xa44\xbd\x1c\x16\xb1\x92EJ9[\ +\xfdj0mO\x87aV\xb3\xf4f\x10|\xceFJ\ +\xda-\x1e:*R\xaa\x99Z<\x9a\xec\x22\xb3)y\ +;[\xcd\xd2\xdba\xd0\xb7v\x97p\x1b*]\xdf\xb7\ +\x92EJ3S\xf77\x93\x92\xf7\xe7\xe2l\xb4\x9a\xa5\ +\x15\x03a-\x1b*y;Y\xc9\x22]\x9f\xa5\x1f\xf2\ +\xcc\xd7,\xaci5K+\x07\xc3\xcfl\xaa\xe4\x7f\xed\ +\xb2\x96\x95,\xd2\xb5\x19\xba\x84G\x91e\xe1\xa7V\xb3\ +\xb4z8\x8c\x09o\xd8\x5cI{.,n5\x8bt\ +|~\xce\x13\xfea\x06%o|X\xc8\x8a\x96v\x0c\ +\x89\xc3l\xb0\xe4\xdd\x1f\xdee5\x8btln\x0e\x0d\ +7\x9b=Y8\xd4\x8a\x96v\x0e\x8aGm\xb2\xe4\x15\ +?Z\x18nE\x8b\xb4}f\x0e\x0c\xbf2s\xb2\xf0\ +H\x18bUK;\x07\xc6\xb66Z\x16\xfeP\x14f\ ++Z\xa4m\xb3\xb2\xbf\xdb1\xb8q\xb3H#C\xa3\ +O\xedp\xb6\xe1\xd2w]\x98\xd3\xaa\x16iK\xb9\xfa\ +\xa9\x19\x93\x8d\x1b\x8a\xb3\xcf\xca\x96N\x0c\x8fU\xc2\x14\ +\x9b.\x0b\xbfw7b\x91\x96\xce\xc7\x01\xfer\x95\x95\ +\xe2\xac[\xc9\xca\x96N\x0e\x913m\xbcl\xfc)\x8c\ +\xb2\xaaEz=\x17\x87\xfa\xceUv\xce\xb0\xb2\xa5\xd3\ +\x83d\xfe\xf0\xaa\xcd\x97\x8d{<\xb7P\xa4W3\xb1\ +\xb8\x15\xc3MfIV^\xf1\xabk\xe9\xd6@9\xc8\ +\x06\xcc\xcaS\xc5\xc7\xbfV\xb6H\xc3\xb3p\xf1p\x9f\ +\x19\x92\x9d\x03\xadn\xe9\xd6P)~\x82\xfcO\x9b0\ +\xbb\x1b\xe9\xf9\xb5\x8cH\xfdsp\xbd\xf0\x82\xd9\x91\x9d\ +\xe2\xc6\xb0\x03\xadp\xe9\xe6p\xd9\xdcF\xcc\xd21\xa1\ +\x9f\x15.\xd2\xe3\xec+~Q\xbdox\xdb\xbc\xc8\xd2\ +\xa6V\xb9\x94a\xc8\x8c\xb5\x19\xb3tM\x98\xcf*\x17\ +\x99a\xee\xcd\x15.0#\xb2\xf5k\xab\x5c\xca2l\ +\x96\xf1\x84\xf8l=\x1d6\xb0\xcaE\xfe3\xefV\xf1\ +\xd5\x88\xac\x15\x7f\x91\x5c\xdaJ\x972\x0d\x9d\x93m\xcc\ +\xac\xef\x03s\x92\xc7DH\xc5g\x5c\xbf\xf0\x950\xd1\ +L\xc8\xdaIV\xbb\x94m\xf8\xcc\xed\x8b\x9e\x95\xb8\x95\ +\xc3\x1aV\xbbTp\xbe-\xed\x81\xcd\x95\xf0|\x18i\ +\xc5K\x19\x87\xd0\x9e6h%\xfe\x9au\x8a\x87EK\ +Ef\xda\xa0\xf0\x8d\xf0\x96\xbd_\x09\xbb[\xf5R\xd6\ +aT<\x7f\xeb\x0e\x9b\xb42\xdf\xcd\xda\xd1\xf3\xb9$\ +\xe3y\xb6Q\xed\xa7\xfa\xf6{5\xfc\xdd/\xa7\xa5\xec\ +C\xe9\xc36j\xa5\xfc1\xace\xe5KF3\xac\xf8\ +8\xf0J{\xbbr\xd6\xb7\xfa%\x85\x01u\xa9\xcdZ\ +9\xbf\x08+X\xfd\x92\xf0\xdcZ(\xfc\xc8/\xa2+\ +\xe9b;@R\x19T\x8b\x85\x096m%\xbf\x9f\xf5\ +sO\x9e\x97\xc4\xe6\xd5\xc2\xe1T3\xab\xb2\x8a\xef\xd7\ +-j'HJC\xeb8\x1b\xb7\xda7\xea+\xee\x9f\ +\xe5;ZR\xe2\x19\xb5b8\xd7\x9d\xd8=\xb5\xc2n\ +\x90\xd4\x86\xd7\xb0\xda\xc3\x83m\xe0j\xbb3\xec\xe5W\ +\x87R\x92\xb94 |<\x5cko\x12\x9e,\xee\xca\ +ogH\x8a\xc3l'\x1b\x98\x9a\xd7\xc39\xe1C\xa1\ +\xaf\xdd!\x1d\x9eE\xcb\x87\x13\xc33\xf6\x22S\xd9\xd1\ +\xee\x90T\x87Z\xdf\xf0'\x9b\x98\xe9<\x11\xbe\x1b\xd6\ +\xf6\xb3hi\xe3\xfc)~\x0d\xf8u\xb7\x8e\xa1\x07\xb7\ +\xf8\xc7\x9e\xa4>\xe4\xd6\xb0\x91\x99\x85\xe7\xc2\xd9\xe1S\ +a^;Fz1k\x86\xd6\xee]u\x92\xfbWQ\ +\x87\xd5\xed\x1a\xc9a\xf0\xfd\xc4f\xa6Nw\xd4\xee\x14\ +\xbf]X\xc2\x97\xe4e\x16se\xbe\xb0y86\xdc\ +\xe8W\x804\xe0\x5c;Hr\x19\x84\x0b\x86\xf165\ +Mx9\xdcP+]{\x87\x0d\xc3\xe2a\xa0\x9dU\ +\x89\xd9Q<`yLX/\xecR\xfb\x1e\xd5\xafk\ +_N\xb6?h\xf6\xfb\xa0\x0b\xd8]\x92\xd3\xa0\xfc\xba\ +\x8dM\x8b\xef\xb9U<\xae\xe7o\xe1\xeapa8=\ +\x9c<\x13\xdf\x9d\xceI\xd3\xf9\xcet\xbe=\x9d\x13g\ +\xe2[\xd39a:\xc7O\xe7\x9b\xd39n:\xc7\xce\ +\xc41\xd39z:GM\xe7\xc8\xe9\x1cQrG\xd6\ +^\xc77k\xef\xcb\x19\xe1\x8206\xfc%<\xee\xa6\ +\x9f\xb4\xc1!Nd\xc9\xad`\x0d\x09\x0f\xdb\xdc\x00t\ +\xc9Ca\xb0\x13Yr,Y\x9f\xb0\xc1\x01\xe8\x92m\ +\x9c\xc4\x92k\xc1\xea\x13\xae\xb7\xc9\x01\xe8\xb0\xeb\xfch\ +Fr/Y+\x85\xc96;\x00\x1dR\x9c9+:\ +\x81\xa5\x0a%\xebt\x1b\x1e\x80\x0e9\xcd\xc9+U)\ +X\xef\x0a\xaf\xd8\xf4\x00t\xe0V/nb,\x95*\ +Y\x07\xda\xf8\x00\xb4\xd9~N\x5c\xa9Z\xc1\x1a\x18\xee\ +\xb3\xf9\x01h\x93{\xc2\x00'\xaeT\xb1dmb\x00\ +\x00\xd0&\x1b9i\xa5\xca%\xebW\x86\x00\x00-v\ +\x95\x13V\xaa^\xb0\x96\x0ao\x1b\x06\x00\xb4\xc8\xc4\xb0\ +\xa4\x13V\x94\xacw\x9e\x07g(\x00\xd0\x0a':Y\ +E\xde)X#\xc3\xf3\x86\x02\x00\xbd\xf4l\x18\xe1d\ +\x15\xf9o\xc9\xda\xcd`\x00\xa0\x97vu\xa2\x8aL[\ +\xb0\xfa\x85\xbf\x19\x0e\x004\xe9\xf6\xe2,q\xa2\x8a\xcc\ +X\xb2\xd63 \x00h\xd2:NR\x91\x9eK\xd6\xc5\ +\x86\x04\x00\x0d\xba\xd0\x09*2\xeb\x82\xb5hx\xcb\xb0\ +\x00\xa0No\x86\x85\x9d\xa0\x22\xb3/YG\x1b\x18\x00\ +\xd4\xe9H'\xa7H}\x05k\xce\xf0\x84\xa1\x01\xc0l\ +<^\x9c\x19NN\x91\xfaK\xd6\x0e\x06\x07\x00\xb3\xb1\ +\x9d\x13S\xa4\xb1\x82\xd5'\xdcbx\x00\xd0\x83\x9b\x8a\ +\xb3\xc2\x89)\xd2x\xc9Z\xdd\x00\x01`&\xa6\x84\xf7\ +;)E\x9a/Y\xe7\x18$\x00L\xe7l'\xa4H\ +\xef\x0a\xd6\xbb\xc38\xc3\x04\x80\x9a\xe2L\x18\xed\x84\x14\ +\xe9}\xc9\xfa\xaa\x81\x02@\xcd\xc1NF\x91\xd6\x14\xac\ +\xc1\xe1!C\x05\xa0\xf2\x1e\x08\x83\x9c\x8c\x22\xad+Y\ +\xdb\x18,\x00\x95\xb7\xa5\x13Q\xa4\xb5\x05\xab\xb8m\xc3\ +\xb5\x86\x0b@e]\xe3\xb6\x0c\x22\xed)Y+\x84\xc9\ +\x86\x0c@\xe5L\x0a\xcb;\x09E\xdaW\xb2N5h\ +\x00*\xe7\x14'\xa0H{\x0b\xd6\xbc\xe1e\xc3\x06\xa0\ +2^\x0c\xa3\x9c\x80\x22\xed/Y\xfb\x198\x00\x95\xb1\ +\xb7\x93O\xa43\x05k@\xb8\xc7\xd0\x01\xc8\xde]\xa1\ +\xbf\x93O\xa4s%k#\x83\x07 {\x1b8\xf1D\ +:_\xb2\xae4|\x00\xb2u\xb9\x93N\xa4;\x05\xeb\ +\xbda\xa2!\x04\x90\x9d\x09a\x09'\x9dH\xf7J\xd6\ +\x89\x06\x11@v\x8ew\xc2\x89t\xb7`\x8d\x08\xcf\x1a\ +F\x00\xd9x:\x0cs\xc2\x89t\xbfd\xedb \x01\ +d\xe3sN6\x91r\x14\xac~\xe1/\x86\x12@\xf2\ +n\x0b}\x9dl\x22\xe5)Y\xeb\x18L\x00\xc9[\xcb\ +\x89&R\xbe\x92u\xa1\xe1\x04\x90\xac\xf3\x9dd\x22\xe5\ +,X\x0b\x877\x0d)\x80\xe4\x8c\x0f\x0b9\xc9D\xca\ +[\xb2\x8e0\xa8\x00\x92s\x98\x13L\xa4\xdc\x05kh\ +x\xdc\xb0\x02H\xc6\xa3\xc5\xecv\x82\x89\x94\xbfdm\ +g`\x01$c['\x97H\x1a\x05\xabO\xf8\x83\xa1\ +\x05Pz\xd7\x173\xdb\xc9%\x92N\xc9Z!L2\ +\xbc\x00J\xeb\xed\xb0\xac\x13K$\xbd\x92u\x82\x01\x06\ +PZ\xc7:\xa9D\xd2,X\x83\xc3\xdd\x86\x18@\xe9\ +\xdc\x11\x069\xa9D\xd2-Y\xef\x0f\x13\x0d3\x80\xd2\ +\x98\x10VrB\x89\xa4_\xb2\xbeh\xa0\x01\x94\xc6\xbe\ +N&\x91<\x0aV\xf1\xab\xc2+\x0c5\x80\xae\xbb\xcc\ +\xaf\x06E\xf2*Y#\xc2}\x86\x1b@\xd7\xdc\x13\x86\ +9\x91D\xf2+YK\x87W\x0c9\x80\x8e{),\ +\xe9$\x12\xc9\xb7d}\xb8v\xef\x15\x03\x0f\xa0s_\ +j_\xd7\x09$\x92\x7f\xc9\xfa\x8c\x81\x07\xd0\x11S\xc2\ +\xa7\x9d<\x22\xd5)Y\x07\x18|\x00m\xb7\x97\x13G\ +\xa4z%\xeb\x08\xc3\x0f\xa0m\xbe\xe6\xa4\x11\xa9f\xc1\ +*n\xdfp\x8c!\x08\xd0r\x87:eD\x94\xac\xa3\ +\x0dC\x80\x96\xf9\xba\xd3ED\xfe]\xb4\xbel(\x02\ +\xf4\xda\xfeN\x14\x11\x99\xbed\xed\x1a&\x19\x90\x00\x0d\ ++n\x7f\xb3\xb3\x93DDz*Y\x9b\x85\xf1\x86%\ +@\xdd\xc6\x85\x8d\x9c \x222\xbb\x92\xb5jx\xd2\xd0\ +\x04\x98\xad\xc7\xc2JN\x0e\x11\xa9\xb7d-\x18n3\ +<\x01ztk\x18\xed\xc4\x10\x91FK\xd6\x90p\x9e\ +!\x0a0\x83\xb3\xc2`'\x85\x884[\xb2\x8a\xdb8\ +\xec\x1d&\x1a\xa8\x00\xffz\xae\xe0nN\x07\x11iU\ +\xd1Z-\x1cP\xfb%\xe2\x0b\x0e \xc8\xca\xf3\xb5\x07\xc8\x17\ +\xdf\xcb\x5c\xd6\xc7\x7f\x22\x22\xdd+\x5cK\x87\x1d\xc3I\ +\xe1:\x7f\xe5\x82d<\x19\xae\x0d\xdf\x0e;\x14\xbf\xfe\ +S\xa8DD\xca]\xbc\x86\x87\x95j\x1f+\xec\x19\x0e\ +\xad\x15\xb0\xe2c\xc6\xf3\xc2\x85@\xdb\x9d[\xdbs\xc5\ +\xde\xfbz\xd8#l\x1e\xde\x17\x86\x99T\x92k\xfe\x1f\ +\x02g\xedA\xf2\xbe\xe7\xfe\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x07\xc8\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xde\x01\x17\x07\x10.\x87\x15\x98r\x00\x00\x07UID\ +ATX\xc3\xc5\x96kl\x14\xd7\x15\xc7\xff\xf7\xce\xec\ +\xcc\xec\xeczg\xbd\xb6\xc1o\x19p\x9b\x1a\x12\x070\ +\x11\x8fR\xb0\x89\x92\xd6\xcd\xc3\x01Um\x12\x145\x8a\ +ZJ\xa2*U?\xb4\x91Z\xda8!j\xa4\xaa\xf9\ +\x00\xca\x87\xd2~A\xa8\x12\x95h\x9bHT| m\ +x$\xa8\x01\x11\x1a\x0a\xc6`\x17\x1b\xb0\xf1\x13\xef\xfb\ +=\xf7\xce\xe9\x07\xef\xaew\xed5PT\xa9s4\x9a\ +3\xf7\xce\xcc\xf9\xdd\xff\xbd\xe7\xcc\x05\xfe\xcf\x07\xfb/\ +\x9fW\x00xr\xa7\x0b\x80\x0a\x80\x03\x90\x00\x04\x80,\ +\x808\x80$\x00\xfa_\x02h\x00\xaa\x00T\x14^\xac\ +\x85\xaa~\x03K A\xe2#L\xd3\x04D\xd1\xf3\x0e\ +\x800\x80P\x0e\xee\x81\x01\x98\xd7\xeb\xad\xb1m\xdbB\ +\x13i\xca\xcf\xc56,\xa3\xa7\x99\x07\x1b\x08\xe4\xf3\xb9\ +|6\x81\x10\xb3c.\x06\x16\xa5\x04\xce`\x88\x1d\x93\ +\xbfR?\xc6\x08\x13\x00\x1c\xd34\xa7C\xa1P\xe4A\ +\x00\xd4@ P\xa7X\xdcL\xbd\x1b~\x96V\xc87\ +\xda\xad\xd5\xde-\x81N}\x95\xe7\x11\x04\x94\x008)\ +\x00\x00\xc9\x04\x82\x22\x88K\x89\x8b8\x1d<\x99\xe9\x8b\ +\x5c\x8a\xf2A\xf5]\xfd'\xd61f3\x871\x16\x9d\ +\x9a\x9a\x9a*7-\x8b\x01(---M\xa9\x0d\xf1\ +\xea\xc4\xeb\xc1\xdf\xaf\xaaz\xa4\xed\xbb\x0d\xaf\xe8\x8d\xae\ +&Le\xa70c\xdfA\xd2I\xc0!\x07\x94\xfb\xa6\ +\xa1\xb8\x11P\x03X\xa2-\xc5m{\x14\x7f\x18;\x98\ +\xb9z\xa7\xff\xa2\xf9^\xe5\xab\xaesF\x0c@rt\ +ttl>\x84RN\x95\xd6\xd6\xd6\xfa\xe4\x8b\x91\xd6\ +\xf8\xcb\xc1\xbf|\xbb\xe5\x85e\xdf\xab\xdb\xed\x8a\xdaQ\ +\x5cK\xf5#$\x83H;i8E& \x90\xa64\ +\x82b\x06\xa3\x99\x11\x98\x8a\x07\xddUO\xab\xaa[\xad\ +\xbb\xd8~\xfe9\x17s\x1d\xb7nV\xa6\xfd~?\x0f\ +\x06\x83\xc9\xbb\x02tttTg7\xa7\x1a\x83/L\ +\xfci\xf7\x8a\x1f.\xe9\xf4=\xce/%.bF\xdc\ +\x81\x84,\x09\xec\xc0)i\x939\x0b\x89\x10\xa6\xc5\x14\ +\xd6\xfb6\xb1Zo\x9d\xe7l\xdd\xa7\xdb\xfc\xb7\x03G\ +<\x91\x0a\xa5\xa6\xa6&399i\x97\x05\xe8\xec\xec\ +T\x19cK\x87\x7fz\xe5`O\xf3\x8e\x15[}]\ +\xfcB\xfc\xaa+\xba122\x12\xcd\xc7\ +\xe4%\xb9\xa6i\x81\xeb\xaf\xf7u5U6\xaf\xfaf\ +\xe0\x19\xe5\x8b\xc4\x05$)\x09\x1b6\x04\xc4\x82\xab\xc3\ +$$\x13\x90\xc8\x9dLB@\x14\xe02\x94\xc1\xf9\xd8\ +9tW?\xa54\x06\x1a7\xdc\xfc\xc1\xc0\xc6\x8a\x8a\ +\x0aWwww\xc5\x02\x80\xde\xde^\xce-\xe6K.\ +\x8f\xbf\xf9b\xfdK\xee\xe1\xf4u\xc4d47\xd6\xd9\ +\x00\x026$\xc4l\x1b\x13\xc8\x9b\xcd\xec\x02\x94d\x12\ +\x22\xdf\xc7\x04\x22N\x04\x83\xa9\x01|\xab\xfe;\xee\xd8\ +\xf2\xf0\xdb.\xaf\x8bi\x9af-\x00\xe8\xeb\xeb3\x07\ +\xb7\xf7=Z\xefm\xa8l\xd0\x1bq#3\x5c\x18m\ +\xded\x01c\xce\xcf\x8fx\x81\xcf\xe6\xee\x873CX\ +\xaa\xd5\xa2\xdaS\xb3d\xf0\x99\xbe6\xc30\xb4\xce\xce\ +N\x15\xb9R:\x9bF\x86a\x86\x1b\x83O=[\xf5\ +\x9c{<3\x86,\xb2`9+\xa4\x07+\xcd\xda|\ +\x0a\x12\x08\xc4\x08Ds\xeb!\xed\xa4\x10vB\x88\xc8\ +\x08\xe2N\x0c<\xc9\xf0%\xff\x97\x8d\x7f.\xbb\xd0m\ +\x18F_CC\x83\x09 Z\x00\xb0,K\x15\x86\xbd\ +u\x85\xd9\xca'\xb2\xe3\x10\xb9\xca\xca\xc1\x01Z\x1d\xaaTy\x09@\xa5\xbbR\ +\x00\xa0\x14\xa5p\xc7\x99\x86\xed\xd8`\x8c\x95\x9e\x98\xf3\ +\xc1P\xba>\xc0f\xa7\x85\xca\x17x\x05\x0a$$@\ + \x8f\xd7C\x94\x22Y\x92\x05\x9a\xa6I\x0e\x1eK:\ +\x09\xb8\x15\xb3D\xf6\x82\xcd\x03\xe2\x9c\x83s^\x1e\xb4\ +\xc8\x00\xc0T\ +Sm\xd7\xe1ccG\xd3\x9b\xbd[\xe1W*g\x0b\ +\x0c\xcd\x96Z\x10J\xee\x17k\x07\x00\xbfR\x89\xafz\ +\xb7\xe0\xe8\xd8\x87)]\x18\x07\x7f\xa9\xbd3`YV\ +\xe8^[2\xf6\xd1\x85\xe3u\xcf\xa3\xe7\x83\x87k\xda\ +\xd7n\xae\xda\xa2~\x96<\x83\x091\xbe \x03\xf2\xb2\ +\xe7\xf3\x9f0\x07T\xa7\xd6c\xbd\xb9\x09\xa7\xa7O\xda\ +\xfd\xc1\xbes\xc7\xdc'^2\xb2\xeep{{{\xe8\ +^[2\x1c\xfa\xed\xa1\x849\xed=}$~x\xdd\ +xf\xacz[\xe0\x09\x97O\xb1\x10\x92!\xd8d/\ +\xc0.L\x03\x11L\xe6\xc1jc-\x1e\xd2\xdbp\xf4\ +\xf6\x87\xe9\x1b\x91\xe1\xb3\xef\xe9\xef\xef^[\xb9.\xdc\ +\xda\xda:s\xb7M)+\xbe\x1e8p@iXU\ +_\xf7\x9a\xf1\xca\xdbIW\xe2\xf9\xce\xfamZ\x9bg\ +\x15\x9b\x11w0*G\x10\x95\x11d(\x03\x00\xd0\x99\ +\x0e\x9fb\xa1AiD\xb5Z\x83+\xf1\xcbtj\xec\ +D\xd6K\x15\x87\x0ek\x1f\xfc:\xa0V\x85\xf7\xec\xd9\ +\x13:r\xe4\x08\x15mJ\x09sI\xb5\x10\x00\x00\xeb\ +\xe8\xe8`{\xf7\xee\xf5\xffn\xe9\xfb\xeb?\xc1\x89w\ +\x1c\xe6\xacl\x0b\xacd\xcb*\x96\xab\x96\xea\x87G\xf1\ +\x00\x00\x12N\x02\x11;\x8c\xa1\xd8uq5\xd4O\x0a\ +)\xff\xda\x86'\x7f\xf1\xe3\xcc\x1b\xfd\x13\x13\x13\xe1\xed\ +\xdb\xb7\xc7\xe7\x07\x9e\x0fP\x0e\xa2\xe0\xef\xda\xb5K\xdd\ +\xb1c\x87\xf5g\xeb\x8f\x0f\x9dR>\xfezH\x99y\ +\xc2fv\xadt\xa4\x1f\x1c\xa4\x92\x1aQ\x99:\x1e\x90\ +\xd5\xc7\x1f\xa7'\x8f\xef\xb4_\x1e\x9d\x9c\x9c\x8c\xed\xdf\ +\xbf?z\xf2\xe4IY\x14p\x01D9\x80E\x15\xd9\ +\xb8q#\xdf\xb9s\xa7\xd9\xd4\xd4\xa4\xab\xaa\xea2\x0c\ +C\xe5\x9c3)\xa5CD\x22\x1a\x8d\xda\xb7n\xddJ\ +\xed\xdb\xb7/}\xe3\xc6\x0d\xa7\xdc\x88\xe7\x83\xdc+8\ +\xee\x02\xb4\xd8A\x8b\x5c\xcb\xaa\xf0 \x01\xef\x17\xe0\xbe\ +\x80\xfe\x03\xc75\xc0>\x8b+\x95y\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x03^\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a1-0n\x97\x89\x00\x00\x01[ID\ +ATh\xde\xed\x95\xb1J\x03A\x10\x86\xff\x99\xbdD\ +Hg#\x11\xa2&6\x82\x95O \xc6\x07\x11|\x03\ +\x0bIm!\x16>D\x04}\x0b\x1b\xd3\x0b\xa2\xd7Z\ +\x8a\x18\xb1\xb7\xca\xeeXx\x1e{G.\x22\xce\x15\xa7\ +\xf3\xc12;\x1c\xdc\xce\xb7\xcc\xdc\x01\x86a\x18\xc6\x7f\ +\x86\xe2\xa4{|\xbb\x07\xe1\x0b@\xfa\xaa\xa7\xb8d\x7f\ +z\xbesS\x87@R\xb0\x117\x86s\xfd\x92\xd7\xef\ +\x083\xc0\xfb\x13\x00\xb5\x08p\xf1\xa6\xdc@\xb5x\x00\ + \x86@v\xbb\xa3\xfba\xfd\x02\xda\xc5g\x02D\x0c\ +\xf2\xfe\xb4\xf6\x19X\x1d\xa5\x92?Pr\xe9t\xda\xe8\ +m\xac\xa8\xbcK O$|09\x5c\x9e\xcc\x9d\x81\ +\x98\xe7\xb3u\x95C\x8f\xae\x03\xd27\x06\xb9\x96\x82\x81\ +\xac\x850\x1b\x03\xd8\xach!]\xee\xa6\x82\x87W\x00\ +\xec\x94\xfa\x85\xc0\x9c\x0c\x16\xcc\x80.\x97\xa9\x80\xf8s\ +\x06\xf4\x9a\x9e\xaa?\xa3[\xdb\xbd|?\xbc\x0a:\xe7\ +%\xae\xce;*\x0apk\xa9q\x7fbF\xc31\x01\ +\x130\x01\x130\x01\x130\x01\x130\x01\x130\x01\x13\ +0\x01\x130\x81? @\x0d\xaa;\xaf5\xc9\x12\x07\ +\xc0\xbd\xbf<6E\xa0\x0d\xc0\x03\xf0T\xb2\xe2Lf\ +^\xe4\x8a\x9c\xa2\x18\xaf\xf8\xa6$\x8a\xf1\x0aQ\xfcZ\ +\xbe\x22/G\xf9i\xdb\xc4\xc5\xf1\x82\xbc\xaa%\xa5\xb4\ +\x8f\x05\xaar\xc30\xbe\xe1\x03\x0d\x16Wf>\xb8\xfe\ +\xcc\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00 \xa5\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x0d{zTXtRaw prof\ +ile type exif\x00\x00x\ +\xda\xdd\x9a[r\xe30\xb2D\xff\xb1\x8aY\x02\xf1\x06\ +\x96\x83g\xc4\xec\xe0.\x7fN\x01\xd4\xcb\x96m\xc9\xee\ +\xaf+E\x8b\xb2H\x11@eVV\x16\xd4j\xfc\xdf\ +\x7f\xa7\xfa\x0f\x0f\x9f\xbcQ\xce\xc7\x14r\x08\x07\x0f\x97\ +]6\x857\xe9\xd8\x8f\xb2^\xf5\xe1\xd6\xebz\xb8\xf3\ +\x14\x7f?|\xae\xae'\x0c\x1fY\x8ev\xff\x99\xc2y\ +\xfd\xe5s}\xbd\xc1>\x14\xde\xf9\xbb\x1b\xa5v\x9e\xa8\ +\x8f'\xf29\x82I\x1fnt\x0edeF\x867\xfd\ +\xbcQ>od\xcd>\xa1\xcf\x1b\x94\xbd\xac#\xe4\x14\ +\xef\x97P\xc7>\xf6\xcbJ\xd2\xfe\xa7\xe4%\xd5=\x8e\ +\xce\xe7\xb9\x0f\x7f\xbbH\xf4\xbag\x1ck\xcc\xb0\xda\x1e\ +\xbcZ{N\xc0\xca?\xa3lYo\x0a\xa73\x17j\ +\x1bxol\xe4u_\xaaw@\x9e\xc5\xe9\xfa`@\ +5\xc7\x09\xc5\xe7\x8b\x1eP\xb9\xbe\xd3\xcf?W\x1f\xd1\ +r\xe6\xbc\xc4~\x08r\xb8\x1e\x9f~\xae\xb4\x7f\x8e\xca\ +\x0a\xfd=\x7f\xd2\xf9\xce<~\x9e\x86\xf6{F\x1f\xa2\ +/\xff\xe6\xeci\xae5\xb3\x8a\xe2\x02\xa1\x0e\xe7\xa2\xae\ +Q\x937\x5cW\x19B\x86N\x8a\xa9\x85#\xf2\xcfs\ +\x8b\xb8\x9e\x99g\x82\xd5\x0d*\xf4\xa3\x1d\x95g\xd3Y\ +\x1b\xe0\x9a\xda\xe9\xae\x8b\x9ez\xacc\xd3\x8d):3\ +\x94\x89\xbc1\xa6\x19\xbb>L6\x9al\x9a\x15\xfc\x9c\ +<\xf54\xd1f\xdbm\x02\xcb\xb6`w\xd6\x5c\xe7\xa2\ +\xd7\xb0\xf9hj\x8d\x96\x18\xb9k.5\x9a\x9bi\xe1\ +\xc5\xbbO\xf5\xee\x17\xe6\x94T\xd0\xfaH\xd7X1/\ +c$\xd8LC\x90\x93W.\x03\x11=\xcf\xa0\xfa\x15\ +\xe0\xcb\xf3\xe3Cp\xb5 \xe8%\xca\x92\x22\x99\xc0\xd6\ +}\x8b\xea\xf5M\x09\xec\x02\xdar\xa1\xe7\xb8sP\xc7\ +~\xde\x80\x101\xb4g2\xda\x82\x00\xa8i\xebu\xd0\ +G4&jM \x13\x00\x15\xa6n\xac3\x15\x04\xb4\ +\xf7\xa63I\xe3\xac\x0d`\x93\x8c\x0c\xcdW\xa2^\x97\ +\x1ao\xf8X\xf19b\x06\x12\x9e,\x8b`\x93m\x01\ +,\xe7<\xfc\x89.\xc1\xa1\xe2\xadw\xde\xfb\xe0#Z\ +\x98}\x096\xb8\xe0C\x081\x88(\x96h\xa3S\xd1\ +\xc7\x10cL1\xc7\x92lr\xc9\xa7\x90bJ)\xa7\ +\x92M\xb6\x88\xa6\xcf!\xc7\x9cr\xce\xa50f\xe1\xce\ +\x85o\x17.(\xa5\x9aj\xab\xab^\xd5PcM5\ +\xd7\xd2\xa0Os\xcd\xb7\xd0bK-\xb7\xd2M\xb7\x1d\ +\xfd\xe8\xa1\xc7\x9ez\xeee\xe8\x01\x95\x86\x1b~\x84\x11\ +G\x1ay\x94\x09\xd5\xa6U\xd3M?\xc3\x8c3\xcd<\ +\xcb\x15\xb5\x13\xd6O\xcf7P\xd3'jf!%\x17\ +\xc6+j|\x1a\xe3\xe5\x16Z\xe4\xc4\x0bf\x00F\x15\ +\xd1 \x1e\x05\x02\x08m\x04\xb3#i\xe7\x8c '\x98\ +\x1d\xd9\x90\x15\xde0I/\x98u-\x88\x81\xa0\x1b\xda\ +\xf8\xa9/\xd8)\xb3\x11\x15\xe4\xfe\x84\x9b\x8a\xee\x017\ +\xf3[\xe4\x94@\xf7&r\x9fq{\x86Z\x972\xd4\ +\x16b;\x0b%\xa8\x87%\xfb8?R1\xa9H\xb1\ +\xfbtT_\x9d0\xb5\x07\xdbl\x1e\xba\xcd\x99\x5c\x9c\ +\xa3\xdb9r\x9c!M\xcb\xc8\xb3U\xdbs\x8dL\xab\ +\xb7Y\xba\x0a\xd6\xb3F\xd6\xc14G\xae\xec\xdd\xfb\x99\xea\xb4,\xc6!\xfd(\ +>q\x11 \x1a!1\xf7\xd0\xa8\xf5\x86\xd2\xf0\x0e\x93\ +(\x1d\xa5\xdc\xb4\xc5Z\xc4E=W\x97\xf7\xc5E=\ +W\x97\xf7\xc5\xe5\xff\x8b\xf8/\xe0\x0c\xd58\xdbyV\ +\x01\xf5\x99\xf2p>\xdf\xf1\xfdk\xba?\x90]\xc1\xf6\ +G\xae\xfbQ\xc2=\xd7\x87\x8f\xaf\x90\x9d6\xeb\xc2u\ +V\xbd\xd9\x9e\xf6\xaa\x9f\xd3\xbdw\xe1Z\x8b\xeb\xfa\xe4\ +\x01\xc1\xc9\x1fAY\x9fz@%j\x1f\x19\xc9c9\ +\xa0\x8fc:j0\xbag\x88\x01\x8d\x1c^$0:\ +X\xa65$~e\xca\x11\x99\x04\xbf\xcc\x1f\x18\xf6\xd1\ +\xc4\x8c\x08\xd2\x22:\x5c$,\x14\xacS\xde,\x0c+\ +\xd7\xaa\xdb<\x945\xc2C\x96~Lo\x8e\x9a\x8b\xab\ +\xcev\x05\x8a9\x05\x0d\xc9\xbb3\x9a\xd2\x13\xc7\x1aS\ +\xd4{3Q\xe3Z\xaf\x04\xa3S\xba\xd0\xfe\x1c\xf2$\ +\xbe\xfa\x82\xf9\x92\x9c\xde\x1f\xb9riHcH\x05\x83\ +\x02\xd5\xa1q\xa1\x8c\x0cQ\xf1p\xb1\xb4x\x83\x7fy\ +\x80G\x0b\xf0\xc1\x00\x80{\x99\xc1\x10L\xe4\x1e\xcb5\ +b\x0b$\xd4\xe1\xe9\xbb\x1a_\xf2\x8e`G\xe61\xd2\ +\x16\x04l\x9a\xdel\xc3\xc2~w\x5c3\xb9TO\xe1\ +a\x89\xea\xa1t\xde\x0a\xe7&b\xa8\x88\x10\x06\xb2#\ +\xef\x14\xb5*s\xf0\x0ez9WcDWB\xba\xd4\ +\x07\xb5\x0b\x84\xec8\xc8\xeb\x97E\x22,\x11\xa2\xa8\xc5\ +\xdc:\xf1\xb5NN\xb4B\xd5H^#\x0b\xe2\xb3\xb3\ +\xd9JQ\x5c\xff\xa4\x03K\xa2\xe4\x0e#\x1d\x93\xa1\xaf\ +\x9f\x932\x8bT\xcb]\xe0-\xd4\xcaf\xb1\x17\xa0\x86\ +I\x86\xbd\x94\xe38$i\xe1y\xa7\x09#\xad\xbc\x0c\ +Sz\x81\xd5\xd3\xd63i)\xdc7\xb1\xf5\xea\xef\x22\ +\xbb5V\xfd]d\xb7\xc6\xaa?\x88\xec\x83\x86\xaa\x9f\ +E\xf45\x0dU?\x8b\xe8k\x1a\xaa\xbe\x10\xd1\xaf\xfc\ +\xcb\x9d\xb8>j\xab\xfa\xbd\xb8>j\xabz[\x5c\xd1\ +E\xe2\x1c\xe3\x0d_\xa2\xdc\xba\x920C\x22\xb2b\xb3\ +FH\x83o\x5cYQr\x1b\x12e\x83\x12\xd0\xcd\xe9\ +bmn\xc6{\x83\x9c\xa4\x8e6\xda\x8e\xc2\xcc\xa5\x89\ +\xca\x9e\x9c\xf9 \x89\x1f\x04\x91Ec8\xafY\xefD\ +\xb2E~\xc4/k+\xf2\xa3\x5cXY\x9f\xb7\xfe\xcc\ +z\x88\xfe\xc0\xab;{\x02\xd53\x08y\xd1\x87\xc8\xdd\ +\x86!\xebH~\xb2\xc4\x0b\xff\x17\x0e*j\x92<}\ +\x12\x9d'\xfd\xcf\xf7\xed\x8fZf\xbd\x14\x8d\xe0\xe1\xd4\ +uom\xd0~&\x1f\xa4\xb9\xa5\x03\xb5\xa8 \xe1%\ +oo\xf8=\xb1\xe6F=:sV\xe3G\xf3\xba4\ +\xd2\xa7\x16\x98\x9d:\xb2z\x14\x22\x94;\xedk\x96\xe5\ +\xcfx\xd1\x1b\x82\xbd5h\xe2!\x1f\x1c\xc2r\x85w\ +\xc4\xfe@kd\x9b12\xc5\xa6\xb7U\x02e\x88\xc2\ +\x10A%\xe2\x88 \x86~\xbccb\xb6\x03\x8c\x9c\xcc\ +4\xe7\x83\xf2\xa98\x83\x5cJg!;N\x89\x16\xe9\ +\xb4\xfb.\x97\x9f\x0b\x01\xbd\xc8iV\xd5\x08z!\x13\ +D\xfd\x02)>\xc6R\xd0]\x92\xed\xd1\xa4?[\xc9\ +[\xf1\xf4\x0e4gju\x96\x81\xa7\xa1\xa2s\x16\x7f\ +>\xfcTt;\xc9\xef\xc4B\xdc\xe48\x12\xae\x008\ +\xa4\xcd\x97\x8b\x0fYX\x9b$@\xf92e\xf5P\xff\ +&e\xedP\xd5?fl\x9e/Y\xffOfH}\ +\xef\x86\xee\xcc\xff\xd5\xfaS\xfd\x9e\x98\x7fd\xa4\xfd\x13\ +\xf3\xaf\xae\x85\xe9I]\xda\x95\xf7\xb5\xca\xa4\xeeJ\xd3\ +\x17\x95\xe9\xd1\x07}U\x9b\xd4\xb7\xdb\x0b\xf7\xb5\xc9~\ +o\xe0\xd5\xcf\xe4\x7f\x8d\xfb\xea\xf5$\xf8>\x07\xd4\xeb\ +I\xf0}\x0e\xa8\x0fI\xb0'\x1d3\xeb\xd1\x1a6\xdc\ +\x90\xdc.*<\xb8\xa8zsQ\xea,\x18GY[\ +)\xcfS\xf5\x80\x9d\x18\x1c\xd9\x9d\xc3\xfb\xae\xda\xaam\ +N\xcbc5\xd7\xd6\x96\x87r\xa5OqZ}\xcc\xa3\ +Ozr\xc9+\x14\x0aO/\xdc_y\x95W\xd7{\ +\x0a\x5c\x009\x14\xce\xc2\xce\x8c\x1a\xe3\xee\x99Uh*\ +Z\x84\xb5\xcb\x0f<\xd4\xabL>\xb9\x87\x9as|\xa8\ +:\xab\xe8\x88\xf0?\x94\x1dt_I\x8a_\x13\xf1\xde\ +H\x5c\xa6s\xc9\xc4\xeb\x84\xa44Wl\x84\x1b\x86\xac\ +\xaeL0U7T\x8a\x1d\x83R\xc9\xa6\x82\xe8Ob\ +?\xf0\x99\xb3\xf2\xadV\xc3\xe9\x90\x80\xcd\xfd\xe0\xfe\xd5\ +7\xb4\xff\xc9\xfd\x13j\xc9\xd0\xad\x0e\xea'y8\xd5\ +\x81\x14\xcdM\x93\xa0\x22V\x18(*(\xe9Y(\x86\ +\xa4\xa7\xccU}\xd8\xa3\xfa\xe9Hf\xaf&\xaa5\x0b\ +\xbeb$F\xc3\xd0\xf7\xae\xbeI\x81\xd4\x8c\xfc\xadY\ +\xbc\xef\x07\xbe\xd8\xae\xfd7QQ\x98\x0f\xbc\xc2\xafq\ +* f\xd4w\x9d\xf6~\x0ci\xbc\xbe`\xd6\x8d3\ +\xdc5\xb3\x9fA\x9e X\x8c=\x93\x0b\xc7\xbeX+\ +\x1e\x1dXa\xad\xba\xde\xf6\x8dt8\xb3\xa1\x1b\xccR\ +\x90n\x85^EE\x5cC\xa4\x99\xc8%\x03\xaa\x91\x0d\ +2&\x1e\x1c\xd2\xc6Z\xb7\xa7\x04\xc3D\xab!\xe3m\ +\x94\xee\x87;{\x18\xf5M\x13S[n\xb2=\x0f\xf5\ +=\xed-\x9d\x04\xc2\xb4\x0c\x05V%\xda>\xf0*\x14\ +\xa1\xbdz\xd9\xd2\x18\xcc\xc2?\x00t\xee/\xde\xb1\xdd\ +\xde\xa5^\xbf\xe7z\xda\x5c\xf7\xeaHH\xe1\xf0'\xdf\ +\xb8\x05^Y,t\xcbzy\x9cW7\xa3\xd4\x85q\ +\x8d\x94\x91~\xb3\x12\x13\x1ey\xac~\xf3\xa8\xba\xae~\ +\x93A)U\x1e\xe2\xcb\xe6l\xe9w\x9c\xde\x94V/\ +pzu{\x17V\xefn\xcf\x8b\xa53|\xda\xbb\xdd\ +AQ\xcf\xba\xbdO\xc7o\xfc\x09-^3\x98n\x05\ +\x8b\xe9\xfb\xd1\x1b\xd96\xeex1jE\x9d\x8dV\xb0\ +GG\xc3\xd1\xe09\xee\x8c\xb4\x9eX\xccf\xba,l\ +Ye9\xba`\xc5\x9f\xb6\xb5\x13\xb1.O\xb2&\xc2\ +R\xe7\x89\x1f\x1an\xc7\xad\xbd\x22\xc7@\xd0\x8b\xd8#\ +\xe9(\xa6\x9f{NKZ\xd13\xf5vg\x14:\xe2\ +)5\x0d\xe2\xd9~\xd0\x1ax\xaa\x86V%\xb5\xee\xb8\ +\x15\x199\xc4+\xb6=\x87\xe6F\xff\x82Z2\xbd\x8b\ +[\xbaQK\xcd\x8f\xcc\xfa\x9aX\xc7\xf2\xf0\xee~\xbf\ +\x16Q97\xaf\xd4j\x1fN\xb7F\x12\xac\xed\x0b\x93\ +\xf6\x0e\x86\xf6\xeb\xd7\xa7s\x07C\x18\xe5\x1d\xdfq\x8e\ +\xb6\x1c~\x5c\xaa\xe0\xda\xc0P\xdf5*O\xfb\x14\x19\ +Hv\x9c\xe5g2\x1f.;\xce\x01\xe7/\xdb\xe2E\ +\xb2\x9e\xbe\x1f\xcd\x83\xd3\x12R\xfdfIZ\xbd\xc8d\ +\x99\xf2\xbbz\xab\xebW\x03\xf3D\x92\x7fPdP\xb3\ +\xe7>\xd6M\x84e\x8f+\x9f\x06\xee>Y\xc3]\xb2\ +\xd6[&\xe9\x9dI\x8a\xa2\x8f\xd2Y!\x9b\xa6c\x5c\ +?\x0c\xcc\x9c\xe5\xbeN\x12\xca\xc1\x0f-\xc2CV\xa0\ +A\xa5\xe9\xabN\x13\xeek\xda\xee\xbd\x91[\xe2^E\ +\xae\x84S\xe4\x9a\x88\x9cC\xe0t\xf4\xdaD\xb2\x94/\ +\xa3o6\xe8D\x90\x08m\xf1\xa4\x8dWE\xf4\xde\xa7\ +3-2T\xfa\xf6w\xa3\xb3\xca^\xb6\xf5V_\xbc\ +zX\xb5,\xe0\xaa\xb2n;@\x1a^\x1c\xa0w\xe6\ +\x90\xfd\x81p\xfe\x9cR\xc5\xf8Q\x88\xaa\x18\xbf\xfb\xe8\ +\xc9\xaf\x13\x12=\xe5\xee\x8a\xc4\xb9\x1e\xbd\xd7\xb3\xa4\xce\ +\xac\xdfR\xe0\x8c\xd4\x8b\xf3\xb7\x94\x16\xda\xfa\x99\xa2\xca\ +\xcf\x14\x99\xb1gI\xdbC>\xff-\xe5\x17{\xfek\ +l\xd9P\xbb\xaa\xec;\x22\xbb\xa1R\x7f\x17\xd9\xad\xb1\ +\xea\xc5-\xb5\xb3\xf5}\xd6\x17\xed\xb6H=\xe9\x8b\xd6\ +\xb6\xce\xd1z!\x8c\x9a.&v\xba\xbb\xd4\x86=\x5c\ +\x89\x06u\xe9X\xd3\xd9\x8e\x87\xd4Q\x7f)\x8a\xf7\xd2\ +\xa5\xbe\xd4\xae\xcb\xcf\x85\x8f\xfauf\xfdg\x01So\ ++\xd8\x17\xcd\x86\xba\xeb:\xde\xb7\xc5w*\xa7\x1ed\ +\xee\x05\x95\xfbJC\xd5\x83\xeb~W\xe1\xec\xcd(\xab\ +\xd7\xfa\xc3\xd5\x1e\x0a\xab\xc9\xe6\xa8\xdd\x90\xaa\x86CN\ +\x93\x85\xd5\xec\x9bE!-\x9d\x0a\x02#\x0e\x86\xc5t\ +\xb7z\xa8\xf7\xb6^\x84zJ2\xd6\x8db\x86w\xa5\ +%zD\xb9\xff\xd1\xb9=\x22\x92'\x83C\xcb\x8b#\ +\xfd\xc6\x92\xa9\xdf\xd1\xef3\xfb\xd4\xef\xe8\xf7\x99}\xea\ +w\xf4\xfb|T\xff\x86\x8e\x98\xd1\x7fC\xc7\x18\xd4\x1f\ +\xe8\xf8pT\xaf\xfa\x9f\x9f\xec\x8fz\xd5\xff\xfcd\x7f\ +\xd4\x1f\xd5\xe3zT?o\xec\xbd\xe6\x9f\xd4O\x06\xea\ +U\xff\xa4^\xe9\xe9_\x81S}\xc2\xf3\x97E@\xfd\ +h`_\xccB\xf5k\x1b\xfb\xb5\xf8\xff\xf6\xb8aU\ +\xbfO\xd3Gh\xd5\xef\xd3\xf4\x11V\xf5\x13\xaew^\ +\xef\xde\xe9}2zj;=}KA\xfd;\xfc\xd4\ +?hC\xfc\xfe\xcf\x15?\xe2\x02+\x91\x02\xf5?\x14\ +w\x9a~\x02@\x1a\x15\x00\x00\x01\x84iCCPI\ +CC profile\x00\x00x\x9c}\x91\ +=H\xc3@\x1c\xc5_S\xa5\x22\x95\x0e\xed \xc5!\ +`u\xb2 *\xe2\xa8U(B\x85P+\xb4\xea`\ +r\xe9\x174iHR\x5c\x1c\x05\xd7\x82\x83\x1f\x8bU\ +\x07\x17g]\x1d\x5c\x05A\xf0\x03\xc4\xd1\xc9I\xd1E\ +J\xfc_Rh\x11\xeb\xc1q?\xde\xdd{\xdc\xbd\x03\ +\x84F\x85iV\xcf8\xa0\xe9\xb6\x99N&\xc4ln\ +U\x0c\xbcB@\x18!D1,3\xcb\x98\x93\xa4\x14\ +\xba\x8e\xaf{\xf8\xf8z\x17\xe7Y\xdd\xcf\xfd9\x06\xd4\ +\xbc\xc5\x00\x9fH<\xcb\x0c\xd3&\xde \x9e\xde\xb4\x0d\ +\xce\xfb\xc4\x11V\x92U\xe2s\xe21\x93.H\xfc\xc8\ +u\xc5\xe37\xceE\x97\x05\x9e\x1913\xe9y\xe2\x08\ +\xb1X\xec`\xa5\x83Y\xc9\xd4\x88\xa7\x88c\xaa\xa6S\ +\xbe\x90\xf5X\xe5\xbc\xc5Y\xab\xd4X\xeb\x9e\xfc\x85\xc1\ +\xbc\xbe\xb2\xccu\x9aCHb\x11K\x90 BA\x0d\ +eT`#N\xabN\x8a\x854\xed'\xba\xf8\xa3\xae\ +_\x22\x97B\xae2\x189\x16P\x85\x06\xd9\xf5\x83\xff\ +\xc1\xefn\xad\xc2\xe4\x84\x97\x14L\x00\xbd/\x8e\xf31\ +\x02\x04v\x81f\xddq\xbe\x8f\x1d\xa7y\x02\xf8\x9f\x81\ ++\xbd\xed\xaf6\x80\x99O\xd2\xebm-v\x04\x84\xb6\ +\x81\x8b\xeb\xb6\xa6\xec\x01\x97;\xc0\xe0\x93!\x9b\xb2+\ +\xf9i\x0a\x85\x02\xf0~F\xdf\x94\x03\xc2\xb7@\xff\x9a\ +\xd7[k\x1f\xa7\x0f@\x86\xbaJ\xdd\x00\x07\x87\xc0h\ +\x91\xb2\xd7\xbb\xbc\xbb\xaf\xb3\xb7\x7f\xcf\xb4\xfa\xfb\x01a\ +|r\xa0\xf1\xb8;\x89\x00\x00\x0d\x1aiTXtX\ +ML:com.adobe.xmp\ +\x00\x00\x00\x00\x00\x0a\x0a \ +\x0a \ +\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a\ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \ +\x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a\ + \ + \ + \ + \ + \ + \ + \x0a \ + \ + \ + \ + \ + \ + \x0a \ + \ + \x0a\xc7\xdc8;\x00\x00\x00\ +\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09pHYs\x00\x00\x0e,\x00\x00\x0e,\x01\ +\xf9\x9b\xee\x10\x00\x00\x00\x07tIME\x07\xe6\x02\x13\ +\x0f\x1b \xad\xa1UA\x00\x00\x03\xf5IDATx\ +\xda\xdd\x9a;\x88\x14K\x14\x86\xbf.d\x17\xc7P\xf0\ +\x8a\x82#-\xe2+\x11\xc46pW\x05\x11\xf6\xd1h\ + \x86\x06\x82\x0f\xb8\xd7\xc0PYCEPSM4\ +T\x03Q\x03i_\x88\xe0\xbab\xd0>P\x90+r\ +\xaf}\xd9H\xb8\x91\x06\xdb\xa3\x22j0\xbd\xb0\xb6\xf3\ +\xa8\xae\xae:\xd3\xe3\x09g\x0fU\xfb?\xea\xd49S\ +\xe3\xd1\x83H\xc2`\x03p\x12\xd8\x01|\x01n\x01\xc7\ +\xfc(\xfeG\xfa\x7f\xf1z\x00~[\x06\xb8\x96\xfb\xd3\ +\x0c0\xeaG\xf1\xd4oK@\x06\xfe60\xbfMJ\ +\x0a\x8cH\x92\xa0z\xa0\xfc\xfc\x0ei5\xe0n\x12\x06\ +\xc3\xbf\x95\x034\x94\xef\x99\x13TE\x94\xef\x99\x13\xbc\ +\x8a)/\xee\x04\xd7\x0eXPr\x0f\xe7N\xf0\x04\x8e\ +\xc08p\x1d\x18,\xb1\x8c3'Xw@\xb2s\xd3\ +O\xa4\xfaQ|\x0b\xd8\x0d|\xae\xa2\x13\x94\xf53\xff\ +\xed\xfb\xdfI\x18\xd4\xfb\x85\x04e\x15|\xb3\xda\xaf\x06\ +&\xfb\x85\x04\xcf\x22\xf8|\xb5\x9f\x06\xb6\xfaQ<]\ +\xe5\x9a\xa0,*\x9f\xbf\xea\xea\xfd\xe0\x04\xcf\x81\xf2\xf9\ +h\xe7\x84\xf5\x99\x00_\x81e\xc0\x11`\xbb\xb4\x13<\ +\x0b\xca\xd74\xd2[\x92\xd0b\xcd?\x81s\x92$x\ +\x0e\x957%\xe1*\xb0G\x8a\x04e\xf1\xccw\x8b:\ +\xb0W#\xef\xb4dMP\x86\xca\xd7\x0cO\xce\x93n\ +\x09~\x14?\x93,\x8cJ@\xf9\xb9\xf1\xcdq\xe7]\ +\x98\x04%\xa4\xfcll\xd6\xd8\xab\x0e|\x97\x22A\x09\ +)?\x1b\x87\x930\xa8u9\x02\xd3\xc0A)'(\ +!\xe5gc1pC\x83\x84\x8b\xc0\x01\x09'x\x96\ +\xee\xf9\xa2\xf1\x06\x08\xfd(N\xba\x08\xb0\x1f\xb8Pr\ +\xaf\x8eW\xa4\x12R>\x1fk\x80%\xb9=\x8f\xb7h\ +\x9b\x9d;A9>\xf3E\xfb\x84\xc96$8\xab\x09\ +JX\xf92$8q\x82\xaa\x80\xf2EH\xd8\x97u\ +\x8a\x87\x80\xb3\xc0\x7feI\xf0J\xf4\xf6ec\xd8\x8f\ +\xe2\xc7s\x04\xb8\x00\xec7\x98\x1d&\x80\x13\xa6\x85Q\ +e\x0f\x95UP^\xcb\x09-\xae\xcc\x93\xc0)\x03'\ +\xdcI\xc2`\xa5\xa2\xf9J[\xa3\x9aQ\x07\xaei\xe4\ +\x9d\x00>\x16\x5c{\x01pJ\xd1|\xa2\xaer\xbc\xd5\ +\x18\xa0R\xe0\x91\xc1\xda\xe3\x8a\xe6\xfb|\x95cF3\ +\xef\xbd\xc1\xda\x03*;\xffU\x8e\xa5\x9ayk\x0d\xd6\ +\xbe\xaf\x80\xa3\x05X\xeeE\xecH\xc2\xe0\x8f.7\xc1\ +j`\xc8\xe0&\x98P~\x14\xff\x0b\x8cf\x1fT1\ +\x06\x80\xcbI\x18\x0c\xb4\x01_3\x98\x17\x1a\xc0\xb8\x1f\ +\xc5\xcfUVD\xa6\x80\x91\x0a\x93\xb0\x1dx\x90\x84\xc1\ +\xba\x1c\xf8\x8dY\xf1\x1b*\xa8\xfc\x98\x1f\xc5\x0f\x01\xe6\ +\xcd\xa9\xa4SI\x18\x8c\x00w+z-\x0e\x01\xaf\x93\ +0x\x07|\x00\x16\x02\xcb\x0d\x95\x7f\xd8r\x16\xe8\x03\ +'\x00\xac\x006\x18\x80\xffI\xf9\xb6\xd3`\x0fIp\ +\xf9T\xff\x8b\xf2\x1d\xbf\x0f\xe8\x13'\x94R\xbe#\x01\ +\x02$\x9c\x01^\xe6>\xbbn\xd0\xce\x1a+\xafm\xbb\ +lt\xb4Y\x18\xff\xf2\xa3\xf8|\x9b\xbdV\x01/,\ +\xed\x95v\x03\xdf\xd1\x01\x8e\x9c0\xd5\x0e|\xb6\xd7[\ +`BBym\x02,\x93pI#\xe7\x8a\xcb3o\ +D\x80E\x12\x9ek\xec\xf3\xbf\x84\xf2\x85\x09\xb0DB\ +]\xa3\xe6\x0cJ(oD\x80\x05\x12F5r\xc6$\ +\x94/\xdd|\x18\xde\x0e\x9f\x81M~\x14\xbf\xea0\xd8\ +<-8\xda\xa6\xa6\xe0\x8d\x1cP\xd2\x09\x83\xc0\xcd$\ +\x0c\x86Z\x80_\x94\x11\xbaVByk\xedg\x89>\ +\xe1\x1e0\x99\x0d6\xc3\xc0\xae\x82k\xa4e\xc1[\xeb\ +\xbf\x1d4K:\xca\x8f\x95\x05_\xea\x08\xf4pvH\ +m\x81\xb7>\x81\x098\xa1a\x13\xbc5\x07\x089!\ +\xb5\x0d\xde\xd9\x0c\xee\xc0\x09\x0d\x17\xe0\xad;\xc0\x91\x13\ +RW\xe0]\x7f\x0bc\xc3\x09\x0d\x97\xe0\x9d9\xa0\x85\ +\x13f\xaa\xa6\xbc\x88\x03rN\xb8C\xf3A\xb2\x12\xca\ +\x8b8 \xe7\x84QM'\xa4R\xe0\xc5\x1cP\xc0\x09\ +\x0dI\xf0b\x0e\xd0tB*\x0d^\x9c\x809$\xac\ +\xa7\xf9\xc3\x87O4\x7f?|\x0f\xd8\x22\x0d\x1e\xe0\x07\ +J%\x1a\x9cp\x816\xff\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x06\xb1\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x12\x05\xbbrH\x12\x00\x00\x04\xaeID\ +ATh\xde\xed\x99klTE\x14\xc7\x7f\xe7\xee\xdd\ +m\xbb[\xc2\xa3E\xfb\x8e\x84\xda\x16-\x10\xad`0\ +\xa2-~\x82\x0a1\x98`Tb4Jb\x821\x86\ +\x88\xf8\x22\xd6\xa8\x18\xa4\xe5\xa1P$\xa2\xf1\x035\xb1\ +5Q\xa3\xa21h\xa5\x88\x18l\x82\xb6!\xb4P\x03\ +\xd5Z\xe8\x8bWi!\xed\xee=~\x01\x13\xba\xd0\x9d\ +\xbb}mb\xff\xdf\xee\xdc\xb93\xff\xff\x9c3g\xce\ +\x99\x0b\xe3\x18\xc7\xff\x1b2,\xa3TVz\xb2\x9b\xf3\ +\xe6Z\xaaE\x08\x05 y@*\x90x\xb9\xc7\x05\x84\ +VT\x1b\xc1\xaau,\xa7\xba\xa9{\xd6AJ\xc4\x19\ +S\x01\xd3\xcb\xea3=\x8e\xae\x04\x96\x03\xe9.?o\ +A\xd8\xe5\x84t[\xd3\x9a\xd9-\xa3* \xa7\xb46\ +Y\xd4\xf7\xa6\xc2\x13\x80o\x88\x8b\xd8\xa7\xc8\x87\x9e~\ +{m\xc3\xcb3\xbaF\x5c\xc0\xcd\x1b\xea\x1e\x11x\x0f\ +\x982\xcc\xee\xdc\x85\xca\xca\xa3/\xcc\xfctD\x04\x14\ +\xec\xa8\xf5v\x9f\xf7m\x03V\x8c\xe4\xa6Td{z\ +O\xe7\xb3?\x95\x14\x05\x87M@ZI\xad?1\xe0\ +\xfb\x0cX8:\xa1E\xbf\xee\xb5z\x96\xb5\xac\xba\xeb\ +b\xa4\xae\x96\xc9\xca'\x06|U\xa3F\x1e@\xe5~\ +\x7f(\xb1\xaa\xb0\xa4\xda\x1e\xb2\x80\xcbn\xb3h\x0cB\ +|qk y\xcb\x90\x5c\xe8\xf2\x86\xadp;\xb3%\ +P\xf3\xf4\x8c\xff\x9e\x1d\x85{\xde?\x12e\x98\x94\x87\ +\x1aW\xcf\xactm\x81\xbcuG\x92\x04\xd9\xc2\x18C\ +\xd1\xf2\x9c\xd2\xdad\xd7\x02\x1c\xbb\x7f\x1dhr\x0cd\ +\x0bI\xa8\xef5W\x02\xb2\xd7\xff\x91\x81\xf0x\x0c\xa5\ +<+r6\xfe\x9en,\xc0\xb2\xe4\x99a8a\x87\ +\x13q\x84d\xa5\x99\x80\x12\xb5\x80Gc0\xef|\x8c\ +\xcaJOD\x01\xd9\x81\xfa;\x81\x8c\x18\xcc\x9c\xd3s\ +\x8e\xe7\x14D\x14`\xa9\x16\xc5n\xf2o-\x88\xecB\ +\x22w\xc4*\x7f\x15\x0a\x0c\x04\x90\x13\xb3\x06Pr#\ +\x0bPRc\xd7\x85$\xd5$\x8c&\xc6n\x05\xac\x13\ +\x06\xb6\xd8\xd7H\x8e\x82jp\x06L\x9b\x12\xc7\x9a{\ +SI\x9f\xe8\xa5\xfa\xcfn\xb6\x1eh\xa3/\xa8fA\ +\xdd\xb6X5?\x85\xfb\xa6O\xa0\xe5|?oW\xb7\ +\xd2\xd8q\xc9\xe4\xd3\xfe\x88\x16P\xb4\xc3d\xa4W\x8a\ +\xd2\xc8OI`r\x82\xcd\xd2\xfc\xc9\xac_\x98I\xbc\ +7brK\xbc\xd7\xe2\x9dE\x19\x14\xe7M$\xdek\ +\x91\x9d\x14\xc7\xab\x0b\xd2L\x13\xa3v\x03\x17\x92v\xa3\ +\xa0<\xc9{\xd5\xf3\x9c\x8c\x00\x1b\x16e\x92`__\ +D\xc0kQV\x9cIAz\xe0\xaa\xf6\xe4\x80m\xb8\ +\x07\xe80\xb0\x00\xcd&c}\xd7x>\xac\xed\xb64\ +?\x9b\x16g\x11\xf0\x85\x1d\x98L\xf0y\xd8\xb48\x8b\ +\xd9\xa9\xfe\xb0w\xbb\x1b\xcf\x99n\x82f\x83($5\ +&#m\xfd\xa5\x8d=M\xe1\x13\xe7\xa7$\xb0yq\ +\xd6\x80\xe0\x01\x9b\x97dq\xcb\x8d\x09a\xfd\xbf?v\ +\x8e\xf2\x03\xed\x86\x16\xd0\xbd\x11\x05\xd8\xe2T\x9b\x8c\x15\ +r\x947\xf6\x9c\xe4\x9b\x86p\x11\xb9S\xe3\xc3\xaa\xa6\ +\x81mW\xc8\xbf\xf5\xc3IB\x8e\xd9\xe6\xd7\x90U\x1d\ +\xb9\x22S\x95\xdc\xd2\xfa\x13\x0aY\xa6\xb7\x02\xcf\xcdO\ +\xe1\xc1\xfc\xc9\xae\x02\xe2\x17\x87\xcf\xb2q\xdfI\x0c\xb9\ +\x03\xda|\xf4\xf9Y\xd3\x10\xd1H\xa9\x84\xaa\xb2\xdd\xbc\ +b\x82\xcd\xfbNQYw\xda\x98\xfc\xe7\x87\xcfPV\ +\xe3\x86<(l\x1bH\xfe\xba\xf5@\x5c\x88\x1d@\x8f\ +\x1b\x11\xef\xeeo\xe3\xe3\xda\xce\x88}+\x0euQV\ +s\x0a\x17\xdc\x11\xe8\xf5y\xec\x0f\x8d\x0b\x9a\xfa\x97f\ +\x9d\x01v\xb8='w\xfe\xd6\xc1\xf6_\xdb\x07%?\ +\xd8\xfbA\x96\xa8\xfc\xf0\xaa[O\xbb\xaa\x89/\xf4\xf4\ +\xad\x05\x8e\xbb\x9d\xaa\xe2P\x17\xe5\xd7 \xb9\xf3`G\ +T\xe4\x05\xfe\xb2\xfd\xf6\xebQ]\xab\xe4\x94\xd6-D\ +\xd9\x1d\xd5\xa5\xce\x8c\x89<5g*\xaa\xf0\xc1\xc1N\ +\xbem<\x1bU\xf6\xe3\xa0K\x9aV\xcf\xfe**\x01\ +\x00'N\xf7}\xe2\xf7\xc9\xc3c\x91\xba\xf5\xf69\x15\ +7M\x89[\x1e\xf5\xc5\x16\xc0q\xd5\xf8@Op?\ +p\xfb(\xf3\xaf\x0b\x06\xecyi\x22\xbd\x83^\xa2E\ +\xcc:E.y,\xfb\x01D\x9aF\x91\xfc1\x8fe\ +\x17G\x22o$\x00 \xc9/\x7f[\xe2)\x04\x1aF\ +\x81\xfc\x11\x11\xbb0\xc9/F\x7fm,\xd3Q\x93\xfd\ +\xf2\x8f\x5c\xb4\xe7\x0a\xbak\xe4*.\xaa\xec>{\xde\ +\xd4\x80\xb4\xba\x88R\xee\xd1\xd6\x1d\x5c*\xa2\xeb \xbc\ +F\x8d\x12\x0d\x8e\xc8\x8b)\x01\xfb\xcb(\xc2l\x94\xc5\ +\x9d\xaa\xdd\xd9\x13Z\xe6\xa0O\x0a\x14\xba\xb1\xe6\x95\x08\ +)\xf0#\xc8G\xc9\x01O\x95\x88\x04\xa33\xda0\xa0\ +\xfd\x82\xa6\x88\x86\x0a\xd5\xe2nQ\xcdUd:\xe8$\ +\xe0J\x0d\xdb\x0dr\x16\xb4\x09\x91F\x1c~F<{\ +oH\x94S\x8cc\x1c\xe3\x18\x12\xfe\x05\xea\xd9w\xd7\ +\xf4b\xf1\xca\x00\x00\x00\x00IEND\xaeB`\x82\ +\ +\x00\x00\x07:\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x85iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +S\xa5R\xaa\x0eVP\x11\xc9P\x9d,\x88\x8a8j\ +\x15\x8aP!\xd4\x0a\xad:\x98\x5c\xfa!4iHR\ +\x5c\x1c\x05\xd7\x82\x83\x1f\x8bU\x07\x17g]\x1d\x5c\x05\ +A\xf0\x03\xc4\xcd\xcdI\xd1EJ\xfc_Zh\x11\xe3\ +\xc1q?\xde\xdd{\xdc\xbd\x03\x84j\x91iV\xdb\x18\ +\xa0\xe9\xb6\x99\x8c\xc7\xc4tfE\x0c\xbc\x22\x88!t\ +\xa1\x17\xfd2\xb3\x8cYIJ\xc0s|\xdd\xc3\xc7\xd7\ +\xbb(\xcf\xf2>\xf7\xe7\xe8T\xb3\x16\x03|\x22\xf1\x0c\ +3L\x9bx\x9dxj\xd368\xef\x13\x87YAV\ +\x89\xcf\x89GM\xba \xf1#\xd7\x95:\xbfq\xce\xbb\ +,\xf0\xcc\xb0\x99J\xce\x11\x87\x89\xc5|\x0b+-\xcc\ +\x0a\xa6FN\x1f\ +\x80\x14u\x95\xb8\x01\x0e\x0e\x81\x91\xf7w\ +\xce=\xbf3\x89\x10\xed\xcc\xda\x89\xc6.\xa5c\xa7\x0c\ +\xb9\x12\xc4\x11\xa66j\xca\x82B\xeb\xaawW\x8b\xfe\ +=1\xa1.\xe8\x94\xdb\xdfR`E8\x83\x07\x90\xf4\ +\x86\xbc\xda=\xeb>\x8a8\x80$I\xb9D\xa8Iz\ +C\xde\xb9\xc25\x1fF\x14\x00\xb8\x93\x086\xcd\xc8\xf8\ +\xd5\xff}\xf0BQ$\x01\x22\xde\xb4\xc6\xc4\xe5\xa2\x10\ +\xa2\x02@$B\xd4\x00\x88B\x88*\x00\x11\x08Q\x07\ +0\xd4\x08Q\x090\x94\x08Q\x0b0T\x08Q\x0d\xe0\ +G\xd8\x95Wt\xdb\x02\x00h\xe3F\x0d\x1a\xe1\x96\x00\ +\xb8\x19\x84[\x06`\xb0\x08\xc3\x16@\xe9\xee\x0a\x0b\xc2\ +\xb0\x05\xf04\xd5\x84%\x13\x86-@G\xddi:\x1b\ +\xab\x85g\x82v\xd8\x0ehE\xa6\xa3\xe6\x14\x1d5\xa7\ +\x00\xb0\xbb}4\xb7\xfb\x06\xfa\x94\xe5\xc0\x8a[b\x12\ +4\x8d\xd4`1j\x86~\xe2\x8cH4R\x0c\xa3s\ +\xd6c\x9e\xb5\x0c\x14h9R\xcc\xc5\x92w@QB\ +\x22\x00\x83\xc9\x84\x08\x03H1\x8c\x9e\xbf\x01\xd3\xe3K\ +\x90b4\xb8j\xff\x22~\xd2l\xff\xe9\x94\xf9\x1b0\ +dda\xb0>\x80\x22\xfb\xb0\xff\xb6\x9f\x8b?\xec\xb8\ +&\xc8P#\x84\x05\xc04\xed\x19Rr\xd6\xfb\x8f{\ +\x07\x7f\xad\xbe\x94\x9c\xf5t]n\xc4~\xfcs\xe1\x99\ + |\x0e\x885\xa5\x91\xf8\xe0\xdc>\xfd\xbe\x0e\x07\xae\ +\xfa\x0a\x5c\xf5\x15\xf8:\x1c}\xce'N\x9eK\xaci\ +\x8c\xf09AX\x06HZ\x1d\xd6\x95;\xfb\x04\x7f\xa5\ +\xf2\x08M\xa5\x05\xb4\x9f+\x07E\xf6\x0f\x11\xe3\xf8\x87\ +I\x99\xb7\x8e\xb8\xfb\xa6\xf7d\xc4\xc4YL\xdc\xf6+\ +\x8eS\xa5\xd4\x16m@\xe9\xf6\x0a\xc9\x04a\x00\xe6\xc7\ +\x96\x04\x07\xaf(\x5c\xf8\xfa\x0dl\x87\xf70\xea\xd1\x85\ +\xdc\xb3`##S\xefEA\xa1\xf3B\x15\xf6\x13_\ +\xf0o\xc1r\x92\x9eXE\xea\xd3\xaf\xf5\xca\x84y\x98\ +\xaaN\xd0rt\x9f\x90\xe1 \x0c \xd6\x92\x1et\xdc\ +T\xf6\x11\xcd\xbf\xece\xdc\x8b\x85$d\xce\x09:g\ +\x9c0\x15\xe3\x84\xa9$N\xce\xa1f\xf7Zt\xf1\x16\ +\x92\xb2\xf3\xfc\xe7\xf5W=k(\x11\x84\xcd\x01\xce\xb3\ +\xc7\xfd?{\xdbl\x5c:\xb8\x83\xd4\xa76\xf7\x09\xbe\ +wK\xc8\xca\xe6\xae\x85\xafr\xf1\xe0\xdbx\xaf4\x07\ +\x9eUu\x5c\xd8:A\x08\x80.1\x85\xb4\xc5\xf9\xfe\ +cGy\x09\x92N\x8fy\xfa\xd2\x90\xf7Zf,C\ +\xd2\xe8p\x94\x97\xfa\xfb\xc6<\x9b\x8f.!Y\x08\x82\ +\x10\x80\xa49+\x895\xa5\xf9\x8f\xdd\x8dU\x182\xb2\ +\x90\xb4\xba~M\x9e\x06k\x16\x9d\x8dg\x03C\xc0\x9c\ +\x8ee\xce\x0a!+F!\x001#\x8c\xc1\x1d\xb2\x0f\ +I\xd3\xff\xe9F\xd2\xe8P|\xddA}\x9a\x11\xfd\xff\ +\xdf\xec@\x10\x84\x00\xd8\x8f\xedG\xf6z\x02o0i\ +,\xee\x86\xca\xc0g/D\x11\xe4n8\x83>y\x5c\ +\xc0\xcf\xeb\xc1~\xec\xc0\x80k\x07\xf3\x1d\x9a\xc8\x00\xb8\ +\xea*\xa8\xfb\xe4\x95\xa0OY\xb7\xb3\x85\xd6\xf2\x92\x90\ +\xf7\xb6\xfey\x90n\xa7\x9d\xc4\xc9\xf3\xfc}uE/\ +\xe3\xaa\xaf\x18\xf8\xa7\xd8\x10!\x00\x00Czf\xaf\x0c\ +\xb0b\x9e\xb1\x94\x86\xfd[q\x9f\xff\xfb\xba\xf7\xb8\xcf\ +W\xd2p\xe0u\xcc3\x97\xa1\xb7d\x04\x9e\x95\x91)\ +l\xa5*\x0c@\xf6\xba\x83\x8eS\x17m\xc58~\x0a\ +\xd5\xdbs\xb9t\xa8 \xe83\xe7m\xb3q\xa9\xb4\x80\ +\xea\xed\xb9\x18\xef~$h!\x04 w\xb9\xc5\xd5i\ +\xa1.(_cU\x06\xb5\xc2\x8a73a\xd3W\xe8\ +\xcd\xe9A\xe3\xbb\xf9\xc8>\x9a\x0e\xbd\x87\xd7\xd9\x82.\ +\xce\xdc\x03\xe0lA\x17o!\xf9\xc9\x97\xb0\xcc\x5c\x0a\ +R\xe0\xbdx\x9a\xeb\xa8\xde\xbe\x88n\xa7}P\x01>\ +\xb4\xabV\x8a\x08\x00@\x8c\xde@Bf6I\xd9\xcf\ +\x07\x0d\x09E\xf6\xe1n8\x83\xa7\xe9\x5c\xcf\x10I\x1e\ +\x87!}RP\xe0\xae\xfa\x0ale\x85\xb4U\x1cF\ +\xf6\xb8\x06\xfd\x86C\x01\x08-\x87e\x8f\x8b\xd6\x93\xdf\ +\xa1O\x1e\x1b\x04 \xc5hz\xea\xff\x8c\xac\xeb\xde\xdb\ +v\xba\x8c\xd6\x93\xdf\x0b/\xd5\xc3\xb2%f++\xa4\ +\xbd\xfa\xf7~_\xdf^}\x02\xdb\xe1\xdda\xd9\xab\x09\ +\xcb\x86\x88\xecq\xf1\xcf\x8e%\xe8\x93\xac\xdc\x9f\xff\xf3\ +\x0d\xaf\xad\xcc\x9f\x8d\xc7V\x1b\xb6\xdd\xb9\xb0n\x8a\xf6\ +'\xb0p\x06\x1fv\x80\xe1\xd8T\x00\x15@\x05P\x01\ +\x22\xd6\x1c\xe5%8\xfaQ!F\xfd:\xe0Z\xed\xf2\ +\x1f\xdfP_\xbc\x09\x80\xb4N'\xa6i\x8bo\x9f\x0c\ +h9\xfa)u{7\xa2\xc8>\x14\xd9G\xfdg[\ +\xb0\xfd\xf4\xf1\xed\x91\x01M?\xbeO\xe3\xb7o^\xb5\ +\x0b\xa4p\xe1\xcbm(\xde\xce\xb0\x03\x08\xad\x06\x87C\ +\x0bU\x0d\xaa_\x01\x15@\x05P\x01T\x00\x15@\x05\ +P\x01T\x00\x15\xe0\x06\x85[\x14\xc7g\xbfi\x00\x09\ +\x8a\xa35zI\x09\xfd\xb7\x87\xac\x06\x8dZ\xedf\xa7\ +\xcf\xabE\x91\x9e\x03\x12\xa2$\xf66P\x8a\x8d:\xdd\ +\x96P\x17\xfe\x0f\x0d\xb5\xdang\xa4\x7fV\x00\x00\x00\ +\x00IEND\xaeB`\x82\ +\x00\x00\x04\xc7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +[\xa5EZ\x1d\xec \xe2\x90\xa1v\xb2 *\xe2\xa8\ +U(B\x85P+\xb4\xea`r\xe9\x174iHR\ +\x5c\x1c\x05\xd7\x82\x83\x1f\x8bU\x07\x17g]\x1d\x5c\x05\ +A\xf0\x03\xc4\xc9\xd1I\xd1EJ\xfc_Rh\x11\xe3\ +\xc1q?\xde\xdd{\xdc\xbd\x03\xfc\xcd*S\xcd\x9eq\ +@\xd5,#\x93J\x0a\xb9\xfc\xaa\x10|E\x18!D\ +\xd0\x8f\xb8\xc4L}N\x14\xd3\xf0\x1c_\xf7\xf0\xf1\xf5\ +.\xc1\xb3\xbc\xcf\xfd9\x22J\xc1d\x80O \x9ee\ +\xbaa\x11o\x10OoZ:\xe7}\xe2(+K\x0a\ +\xf19\xf1\x98A\x17$~\xe4\xba\xec\xf2\x1b\xe7\x92\xc3\ +~\x9e\x195\xb2\x99y\xe2(\xb1P\xeab\xb9\x8bY\ +\xd9P\x89\xa7\x88c\x8a\xaaQ\xbe?\xe7\xb2\xc2y\x8b\ +\xb3Z\xad\xb3\xf6=\xf9\x0b\xc3\x05me\x99\xeb4G\ +\x90\xc2\x22\x96 B\x80\x8c:*\xa8\xc2B\x82V\x8d\ +\x14\x13\x19\xdaOz\xf8\x87\x1d\xbfH.\x99\x5c\x150\ +r,\xa0\x06\x15\x92\xe3\x07\xff\x83\xdf\xdd\x9a\xc5\xc9\x09\ +7)\x9c\x04z_l\xfbc\x14\x08\xee\x02\xad\x86m\ +\x7f\x1f\xdbv\xeb\x04\x08<\x03WZ\xc7_k\x023\ +\x9f\xa47:Z\xec\x08\x18\xd8\x06.\xae;\x9a\xbc\x07\ +\x5c\xee\x00CO\xbadH\x8e\x14\xa0\xe9/\x16\x81\xf7\ +3\xfa\xa6<0x\x0b\xf4\xad\xb9\xbd\xb5\xf7q\xfa\x00\ +d\xa9\xab\xf4\x0dpp\x08\xc4K\x94\xbd\xee\xf1\xeeP\ +wo\xff\x9ei\xf7\xf7\x03>\x80r\x92\xa5!\xda\x9a\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x0c\x08\x0d\x10\x1f\x8eW\xba-\x00\x00\x02\xc4ID\ +ATh\xde\xed\x98\xcfO\x13Q\x10\xc7\xbf\xb3]\x88\ +\xd2H\x94.p\xea\xc1\x1f\xf1\x07p0%z\x17\xef\ +z\xb0m 1\x16\xe5\x06\xf1\xe2Eh\xd3X\x0d\x14\ +\x08\x91\x18o\x5c\xd4T#\xa4\xa0\x84\xf8\x07\x10M\x88\ +^\xad!j\x14b<\x11\xdb\x05\xb5\x11L\xdb}\xe3\ +\xc1\x8a\x16\xba\xb5\x94\x14\x96\xf0\xbe\xa7}ov\xdf\xce\ +gg\xf7\xcd\xcc\x02RRRR\xdb)*\xe6\xa4D\ +x\x9c\xff\x1ck~\xcf\xbak\xe2\xfd\x13m\x04\xbe\x01\ +\xc6!\x00s\xcc\xb8Y\x1b\xf0\x8cmt\x9dR\xa4l\ +v\x81D\xdf\xf8Ub~\x0c\xc61\x00\x15\x00\x8e\x13\ +a4\xd17\xd1\xb5\x15\x11\xd8\x14\x80\x1ezT\x0d\xc2\ +@\xfe\xd8\xf2`|pj\x9f\xa5\x01\xa0\xeem\x00P\ +eb\xb5+\xe9L\xa3\xa5\x01\x04\x1bK\x85\xec\x06\xb3\ +ni\x80\xda\xa0\xf7=\x80\xe7\xf9\xad<]\x17t\x7f\ +\xb0\xf6+\x04\xc0F\x99v\x06b9\xae\x83_+\x0a\ +\xda-\xff\x11\x03\xc0\x81\x9e\xb6OZ\x8aO\xfd;\xa7\ +\xa5p\xba\xa6\xdb\xfbyG\x00\x00\x00\x85\xbc\xa9Bc\ +\xcb\x03l\xa7$\x80\x04\xd8\xed\x00\xaa\x95\x9cY\x0aM\ +\xee\x17\x95\xe9+\xcct\x98@\x1f\xc9&\xee\xd5t{\ +\xbf\xed\x88\x08,\xf6=m2*\x8d\x18\x83n\x83\xd0\ +\xc9\xc4\xc3B(o\xf4\x81\x89F\xcb\x03031\x19\ +\x0f\x01v\xae\xb18Y\x88\x083\x93\xa5\x01\x96\xc2\x93\ +\x8d\x0c\x9c4I\x93\xae\xc5\xc1'\x0d\x96\x06\x10$\xec\ +\x05#\x941\xb7o\x19\x00\x8f\x8cT\xe4\x8cC\xd3\xab\ +\x1b\xc8\xca\x1e\x11\x03\xb0h\xd67%3?b\xdb\x0a\ +\xa0\xf7\x8e:u\xbd\xe6e\xce\x5ce\xe2\x95\xde;\xea\ +\x04\x00\xe75\xef\x0a3\xba\x00\x88u\xc1a\xea<\x18\ +\xba\xfc\xb3d\x80x8z\xae\xd0\xb8\xa8\xa7\xaf\xa8\x0f\ +\x004\xaf\x99nfE\xbd\xbf\xda[\x04Q\ +\xd0\xf0\xc2P\xc4^\x5c\xaaW\x1c\x05\x1b\x22\xc3\xa6\x95\ +\xa5\x94P\xd3UM\x00\xaaM\xcc\xd5Y\xfb\xff\x95J\ +\xcd\x02X6\xb1.\x8b\x0au\xb6\x5c\xb5P\xc1\x14\xce\ +\x86\xf8Z\xcc\x0d\x1c\xa1\x8b\xdf\x09\x08\x98\xec\xf1=\xb5\ +\xd7\xcf'\xcb\x02\xa0\xf9\xdd\xef\x18<\x93\xff\x15\xe2\x99\ +lC_\x94\x1c~\xcf\x1d0|\x04\xcc\xff\xfe\x8e0\ +\x0f\xf0%\xcd\xef\xbe[\xd6bN\x18\xc2gS\xd4g\ + >\xf1\xd7{z+\x84\xe1\xdb\xe8\x8d\xb4\x80'\x02\ + \xb2\xa5\xe5t}\xb0u.\x99N\xba\xc0\xf01\xe8\ +\x16\x18\xbed:\xe9\xaa\x0f\xb6\xce\xed\x98r:\x9bD\ +\x22\xb0\xa8dG&\x01$\x80\x04\x90\x92\x92\x92\xda\xcd\ +\xfa\x05$\xe3\xfd\xacQFD\xb5\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00\x078\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x13/y\xd2\xb0\x85\x00\x00\x055ID\ +ATh\xde\xed\x99mlSU\x18\xc7\x7f\xe7\xb6]\ +\xb7u\x9d\xb8\xf1\xb6\x17\x9c\xb2\xd1mY\xd8\x08\x1d\x98\ +\x10b\xe4%\x1a!1j\xe2 `\x88F\x13L\x06\ +\x1f 2\x0c\x86\xa4&\x84 \x09\x11\xe6\xd0\x84\xf8\ +aF\x10?h4\x1a\x02\x19\xc4D\x04\xec\x08l\x82\ +[\x99\xe2\xd8\x1b\x1b\xdbdk\xbb\x97v\xbd\xc7\x0f\x0e\ +B\xd3m\xbd\xb7\xb7\x1b&\xec\xff\xf1\x9e{\xce\xf3\x7f\ +\xee\xf3v\x9e\xe7\xc24\xa6\xf1xC\xc4\xe5\x94\xaf\xbf\ +6\xe55\x17,U\xa4\x5c\x81\xc0\x09\xa2\x00\xc8\x00R\ +F\xdf\xf0!hG\xcaF$\xb5\xaa\x89\x9a&o\xf1\ +e\x5cB}\xa4\x0a\xe4~\x5c?\xcf\xa4\xcar\xe0\x0d\ + K\xe7\xf6V\x04\xd5jH\x1em\xdaY\xd2:\xa5\ +\x0a\xe4\xed\xbd2K1\x9b\xf7 x\x13H0\xf8\x11\ +\x03R\xca\xe3B\x09\xee\xf6\xbcW\xda=\xe9\x0a,8\ +P\xb7A\xc0'@Z\x9c\xdd\xb9\x07\xe4\x16\xcf\x8e\x92\ +\x13\x93\xa2\x80\xf3\x98\xdb\xe2\xed\xb3V\x22\xe4;\x93\x1c\ +\x94\xc7RR\x03[k7\x97\x06\xe3\xa6@\xa6\xcb\x9d\ +\x9cbK\xf8\x06xi\x8a\x92\xcb\x8f>\x7f\xe0\xf5v\ +W\xe9\x80a\x05\x9c\xc7\xdc\x16o\x7f\xc2wSH\xfe\ +>\xceZ\xfc\xa6\xb5\xd7]E\x81\x89^R\xa2\x9d\xe2\ +\xed\xb3V>\x02\xf2\x00\xab\x03\xc9#\x87\x0dY \xff\ +`\xddF)\xa9\xd6\x22-5Qa\xf9\xd3vJ2\ +l\xccOO`\x8e\xcdL\x92Y\xc1l\x16\x0c\x06%\ +\x1d\xfdAnt\x0e\xf0\x93\xa7\x9f\x1b\x9d\x83\xda\xd5\x90\ +b\xbd\xa7b\xe1I\xdd\x0a\x14\xec\xfd#]\xb5\x8c4\ +\x80\x9c9\xd1\xf9\x8b3m\x94\x95<\xc9\xb3\xf3l\x98\ +\x14m9\xe1\xe7[^\xf6\x9d\xeb\xc0\x17\xd0T\xc7z\ +\x11\x81\xfc\xf1R\xec\xb8.\xa4\x9a\x83{\xa3\x91\x07\xd8\ +\xe4LcYN\x8af\xf2\x00\xcf=c\xe7\xf0\xcb9\ +$h\xdb\x93\x86\xb4~\xa8+\x06\xf2>\xba\x96=Z\ +\xa4\xa2\xa2\xea\xd2]T9\xf6\x9a?\xa022\xce\xe2\ +\x82\x99V68\xd3\xb5\xfa\xd1\xdb\x8eCW\xc7\xac\xf4\ +\xe61\xb5R\xc4\x16\xad\x15\xb6\xa1k\x88\xf3\x7f\xf5\xb3\ +27\x95No\x903M}\xfc\xd2\xec\xc7\xd35H\ +p\xd4C\x0af'\xb2m\xf9\x5c\x0ag'\x86\xed]\ +\x95k\xe7\x8b\xdf4\x15_+!Q\x0e\xec\x8a\x1e\x03\ +.\xa98l\xf5\x7f\x03\xf3\xb4\xba\xc4\x1c\xbb\x99\xecT\ ++W\xda\xfc\x8cc\x0c\x9e\x9a\x91@\xf5\xfa\xf9\xe1w\ +\x88\x90\xca\xea\xcf=Z\xc5\xb4yr\x1ar(+\x0b\ +M\xe8By\xf6\xba\xa5z\xc8\x03tzG\xa8\x9d\x80\ +<\xc0@ \x14\xf9,(\xf5\x88\xc9r\xdcr8\xa3\ +\xc6\x80PY5\x19I}]q\xe4\xd5\xa9\xa9{X\ +\xdf5CQVD\x8d\x01\x81p\xc6\xbb\xe1xk\xc9\ +,\xca\x16\x85\x07\xac\x04N\x5c\xeb\xd1u\x96\x0a\xa5\xd1\ +\x83X\xe0@\xc6\x87|z\xb2\x99\xdd\xab2X\x9ce\ +\x8bX;\xee\xee\xe6r\x8b_\xdf\xc7\x90\xe4GW@\ +\x92\x11\x0f\xf2\x8b2\x92q\xbd\x90IZR\xb8\x88`\ +HRu\xe9.\xa7\xeazc0\xa7\xc8\xd0\x92FS\ +\x8c\x92/\x9c\x9d\xc4\xfe5\xd9$Z\xc2C\xac\xbd?\ +\x88\xebl\x1b\x0d]C1\x9e,\xed\x9a\xea\x80QT\ +#\x07\xceO\xb7\x92\x9bf\x0d{v\ +\xb1\xc5\x87\xebL{\x1c\xc8\x0bot\x05\x04\x1dFD\ +d\xda#\x0b\xf8\xd9\x9b\xfd\xf1\xc9\x0bRvh\x09b\ +\x0fP\x14\xab\x0cUJ:\xbd\xe1\xdd\xe0?\x03\xa1\xb8\ +\xb8\x8b\x144jP@\xba\x11\xe2\xd5X\x85\x5ch\xf6\ +q\xa1\xd97\x19\xa1\x85\x02\xee\xa8.\xa4\x9a\xa8\xf9\xbf\ +N\xe1\xa4Pj\xa2*\xd0\xe4-\xbe\x0c\xb4\x18-`\ ++sSY[8\x83\x053\x93\xe2U\xd1o{|\ +E\xb5\xd1]\xc8%T\x0e\xd6}\x89\xe4\xfdX\x04-\ +\xc9\xb6\xb1\xe7\xc5,\x92F\xd3\xa8\x04\xbe\xba\xdaK\xd5\ +\xc5.\x83\xf1+\xaa\xc7\x1aE\x8e\xd9\xd0\xa8!y\x14\ +\x08\xc4\x22h\x933\xfd\x01\xf9\xfbw\xa1\xf5%i\xa4\ +&*F\xf8\x0fc\x0eUj\xee\xc8\x9av\x96\xb4J\ +)\x8f\xc7\x22\xe9\x89\xc4H\xa3*\x02\xd2\x92-F\xfc\ +\xe73\xcf\xf6Em\xbaz\xe2\x04\xb3\xf9\x03\x10\xbag\ +\x95\xf5w\x22gQ\xdd\xfe\x11Z\xee\x05b\xa5\xdf\xa3\ +\x04,\xfazb\x80\xeb\xdb\x8bzA\xdd\xaaW\xda\xa7\ +\xbfvq\xfaf\x1f\xf7\x06G\x18\x0a\xaa\xfc~g\x88\ +]\xa7[\x09\xa9\xb1\x952!\xe4\xbb\x0d\xbb\x0a{b\ +\x9e\xcc\xe5\x1f\xa8\xab\x92\xb0\xf9\x11e\xce#\x9e\x1d\xc5\ +[\x0dM\xe6\x1as\x1a\xca\x91|;\xe5\xd4\x85\xfc!\ +\xd3\xdf\xb3\xcd\xd0d\xee\xc1\xfd\xe6\xbf\xe1\xee)`\xcd\ +\x94pG|\xef7y\xd7\xb5n_\x16u\x84\xa7)\ +\xb7\xb5\xbbJ\x07\xec\xa9\x81W\xa4\x94US\xe16\x19\ +\xfe\xee\xd7\xb4\x90\xd7l\x81\x87\xe1\xd8_\xbf\x0e\xc1\x11\ +-S;\x9d\xb8+$\xe5\x8d\x15\xc5\xa7\x8c\xf6\x03\x13\ +\xc2S\xb1\xf0\xa4\x124\x17\x80\xa8\x04\x86\xe3@|\x18\ +8b1\x99\x0a\xf4\x92\x8f\xc9\x02a\xd68t5\x0b\ +U\xd9\x82d\xa3\xdeY\x92\x80\xdbR\x8aj!\x83G\ +\x1bw.n72\xf50\x0e\x97T\x1cI\xd7J\x11\ +\xcaJ)p\x0aI>\x82,\x1e\xfe\xcd\x0a\xad\x12<\ +\x0a\xb8\xa5Pj<\xbe\xa2\xdax\xfcf\x9d\xc64\x1e\ +w\xfc\x0b\xf3u\xcanr\x81\xc8\xbb\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x06\xbe\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x01\x13.I\xbc\xd1\x00\x00\x04\xbbID\ +ATh\xde\xed\x99iL\x5cU\x14\xc7\xff\xf7\xbe\x99\ +\x81a\xa9Bih\x0bM\x85\xd2\xb2L\x0b(\x04b\ +\x85\xb8$*M5%i@\x13-\x8b\xb5\xac\x0dR\ +M\x8cF\xd3`\xe3\x07?\x98\xb4EI\x9d\xc6\x9av\ +\xaa\x1f\x8ab\x9b`\x80\xa0\xa6\x16\x91Hk7G\x86\ +\xb5\xd4\xc4JG(R\x87eX\xe6\xbd\xe3\x97\xb6\xb1\ +\x09\xbc\xf7\x98\xf7\x060\xe1\xff\xf9\x9c{\xcfo\xcer\ +\xdf\xbd\x03,kY\xcb\xfa_\x8b\xe9\xb1\x88\xa5\xb6\xd6\ +\x84\xc9\x914\x89(\x91\x01Q`X\x01\x00 \xb8\x88\ +X?\xe7\xb0\xfb\xbb\xd1~\xb1\xb8xfI\x01\xc4\xd9\ +\x8e>\xce!\xed\x01!\x1b@\xa0\x82\xf9\x18\x803\xe0\ +\xd2Q\xc7\xae\xb2\x1f\x17\x15 \xe1\xc4\x91\x87\x01V\x0d\ + \xc3\xcb}[\x18GE\xc7\xae\x92\xab\x0b\x0bPU\ +\xc5-\xd1\xab\xdf\x05a?\x01\x82\xc6\xbd=\x8c\xe8\xcd\ +\x8e\x82\xd2\x83\x0b\x02\x10S]\xedgz\xc0t\x12@\ +\x8e\xceE\xfc\xc5\x84\xe8\xf7\xea\xef\x85\x85\x93\xde\xb8\x1b\ +\xd4\x18\xa5X\xad\xc6I3\xd5\x11a\xbb\xeec\x84\xf0\ +R\x800\xed\x0f\xa2\x1c0F\xf3u\xe7j\x8c&\xfd\ +\xe9\x90O\x82\xbf\x07A;\x13NX\xab|RB\xf1\ +'\xad\xd9L\xa2\xd3\x0b0\xd2\x09\xe0\xdb\x1d\xf9E\x8d\ +\xba\x01$\xdal\x81\x1e\x9a\xe8\x04\xb0N\xcdb\xc9a\ +\xe1\xdd\xcfEm\x1c\x5c\x13\x14\xc4\x89\xc0\x06\xc6]b\ +\xc3\xf5\xbeUWn\x0d\xc6\xa9Dp8\x02B\x13\x91\ +\x9b+\xea\xd2\x03\xa24^\x04\xc6\x14\x83\x7flm\xa4\ +\xfd\x9d\xf4\x0c\x93Y0\xc4\x02\x88\xbdw\xc0\x85\x85\xe1\ +\xe9\xf5\xd1pKb\xd7\x81\xb6\x16\xcf\xcf\xce?7+\ +\xfc\x9c\x09\xf1\xee\x91\xc2N\xe0S\xed=@\xc4\x88\xb1\ +\x0a\xa5\x05\xf6&\xa6\xfc\xf4\xfe\xd6'\xe2\xef\x04?\xab\ +\xcc\x5c\x88\xfb \xf3\xa9\xd8\xb2\xe4\xd4V\xc5\x92`\xf4\ +6\x88TO\xc79gyBLx&\x88\xed\x93s\ +\xde\x19\x13w\xa1\xc0\x92\x94\x06ug\x82`\x09\x0d\x8b\ +\xbc=5u\xb1{dx\xad\x8c]H\xb8\xfdr\xf3\ +\xe0\xe9\xfa?\xb4e@\x14\x9e\x95s\x0c0\x18\xc7\xcb\ +\x92R\xa2\xd5N\xb2\xbb\xfbU$\xa7F\x07\x9b\x8cc\ +rF\x92$>\xa3\xbd\x84\x98\x94.[:I\xa9\x97\ +8c+\xe7=\xb7\x19\x0b-\xdd\x92zE\xbe\x97\xd9\ +\xa3:\x9c\x03l\x93\x9ccFDd\x88\xb7\xf323\ +b\xdd\x83\x0a\xa3q\x93\x1e\x07Y\x98\x9cc\xa0\xd1\x14\ +\xe1-@\x80\xd1\xb8F\xc1$L3\x00\x03\xfcd\x1d\ +9\x0f\xf4\x16\x80s\x1e\xac`\xe2\xa7\x19\x80\x80\x09\xc8\ +w\xda\xdf^\x1f\xb9\x924\xac`2\xacG\x06\x06\xe4\ +\x1c\x07'\xdd7\xbc\x05\x18t+\xfa\xde\xd2\x9e\x01B\ +\xa7\x9c\xe3\x99\xden\x8f\xb7\x00u=\x9d\xa4\xf0Qd\ +\xd7\x9e\x01\x06\xd9k\xdf\xa9^G\xda\xb4(\xf6\xcd7\ +\xf8)Q\xec\xa9\xbb\xd6\x95*\x7f\x1a\xa3E3\x80\x08\ +\xfe\x8dl\x0b\x10\xf1\xbdg\x9b\x04\x06\xb8\xe6\x11\xbf\xab\ +\xfc\xfb\x06?\x89Hn\xfaI\x82Gj\xd6\x0c\xd0\x95\ +_\xd4C\xa069\xe7\xde\xdb#Q\xaf\x9dm\x1e \ +\xa2\x9b\xca\x9f\xfc\xf4\xd7\x1b\xe7\xbes^s\xfd\xb3^\ +\xc1\xf4[\xfb+e\xfdz]h>TZ\xe0\xea\xf0\ +`\xdc\x8e\xfa/\x03\xce;\x07Z%\xa2\x91Y25\ +r\xde9\xd0\x9a]\xff\x95\xf9\xd2\x90S\xc5\x01\xc5\x0f\ +\xebw\xa1!b\x096k\x8b\xda\xd7\x07\x03c\xe2\x96\ +U\xab{\xa3\x82W\x8c\x02\xc0\xf5QW\xb0}\xc8\xb9\ +\xd1C$\xa8\x8c\xa6\xc9\x91W\xb2M\xd7\x1b\xd9f[\ +M\xbcDB;\x80`\xf8\x5c\xf4\x88#\xbf\xf4\xb2\xae\ +w\xe2\xdf\xf2\xca;\x01\xfe\x02\x03D\x9f\x87\x0f|\x1c\ +{\xecX\xb0\xae\x00\x00\xe0\xc8/j$\xc2[\xbe\x06\ +``[\x05\xc3L\x83\xa5\xb6&\xc8'\x0f[\xf1\xb6\ +#/rb\x9f\x11`\xf6m&\xa8M\xf2\x98\xb2\xba\ +w\xef\x1e\xd5\x15\x00\x00\x12l\xd6t\x10>\x07(\xc6\ +\xc7\x09iefq[Gn\xf9\x98\xe6\x12\xba\xaf\x9c\ +\xf2\x8a\xdb\x999\xc4\x02\xa0\x82\x81\x86\xbc\x08lJ\xa5\ +]\x06\xb9\x85F\xa5r\xd2\xf4:m\xa9\xad\x09\xa2\x09\ +!\x07\x1c\xb9 db\xee\x17\xea\x09\x80\xce\x11\xf8\xd7\ +\x92\xc7p\xca \xcc\x1c \x86J\x95\xdb\xb4\xb8\xcc\x13\ +Y7r_w\xeb\x0e\xf0_\xa5X\xad\xc6i\x136\ +x\x186\x80Kw&\x09s\x19D\xd6\xbf\xf2\xa1\x9b\ +}?F8\xa4r`\ +\x9ati\xe2E\x82hqK\xa6\x8f\x96$\x80\x12\x04\ +\x01\xbfL\x0b\xd3\xcf\xcf\xf5\xff\xc1\x92\x00\xb8\x0b\x01\xd0\ +{\xf7W\x0d] x\xb2\xfa^\xaep\xf9d\x8c\xfa\ +B\xf16k%#\xdaO@\x93\x91\x05\xec\xf95/\ +o\x1c\xcbZ\xd6\xb2\xe6\xd4\xbfb\xc7\xbf\xc0\x04rw\ +\xba\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x08\xcb\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3P\x14\x85O\ +[\xa5*-\x0ev\x10q\xc8P\x9d,\x88\x15u\xd4\ +*\x14\xa1B\xa8\x15Zu0y\xe9\x1f4iHR\ +\x5c\x1c\x05\xd7\x82\x83?\x8bU\x07\x17g]\x1d\x5c\x05\ +A\xf0\x07\xc4\xc9\xd1I\xd1EJ\xbc/)\xb4\x88\xf1\ +\xc1\xe5}\x9c\xf7\xce\xe1\xbe\xfb\x00\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +\xd54\xe2\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb5i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x12G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xf8\x84\ +\x9b\x14J\x00\xdd/\xb6\xfd1\x02\x04w\x81f\xdd\xb6\ +\xbf\x8fm\xbby\x02\x04\x9e\x81+\xad\xed\xaf6\x80\x99\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc0,r\xc6\x84\x9b!\xbb\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x098%\xed1\x1a\xab\x00\x00\x06\xc8ID\ +ATh\xde\xed\x99kP\x94\xe7\x15\xc7\x7f\xcf^\xb8\ +\xac\x0b\xae\x82\xdc\x09\x10\x15\xbc\xa4\x19\x15\xd4*\xa8\x15\ +5\xc516$i\xd7^\x9c6\xd3X/E\xdb\x19\ +\xa7\xad\xad\x12g\xdb\xa2\x9d|\xe8L'\x16\x09V\xfb\ +!\xb1\xe3\x94\x98:\x91`\xcc\x0d\x11\xe3%\x8a\x95^\ +L\x10I,\xb7\xdd\x00\x82\x82\x84\xdb.\xfb\xf4\x83\xc6\ +\xb8\xd9\x97\xf7\xdd\x17\x90|\x88\xe7\xdb\xfb\x5c\xff\xe79\ +\xe7\xfc\x9fs\x9e\x17\x1e\xc8\x03\xf9j\x8b\x18\x8dEJ\ +J0\xd6u0\x0f\xc1R\x09\xe9\xc04 \x16\xb0\xde\ +\x19\xd2-\xc0)\xe1\x0a\x82*)8\xe1i\xe6\xbc\xc3\ +\x81\xf7KU\xa0\xa0\x90Da&\x0f\xc9Z ^\xe7\ +\xf4&\x09\x07\xcd\x06\x0a\xb7\xfd\x84\xa61U`\xf7_\ +\x99$\xdd\x14\x00\xcf\x00A#<\xc4\x01\xe0\x80p\xf3\ +\xdc\xf6\xcd\xb4\xdfw\x05v\x15\xf3}`\x0f0q\x94\ +\xdd\xb9]J\xf2\xf27\xf2\xf7\xfb\xa2@q1\xe6\xeb\ +\xb0\x17Xw\x9f\xa3\xf2E\xb7\x93-\x0e\x07\x9eQS\ +\xc0Q\x8c\xc5\x0c\x87\x81\x95cD.en\xb0;6\ +\xd0\xa35\xd0\x18\xc8\xc9\xf7\xc3\x911\x04\x0f\x90j\x84\ +Y\x8b3(\xa9\xa8Pg*\x83\xd6Jw\xdcf,\ +\xc1\x7f&\xab\xcc\xb1\xbc0\x22\x17*\xd8\xc7\x0f\x84\xe4\ +`\xa0;\x8e\xb7&\x91\x9a\xfc\x04\xb1Q\xf3\x88\xb4M\ +'$\xc8\x86\x10\x06\xfa\x06n\xd2\xd1Y\x8b\xb3\xf5\x02\ +u\x0d\xa5\xb4\xdf\xbc\xa2'&\xd6\xecXO\x89n\x05\ +v\xff\x99\x08i\xa6\x06\x88\xd4\xda#\xc2\x96F\xe6\xec\ +|\x92\xe3\xb3\x03\x0a\xab\xe6\x96\xb3\x9c\xbe\xb4\x9bO\xae\ +_\x0c\x88\x9d\xdc0\xcd\xb1\x81\xeb\xbab \xfb\x09\xfe\ +\x04,\xd2:\x9e\xb9\x8f\xfc\x9c\x9c\xac\x22&\x8c\x9f\x12\ +0\xa9\x85[\x13\x999\xe5{\x98L\x16\x9a[\xce\x22\ +\xa5\xaa\x9b[\x8c0\xae\xfcu\x8e\x05l\x81\xe7\xffB\ +\x82\xc7\xcbGj\x97\x94\x10Fr\xb2\x0a\x99\x9a\xf4\xad\ +\x119\xfa\xb5\xa6\xb7)\xab\x5c\x87\xd7\xebV\x1b\xd6/\ +\xbdL\xce\xdfD\xf3\x17;LJ\xa3=\x92\xcdZ7\ +l\xf6\xfc\xe7\x15\xc1\xb7\xb4Ws\xb9\xee\x10\xcd-g\ +\xb9\xd5\xd3\x0cRb\xb5\xc4\x12\x175\x9f\x19\x93\xd7\x10\ +\x175\xdfg|J\xc2\x0a\x1e[\xf8\x02\xc7\xdf\xdb\xa4\ +\xb6]\xb0\x10\xe4\x01\xdb5-\xe0p`0\xc7R\x0f\ +$\x0c\xc9q\xc9\xb9\xe4d\xed\xf5=\xa2\x81.N\x9c\ +\xdfF\xed\xff^S=\xf1\x94\x84\x15,\xfb\xfa\x1f\xb1\ +\x84\xf8\x86V\xf9\xb9_\xf2\xdf\xba\xbf\xa9\x86\xce\xd4\x09\ +$\xd9\xed\x0c\xaa\xd2hP\x0c\xf3\xd5\xc0\x9bL\xa1,\ +\xce\xf8\x9dO[O_\x1b%\xc7\x1f\xd7\x04\xff\x99\xcb\ +\xbcr|5\xdd=N\x9f\xf6\x05\xb3\x7fCpP8\ +1\x91\xe9,\x98\xf5k\xa5\xa9\xf1\xb5\xed\xa4k\xdf\x03\ +\x82\xa5j\x00\x12c\xb2\x08\x09\x1a\x7f\xf7[\xcaA\x8e\ +U\xae\xe7FW]\xc0~\xdf\xd9]O\xd9\xc9ux\ +\xbd\x9fg\x0b\xa1\xc1\x13\xf9Q\xee9\xec9\xa5\x84\x8d\ +SNl\x0d\x06\xb25\x15\x90\x92\x0c\xad\x13<\xf0\x8f\ +9TV\xed\xa4\xed\xc6ej\xae\xbd\x8a\xb3\xf5}\xdd\ +\xc1\xdb\xda\xf1\x1f\x1a?9\xe5\xd3\x16\x12d\x03\xa0\xc1\ +uRq\x8e\x14\xfe\x160\xf9\xb3\x0b\xa9Rc\xf3\xde\ +\xbev\xaak\xf6S]\xb3\x1f\x83\xc1\xac\x0b\xb8\xc9\x14\ +J\xc6\xcc-\xcc\x98\xbc\x06\xab%V\x09&\x8d\xaeJ\ +e\xe6\x93\xa4i[\xe0v%5\xa4\xa4\xcf\xf8)A\ +\xe6\xb0\xbb\xdf\x1a\xf4\xe7\xcfp\x9e^\xae5\xbfMW\ +w\xa3b\x7f\xdb\x8d\x0f\xf8\xb4\xb7U\xd9\x02\x0a\xd8\x94\ +r!\xebP\x9bG\xda\xa6\x939'\x9fgr\xcf\x91\ +>3O\xf7\xe9\xdf\xa5\xda\xeb\x978\xfc\xd6\x93\xbcq\ +j\x03\x9d\xdd\xf5>}\x0d\xce\x0a\xb5\xa9a\xba\x93\xb9\ +{%9a\xf9m_\x0d\x9e@\xe6\xec\x1d\xac}\xfc\ +\x04S\x93V\x0f\xf3\x0a\x93\x5c\xad/\xe5\xe5\xa3\x8b\xa9\ +\xac\xdaI\xff@\x97\xaa\xff\xeb\xc9F\xbb\x87\xe4\xf0\xf8\ +\xe5>\xdf\xb6\xf0\x87Y\xb9\xa8\x18{N)\xb1\x93\xe6\ +\x0eK\x0d\xaf\xd7Mu\xcd~^:\x9aIu\xcd~\ +\x9c\xad\xe7\xd5\x86\xdf\xd2T@\x80KifH\x90\x8d\ +\x98\xc89\x8a\xabZ-q$\xc7gc2\x85\x0e;\ +\xa5\xe8\xedk\xa7\xb2j'\x83\xde\x01\xb5\xd4\xd9\xa5\xc9\ +B\x12\xae\x003\xbf\xd8\x9e\x14\xb7\x14!\xfcs\xbf\xa6\ +\x963\x1cy\xc7\xae\x95\x90)\xca\x92\x8c\xdf3a\xfc\ +\x14.\xd7\x1d\xe2\xe3\xc6\xe3\xaa\xe0\xefHM \x16P\ +\xccq\x93\xe3\x97\x01\xd0\xd5\xdd\xe0\xd3\x9e\x10\xbd\x80\x84\ +\xe8\x85\xba\xc1GM|\x94\xaf\xa5\xfe\x90\x87b\x97\xb0\ +r\xd1\x8b<\xfb\xf4%\x12c\xd4\x93_)\xfd\xb1\xf9\ +)\xe05P\xae|\xf1\xfc\x9b\x97^\xcb\xe4`\xe97\ +\xe8\xeeq\xf9\xa8\x9c\x93UD\xa4mz\xc0\xe0\xc3\xad\ +\x89\xacZr\xc0\x87\xc5\x840\xd0\xda\xf1/\xf5\x80U\ +\xc0\xe6\xa7\x80\xa7\x99\xf3\x80\x1fI_\xfap\x1f7o\ +]\xc33\xd8\xc7\xa9\x8b\xbf\xf5\xe9\x0b\x0d\x89\xe0\xe9\xc7\ +\x8e\x90\x96\xfc\xa4fM\x90\x12\xbf\x1c{N\x99_\xba\ +p\xfa\x9f\x05w\x99h\x08i\xe8w\xfa[\xc0\xcf\xa9\ ++*\x90\xd9\xab\x89\x12\x905\xd4J\x1d\x9dW\x08\x0d\ +\x89 :b\xd6\xe7\xc1d\x0cf\xcaC\xabHIX\ +\x81\x10F\xdc\xeeO\xf1xz\x10\x06#\xe1\xd6D&\ +'~\x93%s\x0b\xc8xd\x0bf\x93\xc5g\xbd\xab\ +\xf5G9S\xfd\x07\x0d\xd2\xa5p\xe7/x7\xa0z\ +\xc0l\xa0\xd0\xe3e\xabZMp\xf2\xc2s\x98M\x16\ +\xa6?l\xf7\xf3\xed\xa8y\x8f\xea*h\xde<\xbdE\ +kX?^\xf6\x06\x5cR\xbeSJ\xd7\xb2\xd5\xc4\x01\ +s\xd5\xce\xe4\xe3\xc67\xf1xzI\x88^\x88\x10\x06\ +\x9da,\xb9\xf8A\x11\xe5\xef\xff\xca'+\x1d\x82?\ +\x8b\xf27*\x17\xf6C\xd6\xc4\x8bs9k\x94\xfc\x18\ +\x18\xa7\xb6\xb6\xab\xed\x02u\x0de\x84\x8d\x8b\xc3\x16\x96\ +\x82\x10\xdauqS\xcb\x19\xdexo\x13\x1f~T\x12\ +\x08\xfd\xb6\x0b7\xdf~\xf7\x18\xbd\xba\x9fUv\xed\xe3\ +\xbbH\x0e\xe9a\x97\xd4\xe4\x5c\xe2&\xcd#\xc26\x8d\ +\xd0\xe0\x89 \x04}\xfd7\xe8\xe8\xac\xc5\xd5V\xc5\xd5\ +\xfa\xa3tt^\x0d\xfcUE\xf2\x9d\xed\x1b9<\xec\ +\xa7\xc5]\xfb(B\xb2\x91/C\x04{v\xac\xe7g\ +#z\x99\x9bjc3\x92#c\x8d]J^w;\ +\xd9:\x9cd\xceG\xecv\x06\xdd\x82\xb5@\xd9\x18\xe2\ +/\xb5\xf4`\x0f\xe4\x85: \xeapl\xa0\xc7\xed\x22\ +\x17(\x1a\x0b\xb7q\xbbxj\xebV\xe5\xa0\xd5\x1d\x03\ +\x0a1aGR\x18\xc8\x93\xa3>\xdc\xb4\x22\xc9S\x0b\ +\xd8a[\xe0^\xd9\xb1\x9e\x12\xb7\x914\xa0\x10\xe8\x1f\ +\x05\xec}\x08\xf6\x88A\xa6\xe9\x05?,\x0b\xdc+\x05\ +E\xc4\x0bA\x1e\xb7c$Q\xe7\xf4\x06\xe0e\x93\x89\ +\xbd\xdb\x9e\xc59\x02\xcb\x8d\x5c\x1c\x0e\x0c\xa6h2\x0c\ +\x06\xb2\xa5 ]H\xd2\xe4\xed\xbf\x96\xd6{\xaa\xbc&\ +\x04\xb5x\xa92\x18(\xefwrq4~\xb3>\x90\ +\x07\xf2U\x97\xff\x03\x14\xec=A~#\x17]\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00\x02o\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +[\xa5\xa2\x95\x0e\x16Qq\xc8P\x9d,\x88\x8a8j\ +\x15\x8aP!\xd4\x0a\xad:\x98\x5c\xfa\x05M\x1a\x92\x14\ +\x17G\xc1\xb5\xe0\xe0\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10\xfc\x00qrtRt\x91\x12\xff\x97\x14Z\xc4x\ +p\xdc\x8fw\xf7\x1ew\xef\x00\x7f\xbd\xccT\xb3c\x1c\ +P5\xcbH%\xe2B&\xbb*\x04_\x11B?z\ +\x10\xc6\xa0\xc4L}N\x14\x93\xf0\x1c_\xf7\xf0\xf1\xf5\ +.\xc6\xb3\xbc\xcf\xfd9z\x95\x9c\xc9\x00\x9f@<\xcb\ +t\xc3\x22\xde \x9e\xde\xb4t\xce\xfb\xc4\x11V\x94\x14\ +\xe2s\xe21\x83.H\xfc\xc8u\xd9\xe57\xce\x05\x87\ +\xfd<3b\xa4S\xf3\xc4\x11b\xa1\xd0\xc6r\x1b\xb3\ +\xa2\xa1\x12O\x11G\x15U\xa3|\x7f\xc6e\x85\xf3\x16\ +g\xb5\x5ce\xcd{\xf2\x17\x86r\xda\xca2\xd7i\x0e\ +#\x81E,A\x84\x00\x19U\x94P\x86\x85\x18\xad\x1a\ +)&R\xb4\x1f\xf7\xf0\x0f9~\x91\x5c2\xb9J`\ +\xe4X@\x05*$\xc7\x0f\xfe\x07\xbf\xbb5\xf3\x93\x13\ +nR(\x0et\xbe\xd8\xf6\xc7\x08\x10\xdc\x05\x1a5\xdb\ +\xfe>\xb6\xed\xc6\x09\x10x\x06\xae\xb4\x96\xbfR\x07f\ +>I\xaf\xb5\xb4\xe8\x11\x10\xde\x06.\xae[\x9a\xbc\x07\ +\x5c\xee\x00\x03O\xbadH\x8e\x14\xa0\xe9\xcf\xe7\x81\xf7\ +3\xfa\xa6,\xd0w\x0bt\xaf\xb9\xbd5\xf7q\xfa\x00\ +\xa4\xa9\xab\xe4\x0dpp\x08\x8c\x16({\xdd\xe3\xdd]\ +\xed\xbd\xfd{\xa6\xd9\xdf\x0f>\xcer\x92S5%=\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x0c\x16\x0b\x10\x16C\xc0^\x97\x00\x00\x00lID\ +ATh\xde\xed\xd21\x0aB1\x14D\xd1\x89\xb8\xb1\ +4\x8a.XRek\xcf^~D\xc5_\x88\xe7\xb4\ +a\x8a\xfbH\x02\x00\xf0\xbf\xda\xbb\x839\xe7HrZ\ +l\xab\xb56z\xef\xd7ooW\x8e\x1fD\x9f\x9f\x1d\ +\xa4\xaa.;m7\x1d~\xfd\x0b\x09\x10 @\x80\x00\ +\x01\x02\x04\x08\x10 @\x80\x00\x01\x02^7\x92\xd4\xe2\ +\xad\x92\xdcv\xda\x02\x00\xf0\xe0\x0e\x05<\x1a&\xea\x99\ +q\xaf\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00&{\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\ +\x00\x00\x00\x04gAMA\x00\x00\xaf\xc87\x05\x8a\xe9\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x00H\x00\x00\ +\x00H\x00F\xc9k>\x00\x00\x00\x09vpAg\x00\ +\x00\x00\x80\x00\x00\x00\x80\x000\xe11\x9a\x00\x00%&\ +IDATx\xda\xed\x9d{|SU\xba\xf7\xbfI\ +\x9a\xb4\x94\xa6\x0d\x04\x84\xc6)\xa4\x0a\x15)\x97:0\ +Hq\x80\x02\x8a\xf8*#\x8e\xca\xe0\xe8(^\xde\xb9\ +\xe8{>\x88\xce\xcc\xf1\x9d\xf7\x1d\xb1\xce\xf1\x8c03\ +\xe2e\xc6\xb9\xa8\x5c\x06\x1d\xa5\xa3\x07\x14t*\x83R\ +\xe4RP\xd1B)h\x0f\x97\x00\xa5\xe5\x16\x09I\xe9\ +%m\x92\xf3\xc7\xcaNwvn;\xb7^<\xe7\xf7\ +\xf9\xecO\x92\x9d\xec\xb5W\xf6\xf3[\xcf\xf3\xacg=\ +k-\x8d\xcf\xe7\xe3\x7f\xf0\xdf\x17\x9a\x9e\xae@\x8a\xff\ +K\xb8\x03\xc5{\x00\x9f\xec\x90>{\x15\xe7\xfe[\xa0\ +/\x12@\x12\xa6V:\xee\x86\x81W@I'hs\ +a\xaa\x0f4>\xff\x7f\xcb\x84)\xf2\xff\xe9\x86\xfd^\ +p\xfa\x0b\xf2]\x84\xda\x0ep\xd8\xc1\xf6\x22\xd8\x10D\ +\xf0\xf8_\xa5C\x22\xc8\xd7\x0e}\x81\x00\x92\xc0u\x80\ +\xae\x1c\xae\xea\x0f%\x190>\x03\xc6\xea\x85\x80S\x86\ +N8\xe0\x81\x13\xedP\xd7\x02\xfbv\xc3G\xef\x81]\ +|\x85\x87`r\xf4y\xf4V\x02H-\x5c\xf7\xafp\ +\xf9P\xb89\x03\xa6\xe9\xe1\x1a\x0d\xe4vwe:\xe1\ +d;T_\x84\x1d;\xe0\x9dJ8\x07t\xd0E\x8a\ +>k:z\x1b\x01$\xa1\x8f\xb8\x14\xfeE\x0f7i\ +\xa1@\xcd\x85\xe6\xa2\x222\x8dFr,\x16\x8c\x16\x0b\ +h4\xa0\xd1`\xbe\xf2J2\xf3\xf2\xc4g\xad\x96v\ +\x97\x0b\xfb\x17_\x04\xbew54\xd0\xdc\xd0@\xbb\xd3\ +\x89\xbd\xaeNU%;\xe0\xa0\x13*\xeaa\xc3*8\ +$N\xd1A\x97v\xe83\xe8\x0d\x04\xd0\x00\xda\x07a\ +\xd0\xe5pK?xH\x07c\xa2]`\x19?\x9e\xfc\ +\x92\x12\xcc#Gb\xb4X0\x17\x15\x81V\x9b\x92\xc3\ +\xd5\xd0\x80\xfd\xc0\x01\xec\xfb\xf7\xd3\xb4s'\xe7jk\ +q_\xb8\x10\xb1.\x1dp\xf0\x02\xfc}\x0b\xac\xd9\x0c\ +g\x007\xc1\x9a\xa1W\xa3'\x09\xa0\x01t\xbf\x84\xcb\ +\x07\xc3\x22\x03\xdc\x19I\xbd\x9b\x0b\x0b\xb1\x96\x96b\x19\ +7\x8e\xfc\x92\x12u\xc2\xf4\xb7\xf8T\x1c\xf6\xfd\xfbi\ +\xdc\xb1\x83\xa6\xed\xdbi\xdc\xb6-\x22!\x5c\xf0\x1fg\ +\xe0o\xcb`\x0b\xd0F\x1f\xd0\x0a=A\x00\x0d\xa0\xfd\ +%\x8c\x18\x02\x8f\xeb\xe1\xfb\xe1~d\xb6Z)*+\ +\xc3:y2\xc6!C\x92\x17\xa4F\x03:]J\x88\ +a{\xf7]l\x1b6`\xdb\xb8\x11\xb7\xc3\x11R\xf7\ +\x0e\xf8\xe2\x1c\xbc\xfc\x04\xacF\x10A\xd2\x0a\xbd\x8e\x08\ +\xddM\x00\xed\x830x4<\x13N\xf0\x86\xecl\xac\ +\x13&0\xf6\x86\x1b0\x17\x16\xa6\xadE\xa7\xb2\x5c\xdb\ +\xc6\x8d\xd4\xafY\x83\xed\x9dwB\xfel'4\x9e\x82\ +g\x7f\x05\xab\x80V\xa0\x9d^\xa6\x11\xba\x8b\x00Z \ +\xe3yx\xc2\x00\x0f)U\xbd\xd1l\xa6\xe8\x9ak\x18\ +;{6\x86\x9c\x9cn\x17b*\xcau\x9d8A\xfd\ +\x9a5\xd4>\xff|\x88V\xe8\x84\xc6\xe3\xf0\xe4Rx\ +\x8b`\x22\xf4\xb8\x8f\x90n\x02h\x00\xed2\xb8\xd6\x08\ +/)=zC\xbf~L\xb9\xed6\x8a\xa6LI\x8f\ +\xe0R\xa4\xf2\xe3)\xd7\xedtb\xdb\xb0\x81=O>\ +\x89\xcbf\x0bz\x18m\xf0I\x1d<\xfe\x17\xf8\xd8O\ +\x047]\x81\xa6\x1e\x81.\x8dek\x17\xc1\xe0\xbb`\ +i\x7fxN\x03yr\xc1\x97\xcc\x9a\xc5\xb5\x0b\x17r\ +Iaa\xe8\x95>\x9fx\xc0\xa9\x1e\xa7\xe8\x86ru\ +YY\x98\xc7\x8fg\xec\xa2E\x18\x0b\x0b\xb1\xef\xdd\x1b\ +\xd0\x08\x19p\xa9\x05\xee\xfa6\xe4\xb7C\xedq\xa1\x09\ +\x94a\xe9nE\xba\x08\xa0}\x1a&^\x0ao\xe9\xe1\ +F\xf9\x17\xd6\xd1\xa3\x99\xbdp!\xd61c\xd0ed\ +\xc4Wj\x1f#\x86\xb9\xa4\x84+\x16.D\x97\x95\x85\ +}\xef^\x13f\xcd\x223++\xb5\ +wL\xd7\x88f\x0a\xca\xd5eea)+c\xf4O\ +~B\xcb\xe9\xd3\xd8kj\x00\xd0@\xa6\x19n\x9c\x06\ +E\x17a\xcf\x09\xd1[\xe8\xf6\x01\xa9T\xfa\x00\x1a@\ +\xf7\x02\x09\xcf\x01.\x84\ +FH{O!\x15\x04\xd0,\x82\xc1\xa3`\xb3\x16\xc6\ +J'\x0d\x99\x99\x5c?o\x1e\xf9\xc3\x86\xa5\xae\x85\xb7\ +\xb5a\xdb\xbb\x17[M\x0d\xb6\xcf>K\xe7s\x09\xc0\ +`4b\x994\x09\xeb\xb5\xd7\x92\x7f\xf5\xd5\x18\x0b\x0a\ +\xe2'r\x04R4m\xdd\xca\xfb\xb7\xdc\x12\xd4mt\ +\xc0;\xeb\xe0\xff\xed\x82\xe3\x88\x9eB'i$A\xb2\ +\x04\x08+|\xf3\xa0A\x94\xcd\x9e\x8d9\x5c\x04/\x01\ +\xd5i\xdb\xbf\x9f\xfa\xdd\xbb\xb1\xed\xdd\x9bTe\xcd%\ +%d\x9aL\xb8l\xb6\x90.\x9aZX&M\xa2\xe8\ +\xd6[\xb1\xce\x9e\x8d!//yR_\xb8\xc0\xa6[\ +n\xa1\xb1\xaa*p\x8fv\xa8_\x0d\xdf\xdb#Hp\ +\x11\x11RNK\xf0(\x19\x02\x84\x17\xbe\xd9\xcc\xdcy\ +\xf30\xf4\xeb\x97\x94\xcaw\xbb\xdd\xd4n\xdfN\xfd'\ +\x9f\xe0\xfa\xea\xab\x98\x951Z\xad\x98KJ\xc41~\ +<\x99&\x13\xe6\x92\x12\x0c&S\xcck\xed55\xb8\ +\x1d\x0e\xce\xd5\xd4\xd0|\xec\x18\xf6\x9a\x9a \x81\x84\x83\ +!7\x17\xebu\xd71a\xd1\xa2\xf8\xb5B\x98\xff^\ +\xfd\xc8#A&\xc1\x0b\xcd;\xe1\xae5\xb0\x03h\xa6\ ++f\xd0+\x08\x10Y\xf87\xdd\x84!++\xf1\x16\ +\xd1\xdeNmu5\xb5;w\xe2nm\x8d,\x00\x93\ +\x09KY\x19\xd6\x9bo&\xbf\xac\x0c\xa3\xd5\x9a\xeag\ +\x13 B\xd3\xd6\xad\xd8\xd6\xaf\x8f\xf8;\xcb\xd5W3\ +\xe1\xe1\x87\xc9\x9f2%)\xa7\xb6~\xf5jv.^\ +\x1c0\x09^h\xde\x0ew\xbf&H\xe0B\xc4\x0dR\ +J\x82D\x09\xa0\xff#\xec\x09\x12\xfe\xc0\x81\xcc\x9d3\ +G\xb4\xfc\x04\x07^\xea\xf7\xedcOU\x15\xae0\x03\ +,\x12\xac\xf3\xe6Qt\xcf=X\xe7\xcdK\xe5sP\ +\x05\xdb\xfa\xf5\xd8\xde~\x9b\xfaU\xab\xc2~o\x99<\ +\x99\xd2\xc7\x1f\xc76\ +\xcc\x9c\x19\xe4\x1c\x1e\x86\xc7\x97\x09\x128H!\x09\xe2\ +%\x80\xeey\xf8U&\xfc_\xe9\x84\xd9db\xee\xcc\ +\x99\x1823\x13R{\xb5\x9f\x7f\xce\x9e\x1d;p\xb7\ +\xb7\x87\xdc\xcc`21e\xf9r\x8a\x16.L\xb7L\ +\x13FSU\x15{\xca\xcbC|\x06Cn.\x13\x16\ +/f\xec\xfd\xf7'f\x0a\x9dN6\xcc\x9c\x19\x08\x1c\ +\x01\xec\x87\xc5/\xc0Z\xe0\x02]\x81\xa3\xa4\x10\x0f\x01\ +\xb4\xcb\xe0\xba<\xa8\x0c\xfcI\xbd\x9e\xb9\xd3\xa6a\x1e\ +80nu\xef\xee\xe8\xa0j\xf3fl\x87\x0f\x87\xdc\ +\xa8\xb7\xb5x5\x88D\x04\xcb\xe4\xc9L\xff\xdd\xef0\ +&\xd0\x1dv;\x9dl\x985+@\x02/4o\x81\ +\xfb*\xe0#\xba\xccAR$PK\x00\xcd\x22\x18|\ +%\xd4\xcb\x07ufO\x9a\x84\xd5b\x89[\xcd\xd9\xcf\ +\x9f\xa7\xea\xc3\x0f\xb1\x9f;\x17r#KY\x19\xd3W\ +\xaeL\x8bS\xd7\x1d\xb0\xad_O\xf5\xe2\xc5A\xa6\xc1\ +\x90\x9b\xcb\x94%K(\xba\xfd\xf6\x84H\xf0\xd6\xc4\x89\ +\x81\xf2\xbc\xd0\xbc\x15\x16\xbe\x01\xdb\x10$H\xaaw\xa0\ +v, \xe3\x1exO\x0bE\xd2\x89\x09#G2z\ +\xd8\xb0\xb8oh\xb7\xdb\xd9\xf0\xce;4\xbb\x5cA\xe7\ +\x0d&\x13\x93~\xfdk\xa6\xfe\xe9Od\xf6\x91V\x1f\ +\x0e\xa6Q\xa3\xc4\x00P\xbf~4\xf9\xb5\x81\xa7\xbd\x1d\ +\xdb\xa6M\xb8N\x9c\xc02y2\xba\xcc\xcc\xae\x0bb\ +\x8c7Hc\x09\x87+*\xf0\xb4\xb5\xa1\x01\xc37`\ +Z\x03T\x9eNA\x8c@\x8d\x06\xd0>\x0b?\xeb\x07\ +OK',\x03\x06p\xd3\xb7\xbe\x15\x7f7\xe7\xc8\x11\ +\xaa\xb6o\x0f\xb9\x81\xb9\xa4\x84\xb2\x95+1\x97\x94t\ +\xa3\xa8\xd2\x0f{M\x0dU\xf7\xde\x1bd\xc7\xcd\xa3G\ +3w\xed\xda\xb8\x1dD{m-\x1b\xae\xbb.\xe0\x18\ +\xb6\xc1\xa1\x15p\xc7^8\x8c\x88\x13$\x141\x8c\xa5\ +\x014\xbf\x84\xa2\x81\xf0W\x0dd\x02\x1822\xb8a\ +\xfcx2\xf5\xfa\xae_I,\x8e2\xa4Z\x7f\xe4\x08\ +U;w\x86\x9c\xb7\xce\x9b\xc7\xf5\xeb\xd6\xf5Y\x95\x1f\ +\x0d\xd9C\x872b\xc1\x02<\xed\xed\x9c\xd9\xb5\x0b\x80\ +\xd6\xb3g9\xf0\xdak\x14L\x9bF\xf6\xe0\xc1q\x95\ +\x95=th \xf5,\x03\x06^\x06\xdf\xf8@$\xa0\ +&\x9c|\x1a\x8b\x00\x19\xdf\x83\x95:Y\x7f\x7f\x92\xd5\ +J\xc1\xc0\x81\xeaJ\xf7\x8f\xb37\x9d9\xc3\xa6m\xdb\ +B\xbe.Z\xb8\x90Y\xaf\xbf\x8e.\x9e\xe1a\x87\x03\ +\x96.\x85\xad[\xc5\xfb\xa1C!\xd5\xc3\xcb)\x84.\ ++\x8b\x829s0Z\xad4n\xdd\x8a\xa7\xad\x0dO\ +{;\x877l\x10$\x184HuY\xe6\xf1\xe3\xc5\ +\xf3\xfc\xe8#\x00\xb2a\xe4Hp\xee\x82:\xbaH\x10\ +\x97\x16\x88F\x00\xcd2\xb8.\x1b\x9e\x94NXrs\ +\x99z\xd9eq=\x00\xbb\xc3\xc1{\xdb\xb7\xe3\xf1\x06\ +\x93\xb3h\xe1B\xcaV\xae\x8c\xefi\xd6\xd4\xc0-\xb7\ +\xc0\x1bo@U\x15\xac]\x0b\x7f\xfe3\xb4\xb7CY\ +Y|eu3\xcc%%\x14\xcc\x99\xc3\xe1\xb5k\x83\ +H\x90=h\x10\xe6\xd1\xa3U\xe7\x1eX\xa6M\xc3\xbe\ +o\x1f\x8e\xfaz\x00\x06\xc0\xc4l\xf8\xfc\x004\xd1\xe5\ +\x0f\xa8&A4\x1f@\xff\x07\xd8\x92\x01\xd7H'\xe6\ +\x8e\x1aE\xbe\xc9\xa4:\xd2\xe7\xf6x\xf8\xdb\x07\x1f\xe0\ +\xee\xe8\x08*\xb8\xe8\x9e{\x98\xber%\x1aM\x1c\xbd\ +\xd0\x9a\x1a\x981C\xb4\xfap\xb0Za\xdd:\xe8\xe5\ +~\x84\xdb\xe1`\xc3\x8c\x19A~\xc1\xec?\xff\x19\xeb\ +\xf5\xd7\xab\x0e\x14\xb9].\xde*-\xc5\xe5\x0f\x9c\xb5\ +\xc1\xa1W\xe0\xce}\xc2\x1fp!\x88\xa0\x8a\x04\xdaH\ +\xe7\x97\xc3}r\xe1\x17\x0d\x1cH~\xff\xfe\xe0\xf1\x80\ +\xd7\xdb\xf5*?<\x9e\xa0c\xd3'\x9f\x84\x08\x7f\xe4\ +\xddw3m\xc5\x0a|>_\xe0\x88\x89U\xab\xe0\xaa\ +\xab\x22\x0b\x1f\xc0f\x13\xbfQ\x8c\xb1\xf76\x18L&\ +\xe6n\xd9\x12\xe4\xf0V\xfd\xecg\xd8\xf7\xef\x0fy~\ +!\xcf\xd7\x7f\x18rr\x98\xfd\xfa\xeb\x81\xeb\xb3`\xc4\ +m\xf0(\xa2\x8b\x9eEd\xb9\x86 \x92\x09\xd0\xcf\x83\ +7\x83\xfa\xfc\xc3\x87\x93\xa9S\x9fA\xb6\xe7\xf0a\xea\ +O\x9e\x0c:7t\xfat\xae}\xeb\xad\x88\xd7\x84\xd5\ +\x08\xe5\xe5\xb0x\xb1\xfa'\xfc\xfe\xfbp\xec\x18\xf4\xc0\ +X\x81Z\xe8\xb2\xb2\x18\xb1`\x01'\xde\x7f\x9f\xd6S\ +\xa7\x849\xd8\xb8\x91\x82\xa9SU\xfb\x04\xd9C\x86\x00\ +\xd0\xe4\xefU\xe5@\xb1\x19\x0e\xee\x85c\xc4\x91m\x1c\ +\x8e)\xda\xe5p\xafV\x96\xcfWd2a\xd4\xe9B\ +\x19\x1a\xe1h\xb2\xdb\xd9\xa3\x88\xf0\xe5\x0c\x1f\xce\xcc\xbf\ +\xff=\xa8\xe5\x87;\x82p\xef\xbd\xf0\xc4\x13\xf1?\xe1\ +U\xab\xa2\x9b\x8b^\x00\xa5&p;\x9dl\xfa\xf1\x8f\ +E7O\xe5s\x9e\xf0\xd8c\x98\xc7\x06\xfcs&B\ +90\x00\xe8\x0f\xa8\xca\xb8\x0dG\x00\x9d\x01~ ?\ +1a\xe0\xc0\x88\xea(\x5c\xc5\xaa\x0e\x1e\x0c)tF\ +E\x05\xfa\xdc\x5c|>\x1f^\xaf7:\x11\xce\x9f\x17\ +\x02\x8c0\xea\xa6\x0aUU}\x8e\x04\xae\x93'\xd9p\ +\xe7\x9d\xaa\x9e\xb1t\x94\xbd\xf8bWy0\xe4\xff\xc3\ +#\x88\x897\x99\xa80\x05J\x9d\xae\xf9\x15|\xcb(\ +\x98\x04@\x91\xd1\xc8\x15F\xa3\xea?\xb5\xe7\xc4\x09l\ +\x8a\x04\x8e\x89\xcb\x961\xec;\xdfQW\x80\xc3\x81v\ +\xe6L\xd8\xbd;\xf9'|\xea\x14\x9c>\xdd\xeb\xcd\xc1\ +\x90\xc9\x93\x03\xbd\x83\xd6s\xe7p;\x9d\x14|\xfb\xdb\ +\xd1/\xf4k\xcb\xecK.\xc1\xedtr\xe6\xd3O\x01\ +\xc8\x11Y\xc6[m]k\x18D\x1d5T2D7\ +\x00\xfeE~\xe2\x8a\xecl\xd5*\xc9\xd5\xd2Bmc\ +cP\x81C\xa6Ne\xd4C\x0f\xc5T\xfd>\x9f\x0f\ +jj\xd0^~9$\x99\xfa\x15\x84U\xab\x84)\xe9\ +\xc50\x97\x94p\xfd\xbau\x81\xcf\xb5\xabWc\xdb\xb4\ +)\xfa\xf3\x96i\x88\x09?\xff\xb9HO\x03t\xd0\xff\ +Z\xf8?t9\x84Q\x1d\xb7\xa0/\x1f\x84\xc1\xf9\xf0\ +\x82\x14\xf53\xeb\xf5L\xca\xcbS\xddG\xadnh\xe0\ +\x8c\x223w\xda\x1bo\xd0\xcf\xef\xb0\xc4B\xc6\xdc\xb9\ +h\x22\xe4\x04$\x85\x9a\x1a\xb8p\x01\xe6\xccI}\xd9\ +\xb1\xb0j\x15\xac^\x1d\xf3\xdeF\xab\x15\x83\xc9D\xc3\ +\xfb\xef\x03pb\xdb6F\xcf\x9f\x8f\xce`\x88y\x0b\ +]f&\xba\xac,\x1a>\xfc\x10\x80\xfe0b\x00\x1c\ +\xd8'\xd6<\x8a\x9a; '\x80v\x01\xdc\x95\x09\xb7\ +J'Jrr\x18\x22\x0f\xf9*!#\x86\xab\xa3\x83\ +\xad'N\x04}]x\xe7\x9d\x8c\xb8\xef>U\xcfI\ +\xb7f\x0d\xba\x97^J\xe5\xa3\x0f\xc6\xae]\x22V\xd0\ +\x1dq\x02\x9b\x0d\x9e{N\x04\xad\xd6\xae\x15\xf7\xd6h\ +b\x06\xab\x86L\x9eL\xd3\xd6\xad\xb8l66\xf0\xc8#\x81r\x8c0\xee\xdb\ +p\x05\x90\x0d\xe8\x09\xa3\x05\x02\x04\xe8\xa7P\xff\x16\x8d\ +F]h\xd2\xe3\xa1\xdeow$\x0c\xbf\xe3\x0e\xfa\xc5\ +\xd1\xfa\xa5\xc33u*\x9dw\xdd\x95\x1a\x01E\x13\x5c\ +2Z`\xfdz\xd1\xd2\x0b\x0bE9\xf1\xc6\x19TF\ +5\xa7\xcb\xb4@\xedk\xaf\x89u\x89T\x10\xa0\xe8\xd6\ +[1\xe4v\xad\xbfq=\xfc\x08\xa1\x05\xc2\xc6\x05\xa4\ +\x13:=\x04:\x9eF\x8d\x06\xb3J\xf5\xefr\xbb\xb1\ +\xbb\xddA\x85\x0e_\xb0 fk\x8ft\xb8\x97.\xc5\ +\x97\x97GZ\x11\xaf\x16p8\xc45\x85\x85\xc2\xc6\xc7\ +\x984\x12\x15\xeb\xd7\xab\xba\xdeh\xb52\xf6\xe1\x87\x01\ +p\xbb\x5c\xd4\xbe\xfa\xaa\xea`\xdcX\x99\xe3}\x09\xcc\ +\x1e\x09\x16\xba\xb4@\x10\xb4\x00\xf7\xc1@y\xe87\x1f\ +BmM\x84\xc3\xd6\xd2\x12T`vA\x01\xe6\xd2\xd2\ +\xb8[\x7f\x80(\xb9\xb9\xb8\x97.M\xa1\xb4\xc3 \x1e\ +-PS#\x06\x99T:q\xaa\xa0R\x0bL\x90R\ +\xcb\x81\xda\xd7_\x8f\x1c&V\x90\xa1\xe8\xbb\xdf\x0d*\ +\xe7;\xf0]Dx\xd8\x80B\x0bh\x01m\x91\xf0\x16\ +\x030\x83\xea\x11\xbfz\x05\x01\xf2o\xb8!a\xe1\x07\ +|\x81;\xef\xc43ujj\x1ev$<\xf7\x5c\xec\ +\xdf\x94\x97\x0b\xe1\xa7J\xf0\x12jjT\x8dZJ\xd9\ +\xd1\xe0\xd7\x02\xaf\xbf\x1e[+{\xbd\x18-\x16\xac\xd7\ +]\x17(\xe7\x1b0\x07\xd1\x1b\x08q\x06\xb5\x80&\x13\ +\xc6\xcbO\x0e\x8a\xa6\xfeedpwvb\xef\xec\x0c\ +\xaa\xf4\xd09s\x92&\x80\xcf\xe7\xa3\xfd\xe9\xa7I+\ +jj\x22\xabby\xabO\x17T\x9a\xa1\xa2{\xee\x09\ +\xbcWE\x00\xffa\xbd\xf6\xda\xc0u\xd9p\xd9MP\ +\x02\xf4C\xe1\x0cj\x01m\x86,\xe5\x0b\xfc&\x00b\ +\x9a\x80F\x85\xed\xd7\xe7\xe6&\xa5\xfe\x83\xba\x85c\xc6\ +\xe0~\xf0A\xd2\x8apBx\xf6Y!|Y\xc2F\ +Z\xa02\xf3\xd9h\xb5\x06&\xc6\xb8\x9b\x9b\xa9\xdf\xb8\ +QU\xcf\xac\xe8\xe6\x9b\x83\x9c\xc1o\x0a'?\x1b\x85\ +\x19\xd0\x22\xf2L\x02\xf9\xdd!\xc3>>_\xc4\x1b)\ +[\x7fnqqbv?\x82\x83\xd8\xfe\xd8c\xe9u\ +\x08\xab\xaa\xba\xb4\x80\xcd&\xbc\xfbxr\x0f\x92A\x1c\ +)lc\x17-\x0a\xbc\xb7}\xf4\x91\xaa\xa4\x11\xbc^\ +\xac\xb3f\x05\xae\x1b$\x92{\xfa\xa30\x03\x92\x06(\ +\x96N\x84\x1d\xf7\x93H\xa0 B\x93\x82\x00\xe6)S\ +R\xd2\xfa\xe5\x0ea\xabl\xb83-(/\x17\x9e\xf9\ +UW%\xe7\xdd\xc7\x03\x93\x09\x96/W\xfdssI\ +I k\xda\xb6m\x1b\xae\x93'U\x99\x01\xcb\xc4\x89\ +\x8122\xe1\x92R\xb8L\xbc%\x03\xbf\x19\xd0\xfe\x14\ +\x82\xd6i3G\xab\x89\x82a.E\xf8\xd6\x5cZ\x1a\ +x\x1fok\x8f\xe8\x10\xdex#\x9d\xb1\x86F\x93\x81\ +\x14\xbe\xed\xce\xbc\x81u\xebT\x9b\x00\x09c\xa2i\x81\ +H~\x80B\xcbL\x16\xce~\x162?@;\x00\xac\ +\xf2\x1f\xc5\x1c{\x929\x88J\x02d\x7f\xe3\x1b\x8a\x9f\ +\xa6F\x13\xb4\xfc\xe1\x0f\xdd'\x9ctc\xe5\xca\x842\ +\x98\xe5\xd3\xe1\x9bjjT\xc5\x03\x0c\xd9\xd9\x98\xaf\xb8\ +\x22p\xdd\xe0.G\xd0\x80\xdf\x0ch;\xe3H \x94\ +\xc3\xee\x0d\x1d\x5c\xea'\x8bC\xcb\x91,\x01<\x05\x05\ +}\x9f\x04&\x93\x10~\x823\x9d\xa5\x15P\x00l;\ +v\x84\x8f\x0c\x86!\x84e\xc2\x84@\x19f\x98\x8c\x92\ +\x00\xfd!h\x04\xc6\xa2\xb2Bn\xc5\xe7\xdc\xe2\xe2\x98\ +\xd7$\xd5-\xbc\xe3\x0e\xdcw\xdc\x91~A\xa5\x03&\ +\x13l\xd9\x92\xb0\xf0%Xd\x9a\xa3\xb1\xa6FUL\ + \xff\x9b\xdf\x0c*\xe3\x06\xb1\x17C\xc0\x0f\xd0j\xc1\ +\x94\x8a\xff\xa8\x97u9b!\xd1\x1e\xc2\xc5\xa7\x9e\xc2\ +3f\x8c\xea\xfb\xf4\x0a\x94\x95\xc1\xd1\xa3)\xc9C\xc8\ +\x9f>=\xf0\xde~\xe8\x90:GPq\xdfQ0\x01\ +9\x01|\x09.\x13\xd3\x98\xc8E2$\xda+p\xad\ +Y\x93\xfe\xb1\x82Ta\xf9r\xd1\xf2S4\xdbY\xae\ +\x01\x9a\xf6\xed\x0b\x9f#\x10\xc6\x0f0\xe4\xe4\x04\xae\x1b\ +\x00#\xe8\x22\x806!\xfb\x9fJ\xc4\xdbC\xf0\x14\x14\ +\xd0\xfc\xc2\x0b=]\xed\xe8()\x81\xcf?\x07\x7f\x18\ +7U0\x98L\x81\xee`cmm\xf8\x1c\x810\xce\ +\xe1\xa0\x91#\x03ed\xc1P\x84\x0f\xa0\x07t)#\ +\x80\x1a\x1f \x1a\xe2\xf2\x07n\xb8\x81\x96\x9f\xff<\xa5\ +\x0f7ex\xe2\x09!\xfc4\xa5\x9e\xc9g\x14\xb9\x9a\ +\x9aT\x99\x01\xf3\x88\x11\x81k\xf2D\xcc\xc7@\xaa5\ +\x80>EjYu\xd7\xf0g?\xa3\xe3\x9ak\x92\xbf\ +a\xaa\xb0p\xa1\xb0\xf5K\x96\xa4\xf56r\x024\x9f\ +:\xa5\x8a\x00\x86\xfe\xfd\x83\xca\xb8ZD~\xf5\xa4\x92\ +\x00\xf60s\xff\x13\x85Z\x128W\xaf\xeey\x7f`\ +\xfat|[\xb6\x88.^7\xacq`\x1c><\xf0\ +\xfe\xdc\xd1\xa3\xe1\xe3\x00\x0a_\xc0\xa2H\xb5\x1b&:\ +{\x19$c\x02\xd4O\x15I\x1c1\xfd\x01\xa3\x91\x0b\ +\xa9\xce\xf1S[\xb7\xe9\xd3\xf1~\xf0\x01\xde\x0f?\xc4\ +7m\x1a>_7$\xb5B\xd0B\x1a\xee\xe6\xe6\xf0\ +q\x80p\xbe\x80\x0c\x03\xa3\x11@\xadw\xdf\x1d\x04\x90\ +\x10\xcdAtO\x99B\xeb\x0f\x7f\xd8}u\x996\x8d\ +\xce\xcd\x9b\xf1l\xde\x8c\xd7/x\xe5\xd1mP\x91\xb0\ +\x83\xc7C\x8eb%\x92<\xe1\x08\x0a\x1f\xc0.\x96!\ +M\x1a\x1d\x8a\xbc\xc0t \xdc\xc3\xd6\xd5\xd6\x92\xb5v\ +m\xfa\xef=|8\x1d\x15\x15\xb87m\xc2;u\xaa\ +\xaaq\x8et G\xa6\x01\x9a\x0e\x1eTE\x00\xa3b\ +\xc6\xb1\xafk/fm\x86^1k\xc4\xa5\xa2\x12\x10\ +:h\xe4T\xb9\xedj\xb2\x90?\xd8\xac\xcaJL\x0f\ +?\x8c&\x8d\xe4\xf3\x0d\x1fN\xc7/~\x81\xe7\x07?\ +\x10\xd3\xd7\xfd\xf7\xf7\xf9|\xaa\x17\xb8\x88k!\x8c\x18\ +\x08ZKI\x1a\xa5\x0d}H\xa1\x87\x0c\x061,,\ +\x08p\x16\x8e\xc9\xc3\xbf\xcd*+\x12n\xd0\xa8\xc3\xe9\ +\x8c+\x22\x98\x0c\xfa\xad]\x8b\xa9\x1b\xc6\xee[\xea\xea\ +\x82\x04\x9f(RI\x82\x00\xa4\x819\xa5\xb0c\xf8\xf6\ +ybXX\xe4\x82\xbc(\xe6\x8f\x05\xa0V\x03@\xe8\ +\xb8Awi\x81\xec\x8a\x8an\x11>@\xc6\xab\xaf\xa6\ +4\xc7!\xe5P\x99\x22\x16\x06:@\xa3E(\x91\x06\ +\xe9l<\x04\xc8Q|\xee\x0e\x02\x18\x9fy\xa6\xdb\x84\ +\x0f\xa0\xff\xf7\x7fO)\x01RJ\x04I\x03\xa8q\x06\ +C\xa1\xc1\xaf+\xbc\x9d2\x02\x80XnJ\x0d\xba\xdb\ +\x0f0-^\x8c\xf1w\xbfK\xeb=\x94\xd0\x1e?\x9e\ +r-\x90\x0c\x11\x9a\xe4YK>\x9f\xea\xec\xed0\x10\ +\x09!\x80\xb7\x0d\x82\xa28\xe7P\x07\xa5\x09\xb0WW\ +\xa7M\x10\xa6\xc5\x8b\xc9\xae\xa8H[\xf9\xd1`\xf8\xf5\ +\xaf\x93\x16t\xb4q\x8eDa\xbe\xf4RU\xd9\xdba\ +\x1dE?\xb4\x80\xf7\x22\xd4\xcaO\xda\xd5V\x80`g\ +\xb0\xe5\xc4\x09Z\x15S\xc4S\x81\x9e\x14>\x08-\xa0\ +\x7f\xed\xb5\x94\x08;\x95\xda\xc0\x90\x99\x99\x8c\x0f\xe0\x03\ +?\x01\x1a\xa1F\xfe\x8dZ\x13\x00\xa1Z\xe0\x94\x7f\x81\ +\x83T!\xbb\xa2\xa2G\x85/!\xf3\xe9\xa7\xd3f\x06\ +\xe2!B\xe3\xd6\xad\x81\xf7\x86\xac,U\xf6\xbfIa\ +\x9a\x1dp\x14A\x00\xaf\x16\xf0\xfe\x05\x8etB`M\ +7\x17\xea\x9dA\xab\xe2s*\xcd@\xaa\xbc}o\x0a\ +\xba\xa6\xda\xe3\xc7\xd1m\xdb\x96\xb2\xd6\x9e(\x11\xe4\xbb\ +\x88\x0c\x1a:4zj\xb8\xfc;y\x19\xd0\x82\x88\xff\ +\xf8\xb4\x88\x95#:;\xc5z\xb3\x01\xd8T>\x18\xab\ +\xe2\xf3\xa9\xca\xca\x94D\x05\xb3*+\x93\x16\xbe\xbb\xb4\ +\x14\xfb\x9borf\xf7n<\x11\xf2\x15\xe3\xaa\xd3\xd2\ +\xa5\xdd\xa6\x05\x22\x91@\xbe\xc2hNnn\xcc\x940\ +<\x1e\x5cg\xcf*\x8b\xf1!\xe4\xee\x95\x22\x06\x1e'\ +\xfcC\xfe\x0b\xb5f\xc0@(\x09\x1a\x92T\xd9\xfa\xba\ +\xba\xa4\x84/\x09\xfe\xdc\x9bo\xd2^Z\x8a77\x97\ +\xaf^y%iM\x90\xb1};\x19\xdb\xb7w;\x09\ +\xe4D\x90v$1dea\x8cE\x00){[A\ +\x80&\xb1a\xb5\x079\x01\x8e\xc1V\xf9\x8fl\x84&\ +~F\x82U\xf1\xf9\xe8\xcb/'\xfc\x90\xb5N'\xe6\ +\xdbnC\x9b\x80\x16\xf1\x14\x14\x04\x09^\x8e\x8e\xe2b\ +\x1cqL\xc6\x88\x84th\x01\xb5f\xe4\x9c\xac\xf5\x0f\ +\x1a:T\xf5Z\x82v\x85c\xde*v\x1a\xe9DF\ +\x00\xef\xcbp\xa4\x03\x82Vx\xb4\xa9|(E\x84\xf6\ +\x06\x12\xf5\x05\x12\x11\xbe\xa7\xa0\x00\xc7\xf2\xe5\x9c\xde\xb5\ ++D\xf0r\xb4\xcd\x99\x934\x09\xf4;v$\xa5\x05\ +\x92\xf1\x19\x1a\xb7l\x09\xd4#\x7f\xd8\xb0\x98)\xe1\x01\ +\x13`\x0f\xee\xd7}\x02\x87\x10\x04\xf0\x04\x08\x00t\x5c\ +\x84 \x17\xde\x16\xc7\x83\xb9B\xf19\x11-\x90\xb7d\ +\x09\xfa8\x82Ir\xc1\xb7\xcc\x9f\xaf\xea\x9a\x96\xf9\xf3\ +U\xff6\x12\xfa-[\x96va\x87;\x8e\xbd\xfdv\ +\xa0\x0e\x96\x82\x02U\xf6\x1f\xaf\x17\xbbb\xcd\xe6\x13b\ +\xd7\xb1 \x02\x00t\x1e\x84W\xe5?\xb4\xa1\xbe7\xa0\ +L\xd6>UY\x19WL \xab\xb2\x92\xfe*I\xe3\ +\xcd\xcd\xe5Byy\x5c\x82\x97\xc3\xb1|yR$\xd0\ +\xef\xd8\x81\xf6\xf8\xf1n\xf5\x01\xda\xcf\x9f\xa7\xc9\xdf\x05\ +4df\x92\x1f-\x08$\xef\x02\xfa\xf7\x15\x08\xfcw\ +8\x80\x10~\x90\x09\x00\xe8\x5c\x05\x87;\xe0\x0b\xf9\x05\ +\xf5\xa8\x83\x11\xd9\x8eR\xd2\xb5\xcf<\xa3\xeaZ\xad\xd3\ +\xa9\xca\xe9\xf3\xe6\xe6\xe2z\xf4Q\xce\xec\xde\xcd\xc5\x07\ +\x1eHX\x80\x00\xce\xf2r:\x92Hd\xcd\xfe\xcdo\ +\xba\xa5;(\x95kS\xb6~\x95\xeb6\x9fS\xb4\xfe\ +\x0b\x22\x06\xd0\xe1?\x824\x80\x0fp_\x80 \x17^\ +-\x01@\xcc8\x90\xe3DE\x85*_`\xe0}\xf7\ +E\xb5\xfbr\xc1\xbb\x1ey$%\xfdzon.\xf6\ +7\xdfL\x98\x04Yo\xbc\xd1\xadZ\xe0\xd0_\xff\x1a\ +\xb8\xb7\xb5\xb0P]\xf8\xd7\xeb\xa5I\xb1j\xfbY\xd1\ +\x03h'\x8c\x06\xf0\x01\x1d[`\x8d\xfc\x02\x17Ij\ +\x81\x18\x837\xd9\x15\x15\x18\xa2\x90\xe4\xe2\x03\x0f\xa4T\ +\xf0r$K\x02\xa5\x16H\xd7\xe1\xb2\xd98\xe5\xdf'\ +\xc8\x90\x99\x89\xd5jU\x1d\x02n\ +\xb6\xb88\xfa\xf0\xaf\xec\xbdM\xb1o\x83]8\x80\xed\ +D0\x01\x12:_\x84O\xdb\xe0\x13\xf9\xc9=q<\ +\x94\x09\x04\xe7\x0at8\x9d\xec\x8d\xe0\xe4\xb9\x1ey\x04\ +\xfb\x9bo\xe2z\xf4\xd1n\x17\xbc\x1c\x89\x92\xa0_E\ +\x058\x1ci\xeb\x0e\xee{\xea\xa9\xc0\xbd,C\x87b\ +6\x99\xa2\xdb\x7f\xd9{\x9b\xa2\x07pR\x8c\xfa\xb6!\ +[A<\xdc\xfa\xb1>@3\x1a\xce\x0d\x82\xdb\x03\x82\ +B\x8c\xfc\xa9M\x07\x1f@\xb0\xe9h>t\x88\xec\x82\ +\x82\xb0S\xc8<\x05\x05\xb8KK{|\x92\x87/3\ +\x93\xb6\x9bo&\xb3\xaa\x0a]h\xfc<\xf2uYY\ +Q\x03P\x89\xe2\xe2\xb1c\xec\xfa\xc9O\x02\x9f\xcb\xa6\ +L\xc1\xa8\x98\xe5\x13\x09\xb6C\x878\xa8\xd8wa\x05\ +\xfc\xce\x09\xa7\x10[\xd0\xb7\x12A\x03\xf8\x00\xf73\xb0\ +Y\xa9\x05\xaa\xe2\xa8|>\xa1\xbd\x82\xba%K\xba-\ +o0QH\x9a\xa0-\x8e\xbd\x05\xfa\xbf\xf4\x12Z\xa7\ +3\xe5\xddA\xb9\xf0-\x97\x5cB\xfe\xe0\xc1\xaaB\xbf\ +x<\xd8\xfe\xf3?\x83\xeax\x16>m\x10\xa9\x1e-\ +\xc8\x96\x8f\x8f\x94>\xea\x01\xda\x8e\xc1o\xe5'](\ +2Gb \x9c)\xa8Y\xbc\xb8[\xe6\x10$\x03i\ +\xf0Hm\xb0H\xebt\x06\x05\xb1R!\xfc\x86\x8d\x1b\ +9#\xdbg\xb9\xb4\xa4$f\x97/\xb0~ck+\ +\xf5\x07\x0e\x04\xd5\xf1(\xecF\x08\xbf\x0d\xd9\x8e\xe3\x91\ +\x08 i\x81\x0f\xc2\xf9\x02j\x07\x89\x00f\x13\xdc+\ +p\xd6\xd5\xf1\xa9\xcaM$z\x1a\x8e\xe5\xcbU\x8f\x1d\ +HZ@BRQ?\x87\x83\x8f\x1fz(P\xd6\xd8\ +\x11#0\x1b\x8d\xaa\xbb~\xb5\x9f\x7f\x1eT\xb7Nh\ +yE\x8c\xf6^D\x10 \xb0\xbc[\xb4\x04r\x0f\xd0\ +Z\x07\x8f\xcbO\xba\x89\xcf\x14\x18\x812\xc59{u\ +uD\xa7\xb0\xb7\xa1e\xfe|\xcen\xda\x14\xd31U\ +j\x01\x09\x89\x10\xe0\x93\x87\x1e\xa2\xe3\xc2\x05\x00\x0cz\ +=\x13\x8a\x8aTO\x03s\xb7\xb6R\xbbo_P\x1d\ +\xce\x88F|\x91.\x02\x042D\xa2\x11\xc0\x07\xb8\xff\ +\x02\x1f\x9f\x87\xbf\xca\xbf\xb0\x11\xdf@\x91\x15P\xbaH\ +'**\xfa\x0c\x09:\x8a\x8b9\xbbiSL\xbf\xa0\ +\x7f\x94-o\xd4\xf6\x10\x0e,]J\xe3{\xef\x05\xae\ ++\x1b7\x0e\x83V\x1bs\xc4/\xd0\xfakkq+\ +Vp}\x1b\xfe\x86\x10~\x90\xfd\x87\xd8+\x84y\x80\ +\xd6w\xe1\xd7^\xc5\xb8P\x15\xf1\x99\x82\xb1\x84F\x09\ +\xfb\x12\x09$\xbf \x99\xc4\x92X-\xbf\xf1\xbd\xf78\ +\xf8\x9b\xdft=\xb3a\xc3\xb0\x0e\x1a\xa4j\xc4\x0f\xaf\ +\x17w[\x1b\xb5\xa1\xf9\x7f\x07k\xba\xc6\xf5Z\x91\xa9\ +\x7f\x88\xbd}<\x80\xef8\xb4_\x09\xa7\xcdp\xa3t\ +\xd2#\x0a\xe7\xf28\x1e\x80\xd5_\x0b\xf9\xe8\xb4\xb3\xae\ +\x8e\xd6\x86\x06\x86\xf6\xc4\x8e^\x09\xa0s\xc4\x08Z\xee\ +\xbe\x1bM{;\x86\xcf>\x0b\xfa\xae}\xc6\x0cZo\ +\xbe9\xa1r/\xec\xdf\xcf\xc7\xf7\xde\x8b\xb7\xbd\x1d\x00\ +sN\x0eeW^\x89.\x8e%\x1cj\x0e\x1c\xa0\xa1\ +)8d\xf7!\xbc\xf0\xa5\x18\xe0;G\xd7\xc6\xd2\x01\ +\xa8\xdd\x0c\xd8\xb7\x13\x8e\xcc\x84\x09\x06\xd9\xca\xa2\x0e\x84\ +\x83\xa7nS8\x01+}\x9f\x04\xbe\xccL\xdag\xcc\ +\xa0m\xce\x1ctg\xcf\xe2\x1d<\x18OA\x01\x17\x7f\ +\xf0\x03:e\xcb\xb1\xa8\x85\xb3\xae\x8e\x9d\xb7\xde\x1a\xe8\ +\x1d\x1922\x98;n\x1c\xd9\xf2-\xe3|\xd1\xb3\x85\ +]--T\xed\xde\x8dG\x96\x00\xea\x80\x83\xbf\x87\x95\ +\xc0Y\xe0<\xfe\xbe\xbf\xfc:\xb53\x16\xb5@V)\ +\x14\xde\x0d\xd5ZE<\xe8Vb,1\x1b\x06U\x84\ +\x8e1\x98KK\x99\xb8bE\xb7M0\xed\x0dp\xd6\ +\xd5Q}\xdbm]\xc2\xd7\xe9\x98[\x5c,\xbc\xfe0\ +[\xc7G\xdab~\xd3\xc7\x1fcSl\xda\xf9.,\ +y\x076#\xe2\xff\xe7\x10\x04\x08b\x92Z\xfd\xe2\x05\ +\xdc\xd5p\xf20\xfc\xab\xf2\xcb\x0d\xc4\xe7\x0f\x80\xe8\x19\ +(}\x02{u5\xdbf\xcf\xee\xf5\xc1\xa2T\xc1^\ +]\x1d$|\x80)\xc3\x86a\xce\xcaR?\xe1\xc3\xeb\ +\xc5v\xf2d\x88\xf0\x1dp\xf0\x1d\xd1\xf7\xbf\x80\x98\xf4\ +\xed&\xccn\xe2\xea\xf7\x83\x17\x17\xfbv\xc2\x91)\x90\ +\x9f-[a\xd4\x03\x9c@,@\x17O\x81V\xff\xab\ +\xdcju8\x9d4\xbe\xfd6\xba\xac,\x06(V\xb9\ +\xfc:\xa1\xa1\xa2\x82O\xef\xbf?`\xf3\x01\xca\x86\x0d\ +\xa3\xc8\xec\xd7\xa5>u3\x85\xdc\x1d\x1dlP\xa8~\ +\x80\x15\xf0\xcb\xd3b+y\xc9\xf6\x87m\xa3\xf1\xc8\x0b\ +\xfc\xf9\xe4\x1f\xc0\xce\xd9pS\x86L\xf3\xb7\x22\xfa\x18\ +\xd68\x0b\x94\xc6\x17\x1a\xe9Z\xa9\xc2\xdb\xde\xce\xd9\xaa\ +*\x9c\x07\x0e0x\xc6\x0ct\x99\x99\xa9z\xee=\x8e\ +\x0e\xa7\x93\xfd\x8f=\x16\x94-e\xd0\xe9\x98j\xb1P\ +4`@\xec\x02\x14\xc4\xf8`\xdf>\xec\x8a=\x1b\xbf\ +\x84\xb7\xd6\xc3?\x813D\xb0\xfd\x12\x12\x22\x00\xe0\xcb\ +\x84\x8f/\x87\xdb5\xb2@\x9f\x1dA5k\x9c\x85\x9a\ +\x11;V\x9d\xf1\xd7TB\xf3\xa1C\x1c_\xb3\xe6k\ +\xa3\x0d\x9cuu|z\xff\xfd\x9c\x95\xcd\xf05h\xb5\ +\xcc-(\xa0@\xe5 \x8f\x1c\xb5'N\xb0_\x91w\ +\xd9\x06\xe7^\x12\x83>'\x89\xe0\xf9\xcb\x11/\x01\xc0\ +O\x82/\xc01\x00>\x1b\x0e\x0b\xe4_&J\x82l\ +\x84\x09i!\xb8\x87 i\x03{u5\xd9\x05\x05d\ +\xf7\xc0Pq\xb2\xe8p:9\xfc\x87?\xf0\xd9\x83\x0f\ +\xd2.\x1be4\x1b\x0c\xcc\xcd\xcf\xc7\x14m\x7f\xe6\x08\ +\xb0_\xbc\xc8\xa60\xbeR%,\xfbT\x0c\xd9\x9cE\ +t\xd4\x82\x22\x7fJ$B\x00\xf0\x93`\x1f\x9c)\x86\ +\x0b\x03\x14\xbb\x8e&J\x02\x9d\xff\x1a3\xc2\xa7\x90\xcf\ +immh\xa0\xa1\xa2\x02\xe7\x81\x03\x0c\xf8\xe67S\ +\xb60e\xba\xd1PQ\xc1\xe7\x0f>\xc8\xa9\xca\xca\xa0\ +\xf3E\xd9\xd9\x5ck6\x93\xad\x8b\x22\x02\x9fOx\xf9\ +\x0a\xb5\xefjog}mm\x88\xdd?\x02\x95+\xe0\ +\xef\x08ejGD\xff:\x89\x82D\x09\x00~\x12\xec\ +\x80\x03\xa3\xc19P\xb1\xf5\x5c\xa2$\x00\xb1|\xf9h\ +\x04\x01\xce(\xbek>t\x88\xa3/\xbfLkC\x03\ +\xfa\xbc\xbc^\xab\x11\xa4\xf1\x8e\xa3/\xbf\x1c\xe4\xe5\x1b\ +4\x1af\xe5\xe5Q\x92\x93\x83.\x81u\x83\xdc\x9d\x9d\ +\xfc\xa3\xbe\x9ef\x99\xf3\x08\xd0\x0c\xc7\x1f\x87'\x10-\ +\xff,b\xf6O\x07a<\x7f9\x92]\xb9H\x8b\xd8\ +\x82\xc4\xb4\x14\xfeh\x82\xef(\x7fPD\xe8`P\x5c\ +\x0f\x12\xa8&\xf2\xfa\x85\xb9\xc5\xc5\x5c\xf6\xc0\x03\x0c\x99\ +3\xa7\xc7\xe3\x07\x1dN'\xa7++\xa9\x7f\xe6\x19Z\ +\xc2\xcc\x89\xb0\xea\xf5\x94\xf5\xef\x8fA\xa7S\xd7\xc7W\ +\x1cn\x9f\x8f\x0d\x87\x0fcom\x0d*\xb7\x13Z\xfe\ +\x02\x8f\xee\x15\xaa\xbf\x11a\xfb\xa5\x19\xc0Q\x91\x8a\xa5\ +\xabt\x88](\x06<\x0d/\x0e\x80\x9bB\xfe8\x82\ +\x041\xb7\xa3\x89\x82&D\xf0(\xd2D\x15}n.\ +C\xe7\xcca\xc8\xf5\xd7w{D\xf1Te%\xa7\xdf\ +\x7f?\xe2\xcch\xb3V\xcb\x14\x83\x81|\xbd>f@\ +'\xa2\xf0\x81\x0d6\x1bvY\x92\xa7\x84\x8dP\xbeA\ +<\x9e&D\xeb\x8f\xea\xf8\xc9\x91\xaa\xb5\xcb2\x10$\ +\x18\xf84\xfc>\x1c\x09\xcc\x88\xdc\x80dW\x18\xb5\x01\ +\xfb\x89\xbd\xa2\xa9\xb9\xb4\x94\xa1s\xe6\x90[\x5c\x1c\xb4\ +\x99U*\xd0\xea\x9f\xfbh\xaf\xae\x8e:\x1d\xde\x08L\ +\xd0j)\xca\xc8\x88\xbf\xc5k4\xa0\xd3\x81F#\x84\ +\xdf\xd0\x80]\xa1\xf6\x01v\xc1\x9fV\x8a,\xee&\x84\ +\xc5\xbc@\x84\xa0O8\xa4r\xf1\xba\x0c\x843? \ +\x12\x09\x0c\xc0\xf5\xc86\xa6L\x02v\x84\xbe\xb3\xa1.\ +\x0a\x99[\x5cL^q1\xfd\x0a\x0a\xc8\x1d=:\xe0\ +DF\x22G\x87\xd3\x19\x88H:\xeb\xea\xe8p:\xb1\ +\xef\xdc\x19x\x1f\x0d\x16\xc4T9+\xc4l\xd91\xd5\ +>\xb0\xe1\xd4\xa9\xb0\xc2?\x02\x95K\xe19D\x9e\xdf\ +i\x84\xd7\xdfN\x14\xaf_\x89T\xaf^\x18 \xc1\xa3\ +po\x11\x84];}\x02\xa1\xf9\x82\x89\xc2MW~\ +\x82-\xc5\x7f&\x1e\x18\x11\x02\x1fC\x18-'\x91@\ +z\xf5\xb7\xecX\xc2\xb7{\xa4\x97\x00 \xe2\x04\x06\xffs\x1c\xf8$<9\x04\ +\xbe\x17\xee\x87\xd2\x94\xb2T\xf9\x06}\x022mP\xeb\ +\xf3\xb1\xc7\xe3\xc1\x1d\xc1T\xec\x86?\xae\x80\xb7\x11\xc2\ +?\x87P\xfbI\x09\x1fR\xef\x03(!\x0d\x1eu \ +f\x1e\xef0\xc3\xc1K\xa1L\xe9\x17x\x10j\xba\x1e\ +\xa16\xe2M0\xe9\xab\xb0\x03\x1fz\xbd\x1c\xf4z\xc3\ +\x1a\xf0NhY\x0b\xbfX\x07[\x10\xad^\x8a\xf1\x87\ +\xe4\xf7%\x82tk\x00\xf9}\x02~A1\x0c\xbb\x1b\ +\x96\x99 \xe2\xae\xd0F\x846(RW~\x9f\x83\x0b\ +1\xc7\x22\xda\xcck\x07\x1c|\x1e\x9e:\xd9\x95\xd1c\ +G\x84x\x03s\xfb\x92Ew\x11@\x82\xe4\x17\xf4\x07\ +L?\x86[\x8a\xe1\x11C\x94\xb4\xc2\xaf\x1b\x11\xd4\x08\ +\x1e\x02\xf6~%\xf0\x15B\xf8\xe7\xe9\xca\xecQ\xdd\xcf\ +\x8f\x85\xee&\x00\x08\xbf@\x8a\x1c\xe6^\x09\xc3\x16\xc0\ +\xa2\xa1\xb2\x89\xa8\xe1 ->QD\xf7\xeeW\x94*\ +\xa8\x15|3\x1c\xdf\x00\xcfW\xc1^\x84\xf0\xbf\x22\xd8\ +\xde\xa7L\xf8\xd03\x04\x90\xee\xabC\xf8\x01\xfd\x81\xbc\ +2\xb8\xf2&\xf8\x95\x11\xc6\xc7\xba\xd8\x8a \x82\xb5\x87\ +*\x1f\x0f\xea\xfdG\xac\xd0u'\xb4\x1c\x86\x7f<\x03\ +\xab\x10\x02\xff\x0a\xd1\xea]t\xf5\xf1S\xbe\xe3DO\ +\x11@\x82\xa4\x0d\xb2\x10=\x85\xdc\xbb`V\x09\xfc\xd0\ +\xa8\xd8\xd5<\x1c\xa4UJ-\xfe\xd7d\x06\x9bR\x09\ +\x9b\xecP\x13\x8c:\x09\x1f\xbd\x03\xaf\xd5\x88\xf5\xfb\x1c\ +\x08\xc1_\xa0k&OJ\xec}8\xf44\x01\xa4:\ +h\x11;Y\xf6\xa3\x8b\x08e%*\x89 \xc1\x82\x18\ +g\x90^\xbb\x0bv\xbaVQ\xb1\xc5q\x9d\x03\x0e\xfe\ +\x03^\xa9\x12\xc3\x1a\x0e\xff\xe1D\xd8zi\x15\x8f\xb4\ +\xeeC\xd7\x1b\x08 \xaf\x8bd\x16\x02\x1aa.L\x98\ +\x04\xdf\xbfD\x0c&\xc6\x053]\x11<\x8b\xbf\xe0d\ +\xba\x97n\xba\x12]\xa4\x08c\x22\xbb\xa8\x9f\x84\x8f\xf6\ +\xc2\xe6\xb7E\xda\xb6\x0b\xd1\xda%\xc1\x07M\xdfN7\ +z\x13\x01\xe4u\x92\x13\xa1?`\x1c\x09\xf9s\xe1V\ ++\xdc\x9a\x09\x97${\x13\xe5>\x07\xf2\x88\x9f\x9d`\ +\xd5\x9dL\x08YB'\xb44@U%\xac\xff\x5c\xac\ +\xd5\xd7\x8c\x10\xba\x0b\x91\xba\xd5J\x97\xba\xef\xb6\xdd'\ +{#\x01\xe4u\x93\x88\x90\x890\x0f\xfd\x81\x9c\x1b\xe1\ +\xaa\x09p\xd3 \xb8&\x15dH'\xce\xc2\xa7Ga\ +\xf7+\xf0\x1e\xc2\xa67\xd3%t\xf9\x82\x0d\xdd*x\ +\x09\xbd\x99\x00\xf2:\xea\x10\xce\xa2\xa4\x15$2d\xdf\ +\x08\xe3\xc6\xc2\x8c!pM\xb6l\xdebO\xa1\x13Z\ +\xce\xc3\x01\x1b\xec\xaa\x84\xed\x0d]\xe9Y\x17\x11\xc2o\ +A\xb4v7=\xd0\xe2\x95\xe8\x0b\x04\x90C\xea5\xc8\ +\xc9 \x11\x22\xfb2\x18<\x1d\xae\xbe\x04\x8a\x06\xc1\xb8\ +\xdc\xd0%\x8cS\x8eNhi\x06\xdb\x19\xa8;\x0c{\ +\xd7\x8b\xee~;]seZ\xfdG\x9b\xff\xe8\xa0\xab\ +?\xdfc\x82\x97\xd0\xd7\x08 \xaf\xb7\x16\xa1\x19\xf4\xfe\ +C\x22\x84\x9c\x18\x99W\xc3\xb0ap\xe9ep\x95\x1e\ +r\xf2\xe02\x1fh\xf2 \xae\xf5\xe0\x1cb\x8d=.\ +\xc0Q74\x1f\x82}\xc7\xa1\xe931\x01CJ?\ +hS\x1cn\xd9!\x09\xbd[\x9c\xbbx\x1ed_\x87\ +\x9c\x0c\x92\xa9\xd0\x879\x0c\xfe\xd7\x0c\xd9\xab\xce\x7fm\ +\xac\xe7 \x0djy\x10\x82\x94Z\xb1\xa4\xc6\xa5C\xfe\ +9\xb0\x227\xbdL\xe8\xca\x87\xf7u\x83$PI\xb8\ +rb\xe8\x14\x87\xf4[5\x04\x90\x93@~t*>\ +K\x02\xefq\xf5\xae\x06_G\x02\x84\x83$h\xe5\xab\ +\x1a\xe1K\xf0\x11L\x04\xe5k\x9f\x84\xc6\xa7r\x1a\xf2\ +\xff\xe0\xeb\x89\xff\x02\xb0(\x1dJ\x5c\x9b\x97N\x00\x00\ +\x00=tEXtcomment\x00Fa\ +il agt action fr\ +om Icon Gallery \ +http://icongal.c\ +om/\xda2\xc48\x00\x00\x00%tEXtd\ +ate:create\x002011-\ +08-21T13:33:48-0\ +6:00\x08#\x8b:\x00\x00\x00%tEXt\ +date:modify\x002011\ +-08-21T13:33:48-\ +06:00y~3\x86\x00\x00\x00\x19tEX\ +tSoftware\x00Adobe \ +ImageReadyq\xc9e<\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00&*\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\ +\x00\x00\x00\x04gAMA\x00\x00\xaf\xc87\x05\x8a\xe9\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x00H\x00\x00\ +\x00H\x00F\xc9k>\x00\x00\x00\x09vpAg\x00\ +\x00\x00\x80\x00\x00\x00\x80\x000\xe11\x9a\x00\x00$\xd2\ +IDATx\xda\xed\x9dyx\x14U\xba\xff?\xd5\ +\xd9\x13\xe84d\x81`B\x12\x945\x81\xb4\x08B\xe2\ +(\x8b\x22 ((\xca\xb8\x8cNPf\xf99\xfeF\ +\xf4:\xcfu\x9c{\x7fz\x9d\xc7{gS\x86Y\xf5\ +QG\x11\xaf\xce #:\x8a\x02*$\x841,\x1a\ +\x12\x92\x80,1+[BB\xa7!{\xd2\xfd\xfb\xe3\ +\xa4\xaa\xabz\xad\xeet6\x9co\x9ez\xbas\xaa\xfa\ +\xd4\xa9\xf3~\xcf\xfb\xbe\xe7=\xa7\xce\x91\xecv;\xff\ +\xc27\x17\x86\xc1.\xc0\xbf0\xb8\x90\x06\xbb\x00}(\ +\xb7\x84 \xb0\xfa\xe8\xeb\xf3\xd8{\x0f\x9b\xd3q\xd9\xaa\ +\xc9\xe1B\x00Y\xd8!@\x08\x8b\x98O\x08f$R\ +\x09a:\x12\x99H\x18\xfb|\x97\x1e\xf6a\xa3\x16\x1b\ +5\xb4\xb1\x97s\x14s\x8cF\xa0Gu\xc8\xa4\xb8,\ +0\x94\x09 \xb7\xeaP\x16\xb1\x800n\xc5@\x16\x06\ +r\x06\xb4\x146N\xd1M!]\xfc\x13\x0b\xf9|\xc9\ +\xd7@\x17\xd0\x8d\x83\x10\xc3VC\x0c5\x02H\xc8\xad\ +|\x09k\x08\xe5V$\xbe\xa5\xb7u'\xc5'1.\ +a\x1c\x12\x12\x93\xc7O\xc6\x18cDBB\x92$4\ +\x7f\x92\xc4\xd1\xea\xa3\x5cl\xb9\x08@yu9\xd6\x16\ +\xab\xbe\x12\xda8E\x17;h\xe6-\xf6Q\x04t\x22\ +\x081,\xc90T\x08 \xd4\xfb\x22n$\x9c\x070\ +\xb0\xcc\x9b\xd0\xc7\xc6\x8f\xe5\xca\x94+\x998~\x223\ +\xa7\xcc\xc4\x18cd\xf2\xf8\xc9\x18$\x838\xf0\xf0\xe9\ +!MB\xc2 \x198Zu\x94\xba\x86:\xca\xab\xcb\ +)\xab*\xa3\xac\xaa\x8c\x9a\xfa\x1a\xcf\xa5\xd6\x92\xe1K\ +\x5c\xc90\xe41\xd8\x04\x10*~)k\x08\xe5gH\ +\xa4\xb8\xbb(&:\x86\xb9\xe6\xb9dM\xce\x22kr\ +\x16I\x09I\xfa\x84\xebC\xf0z\xd2j\x1bj\xf9\xbc\ +\xfcs\xf6\x96\xef\xa5\xa0\xbc\xc03!z\xf8\x8aV^\ +\xa1\x86\xf7\xa9\xe0\x1c\x82\x0c\xdd\x0cq\xad0X\x040\ +\x90M<\xa3Y\x87\x81\xef\xb8\x13|LT\x0c\xb3\xcd\ +\xb3\x99c\x9eC\xb69\xdb\xa3\x80\xe4\xd6\x1b\x22\x85(\ +\xdf\x83!xO\xe7J\xabJ\xd9v`\x1b\x1f\x1c\xf8\ +\x80\xc3\x95\x87]\x9f\xcc\xceE\xday\x8dz\xde\xa4\x84\ +\xe3@\x07\x0e\x7fa\xc8\x11a\xa0\x09 T\xfdR\x1e\ +$\x8c_\x02\xb1\xce\x17L\x9d8\x95\x1b\xb2o`~\ +\xf6\xfc\xa0\xb4n\x85\x14}\x14\xbc\xbbs\xa5U\xa5\xbc\ +\xb9\xfbM6\xed\xda\x84\xa5\xc5\xe2\xfa\xb4\x1dl\xe54\ +\xbf\xa4\x94c@;\xc2<\x0c)\x8d0P\x04\x10\xce\ +\xdd\xcd\xdcH\x04/\xbbk\xf19sr\xb8}\xd9\xed\ +$\xc4%\xf4\xbbZ\x97\xbfK\x92\x144S\xf2\xe6\xee\ +7yc\xd7\x1b\xe4\x97\xe5\xbb>};\x1b9\xc6/\ +\xa8\xe6\x0cZ\x22\x0c:\x06\x82\x00\x06\xae%\x81D^\ +\xc5\xc02\xe7\x93s\xe7\xcc\xe5\xd6\xa5\xb7\xba\x15\xbc,\ + \x8dz\x0f6\x19\xbc\x9c\x0b\xe4\x9e\x05e\x05\xbc\xb1\ +\xeb\x0d6\xee\xda\xa8}Pa\x1a^\xe7\x13\xfe\x1bh\ +\xc1a\x1a\x06\x95\x08\xfdI\x00\xd1\xea\x97\xb0\x8ap^\ +\xc2I\xddO\x9f>\x9d;n\xbf\x83\xf8\xb8\xf8\xc0\x05\ +\xd4\x17\x82\xf4Ak\x84\x10\xe2\x93 5\xf55<\xfb\ +\xd7g]\x89`\xe34\xe7y\x82}|\x02\xb4\x22\x9c\ +\xc5A\xf3\x0fB\xfa)_\x03\xd9$`\xe6mBy\ +\x0a\x88\x94O\x8c\x1a=\x8a\xdc\x07sYx\xe3B\xa2\ +\xa2\xa2\x1cT\xf1\x04)\xf04{o\x9dJH\xca\xf7\ +`\xe4\xab\xe7\x9e\xa3F\x8cb\xc5\x9c\x15,\x98\xbe\x80\ +\xea\xfaj\xaa\xea\xab\xe4\xdf\x8c$\x86U\xa42\x99.\ +\xbe\xa4\x99v\x1c~\xc1\x80\x93\xa0?\x08``\x11\xb3\ +0\xf2)\x06f\xa9O,\xbcy!\xf7\xaf\xb9\x9fQ\ +\xa3F\x89\x8a\x92<\x08\xc7C\xe5\x06C@r\x9a\xe6\ +\x9e\xc1\xc8\xd7\xc3\xb9\xb4\xc44ro\xcc\xc5<\xc1\xcc\ +\xfec\xfb\x1d\xceb(S\x18\xc3\x03\x8c\xe2\x04\xa78\ +\x85c\x0cb@I\x10l\x13\x10\xc2R\x1e\x22\x94_\ +\xab\x039c\xc6\x8da\xe5\xb7W2n\xdc8\xdd*\ +Y\xa3\xde\xfdp\xd6\xaa\xeb\xaaimk\xa5\xa1\xb1\x81\ +\xfa\xc6z\xd7H\xa0\xea\xbb\x1c@\x92\x90\x98=u\xb6\ +P\xefRH\xd0\x1dD\xf9\xd3\xdaj\xe5\xbf\xde\xfe/\ +~\xfb\xc1o\xb5\xb5\xd6\xc6&>\xe1\xa7\x80\x15\xe1$\ +v\x0f\x14\x11\x82I\x80P\x96\xf1,!\xfcT\x9d8\ +\xfd\x9a\xe9,\xbam\x11\xd1Q\xd1A\xb7\xc5uuu\ +|u\xe2+\xaa\xeb\xaa\xa9\xaa\xab\xa2\xaa\xb6\xaaO\x0f\ +02z$\x93S'3{\xeal\xa6\xa4N\xe1\xda\ +\xa9\xd7b\x8a1\x05\xdd)\xcd/\xcbg\xcd\x865\x0e\ +\xb3\x00\xd0\xcdq*Y\xcbQ\xca\x11N\xe2\x80\xf4\x14\ +\x82E\x80P\x96\xf3:\x06\xeeS'.X\xbe\x80Y\ +\xdf\x9a\x15T\xc1\x97\x94\x96P|\xb8\x98\xa2\x92\x22Z\ +\xdbZ\xfb\xbb~\x14\x22\xdc4\xeb&\xe6N\x9b\xeb\xf5\ +Yt\x13\xc4\x936\xb0s\x89F\x9e\xe4s\xde\x01.\ +!z\x0a=\xfd\xf9|\xc1 \x80\x8b\xf0#\x22#X\ +~\xffr\xc6O\x18\xefV\x90J\xf4\x0e'\xf5\xeeA\ +\xf0\x15'+8p\xe0\x00%\x87K\x06D\xe8\x9e`\ +\x8c6r\xd3\xac\x9b\xc8]\x9aKFZF\xc0\xddJ\ +5A\xde\xdf\xff>k6\xac\xd1\x06\x92\xac\xfc\x8a<\ +6\xa05\x09\xfd\x82\xbe\x12\xc0\xad\xf0W\xac]Ab\ +Rb\xc0\xfdrI\x12\x95St\xa0\x88\x1d;v\xd0\ +\xd4\xd4\xe4\xb3 \xa6\x18\x13\xe6t3\xe6t3\xa9c\ +R1\xa7\x9b\x01\x98\x9f9\xdf\xeb\xef\x8a+\x8b\xb1\xb4\ +X\xa8\xaa\xaf\xa2\xba\xbe\x9a\xe2\xaf\x8b)\xae,\xd6\xaa\ +g7HNH\xe6\xc7\xab~\xcc\xcd\xb3o\x16f\xa2\ +\x0f~BIe\x09k6\xac\xa1\xb8\xb2\xd8q\x83v\ +\xfe\xc1N\x1e\x01\x9a\x11\xdd\xc5~\xe9*\xf6\x85\x00.\ +\xc2\x0f\x8f\x0cg\xf9C\xcbIHJ\x08H\xf0\xf2\xb9\ +C\x07\x0f\xf1\xd9\xce\xcf\xb8\xd0t\xc1k\x01V\xceY\ +\xc9\xbc\xe9\xf3\x98\x9f9_\x11x\xb0`i\xb1\x90W\ +\x96G~i>yeyZ\xe1\xa8`\x8c6\xb2\xe6\ +\x965<\xb4\xf4!bcb\xfb\xe4 \xae\xd9\xb0\x86\ +\xf7\xf6\xbf\xe7\xc8\xbc\x8d\x0f9\xc2\xcf8E5\x82\x04\ +Aw\x0e\x03%\x80[\xe1/Y\xb3\x84\xf8\xa4x\xff\ +\x06gT\xe7j*jxo\xf3{X\x9a,\x1eo\ +\xbcr\xceJV\xcc]\xc1\xca9+1\xc5\x98\x82Y\ +\x17^QU_\xc5{\xfb\xdfc\xe3g\x1b\xdd\x92\xc1\ +\x18m\xe4\xc1[\x1e\xe4\xa1[\x1e\x226:6`\x07\ +\xf1\xc1\x0d\x0f\xf2\xfa\xae\xd7\x1d\x19ws\x9cb\xbe\xcd\ +i\xaaq8\x87A#A \x04\x08a)k\x09\xe3\ +E9!<2\x9cE\xb9\x8b\x88K\x8a\xd3=8\xa3\ +\xd8\x7f\xc9@W{\x17\xdb6o\xe3X\xf91\xb77\ +4\xc5\x98\xc8]\x98\xcb\xa3\xb7=JZbZ\xbf\x08\ +\xd8\x1fT\xd5W\xb1\xe1\x1f\x1bx}\xd7\xeb.\x83@\ +\xc6\x18#\xeb\xee\x5c\xc7\xda\xa5k\x03v\x10\x7f\xf7\xe1\ +\xefx\xec\x95\xc7\x1c\x99vs\x82C\xdc\xcd\x19\xaa\x10\ +\xcea\xd0H\xe0/\x01\x0c\xdc\xcc\x22\x22\xd9.'\x84\ +E\x86\xb1\xf0\xbb\x0b\x19\x9d4:\xa0~s\xc5\x91\x0a\ +>\xde\xf21\x1dm\x1d.73\xc5\x98Xw\xdb:\ +\x1e\xbd\xf5\xd1\x01m\xedzai\xb1\xf0\xfa\xae\xd7\xd9\ +\xf0\x8f\x0d.>\xc3\xb4\xb4i<\xff\x7f\x9e'3-\ +3 \x07q\xd3\xaeM\xac\xf9\xdd\x1aG\x86\x0e\x12T\ +\x22H\x10\x14s\xe0O$Pb!\x13\x89f'\xaa\ +\xd0\xee\x9c;\xe6\x10\x9f\x16\xef|\xa5\xb7\x5c\x14\xec\xdc\ +\xb2\x93\x82\x1d\x05\xf4t\xbb\xf6t\xd6\xdd\xba\x8e\xadO\ +me\xc9\xcc%D\x86G2\x14\x11\x19\x1e\xc9\xdc\xc9\ +sYw\xdb:\xd2\xc6\xa4\x91_\x96O{W;\x00\ +\x0d\x96\x06\xfe\xf7\xd3\xff\x15u4m\x8e_\xf5\x02`\ +\x9e`&-1\x8d\xf7\xf7\xbf/\x12\x0c\xc4\x11\xcfT\ +*\xd8\x89\x10~P\x06\x92\xfc!@\x18\x19\xbc\x8b\xc4\ +$9a\xf2\x0d\x93I\xbb&M\xb9\xc0.\xe9\x8b\xbd\ +w\xb6w\xb2\xe5\xc5-T\x9f\xa8v\xb9\xc9\xfc\xcc\xf9\ +l}j+\xb97\xe6\x0eY\xc1\xbb\x839\xdd\xcc\x0f\ +\x97\xfc\x90\xa8\xf0(\xf2\xca\xf2\x94\xf4}G\xf6\xb1\xe3\ +\x8b\x1d\x98'\x9aI0%\xb8\xfe\xd0K\x18\xda<\xc1\ +Lzb\xba\x83\x04\xa1\xa42\x9e+\xf9\x9a]h'\ +\xa5\x06\x0c\xbd\x04\x08\xe9\x8d\xf2)N\xdf\x98Ic\xc8\ +\x5c\x9a\xe9\xf9!\xdc<\xa0\x1d;Mg\x9a\xd8\xf2\xc7\ +-\x5c\xb4\x5ct\xb9\xf4\x99{\x9e\xe1\xb5G_c\xec\ +\xa8\xb1}y\xa6ACdx$\xf33\xe7\x93{c\ +.%\x95%\x8aYh\xb04\xf0A\xe1\x07$\xc4&\ +05u\xaa\xe7:s\x93\x965!\x0b\x09\xc91\xcf\ + \x8cI$3\x96J\xf6\xe2\xd0\x02\x01\x93@\x0f\x01\ +$\x161\x8bp\x94q\xcd\xd0\xc8Pf\xdf7\x1bC\ +\x98\xc1\xdb\xaf\x5c\xd0t\xb6\x89\x8f^\xfb\x88\xce\xf6N\ +MzZb\x1a\xbb\x9f\xdb\xcd\xdd\xd7\xdf\xddw)\x0c\ +\x01\x98bL\xe4\xde\x98\x8bi\x84\x89\xfd\xc7\xf6\xd3\xde\ +\xd5NGW\x07;\xbf\xd8Isk3\xf3\xb2\xe6i\ +\xaew\xab9U\xf57/s\x1e5\x0d5\x94T\x96\ +\x88\x84p2\x89\xc3J-GpLB\x0d\xc8\x1f\xd0\ +C\x8002\xd8\x86\xc4\x189!ku\x16\xd1q\xd1\ +\xee\xaf\xf6\xc0\xec\x0bg/\xb0\xf3\xf5\x9d.\xc27\xa7\ +\x9b)\xfcu\xe1\x90\xf0\xee\x83\x8d\xb9\x93\xe7r\xf7\xf5\ +w\x93_\x96\xcfY\xcbY\x00\x0e\x9d8Dyu9\ +7d\xdd@Dx\x84\xae\xfa\xb3c\xe7\xb69\xb7\xb1\ +\xa7|\x0f\xd5\xf5\xbdf3\x92\xd9\x84QD\x03g\xe9\ +\xc3T3_\x040\xb0\x94'4\xaa\x7f\xfa\x18\xae\x98\ +}\x85k!\xbd\xb0\xd8r\xd6\xc2\xae\x8d\xbb\x5c\x84\x9f\ +\xbb0\x97\x8f\x9f\xf9xX\xd9z\x7fa\x8a1\xf1\xc3\ +%?\x14Q\xc6\xde\xf8A\xc5\xe9\x0a\xf2K\xf2Y\x9e\ +\xbd\x9c\x88\xb0\x08M]\xb9E\xef\xb9\xdb\xe6\xdc\xc6'\ +\x87>\xe1\x9c\xe5\x1cH\x84\x13\xcb\xf5X\xd9NK\xe0\ +\x83G\xde\x08 q-\x89\xc4\xf27z\xbd\xfe\xd0\x88\ +P\xa6\xde5\x15C\xa8A}\x95\xc7\x02\x03\xb44\xb7\ +\xb0\xfb/\xbb\xe9j\xef\xd2\x5c\x92\xbb0\x97\xd7\x1e}\ +m@\x840\x14\xb0r\xeeJ\xd2\xc68\xbc\xfa\x06K\ +\x83 A\xcer\xc2\xc3\xc2\xdd\xff\xc8\xa9n#\xc3#\ +\xb9v\xf2\xb5\xbc\xb3\xf7\x1d:\xba:\xc0\xc0\x08\xe2\x99\ +L\x05;p\xbc\xad\xe4\x17\x09B\xbc\x9e3\xf3\x0b\x0c\ +\x5c/'\xa4\xde\x9c\xca\x88\xa4\x11n\x0b\xe7.\xad\xab\ +\xbd\x8b}o\xed\xa3\xb5Y;\x80\xf3\xdd\x85\xdf\xe5\xb5\ +\x1f\xbf\x86$\x0d\xf6k\x09\x03\x0bs\xba\x19\xf3\x043\ +;\x8av\xd0\xde\xd5NC\xb3\x83\x04\x11a\x11n\xed\ +\xbf\x82\xde\xb41\xa3\xc60v\xd4X><\xf0\xa1H\ +\x08%\x95Dl\xd4p\x88\x00\xa6\x97y\x22\x80\xc4|\ +&\x12\xe5p\xfc\xc2\x8d\xe1\xa4-MST\xbd\xbb\xc2\ +9\xa7\x95}\x5cF\xc3\xd7\x0d\x9a\xe4\x07\x16<\xc0_\ +\xfe\xef_\xb4\x97z B\xd5\xc5*\x8a\x9b\x8a\xa9\xba\ +T\xc5\xc6\xe3\x1b\xb1tZ\x98b\x9a\xd2O\xe2\x19\x18\ +LI\x9e\xc2\x92\x99K\xf8[\xc1\xdf4$X\x96\xb3\ +\xcc\xadO\xe0\xce\xb4\xceH\x9fAie)\xc7O\x1d\ +\x17\x17E0\x9dn\xf2\xb9@\x13\x0e\xa7P\x17<5\ +\xc1P\x96\xb1\x91\x10\xee\x95\x13&\xac\x9e\x801\xc5\xe8\ +5\xc4\xab\x0es\xd6\x1d\xac\xe3\xd8\xa7\xda\xd0nVZ\ +\x16\x9f>\xfb)\xa6\x18\x93\x98\x99\xd3+\xf8\xfc\xb3\xf9\ +<\xfb\xe5\xb3\x147\x16c\xe9\xb4x-\xf0\xba\xe9\xeb\ +X\x9f\xbd~0e\x18\x14\x14W\x16\xb3\xe0g\x0b\x94\ +P\xf2\x9cisx\xeb?\xdf\xd2=f`m\xb1r\ +\xdd\x13\xd79\xdeT\xea\xa4\x84\xed\xdc\x0d\x9c\x03.\xa2\ +s\x08\xd9\x9d\x06\x90[\xffKrBtr4\x09\xd9\ +\x09\xea+\xed=\xed>\x0b\xfc\x95\xe5+\x9e4?9@\ +b\xea?\x8c\x1d5V\xa3\x09N5\x9c\xa2\xae\xa1\x8e\ +\x9bf\xdf\xe4z\xb1\x9b\xfa\x8e\x0c\x8bdF\xfa\x0c\xde\ +\xda\xfd\x96H\x08a,\x09\xd8\xa8\xa1\x08\x87?\xe0\xd3\ +\x14\x18\xdc\xa6E\xf3\xa8:\xc1t\xb5\x89\x1e{\x0f=\ +\xf4\x88Ow\x87\xea\xdc\x91mG\xe8n\xd7\x12p\xf3\ +\x13\x9b1F\x19\xb1\xdb\xed.\x87?\xb0tZx\xaf\ +\xea\xbd\x01\x14U\xff\xc1\x9cnf\xebS[\x95\xff\xdf\ +\xdd\xf3.[\xf2\xb7\xb8\xadSw\xf5\x9d3-\x87{\ +\x17\xdc\xeb\xc8\xd0\xc4C\xc43\x1e\x88\x01\xc2\xd01\xd6\ +\xe3J\x80k\x89Ww\xfbB\x8d\xa1D]\x19\x85\xcd\ +n\xf3)\xf8\x1e{\x0fgK\xcf\xd2\x5c\xd3\xac\xc9\xf2\ +\x91[\x1e\xe1\xfai\xd7\xbb\x15\xbe\xddn\xc7\xd2a\xf1\ +\xab\xe2\xde\xafz\x7f\xb0e\x174\xcc\xcf\x9c\xaf\xe9\x0d\ +=\xf9\xe2\x93\x94W\x97k\xea[S\xf7N\xf5\xfd\x5c\ +\xees\xc4\xc6\xf4\xbera \x063O\x01FD\xcf\ +\xcd\xe7\x12@\xce&\xc0\xc0t\xbeC(\xab\xe4\x84\xd8\ +9\xb1D\x8cu\x1f\xb0\xb0cW\x9c\x13\x09\x89\xee\x8e\ +n*>\xac\xa0\xa7\xc3\xe1\x83\xa4&\xa4\xf2\xde\x93\xef\ +\xb9\xbd\xb9\xdc\xfa\x1f)|\xc4\xafJ\xab\xbaXuY\ +\x98\x01\x19\xe6t3\xcd-\xcd\xec;\xbe\x0f\x80\x82\xc3\ +\x05\xac\xb8a\x85#F\x00\xee\x03D\x92\x9d\x88\xb0\x08\ +\x22\xc3#\xd9U\xbcK$\x86q\x15\x06\x0ep\x9e\xd3\ +8z\x05\x1e\xe1\xcc\x90\x10B\xf9\x91:!jj\x94\ +\xc7\x16/3\xd3\x86\xf8<\xfb\xe5Y:\x9a\xb5\xc3\xba\ +/\xfe\xe0E\x8f-?\x10\x13\x00\xc2\x0c\x147\x16\x0f\ +\x8a\xb0\xfa\x0b\xeb\xd7\xaeWf5\x9dj8\xc5O_\ +\xfa\xa9g3\x80\xa3\xfemv\x1b\xdf\xbf\xe5\xfb\xa4$\ +\xa8^\xb7L\xe5\x09\xc4\x9bXQ\xf8\x08\xf6\xa9\x09 \ +q=Wa SN\x88\x9a\x1a\x85=\xcc\xee\xb3 \ +=\xf6\x1e:\xdb;\xa9\xff\xb2^\x93\xf9\xf2k\x96s\ +\xdd\x94\xeb\xbc\x0a\xdf_\xf5/#\xeft\xde`\xcb,\ +\xe8\xd8\xfa\xd4V\xc5I\xfe\xec\x8b\xcf\xf8\xe4\x8bO\xb4\ +\xf5\xecE\x06?\xcf\xfd\xb9#\xa3p\xb2\xc8b\x010\ +\x02\x08\xc7\x8b/\xa0%\xc0\x08V\xa8O\x86\xa5\x87\xd1\ +C\x8f\xab\xfdwS\x90\xa6\xf2&\x8d\xea\x07\xf8\x9f\xfb\ +\xfe\xc7g\xeb/n*\x0e\xa8\xb2.'?@FZ\ +b\x9a\xc6\x1f\xf8\xc5\x9b\xbf\xc0\xd2b\xd1\xe5{-\x9e\ +\xbd\x98\x9c\x0c\xd5\xf2Ic\xf9>\xc2\x17\xf0\xaa\x05\xd4\ +\x04\x08Q;\x7fR\x84DhZ\xa8\x10~/\x09l\ +\xd8\x14\xb5\xa3\x98\x80\xde\x824\x165j2\xbe\xf7[\ +\xf7\x92\x12\x9f\xa2\x08\xdaf\xb3\xb9W\xff\x01\xcei\xc9\ +;\x93\x17\xb0\x09\x19\xcaX9g%+\xe7\xac\x04\xe0\ +t\xc3i6m\xdf\xa4\xd4\xb9Z\x06\xee\x1c\xc4\xb5\xb7\ +\xacud\x14\xc1\x0c\xb2\x98\x87\xe8\x11x\xd4\x02\x0e\x02\ +\xcc\x22N\xad\xfeC\xd3B\xbdvCd\xbbo\xb3\xdb\ +\xb8Xq\x91.\xab6\xd6\xff\x83\x9b\x7f\xe0\xb3\xf5\xdb\ +\xedv\xaa.U\x05\x5cYy\xa7/O\x12\xac_\xbb\ +^1\x05\x7f~\xf7\xcf\xd46\xd4\xba\xc8B\xd3\x10{\ +Iq\xf3\xac\x9b\xb5\xbe@\x22\xf7\x02#\x11=\x02\xb7\ +Z\xc0\xa0|\xc6q\xbb\xe6\xc48\x83.\xd5\xd3c\xef\ +\xc1zD\xbb\xc2\xd6uS\xae#3%S\x17\x01\xaa\ +/U\x13(\xd4\x04\xb8\x9c\x88\x90\x96\x98\xc6\xba\xdb\xd6\ +)\xff\xff\xf9\xdd?\xeb\x96\xc5\xba;\x1d\xbf#\x8a\x1c\ +R\x99\x04D\xe3!.\xe0 @\xa8c\xd0\x07\x80$\ +|\xde\xac\xc7\xdeCW{\x17\xad\x15\xda\xc1\x9e\xbbs\ +\xee\xd6%\xfc\xbe\x98\x00\x10!\xe4`\xf5,\x86\x1a\x1e\ +\xbd\xd51\x03\xfa\x83\x82\x0f\xa8k\xa8\xd3\xe5\x0c\xae\x9a\ +\xb7\x0ac\x8cj\x81\xb5\x09|\x07\xe1\x0cF\xe0&.\ + '\x84 1CI\x1d\x09\xb6\x116\x17\xbb\xef\xce\ +\xfe\xb7~\xad\x15~lt,K\xaf^\xaa\x9b\x00\x87\ +/\xb8YhI'\xf2\xcf\xe4\xfb&\xd80\x85)\xc6\ +\xc4\xd3\xf7<\xad\xfc\xff\xd2\xd6\x974\xf5\xef\x8d\x0c\xab\ +nX\xe5\xc8(\x86\xc5\x08\x02D\x02\xa1\xce\xf7\x11\x04\ +\x98\xc9h\x0cd(\xa9Ix\xef\x7f\xaa\xec\x7fG\x9d\ +\xb6\xdf\xbf\xc4\xbc\x84\x91\x91#\xbd:~\xea\xa3\xb9\xab\ +\x99\xbe\xe0r&A\xee\xc2\x5cE\x0b|X\xf0\xa1\xa2\ +\x05\x9c\x1b\xa4\xb3\x83\x98\xbb4\xd7\x91\x89\x81\x18\xe6p\ +'\x0e3\xa0\xd1\x02b\x81\xe5\xd1\x5c\xad\xb9\xf3H\xbc\ +\x86\x1f\xd5i\x1d\x95Z\x02\xe4L\xca\xf1*\x0cgR\ +\xf4uf\xbbl\x06\xf4\x90m8B\xad\x05\xde\xde\xf1\ +\xb6._ )>\xc91\xf9\x14\xc0\xc8\x0d8\xb4\x80\ +\x0b\x01\x0c\x84b\xd6\xdc5I|\xd8\xb1{\x8d\x01t\ +Y\xbb\xb0wh+vq\xd6b\xdd\xea\xdfn\xb7S\ +j)\xedS\x05\x954\x95\xf8u\xbf\xe1F\x04\xf5+\ +p\xdb\xf6n\xd3\xe5\x97\xf5\xd8{\xb8\xfd\x06\x95O\x1f\ +E6\xa3\x19\x83\x1b3 4\x80\xc4x\xcd]\xe3\x1c\ +_e\x12\xa8\xfb\x9f\xf2g\xd7)m\xd7/#9\xc3\ +\xe3\x88_\x7f\x99\x80=g\xf7\xf8M\x80\xe1D\x04S\ +\x8cI\x89\x0b\x5cj\xbd\xc4\xb6\x82m\x8a\x09\xf6\xa6\x0d\ +\x16\x5c\xb3@\x9b\xd1U,B\x04\x85\xc2Qi\x01\xa1\ +\x01B\x98\xae\xb9\xd8\xcd\x145g\xe1\xdb\xec6z\xce\ +k#\x7f\x19)\x19~\x0b!36\x93\xbe\xa0\xb9\xb3\ +\x99\x92F\xff\xb5\xc0p\x22\xc1\xa3\xb79F\xe7\xf7\x1c\ +\xda\xa3\x89\x03(N:Z\x07ql\xfcX\xa6\xa4\xaa\ +fO\xc5r=\x1e\x09\xa0\xd6\x00q\x9e\x0bb\xc7i\ +\x5c\xa0\xd1\x89\x00\xc9\x0e?\xd2W\xc5\xcb6;6,\ +\x96\xbeb\xcf\xb9=.\xf9^ND0\xa7\x9b\x15g\ +po\xd1^\x9a[\x9a=\xfaej\xa7p\xd6T\xd5\ +\x1a]\x11LG8\x82\xe1\xa8\xcc\x80L\x80d\xe5\xc2\ +p\xdf\x05\x92\x99f\xbf\xa8\xad85\x01d\xf8\x12J\ +Jt\x8a\xef\x1b\xfa\xc0\xe1\xa6\xc3~9\x9e\xc3\x91\x08\ +\xb2\x19\x00((*\xd0\xe5\x0b\xcc\x9f9\xdf\x91\x81\x81\ +\x18&\x92\x89\xc3\x0f\x90D\xb2st(\xc2WQ\x04\ +\xec\xd8\xc5\xcc3\x15\x92\xe3\x92=_\xef\xa1\xc2\x93\xa3\ +\x93\xe9+\xd4\x1a X\xc7P\xc3wo\xfc\xae\xf2\xbd\ +\xf8X\xb1g\x1f@E\x8a\xab\xa7h;w\x8ce>\ +B\xc2\xa1\xf4\x9a\x01\x03\x0b\xc8\xd2\x5c\x14G\xc0H\x89\ +\xf3\xde\x9a\xddj\x80\xa8\xbek\x80\x9a\x96\x1a\xaa/U\ +_\xd6$0\xa7\x9b\x95\xde@\xc9\xb1\x12\x8fA:g\ +\x07\xf1\x9a)\xd782\x89\xe4J\x9c\xfc\x00\x03!\x98\ +\x02*\xd1\x99\xc0\x1fF\xa3\x01\xa2\xfa\xae\x01\x00\x0e_\ +8\x1ct\x02\x0c5\x22\xc8\xeb\x1d\x9d;\x7f\x8e\xd3\xe7\ +O{\x9d\xa8#\x93a\xe2\xf8\x89\x8e\x0c\x84\x1f\x10\x81\ +\x08\x08\x85\x00\x18\xb0\xf9\x9e7\xa6\x07\xd9\x93\xb2\xfd\xfe\ +M0\x09Pp\xae@\xb7\xe39\x5c\xfd\x03\xf3\x04\xb3\ +\xf2\xfdd\xcdI]\x13u\xae\x1a\x7f\x95#\x03\x031\ +$\x93\x8a\x86\x00\xf6\xc1\xdd5$X\x04(\xb5\x94\x06\ +,\xd8\xe1\xa2\x11\xe6e:\xde*\xae\xa8\xad\xd05:\ +8&~\x8c6\x93X\x92\x11& \x040\x0c\x89\x8d\ +#3\x8c\x19}\xceco\xfd\xde~\x13\xf8P!\x81\ +z%\xb4\xb2ce\xae\xb1\x0073\xb7gL\x9e\xa1\ +\xcdD\x84\xfd\xe5\xae\xa04$\x08\x10\x8c\xae @A\ +\xbdo30\x9c\x89`\x8a1)\x8e\xe0\xa5\xb6Kn\ +[\xbc;Rh\x10\xc6\x18\x84\x09\x08\xe5r\xd2\x00\x00\ +\xa5\x17J\x83*\xdc\xa1\xe8\x1f\xc8Z\xa0\xaa\xb6J\xf7\ +$\x91\xac\xc9\xaa\x8e^(cq\xf8\x00\x06\x03\x92\xd3\ +x\x5c\x87\xde\xa2\x04\x0f\xd3\x8c\xd3\x82\x92\xcf?\x1b\xfe\ +\x19\xb0`\x83\xe53\x0c$|\x06\x83z\xd340(\ +o\x0d\x85\x00\x92\x81\xb3hgd4\xea\xbc\xbbS\xbc\ +\xa0\xf0xa\xc0\x0f\x12,\x13\xa0\x97\x00\xc3\xd9,\xa8\ +\xfd\x80\xf2\xe3\xe5.\x93D\xdd\x91!1.\xd1\x91A\ +8i\xf4\xb6~@2p\x04K@%\xd1\x112\xd6\ +\x8b\x0cc\x06\xc6\xb0\xbeo\xfd\xdb\xdc\xd5LMK\xcd\ +\xa0\x13\xa0?\x89`\x1aaR\xbe;\xcf\x0ev\x0e\x0c\ +\xc9\x93w\x12\xe3\x13\x9d\xb3\x91#\x81\x92\x01\xe7\x15%\ +\xf4j\x00\x10\xf3MU\xa8m\xac\x0d\xf8\xc1\x82\xe5\x07\ +8k\x81\xfe\xea\x0e\x0e\x05\xff\xc0ez\x98\x9b\x81!\ +\x99\x1cN\x90w_\x97B\x01\x1b=\xec#\x84\xb9\x80\ +x\x9bL/F\xa0\x19\x0f\xa8k\xac\xf3\x19\x0e\xf6\x84\ +\x9c\xb8\x1c\x0a\x1b\x037#2\xca\x9a\xcb\xfa\xb5\xd2\x9b\ +;\x9b9|\xe1\xb0\xb2\xb6\x81\xb2\xb8E\xef\xf67\xca\ +\xa7\xea\x9c$IX:-\x944\x96\x04t\xcf\x15i\ ++0\xc7\x99]\xd2e\xc1\xdb\xd5\x7fR/\xf1\x9c\xfe\ +\x9c \x13\x80P\xdcmV\xd4\x88\xbe1\x8184!\ +\xe1\xc2\x13\x85\x01E\x04\x01\xb2\xe3\x02\xfb\x9d3>>\ +\xf31\xb5\xad\xb5\xcaD\x13Y\x18\xce\xe1\xae\xe6\xaef\ +\xca,eA\xb9g\x7f\xe3\xb7\xa5\xbfe\xf7\xad\xbb]\ +H \xabzo\x82\xb7\xf7N\xe8\xf1\x04A\x80n\x0a\ +\x09\xc1!\x81\x8b\xe8'\x80\x0a}1\x01\xc1\x22@m\ +k-\xb5\xad\x81\x97c(\xc2\xd2iaC\xe9\x06^\ +\x9b\xaf]TK\x9e\x99m\xb0\xbb\xf6\xe6\xed\xbd\x9br\ +a\xc7\x9d\x06P |\x80\x1e\xb4og\xf8\xde\x9fA\ + \x88=\x01\x80%c\x97\xf4W\x1d\x0e{<:]\ +\xcc\x0a\xb2\x5c\xb2(i\x1e\xa7\x869\xbd\xcf\xe9\xcd$\ +\x0a\x02t9\x11\xe0\xb4\xceR\xc5\xa1\xe9\x0d\xd46\xd6\ +bm\xb3\xea\xfc\xb1+\x82\xa5\x05.7\xacL[\xa9\ +\xa8\x7f\xf5^\x05\xa6Q&]\xb1\x00\x9b\x97\x95\xe3\x04\ +\x01\xf2\xd1nx\xebOO`\x9c\xf6\xdf\xed\xc5\xdb\xfd\ +\xf8\xb1\x16\x8b\xc7.\x1e\xa0*\x1d>x\xe6\x9ag\xd8\ +z\xf3V\xb7\xe7\x14\x02\xf8\x18\x11lhl\xf0\x98\xbf\ +\x01\xe1\x00vc\xe3\xa8\x92\xda\x89~\x12$i\xff-\ +<\xd1\x87\x80PTJ\xd0\xba\x83\xc3\x1d\xe683\x87\ +V\x1d\xe2\xe9k\x9e\xd6\xa4\xcb\x1a **\xca\xfdK\ +\x22\xaa\x97vd3\xa0\x87\x00=t\xf3\xb9\xe6\x8c\xde\ +\x09\x1f\xa9\xda\x7f\xfb\xa2\x01\x00V\xa7\xac\x1e\x80\xea\x1d\ +\xba0\x85\x9bX\x9f\xbd\x9e\xa2;\x8a\x5c\xbc~K\x8b\ +EYV.i\x5c\x92\xcf\x95[d\x82\xf8r\x02\x01\ +z\xe8`\xaf\xe6L\x95\xce\x12\x8fD\xe3\x0cZ\xdb\xac\ +l/\x09\x9c\x04\xab\x93\xbf\xb9\x04x`\xe2\x03\x9c\xfc\ +\xf6I~\x9c\xf1c\xb7A$\x8d\xfd\x1f\xadO\xfd\xf7\ +\xd8{\xa8\xadS\xf5\x8al\xb4\xa2ZX\xda\xa0$\x9f\ +r\xf2\x03\xce\xa0?(4I\xfb\xef;\x85\xef\x04\x5c\ +\x09\xc60\xe37N\x0b\xdc\x7f\xd5\xfd\x9c\xb8\xeb\x04\xaf\ +^\xff*\xb1a\xb1\x1e\xa3\x89\xca\x9e\x01\x88\xedx\xf5\ +\x8c\x04\xf6\xd8{\xb4{-vR\x85c\x8f\x01\xbb\x83\ +\x00\xc7i\xd4\xf8\x01\xa0_\x0b8\x11`{\xc9\xf6>\ +\xc5\x04\xbe\x09Z 6<\x96\xfb\xaf\xbc\x9fc\xab\x8e\ +\xf1\xf2u/3>f\xbc\xcf\x90\xf2\xa1\xaf\x0f)\xbf\ +OLJ\xf4:!D\xfe~\xec\x84\xd3F\x5c6Z\ +p,*\xad\x22\x00t\xd1\xcef\xcd\xc5z\xd7n\x08\ +\xc7U\x0b\xec\x0b\x5c\x0bd\xc7e\x07m\x84p\xa8!\ +5&\x95_\xcd\xfa\x15Go?\xcaK9/i\x04\ +\xefk\x98Z\xad\x01R&\xa4x\x9d\x10\x22\xdb\xff\xf3\ +M\xe7\xb5\x05h\xa3\x12\xd5v3\xea\x10R7\x8d|\ +\xa0\xb9\xb8\x8a\x80\xcd\xc0\xcb\x9f\xbd\xdc\xa7\x98\xc0\xe3\x93\ +\x1e\x1fX\xc9\xf4#b\xc3c\xb9/\xfd>>\xba\xf1\ +#\xcaV\x94\xf1\xf0\xe4\x87=\xaazOG^i\x9e\ +\xe2\x00\x8e\x9f0\xde\xe7\xbb\x81\x8a\xfd?\xe5\xa4\x89;\ +\x94\x0d&zPi\x00\x80\x1e\x0eq\xd2\xc5\x0c\x1c\xd7\ +\xf9\x94Ih\xba\x84\xd66+\xaf\xecz%\xe0J[\ +\x9d\xbc:(C\xc4\x83\x89eW,\xe3O\xd7\xfe\x89\ +\x9a;j\xf8\xd3\x9c?\xf1\xad\xc4o\x05<\xfa\xa8l\ +\x1c\x05\x5c5\xed*}\xf6\x9f\x1e*NVh\x0b\xd5\ +D\x05\xaa\xbd\x05\xd4\x04\xb0#\xcc\x80Vw\xfb3^\ +\x12d-\xf0\xbd\xf4\xef\x0d\xa0\xb8\xfa\x8e\xd8\xb0X\xee\ +I\xbd\x87M9\x9b\xa8\x5cQ\xc9\xa6\x9cM\xdc\x93v\ +OP\x86\x9f\xdf\xc8{C\xb9O\xfa\xb4t\xef\xf6\xbf\ +7\x16\xd0\xd2\xda\xc2\xe9SNa\xdd\xaf9\x8e\xd0\xeb\ +\x1e\x08P\xc9&\xcd\x0f.\xa2?&0\x09\x97.a\ +_\xb4\xc0\xda\xf4\xb5C^\x0bd\xc6f\xf2\x93)?\ +a\xd7\xc2]\x9c\xbc\xf5$\xbf\xbb\xe6w,MZ\x8a\ +1\xcc\xfbk\xf2\xfe\xcc'x\xff\xc0\xfb\x8a\xfa\x8fO\ +\x8ag\x84i\x84{\xfb\xef\xf4\x0a\xbfK\xebo\xe7\x08\ +B\xf8\xca\xc6\x12\xcek\xc6\xf4PA=\x13y\x97p\ +\xeePR\xcbp\x89\xf8yD6\xf0\xa1\xe3\xdf\x97?\ +{\x99\xbb\xe6\xde\x15\xd0<\x01c\x98\x91\xef\xa5\x7f\x8f\ +\xe7\x8f??\x982\xd6 \xc3\x98AN|\x8er\xc4\ +\x86\xc5*\xe3\xfe\x9e\x06]\xecv{\x9fvG\xf9\xc3\ +\xb6?(\xdf\xa7\xcc\x9c\xa2o\x0e\x80d\xe7\xeb\x8a\xaf\ +\xb5\x19\xb5P\x8e\x98\xf5)k\x00\x17\x02\xd8\x80N.\ +\xf1\x16\xa3U\x04\xa8Bh\x82\x91\xf8\x86\xec\x0b\xf4j\ +\x0dk\x9b\x95g\xdey\x86W\x7f\xf8j@\x0f\xbf6\ +}-/W\xbe\x8c\xb5+pS\xd2\x17d\xc7e\x93\ +a\xcc ;.\x9b\x9c\xb8\x1cE#\xc9\x1b^\xf4\xf7\ +\x1c\xc0\x9a\x86\x1a\xf6\x1c\xd9\x03\x88=\x9a'^=\xd1\ +A\x00\x0f\x82\x97\xd3\xbe*\xfbJ\x9bY\x13%@;\ +\x82\x006p\xb3j\x14\xd0\xcd^v\xb3\x8c\xaf\x08\xc1\ +\xb1\xc2@\x110\x0f}\x98\x07\xfc\xd5\xf1\xef\xf6\x92\xed\ +l/\xd9\xce\x92,\xff\x87{\x8daFV'\xaf\xe6\ +\x95\xca\xc0M\x89?\xf7\xca\x89\xcbQ\x04\xeemtR\ +V\xcf\xfd\xbd\xef\xd1s[\x9eS\xbe\xa7NM%4\ +\x22T\x8c\xee9\xf1N\x16<\x88\xf1\xffs\xa7\xcfa\ +\xb9`\xd1^t\x94\x22\xa0\x0d\xd5\xb62\xee\x08\xd0\x03\ +\xb4\xd3\xca+\x8c\xe47J\xeaq`&\xfa\xb4\xc0H\ +\xe0\x1a\xe0KG\xd2c\x1b\x1f#\xe7\xb9\x1c\x8cQ\xfe\ +\xdb\xf4%c\x97\xf4\x0b\x01R\xa2S\x14Ag\x183\ +\x02\x1a\x88\xea\x0f\x0d \x13\xebp\xf5a\xde\xdc\xf3\xa6\ +\x92\x9e5?\xcb\xa3\xfa7\xa8^\xf14`\xa0\xe4\x0b\ +\xa7\xe9g-|\x81P\xff\xed\xa8\xb6\x98sG\x00\xe1\ +\x0c\xeef#\xcby\x1c\x83j\xc07\x1fX\xae\xf3)\ +f\x22LG\xef\xa8\xa2\xb5\xcd\xca\x83/>\xc8\x96\xc7\ +\xb6\xf8]!\xc1\x1a!T\xb7l\xb5:\xef+\xfa\xcb\ +\x0c\xfc\xfb\xa6\x7fW\xbeO0O \xca\x14\xe5]\xfd\ +\xabHq\xe2\xc8\x09mf\x17\xd8\x8fh\xfd\x1d\xa8\xb6\ +\x93\x09\xf5po\xa1\x05.\xf1[\x8c\xfcJI=\xd3\ +{\xe8u\x08\xe7\x01\xef:\xfe-<^\xc8\x0b\xdb^\ +\xe0\xf1e\xfe\x05y\x8caF\x96\x8c]\xc2\xf6\xb3\xfa\ +\x06\x99R\xa2SH\x8eJ&%:\x85\x94\xa8\x14\xa6\ +\x19\xa7\x05U\xe0\x9e\xe0\x8b\x08\xeeL\x86'3\xb2\xed\ +\xcbm\xec=\xea\x18\x9f\xcb\x98\x97!F\xf6|\x08\xde\ +n\xb7Sq\xa4\x02\xeb\x05'\x9f\xe9$\x05@+\x0e\ +\x02\x00\x9e\x09 \x9c\xc1<^g9\xeb4Z\xa0\x10\ +T\xee\xa1w\xc4!z\x05\xaa)\x02\xcf\x7f\xf8<\xd3\ +\x92\xa7\xf9\xed\x0f<>\xe9q>o\xfc\x1ck\x97U\ +y\x8f \xc3\x98AlX,\xc9\xd1\xc9\xa4D\xa5(\ +\x9f\x83\x8d\xbe\xfa\x07\xcd\xad\xcd<\xfc\xf2\xc3\xca\xff\xd3\ +\xe6MSZ\xbf\xc1\xcd\xdb\xfc\xce\xf6\xff\xd0?\x0fi\ +/h\xe1\x0b\xac\x9cG\x10@q\x00\xc13\x01@\xb0\ +\xa4\x8dF\xfe\x8d\x04\xdeVR\x1b\x11\xddB\xbd\x8b{\ +e\xf6\xfeF\x15Q|l\xe3c\xa4<\x9e\xe2vM\ +!O\xc80fpt\xf1Q\xdd\xd7\x0f\x05\x04j\x1a\ +~\xf4\xca\x8fhn\x15\xb3\x9a\xa3M\xd1L\xb8v\x82\ +\xd6\xf6\xcbZ\xc0\x8d\xfdo\xb1\xb4p\xaa\xf2\x946\xc3\ +\x06>\x03ZpC\x00o/\x87\xda\x80\x0e\x0a\xf9\x94\ +n\x0ej\xce|\x89\xcb\xfa@^\x91\x8dK\x80\xe8\xce\ +\x17\xee\xa4\xbc\xae\xbc\x9f\xaa~\xe8\xc0\xdf\x88\xdf[{\ +\xdf\xe2\xa3\xa2\x8f\x94\xdfg,\xca\xc0\x10a\xf0=\xf6\ +\xdf\xfbyp\x97VTts\x9e\xc3\xe4\x03\x97\x10\x0e\ +\xa0f;7_o\x07\xf7\x00\xadT\xb3N\x93\xda\x09\ +N\xb3\x07\xbc#\x1c\xe1<\xaa&\x90Z\xdb\xac<\xb6\ +\xf1\xb1>\x85\x8a\x87\x13\xf4\x08\xbf\xb4\xa6\x94\xffx\xfb\ +?\x94\xdf\x5c1\xe3\x0a\xe2'\xc5\xeb\xde\xb5\xa5\xf9B\ +3'\x0e99\x7f\x16\xf2\x10\xad\xbf\x05a\xff53\ +D}\x11@\xf8\x02\xe5\x1c\xa5\x95?j\xce\x9c\xc1\xbf\ +q\x027$(\xaf+\xe7\xce\x17\xee\xfc\xc6\x90\x00<\ +/\x9bgi\xb1p\xfb\xafoWT\xff\x881#\x98\ +t\xd3$\x97\x15\xda\xdd\xbd\xff'\x9f+\xde]\xac\xbd\ +\x99\x8dV\xca\xf8;\xa2\xf5\xb7\xe0\xa4\xfeA\xc7\xber\ +\x08-\xd0\xc6I~\x8f\xcdi\xc2x!\xfe\xcd \x8e\ +\xc3-\x09\xe6\xfcl\xce7\xc2\x1c\xa8\xe1\x22\xfc\xdf8\ +\x84\x1f\x1a\x11\xca\x94eS\x90\x22$\x9f\xb3}dR\ +\x9c\xa9\xa1\x1b\x12|\x93|\x025\xecv;\xcd\xad\xcd\ +\xacza\x15\xe5\xb5\x8eg\x9f\xb8l\x22Q\x09Q\x9e\ +\xc7\xfc\xdd\x90\xa2hG\x916sG\xeb\xb7\x224\x80\ +\x8b\xfa\x07\x1f{\xca\xa9\xcb\x0a\xd8\xa9\xe3\x14\xc9\x8c \ +\x9c\xd9\xca\x996\xa0\x19\xb8\xd2\x8f'\x8f\x06R\x80\x0a\ +\x94m\x0d;\xba;\xd8T\xb0\x89\x94\xb8\x142R\xbe\ +\x19S\xc3\xdd\x11\x7f\xc2\xd2\x09\xc4O\x8dw\x5c\xd4\xdb\ +\x93\xd4\xcc\xecu\xea]V\xec\xaf\xa0\xa6\xa4F\x9b\xd8\ +\xc8?8\xc9n\xa0\x1e\xb0 \x08\xe0\xd2-\xd1K\x00\ +z\x7fl\xa3\x92\x83\x5c\xc9\xad\x18T~\xbd\xa5\xb7P\ +z\x03D\xe0\x96\x04\x00;JvP\xd7TG\xce\xa4\ +\x1c\xed\xce\x99\x97\x19\xca\xeb\xca\xb9k\xfd]\x9c\x82\xb5\xcd\xca\xf6\xe2\xed\ +\xbc\xb0\xed\x05\x97\xb7\xa3\xa4\x08\x89\x11\x0bG\x105!\ +\x0a\x83d\xc0 \x19\x90\x90\xc4w\x0cJ\x9a\xf2\xdd\xf9\ +S2p\xec\x8dc\xb4\xd6k\xf7j\xc4F+{\xf8\ +>V*zk\xab\x11\x94w\x00\xbd\x22\x18\xf3\x99\xc2\ +\x80\x18\x92\x98\xc0\xd5\xfc\xd5-\x09\xe6!l|\xa08\ +\x83\xd7\xa8cJ\x5c\x0ak\x17\xaeeq\xd6\xe2A\xf3\ +\x13\xca\xeb\xca\xd9\x5c\xb8\x99\xcd\x85\x9b\xdd\x86\xb6\xc3g\ +\x84\x139;\x92\x90\x88\x10\x8f\xc2u'xIr\x10\ +\xe4\xf4\x8e\xd34\x95\xbbY\xbe\xe50?\xa1\x8a\x83\x88\ +\xa5=\x1a\xf0\xe1\xf8\xa9\x11\x0c\x02H\x08\x12\x8c \x89\ +4\xb7$\x00A\x82I\xfef\xed\x84\xe3\x88\xb9\x89^\ +F\x223\x923X\x9d-\xb4\x82?\xc3\xcd\x81\xa0\xbc\ +\xae\x9c\x1d%;\xd8^\xbc\xddc\x14S\x1a'\x11>\ +?\x9c\x10\xa3\x7f\x82w>wv\xe7Y,\xe5\x16\xd7\ +\x1b\xd4\xf1\x22E\xfc\x1d\xd1L\xe4\xb0o\x17:wd\ +\x0c\xd6\x8cF}$\x98\x84\xfe\x89\xa5\xdep\x061$\ +\xed\xe3}\x05c\x94\x91\x9cI9d\xa4d\x90=1\ +\x9b\xe4\xb8\xe4\x805\x84\xb5\xcdJym9\x85'\x0a\ +)\xaf-\xe7\xf3\xe3\x9f{\x1f\xc4J\x03)S\xc20\ +\xce\xb7p\xbd\x9d\xa3\x13\x1av6p\xa9\xe2\x92\xeb=\ +.\xb0\x9d\x026\x00g{\x0f\x0bn\x06||\x09.\ +X\xd0G\x828`\x11\xfa&\x97\xfa\xc2E\xc4\x88d\ +5~\xcdO\xc8H\xce\xc0\x18m$6*\xd6c\xd8\ +\xb9\xb9\xb5Yi\xd5\xba\x17\xbf\x92_\x92\xcdt<\x9f\ +7\x1b\xef\xcb\xfe\xd3\x09\xf5\xef\xd6\xd3\xd9\xe0f\xb0\xc5\ +\xca\x1e\xf2\xf8%\xa2\xd5\x9f\x03. \xfaN\xba\x85/\ +\x0b-\x98\xd0\x92`\x06\xeb\x89\xe0\x06\xb7\x15\xd5W\xbf\ +\xc0\x19\xf2\xac#?\xc9\xd0g\x84\xf7>G\xaa\xf7\xe7\ +\xd1\xdb\xe2\xe5\xcf\x9e\xf3=\x5c\xf8\xe8\x02\xddV7\xa6\ +\x5c\x08\xffW\x08\x8f_-|]v_\x8d\xfe\x98\xd4\ +.\x93 \x06\x18\xcd\x226\x10\xc52\xb7Wf\x22\xa6\ +\x8f\x07q\xdda\xc0\xf1:\x9b\xec\x0f\xfb3d\xed\x0b\ +\xe1\x08-6\x0e!t?z8\xba<~\xc9@W\ +e\x17\x17?\xbb\xe8\xb2-/\xa0\x16~\x03\x0e\xe1\xb7\ +\x12\x80\xf0E\x99\xfa\x07\x12\xa2\x8b\x18\x03\x98\xc8a\x0d\ +\xf1\xfc?\xb7W\x8eDh\x03\x7f\x06\x92\x02\xc1\x19\x04\ +1\xe4\x81Q5)\xd4\x8bb9\x97c\x9c*}\x04\ +A1]\x9e\x04/uJt\x1e\xec\xa4\xe3\xb0\x875\ +\xfb\x83,|\xe8?\x02\xc8y\x87 B;F2\xb8\ +\x8e46\x10\xc2\x18\xb7WOB\xcc\x1d\x0c\xb66\x18\ +\xa2P\xb4\x81\xdc\xddk\x94\xe8\xcc\xeb\xc4v\xde\x83\x09\ +?\xcb&\x0e\xf06B\xf8\x0d\x04A\xf8\x10x$P\ +/l\x88\xb8`\x17\x0d\x9c\xc1\xca\xc7\xc43\x99P\xe7\ +\xb5\xc5\x10-\xf0h\xef/\xfa[\x1b\x0c%t@\xcf\ +\x81\x1e\xba\xf2\xba\xb0\xb7\xbaQ\xf96Z9\xc5+|\ +\xc1f\x84\xe0\xeb\xe9\x83\xcdwF\x7f\x13@<\x82L\ +\x82\x16Z\xa8`\x07\x89\xd8\x88`\xbaf8\x99\xde\xab\ +\xce\x00'p\xd8\xda\xcb\x19\xc7\xc1\xbe\xcb\x8e\xbd\xd6C\ +\x97\xbd\x9b\xf3\x94\xf3s\x8e\xb2\x0b!xyx\xd7\xed\ +\xf4\xae@0\x90[\xc6\x19\x90C\xc7`d\x02\x99L\ +\xe2\xbf\x09w\xda\xb9T\x8d\x91\x88W\xcc\xfa\x1a@\x1a\ +j\xd0\x13\xc7h\xe1K\x0e\xf2\x02V\xea\x10\xb1\xfd&\ +D\x90\xa7\x03\x1f\x03<\xfe`\xa0\xf7\x0c\x94\xfd\x82\x08\ +\x84xc\xc9\xe6~\xe2X\xd7\xbb\x97\x8d{\x8c\xc4\xd1\ +\xbf\x1e\xce>B\x15\x22n\xe1M\xf06Z\xa9\xe6O\ +\x94\xf2\x19B\xd57\x22Z\xfd%\xfc\x0c\xf2\xe8\xc1`\ +m\x1ai@\x882\x0a0\x92@\x0a\x99<\xcaH\xee\ +\xf4\xf9\xcbI\xbd\xc7p\xf1\x13:\x11\xf1\x892|\xc7\ +'D\xab_\x8f\x95S\x88\x16\x7f\x01\xd1\xeae{\x1f\ +T\xe1\xc3\xe0\x11@\xbe\xb7\xac\x0db\x00#iL\xe5\ +J\x1e!\x86\x9b}\xfez$\xa2\x1f\xee\xb4,\xcd\x90\ +A\x15\x22(\xa5g\x91\xadn\xceS\xc1\x1f8\xc6>\ +DkoBL\xe6\x90[}\x0f:c\xfb\xfebP\ +\xb7\x8d\xed\x85\xec\x1bD\x22\xf7\xb4\xd3\x98\xc2\x95<\xac\ +\x8b\x08 \xc8\x90\x84 \xc48\x06\xc7Lt\x22\x84~\ +\x06\xfd\xcb\xeb\xd9h\xa5\x9e-\x1c`3\xa2\xa5_@\ +\x10\xe0\x22N\xef\xf1\xf7\x17\x86\x02\x01\xe4r\x18\x10\x11\ +\xc4H\x84F\x18I\x1a\x93\xfd\x22\x82\x8c\xb8\xde#\x09\ +\x079\x82\x8dF\xd5!G\x1c\xf5\xc2F+M|D\ +\x19\x7f\xc7\xcaYDk\xb7 \x04/\xbf\xc0\xd9o\xad\ +^\x8d\xa1B\x00uyBph\x04A\x848\xae \ +\x83\x07\x18\xc9\x12B\x08l\x9a\xf0H\x84~\x89C\x18\ +\x1d\xd0G\x0c9z\x08b\xb4\xdd\x9f\xa5\xf4\x9d\xd1\xcd\ +y\xce\xb2\x99\x22>\xee\xcd\xd5\xda{\x5c\xc4\xf1\xee^\ +\x0f\xfd\xdc\xea\xd5\x18j\x04P\x97KM\x84h\x84\xf8\ +Fp\x0dK11\x8f(r\xbc\xf6\x1c\x86\x12\xac\xec\ +\xe1,\x9f\xf2\x15\x07\x11\x82\x97\x85\xdf\x82c\xd5\x8e~\ +W\xf7\xee0T\x09\xa0.\x9fl\x1a\xe4^C4B\ +3D3\x93\xc5\x98\xb8\x81h\xb2\x87\x1c\x19Z\xf8\x82\ +\x0b\xec\xe7$\x05Xi@\x08[\x16~+B\xf0\xca\ +\x82\x8d\x83U\xcc\xa1N\x005dg1\x0c\xa1\xc4#\ +qh\x87h&2\x83\x04f\x11C\x16\x11L\x1fp\ +BtRM\x0b\xe54s\x98\xc3\x14 \x9c\xb86\x1c\ +\x0b3\xb4\xf6\xa6\xc9\xeb\xf4\x0d\xa8\xaa\xf7\x84\xe1D\x00\ +u\x99Cz\x0fY3\xc8\x84\x88@h\x89H&\x92\ +\xc1(\xa6\x10\xce8b\x98N\x08c\x08%!(%\ +h\xe7\x08]\xd4\xd3I=M\x94p\x9a\xe34+o\ +\xe0\xb4\xe1\x10\xbe,pY\xc5\xcb\xabt\x0f\xec.\xd3\ +>*s8CM\x06Y;\xc8\xa4\x90\x89\x11\xae:\ +\x94]\xb3\xfb\xf0\xecb\x8b\x1d!\xcc.\x1cK\xafv\ +\xa8\xbe\xcbG7\x0e\x15?\xe8\xad\xddS\x05^.\x90\ +\x85\x1a\x82\x96\x14\xeaC\xde5[\xcfk\xf1\x9e \xbf\ +#)\x93\xc0\xf9\x90U\xfb\x90j\xe9\xde*\xedr\x85\ +L\x08\x83\xd3\x11\x8c\xe7\x96I`s:\x86\xbc\xc0]\ +*\xa9\xbf\xd7\xba\xfd\x17\x866\xfa\xa2\x0a\xff\x85\xcb\x00\ +\xff\x1f\xef\x83\xa0\xb6}\xbcC*\x00\x00\x00@tE\ +Xtcomment\x00Agt ac\ +tion success fro\ +m Icon Gallery h\ +ttp://icongal.co\ +m/)\x1e!P\x00\x00\x00%tEXtda\ +te:create\x002011-0\ +8-21T13:33:49-06\ +:00\xaeT\x80\x8e\x00\x00\x00%tEXtd\ +ate:modify\x002011-\ +08-21T13:33:49-0\ +6:00\xdf\x0982\x00\x00\x00\x19tEXt\ +Software\x00Adobe I\ +mageReadyq\xc9e<\x00\x00\x00\ +\x00IEND\xaeB`\x82\ +\x00\x00\x05\xc6\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x1a,1\x19Zv\x00\x00\x03\xc3ID\ +ATh\xde\xed\x98\xdbo\xd3V\x18\xc0\xbfs|l\ +'\xb6\x9b\x90\xc6\x03)\x91\xd6\x94\x12\x89K\xef\xe5\x05\ +\x09\x09$@H\x03\xa6\xad\xd2\x9e`\x8cVB\x9a&\ +\x15\xc4\x0b{\x9b\xf6>\xad\x0f\x09\xe9\xd3\xa0\x8d[s\ +\x09B\x084i\xda\xc4\xa5\x93\xf8\x03\xb8I<\xb0R\ +\xaaA\xa5QDC\xdd\xd08\xb1}x\xd9$\xc4Z\ +\xe2$\xc7^&\xe5{D\x9dT<\ +\xc6G\xd5(\xcf.\x85(\xa5\xc82\xff\x9a\x08\x85\xf0\ +\xae\xee\xce\xa0\x84\x18t\x08\xc9\x8e\xa0\xb8m\x9b\x14\x0f\ +\x87\xb9s\xa5@i\x01;x!\x1c\xe6\xceun\x0d\ +\xc6\x92\x1dA\x91\xe9w\xe0\x92\x9e\x19\x0d\x06\xb8\xcf{\ +\xbad\x19!v\xfd\x8d\x1a%\xa0F\x95wS\xa5\xe6\ +\xb4\xc4\x8d\xd4Y2\x13\x98\xd2\xc6\xbe\xe6y\xf8\xd6\xef\ +\xcer\xadX\xcc[\x80\x10*\xba\x12\xd0\xb5\xcc \xc1\ +\xf4\xc7\x81^\xc5\xf7\xcer\xb5\xc8\xe7-\xb8w\xbfP\ +plz\xa0\xe2?q6\x9b\xda+`|m\xa0_\ +\x91\x14\xa51\xe0\xef\xde/\x14\xac2|ztx\xe4\ +V\xc5\x22\xe6\x10\xba\xb8q\xa3\xd8\x10\xf0\x8by\x0b\xee\ +\xde{\xf3\xc6\xb1\xe1\xe0\xd1\xe1\x91iW5\xe0\x00\xfe\ +l\xe6\x89\xb9\xfcj\xd1j\x88\xb4\xb1-z\xe8\xcb\xa1\ +\xb5\xe1W=V\xd1\xb4\xccN\x82\xe8/\xdd]\x92\xd2\ +\x1a!\x0d\x996\x15\xcf\x85\xfe+\x89j\xe1?x\xb0\ +\xe5\xb7D-\xf0\x15O\xe6\xfc\x92\xa8\x15\xbe\xa2\x80\x1f\ +\x12\xf5\xc0\xbb\x12\xf0R\xa2^x\xd7\x02^H\xb0\x80\ +\xafJ\x80\xa5\x04+\xf8\xaa\x05XH\xb0\x84\xafI\xa0\ +\x1e\x09\xd6\xf05\x0b\xd4\x22\xe1\x05|]\x02\xd5Hx\ +\x05_\xb7\x80\x1b\x09/\xe1\x99\x08|H\xc2kxf\ +\x02\xabI\xf8\x01\xcfT\x00\x00`r<\xbd\x9b#\xf0\ +s{\x22 \xcf>5\x0b\xb6E\x0fV\xea\xe7\x1bJ\ +\xe0\x1f\x09L\xd0e\xc7\xa2_x\x0d\xdf\x8cf0\x88\ +\xb7=-\x02\xfeu\x15F\x99\x00\x00\x00\x00IEN\ +D\xaeB`\x82\ +\x00\x00\x04\x87\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x85iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3P\x14\x85O\ +[\xa5R*\x0eV\x10q\xc8P\xc5\xc1.*\xeaX\ +\xabP\x84\x0a\xa1Vh\xd5\xc1\xe4\xa5\x7f\xd0\xa4!I\ +qq\x14\x5c\x0b\x0e\xfe,V\x1d\x5c\x9cuup\x15\ +\x04\xc1\x1f\x10W\x17'E\x17)\xf1\xbe\xa4\xd0\x22\xc6\ +\x07\x97\xf7q\xde;\x87\xfb\xee\x03\xfc\x8d\x0aS\xcd\xae\ +8\xa0j\x96\x91N&\x84lnU\x08\xbe\x22\x84\x01\ +\xaa1\xccH\xcc\xd4\xe7D1\x05\xcf\xf5u\x0f\x1f\xdf\ +\xefb<\xcb\xfb\xde\x9f\xabW\xc9\x9b\x0c\xf0\x09\xc4q\ +\xa6\x1b\x16\xf1\x06\xf1\xf4\xa6\xa5s\xde'\x8e\xb0\x92\xa4\ +\x10\x9f\x13\x8f\x1b\xd4 \xf1#\xd7e\x97\xdf8\x17\x1d\ +\xf6\xf3\xcc\x88\x91I\xcf\x13G\x88\x85b\x07\xcb\x1d\xcc\ +J\x86J\xe9\x92!9R\x80\xca_(\x00\xef\ +g\xf4M9\xa0\xff\x16\x08\xad\xb9sk\x9d\xe3\xf4\x01\ +\xc8\xd0\xacR7\xc0\xc1!0Z\xa4\xecu\x8fw\xf7\ +t\xce\xed\xdf;\xad\xf9\xfd\x00\xee\xd2r\xd82\x0f\x7f\ +F\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\ +\xbd\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\ +\x00\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\ +\x07\xe7\x0a\x15\x0a)*x\x88\xed}\x00\x00\x02\x83I\ +DATh\xde\xed\x99\xcdK\x94Q\x14\xc6\x7fw\x0c\ +\x0b\x22jQ\xb4\x09Z\x84E\xa4\xb5)\x17\x05j\xa5\ +\x06\xf9A\xb8\x88\x08\x83\x08\x1b[\xf4\xb1h1\xa5\x06\ +\x0594\x11\x11A`f\xb9(F\xd4 \xb1QB\ +3\xff\x00\x09B\x88\xc2\x9242\xcd\xd1\xc6l\x1c}\ +\x1dgN\x1bm\xa1\xcd8\xa3\xf9\xce\x0c\xdcg\xf9\xde\ +\xf3\xde\xfb<\xe7\x1e\xees.\x174444\xe2\x1a\ +\x22b\x17\x11C\xcc\x87!\x22\x95\x8b\xf1S\x11\x080\ +\x80\xe4\x18\xe5\xcfPJ\xadY\xae\x00\x89e\x05(\xa5\ +\xc2r\xb4$z\x89k\x01\xb1\xc6\xaah\x7fp8\x1c\ ++J\xc8f\xb3\xe9\x12\xd2\x02L=f\xb5\x0f\xe8\x12\ +\xd2>\xa0}@\x97\x90\xf6\x01\xed\x03\xba\x84\xb4\x0f\x98\ +\xe7\x03\xd1\x9e\xf3\xb7\x1e\xb2>\xa0h\x0c\xc2\xedkV\ +^'\xd4\x0eL\x19\x1e\x02\x8a6\x84\x1c\x8b\xe0\xb2W\ +S\x980\x02&&\x87y\xf62\x0b\x84\xf4\xd9O\xab\ +Eh\xb4WQ\x14\xf7\x02&|C8]\x87\x18\xfe\ +\xd9=\x7f(Y\x14\x0d\x95U\x14\xc7\xad\x0f\xfc\xf2\xf6\ +\xe3t\x1d\xc63\xde\x1b\x9a\x93\xe2q\x85\x95\x12Sw\ +@$\xc0\xa0\xbb+l\x8cg\xfc3O\x9b3\xc2\x92\ +GQ\xe5\x1f\xc0\xba\xe4Sh)\x08\x06\xfd4\xbd9\ +IO_\x13\xf9\x99\xb5\xa4\xa6\x14/\x88\x19\x1d\xfb\x88\ +\xb3%\x9b\xdf\x13\x03\xe1\xa6zPv\x96\x0bJ!\xa6\ +\x95P `\xf0\xa2\xe3\x04=}M\xb3\xadA\x12y\ +\x995\xec\xde~\xfao\x8c\xdb\xf3\x9e\xba\x96\x1c\xbc\xbe\ +\xc1p\x99w\x94[\xb9bj/\xe4\x9f\xf1\xf1\xbc\xed\ +\x18_\xbe\xb5/X6\xf7\xc0}\xf6\xee:\xcf\xd0\xc8\ +[\xeaZ\x8f095\x1an\xaa\xeb\xe5\xa5\xdc0\xbd\ +\x99\xab\x7f\x95G\xef\xd7\xd6\x90)\xdd\x97z\x91\xee\x9e\ +Z\x8c\xe9\xf1\x901\x22r\xb9\xe2\x1cwc\xd2\x8dF\ +\x98\xdd\x90\xd4r\xf6\xdf#=\xed\x92\x8ai;\xfdc\ +\xf4\x1du-\xb9\xf8\xa6\xdcQ\xb4\xd0I\x1c\xcd\xa8f\ +\xcf\x8e3\x8b\xb6\xd3\xa6\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x1c\x22\x80\xfb\xd0\xf7\x00\x00\x00TID\ +ATh\xde\xed\xd1\xb1\x09\x00!\x10EA\xb5\x16s\ +\xc1\xfek\x10.\xbf^4\xd6\x02Dq^\xb8\xd1\x1f\ +6\x04\xe9\xed\xe2z\xf8k\xe9'\x0f\xce\xed\x9b6\xa7\ +\xdb?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 i\ +g\x03\x1c3\x04P[E\x99\x97\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00)\x0e\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3>a\xcb\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\ +\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\ +\xdf\x01\x14\x0f\x05\x02U\x82?v\x00\x00 \x00ID\ +ATx\xda\xed}y|\x15\xd5\xd9\xff\xf7\xcc\xdc5\ +7+Y\x81\x90\x10 \x10 $\xac\x02A\x14\xc1\xe2\ +\x82\x88\x80(\xb5\xb4J\xd1Z\x8a[\xfbC_\xdb\xbe\ +\xb6?m_K\xad\xaf\xd5\xba\xa0-\x15w\x0b\x88\x88\ +\x0a*\xa2\xaca\x07\xd9\x09;\x84\x04H\xc8Fn\x92\ +\xbb\xcd\xccy\xff\x98\xb9\xb3\xdd\xb9\xc9\xcd\xbd7\x98\x04\ +\xcf\xe7s?\x84\x99\xbb\xcc\xcc\xf3}\xbe\xcf\xf7<\xe7\ +\x9c\xe7\x10J)~hWoc~x\x04Ww#\ +\x1d\xf8\xba\x89\x04`\xf5+\xd2\xfb\xa1\xd2K\xd0\xbd\xe8\ +\x0f\x00\xf8\xfe\xaf\x93\x01\xc0\x02`\xe7N\xb5\x8d3\x9b\ +\xc8`\x00\xd9\x163\x06\x11B\xf2\x19\x06\xf1\x91\xfe\x88\ +\xcfG\xb7q<\xce\x01(\xbd\xdcH7\x1f?\xc7\xef\ +\xddr\xc0W\x0d\x80W\xbd\xfc\xa0\xf8\x01\x00W <\ +1\x00Ls\xa7\xdan\xb0Z\xc8d\x13\x8bB\x96%\ +EW\xf2\x22x\x9e\x96{}\xd8\xea\xf1\xd1\xe2\xf3U\ +\xc2\x86\xcf6{O\x01\xf0\x01\xe0T\x80\xa0?\x00 \ +z\xd7\xc3\x02`\x1f\x99a\x9fm1c2!\xe4\xda\ +P\xbd\xbbww\x16\x03sX\x00@\xbf\xde\xe9`\xac\ +i\xc62\x871\xa1\xf6\xfcw\xb8tY\xb4\xdb\xe6\xbd\ +^\xf9\xef\x10\x01\xf1\xd5\xf9*\xe1\x83\x8f\xd6y\xf6\x00\ +\xf0J\x80\xe8\x90` \xed\xc8\xdb\xd9\xb9Sm\x13\xec\ +V\xf23\x96%\x93\x9a3z\xef\xee,\xc6\x14\x98\x91\ +\xd1\xbd\x0f\xac\xe9\x93\xc0X\xd3`N\x1a\x0d\x10\x13@\ +$\x83\x13\x91@\x08!\xcaO\xc8\xe7L\x06\xe7\x01o\ +\xf5f\xf0\xce#\xf0\xd5l\xc2\xe5\x8b\xbb\xb1q\xaf\x17\ +\x87N\xf3\xa1\x82a\xb7\x01\x18~\x00@\x08\x867=\ +2\xc3>\xdbj!\xbfg\x18\xf40zSR\x1c\xc1\ +=\x13m\x88\xef>\x11\x96\xf4\x9bar\xf4\x95>m\ +\x91\x8dM\xfc\xb7\x22\x19Vml\x0d\x08\xfc\xefQ\x83\ +E\x07\x04\xf9\xf3\x8c\x05|\xfd!x\xce/\x83\xfb\xfc\ +G\xf8\xa2\xb86( |>ZR\xeb\xa4\x8b\x0e\x9e\ +\xe2V\xee<\xc2UH`\xe0\xda;+|_\x00`\ +\xee\x9a`M\xc9Le\x1ecY2\xcb\xc8\xf0\x09\x0e\ +\xd1\xe8I9Sa\xcb\x9c\xa5\xf3X\x15\xad\xeb\x8c\xa9\ +\x00!26\x90\xdf\xc7XT@\x01|\xd5\x9b\xe0:\ +\xfd*\xb6n)\xc6\x86\xbd\xbe\x80\x1b\x13\x048\x1b\x9a\ +\x84\xc5'\xcb\xf9\xf7\xd6\xec\xf0\x1d\x03\xe0Q\xe9\x05z\ +\xb5\x03\x80\x91\xe2\xfb\xcf\xed6\xf2W\x00\x09\xfa7L\ +\x18f\xc65\xa3\xc7\xc1\x9e3Oe,\x93\xc6\xe0\x84\ +\xb0\xc6\x1e\x1d\xc0\x06&\xd5\xf9P@\xd0<\x1b(\x0f\ +\x8dH!c#\x1a\x8f>\x8d\xc5\xcb\x0e\x19j\x08\x97\ +\x9b\xae8|\x86\xfb\xeb\xda\x9d\xbe\xa3\x00\xdcRxh\ +W\x8c@\xae\xe0\xef\xb0\xbf\x9an\x9f\xe0\xb0\x91\x7f\x19\ +y\xfc/n\xb7!c\xd83`cr\xb4\x86\xf0S\ +\xba\xde\xa0Fl\xa0\x0a\x09\xb2\xa1\x9a\x0d\x09\x91\xb1\x81\ +\xf2\xfd@\xe3\xd1\xa7qt\xc7\xbf\xb0\xec[O\xc0\xcd\ +;\x9b\xe8\xdb\x9b\xf7z\x17\xec?\xc9_\xd0\x01\xe1\xaa\ +\x00\x003m\x9c5\xb5W7\xe6\xdf,K&\x19\x1a\ +~\xf0\x93`c\xfb\x05\x1aD\x03\x82\xe6\xd8\xc0 $\ +\x18\xb1A+C\x02\x80\x90\xd9@\xfc]\x0b<\xe5\x1f\ +\xa2\xa1\xe4\x0fx\xfe\xddJ\xa3\xd0\xf0\xd6\xc2\x15\xeeg\ +\x014\xaaB\x83\xd0Y\x01@$\xba\x9fn\xb7\x917\ +\xf4t?}\x9c\x15\x03\xc6>\x09\xd6\xd1[\xf9\x00a\ +u\x1e\xcf\xe8\x8e\xc3\x90\x0d\x02B\xc2\x15\x12\x88\x86 \ +\x00\x00b\x01\xe7<\x88\xcb;\xa6\x06\x00\x81\xe7\xe9\xf9\ +3\x17\x84\xf9\x1f\xad\xf3|\x0d\xa0I\x12\x8b\xdf\x9b>\ +h+\x000wM\xb0\xa6d\xa53o\xea\xbd>\xa7\ ++\x8b\x1f\xff\xf8nXR\xc6)\x1eM\xb4}u\xc2\ +\x98[`\x83\x10C\xc2\x15\x16\x88z6\x00\x00\xcf\xf9\ +%8\xb4\xf6\xe1\x80\xd0\xe0l\xa2+7~\xe7\xfd\xdd\ +\xc1S|9\x00\xd7\xf7\xc5\x06m\x01\x00f\xeeT\xdb\ +\xf0\xd8\x18\xe6#}\xac\x9f?+\x05\x8e\xfe\x7f2\x88\ +\xcf&\xad\x07\x05e\x83PCB(\x02Q\xc5\x06m\ + \x105\xf7F\x18\xb8N\xbd\x84\xe5\xef\xfcQ\xd3\x8d\ +\x14\x048O\x96\xf3s?^\xefY\xa3\x0a\x0b|G\ +\x06\x00\xfb\xc8\x0c\xfb\x1c\xab\x85\xfcM\x9d\xc8)\xe8m\ +\xc2\xe4i\xf7\xc2\x9404\xb8H\x0bx\xd8j6`\ +t\x00\x09\xce\x06\x5c\xdd.\x08\xbe\x1a\xf0\x8d\xa7\xc17\ +\x1e\xd5\xb1\x886L0\x96\x14\x98\x93\xc7\x00``\xcd\ +\x98\xac\x03P\xf4\x04\xa2\x9f\x0d\x04o%.\xef\x98\x8e\ +\xe7\x16\xed\xd7|\xba\xbeAxw\xe1\x0a\xf7o\x01\xd4\ +K\x22\x91\xbbR!!\x9a\x000\xfdf\xa6\xfd\x19\xb3\ +\x99\xfcV}p\xd6M6\xf4\x1a\xf9$\x88)N~\ +\x10Z\xfa\x0d\x81\x0d\x82\x84\x04\xaen\x17\xbc\x97\xd6\xa0\ +\xfe\xd2a\xec.\xf1a\xc7\x11.\xa2\x1bH\x8a#\x18\ +[hF\xff\x01\x83`N\x1e\x0bk\xc6\x140\x96\x94\ +\xa8\x09D\xff\xdf\x9e\xf2\x0f\xb1\xec_s5l\xe0\xf1\ +\xd2c\xbbJ\xb8\xfb7\xef\xf3\x1d\x92\xd8\xe0\x8a\xf4\x14\ +\xa2\x05\x00\xd3\xfc{\xeco\xb1,\xf9\x89\xfa\xe0\xe3\xf7\ +\xf6@L\xafG\xb41Y\x1f\xf7C\x05\x81\x14\x12<\ +\xe7\x97\xa1\xfa\xcc\x17\xf8\xcf\xd7n\x5cnl{'\x19\ +3\xc8\x8c\xa2a\xdd`\xcf\x9a\x03k\xb7\xe9-\x87\x04\ +\x00`m\xcd\x0a\xc4`l \x08h8W\xc1?\xf9\ +\x9f\xb5\x9ee\x00\x1a\xaeDH ma\xfc\x04\x07\xc1\ +\xaf~~+\xcc\xc9c\x15\xe3i@ =\x08\xa2\x15\ +l\xc1\xe2\xa7\xaf\xea\x1b\x5c:\xb6\x04K\xbe\xf1\x5c\x11\ +\xa3\x07k\xc9\xf1\x04\xb3os 6\xff\x05\x98\x93\xaf\ +\x8fX \xfa\xb5\xc1\xc2\x17\x9f\xd2$\x92*k\x84\xe7\ +\x16\xafr\xbf\xa4\x0b\x09\xed\x12\x00\x86\xc6\x9f\xf7\x8b\x19\ +0\xc5\xe5\x07x:Q\xff\x9c\xeeA\x18\xb1\x81\xbb\xf4\ +-,Y\xb9\x1d\xa7/\xb4\xec\x04\xa9\x09\x04\xe3\x86Y\ +\x90\xd3\xab\x1fL\xf1\xf9R/\x03\xb0v\xffq\xb3\x9f\ +\xf3U}\x03\xc1S\x09\xcey\x18\x5c\xfdA8/\x16\ +c\xfd\x9e\xe6\x07\x81\x00``\x0e\x8b;\xa6\xdd\x03[\ +\xcf_\xca\xa3\x8e\xe1\x0aD_\xd57X\xf7\xfe\x0c\xac\ +\xdb\xe3S\xf7\x12>}m\xb9\xeb!\x00\x97\xa5\xeeb\ +\x9bt\x15I\xd4\x8d\xff\xc0T\xb0q\x83\x94.\x99N\ +\xd8\x05\xb2A`Hp\x97\xbe\x85\xa5\x9f\xeej\xd1\xf0\ +\xf3\xa6\xdb\x91\x90=\x15\xb6\xeew\xc1\x9c2!\xaa\x0f\ +F\xf0\x5c\x84\xa7|\x09\xdc\xe5K\xb1s\xcf\x11\x8dq\ +\xf4\xacp\xff=\xa3\x10;\xf0y0\xd6\x8c\x88\x04\xe2\ +\xf9\xaf\x0a\xf0\xear\x97Z\x1c~\xben\x8f\xef\xf7%\ +g\xf9\xb3\x12\x08\xa2.\x0eITi\x7f\xce\xed0%\ +\x14h\x94\xb6l\xf0\x10\xd8\xc0W\xbd\x0e\x1f.Y\xd9\ +\xac\xe1\xe7M\xb7#\xa9\xef\x83\xb0\xe7\xcc\x03c\xcd\xb8\ +b\xf4\xcf\xd7\x1f@\xd3\xe9W\xb0u\xfd2C0\xf8\ +\x81\x10\x97\xffw\x10Kj\xd8\x02\xb1zmoM\xf2\ +\xc8\xe3\xa5\xc7Vo\xf5\xde}\xac\x94?\xab\x12\x87\xf4\ +\xfb\x04\x00\xfb\xc8\x0c\xfb\xfdv\x1by]\x1f\xf3M\xf1\ +\x05\x9a~u\xa8 \xa0|#\xf6\xac}\x16\x9fo\xf1\ +\x06\xa5\xf7\xd93\x06!\xbe\xf0u\xb0\xf1\x83\xbe\xf7\xfc\ +9_\x7f\x00\xf5\xfb~\x89\xc5\xcb\x0e\x04\x0c\x02\xa5&\ +\x10\xdc\x7f\xefm\x88\xcd\x7f1l\x81\xe8\xdc?\x17\xcf\ +\xbe\xf0\x81\x1a\x04\xc7?/\xf6\xce\x137L\x98\ +\x8cd\xcf{8,\x85\x85\xd2\x0a\x01\x87v}\x8a\x82\ +\xecz\x98\x93\xafS\xb1\x01\x15\x9f\x0d\x04@\xd5;\x22\ +*\x90XR'bD\xf7]2\xa8\xac\x16\xd27\xbf\ +\x17\x9b\xb1\xbb\x84\xdb\x0ce\x00IhK\x00\x90\xb9S\ +m\xc3c\xec\xcc\xdb\xea\xb8?}\xfa\x0c\x10\xd6\xee\x8f\ +\x86\x22\x9ae \xe8A\x00\x80Rp\xf5\x07\xf1\xda\xa2\ +\x95\x01\xf1~`\x0e\x8b\x87\x9fZ\x81\x98\xdc\xdf\xa23\ +4\xc6\x9a\x8e\xae\x83\x9f\xc0\xc8^gQr\xf8 \x9a\ +<@\x93\x07\xd8\xb4e/\x86\xa7~\x09k\xe6O\xb4\ + \x00\x00\xcaI\xbaI\x1d\x12D\x10\xd8\xba\xdd\x89!\ +\xf1oc\xcb\xfeF\x00\x80\xcdJ\xf2{\xa41\xf5\x07\ +O\xf1\x87\xa1LB\xa5m\x05\x00\xf3\x0d\xc3,\xab\x08\ +A\xba\xff\xc0\xaf\xef+\x94\xe8L\x8a\x5c\xf2\xcd\x18\xb3\ +\x01\x01\xc09\x0f\xe2\xb57?\x0f0\xfe\x0dC\xcd\x98\ +\xf2\xeb#b\x0f\xa2\x935k\xc6d\x5c3\xe66\xd0\ +\x8awp\xe6\x82\xf8<\x8a\xbf\xabF\x1f\xf2O\xc4\xf7\ +\x9c\x01br\xa8@@\x83\x87\x04P\xc4\xf4z\x08]\ +\x9c\xff\x90Y%.\x86\x8c\xb0Y\xc8\x9e\xd3\x17\x84\x8b\ +\x88`\xaaYK\x22\x90yd\x86\xfdq\xbb\x8d,\xf0\ +\x1f\xb8\xad\xc8\x82\xc21?\xd5\x08\x1a\xed\x84\x0d\xe8\xba\ +|\x0c\xf8\x86\xa3x\xed\xcd\xd5\x01\xc6\x9f\xff\xd34$\ +\xdfx\x12WC\xd3\xf7\xef\xc7\x16\x9a1\xf1\xfe\xf5\x06\ +\xc9\xa3\xe0\x02Q\xf0\xd6`\xcd\xeb\x05\xf2dT\x9f\x8f\ +^\x5c\xb1\xc1s\xc7\xe9\x0b\xc2I)m\xdc\xea\xeea\ +s\x0c@\xa6\x8d\xb3\xa6\xa5'3K\x00\xd8\x00\xc0a\ +#\xb8\xfd\xf6\xdb\xa5\xd19A20\xd5R\x96\x8e\x0d\ +\x04w\x19^Y\xf4)\xea\x9b\xae^\xe3\x03@L\xaf\ +G1\xba\xbf\x0b\x1b7o\x93u\x01w\xfe]\xf4*\ +\xbc\x13\x84\x8d\xd5\x85\x04c\x81\xc8\xb01\xc8\xea3\x1c\ +\x87v|\x84&\x0f\xc0\xb2$6+\x83\xed\xb7\xf3\x08\ +\xf7\x15\x94\xd5JB\xb4\x00\xc0\xde2\xca\xb2\x80e\xc9\ +X\xff\x81G\xefN\x84)n\x80\xd4\xd5#:\x10\x08\ +RrG\x09\x09\x94wb\xc5\xf2\xa5(\xaf\x12\x02\x8d\ +?\xe1\xb8\xe6\xe6\xae\x86fI\x19\x8f1\x85\x0e\x1c\xde\ +\xbb\x0eM\x9e@\x10(\xf9\x92\xe0\x02\xd1\x14\xd3\x13\x05\ +9\x8d\xd8X\xbcS\x0c3f\x92\x9d\xd3\x95\x11\xf6\x9f\ +\xe4\xbfC\x18\xd3\xcb\x82\x01\x80\xcc\x9ed\xcb\x8d\x8fU\ +\x84_Z\x12\x83\x11c\xa6\xc8j^\x11)TE\xff\ +\x82*\x17@pp\xdb\xbb\xd8\xbc_\xdb\xd5\x9b?+\ +\x05\xc9\x13J\x14\xbd\xa0a\x0d]\xa2\xc5U\x0a\xae~\ +?\x04W)<\xe7\x97\x81\xfa\xea\xc0\xc6\xe6vh\x10\ +\x98\x93Fa\xf8\x88kpp\xfb\x12\x19\x04\xde\xb2w\ +\xd1{\xf0\x9d \xa6\x18\xf1\xe9\xb5 \x10-)\xe3\xd0\ +\x97y\x15\xbbJ\xc44\x80\xc3F\x06y|\xd8p\xa1\ +J\xa8Q\x89\xc2\xd0r\xfa\xc1\x80\x91\x14G\xfe\xa0>\ +p\xdf\x1d\xbd$jR.\x8d\x10VB)\xa7\xca\x02\ +\x0a\xa0T\x80\xfb\xdc\x7f\xb0r\x936\xc9s\xfd`3\ +\x92\xc6\xac\x93\x8c\xcf\x887\x06\xc0W\xb3\x1dM'_\ +\x00_\x7f\x00\x02\xd7\xd0\xec\x05\xdb{>\x08G\xde\xd3\ +\x1d\x1b\x04)\x13\xf0\xf0\x1fV\xe0\xe5g\xa6\xe2\xd2e\ +\x8a\xe2\x03>\xa4,\x1d\x8fkf\xed\x17S'T=\ +\xb2(\xb1'\xef\x963\x88\x14\x14\x99\x13w`\xe0\xde\ +\xc18t\x9a\x07\xcb\x12\xc7\x98A\xe6gw\x97p3\ +\xa1\xcc6\x0e)I\xc4\x04\xf1\xfe\xdef3\xb9\xc7\x7f\ + \xbf\x97I\x1c\xe4\xa1\xaa.'\x15@)\x0fJy\ +\xf18\x15d\x83\x0a\xee\xf3\xf8\xe7\xca\xa6\x80\xb4\xee\xc4\ +\x07w\x89C\xa7T\xdbum:\xf1<|5[[\ +4>\x00x\xca\xde\xef\x14\xe1\xc0\x0f\x82\xd4\x04\xd1\xd0\ ++7yP\xbba\x98\xfcl\xc4g\xabfr\x01\x10\ +\xbc\xe2\x0b\x00\xb1\xa6\xe2\xce9J\xaa\xd8n#\x85\xf7\ +L\xb4\xce\x05\x10/i6&\x5c\x000\x09\xb1\xe4Q\ +\xf5\x81\x9b\x8b\x12A\x05)\xe9DU\xb9\x07\xc9\xf0\x94\ +\xf22(@9|\xf5\xd5\xd7p\xeaD\xdf\xaf\xe6\xbf\ +\x08bN\xd6\x82&\x8c\x1c\x86\xc05\xc0[\xb1\xba\xd3\ +\x80`\xde\x7f\xbd!\xff\xff\xf9\x0f\x1a\xd0t\xec\xcf\xa2\ +\x91e \xe8@@9\x91\x0d\xa8\x00k\xb7\xe9\x98?\ ++E>\xdb-\x85\x99\xd3#\x8d\xc9\x02\xe0\x00`\x0e\ +%\xd5\x1f\x00\x80i\xe3\xac)fU\xc6/-\x89\x81\ +\xb9\xcb\x18\xc9\xbe\xbc\x08\x04\xca\x05e\x03\xcf\xc5\xcf\xb0\ +\xe7\x98\x96}\x9e\x98\x93\x07k\xd7\xa9\x81\xa0\xf1\xff\xcd\ +]n\xd5\x83\xf3Vv\x0e\x00\x00\xe2\x84\x95\xff\xfe\xed\ +c\xf2\xff\xff\xe7\x7f\xdf\x85\xaf\xa6X\xf3\x8c)\xa5A\ +\xd9 \xb1h\xad\xcc\x22,K\x1c\xb7\x16Y~\xd7\x1a\ +\x16\xd0\xbf\x81\xc9Le\xa6\xaag\xf4\xde~\xad%\xc0\ +S\x83\xb1\x01\xe5\x9cxou]@\x96/q\xd4\x97\ +J\x98P\xbf_\xf0\x81R\x1e\x9c\xb3\xa4u\x00\xa8\xf8\ +\xb2S\xf5\x0e\x1cy\x7f\xc2\x13\xf7+\x89\xb0\x0f_\x9f\ +\x0b\xc1S)>_\xc1+?\xb3@6\x10\xc0\x98\x13\ +\xf1\xc0\xec\xa9\xf2\xd1\xc48\xe6\xe6k\x0b\xcd#\x01\xc4\ +\x02\xb0\xb4\xc4\x02z\x00\xb0\x163\xe6\xa9\x0f\xa4d\x0e\ +\x97(\x89\x0b\x00\x01\xa5T\x8e\xfb\x80\x80\xf2\xe3_\xe3\ +b\x8d\x96\xd2\xef\xbco\x81\x12\x22\xe40\xa1\x05Bk\ +\x9b\xc05\x80\xaf?\xd0\xa9@\x904\xb6\x187\x0c\x15\ +g?\x1f-\xe5q\xfa\xeb[\x94g\xd3\x5cH\x80\x80\ +\xd8\x81/\xc8\x851\x00`h_\xd3|\x88#\xb6\xf6\ +\x96\xb2\xbdj\x00\x90Y7Y\xfb\xb0,\xc9W\xa7i\ +\xc1\xd8\x14C\xa9\xd0(S\xbf\x14\x12(\xe7\xc4\xf2u\ +Z\xd5\x7f\xffd\x1b,]\xefP\x89\x9a@ \xb4\x96\ +\xfe\xfd\xcdWS\xdc\xe9\xf2\x04\x13fo\x90\xe9\xfc\xcd\ +\xcf\xddp\x95\xfe[\x01\x81&$\x04\x0a\xc4i\xf7<\ +\xa1\x11\x84\x13\xaf1\xdf\x10\x0a\x0bh\x00\xd0%\x9e\x99\ +\xa2>9\xac\xbf8\xd8#\xfeX \x1a\xd5lPW\ +\xb6\x1e\x8dn\xad\xf0\xcb\xba\xfe\x03\x95\x87\x0b\x86@\xe0\ +\x9c\x87\xc3zX\x9e\xca\xaf:\x1d\x00\xd8\xf8A\x98\xfb\ +\xd8\x9f\xe4\xff/{\xffe\x08\xde*\xc5\xf8\xfe\x90`\ +\xc0\x06\xf6\x9e\x0f`\xfa8\xab\xfc\xff\xbcl\xd3/$\ +-\xd0,\x0b0:\xfa\x97\xc5\x9f\xc3F\xc4\x95<\x92\ +\x015 \xd0\xc4&\xb1-_\xaf\xf5\xfe\xf9\xf7\xc4\x82\ +\x8d\xed\xaf\xea\x226\x0f\x84\xd63\xc0V\xdd\xf7v\x8e\ +f\xef\xf5(\xe6M\xb7\xcb\xa1\xa0\xe1\xd0|M\xcc\x0f\ +d\x03E \x0e\x18\xf3\x1b5\x0b\x14L\xbc\xc6|\xbd\ +\xd4#\x08\xca\x022\x00\xa6\x8c\xb5$\xab\xe9\x7fh?\ +\x93\xf6\x87\xa9\xff\xc7x-\x1b@\x80\xaf\xa6\x18\x95\xb5\ +ZC8\x06\xfeM\xbaP\xce\x00\x04\x0a\x10\x04Wi\ +\x04 P\xab\xe5\xce\xd3\xba\x8e\xfbF\x0e\x05\x7f\xfd\xe7\ +n\x15K\x0a\xda\x9c\x8bN \xda{>\xa0\xd1\x02\xbd\ +\xbb\xb3\xf7\x00\x88\x93z\x04ls\x00`\xb23\xd8\xa9\ +\xea\x13\xfd\xb3Y\x9d\xf8\x13\x8c\xd9@\xf0\xa2x\xaf6\ +\x8eO\x19k\x85\xa5\x8b\xaa\x9a[3@\xe0\xdd\x17\x22\ +\x03\x80\xda#:\x09\x10\xd8\xf8A\x983K\x99\xe6^\ +\xff\xdd\xfd\xaa\xb8\xaf\x13\xcf\xba\x90p\xc7\xf4\x9f\xc9\x9f\ +\x8b\x8fe\x8a\x0az\xb3}\x01\xc4\x04\xcb\x0b\xc8\x000\ +\xb1\x18\xab>\x91\x98\xdc\x0d\x14\x92\xc7\x0b\xde\xa0l@\ +9'\xb6\x1e\xd4\xe6\xfb\x07\x0e\x9f\xaa\xbdX\x0d\x10\x04\ +\xdd\x8b\x8b\x00\x00[\xb5a\xa9\x13\x01!\xaep\xa1\xec\ +\xcd\xff\xfba#x\xe7!]\xdc\xd7=C\x09\x041\ +}\x7f'\xb3\x07\x00\x0c\xcb3\xcf\x92\xc4\xa0\xd5(/\ +\xe0?\xc02\x0c\x0a\xd4i[bNV<\x1e4(\ +\x1b\xb8j\xbe\xd3|ar<\x81-\xeb>\xb1g \ +\xc7'!\xa8\xa1\xf8\x86\xe3\xe1\x03\xa0v{\x80 \xed\ +,@`\xac\x19\x98:\xf3a\x85\x05\xf6\xfeR6\xb6\ +\xa2\x9d\xd4\x19YE \xce\x9e\xa6\x14\xddHN 7\ +I\x00\xb0\xc1`\xec\x87\x01\x80IE\x96.,K\x06\ +\xfa\x0f\xf6\xe9a\xd2\xf5\xd9%\x10h\xa7\ +\x84\x13\x968\xa6\x8d\xb3\xde\xa9\x0a\x03\x8c\x1e\x00$3\ +\x8d\x19\xa2>\x98\x96\xc4\x04&n\xa8`\x18\x12v\x1c\ +\xd6\x02\xc0\xdeuR`\xa2\xc7ol\xbd\x88\x94Q\x8c\ +\x88\xc2\x00\xa5<\xa8\xe0k\x06\x08\x1d\x97\x0d\xd4,\xd0\ +p\xf8I]\x18\xe5\x0cC\x02\x1b\xdb\x0fc\x06\x99\xe5\ +\xcf\xa5'\x91\xebT,\x10\x00\x00\xc6j&\x83\xd5\x07\ +s{\x98\xb5W\xa1\x13o\xfe\x90 \xb8\xcf\x07\xf4\xfd\ +m=f\x05f\xfch \x10\xfc\x86\xe2\x1a\x8eE\xf4\ +\x808\xe7a\xc3\xf1\x85\xe6\xc2N\x87\xea\x16\xe6\xcc\x93\ +c\xfa\xa2\x8f\xcf\xebb>\xe4\x90\xa0\x17\x88\xd7\x8d\xbb\ +Q-\x06GwMa\xd2\x8d\xc2\x80\xbf\xc4z\x96\xe6\ +\xa0=\xcb\xf8jt \xa8\xab\xd2v\xe1F\x0d4\xc9\ +#~\x9a\xcf \x10\x08\xfe\xb0@\xb9\xc6\xc8\x00P\xbb\ +C\xf3\xfd\x01C\xd4\x1d\x5c\x1f0\xd6\x0c\xdc{{*\ +\x00\xa0\xd6I\xd1x\xe2oAzVZ6\xb0e\xfd\ +\x5c\xf3=\xa3\xf3\xcd?\x92\x92B\x165\x0b0\x00\x18\ +\x8b\x19\x9a\x05w\x84u\x04\xbf\x22*\x00\x82\xf8\xc3g\ +.\x0a\xfa\x1f1N\xf4\x18\xe5\xff\xa5\x1bPW\x09\x0b\ +\xa7\x09\x5c\x83\xc2\x02\xba\xd1\xc6\xa0\xc3\xce\x1dL\x1f\xc4\ +\x0f\xfe\xa7\xfcw\xf9\xb1/\xc4P\xac\x9e2\xa6c\x03\ +\x000\xc5\xf6\xd5\x87\x81\xb1A\x01@\x08\x91]>+\ +=\xc4MD\xa8\x80s\x15\xdaL\x9e\xb5\xcb\x88\x80D\ +O\xd0\x81 \xc9\x00L\x14V\xffp\xb5\xdbT\xdf\xcf\ +!\xd8\xb0sG\xd5\x07\xe6\x94\x09\xb2\x18|\xe7\x0b7\ +\xa8\xa7B\xd6d\x81!A\x11\x88E\xc3\xba)\x82\xd2\ +N\x06IB\xd0\xa2\x0e\x03\x0c\x00\x86a\x90)\xc7\x1c\ +k\xe8\x135\xab\xea\xb4\x0f\xce\xdce\xb4\x91\x8f\x82R\ +_P 0\xb6\xc8\xd7\xfeq\xce\x92f\xc3\x8e\x7f\xd8\ +\xb9#\xeb\x83I\x13\xe4N\x1a\x5c\xa5o+\xc6V\xcf\ +\x1b\xd4\x85\x04{\xd6lMo`\xe4\x00S\xbeJ\x07\ +\x10\xb5\x06\x80z\x0c \xd4\xa6_\x08\xc9:\x9a\x9b\xb0\ +i<\x22\x18\x8d\xc5\x9f\x5c\xdd\x8e\x90\xc2NG\xd6\x07\ +\xb1\xfd\x9f\x91\xffvW\xacQ\xf22\xfe\xfb2`\x03\ +K\xfam\xd0\x8a{v\x9c\x94\x10\x92\x97n3\xb3'\ +\xd9\x0a\xd5o\xea\x91\xce\x86}\x91-\xcf\xd8\x0d\xd4\x07\ +\xc4\x92\x1a\xf1\xc3\xe1\xdd\x15\x10\xdc\xe7C\x08;\x1dW\ +\x1f\x98S&\xc8\xbd\x81O7{u!/8\x1b\xdc\ +V\xa4,0\x89\x8b!\xbd\xf5:\x80\xb1\x98\x91\x18\xd6\ +C\xf7'%\xc2\x93n\xb2\xa1\xa2\x11\x02\xe4\xee`\x0b\ +lc8\x97\xb1\x03\xe9\x83\xbbn\x14\x8bK\x9c,\xe7\ +\xc15\x1eS\x89r\xaf\x06\x04j\x81\xd8?7U\xaf\ +\x03\xacRB\x88\x05\x00F\x10\xa2\xb3u\xdc\xad\xa3-\ +a\x01\x81\xb1\xa4D\x07\x00u\xbbZ\x1evnfZ\ +ZG\xd0\x07q\x19c\x94\xfb\xad\xd9\xa2\x05\xac*$\ +\xa8\x05\xa29i\xb4F\x07\xe4e\xb3\xd9\x1a\x00p\xfc\ +\xf7\xbbk\x88Xa+\xf2\xc67\x1c\x0f\x1chj\x0d\ +\x10:\x80>\xb0u\xbfK\x95\x02\xdf\xae\xba'!(\ +\x1b(U\xd8\xc5\xd6-\x85\xc9\x94B\x00\x0b\x80i\x17\ +\x1bG\xb2\x8e\x9c\x88\xbf\xc3W\xb7;\xa4\xf9\x07\x1dY\ +\x1f\x98Sn\x90\xff\xde{\xf0\x8cnf\x901\x1bX\ +\xd2n\xd6\x03`\x88\xaa+H\xda\x07\x00l]\xa3\xf2\ +=\xbe\xba\xddA\xbaDB\xa7\xd0\x07\x8c5C\x16\x82\ +uNA#\x04\x15&\x10\x02\x05\xa2:\xb5l%\xe9\ +R\x080\xb5\x1b\x06`\xa2T\x11\x84o8\x8a\x16\xe7\ +\x1ftp}0n\x98\xa8\xb5v\x1c\xe1\x94k\xd0%\ +\x80\xf4!\xe1\xe6\x91\x8a>3\x9bI\x86J\x030\x8c\ +\x89\xd5\xae$\xd5\x0f\xee\x5c\x11\x06\x88\xc9\x89\xca\xf7p\ +\xf5{[\x9c\x7f\xd0\xb9\xf4\x81*\xabj\xc8\x06\x81\xcd\ +\xc4\xc8\xab\x86X\x00\x849Z\xcakj\x97\xeb\xd3\xbb\ +A\xbdV7`\xb4z\xab7\x22j\x8bZ\x08ha\ +\xfeAG\xd7\x079\xbd\x14Q\xe7\xa9\xf8B\xb9~C\ +6\x10\x81\xd0;S\xc9\xed\xd8m\xa4\xa7\xdf\xfb\x01\x10\ +f\xe3^_]8\x17\xd2\xec\x80Q\x18\x22P)\x97\ +\x12~\xa3\x5c\xa3\x98\x102\x18v\x0e\x15\x08\xed]\x1f\ +\xe8{M\xe2\xba\x0c\x1d\xe3i\xd8\x80\xc2\x91\x98\x1d@\ +\x042\x00\xf4\x5cq\xf6B\xe8S\xb5\xd5s\xcf\xe4\xae\ +X\xd8 \xe8\x1d\x95\x07\xc4]\xde\xab\x1d\x22\x15|\xa1\ +\xcfO\xech\xfa@\xdd\x0b\xd0\x5c\x1f\x17x\x9f:\xff\ +\xf5\xbfL\x00\x04\x9f\x8fn3\x9b\xc9(\x00p\xfbB\ +\xff\xfd.\x09\x0c.]V\x00\xc37\x1e\x0f\xbb\x80\x83\ +)\xbe\x00\xdc\xe5\xfd\x91\x0b\xc1\xc6\xe3\x00&J7/\ +\xc3\x02T\x1a\x00#\xc4\xff0\x18\xd5\x83\xd2n;\xa3\ +\x00\x01\xa0TU\xdcRZ\xff\xc85\x1cS\xd6\xef\xeb\ +7\xb3\x0ar\x8cr\xce\xb0\x17\xc1X\xd3n\x0aR\x22\ +W\x02\x18\x11\xaf\x13\x94J;\xa9\xa8\x98\x80\x18\x96\x80\ +\x90\x0b7\x9a \x97\xf9P=D\xd7Y\xb0\xf6\xec\x16\ +/\xacG:\x8b\xa3\xa5\xaa]/*V\xc1\x92~k\ +\xd8\x00\x88\x8a\x0e\xa8)\x86\xe0\xb9(\xd7\x1a A\xf2\ +\x5c\x94o\x04\xd7p\x02\x1d\xa1\xb9\xcf\xbc\x8e\x84kV\ +\x04\x82@\xd6(\x0a\x99S\xca\x80@P\xd5\xe5l^\ +\x97\x98\x00P\x8e\xc7V\xb3\x19r\xce\xd0\xd5\xe4D\xac\ +\xbd\xe5\x0b\xcbL\xd5\xf6\x22}\xce\xf0\x8b>\x99\xe2\xf3\ +\xa3\xd3\x15tW\x80wW\xa035\x81k\x80\xeb\xec\ +\x1b\x88\x1d\xf4JP\x06\x90]X\xcd\x06\x0c\x8b\x96\xe6\ +\x5c2\x00\x04\x8f\x8f\x9eU\x1f,\xab\x0c-n\xa5$\ +k7\xf8\xfe\xbc\xd8\x1b\xd1\x8dZ\x92\x8b\xf0C3n\ +\xf6\xec\x07E\x93{\xb4\xfb\x10\xca\x13b\x03V[\x0b\ +\x81\x021\x18\x00\xbc>h\x00Pr6\xb4\xc5\x1a\xac\ +=\x1b6\xd5\xfc\xd1\xe3e<\xa8\xb7:|!\x187\ +\xe8\x07K\x1bi\x80tE\x03\x9c>uT\xd5\x15\xef\ +\xa9\x8a\x06\xbe\xc0I\xb8\x86\xc5%\x0c\x00\xb0x\x95{\ +C\xb8=\x81\x019Z\x91\xe1:\xf7n\xd87j<\ +\xa3\xe8\xean1}\xe6#n\xc8\xdbA\x1c\xb0\x87&\ +\xbek\xd9@\xd1\x08\xf5u\x17\x9b\x05\x00\x05\xc0\xf1<\ +\x95\x07\xf8\xdd>Q\x08\x86\xd2\xfaei'\x90\xb8/\ +\x86_\xbd\x83\xb1\xa6Ee`\xa834S\xdc\x00$\ +\x15}\x8d\x98>\xf35\xc7\xd7\xef\x16\xc3l\x82\x83@\ +=\xb7R\x03\x04]H8q\x8ek\x11\x00\xbc\xd7\x87\ +-\xea\x13\xe5\x17B+\xdc\x90\x99\xa9\xcd\xe2\xbd\xb5\xda\ +\x1d\x99\x0eH\x9dxU\x1b\x9e1\xc5\x226\xef\xff#\ +\xb1hm\x80\xea\x17<\x17\xe5ixC\xfb\x99\xb4\x13\ +le\x8f7\x08\x09-\x88@\x00\xe0\x9dMt\xb3\xfa\ +\x84\xbe\xd0S\xd0/\xb0\xa4if\x12\xd7:)\xdc\xe7\ +\xde\x8b\x00\x007^\xb5\xc6\xb7u\xbf\x13I\xd7m\x17\ +\xe7\xf4\x1bt\xdf|U\xeb4]p\xed<@o\xc0\ +g\xfc!\xc1_P\x12\x00x\x9e6AUXZ\xce\ +z\x1c-\xe55:\xe0h)\x0f\xca\x87\xb6hC=\ +\xff\x1c\x00\xce\x1d\x0c_\x07\x10\x93\x03\x96\xb4\xab\x8b\x05\ +l\xdd\xa6!\xe9\xda\x0d\x88\x1d\xf8\xbc6%\xae\xa3w\ +w\xf9R\xf9TF\xd7,\xc3)`F!A]\xa4\ +\xbb\xc9\x833J|\x00\x95\x01\xb0\xe5\x80\xafZ\xad\x03\ +\x00\xa0\xf2\xc2\xa9\x90n\xa0G\xb66\x8d\xfb\xce\x17\xee\ +\x88\xd2\xc2W\x03\x0b0\xa6XX\xbbNA\xd2\x98u\ +p\xf4\xff\x0b\x18[\xb7\x16\xd3\xca\xce\x8b\xc5\x81y\x13\ +\xa3\xc5\xbb*6\xf0V\xae\xd1\xe6Ix\xda\x08\xa5\xa8\ +4U\xe7=}\xce&\xbaT\xfdf\xfd\xca\xdf\xa0^\ +\xcb:\xa4UAJk:\xf5bDI!\xd6\x96\xde\ +)\x0d\xcf\xda\xd2\xe1\xc8}\x1c\x89Ek\x11\xdb\xffY\ +iRlh\xe3\x0bK\xd7\xbaU=\xa61\x01c\x19\ +Fl 4i\x9d\xd8\xd9DOC\xb5\xdd\x8c:\x95\ +\xc7\x95V\x08\x9f\xe9u@\xc8a\xa0\xc0\xaa\xf9\xff\xbf\ +\x96\x1c\x8a('`\xcd\xfcI\xe7\xf2\xf6\x8c\xc9\x88\x1f\ +\xb2\x08\x09\xa3\xbf\x825\xf3\xa7\xe2f\xda~\x0f\x0ea\ +\xfe\x81\xfb\xfcRY\x00\x8e\x19d\x96\xcey\x03V\x05\ +i\xd8\x00\x02\xbcu{5\xd7\xd2\xe8\xa2\xfe\x0d&x\ +5\x03\x00\x00\xff\xc5V\xef\x09}\x188w6\xb4\xf4\ +.\x1b\xdb_\xd3%\xacuR4\x94\xfc!\xa20\x10\ +\x8d!\xe2\xef\xb3YR\xc6\xc1\x91\xf7G$^\xbb\x11\ +\x8e\xbc\xa7aJ\x1c\xaed\xe9\x82\x94\xcd\x0b6\xff\xc0\ +u\xea%\xf9\xadEC3T\x9f\xf1S~ \x1b\x80\ +\x0a\xf8v\xb76;[vI8\x09\xd5\xde\x02j\x00\ +P)\x0c,S\x7f`\xed\xce\xd0\xd3\xbb\xfa0\x101\ +\x0bt\x9d\xda\xa1\x0cNL\x0eX\xd3oA\xec\x80g\ +\x91T\xf45b\x07,\x805\xed\x96\xd0\x87\x9dU\xc9\ +\x1b=\x10\x16\x7f\xa4d\x00\xad\x19\x93\x95E 2\x10\ +\x02\xd9@\xf0\xd5a\xefqm\x18\xdf]\xc2\x1d\x83\xb8\ +\xaf\x801\x00\xf6\x1c\xe54\x12\xfe\xd2e\x1a\xf2\x22\x90\ +\xf4\xccA\x01]\xc2HX\xc0\x9a1\xa5\xdd\xb3\x00\xeb\ +\xe8\x0d{\xd6\xbd\x88\x1f\xb2\x08\x89\xa3V#&\xf7I\ +\x98\x93\xaf\x97\xae;:\xd3\xd2\x5cg\x16\xca\xf4?0\ +\x87\x15gcQ\xc1\x188*\x10x/\xad\xd5\xc7\xff\ +\xc3\x92\xf1\xbdF!\x00\x00\xf8\x9dG\xb8J\x97\x9b~\ +\xac>\xf8\xed\xae\xd0\x93;wM\x88\x09`\x81p{\ +\x04\xc4\xe4hw,\xc0:r`\xed:UL\xd6\x8c\ +\xfc\x04\xf1\x85\xaf\xc3\xd6\xe3g\xe2\xbcF\x83\xfa\x07-\ +\xceOT\xd2<\x086-\xed\xe0F\xa5\xe4\xcb\xad\xd7\ +e\xa8*\x83AY\x17h\x10\x12\x5c\x97\xb4\xd5T\xeb\ +\x9c\xc2!\x88\xfb\x09\xf8\x19 \x00\x00\x02\x00o\xd5e\ +\xe1\x03\xbd\x18\x14\xbc\x95ak\x81S\x9b\x1e\xea\xb0,\ +`J(\x80\xb5\xeb\x148\xfa=\x85\x84\x11\xcb\x10W\ +\xf0*\xec=\x1f\x80)i\x942-\xae\x99\xfa\x07\xe1\ +\xccOT\xb3\x01\xe7<\x8c\x15\x1b\x00n\x09\x00\x82:\x11\xa4n\xdc\x07k<\xeb|\ +>\xaa)\xe1\xbdy\xd7\xf9\x90\x1f\xda\xed\xe33\x03\xf2\ +\x02\xe1f\x07\x89\xc9q\xc5\xf2\x02\xc4\xe4\x80%\xb9\x08\ +\xb6\x1e\xb3\x10;\xf09$\x8e^\x8d\xd8\x01\x0b`\xef\ +\xf9 \xcc]F\xeb\x80\xd8\xfc\xb2\xf7\xe6\xca\xe2\x18&\ +z\x82\x84\x85\xfa\xdd3\xe5\xb7O\x1ci\x011\xc5)\ +\xdf%\x17\x8bT2\x7f\xb2\x11\xeb\xf7\x07\x14\xf0\xd8\xbc\ +\xcf\xb7\x07\x80K\xd5\x0b0\x04\x00\x0f\xc0]\xeb\xa4\x8b\ +\xd4\x07\xb7\x1e\xf4\x85\xcc\x02\x8c%\x0dS\xc6j\xbb\x85\ +\xaf\xbd\xbe(lA\xe8\xdf\xaf\xa0-\xfa\xe4\x96\xb4\x89\ +\x88\xe9\xf3\x1b\xc4\x15\xbc\x8a\x84\x11\xcb\x10\xd3\xf7\xbfa\ +\xcb\xbc\xa7\x15\x13TB\x13r\xad\x0a\x0b\x12\x10|\xd5\ +\x9b\xf0\xfc\xfb\xf5\xf2\xd7\xf6\x1dr\x17\x94\xa9jT\xf9\ +M\x83\x90Psr\xa9\x9e\xfewI\xf4\xef\x86\xb2\xcf\ +\xa0!\x00(\x00\xdf\xe2U\xee\xb7y\x9ej\xdc\xfe\xd3\ +o\xcbB~\xb8y\xfd\x0b\x02\x04\xe1\xb6\xe53\xc33\ +T\x94\xd6\x0d\x88\xf1[E\xe7C\x16#\xa6\xf7c\xb0\ +\xa4\xde\x18\xe1(d\xeb\xca\xe2\x84\x1a\x16\xf6}\xf9\xa0\ +|z\xfa8+\x18[\xa6X\x9e\x07\x82\xce\xebul\ +@\x05\xac\xda\xa2\xa5\xff\xb2Ja\xbb\xe4\xfd\xfe=\x85\ +(\x10|\xd3(\x1e\x80\xbb\xfa2}1\xad\x0byN\ +=>\xc07\x1c\x11\x8b@\x87\x22\x08'\xa6h6K\ +\x5c\xbd\xd5\x8b\xfc\x81\xf3\x10W\xf0jX\xd4\xec\xad\xde\ +\x12\xb2g\x13k:\x18k\x868\xc4\x1c\x93\x03S|\ +\xc1\x15\xd0\x12\xc6\x13I\xc5\x9b\xf0\xff\xcd\xc0\xbf\x9f\x93\ +8Q\x95\x97&\x982\x0a\x10\x00\xb8\xce.\x96c?\ +\x00\xf4\x1b2U\ +\xe8\xbd\x7f\x81\xce\xfb\x0d\xd7}\xb7\x16\x00\x14\x005\x99\ +\xc8\x8e\xccTv\x06!\xb0\xa8Eanz\x0db\xe3\ +[\x07\x82\x91\x05\x898w\xbeZ3su\xdb!\x0e\ +\xae\xf2\xe5\xc8\xe9\x9d\xd7)C\x82\xfb\xdc{x\xf5\x1f\ +\xcf\xa1\xbcJ\xd0\x19\xfffhWzR\x95\xc7\x0b\xda\ +\x90@\x18\x10\x00k\xbf\xf8\x0fN_\xd0f\xfd\x0e\x9f\ +\xe6\x17\xed?\xc1o\x07p\xa99\xefo-\x00d\x10\ +\x94V\x08uY\xe9LEb\x1c\xa3Y\x0b\xbe\xf78\ +\x87\xd1\x038q\xcb\x98P{\x07\x8c\x05\xf9\xb9\x09\x10\ +|u\x911\x0e\xcc\x00\x00\x08\x8fIDAT\x9aE\ +\xa9e\x97\x04lX\xff5Ft\xdf\x05k\xfa\xa4N\ +c\xfc\xfa]3\xb1`\xe1\x06\xb8U\x13\xad~33\ +\x06\xd6\xf4\x89\x92aU\x00\x90\xfe\x96=^\x17\x12\xaa\ +\x8e\xbf\xa7\x94\x8d\x95\x9a\xb3\x89\x1e\xf9`\x8d\xe7e\xc9\ +\xf8Ac\x7f\xb8\x00\x90C\xc1\xc1S\xfcI\xbd\x1e\x00\ +\x80=G\x1a1\x22\xaf\xf5 \xc8\xee\x91\x81\xac\xa4j\ +\x9c8\xc7kBB\xf1\x9eJ\xb8J\xdfC\xcf\x1e\xa9\ +a\x17\x9fh/\x94\xff\xe5;\xf7b\xe9Zet\xcf\ +a#xtf\x0a,)\xe3\xa45\xdd\x04D62\ +\xd5\xa5\x0b\xfd\x95\x0eD\x06\xe0.\xef\xc1K\x1f\x94\x05\ +t\xfbVm\xf1>SSO\xcfJ\x00\xb8,u\xfd\ +h4\x01\xa0\xd6\x03;\x0asM}\xadf\x22W.\ +\xe2\x84\xf0@\x00\x00\x09I\xe9\x18\x91\xc7\xa1\xac\xc2\xa5\ +\x09\x09e\x97\x04l\xdcT\x8c\xc1\xf1K`\xe92\x12\ +\x8c%\xb9C\x09\xbd\x86C\x8f\xe3\xd9\x17\xdeG\xd9%\ +\x05\xd99]Y\xdc7\xad\x0fL\x09\x83\xa5\xc7)y\ +9\xa5\x8a\xc6#P\x8e\x13%$\x08\x9e\x0bx\xf9\xad\ +\xad\xf0\xe9\xfc\xfad\xb9\xf0a\xf1~\xdf\xb7\x92\xf1k\ +\xa4\xd4o\xb3+}#)\x13\xcbB\xac<\xdd\xe5\xb1\ +\xbb\xed_[-\xa4\xaf\xfa\xa4\xcd\x0c<43-\xa4\ +J#F\xad\xe4\xc8~\xac\xdc\xe41<\xf7\xeb\xbb\xed\ +H(|\xb9\xdd3B\xd3\xc9\x17\xf1\xfa\x9b\x9f\xa0\xd6\ +\xa9u\xc0\x1b\x86\x9a1\xf2\x9a\x11\xca\xd4pb\xd2\x0e\ +\xf0\x00Rq\x07\xa8J\xbc\x88\xe7(\xef\xc2\xd2\xe5\x9f\ +\xe3d9\x1f@\xfd\xaf-w\xcd\x07p\x1e\xc0\xc5\x96\ +b\x7f4\x00\x00\x88\x83I1y\xd9l\xce\xcd\xa3,\ +\xcb\xac\x16\x92\x1bM\x10\x08\xdeJ|\xfam\x99\xa6\x0c\ +\x8d\x1e\x08\xb1}\x1e\x09\xbb,M[y\xbc\xeb\xdc\xbb\ +\xf8h\xf9\xa78^\xa6\xbdn\x87\x8d\xe0\x97Sc\xc4\ +A0\xc2hF\x00\xc5\x7f,\x01\xb99\x11\x08\xca\xd0\ +\xef\x92\xa5\xcb\x02\x8c\xcf\xf3\xb4\xe9\xcd\xcf\xdd\xbf\xa8\xa9\ +\xa7'\x01\x5c\x90b\x7f\x13B\xd8\x92-\x1a\x85\xa2\xcd\ +\x00\x1c}2\xd9^\xb7\x8d\xb1\xfc\xc7\x08\x04sn\xb7\ +#69\xfc\x120|\xc3\x11,\xfd\xa6)`\x8c\xdb\ +\xdfr3YL\x9f\xbe\xef\ +8\xb7S\xf2\xfeK-\x09\xbfh\x03\x80H \x88\xed\ +\x93\xc9\xf64\x02\x01\x00\xdcw\xab\x0d\xe9\x99\x91U\x00\ +\xa9(;\x80U\xc5\x9e\x80\x9dJ\xd4m\xd4@\x13\xc6\ +]W\x04K\xc6m\xad\x1an\x0e\xd7\xe8\xees\xef`\ +\xe3\xd6\x12M2G\xdd\xfag\xb3\x98<>\x1b\xc4\x9a\ +\xae\x8c\xe5\xabi\xdd\x08\x04\xf2{\x14\x10\xec\xde\xf6\x85\ +\xa1\xf1\x0f\x9e\xe4^_\xb5\xc5\xbb\x5c\xf2|\x7f\xda\xd7\ +\xd7\x12\xf5G\x13\x00!\x83`t\xbe\x19\xd7\x15\x0d\x8e\ +\xf8\xc7\xf8\x86#\xf8l\xb3+hh\xf0\xb7\xa48\x82\ +\xc9\xd7Z\x91\xd1\xbd\x0f\xac\xe9\x93\xc0:r\xc3f\x08\ +\xea\xad\x86\xafv;<\x15\xabp\xb1\xfc\x04>\xdb\xec\ +1\xf4t\x7f\x1b\xda\xd7\x84\xf1\xc3m\xe2\xec)\xa2\xf3\ +x\x90@O\x0f\xc2\x06\x94k\xc4\x86\x8d\x9b\x02\xc6\xf8\ +\x01\xa0\xbc\x92\xff\xf2\xbd\xaf'\x1e7\xe9\x82\xc4\x8f\x5cW<~\xe3\x5crY\ +\xe0\x99Q3\x9b\x99'\x8e\x12\x8b\xa5.V\xba\x98\x95\ +M\x8dx\x8a8\xa6j:\xe5\x0b9\x8fU\xce[\x9c\ +\xb5j\x9d\xb5\xef\xc9_\x18)\xe8+\xcb\x5c\xa79\x82\ +\x14\x16\xb1\x04\x89:RPG\x05U\xd8\x88\xd3\xaa\x93\ +b!C\xfbI\x1f\xff\xb0\xeb\x97\xc8\xa5\x90\xab\x02F\ +\x8e\x05\xd4\xa0Av\xfd\xe0\x7f\xf0\xbb[\xab8\x99\xf0\ +\x92\x22I\xa0\xf7\xc5q>F\x81\xd0.\xd0j8\xce\ +\xf7\xb1\xe3\xb4N\x80\xe03p\xa5w\xfc\xb5&0\xf3\ +Iz\xa3\xa3\xc5\x8e\x80\x81m\xe0\xe2\xba\xa3){\xc0\ +\xe5\x0e0\xf4d\xc8\xa6\xecJA\x9aB\xb1\x08\xbc\x9f\ +\xd17\xe5\x81\xc1[ \xbc\xe6\xf5\xd6\xde\xc7\xe9\x03\x90\ +\xa5\xae\xd27\xc0\xc1!0V\xa2\xecu\x9fw\xf7u\ +\xf7\xf6\xef\x99v\x7f?k2r\xa4\x8d\x91;1\x00\ +\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\ +\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\x0d\ +\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\xe5\ +\x0a\x03\x07!/\xf0Y\xa9\xe1\x00\x00\x04\xb4IDA\ +Tx\xda\xed\xda[LSw\x1c\xc0\xf1\xef\x01Z\xda\ +\xd2\x02\xa5\x5c\xca\xc5\xb9r\xd18QD\xdd\x92-1\ +Q\x861\xd9x\x22\xc6]\xd8\x02\x8b\xc3\x07\x1e\x96%\ +\xcb\x12\xd1%\xdb\x8b\xd1'\x92\xb9\x98]\x94\xa8$\xf3\ +A\xe3\x96lxA%s\x0fb\x82\x99c\x19\x8a\x5c\ +\x84\xa0\xdc\xca\xa5\x05\x01\xcbZ\xda\xb3\x07\x06a\xa3\xac\ +\x08\xa7\xa7\xe7`\x7fo\xed\xf9\xe7\xdf\xf3\xff\xf4\xff\xff\ +\x9d\xff\xef\xdf\x0a\x04\x88\x9d\x15'\x8c\x93\xa2x\x5c\x80\ +\xbd\x80\x09\x99b\xf7\xf6\x9c\x93G\xf6\xef9\x10\xec\xcf\ +\x89\x08\xd4\xc0\xe5\xf3U\x09\xf0\x81\x9c\x83\x070Dk\ +\xca\x0fW\xd7}\x17r\x00Q\x10\xf6\x12\xa20Dk\ +\xca\x0f\x9e\xbc\xfcmH\x01\x003!\x0c\x93^w\xe0\ +\xd3o\xae\x9c\x0e%@\xc8#\xde\x18]\x16,\x04U\ +\x00\x04\x13A5\x00\xc1BP\x15@0\x10T\x07 \ +5\x82*\x01\xa4DP-\x80T\x08\xaa\x06\x98E\xf8\ +\xe4\xebK\xa7\x9f[\x00\x80\x04\x93~\xd9\x08\xab\x02`\ +%\x08\xab\x06`\xb9\x08\x8a\x05pO{eAP,\ +\xc0#\xfb\xa8,3A\xb1\x00-\xdd\x83<\xec\x1b\x09\ +\xfaL\x88R*\x80O\x14i\xee\xb2\xd3\xdce\x07\xc0\ +\xe3\x1a\xc7=\xf1\xcc\xb3\xa2\x8c\x99\xc3\x1c\xf5'A\x8d\ +\xde\x84\xd6\x18\xff\xfc\x96\xc3\xc1BP\xddcPj\x04\ +\xd9r\x80A\xa7\xa1 ?\x9bM\x99VlV3f\ +\x93\x1e\xb3I\x8f^\xabalr\x8a\xb1\xc9)\x1cO\ +\x9eR{\xfb\x01W\x1a[\x03\x22\x00\xcb\xc9\x09\xa1\x03\ +\xa8\xaa(\x22?;\xcd\xef5K\xac\x01K\xac\x81\xcc\ +\xd4\x04\xb6\xad\xcb\xc0\xe5\xf6p\xb3\xa9S\x16\x04Y\x96\ +\x80 \xc0&\x9bu\xeeu\xeb\xe3!\xdaz\x86\x17m\ +\xfb\xee\xeb[d[\x0e\xf2\x00 \x10\x15\x1917\xf8\ +\xb2c\x17(=z\x9e\x8e\xde\x11\xbf\xed\xb3\xd3-\xb2\ +\xe5\x04E&\xc1\x18\x9dV\xb6\xc4(\xfbFh\xfd\x9a\ +$\xceV\xeeCx\xc6oz)\x08\xcb\xc9\x09\xb2\x00\ +\x88\x88\xd4\xdf\xedX\xb8\xdf\x1f\x1c%\xc5l$w^\ +~\x98\x1f\xb9\xb6\x14\x92\xe3\x8dt\xdb\x9d<\xecs\x04\ +\x05A\x1e\x00\x11\x0e\x9d\xaa\xf3{\xadp[6G\xf6\ +\xfb\x07x{W\x1e\xbb\xb7\xe7\x00\xf0\xfd\x8d&\xbe\xfa\ +\xf1\x16\xa2(-\x82\xe4\x003Y<\x9f\xe2\x1d\x1bI\ +K\x8c%B\x10$\xe9\xb7\xa4p\x0b]\x03\x0e~n\ +h\x91t&H\x9e\x04\xdf+\xdc\xcaG\xc5\xaf\x91\x91\ +\x14'\xd9\xe0g\xa3\xfc\xcdW\x96\xdc\xa7FoB\x1b\ +\x13+/\x806*\x92\xd2=[%\xa9\x04gf\xd3\ +\xbf\x07\x9bb6\xb2\xd1\x96\xb2\xf4\xc4h\x88\x93\x17 \ +?'\x0d\x93!z\xc5\xfd\xf4\x8f\x8c\x03\x90jY\xf8\ +\x97\x84\x97\xd6&+\xb7\x18\xda \xc1\xcdM{}T\ +_\xbe\xc3\xe6L\xab\xdf\xfe^H\x96\xb6\x1a\x944\x09\ +\xa6Z\x16_s.\xb7\x87\x8b\xbf6\xd3\xde;\x8cg\ +\xda\xe7\xb7\x8d{\xdaK{\xcf0\xd1\x9aH\xaa*\x8a\ +\xfc\xaew\xa3>Z\xb9\x00z\xad\xff\xeez\x86\xc6\xf8\ +\xf8D-\xd3^/\xd9\xe9\x89h\xa3\x22\xfd\xb63\xea\ +\xb4\xbc\xb5k3\xc5;r\xd1-\xd2\x97\xeb/\x8fr\ +\x01&\x5cn\xbf\x09\xed\xf33\xd7\xc9\xcbJ\xe5P\xc9\ +N\x22#V\xb6\xea\xfa\x1d\xe3\xca\xcd\x01\xdd~Nr\ +\xef\xfds\xae\xf7\xe1\x1b/\xafx\xf0\x00-\x8f\x06\x95\ +\x0bp\xbf\xdb\xbe\xe0=\xbbsb\xe6\x11\x96`\x5cq\ +\xffO&\xa7hj\xefS.\xc0\xbd.;\x83\xa3\x13\ +\xff\xd9\x06\xcf<\xd3\xa5\xd8\x14\x9d\xa9\xbb\xbb\xeccr\ +Y\x00|\xa2\xc8\xa9Kw\x90\xba\xcf\x9e\xa11\xbe\xbc\ +x\x8bs\xf5\xbfK^\xa7H^\x0b\xfc\xd4p\x9f\xb5\ +)\xf1\x94\x14\xe6\x07l{\xb8\xba\x8e\x1b\xbfu\x84\xf4\ +\xecAr\x00Q\x84\xe3?4P{\xfb\x01/Z\xcd\ +\x0b\x96\xc4\xfcx\xa7 \x8f\x82\xfc\xacEq\x02U~\ +\x8a\x04\x98\x8d\xce~\x07\x9d\xfd\xff_\xc3\xe7\xda\xac\xe4\ +\xda\xa0\xadg\x18Q\x14Y\xbf&i\xee\xdag\xd5\xd7\ +\x10\x09\xbe@\xc8\x8f\xc4:zG(=z\x9e\xb2c\ +\x17h}<$\xfb\xe7\xcb\x06\xf0t*\xf0\x0eN\x90\ +\xb8|V\xcc\x89\x10@{\xef0yY\xa9\x0b\xde\xcf\ +N\xb7PS\xb9\x0f\x11X\x97\x91\x08\x80g\xda+\xcb\ +\xf4\x97u\x06\x9c\xaboZ4\xa9\xe5d$\xce\x0d\x1e\ +\xe0\xcf\xce\x01Y\x12\xa0\xac3\xe0fS'_\x9c\xbd\ +N\xd1\xab\x1b\xb0\xc4\x1a\x88\x8b\xd1\x11\x17\xa3\xc3\xe5\xf6\ +\xe0\x1cw\xe1\x1cw\xd15\xe0\xe4\x8f\x8e>~\x09\xf0\ +\xab\x90*\x01\x00\xae6\xb6q\xb5\xb1\x0d%\xc5\xaa\xfa\ +\x93T\x18 \x0c\x10\x06\x08\x03\x84\x01\xc2\x00a\x800\ +@\x18@b\x00\x87\x8a\xc77\xb2b\x00\x11jT;\ +|Q\x0cx\xef\x01\x8b!g\x94\xef`\x82W\x88B\ +\x14\xde\x07\xe2T2\xf41\xa0\xc6\xa1\x11+\x035\xfc\ +\x1b\xcd^\x99\xc5\xa3\xd7\x0e\x80\x00\x00\x00\x00IEN\ +D\xaeB`\x82\ +\x00\x00\x036\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x04\x0c\xde6Ea\x00\x00\x013ID\ +ATh\xde\xed\x99\xc1N\xc2@\x10\x86\xbf\xa94`\ +\xc2+\xc8\x0bx\xd0D\xef\xf2\x16\xea+p\xe5\x84\xe1\ +\xd0\x0bp\xc1\xab\xaf\x80\x8f\xe1\x03H\xc2\x853I\x9f\ +AC\xec\xc6\x8ew\xe36\xb4B\xbb\x81\xf9\xaf\xd3\xdd\ +\xcc7\xfb\xcf\xee$\x05\x93\xc9djRR\x14L\xd6\ +\x83n\xe6:cE\xee\x81\x1e\x10\xd5\x94W\x0e\xa4\xa2\ +\xba\xc8\xa2h2\xbf\x9a\x7f\x96\x06H\xd6\x83\xee\x97;\ +\x7f\x03n\x9a-\xb1\xbc;\xe8\xfb \xbc\x15\xcd\x5cg\ +\xdcx\xf2\x00\xaa\xb7q\xaeO\xbe\xb0\x17@\x91\x87\x80\ +\x8c\xfeX\x1a\x00\xb8\x08\xa8W{\xbe@\xab`Q\xe5\ +\x86\x9d]?\xff\xd9[\xa3\xd5P+ny\xb6\xf7$\ +C\x91\x01\x18\xc0\xa9\x03\xb4\x0e\xb1\xe9?n\x1b\xb3\xd0\ +i[\xc8\xf7\x80\x1d\xd2Zf\xa1\xa3\x02\x18\xad\x86Z\ +\xe7\x0dd'`\x00\x06`\x00\x06`\x006\xcc\xed:\ +\xc8\xfd\xfef_/\xb6Y\xe8h,T\xf7\x10\xb7\xcb\ +\x09\xe4\x01\x15\xfa\xbb\x0a@\x1a\x10@Z\x05\xe05\x98\ +\xf4\x95Ei\x80v\xbc\x9d\x00\xcb\x00\xd2_\xbaH\xa6\ +\xa5\x01\x92\xcb\x97\x8fv\xbc\xed\x8b\xea\x0c\xd8\xd4\xdc\x13\ +9\xb0A\x99:\x91\xbb\xa2_L&\x93\xc9\xd4\xac~\ +\x00\xe1\xe5R6D<\x5c\xb4\x00\x00\x00\x00IEN\ +D\xaeB`\x82\ +\x00\x00\x03y\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x10\x0a\x19\xfb7\x01\x00\x00\x01vID\ +ATh\xde\xed\x97\xcfJ\xc3@\x10\xc6\xbf\x99M\xea\ +\xbf{\xa1\x8a\xa2\x82W}\x10\x9f@P\xc1\x83\x07\x0f\ +\x82O\xe0;\x08\x1e\xacG\x8f\xbe\x80\x07\x11|\x00Q\ +\x04\xe9\xa1\x8az\x91\x82\x82\xc5\x9b\x88\xe9x\xa9a\x0d\ +\x89M\xe9fKt>Xf\x076\xcb\xfc6\xf3m\ +\x08\xa0\x1a\xae(\xcf\xa2\x97\xd6\xd5\xb2\x80\x0f\x01Lz\ +\xaa\xea\x09B\x9b\xd5\xda\xe2I\xaf\xa5\x9cg?!\xae\ +{+\x1e\x00\x04S\x80\xd4\xf3,\x0d\xf2o\xd8\x9d\x8a\ +\x14{\xf8\x147\xc5\xb4;\x00K{\xfb\x07\x85\x02\xec\ +lo\xf5\xb5\x9e\xff\x85\x89\x9f[\xd72\x8c\xe2\xaa\xb5\ +%r\xdeB\x1e=\x00\xf5\x80z@=\xa0\x1eP\x0f\ +\xa8\x07\xfe\xbc\x07\x82\xa2\xdb`v\xbc\x8d\xf5\x99\xcb\xfc\ +\x0f\x9c\x9e\xc5\xd3\xf7\xa3\x85\xe4\xeb~\x14\x92\x8d\xb1\xb5\ +\xbbso\x1e\x98\xb8\xd8E\xf8\xd6@hh\xe0\xc3\x10\ +\x01>;\xf2PY\xbd\x9d\xf7r\x0b\x99\xd7\x1b\x98v\ +\x03\x86\xc9\x91?\x80\x80i\xce\xdb5:z\x7f\x0cf\ +\xc0Q\xfd1D\xe65\x9a\xd2s\x03+\x0c\xc8)\x00\ +\x00\xd0J\x93RM<\x12\x12\xca\xa6\xd2\x7f\x89\x15@\ +\x01\x14@\x01\x14@\x01\x14@\x01\x14@\x01\x14\xc0\x09\ +@\x99\xfef~\xfc\x91\x11\x00\x03\xc04[\x1fe\x01\ +\xa8\x00\x88\x00D\x94\xa0\xe2.LZ\xe4\x8c\x9c\xach\ +\x0f\xfb\xa4\xc4\x8a\xf6\xe8X\xf1{D\x19y2J\xbf\ +mc\x17\xc7\xbf\xe4Y-)\x89\xb9\x0d\x90\x95\xabT\ +\xaa\x1e\xfa\x02]\xffz\x0f\x1c\xba\xbd\x04\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00\x04\xbb\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0e\x18\x1b\xbc\x9b5'\x00\x00\x02\xb8ID\ +ATh\xde\xed\x99MHTQ\x14\xc7\x7fgfl\ +\xb40\xc2\x90\x10M\x0c\x8a\x10\x1b!\xcdh\x11\xb4J\ +\x0a[%m\x84V\xedk&?F\x0aAD\x90\xb1\ + \xcdE\xb4)\xda\x14\x11\x99af\xd1\x22\x12\x0aj\ +\x13d\xea\x22\x0a\x13\x1d0hlHtt\xde\xbc\xdb\ +B\xa1\xafyC\x8eo\xc6;4\xff\xe5;\xf3\xde\xfd\ +\xff\xde9\xf7\x9e{\xdf@VYe\x15WJ\xa9:\ +\xa5\xd4\x98R*\xa4\x94\x8a(\xfb\x15Y}\xf6\x98R\ +\xaa.Y\x9f\x92\x00`\x1c(O\xd3\xfb\x1a\x17\x91\x8a\ +dnt$\x88\x95\xa41\xe1\xc5\xc9\xde\x98\x08\xc0\x9d\ +F\x80\xdcT\x00\xe4\xa4\x11`S*\x00$\x8d\x00\x92\ +\x0a\x80\x8c\x90k-?\x0e\x04\x02\xb6\x0c\xea\xf7\xfbm\ +\x03\xc8\xf8\x0cd\x016Z\x89:\xb1J\xab\x11\x11\xf9\ +/3\xe0\xd2\xcd\x90\xf2:\x8f\x03^\x94\x8cb\x1a\xd7\ +\xa4\x8f\x8f\x19SB\xcaG\x1e\xa6s\x1c([\xbdl\ + \xd2\xc56\xa3C\xda1\xf4/!\xd3\xd1\xf8\x8b\xf9\ +\x95\x0aQ\xaa\x8d9g\x9f\xf6\x8dL\xf9(\xc6\x94V\ +\x8bz8\xac\xff$\x8e9\x03\xc0\x96\xf8\xfe\x1d\xcdz\ +\x03L\xbe\x06\xa1!\xbey\x06\xe5\xaa\xf1D_\x00\xa5\ +\xa0\xdfk\xb5\xa0,\xe3\x8a5\xe9\xbd\x0a\xbd\xb9\x05\xb7\ +\xcfX-M\x97\xa5\xc7h\xd6\xb7\x91-\xcd\xc3P\x9b\ +U\xf4\x0bn\xa3S\xefN\xfc\xac\x0b\xc2A\xab\xda\xb8\ +(\x01\xc2\xfav\xe2\xaf\x9f\xe0E\xafU\x01\xbfe\xc6\ +\xbc\xa9\xf7^\xe8a\x0bD#V\xb6\xbcr\x8f\xd8\x86\ +\x9c\xc8\xfe\xe9\xb4\xf5\xe19\xbc\x1b\xb0\x8a\xde\x95^c\ +D\xdf\xdd\xa8\x19\x83\x07\xe7\xad\xa2\x8bH\xacU\xef\xed\ +\xf4\xab\xeb\x10\x1c\xb5Z6\xbb\xa5\x87I}\x01\x16\xe6\ +`\xb8\xc3*:\x8d\xcb\xb8\xa4\xf7\x89\xac\xdf\x07#}\ +VN\x1a\xa4'vG_\x80\xd9\x09\xe8\xae\x82X\xf4\ +\xefX\xd9!\xf0\xbdt\x08\xacy\xccD%d/\xc0\ +@S|\xf3\xe2\x80\x93W\x94$9^\x22\x80\xa8m\ +\xe6\xc7\x1e\xc1\xc4\xd3\xf8\xb1\x9a\xd3PZ\xb3\x9c\x8a\xcf\ +*K\xb6\x01L\xdd\x80\xf2\x9d\xe0\xfcc8w>\x9c\ +\xe8\x04\x88\xa4\x02`\xda\xbe-\xf3\xf7\x15\x80\xda\xfdP\ +Z\xf8s\xe6\xd5^\x80\xadE\x003\xa9\xf8*\xd1\x0c\ +t\x03E\xc0f\xd6\xf5\x7f\xc1j2\xf3\xdcp`\x0f\ +\x94\xed\x80\xcfQ\xc5\x91\xb3\xdf\x80 \xd0b{\x06D\ +dHD*D\xa4@Dre\x1d\x9a[\x5c\xfa}\ +>9$D\xfe|\x8d\xe4\xe4\x16\x88\xc8>\x11y\x9c\ +,\x803-\xcdwj{GxAQY\xea g\ +64L\xe1\xfbj\xa9\x0f\xcf\x90\x09\xba\xdf\xb2\xbb\xc4\ +\xe3\xf1\xa8\xfa\xa3\x95\xe6`\xe3\xdesv??\xe5\xe7\ +\x01\x89R}\xaa\xca\x0c\x1e\xdc\x15\xf6\x1ck\x9f\x0e\x91\ +UVY\xd9\xaa\x1f\xd9\xe98\xa68!J\x19\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00p\xc7\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x01\xdd\x00\x00\x01\xc1\x08\x06\x00\x00\x00,)a\x8e\ +\x00\x00\x00\x01sRGB\x01\xd9\xc9,\x7f\x00\x00\x00\ +\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\ + cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\ +\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\ +\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x06bKG\ +D\x00\xc9\x00\xc9\x00\xc9a\x80\xe6\x0e\x00\x00\x00\x09p\ +HYs\x00\x00.#\x00\x00.#\x01x\xa5?v\ +\x00\x00\x00\x07tIME\x07\xe9\x0c\x17\x0b2\x18\x07\ +\xe8A\x0b\x00\x00 \x00IDATx\xda\xec\x9dw\ +\x9cT\xe5\xd5\xc7\x7f\xe7\xb9\xf7\xce\xcc6\xca\x82\x88H\ +\xb1PL0\xa8\x11\xb1\x1bD\xa3A\xc5\x9a\xb5\x17\xea\ +\xec\xaa\xd1T\xbby\xb3I,1\x9a\xa8I\x8c\xbb\x03\ +\x08\x82-l\xa2X\xa21\xb1`\x02\xc6\x18Q\xb1E\ +\xc1\x82\x82\x02\xca.,l\x99\x99[\xce\xfb\x07\x88\x94\ +e\xdb\xdc\x99{\x9f\x99\xf3\xfd#\x9f(x\xef\x9ds\ +\xef\xf3\xfc\x9es\x9e\xf3\x9cC\x10\x04!/x%\x0e\ +s\xa4\x1d\xeb\x8f\x883P1\x97\x93R\xe5\xc4\x5c\xce\ +\xa0r\x10\xca\x89\xb9\x1c@\x19@\xc5D(\x01s\x84\ +\x81\x9e \x98`\xea\xb9\xf5\xb5\x88\xd0{g\xf7a\xc6\ +z\x00\xdc\xe6\x1f\x12\xaf\x07\xef\xf8g\x04\xb4\x02H\xee\ +\xf8\xf7)\xcd\x8c\xe6\xcd\xff\xed|\xab\xc6\xb9K\xde\xa4\ +\x90\xcf\x98b\x02A\xd0\x87\xd6)\xb1\xc1d\xd9\xfb\x18\ +\x1e\x8d`\xa2=\x09\xbc;\x81\x062x\x08\x88\xfaS\ +\xd45\x00\x02\x88\xb6\xa8'm\xa5\xa4\xdb\x09\xdeV\x7f\ +\xd6\xf9g B\xafv\xfe\xb4wW\xae\xb5\xf5c\xb1\ +\x87\xa7\xe5\x0d\x0b\x22\xba\x82 \xe4\x94\xb7+`\xed\xdd\ +;:\x88\x98G*\xc3\xfb:\x18{\x11h$\x13F\ +\x11\xdc2@\x01\xeaK\x9d\xfc\xf2\x7fI\xfb\xdf\xed\xb1\ +\xfaP\xde\xbe \xa2+\x08B\xd6\xf8\xbc\x02%e\xe5\ +\xe67M\xc6A \x1c\x04\xe0\x9b\x00\xedE\xe4\x99[\ +\x5cP\xea\xb23\xaa%\x0e\xf8\x03\xf9\x22\x04\x11]A\ +\x10\xe0\xd7\x9e\xeb>\xca\x1a\x11\xf1p \x08\x07*\xe0\ +@&\x1cD@$\xef\x15\xb5\x03\x18H~\xb6\xd2\xfe\ +\x9f|%\x82\x88\xae \x08\xdd\xa2\xfe<\x94\x95\x96\x19\ +G\x11\xd48\x05\x1c\xca\x8c\xfd\x09(\x82\x02\xba\xb1\x95\ +\x9a\xd7\x10\xe3\x8daO!-\x96\x10Dt\x05A\xe8\ +\x14+*\x10\xdb\xa5\xdc8LA\x8dS\x84q\xcc8\ +\x88\xb6\x1ac$\x0a\xbbS<\xe0\xbfaZ,\xf5(\ +5/\x02h\x02\x88\xbf\x0e\xa6\x92\xcd+\x83U`\xfa\ +\x90\x81\xf7\xc1\xf8wZ\xd9\xcf\x97\xd6\xe0\x0by{B\ +\x97\x16\x98b\x02A@\xf7\x8f\xe8(s\x8c\x09\x8c\x03\ +\xd3\xd1 \x1cF@L,\xd3\x0d\xd1\xf5pn$a\ +?\x18\xf4s$+\x8dq\x06\xd1\xbd\x04\x1a\x88\x8eC\ +\xe2L\xe07<\xa6\xc7\xd8\xa1\x07\xa23\xd3\xef\xca\x9b\ +\x14Dt\x05\xc1G\xd6OD\xcfb\xcb\xfa\x0e)>\ +\x15D\xe3\x09\xe8)VA\xa6\xfb\xb9\x9cr\xec\xfe\xa5\ +3\xf0y\xc0\x82{\xacA\xea\xf1\xee/\x9c\xf8U\xf6\ +0\xa79\xed\xcc\xee5\x1b\x8d\xf2f\x05\x11]A\xe8\ +\x06MS\xd1/\xa2\xac\xef\x10\xa1\x02\xc0\xb7\x89\x10\x15\ +\xab\xf8\xa9\xba\xfc\xbaY\xeb\x1c\x10\xf4;\x8e\x1a\xd6\x9b\ +D\xe8\x97\xf9\xcfA\x13\xc0\x0f\xa4\x98~_\x9a\xb0\xdf\ +\x92\x17,@\xf6t\x05\xa1\xa3I\xd8\xfaF\xd4\xe4S\ +\x08t\x0a\x03\x07\x92,P\x91\xbd\xfd\x5c\xfaG\xd0\xcf\ +\x105\xcd\xdf\x112\x17\xdc\xcd{\xf7\xa5\x00\xc5\xa3\x84\ +iv\xa5\xf5\x0f\x8f\xbc\xdf=Z\xef>uf\x1d<\ +y\xdb\x82L$\x82\xb0\x99\xd4\xe4\xc8p\x8a\xf0y\x04\ +>\x8f@{\x8bEr\x83\xcd|TQ\xad\xf3\xaf\xa0\ +\xee\xdf2\xcd\x1cm\x19\xf4r6\x17V\xcc\xfc>\x18\ +\xbfkt\x9cY}\xefA\x93\xbcu\x11]A(H\ +\x1a\xa7\xa0w\xb1eV\x10\xd3\x85\xbc)\x11J\xc6\x04\ +r\x19YF\xfd\x12\xb6\xfb\x8fN\xc0\x09L\xf4\xab\xcc\ +:\x02}7G\xbfw\x03\x03\xb3]\xc7\xf8M\xd1\xcc\ +\xe4'\xf2\x05\x88\xe8\x0aB\xde\xf3Y\x1cE}\xc9:\ +\x85\x80\xf3A8\x8e\x00K\xac\x12T\x12\x15\xcf\xb1j\ +\x9c\x8b\x10`-k\xd3r?$\xc0\xc8q\xf2\x98\x0d\ +\xe6:\xdb\xc3\xed\xc5\xd3\x9dW\xe4K\x80\xec\xe9\x0aB\ +>Q\x0d\xd0\xd5U\xc6X\x03t!\x98N'B\x0f\ +\xb1\x0a\xc2Po\xf9/A\xde\xdf0\xdci\xb9\x16\xdc\ +\xcd\xde\x8e\x05\xa2s#\x06\xceu*\xadE\x1e\xe3w\ +o\xc0~8H\x8f_\x10OW\x102\xa6!\x8e\x1e\ +e\xca<\x9b\x18\x97\x81h_\xb1H\xa8B\xcb\x1bV\ +7\xd8\xbb\x0e\xaak\xa3\xe5\x1fr\xd3Xbx\xb9\xb9\ +\x9c\x88\x06\x84\xe4\xe8\xd4*f$Ri\xfb\x0fe\xb3\ +\xb0V\xbe\x10\x11]A\xd0\x86\xe6\xb8u@D\xf1\xc5\ +\x00\x9dK@\x89X$\x8c\xa2\xcbs\xadZ\xe7\xc2\xa0\ +\xee\x9f\x9ef\x9d\xa5\x0c<\x14\xc2\xc5H+\x88\xefK\ +y\xf4;9r$\xa2+\x08\xa1e\xf9DD\x07\xc4\ +\xac\x0a\x05\x5c\x02\xe0P\xb1H\xb8q]:9:=\ +\xfdxP\xf7w*\xad\x7f\x82pd\xc8\x0b\x87<\xeb\ +\xb9t\xe7\xcd\xd3\xd3OT\x03,_\x8d\x88\xae \x04\ +Nrjt\x0f\xa5\xbc*\x22L&\xc2.b\x11-\ +\xaaP5~\x9a\xb4w\xddc6RA\xdc\xbf\xb9\xd2\ +\x1a\x15%,\xd1\xc8bK\x5cO\xdd\xf0\xe8\xba\xf4\xc3\ +r\xdeWDW\x10\x02\xa1)n\xed\x1b%\xbe\x12D\ +gK\x06\xb2v\xa1\xe5{\xadZgbP\xf7\xb7+\ +\xcdZ\x22\x8ak\x98\xed\xfd\x0e{t\xcb\x1b\xb0\x1f\x90\ +\xa4+\x11]A\xc8\x09\xadS\xcd#L\x83\xae\x02\xe1\ +D9W\x0b\x09-w\x91\xf5\x17\xa3W\x09[+u\ +\xde\xebg\xf02\xf6\xe8\xa6e\xeb\xec\xfbG\xd6\xc1\x96\ +/J\x1f\x94\x98@\xd0Il\xedJ\xeb\x1f\x96I\xff\ +\x22\xc2I\x22\xb8\xdaf-7}\xbe>\x1dX\xe9\xc7\ +\x126'\xea\x9e\x5cG\xa0aJa\xd6\xf0rs\x99\ +\x1d7\xbf\xbf\xa2B\xba[\x89\xe8\x0a\x82\x0f\xcc\xab\x80\ +JM\x8bLp*\xcdW6\x8b\xed\xb1b\x15\xede\ +\xf7\xa9\xa0\x8e\x09U\x03\x04FU\xbeX\x92\x88\x86\x90\ +\xa2;\xfa\x97\x9bK\xed*3>\xafB\xe6t\x09/\ +\x0b\x02\xba\xd7\xabv\x14\xac\x8bH\xf1\xf5\x04\xdaC,\ +\x82|jX\x7fA\xa4\xc6\xbe/\x88{'\xab\x8c\xe3\ +L\xa8\xa7\xf38\x8c\xb0\xd8!\xbe\x22V\xe3>/_\ +\x9ax\xba\x82\xd0)O$5-2a\x7fe\xbe\xaa\ +\x14f\x88\xe0\xe6]\xd6\xb2\xddj\xdb\x7f\x0d\xea\xfe\x06\ +\xe8{\xf9\xedF\xd1\x81&\xd4sv\xa5\xf5\x8f\xe6i\ +\xd6~\xf2\xc5\x89\xa7+\x08\xed6\x117I\xdd\x0c`\ +\xb4X#oE\xf7\x1fV\x8d}\x5c0^nl\x88\ +\x01\xf7\x83 \xca>\x06\xb4w\xee\x01\xfc\x17\xd75\xae\ +\x8c\xcdH-\x97\xafO<]A\x00\x00\xb4N3\x0f\ +u*\xad\x05&\xa9\x7f\x88\xe0\xe6\xbd\x14<\x1a\xd8d\ +\xe7\xb9\x17\x17\x8a\xe0n\xee\xeb\xab\x88\xa8\xc20\xbd\xb7\ +\xd3\x95\xd6\x0d\x9fWHe6\xf1t\x05H\xa3x\xbe\ +\x91@\x13\xc4\x1a\x85\x81\x93R{\xc5f\xa5>\xca\xf5\ +}WT \xd6\xbf\x8f\xb5\x82\x80\xbe\x05|6z\x85\ +\x07\xf5\xfdhm\xfa\x11\xf9\x12Et\x85\x02\xa2e2\ +v\xb3,\xf3f\x80. \x92hK\x01M\xfa\x1f[\ +\xb5\xce\x1eA\xdc;]e]\xa4\x80\xd9\xf2\x16\x00f\ +\xfc\xd5M\xab\xcb\x82X\xfc\x08\x12^\x16r\xc8\xb2\xf1\ +\x88\xd8U\xe6\x15\x96e\xbdKD\x17\x89\xe0\x16\x1c\x0b\ +\x02\x9b\xe8\x18\x97\x88\xf9\xb7\x84\x9dO4\x22\xde\xdbv\ +\xa5y\xdd\xb2\xf1\x88\x88EDt\x85<$9\xcd8\ +f\xcf\xc1\xe6\xab\x04\xfa\xb5\xf4\xb2-P\x0f\x8b\xe8\x99\ + \xee\xdb\x127\xc7\x800F\xde\xc06\xc2[DD\ +7\xec1\xd8|;Yi\x1c/\x16\x11\xd1\x15\xf2\x84\ +Ted\xa8]e>f\x1a\xea\x19\x10\x8d\x14\x8b\x14\ +l\xd62\xdb\x9e\x1d\x88\xe8Z$^n;\xc55\x86\ +\x9a\xa4\xfefW\x9a\xf77O\xc4\xaeb\x11\xd9\xd3\x15\ +4e\xedd\x94\xf6\xb0\xac\xeb\x08\xf8!\x11\xa2b\x91\ +\x82\xdfH|\xdd\xacu\x0e\xc8\xf5m7NB\xdfX\ +\xd4ZA\x902\x89\x9dX\x18\xade\xe0\x92H\x8d]\ +'\xd6\x10OW\xd0\x88t\xa5uvO\xcb|W\x11\ +\xae\x16\xc1\x156'\xef\xdc\x1f\xc4}cQs\x8a\x08\ +n\xa7=\xb0\xbe\x0a\x98gW\x9a\x0fn\xb8\x10\xe5b\ +\x11\xf1t\x85\x90\xd3\x1cG\xff\x882\xef\x22\xd0\xe9b\ +\x0da+\xc1\xdd\xd0\xdaj\xef\xd9c\x0e\x1a\x90\xe3\xba\ +\xdd\xa7\xf51\xdf'\xd0\x9e\xf2\x16\xba\xec\xf5\xae\xf1<\ +\xaa\x8c&\xd2\x8f\x8a5\xc4\xd3\x15\x10\xbe\xd2\x8d\xe9\xb8\ +5-\xa2\xacwEp\x856T\xf7\x97\xb9\x16\x5c\x00\ +8\xa5g\xc6o\x975\xd8\xd7\ +\x8c\xac\x83-\x16\x11\xd1\x15rHS\x9552\x06\xcc\ +\x04p\xb0XC\xbf.?`\xfe\x82\x08\xab\x19\xb4\x1a\ +\xe0\xcf\x19\xb4\x8a\xc0\x8d\xf0\xb0\x11\x0a\x0e{\xb4\x9eA\ +\x1e\x93\xbb\x1e\x0c\xc7#\xda\xa8\x08\xa5\xc4\x5cL\xa4J\ +\xc1\xe8I\xe020\xca\x98\xa8\x14\x80\x05F\x8a\x88\x9b\ +\x99\xe8\x93\xb4\x83Wo\x9ba\xbfU\x0dpP\xbf3\ +]e\xdd\xa1\x80\xef\xcb\x1b\xf7\xfd\x03z\xd1N\x1bg\ +\x15\xcdJ\xae\x14c\x88\xe8\x0a\xb9\xf0n\x87\x9bWB\ +Q5A*\xd9\x84TT\xd3`^\x0e\xa2\x0f\x99\xf1\ +\x01\x81?\xf0X}h\x83?\x80\xb2\xd7\x94\xd6\xe0\x8b\ +|\xb7\xc1\xe7\x15(\xe9]n\xad$B/\xf9\x22\xb2\ +s\xb4\xc8e\xef\xfcX\xad\xfb\xb4XCDW\xc8\x12\ +\xad\xf1\xd8 K\xb9s\x00\x8c\x15k\x84b\xe2k&\ +\xc6;\x0c~\x0b\xc0\xdb.\xf1\x9b\x80\xf5\xdeK\xef&\ +W\x06\x11\xce\x0d\x13v\x95\x19'P\xad|%\xd9m\ +\x1b\xc8\x8c\x9b^\x5cjW\x17\xfa\xf7&\xa2+ \x0b\ +U\xa5\xceP\xc4\x09\x82\x9c\xdd\x0bh\x7f\xf4\x130\x16\ +\x03X\xec\xb1z\x8bAo>\xb6.\xb5\xfc\xcc:x\ +b\x9d\x1dq*\xcd% \x1a%\x96\xc8\x89\xf8>\x97\ +N\xd9\xe7\x96\xcc\xc6\x1a\xb1\x86\x88\xae\x00\x1f\xc2t}\ +\xcc\xdb\x094M\xac\x91\xbb3\xad \xbc\x08\xe6\x17=\ +\xf0+6\xb9\xaf\x14BH\xd8/Z+\xcd#-\xa2\ +\x7f\x8a%r\x1auY\xe5\x82\xcf\x89\xd58/\x885\ +Dt\x05t\xb7\xd0\x85u@D\xf1\x03\x04\xdaG\xac\ +\x91U\x91\xad\x07\xf13\x00\xfe\x95vi\xe1\x7f\x97\xd9\ +oI\xb8\x0e\x99\x84\x96\x1f\x22\xd0Yb\x89\x9c\x7f\xc7\ +\x0e\x88\xaf\xb0j\x9c;\xc4\x1a\x22\xba\x02\xbaV\xe8\xe2\ +\xba\xb8y9\x88n\x91\x12\x8eY\xf1\x0a\x5cb~\xdd\ +cz\xc6#\xef\x99\x0f\x1a\xdc\x17\xe4\x08\x06\xfc\xeb\xd3\ +\x1c\xb1>&\xc0\x12k\x04v.{\xc6\xd2\x06\xe7\x12\ +\xf9\xa6!\xc51\x04t\xe2(\x10v\x89\xb2u\x1f\x11\ +\x8e\x13k\xf8:\x11\xad\x00\xf0\xb4\xc7\xea\xe9\xa4\x9b~\ +\xb6\xe7L\xac\x13\xabda2\xb3\xacJ\x11\xdc\xc0\xbb\ +\x16M\x1d^n\xed\xb1\xfeb\xbb\xa2\xd7\xddX/\x16\ +\x11OW\xd8\x99\x970\xcd\x1cm)\x92\ +\xf1\xe8^\xa6\xf2$aG\x8f\x04\xab\xb9K\xd8\x99<\ +:\x01\x07\xb2\xa7+ \xdf\xf7o\xc9\xfa\x03\x11*\xc5\ +\x1a\x1d\xb71\x03\xe3Y\x8f\xa9\xf6\xfdu\xe9G\xc5\xab\ +\x0d\xb9\xe7\xc0,\x1e\xae>G\x8a.\xd8\x0ff\xd9\xf2\ +\x89\xce\xd9{\xccFJ<]!/Y;\x19\xa5=\ +#\xd6\x9f\x088A\xac\xd1\xaeW\xdb\xc4\x84\x99\x9e\xad\ +~/G\x1d4\xfb\xbe-\xab\x91\x08J\xac\xa1\xcd\xc2\ +\xf6\x1f\xeb\xea\xed\xd3\xfa\xd5\xa1YDW@\xfe%L\ +\xd9O\x80\xe8\x00\xb1\xc6N\xc5\xf6s\x10\xff\xbe\xb5\xc5\ +\xf9c\x8f9h\x10\x8b@\xc7D\xaa7A\xb4\xafX\ +B\xaf\xde\xbcM\xca>\xb1\xd0\x8ah\xc8\xca\x10\xf9\xdd\ +l\xdeb\xfbE\x11\xdc\x9d\x1e\xf7\xf9\x88=\xfeA}\ +\x8b\xbd\xa7U\xe3\xdc \x82\xab\xf1\xbb$\xcc\x14+h\ +\xe7\xf2\x1dV\xea\x99\x0b[&\x17VB\xa7x\xbay\ +Jr\x9aq\x8ca\xa8\xbf\x10\xd0S\xac\xb1\x83\xda\xfe\ +\xd7#\xdc\xfa\xe2\xbb\xf6\xc3\xd2\x5c\x00y\xd4\xb8\xde|\ +\x9d\x88\x86\x8a5\xb4K\xaez\xcfu\x8d\xef\xc4f\xa4\ +\x96\x8b\xe8\x0a\xd0\xb4\xc2\xd4E\x04$$Cy\xc7\xde\ +\x9f.y7\xc4j\xdc\xe7\xc5\x1a\xf9G\xf34k\xbf\ +\x88\x81\xe7\xa4\xef\xb3\x96\xc2\xfbY\xca\xa5\xef\x94\xce\xb0\ +\xdf\x84\x84\x97\x05hT\x7f\xd6\xa92\x7fF\xc0,\x11\ +\xdcm<\xdb\x97\x1c\xd7;\xd6\xaa\xb5\x8f\x11\xc1\xcd_\ +J\xa6\xdbK\xd2\x8c\xa3\x19,Ip\xfae5\x0f\x88\ +\x1a\xf8g\xeb4\xf3(\xf1t\x05-\x98W\x01uj\ +\x1f\xeb.\x05T\x895\xb6\xa8\xed\x9b.\xab\xeb\xa3\xb5\ +\xe9\xc7\xc4\x16\x85\xc3\xfa\x89\xe8Y\x1c\xb3~E\x8c\xb8\ +d4k\x97\xd5\x9c\xf4\x98\xce\x8d\xd6\xa6\x1f\x11\xd1\x15\ +B\xcb\x82\xb10\x0e\x1fa\xce$\xa2\x8b\xc4\x1a\x00\x83\ +\x971\xa8z~\xbd\xfdP\xa1W\xbfA\x81'\x12F\ +\x99\xaf\x06\xe8l\x22\xa9I\xa0S\xcfi\x80/\xb1j\ +\x9c\x84\x88\xae\x10:\xde\xae\x805\xbc\x8f9\x97@g\ +\xc9\xbe\x10\xaf`\xa6_\xbe\x01{V!W\xbc\x11\xb0\ +C\xc5*\xa5\xbc\xcb\x89q\x0e\x11\xfa\x89E\xf4\xc0c\ +\xfcj5s\x89\xe7T\xe5\xd3\ +\x22ZDWSV_\x80\xe2>\xc5\xd6\xc3D8\xbe\ +\xa0\xcb5\x82\xe7\xdai\xe7\xea\xe2{\xb0J\xbe\x0a\xa1\ ++\x0b\xd6\xfeQc\xac\x22u2\x81O\x22\xd0`\xb1\ +Jh\xc7\xf9\x93\xf5\xcdvE\xff\xb9h\x11\xd1\x15\x10\ +T\xd9\xbb^\x11\xebq\x00c\x0bx$\xbe\x9cv\xf9\ +\xf2\xe2\x19\xce\x7f\xe4\x8b\x102\xa5\xb9\xca\xda?\xc2<\ +\x81@\x13\x980\x9adn\x0c\x1b\x0b\x9b\x92\xf6I\xbd\ +f\xa3QDW\xc8)\xeb/F\xafR\xb6\x9e\x04p\ +h\xc1v\xfda\x5c3\x7f\x9d=G\x92\xa4\x84l\xd0\ +:)6\xd0\x8c:\xa7\x00t\x1a\x80\xb1\xd2204\ +\x83\x7fqk\xda\xf9N\xd9,\xac\x15\xd1\x15r'\xb8\ +\x9e\xf9\x0c\x88\x0e,\xc0\x10S\x9a\x19w6\xb1}C\ +y\x02\x1b\xe4k\x10r&\xc0\x963\x19\x84\xc9D4\ +D,\x12\xf8\x1e\xef;i\xcf9\xa6$\x81\xd5\x22\xba\ +\x02\xb2]\xe6\xae\xbc\xdc\xfa;\x08\x87\x15\xa0w\xfb\xbc\ +gSU\xf4\x9e\xf4R\xf9\x12\x04\x04\xd5\x1a\x13\xd6\xb9\ +D|-\x11\x8d\x10\x8b\x04:!\xbc\xd1\xd2\xea\x1c\xad\ +k\xadt98\xae\x01\xcb\xc6#\xd2\xbb\xdc\xaa+4\ +\xc1e\xa0\x91=\xfe\xc1#\x0d\xf6\xb1\x22\xb8B\x90\x8c\ +N\xc0\x89$\xec9\x8f48_w]:\x19\xcc\xaf\ +\x89U\x02+_5\xaa\xb8\xd8z\xb2\xfe<\x94\x89\xa7\ ++de\x85\xbd\x1f\x99uDtj\x81\x85\x91\x1e\xb6\ +\xd3\xce\xf7$+Y@x+\xc0\x9d\xa1\x98\xaf\x07\xd1\ +(\xb1H \x8b\xf2g\x97\x7fl\x9f0\xec)\xa4E\ +t\x05\xdf\x06\xf6i\xe5\xe6\xbdDt~\x01\x0d\xa4U\ +\x9eK\xdf\x8bNO?,_\x80\x00\x0d\xea\x9d_\x1b\ +\xb7*H\xf1\x0d\x04\x1a&\x16\xc9-\x1e\xf0\xfbH\x8d\ +}9$\xbc,\xf81\x98O-\xb7\xfeP(\x82\xcb\ +\x003\xf3\xdc\xa4g\x7fC\x04W\xd0h\x9cr$a\ +\xcf[Z\xef\x8cdp%C\x2239\x16\xb0\xcb\xd2\ +q\xebB\xf1t\x85\x8cIWZ\xb7(\xc2\x95\x05\x12\ +J\xfe\xc0e\x8e\xc7j\xdd\xe7\xe4\xcd\x0b\xd0\xbd\xafo\ +\x1f\xf3\x87`\xba\x82\x08=\xc4\x229Y\xb07\xa7\x80\ +\x83Kk\xec\xb7Et\x85naW\x9a\xd7\x11\xd1\x0d\ +\x05R/9\xd1h;?\xee{\x0f\x9a\xe4\xcd\x0b\xf9\ +\xc2\xc6I\xe8\x1b\x8dX?%\xe0\x12i\xb6\x90\x13\xfe\ +\xf3p\xbd}\x98\x0eg\xf7Et\xc3\xe6\xe1\xc6\xad)\ +JaF\x01\xacN\xd7x\xecM\x8d\xd6\xbaO\xc8[\ +\x17\x90\xcf\x9d\x8e\x80;\x098F\xac\x81l7H\x98\ +\x16\xa9\xb5g\x88\xe8\x0a\x9d&Ye~\xcb\x00\xfd=\ +\xdf\x1b\xd03\xe3)\xdb\xb6\xa7Hf\xb2P(\xa4\xa6\ +E&(\xc3\xbb\x93@{\x8a5\xb2\xb6M\xf5\xc9\xf2\ +\x8f\x9daa\xcff\x96D\xaa\xb0\x0c\xca\xca\xc8\xd7\x0c\ +\xa6\xf9\xf9,\xb8\x0c$\xd9\xe3\x8b\xadZ\xfb\x04\x11\x5c\ +\xa1\x90\x88NO?\xfe\x85\xe7\x8c\xf4\x18?gF\xab\ +X$\x1b\x1e$\x0d\x1e<82\x01\x92\xbd,\xa0\xc3\ +\x10\x14vQ\xf0\x9e B\xaf<\xde\xbb]\x9avq\ +\x88\x95pj\xe4\x8d\x0b\x85\xc8\x80\x04Z#\xb5v\xb5\ +\x9bV#\x19\xf8\x87X$\x1b\x82\xe6\x9d%\xa2+\xb4\ +\xcb\x8a\x0a\xc4bl\xcd'\xa2\xbd\xf2\xb9\xd0E\xb3r\ +\x0e.\x99n/\x917.\x14:\xb1Y\xa9\x8f\xac\x1a\ +\xfb8\x0f8\x93\xa1w\xf1\xfe\x10r\x98\x88\xae\x80\xf6\ +\xce\xe2\xf6/7g\xe5kyGf\xa4\x18\x5ci\xd5\ +8g\xf4\xba\x1b\xeb\xe5\x8d\x0b\xc2WDj\xec\xbat\ +\xd2\xde\x97\x99\xeb\xc4\x1a\xf0\xabD\xe4\x80y\x15\xe1\xd6\ +5I\xa4B\xa0gq\x7f\xa1\x08?\xcd\xd3p\xf2\xa7\ +\xb6\x8b3\xa4\xdf\xad tL*\x1e9E\x91\xf7G\ +\x22\x1a \xd6\xc8\xec\xcc\xaeUc\x97\x8a\xa7+\xb4%\ +\xb8g\x13\xe1\xfa<\xfd\xf2\x17\xd9\xb6s\x90\x08\xae \ +t\x8eh\x22\xfdhs\xca\xf9:3\xdf/\xd6\xc8\x88\ +\x17 \xe1ea{Z+\xcdC\x08\x98My\x18i\ +\xf0\x80?~\xf4\x89=N\xb2\x93\x05\xa1k\xf4\x9a\x8d\ +F\xab\xd69\xdf\xf3p\x11\xb3\xf4\x8c\xee\xd6\xfc\xe3R\ +\x8d\x9c\xd3\x15\xb6\xa1y\x22v\x8dD\xcd\xc5D\xb4{\ +\x9e\xed\xdf: \xbe\xd4\xaaq\x12\xf2\x96\x05!3\x92\ +\x93\xa2{\x9a\x11\xef\xbeB\xec\x9f\x9dA\xc2\xe6\x9f\xad\ +\x1a\xa7B<]\x01[\xb7\xe9\x8bF\xad?\xe5\x9d\xe0\ +\x02\x1b=\xf2N\x15\xc1\x15\x04\xf8\x96\xe1\xbc\xf0=\xfb\ +(\x06_\xcd\xd0\xabu]P\xd3\xeb\x86\x8d\xcedH\ +\xede\x01\xdb\xee\xe3\xde\xa9\x08\x97#\xbfV\x97\xcbS\ +\xa0\x93t)6.\x08\xba\xd1\x1a7\x0f7\x09\xf3$\ +\xc9j\xa7\x93\xd0\x0b\xadl\x9fQ\x96@=\xa4\xb5\x1f\ +\xb4\xeee\x9b\xaa\x8c\x9c\xe1\x9b\xe0VY\xe7\xe7\x9b\xe0\ +\x02\xf8O:\xe9\x1c\x22\x82+\x08\xd9\xa3(\xe1,J\ +\xb3s 8\xfcIB\x08 \x87\xe4\xbd\x06\xfb\xdb\xba\ +\x08\xae\x88n;\x9c\xda\xc7\xba\x95\x88\xc7\xc1\xa7\x12\x8f\ +\x04\xd4\xe4\xd9\x1e\xee\x13k\x9b\xedq%\xb3\xb1F\xbe\ +\x16A\xc8.%\x09\xac~\x9d\xedc=\xc6o\x18`\ +qn\x91\xf4<\xc4#5\xf6\xa5#\xeb`C\x9a\xd8\ +\xeb\x8d]e^\xaa\x80\x1f\x81\xb18\xd3k}\x16G\ +\x91A\xde\x9f\x08(\xc9\xa3\x90\xf2\xec%l\x9f\xd6\x7f\ +.Z\xe4k\x11\x84\xdc0:\x01'Rk\xff\x84\x81\ +\xb3\x18\xd8X\xb0\x82\xcb\xfc\xbf4\xe3\xe0H\xc2\x9e\x0e\ +-KU\x0a\xdby\xa5\xc6I\x00\xdd\xc9\x0c'\xc5\xf6\ +\xa3\x99^o\x17e\xde\x09\xd07\xf2\xc5>\x9e\x87[\ +n\xacq&\x8fN\xc0\x91\xafE\x10\x10H%+\x8f\ +\xe9`f~\xbf\x00\x05w\xee\xba\x06\xe7\xa0\x92Z\xfb\ +\x0dh\xdb\x98A\xd8BK\xa5y\xa0E\xf4\x02\x01%\ +\xccx\xc2\xaa\xb5'dZ\x00C\x11\x1e\xcc\x93p\x0e\ +\x03\xfc#\xab\xc6\xb9C\xbe\x14A\x08\x9e\x8d\x93\xd0\xb7\ +(j=\x02\xe0\x88\xfc\x17[x \xbe\xd6\xaaqn\ +\x81\xf6M\x19\x04\x00@\xeb\x94\xd8`\x8b\xe8q\x02J\ +\x18`\xdb\xe3\x9fg\xb8\x8f;\x94\x80\xda|\xf9\xe0\x99\ +1U\x04W\x10\xc2C\xd9,\xac]\x99\xb4\x8fe\xf0\ +\x83\xc8\xf3\xd2\x8e\x1e\xd1\x19\xf9 \xb8\x00`\xc8\xa7\x0b\ +\xac\x9f\x88\x9eE\x11\x1f\xda\xf2y.\x9d\x11\ +M\xa4\xff,\xd3\x9a \x84\x9fH\xc2\x9e\xed\xc2\x9b\xc0\ +\xc8\x83S\x05\xcco\xd8i\xe7\xb0\xe8\xf4\xf4\xb2|{\ +O\xaa\xc0\x8f\x06]OD\x93\xb6>{zc\xc2\xb9\ +\xbb\xbb\xd7\xfb\xbc\x02%\x16a.\x11L\xcd=\xdc\xb4\ +G\xde\x19\xd1\xe9\xe9\xc7e*\x13\x04}\x88\xd5\xb8\x7f\ +w\x1c>\x9e\x81F\x8d\x7f\xc6\xc2&\xe5|+_\x9b\ +\xa6\x14\xac\xe8\xa6\xe3\xd6y\x00\xfdb\xabT\xf4\x8f[\ +[\xed\x8b\xaa38x\xde\xab\x8fu\x1b\x11\x0d\xd7>\ +\xa4\x0c:+Z\xe3\xfeU\xa60A\xd0\x8f\xa2\x19\xce\ +B\x9b\xf9\x18\x06\xd6j\x18a\xfb\xeb\xdaf\xfb\xf8^\ +wc}\xbe\xbe\x1fU\xa0\xad\xf5\x8e$\xc2\xcc/[\ +\xeb1\x90\xb6\x19g\xf6\x98\x83\x86\xee^39\xcd8\ +\x86\x80J\xed\x93\xa6\x80\xf3\xa25\xe9\xf92u\x09\x82\ +\xbe\x14\xd7:\x8bS\xc0X\x86>\xde\x223\xdf\xbf\xb4\ +!\xff\x8b\xee\x14\x9c\xe8&\xa7F\xf70A\x7f&B\ +t\xcb\xbf\xf4\xf8'\xc5\x09\xe7\xe5\xee^s\xf5\x05(\ +6\x0c\xaa\xd5\xb9?.3<&L\x8a\xd4\xd8u2\ +e\x09\x82\xfe\x94\xd6\xd8o\xbb\x8e:\x8c\xc1\x1f\x84\xfd\ +Y=\xc6]\x8f48\x17\xeaV\xd2\x11R\x1c\xa3}\ +\xea\xcfCY\xcfR\xf3\xc5/3\x95\xfd\xea\xc1\x98\xae\ +\xb2\xeeP\xc0\xf7u.|\xc1\x8cx\xa4\xd6\x9e!S\ +\x95 \xe4\x9f\xa3a\x18\xee\xa2\xf0v)\xe2j\xb3\xc6\ +\xf9y\xa1\xbc\x0fUH]\x83z\x94\x9a\xf7m'\xb8\ +\x1f4'\x9d\xa9\xc8,T}\x08\x01\xdf\x83\xdeq\xe5\ +kEp\x05!?\x89\xcdH-O1\x1d\xcf\x8cu\ +\xe1[\xec\xf3\x8f\x0aIp\x0bJtO-\xb7~E\ +D'o}$\xc6f\x9c\xd5kv\xf7\xb3\xfcVT\ + f\x12f\x91\xc6EF<\xc6\xedV\xad\xf3+\x99\ +\x9a\x04!\x7f)M\xd8o\xb9\xec\x9d\xce@2,\x09\ +\x9b\x0c\x9co\xd5:\xb7\x17\xda\xbbP\x05\x92\xa9\xee\x93K\xeb\ +\xedS\x0b!qA\x10\x84\xaf\xb0\xe3\xe6%\xa4\xe8\xae\ +\x80\x16\xfa+\xd2L\xa7\xe4[\x95)\xf1t7\x93\xac\ +\x8a\x0d1\x89\x1e\xdeNp[\x5cO]\x9a\xb1\xe1,\ +\xbeCW\xc1\x05\xf3k\x8di\xfb,\x11\x5cA(<\ +\xac\x84\xf3G\xcf\xc3\x0d\x01\xac\xf4_J\xb33\xa6\x90\ +\x05\x17\xc8\xe3\x86\x07k'\xa3\xb4X\xe1\x19\x22\xda\x0b\ +\xdbnb^\x1dM\xd8O\x22\xb3p\xf59J\xe1j\ +MC\xca\x9f:i\xf3\x98\x9e\xb3\x9c\xb52\xfd\x08B\ +\x81N\xfc\x8b\xbd\x05G\x1e\xa8v'\xa2o\xe6h\xde\ +y\xe8\x0bvN\xef\x93\xc8\xdf\xa2\x17\x9d\xc5D\x9ef\ +*\xf7\xb4\xcc\xfbA4j\xbb7\xbfx\x09\x9c\xdf!\ +\xc3\x8eD\xa4\xf0\x1bM\xcf\xe2nH\xb94\xbetV\ +r\xa5L;\x82\x80\x82n\x92p\x12;\x17\xef\x07\xb3\ +\x94\x88\xce\xce\xe2\x9c\xd3\x0a\xe6\x9fX\x09\xe7\x8fbu\ +\xe4ox\xf9\xd4\xde\xd6M[g*\x7fYm)\xe5\ +R|t\x02N&\xd7.\x8eZ\xd5\x04\xec\xa6cy\ +G\x97\xbc\x8a\xd2\x19\xf6\x9b\xf2\xd9\x0b\x820:\x01g\ +\xd1{\xce\xf9\xcc\x9c\xa5\x84&^\xc2\x1eF\x8b\xe0\xe6\ +\xb9\xe8\xa6+\xad\x0b\x94\xc2Um\x88\xce\x9d%3\xec\ +W3\xb9vjJd\x1f\x22\x5c\x0a=\xcf\x06]\x1e\ +\xabq\xff.\x9f\xbc \x08_2v\x01\xdcE\xef9\ +\x172\xf3\x0c?\xcf\xdfz\x8c\xdbW&\x9d\x83#\xd3\ +\xedw\xc4\xca\xc8\xdf\xec\xe5\xe6JkT\x84\xf0o\x02\ +\x8a\xb7\xdbO\xf8\xb8\xd1v\xf6\xed{\x0f\x9a2\xb9\xbe\ +]i=I\x84\xf1\xd0\xef,\xee\xdd\x91Z\xfb\x12\xf9\ +\xdc\x05Ah\xa7\xebZ\x1c\xa0\xdf\x13\x10\xc9 \x9e\xfc\ +\xba\xed\xe2\xb2\xa2\x19\xceB\xb1h\x9e{\xba\x8dS\xd0\ +;\x02~d{\xc1\x05\x00\xd7\xe3\xaaL\x0579\xcd\ +\xf8\x8e\x8e\x82\x0b\xe0\x9f\xcb\x1a\xec\xef\xcb\xa7.\x08B\ +{X5N\xc2a>\x96\xc1\xcb\xbb\xd1p\xfe#\x8f\ +1e\xe1{\xceh\xdd\x05\xb7)n\xed\x9b\xae\xb4n\ +\xb6+\xcdy\xe2\xe9b\xe7\x89S\xa7\xf5\xb1\x1e'\xe0\ +\x846\xb2\xe6\x1e\xb0j\x9d\xf32\xb9\xfe\xdb\x15\xb0\x86\ +\x97\x9bK\x88\xe8k\xd0+S\xf9\xe3\x149\x07\x95\xd6\ +\xe0\x0b\x99R\x04A@'\x1b\xb8\x94\x17[W\x12\xf0\ +}\x22\xf4\xea@m\x17y@\xed\xb2\x06\xfb!\x9d\x8f\ + ~\x16G\xd1.\xca\x9cL\x8c\xf8\xd6\x09\xb8)\x17\ +\xfb\x97L\xb7\x97@\xb2\x97\xb7\xe5\xf4>\xe6O\xd1\x96\ +\xe0\x02\x1b\xd3\xecd\x5cqixo\xb3J;\xc1\x05\ +Z\xd2D\xa7\x8a\xe0\x0a\x82\xd0\x156\xb5\xd6\xb3\xab\xd7\ +N\xc6m=L\xeb\x14R|\x1c1\xbe\xc1@O\x02\ +\x9a\x98\xf0>\x18\xcf{P\x7f\x8b\xd6\xa6\xdf\x87\xe6\x11\ +\xd2b\xcb\xbc\x14L\x97\x11\xd0o{7\xd4R\xa8\x04\ +p\x89x\xba[\x91\xaa4\xc6+\xa8'\x88v\x0c\x95\ +3\xf8:\xab\xc6\xb9\x09\x19v&\xeaQj\xbdO\x84\ +~:\xd9\xc5\xf3pQ$a\xcf\x91)D\x10\x04\xa1\ +\x0d\xcf\x96\xcc\x1f\x81\xe8*\x02\xca\xda;f\xd9h\xdb\ +\xbbg\xba=\x89|\xd9\xd3MV\xc5\x86(Rs\xda\ +\x14\x5c\xe6\x15\xf5\xcd\xce\x1d\x99\xde\xa3\xac\xd4\xfa\xb1v\ +\x82\xcb\xa8\x15\xc1\x15\x04A\xc0\xf6\xe7\x93)]eU\ +\xec\xa2\xccw\x88\xe8\x86\xf6\x04\x17\x00\x88\xd0\xa3g\xc4\ +<\x17\x12^\xde\xb4R1\xe1<\x0cP\xdf6W(\ +\x1e]\xb1)L\xd2}\x9a\xa6\xa2\x1f\x11~\x04\xbd6\ +r\x17\xafip~ \xc3K\x10\x04\xe1+\x9a\xa7Y\ +\xfbE\x15\x12\x00\xc6t%\xc8K\x8c*\x00\x89\x82\xf7\ +tw!\xf3\x0f\xc0NK\x98\xfd\xfb\xa6\xe9v\xc6\x99\ +g\x11\xd3\xba\xbe\xa3\x95P\xc8*N\xads\xd88s\ +P]8\xdaw\x09\x82 \x84\xc1AKWZ\xd5\x11\ +\x03/\x830\xa6\xcb\x17 :\xa0%n\x8eA!{\ +\xbav\x95\x19'\xd0\xe4\x9d\x1d\xcc\xb6=\xfeA5\xc0\ +\x99\xdc#95\xba\x07\xc1\xab\xd4(q\x8a=\xd0\xc4\ +X\x22\xf5\xa1\x0c3A\x10\x04 \x197\xc6\x1a\x8a\xee\ +!`\xcfL\xaec\x11\xaa\x00\xbc\x5c\x90\x9enK\xdc\ +\x1c\x03\xa6\xdf\xb5\xe3\xee\xddW\x9cp26\x8ea\xb8\ +?\xcd\xe8\x90x\xeeE\xf7\x0f\xd1\xda\xf4c2\xcc\x04\ +A(tVT \x96\x8e[\xbf2H=K\xa0=\ +3\xbf\x22\x9d\xdd8\x05\xbd\x0bNt7NB_K\ +\xa1ng-\xf5\x18hq\xd2\xe6\xb5\x19\xaf\x8e&E\ +\xf7\x04\xd1\x05\xfaX\x86\xdf\x5cSo_)CM\x10\ +\x84B\xa79n\x1d\xb0[\xb9\xf9\x8aR\xb8\xaa\xad$\ +\xdbnI.\xa1\xa8\xd84/((\xd1\xad\x06(\x16\ +\xb5\xe6\x12hp;{\x9a\xb7\x16\xf9\xd0A\xc7\x88\xba\ +\xd7\x10`i\xb2\x8f\xdb\x9a\x04\x9d#\xfb\xb8\x82 \x14\ +2\x0b\xc6\xc2\xb0\xab\xcck#\x0a/\x81h\xa4\xdf\xd7\ +'\xc2\xe4\x82:\xa7k\xc7\xcd\x9f\x90\xa2[\xdb\x11\x9f\ +\xcf\xd75\xd8{\xf5\xabCs\xa6\xc7\x90\x0c\xb8Ku\ +\x09-\xb3\xc7\x97J\x17\x0fA\x10\x0a\x99Ted\xa8\ +A<\x07\xc0\xa1Y\xbd\x8f\x83\x033m\x9c\xa3\x85\xa7\ +\xdbRe\x1e\x04E7v ?\xbf\xceTp\x01@\ +\xb1{\x8d6\x82\xcbx\xe2\xc6\x84s\xb7\x0c9A\x10\ +P\xc0\x8d\x1a\x14\xf1\xeb\xd9\x16\x5c\x00\xb0\x0cL\xca{\ +O\xb7!\x8e\x1ee\xca|\x95@{\xb7\x93D\xb4\xaa\ +\xbe\xd9\x1e\x9a\xe9\xb9\xdc\xd6I\xb1\x81f\xd4\xfd@\x07\ +\xd1eF}\x9a\xed}K\x12X-\xc3N\xd0\x89W\ +\xe20\xbf\xc1\x91=\xa1\xdc\x11\x04\xd5\x9b\xc0=A(\ +\xd9\xea\xaf41\xa8\x89]\xda\xc8\xca\xdd\xe0\x115\x1a\ +\xac\x9a8M\xc9\x94J\xado6\x90\x1c\x90@k>\ +\xd8\xe2\xf3\x0a\x94\x94\x94\xa0\xd40\xa2\xa5\x9e\xe9\xf6R\ +\xcce\xc4F\x19\x19\x5cF\xe0\xd2\xaf\xe68ja\xf6\ +\xea]\xa6z\xdbu\x96\xf5\x9c\x89u\x85\xfe\x1d5O\ +\xc4\xae\x91\xa85\x83\x08'\xe50a\xb5\xe1\xd3\xa4=\ +`\x8f\xd9H!_\x8f\x0c\x95\x91Y\xdb\x9e\xe0nV\ +\xa0_e*\xb8\x00`D\xdc\x1f\xe8\x13V\xc6\xa5%\ +\xd3Ep\x05hrt#\xba\x97A\xeew\x89h\x02\ +\x03c\x08\x1c\xf9*\xd0Fm{\x03\x06c\xcb\xdf!\ +\x06\xa2\x0c\x13\x16J\x008U\x00\x03\x8d`x\xd0\xb7\ +\xb1j/\xda\xf2\xe3\xbdM\xbf\x9a\x08_\x9dv\xa4m\ +\xedA\x0a\x06\x01\x96\xb2\xd8\xae\xe4\xa5\x00^\xf2<\xf5\ +\x97\x7f/K?9v\x01\x5c\x14V8\xf9d\x05\x9e\ +\x9e\xebj\x81\x04\x94\x0f\x88X\xa7\x00\xdd\xaf\x03A!\ +oH?Y\x11fv\xd0I\xe7\xd3\xd5\x0d\xce\xd0L\ +\x13\x89\xd6_\x8c^%\x9e\xf51\x11z\x84\xffx\x10\ +\xff\xc9\xaaq\xce\x96\xa9\x5c\x08;\x1b\xe3\xe8\x13#\xf3\ +\x0e\x10\x9dC\x80!\x16\xc9\xca|\xf0\x8e\x0b\x5c\x12\xab\ +q^\xc8\xf7\xdf\xbav2J{F\xcc\xdf\x12hZ\ +\x80Q\xc6\xa7\xadZ\xfb;\xc8\xb7=\xddTed(\ +\x01wv\xe2\x8b\xbb\xc9\x8f\xcc\xdd\x12\xcf\xac\xd2Bp\ +\x19\xab\x93\x9es\xa9L5B\xe8\xbd\xdb)\xd1\xbdc\ +d\xbeFD\xe7\x8b\xe0f\xd3\xfb\xa2\xaf\x1b\xa0g\xd3\ +U\xd6E\xf9\xfc;[\xab\xcc\xc3zZ\xe6kA\x0a\ +\xeef\x83\x1f\xdb:)60\xafDw\xc1X\x18\x06\ +\xf8^\x22\x94v\xd4/v\xf9\x0agF\xa6\xf7[>\ +\x11Q\x10]\x0e-\x9a\x19PUY\x02\xf52\xd5\x08\ +\x08\xf9^\xa5a\xba\x7f#\xa2Ab\x8d\x9c\x84=\x0d\ +b\xcch\xa92\x0f\xca\xb7\xdf\xd68\x05\xbd\xd3\x95V\ +\x8d\xc9\xf4/\x22\x1a\x1a\x06[\x9b\x11\xe7\xa2\xbc\x12\xdd\ +\xc3G\x98W\x83pX\xc7^\x1f\xdd8\xec)\xa43\ +\xbd\xdf\x80\x88u>\x01\xbbi\x10F\xfas4\x91~\ +T\xa6\x18!\xec\xf4\xeac]\x17\x86\x09\xb2\xa0\x84\x97\ +`F@\xbf\xcd\xa7\xdf\x94\xae\xb4\xce.\xb6\xac\xff)\ +B\xa5_\x85.|bbu7\xb7gC'\xba\xcd\ +S\xado\x82\xe8g\x1d\x0b.\x7f\xb8l\x9d=\x1b>\ +\x14\xddP\xc4?\xd4 \xac\xbc\xdeN;\x97\xcb\xd4\x22\ +\x84\x9d\xd5\x17\xa0\x98|n\xfc-t\x9a#\xd2\xd3\xac\ +\xaf\xeb\xfe#Z\xaa\x8a\x06\xd8U\xe6|Ex\x90\x80\ +]\xc3\xb7\xc0\xa1\xa1WU\x99\x87j/\xba\x9f\xc5Q\ +\x141yng\xaaA1\xd3M#\xeb`gz\xcf\ +\xab\xab\x8c\xb1\xd9\xa8^\xe2\xff[\xe6\xab\x8a\xef\xc1*\ +\x99S\x84\xb0\xd3\xbb8r,\x01=\xc5\x12\x01M\x15\ +\x8a\x8f\xd7\xf9\xf9S\xf1\xc8)\x16;o\x13\xe8\x940\ +?\xa7\xc1t\x8e\xf6\xa2\xdb\x97\xac\x9b\x08\xf4\xf5N\x9c\ +\x95Z\xf5Y\xda\xbe\xcf\x17\xc3\x81\xbe\x87\xf0\xc7\x95\xff\ +uc\x8d3]\xa6\x13A\x8f0'\x1f(V\x08\xf4\ +\x0d\x8c\xd3\xf5\xc9\xedJ\xf3J\xa5\xf8\x11\x22\xf4\xd2 \ +\x9c_\xb1`l\xd7\x13\x04C#\xba\xadS\xcd#\x08\ +\xe8d\xf8\x94\xff\x90\xc9\xe1\xe4-\xf7\x8c\xc7\x06\x81\xe9\ +\xe4\x90w\x0fJ\xbb\xa0\xca\xea\x0c[\x15\x0aB\xee\x82\ +2<\x5c\xac\x10\xe8\x0b\x18\xaaie\xa9\x1f\x10\xd1-\ +\xa4Iyb\x02v=d\xb81NK\xd1\xfd,\x8e\ +\x22\xd3\xc0\xcc\xcel\x943\xd0\xdc\xda\xe2\xd4\xf8\xe2\xe5\ +\x92[E\x14\xee\x02!\xcc\xb8#Z\x9b\xfe\x9f\xcc$\ +\x82FGX\xf6\x16+\x04\xfa\x06\x06WkTW\x1f\ +\xd8\xdc\xb2\x15\xf4k\xdd,mP\xd7C\xcc*$a\ +\xe5\x9f\x13\xd1\xf0Nz~\xf7\xf4\x98\x83\x06\xf8pL\ +\x88\x80i\x08\xb5\xe0\xf2\xa7\x1bl\xfb\x972\x89\x08z\ +\xc1\xc5b\x83@=\xb0\xe2K*\xa0\x91\xe4\xa8\xee\x00\ +\x00 \x00IDAT\xd5;\xb0\x88~\xa1Kg\xb7\ +\xed\xac}\xda\xf2\x89m\xb7\x9a\x0d\xad\xe8\xb6\xc4\xcd1\ +D\xf8Q'\x05\xd7\xf5\xb9\xdc\x18GDCBMv\xdaF\x1az\xce\xc4:0?\ +\xa0\xb1\xf1\xbf\x91\x8cG\xf7\x0aTt[\xaa\x8a\x06@\ +\xd1\x95\xdd\x08\xb9\xfe\xd5\xaf\x04\xaa\xcf\xe2(\x02\xe8\xf8\ +Pz\xb9\xe4\xfdTf\x09A\x10\x84\xcds\xa2\x8b{\ +u~~C\xb9\xe3\x03\x15]\x0b\xf6\xcd\x04\x94t]\ +s\xe9A\xbf\x9e\xa1\x0f\x22\xc7u\xe7\x19r\xe0\xe5\xbe\ +\x14\xabq\x9f\x97a&\x08\x82\xb0\x89\xc7\x1b\x9d\x17\x99\ +\xf93\xe8\x9bHxL`\xa2\xdb\x5ci\x8d\x02\xd3\xf9\ +\xdd\xc8\xbekjh\xb5\x9f\xf0\xeb9\x14y\xa7\x84\xf1\ +\xdd\xb8\xe4\xdd CL\x10\x04\xe1+\xce\xac\x83\xc7\xa0\ +G\xf4\xfd\x054v\xc1\xd8\x9dw\xce\xcb\xaa\xe8F\x88\ +o\xe8^c\x01\x9e\xdf\x7f\xae?\x9b\xe9\x0b\xc6\xc2\x00\ +\xd1\x84\x10.\x87\x96\xdc\x5c\xe3>)CL\x10\x04a\ +[<\xf2\xfe\xa2q\x97\xad\xdec\x86\x99\x07\xe4\x5ct\ +[+\xcdC\x08\xdd\x13;\x8f\xd8\xb7>\xb2\x07\x0f5\ +\x0f%\xa0o\xf8\x0e\x82\xd3\x8d\xd5\x92\xb1,\x08\x82\xb0\ +\x03/\xbd\xeb\xfe\x93\x19\x9f\xeb\xfa\xfc\x96\xb1\xf3\x10s\ +\xd6D\xd7\x04\xdd\xd8\xcd\x83\xdd\xf5\xef\xd7\xbb\x7f\x87o\ +\x9b\xda\xe1K\xa0b\xe6\xf7\xe6\xd7\xdb\x7f\x91\xa1%\x08\ +\x82\xb0#c\x17\xc0\x05X\xe3\xda\x05\x94[\xd1MN\ +3\x8e!\xc2\xb8n\xf6\x92\xad\x1bY\x07\x1b\xbe\x9d\x9b\ +\xc2wB\xf8Fn\x97\xeaS\x82 \x08h\xaf\x1a\xe1\ +\x9f5~\xfc\xc3w\xd6u(+\xa2k*uC\xf7\ +\xc3\xae\xfe\x85\x967NB_f|3d\xbd.\xd7\ +\xd6\xb78RcY\x10\x04\xa1\x1d\xde\x82\xfb<\x03\x0d\ +\xba6\xb6\xef\x1f1\x0e\xcd\x89\xe8\xa6*\x8d\x93@8\ +\xa4\x9b\x82\xb4\xea\xb1z\xe7_~=K\xd4\xb2\xbe\xdd\ +\xbdD\xae\xac\xd6E\xad\xf5+IL\x10\x04!_\x19\ +\x9d\x80\x03\xf0\xd3\xba>\xbf\x82:&'\xa2k@]\ +\x97\x81\x22\xfd\xd5\xcf\xb0+\x11\x1f\x1f2/7\xed\xd8\ +\xf6]2\x9c\x04A\x10:\xd5\xee\xf4I}KB\x22\ +\xfb\xa2\x9b\xac4\xc6u\xd7\xcb\x05\x00\x0f\xeaq\x9f}\ +\xfc\xa3C\xf6\x09=\xe0W\x95-A\x10\x84|'\x95\ +\xb2\xff\xc6\xacg\xfe\x0b\x03\x07\xb6\xb5\xaf\xab|\xf6r\ +\xaf\xc9\xe0\x01\x93\x8d\x0d\xe9g\xfdz\x96\xe4\xa4\xe8\x9e\ +]\xad\xf7\x9cml\xc6\x1fd\x18\x09\x82 t\x8e\xb2\ +YXK\xc0\xcb\xd0s_7\xd2\xcf4\xf7\xcf\x9a\xe8\ +\xb6\xc4\xcd1D86\x83e\xc1\xb3\xfd\xea\xfc\xeb\x8e\ +\xa1,\xef[![\xf6\xfc\xb7\xb8\xd6Y,\xc3H\x10\ +\x04\xa1KG,\x9f\xd2\xf5\xd9-\x851Y\x13]K\ +\xe1\xda\x0cM\xfbW\x7f\xab\x82\xf0\x91a2\xbe\xc7\xa8\ +\x95\xe1#\x08\x82\x80\xaeF\x08\x9f\xd4\xb8\xe3\xd3AY\ +\x11\xddTe\xe4k\xe0\xccJ-\xbad>\xe9\xf3\x8f\ +\xfdV\x88b\xfb\x8d\xeb\xd7\xd9\x0f\xc9\xf0\x11\x04A\xe8\ +\x1a\xbf\x9e\xee,fh\x9b\x0b\x93\x1dOW\xc1\xbb\x22\ +\xb3\xa39\xbc$V\x93\xfc\x18>\xb6\x13$\xd0\xde!\ +:&4\xd7\xcf\xd0\xb9 \x08B\xa1P\x0d0\x98\x9f\ +\xd1\xb4\x10\xf3\xf0\xc6)\xe8\xed\xab\xe86Ua\x17\x10\ +\x9d\x83\x8cB\xaf\xf4\x84\x9f\xbf\xd3p\xddC\xc2d\xf7\ +\xb4\x84\x96\x05A\x102\x89\x5c.\xd44\x99\x8a\xa2\x86\ +1\xdaW\xd1\x8d\xb2\x19' \x96\x99\xe8z\xcf\xf8\xbc\ +\x9f;\x06!J\xa0*M\xd8o\xc9\xa8\x11\x04A\xe8\ +\x1e)\xd0\x22h\xdb\xd4\x9e\x0e\xf6Mt_\x89\xc3\x04\ +\xa1*\xc3\xd0k\xaa\x01\xee\x7f|n\xadtPh4\ +\x97\xf8^\x192\x82 \x08\xdd\xe7\xb6\x1a\xfb\x1df\xd4\ +C\xcf\x03\xbb\x07\xf9&\xba\xa3\x94u\x1a\x81\x06f(\ +\x90\xff\x19\x90@+\xfc\x8b\xff\x13\x10\x8ez\xcb\x0c\xa4\ +\x93\x9e#\x09T\x82 \x08\x99\xee\xeb\x82\x17i\xba\xaf\ +\xeb\x9f\xe8*\xe0rd\xdcW\x16\x0b\xfc\xfc}\xd7L\ +\x8e\x0c#B\xaf\x90,q\x9e(Kh\xba:\x13\x04\ +A\x08\x17\x8b4\xdd\xd7\xddm\xc3\x85(\xcfXt\x9b\ +\xe3\xd6\x01\x00\x8e\xc8\xfc\xfc\xaa\xf7\x82\xaf?0\xc2\xa3\ +\xc3bl\xcfSsd\x9c\x08\x82 d\x8e\xa3i2\ +\x15\x00XQsD\xc6\xa2k\x11\xa6\xf9p\x94&\xd5\ +\xc0\xee\xbf}\x8e\xe9\xee\x17\x92\xd0r\xc3\xfb\xeb\xd2O\ +\xcaP\x11\x04A\xc8\x9c5Ig1\xb3\x7f[\x91\xb9\ +\xc40h\x9f\x8cDwE\x05b\x04\x9c\xed\x83\xdb\xfd\ +\xb2\x9f\xfb\xb9\x9b\xf7\x88\xf7\x0d\x87\x99\xf9\x91\x91u\xb0\ +e\xa8\x08\x82 d\xce\x1e\xb3\x91\x22\xc2\xeb\xd03\x99\ +*3\xd1\xdd\xb5\x8fu:\xd1\xb6\x07~\x11\x82\xfd\xdc\ +\xcd\xbf.\x14\xa2\xeb\x82\xe7\xc90\x11\x04A\xf0\x0f\x0f\ +X\x02-s\xa98\xb3\xf02\x01\x13}1 y\xbe\ +\xc6\xe8\x1b\xe2\xe8\x01\xd0\xa00\x84\x96?\xa8w\x9f\x97\ +!\x22\x08\x82\xe0\xa3xy\xbcDSO\xf7k\xdd\x16\ +\xdd\xd6I\xb1\x81\x00\xc6\xf9 L\x9cnq_\xf1\xf3\ +w\x15)s_\xdatd(\xe8\xba\x8f\x0fKhY\ +\x10\x04\xc1_\x1c\xd6\xd3\xd3\x05h\xafe\xe3\x11\xe9\x96\ +\xe8\x9a\x963\x99\x00\xc3\x07eZ\xdec\x0e\x1a\xfc\xfc\ +Y\x86G#\x11\x8e\xd0\xf2\x9fex\x08\x82 \xf8K\ +\xcav\xde\xd13\xbc\x0cs\xc8@kh\x97E\xb7\x1a\ + \x10.\xf2\xe99\x16g\xe1@\xd4\xb0\x1047\xd8\ +\xb0\xe2\x13\x09-\x0b\x82 \xf8M\xaf\xd9hd\xc6\xe7\ +:>;+\x1a\xd1e\xd1\xbd\xaa\xd2<\x98\x88\xf6\xf2\ +)\xc6\xbd\xd8\x7f\xcd\xe5\xbd\x02\xb7,\xf1\xdf\x87=\x85\ +\xb4\x0c\x0fA\x10\x84\xacx\x8dKu|n\xc5\xde>\ +]\x16]\x83\xa8\xc2\xaf\x07p\x99\xb3 \xba\xd8;\xf8\ +\xfdr\x7f;&\x09\x82 \x08[G\x13y\x99\x96\xcf\ +M4\xa4K\xa2[\x0d\x10\x81\xbf\xebSv/\xa7\x93\ +\xae\xef\xa2\xcb\xa0\xbd\x02\x0e-{i\xc7~J\x86\x85\ + \x08B\xd6<\x9b\xe5\x9a\x96\x83\x1c\xd8%\xd1\xbd\xaa\ +\xca<\x94@\x83}R\xa7\x8f\xfcN\xa2\xda8\x09}\ +\x89\xd0#`\xa3\xbeT:C\xcf\xfd\x06A\x10\x04M\ +<\xc6\x95z\x8a.\x0f\xea\x92\xe8\x1aL\xdf\xf5\xf1\xfe\ +\xbe{\xb9\x86e\xee\x15\x826~\x7f\x95!!\x08\x82\ +\x90=<\xf2V\xea\xe9\xa0S\xe7E\xb7\xda\xc7\xd0\xf2\ +f\xde\xf4]tY\x0d\x0c\xda\xa8\xb6\x87gdH\x08\ +\x82 d\x0f\x07\xeaSM\x13\xc0z\x7f^\x81\x92N\ +\x89\xeeU\xd3\xccC\x88\xfc\xab\xf4\xc4L\xef\xf9\xfd\x83\ +\x94\xe1\xed\x16p\x15\xaa\xc6\x97\x97:\x8beH\x08\x82\ + dQt\x93\xf6J]\x9f\xbdG\x8fh\x7f\xd5\xc9\ +\xac\xe5S|\xf5\x08\x95\xff)\xdf\xcc\x14\xa8\xe8\x82\xf9\ +\x85\xb1\x0b\xe0\xca\x90\x10\x04A@\xb6\xcf\xea6\xe9\xf8\ +\xecl\xba\xbb\x98\x9d\xf2\x22\x15\x9f\xe0WuE\x06\xb8\ +\xb9\xde^\x96\x85\x82\xd2\xfd\x03\xad\x00\xc9xN\x86C\ +a\xb0l<\x22\x03\x07\xc5v\x85r\x06\x11s1\xc1\ +\xe8I\xc4\x0a@\x94\xc0\xc5\xdb|\x16\x1e\xb9P\xd8\xb0\ +i]\xe6\xb52\x90\xf4\x986\x18P\x8d\x0e\xd2\x8d\x8d\ +@\xa3\xdf\x9d\xb6\x04!\xef!^\x03P\xa9n\x8f\xad\ +\xa0\xfau(\xba\xadSb\x83\x01\xf7\x1b>z\x84+\ +\xfb\xd5\xa19\x0bo!PO7\x05zVFB\xfe\ +\xb0`,\x8c\x83\xf6\xb1\xbeay\xd8\x1f\x84Q\x04\x0c\ +#\xf0@\x06\xf5'B\x7f\xc0\xdd\x94\xafN\xb4i)\ +\xb9u\x0e\xfb\xd6\xff\xa4\xda\xf8\x07\xda\xb4J3`\xa1\ +\x1f\x00\xbb\x0ai0\x1aA\xbc\x81\x18\xeb\x99h=\xc0\ +\x8d`42\xa8\x11\x84\x0d\xc4\xbc\x01\x84\x8d\x0cZ\xe7\ +\xb1\xb7\x81=\xda\xc0\x0ai\xc3V\x1b\xd9$\x87]r\ +\xd2Hn\xfc\xf2V\x9f\x7f\x86f)\xd2\x22\xe4\xad\xe6\ +\x82\xd6\x22\x04u\x19\xba\xbeV\xe0\x8e=]\xd3pN\ +\xf0\xd5\x83$Z\x9a\xa5\x1f\xb3\xdb\xa6\x090\x90\xf3\xb9\ +_\xdc\x96\xb0\xdf\x96\xa1\xa07\xeb'\xa2gI\xc4<\ +\x0fD\xe3A8\x92\x80\x9e\xdb\xa6\x1aRVb)\x04\ +D@\xd8\x05\xa0]\xb0\xa5c\x07\xe1\xab\xff\x0f|\xf9\ +m\x13\x00E\xea\xab\xea\xe7\x11\xde$\xfa\x0a\xb0`m\ +\xb9\xe6\x9eC\x00\xa7j\xcb\xf7\xd9\x0a\xe2z\x02-g\ +\xe6w\x98iQ\xca\xb6\x9f,\x9b\x85\xb5\xf2\xd6\x05h\ +Y \x03k\x89\xa0\xe3\xb1\xa1\x8e=](\x9c\xe0s\ +\xc2\xd1{\xd99\xae\x83>\xc1\xbd\x03\xfew\xf5\xb6\xee\ +\x8e\xa0\x11\xaf\xc4a\xee\xa7\xcc\xab\x01\xba\x9a\x80\x92<\ +,\x9bW\x04\xd0@\x00\x03\x89\xe8\x08\x22\xc4cQ\xcb\ +\xb5+\xf9\xe1\x94K\xbf,\x9da\xbf)_\x81\xa0\x99\ +\xec\xae\x0dCC\xb9n\x9c1\xee\xd5n\x22\xd5\x8a\x0a\ +\xc4\x00:\xc6\xe7~\x88K\xb3\xf4kz\x04\xb8|y\ +Q\x06\x81\x9e4\xc4\xd1c\x7fe=K\xa0_\xe6\xa3\ +\xe0\xb6\xe3]\x1bDT\x115\xf1\x9a\x1d7\xaf\xa9\xd6\ +q\x06\x13\x0a\xb8(\x15\xe9\x1a\xa5i\xff\xc8\xd0.\xbd\ +\x8c\xb1\x04\x14\xc3\xd7\x83\xcd\xfe\x8b\xee\xe6\x09#0\xd1\ +u\x5c\xfc[\x86\x81~|\x16GQ\x0f\xb2\x9e\x04p\ +\x14\x0avo\x0c\x06)\xba\xe9\xbaJs\xa6|\x11\x82\ +F{\xa3\xf5zF\x9d\xb8}\xd1UJ\x9d\xe8\xfbM\ +=\xf5\xb1\xdf\xd7\xbc<\x8e2\xa2\xae\xf7\x06\xf6)\x5c\ +n7&\x9dWd\x18\xe8G_e\xdd\x06\xc2\xe1b\ +\x09\x80\x88&\xd9U\xe6Ub\x09A\x93\xd5\xe2FM\ +]\xf4\xf6E\x97\x88\xc7\xfb}\xcfV\xcf^\xe5\xf75\ +\x8b\x10\xeb\x19\xdc\x8a\x0b\xaf\xf7\x9f\x8b\x16\x19\x05z\x91\ +\xac2\x8e&\xe0b\xb1\xc46_\xf3\x8d\xa9xd\x84\ +\xd8A\xd0`ot\xa3\xa6c\xact\xa7\xa2\x9b\x9c\x14\ +\xdd\x93@{\xfb\x9cq\xd6\xdas&\xd6\xf9\xfd3\x5c\ +\xe5\x06\x16Z\xf6\x80\x97e\x08\xe8E5@&\xab[\ +H\xf61w\x085+\xe5\xfdL,!\x84?{\x99\ +\x9a4Mj\xdc\xb9\xa7\xab,\xef[Y0\xd5*d\ +\xe5\xc01\x17\x07h\xc7\xd7e\x08\xe8\xc55\x95\xc6w\ +@8H,\xd1\xe6\xb4\xf0\xdd\x86x\xb0\xdd\xba\x04\xa1\ +\xe3(\xad\xdb\xa4\xe9ja\xe7\xa2K\xc4c\xb3p\xa0\ +9+\x85\xaa\x09[\x1dP\xcc1\x8e\xc7\x22\xba\x9a\xa1\ +\x88\xa6\x8a\x15v>\x96J8rl\x86'\x14\xa2b\ +I!\xab\xda\xe5R\xb3\x9ea\xf1\xf6\xf6t\xc9\xff\x8c\ +N\xce\x92\xa7\x1b\x94\xe82\xc3YO\x8e\x14\xc5\x80^\ +\x050\x00\x9a \x96hg<\x19|h\x86\x97(\x15\ ++\x0a\xc8j{?]\xf7t\xd1\xf6\x9en\xb2*6\ +\x84@{fa\xf3{Uv\xde\x00G\x02\xaa.\xf2\ +\x9e\xd4\xcd\xd5\x8b\xa2hd\x5c\x90\x91\x11M\xaa\xe6\x0c\ +\xcbh\x9c+*\x13+\x06\x1a{\xcd\xfbH\x83\x05\xd8\ +\x9a\x8e\xae\xe26EWy\xee\xb7\xb2t\xb6\xea\xb3\xbc\ +\xf2te?WGA9F\xac\xd0\xe1x\xdaC<\ +]\xad_`1\xf2\xbf8\x86\xad\xe9\x83\x9bj'\xfb\ +\xb9\xdf\xca\x92\xa1\xb2\xe3\xe9\xc2\xb0\x02\xfa\xb8\xdf\x91\x11\ +\x0e\xcd\xf6s\xb1\x9fX\xa1\xc3\xc5d\x8f\x0c\x176\xe2\ +\xe9\x06\xbbq\x98\xf7\x95\xd5\xd8!G\xd7U\xbf\xda\xc9\ +\x1fdKt\x1b\xf3\xe9\xc5{\x9eZ*#\x5c\xbbB\ +\xe9#\xc5\x0aY\x9f\xb4\xc5\xd3\x0d\xf8X\x8ax\xbaa\ +n\xef\xb7\x1d\xad\x93b\x03\xfd>\x9f\xfb\xd5Xv\xb3\ +\xb4\xf9\xed\x06\xf2\x02l\x8f\xdf\x93!\xae\x0f\x9fW\xa0\ +\x84\x08\xbd\xc5\x12\x9d9~.\xa2\xab\xb1$\xe5}x\ +\xd9\xb3\x92\x8e\xa6\xab\x85\x1d=]\xc3t\xb3V\x16\xcf\ +s\xb3\x93q\xc6\x01l\xaa3\xc3\xdb\xa0\xec\xf7e\x80\ +\xebC\x8f\x9e\xd1]\xc4\x0a\x9dJ\xbeHf\xb8\xba\x16\ +\xd1\x0dv{ \xffE\xd7\x86\x83|\xf1t\xa1p`\ +\xb6nfx*[\x07\x9a\x03\xf0ty\x85d.\xeb\ +\xb6\x9f\xeb\x15\x8b\x15:5k\xa72L\xc4*\x11#\ +\x06J,\xef\xc72o\xe9(\xad\xdd\xe8Rm\x0c\x98\ +\xd1\xd9\xba\x9bK\xc6\xc6\xfc\x89\xef\x93\x84\x96\xf5\xab\xd7\ +\xea\x8a\x15:\xb5'\x98\xcc\xcc\xce,\x9en\xb0o0\ +\xef\x8f\x0cQ\xac\xc8\xc8\x0bO\xb7\x1a \x10\xbe\x99\xad\ +\x9b%U\xeb\xc6,-\x1d\xd2\x01\x84\xe0>\x96\xc1\xad\ +\xdb\x12S%\xc5\x0a\x9dR\xcdT\x86\xab\xe0\x88\x181\ +d\x11\xcc|\x13]\x9b\xcd\xbc\xc8^\xbefrd\x18\ +\x01=\xb3\xb4\xcf\xc0\xcf\xacCSv\xb2\x88\xa95\x80\ +T\x93\x952\xb6\xf5b\xc5\xc7\xc9U\x0c\xb0X\xa2\xc3\ +\x89\xa1%\xc3\xf0rJ\x8c\x18\xe8\xaa\xa9\xa5\x00\xaa\xa6\ +\x99\xc8\x87\x15\x11Ext\x16\xf7\x89\x9a\xcf\xac\xcb8\ ++\xb2M\x0c\x18\x8d\x01\x84*Et5c\xd8SH\ +\x03X-\x96\xe8\xb8\x1bX\x86\x97H\x8b\x15\x83\xcc\x83\ +\xcb\xffV\xa3\xc4\xackx\xd9S\xdb\x09\xe3\xe8,\xae\ +\x9e\xb3V\xa0\xba\xa59\xb9>\xe7\x96co\x85\x0co\ +-%\xe5\x15\xb1Av=%\x06}.6\x0ctS\ +\xbe>\xdf\x7f\xa2mpD\xd7\xb1\xa5\xb6\xab\xd6s`\ +6\xcf'e\xeb\xd2\xbf\xbf\x1fM\x0c\xb8\xb9\xfd\xae\x0d\ +\xf1t\xf5\xcc\xcc}Q\x8c\xd0\xf1:6C#K\xbe\ +C\x90\xae\x14\xe3\x7f\xc8\xfbMk=\xcf\x22\x13c\xe3\ +\x16\xd1\x9dW\x01\xc5\xc0\x01\xd0\xb3)9\x83\xb1!\x97\ +\xf7ljJ\x8b\xe8j9!\xa9G\xc4\x0a\x1d\x92\xe9\ +\x19H\xa9\xd4\x16l\xae\xce;\x05 \xba\xa5\x9aF!\ +\x9a\xb6\x88\xee)=\x22\xc3\x09(\xd38\xc8\xdf\x98\xc3\ +=\xafT\x9f\xfb\xb1Q\x86\xb7~D\x13\xe9\xf7\x00H\ +\x889\x8b\xa4\x99\x9e\x13+\x04\x87\xcdx\xa9\x00\xf6\xad\ +K4\xcd\x97\xf8\xca\xd3\x85\x85}\xf4^\xdd\xd1\xda\x1c\ +\x9a\xae^\x86\xb6\xbe\xb8L\xbf\x14+d\x8f[\x13\xf6\ +\xeb\xcc\x92\xb0\x16\xcc\xa4\xce\x1f\xff:\xe1\xfc7\xff\xbd\ +y\xa5\xe9Yp\xfeJt\x15\xbc\x11\xd9V\xc5,\x97\ +\xb4\xfc4\x87\xc5\x03Dtu\xf6vk\xd3\x8f1C\ +\xbc1do\xbb\x87\x81\xe9b\x89@\xb8\xb3\xba\x10\x8e\ +\xc5\xb1\xb6U\xcf\xbe\x0a/\x831B\xef\x15\x1e}\x96\ +\xbb\xbb\x91\x88.t\x0f\x81\xda\xe71\xb0J,\x91\x1d\ +66\xd9\xb72\xf8\x13\xb1DN'\xc17\x96\x7f\xe2\ +\xdc\x85\x82H\xd0\xe6\x1e\x9aV\xc5\xfb\xca\xd3%\xa2}\ +4\x7f\x09\x9f\xe50\x84#\xa2\xab9%\x09\xac\xf6\xd2\ +4\x96\xc1\x1f\x885\xfc\xa7\xcf\xfd\xd8\x98\xf6\xe8T\xce\ +q\x82c\xe1&\xe5\xf3'\x0e\x99'o>\x8b^\x00\ +\xbf\x97\xfah\xfa\xe0_y\xba\x0c\xcd=]\xd0\xa79\ +\xbc\xdd:\x19\xe6\xfa\x13\xbd'\xbd4\xe99\x07{\x8c\ +?p M3\xf2}ac\xbf\x96b\x1c\xce\xe0w\ +\xc5\x1aY\xeb(\xc4\x0c\xfeS\x0a\xce\xe8XM\xf2\xe3\ +\x02J\xd1\xee\xa3\xa9s\xb8\xd1\x04\x80\xa6*\xecB@\ +y\x96\xbf\x0e3\xcb\xc5*>S\xa4r\x15\x22\x90\xee\ +ByBY\x02\xf5\x80}YrJ\xf4\x0eez\x17\ +(\xf0\x19 \xda\xb7\x8b\x13\xdf*b\xac`\xf0\x0a\x06\ +\xad \xe6O\x99h\x8d\x07o\x95Cj\x15\xa7\xec5\ +e\xb3\xb0%\xd1oE\x05b\xe5\xbd\xd1\x8b\x949\xc8\ +d\xda\x8f\x88\xc7\x80\xe9t\xd2t\x22i\x8f\xd2\x84\xfd\ +\xd6\xb2\xf1\xd8o\x8f!\xe64bTu\xd5\xb6\xdbe\ +~\xae\x03\xb8\x15@RS\xa10\xc1T\x06B\x09\xa1\ +\xfb\xf5\xa9\x19H\x12\xe3Uf~\xc2s\xd5#\xd1\x99\ +\xf6\xbb\x85Wu\x8b\xfb\x80\x08\x1av\xaan4\x01\xc0\ +p\xcc\x110\xb3\xfe\xc1e\xf58\x129\xc6\xc7\xb08\ +W\xcbK\x11\xdd<#63\xf5\x01\x80j\x00\xd5\xeb\ +/F\xaf\xa8c~\xcd \x1aF\xe0R\xa8\xcd\xdf\xae\ +\x87$\x1353\xd1Z\xcf\xf1\xd6*C\xad^\x95J\ +\xaf\xd8cv{\xb5\x86w\xac\xd92\xa8\x0eI\x00\xab\ +\x01g5\x80\xff\x02\x98\xf1v\x05.\x1d\xda+2A\ +)\xeff\x22\x1a\x8e\xbc+\xbf\xe9\xdc\x05\xe0\xae\xa6\xa9\ +\xe8g\x19\x91C\x14\xbc\xfd\x18\xd4\x9b\xc0=\xb1\xa9\xff\ +\xeb\x06\x06%\x014\x12\xf3\x17\x0cZ\xe32\xafV\x9e\ +\xfa\xbc\xd5M\xaf\xea5\x1b\x8d\xc8\xafd3\xfa\xe1\x14\ +\xf4\xb2\x181\xc3\x88\x94\xba\xca\xeb\xa1<\xeeE\x86Q\ +F\xcceD\x5c\xb4U\xbe\x8a\x07B\xa3\xe7z\x0d \ +\xf3\xa3\xc7\xd6\xa5\x96g\xab\xa4\xaeF\xb2\xdbW\xcf\xa6\ ++\xb4\x9a\x00 \x1d\xb7\xa6(\x85\x19\xd9\xbe\xe1\xaaz\ +\xbbh\xf3\x84\xe3;\xcb\xc6#\xb2\xc7\x10\xab\x85\x90\xfd\ +>\x8b\x1e\xf0\x8bH\x8d\xfd3\x91*!\x1b\xdf\xf1\x90\ +!\xd6u\x04\xfc\x94\x90\xdd\x8c\xffvr\x16fY\xb5\ +\xcedy\x1bBXq*\xcd% \x1a\x05\xed\xceP\ +\xf3Qj\xb3\x17\x9a\x93\xfd\xdc\xde=\xd1#\xab\xabi\ +\xceM\xf99b\x16OW\xc8\xdaw\xbciA\xc7U\ +\xb9.m*\x08\x1a\xe5\xf0\xf4\xd3\xf1\xb9\x95\xa7V\xab\ +\xcde\xc3\xf6\xc8\xc5\x0d-#\x92\xe54oZ\x96\xa3\ +\xbd\x19\xe9\xcb*dw\xac\xd48\x09\x80\xaf\x13K\x08\ +\xc2\xb6\xbc]\x01\x0b\x80\x96\xa2\xdb\xd4\x92\xfeRti\ +@NB\x02nv\xcfV1\xb0,G\x9b\xe1\xd2\xba\ +L\xc8:\x8f\xd4;\xb7\xa2\x00J\xfa\x09BW\xd8\xbb\ +Ol\x00\x11\x14\xf4\xcb4o\xees\xff\xe62\x90L\ +\x9c\x13\xd15L.\xcbr\xa1\xef\x5cy\xbaJ>}\ +!\xdb\x9cY\x07\xcfa\xef\x1a\xb1\x84 l-^\xce\ +\xee\x9a\x16/Y\x05\x00\xaa\x1a \x80v\xcb\x89V\xb9\ +*\xab\x9e\xae\x9b\xab\xee\x1a\x0c\x92O_\xc8\x05\xb1\x84\ +\xbb\x80\x0b\xa0k\x8c t\xday\xf3h \xb4<\xa3\ +K\xab\x01@\xfdx\x12\xfa\x10\x10\xcb\x87\xd2]6\xbb\ +\xaf\xe5\xc8\xd3\x15\xd1\x15rY\xe2\xb4N\xac \x08[\ +\x22\x9a\x035mF\xb1\xc9\xd3%\xc3\xda-\x87\xc6\xea\ +\x9b\xedB\x07\x0c^)\xe1e!\x9fp\xc1\xcf\x8a\x15\ +\x04a\xcbY\xd7\xc1\x9af\x5c\xaf\x01\x00e\x92\xb7{\ +\x0e\x8d50\x07\xe5\xa2^\x97\xf0\xb2\x90O\xd8\xad\xce\ +\xdbb\x05A\xd8\xd2Kw\xa8\xa6% ?\x01\x00\xa5\ +\x0c\x95KOwP\x0e2\xc4r\x11b\x8e\xca\xa7/\ +\xe4\x8a\x1es\xd0\xc0,\xed$\x05a\xf3,\xaf\xa5\xe8\ +z\xac\xde\xdf\x14^\xe6\xdcd.oZ\xa1d\xdf\xd3\ +e/\xfb\x9e.\x83J\xe5\xc3\x17r\xbbJ\xc6R\xb1\ +\x82P\xe8,\x18\x0b\x03D{\xea\xf8\xec\xb6\xcb\x9bD\ +\x97A\xfds\xd8~*\xeb\xa2\xeb9\xea\xe5\x1c\xfc\x94\ +2\xf9\xfc\x85\xdc&a\x88\xa7+\x08\x87\xec\x19\x1d\x9c\ +I\xb3\x88 \xbbA5\xa5\xec\x0f6y\xba\xc4\xa59\ +\x5c\xae\x0f\x98W\x91\xdd$\xa4\xa2Y\xc9\x95\x0c^\x9e\ +\xe50\xb9x\xbaB\xae\x87\xad\x94\x1e\x15\x04\xcb\x19\xaa\ +\xe9\xf8\xfd\xb4\xff\x5c\xb4\x00\x80\x02P\x9a\xbb=]X\ +'\x95a\xd7\x1c,+\x16f\xf9\x0e\x22\xbaB\xae\x91\ +\xd2\xa3B\xc1c\x10}MO\xcd\xfd\xaaD\xb1\x09P\ +qNo\x1e1\x07\x02\xce\xaa,\xdfe!\x80\xf3\xb3\ +\xb8|(\xcb\xd7\xfd\x92C\xf7\x8a\xec\xcd\x86\xbb\x97A\ +\xb4\x17\x80\x9e\x0c\xea\x09B\x0f\x02\x1b\x0cZ\x0f\x06\x13\ +\xb8\x05\x0a\xad\x00\x1a\xd9\xa3f\x06\xa5\x98\xdc\xf5 \xb8\ +\x1e\xd3\x06\x06\xd9\x06\xab&\x9d~\xbb\xe3y%Jq\ +\x91\x22\xeeAd\x94\x92\xc7E\xa4\xb8\x0c\x8c2\xd0v\ +\x8d/\x19\x1b<\xa8\xd5.y+?\xaaw^\x1fY\ +\x07;\x07\x8f\x98\x92)W\x100RSO\xf7\x83-\ +\xa2K\x8c\x92\x5c\x1e\x801X\x0d\xc4\xa6\x1e\xa2\xd9\x9b\ +\x9d\x88\x16\xc6\xb2\x9b\xd4R\x9e/_\xf0\xfa\x89\xe8Y\ +\x121\xcf\x01a<@G\x11q/l\xb5\x03@\xd8\ +\xae\x22\x08m\xf7o\xd5\xe6\x1d\x8b/\xff\x9b/\xff\x88\ +\xf4j\xf7i\xaa/\x1f\x9e6\xfd\x9e/\xff\xb9\xad\xb1\ +A\x80\x01\x86\x01\xc2\xf0r\xab\xd5\xa9\xc4+\x0c~4\ +\xc9\xce\xec\xb2D\xd6\xf6^c\x10\x04\x14za\x0c\xda\ +W\xd3\x07\x7f\xff\xcb\xff\xab@(\xc9\xe5\xbd\x15\xbc\xac\ +\xb7\x11\xbc\xad\xc6~\x87\x81\x86,&\x84\xf5\xd3\xfd\xe3\ +\x9dW\x01e\xc7\xcd\x1f\x95\xc4\xac\x15\xa4\xe8n\x22:\ +\x99\x08\xbddXwy\x01V\x04\xc2\x91Dt[\x8c\ +\xac\x0f\xedJ\xf3\x87\xd5\xc8\xc22\x96P,\xd6\x16\x0a\ +\x99j\x80\x18\xd8W\xe7\xe3B\x9b\xb2\x97\x99K\x90g\ +\xe1\x81\xeaM\xc9b\xcfe1>\xbf\x0b4\x0f#\x9f\ +\xd6\xc7|\x80\x14\xfd\x86$\x13\xdbO\x01\xeeAD\xbf\ +\xbd\xae\xca|\xf0\x95\xf8v!\xe9\xcc\xaf.\xa2+\x14\ +4WW\xc5\x06\x13\xa1\x07\xf4<.\xb440O\x97\ +r\x14\x93g\x8f\xfe\x96\xc5\xc9\xb5t\xf5\x05\xfaz\x1e\ +\x87\x8d\xb0n \xd0Y2\x8c\xb3\x16\x02;k\x14Y\ +\xbf\xf6\xb9\x0a\x8f,\x8e\x84\x02\x1fW\xf6\xbez\x96\x7f\ +Dz\xd5\xa7\xf6{_\x89.SI\x8e\xebO\xee\xb3\ +`,\x0cd=1\xc6\xfc\x1bo\xdal\xcc\x0a\xbd\xa2\ +Q-C\xcc\xa9\xca\xc8\xd7\x08\xf8\x89\x0c\xe1\xac{\xbd\ +?h\xa92\x0f\xf2qK\xa3\xafXU\xd0\x8d\x868\ +zl\x9c\x04_\xbe]\xc5\xf4MM\x1b4\xfco\xd8\ +S_\xf5`W\xb9>\xfeB\x84\xa2CGD\xb2^\ +Q\xa4xF\xeb\xa7\x04~+[\xd7\xf7LW\xcb\x10\ +\xb3\x82\xf7\x03\x22\xbfC\x9fB\x1b\x11\x1d\xb2\xd8\xc7\xc5\ +\x0d\xe9\xbd\xa5!\x14&ed\xce.\x8a\x9a\x97\xfa4\ +\x08\xc6h\xea\xe9\xbe\xb6\xed\x1c\x0cX\x01<\xc5\xc8\xdc\ +l^\xd3S\xc8^\x16\xf6nz\x0e\x03:Y\xa6\x82\ +\x9c\xad0O^?\x11=\xe1G\xe9;\x96$7A\ +/\x92S\xa2{\x83\xe8d\x97\x95_\xce\xcfh\xe8\xa9\ +\xbaol+\xba\x94\xbd\x10\xecN\xbd-\xf2\xf6\xcd\x8d\ +\xe8zOe\xd1c\xd4\xae\xbdTrjt\x0f\x22\xf4\ +\x97\xe9 g\xden\xac8b\x9d\x90\xf1L\xb3\x0f\xca\ +I\xdaI\x0a\x9a\xa1,\xef\xfb\x9bO\xd7e,\xba\xad\ +\xf1\xd8 ]\xe7.\x97\xf8\xf5m\xb5\x83s/\xba\xa0\ +\xdcx\xbao\xc1]\xc8\xc0\xda,\xedMk'\xbaJ\ +ycd*\xc8\xf9\xb7\xbe\x7f\xe6\x17\xb1\xfa\x89!\x05\ +\x9dh\x9c\x82\xde\xc4\x98\xc4\x8c\xd6\x7f/M\xbf\x9f\xf9\ +~\xaew\x90\xae\xb6H\xb7\xb8K\x02\xf7t\x89\xf1\x8d\ +\x5c\xdcgt\x02\x0e\x98\x1f\xce\xd2\xe6\xf8\x10\x0d7\xf4\ +\x07\xcat\x90\xf3\x84\xaaQ\x99^\xc3\x84'\xa2+h\ +E\xb1iV\x12\xa1\x94\x88\xff7v\x01\xdc\x8c\xc7\x91\ +\xe2\x83\xf4\x8c,\xf3'=\xe6l[3B\x01\xb9\x17\ +]\x06}\xdd\x8f\xbd\xaeN\xb9\xf6\xcc\x7f\xce\xd2\xb1\x90\ +\xc1\xfa\x95\xff\xa4>2\x1d\xe4z\x81\x99\xf9BG\xb9\ +JDW\xd0\x86e\xe3\x11\x01\xf0\xbd\xcd\xdd\xb1\xde\x84\ +/[\x928BSs,\xd9qk2\x80\x9a\xaeD\ +P\xb1\xa8q\x08r\x13b~>\x1b!f&\x0c\xd1\ +0\xd4)\xc98\xb9\xcf\x5c\xec\x9d\xf9xa\x11]A\ +\x1b\x86\x0c\xb6\xce\x22\xa2\xdd7\x0f\x80\x8c\xf7sWT\ + \xc6\x0c==]\xde\xb1\xbf\xbb\x026\xb5\x1bB\xce\ +\x8f\xae\xa8\xc3\x91\xab\x103\xf8\x91,\xcc\xa6\xbb\xae\xa8\ +\x90z\xb8B\x87\x92\xd9\xd3\x87\xc8\x90\x88\xae\x00]J\ +5*\xf0\x8f\xbe\xfcg\x17\xbc$\xd3k\xee\xd2\xc7<\ +\x98\x08Q=\x17\xdd\xf4J\x1b\xa2\x1bL\x9fN\x02\x0e\ +\xcf\xd5\xbd\x5c\xe6y\xd9\xf0\xd6{\xf7\xb6t\xeb\xed\xe8\ +\xca\xb4\x90\xf3\x0f\xdd\x15OW(\x14\xae\x89GN\x06\ +\xd1\xfe\x9bC\xcbNs\xb3\xfbR\xa6\xd74\x80#5\ +\x8drq:\x9d~14\x9e.\x801\xfe\xd7\xa7m\ +\x9b\xc7\x1a\xdc\xe7\x18\xfc\x89\xdf\xd7\xb5\x88Fh\xf6\x15\ +82-\xe4\xdc\xe6~l\xdf\x88\xe8\x0aZx\xb9\x86\ +\xf2~\xbe\x95c\xf5j\x9f\xfb\xb1\xd1\x87\xbd\xbc#\xf5\ +\x1c\xfb\xfcn\xd9\xac\x1d\xb76\x1515\x07\x94\xd5Y\ +\xfau2\xf7\xcb\xc5\xbd\xce\xac\x83\xc7\xa0\xd9\xf0\xff\xbc\ +\xf1\x08\xcd>\x83V\x99\x1ar\x9eI\x95\xce|\xacP\ +\xb9\x18R\x08\xbd\x97[\x199\x1d\xa0-s\xbaG\xf8\ +'\xfcI\xca:LS\x93,j\xfb\xf8S\x16[\xe0\ +u\xe8)r\xee\x8c\xe99j\x163<\x9f\xbd\x98\xe1\ +z\x1d_a\x11\xdd\xdc\x93\xf2a\xc5\x5c\x22f\x14\x10\ +\xf2V\xa1\x06\xbc\xff\xdb\xf6\xb3\xf5^\xc8\xf4\xba\x83\x06\ +\x19\x87\x11\xe5\xb6T\xb1\x8f\xa7E\x16\xb6\x9d\xcf\x04\xae\ +Gp\x85\x80s\xb6\xaf\x1b\x9b\x91Z\x0e\xe09\x7fE\ +\x8c\xf6\xd1\xea+\xf0\x02\xdbJ@\x01\x87\x97\xd3>\xec\ +\x0dI[?!\xd4\x9cZn\x9d\x09\xa2Q_\x09.\ +\xbcV\xe5.\xcc\xbc\xa0\x8f:N\xdb\xa1\xcf\xb4\x13O\ +\x97\xa8>\xc0\xa5\xc0\xd1\xf3*rW\xde\x8e\x19\xf7\xf8\ +|\xbd\xe1\x9a%\xf5\x88\xa7\x9b\xfbm\x94V\x1f\xde\x9b\ +x\xba\x02\xc2\xdc\x9f\x9b\xc0\xff\xb7]!\x9e%\xbd\xee\ +\xc6\xfa\xcc\xfd2>^\xd3$\xaa5\xd1\xda\xb6+q\ +)\x15\xa0\xa7K\x84~\x13\xca\xcd\x9c\x95&\x5c\xb3\xce\ +~\xc4\xcf3\xbbD\xe8\xdd:)6P\xa3\x95\x97\x88\ +n\xee\xbf\xf2\x16?\xce\x1d\x88\x1d\x85\xb0r\xd8>\xd6\ +9D\xf4\xb5\xad\xff\x9dG\x94\xf1~n\xf3D\xec\xca\ +\xa0\x034us\x17\xee\xbc\xa4%\xe3\xf3 \x9f\xcd`\ +:1W\xf7\x1aT\x87$3\x12~^SE\xec\xfd\ +Q@\xc7W\x84.GC\x9a}xo\xc9\x1c\x7f'\ +\x92\xe5.\xa0\xb3\x89N\xc4\xfc\xb3\x1d\xbf{\xef\xe9L\ +\xafm\xc5\xaco\x13\xb4]p.\xda\xa9fx\x9eZ\ +\x19\xe4\x93)\xe2\x93ry?\x87\xcc\xbb\x18\x99\xef\xb3\ +}\xf5\xfc\xb4\xbf\x0c=\xa1\x1d\xd9m\xf1\xe1L{2\ +\xc7\x11\x91\xb4\xbc7\xa13\xec1\xc8\xbc\x9c\x88\x86n\ +\xb7\xd0\xdc\xb0*\xe5>\xe7C\x09\xd5\x13u\xb5\x8b\xed\ +\xe1_;\xd5\x0c\xc7\xe0\x15\x01gx\xed\x97\xcb\x10m\ +qM\xebg\xf0\xb3X\x06CDWh\x0f\x1f\xc2\xcb\ +9>\xd6\xc7h\x92\xd7&tD\xd3T\xf4\x83\xa2\xeb\ +\xdb\xf8\x80\x9e\xdccvfY\xfb\xcb\xc6#\x02\xa2\xf1\ +\x9aF\xb7\xea\x9fX\xef\xbc\xda\x8e\xa7k\xaf\x08\xb8\xe7\ +(\x99\x96\x93So7\xed\xd2\xed\xe1j\xdd&\xe41\ +\x8e\x0f\x9dJ>\xcc\xf1\xd1\xb2/\xe4\xb5\x09\x1d\x115\ +\xcc_\x12vl\x5c\xc3L\x19\x97\xdd\x1d<\xd88\xa6\ +\xadkk\x22\xbb\xff8\xb3n\xe7\xc7SUY\x02\xf5\ +\x8c\x80\x8f\x92\x10\xe54\x8cP2\xc3~\x15\xbcs\xf7\ +\xbf\x8b\x0f\xbfWC\x1c=d\x08\x0aYL8\x5c\x9a\ +\xe3\xf0\xf2j\xb1\xba\xd0\x1e\xcd\x95\xd6(\x10Mi\xc3\ +\xcbK5\xc1\xfe[\xe6\xdf\xbc:YW\xdb0\xd1\xdf\ +\xd1nF\xf6\xa6\xd8\xf9\x87\x08\xd6\xdd\x1d\xf7Y\x1cE\ +\xb9\xbc\xa5\xeb\xd1\xad~y\xea\xc50\xbe)\xc3P\xc8\ +\x16\x9eG9\x15]\x1bxG\xac.\xb4G\x04\xb8\x9d\ +\x00\xa3\x8d\x09\xf1\xd9\xf2\x046 \xc3B\x1b\xc4|\xb2\ +\xae\xf5\x96\x1d\x98Ow(\xba\x0c,\x0b8\xc4\x5c\xdc\ +\x87\x22\xdf\xce\xe5=o\x9e\x9e~\x02\xcc\x8b\xfd\xb8\x96\ +\x01:T\x86\xa1\x90\xbd.\x15\xc6\xc2\x1cN\x1a\xe9/\ +\xd2\xb6\x88\xae\xb0SR\xf1\xc8)D\x18\xd7\xe6\xf7\xe3\ +a~\xa6\xd7\x9fPn\x8e!\xa2\x01\xd0\xb2\xbf\x09\xbf\ +U\x5c\xd3\xfaY'D\x97\x96\x05\xfd\xb0\x0a\xde\xf9\xc8\ +mqnv\xa1~\xe1\x93\xa5\x0f\x91\xa1(d\x8b\xa2\ +Dr\x05\x98_\xcb\x91\xea>\x9fi\x12\x8c\x90\xbf,\ +\x9f\x88\xa8\x22\xef\xb6\x9d$\x109v\xda~\xcc\x07'\ +\xe6,]\xed\xe3q\xfb\xa1\xe5-\xa2\x0b\xce\xed\x9e\xd1\ +N\x82\xf8\x13\xd6_\x9c\xdb&\xeb7\xd7\xa6\x1f\xf7g\ +2#\x11]!\xdb\x19\x91\x89\x1c5hxX\xac-\ +\xec\x8c\x01Q\xeb\xba\xed\x8f\x08m\xc5\xd3%\xb3\xb1\x06\ +\x99V\xb7\x22h,\xba\x1d\x9fOV\x00\xe0)~?\ +x\xb7\x1c\xb1\x126\xcf\xcc\xb9\xb7K\x99{\xbbD\xe8\ +\x97\x9c\x12\xdd[\x86\xa4\x905\x0fc\x85s\x0f\x83?\ +\xc8\xae\xb0\xf3g\xf5\xcd\xce}bm\xa1-RS\x22\ +\xfb\x10p\xe5\xceK\xbb\xd3\xacL\xefq\xc8pc\x1c\ +\x01\xbbi\xba0nm@\xc7\xf5\xa67\x89n\xdaY\ +\x8aPtA\xa3\x0bs}\xcf\x9bk\xd2\x8f\xfa\xe1\xed\ +*\xcb\x93}]!k\x0c{\x0ai\xd7\xe5J\xdf;\ +em\x9buy}\xff\xb9\xd2\x14C@\xdb]\x84L\ +\x9eI\x84\xe8Nr\x01\xd6~\xf2I\xfa\xf1L\xefc\ +\x10\x9d\xa3\xb1\x99\x16\x0cHt\x5ck]\x01\xc0\xaf\xef\ +\xc1j\x86\x0f\xcd\x863\x1e\xf48,\xd7\x1ec5\xc0\ +\x8e\xc7\xd7\xfa\xb0\x17v\x98\x0cM!\x9b\xc4\xa6\xbb\xcf\ +\x82\xf9R\x06\x18\xbe\x87\xc5pW\xa4\xc6\x9e%V\x16\ +\xda\xe2\xb4\xdef\x15h\xe7s\x1c\x03\xf7\x0f{*\xb3\ +J\x7f+*\x10\x03\xd1\xe9\xfaZ\x89\x1f\xed\x5c\xfe\xd2\ +f\xe1!\xf0\xb2\x10\x84\x98I\x99\xde\x05\x01Lf\x7f\ +c\xc63\x19\x16\x148Z\x86\xa6\x90m\xac\x84S\xe3\ +1\x9d\xc1\x8cz\xff:>\xe2\x8f/\xbeg\x7f_\xac\ ++\xb4E\xcb\xd4\xa2\xddAts{\x7f\xc7v\x91\xf1\ +\x82m\xd7>\xd6\x04]\x0bb0\xe0\xa6S\xce\xfcN\ +\x8b\xee\xe6x\xf4\xd2\x90\xa4\x5c_P\x1d@\x91\xeb4\ +\xe3\xcaLBw\x04\xda\xa7ej\xd1\xee2D\x85l\ +\x13\xadM?\x92L\xdb\xfbx\x8c\x9b2jX\xc2X\ +\xe4\xb8\xde\xb1\x91\x1a\xfb\xd2\xb1\x0b\xa4\x19\x86\xb0\x93\x85\ +\x9ea\xff\x81\xa8\xbd\x02@\xfcj\xc9t{I\xe6\xdb\ +\x8b\x98\xaa\xab\x8d\x08X\xd4\xd9$2\xb5\xd5\x7f\xf5f\ +8\xaa\xef\xd0^WU\x9aG\xe4\xfa\xbe%\x09\xfb5\ +\x80\x1f\xc8\xe4\x1a\xa6\xe1\x8c\x93!*\xe4\x82\xb2YX\ +\x1b\xa9\xb5\xaf[\xf4\x9e=\xc0v\xf8H\xf6\xf8\xc7\x0c\ +\x9e\xcd\x8c\xbf\x82\xf1\x12\x98\x17\x83y13\xff\x8f\xc1\ +\x1fl\xfa\xff\xf8\xbb\x07\xd40\xf3e\xaeK\xc3\xcdZ\ +\xfb\x88\xd8t\xf7Y\xb1\xa6\xb03R\xd3\x22\xa7\x13\xd1\ +\xa9\x1d$\x10e\xec\xe5&\xabbC\x00\x1c\x0bmO\ +\x17\xf0_:\xad\x13\xd8\xb2\xa7\xc3o\x18\x14\x8e.J\ +&P\x05\xf8U\xa6\xb1\xf3\xb8d^o\xc0\xfd.\x01\ +\xb1n\x86\x98\xc7\x01\x98+CU\xc8\x15c\x17\xc0\xc5\ +\x02g!\x80\x85b\x0d\xc1O\x9a'bW\xa5\xf8\xee\ +\x0e\xc2\xaa\x1b\x9bU\xe6\x19\xef\x8a\xddID[9\x81\ +\xbaU\xa1J\x9b\x0fw\xb6\xcc\xfa\x96\x1f\xe99\xd6\x1b\ +!*6\xfb\xdd\xe68\xfa\xe7\xfa\xb6\xb1\x9a\xe4\xc7\xcc\ +\xb8#\x83K\x88\xa7+\x08\x82\xf6T\x03\x14\x89Z3\ +\x89\xd0\xaf\x03\xc1\xb9\xa7\xd7\xddX\x8f\x8c\xcf\xe6\xf2$\ +\xe8\x1bZ~\xb9hVre\xe7\x0bAm\xe6\x96\x99\ +\xc9\x15\xcc\x99\x19\xcf\xc7\x1f\x11\x89\xc0\x8c\x07q\xef\x0d\ +\xb6}#\x83Wvs_wp\xaa22T\x86\xac\ + \x08:s]\xdc\xbcE\xafK\xc3\x00\x00 \x00I\ +DAT\x98\x08'v\x94<\xe4\xa5\xd4\x9d\x99\xde\xeb\ +\xd0\x11\xc6q\x04\x1a\xac\xab\xad\x18\x9d\x0f-o#\xba\ +\xd5\x00\x13\xc2\xb1\xaf\xbbY\xc1*\xdf\xae\x80\x95\xeb\xdb\ +\xf6\xbd\x07M\xec\xd2O\xd0\xfdr\x96'\xc8\x90\x15\x04\ +\x01\x1a\x17\xc1\x80\xeaDC\x18\xe6\xf9\xb1Y\xa9\x8f\x90\ +q\x09`u\xa9\xce\xf6r=\xa3{\xa2\x0b\x00\x1e\xf0\ +Fx\x22\xcc4`X\x1f\xeb\xdc \xee\x1d\x99n\xff\ +\x89\x19\xcfu\xf3\xc9O\x94a+\x08\x82\x8e\xbc]\x01\ +\xcb0\xbd\xfb\x08(\xee\xe8\xef:\x84\xdff,\xf0\x93\ +#\xc3\x01\x8c\x87\xbe\x19T\xaf\xc5\x12\xa9\x0f\xbb-\xba\ +\x04~\x13\xe1\xea\xd8p\xf5\xbc\x8a`6\xd7\xd9\xc3e\ +\x0c\xd8\xddx\xe8\xb1\xf5\xe7\xa1L\x86\xaf \x08\xba1\ +\xac\x8f\xf5s\x10\x1d\xd8\x89\x98\xea\x7f\x8bj\x9c\x173\ +\x9e\xe3#\xfc}]\x13\xa86\x17tz\xb0\xeb\x9e\xfd\ +\xd6+\x17/<\x9e\xee\x97g_O\xe9\x1591 \ +o\xf7\x1df\xfc\xae;\xfb\xd1\xa5\xa5\x91ce\xf8\x0a\ +\x82\xa0\x13\xad\xd3\xcc\xa3\xda\xab\xad\x8cm+\x98\xdd\x96\ +\xe9\xfd\xd6_\x8c^\x04\x5c\xa4\xef^.\x5c\x1b\xd6\xfd\ +\x19\x89\xee:r^\xef\x96w\x97E\x0c\xc5W\x05u\ +\xef\x86\x16\xfb\xff\xbaSd^\xf6u\x05A\x80f\xc7\ +\x83L\x85\x07\xdblL\xbf\xe3\x99\xd4\x0f\xdf\x80\x9dq\ +7\xaa\x126\xa7\x11P\x02}U\xf7\x99\x8ez\xe7v\ +(\xba\x03\x12h%\xe67B\x96\x8f}xr\x9aq\ +L\x10\xb7\xee?\x17-.xZ7j\xdd\x9eP\x1d\ +@U-A\x10\x84\xae\xf2J\x1cf$j=\xd8\xd9\ +\xc6\xf1\xcc\xf4\xcb\xd1\x89N\x1eJm\xe7\x9e`\x5c\xaa\ +y\xbb\xcd{\xd1\xad\xc4\xb1\x1d\xdb3\xbd\x14\xb6\x1fg\ +*\x9f\x9a\xcd\xa3;gw\xdd\xe7\xbb\xda\xcb\x94\x88\x06\ +\x5cUeJ\xd7!A\x10B\xcf(\xb2n$\xc2\xd1\ +\x9d\xac\xbc\xf4\xfe\x1b\xb03.\x861\x0a\xd6\xe9D4\ +Dc\xc1\xdd\xd0\xd0j?\x0a?D\x17\xc0\x7f\x10\xbe\ +\xd3\xc7\x87%\xab\x8c\xe3\x82\xba}\x13\xdbW2\xf3\x8a\ +\xae\xfc7\x06S\x85\x0cgA\x10\x10\xee2\x8f\x13\x88\ +pE\xe7#\xaa\xf4\x8bL\xbd\x5c\x00P\x04\xcd\x1bl\ +\xf0\xbc\xee\xb6\xc1T;f\xed\x86\xcf\xd3\xddT\x1a2\ +8o\xb7<\x81\x0d\x1esU\x173\xaf\xcf\xa8\x96\x10\ +\xb3 \x08a\x15\xdc\xca\xc8Pe\xf0\x5c\xea\xe4<\xc5\ +\xcc\xef\xbd\xf8\x9e\xfd\x002O\xd8:\xb4\xbd6\x81:\ +\xe0\x00s\xba\x7f.y;n\x9e\x9e~\x9f\x81\xb5!\ +\xfc\x9d\x07\xa7\xe2F`\x09J\xd1\x84\xfb\xa4\xc7\xa8\xed\ +B\x88y\xd0U\xd3\xccCdh\x0b\x82\x106VT\ + f\xc0\x9b\xd7\x95VzL\xf4\x0b?\xbaQ\x99\x8a\ +~\xaa\xb5\x8f\x0b^~K\xad\xb3\xd07\xd1\xad\xde\x94\ +4\xf4r\x18\x7f\xac\xa1\xe8\xa6\xa0\xce\xed\x02\xc0Z\xb6\ +\x7f\x08\xe6\xb7\xbb\xf0\xbc\x12b\x16\x04!t\xf4/7\ +\x13 :\xa0\x0bB\xf3\xce\x8b\xef\xda\x7f\xca\xf4\xbe-\ +\x95\xe6\x81D\x1a\x17\xc3\xd8\x94Hvou\xd7\x93k\ +\xdb\xdd\xd3\x05\x98_\x0a\xe7\xcf\xa5\xfdN-\xb7&\x06\ +u\xf7\x01\x09\xb4&\x99\xcefFk'C\xcc\xdf\x0d\ +r\x91 \x08\x82\xb0=v\x95y-\x11]\xd0\xb5b\ +A\xf4s?\xbc\x5c\x0b\xb8^o/\x17\xae\xeb\x18\xf7\ + \xa3\xb2\x97h\xab\xc5\x1d/\x0coG\x07\xfe\xe5\xe7\ +\x15\xc1\x9d\xed*M\xd8o\x01\xfc\xe3\xce\x86\x98O\xee\ +\x15\x5c\x02\x98 \x08\xc2\xd6\xa4\xab\xac\x0a\x80n\xe8\xa2\ +\xd2\xbctS\xc2\xae\xcb\xf4\xde\xcd\x95\xd6(\x10\x9d\xa2\ +\xb7\x05\xf9\x89\xa2\x99\xc9O|\x17\xdd\x15\x1f\xbb\x8b\x18\ +\xdd\xcb\xcc\xcaEM\xe6\xf2>\xe6O\x82|\x06\xab\xd6\ +\xb9\x9b\x99\xe7\xa3s!\xe6\x8be\xa8\x0b\x82\x104-\ +\x95\xe6\x81\x04\xcc\xa6.$x2\xc06\xf3O\xaa3\ +\x08\xa7~I\x04|=i\x9e\x5c\xeaz|\x172n\ +\xf0\xd0\x06\xc3\x9eB\x1a\xc0\xa2\xf0\xba\xf8tEKU\ +\xd1\x80@?`\xc7\x99\xcc\xcc\xefwb\x95pb\xb2\ +*6D\x86\xbc \x08A\xd1:%6\xd8\x02=\xd1\ +\x99F\x06\xdb\xcd\xb6\x0f\x15%\x9cE>dJ\x7f\x0d\ +\xa03\xf4\xde\xcb\xe5\xa5\xbfJ\xb8\xcfdEt7\xdf\ +\xe2Y\x84\xb7ip\x89\xc5\xf6\xaf\x82|\x86\x9e3\xb1\ +\xcecu\x12\x03\x8d\x1d<\xab\xa1\xd8\x8d\xcb\xb0\x17\x04\ +!\x08\xea\xcfC\x99e9\x8f\x11\xa1\x7f\x17\x0b@\xb4\ +\xba0\xaf\xf1\xe3\x19\x14\xbckunl\xb0y2\xbf\ +\xdb\x0f\x8f\x7f\xa7F\xb0]<\x1bn\x03\xd0\xf9\xc9*\ +\xf3[A>B4\x91~\xcfc\xef|fx\x1d\x08\ +\xef\xd4\xe5\x13\x11\x95\xe1/\x08B.Y0\x16F\x8f\ +R\xebA\x80\xf6\xebF\xd2\xd0oc5\xc9\x8f\xfdi\ +\xdfGgk\x9e@\xd5\xd2b;\xf7\xc2\x97\x05\xc8N\ +xy\x99\xf3\x1a\x03\x0d!\xf6v\xc9\x00\xfe\x18D\xa3\ +\xfbm\x84\xb7\xd6}\x02\xcc\xd7\xb7\xbf>@\xbf\xddc\ +\xe6E2\x05\x08\x82\x90+\xaa\x01:|\x1f\xf3n\x22\ +\x9c\xd8\x0d\x91Y\xd3\xc4\xf6\xaf}\x11\x19\xcb\xbb\x89\x08\ +\xa6\xde\xd6\xe4\xfb{\xce\xc4\xba\xac\x8a\xee\xa6\xf4p^\ +\x10no\x9f\xbe>\xbc\xdc\xfca\xd0\xcfqc\xc2\xf9\ +\x153?\xd4\xc1_\xbb:\xe8\x05\x82 \x08\x85\xc3\xb5\ +q\xebf\x02M\xebfm\xe1k\xcb\x13\xd8\x90\xe93\ +\xb4L5\x0f\x06\xd1\xe9\xba\xdb2\xed\xd1\xdd~]K\ +u\xd4\xba(\xf4\xd6 \xfa\xbf\xd6)\xb1\xc1\x01\xaf(\ +\xf9\x0bv&\x83\xf1B;\x0b\x84=\x87\xf5\xb6\xce\x93\ +\xa9@\x10\x04d\xff,\xee\x15J\xe1\xaan\xc6R_\ +\x9c\xdf`\xcf\xf6\xe39\x22&\xfdJ\xf7\x8ce0^\ +,I\xd8\xaf\xe5Dt]6\x9e\x0e\xff\xde6JL\ +\xd3\xad\x09\xfa9\x06$\xd0\xba\x81\xed\x93\xc1\xbcx\xe7\ +\xeb\x03\xbef\xc1\xd8\x8e\xfbU\x0a\x82 t\xdb+\xab\ +\xb4&\x03tK7\xf7.\xed$\xa3\xf2\xcc\xba\xf6\xf3\ +T:\xc3\xe6\xb2\xbdcu\xb7\xa7\xcbt\xbb\x9f\xd7k\ +Wtc\x89\xd4\x87\x00\xbf\x19~g\x17\xe3\xd3\xf1\xe0\ +*Ua\xab\xc6\x08Ir\xc63\xf8\xdd\x9d\x9c1\x1e\ +~\xd8>\xd6Y2-\x08\x82\x80\xec418\x8d\x08\ +\x89\xeez\x97\x0c\xdc\xb6\xa9\x00Pf\xcc\xab\x802\x88\ +n\xd6\xdd\x9e\x0c^\xf6\xef\xa5\xe9Gr&\xba\x00\xe0\ +\x81\x1e\xd1\xc18\xa4pG\xeb\xa4\xd8\xc0\xa0\x9f\xa3\xb4\ +\x06_\xd8\x8eu,\x83\x97\xb7mp\xbe\xbaZ\xba\x0f\ +\x09\x82\xe03\xc9*\xe3hE\xfc\x00\xa1{\xd14\x06\ +/__o\xdf\xe8\xc7\xb3\x9c\xda\xdb\xba\x10D\xa3\xb4\ +\x17]\x8fn\xf5\xa3\xfce\x97D\xd7v\xf0(\xb48\ +B\x85\x9ef\xc4\xbd;\x0c\xcfR<\xa3\xf5S/\xad\ +\x8eg`U\x1bO\xfa\x8dk\xaa\x82\xeb\x96$\x08B\ +\xfe\xd1\x1a7\x0f7\xa0\x1e% \x86n\x87Q\xb9\xaa\ +_\x1d\x9a\xe1C\x07#\x22\xae\xd6^p\x19\xab\xd7\xac\ +\xb3\xe7\xfa}\xdd\x0eE\xf7\xd6\x19\xf6k\x0c\xfeD\x07\ +#\x11\xe1\xa4t\x95\x15\x8a\xa39\xd1{\xd2K][\ +\x1d\xc9\xcc\x1fn\xffg\x06\xd4\xd52M\x08\x82\xe0\x8b\ +\xe0N5\x8f0\x15=E@Y\x06a\xd4\x07c\xb5\ +\xae/9<\xfd\xfb\x98\x97\x11\x91\xfeU\xf8\x98\x7f7\ +\xa8\x0e\xc9\x9c\x8bn5\xc0\x0czT\x17;\x11\xe3w\ +\xc9xt\xaf0\x9c\xcc\ +`\xbe\xafxF\xeb\xa7\x81\x8a.\x008\x1e\xee\x85V\ +\x0d!`\x98\x06\xeeo\x9a\x8a~ay\xa6\xd1\x098\ +\x91Z\xfbJ\x8f\xe9\x0cfl \xe2\x8b\xaa\xe5\xf8\x90\ + \x08\xe8|\xc1\x09\x03\x99\x0b.\x00x\x1e\xc5\xcbf\ +a\xad\x1f\xcfu\xf8\x083\x0e\xa2\xfd\xf3\xc0\xcb\xb5]\ +6n\xcc\xe6=:-\xba\xb7Lw\xfe\xd5V&n\ +\xc8k3\x0f\x8c\x1a\xd6Ca\xd9\xdf\xc5\x96&\x09\xe9\ +G<\x8fF\x13\xa3\xe1\xaai\xe6!\xb9\xf3\xfe\xb9H\ +\xa6-A\xd0\x93t\xdc:O)5\xbf\xeb=q\xdb\ +\x0c+\xcf\x8cNO?\xee\xc7sm\xb8\x10\xe5 \xfa\ +E>\xd8\x98\x19\xf7l*\x0a\x15\x02\xd1\xad\x06\x98\x89\ +\xee\xd3\xcd\x88D8z\x14\xac\x1b\xc2\xf6\x5c\xd1\xe9\xe9\ +e\x0d\x0d\xcea0r\xe8\xe9r\xe6\xabcA\x10\x10\ +D-\xe5\x1f\x90\xc2\x5cB\xe6MS\x18\xbc|\xa3\xe7\ +\xfc\xc8\xafg\x8b\x15Y7\x11\xd07\x0f\x047\x95m\ +/\xb7K\xa2\x0b\x00\x9e\xad\xe6\xb0\x0fM|\x03\xa8V\ +ue\xaa*rj\xd8\x9e\xab_\x1d\x9a\x8bj\x9c\x17\ +sx\xcbR\x99\xbe\x04\x01Z\xb5\xe7KWY7\x11\ +\xe8v?\xf6K\x19p]`\xa2\x1f\x1d\x84\x00\xa0%\ +n\x8e!`Z>\xd8\x9a\x09\x89\xa2DrE\xa8D\ +763\xf5\x01a\xdb\xa3/\x9a\xec\xef\x92\x02\xcfN\ +\xc5##\x0ay\x003\x93x\xba\x01\xecq\x88\x11\x04\ +t39\xe9\xbaJ3\xa1\x80k|\xdc\xb3\xbc1V\ +\xe3\xbc\xe0\xc7\xb5\x96\x8dG$B\x98I\xd45\x1d\x09\ +k\x93z'm\xe7\xa4V\xb4\xea\xfa\xe6;\xe6\xe89\ +\xf7\xa1\xa7\x22\xef\x89\x8dq\xf4)`\x01\x10\xd1\xcd\xfd\ +h\x96\xaeR\x02\xbaSJ\xf1\xf0\x11f\x1d\x11M\xf5\ +\xf1[|\xe1\xc5wm\xdf\xf6^\xf7\x1cb^\x83\xff\ +o\xef\xcc\xc3\xa4\xaa\xae\xae\xbf\xd6\xb9\xf7VU\x0fH\ +\xd3\x0dN(\xce\x0aJb\x0c$\x0eq\xc0\x98|F\ +\x13#\xa8\xadq@\x86\xa6\xab\xda\xa8o\x9c\xe2\x98h\ +'\x0a\xce_\x12c\xb4\xab\x9a\xc9)QP\x89S\x9c\ +\x105\x11\xc5\x88yU\x1cP\xd4\xa0\x18D\x84\x06l\ +z\xa8\xba\xc3~\xff\x10\x13\xa32WUW\xdd\xbb\x7f\ +\x7f\xf9\xf8\xef;\x03\xed3\x01\xec\x1b\x12\xc1m\xeb\xf2\ +\xdc\xeb\x8a\xf977It+\xd3\xde\x8b_\xf4\x12.\ +\xc3\x5c\xf3\xd5\xb9&\xe7\xa4\x88=\xd7\xba\xd3\xd5\x9d\xae\ +R\x82\xb8I\xfbL\xcb2\x0f\x92\xd8\x22\xcf\xaa2g\ +A\x9b{I\xfe\xec'\xe3;\x03\xbc\x224\x81\x0f\xe4\ +\xd7\xbd'aE\xc9\x8b\xee\xa7\xdf\x157\x94\xb7\xe6\xc2\ +\x10\x98\xd2\x9d\xb2\x0e\x8fNvYE\xb7'\x0e\xd25\ +\x08\xca\xda\x98\x9b\x84\x9dkr\xfe@\xc3\x1b6\xb5\xf9\ +\xfc\xba\xceq]\xcf:a\xaf\xe9p\x91\xa7\xebK\x16\ +\x83t>\xdc\xb0J\xe3,W\xdezk\x85wS\xb1\ +\xff\xee&\x8b\xee+p\xef\x15\xc8\x07e.B1\x0b\ +\xe6\xee\xce&\xfb[\xfa\xf8+\x05\xca_y\x1a\x04\x05\ +k)\x98\xda\xdb8\x7f1\xc0O\x0bP\x1c\xe4\xf9\x0c\ +N\xa8\x98\xd4\x9d\xb7^\xe8\x97$\xed\xd3H|/<\ +\x9b\x5cs~\xbe^H\x8a\x22\xbaC3\xf0\x00\xdc\x5c\ +\xee\x81'Q\xed\x08\x1f\x8a\xc4\x1d^\xe6\xbf!\xb3\xb2\ +\xde\x06\xcf9\x0d\x82\xf2E:S\xf6\x90\x84\xb1\xe7\x12\ +\xf8~\x81\xb6q\xe7%Z\xfc'\xf3\xf5q\xd9\x86\xd8\ +@\x18^\x8b\xd0x\x16\xe0\xc9x&\xd7#}\xe27\ +\xebRs\x16^\xab\xa0\xfc\x17r\x12\xfd\x8c\x09fv\ +7\xc4w\x09\xb79\x06:t\xb9+\xba!\xc9G\x1a\ +\x05\x05\xff\xed\xa1\xdc\xe0\x90\xcf\xe4\xbb`\xeasi\xd3\ +\xdb\x9c\x8c\xf7\xbb|}\xdek\xf5p,;\xb8=,\ +\xc7S\x22\x08r\x82s{\xea\xefo\x96\xe8V\xb7\xe0\ +c\x88\xfc1$\xc6A\xdbY\x8e?+\xcc=n\x05\ +\xf8\x00J\x91_\xe8d\xb1FA\x01>5\xbcpS\ +v\xab1\x98H Q Ey\xf1c\xf1R\xf9\xfc\ +\xc8\xddj\x9df\x90CB\xb4\x12\xdeR\x95q\xff\xb7\ +,E\x17\x00\x02\xcf\x5c+\xc8\xcf\x85\xeb\x12\x10\xde\x01\ +\x96\xed\xcf\xeaJ&\xb6\x0fiM\xcf\xbbP\x8a\xfbx\ +\xfb\x5c\xa0QP\xba\x9b\x12;lS\xe7\xfc-\xaf\x0e\ +S_\xde\xc1-u=\xfb\x98m3\xf93/\xea\x1a\ +g\x1fH\xe2\x82\x10m<:\x5c:\xbf\xe8\xc9\xef\xb0\ +\xd9\xa2\x1b\x9f\x94\x9b_\xd6f\x19_\x16\xde\x9dlz\ +\xb3:\xc7U\xf4\x0f\xdb\x83\xef\x07\xf2\x8a.\x7fE}\ +\xc0\xc5\xa5\xfb\xb4F\x22\xe2\x82\x9b\xb2\x0e\xb7\xc4\x7f\x11\ +\xc0\xd0\x02\xce\xb5\x9cO9>\x9f\x85SmIla\ +\xdb\xb85\xdfU\xd5\xe8\xd9\xea\xa9k*[\xba\x16\x97\ +\xb5\xe8\xaey\x9b\xbfB\x04AxR\x82\xdc\xd5\xb1\xdc\ +\xbfv\x8f\x89\xef\x14\xa6\x87\xbf\x8d\xfe\xd3\xe5j\xe1Y\ +\x9e5T\xf2zU\x06K4\x12\xd1d\xc1\x11\x88\xe5\ +R\xceu\x16\xcd\xc3da=\xdf%@*_\x8d\x0c\ +>\xa3\x17\xed\x1b\x08\xee\x14\x9e\xfa\x0ay{\xc9\x0a\xef\ +\x9a\x9e\xfe\x1ey\x11\xddX\xab\xfb: w\x87\xeb,\ +\x8e;[q\xff\xaf\xd9\x86\xd8\xc0\xb0\xfc\xa6O\xd3N\ +\xf2\xb8.\x87E\xdb\xe9N\xd1(D\x93lCl\xe0\ +N\x03\xec9\x8687\x1f-\xf9\xd6\xe3\x990>\x96\ +q\xa7\xe6\xf33s\x8d\xce\x09$G\x85iL|\xc8\ +\x19\xdbO\xef\xf9\xc2\xdf\xbc\xb5d\xca\x0a/\x0f\xd3n\ +\xf7\xb3\xe2*c\xcb\xd3\x1d\x8d\xce\xdea\xf9Mn\x80\ +\xcb\xcb\xb1'r\x19\xbeU\xffkE\x9b\xd7\xa2\x91@\ +\x14\xab\x93\x1b\x8d#sA\xeeS\x84yv\xe7\x84\xb4\ +\xfb\xcb\xbc\xbe0\x8c\x8d\xedN\x0b\xad!{\x1e\xa7'\ +\xd2\xfe\xa3\xa5\xf0]\xf2&\xba\xd5\x19\xf7UP\xeeE\ +\xe8\xaaO\xb1e\xcc\xe0\xc9\xae&\xfb\x800\xfc\x9e\xca\ +Vo.D\xee\xd0\xa5\xb1\xa0W\x12<\x1fr\xea\x96\ +\xd3\xf5\x8aV\x94\xf8\xe4T\xd4\xbaM\xf6=\xc6 S\ +\x14\xd7&\xc1\xec%m\xde\x98\xe6<\xbeD/\x19\x89\ +J+\x16\xdcM\xa0W\x88\x9e\xc7O\x5c\xdf9\xbbT\ +\xbeO^\x9b\x0f\xe7\x84\xa1\xdcE\x91\xe8c\x0bgf\ +\x1bc\xc7\x84\xe1\xf7\xach\xf3\x9a\x00<\xa7\xcbda\ +\x9aa\x07d}\x22\xed\xcf\xd2h B\xd5\xc9\xd6\xa1\ +\x15\x95\xf6\xcb\x04\x8f)\xce<\x93w\xbar\xee\xf0|\ +\xa7K\xeb*\xed\x1b\x01~-d\xc5\x15\x97\xe5\xab\xc3\ +R\xc9\x89nU\xda}\x05\x90\x19\x08\xe5}KT\x18\ +#\xd3\xdd\xa4}f\xb9\xff\x96-\xa7\xa3ci\xe0\x1e\ +\x16\x007\x85\xedH\xa0'+\x95\x05r_ \xdc;\ +\xde\x92\xfb\xb3F$\x1a,\x1b\x8b\xea\x5c\xca\xb9\xd1\x82\ +y\x82\xe0v\xc5\xea\x8c\x13\x04\xe6\x87\xbd\xa6`Y^\ +7M)g,\xc91!K;\xbd\xf4r\xe0\xddX\ +b\xf6\xc3\xc8{\x01\x81\xb1e\x1e\x09;\xac\x0fZ\x00\ +\x5c7\xa1\xc5=\xbf9\x04\xbb\xfal2\xb6\x07)\x8d\ +\x86r\xa8\x80{o\xc8\xf5\x00\x01:\x01YJ\xc1r\ +\x80\xab\x05p\x01\xb8\x80\xac^\xcb,\xeb\x80 \xb7\x16\ +\xc7\xa6\x15k\xf979R:6p@\x8c\x80\xbd\xd7\ +\xfc\xbb\x0aB\x12k\xfe\xbb7\x04\x06\x80\x03\xb0\x1a\x80\ +!\xa4V\x88Z\x08kITo\xee\xae\x16\xc0l\x04\ +\xf2\x90\x0f\xeb\x81D&\xab\xf7\xa0#\xb6\xbb\xb5\xc0I\ +\xc5\xac\xf0\x15\xa0\xc3\xf3\xe5\xfb\x15\xad^^3U\x1d\ +)\xe7\xeb1`\x0e\x89\x8a\x10\xa5\x95\x03\x0f\xf2\x9d\x8a\ +\xb47'\xd4\xa2\xbb\xe6\x8d\xe9&C\x9c\x16\xf2B\x99\ +{V\xb4y\xa3\xc2tn\xb7\xfcd\xf4J\xf4rv\ +\xb1$\xa8\xa5X\xb54B\xf1\xd9-\xc6\xef\x0a\xc0\x15\ +\xf4\xec\x8fW\xe5\xba\x97m}\x1b:\x11\x92+\x1d\xdb\ +n\x8fZ\x9b\xb1>A\x10\xd4\x18#5\x14SCH\ +\x1f\x18\xd4H\xc0->\xf7\xa4x\x14Y)\xe4JA\ +\xf0/\xc9\xd9\xf3\xaf\x9a\x92]\xd8\xacEi\x91c\xf9\ +\xc9\xe8\xd5\xab\xda\xb9\x9aDS\xa1+\x93\xbft\x17\xd7\ +\x0f\x8eN\xb4\xfa\x8f\xe4\xf3s\xdb\x92\xd8\xa2\x17\xed\x17\ +H\xee\x1e\xaa\xcd\x91 \x1dK\xbbM(\xbdF;\xf9\ +g\xf58l\x19\xb7\x9d\xb7\xc3t\x18\xbf\x96\xc7\xe0e\ +\x0f\xf6\xd1\x89\x96\xee\xf7t)R\x94H4\x9a?\xcc\ +\xb28\xb1P\xbe\xc9\xeb\xda\xb5\x09pr,\xed\xde\x99\ +\xcf\xcfm\x06xI\xca\xbe\x8bd}\xd8n\x0ft\x18\ +op\xcd\xcdX\x19\x09\xd1\x05\x007e_B\x86\xa8\ +\xd9\xf1:zVz\x90c+\xd2\xde\xdftIR\x94\ +p\xb2\xaa\x01}*m\xfb*\x90\x8d\xc5\xdc\xdd\xfe\xc7\ +\xfcBNw2\xf9\xef\xfd\xea&\xed\x8bh8!l\ +\xe3\xe5#\xf8Q\xbc\xc5\x7f\xa8\x14\xbf\x9b)\xd4\x07/\ +\xef\xf4~S\xee\xfdv7\xb4C\x91M\xcet\x93v\ +\x93.M\x8a\x12.\x9a\x01\xe6R\xce\xc8J\xc7y\x83\ +d\xb2\x87\x04\xf7\xb2B\x08n6\x15\xfb1B\xb81\ +\x12\x91[JUp\x0b\xba\xd3\x05\x80\x5c\x93s\x8a\x01\ +nCt\x0c\x11n_\xd1\xe65\xe9\xfdLE)\x7f\ +r\x8d\xce\x9e\xc6\xc2\x1f\x00\x0cC\xcf\x9dK\xde\x10K\ +\xbb?\xcb\xf7\xe7\xaenr\xf6\x8a\x03\xcf\x85\xed\x08P\ +D\x16wz\xde\xe0\xde\x93\xb0\xa2T\xbf\xa3)\xe4\x87\ +\xc7Z\xdc\xdbE\xf0$\x22\xd3\xc6\x8d\xa7\xf4\xa9\xb3\xe7\ +\xaeN:\x83u\xc9R\x94\xf2dq\x12\x15\xb9\x94\xd3\ +L\x83\x7f\xf4\xa4\xe0\x0ad\xd2\x9f\xdb\xdc\xb3\x0ba\xe2\ +\x11\x17\xf9s\x18kn\x02\x9a\xd3KYp\x0b.\xba\ +\x00\x90%\xce\x5cs\xa5$\x1a\xc2\x0b\x0e\x8c\x13\xcf\xe5\ +\x9a\x9c\x93t\xf9R\x94\xf2\x22\x9b\x8a\xfd\xb8\x1f\xed7\ +\x0cq\x19\x89x\x0f\xee\xd8&\x8eo\xf1\x1a\x8f\x9f\x9e\ +\xdf{\xf4\xaf\xd5\xc3\xa9\xa8p\xee&\xb9+\xc2\x97i\ +\xbc\xad\x1c\xee\xc8\x17\x5ct\xab[\xdc\xd7\x04\xf8\x1d\x22\ +\xd5\xb8\x1c\xd5\x06\xb8\xc3M\xd9\xd3V5\xa0\x8f.e\ +\x8aR\xfa\xf7\xd5\xdd\x94\xf3\x80E\xb9\x8f\xe4\x0e=}\ +&9\xa3\xcdK5\x17\xe0:\xdanu\xceoI\x1c\ +\x1aBs\x9a\x0f\xbb\xba\xbc\xb3\xcacc\x86\xe2\xb8\xb6\ +\xf4\x8e\xd9o\x14\xcb\xb1\xa5\xb4&\x83\xfc\xd3\x03N\xa9\ +h\xf1\x9e\xd5\xa5MQJ\x8b\xd5M\xe8\x17\x13\xe7W\ +\x04\x1aK\xc1\xd0GDn\x9b\xd1\xe6\x8d\xce\xf7\x0e\x17\ +\x00\xdc\x94\x9d\x22\x19\xca&\x1c\xbe\xf0\xe8x:w\xbf\ +\x8a\xee\xe7\xdf$\x1bc\xc7X\x96\xdc\x83hZ\x04\xfa\ +\x02\x8c\x7f%p/\x1f\x9a\x81\xa7K\x9d\xa2\xf4,\x0b\ +G#\xde?a\xff\x0f\xc0K\x08\xf4.\x91\x17\xf4?\ +\xcd\x9e\xef\x8d\x1c\xf6\x14\xfc\xfc\xa7\xcd\xad#\x0c\xcc\xfd\ +at\x0a\x14\x91)N\xda\x1b\x8b\xb29\x82,\x22n\ +\x93=\x9d\xe0q\x88n\xfb\x99\x17\xb3\xe0\xd8O=\xaa\ +\x15EA\xcf\x9c\xdb\x1ek\x10\x5cCr\xe7\x12\x12\x8e\ +?\xbe,\xde\xa8B\xbc\x94w6\xdaC\x1d\xc3'7\ +\xd7\xf6\xb4D\x05\xf7\xadU\xae7\xa4\xefd\xacV\xd1\ +\xc5Z\x9d\xaa^#\xd07\xc2\xc6\xf89B&\xbc\xb9\ +\xdc\x9b\xb0\xd7\xf4\xe8\x14\x98)JO\xd3\xd5h\x1f\xec\ +X\x1c\x0f\xe0\xc0\x12;\x82j\x9d\xb1\xdck*DJ\ +\xb9;\x19\xdf\xd92\xc1\xb3\x04\xb6\x0a\xe3Z\xea\x8a\x1c\ +P\x99\xf6^DY\x15\xdb\x16\x99\x5c\x93s\x92\x01\xb4\ +\x9f\xab\xc8+Y\x9fc\xaa&\xba\xff\xd0\xe5PQ\x0a\ +Gg\xd2\xfe\xb6cx\x05\x81\xef\xa3\xf4\xfc\x81\x7f;\ +!\xed\x9e\xd3\x5c\x80\xa2\xa9\xf61\xe8\x9b\x88\xdb\xcf\x12\ +\xdc-\x94Kh ?w2\xdeu(\xbb\x1b.=\ +\x80\x9b\xb2\xef%9Bu\x17\x01 \x13\xdb\xc5\xfby\ +m\x06\x9f\xe8\xf2\xa8(\xc8\xaf\x01\x84\xc8e \x8fc\ +\x0f\xadu\xeb\x14\xdc\x00W\xc72\xee\x85(\xd0]\xe3\ +-\xe9\xcc\x04q@H3\x86\x8f\xcfX\xee\xfe\xa0\x10\ +\xd9\x81P\x8an\xe7Xl\xe38\xce<\x12u\xba4\ +|\xea\xa2\x22\xc2\xb3c\x19w\x9aFCQ\x90\x87\xf6\ +\xa2\xc1\xaf\x00\x1eG\x16\xfeZ\xe4\xa6\xf4^\x86\xc8\x85\ +N\xda\xbb\xa6\x10\x9f\xff\xd40X\xdf\x19h\xcf x\ +TH7+Ks\xe2\xee]\x95\xc1\x12\x94\xa5\x97C\ +\xcf\x153\x8c\xb0(\xf7\xea\x12\xf1_\x93\xe9\xb1 \xe0\ +\x19\xf1\xd6\xdc\x02\x8d\x86\xa2l\xe4\xce6\xe9\x0c\x8eS\ +.\x04\xf9\x93\x0d\xe9\x0b\xddc\xd9-\x913\x0b\xe1\xa5\ +\x8c\xffd\x12\xd3$\x93!\xdd\xe1J\x80\xe0\xa8R\xf6\ +V.Y\xd1\x05\x80\x5c\xcai1DJ\x97\x8b\xff.\ +\x0e\x10\xe0\xc6.\xd7\xbd\xa2\xd4\xed\xcc\x14\x05\xa5Q \ +\xb5\xbfmp!\xc8\xa3J1\x8d\xfc\xb9g\xbb;\x08\ +82\x9e\xc9\xdd]\xc05\xf5jC\x9c\x1f\xd6\xb1.\ +\x94\x17udDw\xc9HT\xd6U\xdasI\x0e\xd2\ +\xa5\xe3K\x0fh\x1b \xd7,|\xcf\xfb\xcdn\x0f#\ +\xa7\x11Q\x94/\x88\xed8\xfb@\xdb\xe2\x05$~T\ +\x06Y\xac\x15^ \xc3+Z\xbd\xbf\x16l\x87\x9b\xb4\ +/\xa5\xe1\xafB\xbc(\xfe\xfd\x83\xac{\xf0\x8eS\x91\ +U\xd1\xdd\x0c:\x9a\x9co\xc4\x04sz\xd2\xe7\xb4\xc4\ +\xcf{\xdf\x08\xc4\x5c\x14\xcf\xe4\xee\xd3h(QgZ\ +=\xcc\xd1\xb5\xb1\x11\x16\x82\x8b@\x0e)\x93gxQ\ +\x96<\xa2\xba\xc5}\xad\x80\x82{\x0e\x0d\xaf\x0f\xf1&\ +d\x99\xe7ZC*&u\xbf\x8f\xb2\xf7\xe7/\x01\xdc\ +\xa4\xfd3\x1a\xfeV\x97\x94u\xf2\xbc\xe7\x07\x97$Z\ +\xfd'4\x14J\xd4X9\x1a\xbd\xab\x12\xf6\x18\x00g\ +\x10\xdc\xa5\x8c\xe4b\x9e\x9b\xb5\x8f\xac\x98\xd2\xfdA\x01\ +\xcfpS o.\xe5\xd4\xfa\xe6:\xfa\xf9\x08\x8eL\ +\xb4\xf8\x8f!\x14MqJ\x04\xb7\xc9\xbe\x93\xe0\x09\xba\ +\xbc\xacw\x02>\xe1zrI\xe5D\xefy\x8d\x86\x12\ +v\xb2cc\xbb\xd3\x913I\x8c*\xb7Vt\x22x\ +\xb2\xc3\xb8\xc7\xd4\xdc\x8c\x95(\xdc\x19\xeeH\x02SK\ +\xb1J;\x8f\xe6!\xbftZ\xbc+\x10\x9aNt%\ +\xc2\xd2zT\xd5\xd6\xda\xcf\x83\xdcK\x97\x9a\x0d\x9a\x89\ +\xb3\xbd \xb8Lw\xbe\x0aB{^\x8b\xff\x01yL\ +\xa9V\x22\xaf'\xa5\x9cy\xab\xcd;\xa3\x90\xaes\xd9\ +\xa6\xd8p#2=\x8c~\xca\x9f{qypF\x9b\ +{t9\xde\xc7-y\xd1\xfd\xf7\xfd:G\xfe\x1e\xc6\ +\xe6\xca\x05\x14\xdf\xa7=\x09\xc6'2\xfe\xe3\x1a\x0c\xa5\ +\x9ciO\xa2.a\xec\x91\x104\x91\xdc\xa3\x5co\x1f\ +\x00r\xa6\xd3\xe2e\x0a\xdc@\xe6(c\xc9\xdd\x04b\ +!\xaegy\xb7\xd3\xf3\x86\x86\xed\x16\x07K\xb0\xaf\xe5\ +q\xc6\xc8\xb4\xb0\x9eO\x14\xb2\xb2\xcf\x17^\xfb\xdc[\ +\xb9\x19\x85\xe8R\xa2(\x85\xa0\x19\xe0\x85\x8d\xd6w-\ +\xc3q\x00G\x94sA\xa5\x00\x1fy\x9e\x1cW1\xd1\ +{\xa6\xd0\x1d\xdb\x8c%\x7f\x0a\xb7\xe0\xa2+G\x1cP\ +\xd5\xe2\xbe\x14\xb6\xdfV\x92\xc2\x96K:\x97\x1b\x83_\ +\xe8\x92\xb4i\xfd{\x01\xdc\xf0I\xbb7\xa9\xee\x0e\xb4\ +kD\x94R\xa4s,\xb6ql{4\x0c\x1a\xca\xab\ +0j\xadO\xde?\xdc\xc0\x1e^\x91\xe9^T`o\ +\x83\x9f\x10\xb8-\xcc)e\x00\x08\x02\x8c\x89e\xdc\xa9\ +a\xfcm,\xd5\xb7\xdfKR\xf6]$\xebuy\xda\ +\xe4\xb7\xeeU\x02\xb4\x06\x81\xb99\x91\xc9\xbe\xab\x11Q\ +P\x02=l\xb7\x89\xc7\x8e4\x0cFA\xf8\xc3\xb0\x08\ +\x87\x88\xdc\xb9\xbc\xd3k\xd8\xfa6t\x16XpG\x92\ +\x98R\x8eg\xdc\x1bi\x80q},\xed\x9e\x17\xd6\xdf\ +W\xb2)\xdc5\x86\xdd\xb3@\xec\xa7\xcb\xd5\xe66U\ +\xc0,!2\xaf\x04\xee\x8cB\xf4\xebT\x14\xac\xe3^\ +\xedQ\xbd\xed\x03,\x8b\xf5$N\x0aS[O\x01D\ +\x04\xbf\x9e\x90v\x7f\xd5\x5c\x80.A_\xc8\xfe5\x90\ +\xc8\x84\xb9JyML\x1f\x99=\xdf\xfdQ\x98\x8f\xc8\ +J\xfa\xdc\xb4#\x89\xadc\xc6~\x9e\xe0\x00]\xbe\xf2\ +\x92z\xfe\x00\x01Z=\xd8S\x0a\x9d\x06S\xa2Mg\ +\xa3=\xd46<\x89\x90\x13Hn\x1bF\xc7\xb8\x00\xc1\ +\xa9\xc5\xf0\x00vS\xf6i \xff\x10\xfe:\x17\x99\xb7\ +\xaa\xdd\xfbN\xd8\x8f\xc5J~\x10;\x1a\x9d\xbdc\x16\ +\x9e&\xd0[\x97\xb2\xbc\xef~oi\xebp\xef-t\ +ZL\x89\x06\x1d\xe3\x9co:\x16\x86\x13r|\xb9V\ +\x1fo\xe8u=\xd7\xb3N*\x86;\x92\xdbd\x9f\x05\ +\xf0\xff\x87]pE\xb0\xd4\xf7\xcd\xbe\x89\x89\xd9\x85a\ +\x7fN\xcab \xbb\x9b\xecC,\xf0\x11\x02\x09]\xda\ +\xf2>\xd9?\x01e\xba\x1f\xc8\xed\xf7\xaf\xf0\xff\x1a\xa6\ +\xfbpJayj\x18\xac\xfd\x06\xda\x07\x1ap\x04E\ +\x86\x93\xdc!\xec/\xab\x02\x5c\xf9\x8a\xb8\xcd\xc58\xa6\ +\xc9\xa5\x9c_\x1b\xe2\x97\x11X\x83\xb2\x9e\xc8a\x15\x19\ +ov\x14\x9e\x9b\xb2y{\xca\xa6b?6\x90{\xc2\ +^\xb5\xd7\xc3\x93\x7f9 \x7f\xf1!\xb7\xde\xdf\xe6\xcf\ +R\x01V\xbe\xc8\xa2z$\xfa\xd5Z\x07\x1a\x98\xa3\x08\ +\x1cOb\xeb\x88<\x1bK\xfd \x18\x95h\xf5\x1f)\ +\xc6\xcb\xcc\x01{8\x7f\x88J\x07\xb6@\xd0\x18K\xbb\ +\x13\xa3\xf2\x0c\x95U\xca\x22\x97r\xc6\x91\xc8\xe8\x1d\xde\ +\xe2\x98\xb4\x0bxO\xc0\xe0\xfeW\x03\xffoZ\x80\x15\ +]\xb2\xc9\xd8\x1e\x06\xc1\x0f@\x1e\x0e\xe2\x10\x02\x95\x11\ +{\x19}4\xeb\xbb\xa7VO\xc4\xd2b\xbc\xd4l]\ +k\xff\x91\xe4\x88\x88\x08\xeeU\xb1\xb4{Q\x94\xe6S\ +\xd9\x89\x97\x9b\xb2/$y\xa5.\x85En3(\xf2\ +P\x00s_\xbb\x9b{\xb4\xefd\xac\xd6\xa8 \xd4\xcd\ +\x05*\x9c\xd8a\xc6\x04\x87\x038<\xeci\xe3u\xcc\ +{\x17\x22\xbf\x18\x9f\xf6\xaem.pu2\x00\xac<\ +\x0d5\xd5\xe2\xdc\x07\xe0\xe0\x88\x14v\xde5c\xb9w\ +R\xd42je\xb9c\xcc\xa5\x9cfC\x5c\xa6\xcbc\ +\xcf\x9c\xbf\x00\x98\x0d\xc8\xa39\xf2\xb1k[\xdc\x97\x8b\ +\xb1 )\x85c\xd9XTW\xdb\xd6\xfe\x06\xe6`C\ +\x1c*\xc0\xbeQ?\xc6\x11\xc8BOpbE\xda\x9b\ +\x83\x22\x99\x85\xc4\x1c\xfb\x11\x90_\x8f\xc8:\xf2\xe4\xbf\ +\xb2\xee\x11\xe5\xde\x1b72\xa2\xab\xaeU\xa5e}\x07\ +\x91\xc7\x85\x9c\x15\x04\xe6i5\xe2(\x83\x9d\xeci\xa8\ +\xa9\xf0b\x07\xd1\x92\x83\x0dp\x90\x08\x86h\xad\xc4\x7f\ +\xee\xde\x022\xb9\xa3\xdb;\xb7f*V\xa1H\x9d\x94\ +L,x\x84\xe0N\x11\x89\xf2\xcb\xab\xbb\xbdC\x8a\x15\ +_\x15\xdd|\x0ao\x933\xc1\x00\x17\xe9RQZg\ +\xc1\x00\x9e\x16\xf0i\xf1\xf8\xcc\x95\x93ro\xeaN\x18\ +=Za\xdb\xe5?\xbf\xc5\xadh\xd3\xc8\xa0 \ +\xf6\xa9\x17\x8d\x8d\xed\xc6\x98\x0c\x85\xe0[\x86\x18*\xc0\ +>\x04\xaa4:\xeb\xdd\xddNl\x0f\xbc\xf3j3\xf8\ +\xa4\x88\x9b\x86Q\x14\xa4\xcb\xb9\xc9\xc3F\xc6yY\x10\ +\xf0\xc0x&\xf7f\x94\xe7[(\xaa\x80\xdd\x94\xfdK\ +\x92\xbf\xd6\xe5\xa3\x8c\x9a2\x08^\x82\xe0\xa5\x80\xe6\xa5\ +\xc03/\x15\xc3h Lt\x8c\xc6V\x96c\x0d\xb6\ +\x0c\xf7\x02\xb0\x17\xc1\xc1B\xec\xa5&2\x1b\x9d\x99y\ +\xcf\x17i,fk\xcci\xf50\xc3k\x9d\xf1\x86\xb8\ +0B/6\x9d\x9e\xc8a\xc5:#W\xd1-\x8e\xf0\ +\x9e\x01\xf0w\x9a6+\xdf\x1d1\x89\xf9\x02y\x1d\x01\ +\xe6\x07\x90\xd7\x05\xf6\xfc9oe\xdf\x8bj\xab\xc2E\ +\xf5HlY\x1b\xdb\x09\xf4w6\x01w\x16r\x0f\x02\ +{\x82\xf8ZT\xd2\x91\x05\xf6M\xce\xb4\xafv\x7f^\ +L\xdb\xc1%#QYWe\xdfF\xf0\x98\x08=\xdb\ +^\x80`D<\xed?\xa83/d\xf7]s)g\ +$\x81\xc9Z\x14\x12\xaa\xc51\x07\xc8{\x10\xbe+\xc0\ +\xbb\x14y7\x80Y\x18 \xf8\x90\xbe\xb5de.\xfb\ +a\xb9\xdaX\xb6%\xb1E\x15c\xfd\x85\xfe\xd6\x06\xa6\ +?!;\x02\xd8\x85\xe0\xce\x02\xd9\x19`\x7f\xbd\x93^\ +\x98sE\xdf\x97q\x89V\xff\x89b\xfe\xdd\xce\xa6\x8a\ +mc\xe2\xde\x0frH\x94,gE\xd0\x10\xd66}\ +\x91\x17]\xe0\xdf\xceUw\x92\xa8\xd0\xe1\x8d\xcc\x83\xbd\ +\x1a\x90\x7f\x11\x5c*\x94\xc5\x22\xfc\x88\x22K\xc4p\xb1\ +H\xb04\x08\xb82\x00;-\x9av\x17\xd9U\xed@\ +\xe7\xb6\x19t\xe5\xf3;,?\x19\xbd*\xab\x125~\ +\xe0\xd7X\x90\xde\xc6\x92\x1a\xd2\xd4P\xa4\x06D\x8d\x80\ +}\x09\xd9\x9a`\x7f\x11\xd9\x1a\xe4\xb6Q3\x99(\x85\ +\x1d\x97\x107\xb4\xb7\xbb\xcd\xc56\xd5\xef\x18\xe7|3\ +f\xc9\xfd$\xfbG\xea\xac\x5c\xe4t'\xed\xdd\xac\xb3\ +/\xc4\xa2\x0b\x00]){?\x1b\xbc\x8f\xc4\x96:\xc4\ +\xca:\x9a>\xac\x02\xa5\x1d\xf2\x1f\xb7-\x12+!_\ +]m-\x9f\x8ad\x1c\x04!\xacY\xf3\x04U\xa8'\ +xY(\xc0\xd3\xdd\x823\xaa3\xee\xab(\xfe-\x8b\ +S\x08\xa4\xa3\xe7\xe4%\xe78i\xef7:\xf9\x22 \ +\xba\x00\xd0=&\xbe\x93\x15\xf3\x1f\x229H\x87YQ\ +\x22\xfbr\xb5D\x04\x17L\xc8\xb8\xb75\x17\xf9\xea\xda\ +\xdc$\xec\xaf\xc3\xb9\x22\x8a\xb7+\x04r\x89\xd3\xe2M\ +\xd0\x19\x18!\xd1\x05\x80U\x0d\xe8S\xe58\xf7\x02\x18\ +\xa6C\xad(\x11K%\x037uf\xddK{\xc2\x84\ +a\xf58l\x19\xb7\x9c;I\x1c\x1a\xb5\xd8\x07\x82\xcb\ +ci\xf7R\x9d\x85\x11\x14]\x00X8\x1a\xf1\xfe\x09\ +\xbb\x85\xe0h\x1dnE\x89\xc46\xebo\xdd>N\xaf\ +\x9e\xe8\xce\xeb\x89?\xdf5\xce>\xd0\xb69\x8d\xc06\ +\x91\x13\x5c\xe0\xbaX\x8b\xfbs\x9d\x84k'\xf4\xd7k\ +v\x9c\x8a\xac\xd3\xe2\x8d\x11H\xea\xd3JXEQ\xc2\ +\x9aJ\x0e\x02\x8c\xba\x22\xed\x1e\xd2S\x82\xeb6\xd9I\ +\xdb\xe6\x13\x91\x14\x5c\xc1\x8d\x13Z\xdc\xf3u&F|\ +\xa7\xfb_o\xa0\x8d\xf6\xc1\xb6\xc5i\x04\xb6\xd2\xa1W\ +\x94\xd0T\xc9v\x88\xe0\xb7\xab\xc5\xbd\xa6\x98\x8eR\xf8\ +B\xd3\x88\xde\x8e\x9d&yR\x14\xc7 \x10\xa4'\xa4\ +\xdd\xd3\x9a\xd5\xf2UE\xf7K\xc2;&\xb1\x9d\x13\xf3\ +\xef\x01\xf1m\x1d~E)\xefs[@&\xbbt~\ +U\xd9\xd2\xb5\xb8\xa7\xbeGG\xd2\xd9'F\xf9\x13\xc9\ +=\x22*\xb87LH\xbbg\xa9\xe0\xaa\xe8\xae\x95\xd7\ +\xea\xe1\xecV\xeb\x5cB\xe0\x97\xea`\xa5(e)\xb8\ +3\xb3>\xce\xe9\xa942\xf0\xa9\xd7\xf5%I\xfb\x7f\ +@^\x1d\x15\xff\xe4\xaf\x10\xdckciM)\xab\xe8\ +n \xd9\xc6\xd8Q\xc6\xc8\x14\x12u:\x15\x14\xa5,\ +r\xc9s\xdc@.\xa8h\xf5\xfe\xda\x93_\xa3}\x0c\ +\xfa&\xe2\xf6d\x82GEu(\x82\x00W\xc72\xee\ +\x85:)Ut\xb1\x09\xe9\xe6?\x828H\xa7\x83\xa2\ +\x94\xec\xbd\xcf\xf9\x02^\x1akq\xa7\xf7\xf4w\xe9N\ +Z\xc3,\xf2\xf6(\xb9K}\x85\xf1\xc5\xa5N\xda\xbb\ +\x5cg&\xb4zyc\xa9\x98\xd2\xfd\xc1K\xe2~W\ +\x02\xb9L\x00W\xa7\x84\xa2\x94VG\xaa@\xd00{\ +\xbe7\xb8\xa7\x05wn\x12v.\xe9\x5cn\xd1<\x11\ +U\xc1\x15@$\x90\xb3Tpu\xa7\x8b|\xf9\xa3\xc6\ +-\xb9\x05\xe4`\x8d\x86\xa2\xf4\xe8N\xea-!'\xbc\ +\x12\xb8w\x0c\xcd\xfc\xc7\xa6\xb3\xa7\xc8\x8e\x8d\xedn9\ +r\x0b\x88\xfd\x22m\x9d*r\xba\x93\xf1Zt\x86\xaa\ +\xe8\x22\x9ff\x1a\xdb\xc6\x9d_\x938\x97\x80\xa5\x11Q\ +\x94\xa2\xae\xec\xaf\x05\xc2\xf1\xcf\xbe\xe5N+\x85\x96\x8e\ +\xd3\xeaaF\xf4\xb1\xcf\x04ye\x94\x9b\xa8\x08\x90\x93\ +\x00cc\x19\xf7\x0e\x9d\xa4*\xba\x05\xa1\xab\xc9>\xc0\ +\x06Z\x09\xee\xa9\xd1P\x94\x82\x8b\xedK>\xcc\x15\xf7\ +\xb5\xe5f\x1c?\x1d\x01J\xc4\xbf\xdd\x8e\x07\x93\x11q\ +\x1bY\x11\xac\xf6\x19\x1c\x9bh\xf1\x1f\xd3\x89\xaa\xa2\x8b\ +B_-\xda\xbd\xce>\x07`\xb3v\x92Q\x94\xc2\x88\ +m@N\x98\xd0\xe2\xde\xdd\x5cB\xf7\x82\xab\x13i\xff\xd1R\xfa^\x9d\xe3\ +*\xfa;5O\xe6\xdc\x00\x00\x0f\xe7IDAT\xb6\ +7\x91\xc0\x0f\xb4\x88M\xde\x09\xc4\xfc \x9e\xce\xbd\xad\ +3VE\x17=q\x11\xfe\xe2\xa43\x92\x06WE\xd1\ +WUQ\xf2p.\xd8\x0d\x91?\xe6\x02\xdeP\xd5\xea\ +\xbe\x5cr\xcfw\xca\x19C\xe0z\x125:X\xf2b\ +6\xeb\xfd\xb0j*>\xd2\x99\xab\xa2\xdb\xa3,\xadG\ +UM\xad\xf3s\x12\x17h\xcaYQ6Hl?\x92\ +\x00S=c\xdf\xd0\x93v\x8dk#\x9b\x8a\xedj(\ +-\x04\x0e\xd3\xd1\x02D0\xab]\xdc\x11=\xe5c\xad\ +\xa2\xab|%\xdd\x0d\xf1],\xdb\xbf\x8e\xe4p\x8d\x86\ +\xa2|\xf5n) \x7f\xfb\xde{\xee\xb4\xdd\x1e.\xbd\ +\x0e_\x8b\xea\x91\xd8\xaa\xce\xb9\x88\x82\x0b\xa2j\xe3\xf8\ +\x15W\xb5n_\xf8\xbe\xd7P\x8a\xe3\xa5\xa2\xab|*\ +\xbeM\xd6\xa16\xcc\x95\x00\xf6\xd5h(\xba\xab\x85\x0f\ +\xc8\x0c\xcf\xc3\xef*&z\xcf\x94\xf2sk\x09[H\ +\xee\xae\xa3\xf6\xa9\xe9\x05D.\x1b\x9f\xf6\xaeh\xd6\xc6\ +\x05*\xba(\x83\xf3\xde\x8bR\xb1\xe1\x06\xc1x\x92\x83\ +4\x22J\x04wH\x8b\x04\x9c\x1a\xd0\x9a\x94h\xe9~\ +\xafT\xbf\xe7\x1a\xcf\xe4k\x01\x8e\xa2\xae\x7f\x9f\xa5\x93\ +\xbb\x84\x18U\x0a\x16\x9b*\xba\xcaF\xf1\xd40X\x07\ +\xec\xe1\x8c\x22\xe4R\x92;hD\x94\xb0\x1b&@\xe4\ +\x81\x002\xe9\xb97\xfd\xc7J\xc1\xccb]\xcf\xe6w\ +\x06\xda\x0d\x00\xc7\x13\xe8\xab\xa3\xf7\xef1\xfc\xd0\x85\x1c\ +]\xd9\xe2\xbd\xa0\xd1P\xd1EY\xb7\x0e\xec\xe3\x9cH\ +\xca\xc5Q\xed\xb1\xa9\x84zW\xfb&\x88)Y\xcf\x9b\ +R=\x11KK\xfd\xfbv\x8e\xb3\xf7\x8d\xd9\xfc\x1d\xf4\ +\x08\xe8\x8b\x03\xf9\x8a\xeb\xd9GUL\xea~_\x83\xa1\ +\xa2\x1b\x0a\xa6\xd5\xc3\x0c\xafs\x8e%\xa4Y\x9d\xad\x94\ +rOA\x02\xf2\xa0\x0f\xc9\x5c\x95\xf6\x9fh.\x83s\ +\xbf\xceq\x15\xfd\x1d\xcb\xbd\x12\xe4)\x9aJ\xfe\xd2\x0e\ +\xf7/\xed\x81{\xa2V(\xab\xe8\x86V|\x8f\xae\x8d\ +\x1dmQ\xce\x01p\xa0FD)\x9f\xa2(<%\x82\ +?~\xe2\xba\xd3\xfaN\xc6\xear\xf8\xdeKF\xa2\xb2\ +\xb6\xd29\x9f\xc4\xcf\x09T\xeaH\xe2\x8b\x8d\xe7\xaf\xfa\ +s\x9b{I\xa9\xd8m\xaa\xe8*\x85}\xfbn\xb2\xbf\ +\xe5\x00\xe7Bx,\x09[#\xa2\x94Z'\x19\x12\xcf\ +\x08dZ\xae\xdb\xbb\xbb\x9c\xcc\x11\x9a\x01^\xdc\xe8\x1c\ +OK\xae!8@G\xf3\xcb\x1e\xca\x22h\x88e\xdc\ +i\x1a\x0d\x15\xdd\xc8\xd1\xd5\x90\x18`\xd9\xfe\xe9\x04\xc6\ +\x90\xe8\xa7\x11Qz\xf2\xba\x08\x819\x02\x99\xe6z\xce\ +\xf4\xca\x89]\xffB9^\xdd\x13s\x15\x88o\xeb\x88\ +~\xa5\xa5\xe3|\xf1yl\xac\xd5}]\xa3\xa1\xa2\x1b\ +i\x16\x1c\x81\xd8\x0e;8GS\x90\x04q\x98\x9e=\ +)E\x5c\x88_\x17\xe1t\x01o/W\x7f\xdd\xd5I\ +gp\x9cr)\xc9z\x1d\xd1\xb5\x16\xbe\xdd\xdf\x91\xf5\ +N\xad\x99\x8aU\x1a\x0d\x15]\xe5sd\x1bb\x03i\ +K\x92\xc4I\x04\xb6\xd2\x88(y\xde\xd1\xba\x10<\x03\ +\xc8C\xbeg\xfd91)\xfbN\xd9>+\xa9\xd8\xae\ +\x06\xc1\xe5 O\xd0\x17\xd5\xb5\xa6\x93=\x88\x5c4>\ +\xe3]\xdf\xac\x86\x17*\xba\x0a\xd6y\xa7p\xbf=\xac\ +C-\xf0T\x90\xc7\x10\xa8\xd2\xa8(\x9b\xda\x9a\x0d\x90\ +Y\x22|\xb0\xd3r\xef\xaf\xb9\x19+\xcb\xf9\xf7\xacn\ +B\xbfX\xe0\x9cK\xe2,\xb5n\x5c\xe7\xb8\x7f\xec#\ +8)\x91\xf6gj4Tt\x95\x8d`\xe5i\xa8\xa9\ +\xf4\x9dz\x1a\x9c\x00`\x18\x01K\xa3\xa2\xac\xb7G-\ +\xf8\x90\x0fy\xf0\x816\xef\xefa\xa8R\xed\x18\x8d\xad\ +\x9c\xb8s.\x89\x9f\xeaK\xe8zS\x1a\xb3s\xb4\x8f\ +/\xc5\xe6\x12\x8a\x8an^hKb\x8bX\x80D\xa1\ +\x8d\x02V7\xa1_\x1c\xf6\x08\x80\xc7Ap\xa8V?\ ++k\xd2\xc6m\x10\xf9+\x80G\xbc\x9c\xfdP\xc5\x94\ +\xee\x0f\x10\x9aj\xff\x8ammx\xe7\x13h\xd4\xeb?\ +\xeb\xaf<\x17\xe2\xeaW\x02\xf7\xd2\xa1\x19x\x1a\x11\x15\ +\xddP\xe36\xd9\xb7@\x10\xf3E\xd2We\xfc\xa7\x9b\ +\x0b|\x86\xd2\x9eD]\x1c\xceQ4\xf2C\x80\x87\x13\ +\xe8\xa5\xa3\x101\x91\x15<\x95\x13>\xf5\xd0Jw^\ +\xd8\xee\x5cv5$\x06X\x8e\x7f\x01\x05\x0d\x9aF\xde\ +\xa0b\xa9\xc5>dd\x22\xed\xcf\xd2h\xa8\xe8F\x82\ +ecQ\xdd\xdb\xb1\xffNr\x90@\xe6\x03Hwu\ +z\xb7nq+\xdaP\x84\x0a\xe8\xed\x07X\x07\x1b\x9a\ +\x1f\x11r$\xc1\xddtDTd\xcb\x91\xeed|g\ +\xcb\xf8\x17\xaeiH\x10\xd3\xd1\xdf\xa0*\xf4\x07\xba\xb3\ +\xde\xd8^S\xb0L\xa3\xa1\xa2\x8b\xa8U\x1f\x1b[\x9e\ +%\xd1\xe7\xdf\xd6y\x94\xe9\x9e\x8f\x96\x8aV\xef\xb9\xe2\ +\xddYL\xec`\xc4?\x8c\x94\xef\x01\xfc\xaeVB\x97\ +\xdd\xae\xe5m\x10/ \xc0\xf3a\x17\xd9\xcf\xe8hr\ +\xbe\x11\x139\x07\xe0\x89zl\xb2\xc1/c\xdd\x08\xe4\ +\xfc\xf1\x19\xef\xc6f\xadNV\xd1\x8d*]\x8d\xf6\xc1\ +\xb6\xc5G\x09$\xbeh..@K\xbbxw\x14\xd3\ +\xef\xb4\x19\xe0y\xe3\x9c\xc1qK\x0e\x01q\x00\x04\x07\ +\x92\xdc^G\xaadv)\x1f@\xf0\x02\x88\xb9~ \ +/d}\x7fn\xefIX\x81\xc8\xd8\xa3ZG\x1a\x98\ +\xb3I|Wg\xc3\xc6\xdd\xb1\xce\x09O\xacJ\xbb\xaf\ +h4Tt#O\xae\xc9\xa9\xa7\xe0N\x12\xe6\xab\xac\ +\xd8@\xf9\x93\xeb#S\xd9\xea\xcd\xed\x91\x17\x83db\ +{\xcb\xf8\x07A\xb0\xbf!\x86\x88\xe0\x1b$*t\xe4\ +\x0a\xbe3\xf9\x08\x82\x7f\x080W\x02\xbe\xe01\xf7B\ +U\x06K\xa2\x16\x87%#QYWa\x9f\x0a\xe2,\ +\xed\xc2\xb5\xf1\xeea\x22\xc8\xb4u\xba\xe7l}\x1b:\ +5\x22*\xba\xcag\xc2\x9br\xc6\x12h\xfd*\xe1\xfd\ +\xdc#4O\x04S\xb2\xf4n\xafn\xc1\xc7=\xf5]\ +\xe7&a\x0f\x0c\x9cA1\x1bC!\x18b\x80\xaf\x0b\ +0\xf8\xb34\xb9\xb2q\x8b\x22D\xde\x078_\x80\xd7\ +!x\xc3\x0f\xe4\x0d7\xe7\xbd^\x8c\xf3\xfdR\xa6s\ +,\xb6\xb1\x1d\xe7t\x02M$\xeat\xb6l\xf4\xb1\xc3\ +\x22\x1f\xd2\x98H\xfb\x8fj4Tt\x95\xaf\x12\xde\xa4\ +3\x9a\xc4\xa4u\x0b\xefgNA\xf2P\x10\x98\xc9\xf3\ +\x98{\xb8T\xca\xfd\xbb\xc6$\xb6c\xdc\xdd\xd3\x0a\xf8\ +u\x10\x83H\xee.\xc0nzF\x0c\x08\xb0\x8a\x22\x8b\ +\x04X \xe4|\x08\xde\xf0\x02y\xa3\xd3\xf7\xe6\x97K\ +7\x1e\x14\xe9x\xe3\xc2&k\x98\x05\xa6\x00\x8e\xd0\xe2\ +\xa8M\x16\xdc)\x1dY\xefl\xb5rT\xd1U\xd6\xbf\ +\xe3\x1dIb\x12\x01g\x03\xef\xda-\x11\xe2v\xf8\x98\ +R\xaa\xe6\xe4mIl\x11\x0f\x9c]\x1d\x83]\x09\xd9\ +E\xc8\xed\x09lO\xc8\x8ek\xfe\xbbw\xd9\xdb\xe7Q\ +\x16\x13|_D\xde\x13\xf2}\x8a,\x0a \x8b\x5c1\ +\x0b\xbd\x9c\xbbH\x17?\xac\xf7J[\x02\xf6(\x10I\ +M!o\xdeU\xa0@\xa41\x9e\xf1\xff\xa2\xd1P\xd1\ +U6\x90\xeeF\xeb\x07\x961\xd3ITo\xe4?}\ +^D\xa6t\x18\xef\xaer\xb2\xef[~2zU\xc7\ +c\xdb\x04VPg\x8c\xd4\x91\xa6\x8e\x81\xd4\x09Y\x07\ +\xa0\x8e\x94~\x14\xd6\x01k\xfe\x9f\xa0\xb6Pw1\x05\ +\xe8\x06\xb0\x82\x22m\x00\xdb\x84\xd2\x06A\x9b\x80m\xa4\ +\xb4!@\x9b\x18.\x0f\xfc\xa0\xcd\xa7ic`/\xfd\ +\xfb\xdb]K\x86=\x05_g\xee&dG\xc6\xd9\x07\ +\xda\x16R \x8f\xfbR1\xa1\xb2\xb1\x82{[\xa7\xe7\ +\xfd,*\x85u*\xbaJ^\xe9L\xd9C\x1c\xf0A\ +\x12[o\xc2\xce\xab\x0b\x90\x19\x81\xc8\x1do\xaf\xf0\x1f\ +\xdfk:\xdc\xb0\xc6i\xe5h\xf4\xa6\x05c9\xb0\xed\ + \xde\x0b\x00<\x13T\x18\x91\x04\x00\x18Ho\x08\x82\ +\x80l\x07\x00;`W@\xd3\x0d\x00\xae\x9b\xfd$0\ +\xf0\xc5G\xa0;Q\x14\xd5\xa21\x16\xb3\x7fB\xa2\x11\ +\xe4^\x1a\x91\xcd\xce\xb4,\x09\xc0T<\x9d\xbb_\xa3\ +\xa1\xa2\xablf\xd5\xb0c\xfc{\x01\x0c\xdd,\x03{\ +\xca\xbd\xbe\xc8\x9ds\xde\xf4\x9f\xd6\x1d\x99\x82\x1e\xaa@\ +\xae\xadr\x86\x138\x19\x82\xff\xa7wk\xf3T\x84\x07\ +\x99\xd8\xe9z\x17\xe8\xeeVEW\xc9\x13\x0bG#\xde\ +?n\xdfDrl\x9e:\xc8\xfc\xc5\x87\xdczU\xda\ +\x7f\xa2Y/\xc8+(\xec\xbd\xda\xa3z\xdb\x07\xd8\x16\ +F\x82\xce\x8e\xb5\xbawi\ +4Tt\x15\xf4Tw\x15k\x98e8\x91\xe0.\x05\ +|\xd8\x97A\xe4\x81\x80\xe6\xfe\xf6\x5cn\xa6\x9a8D\ +\x9bU\x0d\xe8S\xe18\xdf#\xe4H\x80?&P\xab\ +Q)\xa8\xd8\xe6D\xf0\xfb\xce\xac{\xb9V\xd7\xab\xe8\ +*%\xc0\xe2$*\xfa\xc2\xb9\x8c\x06\xe7\x11\xb0\x0am\ +\x00A\xe0y\xa1<\xe0\x0af\xea90\x22\x916\xfe\ +Q\xad\xbd\x8fC|\x0f\xc2\xef\x818dCM[\x94\ +\xcd~\xdefJ\x80\x9f\x95\xaa\xe1\x8d\xa2\xa2\x1bi\xba\ +R\xf6~61\x89\xe0\x9eE\xecZ\xf2O\x01\x1f\x16\ +\xf0\xf1.\xe6\x9e*'3\x0ee\xedt$\xb1\xb5c\ +\x9c\xc3\x099\x1c\xe0\xf7\x09\xf4\xd5\xa8\x14Um_\xf5\ + g'\xd2\xfeL\x0d\x86\xa2\xa2\x8b\xd2\xbeZ\xb4m\ +\xc2\xb9\x98\xc0\xf9\xc5v\xf6\x11\xc0'\xf0\xbfA\x80'\ +\x02\x13\xccZ\xd9\xe1?\xa3\x1dM\xca\x835\xbd\x94\x0f\ +&\xe5 \x00\x07\x11\x1c\xa8Q\xe9\x91T\xf22\x88\x5c\ +:\xfbM/\xa3u\x14\x8a\x8an9-\xa2\xe3\xe2;\ +Z\x96\x7f\x0d\xc9\xfa\x9e<\x8b\x22\xf0\xf7@\xf0\x8c \ +\x98\x9d\xed\xf2\x9f\x8dz\xc7\x1c\x94H3\x81\x8b\x1b\x9d\ +A4r\x10\x80\x03\x01\x1c\xa2\xbd\x92{\x5cl]\x01\ +~\xdfI\xf7r\xcd\x16)*\xba(\xeb\x94\xf3A\x0e\ +\xf1[\x80\xdf,\x05\xe7\x1c\x8a\xbc.\xc0l\x11\xce\x16\ +\xf2\x85\xfb\xdaro\x1e?\x1d\x81\x8eT\x01\xe7@C\ +b\x80\xb1\x83!\x84\x0c!1\x04\xc0PM\x17\x97\xcc\ +\x99m\x00\xc8\x9f|\xcf\xba,1)\xfb\x8eFDQ\ +\xd1E8\x0aa\x86\xd7:\xa3\x09\x8c/\xb5+\x1d\x22\ +XM\xe2\x1f\x81\xe0E\x10s%\xc7\xb9WN\xce-\ +hV\x97,lj\x9a\x98\x08\xf6\xa1\xc8P\x12C \ +\x18B\xa2\x9fF\xa6$\xdd\xa4\xee\xcf\xfa\xfc\x85\xde\x89\ +WTtC\xca\xf2\x93\xd1\xabW/\xe7<\x02g\x97\ +\xb2\x15\x9f\x00\x1d\x14\xbc.\x90y\x10\xbc\xe6C\xe6\x05\ +\x9e\xffj\xe5d|\xa8\xa3\x08<5\x0c\xd6\xfe\xbb\xc5\ +v\x86\xc1 \xc3`\x10\x04\x83\x08\x0e\x12` \x89-\ +4B%\xbf\xbb}\xd2\x83\x5c\x5c\x91\xf6\xe6h4\x14\ +\x15\xdd\x08\xd0>\x06}\xe3q\xe7\x02\x0aN'QQ\ +F\xe7^m\x04\x16\x88\xc8;B\xbe\x0d\xc1\xdb~ \ +o\xfb\xe2\xbdS=\x11K\xc3\xf6\x82\x14\xafrvp\ +\x18\xech\x84\x03\x04\x1c@\xcaN$\x06\x89p\xf7B\ +\xb54T\x0a\xca\x5c/\x08.Nd\xfc\xc75\x14\x8a\ +\x8an\x04\xe9l\xaa\xd8\xd6\x16\xefb\x12\x8d\x04b!\ +\xf0\xa2]\x04p1 \x1f\x08\xb8\x88\x94\xc5\x81\x98E\ +A\x10|l|\xb3\xaf\xd2\xab?\x8a\x8a\xae\x82\ +|U\xd2nQe\x8f\x85\xc1y\x04\xb7\xd3\x88(*\ +\xb6X%\x82[|\xcf\xba\xbebR\xf7\xfb\x1a\x11E\ +EW\xc9;\x0b\x8e@l\x87\xed\x9d\x9f\xd0\xc8\x05\xc5\ +l\xaa\xa0(%dh\xf1\x16\x047-\xef\xf2Z\xd5\ +W\x5cQ\xd1UP\xac\xab/G\xd7\xc5~lA\xce\ +\x07\xb0\xbfFD\x09\xbfU#\xfe\xe2#\xf8\xddUi\ +\xff\x89f\xadDVTt\x15\xf4l;\xc1\xb3 <\ +\x96\x84\xad\x11Q\xc2\xd4\xf1G\x04\xb7\x0b\xf8\x87x:\ +\xf7\xb6FDQ\xd1UJ\x86\xce\xb1\xd8\xc6v\x9c\x14\ +\x813H\xd4iD\x942\xde\xd5\xce\x12\xc1m\xcb\xe0\ +N\xdf6\x83.\x8d\x8a\xa2\xa2\xab\x94,K\xebQ\xd5\ +\xa7\xd6>\x85@\x0a\xe4>\x1a\x11\xa5L\xcej\xdf\x06\ +1\xc5\xf5\x9c[*'v\xfdK#\xa2\xa8\xe8*\xe5\ +\xb7\xfbM\xd9C\x1c \x09\xf2d\x02U\x1a\x11\xa5\xc4\ +\xd2\xc7\xdd\x10y\xc0\x87d\xf4\xacVQ\xd1UB\xc3\ +\xca\xd1\xe8]\x15\xb7G\x92\x1c\x05`\xa8FD\xe9\xc9\ +\xf41\x89g\x03\xc1-\xed\xab\xdd\xbb\xea\xee@\xbbF\ +EQ\xd1UBK6\x15\x1bD\xc8\x09\x84\x8c&\xb9\ +\x83FD)\x8a\xd0\x02\xcf\x89\xc8t7p\xee\xd6\xf4\ +\xb1\xa2\xa2\xab \x8a=a\xf7\xdb\xcd\xfa\xbeex2\ +\xc0\x1f\xab\xdd\xa4\x92\xe7\xd4\xb1\x0f\xe0)\x88\xdc\x93\xcb\ +z\xf7VM\xc5G\x1a\x15EEWQ\x00,\xaaG\ +b\xcb\x9a\xd8\xf7\x8d\x09\xeaA\x0e'\xd0K\xa3\xa2l\ +\x8a\xd0R0GD\xa6\xe7\xe0\xddU\x95\xc1\x12\x8d\x8a\ +\xa2\xa2\xab(\xeb`\xc9HT\xd6V9?\xa4\xc8p\ +\x80Gh_Ye=B\xdb\x06\x91\x99B>\xd2\xdd\ +\xe9\xde\xb7\xc5\xadh\xd3\xa8(*\xba\x8a\x82MKA\ +\xef\xbb\xab\xbd\xbfe\xf8#R\x86\x93\xdcC\xa3\xa2\xbb\ +Y\x8a\xbc\x14\x08g\x06\x0cf\xbe\xd3\xe6?\xbd\xd7t\ +\xb8\x1a\x19EEWQ\xf2\xcc\xea\xa438N9\x1c\ +\xe4\xe1\x00\x0e\x22\x90\xd0\xa8D\xe2\x0e\xed\xbbB>&\ +\xc2\xc7\xba\xb2\xb9Y5S\xb1J\xa3\xa2\xa8\xe8*J\ +\x11Y\x9cDE-\xad\x83\x0d\xcc\xe1\x06r\x98\x80\x83\ +I\x18\x8dL(Dv1\x80\xe7@<\x19\xf8\xe6\xb1\ +xkn\x81FEQ\xd1U\x14\x94V\xfb\xc1\xaaj\ +k_#\xe6{\x868P\x88o\x13p42\xe5P\ +e,oB\xf0\x8c\x08g\xe7\x0c^\xacnq_\xd3\ +\xc8(\x8a\x8a\xae\x82\xf22\xe4H8\xd6\xfe\xb6\xc5}\ +E\xb8/\x80\xfd\xb4(\xab$\xee\xcc~\x0c\xca\x1c\x08\ +\x9e\xf5\x02<\xbb\xaa\xdb\x9b\xab-\xf2\x14EEW\x09\ +\x19\xcd\x00/j\x88\xedAG\xf6\x85\xe0\x9b\x86\xf8\x86\ +\x00{\x13\xe8\xad\xd1)\xd8\x0e\xf6]\x08^\x11\xf0U\ +\x11\xbe\x0a\xe2%\xed\xd6\xa3(*\xbaJ\x84\x85\xf8\xc2\ +d|'R\xf6!doB\xf6\x04\xb0'\xc8]5\ +5\xbd\xb1g\xb0|U\x80y\x10\xbc\xeaQ\xe6\xad\x14\ +\xefu\xed\xd0\xa3(*\xba\x8a\xb2^^\xab\x87\xb3k\ +mlW\x00{\x1a\x06{@\xb0\x0b\xc1]\x04\xb23\ +\xc8\xed\x18\xb1\xf9/\x02\x0f\x94\x0f\x08.\x14\xc8B\x02\ +\x0b\x83\x80\xff\xf4E\x16\xbaY\xefU\xbd\x1b\xab(*\ +\xba\x8aR\x10\x16\x8eF|\x1b+\xb6\x13l\x7f'\x8a\ +\xd9\x0eD\x7fB\x06\x00\xec\x0f\xcav\x10nK\xa2\xa6\ +\x8c\xd2\xc09\x00\xcb\x09Y&\xc2e\xa0,\x12\xe1?\ +!X\x18 X\x88\xc0^\xf8\xaa\xc9~04\x03O\ +G_QTt\x15\xa5\xe4Xp\x04b\xfdw\xa8\xe8\ ++\xbe\xd7\xcf\xb2\x82\xadL`\xfa\x91\xd2\x07@o\x01\ +{\x13\xd2\x1b@\x0d\xc0\xde\x04*\x01\xa9\x04\x11\x13A\ +\x15\x88\x18\x84\x9fo\x83\xe8\x90\xa8\xfe\x9cH\x0a\x04+\ +?}\x0a\xa5\x1d\x02\x8f@\x17\x80n\x90\x9e\xc8\x9a\xae\ +9\x94\x95\x10\x88\x80m\x00\x96\x91\xb2L\x84\xcbE\x82\ +\xe5>\xb8\xcc\xc0Z\xd6\xd1\x91\xfdX\xbb\xec(Jy\ +\xf0\x7f\xc0D\xab\xfd\x86#\xc3\xfe\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00.\xe4\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x8b\x00\x00\x00Z\x08\x02\x00\x00\x00\x07\x192\x22\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00.\x9bIDATx^\xed}\x07@\x94W\ +\xb6\xffg\xb21&n\xa2\xc6\x86\xa2\xd2\xbb\xf4\x22\xd2\ +AAP#b\x03\xa4\xf7\xde\x87:\x0c\x0cS\x19f\ +\x98\x81\xa1w\x90^E\xb0 *\xdd\x02v\xa3\xa6\x99\ +\x97l\xfeIv\xdf\xdb\xff\xeef\x93\xec&\xbb\x9b\xec\ +}\xe7\xfb>\x18F\xc0\xca\xf8\x9e/\xc9\xf8\xcb\xe4\xce\ +\xfd\xbe\xb9\xcc\xdc\xdf\x9cs\xcf=\xf7\xdc{\x96p\x8b\ +[\xfeM<\xd0\xbf\x7f\x82\xff\xf0'\xfc\xf1o\x0c\x9e\ +0\x0cC\xc4\xbf_\x1f\x8f\xee\x81%\xf8\xa5%\xf0\x8f\ +|\xcc\x96\xc8\xce\x9by,Y\x82\xdf\x01\xcfK\x96\xbc\ +\x02E\xfc\x99\xfc\x87\xbfx\xe5\x15\xfc\xff\xd3\xf5\xf8]\ +x\x11\xff?%\xf4\x10\xc6\x1671D\x0d\xf4\xfcZ\ +Z^\x155\xb7<\x9d]\x92\xc6*J\xc9\x11'\xd3\ +\x0b(tQR\xb60)\x0b\x90/\x05\xb2\xe6\x17\x0b\ +\xe9\xae\xc8O\xca\x16Qp\x08)Dw\x01\xa0\xdf\x08\ +\xe0\x05\xa2\x06\x9e\xc9\x97\x85)9\x85)\x0cq*\xab\ +\x18:9\x83S\x96\xc9\xab\xc8\xca\xab\xca\x16\xd4\xe4\xe4\ +\xd7\x01\x05\xac\xc2F\xe0\x82S\xdc\xc2-n\xe5\x95\xb6\ +\xe7\x95u\xf0\xcb;q1a\x8a\xea\xe9\x82jZn\ +\x05\xbc\x0d\x9a\xa0d\x09\x13\xa8yq\x19\xb9\xb1i\x9c\ +\x98Tvt\x0a+\x0a\x90\xcc\x9c\x8f\xc8d\xe6/\x04\ +\x0b~}\xb2\x12\xfa\x07G*\x0b\xfaj\x1a\xd0oD\ +\xd7\x11 \xfa\x90,\xa7qb\xd3\xb9\xd0\xb1\x09\x99\xfc\ +D\x9a\x00H\x85\xdeNg\x15Q9\xa5\x99\xb9\xe5@\ +\x15]P\xc3\x10\xd6\xb1\x0a\x1a8\xe2\xa6\xdc\xe2\x16^\ +i+\x90\x843\x04\x1c\xc2\x1d\x84\xdc\x14\xc6Q\x05Q\ +)\x9c\x90\xf8\x9c\xa0\xd8\xac\x80\xe8L\xbf\xc8\x0c\xdf\x88\ +t\xdf\x884\x9f\xf0\xd4i\x84\xa5\xfa\xfc\x0a\xbc7\xf0\ +>\xf1\x0dO\xc3\x81wQ\xba_$ #0\x86\x1a\ +\x1cK\x0d\x8d\xa1\x05Gf\x06G\x92\xcf\xd3\x08\x89\xa2\ +\x85Fg\x87\xc5\xd0#\xe2\x18Q\x89@*\x9bd\x0b\ +\xb4T\x0a\x03\xa8*\xa6r\xcbhy\x95\xf4\xfc\x1a\x86\ +\xa8\x9e-n\xe4\x167\x03I8CY\xbcJ\xb8\x9c\ +\x9c-\xde} \xd0'\xd0'(,0%#.>\ +9*\x8e\x12\x11\x9b\x14\x1e\x9b\x08\x08\x8bI\xf8\x15\x0b\ +\xf5@b\x18t\x0e\x01\xbc\xa3\x12\x92#\xdc<\xfc=\ +\xfd\x12\x9d\x02\xdd\xf6%{\xeeK\xf2\xd8\x97\xe8\xbe/\ +q\xe69\xc9\xc35\xc9\xd3\x95\xe2\xb9?\xc5k_\xec\ +\xd1\xa0\xc0\xcc\xb0\x84\xac\xc8$FL\x0a+>\x83\x97\ +D\x13\xa4\xe4\x14\x00\x11\x99\xdc\xf2l~5\x08\x13\xbb\ +\xb0\x11$\x09g\x08\xa4\x8c\x92]\x18\x18\x19\x8d\xd0%\ +\x84n\xde\xbcQ\x8e\xd00BS\x08M\x12\xb8\x89\xd0\ +\x0d\x02P\xb8\x83\xd0\xdd\x87q\x0f!\xc0\x9cJY\xbd\ +\x5c|\xe3\x8bo\xe11\xdfe\xfe\x17\x7f\x1f\xa1\x8b\xef\ +\xee\xf6\xf2\x1d\xf1\xe7!.\x1b\xb18\x88\x93\x87r%\ +\xe0\xa1\x5c\x12\xf9(\xcf\xa3\xdc\xd7\xd7'90:-\ +$>3\x22\x89\x0ez2\x9e\xca\xa3\xd0\x85\xa0\xf72\ +s\xcb\xb2\xf9U0\xfap\x8a\x9ap\x86\xd2\x18\xe2\x88\ +d^w\x0f\x17\xa1\xcb\x08\x8d\x00+\x83\x83|\x84&\ +\x88\xf2\xa5\xeen\xc6\xf5\xeb%W\xa7\x0aGF\x04\xd5\ +\xd5\xc9\x99\x99>t\xba\xff\xff\x15dg\xbf\xc0\x8f:\ +\xbf\xf1\xac,?\x0e'8\x8b\xe2\xf3n\xafG6b\ +f\xa2\x9c\xf8\xdf'\xecn\xd9\xb5\xbb\xddi>\xdc\xc6\ +\xf6\xe8\xdbo\xdb\xe1r\xd0\xe9\xdd#\xbb\xdd\x8e\xee;\ +\xe2w\xc0+\xc4\xdd?\xd2;$!\x91\xc6\xa7\xe5\x96\ +\xd1\xf9\xd5\xec\x82\x06\x9c\xa1\x94\x1cQH\x02\xab\xa3\x8b\ +C\xc8\x10\xb021<,\x920t\xf2d\x0e\x9bW\ +\xd1\xd25\x1a\x12\x12\x97\x9d\x96\xaa\xabkdbbN\ +b\xdb6\xcb\x8d\x1b\xb7(*\xaaBAR\xb9\xf8\x82\ +\xa9\xe9vh\xc4\xcc\xccBYY}\xf5;k\x8d\x8d\ +L\x0d\xf4\x8dH\xe8\xe9\x19\xe8\xe9\xeaK^\xce)l\ +\xdd\xaa+]cll\xbaj\xe5\x1a\x0d\x0d\x1dh\x0a\ +\x1a\x84f\x8d\x8d\xb7\x91\x8d/\x12\xd0\x88\xbe\xbe\xf1\x9a\ +5rzzF\x92\x06\xa1\xa0\xa4\xa4\xd6\xd7w\xb6\xbb\ +]\xd4}\x91S3\x9c\xdd0\xc1a\x8a\xb4\xea\xcb\xa7\ +F\xce\x7fqa\xe0\xb398?\xf0\xd9\xf0\xf8\xe7C\ +\x13\x9f^\x18\x07\xfc\xc7\xf91\xc0'\x80K\xd7\xfe\xb0\ +\xfb]\x0f\x10\xa3\xac\xbc\x0a\x10#\x9c!J\x96 (\ +&\xa7\xbd\x83\xbd\x10CW\x8a\x8b\xc2J*\xcf~\xfc\ +\x05\x08gI\x0e5\xd9\xccl\x9b\xcd\xcc\xc3\xce\xceN\ +MMMGG\x07\x0ad\x9d\xb5\xb5\xb5\xe4\xeab\x0a\ +\xd0\x0e\xb4\xa9\xae\xa6\x1a\x1a\x91J\xcd\x16\xa6e\xf2\x01\ +\xa9\x19<\x0e\xbf\x86_\xd0\x98\x92\xc1#k\xa4\x91\x9c\ +\xce\xadm\x1cLN\xe3J*\xb3\x19b\x87\x9d\xbb\xf5\ +tummme\xfb\xf1\xa0\xb5\xed\xdb\xb7+**\ +\x9a\x9b\x9bK\x7fM\xe8\x8a\x81\x813\x0e;\x0f\xff\xed\ +\xaf\xfd\xc40q\xe7\xdc\xc0\xc1\xce\x13\x1f\xdcz\xffo\ +\xd7\xde\xfb\xeb\xd3\xe0\xf6\x87\xdf7\xb6\x8fXX\xed\xcc\ +`\x17\xc3\xe8\xc3\xc8\xaf\xc1\x19J\xcc\xcc\xf3\x8f\xa2I\ +342R0#CWJJ\xc2K*\xcf|\xf8\ +;\xc4\xcd\x15?\x91\xa1\xc5\xb0\x22\xfd^\x92!e%\ +\x85\xa2\x8a\xde\xb6\x9e\xcb\xcd\x9d\xe3\x80\xc6\xf6\xd13C\ +\x1f^\xbd\xf3\xd7c\xad\xc3d\x8d4\x1aZ\x86>\xf8\ +\x0c\xd5\xb7\x0cI*\xbb\xfb\xaf\x1f\xf5\x0a\xd6\xd1\xd1\x96\ +0dee\xb5\xf8OH\xfe\x0a\x1f\xc9\xd0\x993\xce\ +\xbb\xbd\xbf\xf8\xa2\x0d\xa1q\x84\xae\x9e:\xe9\xdav\xfc\ +\xde\xf5\xbb\xdfL\xdd\xfe\xf3\xd3\xe0\xe6\xfd\xef\x80!\xbf\ +\xe0\x04Jv>\x90\x94#\xa8\xc6\x19J\xa0\xf2\xfc\x22\ +\xa8m\x1d\xac\x19\x19\xbar\xea\x14\x8cIW\x09\x92\xae\ +\xd7\xd5\xc6g\xb1\xdaF&\xbfNI\xcd\xa5R\x12\xb7\ +\xea\x1a\x12*h;\xc0\xdc\xdcr\xd3&\x05ee5\ +(\x905$LM\xa7o\x90\xae|\xa62\xb4\x00m\ +\xaa\xaaj\xaeZ\xb9\xca@\xdf@\x97x\xe8\xe9\xeai\ +\xa8\xab+)*B\x81\xac\x91~\xe8\xe9\xe9m\xde\xb4\ +\x09\x9e%\x95\x86\x06\x06\xabV\xad\xd6\xd2\xda\x0aJX\ +V\x1f\x8c\xfcv\xdb\xb6Y\x18\x1a\x9a\xac[\xb7\xc1\xc0\ +\xc0\x18\xcad\xe3PPQQ\xef\xef\x1f\xe0\xe5\xa5\x11\ +#\xfa\x18B\xd7N\x9fz\x1e\x86|\xfcc`(\x02\ +\x93\x01\xe6\xa9\x04C\x19\xb9\xbea\xe93\x0cM|\xf5\ +Uwaa\xf4\x993y\x97.\x95tu1\xc08\ +\xf9\xfc\xf3\xc6\xdf}V7yE|\xf6\x8c\x98\xc1\x08\ +\x15\x08b(\x14\xef\x94\x14\x9f\x94\x14\xdf\xb8\xb8#\xf1\ +\xf1\x1e\xa9\xa9\xbe\xc4K\x99!9\xd9\x07\xdaLH\xf0\ +\x80\xf6SS\xfd\xe0\x0f\x91\x80J\xe2o-\x0c\xe9;\ +\x89\x9b\xfdbb\x0e'&\x1e\x95|0hVV\x1f\ +29\xd9;&\xe6\x10\x85\xe2%\xdd`|\xbc\xbbX\ +\x9cy\xf9r\xc5\xb7\xdf\x9e\xfe\xd3\x9f\xfa\xfe\xf6\xb7\x0b\ +\x9d\x9d\xce\xed\xbd\xf7\x9fY\x86\x02\xe3\x133y\xe9L\ +1\x9d_\x893\x14\x9f\xc1\xf5\x09Kko\x07\x19\xba\ +\xf2\xa7?\xf5\x83\x99P \x8c\xb9~\xad\xea\xc1\x83f\ +\x90!`\x88\xf8E\x00\xc0\xf2\x06\xdd\xfa\xde\xd4T\x19\ +\xb0\xf8\xc5\x17\x9d_~\x09\xe8\x02@Y\xb6\x80\x96\x89\ +\xf6\x17\xdb\xf8\x9c\x16\xc8fe\x02h\xf9\xab\xaf\xe6~\ +\xea]d=\xfcP\xc0x\x91\xbeG\xf2\x87\xa0\ +\xfe\xc4\x09\xf6\x9c\xab\x8fo\xed1W\xa5[\x83\xaf\xd9\ +\xd3\xc1:v>\xa7e\x98\xd92\x84\xa3}\x9c-*\ +\x88f\xa6\xf9CM\xeb0\x0bj\xda\xc6\x18\x15m\xdc\ +\x8a\xee\xea\xb2\xe6\xfc\xbaS\xd9%\xad\xf9\x95]\x95\x15\ +]\xe5\x95\xdd\x95%\xc7\x84\xdd\x97\xb8\xbc^\xdf\xdf,\ +\xc3\x96\xfe\xe6\xd5\xdf._\xb6\xfa\x9d\x15\x80wV\xbd\ +-\x0d\xb2Rri\xc5\xcaU\xce\xfb\xdd\xbdC\xe2\xc0\ +\xc0\xa6r\x8a\x18\xc2\xe9q\x88\xeb\x13B\xca\x10\xce\xd0\ +\xcd\x9b Y\x1f\x11\xee\x03\xd0o`,Hc\xea\xcb\ +\xfb\xf0\x1e\xf8\xb1\xcc\xa9'_N\xde\x7f\xbf\xee\x11W\ +qU\xf9\xe5\x1f{\x09m\xb9\xe0{\x1fSy\xf9\x9b\ +o\xe0\x8d`\x1a\xc1\x0f\x93\xbc\xed\xea\xbd{`\x86\x92\ +\xbf\xd9[\x84\xe5\x09?\xe4gmv\xe1\xaf@\xb4\x06\ +V\x12\xfc\xad\xbb\xad\xe5\x8ea\x7fO\xa1\x22z\x06\xca\ +\x02@\x81\x85\xb2\xd9\x88\xc1@\x994\xbc2;\x07Q\ +\x8d\x05\xa5\x86\xb5H-u`\xef\x95\xd8u\xb4!\x83\ +j\xa4_\x81\x0cj\x90|\xc4\x18\x0b\xa5\xd1\x11[E\ +CUo\xab\x9e\xa9\xe96\x07{\x07;;{;{\ +{[[\xbb\x19@\xd9\x1e\xacV\xbc\x1e.\xd8\xdbo\ +\xd51\x89\x88\xca\x8aNb&g\x0929%La\ +-i)\x80\x96\x9b\x95\xa1k\xd7\xc0\xebC:\x14\xe6\ +`\xfc\xeb\xfb\x15\xd8\xbd?\x7fz\xab\x82\xe8\xaf9W\ +\xc7\xfe\xf0\x9f\x9d\xb7G\xaf\xc1\xef}\xa1\xb7Oue\ +\x06\x0a^_\x09\x1d\xbaP\xcb\xf3\xff\x96t\xcdu\x0c\ +\xdb~\xe8\xd0\x01\xa2\xe3\xf0\x09\xf5\xc5K\x05\x1fN\xdd\ +\xff\xec\xd3\xa6\x1b\x1f\xd7\x96\x8eeN],}\xc4\x07\ +~|\xb3\x0b^\x9d\x18\x1d-\x80q~\xe4t\xf7\x7f\ +<8\xdeS\xe7\x1a\xf3u*\x031\xb2\x11\x97\x8ex\ +\x19(\x1d\xc3\x1c0\xcc\x1c\xc3\x5c\xddG\x02\xd8(\x8f\ +\x8b2mD%V\x0dH?\xe3\x0c\xfd\xa70\xd7\xd6\ +0\xb7.\xa6['\xdd\xad\x8b\xb1\xbb:>\x171\x12\ +\xfe_\xc2;\xaf\xafVUQ355\x03V\xacl\ +l\xad\xad\xf1\xc9\x99\x95\x15n\xb4\x03,\xf1\x12^\xb0\ +\xb1\xb1u\xb0qx\xd3\xe8-\xe5p-\x97\x10\x8f\xf4\ +\x9cBZn)\xbb\x00~\xf1\x8fch\xe2\x87\x1f\x06\ +\x7f\xf8\xe1\x9c\x04\x08\x8d\xfe\xfeZ\x11u \ +\xfa\xda\xa52\xd91t\x11\x0c%0\x01\x86\xfbO\x7f\ +\xf2Q_u\x81}\x0a\xca\xa6\xfc\x83\x9a\xeenF\x8f\ +\xb0\xcd\x89\xb6\x17q\x1dE\x5c'x\xe6\xc4;D\x06\ +m\xcfEL`\xc8\xa6\x09\xe9&wa\xd8Vy\x8b\ +\x03\xfb:\x8b\x5c\xea\x05.\x0d\x22\xfb\xfcT.\xca\xce\ +G\xf9\x9b\xd5\xb6(+\xaa\x90\x0c\x01\x0d\xd66\xc0\x90\ +\xad\xa5\x84!\xa0\x08\xcaV8I J\xeb\xd6\xc8[\ +Y:\x1fp\x0f\xcc`\x89\xb3ye\xdcB\xc2\xa7\x00\ +\xd66X\x0am3ZnF\x86\xc6\xaf]\xab\x98\x9a\ +*\xbfz\xb5B\x1a7oV\xcf\xa9y\xf8j\xd5\xa3\ +\xae^\xbbV\x09\xfa\xf31\xef}\xcc\xa5\x1b7\xaa\xae\ +_\xaf\x94\xbe\xe1\xf6\xed\x9a\xde^0>A\xaa\xaeK\ +\xf9\xa8\x9eCh$o\x19C?]D\xff\x02\xddp\ +\xf9T7(\xfc\xa9\xf7\xaf\x09B\xeb\x0d\x99\x88\x17\xf2\ +M\xca\xe4J\x95\xfb:\x86wu\x0c$\xf8H\xcb\xb0\ +v\x932\x17\xf1\xccY\xa5&\xc5H;\xe1\xac\xef\xbd\ +\x085z\xbfm3\x02\x91\xb2nBZ\x89c<\x94\ +\x9e\x87\xf2\x14\xd4\x954\xd44ge\x88`\xc8\xda\xca\ +\x1a\x88\xc1\xa9\xb1\x84\x7fD\x19\x7fa\xad\xa4\xa2\xee\xe6\ +\x11\xe8\x1f\x9e\x84\x1bry\x95\x1c1\xe1\x97K\xa4\xc2\ +|h\x0eC0Z\x5c\x19\x1a\x12\x12\x8a\x1e>\xf4K\ +\x88+3\x8e\x0fi/\xe2s34\xf6\xed\xef\xfb\xf7\ +\x9c?\xe4~\xd3\xcf\xfb\xe3`\x87\xba=\xea\x9a\xaf8\ +Fi\xb3P>8\xa7C\xbeM\x1d\x93S\xbfal\ +|M\x0aw\x0c\x8d\xabu4C\xff\x18\x9d\xf4ED\ +\xf4{\xeeI\x9f\xfa{\x8c\xc6(\x85r\x8dY\x93\xba\ +\xe9\xa3:)\x13\xf2\xfb\x0a\xf2\x10M\x80\x04\xca\xda*\ +Z\x1a\xda&&f\xd6\xa4\x96#\x00|X\x12\xdc\xc0\ +\xb3\x05\x14\xa6a\xa1\xa6\xb9\xd5;(6,\x8eJe\ +\x89s\x04\x95\xbc\xa2c$C\x1ci\x86n\xdf\xaez\ +\xefV\xfb\xc8\xb9\x86\x8b\x97\x16\x1cQ\x9e\xbb\x17d\xfb\ +F\x0912ah\xfc\xd3[Mq\xffJI\xfd*\ +5\xf2|dBLB\x89\xb8\x9c\x16\x9f\xe3\xdb\xe1\x1b\ +\xd4\x17\x14\xf1\x13uA\x86Z\xed\xb51\xcc3\xf3\xfb\ +D\x16b\xc1XU\x80xvi\xb6\xa0\xeb\xf6\x14\xe8\ +R>\xdb\x1f\xff\xb1;\x07\xb1\xc3\xae\x87\xae\xc0V(\ +\xab\xa8\x9a\x98\x98\xda\xd8\xe0\x0c\x91\x8a\x8ed\x08\xb8\xb1\ +\xb0\xb0\x04X\xc23\xa1\xf8\xd6\xc9m\xb4\xb4\xdbu\xf0\ +h0\x8d[\xc2\x10T\xe5\x167\xce\xf8\x14\xc2\xd3\xda\ +p\xcf)n\xcb\xdd\xba]u\xffn\xdb\xf8p\xdd/\ +\x8a\xa1\xdf\xddiNB\x19V\xf1V\xcb\xb1\xe5+\xde\ +^\xf1\xe6\x9bojjjjl\xd6\xd0T\xd7\x8cC\ +\xf4\x05\x19\xaa\xd5\xd7r\xe9\x0b\xcc\xfe\x89FGt\x06\ +\xca\x89\xfe8\xc2(\xab\xcc\xb1\x1fY\xd5\xa3\xedUH\ +5b\x04\xb4\x9c\x10\x097\xa9oVRP\x06\x86\x08\ +bp\x8b\x00@\xaa5+\xb0\x14\xa4x\x82kk\xd7\ +o\xd8n\xebx\xc030+\xb7\x94\x99_\xcd#\x19\ +J\xcc\xe0\xc2R\xae\x84!b\x1c\xc2\xb5\x9c\x8c\xf4\xbb\ +lEG\xd2\x9a\x8ce\x08\x18\xa2\xa0\x0c\x07\xaa\xc3\x9a\ +\xb7\xd6l\xd8\xb0a\xfd\xfa\xf5\x86\x86\x86\xba:\xbaz\ +&z\xb1\x88~e\x8d\xda=}\xa3\xf7\xa4\xf0\xa1\xae\ +Q\x8d\x82\x8a\x00\x15\x09\x11'\x17\xb1E\x88\xe5r*\ +U-w\xd8\xb1\x17\x18\xfa\xb7E\x0dR\x8f\x1e&\xc7\ +!\x15\x1d5=\x1d=#c\x13`\x077\x13\xacm\ +\xad\xacI\x8b\x0e\x17&\x89\xae\xb3\xb2\xc4\xc7!c#\ +\x8b\x14z~Z\x8e\x90\xca.\x02\x86\xf2\x8a\x89\x15\xbc\ +\xa4\xcc\x5c\xbfp\xd2/\x87\xcb\xd0\x8c\xa5 \x13\xed\xf1\ +\x82\xe8\x91^\xc4\x92\xc9\xe7\x1c\xff\xfc\xbd\x96\xd8\x1f\x92\ +\x1dh\xd3\x0c\xad[\xb7\xde\xc0\x80`\xc8X\x8f\x868\ +%.:u~\xe6\xb5~\xdbj\xfd\xcc\xca\x0f\x9bV\ +z\x98V\xee7\xe6\xc7\xd8\xac5\xdf\x8dav;\x98\ +\xeeJ;\xfc3\xfe\x12i\x1a\xea\x8caq;\xf9\xfb\ +\x83.G\xfa\x9c\x0bf\xa1\x1c\x89\x0c\x19\xe3Z\x0e\x8c\ +l\x1b0\xdb\x80!Pw\x84\xc7\x1dg\x08\xb8!U\ +\x9c\x9d\x95\xfdo\xcdVX\xd98\x1f:\x1a\x0c\x86\x1c\ +KX\x9dW\x02\x8e7\x9c!\xde\xaf\x0c}\xf1A\xfb\ +\xfe\x0b\xee\x8e\x0c\xc7uo\xaf\xdb\xb8Q^YY\xce\ +\xdc\xdcX_W\xdf\xd8\xca\xc8w,\x10\xc3v`\x98\ +\x0e\x86m\x03\xa8\xf8\xb9\xae\xde\xe1o\x98\x1enT\xe8\ +\xa8\xcf\xb47-tP=j\xb1\xc1\xc0\xae\x04\xb1m\ +\xd9\x91\x0a\x87\xb9&Y\xb5V\xc2\x0e\xbdX&\x1f1\ +B\xaf\xc28\xb4REE\xd5\xd8\xc4\x8cPn C\ +\x04C\xd6\xb3\x0c\x01I\xb8i\x07\xb3\xa2\xed6o\x1b\ +\xaf\xb2\xb6u9\xec\x15\x92\xcd+g\x09k\xf8%\x84\ +\x0cQ2y\xfe\xbfx\x19\x02\x86\x0e\x8e\x1du\xc8v\ +\x80\xe8\xc2e\xcb\x96\xbd\xf6\xdaR\xd0ukW\xafU\ +TS\xe4\xa14m\xcay\xd3\xbcIS\xde%c\xee\ +u\xe7z\x1e\x86\x19i\xb8\xecQM\xb2P\xa2\xefR\ +\xa09\xda\xd58/\xc1\x02l\xcb\x8f(\xa5\x1ew\xe8\ +D\xd6\x8d\xb3\xd66\x1f\xf17+m\xd1\xd6\xd4!\xac\ +m{[\x1b;\x1b\x98\x15\xcd\xf8\x14\xc0v \xf5\x9e\ +-\x90\x07%\x0b[\xb9\xfd\x9b\xbd}c\xc2\xe32`\ +\x1cb\x03C\xa5$C4\x9e\x7f\xc4/]\xcbM3\ +\x94\xe5\xf0*\xf6\xea\x1bo\xbc\x01$\xc9\xcb\xcb\xcb\xad\ +\x93S\xd2P\xa2\xff\x14e,\xfc\xab};\xb2i\xfa\ +\xd1\xae\x1d\xb9\x9eh\x5c\xf2\xca^\xadw}U\x93\xb7\ +\x13\x0c9Y\x979\xbf\x829\xbb\x8f\x85\x98\x8b\xf9N\ +\x0d'\xed+z\xec+\xfa\xcc\x19\x82\xcd\x90\xbaR\x1e\xa2\xae\ +w\xaaU\x0fn6c5m\xda\xdfm\x93\x0b\xbe\x9f\ +=\x0a\x96Gu\xe2M\xd5)\xd6\xba\x0c\x1b\xd7\xde\xbd\ +\xcb~{@\xceP\x1f\xc3\xd40l\xf3[\xaa[\xd7\ +\x9a\x1a`\x98\x1c\x0de\xc3|h\x93\xcaf\xf0)@\ +\xf4\x00\xe1\x8b\x83\x07\xeeY\x98\x03\xd2M\x07\x8e;\xb9\ +\xf5\xf2\xd6\x0e\xce\x87\xbdCs\xf2\xca9\xa2ZA\x19\ +\xc1\x10%37`\xae\x0c\x01+W\xbb\xbar\xe8\xd4\ +\x08NWl\xdd\x18\x9d\xe0\xe9\xf9\xba\xf2\x05\xbd\x8bd\ +\x08l\xce)Y\xd8\x9c\xe3\x9f\xdfk\x0d\xfb\xafXg\ +\x86\xf3o\xb0\xdf\xbc\xb1\xec\x8d\x95\xebW\xcao\xc4e\ +HQU\xb1\x04\x15\xa89\xedu`\x1c\x16\xa0d\xad\ +\xfd\x1e\x07\x8e\x05\xe7\xa0X\xea\xdf\x13E(?\xfe\xc3\ +\xd85\xaa\x1e\x9b\xb7\x1f\xc40\xcb\xf0\x01\xc7\xe3_\x1a\ +\xb4}f\xd4\xfc\xa1a\xd3\x07\x06]\xbf3\x8c\xa9\x01\ +'j\xe5\xe6\x19k\x9b4\x0d`\x04\x22|\x0a0\x1a\ +\x91\xae9\xdc\xe5\x03*\x0e\x1e\xe0<]\xbfA\xdef\ +\x87\xcb\x11\x9f\xb0\x9c\xbc2NAm\xfe4C4^\ +@D\x86\xc4\x96\x03\x87\xca\x9d;5\xf7\xee\xd5\xd6\xd6\ +&[\xa8;\x04~\x14\xe2\xfe~\xc0\x8d\xd1G\xb9S\ +_\x10\x01Olvbt\xac\xf0\xdb\xafOMN\x96\ +^\xbcT\xbch\xbf\xdc\xf8\xe7w[b\xbeK\xb2\xa7\ +\xda\x83\x96[\xbe|\xf9\xebK\xa7e\x08\x18\x02\x8b\x99\ +\x87G\xbe1\x85\x88\x0bL`\x18LTw\xbc\xbd\xc9\ +\xb6\x18\x09B\xae\x04a\xd8a\x0cs\x04\x0b\x22\xb0g\ +g\xfdm\xc3\x8ak\xc6$jo\x1b%v\x99\xbc\xb2\ +|\x87\xb2\xfc&}}\x03\x98\x0f\x91\xd23\xcd\x10\xd8\ +\x0b3\xae9|b\x84\xdbrx\x8d\x91\xe9\xf6T\xba\ + \x9d!\xca\xe2\x96p\x0b\xea\xf2\xcb\x88\x88\xc6\xe4\xac\ +\xbc\xc0Hj\xfb\x8c\xb5}\xff~]U\x15=\x22\x22\ +\xe4\xce\xd5F\x1d\x8a\x01hR\x9f;A\xe3\xa7\xc1'\ +\x0f+\x08O\xec\xb8'\xde\xf0\x1c\xab\x0f\x0b.\x13L\ +]\xbb]=@\x0b\xb6wP\xbdu\x1bV\x22\x16t\ +\xc6?\xf1\xc3Hn\x18\xff\xfd\x83\x0e\xb3\x0a'G\xc6\ +N\xd2R\x00-GZ\x0a[\x94\xb7\x00C0'\x05\ +\xb0\x10C\x8c\xd8\x85(\x17f?\x02\xc4>z*L\ +7\xd0=\xa5\x0a\x1c\xa7\x05\x18\xe6\xe7\xd7n\xdbx\xcf\ +\xa8\xfa\x96\x09\x89\x86{\xc6I]F\x18\xe6\xac\xe3\xa0\ +\xaa\xac\xa8<\xeb9%d\x88t\x9e\xe2\xf6\x1b1i\ +\xc5mn+k;[\xfbu\xeb7X\xd99\x1d\xf6\ +\x0af\xf0+\xb8\x85u\xc2r\x92!\x1a/02C\ +\xc2\x108L\x89\xa5\x97k'O\xf2\xd7b\x1b\xc11\ +\xe5\xfb^\xf0\xc5\x01\x18\x93\x16\xcf\xd0\xe5\xaa*\xcac\ +\x16\x00\x9fr\xe5\x0d\x16\x03\xe1N\x1e/\x8cX\xcb\xb8\ +)\x13-\x07\x0cY\x1e\xdb\xed\xcc\xd9\xb5n\xc5:|\ +\x04\x92\x933666\x80\xf0<#=\x1e\xe2\x01=\ +L\xc4\xf09\x1b\xa5\xbe7\xd8\x9e\xb1\xdf\xb3/L\x80\ +\xb8&\x91\x9e@@\xb6\xc2\x125\xdf0'\x91k\xdc\ +\xd4\xbe\x82s*\xdc\xb3\x1a\xb4\x93:y\x83\x1a\xc2A\ +\xd5\x88:\xbd&T\xb5Iu\xaeo\x9b\x9c\xae\x12n\ +\x05r\x01\x02\x97!\x00\x08\xd9z\xb9\x8d\xd6\xf60\x0e\ +\x85<\xc4Pj6?0*\x93\x88S\x90\xccX\x81\ +\x8c\xc9\x9a\xb2dy7\xb05y C2bh\x82\ +\xb0>\x16\xbf\xda\x06\x1f\xef\x0a\x87\x13B4\x85\xaf\x17\ +\xc8D\x86\x80\xa1]l\xa79>\x85\xad\x06[\xf9(\ +\x0f\xe2{\xf3\x11-\xe2F\xc0\x9e\x22oug\x17\xb3\ +h\x08\xfaeq\x11S\x80\x984\xc4\xdc\x91\x17\xac\xe4\ +\x08sU\x18\x8d\xcc7`\x0eb\xf3\xd5\x18\xb6\x13\xfb\ +\xcd\x9e\xb7\x14\x8f`\xaf\xee6p\xd2\xd6\xd6 \xadm\ +B\xcb\x91\x0b\x10\xe0V \xa7\xab0\x0c\xcdxQA\ +\x8e4\xb5\xf5\x82\x22)1)90\x0e\xe5\x8a\xebE\ +\x15Dd}*h\xb9\xb9\x0c\x81\xd2\xb8t\xfe\x8c\xf8\ +M\xed\x15\xb2eH\x16\xbdI\xaa\xa6\x89\x19\x86d\xe3\ +S\x00\x19\xda^\xe72\x9f!\xf0\xfad\xa1\xac\xc3-\ +{\x14}O\xe8\xa6\x0e\x19d]\xd0\xcd\x18\xb7`\xd2\ +ae(\xf2rd\xd4d\x14D\xff\xc6Lx[\x84\ +\xed~m\xad\xf7R%g=S7q\xb8\xf6j\x8d\ +\x83\xabu\xde\x95\xdfu\xf4\xb5\x15\x8e*\xaa[\xc0\xd4\ +61\x9d\xf6m\xcfqo\xe3\xab\x0f\x84\xff\x94\xd4u\ +J\xaa\x1a\x87\xbc\x82C\xa3S\x18\xfc\xf2Y\x86R\xb2\ +\xf9AQ\x99==\xb9\x10\xf9\xc0`\x04\xcex}.\ +\xf7u\xe5\xeeHu\x06-,C\x19zi\x19\xfa\xf2\ +\xc3\xf6\xdd\x03\x87\x9d\x98N\xa0\xe5\xc0\xa7\xb0~\xfd\x06\ +##\x5c\xcb\x19[\x19z_\x88\x5c\x829\xda4}\ +o\xd7\x86O\x89\x1cz\x90n4\xf7`\x98\x9a\xeaZ\ +\x0d\xc5U\xca\xb6\xdez\x19\x0a+\x1a\xb8\x0e\xa1M\x0e\ +\xc9a\xf2\xf1Q\x0aa\xa1\xca\xc9!\x1b<\x8e\xef\x17\ +\xc5\xaaeLznT\xc5\xadm\xd2\xb7\x8d;O%\ +\xeemb\x04\x02\x01\x92\xac>@Yn\xddf{\xbb\ +\xbd\x9e>\xe1\xac\xfcJ\x9e\xb8\xbe\xa0\x92\x90\xa1\x14\xba\ + \x22>;)\xc9\x1b\xc2\xaczz\x98W\xae\x90\x8b\ +\xcaWj*)k\xb0\x0d!7B\xfc?\x08\x95\x95\ +\x96{i\x19\x02\xcfi*\xca\xb2\xc5\x97\x0f\x96\xac\x5c\ +\xb9l\xf5\xea\xd7\xd4\xd4\x14\xd7\xbc\xb3FQM\x81\x01\ +^Q\xd1\x1e%\xef\xa2\xad\x89M\xc6\xf4\x1e\xb5\xb0z\ +\xb5#\xde\x1e\xc9z\xa6F\xdb\xcd\x8c\xcd\x1d#\x8c\xbc\ +\x15V\xa4\xa5\xd9\x84\xc7i\x15\x1ba\x05\xe68*\x8c\ +\xb0\x1d4\x0b\x0c\x0b\xb7\xe5\x04\xa8\x9b)\xab(\xe1\xab\ +\x0f8=\xb8\xcb\xe7!\xf76\xb9|G\xca\x90\xb5\x85\ +\xcd\xdbf\xab\xb4\xe2\x0c\x0e\xc4\x06\xb0\x05\xd5\xbc\x22`\ +\xa8\x9d\xd8\xfb@\x17\x84DQ\xfb\xfaa\xbf\xc3=\x18\ +' \xa0\x87`\xe8\xd2\xa9\x89\xfc\xf8o\x933\x7f\xc8\ +\xc4e\xe8\x8cLl9\x99h\xa4\x17\xa2\xe5\xc8\xd5\x07\ +\x9b4\xdb\xb7\x96\xbe\xfa\xd6[o.]\xba\x0c$\x89\ +\x9c\x0f\x09Q>\x0b\x8fP\xd8\xa6dc-BI\x18\ +\xe6d\x1e\xbf\xc7!\xcd\xc1T\xd7t\x9b\xc16\xe3\x18\ +\xbb\xe8w\x96\xe5\xa5\xdb\x86&\xea\x14\x9aa\xf9\xd68\ +J\xcc0\xc7\x1c+\x0c\x8bq*\x08\xd6\x82e95\ +M\xf0\x9c\x82o\x9b0\x0d\xa6\x07!2<\x01\x07\xb8\ +{\x08a\x02\x96\xb4T\xf5\x82|)I)\x1c&\xbf\ +<\xaf\xa8\xbe\xb0\x0a\xa2\x8b\x81\xa1lAx|6\x83\ +\x196J\x04\xcd\xcc\xfc\xcc/\x9d\x1c\xe5C\xa8\x0a\x1b\ +\xb1C\xbf\x8a\xbet\x16V\xf3\x16o\xcb\xbd\xec\x0c\x81\ +\x0c\xbd\x0a3\xd67\xde\x94x}\x80!\xf0\x0b\xd0\xfe\ +I\xc107\xb5\xdd\xfb\xf9\x88#B\xdc\xd4\xbf&\xef\ +L\xda\x09\xe68<\x9c(N!\x9f\xc5e!QX\ +\x90\x8a4C\x0e\xd4\xed\x18\x16\xab\xe9\xb6[Y]A\ +]M\x03\x18\x02\xe1\xb1\xb6\x82u\x87\x19\xf7\xf6\x8c\xd9\ +M2\x84\xd7[\xd8\xae\xdd.g\x9e\xeep$>\x98\ +\x83/=\x00C\x84\x0c\xa5\xd3\x05\xc1\xd14b\xff\x10\ +,\xfbKL\xa3K\xfd\x03y;\xd9.\xa1e\xa1\xe1\ +\x9f\xc5^\x9d\x00\xd5\xf7\xf3g\xc8)\xcb\x096`\xbf\ +\xf1\xfa\x1b\xaf\xbe\xf2*\xbeJ\xb4z\xbd\x82\x92\x02\x8c\ +\xc4`j\x8bQ.X\xd8\xb0\x9c\x0a\x80\x19\x08\x17q\ +\xa1^\x84\x84%\x88\xcfE\x1c\x06\xe2\x87\x1e\x96/Q\ +\xc7\xc4\xbaX\xb1\x19V\xa5\x8d\xf9\x1e?\x14r=,\ +\xfewq\xeb\xd6\xae\x87q\x88\xf0m\xe3\x02\x04\xb2B\ +.\x11\x91\x03\x12<\x80\x1bR\x86l,\xed\x96\xeb\xbe\ +\xa5\xea\xa7\xed\x1a\xe6\xcd\xcd\xaf\xe1\x177\x88\xab\x88}\ +\xac\xe99\xfc\x90\x18\xd8\xfb@F\xd6K~\xe6\x97\xbb\ +\xbbXF\xea\xdb\x9c\xc3\x9cC?\x89\xbe:\x01\xf14\ +?s\x86\x12Q\xba\x8b\xc0e\xd9k\xcb\xde~\xebm\ +3\x0b35\x15\xb5\xd5kWoR\xdd\x04s\xf6\x94\ +\xff\x9f\xe2\xde\xe3\x1f\xf3a\x8c\xf7\xa0\x8f\xcf9_\xcf\ +S^Y?f\x81\x09\xee;\xe2\x8da\xbb=\xcf\x07\ +\xf0\x90(\xea+\x8a\xff\xdd(\xff\xf7\xa3\xadS\xadl\ +2l\x5c\x8f\x1d\xa1\xfe=\xbd\x00\x89\x14\xb5\x945\xd4\ +\xb4\x8c\xa6W\x1fp\x01\x22=\x0b\x12\x86\xa6W\x89@\ +\x8a,m\x14\x8cU])>\x91\x99Tv~%0\ +TTM\xc8P\x06]\x00;cgv\xa7H\x18\xba\ +\x043V.C`\xe1k\x11\xfa\xe5/\x82\xa1\xe8o\ +\x12A2DH\x94\xfe\xaf\xec\xc8\x98\xf8\xa3\x05\x81\x05\ +H\x0c\x82\xc2F\xcc\xa3}\xc0D\x94\x9c\x81\xf1\xa6\xec\ +\x1d\xf2\xa9\x0ek\xe2l\x03\xc7\xfdA\xaa\xa2+\xe9Q\ +u\xd4\xa4r\xc7(o\xbd\xb0`\xa3\x8cx\xf3\xb00\ +\x93j\x83\xd5\x19\xca\x10S\x17s\xa0\xd9\xaf\x10\x89\x94\ +\xb4 \xd6G\xcb\xc4\xc4\x04\x8fS\xc0\xed\x04\x22N\x81\ +`\x88\x18\x93p\xdb\x81\x98\xb4B\xc9VEO\xc3=\ +6$,)\x8d\x93_%(i,\xaa&e\x88\x91\ +\x1f\x1a\x93\xf50C\xf8\x94\xb0\xbf?/'\x8b\xb3\xd5\ +f\xeb\xa1\xf3G\xaf_\x01\xbf\xdc\xcb)C2Y\xad\ +\x1f\x07K\x01\x18\xcaA90\x03\x0d+\xdf\x9aN\xb3\ +H+\xdeB\xfdg:\x1d\xe5H\x18\x9273S\xe1\ +8\xa9d;)1\x1c\xf5\xbc\x1dV\xeb\xf9\x85\xa7f\ +E\x0b\x8a84\xf3\x5c3y\x9a\xf9\xa6jg\xd5|\ +C\xb9}\x13\x81\x81\x17\x03}\xce\xfb\xa6}\x9d\x9a\x8d\ +\xb2\xd6\xac\x5c\xab\xac\xa4bJh9r\xff\x129%\ +\x22\x17\xf1\x80$R\xf5\x81\xaes\xb0v\x00-\xa7\x16\ +\xa0\xe3\x12p8\xaf\xa0NP\xdaX\x5c3\xcd\x90 \ +L\x8a!\x22\xcai\xfc\xbb\xefN\x9f>-\x00\x86t\ +\xedu\x0f\x8fx\xbd\x84\x0cq\xb9\xe0S\xb8\xf1\xfb/\ +\xba!\x86{\xf1>\x05\x92!\x06\xca\x0d\xad\xd2\x1a\xed\ +\x1fJI\xce:s|,!G)\x07\xf1\x80\xb6\x8c\ +\xef2\x02/\x86\xb96\xb8\xadK\xb2\x97Oq\x90\xa7\ +\xed\xdch\xa6\x07\x1e\x84,Da!nD\x88q\xa0\ +\xc6\xea\xa3:k\x13\xcc\xe4\x03u\xd6\x86\x1bo\xe0 \ +!\x0b1\x99\x88I\xf9O\xca\x9a\xe5k\xd5\xd44\x88\ +\xf9\x10\xb0Bxz\xc8Y\x11\xe9\xe4\x9e\xf1\x00\xe1c\ +\x92\xb5\xfd;fkM(V\x07\xa3\xfdx\xa2\xda|\ +\x09C\x19\x8c\xfc\xb0\xd8Y\x19\xbaz\xb5\x8c\xc9\x8c\x0d\ +\x09\xf1\x1f\x1b+\x9efh\xe8edHX\x14{\x81\ +\x19\xee\xea\xac}\xf3\x96\x0c<\xa7$C\x10\xbf\x18\x96\ +\xa1\xce\xe7\x14\x09\x85\xc2\xa0\xa0\x88\xbc4\xaf\xa4\xef\xd3\ +\x98\x88\x15~+4;\x0eim\xd7:0\xe0\xf1\x12j\xb9\ +\x19\xbf\x9c\xec\xc7\xa1\xc8F\xfd\x8c,\x8b\xb4\x8a-\x99\ +?e\xc08\x94\x03\x16A\xa3y\xc3{\x86\x94F\xfd\ +\xd8n\x9b\xc6\xdb\xba\xb5\xd7\xf5I4\xdd\xd0\x0e\x18\xf6\ +M\xfc\x82\xe25\x18\xe8\x96{\xc8\x9d\xeb}\x84\xebE\ +\xc0\xdb5\xe7\x10\x18{`z\xac[\x8f[\xdb\x10s\ +JX\x0a G\xd3\xebx\xb3\x8an:&\xcb\x0a\x18\ +Z\xae\xf7\x96j\x80\xf6\x81\x08_\x18\x87\x80\xa1\xd2:\ +B\x862\x19\xc2\xf0\xb89\x0c\xe1>\x05\xb0\xe5X4\ +\xde\x91\xd2#\x10H69Z\xf2\xb2Z\x0a2\x99\x05\ +O[\x0a\xd0\xa1\x85\xa80 '4:=\xf1\x88\xbb\ +/\x0bq@\x08\xa4\x19\x8a9\xeePssv\x99\xae\ +\xee\x9an\xc8d\xe0\xbb\xd5A\xcb\xb6\xf8Xa\xbb\x8e\ +.\xa5\xb8/\x8d\x07x\xbe\x96d\x83\x1d\x80C/\xa2\ +\xde\x8f\xda\xb0r\xa3\xa6\x866am\xcf\xcc\x87H[\ +\x8e\xb0\x14\xc8\xf9\x10\xe9\xa0\xb3\xb6\xb4V\xd1\xd7\xf4\x8c\ +\x0f\x0d\xa7\xa4\xe5\x8ajD8C]8C4\x86(\ +\x22.\xfba\x19\x02\x86\xa6\xe7C\x8e\x81\x8e!\x9fD\ +]\x19\xfb\xf93D\xce\x87^\x7f\xedu\x85\x0d\x0a\xc6\ +\xdb\x8d-\xb7Y\xce\xcc\x87\xc4\xb1\xcd\xe6\xcd\x1f\x18\xa5\ +\xb6\xe8\xc7\x9d\xb0o\xbck\x08\xeb\xa7$\x9a\xee\xe8\xfa\ +_\xf0\xcdE\x5c\xb0\xbcw\xae?\xec\xf9N\x82\xc7\xda\ +8\x80\xe7\xea\x04\xbb\xd7\x0ep\xf05\x8b|%me\ +M\xdc\xda\xc6-\x05\xd2\xbc\xc6\x97\x1e\x88\xd5\x07r\xc6\ +\x0a\xcf3>\x05\x1b%\x13\xd5\x83)\xbe1Y4\xb0\ +\x14p\x86j\xbb\x09\x86X\xa2\x88\x84\xecn\xdc\xb7\xfd\ +\x90O\xa1\xefl\x9e\xb5`\x97\x7f}\xc8\xbbc\x9e_\ +~\x02f\xdf\xfc=CO\xbf\x889\xedL{\x99=\ +\xa7\xe0\x97#}\x0a\xb0\xc0\x0a>\x05X\xc4#}\x0a\ +BT\xe4%0\xa2\xd6\xab\xf9\xb0\xd4\xbdZ\xf6\x04\x96\ +\x18\x07\x94\x9aN\xa3P?\xf4Z(\x031\x81\x0c\x87\ +5\x07\xe73\x04\x22\xb8Qi\xa3\xc2&EC#\xe3\ +\xed\xb0\xca\xb0\x9dXe\xb0 #\xb6g\x0a\x96V\xdb\ +\xcca\xf7\xbf\x85\xc56K\xdc\xda\xf6\xd7v\x8b\xf0\x11\ +\x88\xebD\xe5\x12\x19b\x0ac(L&3|d\x04\ +F \x89_\xee\xe2\xd9A\xfe\xd0u\xf1\xf9\xa9\x82\x0b\ +\x13d\xcc\xc6\xb3\xf21\xff~\x99h\xa4\x17\xe99M\ +\xb5Y\xfe\xdb\xe5\x10I\x22\xed\x97\x039\x88z\x90\xe8\ +7\x15\x15\xf6 %\xa4\xda\x8c\xd7\xa7\xc9\xee\xd5&\xc1\ +\xebQ\xf5;\xef\x0b\xc6\x1e\x17\xb1w\xact\xf7z#\ +\xd9\xfd\xf5x\x80\xe7R\x5c\xcb\x01m\xc0\xd0\xea\x0d\xab\ +W\xaf\x5c\xad\xa0\xa0\xa8\xa6\x0a\xe7\x83\xa8\xe2\xff\xe6=\ +\xe0\x02<\xd4\x95\xd5\xc1\xda\xb6\xa4\xee8\x9a\x14\xca/\ +\xac+(o.\xab#d(\x93-\x8c\x88\xa7\xf7\xf5\ +\x0b\x1e\xf6m\x93F\x1d,\x87\x83\xd5\xb0\xf8\xb9\xea\xff\ +\x0d\x19\xb2M\xb7%\xa3\xb1\x1e\xf6\x9c\x16\x81-\xd7v\ +W'\xa5N3\xf6\x84C\xfd\x1d\xa3\xaa\x9b\xc6$\x1a\ +n\xe9\xf9\x0f\xf91\x11\x9b\x86h\xfa\xdb\x0cwz\xec\ +9L\xf3>\x94~\xf4P\x9a\xd7\xdeD7\xb0\x14\xc0\ +\xdaV\xd1Q\x86\xdd)\x10\x8d\x05\x9b !\x9a\xc7\x96\ +\xd8\x0d\x09!\x09\x0f\xed\x95\x9c\xd9%\xa9\xa5\xa1\x17\x12\ +\x92\x94J\xe5\xe5\x16T\x17T4\x97\xd5\xf7\xe0\x0ce\ +\xb1\x85q\xc9\xac$\xca\x9c\xf5!\x19\xfe\xde\xe7\x87\xc3\ +\xcb@\x1ce\xbb\xc6J\xae>\x80o{&\xe6\xf45\ +8\x14\x06\xd6\x87 \x92\x04\xc2\xe7gm\xb9^\x87\xda\ +[\x86\x15\xd7\x8dI\xd4\xdd\xd0\x05\x86\xd8\x88\x1b|%\ +\xf8\x98\x97N\x5c\x87\x1b\x07\xf1\x08S\x9b\x09\xf4\xc0T\ +7\xe5O)k\x96\xafQS\x01k{v\x15\x9c\x18\ +\x87$\xb1>x<\x09\xe9S\x801i\xf3\x16\xc5\xbd\ +\xfb\x8f\x04\x86\xc7\xf1\xc5\xb5\x85\x15\xcd\xe5\xf5\xe48\xc4\ +.\x88L\xa0\x1f\xef\xe5=\xbc\xc6\xfaKd\xc8!\xd3\ +\x81\x8c$\x01\xc7\xb6$\x92$\x0f\x15N3\xd4\xa4\x1f\ +\xdehQ1\xa2^|A\xb3lR\xb7dJ\xafj\ +J\xd3w\x22\x00\xe6\xb9L\x94\x9b\x85\x84\xc4D\x95\x0d\ +\xc8\xc1\x9f\xe9\xb8\x0f\xe9G\xda\x86\x8d\x1bU\xc0\xeb#\ +\xd9%9\x13\xb1=\xbb\x95\x95X\xff\x06\x8a@\xaa\xe4\ +6nrp\xda\xeb\x13\x18\xc9\x87\xc5\xa1\x8a\x96\xf2\x06\ +\x82\xa1lNAT\x02\xbd\xbdsz\xff\xd0\x8b\xdc\xfb\ + C\xd6e\x1c\xa7@\xca\x90dw\x8ad\xef\x03D\ +\x92\x00C\xb1-\x84-W\xaf\x15\xff\x97\xec\xe0{\x09\ +a\x9f\xa7\xee\x8e\xb5?\x14\xbf\xc3-\xc6>\xa2\xc85\ +\xb6\xea@L\x85\x9b\x04\xb1\x15n\x91\xf9{\xd3\xfe\x91\ +\x09$\x09\x10_Q\x83\xf0)H\xefc\x9d\xf1\xf4\x90\ +\xdbW\xc9X\x1f \x09dKE]\xd3\xcb?<:\ +1\x03dH\x5c\xd9R1\xcbP\xe2\x1c\x86\xf0\xb1G\ +vv\xd7\xac\x96{ic}\xa4\x19\x92\x93\xdb\xa0\xa8\ +\xb8\xde\xd4\x14\xdf\x9d\x02\x0c\x09P\xa1\x07K7\xa3b\ +\xcb\x91896\x12\x10[\xc3\x05\x0d[T\xfeC\xcb\ +\xf0\x03m\xc3\xf75\xf4\xef\xab\xebI\xe3\x03u\xfd\x9b\ +\xcb\x95\x03\xfe\x94\x04w\x82\xa5\x00\xbb$\x17\x88\xf5\xc1\ +-o\x9c\x1bx\x80C\x81\xdcE\x04R\xa5\xa3k\x10\ +\x19\x9f\x9eLe\xe7\x15V\x03C\x95\xc7\x88q\x88\xce\ +.\x8cJ\xca\x91\x92!\x88\x97\x83p\xed\xdb/\x80\xa1\ +\x17\x12/\xf7\x8c\xac\xc3\x81H\xf3GA|\xc6\x8a\xcb\ +\xd0\x8c\x96\x9b\x13/\xc7Ay\x0c\xc4c\xe3^T8\ +C!+\x1b\xf1+\xd4\xd5`+\xab\xf4\xceVI\xf9\ +\xba\xb1\xf1%9\xf5\xa0\xbfP\xc0s\x0ab\xb4\xf6\x9d\ +u\xca\xca\xb8\x96\x83-\x0f\xa4\xcftz+\xab\x141\ +\xb8\xf1M,\xb3\xcam\x94\xdfAh9aI}\x11\ +0\xd4x|\x96\xa1\x8e\x19-w\xe7N\xd3\xc5\x8b\x07\ +N\x9dZv\xe9R\xfd\xa2}\xc6\xf3\xfbBf1\xa7\ +0q\x81\x98\xd3\x1d\x8e\xeag\xce\xf0\x9f2J\xf2\xdc\ +\xb9\xfc?\xfc\x01~\x95\xf3I\x9afHb)H\xc7\ +\x9c\xc2*\xdc\x9e87[\xec\x88=\x01(8\xe7{\ +\xd5\x9aj?\x91!p\xcd%}\x95\xb4n\xd5:%\ +%\x15\xd0r\xc0\xd0\xb4\xcf\x94\xdc}G\x84\xc9I\xc2\ +H\xc8\xb2\xdc\x06y\xfb\x9d.\xde\x01\x11\xf9\x04CU\ +\xa4\x0ces\x0b\xa3\x93r:g\x18\xbay\xb3\xe6\xcb\ +/\x8f}\xfe\xf9\xb1\xf1q8:a\x91\xd1\xb6\x8b\xb7\ +\xd9\x1e\xd5\xc2l\xdc6\x11\x9c\xf4\x94Q\x92\x93\xe7\xce\ +\xc1\xa4b\xfe\x97\x9af\xc8.\xddn~\xdc6,u\ +\x1f\xa1{{\xbe\x9e\xe4\xb96\x01\xc7\xebI\x07jB\ +kM\xb5\x9e\xc8\x10h9\xb0\xb6Uu\xd5tu\xf4\ +\x8d\x8d\xf1\x15<\xdc\xb1-\x09O \xd4\x1a\xa9\xdf\xc8\ +X\x1f\x98\xb4\x9a\x99[2x\xc5lA\x19_\x5c]\ +\x5c\xd5R\xd5D\xca\x10G\x1c\x9d\xc8\x90\xc8\x10a)\ +\xe0g\xd0\xbe\x00-'C\xc2\x9eo\xef\xc3\xa3L\x95\ +i\x86\x9c\xe8N\xf3\xf7>\x00C\x87\xe9^0\x0f%\ +=:\xe0v;P\x13\xf2\x94\x0c\xc18\xb4Ie\x93\ +\xb2\x02\x1e/G\xee4\x9eeH\x12\xebc\x8d{}\ +H\xaa6\xcaovt\xde\xe7\x1f\x1c-,i(\xae\ +j\xadj\xec%\x18\xe2\x8ac\x92\xe60\x84\x07\xb3\xff\ +_`\xe8Y?\xe7\x93\x19\x9a\xb3\x7f\x08b}\x16\xc3\ +\x10(\xba\x8d\x0a\xf2D$\x09Dc\xe1\x9bR\x88\x15\ +\x87\xe9\xa5U2\xc4^\x12\xeb\x03\x22\xb5a\xe3\xa6\x9d\ +\xbb\xf6\xfa\x05G\x09\xcb\x1a\x8a\xab[\xa7e(\x87+\ +\x8e\xa50\x1f\x96\xa1g\xfd\xe62\x14\x8e\xa7l\xea\xf9\ +vx=\x81!\x22\x1a\xeb\xa1=x\x0a\xaa\x0a8C\ +4/\x8f%I\x9e+\x12\x00Pp\xab\x08n\xdc\xaa\ +\xfe\x91\xa6\xc1]\xad\x05p_\xdb\xe0\xc6\x0a\x95\xc0?\ +\xc3\xf2++\xee\xd3\xb8\xb5o\xac\xd5\xd4\xd4\x22w\x1a\ +K\x16\xbcg\xe3\x14\x08\x92@\xcb\xe1\x1a\xcf\xcaZS\ +['8\x22!1\x8d\x91_R\x07\x0cU7\x132\ +\x94\x93[D0\x04g\x05\xff\xec\xf7\x82?\x99!\xd2\ +\xa7\xb0t\xe9\xf4>V\xf0)\xe0\x0c\x09=\x1c\x95\x0f\ +\xed\xd2=\x0c\xd8\xa9x\xc8\xaf/<\x8e\xe7Bc\xee\ +\xa6\xb2\x16F*e\x07\xe5\x07*\xccX\xf3\x91@Q\ +[\x05|\xdb\xd3\xb1> =D0\x89\x95\x15\xb1\x1d\ +|&\x1a\x8b4\x13\xe0?-\x1d\xdd\xd0\xe8\xa4\xe4\x0c\ +\x16\xd8r%\xd5m\xd5M'p\x86\x18\xbc\xa2\xd8\xe4\ +_\x19\x9a\xb1\xb6\xdf\x9e\xdd\x9d\x02{\xc1\xc9\xdd)\xb0\ +\xbe\xc0G\xb9\x12\xe4\x22A\x14\xcd\x91\xc6p\xa1\x02I\ +\xf3\x90\xc9\xdc\x9d\x9a\xe4@2D\x8eCJ\xc484\ +\x1d\xebC\xac;H\xc9\x10\x1e\xb6@\x86\xd5\x03a\xf8\ +8\xe4\xb2/ 4\xba\xb0\xbc\xb1\xa4\xa6\xad\xa6\x89\x90\ +!\xe6\xaf\x0c\xa1\x99\xf9\xd0\xbc\x13/\x88\x19\xab\xc0\xaf\ +'\xc0\xd5\xdf\xc3-\xc2\x13\xb0\xcf\xcf#\xf8CJ\x83\ +\x9a*\xae\xe5\xb4\x17\x80D\xcb\x81-\x07\xe7)\xc0.\ +I\xb0\x14\x88X\x1fb\xb7\xfe\xcc\x94h\xdad V\ +\xc1\xf1(G|\x87\x97\x1d1\x0e\xbd\xeb\x1f2\xc3P\ +3!C\xcc\xbc\xa2\xb8\x9492\xf4s=\x93\xe4\x09\ +Z\x8e\xf4\xfa\x80Oa\xed\xda\xe9\x13/\x80!\x88\xdb\ +\x06w\xb5;\x96\xe8\xf1F<\x00\x0a\xfbK\x82\x9e\xc6\ +\x96\x83\x80\xea\x90\xa9\x90\xf5K\xe5`\x97$am\xe3\ +\x96\x82$\x92\x04\xf7\xc3\x11\xd1X\xe4n/\xf2\xd9\xdc\ +\xd2&\xaf\xa0\x8a/\xae\x11\x95\xd4\x97\xd5v\xd4\xb5\xc2\ +\xb9\xdd\x08c\xe5\x89\xa5\x19\xfaY\x9f\xeb\xf3\x04\x86\xe0\ +\x5c\x9f7\xb1\xe5\x1b\xd7\xac\x92\x93{SOG[]\ +^]CE\x03\x18znk\x1b?\x93D\x0d\xb4\x1c\ +~\xae\xcf\xf4\x06c\x08\xdd~T4\x96\xad\xdd\xc6\xf5\ +\x9b\x9dv\xba\x06\x06\xc5\x88\xcb\x9b\xca\xeb:\xeaZ\xfa\ +H-W\x9c\x90\xc2\x92X\x0a?\xeb\xb3\xb1\x1e\xc9\x90\ +\xe4l\xac\xe8\xc1h\x8f|\xcf\xb2\xfc\xea\xa0\xb4\xb0\xf0\ +\xb3\xe1\xfe\xdd\xfe0\x08=7C\xf88\xa4L\x8eC\ +\x0fi9\xa9x9\x5c\xc5\xe1\xfe9+\x1b{k\x87\ +\xdf\x1a\xbe\xad\x11\xba\xd5=>\xb0\xa4\xa2\xb5\xbc\xae\xb3\ +\xa1\xed$!C\xfc\xe2x)\x86$'/\xfd\x1c\xcf\ +\x97{\x14C\xb3\xe7\xcby\xbd\x1ftp\xd2GU\x05\ +\xdb\x9fo\x92\x8b\x0a\xc1\xb7\x06\x8b=\xcf\xcd\x10\x1e\xa7\ +0\x1b/GD\x05\xcf\xb5\x14\xa6]\xa8\xb8o\xdb\xd2\ +v\x8b\x95\xb2+\xcb#\x8eM\x13\x97\x112\xd4J\xc8\ +\x10\x87_\x022\xd49\xd7\xda\x96\xfd\x19\x8dp\xd4\xe2\ +\xff\xf6\x19\x8d\x8f\x99\x86\xcf\x9e\xd1x\x12\xdf\xd2;\xf5\ +\xfe$?\xa4\xce0\x07\xdf\xef\xc0<\x98\x8a\x8fC\xee\ +\xaf\xc5\xe3\xc0\x12]\x8b\x9ev\x1c\x8a\xb8\x1d!\xf7\xf6\ +FMM2\xd6\x87\x08\x93#C\xe6\x08k[\x12I\ +2mm[Zi\xeb\xe8G\xc6\xa6\xa6Q\xd9\xe2\xf2\ +\xc6\x8a\xba\x8e\x06r\x1c\xe2\x08J\x12R\xd9\x9dx\xee\ +\x14\xe9\xf9\x10\xbeWt\x81sNo\x82\x13\xec9\xcf\ +9}\xf0\x95\xcc\xcf9\x15<\xe39\xa7Ot\x94\xcc\ +=\xe74\xf9\xc7,\x10\xa3\xb0\xcb\xe1\xee\x05^\x9e\xa5\ +\xde\x80#\x22\xaf\xe8\xbfR\x1b\xb6(?P\x9d\xbb\xee\ +@\xaeAH\xaf>@`\xfe\xfa\x0d\xe4\xee\x94\x05f\ +\xac\xb3\xb1>\xc4\x8c\xd5\xd6\xc2\xee-\x83\x15\x9a\xa1\xba\ +\x1eq\x81%\x95\xa0\xe5:\xea\xdb\x08\x19b\x0b\x8a\x93\ +\xd2\x16dh\xce\xf4~\xfc\xeb\x0f\xab\xb1\xbek\x9f\xbe\ +\x07\x07:?\xf3Y\xc1\xed\x99\x81\xc9K\xde\x84E\x8d\ +g\x8fH\x91\xe1Y\xc1Odh\xeeY\xc1q\xdfS\ +a\xdd\x81\x8b\x04\xb02\x94\x8b\xf2\x01\x5c\xfch\xcd\xc2\ +\xe0rWX\xa9\x8b\xa9<\xb0 \x22E\xd3+x0\ +\x0e\xad\x97\x93\xdb\xb2Z\xc1@\xc3p\xbb\x91\xd5vC\ +KK#+KC(\xe0\xb0\xb5\x9e>\x9b\x16\x1c\xa7\ +\xf8\x86}s\xab\xdf\x1a\xbc\xad\x17m\xec\x9d\x14ZR\ +\xde\x0c2TO\xca\x10WP\x0a\xbb!:\xbb\x9e\xe6\ +\xbc\xed\xab_\xde\x80\xc092i\xc7|<\xe1\xbc\xed\ +O\xff\x0b<\xb5pp\xea\xb3\x1e\x8c-\xc3\xf3\xb6'\ +\x9ft87y\xc3\xf4y\xdbmu.\x07z\x0fR\ +B\xf5\x9cL\xd6\xa5\x84\x1b\xec\xb6\x90\xdbc\xb51\xc0\ +E1H\xfe\x0dX\xf3\xa6\x22\xd6\xa3@Cl*\xca\ +\x86#\xbaY\x88w\xa0\xd9\xc3\xad\xc1\xe3`\xd3\xd1\xc3\ +-\xde\x80#3\xf0\xea\xf7\xd71\xd231\xddnn\ +\x01\x9a\xcf\xc1~\xe7.G\xe7\xbd\xee\xee\x01\x8c\x9cB\ +.\xbfLTZ_^\xd7^O\x8eC\xb9\xf9e\x94\ +\xf4\x5c\xc98\xf4\x843\xeb\xa7\xca\x9f\xfb\xcc\xfa\xc7\x9c\ +h\xff?sf\xfd\x13\x0f\xb8\x9f{f}\x17\xbb\xb6\ +;\xbd\xbb5\xf5XMbw[ZcmRc]\ +R\xfb\xb1\xe4\xce\x8a\xf8\x96\x09\x0ey\x90\xfd|\xb4\x8e\ +\xb2\xca\xea)\xf0\xdc9\x96\x9b]\xeb\x19\xda\xa2\x14\xda\ +\xac\x1c\xda\x04P\x92 \xacY\xc9\xa7QU\xc1H\x15\ +\xcf\xb8ef\x0ev\xdc\xce].\xef\xee?|\xe4\xa8\ +\xafO@h*\x95YX\xdaPV\xd3V\xdfB\xcc\ +Xs\x85e\x94\x0c\x92!<\xefCW;\x03[\xf9\ +3\xce\xfb\xf0\xc4$\x11s\xf2>\x80\x8b\ +\xcf?\x94\x96\x06\xf9\x87\x0e\xfd\xef\xe5\x1f\xea\x7f\xbe\xfc\ +C\xc7\xdaF\x82B\x93\x0a\xcb\xc1\xeb3#C\x82\xc2\ +\xaa\x8c\xec\xfc\xce.\xd8\x0bN\x9e\xf4'\x9d\xc3\xeb\xc6\ +crxm\xdfn\xb5`\x0e\xafgJ\xd7\xb5\xe0\xcd\ +39\xbc4\x9e/\x87\x17\x99\xc9k~\x0e/I\xf6\ +\xb1E~\xc2\xc7\xe4\xf0\xea\xeb\x1b\xc8[\x5c\x0e/`\ +\xc8?8\xbe\xa8\xfcXy\xed\xcc8$,\xae\xa11\ +\x0a\xbb\xba%\x0c\x91\xf1\xc0\xe4b\xfe\xb3\xe5\xc1\x93m\ +\xa6\xc2\xe7\xc8\x83\x07\xd9\xf0Z\xba&*\xeaN\xb5t\ +N@\x1e\x87[\xd2\xdd\x0d{\x1f\xe6g\xfb\ +|\xaa\x5c\x92\x92T\x80\x8b\xcf\x03(I\xfa\x08m\xaa\ +\xab?g.\xc9t\x9a\x002J\xe2\xb9$w\xb8\xe8\ +\xean\xfd\x1f\xcdT\xb8\xe8\x5c\x92\x0d\xad\xc3\xbb\xdf=\ +\x5c\xd5\xd0Y}\xac\xbb\xa9\xe3\x14\xcePIe\x13\x9b\ +_\xd1\xd3\x03Q\xc1d\x04\xbddZ\x07QK\x93\x8f\ +\xca\xc7\x0a\xe9G!\xcf)\x99\x8f\x95LxJ\x82\xcc\ +O\xba\x98\xb4\xa7d\xe2T\xd9\xe4c]%\xe3|\xac\ +\x92o\xf7\xa8|\xac\xfd\xfd\x833\xf9X\xb3f\xf3\xb1\ +\x9e[8\x1f\xeb\x85\xb1\xcf\xce\x8d~2\x08\x18yp\ +v\xf8\xe3\x01\x1c\x1f\x8d^\xf9r\xef>\x8f\xfa\xe6\xe3\ +\xf5-\xc7[\xba ]\x1a\xc2@\xdf\xf1\xc5u\xbd\xbd\ +y32D\xe64\xbe\xfc;\xd4\xfe\x07\xd4\xd3\xdb\xcd\ +\xfa5\xa7\xf1\x829\x9c\x17\xcci\x0cG\xcagS|\ +\xf6\xf7\x1f\xcdF\x8c\xc7\xe74\xde7\xecb\xeb\xea\xe0\ +\xeb\x17\xea\x1f\x1c\x1e\x12\x11\x1b\x19K\x89O\xa6\xa6d\ +\xd0\xa99\xdc\xa2\x8acu\xcd\xc7\x1b;N\xb6\xf7\x0e\ +\xe2\x0c\xd5\x1c\xeb.\xadnM\xa5f\x10\xbe\x9c\x1b\xd7\ +\xaf\xc3\xf1#CP\xb8\x8d\xaa\x1e \xc8\xdd\x01\xc9\xbc\ + \xf3\x1b\x00\x0fD\x85L\x85\x0f\xe3.\x91\x14|N\ +\xa5\xac^.\xbe\xf1\xc5\xb7\xf0\x98\xef2\xff\x8b\xdf\x83\ +p\xc9 \xaf\x08\xc8\x0b\x0eG\xc9\xc0Y3\xb0\x88\x07\ +\x8b\x17\xf3\x01\x99\xc2\xfd\xea\x023Sy\xd9L\x013\ +\xb7 WP\x22(\xac,,\xad+\xadj\xae\xaa\xef\ +\x00\x01jl\xefo\xeb\x1e\xe8\xee\xbb\x803\xd4\xd0z\ +\xa2\xaa\xa1\xa3\xbc\xb6=(<1*&,\x81\x12\xc5\ +\xe2\xa4\xe5d\xa5\xf8U\xb9g\xd1\x13\xa9\xb4\xf8\x8cL\ +@\x1c\x89tiP\x1f~9\xe7\xea\xcf\xe6\xe5\xbc\xaf\ +)\xe9\x0d\xa2g\xe23\xa0\x8bh\xf1\xd0Q4zB\ +XdlJ\x1a\xfbP\xac\xa7\x17=\xc0+\xcb\xff(\ +m\x16^Y\x01\xdeY\x01>\xf4@\x9f\x9c \x1fj\ +\x10\x93V\xc8\xe6\x8by\xc2RAQUAimq\ +%\x18o\xad\xd5\xc7\xba\xeaZ\x8e7u\x9cl\xeb\x19\ +\xe8\xea;\x7f\xfc4\x0c:\x08\x03e\x07$U7t\ +V\xd4\xb5\x17\x957\x0a\xc5\xb5\x5cA9+\xb7\x84\x97\ +S\xc1\xcd*\xcfb\x08i\x8c|Z\x8e\x00\x90\x89\x83\ +O<\x13\xa0\xf3\x7f)\x90|\xe5\x99\x1e ;\x04\x07\ +#?\x0b\xc0\x14f3\x85t\x96\x88\xc1)`pD\ +lN\x11\x8b%\xc6\xc1,\x94\x80\xcd.\xe2p\x8as\ +sK\xf9y\x15\xf9\xc2*\xa1\xb8\xba\x00B\xae\xca\x8f\ +\x95U\xb7T\xd6\xb5\xd7\x1c\xeb\x82\xf9iS\xfb\xc9\xd6\ +\xae3\x1d\xc7\x07\xbb\xfb\x87zO\x8d\xf6\x0d\x80E\x8d\ +\xb0\xce\x13\xe7Z\xba\xcf\x1ck\xeb\xabm\xea\xae\xaco\ +/\xadn)\xaah\xa8\x16v*\xfc^\xc5\xfa\xd6\x8e\ +\xd2\xfcf\x10@Aa\x05\x9f\x00^((\xff\x05c\ +\xb6\x1f\xa0+\x08T\x0a\xc4\x95\xf9\xe2\xaa\xfc\xa2*!\ +\x8eja1\x01(\x105PO^\x12\x15W\x8bJ\ +j\xc0r.*o(\xadj*\xabi\xa9\xac\xef\xc0\ +\x89i9\x0e\x9d\xdf\xd4y\xb2\xb5g\x00\x06\x1e\x10\x9d\ +\x9eS\xc3\xbdg\xc6\xfa\xcfN\x9c<\x07\xd65\xc2\x8e\ +\x9f\x1c\xee:q\xbe\xbdg\xa0\xa5\xf3dc[_}\ +s\x0f\xbc\xad\xb9\xe2\xa4\xcd\xa7;\xbc.\xf9W\x14\x82\ +a\xdeV^\xd3R^\xddL\xa2\xec\x97\x0dI?\x90\ +]\x01=S\x01\x9d\x03\xcf\xb5\xad\x95\x04*j\xdb\x00\ +\x95\x04\xc8Jx\x06T\xd5\xb5\x81\xacT7\x10\xac4\ +\xf54\xb4\x82\xc4\xf4\xb5t\x9ej\xeb\x06\xa19\xdbu\ +\xe2\x5cO\xff\x85\xe3\xa7\x86O\x9c\x19\xed\x1f\x18?9\ +x\xf1\xf4\xf9Kg.\xc0R\x00\xc2\xfa\x06\xc6{O\ +\x8f\xf6\xf4\x0fu\x02O\xc7\x07[\xbb\xcf4w\x9e:\ +\xde8b\xf3\x07[\x8f\xa9#\xe5\xc2zQa)\x8c\ +]\xc7Z\xfb@\x19\xd6\xb7\xf7\x03\xa0\xf0+\xa4{\xe0\ +X\xeb\x09\x90\x03\x12\xf0+\x97\xe0\xa1\xca\xf6~Pb\ +0\xc6\xb4t\x9en\xed\x1eh\xef9\xdb\xd1{\xae\xab\ +\xef\x02(4\x18oN\x9c\x1e\x03\x22\xfa\xcf^\x04\xb9\ +9u\xee\xf2\xe9\x0bW\xce\x5c\x98\x1c\x18\x02\xf7+\xc2\ +\x80\xab\x93\x83\x13}\x03c\xc0\x1ep\x08L\x82\xa0\x9d\ +\xed\x9d0;\x1bc*\x88\x17q\x0b\xca*\xeb\x8aJ\ ++\xa1\xb2\xbd\xef|\x7fM3\xa0\xfd\xc49\xa0\xfdW\ +\xcc\xf6@\xef`G\xef`\xa74N\x9c{\xe8%\x5c\ +:q\x0e\x04\x05\xba\xb1\xbb\xffB\xcf\xc9!\xe8\xea\xde\ +\xd3#}\xb86\x1b?yv\xe2\xd49Bh\xce_\ +\x06\xb9\x19\x18\x9a<;498258\x02>r\ +\x84A\x15\x5c8\x0d\xd4\x0d^$\xa8\x1a\x87\xb7\x0d\x9d\ +\xba\xb6\xe3\x0b\xb7\xcd\x07=Mv8\xd2\xcbk\x84\xcd\ +\x1d\x0d\x83\xe3\x1d\x97n\x8f\x14\x94\x8f\x8aJ{\xceN\ +\xf4\xc2\x1f\xf8\x15x\x0f\x8c\xe08=\x17'N\x8f\x9e\ +\x90\xaa$^\x8e\x82\x0c\x00@\x18@\x8f\xc10\x03\xac\ +\x9c:w\xe94\xc1\x0aI\xcc\xc0\xf0\xe4\xd9\xe1\xa9A\ +\xc0\xc8U\xc0\xb9QX\xf5@\x18p\x05\xb5\x00\xb8\x83\ +\xb8\xf52\xbcg\xf4\xf2\xd8\x1e\x17\xe4\xea\xfa\xe3\xddW\ +\xb0\x8f\xe4\xe4\xbe\xd2\xd4\xfa/C\xe3o\x14\x94F\xab\ +\x1a\xaf\xe4\x15\xf6\x0fO\x81\xa2\xfc\x85\x83\xe8\xdf\xa7\x04\ +(.\x1c\xd0\xb1$$\x94\x9c%)!\xc4\x85\xa4d\ +p\xf4\xda\xf91\xc0u\xc0\xb91\x98\x86\xa2\xff\x06\x90\ + \xf6Vm\xad\xde8\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x02r\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +[\xa5\xa2\x95\x0e\x16Qq\xc8P\x9d,\x88\x8a8j\ +\x15\x8aP!\xd4\x0a\xad:\x98\x5c\xfa\x05M\x1a\x92\x14\ +\x17G\xc1\xb5\xe0\xe0\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10\xfc\x00qrtRt\x91\x12\xff\x97\x14Z\xc4x\ +p\xdc\x8fw\xf7\x1ew\xef\x00\x7f\xbd\xccT\xb3c\x1c\ +P5\xcbH%\xe2B&\xbb*\x04_\x11B?z\ +\x10\xc6\xa0\xc4L}N\x14\x93\xf0\x1c_\xf7\xf0\xf1\xf5\ +.\xc6\xb3\xbc\xcf\xfd9z\x95\x9c\xc9\x00\x9f@<\xcb\ +t\xc3\x22\xde \x9e\xde\xb4t\xce\xfb\xc4\x11V\x94\x14\ +\xe2s\xe21\x83.H\xfc\xc8u\xd9\xe57\xce\x05\x87\ +\xfd<3b\xa4S\xf3\xc4\x11b\xa1\xd0\xc6r\x1b\xb3\ +\xa2\xa1\x12O\x11G\x15U\xa3|\x7f\xc6e\x85\xf3\x16\ +g\xb5\x5ce\xcd{\xf2\x17\x86r\xda\xca2\xd7i\x0e\ +#\x81E,A\x84\x00\x19U\x94P\x86\x85\x18\xad\x1a\ +)&R\xb4\x1f\xf7\xf0\x0f9~\x91\x5c2\xb9J`\ +\xe4X@\x05*$\xc7\x0f\xfe\x07\xbf\xbb5\xf3\x93\x13\ +nR(\x0et\xbe\xd8\xf6\xc7\x08\x10\xdc\x05\x1a5\xdb\ +\xfe>\xb6\xed\xc6\x09\x10x\x06\xae\xb4\x96\xbfR\x07f\ +>I\xaf\xb5\xb4\xe8\x11\x10\xde\x06.\xae[\x9a\xbc\x07\ +\x5c\xee\x00\x03O\xbadH\x8e\x14\xa0\xe9\xcf\xe7\x81\xf7\ +3\xfa\xa6,\xd0w\x0bt\xaf\xb9\xbd5\xf7q\xfa\x00\ +\xa4\xa9\xab\xe4\x0dpp\x08\x8c\x16({\xdd\xe3\xdd]\ +\xed\xbd\xfd{\xa6\xd9\xdf\x0f>\xcer\x92S5%=\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x0c\x16\x0c%\x0dn\xdbCH\x00\x00\x00oID\ +ATh\xde\xed\xd8\xb1\x0d\x830\x14E\xd1\xe7(+\ +y\x85Dd`\xe4\x1d<\x14\x14t\x08D\x82B\x11\ +\xe5\x9c\xfe\x15\xf7\xcb\x95\x13\x00\x80\xffU>\x1d\xd4Z\ +[\x92\xc7\xcevJ\xd2z\xef\xafoo\xf7\xdcOD\ +?\x0f\x0e2\x5c\xb4\xddt\xfb\xf5'$@\x80\x00\x01\ +\x02\x04\x08\x10 @\x80\x00\x01\x02\x04\x08x_\xcb\xf2\ +\x05\xb2e*\xa5\x8c\x17m\x01\x00X\x99\x01\xaaH\x14\ +2\x97\x06Ns\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x04\xf9\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a'18\xf7~\x11\x00\x00\x02\xf6ID\ +ATh\xde\xed\x9a\xcfK\x1bA\x14\xc7?\xb33\xab\ +1h\x83\x82\x0a\x15\x8b^\xa2\x82\xd0\xe0\xb5\x87\xdc\xec\ +!\x08B@-\x1ed\xf1_\xa8P\xe8A\xfc\x03\x8a\ +\x17\x0f\x9e\x8c\x1e\xccE\xf0G\x8f\xc5\x92\xe25\x97B\ +Dl\x94\x5cz\xca\xc5H\xadJ~\xed\xf4\x12\xa3\xa1\ +B\xbbV\xe3n\xcd\x83\x85ef\x19\xbe\x9fy\xf3f\ +\xde<\x16\x00\ +\x13F\xa5m\xd4\x83\xcb\xff5\xc0\x15@\x9b\x07\x01\x9e\ +\xdd\x04\xf0\xacy\x1e\xe0*\x88\x1b\x1eh\x004\x00\x9e\ +R\x10\x1b\x86A4\x1a\xe5\xf0\xf0\x90T*\xf5\xf8\x00\ +\x0e\xf3\x10\xc6\xc7\xc7\x19\x1a\x1abpp\x90\x8e\x8e\x0e\ +\xf6\xf6\xf6\x1em's\xbc\x84\x22\x91\x08\xc3\xc3\xc3U\ +\x98p8\xcc\xd8\xd8\x18\x86ax\x03\xe0\xe0\xe0\x80|\ +>_\xd3\x16\x0a\x85\x98\x9e\x9e\xc6\xe7\xf3=\x0e\x80\xd6\ +\xfa\xaf\x9ft:\xcd\xf2\xf22\xb9\x5c\xaef\xa0\xfe\xfe\ +~,\xcb\x22\x10\x088\x1a\xef_\x9e;y@J\xc9\ +\xc9\xc9\x09KKKd2\x99\x9a\xbe\xce\xceNfg\ +g\xe9\xe9\xe9q\xf76j\x18\x06\xe5r\x99X,F\ +2\x99\xac\xe9kmmeff\x86\x81\x81\x01w\x9f\ +\x03B\x08\x94R\xec\xec\xec\xb0\xb9\xb9\x89m\xdb\xd5>\ +\xd34\x99\x9c\x9c$\x1c\x0e\xbb\xff 3M\x13)\xe5\ +m\xb7&\x0a\x85\x82\xbb\xb3Q)%\x91H\x84\x91\x91\ +\x91\x9a\xf6b\xb1H<\x1e\xe7\xe8\xe8\x08\xa5\xd4\xc3\x03\ +\xdc\xc5\xfc~?\x13\x13\x13\xf4\xf5\xf5\xd5\x96\x0d\xce\xce\ +X[[#\x9b\xcd>\xb8\xf8;\x03tww35\ +5E{{{M{6\x9beuu\x95\xf3\xf3\xf3\ +[\x97\x95+\x00\x82\xc1 \xd1h\x94\xe6\xe6\xe6\x9a\xf6\ +\xe3\xe3c\xd6\xd7\xd7\xb1m\xbb\xae\xa7\xb2\xe3\x18\x08\x06\ +\x83\xbf\x89O&\x93loo#\xa5D\x08Q\xd7\xbc\ +\xc8\xb1\x07\xb6\xb6\xb6PJ\x11\x0a\x85\xd0Z\xb3\xbb\xbb\ +K\x22\x91\xc04Mod\xa3J)666\x90R\ +\xb2\xbf\xbfO*\x95z4\xf1w\x0eb\xa5\x14\xf1x\ +\x1c)\xe5\x1f\xc5/,,8\x1a{~~\xbe>\xdb\ +hSSS\xa3\xacr\x9b9\xbe\x1d\xfe\x17w\xe2\x87\ +\xb4\xb9\xb99G\xdf\xb7\xb4\xb4\xb8\x0b\xc0\xa9\xa0FY\ +\xa5Q\xd8j\x00<\xc5\x18(\x95Ju\xcb\xdf\xef\xcb\ +\xca\xe5\xf2\xb5\x07J\xa5\x92\xa7\x02YkM\xb1X\xbc\ +\x06\xb0m\x9bB\xa1P\xa5r\xfb\xcc\xe7\xf3\xf9\xea\x84\ +\xabJ\x89\xe4\xa7m\xdb\xad\xf5\xa8\x22\xdc\xa3\xfd\xa8z\ +@k\xbd\xe7\xb5\xe0\xd5Z\x7f\xa9z\xe0\xe2\xe2\xe2\xbd\ +\xdf\xef\x7f\xa5\xb5\x0exA\xbc\x10\x22wyy\xf9\x16\ +@\x02d2\x99lWW\xd7G\x9f\xcf\xf7B\x08\xf1\ +\x1chv\xa9\xf63\xad\xf5\xa7\xd3\xd3\xd37\x89D\x22\ +\x0d7\xfeV\xa9\xbc\xab\x8ax\xb7\x9e\x0f6\x90\x07J\ +\x80\x06\xf8\x05\x9bhv:\x00r\xaa\xc2\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00\x02\xfe\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0e\x1a\x08\x0a\x13\x16{\x00\x00\x00\xfbID\ +ATh\xde\xed\x98=\x0a\xc2@\x14\x84g\x8d\xa8\x85\ +\x82 \xa4\xf3L\xda$7\x10\x8f\x90\xc2\x80\x04\xd2\xa4\ +\xf0\x22I\xa3g\xb2R\xd0&\x8d\x0a\xe1Y\x88`D\ +!\xee\x82\xd9\xe8L\x99\xfda>\xde\xbc\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x108\xd1,f\x81\x00\x00\x00\xfbID\ +ATh\xde\xed\x97=\x0e\x82@\x14\x84g!\xc1\xca\ +\xc4`MAa\x8b\xc7\xf2\x04\x16\xfe\xb4\xc6\xc2\x13x\ +\x03\x13O\xa3\x851\xb1\xf0\x0a&\x1e`m\xa8Ea\ +\xf0-2_\xcd\x83\xfd``\x07@\x08!D\x9fq\ +MO0\xd9\x9dg\x0eX\x01\x18\x01\x18~8\xf6\x04\ +\xf0\xf0\xc0\xe66/\xf6M\xae\x1f\x11\xee\xc0\x1a@\xf6\ +\xc5\xe2Q\x1e\x9b\x95\xb30\x15\x000n \x9f\x86 \ +\x90\xd4\x1d\xf4\xc0 \x04\x81\xd8h\x96&`\x8a\x04$\ + \x01\x09\x04\xda\x85jv\x1c6\x95\x9d)\x22w\x1c\ +6\x95\x9d)j\xa3\xe3\xb4\x10\x93\xb4\x8e@\x12\x8a\xc0\ +\xbb\xce\x14\xb5\xd9S\x88\xc4\xfa\x8cJ\xc0\xfa\x9f\xf8~\ +\xda\xfa_.,\x9f.\x9c\x22$\x81\xbf\x14p\xb8t\ +[\xc0\xe3\xd8\xf1'\xe0\x0f\x9d\x16\xc8\x8b\xe5\x95\x19#\ +\x9b\x97\x98\x18#\x1b\x01b\x8cL\x04\x981\xb2\xdb\x07\ +H1\xb2\x13 \xc5\xc8L\x80\x15#\xdb*A\x88\x91\ +\xad\x00yS\x13\xa2\x8f\xbc\x00\xc0\x89.\xd9\xa2\x00\x0a\ +\xd9\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x03\x83\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x85iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +[\xa5\xa5V\x1c\xec \x22\x98\xa1:Y\x10\x15\x11\x5c\ +\xb4\x0aE\xa8\x10j\x85V\x1dL.\xfd\x10\x9a4$\ +).\x8e\x82k\xc1\xc1\x8f\xc5\xaa\x83\x8b\xb3\xae\x0e\xae\ +\x82 \xf8\x01\xe2\xe4\xe8\xa4\xe8\x22%\xfe/)\xb4\x88\ +\xf1\xe0\xb8\x1f\xef\xee=\xee\xde\x01\xfez\x99\xa9f\xc7\ +(\xa0j\x96\x91N&\x84lnE\x08\xbe\xa2\x0b!\ +\x841\x88i\x89\x99\xfa\xac(\xa6\xe09\xbe\xee\xe1\xe3\ +\xeb]\x9cgy\x9f\xfbst+y\x93\x01>\x81x\ +\x86\xe9\x86E\xbcN<\xb9i\xe9\x9c\xf7\x89\xa3\xac$\ +)\xc4\xe7\xc4#\x06]\x90\xf8\x91\xeb\xb2\xcbo\x9c\x8b\ +\x0e\xfbyf\xd4\xc8\xa4\xe7\x88\xa3\xc4B\xb1\x8d\xe56\ +f%C%\x9e \x8e)\xaaF\xf9\xfe\xac\xcb\x0a\xe7\ +-\xcej\xb9\xca\x9a\xf7\xe4/\x8c\xe4\xb5\xe5%\xae\xd3\ +\x1c@\x12\x0bX\x84\x08\x012\xaa\xd8@\x19\x16\xe2\xb4\ +j\xa4\x98H\xd3~\xc2\xc3\xdf\xef\xf8Er\xc9\xe4\xda\ +\x00#\xc7<*P!9~\xf0?\xf8\xdd\xadY\x18\ +\x1fs\x93\x22\x09\xa0\xf3\xc5\xb6?\x86\x80\xe0.\xd0\xa8\ +\xd9\xf6\xf7\xb1m7N\x80\xc03p\xa5\xb5\xfc\x95:\ +0\xf5Iz\xad\xa5\xc5\x8e\x80\x9em\xe0\xe2\xba\xa5\xc9\ +{\xc0\xe5\x0e\xd0\xf7\xa4K\x86\xe4H\x01\x9a\xfeB\x01\ +x?\xa3o\xca\x01\xbd\xb7@x\xd5\xed\xad\xb9\x8f\xd3\ +\x07 C]\xa5n\x80\x83C`\xb8H\xd9k\x1e\xef\ +\x0e\xb5\xf7\xf6\xef\x99f\x7f?\x93(r\xb4\xe2\xfc\x88\ +\xbb\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\ +\xbd\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\ +\x00\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\ +\x07\xe4\x0b\x08\x0a!\x0b\xe5\xbf\xa3w\x00\x00\x01\x7fI\ +DATx\xda\xed\x981N\xc40\x10E\xff $\ +\xba\xd4H\x5c#\x05\xad\x9dT\xa9a\x8f\x10(\x22q\ +\x9e\xd0q\x11\x07\x89\x02\x0a\xae\x81\xb4G\xc8j%\x9b\ +\x9a\x00R\xb2\x8c\xed\x88\xfc_\xa6Xi\xdez\x9eg\ +\x0c0\x0c\xc30\x0c\xb3\xd5\xc8\xf4\x83s.\xfc\xe7\x82\ +\xad\xb5_j>\xdb\xfa\x09 \x00\x02 \x00\x02 \x80\ +-\xe7\xfc\xaf\xf7\xe8\xda\xb2t\x8ea\x0b\x10\x00\x1d\xb0\ +\xae\x1eM\xed\x18\xb6\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\ +\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\xf0=\xe0\xa4\xfd\xbe\ +\x07\xd0\xa6z/\x98\xa4\xb7\xd6\xdeg=\x01EQt\ +\x22\xf2\x92\xfa\x9f\x13\x91\xd7q\x1c\x1f\xb2\xb7@Y\x96\ +G\x00;\x00\x1f\x09\xeb\xdf{\xefo\x9b\xa69\xac\xc2\ +\x01\xc6\x98\xbd\x88\xdc\x008$(\xfe\xe8\xbd\xdfUU\ +\xa5\x02\x5cM\x82\xc6\x987\x11\xb9K\x00\xa0\xab\xebZ\ +\xad\xe5To\x01c\xcc\x13\x80\xc7\x88\xc5\xf7\xd6Z\xd5\ +\xdfW\xbf\x06cIQKz\xd1\x01D\x92\xa2\x9a\xf4\ +\xbe\x81\x8duV\x87a\xb8\x0e!<\x03\xb8P\x90^\ +\xa5\xd9\xf7I&AE)v\xb1\x8a\x8f>\x0a+H\ +Q]z\xc9w\x81S\xa5\x18Kz\xc9\x1c0\xf1\xc1\ +e\x08\xe1\x1d\xc0\xd5\x5c\xe9\x85\x10J\xada'\xfb6\ +\xb8pRT\x9d\xf4V\xb3\x0e/\x90bT\xe9e}\ +\x0f\x98!\xc5\xe8\xd2\xcb\xfe \xf2\x9b\x14SI/\x8b\ +\x04gH1\x99\xf4\xb2\x9f\x80\x1f\xa4\x98Tz\xab\x8a\ +s\xaeu\xce\xb5`\x18\x86a\x18\x86\xc9\x90O\x10<\ +\x98\x1fV\x07_\x09\x00\x00\x00\x00IEND\xaeB\ +`\x82\ +\x00\x00\x08\x89\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x80\x00\x00\x00\x80\x08\x04\x00\x00\x00i7\xa9@\ +\x00\x00\x00\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\ +\x00\x09pHYs\x00\x00\x00H\x00\x00\x00H\x00F\ +\xc9k>\x00\x00\x00\x09vpAg\x00\x00\x00\x80\x00\ +\x00\x00\x80\x000\xe11\x9a\x00\x00\x07FIDAT\ +x\xda\xed]1\x96\xdb6\x10\xfdqR\xb8\x13\xd3\xe5\ +\xa9\x11s\x82\x95\x1f\x9atR\x99n\xe5\x13\x88\xe9\xd2\ +Y9A\x90\x13\x98\xee\xd2Y\xdb\xa5\x94O\x10\xbaK\ +\x0a\xbchO`\xa9\xe2s\x15\xaaK\xaa\xa4X\xedZ\ +\x18\x80$Hb\x00\xad\xbc\xdf\x85w(\x12\x1a\xfc\xf9\ +$\x80\x01@\x01Ox\xc2g\x8d/b; &H\ +\x01T\xea6\xb6'q\xaa\xbf\x14\xff\x1d\xff\xbd\x8e\xe3\ +AT\x05\x88\x09v'\xe6\x5c\xbd\x0f\xef\xc3\xb3\x98\x04\ +@jV\x1e\xc3\x85/\xe3\xd5^L\xb0\xd6\x0e|3\ +\xde\x95\xc1\x9f\x041\x15 \x1d\x8e\xb0#\x9a\x02\xc4\x15\ +~5\x0e&\xe15\x10O\x01\xb9\xf5\xa8\x0c\xedF$\ +\x05\x88YMU\x931\xca\xa0mA\xa4fP\xfc\x8e\ +y\xcdG\x15Ru\x08\xe7I\x94[@\xccj\xab\x0f\ +$X\x85\xf4%\x8a\x02\x1a\xe2\x0f\x04\xd6@\x04\x05\x18\ +\xf1\xafPhv\x12\xf2Q\x18A\x01\xe2/L\xb5\x03\ +\x12\x05\xa1\x00H\xd5>\x8c7\xc1[\x01\xb1\xc4\x8f\xda\ +\x81\x9dzY\xee\xc7)!%)\xdf\x85\xf1'\xfc-\ + \xad6=\x9a\x89\xc9E\x12 \x96H\xb5\x03;u\ +\x03\x00jO\xc6\x05\xc1\xbaD\xa1\x15 km\xfaI\ +&f\x17G@]\xfc\x01@\xed\x8d\xce\xb1l-\xf0\ +\xb1\x11\xd0\x10\xff;\xab\xd2\xecy\x08\x0d\x04$@\xbc\ +\x22\xf1\xdf~\x8a?\x00\xa8C\x0c\x0d\x04\xeb\x07\x88\x11\ +vH\xb4CF\x0a\xccr\xceB17\x87\xe1\x14\xb0\ +\x22U+\xcc\x0c\xa0E\x039\x98\x11H\x01.\xf1?\ +\x9e\xf9\x81\xdc(\x99~\xa3\xf8F(\x058\xc4\xff\x08\ +\xd9b{F\x90\xae\xb0\x18\xe17<\xd7\x0eeeM\ +_\xbf\xbc\x1dg\x1aY\xc9\xb8*\xff\xe4\xf3-\x8c\x02\ +\xdc\xe3\x0fX4 F|\xae\x05P\x80\x98`M\xe2\ +\xbf(?\xd6\x9f_\xde\x8e\xe7\xdas\xe09\xfe\xe1K\ +\x93\x85P\x80$\xf1_\xb7\xce\x03Jb\xaf\xf84\xc0\ +\xae\x00c\xfa\x03X\x94-\xf9\x9er\x1fN\x03\xfc\x0a\ +\x90\xc4^;\xa5:\xe8U+\xae\xe11\xb3\x02\xfa\xc4\ +\x1f\xb0j\x80)E\xc2\xad\x00Il\xb7\xf8\x03@F\ +m\x1e\x0d\xb0*\xa0o\xfc\x01\xa0<\x84I\x93\xf1*\ +\x80V?\xef\x94\xea\x94\xc4\xce\xc4\xd5\xa3\x22\xc0\x92\xfe\ +\x96]\xae\xb7\xa4\xc9\xf2GE\x80Q\xdd\xbc\xf3t\xc7\ +\x8a?E\xc2F\x80%\xfey\xd72B\xa4H\xf8\x14\ +@]\xed\x1e\x7f\x00\xc8\xb95\xc0D\x80\x8f\xf8\x03!\ +R$\x5c\x0a\x90\xd4\xed\xde\xd3\x9dT\x03S\xb1<{\ +\x02\xc4\x92\xc4\x7f\xd7?n\xea`L\x97\xcb\xb3'\xc0\ +\x1c\xd1\x0f\x99\xeeV7\xdajB \xf5\xa9\x01\x06\x02\ +\x9a\xa6?zBR\xdb\xdf\xf0\x98C\x01\xb2\xc5\xee\x0c\ +S\x03\xfeV\x91x'\x80!\xfe\x8094\xf2\x96\x22\ +\xf1\xaf\x00\xd9b\xf7\x82zo\xac\x22Y\xf9q\xd7\xf3\ +\xbc\x80X\x92\xfe\xfbN}\xeb\xa9\xe4\x19\xa1\xc0\xd3J\ +\x22\xaf\x0a\x10#\xa3\xb9\xcb|\x95m\xd1@\xde\xab \ +N\x02:\xa6\xbf\xbb\x97\xae\xc3K\x8a\xc4cB\xa4\xcb\ +\xf4G\x1f\x94\x1f9R$>\x15\xc0\x1b\x7f\x80e%\ +\x917\x02\xc4\x88\xb7\xcb\x0a\xf0\xa4H\xfc)\x80?\xfe\ +\x80I\xeab\xe8\xf0\xd8\xd33\x80\xfb\xfe\xbfGy\x18\ +\x83\x0c\xb4\xd2rPG\xcbS?@\xbc%\x0d\xdeZ\ +\xfd\xe0\xbf\xfa\x80\xcbJ\x031A\x869\xb6\xd8\xb8h\ +\xd0\x8b\x02\x86\xa4\xbf\xbb\xa2\xfcw\xfc\xbcI\x03\xe2\x0a\ +\x7f\xe0{\xa4\xf8\x0e\x99\xcb\xfe\x13?\xcf\x00Il\xf7\ +\xe9\x8f>0\xd3d\xa7\xc3\xe3\xcd\x89>\xf2\xf6\xc2<\ +\x10 &F\x7fO\xf6(\xc6\x19\xeaP?\xde8\xee\ +C\xbdG\xd2^\x9a\x0f\x05Pwx\xe3\x0f@\xbd\xa9\ +M\x91\xa4]\xcb\x1aL@\xe8\xf8\xd7|G\xef\xef\x1c\ +\xae\x80\x9c\xd8\xec\xf1\x07\xaci\xb2WQ\x08\x103,\ +\xb4\x03U\xb0\x1d?\x92\xda\xfdR$C\x15@\xdd\xe8\ +\x9f\xfe\xee\x08ucM\x91$\xda\xb1\x8a\x99\x00_\xd3\ +\x1f=!\x89\xbd\x12#2Z\xdc2\x13\x10/\xfe\x80\ +\xaf4\xd9\x00\x02\x22\xc7\x1f\xb0\xb5\x05i@\x02\xe2\xc6\ +\x1f\x00\xd4{l\xc8\xa1,\x18\x01\xe2:z\xfc\x01\x0c\ +os\xfa+\x80Vw\x15:\xfe\x805Er\x8am\ +{\x09_\xf5\xfbb\xa6\xe9\x8f\xbao\x1bAb\x8a\x0a\ +\x05\x0ac\x95\xa9l\x90}\xc5F\x00\x7f\xfaK\xab~\ +ql\xde\x16\x80\xa8P\x9c\x12\xa1\xf6\x22\x1fr#\xf4\ +%`\xaaY\xac\xf1\xc7J\xfb\xb6\x04\x0b,\x00\xb1;\ +\x12\xb1\x87D\xe62\xee\xf3K\xc0N\xbb\x05$c\xf5\ +i\x0a\xec\x1e)2dG\x22v$ \x1d\xd0\xf7!\ +\x98\x9f\x92\xc1\xbb\xa9\xa5\x05)\xb2\xda\xea\xef\xd8\x08P\ +o\x1e(\xa8\xc8p\xc8?\x8a\xdeW:\x100 )\ +*&\x98\xa3B\xc1\xdd\xfc\x9d<\x04\xbb\xc2\xe1\xddT\ +\xd1_\xa6\xe6H\xc25\xe6\x98w\xa6\xe1r\x088\xd2\ +0\xc2\x02s\xcc]{\xfc\xca\xa1v\x8f\x8a\x80\x07\x22\ +&\x98\xbb\x10q\xb1\x04<\x10qu$\x22\xb1~\x5c\ +\xa9\xaf\x19\x08\x10WH\xb0\x0b\xf5\x86\x8fND,\xc8\ +a\xa9~\xf1L\x80\xb8\xc2\xe6(\xbb\x0d\xb2\x18\x83\x9f\ +\x16\xfffGE\x00@\xae~r\xb9\xc6\x99\x001A\ +\xa6\xcd\x00o\xd5\x8b\xd8\x15\xae\xf5\xf5\xca\xfd\x05\x9dN\ +\x04\x88kd\x96\xee\x0e\xfb\xd6\xf6\x10h\x19\x0b\x88\x09\ +2d5O\xdb).\x80\x80\x06\x05\x88\xd9\xddp\xa3\ +\x16g|\x13\x0c&@,\x9d\x12\x8c\xc1\xde\xf7\xc4\x07\ +\xeb`H\xbc\xc5\xda\xa9\xb7\x95\xc5v\x9f\x85\x00\xb1t\ +\xae\xd8\x19\x13 fn\xab\x87l\x0aH\x9d\xbf%\xe5\ +\xd8\xc9\xe7\xa1\xf2\xd7\xe2\x03\x0a\x14\xe2\xefv\xff\x86\xce\ +\x0df\xb1+k\xa9\xfe\xa7\xeeZ\x82\xa2m\xca\xd4F\ +\xc0\xe6q\x13\xa0%\xe8Z\xa7\xcb,\x04\xa8\xdb\x93j\ +m\x915f\xde\x13q\x1d\xbb\xbe\xa6O\x9a\xd5\xb2\xb3\ +\xc0z\x0b\xa8\x1b\xa4\x90\x90\x98\xaa\x17(H\x94+r\ +\xf2\x22v}\x0d\xe8\x1e\xb6h\xa0\xb5+l\xac\x00\x94\ +\x0f\xc3\x8d\xfb\xaf\x0b\xfa\x16\xd8v\x18;\x0b\x1a\xfb+\ +\xcfZ\x0b\xd3\xab_!'\xb7Drn\x1a0\xa6\xcd\ +\x1b\xd3\xf6m\xad\x00\xbd4W\x07\xe3!yf\x04\xa0\ +\xd3\xcb\x17\x1a\x09\xb0\xaf\x000(Xp\xbe\xe7\xa7\x0f\ +,S\xa6\xeb\xbas\x9b\x15 \x89}\xbf\x02\x80\x16\xb7\ +\x88]\xe5V\xcfk7]7\x10P\xbf\x02D\xbd#\ +O\xda4v})\xd4\xdeu%a\x93\x02\xe8%\xa7\ ++@\xd6\xda'E\xec\x0a[`\xae(\xb6\xf6Xj\ +\x09hY\x01$O\x16\x1f\xe41~\x1b\xa4\x0d\xae\x1b\ +\xefk\xfb\x01\xc6\xfb\xbf\x8d\x1c\xab\xb8\xc6\x14\x156\xe7\ +\x9a\x13\xb0\xec,\xb0\xbc\x9b\xb0.!\xc2\xb4M10\ +\x05\x0e\xdb8\xebn\x01I\xec(+\x80\x86\xc2\xb2\xa2\ +\xf8g'\x02\x8c\x15`qW\x00\x0c\x81$\xb614\ +\xb2+ o)\xe6\xd1\xa0fEq3\x01aW\x80\ +\xb1C\x12\x9b\xbc\x97\xee\x99\xc3%\x12\x8f\x18\x96\x15\xc5\ +Z}\x8cV\x80o\x03|,4\x0f\x8f\x8dms\xe3\ +\x0d\xcd\xa8\x84\xff\xf9+\xbfh\xfe\xf9\x06\xa2\x80\xcb\x8a\ +\xff\xc3\x1e\xb2\xd4\x18\xbeM\xef\xa7O\xe9\xdc\xa0l\xb2\ +\xc9\xa6\xb4f\xa4gpn=$^\xde\xfd\xa1)\xc0\ +\x88\xff%\xe3\xd8-\xd6[\x01\x19\xdb\xab\x90\x04\xdc\xfd\ +\xa7\x13\x90\xc6\xf6*\x12\x11\x09\x9c\x00\x00\x00?tE\ +Xtcomment\x00Re tri\ +angle cycle from\ + Icon Gallery ht\ +tp://icongal.com\ +/\x7fN\xf64\x00\x00\x00%tEXtdat\ +e:create\x002011-08\ +-21T13:53:48-06:\ +00\xe0\x96Ay\x00\x00\x00%tEXtda\ +te:modify\x002011-0\ +8-21T13:53:48-06\ +:00\x91\xcb\xf9\xc5\x00\x00\x00\x19tEXtS\ +oftware\x00Adobe Im\ +ageReadyq\xc9e<\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +\x00\x00\x03\x80\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x0d\x13\x82\xfc\xf3\xdd\x00\x00\x01}ID\ +ATh\xde\xed\x99;n\x83@\x10\x86\x7f/)\x90\ +\xa0D@\x97\x14\x9c\x82.%\x12g\xb0\x9c\xc29T\ +\x22\xc5\xca!\x10\x87\x09\xa9y\x88\x12\x04\x8d\x9d\x14\x91\ +\xa2\xbc\xc0\xcb.k\x86h\xa7B\x1a\x1e\xf3i\xbeY\ +V\x00\xac<6C\x89,\xcbn\x01\x1c\x00\x5c\xcf\xfd\ +P\xdb\xb6\x1f}\xdf\xbf\x9f\xe3^l$\xf7\xa4\xa2x\ +\x00`\x8c\xed\x8b\xa2xP\x0dp\xa3\xb2\xf5\x8c\xb1}\ +\x9e\xe7\xcf*\x01\x94\x87a\x18[Y\x08\xb6\xf4\x10\xca\ +B0\x0a+\x89\x0c\x04\x09\x00\x19\x082\x00\xa2\x10\xa4\ +\x00D \xc8\x01L\x85 \x090\x05b\x11\x80\xd3\xe9\ +4\x05\xe2@\x0e\xa0\xeb\xba)\x10\xbb1\x88\xab%\x00\ +\x8e\xc7#\x9a\xa6A]\xd7(\xcb\x92\xe7\x92\x1d\x80;\ +r3\xe08\x0e<\xcf[\xef^h\x0e\x08)\x85\x92\ +$A\xd7u\x7f\xe6L\xd3D\x1c\xc7\x00\x804M\xd1\ +\xb6\xed\xafs,\xcbB\x14Ep\x1c\x07\x00xu\x9a\ +\x0f`\xa8x\x00\xe8\xfb\xfe\xf38\x8a\x22\xaeN\x88@\ +\x90z\x0f\x88\xe8t\x91U\xe8\x9cB2\x9d\xb8\x08\x00\ +\x8fB\xa2\x10d\xb7\x12\xbc:Iu\xc04\xcdo\xc3\ +\xfa3'\xa2\xd0\xd4N\x8c}Vy\xa3\xd2\x8d\xaa\xaa\ +\x10\x86\xe1fU\x0a}\x0d\xd7u\xd5(4\xa4\x06o\ +\x9cS\x88'V\xa1\x10\x00\x04A\xb0^\x85\x94\xadB\ +Z!\xad\x90VH+\xa4\x15\xd2\x0a-\x1d\x1a@\x03\ +h\x00\x0d\xa0\x01\x94\x01\xbc\x12\xaa\xf3E\x04`\x0b \ +#P|\x86\x8f\xff\x03\xff3\xde\x01\x9e\xed\xae\xf4\xb6\ +K\x15\x1c\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x04\xc5\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x08->\xea\x1a3\x00\x00\x02\xc2ID\ +ATh\xde\xed\x99?h\x13Q\x1c\xc7\xbf\xbf\xe7\xd5\ +B+\x0e\x8a\xc1\x94\x82\x83\xe2 \x94\x0e\x05\x05\xa7\xba\ +\x09N\xc5\x8c\x8e\x8e\xee\xae\x05mQp(\xe8\xe0`\ +qqLu\xb18\x08I\x10#\xb6*X,\x22\xd5\ +\x96*1I\x93\xc6j\x9a4w\xb9w\xef\xe7\x10\x0b\ +\x05\xc9K\xeerx'\xbd\xef\x9a\xf7\x92\xef\xe7\xfd\xfe\ +\xe5\xde\x01\x91\x22\xedoQ\xa7\x05\xe3\x93iC\xc6b\ +\x13L\x94`\xc6\x88 \x1ab`\x80\x80>?\x8d0\ +`\x13\xb0\xa3\x98\xf3D\xf8@\xccI\xa3Tz\x92\x99\ +\xbc =\x03\x9c\xbf\xf7\xf1\x84\x104\x07\xc2X \xc7\ +\xcbx\xa7\x14_~u\xed\xcc\xd7vK\x84\xee\xe4\x03\ +5\xdf:\xde1!hn|2m\xb8\x06\x90\xf1\xf8\ +D\xa0\xe6\xf7@\xc8Xl\xc25\x00+\x95\x08K\xa1\ +2Q\xc2=\x00c$4\x00\x1a/\xba\xdc\x8a{\xf9\ +\xb1\xe4\x95\x93\xda\xcf\x13\x8fV]\x7f\xa7 \x1cw\x1f\ +\x01\xc2`h\x22\x00\x1cr\x0d@\xa0\xbe\xb0\x00\xe8\xbc\ +\x88\xff}\x12G\x00\x11@\x04\x10\x01\x04+\xa3\x97\xcd\ +W\xcf\x1e\xc3\xc5\xd3\x87{\x9a\xd4\xcfV~avq\ +3\x98\x08\xcc.\x96\x91]\xafy\xde\xbf\xf0\xad\x8e\x87\ +o6\x83K!\x06p7\xbb\x81\xe5b\xc3\xf5\xdeO\ +%\x0b3/7\xa08\xe0\x1a\x90\x0c\xdc\xca\x14\xb1\xfa\ +\xc3\xeaz\xcf\xfaV\x13\xd3\xe9<\xec^\xdd\xfbU\xc4\ +\xa6T\x98J\x15P\xda\x96\x1d\xd7\x96k6\xa6R\x05\ +\xec\xd8*\x5c]\xa8j:\xb8\x91\xce\xa3j\xb6\x87\xa8\ +Y\x0e\xa6REl5\xa4o]\xc8\xd76Z\xa8\xda\ +\xb8\x99.\xc2\x94\x7f\xa7\x86i+Lg\x8a\xc8U\x9b\ +\xe1\x9e\x03k\x15\x0bw^\x14 \xf7\xe4\xb7\xc3\xc0L\ +\xb6\x84\x95\xb2\xf9\xef\x06\x19\xb3\xf7\x02{\x9fo\xe0\xfe\ +\xeb2\x14\xb7:\xd5\x83\xc52\xde\xe6\xea=\xf4h\xbf\xa4\xf3\ +\xd2\x16\xc0\x92*4\x00:/\x1a\x00\x86\xed\x04\x1f\x05\ +\xdbaX\xd2C\x04v\x87S\x90\x10\xb6\xc3\xa8\x9a\x8e\ +\xf7\xbf\xd3\x0e3\xb6\x1a\x12\xfd\x06\xa1\xdf\x100\x04A\ +P\xab;\x11\x91\xaff\x99\x19\xfc\xa7`\xa5bXR\ +iO\xbe\x1b\x80&\x80\x83\xbb\xe9dI'\xc8Lj\ +zI\xa1\x1a\xc2\xa3m\xf7\x00\x8c\xef\xa1\xb1\xcf\xc8\xbb\ +\x07 ,\x85\x06@\xe3E\x070\x17\x1e\xffH\xba\x06\ +\x18\xaaU\x9e\x02X\x08\x81\xff\x85x\xbd2\xaf\x81k\ +\xafS\xb7\x97\x86\x85\xa0$\x80sA\x99W\x8a\x13_\ +\xae\x8f\xe6<\x01\x00\xad\x97}\x85\xc1\xa3\x97\x18H\x80\ +1\x0a\xc20Z\xf7\xf5~_\xbf\xdb\x00j`\xe4@\ +X\x22 \x19\xafW\xe6;\xbdf\x8d\x14i\xbf\xeb7\ +mQ,\xadRI\x1d\xd4\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x02n\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a.\x14\xa21\x11\x1f\x00\x00\x00kID\ +ATh\xde\xed\xd6\xc1\x0d\x80 \x10\x04@0\xd6\xe2\ +\xd3\xee\xac\xc2\xeex\xda\x8cV\x80>0\xe0\x99\x99\xaf\ +\x91\xe4\xb2\x1enJ\x00#\xe5\xda\x83e/\xe7\xdd\x8b\ +\xc7\xb6\xe6/\x0c0EO`~\xeb\xa0\xa7\xc4Z\xd5\ +\x12\x0f\x9f\x80\x01~\xb3\x03\xa3n\xa5\xf0\x09\x00h\xa3\ +\xfe\xc4\xda\xa8O\xc8\x0eh\xa3\x00\xda\xa86\xaa\x8dj\ +\xa3\x06\xd0F\xb5Q\x80\xde.\xda|\x1c\xb4q\xeb\xdd\ +\xc5\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x03^\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a1-0n\x97\x89\x00\x00\x01[ID\ +ATh\xde\xed\x95\xb1J\x03A\x10\x86\xff\x99\xbdD\ +Hg#\x11\xa2&6\x82\x95O \xc6\x07\x11|\x03\ +\x0bIm!\x16>D\x04}\x0b\x1b\xd3\x0b\xa2\xd7Z\ +\x8a\x18\xb1\xb7\xca\xeeXx\x1e{G.\x22\xce\x15\xa7\ +\xf3\xc12;\x1c\xdc\xce\xb7\xcc\xdc\x01\x86a\x18\xc6\x7f\ +\x86\xe2\xa4{|\xbb\x07\xe1\x0b@\xfa\xaa\xa7\xb8d\x7f\ +z\xbesS\x87@R\xb0\x117\x86s\xfd\x92\xd7\xef\ +\x083\xc0\xfb\x13\x00\xb5\x08p\xf1\xa6\xdc@\xb5x\x00\ + \x86@v\xbb\xa3\xfba\xfd\x02\xda\xc5g\x02D\x0c\ +\xf2\xfe\xb4\xf6\x19X\x1d\xa5\x92?Pr\xe9t\xda\xe8\ +m\xac\xa8\xbcK O$|09\x5c\x9e\xcc\x9d\x81\ +\x98\xe7\xb3u\x95C\x8f\xae\x03\xd27\x06\xb9\x96\x82\x81\ +\xac\x850\x1b\x03\xd8\xach!]\xee\xa6\x82\x87W\x00\ +\xec\x94\xfa\x85\xc0\x9c\x0c\x16\xcc\x80.\x97\xa9\x80\xf8s\ +\x06\xf4\x9a\x9e\xaa?\xa3[\xdb\xbd|?\xbc\x0a:\xe7\ +%\xae\xce;*\x0apk\xa9q\x7fbF\xc31\x01\ +\x130\x01\x130\x01\x130\x01\x130\x01\x130\x01\x13\ +0\x01\x130\x81? @\x0d\xaa;\xaf5\xc9\x12\x07\ +\xc0\xbd\xbf<6E\xa0\x0d\xc0\x03\xf0T\xb2\xe2Lf\ +^\xe4\x8a\x9c\xa2\x18\xaf\xf8\xa6$\x8a\xf1\x0aQ\xfcZ\ +\xbe\x22/G\xf9i\xdb\xc4\xc5\xf1\x82\xbc\xaa%\xa5\xb4\ +\x8f\x05\xaar\xc30\xbe\xe1\x03\x0d\x16Wf>\xb8\xfe\ +\xcc\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x15R\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22UTF\ +-8\x22 standalone=\x22\ +no\x22?>\x0a\x0a\ +\x0a\x0a \x0a \x0a \ + \x0a \x0a <\ +g\x0a inkscape:\ +groupmode=\x22layer\ +\x22\x0a inkscape:\ +label=\x22Image\x22\x0a \ + id=\x22g1\x22\x0a \ +transform=\x22trans\ +late(-452.00522,\ +-236.6526)\x22>\x0a \ + \x0a \ + \x0a \x0a \x0a\ +\x0a\ +\x00\x00\x07\x83\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a*3cWap\x00\x00\x05\x80ID\ +ATh\xde\xedYM\x88\x13g\x18~\xbe\xf9&\xc4\ +\x90,\xc9\x8a,D\x8dQ\x9a\xac\xe3B\xe8A\xf1\xb0\ +\x8a\xb8\xf6\xd0C\xa1\x17\xe3\x84\xa0\x17\x8bm\x91\xed\xc1\ +\xd6\x1e\x0a-%\xe2\xa9\xd0\x22\xb5\xddR\xdb\xe2\xc5\xc2\ +.\xd9J\xbb\xbd\xb4\x97\xb8\x14%P\x14\x0f\xed\xb0\x1b\ +7\x08\xbb\xc66\x98\x85\xed\x86l\x9a\xcd&\xe3\xdbC\ +\x13\x99L'\xc9\xccn~(\xf8\xdc\xe6\xfd\xbe|\xef\ +\xfb|?\xef_\x80\xe7\xe8/X\xa7\x17\x8c\xc7\xe3\xaf\ +\x00\xb8\x06`\x97n\xe81c\xec\x8dS\xa7N\xfd\xd4\ +I}B\x176\xe5K\x03\xe3\x01`7\x11]\xeb\xb4\ +\xb2n\x10\xd8\xddb\xcc\xd7ie\xa2\xd9\x89SSS\ +/\x0a\x82\x10\x04\xf0\xb3,\xcbk\xdd\xb8\xcf333\ +\x03\xe5r\xf9eA\x10\x16\xc2\xe1\xf0o\x1d{\x03\xd3\ +\xd3\xd3\x17\x88\xe8\x93\xda\x89\xa5UU})\x1a\x8df\ +\xea\xe3\xb1XL\x90$\xe90c\xec\x04c\xec\x03\x00\ +\x8e&K\x95\x18c\x97\x19c\xb7\x14E\xb9\x1b\x8b\xc5\ +\x9ej\xde\xce\x1e\x00\x09\x00\x01\x00O\x89\xe8\xedH$\ +ru\xcb\x04j\xc6_\xd1\x89\x97\x00\x8cq\xce+\xaa\ +\xaa\x8e\x038\xd3\xe6\xea\x18\xe11\x11\xdd`\x8cM\xa8\ +\xaa*p\xceg\x01\xbc\xa0\x9d@D\xefE\x22\x91\x8f\ +6M\xa0\x89\xf1u\x14\x00l\x03`\xdb\xca\xb5!\xa2\ +\x0dA\x10JD\xe4n2\xde\x92\x04\xdb\xa4\xf1=E\ ++\x12\xac\x89\xf1\xe7\x88\xe8k+Jl6\x1b\xbc^\ +/\x86\x86\x86\xe0v\xbb\xe1t:a\xb3\xfd{8\x95\ +J\x05\xc5b\x11\xf9|\x1e\xb9\x5c\x0e\xd9l\x16\x95J\ +\xc5\x22\x07:\x17\x89D\xae\x9b\xf2BDt\xc9\xec\xca\ +\x03\x03\x03\x90$\x09>\x9f\x0f\x9cs\xc39v\xbb\x1d\ +v\xbb\x1d\xdb\xb7o\xc7\xbe}\xfb\xa0\xaa*2\x99\x0c\ +R\xa9\x14\x0a\x85\x82)g\xc3\x18\xbb\x04\xe0\xbaY7\ +\x9a\x03\xb0\xb3\xd5\x8a\x9cs\x84B!\x04\x02\x010f\ +-\xa0s\xce\xb1w\xef^\xf8\xfd~\xa4\xd3i(\x8a\ +\x02UU\xdb\xfd\xec\x89\xe9@&\x08\xc2\xeb\x00\xf2\xcd\ +Vr8\x1c\x18\x1b\x1bC0\x18\xb4l\xbcn[1\ +<<\x8c\xe3\xc7\x8f\xc3\xe1p\xb4\x9a\x9a\x07\xf0\xa6\xa5\ +G\x1c\x8f\xc7\x0f\x02\xf8\x05\x80S+\xf7x<8z\ +\xf4h;\x85\x96Q*\x95p\xe7\xce\x1d\xac\xae\xae\xea\ +\x87\xfe\x16\x04\xe1D8\x1c\xfe\xd5R*!\x8a\xe2\x22\ +c\xac\xa2\xdf\xf9n\x18__\xfb\xd8\xb1cp\xb9\x5c\ +\xfa\xa1r\xb9\x5c^\xb0\x9c\x0bU\xab\xd5\xcbD\xe4\xd1\ +\xde\xdb#G\x8et\xc5x\xedc\x1f\x1d\x1d\xd5;\x83\ +AQ\x14/Y\x22p\xf3\xe6\xcd\xdd\x00^\xd3\xcaB\ +\xa1\x10\x06\x07\x07\xbb\xee\xf3\xddn7\x0e\x1c8\xa0\x7f\ ++\xafONN\xee4\x9d\xcc\xd5\xd2\x03\xbb\xd6U\x06\ +\x02\x01C\x85\xfb?\xfe\xddP\xfe\xe0\xdd\xd0\xa6\xe6\x01\ +@0\x18\xc4\xc3\x87\x0fQ*\x95\xea\xa2m\xa2(\x8e\ +\x03x\xbf\xed\x09\xc4b1\xa1\x96\xdb<\x83$I[\ +\xf26\x96SdQ\xc4\xc8\xc8\x88>6\x9d\xa9\xd9\xd6\ +\x9a\x80$I\x87\xb5\x89\x99\xcdf\x83\xcf\xe7C\xaf\xe1\ +\xf7\xfb!\x8a\x0d\x17d\x8f$I\x07\xdb\x12\xe0\x9c\x8f\ +i\xbf\xbd^o\xd3\x08\xdbMp\xce\xe1\xf5z\xf5o\ +\xe1D[\x02DtH\xfb=44\xd4\xb7$N\xaf\ +\x9b1v\xc8\x8c\x17\xda\xaf\xf7\x0a\xfd\x82\xc7\xe3ii\ +[3\x02\x0d\xe7\xe6t:\xfbF\xc0@\xb7\xd7\x0c\x01\ +\x97>M\xee\x17\x0ct\x0f\xf4\xa2+\xd1S\x18\x11h\ +\xe88X,<:\x0a\x03\xdd\x053\x04\xb2\xda\x8fb\ +\xb1\xd87\x02kkk-mkF\xe0AC\x22\x9e\ +\xcf\xf7\x8d\x80\x81\xee\x07m\x090\xc6\xee5\x94f\xb9\ +\x5c\xdf\x08\xe8u\x13\xd1=3\x04n5\x9cY6k\ +\xa6\xdc\xeb8\xaa\xd5*\xb2\xd9\xac>:'\xda\x12P\ +\x14\xe5.\x80\x8c\xf6!e2\x99\x9e\x13XZZB\ +\xb5Z\xd5\x8a\x1e)\x8ar\xdfL6\xfa\x94\x88\xbe\xd5\ +\xcaR\xa9\x14\x88\xa8\xa7\xbb?77\xa7\x17\xdf\xd0\xb6\ +\x22[\xd6\x03\x8c\xb1\x09\x00\xef\xd4k\x82B\xa1\x80t\ +:\x8d\xe1\xe1aS\xf9\xbc\xd9\xbc\xbf\x19\x16\x16\x16\xb0\ +\xbe\xbe\xae\x15\xad\xab\xaa\xfa\x85\xe9\x8aL\x96\xe5?\x18\ +c\xdf\xe8\xae\x16VVVz\xe2yR\xa9\x94~C\ +\xbf\x8aF\xa3\x7fZ\xaa\x89\x89\xe8C\x00\xcb\x9a*\x0d\ +\xc9dR[%u\x1c\xe5r\x19\xc9dR\xef4r\ +\x1b\x1b\x1b1\xcbE\xbd,\xcb+\x8c\xb1q\xa3\xd6G\ +\xb9\x5c\xee\x8a\xf1\xb7o\xdf\xfeO\xf0b\x8c\x9d?}\ +\xfa\xf4_M{K\xed\x16\x9e\x9e\x9e\xfe\x9c\x88\x1a\x88\ +\xb8\x5c.\x8c\x8e\x8ev,\xd5\xce\xe7\xf3H&\x93F\ +\x91\xf7SY\x96/X\xcd\x85\x1a\xb0c\xc7\x8e\x0b\x00\ +~\xd4\x87\xf8D\x22\x81\xf9\xf9y\xbd\xab\xb3\xecm\xe6\ +\xe7\xe7\x91H$\x8c\x8c\x9f\x01p\xb1\xdd\x1a\xa6*\xf5\ +x<\xee\x000\x05\xe0U\xa3\x86\xd4\xc8\xc8\x08\xfc~\ +\xbf\xe9\xd2SUU,..bnnN\xefm\xea\ +\xf8\xa1X,F\xcf\x9e=\xbb\xde\x11\x02\x000;;\ ++.//_\x01\xf0V\xb3NB\xbd\xbd\xee\xf1x\ +\x0c\xdb\xeb\xab\xab\xab\xcf\xda\xebMN\x8e\x00\x5c\x05p\ +Q\x96eS\xe1\xdfr\xaf$\x1e\x8f\x87\x01L\x00\xe8\ +t\xb1\xfc\x04\xc0yY\x96\xbf\xdfj=\xd0\x12\xb2,\ +\x7fW\xa9T$\x22\xfa\x0c@'\xdc\xd1:c\xec\xaa\ +\xcdf\x93\xac\x1a\xbf\xa9\x13\xd0brrr\xa7(\x8a\ +\xe3Dt\x06\xc0\x1e\x8b?\x7f\x04\xe0\x06\xe7|\xe2\xe4\ +\xc9\x93\xd9\xcd\xda\xd0\x91v[\xedo\xd6\x83\xb5\xbfY\ +\x0f\xd5\xba\x07\xbb4\xf5\xf5\x1a\x80\xc7\x00\x16\x88\xe8\x1e\ +\xe7<\xa1(\xca}\xa3\xdc\xe69\xfeo\xf8\x07h=\ +'\x08\x97o\x86\xaf\x00\x00\x00\x00IEND\xaeB\ +`\x82\ +\x00\x00\x06\x1c\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91=H\xc3@\x1c\xc5_\ +SE\xa9\x95*v\x10q\xc8P\x9d,\x88\x8a8j\ +\x15\x8aP\xa1\xd4\x0a\xad:\x98\x5c\xfa\x05M\x1a\x92\x14\ +\x17G\xc1\xb5\xe0\xe0\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10\xfc\x00qrtRt\x91\x12\xff\x97\x14Z\xc4x\ +p\xdc\x8fw\xf7\x1ew\xef\x00\xa1^f\xaa\xd91\x0e\ +\xa8\x9ae\xa4\xe211\x93]\x15\xbb^\xd1\x83\x10\x02\ +\xe8G\x9f\xc4L}.\x99L\xc0s|\xdd\xc3\xc7\xd7\ +\xbb(\xcf\xf2>\xf7\xe7\xe8Ur&\x03|\x22\xf1,\ +\xd3\x0d\x8bx\x83xz\xd3\xd29\xef\x13\x87YQR\ +\x88\xcf\x89\xc7\x0c\xba \xf1#\xd7e\x97\xdf8\x17\x1c\ +\x16xf\xd8H\xa7\xe6\x89\xc3\xc4b\xa1\x8d\xe56f\ +EC%\x9e\x22\x8e(\xaaF\xf9B\xc6e\x85\xf3\x16\ +g\xb5\x5ce\xcd{\xf2\x17\x06s\xda\xca2\xd7i\x0e\ +#\x8eE,!\x09\x112\xaa(\xa1\x0c\x0bQZ5\ +RL\xa4h?\xe6\xe1\x1fr\xfcIr\xc9\xe4*\x81\ +\x91c\x01\x15\xa8\x90\x1c?\xf8\x1f\xfc\xee\xd6\xccON\ +\xb8I\xc1\x18\xd0\xf9b\xdb\x1f#@\xd7.\xd0\xa8\xd9\ +\xf6\xf7\xb1m7N\x00\xff3p\xa5\xb5\xfc\x95:0\ +\xf3Iz\xad\xa5E\x8e\x80\xd06pq\xdd\xd2\xe4=\ +\xe0r\x07\x18|\xd2%Cr$?M!\x9f\x07\xde\ +\xcf\xe8\x9b\xb2\xc0\xc0-\x10Xs{k\xee\xe3\xf4\x01\ +HSW\x89\x1b\xe0\xe0\x10\x18-P\xf6\xba\xc7\xbb\xbb\ +\xdb{\xfb\xf7L\xb3\xbf\x1f\x16\xccr\x824\x19\xdfv\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x0b\x0f\x0a\x12\x13\x9fof\xa8\x00\x00\x04\x19ID\ +ATx\xda\xed\x9aOh\x1cU\x1c\xc7\xbf\xbf\x99\xcd\ +f\xc0f\xa2$A\x04\x05/Rl<\xc9z\x91$\ +\xb3/YCZC\x8a\x97\xe8\xc5\x93\xf5P\xa4D\x10\ +A\x05\xe9\xad\x05A\xeb\x1f\xfc\x07\xf1\x22=\xc5\xd6\x14\ +\xa4\x8b\x91\xdd\xf7\x5c\x1c,H\x10\x8b\x8a\xa2\x07\xab\x87\ +(\x18\xf4\x90JH\x9a\x9d_\x0fna\x1cM\xf7\xcd\ +\xee\xfc\xdbu\xbe\xb7\xd9}of>\x9f\xf7o\xe61\ +@\x9e\xd9w\x02|\xf0\x83\x1a\xc5\ +\xbf\xed+\x01!\xe17L\xd3|\xbco\x04\xd4\xeb\xf5\ +\xc3\xcc\xfc\x81&\xfco\xa6iV\x1c\xc7\xf9\xb1/\x04\ +\xec7\xdb\xdf\x04~\xdaq\x9c\xef:Y\x06\xfb\x16\xbe\ +'\x05D\x09\xdfs\x02\xa2\x86\xef)\x01q\xc0\xf7\x8c\ +\x80\xb8\xe0{B\x80Rj..x\xed\x0d\x91\x107\ +{\xa7\xe7y\xc7\x0c\xc3\xf8\x15\xc0{B\x88\xbdn\xe1\ +\x99y5.\xf8H{\x80\x94\xf2 3\x7fAD'\ +\x99\xf9\x1df\xfeH)e\xa5\x09/\xa5\x5cHD\x80\ +\x94\xf2 \x00\x05\xe0\x0e\xdf\xcfs\xcc\xbc\xda\x89\x84(\ +\xe0[{\x02+\xb1\x0bh4\x1a\xf7\x02h\x04\xe0\xfd\ +\x12\xceU\xab\xd5\xc1\xa4\xe1\x89hU\xe7\x11\xb9k\x01\ +\xcdf\xf3}\x00\xb7\xdf\xa4\xc8\xc3\x96e\x9d\xd7\x91\x90\ +4|TC\xe0\x1e\x8d2m%D5\xe1\xb56D\ +\x06\x93\x9c\x04_\xd7,\xb7\xaf\x84\x88g\xfbb\x98\x9b\ +\xefZ\x80\x10\xe2$\x807BH\xb8\xe0\x9f\x18\x93X\ +\xeab}\x0e \x22f\xe6%\xa5\x14\x00\x9c\xd0\xa8r\ +cux\x04@9M\xf8\xc8\x1e\x84:\x91\x00\xe03\ +f\xbe/M\xf8H\x9f\x04\xc3J`\xe6\x92\xe6\xa9c\ +\x83\x8f\xfc]\x80\x88X\x08\xb1\x14bNH\x15>\x96\ +\x97\xa1\x08%\xc4\x0e\x1f\xdb\xdb\xa0O\xc2\x9b\x1d\x9eb\ +\xc34\xcd\xa9\xb8\xe1c}\x1dnI8\xd1\x81\x84\x0d\ +\xd34\xcb\xc1\xdd\xdb\x9e\x13\x10\x90\xf0\xaef\x95\xad$\ +\xe1\x13\xd9\x10iI8\x0e\xe0\xcbv\xaf\x15\xcc<\x97\ +$|b;B-\x09\x0f\x10\xd1\xe5}\x96D\xafP\ +(\x1c\x9d\x99\x99\xf9<\xe9\x1d\xa7\xc4\xb6\xc4\x88\xc8+\ +\x97\xcb\xf7\x07%0\xb3700\xb0055u\x11\ +)$\xd1=\xc1\x1b\x12\x98\xb9\x01\x80\x01l\x11\xd1l\ +Z\xf0\xbaO\x82[\xf0}#\xe0\xba\xeeP7_\x88\ +\x10\x91\x07\xa0\x1c\x07L\xb5Z\xb5\xff\xe3\xde\xbb\xee\x01\ +\xbf\xf8\x0fvvv\xca\xc8h,\xcb\x12\x81\x9f~\x8e\ +B\xc0'\x81\x16<\xed\xba\xeeP\xd6\xe0[\xad\x7f*\ +0\xbf\xacu-\xc0\xf3\xbce\x00\xfe\xaf\xab\xc6ww\ +w/I)\x17\xb2 \xc2u\xdd!)\xe5Q\xcb\xb2\ +.\x018\xe4\xfbk\xcf0\x8c\xe5\xb6CR\xe7\x22\xf5\ +z\xfdU\x22ZBo\xe5\x95\xe9\xe9\xe9g\x22Y\x05\ +\x86\x87\x87\x9f\x0d\x0e\x85\x8c\xe7c\xdb\xb6\x9f\x8bl\x19\ +,\x95J\xd7l\xdb\x9eg\xe6\xd7\x00\xece\x18|\x0f\ +\xc0\x19\xdb\xb6\x17J\xa5\xd25\xadU)\xec\x15j\xb5\ +\xda!\xc30\x9e\x000\x8b\xbf?\x97?\x902\xf4U\ +\x00W\x98y\xcd0\x8ce!\xc4\xf7\xc8\x93'O\x9e\ +\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x02$\xbd\xd9J\x1d\x00\x00\x02%ID\ +ATh\xde\xed\x98\xc1k\x13A\x14\x87\x7fo6i\ +m\x8a\x1e\xda\x1aE\x82P\x0fA\xe8Y\xff\x09kk\ +\x91\x86\x82\x87\xda\x9b\x94\xb8\xe0!xip0\x15*\ +\x91\x1c\x96\xb09\xe5\xa6\xa5P/R\x15\xbc\x0a\xa5\xc7\ +B\xa1\x97\x80\x04$\x07\xabUZ\xa8\x8d\xad\x9by\x1e\ +jA\xf4 \xdd\x1dv\x02\x9d\xef\xb8;o\xf7}\xbb\ +3\xfbf\x1f`\xb1X,\x96\xd3\x0c\xe9\xbcX\xa5R\ +\xe9\xdbK\x9e\xb9M\x84I0\xae\x15\xef\xcf^\x02\x80\ +R\xd5o\x01\xbcJ\x10K\xc1\xf6\xd6\x8a\x942\xe8*\ +\x01f\xa6\x92\xefO\x13c\x01\xa0\x0b\xc7\xc77\x1b\xcd\ +\x0d\x00=#\xd9\xe1\xab\x7f\x0co\x12\xd4\x83\xb9|\xfe\ +UW\x08x\x9e\xd7\xbb+\x9c:@w\xfe>\xb7\xd9\ +h\x02\x00F\xb2\xc3\xff\xc4e\xce\x0f,\xf5\x93\x98\xce\ +\xe5r\x87Q\xee\x9f\x88\x12,\xa5\x14\xbb\x22\xf1\x12\xc0\ +\xe8Ic\x85CS{\x9d \xc5\xcc\xb7\x88\x88\xc3\xe6\ + \x22\xd9\x0f\xa5\xe7\xc2$\x7f\x8c\xe38c\xf3U\xdf\ +\x8d\x92Ch\x01\xe9y\x19\x06\x1eF\x9f\xc4\xf4X\xd6\ +j\xe9\xd8\x05\x1c'9\x03 \xa5a\x1d\x9eK\x04\xea\ +n\xfcS\x88y\x14\x9a`\xa21\x13k\xe0\x8a\xc6\x12\ +\x925!0\xa8Q`\xc8\x84\x80\xce*N&\x04\xba\ +\x02+`\x05Ln\xe6\xa6\xdc\xc2!\x80\xa4\x86\xa7x\ +c\xd1+\xbf=\x95o \xf4n\xb4T\xf59\xca\x8d\ +/_<*#\x1f?}\x05\x807ag\x83]\xc4\ +V\xc0\x0a\x84Gi\xccC\x99\x10\xf8\xac\xed\x7f\x00\xd8\ +6!\xf0Ac5m\xc4.@D\xaf\xb5\x090\xaf\ +\xc4.\x10t~>\x07\xd0\xd6\x90\xff\x8f\x80;\x8b\xf1\ +w%\x5c\xb7\x05\xe6g\x1a\xba\x12\x0b\xd2u[F>\ +\xa3\xe9\x9eD\x89\x80w\xe1W\xafZ\xeb|\xd9zb\ +l7\x0a\x00O\xeb\xf5\xb3\x07\xed\x83\x17\x04\xdc\x11E\xae%Z\xdb\xeb\xe5r\xb9\xbf\x9d\ +JMBa\x5c1_w~\xcb(\xa5\xbe\xb1\xa0u\ +!h\xb9o\x7f\x7f\xb9P(|\x87\xc5b\xb1X,\ +\x1a\xf8\x05\xab<\x9c\xaam\xb0\xed\xae\x00\x00\x00\x00I\ +END\xaeB`\x82\ +\x00\x00\x08\xa3\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x1d\x1b\xc6\xe5i\xbe\x00\x00\x06\xa0ID\ +ATh\xde\xed\x99mpT\xd5\x19\xc7\x7f\xe7nv\ +\x0d\x9b\x0d\x11\x12a\xf3\x06!\x0aaV\xc5\x92\xf0\xd6\ +\xa9\x8d\x85\x18\x19\x85\xd2\x0e(U\x81\x19gT\x02&\ +U[G\xfb!t\x5c+\xd0\xe9\xd4\x0fU\x12%P\ +\xec\x8c\x85V\x22X\x8cH[\x0b\xdbi\xc6\xa6\x96&\ +\xd6N\x01\x09\xd8\xb2\x98l\xb2)\x91\x97\xb0Y\xcc\xee\ +fO?$\x9a\xfb\xb2I\xf6M\xf6\x83<\xdf\xees\ +\xcf9\xf7\xff\x9c\xe7\xfd\xb9p\x8d\xae\xd1W\x9bD2\ +\x0eil\xc4\xf4\xf1y\x16 X,\xa1\x0c\x98\x0d\xe4\ +\x02\xb6\xe1%>\x01]\x12\xda\x05\xb4\x85\x15\x5c!\x0f\ +G\x9dN\xc2)\x15`s=\x85\xc2L5\x92\xb5@\ +~\x8c\xdb;%\xec6+\xd4\xff\xe8Q:\xaf\xaa\x00\ +[_\xe5\x06\x19d3\xf0\x10`I\xf0\x12\x03\x08^\ +\x0dJ~\xec\xac\xa2\xf7K\x17`K\x03\x0f\x02\xdb\x80\ +\xc9I6\xe7O\x11\xd4\xd4\xae\xe7\xf5/E\x80\x86\x06\ +\xcc\xbd\xf02\xf0H\xa4\xf7\xe6\xb4\x0c\x8a\xf2+\xc8\x9b\ +\xb2\x00{\xf6\x5c2\xacSI\xbfn2\x8a01\x10\ +\xe8\xa3\xaf\xbf\x83\xde\x0b\xc7\xe9\xf0\xbe\x87\xdbs\x84@\ +\xd07\xea\xa7r\xe0\xfbUU\x04\x93&\x80\xb3\x01\xab\ +\x19\xf6\x01w\xeb\xdfee\x16Q\xe6x\x8cYE\xdf\ +\xc5b\xb6Eu\x19\xa1\xd0\x15\xda\xdd\x07h;^\xc7\ +\xc5\xcbg\x0c\xef\xa5\xe0PHr\x9f\xb3\x0a\x7f\xc2\x02\ +\x0c\xdf\xfc[z\xf0i\xa6t\xe6\xdf\xfa$\xa5\x8e\x0d\ +\x98\x94\xf8\xdc \x1c\x0e\xf2\xcf\x93;y\xff_?g\ +pp@\x0f\xecp`\x12\xcb\x9c\xab\x09\x8cu\x862\ +\xdeG\x86\xcdF\x03\xdef\xcdeU\xe5~\xe6\xdf\xf2\ +x\xdc\xe0\x01\x14\xc5L\x99\xe31VU\xee#c\xc2\ +T\xad\x16\xe0N\xf3E^LH\x03\x9bw\xb0FH\ +v\xaby\xd9\xd7\x97\xb0\xf2\xce}LH\xcf6\xac\xef\ +\xf3up\xfal\x13\x9d=-\xf4^8\xc1g\x81\x8b\ +(\xc2\x84\xcd\x9a\xcbD[!3\xf2+).\x5c\x8a\ +\xcd\x9ag\xd8\xeb\xf3w\xd3\xe4ZK\xef\xc5\x8f\xb4\x82\ +H\xee\xdf\xb4\x81\xbd1\x0b\xb0\xb5\x8eli\xe6$\x90\ +\xf39o\xa2m\x1a\xf7\xddu\x80\x0c\xab]\xb3\xf6r\ +\xbf\x87\x96\x0f\x7f\xca)\xf7\x01\xa4\x1c;7\x09a\xc2\ +q\xe3j\x16\xcdy\xdap\x8e\xcf\xdf\xcd\xde\xdf\xdfM\ +\xff\x95\xff\xa9\xd9\xe7\x83P2Z\x88\x1d\xd5\x84\xa4\x99\ +\xadj\xf0\x8abfY\xf9N\xc3GO\xb9\xdfb\xcf\ +\xc1%\xb4\x9fys\x5c\xf0C7:\xc8\xf1\x8f\x7f\xcb\ +\xaf\xdf.\xe7L\xe7\xbb\xe8Ms\xd9\x1d\xbb\xf4f9\ +\xd9,yn\xb4\xf3L\x91\x98?\xdbIAX\xf2+\ +\xf5\xfb\x85s\x9ebV\xd1w4\xeb><\xf9K\x8e\ +\xbc\xff4\x83\xe1\x81\x98\xed\x7f0\x1c\xe0\xf4\xd9&\xd2\ +-Y\xd8sJUB\xe4!e\x18OO\x8b\xdaN\ +n\xbb\xeb\xdb\xbcv\xf8 \x97\xa2\xd2@HR\xa3\xce\ +\xb0\x19V;e7Wk\xd6\x9c>\xdbDs\xeb\xb3\ +C\xee\x16'I\x19\xa6\xb9\xedY\x83&J\x1dUd\ +L\x98\xa2fYB\xb01*\x13r:Q\x90\xacQ\ +\xf3\xe69\xaa5j\xed\xf7{q\xfd\xfd\x99\x84\xc0\xab\ +\x85\xf8\xe3_k\xe8\xbf\xd2\xa3I\x8a\x0bn\xfd\x81\xde\ +Y\xd756\x1a-\xc6\xe0\xc4[\xb7\xf3u)h\xb9\ +\xdae\xf1\xcd7=H\xc5\xa2\x17\xbex\x0e\x86\xfc\xec\ +\xda\xff5M\xc6\x96a\x16n\xda\xc8\xd1\xb1MH\xb0\ +8\x15u\xfd\x89\xff\xec\xc5\xe7\xefVi\xc1\xca\xf4\xbc\ +%\xba\xbc\xc1\x92qMHJ\xe6\xa5B\x00)\x07\xf9\ +o\xc7\x1f4\xbcB\xfb\xed\xfa\x12\xa3l\x5c\x01\x84`\ +V\xaa\xba+w\x97K\xf3\x9c3\xc9\xa1\xc5&)\xd1\ +\xefI3\xdc\xc4P'\xf5\x05=\xbe\xb6+!P/\ +\xed\xce\x8bz\xed\xa5\xcbn\xcd\xf3D\xdb\xb41\xb1\x8d\ +\x16Fm\xa9\xd2\x80\xcf\xef\xd5<_g\x99\xa8_\x92\ +\x19s1wU\x1bt\x11;\x9cH;|\xa9\x12@\ +\x97\xbc\x18\x08\xf4\xe9\x97\x5c\x1e\xd7\x07\x04tKU\xbb\ +\x18\x8b\x0d'JY\x99E\xba\xea\xf6\xac\x01[4a\ +\xf4T\xaa4P\x94_\xa1\xedE.\x9c\xd0\x87\xd1\xf6\ +h\xc2hk*\xc0+J\x1a\xc5\x05K5\xbc\x0e\xef\ +{\xba\x16\xce\x88\xcd @X\xc1\x95\x0a\x01\x1c7>\ +\x80\xcd\x9a\xab)%\xdc\x1e\x97>\x13\xbb\xc6\xf5\x81\x90\ +\x87\xa3\xe6\x5c:\x80\xc2\xcfyw\xcc{\x9e\xdbf?\ +\xac)\xe6v\x1f\xfcV$'\x8b\x8b,\xe6L\x16\xce\ +\xf9\xa1\xae\xcf\xf8\x1d\xc1P\xbf\x9a\xf5\xc9@\x17m\xd1\ +T\xa3a\x09{\xd4\xbc\xd6\x13\xf5\x0c\x86Gz\xeb\x0c\ +\xab\x9d\x8aE/\xc4\x15\xf6\x22\x85\xce\xa5\xdf\xa8\xd3\xf4\ +\xc4\xe1p\x90\xd6cu\xfa\x0c\xbb'\xd2(2\x22\x02\ +\xb3B=\x8cL\x03\xfa\xfd^\xc3\x817M[Ny\ +\xd9s\x09M'\x85P(\x9f\xf7\x13f\x14Tj\xf8\ +\x1f|\xd4\xc0%m\x04\x1a\x90\x92\xfa\xa8;\xb2\xc3o\ +\xd3W\xb1\x82|\x18)\xec\xba\xcf\xfd\x83\xa2\xfc\x0a\xcd\ +M\xd9sJ\x99\x9c5\x93\x0eo\xb3a,\x12\x8d\xd9\ +\xdc\xf3\xcd\x1d\xcc.\xbeW\xc3\xef>\xd7\xca\xe1\x96'\ +\x91rP\x1d>\xb7\xd7\x8e\xd2\xd8\x8fj\x03A\x85\xda\ +\xa1\xa9\xca\x88Z\x0f5?\xaa)y\x01fN_\xc1\ +\x9a\xe5.f\x17\xdf\x8b\x10\xa6\xa8\xa2\xcd-3\xd7\xb2\ +nE\xb3\xe1\xe6}\xfe.\x0e5?\xa21W\xe0\xd3\ +\x00\xa3\xf7\xc4c\x8fU\xb6\xf3\x80\x10\xfcF\xd3ag\ +\xcdbe\xe5\x1bX\xd3o\x88P\xcbt\xd1\xee>\x80\ +\xa7\xe7oCc\x95\x81\x0b\x88\xe1\xb1JV\xe6t\x8a\ +\xf2+(.X\xaa\x896\xea\xbdM\xaeu\x86\xb1\x0a\ +\x82\xef\xd5\xae\xa71\xee\xc9\xdc\x96\x06\x1a\x80\xf5\x9a\x94\ +o\xb5\xb3\xbc|\x17Ss\xe6&%\x0ay{\xdbx\ +\xe7/\x0f\xeb\xc7) y\xb9v\x03\xd5\x09M\xe6r\ +\xa0F\x0a\x0e\xa9y\xfd~/\xfb\xfe\xb4\x92\xa3\xff\xfe\ +E\xcc\xb6\xaf\x1f-\xb6\x1e\xdb\xc6\xfewW\x19\xc1\xc3\ +;A/O$m\xb8\x9b&xCH\xee1\xd4/\ +\xb6\xe9\x94:6P2c%\x16sfT\xc0\x83!\ +?\xedg\xde\xa4\xedx\xbd>\xda\x8c\x80\x87\xd5I\x19\ +\xee\xea\x86\xbc\xdb\x80\xaa\x88\xa1w\xb8\x87\xcd\x9b\xb2\x00\ +{\xce\x5cl\xd6\x5c\xd2-\x93P\x944>\x0b\x5c\xa2\ +\xcf\xf7\x09\xe7\xce\x1f\xa3\xb3\xa7\x05\xb7\xe7\x88>Ii\ +\xcc&\xe8\xe5\x09\xa7\x93PT\xa18V\xb5o\xd9\xc1\ +\xfdH\xea\x80\xec$W\x13\xbd\x08\xaa\xc7r\xd8\xb8|\ +@O\xb5\xeby]\x04)\x01^Q'\xbb\x04h\x00\ +\xa8\x0f\x9a(\x89\x15|\x5c\x1a\xd0\x8f C\x92\x9a\xe1\ +AXA\x8c\xdb;$\xec!L\xdd\xa6\x8dx\xe2\xce\ +\xe6\xc9\xd0\xbd\xd3\x89b\xc9e>\xb0X\x0a\xca\x84\xa4\ +D\x0e\xfd\xb5\xb4\xa9\xba\xbcN\x04\xa7\x08\xd3*%\x7f\ +\x0e\xf5\xd0\x9a\x8c\xdf\xac\xd7\xe8\x1a}\xd5\xe9\xff\x9aR\ +`\x1bC\x84I\x90\x00\x00\x00\x00IEND\xaeB\ +`\x82\ +\x00\x00\x04\xb8\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00-\x00\x00\x000\x08\x06\x00\x00\x00\x85R\xf3\xdf\ +\x00\x00\x04\x7fIDATh\x81\xc5\x99]hTG\ +\x18\x86\x9f\xa6K-\xa1\x14\x91(!\xb4AJY\x02\ +\x0di\x14)\xe9\x12J\x84 K\x09R\x82H\x10\x11\ +i\xa5h(\xbd,\x1a\xa4\xe0E)m\xe9\x95\x94 \ +\xc5\x0b/R\xc9E\x90 \xc1\x0b)\x92\x96*\x92\xfe\ + \xad\x0d\xad\x14\x09Ac\xb0*q\xf1'\xb4q\xbd\ +x\xcf\x92\xd9\xd99s\xce\xe6\x9c\xb3\xbe\xf0\x910g\ +f\xce{\xbe\xf9~g\xe1\xd9\xa1\x0b\xb8\x01\xfc\x07\xdc\ +\x06\x0e\xc7]\x98\xcb\x8aQ\x0c\xb4\x03m\xc1\xff-\xc0\ +\x9bq\x176eB\xa7\x1am\xc0\xa0c\xbc\xd51\xcf\ +F/\xf0z\xea\x8c\x22\xd0\x0e\x5c\x07\xca\xc0\x17HI\ +/\x02{\x81K\xc1xE\xee\x01\xc3\xc0\x86`\xed\xfb\ +\xc02p\x07(4\x8a\xf0\x06`\xd6\x22\xf6=\xb2\xe3\ +\xb2GJ\xc0\x19j?\xa8\xa3\x11\xa4[X\xd5rR\ +y\x04\xbc\xd5\x08\xd2\x00y\xa4\xa5\xa4\xa4]>\x91)\ +\x8ez\xc8\x94\x80\x7f\x80E\xcf\x9cs\xf6\x86\xcf5\x80\ +\xf45j#\xc0}\xe0\x10\xf0\x04\xd8\x82\x9c\xedW\xe0\ ++\xa0\xdb\x9a\xfb\x18x\x15\xf87[\x9a\xab(P\xab\ +\xb9\x07\xc0\x0e\x14=\xce\xa3\x93\x18E\x0e\xba\x07\x98q\ +\xac\xf9\xc8\xdc4\x0bM\xef\x04\xb6\xa38\xdcM\xad\xd7\ +\x7f\x894\xff7p\xc4\x18\xef\x02\xa6\x81\x0f\x80\x09k\ +\xcdM\xe0g\xa4\xed\xab\xe9S\x96\xf6|NU\x04\x96\ +pg\xe3\xe3\xc0'\xf8\xc3\xe2b\x16\x191\xaa4h\ +B\x9a\xfb\xdf\xf1l\x0e\xd8\x88\xdf~_\xce\x82\xf4\xad\ +\x88\xe79d:\x9b\x1c\xcf\xde\x06\xfe\x026{\xd6\xdf\ +}~m\xbc\xbc\xb8\x8a\x9c\xec\x22:N;r\xac\x03\ +\xbeCfp\x16E\x07P\x0a\x1f\x04~\x00v[k\ +\xfe\x04N\x01\xe3\xc1\xdfL\xd1\x81\xdb.?FQc\ +\x119\xdf5\x94\xe2\xfbq'\xa3\xa1,\xc8\xedA\x1a\ +\x1e\x03\xf6\x01\xeb\x8dg?\x86\x10?\x0d\x0c\x04\x84\x06\ +\x80c(\xd9\xd8\xf3\x16P\x91U\x17\xba\xd11\xee\xf7\ +\xcc\xb1#\xc6#\xe0\xdd\xe0\xd9\xe1\x10\xd2q\xe5J=\ +\xa4[\x90\xfd\xac\xb0\x9a\x14\xf2\x8ey\xaf\x18sL\xe9\ +\x05\xfaPg\x92\xb4\xf68C\x8c\xda\xbf\x09\xd9\x99\xbd\ +\xf8\x17\xe0\x05c^\x1b\xf0Y\xc8\x8b:\xd0\xd1&%\ +\x5c\x91\xe1(\xd2\x00'C\x16_@G\xb6\xecy\xc1\ +\x9d\xe0\xc3'\xad\xf1I\xe0\xa7\x08rW\x02\x82f\x11\ +u\x1dw\x88\xacA\x98\xe7\xc7\x91\x05\x14k\x9bQ\x95\ +V\x06>5\xf6\xee4\xc6+r\x03\xe81\xe6\xb4\x03\ +\xbf\x01\xf3\xd4\xd9r\xd9\x9a\xaaGJ\xa8e\xca!\xfb\ +\xce\x03\xdf\xa2\x10\x97C\xda4\xe7O;\xde\xdf\x8c|\ +\xab\x0aQ)\xf7~\xfc\xef\xab\xc1K\xc8\xc4\xde@Z\ +\x7f\x8fUg\x1aA\xa5\xa8\x09W&}\x18Hl\x8c\ +\x90\x9e\x13\xd9\xb2\x8c\x22\xcb\xf9@\xce\xa1S\xa9\x0b\x83\ +\xc8\x9e*I\xa1@:\xa1\xca'\xdf\xd4K\xd2D\xde\ +\xdal\x01\xdd\xf8\xf8^x\x1a\x95\x98\xed\xc8a\xfbQ\ +]\xe0\x8a\xd7.Y\x02v%!\xed\xeb\xe1\x5c\xceU\ +D\xd9\xf1wc|\x16u\x17\x05\x14\xee|{\xcc\x00\ +\xaf%!\x0c\xea\x12\xe2\x92\xeeG\xad\xd1\x0ap\x02\xb5\ +M=(\x9c\x95\x90\xb6\xfb=\xeb\xcfR\x9d\x9c\xd6\x0c\ +\xfbB%L&P+\xb5\x82\xbb\xa5\xef\x0c\x88\x0f{\ +\x141\x99\x06a\x80\x0fq7\x93\xb6\x0c!M\x8dy\ +\xf6:\x8a\x8a\xf8\x81\x90=f\xd3\x22]A':\xf2\ +0\xd2\x1d\xc8A\xf7{\xf6\xe8\x09\xe6v\x85\xecQJ\ +\x83\xa8Y9\xfd\x81\x8a\x1f\x1f\xa2\xec\xb1\xf2<,i\ +5\xa3\xbays$\xb3:\x90#\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x13\x0bE\xd1TT\x00\x00\x02.ID\ +ATh\xde\xed\xd7\xcbK\x1bA\x1c\x07\xf0\xef,I\ +6\x91\x86\xc6[\x15\xa2\x16\x8a\x1eZ\x1f\x07\x1f\x98\xf8\ +,\x16Z\x8a\x95*\x82`Mci\xf4&\xa2\x88A\ +DT\x84\x08\xe2\xc1\xabBE\x8a\xe7\xd2? R\x91\ +\xb5\x17\xc1\x93'\xf5\xb0\xa5\x17/>\x0e\x16\x1f\xb0\xe3\ +\xa1\x18*6\xb2\xbb3\x9b\xcc\xea\xcem\x19~\xb3\xbf\ +\x0f\xbf\xf9\xcd\xec\x026\x1f$\xddDx\xf5]\xb3\xa6\ +\x91e\x00\x85\xbc_\xfa\xaa\xa8ai\xba~\xb8\x8f\xc7\ +ZR\xba\x09\x8d\x92/V$\x0f\x00>\x97\x1c\x9b\xd8\ +\x98_\xb4\x14\x00\x8a\x22+K\xefs\xc9\xb1\xb1\xf5\xd9\ +\x15\xeb\x00\x19\x18~\xcf\xa3\x08+B\xcav\x13\xb2\x22\ +$\x11N\x12\x16\x84\x10\x00\x16\x840\x00\xb3\x08\xa1\x00\ +f\x10\xc2\x01\x8c\x22\x84\x04\x18Ad\x05pz\xf9G\ +7b\xf4GbY8\xc0\xf6\xc1\x8enD@\xf6G\ +\xefB\xb8\xb2\x018<;FRUpyr\x8e\x8b\ +\xa33=!Q\x00\xbd\xc2\xf5\x80\xfb\xb1\x0cO\xae\xd7\ +\xbe\xdfB<\x10B\x9cB,\x08\xe6\x1e\x98\xa9\x1f\xc1\ +\xcb\xc2\xb0\xa9\xd85U\xc1\xf8\xc6\x5c\x0a\x01@oO\ +\xf0\xab@SA-Cl\x08\xe4\x9f\x9fB3\x95`\ +\xae\x00!\x7f\x13\xa8[m\x87F5\x9d\xff\xb1\x04\xca\ +\x87o\x90\x08\xf9\xefv2R\x09!ob#\x95\xe0\ +\x0e\x90\x08\x81\xcf\xe5\xcd\x18\x82+\x80\x80`\xb8\xaa\x1f\ +\x89\xc68$\x22e\x04!qM\xbe\xba\x0f\xef\x8b_\ +\xa3:\xaf\x02\x9f\xcb\xban\xccW>)\xbb\xd1\xb0F\ +\x10\xee\x80l=`\xa0\xf2\x13\xda\x8b\xdf\xa4\x9e?\x96\ +v\xa2!X\x03\x00\xe8y\xde\x81\x85\x96)D^t\ +\x98Z\xdb\x13\xf0Zw\x0a]\x8f\xce\x92\xb7\xb7*2\ +\x11\x1aDRU\xd0\xfa\xac\x05\x00\x10+\xef\xc6\xfe\xb1\ +\x0a\xe5\xf7\x16\xbf\x9e\xb3\xf24\xc9q\xfbR\xc9_7\ +\xf8dx\x08O\x03A{\x00\xd2\xa1\x12\x8dq\xfb\x02\ +\x00 \xe8\xcf\xb77\x80\xeb\xbd\xf3\xe0\x01\x94R\xf3\xb1\ +\xa0\xd9\x07\xac\xfd\xda4\x1d\x9bT\x15fD\xda\xab\xb1\ +\xf6k\x1b\x15i\xab\xfc\xec\xf9N\x9c\x1ep\x00\x0e\xc0\ +\x018\x00\x07\xe0\x00\xec\x04\xd8\x17'M\xb2k\x06\x10\ +\x01\xb0'@\xf6{\x00\x8d\xe2\xbe\x8e+5\x84\x87K\ +\xa6\xfd\xf4,\x00\x00\x00\x00IEND\xaeB`\x82\ +\ +\x00\x00\x03R\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a/:g\xfc-\x91\x00\x00\x01OID\ +ATh\xde\xed\x95=J\x03A\x14\x80\xbf7\xb31\ +\xdai)\xa8$V\x9eB\xd4\xd2B\xf4\x02\x9e\xc4\xc2\ +\x22E\x0e!\xf1\x00\xe9<\x80\x8aE.!\xf8\x83b\ +i\x0a\x1b!\x99\x1d\x8bD3.\xbbJ`\xa6X}\ +\x1f\x0co\x1e\x0b\xf3\xe6\x1b\xdecAQ\x14E\xf9\xcf\ +H\x98\xdc\x1f\xb2\x83\xe7\x5c\xa0\x15\xb3H\xe6\xd9[\xbb\ +\xe0*\x85@\x16&\xc6\xd3\xcb\x0c-\x89X`\x94\x83\ +\x13N!\x8d\x80\xf9fchK\xe4\x02V\xc0\xc3\xf6\ +\xf3\x01\xbb\xc9\x05$E\x01\x99\x9c\xeb\x84N\xf2\x19x\ +9\xc2\xcf\xbe\xc4\xd1\x91%hn\xf8(gy\xcf\x93\ +\x81\xe3\x95.\xd7\xa53\x10\xb2\xda\x1fF)\xfav\xb6\ +O\xfe8\xa0a\x22\x08\xc0\xfa\xd8\xd1\x036K[(\ +6\xa3\xbb\x1b\xc6\x0f\x03\xac\xc4k\x97\xcc\xd2\xae\x9c\x81\ +\xd8\xbc_v12\x99\x83$=_l\xa1\xc5\xad\xd9\ +~x\xb2\x1c\xa5`#\xe9\x13\x15\x04\x9a\xb6~\x7fb\ +C\xcdQ\x01\x15P\x01\x15P\x01\x15P\x01\x15P\x01\ +\x15P\x01\x15P\x01\x15P\x81? 5\xba\xf7\xd7\ +]\xb3ib\x01{\xfbZ\x1b\x81\x05\xc0\x01N\x0aV\ +f*S\x16ME.A\x0cW\xf8R>\x88\xe1\xca\ +\x83\xf8\xb9\x5cE^\x8c~\xde\xb6\x09/g~\xc8\xab\ +Z\xd2\x17\xf6\xa1@U\xae(\xca/|\x00u\xe5O\ +\xf8\x9bTTG\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x03\xf4\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\ +\x00\x00\x01\x84iCCPICC prof\ +ile\x00\x00(\x91}\x91;H\xc3P\x14\x86\xff\ +\xb6JUZ\x1c\xec \xe2\x90\xa1:Y\x10_t\xd4\ +*\x14\xa1B\xa8\x15Zu0\xb9\xe9\x0b\x9a4$)\ +.\x8e\x82k\xc1\xc1\xc7b\xd5\xc1\xc5YW\x07WA\ +\x10|\x8089:)\xbaH\x89\xe7&\x85\x161^\ +8\xdc\x8f\xff\xde\xff\xe7\xdcs\x01\x7f\xa3\xc2T\xb3k\ +\x1cP5\xcbH'\x13B6\xb7*\x04_\xd1\x8b0\ +U\x1c\xd3\x123\xf59QL\xc1s}\xdd\xc3\xc7\xf7\ +\xbb\x18\xcf\xf2\xbe\xf7\xe7\x0a+y\x93\x01>\x81x\x96\ +\xe9\x86E\xbcA<\xb3i\xe9\x9c\xf7\x89#\xac$)\ +\xc4\xe7\xc4c\x065H\xfc\xc8u\xd9\xe57\xceE\x87\ +\xfd<3bd\xd2\xf3\xc4\x11b\xa1\xd8\xc1r\x07\xb3\ +\x92\xa1\x12O\x11G\x15U\xa3|\x7f\xd6e\x85\xf3\x16\ +g\xb5Rc\xad>\xf9\x0bCyme\x99\xebT\xc3\ +Hb\x11K\x10!@F\x0deT`!F\xbbF\ +\x8a\x894\x9d'<\xfcC\x8e_$\x97L\xae2\x18\ +9\x16P\x85\x0a\xc9\xf1\x83\xff\xc1\xef\xd9\x9a\x85\xc9\x09\ +7)\x94\x00\xba_l\xfbc\x04\x08\xee\x02\xcd\xbam\ +\x7f\x1f\xdbv\xf3\x04\x08<\x03WZ\xdb_m\x00\xf1\ +O\xd2\xebm-z\x04\xf4o\x03\x17\xd7mM\xde\x03\ +.w\x80\xc1']2$G\x0aP\xf9\x0b\x05\xe0\xfd\ +\x8c\xbe)\x07\x0c\xdc\x02}k\xee\xdcZ\xe78}\x00\ +24\xab\xd4\x0dpp\x08\x8c\x16){\xdd\xe3\xdd=\ +\x9ds\xfb\xf7Nk~?\xc7\xa5r\xc9\x8b\xbc\xcd\xd0\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09pHYs\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01B(\x9bx\x00\x00\x00\x07tIME\x07\ +\xe4\x09\x0d\x0a\x1b82\xd8\xbfJ\x00\x00\x01\xf1ID\ +ATh\xde\xed\x99;K+A\x18\x86\x9fI\x22\x22\ +h!\x16\x16\xd6\x96\x16\xfe\x07\xff\x82\x96v\xc6\x88 \ +\x12P\xa3\xd1 \xe2zA\x04\x11D\x17\x11{=\xa7\ +Ku\x8e\x95\xa5\x8d\x17P\x9446\x16\x16\x22bD\ +4\x9a\xcf\xc6 l\xbc\xc4\xcd^f o9\xcc,\ +\xf3\xcc7\xb3\xef;\x0c\xd4\xa4\x99\xe6l\xfe\xcf\xaf\xd3\ +i\xca|\x95\xb3\xc1\xb2\x11\xa0\xa8\xe0\xaf*2:>\ +\xc0\xa5\x89\x00%=+\xd8\x88@&\xd5\xcf\x9d\x89\x00\ +%\xdd ,5=\xb324\xc4\x93N\x00\x91\x0a\xfb\ +\xb5\xa0X\xb8\xaf\xe7\xc2\xda\xa0W\xa4\x1c\x5c\xf7\x0a8\ +G\x1dH\x91\x91\xc9\x04\xfbf\x02|\x0c\xde{Q\x0c\ +g\xe2\x9c\xea\xbe\x85>\x95@WT8\xb4llk\ +\x93V\xe3*\xe0P\x1e\xc5Z\xa1\xc0\xec\xf4 y#\ +*\xe0P#\xc2X]\x8cs\xcb&\xbe\xb3C\xd44\ +\x80\x92\xda\x00;w\xcb\xc9\xacM\xb7I[\xe8\xcb\x83\ +\xfe\xee\xe8\x87F\x02\xbc\xcb\xb7h\x12\x14\x80o\xd1$\ +h\x00\xcf\xa3I\x84p\xe4Y4\x09\xab\x02\x9eE\x13\ +=\x00\xaa\x88&am!\xcf\xa2\x89V\x15p\x13M\ +\xb4\xaa\x80\x9bh\xa23@E\xd1\xc4\x04\x80\x8f\xc9*\ +\x1e\x9dm1\x03\xe6}\x05\xcc\xb47\xb3\xd5\xd3\xc3\xab\ +I\x00y`\xb9\xe1\x81\xc5d\xb2|\xe5u\x06(\x00\ +\xdbD\xc8\xa4\xfb\xb8\xfe\xa9\xb3V\x00\x22d\x05\x92S\ +\x09r\x95\x8e\xd1\x03\xa0\x8a(\x116@N \x9d\xee\ +\xe3\x8fR\xee\x0c4\xac\xdf\xe8\x0dB\xaa\xe9\x89\x8e\xc9\ +~v\xddN>\x8c\x0a<\xa2X\x8d\x0a\xf3\xa9\x847\ +\x17\x9a\xa0\x00|\xbbR\xc6\xfc?\x9f\xec\x89bd\x22\ +\xce\x91\x1f\xdf\xf7\x13\xe0L)\xc6&\xe2d\xfd\x5c \ +?\x00\xbe\xb5~\x9d\x01*\xb2~\x1d\x01~e\xfdZ\ +\x01\xb8\xb1~=\x004z\xe0\xf8-@\xd5\xd6\xef\xf9\ +%'h\xeb\x0f\xba\x02\x9e[\x7fP\x00\xc6 + + + + + + + + + + + + + diff --git a/src/testium/main_win/test_run/__init__.py b/src/testium/main_win/test_run/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/main_win/test_run/outlog.py b/src/testium/main_win/test_run/outlog.py new file mode 100644 index 0000000..5889426 --- /dev/null +++ b/src/testium/main_win/test_run/outlog.py @@ -0,0 +1,37 @@ +''' +Created on 4 nov. 2013 + +@author: francois.d +''' + +from PySide6 import QtGui +from PySide6.QtCore import QObject, Signal + + +import sys + +class OutLog(QObject): + logToBeAppended = Signal(str) + + def __init__(self, out=None): + super().__init__(None) + self.out = out + + def set(self, file_handle): + self.out = file_handle + + def reset(self): + self.out = None + + def write(self, m): + self.logToBeAppended.emit(m) + + if self.out: + self.out.write(m) + + def writeln(self, m=""): + self.write(m + "\n") + + def flush(self): + if self.out: + self.out.flush() \ No newline at end of file diff --git a/src/testium/main_win/test_run/test_run.py b/src/testium/main_win/test_run/test_run.py new file mode 100644 index 0000000..6acafc8 --- /dev/null +++ b/src/testium/main_win/test_run/test_run.py @@ -0,0 +1,74 @@ +from time import sleep +import importlib +from PySide6.QtCore import (Signal, QThread) + +# class ThreadTestRun(QThread): + +# def __init__( +# self, +# test_proc: TestProcess, +# status_thread, +# tst_ctrl: TestSetController, +# debug=False, +# ): +# super().__init__(None) +# self._test_proc = test_proc +# self._tst_ctrl = tst_ctrl +# self._debug = debug +# self._status_thread = status_thread +# if debug: +# self.debugpy = importlib.import_module("debugpy") + +# def run(self): +# if self._debug: +# self.debugpy.debug_this_thread() + +# # start tests +# try: +# self._test_set.execute() +# except: +# print(traceback.format_exc()) +# # raise +# self._status_thread.stop() +# if self._status_thread.isRunning(): +# self._status_thread.wait() + +# def stop(self): +# if self.isRunning(): +# self._tst_ctrl.control("stop") + + +class ThreadTestStatus(QThread): + statusToBeUpdated = Signal(dict) + testSetIsFinished = Signal() + + def __init__(self, status_queue, parent=None, debug=False): + super().__init__(parent) + self.__to_be_stopped = False + self._status_queue = status_queue + self.__debug = debug + + def run(self): + if self.__debug: + self.debugpy = importlib.import_module("debugpy") + stopping = False + try: + while True: + while not self._status_queue.empty(): + m = self._status_queue.get() + if m.get("id", None) is None: + self.testSetIsFinished.emit() + else: + self.statusToBeUpdated.emit(m) + if stopping: + break + if self.__to_be_stopped: + stopping = True + sleep(0.1) + + finally: + pass + #self.testSetIsFinished.emit() + + def stop(self): + self.__to_be_stopped = True diff --git a/src/testium/main_win/test_run/thread_output.py b/src/testium/main_win/test_run/thread_output.py new file mode 100644 index 0000000..05f3c3d --- /dev/null +++ b/src/testium/main_win/test_run/thread_output.py @@ -0,0 +1,28 @@ +from PySide6.QtCore import (QThread) + + +class ThreadTestOutput(QThread): + + def __init__(self, stream, queue, parent=None): + super().__init__(parent) + self._stream = stream + self._queue = queue + self._is_stopped = False + + def stop(self): + self._is_stopped = True + + def run(self): + """ read the stream and print it in the log window line by line + """ + + while not self._is_stopped: + try: + lines=self._stream.read().splitlines() + for line in lines: + if len(line) >= 1: + self._queue.put(line) + + QThread.msleep(100) + except: + QThread.msleep(100) diff --git a/src/testium/main_win/test_tree.py b/src/testium/main_win/test_tree.py new file mode 100644 index 0000000..4a9aa18 --- /dev/null +++ b/src/testium/main_win/test_tree.py @@ -0,0 +1,417 @@ +import sys +import os + +# Qt +from PySide6.QtGui import (QIcon, QPixmap) +from PySide6 import QtWidgets +from PySide6.QtWidgets import (QTreeWidget, QComboBox) +from PySide6.QtCore import (Signal, QSize, Qt) +from PySide6.QtGui import (QFont, QFontInfo) +from time import (time) + +from main_win.test_tree_items.common import (TEST_COLS, TEST_COLS_WITH_TIME) +from interpreter.utils.tum_except import (ETUMFileError, ETUMSyntaxError) +from interpreter.utils.test_ctrl import TestSetController +from main_win.test_tree_items.test_tree_git import QTestTreeItemGit + +# to be removed in the future and replaced by a more "sexy" mechanism +from main_win.test_tree_items.test_tree_unittest import (QTestTreeItemUnittest, + QTestTreeItemUnittestElement) +from main_win.test_tree_items.test_tree_sleep import QTestTreeItemSleep +from main_win.test_tree_items.test_tree_cycle import QTestTreeItemCycle +from main_win.test_tree_items.test_tree_group import QTestTreeItemGroup +from main_win.test_tree_items.test_tree_git import QTestTreeItemGit +from main_win.test_tree_items.test_tree_func import QTestTreeItemFunc +from main_win.test_tree_items.test_tree_jsonrpc import QTestTreeItemJSONRPC, QTestTreeItemJSONRPCAction +from main_win.test_tree_items.test_tree_run import QTestTreeItemRun +from main_win.test_tree_items.test_tree_runtime_plot import QTestTreePlot, QTestTreePlotAction +from main_win.test_tree_items.test_tree_report import QTestTreeItemReport +from main_win.test_tree_items.test_tree_let import QTestTreeItemLet +from main_win.test_tree_items.test_tree_check import QTestTreeItemCheckValue +from main_win.test_tree_items.test_tree_unittest import QTestTreeItemUnittest, QTestTreeItemUnittestElement +from main_win.test_tree_items.test_tree_value_dialog import QTestTreeItemValueDialog +from main_win.test_tree_items.test_tree_note_dialog import QTestTreeItemNoteDialog +from main_win.test_tree_items.test_tree_image_dialog import QTestTreeItemImageDialog +from main_win.test_tree_items.test_tree_msg_dialog import QTestTreeItemMsgDialog +from main_win.test_tree_items.test_tree_question_dialog import QTestTreeItemQuestionDialog +from main_win.test_tree_items.test_tree_tested_references_dialog import QTestTreeItemTestedRefsDialog +from main_win.test_tree_items.test_tree_choices_dialog import QTestTreeItemChoicesDialog +from main_win.test_tree_items.test_tree_console import (QTestTreeItemConsole, QTestTreeItemConsoleAction) +from main_win.test_tree_items.test_tree_status_display import (QTestTreeItemStatusDisplay, + QTestTreeItemStatusDisplayDevice, + QTestTreeItemStatusDisplayTest) + +from interpreter.test_items.test_result import (TestValue) +import libs.testium as tm +import interpreter.utils.settings as prefs +from interpreter.utils.constants import TestItemType as cst +from interpreter.utils.icons import icon_prefix + +class QTestTree(QTreeWidget): + breakpoint = Signal() + DICT_TREE_ITEMS = { + cst.TYPE_UNITTEST_FILE.item_name : QTestTreeItemUnittest, + cst.TYPE_UNITTEST_STEP.item_name : QTestTreeItemUnittestElement, + cst.TYPE_SLEEP.item_name : QTestTreeItemSleep, + cst.TYPE_CYCLE.item_name : QTestTreeItemCycle, + cst.TYPE_GRAPH.item_name : QTestTreePlot, + cst.TYPE_GRAPH_ACTION.item_name : QTestTreePlotAction, + cst.TYPE_GROUP.item_name : QTestTreeItemGroup, + cst.TYPE_GIT.item_name : QTestTreeItemGit, + cst.TYPE_FUNCTION.item_name : QTestTreeItemFunc, + cst.TYPE_LET.item_name : QTestTreeItemLet, + cst.TYPE_CHECK.item_name : QTestTreeItemCheckValue, + cst.TYPE_JSON_RPC.item_name : QTestTreeItemJSONRPC, + cst.TYPE_JSON_RPC_ACTION.item_name : QTestTreeItemJSONRPCAction, + cst.TYPE_RUN.item_name : QTestTreeItemRun, + cst.TYPE_REPORT.item_name : QTestTreeItemReport, + cst.TYPE_VALUE_DLG.item_name : QTestTreeItemValueDialog, + cst.TYPE_NOTE_DLG.item_name : QTestTreeItemNoteDialog, + cst.TYPE_IMAGE_DLG.item_name : QTestTreeItemImageDialog, + cst.TYPE_MESSAGE_DLG.item_name : QTestTreeItemMsgDialog, + cst.TYPE_QUESTION_DLG.item_name : QTestTreeItemQuestionDialog, + cst.TYPE_REFERENCE_DLG.item_name : QTestTreeItemTestedRefsDialog, + cst.TYPE_CHOICES_DLG.item_name : QTestTreeItemChoicesDialog, + cst.TYPE_CONSOLE.item_name : QTestTreeItemConsole, + cst.TYPE_CONSOLE_ACTION.item_name : QTestTreeItemConsoleAction, + 'Status Display' : QTestTreeItemStatusDisplay, + 'Device Status' : QTestTreeItemStatusDisplayDevice, + 'Test Status' : QTestTreeItemStatusDisplayTest, + } + def __init__(self, parent): + + super().__init__(parent) + + self.setAlternatingRowColors(True) + self.setIconSize(QSize(18, 18)) + font = QFont() + font.setPointSize(8) + self.setFont(font) + self.setAlternatingRowColors(True) + self.setAnimated(True) + self.setWordWrap(True) + if prefs.settings.show_time_column: + self.cols = TEST_COLS_WITH_TIME + else: + self.cols = TEST_COLS + for k, v in prefs.settings.columns_size.items(): + if k in self.cols: + self.cols[k]['size'] = v + self.setColumnCount(len(self.cols)) + self.setObjectName("treeTests") + self.header().setVisible(True) + self.header().setCascadingSectionResizes(True) + self.header().setDefaultSectionSize(50) + self.header().setMinimumSectionSize(50) + self.header().setStretchLastSection(False) + self._global_success = True + + fi = QFontInfo(self.font()) + self._row_height = int(fi.pixelSize() * 2) + self.setStyleSheet( ''' QTreeView::Item {{ height:{}px; }}'''.format(self._row_height)) + + for name, data in self.cols.items(): + self.headerItem().setText(data['index'], data['name']) + self.setColumnWidth(data['index'], data['size']) + + self.cycleIcon = QIcon() + self.cycleIcon.addPixmap(QPixmap(icon_prefix() + "/cycle.png")) + self.testIcon = QIcon() + + self.testStepIcon = QIcon() + self.testStepIcon.addPixmap(QPixmap(icon_prefix() + "/document.png")) + self.root = self.invisibleRootItem() + + self.header().sectionResized.connect(self.resized) + + def updateTestSetItemState(self, tree_item, tst_ctrl: TestSetController, state, unitary=False): + id = tree_item.id + tst_ctrl.control("set_enabled_state", item_id=id, enabled_state=state, unitary=unitary) + + def updateTreeCheckState(self, tree_item, tst_ctrl: TestSetController): + # treat the case of the invisible root + if tree_item is self.root: + for i in range(self.root.childCount()): + self.updateTreeCheckState(self.root.child(i), tst_ctrl) + else: + checked = tree_item.checkState(self.cols['name']['index']) + state = (Qt.Checked == checked) + self.updateTestSetItemState(tree_item, tst_ctrl, state) + self.synchronizeEnabledState(tst_ctrl) + + def checkUncheckAll(self, tst_ctrl: TestSetController, isChecked): + # test_set.enableDisableAll(test_set.rootItem(), isChecked) + tst_ctrl.control("check_uncheck_all", checked=isChecked) + self.synchronizeEnabledState(tst_ctrl) + + def __foldRecursively(self, tree_item, is_fold): + for i in range(tree_item.childCount()): + if tree_item.child(i).childCount() > 0 and tree_item.child(i).recursive_unfoldable : + # GUI optimisation : + # if you must fold everything, fold first the parent and then the childrens (1 GUI update) + # if you must unfold everything, unfold first the childrens and then the parents (1 GUI update) + if is_fold: + tree_item.child(i).setExpanded(not is_fold) + self.__foldRecursively(tree_item.child(i), is_fold) + else: + self.__foldRecursively(tree_item.child(i), is_fold) + tree_item.child(i).setExpanded(not is_fold) + + def foldAll(self, is_fold): + self.__foldRecursively(self.root, is_fold) + + def __synchronizeEnabledStateRecursively(self, tree_item, tst_ctrl: TestSetController): + for i in range(tree_item.childCount()): + id = tree_item.child(i).id + checked = tst_ctrl.control("enabled_state", item_id=id) + if checked: + tree_item.child(i).setCheckState(self.cols['name']['index'], + Qt.Checked) + else: + tree_item.child(i).setCheckState(self.cols['name']['index'], + Qt.Unchecked) + self.__synchronizeEnabledStateRecursively( + tree_item.child(i), tst_ctrl) + + def updateTreeSkipState(self, tst_ctrl: TestSetController): + self.__updateTreeSkipStateRecursively(self.root, tst_ctrl) + + def __updateTreeSkipStateRecursively(self, tree_item, tst_ctrl: TestSetController): + for i in range(tree_item.childCount()): + id = tree_item.child(i).id + # skipped = test_set.getSkippedState(id) + skipped = tst_ctrl.control("skipped_state", item_id=id) + if skipped: + tree_item.child(i).setDisabled(True) + tree_item.child(i).setExpanded(False) + tree_item.child(i)._is_skipped = True + self.__skipRecursively(tree_item.child(i)) + else: + tree_item.child(i)._is_skipped = False + self.__updateTreeSkipStateRecursively( + tree_item.child(i), tst_ctrl) + + def __skipRecursively(self, tree_item): + for i in range(tree_item.childCount()): + tree_item.child(i).setDisabled(True) + tree_item.child(i)._is_skipped = True + self.__skipRecursively(tree_item.child(i)) + + def synchronizeEnabledState(self, tst_ctrl: TestSetController): + self.__synchronizeEnabledStateRecursively(self.root, tst_ctrl) + + def __enableRecursively(self, tree_item): + for i in range(tree_item.childCount()): + if not tree_item.child(i)._is_skipped: + tree_item.child(i).setDisabled(False) + self.__enableRecursively(tree_item.child(i)) + + def setChildrenEnabled(self): + self.__enableRecursively(self.root) + + def getGlobalSuccess(self): + return self._global_success + + def clearGlobalSuccess(self): + self._global_success = True + + def __findItemByIdRecursively(self, item_id, parent): + res = None + i = 0 + while (res is None) and (i < parent.childCount()): + if parent.child(i).id == item_id: + res = parent.child(i) + i = i + 1 + + i = 0 + while (res is None) and i < parent.childCount(): + res = self.__findItemByIdRecursively(item_id, parent.child(i)) + i = i + 1 + + return res + + def __findItemById(self, item_id): + item = self.__findItemByIdRecursively( + item_id, self.invisibleRootItem()) + return item + + def __clearAllStatusRecursively(self, parent): + for i in range(parent.childCount()): + parent.child(i).clearStatus() + # clear the combobox of results + cb = self.itemWidget(parent.child(i), self.cols['desc']['index']) + cb.clear() + cb.addItem(' ') + self.__clearAllStatusRecursively(parent.child(i)) + + def clearAllStatus(self): + root_item = self.invisibleRootItem() + for i in range(root_item.childCount()): + root_item.child(i).clearStatus() + cb = self.itemWidget(root_item.child( + i), self.cols['desc']['index']) + cb.clear() + cb.addItem(' ') + self.__clearAllStatusRecursively(root_item.child(i)) + + def updateStatus(self, status): + if status['id'] > 0: + item = self.__findItemById(status['id']) + if item is not None: + if 'value' in status: + # update the icon + is_success = status['value'] == TestValue.SUCCESS.value + is_norun = status['value'] == TestValue.NORUN.value + if is_success: + item.setStatusIcon(True) + elif not is_norun: + item.setStatusIcon(False) + self._global_success = False + # update the displayed message + if 'message' in status: + cb = self.itemWidget(item, self.cols['desc']['index']) + if (not is_success) and (not is_norun): + if not status['message'] == '': + cb.setItemText(0, status['message']) + cb.insertItem( + 1, status['date'] + ' ' + status['message']) + elif not is_norun: + cb.setItemText(0, status['message']) + + elif 'message' in status: + cb = self.itemWidget(item, self.cols['desc']['index']) + cb.setItemText(0, status['message']) + + if 'status' in status: + if status['status'].lower() == 'started': + if item.isBreakpoint(): + self.breakpoint.emit() + item.setHighlighted() + item.setTimestamp(status['timestamp']) + else: + item.resetHighlighted() + + if ('duration' in status) and ('duration' in self.cols): + item.setText(self.cols['duration']['index'], + '{:.1f}'.format(tm.timestamp_as_sec(status['duration']))) + + def loadTestRecursively(self, tree_parent, test_set_item): + + for test_id in test_set_item.keys(): + childType = test_set_item[test_id]["type"] + if childType in self.DICT_TREE_ITEMS.keys(): + tree_item = self.DICT_TREE_ITEMS[childType](tree_parent, + test_set_item[test_id], + self.cols) + else: + raise ETUMSyntaxError(f"Error in the test_set, type {childType} undefined") + + cb = QComboBox(self) + self.setItemWidget(tree_item, self.cols['desc']['index'], cb) + cb.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + cb.setStyleSheet("""QComboBox { + border-width: 1px; + border-style: solid; + border-radius: 4px; + }""") + cb.setEditable(False) + cb.addItem(" ") + cb.setMaxCount(1000) + cb.setMaxVisibleItems(20) + tree_item._failure_list = cb + tree_item.is_folded = False + if len(test_set_item[test_id]["child"]) > 0: + tree_item.is_folded = test_set_item[test_id]["folded"] + self.loadTestRecursively(tree_item, + test_set_item[test_id]["child"]) + + def removeCheckBoxes(self, root=None): + if not root: + root = self.invisibleRootItem() + + child_count = root.childCount() + for i in range(child_count): + item = root.child(i) + if not item.checkState(0): + item.setDisabled(True) + item.setData(0, Qt.CheckStateRole, None) + if root.child(i).childCount() > 0: + self.removeCheckBoxes(root.child(i)) + + def addCheckBoxes(self, root=None): + if not root: + root = self.invisibleRootItem() + + child_count = root.childCount() + for i in range(child_count): + item = root.child(i) + item.setData(0, Qt.CheckStateRole, Qt.Checked) + if root.child(i).childCount() > 0: + self.addCheckBoxes(root.child(i)) + + def showCheckBoxes(self, checklist, tst_ctrl: TestSetController): + self.addCheckBoxes() + self.restoreCheckList(checklist, tst_ctrl) + + def getItemCount(self): + count = 0 + for i in self.root: + count += 1 + return count + + def getFoldList(self): + foldList = [] + for i in self.root: + foldList.append(not i.isExpanded()) + return foldList + + def restoreFoldList(self, foldlist): + itemlist = reversed(list(self.root)) + for item in itemlist: + state = foldlist.pop(len(foldlist)-1) + if item is not self.root: + item.setExpanded(not state) + + def setFoldDefault(self): + itemlist = list(self.root) + for item in itemlist[:-1]: + if item.is_folded: + item.setExpanded(False) + + def getCheckList(self): + checklist = [] + for i in self.root: + checklist.append((i.checkState(0) == Qt.Checked)) + return checklist + + def restoreCheckList(self, checklist, tst_ctrl: TestSetController): + itemlist = reversed(list(self.root)) + for item in itemlist: + state = checklist.pop(len(checklist)-1) + if item is not self.root: + skipped = tst_ctrl.control("skipped_state", item_id=item.id) + if skipped: + item.setDisabled(True) + for i in range(item.childCount()): + item.child(i).setExpanded(False) + else: + if state: + item.setCheckState( + self.cols['name']['index'], Qt.Checked) + else: + item.setCheckState( + self.cols['name']['index'], Qt.Unchecked) + self.updateTestSetItemState(item, tst_ctrl, state, unitary=True) + # item.setDisabled(False) + + def resized(self, col, old_size, size): + for k, v in self.cols.items(): + if v['index'] == col: + self.cols[k]['size'] = size + + def saveSizes(self): + sav = {} + for k, v in self.cols.items(): + sav.update({k: self.cols[k]['size']}) + + prefs.settings.columns_size = sav diff --git a/src/testium/main_win/test_tree_items/__init__.py b/src/testium/main_win/test_tree_items/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testium/main_win/test_tree_items/common.py b/src/testium/main_win/test_tree_items/common.py new file mode 100644 index 0000000..6b81afd --- /dev/null +++ b/src/testium/main_win/test_tree_items/common.py @@ -0,0 +1,19 @@ + +TEST_COLS = { + 'name': {'name': 'Name', 'index': 0, 'size': 300}, + 'pause': {'name': 'Stop', 'index': 1, 'size': 16}, + 'type': {'name': 'Type', 'index': 2, 'size': 150}, + 'status': {'name': '', 'index': 3, 'size': 50}, + 'failure': {'name': 'Fails', 'index': 4, 'size': 50}, + 'desc': {'name': 'Result', 'index': 5, 'size': 100}, +} + +TEST_COLS_WITH_TIME = { + 'name': {'name': 'Name', 'index': 0, 'size': 300}, + 'pause': {'name': 'Stop', 'index': 1, 'size': 16}, + 'type': {'name': 'Type', 'index': 2, 'size': 150}, + 'status': {'name': '', 'index': 3, 'size': 50}, + 'duration': {'name': 'Time', 'index': 4, 'size': 50}, + 'failure': {'name': 'Fails', 'index': 5, 'size': 50}, + 'desc': {'name': 'Result', 'index': 6, 'size': 100}, +} diff --git a/src/testium/main_win/test_tree_items/test_tree_check.py b/src/testium/main_win/test_tree_items/test_tree_check.py new file mode 100644 index 0000000..c093729 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_check.py @@ -0,0 +1,9 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemCheckValue(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/verif.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_choices_dialog.py b/src/testium/main_win/test_tree_items/test_tree_choices_dialog.py new file mode 100644 index 0000000..acee934 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_choices_dialog.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemChoicesDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/Label.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_console.py b/src/testium/main_win/test_tree_items/test_tree_console.py new file mode 100644 index 0000000..c70b8fb --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_console.py @@ -0,0 +1,15 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemConsole(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.recursive_unfoldable = False + self.setRowIcon(icon_prefix() + "/terminal.png") + +class QTestTreeItemConsoleAction(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/terminal.png") diff --git a/src/testium/main_win/test_tree_items/test_tree_cycle.py b/src/testium/main_win/test_tree_items/test_tree_cycle.py new file mode 100644 index 0000000..ea4768f --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_cycle.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemCycle(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/cycle.png") + self.setExpanded(True) diff --git a/src/testium/main_win/test_tree_items/test_tree_func.py b/src/testium/main_win/test_tree_items/test_tree_func.py new file mode 100644 index 0000000..f2594f1 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_func.py @@ -0,0 +1,9 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemFunc(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/text-x-python.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_git.py b/src/testium/main_win/test_tree_items/test_tree_git.py new file mode 100644 index 0000000..bc28e7c --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_git.py @@ -0,0 +1,8 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemGit(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/git.png") diff --git a/src/testium/main_win/test_tree_items/test_tree_group.py b/src/testium/main_win/test_tree_items/test_tree_group.py new file mode 100644 index 0000000..680142b --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_group.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemGroup(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/group.png") + self.setExpanded(True) + diff --git a/src/testium/main_win/test_tree_items/test_tree_image_dialog.py b/src/testium/main_win/test_tree_items/test_tree_image_dialog.py new file mode 100644 index 0000000..75c0bd6 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_image_dialog.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemImageDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/image.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_item.py b/src/testium/main_win/test_tree_items/test_tree_item.py new file mode 100644 index 0000000..b9eb355 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_item.py @@ -0,0 +1,155 @@ +from itertools import chain +import html + +from PySide6.QtGui import (QIcon, QPixmap, QBrush, QColor) +from PySide6.QtCore import Qt +from PySide6.QtWidgets import (QTreeWidgetItem) +from interpreter.utils.icons import icon_prefix +from libs.testium import print_warn + + +def __iter__QTreeWidgetItem(self): + for item in chain(*map(iter, self.children())): + yield item + yield self + + +def childrenQTreeWidgetItem(self): + return [self.child(i) for i in range(self.childCount())] + + +QTreeWidgetItem.name = "" +QTreeWidgetItem.id = 0 +QTreeWidgetItem.__iter__ = __iter__QTreeWidgetItem +QTreeWidgetItem.children = childrenQTreeWidgetItem + + +def pretty_print_html(text): + if text.strip(" \t\n") == "": + return "" + + text = html.escape(text) # échappe <, >, etc. + return f"
{text}
" + + +class QTestTreeItem(QTreeWidgetItem): + def __init__(self, parent, test_set_item, cols): + index = parent.childCount() + super().__init__() + self.recursive_unfoldable = True + parent.insertChild(index, self) + self.name = test_set_item["name"] + self.doc = test_set_item["doc"] + self.content = pretty_print_html(test_set_item["content"]) + self.seq_filename = test_set_item["seq_filename"] + self._cols = cols + self.setText(self._cols["name"]["index"], self.name) + self.id = test_set_item["id"] + self.setType(test_set_item) + self.setFlags(self.flags() | Qt.ItemIsUserCheckable) + self.setCheckState(self._cols["name"]["index"], Qt.Checked) + self._is_highlighted = False + self._initial_brush = None + self._failure_list = None + parent.addChild(self) + self._has_failed = False + self._display_pause = False + self.icon_pause = QIcon() + self.icon_fake = QIcon() + self.icon_pause.addPixmap(QPixmap(icon_prefix() + "/stop.png")) + self.nfailure = 0 + self._timestamp = -1 + self._is_skipped = False + tool_tip = ( + None + if self.doc is None + else "" + self.name + "
" + str(self.doc) + ) + # tool_tip = ( + # tool_tip + # if self.content == "" + # else self.content if tool_tip is None else tool_tip + "
" + "_"*10 + self.content + # ) + self.setToolTip(self._cols["name"]["index"], tool_tip) + self.setToolTip(self._cols["type"]["index"], tool_tip) + + def setType(self, test_set_item): + # if hasattr(self, '_custom_type'): + # self.setText(self._cols['type']['index'], self._custom_type) + # else: + self.test_type = test_set_item["type"] + self.setText(self._cols["type"]["index"], self.test_type) + + def clearStatus(self): + self.clearStatusIcon() + self.nfailure = 0 + self.setText(self._cols["failure"]["index"], str(self.nfailure)) + + def clearStatusIcon(self): + icon = QIcon() + self.setIcon(self._cols["status"]["index"], icon) + self._has_failed = False + + def setStatusIcon(self, success): + icon = QIcon() + if success: + if self._has_failed: + icon.addPixmap(QPixmap(icon_prefix() + "/success_orange.png")) + else: + icon.addPixmap(QPixmap(icon_prefix() + "/success.png")) + else: + icon.addPixmap(QPixmap(icon_prefix() + "/fail.png")) + self._has_failed = True + self.nfailure = self.nfailure + 1 + self.setText(self._cols["failure"]["index"], str(self.nfailure)) + + self.setIcon(self._cols["status"]["index"], icon) + + def setBreakpoint(self): + if (self.__class__.__name__ == "QTestTreeItemUnittest") or ( + self.__class__.__name__ == "QTestTreeItemUnittestElement" + ): + return + self._display_pause = not self._display_pause + if self._display_pause: + self.setIcon(self._cols["pause"]["index"], self.icon_pause) + else: + self.setIcon(self._cols["pause"]["index"], self.icon_fake) + return self._display_pause + + def setBreakpointIfCol(self, column): + ret = False + if column == self._cols["pause"]["index"]: + ret = True + self.setBreakpoint() + return ret + + def isBreakpoint(self): + return self._display_pause + + def setHighlighted(self): + if not self._is_highlighted: + self._initial_brush = self.background(self._cols["name"]["index"]) + color = QBrush(QColor(153, 255, 153)) + self.setBackground(self._cols["name"]["index"], color) + self._is_highlighted = True + + def resetHighlighted(self): + if self._is_highlighted: + self.setBackground(self._cols["name"]["index"], self._initial_brush) + self._is_highlighted = False + + def setRowIcon(self, resource_off, resource_on=""): + + icon = QIcon() + icon.addPixmap(QPixmap(resource_off)) + if resource_on != "": + icon.addPixmap(QPixmap(resource_on), QIcon.Normal, QIcon.On) + self.setIcon(self._cols["name"]["index"], icon) + + def setTimestamp(self, val): + if (self._timestamp < 0) and (val > 0): + self._timestamp = val + + def timestamp(self): + return self._timestamp diff --git a/src/testium/main_win/test_tree_items/test_tree_jsonrpc.py b/src/testium/main_win/test_tree_items/test_tree_jsonrpc.py new file mode 100644 index 0000000..6a84680 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_jsonrpc.py @@ -0,0 +1,15 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemJSONRPCAction(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/JSON-LD.png") + +class QTestTreeItemJSONRPC(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.recursive_unfoldable = False + self.setRowIcon(icon_prefix() + "/JSON-LD.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_let.py b/src/testium/main_win/test_tree_items/test_tree_let.py new file mode 100644 index 0000000..0f70e49 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_let.py @@ -0,0 +1,9 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemLet(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/let.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_msg_dialog.py b/src/testium/main_win/test_tree_items/test_tree_msg_dialog.py new file mode 100644 index 0000000..85d6d77 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_msg_dialog.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemMsgDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/info.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_note_dialog.py b/src/testium/main_win/test_tree_items/test_tree_note_dialog.py new file mode 100644 index 0000000..14e55af --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_note_dialog.py @@ -0,0 +1,9 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemNoteDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/note.png") diff --git a/src/testium/main_win/test_tree_items/test_tree_question_dialog.py b/src/testium/main_win/test_tree_items/test_tree_question_dialog.py new file mode 100644 index 0000000..b5ed6bc --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_question_dialog.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemQuestionDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/question.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_report.py b/src/testium/main_win/test_tree_items/test_tree_report.py new file mode 100644 index 0000000..40468bb --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_report.py @@ -0,0 +1,8 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemReport(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/report.png") diff --git a/src/testium/main_win/test_tree_items/test_tree_run.py b/src/testium/main_win/test_tree_items/test_tree_run.py new file mode 100644 index 0000000..94d97e6 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_run.py @@ -0,0 +1,8 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemRun(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/testium_logo.svg") diff --git a/src/testium/main_win/test_tree_items/test_tree_runtime_plot.py b/src/testium/main_win/test_tree_items/test_tree_runtime_plot.py new file mode 100644 index 0000000..0d83803 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_runtime_plot.py @@ -0,0 +1,16 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreePlotAction(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/plot.png") + +class QTestTreePlot(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/plot.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_sleep.py b/src/testium/main_win/test_tree_items/test_tree_sleep.py new file mode 100644 index 0000000..a3b6256 --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_sleep.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemSleep(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/sleep.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_status_display.py b/src/testium/main_win/test_tree_items/test_tree_status_display.py new file mode 100644 index 0000000..986839e --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_status_display.py @@ -0,0 +1,24 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemStatusDisplay(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/checkList.png") + self.setExpanded(True) + +class QTestTreeItemStatusDisplayDevice(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/RIOV-2478BF.PNG") + self.setExpanded(True) + +class QTestTreeItemStatusDisplayTest(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/gears.png") + self.setExpanded(True) + + diff --git a/src/testium/main_win/test_tree_items/test_tree_tested_references_dialog.py b/src/testium/main_win/test_tree_items/test_tree_tested_references_dialog.py new file mode 100644 index 0000000..d73ebbd --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_tested_references_dialog.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemTestedRefsDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/Label.png") + diff --git a/src/testium/main_win/test_tree_items/test_tree_unittest.py b/src/testium/main_win/test_tree_items/test_tree_unittest.py new file mode 100644 index 0000000..e5e483b --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_unittest.py @@ -0,0 +1,16 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemUnittest(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/folder.png", ":/black/folder-open.png") + self.setExpanded(True) + +class QTestTreeItemUnittestElement(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + + super().__init__(parent, test_set_item, cols) + self.setRowIcon(icon_prefix() + "/document.png") diff --git a/src/testium/main_win/test_tree_items/test_tree_value_dialog.py b/src/testium/main_win/test_tree_items/test_tree_value_dialog.py new file mode 100644 index 0000000..0e8e36f --- /dev/null +++ b/src/testium/main_win/test_tree_items/test_tree_value_dialog.py @@ -0,0 +1,10 @@ + +from .test_tree_item import QTestTreeItem +from interpreter.utils.icons import icon_prefix + +class QTestTreeItemValueDialog(QTestTreeItem): + def __init__(self, parent, test_set_item, cols): + super().__init__(parent, test_set_item, cols) + + self.setRowIcon(icon_prefix() + "/question.png") + diff --git a/src/testium/main_win/testium_core_win.py b/src/testium/main_win/testium_core_win.py new file mode 100644 index 0000000..5a7d97d --- /dev/null +++ b/src/testium/main_win/testium_core_win.py @@ -0,0 +1,510 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'testium_core_win.ui' +## +## Created by: Qt User Interface Compiler version 6.10.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, + QCursor, QFont, QFontDatabase, QGradient, + QIcon, QImage, QKeySequence, QLinearGradient, + QPainter, QPalette, QPixmap, QRadialGradient, + QTransform) +from PySide6.QtWidgets import (QApplication, QCheckBox, QDockWidget, QFrame, + QHBoxLayout, QLabel, QLayout, QLineEdit, + QMainWindow, QMenu, QMenuBar, QPushButton, + QRadioButton, QSizePolicy, QSpacerItem, QStatusBar, + QTextEdit, QToolBar, QToolButton, QVBoxLayout, + QWidget) +import testium_core_win_rc + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(1081, 730) + font = QFont() + font.setFamilies([u"Sans"]) + font.setPointSize(10) + MainWindow.setFont(font) + icon = QIcon() + icon.addFile(u":/black/testium_logo.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + MainWindow.setWindowIcon(icon) + self.actionOpenTest = QAction(MainWindow) + self.actionOpenTest.setObjectName(u"actionOpenTest") + icon1 = QIcon() + icon1.addFile(u":/black/document-open.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionOpenTest.setIcon(icon1) + self.actionSave_report = QAction(MainWindow) + self.actionSave_report.setObjectName(u"actionSave_report") + icon2 = QIcon() + icon2.addFile(u":/black/document-save.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionSave_report.setIcon(icon2) + self.actionStart_test = QAction(MainWindow) + self.actionStart_test.setObjectName(u"actionStart_test") + icon3 = QIcon() + icon3.addFile(u":/black/media-playback-start.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionStart_test.setIcon(icon3) + self.actionStop_test = QAction(MainWindow) + self.actionStop_test.setObjectName(u"actionStop_test") + self.actionStop_test.setEnabled(False) + icon4 = QIcon() + icon4.addFile(u":/black/media-playback-stop.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionStop_test.setIcon(icon4) + self.actionAbout_testium = QAction(MainWindow) + self.actionAbout_testium.setObjectName(u"actionAbout_testium") + icon5 = QIcon() + icon5.addFile(u":/black/nespresso.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionAbout_testium.setIcon(icon5) + self.actionExit = QAction(MainWindow) + self.actionExit.setObjectName(u"actionExit") + icon6 = QIcon() + icon6.addFile(u":/black/system-log-out.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionExit.setIcon(icon6) + self.actionRefresh_test = QAction(MainWindow) + self.actionRefresh_test.setObjectName(u"actionRefresh_test") + icon7 = QIcon() + icon7.addFile(u":/black/view-refresh.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionRefresh_test.setIcon(icon7) + self.actionShow_Results = QAction(MainWindow) + self.actionShow_Results.setObjectName(u"actionShow_Results") + icon8 = QIcon() + icon8.addFile(u":/black/results.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionShow_Results.setIcon(icon8) + self.actionHelp = QAction(MainWindow) + self.actionHelp.setObjectName(u"actionHelp") + icon9 = QIcon() + icon9.addFile(u":/black/help.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionHelp.setIcon(icon9) + self.actionPreferences = QAction(MainWindow) + self.actionPreferences.setObjectName(u"actionPreferences") + icon10 = QIcon() + icon10.addFile(u":/black/gnome-settings.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionPreferences.setIcon(icon10) + self.actionTestInformation = QAction(MainWindow) + self.actionTestInformation.setObjectName(u"actionTestInformation") + icon11 = QIcon() + icon11.addFile(u":/black/info.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.actionTestInformation.setIcon(icon11) + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) + self.centralwidget.setSizePolicy(sizePolicy) + self.horizontalLayout_8 = QHBoxLayout(self.centralwidget) + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.widget = QWidget(self.centralwidget) + self.widget.setObjectName(u"widget") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth()) + self.widget.setSizePolicy(sizePolicy1) + self.widget.setMinimumSize(QSize(100, 0)) + self.widget.setBaseSize(QSize(0, 0)) + self.verticalLayout = QVBoxLayout(self.widget) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName(u"verticalLayout") + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.widget1 = QWidget(self.widget) + self.widget1.setObjectName(u"widget1") + sizePolicy1.setHeightForWidth(self.widget1.sizePolicy().hasHeightForWidth()) + self.widget1.setSizePolicy(sizePolicy1) + self.widget1.setMinimumSize(QSize(315, 0)) + self.horizontalLayout_2 = QHBoxLayout(self.widget1) + self.horizontalLayout_2.setSpacing(0) + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.horizontalLayout_2.setSizeConstraint(QLayout.SetMinimumSize) + self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) + self.frame_3 = QFrame(self.widget1) + self.frame_3.setObjectName(u"frame_3") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) + self.frame_3.setSizePolicy(sizePolicy2) +#if QT_CONFIG(accessibility) + self.frame_3.setAccessibleName(u"") +#endif // QT_CONFIG(accessibility) + self.frame_3.setFrameShape(QFrame.StyledPanel) + self.frame_3.setFrameShadow(QFrame.Raised) + self.horizontalLayout_9 = QHBoxLayout(self.frame_3) + self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") + self.horizontalLayout_9.setSizeConstraint(QLayout.SetMinimumSize) + self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0) + self.checkSelect = QCheckBox(self.frame_3) + self.checkSelect.setObjectName(u"checkSelect") + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.checkSelect.sizePolicy().hasHeightForWidth()) + self.checkSelect.setSizePolicy(sizePolicy3) + self.checkSelect.setMinimumSize(QSize(125, 0)) + self.checkSelect.setChecked(True) + self.checkSelect.setTristate(False) + + self.horizontalLayout_9.addWidget(self.checkSelect) + + self.checkFold = QCheckBox(self.frame_3) + self.checkFold.setObjectName(u"checkFold") + + self.horizontalLayout_9.addWidget(self.checkFold) + + self.label_runtime = QLabel(self.frame_3) + self.label_runtime.setObjectName(u"label_runtime") + sizePolicy2.setHeightForWidth(self.label_runtime.sizePolicy().hasHeightForWidth()) + self.label_runtime.setSizePolicy(sizePolicy2) + self.label_runtime.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter) + + self.horizontalLayout_9.addWidget(self.label_runtime) + + self.buttBlink = QPushButton(self.frame_3) + self.buttBlink.setObjectName(u"buttBlink") + sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) + sizePolicy4.setHorizontalStretch(0) + sizePolicy4.setVerticalStretch(0) + sizePolicy4.setHeightForWidth(self.buttBlink.sizePolicy().hasHeightForWidth()) + self.buttBlink.setSizePolicy(sizePolicy4) + self.buttBlink.setStyleSheet(u"QPushButton {\n" +" border-width: 1px;\n" +" border-style: solid;\n" +" }") + icon12 = QIcon() + icon12.addFile(u":/black/green.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.buttBlink.setIcon(icon12) + self.buttBlink.setIconSize(QSize(28, 28)) + self.buttBlink.setFlat(True) + + self.horizontalLayout_9.addWidget(self.buttBlink) + + + self.horizontalLayout_2.addWidget(self.frame_3, 0, Qt.AlignTop) + + + self.verticalLayout.addWidget(self.widget1) + + + self.horizontalLayout_8.addWidget(self.widget) + + MainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QStatusBar(MainWindow) + self.statusbar.setObjectName(u"statusbar") + MainWindow.setStatusBar(self.statusbar) + self.toolBar = QToolBar(MainWindow) + self.toolBar.setObjectName(u"toolBar") + self.toolBar.setLayoutDirection(Qt.LeftToRight) + self.toolBar.setIconSize(QSize(24, 24)) + self.toolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) + MainWindow.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar) + self.menuBar = QMenuBar(MainWindow) + self.menuBar.setObjectName(u"menuBar") + self.menuBar.setGeometry(QRect(0, 0, 1081, 30)) + self.menuFile = QMenu(self.menuBar) + self.menuFile.setObjectName(u"menuFile") + self.menuTest = QMenu(self.menuBar) + self.menuTest.setObjectName(u"menuTest") + self.menuA_propos = QMenu(self.menuBar) + self.menuA_propos.setObjectName(u"menuA_propos") + MainWindow.setMenuBar(self.menuBar) + self.logDockWidget = QDockWidget(MainWindow) + self.logDockWidget.setObjectName(u"logDockWidget") + sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Minimum) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.logDockWidget.sizePolicy().hasHeightForWidth()) + self.logDockWidget.setSizePolicy(sizePolicy5) + font1 = QFont() + font1.setFamilies([u"Sans"]) + font1.setPointSize(9) + font1.setStyleStrategy(QFont.PreferAntialias) + self.logDockWidget.setFont(font1) + self.logDockWidget.setFeatures(QDockWidget.DockWidgetFloatable|QDockWidget.DockWidgetMovable) + self.logDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) + self.dockWidgetContents = QWidget() + self.dockWidgetContents.setObjectName(u"dockWidgetContents") + font2 = QFont() + font2.setFamilies([u"Sans"]) + font2.setPointSize(10) + font2.setStyleStrategy(QFont.PreferDefault) + self.dockWidgetContents.setFont(font2) + self.horizontalLayout_7 = QHBoxLayout(self.dockWidgetContents) + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.frame = QFrame(self.dockWidgetContents) + self.frame.setObjectName(u"frame") + sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + sizePolicy6.setHorizontalStretch(0) + sizePolicy6.setVerticalStretch(0) + sizePolicy6.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) + self.frame.setSizePolicy(sizePolicy6) + self.verticalLayout_3 = QVBoxLayout(self.frame) + self.verticalLayout_3.setSpacing(2) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.verticalLayout_3.setContentsMargins(4, 4, 4, 4) + self.logSettingsBox = QFrame(self.frame) + self.logSettingsBox.setObjectName(u"logSettingsBox") + self.horizontalLayout_5 = QHBoxLayout(self.logSettingsBox) + self.horizontalLayout_5.setSpacing(5) + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.horizontalLayout_5.setContentsMargins(5, 5, 5, 5) + self.widget_6 = QWidget(self.logSettingsBox) + self.widget_6.setObjectName(u"widget_6") + self.verticalLayout_9 = QVBoxLayout(self.widget_6) + self.verticalLayout_9.setSpacing(0) + self.verticalLayout_9.setObjectName(u"verticalLayout_9") + self.verticalLayout_9.setContentsMargins(0, 0, 0, 0) + self.buttLogFileNone = QRadioButton(self.widget_6) + self.buttLogFileNone.setObjectName(u"buttLogFileNone") + self.buttLogFileNone.setChecked(True) + + self.verticalLayout_9.addWidget(self.buttLogFileNone) + + self.buttLogFileSaved = QRadioButton(self.widget_6) + self.buttLogFileSaved.setObjectName(u"buttLogFileSaved") + + self.verticalLayout_9.addWidget(self.buttLogFileSaved) + + + self.horizontalLayout_5.addWidget(self.widget_6) + + self.horizontalSpacer_3 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_3) + + self.widget_5 = QWidget(self.logSettingsBox) + self.widget_5.setObjectName(u"widget_5") + self.verticalLayout_8 = QVBoxLayout(self.widget_5) + self.verticalLayout_8.setSpacing(0) + self.verticalLayout_8.setObjectName(u"verticalLayout_8") + self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) + self.label = QLabel(self.widget_5) + self.label.setObjectName(u"label") + + self.verticalLayout_8.addWidget(self.label) + + self.editLogFilePath = QLineEdit(self.widget_5) + self.editLogFilePath.setObjectName(u"editLogFilePath") + + self.verticalLayout_8.addWidget(self.editLogFilePath) + + + self.horizontalLayout_5.addWidget(self.widget_5) + + self.buttLogFilePath = QToolButton(self.logSettingsBox) + self.buttLogFilePath.setObjectName(u"buttLogFilePath") + sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) + sizePolicy7.setHorizontalStretch(0) + sizePolicy7.setVerticalStretch(0) + sizePolicy7.setHeightForWidth(self.buttLogFilePath.sizePolicy().hasHeightForWidth()) + self.buttLogFilePath.setSizePolicy(sizePolicy7) + + self.horizontalLayout_5.addWidget(self.buttLogFilePath) + + self.horizontalSpacer_4 = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_4) + + + self.verticalLayout_3.addWidget(self.logSettingsBox) + + self.frame1 = QFrame(self.frame) + self.frame1.setObjectName(u"frame1") + self.verticalLayout_2 = QVBoxLayout(self.frame1) + self.verticalLayout_2.setSpacing(1) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.verticalLayout_2.setContentsMargins(1, 1, 1, 1) + self.widget_2 = QWidget(self.frame1) + self.widget_2.setObjectName(u"widget_2") + self.horizontalLayout_4 = QHBoxLayout(self.widget_2) + self.horizontalLayout_4.setSpacing(0) + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) + self.widget_3 = QWidget(self.widget_2) + self.widget_3.setObjectName(u"widget_3") + self.verticalLayout_7 = QVBoxLayout(self.widget_3) + self.verticalLayout_7.setSpacing(0) + self.verticalLayout_7.setObjectName(u"verticalLayout_7") + self.verticalLayout_7.setContentsMargins(0, 0, 0, 0) + + self.horizontalLayout_4.addWidget(self.widget_3) + + self.label_2 = QLabel(self.widget_2) + self.label_2.setObjectName(u"label_2") + font3 = QFont() + font3.setFamilies([u"Sans"]) + font3.setPointSize(10) + font3.setBold(True) + font3.setStyleStrategy(QFont.PreferAntialias) + self.label_2.setFont(font3) + + self.horizontalLayout_4.addWidget(self.label_2) + + self.widget_7 = QWidget(self.widget_2) + self.widget_7.setObjectName(u"widget_7") + self.horizontalLayout_6 = QHBoxLayout(self.widget_7) + self.horizontalLayout_6.setSpacing(5) + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) + + self.horizontalLayout_4.addWidget(self.widget_7) + + self.horizontalSpacer_2 = QSpacerItem(40, 10, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_4.addItem(self.horizontalSpacer_2) + + self.buttClearLog = QToolButton(self.widget_2) + self.buttClearLog.setObjectName(u"buttClearLog") + icon13 = QIcon() + icon13.addFile(u":/black/edit-clear.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.buttClearLog.setIcon(icon13) + + self.horizontalLayout_4.addWidget(self.buttClearLog) + + self.buttGoBottom = QToolButton(self.widget_2) + self.buttGoBottom.setObjectName(u"buttGoBottom") + icon14 = QIcon() + icon14.addFile(u":/black/go-bottom.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.buttGoBottom.setIcon(icon14) + self.buttGoBottom.setCheckable(False) + self.buttGoBottom.setChecked(False) + self.buttGoBottom.setToolButtonStyle(Qt.ToolButtonIconOnly) + + self.horizontalLayout_4.addWidget(self.buttGoBottom) + + + self.verticalLayout_2.addWidget(self.widget_2) + + + self.verticalLayout_3.addWidget(self.frame1) + + + self.horizontalLayout_7.addWidget(self.frame) + + self.logDockWidget.setWidget(self.dockWidgetContents) + MainWindow.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.logDockWidget) + self.DocDockWidget = QDockWidget(MainWindow) + self.DocDockWidget.setObjectName(u"DocDockWidget") + self.DocDockWidget.setEnabled(True) + self.DocDockWidget.setFloating(False) + self.DocDockWidget.setFeatures(QDockWidget.DockWidgetFloatable|QDockWidget.DockWidgetMovable) + self.dockWidgetContents_2 = QWidget() + self.dockWidgetContents_2.setObjectName(u"dockWidgetContents_2") + self.horizontalLayout_10 = QHBoxLayout(self.dockWidgetContents_2) + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.textEditTestDoc = QTextEdit(self.dockWidgetContents_2) + self.textEditTestDoc.setObjectName(u"textEditTestDoc") + font4 = QFont() + font4.setFamilies([u"Arial"]) + font4.setPointSize(11) + self.textEditTestDoc.setFont(font4) + self.textEditTestDoc.setUndoRedoEnabled(False) + self.textEditTestDoc.setReadOnly(True) + + self.horizontalLayout_10.addWidget(self.textEditTestDoc) + + self.DocDockWidget.setWidget(self.dockWidgetContents_2) + MainWindow.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.DocDockWidget) + + self.toolBar.addAction(self.actionOpenTest) + self.toolBar.addAction(self.actionRefresh_test) + self.toolBar.addSeparator() + self.toolBar.addAction(self.actionTestInformation) + self.toolBar.addAction(self.actionSave_report) + self.toolBar.addAction(self.actionShow_Results) + self.toolBar.addAction(self.actionHelp) + self.toolBar.addSeparator() + self.toolBar.addAction(self.actionStart_test) + self.toolBar.addAction(self.actionStop_test) + self.toolBar.addSeparator() + self.toolBar.addAction(self.actionExit) + self.menuBar.addAction(self.menuFile.menuAction()) + self.menuBar.addAction(self.menuTest.menuAction()) + self.menuBar.addAction(self.menuA_propos.menuAction()) + self.menuFile.addAction(self.actionOpenTest) + self.menuFile.addAction(self.actionRefresh_test) + self.menuFile.addSeparator() + self.menuFile.addAction(self.actionExit) + self.menuTest.addAction(self.actionStart_test) + self.menuTest.addAction(self.actionStop_test) + self.menuTest.addSeparator() + self.menuTest.addAction(self.actionTestInformation) + self.menuTest.addAction(self.actionSave_report) + self.menuTest.addAction(self.actionShow_Results) + self.menuTest.addSeparator() + self.menuTest.addSeparator() + self.menuTest.addAction(self.actionPreferences) + self.menuA_propos.addAction(self.actionAbout_testium) + self.menuA_propos.addAction(self.actionHelp) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"testium", None)) + self.actionOpenTest.setText(QCoreApplication.translate("MainWindow", u"&Open Test", None)) +#if QT_CONFIG(tooltip) + self.actionOpenTest.setToolTip(QCoreApplication.translate("MainWindow", u"Open a test set", None)) +#endif // QT_CONFIG(tooltip) + self.actionSave_report.setText(QCoreApplication.translate("MainWindow", u"&Save Results", None)) + self.actionSave_report.setIconText(QCoreApplication.translate("MainWindow", u"Save Results", None)) +#if QT_CONFIG(tooltip) + self.actionSave_report.setToolTip(QCoreApplication.translate("MainWindow", u"Save Results", None)) +#endif // QT_CONFIG(tooltip) + self.actionStart_test.setText(QCoreApplication.translate("MainWindow", u"Start test", None)) + self.actionStop_test.setText(QCoreApplication.translate("MainWindow", u"Stop test", None)) + self.actionAbout_testium.setText(QCoreApplication.translate("MainWindow", u"About testium", None)) + self.actionExit.setText(QCoreApplication.translate("MainWindow", u"Exit", None)) + self.actionRefresh_test.setText(QCoreApplication.translate("MainWindow", u"Refresh test", None)) + self.actionShow_Results.setText(QCoreApplication.translate("MainWindow", u"Show &Results", None)) +#if QT_CONFIG(tooltip) + self.actionShow_Results.setToolTip(QCoreApplication.translate("MainWindow", u"Show test results in external editor", None)) +#endif // QT_CONFIG(tooltip) + self.actionHelp.setText(QCoreApplication.translate("MainWindow", u"Help", None)) +#if QT_CONFIG(tooltip) + self.actionHelp.setToolTip(QCoreApplication.translate("MainWindow", u"testium help", None)) +#endif // QT_CONFIG(tooltip) + self.actionPreferences.setText(QCoreApplication.translate("MainWindow", u"Preferences", None)) +#if QT_CONFIG(tooltip) + self.actionPreferences.setToolTip(QCoreApplication.translate("MainWindow", u"Application parameters adjustment", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(shortcut) + self.actionPreferences.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Shift+P", None)) +#endif // QT_CONFIG(shortcut) + self.actionTestInformation.setText(QCoreApplication.translate("MainWindow", u"Step &Information", None)) +#if QT_CONFIG(tooltip) + self.actionTestInformation.setToolTip(QCoreApplication.translate("MainWindow", u"Details on the selected test step", None)) +#endif // QT_CONFIG(tooltip) + self.checkSelect.setText(QCoreApplication.translate("MainWindow", u"Select all / deselect all", None)) + self.checkFold.setText(QCoreApplication.translate("MainWindow", u"Fold / Unfold", None)) + self.label_runtime.setText(QCoreApplication.translate("MainWindow", u"00:00:00", None)) + self.buttBlink.setText("") + self.toolBar.setWindowTitle(QCoreApplication.translate("MainWindow", u"toolBar", None)) + self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"&File", None)) + self.menuTest.setTitle(QCoreApplication.translate("MainWindow", u"&Test", None)) + self.menuA_propos.setTitle(QCoreApplication.translate("MainWindow", u"&Help", None)) + self.logDockWidget.setWindowTitle(QCoreApplication.translate("MainWindow", u"Log", None)) + self.buttLogFileNone.setText(QCoreApplication.translate("MainWindow", u"None", None)) + self.buttLogFileSaved.setText(QCoreApplication.translate("MainWindow", u"To file", None)) + self.label.setText(QCoreApplication.translate("MainWindow", u"Log file path", None)) + self.buttLogFilePath.setText(QCoreApplication.translate("MainWindow", u"...", None)) + self.label_2.setText(QCoreApplication.translate("MainWindow", u"Log View", None)) +#if QT_CONFIG(tooltip) + self.buttClearLog.setToolTip(QCoreApplication.translate("MainWindow", u"Clear the log view", None)) +#endif // QT_CONFIG(tooltip) + self.buttClearLog.setText(QCoreApplication.translate("MainWindow", u"...", None)) +#if QT_CONFIG(tooltip) + self.buttGoBottom.setToolTip(QCoreApplication.translate("MainWindow", u"

Uncheck this button to browse back the log

", None)) +#endif // QT_CONFIG(tooltip) + self.buttGoBottom.setText(QCoreApplication.translate("MainWindow", u"...", None)) + self.DocDockWidget.setWindowTitle(QCoreApplication.translate("MainWindow", u"Test doc", None)) + # retranslateUi + diff --git a/src/testium/main_win/testium_core_win.ui b/src/testium/main_win/testium_core_win.ui new file mode 100644 index 0000000..1373c37 --- /dev/null +++ b/src/testium/main_win/testium_core_win.ui @@ -0,0 +1,823 @@ + + + MainWindow + + + + 0 + 0 + 1081 + 730 + + + + + Sans + 10 + + + + testium + + + + :/black/testium_logo.png:/black/testium_logo.png + + + + + 0 + 0 + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 315 + 0 + + + + + 0 + + + QLayout::SetMinimumSize + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + QLayout::SetMinimumSize + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 125 + 0 + + + + Select all / deselect all + + + true + + + false + + + + + + + Fold / Unfold + + + + + + + + 0 + 0 + + + + 00:00:00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + QPushButton { + border-width: 1px; + border-style: solid; + } + + + + + + + :/black/green.png:/black/green.png + + + + 28 + 28 + + + + true + + + + + + + + + + + + + + + + + + toolBar + + + Qt::LeftToRight + + + + 24 + 24 + + + + Qt::ToolButtonTextUnderIcon + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + 0 + 0 + 1081 + 30 + + + + + &File + + + + + + + + + &Test + + + + + + + + + + + + + + &Help + + + + + + + + + + + + 0 + 0 + + + + + Sans + 9 + PreferAntialias + + + + QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable + + + Qt::AllDockWidgetAreas + + + Log + + + 2 + + + + + Sans + 10 + PreferDefault + + + + + + + + 0 + 0 + + + + + 2 + + + 4 + + + 4 + + + 4 + + + 4 + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + None + + + true + + + + + + + To file + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Log file path + + + + + + + + + + + + + + 0 + 0 + + + + ... + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Sans + 10 + true + PreferAntialias + + + + Log View + + + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 10 + + + + + + + + Clear the log view + + + ... + + + + :/black/edit-clear.png:/black/edit-clear.png + + + + + + + <html><head/><body><p>Uncheck this button to browse back the log</p></body></html> + + + ... + + + + :/black/go-bottom.png:/black/go-bottom.png + + + false + + + false + + + Qt::ToolButtonIconOnly + + + + + + + + + + + + + + + + + + true + + + false + + + QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable + + + Test doc + + + 8 + + + + + + + + Arial + 11 + + + + false + + + true + + + + + + + + + + :/black/document-open.png:/black/document-open.png + + + &Open Test + + + Open a test set + + + + + + :/black/document-save.png:/black/document-save.png + + + &Save Results + + + Save Results + + + Save Results + + + + + + :/black/media-playback-start.png:/black/media-playback-start.png + + + Start test + + + + + false + + + + :/black/media-playback-stop.png:/black/media-playback-stop.png + + + Stop test + + + + + + :/black/nespresso.png:/black/nespresso.png + + + About testium + + + + + + :/black/system-log-out.png:/black/system-log-out.png + + + Exit + + + + + + :/black/view-refresh.png:/black/view-refresh.png + + + Refresh test + + + + + + :/black/results.png:/black/results.png + + + Show &Results + + + Show test results in external editor + + + + + + :/black/help.png:/black/help.png + + + Help + + + testium help + + + + + + :/black/gnome-settings.png:/black/gnome-settings.png + + + Preferences + + + Application parameters adjustment + + + Ctrl+Shift+P + + + + + + :/black/info.png:/black/info.png + + + Step &Information + + + Details on the selected test step + + + + + + + + diff --git a/src/testium/main_win/testium_win.py b/src/testium/main_win/testium_win.py new file mode 100755 index 0000000..599fca3 --- /dev/null +++ b/src/testium/main_win/testium_win.py @@ -0,0 +1,1160 @@ +import sys +import os +import subprocess +import traceback +import webbrowser +from time import sleep +from tempfile import NamedTemporaryFile +from multiprocessing import Queue +from queue import Empty +from threading import Thread +import shutil +import ast + +# Qt +from PySide6 import QtGui, QtWidgets +from PySide6.QtGui import QAction, QShortcut, QIcon, QPixmap, QTextCursor, QDesktopServices, QTextCursor +from PySide6.QtCore import Slot, QUrl, Qt, QTimer, QDateTime + +from PySide6.QtWidgets import ( + QApplication, + QMainWindow, + QDialog, + QFileDialog, + QSizePolicy, +) + +ourPath = os.path.dirname(__file__) +sys.path.append(os.path.join(ourPath, "resources")) + +# user interfaces +from main_win.testium_core_win import Ui_MainWindow +from main_win.text_log import QTextLog +from main_win.about_win.about_win import Ui_About +from main_win.preference_win.preference_win import PrefWindow +from main_win.f1_win.d_f1_win import DialogF1 +from main_win.test_tree import QTestTree + +from main_win.test_run.thread_output import ThreadTestOutput +from interpreter.utils.string_queue import StringQueue +from interpreter.process import TestProcess +from interpreter.utils.test_ctrl import TestSetController +from interpreter.utils.icons import icon_prefix + +from main_win.test_run.outlog import OutLog +from main_win.test_run.test_run import ThreadTestStatus +import interpreter.utils.settings as prefs +from interpreter.utils.stdout_redirect import stdio_redir +import libs.testium as tm +from interpreter.utils.version import get_testium_version +from interpreter.utils.test_init import ( + env_init, + locate_report_file, +) +from interpreter.utils.tum_except import ETUMFileError, ETUMRuntimeError + + +class MainWindow(QMainWindow, Ui_MainWindow): + MaxRecentFiles = 5 + + def __init__( + self, + test_file=None, + config_files="", + runandclose=False, + log_file="", + defines={}, + report="", + report_type="", + report_pattern=[], + debug=False, + ): + super().__init__() + self.setupUi(self) + self.textLog = self.create_text_log(self.frame1) + self.verticalLayout_2.addWidget(self.textLog) + + icon2 = QtGui.QIcon() + icon2.addPixmap( + QtGui.QPixmap(icon_prefix() + "/edit-clear.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.buttClearLog.setIcon(icon2) + icon3 = QtGui.QIcon() + icon3.addPixmap( + QtGui.QPixmap(icon_prefix() + "/go-bottom.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.buttGoBottom.setIcon(icon3) + icon4 = QtGui.QIcon() + icon4.addPixmap( + QtGui.QPixmap(icon_prefix() + "/document-open.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionOpenTest.setIcon(icon4) + icon5 = QtGui.QIcon() + icon5.addPixmap( + QtGui.QPixmap(icon_prefix() + "/document-save.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionSave_report.setIcon(icon5) + icon6 = QtGui.QIcon() + icon6.addPixmap( + QtGui.QPixmap(icon_prefix() + "/media-playback-start.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionStart_test.setIcon(icon6) + icon7 = QtGui.QIcon() + icon7.addPixmap( + QtGui.QPixmap(icon_prefix() + "/media-playback-stop.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionStop_test.setIcon(icon7) + icon8 = QtGui.QIcon() + icon8.addPixmap( + QtGui.QPixmap(icon_prefix() + "/nespresso.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionAbout_testium.setIcon(icon8) + icon9 = QtGui.QIcon() + icon9.addPixmap( + QtGui.QPixmap(icon_prefix() + "/system-log-out.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionExit.setIcon(icon9) + icon10 = QtGui.QIcon() + icon10.addPixmap( + QtGui.QPixmap(icon_prefix() + "/view-refresh.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionRefresh_test.setIcon(icon10) + icon11 = QtGui.QIcon() + icon11.addPixmap( + QtGui.QPixmap(icon_prefix() + "/results.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionShow_Results.setIcon(icon11) + icon12 = QtGui.QIcon() + icon12.addPixmap( + QtGui.QPixmap(icon_prefix() + "/help.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionHelp.setIcon(icon12) + icon13 = QtGui.QIcon() + icon13.addPixmap( + QtGui.QPixmap(icon_prefix() + "/gnome-settings.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionPreferences.setIcon(icon13) + + icon14 = QtGui.QIcon() + icon14.addPixmap( + QtGui.QPixmap(icon_prefix() + "/info.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionTestInformation.setIcon(icon14) + + self.runandclose = runandclose + # Var init + self.mainWindowTitle = self.windowTitle() + self.logFileHandler = None + self.defines = defines + self.logFileName = log_file + self.reportFileName = report + self.report_type = report_type + self.report_pattern = report_pattern + self.config_files = config_files + self.recentFileActs = [] + self.debug = debug + self.test_proc = None + self.ts_controller = None + self.threadTestStatus = None + self._test_started = False + self._test_paused = False + self._signals_connected = False + + self.timer = QTimer() + self.timer.setSingleShot(False) + self.timer.stop() + self.timer.setInterval(100) + + self.timerBlink = QTimer() + self.timerBlink.setSingleShot(False) + self.timerBlink.stop() + self.timerBlink.setInterval(1000) + self.timerPause = QTimer() + self.timerPause.setSingleShot(False) + self.timerPause.stop() + self.timerPause.setInterval(500) + self.timerPause.state = False + self.iconBlinkGreen = QIcon() + self.iconBlinkGreen.addPixmap(QPixmap(icon_prefix() + "/green.png")) + self.iconBlinkRed = QIcon() + self.iconBlinkRed.addPixmap(QPixmap(icon_prefix() + "/red.png")) + self.iconBlinkGray = QIcon() + self.iconBlinkGray.addPixmap(QPixmap(icon_prefix() + "/gray.png")) + self.setBlinkGreen() + + self.threads_queue = Queue() + self.status_queue = Queue() + + env_init() + + # Persistence + self.pref_win = PrefWindow(self) + + lastLog = prefs.settings.log_file + if self.logFileName == "": + self.editLogFilePath.setText(lastLog) + self.logFileName = lastLog + if prefs.settings.log_file_saved: + self.buttLogFileSaved.setChecked(True) + else: + if not os.path.isabs(self.logFileName): + self.logFileName = os.path.join(os.getcwd(), self.logFileName) + self.buttLogFileSaved.setChecked(True) + self.editLogFilePath.setText(self.logFileName) + + geo_settings = prefs.settings.value( + prefs.SettingsItem("geometry", bytearray), bytearray() + ) + if geo_settings: + self.restoreGeometry(geo_settings) + + state_settings = prefs.settings.value( + prefs.SettingsItem("state", bytearray), bytearray() + ) + if state_settings: + self.restoreState(state_settings) + + # disable the action buttons + self.actionStart_test.setDisabled(True) + self.actionShow_Results.setDisabled(True) + self.actionSave_report.setDisabled(True) + + # Tree Test + self.create_tree() + + # Shortcuts + self.shorcut_stop = QShortcut( + Qt.Key_Space, + self.treeTests, + context=Qt.WidgetShortcut, + activated=self.on_spacePressed, + ) + self.shorcut_f1 = QShortcut( + Qt.Key_F1, + self.treeTests, + context=Qt.WidgetShortcut, + activated=self.on_F1Pressed, + ) + + # Main Window items modifications + self.actionRefresh_test.setDisabled(True) + + # Connection of the handlers + self.buttLogFilePath.pressed.connect(self.on_buttLogFilePath_clicked) + self.buttClearLog.pressed.connect(self.on_buttClearLog_clicked) + self.buttGoBottom.pressed.connect(self.on_buttGoBottom_clicked) + self.editLogFilePath.editingFinished.connect(self.on_configLog_changed) + self.buttLogFileSaved.toggled.connect(self.on_configLogSaved_changed) + self.buttLogFileNone.toggled.connect(self.on_configLogNone_changed) + self.timer.timeout.connect(self.on_timerEvent) + self.timerBlink.timeout.connect(self.on_timerBlinkEvent) + self.timerBlink.timeout.connect(self.on_timerCount) + self.timerPause.timeout.connect(self.on_timerPause) + self.treeTests.itemSelectionChanged.connect(self.on_testSelectionChanged) + if prefs.settings.dbl_click_enabled: + self.treeTests.setExpandsOnDoubleClick(False) + self.treeTests.itemDoubleClicked.connect(self.on_testItemDblClicked) + else: + self.treeTests.setExpandsOnDoubleClick(True) + QApplication.instance().lastWindowClosed.connect(self.on_exiting) + + self.prefs_apply_font() + self.prefs_apply_font_size() + + # Recent files + for i in range(MainWindow.MaxRecentFiles): + self.recentFileActs.append( + QAction(self, visible=False, triggered=self.on_openRecentFile) + ) + self.separatorAct = self.menuFile.addSeparator() + for i in range(MainWindow.MaxRecentFiles): + self.menuFile.addAction(self.recentFileActs[i]) + self.updateRecentFileActions() + + # A propos + self.d_about_win = QDialog() + self.about_win = Ui_About() + + self.about_win.setupUi(self.d_about_win) + self.about_win.labelVersion.setText("testium - " + get_testium_version()) + self.about_win.labelCesUnitVersion.setText("") + self.d_about_win.setModal(True) + + # F1 window + self.d_f1_win = DialogF1(self) + + self.stream = StringQueue() # stream used to log output + stdio_redir.redirect(self.stream) + self.threadOutput = ThreadTestOutput(self.stream, self.threads_queue) + self.threadOutput.start() + + self.out_log = OutLog() + self.out_log.logToBeAppended.connect(self.on_logToBeAppended) + self.redirectStdToTextLog(self.out_log) + self.testFile = test_file + + self.threadTestStatus = ThreadTestStatus(self.status_queue, debug=self.debug) + self.threadTestStatus.start() + + self.update_from_prefs() + + # report file name treatment + self.reportFileName = locate_report_file(self.reportFileName) + + # open the last opened file if it exists. + + last_files = prefs.settings.recent_files + ret = False + if test_file != "": + if not os.path.isabs(test_file): + test_file = os.path.join(os.getcwd(), test_file) + if os.path.isfile(test_file): + ret = self.loadTestSetFile(test_file) + elif (len(last_files) > 0) and os.path.isfile(last_files[0]): + ret = self.loadTestSetFile(last_files[0]) + + # In case of successfull loading of a file, we need to update the fold and checked state + if ret: + self.file_loaded_at_startup() + + # connect the test status + self.threadTestStatus.testSetIsFinished.connect(self.on_runFinished) + self.threadTestStatus.statusToBeUpdated.connect(self.treeTests.updateStatus) + self.reconnect_signals() + + if runandclose: + self.on_actionStart_test_triggered() + + def create_text_log(self, parent): + textLog = QTextLog(parent) + return textLog + + def create_tree(self): + self.treeTests = QTestTree(self.widget) + self.treeTests.setEnabled(True) + sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.treeTests.sizePolicy().hasHeightForWidth()) + self.treeTests.setSizePolicy(sizePolicy) + self.treeTests.breakpoint.connect(self.on_breakpoint) + self.verticalLayout.addWidget(self.treeTests) + + def remove_tree(self): + self.verticalLayout.removeWidget(self.treeTests) + del self.treeTests + self.treeTests = None + + def file_loaded_at_startup(self): + modeSlider_value = prefs.settings.show_checkboxes + + # Apply production/Lab state + if modeSlider_value: + # restore check boxes state if in lab mode + checkList = prefs.settings.value(prefs.SettingsItem("checkList", list), []) + if checkList is not None: + if len(checkList) == self.treeTests.getItemCount(): + self.treeTests.restoreCheckList(checkList, self.ts_controller) + + else: + tm.print_info( + "The number of tests has changed. Test box states are not restored." + ) + + # Apply treeview visibility + foldList = prefs.settings.value(prefs.SettingsItem("foldList", list), []) + if foldList: + if len(foldList) == self.treeTests.getItemCount(): + self.checkFold.setCheckState(Qt.PartiallyChecked) + self.treeTests.restoreFoldList(foldList) + + def disconnect_signals(self): + if self._signals_connected: + # disconnect the GUI + self.checkSelect.stateChanged.disconnect() + self.treeTests.itemChanged.disconnect() + self.checkFold.stateChanged.disconnect() + self.treeTests.itemCollapsed.disconnect() + self.treeTests.itemExpanded.disconnect() + self._signals_connected = False + + def reconnect_signals(self): + if not self._signals_connected: + # reconnect the GUI + self.checkSelect.stateChanged.connect(self.on_selectDeselectAll) + self.treeTests.itemChanged.connect(self.on_testChecked) + self.checkFold.stateChanged.connect(self.on_checkFoldChanged) + self.treeTests.itemCollapsed.connect(self.on_itemFoldChanged) + self.treeTests.itemExpanded.connect(self.on_itemFoldChanged) + self._signals_connected = True + + def prefs_apply_font(self): + f = self.textLog.font() + f.fromString(prefs.settings.log_font) + self.textLog.setFont(f) + + def prefs_apply_font_size(self): + f = self.textLog.font() + f.setPointSize(prefs.settings.log_font_size) + self.textLog.setFont(f) + + def reload_test_set_file(self, file_name: str): + self.disconnect_signals() + self.clear_process() + self.loadTestSetFile(file_name) + self.reconnect_signals() + + def clear_process(self): + if ( + self.test_proc is not None + and self.test_proc.is_alive() + and (self.ts_controller is not None) + ): + self.ts_controller.control("stop") + self.ts_controller.control("close") + self.test_proc.join() + del self.test_proc + self.test_proc = None + del self.ts_controller + self.ts_controller = None + + @Slot() + def on_actionOpenTest_triggered(self): + d = "" + if self.testFile is not None: + d = os.path.dirname(self.testFile) + file_name, _ = QFileDialog.getOpenFileName( + self, "Open the test file", d, "testium file (*.tum);;All Files (*)" + ) + if file_name: + self.reload_test_set_file(file_name) + + def startPauseTimer(self): + self.timerPause.setSingleShot(False) + self.timerPause.setInterval(500) + self.timerPause.start() + self.timerPause.state = False + + @Slot() + def on_actionStart_test_triggered(self): + # Test to be paused + if self._test_started: + if not self._test_paused: + self.ts_controller.control("pause") + self.startPauseTimer() + else: + + # Test to be continued + self.ts_controller.control("cont") + self.timerPause.stop() + self.timerPause.state = False + self.on_timerPause() + + self._test_paused = not self._test_paused + return + + # Test to be started + self.start_time = QDateTime.currentDateTime() + + # log file definition + log_file = self.editLogFilePath.text() + if self.buttLogFileSaved.isChecked() and (log_file != ""): + try: + if not os.path.isabs(log_file): + default_path = prefs.settings.log_path + default_path = self.ts_controller.control( + "process_param", param=default_path + ) + log_file = os.path.join(default_path, log_file) + # if the directory does not exist + if not os.path.exists(os.path.dirname(log_file)): + os.makedirs(os.path.dirname(log_file)) + # If the file exists + if os.path.isfile(log_file): + i = 0 + fname = log_file + while os.path.isfile(fname): + i += 1 + fname = log_file + "-" + str(i) + ".saved" + + os.rename(log_file, fname) + self.logFileHandler = open(log_file, "w") + self.out_log.set(self.logFileHandler) + self.logFileName = log_file + except: + self.logFileHandler = NamedTemporaryFile( + mode="w", suffix=".log", delete=False + ) + self.out_log.set(self.logFileHandler) + self.logFileName = self.logFileHandler.name + else: + self.logFileHandler = NamedTemporaryFile( + mode="w", suffix=".log", delete=False + ) + self.out_log.set(self.logFileHandler) + self.logFileName = self.logFileHandler.name + + # Report file definition + rep_file = self.ts_controller.control( + "process_param", param=self.reportFileName + ) + self.ts_controller.control( + "report", + rep_path=rep_file, + rep_type=self.report_type, + pattern=self.report_pattern, + ) + self.adaptInterfaceDuringTest() + self.treeTests.clearAllStatus() + try: + self.textLog.clear() + self.textLog.appendPlainText("Test is started\n") + self.timer.setSingleShot(False) + self.timer.setInterval(100) + self.timer.start() + # Add the log file to the std test_outputs + self.ts_controller.control("set_test_outputs", outputs=[self.logFileName]) + # Launch the test + self.ts_controller.control("execute") + except: + print(traceback.format_exc()) + self.restoreInterfaceAfterTest() + + def on_runFinished(self): + self.timer.setSingleShot(True) + self.timer.setInterval(1000) + txt = self.stream.read() + self.textLog.appendPlainText(txt) + self.restoreInterfaceAfterTest() + + if self.logFileHandler is not None: + self.out_log.reset() + self.logFileHandler.write(txt + "\n") + self.logFileHandler.close() + + self.logFileHandler = None + + self.textLog.appendPlainText("Test is finished") + if self.runandclose: + self.on_actionExit_triggered() + + @Slot() + def on_actionStop_test_triggered(self): + self.ts_controller.control("stop") + + def save_settings(self): + prefs.settings.set_value( + prefs.SettingsItem("geometry", bytearray), bytearray(self.saveGeometry()) + ) + prefs.settings.set_value( + prefs.SettingsItem("state", bytearray), bytearray(self.saveState()) + ) + prefs.settings.set_value( + prefs.SettingsItem("checkList", list), self.treeTests.getCheckList() + ) + prefs.settings.set_value( + prefs.SettingsItem("foldList", list), self.treeTests.getFoldList() + ) + self.treeTests.saveSizes() + prefs.settings.sync() + + @Slot() + def on_actionExit_triggered(self): + self.close() + + def on_exiting(self): + if not self._test_started: + self.save_settings() + self.clear_process() + self.threadTestStatus.stop() + self.threadOutput.stop() + self.threadOutput.wait() + self.threadTestStatus.wait() + + @Slot() + def on_actionAbout_testium_triggered(self): + self.d_about_win.setVisible(True) + + @Slot() + def on_actionPreferences_triggered(self): + result = self.pref_win.exec() + if result == QDialog.Accepted: + self.update_from_prefs() + if self.pref_win.isChanged(prefs.settings.SettingsShowCheckboxes): + self.show_checkboxes() + if self.pref_win.isChanged(prefs.settings.SettingsDblClickEnabled): + if prefs.settings.dbl_click_enabled: + self.treeTests.itemDoubleClicked.connect(self.on_testItemDblClicked) + else: + self.treeTests.itemDoubleClicked.disconnect() + if self.pref_win.isChanged(prefs.settings.SettingsLogFont): + self.prefs_apply_font() + if self.pref_win.isChanged(prefs.settings.SettingsLogFontSize): + self.prefs_apply_font_size() + + @Slot() + def on_actionRefresh_test_triggered(self): + self.on_exiting() + args = [] + if not hasattr(sys, "frozen"): + args += [sys.executable] + args += [sys.argv[0]] + + if len(self.defines) > 0: + for k, v in self.defines.items(): + try: + val = ast.literal_eval(v) + except: + val = v + + args += ["-d", f"{k}={val}"] + + if (self.testFile is not None) and (isinstance(self.testFile, str)): + args += [self.testFile] + + os.execv(sys.executable, args) + + @Slot() + def on_actionSave_report_triggered(self): + + if self.testFile: + initialPath = os.path.dirname(self.testFile) + else: + initialPath = None + + fileName, _ = QFileDialog.getSaveFileName( + self, "Path to Log file", initialPath, "Log Files (*.log);;All Files (*)" + ) + if fileName: + shutil.copy(self.logFileName, fileName) + + @Slot() + def on_actionShow_Results_triggered(self): + s = sys.platform + self.statusBar().showMessage( + "Opening the logfile (" + s + "): " + self.logFileName, 100000 + ) + QDesktopServices.openUrl(QUrl.fromLocalFile(self.logFileName)) + + @Slot() + def on_actionHelp_triggered(self): + self.webbrowser_open() + + def webbrowser_open(self): + def open_browser_thread(): + webbrowser.open( + "https://git.beafrancois.fr/Foue/testium/src/branch/master/doc/manual/testium_manual.pdf", + new=2, + autoraise=True, + ) + + thread = Thread(target=open_browser_thread) + thread.daemon = True + thread.start() + + @Slot() + def on_actionTestInformation_triggered(self): + if not self.d_f1_win.isVisible(): + self.d_f1_win.show() + + def on_openRecentFile(self): + action = self.sender() + if action: + self.reload_test_set_file(action.data()) + + def on_buttLogFilePath_clicked(self): + + if self.editLogFilePath.text() != "": + initialPath = os.path.dirname(self.editLogFilePath.text()) + elif self.testFile: + initialPath = os.path.dirname(self.testFile) + else: + initialPath = None + + fileName, _ = QFileDialog.getSaveFileName( + self, "Path to log file", initialPath, "Log Files (*.log);;All Files (*)" + ) + if fileName: + self.editLogFilePath.setText(fileName) + self.on_configLog_changed() + + def on_selectDeselectAll(self): + state = self.checkSelect.checkState() + self.disconnect_signals() + try: + if state == Qt.Checked: + self.treeTests.checkUncheckAll(self.ts_controller, True) + elif state == Qt.Unchecked: + self.treeTests.checkUncheckAll(self.ts_controller, False) + finally: + self.reconnect_signals() + + def on_testChecked(self, item, index): + self.checkSelect.setCheckState(Qt.PartiallyChecked) + self.disconnect_signals() + try: + self.treeTests.updateTreeCheckState(item, self.ts_controller) + finally: + self.reconnect_signals() + + @Slot() + def on_testSelectionChanged(self): + items = self.treeTests.selectedItems() + if len(items) > 0: + doc = items[0].doc + tmstmp = items[0].timestamp() + self.textEditTestDoc.setText("" + items[0].name + ":
") + if str(doc) != "": + self.textEditTestDoc.append(doc) + if tmstmp > 0: + text = self.textLog.toPlainText() + index = text.find(f"@@{tmstmp}@@") + if index != -1: + cursor = self.textLog.textCursor() + cursor.setPosition(index) + self.textLog.setTextCursor(cursor) + # obtain the vertical position of the cursor + block_number = cursor.blockNumber() + scrollbar = self.textLog.verticalScrollBar() + # Position the vert scrollbar to the right location + scrollbar.setValue(block_number) + + # Content of the F1 window is updated + self.update_f1_window(items[0]) + if self.d_f1_win.isVisible(): + self.d_f1_win.raise_() + + # When the test is selected, an attemp to move the log edit + # to the test is done. + # rmk: it has no effect when test is running. It is due to QPlainTextEdit + # limitations + if tmstmp > 0: + # Place the cursor at the begining of the text + cursor = self.textLog.textCursor() + cursor.movePosition(QTextCursor.Start) + self.textLog.setTextCursor(cursor) + # Find the timestamp + if self.textLog.find(f"@@{tmstmp}@@"): + cursor = self.textLog.textCursor() + ln = cursor.block().blockNumber() + # Move the scrollbar to the text + self.textLog.verticalScrollBar().setValue(ln) + cursor.clearSelection() + self.textLog.setTextCursor(cursor) + + def on_testItemDblClicked(self, item, col): + isBrkpointCol = item.setBreakpointIfCol(col) + if isBrkpointCol: + if item.isBreakpoint(): + self.ts_controller.control("add_breakpoint", item_id=item.id) + else: + self.ts_controller.control("del_breakpoint", item_id=item.id) + return + + s = sys.platform + + if (self.logFileName is not None) and os.access(self.logFileName, os.R_OK): + ln = tm.line_number("@@{}@@".format(item.timestamp()), self.logFileName) + + if ln > 0: + os.system("{} -g {}:{} &".format("code", self.logFileName, ln + 1)) + + def on_spacePressed(self): + item = self.treeTests.currentItem() + add_breakpoint = item.setBreakpoint() + if add_breakpoint: + self.ts_controller.control("add_breakpoint", item_id=item.id) + else: + self.ts_controller.control("del_breakpoint", item_id=item.id) + + def on_F1Pressed(self): + item = self.treeTests.currentItem() + self.update_f1_window(item) + self.d_f1_win.setVisible(True) + + # @Slot() + def on_breakpoint(self): + self._test_paused = True + self.startPauseTimer() + + def on_checkFoldChanged(self): + self.disconnect_signals() + try: + if self.checkFold.checkState() != Qt.Unchecked: + self.treeTests.foldAll(True) + self.checkFold.setCheckState(Qt.Checked) + else: + self.treeTests.foldAll(False) + finally: + self.reconnect_signals() + + def on_itemFoldChanged(self): + self.disconnect_signals() + try: + self.checkFold.setCheckState(Qt.PartiallyChecked) + finally: + self.reconnect_signals() + + def on_buttClearLog_clicked(self): + self.textLog.clear() + + def on_buttGoBottom_clicked(self): + self.textLog.moveCursor(QtGui.QTextCursor.End) + self.textLog.ensureCursorVisible() + + def on_configLog_changed(self): + prefs.settings.log_file = self.editLogFilePath.text() + + def on_configLogSaved_changed(self): + prefs.settings.log_file_saved = self.buttLogFileSaved.isChecked() + + def on_configLogNone_changed(self): + prefs.settings.log_file_saved = not self.buttLogFileNone.isChecked() + + def on_timerEvent(self): + text_to_append = [] + while not self.threads_queue.empty(): + text_to_append.append(self.threads_queue.get()) + + if len(text_to_append) > 0: + for t in text_to_append: + self.textLog.appendPlainText(t) + + if self.logFileHandler is not None: + self.logFileHandler.write(t + "\n") + self.logFileHandler.flush() + # os.fsync(self.logFileHandler) + + def on_timerBlinkEvent(self): + if self.buttBlink.current_color != "gray": + self.setBlinkGray() + elif self.treeTests.getGlobalSuccess(): + self.setBlinkGreen() + else: + self.setBlinkRed() + + def on_timerPause(self): + if self._test_paused: + icon = QtGui.QIcon() + if self.timerPause.state: + icon.addPixmap( + QtGui.QPixmap(icon_prefix() + "/pause2.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + else: + icon.addPixmap( + QtGui.QPixmap(icon_prefix() + "/pause.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.timerPause.state = not self.timerPause.state + self.actionStart_test.setIcon(icon) + + def on_timerCount(self): + secfromstart = self.start_time.secsTo(QDateTime.currentDateTime()) + self.label_runtime.setText( + "%02d:%02d:%02d" + % (secfromstart / 3600, (secfromstart / 60) % 60, secfromstart % 60) + ) + + def on_logToBeAppended(self, m): + self.textLog.moveCursor(QtGui.QTextCursor.End) + self.textLog.insertPlainText(m) + + def update_from_prefs(self): + self.hide_doc_pane() + self.hide_log_pane() + + def hide_doc_pane(self): + if prefs.settings.hide_doc_pane: + self.DocDockWidget.hide() + else: + self.DocDockWidget.show() + + def hide_log_pane(self): + if prefs.settings.hide_log_pane: + self.logDockWidget.hide() + else: + self.logDockWidget.show() + + def show_checkboxes(self, hidden=None): + if hidden: + h = hidden + else: + h = prefs.settings.show_checkboxes + if h: + # lab mode + if hasattr(self, "treeTests"): + self.disconnect_signals() + self.treeTests.addCheckBoxes() + self.reconnect_signals() + self.checkSelect.setEnabled(True) + else: + # production mode + if hasattr(self, "treeTests"): + self.treeTests.checkUncheckAll(self.ts_controller, True) + self.disconnect_signals() + self.treeTests.removeCheckBoxes() + self.reconnect_signals() + self.checkSelect.setDisabled(True) + + def addFileToRecent(self, filename): + files = prefs.settings.recent_files + + try: + files.remove(filename) + except ValueError: + pass + + files.insert(0, filename) + del files[MainWindow.MaxRecentFiles :] + + prefs.settings.recent_files = files + + for widget in QApplication.topLevelWidgets(): + if isinstance(widget, MainWindow): + widget.updateRecentFileActions() + + def updateRecentFileActions(self): + files = prefs.settings.recent_files + + numRecentFiles = min(len(files), MainWindow.MaxRecentFiles) + + for i in range(numRecentFiles): + text = "&%d %s" % (i + 1, self.strippedName(files[i])) + self.recentFileActs[i].setText(text) + self.recentFileActs[i].setData(files[i]) + self.recentFileActs[i].setVisible(True) + + for j in range(numRecentFiles, MainWindow.MaxRecentFiles): + self.recentFileActs[j].setVisible(False) + + self.separatorAct.setVisible((numRecentFiles > 0)) + + def update_f1_window(self, tree_item): + self.d_f1_win.ui.typeLineEdit.setText(tree_item.test_type) + self.d_f1_win.ui.sequenceFileNameLineEdit.setText(tree_item.seq_filename) + if tree_item.content is not None and tree_item.content != "": + self.d_f1_win.ui.TestContentEdit.setText(tree_item.content) + else: + self.d_f1_win.ui.TestContentEdit.setText("") + + def strippedName(self, fullFileName): + fname = os.path.basename(fullFileName) + fdir = os.path.dirname(fullFileName) + if len(fdir) > 30: + return os.path.join("... " + fdir[30:], fname) + else: + return fullFileName + + def loadTestSetFile(self, file_name): + """Load the tests: + return True if it succeeds, False otherwise. + """ + try: + if not file_name: + raise ETUMFileError("No file to load") + + file_name = os.path.abspath(file_name) + initial_dir = os.path.dirname(file_name) + + if not os.path.isdir(initial_dir): + raise ETUMFileError("Could not find %s directory" % (initial_dir)) + if not os.path.isfile(file_name): + raise ETUMFileError("Could not find %s file" % (file_name)) + + self.testFile = None + self.ts_controller = TestSetController() + self.test_proc = TestProcess( + file_name, + self.status_queue, + self.ts_controller, + self.config_files, + self.defines, + ) + self.test_proc.start() + while self.test_proc.is_alive(): + try: + if self.ts_controller.control("loaded", timeout=0.1): + break + except Empty: + self.ts_controller.clear() + + if not self.test_proc.is_alive(): + del self.test_proc + self.test_proc = None + del self.ts_controller + self.ts_controller = None + + raise ETUMRuntimeError( + "Test could not be loaded (test process crashed for any reason)" + ) + + test_data = self.ts_controller.control("tree") + self.treeTests.clear() + self.treeTests.loadTestRecursively( + self.treeTests.invisibleRootItem(), test_data + ) + self.treeTests.setFoldDefault() + self.treeTests.updateTreeSkipState(self.ts_controller) + + self.checkSelect.setChecked(True) + self.testFile = file_name + test_dir = os.path.dirname(self.testFile) + + sys.path.append(test_dir) + self.statusBar().showMessage("Test file loaded", 10000) + self.textLog.set_test_dir(test_dir) + self.addFileToRecent(file_name) + self.setWindowTitle(self.mainWindowTitle + " - " + self.testFile) + self.actionStart_test.setEnabled(True) + self.actionRefresh_test.setEnabled(True) + + self.show_checkboxes() + return True + except: + self.statusBar().showMessage("No test file could be loaded", 10000) + self.treeTests.clear() + print(traceback.format_exc()) + return False + + def adaptInterfaceDuringTest(self): + try: + self.disconnect_signals() + # disable run and reload button + self.actionOpenTest.setDisabled(True) + self.actionExit.setDisabled(True) + icon = QtGui.QIcon() + icon.addPixmap( + QtGui.QPixmap(icon_prefix() + "/pause.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionStart_test.setIcon(icon) + self.actionStart_test.setText("Pause test") + self.actionPreferences.setDisabled(True) + self.actionRefresh_test.setDisabled(True) + self.actionShow_Results.setDisabled(True) + self.actionSave_report.setDisabled(True) + self.logSettingsBox.setDisabled(True) + self.actionStop_test.setEnabled(True) + if prefs.settings.show_checkboxes: + self._checklist = self.treeTests.getCheckList() + self.treeTests.removeCheckBoxes() + self.checkSelect.setDisabled(True) + self.checkFold.setDisabled(True) + self.timerBlink.setSingleShot(False) + self.timerBlink.setInterval(1000) + self.timerBlink.start() + self.setBlinkGreen() + self.treeTests.clearGlobalSuccess() + finally: + self._test_started = True + + def restoreInterfaceAfterTest(self): + try: + self.timerPause.stop() + self.timerBlink.stop() + # enable run and reload button + self.actionOpenTest.setEnabled(True) + self.actionExit.setEnabled(True) + icon = QtGui.QIcon() + icon.addPixmap( + QtGui.QPixmap(icon_prefix() + "/media-playback-start.png"), + QtGui.QIcon.Normal, + QtGui.QIcon.Off, + ) + self.actionStart_test.setIcon(icon) + self.actionStart_test.setText("Start test") + self.actionPreferences.setEnabled(True) + self.actionRefresh_test.setEnabled(True) + self.actionStop_test.setDisabled(True) + self.actionShow_Results.setEnabled(True) + self.actionSave_report.setEnabled(True) + self.logSettingsBox.setEnabled(True) + if prefs.settings.show_checkboxes: + self.checkSelect.setEnabled(True) + self.treeTests.showCheckBoxes(self._checklist, self.ts_controller) + self.checkFold.setEnabled(True) + self.treeTests.setChildrenEnabled() + self.reconnect_signals() + if self.treeTests.getGlobalSuccess(): + self.setBlinkGreen() + else: + self.setBlinkRed() + finally: + self._test_started = False + + def redirectStdToTextLog(self, txtlog=None): + if txtlog is None: + stdio_redir.restore() + else: + stdio_redir.redirect(txtlog) + + def setBlinkGreen(self): + self.buttBlink.setIcon(self.iconBlinkGreen) + self.buttBlink.current_color = "green" + + def setBlinkRed(self): + self.buttBlink.setIcon(self.iconBlinkRed) + self.buttBlink.current_color = "red" + + def setBlinkGray(self): + self.buttBlink.setIcon(self.iconBlinkGray) + self.buttBlink.current_color = "gray" + + +def MainWin( + test_file=None, + config_files="", + run=False, + log_file="", + defines="", + report="", + report_type="", + report_pattern=[], + debug=False, +): + app = QApplication(sys.argv) + app.setDesktopFileName("Testium") + ui = MainWindow( + test_file, + config_files, + run, + log_file, + defines, + report, + report_type, + report_pattern, + debug, + ) + + ui.show() + sys.exit(app.exec_()) diff --git a/src/testium/main_win/text_log.py b/src/testium/main_win/text_log.py new file mode 100644 index 0000000..84546ab --- /dev/null +++ b/src/testium/main_win/text_log.py @@ -0,0 +1,73 @@ +import os + +from PySide6.QtCore import Qt, QUrl +from PySide6.QtWidgets import QPlainTextEdit, QSizePolicy +from PySide6.QtGui import QCursor, QDesktopServices, QFont + +from main_win.text_log_highlighter import TextLogHighlighter + +import libs.testium as tm + +class QTextLog(QPlainTextEdit): + def __init__(self, parent): + super().__init__(parent) + sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) + self.setSizePolicy(sizePolicy) + font = QFont() + font.setFamily("Monospace") + font.setPointSize(8) + font.setStyleStrategy(QFont.PreferAntialias) + self.setFont(font) + self.setLayoutDirection(Qt.LeftToRight) + self.setLineWrapMode(QPlainTextEdit.NoWrap) + self.setReadOnly(True) + self.setMaximumBlockCount(100000) + self.setObjectName("textLog") + + self._test_dir = "" + + self.highlight = TextLogHighlighter(self.document()) + self.setMouseTracking(True) + self.pattern_file = self.highlight.pattern_file + + def _path_at_pos(self, event): + """Returns the complete path under the mouse, otherwise none""" + cursor = self.cursorForPosition(event.pos()) + block = cursor.block() + text = block.text() + pos_in_block = cursor.positionInBlock() + + for match in self.pattern_file.finditer(text): + start, end = match.span() + if start <= pos_in_block <= end: + return match.group() + return None + + def mouseMoveEvent(self, event): + path = self._path_at_pos(event) + if path is not None: + self.viewport().setCursor(QCursor(Qt.PointingHandCursor)) + else: + self.viewport().setCursor(QCursor(Qt.IBeamCursor)) + + super().mouseMoveEvent(event) + + def mousePressEvent(self, event): + if event.button() == Qt.LeftButton: + raw_path = self._path_at_pos(event) + if raw_path is not None: + path = os.path.expanduser(raw_path) + if not os.path.isabs(path): + if self._test_dir == "": + self._test_dir = os.getcwd() + path = os.path.join(self._test_dir, path) + if os.path.exists(path): + QDesktopServices.openUrl(QUrl.fromLocalFile(path)) + return # évite d'insérer du texte si clic + super().mousePressEvent(event) + + def set_test_dir(self, s): + self._test_dir = s \ No newline at end of file diff --git a/src/testium/main_win/text_log_highlighter.py b/src/testium/main_win/text_log_highlighter.py new file mode 100644 index 0000000..1ef8026 --- /dev/null +++ b/src/testium/main_win/text_log_highlighter.py @@ -0,0 +1,172 @@ +import re +from PySide6.QtGui import (QColor, QTextCharFormat, QFont, QSyntaxHighlighter) + +def format(color, style=''): + """Return a QTextCharFormat with the given attributes. + """ + _color = QColor() + _color.setNamedColor(color) + + _format = QTextCharFormat() + _format.setForeground(_color) + if 'bold' in style: + _format.setFontWeight(QFont.Bold) + if 'italic' in style: + _format.setFontItalic(True) + if 'small' in style: + _format.setFontPointSize(1) + return _format + + +# Syntax styles that can be shared by all languages +STYLES = { + 'keyword': format('red', 'bold'), + 'keyword2': format('green'), + 'keyword3': format('blue'), + 'keyword4': format('orange'), + 'keyword5': format('darkCyan'), + 'keyword6': format('darkBlue', 'bold'), + 'timestamp': format('lightGrey', 'small'), + 'operator': format('darkRed'), + 'brace': format('darkMagenta'), + 'defclass': format('black', 'bold'), + 'string': format('darkslategray'), + 'string2': format('darkCyan'), + 'comment': format('darkCyan', 'italic'), + 'self': format('black', 'italic'), + 'numbers': format('darkBlue'), +} + + +class TextLogHighlighter (QSyntaxHighlighter): + """Syntax highlighter for the Python language. + """ + # Python keywords + keywords = [ + 'assert', 'ASSERT', 'Assert' + 'fail', 'FAIL', 'Fail', 'Failed', 'FAILED', + 'error', 'ERROR', 'Error', + 'Error', 'raise' + ] + + keywords2 = [ + 'PASS', 'Passed', 'PASSED', 'OK', 'ok' + ] + + keywords3 = [ + 'step', 'STEP', 'Step', + 'True', 'true', 'TRUE', + 'False', 'false', 'FALSE', + ] + + keywords4 = [ + 'WARN', 'warning', 'Warning', 'WARNING', + 'DEBUG' + ] + + keywords5 = [ + 'INFO', + 'Skipped', 'skipped', 'SKIPPED', + 'Skip', 'skip', 'SKIP' + ] + keywords6 = [ + 'None' + ] + + # Python operators + operators = [ + '=', + # Comparison + '==', '!=', '<', '<=', '>', '>=', + # Arithmetic + '\+', '-', '\*', '/', '//', '\%', '\*\*', + # In-place + '\+=', '-=', '\*=', '/=', '\%=', + # Bitwise + '\^', '\|', '\&', '\~', '>>', '<<', + ] + + # Python braces + braces = [ + '\{', '\}', '\(', '\)', '\[', '\]', + ] + + def __init__(self, document): + super().__init__(document) + + rules = [] + + # Keyword, operator, and brace rules + rules += [(r'\b%s\b' % w, STYLES['keyword']) + for w in TextLogHighlighter.keywords] + rules += [(r'\b%s\b' % w, STYLES['keyword2']) + for w in TextLogHighlighter.keywords2] + rules += [(r'\b%s\b' % w, STYLES['keyword3']) + for w in TextLogHighlighter.keywords3] + rules += [(r'\b%s\b' % w, STYLES['keyword4']) + for w in TextLogHighlighter.keywords4] + rules += [(r'\b%s\b' % w, STYLES['keyword5']) + for w in TextLogHighlighter.keywords5] + rules += [(r'\b%s\b' % w, STYLES['keyword6']) + for w in TextLogHighlighter.keywords6] + rules += [(r'%s' % o, STYLES['operator']) + for o in TextLogHighlighter.operators] + rules += [(r'%s' % b, STYLES['brace']) + for b in TextLogHighlighter.braces] + + # All other rules + rules += [ + # 'self' + (r'\bself\b', STYLES['self']), + + # Double-quoted string, possibly containing escape sequences + (r'"[^"\\]*(\\.[^"\\]*)*"', STYLES['string']), + # Single-quoted string, possibly containing escape sequences + (r"'[^'\\]*(\\.[^'\\]*)*'", STYLES['string']), + + # # 'def' followed by an identifier + # (r'\bdef\b\s*(\w+)', 1, STYLES['defclass']), + # # 'class' followed by an identifier + # (r'\bclass\b\s*(\w+)', 1, STYLES['defclass']), + + # From '#' until a newline + (r'#[^\n]*', STYLES['comment']), + + # Numeric literals + (r'\b[+-]?[0-9]+[lL]?\b', STYLES['numbers']), + (r'\b[+-]?0[xX][0-9A-Fa-f]+[lL]?\b', STYLES['numbers']), + (r'\b[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\b', + STYLES['numbers']), + + # Timestamp + (r"@@[0-9]*@@", STYLES['timestamp']), + ] + + # Build a QRegularExpression for each pattern + self.rules = rules + + forbidden = r"[^\s\n\{\[\"]+" + self.pattern_file = re.compile( + r"(?:[A-Za-z]:\\" + forbidden + "|" # Windows C:\... + r"~" + forbidden + "|" # ~/... + r"\.{0,2}/" + forbidden + "|" # ./..., ../... + r"/" + forbidden + "|" # /... + r"[A-Za-z0-9_\-\.]+/" + forbidden + ")" + ) + # self.format_file = QTextCharFormat() + # self.format_file.setUnderlineStyle(QTextCharFormat.SingleUnderline) + # self.format_file.setForeground(Qt.blue) + + def highlightBlock(self, text): + """Apply syntax highlighting to the given block of text. + """ + for expression, format in self.rules: + for match in re.finditer(expression, text): + start, end = match.span() + self.setFormat(start, end-start, format) + + # for match in self.pattern_file.finditer(text): + # start, end = match.span() + # self.setFormat(start, end-start, self.format_file) + + self.setCurrentBlockState(0) diff --git a/src/testium/py_func/__init__.py b/src/testium/py_func/__init__.py new file mode 100755 index 0000000..1db779e --- /dev/null +++ b/src/testium/py_func/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +import multiprocessing +from py_func.tm import _init_api, remote_print +from interpreter.utils.stdout_redirect import stdio_redir + + +class TcpStdOut: + def __init__(self): + pass + + def write(self, s: str) -> None: + remote_print(s) + + def flush(self): + pass + + +def main(): + # This line sets the method for the "Process" function. It is required for Linux + # support of the test dialogs. + multiprocessing.set_start_method('spawn') + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("-p", "--port", type=int, help="port to listen to", + default="/etc/jsonrpc-echo.conf") + args = parser.parse_args() + + thrd_api = _init_api(args.port) + outstream = TcpStdOut() + stdio_redir.redirect(outstream) + # debug the server + # thrd_api.dbg_out = stdio_redir.ini_stdout + try: + while thrd_api.is_alive(): + thrd_api.join(1) + finally: + stdio_redir.restore() \ No newline at end of file diff --git a/src/testium/py_func/__main__.py b/src/testium/py_func/__main__.py new file mode 100644 index 0000000..741e890 --- /dev/null +++ b/src/testium/py_func/__main__.py @@ -0,0 +1,26 @@ +import os +import sys +import logging +import traceback + +logging.basicConfig( + level=logging.ERROR, + filename=os.path.join(os.path.normpath(os.getcwd()), "crash.txt"), + format="%(asctime)s - %(levelname)s - %(message)s" +) + +def exception_handler(typ_exc, value, trbk): + """Testium Exception handling""" + logging.error("An unmanaged exception occured", exc_info=(typ_exc, value, trbk)) + print(f"Critical failure : '{value}'.") + tb = traceback.format_exception(typ_exc, value, trbk) + print("".join(tb)) + +sys.excepthook = exception_handler + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) + +from py_func import main + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/src/testium/py_func/func_call.py b/src/testium/py_func/func_call.py new file mode 100644 index 0000000..20c4f36 --- /dev/null +++ b/src/testium/py_func/func_call.py @@ -0,0 +1,73 @@ +import sys +import importlib.util +import inspect +from pathlib import Path +import importlib +import traceback + +from interpreter.utils.tum_except import ETUMRuntimeError, ETUMSyntaxError +from py_func import tm + + +def abs_path_from_file(file): + abs_file_path = Path(file) + if not abs_file_path.is_absolute(): + tdir = tm.gd("test_directory") + abs_file_path = Path(tdir) / abs_file_path + abs_file_path = abs_file_path.resolve() + return abs_file_path + + +def func_module(file): + abs_file_path = abs_path_from_file(file) + + if not abs_file_path.is_file(): + raise ETUMSyntaxError(f'"{abs_file_path}" file could not be found') + + try: + sys.path.append(str(abs_file_path.parent)) + spec = importlib.util.spec_from_file_location( + abs_file_path.stem, + abs_file_path + ) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + except: + tb = traceback.format_exc() + raise ETUMRuntimeError("Error importing file.\n" + "\n".join(tb.splitlines())) + + return module + + +def func_exec(file: str, func_name: str, params: list, verbose: bool=True): + """Executes a python function and returns its result and reported values + """ + reported_values = {} + mod = func_module(file) + if verbose: + print("Function executed from {}".format( + inspect.getabsfile(mod))) + + # check of the FunctionItem descendants + fitems = [] + for name, cls in inspect.getmembers(mod): + if inspect.isclass(cls): + if issubclass(cls, tm.FunctionItem): + fitems.append(cls) + + oldstyle = True + if len(fitems) > 0: + for fitem in fitems: + if fitem.__name__ == func_name: + oldstyle = False + o = fitem() + res = o.exec(*params) + reported_values = o.reportedValues() + + if oldstyle: + res = getattr(mod, func_name)(*params) + + reported_values.update({'returned': res}) + + return res, reported_values \ No newline at end of file diff --git a/src/testium/py_func/handle.py b/src/testium/py_func/handle.py new file mode 100644 index 0000000..100b648 --- /dev/null +++ b/src/testium/py_func/handle.py @@ -0,0 +1,46 @@ +import sys +import traceback +from interpreter.utils.jrpc import JsonRpcSrv +from interpreter.utils.tum_except import ETUMRuntimeError, print_exception +from py_func.func_call import func_exec + + +class FuncHandler(JsonRpcSrv): + + def handle_request(self, method, params): + try: + if method == "func_call": + try: + file = params["file"] + fname = params["fname"] + args = params["params"] + verb = params["verbose"] + try: + res, reported_values = func_exec(file, fname, args, verb) + return { + "result": { + "returned_value": res, + "reported_values": reported_values, + } + } + except TypeError as e: + return { + "error": f'In file "{file}",\ncalling function "{fname}" with bad arguments ({args}).\nMessage is "{str(e)}"' + } + except Exception as e: + tb = traceback.format_exc() + return {"error": "\n".join(tb.splitlines())} + except Exception as e: + tb = traceback.format_exc() + return { + "error": f"bad jrpc req handler 'func_call' arguments ({"\n".join(tb.splitlines())}). To be reported to testium support team." + } + else: + return { + "error": f"unknown RPC request ({method}). To be reported to testium support team." + } + except: + print_exception(str(*sys.exc_info())) + raise ETUMRuntimeError( + "python Function item execution error. To be reported to testium support team." + ) diff --git a/src/testium/py_func/tm.py b/src/testium/py_func/tm.py new file mode 100644 index 0000000..b2f01d3 --- /dev/null +++ b/src/testium/py_func/tm.py @@ -0,0 +1,103 @@ +"""tm — proxy module exposing remote-callable API functions. + +This module dynamically exposes functions listed in +``interpreter.utils.api.SUPPORTED_API``. Each exposed function is a +thin wrapper that forwards the call to a running ``FuncHandler`` +instance (stored in ``_func_call_thread``). + +Typical usage: + >>> from testium.py_func import tm + >>> handler = tm._init_api(port) + >>> tm.some_api_function(args) + +Only after ``_init_api`` has been called will API functions be able to +send requests to the remote handler; otherwise an ``ETUMRuntimeError`` +is raised. +""" + +import sys +from py_func.handle import FuncHandler +from interpreter.utils.tum_except import ETUMRuntimeError +from interpreter.utils.api import SUPPORTED_API + +thismodule = sys.modules[__name__] +# Shared FuncHandler instance used to forward API calls. Remains None +# until `_init_api` is invoked. +_func_call_thread = None + + +############################################################################### +# Dynamically create module-level functions for each supported API name. +# Each generated function shares the implementation of `api_call` but +# has a distinct name used as the remote action identifier. +def _make_api(name): + def _wrapper(*params): + if _func_call_thread is not None: + res = _func_call_thread.call(name, params) + if "result" in res: + ret_val = res["result"] + elif "error" in res: + raise ETUMRuntimeError(f"api call to 'tm.{name}' failed with error '{res["error"]}'") + else: + raise ETUMRuntimeError("api call failure in jrpc client to be reported to testium support team.") + return ret_val + else: + raise ETUMRuntimeError("api not initialized") + _wrapper.__name__ = name + return _wrapper + +for k in SUPPORTED_API: + setattr(thismodule, k, _make_api(k)) + +def _init_api(port): + """Start and initialize the remote function handler. + + Starts a ``FuncHandler`` bound to ``port``, runs it and blocks until + it signals readiness. + + Args: + port: port number or identifier passed to ``FuncHandler``. + + Returns: + The initialized ``FuncHandler`` instance assigned to + ``_func_call_thread``. + """ + global _func_call_thread + _func_call_thread = FuncHandler(port) + _func_call_thread.start() + _func_call_thread.wait_ready() + return _func_call_thread + + +############################################################################### +def remote_print(*values): + """Forward print-like output to the remote handler. + + If a ``_func_call_thread`` is available, this function calls the + handler with action name ``"print"`` and the provided values. Errors + during forwarding are ignored because printing is best-effort. + """ + if _func_call_thread is not None: + try: + _func_call_thread.call("print", values) + except: + # Best-effort: ignore forwarding failures + pass + + +############################################################################### +class FunctionItem(): + """Class allowing extended capabilities of function.""" + module_count = 0 + + def __init__(self): + self._reported_value = {} + + def reportValue(self, key, value): + self._reported_value[key] = value + + def reportedValues(self): + return self._reported_value + + def exec(self): + pass diff --git a/test/robustness/console serial/rsl_terminal_robustness.tum b/test/robustness/console serial/rsl_terminal_robustness.tum new file mode 100644 index 0000000..5b1eb27 --- /dev/null +++ b/test/robustness/console serial/rsl_terminal_robustness.tum @@ -0,0 +1,69 @@ +# Main +################################################################################ +main: + name: Serial Terminal bug reproducer + version: 0.1 + steps: + - group: + name: Test preparation + steps: + - console: + name: Open RSL Simulator Terminal + console_name: RSL_simulator + steps: + - open: + protocol: terminal + terminal_path: $(rslsimulatorpath) + - writeln: "pwd" + - read_until: {expected: "$", timeout: 5} + - writeln: "./RSverify $(rsTx)" # /dev/ttyMUE1 + - read_until: {expected: "RSL controller>", timeout: 5} + - writeln: "setportconf 0 115200 none 8 1 1 255" + - read_until: {expected: "RSL controller>", timeout: 5} + - writeln: "send4ever 0 0" + - read_until: {expected: "RSL controller>", timeout: 5} + + - console: + name: Open the EUT console + console_name: cons_target + doc: Initiates the console of the target in order + to be ready to capture its traces. + stop_on_failure: True + steps: + - open: + protocol: serial + serial_port: $(rsRx) # /dev/ttyMUE2 + serial_baudrate: 115200 + + - loop: + name: Qualification loop + stop_on_failure: False + steps: + - py_func: + name: Capture the RS serial output + file: $(test_directory)/terminal_bug_reproducer.py + func_name: RetreiveData + param: + - cons_target + + - sleep: {timeout: 1} + +# Cleanup sequence +#------------------------------------------------------------------------------- + - group: + name: Cleanup + execute_on_stop: True + steps: + - console: + name: Close the target console + console_name: cons_target + execute_on_stop: True + steps: + - close: + + - console: + name: Close the RSL_simulator + console_name: RSL_simulator + execute_on_stop: True + steps: + - close: \ No newline at end of file diff --git a/test/robustness/console serial/terminal_bug_reproducer.py b/test/robustness/console serial/terminal_bug_reproducer.py new file mode 100644 index 0000000..f973851 --- /dev/null +++ b/test/robustness/console serial/terminal_bug_reproducer.py @@ -0,0 +1,26 @@ +import libs.testium as tm + +def RetreiveData(console_name): + print("--------------- retrieving data ---------------") + result = 0 + cons = tm.console(console_name) + + if cons is None: + print("--------------- The console does not exist ---------------") + else: + try: + is_finished = False + while not is_finished: + status, d = cons.read_until('\n', timeout=0, return_data=True, mute=True) + if 0 == status: + print("--------------- Data ---------------") + print(d) + else: + print("--------------- No data ---------------") + print("Status: ", status) + is_finished = True + except: + print("--------------- Error retrieving data ---------------") + result = -1 + + return result diff --git a/test/robustness/console terminal/generate_char.sh b/test/robustness/console terminal/generate_char.sh new file mode 100755 index 0000000..2dbc60e --- /dev/null +++ b/test/robustness/console terminal/generate_char.sh @@ -0,0 +1,9 @@ +chars='<=>| -,;:!/."()[]{}*\&#%+012345689abcdefghiklmnopqrstuvwxyzABCD' +for j in {1..256} ; +do + for i in {1..256} ; do + echo -n "${chars:RANDOM%${#chars}:1}" + done + echo + sleep 0.01 +done \ No newline at end of file diff --git a/test/robustness/console terminal/terminal_bug_reproducer.py b/test/robustness/console terminal/terminal_bug_reproducer.py new file mode 100644 index 0000000..f973851 --- /dev/null +++ b/test/robustness/console terminal/terminal_bug_reproducer.py @@ -0,0 +1,26 @@ +import libs.testium as tm + +def RetreiveData(console_name): + print("--------------- retrieving data ---------------") + result = 0 + cons = tm.console(console_name) + + if cons is None: + print("--------------- The console does not exist ---------------") + else: + try: + is_finished = False + while not is_finished: + status, d = cons.read_until('\n', timeout=0, return_data=True, mute=True) + if 0 == status: + print("--------------- Data ---------------") + print(d) + else: + print("--------------- No data ---------------") + print("Status: ", status) + is_finished = True + except: + print("--------------- Error retrieving data ---------------") + result = -1 + + return result diff --git a/test/robustness/console terminal/terminal_robustness.tum b/test/robustness/console terminal/terminal_robustness.tum new file mode 100644 index 0000000..2b3e24f --- /dev/null +++ b/test/robustness/console terminal/terminal_robustness.tum @@ -0,0 +1,50 @@ +# Main +################################################################################ +main: + name: Terminal bug reproducer + version: 0.1 + steps: + - group: + name: Test preparation + steps: + - console: + name: Open the EUT console + console_name: cons_target + doc: Initiates the console of the target in order + to be ready to capture its traces. + stop_on_failure: True + steps: + - open: + protocol: terminal + + - loop: + name: Qualification loop + stop_on_failure: False + steps: + - console: + name: write random data + console_name: cons_target + steps: + - writeln: bash $(test_directory)/generate_char.sh + + - py_func: + name: Capture the terminal output + file: $(test_directory)/terminal_bug_reproducer.py + func_name: RetreiveData + param: + - cons_target + + - sleep: {timeout: 1} + +# Cleanup sequence +#------------------------------------------------------------------------------- + - group: + name: Cleanup + execute_on_stop: True + steps: + - console: + name: Close the target console + console_name: cons_target + execute_on_stop: True + steps: + - close: \ No newline at end of file diff --git a/test/tmp/.gitkeep b/test/tmp/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test/validation/README.md b/test/validation/README.md new file mode 100644 index 0000000..13ab617 --- /dev/null +++ b/test/validation/README.md @@ -0,0 +1,10 @@ +# Validation + +This directory contains the necessary material to run the testium validation. + +Here is the documentation on how to configure the validation, run it and check that the +results are correct. + +# Tests + +TBD diff --git a/test/validation/items/check/check.py b/test/validation/items/check/check.py new file mode 100644 index 0000000..1bca2dc --- /dev/null +++ b/test/validation/items/check/check.py @@ -0,0 +1,3 @@ + +def echo(param): + return param \ No newline at end of file diff --git a/test/validation/items/check/param.yaml b/test/validation/items/check/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/check/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/check/test.tum b/test/validation/items/check/test.tum new file mode 100644 index 0000000..2819043 --- /dev/null +++ b/test/validation/items/check/test.tum @@ -0,0 +1,28 @@ + +- py_func: + name: Dummy_int + file: $(test_path)$(psep)check.py + func_name: echo + key: $(test)_PASS + param: + - 2 + +- py_func: + name: Dummy_str + file: $(test_path)$(psep)check.py + func_name: echo + key: $(test)_PASS + param: + - my taylor is rich + +- check: + name: Check condition on existing variable (PASS) + key: $(test)_PASS + values: + - $(fn_Dummy_int) > 1 + +- check: + name: Check condition on existing variable (FAIL) + key: $(test)_FAIL + values: + - '"tailor" in "$(fn_Dummy_str)"' \ No newline at end of file diff --git a/test/validation/items/common/conditional/conditional.py b/test/validation/items/common/conditional/conditional.py new file mode 100644 index 0000000..1bca2dc --- /dev/null +++ b/test/validation/items/common/conditional/conditional.py @@ -0,0 +1,3 @@ + +def echo(param): + return param \ No newline at end of file diff --git a/test/validation/items/common/conditional/image.jpg b/test/validation/items/common/conditional/image.jpg new file mode 100644 index 0000000..72f7bbd Binary files /dev/null and b/test/validation/items/common/conditional/image.jpg differ diff --git a/test/validation/items/common/conditional/test.tum b/test/validation/items/common/conditional/test.tum new file mode 100644 index 0000000..a5fe02a --- /dev/null +++ b/test/validation/items/common/conditional/test.tum @@ -0,0 +1,86 @@ + +# This loop illustrate the way to exit the loop upon operator answer +- loop: + doc: This loop illustrate the way to exit on a condition. + name: Infine loop with conditional exit + stop_on_failure: False + key: $(test)_PASS + steps: + - sleep: {name: small wait, timeout: 0.2} + - py_func: + name: Echo function + key: $(test)_PASS + file: $(test_path)$(psep)conditional$(psep)conditional.py + func_name: echo + param: + - $(loop_param) + + exit_condition: + value: "$(fn_Echo function) > 3" + +- let: + name: let + key: $(test)_PASS + eval: + - conditional_exec: "random.randint(1, 2)" + +- console: + name: Console creation + condition: "$(conditional_exec) == 1" + console_name: consname + doc: Opening the console + key: $(test)_PASS + steps: + - open: + protocol: terminal + terminal_path: $(test_directory) + +- console: + name: Console read_until with timeout + condition: "$(conditional_exec) == 1" + console_name: consname + key: $(test)_PASS + steps: + - read_until: {expected: "$(terminal_prompt)", timeout: 10} + +- console: + name: Console write + condition: "$(conditional_exec) == 1" + console_name: consname + key: $(test)_PASS + steps: + - writeln: echo 0 + +- sleep: + name: sleep item + condition: "$(conditional_exec) == 1" + timeout: 1 + +- console: + name: Console read_until immediate + condition: "$(conditional_exec) == 1" + console_name: consname + key: $(test)_PASS + steps: + - read_until: {expected: "0", timeout: 0} + +- console: + name: Console read_until immediate (2) + condition: "$(conditional_exec) == 1" + console_name: consname + key: $(test)_PASS + steps: + - read_until: {expected: "$(terminal_prompt)", timeout: 0} + +- console: + name: Console closure + condition: "$(conditional_exec) == 1" + console_name: consname + key: $(test)_PASS + steps: + - close: consname + +- sleep: + name: sleep item + condition: "$(conditional_exec) == 2" + timeout: 1 diff --git a/test/validation/items/common/param.yaml b/test/validation/items/common/param.yaml new file mode 100644 index 0000000..014c731 --- /dev/null +++ b/test/validation/items/common/param.yaml @@ -0,0 +1,5 @@ +dict_example: {nbr: 42, msg: "The Answer is 42"} +list_example: [42, msg: "The Answer is 42"] +str_example: "The Answer is 42" +nbr_example: 42 +no_param: Null \ No newline at end of file diff --git a/test/validation/items/common/results/results.py b/test/validation/items/common/results/results.py new file mode 100644 index 0000000..bdcaf55 --- /dev/null +++ b/test/validation/items/common/results/results.py @@ -0,0 +1,10 @@ + +def echo(param): + print(param) + return param + +def raise_issue(param): + raise RuntimeError(str(param)) + +def return_none(): + return None \ No newline at end of file diff --git a/test/validation/items/common/results/test.tum b/test/validation/items/common/results/test.tum new file mode 100644 index 0000000..8a63425 --- /dev/null +++ b/test/validation/items/common/results/test.tum @@ -0,0 +1,155 @@ +- group: + name : Expected Result + steps: + - py_func: + name: Return True expect True + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ True ] + expected_result: True + - py_func: + name: Return True expect False (must fail) + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ True ] + expected_result: False + - py_func: + name: Return None expect None + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: return_none + expected_result: None + - py_func: + name: Return None expect PASS + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: return_none + expected_result: PASS + - py_func: + name: Return None expect 14 (must fail) + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: return_none + expected_result: 14 + +- group: + name : Expected Result Last test result + steps: + - py_func: + name: result is 28 + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ 28 ] + - py_func: + name: check that the last test result is 28 + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ 28 ] + expected_result: "$(last_test_result)" + +- group: + name : Expected result Failure raised issue + steps: + - py_func: + name: Raise an issue (must fail) + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: raise_issue + param: [ $(str_example) ] + - py_func: + name: Raise an issue and expected the test to be FAIL + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: raise_issue + param: [ $(str_example) ] + expected_result: "FAIL" + - py_func: + name: Return a String expect a FAILURE (must fail) + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ $(str_example) ] + expected_result: "FAIL" + +- group: + name : process result + steps: + - py_func: + name: Process result equal String + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ $(str_example) ] + process_result: "'$(str_example)' == '$(result)'" + - py_func: + name: Process result string in the result (must fail) + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ $(str_example) ] + process_result: "'44' in '$(result)'" + - py_func: + name: Save the result in a global variable + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ 44 ] + process_result: "tm.setgd('process_result_value', $(result))" + - py_func: + name: Check the saved global variable + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ 44 ] + expected_result: $(process_result_value) + + - py_func: + name: Process result when result is None (must fail) + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: return_none + process_result: "$(result) is None" + +- group: + name : no_fail result + steps: + + - py_func: + name: Return True expect False but no_fail=True + no_fail: True + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ True ] + expected_result: False + + - py_func: + name: Return True expect False but no_fail=False (must fail) + no_fail: False + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ True ] + expected_result: False + + - py_func: + name: Return True expect False but no_fail expansed + no_fail: <@ bool(0) == False @> + key: $(test)_PASS + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ True ] + expected_result: False + + - py_func: + name: Return True expect False but no_fail expansed (must fail) + no_fail: <@ bool(1) == False @> + key: $(test)_FAIL + file: $(test_path)$(psep)results$(psep)results.py + func_name: echo + param: [ True ] + expected_result: False \ No newline at end of file diff --git a/test/validation/items/common/syntax_robustness/test.tum b/test/validation/items/common/syntax_robustness/test.tum new file mode 100644 index 0000000..57b049e --- /dev/null +++ b/test/validation/items/common/syntax_robustness/test.tum @@ -0,0 +1,16 @@ + +# No name declared +- sleep: {timeout: 0.2, key: $(test)_PASS} + +# Empty name declared +- sleep: + name: + timeout: 0.2 + key: $(test)_PASS + +# Empty doc declared +- sleep: + name: Empty "doc:" declared (must PASS) + doc: + timeout: 0.2 + key: $(test)_PASS \ No newline at end of file diff --git a/test/validation/items/common/test.tum b/test/validation/items/common/test.tum new file mode 100644 index 0000000..fe5f458 --- /dev/null +++ b/test/validation/items/common/test.tum @@ -0,0 +1,12 @@ +- group: + name : Results + steps: + - !include results/test.tum +- group: + name : Conditional + steps: + - !include conditional/test.tum +- group: + name : Various syntax robustness + steps: + - !include syntax_robustness/test.tum \ No newline at end of file diff --git a/test/validation/items/console/param.yaml b/test/validation/items/console/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/console/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/console/test.tum b/test/validation/items/console/test.tum new file mode 100644 index 0000000..6a10280 --- /dev/null +++ b/test/validation/items/console/test.tum @@ -0,0 +1,88 @@ + +- console: + name: Console creation + console_name: term + doc: Opening the console + key: $(test)_PASS + steps: + - open: + protocol: terminal + terminal_path: $(test_directory) + - writeln: echo "endOfOpen" + +- console: + name: Console read_until with timeout + console_name: term + key: $(test)_PASS + steps: + - read_until: {expected: endOfOpen, timeout: 5} + +- console: + name: Console write + console_name: term + key: $(test)_PASS + steps: + - writeln: echo 0 + +- sleep: + name: sleep item + timeout: 1 + +- console: + name: Console read_until immediate + console_name: term + key: $(test)_PASS + steps: + - read_until: {expected: "0", timeout: 0} + +- console: + name: Console write + console_name: term + key: $(test)_PASS + steps: + - writeln: echo "HelloConsole" + +- console: + name: Console read_until fail + console_name: term + key: $(test)_FAIL + steps: + - read_until: {expected: "Something never prints", timeout: 1} + +- console: + name: Console write + console_name: term + key: $(test)_PASS + steps: + - writeln: echo "HelloConsole" + +- console: + name: Console read_until no_fail + console_name: term + key: $(test)_PASS + steps: + - read_until: {expected: "Something never prints", timeout: 1, no_fail: true} + +- console: + name: Console read_until muted + console_name: term + key: $(test)_PASS + steps: + - writeln: echo "HelloConsole" + - read_until: {expected: "HelloConsole", timeout: 1, mute: true} + +- console: + name: Console read_until muted + console_name: term + key: $(test)_PASS + steps: + - writeln: echo "HelloConsole is PASS" && echo "endOfCmd" + - read_until: {expected: endOfCmd, timeout: 1, process_result: "'Hello' in r'''$(result)''' and 'PASS' in r'''$(result)''' "} + +- console: + name: Console closure + execute_on_stop: true + console_name: term + key: $(test)_PASS + steps: + - close: term diff --git a/test/validation/items/cycle/cycle.py b/test/validation/items/cycle/cycle.py new file mode 100644 index 0000000..4c85559 --- /dev/null +++ b/test/validation/items/cycle/cycle.py @@ -0,0 +1,12 @@ + +def donothing(): + return 0 + +def checkloopparam(loop_param): + if not(loop_param==12 or loop_param==20 or loop_param==30): + raise + return 0 + +def exitcondition(loop): + if loop == 3: + return True \ No newline at end of file diff --git a/test/validation/items/cycle/param.yaml b/test/validation/items/cycle/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/cycle/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/cycle/test.tum b/test/validation/items/cycle/test.tum new file mode 100644 index 0000000..fa9f351 --- /dev/null +++ b/test/validation/items/cycle/test.tum @@ -0,0 +1,34 @@ +- loop: + name: Cycle number of loops + iterator: 10 + key: $(test)_PASS + steps: + - py_func: + name: do nothing + file: $(test_path)$(psep)cycle.py + func_name: donothing + +- loop: + name: Cycle iterating on list + iterator: [12, 20, 30] + key: $(test)_PASS + steps: + - py_func: + name: check loop param + file: $(test_path)$(psep)cycle.py + func_name: checkloopparam + param: + - $(loop_param) + +- loop: + name: Infinite loop with exit condition + key: $(test)_PASS + steps: + - py_func: + name: do nothing + file: $(test_path)$(psep)cycle.py + func_name: donothing + + exit_condition: + file: $(test_path)$(psep)cycle.py + func_name: exitcondition \ No newline at end of file diff --git a/test/validation/items/dialogs/IMG_20140213_171455.jpg b/test/validation/items/dialogs/IMG_20140213_171455.jpg new file mode 100644 index 0000000..065d4d1 Binary files /dev/null and b/test/validation/items/dialogs/IMG_20140213_171455.jpg differ diff --git a/test/validation/items/dialogs/param.yaml b/test/validation/items/dialogs/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/dialogs/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/dialogs/test.tum b/test/validation/items/dialogs/test.tum new file mode 100644 index 0000000..062374e --- /dev/null +++ b/test/validation/items/dialogs/test.tum @@ -0,0 +1,61 @@ +- dialog_image: + name: dialog image PASS + condition: $(validation_dialogs) + question: click ok if you see the image + key: $(test)_PASS + filename: $(test_path)$(psep)IMG_20140213_171455.jpg + +- dialog_image: + name: dialog image FAIL + condition: $(validation_dialogs) + question: click cancel + key: $(test)_FAIL + filename: $(test_path)$(psep)IMG_20140213_171455.jpg + +- dialog_references: + name: dialog_reference PASS + condition: $(validation_dialogs) + key: $(test)_PASS + question: click ok + +- dialog_references: + name: dialog_reference FAIL + condition: $(validation_dialogs) + key: $(test)_FAIL + question: click cancel + +- dialog_value: + name: dialog_value PASS + condition: $(validation_dialogs) + key: $(test)_PASS + question: enter 123 and click ok + +- dialog_value: + name: dialog_value empty FAIL + condition: $(validation_dialogs) + key: $(test)_FAIL + question: enter nothing and click ok + +- dialog_value: + name: dialog_value canceled FAIL + condition: $(validation_dialogs) + key: $(test)_FAIL + question: enter nothing and click cancel + +- dialog_message: + name: dialog_message PASS + condition: $(validation_dialogs) + key: $(test)_PASS + question: click ok + +- dialog_question: + name: dialog_question PASS + condition: $(validation_dialogs) + key: $(test)_PASS + question: click yes + +- dialog_question: + name: dialog_question FAIL + condition: $(validation_dialogs) + key: $(test)_FAIL + question: click no diff --git a/test/validation/items/expanse/expanse.py b/test/validation/items/expanse/expanse.py new file mode 100644 index 0000000..1bca2dc --- /dev/null +++ b/test/validation/items/expanse/expanse.py @@ -0,0 +1,3 @@ + +def echo(param): + return param \ No newline at end of file diff --git a/test/validation/items/expanse/param.yaml b/test/validation/items/expanse/param.yaml new file mode 100644 index 0000000..ad62755 --- /dev/null +++ b/test/validation/items/expanse/param.yaml @@ -0,0 +1,12 @@ +expanse_select: blo + +expanse_table_bla: ["abcd", 1234, [5, 6, 7, 8]] +expanse_index_bla: 0 + +expanse_table_blo: ["efgh", 9012, [3, 4, 5, 6]] +expanse_index_blo: 1 + +expanse_index: $(expanse_index_$(expanse_select)) +expanse_table: $(expanse_table_$(expanse_select)) + +expanse_eval: <@$(expanse_index) == 1@> diff --git a/test/validation/items/expanse/test.tum b/test/validation/items/expanse/test.tum new file mode 100644 index 0000000..7509ead --- /dev/null +++ b/test/validation/items/expanse/test.tum @@ -0,0 +1,64 @@ +- check: + name: Check variables expansion is correct (PASS) + key: $(test)_PASS + values: + - $(expanse_index) == 1 + - $(expanse_table)[$(expanse_index)] == 9012 + - $(expanse_eval) == True + +- let: + name: Dynamic variables expansion + key: $(test)_PASS + values: + - expanse_select: <@"$(expanse_select)".replace("o", "a")@> + - expanse_index: $(expanse_index_$(expanse_select)) + - expanse_table: $(expanse_table_$(expanse_select)) + - expanse_eval: <@$(expanse_index) == 1@> + +- check: + name: Check variables expansion is correct (PASS) + key: $(test)_PASS + values: + - $(expanse_index) == 0 + - $(expanse_table)[$(expanse_index)] == "abcd" + - $(expanse_eval) == False + +- let: + name: Complex variables expansion + key: $(test)_PASS + values: + - var1: expanse + - var2: var + - var3: bla + - var4: blo + - expanse_var_bla: 3 + - expanse_blo_var: 5 + - expanse_complex: <@<@$(expanse_$(var2)_$(var3))*6@> + <@4*$($(var1)_$(var4)_$(var2))@>@> + +- check: + name: Check complex variables expansion is correct (PASS) + key: $(test)_PASS + values: + - $(expanse_complex) == 38 + +- let: + name: Variables expansion in object + key: $(test)_PASS + values: + - expanse_key: b + - expanse_var: 3 + - expanse_var_2: 6 + - expanse_object: + [ + { a: $(expanse_var_2), $(expanse_key): <@2**3@> }, + { + '<@"bla".replace("a", "o")@>': + [<@$(expanse_var)*$(expanse_var_2)@>, 25], + }, + ] + +- check: + name: Check complex variables expansion is correct (PASS) + key: $(test)_PASS + values: + - '$(expanse_object) == [{"a": 6, "b": 8}, {"blo": [18, 25]}]' diff --git a/test/validation/items/func/func.py b/test/validation/items/func/func.py new file mode 100644 index 0000000..a36081c --- /dev/null +++ b/test/validation/items/func/func.py @@ -0,0 +1,26 @@ +import py_func.tm as tm + +class ValidationTest(tm.FunctionItem): + def exec(self, param): + print(str(param)) + return 0 + +def donothing(): + return 0 + +def assertparam(param): + assert param + return 0 + +def checkglobal(param): + assert param=='test parameter' + return 0 + +def should_not_be_called(param): + raise + +def echo(param): + return param + +def tuple_return(first, second): + return first, second diff --git a/test/validation/items/func/param.yaml b/test/validation/items/func/param.yaml new file mode 100644 index 0000000..21d4048 --- /dev/null +++ b/test/validation/items/func/param.yaml @@ -0,0 +1 @@ +skipped_test_item: ['skipped_checkglobal'] \ No newline at end of file diff --git a/test/validation/items/func/test.tum b/test/validation/items/func/test.tum new file mode 100644 index 0000000..2c2e57e --- /dev/null +++ b/test/validation/items/func/test.tum @@ -0,0 +1,183 @@ +- let: + name: func test constants, + values: + test parameter: test parameter + +- py_func: + name: pass func + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: assertparam + param: + - true + +- py_func: + name: fail func + key: $(test)_FAIL + file: $(test_path)$(psep)func.py + func_name: assertparam + param: + - false + +- py_func: + name: fail func with expected result "FAIL" + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: assertparam + param: + - false + expected_result: FAIL + +- py_func: + name: pass func with expected result FAIL + key: $(test)_FAIL + file: $(test_path)$(psep)func.py + func_name: assertparam + param: + - true + expected_result: FAIL + +- py_func: + name: expected -1 + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: echo + param: + - -1 + expected_result: -1 + +- py_func: + name: expected eval + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: echo + param: + - -1 + expected_result: "354848436 - 354848437" + +- py_func: + name: expected table + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: echo + param: + - [-1, a, {toto: tata}] + expected_result: "[-1, 'a', {'toto': 'tata'}]" + +- py_func: + name: global param func + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: checkglobal + param: + - $(test parameter) + +- let: + name: python2func + key: $(test)_PASS + values: + - py: $(test_path)$(psep)func.py + +- py_func: + name: global param func + key: $(test)_PASS + file: $(py) + func_name: checkglobal + param: + - $(test parameter) + +- py_func: + name: skipped_checkglobal + file: $(test_path)$(psep)func.py + func_name: should_not_be_called + param: + - $(test parameter) + +- py_func: + name: skipped true + file: $(test_path)$(psep)func.py + func_name: checkglobal + skipped: true + param: + - $(test parameter) + +- py_func: + name: skipped true + file: $(test_path)$(psep)func.py + func_name: checkglobal + skipped: true + param: + - $(test parameter) + +- py_func: + name: skipped 1 + file: $(test_path)$(psep)func.py + func_name: checkglobal + skipped: 1 + param: + - $(test parameter) + +- py_func: + name: FunctionItem test + file: $(test_path)$(psep)func.py + func_name: ValidationTest + param: + - $(test parameter) + +- group: + name: Function results check + steps: + - group: + name: Function result failure + steps: + - py_func: + name: int failure + key: $(test)_FAIL + file: $(test_path)$(psep)func.py + func_name: echo + param: [-1] + - py_func: + name: float failure + key: $(test)_FAIL + file: $(test_path)$(psep)func.py + func_name: echo + param: [-1.3] + - py_func: + name: String failure + key: $(test)_FAIL + file: $(test_path)$(psep)func.py + func_name: echo + param: [ "FAIL" ] + - py_func: + name: Tuple int,str failure + key: $(test)_FAIL + file: $(test_path)$(psep)func.py + func_name: tuple_return + param: [ -1, "Got a failure" ] + - group: + name: Functions result success + steps: + - py_func: + name: int success + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: echo + param: [0] + - py_func: + name: float success + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: echo + param: [0.3] + - py_func: + name: String success + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: echo + param: [ "Something that is not only strictly FAIL" ] + - py_func: + name: Tuple int,str success + key: $(test)_PASS + file: $(test_path)$(psep)func.py + func_name: tuple_return + param: [ 0, "OK" ] diff --git a/test/validation/items/git/param.yaml b/test/validation/items/git/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/git/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/git/test.tum b/test/validation/items/git/test.tum new file mode 100644 index 0000000..fcb2be0 --- /dev/null +++ b/test/validation/items/git/test.tum @@ -0,0 +1,11 @@ +- git: + name: Testium repo + key: $(test)_PASS + repo: $(test_directory) + +- git: + name: Testium repo + key: $(test)_PASS + repo: + - $(test_directory) + - $(test_directory) diff --git a/test/validation/items/include/inc no template/my first include.tum b/test/validation/items/include/inc no template/my first include.tum new file mode 100644 index 0000000..41c2a0b --- /dev/null +++ b/test/validation/items/include/inc no template/my first include.tum @@ -0,0 +1,8 @@ + +- py_func: + name: My first include test + file: $(test_path)$(psep)include.py + func_name: ValidationTest + key: $(test)_PASS + param: + - $(test parameter) \ No newline at end of file diff --git a/test/validation/items/include/inc with template/my second include.tum b/test/validation/items/include/inc with template/my second include.tum new file mode 100644 index 0000000..a88e576 --- /dev/null +++ b/test/validation/items/include/inc with template/my second include.tum @@ -0,0 +1,7 @@ +- py_func: + name: {{ func_title }} + file: $(test_path)$(psep)include.py + func_name: ValidationTest + key: $(test)_PASS + param: + - {{ func_param }} diff --git a/test/validation/items/include/inc with template/my_3d_include.tum b/test/validation/items/include/inc with template/my_3d_include.tum new file mode 100644 index 0000000..7d0baee --- /dev/null +++ b/test/validation/items/include/inc with template/my_3d_include.tum @@ -0,0 +1,7 @@ + +- let: {name: Test param inclusion 1, values: [inclusion: $({{ dd }}_inc)]} +# note the Jinja comments : {# #} +# The following construction is not allowed and will fail to load: +# {# +# - let: {name: Test param inclusion 2, values: [inclusion: {{ $(inc)_inc }}]} +# #} \ No newline at end of file diff --git a/test/validation/items/include/include.py b/test/validation/items/include/include.py new file mode 100644 index 0000000..5d934a9 --- /dev/null +++ b/test/validation/items/include/include.py @@ -0,0 +1,7 @@ +import py_func.tm as tm + +class ValidationTest(tm.FunctionItem): + def exec(self, param): + print(str(param)) + return 0 + diff --git a/test/validation/items/include/param.yaml b/test/validation/items/include/param.yaml new file mode 100644 index 0000000..63806aa --- /dev/null +++ b/test/validation/items/include/param.yaml @@ -0,0 +1,3 @@ +# inc_no template: "inc no template" # Both commented parma cannot be handled as this configuration file is loaded dynamically +# inc_with_template: "inc with template" # through the template mechanism +test_parameter: My first include test parameter diff --git a/test/validation/items/include/test.tum b/test/validation/items/include/test.tum new file mode 100644 index 0000000..a49f66e --- /dev/null +++ b/test/validation/items/include/test.tum @@ -0,0 +1,12 @@ + +- !include inc no template/my first include.tum +- !include $(inc_no_template)/my first include.tum + +- !include {file: inc with template/my second include.tum, func_title: My second include test, func_param: My second include test parameter} +- !include + file: $(inc_with_template)/my second include.tum + func_title: My second include test + func_param: My second include test parameter + +- let: {name: Declare param for inclusion, values: [inc: Dali, Dali_inc: Dalida]} +- !include {file: $(inc_with_template)/my_3d_include.tum, dd: $(inc)} diff --git a/test/validation/items/jsonrpc/jrpces.ini b/test/validation/items/jsonrpc/jrpces.ini new file mode 100644 index 0000000..5a6c4b5 --- /dev/null +++ b/test/validation/items/jsonrpc/jrpces.ini @@ -0,0 +1,15 @@ + +[general] +default=default + +[jsonrpc_tcp] +host=0.0.0.0 +port=4321 + +[jsonrpc_html] +host=0.0.0.0 +port=4322 + +[jsonrpc_udp] +host=0.0.0.0 +port=4323 \ No newline at end of file diff --git a/test/validation/items/jsonrpc/param.yaml b/test/validation/items/jsonrpc/param.yaml new file mode 100644 index 0000000..e4093e4 --- /dev/null +++ b/test/validation/items/jsonrpc/param.yaml @@ -0,0 +1 @@ +skip_tcp: True \ No newline at end of file diff --git a/test/validation/items/jsonrpc/test.tum b/test/validation/items/jsonrpc/test.tum new file mode 100644 index 0000000..9f562ab --- /dev/null +++ b/test/validation/items/jsonrpc/test.tum @@ -0,0 +1,333 @@ + +- console: + name: json rpc echo server + doc: check if the jsonrpc echo server is installed + console_name: jrpces + key: $(test)_PASS + steps: + - open: + protocol: terminal + - read_until: {expected: $(terminal_prompt), timeout: 1, no_fail: True} + - writeln: which jrpces + - read_until: {expected: jrpces, timeout: 2} + +- group: + name: jsonrpc tests + condition: "'/jrpces' in r'''$(cn_json rpc echo server)'''" + steps: + - console: + name: Start the json rpc echo server + console_name: jrpces + key: $(test)_PASS + steps: + - writeln: jrpces -c {{include_directory}}/jrpces.ini + - read_until: {expected: $(terminal_prompt), timeout: 1, no_fail: True} + + - console: + name: Open the raw tcp Console + skipped: $(skip_tcp) + console_name: jsonrpc_server + doc: Opening the RAW TCP console + key: $(test)_PASS + steps: + - open: + protocol: rawtcp + tcp_host: localhost + tcp_port: 4321 + + - json_rpc: + name: JSONRPC console Query waiting for reception + skipped: $(skip_tcp) + key: $(test)_PASS + console: {name : jsonrpc_server} + timeout: 1 + steps: + - query: + method: echo + params: + - Hello World + - {a: 1, b: "hello"} + + - json_rpc: + name: JSONRPC console Query not waiting (only send) + skipped: $(skip_tcp) + key: $(test)_PASS + console: {name : jsonrpc_server} + timeout: 1 + steps: + - query: + method: echo + params: + - {b: "olleh", a: -1} + - World Hello + id: 3095372 + no_wait: True + + - sleep: {name: "Small delay for the test", timeout: 1, skipped: $(skip_tcp)} + + - json_rpc: + name: JSONRPC console Reception + skipped: $(skip_tcp) + key: $(test)_PASS + console: {name : jsonrpc_server} + timeout: 1 + steps: + - receive: + id: 3095372 + + - console: + name: Close the raw tcp console + skipped: $(skip_tcp) + console_name: jsonrpc_server + doc: Opening the RAW TCP console + key: $(test)_PASS + execute_on_stop: True + steps: + - close: + + - json_rpc: + name: JSONRPC UDP query waiting for reception + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - open: + - query: + name: echo + method: echo + params: + - Hello World + - {a: 1, b: "hello"} + timeout: 1 + - close: + + - json_rpc: + name: Failing JSONRPC UDP query waiting for reception (returning an error) + key: $(test)_FAIL + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - open: + - query: + method: echo2 + params: + - Hello World + - {a: 1, b: "hello"} + timeout: 1 + - close: + + - json_rpc: + name: JSONRPC UDP query waiting for reception of an expected error + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - open: + - query: + method: echo2 + params: + - Hello World + - {a: 1, b: "hello"} + expected_result: {code: -32000, message: function not found} + - close: + + - json_rpc: + name: Failing UDP JSONRPC query timeout elapses (wrong udp port) + doc: | + Failing JSONRPC UDP query waiting for reception and checking result + and timeout elapses (wrong udp port) + key: $(test)_FAIL + udp: {server: localhost, snd_port: 4326, rcv_port: 48393} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - Hello World + - {a: 1, b: hello} + timeout: 0.5 + - close: + + - json_rpc: + name: JSONRPC UDP query not waiting (only send) + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - {b: "olleh", a: -1} + - World Hello + id: 3095372 + no_wait: True + + - sleep: {name: "Small delay for the test", timeout: 1} + + - json_rpc: + name: JSONRPC UDP Reception + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - receive: + id: 3095372 + - close: + + - json_rpc: + name: JSONRPC UDP query not waiting (only send) + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - open: + - query: + method: echo2 + params: + - {b: "olleh", a: -1} + - World Hello + id: 3095372 + no_wait: True + + - sleep: {name: "Small delay for the test", timeout: 1} + + - json_rpc: + name: Failing JSONRPC UDP Reception (returning an error) + key: $(test)_FAIL + udp: {server: localhost, snd_port: 4323, rcv_port: 8765} + timeout: 1 + steps: + - receive: + id: 3095372 + timeout: 1 + - close: + + - json_rpc: + name: UDP JSONRPC query waiting and checking + doc: JSONRPC UDP query waiting for reception and checking result + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 48393} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - Hello World + - {a: 1, b: hello} + expected_result: [[Hello World, {a: 1, b: hello}], {}] + timeout: 1 + - close: + + - json_rpc: + name: Failing UDP JSONRPC query waiting and checking + doc: JSONRPC UDP query waiting for reception and checking result + key: $(test)_FAIL + udp: {server: localhost, snd_port: 4323, rcv_port: 48393} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - Hello World + - {a: 1, b: hello} + expected_result: [[], {}] + timeout: 1 + - close: + + - json_rpc: + name: UDP JSONRPC query not waiting (for checking) + doc: JSONRPC UDP query not waiting, with the purpose to check the result at reception + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 9876} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - {b: "olleh", a: -1} + - World Hello + id: 3095372 + no_wait: True + + - sleep: {name: "Small delay for the test", timeout: 1} + + - json_rpc: + name: UDP JSONRPC reception checking + doc: JSONRPC UDP Reception and checking result + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 9876} + timeout: 1 + steps: + - receive: + id: 3095372 + timeout: 1 + expected_result: [[{b: olleh, a: -1}, World Hello], {}] + - close: + + - json_rpc: + name: Failing UDP JSONRPC reception checking + doc: JSONRPC UDP Reception and checking result + key: $(test)_FAIL + udp: {server: localhost, snd_port: 4323, rcv_port: 9876} + timeout: 1 + steps: + - receive: + id: 3095372 + timeout: 1 + expected_result: [[{b: ollhe, a: -1}, World Hello], {}] + - close: + + - json_rpc: + name: UDP JSONRPC query waiting and evaluating result + doc: | + JSONRPC UDP query waiting for reception and checking result with + replacing $(result) and evaluating string. + key: $(test)_PASS + udp: {server: localhost, snd_port: 4323, rcv_port: 48393} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - Hello World + - {a: 1, b: hello} + process_result: $(result)[0][1]['a'] + expected_result: 1 + timeout: 1 + - close: + + - json_rpc: + name: Failing UDP JSONRPC query waiting and evaluating result + doc: | + JSONRPC UDP query waiting for reception and checking result with + replacing $(result) and evaluating string. + key: $(test)_FAIL + udp: {server: localhost, snd_port: 4323, rcv_port: 48393} + timeout: 1 + steps: + - open: + - query: + method: echo + params: + - Hello World + - {a: 1, b: hello} + expected_result: "$(result)[0][1]['a'] == 0" + timeout: 1 + - close: + +- console: + name: Stop json rpc echo server + doc: check if the jsonrpc echo server is installed + console_name: jrpces + execute_on_stop: True + key: $(test)_PASS + steps: + - close: + protocol: terminal + diff --git a/test/validation/items/let/let.py b/test/validation/items/let/let.py new file mode 100644 index 0000000..000afa1 --- /dev/null +++ b/test/validation/items/let/let.py @@ -0,0 +1,19 @@ +import py_func.tm as tm + + +def donothing(): + return 0 + + +def checkloopparam(loop_param): + if not (loop_param == 12 or loop_param == 20 + or loop_param == 30): + raise + return 0 + + +def checkGlobalDic(param, expect): + if tm.gd(param) != expect: + raise Exception("Expected {} for {} but got {}". + format(expect, param, tm.gd(param))) + return 0 diff --git a/test/validation/items/let/param.yaml b/test/validation/items/let/param.yaml new file mode 100644 index 0000000..046a41e --- /dev/null +++ b/test/validation/items/let/param.yaml @@ -0,0 +1,3 @@ +no_param: Null +overwrite_me: True +test_overwrite_me: False \ No newline at end of file diff --git a/test/validation/items/let/test.tum b/test/validation/items/let/test.tum new file mode 100644 index 0000000..ffdd138 --- /dev/null +++ b/test/validation/items/let/test.tum @@ -0,0 +1,95 @@ +- loop: + name: Cycle number of loops + iterator: 10 + key: $(test)_PASS + steps: + - py_func: + name: do nothing + file: $(test_path)$(psep)let.py + func_name: donothing + + - let: + name: Let it be + values: + it: $(loop_param) + eval: + - be: "$(loop_param) == $(it)" + +- loop: + name: Cycle iterating on list + iterator: [12, 20, 30] + key: $(test)_PASS + steps: + - py_func: + name: check loop param + file: $(test_path)$(psep)let.py + func_name: checkloopparam + param: + - $(loop_param) + + - let: + name: Let it be + values: + - it: $(loop_param) + eval: + - be: "$(loop_param) == $(it)" + +- let: + name: Get time + key: $(test)_PASS + values: + - loop_t0: $(ts_start_Cycle iterating on list) + - loop_t1: $(ts_end_Cycle iterating on list) + - loop_duration: $(ts_duration_Cycle iterating on list) + +- let: + name: Get parameter file value + key: $(test)_PASS + eval: + - test_overwrite_me: "$(overwrite_me) == True" + +- py_func: + name: Check global dic pass + file: $(test_path)$(psep)let.py + func_name: checkGlobalDic + param: + - test_overwrite_me + - True + +- let: + name: Overwrite parameter file value + key: $(test)_PASS + values: + - overwrite_me: False + +- py_func: + name: Check global dic fail + file: $(test_path)$(psep)let.py + func_name: checkGlobalDic + key: $(test)_FAIL + param: + - overwrite_me + - True + expected_result: "$(overwrite_me) == False" + +- py_func: + name: Check global dic fail + file: $(test_path)$(psep)let.py + func_name: checkGlobalDic + key: $(test)_PASS + param: + - overwrite_me + - True + expected_result: fail + +- let: + name: Evaluate Overwriting parameter file value + key: $(test)_PASS + eval: + - test_overwrite_me: '"$(overwrite_me)" == True' + +- check: + name: Check Overwriting parameter file value + key: $(test)_PASS + values: + - $(test_overwrite_me) == False \ No newline at end of file diff --git a/test/validation/items/plot/param.yaml b/test/validation/items/plot/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/plot/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/plot/plot.py b/test/validation/items/plot/plot.py new file mode 100644 index 0000000..1fb147c --- /dev/null +++ b/test/validation/items/plot/plot.py @@ -0,0 +1,13 @@ +import random +import py_func.tm as tm +from py_func.tm import FunctionItem + +def random_value(): + return random.random() + +class LastValues(FunctionItem): + def exec(self, name): + res = tm.last_plot_value(name) + self.reportValue('my_reported_value', res) + print("Last plot value: {}".format(res)) + return res diff --git a/test/validation/items/plot/test.tum b/test/validation/items/plot/test.tum new file mode 100644 index 0000000..aef9792 --- /dev/null +++ b/test/validation/items/plot/test.tum @@ -0,0 +1,74 @@ +- plot: + name: Open the plot + condition: $(validation_dialogs) + key: $(test)_PASS + plot_name: Mon Plot + steps: + - open: + log_path: $(validation_report_path) + +- plot: + name: Add periodic to the plot + condition: $(validation_dialogs) + key: $(test)_PASS + plot_name: Mon Plot + steps: + - periodic: + period: 1 + file: $(test_path)$(psep)plot.py + func_name: random_value + eval: '{"periodic": $(result)}' + +- sleep: + name: sleep + condition: $(validation_dialogs) + dialog: true + timeout: 3 + +- loop: + name: Add of other data in the plot + condition: $(validation_dialogs) + iterator: 10 + steps: + + - plot: + name: Add to the plot + key: $(test)_PASS + plot_name: Mon Plot + steps: + - add: + value1: $(loop_index) + value2: $(loop_index)+2 + + - sleep: + name: sleep between values + timeout: 1 + + - py_func: + name: last plot values + key: $(test)_PASS + file: $(test_path)$(psep)plot.py + func_name: LastValues + param: + - Mon Plot + +- plot: + name: Export + execute_on_stop: True + condition: $(validation_dialogs) + key: $(test)_PASS + plot_name: Mon Plot + steps: + - export: $(validation_report_path)/plot_export.pdf + - export: $(validation_report_path)/plot_export.csv + +- plot: + name: Close the plot + execute_on_stop: True + condition: $(validation_dialogs) + key: $(test)_PASS + plot_name: Mon Plot + steps: + - close: + wait_dialog_exit: True + timeout: 60 diff --git a/test/validation/items/report.tum b/test/validation/items/report.tum new file mode 100644 index 0000000..eddf7ea --- /dev/null +++ b/test/validation/items/report.tum @@ -0,0 +1,25 @@ +- report: + name: Expected PASS $(test) test + export: + - text: + path: $(validation_report_path)$(psep)$(test)_PASS.txt + key: $(test)_PASS + - html: + path: $(validation_report_path)$(psep)$(test)_PASS.html + key: $(test)_PASS + - junit: + path: $(validation_report_path)$(psep)$(test)_PASS.junit + key: $(test)_PASS + +- report: + name: Expected FAIL $(test) test + export: + - text: + path: $(validation_report_path)$(psep)$(test)_FAIL.txt + key: $(test)_FAIL + - html: + path: $(validation_report_path)$(psep)$(test)_FAIL.html + key: $(test)_FAIL + - junit: + path: $(validation_report_path)$(psep)$(test)_FAIL.junit + key: $(test)_FAIL \ No newline at end of file diff --git a/test/validation/items/sleep/param.yaml b/test/validation/items/sleep/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/sleep/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/sleep/test.tum b/test/validation/items/sleep/test.tum new file mode 100644 index 0000000..1560db5 --- /dev/null +++ b/test/validation/items/sleep/test.tum @@ -0,0 +1,17 @@ +- sleep: + name: Sleep timeout with dialogs + condition: $(validation_dialogs) + key: $(test)_PASS + timeout: 3 + dialog: true + +- sleep: + name: Sleep timeout without dialog + key: $(test)_PASS + timeout: 3.0 + +- sleep: + name: Sleep timeout in textual format + skipped: true + key: $(test)_PASS + timeout: 1h 3m 2s diff --git a/test/validation/items/unittest/param.yaml b/test/validation/items/unittest/param.yaml new file mode 100644 index 0000000..4624814 --- /dev/null +++ b/test/validation/items/unittest/param.yaml @@ -0,0 +1 @@ +no_param: Null \ No newline at end of file diff --git a/test/validation/items/unittest/test.tum b/test/validation/items/unittest/test.tum new file mode 100644 index 0000000..b376d77 --- /dev/null +++ b/test/validation/items/unittest/test.tum @@ -0,0 +1,13 @@ +- unittest_file: + name: Unittest item + test_file: {{include_directory}}/unittest.py + key: $(test)_PASS + test_method: test_01_pass + +- unittest_file: + name: Unittest item + test_file: {{include_directory}}/unittest.py + key: $(test)_FAIL + test_method: + - test_04_disabled + - test_03_fail diff --git a/test/validation/items/unittest/unittest.py b/test/validation/items/unittest/unittest.py new file mode 100644 index 0000000..1cfcb53 --- /dev/null +++ b/test/validation/items/unittest/unittest.py @@ -0,0 +1,37 @@ +import unittest +from time import sleep + +class MyUnitTests(unittest.TestCase): + @unittest.skip("test skipped") + def test_00_skipped(self): + ''' Test 00 is skipped + ''' + sleep(0.5) + + def test_01_pass(self): + ''' Test 01 is passed and adds a report key + ''' + self.reported_values['key reported']= 'value_reported' + sleep(0.5) + + def test_02_pass(self): + ''' Test 02 is passed and adds a report key + ''' + self.reported_values['key reported']= 'toto' + sleep(0.5) + + def test_03_fail(self): + ''' Test 03 is fail by unittest method + ''' + sleep(0.5) + self.fail(msg='Fail message') + + def test_04_disabled(self): + ''' Test 04 is disabled + ''' + sleep(0.5) + + def test_05_crash(self): + ''' Test 05 crashes + ''' + print(crash) \ No newline at end of file diff --git a/test/validation/main.tum b/test/validation/main.tum new file mode 100644 index 0000000..5f5c3c9 --- /dev/null +++ b/test/validation/main.tum @@ -0,0 +1,51 @@ +config_file: + - param.yaml +{% for item in items %} + - "items/{{ item }}/param.yaml" +{% endfor %} + +main: + name: Testium validation suite + steps: + - group: + name: Test preparation + steps: + + - let: + name: Set test variables for Linux + condition: "'$(os)' == 'Linux'" + values: + - terminal_prompt: $(linux_prompt) + - psep: "/" + + - let: + name: Set test variables for Windows + condition: "'$(os)' == 'Windows'" + values: + - terminal_prompt: $(windows_prompt) + - psep: "\\" + + - group: + name: Group of tests + steps: + +{% for item in items %} + # item test + - let: {name: {{ item }} test constants, values: {test: {{ item }}, test_path: items/$(test)}} + - group: + name: {{ item }} test + steps: + - !include items/{{ item }}/test.tum + - !include items/report.tum +{% endfor %} + +report: + enabled: True + log_stored: True + export: + junit: + path: $(validation_report_path) + file_name: $(validation_report_file).junit + sqlite: + file_name: $(validation_report_file).sqlite + path: $(validation_report_path) diff --git a/test/validation/param.yaml b/test/validation/param.yaml new file mode 100644 index 0000000..d6843eb --- /dev/null +++ b/test/validation/param.yaml @@ -0,0 +1,31 @@ +# All sub directory in items are evaluated as a list +items: <@ [os.path.basename(f.path) for f in os.scandir(os.path.join(r"$(test_directory)", "items")) if f.is_dir()] @> + # - common + # - check + # - console + # - cycle + # - dialogs + # - expanse + # - func + # - git + # - plot + # - include + # - jsonrpc + # - let + # - sleep + # - unittest + +# Parameters of the validation execution +validation_report_path: $(test_directory)/../tmp/ +validation_report_file: validation + +# parameter to enable validation of plotical items +validation_dialogs: true + +# various parameters +windows_prompt: ">" +linux_prompt: "$ " + +#Added param to show handling of the include with statically loaded parameter +inc_no_template: "inc no template" +inc_with_template: "inc with template" diff --git a/test/validation/post_execution.py b/test/validation/post_execution.py new file mode 100644 index 0000000..71d8b17 --- /dev/null +++ b/test/validation/post_execution.py @@ -0,0 +1,109 @@ +import os +import py_func.tm as tm +import textwrap +import sqlite3 +from junit_xml import TestSuite, TestCase +from interpreter.test_items.test_result import TestValue + + +def _prepare_file_to_save(file_name, file_ext=""): + iname = file_name + if file_ext != "": + iname = os.path.splitext(file_name)[0] + file_ext + + if os.path.isfile(iname): + i = 0 + fname = iname + while os.path.isfile(fname): + i += 1 + fname = iname + "-" + str(i) + ".saved" + os.rename(iname, fname) + return iname + + +def _get_testSuite(test, cur): + test_cases = [] + failures = 0 + failed_results = cur.execute( + f"SELECT test_name, result, report_key, duration, log, data FROM tests WHERE report_key LIKE '{test}_%'" + ).fetchall() + for result in failed_results: + tc = TestCase( + name=f"[{test}] {result[0]}", + elapsed_sec=result[3], + stdout=result[4], + log=result[5], + ) + + # Check the results of all + if result[1] == str(TestValue.NORUN): + tc.add_skipped_info("The test has not being runned") + elif result[2] == f"{test}_PASS": + if result[1] == str(TestValue.FAILURE): + failures += 1 + print(f"Item [{test}] Failing on '{result[0]}' : The test should PASS") + print("*" * 80) + print(textwrap.indent(result[4], prefix="* ")) + print("*" * 80) + tc.add_error_info("The test should PASS!\n\n" + result[4]) + elif result[2] == f"{test}_FAIL": + if result[1] == str(TestValue.SUCCESS): + failures += 1 + print( + f"Item [{test}] Failing on '{result[0]}' : \n\tThe test should FAIL" + ) + print("*" * 80) + print(textwrap.indent(result[4], prefix="* ")) + print("*" * 80) + tc.add_error_info("The test should FAIL!\n\n" + result[4]) + + # add to the test cases + test_cases.append(tc) + + return failures, TestSuite(test, test_cases) + + +def exec(): + print("\n") + print("*" * 80) + print("* Post execution started") + print("*" * 80) + + # Get the info + report = ( + str(tm.gd("validation_report_path")) + + str(tm.gd("validation_report_file")) + + ".sqlite" + ) + enabled_tests = tm.gd("items") + + # Open the database + con = sqlite3.connect(report) + cur = con.cursor() + + # Get the testsuit for every parts + failures = 0 + for test in enabled_tests: + failed, ts = _get_testSuite(test, cur) + failures += failed + # write to the file + junit_report = report.replace(".sqlite", f"-{test}.xml") + print(junit_report) + _prepare_file_to_save(junit_report) + with open(junit_report, "w") as f: + f.write(TestSuite.to_xml_string([ts])) + + # cleanup + con.close() + print("*" * 80) + if failures == 0: + print("* Post execution finished : SUCCESS") + else: + print(f"* Post execution finished: {failures} test FAILED") + print("*" * 80) + +def post_exec(): + exec() + +def post_exec_fail(): + exec()