From 26b334f0dc788ae75db8c54ab618b7505d1be81e Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 20 Sep 2020 22:43:30 +0200 Subject: [PATCH 01/16] small fix in rst highlighting --- plugin_tutorials/docs/writing_new_bt_plugin.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin_tutorials/docs/writing_new_bt_plugin.rst b/plugin_tutorials/docs/writing_new_bt_plugin.rst index 77317c916..28390d72e 100644 --- a/plugin_tutorials/docs/writing_new_bt_plugin.rst +++ b/plugin_tutorials/docs/writing_new_bt_plugin.rst @@ -169,7 +169,7 @@ In BehaviorTree.CPP, exporting and loading plugins is handled by the ``BT_REGIST In this macro, we must create a ``NodeBuilder`` so that our custom action node can have a non-default constructor signature (for the action and xml names). This lambda will return a unique pointer to the behavior tree node we have created. Fill in the constructor with the relavent information, giving it the ``name`` and ``config`` given in the function arguments. -Then define the ROS 2 action server's name that this BT node will call, in this case, its the `wWait`` action. +Then define the ROS 2 action server's name that this BT node will call, in this case, its the ``wait`` action. We finally give the builder to a factory to register. ``Wait`` given to the factory is the name in the behavior tree XML file that corresponds to this BT node plugin. From aad3d13da37337f8035934b31ca2e629397243b2 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Tue, 22 Sep 2020 00:37:41 +0200 Subject: [PATCH 02/16] fix the readme and build instructions to just use CI settings --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 757f7924d..2c143ce71 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,11 @@ This folder holds the source and configuration files used to generate the [Navigation2 documentation](https://navigation.ros.org) web site. Dependencies for Build: -* [Sphinx](https://www.sphinx-doc.org/en/master/usage/installation.html) + * `sudo apt install python3-pip` -* `pip3 install breathe==4.12.0 sphinx_rtd_theme sphinxcontrib-plantuml` +* `pip3 install sphinx==1.7.5 docutils==0.14 sphinx_rtd_theme breathe==4.9.1 sphinxcontrib-plantuml` + +(as in the .circleci/config.yaml) Build the docs locally with `make html` and you'll find the built docs entry point in `_build/html/index.html`. From 17dd8e8d4fd7391281b889795f6a86d7a1e6f843 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Tue, 22 Sep 2020 00:38:37 +0200 Subject: [PATCH 03/16] add CI Testing section to nav2-documentation incl. rewritting yaml parms --- tutorials/docs/ci_testing.rst | 224 ++++++++++++++++++ .../CI_Testing/code_coverage_bump_40_80.png | Bin 0 -> 14373 bytes .../CI_Testing/github_coverage_diff.png | Bin 0 -> 16492 bytes tutorials/index.rst | 1 + 4 files changed, 225 insertions(+) create mode 100644 tutorials/docs/ci_testing.rst create mode 100644 tutorials/docs/images/CI_Testing/code_coverage_bump_40_80.png create mode 100644 tutorials/docs/images/CI_Testing/github_coverage_diff.png diff --git a/tutorials/docs/ci_testing.rst b/tutorials/docs/ci_testing.rst new file mode 100644 index 000000000..4b046f7ff --- /dev/null +++ b/tutorials/docs/ci_testing.rst @@ -0,0 +1,224 @@ +.. _ci_testing: + +CI Testing in Nav2 +****************** +**Overview:** + +- `Benefits of Automated Testing`_ +- `Hands on Testing`_ +- `Rewriting Parameter Values from YAML Files in Launch scripts`_ + +Benefits of Automated Testing +============================= + +.. image:: images/CI_Testing/code_coverage_bump_40_80.png + :align: center + +Whenever a feature gets added or altered, it is best practice to confirm the intended outcome with automated test scripts. +This document features an easy step by step guide how CI should be integrated alongside new PRs. + +Also, not only new code should have CI testing. To find nasty bugs and corner cases, it is Nav2's ultimate goal to have a test coverage of nearly 100% ! +This will lead to a more improved, stable, and industry-grade code basis, as new PRs will see if they break things in other sub-systems, that they normally would not think of impacting. + +The current code-coverage can be tracked on `codecov.io/gh/ros-planning/navigation2 `_ . + + +Hands on Testing +================ +0. Get Nav2 Working +------------------- +Before you can test anything, make sure you have the basic examples of the :ref:`getting_started` guides up and running. + +For integrating and running your own tests, you have to build nav2 from source. Using nav2 main with ros2 installed as binaries technically works, +but automated CI testing happening on github when you merge you create a PR for the nav2 stack also uses ros2 rolling (= latest/main). +Therefor, it is recommend to test your new code with the nav2 stack based on the main branch and also let the script install ros2 from source. + +1. Run Existing Tests +--------------------- +Nav2 specific tests can be found in each individual component under a dedicated test folder. +One additional package, ``nav2_system_tests``, `exists `_ for testing components, sub-systems and full system tests. +This package also comes with a ``README.md`` pointing out, that unit tests for sub-functions of components should be provided within each individual component. + +To run existing tests of components or the whole system from within the ``nav2_system_tests`` package, you can use this procedure: + + - build nav2 with ``$ colcon build --symlink-install`` + - navigate to the component you would like to test ``$ cd build/`` + - run all the tests of this package ``$ ctest -V`` + +To run all tests of all nav2 components, you can also use ``colcon`` for convenience: + +.. code-block:: bash + + $ colcon test + +Refering to the *chapter 4.7* of the `colcon documentation `_, one can also run individual tests through ``colcon``, as it uses ``ctest`` and ``pytest`` under the hood. + +Now you should see a couple of tests run in your command line. After they have finished ``ctest`` gives an report about the tests. +This looks something like this: + +.. code-block:: bash + + [.. Output of 30 individual tests ..] + 100% tests passed, 0 tests failed out of 30 + + Label Time Summary: + copyright = 10.18 sec*proc (1 test) + cppcheck = 1.46 sec*proc (1 test) + cpplint = 2.72 sec*proc (1 test) + gtest = 49.72 sec*proc (24 tests) + lint_cmake = 1.18 sec*proc (1 test) + linter = 19.24 sec*proc (6 tests) + uncrustify = 1.65 sec*proc (1 test) + xmllint = 2.04 sec*proc (1 test) + + Total Test time (real) = 69.00 sec + + +2. Run Individual Tests +----------------------- +Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. +While developing individual tests, it might make sense to only run one out of multiple tests. +This can be done with either: + +- ``$ ctest -V -R `` in the respective folder **or** +- ``$ colcon test --packages-select --ctest-args -V -R `` + +Where ``regex`` represents the name or search-expression for the test(s) you want to run manually. +You can also find the name of a certain test by running all tests of the desired package. + +.. note:: + When testing with ``pytest`` - typically for ros2 launch files - and building your package with ``$ colcon build --symlink-install``, you can even change your test scripts without rebuilding the whole package! + +3. Writing Your Own Test +------------------------ +**Before writing a new test**, you have to think about what you want to test: + +- Is my feature relevant in combination with other (sub-)components of the nav2 stack? --> Integrate it into ``nav2_system_tests`` +- Is my feature only component specific? --> Write dedicated unit tests inside of the component + +**What makes a good test?** + +- Code Coverage: Are all my new code lines run at least once with my test? (check with codecov.io automated with each PR on github) +- Corner Cases: Monkey proof input, test the limits (overflow etc) +- Expect things to break: this is good! -> make sure to catch all errors and handle them accordingly +- Combine your components with other test: If feasible create corner scenarios where your code really should improve things +- Quantity over complexity: Better write multiple tests than make them to complicate so others cannot understand why it fails in the future + +**What tools do I have?** + +- look and learn from existing code in the nav2 stack, we have plenty of tests! +- play with different launch parameters: Have a look at overwriting them in the next section + +4. Register Your Own Test +------------------------- + +Make sure to include your new Tests in the specific ``CMakeList.txt`` file and recompile your working-space with ``colcon build --symlink-install``. +Depending on writing tests in C++ or python there are different ways to register tests. + +This first example is for registering tests surrounding behavior tree actions. +`Source c++ test `_ + +.. code-block:: text + + ament_add_gtest(test_action_spin_action test_spin_action.cpp) + target_link_libraries(test_action_spin_action nav2_spin_action_bt_node) + ament_target_dependencies(test_action_spin_action ${dependencies}) + + ament_add_gtest(test_action_back_up_action test_back_up_action.cpp) + target_link_libraries(test_action_back_up_action nav2_back_up_action_bt_node) + ament_target_dependencies(test_action_back_up_action ${dependencies}) + + +Here is an example for testing with python and pytest, especially useful for testing launch sequences. +Interesting to note are the free set-able environment variables that can later be used to rewrite parameter values for launch scripts. +`Source python test `_ + +.. code-block:: text + + ament_add_test(test_bt_navigator_with_groot_monitoring + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/test_system_launch.py" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + TIMEOUT 180 + ENV + TEST_DIR=${CMAKE_CURRENT_SOURCE_DIR} + TEST_MAP=${PROJECT_SOURCE_DIR}/maps/map_circular.yaml + TEST_WORLD=${PROJECT_SOURCE_DIR}/worlds/turtlebot3_ros2_demo.world + GAZEBO_MODEL_PATH=${PROJECT_SOURCE_DIR}/models + BT_NAVIGATOR_XML=navigate_w_replanning_and_recovery.xml + ASTAR=False + GROOT_MONITORING=True + ) + + + +5. Check Your Test with CI and Check Code Coverage +-------------------------------------------------- + +.. image:: images/CI_Testing/github_coverage_diff.png + + +Is there room to improve the test coverage near your code? Ain't you just the right expert about this code section? +Think about adding tests that exceed your own focus and help improve nav2/ros2 reach a higher overall code coverage and ultimately also quality. + +The report above is an automated post by codecov.io-bot on github that posts results of CI automatically for every new PR. +Please consider helping increase the code coverage and use the opportunity to learn more about the internals of the navigation2 stack! + +Rewriting Parameter Values from YAML Files in Launch scripts +============================================================ +In most occasions some small new features are added and made available through a few new parameters. As the standard nav2 user should not be overloaded with features it makes sense to disable most of the additional or drop-in features in the default ``params.yaml`` file. +But tests should still be comparable and only alter the test-scope specific parameters. +Therefor, it makes no sense to copy most of the ``params.yaml`` file into multiple test.yaml files that would be prone to fail future changes. + +ROS2 with its launch systems already includes many substitution mechanisms, that seem to handle a few dozen different scenarios, but are a little bit hard to use from a user standpoint with lacking example material. +Luckily, nav2 already includes a nice helper function for replacing values in YAML files. +Here is an example showing a small feature set of the capability of the launch system: + +.. code-block:: python + + #Replace the default parameter values for testing special features without having multiple params_files inside the nav2 stack + context = LaunchContext() + param_substitutions = {} + + if (os.getenv('ASTAR') == "True"): + param_substitutions.update({'use_astar': "True"}) + print ("ASTAR set True") + + if (os.getenv('GROOT_MONITORING') == "True"): + param_substitutions.update({'enable_groot_monitoring': "False"}) + print ("GROOT_MONITORING set True") + + # Fails -> multi dimensional keys ['planner_server']['ros__parameters']['GridBased']['use_astar'] cannot be combined in such manner + #param_substitutions = {'planner_server.ros__parameters.GridBased.use_astar': "True"} + + # Fails -> value for 'bt_navigator' gets overwritten with 'ros__parameters' as value and not as next stage dict + #param_substitutions = {'bt_navigator':{'ros__parameters':{'enable_groot_monitoring' : 'True'}}} + + # Obviously not the needed behavior but shows that 'HELLOO...' only gets written when perform gets triggered + #param_substitutions = {'bt_navigator':'HELLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO'} + + # Finally works with LaunchContext and perform sub-function + #param_substitutions = {'enable_groot_monitoring' : 'True'} + + # This would also work, but then the whole params_file gets recursively searched and replaces "False" with "False" -> time wasted + #param_substitutions = { + # 'use_astar': os.getenv('ASTAR', default = "False"), + # 'enable_groot_monitoring': os.getenv('GROOT_MONITORING', default = "False") + # } + + + configured_params = RewrittenYaml( + source_file=params_file, + root_key='', + param_rewrites=param_substitutions, + convert_types=True) + + + new_yaml = configured_params.perform(context) + + # Check if value has the desired value now before loading the yaml as launch_argument + #data = yaml.safe_load(open(new_yaml, 'r')) + #print (data['planner_server']['ros__parameters']['GridBased']['use_astar']) + + +This can also be investigated in a real scenario in the nav2-CI test. Just have a look at the ``nav2_system_tests`` test for the whole system `here `_. \ No newline at end of file diff --git a/tutorials/docs/images/CI_Testing/code_coverage_bump_40_80.png b/tutorials/docs/images/CI_Testing/code_coverage_bump_40_80.png new file mode 100644 index 0000000000000000000000000000000000000000..109d4fb9b41de9155b457b546d7e2381ffa42acf GIT binary patch literal 14373 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 Ybt=uT!Vkjy{15A?f|`866G+Ja0J6!sqyPW_ literal 0 HcmV?d00001 diff --git a/tutorials/docs/images/CI_Testing/github_coverage_diff.png b/tutorials/docs/images/CI_Testing/github_coverage_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..17fbe2700362e6af276f057a18729c5028330336 GIT binary patch literal 16492 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 literal 0 HcmV?d00001 diff --git a/tutorials/index.rst b/tutorials/index.rst index ca06f7f54..bf819b833 100644 --- a/tutorials/index.rst +++ b/tutorials/index.rst @@ -9,6 +9,7 @@ Navigation2 Tutorials :maxdepth: 1 docs/camera_calibration.rst + docs/ci_testing.rst docs/get_backtrace.rst docs/navigation2_on_real_turtlebot3.rst docs/navigation2_with_slam.rst From ef3e83f30c8a1099e47453a8fee5ce2454da2e49 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Thu, 24 Sep 2020 01:21:55 +0200 Subject: [PATCH 04/16] tried to improve all the points mentioned above also included ref to two similar tutorials by autoware that I came aware of shortly after finishing after what I changed now.. Maybe this covers a few more points that would be interesting as well..? --- tutorials/docs/ci_testing.rst | 71 +++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/tutorials/docs/ci_testing.rst b/tutorials/docs/ci_testing.rst index 4b046f7ff..774d85012 100644 --- a/tutorials/docs/ci_testing.rst +++ b/tutorials/docs/ci_testing.rst @@ -6,7 +6,7 @@ CI Testing in Nav2 - `Benefits of Automated Testing`_ - `Hands on Testing`_ -- `Rewriting Parameter Values from YAML Files in Launch scripts`_ +- `Tips & Tricks for Writing Tests`_ Benefits of Automated Testing ============================= @@ -15,13 +15,27 @@ Benefits of Automated Testing :align: center Whenever a feature gets added or altered, it is best practice to confirm the intended outcome with automated test scripts. -This document features an easy step by step guide how CI should be integrated alongside new PRs. +This document features an easy step by step guide how tests should be integrated alongside new PRs. +Adding tests to your new code does not only help you to make sure that corner cases can be reliable tested over and over, but also to make sure that your code continues to work, when there are new changes made elsewhere. -Also, not only new code should have CI testing. To find nasty bugs and corner cases, it is Nav2's ultimate goal to have a test coverage of nearly 100% ! +Tests can help in two scenarios. First, during programming they can be conducted manually, while they are still being tweaked to work in the intended way. +In order to test them manually and include them into your workflow, a few steps are necessary that are all explained in the next chapter. +Second, the tests added during the active programming phase of this new code can also be integrated into automated testing performed by the CI system setup with the nav2 github repository. +This helps others later in the continuous development process of this open source project. + +Also, not only new code should have automated testing through CI. To find nasty bugs and corner cases, it is Nav2's ultimate goal to have a test coverage of nearly 90% ! This will lead to a more improved, stable, and industry-grade code basis, as new PRs will see if they break things in other sub-systems, that they normally would not think of impacting. +It would be great if you can always check into the automated tests results of CI during your PR. + +The current code-coverage of the whole nav2 project can be tracked on `codecov.io/gh/ros-planning/navigation2 `_ . +The improvement over time can be seen in the leading image. There is already a lot, but we welcome everybody to join! -The current code-coverage can be tracked on `codecov.io/gh/ros-planning/navigation2 `_ . +During your PR process, CI will publish automated testing results directly into your PR as a comment as soon as you mark your PR as ready for review and/or new commits are added. +These results also give you great insights about what code coverage areas you added or even lost! +It is a great visualization to help you understand what code is currently being used and what might be just dead code, as it is not tested and therefore cannot really be told if it works or not. +So, if you already work inside or with one of our components, please have a look what kind of tests are already there and where is room for you to improve our testing! +Let's start now with working with existing tests and also writing your own ones. Hands on Testing ================ @@ -30,28 +44,28 @@ Hands on Testing Before you can test anything, make sure you have the basic examples of the :ref:`getting_started` guides up and running. For integrating and running your own tests, you have to build nav2 from source. Using nav2 main with ros2 installed as binaries technically works, -but automated CI testing happening on github when you merge you create a PR for the nav2 stack also uses ros2 rolling (= latest/main). -Therefor, it is recommend to test your new code with the nav2 stack based on the main branch and also let the script install ros2 from source. +but the automated CI testing, happening on github when you merge, also uses ros2 rolling (= latest/main). +Therefor, it is recommend to test your new code with the nav2 stack based on the main branch and also let the script (getting started guide) install ros2 from source. 1. Run Existing Tests --------------------- Nav2 specific tests can be found in each individual component under a dedicated test folder. -One additional package, ``nav2_system_tests``, `exists `_ for testing components, sub-systems and full system tests. +One additional package, ``nav2_system_tests``, `exists `_ for testing components, sub-systems and full system tests, in addition to unit and integration tests in individual packages.. This package also comes with a ``README.md`` pointing out, that unit tests for sub-functions of components should be provided within each individual component. To run existing tests of components or the whole system from within the ``nav2_system_tests`` package, you can use this procedure: - - build nav2 with ``$ colcon build --symlink-install`` - - navigate to the component you would like to test ``$ cd build/`` - - run all the tests of this package ``$ ctest -V`` +.. code-block:: bash + + $ cd + $ colcon build --symlink-install # build nav2 workspace including the components that you are interested in + $ colcon test --event-handlers console_direct+ --packages-select # run all the tests of this package with output To run all tests of all nav2 components, you can also use ``colcon`` for convenience: .. code-block:: bash $ colcon test - -Refering to the *chapter 4.7* of the `colcon documentation `_, one can also run individual tests through ``colcon``, as it uses ``ctest`` and ``pytest`` under the hood. Now you should see a couple of tests run in your command line. After they have finished ``ctest`` gives an report about the tests. This looks something like this: @@ -78,13 +92,16 @@ This looks something like this: ----------------------- Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. While developing individual tests, it might make sense to only run one out of multiple tests. -This can be done with either: +Referring to the *chapter 4.7* of the `colcon documentation `_, one can also run individual tests through ``colcon``, as it uses ``ctest`` and ``pytest`` under the hood. +This can be done with: -- ``$ ctest -V -R `` in the respective folder **or** -- ``$ colcon test --packages-select --ctest-args -V -R `` +.. code-block:: bash + + $ colcon test --event-handlers console_direct+ --packages-select --ctest-args -R Where ``regex`` represents the name or search-expression for the test(s) you want to run manually. -You can also find the name of a certain test by running all tests of the desired package. +For example with the ``nav2_system_tests`` package, the value for a valid regex could be ``bt`` for all behavior tree related tests or ``planner`` or a full name of the specific test you want to run. +You can also find the name of a certain test by running all tests of the desired package with the option ``$ colcon test --event-handlers console_direct+ <...>`` or look the name up in the corresponding ``CMakeList.txt``. .. note:: When testing with ``pytest`` - typically for ros2 launch files - and building your package with ``$ colcon build --symlink-install``, you can even change your test scripts without rebuilding the whole package! @@ -109,14 +126,14 @@ You can also find the name of a certain test by running all tests of the desired - look and learn from existing code in the nav2 stack, we have plenty of tests! - play with different launch parameters: Have a look at overwriting them in the next section -4. Register Your Own Test -------------------------- +4. Add Your Own Test +-------------------- Make sure to include your new Tests in the specific ``CMakeList.txt`` file and recompile your working-space with ``colcon build --symlink-install``. -Depending on writing tests in C++ or python there are different ways to register tests. +Depending on writing tests in C++ or python there are different ways to add tests. This first example is for registering tests surrounding behavior tree actions. -`Source c++ test `_ +`Source for the c++ test with ``gtest`` `_ .. code-block:: text @@ -131,7 +148,7 @@ This first example is for registering tests surrounding behavior tree actions. Here is an example for testing with python and pytest, especially useful for testing launch sequences. Interesting to note are the free set-able environment variables that can later be used to rewrite parameter values for launch scripts. -`Source python test `_ +`Source for the launch-based test `_ .. code-block:: text @@ -164,8 +181,16 @@ Think about adding tests that exceed your own focus and help improve nav2/ros2 r The report above is an automated post by codecov.io-bot on github that posts results of CI automatically for every new PR. Please consider helping increase the code coverage and use the opportunity to learn more about the internals of the navigation2 stack! -Rewriting Parameter Values from YAML Files in Launch scripts -============================================================ +Tips & Tricks for Writing Tests +=============================== +This section shall provide best practices and things not very obvious to a new test programmer. +Also, consider checking out the tutorial about unit tests and integration tests with colcon provided by the autoware foundation, +`here for unit tests `_ and `here for integration tests `_. + + +1. Rewriting Parameter Values from YAML Files in Launch scripts +--------------------------------------------------------------- + In most occasions some small new features are added and made available through a few new parameters. As the standard nav2 user should not be overloaded with features it makes sense to disable most of the additional or drop-in features in the default ``params.yaml`` file. But tests should still be comparable and only alter the test-scope specific parameters. Therefor, it makes no sense to copy most of the ``params.yaml`` file into multiple test.yaml files that would be prone to fail future changes. From e6b36158fe030d8d83b5dc6ef426109b055503dc Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 27 Sep 2020 06:56:54 +0200 Subject: [PATCH 05/16] add groot monitoring parameters to documentation --- .../packages/configuring-bt-navigator.rst | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/configuration/packages/configuring-bt-navigator.rst b/configuration/packages/configuring-bt-navigator.rst index 05cbf4e1a..62741f636 100644 --- a/configuration/packages/configuring-bt-navigator.rst +++ b/configuration/packages/configuring-bt-navigator.rst @@ -53,6 +53,43 @@ Parameters Description List of behavior tree node shared libraries. +:enable_groot_monitoring: + + ==== ======= + Type Default + ---- ------- + bool false + ==== ======= + + Description + Enable live Groot monitoring of the current BT status. + This is possible due to attaching a ZMQ server and publisher to the active behavior tree. + Consider checking out the `Use BT Groot Monitoring<>`_ tutorial for using this feature. + + **Attention:** Groot will only work after the behavior tree is running, which means that the nav2 stack has to receive a goal first. + +:groot_zmq_publisher_port: + + ====== ======= ======= ======== + Type Default Unit Optional + ------ ------- ------- -------- + int 1666 Port yes + ====== ======= ======= ======== + + Description + ZMQ publisher port for the Groot monitor. Used to consecutive publish the current status of the BT as flatbuffer. + +:groot_zmq_server_port: + + ====== ======= ======= ======== + Type Default Unit Optional + ------ ------- ------- -------- + int 1667 Port yes + ====== ======= ======= ======== + + Description + ZMQ server port for the Groot monitor. Used to send the current bt factory + configuration as flatbuffer on an (empty) request by Groot. + :transform_tolerance: ====== ======= ======= @@ -118,6 +155,9 @@ Example global_frame: map robot_base_frame: base_link transform_tolerance: 0.1 + enable_groot_monitoring: True + groot_zmq_publisher_port: 1666 + groot_zmq_server_port: 1667 bt_xml_filename: replace/with/path/to/bt.xml plugin_lib_names: - nav2_compute_path_to_pose_action_bt_node From 1f3081a162d7b3a0074dbee4e51dbffb522e13c6 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 27 Sep 2020 06:58:08 +0200 Subject: [PATCH 06/16] add linter section --- tutorials/docs/ci_testing.rst | 57 +++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/tutorials/docs/ci_testing.rst b/tutorials/docs/ci_testing.rst index 774d85012..935f1579b 100644 --- a/tutorials/docs/ci_testing.rst +++ b/tutorials/docs/ci_testing.rst @@ -88,10 +88,61 @@ This looks something like this: Total Test time (real) = 69.00 sec -2. Run Individual Tests +You can see that in this case 30 individual tests did run without any errors. +Besides the 24 `gtest` tests that represent functional tests, there are also 6 tests of another kind. +Those 6 other tests are `linters`. + +2. What are Linters? +-------------------- + +While code might be functional correct and a compiler generously compiles the desired functionality already, +`linters` ensure that the source code follows special coding, design and organizational guidelines. +This not only helps to comply with legal regulations, but also to sustain a standard way of how code is represented. +Especially while reading and understanding unfamiliar code, it helps that there are certain design guidelines enforced. + +But what do they actually do? +Starting with `copyright`, a set of files with certain extensions for python, cpp, and others +in this open source project must be published under certain licenses and include copyright holders. +But also code style guidelines are checked with `linters` like `cpplint` or `flake8` (python). +Such checks might include tests like: strong checks against how comments have to look like, no tailing white-spaces, +not too many following blank lines, not too many characters per line (99 chars), position of brackets, and so on. + +There exists a common stack of linters used by ROS2. This ros2 documentation `here `_ +not only shows how linters are correctly integrated into your package but also points towards the ``ament_lint_common`` documentation. +Here are all linters explained in there full extent and also listed which are added by default through the common package. +Also, it is possible to write and add your own linters for more consistency checks. + +In more complex code stacks like nav2, linters are included into the test process by ``CMakeList.txt`` +and ``package.xml``, like pointed out by the ros2 documentation above. +Therefore, **all** packages of nav2 have to include them by themselves. +A minimal setup for linters looks like this (`source `_): + +``CMakeLists.txt``: + +.. code:: cmake + + # this must happen before the invocation of ament_package() + if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + endif() + +``package.xml``: + +.. code:: xml + + ament_lint_auto + + + ament_lint_common + +To run some linter - ``ament_{cpplint, cppcheck, uncrustify, flake8, etc}`` you can us ``cpplint`` etc. as keyword for the regex in the next section. + +3. Run Individual Tests ----------------------- -Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. -While developing individual tests, it might make sense to only run one out of multiple tests. +In the event that one specific test out of many tests might have failed, +it makes sense to work on getting this one test to succeed again. +Also while developing individual tests, it might make sense to only run one out of multiple tests. Referring to the *chapter 4.7* of the `colcon documentation `_, one can also run individual tests through ``colcon``, as it uses ``ctest`` and ``pytest`` under the hood. This can be done with: From 97fe1c9a684e07bb2890b82f5bfe028a0591decb Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 27 Sep 2020 06:59:08 +0200 Subject: [PATCH 07/16] adding section about writing pytest test --- tutorials/docs/ci_testing.rst | 67 +++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/tutorials/docs/ci_testing.rst b/tutorials/docs/ci_testing.rst index 935f1579b..f80b4ed96 100644 --- a/tutorials/docs/ci_testing.rst +++ b/tutorials/docs/ci_testing.rst @@ -218,6 +218,73 @@ Interesting to note are the free set-able environment variables that can later b GROOT_MONITORING=True ) +This `cmake` macro ``ament_add_test()`` can handle raw `pytests`. Arguments are line or white-space seperated. +The first argument is the name of your new test, which can later than be used as a `regex` search keyword to only run your new test. +The ``GENERATE_RESULT_FOR_RETURN_CODE_ZERO`` is a flag for `pytest` and necessary for this process. +``COMMAND`` describes the `pytest` entry point for your test. +``WORKING_DIRECTORY`` and ``TIMEOUT`` are self explanatory. +Under the group ``ENV`` environment variables can be set. Those can then directly be used in your python script as input via ``os.getenv('KEYWORD')``. + +Depending on your test, it might not be necessity to declare all keywords in each test. +In combination of ``RewrittenYaml()`` from our ``nav2_common`` package, +we can use this to rewrite default parameters from the main ``params.yaml`` with a few easy steps. +A small example for this can be seen in the last section ``Tips & Tricks for Writing Tests``. + +Now, we added a few parameters and made sure that the parameters for launching our nodes are all setup correctly. +The next step involves dealing with ``pytest`` and testers. This code is from the same file as the ``RewrittenYaml()`` refers to. + +.. code-block:: python + + # configure all the parameters and nodes based on our input in the CMakeList.txt + ld = generate_launch_description() + + # setup our tester with the `tester_node.py` and a few additional input parameters + # here multiple test can be created to test your tests in more versatile environments + # even start fuzzing the input values might add robustness to your code + test1_action = ExecuteProcess( + cmd=[os.path.join(os.getenv('TEST_DIR'), 'tester_node.py'), + '-r', '-2.0', '-0.5', '0.0', '2.0'], + name='tester_node', + output='screen') + + lts = LaunchTestService() + lts.add_test_action(ld, test1_action) + ls = LaunchService(argv=argv) + ls.include_launch_description(ld) + return lts.run(ls) + +The next and final step would be to implement ``tester_node.py``. The node `here `_ is quite a good example. +It features argument groups to take various parameters as input that can be seen used in the code section above. +To name its core features: the test engages with multiple `lifecycle_nodes`, waits for all `action_servers` to be available, sends a goal, +tests if the goal is reached. This is a great example to use when one must implement a new pytest with ROS2 integration. + +.. note:: + When testing with launch files and testers also written with ``pytest``, it is possible to rerun tests + in between iterations of your test without rebuilding your work-space. + Although, this requires to build your package with ``$ colcon build --symlink-install``. + +b) Unit Test - gtest +"""""""""""""""""""" +This first example is for registering tests surrounding behavior tree actions. +`Source for the c++ test with ``gtest`` `_ + +.. code-block:: cmake + + ament_add_gtest(test_action_spin_action test_spin_action.cpp) + target_link_libraries(test_action_spin_action nav2_spin_action_bt_node) + ament_target_dependencies(test_action_spin_action ${dependencies}) + + ament_add_gtest(test_action_back_up_action test_back_up_action.cpp) + target_link_libraries(test_action_back_up_action nav2_back_up_action_bt_node) + ament_target_dependencies(test_action_back_up_action ${dependencies}) + + + +3. Add Your Own Test +-------------------- + + + 5. Check Your Test with CI and Check Code Coverage From 7a22c289053b5c9ab1ae778cc9bcbac3c94f9517 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 27 Sep 2020 06:59:59 +0200 Subject: [PATCH 08/16] misc - adding a few lines for clarification --- tutorials/docs/ci_testing.rst | 138 +++++++++++++++++++++------------- 1 file changed, 86 insertions(+), 52 deletions(-) diff --git a/tutorials/docs/ci_testing.rst b/tutorials/docs/ci_testing.rst index f80b4ed96..ea7ff48de 100644 --- a/tutorials/docs/ci_testing.rst +++ b/tutorials/docs/ci_testing.rst @@ -1,22 +1,25 @@ .. _ci_testing: -CI Testing in Nav2 -****************** +Introduction to Testing +*********************** **Overview:** -- `Benefits of Automated Testing`_ +- `Benefits of Testing`_ - `Hands on Testing`_ +- `How to Write Your First Test`_ - `Tips & Tricks for Writing Tests`_ -Benefits of Automated Testing -============================= +Benefits of Testing +=================== -.. image:: images/CI_Testing/code_coverage_bump_40_80.png - :align: center + .. image:: images/CI_Testing/codecov.io_show_covered_code.png + :width: 80% -Whenever a feature gets added or altered, it is best practice to confirm the intended outcome with automated test scripts. +Whenever a feature gets added or altered, it is best practice to confirm the intended outcome with tests. This document features an easy step by step guide how tests should be integrated alongside new PRs. -Adding tests to your new code does not only help you to make sure that corner cases can be reliable tested over and over, but also to make sure that your code continues to work, when there are new changes made elsewhere. +Adding tests to your new code does not only help you to make sure that corner cases can be reliable tested +over and over, but also to make sure that your code continues to work, when there are new changes made elsewhere, +like the ROS2 infrastructure or other dependencies. Tests can help in two scenarios. First, during programming they can be conducted manually, while they are still being tweaked to work in the intended way. In order to test them manually and include them into your workflow, a few steps are necessary that are all explained in the next chapter. @@ -27,15 +30,16 @@ Also, not only new code should have automated testing through CI. To find nasty This will lead to a more improved, stable, and industry-grade code basis, as new PRs will see if they break things in other sub-systems, that they normally would not think of impacting. It would be great if you can always check into the automated tests results of CI during your PR. -The current code-coverage of the whole nav2 project can be tracked on `codecov.io/gh/ros-planning/navigation2 `_ . -The improvement over time can be seen in the leading image. There is already a lot, but we welcome everybody to join! +The current code-coverage of the whole nav2 project can be tracked on +`codecov.io/gh/ros-planning/navigation2 `_ . During your PR process, CI will publish automated testing results directly into your PR as a comment as soon as you mark your PR as ready for review and/or new commits are added. These results also give you great insights about what code coverage areas you added or even lost! It is a great visualization to help you understand what code is currently being used and what might be just dead code, as it is not tested and therefore cannot really be told if it works or not. So, if you already work inside or with one of our components, please have a look what kind of tests are already there and where is room for you to improve our testing! -Let's start now with working with existing tests and also writing your own ones. +For example, the conditions in the code above did pass the test, but if there might be a more complex mechanism in the red part (the part that is not covered by automated testing) it can come to an unpredictive outcome. +Before heading into writing new tests that could easily test those corner cases, let's start with working with existing tests. Hands on Testing ================ @@ -50,24 +54,26 @@ Therefor, it is recommend to test your new code with the nav2 stack based on the 1. Run Existing Tests --------------------- Nav2 specific tests can be found in each individual component under a dedicated test folder. -One additional package, ``nav2_system_tests``, `exists `_ for testing components, sub-systems and full system tests, in addition to unit and integration tests in individual packages.. +One additional package, ``nav2_system_tests``, `exists `_ for testing components, +sub-systems and full system tests, in addition to unit and integration tests in individual packages. This package also comes with a ``README.md`` pointing out, that unit tests for sub-functions of components should be provided within each individual component. -To run existing tests of components or the whole system from within the ``nav2_system_tests`` package, you can use this procedure: +To run existing tests from a certain package like ``nav2_system_tests``, you can use this procedure: .. code-block:: bash $ cd $ colcon build --symlink-install # build nav2 workspace including the components that you are interested in - $ colcon test --event-handlers console_direct+ --packages-select # run all the tests of this package with output + $ colcon test [--event-handlers console_direct+] --packages-select # run all the tests of [with output] -To run all tests of all nav2 components, you can also use ``colcon`` for convenience: +To run all tests of the complete nav2 stack, you can also use ``colcon`` for convenience: .. code-block:: bash $ colcon test -Now you should see a couple of tests run in your command line. After they have finished ``ctest`` gives an report about the tests. +Now you should see a couple of tests run in your command line. After they have finished, +``colcon``outputs with the optional flag ``--event-handlers console_direct+`` an report about the tests. This looks something like this: .. code-block:: bash @@ -151,18 +157,25 @@ This can be done with: $ colcon test --event-handlers console_direct+ --packages-select --ctest-args -R Where ``regex`` represents the name or search-expression for the test(s) you want to run manually. -For example with the ``nav2_system_tests`` package, the value for a valid regex could be ``bt`` for all behavior tree related tests or ``planner`` or a full name of the specific test you want to run. -You can also find the name of a certain test by running all tests of the desired package with the option ``$ colcon test --event-handlers console_direct+ <...>`` or look the name up in the corresponding ``CMakeList.txt``. - -.. note:: - When testing with ``pytest`` - typically for ros2 launch files - and building your package with ``$ colcon build --symlink-install``, you can even change your test scripts without rebuilding the whole package! - -3. Writing Your Own Test +For example with the ``nav2_system_tests`` package, the value for a valid regex could be ``bt``. +This would include all tests for behavior tree related tests. Also, respectively the keyword ``planner`` +or another full name keyword would run the specific test you want to run. +You can find the name of a certain test by running all tests of the desired package with the option +``$ colcon test --event-handlers console_direct+ <...>`` or look the name up in the corresponding ``CMakeList.txt`` +of the test sub-directory of the package you are currently working with. + +How to Write Your First Test +============================ +After dealing with working and understanding the existing tests on a higher level, it is time to focus on add and writing your own tests. +There are multiple packages your test might fit in. So it is important to plan your next steps. +After you chose the direction you want to head into, you have to decide between an unit-test or a launch-based test. + +1. Plan Your Own Test ------------------------ **Before writing a new test**, you have to think about what you want to test: -- Is my feature relevant in combination with other (sub-)components of the nav2 stack? --> Integrate it into ``nav2_system_tests`` -- Is my feature only component specific? --> Write dedicated unit tests inside of the component +- Is my feature relevant in combination with other (sub-)components of the nav2 stack? --> Integrate it into launch based ``nav2_system_tests`` +- Is my feature only component specific? --> Write dedicated unit tests or launch based test inside of the individual component **What makes a good test?** @@ -177,31 +190,45 @@ You can also find the name of a certain test by running all tests of the desired - look and learn from existing code in the nav2 stack, we have plenty of tests! - play with different launch parameters: Have a look at overwriting them in the next section -4. Add Your Own Test --------------------- +2. Write Your First Test +------------------------ -Make sure to include your new Tests in the specific ``CMakeList.txt`` file and recompile your working-space with ``colcon build --symlink-install``. -Depending on writing tests in C++ or python there are different ways to add tests. +Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. +To add a new test besides the linters mentioned in the chapter before, we have to add them in the ``BUILD_TESTING`` condition. -This first example is for registering tests surrounding behavior tree actions. -`Source for the c++ test with ``gtest`` `_ +This can be achieved by two methods to include multiple sub-folders with ``CMakeList.txt`` inside: -.. code-block:: text +.. code:: cmake - ament_add_gtest(test_action_spin_action test_spin_action.cpp) - target_link_libraries(test_action_spin_action nav2_spin_action_bt_node) - ament_target_dependencies(test_action_spin_action ${dependencies}) + # this must happen before the invocation of ament_package() + if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + # add gtest and pytest + find_package(ament_cmake_gtest REQUIRED) + find_package(ament_cmake_pytest REQUIRED) - ament_add_gtest(test_action_back_up_action test_back_up_action.cpp) - target_link_libraries(test_action_back_up_action nav2_back_up_action_bt_node) - ament_target_dependencies(test_action_back_up_action ${dependencies}) + # add your subdirectories directly with dedicated CMakeList.txt with pytests or gtests inside + add_subdirectory(src/planning) + add_subdirectory(src/localization) + add_subdirectory(src/system) + add_subdirectory(src/system_failure) + # ... + # or + add_subdirectory(folder) + # this one CMakeList.txt inside of this folder will then include the rest of the folders with CMakeList.txt + endif() + + +a) Launch-file based Test - pytest +"""""""""""""""""""""""""""""""""" Here is an example for testing with python and pytest, especially useful for testing launch sequences. Interesting to note are the free set-able environment variables that can later be used to rewrite parameter values for launch scripts. `Source for the launch-based test `_ -.. code-block:: text +.. code-block:: cmake ament_add_test(test_bt_navigator_with_groot_monitoring GENERATE_RESULT_FOR_RETURN_CODE_ZERO @@ -299,6 +326,12 @@ Think about adding tests that exceed your own focus and help improve nav2/ros2 r The report above is an automated post by codecov.io-bot on github that posts results of CI automatically for every new PR. Please consider helping increase the code coverage and use the opportunity to learn more about the internals of the navigation2 stack! +.. +.. +.. +.. +.. + Tips & Tricks for Writing Tests =============================== This section shall provide best practices and things not very obvious to a new test programmer. @@ -318,8 +351,11 @@ Luckily, nav2 already includes a nice helper function for replacing values in YA Here is an example showing a small feature set of the capability of the launch system: .. code-block:: python - - #Replace the default parameter values for testing special features without having multiple params_files inside the nav2 stack + + # ... + import yaml + # ... + # Replace the default parameter values for testing special features without having multiple params_files inside the nav2 stack context = LaunchContext() param_substitutions = {} @@ -332,36 +368,34 @@ Here is an example showing a small feature set of the capability of the launch s print ("GROOT_MONITORING set True") # Fails -> multi dimensional keys ['planner_server']['ros__parameters']['GridBased']['use_astar'] cannot be combined in such manner - #param_substitutions = {'planner_server.ros__parameters.GridBased.use_astar': "True"} + # param_substitutions = {'planner_server.ros__parameters.GridBased.use_astar': "True"} # Fails -> value for 'bt_navigator' gets overwritten with 'ros__parameters' as value and not as next stage dict - #param_substitutions = {'bt_navigator':{'ros__parameters':{'enable_groot_monitoring' : 'True'}}} + # param_substitutions = {'bt_navigator':{'ros__parameters':{'enable_groot_monitoring' : 'True'}}} # Obviously not the needed behavior but shows that 'HELLOO...' only gets written when perform gets triggered - #param_substitutions = {'bt_navigator':'HELLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO'} + # param_substitutions = {'bt_navigator':'HELLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO'} # Finally works with LaunchContext and perform sub-function - #param_substitutions = {'enable_groot_monitoring' : 'True'} + # param_substitutions = {'enable_groot_monitoring' : 'True'} # This would also work, but then the whole params_file gets recursively searched and replaces "False" with "False" -> time wasted - #param_substitutions = { + # param_substitutions = { # 'use_astar': os.getenv('ASTAR', default = "False"), # 'enable_groot_monitoring': os.getenv('GROOT_MONITORING', default = "False") # } - configured_params = RewrittenYaml( source_file=params_file, root_key='', param_rewrites=param_substitutions, convert_types=True) - - + new_yaml = configured_params.perform(context) # Check if value has the desired value now before loading the yaml as launch_argument - #data = yaml.safe_load(open(new_yaml, 'r')) - #print (data['planner_server']['ros__parameters']['GridBased']['use_astar']) + data = yaml.safe_load(open(new_yaml, 'r')) + # print (data['planner_server']['ros__parameters']['GridBased']['use_astar']) This can also be investigated in a real scenario in the nav2-CI test. Just have a look at the ``nav2_system_tests`` test for the whole system `here `_. \ No newline at end of file From 01782d175f1e13b1762d7374033db5e19cfdce64 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 27 Sep 2020 07:24:29 +0200 Subject: [PATCH 09/16] renaming files --- .../Testing/codecov.io_show_covered_code.png | Bin 0 -> 61714 bytes .../images/Testing/github_coverage_diff.png | Bin 0 -> 16492 bytes tutorials/docs/intro_testing.rst | 401 ++++++++++++++++++ tutorials/index.rst | 2 +- 4 files changed, 402 insertions(+), 1 deletion(-) create mode 100644 tutorials/docs/images/Testing/codecov.io_show_covered_code.png create mode 100644 tutorials/docs/images/Testing/github_coverage_diff.png create mode 100644 tutorials/docs/intro_testing.rst diff --git a/tutorials/docs/images/Testing/codecov.io_show_covered_code.png b/tutorials/docs/images/Testing/codecov.io_show_covered_code.png new file mode 100644 index 0000000000000000000000000000000000000000..4488d9c9ef06848ba0b59c77953536578716559a GIT binary patch literal 61714 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 z%0A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 aO8}Ls3kqLSdI8k?CMTsVSt)KD{Qm%^mo1b4 literal 0 HcmV?d00001 diff --git a/tutorials/docs/images/Testing/github_coverage_diff.png b/tutorials/docs/images/Testing/github_coverage_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..17fbe2700362e6af276f057a18729c5028330336 GIT binary patch literal 16492 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 literal 0 HcmV?d00001 diff --git a/tutorials/docs/intro_testing.rst b/tutorials/docs/intro_testing.rst new file mode 100644 index 000000000..b01af093e --- /dev/null +++ b/tutorials/docs/intro_testing.rst @@ -0,0 +1,401 @@ +.. _intro_testing: + +Introduction to Testing +*********************** +**Overview:** + +- `Benefits of Testing`_ +- `Hands on Testing`_ +- `How to Write Your First Test`_ +- `Tips & Tricks for Writing Tests`_ + +Benefits of Testing +=================== + + .. image:: images/Testing/codecov.io_show_covered_code.png + :width: 80% + +Whenever a feature gets added or altered, it is best practice to confirm the intended outcome with tests. +This document features an easy step by step guide how tests should be integrated alongside new PRs. +Adding tests to your new code does not only help you to make sure that corner cases can be reliable tested +over and over, but also to make sure that your code continues to work, when there are new changes made elsewhere, +like the ROS2 infrastructure or other dependencies. + +Tests can help in two scenarios. First, during programming they can be conducted manually, while they are still being tweaked to work in the intended way. +In order to test them manually and include them into your workflow, a few steps are necessary that are all explained in the next chapter. +Second, the tests added during the active programming phase of this new code can also be integrated into automated testing performed by the CI system setup with the nav2 github repository. +This helps others later in the continuous development process of this open source project. + +Also, not only new code should have automated testing through CI. To find nasty bugs and corner cases, it is Nav2's ultimate goal to have a test coverage of nearly 90% ! +This will lead to a more improved, stable, and industry-grade code basis, as new PRs will see if they break things in other sub-systems, that they normally would not think of impacting. +It would be great if you can always check into the automated tests results of CI during your PR. + +The current code-coverage of the whole nav2 project can be tracked on +`codecov.io/gh/ros-planning/navigation2 `_ . + +During your PR process, CI will publish automated testing results directly into your PR as a comment as soon as you mark your PR as ready for review and/or new commits are added. +These results also give you great insights about what code coverage areas you added or even lost! +It is a great visualization to help you understand what code is currently being used and what might be just dead code, as it is not tested and therefore cannot really be told if it works or not. + +So, if you already work inside or with one of our components, please have a look what kind of tests are already there and where is room for you to improve our testing! +For example, the conditions in the code above did pass the test, but if there might be a more complex mechanism in the red part (the part that is not covered by automated testing) it can come to an unpredictive outcome. +Before heading into writing new tests that could easily test those corner cases, let's start with working with existing tests. + +Hands on Testing +================ +0. Get Nav2 Working +------------------- +Before you can test anything, make sure you have the basic examples of the :ref:`getting_started` guides up and running. + +For integrating and running your own tests, you have to build nav2 from source. Using nav2 main with ros2 installed as binaries technically works, +but the automated CI testing, happening on github when you merge, also uses ros2 rolling (= latest/main). +Therefor, it is recommend to test your new code with the nav2 stack based on the main branch and also let the script (getting started guide) install ros2 from source. + +1. Run Existing Tests +--------------------- +Nav2 specific tests can be found in each individual component under a dedicated test folder. +One additional package, ``nav2_system_tests``, `exists `_ for testing components, +sub-systems and full system tests, in addition to unit and integration tests in individual packages. +This package also comes with a ``README.md`` pointing out, that unit tests for sub-functions of components should be provided within each individual component. + +To run existing tests from a certain package like ``nav2_system_tests``, you can use this procedure: + +.. code-block:: bash + + $ cd + $ colcon build --symlink-install # build nav2 workspace including the components that you are interested in + $ colcon test [--event-handlers console_direct+] --packages-select # run all the tests of [with output] + +To run all tests of the complete nav2 stack, you can also use ``colcon`` for convenience: + +.. code-block:: bash + + $ colcon test + +Now you should see a couple of tests run in your command line. After they have finished, +``colcon``outputs with the optional flag ``--event-handlers console_direct+`` an report about the tests. +This looks something like this: + +.. code-block:: bash + + [.. Output of 30 individual tests ..] + 100% tests passed, 0 tests failed out of 30 + + Label Time Summary: + copyright = 10.18 sec*proc (1 test) + cppcheck = 1.46 sec*proc (1 test) + cpplint = 2.72 sec*proc (1 test) + gtest = 49.72 sec*proc (24 tests) + lint_cmake = 1.18 sec*proc (1 test) + linter = 19.24 sec*proc (6 tests) + uncrustify = 1.65 sec*proc (1 test) + xmllint = 2.04 sec*proc (1 test) + + Total Test time (real) = 69.00 sec + + +You can see that in this case 30 individual tests did run without any errors. +Besides the 24 `gtest` tests that represent functional tests, there are also 6 tests of another kind. +Those 6 other tests are `linters`. + +2. What are Linters? +-------------------- + +While code might be functional correct and a compiler generously compiles the desired functionality already, +`linters` ensure that the source code follows special coding, design and organizational guidelines. +This not only helps to comply with legal regulations, but also to sustain a standard way of how code is represented. +Especially while reading and understanding unfamiliar code, it helps that there are certain design guidelines enforced. + +But what do they actually do? +Starting with `copyright`, a set of files with certain extensions for python, cpp, and others +in this open source project must be published under certain licenses and include copyright holders. +But also code style guidelines are checked with `linters` like `cpplint` or `flake8` (python). +Such checks might include tests like: strong checks against how comments have to look like, no tailing white-spaces, +not too many following blank lines, not too many characters per line (99 chars), position of brackets, and so on. + +There exists a common stack of linters used by ROS2. This ros2 documentation about `ament cmake `_ +not only shows how linters are correctly integrated into your package but also points towards the ``ament_lint_common`` documentation. +Here are all linters explained in there full extent and also listed which are added by default through the common package. +Also, it is possible to write and add your own linters for more consistency checks. + +In more complex code stacks like nav2, linters are included into the test process by ``CMakeList.txt`` +and ``package.xml``, like pointed out by the ros2 documentation above. +Therefore, **all** packages of nav2 have to include them by themselves. +A minimal setup for linters looks like this (`source `_): + +``CMakeLists.txt``: + +.. code:: cmake + + # this must happen before the invocation of ament_package() + if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + endif() + +``package.xml``: + +.. code:: xml + + ament_lint_auto + + + ament_lint_common + +To run some linter - ``ament_{cpplint, cppcheck, uncrustify, flake8, etc}`` you can us ``cpplint`` etc. as keyword for the regex in the next section. + +3. Run Individual Tests +----------------------- +In the event that one specific test out of many tests might have failed, +it makes sense to work on getting this one test to succeed again. +Also while developing individual tests, it might make sense to only run one out of multiple tests. +Referring to the *chapter 4.7* of the `colcon documentation `_, one can also run individual tests through ``colcon``, as it uses ``ctest`` and ``pytest`` under the hood. +This can be done with: + +.. code-block:: bash + + $ colcon test --event-handlers console_direct+ --packages-select --ctest-args -R + +Where ``regex`` represents the name or search-expression for the test(s) you want to run manually. +For example with the ``nav2_system_tests`` package, the value for a valid regex could be ``bt``. +This would include all tests for behavior tree related tests. Also, respectively the keyword ``planner`` +or another full name keyword would run the specific test you want to run. +You can find the name of a certain test by running all tests of the desired package with the option +``$ colcon test --event-handlers console_direct+ <...>`` or look the name up in the corresponding ``CMakeList.txt`` +of the test sub-directory of the package you are currently working with. + +How to Write Your First Test +============================ +After dealing with working and understanding the existing tests on a higher level, it is time to focus on add and writing your own tests. +There are multiple packages your test might fit in. So it is important to plan your next steps. +After you chose the direction you want to head into, you have to decide between an unit-test or a launch-based test. + +1. Plan Your Own Test +------------------------ +**Before writing a new test**, you have to think about what you want to test: + +- Is my feature relevant in combination with other (sub-)components of the nav2 stack? --> Integrate it into launch based ``nav2_system_tests`` +- Is my feature only component specific? --> Write dedicated unit tests or launch based test inside of the individual component + +**What makes a good test?** + +- Code Coverage: Are all my new code lines run at least once with my test? (check with codecov.io automated with each PR on github) +- Corner Cases: Monkey proof input, test the limits (overflow etc) +- Expect things to break: this is good! -> make sure to catch all errors and handle them accordingly +- Combine your components with other test: If feasible create corner scenarios where your code really should improve things +- Quantity over complexity: Better write multiple tests than make them to complicate so others cannot understand why it fails in the future + +**What tools do I have?** + +- look and learn from existing code in the nav2 stack, we have plenty of tests! +- play with different launch parameters: Have a look at overwriting them in the next section + +2. Write Your First Test +------------------------ + +Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. +To add a new test besides the linters mentioned in the chapter before, we have to add them in the ``BUILD_TESTING`` condition. + +This can be achieved by two methods to include multiple sub-folders with ``CMakeList.txt`` inside: + +.. code:: cmake + + # this must happen before the invocation of ament_package() + if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + # add gtest and pytest + find_package(ament_cmake_gtest REQUIRED) + find_package(ament_cmake_pytest REQUIRED) + + # add your subdirectories directly with dedicated CMakeList.txt with pytests or gtests inside + add_subdirectory(src/planning) + add_subdirectory(src/localization) + add_subdirectory(src/system) + add_subdirectory(src/system_failure) + # ... + + # or + add_subdirectory(folder) + # this one CMakeList.txt inside of this folder will then include the rest of the folders with CMakeList.txt + + endif() + + +a) Launch-file based Test - pytest +"""""""""""""""""""""""""""""""""" +Here is an example for testing with python and pytest, especially useful for testing launch sequences. +Interesting to note are the free set-able environment variables that can later be used to rewrite parameter values for launch scripts. +`Source for the launch-based test `_ + +.. code-block:: cmake + + ament_add_test(test_bt_navigator_with_groot_monitoring + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/test_system_launch.py" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + TIMEOUT 180 + ENV + TEST_DIR=${CMAKE_CURRENT_SOURCE_DIR} + TEST_MAP=${PROJECT_SOURCE_DIR}/maps/map_circular.yaml + TEST_WORLD=${PROJECT_SOURCE_DIR}/worlds/turtlebot3_ros2_demo.world + GAZEBO_MODEL_PATH=${PROJECT_SOURCE_DIR}/models + BT_NAVIGATOR_XML=navigate_w_replanning_and_recovery.xml + ASTAR=False + GROOT_MONITORING=True + ) + +This `cmake` macro ``ament_add_test()`` can handle raw `pytests`. Arguments are line or white-space seperated. +The first argument is the name of your new test, which can later than be used as a `regex` search keyword to only run your new test. +The ``GENERATE_RESULT_FOR_RETURN_CODE_ZERO`` is a flag for `pytest` and necessary for this process. +``COMMAND`` describes the `pytest` entry point for your test. +``WORKING_DIRECTORY`` and ``TIMEOUT`` are self explanatory. +Under the group ``ENV`` environment variables can be set. Those can then directly be used in your python script as input via ``os.getenv('KEYWORD')``. + +Depending on your test, it might not be necessity to declare all keywords in each test. +In combination of ``RewrittenYaml()`` from our ``nav2_common`` package, +we can use this to rewrite default parameters from the main ``params.yaml`` with a few easy steps. +A small example for this can be seen in the last section ``Tips & Tricks for Writing Tests``. + +Now, we added a few parameters and made sure that the parameters for launching our nodes are all setup correctly. +The next step involves dealing with ``pytest`` and testers. This code is from the same file as the ``RewrittenYaml()`` refers to. + +.. code-block:: python + + # configure all the parameters and nodes based on our input in the CMakeList.txt + ld = generate_launch_description() + + # setup our tester with the `tester_node.py` and a few additional input parameters + # here multiple test can be created to test your tests in more versatile environments + # even start fuzzing the input values might add robustness to your code + test1_action = ExecuteProcess( + cmd=[os.path.join(os.getenv('TEST_DIR'), 'tester_node.py'), + '-r', '-2.0', '-0.5', '0.0', '2.0'], + name='tester_node', + output='screen') + + lts = LaunchTestService() + lts.add_test_action(ld, test1_action) + ls = LaunchService(argv=argv) + ls.include_launch_description(ld) + return lts.run(ls) + +The next and final step would be to implement ``tester_node.py``. The node `here `_ is quite a good example. +It features argument groups to take various parameters as input that can be seen used in the code section above. +To name its core features: the test engages with multiple `lifecycle_nodes`, waits for all `action_servers` to be available, sends a goal, +tests if the goal is reached. This is a great example to use when one must implement a new pytest with ROS2 integration. + +.. note:: + When testing with launch files and testers also written with ``pytest``, it is possible to rerun tests + in between iterations of your test without rebuilding your work-space. + Although, this requires to build your package with ``$ colcon build --symlink-install``. + +b) Unit Test - gtest +"""""""""""""""""""" +This first example is for registering tests surrounding behavior tree actions. +`Source for the c++ test with ``gtest`` `_ + +.. code-block:: cmake + + ament_add_gtest(test_action_spin_action test_spin_action.cpp) + target_link_libraries(test_action_spin_action nav2_spin_action_bt_node) + ament_target_dependencies(test_action_spin_action ${dependencies}) + + ament_add_gtest(test_action_back_up_action test_back_up_action.cpp) + target_link_libraries(test_action_back_up_action nav2_back_up_action_bt_node) + ament_target_dependencies(test_action_back_up_action ${dependencies}) + + + +3. Add Your Own Test +-------------------- + + + + + +5. Check Your Test with CI and Check Code Coverage +-------------------------------------------------- + +.. image:: images/Testing/github_coverage_diff.png + + +Is there room to improve the test coverage near your code? Ain't you just the right expert about this code section? +Think about adding tests that exceed your own focus and help improve nav2/ros2 reach a higher overall code coverage and ultimately also quality. + +The report above is an automated post by codecov.io-bot on github that posts results of CI automatically for every new PR. +Please consider helping increase the code coverage and use the opportunity to learn more about the internals of the navigation2 stack! + +.. +.. +.. +.. +.. + +Tips & Tricks for Writing Tests +=============================== +This section shall provide best practices and things not very obvious to a new test programmer. +Also, consider checking out the tutorial about unit tests and integration tests with colcon provided by the autoware foundation, +`here for unit tests `_ and `here for integration tests `_. + + +1. Rewriting Parameter Values from YAML Files in Launch scripts +--------------------------------------------------------------- + +In most occasions some small new features are added and made available through a few new parameters. As the standard nav2 user should not be overloaded with features it makes sense to disable most of the additional or drop-in features in the default ``params.yaml`` file. +But tests should still be comparable and only alter the test-scope specific parameters. +Therefor, it makes no sense to copy most of the ``params.yaml`` file into multiple test.yaml files that would be prone to fail future changes. + +ROS2 with its launch systems already includes many substitution mechanisms, that seem to handle a few dozen different scenarios, but are a little bit hard to use from a user standpoint with lacking example material. +Luckily, nav2 already includes a nice helper function for replacing values in YAML files. +Here is an example showing a small feature set of the capability of the launch system: + +.. code-block:: python + + # ... + import yaml + # ... + # Replace the default parameter values for testing special features without having multiple params_files inside the nav2 stack + context = LaunchContext() + param_substitutions = {} + + if (os.getenv('ASTAR') == "True"): + param_substitutions.update({'use_astar': "True"}) + print ("ASTAR set True") + + if (os.getenv('GROOT_MONITORING') == "True"): + param_substitutions.update({'enable_groot_monitoring': "False"}) + print ("GROOT_MONITORING set True") + + # Fails -> multi dimensional keys ['planner_server']['ros__parameters']['GridBased']['use_astar'] cannot be combined in such manner + # param_substitutions = {'planner_server.ros__parameters.GridBased.use_astar': "True"} + + # Fails -> value for 'bt_navigator' gets overwritten with 'ros__parameters' as value and not as next stage dict + # param_substitutions = {'bt_navigator':{'ros__parameters':{'enable_groot_monitoring' : 'True'}}} + + # Obviously not the needed behavior but shows that 'HELLOO...' only gets written when perform gets triggered + # param_substitutions = {'bt_navigator':'HELLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO'} + + # Finally works with LaunchContext and perform sub-function + # param_substitutions = {'enable_groot_monitoring' : 'True'} + + # This would also work, but then the whole params_file gets recursively searched and replaces "False" with "False" -> time wasted + # param_substitutions = { + # 'use_astar': os.getenv('ASTAR', default = "False"), + # 'enable_groot_monitoring': os.getenv('GROOT_MONITORING', default = "False") + # } + + configured_params = RewrittenYaml( + source_file=params_file, + root_key='', + param_rewrites=param_substitutions, + convert_types=True) + + new_yaml = configured_params.perform(context) + + # Check if value has the desired value now before loading the yaml as launch_argument + data = yaml.safe_load(open(new_yaml, 'r')) + # print (data['planner_server']['ros__parameters']['GridBased']['use_astar']) + + +This can also be investigated in a real scenario in the nav2-CI test. Just have a look at the ``nav2_system_tests`` test for the whole system `here `_. \ No newline at end of file diff --git a/tutorials/index.rst b/tutorials/index.rst index bf819b833..c76fe9323 100644 --- a/tutorials/index.rst +++ b/tutorials/index.rst @@ -9,7 +9,7 @@ Navigation2 Tutorials :maxdepth: 1 docs/camera_calibration.rst - docs/ci_testing.rst + docs/intro_testing.rst docs/get_backtrace.rst docs/navigation2_on_real_turtlebot3.rst docs/navigation2_with_slam.rst From 7ee19cc78cf653d1624d3f55cb77cebc8f023715 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Sun, 27 Sep 2020 07:24:55 +0200 Subject: [PATCH 10/16] removing code_coverage_bump --- .../CI_Testing/code_coverage_bump_40_80.png | Bin 14373 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tutorials/docs/images/CI_Testing/code_coverage_bump_40_80.png diff --git a/tutorials/docs/images/CI_Testing/code_coverage_bump_40_80.png b/tutorials/docs/images/CI_Testing/code_coverage_bump_40_80.png deleted file mode 100644 index 109d4fb9b41de9155b457b546d7e2381ffa42acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14373 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 Ybt=uT!Vkjy{15A?f|`866G+Ja0J6!sqyPW_ From 9126c1b49eabcae64d390f7637bb0bfb7fabb7e3 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Mon, 28 Sep 2020 02:26:22 +0200 Subject: [PATCH 11/16] add groot intro for BT editing and monitoring --- .../packages/configuring-bt-navigator.rst | 2 +- tutorials/docs/groot.rst | 94 ++++++++++++++++++ .../Groot/bt_w_replanning_and_recovery.png | Bin 0 -> 102280 bytes .../docs/images/Groot/groot_bt_editor.png | Bin 0 -> 98807 bytes .../docs/images/Groot/groot_start_menu.png | Bin 0 -> 80730 bytes .../Groot/groot_with_nav2_custom_nodes.png | Bin 0 -> 89558 bytes tutorials/index.rst | 3 +- 7 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 tutorials/docs/groot.rst create mode 100644 tutorials/docs/images/Groot/bt_w_replanning_and_recovery.png create mode 100644 tutorials/docs/images/Groot/groot_bt_editor.png create mode 100644 tutorials/docs/images/Groot/groot_start_menu.png create mode 100644 tutorials/docs/images/Groot/groot_with_nav2_custom_nodes.png diff --git a/configuration/packages/configuring-bt-navigator.rst b/configuration/packages/configuring-bt-navigator.rst index 62741f636..4404f4694 100644 --- a/configuration/packages/configuring-bt-navigator.rst +++ b/configuration/packages/configuring-bt-navigator.rst @@ -64,7 +64,7 @@ Parameters Description Enable live Groot monitoring of the current BT status. This is possible due to attaching a ZMQ server and publisher to the active behavior tree. - Consider checking out the `Use BT Groot Monitoring<>`_ tutorial for using this feature. + Consider checking out the :ref:`groot_introduction` tutorial for using this feature. **Attention:** Groot will only work after the behavior tree is running, which means that the nav2 stack has to receive a goal first. diff --git a/tutorials/docs/groot.rst b/tutorials/docs/groot.rst new file mode 100644 index 000000000..51224ca52 --- /dev/null +++ b/tutorials/docs/groot.rst @@ -0,0 +1,94 @@ +.. _groot_introduction: + +Groot - The fancy BehaviorTree Editor +************************************* +- `Overview`_ +- `Edit Custom Behavior Trees`_ +- `Live Monitoring Behavior Trees`_ + +Overview +======== + + .. image:: images/Groot/groot_start_menu.png + +`Groot `_ is the companion application of +`BehaviorTree.CPP `_ to create, edit, and monitor behavior trees. +With Groot one can visualize, edit and create new behavior trees. Also, complete new custom nodes except control flow nodes can be created using Groot. +`Recently added `_ to the ROS2 and nav2 implementation of BT.cpp V3 is live monitoring of the current status of the behavior tree. + +Edit Custom Behavior Trees +========================== + +.. .. image:: images/Groot/codecov.io_show_covered_code.png + :width: 80% + +A few steps are necessary to view and edit existing behavior trees: + +1. Open Groot in editor mode +2. Select the `Load palette from file` option (import button) near the top left corner. + + +.. image:: images/Groot/groot_bt_editor.png + :width: 49% + +.. image:: images/Groot/groot_with_nav2_custom_nodes.png + :width: 49% + +3. Open the file `/path/to/navigation2/nav2_behavior_tree/nav2_tree_nodes.xml` to import all the behavior tree nodes used for navigation. +4. Select `Load tree` option near the top left corner +5. Browse the tree you want to visualize the select ok. + +.. image:: images/Groot/bt_w_replanning_and_recovery.png + +.. note:: + If a tree cannot be visualized because some nodes are missing in the pallet, you might need to visit :ref:`plugins` and search for the plugin that is missing. + If you got all the optional blackboard fields from the code of the plugin, you are free to go to add the description to ``/path/to/navigation2/nav2_behavior_tree/nav2_tree_nodes.xml``. + Now you can reload the pallet from this updated file and should be able to work with the tree. + + Monitoring mode is unaffected from this, as the whole factory with sufficient meta data gets transferred upon connection. + This is a known issue to reduce the overhead of creating additional xml-node-description files, when the data is also available in the shared object. + Feel free to support adding this feature to the open source project Groot. The `feature request `_ already exists for this. + +Also, the Groot editor allows for creating new custom nodes via its graphical user interface. This also works with nav2 except custom control nodes. + +Live Monitoring Behavior Trees +============================== + +.. raw:: html + + Groot-Test-5FPS.gif + +In order to live monitor a running behavior tree, a few easy steps are necessary. + +Behavior trees of the BT.cpp V3 kind do not automatically include monitoring. +This is and always should be an optional feature as it involves opening an additional communication layer: ``ZMQ``. + +Adding the monitoring feature to nav2 therefore involves activating a special parameter listed in :ref:`configuring_bt_navigator`. +After activating ``enable_groot_monitoring``, the zmq network ports for a ``zmq-server`` and ``zmq-publisher`` can be set optionally. + +Given the launch-parameters are set correctly, the navigation2 stack has to be started normally first. +Regardless of simulation or real hardware, **monitoring only works if the behavior tree is currently running!** + +A step-by-step guide for simulation can look like this: + + 1. complete :ref:`getting_started` and be able to run the tb3 simulation + 2. set ``enable_groot_monitoring`` to ``True`` in the ``params.yaml`` file + 3. (re-)start the tb3 simulation (optionally with ``headless:=True`` for only RVIZ as GUI) + 4. set the initial pose of the robot -> this will activate the whole navigation2 stack (check if they are active) + 5. start Groot and choose the monitor mode + 6. press connect in the upper left corner (``Server IP``, ``Publisher Port``, and ``Server Port`` can all be left to the default for the simulation) + 7. the behavior tree should now be visible in Groot + 8. send a new goal to your robot (can also include a new behaviorTree.xml, which gets loaded automatically) + 9. watch your robot drive in simulation and see how the behavior tree changes it nodes + +Real world robots can easily be adapted to this. Just change the ``Server IP`` +and zmq network ports accordingly to your local environment. + +Reloading of the behavior tree in Groot is done on multiple occasions, +but only when a new behavior tree is loaded by nav2 or Groot is restarted. + +.. note:: + Until the current PR gets accepted, for fixing additional corner cases where Groot must reload the behavior tree in order to match the the status information to the right behavior tree with the right ``uid``, + it is necessary to use this `fork:branch `_ until the `respective PR `_ gets accepted. + + diff --git a/tutorials/docs/images/Groot/bt_w_replanning_and_recovery.png b/tutorials/docs/images/Groot/bt_w_replanning_and_recovery.png new file mode 100644 index 0000000000000000000000000000000000000000..56ad5e3f9889eb845fafd7394e442e493c26423d GIT binary patch literal 102280 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 literal 0 HcmV?d00001 diff --git a/tutorials/docs/images/Groot/groot_bt_editor.png b/tutorials/docs/images/Groot/groot_bt_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..094c36aa81497ee0322b54bb3214082a9ec6f1a9 GIT binary patch literal 98807 zcmZ^~1yo#3v^7W|K=1^2LU4C?2oT)e-QAtwPH=a3cMHLSySuwI?#$)od;iR=HPdTF zXu9vMs(b33efHiJDl09D0E-O^1_p*8_T#%e7#IXA7#O(sCn(?@J*I?f;Gd5Uf?|rF zfS2bd!w}$SEJtBgM+F;WM;ASNBQO(d8!ICk2LpQ}BWnj!8^?2qE?(e6wC^7hvNzIm zG_$e(s%U0q1SSRihmrlOf|2c4MtVm2uMCWw4D_6gOkV}0z6uE|D2mcj1cHHm1rz%& zpy--@vg+chV1zROIv1M~(`Y3_B{xzCGODUIB+}r&l~4Rcem{i&Ei4-x_LCoc$~QlF zNP+K(wY`i+3d%W-Nn^zOFL{mive|)!IkrBPR7t05;~C#mpU1A!_sO$ROG-$wbbajE zo5~{>7BTo68o)Eqh2=gAej*G2{&G-ILd%={Auo??XJ@CXs=Bee8z_<|AcyKW2$gX9 z$VI%Yp?|z5DK8F7Ar@L3N?BT(+UET~-y{s+mqSGr?*8)!90LO*H#fK0^MUc~?5yNC zwKYkW=%iu8Qbu1tHvsG3r+XcwArQ-Vf->@|_G>}nHMzzxZ8}H5!;N8Z?#@_z^T(Mf&{34Nm(}+1Q zE)7#I>(iyrW=L+s{%?S;;$|7l*oPHg{!MmA#mr6Qj=EbU&o_9^H*W3|f4+cFv3B@( zl7FB7uKfdvRi>^kZR`hhu&enJ@z%3Wu^39_ye)lqDuKRbi^T-DN5Ov!2l^=faJlO+ z(>*mu_!A#;yIK*yOQW{5ntLfqih*@pG5fy}b4zP#YL2;ELUHy@P4Nv zX0Y!$r_M@XQU6^pzu?2G}+08Efi43x=dms&dE|8^Ul`jB14fKksWb2IV^0HU}5P>ix{^zUp!6JzeBq ziBd{wY_Pb5auzs+!Mo!uEF_?Ns}qB%1(D zI}_DC;PaMSo*m5AiyOhz*m&yGe#40!9sUo4r_Zc(kBisB>chygZESKqlV+-=B}6vW@WlC>KKZZ9JL)AQO`&4Pwf6}Ajp82}cRQJd zj}(;F=CJNzYN{?mtDg4}2l(9>1ucRp#!i5U)W(HhjVH)~yd>*m=n8v7Fpe3{QJ8#_ z6%jZb|4_$|Z*k={Y`tIf>WMBgs*h1tc9fNO(eA4(H(OX^k+vz+t6)`2tu} zr;!U#&f3P4i~7{_>?5ND&%3c>$CHH^T9n2wq#Z24`r>C3;&hWvT^vX;YAZOnoOv{N@}N8=b`Z39-5W%a z01uTThy1RpY>=6_oSTPN<8Q9;6{g}WV>q6Yy!`cnctT!8fgi&WSeg%S|MRNOs*Up(NiOPV&)Tvz^3NJ;3`3>{$ijtBLrr zX!WFg%66yWK-&&@VHClTXMUA?mO{FF->)usu-T;|ib?{LdbMt|IKXrt$p1 zQv_v%gWmn_$C(T?uF@#Yp_4J;YX0$#W@747SY3f{Z?xXw-a1*N6kN-uE2dWuoc(jP z{_*T*L1cO;U6D;~qnr6_<#f^SIYd%Z6Ib2EXrU>9$BQq6l>Nt323ol#-!%Qf2>q zOGHWQ+8XaXWC4E@)e$qV1FU~7d7Kdu|v{%*j)Wl`5>mq2n66L2%XcYhI&1ad|JY9%tivA$4JLB9(C=4ixVluDHSx7NH zrTmxb4M_%sCh_xQ-LukUQC714D@}y868&NCX$!c_B@Ybie^>LA@q3SN;Qepwak~E% zz`u9I3;!kk|DTUelaP?4v_bvvT+K!DzK}37%Coo-{=4ocP(7teCAHAxe=~f@dQUy? zH~QX5*8P8~WeV*=vCG2Ep$7cR-beR1me_$aJpI=VUQg$*eJcrudLdQ7<4NkhK+man~9C;sgioo<-WKqa;G}3NScfS)9Z{BiLnDHFRQ=x)g>WZa<(P&sk(AD6 zi$p#}AAR6m$lhPrF?UtY`m-K=f-gpDI52Q+CLf5*n~7R+K?$*kzq2UfOtJ8&Tsg=>L#|@bgSFFP& zwSmAf*O9=kJQV?k80d~J7r5YJ4t0JSsIy4ejqPd{%>a@jt#m%Bp!f1Xvy$_?uL zLNVsG`?VR8{|AFc+6~#zMW!gkj>Ioo=RVYn^`Q?C?Hr61T<7I*ef268#18IbIQ0Z~ z&{0|@7pqGo5hVmYM?WjD+FzB;m-{~}-&*u6;~+4nHAgg16;6)XL+35s=x#og$EFTt z+?+FA9Lt(Zs`uRLu+>>E@na`d4`#$F@ra3q5|gg^5R)9sF}2V2FY__hpMGvsuh%;o z%DUH6CZqPj>ccT`L5|yH*k*UJCBSI+V6>Ta@6_S-=Y7SvZK_X$9|7@?iwyL#6Ng^$$Bfyo4zcNG~M$B|2TW` zwOyIaczj*7YW&C`;V@ey*Csf|a9bi$q@m=b@+WN7j{4vr^nhHS$4Upo_Q6LWfgHfo0|qGLUZ%Q=xc z!|a~@u2XuG6a|urAYwUIB7T|r+Lyv9fHv{`%+@^#r5Q!A-@1o(G%t<70)|>F{Zcwt z{)u;tMab)!2~SA^ByDr`c+}ml)%HQ7?KW5Ce2n>mir;#NDI8Wvm9viK3=7e?y*4(- zpY8Qd1G&g=Jl69HH6y%Yq&g#3fP8BM%Is#AyDR;!FQT{EZP0ATmhHtL#q^TqVTC2Pwc^S!duQ0i~A2JCew`WET zvmPF2m-xp8QP6&;?i880G7(4h9YKUJm277=`dt_ri1l@p0NUXE9MdP6FN%0eu@gLy zi5ShGKRm3QyJX4^70&s@=&bDS-l*GsY~s;A&ThHDJ0CeVBQfDkl%gW!|>BAr`Wen;5VV!YHlRmw5hg*+j6v0p8EH%kE$4J zHKbsdiS3_O5Yjbn^E-=Rm=d)N*6`(H_L!g;t2bQTRT{SUsvMH*)g-1{yh^emq-Hj=@!B58RDWN}(^dKKjhcg^^xygS%84l*iI0d;Q1VyImn!+*_KQ z!GztB=1WB#6QWxzQhof{E9)o*lKvEq4a%Lg2c^eBNSk-ik1lJ+67%TG4G&pZc{02E z)aayM`Q`D%37)G5TLsvLB9|h+!&jSsrRz_=WD+SV+fsyQwEG~=!}UO|J1;OJjhk^S@ZpGort#nkUp>4ZQ z)apT`x@7znXzKLjsKenUJ%w(Q*0pa7U6i zt3YAzJn(XFUyHNDK`~>t;*ofK9PIG^uSynt7ZFM2R0`P-1i|Vw6nA43DBGJm6U8CE z{TFIgA0Z)AZn6I>s{!;49(QMA)&JXL+CcdW1m*s3y>A*yppuCG-$MU3z1r$Dyu$LY zv=a6*P2QZXF0ZicSS&Z$u(`net55CMj$lzyQG1m_|9vhqRny@A3m{~)zyXf|T({Hk)hStxL&OX!S{UOA6ka|->7~_;#&s6WBplbuxN1w zZJ{(dIXM~KUu>qc+xa={kEOIS|HB!*aDR5X`v(U@yIvo|)7Wf`Ej$Pa2wv~H-WXgj zbb)SON;BhM^lS-VtVrQk+wY2lLqK40yV7TQ-KMk*1O4Z|h@~ZUFcQJu&R`r^Je^Kv zsZ!aH@Eb4^ZFiA8hI9YOwl*$>BI&-x#fO+>RdsdwLP;$1x$*}|t4LgqSc~~eo@s`F z&kq{m=rruE7hl0xEanWC8?8vq26X8ss&x3k(CM@zl*>jN49ZG}rV1odSgo)(H#bw} zTAG{btykFHZ;k?U$y??Mfsw{!9XPhOBd`M8#z-;)1RWin@p$Ga0NbVJ=0;MO9B#q` zfj!>p{o(LPm92~q@qlp#_h?d>nP?QKv z2EXcRdXY%%1PiM@JffVouAM7BPfYeoh`yciMgW8t#hY}K(#+uUdE?^X;0Ou|vODa- zhvjC^nol0zfRTs!iR6i81?%LAWyCC*G8;d%0sMz4b8e}5;Vu5N7SQ|dhSPQG4#tuk zcG0QT2K)(xV*9TuixJ z^FZ?O@BpZw>c&QCo%v2LkM@p^6fPH9Fs)X{?y<2b;c)a16M3RYV2LyuQ2brqFCpRK z1~*5uVDR|d$v~_Op-u{N2O|>jN&>IOMubnFey^^s_M+`}BH*yn8x6$=C(5KSLh9(~ zEH&A@Ne<|AxU-1l#e|_z@y-zCk;CSRMCuPG(tL!5t^=MRH#{q4PMOEF?v4m;a9?cs zQ8mSZz+^3pDTgk+fxB`)hyxR=Xu(~!U6H~OzmeOE!`+Weh0u12@1RbzDsL-44>v`1 z^P$aF2?)DyZkKG$-$RiXmY3^n)_K#@)9+vI)Im3o7dI*-Fa3B1Qg+&}x_#-J4K8HvW2HWio_eMN!(Rv>jk#=QxtXX~SJkjXA zd(igclJntILA}{@KQQG=2xvrl*NY8mj}Rp#ql=AhS9f>$GUbXQ>+Pf2GO&+OP`vhO zluD(aadFc-t=444+8t6PVtz)fKYWR#i4B2i>&-du+L-o^!H826o$=_XRYWLs)WE^=%a8sE@!Or5vCjJ>pgc^&5oxUM-{@T3M}TbgV6XtOR3-6 zndlfOpYr_dlp&=4z;g5{oELLgMdNMDvl&hJ*x6v~B>F(}$osqlv?T7H_>^d&LNwW& zR5YlOMStfn;%W}Y5>`Q^ZFJyL)bhpZcctvtiuITDMWIrC&Do#1UN-cs_h9Eq;x8Cg zB9*y9G2Y*OJTrCLUZlCkKaj7l=ovK4EN;irS{oh}Q&6wErG5$*{Md*;QZEyvFiyl0 zgf&KMa#2lpe{=6<{k>3Ep%?`Yk)}xEWrh!tA~6lp3)Y%Iw_aPc;5^wEnh+=rM!?x&nf?}?bTpVQipoU70nxH+Dm zCR5|^yr(DdzSm1!CgAnN^c_y3W3pOehDD?7J+A6{m5pvPE6MNG-2R&y`0TkH2o*_H z@LIu;ZsJ{3_isufj1jOSFeF5mmT+LnrMy38*1sI@8%Fb>odOS^tj4& zl^;*2i&MOV+aG>bmauI;8`1?UVu?NG0e^C2Zt+~Ntt*w#wHsO~F01Une`VC3+`j1F zd5?wIonmg_j|63|8K2)EzcWX2s8=7;`Xh1bJnpP-&)01(8-er{5*f+j#uc4AX?{LF zR*21jtt88A$~@$A%rZ`Y#`QE4Z}H4tj#5Fh7)ExTi!h%U}h*hlw4~3Qzv~`%l;SdB=J0pwbt-kQ>ot@qi zg`yunete~;zi7$oTo@lm;^X53D=#mfO43kMlPi+WDB>(EEv+}74Ko;sGE(=xK9GyT z=XqT45)u?l=5Qbd1D>bJ{#Zt#4?^7Bbb&7-y*_hsaTtj(r}wBRp1hFo<BhX5Pr`vt4dLW8n<>;CS)fQTl3jW z-ft{wJhDdXrOM9_`z$lqQf690n=dq7_IDL)%~YYdE0%h$>>{*=oT9*vC*n{ zv+)nm`%?oFAFvg=6uD%fU9S#thR{0NW~{y-lqZGJ-7X{z1NLBa8Kb4# z3fxxg;7AuR1dr!viXQB(m)~t=q?v}=T>|mXZje0B_#i#2h>gEfW}fx7a6Ve0{eSYf z5!xaQpF_}5C2&}BMC=>~KazSj1m?}7kgJx{FEvAVy%uq|+?K0CF}z&dT{}*rIJ+Xg zaC-Hwh486XUw-5nP^~L}``XEE8=uF}Mm$BQdG{U`d+dT7rgzrVboY+s$f zyYYpQmZmiQRWnMuGU(XwcP_ZW-E+T(QGIa@nHrN9tb@0)s6cT>=wuR;6-TC-pok@$+v2tOki2W7-`VM(0u!6$?Lahd<=wBPiNND1@WoUIe z)A7xr5OIHW`$0O?`#3r>!=Y1eEYuiic6u&ek5AUZFd>fQhZckp68a5`vR*9avz5$a zAzB}V-rn0;lV)w@9XWfZcgDrU8^TepF#g&d_*F}@Sw_+d2f!nHX0{Y#mwz?bmhPSP#K+PxzP_)Z72 zFwifTb8lVE0ltuczi5&xRFP$Yy(PEHIi=b#;c1&>#&YI0AEO_cwLkk_GM`)akc?UEUC-S6M!Ltx zqkDUMEv=3>Hhx*0cD_CyYqq*v?L+(RD+RXCH6$N1ZIsuuHtz|0`i#sMgf*-6?9Brg)h3z<#K5^a zigIisu17xo1Jfh1l8c%@Jyn<9WgB_i&19x)7lTINGf;p^RVuYG8k!gUiMREa^BHW7 z53SKC49`&pK?(<7va1zEkmY0Wc5sw~r?I;bXU)zRrrFfIFcy{bR$qkG4y*hspaBMyYaO-1&<0^UcD&R)(|Op z8{aNJyS_q)n(cWo)pl0~Xe9iRxjX@XsFt}i0BA5FAb9*rNKkr2z53RK z6&e{TG^?s-mD5)z2+193!frPjDPJI=z znLsZ8wWkC++WFdJGvX*Y)Ioy#Qx#L{c1e zX&r18C77z5N#nO>na|HoM#Y-i1Ebsf*{(r1z%5IQ;R;)y<$<>3yW5h%_Su;H!n&lk((T|cewka1dAG-Hg!#8DKN4&@B8fYQ_TAa=1;DzScqa{pNeQDVOB4jTtP zFm4OvR@t+tlWZrG_vK*cb*1!!NQo9(cJTV4I1D+3QtXfDeFn&HI(4v_ z${BJv&}wfU)Y#5!nQ*vGf?><}EzR`_L#V3i6%1ZLl7I#q6b`?<9h01HWyI39JNQ7? zpGjd(Rp2fi5RDLk5bGM#3BQpD?Jjxrk`({ygL#WrknxVR_a+I*gcFVWV)n5oa@O%m zC&SI@FPb%0x7=90{ng&6=N=E?`#-L4MSyWWIQ;>pAQ06!F~)fr1?jX4mKk^-#)D_F_hhvCu8$|8OE?dwjj zlR8O4-b+%GyGr9TmG0(7Z2<`vNQrsEi1IqWyP*0$5=Zt52u-Ba>mvV6fKb{g{u}A@5Yk7^iZ-;?39h5Dkyy7dWmX9dLKS zojc)%dRuBdBS+V`J{P6aa79!taqhdzlo@4^ar;CfWvrhLj<6C;*OUz<^Ey%Jr~R&A znzyrB&gx%dbOO{%LzPUZG+_M5xVR&$Z7x!4%8Ru|c8-oa8{Ph-Hp9dbQ1F!53$mT7 z8qA~Y_yRTgmSQxTY`PyO(25?i8{m~k;(%D zHpw#(3WW{yTAk=>0VZV@^wJEsY-f&b5|Uv2(A#_w)N- za;^&Phe4JP*F5H_TShZHhYwWjENMMs1RW2$M~ouQkH1W35ziT`7z@4mu=hRXc>vkh zY}c&XY^M0j@m$4lT;n^eTkG(+GLC4WSV+v%7sFeYCPqoz5L(vrqBzg~8Bboh2DL88 zsrVEYU#GYb=b420q=Lns%UQ`u-y390GzhK3wULw7X>s9d#mU5pmp`A1lOocj5nm=q zl4f-BV`2P=W#4SEi`~wrd~5$R#KCj1;v{4rsqavM)AO?o`!Yt=rv9lms?UXlC#$&+ z@$lmaH;9LaAQg)IXBmbNeRg--WLo=b9y+?-ohr|5m+sZN!}JjsXYq*_Z`LP19l(ykh>r#|&o zR%>zCM+6!G2>GJearVvM7n?mT&ZpQCiPRsmZPq*C33$1uUjc{F;rvoOwHh)YVBJ@hiJd5 zmQ0?!6>}JcKPr^E>a~X}=bR4>M>i8=$ZDD~IC0{&Gv1|>pPjm%kJ_u2#hhSkr6Kpd zd~)@oz_`Xr%-wH01x=Q$Jh**ikx0z->|;|SNU<|rh_e{ykQh>?4KL8& zSZeAho^R*LcpTe4kB?YZmCbdua|{!o*(036t_^Gk_IoR%z|75z;1HkZN-_0^-Dl8w zb@H)@N9k;pU!?xdSrA)^Cadq1ch$u!!5}*`UjMJ(;J+|Op697#N2*XsJUhrWJMnZf zf4KEJxIUC?G(}Ap$(TI+I2OZV(Enbz`}+C{hRfwl?WMNFqgPw&urICNWGw}3n(1?* zxXB1CCe!Ic1goX`L3>Qgr2y~>jVAAt^$4;Cg<{zpYM(JPu4si$&xhb83Z2ep1w09W z?{=NsQLC=0uQz;qeIX_$PHwLNsI<6WzkY|JkV&p39-3a5KA|luN9Q?IY&EMBfBEty zI#7e66s?X(4l>^Fqtx=Bpu-L`*?tHMFXk_IsOe!U{p*YO3wczPG%4(zgAhW6mL;6d z5IBWSMU7byj|<g0mTZhBC z=oV?|hxv9I+^*dR&1Ha^69an&$=q9t9d?^J?3WWseppJvOC1paZmoK}EmuKxd3L9f z%v6kp=6ND#&=bnQxuKB*kB^*46&zNGXw4%lxu&u2Re5k~P3JWu{z>N%XEpt-%~kCZYb5^#=1pgQLLD58(+3Xv)gUzj6OE^;H{qh)3F6Vc( zKh8I8Cmv5O@bY*wx+Yzt-v_u%HvlDIB$MZxw!X(Tkp#H%Hn+7o98Bb36yimS^fX#6s{%Cme5IDh0aTt$E;(!< z97Z7^fpB1tkN|12fr7;(^P1rkY9EePd*l;hR5rWOf68xb9Opab4) zXD41rPWJrIfb-{i=YLhX|Cib2{}$&wkS+h4#6zYe{x9ggSNB*Zwmf!sl981H08TUh z6ka9Y-|qd@zdNE81`Jk@v9wgYnxUbkE0b7E3G+>zB=!ahzSR6I7MLjvg04}{cAJpO zgZ(~5ka#m70fPLd4jqv#B~M32$&GK!eG{a^>oOYNHLZ5TZ(GP%OEaM^NvEtX6z_8v zr{L_#&eiA<#i; zqUXU=$%KXoJ<#6697427K)Ak-;4j9dTyRL{Rhh`twkXZP(ByvI2h6>Wfy+8~`d*Y9 z@SxP49YY|%M0SS~DCF})-Y4?Dakg6W=Z~dOEK%F0>hU<^rCGvsaXfzVl`M@5 z=h&uEc+S*;k0pu);IIEZkx}`Ao98#?zvLxKpKZpGj*t`3%bv?|#ovARt;GXrLO9Np zIXk*@c(u))zdNs+Uc{v;va1Ns{D73Sz2O&1xzaJW22$xesYu zqgd?CObz1fv7U!)oez%qZ8kg3;|gP#ks|NvURoLsP#XwINCM-?WaMiN#lYa9AXF+f zyH{870F|n44hU9YGQC%SCMPF9c8k>HJ!)(poK&YA`jeq-uKI1}4NN}uf8B#7v)lhI z$h&|eR$oc1MHaPRq5S0LF{{L_-ZAhu)kTfn7;GS}9p;EFHEPjXQK(!0!@Z{ZNcJ6K zjD7*(+yVb-w}GiiOArObok1~YawyT0UEw-B;sMo!g(X3|vy{O>{U`C8^uN{JRrdNT z<0~v6*=si#2ahkzU*rlpw__1wRSCG2MYK zz2X47`}I$pt~=#sLY9~=-|{9P7N91x&8fN8)`zNYxt2OLQl7+QaV7#@*XR6$(l&4 zVg7JqOY~8JSZ^A+WGBw-a|!7+lM8as4c+jT8iC)Uuw$8;p7>N+Is}M=U=yay*N4-=fCL(soctHyP&s^Fxj`ThDusN&`}!Uo zg_V|`thObgkV${W!U`41%W*zkde`}%TL3HVdm=Co+6h=eVl}s9{{qFvy~6z23e2(D zt@Rh?7lBw8IH()j{c)tntF;!__BQYS@;|-|u@~etyB(UcpGFgG^ZJFqWVrs^?OE45 zWicppYW+>FFT}=B@iw2%IBf(-m<$Tllcu$7SB<&k_13GYz(653c6I_LO$`CZz)G7- zG$5Gj>*;mdbiMQgwaM+cq6tv_HJfce01o+7HXB6#pWu-8Z({#^2YOJT&>)lc=*Zl@ z!fd$8%E~t$+-h;|ej8}GiE)3N_M#1}>yMTb#RIkM>~C|Mv!IoIU$5~IDG?5DL|DRF zIW~8I4uYVKyAA7LwoE03(}_}{P*QIwp2G8bQk0m~*atp6FOLXN27%&b0L-MpV*V2h zOpaEYGl0}%_4~pm+ua-hTI!vkee|ZKrM-W6*xcU_4i-fmc=$IhP`W(YDAVl%`B{B( zeL6ZIvf}D1&%->o>Qdqh1z&bO@KlF({LZu~x;*6z#Z1sqt*zk}Dx}T}#v|?va&VHM zrli#4GQQO7&S_^kqIzUM{1MeUSb`vjNihFvkfnv{(fRzji4X#drHMc~)z$i?C8TEB z<#VcSx=kUi!Nf++i2Ev9S$a*6HFHGL9(p8&8m@m=V;r9 zUEjjBW=#F&r40VIp45A#x2$>?spL{R6K}zg8QE+2kFZbFK~}j)6h&FI;Qh@paV)fEGoILzdr!MaDNXC zh4uD+Us+iJxX!-$`6K{wBV%9$16~Xm7#K`=sG%gftlb(E6cn|3(=UOrXt`F)jVsM| z{y^9D4mkjqhgz364?v&l{r3F;xHk4cOz&t1K#@<#aW~`aZoc#saBy(gtd@TPe8CRv zQT2*MK-`OqkM9MHG>e^HT!2Z#lo`9#@ldeEes`hGh3;Jv0$PHApdfLZe?A+)RZS5} zK3l4!fQN@SswL6c0PN*~$|~LmQSaAm9`7?qIaFc4pwHjNwOUc6t`2eTE%e(&t>Zur z*@A(vZgPphc8?+I?(PQrE-cJbPfJez!~OrjhX0qHmJ}(!<1Zt;)F(Z}%V59?*E`J5 zdoD>`U5ulg$O)ADQ2;}1kvOuE;#*L`frq!Iw4nl%{gZFlYJx%qz>K8jXr_8IlFGHn zZrylo9K!Ew6JT@7=pzrim>&YuN3^2e6OTLqCoF$#+k3WLp`Oz&j{+!Rk5=>(C>DnL zNQ9q|42p%)GkdQkl*EoGjLrs8rzt-XE{CKT^|$Qtvo%3$g|n7!Woglcpc#$72gK z9+cmYH6_1#EU|(C#c23RzfWR(eLV}Pte-J31^{xG!|4bW=y9eruE1++Yjag=^xqS& z-FE-x+1Z#$mRFE+nG_NWvUNbou2?k;64L&Dmd{wdWZvWi!1V_w@=1pxlS~|*C3ynv z4FD{pQknID8=WjQgp0+I@+55nR%=NTgK9VW1K?zm2+^HBy4(1lKYoYPMJT`kLcS1% zgoZM>i2VrwEL-e$TOY|}GV=j_8y=J17s!cr&-ZqYoEg_EpW@n*EQxizmb`#83UFi? zhe$p?Z<5Dxv9Za_X2?Y{S;j{*CGSXGGU2^a(KP|wntZ7ug>t1PMa~{cZYd?uR&4-i z9v+MFV~2Khx9;B=f9imeoibgBiykCCdgGB~(aI!S1NZ*kPnGH1V+98zLNM1RU4<1{ zMAlXC`}=K-BY+&KZT#WG2e5Qbr=gLAkoH7iM*ec2#k33`2>6rI22bcaQ+I1tmn95X@>;O<5P=7#s-a=Pj6F>N7}%2K zJ;PGp{G^-<0@DC170~e+o!Ms+iBwjk54sRS@sn(h)1_RAdLrJk>Czi|HTKoKI3`Nt zcOQ&*Zgw1@x5!s~-Wr?|90mHd-o4SZQDDEN{Ka}q(pbtTRg-f4_TAb;&mSQlILPC2 zp4t|HyVzty@J>u##!%H^7vLInpJ?@(dzvk^gQNFTmEY_0G!fk6#MxUx6Wqb(#(R9A zrh(hgZvCQgN4m29+csw0Tmxv%TEF!y#DPCDtuvSn?T=vc#GRV;%tUNHbNJ9p4Y}!? zSotf|964q-hlYom4RDM$y`;%^Sjx3)p48M<_fIy#;*nYJnh(|SX%T8Wrmi`>D(7E!Jk-dE3XR9;`Trk1<=@BvD7~Lk5jBZ6k5O_dKVX zcAu|($oqf#Z0kNmHbFP4-BJ%+&F7Oczg}S8RsUXV0ShGzR%2^`cp9(RnHU;##i?|# z9hOF1m8+?D8JOkBtUeZf&^tO_v1jimI8PLO8W~p)!I<{XA(c|EHUqe9?IdC#k0ncW z9@TIFwjp<<5x}bUZd7m(ZW*7QO+ezk2gATfx;8S)>7SjwSwyT{+j(+3hEbv^nX2PT z2y@DJL4p3k*`Hf=7q=9eyT7nvSKc1$S7^$noC!z9%^Xq8)rKWUD%3lHT6lMa0u;E! z>8{8EbM!B29UW0fUH54oVN9cYnHyuPwt|hF!eSLaagK}V&t3bEZE+84FDcmsg%%d( zF)FafW2CxlrAXzzY{e|qoAm(xh6kYJPZ7Xj&>C+32?SEf(#kFj;df5p@Sz)_4rH3y zbRmQD$-?yjuxm!OV#N&M*;>%e!FmFfsMpY-=Nb;z76~f0M9R)+Z09hWYmFJW^ue~J z5Kp>%@$pDn5sMTUEWqlWZx?nh+`Hm8{Bb*ra#f)x>r5!hCpYGbF|5MO1bkw;5CcII zSsVplXU!9YpfS$_kpD~Qf`-Owo z!bWUD;ig!rb~hPP)QgV6bE^@UuW%@8Ycq6StSCf_DY3j|)YtcMtgy<;iR8ZK%oibU zuj1aT4Wp%_9Bj)uIt0b=ZP8@fWUCea=@%CrG>6Y5sdW>5TTs8fijQ zFIcG6p1N!`#bSZ%({GLa=Xwv9K4xtBA8XnYLDOgu2ja3M6Ewpc|9rCFrBi4Y0CfBl zcpk}R4@uI`=TvG0`usKJ-S?|cm`dMH-LVobl<+|3oj(t})@yFJG~j(an1SCKwvmlc1TWN9;6r#T+{?vQ906v9YG%EvD6y*tB?r;I2P2&A8eGF zLCpFKpj8pUNZ7>Lwuu_oez$&9O?Ahdl5LSW5&XS2r6NoQJ9?a3cF<-oo$B3_n03H_ z{=Nbtn-zSie8BvE`Chsnv(7np->C+rb-^jUh|#QpvTv$_OZDmtMF03xsE~?&%|+$+ zIBS9nP=GY*n2L%k49F9(;B5T<36T=yVz_Stl#DH5vhKZt4gO^`7y5G7Uh@Iz^3a3c zRQT|d;jV5nzV>c1HLLR*N)*=T(E#YAC+Tg)q56^G`m-6l&gAuAzFezeQfhdXYT!8N zDr@Y->EyUbNK#5%97==v?9ipLiy7M=i6@@z&#Rg(NQs{p4Wnc;YDS^Y^N4tU?2+BE zBD)E^`;>Pau>42;1w@r*%gMmMY(Y)|6d_RWV<~=P!UtUs^o3)nwY%0}QK1U%K>j;J z^>_aH`T64Vatkm{9?mBgKzjQ4_?(=c?k*89#b#p1sEi<60=->eS67!<)M}HB4q#@K zvbO{#EXeHxQ0{tqdXibZFFCqQ`n{jRFzBrJU;{t9byIiu127ken`)EsOiixBswz4F z<|fuL06?`@LIkkkamLw^{uUiYCl7G7OR*wf0@|Gi0La*%x&oexcVj?{Gq)b89druQ zvxNTIeX1S8>4;XOSbq9_;wHhH#J1YB***n9BS03FGeV_7@2VHqkc<1DRmrW+LtuzP z!!D>BluY{)hI&kX30Q6a)72fk=tG~J1{$B9prUD{<-LD&&ke%eTff*ZVI{OrTCA$6 zsjJH~8csBASdtvJS!*9W?|QS&%nev1CU}jK>EasLaIqTE60a2FWe!!RQIS1u)7@if z*cw67slL}0YHj^d{C?#3mtEp-Xn(*73@o^bO>gcemQ=RvrJlRI{=QK-oj3cBa~1+g zYe|bYr5qn( zUMJQiOP=q2L@1S;6H29xbf{!|*qh&QSy@QsDZ-INfyc;^WJk*H>T0gn!OPY)g45jS z@L?Efg`}@IcT!E^_hPudQK@W`vf9eYvnjVB(P(_Y z7r&E&IyQp$yII#_Wv1@gffDBV?Kng3ZG6pZVBYcd1MXY8hmG?$A?J@Z65oIQ2ndl= znxW;Z7g3xww*t^)F?I#d5~Wg}NW~JBf<7s^zVIhTqbjbk^XMPM-_0r#_g~z1clXk- z(yvyU2RqiUyfV+@_)RB_;5!E7_I0jvba2pqT<}P6(k^wYR(-=$ph+f%`(H1B>c-aX zwGN@byTPJDb-<53J8)@%jH(WLZ;n;8j{>g82acRTyr;0)tQkC=oSZZRUOTw?I15}4i^G1$pl3GVEwlaV>cP>RT1&Yyw@8B3C$mdH51*JT{kH;RgI5OwVTKMD zrrwM*O$p=^lk=vH4S$B&KHTy_<#z|K#J;*(yC)0H;Ss*lnKK@GcPE>kHlN+5w_3|>Xr0g1RDw_3`6to5N!M>j= zX=B63$4BZqQp~MKo*;2>KUIC5&xUn2hC0AflV7vp)HCNt>E2NfQpEk@hb=4m(T=-} z5#e|_2h9G~E36}j&7l&NJC7R?iP}GB-ZHn|_l%XR-#K5;$)sHBS}tX7V|au6YcNh* z*WPweLJb2;?@SFXkMj4}7sj`%kHAtD0O}zO92^nAC9bS!QYx2+2<8B|H!vK74jCW+ zRUG!y&iA)&8Lp~4NK|F(<|MiYhj2qfQH1qI$Mfkd0e{|}u4QQEa^vt#CPz?KlaiiR zfi>u^rq!ufmoP{e&L(O;vj%9m4NXk=7)%ET2L;MzW0R7|j_QIcI5Dg`0=oQn2JEY?r-~o(*V8i&JM10~f9)0(orJY5& zrWy@s{*cb;UHohvd42dKg*(%mE|VjO!1L9A!hkI1$SX3-4aVo$fwnr=!y@RT>a^Q| zt9QCwP)LbYN-k@UHjKR{CZU{&tCX`45{-(Ve`rIgOplAAZxElqpqQQcPnqtttXoEb zoKSXFYu|9>onHU)XK#YA&9ueExv=&C?(`#ZP3_4P(yXlfA>XR|&0}ms8+^g@FWYWS zJ&5j$A#4-^pVw#sCIEo65VDn;9D8FK!vIVD2_D|F?|A;883RQkQ}YYaAUKr-q^u)m z9cao)PTE6DeXf31#OgNp{!OB%VB(Z_H6P{2-?(z<|-@fNaQ_hjk zwI$@{`d$MxD{zpoe}?n+{`kF)h=WX?>igs6i|tBuC8SkRn;K-* zN{C3=12oWY%v7}?59k?L{T8V04f$O{2|D?F`@d(EM@Sm-cXoxlQB}%ch2JnUMCi*^ z$t;?)1o?aPZ<~?kba01HniZHGs6ZrqbZ+cFs9Yz}hNcbUmabU;q1ZxOel5P;yQ3<3 z>?4u&e{uFt;bC@N*fyFrw#~*i8mqBw+qT-Uv2EK%W7|e!+y3vq&-bmh^RJz?la1!c z(OYxQF|IMLb0lS@e6hU%-{9-3jbW|Jhg1~hyy_7JM|gj5G-_o)o@-+wT~726Ovjd= zK$`!C*I8PqsHT^J7UM(wTWQ`jt(a-}5gMK+TK7-S`~sx&BNTjRaIITk?=!oj5M@tt zL$tBO;ao^xec-+6G=z@0uWLV_;7`>T#_HbEheY>&_VjDFRzfKeu?phJ*P(%4&^|rRR12x-}AyGFT zP0}3wbfMgCKnDTzfX{so*j3xjj?_q84n99I6jxk=|rJpIgxQ zim@&xpBD&vQ?xrDUfc~&W(#X>>SeZEy(va|TDW5U$J+)U%JkvLt(v2Vk}&d))*t#L z9o}u`zIe<*KVM71*qe>7`|yvHMSpB1_uQ}wZd+P`HZrU z!o%h%&01h&Ns-gI^6nn$7F;~BHPj}ALUT{jg^PA*4gKwDt>^Tm#jAY%fs-QjGt5zi zCbtc9AW@lapPfNp$rTpkRZTebN26eS=-pG0M*h&;fD!I)6d22hFu$K~{^^db z%A0KNfidN_1^UtQc+gw3W@^D-;+}*H^4uXK#z#v57j*MUNYo_7;Dh_IJP=mDUi^(I0V4~D5`bws3w{4y`Hha!NY$# zY>^gzD^hJrs630ZOGoI?T0oMR+<&>K3@pU_feC|`-qhQtEVQV-`$(1^21X9TY!Ta4 z=d6Zr>Z6V^22pA8bPD}IK039c3ha)=HORWm_-;$ld*wBr-l&Wr7$W3Umc)lMoBRo< zOq#|vXbKXd%9Xkwf-yP$n=8m7JNUh-5&FJu{93On0}mmy_Lp#DqPBYiE8Adj6=5iJ zsmIvEk_&y94G&z%hs^fAOX2>c!KGR@Wy52f=yln1PG9Zc_82o^F^A{-HpjBTz3_)C zrnCNt8K(T*9=EMnKvp{u|83L|G?ib{2-J)#9NQ zsl4(P_FcNS`CYU?PHkPXoRRv_UuV#fT)Lt7wFsV-Q8i|F@8{0En{-4)&u~C~i4{mr zL57yh_--@HXS-|4Gu7`m7Z_L)mxNP8UG*0^jhXm145j6l=i-9Brv2jBd#3pfld0ZD z(m!)4X%Eb`VyaGeo$xYNoO#OG--t*-4`ulh=)R%mm7PSDe>nPP-lEC`x5Xj1#f4fK z^{k;df$wEP6VpE8zj$eV`y%NiC21kN+{l-a^xje9Kph@`fw;)9A~NxK-%?{i9v@xC zbYT{ZBA*St=Pt|k;;F?Cr(K}v&gLkVbq#v!#y!)hYT+EJ_FKGsvUua<=783U8mf0~ z5@?EGHW|$+E*1k+dwEJU=cDOg6&19AHx&>t4}fYH2+$IO3YfWoWx&M7CK5*ql!Ubhr6Vtg#?~t z^E|U;fj4~_`)BQOnia+%Fj{zL3F5=Xn^E7kp^-x_Y~h-nOsKKSYn*CC1R+)rEncPh zEd<@2es_zyht@%7^MxyPPExURZx@O(FQAGKr@?6jx2|$RHI|7*271U~8c2gxZh{3LU{V z(4LD+MpsV4>D|8`^zDv-KLSH5vShh{1C-BhO774}V%9E<^>6|Ty5d_Uj&KRlEA_^wTC~x`;Yl-6BhLS`h z!(!dbg#dZf<#-qxqg$0=U#HVCSwO7#25^c5AI;=L0!=h~`}>Ey^OkJDBSE*y`l9Y{bcw4H3=n zSy{n0Gc!}BMz5oF`rG{l(BHGBS>Tfw;mlUEz;1*INj9I|sdqIK1y$OptD;`ce4N2D zjDP;}{dk+|Snr@PQ{3Zmyah3W_VIZ?w4;HtOI1TzPN3IG1B#>=zIL{@QT6pswKh}b z+O3WttQNC@5fKrFOR`c@UIt6Z9|$BJrdcFr2dJ*;u0~d>&AoOTkT#@_(|sFpGK3$) z7fKbOS&w*CC5Jq|^d=fywKqHP?aFJ( zujzFrW6Z!RHC(f{v2k#6^4eZHS!=#DTC-hmx$dnddE+?RnQ}aE; z_Uz84s7NJ;@+W$eLQAmooqbCdlj6m+QJVFDK^tH4n62$r0!<&<(=j@I?AqZP%T6n5 zd~%n!nv`1=+;+w~*U7Wn|Hh4NAYTfzpD=WbY2X{E8&uYEBt>NAaBHgVD|+Oy`qi9m zZ%I%ox0qt~r8oV&5Rx4TZrqDpEWx%1<{a#%SlbYnMbb3La9p#7KT3VB8&Ld~!GUan zR4)DP(_H_y;Ag4+Ydi-0Cr#Q~yT*+ae&_jNl*Ik#wM96p^vCW+00>F=@NTTJhlhdT z*6$>OE+;bDN_S?Fy6*Nwh9;O8B{_#Tp^E_gsX2_jGgd_>lWCUj%@GK2Hzb-RC_8Ee zJXQAqD*Lm>pmvQ`<3Sz$tvp|M&CuiyBB)-!p8V4}p0cC8k7BwijXQ0wOazT2DW1={ zs^=x=b?%zD`@{MeG9&HwhulyZ!7I{upvRJzV_`UK_6Z(OWNDQ>=$3=bhnvUCSEB3X zK->{Q&DDBWc^fVJ&;r)n*73av0vjAX-K`+&zRzow`u0Y-;q$Pt3J8xy(GZbznq^!Ee;v+iYwTywF zQ0JK0fr^lHz>z_wcfALih6FsW0`Snvz?;3)PyE{9IXC1&(D^wf_A@o&Occ>JY zAqM?ScsQ_KB(R>`Q*~8;{)krPmaV1Y;-8lvIx~4lX>T~4iFf6rPpG4p0=ELeb{S<8 za;q|!co2`16c>2EZDM`|O}dGU^cT$JspViD7^M1qS6M7@kTd%o3wE40{PPL|=~v`c zb)4G{=D{1vKsU0X2nMiDn^yq8X{km%InZJxm@A(nPZ`t-?Axnb;Gz4%g-^ zhq-!RDjix7^d?3Xc+J=HI4|Aq%*LCI+_yA^I=i9}Ov$~klnf1yCmLjQ7&$BkqM;F+ zN-pj1+CMtf=AfNOgr(2dv3-f~VydI@$aG zUo9dMlIcIm{%&#mEj}$-2=z~>Z{a58i0s11e-!K8?hRs=eRx`u$NCXS^5 z;dI8<$c4Gss%wSFaz7UwpM3HPKVfcYKw8Qzm2ycgq`JbYHaRPG7-=R=Q}jB_FgLb% zN*jdUlX{%rCqwkyuc47jzMn6uDCSl5MP8_Uyw+o4Mu*IGStO*!hL<)%mVbYwHK&Rh z1~6bf?n;*>juOdki;@+ljnQz;?cK&JV_%{3d+P+8O$Zq7I;~*T5{=OUr>pQ-I&whdJmtt^)9BChwW%|@#%v;dVgzAKqaFpGV z_{^(O@KB<4Knba-T-G&s1HbvHvz%NZ7kQzV-X!6U9{FxLwm%~V+B`uW63>JHN{#UU zn^I%hg6$Bc9AbL+(t_;*2hz;-Gq}E7YL))qgYmy|MFOyKYC`{4N3s9^=qQ~YfQ~{` z{686`m>~-S1O+1rLtG=(c$B&H^`P#|781gxj+}%I9-GaNK7BxSAS8lN9-q^jEW8iz z=<%GAXM$9KoQm=%?91kp#}R)^7R!3nK@)~J|L~}uq5bIwE}}5x=6eltm`wKHwRfu~ zy-CWtyn2+whj8dFlzxs*H}%<8j7Be;og{>qU1<1D|JY`RM#6FExOgGxHuK-jcKCPB zwbt*?M6-}aSQ^#t$0r>*jc=ZRaI$6I^lEb;8nic_NW=;kBXCZB8K~l6KKRIW)oR7Q zw@uF~WS3QPZ6~z^PRj7@w+C>HRBz;a_PPSc<-c7%0LnTrSq^g|TDSrNS zdy38fNbDjOSsYn7eqOV?UT5Cl?gB@k&6>VD)H~DmI@7KFRXL$t6MEqfWmSP?s7CWo znH9RH^)4JqWo6uk^x^JS)+ilm%;-UB-c+qKs*;M+o9hZ4F#4|cU{m{GbnBv zrS@D*a1$`cUQkY|rNN~&Fjmaa4oanswE)F|gVK{0rw^Xc0|IvyFIJ1R|5S^!0~Smr zxQS8u&pEb&u1EY=4sTI#a4Zj*9rZneK{fud`6QPoeFrqntPY+3q6nKSZ{Zm@9rGDK z#trXsL!%fmNoi6o4DX3W%KN#s4;fG0{AI@d4M^diVbd9AD-5`7ca5i z=&I3nUk|2xceed<$Q=pJ--TNV@iOiqs7tY<4KaD?x&1`s&EZlmgYLmuEcD>y zDGL&njaO9fBj|Tm^LS&{qYKGQ(_nTPi$(6P>}%{B7Wgan3ko8JpH$b_1|07hz74_p zw`s?FXRu?0NQY*%pB2Kz@gpOn2QzBL74d?ZGOj&=*}eF!#wJ!ww$J#*NliU@$`+F8 z$G1mgn&>J}ATaqYuWzh##qAK#UZLrEXq zk40f+sB#l2nWEjFi}n-xMW8F3G(+x*qG!_;iNKaRLR|9P9H;caV(~^_!4Io%-#@X4t_|z~O|O zTy#-?uSa2?4MbjXvXcDZdM))+hkN`D?Z*dKP*5z_s0$N=v=lXsr{aTT$<_7G`=03oowIT6Mu%v&*I`ss(ILyBJp!H;4v+w-gL#>R25%>1(L0q*j9g~ zlL6?N%3ob>mB#J-nxDnS)aI9}gx&a@S5BiFxgKlw*8R32>s+aVqqBofJX>~a!Qp0W zmo;XaNdaH35$ojw*_Ab|IMW4jt<`BTVYFt&7e|HiFU$qv1l}QeR&ZBYSK}Xef3F7A zcXo|hknp;nUzu~dTQ{5+ZC83OGP|z(8lvrK3cFtdR^IrUNx(Tq645>DtlyzJ-~_1m zM?;J->s-eWnkupeDDEXOyQDIc1sx5ELqkUj4oA)F<0Pb|Ntu`utyNq;IBcN1tXBpu zGSgF5XE7uUBF(C)Xy5PMT;H1FMs##;`K@o@mQZwKtb5I(4P{id$l-2jG3G%it?_G= z4(z$f5i&)%$tTZ#eq2LKp8tKp$oC z(BqthST+89Y;$eH^i%JKi)C+DGsQxQN?U0qhd{;~F0?&UX1DZz%EH0_l!cVZ&iTr< z1l{nLtF?~+kw|}FBaPg6>0=^vA>JIloh@PPhhp@Fqp{6?gfya zW3|eNRM+}k)x?RI&KN+DNV0rhQz<5si$q)T=OQ?BWa=bStvxD{_8$^Fr7fCY4L>-oJXUz?#L#=E~~eHz#RBRI7EU zU{RA=<*TYHK_LF$8LcH;rdFM0ZD4RMmu9$PPAe6he0VlBrqTY$>Q+Z+Dhp>lYMB2= zuB;4ZgIuOS^-4Y%Y{9JOt<3tAH%Rzcf9(P{X?`>Oa~^db=TF2J2;7u5Qmo2D0rLBC zlVgf4q`2oJ7kG141Cr172k`9b=#kH9%h`yLQ!XT41Lifud&cR0!Te*|idBLHj6+dC>OgYKpYhR@$V);`Wan^R#A z1xSr2L>L5w!J#3@OnQFfWRvIGA@K4>OdeHAG@!8@a5>)h-(vU>+5^dT=#+r_9D2ux zXf%OLGy(6?Y$2@WeK=tr{aZWWR)&+4lcQEH`PtdY_ww?Bc(8o1<%k+y0Q337*q9WA zii#@w{PyPrHmGZ2aEmuEe_A|4u$eg7r4WOWlks{`o+VP%j@-J|l)+ z1#%8A)H|D^TnzycOYW}nNA@Vsn6bXMw}y5TwrTFUCzXsU`sWZeI1fn>Ss~qB>Gg5+ z*_oC-Uua-v5vAT;W1t@s{^Nsm{_9Vjf>f0}gTv6X>{U!TrgYu^4zS2u|5-Gg3%&IL zhF7gCo%53f*RsB!1WkB^Yss++8sA;hhqTQ==$5|vi)YV+RKpf2cVTqj{J>uM9yFg( zUV+UO7}@MB*S2aIuZUS>58GKyLJiV;=yy{{eS--km5ES zVuckIRM+&V)sZ!j z6kA{Y?(+Zk0t|BrcU$1{9nBHAnOV_R;+3fPT+{;Dk95?by8xOB*L|Ug3uFatg+rMl zfz^OiOVa;>T_CKh-rz^HCKVn(E1PkgcE)&bN!w?6RlHx+G<|apJ6rR5zJ9b$lYLL6 z>#{Qygmk)CmztW&II?vx_hTgwn>$1Fh>?j^`rc&D#XT>B-FRiTSox9Vpkrn594!Vn zvc7Q-@8myzbhY5P`0+w=8{AwNmU@R$MfP?&;&Ar5O89vxce6gH)|jmRuA%j&melc7 zn1MHVQmV9Uf9=8$NfnRt0BR&wvFE&LbrJSod`@#U6_PiSs=dq;znw0%nmU@=hLpzYxCB@D)}X9qzstx)0Mq-#q5 z3Z~Djg?a?@FQ>6M9WUQVJ&OGU*OcjVa zRL(c>IX%>^rsSnffimI6S!AI#s7{;vlDnsDBkq&Fl<{?5n~0JXJ{ba@lEilm5WZq6 z)-5(#;U{oCl$w)hE|n{V_Ni4$FH|wJO>K_(^m&|;84QImIcRlnw`5ETqf@#(v2Tl= zw==su803&PO?Pywt|UuH%;sJ;sMc@s2bWEhO7*Kqj&B?$)0F!^O6`ca42At$4K9T9 z(?s;@n6JNhK}}Q)7351D8CDZi8)lOLc{5*7JvZm zDSEK{U1ji3EMb<(S;?9U9_oE3AQn(M>Z%cvfy2}~w-CMA{JU%z^CzcM2-$KjMz>vQ zzSkP`iF7}KrJlLe{Yyz8q5pr&vO$jV5P5`k-=Z6s<6_W?8nn_Qq{(x|>0v^WF1yjU^0vVShDq?pqr`5%w`UTjyfpW-L|T?>sy58Gk?XSs&9hEGUjH z{X_F{YBckOlLB+@^iP{|U30g*$xoNp?3R2`)@wXHwhV-OYD1g6Xu$zwFsjpSEkjcY zKoq1SH$(B-hBKQKMRIt6qY#d+GrN^Ejlvq(sd*ia`$A9XT&Q4ytPbdxku9k-9baK+ zCAIR#Lk|?45$3(``kMZK=i`D5w{u_wQ++=31gej;0YbAws{=3+_}#TJv}Jdm$&N5F zw--*k{g>k(o`e|ZnAZv_WP5?A?uufS(3>e=hD-6XH)36t=oK25>^pT2Lq~GAopp=4 zdv(90omL!g2Ff9>-OMbvMpPU^L8mTzr4v)&Q#{2XZ|+*gy7_|tS%o`nSW-lIdqdt= zi9yHchHk{S_1(Z)G=&&cQ)M!~(uY{Q+dY~NqjYXwULH%<4bge>UL-$I8`=Jw&?$Y! zgk3EKYhg`^+U3Ve_+|$ks+-N^y-B(5$bKb}y>XON{NJB;!Z_SRn`EagC;OuM8w7Q*I*7-RQE~>;zePXpJYdk`9SF zkY6DUO;Yf*){jO05+Z+8Jd4>TY}+c&AhQKs zD55J_0>8<-UgstRnJfr8&lcy`(4X1uN~&MdoCNXY+;Rh=QDKY~A0vy_3Qk$|yfPMa zG8AG*qFiRgFL=%M>7C3bkb>U~CQACmQZ7t1&oqo7!5kG2M=3_;+^er8>)I=Km)~5! zmxBPc^}rZ~LJlX>hx{rS^CR&twl2o)e$IJiBBxjNU|Y7`aAEG}BEgT=Q#gx>M|?Ra zYE?0ke7)n(Yr{G(TMBPMrwX#vC&B~Ap=n%xM4#ymB2rR_aPqBdhh5LTkdW4llq&*~ zKFeAndzSZd9Dnw>T@GfdxrQ(F)gIy*|J3_z6lU28NbDf7lw-5T`2VZqz6^ zR~tp@#(IgeS$fPg$cRl=WcPJ!=A<4Q4?c?gaYP}3sH5>;cLYum0oruX)@)s?ihZ#_Sf%Ygk8X776w{afPRBgT!5+2I>z7ni@$ zH*DpzlW^2p+Sh-2i4~T{)Lkq^&bIfo!$o;DlUp~mwiy2QaKuXrW{23ZArwMqP>>vn zWeGu(LOGfAxOB`OscYq?py=E)+@puPt&J^$M~b0o+3pE2GeCGDabhmbi0+HA!<+hd z&Bsty#$=-N?}EsZC-?W>Ef;76nzfR)xnOlExUsm-Q-NV0f zudSM_M)6M+8pI{Yfhhl$OHf4Vv>_J%v#0*{X2Oco=il4N%Fyo)SsfALd`?V-W}*ba zvW@2J*W3?sFM%*&c&-qcKdQL#?c(zeM@jFFp!eGJ<`yeg14i{O|DKeQTopgAVA~_h z9Igg}i{)Hh4b36RX9N3Nn&xi0{wopDj4mSSQ4>1+yJgNS9?4Cf^nDXSf~PZB@&&?> zu$}&<0gRC&29rUbB7)Dhh*-#*g{7k;<*!3!cX)R!=c5ZeW4!_bm)8X$Ij1aCvzrq3 zoG*y5Mf;9iL=kw&^z-zYBcU2Ne;514pD9b6bJm7CG)Z4%7 z=UlA>(@=Z%Y|2wk%uE2rtDqhBT}F9Ty3My%$yC?%;ieT6dC!ihV=MgN)214U)>MVGByb#Rk=swfCErPgG*+A_;l zg(1$wk^;kp8_LER?Y6iOqk2nq@t^boceL`Q1W{9?yney_gd<@d*f-lEJNyTCuuRbXpdhS2cB@77poER8gN1mW?3YiK5EdTu{i}*S4pWK#(z) z-!}N%AHNd|<~9G#g)bo+6y@G=5jO{X^q-=NRAo<11q(jd5~U%(LOI!^&`Wg7Atnoz zb7Y8~hV(cUVlZN*udP)Hog~O#=k2T`#wkAtzM0wE&Y8-xWBVs-=-@1|k?e`%Frxq_ zifvQUZ(E4^eNk4?${O(!2=9sb$tSyd8xVy2YQB7KlH-}kfrtOfafNZHZa4cmIw@U` z1TLd#xl)~y-K(v%9T!5`mzx9X%md}I+&2+~DP3!!RgIGQQXN7+G+p@4RWV5wq?69 z9)7gW78$~?m-jWO)Gr@hL_4j2>BMagpnZ>0Pm|0!?D3Kr*QmEB5-r*esyU6k(@~%+VhhNj>-QVt0yx`$#B9Jguv`-O* za`fi9A(T}@t8dR`X_~s6+5XyE^VD}Yz9{mD`5cW6081H#!?5vg0$Ik=UTkSyZiOp{9;=1y5`*8j zq64gljFqW=f4HdLAYZBEnLcL@&@|6m+b#5dwvVX%SMpfBe1Yf}BUQ#+Up%Symzjno zAzQY0|IW=ON@hnQnh2l=-NpM46<4=(-REx)sW%5Gd|{fcN9+#4qP6L02adToV%0JX zKnu*c;5&S-CynTT$BIq#!h8clLr+tU1%gYnO#Af?KhPtR!S4=vr@5GejlB zAh4lXoNnK8d*YxE3YCGzp`wB~HAgdX8CgL{%JFeRLI^sj-YsHgpy{hn?O520;^>z5uIOtdX+FHQxCv1~^d=yK8B6(0}p?Igu4;bk}l*ip9;XbmN&#oiWOl2j+b3Mio))yb7s7 z0xo$iA%m2a`sDJj831g%lH4rAWFn4tea63ZP0V|-cY7O>^qfvMJ5)FvCFCX2<8X$p z=u4kv%X4@Vi%34~bv5ht8Hqpz zwKs0ou(yDShvji^{=c%Hx6Q9= z3V#Wcyuf=RdId>8WVbKl-rLWlX4JPY`_LgO(>r7BM2Fn>VS~ig!qP$d2njnubMj_n zh8R*wFOzQUxE8^|V0x#k^t3Rpkr=3tDpx3wL&*^xEdQ_EMl_uIqvACdB$~lOv5kI% zuT1Re(V$?AXoygM1xBsNXA>l3P+0x%W|ow~<1l+&v1Fs8`q3})ZwV?=501^|+ZZ;i zYnWBJF9`q+sKIcZ*se;iP1JuikXfaC+qfvOV+~KeBdj}t7}ffQ-ky~ap-c54!Hz#s zq%r@u?4rKD3It}k_`&0A7HS@S0}+p?v2~!Du&5Ah<4F92}}#II4-|c^dikPp5DdED);R#l2>JcV~2ruhG4FgRQ%Q3IUkyrvkR$HNt9;4Q>pN&rd*ppDL(ve z#Ti263~Wi|YV|dhNP6*c+SfrJf^PE#c%TR>Gb~YO!Y0ax^A){`1aM+;n){Oq5T0RH@KrOpj5t%wrZjXRkPu5*8@(7 zTPE2zwqRkuzd2&smQ!sWOu@Z@Q#p9cFva4H?UNvJ;z=FimumksA!ZM% z=GL2>2^Zvfs9rr3?DXc}-k+4aTbJEuR|&*^(zh*6OusAL&W~7Y`T43VI9^!OuUP77 z5pu0~Vjkf^Dj_Phh350h#-{gSWBlau9w>Bbkg?tWR|5sxMkY48ZHiG^c{H)>gq9Oz zFX<22vOerz@FFE!-dxX}T#q5$SWSZp|-1Gr^oePJc<1%cXGVWb( zmCoo)HMg0msw%9^4J4&vJa0|>q4n#EzgS=* z)NwO@Z5+j-!L=H{7(#Y&=LB7|qI5DquarFgt$UA5$G;_9SJAyZiZL-!-hVhUg(fLA zs`y>ixm!7o(UFzLqtSGN45R7MXnFf}m>QLK-1tJ|Oy9Peh*(j0g{1_BG{f|AQ~qQA z#K6)fppiJ%>+n{GL2U)|?qyv)}L?N&5gq4B(j)JAE zH-FI9<&pd!mK2}nIPnPXu?{!77-qRz{YCb;Fj5_57Yby@Q-nw2LjVdbX3e9`W#_2EWK9CdV>OR(e}pI4-(LPjW1q@!=!qRf<8k|IWo;zi24y zO_VqpDK0j4VWGZOyY@M+9^J_eS#mbE*fl?hI**Ajc_v~f3p61pbZSji2kLPMbquwp zI!KnJ(kJc;yBek@*zLOtIza_e#!Ito+9MuKeAMG~Olm(fd_sq5p2@zlp2R^!l$M;F zhbDfVr&y|gaptPa7#zvwa8Lyen8w#1S(KQtd@zBu)4{|BcTuC*rZx1zwiNQrQT zh-)^nQLf2^7X)=J?pggo2}e>VZ!yID)EWL)rhj?9|COOcoO-dKJKGQaTa20N8>)0U zJj0n71b4NjfpLML(Qdf4Fc*(5F$&A{Bl(2$5e6}iD-&)vy!$%wB~AI2YQ)=zb2Ck! zc(abUK%b#Rymue!4P513q4e?0Cp@?_YQ=U3tBx_AZ4eIo|5@rK9Ncv=Iq zGNQ@?ckya2;bub9fxj5a%}K+DRU^OU${Xa#%i=I)%y0_(Be-8)nXml8GK|w)x4-ek! z4v{TL0GXq^!-BNwTt`bHfdWja$pgHn&d0OhjhgRw!M(U9%QXi7#=GPSfy2SU$(Jf0 zou1|^A0VP*YT#{W|Bi?NyWtPuADx<#GX|Vi|KAr3xJ&-~`aV6T6n7>6`-MA%Tu{7+>RZ%LDkxcP9(5EG#UJ zj*b$Nl4KleApyeJKowRN7|Q^F3iScAim|bA$HfIqFRldOc<}q3r1h(-j`s?MO68TY zNlB#Nk`1_)-cwQu6rb0JLX~pW_15_A?Y`m`FOJ;hoyDS}!In1FJb@zut@Y+Ap8TPxzyDt0STkY)5ImlycD8IJ~G4eh4TF#1=yRrX*^K$%Ruu5(HN; zCaJ3>`f4*P^D9Xs_-sS*$Tn^LG8$o2-jAA2nSW}C1o1}3(QS)6?qKsds$E4p=_kpk zKUn%F(*B?=dBb(V8t&~1npd0^w#VM##?B5h?`h}SNGjw5hggp>^X*T=IDnVvNJ&qR z@Do5O@$aQ2WC87|2F$6U5$m6R3{Km|W4qD(QI(Z8RErne08+XDpke~7IjJ0E z6G{IG64C0VdVpj3x_RgMzNJ^|7+=#2c_m?u6Q%;1^=u64KtUhxc#aoBvdHZBvBslY z`!`x{as<9(X)U=;maD?Le70iFzB59W>g=U3=4C8|2Y*Mf4=2%~p|-zH$Rw?Sa8%99 zZWG-!qCd*YU$s!kWF;*cA+6gx4L)8sC*I7bY+1v|z(h`^8S`no1AF+ecM=;8$|f*8 z5}lns5(=L&AQSWE^TQWlSW!BKnF?aXxf4m-xR4X+R+a(b*fXP?@u8PHsJ}xu! zH93jb^Ns`Xo@{Pz7Am)g3;|dkfHRa!2?OASKw&hk!fb^S$WwX#BF_~_paR@VQ6T-n zk5;Qt{|7kwJin(dO;@kkp(Sr%C9L-+9P~6$dCG8-hfl-UUbmbEyC3>5r zOUb@9^eUHf!`GYmm79Aqg? z=WxEhgOXNf=a;p10E?LyK^4{ufJK2t4bNgW`ET$U9;agq*IQO3ir%=AV&dkI_U`4hqnm`WC z9*qSId>@P^^b>2Lf?)$tZGK*VisB{kMic~;5~ri+!i6U?Bl>+lzML|o&9M7KRw6qc z={qHG@_xm>9n(FK{tQL7dPVEfJbfmJ4Q?*+vSdHs*dpE8F@$rv`3~k{f#)IbL6qJ;| zb8>PNOBVWo;x}iO?~4U6z$^?jQZ!$%QZ*lF_d^rujih8lu_h2C>w~|F7KR6*MyCcT zymI9~2=DLDASZ;M@I=Uw5n-E7_?UuZx=5Zd?iX=j>_Tk3)Ev)?BHUb9_>s{zl32dt z*J`P0Wi`AkHUEnT%>}&;!95HIL!i>ky>?D~kzT??Px)&r3HRr|3-Beoy8}KOY;0@* za~upzXA;PbEc(B_0Dlh-f(r}x@#)z28}9)SPGa+>C#=+1moIgpV(GLc8-T&B0mv7A z6QLgfFZ*|NGzC9@S4*L2`NAf$^#|Q6HGvFpHwq%#MMod}g{2EW+c2o3O!UYNmjrKC zn|f~$b@gt%4&=I=m6OypNg^18H40VIEdM(eHb^IIn{lKQhFPw$W|&7b`h zpk>$}jAKiaqlV?7`86jj=>sQFAMm(K6$^>QqTU{olPa}Wup2cefa3?C{;D{PiF)uK zGnDx$q|BJJ4ty!@xJ;)c1kiK61V3`9^2+8Dvuw_w)?C92Qm2@@pOpsrcZKP=S&lKI zknpnu)VkQ8p5{eSef@V&lWNQwAkS^0uHTt?MU|JE9tu-2KJGk6EV(oASWAZYrDwm{ zQp-4~Mqr`C()!wAXHxjm(Ww*qWZFpi?s%tfDz`QyUAnG!SJV|0Rzs?m%vh?FFvj1k zS=ds2C?|Bq1C)+o>StJ=86TjPf5n=<`4I3Bz0B|Of0eO^e8Os=ri)i5KH|}*>%8$U1th9&oHGtnC>g>Gp z*;o-D&nuI@Xab!6fSIbWMJ3-Dcy)Z_WM%^G+{-WutHy1IpGae()ivz46t|*$L3(|o z%NiClnkx#eofJB{M-t^Qrt^)udm$S%9&GFrSA>^YgfM zzb}WJi!8|KQq`(rOti2wnQjq1lS)gL-(g*Co?`eqU1~=Di0B4!J>9>@z_)kiXo;Zb z47^7Uc=Hkc_Keb`R<4Mc0Oe%ce!03p{Oq1z$q@5mM#3mRR7+SQR654*&t4LP{#)ew?0x(g{+sDVx?GITOj zlmlYFpT@|A+5Wq6bIF24r7DZvCeObyj^0mb4i1nbqob|6jh2mJqLG%nyK`UTM~3UC z_{M&LLISi>V91`ng+-`p`Ma9-<^I;4A1wiIXec;czJ-OwBM&AH4ze`=93VS08(Enk@iySS)&w$+sloOBK^cgJ3u zoMD5732vWFpGFFu;{S~=eF~S3{ z3av+~jyz%7EsDP(h5s9V-p?=ZxY(R$5rr-S#3}%hN8wF-#`ud!HPy*ag%gCe@5r^oKM;r)(Zze zQWMwT>Ido#e~W`m>2LX4Ev@SeiVL};aYhDQRo~@wk=}?;4;fk$M0DkQe*rM2EnV$> zG78;P*rt+z(99;pqkeN+Pf3#c<2-a|{X~YH?nq`~r)!_OqMW_wLoSK^BAke;oeA`f zCcjM%d(HtaR?Qw7DzEn7i`qs)#5Zd2CD$+W9@D45jP&bjMKo1O-Kl-wDcElWJQlUc zCVeU0S;Nve&gW8?b_^XIVYXSU)e2wGMd^<*8Bd_?PFj__XL})%Mdg@3e?v1mj3SK` zhJAps%>WNZQW6b0FpY9CrR3^hzr3}P1$AjHThZvKUE!7`6>}3@unVz7BY;K)`oo*&1KcXvGstx^*`Cb zLIqo2;Ld&1b65I(Bj6uNiCVOae8ixZs}pkY$c{?Q5t_9L9vu}gQL-39HP%$?+JJkU zyzpIBCBQL&^8Fj_yUe;5Su(M^T2kJ`b zhlQK9v~SL5^$1HNYwFy2oQo#^4{dK56<4%v2?q%T5AGH;1b24{?hxD^g1fuBy9IZ5 zcXxMpso>s4^6tC+eSPn18~uwK12|P@*FI~_HRsxEx}X5}18@M;MRd7w4lKDkgP$$y z1rC%&S(5T~rNO66k~gt8BFm|}HhDXBtg#p)vmBDx@DZup-%j4Vkf^);h=@kr?rBa39GZwHqj8ljU|_9jZ~7(YlrPFFpy$h zL-i}V$5J5&04!cZ&4V6esHsUjWf_plB1v=k$Rt8Dh!0~oj5#b>Hm)rxvw>qLffKzD zzjO)5c}wIt4Cvfubl!e!Bga~)m}Zx6*thq&gcJkti#+ zjUfElzJ@sxa#nDx&0y4s4r6=^<1>HFwxb=laBc{+1FDR{x%TVA0085O$TtdQC>GRiXS+1QQSogM|>4C(aHUinYZ{VPGCbi#{6<*>&}W-u1P>MS)9ljA>QNu7EJ zACk%4`(OM-4CE?aR^eS%?4DBCrvG-SrS~W@B4Y8mL2+OV zzcXYQK48Z#X;dLpaH~MkPY(gT6hl~|fhr^%tQF|->vx}l^V!0TL3!)zY<`C`@n#5Goa;pAy$@Wyu#MtnGtcH?pc z8;~T8AEAdYVq3a50fG^8EeJOzfZyGT^FJQ|8?D>YAd3bzHgU zH_b8{-lOBsthELtuJ~V`?zS;vGp9wsQ4NXFfvIu^NFUhW#kw&YAb;I&8FAJ({U$q7 z>%Xw#@M~g)$Ev=Mwf<~n{8u*`j$)n1Xv!1lc#H51+b>AV7xm~wVb0)G>O>Ru zWJG{a(n~-5i2+!X)GorsZ3`cg!WV&U=S6*%r z?lYkY8p~;eWmS*0nsmjPV!D!Mh zS!u${G)ut*-?k8?qZW&nq3PsYm;ZZgMt$bv@7)>?Ao&JtvKO5(o!{*}4jy5uJ{Tiq z{h_w=gC%L}o0K-?dK7>EmZHSrkpM0kcIlZJGNT)6!Ecz1vEVnKR}D9l?c<>FY3PCG z?AH3n*|R;E6O|5e{AMRt)SoTdPgG_r*~1Yex)uB-+B_5=$QPz2Jfb@vQLCzId+SXZ z9x2&_p$OiPT=!e~pYj!}YUX8&mgL=#lKV65>;Kxwd!~b9%aTeA5KU@T6VcWJQzRQc z;`kA1?xGVx@ULIQ+dQ7IEjj4lSZGh#yoPJwKNnO&m zPIPvDsIfAWee+<~@P(-S(m-@U4WoB*DpT&p;4`GNhB=u}fAq;DuC;RPV@oB8U9kQcAO5T?s>~=0fl`jy%~lH7Qq;mF zXPLZ^`lWjqXy;(*VVPLH`olp4+k}%csF)JNLzbjOiDM1=F9MiYa=I70WBPTKh?nQ-@=|3ue?!CB{cEEH@vwN@{iPyGQ%!ImJRHQTLXNjGcQn9sH+T)b-n+ z`gSl>;M|o+mhv1f=#y!5u%rkdQ^ZhVxpA9>Z zT0kqq?e1AP0ciyrpGO2r*bz&NaS%~UJIy*Zv@$Xht6A&l9al-#%#wV?8n$_rN5qB4 zLy8ea33LJrGZA@bk<-IVzz-YjhwZ&migKg1Tj{Cxct|`vf0nyuR+A5UppQR@#(bWw zDAN>p51#N`ks1IID<0gZ%P9lx-~07BzpuXH{LUfU{An33X@KzP<`6P}VX1Qkj-WsO zC+-A6N_%ji<&E2Y0e$(X2FlM>*(vxt!)kotgjf6KY1ecQB47BdLN(U0>Ic|>L0i^G$SDPwgPLkt#gl=C$H-3(R=s^ipsI6cdy$wq-;3r0I$iun zQl)f)S_OsPc(Ken<8ZuReTcjX@9?#9)ul<q+`YcE z=Hw#FBl~xATZKR;+yv|9%}vd5L)xOaiS81PwXVxQo(ucGh3`^Q^O@ zmBG@?aja`ciEj&-h#{`|8%`MNliHw6wq&MJk`XsVN3S3>|TtAf3@7W50goF+q5& z9R~MbWojqoNCnTNlr!YxjqNEe|kdS@X^#9Rzcpp2anC?^508v zREe_k*Q;82Fx5u@Rdt=&n^R26d&q zeIK&=p3V>=(lkQoV;zq_V}i{5U~AzRr=Jx3llD1zr*(;j!wh1L9yWIZHU5OuPXJ3| zD&{}`_#c46Q?QADG0q$InG_%R~EfBo*l8fsL!9V0mg zIcdp|NyIa*Bdb6iPx0ErC!CKGak~8deyG(`{o9|N>InwLoHI(!qI6YS1CjbOw9!V| zR|rpp`@*ZH9*M@%)lO>u>Q?A;`ivjJTQ`i^ewzNyF1qndEj#>t!ViwdZL~*F+a3Bh zH-llO9N3}5XP;0S`bWpTi`2dujSWM!VmH4(`-qnm;j@7-q5X+ieL?b2@Vbz~{0OJY z)@_Z7wY-ycH}&-F`D}T%v(sFwZ!mJe_i_bjg34?Npbt4?BU~Gc;?@Hc{#AghA|=B_ z4bN|AxRd4QhvVuTs12C1g4OoH!wtQC{$Ji3IG~?Q2=R5^Z|u`Ma8QanF;{7eecmrK zPQ#VH&VF8*$P>9-&$=j@?!!;7C$$f$u-4m+@c_xqxXjNG|42z?Ze?;!d=;7WVenrd z0R_O1q_j%qLesN>u$}yFk>B_BPH?5}JfuyBguvOc;sY}rm57R`rInLxvSimpx?x^1 z{0hA~rO!Sl7EtJAf*X+E-6T_ud^d!;pT7aps?CQ_i zfbTlB)PlrG62Ung9I+^}KG$bA13ay6;jC*y0j=GRH?*3#GFd41vD6OLWYqvvjRxhc zG+2+Pby%-G+}ggrtGnBK6EpCui_-gc%;5xL)?q&zcWg7qWGHugP~4IX66#lI!w-89 z9Q|$Gs&|o?Q`czu$8aXvC7^qxQ!_1_Q`YoQbC0wJOU&~T4n!~2SOdkTorAA)nN{>n zAVi7gItvwM7#rKfFo6+9?kS+Vwmzl7Ihb{jU zxsaZ(bnoG4#7!AHsnMg;-LCEG{AlFqlY&-Tt=}hIU^e+dY1d(Q%|ORI9d|h1Qka&F z5_@o~vmkP3!4|JzO-t|f5!bIQqsO&PRW~`2SI`a*Pp`q6;42W6fur5p1;m|&na+6M z#iY=>3^_PhI^o~xF*sR|vi~IaIzqwj_#tQ>-{sa|fqi3%=^d5#@({lK z5X6*eY`36l8S@@>X~jkLn6I?4{32W&+x{RK@DpIDBw;kI=?=7#%5GQMGF()m$rV z6oYe3*b4`&%GfPjYX{n#r?k_}yEmNU{W0Btv^4H`5fk&?0Cmzv;Vt6MfrY}TCAINA*^=8dDE>qcJ z3n((SC#&3wTbTNiOG;B)fUL&_U5)aVxqd$wu$0L1_|A9u-@&j|iSwJ2UnM0nWieRv zdXr>cMnPHtr-aiVTmUgMA9o7^Tga;p?udcZO!`LAE-ZSTmr8)G_E zlZcSe1Q6`qpZT(gFM^7()1fCC12ZA%6%-^HV#!_yATVyBEZbn)+XBrx1M4!G?IY1<0CMmz8lKD z(}P4nJkqYlvDC{3a!RP$@|(Dhc&Oi%s{@j|3$DL z(_|@|DjsH{Q}UgQ34|Y9!R8CA!sG*y@+UhIzQxuZve*qxtO0&q-~gi9;1#IwP|^ zIfyM=U6U=o5Ate=2XUgEk!ZlMp-a?Apf5l2O2-aP_!*<0%)(-b$CQAy4C3{*PDXFv zlpoY6Jn^C32-S|=^|;Q}muh|jutuYGC9#JCPnN;Ew-tDxu@Zo@eGMSb=(>+ja_h3A z&+w}~2LCwMu~s)~2P&{@fTQLtryM(h=+4Mu3jX<&bwVNgI)g!7%sVx}Hd zHBi!se*jCN9i#saSlT^&Q7#NHo9jM^H#^;MgimiF3$M%4{}r2UJc(lYC9~%VUe^ZO zyP*wQqJYhXGxGQ>b<=5M9}ZQC{TtBcrAQ$vUZ}o59FfOj3(gTTjeYS-^MZG)w z*J}FO!Fh9M^C>54+&X-^l8@u?LPqWU3cJ?k&)mQEc+yN&{}kb}?`XCfC#T_jSLp@B z?&lAy{EG6ajKlzhJoy2~BSlHLq^4F+9(1bIsp={;%9O1wh}e$gaf(Rq+16^`2~u<7 zk>4gj&g$cW?-W_?RjOb~4uFB>%M^Zfr_nF61h1hwwDSG3(xi@LG!07DS{JN~3uax0 zMR>R@i&H+^5r4`|0F{LZ6B*I587WoU2M;OMLXbWXGRQ`ZSE7{|Y<~eBcmd{;aEm($ognOhk(!i}ay~o`T9V#-Q=KIb)o(N*1AN zXCX=r$S1jPv_Z=klm=VM7FC|5bPi34Yz~8A8h~cbqA|zNL_B^n=&G*rXq)H_NyUp<38NxIK~}w|v-+Ip z%`s;FK~gWk6F|2%X6DqS@o7S8UA#u8=V);w-pnJ3wWm&LWexRhgxklg$fiBQxu@(m=2jTZ#xydm}yBEPvb4 z8l=JwhVa))Xlsiu&B7IQxuEINzNF!8h16)=(&-R{_?x2&*PHckrO54I<}SNqjs(ju zG|^@dGV+dtx(VT?yxX(uwJ=A+USHL|OHF{;b7f$&z($5@0n`W1TNy3D24+wdP+jTF z0N;=M!V5w@u`^PwqYN*88ciIeTg!R_c)_QZ!l8aw5bv1%4RXK!H)y_5wsP`et~=B` z0vYswE#LvK`G3RndGhQ*>&QdUUtT$d-FJipMKLmECuh2^J|$9?;2Q~62_#OPt<>YB@`DJ?A`hyUmWh?qB? zHJw#8!zpGWx$ZMD=gHJ6RvTYI=d+VS_IcKjSu1!R_$P~(B3Jf@X7;;(dRMYyL}w>B z8s+ppm*n16vzS7TkU5If=pjjSu_W%~PcN7M6Nc||@9|`-6N!1knssQas>Lbc{?$Wx zNPuAhZio9;&~S6P3W3W_b!wO+>D)J;;cBlR$R`k1SyhVP9?=@Y9r=h*k=daoEGk)y zccP-xf{7hd=iiu!k2J?uHB9G}JkVp$fc(!8v~wms?<>jesI&jAWQnd(S*~17!96iO z+(!an;n@aV=JQf``58X-9dG&FzXA0=gKj%c&=(;{{^h#-#w~%St|_8KS;dOr65*}m z+bX|$mlT@uMmpnL)$aB)>AG13N)2@xFgDo@hNl8-KabzY97GOPuPsx4#t48phB7Fe zHn5WNi%O>}CGJmyJ2AQS&5j@q9%ONcTsKSq?w0p1jF=6?C}IFZNJFv&u^7ycqrh7>Q~OpXu=8S7^+ zUBaTxlrL|Q>+a8D+s)^0bp%|oSdwfS_?7U_8PP?^2I_YWL$2|WLjRt1UPUI>{{ZRy1 z11VoH_6(qYA?vYvEt?Un&ws#lObCYzUda^D90p%K8;Hs%%eJY}c4_VKM-X<>)>#ea zp8sC6@M86Rbu{z7V1&H_?|JgCl5`4nJOwt9aMy$u79->mfLRw??}QU-!xasNZUMNp z6%g-28KY~G#5~rjatbjdAxei8^38X$sd0n9;0PMB0AIhQpiSRD1aKBNSjv5tIH!)4 zRH{$#a&)Y6oV^bJo5~NJKqszW{`b1COsX zvQ3-o)eub_9oowQ7~76CM$_W*P%O(kyFX}!uB-)6luLl%=gpyalKD2PX-_s`;yz&w zAZwn%;Ws5tg`xb36)F5+CZKej~jEHoWaOV4PwlBHCcq-B+VuDV{ zy@vY{MMflaJyivC#f~)1{@85uKQkbi3w|B>;^Ih|zuyJU`ljhg4f8zU-Y59>&25P+ z&f(?2rhM%L_IF7bI}v0YO3sZ){r@^y_kv~puP2LC5SjO0kC2=XC>#H>*W>>#ReS;j(UQ84l)Ur;*Nbo&6hl%oN1yYa5#RIOjHy4HmpDo`b8+jx!c)vl&LyI_A5I^g$<02gNwMQ!F zJ;EZ4xP3?c7Bdlze^5zIktl|$2ox&&D>CU#o4wVf5MK4nxbGN3J3@ueROP9K-!n^) zjVMrXB!W&%yv@(gWx}e%s#6M-mqci8Z}v(;$(wD+=&(eSc63j*C~|DyLoF?wT})J} zD}CKUL!qWR^^+>&&!cdb*Lxck`}umby%0oCoO=b+-?Pna5Jv1L5d>wbaMq?-UzQdcbiyLA$DNCN|7(^5?+2#Dyqu! zVL>i*$&gwQ>wb*TD+&$x5z5^9Yb4(Y>Z3(xGn_`t*7aw6))lD6@&0y9OrTAKkh;;- zW^9L!y$t8?V0@|AMEWea1G)YyW`NrrwrMP2=i+)(Aol%X6;%1FEIlnEC-coYOicC^ zpq8}?IO*QwQbWKem z7U`6QLNDk+ZruJ-LXFG9J-_j8q?O_^%*Jg{!%in&X*(qWpXZXSc4-yS;4j-&+{KMU z_p?B9Ng25#5#9Fkw(DPKTcN;_2f2j}-_{B$6UTvO0cvcQR-EK;tT0-5gD3R4A`2%BHh9Eztz$ z=8C-1w5&89aX`CatZ^9SC~eR8vWY!B(zrZiP4+W&PpUS@HWO)y_D~7eQ)G(j@s`FP zs5s!1YU${IzTxDhA-N1P}FIC*u7FdSwq6em* z&or=q0;9j1(u8@7=DxupG>|t%>0D2$O25>2%19B3{>e^8hn+p~pS+CN5F$gquM6x# z@l3sl>uRbR3QxvOXhvJDZgm5kahg?qpe@TZtvpot*W|v;pTY}IB9HTfB)YTzk{HUf zdV@bmC(15Ey$WI0#_Tp4YH=FVWfRDJ^EpLl`OHy3L`~se5^88Ywfs&9$jAkUum<^0 zm^rC}iY=!DBS(Np%#`s5hJ3hwc^Gg-qsu!US~_YdqH>(1e?w$3+X9}V!&Z;G7quJ# z(G_R7ZyZZoh`p()S2oA`>~#+*r|lz)S4YURaUJk~R#jwoRw&N}rxHFlU*nX2c5 z0=wxw_gE5K3C2tvbb%qIVM8&8xUjQMy1l;uVo4Ia2d>y5WwTPtcr)RM=ow>Ta+@hy zt4TQId-QnW?rJQ)5>>5=15flY$F?yl1b$<(E)hr1NxM3-+W@zi>nZ(tPqdC=QyIlP zVJ6fLP4O-XF#2vo+KVW3OUkn#jd^A?8V-@zEwdvFi73`<%R*G&wwyxfpCQ>(NY`ty~nDUoY^u%RZQovy zdF*LpnOXo`-O+Yh=DR}F;d^n3Y4l(Oj+b>Ul)>JV+sWEyjLfyz{9N+?$u3DZ{$ZEW z8)L_|dXWn`pD$aDyPw#T;~~5U&eWPN#0mzt_kC+2w@!^TW) zB2pxIj?7hX&_)VAP~i z+g>{1BDG_#wm#-W0_p|gO7&2w<+h8i_u%L=^i9sp8R51NTYJAiZ6S_SvgXz^;3@Am zx#3GxcQ%%hXmiQ4cJ*W3??$KcuW%&Cd-Fu)&yz^lh#-1E;57L({dKw$AmB=39Unh& z?1$~vq`oA*Nbz=s=`X41o2_C1WlaAfJ6x)>goa^`kR% zgv;j8JQw3mf^iy+LmM)&RXd%w$;nIvYlJ_FZ)l8%B9QeTN`3btqWG|5lF&hyyoUO8 zc^n&0@E6VAU+&sEZSYC_e05qW`M_XU!!M=8d?!(wj_B*rfpsxX1L#K>ajxse3V?g_ zwvDm)vqIzVD>i~TzbE7oN!3$yMtDWM{y0q@Dx6?OL@YZv zFtGiBr*2^SNJEn(L*9GIA({w^q2`7f!;y*6L(&TY5@zkCs`s|dL1`(9s>);H+@ z0=ul3Df-QDvQO5(z6x@TDze(Gzu`0@Quk_=Fig`01Sj1}1`JKp&h&(L+ovI^-ho9n z02e5)qH<8D(48+Jr_aO@c%sk3XS>mQl1r(P(OSz7w-J8-TXO>aVBb5o90znw=L0r} z8&W0AeFAAKRiIBgR>X>PvWHH@Rp=+Z(=V=bG-NnjBJR_)JV%J7K^Vg^U;75^SSq&m z90)l%oN2}a;0p8v#H)cYJf&Fxt;Spd45{EYU*o$ngv1iRjSF7k31GER$4UJ;6R$VLzW>Bn#>X57^9|;`(BOv?3~});;eC>7GjlKfo#3u=*NRi zM;JJ`c(gwe7YJA%fE{=5UnDS&oCDiB-ZL3661yV(!=8RG11SE!|C&&+3HYbaEJ<># z)n-InWLM`-tTeaotrT-cPCxbqivLJbeomj?S)d#%XA?_PcGX`&qbl)i{K)W?4hHj~5#3&cLfb&mTkNLQ>A4Ipjp?mN z@lO#N#AA20FIkJwg0$W7CAKir(W=k>b4h)Ngu5cU(T)R{>L{}< z;dG}ZJcwUy;}wySRrFBA1Iyd;4r=}RZGP1Au1c4j%5?c>h0SeW1{q@ac zG;ZrJdv_@<0>Nm>U^gVje^!{3ne5-$8g@?!bjIV!kJo8YM}+L58)% zMF8Dn>n-98B=bN_N0ns)YT@cHhRj}UZ?|o-Mx8Y)%BlYD!~^_IE=M!0R!q?@0cgxX zWxDJF1p74e%K8e)$xFqwVHziAsb}=-i*0daWf8jsCDwVky}G#qS~N>7!k0<0b?5oa zN9y_?CqVC?9q|~+H|e!M%pD&0{}-_PlRbLb_%awx%QVgB2lNkCRk$GDUvrMTwsqxD zt*Fe-j4sn%R6eGF4ol_$N0j95=pz;1=nPj|l;WNVKN>JaD9-W1Lvp+0bYxtyp1opS zEnEVo`R<(IbF^Tw!D;%Da|iQ3}L308jt>ri+0j!I_!2WS=|(kbps5+(frdJll1 z$I>lW&HAa7FVBy~klVTvYNrPHF{BRJ7Utzt?yDj}FxXBv-{lrN1n(SAQiD8BKyerc*DGTERQB zw)`pk>@-i~ayuO|w9cGm-Mxf2zV^LGf`l<&AI-BFQ{w{vNR22lNLC=pwGMmZOhanp z*pzmT|AIZ*FN_jpb{3B{wut9WpWo`6ZeWC7_u;{1nOr5+)siLVL*gw}=1aiUZlgnI zM+5|Y&eVnS&P^*qb9b{*zhIOX*^HY7!5cv)e7b~ONo4TLkv*1*m(2~vjYugG(G2*$ z_`g=AvqBAqH+C%&w7cu@KYA$w}Ue?w;H+9iRd8@l^sP^)Ih+d z6&>eT5xqdTDEt)a7}?&@3`_p(W3V1s`r`=(&$nQ5CNHTp6G?@|p8Nv8O!zKiJ&#KU zO*1TleF!kvwRnahF7v`Xx}FFVXLTz(A(<&`K58Q225M~nNoa_U7|rGL;eiYqksVI3 zC~<`pfky;%GgxNTaUqv`K5R~XOi$kK*eD)r=vsZcb9Nrvsub~U5XidsdQx1vyN)o# z5*C>{4kJom`Bvx^9&GY!w(ie!(nqLFx(%2isUhP|rEpiSdb`wtFU22a zP=#^Riqy7w!orXrjD8s)9}dY}8 zt>rw%kWlygs8MUqMNpa#gr7;qMu}j#7YLc3sa+J2G-KKhK&u_ zW5aD5w5!zKO^7Rluh<8|4xFy=e6b%aM<;Eq-}uT`o{(f(DDC6a3AkVB$s{DptSq?#$YZ(P>UWS`SSe6&!w5x{GkHB%TDlIcR=J_go;D2%Z1xuE z=u6u!0gWACcQmGnZ(M(pviG12BVaK;Eu8SSnvGARd24PE39G#?Zi0nY|5g|NCP|dR zg3$SaB&kkouq%>7M^7eNif$l~rHT>Pr3DGa-K_Hr7t-~%(l!Z4E1|djN)h{m}DO+!lP6{6NAW#kt zqAg`2qc;TU`e(3K#F&#_^Nn`6RgooXvna3_k9*QmL%h2xzGfeG;vqq=9vz(c1R#}b zwnIxPTD9Ab`Vir8W=~pWkqPs9XmW>)h?j_$64rcyHCNJu32SsX`b*IWIu(_eIvLO=hfZy*ELl1JX#M;;;x2vZY;S;Fy;w_fe=$SSst8^)c zPw-b3|n}a1{Y^*o+9oYS37@-ni(h-of zF0rRAg{*n8wmD%&b9Vn0TblL{B>B?eHH!I6Q~*zJG*0rakRxvYYiBGAmP?G~4GpM!*#wWDwq6 zn*_sJ4Jg$;?D`~o~6UR&_SA)7W%4I0kjP70R?h&Q-~IvOmoWws@4NwNh5t2snCPk_E&L*$1on8+2MzZTu;1*fk5YtUgqjog ztJ2hlhrQwAd&SnpZ=wk#ytdRkfl}G~65A{7dyy+=&6?oKs02IgD>~VM=_zKIUrkVX z2lJlPmVvu~hi?|2oDG0Shx_U3<=rJdp0)k+cXj4sJ}bB=_yi4W;o)RF=7GT5CH(dLyyD73&-Zs(F4W=FA&4tyUNMQ zc}<&LJ~5fjes?kVEBqcJjZeU~0;2V{{I_$55YHQk>M3C3OLxK2=uD+}k$XDUHU2>V zRgzf9PqI4Xi+3Ahnr~zpfqyo{j0o^L@2~tmOLP6_ag>5TwZVNPo7HA#EH&Tzdk+9> zh&{oH@Lzdh$GiTiZEXGh`>c(wQzqSp)W?~27W~f*z$RRtBP8I}f;`hC@Cb(esST)c zSK7zsvZf?7>A@V$xLD+n*~~SOje-~W<4S->=gBmDfbR{6j1?D?g%4q?vgQh`)d&ts z>xsg{{RHJ4u})-&$ejfu`~l@sewL#Z=N=Xwjr51YPvH%Nue%!-0wSuXNb64RZ0EQ8 z7?{aBhf@*GkaoOukomJcyU76J<8z$fpDdkIWX#k#^HLRTqy*{nT3DFO$7rjHr8X9ZaopwTs;XZY0k3L?m5dBqS^frylgA5_@MM(bskkd7qR@8gnFh;k&MZB1Zp1nsWVFKYZ)t#y|^(6g`MtL#EEt*pXe7<0e!t zZ}bgz>A@61r5hU|ak{`AYFU{)Di0=D0+Q;lf`&O;cC1gEXB(>3?lW&>tLOXoJ#e54uCv{$6#d`tqC9@QSI~Q_I zgk`3F^ckIONZOdGV+=l-2?}Qm50?HA4wp^N7SPL&0Q!O>^I_7Om^8YT-TR)6;t<}g zzc}~yI+;FbSqwfghK0d(lhR?uVc$Oi=o>7pm6^z&b#Ev{?`nVF?(UE~H( zVY;F+I3X6P8l#7k)~anRI2XI@3^#KE3UbU4()Xsc{?SnhpjapU{|7nwQAAIXvT?|L zpIKleC`-0kjG30QVIFi|KCgFWSP{{&z;8WOD97Ot4yZ%t#=9dyU8B3jr_Lg`hR#qTO=4rtzw5qYe9=NtD`4!e zeD*t$+*JfU?&u;99bt9p$KT_ffdTU1{6J1kQ$_E9#y8Kr zxRR3F=IVtcw}aHUH68Qej-%_4(;8r+@Eay80z`ePBx{6B3(|lAH*ScGMl19!wdFp? zld1HKLdSqI6E!GA`tJ^6iP0v)`^L1R_Fq7O&6ym!X8?f<+F3YVn4fL$!{DnHZcG?$DDK{vA4O3 zF@=q-Eao60hY&|`YG7wP;ON?thr7~9Th~jVsGcR4DsSDH=iTA(jlim@arR8(HCvJN z-^^H%b9{h#;De^7rgSqbFa&Jl0~>ibmHJft$w|JJraZH~jZk(E=2O@M8FDopsopM}MA=-L=BN;Dsc!TU_7ZlI7*|Gfu4olkw~$T#6sa zN6}s!1rzoe^qT4vnA^VUir(1Z_PiStY-#S9%SlUF}naM6?PTox*(jmxS_z z10Cc~o@{Ypy0+?^ZqC+9$_i21L==>so}Nc_z*-$pk?Z8@TEfiCEZrPYAg82+HZ?Wn z*(@z5hXfpU^Q|D{73_Dz^hO=WS4$lIw^|5{=bLYS_sYTlOyv<@+uy2+6QqV552}Q7 z37MJE@bNQw%oXi?+*aGuiWllyXKH?FJ|I} zh})JiD(^!Zp0R;xR~qr3={(t1BB(>$@NcdmzFQ0`2=Z}%E8D&CoVNc2u#0_q?`;GA zS7bQw$H0HYY~gp(Z<|N>pIfyTIl%SSZ=Np~GSc-Pjg7n24Eln3w zbaWNdJ9VPdXsFlPHai1bf0rWQDVozV(f9XLB_U#u=eD@I#h>n+BrlIdrre?>B`wS3 zUJayCgM`cgEu0CKXYKo^dr<-(HImUY{h?9LR(N;Wj5J@I;ASB0_Lib#GCZ9bZ8y$E z?cq=|!w3o6qVB8eXk}1fPoxYzRU{wKbAmB`Q-+r;>6#k*`P+g)l(vN7$uKz56*zvw zYGTthDD9iQVXD{XnfDZY=W>IffjxrckXYsvOS&>v-ty?s9tY02MI$aqlNNM|t^Jjp z$B+q*3s-ZCMdsg?`PzhZ?`s(0lZOZs*IR3tQ}Fk}<*#QfP|V;CD?Z~p;@Nf(aE>H2 z$X1YjcI=1U=oH2Pb%yLV!C%a@_a|&^VotHR_-K1J6FnL>4rzz8UKw>$U`A)Eh|=QV zF|-?S@B@oESyF`}%jTOQy9KDGfyPhTSY>mA0mn>ax^kkrxDmG-)z4>!#5>H!bg2y@ zNQND$ECU|HOGuN8iroonX_At;_ug0Ywp82^3`%Q1Y%a-xlkoNi?~qN36`NjroP1L4 zc6u^T=q}qTf;1nXsgsj2mR52>pplfW)>&AfGVb7b`cHLdjB-tM0QavS{{nS(U@{r@ z4mbweXLx!#mw+1d3RMfT`5*v6|LGmgNFN}c;qBTXGEUwEK& z4X){S!bxa`q%t>xO4WxG(IUtfUw=PG>y;*`i(q!?vV=WTO|(ziXBA{P3ZV1d)}#EC zIy6OUyL2~pGRq8p<3hnC@{^dX0sPtom_&P<=bo++pgK{Ei$e{k5Q5X%b0BBjTN#|V z6ZsQjYhOv!FVt`O(&cc=5pRwh{967N8ClHl)S@a==bERIXe zl8EIQqhSKmZ*1yf>!YXMHH#K2$>^#nJ!gWtkr_!-?^S!HbvN?!iks#+xB@GpeSvwJ_h2xuWlz3#aXl>0UF8mKn9y`eErA)%M)^M4A%$*I_ z4q_*|JP?G}I|P2*f%RoG928MB>6O7rc^Bxsj#46t=)G~$@nf657g7^H^N z9rI1ufYbfUxZ3}At|0gP2P0(qKeAG*XPx9gR!X|Bb8`V!(@q-!>f`zKl|7#TlroLh z#{vr04N=ICBCJmQ*;~BQVP4OzZYYU~KQK8$3CyrhEykwSX9Qxf5@flHhiJP<`H5?L&Vl(Xmj5`nJRKP|8c!-`o3v5ewyG z$VA#Eto@?5?L=Wlp3Y`9-a=ZNh<(?X_`TkzQhP!|g23Q#hZ>gyA2%~Ct> z!n=HcWCXv_H(L}&1(;929%q>-HRhp94vw`|oZ@G9T-*Zf^U6un{T64E9;FI~(t{y? z_9MHle!h?$qviKCD`9q$h|u0oGDx~L3pyH8fZu1_y3v$0-m)AHsJp1CIybv##g4My zB3CZC-j4U;Xcx*Ys@OF9l$8~iwm(4QnWfogF2_*( zoBzVliMd#8YZxK9riopnbfU`S-2C>q6yvAfhd3)zYVQ*%5b)W!_`kz3&VgVFuVlNF zKQ0DEN%A%A%>YeDUp~IM9rsgY#&D&!8A|8Q4O6KYcK>w|mrBCN`SKem9E`4S6iHZ4 zw9mN@I6!u}GHRmA=B{(!g?)M7n~?=%a`T<0xd2jq6}37-c@UgW%dGvTJUeoH>@LN6 zyLY76+{3!Nrz}n$9`LFySd6AG5R%shD6Wm!sWuQTh_ZjzzI)@pEX9l5!_WJ`F9W!L=b_BX3BGQT=9rgWFO5LBNN~des z`q5F*{Ol~-9!s*&uV23aq0E;(4naY|N~4+LMACcs-W4I&nd8hx^U$XW%+JoK>n((U z{3d`#FCEyy^7A=P6=Y@I8batX;mXR&Zf|cNH5zW7aZWEUodWg#H0?jK1Fnu-d-S(Y zfK@zx1hj9C@Y&v*uX?Pj2Wm=yEY_bLTr2DzWapo&{S9w5P|^}29{u_1_;qKmbMhXS z0r(Q~;aREg;3f0m_0K<{1YQ11qa@h@5!C4#@l3caDqY4o?2{9+3HMmpDX zvMa4tX0HovMkY11l3-yj-s&!m*WZEN-(EV}LdrT+4dNA4VjzWq)&JbDL-PV5av&N$E&JNmdm87Gn!T({IGKx<89%fBJuXfN272W za&`4dA2?KH3*U*C>FAz(Tad5Xc&iG*I3-Xb`)5D%u({CKyAh++N7h+^9vI|3_-XC? zU>A$77JrIvmfDLZ;xVgYts+$ao-G|e@rUpFlp^aP23`ywH));O`8D)lECh^b%l3wt zqdGEgpk$op(0Tc^bhBSx8lA%&Z0b!2!ZAh5-v;YHGvsR_G3Xa`z?^v`^kWm-`*N4- zXRqZYE_J{u_|#o~0ZDe!jM>5PF|!iJDoA7^u7{XpA(OMkjY}H(-lRV0d0e29p(1DKWkY}5C^QE%B&2Ku)4JZi0KJ&$L-^>tTn+cW88 zTZW$5!7y)?4!^#~Dpvl5ONwjU+i+WNs|;hacT^z`zrEw>D6^veO1zMw@=21qgakD; z0qT4VU2}67tgNhna&Yh9;8y|ykIhYON|pM{OkreKK@ZVyO0XX&&Gvb~>FDZqmT#5sYy@`GR`Ij;AA!ek#9su_sw>o)UAYtji6!l$FwmX7-B ztg%pVh@w3!Bqu!bcn{L1UPO4>bq<~0XGTb99om1sZHR7qx?=n}0w#c#v*L+K|3I7q_p#M<(tMtLWnhN)K=X3eRpRgY zA!$Gt??0tAQEzPo7}5rXN$zcFDJo(rRfF*H@qbrVR<0Zx85sqnq~IMb)a2M4&DYk} ze%I=Tl`B+ei&1m&%kRIGMG3(;KH{&S>4iz?E{ek{3knNc%H33lt}(G_*nOL@^6b5z zp|$6-@hKo!H{8}9N18xv9JFu9GDn)r7~#vBpLI8?i=Gx9hCCvOgh$9wr{}A1CMYGA zKY4KIHT7iqX14?p&kF;F6rts=?Kr$h~Q{?Z{6;sW?)(H=uY zgFko=pOjQqmQ1YFU?Lk1iBJSgs3AO>LaEz!#rejkW58s&u@BHRyghC>dH3Oi=I!a) z?Ck96yitjUfkEH-*1$l8(;0CkVXQv4ES>)M*10O0_&~C+6j%f9hu|P=W$2!*s8vH6 z;cmY2rg`-1j|Cp!5>~{)&h=1%=Vkn9v6e()((BV`@D+~msRAYPB)tPWzwHtdet^o| zKDn5n992E2v~ekzW7?T7y}{KgLmAV7?~Cze_Ztk!%3 z%Cz~8P;VsJId>*Mzkj*OQBYJ=r#ld1GFQ?APrGfy^OpMT%bB0z`rzUur-WfXlujEK5el6j^1*x5i> zO6d_zX!MTe&%u%bBbVz)n{8xEa>CyWQ>-x`Mah^4dOTKEp?B7tm}^nzaze~uxwO0r z1n3LN7FR`Iu{k)3dc9te+`#SG#+YH%=FSeS@q8sGEPa*HOg8ZTi2FT^LX;b9g8Yz( z!o$MATW8C(%4%v{3#$TJ4fLezi!5XlzxTLyV?OVwRr_Ygb89-05_0^eV|Y6{4jQGqm*MPBG{LvRsrJQl z?czGRlmSGMNsV6C#3N5v)ojabS5Ra(-71Z3d7(s+F!KH=gH7ppY5*tP)L z+tiw!@4y&L7JJKe23&49;#sWsOU>4JkohzQqA8qi*L*@s>^{@boQtOb>Za)`4K^WF zPyjL!P*%o%etrg&NK-3k?w@;XpG_Mt6f(v>VPOS?gpA--JD#k7i;Iu+*g*k%qH`r8 zJRE{cPHy_m2vB|6?Yo{O_U9Q%W(WTXtfrgerIrRY;Pb>A)6Hb5p4wuwcjc(=&qCW7 zP6D&q9R*iXT5xSPdwps6KfKO=cm(o$hb*#N~B*HX=YhRt^g3_Bx(0Bmn>uVrqzOiQ5N zYVUmX==T18yvB581vD@?__lR^{{H1x)~)=wnr_cSMC{#=_-=|7#ozPt<;V{T3lKa` zwc;Ljd|GylLN4Pu@>Xirx# z1DoHv%p|VTy-My*P9&_nOL8v1tYQd|2a1*zV2I4>_4K)3O1+Nb2lMFj6=jGxaO?vH zf^USsl|x+KGO;u1*zMu__tKwguez_<&2EP^YSU%-1gA?T;GrwZ-rM~> zyW@!*ylnO-Nx+nqm5-sqT;0pcsDm)+Ayxrl?-zxJ^%K(V&h9Jhahq>nEI#r&SbhGw z$?Omk%XjOx?=&@qJTYukYpr*aSOjavki9pk6&Yzfo}$K;n)k+;af#n`k3cbDe!^53 zH?mIA)LupkhTESo-KK+LLkm>na#VF@e#h$kan2r|@&noHVEzm))5pG)N<1fAwK>Zo{{{c%D-j!jva^JAtAk)Y=`(D0~U2jK{l6IERaK%eYupj z(VHKIZMMtZ@`>#Hx+`2n8X_S9g86Ir*9-&ZgxU-NW(PVi&(rBxqolvj}ca$Pj z(#)8DrSyB8f4*fQmWUJ)(FDKZtzVx=1&70&>{(JBh#C=~HcVjOr~xE&YL`8$^||$L zuI&^7dXBG#nmLjK+=<`tZKrO)DeQ>^=|n*a3;AQ06l`B`z<5T zcZ|)|@VgRyMOSsLT^~;}k)PnkX1wZ4xF3^)8iD479Xaoc=fkI`zx28E zbi4EjXfWj#m!yRnQ!O1GuaXj~lID9-GP%Ol#X8Hz$Mb=ZNjZIe;wFbHh*jXi?Ck7h z3l8sE(e-w07%PN5Z_hS2+U5soX=^i*GS9XZB`i|1v~Ab4q}}f-)UPmgrf0-$s;Kr% z`bN+t)W?fef7l-aEG`WVI4UvtbG5&AS&n!5_=&>0vWxsbfoUz(>FV3cKHbCC`ip~Z zya|ryvXdi$=ec*AoN#}mRd~Df8U2qRKLS$r>N)@~OQ}S)37yl0&D-1C^}K&Y3fZgK z`GLmfP$89$d?=p&;CI~k56Cq7wjVJ0fWrv*aBuF_zJEc}YX- z#t=Z7!1~ha@<#zC`%!~S64?v5#70|OUH2#R-b5BF(K_E-{c6c}mjEnF*!f(S%Sfo=DStcQa$)(It>a8)Y541M3uejd9M zgDbwzqR*$PUw@@dfAC%Xa2Ex{;o}%hae>zb&lZ!M9PHuo1~7#XNn(jgU^ESnjqQ!2 z)dM2aOh7gwv+IyMqdV(A);qwVYMB_5eTa7||__>}e4OE!XY$2E=* zeNHB;*c7@wBZr23787!G+QiML`rX#Q!?&FCK>Ej#77&6cy+`M*jEGbA`0OVx;R^1F z-3l!T%X+U=Yf$S&g~x7zO!iJXTp|{SH{TncxU`yV{)*(meTDYATDx)V$9Hzwhr!rS zI_n!Q?d^=A-ipMHR=*>g@XnUgQ)(qsyXu8hoLHL&uJ<(Fa(pj-O*8VyAp6(U)EH`M zNt-}hSzGHYH`>q6&9R>@!gD^hxlB_N)kGs>=ZQa%HCG<|AyQmRUcMLBs2K87PL0DxA_6j zlNPj0fPte>sgIDKU+#EgqN%9~%=I@WCUkLeagedGYlW+-DsEq2AJAQZh=j!J;^JbT zUs)8EmXhKDpd~OwVt@C#I%YXJIej`z zKtLZbIr=T~@o!SX6Re+Pb}~=eXRbm|OT+vn{>$lBj9R(V-8m;5Nq&BKLQ?zsX-59G~sfNeZ}@hUq2kT+aOVyr>qfmrgRxJ{JeD+)XdA&xPsKRg5h8}x^^_E%cn!PSG3 z7Rrzg{||isnI82VM2RG8#4AcgW%!F!qBMbV!TJkZ^KP12N(^!b_f!CC^ESMBsS>ur zB#teT*5fieZ(l~tUmSp2VUd7x1h^~|DwL%+ek3AASLs(~sdi2%;LeC^)P_2qb}-2# zw3uxq91g)QfjfP-zy(s+v+eTH^c~6P&HuJP}SO^ zVqP3=xZn|HgvG5={`+9FeZ<)R2No8Knl*h_RwpV$~(&0@vLr!wA!<-w0MI=1cGSISoxWg{qLO408KL%|B))y z_etVAJ+0S(J#wzw^M6D-Gc#lT$^uf#h<8;F>j$Y^k~GwQkdyES{^D;!$~80{iVHEj za*eM8SLyc-038686|iXXN$wbE<8Vm(Y8 zMZS0}>cj;*`Ngde^)Mp#cTQpdltq31-_0>?m)tb(QdOK);1G|9Y9`)19T1^deqs2X zF!gk1OX2u%U>ceX9!x2wPqMv8^n`)Dk}SS_;u!(a)uSmmXux%#F7Uh_jQw{aJ%L8Q ztzOt0n~Yy|H(1^a-@Y?yV$JFQcb*8Z=?QL1Ks?=1mdwIb`@ix;k1~JqL^a`m@e(=Bl4S-x+weLTFO>Yr$I{ZccCU(6B!-5&E_z}^{`^a>=`|ak>#I#1|KBAt^wmQ}4AE|s@aP~N?rSiH zkHsDv=R#)mao;w+%&8i~I{Hktff2JH_i(7Z;lESJkQl5(${{g72=JL}f*#G7DL~%b zx@bKw`HL#941x{jvfZDk52*|~wbjVJ8}}vNZZul&cmXC5-c`EEqHi6yZL@Ug@5ukq zM1ctTePe||6n)KMkW4wtpW8wIXMcH;+ zhXF?FpPt$R$Zs1v))sS)P(>f@&h!V2%1sxl()?z&?jGyr>!A{GX|EpOQcMoOr*5Gv zxtoiDBP06 zV)FCh+2p3i%Od|bE-zSbf4{?O9e)sJpU>#u?1XPl%D>w3I;Be%-Gel>1J~3}08ZcE z*y_*}5^IByKmn=BKMgJj*U+`AnV@1u^lR(pSV&ghqQ^}}x?gbf%>gS1-Z2R+-s|As z;k&ialErI!nfjo{Zj!#W1r5h*nQyX{D)c^;P;)&nK6qcsx9Hpta4u6!-o~NXIcmN^ zv`I?4J)tLg3vA#G55BK5c%h;k;mvTUZ873sfFt|rt#kx`RQu%Lj-OG-F zXWRZUv~cGOLI4eaEf|g3fv)~?aAEJ{@&)fX9c}{?zY(|0+q8LUupXXhqN!PDZ~j|% zke$vmQQ_0QQZ=8k=2hcbte@dkUKI1D%{MV)a4`=!r z689`#%tP2rX+II@Tc1rjY+4QtRo^N1`uM^liEY_noyzMoEE3S{B~^qK(M`9pAOF6Q zK_63Xt6Fn?_L}KQQp=w?2s$u*>Poh;2w1$OVw-{^NCHdD4( zz*MK@X`oPyqkrsAYU2{!rv;ZE$3vh<{_hoM5@IE2u!<^DdccerK_fx3rs)JBZ}@g1 z{XRo=k7QQ19RIES6c@Pyg1V7ZW+TL;v1k+=!2V$?(o z#XF(ZWC&rF=;Il0@bO2+96QO|p=EXoinC*FR6B}T8+JfCZWYv`dbk^6JHF445D=m` zyA68`_riE%^OMOgO6Oqg2507pWI{T{A^859ZWFC1Bw(W|8aM6Vd9dW#<|p66`m1I=@PnBZjbv(%c}6! zSGXw&&fdNW4mAmD^1C1m=?T>|6&}nx784Tz`>?xy3KAJPUR}rF-Ob8$$&9o+YDa^B zbl+g3mku1X2y(9^cbQFR8&g1v$#!^LH19ThPtpD2=Xo@jq1)Ypn?>F;B4h2SRNCRM zGsEwpDU`_}=&qR-4(jYTP;W-8CF+H0ENYfm3v2>h{h<H-X*bb+1z9{x%WnU*Emxn}ugAldC$0`#= z7on3%dD;f=Fhu-ED(c0_ppL9Iv-%JMFN$IJ>X;rBQ+18M5CSFOQroz(E|ej!D-l@7 zh%^`;X0{3vMXr|t{$}5@&+1&pwKqqv5Coqz)90jYY&x6Ijh#p?Q0H_sEsLF$7n=5J zAb<(FIyKuONjk^!>~J=yTlTQbva~~4$$>ssSBr3ibF%WQ?4$*q8kH`TiQP z?_2hQQc=tDSmJPD3%%efMF>fFC9*YKq3A-=uiXizgjtEoUnl;lb8hZLT{lK0YTiLF zkT5WQp&~*YTxy-@?=u@cz5b`BUDh-$8cqs7m?H2|1&Bj@D&? zQZDd7R6hXK)5bI;CyQt7_aA_nHUj`mxXYX?VQCEH)HSDlW}yP9zFAjy2wU28=vqyA z3b)^QCq%-_Os`iK$~5oItiBQSnrYJD{4QUYVBZg;ZQ^-`hI(krv(S6uVeizQkCLch^SaZHvO zi&XZ0v2Ypug_Y4~?-l6cis`g``VhRt`L&rf_pYV%qUm?zql2E6tXNro#iHZ4KUcgY z0tw(WnjaK26j8j9hk}7|moow|g~xzmk464ANf=tkZgKV9OfXiKXp(a3QK1dX8< z-hT^Ej@CIsdum-ZOk$=!`|2pLQo|qgjEGn5?END95dNZd(wvczI}aV~TBF0*MC7^r z{u6|!r&Z_|a6V*6J{e>bWJzv`%!1wkV&YSO-=7Gjznkeuq`qlO|K>tebhm;4NBqfi zAAR=}_9^TO@u$_D3ue8MU%I*{O_q8LgB3M65813XZWbosO9vm@zTYstINoEfKuXh@ z((SfK@2vm46UX|6F1IKP&|ZM*j7C+o?Vv33R{l*){e-GRiCh6SX3$$`Xf?*Affu~f zo0}GozjPSdyu3WH&FyW~suG=n=yFe=T9`^GSVajL!%6*IxdN8`L+P)>7{iqTPj@4& zgm(6IywjArE$rSwRX)^5RfPIr(iY@`gq-ajNs=1dqs_47SMeK0w)RkRg>qiu>FWgz zIH-i0i&U}ufi!yen~P8;M}_CxUw_n*E6lg!1jGR2>ZnA{h zkV?3?&bHOhfG!P1KobuZcjP%R0E3JY^18BvC7b5AoOXys3YNS)`1CX8<1l$VyL(7{ zqbLy`5|LE!>iz5hn;EgU=X!P{^1kF)*5F`rtljy+CGknT+^2yUX`5Bd`FPCx0PW+s zc6ad>b;qKZyQ~}0;<;Dl8T|ajw+!pSG&|Ah<(cP0xu*6nP8bZ7^ahycpCV>L)~c?z zHe@SHdL%kZy8Ga@uE z6EJ({m+FN&*fSw`eeKoQ`}=?Ox!wGaKX$f6&_{?)2%N8-6DXY6{CfSrofHwR{EI&1 znInhp;z2}r&w&t;7A!gh1xU1}EI%cOi`OE?)XLP(BB}m}ao~5pyg3&k%J+>*>?}b) z|M~ff?Qrbi=&TU0mw-Ud;t`K7j#v>5^DWf)s3hb!B@Dc)cM%)?CifS7e$$;(O3CvayzmNi%x%ON9q2(5J~Amu~MAdYr}Ya%(LR+>8R#9COWVe0VPjglQX#yC|F^h%?E7 zTuND;YkP0ljqUqrd#KryI71ak~7O<1QD_Q%(H&NtdQu0acc~lV$H$} zT6{0kvvaOr71BpunPWcrU3bVa=4Z`0mq4HD$msD&IHMiP!^6Xd)zj@?<;cZ1fI@OE zgrV}H%2*`!R_j!LY>s0m+(iE2 zfrnq*d_OCtx_QQ`}v-Zr=(=I<1ghu`T8=Y$vQJYJ%K3J*6egZ!1uY)#L zB^NEt(vB1%>3V$cua-v3IEx9xSCgNX-M|BOzSBK@B7~5@x%Uon9sk6!$p>X^EGU{l zE*EScW}EyHJ6b9Dwy)-|IbbpY1w*)zM_mW{<+CAI>X0OO$0(+d!zAC^lfi1d1KRb)7_41tf0TaCv)R~mWuVCll zp9)o~TMk+ylvxruw^8yT`=F_tLY)j_-TtmX*8D-qk|_pGm19}I%wm6L>hOH8s}>$= zG(!dO@^LslP8FNQp5xnxG^lvZywsuzsuSdg;#_4cYqnKy!P*4uY>3ZTAkZHtn}pi_ zek^w$yjN$oUdHT0qE8|oWEPj)h7Y{6;xt~y=pZO2jcoj(IZ^qRud)rw>%!0cknt_j znBt89!}e3=vAjMiqTSUjx)G{*_lh}eP-jW{79VrU&qZ*odC%L7j=_@$_;i^PzN`M9 zf@ztlp8}RqbVbE^6rmZ@DUmUub?cYf*TA9=(deBkl2Q&U$dV?-9^6yHEm z5R=jy(#aIa;#gmkAnw5G&38SMW6i!Tu|E#23Yasc($G56067-D$4n(>j{X{f$Ls!I zcT#f4%<(yFp+eDzZ+uMNf?WDHTD5RHbcZy7v^fQnWC>seYQEXCpkth>f@^asrmx#?95#(5M-pWvxv}$qY}c%c$rmSY5uB_y%=$v z*V;WY0`K_1NfnEZjUA|3l9RdFKUdlL)S9T|-yh!3n9;oTbfGg_JDF+F%PXSF={+;g zngQ|emswq;X~DnUWs68c4DZeN(A|4Rg`iWjhTO_7m+0I>a9uwY#o&dA`EN4IT06Kl zNAi03oY}unij)H0nWCnI9H2D`5Oxkb?|W03v5~=eLFGdPY@RRrX^;|YPlK*;Dd&g; z{8oUR2!XW+?pBj^gdM>pRDk_ot?vf@DS*h*1!7n^vPhN6yS?2A*&9uJ17>J_C%yp< zkDIC1;u0CPlrYd_y4-k2bwdQyXi!jO`Lcjqlq(t*mau{Xx?BMY@kzPk)`Kv`V$5>E zlwlx0L0enfjOa{PSJrt`OUnxm+p8B*3c%BW{LILBlkZHSRNZJx2rq%`1@MF<6%>9- zN+R&_@gXB4hlYl_^=a2HbiMX=0fx67$9cv2!ZDQJC@A274tBRLO^ui5Cz|GeM5oST zj^j|Vh~c%b59fF_H1LZQtG>|FM*(%31{LzZ0aYjaaqtThca59 zH_^MnuCB8yGyHjY--ksN`{wSl-0Y|R3{#fY9h+R4;lpR{v@gFJhy8|NTe0-NyfpTRd=lz0Sc znoVGQ(yi0D)jz}G$VM86;HP!QfJecYJ<|{T-m^MlN;cN}@I9?-^-%OF`pAC0YOHah z0OKQL#7}z?rYBkCD`?})O>s+=+)>-)t}wWg_2z?{!}Bk!&+*3^$*-Lu{O9^9)_;G}ilkg3IK%EvG&Cy!@mF4m9~=HW$d?k{j#k<5yK zmMKw9QmisOyP8qkI6MqYN?KYGNIPvPhl!4TT6FX3a5qa=6IspF^~Q3=BKV1_T;IA!w&4h^b6yr*Crn*j~Koo z;mH5=D0be(ME{EO*&^XFF5Msi*jrP2Kra(hrd^Ix4X}oW#e=>-aA&z`*0(MI5Iq2Mj8?`fRC2 zu8eDm^e_xnV=F);Bc1qDx?gIrZQ;#AtqG8l6N>9cW#zrQq7+UZei%^Moi9SjKdjJJ z0!JREOlVsd;e=|QgA_P0*W3u+m|wHbcD{f~kQ2?aY?E5XWC_XGvJ{kv)Ye7=|M7N? zM-Y*kwXibqT^mAceBTHaA0oX5+7;BG_Ez_|#{IIWvyPo}K($LflmFrRF%N-ni$BK% zfA{<*)L|Aj(p-Id;|JTrn`nWY(k~837x(%K)R~+qS@Gbd*nw@aTY?Y46va!h_c`Sx z$_gBwMBQ1VR+mzNtcVI1Tl!E|g#l1VdzKDJ&$l9CP#?9HF|qt4#8epb=zypPpv#2!>lD`wseaaH&b%j%3{mDE8-Q5hQJM$IQM8)G_JkwHev zW9Dr0QMg%Trxas- zAx>?#l@A%NqjbU_Q-9CJAdcNrn>B&x;YW06VkuUI7VYDHKGXRGPr9+g`EcrX)P`~7 zIHC{=&c}}qqz#o-7=0yu4YO4R>s6L0rd6X5@{w>9qPPwaFNeP_kH5QNBm_%x)TDT= z#0=^c>}xDzVEU%*!aB~p#Qe^PPOEecH<>!A)5&=~e2y_>uQMZ)lf}%^9)#OBKkqwY48fg38Nj0HQ-y)wXKRR2m<59r}=`ZOq!!w03ey5x-K!$EhJA zW*ZACOAbXL^B7wUR703pX7xaV965B2Dl!x40R%+E3Nsi(VO}_5d%wpM&-z(&;m%T!@KRFvNQGaqE2fn=ljCkAX!* z%^MRZv}cE7KEc=D4wsXmjOUST<{lx@Hne85&WUofa77yCP}P1miLviZ)}s_D$~Hb8 ztmT6jlVho4J>rh#9iUHu7?J8BN1p;<$s@zdo#AyLjqI|L-$3=mdwx{t?4qQdJ>4Li zjH&$_R@CPglFfU=Vf79Tb@lbV2ji2RZF02TYENJ^ny)kf2q$vIM$(FkLOeX}##AM> zO)?BDR>+~ZW8Yn*;M9*KT&>)sN)WDO0)EDy;VMNO(0s3_qMvlLh`ybLJ>(@^RT~o* z=?fy#4GFF;f!2Hz8?Gftb4UGk79&cB3i@NTWK#qcC8?XHzkiiy&`Z#XT5eE90;|~l zz!#5l?eq=*+?5&}Ysv)>N7HZWCZCIfWBl#F6Yq%do~{6$)QYxksYmJRm^tZaEyEWK z@kv=N!H~AtJs!J;gTRt9?51?k7RbnUGpG*Be5kn1&Dwku&LJ{g6UJsqxAbB_z|7pD zXK9T8uXz;Dq9-W~Xi%3HV9S7A?oIdrcahoIdRI%57&kXK76a%r8yj{+-w!FN@gvIo z+BY&E#hBtF6e?>8sS44BwfPQw`t$IE8q05;u7w&?RNGnGP((4k{5lUk8StvMqy);w zkElV6HLFPydNK;Vz5zr%IqYdybg35IQy5~#4|oSOk9L_FM)O{C<(Cb6mFl&$_j@YI)7KOX7wCag>4vl=&g|(}PtCn@>`n$2H zWS8ssN@gZ1^u)2Ti)$$Rg68Ju#~W--0WP-15H;iaa)yn0$1k`k2iN{gpT%c=uTh3n z!8a8C9d81YMv+4Nak3-P5&h#o;qJ?t7sfRK;l(s8L1i^&BnWYRocgT*fbw&VE)IP* zc0*fyZ(3MA`Baiz)Sh}-;iTgpL18U2ms zZtXh{FE5!I0u{w}?N)#Jk+$nN)HduMw*uEE6=KJYuhs$yhQEs~qamnFkw z0Qt%lbg6$|1xnQb^Nuvizp#)Tps`XX48@8N0&IE!LObTKiu4=*Pf>+}4x=icWU+&* z!Qfif4IoLIG4|8U?9_Uq$*E1t)%At-Z?^zvM11@QE)$bu*$2gH&@XG1v0|$VkEe&r zJzk(oz%M8WuvJG6=xXl{!kTM#X4S2T12|3_`}_WF>aA^UzloCV-0LiN%7GRRR;NGh z2Y(>5W0wjH$iy3n=(Ku*|1btOH#d!NEB)mq{ejLFEjmn~8#2#d^EHYBa)RZg zcv=}_`n5n~6>thOvP};S1%-zr($LVDuslUZA_H5GWhqLS@}IwdZpkli_|Q_Zu8lwa7jo#um^4zLBHN&rL)6gfkTa1Ra+0)Wmw zC=YNfEG!_BDpIQH9v(i9?|B0>m zsW@*Vwy{LPRBja%_M*`k`J*J1=rf+<`Ei7oR3XvrI=5{j7S!1}JW=W5(Z7;jJW+2M zfR_x25&`Q|r&W_7p`>AXa5#yzZ(txJH8u4d1rJZ$z+lh%g30BPNw?xo+#aBh`=)=n zlWkGPU?vhbD{c+!?*^CGW1oH$`Pf;cd7Zobwt9bP@y$%hildKvm*y77`;ONW;s;7z zIW+^&0zr+#YEuZ31y+Q{)BV*9n+@;@#B*9kMlg{j_Le~FR*Uk(c20`R7fwz*N5_YL zV;}}?+PktiM&Zv0J3KrzI=(nP{ru(2I;y3FwBx8EO*UUD1-o#6e_kW?t#qJ34E5#~ zm2V&}KN6h!5TVJme)o_v_hT3Y$f)|ue%8&M_75~e)p{d;T7~NrYNy8~-EkV2QM=o5 z`^%cg%X-fE00XC+HU*BSGsbJZf>Zr_FlTS^%_cp?)m(@|fnRsaOw9^d0z&+RI|Cpy z(^Fz;#=*4bb^(k_YZ@Q1ElJ%Cp`>X^*vC_8Z_ZWgUtdkW7-Uk-hq)Eg;}M$b6{bLK zLER~ifOPkF4ajK;Em!Rr_%QYM*}ey(kga6aZKD>vdbjc{(#xXGYU}8nJ>9IVOqThl zn{D=nwM4l{N{-1I%`b*HIXmC&W`y+i_1#U_*xK3x>(5&0LTax`|7ue^dh?{sc9n&a z(79&>+WUL9J&E6mz?hCE4IjhtWRY6XBfntVPU z4Ok5J0>tHKJX##BJ0Vp&MHFZfmDjaQq}o}9>k~UcnVVe|CT3cd+pyD4PwZGD#QGo= zGfSF?n2e4gUZ3Js!Q^sfvS%~Yy~ z;elyD{K$GYZ>4h`R*^VBvAQ^(V;+&F@Oo6<(7y*AbH_k4+A`$ksh3G{hWOzmMXgyTWxiB;~DyL`(IqtG~R!{7oQahJD0EDBR$ zoZ_FsgL7rX-g3Mk7gegW$NX4NGlIXH!GzT>`USc_m5i@tUR7=Scol!6Gxi>a*h`uG zw!p;eg-#6)%A?TsZ}iksP+qLReo}|LsO;dnqrh~2z;YcAZcGr*INgpQd>v&O4oqkUXrIKl%8TwA(ds^J z*%0DW+-gHJ3!)Etwr~EM)_f+UV7U1X4##p4cE#H_yVk%Y{~S)pNN$YJ{=CDc1mG5YoE zJ4X6go5xnhJ~YWlCmV9*eiPc>C>unl zf@@ifBsA6(=2g#;TMgT_$Ci2i8KVo)@1d69C@osn4b76C)p_5KCCA{$j^vSxDZiKs0%IQ4mv+;6J~bYw zQgmk5jv^73*2{!pST*~p;>L*~P< zQNmxj+p)5fL#39MQG#^$pg9Y;(EVblI)ynAGNYhR&3-1kP@rS;&rVkSFp`+o+XkZ~ zjqiV)vh$ZZeQcT!^y!iUcZo^NMst<@#dgbLN^I;;85tRrDE@b6FDf7qxrT;Dl-3|J zU)}yw)>Q*#6JXbc9>nkN;Zc%M91tM9<@i5A8j}BVT7O7+`?oj;B=wU26TQfsWCpY|ulE$Q{F*ppha{8=8gB~L+mUvR4CIeuvKLLUzkcw*k5Ch5=2?#CVC>_U_ttgY)|J}of$RbD3QRSLQxxUN zz68gyFlk{!d9dFKcjoHs$VY7S#Y7odK~^@kGjN+_k_AjAUg@3aHl)8RVai&Dvg){- zBzxy)FxPZ*_=@B*=$Y21KKlx&ru0=8F0dIt1{H@{1Ow3}i1&+ub&ZGgA3(ZjeIpwX zq-f0w0f&>!ag3~;l*U9AP>6`;)OZTb9Fu<{Fz(XznD$zM*j0i)TkDWXFa`dDLgf z_xy;*&IukTSd&=UNrh^Tun);<2sM^OeoFG^Q>-}OOYD812~>5a<`!;}>elEh`26Tv( zN$>(ENz*VAUJXR~Fmi^%1(S0&vOFFYDKAzO#WF|mX38+ndi+9f8s-Cd3-8|*tHeWo8acE}x$R=El9BKK!Q+E~taSjnjPOJn&1jfhE>d6WI8z7^^U=z8= ze9Nb|UpKcQQG_Dy63u0@MK9kg{;M@X<>}OXQp+q)prMV^tn{$lvOJl{9x#mlU>aDH zftyrBX1yT(b?mJ={?kI66}$-#93!h0i{6)-Dr&XLnMol@n!%T!nz?4qrfW zgdel(9Gnq{=;bB2m7yY>fCokLkmI?aGG#x-bi%hk@j8zFO{cVHrHN=lXz-=e6_Q-h zlN&=^fZa<$lY&Y1bD=;Su0iXC*A%kaywy1j%e=$sBh?m#9b-LzHZs9`z98RsSH-uy z*%GCu?=w>Lg;nHPVa2R{?Tp|1=salv3x8d0t@w$lr=N>|`Im7Sh;B4^f9m=LCe+{$JF+WmH`4+9nu+ z1qcw_A;H~U6EwKHySqEV-QC>@?(RVgcXxLRhc5D-^R4cgK5M?7`8EG)Eui*hKX&iy zzGM$rZD7%xyel*at)45?9q;XnCq77TB?@yIi11Yfg| ztva|WN4v)E#Q~qeKwfV@0599%rN0|OhUe{?=a}`ir;WnzaHArZogy$p>_beq zTIBN$EFw@)oP2dFVFEnbyQ13G&*$S<#R!Z)h}^xn5>yq~DH>$ZNf!0T{~meTFT z?C?Yf9Os6pzJbd>GXLPXBBFx`qBkkvFN(QVZFB?!%+1J9ar?GllRsM`=PAcuUKFh} zQqJ6_uEUV9WhN`&b-xtR8$SrojUD>wZo5E9E(c)!XV`pK=}2<3+!p7F#q#jW>prbb zi?HUw%FoU3!&+jX330U@A}Wi5xriB zkJPDqvo=auWPnBZq$vvow8N6U^YQ-PPTLcH23Vn!k&7JrIBa%;(fuv>8adR0XUB>R zO0J^-r@XV>v>8g;^!6J%8hl=SRKo&!g%}@}JJh1kW4ZR!Oq9Wqs@sxCdn?jb(7Oz) z96L^Hgr{NAPxpnChtL$pILMjV15Qu45iRRL1gdvV(I&E(AQO!WWAelEhs5RxgXtCq z2#(UKd}$-W4lbnAv^MBM%}}Mr6VVF_muW{ z*YlshE!m;!pNOu2s9oV~t?`X>5A8$JwNJJB$_Qd*_M`#3}06XB%q{ zzl#DdpgyZ`2jv_F(NCs6qn%$pB2sE;w8zl3H0AdAcSPXGvtr2P?^N$)&EY`yiC7OV z=@G}^D+g+jN*HEO9?GQMT`X$PX{d8T3ni{o5Z| zNb()b#_D-e|D0c}(T%lqdMG-<%riBPZ&4CLHU{`KvNsis4XUcg_|A;rzh&~`vD~~3arNdQqqOUAQ zyEK;rp=CDE6q@2W;6gj&8eFA@W^6FFsln><;FhQOuO0{)(?2~B;_~EyWl#@{w?&9ZLa*37*Brl$wPi-2=1-rwJI7PN2I}-coUuyp$eCf z^^7@FcawR_C-!=N{-+|gh(v4(`nmsB?#JoK0FSu6AM5qtCgqeHJHN-MJ*)}UHQg^x z!5iIuA^(;{VOH%_sY?lgG{?D|iCu+`=8H|+5F`mm;s}FGXdY(sg)K>u_C<6$1@Wc8)Z$dF>RE4pGuyAlxT0-$!K>dojUg)S; z>Ka(uC^b}AM(OBd4ZkBTmSSD!NEFqAMkTT>fW(mCAlh`kJmM1TZU1~DM+Ko9qlE{b z2i*2TL+fXWAdd5@YGJR>OHQaN1eUYS zl-K((P#6kL4!MuyGfUlL6>F7j4r*-C3zi#W41h(N$>RMy#WuPlmBf@ZpJ1wXHLegM zmjWheH=kR|eTGZEYg1QD~6lu0qtr#BxT3BQ1T@RvtYp z^I~9bF60p}sCr-`DIl$*Fez!&iu`@E$9X;lp`_FLRrURIbLi@RU>RbN@tw@rEW4c* z+Il4C3$mdesgvKm1LgNCvg4y28KDOs$4a)%f-2-4Q(3Qa?`J5k&}6RYqK%a^9$C_> zSup7r6kd14ZDnDgqRg6>v8tS%1m7Anm6@BKT;x&{gu2lx7{n$iq;}XRs|+~ohqlrMunwA&o-&^#zD{ka#cmhuo69xU*!TM3r%wcfea7>}4?Q)8Jrb~_=%uJrHs`=iU z)=p1gS!)}4{s!A&!rHYw;rT{59nh2N+ z=cW+z{O+44FoenEy@-+X=&f8m1ztdv&b(J-dh^f8PmA_=|KBX2Q zl`mt#KT4yw1zhCyWzo2bRE{qZYiIK)1oA@SZrb2M^(Af2GB33x&f;tE^lk0r* z0mxU(xYl?u!b;YTJCySVSPzDiUbGLER1WK%Yq21<&1FnAxr{4@5tsjhQeU;{z^(S3 zcx&s;UF*D%8HR<0b`^=s4?QLE7N?vkOpA7+^lr%2+EYLbSSJ2OMn}c z3t80LnuI*R?m7dtx6-cUibaIP1OH8*TVs)2O?A?3pnkF997*jEv|)j77McE2dI{1& zxMjZ--72+4-yh(qnBDM;hLJ4Aj~x1OEi@VM@?pYVx}S1+JxUWt`T(JBgSLb!Qd!g0 z*rNKQj!kXO*o-350HP$AWFlxPOx89L*`teSWa7AG-am7fyL8NgL}ZLd^*U0g!HUi# zZK%fxJu4HU=iR1mXe;I4p~2wNOSX?VAagDy`>oU`;1_o{0NOIMi6bR5f@ATn!!H4M z%8wWy3gYdtM4uCFE9$5)HIa~d@wp+8t@4ucVvY({fRRO|g209Du6~&MNfC8vM0d~w-@$aQs7rRIU4>fFTZbq#F|ApF9OpOPWr>5L)5lQ7(aqk zsT5CmHNgl{3mJrvYG`_hsN8ylE~vNp!RwjwOo`N%h>omgUwiNqwsw&uDWHNms$i0G zV$Jo~8FP6szXg}1&gQ**8$&&r?)L4B$!x;Bl1Fc=rg;MNS6;xy;l6Df{T@wj;^I_x zFWhIhZ3grc3X(zC-xLhQsBD`LG623Yv%QN6!94_y?r4gr>9aU92%uYB4jo3dm?IKO zwot&e-}FLVPtar>I^$+PU6an_wpuM#&Z<_wc(n~VYvgohjz3$ei&~=*GKM=uQ1mA? z6R^_h^D+Vs;L;~jzU2UmS{~kxZ`?f9WU$$fMYpVDekd3#HXOG!bWZ7rZe-l%EIE>` zNe^zrW!z{xiVuT3fwx6=`ynv$s&^~wTIW|xkrDVC&1}L`#@$X5`xP>$J@Az=W8l_I zw-1`(_W)x-zD9puP<|dKRT3L1{O)84q{-^hRL!=GS|{vJop&1TGga|YgJoIrSfh6i zbb_TOKj;0X87H86#sHW>(Hu5SW`1F@h{QLIkb9@OK`@H!sR?osc^!EH#c2u(39Sy` z27Gxl`Y!>=8;Sh8fFxAzbsjk7UauB0X+q4-e&2G~($u8Tard7zB#ovm`{pvCQOKRZ zgAB1(>lzzcL!!>rQ@y`!Nl=q9c)8|#(L47abjK@_$p5xZJ#+tGJ_fss|KNV}e83{L zYF^`~Wdr;d@>khTFDttwM;eha7#XWReuSP-vp;Ct#=?_&EV1OwVosV?7`4;8D`ItQ zfN8Vs_LqS9m-c){VYu9BINXS3;$dO!aiJ~uCrqpFM6$qTzH<&2%kbaG-n6E^vm#?r z)qOjK1^d3wsw6FES-NH~Szf1J=ay?)XCDYn?5wOLh2x20#bOrDla*uSi$69U>&gnY;Q^oZarfH=8^M^sk{k3-nEBAdTpFFr?^!dCpZ!MLuPj^76Yyx+Eslxh@dtMq=7xdGOw zMuy&>@>XPQm#{(%|CaYEzf>=qO1(QDG?28`aFRaNXf*%LKC620Bl&(X+rL0Hby@2F z2~^AdPoUc4Rn6}CM(x?_J7Z-?7;y2LUQn*l5gi2`xUqK<+PWlYCcz!h5##T^Zh!(9 zYx&WxD@MxsJ9r5xW~MdeXMqLuGP2}-BiwGP?LT2#mW00|im?j~8V1nhI@JkspFK@a zmVKjxpc$&d*oFge?JB<8f>>{8Y9fI)C3yVJO<9Hnz&wHLBX%5zgAB6?qlL;H<&(xe zVurg4e25vR{&Afk_w9Yv*n;eI@vp4CkfVegnROtY=fo0jK z@wtSSQ?gi-k5$pHr#darY&n5xc$^tbG4eoNu=3`TXZi+2B*`}0nd6J2#@H!zG#cW$ zxaSKw#5GB?KKIUoi{iJaG`^HTabe9f|cuTVS4Kn;|`3n<6S%f0aDUS4I_(ccs>5H}6RC zS1%&?E)710<`L3!-_N~D)scBmOI5xrp~4et?<3lukI}_I>zc(1zS=p#S}QfOaR5PA zw(H;s^l{ROp;YCEp7o{Rj%CcfO05xSUBh%G+>$~t>LAtIe(u;d=o%YMW`<*L9kDD@ zauKhcfQ>Iu6$%H;cD%<8v>S`5*k%DDGRoiqosxPtp^W&iH|oLxEp`>c2>)-9qIXW9 z>GBkBA3A-t`{8G=QIkK>)^iujiCLJlTVJ%>IYZH!VRd#TG^n97@Qs1v%pgwp&xc#h zk7o-tUGKZ#JzJc}XIV(p@c}D+?L~?yd?%w0y~0rgFh`aasr8ZQ_QYkI|9H z&ep}CzQ!loiX(DJZcb2|nk6?wj9v$C)h0811P!N72#ZsI=#Wz14JUwF}d!O{S9H2;4#q4)d zv1|{Y&hhWn6DiSeuFH(1d}bqiw$==9(P;79$l)a>euOYneiVo19Y1e$H)fna*(rd* zatv6W)WhU>X2b8i4EMZckZn~|J6twxg)F+o-rwuT<0bb_zy!Itgv1CXAnv2l;G1&# zEBia{QtcAUq_Ga^+8XCF0c4sp;n%8tGX( z7aRt%RZ8FA;@u)}g#77L>Y5Uw_Q@$SUQ)jzch%vx^A<~Bb2Y2*R1j*ZNH8pqWj@lO z0V$1uSli7qWZ@vtLtEP%VZWw(WDuvqE>iJYIU0l4KPE$yd}QdW+gjS^3~#7Tt*FWJ zi>!H^!c~hfs(d3sh+CHLULOZg;Vp@llzMHjs(OB1vi zT;O0_ymppU#*yOaO+hq@yXr(h%F6%*?aXJQHam!pggBTG<#c(hq2(S6 zq2j1BtZu)#oPAls*tgHw1BJJgC)Y~TrJwnLXI#IBTi&+sk2!;AzJ4WdY9#+ue3Fyf zJeFX%SS2wQW9q1EX1Ho>L~~DY+p}U3MnWEhm(M1NU0ynFeD>$BuG^KvsPOistsGE+Y(1=R-wGDwwk@KBamza34F3BxYkQ zZt^tWHb=EsGof0%FSqJm48fPiPNuP%G{{nmmkO-Cj~5-oJ>5CXl8|n!i=&g$5Ltl> zN#2}SqW2b*%bISC*=5i>`!SVflZoEyY_)uzbcset{!NrRJYnB9>7_OqAQH(?6MUaN z6oh_I5OjM7YPODV;^PVv(PUQ$Y(E0y^DW3W8|TPqe)4Di{(_6wGn?QQ>U^|d3Pa4f zf<~TO^(XMp7mV|$54@OrnGaR?p(tmQr1W_gHba>mcdYQW`hy1k2f4-McZxCqs7AL2tuG!Wfsg_9;kjMgef3qvq z7rqpE*CpD9YvQ-H6PTt6Hbj*e6O$)Lmd%j>sMxwT#aT#c3*o3lG;|9@V~ZL#`H*H5 zHSznA0=AlD4VC~%LRPLQ$H*SOgWCq zuGkd&F@^qmH*4+ye?F2cCh%ajH$5|9QZicusg*R(=y~MkRA`~UnViYZ%M+!Q<@r+@ z5i*VR$Ne(iP7uZQLZ;qE(IMUCk?-`zo|GZHOma9anp(fVEsc?R2@Y!TazKK|aY9jh9A7iZ1N$iBs4^iKDDNnha z?n2KeAjl2wBLM+HBAvFBgToE{6Ep&DaATwML+9$sipzQX9VV{_J4iXTmEpYBOi{-S z8cHlCqm8YtkKf}+CGQ`PD@j(knI&*JZ1I(sGbB#F2)js#Ja#buDi}0lva$LYh_zZ$ z`oW6F^)7F1p#l#ue~7NpB5g1?60yKl4b6}dSUqvio|g&J*Kb$gpu||DLQ0b+#x^Y{ z>|iPR)KSUEwMi|^5|n@M$L=qbG+BSUe?!`X1&TU^Oh z{5mBk=O}-;rTJ)UWAO%dJs4!WHN7S%e7l!nsr6aA#JF3&e)2;oVEWnkvDU@HJwd9% z{bKKt@-yyYm{BCjj!Ji(x`>`EN-j~GRr2g;^RZwD-Y#I1!qa5+)z!$zS??y>rY*j$ zMhPik7?0QZdib)A<+TqQ+%z>I=w~%He3{up{xur%M15h*b&lCu zyRGE&%Zuq$J`Cv1y7(kMG0P)zwdN@v;S+e~A|rnxN6&Y4@P)J-x|X zAs06{Mw^ZAkGIEzAkr-+n-y-W^EvG~o7e0qzvOy{Cus3}4$X~DN*b)v?FD&ul^&@7 z`-`fA^nQ)QVbI1)f3C7zW(9GntzlU}W|%L%IeT5dz|q_Yw($S3UG!%cr8M0(qT4mw z&&gA{;8xymXA9tJ;tSuk zRBsNFkhbeCR|>%UL`6wIsIefMy;3UFbRLIElc?8WLq^P@7g0KzJ{%lBS9MmMV8W$5 zLX0bieXYp>N_S+&FncnRzF`usSjC`IryOhpWLX$P`CjC_V{Z*U!tk{sA#FQXSQp+50-` zESf1iUJd95EM~tvtjMepAbp1qB9t=ji^;Yv3LOv(9RL37++I+zb@11Q^YPg5rS;RK zlMA+2?*M~iI$dTe6|S^sVZJVnMfH_EKldP&$W+Ti#v?N&aSaiU>(drODUH|-Oq;QOcZ8+uM3ke(F4GQ7V0#$L=bsbg>OO)GxW%@?-t@>LSiZ4JkikVY+&9 z0*DUq=lrojq{t;DQlnunYM)y>sIWEH*aOm8o9f1bBl|LPQ>{6EJ)Ztt4EGBqJEFDa zhBV9daDAEeGl#=hcE177p%n%Og_>6hj~-EpP7iVEbFl?3#RAv!p#xg2`HYctp_Q5L zI_sl|Fh3$Kul5JxO~#|F5;k-6V|2@Jou{3u+^1-nM{6+%ngqsw?kU2<9iXm$&J^f# zvnBnGgbf`?$%LcLRg#L&Z(zf0+mKn zc>BWeuMMgEvNe$k^&||sthm}hWV}obsR)?kd)s_Ig!l%Ro#t7hlWK-h%_r~Cv-3ZJ z4B#oTYS_Q8!w7y3>y1jaG4V#v{zptqrnysw3YXk)E`+jjd$8 zMtO^156Nj>%zaGMFMl;d7@7^F_twO1fe%Z*GC-Nx4s+$DPS-6{Sc*y+X*s=iDJ)D> zlbxKIT*jZ z&<@X;hCZCZc_t}irO_?kcN*w?r4ga_&Rs(#0|~CGGkJgRRTy#57v_jFBi{^gI-M`} zX7ZShx{ZRnTt^s3UFG$9DK5F-q8qse~Vr&vZ6OQQ|5 zSzp`@8S=DV=*TKQP$r>}PF3&bN${+Nf0IwDb-g{l&*bSM=|A0k7J7FJ3WmLvaTM~y zG3IN{03C<#3Xcv?cQ@e45PsBmCsb%{29%1vAJA&H}d{%q7dh{;;%p7sR;awKP{Ek!-xfYockCLn77 zUO)4JLkY`hYVrEi_5uE(+@wAs)3_O%1&h%7UuYR8W{U&uVAde4I+LBHs z1SLK+pjKZ#5pbMdL)e27QO4+w2T<{b_R!l{wrufBihdPCeb%~w&qKuP7lgA@?&u#0 zLxp;+3#sI6$6lIlIeuuc4pcGM! zM}Xd9n*eU(_c5xs!DDI39fv3q;_WF2IDU0%cez<|>*FgPFBGT#S>9kn~)8I#SobuKgCfNCifXCx~ zTR-Op>$hnf4&AAH11)mcAP8_)?o5}T+o~Q+teWedADB;;Oje*7r_lL@1s1v5?(BZo{&W_Y6i@%EVht)oD>9(VcIS-gnqK?^o-Dhi%f^Rsv(#RE=< z1a*7SMosq>WFWg-!WXq5j$gZ&hplw_(}cboWdZFWDKBo|Nk@Xns%0nJ=3|@Bki|#x z@Hn^JW&6K(#Ae6`xVHis$l{tfD(T(MRG*)KxvJf(^Ef^k=hq%tF+-2l9VeL!SZ^2e z3-Ng$Dfi*s5I6!+@El%@$47ZHeo@uu{Z7E>dSrs?HRbNfGtslJ?|2RgX~LE(-$@_& zWj1>`r^3;0Kp6(-ezi%)b20frg*`KVl;hln@Q7z)k>Ky4DC1({JJ$Y**)5XMg^3~1pO-;3(VhEA9W2+(Rzm?YbKKz7w5R#r?5aRFWR0oULHCLCE(HhD?8cEbO3szM6gPY?N zlV)9eM0(p-=2fsgVN%Us?B85~+A^t|=tGOO8~lzZV|v#ita8*^`7GZh%0L`avsxqF zpX`C4_a(6T)p$3Okb53hf5FC{Gc(WGV8SaiPt{1hpPW(3Hsp@={ltSLdBP5P0tsch z)KM9Mo(loONW|W)?;somqG(mKa?YL`sHSaI?nm*C-JL*iSX2xSzij_~o)^F*I`k|7 zj?Gr}qdi*GD3VArbyg@$?1vU_>D=DZWupGcTAXx66@97s2gQChbO^685WKW_AkzBU zo6>H<4e#)_)o=Plp=ni92f1mNVUlZ>)bUbbJkJ0;-7VG>p6JZs*RtYWSkTvgJ^Vwq zSzBV^d^qIu8$UWrq@z?weN9Hk$oo+X)WiN{tJvj+F3_W!-lPAC`faL0E;=i!l$?B* z=pImIKF_h@*K3jwS?6e?v7Q+le@gs3_m~eUdN7UVnT8Pp2oGT%5&_Kd0YCeyjO~F0wqI@~|gH$m`*Ej<4Mt#sc_K$>-Y;NChdX ze!u>^e)RRm{4>6QD)+UinF%v$y~VHjT{MZTmQ2diQ;wT$!L{^EkxEyBscC^9rpW%C ztJGe}j8O}duRAzK*Jr-dU(Vh!o#=N=M-rj8qz%7r1|GKWv`38hrH(9ti^JBXUqnKb zc^myy>k$L00JdEVtE*AXs(^@KDLq-bdh|}H;=D)fPng9Z}OQxoGji#q><_DQDvu6q)wlRxC@CqwNtyM^y{(M*}!_k&lD6t zG-kFv$y%SxMeZLvz|pRfF&^&~!Lfq~vY7YrN8sl1S!|ad)_!gPvfuUv@^r;xZ;1ReN7ud<3K7X;<8F#y!!tg+er=kZ(=)|v&&B7=sv(cMqZa{Hq92G z?gcbe6DDV*V$0i9WeXJZ?IE8L<`3hJ9Pc2j&(9`kLD!?WlJwE1Xg?ITj|aMoF@8$0 z`wOU;!i|mH8X857f7e?5Noa2NK?L9RP5l+kAzs?OvC#9)`&xerpkW)8U;hUFwjBPx zLh+HsOiYU1ULG0HK<7>pC=lf}N5=kQqZ^idk)Rd?!mO`m#m5VR{DLTpnfaf=RlN6( z$HBtyw7RO#-JZ8wa{C7dQLwN=X3ZeKE6%26mYJC<_m%-b39@eOnN?L)>utY5L7ETO zK0ZEAF3_M0_N{_KRX$j)GEvdfUvxVNJ+*?8ulrt%c6WxQRb3X7sz`YiC^-k_ta)|h z^yCNn93KY*u>VfG23SPacN1;r-#*%maVi{7d=ifjgnMGV_rk!PX~}bjrhu1IX^i)4 z@CgS%;lQx)2lEXC6tlgFOr;^V;DUbO@3Nq{umkolD{he1OgsPr^m|*@bn9IhewjvF zbL(n8e_bQ^SESL9El4Gjzvc)(R}?F=(ofCDWnXeJfDdHArPR=)R77oC0{*2~(+Yq{ z110P%;}hlVolB9JD~aH;h#iXE?jpkf_QbF+=oyIvT)m!|#A_!FW;RTFQ)p7{-xb43 z&Ax<~oJBzWPxyqB@jsSaPucvWi0{}?tb=e<$_kb zS+2W#Icd3Ze^tMbc?%h~W3g(^5~Xu%E+(qciTWidHR6Z&r=Sbl zy1Mo#!+*l*I!pM~EZ$S=#Od1ms`Ur0mdJAU2zug$HTc2cTe*eyqjh}!DtXm5wQG?> z4^eT*c!XSdoN-Umi_tGI36AY#Mx^MZ9zwzJ)F&sF;h}Ndx!uRM!_mq)hCH6k5Y^_K z28X&sC?lY&h}9t#uI}h`SM+mc9G!c*>k%esHmiR6)b-U*iiWI*% zQc?MYP`}KFpJDNP0zhx6oSTbH7)%H%ABfaNX8OLJ=p(55<}F_>35&RS--92sR_Kn$BlRiClS`yXBpvLlDop*lT({nM z<2CPHv=(916+p_iy$keI+Fu0p;hlYb;`?_Fz;cD-oT#Us@v+ zb&x2%Mi&>i@1q*M;Q{^5JQ?K_G`x<)WQ@TT5$9CKR3HVBX^Ws(YX6tb9G_jxvd&Zi zyZUdV+89Ary@Z9_i~h0eG_~)`+y9;ittE17)`rP+invsvq^I?~g9P9QL<5&|XM>JgwN3eNAC^f}9c8je%CdndZrj?fFxJ3DT=$iVawo@8% z;)P?Vo|$bhuSWsZ!}M|EnZxx-Oy|43IVcO$Tl%reZT$M`G61~X?mxRb7%Jqa=#6n( zBS|i8SFu;q7SC(nOy{AQ7oJI_+nvJ^;E*5AQR=I5d}i0PzQedB77xQ71rQ@6ETM3M zT6X2Q5z-s^>JXD-79W_PZ(%fUOhpu4Y7ndviTcRW^VAfG;p?-tBm_GL1A|lOCU{5l zn4gpHu5{1Wss8J~$F|63Uipm2S(mG=#4Q7f*>K*6%@`S>%@?Vx3MFg7U95bJOr@D3BwrI~7e{wyxaAe?S%tMru(>BWjB$B&;}+x&IdZSU=zaFU>1VDMM~UPmki;C<&Z z_4WoetunN)@QA+G$rf{Z#-p;(fSkOw7$ft2TX*E%>u2xPB}?kC2V}4cv|!~{{`?Pj?b4twx7MD&<(dO zXK=wE!4dqUOhag7VsnWWSJLNusPa}!Q~rr&JTJY_A$t8K(Yl~Zp8Xov9%6~)u$?wu zmyvNO>=7iC0F6)n%~Axp|28vQ2n|v{J(4(%uTron2^#D=<})y9CPyUruJTb{jUy>> zfUeM@!@V5)8uqH1eV(XEzK20&rFb`>3eQybXoyl={hoE3wp& z&WNK>z_rG+QBI0sA~`_TZ!tI~hF@I(J0@u{5Y^TE>7hP)zb)8nW>G~-1Q*T9z zdMppdxmC!n>XxV&i`bJZh2*m2AW7P&t7#T>sd@9P{JSpWWh<(hP|(IFaw)5(MYQNP zJuEB^Bh)0d89O>stJlx0BuA<|p5$~MnZNoM(J&y%C4`e;EA)QXA9S4#|HE*y67h{_ z0>Fxfiw|rmvl1;-njSG2?9Fo@w_ypR{r);}X*p2$t*2c~J$c3L>P)1)TAeGi za++piBC}c^T9#{9vtQv8y~hAo&IzV)G_rx_(b=+GUDIcViOGsGqVCq znqf|OYyJPV$_egl1vxVk5)oB{ZlX=&(Rv4ZCQ(EwYno~5s5d+gv4YKgIFX}5}>j`3W<&o@WsHnS-K~VD@Va;-z z{X_cai28>(i@|2Jzy%Ih8LldDfle-;lH8Gha?4(s)7)Jd`sd!nMq2{|+yAhs-Sxgu#IQD1Om$Y*J ziQEbfT5FfaEk&!H^q(~ANlqB5KDxaqI||)f5h{1WXEr&LekrA0NT$8I&U8RXrxAv% zqXiiX+!Pe1;qA3qM4m17PKF6jxJ;1eb2##7RL!SybdrIz$Pw)GS7Z~7P*zSxSJyNP zv5HC`;1f#Oh_XfDxzoS$9e-(c%GwAO>MjwsS7W`*sfnX8+q8{sJm2=c&7AjXf*jGs zdpt3#bMJfGW6QWD7KiGi*D>c2meLyDj|f|QKL647bn@hnmoB9ajnbMZrGGhT)1k&4 z_n}pTmW#P)shQ<-)af8%s)*}$FM)~Xe55#rW^j3-O!5_yCZ|_d$)9=5w-@hXcOzCh zc!D8+E1u-}Sr|k_k@6?R*p#v@`3GehuVyHRRu%|8f=~famJ~71p&0#(0NyV>C+}Bs zyn&OV!)V)4OoHGf3LO2H?-sT5^e42#%w#%Xbi5o9&p(({ZYv0+IG{Q9z61=GG&{8R zJ4u`7zjG4&o4P$M#AK@+OCqCMp{_-lD4p)_q2;yRljBcSRmxb&n2WJ68Vh4AFT2?K zqJ|d_59F?^%g&_BHug|0rFX-R{N2$KwUmlAia2OI zhP7tvzg2wX{OrFNPCYJdk%ke;<)uz0Z}#E-9+0t8k9>_t&-w%NSs?tPG6! zUn;11?`gLGSU`QZEdunFlpo$QuKEHQFUD-2j{{W9k_s^OQ!|P6nF2+WD2{hb^pa>} z2-h(}E)=S8)5oiv6@%%V0RQu|q)77*)xBO52 z5OMZmDu_2`9@1fXJd_YXn`U5l{0kS68!P^EKasj~)( zbl1B%QtslCFmYvV_1NRSJRpy2DGqmfs73UnCdA7qsD$rkuD3PSzk}3z@K}Qbbq-V0 z;smX77#AKD;?FnhvpbDAW9BjAyT&SFp$uE$VYMHdLk^tHVImNk(FuQ-8^6BMBEKAQ zIXo*~2T&ODzO8PHzS;Vjmhae8dZNWaNgA}eBRY8KUvx%LT&WCAY%!GK^@(aE za#nPJvH@yDoe_{)?R)C}bldgRZO$GbVW`27?r~-r;6I*$$;0*Qqz3D=m-$~z(Z6Z3 z9g%gf_GGm>6|pdvx%T*o`i6bu!_l%mJLSS3s*UswhuXs-H7z5kKBGbi(%puT=sg~O_=%|F$i z*V9^G!zV)W;v1v`Z5-thEvG`9%ZQMkvS(uj{-sFb(Bu02_nNQtz2=)lI@>*m{-@^q z#@zR$Y^_JNKQ(pVA3x?CrPw<;nece3rC;%0^JPk|m(I5%os^>R7;vVswFjNQVo7M( zL6x}$%Tl_Pxg1o{uw^+gf_jd6d#z!oL+!qYt$4d*vGZ-wnRB*K^V z6wWVC94(R4`688+jW}0BfZcm=Pqr$LWNSU|?(ieX57ub@%w%Z|*u3uZPSi41>w%*&^4R)aHw&K#!cZ=q&^K;(F>grhM=dX*7Y7;Y0)TXNY9QJEb zMq@|zrf;TKqu977U-=rpj1l{5G;$zc@piIxkyV`xD3b)k6iZ=u>LKH+#xzs&6J?=)Lfb#ZD7(K#RV zD8~8(G&SLBBXi8nEx87MH1b3VGruEkiZ`$~$x67`Y%eiP{_`I($_So%vn5-jRb2F& z>Z0xk%TX6++M*eH4NcUpfIkRG3mvZ%c}1>F+$$Nrc@zfoIDdSyTdCwz~lW+=+7Wvj%{O+Svh2GSU9D ziUqs=HtC?)LyAPvk-}KMD->aejL>R1_*7?XksX_=FigM{RuUG6DKih>*x*1O?XOee zX}#hED#&b}>TpD@^w9@B8rro8m^1cBMeC?Sb4PfYfI;5-ct=3T$OxWyUxBQ8CLTv1 z+5Tyt!z3(=W%1pVMh729dUf36N7w z)%WjRS+ws8CfiCw1A`AX4_CWsKuA#He9#d1d#?<%9CCd{tN!r}0y7opM{Vcj=~BV_F1tU~*g89pr~ZNCLdm*?6+X*j+rmK3ghu9MqKCeh zsQdIFt;nW{ag=&HYg^k5Ch7Nf`lR0ok=zYU8%qxXIGA$1F~Jl;)gR`dg$77x2lO1E$|BMK7z)3B zxfm*5_h102?y#)F@usM@T=0MAB%JN3jU(1k{!=>8{LI3Y1ydLwJlE-DjYrar)Zvi= z0YwUt8N=6jxi%1LsjT##`h+RQvrw3_v;1hxLEcFkzN0P#< z01ch(g5-=r2k<}cW>PoE2rw!sG_K&-z`ro58 z3HEJh;|nT`^)j-zJcGj22?$!>}6GXLz{LL!zKaX+OQ!s<4b0xXW=@M>5 zmV?Yhtr?d8(82XOt4rf z6BKMiWEA^MG}6d7Je)~nLO3dZ6SxT*x0XS9}o< zVge79#rNzw{2k}>!z}D{gur!4(Y>7s*2*v+B*w4h*@fWWp% z6Rg5|y4jucUKrsye|m$3f`WQ=;sifTVV-oPq|kn2sSKNq42+Bln*TA7@&zMe{|<}3 z?*H$PzA|0@3?F%c167ard)LLhH#k?fII2G@?)RSF7wWwu5PMHe>i0@#cus%QEfvue(Rc7-Aj`8fP!{aO zakzR9w}E>@Pbwa@e?`B3g!Wk?G$i_PX&`l?*WmVSI`tqMPbgx{S0C{qy27!I$T$cO6{Izu|V&akd`mZ6-fqm}bYf6uU9W_CDyJ5|I?(~Y%NCV;5 z&JF$TY%l6-f&#->wM0hEx#n(mY+7}oWA*mmyb= zq!G9wJxul9vNnEHVCS^{*B?1Oj~1vRY_vKpbM>wybZ20&Whk_HNP#VN?bX<}6y=U5 zUrIQJY~=pV8WHgwwyDo zU0E@7vCk`2weG-U%M)`$g!J$IdAczI=3WurT8H6b=!Z%7u6WT-6T&Nu#}6{hJ{Qfq zb=1SJKcAHqcjna8IQR^6-C~2>jleon6^8pWOuTQPE${4$%)sZ@R;LOte!Vx`=c&5N z+0FKoUoO_-IckX;*0>JdnB~~uGHJorp9*Bj=UZI+ATBie#l7iLP4<^TVf&Nc!&=-a zIxKjBub+{(cg@TZavkUmU}3FRueOI`j}E=gc%mKYUe1Zz*A<99gr7C;gPaC%~u zG%8zEzr>r2`Q{!y&WePH%oa&AfXiovcl!ngQl#{Gek)8&bL5e-7fxVdTM;4C!)3-i z+PSobunexWzp|b7_I3kfHS9TL+Vr-vb-FSJ6Nff13zbm?f!s*kQO4db8YNVgYDTew%Yw{&9<1sj%=UGGkz5be3^*v|SA&orm=jd9MNx+WGcTuWv+p|3)LVE=?U z9N3QRxA2N+@r56H(-YH)ke2X}l%j+4Vw9yzf1{9}Mv2McDermXX_~=FMi#y?5Xt zXz{~Wd(9WkR+?Mt!V8EE@FcN(SHwK?{&$jQ%?6bQ+!a16;m$6j7KW&Fli&%}(C-CQ zR{KxSX~I~!lwZIxFEZ`2zE)Xa=P$;bD(~SY7Z_->j7{m9uZ5lKfTqp4#IN(2FFVzb z?6gGE>}<|n)0zu42V@WQiHV3S3qxbr;zR+2IesAPSw}M0JG+^?Gt>FqVN?wN{o1BM z$3wGhuzNbJbtRUYwrk1%=hvZ_8z=Xcb|>bfPhzjP4aPq$Bha@~FnG~o!reX~oR=M9 zS{k3inIPZYgzT8+790qbioyJ8{jR4ei@GGu$utS>~LQ!mEPOV z(J|HT=5sCnLf)hUc^^YgS!dr-!&Ed=#;w=0lMy~dWy#~!AP$#zoLpzGUcJRET8M{@ z>C4Hc!vNIrAYBLQYRWX8&f)zCGh4MshRHMEZt`S;w6N&8YS-&e)?%AkjV5nc%h%c9 zog&i1H$`d_h#y?`aF5E7F?sgx4I#mmyWI*_T8S%sxW8F*SF65qP&78m2nZ%*JCUcQ zDTwzBR2R*vXD-JnzUhoLSB>GUzEC!V#2D}G&D^WkZF9diyzm&j=?;XPWjvgd6D9C} z=^JR7;nO&NBtv5+fQv-#`HLJg?3Fn<8H#pw&2`$=HTL41@$0n|>DvUxt{F<{!SwLi zFk1%!Dm$V(Q$m}pyblmZlYK5=569AEym#v_VuPx+$?CCuSZ6)h>-jY`QPs~2&H2b| zMUKR0k`T<_>|tyrKu+l=!=c|IAQbebOJjDzxjsS1Jo@o8)}JJonHN_a+gPwb=aZ2p zPrEl*`&n0ATjI~*ugVq1WN`v|g;QnBl8od2zVHV(IZu(#>vJC&8}w|q9HJ>nPEtTq zw4qaY^a{LSq+U~j;s2(mDskKbcSY_V6Mpp8Fqxi-?em!I4KHq*9JxR05QC$|iw-Y~ z&NR69MEG7VtMz4MxaA94kD;I<2DnXa-mI2d>QQ*!ObU?7OSu}753cLD-cm+8I@X!5 z`Xdt%8iSsa|LpDMQ!?W`_9}1^fvY#tUSLA1gs#)|0?QuSlzStb5eGtnril%J$F>ciAE!me0 zCZ2jJb60Vh(;0H5KhGqn+3@P}32~PQ$wnpDUZIru{wc*sGMi}<`(J2U%Kn|z9^{0P z&wc!a(_7Dwy?41iR$4btxl;Bm8B6AqJ=8dWvkM-!gl}w%b>7|gM7{%68E%f&#M=%v zbxPvJ+V2IX`K%G`L5_uRvAYup)^8@oTP$scSq|`ELIn}xk(eMBJ33)v2-zL+M;hNC z+pj@2jUOGNMPA{pWH9<}UejA2xBf3hRw-X+b>s^H-?ku~ix2uYy33Lg-@Uu|N8YkI zhEt(GHmn&TW-NBfhD8SKP5s;$uM%>?&HqNqtQ7C#@QhF&#Tr^v9F=P*p8lm(kZM z3l=ka-NM)A=m#@pLnH2jX&wx~6N-wT!LuB#Z2P5pF3ksVrKM!&^-_ob4>k0cJ%VF5 zfA~e5J@SmSZe+AldpUFZxr_0vj*fAn*ZX8YFe=Wg%t&CNS@X;g$in#4wJN71hR{9 z`E+q>vnjs5!q9I|voJg-`rpmCJB%ln?(aqf{NjBQfyWgAYplW!(Cus3kyT75Ax$uq}o@e+0++6Bot7T{Rn)m+26|IiTM5jT3CE{o&ZbA z@-RCe1A24#%aq-+kUDe+WFX*54Lo*q9wRp{;z@**`B{$qM&3C|V8|dtt&;44DZq65 z`Yg}pad+)<3{Xp<+uO)@?JEGz<2ZB%L0VnlUSDnZJrvG|C%pn*RtSQ;Vn;tFE~uzw zs*W^**b{s+!)ML57z;}yyJZUxiV{W}ZNhj7vM$@d?bID9^F?R3Sq?Pvv^t}_!lRFS znEczF-UR&teK`uPYyzdH^vp`yWZAz)GKX=$IBqh(x~Nf<8z8aL8L;s&hugq~-*UKq zyidK`TVPMUc}7^%XZ@jDA78j8#B4Y#vl97GN;^JPIbBFiWL!bbB=(x-TE3w4Rmb2P=GjF&Vfui28PT!FW8}SK`#~A;RxzG}!XwUQL7i+eE z+u-Xp8e2;})giO|H=(SOs6c4P5!ppz?dTGc@!tWNW|zbs+Q9M17M^d3bbFH_M zEX#_zLkH&Q4;yLfA0YX`vt?xdmXK2(!$lY`A4z3CVZELU6H? zuhb!YGr}tk?TB4O9^K*ykNma)S6_XNE_625VjqX6=Ah?L0LTOVcqQ0^~D0-S|4u@cSZ)%~eBxI?mT6lQU3^%6J^Gk~} zsVNG9Ai!qbxJwov2T9Z|Jz*q+12>dA!&BEYDpFHV{~TCTHw$yQd$anx{oYrj+Z`6x z>+G~#XQBZhUzm#g;Qeriy7u&!i_K=#j!3Fnu4`TC`sYv_&^a#b&V6mHiHr;GK-CFSJH zZz^-R2aFW`NH|us^hK?%gpYwn+qv;O2|BmGfu?E5dFdphfuxkDJW0SGAs44!*Ap|j zotZn%TpAxVI5@9%ft{X9rmd1L!y$6NPRl5bEH#nc`>p&$dx(1Kg@U+D{|X?<^FN}- zU!^h?bbs6@l#*t1C77Al7E2%b@q6ho8n3ClY;H0-YVP0Fi56R^vMtebVe@7Iukm(>{Bj>>6iOZTg{B%B!~Z9$XJ5*H~Kp_;9)#&6qG&z`B6uB*(pgj(&q0W zIa?NC#)%{n?Ccz4Sbj4JfK5zb=$Y3)wec;S+;aI zcR1zldOyJENoft$e&AyEeo?-+y5HFv+#grlt*UQ&y$wFlO~yo5`#Em|*VfYtXk|3T zl~pL9#Ac=I*ReHUV@PcNnep3iIS2cBTtg`&5$S6fGPu&W9lEAVz8e$c14`NM%>keN zTqri|y02gZ|G`ZXHX%quaBy=Efu*hrL zm~z!L34?u_jy=cG`g8e}0wGW8OXhj0@79&a+gC(oXIh^Zm56eh$HTqnw0k?Mr_LSaSOMZk+de{5hgyd|T_H2rYN{UwG8ngWTV|=>l1L)C3h(7QgEFN8}%VZpi#e z+;$$-+8O4$p*0vm&Tu_5%+2JDiBY2xMTa8}m5Vkj;pkT8_UvqtK}z7y8obtb6U(F_ zZz?eKSm;w1Bu=CyXFRy+{u-0vmcKw&?=Zo^V<}b?$NLq%;?SK?M->?IWTDES^?Nt6 zypSaQeUF+RX<0imiYwnz7T);Owi|+bg9DD~HBt5EX2?kEc?H}Bi>xIf=TlQz)2mL1 zGa0x?i?)pPsV4(S=z64jP7l++!~f)}UgJ*~vU`FeYqmE;RZbB!{6?y0&~Qm}uKH9y zXuAPH9oX5Uq!lz8w*?J#!vV=`F_P|~YL1G$CU&!#PPo{h;CUZ`yRGYIB14xQ*fodk zpVcijVLpJ@0M0Kqeb2I&$v>2hnTl&2IW83pek#NzM%1TM-B|S`|8R4o)RLwW%~`@x ziwlMhq$4->vNu6?7k1*<-WA02;*I6!!aHccNn_rAUb`;ozB!T$j0$%j;3CR&@7}*N ztu9sr8_c;Z-2dXeFi`!b-4}pKbQ6l8q$uE~gKGS0fbnN2#7R_LPg!cUhv)jq!Y{gR zakIZ0MSb#uKBKRQoxe9?(mQCugYq7Ql%EZQ)*7q(X}yReWqpjulH`;|LpF=B0>`!S z&jo)^0|0R^5!OVB!^6lJg5J4nT+Ho7%h{2T|^ z{DFTf!2HI|;LXX$eoW+Pxx7K)YR1P z&c|~#drbp%jaNgNKI40wE**cN*S>9RC(UU~82UIK7dvgT? zB_udpa(NQW)6PQDXJA@{L9VS+Lk6W*{H06zS>325*|G*EjEaY9Ul9b2c?Y^>Hja$WhM z_v8kRAMBq|W&pOnxVUTv4OuM7)q~w69a!@2aj1YOzE0Kh`{bK7;bbz?SVINZL2Opr zt4r@mw3ptBmtoF-Q>SAv01eMJ>um-fp<2@Koi$2^xJc%5F;qEZ+$L@M+FcDEHK&up z>-|lji^SPk6h2a-S6&K^H#2-Xw~G3EPFAFUu^w9pc`(yCtRX^z3ddFgXJkoL)b7FT zWA*ls`tXeVr5&KuaIBF+Z>I0s9(^7tcGH=md(g^l>X0(-{}1BEA%*X0r3426Y<~)F zL*)FZVaxXo;KRyM;KAiw1Sb#XMaVxjg-oy!lNCNPwixlJ6laccCm4L%$gO5; z7+gFi;jc+pNGwmNz5Bm)@#dK}KjuSzQ(azWhJY68}v3Wd2nh#xGz54A~d zkHEHV7Zzr0aLhGYj~t9UdokSZ!@CW7F2Jl)UL;Hx?j72oT5~#YQWOcz84QRv7G*%H z&79`yEH)oHu|{|=aeVsP1qmLes;Uad1@>z@L8yT~m8jdBPlx5AAxz)^b%TXRN%pUa zyy98sqCk^bg*K$3WrcJxC!X|R<8*Zs7#cK+goQu_M#^3>eDOG)6V)G>IK6|*Ma}&;Q&w_G zK>wLDO4$RuTBh14MpX_84sS|2I^ZF=f&1yN#;Gnxs6Bw*;Gp+&%05}sJ)?uk#(?+z zri4puqQ0BHJ~?>zKNyl@yS1~cHi$`5y|TJ$Ze=x4kIXQB6RZ8cymGGK*@BfudJgWV zXDU#rqO~qv;aTfycIbm44Yg9Y&ESFCB93Ia%jgO&-=rGE7wf)qVF8(uXuk(-W(V<+ z1zOKrk}VAcr_P|fPGsM<(!O4Dg_N>2tI?ah*4P-V9MCUx-w+iJw?>jF>4`{=37Gu3 zPu#$@pK)kk2V)Eb$L`IvCklRbve6aE z(S}hFE{EZ{OyvQE%lgOkb^m=C5y!S^Z5t;wW)C6oAyq>6W&PK97hk{q{n0R3Yom}_ zlPAbhU1dhDW`tjV|6w|cklkN{ok9Nl{`&i@VTkD=iVXj+$OOj$TK0xM z1Vy`4#4_5-@3)_;ic$xatwf(6*ka>9>nYN%;aeu=0p6!Wv*Qv{la$}pg;nrI{I}?y z_sOSf)+NfXz=~^hTd3h%E;rg#mgJ$FE6aF`QXP3AAw2u&(SFZT+38wqAXt*QECLI5 zXrF|KJMni83zqn)*a^gHb5rgN?35Zx!PY9Zrgd~g4}Z{FYA8x@&FKnl-<03J4qjyHI1=shJ%IOk^TNDX=Z_KT zS#=-`_qECAH52swFnD71htHlA8~av(DcgT_V?UZ(sucM(sP|d-&+zd2W})+AmiFU` zSTQZ_ZV}CsLI2o{8lSMSuB=aafC7@JF{Idr6V>tolK4lOe`?T~nmf2wNlHnn*i6pH zv@XU6GZmG8E?;ox&AFM^%&0X%GJpcBn8P@hc7&>e1F_{yO4(s%B(Hd4SPGqqn6qdW z7ORvyqMbhR<#MS2f6%xzfC)u_e2V><`CPp|jk`EYbeBk1zbJh|`d@qFYBMI3*K4}U zaFp*=v0^R1h20OmY(`{H)P3js7-j6p<4f^aXkQaRo)^1SczVWf!Sa_=r#{mt-fjdH zQY&AWOX8f6qCTRKdwRs@@QVmVa~RWV)CZAEr#SsGLT}GxGWrO1u8K9id5=A|Dr?^| zSXj^WXN$Qst2@I}d_e6RWibur(=!uh&BBndTC{6qF5^v-kR=%*Q9@{;nLwHv+JPe{ zpH*9Vf#H{QwwW5A@X;nqjhhuD#HQAf)-wYiPHSShfXa%OAcbdU8~i^*$!n==Cwj$a zeZvozO?Y1_zgSUG?M2>t!GClaK(-{J;V&07jxkCC!93$xQk5ZoKla47Ga057DX9B2 z8FP*ygCC9*3ECsKvNQg{sOfP#P-e7HsWG0(c~iP-I-b@G7CqXTA_0d|5}zGHD;C*; z#>Oy^AcN<5OGY!FcfKoS7%=Ea-SNh*`RH&|vCalxR+x&QXjuSIa0;g`$DT34mvfG- z{hKJq9lmCfMihEyz>KnQHc4cgJT;!x0>jAkExo-sMB`~IQ8^TnCT!9+j>8&KT0IV8%Y{_oV+3f>I7ns98Y4Dj;tS9zy6@p^8xsbTs+yC*>w!_oN?Cp*ki)IhK>GG z7~;Vivc`l=+?VnsixViu%)=xHD;ZXE_}h*&58VGW;5sj9Uu>&^btp`fk zzxm#CtoilqFe|3Z#vqRtq1(9L{=wZTgDcuJ+dTp-Lo>RT-cq-uRu6t+@Dm-@r!yM) zw6A7~W=wZ)cv@eGOEK!d{WQenoh%qDUsliq9vdULdnu|k=4;f#%Nqv?9wGB-farZ+ z2W76S-7trnCa)ecbxYCDY>6cIKT-PH@I^*eTz0VL5Un?1}1`m z))|gOcHCac6{aL{sJt)A6vcn$foesp`T7W!>DjpneCBjp1hMGwV*5H+uxt&manZ}t zXyWuRb1#%J^&p~$2R-m`CKF%-`#3!iQFt!#$}1{a4fH^A=aenuQND;RfobV)`MvJ`I- zi@mpm4qrTax`1<-^|C3Q@WW~h35l;s4iwgb;;6W9Z+1D{5y!_;x;~E#Fi?a zeLI7Z-M6pT*AB&USx?c;+qWilH@~PdL0fhkmR<>xGglN{yYIQ`pOM6N+9~%xcM}Ls znkm7>=59QM^$iWN&mCFauwbLpu3p!7^wx{Dsi_G9`~&fwH%k=@cC;|h)SYxpZ}#Pv z>y5u30|O&qxxm zV3o`U7ZZQJYyjB9=6H9c4-JXE_z)q7LZ?cnsPI?^SzaYQ;&=efl#F#${>icI@xK|@ zhEKB~$<8iycmLYo_Xdw?h%=ODfSq2PcftjJOG*%M?d2A})q>i_l_{K!ViEh-}4IQ!Qbp|BbmBpk+`2v<@F+LIj15Mzy&^>f=& zR`BlFVb+oV+t*zSCU9JctPvKMdrtcwJ1~3F@LW+a< z`lE)(vudKIAgPZ<){h=Am|^U%gymC%eM+zG5}mslnb%s2KBRzbr5g6xB|+N-YQrU| zKNu6)j~6wSmy4Jb|91N>bn1*gAyHdj%;=-cJU4oS^c?3QI-z9P6PK?&wy|8UKXA|8zon*F%p z!VnWgcG?#4e6e0nD>KV;e6#t>0LLtSVedk2mZfi-QMcy4@L>)9%9?ZI0Q3eihz;1g UpQ^ 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�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�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 R)M*3+IVoky8gbLm{|A7@-V*=- literal 0 HcmV?d00001 diff --git a/tutorials/docs/images/Groot/groot_with_nav2_custom_nodes.png b/tutorials/docs/images/Groot/groot_with_nav2_custom_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..52a2e3709fe9278a586d1238b44bdce54bd01a40 GIT binary patch literal 89558 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

&56<{8K^vtCNzq{J==CId~v+%B7HK)Y*e2wqPT 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ð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�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 Date: Mon, 12 Oct 2020 02:48:02 +0200 Subject: [PATCH 12/16] rename file --- tutorials/docs/ci_testing.rst | 401 ---------------------------------- 1 file changed, 401 deletions(-) delete mode 100644 tutorials/docs/ci_testing.rst diff --git a/tutorials/docs/ci_testing.rst b/tutorials/docs/ci_testing.rst deleted file mode 100644 index ea7ff48de..000000000 --- a/tutorials/docs/ci_testing.rst +++ /dev/null @@ -1,401 +0,0 @@ -.. _ci_testing: - -Introduction to Testing -*********************** -**Overview:** - -- `Benefits of Testing`_ -- `Hands on Testing`_ -- `How to Write Your First Test`_ -- `Tips & Tricks for Writing Tests`_ - -Benefits of Testing -=================== - - .. image:: images/CI_Testing/codecov.io_show_covered_code.png - :width: 80% - -Whenever a feature gets added or altered, it is best practice to confirm the intended outcome with tests. -This document features an easy step by step guide how tests should be integrated alongside new PRs. -Adding tests to your new code does not only help you to make sure that corner cases can be reliable tested -over and over, but also to make sure that your code continues to work, when there are new changes made elsewhere, -like the ROS2 infrastructure or other dependencies. - -Tests can help in two scenarios. First, during programming they can be conducted manually, while they are still being tweaked to work in the intended way. -In order to test them manually and include them into your workflow, a few steps are necessary that are all explained in the next chapter. -Second, the tests added during the active programming phase of this new code can also be integrated into automated testing performed by the CI system setup with the nav2 github repository. -This helps others later in the continuous development process of this open source project. - -Also, not only new code should have automated testing through CI. To find nasty bugs and corner cases, it is Nav2's ultimate goal to have a test coverage of nearly 90% ! -This will lead to a more improved, stable, and industry-grade code basis, as new PRs will see if they break things in other sub-systems, that they normally would not think of impacting. -It would be great if you can always check into the automated tests results of CI during your PR. - -The current code-coverage of the whole nav2 project can be tracked on -`codecov.io/gh/ros-planning/navigation2 `_ . - -During your PR process, CI will publish automated testing results directly into your PR as a comment as soon as you mark your PR as ready for review and/or new commits are added. -These results also give you great insights about what code coverage areas you added or even lost! -It is a great visualization to help you understand what code is currently being used and what might be just dead code, as it is not tested and therefore cannot really be told if it works or not. - -So, if you already work inside or with one of our components, please have a look what kind of tests are already there and where is room for you to improve our testing! -For example, the conditions in the code above did pass the test, but if there might be a more complex mechanism in the red part (the part that is not covered by automated testing) it can come to an unpredictive outcome. -Before heading into writing new tests that could easily test those corner cases, let's start with working with existing tests. - -Hands on Testing -================ -0. Get Nav2 Working -------------------- -Before you can test anything, make sure you have the basic examples of the :ref:`getting_started` guides up and running. - -For integrating and running your own tests, you have to build nav2 from source. Using nav2 main with ros2 installed as binaries technically works, -but the automated CI testing, happening on github when you merge, also uses ros2 rolling (= latest/main). -Therefor, it is recommend to test your new code with the nav2 stack based on the main branch and also let the script (getting started guide) install ros2 from source. - -1. Run Existing Tests ---------------------- -Nav2 specific tests can be found in each individual component under a dedicated test folder. -One additional package, ``nav2_system_tests``, `exists `_ for testing components, -sub-systems and full system tests, in addition to unit and integration tests in individual packages. -This package also comes with a ``README.md`` pointing out, that unit tests for sub-functions of components should be provided within each individual component. - -To run existing tests from a certain package like ``nav2_system_tests``, you can use this procedure: - -.. code-block:: bash - - $ cd - $ colcon build --symlink-install # build nav2 workspace including the components that you are interested in - $ colcon test [--event-handlers console_direct+] --packages-select # run all the tests of [with output] - -To run all tests of the complete nav2 stack, you can also use ``colcon`` for convenience: - -.. code-block:: bash - - $ colcon test - -Now you should see a couple of tests run in your command line. After they have finished, -``colcon``outputs with the optional flag ``--event-handlers console_direct+`` an report about the tests. -This looks something like this: - -.. code-block:: bash - - [.. Output of 30 individual tests ..] - 100% tests passed, 0 tests failed out of 30 - - Label Time Summary: - copyright = 10.18 sec*proc (1 test) - cppcheck = 1.46 sec*proc (1 test) - cpplint = 2.72 sec*proc (1 test) - gtest = 49.72 sec*proc (24 tests) - lint_cmake = 1.18 sec*proc (1 test) - linter = 19.24 sec*proc (6 tests) - uncrustify = 1.65 sec*proc (1 test) - xmllint = 2.04 sec*proc (1 test) - - Total Test time (real) = 69.00 sec - - -You can see that in this case 30 individual tests did run without any errors. -Besides the 24 `gtest` tests that represent functional tests, there are also 6 tests of another kind. -Those 6 other tests are `linters`. - -2. What are Linters? --------------------- - -While code might be functional correct and a compiler generously compiles the desired functionality already, -`linters` ensure that the source code follows special coding, design and organizational guidelines. -This not only helps to comply with legal regulations, but also to sustain a standard way of how code is represented. -Especially while reading and understanding unfamiliar code, it helps that there are certain design guidelines enforced. - -But what do they actually do? -Starting with `copyright`, a set of files with certain extensions for python, cpp, and others -in this open source project must be published under certain licenses and include copyright holders. -But also code style guidelines are checked with `linters` like `cpplint` or `flake8` (python). -Such checks might include tests like: strong checks against how comments have to look like, no tailing white-spaces, -not too many following blank lines, not too many characters per line (99 chars), position of brackets, and so on. - -There exists a common stack of linters used by ROS2. This ros2 documentation `here `_ -not only shows how linters are correctly integrated into your package but also points towards the ``ament_lint_common`` documentation. -Here are all linters explained in there full extent and also listed which are added by default through the common package. -Also, it is possible to write and add your own linters for more consistency checks. - -In more complex code stacks like nav2, linters are included into the test process by ``CMakeList.txt`` -and ``package.xml``, like pointed out by the ros2 documentation above. -Therefore, **all** packages of nav2 have to include them by themselves. -A minimal setup for linters looks like this (`source `_): - -``CMakeLists.txt``: - -.. code:: cmake - - # this must happen before the invocation of ament_package() - if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - ament_lint_auto_find_test_dependencies() - endif() - -``package.xml``: - -.. code:: xml - - ament_lint_auto - - - ament_lint_common - -To run some linter - ``ament_{cpplint, cppcheck, uncrustify, flake8, etc}`` you can us ``cpplint`` etc. as keyword for the regex in the next section. - -3. Run Individual Tests ------------------------ -In the event that one specific test out of many tests might have failed, -it makes sense to work on getting this one test to succeed again. -Also while developing individual tests, it might make sense to only run one out of multiple tests. -Referring to the *chapter 4.7* of the `colcon documentation `_, one can also run individual tests through ``colcon``, as it uses ``ctest`` and ``pytest`` under the hood. -This can be done with: - -.. code-block:: bash - - $ colcon test --event-handlers console_direct+ --packages-select --ctest-args -R - -Where ``regex`` represents the name or search-expression for the test(s) you want to run manually. -For example with the ``nav2_system_tests`` package, the value for a valid regex could be ``bt``. -This would include all tests for behavior tree related tests. Also, respectively the keyword ``planner`` -or another full name keyword would run the specific test you want to run. -You can find the name of a certain test by running all tests of the desired package with the option -``$ colcon test --event-handlers console_direct+ <...>`` or look the name up in the corresponding ``CMakeList.txt`` -of the test sub-directory of the package you are currently working with. - -How to Write Your First Test -============================ -After dealing with working and understanding the existing tests on a higher level, it is time to focus on add and writing your own tests. -There are multiple packages your test might fit in. So it is important to plan your next steps. -After you chose the direction you want to head into, you have to decide between an unit-test or a launch-based test. - -1. Plan Your Own Test ------------------------- -**Before writing a new test**, you have to think about what you want to test: - -- Is my feature relevant in combination with other (sub-)components of the nav2 stack? --> Integrate it into launch based ``nav2_system_tests`` -- Is my feature only component specific? --> Write dedicated unit tests or launch based test inside of the individual component - -**What makes a good test?** - -- Code Coverage: Are all my new code lines run at least once with my test? (check with codecov.io automated with each PR on github) -- Corner Cases: Monkey proof input, test the limits (overflow etc) -- Expect things to break: this is good! -> make sure to catch all errors and handle them accordingly -- Combine your components with other test: If feasible create corner scenarios where your code really should improve things -- Quantity over complexity: Better write multiple tests than make them to complicate so others cannot understand why it fails in the future - -**What tools do I have?** - -- look and learn from existing code in the nav2 stack, we have plenty of tests! -- play with different launch parameters: Have a look at overwriting them in the next section - -2. Write Your First Test ------------------------- - -Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. -To add a new test besides the linters mentioned in the chapter before, we have to add them in the ``BUILD_TESTING`` condition. - -This can be achieved by two methods to include multiple sub-folders with ``CMakeList.txt`` inside: - -.. code:: cmake - - # this must happen before the invocation of ament_package() - if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - ament_lint_auto_find_test_dependencies() - # add gtest and pytest - find_package(ament_cmake_gtest REQUIRED) - find_package(ament_cmake_pytest REQUIRED) - - # add your subdirectories directly with dedicated CMakeList.txt with pytests or gtests inside - add_subdirectory(src/planning) - add_subdirectory(src/localization) - add_subdirectory(src/system) - add_subdirectory(src/system_failure) - # ... - - # or - add_subdirectory(folder) - # this one CMakeList.txt inside of this folder will then include the rest of the folders with CMakeList.txt - - endif() - - -a) Launch-file based Test - pytest -"""""""""""""""""""""""""""""""""" -Here is an example for testing with python and pytest, especially useful for testing launch sequences. -Interesting to note are the free set-able environment variables that can later be used to rewrite parameter values for launch scripts. -`Source for the launch-based test `_ - -.. code-block:: cmake - - ament_add_test(test_bt_navigator_with_groot_monitoring - GENERATE_RESULT_FOR_RETURN_CODE_ZERO - COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/test_system_launch.py" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - TIMEOUT 180 - ENV - TEST_DIR=${CMAKE_CURRENT_SOURCE_DIR} - TEST_MAP=${PROJECT_SOURCE_DIR}/maps/map_circular.yaml - TEST_WORLD=${PROJECT_SOURCE_DIR}/worlds/turtlebot3_ros2_demo.world - GAZEBO_MODEL_PATH=${PROJECT_SOURCE_DIR}/models - BT_NAVIGATOR_XML=navigate_w_replanning_and_recovery.xml - ASTAR=False - GROOT_MONITORING=True - ) - -This `cmake` macro ``ament_add_test()`` can handle raw `pytests`. Arguments are line or white-space seperated. -The first argument is the name of your new test, which can later than be used as a `regex` search keyword to only run your new test. -The ``GENERATE_RESULT_FOR_RETURN_CODE_ZERO`` is a flag for `pytest` and necessary for this process. -``COMMAND`` describes the `pytest` entry point for your test. -``WORKING_DIRECTORY`` and ``TIMEOUT`` are self explanatory. -Under the group ``ENV`` environment variables can be set. Those can then directly be used in your python script as input via ``os.getenv('KEYWORD')``. - -Depending on your test, it might not be necessity to declare all keywords in each test. -In combination of ``RewrittenYaml()`` from our ``nav2_common`` package, -we can use this to rewrite default parameters from the main ``params.yaml`` with a few easy steps. -A small example for this can be seen in the last section ``Tips & Tricks for Writing Tests``. - -Now, we added a few parameters and made sure that the parameters for launching our nodes are all setup correctly. -The next step involves dealing with ``pytest`` and testers. This code is from the same file as the ``RewrittenYaml()`` refers to. - -.. code-block:: python - - # configure all the parameters and nodes based on our input in the CMakeList.txt - ld = generate_launch_description() - - # setup our tester with the `tester_node.py` and a few additional input parameters - # here multiple test can be created to test your tests in more versatile environments - # even start fuzzing the input values might add robustness to your code - test1_action = ExecuteProcess( - cmd=[os.path.join(os.getenv('TEST_DIR'), 'tester_node.py'), - '-r', '-2.0', '-0.5', '0.0', '2.0'], - name='tester_node', - output='screen') - - lts = LaunchTestService() - lts.add_test_action(ld, test1_action) - ls = LaunchService(argv=argv) - ls.include_launch_description(ld) - return lts.run(ls) - -The next and final step would be to implement ``tester_node.py``. The node `here `_ is quite a good example. -It features argument groups to take various parameters as input that can be seen used in the code section above. -To name its core features: the test engages with multiple `lifecycle_nodes`, waits for all `action_servers` to be available, sends a goal, -tests if the goal is reached. This is a great example to use when one must implement a new pytest with ROS2 integration. - -.. note:: - When testing with launch files and testers also written with ``pytest``, it is possible to rerun tests - in between iterations of your test without rebuilding your work-space. - Although, this requires to build your package with ``$ colcon build --symlink-install``. - -b) Unit Test - gtest -"""""""""""""""""""" -This first example is for registering tests surrounding behavior tree actions. -`Source for the c++ test with ``gtest`` `_ - -.. code-block:: cmake - - ament_add_gtest(test_action_spin_action test_spin_action.cpp) - target_link_libraries(test_action_spin_action nav2_spin_action_bt_node) - ament_target_dependencies(test_action_spin_action ${dependencies}) - - ament_add_gtest(test_action_back_up_action test_back_up_action.cpp) - target_link_libraries(test_action_back_up_action nav2_back_up_action_bt_node) - ament_target_dependencies(test_action_back_up_action ${dependencies}) - - - -3. Add Your Own Test --------------------- - - - - - -5. Check Your Test with CI and Check Code Coverage --------------------------------------------------- - -.. image:: images/CI_Testing/github_coverage_diff.png - - -Is there room to improve the test coverage near your code? Ain't you just the right expert about this code section? -Think about adding tests that exceed your own focus and help improve nav2/ros2 reach a higher overall code coverage and ultimately also quality. - -The report above is an automated post by codecov.io-bot on github that posts results of CI automatically for every new PR. -Please consider helping increase the code coverage and use the opportunity to learn more about the internals of the navigation2 stack! - -.. -.. -.. -.. -.. - -Tips & Tricks for Writing Tests -=============================== -This section shall provide best practices and things not very obvious to a new test programmer. -Also, consider checking out the tutorial about unit tests and integration tests with colcon provided by the autoware foundation, -`here for unit tests `_ and `here for integration tests `_. - - -1. Rewriting Parameter Values from YAML Files in Launch scripts ---------------------------------------------------------------- - -In most occasions some small new features are added and made available through a few new parameters. As the standard nav2 user should not be overloaded with features it makes sense to disable most of the additional or drop-in features in the default ``params.yaml`` file. -But tests should still be comparable and only alter the test-scope specific parameters. -Therefor, it makes no sense to copy most of the ``params.yaml`` file into multiple test.yaml files that would be prone to fail future changes. - -ROS2 with its launch systems already includes many substitution mechanisms, that seem to handle a few dozen different scenarios, but are a little bit hard to use from a user standpoint with lacking example material. -Luckily, nav2 already includes a nice helper function for replacing values in YAML files. -Here is an example showing a small feature set of the capability of the launch system: - -.. code-block:: python - - # ... - import yaml - # ... - # Replace the default parameter values for testing special features without having multiple params_files inside the nav2 stack - context = LaunchContext() - param_substitutions = {} - - if (os.getenv('ASTAR') == "True"): - param_substitutions.update({'use_astar': "True"}) - print ("ASTAR set True") - - if (os.getenv('GROOT_MONITORING') == "True"): - param_substitutions.update({'enable_groot_monitoring': "False"}) - print ("GROOT_MONITORING set True") - - # Fails -> multi dimensional keys ['planner_server']['ros__parameters']['GridBased']['use_astar'] cannot be combined in such manner - # param_substitutions = {'planner_server.ros__parameters.GridBased.use_astar': "True"} - - # Fails -> value for 'bt_navigator' gets overwritten with 'ros__parameters' as value and not as next stage dict - # param_substitutions = {'bt_navigator':{'ros__parameters':{'enable_groot_monitoring' : 'True'}}} - - # Obviously not the needed behavior but shows that 'HELLOO...' only gets written when perform gets triggered - # param_substitutions = {'bt_navigator':'HELLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO'} - - # Finally works with LaunchContext and perform sub-function - # param_substitutions = {'enable_groot_monitoring' : 'True'} - - # This would also work, but then the whole params_file gets recursively searched and replaces "False" with "False" -> time wasted - # param_substitutions = { - # 'use_astar': os.getenv('ASTAR', default = "False"), - # 'enable_groot_monitoring': os.getenv('GROOT_MONITORING', default = "False") - # } - - configured_params = RewrittenYaml( - source_file=params_file, - root_key='', - param_rewrites=param_substitutions, - convert_types=True) - - new_yaml = configured_params.perform(context) - - # Check if value has the desired value now before loading the yaml as launch_argument - data = yaml.safe_load(open(new_yaml, 'r')) - # print (data['planner_server']['ros__parameters']['GridBased']['use_astar']) - - -This can also be investigated in a real scenario in the nav2-CI test. Just have a look at the ``nav2_system_tests`` test for the whole system `here `_. \ No newline at end of file From 5b91f7a1060cefbc93212eb2f097ee4b8596d7de Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Mon, 12 Oct 2020 02:49:17 +0200 Subject: [PATCH 13/16] add cleaned/generalized version of #88 - local code-cov tests --- tutorials/docs/intro_testing.rst | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/tutorials/docs/intro_testing.rst b/tutorials/docs/intro_testing.rst index b01af093e..f5493c0a4 100644 --- a/tutorials/docs/intro_testing.rst +++ b/tutorials/docs/intro_testing.rst @@ -326,8 +326,32 @@ Think about adding tests that exceed your own focus and help improve nav2/ros2 r The report above is an automated post by codecov.io-bot on github that posts results of CI automatically for every new PR. Please consider helping increase the code coverage and use the opportunity to learn more about the internals of the navigation2 stack! -.. -.. +Alternatively, if you want to track your code coverage before uploading your changes as a PR on the nav2 git, +you can manually check your code coverage report with these steps: + +.. code-block:: bash + + 1. Build with GCOV enabled - only package granular or complete workspace + $ cd ~/navigation2_ws/ + $ colcon build --symlink-install [--packages-select nav2_map_server] --cmake-args -DCMAKE_CXX_FLAGS='--coverage' -DCMAKE_C_FLAGS='--coverage' + + 2. Run testcases manually - keep in mind that system wide tests can also improve your test-coverage! + $ colcon test [--packages-select ] + + 3. Run LCOV to get html-file + $ lcov --capture --directory build/[nav2_map_server/CMakeFiles/map_server_core.dir/src/costmap_filter_info] --output-file coverage.info + $ genhtml coverage.info --output-directory out + $ firefox out/index.html + + +In order to get the specificy directory of a specific package for LCOV with the required ``*.gcda`` file: + +.. code-block:: bash + + $ find "build/" -name "*.gcda" + +Alternatively just use the full build folder when building the full code stack with the given ``cmake-args``. + .. .. .. @@ -398,4 +422,4 @@ Here is an example showing a small feature set of the capability of the launch s # print (data['planner_server']['ros__parameters']['GridBased']['use_astar']) -This can also be investigated in a real scenario in the nav2-CI test. Just have a look at the ``nav2_system_tests`` test for the whole system `here `_. \ No newline at end of file +This can also be investigated in a real scenario in the nav2-CI test. Just have a look at the ``nav2_system_tests`` `test for the whole system `_. \ No newline at end of file From 985cb1f2b11a88eb4afb720570e2970e0bd56e06 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Wed, 14 Oct 2020 02:08:25 +0200 Subject: [PATCH 14/16] Update Groot to include the merged PR --- tutorials/docs/groot.rst | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tutorials/docs/groot.rst b/tutorials/docs/groot.rst index 51224ca52..a8ae55af7 100644 --- a/tutorials/docs/groot.rst +++ b/tutorials/docs/groot.rst @@ -79,16 +79,10 @@ A step-by-step guide for simulation can look like this: 6. press connect in the upper left corner (``Server IP``, ``Publisher Port``, and ``Server Port`` can all be left to the default for the simulation) 7. the behavior tree should now be visible in Groot 8. send a new goal to your robot (can also include a new behaviorTree.xml, which gets loaded automatically) - 9. watch your robot drive in simulation and see how the behavior tree changes it nodes + 9. watch your robot drive in simulation and see how Groot automatically watches the state of your behavior tree Real world robots can easily be adapted to this. Just change the ``Server IP`` and zmq network ports accordingly to your local environment. Reloading of the behavior tree in Groot is done on multiple occasions, -but only when a new behavior tree is loaded by nav2 or Groot is restarted. - -.. note:: - Until the current PR gets accepted, for fixing additional corner cases where Groot must reload the behavior tree in order to match the the status information to the right behavior tree with the right ``uid``, - it is necessary to use this `fork:branch `_ until the `respective PR `_ gets accepted. - - +but only when a new behavior tree is loaded by nav2 or Groot is restarted. More about `Groot reloading the BT `_ can be seen in the merged PR here. From 1f028deba0eb2e1e4dad43446550331615173ebd Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Wed, 14 Oct 2020 02:09:17 +0200 Subject: [PATCH 15/16] gtest + code coverage from #88 --- tutorials/docs/intro_testing.rst | 127 ++++++++++++++++++++++++------- 1 file changed, 101 insertions(+), 26 deletions(-) diff --git a/tutorials/docs/intro_testing.rst b/tutorials/docs/intro_testing.rst index f5493c0a4..0f2d279be 100644 --- a/tutorials/docs/intro_testing.rst +++ b/tutorials/docs/intro_testing.rst @@ -73,7 +73,7 @@ To run all tests of the complete nav2 stack, you can also use ``colcon`` for con $ colcon test Now you should see a couple of tests run in your command line. After they have finished, -``colcon``outputs with the optional flag ``--event-handlers console_direct+`` an report about the tests. +``colcon`` outputs with the optional flag ``--event-handlers console_direct+`` an report about the tests. This looks something like this: .. code-block:: bash @@ -95,8 +95,8 @@ This looks something like this: You can see that in this case 30 individual tests did run without any errors. -Besides the 24 `gtest` tests that represent functional tests, there are also 6 tests of another kind. -Those 6 other tests are `linters`. +Besides the 24 `gtest` tests that represent functional tests, there are also 12 tests of another kind. +Those other tests are `linters`. 2. What are Linters? -------------------- @@ -161,12 +161,13 @@ For example with the ``nav2_system_tests`` package, the value for a valid regex This would include all tests for behavior tree related tests. Also, respectively the keyword ``planner`` or another full name keyword would run the specific test you want to run. You can find the name of a certain test by running all tests of the desired package with the option -``$ colcon test --event-handlers console_direct+ <...>`` or look the name up in the corresponding ``CMakeList.txt`` +``$ colcon test --event-handlers console_direct+ [<...>]`` or look the name up in the corresponding ``CMakeList.txt`` of the test sub-directory of the package you are currently working with. How to Write Your First Test ============================ -After dealing with working and understanding the existing tests on a higher level, it is time to focus on add and writing your own tests. +After dealing with working and understanding the existing tests on a higher level, +it is time to focus on adding and writing your own tests. There are multiple packages your test might fit in. So it is important to plan your next steps. After you chose the direction you want to head into, you have to decide between an unit-test or a launch-based test. @@ -179,22 +180,22 @@ After you chose the direction you want to head into, you have to decide between **What makes a good test?** -- Code Coverage: Are all my new code lines run at least once with my test? (check with codecov.io automated with each PR on github) +- Code Coverage: Are all my new code lines run at least once with my test? (check manually or with codecov.io automated with each PR on github) - Corner Cases: Monkey proof input, test the limits (overflow etc) - Expect things to break: this is good! -> make sure to catch all errors and handle them accordingly - Combine your components with other test: If feasible create corner scenarios where your code really should improve things -- Quantity over complexity: Better write multiple tests than make them to complicate so others cannot understand why it fails in the future +- Quantity over complexity: Better write multiple small tests rather than making them to complicate, so others cannot understand why it fails in the future **What tools do I have?** - look and learn from existing code in the nav2 stack, we have plenty of tests! -- play with different launch parameters: Have a look at overwriting them in the next section +- play with different launch parameters: Have a look at overwriting them test-dependent in the last next section 2. Write Your First Test ------------------------ -Tests are declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. -To add a new test besides the linters mentioned in the chapter before, we have to add them in the ``BUILD_TESTING`` condition. +Tests need to be declared in individual ``CMakeList.txt`` files in the test sub-folders of components or in ``nav2_system_tests``. +To add a new test additional to the linters mentioned in the chapter before, we have to add them in the ``BUILD_TESTING`` condition. This can be achieved by two methods to include multiple sub-folders with ``CMakeList.txt`` inside: @@ -217,7 +218,7 @@ This can be achieved by two methods to include multiple sub-folders with ``CMake # or add_subdirectory(folder) - # this one CMakeList.txt inside of this folder will then include the rest of the folders with CMakeList.txt + # this one CMakeList.txt inside of this folder will then include the rest of the folders with their respective CMakeList.txt files endif() @@ -245,7 +246,7 @@ Interesting to note are the free set-able environment variables that can later b GROOT_MONITORING=True ) -This `cmake` macro ``ament_add_test()`` can handle raw `pytests`. Arguments are line or white-space seperated. +This `cmake` macro ``ament_add_test()`` can handle raw `pytests`. Arguments are line or white-space separated. The first argument is the name of your new test, which can later than be used as a `regex` search keyword to only run your new test. The ``GENERATE_RESULT_FOR_RETURN_CODE_ZERO`` is a flag for `pytest` and necessary for this process. ``COMMAND`` describes the `pytest` entry point for your test. @@ -257,7 +258,7 @@ In combination of ``RewrittenYaml()`` from our ``nav2_common`` package, we can use this to rewrite default parameters from the main ``params.yaml`` with a few easy steps. A small example for this can be seen in the last section ``Tips & Tricks for Writing Tests``. -Now, we added a few parameters and made sure that the parameters for launching our nodes are all setup correctly. +Now, we add a few parameters and make sure that the parameters for launching our nodes are all setup correctly. The next step involves dealing with ``pytest`` and testers. This code is from the same file as the ``RewrittenYaml()`` refers to. .. code-block:: python @@ -281,19 +282,21 @@ The next step involves dealing with ``pytest`` and testers. This code is from th return lts.run(ls) The next and final step would be to implement ``tester_node.py``. The node `here `_ is quite a good example. -It features argument groups to take various parameters as input that can be seen used in the code section above. +It features argument groups to take various parameters as input that can be seen been used in the code section above. To name its core features: the test engages with multiple `lifecycle_nodes`, waits for all `action_servers` to be available, sends a goal, -tests if the goal is reached. This is a great example to use when one must implement a new pytest with ROS2 integration. +tests if the goal is reached. + +This is a great example to use when one must implement a new pytest with ROS2 integration. .. note:: When testing with launch files and testers also written with ``pytest``, it is possible to rerun tests in between iterations of your test without rebuilding your work-space. - Although, this requires to build your package with ``$ colcon build --symlink-install``. + Although, this requires to build your package with ``$ colcon build --symlink-install [colcon build --packages-select ]`` . b) Unit Test - gtest """""""""""""""""""" -This first example is for registering tests surrounding behavior tree actions. -`Source for the c++ test with ``gtest`` `_ +This ``CMakeList.txt`` example is for adding tests surrounding behavior tree actions. +`Source for the c++ test with gtest `_ .. code-block:: cmake @@ -305,17 +308,86 @@ This first example is for registering tests surrounding behavior tree actions. target_link_libraries(test_action_back_up_action nav2_back_up_action_bt_node) ament_target_dependencies(test_action_back_up_action ${dependencies}) +Starting with ``ament_add_gtest``, analog to the ``pytest`` `ament`-macro it is necessary to add your test. With ``ament_add_gtest`` 2 arguments are needed. +The first is the name of the test also specified inside a cpp-file stating your test. +The second argument is the name of the cpp-file which includes the test with the given name. +``target_link_libraries`` takes in the name of the new gtest (as target) and links libraries to it. +In the nav2 context this step is necessary if those tests run against plugins that where declared as libraries in a "parent" CMakeList.txt of the package. +Also, libraries that are not already included into the ROS2 build system might be added this way (like map_io or other 3rd party libraries). +Finally, with ``ament_target_dependencies`` the standard ROS dependencies are checked to be qualified before building the test. +Another interesting example in combination with ``pytest`` would be the `map_server gtests `_: -3. Add Your Own Test --------------------- +.. code-block:: cmake + + ament_add_gtest_executable(test_map_saver_node + test_map_saver_node.cpp + ${PROJECT_SOURCE_DIR}/test/test_constants.cpp + ) + ament_target_dependencies(test_map_saver_node rclcpp nav_msgs) + target_link_libraries(test_map_saver_node + ${library_name} + stdc++fs + ) + # And now the interesting part + ament_add_test(test_map_saver_node + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/test_map_saver_launch.py" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ENV + TEST_DIR=${TEST_DIR} + TEST_LAUNCH_DIR=${TEST_LAUNCH_DIR} + TEST_EXECUTABLE=$ + ) +This shows the usage of ``ament_add_gtest_executable`` in combination with a ``pytest``, which is quite interesting. +It always pays off to look into the existing ways of testing in nav2 before writing your own tests. -5. Check Your Test with CI and Check Code Coverage --------------------------------------------------- +Finally, now we have a look at the actual c++ code describing the test, `for example this gtest `_. +Gtest is a really massive tool set, provided by Google. Explaining it from ground up would be overwhelming. +While pointing towards the standard `Readme of googletest `_ and also a really simple `cpp based gtest `_, +in a nutshell using ``gtest`` depends multiple basic steps you must follow. +In the behavior_tree example there are some setup and teardown routines included in the cpp. Those are relevant for the test setting itself but are not subject of any data-inputs that will be tested. +There exists even ``SetUpTestCases`` routines to setup yet another more abstract layer for specific tests, `like in this bt test class `_. +Generally, setup routines are not strictly needed by ``gtest``, but highly recommend in the context of complex architectures like ROS. + +`There exists some nuances in the TEST macros from gtest `_. +At the core functionality, the important part is always if certain conditions generate the expected behaviors. +This can be checked for example by the ``EXPECT_EQ()`` macro like so: + +.. code-block:: cpp + + //... + TEST_F(GoalReachedConditionTestFixture, test_behavior) + { + EXPECT_EQ(tree_->tickRoot(), BT::NodeStatus::FAILURE); + + geometry_msgs::msg::Pose pose; + pose.position.x = 0.0; + pose.position.y = 0.0; + transform_handler_->updateRobotPose(pose); + std::this_thread::sleep_for(500ms); + EXPECT_EQ(tree_->tickRoot(), BT::NodeStatus::FAILURE); + + //... + } + //... + +To summarize some concrete implementation details. A unit test is declared in a dedicated cpp-file. +This file must be included in a CMakeList.txt file, as described above. +One unit test mostly includes multiple checkpoints for multiple corner cases before ultimately failing or succeeding. +Just one failed test is enough for the whole unit test to fail. +Determining if a test passes a checkpoint is achieved by the ``EXPECT_EQ`` macro or similar ones. +For this gtest-macro, the checkpoint only passes if both arguments contain the same value. + +This concludes the first jumping point inside the big field of unit tests in ROS2 with ``gtest`` and ``pytest``. +For a deeper insight it is recommend to check the corresponding documentation of the given tools and learn from existing examples. + +3. Check Code Coverage locally or with CI +----------------------------------------- .. image:: images/Testing/github_coverage_diff.png @@ -344,21 +416,24 @@ you can manually check your code coverage report with these steps: $ firefox out/index.html -In order to get the specificy directory of a specific package for LCOV with the required ``*.gcda`` file: +In order to get the specific directory of a specific package for LCOV containing the required ``*.gcda`` file: .. code-block:: bash $ find "build/" -name "*.gcda" -Alternatively just use the full build folder when building the full code stack with the given ``cmake-args``. - +Alternatively just use the full build folder when building the full code stack with the given ``cmake-args``. +(But this might as well include some non-nav2 specific tests) + +After checking the results of the different packages and exploring room for optimization, you might be interested into writing additional tests. +The section above might just help you with this! .. .. .. Tips & Tricks for Writing Tests =============================== -This section shall provide best practices and things not very obvious to a new test programmer. +This informal section shall provide best practices and things not very obvious to a new test programmer. Also, consider checking out the tutorial about unit tests and integration tests with colcon provided by the autoware foundation, `here for unit tests `_ and `here for integration tests `_. From fd7fd38670cfc66950bc0608b4b190236cc6b850 Mon Sep 17 00:00:00 2001 From: Florian Gramss Date: Thu, 15 Oct 2020 03:49:26 +0200 Subject: [PATCH 16/16] add Groot to foxy migration guide --- migration/Foxy.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/migration/Foxy.rst b/migration/Foxy.rst index f4cf11a07..347264ecd 100644 --- a/migration/Foxy.rst +++ b/migration/Foxy.rst @@ -23,3 +23,11 @@ BackUp Recovery Interface Changes ``speed`` in a backup recovery goal should be positive indicating the speed with which to drive backward. ``target.x`` in a backup recovery goal should be positive indicating the distance to drive backward. In both cases negative values are silently inverted. + +Groot Support +************* + +Live Monitoring and Editing of behavior trees with Groot is now possible. +Switching bt-xmls on the fly through a new goal request is also included. +Check out our Groot tutorial! +This is all done without breaking any APIs. All options are off by default. \ No newline at end of file