From dd84782a3be4265b1e1b1d18f389afbfe74e17ab Mon Sep 17 00:00:00 2001 From: Young Date: Tue, 15 Sep 2020 03:52:54 +0000 Subject: [PATCH 1/2] init commit --- CHANGES.rst | 152 ++ README.md | 186 +++ README.rst | 34 + docs/Makefile | 20 + docs/_static/img/cumulative_return.png | Bin 0 -> 220851 bytes docs/_static/img/framework.png | Bin 0 -> 209724 bytes docs/_static/img/model_performance.png | Bin 0 -> 287194 bytes docs/_static/img/rank_label.png | Bin 0 -> 248078 bytes docs/_static/img/report.png | Bin 0 -> 167927 bytes docs/_static/img/risk_analysis.png | Bin 0 -> 410721 bytes docs/_static/img/score_ic.png | Bin 0 -> 91595 bytes docs/advanced/backtest.rst | 61 + docs/advanced/cache.rst | 84 + docs/advanced/data.rst | 176 +++ docs/advanced/estimator.rst | 720 +++++++++ docs/advanced/model.rst | 179 +++ docs/advanced/report.rst | 76 + docs/advanced/strategy.rst | 121 ++ docs/changelog/changelog.rst | 2 + docs/conf.py | 224 +++ docs/hidden/client.rst | 171 ++ docs/hidden/online.rst | 285 ++++ docs/hidden/tuner.rst | 327 ++++ docs/index.rst | 56 + docs/introduction/introduction.rst | 45 + docs/reference/api.rst | 49 + docs/start/getdata.rst | 141 ++ docs/start/initialization.rst | 51 + docs/start/installation.rst | 55 + docs/start/integration.rst | 140 ++ .../estimator/analyze_from_estimator.ipynb | 261 +++ examples/estimator/estimator_config.yaml | 56 + examples/train_and_backtest.py | 126 ++ examples/train_backtest_analyze.ipynb | 377 +++++ qlib/__init__.py | 196 +++ qlib/config.py | 167 ++ qlib/contrib/__init__.py | 0 qlib/contrib/backtest/__init__.py | 9 + qlib/contrib/backtest/account.py | 174 ++ qlib/contrib/backtest/backtest.py | 128 ++ qlib/contrib/backtest/exchange.py | 430 +++++ qlib/contrib/backtest/order.py | 29 + qlib/contrib/backtest/position.py | 207 +++ qlib/contrib/backtest/profit_attribution.py | 324 ++++ qlib/contrib/backtest/readme.md | 184 +++ qlib/contrib/backtest/report.py | 106 ++ qlib/contrib/estimator/__init__.py | 0 qlib/contrib/estimator/config.py | 176 +++ qlib/contrib/estimator/estimator.py | 321 ++++ qlib/contrib/estimator/fetcher.py | 291 ++++ qlib/contrib/estimator/handler.py | 584 +++++++ qlib/contrib/estimator/launcher.py | 116 ++ qlib/contrib/estimator/processor.py | 249 +++ qlib/contrib/estimator/trainer.py | 315 ++++ qlib/contrib/evaluate.py | 389 +++++ qlib/contrib/evaluate_portfolio.py | 246 +++ qlib/contrib/model/__init__.py | 6 + qlib/contrib/model/base.py | 155 ++ qlib/contrib/model/gbdt.py | 95 ++ qlib/contrib/model/pytorch_nn.py | 363 +++++ qlib/contrib/online/__init__.py | 0 qlib/contrib/online/executor.py | 291 ++++ qlib/contrib/online/manager.py | 147 ++ qlib/contrib/online/online_model.py | 36 + qlib/contrib/online/operator.py | 317 ++++ qlib/contrib/online/user.py | 74 + qlib/contrib/online/utils.py | 110 ++ qlib/contrib/report/__init__.py | 11 + .../contrib/report/analysis_model/__init__.py | 4 + .../analysis_model_performance.py | 304 ++++ .../report/analysis_position/__init__.py | 8 + .../analysis_position/cumulative_return.py | 281 ++++ .../analysis_position/parse_position.py | 187 +++ .../report/analysis_position/rank_label.py | 127 ++ .../report/analysis_position/report.py | 220 +++ .../report/analysis_position/risk_analysis.py | 271 ++++ .../report/analysis_position/score_ic.py | 72 + qlib/contrib/report/graph.py | 370 +++++ qlib/contrib/strategy/__init__.py | 11 + qlib/contrib/strategy/cost_control.py | 76 + qlib/contrib/strategy/order_generator.py | 171 ++ qlib/contrib/strategy/strategy.py | 765 +++++++++ qlib/contrib/tuner/__init__.py | 0 qlib/contrib/tuner/config.py | 88 ++ qlib/contrib/tuner/launcher.py | 34 + qlib/contrib/tuner/pipeline.py | 86 + qlib/contrib/tuner/space.py | 17 + qlib/contrib/tuner/tuner.py | 218 +++ qlib/data/__init__.py | 36 + qlib/data/_libs/__init__.py | 2 + qlib/data/_libs/expanding.pyx | 152 ++ qlib/data/_libs/rolling.pyx | 207 +++ qlib/data/base.py | 229 +++ qlib/data/cache.py | 1143 ++++++++++++++ qlib/data/client.py | 102 ++ qlib/data/data.py | 1111 +++++++++++++ qlib/data/filter.py | 375 +++++ qlib/data/ops.py | 1405 +++++++++++++++++ qlib/log.py | 112 ++ qlib/utils.py | 547 +++++++ qlib/version.py | 0 scripts/dump_bin.py | 250 +++ scripts/get_data.py | 79 + setup.py | 111 ++ tests/test_all_pipeline.py | 183 +++ tests/test_dump_data.py | 87 + tests/test_get_data.py | 53 + 107 files changed, 19915 insertions(+) create mode 100644 CHANGES.rst create mode 100644 README.rst create mode 100644 docs/Makefile create mode 100644 docs/_static/img/cumulative_return.png create mode 100644 docs/_static/img/framework.png create mode 100644 docs/_static/img/model_performance.png create mode 100644 docs/_static/img/rank_label.png create mode 100644 docs/_static/img/report.png create mode 100644 docs/_static/img/risk_analysis.png create mode 100644 docs/_static/img/score_ic.png create mode 100644 docs/advanced/backtest.rst create mode 100644 docs/advanced/cache.rst create mode 100644 docs/advanced/data.rst create mode 100644 docs/advanced/estimator.rst create mode 100644 docs/advanced/model.rst create mode 100644 docs/advanced/report.rst create mode 100644 docs/advanced/strategy.rst create mode 100644 docs/changelog/changelog.rst create mode 100644 docs/conf.py create mode 100644 docs/hidden/client.rst create mode 100644 docs/hidden/online.rst create mode 100644 docs/hidden/tuner.rst create mode 100644 docs/index.rst create mode 100644 docs/introduction/introduction.rst create mode 100644 docs/reference/api.rst create mode 100644 docs/start/getdata.rst create mode 100644 docs/start/initialization.rst create mode 100644 docs/start/installation.rst create mode 100644 docs/start/integration.rst create mode 100644 examples/estimator/analyze_from_estimator.ipynb create mode 100644 examples/estimator/estimator_config.yaml create mode 100644 examples/train_and_backtest.py create mode 100644 examples/train_backtest_analyze.ipynb create mode 100644 qlib/__init__.py create mode 100644 qlib/config.py create mode 100644 qlib/contrib/__init__.py create mode 100644 qlib/contrib/backtest/__init__.py create mode 100644 qlib/contrib/backtest/account.py create mode 100644 qlib/contrib/backtest/backtest.py create mode 100644 qlib/contrib/backtest/exchange.py create mode 100644 qlib/contrib/backtest/order.py create mode 100644 qlib/contrib/backtest/position.py create mode 100644 qlib/contrib/backtest/profit_attribution.py create mode 100644 qlib/contrib/backtest/readme.md create mode 100644 qlib/contrib/backtest/report.py create mode 100644 qlib/contrib/estimator/__init__.py create mode 100644 qlib/contrib/estimator/config.py create mode 100644 qlib/contrib/estimator/estimator.py create mode 100644 qlib/contrib/estimator/fetcher.py create mode 100644 qlib/contrib/estimator/handler.py create mode 100644 qlib/contrib/estimator/launcher.py create mode 100644 qlib/contrib/estimator/processor.py create mode 100644 qlib/contrib/estimator/trainer.py create mode 100644 qlib/contrib/evaluate.py create mode 100644 qlib/contrib/evaluate_portfolio.py create mode 100644 qlib/contrib/model/__init__.py create mode 100644 qlib/contrib/model/base.py create mode 100644 qlib/contrib/model/gbdt.py create mode 100644 qlib/contrib/model/pytorch_nn.py create mode 100644 qlib/contrib/online/__init__.py create mode 100644 qlib/contrib/online/executor.py create mode 100644 qlib/contrib/online/manager.py create mode 100644 qlib/contrib/online/online_model.py create mode 100644 qlib/contrib/online/operator.py create mode 100644 qlib/contrib/online/user.py create mode 100644 qlib/contrib/online/utils.py create mode 100644 qlib/contrib/report/__init__.py create mode 100644 qlib/contrib/report/analysis_model/__init__.py create mode 100644 qlib/contrib/report/analysis_model/analysis_model_performance.py create mode 100644 qlib/contrib/report/analysis_position/__init__.py create mode 100644 qlib/contrib/report/analysis_position/cumulative_return.py create mode 100644 qlib/contrib/report/analysis_position/parse_position.py create mode 100644 qlib/contrib/report/analysis_position/rank_label.py create mode 100644 qlib/contrib/report/analysis_position/report.py create mode 100644 qlib/contrib/report/analysis_position/risk_analysis.py create mode 100644 qlib/contrib/report/analysis_position/score_ic.py create mode 100644 qlib/contrib/report/graph.py create mode 100644 qlib/contrib/strategy/__init__.py create mode 100644 qlib/contrib/strategy/cost_control.py create mode 100644 qlib/contrib/strategy/order_generator.py create mode 100644 qlib/contrib/strategy/strategy.py create mode 100644 qlib/contrib/tuner/__init__.py create mode 100644 qlib/contrib/tuner/config.py create mode 100644 qlib/contrib/tuner/launcher.py create mode 100644 qlib/contrib/tuner/pipeline.py create mode 100644 qlib/contrib/tuner/space.py create mode 100644 qlib/contrib/tuner/tuner.py create mode 100644 qlib/data/__init__.py create mode 100644 qlib/data/_libs/__init__.py create mode 100644 qlib/data/_libs/expanding.pyx create mode 100644 qlib/data/_libs/rolling.pyx create mode 100644 qlib/data/base.py create mode 100644 qlib/data/cache.py create mode 100644 qlib/data/client.py create mode 100644 qlib/data/data.py create mode 100644 qlib/data/filter.py create mode 100644 qlib/data/ops.py create mode 100644 qlib/log.py create mode 100644 qlib/utils.py create mode 100644 qlib/version.py create mode 100644 scripts/dump_bin.py create mode 100644 scripts/get_data.py create mode 100644 setup.py create mode 100644 tests/test_all_pipeline.py create mode 100644 tests/test_dump_data.py create mode 100644 tests/test_get_data.py diff --git a/CHANGES.rst b/CHANGES.rst new file mode 100644 index 0000000000..a340b19e14 --- /dev/null +++ b/CHANGES.rst @@ -0,0 +1,152 @@ +Changelog +==================== +Here you can see the full list of changes between each QLib release. + +Version 0.1.0 +-------------------- +This is the initial release of QLib library. + +Version 0.1.1 +-------------------- +Performance optimize. Add more features and operators. + +Version 0.1.2 +-------------------- +- Support operator syntax. Now ``High() - Low()`` is equivalent to ``Sub(High(), Low())``. +- Add more technical indicators. + +Version 0.1.3 +-------------------- +Bug fix and add instruments filtering mechanism. + +Version 0.2.0 +-------------------- +- Redesign ``LocalProvider`` database format for performance improvement. +- Support load features as string fields. +- Add scripts for database construction. +- More operators and technical indicators. + +Version 0.2.1 +-------------------- +- Support registering user-defined ``Provider``. +- Support use operators in string format, e.g. ``['Ref($close, 1)']`` is valid field format. +- Support dynamic fields in ``$some_field`` format. And exising fields like ``Close()`` may be deprecated in the future. + +Version 0.2.2 +-------------------- +- Add ``disk_cache`` for reusing features (enabled by default). +- Add ``qlib.contrib`` for experimental model construction and evaluation. + + +Version 0.2.3 +-------------------- +- Add ``backtest`` module +- Decoupling the Strategy, Account, Position, Exchange from the backtest module + +Version 0.2.4 +-------------------- +- Add ``profit attribution`` module +- Add ``rick_control`` and ``cost_control`` strategies + +Version 0.3.0 +-------------------- +- Add ``estimator`` module + +Version 0.3.1 +-------------------- +- Add ``filter`` module + +Version 0.3.2 +-------------------- +- Add real price trading, if the ``factor`` field in the data set is incomplete, use ``adj_price`` trading +- Refactor ``handler`` ``launcher`` ``trainer`` code +- Support ``backtest`` configuration parameters in the configuration file +- Fix bug in position ``amount`` is 0 +- Fix bug of ``filter`` module + +Version 0.3.3 +------------------- +- Fix bug of ``filter`` module + +Version 0.3.4 +-------------------- +- Support for ``finetune model`` +- Refactor ``fetcher`` code + +Version 0.3.5 +-------------------- +- Support multi-label training, you can provide multiple label in ``handler``. (But LightGBM doesn't support due to the algorithm itself) +- Refactor ``handler`` code, dataset.py is no longer used, and you can deploy your own labels and features in ``feature_label_config`` +- Handler only offer DataFrame. Also, ``trainer`` and model.py only receive DataFrame +- Change ``split_rolling_data``, we roll the data on market calender now, not on normal date +- Move some date config from ``handler`` to ``trainer`` + +Version 0.4.0 +-------------------- +- Add `data` package that holds all data-related codes +- Reform the data provider structure +- Create a server for data centralized management `qlib-server`_ +- Add a `ClientProvider` to work with server +- Add a pluggable cache mechanism +- Add a recursive backtracking algorithm to inspect the furthest reference date for an expression + +.. note:: + The ``D.instruments`` function does not support ``start_time``, ``end_time``, and ``as_list`` parameters, if you want to get the results of previous versions of ``D.instruments``, you can do this: + + + >>> from qlib.data import D + >>> instruments = D.instruments(market='csi500') + >>> D.list_instruments(instruments=instruments, start_time='2015-01-01', end_time='2016-02-15', as_list=True) + + +Version 0.4.1 +-------------------- +- Add support Windows +- Fix ``instruments`` type bug +- Fix ``features`` is empty bug(It will cause failure in updating) +- Fix ``cache`` lock and update bug +- Fix use the same cache for the same field (the original space will add a new cache) +- Change "logger handler" from config +- Change model load support 0.4.0 later +- The default value of the ``method`` parameter of ``risk_analysis`` function is changed from **ci** to **si** + + +Version 0.4.2 +-------------------- +- Refactor DataHandler +- Add ``ALPHA360`` DataHandler + + +Version 0.4.3 +-------------------- +- Implementing Online Inference and Trading Framework +- Refactoring The interfaces of backtest and strategy module. + + +Version 0.4.4 +-------------------- +- Optimize cache generation performance +- Add report module +- Fix bug when using ``ServerDatasetCache`` offline. +- In the previous version of ``long_short_backtest``, there is a case of ``np.nan`` in long_short. The current version ``0.4.4`` has been fixed, so ``long_short_backtest`` will be different from the previous version. +- In the ``0.4.2`` version of ``risk_analysis`` function, ``N`` is ``250``, and ``N`` is ``252`` from ``0.4.3``, so ``0.4.2`` is ``0.002122`` smaller than the ``0.4.3`` the backtest result is slightly different between ``0.4.2`` and ``0.4.3``. +- refactor the argument of backtest function. + - **NOTE**: + - The default arguments of topk margin strategy is changed. Please pass the arguments explicitly if you want to get the same backtest result as previous version. + - The TopkWeightStrategy is changed slightly. It will try to sell the stocks more than ``topk``. (The backtest result of TopkAmountStrategy remains the same) +- The margin ratio mechanism is supported in the Topk Margin strategies. + + +Version 0.4.5 +-------------------- +- Add multi-kernel implementation for both client and server. + - Support a new way to load data from client which skips dataset cache. + - Change the default dataset method from single kernel implementation to multi kernel implementation. +- Accelerate the high frequency data reading by optimizing the relative modules. +- Support a new method to write config file by using dict. + +Version 0.4.6 +-------------------- +- Some bugs are fixed + - The default config in `Version 0.4.5` is not friendly to daily frequency data. + - Backtest error in TopkWeightStrategy when `WithInteract=True`. diff --git a/README.md b/README.md index 8eeee9c7c4..6eda5f0f94 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,189 @@ +Qlib is a an AI-oriented quantitative investment platform. aims to realize the potential, empower the research, and create the value of AI technologies in quantitative investment. + +With you Qlib, you can easily apply your favorite model to create better Quant investment strategy. + + +- [Framework of Qlib](#framework-of-qlib) +- [Quick start](#quick-start) + - [Installation](#installation) + - [Get Data](#get-data) + - [Auto Quant research workflow with _estimator_](#auto-quant-research-workflow-with-estimator) + - [Customized Quant research workflow by code](#customized-quant-research-workflow-by-code) +- [More About Qlib](#more-about-qlib) + - [Offline mode and online mode](#offline-mode-and-online-mode) + - [Performance of Qlib Data Server](#performance-of-qlib-data-server) + + + +# Framework of Qlib +![framework](docs/_static/img/framework.png) + +At module level, Qlib is a platform that consists of the above components. Each components is loose-coupling and can be used stand-alone. + +| Name | Description| +|------| -----| +| _Data layer_ | _DataServer_ focus on providing high performance infrastructure for user to retreive and get raw data. _DataEnhancement_ will preprocess the data and provide the best dataset to be fed in to the models | +| _Interday Model_ | _Interday model_ focus on produce forecasting signals(aka. _alpha_). Models are trained by _Model Creator_ and managed by _Model Manager_. User could choose one or multiple models for forecasting. Multiple models could be combined with _Ensemble_ module | +| _Interday Strategy_ | _Portfolio Generator_ will take forecasting signals as input and output the orders based on current position to achieve target portfolio | +| _Intraday Trading_ | _Order Executor_ is responsible for executing orders output by _Interday Strategy_ and returning the executed results. | +| _Analysis_ | User could get detailed analysis report of forecasting signal and portfolio in this part. | + +* The modules with hand-drawn style is under development and will be released in the future. +* The modules with dashed border is highly user-customizable and extendible. + + +# Quick start + +## Installation + +To install Qlib from source you need _Cython_ in addition to the normal dependencies above: + +```bash +pip install cython +``` + +Clone the repository and then run: +```bash +python setup.py install +``` + + +## Get Data +- Load and prepare the Data: execute the following command to load the stock data: + ```bash + python scripts/get_data.py qlib_data_cn --target_dir ~/.qlib/qlib_data/cn_data + ``` + + +## Auto Quant research workflow with _estimator_ +Qlib provides a tool named `estimator` to run whole workflow automatically(including building dataset, train models, backtest, analysis) + +1. Run _estimator_ (_config.yaml_ for: [estimator_config.yaml](example/estimator/estimator_config.yaml)): + + ```bash + estimator -c example/estimator/estimator_config.yaml + ``` + + Estimator result: + + ```bash + pred_long mean 0.001386 + std 0.004403 + annual 0.349379 + sharpe 4.998428 + mdd -0.049486 + pred_short mean 0.002703 + std 0.004680 + annual 0.681071 + sharpe 9.166842 + mdd -0.053523 + pred_long_short mean 0.004089 + std 0.007028 + annual 1.030451 + sharpe 9.236475 + mdd -0.045817 + sub_bench mean 0.000953 + std 0.004688 + annual 0.240123 + sharpe 3.226878 + mdd -0.064588 + sub_cost mean 0.000718 + std 0.004694 + annual 0.181003 + sharpe 2.428964 + mdd -0.072977 + ``` + See the full documnents for [Use _Estimator_ to Start An Experiment](TODO:URL). + +2. Analysis + + Run `examples/estimator/analyze_from_estimator.ipynb` in `jupyter notebook` + 1. forecasting signal analysis + - Model Performance + ![Model Performance](docs/_static/img/model_performance.png) + + 2. portfolio analysis + - Report + ![Report](docs/_static/img/report.png) + + +## Customized Quant research workflow by code +Automatical workflow may not suite the research workflow of all Quant researchers. To support flexible Quant research workflow, Qlib also provide modulized interface to allow researchers to build their own workflow. [Here](TODO_URL) is a demo for customized Quant research workflow by code + + + +# More About Qlib +The detailed documents are organized in [docs](docs). +[Sphinx](http://www.sphinx-doc.org) and the readthedocs theme is required to build the documentation in html formats. +```bash +cd docs/ +conda install sphinx sphinx_rtd_theme -y +# Otherwise, you can install them with pip +# pip install sphinx sphinx_rtd_theme +make html +``` +You can also view the [latest document](TODO_URL) online directly. + + + +## Offline mode and online mode +The data server of Qlib can both deployed as offline mode and online mode. The default mode is offline mode. + +Under offline mode, the data will be deployed locally. + +Under online mode, the data will be deployed as a shared data service. The data and their cache will be shared by clients. The data retrieving performance is expected to be improved due to higher rate of cache hits. It will use less disk space, too. The documents of the online mode can be found in [Qlib-Server](TODO_link). The online mode can be deployed automatically with [Azure CLI based scripts](TODO_link) + +## Performance of Qlib Data Server +The performance of data processing is important to datadriven methods like AI technologies. As an AI-oriented platform, Qlib provides a solution for data storage and data processing. To demonstrate the performance of Qlib, We +compare Qlib with several other solutions. + +The task for the solutions is to create a dataset from the +basic OHLCV daily data of a stock market, which involves +data query and processing. + + + +Most general purpose databases take too much time on loading data. After looking into the underlying implementation, we find that data go through too many layers of interfaces and unnecessary format transformations in general purpose database solution. +Such overheads greatly slow down the data loading process. +Qlib data are stored in a compact format, which is efficient to be combined into arrays for scientific computation. + + + + # Contributing diff --git a/README.rst b/README.rst new file mode 100644 index 0000000000..c09800898a --- /dev/null +++ b/README.rst @@ -0,0 +1,34 @@ +QLib +========== + +QLib is a Quantitative-research Library, which can provide research data with highly consistency, reusability and extensibility. + +.. note:: Anaconda python is strongly recommended for this library. See https://www.anaconda.com/download/. + + +Install +---------- + +Install as root: + +.. code-block:: bash + + $ python setup.py install + + +Install as single user (if you have no root permission): + +.. code-block:: bash + + $ python setup.py install --user + + +To verify your installation, open your python shell: + +.. code-block:: python + + >>> import qlib + >>> qlib.__version__ + '0.2.2' + +You can also run ``tests/test_data_sim.py`` to verify your installation. diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000000..11ee1e7986 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = python3 -msphinx +SPHINXPROJ = Quantlab +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/img/cumulative_return.png b/docs/_static/img/cumulative_return.png new file mode 100644 index 0000000000000000000000000000000000000000..ea24c28d67a0af1ea9144fbf88e33c2709e46ca2 GIT binary patch literal 220851 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≤Iez`Fv0ps*fZVt}dPoFHhn{d?+&WKIi0 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

@-IzD zMF|%p0$b7A4Tf?H6+Ar|CgFz__sf-J(~`N@hK3#_Kb;Q3pW-NGys80ya=3axLjAc@ zV~bmj^z(b=M|vP+B>SOvt|vHkq$C-*RoA*gcqMKz$StnlHt-(2{!iBK;_Koe+Pv`~ zN7!VF3-jHWTp?RFtV3&)3iv`GPjFdyZ$BQ<)IEs-0NRR^iO<8m{Uojg_0J)ji_~`1 zZ%C<(jC6kB-@rL%uVZQ6de5^E(g4({tddTaCE8C$k$;{W!JIPS=WPk@?AGPdBW+73 zgc{ZG_4Xy|McxOsqK^I|@dOA_mf%82-z`7%Ibghclf|o35tmsE8BQpT={0WnGEs-# zPtXpFKZT+%FX$2#RvLt-Yep-gEm?Da0{iPf5cPWkxU@0$AmVJ@xeiztOXqkHZxlDs z1DWc4D!IFjGV2aFJkXr5v_9AxSM@3kz%FmnOJ^f|^11`6+ZCa)dCe_HsPs;(;xxh< ze4%8@N6!OpBpf>Eq~Qj?%^j-OnY5CjRTzaP19-bcS}9LJk_=l)wQ@&L2b=o>8kc^u z4}J3Lh3{`XCA#i(`|IX4fOy**j(C%i z2ZM4oc4DGx5v*(yv^R=3mMoZc19#M9cl?6OtR+|O3YaXQQ~YwEC%83#>P({;vdTC6 zI4u_YoH?VBbLeeL4DBB)a40Q-Q3b%oK%V|5>724kBrmmdK=HLr_KBCLyI-35ES(Qh zwvWMK9Gsa}ty{+h@j@$xSxAON?xqPM^-cSsli9qL8I_vw!@Ig(t8}tqB`ZNsaIcmi z0zfj26HT4I$-v&)XlYt1!2R}uPE>fK*4+0zbbR`MU`jXlU8 zX=I-efHswdV-dIib}6U8BT*k#MI7}ruK44tmMtw!TV@@W4F0^X;$}{r>5X=QE$FXk zxCO+(4XjVXiKMh|u*!KqxryP}BVK0gkK&;FA5nWZb>GRNG84n8A_-YSKEXf9MjQA? z*gAAVL7MsVDRV{2uMzk0pU!Jt_23{%bY9BNdwl8J6S})Rj!(fU8u+yHVfWL0yIG1y z;}rusZw#!>D2`-IeA|*eI9S4)!g3ypcxtpxhB;|JTJ}WSoJHKWZ>dVDS~r+#>Vqa|6wFORFX#3Q6dY%_CkZ#_){RU8RDh{^BKcPQinz z3l4}ETj)8|U$znmbNwg~lI8F~WC3;vzICn1a}B44m$nrzHx(Gp(=k$>c|ZFd#ZvXP zLi5I~I4t&>6}~=G5Jd4L{omsFmJ6yAZTa}}E1IF&$lTo24H2l-xLjd!+L+bC!V*o{ z4TxxQZ@}(hK)A)-{E?Fqk0l&qU+w1m9V!l~3S2Ffkl`hlnWMIvCQsMz;-4$#>Lrem z$Jry^oB+uTAk?!dU}XoqRzxDeV1DNa0U=di3Ya>o&k7g4;!)Dc%s4EUP>VCieE01ZDCK#nRcE>f$BjQE3pqk#?T$ z1=XmRZ<{6j;ZwaShXh_%j460XhwQ}^t7`{H+#UfJImn<812)*M^q{6W(9l45f?FZvL}P^8NSyp4t7#eQ-!;;|LU*$8 zQ%5|$0c73}zy9$e{8cizPLyG;*G1$ZtSYeAgUBQ(qM4b6^_9*Q`xQy_$%o7vOh7uh zQsoVo<_7l)ApU`|mW?iIFX3{l$dVvi8j>=AV)^syv!(9&@eN+6oB)V433UoDNzbD{ z4^rD8Zr`NuE*Z=a;tckh=>@;#_ANGF3GhP(Uyn3lv{c?+#Rtw=oD+_`$fEoz4q;%)}3dwjZnqs@qGA?R1$3?G@0qTO>>i z7m6hl#4<~&zC>g73PA+ec32X~_MLD!T5Zkjmen#Fs*CYCpy7;L;50Ijz2PURRRO^h za~T7*FaMnd2oY&rQYbN&*Hqc4UXzdcuLWo~+|8nwt`(YtR>qr73PrxUbldQOKOhvs zpik_y0t<(k2Lo5WiFkMfo;|H?b{$4-xlIPkQG zB}vni`kGsG_A`Fj`?b(F*Qr0TcuZ%8Y_6;6<#8HMx)c{OUT>JBI3T{aiCne1)nZoX zzfsfcCQT3fKe?S`nf78&t)+*qAT{yL#*{c1`kkAo=sd4y92nLGe_Kq$*P0w`OK3dJ zeFYcoV}4>qt*@_TH4EwWc>HcIo*6#~!R#}BaXFCf%F_Zdc?>x>x7;RZ(!7XpPSlBbiBjtw+H=?#1j(&*@@#HEmxe-nVO^DT-R)BBR?fIm@C&^Y7V7K%Mu-AD`>r&y*;LfU zt4RlArTP~O0ZmTmtB$L@@2bVR;cZmuQBXW%RX_=dH%P8^^BNE&D0smLHJ?3(uxc58 z+JaQxx!~d{#I50?rY3s584dG2>760vw(6c3&hUVm7r!sqPjoWLKOOb^leW8K>ud?x z4+J_M+iX$AzR!Ux;grUggHO4kQ@pN(SE{gmm`K~5Uq!E>i#M^4DnM8CUf78HtC3J` z+4r$HSntJ&l2-!K1IL~159}`z4?2%%qT%`%1hQM*lb2dH0_Xg~z-3e-b^&k4j4yD5 zeo+TxenMaRE0&BN-}*;5hi%1bl~p9&1cVjhW1b_zje3V*gGQNxSB*sryW`nkFTjU1{Ky?vVi>* zwj_d`dV)tHOhPtCnUM-1+kevAqCTWcc9&!&5=3qsGRAdc-+wV56_q4ma#DMslyp&A z9J!mREikr;|MZXQLVh%;0`1dQz!jXW{E$I)b}nV1C1m?~DrX^L&PTrNpo=spfUgG* zYmXV%dW|k|0TPVmY~eN_!D#LDj7VSzEp8*b7{yh+h}YOs#kgc=c=>UBvDmNJi3{z$ zS=ifdg; zo6rK*wqIiz+;zB=B)OFVIpk*20m=?pv@sX!-DLU4_DpxlWePhTH-M{F8U%y}?-!9t zf{EhxX#2KOTAo~@PpQLPVg@k!bsfgZAL6iS_hADA>mHB+R7gP9X)3Uu1&fQelh>pxu8IlFqPk>&EvO@jJYzaD zAwWi}8KB^&O93iS>Num=Fs<;kwAQ{W6Y3b4^8pZf{?;Wj;2-ogX!YK&73iGDT%sc9 zND~#o0&$6C%Mg5N^|{Qt)|P;A3eQ%T@!z|(M?~{?Ne8!~Tgv#f{e!lHE>qT#5i#+C zs~u-76)Yyonqu6W16oLb{&Xlpm^2gttO<2C+*CXq297WVe(6;bVW3%5e&xkvGCkI0 z9Jmx;GeZJA(Dd5K-_W&if)v{hdO?hp9HDP(oRqz%rt7Y^8j1c%0kfSODVKrb2W#?D zw*iG;{KC19xb^L>b({5u*XQLg0D92>xap3=FRoPOG0%x-yaE_tB;kIX|3Z;8pr!4a z&KjxR*(h&~3?IigcPZIBEJZ+yi$sF_nF?L z)diRzB%MrGE}48HN3g14_!Nwb>+{4MdP1LybRGv%0U5S)pOFKC=sf0z>W=|5Dd65I zFD*-}X&(IF)|m7{0}kLFIwo(cCNIMhAK;tU>A;@mQ;IXYbu`lz7KgL?8EvmHLtio_bZ+%wC(Wu#q2B5-_mP2}B1*zRX zmjKSAl;V1;Rh;|DZSkbM(H4=09d;Mc7O9hL*UH@SeJ=Ba>v4<*$H-)W(2<{0%0Wcw zU#1RT5=90GBi_mHDienGx{c$(*OI^x(R{jsrAnK%FTS4k*(R0iU!?u%>SsW_ zuRw&Bxubn?eW&p@Dswlco28F0WYCcqH7Blm=sZ(7; zC}4ETFwR(ZRXj;9)M^QS;8k2NqJTN}K+2M;-hUpdo?;1TMIWo+s=+6%4MWiER7utd zRSx2Mqw((Lk}a1^qh5PDQb5It{c`pyPCU{Orp=yuei0_#b2=<>DcqLbd1gYFSu!%x zxJ-NRR3jsS^S>OQsutb_44kobbs7}cv&f6-j!FTzJ(h5#)qzbTnT?Y|#Q>Xwuzfd@ za|CT)YH_Se3aYtv6Is+q?x4zIro;LLW{Rb>v`huO>uCt$mABuZi@iT;>|Wz_vLG0x|XVdU+=|| zv8P;$EuJdQhXI_H3jQ#7mh6823t~Sm04tx$B0F@}Z@Xj5AKX*a|KnNAqCYph0e2_OJ^zJ_GJLa`@5 zLiKIlA*sHIPPSeq`De3^a#*G#k!HA>sh>wuS|A2qTZ;tv$#%6h7oQah0OemHVHtp? z0MIfCR^BZ>P?Jm1*(0=FN>EgDQ`}v7Ahwg0Rf00)Am$y&k_Q@X-;kAyAcZO$IrA|4 z27L~(8bGh%AJBV|W+9!HNBgU)zGTid&G7fO>vNUqZX$x}e zsQziy+z|<3Ny*q*Z$4x`E>#DKF@k9_cD;f%xl|;?|K%$-oJJK1>G$IDDI}5m&eAT)u=SzalnFPkA<>phbI#$ z5m1=s?31%~Uk?aey<(?x*DgkG^@rf}4y%enz?#Oob;!JgY6I3e?18BE!s&LU&uyx3 z2TC7+ovwAmx2RZbQ!wA{ie^v8?4-kEBQ5c8wwnx6hqV*5e23jo^Qe_4(j! z1qWXgJd|!fG(f>Vh6)EX6IZdm&!W>zbIojq7UP~0M6K@wku8S+TAuj%(aBUhMP~2` z8wiq)f(wrDL?z&in94Gs=)DGBWA@XE0AL*e-SdA<3r$2PCZ;DR(#tMn$AkBPX$5qZ zEB(NMqQwM{NHp)8?^QRc5f^S`H~JXPR3cyNX8uyuh<9E)@zcu^vhwNU>v0iT%8XTV z8xgVPM`4TeR|zo! z#oDusz>sbi_Bqc`Nlu1X+(HcnYinvhAA2a=!gD8Hc7l~q<=}q%(#lWq)B!TXB9||k z8B_E$lc!}>!CwkBO&X@ZCY7CLj$8W zNU*^z(Rj^q#~qmF%KTh!4$(-}O|9|@d|d&Q?cDYZ(rUPGQo}2EGM(0n+*8YSIH0#h zpdIDf(#VK(00tLLSrb(Wr_KA{T#)8uC&H?c$Pj@Bd+sMlTq?NzsD7HqG59EqwQEG! z%IBe9Nk-O6#T-Umlplc+c30Ilm)rGIB!o^9)+|3Cy0iw{PvD&G`tdX)wFeihv$G}u za*36WS0|f9aS9zS(lie z-e1Y`IJf_r6Vkpp71kD18Z;A*IkGtlCN^Cuca?SW$JXw8nAN;W8}VsM+*Dc>7Xc9f z`B135*jL2Ck<*!DdeKBs_xlZ8V8^fx3-or=bH|}M}w(hjOB?42gZ<>F-UV&)l=>}9>BxN=dh&)e`*Gc&R zA7#Zt%-j$ymL4NN`Vcxfn@N#m-$aLW*5`Q=?7yOfAxD^J#ex-Dg&16Da8A>sv#`5n zH9?#450ep-Qv=2smn_%#~F1A_csB>&hIdvcJFw!1!~owbK>NZXMh^a7>jZ0BL9`bS$B z%;lP_$i}~GQBsy47y5M9?^Y*#W&Pz(!LPdjX9-FH2k@psYn&ou6MXwJ%9TXCvWye_ z0t`YYhrc~u_n~ZTS6j8XG}9Ox)5BYr2bG2=uQ2Klh96x=On4kr{y zlx~^P;)ruq6V+`)h|)=Ut`ygs{j`ej4*eWuK?P^B{R9XGKuf~cGU}NKrl4WFyJ}jy z><&Z0Z5%mC`F~x$rQW!zQoa!AR|KJUG3U$Ap{^{^*b70qNH9^5QQeh2mZEkq5gZQf zyMnVC^B*+E1tNJ00Ii1~+9dG(sMeXI&m*4Xw2fWQ+K+qwC%w*%ZC}GHI+-M6#!R8c z5&94eb9Ml-kI8nphnL_zngTJc6V0G?;Dm0(a;klZ7w6@FaTbkcVqv*kMq$2Fr)8&8 zQGJbszbEbW+0@g+LCEL>Dt1|&Dsqd;xf*T$=mO6 zO%b6i8<&_|r{LkE=3je1dK(&Kf9zy?fgXqn&b^+>shHzqso3+WK`8jMP8LoRMPini zzQ=Ch%yEOK>%G8do`>4JO2_D?WE(=CDU$I|@m^08J>!}xGNRCdH`1AO|3`GrYcsM z%EoD~Xr}as2Yb838gt}zJH(q+|k7s z`Z^rlLM}6p=^EI6)y$wstnwXi(@GUH(BJ^Z7UTFd-O3%3Z%7+d-8;psAC%TjobI2+ zHFd$UO|=6Xe-u?J+7{kwzb*?69#tyyLq7JpUTk2Wz4&I{w8BT)J=B5`HX#38Lo=pk z?Mm&}t1$5(yBPT=y6UYyx>4^)4cLGR{$WgZfG#lY-p?4qqZQPtaAEmo%P*L%nj1h1 zzCrVU;{Es*4`E-@V!8G1J^(1zN~?THxtb&)<2K3i&(N`QLf`BT3CboZf2CM65dpY7 ztERPUX%4rcxV=?Y8UCWE%Vs(s#l`oqt49SJw5XMv2#({UcGnI+ph_6#EUnO)g~H+A zaArkKG7|a)hLdAW3^4sSAObqiBlT;eq06)nsY|_d_d@lm3{PyKSpIg41ZM5znmFP_2saZ$mXOzCz$LflL-%bJ_A$tS5;MPY^d4XHd zIZ^q3X|@jh6Vo=j_j_D&opg}k02mP^6{l118EP{GrW{&o1)xeY7@#-Xj0rvhseuna z_WK-K=-6QfoM{AN)~H@suYzrwj`tgeVz7w0?e)tzYTzqSaY??wB<=cOIvFQLJ653u zBhgnD98~Ac!8 z2ad24s^1sR!)@Zh0I|ocJN9U2umg@_fi3H2Lh^@R1ebQ8(_CLK+6z=!jWYAaO{AEu z+H^b5CO_JWkEyF6M@Ss#?03P7&KQ;gajAxfWmk z??nSpV`_wL88n>>%u*G)P7Au7%(DHgwns_C9qe#+&KV53GOzRrC`irvnPz0 z;7PRs4sqz>4}I4iMl3WMW8Tr7CskBc9>>(9!b8|8*-dKufo&1`9ci{NCq`Eo+?cv6 z)^j02^Q%j_Xo|fN3E>;tE&CH(Fm^F8-Cpz0+!@Q_mdhvJ2TP5tp%w!j8~e8Kv02NqvR~CSkP{VVk)HQhw++veBo}N4o7_%CnF~ ztwyMLa-CDG7%3-Pz-WiTe5~rIUQFW##^xCGpg z6o3DKVIhqh;92_!fPxoyE&)O65qe3_crCm!IQ|Q;&F!$^U5%&+tZQc^8Z0llYCfic z?|htmVANbo_~Td+!gX!ei(Q&ugUx*DcEossVjUCkPSr(_L*GM0QZ#V>>NPr^1stRv zxP|f7#HQG6f5sg50h46^w7P%M(a-O3V53{~s=(~s`X{>>su<6j&al9}uYW0c_IfYt z6VYB*^pKy|{Oi$kg6 zbA2r}@F))6(^DBVlYl~?{2{P!#BZhhCXGzDd*j8-kf1W;W;0G~uHpy03ftm5?XMQ7 zcA0eu4O^VcGA!@UDH^H)C8xGkx*tr-%llaYhcyDC^+AM=f=0^P5ZnfHfGhAS{9gD{ z&{3JkiEKd|G0Q}1OscHdR3yu^%6)^#S@59!*f#|1_h4$;eN}p9-a4f9c~HlQwDpn7 zs^$r*$E$zLI3@!x=5W$j&^8=8Yx8IKb5xnfe@<19@a=u&dN|naHc|-csa}?1DnD7F zYwq@9C&1V|z3Ut*fj6*78GK&H`DI(j!bsq;!kS&TJ550s<^2ETaBfpECk;>h#a1Vy@a&#TF-La2FH*piMys0^Zd)+FV%6CWWsg6fLgFNb zKoHRLvK><%L)U#G^Mvzcf?UQ9e@H&k5QlD(zgEZzlm*bG9m1+%WNT``yQHeN(Bqla>moy!dfzs5kccBvP6MXa_%z@{Ir)o>{K|InDVF$p zE<4GdepnfZFy5Bk&bzjHhnuGMLROtzt07hNA_Z1o7|Q0drW*-!Do%sN9}>%lN{73O z#eYEZF%)Z$BC`R+cFQ?*QkJuT7s~*nlZS1Vstq?__V)>pTCV+An|Bkf$082PA;7?H z*^w^K`~y;wXCk*_Zx};`)lPc(Ei6r7FL_1(;8CXdw=aqBKu{I+0c$D%<_80)VY@tn zQgZ@*BbRU_3DF`|Lu(oIBY&~RsyEM2+)Zk(C%iQ^V=!Kv$3Z~AzGhh_Wr%ddQX5uv zgknmCS-Jv}T*)<(JmyU6ilFLdycC;dxHBNyM(lZUTHi=$!^h7Nm`eSZV1to=(6kwj zLTpKacol(mET)d`)sOp805RI|0m#t!V%S8bG5<$E{0J*FtJPGzRT+j#5Pxnr4a`AK z*qj5t+|4P`gjqIy`|m(qt-&2yM-!4%qvNRVdpa{-?haz z?(How30IqmU(X7iqy85GkZHUH4lRh7q#~YAvh65(8wco+A8~|Q07KPX9J>QhWB-dR zoBaYIF#U-pUS85Ty&0$gL9|@YqmY?`iXynLNi`o=5z96v%V$fU0(RzAfo-7xt`sMy`^K(NAn>bj7S9ohksJ5TALhXrBlzOTj?j3 zeUZ#HcvuGAL7}R}+Obk}wDG|TN5BOjNbQhv?%+t86 znM5N39za=0Pm6cXDBvgLXw9aaj9v@@$>C6xZiWdyV5#+?#|4FO|+- zI!Bl8nr=e0;vz-_xK|2|dDcz3B8bz%2!^r6@y!+3*pLpwXB<;v)YwY&!;@*sR#ibE z51`Y{1bBB@2O|hLr%k#@B>_aMQ63uPE=4uN9N#bGC zEczOGVVFHn8h~O%!&-i)S;^G$zh^*5O%pYDRPX?z{M$;MSx{@}VsTiipxiPcws(;q zy{S>7^?&5<1pBeYH?2+c!s?+^keRCDrRxLOu=2bhUcvd4Uc#b-R`vUHU~x$n*M6nd zeciSy*?W5vx1f4Tcq*#~>pSEHN*oRjj*HlN>l3?j?!nq8jd$P2l#07;Keb*Xiv!1j z(fSC@?HU-DSGpBTH7&^&|HvbM$jgcoWyD|fo8s?OQ0%L+59%x9AHHT*HX9fSN|kWr zAU-0T|NgZ|ZCwNfr;h_WA;p%q=!@SD0I$IVYaZQLy*@1PQ)DkAhV+oTBGB5KvR~94 z$Q7mo`0aoJ;J@-dVD|wFJ4}ux?}GKu8(5ZSm+?kCEP& ziH_|p;&EVp4yX*nN+n;8@Ge4m7>AzBr`Hu}eDoRi*4`?0V5LjM0FcN@ck2>00@KF! z(zKyj0Q;VT7+^lUz!U|an!ElzY~SlZH-8QdH&>AIX=qp<0Bf_Mw6V{V*jDoM5mURS z*P8FTNO+|+zmBL)QO4h`K${}gqUu!)wZ@H?K;B+-xvgU_^q#BKcC66_^+l z-X)dvZr1GupL#m{+d{rK2r^m;^w>bN_BX-+VH()WKT=t*Dhv{Ou&@*mA%spUU13Rf zR_c=~N1f9N({GdK$^^S^meo(yCkE#;8w@hnL1EX_l~y*Ys5g_>ZFP(d2J$(9V|fgm zJW$4T2ofVbZq z>vC2cfivgK-!*QHV{sz-uNM1CTn+R`;%GxHzTs!TSJXHDIQ-NFZ=oa#cv;!3opj9i zN2P*)XzZAG!FBG-3XhC*u_zE!CrFWfNe_P~tk>!zVxsHWag66;)sxsia+A+-@Y`Is zpa5|Ht9t>`6jwL=bDr8~%WvLY8Fh)ZEVX5gdMtil807nOEd%Zd+v^lv@Pr5y%@?>v z=AD0W^LuAJ_&_IoVD*B?Sn5wu*nRYDa|+{SWXIbPOr>UwJv9UP2J37lugE>X@8<-d z)lJ}h1M4bvaQ3VO@XZ;%$+sIw_a|MaUsa%l=TgSY4cf=^KNK4G|L&Pd!{a{O+%os( zisM9&fFU_z-I-dQa#o?=HGVA=u7!WD=@b8KcWw6ylPL6fv{iM~`%ntOUAyFLPd#9d z(P_wCk+VOdkP-d#SdeDV`_%Ow-&>I-QuHg5*Z`|IdeySRvfQ8D#K+TzmUmr`9#0{z z{LgagFXDFKB_C)C+-_W$31R#)>3u|FIV3D`>tf)_^GH?np*l z+i(9w-I`lmo@3rOJ=kj)k(=^iVl)1ql}KN~?N0n8FAyD|Yfilkp=wJBkQI5-qR!_eY3%!4`yjBb!NFDZ8TH3T~0@I%-1h4qRsk9G1rFLs6n_HoY8{lp-R`R(|n zH{!~>H_cIS+yzgfmlfZo{L9Y*;ge32U)XotlM!0cE5XT z59axe*QA1bo;K7CoNZXB0>5y*x$Q6Ok2xZ|Lw}R!7_!5p*fKD;o~!SeSwkvl8`p{z zQ>*9o_9YzoJ|qP_@cs^f1$v2o!Z~LT(eGxmj{}R4Bm5@1C1{bq`-{E;UG73Xp!#=) zPWEK?{6v@aQ`Szj@a2a)$3C(Ql70^R(OzXwXb-0}?9sr>jk{JXh&M?%l+F?b@Jm|H zS*9~^!DSqF)T?Bld7$-G*q-bg3l1|(47T!xB2aJjlN9viMHrCVNEb<_fX* z@GUx&uB{(+y#2 zVSQLTX0CHi1ZpE3nVeJTI=C4Xc{J?ws>UD{Aao2VW3fLhZ%F%RTkn_%HNUGj1TZr~zm`bznFS-QeCAl~!sIz=crcAdPQuSY|W z+|02tiQXx{gJC@1x>?bW&Q6E!oTnPb>LZcYwNl7I-e!*ssAqE#uQgadrM@f8FN1pP z)o2%R!O&wbwq7j+v9Hw()`?N;;f2Qi68w9ytfo7Cq74}k*6Q@8=^gp{uN8aD{i3Xt zKBR@*4S;PPw{3qP)UgVlYE-Sq6kC^xHP_aCRFe5G8{I8%d7w$r{|>VJ>492tehPSr zI#XXpf8jEFhF#Q?8#={fDX)~+t8Y94lJzZUI$zxEOoJi@CYY(sodHYaeHgNfOm&v; zg!?`F5O69dL`?XDO(=1KIv+I_erM$bIk?^tISO-gPS;8xiwd- z!|K8v>`<@@{uf(Z1PDU-DgNS!_wDyqR^2(6JqAi{oK|*Tq=V)^xq%~BiOjApbaL~x z(M5+DdX0YQWjO}mRKXWkP{Ac~L^A+IYT}o)W;bLb)4`LOS|$gDIpZ~_U}sM*5-!fJ zH4X0v5rB;DIxx7pbT>PA*a~X~d)sSnJ2DUzjdWbx&t?8*$^lQ#{q!MFfdt43#=2P) zFwGG@mrsJ_6dz%~xnYJuzp*hurfr)AUXVk&PR9;VEX7KzJX29*#LObC^NHLNX8B2M zZ_$q5mE4B$bT3LPnh$yJ8yK4NUcs$ClhTz=0g9A|Ff>B?8J){gd|9NP5nhX5-X`Qq zwV0J4ehFWP;7<4M*>IKbcLh$#+v%90SQMt&b+PyAg2asZ_j`!xqgp*i`m<;2kWH4~ zokK@XbL?L|5(q%9P!@*l=GtiKx!E0*N_~Y&@_Y?m#OVC1aXwAv*J3Dm{w3V%g0yua z8@)BDI^Bsgug}#oQCS#A`PRW|-x{$?FKOW63t7hS=fu zv{b0aTVqz>wLxh0o3I~A*7Vn}h#DNXOb!LJ*%N84Z559LMc9C$Aksyuc^p-D zUX+7`KR@OLHYBD*8#%izTTS*Xr&vEJJ$NGwSH^e>o%69kHUl(&|UXQ01L$l(vH8n4`Mv_)ibrJudc3m{ARB2 zG~ha`wfR?jN{TE{K$Oi=M@?6340!ED;c4}E52^6y1x&_UEON?kUw;FU5!6)5;?z)E zbx=%VsOY2ECfx_TU6Ot#y4$I&IH!C-UI##m#^q{|EllZWt~x5-?knrss$H<&=R$1M zrH82lSk*1@ln;sQZTd4Kr>UwWn8Ul1V~Ez65^fnsf;({*R>+%oG@ASb+0Wc-NQz8- ztz@c5fk>xaDJ1q>ju+apwRRn%^93VkP%5^NNi^IzetlaQIB!{vl>tX;*R95iTX$Wc zvMa{D_qbH@|Fvk>-Z*2s)^sV<+npu?8&ae871>qn@r|n5t;k{u8&h{Vyt2({3Q@NF zQE7=Ohsg>X=0E{hYaRuf!>+B0=CMbdIEDooU!3Bg^9P5T1obnD3;MegNh6K)qYS{3}WjBfzM4^X~6eeaWNs zjpJ*x#O@i>ka8uvOWDX}`CvbufMJ+pQ*rXw(V14oWhf7?g?+h*du}IeDIK&#M(o$V z+&m#nea8vyJ)uK@F#YZOK2|y}%qq9@#s6k>u7RZSI>HPb#CK`fFHlZ%<3K{jf~14c zTC^~9GvvLd%9|0FS?d@>7eje|FAWo@qEqT;uVUb&S74afo}ol?u*<-==e5fn%yx)w zJ7}5priK0kX7dV%az}*Dj=cwY2njGzm{S5+snsMr$F2J3c(9%(wfy+ICBoDnpYn1@ zvy-66oTcrV3YhY(D@%wL`8I0HNV8#*jxa6nZ=fFw1o(_NE0N$H&d87;!g%l{MTH_Q z%Uzxjy(9hXA*_9&@RToUJ%~5U8>#?Q*s(*#fvQP6#Ie&s>FF*oD(*L(qSD;ft;~-P zEa<0}Hqg4)c^kSr`Y2CNpPcnDH=M<@j0Ax3$snUZwtGo~kf?)ws-Y;earph7SR@0|5 z{+>>awPovd?Hmf-hsheP-<`2n%tQ4Yie*fC;}Sgm6=(*6hEc$F zMjC;ZIG%YC*!*<2>eVy7<)4J*+yO%ocZl%6`kLt?_eD~i;K#_v*YJ=zV-nWuj8X?p|uz zyMkff=9`JS>@&>qN6O5LZ|p6St&V)l6eKdraVW_2deYYrg=rq)qHBHW&HRLWY4e%p zcrOWDNaxeOktw?~+vIC);YrJ}w|h7K7=!T=>x0p^zNYZu8o7i!k8kyr_YXJCLIq2f zXe7?X0n1;&tZSHa|0V%U&d=u?qk+M48_YaQ?AciQqMIUsOet!irRqWm-w-(Z( z6f?X7jcNDQD{`-GTd$ZPkWqPbH-lTjn@l0yQp~e<@9l|tAAO-D*68P)d}mHlyf`q9 zv-Zz7mmHdT*Ed$_MrAMtuxi=T0RNDWqNTaLP|K7!7mY_CDby3df-d|zf%BEBX#llS zn;^y$inKFi8xlq*9nN%khwXyXyA$RlDuq6J9O)kMr1`1$-FWaqlc<_DA(?z8(!K6b zMJ}qvg28|aEpkdUhtnAfL}ey-dD|k)?+I!{RST$=E4A>lbBgMV25*FTkYaAHSE+=s zU%G$4tCY&G4BbrGn>U4Xl{S@LyYbX`dMi<4i>xv0iZQgr;OYSJ51FUKa> z*p@(yRVbbqhr{G3^}Sx!>p;8*rgqIjFZE6^ixO#CGW!fVkX4-&7Z<9g z0TSNNC&3cvEjB|{)!>i}O$xs!)_vaZvd+$E{jhhk#&EEg@{iGpP%d)M6kb+G+8)2f zuIF*$Ro82{0iDNcAM21!R6je$ngR>}(8v&kl|eIZmkMww0-t(eY|yexHUG?saJOTV zb|Rp*5_^F|eK-iw5LRJb!>%S@wTO(%BqX%s%&HY)D;8;-o0FQ}w-}UwFjlZ5IKHnN z{t_y#NQ6VNVGZ&=_ESuO1xwJ9%j5Isaa@#`^5{D-v=#hltVylm zeR#9a&noum_BzT=7!7MN4xpvwI@9LUCdzfx@d5u0l9xBb^KCynpYZ>w#P2da-{EGc zLbE6t1m7}^AGgMRR)l6;gt`+rvxf6DJ;wtGSv9_Q#j%PMbgyoo z7>q2QFP`Lf{63c6jf|d1h*$otr38WT zO&=Wn3^D$Z!jQKI^m|WJYxY*Y`Ns;;d52F;DY7=sQMLrf7xpJp2ZeGKSy32g$;rsv zDbTMS8HB$TdF+UzRbd&otggoRTHtIQ~-3V04r5(Y`TSR+KIHo6bA$i z1r&oqOJhE+Lr_xpdvIF^wn}aBjZVj`s~#=^47eI3&x^u4(iEVuvGaO-z2>YyK9ums+x#V?2wU*f6WrC6@gRbwu3ZC14t( zru8Pl2GMisy^iqrD^x3^%+fMF)XQyfWxcnIe?0ZB?ey2y7;E8p;;v&$*7L#$!jL-~ zY3WF^=pmewwWciu12LowEFaYXDrzJCUAtU zM=a7xvv{giVBLs6E5Fz8K_d ziR~mkhjogLYc5|(M=Fpd7yzXF?LpJW;@p^MoEh__s5;>L%J%&765wYCKE$17_)f~T zjQkqR&>5?u9lfwd1ceaod+c5IC4c!)WMdltVzgYjR!Rh_`xNj?!co@j5PFDNftY09 zfoiSlx#=&K#PWkD4-8%21=CJg6hCD6*X;hF6`>fvB_tZJqf_!umV`E@qp)tKzk+Ps zI7*jWj*;c9z;mm~#1U-wQroc#z2Z@jjQcQ|(jZY^$9 zW<3D*bQW_&jq#B;yrv?yppH#-KHh^tv!#AdF{+4dy=1&fD{ zWIVg{u<^h{29LDEfnT8%Wi;^G`L`b4KV_X!3VCCNs)ZiC6YIaU0N29b-b*=|{I@TA z<y~|^(QN~5TZSG=qd5K6-PUZ`ACB4DW64v3FU+h;J2STn{-M zzvVa|yT`_8^qd27A@J&}ZPKWZ%A0Akq#t~Dft!q?Sh01yF91$wxn71G@b+7|gIID` zDD)fuV;ca#0UpJ!TaIxR`%dPy?qp-MQOq_A>xfH!hjiPdNtW}(k&VIZe4=S-RvpD3 zuWGzU!9tXV|Kpovu^gYpZ;bXeSS;Fp>^-AoRG2tR&#?_NAyQ<8inDwlUWYcO>%lKQ zl{84qE4JO2?)ANeF zy|4O<31n5T;~Ms}n(`=QQUKzv`H-~sB=WfemGf~w;5tu=TXk}C<5FEY@9Wt@Gxu%FM|#W7<0racqPvH; zXXfpmrGv87eVsJ=WYoRbSa*NCX)*M)~X!C@XNa+-q= ze(ELE=THkaeP75I@pw4cG%C&s?eRB>pk?SPJpyd?Zz`wrNIZP7GFDr_<}SN`?~P~M z3qaxsND&MzrYPRa*c|-wDxhIRk#&0wCVKBcpuzhQ1cm{9?V}XZ(EQN=+-@*VXgRBnq_r^`d7-lii5>&5#D-2jJMXNLzr|47~|LkODnnsXMkw z#3oH8crd$Q7ke?^g$D&2JK1q7r4zPSr{x~_$KA{J7pDM1zS*M_f20GT1{>EU&cm)< z+<@Y*8$=Yfqg;fKDrtFY(L(O}Ps}*3`EBhhEwQWK^dDU%1|hD*`sP0W zjiY-eip6M$Vc-GaJV%M6s&V#kJHDFJm{ZJGVD%0BP!D*s1E+I3S|c1>CEgTdjsj!O z?G{z06rTRj+p69lQUF-rcj)yayp+1;1EfNT0LT%C1C7r?cpVgWzM?m3_UD;u z%rBKM6ExJ$%TRcrRTp7qEg&Tl?7I2^O}c$ADNA?+(F01WJjGcq{>$1mVV>Mx7%)UV z@z+)S{_VNvo3q^Wy~%fk!5P{Wm-myaUp_}im2!jCK5;XAc6^6O`qAVw{;PreNFQt5aB$R>Jkcq7C)qPQ;lJ~<0YK*CDjEGUqdbhtZw zmmNYn+_|F5kN(TH-lPTu#EQySkJk9@1TkbkEi!^`z0oe8 z6phn;Y8Nr{Fixm!dCk;W?9o5x5F>!rd3m5`5nAV){ zhI!Rn(EyE2F%0NDpeq1L_~#7Js%?VzTea_qewU^h6~0j;+3wbVFyBuqfVoqs;g{M7 z&LjXK=UKcqYeO}%tH{*8k8Z_!fj{#(lZCZ0jqKZI-T2#;j}u=c?ax!djQ~4L+$Ao z=P57frQ-^s^ZYTRl*$JD)??RC?7PfPtWg??RrPwuq$c4)Xas!G_8Y447=g&!5kPB} z-)PNvBu?$Cw|jd5U>8_jQv-^hqrKnd5N7zJyL0|fJ=g@gbn?$0^? zsX6c|!2eaj>VUQWB{ciWzyS+W#j()%*mFhEIPmy8cLp4jzhDa}*aZyI;X9{Vz?x@Z z10>X6VzUAqq*NFusEGlmX$x~fTX1?ib&ejTQdidJcl%O^*?VdyQ15_0?Ur&BAy$EZ z93~u2bi*m!9DlBw>Wj9&&94u~$8uEQYCm&7hA^I%PbJoV&eYH_Vwe{*&^O?>3s3W) zBr(N07QE8<)j}8T*4~z%^g3Li!B;_5JsVeTAQxdt?7HUUC9HmfeFS59bWk8AneKq zzX4Qgqn}AYE)q$jNt;TvTR6;6G(9X_k!G0x2@ikD-xNAwF7YlAtbmDj%VMtFGAuPA z*A4j<&z)!RQStE6{gcR4i&aOOMdzs>o{Xi1qvF`cYa1u~aE_2ql87I9XfF{EETIwc zkIJaeN$M}%;`pyTpsQF7U?r~2JOSD~N@24ApL!*)AmH0qe|Wh5_Fpt~vuXj8lam<@ zjH3lx(MC zThZ`bHOzu`=`-;Wg{+BB{ZQuYd}4=lV#gHaYBHzZ*=1PMQHwKj!DJtop0fMV= zLI9P*nN7mWRsrPqmIp3&AXkkf`}+@<-{J-YEvb)B=2+ohZD;ThtGoO^ zDG1!$?JlGQN8(4r%|b{!yJx z@Tn}Vao1shNkq=*>D>r(+QT@L2#ZqS!k@nogXR$wUm!peDj8miv|M(>e^FM71t15& z?~1%Albzyvo~UmB?_xB}Ln{D{!U%LScsa8_DIn5*XFQUPfB zH^BT*0f7Vpkft%`yHH~>Ko*+9m|p-jI+Is6!36C}L_0wt#gcJgx)fQKMln;)AoRrGrNbF%Tn zo5RT$L!K|m9zR9>z`6hy02BCf0AK>=-xUiT3<6r=`8E!WkPY&f%!Vwi--vh>c@N@5_(o@u+SQxcvm&@Hq@B<$ovDc#tp`?sVBK_IuS#5 zWL^jCe9D{M$7#uBbi@dtrz5c0SN7yj`o`F__uXk5DC;fIwir0lGN-h^)R}EgD>Qqi z_W`-h1PRtzj_|Bn4OF!Li2P?>9!R68phDeL*dV=Ene%>#QOuE^_Q*XD;|nO{qWGw~ z?=8^E=MOdleLC@l92Eb-jb;ogbfAwLvAhCQ<~r<^p{L7uZlc)J>z*5`J)QLH``uN- zN<~~b|7AM>OPC?p9Qf3SoIb$7|DrLt*0Oja`1aerN_J%3Di_X0Tmm4Td%mF{;)-Qxdm>wrCY%C|2(J0uKDbD0s+ ztndAX=%$Dr!?H)^x>>;S`#&`t zuyp8Qk+MUKmhPA+nsvZdtdK%j5DeLis2b}*T3jjweaB_$UVAP@|TkMzEQfors$4i~dvbnxJ))RIJUl=hpq~+A?15#Tk_DzTJ&^PB`t#RwV zfd3Fi;AX_hZE1qgyYL=yl%$r(3kBnq1G+Q`9DEy+7(q}L{HbvKRFRS#G(FT}jl0*I z^P;;cB3EpJK_K8f9{klXIKq7v3rY{E&Mx^S02>3Gu`6NwZB)=>f2@R(_eXMd!Olb4 z5G$>jLy=$#7`A6~oe%d#@&zb>ULjPAbxr;JeF8W@Gq^9vnGPg}LV6p%rQi$I@aZ#d zx}-V+4DP?`mC(QojVVSlQ!*b*c>zp}GKy`5NmL^bD>D>XV{eb&-`Z#)+3Q0qWGtr9 zql_A&;HZcPkEdeNLq64{{^|?pEIJa*Wafmpxg_Qr^uuT2^R~`n|G6?i|If@{bZOs* zS4uX{L@EyaF-ch=MCF87`K+hFCt2J-(>D-eW`v;1AFX)RCerd9xThJf_JGU}{eU?l z>-y*>dT3cL1gg0d)S-i?8Z}68DcL_18$G8xlBge;-y*>)V%4AXm|lszj1~ng$u4Y8 z42=fC^`(dQb<$*fG==!+pP|^+#D@-T(-dcTspsozRe)OrP1-&*n#3b>8XgmaC+Yj# z-U4WGMg9I+kpx5{CcR%pSObYZ1n$f{T7d|egeN0kyR~-^_iM|qHxS*?nm85Byn}U7 zVpL{ef}M4n^!*N(&us%#{u;4QBSjE}Kn3@{X?VsryOUnz9sG)Ov0W|av%;ez0F(bs zZ|`)#N(-WB*78PXGM}LWbz?YJUa>YL79f|8^h;jk6y4E4*|Wr1f0VXno&j1nIf59Q zkySm$ylW2s0V@bQC>=Yh+X8TmMnH^2pEA?Yy1VVJe8$|r0dDGqDfelGz&J)9`jf*t zVZCC-ao{eiv)gBRz0%m??q=N-X6|<9`7HA#N?1_H?Ct*kim2=04_G(;F=A#q$jJRi zi3gmysXKzh1yqR_psXznhws7%n8$+Z#If%hTy}YKh2eytETBiuZopJ0g(7evDoeKq zCLKgzO6ed)uhD#!X9^C~PKOlz=%&CqB-HESpgexztE;<%B41Y7CmK z~br?dD1)^xHscK?kM1Ppo)B!u`SfV`4 zIy!YaNf9)N?)$y~GDqpo&BtUTwZ#U?dveckxRp??W+!hF3RIJ%P-`%Ds#OCqjXvFf zm_`IObg;Obarm${HM>uV_WImC$$)s>qVL-ieq+~08I@2lA(leJGWVzUprtNwZr^#$ zv52W(vt_%~ue_D2CB=ooFJS~!_C9a*6<24k@rgqRpR8!_iuQS6futWpBz&Hmd~>TSw^N;nLhZ_X2TH*z#v-gC$3G>mjrN$8W;<~XAe~!Q1uqcr}hu{dmU3GIP-ALwJ1*w*MESs2WN89 zs75i`Ox5%GS>*J_Dp1P1uWKH7=zA~Z7CpqMpcB#fOCGh?&?9*Mu?=W0#=A|p3!e-Y zoO~FH%&B3Uo}uD@is~@I#u_hm*zmCf4hHGgX(gGN{)kxd>Q2-^z46ab6gV63kjE*a zB|8>U*VwC;iBr`%sw1#Dj6Qu;A!DM*G;)1CLQ=>qC_>0E#*eFDOjI`xoS+mGaeW4n z^c0m(M$UX_jQz4$3mUv}|{i6LL#rK^{e7$f%RMZl%Pta4tXK;z6vuy|hxb`HV_6Lg86~ z5LESywEqBlGE~r2w&MpkFzx-&m{Eo7FSOIsif7P8-Hx|EBxi!TCR89_zy5xzkyg^z zX1;U`*a({P1RmD-6b;IS#8V`NvF>qyUt+{*?~U1#ywrU$b<~zKHN5MLEad@V1`=GB z@aEuDGCf7Zbf}t`&PT~W!~8>MZ<}+=w*5av4mi+vuRN?f#pqbjPmr+OJ({K&Y@r=E z2;hx4^N*^JXRd9hbsn!igR*jeK_vL|8iO<=hksbeSHQ`u~-!shjWuCPF z1|CN5B-HPpzOv~?-u$$$59pw*QBX9ffXb)DyYwN7^2WTl(?u~AO&0}*mv>Ubw+Pjz{chdwznMJ8RPcYvT1nCLZ=aAIgnnStc>=WNvp ziJw|5pAfm*OfkIg$O*eiVw^gfg;_wlW`H87V}0OeiFzwFbU~h|4Ym_JsZKFfeD-+D z;_$(4!(N?s!$7;k&O4iN^6=>@kHXJZxUL_U&%ByKKU|h2fURx?9|iz!N)>7UrduXP z7M=tOKr}3yUW_>KqkyLfMO3S3NGeGB)S%?NG8!B(DyLFLHQ4y6R=dqxbD+%KsjO7C zXC4k3pZCsJJA%X8ruL@t-ReK(Pl&ectcw89iGjZXi9cF;PhBB)_)e&6H^f@!?Z0!Ogv1WP)PkuVAXZ<2B!d!9G= zE3iOfxzx?JNDlI{XZ|+@Oj7~Wz46^Z&?N}g!nUE`BV&C_!i^PDaR{U^@ZnJWB)+Chm>4T zm2p44tMP6OxZkTFqVwaq9IS{b2AuB0=^ZFmJd})NK6?R_+gsdFkP-ithnyXgvbE}z z_fim@Z}LYf>%@?cE~??ryI_faCRhD})P5v$nK-C(?zNFTHv_po&I;rR)=a`Nj$e}= z845gga(d7&43RZ-TYpl93?dwNi7_*+GczfwaY|b@#U6EQ&DA^X zgvHCC-ZbFi--$K@&~nwWM1j>U^V+C-fBAIb6iELvaoYz^td-heSrHX$N58Vg4tbg6 znMHQQsEYc~q9(F#vuoZ}|E#Xr7jJbhPSO-xj$d)xGFDdX@wmvS0jk67rv2#WA4iVx z_+Pw9?Guul>Q38x+sGL3_>Bs{qaiLsLA+49BV|@67f3dUSa_C8y0BrFme z9s)^w_J+GPYp`Y2A!jSM>3rmdRuMbf<9yHJ^4jNZt7qu-Q6%PAohw{p^&f?jt{Z+A z31DK@@_^ELDE>Zo0XRaDwk(K#ejUOkm9mn$5oXx<4Ta`_CGx%_-`7H|1bx1ne3`kXVOKAVVcV^2hS%I!_duUDqw z9DzNc^T`tA?B|_dI{U7ZTu2rg{2>vQ2V=}$VUJTDmHRksfdbx72XO+e7AFf*Pj2;Z zKM3liDC945&h><*6H?il^e*e~#80JtJ?96SQjnh!Tlm>-`;k@5!m~wcs(UgE7zw9zko*IQvdtwWsT;%NtT~L3@B#>5FI`G7b*fr4*!)1H zdbGfdD;;JYA$f2rWA2>9r}T|3fSP16Y{$;)0VNa(etT5x*kBaJ*`tlhI4QwIv#Af) zo<(738_Sk~0#nOl!Bd5<43JM>0kAMXVCSoEjY9T!T~pAE9nY~7OaK%4$672|+g;b{ zkV4seyZ{ckPAqsMm zb^o%$Tj*`W<7cQ2!GO+qDt?vqPsBkUQ)$5@w$erGFU;;2yDz))_Xq18AFoy+XIDEd z8Kl00vKmokIG%dr%E&0B!=n#w@~a64YJKzqCuiv^f#;^7VER_o}bsWVb}+)rEqciw2z|23+D^ z$7T^b+`@UYw{8p{@m`UQ6pYu(SKC~;Tg$uaUz`npozFH~d}XR{AbDyiRFrJ`*-&hm za9Q-Ddwf84q4F4&^I6)wnov=J6ZzRY#7^gSjp(Y^cFEL}&M9Zr0mC}VmKwW?#M6 zBCk{WvyLa>R%HT`58hLK`RIMvRn+%-+tYrr1|)5)Q=f9 zHI{U*|9lPPQwz(dKZxwX44TSE%xv)O!S#Pc!%-a{+eiJMGe3&@{MC0b!bz-A_CkE- z7)wpxU3-kGFZicj!umnc>u(rypBV(neKGEg!Fdr?+E`LieJ1jK zcli!3lA=y?tRW)2_4+OZXhQhIA4^QCA}MR-fNOFIyJSJgOPsQ?{oDB+%b$=~-DKAz zB3}73A$3FHf;t9t5o}9vq{e}%MBTGb2X9Nr z2e-aqC1Y)Wxf#+6*E-tep)&6=hd2t8S5G9qN~+M^9ftDVAZ4LQSbX2QG&I(-;@xxF ze7w}@laQUv@}XJ3C>?HEGr(0}C(R~f#jjXdjj;Y|e`*(8l#D$SzGf9@$*=Hb{K5QL z6jj$_aL?v+ADBm*N2I5p0vS4iuBLGkABEptr*3N#;SoIO+Fv-u&v;c79 zXHJ;hE5Xlt#nk|ja)f7uuyq|)i)j5Js6b%?lJ6C!WdDr8hB8yKO8&Unk4sm+duJP9T|LlsKt<#qPgES3G} z&up;}ONt?=G;+{q7p&1guUFS(e=wj;RdQn;gZjl9cl!b2N#<}jR-j>Ds+`-6=Np{w zsay_HFfT*&FlH*e!`2MU>-r)?C|_kS{aFjZ!&->kVumPiiPPi49{Y=8 zR%kjh{-MZQ9PieLK`HXWTEZnV91uQ*m%2%im)zTSxg?|)AKZi{38e_`r%ryEF^j5e zt5KO~$2PXX7m^uRmyUX`!wNX!&O!Ip`c}nfA2mK9#+g!Q^0vD;hSqPukz1jxg$1A$ zZS_zvlpeHQWI0-Daj7P>XFmm_=mEEgk?(x+3L{Fv{P`TkGn6wYUt2J?S=(U7VZ)5~ zwjqypX=F3-fZd4!azqj+IuR^v1#MwlCKI!rH=s$JV4$KX6Lw&=ddgAM7Abyr|CqTy zqcLyPh)sNH)F#!|N4%!OVzQgUrc`9@?(yWP?|| ziVvdTJ*h2ZUA=t&qNHlSQZXpYxA+}5Q9*pNA>c`2WecnN(HoYpyLhdY)k-qItIH^J zn>m`yW2#C3W6+l|@641WfX7#Z`iR%%1K!g&jdr{aGT%Q1VmyS^q24J*H#d;f@zW_x zHg(>N?0_Xk3j;klA6KX@Z!fAwhs(x%FxGK@6;>fR(9FI#MPV3k@R z1|SE=?W}qpo-ZZtMIZCBwT6KZ-9Vw)?+0C0Ni!@1N6u=qF_btuFD%y%c+@{IW}3Vd z4S}+Lr1|)sxd>+mgLbpbCrA(Vrgrz&jo#E%E2&U7*#~EcMkb;cF_(oi<|*{Ff}&^M ziVo3FKkK`-`_t;G1>tV&8y|wqKP@ELV$+5-P54Ek7V>a?$fvGuHFe6NnT7xmL%{l)=VO>M!K;j+ zVP`tbI>6$CPbJPpGD6b{icN7%oG?e9*VeRe6KeeWq2vQA zX@OPmg~#jxhja&U>=}Yavmx#iD7anQsN`_PRq0Hi_|<%(psk6bf`483?bISzbi0Kp z+d%k_(Y}&605Mow`7oGL73Bw{e7ItxAjm=m@#3e=B*nPW;tDlzAl$pRE!tG z!Z9o2XaOj4?Yzhlavz^6Ng+-CI&@muy149DIRel`R3&>0q`vD7kLsq6MOpl-2nRY~ z!x(XJlh?Jo=(6go=a0Z#&P4T)lPac&dwymFXFAO(SnFG)F|JxyMnp0|ysP06%sh$* zw|}EukWjNG&QL=3DX%uzZ|QAu^yf@jO3cs<=%uxN_P0+AXWGxI9MC{*9lM&YTDwMf z=F)IvMYgTr2CVD@D_W>fPYDqB;wmcD0gJ1!z?czW-V4{tAX5}J zJq#N<iYYc7ixImZ_0c(Oqs%7cqyy|Wn_Yp#bzo*v^57H+)DN?xT6Dc1a3%}MLr6ppTbe7iLa#bp+M{0l9@MxGedVU<$aN+|?#HH!Er4c1as8E0;(cZ(iU%FM>6e0+TS~7sX)ny@aRZys7fqK&CbDLkW;PD2`?Zv zv@-VIT=o95jv8&VfVC<4?6E<-L6w-ty0EMbztMV_y`E4*Sdp(#U7{HAUVODH7uO8h z;%wrF{i@&wuC|U0ZH`{J(7mbjku5OAonTIikZy`}EnLj95~qjr`J`2H9bb@KnQ}en zKcq~ahabMfLbmzs&M*kp2dwl`l_r4oE+tD-Uyr$ij|q4CJfiauFu@|M!%kS>XcPu?2*2TCa>io+@NYPB{*{XeA_ix#z=T;|GA z!7MV*8-;2VeEJOfQ&*(LvRt+-4|yHVY1(*_oi*N$@uZ_BnkHKW=wpi-U1sbXA87X! zU&q0WnfqOo^e+i{irT_B7_bG%@NPro43lf4;-xs%j!d9^L3I7D^=J|FjI#{cKVs0i zy`@mh^_g@>E=~PB8SC+SW89H^Kx7Zw?Xk_U=kJ%6T1^#S&@oC*M~8%G|yY@){F1T&n;ne^-%YX-I-8fZ7Rh-3%cENhp87D)Q$gk4_{o(YqK7(bu? zPTQfYi_mNr)c6sk{GKZ!hYRWU)2BOl2z3<8xA00sqUVDq5+toL(=4ZhkCmp^F{qWn zLm(~~Jfr_Ht$XpkRqMpu5Pv#yOr1c!n8fOO(a@T^DBeP2QMpuj7EV~n#Tl5x&mhI- z_45lKf1|Iys;{bhY6kn9E&{osE%xm6{M-)mrAv7m5yydytv9$40b_VyZuUJOUiGg% zd*V&;ylmf1cdBS~Xy#b)37&+I_wF;)ZkLQNr0_x8C&2~N|Xdu8_AyYpG|a^u#s5tpUFi-az(^1~NAk=58=ul5>)# zv&+CJbNxdMhXBQzMF=bRnL-J5nc>+9ti@+t^)vprs>3A4$1h`fy4}ACH)moD_G+Vs z9u+kSWVr=KVtyY#j3T5@$zC4kTOhU+jL<+4oGA%!=u}fWmEJQ7Xo%MHU0CFP6XLik z*hJd<%=Ue~S#gzD_nnuht^4dL{e*JwW7uJQWX3aTnZzp1W70Et)T|eEASm6+bV4Yp zRN98u-Ti=9R+>LbWUH2+&cl!OFQl;x*L8MuT;zJv=<9Sr# zUA1VFoQn4R@Oo?Jiyw>f&1`nhzlC*w?Eib~89=!QnIMvwkrg5Nze?CXJ3b8jP$MVb zfrt%^5rU11ZsT=eGD8G?W>QJ{6~!X-lOt$!s)QcMKie>4_#iDzZ>O+P5gx5E`Nl`X zIpxhslB9@T=EuTO8Ow~f`W%p_9II3gqx8o7^hq8n4eaTc-`y@odhD`t$`4BlY-uesT!i-UOuv&?5aLoxi9l-)cmP2_g-Vgq2jYCO7Ja8O&2x; zD;2{i`gGqHNo3Y5X~fPyx{9{`Og@Bbp-iCE9n$A1*@LcAST^x9p@xfGPh!tfbZ_Ou*0q;i%5>@lt-O=5!DM)=c;6d)= zybNB9p&nN#D&BC6o=}F=dH`LCjOWay+43q!4ZePfIbS_m@6Zxm60wQw z3!zU=(tKoG3(;qVzzkO3+7Q&q@yyAX8^^^g>fhM$bO=k?DR2}2M|A{U0yyp3ui7XY zGw~JzdnvH9tvv4F*>LUE^gCskS$28q=Wx$`l3L6>>~t2$4EI3l=>L6rd zI`R%Y(zHXt{-=?P#BxHfi6ST@M8{jzCdO!H9);wD4S*=ezo<2r4b zhYz)<1;6>fjdfHt2n%04x0F>&o9K2B_^4)iq&T!q~LZG{MvVPDY^L(X}OJ!wDZbJuuA zJBJJd3Knb*mpo|^PY_L;jy^`5CU_~B<_{AerM3o-ruBob-yMW8RQn(=49jcBA9O}F zfVD?TMWfcyE$YzEA0CtgP&X{NNP{R?t4U;{a3K;9QrN!zH4s^1wLbL&bX*^c`_j2B z3SzN&mO-R$OL7!>w$NKow>?H;+qW3f|IYk%z{1y#W9IvgJ}YOuV2Qp1*_TAxJt=oi z1pDsTpW`a2OcgUOVzwAN+Y7!OJinj#UGv5#=eU3O@ioKaRHn9OZk{SQc4VsCq)jwB zwkIQH{Ox*^J78MZ4QidjIa4ifT&KtG&2>f6k8|_aIEJoP*>h>IpAtP}@7U(Ry(J11 zuPjX;n0K2vQ&*oxt*;jC$WR<<#mM5m5*-e|3lE8j*(-es+AzOfZ});jfFqVNdh`R! z1&_gI$L4w0wo61dbl>+}l+DskadEy}`X4D^>6S{;Ijp^xv@_X)^0>+?5hnChlI7=( zM@uqawQ=tBoG3@gJ)5cB&k>ul+snd!PCL*lE4nx>6BidJnS?mi#pzrw&0y`%?C^{@ zH=b+S3CtQ&6f-z@f3FMl%m?}k!H=`kUR}>2w&kLDc*dnXt#5g{sVMfsn+x@LM6XnY z1AN`ku++x2LCS-zd2l9Ucd5@a=10(EAD#eq+-kdaqnU)zIWKVxSh)M2H6Hy>PH;F@ zEJ*ym9Lx;d3>6E#Nnz`^n|F5am*Ds-8kM}8~jU+;rj|?e&*s*wg z35i`uj@ta>WGKTw&MM`C%pIgRn=+>4@8!9yl$`IJOdsH?e z{-{K=wz+Q`5bU?r7Kh5ZN7eIHK|rE=W+jd?#g_+EmzzU%|meUdUVMTWo&*s|c&ZRl3WDT#K&} zQS`~lK!W*B`Gm_7QEzzG_Aa4UMo!}{`)aIq(mJnG?Z}DV&qByVCi*n~-*l_QbZz$z zflU4Tl_I^*A;g^RjS7nanjB7qOnU8$EQKGGF)}_?8+(J*$$5TCc2R_3gkSfq zDY8x(>XlKUUcK7E!Al(C+8dZKhf7EU-e0Y2`Q)JBN$R}Me8dJQ{C7BGH^0hKWdZ zgXY+#TzCW?U`~yo#xM(lo#GjZTc>v_Ui9to#mF5PP&TX^%SMJ+xvPtvu2bq|hMND7 z_5RVTB|ET2&)=P$6*Kf2*|xOq6LB%EM_E&ZeeQpbgkjnQjSEGx>0vNK5pKm925Jjb zUxs3hECy$FM-BxQH~%b_{=?;`Yf_dCeOpuNts?w+^W@pmb-l-0xv6J3X}vQ_Y~OdC z&B9G`;NqI$n;9M)-2+ZVhr3D&v^DUEvGUEIESIC5}7%q5g1vof=8BJUC+4N zdp&FaohI_#mDantH}}=j{qg4?RO`XR)5kn#aEr??E2a8DefF=Qs+y#C45s%klMY~R z>>)sB4ApbLgCH!?x}Hiy_0^KC%fA0Z)m4Bs*>`UXkyenBQo4~LU4kgxJxZm!yHrF% za==D|bV-j6B}R;{;V5YVM~5)t|KR(*|Lgm<>w*h5*z^42{O)tkeeQE<*20RzH)E}2 z_e&1uo0Uc|Z8r`txX?Zqhk9Y!H_W~pm_kpUJaWmBdc4M12&geW>J{7ATq&}OB@qzU zBT_KN_rVNIY}@PjTiiBjbbA?0H)YI6v<_dQlAG_;z~Ki%ev zbZ-aIS~LUik0jW~xI~k&(Y1>Oh*zcf1{IoR%$xH<=?poQ*hmKhlv}09e5Lhkl5&&_ zcQ%G2=!LSZ2%CiZ3flJV3wPW*H0-vY< zgIsc7DAp)(yOd=7DQT{~Mf|ExRoBYJ2O^r2!egc|<{_f`CNhZiRRb){<2D?;T$y@W#nyepB=$Bqr#^n5 zmeo&yCw$al%fT%`tC(CG;H*ry9mJ$dH^bP@YQFw*A#29DqDOUUZ?-+TD8T3$kB0l4 z>vIMz0vhcXlA6P5gIi81c`(uVt=h~G+fl4LW%HYM;sym5y<0N^d0kZl#*zvbz==V+ zdIhrqKqhN@&Md)jhPb?r=60u)+3Mw^Wxr>ZsRub}d37okMoS>;j?(>Y?NwSD_!9z74-|kk?AK+SVK)bUR7yrxs0qUKYn(@ib>ckxgBQx%r z9JnVwt|}?vlxlw5ql(?+wyrQ&e48wK{}|#_>D|^ku;E$r`Hbr12QvMhV2_Zt4_NPwGi3vQN*`a+!ExJP_py_j$5*f1Le4ofS z%I2`dkJqw0ztTi=T~Kq#T4E}Kjh38Mt8Msr2uJzph*1Elh!nwak(u+{doWA z55??$9vfbPxdX+<5Uv#dBjtlIn)AvULlLGdy;TZSCt5;t4qDgh(~e~?lN7c@8NSH4 z&itkx5ep7nzT*^DBWLi*OhKF^evcJXfALrQ_L|-ec)K9*nofG{DTU#b>&nd>y3+}l z>@K6%f+qPd9|VxsNe=|5>(sz2tRuN5)Q7u{`7%S6Gi5rqU_ zN$*KNMJ?O2k|u%lTjHCB*jv3ozHgzT$<)4_iK0`aS;@1xWl z<>pQLg?owQQT|&LwZ2*s3Q?mP%C%nMuP;hTx58J)f4>J(^kStcOv>axpRr_;R|i*# z5y-OgruU|Q?#aL%Ge#kj-^MR%Do}-VAq!RD@`)+x-C4ax={@si;^uaSBqf!T6}C(_GK^wYcn;XO}M_ z{v{!`eakenfMQr^(h|i9cijJyutR7Xd^CN{=rVqf$8QePW}gL}LdQ{wc+SZo9Dhh1#JpTv7P%sT;kYxQ*4OYho2q21K`Gk1nLae5F}g7T z++2B5O9(c1cxkn*-5N3XeQX+;S2tc+yCqw1HztWjajUu`EhHZQFAz%-J#crpUH<7P zw|MCnaZU%x#Es|0i}B5ngZ~E)~1Qos+$vp-Yb_%ax z`xl_@n&48sUD_zoBvD+bNCI_kCaV}+nym;Mxri^0KObTNs zDeCxX56^r~M1<#Z8j#5pnoW8!tb>t@sRE8Tb0s1frEQ-8p7gA;dU+v2j(~S-J5&Pc zGSYcG^Yh_zK9D@CkSGrE|Bh9>=)fn<&Dvl^qnS^FFOobxZ9+VSWf;|wl;nYecf&=i z%LNT1aA%@ToCgGmOHfgHO`c4H`!8pHSWk%y)mUW0d5InFA$Tl_$x18UdO9@tYeyZ$ z@6ledc`ibKnFOy$O!F??LHx@FNIz@xVR)uhV0ChMoS(H#j#B-1 z?x)+x@Uw*-iJudZci6UE?sF!H5~2w9wCSmPave$`5GLAjPo|buT*`vFcv0>?US~c% z?eK<59_2ki01WP*IK2TEOoX;;~-qBbw#6W5m|1p}u<4B{$^?z0E`6YHPGc zY$@Ll?Q<}v^H!B#=^nN7x$ATCZc6-iEdftRUe>>TBff>%8{h$$Z$N1L_|GNIe-%jq za%*v-{AZC{pIvTRELg;ped_zzjz+QXm8#()0lFHa=A2B<3$6+38^&b~0cm4{B~Ckx zft7t6_l>EJ2ik19w5U&My}_uR9}!A@smTA#NKHeB@e`mD+-KS=H-%OP0C86 z9vJ#>)22CZzO=DWyZE)vOy^bh*%(FQGp#W(^&L=Zsqa~pi5ZOgs@X1#sZ(1E7kgni zaI19nXU4cU>-i7g?3SVsWB~tG?1;tuLC4{Rh6t;n`bNDl`UYIj+*t*#k8q zi%f}~?JQvFF{3Y=jsj&@dQ{S8F?qd>lt4vAk?$J$@cj~rSlnx6?DU7m0Ff0Sujv57 zzszgNx0y|Q0LpTPRo;iy_IayW75`2XjR8-~vbP*SOTx8?5GZ+LDv6ic<)B-S%>#7` zxd4^M@UKPF>zQw@K|MYLq9dR029aAMlWr*8D{RISzhlB%ngT$8XX)hlZorm zCfkm`bdv}d+NMfWz$7JItboGC7mT-u^LZXMb_;0T6;}|aJ}LuFtfB2#+O3yEC!qwd zPTF|pIXHxJ8Git2UVlRj8-W(WNl$HMwphFYOmyCun@~4TM!BDP+;m{xY5NgpN9?kU zHKnum>QnAXiK*mlz_156_VZ^l@t4f*RF0gw=3p&8I4`8~-pS194_}^v_8sro)JOJ5 z^*N}o$EX@sp8li(&GL}jB?jvcO?hd9H$?th3l~U;0Lb>-Me0yL{+qWwGrrVJLq!`< zL&LNG+S>X(_}LFfthpLT6{)Zi!7R6DT~twJ1t3K=fR&XJ@8~u7PM8$Iw_&DTXQ*}O z$kQ7XmVdvZ=e^rQ;`BUF*p`h#lcbwmMy39$Gbl1xMTY@uLfW=bC)h3zLla zZ!VkoSp@FV5qJC~yGZ3H+){4Op_PCdrOJt;-{q-$d|Sc@o?=JqQ3-24cZ(SU6IIV; zK&sVZiHGxc0;l_3Y0j%zNvH7kp%OAuf@Vj7rT13@^}lD{t{cpfHB2`Ud<0perN8co z$Gew0P2OL<9O>O|TpI2XSdTgZQE<&zv+=seROp938s0Xi?&Q$mC-iLUxY)@pac2v^ zE6GS9s!RF%O3#DhVeh(*ex~KLbagaO!r|rg*Z(PC(~1T42eYMB*G%TGMpdsdxf{e$ z9Zxd5zctaG?WI-20o4r)DLu)o`sT^adY<&iZ{ChU#AveYr}KHzz1;pi{*sI|rmPG8 zvy%@Yek$Y-Oe*qSVD^)|f(VK}i1T2Qn2eeQu`+S_i?=G|fM9!6kpU(TmdO9rSU`#B zhM^mWt%W}w5O}D;rxBm)60@Ujz9Y(mXmL&dBS}(Go06Z9A3%>b;-162O6i0vwS==e z(ml!aB~5$6WCT5N<#nf0Yg~SoqDqz+BS%h7uH$`nWAr^K9Eyj!|DcuRb2iX=LG3|8 zU*+`C_lz!!nj(XeeZgF!^XT=ux=Ls6j5vE;SGtm~+T^F&(rdnUR9BRXge>YnzY2=N zpRRQLK@0bk?A?IKGBu0dhUqLzr1iQZm8yP>V<8$1wifSQo;z4WBo1(u%8OmOgh7kf zM>F4AN^lKlB|dy}m08nHoC^UeQv-`&5G|n%0lspbc9m;^=ZM4#%g1SrfOrE%<(58dPKI7Cf=kAwK8wSf-r_RB@ZieJ*W!_O*nX5do-@H*8RV-tOWo|32V zXDq+$0>$u$ebA!fq|ahe!{2`XAnnc)yn6}YoV}Kcq7mFnZeh!sF$j;lk5HU$zd50d zH}fW`=oK-q0PbbAm@>ClQiyN2pUMSr95l2F7lyd47l~bP^Cb)zPR+OqvyLbC|6FE5 zvku#NL@>JZX2yF2*f0Ke?k;C^xA&v?^>5tfAIBrEfHQ2r+6Yh)QQ6MR9(ePfjG(2F z6&Lm9ejlw>8)*!}$3Cn%3H%)8lI7UaM4a_yT=;G04u z4BbzQS8hQ}@P$7(oU)7loS;O?SV_nKrKDAlFt{R^aUa`Rnke=n`fH#1w#Ljycd;xw ziE=L-2uTINE=rzrpP&YE7ZK^mD;*Xh!6`ebg$H0YmgDDQPjV^ zvfXv-s<@)Beh||05U%%G`)+PcJy3xjHAa87`3E}?FjH$fW=Cx4O_TFBG3 z4bXrH*?6<(Rv)p@={yh>qRVx#cKw%F@lRslInbO^Vr)ns=w89seh#ulX3K=wbcH`C z$a3Di`0(_dK^nGt-`_M0wR$Bzx#zWLe}L=#ux)+h%ZsG$KL^Vh!Mw9-i`nT26d|pM zMnk(7a(A)QcK7G^%$U&#wKeE6*Z$?Ijmf+j-;Sum^wUQmi}1sfgR@`@bRhv@QZ#g>HFTd zBLj}RFXjbXgO0QLK34E;oeRjD+rfJg9*3|OwwojL&z$~z``9zF;rVDKnbj>rjC$O{ ztk4uO(XiXdDpnDRTdRiUS3P!H>3twk`d^3`*gMt&?ucj_SZyf7P)`)K`Pu1IOZ&as z;YSyy+CjrxyG`d;h2o!$Gs%w?Y38a(^KJRXir7$3mG24CQbo~;PaUn( zO8V9AS8lITMbq(z3!V7J$9M&QBt9M}AP>1*cWCVm+Q0PkRhN|QpR#P%eHhQLl%wz{`2_mlV6 zJ)7w($ix{SjqThbEoD9C9p+?*$=e$j;&Y<#{2qbK`Gi;!hQc*aL7(YAQ1)8n1h72! zY^(&`j|XbXF0z&T7MJRP-LX!NH+C4!V$#hM*x2Ck&?Gg9K%&qv9-W##&M~_L^r`r; zJhgHQ0&!Z=ZO>ePE_%1ipg@H0QDSZnyiwYo%{XiyZ#|J0Yq>GZQ-WjOQ?>A|1^{VLx*`r)kl zWpXdxzHg6}VYE<-?4@N0ku$SU6TkzsG_J=Q2*tVK5dE9XfA>w%FlE^tkmmsSKmR_p zZf@}bb+>=teLXAxEa88@zI)igdjY6ETtENe7XGCM{6i1`PF=br^O@u)tnS;t{KNQe zHcvJU>KXv0^}K#%rY94%g)YUn{#MNW&mUP3Yp??vS9epig>qRe+Y{7*o-o(XzcH|X zSI9r#pL71TC!KqY?uaPrWuGcAPD?bu-V}@Grb%vEHe_{Zx{<{41`tkg`;UFM*dgB|>^=Do`?t~{e0n*zy z-qBny&Fja##Qy?tAX-x3S9pLP+27Z$zl=m(lMMfT*t`PFUz|hC`ZycIabC`xlaZwU z2;x1%7#kC6#IWAPehbNdRYOv|KHIu-W}=Kc8kQBEEm+9zi`_bF74WsgGD z9*SAAN8WR!uC)}4e=`nr&ULfshZY;$WC|mu6RD;a@SPV8sYv-wXmyw2#k+=`tq#l2 zU9X9UQmBXAhed~Pr|pJ`wu^AQ5YGj9%&(`OPO>P*B3J^}lUD-f7b+Hd`&Ygc$&uu< z?5wj|n(IQ>5=a;5VO7eZuhBCq41%Nc2y8h2D%A>=g-Sgl`PSiDtD#JFVXZssL+CFI zf5dO9#6GSx|9$RZB1LXmsDhbFj`&-U+xujq>-Cu-^G4=VX9&dZ=R;$uIlg$Z##dgP z1Yw;Z5!5%e3RQ(GVxFhd_bOXe4>gxDjybVZ+A%UQG6)alD30eOU#vzjBwPCe&3b1) zqHU?Ce@w%RafHJmbkT}F>v4JIu;9d`m7%*8MmH)g0Ra$)M>vWMc9qXIl3XLUQ=qTx z-aK3jBV5(IsAOIi$F=Zd={*)2l~=8;-;;W)B6?T!F7^0V{(?$f1K4cela!WuQ66vx z9n_*gyC7=S($CqT!=KI4w{!nMlE^eImA2xyjgG8%0>n_@>Qz#GVY=iEs_W038XV}( zlY4P->0CJlv(%dNp*6g}pj@Oc0GXwRTnZpB>t+mKtGIWWY3ZS%M&IG}i&Az4t1eAz+kl+(8^EQcsu9Ntkfy$rrT^1ji7d#z6e3i7SB|hFarx!uSwT`lMg3 zn6>uTKc*UrkK0yH@f7W5VoL2eI5no(rK0J4UK`>=9aSf(^{PRES#`ssczuZl4=6#3 z5hcZ~rO-eM@Z@}pMIqwoSj~6@oRccqIeUJZJBhQ9u{9*Yq16) z)fcAVT1)eoq1l0#d6DH^ykC%H96z8|j7G3jOY06qzrM%$TZ5c5XEB*sEuUFHx_EB3 z+k(5S;_RQ~oZ-6H4&E>C# z1U`uPo#n9XCWG;ND#(2yUc1xI^<hwEz|>NKds`j5Wtx(Sc<^sJSNe(1?>oZgBJ!5UZ|{9 z#o>oWvT?>mFd%h~M_v4n@&duH1uPq7#zLr+^Y1A$2+q#4UJtwzBKgeL8Hq?Vk28EgnVIJ9l;+BP`s1}D(EJU=UoTe1t*N^e+>?w(IJISO$sUU2Yd?By4q7IgX1z-NT! zO?iIaLrE=;!}tucqUy`8O)ME^E|LETJs(YMyQ3#{ms%T9d)TJK$Q|Fh3^6%C%^xAn zNoVHyI^B_NSQ}5?CyR8qL76;%?05Xs5N91@!6Gl!VobF~>GW?kv+H2h*X&41N`Kfc zG7(6E`)p0z3YSRdMOhnN=}^ zO;2Y*byDc>Rb$Gy61S4n3XL73rM8!L_CT$F9{3aBvCTU z8>8RBm?X`n$V41Y@~(dP%5_hy{LV2P50lQHp0>K|RmCjn?}MlL#?=@>=o@v;O^)-| zdR(g4c;(V1{rVZs9LthtrmHT}q(Laey@RBUQ0Vm;uTZau?f+So7e)IUb(t;B%+(^r zv8U1N0lcu$?ydmI?F2v1y>$zl_W^0WM2b)Ce3oXjL&W2QriXnQ%_H22{-q9Kt$2u@ zF|7#H>Fsr4wjf@4Bvz0SKv?IY(pm@Ow^Xq=%%CY7V%@FY72X$DGM|^h z^+P+P>0K?C;rzIdDQA;n{@TrJ0PFbyk55>R_+}KB=dJRulk;LX-_p#?xG)Hgn<5f{ z!I?qHZ-FZ{{mcF_yhFW zCL}MW=wlsRS+^w1nQYcJtG-2~oGnu|eLb@h_N#$(I+P_vYL+h^^I$_-M9q^`T!Nc? z?ojLCy0YV!Xzfp?;Bn=r@vy_H2Z}UPN|a73%K7eFxKFoWY!-hKpEUk_C9}_kLvj<< zw4z3W{FDFT>bN}5a>W2Wk$GHSUk4D;%={j0lRg&uj{%#al{du}rI?Sb(a$a?*VO`m zLQ@;#*b+-M&LdPHJP9d?qqt{(bNo2&qwJ)gl^#e4UPvrtxL ziA@`{LGdlIB)bba$vDAq+SU*?sM>^UT!P>4g#mhVUZRasFKHwJ7C+QB*ncokr{y$) zE){B9f1?UGCeiZIb^6%zu9!;t8+s+9KEHF%f5`D?3+N5+jhSK&dbZiOYrs`K=74<% zepEl)lBuYA8(VmNN)erCc4ByX#}fT=z=Q+1Y8H`iJCzxV+0Z9loLE|9nV(aIpBTde zJ!dr1Ly+AClgo1ZZSsD+Q>y&T1>HG)%MCjMW9 zr+bkQlb~`{?)Mq()jCEQ#p(9~PQq1&t(gTMp$;&IkeD(PPW1bK7V?O@tUN&!>H1t2 zJ_?`iNIt+AI_uPexf1~Dwrx5d8abZ9*jyROuX#`JGPSVBo$5NhzUI_=lt2Wnjf2LQ_=sR z(p>Iv0`F|^ekpUX2hBKuspJ?0(enTt^%f6<@0p=aieZ_OEk73<_;j;HA-roZM{k|t zVHP?mXJfy=^86^;>kT_%|6Qd5m`S957>~L-%yQ}YW=fl3u*wlFeu*PuSlcp)2ilp9}d{pikL=sd{a{F1xl=yT&;8T@G!kz-$2O#RXQA8LIF%{cELVoY<iAe!n>F>c?=9HX5Yc# zt#yIS)lEx5bM_4YREdWjZ_4DRZU=F5^o3lIipH1D)*4zy6vrwFdoH$pjEZ7qaSi*z zjUoEnP+6O0@fd35_0gL|+08@lu9pt#oD#&e z#wi26UX%bF62N@D!-V&l_Q!~nfCFA0CI$(2J|LKE`L(3N() zV8-9KtU&s3*v~asnobx*|bILqhkBZ znEf)OX_tAiuSsPXOYQhfC(E@%^_*ZdA92y?cZ8R8!+m%6V;=9iJy*`O(k)DZ8P0e~ z$M^D&QL2^}eVrQ>%F)IAioYXmWExAJ@~?fVb<(v{p{1Wl2r0Rf)@iD=B{Vbt3S0CS zjt0$?-WuBp1FcWqVO#4A!1Cp^so;)%5XhDlH9@2LIbG}{19^Ms1OErYGaV4oX~U zJHJ?{r<~64tu`Kr#!tc?PCB}iVRRdvKCKa~J@yXs$^}<)e4WiX7MhojuCI4-mHR{} z;~^t1^a`*X!TS7Wkq3iysg}ZSgS96_r;odCB)yNP}!3g zp0^dpLaF#Ad7;qDHbU`7?_p+9lvx$+IOV4!+85)(#zQHuuE&^!rSgbrb??oF^fQhh zNJB;I85(Vi*f3S)2z*0$StTd>vuGCJHdL~YF-_%18eIg9R!y{c5jDPO?%@yraZ48W z8m(apU2MUKR{RGEMZL(5z3Ti=b)xiD zonuonRo2wxT2#IDh1UWRH0~^%wU3A4UB8=5H=n&}c&}HZCfifv=vbk&Mx~rrQj?~q z4YDy=o7lYm5305L!Qe;n-?cdx9c1uPHK1Zn-lOP5tCoo$I+77{{Orq|GUauc{hSgI z8FX3`X7|!>V>|q~EivCa}0vX>HZg)>Jot>{gY4 z@{x7Wv;SQ0=BaoG$QbJX$pTUSejE(`R7awpAiZEbl2s`$xpE2?BTu@FjNJ-g-41OOsF8^LoUwBdg8U(iY?(1{0>7;@}bmdwM%p;5%S<*w;cvVYEqw{mn=5^eXb7MQsjQ z{WMD?f_48^a-!2L40P)l7a)@OeqX~c2UalF#LFXxlJna?am@@q=E2`#iCpFm?( z-ybL@l}I$6Xu3lCv)hInnAI#Jbu&|KE5fA4toI2Kkt{VNG0FukQB{lo#OF}st_zg$ zMRgfcx1CQKEKn_3g;jK#j#=H*A$!_CmaubZBZz6d)Yn$d-EA7kgr}{){~LR4qgyi_ z(YCFA;F*^(iz35=s=oxhxlm;Xcv!i?ln1dS^mVMKDpToZHiA46Kq!Ok>?YvXzaDq4 zI;6h0*qU&O6A?6C@nJA(C(T20WLj$Ec?yyhUAn++cheWq{@C{Kfw7D^nwAH@ZcZOm zSj$PJTdZldM?&B$WV>kjQ>0xMb>G+8>{e5(4NKvUfV=39zluHj8b8gO4vo)Cs-rBA z?1m(658M0e&Q~I#)FJdUrTZ=^)`WLQOn<3UK6nKe?U-2W&2VBBEln=-cL z_e4V*rmMT90tn*dTguMx`kE<0rvmPn4%XI>UI!rYQ6+jq?_u`jynj8S`om=OiE~;{ zZOU=S)Z0!Cj&d@&n1}8;p|RY(O-DZUtaekqW`>)^7W00#r{aXZAxeEYUmM|na|~(h z9&QIIN@Gtr+2rl+&@nL9iZTn^4&Y0J`>But(8bEE#k! zLX>U$65TC~)%!++ObtpHc~p%Xzz+u?d^)-S481C0B&U>|6G%~ zot?9WIaNSmMpc3qn zpvL->k1=fy0$X3j{syXE3v5?RjB_;KdB=GJEr2~jAN$U!ss+t zp*}>UZp!&R*KEfh+26QKWwTy=m*dpY!HWLJNha{~jQey;&a-p#YYCBgKM<&jvSo|r zaFF>jzMiiIc9CUszp5l8CPsFhSNk@uE~Af_Eqdu{Msop!ejW7rGOHzgtf>fwJx&BV zujXg}jg=)C?MzZ6kj{OX+ZC7UGlYdQfk!}K@q9CqkDE9qD7JiQ2Qrsm>gSALjn^vQ zei--@2=A{+5Cc%K;@HXST|;P3ZBmcq->bO^T#M$H1XuuU`hKg!>3oEp;Zd|@ij)L` zpWvFA{p&`xBHoUA#D>E>y8t~ zt;r{orn((I#w@op`t`6_t5;+BY_Rg1If4;(tS0HKfUjOY#KPQS{v1&g`VHY>5;zsp z5M?reD^d_me-gz3+=tU<@~u0(snw7wZY(lmVjC}j7k=k2)WaI4OgW)@nCmrLMb+sz z*W{k6<(oCNn=R#ncfTkJ!ANbaV#6$5oF-jJp0Vy#szO?#J^O}Z6&!kAa~O<#fJv^U zVcj~kP&C+=%HQGb63;jR? zAnu#5IpS^32I9KTK1D{TPmXVkpIQE*huzTRNog=wV5M}2WDIZODFH78VXR-!XC788 zC?FMpa2f9Vs12o82rqf&wW`=uYHjj&v4kZn(NFLkfq++p%AUaAjfhF+*Tp`Pp5}|M z6e?H@KV-=CDhGgq)Ayy6uxqtsi!Tbjh=Wb+{yG;xf=zJcsneHe?E#}_bp0j-LJhRScl z5vLALnb53b@W&V<2FutmLZnD-n;6;*?4?oIYHzFfv9^x-*0&E;O`kH29&<+=@P61j z%j<%Fo1)U$$WQI$?Ni~podEg1Tgg3ZHw;+TivBN}#GEq%1xW1@Qh8$tCCn075N9PT zI&QP#JuKdzfuI!ixEhtVAQwADO#g_EnjY%&Ej!;JgBo=GvW-GpOD2`GrRM1DRbd)l-Yhqr`(J%fSRrH6}ODA=#-?oGTVfuZ>}<7r=X1?w#T;70}YvVRQxXykb5Vm-oQ& z+;gVJ60Y`;LzYQ}Cq|huG>Ecb7{y9c&~SPb=IKg@&1!P$aSf-keo2r1noVzO>?7Lo zeU-??&fBCjg52XtuXUUGrA75pioai*o{hEW;!FYgq&VsHxXZSi)X1_&^dROf-bNgo z1tLw&kx#k&5gZ(|`e}zWe{J=gtJyNM+iwFth3~0UF6JhB6$KUsNz9&x-sKRYSA;j! zFVBIlX>{ZRQV7 zkO-YV5hT$*aK4e0QtP{7OJ01X8lS9X?)a4Q@J!|7nXVtz^#MiXqmq=4rjCz~@+~OD z`rNqFd3Ka;QBh7|ee>2|&xC8_L+ttBUAZAuIN{?w>A^@R5=C~Mz)h zVF-%=4`VI;bZn^$2bc2duqjfZnvXT4a15e}d^rL6EC$nS9fP87jNTt9s68n;XXHPk zBU)Zc&B}@3*NrgJeXFBw<7KOIcN^KOrMDF_DHILl@kSPL#)Bpaqr&ZPDgQmqZqsNB zE^i#;@jGTv$7_681)9ZOZ*UvJqlso`g@VF>@N~C#f|eZ1KkjcqL@7pZ#W#Fmj8xXB zlzdX0_UW};g^Y2#DjbxgV(~9ZryvW_lJ8F`Evh5#o<;OWVFON7@Geq9@3RYEd z63FL*?+gDDyUpP*!Mc~gk#b1;_z}Y6IwrR#{gf!SSc)KLVOHL*v1i`a&~YYNsj4KN zWp_9u+~?l;UlT>-pyE8$Pn$FYD6jnOvii;{R83?hbE1Ywwy>p^Q&jBn1AAROTs^*` zk0~J_DHw-d8eY!I*D3iB?cKN);3(G(3`TQ#0W=lU-={y<7ZPyMH}zWP`vsj>=H zKW;N_%9Er{^W69RL?Rm8#wjDm)Cpe%fRml&2wy1TVE)qUnM8qK@p^KmhG07sHklknNTIwIaU(Aq#C?^>1x=pLHfv88QHZc6Tv`R%A3^?4|RoiWxuc3DQ+zZ*m|^JA+7~>uE9D$$LBn3>ui|WF3An&ZA)O#s{+-fRU`UTM zKx|4$BX@h4YdV1an(?%Ner9Hg|7c=fFSZzV?DWvW*3MwbPQ_b40qnoY1kC<5h;5}g zZ^=hTc)16IoURV_)#r(M=rLRM(N!w6w#HrDQ^ST3FPJk?i5AAEFL4 zI%TDS6ttOZ6mB3dAOWp5a|ZB_a_lDis}6mdMA5N zfrC0^FsgWiiqKBQl=i7mKHOyrGVJv~>CR6Y&uQ#3Y{xlo8`}>I+208UT%+=-^tQCK3 zD=5t7|D}9j4x&X4H5WT72{VWKHoxljRYbO%yLc*&<${}cXcN*={ElZ-4zE?xB=6Et zkMGBO_&xu$eo$S0w6mG|v_J@RG$#MGt=wmm$=*LiMBV7Jz5@v-1O@{Dfg1Y1R-7Lm zURlYT14%*VVz=tItzEyf^U`@A2pB$SLyy_V{cw*X@X&$ESRSLK8c`QPY}#%uP#-r5)EQC;b|nn+wI4q>uf+I(`AS zEOb08%J0brZgZ6Xm%WPWzT#@RW)c(#R!=pWYO2Q;_ej}cJiE;ql4fXDe9@cj_ah3i9@TsdVT<<#~X*`Foft zb7^S&tqBpPMx;JQUsJiTRL!}g#Tz# zKFu|=Zrl0g0SffbRy!2&+a(i%<@3z{C}q36nD39I`SJgh6r4h8EkT} z(gY2D>4?4NSD%qOOKj;76u7N4>zy9FxFRvDt6{h;{PM#5WTN8R@+pmHcY=lQ(>mENmy)ZhuxLwL_GFd2K7AvOCgGwquOkfuxQ@0{x?Wuv; z0gU%IG8{!VZkg{0H-3`NdE51L5j$iQMOo3tacMrJeHE5p+jq9=y0Jhn#PXOYU43Gu z%^-8^mfn`?|B7;zJ@Oh)@ba6VBhlO;!Y<$*Cv>!h$$W$+p`P(61`N02Or4Oc)Ei!Fe!Ag1b^}_ z-S5Vu=7XuWr9i$*eI-Iwm*2!RRn;E8k^%MPqOouxgJauG)8=D8(Yr*e(B%@X$;fv8 zNu)$9E6d*iMGHenUEqqf3J+c*3ck!#5L3#<%h=Maw&L1Ju{4b2&0EVjtDwbsSVupQ4@NMz1Zosu3O2;?=t#8B2!8NKIP*!;p|T$LSSTd@ zG%vyRe@&`Cz`51bqO6_ zJi#&xK;f7<2zE`jBq9 z+C{*0wxz<(S8b^`KllByB;%@HGg!T@%k@3;F;(ei=?_RK-3E%{|m zZ80TPu$3KMO@4S-UTE1+F>4CjQhK9UKyspAsv1fp@Ot*lMira6dEQpkrmlu9uZn!^ zCa&HcGE((Y_vZMS5R?iw(Os)jV!kWqIu)JOPF}DT8D^id?28Xf9e^Z@$VTjChO+UU zaza2kA0W|hvkQi~MI>xYm2z;HzGUbYFPiAt$aIy5N0|uS`4EC8IzKKVq!$=4jhn*H zSQP-WODO_4de^CY;eoml!zzg+KJFj)G7R8Ei02#=eCCFo!$-%ygqJ3vY6H)(*-@#A z4}_&IoO5CaWDA+qYqN!`kx#|*J}P5L#_^F-0B8cIz+k)h3)!-yb20_ zgCo{~2t(N%*tw}l4$k}dkBWyI7ma}mW2M{QgXfOL=t6`GEg$CvwpESuMJqDLmk-?n zRIs)DI|J9UO1rAJd$N0^+-Sz5%b1zIq=LrJ9OC;2_!!oUJCgyP)-T2!GlD~|8g``} zK|J=YWZ=KKhfJP>09b>OfYWL3tQVUz6yNDbSRnKf`BxenJ}!^6FVYEZd!l8065EUn zX1pf9#_HT!)zISPh#=T(jzvNmvI?W`Wh^CsvUKU+J&0zZZg2G?L|=a0bu%e;=W&-* z{}1dj<>>8@e6!Kc$5x8S=gHr14uQ^caNdh#aQD4cfped%`B7O+J_K1(2>;^a8QDg0 zhiH5919Sbzp+|c?rx4BRyB-a?S0oRymP>X=;ugGmCq-;e=0uqj+{Z!H;+%Whlgve- z-L%`?XpmcTC3-IAYG&VZ|Wd8XjRqkQI~BHK*I zxnr}OsUh$vhkrv~;3=V^2~4ef0I8*u-4Of@gj9;a4|zPInbQH$Uh#VcO2R}YxljB~ zo|tW5-X8hTd@y;zZDvr^k1weag;e!@hQO+O2-tI-iE}EY1v!bDDcfBYX%96=`6UDTs-H z=ss0d{km~%?{xbV|B-tpc-J%Y5mw>Inlb0|mucRl+}=2YKm83|o4O^OEaow>1$!pazgcv;?s}nNYzXs^`S;XO=PpsM$i9}sK%|Zk=+D|Inlz92B$&_IyEf9K!Ju|p-`o6qS>t&Sb<09Wa>6ZpN`Ea1|%84bpUNxt@-VGGuzWnJW#YYsx~FXahj01(;u`2V$Ei3i)cPbW% z>c9bNc$g^9XZ@(7EvKlG&vR+|(o9c$VoAsTcPZl;otl*wOX{K;9hVghGT%}^iC5_8 zr#rv*tr^u9VYVz^^KitRd79pnvDzv4-h*ZJi73aMsMY*bHMN{x`R+Zhh$x$U#<9c~ zE#LBZ^0E{6HGuspzunigfyP!~+*`b_^I%^KJS&b*JY1=k(E9cjFgAEnc#FcFVBMi- z(d$S0){a|Is;_SY?Hq6(3arjeL!dakjC(k@foZIJr3?_b2 zXD0WgMant+b5Gc-j-rz=%qw!w7yPqtug?hGc$5kZXVh_VO|_LW{}w0g3%xBdY;g{M z(6jZA%){a-czc6~{X}T?!$Q$Y2WZp;#r&qA93ipq(-bRGvdE_5iEjH5O z*Y?Me?XN%I6bSZxn91BI-CHCEcI;rr3|NC|OiYKvB@MR47X^nnFJj_ju8BPfPR!jV zFb1s~!l}W<>WYfWBY|2)o2ob2aD4la+^zF?b|Y~ z&yV3GFWy=T0W|2izT-=!<j3D3oG*jLFF{fEYr~)PwnyLvvM2p_36fw zHY|7Fvc+N>>#3fN&(m;_H~si{9ReI^^K(}MY-RuB_s`eC4gc|}-1YNmnk|=(vv$$l z{EYK~ME%F-e^36uX8GX?|6lW#OVlE$INP)6eVU`Pqf!fcY=`#<2sl$)>Rv2YMc-f6 z3{UDhs_c9z%c!jW3IFi{QnDhq=PZ_+w^4F#sg}IjQ(z;I^D3hO<_SZbd0nE-47^NY z^Wp%D=BpiH%wDdA>(Q1Mc>A;PeGKx=yQRrPC;XfPMN!%Kc-Vf_){t(y2Nw9^488gn z9jN;I5$x!Xk|*9R6?Jy!NnAt(22`8TsRy_8f%mU(sWjyBO2&EY!^FTO8253GW{pv} z-simVi#tNAmH6NR4xelT2xNxhjx9)*YU^BgS+xlhKs*aSd1Rm2!ifRhmi%4SGGPVW z`_97U1mCEV7r8S>hj93<<3X&dYG;V2zu|S7Epp*zrAIzhso_*(pX<)$j%KcgQ-hRt z$EiFo4zqz*ix=`K+}T_DKl*y?pN?FEmi6}S7&|pd>052qn2O7?C!cVe4xLWwE0TJX zjbRfWIh%Az6;&}R<&;(_x6LSV&b_a^h57~=1-~&q`XtwPpIPB{?X|pSV`psQDmJTi z-Nsl;-X-l$AkT64hEPW{Qn%{dSa1!z;UZ!ckzAP-ps=%sD-=PT@#YF%gljC1`6#JR z5#5m5oFu)#>9;%|Q{nW!CHon~WZ3m8lD|XLeE<2f%S^6E>mC=goErk(eXCw**U6;D zmh53^s-Gp$)-{|(M@4+LUY{U0Nt}DV|A?6Eg;MATThrnxvHd%9ZZi}LXO5NMsz7-` zgS!J{a}&38H^eE-L4}?mJmO(pbF*WPwhfW~jP)`Gx|Lcmkr&|V(LdPtXfP@#pyBnZ zi?jUntKFUJS5hVK2}@rX)xO7#(zaEMIp;>fUx%Q%yonaR zxP8j-@v(r0V7;{kPbHaNpRt8H?GJqxCDq*WsUGyn;7Q)sQ`C}=fi-0f=gv6ywj`wD0U3I-gwKFJ`p%3ZN(5dD`rx?EpxRsVz^A{-fNY_{&Cqb8QBS$ zweJD#26Mqn*t}<_rDveXhAslm5sB?cMOz=QzEH84!BOAeB02pws?L!e+Cam+X4kDb zt+&p$Z%X<-Y%GD49vEYUSnFD-J!zVyOFW)N2qcVYGkh)}wMt<^Clg@@W_)1WqH7-g z?lYuR!)Zc0t;dU)ia*Yt?nqzP>wR?*aT;}i(D1~YnMQ2?E@>t@f_WvYMU87O+Q!Pe z@A@=jCbf)bv?8s)8Z4mkvMJgjkA@>nK86IluDRHTHKa(4U3#m%CcfsaLE!?gI(Egb zB*H8cKX|P?38di@dbcgr7PeFK+kK{L8C-g=pbdZYY8?a<2`+7jqxLA?{kyR`%GgdDpu2YD`pX`9MQy&-uV+q+0_1BBFqlF<2~^-K*6# zOwDi*vUwleSH+PH0c^DJt1dfL}^G?V6J{Np+ z=`^~?1e(2_(N+Y_jf70g&V2!!KTH^-3vuWU8!f`m}|cW+9#H-uXr1)PZ!gh9kU{`m;K(# z77<#;5c_i~$kKf}z>;8O@4znP$8b1DiSG`7+?tzG%OKrqzpi4UoDpZEy>~TJ)Si3+ zMjphL1b>}48NZT>ZqLWf*SOqA!w~qj#70b_xt=WC4n>7mOH0AcvDaH^JwZf9GuN8) zlQI6rlmPmwg|;)j0zN3ItVXHfl3&{XED1Zdf0+YV1T3@H70_%n2IfXw{r&Fr$xnW} zrh^4@~#lR3K;j!v7OADP|MtCmB zR{d1EmiSwxGF9?QMb;{8Cu3*cQs0dKzJ5=#-w{4b>ey(IOYMwy*ykAnVdA1I-27eH50@{XNOBFaX2O&kjNbdNX69k=_S)a97|TS%5=y^LydbM1dW+XRT+!fN znsA2mo(s9Mer4}dr}U8;r!>{X6?ZHjAPJ1*X?oW@?Km@b&l%~IUg0POPo7I!Zp7fZ z;qIi~S-+QOb*E8D$wB)q;qE;=dP`A%q!4y_+G%Tj9pzdqy+ZDY(D7HUEsU}xtQ~9Q zB6RCx$8M!se=f&)oM^bwXpM@mukZ9mrV&)<-jFXimY$@Z@)Y##0X2fN@z}cRorAFq# z4$q}6+q}(XByJ~LA$D(h&*G2{7GN(;6vy4ck8Zij?eub&r;hs%n?;WYN`>0l9B}D7 z-7w#`kYyq{>F&e3#YKh%7=}X?pzl8Z!%pG^b6bdO4vyXY{4b&XU!MQN75?w^=aNowQPG(>By)|8G^c}H)uX*SQN$0mYNT*RQ;odA{$)eMD zFk)TT)zH;_amDEkw&O%jQ6Kn2LzbLM=q$uLsD?&P385xcF28jCY`56Wj$FCwKUGlv zn=+4qGILy2xi5Y_V5!sS)L_}EwY_rbI>D2Alu-y0jrx9voBoA|adT-WmLkeWP`KK# zW;B~T*YiFNn|Irwl%rvv9eLr^={v!4*#&l3TI6r!V!oFF#OKy7GzSKAiM&k| z9J~&8hsX}W%_F$M+UDH_z7@v{r|%>-Vs70#W21csT$3Xo9J~THnMmCMZCLYXWu&~| zTmOF;V40X`JM`em=!t|KW#C!ebMf){Gmr&njSxSZp8skOu-&*Cuu-V1jrRHX2cbe2 zVIjEPhT6bF;H|vcZ0KQz!X@&%#O>(zo4oL+LYK)a>|hJR_uH;EV!n=Sg9;gg^{t2ZBv>|t zC-VnZuQHE@72BIWHUf%YDOE5^D36#!nux9c?k{5Qll;(Xd7?8|}M{CH6RiQ%G}uLF3Ir<_fJ!rlk9chsCAakX)m2gU@ zhCi*_-ZIfWD0?1$h&A9{_pGX@)fund###)?9VW9Qj&}Ix7k@u;JV&>LG_=-|ZdBqv zyarzM_ibZ-fNeo{{+jRB#cq4WV}mMUuxtb<=C5-%V&1Jzu`4aV zq~mHS5f~G89khKeRFyfW*&0~SgRPI;1I^B}#aHRnR8cDFQq1GfY*iYa1JY?udT4JJ zFZBow155EA!)?T_rRTem-w~G zIgc`-`l@;UQF_uMoaFpXh&Y0QSssxI_-*KMwQvoD7p-?hrjt}Pip!bKjt^%Id+Vj2 zKEN_jJ9+(a(4@yBw5(KV%d3bI53eR`|MYK5JSyCyD%)9y->K8x-yEy?c4a|#H0P-e zYUQP!ZSK>Acz!8hX+YurHuOHCl}^o~lP$TmEEw>ZvgX)4&J=UlQj#^JFf6;`Cd>P_ zY%%`_>TrXF_6ruHv=d>FT1sWV&pS6YgPU!1YEd}lczST#n4g7J%!iu& zmbw#wm^VPPEtkQz;Az{?!^%A>ky#wH#+SggqZjfK8F@BjBrrG9;J`%$PB$q_QSgUD|V{>9Xm7hZ1J@aWV^!0dfmuL zU*+U3lJCT*bVchKAyh!HgJ47J?@25S1`Bt~rGx)KlBj`)S08^}Ffsqe_tuz0IU}yi1U|$@e_T$s#VlcOT zoiEjQNAu9h`-$svOQp^fs#SpDx(CICMv;QRIodM+tJA4L$AtRc)|`zIF?>}lC?OGs zVY6Dd(_?H;1?lI1VR3$V8UxRsOCjIYI&3|&G*AjAV8&&GqE4~olYfRfziWRFb@vis zM((u|RGfJtc5O%sy4<*+>sM0AU?Wt!;G;?kSDACabZk-LGnOIX>}iqWuA0_`O(I@9>%3rwM#;(7N?&*-m() zGd|&}G)LdG6zY#M%V*?`7S^yQ2;)Sa;O~zshT6BTjjBy%s{4yJwP~Xluu9A~j_F8D zkoiz{dLp}~MXbCI#FX+C*R?CfscpE=Xtv&&b#CDN+}-I1{prJe$5D^P6oFFaVHU$e z**z3!jjFuK)w=F?@x;+gzYtL@DIoUjk8wh?t8DP?kb-6q@g@x7lo*Yj&C@58$E=rE z*++7cETu<7g){61=mdgzGjTS#;OOzp(d)!T0hJP&p^TN)DS~(({+2MJK0ot~@B9+G z)vAh_4ZgJ-!Oxs&w<^&xc9DR*vcX3bc_>DM4~%Wxl7YR{olm!E4KvYsB{haZc}BIV5FdZ3-+=HadL#@7{Sy+~S(UQ^#& zH_3^DR`7s)Yn_Y5fTq_?x;{j#3;EZ~Qf%n;;Ahq%sokE6+cn zQ$B}M%Bpm;W|((I?$KMiUp2M2C`Ui?6s6=*F@?KOu35~)%mz&@{0Vp(=g#?}Im}0B z<`4n#ZMLw?oE$WKeP*pcu(qsVEuSxYaSe&daV6Cj-%Tz}xQvur_GZm78dg(xmS>*2 z+9MC9_ZfQ#tvo#kx5Q4IgXjMC@#LKGkbp%{{II=KLGuaora*>P3tW7%Nfl4ooL-644i>=kgAL=)?Evds?yBY86D0sEd|b zOmIK3EN^z!v+VS1iS*>0U~J2jPJ;x?pYP%(#8K-m1(@AK2C8J^;nc?pUq-bIqMz7A zsbzI2Exy9ya#s++SSOx_>{4Wsk_OYaY<7KVhCYq8I~KLc55|9U$r`FC7!^A?NC~qP z1#eCHu_D?}L&p|$#8Mu7R2rU6R}|Q(;54;R$)-)Wg{;+ya`@_^Ll<^F zmNJRws%RCty6kUOwuo-9{0`91&%@v$o;;F<#^98xHO++VVn_=KaYhsb?uJp>M?7U# zleT`YC1p2DneXz0U-6_Ec_MbR0n&#jrB*ezM@>ovB zW4JQ4b|%7lJzZH{iR>4Y6Qp>V>FP@Ebhz!x0+4qJ+4aP9DWUIZ*zG4V*2XfK45Vk& z<;tE$erHTQ4uH&J1a4kRszHt;J6@sJ4xO+k>mDNKYZ2PDv(@t~F?Wmh_K--IJU4vH z`)pEDU-q6Yfnc6xKQcktJgk073amDHqEIEO)o{@$gDBH()yi#^+HYm$zbZhR&LFfX zE0@{Ca#!-_oV}T=k<-6Tbpmc~-=c3%s$TmX8lXEuRF}Gg_{LU3sXgoHPg3P6!|j01 z6`l*mT^T8lQZV<$&M93mn%FAhkz$dAEBbi*SKaLu@VY0 zs0i0gng^SV8x|fJj8EuxYRHJOHH2UTG-~Hlc^Z8Uk^F2NI+JP-k+W>Vv{80Ne&+me zR8u-5J-qUTAD~S#O}>N*i6u$#9Lj~g^_BY0_0K3BF#iUNv5|%2R{2#f58cQW-M(~V{-z@OtWvHCXWkC>-zjfXcs-0y8gQhT zNf9>Ci^_lbUU4rN|3Gp;f%poP1SJ%)g zYtyUmX>gKHH;lHJp+RX)%4?`zo&MHgJF|od5(xb0#i(3n@Tigda?NWd7y=ORX*5 zoeR-}sA#W+qx_9=yZ<~*A#t784{5WXec_TPZDNJ>qhhL;>&+;1>Yjkkyg+-bfIHT? zOl7@#YPRCx$fx7!)e=ZBg=VYN09_T0u#l;x?y=hS*lbQ!B$8}G^ObIjIDIW%PvU9Y zTBq1cA1iD$?DW0XeYV4lSm8rChx9(Q_06y%{@qdm$kfkXfMtsk%&-jL$3N3hLJOvf z+s|-t={+nsEV6lm6$MLm>+HH3NeD^ND09o0f%KL}rb5j*A?^y1DR*>Kf@~?02OX%5 zn7!33cFf!!g?sz^{*ryGne2+==fd1dQevK$j-s7Q6E4}+&RftTKaOem+vA&%tDmeX ztE(z4BllD2mBDm1c8xkat~dcA6X$P-FM9Nf7ha~IVq%>jnaH2fmATg&Zp<1Zs}1~D z!i3Li!~_y7%JeTM7bM8mGfA@6Ru8NA4gnb9KGOcU;I$1Xcva9R3o=6VO4E+exRKvl=Atg z|Fr)?eg;W-^<}||B)R!AdGRSOM_A7VuWD>&{9L9&gcX)p3jeRAw~Zg(kss%a;2kxu zXqp*)lJ8r8H9`2Qb~4-bkT(T<0(Se`vR6!;b{iNQxIu$d=!?%SDFLED9Fben&skj6 z^hO)o+O_3db3YAPOI_Hlu+)|(JvYZ36OymR@`CpTo5D<7l;(Y9iaZdMPbF!ae9 z_KMlHl)`-2d)O8aSbe6E@@nfx_LeI4)`{IH=h5bfN0hHp%Nhj-dT^7lueK%*DwA~7S| zIajV2lCca$63IWW8B>V;9;_jd%h?@tb*z>)Al_^B*$#abk9l_see@sxFf0Pcj~OnG zyem&g8s$1)?V@2q=vy~x-9ban`v1PZ3J<4Lsq%Q_JlDq|OI*`acZtmEiO;Muq7?af z)D*kDkgf*kjB(|q7at?CD9|^YwDO(U+@xq`n;xmRn6ce85vE@PcB1ADl3R1MD(sZ~ zvkq+5%IZ#Jttv$!cv^LtDLSOYl>|%am6AfW8<;8XY8NYRsa2b; zwNV`p$+7U1_U)9in$CtBv`4&8AWTU1^l0>IMWb z=`{PaI}i(3JwpYr>3iA1!7Ju?>GwtRBoLg-#2KZXwkW_Zm#mwr---~xhA;kwwX04a z8w8;{`v6R%**2NvUuv6pG;EGD;PX`p%=6E}gjX~MGT>A9x}|Wnun>3fWhIYwB9zLi z8!EE*K29Ym#k!dxmq3N--li(VTEKt#2mV+bEVoauwK!WnGq*PxEj7pZ{t>#~qx+Fz zkjTM~aK1k1)9s?g&212~88d(4>|Ln6x>{@-<@db1CX)15+9)wbJIXB4L9UTY{)?U- zC*h-#v&eXkZCVyVoJIiPJ3TbE?%>Wnjt;v$Mfbia#;+X;6R@OX+gfRK=c|kFPU+% zrn_f{GAKfm50-%Af67fY5Aq~-M-dF{zP+ggvFt}a5Q+R(V%uxdklIZ3QV1v8S8Cq7e0~h=W{@EZ0*6X%R z7~s%pshUg6%i*>a@*HG_?RA~nq?nt!@Kdu*aW9`snzw0~TRkpGiD-UuKsUrGssvXw z3lGReNar2g9Ub$R*~EeN(7oVmBl-7y{TPEJ{$5|3r@_BxhFngNfzHv=Z> zWgh()Hy`wGDNBQVQBqVH{xtr$eY&JFUUOosvzy?U zJ|FH&XhN<73bN8^)YoSP1j;oqyZ@mSv+j_MqxE$fjYP%mrD*U3+!&;O@#oYIHe=E{ zq##p6KwUk2ZUKjOJs{;!h90z9?cG}SqP`@{wY(Si&flI-ps==<+hJoh{&3~LN8<@& z^gn zR{??bOxI6rQEkSAKos;;i+gaDuv_sLN*=zbD_Ks5e>I=khY6ltTl*NLXbP* zdmzu`&YPXRQ#K>Y?6;$JDmn8F4~^-Mv?@KC)E6*WT;N&BeUWY^c^Y^l>)b3H08{0omN?J9dS;Dfo#3-JqwC0wy{+{tkh?m^wl zD_1t+B@E|=eL*`u}26p|ntw3T>7cxy>5ccEA^xAmJg)Ml>)VuUb%ld}sKh+V+<~&W7eNKi{DN9cxy9 z=C)m^RAC|~$UiHJcXKn9ZHk6t1zqW%myNWsM$q+h$1iO2yGS&Kg-Ho^Kt$ z(jezdPI|~4{~*(7#BbFf=KqHp8M{=B3mUGX1gi4H_zK!NC%SaT?V z4k&U3NPFOw!+VZefr2Ad%P`B9SAWnBbSrMe5pAI+43pZEA(2^Q z@4~@mW>0V-&MA~+%}!lnkdWk}<3FR#4{zIYL4Dcp_bUx81`frs`yTLDj0<|=erpJb zi`krvj^p02@jRaJ8`6=?)0ffP_;&&~Yi8Uf6*cPT2M34zL z?*$7h*g$v~ON9}}X+(&^u>VBovW~4`a@91g#7ZBNMq8T7y6gl$CpKV3}stbV$f`-Rshh3zUtHfC2U4-`-PM*R!(M1 zoQp*wnhWdHIBG%4wP2Yle}iDQrfH#D9F+CvH?Lk)>SdCou#T4 zp)yk|y7$hEFWg*$n^bQfuu>;qsC1QG?zXErnP9oW^}vMQ#o^{9r5aS$8*l4gd6=GH zi>jOeDX!b+Qv-(EuZkRWwlO=Z|MC=FrObesGjpofu(bS(YgH*Wxwi}`cEsGdY7>UR z;BqO?v5{_N`s>W(c%pL`eLeVL`bY5&{zy1Ke#0S6||Q4{>tp{eX*OiFeAwGBX+19-raXS=}qY-_|_5 z3wG)C)q83m&TKt=I8N8v1@-XYhxfOJ4&KJ^wx2$@YbU%|5`hS~5G#GQ_4kaJ3nw+G z!4`0Vo|CN^MrZv81JkJf&_nX&_2I{@q!9kGZ#iQ-cIUx_iDSMxrK7IZV5B6!A|M7g z?2U%i@wsoh{y`!CxSrPLmGTM;|B-n%O1-h2?YiQITh7Z^F36mYp3|`qwZfKPM;Mmh zJXwCav@wihEWl>`ZbaCgq%SfWFS)L1UtfV)_g<7VSs?Zn#8~&!7h5P5lcSU{Vp4O` zoT+fst6m}HToZef+NI2@q({~Y=fbUEA}Q2#+>{@SAOE#f0I*+Df9~!6e0yZ;?Rsr8 zzmk&VMw#|9*+$6{`=m%X*%4?G>9ue){m$gx;;EjTKY!=E-LBnVtE3&bkMp!UWW9)( za<;)SVCf0nogqrW5^DG~%6&5vI8v6qnyvbx8Xu!1Dn1j(i2r)&yHOj!fWg&I5oT1m zCOa;mp&p5i20qfBe99W**K8Nw&MCg>GGg^V7=e`s1qIj30I-G3&~b0KZt(*toxpCW zkQ8XH(0X`J1YRpUx_!-7*IKunR(4F>GPby2CHJ)ZstBt?1+=qh+ktn8IPk)U06OsQ z0@RQn%o22?V4H44+u&&$!JY#dr}(6u9uD@66gzn6wH+3<05AIN^G2;9{^<8~M2tqy z{eWI@1^~f-(Fox^=#spt{2=OkX~z+*j4HhTA#{m8w{dODGBy2Fxuz+#X2QSvr{#YF z?dI%b6Jch{>Cw-Ce*Nag{EhbFoHJQ&dO4F{$978@ z93En${T&pkcRt>4qs6F^Mn6@E*)9U=1d&A27wKlM3J}V0KZDHy}fXN7|g6* z`ZLBO&X{SZ>3JGs{17iRXDnis`dS?Uv(9iNjm)5~7iKB`N?$hS`GacdwL!CMXZ{Sn zJY;riG{m-Q$FfQ3f)={ivpmSfrDQ^~wXD<~$Lu;bl8rwF9h$Cd5tcVAoetvIh;*Cg z-XJ4C!YF?+5XYR<_sbiC{;V>7w&oXZv6E5Pb zV>6M~ax{G`ukqAMv8bsO(}Ng)(f@r#kT&kB6%!yQ5;8bhJ2FY%WL_*F29pNh7wy}Z zDRU$?I10*j1h9s6VYxq}vCZTvaRZcF!x1t#_!kw9rYWtx6nk4uRJ zbZ0Z{{yfu-U8Q;)vCY?0cPr1tKTNr*OFUNX2eb*ydoeiPqEhTE*+or6-Ni&Df!C97 z$xTI8z-H*8{fL9sX)NeM+9b|M@7y~J7yVyP+XACxwx&*BP4PQ^GEuRvE`L^#!KO}ZVXz&a<$ zrq9VmjOsVF+&J9P4{*d&G)tW*n08PPBJVYrIUb9+;CdXc>7I zh7+>>1&F($Dg_@`+Nk%Ds@HVr_2y&Gn_u9ZSl0!&;zq=^7h1P{P#({2iTZD>WmNXO zY0Xq?yv56hJ#-h`LZNBea8`xu!)=fEq`MDbP3zZb2Iw~<2EA0W35m7ZHoW;#np(7U znCuWAB`Zs@ZkS~_K=LmgitGO-@@HMt#w`(ndnwc!*C<#XZ+N5M+#fT^Q7+q3XkXSm zm*xaFhkB26Z0|*kyuq9=JwUMg1uSTe?|E;MZ_w+_K0sF*=WtLV;kb>an_v0P`~^!= zpo435-CHfmVTe8?sY$~sF1#kVHtIM4!uc!YeFp&AhP*rEsD2Z6L$(0}OYKkSuq2Ba zzvlHs#jhqhqdz_&+q3-woqH`9qXVhM?pL`75L6qpu3rEd4ZE(cdv(v0u3tGCCIY`r z>dmYkH6@?VqV=+3`i9A~ze4R1Q}18Cb5uWftNPl*he)4ixF>E|A? zJ1^03oMI)v-Q@*IR}_DDgU8^w-2>nVHu9DPH`ozjQ-x1<{+;4```~;4?0?)&y%*Pr zu|hs2Cyh<7%ZhHY!X0b?;)IBeTu8yI+QUnWS)ubTTzbU$DSHw*xA~a-Ms@*F9A~oaQl&8?ywFj2_2vIS!W2~1jrIGW8V^f1Au(XCo!Qf8mmE2#VGg8Bb2@Vh?O zUY8Ye@y4cJmCZ8;?NVTdeCMFq3%KjV2uxIe-#M!I09ua~rggv|9$SGQPkSzrKLNzP zbP%}q0bZ#F$mYMdT_*>PrX?Kmuom)~byWcvMLz|xL1Bj<;6k2;;KD#uW!>cv%;$=i zvB@x{#?7nkf{x*_E=k~8Bj@0TUS6a6+DCNBeymut9tm8R1YGyh=f7QY_Gya2Agc>Y z8FteFEoD3EMr(A4tLAh)CZ|PdpO}J6uvh`B^=qD$s2w@gh`9*X;jZ6+=~&>A&3J z9c84q2E5bcc1p~`m!ekx7+_c?0K@E+|2uT*d)q1s%R&GBbsG=$eG!R&gKO?7p0hi82r503XkB6Q!S+v<7GQs; z2@@6R>Vs>h;Zijg1i@K;xcMfS0*lA%qpp{Y(0k)d)2m>XFV2-H3F@}6mjAqabuoG$ zBWL~SqX;hRQ>304+0C0_BMRU1g|QbsJO{|x->DHVq*x&PTIFq%bY(s#-8Ty5bfpKl zFU-}7iMmp4hw9lv4xQ8p|6U`ZsDO}JTdSIj-MgPA1uqR*3LSfJ0y1DEghNCnp%PFg zD%L?cs)pWPO$O!C*NZ(L_SldCkqj43ziQ?DtX_j;9bCvz!Y(SdQJY(8D^5TZRTS01~^-wkRRaeUZdrPX-{c#Z|wlEwLsJi_NR z<)8B)LmPtav`2g$ov5#IB2vb737laqM^x$(wIfl-rPo2ovu%EC0bR>vd}CVuVQQN2 zwmMg`Eiq^bw!@wrqW_chU{DmoM)v>&$zE;CSj{ zQ+=?|2r`{0DBC(9QYuRQU2pA-{~u$Lu)z7^X*nO6+D}ei85xZpeYKthb2=!Nm*U`lAt)JVIp*y(7Am{~nGjm&+QrM#Y!TZi7h;dB+hqriW2G9rvQ zYi*q}(j!bAM*YhiH!0TPm9;SOtlM>xlI>40jvR+B?ncXG{npsUOhyhK0i~Ou+i{D_ zw#Vdu#NNL~!=f^wILUeU5*eWmY*=Tx;|1G}3kSrqPY!*y3v$TcQhfExaA1-Pc}{8)v|r5q?+(bak)8Vp9+XuC0hM(Dmi_*jE9_pN zyf4qJoR?m^U1yyf(W=t6FN~pd`8URJaGooVvh~cA2|%=e_gy^-ROo`O>y<<;>*k1* zXE9I+cHQUA(PhVQ&yKUEa z$xu5Z^i!DoQ7M^5K!U}(3C56TP0l0oaaMo+nOu3?ifRj($vWx>vpB-^yZrs~UqL|) zJe%NNtY~bDAInV?u<5-Z(D|`~{OV}2r)m;Cli^?!rY|9QbrWzKtbmg@?Xx+s?Vsri z7gLZJdXxM~-srl#VV!BDkl3?acX`Z06L`i?nT2tGPaAilW3+wMe)ajn_z)83Jaon94BZ5Klv|lVrM9>!jJYiXf31@ zReEO!)U#eJ?9a6ADeR-J(EFPakq($IE3^7XgxZ|{X)pAGp>I@B(6p|GI9DFdk!##R z+PgEYTIavGbf_5I$Je_Bt7&F$dS$e~$jQO4-Bga2#wt{RHe@a&2ve-|_#mik{3HW6 zVnN7FaoK4=ravXuy*OYn|GYtKH`X~eozOGhVzUc9oX+Awtj9XgfC>IRCdYz4XOfNl zpU|;-n3<+V?n&4Cs3m(I9-`Pzoyzp5;Jotx&v^V}w%5=LMMbT<+p@kSqvLpeXPu_M z|5sMJfL=%yc0OAdF$2A`qc1uN#muiJU$+waFZ||EVD*Pvn6lZH2M^=I&x<*SQRMb*bk3hkq3&|zwwArKDd&i zTaGPFf5@j@&$W2w`vfL}^&OCR4wFErrJn|i>)*KY2G;R3 z@c5wnkA<}J-roqN`e87ZxS1<0n8%g-56m>A@NJJ$HY>d_2DsGx9LOYBWWo55;3ONW z$=}#3aCx6Iws;GqzkrBmGM5yb+pRZl0Z^#_Xp*XE=-6<%Y|1AsYhB{}DQ@@H7S??J z(|u2cpxfWhfJW2#NJ>JWVY94YX`?uytOaE~AJ)FNYEZNBLy<)3>g>pIiVPSt6UY-N zBx@SJVB-JAd&hLi7=>;QT5qI|TTE1hBUC)aiOWG+X|YU@^W^%#=Pw$X*pkN>o&G^g z_kS}j`BN~DXJf??h*?`2G1vCcWsVqWa;2;_M#^360ZNOxzL=_!IoyM;-T<@zbQ>jM z9^@;9`jFXZ9-TlnpyOS3GF|RdLd=V*+8VD&8j-r<^@r;%Kc8SKe=-~qQwu?nLVsf9he_8by9Cju0NR+Z(} z6D6Mm~Ip%=Haq6g+!=5T;SS%f>8VghnC#^+*Y%)Qg+$X z{-teGLPer>+>BDen$9W|I0-Abfoq0bIus+-<$SiJI?P-aZL584{r-!x{oo%grgrI= zF$5Y5IUidWB^-G%V5>Dk0V-4;H#4gNUYN>W<8V|YqZNHYt1BNZsfF79n4?M$rc~ci zFd05cxA-X1pco11P~hUnc;OCw@+a5Yb)@oBbFoYF+r-BM(`{2?Q<0EB z^g=(JaJ^PlJ-DS5_lM>}3F{3IdkQ^cbwlIkcr!mVPD)z6;Dvk2_9E7T3WI$5p&Evf z*FQz5t;~(rk6WJ-kK%*|s9mYydL({k$}VWwnX)<$r=*w^#3T-@h18_py{^ouHm>+jaMorMkHmP%@PDMgEvaV0Vdk+>u^L-n(TBW$HCR|hgkmqE^uz#)RAb3+nN%AGm)>2D-I6E1Em zj&OMuceNFR`_V;IT(QMN7(QL>cN?lIbR6Lx5MudfFucZ_YdjW$vT{p@NeL!~Sg+1q z+L^18VhY0(rKYGy>iqUUgugJxYt@I(->%*<=6Ce=Lh}0yD}Q!zdzlt%{}c!)XW`Yh zu{fqvs$0{WeX?BUVZLq z@31mP3b+-iK=k?DvY(Mv9q`rfa{W(7E^Sio!&{yA&P#@wz_emW4T*-qKuz#mZX4ZDURX43 zgTEZX0upnn=x>4o2g2+Kh4Tgc3uMu16n8P=lOA~^Kzu4f9FBH0t`!3TxK)`vqUHs|J>l=!U%9{LvFLN zVEOJX@GH0**55&CWj^_$OiS*Y?G;LbDJ(^eB|&b`DkgA1J^JwW_bdnh@tqePw)o|< z*=Jkwl)M{s&$0=1A;9kP(?N@6cIZmaa`W1@DBQfqza!lvI^d00Ti)$uO;r6l8B_UL zlqxe9Z$)rPAmRJ@yOqms*7`F~jwKF@cs|!C$ja}Ji~G;R(YL{4wMpl1yz4pV!d37< zDnPAy)Bx+}VvQFB3L|R<8^Q{UVrtJv9pA>Yk&oTm4&A993m*DhL-{sHxdWa3=taZ# zaZgeg26lF9J zuw<2XpMoonQ5k%^=N!g3X2<&oe@T7u@2WNzOy-jU}WnoY~v3Qm)q1e@yf)<_5(6O|Tt) z@%ZvTOOzWnV+qCp$F7Z`!zr}M(cQfld^9qXxe|4y_tU8*!-*{rJD2#Fg}&HjCKYDp z$&yI_f}l+(V)X>5Ym@1AcFyK)5i;W0C)?xAGx8~9bHR<%|paReN z3zj!!3KoC6(E-gapL-ls>10y;hO>R-ZS^F05+fmM5Mc77avf5IX026;q1)O*9!oNc zF&y2gjUlN29ZP@S#!Zgaa~|3L-oax?g{YbGOomfd&uF%_iUkU?oL~{LgzUdpJy}|? z7${=IZo5fV=r1;UrS1Yz60~HqAHU?Itspg4HfFVS9bAl_^6#?8Uode`5WYSUBK`0! zXZwkyiw8>GA70DE=P#`Vv+_;mzsuJ*^zRLy=WW7Z)8DE;{8XuL@+nf!C|8hE(!QjS zh1sNkmw5gHnZrlWQl5i`YZCeysZ#J-nLiR(h1mb}rETbvneUFQLR8AAem$Yqt9uVk zvlB|AD2k3KkGY~g&6fWc*1AllFUBl&jp|#+N_o9XsU0lFYJ*0|^-W=#H40XO#?rl6 zlJ~DAD*OibWddg)=`SVcAJ(bbAk#DxUM4gH0E%_!Ms~iL<$#H>$^@+J>^=BZK<$|= z9%MCYhc8~OKVc#V1Qjmu_}b>}+>qW`*(Xce_&c2PWdgnKfZ915mxOS+IEmuDXW+|N zZ|!xr56vsFxnI7>jKm;in;YDm)hj^z>4q}0F^rA84V;ywfB%deM+9c1&+P7e)37d3 z`YgJm%mh-*NQ9|sTSVu%JD0gibLXW>O;)%Hr-NRq4XI$m(?C^uLmFollz-mw#|IN+ z6WTu8u7+KoU4g*yfLlWJ3(ptd;W9Lnu?cVjf_y7Oa`dBO$fpgBx z+4IbvJ@;uB6~0Xf}9NCAp||Zxe4UO{ph^hYsi8SUdlQE zu_puxKU%Bq87?=2Y)=9v8DvlDxC_VcceDW}ca7{#`3wAh3YL(<^5g&@l`>#GHhsI) ze=d8ELD-em5FBV19e6k**eBEdPtkfp^o88&^9rQpU=I>Ce09{dNn@SzeYiWR{FaP6x^T(UE@CGrZR#H{z^H*vF| z@xNHd`z+_pI#U3<46TIXq>=R~EAP03E&#oP=>eXT|7M!9Z2u#xxHBcm1L$*_?Lc5t zyyj$yj*Nc2iBrHXY@y-(NDHu5|9`-Uo4n~$mb(qjH|a;X#jI3e+JngR?FcUaBa)Aq z7r;OD7f*7;18^S_Uj76e8OO``<$w8T{`UTm$&Qq1X2J6^eoiJDL!IR z9RI~PkRO=?MD4u1`p>Kc>Z3INM}r`M(vi{y{>orfzI@=yy~y)Hc3IL-kEqiVM+^P` z`1Jkn{VRQZWcN2nhx@W=j}m{L`a9|WAAR4J_tjA5p>gMIPikwlSFaJj;0nYz|E+kA zICg;C`iuKH5@cu~@+)%;6_scR2(@4LOEVJ)DHyHX*3`lAnN;6h2Mbgb{s86NKuOWi z1C}}&Ise!TfDnXjR4~YrSa4EFEab=)yl(jS9b^2-c=Nyg%m3VVBSjgf(PkBPkrCLK z@|9T}CxBcOfP1Wt8(u@qY@Rai@vrY-m>60rp{Q^cXhr9z(1y=s6~`0SJ(0+c5CFux z6HQ)#cVuK)a=4XZKPZXJNCNIbAUA*Bm3X!ie$HB7ba z6~op-0|Y3J+(#a^hGAZq{HyaXF&8|LZ86hfG>BIYEM|c-in#kl|LVyD+!;x;S!F^? z80LZKwc6Wz zH%ey*&@#+C73n*o8I^~8{_EAH27`JSoWHuKW(_@;jEfgOC1uxKzEQ5R_}TC6J@s4_nij<1d+{x(L< zcAQRE_lYd?HM=-#Et0HJ1{BUXCe*&N#DW8Wd|uBl4%|Np9{Vj4?fI40PsYA^Ya%86 z#r#8}p}S{@TRo@i?pq>3dd$|+5VPO#yR$)0pg2Dw;6go5>CT0iK|0o8(U5!lIrZXT zB**%i9N+21k?raXOiUft+J6nX^loy4JDtk5#@Ny&s}0_G-SF9~m>!qge*QuS^zGf? zO^QJ;-|r;H!`QZP=a7CAs(^;>H_TK4U8qLhUQtPItV4p~W9iw^M%k&MvVELU7;7 zRcnrE&nMT=3>wa|zBhos5U7hGzo-v_+hT{_aD5gFT{eZOpK|~1Ir(TI{hq=u^Pb1{ zJZ}ak%f5_bUKk%LT6U5hw30uivhS91hfPGUz%61lo!12-x&ZX4o|6~>nS5ke!* z>4{^6`fHIZKhMUn8BatNN5-}q-Hg~tyQ&b{W926!#iSZ=pn0ga-pzDadSI|(C-5Ev z4ixpnC^fF`%Q$(7?<)4%-UJWWVo9h&mDyF|$YBw2-xln7&rbl^z{&bmOQzeN0?q~( zm04Ux`r{JYzc(+G7*!AFV;+y>zI)h`Gq*j2YOIq?2vgtwuu0@y4Nr?S7VK+J+3f3!((a^DgfyfDVHU*fggIo2sb8EuB67(JUy6sdWeXL15q%6SZ?H#o()I8g~N(aGz#Tzv&h&M?x z!xb=CTUy(2h9nc-3Urqo?DT9|BH+7UV%&u`&arMB>RO^P;~fm0w01~E0l}Tv-wlJb z0nS)Q=CSdotzNbM5mq75+W|`+#Jw!%%}h+%(t^2HEO?CO)(HEqjK;p~YE%_Tamm`w z1aUBvO?u^W>83u9Ec3;5ioT}w9Hm3ZY{;Wb;rEV6BjNUaDIxB%wW>j)J63QxD!(On z(@*(^==E>eB@KN$75oe_W;llewRHcSU|QIE0GB^wYDfDsfn312(wP!l!8ac<&CarjNzl z?(@CvcSWFfvmChaI3LH8p>+@R@&Wc2J_AV0!RleBt zYx9>~oS!6s-AV6}#TVbB6BWz?R4rEyrtr03R+?^00eD)OH#3#+{j;;^JrI?+hb%K~ z2FUtjydC-YEgv34UpmY6-$>VRw$94cZ)-26Cy+&$2GJ>@$2A*YQGGJ{-C-4jUQrG% z0sBcI1XQXtr+#)o&!G!X`H+T+v>Bwa?>#gH%+o7nWa&}UwjbJ7S{a5Ss*%nlPA`R! z=FM=QZ}d5^)<1|@-@|d4G?Dc_V2S|oal_imh`s~6*tY!ckYzj7>L1c^>!#w>Kj4U{*G2u zb-uxw>0fNEUI`3!SgzMESFUANbiQAn*lg%0d^TvC^}8#mTk7u!JMI3c%Q0nTznMp# zVXJ<9+*uo)vS6;6KntWb!?C=e!{TX|$&Cjy`)YCE)GM5{%YWmm{-_BTBE1}j*!Y)VXhh}=C_JMDHn2x;J0^R(7e(Gs!-36f`U-hAjp!!Jr{bC zSw2HaC&VjwMJxOPFMQW$+H=glA=+n}hM#50DAMNJ7#%6j$6|i{N=fTjRqt)Ie9((@ zkhN!7lfr>Cmh;E;k#%Q;26ejc7s$K6VgVQhTxIsFVAH|lc&hx~Eo%!s^@>>&s~&d? zS2IszskAyCykxhWE?-Bx!wrwyy*@~bBVh~@W<0#n+nz0`fUXMGvWD~#OLa*q$3Pij z@CT{}H;@v?W1cC)mEWW(75jrmIyKd}W*E}|-CGv^vndhbUm|MwcB~;n(p!#w1jp6~ z6b8vXrz&cqg$4vT!ol*ni;V4f{XF%&xak}|?}eeXn}gw3H$?Y>Yp5K#Q6KnLs_isB zy~U_(ihbpS|Mu-!Adb%2|MbF(+Tp9)KX>@>ss;GxuZEI3L&JBXW|t2W3qeZud)0J9 zi?2B>|Doot(IU!l*c-NUGfgyK#=<#n7-jZ7)%sEFIS93>Gpawm^68>zR7f=yq z_fDlZiqn>6T$%a!_Pb$IsVZus?<^q&k-?@Pt;C8Ig$sZCwasqYOg(iJWXixLjklcu zG7uL7lL6g23c6knea}qLg{|!m*hU&}M#gDL7P_^$@9P?d_dzFP)W*^h)0&EDC)u1V zBdIyM*&o)uoFCZfO5iE$q^#SY)x3nr_^#8^7pDpCf9lgHFP$Fc@`7CT57_$vOy;$_ zh%(#S4Fxx>=7hNevw`!CJe?Bl4Gw6Hl7h#6YTLS`f`@3Ri3C;JN-)0+cz6waO`aFd)Dg z-aY=44~_|X)i+@7lDE>khQgHD<$W?#B_2i)Ce=C71K_UnE>v|jXM1{u4wZB4w68Df zjEF(#WCjF;i&6s2;}!P@U;;$m4Ug64L-Vq?ocr!RfL-ut-9XR!PRhmd&B+7o+GJ)_ zX4Hxx>FK-2_(%$-&dQ^xzoU8j{C+z_{e90`dRyWKPw=S^+Ko?0;yEG8D7Q2k4aJ*ftm~U=QWoye6b2+gq zRGsvOu&2UYBD;lPW8KpW3Ut1u#E%6|0G(a4f*N**^2F$;sRT4qM=F1Ibcy#DeLM{Y zJwoG#YOY@z0Q>mG%O~iDi<9$=QH@?RH;4U*y(oMyA=asfC=XO2gYi*R=gm=~p>`Q}11s32jrrN3B4D?_- zW=UgX`e3O>RepGOmNy;OKa1@d2+rnVn6~I!^aX`UI2&?;zn+w_1wz>_yvs%v7nF9S zn08(OWn*e)Fw?3v>up2znsND#tx99>#16O*>{H#`cU9U=17Y=jjA_4ZtG=KkGNd$} zb}Qm*YCIG-C0EktV~Qn|FC-KC=M06)e-$N{^j+f433;M^SC_^>G*fC-at7U#5_*Em zLnE(CVb&7SA|!y?1BU+EcuLd~vuMH%yT=O!2^`)grL*Pc_e+&P)NHy;uT8PCvM_9G z*=P%C??6Ul`x>CN|JpvVdv_IfzLquj7DVb+a+gi01C zQj*FWOpg&8IQc`|oXx3}nUx}I%@wVGVuN^H^A;2(mGm5sD) z{1T%K?MN7DHq--7%@T*WPhuiY{ASQJT%T_*VR1HeLa`)=i>|EC<~-TtP0p3L8s%>M z7L14L;sO>N+^@`qB^RWqmk#Gm#!EiVv@JxsbqA9g%}dk z9rBiitw4N5$!alEm37)(WzrqXEjrnouge=Ai;8&UZMX^O(max@F%6i5ArcZdzHEgZ zUZ~>9X{2I0GpyZI{pgr0Bl~jBKgT>y+pDMwn_2XO7UnvQlv`jCL}h=ZE* zhQZHm)4}QWqQol+V04E%whYyX4!U@R%A(@Vcwe#?v(g@OGU>%*L{+ooIJz?t41w-J*)l*UF$ z&YOo9S2@Nupn604F5ncH_hI@+<=$4^pOCHi+nPNyf zV2j~RjKI(51iTv&(vReQGPQQ8G>7RhuZrllDDv>!H$MuO9KtS|x#r*EeT%uCF+gm| z(%nJ)sx!PYoh_hR(L_mIxAIMs4*h&x#+w%n=X_Mu5*2JwRnsQ7wp+c(cM)gx#Vy-< z?)B_d#RF$#RMlYA;?i|PFQ^CAQqc-4jpohl z7Idq?HET~@z{C#u2qKN*(aY~Vvm37s)%8&$X0FNWG9~&{b61}+I4s&{k4j!8uuYtEShx%gi2M35v`MtTv+9c5? zi+tHG(~l0QNS6?N&H~B39U&mQp@Bv6`qQu_mVWR&6l9yUuLKG?(JaHdny)4+p#2|; zVlty>Dd#E_TW9D=Xqm{hjTG5HGXc}uxM_w8!_t}Gbuj2kV}WFqWaDaWV7P2o#B2C1 z<4zMFXhbl60~9kFhy1h7W|4aFbHu6%8GBCGf7@JA z2&x*2Ww)nwd81z8gH$fQs0yAjzDUs3s4#)X9*AhpRW5Xj!z#7@{DTgiy6viD6_tu) zhZMdRW8F9Sx*VT7u--Zgq{`dZvgeYS)w*8ZwdTsCCsh%1BA>2mW>r-Unc@1)X84m8 zDSn7Xl#(XC2htcyKd|hQMbB{sMAvQwTRp#YevnUAGeprvxLq90F5kYflL*75FwHc4 zY<;~q;1koOKi8kD{RZQW^9e5C>T7oXpr=vezZFTh^3{syx3a+sIKVU74`}e1dv8Kvwx61jlfQ^g%iGdKtE40CSTYJt>j<3OX$w7en!pc;Rf!CDde{7 zVi^Xd((1#6gt`>ebzwrcHHAy6+89z_caspEaAeOHW3Q` zI1i1hnhY?`#8GTT^(C={g0TI$b*8;;x$gVm0#cC4tA6(2ApW_BYv8j0NzU%+^ydrNHSPiNMl|!xrm@&rE*Iu< z!OyjePQHi?hS59g+f{uxW&@)3i1LYM2v}E!c~#)}i_O+oX@`pI_*F($eWt5ffmd?^ z*$yQVCY%CO43?HY3^stmatDaCF9$0-Hw(J}ZsygO-svtg%dQR{lzP%z%!m~FU?~ai z=$aknaZ}2_d1u?h@J_8`!1pOaaQKj2)uofFKhG^_8a(!PUc zxaJ>8@&kC)$7*@lU9b52wsmh234XR!wJ*Z6Jj2Eh%sh*;7Bo$On9FGJTP89sb4DG9 z+0L1z7*aayIxLyTf>yW2APVSpHff~gi3L!6dpZW5{Pe23Yu@R&gV^eQPNCM|#+39K z38d%2RXybY~r*_E2O`&|nNm=I2 zYMrm`B9UX|OatFl3t^2nPo}%w>97RGEs#={LB%VFd{Wit^Wye&ljR_#9@qoX^i;KC zzPL21bKyjG74gv&v}2i~Pj{FDf}19}Rh87Lq}b(=O=`eOD9wJf(bL?n#~-ML7R0;+x*-1-5xDKcV)Q2OPWHxr+^3?P) zsWlTWMQ;^d^Io{UV7eFmn_<|2Bmqs|Yu;6>!9p6k{%tBevxJasG{B2SY@txQEVJkB*w+)r)VXufI=Z zK6r=}cMvd&)`xK)p5;u(S9N|bjR&h8N}BO1B=SXQz8{VXtTI_0MHu1k(aB1cpEp}o{d+QQVoi7f>m!`i|2(rdD-cpklL^|#zw>TIjRheQ2D4{6EqYYfGMTxhON z_Kw$R8dlfLy1KC)A$QUf(r%J-yqa;k(6oj^*@y8Pd_zM7AGQ6Bf|Ct%qxgWS*SZ~PRmRhaxsP>+h6e%(;ULU)JmeR54m1z z%PbZC;jDhQnKL|CEJqwCndQ4Am+w$b%KJT?$8#0^BW*9@ag)4opC%TS6th}V=+S3apEe`x}GhQ z>0)N#_zhqd)^pxHRCwAlRC?aIedHO<~DM^kMO~JZ)8RQ71c^D zi6(W)5$6`Pq>^Wd`DY+O9!;gOVBtX8M7E?J5rX{Iq}mmN6(9VQD|;5E$4AZsy0(t= zA{J)KDomw!9>z4yi#E(wkXpFg@gds8vY|t%YtG%hl8o5ItdaH<1vBr_ZEV}zj`wev zfX;uhNVXc^_cTb*RX>}4v`F!DYiBU^_o`#}rBgAJ)~eMKp(Y@vlKxo5~)+h{5}w!t>zs*sg2Q9|#urH{LJSS24bM|ze3j-mQ} ze;30b`7N9B$0|WkM*NyH{(H<;6!0QWFo@-ot8=T8+acHfP2IL|z}>WddYzP->lTA8aI4;jdK`s4nuAao0;+kYjy9b>#oHg&R_%CH=J8`FqPo*DpvldIS z(IiAtAvW0LLv5tv-3@77!MXjDtZ(z%S_j^9L%;Mr|BQGMOmsJ;4MZMMM z`iip_*`Rrou~U0c+e*kKM;Aw4xQY5G)tIB^?pqT-sJ2O@%@TYJ0u$Tig}ZShR(9M? z?GPE_uqs>s4=sVADEk1-!J%P%-|p~zq%=Bz;^ugF5GDjkLy@JK7-46X(J-G>m}zK5 zg~hKr#{}pv9U5r@hw2=~h5!Uys0z;H*LbX)st$_T&mzkA~#lrL?V zTBN?W8A{F!Pb{X78W>vX|74u_kiju=!`YM0)pCZd3vnyyK}H3Axzii!Fi70x(Co#! zl%Je1i)Hh~fJ;rWH2R>NJ&l+kF(czA_MA$5*k;Im9#r{Om`B7d;+6TN2N0Le?Szu% z`G%-WEFK`U+{#@(2T!Zw`o;TQ7FIhQf}iC4~;Dl7b|sNxh6A-sRpzemTL?hYfo9*v*D#bTY7-YVw%)XUWwXF zlpPL~eLva9WfE|X*~Iz0h^d_0RGf$zKi1yU?`Bs(M+)Se?eMnw0#F%KZ&O&Zt3P73 zh^S~3Zagi5PO0)38(QoYFe&LC`?%6xIxywe9fEo6?Xz2MQe(mPreZbrqE$WJ+E0{l z_q8*ByCR=|HCOtH6P2oojZW;2SC7o`c((3<#*w4HpRssfrI zE|-^n&oWX1HzIz|EZu>psYvT3Jq99j3S8Ts{TRys?znP#im{flw%#MAeJGPUALW)@3;*{x)Ohpaf^l**xE zCDC83Dqs=~BOMHLHGyisD2du3<;z9N21fQVEwd%iUW3t{Z01XcnjNhQ#`@U6WY|& zj_R$Oiwd6hjNcR}3q6m*q?OnTvukz4+(WJzh2H*V;M{d*xgJrhnsqo{I+)l;gUGN6=IXrT zx5FJ%hDw>yX#U9CA5>A%1>({`UPsKlK%yBG>&m6q2q(FHvOf00kz^kPIY;UQg319Q zJTtaMrCKj(A3S)f#CQKR^M;waf#BE9Vc3YxRT^0E0S~A20#y zdTSM0ay=rg8iv~$)KcS0-AM7q{ZQusMcQH`9v2x?y9V!Bp zc@icFr#|@Bx9#DahW}E4i+T|Uj@fu1iPQ!51{`jN#`F2yL^TQK-{7=cR_9qdUk}%H z1fYh@qthy`(*055PWR+Z^}EZvV0Ay)#7SF0dQAG`gTVO9A@e=U_GPhPMBDW+_K1rW zuQ|NaEFl6YF(9B%1bb6=3pC$i+YZ35x9Y)d_}MESJiR;k^*Qvh)9;uFXN?DM@Mw94 zm&jAJ2<+DXmfc?P!l_S))dL4Yq&f@pqF@bYYDa5@nl!}iwbwEBHP|snQB&Rw z*6Xk3YcADUb`H-HNuqmNE4j*JRu?G)n2QW}mAy}m=gdG`VX1njfnZ*0~VkNy2Lmz)G<6rT@F;q`!3@=B{%bz9SOhtbYg9Y$fBUQeLdWT=q zf~C_}`arE~XZ)wmj}eRKpBVee!o#+2R?R~qKaZE1HW&tBgraI}`<$MhCO{4?k*A-Q zw58nn_iKKN2iK2LbDA&PAB4EsT#ju%xJUJHNfkpv2;J_7oh-4av$`(4N#QyNa8!TT ziU{A1$(F5Ix)*P!-4pGMfaglOUlNp^lky(Qx~Eimg%7dDNACtss%h%iPI>^>5;)kA zjh#bK-xrM?=FVLRoFUZ4-!M{A8GGjJtJlRW`^(#}8;QjU*aKM>1|uKl{VY;BZzhc{ zbQYPl7sa;*h#Jazq(9aqta{u@*#9jU4eqE7W}U175lF8aPai@oml)WvWu_0UKfl1w zdxjPiD;`xN1Y(4aLZA`Cw3d;OvjVF|9Hn;1k~2zWPQ5Pc?!j}?r1$#iHnZ*$^79pyS+ZfQ+WtdT(2?61Gn|n)L-0<#?rfv@j5(7-T8~7M7 z_jJX|mCs{4RmTOIo>`m%7SU)haOl#nOcpkV#Vm!@-6X`Gwo;Ev&1$+9^UPFnCXJ{O zy;9=kkpl=`Zr&L8Ydu4Upt1cS5XAL@_o`p73@1O&(nHZ3a=7;`I`}_^VyEu60hDmv z13|c+=9k1g&BNi(^p=O=LnHyFVz4itZi#g)VxxlbR@Q> zkPAmimp8I7kMC`8=$4G?q!yQpqWkT&WE-hzAbE+gKUQp34qBlrz~1)ph##Otj75|Z zo{y+M%L!(Ygs z2~@f1cEf<)$P=zBI<004of=4IJdG_A|G^Y-Y8}|S%mvG!V;*q9ai-R!g95Z{3{Vi6 zz-NC=o>aOFT-!m7TI9Yj*W*P*NNNKI|&BIxZz3W1{xAqGF^6Lx&E|lI5Hl zVBDC1TC+1oJ;Tg#CO^7yk}I<57Zg$arB6}Qv#6Z5-CNgDZR~Mn3KH6 zk;Wgl^~Ms`qAQL1@b+1Z0Oe0+tbuyW&p}+_5IKQ#@h9fcsb(f?gfOA0x8C1&k*jh3 zbR|_p9N`-F*5+Ta0BJIOfKfhW`HC7oC~*VbdWDa0Ck{jRR(~@2hGGIEtf~1b8(hnO zklEvxg$GXA1VkzgyIke=^s}s(N3?f!^ z(E1a=fz}s1<1j36hv6aCUWum9^^~30dc68N7!=El^>o9^$N5V=VS_+~Dd?>}zJF<_ z-0>s`<&=_k7_V`zB7Y-5=FCIUf@D?@-aKNZ5A=9(#n}vfCDn{2#5=Y`g zF%KfiTu!uK{Ec=GQETv$d%Vcf$Z>(Hb+gN@{EuH|?j1ad0l(TjSc8)5Q~?>VI+Jdt zoVEzvm)m5Y%h@_iP3d;ya^lrgiPxBtFd`5sR<*V5A;Uud7KpFKTqtc*K?=AgBec!U znY|m&&LjvTw165y29sB1MafCUES8ZK`En8nXiGJV(4-5%_t*d2gomjsLrp({#`U?* z2yw?Qc;GOIwm)hUz1%@lbMHr*^JzBCrUx{*@Mc?mGYc-~)R6jC2R{IR8MZ8maQQyc z=g@aVU)FiIW`nXgpsSuiTQ;Xz4OyZA%XA88&0lY`M~*mUiAE!bu(X6i#vCOJ%ZdhjwLVv*%M0~LDQZa^7*vVFpW zw=@$*6=DeV35GR5?!ZC~(%q>PgCKN%Z8ctl>B*#D$RUui829GZ#zf|<`y_ykt|y6LA0(hFLib&GEuh0j$OL?otz>`h`m^|Jk9kaqC z$MGHHKh2&e1CNYEvdE4vI=UKAAIEOEK5AX*xOJed+DYzobRJ_NeQ}1!{noI=cJ# zF@TCX8ijw2)zRp^VmNB+AOHBjvJ{R+j4Y(%G(+-lN00eWtslLG>uaFP$ME>?5<3D) zidF)+jq(5GTaxkc=TR>I2`rCPLDnb>d7Km+s0I6H=D7vw=Wf{8o;>;FEyK(s#@)_=~0v&98}ZAtzDXxnu_oW}$HKVf2F?#eo_ zi8)3+oGf@CPvOso{Aal4q6Vr)qaCdhH*$?uW&vfqMH!2-X#Ex@f$&1f3%g8!R ziuVR?r_?chSJ)U)1{;kiN{4o(fMX~Cl|K}=#Fg#`nmNFArP3o_dx5QPlb4;_$IA|o z&;q|+oJImlG;}8itnP>F1IvuDA0dy0j*lR-*{_{8)9LY-Sjo*jIsc>+h@II&7etoV z1YA5;{@=nAVS1}iMkon59*Pyi%__I_)r2$|3*MyR z6Q=;7et7gdHLgD29yVLSmgVI8Cb5HysERI+(F)K`b+atBH;;0w98lZbys1@R8tVl> zGGxf-z^~kN5v8l#Qcb;JDR2=D#9#^cE~Ke@-hvt)5|7ZF{Ga zNtU8n@8|G|mlVJ=qknI%)@KP z9k%#dsO9Ug{7}j_8tCy_3k8Qjq+XZ=Mxc3|HFdU%K=zC zpHnvev`H8Bdvbt()+bsZ#XcvdqxP!L=jWUw}6Ej`t$n!uSfHkk0xcv6mi2)hhu{;zWn?F)5G%y|pBA{O^g8&@r)LCvce zOr*{2at1p1R+xIN_X{er<#@i+@Nm^pZHY`4Eic7wDVDMBbxqP9WO#ly<0&qT+da6j zmkO!w9vKk0ENtJj*OfR}#2Ts3T-B(E3yw0BEHm6n<20M*pYqxZ#{_o-oohmstlBRy z$sq-%EA|A~vB*}6Ysw${Zo3b0^eahD+=@xKDYDY5;qdA%*?2$kUeHT(Y=7OYu75&D zU@q`I-{pMcEbmceIuHA@$Gl(NzS;YJbp33YS1gz~1+`Y$Xr<0&7BhLH=`5zz2c=RE zo?|?hsH>*9^Ndb1$IwWBNNw|SQ&v%Z&i3@c>iMa#`gMDyj#)+i-r54ahl@e-GynuI zpzM>rQWc}Tv;$};oy}(cc*f@D=j1X`^I7Xnl=jmR{&Qni?Vs(NCaq8AuE>)I^h8_5 z4{!s7(=2^kNsS`=N^C77A?#@#1$K2}BdZi?@{k{7>PK9OH*93${QIA$l`0$V9gWE$kffLuivbdly~^s3-#;9?6Rh7*Z%kd-8^J66w5W?$*$mX z-~FL8u&%RWBKRvaSI%zC_nlyXQwc)-^0b$`mh`9b>?~O3XY7}?*B^q9l#f`GSJ^fI zoc&gc`(aC%AGdTxOPhfPKSH4k9DvosLYs2Q{MoP$eh7BUhcIrnOO@a@blXqJB<&F& z!uY%!<{P!M_;gD=SuK563@r)&>WWJAnrInQ zLIOKGLw_2aG&Z(Zs?y}m1c)~+=BFq&?MiOlN0W!@Hj$byOsXI@?^hYT&|Zoi@m`ylot_PI>5kj+$tW!f0t{fhx4Kzs_bOCxAuxu5gsnQmr)0F z_T3Dxhzp68v`p9ePoxBZV(D_$ z!D?kF%ZBN8IiZyphchnpY&S*GUw@DtVo6PqTaXL0$5)&AECyN%Bv!s@EIzgZQnQ4} z`-gqD7KQIY?5;`5nbLL_d+sB%Xq@vxILHeY^<8Y5(*gv^HZjD;MHE3dFUf1gnXSkLq*n^R&M7WCLCa_hBh6_?_^G10W}Fn{bIR2b42NtGbXn!jjmeH;`rA}A;Hu@75i_ov zAJ;62Z>B&6QcovCA8XBvpS%*-s8JmKXy-0nK+|3Bs|X^0V(4S{-o;_U!!nN!4mZc3 zOT~Ap7_`%!n_r(rZK1F;e<*L%T(;X=ITdnOUyaS(uprKwIK@S8Gt$T{@D-N?@h2-Xs1@X6YIy^Tmaj(D})OQbC(BtzufU}RnBa} zY!00M{sLH_owr$YR;%V>+I5g&5p`aYG*Kd)N;t?ppB^`P@k7`qH)ldpmlP`qA?*3- zHg+})TQWqqcg1a@9ggHOUb396`1nhR{?n$$cyqpIc|OdmMyRGJg-Ju#lL}AJ%iVh= z^gxibqF_6$fedId4nX_O-xBRusPC16#a$w~i_54Xr|?xOOIm_TzwF`-J;TG7B|8|L zy|hGxS`<_pWr+gGd>P;OE|cV?%rZo^vM`eqE9S`OUq-* z>f_4m(*$Y(?3V2uX!(U68}I!nU-<&sCrMsW!O)Akss}y8_KZyUt?P&{L75gfv*1^Q zsyptnS-Mwm8EVU#01L(2A&Hg5H^y>WHDBOA{TZ2ff4=GX%h*Y2%Lkem1*o1FJGj6IPW{2;>abx>gAwPJIE#QD_K zi8n00UEaQRwR0a@CBMXRSFnIb3Oqh8&kOFhxr>jo$@Z&a(EE%iLM1IybXv`%wYH`J2`~;Oxb(K*srr z57*?Zx2qF=+wMlvu`@1&4S+49%d5B99Md1jAsbrrH$f0jbnUtCRMLGxcJtq3v}(k+ zCY+dy2a&(9G?9Wjyr*IEdqyzVnuW=d@RR6wC24I!b>>NYbGSM)r6t%b|K-zEIa*O- zT9Y$wURu6o6|@fa+ckD$8#jt2J|snR=$TTNIlWwXA30xKc}`H%2A}5`&_uI>(r(T# zA5gtBb;YK8G(=0LP?!X=s6zP@K>SQrr7kS7pNfG zNTY6fyurj>Jxx8u_qXCnENZNE9;!K6jBw=+(%r{)IT{J7+7!d9YnF}%-(Q!p z&qQbxpo7uF+*AJeyM<#{8xs_2V)MPAZc+)f#yYG9=h|`mD+viD7fL@0GH7~#w;X10 z4rg>%DN$^FV&prD7oP4kMW%)=Wd;OlF29ax9~$8wDUGV~holxr+U}af1BG}8E`400 zoN-Jv>>Dzaq4!Y3EKlox)UH~4Qtn=>32dpV4?Na>+%jy+a$PkWp)U_l8IGt-(gTk; zj(gD!dr<&K>YRAN!E*tpNqdvqC%1)}tJZe!78O<4qUCbL6onJNxVKU&oc?FC|5bP8 zjXo-vPLKrs&Nsek9o369O7EF zxZ`Pf=cv?Rxd&g~ykq7;tLF0Y=D&s+$cd->u3{XlIAal#DxxEPTRR`HSpO9Vh!eyK z?~UEak_Gpi*%J6>#x#|$-R|~^#);2P>?~iy4_4okhO+B%K8DQajK>Xrdp{7ByjT9K zHJ_mk8&4l2eZ@djbsViqu<#N5fPxB6l;6Q8yi^IKY_#W93p${jtIF`@?{q5Ge_`|Z zDLjS1^6J;;3lC&^KB%^O#6U>klV##}^5b(aeXhtypKhExvmhm~Ra9_xOJD-~L2ySQ zzOMAk4`+so^_kxL>CeA!)xw^B#23re8sDP5=IBxGVmSP&ghom=4&|IN`A+kmiZ{vB z_eo{RhgUrtCoHa<_<529mH4pg5)oQcuFgE?k{r(#Tl>oE#kbmfxh~O(Pze<413|O? zpYq*7O8vu_M~5FC;L=~bWI5%FA26GyKR8vv*ZAurbNO7MPXC5qv<9=s>FAWa0M zH>F5#(xi83(i8{;A@mlCfC`9+NRt+j-a)FA1d!g5UK4r^Mnn=I?S^yL`R*Ta=jV5= zckh|mGtWG;%ihx+%>{*yDzo)M{#%3r14l_`#gR9u5DFZoO5>W*{Z}{gM4%F+7as3> z3Ku;11ip<-ABbu{qs@%n0N3Sy9ZhGlen$mH&D$$v^BT-1bOr4LOx9iP&LW0U*m@sH zOy1&q2(s@-0--pO+Nq1(CmnZ7YmG_NzM>SeME*Fk7rgH6(kv$^q zs%n-#Q>YuJ(qftR1Qt66B8kfX(>;a}Oab5!o35IKEc%?~5T!oiA} z6ghJB<&W)CvpZSOcVwsCCX1fejqZP29*HWannUS!TaC(1zKmX!J4!383y^@zxJ+9e zw&_)qL#93#UTBW~v_*4F3I+`tyzFbp@T}8!?eA7Ev=~;03yvQCb%? zV%>)Iv7b4i@Jl0K_nfjMf_}W$Tm{KZy?Dcq0ob;)GTNCWv-QD}=poO8Lq{8YPIlW} z`>FAL&t8ZJH|`1+A1|ltXeu%0#-9&T}kliQonsa-OQ~253BTlPI zy`uyc;xTr<1kH=I%Y;gF=`SnUIS-jE3HHRdWMI3UAxlbb&Wn@6yIQ8*_OuVD4UL$^ z*xK~;Vxa^wf_wk3Odh?W9Aq@OX8x>MYsL2z1$&>aNd~7{z7I}kz?(s z)X-uge*>t(xota6a#>Hxt%YY8=vaF}$WMWZLRPn?x~@u#Gady{lr;t$WJ;eE=pL~J z5NBm_`HHgC-fqHUnwb^t3kE>8rjxOs$jM%RAt(Fpu*GGSE!y|DLamjCzG&P#yZcJ> zw{PmFdJFBkVC*hmCV(%XhG7XjUDzBv{tDBtQVK)`Xv0cE;IUBp?#SA)316-LKS(<) zDw|CMTA@w(yUudR{#W1j1gm*tkW^83-bWP=<5~Ffy@0F5C3H*nWcRm7gcnJJ_p<~@O7Otq~JJSVJZLmGiQB{l~Cyna#Y z-Oag1hiQW`of-mt!z%}-8zNlo5rS86ZHtvsr(RhqZw#7jQdMv&)(9+VzT7pdc;+Xh zw;V|;*HJV2W5~u|)3v1?qm^kcz2ZWq%mJ6-KVLT8W4DDRQZqto5VsoHlY%ZJ*`tqKgyD_0o@Kw2)({jEpmT9@1#_{!+GBm(?}-yfF1s5gus9FhgN01G=~f7RTyrs8|a} z1#B>G*TWodTsmIergC$lGBrG_^k7~n4Hl4!lSx*oI=K-0Y5!YxZD+OLD~9!!FB#b_ z5`kFB7;xSHLQItILCJ3O)a~v9LOH{ES%66)$30Bg%n1%AW|6m59>8#3q@?7`qfLXV zKGd|Jn63V@Q;;+Ozkie@U+n5WBL_6IHZloqkq#J@#$6%Qd4qF@H2PsOJp-R#HWUto z*1CmTI)QF^t>v0}TveoZj6i%%HDz!->%lMmb1xykuy}(|O(G@ZNWCI(5r&uN>W`sp zUS*_~;pVqqHOqfkxP)WY_x9E1CN{ng316e#6=zFsfh6_A>tZ(bqZEwvre>~6pONF7 zOwb=g&B5ucGR}OUhdBj*YAKsx!u9jSge7x$mciiq=c2#*PiS#YKhePlFr_H~@v5FFm}K}l0Y-+$pw_vum31+09j z-8j-pl54jc+p~A&j6B%C7n5`K|4tbz`z8#*g}?s^sC;08PuuBC&XKKp-&2=f=<29Y zr%x-SC{xx$Ytbw{jFcWo6j*kdvX>dc>mV^pvfVuY|I9+ z99$SQKK|aK5xIsaHbZx@FBk36ot&YNgf6_s6hW(tZjtkea`x<5k7`G{VHzT(`*eJD z5IuXYK9~YTi_LI~96)4I3R;6KICm_6ku_=KYq&HQ;2Pnf?08CZtNLua{}e z;hy>L!Mub^PFj`3O^dvBh>EFSMjkiGxZRH30$2;>`4@RlHX+qtZ59*j4j-4YbNa9L zoV=DtkhaeoTy5p=b$u&ec)Z@$noaA;?Pe!cR#$EI3+%9HPrD*_UmQ9ST9VnjJfh|= z$d7zlEYOr(lEY>!urLA@YOLm#9!Fl!%nau@j{9bLeaFyje6A(>POUS!DeW(aYuWF> z&^6^VYi{*vfs+!AZK%lpgs{ZZ%{8%;M%8O+Y#6oJgW3RzJ4bdORQ?Vr4vufpHJqWU z2y0FA%ymk}k#)IesqZ%$YKaHN*do#F&YFJC?|DgDt((Uo-9Sr$5qvxhW4TL*vxyBE zeg#a`buUs8hR65mAnj6B{&wyP;M)Y)ykn{5o>_+7%etfW9?LrnVlzMc8B~%OuLP{U zCAwAB%gJuHQ=!Q_0S~Vw+<(g+p~Cwu9in4i`J3`mp_dU#&T3;)h_;~hcA83@`q4YB ze(dy6^1x*t+E!6@h*xi>Qv3(&A_SXq@f*JA`|DQemv6R{9X=u)Gq-z92*uo|mP4L}Ula$i&9E$NOZSX0 zF}_W_2DzTz3x9haBf95iYjJRWKJ{o-*W@A>0PT~{XnyY>s<(N3oYzh_!TGB5R=nGgJqDU zJT}~5tPHud9^rJG?F?XX(A(_9VtmrHbTNKN7xT{qq5%qrOLd>(dFGx>m>oqL(08?z zgFTZ2daUggiYVbkZoE^d@pAEnUhWhndSN$qgRVROGdZqKKR)d&rmocQdEt^z>_rdb zMT}X$^HxG?r0e8(6yU*`Ma=Lo0K-cZ^qh2yY=?WI5F$<%g87Da1#? zs)Sp2qH$=kQBF6J9jU-XAM~x(=#OemDwQYy^VB{K3ZT=*-;S z)QH_w!4+R`XY@zio;H%t?PJigT^qqI1pM!|8K!F6~T5*Yk) z(OMfeQK@}2k+YprI_G#ya9p(_09q&d5(+w;CcJuOVz+NTSY?PqN8Z^0vyW}kNwq4o zj~$~6KVsK<9cZ08vj?+ zXeb%G;`WwsA02e)>dPA&BPNX~7G!J;QX@Eq5Wlj-pTegFPl`+b@;bm&E`97WFORIX zp(yBwt~RZssEb=sUCmsy&4Rkc{gI9SAB6z;xSl3uAMahhthbwD0pkT;n&6q>V{h!5<5 zt~{R!O7JxCkkNdHNe={$TJVY9-|+_J1wR^~rK(_tbW*3v3D*8}Q!PblK5R-(pwW+o z-xK=P@CU81mGBhvU|W$rW~uXvV^{nxFcTST$Dplq#NhF^nyz;#7ixowPCPbK*6zC709EP z_R`Gok4|Z?6aM+Sn)c+=-HI7S4->qnzI8fk5vI7n{84_UbAP1Vww`mW=|=;1+>nx} z$>9|DVcScYbw#95M~PKokBEC%Hoo^3DibU-Qx;wbtn~tTEH_ z`k8Ke=Gp)Zgc_jdOuXN^M2iJcs86sU-MR3K9>uC3oH;04p{gh`oD;5o#@>~9bC`&xwsjTS-{3|Yjov|}(GhV*a!#wdH_E?UJS72RtExq5d?s}y! zP(rwMF`gckC7U7m04c?sfsBveDxFshKK^*GS;dOkprT`FNaPdxlp3!V0J_28|7)4E zW_d<-&@3JEqamU`(&O3s|7KZ#_cQRsoVL*+FV+4x;oW1-G6tW8zx2S~;%wx??|e%NX+ z5O-u;4+|H2`i+NMeEl*#<=wzk=ui52e{i(}<1n=R^Ers)sHrT{bIcX=B=So@8*B9Smb zy)*<9GMoy%1kq@+)CAhmxC@MP&Iv?8tA?I8mBX@2{2wN`UBNEK)Xn1$^E8LU_a{}u z5EtaSjx4H)VW1J4-U5^yylo9WE*z1^%Y^w!|@jitkX#9E0T`1qTVVR>HD+{iQ~ z)1?LOx2;-moS1Tiz2pP-TaSCzUWcSs3CPAUVSb_Bud z^0*W$jh278OXFPsWR2K1!9vgE8Dh1ng5XbBCs%PL`lJyQB&t7q3JKro;HmYbG zi85uP0*1p5m4d+l4C4Igh}gm)k$CGri^&JpiGeb-qdFtY7c^uCHPfcV*=8(p$6t3J z!UV%akf55vUlg4V#O^JW zR8dr+X=67{l?brnUXRV+ms-9=t;MFaNv|WAK0h9pL1hicEv$WQ(GH+3Dew}5s?Bxs zZ9gWFM~{aT#mt`RnYC62@3vAoY4q94J+Umr9Xlf^VIg^;DflvEQ_P-zzLRi|4C+8; z@t<3)-(MwxCV247Xm~9&fmzGVk-F1R^8!_XZg5#__jY=)PtYR=!sZ0p5f7#_HHsDK zf!64nCxge;$x7pj(2?mjoBA+AaGFLKsaE?J{4p6O0ge1CaJ2VAJs&v&t!aoD&r-ku z!%G~%HbY71L(6n&hZTT#>Ba~2w(|AGBpP5?jcK8hv4Zo!4I23J&Kops3|{Racn}^7#E%*q*l6mZ(=;B;B_GEw5bdVS~=A? zu1TpWe!47X%meKGBZ1_o?y|4ct4>kfwA2Jsx=v3o1RH|2C8>GpKZv+sg8#t0mc&j+ z?&*WRD3C4=>V>aejJwqC2Bc8YoFM6B_|ojJX+iwxvUXj7>=xyrGxo2cOaVqVFWGih zCQ>^=2{sPv+NZmkz>rAq2VsXU5FpX4@XtKc>7?W(h`Ws6KzhoRF?MN6LXR?M2M--o z5&vc&J@QV}`|S@e0*Pm=Y?yMb&O0euD6NuFZ6&Zt=ES4Mj}D*@4MQ9pxiKGZ`M)2-o#V7~Jl%cpcyPt)BoNI~MC4w+vs z*ZoAsZ$2zLYtTL#RQ2=?KgX2zO=QP(v076H;VRJY7QVhh*)Q>jmMwXZSS5onz;K?@ z=0e(h1{)@n|GaETIN}fBr;O6mSvXz?sbrNdi83L1GMEMd9^nOR<+d>l(r7^C1P z@l?JOSZBNDvc@BE{62@Dstbve(%I3;rCz>nkuxRC;#gwJ9sGX6``eNt*T|4fT*Lf` zK?bX0e7_QIBzs%LBH{+PwtXfH^wi|5kK9psl3rgb5_)8Os;Sk1V6{-0Dfg>%M5&|* z)%s77FeJbGap%1&LUZtAnxGTe2d|Ur=Xtgo!>+JpT)Dv}Th>Y+HSc7&bO*U8saR`@ zc863rRGMGR`S8&#Uhx4oXt=H<1}$9FuX(3T9y1;#-exyPHi@w|Lp!U2!68=}BE{IO zg*cj!_3BLgB$`n{)7$u4P({9^XLu_jzFGZLB^@Wm+`_@tdyFvG#kCX_>)wlU{)Wxe zTrK2wkxk(fMHd<*HZn6Ryf%6PdXvx4R^s|L@bPNAZ%}aZck9+2@Je@_Y&2jLL1MryeyUI}ME#7hnepiiu#{OGLB6KwP;>*qu z(DbhZA&8d;4m$F9E5siz4K6(wuRZq@Q;{qWnl2r0$?2?m2>hQZx7R3Sxfdq$;_ojH z<$n{)GG7%p+c%igNiZ6TY3}D`s%4wuG*rpAWtLtnlMdRt;iY9)p*&=E*w1JKOpWZ% zWO5%~P2-lmqG~KaPwB;jUHvdG>AQZ?|E_)bCOHC@X*qc7`tQHE;Q z4u$i@J3|)OHpH}|H{8I~#<8)fF%Pu1N%W+)MdYvLZ*_h}zsLBGE;{oLcm7TtrHb6y z_0tYdA}e+k$JfN6=47pC8J}vA%ZCqSDn?Qg~DS!^yA4|8~#()|hdU5f%?Hv-Qg7gypp!W>1~Kpqj9j#OPeXyFip;^v4tY zQ3$hv`&WxRe^%*D`R($7`Pj(YjpjF9#%*;j{}94sAdW9&iW6 z8}_99mylCeTL=17fXeq4)D4`>U>++=XjGOZ+?1s>ax^f%m*)p5oU!KGhu~x$;`>3h zo26X558_L?Ru>-^so91-YvT(8d~plke@5{Qe7)HI!~6n39B^aXlWQ*6HO_H9<=ZV> zjc@bM#o!O2Q>WFPaGy8V5)2W*)bo|EQ7sz7EVB^oJ-KBA96`!`LXM$Y_q>!v2zQql zhT7c^z8NqHe{-nNJn!D$VUd5~6Qe6Wm8!%Z*;(x%N(4ithB}^i5xSsukm4u0@2y_N z!6!Z=JCo6&mJyRBtbkk82$pw?hf*H9*GI>C6kQ;pZ|)x38%CnjFqG~5R;q(H8f4;$ z?~o=9HR6}XA~l=p*qzDN1?fy~ylJiNYX9vn@F$-m;3>?7UcmYD>>y-=VOI8gq?aky z2!Tjgujh%5$x(uUm;6O4^;Qpu@^v1EZP&-O-%S0aO>7=gM4daFwCU}b#Mj&CH(1Q7 zdJbQ>!v5k8vp^=uj}fz&TD*Z?Rm)PDtDd6AwdnTIl9uH94co-qzD!V<*=(&LZ~C8^xP7aBc| z?kI@1Mmp@#;-13Cr(A$2g2KtgB@X(xad6B3Jtc3Ssuiw-$xT()P*D9j!%Sdi;~E8@ z%&hVgbC&n&jgTq9_FchcZ^9NDm|QHd+T)m_2fl6o>$_1;b{yG71=mQCy^D1PD>eD9O-utS9;;`M8>+!pXkDjK^A!#MJlhiTZ=n@Wj+JuG2}OgF2e z^rKz_1WUc!xy4zPh{eXAN^0rxwx0~~TQTGZ5a}{*Jx^1^$VxVbFNd)DEqM z(uOK#a{47d-(BhES@O7i=>ELs;(Z$>;|6l*Gv!q}68xhdVqQ2!Hoo zAC>unF3}-Mb;+~lLY^;f=QKPe&031ooc__skGgm!Fp|kTz;VDkR=06|hf`@WC});l zfXDXl#r2rosx$q7**^{OI*#c%`dglDu)Wjm(UvgBR7JpRHm< z*hOfYrXA255Ph1dKKZj*<9D8aj%Y2)HCxZ*z9EnqT?G5J$_ULha!XX9LYv1UwNT0=s<>}VNpR=HKEbP=G zT*>QZwy?>$Iz&P-Y9H?&h8{QwyzW%Xh0XcmYicLo4bBY@wczPLsVL$!{<_V1!sger1Kd?-p!USd6Xw{X_{fVoUlpvhq)> z*4W9LmPx~Rh8v`3m1|KS2qWlU7OvFjU2B9ghSfwQAoLct$C`AA`gc!lNtVF(*QeVb z3N}7i-;!KbNP4!eZy_A{5%Ria67S@U0^|hD8tv(xAUh>_kkXy$+W<2Ky|YDm7Wvte zbyIxM-03xvv6-%1RvtvXixRnep!Nq<2w+On5Aqo8KiwZ(BWwMt#mNo{&?{Cvq))rZ zNuT~Fucfb&O3nYIi}eaAA^azfiI*<)pVVnxwx<3QE1pZ*|39gszl?wX$s834fB#QB hDE>eC-3F1&I#4GUFf&8CP@RlSN7GQF=80qU{{iqQ8r%Q? literal 0 HcmV?d00001 diff --git a/docs/_static/img/framework.png b/docs/_static/img/framework.png new file mode 100644 index 0000000000000000000000000000000000000000..673f10e033136dfb87cc0f28af8aa75d5d2a2dd5 GIT binary patch literal 209724 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%0DoAkLX*;pZc>8qzo1 zFHZ4%W6{QWeLk+ZP*qUu@Y}V=PJ%A0sVh61s15S!lqp1XCwcYV2rxrcykvqi>(M~x z*&{I4Ui~Oy7?0^kv2L?$sAKuQq454#mycCY9}cLjDSsa&R8_j% zVV)mT8t3V+h%gM!(d&742A(=2DqV|9yxjc+0oOXm2MDzn!RN z$esd3$L!H#MpzyhQa4-bnS`XnjvwH%Op=y2cUx=gAoP48Ge2NOZ!`|@o$isd(n7dF z@PjGM2M%Hkikjbix#k?5$i(_wsYnZT-zo{bzoYH=lhV)C3K^iK(d!%<2ZU_He(p?z2R+@B3m2T|#asQZ|Gb;EDqhfF{Ow3OBQD>F6Ii$6 z1F*5$pjqhUqpNtl=g&l~n{pHAC~7wA6y7;qxZryw@uvw)dS@mB{cLDPneho4vw~+r z4oceQ_YCXSg}J~u&c|{eyCljydLH`*`1QU9IS>w_od+E@&l=RJuv?Ai_SaPp${xp0 zf9Cim-cwqj@nlIdHnhs1z18WxdznN<0KUdu-TDx527_@37P7-w-8WrZ3G*_7fu&l% z<&3;Gr9O7*VVV^BuHvxf1EZc>2gAKQwx8%JLK*zhZ`~Q7=|V!0-^m=q zGjP(vLuRe|cU%OZ-Bg=!Az49#Bj+bBmcFKK*8v(zk~!`AHA=I&>36F~|BKXRE}efF zFI2Dna7FRH`tI(0y-P~=xsyfoQl`dMwiL=mKM7I=Td67%7F+Al-#VnKV^K>2*7dcO zGbv>!r9gq(c?rCvhAwDQ?pueFY4L-+og!6!fw#tn4bJ8`lcb(6-cX-2FanW=T1OYmOI#y4;*OHQ-=Fi zvnPo(?iS7^YILs5q1A)IB17Yy+E8^nHY_b+EF>x9ni{Gr($C#qVsIDH5S^45@^sjMNvyrT{qvm=?@a~1j$ia>P zIf~Q2YnJ7KXU$k<+;PND4}BN=0`zB*_^y>l@lJ4qaqoa#8+Yq{gV@9Iic;er(aPL% zf)KX2`wLV|!QoC~ZmOzjP--lWF?W#dt`$Ts2o$)SvE{5tBO&%`UX9Q!ey{l;KN7?d?ydjW+vJ$X80-@I;hsvQ|Cc_VnaeOauj=!f# zyqsY6T)FeTLWT&2!AD1*^Wo5lxdut34&0VDv%nkL-fnOpG{0G^(Ix0=64`maUsIX4 zK!Su)tA{(biq`1x<&Za2-fzqNyz^FCA(P7J^IBmiY~CG8Dk4%;=%g@bhrDm1ZZIKc zc;70~nTE@HeH6Ox-IIRT{lM$DHc_!65DV#4J#mTJ-@7|Rn-zhl-E9-HBN=R+LNHBn zEr`0(D1*z&!SX9sEbqgh&Muy4LL`C5={&_9j@}k{bkeJUG?;y=NFmDYSKK47r~q89 z5FZ0Bq8B-C$(h77zdGIR5WJtfzUNFyCQ^7p?bl;#2Qit@&Iwl4-;1##OUAHtr`spI z{b~7dJ88)YYcjp!4m3PH?sEoJqh$x2-sprsDALhAI2&aF*o5YRao}6{m zANE$*4_mqrgsl4VV#b-ljJ&|U8XTxKj~iX&4$$gC6n`b!m34C@7>D#3CLzh$C+6?P zYk??TrO7+T_IlNV^l@rFdOTa8kw;fRJYpm<=B4uTk1mNJHULh+_RxCPiJn9g?6K@8 zn~mvKL1_A<-UFsWDu{*QS%6A$6h6+nD*B~ohO*oQ>Q}4~U({iQXu9p-`0+xx6R;x3 zScVkMw1l?a8};1IPxc&}5v>q?x7LhU8)u>mR}I#mvnxSqOb>rj2U~v7JB95s4~;k4 ztnq9H4W*}@(rWiaDY8y0g|4M$?OU+S)d)AnO`ofOuB>0+J(cadTx3%hv-*A^qOx^V z;Di$)Ek2^@2o5DR3T&~H+j*Nmg%c_5H^Se-Gc(58&TG2C1D2`~S6nICWM0xY8O$wB zo<2`8qu#Bp{A0hge34grGjGGP5)w2`*F)k{ZZy%*T#1W&#`58)F$>!k3?Aqo@Uskf zr3)V;PJ`5Oib4q1B=8NhqwmLt%}0PWl;EoiB(ayPli^&~Aq&5dPs(W+SspPtM)0)a z)qBwI>cc#TXmBv53nWLQFz%{Y=O;RVzgzkW7gu~C9M4uXG{ojboP50&{a4vV%4Xxy zvJ|PbrMm@hO!=fw;(m3Je{n9ji-y4~NV9Dy)s?sezskoFvTcvp!id!E1<9>4B$|1B zg&?eKgXuG8KgLKG-q?1`f;?0O-TOaTU5_RtsAqX^Zlre`%s3Jg7p=*AVob&mr8b)^ ze*E~2Zev^5fPqr{8M$&#iA{c0UR*;o@7num{x9B)@ zmXoc)<230kBI0_0cjvX!9TV05Rr*>Vh1a?4_GjFin49V^J6DuiCftDo#~4J??&=^m zWxtMxewfiYaP@bRs;)e5o?y0+i>u7Qx7B6r7j?F4Fzf9bCA@hm*lqyi2LtI0OQbqI z-Vw1SLLy#8(3#I`2EqGPE_v?`b?TBU#wr^DJ|r6 z1LF-FE-s>mUK-zI5WeqM8I#zhR zroDr~@JMY)t>~o+*x-_8VN9sgit%VJYv2In-s$;d==zRFq|t%rmW2(csVI4Ubozc0 zZ@P&#Lo+2Um-5$!!PJFswVfyFvWoEnS3ICyDdkQgluA<-TX3glF%b zT#9-UH&`&y|Dq@MjWIR%Dr#hyjv$su)6hDN{0C@G8ZGIIj|cHs>`YLe_Js z454p97@|0Su+gG{>C5NT_~dSrh_=sjrDmquKfXM8=RH~3y`%|(o~xG*zC${k$U{BUGgN6Aeg(-UezXp{>G z8^<^;%)vUZMp0oGPg4bfKcnBq0H@SKJnNCc)AxSei~Q7U0}(2}*O&-hDmbAc|gE>^NYnv}x(@vF4Q{$aWF8yZnHkLZAv5}EC-Rfc_;YqEreSk9>loM+Yyl zanHTNl28T~lfqldducK{9CYGYpZQad0!nS-C%%2aqtrNBI+)k069+7cg8iub2r*9+Wip2tHA1)ZQs_NTXtal!P`E0?<{WT23wok zV@W|TFzBJ1^t4z_BqGiHmv#S+7Z(nALugCBUfgSFhjX=}0*r}yL^&l+Jo0(O)&JN; zm#bTUbpv~Z-}Q{dOKNKZ&yiA?O9>uIl-b$PXBQR<1l+HO1^_yJz1tHe4=in znO`KIzi)&H4eN*WgmYZOW38k3);4hc{1D@He$n!Duo9!drN_VmkTXeg zkehFKTjA=FNKMb!NSKenTNUK!ZD4XHukG7aN zBR?8*+OXmOhKf>o9&sxq!fd63os?!VLSiiQtZ4*IzD-S?_pW2pAuLYhiW$K~?6tc1@%rNw5&YY^b_FKOI3k!u(BbB^ zjXlpD_%dNtO3KU5REZ?wE}t*wQPMGbv~(TgWo8xO4inzl%PkNoLD6^+>IycJu zw8&0!t%a9{Md z7)e}E$nZ#ZWzJyyc&Al@tNX?(blpZ+{A^vcD}0)Giu+VY!-~;z|KZT>(YV}#PZ{Rd zxmG2-Xs=eglqFUaS&QsdB$EQkA*2T4sY|}Q70VM_!_u+tbG7B$9M@uD^u<8w0o!+?GvQstLB!0tOjDdIlR*TzyrHs?JwUw zN3@dXJN<5gg3EC?y^|03WaqY;ynWW97X>~I$)pv$g?u2JB|jU(uV|1Hipm-4j>k|UVu4SrgFO$DIW>U9=sZ)4|D_nSx*E^1R29 z7zX9*?1H{+kY`h2=w=Cx#vs6Xs{-~R?`(TJ&jD!sODT6PLN>{lRZa##C>e* zqA}sLJNkaYD!dIx#ZK^^yfQWG^e5l>U>U5B(aIt&#YzTirU7L+4=sph53Kwh6UCFU zEPr(TcnONxX*XyeNg-kG2+@x}wTv3bhTYU(4z0o~D!l$K1>qXAru><=qauRRNP%$R z8)iz$0XkO&siz^IMGM!wOb3hom+ML)p(o|l zgZfqnK?j4od%$}Dx8n@tb7{jUN1QX>ahlHv$O;lb+zi76uTgpkw~NOfZXGYhe@Iv- zHX@==Qz|ga-L508p_fJ+FVZ*>b%ZzqGBoxL z_>%CDyLs$-Er>I#R1x_EGRuldHNq!ZFd`L~?Vg zx4W>O^WHRV@!##gWY*>O{79NKBTewD*}JWCm()smZkxPCb^FxHIRz@YwOMs@7oXXD zF6aGomC}rNklb@UvU%RdlFdqLI(IuJb0kN;NiNoW13b}~FGo#t`PVOtilk~Ky18>I zmO4E=+O?#7x5;b9^{Za+PP=dXZR^v=OL`~Ed4uL$+i8T^EGn(=RDhSyEmdKI;Vst0CgAG)&Kwi literal 0 HcmV?d00001 diff --git a/docs/_static/img/rank_label.png b/docs/_static/img/rank_label.png new file mode 100644 index 0000000000000000000000000000000000000000..29a82401f337f538ada10321e9bd859b1a0276f1 GIT binary patch literal 248078 zcmeFZcT`hf*Di_`u>(pC#n7ZTDWNKcCJ+>)H<2b?LX#T1)ZhlC22km}_ogT$2qa4H zCNGht6uu~_&J1{Mn6Zk>%P{YKNib{m*@b8gF8OlCXRGd_r@Edm@4J{faw;7Jqh-{rAT=?;F22?vaKd@^n;p*#I@RB2?)gMG&R@J%;MAj7lR7GSYs=GX zr9I6*`_6D6p+J*WeZZI_{I?uM|H$WprX+F&<({9QkNY}ne18h%w&Q%|Q2rl}|CZ~= zn<@ak;qCx5Xed>lSn~TzVo!dL@ay(g1myQ?znu83JwLAG;P^Au5Ir`uhwAa;Uw4E0 z1qe11J_V<37rl1R{(dz0@ACCRAbTD|(}1KkVN}HJwAm8H_Ha3WHw(O?`X9afA9Fm^ z1MuhnjhC{(aH*qZ%~;TE@|iB(8*(Qlb(^e9=!eYG*G=rzOBVZ`yME-p^D^I7eh(ke`6KQK!(Qpp9Nu~B0&twhG3bYe2Q2ie78SVzr zE2C}Q`&lLwdFtb-E}AZ8(DcBt1%@}^@VAHK^@`O56U$nTgsv_&3Kc-9xc)Bg_bA|# ze;=$JA#QKB>E~htRxv7As7K+PjH-@B&9VQ>t9#ojk|HH-Itxn=?fKtJ(Zh=${bm9# zyjC^@L)oa2(-V}FAgkHf5Wk>`}gR_fn%T^ATsT4`}W${ z-staO&ad_5$Tuw?_vYw%`gf~;%lQ>m1ZOhn)~qAIEdbr$tSqyfrAN1j_u2dZ+Uq|; z{->INtBd&+mSiY3$DWGwfa_k6a$^0rXbvC$_wIs<0zZG9^s~LyLlyr6_Ei8$JgTpg zbbPZk!!O_bBF{UGRpW%mI5_9xPHgyxfE&8CZQRZ0n!6T6{Q?uQUw7V8k~bvV_oMe> zr%R9+bC^eF1TAnqSxT*IsR$3@Y6;9Du4ax}wV-KX_{{MdsKeY!-#2l+4ΠtcC-| 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 p_wR-OP3`Buw?B65|ImP+n(4=s*k44OnE$d literal 0 HcmV?d00001 diff --git a/docs/_static/img/report.png b/docs/_static/img/report.png new file mode 100644 index 0000000000000000000000000000000000000000..2687bb5c19d1f9dfd08b8420d4c24e71ca4bdf63 GIT binary patch literal 167927 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

%p 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

GZbH`i8-|Q>W2D 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 literal 0 HcmV?d00001 diff --git a/docs/_static/img/risk_analysis.png b/docs/_static/img/risk_analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..a15610d883702dfa860ad786be98a51552099905 GIT binary patch literal 410721 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

k z?<;HSwv<|JQgXPslp04f`3*s9Ka_#rF2D@&P zpjK~x54Fza-XaD5uOb@B9%)o!Cdx&M2Wr^HGHYJ!dg=q$Kw6HJ0;X%4)Y^qt?nDJ} zeQ*4{PR(~&a3*mK0i5qAv zGN0*0mZs|`8QzQ8F1t$&MoR(;s5_=C>;!!z*r5*B-*`DZzzWOD7o9}Asu_qMFk3Lk z9Vjvv2qX(kxvAZjNSl3RE%d_Fc4=wI^w^FG_p9SD%?dX6Z+iKf%tNQv7RFyhr|O}| z>Ag{4?G_9qW}*$>bj8`WBd?TyPah%}Cq8}E&?1}2(}2lS;7ZoV+uW6daXv!`#;Pv% znrX-JhN=}x$%~*fc8BR`^fj43RgOZ82bi&z54RvE+h{$BIx>N_@dw_Q*DeyqlAUtC zcNjRA$jD@s9^awI{e-15GjA%ht3wH5>(gVv2~~;=>-V0!XXh&r7=*^LydgV7?F<## zIiV*C5y~k$OROiBtQT55_B&i3gXS&xq>|4x7g*fFB=`4UtK5ElFbl=iLs3jaMNG8W zjo$$(x2pGG7ykNVwp>r9#>h2^91-UT#hyZWb6@yFa`kYp^?PAb%aBG9e%m$7AMH2a z9x+UUi3A>Y7j6fAY?g2P=iWlJDk3iVB)=L$o1R9(Af^a}Vg*-L{GMIySc?K*=c*yv zAGv58hZI_D&T_O_S;mfD)}97+k>iOOzxuSa@HX8YkJ_#NF*~>cYfZW_*K|3Ly~!|I z-*3hsc%-qf$|6VVv1({-hDeO zdCXxf1W)7yo^Pb=@@v0LFY0vQP_jTnZF!D+iP`#UdYC=pl?x2PM~Q`?x}A<5?d%rk zSxk@Nf{)rhZIG;_SmZo8h!_|1?pE=}?8`jntx@D|6ksvJ~Gp=F>9MrpJP(4EX(QtwSnWamS2$jyRy@;t@&B$x=>I0_t||+sA#V zcE^NuQ{CYY`DDaU3u*(XmyIFp5vrYT(Vs#Uk8_I<$($RW2W(HgwX$=bo^~6-cfV7W zRX(M(Z!ry*ZI&HnM!qJv11V`=n&Dj8`==FO{G!j()A$`ZPU!v34Xl+_0TB~ouGrN1 zj&7r%fUtJ#&_G2NTFynqAyI;-RqJ_bAbM(FN9C9U3sxhK?0#7=5KY54*qh_>+P{nr z8ndSO(*I&ak`?{gs>b#+Jog&)xJ9MW4jG%s1)h+(OBpabrNCSvDR~T6h{IFO$@40~ zDTFox>ZY;4gT_nQEv}f99~9#gy)rW1h&pUt3|BQ<<*?08y`pQ1NeWWD0ccM5Tdb+I z7NjSorf{PtGecWwB_9#GHoQ7IZe>SP3m@9_1!AJ4*5i)SF%a`ZiYvI3V?wIM#O90| z(Jc;~6F#}>)WsQX3u5n|=_a)XZx+U{5=?JDiE@SJB2noMly+CO>zG}N(t8ZuW7D>v zJfs8)(*P0Z(t=nUZ|a0!3+MM^B^ic=GJ6-Bh4k(lQM1b;kQn~Xy5ZGO3IxEK0Fo}s zCD_={Z^=?VX5L>ht+Mr#-Q$v;HlNeKka+~Rnngs9SDx(jxNb>meZ~-a3(`IzHY8O4 z0l~bloJm<1f189+WEaYk9X=APUgq_nPSCp~N<`T|msh&sWADC5#CUVF%;WNPC;#)& zcKPqb8vU61x~^B~5I5s^uOIzY9jvd+F%N4E3Voy4FLUOy6c@#&B4bTV;l*K5eV;4e z>)IWGI)87^YpZM#Gu@CJ?-@Y8F;)C8P7COuDK4x*;D^uX358!+0Jla02SFc-`e1Ln zRf}pp337rw>H=X)_N4s{v&m&9`!^lRfiboNJMb}$FUuyyGF`8In8Ds;jlY=9x?7W6 zezEp>yyJ##$sJc?dwcgyOyZMVk=%$n3!%snuTa{S7ZASCq;!}qSL|m+r{h;-?e&m| zD>BX>GK^^+_Ur7@ zOd1as-iSQOAhCRvntDx8LxS&)U@;>SAAXU6wRr5EsaIwiJQL0G!}XB6HH4*s|Bj#$ zyv|BX_sBEZ;gVC_$;jt#ay&m&z+oY9@-_KZ$nom2H=3Gh$t|Qm@17Z|pMdRibaq+_ zmfuhW{@`$CW*cRW%AELyo@V1?k`?D?jyFf|l#+iDl4MCVOPTodZn6@mv}_xTn@5xH zV6m&&P2it_*z&ns>v}loJ;=PCCn+H@T*Y0>YMsVmQLtlLvSO%+BEzD5ojn}TIn((| z17=U}2`7IX!#F!9H%S*(A#|``#L@4d>)uO_Rgk4=sI)bny-7mGe!tnf#kR+kuqg@6 z5wBw}rtDdlJI)vG>6Dg6HSxw$TGKgSA*HU22}drK?ke^h^gh91WJ7N|jO?B}-uL{S zabggvF-SCDyyb=j@vw7F{wEvyzKdk8`@MUw`noG<=n%}_yUiFBybSA0!$PO+6?FGl zB=8`D7Nhdn9}T|jo!c?5@mzA3ri`cZWW2S()blq#T_kqMo_MfH{ho(2TRA%%4dyHs zc`Ff{w|%tbs$Ksjj-u9^ey(rJf^g+2YT8QD`wK4*zGEBhXsJxwSFy8`%g-sj@U>Bx z7U}KlnHzS3O8H#r#es!L+=t?9AH2!aY5mSB#1)OcK~z;dFT#wQ(=!%9J+@=&WA;`1 zal()_$TFM|t|4MJiLJ-gjTsKU z+F3wptqm1B)q2xMrH7|yjz3oGgsDmIZB_{tRo+e_j-zM}*YenGd@iNMG!Hi>GhQ!- z&trc?imAeM$^@b<4!eU)jb$+Qz08f=Ja+7tl+K$a%?n#IO!-1;Nfn|EVU?X}SRM#; zY^Ri0j*NXZ%cP;%AeqUy&`3;kIts<*nSE0==5}dZNRr_TMOBi$-88N{HVH&53u~yn zG^E#Am1W(PTSx%w; zluY%3cLcB0$GkVbQ zvDsVd`E;^-LsNxqoG&zQ@rk;M1qg7{h-pe|9~n2FiLNn1nqb$Rr{=g{G-VW8CUtlxbosOYVDw0qyeMM3nN{9Jl=e4BbyPqX?n^D#59xlxqzZc$F zfXj8tAIlOILk^k^w+^}_D&^q=OHqxes&Cq^Wvyld@m=j&W59BPTp$6FHY>rmX_vKyJmuf>U`; zmW6hW`8XrJHfUdGzO3RAOxkUPwd+~o5yq~`KHtggD*c*PHj|~zK%?9_?zduPJ$U^& zUxkE(r~Qc5climK4kmfU-EO&lu2NWOC`#^-;qYkKL!~H$wlI%6XKM0nFZpGZBlK6pgE!B{`-UkBaq-g;Ote^L+zKp71tS2Smve@x~k`D+py1C zZx$LWPTSK}E@x9LNK(_V8CMzp3S74NM%=l$P5vyE{Jo|wyWL(!Bq7wOH4-t|g)D0E z!;`PS+AnEtFJ9hXmmh>4$jd@x>Q6Yhy)#XG+Gpy(d?_KR-u#WD&{6-~vVDW0mV|lF z3N+bOzf@He4~crIh^M~7V{zs)4reOUi?~COh>EJ12rln?Nn`R9t%>$vl$WaSz%>E? zZ*{U$F5?5Jy@TmVT=wxNkD_NWM5J}?y-EuS??j$k3ZRtJsK#qm37R?n+U^WNouGt^AHDeIpX^#qQxitBtqbm|RFT3Yq;W$^_Jw80<7_0n>8-5Da0Xv2yD#rlgrWeX4 zx!Am@NJix)PhpSfd2(mKgi%8*x}yzpq0{(&+dR)Z$OK>TGC>k69iy%7XLdLTx-)`2 zQc4YW7`SrC1R^wdWnTk!d}0gb)h(l^L58(vWFQc0BAjyVhnFCXDm|UO2T6m)qTzr4t8A6#l(vx zj{*};swzEcX!QC-dF?PBA+Ugp>FUp+-d7PbF$oIjmn_$`R-K>MVXM$pYNy3aR@^^T z-vbADK2It+z;=exGemq9Qa58jO0?NITS|M1{rkOB+SMt#^5aI&3fV=x!i+`AK>Jvj zTuG7AC%kc{l#!xTm+Q3ZC!|LfCV%d{1lCj_+^`Ff@8;a;XfAmgKi*o}aP?Glsjo7J zDSycF_uVZ+A&@7qcHX8}mZPMr^Tr)1BW5V#2UK%tk!Nf0n+B?kcVVvt2^(OO>9)y?#kV?PxQu@mI+p|m@Wza zj}3-KoSX_ng_DW637uHLgOu;!st*nY=d*G@9zECo@=c1Q4UNP!60wJ)d#J~8pRDk7 z;aeT?aZj(!cT-amLz22IX^rrA;$GRhmBW`2k%3h4i?Jb{`6qMRr*MV$dndp};mml+ z<+N#%X8tjf1@v5W$RvWP6+Y37D4Ta@Im@@t@DIf4dOXT-%MRas9P-)pRPS zMo?$%FC+`yinBjaIjfIz$bN@8ydYcIv_uYmd@#d2vYcAdf8b=a^42ID<)NJD{3*E} zd6o%D!njSS!Y3j>m6M_0TPq)jGmqmf&eR|g<=;n8FAJ{)2V544P*!ID#&HtoHh!kr zjpYjL-sluzVBAlwzAZ6#eqvCQ9d@cTEIs+wVZ(3IQm|8;P^9?z5iLPRMmfZ^boGeC zo=f)gi7}E>J{2~u%5BZFXBJ)?mi#f4Ba-eHePKW%{^1UWwIAdaQe$&`audb76FGnL z$%k)hxv1ABey*Z0q>tIsbS7Wo*zF(WE~Z6PcLYh4!!=K;;1o|l7-zCiIKAwM^*tV* zqY`CO{2(1f737_>a;68i-?-+})VUaJ_{o@jq?MTSEz`U9+{mug$v6SDMkucoS*KCB z=j&Hp&FuV7)Bt)8?(f-iJG+y&$@eUc&vpqB8#7<*kn%$1^^y4Pg&Ue3rW&upcb4z0 zqjGso;KMT_>&So=rCW1_8MrHb*-v%;EkhfB9s!6c&HRhUG|Cj? zJ~})wh7?eZmrJ|C;4@nUEzyei^2y&kpM>Y)OqH^V1Ko-*4_C=3P7d~J?UxM2mM?3O zb{#90h)ni5#@U&c1}!Z6qx*?9RW(vH3W3TTDj^m)kev@)ecb&`T7KzK*XPA1;@TMo3l zYV~AG-26Szn->IJAZO*zPENcjz{M+!;AK*;93E+q?ru(tVBLZyCWXv1Ujf0xRKq_&Hv#`&W z6=EE0Zc^g4XlpL%recFxt|4!Y3xCD_g{(-TOfMbW8db>Z@d&_ypO50gbI1Oc>%9DW zF*Rf*mvi;@b3G=UV+ozqAywK8iu#o}{zM0Va=HfJpE5R~tbcFdkD*g{J^{S%Y*bWx z1NLHNYt4|25yZs)y?>yna1^3fB*Qt7=B!uHr+jcW@kqCel3C*cHzwzUCtm_s z7sY6%t8M)JiKAnK&{wR);N$V)VwQ=vX?h;Arn4v6)H_pS3SK4Z&*sBCVGt? z)8_y{Io_%v4cpUSYbi#HeBMvqLk=Qpb9c@mj`A$+X03Fw^7T&qo3eezthOYNn@1xO z$^rB0i69+9t1Oo~ks7Fr1_A;;^Tm(3J6ps2PRv0`6N6uS{0rQi4ukgy$Wk7_dB_e8 zT~n2Tcu!mIJ|i=aS*QTl(xdv8S1tqn`+2cNAo_OQF(^sJpk?IkO(!8Cv5?G{+ z?jziM(u4>ekBl3a#{aM#HF2wu+l%Fc(Sus{R+9qVUcMK)>Vxput ziB{P9QaKtCB+Ch<#DGM>c!&Jsfw!j;!?cB)62cc^i>sc-`a&-#toLHT9GPYvstWV=gvb`>pR%{}@o8RIyQf~mH?e&>dy6vK zbe7lZnNrR(U#IHWjP+~b)oaF!X$@Jv5_6TDy-Q!f4cH)$WaWGbSvg%r#doYZo#JKc zJ7CLNY7jh{I%T(ZOSkd@WOVI5Vf5lCG$34BPEZ7#bb3tNvc|`C`$ZnuppgOY02mm+ zm~)(e=zk2cGSnsv2DqkOy$Sy9KA3?OW!%SZx@`S*bGqqr9K`)q^wTB|SJ9`x!I{88 z^naao)02!V*#8*r|2FH&pldgo=c*nKWGh91!VTB`Z)`9A8~HyL05DyMfneuX)mXU! z{m0~?L6jajeY^P|-J%6ztDOI{M+yVljgu1DuDG~3vE&56eteJR5@_?fX(~5-{3b}? zF0{Hq2LPh{1~IhYDQ1AV-dGs`=((yN)W4`rXdt@x2oZZry#X4E=r?8z;8cnbPa<#> z(us>Pz_KLaebK%G0P(+RRlxNzpZkxN`Ksyrt?Hx|;N2e^A^__s_Z-_J7r-+i7D>>{ z^x5D3bXB+ip`W~Bb9JG`_}ha38ozogy?zWl$Bktgb#@ z`DNsQA7B~`D$2Isk(|>^>iVjE-qSj)_&(dhqVi^p&^ifhT(F|am!1G+J4Gyh)4(F& zvj@L`mG$C>P`*FbhnvmKsnP~kV4h29&fq$H-jC=GP@b8p(>?%QIhm&7`VLjN^bHe7 zK^2lB8F$)cU8o$7HvTjd>d?GZGTj{$an#+6bO1CmQh=_-VCl>7+T`+$0mdN z-<$S-cOSo*$6B`yqBr0k|AW)o1G`wd0YD2DT(OAXpfe2r!tGSfvoiRmSyxPE@}MQC zKugbgxVnrRM#;c}F#J*;_2Tsb0D!Lp*%}beKhT4pq?$e6XE-KLSUyv9ITdifCz&*d zg!ec-8PMeLJ2Hnd8<~%0K!>Na-}>2_ieZM9J~_RuEcKq(zO`baYh$vFv&!!s6gAI> zPcq7dc>B2?DZ*+XVgOdL6%y2NvTo@ci}r635%}K6r!l7zDFa4uviQF#!7v<7ZH6n)i4a!A_bK@rqY^P@ zNUy-@Jn(WI#Khmyjdj=fNyT8Tl!5fVfNN1(CD>;7;^IFL>udb8glZ|5?|;)R*1|hP zGD@`SE?hS-254-}E3@$iP~xR0?h3yF@vzol(J^tVKz&mn2NGN}5xK5#MmY3;6qk^w z`{l|K^hW$jso4`o0g-Z;r0?+8bXAlWeQXs%4ypD%0&IW)*oK#XxprF!AXp|&u zDr^x3+}&=-LORG46OA$8n?-6^+zNbreKL#DhevalP;;U!dc6_)7#_=cu$3GFsNiBe z)xH6`XR>NB*8%R`AT{i|{5d9!fhwMLhtGqcsHr;F3}C_zWuEU)x8MVaS$zhUHE@;WDJ?e z;G~8QITZc|EMFJ(O`(EuO3_a~LE@G~1{{4&X6xWJ7O;O>kDLIr1#gv&?51DWUhlX5 z2qUpcxbv$9;g>vC`t5=Jki&WLRDC8NSR?+QU!yeR+G17L#@b{DD~>1inPW4J(gs$I zI**_7^r7?M6DjO7d2@M;nB+8xu21o^RdHUD26+i5e2I~>i(nS2)e(rVsP&YShL! zyvT6U5`4@dg|g}b!PV#x8(-KB&yO|9*ZH&lSYcLf)i?a|tG_#h-#A?P09@x5!POLf zb>UX?hjobdCiFJ*zcqqb|I3rH&Bja8>jbo^YvVCM%)cH#TeBU+EYNeK|F5qYqplh1 zO4_g{tJPtZQo~7Y(fDBa3|aNkoYS5kK6%} zxv^m;iycgLhY-U#2aMW+BN_40>m`@k`dV7)bXMH6C1AZBSH!}6X!Z+b)AL=SqZg|Q!)C9-(K}GigBMf_>LK|Jsyza zgT%&P@qNEAs!N>(o4K)+YrqkTS*jFy{`KAW7Z!lX1=b?$Q^HQGHRk|cIvbRpby7RL zTt+WWf!Z|KZ5|;J)#yiYQ$9q+m4V^Q4zw#^V<2D>C)d)^y)(7L)Yz2%ev<3l zSd2n7k{I>J2vsVU;T0B^=#x_b^r_-Kp9^M*){+Fi#uVa51rFN=LdgU3?@aXU1D__l zioyJ0v^GsZoC~Pwc{i$BKi=^*i%2XU`rxl5%=*jz(u3r7_ix6hGpdWUlCcB2S(Vue z{D`i-F#ey5H%dAwbM?iSS6$^E*r9uSiHH)OlEe*jh3$vv_u-S{4cd9SVOsv(1o zJou4=^`N-^z`Ffzq!gQcE))N~s>M;&lJHS=;QH4i!Rjy%p0fjl?4rWd##zVW&f4*tWvbrvWchv-Ovmdz8*{&A#P=$|7_WemZ4VUve1?5v~7NDHR$88%1z9N0)fCVKkw1|)y7PQ-U<}o<$Qk_pv1RJfmB|;(4=i$Ld zkl(15F6#nQ6rd6`K{!;Urzh%CJIqyMKrIIo7<&(lTp}d0U0zyRS~(1^OhU5sci6B# zMWCc)utQFWT}+_XLaBwH@uM7$#@prJHmjH9F@A3(RBRQYEEHLNIuz8qaP0$)6!3cr z;N@R_pCj~Pt8As&%!Dg5Di-G~MQ*yr6>nk?Z3c6Zxgo<^!8U&**{5{>pyX0b=iOZH z%)x8VYs64xR&xJ<9Df8Sw%;rcE5?O%$3(n*2?@&Bo_qDymB@@NwoWZal2RU{>T`g z{VX(V2DaI+jGFm&pR=x|^}rzRxQv+I`}p&0n1Ys)9xvtN?mQ69Z^%LD4CM}Tc2tBp z&00ij>I~-99Fcc;B@;Jf)`w=J`|Dt>%z2;3^v}6;o+Rlvqq=DwU#KZBFY2(4?tFz1 z)!n5@%c}Y0t1Hex!Z1m$B4Nq`pG~EW-#jsy*LpTs;IDLJqi)KpbYs4-KK21SC~66> z>3>RQ9WKF22?}S{t)jG|s@gcjoZWHoQ=QNswza)Fe&0Q4=(+BNDraebQn!aQGGIA& zA_R?%DsIbKYDJ4!4@3jhWnq=FG>3FMi+PeErYJTjDOv$3bJUyFTvEoNFgyN8T-`@< z1{b1Qj5)`!f(l!KmbLK4gl6_4rqb$>>DJF7i9s-%Qgk7AE-}!IVsTtI=8cb)Twt1( z5oBjd^eH35FJpLJBJoWV+4Wkf6c2!X;dE*nu-`Mk(PlQ_Dqu~Sw1h_@ze@Q6FosPC zdRmqv*~Lx*t80fhE76lEcO27d9nyGj8uMhteQTdaBVkAPRaQ(9S4cxUhl6BoMgLsI z%gfmpO+;mci9?6e@-B83lCg?&P*!v5Hw~fG$E+i`Fla#PlN3NOH2aqB9GzI}_z)moFm|@Y1SyU$pU+PHxP^ z=X75;VQj*sUN5Oa ze1Mk8`D-&Cn%UA>xo!R?yakzRJY4kZ8m0-{pbQSa>&_Inu&*s2u68lKeiQHP$N?Qc zKM$t4fg2C#ylI-LF{dMMk-(=l=see2icR$!w36Gw$D_wu-!c2*gp0J)tx*cUO|hAL z6%uoWqXU=UBq|+pkl_;OcY>? zyNkSHv~L%dW}mRNFW0ECS2y*f+CFumE4Cwj+JuQ|*yN5PwP@R|9v1oYVPT>hBlAkzj-DcN5U^3{&Vc9KTH5pK+>c|M>8r;AhCF~*@Oi(Oyn z1oMyNj&3_-03~ZQdaIS=Mr;6Ej)z&AsQe#xn4DXMDttmBJjlfNy{|$V**oQyy3Msi z2M>D}?HSDb?5X2L&C1R!v_V|?Bl5~V#FZ&j(EJOt85fyA3GMTJ{TI!3pK46k*Gzif zep_9tW$=pbRSJO{E%g@3K7hBj=mZ|OsrzhYXO5d5ibUKjdYSG^HDKPb3Ee>OGXgnJ z(x=Xx2u5UAv1cfXVvZTS~fU2YDL%LDWL-yQulV?uiN~iC(cFgj|)?szorq0H?~_$b=M<(>GfuIi6D^pX?WSTRYfZ`ip0Lh3}Yg$XR6*mX>0!#O5w16$Xs z(WvRFc&^~(3bp-y&M9RcMwnCFF_XBANFp{DAr{9xP_OnBon2)D5YfA!x$Pb0#m!PK zIZLBG_J?4in9(YKLXB`Us%O&~En?VS}8=-jmPun;d;j)#}hP)6BBGltLn=P{T=T>(Zzd}?fa+Gai?KA_hJhL^NGV!sl z+P$6lcHVSfg|+9sv3Z`@Ew{E|r1y4`oKaoeA?n6GStUlHHHX6PQ4bWVOF8B3YxVB+ zX_S{4L&5Cw%kG#Kj2u92j2!wboY_~k+Q4i&z}Q@O2$X1WeiaEc%W-)iwyWCti^xvB zG6&nOm(RR_T$Tyo%?`UVX)ZJ4z<(#=*|=eNou-ssL$kn->t%DYrb^1DMnA4#I{*w- zMVkHFG5Snbd!~;O@^_sBFv*X?@>FqV=TlLYSIKEm}6R=K93E7)OE`5*ll?v&`jYqWP?y`F$&WcJqd_htJ0Ys1@RIUzU1U)y`o~&R0Vyd24MQpYjAswAKLz< zUaSn9*EV3g<0l=`t*NN+(TNHy|6kR#UH%JN#v4YU2~y-1@t7boo$2zb#<^!x6d4x4UzIwXeYb*KesjQV1h)Ks`=gH`t=}xs_6JQ?5O=n$ zA`QKXwG|7kHD|*>omfb2XMWJ4z1?(E|^v-rtgt;Ca zN~n_|+sP^KSGV%brmY||G?EItvW#P&ERRHF3AAGpd#g0bYB0@D43Km?%~R%ujfifm z;^0e9H_;h~lv&e-i_2JblDHV3>a4=4ljo7706J$Vw_vH_w7FgzQzqMJ_# zd-&fvz%$ih7gF=TiDZPLU05oIM|EoN8=T`0f5f9fOEXDOC1V+5>m0{X7I z@nSZ%siJFpa|=1vAfsIbDp%(%`!VsSK{RwIrt5FIi(Q|pvEmjFuOie>WTMefcE~XrCb- z{-fNHP){%$F272E9IK!lGDc|WJkudS^S$+oV{F4;PI=flQjdG)yP3)FF&ueTc@`_= z4l9^;uMUcM>4`2?KLU-EdTqYh`s$rg``opIjMM@a7Jix!U=^{13W-L}R-0hW&s z&wnvKVG4N?)7XdI8dTk`l|%oOPDWR~$94y7k=J_%Pdrh+Fk;JU^76@-lz^M*Qzwe{ zv-j{E$(Ag?pX&NXUR2~qyu*GiS|KeFZDE7g{VFx>hO3?%(yEQii1$eZaGvFwHrj!W zvcIkI;mqf|jSv;>JM|Vkq-tz%J6{mmIst~~hEMg@AQ9(y_JusXe*vH_#j+d`r7eA8iOvqqI?bbWTj2&`e)6 zrp{!3mFo5}(!T5)cRNV9*8!8C6-tB*{+u$MaV^_r)x=JQIovjX1Dzfb!(9afUZU8)6l1-oVo{(3B zgClLNJ?8q=w(YTclSk3*Y;77rIEWkqhf>UTkwyN<>lM~7E#=D1L&km?3qg4~Fkz1@ z&Z~Cj#aJxi+@2XNMjGN(r1^HXb0#m$Tx8Ab<;|JvoVai|Lnon^8|=F3*efN`;(kC8 zlw$g2+3v2Ft$1uxWBU*i_0re+Ey?;`<(NXGQ3OtSELvl9=V0p=PZh5bGYR3?`BaA% zoo%Nk8rs`AA5`06vnm`WNRnaL@vP4sqE3Tzxl&C|c{$Fyfi(`HZHdS5Udw{FMDYhd zP9e$YiI3TBb$O+Tv}tU3w~d%lVjU)?KeOK^R3=j|%gsbe zfXjceW9PaX@~7?t0MGY7UzqufaSZf`jP)eM@;^t#-1pA?N|_tV6pf60P^VQJk3_V# zY8gyjHyf-mCrJ1xyvRNPEh3ZV+C5Ue9nD4pCIakc6q>Ul|9(Lr{Al@6T74Iq?3>h1 z?IN`O;c*o*U9@-bGQv z(7$Thwz``L=<0xjRADV%_L2AW{#-?G=#5>d z){6>Rf`6X+=2~c4YKScEKhS;lLc|3=&NqjGHNG34-}CvX^Eshy$B#U;4G*sk5047> z)fHxcwg;e=8qD$Yc7fy7N2IH5iLwsy8I#$QqmvonzwAk3pT5AUp6hcr+FRnh#zvfb zlP7&;vW3q{IsYH_-ZQMpv}pszwXjyYs5A*B0s;$22@0qL=|Osjr3lg`2uf%cq!SEC z4Xx2l=%JlR@TRGrY&rum&I^IY*7934@7rtRQ>U8_Vr=q>`ULA zZf1G3#x#H0|MM|?DFbG1#AK8H^yI%*y{1nMqxcqQH|&>z5VDxl_6p7NeETjdXTlA; z{g!&kkL6PgO2kpJJG|_XTLydW^4pdsgVB`*ZPiyzlJtz|jJRGq?e=}z?GEu#`h1GN zszW?3ZwW6ypx`)&eqLafe-L3gq6XY6ierpw^){! zGlE&9rL>n^JSHv~7v9Vg$k)p9?kq{FD|5*2Rng`Ur+3kLm^8^iLDs^QNn`c7w?%jG z6t}Hz^kk!Isy2Mp|5yuLwH<#&D}9>3U#r@60xOwN`Zkts#xTp`s*O=GRS z`WDrNS)0Cyw^P=2*L3n$-=3!UX%h-MICw=cehc%bS}|epeR^C4yLU&JLGi;+XocUZ z=6;~F>eht<^S-L?nGhF!r)?eDrA36m`;otyoT6wTYlvb^EqLFrR5_a6Hdp(0;iv1j zEBY2~$3E&1`GPMF+_0*fGtTYHGfB-d#l)R7)*_xpZ~-n99EQnLKy-?eZ%!z)H|N-JxYUGnNQ)7*KLQi#_+oKD|D4uy-rl1!M z0F?2yr+F-+G~Ls?IR+c{l-ec?!(MwiaXXJ=QEqo`FxBXovhm+LO#!TWjw0v;d8fWX zq~g7v>RP7!+V&#a(Kw~vuW{$!c_+n@9#i&C)F86D^H;RD_MKCQK2?4Gw-56D7!}dw zAG*B0ltZNtMx{jHyby#G^t_(zvm#eH`feyc)?lr zSYb*D>B8{e?0HSOtQ{$O;q)JxHNR0%Yzb5Re(Z4TtYTVO7t}gK-K3l{wR_bb-=|WO zHs94V)XrNte``Q-)MKkU%kxoaf#Y6RVpd(D%lyZq`@a1K4j;vB8ujcMX|H@jk5`sK z5i0M>;QM!k@9^TRNT+L^0vere*K~VbXR?SpJtOb4dq;E=wTySL^n_U6%Xx+=8d)dcfJ`T=i{bEM#k^jvEHu?) z?cST6S$6zbs-q80P>_!ym-1e+oULV8rY&W&;L-VfO*Z4v&+n(nD;)kj`@diRpH3+L z|9>EU7ZuI=n4=P@-SdbS7+i^h44xFXGsw_E@rL%$AD-QRNp_KITp$30pX5V8zpq3F z28y?-8M(Z=4&kE(U5Q`P#h+7X7(et1YQ%pHZW4c>B7_4SI+AZ;T1%XNAh} zvea=~Om05lKmGaN*P*^cC#aFq#l2trwAtcJw8Wiva)>ItGwpQ~@c$c1HELwZjzAYU zF7$=bR-|Lv;TjdBK9U>BDOUV>2@y-atwM%K|9z6wGMng}?$ zyF#ctzKL0v5L31>F0>&-Z z((E~gtzIx^GrI^_w5-6r#Z54Fx4i|+LwNctjMihX`dF-$MzzLtMJdEjGT2n6N;TiG z;!e_(c(QDSkg*mMs&n(f73Fqp?!OKzk?a=|amZGl-+#SOa)sh58#vZyPQVe5s3-%l zlgd3bu*^I76Hskx*r(#&0PMFRTkvlVq7=8Kf$!1(4t~RWfg08joxy?Bc!@iW06zD^ zE}Q0`t0|s&f;fMT8hl=g`6@Cu~&YH3h{FkSW~13O?^4aT`x> znu5kDo`*msGGE|M=jGn}=jvk=YsVmzZ*SkmpV)fz498OgXTd~V0a9t4#LyWThW>N) zaSA+uqubA);Z84uEJV{YP!a+a1rn#8fk4YjuKaWLDGD5A0Q0loj$!CV>W)Fuw`pDB z2wNbrBE#Wk|GD}+#cL`69VdSSzwti~N33!Y0e9ed&CJnTq_rH>_V!+11NhU2vChOGo zk?h7C$()WJ|5;{sq$kkRhyT?Pa4m4@%;xKnPfBFbcl36CF6mtJDcZ|0<-Gx?QmhF8 z{hpw#H%ZxWPMn8&?4S15d2E8Vw&t7D8#Q(qP3wl@Cd940`b#BKB2h}yIy8e}<6cI( zv&ffH2zPA{IQAIHfe-F@6^;U-z=tAoEw}{#Me*UY2@_Ok^QTT0md^40kTs(`?-l< z_Jmi%Z9=!OELZRmk(|JX|+bOwL zBQj0c)NK)rz{h@7w45SgFaaxv?sofXB2gfl-=h6M&izrLPC52i*2k1CqEI~*3*X9O zG%j%G*36<#$1J~q0I<_>3bMRe(3Nh3Z?_H(7F!8-I0^rzj37;XSrjw-eh7o;?#EA0 z{&A0&_c;k3vrr{weQsBX`j!wk@Y@*R#pV#?NCO=I$mcfR_dXJT7e9dN=M+%1c53jtYPj zAsW~+xKEi3xbUskza0Ft=Hk;J4JjFBksLxlCqcRijz7V8^dWR*OaSvT6)^ZUhF|u; zMR0n2KP!9dZqxgy{}lxL@~Znx`=m%A(+<$^(b=Cnei0mqa|U;++dBqS`W~b?Kk=11 z4qjc{V8S-r8?Vsgg$~4>7C2HA^AoU%5jG&oecoTTtJu@Ys&L(H1i!xpqJaPa`x8(J z5FefZb&|IdA6F4DdKxY&C;Ob{3o3+!b7Llm*QjG<_ z(xeQ{pXcE?MY2kd+KLV_-a507Zj4C{jyRLH+xS}iyxqObC<~@yT;?_e1f_q$TL5Hr=lp{8ab{sKAz!nqpeo*~qDCq_#0*VM4igRYqpuV08CR-uv4L z4E?M(SIcNE2GE^)yph8pgWkJ3Mqxr0<08`XJKkBm98JQa%gm9wt-^#W8Ptk zXhEd6own<2%#vok97v-fO=q>khMnf#t=z$HGjyv&39K08#O0S9m{e4&B~9IXqR8{B zpup=i`Yv=!*^LNv@kw~op5oZ5G|c3xuHtWoBNk;3{8}!}C!c&)_#q&O#yzGK4&U{N z-NFSf6qqwd8)w0{vKwUKegl1>2P!tNT`j^&_pH6nIhqf3Dq0#V`wsZ}Z?VFPwIjcF zS}u1FjSa5|Ee~`D9KserQRmj@Tpi*Y#j-Ro@A}1c=P6GU$#OMldtFU#XFm4He;~_X z5Oex1fw>2W=p)!Z`7**jAc8{d$1kA0T4w%0cNGm&ys42uXmX z0L}6Wv6@Q6-F!I4<*_IPIvi7JwcrBVXH>^%mKxXg9jyNcvLe;&c2>Nn9)cH6`gQg9 z|0r2_dhE}GL47gK3o^DoW%*x*2TH}cZeJ8dVi(3zY3L9{TO+F6EEVc2j&Ovhabo=y z*eZx@0daPjZ=QO8q=li00gDi*zR_XmuX^P9PQy#)-AUO_D!yWC69gSGg#ngLDd(3d z2S=;?`0<(2i1F6Fe~*5r&t_UbQ5v)3^sbzH>Am;|7OAbT&N`B#t=Qn}^;GMD-1`NK z51jWV&#BH^q$Lz*3AkU^z1!qwKbvl> zP_APneFJ7pwAI4@p6_E?TjO->KRkDm7Usw$A0uONy7koW7svnyz|(m0v4_)RJ?-F9 z_*qPZ?BhGDpT9|yqx zGK&8((dW8zDJ#yOTisNoUI5v5q17hE@~ z#PXQzu&pzvYmp&?mWk_j>xpVinkDVivu_+e2J$pvTVvL4p4MzrIVh>47l{|k(K7d& z-hbU$QlYm(<=u$iryd!1`*Ie5C8g5+$v4@Aih8HIGY)|P;pa*sPw3P%x5>5j@znNq znblK;9+c|reeK>{3ytP9i1kD$b_oB#uAR^4w2p0jHSEUeZ>6in-gMUX~S|Q7zYs`SzK7mTIFg*g3<9ckLCv|<$WTdJU$kE zrLE;bu{KQHLhsMF9+r4fh1Q)jRkM-7IvmYX8l*`~NayuG+ z0}%Q=JX+$F(!+|5u%6#$vwB6WcLi@bbbR5Z%sR;FoF?^i2sw-nbh7rW)NVAtsWf}2 zjk;vOV5H)wbCNM4S$o-BxF~4nxNP=e_Hx^K@(*m*m(!{#V+W^Xd5uiOKk4*y=?0?I zgRtr{eY41e6ooe5)bd$>q9h|a0^n2^DCz!R2EAtF8M~O8XAtQ>7d*k7pl@;S+gg?Z z;v|IfFYqR}#s{m)X5ycd6?@u;BpAb%9!v3yL7?Z4JNC@3we8~})*DhY*UbtQ{{6(? zz9ffG4`3%}XB3|!Gy41G{I;>tl;N}a-NF6?0oZNuE>o{3USZPtx%|y?9WQ2yl4mRb z6G>0!I^<^Annqr!a{mxlW|ty4{Pg0_beZC+Rv>BhyaD&Qa#fk9)f+r}E_;;$SQU%J zn>n3kwF?eHbm21zy{KxTt?>WA=hIuAHKwC~5d3h+S^Ul3=2oZ|1AniO)I6WK-b!DF z(vNbbdjD$c>VkycDQQFx=SIsDe&pjS-=*uT8rqk=@;{qYeYz+zQ|;TSTY#g!TF}I} zS7ptjQS`48jq`?J`;-OPWf|_A~GAS3I-#%iZ`O z(C!$@Xo8ExT3!!i_OnoRVowV@@Z4WYuPMywO74t)TN9V+$L{IDs*`%H9P6yBMQr*S zr-K5ne&{W`(V&D4_&N-K@G{_>^0oTf+4u5@MemKy8E=9LhMwkX+Mh$;=w;7dup9O5 zWaQH|+QQk4Tgz>TNO%v3BB&og)1p%ae3YX4}f%h+!xT)d$mv$69 zJF9U8XD>0Go|Mba4&!THjrm+B%8|Q$!gWz*?RysX&f_G{J{ds^wQ!pZT?Dx&Ub^#9c0Of4wlBzp~p~F5fX6 z_H-!h`Z64m^AJcx%Y7q|23D}(k&UrnGho2b3&0WPVN6MK=-$Fcv)`g`%OSds%3fbS z^`tc>e%cbmS0Tn*`93CnjFe(mJQO}P~~z&2E=;HsCqer?cWj$a3_SaU2t5@lZq=^A_}SlusaEk5=+B1Q*tl% ztf80)Jr3@Ys9=lgE2Xm8ypyl|m@rdDHyd?0pzJm4vq-K;ND7V(W09|D**hG_0Bb%f zjj8kC##TDQc14$jO54B4s4e>feW!`8_czeZ%XLh5^PFY<4=H?KZR=weUvQUy4;UBV zrMGn`6xY^y%ICHyA*(5QIi;)9Ks$bNd-Qjf;r*M@JAE8b?{Sphho=Qo^oLdHv+taQ zj|Tt;l3W?v4{1;6Qq#@9VnD$W8uB(^Y-L_Okm+?-5L&u`*ukHZKno?Y|h!yd-ff-IVG3D=Zg5jte<9n%QYOtxIdptr`a%VawFiYWbfC zD8IJmSe)XuA;YLtd9}ojJ6#s7=5BmsavRe0ZO(w7+HdqS11ywCDt26v#aq(4bQ+R& zL-%4mFzX1m>h>z@!^95}1MgTppXFU=`5vA7x6BmJat`aulSvs);tLZhBv;NfOvcvs zYwx|RO3U*Yy1F=a(n!0vFuPS(s{4v(bvuqN>hVwRO$x>U(@~SOyX@lRJj&*2`(Jpy zGt%m&`k8FEXQUYdZ8!-Grd|0-WAPF2>I^t~BMakFYJU4rlT&il?Pu8@`uyg|Klqcd zLm|15CAx!L=;EG`f5avCK_Jk-Vxk^XC)4pE?~T1Tl__GzOo`6ao6ftG77kV8Xh`F4 zOK%oeTGAcSbn`%Y`hA`H`0I;0x3(ygeo~ab@^HSuOb-+yZ+Y6sgXDsfpvii}G%4y( z$_~5nFSE<|8Q&P52&>p-XQkx9yGM`kHQ=nWGQiubUTO4&Bdf5=eJr0N-wx{$B{m9z>x|4(2x5Qe6pcOU%hk22(_NVaPS1cz%jsuBy>X~);o{JXJ>-xzFHEiepH_OO~MXD z86ITir1+hs0ogS;j!7~pY|g;#e$jQO4FX5 zS@N;uMyBoSIMv#K-Zg-0p2wI%kG$2bp^Zi?vQR(`tc&{K-&rD7G9)vf|B6Va{h-+33nEGRU-E8{f=@>dl+?#B0zdyCM+ zj2n?0%*=CYe18j7ym#y_|9s^4QZnF@qt>gIPe})Nmv$G4mwGjjhPv!#-P!<60I z!)|UFc0r8;m?MN_glZ#wZi--B9+r=J4bEP0lh9=2o0C>0xEo3h9gfNvG!kW#ayEw~!Z)`wXnNT(l zXuY5DkV`$(n*7IGO;8^t8=!!+xLclVPgQf1VjF ze8^tx>Xu2ZSdCwh0U-%;)e#j)5RW~k7V>!53ODRIH%=_f_?dc}xKp#2xP)H~_D ztwy(*A0SjLH?tDt z&>LqkTVc7N;0YZhN|CUl;#S;9-{+>?JFhQ)IKt+MAm&1e9}Rm88=ZwM#PQ{>=%2+p zG#xU#k)2;*5>CXyNMB?VH#veu5V9Cy8rbGmbs#pzValJbfkoEa#9gJ?de`N(lhneD@X`mx{R&Qjc3K?^?i?DX@=!^e$n5@ue z;cP&?GVEfFSm3tQN0PhG-B;9%7Oa({B$HYSk>!M2&i|~%G#VDD4uj79!X0TS_AOTIn zNX?WbE%e(p{!FkCiW-_`Y!wy@>J}|bQWhG;vISEE4x+|Qiyb%xS*t6XnwoszF=kA4s{tbK--%pTf&T9kk(YP5B zk&UxH1eD@d3$EO|!r$T5*WifWDUzoHbL5S*g;agi6s`uH2hz3}P=WkL&CD$)h@6pn zcW_U4qqONwa@HCt_#k;<&UbbHo69fVGg)>s!9?r_dOgAL`msA5QqKWH1h95Rs8j{X ze9Dpz)+9dX>NoZr=S=5@cJ6^kdV{_*3S%9>IdkZC8jYd7jwc=YmKv(Hc;T`i* zD2WoI;XdIlC-O+eVRB&|NLs9ok&^b~WQ1vCHz@Sw6*9o@;U((du+t;+EF~v7>v(Pj zVyBph`=`7a{ zMV9;$ydx$_A{cu^_IDaE`vF9UqfLb<$Ft}@(1~Wsb-c}wucIshE!T#S*q{M%j0oPa zQ96E$|7VEdL|zamWC(r|qEDnOytGDcX{AfRJKl_gC8wBx9S>JTAZUqWY~7~^rZvHm za~^F@BNy4hl0|8@`TK=F5NjQ4izNP5(ocQU!h}T>_kX1K>v50b1V=#aY#I_vzgRAXM@xj6Tg3mz0l8?mLe&gTj zK%@zEF7_+xH88SR4AHvA_A2#7>gQ3znk@{BJ4z9&YIy93{bHfRUyMHwV<5IUVPkx! zWIofvK}IR&Uq{vjso$$TUVbSUU${!U${wYKa0l(cnpGHoU3$W0eojLV}; z#OJZO*CzO!D;fP>3oC$+7MhM%gsI8*lb}e;z7LKoBAXsR+7yqrbPZztUA+B@MZ89n z(O#U1(-5HO;0Wgctkil6M1I*LfccsRMpIKgt%dh)-fc1pQ(P0qXo{FX&AQoC1(7AH z-3th>-!T!qY1%FsH61b-j+hr2W;=&yg3-JNX^KPb65jU+b+Ys=5O*K#2qvEddpcc< z(?39I;WzfKL!k8vI|VM&ip7qb?8U?ci>wI^&9Si4;3|+jfizpY?Y-bUr@dMK24wcj z$D)%rl}+$B#0f5(R8MToQHVHe8JoqOp_H*BAg6{S_9{s$#`xU$nB%os{W4YLm_oka z0Ds!Rs_SXjO={SLnNmK{_M1g8q!m}ouN&PVMk?C6qOGr!22z}Gk)J7!e9bz!8QZEg z?Wc#)%;dc(Uz$7ejXj55AjiRC@{%))NvU~MLqp+GdRwuPFkY=|8-RVoqWC>p{ok@H zKF_->xLo#N<@}{rOdpGj)y|9f;L6bzjP3RyRz#ZK!E*-N^q#x4EqWl=u`xa`30wOj zu_L$yU644;1)I}xu#b{vC5dl@awRR+e1O@Yi$JRsp9};N!C{~4fS ze8|3YidcdxZs}0>&?JcUdcALQCXWTHNoGIW2Dy0(-Gx~9ge`5QPBGEIPC}5_`jGwy zU#7b^dNOc3VKj8hCLN4=JoajDn_6!B%J$>=9f=!$lGO_qhCnmqz5G20)LTI( z503bFlo0}B&l719o{3^zfaAp>r`Yk-kS3lPK+*reT&~%rhY3HfQ^YeHn#Mrn)67fq z81&O_4eV17)7u}4+YgbqdKU$jv#!)}?IG}!df$9%I^0!!5hznd9jmTz&WgamX_u-KAO!fz6Ch{1ONe@&!M|O}b z-sn~`XrHAT*p}|lY5HlEZ(DU0;xhLO3vo7&4&KIzV7f>4zl^TS(1p3~yBxwoAhQcM z%=K~ZPK;stoI~U839@VD12qp_-`G=kb*&i`arm?j#OfOAN^{GRFzYEF{J0%cf&7~9 zqLrP+H~HR|>k5|8%gJ~p(W(GReI-&z6v^BmZw)40-+l#B@D?smXl~ZH;HY)&|-|1JK1j3c^OjyRPo_*Cb!j zJ>TEI9@0b&d;QGo;`=gI(So{Xyjd(kEYYwFuE_VV?T0I4id!~Ou@+8Ow+eM)i=XFA zSSIYz!kn9IIvg36)ZhH=HXycL|JoegW9rO@oY`+*yeoBM1URiRuQz6XpfHf9I^I%7 zRd<&G7G<9io3kbJtr085{4|OeDh5j$#;}krJxK#QKifXJaxg75!^E;tauZaqhvFI+ z7UM3DtBcylTg=ct;Q#}E>J_FFTN zB38QVVdW?Z+zs_GX1jN#aIthzB*|NBbwptP6{!2@!*B(@(_efSYt%iJ7b%Q{OA=&Ln!1B3*VgPCH!^i^Kkky!YD)%czKYw z-qdXf3d)9E<<@7Rkl<(({&2$V=1nUXmQvDc)`&zBlv z=x#O^edj5IkMh2)oH)M)u_jYQ14*w8@e2G{lY@k7NOM2Qr|5E5+sA%s;Qrl3O-Ah@ zk-8X*J~rFL-TRNr1{rnn!-JYPNJy;ow-oIXqd z-*0c)sXJOae3Yxv(Z9tX=80R9}K( zKzU9Q%tf9w82gb1rW;LlEGYuU_~Q~XZG1$=kea}QQi{M<&PM;2@^&8M8M|OC2~ok+sw5CAhS3EPE=#O z#<+De)@si;pP>k6Gg^6DG>0wUE{Tki^U|{cE3gaBk6By}%&Ygl8IsTA_du-fzI-rN zbLX+41H*Ue4=0Y2OgP#jWd6KG+Cl`AYchZMZH3A3=90BXS5JRP63S&4>=#IMW7A~K zNUZJ9%j1Hv2J!?NgV{e;1#4glM3)w^=#Dty+=bdqyYtb;PVuTLgMCXR{=&qb*^)i1(#O&JK3}P=)(pA} zRG-&}7~`KnYMDwG#1mktL%dEO&llJwtoq-!FbFnUK(&=8fI&V6 zeES{mVj>Yyw6{T9=)Swx=$)5$$>{!;|Jz~0-5MGCyKO4N1kldZs8pj;US1DWFdV%x zyFv<1ekFCbVzljsmB2-ERdW@2=FJO&rFB{ic?Jr{q8PpwL=n;g)vbl9^Da>%?`<1?`B2lXAA{m&*e&%X|Y8s@H2F~j$LWt z9$no-U-qBPTaP&CcRy9gBJwiW=JOZcCqic(A8Id&d4*POhJrzakp7+6@5+8Uq zco~7{7D~?@%N_m4XdJTp&-LZE&reEngI*y3)BC?c(o3>NbSS}pyL9FTE*WU64`?IL z@T!NkNfR|!Al4(D#1i3GPX^!}v3p-BiRM=p5eb7z-AcUF4sqL4r5chPL$zRoT^c6UxU18aahVcaSUk z32NBQwhHSAZx)Aa&0SSM<&fp-sYl2-3J95Vo8U9fM{c@W5T>pojp|1vl%U3I)C<~p zJvlG&P=FEzXeq14bcK|$kxL2TMm5e`wCmr5t4DE_K&+fZ!Ma*aJy6Q*4$`{1C?Q36 z1YdE1%0LW?5h0ShkWH}+dqh$2j>Ez**ls0Cp=DG2F!TgqdtYu4!TYfu8hUxkrbd%{ zP~>S?E&4Y&{f!rhil~h>0pvy3{$T+xm=R>Qt6Aasy?54V%@jw~(~BwT!Tf0o{Ib+i zQB0Wbr+1nbHfuK1EuYNtJ;D@PCrYOU2}(imynr=`IZ{eJk$8JO^R2T!bWwK~&3FT`1mh+mSOS z)3b0zq27+HC7YCgk~2WcVmOL9)^2s>BI%buz!+?+q6U_DX(J5>ZVE@tm2;2 z%}EckaLRDB`-ap!oon{o>X(}%P0Z?PrLZdDClGnmfr85XOrjIUqPhB0X&RzOkTpzY z*uICer4)xTv+<ey+ z6UlKnIfz;Lk*S20Q?~zDo@umx?mu(@MPP+G-^{`LoCAy&9(yyjl;x3y1RU)NzMAK2 z({;JPZZ1Om5>=>_4AyNRoIkC}3F1WqtDK#S5pLrc2PxQRj~{$s13X`@FE}Q|`CtlX za|51*+x@jV@okLI=Q+kedIkuvrO0X6JOkWp1>f{&8!NjBHr`xJ=PKHh#gv1UP9y_7KD<}K`{ zLL=9AJjUPuWeyNy%$@^&2{3o}Ti14SmGo+ecRp0}XaAWR zGLO>{hjPDGu*C*2C(ruKd)+X(Zcjc%ABcN7(tV>YqfmlC5Uaeo!T6WfN5w`#%%2E0 zoYkpoT*wj?1aAv7o$LGrq)x-qMj{E+_pT9^eS-Q|1XC}<8k?QI6zb{sH(Uvi_>ifu9efJ+ zeL0g%=!pCgZ7EHq>1Z3(ru`YZaz@xph_bC&>23gXY?L9YNTJ%7^aLnXxH6h~3s<=Y zMV|8M?$d0I#C_Gdo0-)_EYYyDUF_6q{j!qPC+?lo)1m}N6a+IX-(5~fnzKaoW@NEw z+sclfayq8AqRp@AZ6|%=K%f>3T>(sC(4bV!>vr$tF6k9Mn^q-GkUvTRK^Jxl?q#N% zV6P}Xry|$UGtSMgXZQ!idgq*12*hQ`pc+cBAzNALF5g1VToRb}bBG(PB-HE%U{x(N zE*c@?GUN#aqglPHl8-Ph$Y5#5*n*ZSF{5DS;FFy<`^EH0w2<@|xsGRobK`~QYC|Td z&hEc;yyPlt>25j3F*fueVLiMf$DiyZA-Dp#cn@`~CK(04)2su>ZYkjC+bBgOuBx1L#klFLoBHYJP%ou}VVkbwSrb%o;nb*x}p) z9}Rzgp<3@ZMwm-dSHbwcJf5o)(!@);TzjsZ1*6#pX-fX^qe^z&p0>%rYB6ELT5mukzN`!FOy1vL)eMIFRj0Sc$jB0*c11=E_nQe)klXVDBY2cxAwIe--`IKLT zfrzkKG!$D7Nap(p2(-DV2aI1+!>p+Y zb`7J03HRvbeWi=X4%;qx|&S;#^q1NF4P5gMi|s~qoBEGM0LLN$q-yh z@vB9k`*fT0ULuY;jEb^`i{MgGmgSDG#1)*-4Pr;x&=K_$h|(8bI}>o156-fEMsz3l}=bQ|t_lYfyDHjSW3>u|?DOrqP#Q10c+KQ8#mA2$;Xo^>IRC0byvmjn4J*nDyz` zMgiE?^hg59iBvY_mv7053^`k~N4mVHxd($U;uXN7Mr&8WB&DQ{S}hn+f&&hlsi&t} zQ>wIAwbitDhY?2ZRnf=cFeX(mexJN#25c$_8=Rf90 zrG2J>b+ZatbCA+&11pHCscnsB7p0rW z_C%)rME&E^j(i z=T9-M@gc?3v~s&ywH@}HdYaZ}=ss~04BO1KUOEPH68PUOf6ZTtjWz`wi<*t~{F*BM z`a-sa;tI4D9P*CAYp=_%NnkkYCPVyR&oY;`-osy_vKRFJA{KuZl8%FS{CI~ZVtsi$ z(k`u~wca!iiID*Tc4{{6iCtA`Z&x;7=o@k?c@2Wh5!14|uHxqN+Vd|nB)Lg-n8ik@ zwq@4#Dn=;;+RJs+Q*P9_wRa@p^hN)0Cd~@Toaa^#<41X>G%B1jr1WeiYGpqUV$Qy~ zvmyVI5ti>&mqRDqUkh@jv{J(ApFpi|Kfqh(tDgs8OTc*7j?8y*mq`x2YZ7rTiOX5vwA`Au$A+vLFsf7Wc66j$4 z;*9dVmMo^B6G&>9D%m3m058#k7>2*j#n}|2$N=lRrRcyDrQ zG&5of%lxP6as&fO0m9WQEWP`|*sn9xW#`}hMhD~PqvUF{_rvi(Fc#;PBV#+w_Yg}c z*`X0#FH_E$SJ{jZSEPZ#XfZ#gg!H||_XzS|P{Y7n`Tg4Fg50PH|9g8?fFk?Zom_w$ zm#l1>=#IZBr-f;3^iO;eO$X{1q~$_;-lLMTyagp#oe%D_sqJ39=P7tV9+l~Vl}Jlq zG|et>4c89%05PcIH|%`mI^IW+;-V+p`twe3BjdKN-^lkDh9iW6u$v2Aw4nv(1|r`UE9(#b@qNrhqP8?vk35Kd1_H&MCl(pmsok z{LVtIUX6jIfh58hg6ZB55WOaRZBR51_>dtneLY_p(d@_|ReaU==f26o8g%lOp*=Vo z8@qxAtjD9g)v>9wtXpH`$e8|lkQ^|-L9CMorygyLf>}mvZABKNA9&6XjOATLj?|9` zi3mS#V8mE3WGro!?*?L5Q4h6S*N&Ad_vFr(T0|#5!JFcl^}^TmK3;^ac|`58=`&z) zgSXU!%Qq?YP2nBM)1;UkZyhTBa|U=lP5Bit&&0!xammy)ai}Kj_4?(^S7o@| zZR(b=>2p2&|eQdiy*6HnSI9l6K7Ik6!Ix=rjDBZ++ z+UJ(T0!+Qu4c4`uygyK~NC#lk2<@T1RW$qq0_c0yCPV!|vbY>;8s7Q&2Y;1}X(}fP zTejmzBUmiA~e391U*`wN$z=-(ZwtEEhpYLm@#bh6!V#s?M^N3!aSu^XArUwNk58aX>j`4V*Bhc&PK}xey<{n8fT`++Bud;{ zbnz$4Tz$)&k>*spu2jRh!#M-##CEz}cZt^qlwQ(f`*2jk*h<#(PeIJFLxYOpitLv8 zfuuAcboI60z!+y|XmTkBGDs0jNv8SaYe)=R4$nLIrT$nAVS|RkX1_68B*5!?iY zMO&WLhS=^^z@cegA`jM+;zmlZg8At)9Ie;?75ZD@qgQA-$2Zfyg`GWkc*|3-)vI?a zla$8UJQ3s3o`O|If(uYO7OP91bj6qu@SG!TB$Ip#B`;QT*cyj`#}c=k>abu>7eJxcIGSK7GVTdEwOLdg(yGdSA#BVm-$~8hDT<9f5GUdD&rVZK_qX zv50`Tmnj?_-uo1e7ZzayhKK<45Aj*3of?ZAx?rD@ND5^<;%%N$cPEC33qDQun$PP= zbpJsE6F{9&8Ik&`j^EJhu5*8RvUA?6<#mivAag7Y?rGV9`5Z0L^t|aiY0`%M@W;(B z`Uili<1S!jYuTUp3-wxs8pihm6ikm>dD4m%RJrF}A5W{az^fnZucP)Zhm~JgipLdn z4Cf67U_;+UYorI0~O43+QTQef6kj4kLTN*i$zs%5TZvb^c7`xI`{QT!~g!skBjntC*( zPtfabCSdbzzvrS((f?o~_{f@fq9fv2=!jx=dM(Kh0JqS0yi7&YlmH5!53IEcl{6PI z9Ir;EW2RSHNP7O`VnYp0Gcr+PGmFOyLtPJwzN?L;25CnT zsAlisv13e2&d4Ps*xAXO3(RsIEBErZ#MRl>>AcWxTGm^SuAcO>$RE^oLTXQnvRCp_t~l;oNwP$o5fr+1UgGFD43@}xNdCT`*(dDz6RWpew$RL1uJti=LR zh-$|Tzc;HRZCw;>;TEFE)a{UfJ&}pDPe9+?y$P&?-r1@9p}F7m#!WY`!Fj9PDf@w+ z_`7?9U`&skj$TdG)4bXw*gpbw*M}0K9>tRG4>=%Aq%&)7kdz62UkxVhbB1F)A6&NL z*kK{Q8wtRc`zX&HqmP1ntrx7LA+t#$r8@u+CLGUJT5Uc0b2;6i9=v+0yp8pOCnF4# zK2_aVw2rAb|M9Vh>E!sp&1wMFspz2kC>w&ZF`n5te*5P9X5yyI#yh~40)A;KalaC` zQ>t3g{*Z|ZRH(c&#@#EzedF#{=^mMoEz0b_$U`0x==rdF!+$+D)wG?xeqgR7HjGg4+m zG*DFrZS?W90{pbHcNTKdR;0g)UWw!ox$Pbj3)-aZC!k6161--&E-y_!N%!n`RmrC8 zoLhQVtr)qV)L$UTOpYPp7K#zu%xg27N${iU=59;er$9xW ztt}qc6yPlK1aw)BDtqCF`XDT*KT^G4qvY(mC(mkWmd(f$o-Ue~_z z>rWSz@Yuoh&Ti$Tw%v)_gi4$=pw+6in*DJF8KX1T0m;U<1-b^`PqG|ru)@)Uh1u@) zR4FI3>o}2CyC!T~Gp8HFG>Y_w8XU7L%F!^pgX28n~sX@9Mgc)k+ZuoAW=bZOD|G>=ezGCmS*IIjD z+YaL>X{QGvL;yBdJIFUbC|AwKb0oD9aa$6(u!KFf&s-?B2k^BOlu+r$nTvubbYCF= z7E2&L@*=Hu@al4ygZ(Wb=>$W4WrUu-Xfpe>m%m`_YMw!Q?S118AOcmWjHd>hCF^Yf zA@k&j`nXAl$|b*1`L?-uRYZwUiEklSFUxFG3oc*94z?twpBc$JrQloW?Uf^JjlMoe zbdPdyO#K)kP{RFaEOhZ39mqF-3H_S!>=Y-rv0LFEQ@-zg%@S5Dp$`AzD2X3ow8J_a zvPGNU9*tEVf2KhI-!3-Uq3+GEmQhy!K96k=vo5^8M+#42m2vGA&si&I;5omN^Fu>i?&%ClLu#PLvT zOKn!xdm4C=Wgwc0wDypa&Jjyc2QB< zEA9WQVZr5v@i?375Gl7s~`cXt+)Z_mAH3|Sy-=PXt76z1s2F+Yt z0@&E8buDVBKv7I4`W)BKr`1--d+zj8M|cKX!WsBm*2e;XpqY1ESVXnyj$BZBBRR8c z-`HTpLM$*hNMzW@xZC{2;gf0p@L~q zNe?dX3<2XrwAjVb$iLq*eN)r+*QYbAuhc{Wyk0-qZO!n;o@@k~Fuljh6|2J-Pp7h5qpBtq?k}K!K`m+#^d&Z{dg-qBke<31 zQhc#M))E;Rb3({-LTn-&Qt`B78k)@@R|;iu*F-+LAD9DZQgGZwkE{;A5{Ej($qP=5WDOgkbGMHal=jUv`Ri1*wLm zmu=bbjqX77e|*cRRnV6f^r$S?3;fFfuMQcdcJ=7SnW%i6$!&7;&7e~w;>tF@ZaY5B zUrva3vKanYU!4vV?IHZ~Tpv6sJ3N+}^1*(V>~?W$+LH7L_qO_;SibkzGju?#NPjx(;O;;~Kq4h<`b znVgv-0zNugZ_@VA*kF#j-*%BeqzX|vW%H6}r!msp&wt@E%6Ct!b@BdQ(sC!kJXXk5 zEG*+gf0C@%`R_vKCjW{11;$URW_E+D%UX>XMauQ7$yIAJh!In`?k&T|>O;~Z_@PnSOCY7aV zAK%XVAFpV?Z-?k~{-;pK2T0@cg_rLzHus*c%BW7Ri+Oc&CpwV)CQK$(xDV{ch)gL{ zD^~^1G`?13YFM8@91V}-8BhNlg~6uxMBC|*>iM;L_ACx}p3~c=$WFR38Q;ZYjF6mb z$;W~>uhLl6vws{E*Q}gB`Y4eJ&&D=GYsjUBP2Vw5V8ie9WerIIxA@&xn*lvfTn^c| z)0tHo9(TI0ASO4~_PzXBU0Cn0*Wj7@k0MxGk7jGi>c81fKzz?Q+^xASj4`kymik^FhFZg%j@$MlS?`K z^7Bp-`H8lxZ8KP%sNiiERN2rKdk78q%8uh7RMx*492J>dzO2T~o0NO&^m6AhsJ)@? zzoCcR98QRXBCo@YbjUk=zx~~73qi?nDm0*B0ok92+7wSFn)88hv*|ntT?d}R^P?d{ z+zeB;#d#{K^g-XZk1J-DLSP~FJ;Ms(;lX6ORqvJ~(RlV3&f*1zj1Q z(g3fl1eFH28Srp{W%{@(I8qvwFIKdjvaBzV{fPbzV~l2T<`&KSXyau9>1Oao`HFaZ z8P!4E(*OnAoO~}28%NIgYmS)fT3ZJ@J~PGdS)VqU?X)A3#rLbAo_RrFtczla_{|kN zZ_?~CGl$@`4y%^qL*vnFh)I}NRdXvQc+$xc?bm> z$=r@YP;d1SGWW}5o5~D_kc=$yxCGN7jn*^IM6-qhdKZ!rxvG-QvJrqS8_>K?1Qgfv zEt>YJnG6H-dK{b~Kg!({ch!!`x!Dz0@8x9*gCT>B^M@nEZWFD1Mp39iwkOc%G0+K3 z{n+W8$!nilGF42GdU-cL-w!$#ZLjKP0mxsJ$jjev9JUEd$dVj}tdhm;_UwLDq5;8xx)rXw9|GQ-$V-0JWwu-r^Pcwm$Qhz!~DPQMp8 zZe9HaYt%~!AC`@#z_KxN|5=+RYPsUY%Bctn&C)W}z%-QA+yd1!BR*BGMKAv$t#~oW zsHWkNYp=LHbAx=1q!!@$n@+rjf)I3(Yb6E2CYqp$Nu-@)DG?o7R1uE>znT@ z?!LybhAnMmyi-zN1~9gj2V}Br!1eS43TE8t#=+@yiIPrx7^o`^yfY`XC9^DFUp0BI zII<@Pzhe9A=w@Q(PfCK;gl8x&M{82cJ#=Wu_xOZo6jp3b!SE=)${WWm&-Z22xQCc$ zW_-I0y)c)bF8ga(zN&3;pR=NI7;~udS3T^UzxR9t$4`Ool~y!1c^P#cB7cbDN!i8Je-$fI#^$=eVWe3FkRV9 ze}9N9;qarszwTL}m>M@(3l3nrT0e-p*xIFmRAp#rb)K#O;|tN{;3=1$u!oP=_1Es_ zxqD{6?`Mhl?^A~s5rA#x)><(8{=N$&mQ=m>$#@YP2rd8+ZqxXuDK@nRNGp2c6JQ&z z&W%rryxB`7O(j=m3lNH|%j&qXDzWATdKU}%#I}b;&rX$&^ItvHM|1Ui36_?{isP4D{> zlx4TID2oc4mkBwq^fuIg?-Wa}6Jnr8XvaIE3(BZIp|;ZN{8rb9UjVfcB+Ps|O#3(S z>FcKVUD3NFk-xV+^Jw;;xkmsK4zwzSntz{e*_X`7u3NE>QExdZJ#MCp+#Gy6B)Jv& zxc0gAw!6{Ba(qq>NE?IEY&`3ON2PKLgx5__2N_j)V9)sYgOy~?lpNSS_m|01`@eBS zSpYq}37+rS_!c5zbE&|>v2JG!C%*@B(cd0+^xh>JtLd^4g@~bbIJa|iqgC!M`^;+E z726_yeG)V-djsMr&QvFqE{fClA+uPn5G3A0U!6Zs!d!DbW%>Sl$K90+>>PVi_=?2! z_e~zc+&{YjU@ywhsI6um^lX|Ah3s0#Sr|TDt8bi~1yq)%`RQXtM28d5rvEo5zXft~o&(fD z9pL-=mIQ@PQ)X6A;Hs%j)8+?!op8Mr0JFISUinz>skyrN1H*6sQ4yS~ojQO<%p}v* z85~Kr0leJ8^SoiEVhR;vgl2ci3qA9&4BY|OO0EIv@ac2^ok4)p7A{RBF)CaDXxDe6 z4TnXCR?n2uMvXF&HABD6Zxr0}*3X|ai9FTP9UGUj^V z5dFM#RAyQR4zQ^*kBzB^wt!2W!T zfyql@ppwCf({8VHo?AfBplOT-&MM43`tl6CXf!Ts)XDX*+jn6_vZS)H_Xe)HU&ejG z)E;cGOkuIfTw+egqtnn}$>u^%QnYv)%tN6aadY3K=W$OZqpB-AB6c6FvN(4ONIK^^ z_2)$seFl0Zm&Y@cz~X7eFuYbIUZx7p*06b=yIf`h4-E4JKZFp93dtUkQR!*Svyu=x1HtRxSr*9fy-aCmP#!!u#9)XME; z*j5lR#E;WFsdabd`YobB*Q_!1*Phh!c)VZ}TcW_OKAAAVk7!Rw$icXK!%dZ5zrSaq zD_iM9*{%0N3}`ed>rkNa-ey|OSF~v{+9~3z>+Dv8)TjaE_-9DDf3`q-?(RBh6>OXd z@(MjZtcq%HrhOEPpxR7K?2fX7E!6i@R~are^mtTkOjmsXog$PC4Stx8D-lyT!7}`} zK^8^={x07YaBOToG?rmS+NiV0?Pcq9*3cJG>abC!c;4B?E@3HBxS%?<4T-MQsF3c=OUP<^$l~rJU0mUe z_beeZZ?_Z?sjnw`^fNujh;wQnyQC7ejbxvDwDYNBUG-{y@X@{xz1kRNFgTR%*hqA` zTqu^qVdR=i@Fjg~U34s-pP7mB9boAVL9i}2e1Ul?{mNlCcGR545 zUcn}&m28?GZ_g?K`f_Qb%%+LYQaC}zYgit(INDg2oQODIy=j>f71+P1jq-t|4e)U+ z4m4#OH4V}i-l@XfVG!YFWVrs-RU3(}N*A<~rwf5MKAN511XMgasWG3X7e|WzJp3b?EPK1rq2auNqbO zB}5gBX7QgFtA5mFTykX>JuIUz#_KzUSQ1lwU7?UNj$t#iPK<}WeU89L=BSUyWF+>! zb%pgskqThD{BVxtkr;-LF_YoY%m;{_i+!GESipr3S^ILnV$6ovde430Zg&3dHc^_; zJW@BLb^HB7f$*oyORas*c}SLx#kOOm9X_FHIH@o@bE+72+P7ViLK7>DA1gCq#AQa} zb($>FuV=0kM%CavRR$b+AK*Fy-Di^vM&Kl>`QPlSM=x(0FCN|?geW`%jEt3|Dt>xc zYjNzl>CstWx8`0>V-V{1^76e{MlS>xv=+?f?^3Wl;dmFKnpv2&WmeUze{R~xboXeT zK5mj~g0?)08Tz7u!8^8*wc0ZR6dHJ_sA5ydiVyCuC7UEmjKYx&-9ASXvt78#F`tR9 zlW%W5^pQl^`&(eyu|3$tW8;$GR3KV~RIn>f7GxwCcN;J-JA~mBU>!`-)YoREs3G+Xit~@DW38Vs!OM=j~zNnxKF%xlSrR^oaN9&xe=p>^Hp;gwbN)+LF7q8%Z z(Q_(1zmOaQfAvY75KHN4KfbD>dpl!5@9iTu=V?86>BKAAv@A?NU4aj$qwaJ_W1R$fD~|_qv^UA61Q!IjB@|guu_AYpzkE z=)Cmv(#tT?jdgucsSvnIJL)MuI+}db@I+vxuKfx4O4(Et$F+fHwO6aBYpPYFw_`|P zRp)yh+h_K4@E_m1&H+EW=d%}R&;chX!$w}w=kLe4+)+m95r=0!K2Yp0?o~K6=hT19 zAYwuf;_$lbgHu5$aU|u|ja#W_5@7+Bi|*XXK9XozLR5eIPFXs$HF3Yu&i&ON>GMx5 z_m`6$X`UsbbCyS(L%IypIKw<^ep~;&?6>0f_sA||>}?e|&bUcLDR7fU`eh+L1_Y}} zZfS#Ji>jpih7lq6>VLfeHs(=)O)qJq??%I#ap3boQK6b&qH0>|%xFWt-5Umk%v#Db!)1DCm3$cU=oL0GQfz*H9>2zLvU896m4Rh#yaJdamw%$%y4H0_^wq{+TsS;D0zoM+G))o?j zH{Z#NVmU=mlO!xuPJD{2A;!vF{{7?`3ivrH9JPfjbJ}x(GSu_8q6B^(q}E&w=g`-f z&2=?RM9d&vQ8Z@4*V@?dN}j+GvA|no<8?nakdp8d2%C-|_(xcugGoR}X!4n4^r7m2 zq3?-L{n>lC#0Uf4st1O=5vXW6=*yBwk%BNbx?*}YQYP5Tl1>geDCpU zo-f7TeV%PYYQLnae*lO#$*8qpvlj`xx8Io)(`~P@O<&PFc}UecsPh(Ac2JP7yq|Jw z3TCePxW1%>@P7Cm>UDd)ar?3gw9d9A5`?(O@K+KEL3@&%O)+Uj8M*^s8vapc@ADIh zr4gsy)r(VXN%$1K#Hs!Aa=|?Q)+@zx1Jd3R7nC9S%;kj||DIig1opzX|Acp8qiNsL~Mpa>h2c4(wL9ra00rIXG~#`x2V!c`J&Zf%BMrA?ojm zKE2v}QByieswRTP9Nqpx+{jDIKK;C;Q}SqBygTc3igYW_PI|k>@b@8uh6MKHK$qQj zYaa<;kiFW8=wyHBp2QqeMzTtH)I|!uxAd8Wl&Lqi3-U{7SFB9@@jk@_Wxt=;z1YBf zy^y*zR!r-y^x>^-;RlVY>MhuFa-}w>z6fIEFti&9Tsso*P|SCLlVtj?@`{`@xz zz$l9zC8B=`%_3FO;DOGDxL&w$wxS<|8qvmY-q9d|kE4InBYqHdq0Nmam#C^z1c3@; z>K6PP*2BCMG|<4vl5eEFgA^dD?rEy+&e(^6xx($|h@Jt)5YK8fOV`k21@ZLasvobV zC88ZPJ6@&`QUjN}g}BBpZ1&7xd^~8)Ciz5`4+R|9T$ML_Kb}ZP2?LI&7jKHW$b&FDd z3Py@T;>Fw>LHXSm8f)&AYZcy)GA(-5{0EYtnV2ss_Kp5CEUYvBurb78gVKsKAOper z@*{xM#_$58hqNaVn8F{%5@z!|(z=o?lCxrPlzELH6m|g_bEJW&SFh%!{VyIJZQ4yy>m8X$v7MS%-2NT?RSYU&sdswT5zJv1&iQi%9Z+(X}T4u zHYKdNnhpA%oYc%AiEU{?<+Pkop^{c?4o#hM4nedfdPRUvYhakq3_9w+#=Za|nFU)8 zr34qWnK)JLx8Vm;yQ|OZx;wpP-BNjwinI4jB~Gt2$h#$@OCVzP_yknD#>%mix{9NR ze~iyM%zkwb^bT+?Lin$n`~x}zBJ>J6)U+P?k>E?HSDBV&Ek|ni-Ye!b5`KbMTjdcUy=dCDFutZm?vxZ8QVX)_jdwG#g#lFxM7;v%D1y*B06!AFs z4A&1l(;h!1M<}0xw>RW!+lS+k!I+zQ3~5Xd?tP)XR#fYaaZ{Z1Sy3qCNb_{wDHf5}Ys}hq9B{>r^ zkB+H468cLoCmu0%oH>Sk+Dz0OXCq%U7qQMuu;E*6hIC$a91b*w{#@Pf@j~fBX)+F( z%YM=D8wZH$HzY7)TjVWs*t`|q`QC5(ckCg$#C(J9=Y$PteccRxC-*zepEGt9X4hDn zs!VQ{ci<|eOy^j-u?cvrB?8C4K4&mspWWFvOkQ(So#TMSDScBu1kxd~QKe(*z<+#A zB6QX!hL#M_Er=+w+N4Yc!ThH?R$r1dksz}!kG7b88)h8v?#O$8Eo#pU?K*?$_V0gN z?CTFL#q<)}TIF@{fuaTeH0Q;boj_44=tmiJ?>%*}7r<5rLy0LVLxUy29LdOFvWh_d z1^;59X6y~fg1>Z(Qv0fRES_IlQZR?Nmyj6fC2v(}9k9G4lZ{fx=49{T4PTcgQzWYd zV9$Z&{Rc~t0$C3oo)aOe>eA7oMrh)AOy`A*(xlNr4EIj@Aj|EVSe>%l(mDi8LFzy? z$<8rW2bm}J2Gl6NzSHTkY`v8Lrnmmds|Vgx~f-sT;~%8j{!;diQMG0x(#2ouf--_10>= zn|EY1&gJZ{fja*peQW0}V5OV*j`lZZpKypconodhNfT#;c<}1CGOL*rl%Z~$ zf%2c6%TI(jRN^rc_kaM*B`4)1cYO6WfoA(jJMB!#w2rq^5+)dv4ZR>Y=@YDX%=&Ld z1?&6gOdFxbx^kS7r*4}F8P%t&U&m8g6|tO~>220U?osHyDlty^0~zy$VRYl2FJf%x z@2;p>z6TMd^LlT1DIj2sfX_s^Ss~hZqw}{(<_6ow`ZHXrd4c3S=y}9YWfBrN?Q>*s z6Vp?0iXUjOgFMOZp*O%})yuDpptK?PakLZ=17o|-G~EQ~Fb1Duxr{~MNprOR#(3^B z68X*GEcYwNF~35q$_-~d$8ra4w&@I`r%5hiH~KN++chtb?u`hS(o7iD_t~g2GOU-q zu|KnT4@8k|cunhPu8yuqKw_6T zwWEnWEF8$tF5H&g>|)WnqbzRf8{utm5b{ z>6wMk*QUIF*pehVob$+Ai?pTot?F=j>_31jDhLD|<#t@kt!-GI{td@do7eG_TZ)WG zm?^!em;FdFSz7t=15tiu9>GiC^x_LBCno;h=3*(ljs zh$GIT>cu>fa-CGvic+1D7M~~|s!L<2Q?f%g2--}lA@loT1>u|>07@diw%ybEf$JY| zN6OIe3lu&t%Hv*u(;`MCFUU)OS7cj{6Wl^9gS}1zS;6d_eHcF!5;F!ioQm(1%H@^Ll_DG3HSqUBDrO)hddYpUsII zv&O>em7$6ov^Xv)l$`XmZ{HOWMV}vfjn)^g{n)$`q+mxWl$3u{;6qwgXX9!0=G@)~ zmuEdQ2^pNJhQzTd{xu9w#8tFJZfk#FY-al3L;O!MyBLAw;s;EJQU3H6C1n0?Fis!W z>ShPm+E0?*PnmP^cZ`$}8ENQZ`=T{$^0kKjis*cP`unl-# zl!TqpX*ie4;L3@>^7x7bP2iWyO093ixA)`k##xG~y|a8@xEw81KcF>yIU?pH>L7B- z$m)DF`Tz^M_4+D$$M8FnPm)D4s1-7G=OYDxQGN-uFV`MBWy*F9U8 z`;Nv)UUZi+m=!!Kj`LzhH^_^#1@D}xKTw{G>$;CHrZ5oH_@~eNOY?|15tLM5mC`|L zy}|??TH;VfhoPtPnPT<@<_CKL>&OyJkLpp>*HJ0Iy)ExfQsw# zX8fVg3FcRbT}aQiqfuuWNgg{#G3VEBmr=I@?Sagr&*6KRt0gGxD6QaSK2~GeR zBln1=qxz_#+-d(2h$By66(KBvMM2NtoSB5n75s<2Pr-yQbhQ#_a9qa5%&{-+O1O*| zf{JHOh==%vMdQv^fT&RNc(iJhO7a~R-WOUFg;-VLREQ1wY_M%S&Jwfp9`ecE1)vcA zWw~G%W&s&#jU>*wl{T*IZ(`BrL;IgMe2E^&*M=JKt@yRM1sBQ14rtmnM@K8V7I;yo zl8seShBoUC24kdft6LFs8q^syAY_Iq=?e`mzp-;V$-vQWq!iu&DR(@N>(!flVf9rn zj<_jj_McazmOuu=D_th4S66!8ML+*$XnlHN-j+Z1H1pCu-@pLAHM=G4X3DEvpU!x# z4S5@w5y&Xnzt+8l;nE_MlgryG2T^<$ogj@gOt3#>-%9-{%rvEi5`~Y2R~q-+=}dbE z>1sv%nImf&D7Jf|Zr8B|<1M5=ljX^=Kx7O~ApbyV8UBdJrUwZ*g@H~t zI!4;{punp8Q4pwe`PJoEXB=lOAu^m(Vq(Rf2tMZ{c{z9nEb(b=E5jjG%l3k_LM#ob zS#O)|?*tW6ijN&R31Wt?;3iNyTiZ+$YTJ?Ktsm(Q|65a7{rsE}T7WZPvE_Yu*gMKh zk{yo6y(Kpff5fN~n-YrlRI&CtF4nQ8h#$~=|LM!c)?P*X{hgQ|h$xNMoG7KdGA0ZU zVt`u1YMcfcaZZ;O>rC=c!P3iMvH&1(6)IepR@d6|jPWV>KuuABjIq?-5lC>(jzudo zcy$(INQ7hW2(q-0j19xT-8Ri3g&CQfEL=9 zzRwB;m8rCq7lzot$_>&-IYlaeP`(rC6d4nNl^&MNK$=X{hUWni z$f8h5Q^Sm-Kh*jecCr)YT33w~-&+WbR@TuT7Y>k?NgzCiWCKH5*cdzSYh-lJtx`_D zvGpL(fiJH{D)=U*sz#5nA18WGqJ(f8{FHY?;4U^cahGBzDVk2csmbyT%vc+~Vd9+_ zm~k_M{jQ(oy=ZQG-C{Xq=+oBnG*;1AjR{R^+xRc|!P^|FI9IzWM{2hU-dHubpe3{4 z<~?CTWeFe1B~1_h26TcQ$3(WoO(d{2L#VYV%00TvtG$9X`4SgNW6_^4oyrnbLQ*XS zY0}uClIC7Y#W-{}?{c+B)@0UgwCKN*o3#i34J_5M%EMS))sn4uSxJQ7_O5dD=Pc1$ z1Q0zMNUIe4ET_4vuSC?pWwWaKk4crM1;!;1I?n0Uo) z^}TE4>_DaZ8DzdRXo6)e@t)z&`Q)Gpv|0A33Xjy}VVd%~@q5SXBw{;r5@=1T0)WAt z@Zr48m4RWip>ekY)ts^a0F=MHC213YBll2OCFw;NO@<)=DIp_*q>2x!ELv)5 zx|__HHRC*&=N1#wlr@ohJlu(h5N=faf z8vVIE#Xsw69P=%&lHx zzvB_Ny`UufhX_$7mox}p!B8F81t`8aTJgeSuXa~xM7@}hPl z%5F<1g_}f*G@j4q7!UKS_m5HVJKqnbvj4PfwP|%u7O0Qgy_k6_J}*>2k1!KVh@_94 zlJV`7LoeB#3v#Oq09}xphg*YVgBk(qB5GRVtUxF;_oAIPl(K~xQ@&KRdCMR`nV+wqYRCWj&pk~#oS*kp#_z{ zD*p-YCT4!m!gpq$FKu@0X?W0TP`j#J8jqIu!R+wTUmY937s}M$N%+vNWBBlU^OB~$ zHSv;9w!km_m)_g&eF0|WEo=@_K zrA^3irr2_?6m6qMr{P`Tg#gqvuq=e&4KTQ+K+3t}cx)sIFJ4cfaxsuaogN6sg$?v3 zQD(8QY<)>YnkUtgJ*AcFw&etNznfeTB?`kR>nU+#W_`_Ws*%3_61I1NEm>=i9U9m% zp#NFB3uMvFL5VI$%nQpn^kb}5^Ct6p< zR-g0eM~69=e5Ievnq8>ksu7@9K+q#Ft%0;e&!7>3wTri5ao9QmpVoj7?FGOrC>d zD#tFooz#(CGLq1bW>oL2-_P+^_~CRR5@4DV&9(fbiPDf5){`mh95Pvbiz7%gG6w7O)=r9~3a_nnHGJd}~ znfLCWT0u);PA^zXN-u}Z`{iAT{SaHu4{HHSj$m#PzgcBX7gCpVwk|=lcQ&v2G1^dV z;Ie$Nq{fd1rzGmCefva<32Nhb_$65rvKI2lj{=o!r?5vUBo%n!GIn=z4@@}2^z)!i z`c<~rF7x$tXa4Q>p7v^I3UcZWy6IIqS8Pz9lr`?F6byLIXKoBT;txFG4@vwqf0h>y z)7&1JD(eJ8#PE{oFUX)wKByn9(0-CjPI-)Ws_!#nc1x&XPp@APTeg5%pJcHdma+e+ z#bsmr`BFNUjp_X%>1VU*la z>+SDg(ndtr9SC@5eSJ876iyuBPkr3TWx@uhqd?H7DC~Qzg+={>T*anR*8X1G6q=Wo zd^rHb<0KHdiww+Q#AxXh_Fbv=PbL|pHzs8+%uQbSXprgUUJ7?d)uF?xVw-W`k_1Cd z|Lh#|wIAnpNL82?qTOgv*yH!aHT^G0T@L^~KJynHjWHE2A(VC0s?%jqo$5chq|2V= zEn^U8rG29|D4S9)DtuCV6Xh@a+Z8C5v?4x;a9aRZB(*8vAjzl<+hJkv?2AF&Vho1L zGq82aON_zpax)-h*d$PvN3MX|4MChxfnMiuR?YE-3R9q&GlvhAdMIypIfRNdbInQ^ zvi+-l$a|ensa)|Jt6J$uQZ&H?y$H5OUix#mNijjvW!Ndh+gW{-*A1_~Cx5j>=B^9K zz@~D2jSxFShW9K=ZQWyyZ8XbPn8$g9N)cZynUZC7mJrl?F4*a4GgyxQl6`%!TR-IX zv&-!bxlPd>Haj}~tW)YJcOIpj>(d!(JTDtmIO}ntks&IcF@9_}FBDS}-wfqJxyoOz z?BVKjXDdROLI*w5|Kwib`YM(}RZ8PX(1!q-4Qe_j1#uz`W=0hw9vVlhBN?OYhcqN< z$E(M7OVrXKO|!ZdO!1GT*{+zZ`dtrvcx799Ek)bPPP)>3-Z8_q+UmeHrl39167!$| z>{YG_36)WSu)E~VHdpM;4K6f`9}8h<(0d%ZEs+~aMece`_P=D0NUST<+N;zn6J0cY z2@url_?My-S$8q{JpRM%oA^faj94a6VFTjUeOXUD&gaj42O1JNhsU}Qb(SM#H z9X`D?)ZL~GA%E45>KX_-d5*ypTgL5;?6Neo9V$mQG1dt_7V?!|ouTynp`Cf&`y|wc z2jU*#RemdBa1%RPIKF(*)3b~rzV>>Z}=+Ps36`0BH)D7lab2fc*5<_cHM+kUTr${hTsE}hiNW4Z+aE%A`IsA%E0Bh_8gaa!=N)ozMn79#&^~Ap8$`k>BQXzYG>gTHGgLvOdokzF zMm&EZs7xWp1Rb}(6rSyuSpOR5m9XDKCfqZ%A4*Qft(#Y$*K^*UVwLAJi$oh zX`Y`Xfbtw{-5GkP+97?9Y98|WG~XRSU%$Wfm?6FGbIgiWogH?Iom^q9aFt$>h?$+} zh&8N3%!K9YmSaZYcOpNPgCym|oZ{$l=Iy9kq5`Om8BApdAQHXxBSHKnegRF-EK0dk z5|WAHr^#C1SHfn1>qPaWoysiSy=_&6Bw?ieXv|w@_|58$}t-P$f;vE2Rg1s2*RYeTRIB0!=;OUH*HO7!cb}aZ?CU z$%)BhHL~;04HbM@nvD)YX9BuKOET@ddW7T9ICMiEUUe%k-f5Nnc6|_M6!w%FClWj- z_hL9Bh=!J7k$iH6cH=vgE6ZF>0-NL%(d7oGQ=tPU+hLGm^zt62F_rO2VtcJezUI!6 z59{GxJc!R{Ktf^z=PS2Gu2L9_HH*BXbz@TQ+CBXx40lwI`Eg-1JO7C!Q9Z2ox;e)gic zI_r(p9Z`;iAz`);MRz~@vxb1xUR4pnI#FZA@a##68~sT(=++xSN~%*Y!$38Cg?jN8*FIz5Bouds<&d zYBZ1dTcgsU&(t2_RYXb?_9<|1kIS}XOJbvMo896n67jfpI%DDgnj$dvpQ4G)YnGQa zDa41Hgs_&+vgPLYM?9zZEAdpO*K=OW^@ks?AL zoE;#{@TeHQieGDU6ab=XxQh06J#SMlr)|@7i#qq@JLltEy1{yry-&KyVc{&YaCj`o2mkkyqiw-d6M3 z-%J%z7eIk_A>|g1DES9w3{rvN`umsiJ6upnj_3A|A%C#KB}aOHvcBU$XS;NB&MAvA zXNF3;Dq^E_4p97B2KWE8jU$`$u|rzXnC(8;u*Iof2?PyA_Y$mb)O@4avMg2#<6?YeDF=uI1lB7=nryP0+=q*T!i5@Om~x&`d-^rQZYIZcN28 zoV9v#wND)w4p1fbIIF4)o3RIDhm=;Z%oi>d2YvYGMDXg!_e9U~@!>s$Gdl(00+7FZ zHHjA+bP27=Cj0X%{7Hqw!$DrGPKCW`UcM^+WTK)RyMTI=LXCP+afRyitq~zSM-=KU z(LkYj*-}{(E4}Q{!4;EH`H7jobfKkHC@~21g^Os%|=TD!ylyVpY z!pr<*q4acc#2Dx$+VYz}vaUwtyp~oG{{31#VZT;t>6dWM6ARpYj&3p^_*c@`SC13S$%)zf~}Aso13j>f7dum`Gv|>bqIe4nfjc&|JdPBEQ^n`w}btslH8xS13^X2P5ywJZ~9ltg3@616viIa+?Pz!rF zImLj`yv*{w0@J)xRJ#!0u3~3md_?1l>eTR4puT>#SXgE}NkO@VG2KH@r6px*7$b?j z095}|uzYImV;SE$_B5%EAB_!i5zmuW(sy8IFW}|1Zj(WRKOE*go`WnVYA#>EO;Yd& zzXi{iW2#J<16-VJ#%4z!;NPLHlJ(L{Ir7X2oXPT{lw+?~864@9B_Lk@pzvElRjEOr z@r+&NIC?b2K>vU|2qYzbVlDq{=Czj;&PO*Hg9+Qv!htR#bHFdqU2~*6#BYTOufCm1 zv6A%<$k2Z;tPq><{nUMgkSEt|m%rH6?Mov*I^KIcyn!w1yHugX&lJOAKLKxC%X%3_ z-0F8OzSwA-lp0L`^k1RhM+ibvFRYb?cwP~_?^53BZO*X>DDz$ zC!gs_WiyzKRFINkIihjrqKQ5zW7O&GJ;!1W+YQ7liE$mx{7T?NIo~z#wLsoL4Z}0D zNXxjOo>qO|P*!MHxp&WVMPV4c1L|A7vt_zox6WgOT7vU5ChNoXB)6NJ_doL2zX}a$ zJ!NPCHVzwlFwaA(1$W~L)e0rl^jQZC=X&=k)vm?vQzV!0^zcMGs<9 zDVlbC5Nyl8xn)Qv`an2fN~LEZqQPb#83;PFZ55HFf$!L?{uSqGmV@*~{NJ(>i8efu zOTKTaXB%Hw;Y0;(@ald048ou8h0VSw=R$Q!5lh}nzuJ1@vVeg>1=;2Vm|bTC{!;-k zkCj4TR{gj+C2YUxTx>K|mS?6WmWSZsyOk94O;WYe5vwt3na~3XkVax*Z;#sh&EsLz zf_@i=`JllUgI&*E#v-0qNvm?AwRc~1LU!4x3sv6Lh&Sh#bKg3hNsa_`S{Km!S5h+c zr8N%twkuF>`GC$d^h~ZvK96Dp&THl=rn#uO#J40;ZHsJSposa~5Toz8_D_+xP4zrY z0}E$)yD38rZ@(<+Q>j|uY$goj?P^g*W&=AoBk)D9tC9po(^2; z@0J-@bO~IC`P=|?gjL76*6{($Eueei(Tr$P0??4%l*7cLn%a9}Ipm-)bJ!5K-?WNK!&P%67Xd?yO5FQuJ%aYG^K^S2;mKPFd~% zci#zHl8jnc1|>?Ar%OhdC=IZ|yH@h`b3_2sohy=1$w43GWyY|`z=zoXOisJ87d-`MmIYUBxU(!h~p}xgH`Z4 zMZSxy(Uei!;eCaNiW|?|%ZL_v9?fQlx1sSK4$oROg4DQY-pJ@YCu8!bVOn7m=cWi3GAyqDDb11Tpf=V{ zlz41ztyX5iKNuZ$w}G-!d$A9FC$WScTj}{dAX5U)7<&w0l+@{jF(t~X;yT|=m%ezb zg134cJn;Wfbryb6ta1`{lUhY{5xXLS6wIG*M=Q2185Wt0GKnY`W4>At9wQFGrKK z+a^k@_SY%TCuL^cPqE(Ei;>+q5GOyzoRDjtZ+x%dUQD=3yr3rvvPAZ7I{7LXZMcv< zka_9(v@mM~Hwhi+@YrqBJXTzSnIqyB5a6Lh#qZS@ILi4yxMXkLO%>gX9d#Ek+(9M2 z_W#4XpB!52n>jKgfzt9$E8xZnml72Ii3e_Uh5qwZXdspoX-59-O)H7juXK;Ak9YKS zH31Im+CDuiIqa?jp3@h%PaUGrvQfh7b48!X0>PYtEPs=_2ShTR$`qmACjws>1sOmD z?ledIr(x~G0aK@lGZ1jhKDJV;bP1*`%8t#K0kLVEUcTSYcs?DuH7C}uwf-G)MFqjd zG&Uc%r5KLvk{v2-UzOGTQ|w5~IN_rrF2Y4ZLWVYzu}nCT+ed{%U2ZD+Vv779?g6vZ zG}94ZFWx5+qo;ul4%*X^w3|B^656+im4g%|d=f@(yyyPBJ=PIwd1C%M!BPyZ{0E)G zt37Vrvm|i;W6D4J`CDT|h&06fwlt`BVj=EHWi)eJm?S6ors0b_XDg+`#N_L`S+CGv znW!YByK9h0))zMikhm56t{ONnkJhy;l|)G07Aah<>og7Kc4)^)H9Mz#;Hn|~XPp13 zMz0Lai;O&4Dz}1OIkY8j>4HVa(odCn+9ncz>R;W5+itG;Y9#7>G z$UujcL`HQ}ghI_V6meKwJBf%yhwLOaq~Z|tQr6+pV_5Oma{%f?imR>3D~@5Bfbz!# zt$i02?8x=~7<#3S0#+l<3SZt-MB+hFK5HHj?w~Px+21q|L~!lymJ%D-8#Vpb2?R3| zMi^#F9w?M2wh4Hx*5b}RzIg%OI^Mg*y(il@J1J3&IBw>L29Xik6W9MALhb){N2O8| zRays*-GX4QaRTBT&wMOkpyE*+L~S~ILqIg21-oT}f*1-_td_?_9HTQ>00!a~30B!f zC1?7sQoPbS?h7~RhlIxwZ05y!BJ!2hyoP+~!&~Xe#FSPcW(i;7Xk5xLVJoXek4Jks zv69Ny7ld56YJ}v6QfV_3rM!=B7+>{$vGRulO5gtSNb|)ENv(Qwe1BZ+QfkHuEwir* zYq2jI9%s$fuH`hL`r1sUj4Gz-K$M(^1r}~^k1EFNXaSbvVP&2rA21oW{hdddVvkzJ zI6i$U2p{y6X_AFv&m{J87_~nFB)*z4l30k_wKR953^%qz?_tOquLdyEYPEbEfKt4E z;b(VZJ&z3fsPHjDMlgo}%Ca69_wBMjHIfgs5@mVqId8u=&5XQ>gB3aG ztSCk+?R$YDAssE9g9Vjx{{8}NB-WVP zxJ&Z9PMB({0tt0usG}NrbDu+1nvg)pKF{CMPZJon!nJ$gpL5+82{|A8aA!Hd{ku&{ z;vs)8wJGtqK2S??srKRX*R8?eEb%xNwW7AJq}dLyO{ueI6S8!Zj-04B&pn;9I2t8^ zw%lSqPQcD*?5v>8v@~vOP}5Gtf=DMZFm=8qYH>K?=!}?89hC(2Fp8~VP|6Dpr((cY zGT{YQMzK=%Am~8e#Ma5c@9sE7taDvbWkGWvTij~+O9!_qI?9hOz@nhonKE@&&aNW{ zY53tA#XKtxkyIJ_p#V#_S5!H1$(}noxoR`2s*y8KFv)xNYo14-gqN(HZoRZB`+fLh zFAY|U&pz?M#d0cp6%~vF=IzY$Sf??~zh=%z=Go7%F!ta3MR)P|RQlLOL6en2el@=D z3ULK9SM}75GeiHb!F|CKLQgToo=McF?Ru4$=`-<(K#2a(kipOHdjmUsNA=?!KLu9W=~Flp9DdYnHRWiikz9=A~;F zu2o#l_jaYDLs3K~BuFX+!V?0A?zl1JpCHu28z1{A1p(~;;^bZf40rj8+UZ>6#3xwejD583X< z4d}U3o&Go*l5kjoMUM3YURu{x=ea%5m1|-8kN@c=(=Lq=+Lq~}6E>;0tDo>8zK2@{ z2V99FwJSRCoiIGME;rMUA3q~0DNmUFYZ$uubXcIhOR&0N=`EhmhtZJaG>Us#^sZ-y ziI_&!xtkCc3QirOoxv+U@&VYk#|;MEV(kVJ=Ob0$9AoS+P(o~ z(T{$Jsu7C7>GKD|ODHnb%s@EDqDT2%=#7year6{HDR@*cbe2r~7^~LEUXgL}-KXRY z7oOk;5wB^a-(A2<7n%?Kg91`I)AgJ&oKhfDEU4(9YqWg_e`_t2$>SXUjI zIp&z7SmO5|)4uH^U;94C7N32Lr9viyq2yAqt_kkH-A98TGzHsTcY64Uihq}jK^foI zgoG|0GRO|QOW}&glbSIxN#mkFOOM%9l+f;80e`}`Oc=SY&W+eoZ`>#XaW!NXa2pgi(P7m^F1Q!U za^oii{@Vf5Kw0eB31#^t2*u>M!+!j;5#z0^r7Dg+Z-OsOebUAWXZvUybtfPZuu?)> z(%MX9L@=?llPyrlVeY_~u2s?|IS~ruosOfi{82DM&&ZZ(l&fkbBj+2L?}LPe+-Exv zfOj+M8uZ@S2UFHaf-*6oNA32Z?b09eM*A!9Hk;NBXl;Iz3Xd2O$TA+pi-Do*Cw$F8 z3n{M)4fV4Leqw_8XZY~DZ_*P;}QH(B+_6lkPD9@VJc*)9&HOo2@oWAUz8x9Xn4p#4iwlBJfd=@M331Q!u ze%*5_^8%yuEv>jnqQ|zYo{9$of4(^B=cN9g4jfMaa|0qfhq2AC z_!Ra5$+zoDWIfv_(*N);2TBhgp)^y#8*$^79$~r0ov%xCcs6aHp8i8Xr#mWy&p~w6 zRtwC5^$z&34Go^cg8u_DO2bniS_N>zZqt zW8}aMnP#)b7^e#q!dKGF#TDrxwblQoIy;UER--{!1|LbaAMx;zbZs7ZPRzdXv!uOS z=kDH+<48g6h&(i0o~9D9h;L&mL^O6gPWUw#EYlv!T)IM08nP*$%ie>rxowqj=?Wr} zV?6LyNQOCeIB`l{Oy|mXa5GE*1MjiLxB|zQP->K4JHOt?>!0Fty#POG>~z^q{S2Hw zRw$%4Agmum#NwJEL`iM>iq4M;>L%&|MRM}vJ_t%$w&!0S>p*0vpD3;4d$6dYZV@u( zas+Q|ZeYUpc*~9gkbzMH04D~@o~g#lHh+l(iVb*zeZtmlRec3(&H56)62@v>&G#ho zc3x0s0&OXBe$_p31--$2^DTZu?P6d7D!9M8$0||aTYf6mu+dAI6n-&wp!|zmVM#w* zubUZq6GK=5-1S4W(5k0?8b}+Mp1Pbi7wGAR}v`$i<{Gm z-!6#9IWeBQ`qqfrl`PzmOJ+c6kFiEu0Vvbu3`7ev<0>(pK?{x7u+Dq~SEy`PTVC=* z>^_u_sf*1gR9is&EgMuy29IahLhcND5tJcdx#^!Ob0t%8);`zl#vFpvU|=O>Xin8e zqeij6!;xblb8hvCEoufYX7TzNp&pqi*RCg&lB~Cm$E(1Cv1ToZ^5>EE&h^el<~Cc| z%tfb^%6a=W%=_!_K)H*>`4#S?(MM?{(e_+LQFlFxeY5)Nd?Evtp(yyOfisoHZC27} z*7*2+t7FzLVSge8H$SOx1B)4%?%~IAH1N@%;GbpBbUP<;zr{9yJ_f?$MM2=Ht!^Cq zCqr508hCC zvwryfWx3<-f;+5`p!m<{%EDzzrbtzo^T0994 zNF!ZUWt|*gbmd+la8uF!Qx0P}{ScZp`XTgsV_BfAmeib%5Ch4%?_u<#Dszop2n((z zGj!3Pz-aN04Yz$Im*m8(CVyy3wNSNJj>23bmS`k${P*(Gk&V+BJzUusX17c)!(6gY z)&b5Tm{PCh`5T3LzisP!82KB;=Z(gG5!FZ?UOC;o(Q(U<&A|YYD?8Yt{fNbG{B`{! zFkf^?u<(dL>3YY*qJ*V6uX6fsu-C59rC-AzRGHwDb(1zM9 z9jU1p660@W+IxmO(7}%@66pTNM}cvIf&xV!7fpzPgR{D)w*z-;c5I~eq$u-;n(zr+ zcTlPF`CJ{1>DUd{##tB9%CkMi?E4{d`*qy8)6j*@LR&MA79s9`V3zXAy7+>vQ3A$+ zoub>3zm5EjF$C@shlCfOHol#1Ohi%W-A-PjfR2pP3w@|FmX=1kOrkfDWNy2&k8As^ zzfiSS0_MZCC~N#+N;G0|=ZD@67r;oerx0Yx zjH)#hR*ulxCWf@-H)~SS)kJ`)VGC`Dh1V%LMl?@&><3sREYNpxGj%p+8)h^7AnK8c z#|BU*H&yFpI6CPYFZm|-CLGfLjp%@kXNPTE?&cXFGHHtaZ@>>VQau??ezkt8_lum0 zyfo1BCD}2*${We{WH461*%P9;>yy%~LgK5Mg$BL?`A^5yht}zP+7>^=fy+LO^|Cq< zSZaE3ZJ6C2CPb!kQqgY-K0rOO>?v*5o#pbK@T(Ox4U@@XqK$>Q9hI|7Z|fNnzqtln z%U*OE>g~(r#IqfS4yGb22V;toQITl6{4K5cPy4{qpziB;MLVIGDMlx%=$)bG8bsMV z_2VATr6axZ|QqcovQ>~oaJ`U$WzoUMTjNwZ(VKO+3k& zTz6dcpG<68WAtRckZPH}>h5^VG(E*(?EXq^3XVY@M+sTLUf;MuEAMojqFK|m!mBf1 zE83(h4`(Mw21QA|gSjqDddh4~JkDM}X+eR_Ua$?()@7Q8^eH0Xr&ctt>`-=pFc|lF zV<#0^Na73X3&n()2odG*71sy~Li>QV+2Q?WHlDJhlW|B^|BlvC)BHrvgG0|PUE6R{ z!A0_FiMuM@sRGeU)Ks6F<%+`PiF!|)gN=+>*NY8Z!73hYz4ADe5OZg-NubN`?``wNcJ^>qr4@>WWtTvL8gC(s#U0BIB; znhRu?7=;dM1Lb)n(2h4w{*&BV{=58Cz3i{J%D}IUJx0NT@bU1A=tcSn zZAl)&T9*)#N}vegiZ~^bie_a04bgx}@gchgr;(?hxCO~@zuEhhqd)0xImn1GTHQf7 zdhqu)sfiq@n9pRB*8BWjL~y&-t-?XAsl`B`4vAnCmXhY7pYt09iALKTRDQX43b*@) z4rU*0u1d}QuVV`-U=7)uB0sUfQveZqljEzv_W1V_ICofHE?>fn7PKZOX|O;0@O_ht zUbOBCr%yaq2lJe652f5!W`~0U1#fj~DGY_-0yFU&a1LzJ( z$Rq%(Ggren86U0vmcf0wB>cq%~tqA||3MESy0?U8*}aH$tY1D3*Vn)|tFA zcxkGWVZGRM%`K}%J!w}e=WH(F+%3RWwj-2;aWk@1bo+%XdA#eLv-f%#m#6)P%pHF_8;@k+uY%F? zg~7lEVpnmk;hsNzlaPs%63%`mX(;P>@|w>%nls!U-9{%QFpn5e%N$f_F46paujxQT zY-N=|!xJK3tbg4#XMVl4A`1!qb3Q^UmW@%uvEF+%qs7I-IxLye9{15J1%_RfM}koA zrz}1hi~tsQd6K=4?I4q!08DUGzSVCA_;Zk74T6cu8$9^)3JZSIOUX6EBuCz+q!64O`Hm~dOe0bi1_3=;_{MbA>5?Sas$ zvm>Y?p;8tlrW&RB^yYi1IDA~xrdhaM!Y=)Y%M|1$-uhj96QDsBr;{Eo z`JNMD1BgEw3b=p}i#qS)yZ4DM(op~h#pE}wkjb-i!#Bqucyau4L+G}V+PbxSe$s?W z`B?ev7ZvNr{jB{;=Ev4z;F7k<(>F}DY1A1n&g!S~yHP-UpWdPRDO%og8TC+8cfD1{ z7ULCCU#RnstOkar*%jFWgqO?Vdfe?Xp)2dCOjdhbXsPLXTO;$`+78 z<70c9`ZIl_L#dPv%N%X%QWGwlYgB6<>t+Bv|7 z;oFecvr@N%=vZtSAOikS6k8xQ1K~@mJhfoiWH?({UEIcUY|`rOedCxB3oQS&>jkKNZ-a;T?jSJs zLWbM|Z4v@eyf3vyWEI`wD#nB;gp!rUxPNbfr73OTFSFOXrQ~?H51*c&I$Au>O_0gL#u34~ z5v5AV8KR)v0JNvmXUXc=;Ucdj$qC-!IcMi=kG+iD#%lWk3(YL#dUp-z|wUNY=t>7EBgGY9gmZ@4rVS|!IysQ0pGasIUI{GN4!!-X=Xs|7w$YCLl~_?mNC=eA zv?D7n7?njELagk*;27vnU0uY^JPdHit8=5WsC(a*eFiTmwa8-ShvJ~DKPB0P+2+k1GJk$3 zSR}eT|5WF#0}B(&bh)Gmz4D^70@8R2mA8+FWB|y39um5+UxgfCrc0t{tIVqVMlbl? zSJW`#NZaFhmT4SBWS}|i%wadzZo#%cbaZ&V0Ck@i2RqQOOatBqk$z8z-P=PLeQT@6 zTT`Qe_-{HEmNu=i*{dje8*iDbE9c4y_?k@80gw6>DbNAZ=G-NU&M{mH`U*-lgTs%2N#|uyyi*_~6wHUDBV>-K*FQF$WG& zEyGYd*NFZdFFPLlSDINpUuYw3Vwe?PtO3kiyK)AW=6D(`(@76Q&p0USz;0o$;r4Q} zk%k})O4GJ`Q#x@Q&P}-T+w5-Si=YBVK2K}#0xHR9^NVKKdJoFOv>+|IjF%SH`f0UV z-!>#4e@1Fzgl;-!zg;>sa%XN=!6(xoMp!9c&VeZ0zv<|)>^?sH#a63D_4(#v-GVg* zg(5J(mh)Pt1MF;E3DydUq)bPDKxNbWd%^Sd*S^q~r~KfWoOKG87vK-Phd*3MjGJrW zZsuq2-RTrmLe9>lg~bhW@|kV|#Ggb#xLvX3H3n}cvvxihYskqcV-Z@UBn9eo)Q2{j z4)mFHdMU?UdEfNvNB^6MbNmdkoc-L3G>N)}as}xBQqq~KZdB82FAG1WrDJ)ntZwqnWZuVQU2 zt#{0q-~&BNyEoo5Lu<@@e9b}__`EpE;^d`X`QplF9?~4CfT1-1a}c8LY{pqwx4OY+ zRd+M9XaFPxU4vi_JTG@17PH$^bh>_?2=Pv}>3Gl>1GIQ<%%l-He(QG$_)+*(Y9sKS6np&+lC{-U=x26 zMaOW~`0ZAbujyc(H8u9f>e;_b8lL$2tb+QPdN$L4=n=xkL{J> zZ$T8<>X0O+F#AQnyz6s8+{pd04895zz=DUtvk_j-$)o(=$ZM!BB**6!6d7$Bsl}M6x@NqO8{qCwDogVuH%r}V zu3^w*W2cO}z1dMVvCgMXp?QBm>0=Wig+rn#HGvyx?Ii?ePnTU?bp_FMH#U@KBlvTs@3XB zy^Ebub2k5t7Q*#cj$9rpW$ID(K!7wd9;uu%yqa@0ocu?y0AotTO8ISPOOGVF2ztmL*G9HhGyM_AWg65G0pSM zHBH7*<$ zLK5CGFp*rD&{UE}cekipe)7=n_)+Q?cnZ{IC2$z`-Z*ByyIwcjd@y|T$+%TbH(Ah$ zI!yIDS4>v?AjB@T2a7`WRb&sMgF?i>;rDL*UI!dEeWeg9of4$599WX(zX?Tx14ChC z?ky#T5hSKM(yk1E!Ge%<)VWARz2!?WnK+Oq`YlX09SeryB%(x25v;kJG%}m6jc3w- zJuTGhziOOVT@KGkU{yg1O8SWrs+P)-GymQ;bH)tAnj|QNm*yVVib;&_Kg) z!*X{j-F7*@1Z*Q`B!5;EDr;b(MbDGpGbA6~JRdoQh+1G|VM|!J)qOe61hY$4&WQgs zN)V6ZDXoXyzs?{#>cZPx^7L#HC2*6%%@`XIBG(fLAeQZz#&4UP48I0qa(3gFWspA= z0)iB?0Ttg3vI4~Xx`5zo*V_~eEnn|l_q)FP^B_bJX+SWYdyE+Iz|Gn5Kgoa!!+gEL zbShrY-)~Z0`Kn8*?6kQSPO|+y_Pl6WD3U$!Ce^jj$OfFHy|c&5JqFJ~H!s=BTJ4gH zL=j3Is~BmOJq`NQW`H!rZjn5TXPQB0-6Tns4Jj#tU5UIg?>BDkPK6;YN){yVtSqI? z)t=wkKDdcIk!VoAtbYqkJp)%ax;Hnq$3S}Q(g4@=rK_=%IOO%-SWvtkHav4ooqKl6 zb^0doMC|pN>Wg=3vX`^iJK1eEtjb|ySFRmPz^L^zw_(Nm?f~tWDKE%i{Xt}#SaHy#C8XW zk^esj_qd5Ar`_guyhQObm!sNe>s_#*?$`}ciz~ha!Xy?`mj;1)57Gbu9%CA7Q|#|Y z1YGapSFNV@`A^4PIECG0A0w4)Tj(G&RTUG15% zA_zb8!ni(`P!E1(#kLP8I^^2G;lNFU)_vQJsf+Tlm*M~sU%R`}={fQ(!Wt_NNktXQ@Wj2ZI05p>Xm%ZkR*izQ zfPk3ZQe!Fw465e+QQ_k=UPB1MX4bo#%ba%NQ7+?`r@O_?6F~XWk})S2b#1)>OF>n( zSlh`6L6KD4swh_LPJ6shpJ5j2fTtKKJ}px_yIu{RG#-kkbPDN)(8V4G=*f0#?pYH^ z+0s65k>eUD;m9_r6UOJP#$w%AidK9eJTa#Z>68;ttext>Y>L4e1EZ70Qin zDzR2F;DpV@vR|^AjYi`4amM_pho`JY;4?b`#Y;D0w`Ctb@y4RR(;j+1xq)TqB4;nL zJ3S(HE>%Fb4?$Pss?m|oHWs0%YntQ3eCpZJkHfR06@3K62)?Mg`Y}8jv}e44*#r2Q z<-5)JSxpQ?fs?X+%(<>oP{=xVy=>Ab_>Z`Uf zH8Jl;qG%w%@l(b=2e2Y3ZSzk0AAWGzwJyz7kCyT2X!z`W(d#v>6-R3_-h(Eb<4$no zg`ne@UrGWu31~pjAp-$@9n68>D4xd5TihM+P5-rsdf>1RW7(ne_sB&_mBEoD3$Xic zLAV8dIOjx<&#y~a<(Q>%wEL73Ij2_<2+|-Rn@jOVDo=|g2^pk8KMeSFQ!xn?u^V`p zpx&pX{+DU`bL=g8k&Q23_Z@2MA_3U#$ox!w41Coe9x%&>BsN?tK0X>YiMd~qo$~9^+$jy{hw@VM z8SxK)-c4yJyvu*l$V~zSWU{jJDP-3<_mH5zd0n|i2=_vPejuPAtx8hvK&kl+P`gr_ z(aFxwGgW&2#v8CfhQEkQQj=O7s@jwVwXtcj(WIZhCgOK>=lbU!wJZg`J)V618r2^p zLdW*83J~_ETA$I!zHjaQhc2ERz+b6!XGua82_=JVPz(ZoYSZc+i!|ST!#fU`U~7&W z6%Y%+pwj))-sFQ0%fP#nxn6!RNa1{oly&W~(W{Z@0Y=BtvTf3;2?UMBJHjmLU4jJj z%GV{u(}f;m!C9PhyBJo^V0U|D<#b>81%VKOZv>|4kP!oc`?8@H_DjCMjc=GjfjGjy z)bFtMh4p}zR|!U%rvP{$_bp?$P+Gd12H0s!+N-6;RTw&QA;n84B6eUgaIV%hCXAM{ zZjDl9G@6Q!%zz|NvYJhr*Kh`#?bYTwC%Nry@HTq%!M9M>W@&Q0Wy{RI$E2V1g}f+W za=WEclbu@?2x!NjhaHEc75JFygipziqv*_=P@<3`gP51HuQ%n)pfQtk7GO@n7CFgQ zS7F`iyqL2y1>*#E)@~Qi5qD}2OI`!KN&jkKMsH5jZ9a+kWT}KmsU52g6Y{gGo;5;& zXa>MA{vPuvy*gft(!KDt5@i+Cvodq(O3SvrGNN&g) zV4BzJWT8;#WyI{GD5)YRqP!mqZ`R7Bf_?WA#CkkFzLPw#*qt-5q%H+-^XVDoEMf8G z(MwJB!DUIeJNwv1zNXjz7Okp{`zCQIEo2eMi%j_^hyJ#FJ5P?#c49>#JhGyEBhHpH z1YYg>y`hyOPhXzmrQ|fCMK$@Bbr7dtTR0p5QKoiB=2h6twOv;=U&2H^CW-pL28M1K z2k!ijSz-S9BbsB+UJ#}E_xD_lwk8qU3Gbw&kt_o5S<=65q+FkC0qASkpSaILB%Uf+ zrDhl@+KI{RTHcJC>OpiY%nu@)&OxneG)=?kAJ?M8Q=7ed6-D;+mp2y}djXZUAt>u2 zG_rJK_X4L}L5nuakPM;Zq$E)guDjqQ)sqm_{v4~tJJN6eo+V{?@KRRL4g{QJcuxZB^lwFOF;%&&y|FI=OxWK^X_wVf7 zQ^=#5s^t*XLEFXR&#p&YuttSu6eH@G3S$eM+RgYie}I2^MIIwJe!n4S-|vcnD3ia> zWRL>ez<-cTPY3U-FQNk^T90c*Z>6T@emT@mBz2Q*b=}SUB>hz9PI23U@1K;u@2=I#jp^lq#ACC$ zR_DDy*|eGYUksl)&6Zd#{Gdd<9EJgtZl(EC#6Fx1*K1>)3%(Fne_;owfL8DCm;|xa z8j;cMpF1?DIvZl3{x>7(YDvo#D6m@R)8rO2TKC`FwMMdC7S!Iqx=(NF_4%*38Dzu6 z`NHaciA-iTp3Bkn9gaH0lEZ{J>1pb)b<%!mWKo?gqn{U850#JEg$|x02Byw_(O?Y{ zh2z718u$JWt$XYpoaM^%of5W3`eJZ;YOXJ8OL7t1W5_H`*=#wPRrJ)&N+N(_PrFqr z6b1OOsaE(_nnruyLF#-A%q~o;-?h%?Qw<2qf0&MOH8~PDPFjj}-zt>5Y=~GfAlJ(m zMz7JFWwY4Vqe*ijLv(rLQds?ovjNJ$HX#wuX}?Q}-ce&S4qS#7%D9lO`H?M0)kV7t z=7ND;t75+U?Nk1Z+6Y@sa+T&tg!@v&jJ>>_eSzgIo48+^*Mu5Qx=EdiC=jW*WyUzl zk@U^;`H~9O@&yAu%_}XIf9R|&#^)R~3`xKJY|C-h)Ao#`%cMKt zX|!(R9|zy`4}CT|Y9pNe*46g%QqHf(g=cOqo}Irq2=67~uQ&R3iVBfx#NfGeq@rp=4)m7B#x`J7}vUabDjzPvX#!~aBP{}cBPxc`P3 z;wcSZ!z;SLXI1Nxi@KzVC-cP_LN+J2g-0(wIoG|LmyQp27XKsa=l;y*weVz^*njzc z3#Z`v4NRx6V!3m}xa4E+*`b!T_ufwYM$s{@n$bdK>uM`TzhHAlE|J5s%2LkLC1b5F zkvwtrK;UiAf~S{^rX4{U7Angj#X%l_OGLykzg-l%?TB6`m0XBF_FPmF->PuD?~E>d zu9>HPcvF^w$@;^D-EbFEVdwhkkE9+Kq!_0nDzpDUZnS4UeSS=Q3#bn=NFO3X;WMHo1B8qqM`i2hVCTQ9*8PG6AYp|6O zEPtwTts%COaS;8N1<;vMxc_QgJ+Lh(LGMtvN>t{_t}kj6K)j#9@_Ch2%!9I9h~$Gi zSmOiEyp4UP^Kaux_+F52{nqx*fxXw2yx(WLg6&>MJRGvCj)Y40950ExX_M3x*~&? zPfQDo*Rj7usz>^R{Lb;aW~o|b98@!W7bf2wV<+I<@6eCv9$xVz>b*lN}DsP{Tn zU|xuSx>aDFf2vi4|Kvmk<7EiCSy-#@myV7Okr!V(hSDln6>Tl6k}bjuPbnug@fga= zK^3<1-&AAIsTO3aWq`}5{N>36jjEob|GMW)xDOrvcq-(3Wa4ahJ{+%G)&9KZf~JJU zX_TL9oc-B>_H}z&fC^i=26Ayf;H)R;;%ZOvzNa4hVctBD!4X}vzNcmE@Wof3<_Y_= z_;JafIU+++j+2>0D%Q^hwm5zai%#_8zqH;f8u81nKZs!STJ7Ra+~|YlswObpvn(vTm>N*3S2wLSDpt0g45 zm1*p2SBr=b7Hal*8M7N>i(K`^eb5tRhUz?ge&@yw+JBX9bvmhDZS3JbDI~1FRYMrz zR2?q09JR%1RrM!+66^f#U#Uta5!~rR1UJa5;hZQlbJx90@vhl-&XzV_&HVGF|KE4% zFsZoZeH<}lCX?L~Ca(ZNCSPevkVb*odH$k)vQAoZd8B5KnCCKfuWqrm z)>c%B)AejYXJ=g7b>|Hy+O)tKbV8+y`>`d9S>n~0>0c+auy;ooSY`Pk{NsyHks%`T zR8{eZe%^*y!Aw%$TiL2F?Ud6K$EH5fc_D5XZLVNLe zFEhx8buZFhwf&fi={v$%9dw)$XW!>2uCmKp)Ss2Lr7OSq(=fHqpLfh4B+sp!kw`C@ zz<7dowmuTl;6b&&z0sz|RZ_q!!YlPG@1E(oZoKO%AO5jvgcw=|{t~=c&V9`>_jtrq z1R?J;>?y8H2w$)GP3QW{?DxZ{&TLt~Gt;{n!A8vWvX@+P)<+cFqL*45Ww-+* zZ@T6Hi^G(**})imAwgd7V#2R85F8p-*SpYq@$TmI}>1 z$6T-7IW;j{@Aq*Zl?hvnOQRh2Y9ToUCYPKcH8-M_ZPN}#?5SIsIp8Kw-Kt$6OAlcNh7p2+a7Buq=H1Rg>2t# z*2Tq}?OCm#v(fnvDJ?yF&fpid>;BNM^;vsX!GX!@Dp?tYG+!>mSr_l5$SVHiT5h&d zw{6`?nwM7M4XsP8jEe?y4tqL2CGY3YG|M>**G&T zK6l;YzZ^<%z?u8$Jk1#wwT5Oj;8?S&6=z=ldbVk{udIL(`|hhTYEyN!Pbg&;!d4rP zp_8Y|Eb3}B@IP-y0S}FKNrKr5Nf;f7h}7~W(L|UffU7P0~ z09_UDW~cPH$G!(mWrS=0?Xg>^_J(D1Egh=s^Ns3`ms%a-KdW zwoh1{PhN2~Fy_vYA?oPleQ?AON!?c}GRC^TR2~U^efnBtHt7%(njV-dmEXE;)$2d{ z8SRYY)t;`pmlts+lV3tpMZ<;5RstS8D8VpE`8vyb$ruNg#cLk4B)Zo5DE2kVGzw|H z>$~eN^zCmHNa&4Q4c8;bpGcZK9^wDzCS7jfMze!$4PyETYS2ao=h~3po+=aXq!gv( z3(bCnqZn)YELPj6NmcOCmVh{v4SL%oaIK^}xIPurWkUTjDv$js-b4$U%aca$Ke;?{ zAIFrn#Bdo-Q@|d8i?9Wzd0FN>^Vg=P-{((xog}LwZH75eq7;#knek8o6iW@ zU}Jpuy|Lh%fxJYJ^bDdDoIw#T*@az0#O<0}CrkQOw=Qv6Fx4|kv7FCxQ&s!Mm%D-T z_lJq!?55{$SlT#NsnA9)-JH`3Gy3hJlzvbOK8+LVmxvRVc0Ej03C@WTGxbP0cwl`cFeGfgv>!)|{+ESa>|uuL1b_V*U4ErGX1_3vyZ2Ax&a@3= zJ7tIQuMyW%t?sVtp2lY-8*BriYd#blt5d(DUQ-jnTWsCRdWgekm}!dtQSF4~jU`0W z`3!%iyvXm-tYX}M%0uecq!GQb_P++cOGG38BempbzR>?POs42UC-uHS~=0X_np7O{b zJ>-jPgQI`O`_ja_;OyO1@^c-R!Su=iMuP8kZKye3JXD#Fr}-UJFl>p*{^n^x`+T14 zd*@wtVF9*?eORZV)sSr8Yx)gsdEDdp{=1N$&1P#uJgHBbemTlk&&cofv5VGI1)Jjs z=9-(?&F6@9c+`Vfq28`>-sq7}LO8Yt2LB0)I28AFp_d1;L(C*I!->KbR2U@+1A`9! z*p^zC2PHSF%)}(1mZFBR`RrZBJ&Y2CL->*eSI3kGW1JPF0EA6 zi!a!cN8~y2;EAqX(g_k;i<&#qi#(4nXi~aYL~ofP8JB6(DS9|>TUuWq0;=~d^?JTW z1&J8TMfYdiovy>yJ|dA$lfd}>?q$nzlOnOh|6IA%cH)1ycK0T)nc3>SpkH2hU1AiT zRE=C4keFDh5!WOlha?XuX&nIscWW2 z#V-fl*o#q_g1Y9?!}GhnUgUiuvNdP;Oj{5y=K0ie$DWCGm9Fx!WKfaFkN#}%$c8vaG*M=MC9CUR&S>>;Elaal1Qx(F= zQF@dyN5oB7xq3eldPE;J5;1|32$Wt#L34-fl_9IX+Lgn^avWoP(B0Ff?XV>>2@dw^ zQb0zV?w8krxGrahOKj42bub-tvlJy7Pw9}N%gBF5C0uapbne{BLMebr$8A@8NrCJ5 z-FhLEStgizNUK0L4sZE>=i~xk-f)E4PWU$Y?%NOhMg^Az?^;70Z*^~9=yYA7fuuiN zKEi2O_Zjw(!D@#=qD_CYg8Gw6Had}A`-ZKmxuA8}V@2lbw-|5ZKd@Egm3?}SYDWO; zjg8V-UXiw!+=Y|KSl3n)4#L54^#9q^Svb`c-&^x^dw7ol@9P)8UvEpdyyLQmpHuEC-qcj9b$wiZQt)^9_%f6US*3mN zTDK`UtMbC&nuA;d6g>H~$w^ zZ@~~{7rzNB-7QED(nv@u&47qB(%sz*-3>~P(nxoAr*wy;bPe4(NWS;;-*@iKx94e!_t{+zL5 zu?sMCUuM~!$+87cQ*X}3OcND^&?v@m!;7t~T~G(D;xL7k$!tfVrsf589PE7k9aORt zzdp<*cdrmh3L@iM&G1d3!i27jndjGzKcFjc|EWjTDm+AnU`&&Scr|yw<|1Jys)r^D zqfcSN@)BphbKJPm!N!?0@7r$nYlj4Dn{@|;O5 zadh_mY(m1V>bg9x$SQc%g))$Wo`V7yS#QZbSI`+u5vS)>M;;dEP+sj!fIN{1ujKEH z@Zxn_705_t!c;Kmz~gb(H&8xL44>I-O1K&{7*pD-G2`|0Y4o-ig)7i$x^N!h87d5y z-B(SCP|62|nr$`L2ZkmR88rRz7E^E%>I&g_kNPXgT+6`4A4#|MzO&Emj_0O$6@*%! zd6u5V`lXm}7?qCyb1=mKA_^iu5*ozUu>4Xx`PS{tXl*)bxDU=Z<8>4L*uYp)YF7^K zb-vQtk?IQYtCwh!?L_{(S2QDvG`)oZygDm=bgU}V-e>2qQO)vB9LlUL@I#QHfpTZ^flDW?akHM>ob=$xN?U6Lz6&S(fUQ;`-ZV0k>iB){5G!XEg0y;V7RQ!jr7`t{9Ciso~P zk|Y`p`n@Y}o1RxvzEKS8EG7(X;S-e|B->k6Z-HIC?CoHefMV;u!~liTWbmYWPK-W% ziFn7JueypZq9VLH)H~igW;GH~D2#`ePpHt@Uf(G~D61kw7e6qS0h)Udn#=TJ@fB3% z{DI$;T^EU&kU{*$p%c6xj9RBjP$6isB5<2F!qvkw>yNVbp7}y#M4}wm`+SL(e(+oa zkstfjs~Ma#GEov@uon_xYeO^pu`dH_2KR-mfLejE!OHS4q^?stBRg*IvBgzx5ttvs zhkMc2N=-MoH>WE!XFL~yfAp)P4-p|Dw%&(&bFwa8HNFlHI+U=y=0n}>@c@dx4sE<1 z4jb0s@{{9?Lhp9Ca&qk)SLj()l58uAnm)VHZkL?qFEO|0aLgihFfw@aw(9l^s9y5n zY*G(|dY!?fvJq;5N24fg@5G~2T#3_Qw(5;`d%p7B)e*KGG2qGA*hx~v`;pqy*x*-O z5#!Z!E!ZOA9&15ZYJz&Hxp4N*5cpiSSe{m_yUfzN8~Ok1K>c62S)!- zTO13fBe8Ze4}O==8IJn_ve}j?v6+jOiqAjTQ0FLOR}(exaHGF!?G(q}l=BwFCP2j8 zZ(&PX4rx0UbV1-pVD&gC)Y*w1mz#mNM=K+6s@UI(8M)rq&+^rai-WPj^eWGC1mi1~ z_$beb-T_7S$^6n*oJjZAGP7n1lSbuW0@4SLxiA z7rqIEy(kKzklVNS9F07%aM$s+%v4Qz9Y&8v7mocCYdp8GCe%-|d5`&(8bv-pMq%zI zKXab*XPbXkDChYIOiVLgUNYvHG7s-Z21EP{HJ&d?(A>uvnX^9 z7|({JP};+=Lg#8~Iw=O3eJ{hVec!52ou*N7Ln%)SGt$|(3V&oAAGP|Wv#Zos@`=D0 z9RyWCW}}MjCO$<;Z2cThNdl_hyd?eoGB2o5gvmeJ!J(%#(j3ZaP?IEcMz7-S`EA)G z9Rgg#PI7H|i!O~3-WTX@UV0YpffUuJGJbEvgmMRPBE;M^%_SLH6`7WoUlm<=unH5nJ?RyhN`%oX57-J5?cqO1SatZE1j56X$4FQZnmlv zyjvf_a>9?Ws?w{~%dRN`WA%OhYgMKWv?YAu=*G8uGoS}F-VYKRIs{Gqq6Nd#EV}8m zoX9e$sltM zhDMfBv5(tg3UjHva&_0+Z!e%-?yuiJbe62RSwt?6C`hlMK+c|~xRbk2oOC4n8mXyy z_Gg>YiQJvWA;e4XBIfz(`K*xmnf`Ey$wzu%miKMlW?`sxAP;7{XY)xBS@a*vO_EwF z4d&&m@BDp^Tq&JcJZ=0`1Ub$;qQJ(oF5|SIN|Im;dmD{=`x0qsi}Pm_Fzic}o9w4` zw8lhiD6DeCCEQt$4u5{!Ax7~mwL4~_BaIcj>Y$v-Q!h~FLTYg*#tJK*9hglRH)`wC zVr~v%8N?sv(d((({P*$Y)+1dzCZE`{WU(wWmAz*ND&%C5vC9tEqNTFCoY{+}{S$=B zN?-5n!%Fw+Z6pn5208$8f@Rg!!wIhs*`);{Daau?6;5E?X{3=1q)3p_AO81MF-p%r zbX|6^kfO9c&p)0(lC@J-UP6W;hkFkbeA=8{TZ)sq zB=wom`*~gdEaO%%;n`Mu%b zZusL6H)dbu)}yA5WF-Z&&MoxXH*kL&_zptey{hfg*n65oMfL@12JHczImHe0F|j5d zll3a-NC`_+8Hpd&2WL{`Ert4?s*eMJDG5jT(RH+Pmz#^bFk@cIvB(FVwVk;&neb$+ zl!_l)b@7V7+VDdhdBeNDslwtOcx;@1{<0^zO8Ci|XvPk-3&4K@7BeNTbjpew3c!Tn zTmPG#`tLxA(M%&sKDS*uGKN-Nq9CirAzYuKLzSiSXoL3alTn^_zmyvEQqqlj(Akk2 zQ{o{lbK?I{meD%!;Iu5}U^u6wip-Y!VC21- zUQ!SU^3m&enFe0?sU-R}heW;jP6&Ui~~ewO#G*>9Orx#?tVx!)JK6d}KUU($(&FabfAagSxV z5}K=cROA2e=Wv8XEMebqmte{?3QV=?>ej0taNoCncNdph{a}ex%}O}aKw@MKVjSg^ z#i>$IZn0962yk4XCnXj&T&2n7@V+Yf=4CM~N5w_7%GSbOT>2ZBp2iNyE-$)y%9BrY zXT>AMt$sv_StQP~HW4~W*=6!xRF)SBP6HLeE@MA$WN*!IG|RY5^hqf_%3Y8kRl?-Q zSBdo;xIs$EPuiNSKEq6LNc@bpTQKG|;p~p)`Vqow02N}kD_2!7xU*i_085$W@DXH8 zc>H|Z3x9q&KDL4q?h_-!Zf-km+lmb1>FXP+uuGb1rEt6LfVnDrq}kGhFmH6$`Oc!3 z7E{@I^--nf=op{7Ax^}3u?NGL9@tY9s%09nLw z&(gyGoIBt`_JZIn5@{r|JZlrfM9F7v2=&LAYmZndvnf#h42299mDTEZ-S^+&uIw$1 zK@v_{gIRu-;%g!Br2gM~@y}(kEAw#wlS{3hF1%(Qk`p zlI`}s*?dr1Q`FuD%Z44c`mu;^FJ9=D#SqezUcqq?Y(sSF6mN6A`op-*#ix%GY?33o zb!f}mG`dt11cFHX4jgD+Hr!eLU4j2c-3Jf?sQe$Sh>6Aa_;h!VS4x5G24QA)<0BX; zEd{%mm2g8*!8Zn*T=u5Yz%-v`5DohiXRpL>B^~oAUJl+B(kr6-6u?X1X9Nb(vhgI4T2?G1|`JIy&{FZ$0|7ciG3?0%O zg=aesg1x%n#bfe(|J-@`y00UFpwl3vjYIQ2jjGA zBDh)XyDyP_gm$(ELV-0AK>5K2xJrCO!e^M(}DvvTL%>WAZD)}Ci`zj zv7}!;%Y~!lYAO}nlm)0H5;{5?BgT)R8(DlJqu;|vb9NOp0M&N-Ml-{)Z}trQZ49n4 zZz!wsh{FhX$E)tC0kE6_V?B|zwl&@9M6uX5t`JiWyO(dvwhJ1Bg1T?g&u=Rc++583 z&x$;4nLOXjElXJtW3LT z(;n1qf)2B{J2xr8P zC*BoBCh)}n+SACLB|cSt)96bHD|6DOMQ7pS7Tzvi40ppRLA(2S)0$mToDlk!RKC!8 zAZeg98rOSUi}cHU8Sv%5c=Wyz3Hh46wIG#Z68HlobtdN1un-1ti|^lmVIr-y%}(h{ zVO}xjHjMh;T7aLD)WpnYyAtW-LO0jLjMk*3d15iAKZ!hV`p1-9PK5s7WyK#~;MuQA zaVO>?VLjpn71p;={E&*GJI3k@rLwNF#4IJiLXJpLh-ujggxU*O&ImEN!QVJ7Ia3oF z9=%eOhB~k7)s4?DEQu-XmoMS*c;V=AL=2J{IhA?9KMrp;C1~ zmlzi1Un}Ss^9!?UP-6%n!Vp5d8u!Rx59g@yb6mp6Gvr@%DMphpt)7jj7R`!+S~vj| zg?rEOlnT&{K#?dSw3J)48O%ex{Dh$6Poqc3hGpT@Tk(54G*Fp9g&c?uh*mFNe<&@Ti?`@~ILqJ&0P4DT@3NWcmS_4QMa zSdUI*I`LHKSr$ds%zd_jf=?wHg(F8rl{a;tO@r2Jao(MVEia3pLnev1YnbgNuO+<_ z7Jvt>Ra)^PFZ+EH)(e&D%)iuF{dM(wxN0Gjtf#U$?wjitJ$nzXnTIp|;Zm#nb-32^ zuCHJo44mh%`=tq$=TN(go^&Q@Xl~I`7`2_u=_-9d@Br;3{#x9Q4B9A8$R7gNmre-B z$<@}iw1<%+KLwEZyVDM~%5tHNzNr82V)mu*vXT#JGq5hJt4zNYQ#eUvTNm`phZ*DY z+Sh4mOH)3$6jKgIwd}ndce4EvlaeudT75>ayWhIe`;h+Q?2}XLZpxemSm9)63;>|s z$}ZSv7%D-7&D#bvu;$uY5hP-iur!Z=beHn}*3!lB6Q zU7|^WJu@OJIo}6PQxpkCc$=a0*KF0V4zItjxMEIQ`3<_`4-~9C7r24hL`nHI=IrzA z{tc_DdH5sEC^Kf80e#OFtzDUHg6@CST zsw9e7R2-4rNomfrqr?e-f?JX)d+ho%E#?Ew)u8;&aM%ftL zAk=N^I4FBC#VF3#-5RY{4T^ameMVVeCK~k`5Lq0hi3LB`aREnnnF}d3-Y1g}G`^pI zTx(cAW?>9UKlOGuuX40tq(l<`)4^i?8XC-S0K+2tkM3ThfEhC3u@fy9Isl`}UQ5|n zgAlGpFz2I!K;(vc?G68Q^D28Yc7qCu5(=Hmy#iZtFlFVNgqWXBBN`Up`&ZE*lib~2 zU6KV38!0x9&`U5?#jdCuI_z|1$qK5XKmR5|dlRPPl*2CcGmly-U}zDps;}lGktBwb zn(PD%$DjQ1{iT#$GWnBm<44YDcKd9t7PecUt;g&Xx0~E{7tI;(Ad3+_F?uq$I2(Cb zREt2|nuxeg*t z2Onz{O_F1g@JGze-5|?gj0n1>D=X1YvP4_)kPdt&#`S_3rjv>H+))g6@dXO-qxF-S zP4qoXylCMgqDth#dfD6XZ6iDE1^?@D$^E3pKfi?^9nXA#Wu5P?COM`jj&{6& z6j9D-O!3Be@aH@xC6?l~<>($flW+kpXyf zs0F1373ecSF$cSiu!UwUEPFp~<}Gk=X8NuOUuFbgni(x_m0s(%1WWu3AfSf`)whEJc+K)F0niH;Fs%R zupLzyV^~07+r+_JP~rGQ?5ytsWbmt*k-x*Zv^NiruRY;?<6WY9Z~(;&O^!v&7$Je_ z@%GsA8ZbV9TPdB$6a6$XF70-DhJM8z2)#KgTUh z=_mDLo#YcSt-Qkq(4v{W-z6B3s%K&$!Roe3N+FJa*qjy~tA182p5H0{8EhUMG=t0^ zJiaoBGN~^r&C>NZVlLIv1}YiMmerRH&9~FjD1gnp{{~6@2S`oEC;wrK3|>Wn93Uc^ zMOFmT5y)$$YcFEqK$Mb`+S2`ev%Z{ZYCwan+QZYGb1imX>wF$qc9PG^lvfZzT5}o! z(9o44`$SV5>ERG!kd8!LpM z!s-TODtkBs9wE0S9g$vB5k4$yT<-TmEs}63UP&4@d6#KnE19KlQ(t7;!=y6~32*9A zlrO@={RdfDp`$W#q4Tjl;-WX^3f^S624-*?y9=Tcjxg_QdZ-HIl6bat{Xor;JJN*I zSvSAW*jHI*UxeMCU^$7+#vSz50mttp+kbYC8^rZM95- z_j+%K1zpTj=(_3gh`gLj@3X4JelWb5Lgpd%!v+K|Y&>xtj0MspB zoss9KpL#ID-7E#b7(9w4xo=+SIn8M!AH2W&D?NN;tBh7v{j0AzAl_m1{KWV$b;#|R zNQXt#-6nvjma3w{oWQm}wd^mpVJL2C67PK<(#Z&%!=+kn6uOjo@9KxKw(q~58g*^- zTqzLz+7}Jru}CE#kd&vH9rLKft>bZfuq~&(pgXnG?KmM5PR){$aOJkr0=@1Lz{pNz zrj_~<*3y9hsZp1dUECwo@DE^CwW$$`-CHDh7I5%B9`#gD5=V{bygh6-QcYu zv0cFtuL{us5J>vv4*bfe!Q#2_=+ARNI!DUD<}$qVceC%M4{r>v_+U-K(aI^H8FHM( z>_2`N9O8$#zCny@9c$3(Gm8f4sPoP5cp+-OE`?1&h}#~U-6DiLeB$UMhWqhIP`}(` zRLI|W>E3VP&zt%u%%0K7QJlY#8wc2#BL5_={dX;rDiOH?%yPOH1uTo|<3X>qZQ%VG zK6;*VQNM`6!sa%2Lh z2O?JqF9aB#&v%>Lk2s{L+x?2I0AmoM)J#$nx;0r_arF%Qi@81vp&g2^N=N4ZGlwQ_ z=a?7Ty@u{5r$nLpTQbI?r(1$x;qg3@f1HF`6F&11(NiU7bPhB8P~X> zc++N{X$vD?QmRSd43$a9E2@K?Hm_@xwcA+IwY7Pk9ASE7DEPqjGmg-WbokqG>Ad%K zTWUyF%?}={Kmc?b_SiA74GUiInZbFzudQ2RHb;`~kp}-RE@M?pyO*piF}>ffyjO9! zoqUYsDB@%Sb_m09V)eTO+IhPVgZtU%*#+m^A^ESw)vfFbhq1=d8UEDF_!YOsSs8&) zYc+fU&0xt)QuS8FlinOjE!^W`so2Fnzix$PtH;irn8AC2xmXs2I#F%A!iz>N5a_u` zflKtv06e&rG9v??zmh^bpI>-B7h?p=M&lNhhaNxdGk6Q=|L##jJ6B!_GWE^e?o;yg zDKe=!VSPEpn{2fMgT&#K}%R} zZ#Ct|t_MVln@8l_^O{nOE;$UH><8EPo?z+Sd4{nxL%)~Q(fBsr<++w2XJ*T z_u_Tn!3L*iyD4$WCML;-vk^Yf_3}By{c?kkqp4*~0-LXFbt{J#Gp*pbPEWT{?3G$& z+D<&txmPMTx3@6R&XqR=I1S*$60);*)d!zi+_ zYh{+UL524Ns4s)imdK{@ZkKN)E4fN-N{y=e3>Q-uVRpACcqnEvajxMkeWP)O`zK5# zBfT~!NKR*Mb_Pp4F}Tzw7*@~G#72M`Ex&%uCB~#QHZCT`TC2>Ilr8; zc$&%u71Gds)HUU$r|$xE4yq)IkstH9TD@~(QoKWum35!HCbiX{k`Vbl6f-M%vTa7? zi-79R;Gh}J9RN$Er%CAm?fN!Bn8wqh;WSqRnObhpxGsTo2@UAh1D!&M(x+CA2s0d! zEevAtUH%|3!@(Z9_-4OoOh958>z7E>cI`Z#OfLeMhi&IaS5AXR8T56S-O{IQE@`%I`PP}4&m<{AudkdE+|!!JR3gu=)e1(!)@`JRlkM^W36rf9Sj_opgt?^ z>6+dJR@e`g%B!Z?KEKLWYd)2%WNdTTbG5XD(t0?i97FQGJ-t?O&SY3NKm!3=657(~ zFz=k$y%r?~uPu^IIixYkL{a+nI@?Ud`>{hq04Wiw5}9(1Ku zYYJcY{<5rz7yOClbd%Leb2<*hc({lD?x`nn)+&x$NXHD^@};_e{Eey^4Hg*hI0e%I zp?0HiB!di$6-KdVjN3N#`84NQ+9KI=0C#+m@mJH^8s+YY(7ip8$8n>xyp!tq(OsM>`qHGQz9)gF}kNrUFif`jg&k zuPG596+TQimynCvP*5vPu9ys?3_0znm^UwSgDs=Oa$w!Bf3%um{`<%W%19Yd7hUB` zM1A(~fzOS_bTmaaQroCY8LFPIUO>Ze(4E9xNa~#pJE-p@`X8dnsE2Vxf(tIknf#KbYyT0R=bF*L_9!T z21EpTaq=)T7b$I>3!_8cQ1i=p`DHb+d+q}>L)4%$hJ(b}8zICHei8~oqj6#XbN9nh zapniGMh{$;S7pu)?&gsGon(1K!UYU`I;rpx)8B6kH~VCVCOJpn6pRrIp(*Lqm2>0r zz8;jO5{SB^o3$V~$YMVbK8yEaF_QplzTJ~ZmoX`XsoTP$=^t5eAXx83vIgQ9EFPGZhHtX+M<0d$s47=R`)+C;*`IfVhGjeZ73K}}D% zqB^0_90@F~CQ?QF7ZMJYbhens(+}GfP~?Ap-7ZTYBLrNuQv(Q56=cl|=-z$SyGGTd zFu4=-b5Icwk^*qbmu^M&>KZ-!t8YH1KzelA;CsBm8$#sW^KZ5_x@eyZ({ zkB|YyV|O%?QG}Y$@1@^0h8TY^r$qE#`}pe>E=Lf1ZMj9Q=#JDo=%q*5iBjJ_9;Nf$ zANFJpZw`En4Su_6+xi$>a@c8IJIaSrJD(3G6E(HW1ylo$qIMuu`DBCj0ct*1>P* z!zP$bp-J?v@-4unmJ>{*?0O&5^ufbbKvVv977CKm+!J2i`|SGnZD88bnqM%kvx24k zgdG!f%eq@x$6G;HmbtVQ0di4F_TQ6bC%^h0xfh3mC5+L?YvBZm-?DO|ij^_Dr%=4U zFi9U&$jtc#o7nK{(ofNh-~8p3;gS0gZ^S|TRpHs=c2^9!*8N;0$FlBx71S-kuv2Y7 z3DV`GBFlW3rW9_%=M>-0$WTefiZHdIro>^T!8)SaZoA0%q`GGbpY*t;?U<-TRv}8mr2}Xs;-~GX;@dSUC5V`Br zv*3mq8l0W+7vQL;pfu1AhA+%`dvGz^@nJ_^V^eOqyR#GT+ok;vLMcRM8tass@XdqC z9c8pkedhE;0R^IJ{)%4+cp?nnqxhcnuvO=PbdVpO*&^|3WNkm$Zb0G7{XHNabLlAh z!BoD5XkJOnK?RQo#PMt#-9`^?iC(&Rx*A8af&isGo;2Uf3$3^17rIa=Y)Pw*O`@Pq zCD0VL2lPZSJ!f)VA(P4>VwyWSs82Ga*rA?%DxO7mN&O7}ywb5yA@7cY8K@8KtS-)* zvwj(ZP&cB_X8E~mKI;l4?#^4WPAeJcj^Whu3~%%>fF(Zm8lb>{dRCbYFf1BRWezCS zy;imCdJpGmE&?!4G~x_3oR_hzAj44v6w1obL!UAcAc(;UOJFR7 zQ{1NsT5uyHU2V>QSPb;|bQ?#oWOr_xamb{EBQPx}cVK4qchp}@FUmpiDVa}4@OYDQ z>kOX==vL^OCZl_WC)DKHn8`W<$*udSzEvtxv!i>h)NFkPP#t}PBe($F|(1=zT6ArcnQ&lKr9iyZGb)O zZbPd8LUmpL>EXRIZ`am%5QPu}{EE~uwK{e@dLa($B}BE=(JWaZPhcs~u~UBym^ z0r}!6SG~iK(HVJbJUFHGivZ9PGu36H|7_p?OYb%2Jf-h%35d_HSotnm|7??0eYET~ zqrDk80Xe~P+HvP9lN|3y}UC`e2ay-2xvi5~u1GzO)G zO(_?>WepjXjI?~C26+_lfy(!OoQS|tu=)%o+)kubZ1x^sHB0!3!VD8os>=6SG`JtS<~tuZMuiPhxS|F5 z?);D%#YAxpY9WVZNs-KvNyzC;-f$w9QIKl;}4m2&nVNNTh-fd-c60A?rWLht1pSh^=x&U9-y2G<}%yR2&#z5 zk-|?Th4uqXqN$68&fM`yW5{R)6^t!?%-v_pyMhg2*-oj)z@bLTO=lf*cQq>qV*NN! z9fLG&fWv@DaiGOh@fLeCEIP|8%TLN)ag+75#3LxHCVtyb+}hI3F- zeO`~aLME58NB`STGM^3-Oi{6+ZClxE?^`{=L6ZS;7~JmUH*sb8YJYNu5VpSLf$n1Z9^+O?`_j z?wcubmzFl;A}9n+YvA7KhmY$HsVg+C@ln!7vhq#lCK7-sIJj?uM)i5!vqx` zv?tuI_WQ48KGlZ*~1U z_7Sn!?DVLpS;$3t!UuIdDC1u`pK^a$rJ49d5WrjlftoY?Q(wO{_W|bX+kFM`pZ`PE+B0^3L?O63H#vDeneB>nHGZ4E;c@Z`kPhPX<6o= z)_piMkF5tX+mAY|Ne_P*{mK&RdEs5iG81LC>6}8RSe~IdcxQ)o-)Eu+=pwoa89#KJ zxy1c%Ex`YkfCIBFm|GCW;r=rdOYL;kofMWAMUnrb%i@LR!;KtQ|D#SIh0*Vm=V{~A zUbrhXj?c5kw&p&df|RgS`CHPSp2#yuytWq#%Ln{k28CBLP+HB8 zZpa@#nHT5(J+T9Yug;$deXys*X0$W;Mc+}>^m zE7`#Z4fZWu$97)fZPo!R95kJ)#wv1X4HkErmCy}J|6n7o_R$q`s~-iF8(3DockN5J zX$P&lRh+W}9Q9=y!D-rxiq+H$b(=)9e^0|jzgFRbV-{PP1l`L^-vU}*EGw0KiJHma z62X2{+j;RYmMgLSlk@Dlh7|FJJ5gQn7yZIZdNw;OeH|_D7Nc*lMK1{-+xqM<(+9W* zRCdo_hW4sS^t-&|pTqxaeBcyUe>%e@y^jD9S>Sx}*J;k^qNC5&#$y~4=bOxygseKT ztW(Eom=(;!eA18U&B|3X0Por+g;%4u7=Jk#-MZ~L+9IRj{OA3@B4E|;;n)?Kv%a1U z@XJ_0cFdK)xX|a__Y0?(@~$mxW!Tsdgt95kh|QGy?7h(x5p0O#Mj-s}5DKxMs@n3| zn3#eV`=tV>!DYn3jJnz^Gc>Mr{n7Y6oNhWTr9+3qN!b^yaKV@;KW4r0YS=zr#GT5N z&46YOak|xCeb9prjczN9{UPWN{mT*WF9K$zcZs0FTBU8B01C;XoYHo0QjUG*?foCf zuZW3R<;?fqMK9bDjbO=HtiH@;_X?=c%jPQzT8-62J>odFmx{=Ep*;WhGZl{e6#L1~ z0E#1(!MFC|+_MXJf3Qn%&E*ctfj&3_j9({zW2VnydvM;J2N22$tYe8%Ktf2hkv#TS zFtC2y3^qIEj%-Qj`td#-HW5C^yHN|r$zbt`APp^^bUGZ-ym0P4gx4Q3G3E}+k@1Yw7Qb6M5<{^~Rg8iRG z3q$2ce;SS4T*ED<)1x)7B#3bTR4LmwPqqBIH$*Jn+^B)$P? zcxno{6s|L`jH8?1#d7~)AOjb80%@=3@9*7lV77~_?5V8kDZl?BNKFKXIracN{fO7q z4{!>v!(#go>{&fo)W$#QKr|ANrTo<@5L>dCvmcHq$!cf;pL&mg6#!Xo0Ne@~OghtY z%_{ZBUaXX?xv)5==^plomY3;>#o%4Uby`%uc8jo+JrDq7(kct7#1CO8{FdUBCMY=J zx5D8?A|8rffWQ>s4I?YgV9aOdBf&uLo|c0F#V?X|T7capDPD=@s-WC`zQ`JIva-3vbP)$rhM&-aw_;#i4L7LWk26eN$geW(pHv(vQ_4@my!8VnAmaM55us|sx9Y&11>L5F!9 zb1LfywF^*XY4`$LsW*z4d;#e+@+cXwzOsytb~zkXvJ%c;e|5ltlvRXrmuLKTW|nlf z00Qc>C9ZUpdOll9d^2JAr6K$)3Sc6*la0Lb>f%B|brPcG?{nBID1aBtknrfk-tI|q zku!Aq5hR7?s!(k4wbo`%0-nbkN@FBOtHJ4%cuGOuOjE2zrM&7WM=0!-pda5aV9Qr=lS7 zE%QRZ+()uDd$6?`3y>s!ZQI_DI!YHle>Y*G;1!s*CNE*Q_CsRx&&|1C-6|l!^@!y_ zYzqD)G4zOf2G5lfYR{|Drl3C4yGmJ-5BOo${{%!EK7^RMzL6j z`t=_RFwOz*hw)`buW%n5Xs`fv&|Yp86tFL@&tK)yNNhZI+Z-QT)CztSh0m6Dcm=0X z3a-!ANU7@oN=AM&SbPa*j3oz4guCFKd;*&s@7n+TU#o)J^T8kuP5CeqLb!yi@`W&} zjn(gU9!izk2obS;a^EL%rQgUUhQm%%1J!71UhZm@)570<{|=}g>ao?nRq8vG{82;` z3O`)Ge_b-qwtK4&RQbkp1F&jKCECx9;YCZ=EsLg_F$sbLv)=f9HS_#*%3z1wPdy}* zhZR8nH$*P)p6@)B1dJmQiyI_gpY{o~(;ByfcX5M($WQHN9m0~_H-6L0+F%ex-(=o8 zb-pCra40PD;E{pux@&`XkVr;duyPeh&OIL(X-h%#Sma&|fSnDEntyVh|Ip72D7J6( ze2iDY=sl-#-mg4!A|BDKH;%=msGeheVh19#{UG>PKeXpaBB&`%?LM;90?Cm7f4;|i z`xOx@xA%%!=wFv+*r1KxiiKc>{s&~kx{X}G2v@BDmvmJOpqMX&*kuioXCHO-P@(eg zWf*M2u&%vAFr^bxI2}YZ*_-9(e-Pyf(jbp^JT@9I5T@5AL3|Lxxlg zbC0%^W}uu(ySoGbS9$+)1B`?4f?>uzxJJPh1s4A^h0|!rwQ`nWq{(Ay0HD2lJ+_Cq zS@p7JrhwBWVmwW4N^cN&U=pFs70O}p${dNl$f&5#vFTF%vj+GM7#OEgweDjo%In*7 z8KIYI4Tj)$0->E_GQuHA4ZnyJ_-6y4`=x$ORXqk(NY4V>eq=moO}@}gJ{proNo&Rs zuc#XwV11b1 zDiOhVgm|j{%_JNAOqq>P`2ACBuu^OW0zW|iVfok^EsFS;byg%2Qz83wA`f2G7PAetQ7kEt^@k>UnsI4IfeJbZNo3%2LcuyRqb*=`I zes7KRJ_t3OubfsQfMWWC3Ib;&8*cYkS`N~z=G$k>5SBmv(+bxX_X!L=_?@&a5BKqK zuUK40Thb_>gQRT2K`%?&k8zR5Ov2oEjf-0|; z&5(F5h2V{~8ldQO6;6~;KeS;j```g%Evl*emrghXN#P;;)O=@q2eb+Ui47k}3AjR< zR#oR|zq*Y4F6|J036XKOCUv}h$ zM3ex;%Z1*)l14KE1_tRsg2nwSE_B}}GN5G|W7@@l>443RLZ?7~$GqVWW}N~zlj;Vj z5Wo%&0@2s$mib#B(;XoMYdr-aAEV8TKhMH1`aIMol-oStJ9E0ET1t{baXlLxzTp!-s1lh~iK3^FA*1 ziDXc_?dA9OiK5_(%AOd!lXO`_#p@No_9~C}3vL%Nb;{YJId@R6st;(EDCeeGL73{I z*kO{m4@Q$#8pIJh1&>tq#IL@XmyNRNWUv3>EV}&7QKo7whrx_NgI7CcM9=E;`o(qO zGf6N{y`;5LeoOYZ18wJn&OajZvsK+j$duITLm2^&St>u6&GHw%BAd;Zi6h_eIFjmR4@4xCNiXhC`NDc9Z~>aRNk)ms%lb?7xo}N@u!!fY+*Iwu>g>1?S1biPv$`F z=%1L?Q03LKMzW~w>MwE^M1gzxQQCuOE5XJQ*l-FHz~MeKx#{*Uc~w8@q20UqG5?vX zw1*3>^J#kXxWxtnEM6EnH9}qe^F0taoI5vQScA{-*Zw2 z_#XkHhA*Sac*U~-+F!8)h@^rFrR!dYO(lHuQVgURz32_WOA_CxwLn4UpKWl1)IK6`@_=hU=$PxHUeL1L5`aZUP|28m`UE&bLGaYGEdR`- z^OrUY&com46@w)Vpj&64Pmte4H&Wh(_-ji$#iY1M#JxiA%IjA!q9bQn`L3wrE3mN|)D-t^c zV8_DlZt){QYrQ2JbT3?C;qk2L{9~#dh98@^0bXpHyVCP*vunjA=EGhL^ojB<);s8L zZb#Pq#cEp*@mYlTrv0V*#rJHL@60j+m1XbetE9F=1daL?!^3Ptxs zICwiq>{LQ{ok!D?MZ=?7$yMubfOtxxmv8eGK5bV$PY7b9Em2)fw3h(HWMsgA8JDM! z%IZbuYi}K#RG6F;1mL>qj0b@I^Z~ZepxPLLu+m-*2&>2e`$T>;armtdzQR|#{`tn0 zR$3ullN6ImkEzWu(Q-M5BIUzz@i@oqaH#SZYN>01FGM6G`=5R48UF*OuqJbuKIjLt zEhLKm|5$tPsHWC! zeb@pbg5VYrkuC}%0t!+B0sL>_XOETM@H84U|%B{A}xV<-JL?=#U}Cl zGXAR9o_4$4dra2}2mH&llAZDc{i~_9!Rd~IeQqze&i-PlkE*SwdI)&?mbbbe+tlem z&b;-xZG6f{gNe$b;#j=3Z%Jq54_K>X&k@r1sjLF&kXu|HqkZQPXkqm0v2~a zO=6Fi#0W%gz0BT53Eh|u=?QqOy1w(Y70@VcAB`#c)y`bhhGpjaq#Q6d{6sqRf;s+{5z zW25>czCGE{(6~o0UxsrP-SFpo`^*fpbha~ABHpbmf9tGhP{mL)_Nhwp6!HSlkOuig z!RwiQ3A(r?jn6!r z-z0cW`ROB75kfgx`@odsCozlQs}kJ{FMc&tFNDO+Dc@^Oxz{U)U{3N6Ea*lq0B%VN z^0_2s_Yu9OWQH=~vs;9i-s!bCt(}fHHZfy@@}-v`b$waYdQaICtWiJwGRuXzW2OEl zgMOwi!*OxjUh!PMh~td9!jtllaN~Q2(4hMEqlF+~6y$x*v%~6waX-pAa$^o7p7MAZ zKWYuk6Pwb=dKgb39-8%VrsUv+(*C`H_tf<^CmM9m@km@f`7@5mR-IvYwdT<~g6z8( zSObctt!5?ZR@-mTT#=J~$mm#99ci4RXg5?5aJw1b@SMi0*P7EkTs&cEd{tD7Ko_U* zSzk@zBGpR$22+;@OEr=9MMUy zT~HKNpViNQiSp*SeO9S25x!lwn|P#Eg3T~9e{c}TonEQA>=t;p$eCwk0mka_cA95J zrt)@kn0(QFp`eceFZ^CiGVW^H*nIJ^QF#7t)Sa%9G9lCK58NjzTZdK+R-xQ725C^F zkooG>-U$9kZqDkjE^pSumi{O_ge*$kaC`3u%@&Ieh20~O5hMm$oCJGr!h$brJ||)Q zz-{tg*wFFgyC(d-hp4+3F)?Z9>xjdn#P4da%+7-3U!5oJ5?0JlTM}1rw3EY7u|ycH zoTW98HpE8n-999B`yEGT)C79O53PG7`L}bY71L6pr;sb5*IDqUfI!A8JA&l}g28mtxicD?6@fC@m#^ulCGN%DbIfFZyg*FL#!%t(8mx;(PutU~h?`KhvuzQSFQz`X3VnO{j5TC1Q!Zkbs_^o~ z*Y_M9xAsGOVtsDnYM>5xDy`lM--XiRPvc)k2S|j3VcERiwzFCO=-ceJ1zhXpo!+q< zo>7iTjs-nb3}iJ)!V3MCF;ERUctFQ?zC20#RZ$NEf76Ts%>s>W;WXd{XW+w}yg0e> zMYa1LAJAX$g&N-2d0V-N^-`m%%KYC#eRe=*!N?+Fv>9jgg&K#HsPb&(lZ~cqPrl#z z15M;IOD%-a#OW;jJflw|C~|h7C=I;}esuBbT9xRtXWoXkxh8c$DDT=ke3~ zW=%T-(wLPF0{GVj)JtD=%K*(8?@WGaC<;?)p+@9U&Q$TrNh&bP-H>tYQh9i}=?ulS z^6JkmNkc#)S)}>IGy|v7wHP*OdPu#K-c62G>wU<)s8BS`URe}<-h}IOndE+P*QZdXoEOcXD(w`PZx$FGn++y(Lr@Z2p zd^z5SC;l+9xBbCS=7U!CvuP%CKer#n$V0*D>C>Hkdz%~AdgT~K--TZfJ@+`}X+^$F zSMuZdYpvm!j8A~YhV%I3ES(mkT%@+LbMP}>TLo{nyA!V;M|AaD-2xh@Et^m1Kk{lU z@1~&jE&KVQdahrHrBIN?ATys{;wX?-ixPC#JQ{z~J0_^XPmpOUhEgTAN>4OE$U`(M}*_*0ks;-&uE?IukO#hvd)809J0a32?$*nJTw`t@a0)_ zaEZ+T7e013uHFMslV#K_pd(iK>m%HSzP4vqJn+hb_uC#7Yf93L72h4Q&ox> zJ0f3pv*6PuL18sPc( z1rNwMQmH@}U2+&g1g`k^4X+d%o_#y%$AfqoD%LvJ=&I6IdHo!ubNcUUpKUKl+8Yb#l{BVgY3 z_Nf{Taa`z{;M;7lZTLwd4-V-4_nhjP*OwTJ<;YPqQ)6M@hsP&MBhKW=Z*LiSLyF=H zzE-1zmM4P~ih({JKgQmCyCNnza;~I%m|mDkK>ODTOoO2HSD$7-WJe(QN!YAod*c(|J+0j>#ZrNezTryifR z-C|t&Lq|7vsWM{D){qS4P3O{6Na8W;Ke^{;>CrPvaHYdKvcob zV_j_wUN15aY+p3;M~Cd*1S&$AmMQkQ}LE~;3hwwp+_-LT^~!V3ryK&F2>S*58UZ-vT+#(cEJ z=zykPDJ9>#q7_OcB3w$GSAY}}ft@5aYQxc5C$}^8okCucf_#O~ovWM!M9!IJbw^q< zd<(lZ+OYh!>w>YRzo-OD*SCQ&xda=<=gF#-yKh1_CgM{s6)kjEml#yzzv6G@bByVl zm+f?2t%mOa!PPydWD%55;PO+g3Wl?~Y3ql;h#x=L#!lGwNs~+XJ%9@1a)7p6)$J@@ z@~XqoTb5Hhp^XUo5(r&%x9}t84RJH~W%2bvD7Xfh9Yi3I%m#nF}9Vr-514 zLMPA+oK(kxt7BqqHpb>>&wjiK4#!kq;Z@r;#f}2Cd_c42xLy8%lW@$v-Hwhc_8Ix( z_?vx4v0nzk_M~mbXBInG6a#jdIfMsRR~k-vGeqAT@B>~gpJe$ds#tpFb;91B?!@Qp zoSzm{&U}#{1UZ#n2P`ATc-GF3as$J=uJkJsg`y$cV||dqyFW)EaA)dlV@_V1)<4+bSd0J0lh?)o1y|mID2`_(q$Q0B?tfR zZg|7W)wP~xK~Na|-0{N5e28bY>aw)L^XA1P=LfQ^pLyJ7CZ1?`DFg0x&@^{)jme8o zH+0@#&()KIs^pFCEt$USe!w?M+jK=f<cL zVE%{nO8EOSc|P}kU zbEh>~tROGG{)?_Gi+z`8tdR-*IbwtrST-vqHt&e zCVS2Tx1Y;h__5xx{&Dl%UHd-Usr2_EdF2eXkc6^3AS2{b-zO0&t zH5<#@V;zknv71=j8U~_yPwBw_NY)y5O#dLlPvzMBQX_J4%d&hXWTUiSTAu=RBgQ+R z`=(n;ovQQwbrlPN8WXv94F{!nNRE5Qj!BippUv@Ga<%19#*YdUq3r&_^+`bCVO*=f z=s(%H9%HLm*K9dm7;@fFL62(xZh>tM*ElPI2eqHV#jb zoQyJ&Y$)YqtbIQ&q?_aJT9>mHNT~+x>F@x@s&H1^36jA z++8pwl}BhewvUO3UyEE>E}fZmybykw4TBX2=31wYUOv)b@|sX5F>tKRX-0S3mADXH zpq9y*5)b{Aw6}A}38c8&pk6KHcerXlCbl&94;dG4bJX{wloRoDRNKwd(QDDjGyI&G^!LNXrHW z?4_IDNU8C59iFHQW);m9m86>1i9|>hr9P%yV&Wt&<Pg&;K0JuGDV9U}hFG{8qX0_uBIL{!+!?>8l;U}pvlBXo3@<{y zU>~&+*QD}1fNVZ$-u6#o>iT5TLIMM8vp}!1XbpIuDqKWH{B$#A8JIwycp2ydV==jx znY75r(Vc{hF1xt5;x*ADc}57U>*#F_-J?46-rsDYfg}XAr@f@>Y(T9yw0L*6Oy17+ zJ|`5+8k{~t2SMU$^_{;F$Hu!hpR0*&H6j!?FDTRLA-5O(q3H#P#peAQ`b>ojQSDn< z@k@6jWQJ%bU8$7#d$kxki=BPfeD?b?Imox2<8mI4)R?$NUV_Jjwbz#T;Z`Us>ox{> z$w>`n*{<4U2L<{uO?lptP!e8jon!oP?nAfP68M>;_tYiG4*n?n(B^CWoi&`rW`K!z zZB0+z!g{g=9kreYVFuKY;T}Kt46Cy%@vCoy3s2=0ZtJNbDLNybjga(Kqc0!zd2GJp zT4kah7C0B`ACn!QCPshxkqpcrT;z_U>eE%%2mujx8c48fsw|v8Aqz=*N_JVcwx7g@ zFPlC!keNyq?oE+sN16HuZnHQfvk&K$V)n{FfsJ$1MoZt31{iB|JTg$Ygj4BI(b{l2 zM#E$B*L-`b2TvEhA9wHBCvoS~4Y(ZAGq2%x9;p-+=-v$I)`%lISbtNj_4IUlK1j*b z-?n=^7}+N!-Yagg+bq+o% zCDLDpK#!iP>Z2u%lIn2wlOWypkY_P%Sg152bH-IA-FSQYGxQ4e1n;|}q8nsKrR3>%;auXyen zgR2}wdtx&KZbhDt&bk)rcDu&>6k#PEfHhw63^TOSG&`Co#9iM(; z$jxtzW?*T*&DygI1hh|AJH3%}DUr#5{xG1qb5=6_&|y|nQEX6DA>XQ12ba4<$PB^`0I@mwoQ5s?~JZfuXCFEXo5g& zx(~l0Ifh`KBcdmXfA$^^} zi@CDT4ExBOHZ-muAgK^v8=Mr@vF6~t0ZMu!Y_v$gVt&c#=0U1PCdUas=6#K9Iq%yG zQps)U+aQ7~buYbbEB6E=*{sg&D2MBfLQj|M4}$B72gamQ@p{rH0(rY%Y|5o&xNl=A zp^IfFK$Mgh%{{75UhUi8S<@4*LxbViKv&`1UC_>+_?z1I~zkqF!90X8*9A+4OrEC*IL-S$Iv6DjLxbeeVKQx>!_{fCsSsnKB>6viS( z%RW$?5B53VeW)QI-L_a|vEm%K@+O*lS|4`u0Yv^$P2SCPH}iN?a?+`D)NW!5@AohtQijXil zK95Bvi(0&DANx4Q`^ovQp|^kRD6tiRW;OzU4)xq8IQeex!EmSmDRalB4G9)RDt&?s z57E_CZPJw^ZLj6D-scukxAim)d;2jSO9;~P!9h*-2IEo*PkC~K_LioOYBN9WRn7QK z%+B)#=%22%i6d;91~QY=2!6U{t;c)|T6f5PK8l#O`bhFGDkD!g^D5!sG_UgO%Yi$| z&j*If;=Bw_Oxrabp@$sXN98bXe(153k=UH1-%?l_Zg!yT=G8}q8oN0g^HPE@;$_>6{qigEVVk$WZqXnZ7fyf z6sTg70tokGNkBU-@^|50Kd1f#uJRzSU6f>QW6++LWX(#@L3%9QG++2D}luld%d+fK~BDz>OXe^NzsJFkkmqa}^+1NRM<|5>QU{p8=qS3OKYVPpd zEb0+yN$~JsK5HuVr>}%4!)omOkK(&tYk`8IBI@^3G@7#Y`ee{h-OT17Qryeie!DDE zqDofwdi!k*Npdk6$}u@Nj2BJS!}M*uOA0h)rY7_DO+qH15TUAF7PU{XA?t= zBh*{%R;wf5)0G~*BtP^!5*HtkYR_ahISaXs279%XeLCmhYXG8ArL4`^yrm~yb+KP*yqhOzL*fMW&IxaS0aQ@u z93Mtqy;Ik+&vB>n$InR`p?>l1_6#S-F@BLEy}}rw0KFLLcEgzahMdx|!ympXCIk31 z*H&Sktyy~QMn?I4RPqHd$I%j6WIIF&VJX?%w819jJxmV_*!xj_Y)#CpksEqzH#qkQ zY~;K+_VvRgt5`tfDY!AiE|ztK$Su%{r43reLvPy+rw<&Rd|oQl;cD~0TwAhNRDQfD zwctZPtHaYw-grgS;AO;}{0gUL*nC#Y1|H)=Ak@VpAA6)Q<5)2+7eK=nrR0DkG;E}u zxL4pBJ9#))s!6xDuZG}@XT=pB+L$-b`)qf6EzPEbH$Q)Hf@=~Eo?_aT1WD86gN1V< zpGgA{X}%q|5LQJ*X>Oe}$?^CVzY2TPu}d)P84A!78EVml_dN>_ImTG-B;aALg4rsa z3j|)zuUP^PAL4^ZG2=kaziZcm$^Fg`R;OMJ8Z^V=j2C3Q~$wh+8P; z#Q(r7EU7$tMrAg8`Qghz{Q$vMHJ>Cs`#%_46>ysqbv^QojMmG|5Bmp)Rv7BjEQc+U zp|>rvWTal9L8)>vqcQ=FjrW^JRxl(|WNty#=s5AzyR(LCu6y3%dVh`G^kQRgZZ{aT zTppXDf!1%|?l?=5(J-Eona77an=NICB}>DAd$Mf+nxBk?4U+x5_lQ>`w z%s1Ajecy57A722C*vu_(tjf!vQ*#(`PuW&B6LkQ?>wp0;4si-`IgbP%7{o=EfhUef zwLQA>Ey&NX)Y+`-q-Q?3)7=i9mDAA{np;i5BiMrRRlFvDkkE$klnXTkIV&vb>6a@| zNAjN8`4+Cd7am|el{hi54QtnDPkEqT)(BV5j8OxheBG%PUO+il)#dOmj;`@)?DVzE zPJuC`3cRY)5WRs?QoIX>5vYeu7dOnx&wgjy3MM0e z)7fm%QD?6SY?h`3tWD?OQ(&_z_8kR?z8q7uAE7wllL~JlxxZ;+h~=a@BS-gIiw1Iz z;AM0Hl+s4Gdfb_PgO>F9`B$ZPJ~|OtNK+ z=s3Ie_%s&wJ(C!Y7aNeB-A|e^s#g?S2i3*8rkSve#!NBk?nS4@2&L(dpmy;mhhw0njy|q4WqvcKK*enfH_cnhiDBZRk zvl~;362jDSdEbZc-$fG@itCI+{lU$)f)B%A6;pB}12q5C_rDfWf;!Y^ljMfR^UqU& z@DF<HiA~xxF78Zy@0Dj8M;x?) zZ0oe2lGhvsC&>CUPOi6pIt|h5n2X7xeZ0f24$<$c!`}-?mxa9tjp+NhkhHI>a|C7q zE(j~>h{NYV_k8-yA80R9ponh3X}Rm_K1uEF)4#TD8K`ue|IW0D`SeIh1Ae*`%ZWds z0(F)GrK`XdAEeIs?J2sGLE2V|AtU^0sRl7tfQmsr4DAwVNH!r|_W9&vKU3dVxxtFy zEO4B7IPhSp^-eQx!Ke9q`;v%*Nu#E*`DWZwmy}m8@fk{t^o~wS1-g@Ub6TeGg&nF+ zXvgfKK39zYAXLQum@u?=@>#!ATl9Jfnu!MTg~&Pk%jqbBEbDZFgh*94p1+MIb{6y2 z8xLnMVfomw%}-=CsHm{zrP3zANYoxt*rO2E1$S^j$SF42Tr8P4YgQ%zAS>`yhh6q! zko){FJw18LW$G7Ec`3tDG%L#2B*^7wdM5tfA!$liR#*X!G*uoUY0rA)89ZqI^$Nsz z5%BT=YQ+Od04o9xa@kdO$34#a!Me;>K)(_fM5!Sc|Gc(Ed$q*wV;RyKOzJ@y$6i!M z>IcnkiYD^CzoH7BQ-Qo}RJrApe*C#dc1i(cZMZ`Qwiuvv@;r#hG_l-%mrx!gZ~>W4qhmFg*|KLkpn`Uz@^bf z2?9^ym#}!{U{8ELV%r^5$bzU_3oXZ*r+C?Lz zN|S6h58#IbC77Ir@Qr%(R3-<;-#gp}@hif0F}-s3xa`0WDAZzlHOyyd_W69;*D6P^ z*CM~x8INGDr#(VD!zkfJX7u##T3*2T{goy>J82qgW4|T~LKa|^2*LZnp8w2ds9Lpa zN5Ma@SlQ_8zpF=W5ly>f&9lTIazjXi`W5GZt%n{qRS4NejTqGU)j!GM$)B9@n>#$( zf>{?s#P`zJzP6{ZeSL#5pCX2+dh#9~IfyoK?{`WeB3xuoPw8=?&0;*XJrH2zgUo3u z(r~b6lxVaRbl|(3TaqdzK~cE*!5cI=;s|#^1pvL@lt!-LGbifoYBL(sIlgql=hvYA zw>{A4mwy-*^%Rw7G;`y>@+yTRP4<3Lg>1N~Mq+q5Vcj_?+NB*mllErfXZ{Ys3eALM8+2gX^~WCHk$1bq#sh1yJ$NQZuC;>E>LeW6wu zF>e3)WlGi}PCHA-0!-auY?_?;fRM|FOc2m+1TcL7&*y(#>BF2#2>jK{c3-%@kAx1V zX5gqN2I2|pNp_nSFE4=VXBbUfru%+N1|_Y5*m9F;F8FDkA|}W^Ia8b$E_S*+F^Y~S z$zWl7>FY-=N*d{dQ1Zau$&Xo|>21N!6ZLHU2Q$(fVPO;(z(bq`!}O~$S+NsPAU|Tg zF5UDnawX5dUDrd3kAJ@e`34aLr?KK1>Qf@8olfNq2qFv#kss0F6rj}+YzovKIh^?* z*_E(LdRAZWCD8FUuP2AUGuqQ6$euv$P()+{ z5PhX-P>*EjF!i54U(Q~xe_WtgxtOYr*o(vxU^)XYhUKayaX( zMsWHES=o{)j59MX0Y#`F-NX}59=PqL-*1J*gH|@Bvgo0<{1#)!E0`=ZF1sU*-aF-{ zUqaG;<&f2>K=7=i_FdSpp)7Zh)UOf!DUZH80BYACkCs#9>9gn%Y!Ka=UI8YgpC0q= z>l4&-g)AYgi{F%hnZwO#gU*Lmwd>8RO#eoU1Wu)?U8oN(CLFOn+epAUX~ue*9+2MB zZP37+k?muS9v@AD(@&@&doX6;2$E`Ho2h^WY;U{)18d~`+Ug*!KADU5C$DFMbX@$8 zdDv#0%G#b#fiz`FoP+Qn2C2%y15wW&fb$^OK=Gkj4FdpROg4 z_Qu9Hlg;GI2G^&|{U2wAq|2fLIg^u9AFxz2-*Y-)3 z{V!L7tlJZBCHbB%A#71d8lLH-nhs+7cwcrGR*q@+U-tXycK7AkVIgt4b z+r#bJiQ6rfA)cq(vch2?jv%OMd%=XzOfDLI2a}e!A}%tR*MpsOb(A8C_WJqmY8*}+ zV}#Gwn569lxG(+S`qPdBgu#DZLq0&K^Tpbncp#u`5qAYwa=d7<+b%lf1f+*K#4&jN z{H1lcr?%&8D3i|7c33Q1*Z-+Wfp>MedU%E8*&_tyNpAD~pa$E7t#TH;+#(kM6@6>{ z4CG87%m?XYaxZJrZVpG^1fk8*4}i4%4f1X|;sHKPw)eFn+PjKeLI)8HY%r>?_g~ox zRza)A;yvORTG7iXXztE?LM?`EQ%#9~s^VwT5fTBaQ3;h; zb%z{AFS!S-*0d3Mnk+aDh_~6sbERYpVX^HZJ@*D1Pqu0$e;v4CEgi`91J*zYZU;Nr zI*i#$Etk{y`IEZU%tO@#aTp=kYAiIS@h=Ri0c4vEY zpLW@M=-;Yje37j^%)-f!P##0qwja(B_=Jj2-N1}f6LD(SI6p-gK!}o6V-QF1^|oc~ zPJ7XlCC>`(-;(%&65>wIx!9H1mRnLnEw|x$Jwzb(S(aIE?vi$ziOKge&`kQVKJ~Bi z0H+g2T*O z=~2+i!3053zplxGtRYF|&Gtdsgsv|_sJ)VHsb#wZFWK9eXJ2<9M2g)z424{cIt0WN*=m6&{SB8#&r(TC@2& zX&_FJ%@0Z6ULz#zegN3j4~qYE5mIcj*H`NU$Q+glX~8U#P}x_{iGMyZk(4pL zknPHf)%b0SIf2XkN7Kg~h-(>;?GXC=A?ZRYgh4|`6t>QIlL+|3Vu=Tq`p2+ismAS0 z#?hSxi~i!ZtRKTVTw_4Am5xpJj%>@mbE~=#DNn=Ib<&spU%#f`HJnob-eW*xBW7Ia zx18Eu1&j;r$jz*trkDXGuts_=r`^IgsAOP5C% z!t2oOAp%(d`h20nKIC<4t5tTj!e&bUzi7>Jp&%*4nDN(d-3W&U96lBKd&9|DlboEq^}tOH4Y_8K`=+F zB}M=;G8%c6eatxjPUd+H`sZlJS9jtk}8I z?@L{Ib>@0=wV%TM?-7F1r!%F5en|pHk6Ik@`GR1Is8@64{~JR7ii7{RPSjTb zgb4RT&8WGCrl)@vI`RIdEJ0CJzaCgN!$&E{ve&TqxDtDb^_$22X z8{@iRCP&n42YJbE+bM$ipoO$f2O>Jpdj}pY9T~<-gd~jQE8|g`*iVnbuELjA6c^bP(h6 zlgQJI373O38PR+y78uTQUi4a98QU16Av~i_F7atza+m@IZ>pD`t6}WQY(5Yu+vVB$r zFIsenimnR$#(jk4X!olu*;r;4ksC^R;{jQSvTb#CHPhjtIz2M@*PZwaqQeYyf}oLh zPBrP+qNSK!NhI^;p=IZ`bmhd!&uCI*R{Kc@e!Jdi>9I7Sr4h@B4|kegB?o?IHQzh( zidDuF%J1}^{dp7c-DYz3x|ex8iHm2J)9|MN4NtOw|ixdN~iJ|eZ$CxtM_311#^v^I(JSG&{>O4S`6)&A^0f66E zAhF{0W4X8mQ~YaAUXkGRor{ok8i|XLZp`5uPCIKyXdAH*@VAbCV*_m4kZB@x0tn@A$fuf4^|=q1$djOgaY=Y~U(e-&wVkR4+4dOjHna-VMll zdrK8AzQ)Ph5+Kf$d&cw)5MyQlcEF47B1D+GS2-5A_v;W&yY&o?i;!n+`KeUAGB1n( zJNNBkm(tP6k5q^T$)s45HmxW_l%_@Uww9k|Q7>%P2 zX2nZVQGinZz~w3d8~ar*PGoP09(ZijU~MVjZ*i+5r<=z-2K62mt~|kHaa7SkHciUw zOE=y}0LBGxUmt?QP3saT;cvSa@=`wT>E{ZK|I$! z`asQqI&X29kH!7ol_ncuru;M8KyFwZFF+@2tXFUn6QJMZ$s?x$4Z863*W9iF$YpXwkhQP{8s6eKG_;^@$A4~*_VLDS@f?( z<9*$%1dr^&76ls)Ioog-2p?%dr2h5eqgrXa{z0^Qz!N#bssCEEk3GE;=^#lnEw`@Y z-eO@{G&*PeqW?xd-I!3xzt}1CZ;wp@D)RD#-5D;_Ydm$#n2|nwX!L9KnV`y9oOCcN zr{+JtE^`3W>OZI%kTMbz`hbi1_mb<4z>4={T`UR+{fC%V*8y2XplUG&JrK(Gy5-s5 zNW+RCpTWrs+!8O(2rScpEd6tF%wnfr`?-`|i@jo zCR^h&eh_dZ9pw6rSS9w!yV608Yzt=|82?Sa*sYrt0=x8^DgH*p>T&VY1N2VgTpA}i z8?`~EpU(9<{!QwM>NA*0;A?t;2p0Hu}k{Iw{%tA({OU!5=P=?9rKJfMsNpz)uQ z>_2^yRq6gO2fXQc|K~?-c%=sp-A_2wf(gJZ+I34EcG)_WVn0ZIKI89(zUSlDRw3Ls>=R=bhP$O((Gi8 z@j1Vipnr(A|3sT&GQ(}<9$@&{pMjjcZ={?`H7>q7NAq~zD2^v-L{6jV(O!cc1Hb^k z`SL$82EZbJy`8`CXMPRWCVP7BOS_A~=~_j~z_F+cA~XK_Nj&50nRl6wsrpz9$RTj!#YJ zC1(AbRrYA@o3Z}Ad_EwgN_!`6<oKvfnskhm6}27q z@A<8onD3Sv018l-8nD#2tfE^@!Nsn7$ogQH!lE|i!P@+z@khz2tDx1!MkG+7bCjmk zoPXp5DJqgl9w{l>+g;AMJSBsCm>*LM{5gFUl@BBep}Z9dzXtMb1<^(9#ns}eXi$2p zid z*FykvCLVOA_Ex|f4qYyg1vX|5aB0^V$E2m;Xs90+R8J1c2}VD{}*Yc=-(e z{J%5xzp>|kF~R=|LcihYOgezw|5U>Mf85M7zh4a$fED%o^;#9!-#=gf>%R_dId4bP zCo1cC6j(REu=jP0PLS5+KjpS+&i52o@iR(%w1GG(PyG5tn9pK08FLn_JtiR9GhC^z z4u(KK=coOZxzSyDy7?M8d@tdfk-*jdrE}Jw4J1wAdDij~$aUJ-xm42CX=5SA_)B@O zobNV^*VpS9Ur&0sUw4x_tVmfs8ObW%BPLqZclah%u#6h8b-(&DCDnn<`5ZS9r$tn& zxxQcA=Y$`0JBFciM@@LtL62)4jViC*zXULMSuw~Z#u;F9;(5{88U6FGJAa?>lO$e^df$oNe}7-auE3_3oLw=GA1}>=Z@mpy7Exbnfp`RR_L;B_oG_z4viR z+tGxX5{TKzn}-=#))+tL=;L(R8*TePe0qHYISQs3W+m^jGz zmd21}@>A5jyioq8j`}FRIQ3Sxs7;ftoYuStP4on@(2wbaZ_|&CDz~ZEmqZ;JAsTsU zXYJ5dT*dBFDsr$obzx~TpGOoV`(g|M&=zp!3lpyo)wNcN1*yY3uWqsg?(|qR(7nC= z;{`v82A)?o+X9kUFHicWjG8B?2bxQyA7tnpJc&dy55vtzZ)XH;!uhDy@;v2>kQ~p8 zr;>|o4Nqt;<+;5Xp?+SR@(ZsmVx_)9{e0nS&eAu@t$k}9pfypcSCeh2aggonRA$F% z>7f!ZuoQxp(CS0<=^RyXWs?k5fRg}(w2WzcSL<1!e2>Sk%fOspeM3N7c7V4{@oZ3} z+xoZ0;Z?8BtA?hxFw}RnQ9o{-E`j+{40+V0H{s09KO{dnBRV3Rf1MGnE^}B0m&M7K zYxXCLMYPwN-+LdZ&9FRdS}nvWTJP5-RjYE-gfv=H@${0dSc=EB7a~CjwH~9UROT2F za7>mrKqh!96Hy0vI7WJljk!ab z$z9Bs?^$qVZkp>T zB1vwV1y~tR^!>P0I`DLH%Bn=Q&e*m@j%|0URmCjsRUIMM&IN{nnt2z3sc%`x80M} z5xEOdsm$P*xxY4J8jSyohhHuy*EIqKMmKI$^~)D#>$a>2az@d7cvapdTn-lgs!Z9f zs46Q8*n>-asG_?Gt2m&OuKcJ(=a=d~3LI@JeeGz2HhztR`O@t@#Wb|yQx6T|_ui&1 zz{q|QY5Kb8dI^K-kd?g*@HVd*YEWq0?VNKonc@^UmZ+;71Do4EFQ!D2on zDB_c*TDw%q-V38$!3xVM-JigIiGfoOFR=m}z^2=weXwIQQU z%{>}@d6QI}*X!8QdW>K%!0%hM9~US$U8s^8>ULHC9SiQRjC-V^*>dnsqmBvtf!eh= zVcux>>hi_ss+^F4=dVyYE34cHoH07L9hqQUbKa z-m-I<3Y_~Caa_Uk6mcJH%w|^yENJAQp$H6(*wT)#o9;`MgfF{%DE<;W>26JsV34NL zbhAmh_B56|t!K*jAEI&G+4QN}-4E|WQQDxKCz^Ez?LN!mGG_d$-xngfb>T2l9M_4FZYNgOP2%mhHONeXk0sq?b9IWWrqD_|6Nxa30sieopj#?9Nn(^enT* zC7q)0<@#IZxj%$UUfBIWXBL)vlyoZ3mu4ZLN6#2JaZq0z-HIG+%I|WwtUCMbS8Q>VP2jjDQl*fc~uVk%F`ZS>9K5$$=U?gJb~E)PDu zr5N->Xs#{WK@sL!@CYGrZ8*1KPQFhg^v;az&TdoP_-fwBz{H-m$VBQHKw*l~Id4h5 z`_|d?!M>`SQ66$Ls`bu9Y*}cNw zR|L(AQW~wUd`vpj8y(GXR?h(|W#|fC?pFV?5~vOzifm22&co;Nr)Hv>`#BVicQism-KRTUQU=H-9$@SI9@!T_#t%lh}U-NI#eu0ZWSI#@vi1{X5 zhlY$J%Eaj9vUpP1XbV6dpM@(Z><>i&FI5d%NwG* zpU7V>IXLyYZKay(#2)S|_s#PZ4SQ~>AfnjLw{G|4zJFfvQ4!JG&wD45+cIWMGL?_+6i_Qg6(cq}VmD$23=&s9>r;Htue#H?~wMZ4SO!ZXq&NV)P(K|6I@>y5dJF zq*_Nj+wfjmv(v=-?!@yx3QcP%7Q~^*I+E5$Wx>h9Ny_o0b)h&vV_~ogSe#mrkDvwB z+46zrBG2!d;l$5_q_G-B$c@Vdm**tY;JNFzSqJ(0Dhn8U7TffkrTi2tB`O%SD5&sh zV7JFWp+hy#Z&~yf6#rPeAytQyYT_+wkG zIC1DKm=2zAQ}L=gU+>exbM@M%B}ys=p|6H_ix$l`kh-ehHA=3+B#!oPX8eEbeN|MP zO_we~LU4ixcXy|8g1fs13+`^ggS)%axVt2{HZH;4HE7V&2nvIy8I0B7AK zVw7?c#XpBRb38)r{ho9oh!ZMoRE95^MG8@;u?mU28?8=t1x(_LoM&n6zV4b(IC-n`|qB2z!f9$1}1N9DX( zXUT!s0ypEN`;K7cT2^8`9}>8-^j(I%GOgJ$#Wza@q9-%I1=%OrDB4avB8ugf=4@;@ z&+Hm+_&$&GRs?z7@Vn6Xij{O(yNUIztb;k|`<$v1<|l%jheJZ(8qdA)D_`}Lf6DAK zaG#bryB#RqF+)b;|FY^ylQ#89D|*3{qcWOJheHK_dArEWPgAgYyi{q4*ZzHbKUH2f?)zVyRK2dWmRiO)50}+$x$>cU zo!b>=Ww+$UO#HILcSC@3;0O)D z&ug@ly55-pkl!>b&G`O<1sy9Y#FtoWsUbn*o~<|vZ|puwtj^0iNwv8kp)x@79QS=?$63uU-A2lmS*ossEC`+<>3U^k4xmL* zfx5R?(zGi%nj}3nKK_gGpGOX5RDvezFn>{Cv*rax=)9P5Tv#{OB6Qj3w)hA<97r!ysNrH{PS>R0jlk{i z?&i93>eUPMkGs6XN>-EBb5d-R2WYB{%jEC*N*+z7;1PT+-__d&wkpzU_lA-5^x+oF z*wz-(a}3(bDY+4=O3HAvNeNlkXclgcDPt4@N{~Fw?}Vv3mvtOGjaL>sk;~%TJ_t;#3YS;mBkfzL9r8u8dX_u zbq?OiaGjY!3bg9DkjBZKqb=9zJpORggZFG9l9SuGiXNJ5%j2|d`!A->$G|W*gXolW z*O+<|j!>t}cYi&w1n-YVx{1)ZmPMXMjkArRb#1wbL|@~0wms%#(hKXEA`ql4_e|v| zwx!L0jG1gzCY(JSYLb)MCC&9sfVt)Z8p~VgLWi)+HO2~bKLxC;FK=LD4mN3vvwWyc z_vx;}ZD@E6($uYGlx9G+Sx!1W0$?j~UwsB7kXX0cP&>UL**xbOeR?&e9+Pqf_19D3 z8~gQ(^yT3GPoSJK%P?KnZ*2=pySN7}flCH>Nx$%jcEj@Zjstc^O~{Bj?iVzmC9{5Y ztG4tk>rWb{hNo$?&gV3+1H?v2&QKp-Wa67O%TN}F#mhnVz-w7#;@CRNSe;asBy4VV z3sbnqS?yk;E>&>pDTg3)tvo}5$I+fnSE$Gk(b*vNRB1_wkTVPYprT*#sKYyM#IH3c z%Lgh2I~x_ZdH3l`B>~F3jf?kSE#&Ik39ay}(n8gyGWN^1U6qbL8AoN_7)L!{lap=v zgoNDE(TSy5J&IOi2It*!oMm}EPt$~i4!=GK<;{#GeshB7rrVJ89Iz>~l)ao<8?K8y z^3$*FZ1eO%3q*HbM%w`mh7Pgmw&j2wyAP5s{#2*Zbiknb#Bi!!X}aDj9IfZxX6Bb@ zC=M1=|5@ikpU^Q(3Cct%<0q~>uzQTGEAt>l4NME=kg)BZOCa!a%!p*K$ra*rr4%Yc zD%i8X%lo)uciKD$zMNU>FN1QKzV!*4P(PxG`3A=NVNSa(850jXOC)7o6}!el<9nW& z{=DpyPvcT7R|%-5O|OHw1eGcx9ZFA`tDlYgPi3D0yH}y7ReHCbvFS=syA<~L44#Uw z(;H3!lpiazC!Lj}vo=GNy~-CSLzJALZ}Z}o?CLGbEqZ^~{IwCc)w&zTIe7RHLf3ez zm}qD8gzzg;!2U2yRaYrJGo$vys*aPPvsFkt_;~q)i9xU9VpIv2Y;~-RayYHIoUhJh z%1BJyMLgEQ%30p+o`t?`rnOgHdq1cbP7bA?DnQ@_b*SdD%^9up_@8#u2YjdJoVwO^ z+=97{+g8UK-(JN3AXA#*<@7crCnF<-?9$jN#*uJu%Mm(S>_Xp%=r>$f(If?kNi|2I zI7>Yv+JXJ&&hg!?EKSke$hA5RU~QcGU~dl8efy!iqpQu4G}I^r!tE$o~9AXp2^8Q{Lh-^uz@*{*I)b zBlJY1bKo5NlS_zenY8h!tjxi+_qEtKKlB}K#P>; zX_FC_SKR8Us)$nf7L}JvS8+DB+2>o1UfA)lNc3AlUXDkeA}Klj_Ch5{{$Hme(?s!x zJx3P3i*~0?bI-y+n%~lwnZ+l|3I6!Y2}ZMs%^G2E+}z!sy>ILa2u0*>S*i5b3@K)U zqt+!NSa*G689I29{TH3!xA}2Rm8QS`h+^_%Y_iafqp{U=zl3u@cbW)q*z+obvYINf zsnzEut8{EOl1nDqxPbg2n`5vM?#oMNJR5~@RCaGjp(1y~#mJDd750}cWG-TL6i!=p zZ8A}rIS_@#DvRjQwwOY9#9H>Y>qS$<4h7pH%O@$6H*0I^J*th)&bcLj9=8Ff= zvlG`x_63ecNr~8h3c<8%-4}_x#Brb`(N<|5!ocx@9g=h|M=n(&n10w5DBO#`kk-1| zD6->LB%`qOjo`>@;JDF6L$@O5W?nqBOg9DD#qqI|mZYmc+F)^n>TWNW0zc!=ZC0dX zV^^4zSvX_7xn32Dr_F?ySjkdyUdhWqN?5&2F*%m~?F)I<=r~s=w8^btGjlE#xz%4$ zvgFHkb)Vf{Z?npTNhWTMqN4cMQFol7O+0B?>B*0kQR)0|j;JPl$AIrKL+lnH zZjwFYN`%YkZ;V$h0@OBX&jGO-Jv$G84gT81>&7copWL~UeoDB1BRCcZ9wQkCJMBMt z9c8ARrDbx{HE9c8({8hh+q$ix=4_x<$ZW8&S3>J``DLjm*yrVXjFe~vc!2M#oDuyE(q8kOCyi=#e_ysGFO^53z3s|6>aEON;m|&gp0A6P`Ge1?VP|6L zByp8-Qk_|`kE9=-jkEM#`9zy$hj>Z3rEzs-IuAxmWzV7lZ4|=Sxx=y;=VXb}z1U|? zm+^~tE}<$iCaqfAEG6`H>$n6AH^Qc+I7kj-Aki;1@s7Mv(E$$~9nCn8k3WZet(;$u z%{~$I76~6tSn}G;N5ZINw`{^4F~)vzx|eE82fIOMEKMv`_2v7C%(sIt&X0;apbzJf zZ9lt(iRk)kK`BQVUQ~0^=554_iwkrJd|?E1H+Q&$zJIjw2+I6(XJzT5eZ-rVan&Ghx1eC@P=(+D?_`@2tKomHHO(`NL46Q|1ZDWqNVV z!e`1#cPCk{=7p1Pc8c6(G=qF`)vkaIohwBsB)!vX+t*f?eb7LZY5~!%0`)x6(n6^@ zw;8smeB$8ib#S3gmqI98ZM5P@dYoPUHm_WqVSjVQj3+NybK~O(U6FUVf;4tN1DsWd z!Q2$cviOd3lmCdFCk;lqWk~nEtK|3@Cy-VJJF9;y<3Q^Ec0!PeaZyT5#YNnVqUzg} zo%7Nb)y}LNw=4^f*t0{1eiZVhjYE$4&hpyt#!i|*S^`2%AKq-;nKJ>C4zrq8 z`J?new4;f-y?5R0jCL5WFKZtw(`>s5l%4#t?%_v@Y!jC3pr(Hn-0Iv^Is-At5p87k z>KE)7o$v+u6k+M=m#_CZ3e8MD#JgD*O&Q&!t;2`H_6DZ+Pvv>xtS$F-_bk4`8)vS-pu^s8ctWpVBMKD)m}%tpBT>Mx^GO*r>V>4zL2u&6z`d`R9>j)@)Dyt z#~xj@yQ`ef^N@g0MEp_(cSBeNph9|o7OdRPMUo%ac0ZiJaGST*xI2%&4yI75D&@P^ z#UVj(^KRdYZOXUTbN1@`u0%py+4SVvPo>m3diBuwK1K6VQTYCh)2vrH3WqQB_Q(K? zIrUH!jLMeacW6*-w;lPy){0!y2&7D)MtXPn-dya(E-V zTXPjHUF+BZZwxH35Y8dQ)$=h5p&$<%>$x*)n!Q<(FJX%@D4}}rp(l(0hXZ=(z`D$? zRGP9dXK@l=;S3L78ufHceuUYX0$)CLrLGywmKDz;MNe@xl?e8)2tx9v#}5 zGEk0=9jK;sU6fBZ>w4XAwcD)HK*HR}ZPdv--6tKblto+RIBYH|8i96WEyT)HXuYKo zKd6=n2%xh1Ww&Il{VpcS62FOZ7XH0&!IGj}EMzJ ztxIg#EmzvstS&vLC*mM@qEJhAB)@h2&4QzSc9c2>OXjLYt)bln50TxVE3?lt6A%GPgfpxmQ7*lB_TF zM_0!`y#MMU%Ew63%LsqnpW^5YJ|aEdSPsWO-6!lZb`2$bq(~YiV~qV(Bl@xOGJG?L zpjpMT#H+}$Ad8?`Y^2k{&GeA>Yn^5=)0yV^s-1Icit3S3@LE{E_~4qSdweU3+7U11 zwY|D=PPr~vucDNJIu_Kus@E3o@1`^F=kr%(7ePIFPL&6|!yO{MDgN{#_~lIxiI=U{ zC_XuFjJT1JDLw@4tb-%?%9EWuyHO13g`5*;MaH?)R)_potmohbHOmR;!=Bl(DXn_zBVAZ_@{R`#UP^^)e1=5w~f z5pv%Gm;QvY-S=1zVKZ0qYp*NCD0bUZX&hXODTnL8YEl~~K4s2oc?I_qg_%4!n1I0b zB|>(AnJ~+$kKODHLl}{LC=-%x?jUCW0{t+$Wg%1U$H_mX0JKLN-IB$1>k_sViYOJC z5N}FL-w@fnxIbQm1yJ$s3qsE}Fv>GVRPBctej-u7;x0-jYn6|*d5gGga{3Nh$O*9Z zM!l7}%f&6R=cQHBNs>0R{D0<=d44KT7)iz*ysMM_DXAGMk(3etQZuCIY_VRFt$1RK z_~y97DvC?aC^Ki0Q8P>1Tj8-_Z9=0t;{Hg@dMhT4>J+j)N0-MW1sN$EG1f?7 zD%TfkTW0X0Yv9T*P6Q0p61nNK3aA*QrB75a8Z)D*Z%(Z=6@H^eLoLZDT={zSS)vX_ z^}%gkGB163oV)3Ig~8!b>8V5Ok1|_Ji{a2^Ic0G*vp|etdsaK_c2DLlB_0Wg`A)}W zt*ccYExYopg4S-hV?BrcR=it&7Pk?qtWYLl*zAjz9RPVb!>PDXDV$6k#JAxP;t_~*AQH0- z!JTvPl7RzY5$P}9RzI8qOmzH5z<%nLl2g#F&bG_b6+&e6*yOhX)>IYr_f#tsn90dn zgqIA*BltV?*OX`L59j0Hdn3B^%zP2}O61dd+D^`!<0jdR+@+>b<7RWrjkY>uJ-4<# zU&>OCqT-guve67pIqA5wu36-twAF2EWSqEWG#SNucYot7cJTb zbAAvBAahe&+HO1hWaO~?3ryFCVyA&ho*kS7`)@sbGz>$YKQ|g#?iPoDOO|rUGjIN@n0jq4Qdy-U+#`bk({obFtkKL;`?*PCWvJ|LH8 zr*fg6EH7<9L?#(+$P!cAqZN@EjRZ;NwStpHxF`(30VH_FaCXys*X&?Ji&UBDlL7!X zoLxW;UbkS=#_2+Jh722HNnywRax(JG>|7krUDgKL(Yq#V$E1c*GiN9iZljYN| zJhxP|uRD`KOEoc<_}dsbCqjoX_rzoQK|`r^7Usm(+}~qg%c?*XcuQWVomAJQV5Yx5ZhdUiE+5-} z|H15ySFmRtqZz3YJ(P3{j{=DaA+4sC+4|g>bG_*JT;b|yYbk>W3|%%et>hYaEOu3$ zijqe{*qfJPb_U~h*)pigJ>VYb_b7)n>!mCSY1!3JfIP;iP zY1$k?{_~#i@B^+g_xZ+>MyH{9|kv-8?qe&xfxk z&6X^|(oWMSz{>>Zw}23cLFK^MAji%@Lo*_2xdeuz(YV3gn{?nKp=wS zEg>L&dsn%j3w~cPgN&ecooeH%R3UpTzbub zcXmSvk-lXHflv!UDIgh!qC@Yizl2KE8dRtR!;)G90v4byQpq~|UmkpHB^w0qL@>hyAA=165gYl|ydORGftiXT zK=67Hr1GgzH28rb%0KxSDY#nWOp5v@JHtk+9T>m-eV_cV9BP=Kh$UXxu~t%JEa3`2 zNn;||lA>_@VQ~Ws@tetC>4B@s2o9+R|ATOdH{(q5#5aFMPYuxrq3Pz{_hTtk4J%KetzAVd>*VN``J7$((*Y1Su;**a%#NT20k}QYkStfJN3@N zR>d6PgSFG;Y4iFB*SdGY+i`}DJ~0!6UG8TqfLpPQ$F0llLA^#M(NcU$$)7{i3mnbSGnzR$#;%(YKYfU(pYGGpQrKi&z%ooj>8VE@dY z$9!zDZ0=d+?;Rh`HBE?1&Id`^%)svrd>S$us35|D0z5B!m=Tw}^3WshAnNa@{VUCk z-ykUzz()`(jm3DNf@?qsna%8Z=+n^QI*1LNX2Hma*!+SAT+TmfUU;!^h7KQVhaz#< z%sN@#JEpQ6OAH9fzq)3FfA2;{fC2w zHeZc_)3|7U8p7##E9Y;TlGkW4@H1a}R^x$4ExSm6e6z8KIF{I%?!V2d?(Go*ZMcBT z`6tb@8$E06%$;!@xF%zs#)v!2#`7_e{+TbQU{TEY5n#P{d|wSN=bto(-NteLnO#H? z;F=iE;~5i&;?(<^fW>F`CW@Ei8s>kA?{6CUSAq!evu8~c@M)Lz|GvoUeXZfl3=Iw6 z4?pNPuWPfW;(Yq16)@|Tw9(lQ(d4OK=P)(#Z?{WJkn_D`;#-R>|J}x&2f&!B`)hqA z)Qxb5q$#?AD%nKbp?>T9xqo*Yz_t_Ij(oej{R59xz2o?N(lLV9gli3Brw~N_-kC)$ zH_=4pX*mPp!&7u9DxCCj`HvLoiAw2poNLG(Me3eY37qKCrcsEAJn5SbMCjAl5IRet zNZ|Azo68XC-RI49@O|1r`@{z#W^YXz0L$XNBe-V7q5ti}Lo?<)d!Uqk)%jx=T7YaLWLbZ=JzHX@RJ3|%8Ca!P zh{R`@x1S3^nVxS_C>(9+S9+#{IV(vNksbKOfSwdw=-a@I?G-|X0)XrDUq67pK>?Hv z#hPJT@>nd&a;(l`l({50jp4+CgxLTKJKj7T3M%p!HXcTwAn z7+Ft`rr?47+b;0v`5!s|Eenx5))+0bH&x5-%)bf}nh8yL|n zIfu^8*C3W4HI>ncC6n|!GL9`c)691=e3O;g*jf#oqn_H;XPo~bynn=*DZnC9?fh}* zQkHRM0_626t^irQ<~u%C9JsOI8Q!l-sHlwM{8mXEYT}Yspt;Z3|B%8}6FqYQ8e`~= zzv(@?B;%Cv9Ie`7?(gQE4g)pV&IJdEe$r{%haV*+qP~^E$2hk%4hxYlWvEX42x+OE4X6GT3|LU%CT!hcA^7cWS`8=)dM zI7vP9F^H6w|H2_)V`F2I3ERrbs;0jFc&bTVUER>muKLQ=oo}UyYOtZPF*t+E?)K}l zPP46lRFqsyQ@`<6?Yaq(@%n8;&V{?Xu3i(6-PZux(Z066>sI{X-X^kt?fSBv6U%O; z<#J$vwAqlz$l$Ob<`Ta_&tBG$=(rB4*-&s3aNI^<8@PPClj@$mILQAC>k%#`+d5*f z&-l({8Jxk*@q$+a0bz`n`gLK>#oF<3Q_Je|!L~mq*1Ec2r;PEX99Y3$&j(F$U^{iu%H}tF{kT-0BE3QJ2H{>=~ zU4WqyXt_4g;iDvMr&``>-2!wE3k+C=FQ}*3fcqc=FPY~?Md2|uN{kchQHBVmp>{Dt zz|1)A?fW`N(;Kgw-|mai-@!kYibQRU3s}OFshkF_xmzX;fBx7==_B zyW~fCTRaz!lnJqf*Zv>5fXudiO#9<4*qZSzs6~@MB)TjfD6HF`U6uxgpaA_$;UrDe zSeDC{uw$BIe#t0FQAu{*Z}7oo%u-DHKI9iNI=w-wH_SM}QVataH{KxB{NfFcz-Yla z`FCv0)ABdd{+39>+W28I^5>~-=X0D-UUj^fK!lWd6( zB6(~*jY-0WE>oYu!GiJBIgm)!DQlqF&Escj_~B)!K z;J-x2vfYs=EyaNG0RVrNt30%p?Qojax~i&w^K`k7p#8AEYhcc&Huj&Hd4#4AwP7QcyP-JT$)mBLRK2Q z!TOWvj;wqK2lPts_9NjA-$dX%hQfh2+KadlC~T05JZt|)&kt}75D-Ktz$>nmAHn0A zEH>eq9*&QdZ^NPA_~(9UpcC^EaikMIRg13`Dn$08w0;=tN z;We0WZW)H)Skb^67p5RM6do{kPGVM=cosHYd-HPhat)&U+rptgnewX6?rCw7ofb>x1t@Q<0bU!Y8| z(bk|ZSVOJ&Tgx`fZ2V12jXl&KDxWsxXbcdb!WgiBn&ML{cS%Pyd;i`r`Nx|EA6rXK z>WAWH3a%O@+q`KUhOniBkbh=!DO7kyBA!d~&vb*{If+=2pnNcvx{iVq#gq_UoMBGg zW)1f48a3flW&gTh#}kKc-Up?`H{^JGqTfF8TUw1F@Aj_zdBVu+m|357TBT+2z zzFZ*5Kgeka%f~hR?z3G=w~X_?aeB{`lCdBiUALSZr3T9#Qe=EL5V%GN08T z{i2@XpC0-(+2z>PRA+haxTd)(#o%U*EP%np-gz~@N8RdUWDcxS6vNh@PT=wo9zH* zD9_%1Ifm6l(I(|xwn);E2hNA3JcdF=8^Pu*+dLv_nBG+J#nnyB*KoDexEEpM^j-4HKDs%vYT}ZHS`12n z0_lD&nRlpms2G5Oq@DAzGFq&fN+15C*(*bXK_(UgLGrD*eHTZV0Tbn~aQ{p$M8|AS zzF=ULiey>#Q9bFMg?)9FIfne+ZRqX@jM+^T`w&pl2z12@?Wh~8*okf0?Kf3qZm4DRPN)y(G$od7dO{?@2x7CuMQ1hu-_)Hfax9lv2u2fiBmX`U z;=Qd`(zz#LoQl*pIF#s}Q`H4VqXsyBSYI8ze7PZq#3j1NW!Wwwo9JO8kx3Ls;vz^Z z=cu8)Z&JJW(u1l|EqUv7ATc|izQ5YzVdRLPFZcS|!rjaQ?oo>Qt# z%}j%&JbE2h+1BsuAI=->MiTmwN6TGXtR-f829^7g=pT-z}-TRt92?@ZN=k?`t7J|bSQuw_Rh}2elLo? z;P(PC77CsL$fZs<|KK~vVRNFld5HKSmJ9}bJ`xLFnZ=6Nww42kqGb z_(#cjh_+Z%!Ui_!@yH2!49)rr9Y zO0P|5?}zq}sHzyEf@3$>ged+7O9Xp-D2}m#6NMRvTt*GgU$ylnPp#r{rTq+f4`i_a zq<-apfF+HOJ{C(B|Enf`Kmtmkicit3>5rJJ@HNeoJPzSC z@{VMowFQDB^b}K@FuajvQa(}}fl4dW8sU(VK=Fs2>-?BEw2n;EuVkRZBaF#`s}fBA zQHjZD*gX6Gsl+b0f`ONP3}liJ;-xbj^W|k&u-9Y8Z<1@G_+0qtup1(gkId)aey>_lu~XY$W zCv$eu{6hQ1-JHLLx@AHbR9>Y4y|!_wXp$j{La{X6)xxPo7aA-|y!sM<0@WC`M3k9u zddDHlgARXwdWA_J=P>~$qTUVFN;aX2?sq0XYb-yZg+~fvaib83`vqif!FLAWvu7aU zX)H-eo3 zyJ6A-X$s-!;oHY29;8zw(M7DRB%ip)`|rpuqhH(OYB;RvxXpP*)MS#@gh8z3gYlrR z9zNx3RAHI}NxapIBbvVPEdpQp8Lo6UmiH6-HY#W}&2u2u(*(ZBHKUWz8nhq4$-*gP zb?+ow*v??sLoClOy~7kgPk{4P5w^Zd5JiFai6&V2Aag$Dd(Uvtyyl;YFL-2<8iUC* zQ7YwhiSEIplnNpqtkVbsKo}x$!C1#yj(bVnRyJjf#N?MZtU?odiD{hx%eT5o8)v| zU6*BXhpa@k4;X$IJzPZ>#r=qnHFEan50^jyl!hSM4{dON%EqcJs8jvnjYyiRDzc=u zSbx%e=a-an^-2o)Ti3&}8&dH3ANt3mL?}8r)>tS9e0YBtm^cHwj$T){Pad7*L%&Si z-_Ju=P{iRKeM5qLCnprDv$vLoQ1V4V*jdOlM~p07wRya5<@Z!e=bmfD9zX z9}1(6ij7P?i0Td4#$Ny8&7@F@}r^W5bZBko#uHXc#!|Ke2O&u^{(C zX@A0sf)Z-=ZYebL4tj^%ls9aEL>$j(x8baUh7YnX6ghCwfsNSg$yySR2i~%xVhw&s zxU_TDjwT1x^Ha~Xyp<>P`uI`=@6Y4h-9>Xlx6%)t9Aemh>)qTdDlRA`BBqN6BQSGM zy<>ex;G7-}QR~ZxGHpD;v;LfL!a&gFGBXhpQD*H>w`CL0$Nz)wjQjjifa`bAj~+$eb!zxZ zwjtq??SmZC$0xGqX4)Z(6aeJl3$4{QkqO)G=bLZBx9gn&UWSC`ppuLYN7B6@{jB}? z0kp1oj5~2%B4Vl{o?yFrkNDOv!PW-BBJ($8gUF++)-a3Oem5eEmVe&ibNUhGgPvd; zV6rCLI{DuLsC#HRu!uCAnIf}0EV(qR9rtq-u#N*rtREh@_Arw9nEZ>IC`+xY$Q9Gu z&p$?o@wa|vl{X;#Lx;HP7TRr~p?e!2WAw{~-nX#1_Pc3Ot7MbfOF8+YW)|h_H`nZ1 z&-}z(=cHSj04SIpL+OfH7qLs%N@7ri$^#*YV^c=i6|?Y>1{;n1;uDu9+l5g-u)%Llqrmn|Jd z`*Y4RJwQ7iUZ`?`uEcwIkQKXydXrFpt8o$GQbE4ReU<^7@o?jk>igY=-`9gSshl7> zJ2o|^H0=`a{@~lR^GDxr(#LbS>bqXNPv(>CWk`NoEdlMWg<2&=_=L{P^v3WtjyK>T zvvzwUxLO%E?U}D`JQ)gh)7O*YlQ>?y4^wxyu3Ky`pa3LD2N7S!7z zg)lK^_Q@K4wa~@jc&o;+)#8l%{v2$;cQE-P+#{*47`)pi7)W^DbU|N?0$#6dS9qP& z?C@I!ObrGY4qI60m49l^0rNVB*WYFxdS!asSLa=RxxgVYF&$7>PcA<*n(F`2f8viG z{S?Zw^SbWktB@OAxVkP=SH18Uez@W5 z+f064_>QkbRlB15VayB0jP#dUkn@N0XuMS_d@?MUDsWpD-BWR@)o^^i zyMlwPJ1u^)es4<+e;1MdYQuLXrK2nh3B`!koC3m`SZlmk*A0l?4zXi*Yzlf6o5`3XPjkk`XsZ5M>k-)`AkVjQ?)h z?9k~VeEi@X&)r8Y1npQy%dYTn!EnaDU?GZn1v^1xc>3HZ$_5J)3$yS-KUeIr)u3|l z%@3djUU~3P(_^4wz+?{}yl1+o_R$w*#+fl`IsR@zrR|T8Jem2zJNKvv>o|$;S9mP0 zhjwbFutPX}>CAYho8yn)u=_G9HrQt=UKSG2n@W0_d;M;z_{Zghm^(F-F~J}_S3_Fm zZDyl`=IHFccM0(;6t`IBL-7Qga%YDFa^$d?3MijGV&bkAVSCX z9%dRXv2+;HO7x$iatmeNuH=XOj4LrGr`*Ki>&%MXp5pF7Xcu%iP6EeDs#Qkt?Kh*CXgrrQ;CV znM%O@7kLIm#4-O)*rS+*i8O=b?!TrXBxR9MX?eTl+pKMsjY|7#c>y9GCmm7=Oo<;t|W=d`!%ZU4Z=|$87N-rWIwqi z2^v$bJfD5iti1kqT;BP^E%*vm zUD3yPyK|y3Uwr~%D1<>Xu+FOpIg__s8nLBh&W^KiHrqERGO-0^AB*Tk!*c`ZRH{dR zD_0r3t9vPkJtkt05|;=q%56)7h40oB3`wbOle~^-+s=1q3Sd%OETJ2!9c|bqTe7c} zt=&0~d6@Tf*RFJrwpWr{NgXa5M>{>Q)$sqYwZe-xQzD<|*vM1qEH$}<86ZulWP=|x zaj(0>-sygSRP#+=BgclHD8fJVKp->uf~c{tPv|x_5Ap)H{>xUbOLqOL#t*PJ|D%iU zHAtrJ6+82(K3DKP&(P0V0o#>4U#xWUAqy+TLRq7^?qb^U?kU|evnJAqB$?3!Pkqj2 zHz9p3j{k;#HyYcS=H&z^-|G{(Em>7F()`_|0Ub;+&_Dg$5F9^zOe1ldytCpnv$bJN z<>MqtkgRxLV0{)=#3!nK9t%N`r5AASkiUl|v+iEqfw_DvMamO5(nhr;i`ELqoNT^u zM}C=f;@v7)=vC)CC}8XR2c9xJFM4wq)xw7GQP!)A7PYHLW534TlRM5z)lWCG$;mG! zV#uS(;EPyh??{0}9>R@bk9_>;DI#|KSClOk=cb>kDL}}5w}-4lNIk-}i>M0=`1st< z@4T7i7zILEmUM}0ae{}3e&kTK+-7S?b1PB?ZYTLt9sOQfb|t`c zUg=R9J2vp67Wg3c!EmqI2JpZ_$=|QVXuu~md(7$|BHP^da0=L!tZbgd1Z~c4XvG$xm(bgLEnqFGf zqo%h~F)D2J@V+49avRdt0ItxtpJo?XwdjQ2t%)nu1ZrwN^9pvO9*nm1AuP8&-*1VS zH~%9Rped|5VCwPN^p7l+K!yhXY|Iwt9?zo^*xen=SOXmFUXK$c_zX zqZxSsWeK9tsJddfvy4jSnmBZ%<@j3&2YAvIjI(-{k_uE|Tm{sH=|;c5T{C9@>oG%AHKO4!h zNrm!$a#6G={7|OqQf^P5tU(8X)PuWQrs{MCQbOS508CJZQ9cQv#?nSadc9baehS^Z za=QbnEMC`zRkwsL94zy$#~&~?QewY`NbJ?zdmV;4{qWyzvU84ObXar39 za(!?NpSJprzEShQnRd_dUU~ob=Um7tV%bUX@#HkI8n|_jT{^M7@8Sw#qI=Z$$zQm+ z(^SoMi~bK$Zxt5T)-`PhcL?t8PLM$31a}DT1PK=0-QC?GxVyW%dvHlZ(P-ur$2 z|BS=t>e*|JS#?*9-({eIvG%f}HAObCgsz#N;rOk{2{NeM0V}B&MWiJ;CU+(2Lg`x2KGOjEu2wJJ@isqIYfDeaP$i4p|=G+ ze?1sGfF$FdvL?_~>_P?ook?uD7i$?XWv@ihWc;MOSyb-~;x|6VaC-NLn;g*iHY#p~^RER_BzFTaRwe+@VhUj;T#}@&pn!UT0*-$?Y=# z`=g=%#qzsqmW<;93GjC@mc*W+SWHA()r$w*nCCM0to42|)?>&$*D_-A&LoYa#^hkD(VcZhDG!ZeDSe+SY_Z zxh_zN#CU$A|4)vxl4XN}g5r=mUs6cuo9z8Gi2-X#s~Yft1NG-vYcuh!MX!Dicugisj71*f4?>T#^hKq>_|jizYw>o`HNf zVyY1<`tGGZ9}}Ha#PoAr&!@&k^Rrr$q@Ep0dzW?>1B+?^Yetq?%$yP%LW;t|jn5v6 zkjF>q)AK4arC)V>lP58Xb(R@X2a#0Ye%LCc&uLYA2M*I$=r~_og4}b=lFtQ@$+>Ww z0YtfHPMweEWOEUJK9FhzF`~o+Bhi63gGSVntWRGzQHOTbC|bbgLaM1#re9!wP1ZxG z)K-nBE*df~2)_csfFx3cF z)9=A6q_|N+z<>R#DhfaXM7TM^Fh6rz5vD(OF@2YFsY_x}IAk*lsvs*`c8@8recMgI z!y_wQy@*G&vK0t{s{e@X?hcZpkj%t$)k&7d2X4scQ@8szMXtCfXs)YIgw`3zwiUa) zosLV4Ni!D<{BUO6Aj#JEmcuyF;eC`*LlAdP0PCtEHeA~=nPVhgs)LEow41y$f+H3% zrS%;l3D$JZx6mhQ=ZM}!1ED)!Oer7heV6E1V*8?F^Dv!`J9kelO1C`tUqfwh0BWTZ z0lmlz1+&tB&fkfd+TYRT8i`k{M8Cc+i?t?JQ`xM8r92(|qz4k9n{^T_fL=lSB7iW` z!(OwK+X@>y2w$a4eCe{V++Uc81;Z@Yv)lz$_Kf3Q_X~{d->iBDk>9=romo+Uvc!RW zYb-HcQzB^#-ufS~_>KoXZSjAJ|9Ho|60^H{=JEtHp4a^TbTo%P=cp{_W-yC|eL4ba zGh}l00kn=si%-)_2s5%()EqT4w6i3TmGDa|U&&BxPS3EbVF11C-xz;1u8`U1(5}Z~ zM~N=xeyhTjlgzN-*5*_|hc=MzhWs(~gDT+r6Wg%ZjJ3566c`!<6Dw6>uN2+ zfu3S(36hVYuLg{9$EX~tNBFa|Kn(83{cL|fWz&Xd4TqP{)|X?iG)pO1;%W*)gMOLS z$AYEmTXtzNd9sZM0zz@IFsxCL_5Bpc56;HW-LI;Tm|RBfjyZ|4N%Q69MR%d&E@!Zz zxm9C$qh5uxQS?&PupNPjZ$wTcj4ROro$((uf2nR3$d!z|@F17H(RLSxg-iQ1;Wv78 zz5Ez+=l+78F=;WmbnanfOJu!_y3=mqj`uH*9ErT*r3B{jfrfX#^;6iF2}ecPhKPGa z-ZE_~e|}xmR8Gl>#2Ijc*CR?vO_i7*H!eAA*W0F8{dWCqm|Wid2{1^0Vjhwy>q}{T zc3Uia`($@yhKQM}8(JI&=i!V9h8o=R?BrOFaDe>mB`f3p#p(+2CGKGD7HOD5knrjz z*S1u3ok3Au_oAI*ifqJ%MUVA5-$Vs*!BXt=i2JVTpITSCN32I=1`z%aF8vbwuLCi>f!`k|rP(-`8u)ziP9$qPgKj0}W97u~6mi4}p=i!P9z0`@*rx#sO@4@qv%|-Ot%4+HFiIR^T-j{ zk^WbVaD@eS9v=o+We)6)hbT!A^TIj|#{{m(U{WsHiFo6v)qYv$MAYUBO8nhk3D5rH zl=of(K1!OxbkeuhjSfMAh7UiERL2?HaS^;XI~$2|-7Li_2l>bI!Z}>Wt}KZ4shkt6 z0(`SDesKRtJK%KMCVqVPqo3Tcm5vGB@0BHx9raOCDQrm`JRWv=Je>8ex7}alawY?b zTfrf>WJoV0ZY*2w^Yih})0KhDBucF%rwi!~>sauZz6OaH2ij3=(GwEd3o0Hx#sMN% ze9(ga5cl+L0vgC}63G*6{TLPL#I5b(VKj5}Z8TA$55sgbSu)&+5u3?-;|M9?TXPD9 zQc@4zJLs6jY2yNqe6Q>00`?a_EV1y_mt;ar0f)q?AYT8yYFAkx}1HEhZngK$^#TB~dv`_^c0A}}^ zF3NXexZ^o2>=KY^ahp(STicEsK^&_12;Cg=i$rz$<~(c@$g7q1N=(o&P^8fxq3=dI z@m$67$}_j$e>jHjLb-^T)PoY2sF6Bi<+o}oB|Mi;XAx)2(ebi^9gIngBjdn6;Ud+1;%Ok}H4ClFGpFK)mhjq@5B%dtod zdndX?g;H%kBt86~vX{hf=$5W=S6=bVo%Zq168GHJp+pgv+ht;{r9^>^={g!tK6{Rf zBy43wqDTDnhr8X$P$bDc!DnYb{&x@&fWKijq-Ybn;TU7l%{u!QWDgC8Ql9#be5`q z=(kZ4J*W?H#GO@%$iZyRR-W0`nJyR_l*n z0w$v6&o9^4boe{RR3QOR2EGM<;uf&tPrO?u-$>f0-#T>s&jq0XY3v~uyoHswn0ImVq8Yiss?8a0a_22t4JjrkexU&D8bJdOKgCZFr=*NytyMoD0KWY1W%W1Ux! z=@J0#l%ubXhYAhU)I>%Xxm1y#rI39MijfHw^Bo$cYY5<{IdG$I+NPAu`JW|ASr?Qr zUM#4(a%%&OP`xo@Jrus9k`$wLTYxP+{gDqBqKNNM)XE&Ph(I^nqkBy)G)5{Bg{YF# zr+KCF(x?(hI5crm3hU>`Ynj&f9R&QyjfsTw#*=@>qmmk71;yJ3j}Ai!WH8AOZ<&-A z^jXR8*35(yODwE=0pj~C9d?=X&<;%OfIs@t{pgJJ-m3?)LsE>$S~+w!v~Oe#Jv5-} zi1Obc!Tq#apDwIzsE14ObRX9O0Y_(6r z;iz&sQkR+a=vE@R(?rla=H0SP< zrUNl0;UFKo26;4A+Q9KR^+&wgJ4wd|{8XGzqOkjOSUNkSc~0&l9%2rch{`(S_wLtH z4a5yMrBB!>1X-W3&=1IB#+3G$@@_UXvm~+wo!&DVSq-Ye5)LmthV7_YRjmZ?)Wr+q z94{Y}UYYCY7bsL;(PuTnfx170q2jo43)hcdbl>g-@ilU{(*|Q7+Gu1CHD6W<^dFz^ z*XWtdmH1s%ov{{U#Mc409z(O-%{{9sXKXEx7}9Z$JHuLb*#IDuJPx9A-IC_|nl!U~c)w3;@E zaFN>sWG9jI&}ogPj5M*X7&6qv<4rDCJB*Iwbz%UCipw%}v}v%*vJ|ega*gpbT>`QB zFT>fXdu{0JPC28gZtX9aR+iRYMHy>fd%x0fq(1w3S3|Q}yzypRS_0PnmwS<+K2at6 zKky8(B*Ep0CB1(=Mdu2aO}o*Zy3c>^-7~3NSD9a3#TTA2>Qzc-uE18GT~XPGTGeZ3 zV}fsf^hRkU5=0p$j`O+3F$)g+DHTnRsv`IYE2-SVBkTzPG z(u(W!1f9pcAp|Y-?%YRr994LT$z#C=~8SVhW#Mnvjz7(&@ zjn(`4*RXaw2wmS!sRBC+#9ir6Rs3$oRk+gboB~b1SHO}`wiycnh$GZ~*6ud;(@OWE z4U@-f`R7gBGVPxQN&>;k)ZT*>MHAG61rPy|c9zuN!7tMh)08*m zeFDwGXh4j>&jlszo`?R}d3@S|w1t&j{NN1Uk@Hm4MP^q{ z`aagHcKD3B-DbW(M><2~Th~oS(RyZwXTgo3ZP0Xl zT1!_lLB|*Hoeb_JsG>5^)}aHK=n-YUd#|jt$#lfO&5^GR-SnVXYHfTT#JY1_^Im96 zK$y{#NhOgP_vV5B!EnU0v4%}v!YUMZ*MF*bZH+SFQ=EOnWXcm`^5Xf6Um1g8Psd~z zCJw;%v*75CgOIY+V~B4iIR5s9oy{iqFxvuLRr0CrC&w8u^S*Y&x3HuKi<(Q!Ip=Qx+!{Gf2nGOjd;R}8be&hH<`&@iiH<##rALhNtBAZ@NWXk< z^n&qUE9B%0m}{q~ecMcaC4OIWfPdRlp&${66G5dNv?3tG<#W|4e$xap2x$?*5AU(} zn0B_-d_BN1K-96J?S*~eX(hN4J8``AJysk}t5*T6`EZ)7xR7cM6fHLmZPVC^otVjb z@Vfc9sy^=RjZDlc)4LWNBVsRA0FTsozJ?N^`aPhv_e#Ae7iMGHDpJ8f_%s%*+2KX= zr3s^M z)5PX2ePxDm5F=nU5deh6%~#CvHjT@nyv`y!sIF5kk1E3eHdW(~nMaj3dvr@A3yRVH z&uNkC8c4uYk*4u|U>U}UOB8Uxa-x@?96!<7b&w)CbyDy{@^6cKsLYfmEMfFN;;M2s zx!xk%4Vt=7W7g{v{TV|jK>fqtMK%lw(#y`^QbQ!=kv_o^(+jxFGBcTfI9giWjQCmZ zsM*>WmFS~onQaE1?VfQ!Zt7o=e3e$l9yk=~r$QVx*^Z0G9)-Ay)tW#D7P*V9%znJSV!)LBV1!>$o{I zYV+>68$o)3NdO(ZLL${z_l2;+k0ecVfP$mtmO=|ww>D8X_Dbl@hPx>w;2yHT>J1h6 z$SSBXtXQa4Y0h-+$}iGAz}YP$xlRHI2D8+L87G_$LI6`f3vL``ougJZ0rZ8U!gB+) zuHs;gvJ?%e6aqM95|sPrX>D^RH)OkaN)Mu-$W6`Z(m8&=DtC!o?C=hagdXdZ^*E4g zTC#mE&kP>5^WH8(E1s*eu852x8C-$==ad2|@4tZ@UQ4`HBNW9l`maGYpeH^doCeGK z(y-=Dc>7gb><0J=Tmj>+mRe&L#UpacPQCoB%nY1@6MGZW+)F|$2*AaS+5pMi8SK}4 zaRqH;*7I$R%AhzU`mP9B*SGhSA`{DTAvC_vD4l)K4kV)m`>Ltl=k0*^c0pV|E6bgu z08*G>h@5P|gz&U*Ekluv(zQ5tT9_~@8YS|g#y_#X@`68gK*0_Oz;E%Ta)!H+`EJW( za164@pe4;e9TB{T`hRx_bYNpk=U( z5mlP8z~U>dY1qbxfy@m%uXb4NT^KDBpobLH>}m8R?2=}0llwM!YSV^N7d7U@{_Mx1mnVbUrnAR9 z?#&1Hns*&hhkx#W(@QPUv`3w|J1OR@I_`ICI;&`E2z*&+x#30RmB-ju+FPVCP$qpb z2s;>f^hQ+-RYZG9q=VHP&etBmqFeRJMh1n`?7e0hGo4KW>~Szldn+Rlgi#@hY&N?g z0qU?uY;N8WYfE38BUJC%5qAoV?_@& zPk&`gEzx-LZ(j7)^RZuf0?{97&a*qD<00}JQSa76X4y#d#e z>p-i)T)|l3{K(PWEPFw-e6oa2rOnb7<%3YhL_f@`0@<^&;W9+RF8OS<-2w}GG zKg{XN2`d@g)Qbaq`lsU6paf}&zO1$`C_q*>bP83CR5CO`o;C9^yue{`%xbl8$aPK{ zovv2sHtz7sZjJ7Hh^-jNK$CiH`H7Ze6rY=9t%yd^UBpXA4;h61c*%a4)_FV+(O2$R z4fy^B+i}DTV3M^NjB_zINle<5>49nB|JlbAYR@J^a%}TDt9kaNGr@x1mdQ83YH+@jgMp#?u8p>VuCC*;EutSuEPt( zQo#o-@t8TmVnm*JaN-ncRPWTx9eOK7gg@$&!jF~bD`VmUKZA~`Fc4@EP*oXWvfpSo z4=f&*etSSW#Jo!Lj#tQ@meQXn(?hX!`DKkF0b5f-Cd9PGZ83q3gF}H!3~1~zmJ^xO zBl#CoREQ4Un}}v!_lH0%qg$AVDCshVIUgnm;Y$SOp{RIeH$A16u%6hj))+iLgJo0u zth5Y-SW3xHraLQX`e7MsrK7_Ur{W>*Y+QGCLE96IQ$zG%!@Y*w>qYRo?XMz8N~e57 z@9u!VKs`07AvQzw85)rFby_pDj`MBmoUeO4b=r8&s-V<&V)_+r`@Yaj+LBvMp85bM zN^Z#no*03RUl8m57d~W1Gjj07G;(0gX7_n_7p~BLu4sDzQPl7K9FWh-(FMdtzB8Yc2TJoN;eM?}|>$SyiLisLqA zNH=dBq`f5q{(ibBp@%Lm_{|J#JSB4#ulRjQr$987Fo_j2fQ^(NY#j4rkMP^haWPw~ zry%jZ_PD9b1GyP6JxW= zdA9>9pZj{coVl~02BM&TH=J-a7P-xa*HqOqneHR4nr!|g0&l`C6{{k`kz?+^H!8bN zNi~v`Xk$2@@xp*-%qCaHT^-2W2$vijA44(*>&@HXbXRQ-7 zvE=Vur(>x{wmg~Ds||oKvBf^}1^!VV5b67@9{e~<8T{o`>rZ65*E4?1Ett}TIN6PX zE4tvNq2%T&HANJVfFHDt%T-6{qau2UYN2n3xkJXnUnK;2b|j}qXq!4UP$PkwNs?K? zBsuxX%hQ>VfMjlP8(`6?;E1tI^icjS0fSrjBr5U>8bpU2Usd)uESeS7`!+5>FpqYd zfiD!y%|V}|tgIiCtw*N%;QRkrfNZ5SO`9BPQ{Y-i zllFwWQHBSopIIcL5YaH)UCzcCv{R;<%h1apzsuk84(S{s3SBg+QlhY!d6Q+3%lhQ? zymjLVjtx|sJQfAX-a=J!()y+x@#E;FNZ(&Q?NkBrz!+l1rc>FHaePB8y2D!9(K4&J zasN@)PkS%@8YGd%NhdJB_U#HUzUI5 zZ1UDjK)je(?z7+cb8o5SN5m;Qb)gXIe4+&As66*)raZ4$tjqC(!Ix!(E<>(a@r%mB+>KZ{SCkYr(wu2LxKlP-Fz60-Gqu1?g^bqy1)tzc z3$4ZRqTw2)qau38MOK4E3TWpDca)N zn#fXm!%l}CSF3y$%ot{g6!=|T#w)MFk~;RoPth{?@prjtaU1ofsIdXImk`?dRB_RW zac2%)mRS@*lJ$l6Ey>gQ^n<6g4nb$<-5!6B+tat}r$!pX=q+JXTmaX!eO7)u<_fET zT~6PV*_fcs_*JmVu zWQ)Y;u81{aiNUMu02{(`HB)U?5o1TDe%oSmhl+~IH;lTw#1!Q1X4)|J|Mf+AO+Fo9 zTT|kc_F9^QX?`i7$J4HjEEbu}gwm6I&#Z~)7jM~+r3cZ56V)nJdjz@AKA-}YM}EqN zlUXN@6Uv%`vnZN&J-NBa%IosQTRl>|GA@FfB`lgj0^~2bjys6_>|!G8A5elRFN*`Y zncU>PhDc{fC0RN07#G!)Zw|oOpNKupv*DJPjn0=wOTOc%*M%#_%2j%A39NHS)r>oL zV;|JMw8SJx({oyzHY|_;bCRC9lPGi(Fv_paDRXqU>f3+9n5#njUX)+MNU&zu$>0C0 zCsa(@L+fL)q)^z=$LB&gCc&8hWaG^T%HbOh;ar_DNr636$f{Z5of4AC{ZroHu0|Df z;VG6;Mr0o`lmlrVPHG`$dJ+|iiQuysW#wF>szDvu%dm{4n>^Z9GTp)?8=7v;$>g6TG0uzLqrNQCHAJ&68p%nYeHftjznLQ6-`Ejiiw4awdfB> zvvUNMiF&Jg>0Cn(Rx^M6WZ;Hbx&$giobhRPpMgfy?2%R6U$b-u1TZXP`ETUxznA9% z+Nd-Na~@`|PP$UFF8%LCwO=Na!AotT>*dikIb!gJ=qn+EYOLHl;^=&kKFLgChb>rHb(?py1v`c9|GZB~?931zu3Zf|K63FZ? zTAYV<&|6Y}5AQ;?GbV6KM~18YfFKi+GB&WcZhE^zJqoSw)DFJMI--V~pLjBl^5j^a zEzRn1^*rM@4w?*F$CUCV3Fn1G#Yd&8Lj2gmuWMK#D`~AuQ%&4!vY)*cg+|X3Ac%Bb zLCVF(eHR}wOFiv&%vD&k&84r_)YzJpsU}7oSM0$e$7oGq_wx69ktO_!>}7TaH8Qla zbDv)!rusfMsddafnItL@IfFd|!z_YoIkwB?5-&94NTQLjeTemR(fZQ4AT|=tA$K#u zR%~>~Rrd|0C}tY<-Bt3*2j4U6+re#phzOKJYq?*mVdF1@z%1bkWa+p-M~weCz<=Y? zw|o38oo>=Jcq=X9!j4Q+T{F47RUk4r(V-&Y>HYZ5Fgp7fo#EV%L(*R{O2#Zf;d^?1wV20e5ul?T%OO0&cyRH zu`?Z0c@rsTG~=zS3UVTda1=BOI@qiC=Wu@%o+B%fSyz4?L5hZ7(r?$eJcj%w|WxHYLI3$v*Rg~mUJ>Wn{}od8C! zUb7p`F8cK1biaRqO9o}XLH>CKud2x&r$r$cp^&aw!%^TeES?Fa?v@?xst3nUNwNFy z>@AGxS@Ei+7n>WJarh4q#FuK`571VHguXU;`;jSb=~5-{HenW_AbT*g(1la7p&HH`7;-`$R20>jsdOU zv_JT=>TJa&=aOe(qmfW^iwLw^<1zc21ikjxcHZ%Nb=fg4(D=%fkW+v)S#L1h$@dGV z5ko0mn4ncQt%yqK=WiQ6x=b}clRnXUmlluH3*F86Y;@D`DZ<7QvrvQz{LvJ3W_73c z_)aY^8Mi=$Egs}pQ(ZvTRo5K-Dxrbh{X3aJqcyH>3}5|$&(S>F#Dg|ws79}c29&3p z^A_dX{5)C@f#~4Vp!iu#=ZP}ARkHX9qpoFhT)nR62LK$+ zor6b5bNq?E!`|0?D|s38Wq7xK5HKhkIvZtoU<%z|8NE_okx0CWvQXne(DA+?W3_uF z(6`E>`U)!PTS9S~*Ku=$ncM3#_NZK?XEJ8arRtW6OD%EHA?JM`8=)PuM+?&5qYctc zrkVcH*T~q!i!am6;YBEq#NkVt5i`aW{Ojie>z55d(F1s~(X1@K3JY)G$UP_(}r717Er_sD_EshM zKPRPiySw?9jTmO16EaX+71YHaJB8@ty09|JLiU*`Jtb_+z7hp%#8qg$nvO@o1L&AK zlV+L<1?D6#6%rFSwOSHdpOajc>gjkw9faNC>Ce2TTv!)4mZCojNo+vzn#)#Tqoibv za=&P#Md&l{OmwmraHS$O8+s5^1ZZ(XRp8)cpHr8xXt%ygWduuUmXr;;1s$;s|3H?H zWJU(hyYW%OB1rsHa73w|a1O0?VIJnKLUP8I#dBN}uPF!%ZK_1xseitOjpi>wfYPKT zZ48}gEZKH_NRkJoVrb<~l8f=~BFz3ovS*7-Hz46kDSyH!Yi8BHB#dVLc6qayXZ*V$ zNFq=H9B)p1*v=mjwQh~U>C@ER?Fh(%i@3O1DQOPQ60)o-g91XK0PV1;+KTu}H+A9y zaq8cSPd${fS=YC_@|YxByuo!m;Lg5(pJ~fgH(6Mklc4n#fRepo2{&fL{0JNw|Q_Pv& z!8zeMljy`jkozYyA-^Pn9wqywf-kdp1mk?89k{0fUPTO=Zj&+dRBeu|G3*Ge2(*b? z*bf?)w#>?KCDr@X_L`?8g8K!`oLZL74A@Ue05Rv0cW6D3P>Oq~wyIPaBNe?tbn39| zK=dBoRZ*)8F=WqEHu!&zx&4`tW(Q&d#FXqZu>l$h`kP7PQp2{8mx_zMp&T5}Wpk~F zv4uTaD5gPabf<@rMP@@>a@#LbN$_< zysNntwOQ>gm3u{Q|7o6>NhZv$PPc0$?5n_iAzAa@9YFM%-r^P2phef+W_ zRhkp29$OQYca9+e-F>b)lU+^P zO%fYU;|sz#{FVyAf|Z>EQ)Xu*5e}A@_*5!5$+*9;O*vAlZ7o8~NBCir4I-+%b#%r_ zcO!`e6uT#c^@CTN)<47Q#tPAlNTafZI5EO)N!wiBVku$(;H1U*ii!$?6@x9$%|l3; zN#_@Hkaq3EEPBXz735u86?jC<4P|*wQCNJ(?h-$AyYI>uB{8hQy zPV)|AP01|SBo)QSCKh}*xV)b1A+x>srHx=UhrI{3F-MhME?Z%oqmn4<*q;3vaihNV z^8#klw#byVpN%@O~pURigi|;fY)^jtVPg;I(b}E~5jmiSCOCr7~ zo^4V>++f@WPa1B1G}U%-Q|{n9#ik}}sLP;gn(;1-D%b#2Lu`{$LZu=O%UAY}%~`yJ?AdU%f11*C zHz`uOeV156sXvR|iU4g+HMxRi5$A>sOA~Ih*=DL$@a3Z21QfKgWc?0sh?*>QfEaZ@ zj90Aaoce>3JQCBVxI#kTxCUIR2s_W1*K7=HApC6}S-?yQk}XnokVKN|8d^WVK9y>g?{qBIUuLzL11R^_8%+UOe#fA4o zz#Sf*D}zGs#Hh_}hS4KSYp9uv*xC9!AI06Diz>>bXWf)BCVetigCf~&gc+G;0MuO|lI8$GRhKd@cU` z$4f7aY7_ymN6mv%vahDOuwfjxfQKb^PXA#rHTK143y18uV%ZATX#;y6lv;uxjl)}a z6sLRgi@_b%{Di-Nj7=R3cMUQqg0XWsi%pF7;7V|HM9!Lwdbx3Yh3b&_3w#t5%ULw| zHa1uwICg@Nm&}!Xt=-LlIqAxyJOpoKU5oM?Sr|k_kSulZYv4 zIHc&*{n7l`$gK+Tr+(5{Me>{0ZGtf2Kc7&p`Xt)f2gq}$#ta#!5~s=xcajpv1>&23 zpBn)Ntf3Ui9H~{kYTiy3_DH%ht6489Bcc^iz{3%Y_WATWBFvP{%M4V5kNVOLK`Zym zCm|aCRD-#;sefr=@UZyrJG?mgCd)3@Qc|q_;G2%i*L1c6`K(1+vXY&Si?R2M(?VNz zZjwz=+9lkrRC&%1im2{hhXbB?%Nk1Ta=R|yY+ee~Czn^{EFZ^XUlWcqT#C@kOOj_7 z7I$tKbv*w?ECNKXA3tU2HH3YL1A$blKXKx&OGlxqzON_kaWZ229mF?K7q^ ztQU=BB9#=E6Fx3k)oB`jj-z_Y0V`A%dGxVJugOQTX zHV~Sun-Z|MyPe*@pVcXw!C&0%Sg({FOkN0n?lvan-+JOxC3!{eRX~pqRv>An6c?8a z#KczD>tEKxs2s6y&-1fU1Yarh3_S&0Jrj&4H+ET%OFUk%10wv20FAjU)=2{EH1ag- zD;*tHXZ-7?YwiH_*&9J30;?Z+F@-v5RS?)a}(+$IQqeV)^^W*ZR z@quTW#I*!J$47pE(_SCClhtnIt+rnX97A4^>!Wq5Gk180Vsj)Km8z`~;Em-h`9loN3~M3bq8HCweLLm-EcS4SshTH$AZ=jC9ctis8)_75h|5#kx#$sQnvja z@)Pg-3Jv}k1desy~=gjhT z?0Yc|h*}{(wm{PF!%3ef!e~3=cz(`lOn(Y}9dbG$m#o+j47t%v#wYO85VF7A7(KYuUH~f^SIZ)cALag}8v;;@B03)LE0@!y z*@U<-QY%18(jz?2u9h3AizTTnk3&P640Ut(ljoJ91bMTG9U`I`w=p7m~|sz=?0IAY{34*;-6v47`^8tl6n8O`eZMlp7_kKqkcS;hyWC<)NX`+SH%! ztH8tD)h8SyDAHSJobSGlL`wSh4He2}_fsSu+m45h03!_B@T60Pk&d-UIL`!D|OK>-^q zyu33p5~@)7$45wlmLWQbxXd*B@t#l)pH+cT__FsP8#%^bgU|fI5eJC8>5ce^(UKo@ z0WjeuALD#hZL}X7-r+V}U_W|`Ii|~0^EcA%i^;yeo(ZFC8AE?cImEA7WH|LmMEcL-AA?yeh z<4woO2w{omd6mFnI2xCy@fi}pb074^smFZVe(zT-=HrLWw#sdZS2*IEjOeR$O-9$n`R0zNV@U&>G3IcZ_TQO2TmW370 zZ3wJQn!=AqPPtnGOC(6Iy#E;8YW%Uc%dPCeB0Hr_zqyONGiDPaWrPcP$?IDuYz{id z@XwkEH|jfEE~H9ONESSHY;B4>-VwXlWQ2&cC@Ng%4~l2`u{F1hV6j_d*!Cq#><87% zTd-~iP89I(c}E7$5ADcmGRbDt5|!a-|JZwmXCUc|*A7lZQ~nNjGcn~j5C>O6JXX=h z*}s!s#auO}LZ@Z=COi$Z5N!pn3M9n1-c20P{Y1>)Ergom7)|alZ&c5UE}R_M@^|lU zP}YIThykMom6n}pBb-qH_kjz1bDZVz&QL0^2{|(UlS9s3+y@&9J?Cg&!4X}_j_g8q zA`kBHJ%P<@qN0j>Z_*N?-HiBC)^C`7K>;T4(Vb+v>}v z7OJYFE0qi4fh`hN=#6&DIOldo`SWf=_15{#@U1?WG?FL`Q(Srs*}17!zS{yD3J18z zIY*aOSF(}U)`cI{$uYW(Ly!~P1p`nkQAEnwb&<9G5?3&+1pIiyMyg6R!)2Amf$0rX z*8{hR7gDDokO!XHB4Rf}0AzemFtp~Unz8oMMCu3a0lfpHaO*QQjG;U-N_4ARj|OyzAG&Q0C$K$RigYg z6#C3kh2iKkG^r%ywU8YY)y&K!K>HK5aoC4NcOT|VXpApMYMkCxdF@T$3at|Ae8KZejsw~X z3sFfCS+4+n5rqOGhf)^2zQXC&`MC<4A&U!sA%r4O5Ix=+c&LAOv&HcOuXI(@Z*30i z6*i>?MiEO+m-SDBQ)8`69ST20e*KyeMzt&*UBmZ$RkO*hu<`5J2WIoP^jLxEgrlx^qc0f&!=>u6K6vDduA>I6sws66em-9 zduB)iywATelLs~8#Rqu1Ui1n)|9m|(_G2O)`f}v~M{vDfnaH;+My4LvmR)Q}{}xBT zD#VLBJ}gf7BO<1nEYy>x$omBbNW0R|o`EZ^p-)oD%hHCH3rX5dpgP|`HKz&8w`ZeP zn{RC_m^JQ#1f=C_g8m{U-=prmz*LOcuXJ_e@fx`HYj%_s>Ul!hhUG-s)PK2r&s%4k zcOfcENK>NrYW|@r9Ps^^;oe^Q-0}ILhJ>^0*q^^^+_#6Q{S2H=E|(a?h4>z?%j)Gl z_HI-CK>kugZxA)Md=J>4(zXH{9h)X#97}^8&_|5cgMuPkxMu*8f-lvoq== zBH|-X+;8Vg9wY+y0LitrHSM)|kEZ39>I9MY9`x}FHv^zrYhx^0G_B>x%Z4rXXd96u z8tfJ!%ct;2-IjV|?K`$&aK&*H7oYe_^b&^7K_+4xB^q#a^RF|r1x;mz?N~Oa7MfHZ zEHS4cVF9}XXM=VWi@|&cv;P;%-=fH0r9a^<@s_z^MJ%5wf>H%$2X zA--;9Tk#2i7*~*H6miGo=A$+*hnA<~WoqlCMyqg-H`+(=b6Aq&QN@lQUF2w+1g8I@ zQ+xcD&xjirMpR zC@Gkirs(kSc+5|ese*RbBOd-lf?3Vu(|@*cn}u`{NOCX1opS z`}p`9O?9!U7rV!4nFR`{w23f+G`7lhx}^tMr9kR|4A_pL-1EqkoGpin(>>})m{K$g zL=|yV`phUUo7p9Wqw3W;scqK7I;?MUMwY52trETy>F(_Q?X%vKw&c0sj4Y1r!rz@X z0Y1Wd$!LrzOjFN$b8-b83n3Sz)e*(%9J4n9YoQSPck}5;w<*-ttFGz#y2^M1e-Mzk z5bK^(=M!BmKYq`^Q_EyjQr*sJXydjK7a2yn1|<@3vIm=f6}KBYoRt5&8wABQE(#f_ zOp!$g^qwFY$F(PWL>8>~+vg7}hF3i8@8Oq>=BBQr07cX}F6Hkl&zVpT5t$LD6Ko$2 z%g7`m~6^4AS$vHtSX1gZB}>xwlZ63DY8m8&YZhQ#WELxMtMXqMV__i%^tpqK+ zHTxitM<|75o7C?WpW_8>uf?ZZCqD%j;tXgF;9;^ck zTE4Tv7MAx^VASZ15uIUKo3joX_6!Q^=K#~1%(2h!Oh~#cL&~db|Bt9|Y>%rA+l?n` zY))+3NgF4P-KcS6+h~%;w%XW6V^27-ZQJUe=Y97+_Lubs*1gts-lwh)M9@bj$mSa* zr6Ryt2l#Bcu(@r)%gpbyD2~SHusqQ@8cQdX>7&>5q)!I&GN4+OP8ZQ`=CmWX&F)sl zg0gY;0s?#M|4A!_W@VK|b8*z_z!5dR=3zWjCa#+ZC9(b_65g@Kb4yz2SkuGva8)0gk zNZe<=zJA?RbS)J;126j!$4-E#qUGkZ(h`(z|4-;WxT(7B?1JxJ^DOn^lf!_{ZS&kG zq8=cR)wtSdL1!fNp2Ob0?09(UiF|09dr7xyKpVzVdaPk z=uy;B#F6mPhC^Vudh;34zz*HS#G{-ihd@{RDU_^hm^rPQm8;*GE;{FHm|HL{U}#Z&A7 zy*DS)Z0=CRW1iHzsgJy~G(Pjmu{79x?c;(|=88b%tFyhO4hCYNFJ*d6;O_lgG$_D; z%|^I3_c?I1)tO4N%X5-1sVT%-bK9f73=QNg;!ZX*CBe`iJq9X1scIZ5YphMI-dajp5TlSfnJt-7`z=OZn z%DCK$`O97mp(JU$UOe`6+W1|<+mh*R>kT&Rc1VO2&|qMJ(#v%ddfezjqOJDjM_f?$ zPLqv!Q1$^v6?3DkLUT`vWVEeoOSJg}Rh^>A%Q&ob-IK6jfLg3Z` z9)!e*7Cd+WyFHQ&edW6(v-Lg!wbcD!`gHRl?5?=MfGgc(`iqUy@klslbT}#aSC|dp z`7aKz1U=8@{k`C2#qB{2V1#o==(_8x3Hvk!N6`p{WM@chH#LAm!w9=7Kh~+?*JdIq z9UDp|)4ARb>)g0__)^F;8)^6dfegK8HM3PA&dd9E=CCH?F|ATzKcW>i^<`N3>%aFW zM7w31k-_)^5Hr1+=~ho5i4S8;Yde)jIyp;cOd-E97kHQ+ z^!BT3Z;F{eY{*}EgJDY9;&N()#Utx5HWkW+@nz29A_QG;^uPGJZX(o1vHBm1EA^5g z+uB#6tL$2wGm3Hk>m(WwxM3@onC<@e>Vs$;LBb1fks%Z@c`EbTSy1}WgfRuMZ!A0$ zn}7N(k5?cO*;wNeknptQ8g*DnI=;qbHjm2_d_tCJvGc)*Mv7O}KbAg>KTr5+&$Yt$ zXCBIf0~K)i#HpO#b7&mV*5hzi(oJi&f>~8)K?03?qoR|-YfD8pkjm`}So?lq%HO_g zW2HcKg$(V!vB}H_7ga4V<_4{j_dU@8qJAmQ)L#~9SlVffH<;B-qa)pC_qaV75qbrq+ zR>|^QGJ?u|cY^G&kj%mk1!tv~Z^r{lxR<4+Bk3XB?mm#~}At;Yh+< zl4u8@HTYVnmNczUU^aUodOP^k4qcxCJx%tE(6T;poovMx z>*U>2Kcu#!+ou?Qz{n79+AaILI;1&*N@sz&XnH?tA23li?zkdcyMj9ud$`=Db98c+ z`bp>QQr){NBqL5$R{-+=I`dm_2#1~Bj<-1x0yzIZa4;Xf8i4G^(s)?=dCzcqWI5&M zBOJrzjDB2qs4Sa;#MNMJzY*LqDo9^$j}g2CTT$9U>%J3b+?E@-8%+HvV|%IrMy2F9 z%B@BS?w{4=8LwvtKiiEOSd)U|^H4!CsjFN<=`I0`v!RUoHxBIX@IS+$Z#s+3P*Hh@j#HYyOU1iWDuSCE$MgFVye)yd7(vQuZPFdZ4-9YMRe3212VX z@1lPZLbP+ZM)5z(e>NM_MUx>(-GuT2>HJ(h?1XV9;{R-nS#Ugexp!EgA=V7WyA4n` zD7`mMF`+rW^Z<8-95gHSvOOgZ(29w{XlY^U{3MKASrif@M+j&js7H9m-C7`6_GfM- z9a(XY7_~gq<`4LK{yF2|{u+hi$Cf4BxE-?A^VGLUHp&w0nw!+C?E1mlWXyTGA_qlh z_^rmeVl{f)kCh9X9MiFiwrjZFZg}9K|B2tzbC0;LM4ADNDu2j ztie8(PxjTcljZevWdD2XWDt)v`9#Tstl*s{NX5Bie^5tR5pF6;Lytn3WzKL5)U%B1Oakx~fjxlGdf zqgnpF1!|@FO$m6^&mqkU>t88|jN*eUteq>`4}~jCdzm$I2?vt9Vxtr{8FB)Vyy)gV zn{565Q!kE|7)8V>8oyxJSma9cV8)U2xRqoAq+<*1lIgZm>u&KTPz9|Fwj5=eEjo8C z;b8Pkav)gnS|mr_?s;-2H7(%QHu7|T&sIA-|JUfIQH_abK@=ZCT~XdeM@j;7>mb#k z4g_!!bkNyT_RLB9v1k}l877yc9$e8rRaU~JoBfuEFYFE-GrZK9 z9G&~)FDSEkdM+~a!He;9Q`d$*H^=uYkYr;mX_UhH3LoR;9)@y41drh~%2yY7GsH9B ztlGSU%-8Io+eBU6Q9g0Wzx#>k!>ZMhEs5)^IEqB^BPpmY%Q=k{Jn9F#{R|Rd{(^8A z{TgN0W3!_bq1TCsutCK$?r_!>6j2``3hRvAf?f7H-}GVIQC$tJu29HgWfGqhD~$vt z(Tw@vDS*rXBjzyw0rFoA53#h=KfLoMBSA~||0cPdN9!RkdnD4TQ#|&{@&2t%+=98q z*!a>hanF0#*DVCcW$ge2xogbH&*owOI$i!UlkUKSO(cGfUCH6Wst~Q+2Ns9AeYPnVfcdCdU#+UxD2%{J?@s~eT2yf~(6W7A zX}}lejJ{j{2XHy?g$G)|pd5I5WBelemiSW8dBEd?!s?iMbS;(aI!VNv4gJYoNLGp1 zD-%PJ8>cq^H!kdFzE>`+*|!X?udvR7hDrKw1)Cgbc^*i6z<}Oa-9w#!>iw;^3mVlY zU@?i;g3W%rO@1q;ZJczae{6w4&p*Kg(FE5b+|<-l1Rfq=7NT{>A6Z$tSmGt4#CMye zo0XeOKNjx>NtLme1v*}ZH%oU1ZBh@hqpq0)ckYw#)hr#@Drcu&el|Vhrv$h<>WV^W zuW^fhcV1>;8mP^V9|+)K5!p`0ry)EdzP-Dd+{GEY?LKLI7^q?9;OIEO=j-zM_$-{E zgJOY0t)41U{pUHsJ0nodb66x)E9Rc^##w*D>CF22Y2U*qB;nN$TZHL zhWilDY&MBIYAjb=!vmh}y}7wz5fQSQW{tJ3J6>~&y3|LIe}BDEc|1N&VlENUyqR~>vVt5+D1 zTzY%v`R<(FUp9R`rO>5=TV-+m0wjH*|Nr~`H$_`E%iTliaP|^#D2`UTL(e?Y8y+_k z%orjbTTA{A3Pi;58D=juKtP@T_SpMRyDjv7$39u{>B=6tKRa;#U?jmuR#MI?H&hGj zZlQ4$20qUJ@28lO*70bS=R_D$(tlG?Uw&^1lnF-q{TuwlR`_F;Iq+R9Ug*uiR=)!* z7H)ZH3fz()!Vyu{w%jMcWFLVCgXBV2H(xWz$SR_;Hjv^&hAd;YR!_>gEPc+SgclNfX3ts4wI7k;rtV*ZPbq|O@F6K%6CNn3ss_O6$qi`CBYE2m^q#|ARa^|zBP z5wJ`92^sUh`w;9AAnW`}tudBZPtxT5`~ce}!pCbYVPa6c!u_vsqmm>C*%}|A*7Rv; zTwV*U6B3dY6cVb{GZ}j^%m82eIEGH!18Bd96Jd@c`?3wbG??^})(fOGeo=9Ue6_pU zd=B*-NYCG?Qn-x~YwRe+&n0 z_{8UnGUm;VU+MGmx7YGkX{#TjcHK?6b*^6Co1JzLaOBKYG)B`^`6qn)gAFQc@REG} zrX0A2dMjQKYMtdrnKg@$S#c54-5OIK$<8!eZeogX~{D!6s*NGtx5xAuC2O>O-Qb)ajqHXv;8 zZfc$1*^;>U=#5g4khfd%zKo%rdqAN6eY zCfmJT&?Vi3+5D7S#l2XffOfXUTcZe8YhmtOML0m{Q^_j$4LD9>Q##QP=w(6vohNy4 zBBGUbWxK;x=gn~LU{TaDeqlmPuP2yPPe8^NzaF6PL~^>@@~~MC5b^JJ(Wh@XlApsJ z;jP&v&G&n~1fJYRCi>~wBL+vGQ;X==dPVit4ZUw)Tl;Gtp9~>}FRyM@QPA40ehYAJ zQOpnDbI|@WId|#3AH{=&l$|((HQhjUMxPt!+os_o??CB5bV>heD0A4gk&A0iV zjsecrJPe*;GSxevV&9n%*);#M0I_sm12kpCv&iM~TQLvYUJhZnl~pXS36t+ieaYq5 zlSjuT^)ZPlT%Jl;G<2-itl8?C|89g?Zd>(rz*B=_&TzVx27DIzU{9-ygmK+MT2)@l zzldqmw44BC?OAnZpR6; zQz2zBI4^|&yr$*tRwbA{{ni^9%FDR6;z#|ML&T2v#9uFOAJeOLVCig4%N^>~`b#w< zoRN)95sk<4s15FbT~CBPxE}g%qw=4BpKf(*kxfLoEic0$J?vB^)3}+y2i4;rl7!)B z6!~$MbfHI?{12!2i($cZR@;R!`E%!PG>I?DhbZgWcGaK$LOU3{nR)a9q5iERn`+fn z&2Jl1qeB@IcDCq0W1IO9TG$*I0cp(mwO{MPo<==8PYqG111<8@>#s<=di$hYI`4Vw zY(-Yn!V-D)zO9&(-{nqeC^`A=kagz2n@59e`Y6byaCyBeu;0M;RJ60?g!o~BX>PAWeYA$R`DiGwJ=l-X=wI2P50lbyu9~WR8hM}18-v72Bv(xy#wXUe74)F;t5+WesTVgpZiyO zOc-*mVe02|Yh+m|IjSWupIw{n$LJe`f*5>(`FgvnuBFV3k=Q}g6E>LdKYqC9Y>4iz z+WXp6y}w6U3UHGtRF&CMv#YpAU#HV_9r^^44j;eUY*`1+wXh4p!=~mwg=VweD6FmV z%pHnQoVj@T6P(IKK8G`N1wRg6e6B7$Utte@?j6Xxhm6MQ;V5XlSp0zX9S;H1;TgBA!iTaR*PW3JHxc~> ze4e!El7Sy4ulJ8z?s=X+ehc4(ZeD*9vB12}d#pIp*gqkYj02avhvm zPun>Rs_^8Hd*C61oAK`++VhFaX0vAX>{|9JlMUnAAgqUipS-VMba#mY7LoanXg}y+ zBYX;98&MCnV|`XFo1<97xfzE0wiEYP7|MP~Cos$!i4_^|-14|Hjop(NS{hW>_mpeP zWnSa)(8dW{{(vcQ-9NFR!D-X1t@GF_Lj?a^-u*-fX38}>-~A%@R9kaUjx^nNsq9@m z7K`m4*PUjjhBx0IhEBM|kO}DUPk<6oX2Xbg+j@rXJUp={aGJIA#9_LTGEHOp$f&(? zhx0*l>E)ZIpYkxKee?yeh|GC57*D#O> zj4QHKm4j@O{hmgYxyQAywC>|ITOAWH^mW-2$dm8#6epu!Lt9Q*Va8U#d zYd#V2Z*#_@ejG@|?qV@mATQGV%0n`8pogqqyH-fowWO;# z_$16JN(g74CVPxJl6;Pa#o)G9sY!dUU7bD1)u#XHKsbpaRC>ms$`}y)o?DnGVSwi} zAoBIlKkF7HpMehGT%riy?PN2zsG7KaDyxkoVJVZApSmaJp2DmhJ2_J>iL7IQuJoNz zInkztT)twXyz7x%CL2?;IpraKc0IkPe~wG?vgx2#J$L84q6ep4I04r8st#^LcK&Zsk>{Y955C^bvm-rx#g52Z^|7R-ZZA$=VI8q`M~eg_3Th@r)Q6v znqxT?cSktdY6Amz%8M-JzDCG}qYwPjPr^8KFfWU))Dxo?4(nFd#SLLGzKs zf4niRbeUK#GM))#cZ@>H_lL(2X1c2ba>um@Ts$i)Mf;zVMGMyUVT+u`N_po?B;nDO zhLs(P!5?WVdWB%m4LW@#pTfWZ@095-NAaJ&{)e;FNe6^& zUe~_kUJH*D3txbx{Ic~E3;hMgZPK4^1ggDc7rPOH8XRjpS0_drFhIS$bOMUOU^2g< z5Ap{q0-b?xN9RW8{oz-R1-Pr=RGUKCW}kUeMwf3s(}kv*@)bDhiX0FybVk00TB_o7 zc4i&vM5S5%0Vz8y%*R>=n3TBG#Xr}>lt*RW?OHy^U^sKZkW4tW15DuU95dUS+h{Xa}yg#(ir|~ zsB(4pEUET!62zvJOO2ME{eEY0dr)j_6|jzEuZ=W^MA*^+Q8Y6l0eO4&!v!mb_z(pz zEd8rLH*pSNz?i&d3oSLf_$LMS9Svxb8vYQ47nI!|7(aas;miJsdBgap5q2vyWKLF3 zt$WfqiuE^af*NT52fFy#)XdQyyr83wKVjkkO)=?=bxT4xN+Z|R@#~@^v~)qE`JOR0 zT6K#NMz+*-i{2Oq=}>Rq1Pu49@7_#g_U5#zgMA;oP0c8xQ*#z?BqOi_T^{Po{!WIr zcXyPUrFnzBS0tad#M9U)(WBN&FC#67XJvrKi`h2&o^tVf%@B9O(UM-#;iR)qpjm9) z(w4*3Q#_L_*H&)BMEEX^AP7|P3Xv6 zCx^i&!}P4mJ?t=fm0{O`@-q+2&h&Yt|6-HGW%Gx>O6!TGxmF1eB*DYFp;8%`5R9G& z(KvE{31wZ$s#FKN1pJ(F9i`6MVwbplmLy-;IAjGdcnRm$*ruQt82OZF^z5cdoe5hz zydL`HLU>Nr0Yl?==`he?5!k#X!*2%r>`)))jlv}H<>f7v30Hv;(ZVb+}H1oE^y*>uV$|0(F(ue>c?xWryiG%r*s)jHmZ(*1!>@ zRt)*wP=oIyHPDiHlF2|6FR^F59phyOi8u0q1bYMMx$%F>6cZoE#{^EaQ^gq2S35wC9qapow zV~J1$qU)cEYklGs8<1*%Qtm+jF8w;wQs)SSnhQ~JMx2F5y(zU zG8GKokB7JGXve;dpEIF{VB0tjG`e7auu>YK$}%0w=NYEEb_mB~kD1>V1mh}m$1a;W z@PvFtd-_tuV9>?iPZ=#&vio3A?$Se^RLtB7QLLy}2@eMN;BaTg>(}YP3PV2@6K)aW z(BsaNzK90b#4XDe*~T4ytFH|Ck6!DSf}68S{~r08?Mk5o<$PkK5E&S?SWWejWjc(6 z>N1u@ayl_Vq1ct9U5ni2ZDeTiv7qC%l{z-ytFGGH?2*@D@LP)p+W8lyzb*ZhVzU_6}LJ;b%TIBp~R;Cc~@8Lv9ZFecKE zXupF?qZiv4w@T(f?)MWH0v}c#6)>my53X&RxPuN)-j~XF25bY&DwnKhA#%iw-ZxLz zuHTiQb7d?Ya`t|?RnK@?pSCn-<-@M}wCe4P{h+?SeMrdrN@*6(_)X)cvb1hD& z++vNVIOpE>Htq8clY#xKk!1pGA5H;r8*;RcYW|a*dMV z+}2Z#I3{uRFYC#SBxpDukBi!KmQ*nsp5aQt zb@A9&-jxMQHrK9Wyf-e0C<-FsRiwY4*N9Dmb><95#pORBQ5pon+DG`MYD6|fJ)Ik2 z2?$#JG4?7kGqknQA}<*&7D&MH@DH&clpMEBfj9Ga!v7$*y6C@XM~pSmr5df+eI}k{ z=>NgGI~h)JuHa7S?#O-y%#PrP&Vu2q>x%UhhQX@9zPEq89d&WE%=qI-Mq-ik{n4lq zz=o_NhM_;(oF&I+etG$*etEj4J!iI4(*8FpFuQ4igWVwsd%eZ~ui2cFpqYT|gBSNr z=?(C;E2|pyBLFUG8(%XES{~(p85NwHETw60)NV$qb&iZOdO|phoD2F z(zk7NsFv=O%1iYvs@MFMf6xBU#*au0-sb*-5q?98GziY-n(WU;xrq27u4L)G_fd-u z?2Mk1IoyQ$C8WmZz)Nrq^qz6;WUOh9Sj_r0HtjPdf<>!A2dOzzo4%S$TcK0}Oys&S ziq+lC2^SE+!d;<<$m)Kpw)6dP`~2K#%FhmN*RAbkZnc!N^V9~`tOnYYW;O=eSqJq@ zX7_v3Q=P1duEUjWcLcmW@dH^X9mgP~pRsWKTW>-RpzQayJ~EN=2mYH|Tv9wP^|e%W z95X2GwtEO|`FhY+P*=gt;#`W91ln{G0fk0mY12W#7;V492WBtdS6ID`iz=^F&?ENk zk2uub6-%^1f=vDRBU?EaCW zeGL>c;>5X-1+t~OH}kf9F|Z4{s)xQ*w(^YG;;qm$jd?^!SSMsd-y@-oX9!r)hw%WwqyICCc#33MtFY$pT4X;%g)Zbq^Y2#hExRv=bs$#d=ipn&hG%|M* zk64~d0-*U{d^8K0l%OA(?vnhr1Tp-@o8MPH8L8GbyCdz^Y>&-4M(aXw6fx*fi4op@ zAGcCC(tN+L^wZ~Fkj=Y{Q;WzpcX6vR^P-#?)*rMn zbsP|AOe)iSD&oX7Cdf`8>=ML<^@-eF;Zz%rwPzBFWXce6jy{;Fu zMx#HIm89acrK2Cd0}+Jq)@XOs;|e(w*lq}+TZ(IpS1H)! zVO=^T1ph)>q`93P)aj=o6Ar+!$mc10cxG-!9Or#;lK(Cy-l8bx4OwE$T;h^r1%PPt zOZSg-T*~wn4!FJv01r>fO(G^HUae;?3(g%I=H*?#{Q7*=tHH)A&LA+tSmMmNzU=x* z0~`Fz_g;QV$7$zl(}xz*L$QW)-;zYV`M-Al^&i2HxqKre&v*O1)+8L!lO?NUmJ5?9 zkqSMce|6a6)$P9bE;MbP*v115HbpYoaAW_u;&1~13I~I%aAj@df3Vq<+5gqbwM@6M zZO+LfMKmn4ZXBH=2n^C10s}Ed{>IduELbnUo(Z>j{d}*v|CId{ghT1zpkjHAYez{D zq%^O8vn@I*Xp_1P^3MJsuxK4O-a33L+1*YGZ@lyaKgxjv)UaCpWb&uq?7Gh2v0io- zg*t!uzg*Lz{p}T1cFv~u>7e;aGumJIbGre$%Q*UxCAd8JQ5?+x`acf|%x@bl)ejTP0hJQq!)ynV5c^C|5cGYE1l$Kg2 zjs})|X#)V5Et@CVIzj!WdFq^JP7#*S`!6z1otgNg{M8lpmEJ=! zNgP(}x4V->Za>ncfO6TFeyPk)I}jUSff!O!*B{QwbREwR>TkRiO8D{Emlh+jY-h>7 z#nBEyY)mq}gIt^Z&dZlIiFf=kXh%^st1I7cW5t!)taDT{XKWzfAgKVS7n!FK#E}@` zX(YLI7t)!FDp|!?ZhWH5uSLM$!qW{gwDwEx4!%<6=E)pr)c;~5U=DHVeT?GJrv+pG zFdD_q=Q`u;KoUiX?>Bc!9sF`%K5d&N!z3F68n(sU>vT9oFWgZqVn(F%q5~S52CLjx9A9vHlwQ{ zkE|sE;gx+9_k(13Vj;J>fyH}hg$}l#siDZPn?%%FDYlO8(60h%I~tq^Z9t=5>uwRBb(c%|AhIAjo zMTZ(eOSEHW&xE+Ui@g5qgtL0hRIkxfekQ%bOtK1SO`FRZbvc2D0HIBGj;^?VHbQ8a zM9!1Z(P`A&1WB&5iZ+d?fDK3El{^S_LQ%&TPn=ulZQf)0{0jF?!Jcvo&H%ncmqTqTxnHMKQpu@L6L; zTO3U<-c2wi8)EI2pS(i=YaS2antt#RI1khq1(7iO)a3-^m^H4y(;GKFWhZ>>c$#cg z&*CSX5iEkQrrN-F5zdH>av{d6uAr!zRHHIsRcfKhByt?HY_w|?H#{sN||8cLuU-C$07Jb1ktC3WU@uTUZXjDgK4xVzoOQ9 zB!KYFpn(#Ys;)`Yn^Jhw<$2DV5GVA{5w5((@SGSJo|ffMjq@~KJFd#*DgEVwQQErO z6E*?i@*~U-9CBeh>B9sm6W${Vdh?4khhx_F{)KZr6q|xkcX~5;#$ig~e;r&VIMHO{sMl{iE-nG<>DD zdfm;1SHtu*JS1Tb1W*DDyGbw3yZA5fRb)puB`7Z%gRZYHUkm^G zguU2#OQQig5PPs6b*;Xf>gXWEN5iuXTTAFMqWLc>!!b z8QwICh&uY%V@n>g%~sY|hVU^%nmg6BSCPOr;k%Wltkd#A0C2IebI5D6R$JJZpM;5-K^0rN=< ztC1vB_(-RiljZ9A62bVKMWf&Kv8wkUqWAt$e@INy!YOfjML{PU+})LBkSN|_SE@+O$}h3v z@hIUd;NZ$tG9F9!E-7ZYol7sYRT^z zvTXd-;MUWAQ^4NBA?Fm7TpWZZTK>nZTB4TB+V3p>)!6hZq!+``Lgy1#aV?rYtzCg) z`Kc<#r8Wrq+rbo;1m_M~9gU=-Ew&9#e8|r=VJbVB`mU|0?3V{``i;g6^C*+oka0ga zqijElWGZBjSqA+p_InD{Ilxc$|`qHr$KXAv+IB1z$(|Wqv$j*4K{$|jPUO1J)8GiWf*TyC|r&(7%~3}R}Dj`p*z*P z)Q=r^iF$&~z1<~i7y;C|h#EW?oMdtfU4im&M=hoJbZR7>4IKQ2OXxeGT7h)HzcyMWQhS$(ivbjUQjUM+LvAEFNuT5O3yH{q~06 zqjt{tqH_~gWR%$zu`f~??a;(W?f0U48AOt-FzjFP<}~~k<6pd zh!TNDNqG(j7waD8HivI@j?rM{$j~mdfrruBM8y3z5(2b#e6!}XyQOszO@X6$yQ5aY zGo!txqin8h&axrDT}P+9?{-;+WCjg`H4^Ci(&%8L5uB$mo*+55%$Vi>9J2%DcvAv~ zrzoqf^{RJ+MIMHZhd?MpnW*_;_EjsFEsKSrd_c&S{2K1jLF<#ZOWa2lq^e-y#~D@u z6%`1Y4L*Wt!51kLLzZ0+hy($g|ah z?*E`~h}i_falj7UZhO+C)&{~ODPA{F(0nrJbt!bIj$c=6wxhyKV103kgGsg5Y(It- z4Ze%}Kv-X9+d3{IkVrIuP+I+J&<|J7)KM3UbPV}D^`FiIi#B>O)c~kiPfmX~2xv9V z9Do4w#PpZNn+gs29!$H@XOn48M!r)2rwH@$>cc2c(JK$|h|t#8Feh{b5ol-E zvIY%q*|>HdfsB+vxEKl(qw&(do4)@{e05h7nz_FLt65Cz1>@?{BO^}mC>zZet0;Wj zqew3}Ak`SJr$w>Eml=N#i0+G5uZUx4xRTFi!ajaoa)y|=4e zdllTrUdu>P|GN09}x5vdg#nFOo%0*jr!T1pa#Cn?` z1TYBtrzy_UGX2x3y|!nq*k{Y;UnHfT5A5bQ24eEM1YVm?x&pj$uHdNh+bH8~6|F&Y zmC1wpdmU*)?Q(iurT3Q7b(gLTM|V>52^zod_=AC3c3mJ{z@)zHs}MSVqo#X&sQ+?bZQJ1O^gDCF9qU3UmMSg~d`y4&Fy zZlJe;kS+p$m<`{MPqn#f-eY9c( z=6f_{q)@_F=#FZ;VxW&YyU%Vl3aE_5;k(0uQ}4fo04X7+aC9AckBi_dHp@Eq1kZVb zQ^=uf3(z4P;&oU!glID6esv;DQT6ygKZPgvz;u#`@hf#;O*CZC5pviDKnp-0YbF{8 z#QjNbB=*9qmx=o>zS8+g(mEqe#ZK*N4PRX8A<1~TCD~tyd{h`-T_9{fNUC<3x63Gy zWY6U$Q_`BF;8j_zHvJfhB70njQHJntFtEQd=Q1c4TA(aDIDTGZdU2Mea9L~ex(IS{ z^C~+nCOT0#jwKyHH@BM*O`B`tWF?#MyCLBQ_4bM9Ws}g$S0$v7@ev4b5>3Rq{aiL* zHsu(?PoO&r5GcEp{v<9ni=V@WrL6P>THbP-F82^udZO8RXlqN28J;YOtnYR4upu^! zp&sn6uq5w4Vd+ZN{7%MzqBjODup0|s8%?rSP1ypS`37s&;LPn;N5h#|g#2yFl4^i8tysY{z#l&HCwQ#_n&ah{V~&VbkhTC zduU`joJXcP?mKNwhlE_Hs9mu`aV_*P!q?PC4Fpu3xZyIliy-;Z+2&()kt$7%Uf&e3 zk+~~{+EkPcH1055TP$0y^jq@g)tP4Q3q~Q)-R+CKkoR7R5}zlaJBfxV!Z(8Ri4Q9T z#Sy)_h;qbZIcAk*difgwb0JmF84knI03Z2#lH z8_RWp%bA6&e8<#g{MOTw--(oaUBxfz%cITvd8h}vQ1W)BcQ3HWldvB86MMne-qXk%Owscuiq`qGdy-eIqTTAg^{IWixCd-`|kPH zxxTu)D?%)VLF=lCEQ?b5QM($6a@pt*A1czP>gsod|7QF_&Xj)ZP8!n%q z0JG_Z|2T=a#`6fo(6N45%gdeK4<-^IbF%r(Z~=$CMC|_QS1zcp&On!Ra%~;9C)7eZ zqdk2#vb?6x88LD2sgrKLzH?E&uo^0phzZx#Jz$Zgd@bVrQl^1~lvJ0~6MkF_4~As8 z>+F|&RCwD#1V)m$9J$2Axfmz)e5~nc&#NLnuj)S?MsGBEX)xkur)AmZ=Z9AAf zH8Nq}_Fvi}{AX+F7}c)yiImC8bwVIa`>o|fYJ8o|i^+3u$eBkwY3}dD`O-JN>nNCi zU(|qy`(F#b`oFgUjx$|_iC6;{SHzXnje)N$p3e+9G{wame`bxQ(zox^xxW8)HI&2v zysqg10R8Bkj=dCP1)G5+i>;KrWW}X}kgY^@{uyEE8Qg4wIh`ozcW$NAEEUh7m5?(~kKjcdgFxsQ*~!J3%wR z0l(GXAL$)l(3Sp{L42~ttWJB-S~1f&GWAzd1?uuOoB^`>PemJ_{&Gzc5S8lU%*O=W zJfmq42}W98!b-}JzvQkfZZ#v}|1C*?SbaqM`HX!X@9vMqkx_r0LgFC+VIU6>&Pe`X z`rGXa6_X;ePHiQl>6Uo2-C|Nq@Tk0&MwkRJJYmVcMD5SpfcEdo?8WKnv+RZMy6893 z%yn3!O&j>YaP3W`cl#U_i{HmlrCUKXa*$5-pq(eRfyi(%A&H+Gp7U&pl&a!wE(^vz&K zKD|KPso~uSwITVuaDssO-_nj>0B27VpF;zjCrioXth1=ZvCe4F{Ux)~>ub!jp~!!h54 zL!Il)MpC_9B*$y{vaJ`Kc`6{_5x|2xPy`HYs;mP;WH)kr zEV{^1ws!P)v@K2ESO1+s6?eazSMH-I`)_6q)~K;{sb`)6;3xve2E`PivJ;MU&J^** zB_00r90rs<$xD&Zh2BbR1b@SnwEyO5cWYnl;`yE0G8X2Su2wLERC9;iD*l)YF+XnM zYy8c$xQ-iJ{UM~81cOI|VbcM8)F-$^4J&;DG4*l@AS+hDN_ zug~^w4H8C@Jy3C(^Oqd0j_eY6XIQ^dEdbh zQK_by-d#N`Xnz^9UyvFWAe{pdrr_p^Wawf{jo#}X*#xXk^ePB!B+RxlUTj0tPuhXf zK{yqtO9eSL1N-V;`;Xdr#GMl`aqt>9ns+mWUej*NTHncb{5XXECXT5HvN=+x%wxw3 z#H(j<;({2|*P||&scJ2nLNYsa;?a#fk|N^MCQLf`m)(}%z2mgb-Z?S7>diQc;7(fF z0{*X93b__^KCu5*!J_^@TzzF!oXwUs?(PJ4r*UYU;4T3I2{aypd!TU(1ouF22^K6s zg1cLg0KtMcH14k7^WHo2&7Jwvi`74Rv8v9gI%n5DdmDcwzu@#aI@qyv(Q(^VNwBu= zS9$Z71-Wep%gBdudJ***Um!qr7_;8pM-T;g&9v~lDMoPjtQcqM;2030>IFz)y-Gg( zmg4u1!Tc$OSs?)M;)ww;N$OB(SeM z3+DPk_b-Olp>8J`zwyjSVFPcoRvx|qz0CymrtxHG-<(0YuaB8?oJIH2SbKWLgL57d z_}ghb^(`_L`4a9m;!$krnl|Z-a+U9N`9T^>*DJBZ42=pmXnP8-CUsT--9g zOEX_hq(g_g1Aim+lTZ-5%)@3s$4XBW0re8L~etK%S$YD zv5%_bwO#20fvNqa|D8N+f1bPu1dnz4tlHOY+y%HuUVY%K$e&Chknfm@e70xSBZ`>< zW55TqH};_95curH*|)bEXzoO|PwXmIMZa9XFeIzX)UOlWKX#7@PtHuu9ACc&TE~Bp z^#1v{{e=Kt&Bjbd05fT$UWxmBXnl#_1$86U5!%*fW;nX(D+@;5Kfcu~8*hI`ToFwP zN9ZvEsyy!2Tt5n23oO>zbl!TA^LJyxW1xr-_*a^PYq)lOob(?+K_UONn4ng^gW;t7 zTlB5vWg6Fk2f&9QIE~d?u1)<#Vdg1LsTyrLZTP?mytl->;(J#1ahJ@zWEpRq^hqqB z1D z@Ro_<%YjTeb1X%13PS+KCJ)OTr9X^jwy%M{?B3 zs}gkt8ws=7oqtvBMRno|V^%(*D*pMNRN_q?xrRQH;yZsYjU z;Tk2eRi95>KS1_PmgnJ|{_o9%;Lc~>-T2^Mj7^iX ztklSKomi$S{iZQKw0gq^I~L0*^WlMg?RgJ*r$sQ0!@zEI_yscTJNoY|eP5VM8XC>V zkK8FA@jYoL8cE7o+O=ilk8|{WiQ7V9(-nXJ7RYZUs9X$(X3Tgp9GdZB%Z-ztn((dJ z9<-vn^UX6A{cTR(?>71Lmh$PNK!tVWPlhdCS?u#4 z#L4IC*S=tjfNoP>{t1MWgmw6^&}UV(t~KDy#cipSzewo>hf7$$(h+y#0>&JbTqrAe z>Dm6~s;!1jJhI5e{Ln~w+Xosf{d1xxm(D?LP>7`VUnd$}c8P%m#`3@3yHfli z&OiL59Yk-o)sYe-63pSkwmm3Uw<~y=aN($FKfeSeEs@XsbpzU76BHO#s;c&8-0_7T zF+^AS+eNCCS_h)^@DzCz+J+xg9Zy;$pD7Hprmhc z%>L`904fIpRW zdXS+8+#JX@tW1*oI6oAWI*94fp>FO2$?nEmyMhG$s8(9!8y9HYooI=~9|peoh>5Ju zwd+|?Vyk`o^&Dx+WuSQ&fChs-{|H8nosYc2`5B5IirQ4OHpV&aU;7h6qtI?AEIGhS z^?vze^w<*;do@Ik>VcEdq?FGU`gXCy$T?6&;YSvUQKcwypZSTu1%kxUUv8u^KCAHK z!oOk`c60f?9gfRza7~}n?A9oHt!O71tda&!bb8lCgID>(;7FtZd#G0GNzef_sGD7& zLrIM+Y6y*)o%@3#Yv-EmpE!~Bk*AZ62hfR1?Or7iO5CT?=8j|Dip$MSEJ?ylJ=w*` zu`y@^4}AWl_WQ>m#c1=1w{4XkO|JH^?=$vLj#$#e=9JaqvFNLhbu}Fw%IB0;x@H>h zlJ`SFA_kMqiXX*vY*U)x&DT_kf@k^&R8-8ABG!`MQ}uJKf49x&reHg-9u^67naadG zi0#fGUbUZJ^y;{Xkaqc^d9G3;-);wmWy(ME9N#|>eSjRGD_4j0j!pM1kyW#HHfYsH zDCWkPw@d>b(CGpsQe^D^L&z@4K!T}^2{u#XwKDfIq%)tW@QOnHO!1>YrWmqO{sc(E z=g%oCg~#*dqULsZm^S-c33nN3(7(&HFI|jB-}vId=x+sx%=>a7vIeG_+S*gNn85F_NbIs z7{U=KqP7zx0--0kQgY8*EqXjI)ioSy^3rK>%JPBCAgJ+d@KCr~etEy(B0COKXK?fv z5E3Z2hW{gy*XN6Y6DUR@-YTJ)Nv^y2xLfIQkWqi-4?5edYd3Q%e&=1V;fLH6cSXcO zn@%O;91@9L^(mdZ6e0lH5dIz@WAjV=mrUuugw24c`1iGQUL9&H?OH2Agh?Y2sEogo z7gQi>E@y0Pay*;;99q{)yjyT88~)V^=$C{b;+I$Mwko$bufAuge^Uj$a~9b(T4hNj z_F;@98v2gZ+*Lj(&;;TnKwZ&W$?|G z&*y`Y)?n^~K0V(+ENQdb-a#OCueOdM3Mbd_;sSoLT;-_Jj{h_d0{47Srxcr!gydW@ z13(Kh(!&ENL#h2SfiW;yk3&WBrjH*MCFFkut&l^bTrr_l5$nQZvJ;A*3mqP(v>O+$ zZ`YfBAI%?7k(i01_Z6-Dzi=5Zl^`o%)&BYly)R_@`fSi{Huv*-{yHOPcJBH;gde+J zS;tFT2n4xJ9UrXVF5rHDeBKTKqGPRc3u>Tq`-|!<!>y(mK=FMv%cT5ctO(@CU|1v$!OU z{1!((N+#Byle7;(#jo4`d+-0zCIyf?3G7^h$OLNe4gDYY56m#!=R_aSOL@TEX2>si z|A)&xxldrYilCX;_Qi`Ki_=9rB&FOcD8gq4|Al8<4&!5<#1wmVV}*wE8cam>4YuA4 zg$96r+@8GI;(vN4j&-8;;b<3Na9WQVM)~4#g{W{4>f8RHTU-Uct1iji>^-rSBovQJ zp^L?Pz^G+CLF6wCivYR%U;%^o1>CVB_Untn%n0}sw*wfB>1LKTx2EV3zMjp zwq^9fvDG+g*!V6@b42`8jCgRrMk(uvXI~vXS`Qu#HfqJ|-ofoYX!5JsO7bDOpB&63 zE;1K>_Voq_E|}Vu)*;jZ#p&!^SVFag#-a?|dFUEl> z%fQe3pj(*DWD@&pk60+FBFr?YzQ=k)-uL2Me(J&f7|wR!$KAQN?1!)`FDC9D z>7u$baJ+rqD;euzGO=PTofz9o;-e@T_RhgpNOg#?3=WcyRr9 zifO)gwU;KhuQp|Al1&!Rtf!#a+<4#~3ns*>gNB_faE^#gL@HP}d~YXprkEvl5g}+Z z6%mN&?sN9)uzw{Rp|G3c*^--vXI}!#WxAiW9-h!gQ&?}RXwrCz^ z1kaw21iEh>A#D;#0~n;wVsHILu^1z@i!@4K@r#FKzxtEvWP3i%vmCZFF1S9VOP_0 zd=p`ri!8jhi+OL&^)t)V)WWO-eW~jMLBSY;dYsRaqk2eIn8w<>A0RZ^BH0n!ng=HE!$OhVCAv1rl-if00X2lbwTi@Ex(UJ8)%wy88lYr~p`27pk zw!wq))+Kq4GP*_*TAn8PHcn^$2zXCC?~Q8>+uIkJZ{{hoJd)w=`Nbv8Ir#x-@lVD= zosyQKH5i&9kU5qn5AOg(xo3aa>vdKkfewb?t_&QPN#OyI^s*o$^=kJOW)i z&sZ^Y-8fP+!`YU5`A;j&YM?wd;CgQ4iUOwNbl+4>Ikf>K+BE<9-XlD&PXeW)NAb3n zeg`q#2?D6M^Nojx0eCQT%2?JUsTYtXu=K-`jA+6PNX)0m`!7h#26{=3A z$-}11MLg-@z>#RiYF_x|AAOM$tnk;;pDYenFh^5R-F*;tXDIO!{pu7B&Oz)cQ#R`? zXQr#vDdU)+R_RN3_E_<_2btW;zA*}Qoc!|-0X#Ot=EJrI7Dc*C*2l(J=^au+ZKTAwQP6W?H-hWoiK+OW~{fMk^Tio zRxUpC3Bi5*o*{eqqkgV5 zkH5^}o(E=70v~9FQhD>@f$<#95|a>iuP=D^dIAY}AP&IbSX?&U#&ELR{U3p$e@)08 z3;2BKR6-SkMlx5YCY#T?X>;lPHs(H*I9X6~?tPTNyBv0?f!Dw&nz z7egFc6~*~m`XuvoMUF3U(ERpdP6NL>hv858zwtK%CMgZzst~Z>K_kJ3zft)VY^U@s(s~;&|nwIIle0<}|}jHY0)xT}VSWFcy-@ zWqik!lXBE}vP-CkHOf$r_Il(5sPRKE)8+EtxKnqZpcW< zT6#?2Kw9=$aeXHC_^Sa#6$QuG=qN}OvuZpw7!9r)|KoAM9`xbwb-H9>oh0RDO-G9| zoUPsR-sfQxcj(54erC>nO(s1D-8%~O4q!l`!EVU!uCWt6B*Li#MVF1$DSuKj7Fwlj zE6)0a2MK4<>_;s#AR$bfer1Ji*RLg}m$?q>t>3p#Bpa_LB0!K}Ff=z4)1ctx1hcLV z%D0pReRXtJ6`n}ojwl780FPpcws?W@n*Vd--?95>;c{(-0)?1wZ>L`3^QCBEFlq=5 z+5CYCswTQLJy9PIgKw^=Cc3-(CLoopt*w+bGtdeQ7LkhDUx;Ej?^6<6`SXibNBd<3 z%+ssrIsJ+IfmbErp3H{a-2A_}09VvQ-A~lFIrL0%4Wl7yM%Ad+b#5Eo zBx8^%8O)09)!ygypL4%;itdcGSsdoC9FU5I(<-pGUxCSMHekOvEKbiY4Q+_;1M{2l zJ;83lZw~^z<_zEfv(c776hT>Y$k@MF$!blBP;7 zZ=T~7D;ww-%TR;0S?N}kjv{Jst`W3Sl$4)yXp4KAW^f+<==IV5r33ZoPCbr7ty=9K zIsM=hi)!z&PjZ=uloL?tZTFAw*&EhH4Ei3JXXKB}8t{xGv<&~+FV73$@VBMYd{EnW zv@8Yy9ds;H5i|79o8(=O{Rv*lspqnI?;=j6XGsY1|MxwA&Km{?l+V->R(85+VRaq! z$s-Lj`V8j7w3otZI)DFSsJ41b<{m{b_SvA0mKz zEH##%aJbq9%hE)1M@qm_<4coykn@qqq5K*+eMF&bj5U-p?O-;Bng6&<%SF3+#vGq` zU1Syj`LU?U>7@B{&ttV%oX!6WWGacNufS`)@T8RrB$cbP>_LyNDX;W`hdpej=bfn^ zUJ_UVAQ6jP*5I=D7reo5uo6~0jA^UW{VU%vvMKMWsT{b?hT3BL*KR6gH(Kb4mdsfUg2oP59>$YG-Yyks-a zPq3xZmjo2V{>ksPWI23IOEf(lN808yGf-BD8|yYDq2e#seD>@K)9I|Bpv^Z_{F-ak z!2&oFP%m;&|O#^RiLHz8V5?SLX-@(;O1Q50_nTwtYKKriF%V8TX&;y(fk~mbb#lq2 zHhKvGwN+nMxL4n-qZ!zaUx5>eA5`Ahhq$=3inj(41N;+HE}Mu-*Qrhcw5@OXeNSCD zHxC(|0O^5f-(6N~eJ+Rymg2xT!$PUNJk4B;)qbX!N>HOPdtvya|1r^%tD54WIe^^8#;Zy_*b21bqLzAc22eR?WTqj6NZ?EF~rQ=nH8r zm2wL0o~N*-<^yL~yV7UU*9~DXpdcxX6JZok6Xa)me3k{nvpvX0+&abY_0#nARY^$_ zC!hYbVC#BqHk;+N+`on&JU$t_I6gyLB)vx!y-_*)Z|$QzHa@je*martbwmlu_L4}# z$*HtXvduX-#7xzNa$*cdEg_E1$Kkt+57cK4D0AMnXsh^K93cJOZuuts#(Kzx^ebZ! zEdlFHU_jJZdY(iq%eR2X^Cx{aHGV!KV`ewW&ld}#nzeRCUN$^LOr*WJwh7n&AwppqJPG3pd}Q+QMMsT1Q%m5Ymc*_&mqntB zvLVQ3Llv1P5pVW=z+Kgrn-3;eoOa=TPFFCaa1Bq_t7+UO4XO6E*>Icx!Mm*(Lynp( z*E$K>m?&LasV9^Ie7}N+`60tmTM4>kui7*+WuU40UnO#j5_0CJ0cTE7@qPcVBfB^gr1U7s$_F*FU&l<@Aa zi7BD4J39ls4?5JZ^Y3Au-7z2^TH168%-&Gy5(jF6>5>K7^jJn;Hbsl#vJ2i~>O@@r$f-N{aRFt8`8@C*M@vWTz(o@OY3AsI&6S$@knp z-SsGq#cp|f9`)L`kzA2cVahbDF0)4jw?DRH=u(VX1SN8_rA$uRG5Qji zwDqn2A?~%Z|I=6=oA{r51;8w8TNtx+CsS^?I^;NsE0>aJxDMSfDNe}hxcK-U6O?EC^a(^R?eHn^qVa!Zzv|*O9Ek`xCG=}xT!}P*7sb~*i2UlH6Bdt z+qs?Auy1^?3w`$9*`=MwYggAG})OkWS|sC;8;Nj5flU9}wjVo;i#Rwbni zb~^IS>h-wKFbb}dX|I0e$kp~epDFjD;#4YEP0FOsLNwgTixZ`W#bsFUlvkm6NQN}t z@b)D1p*;X8G~jBOj`ffhm~$I) zOH}i$)aV>4*`suUuk}szf6=ZGfN%rDmlA%^W~iK>bv?(_OK6Gy+N~3R+~>26uzVA| zcKnK%QWuun?O{}~_tn`s)a?fC-wF1w&4Lnl3vv<0;=8bk%J=r}ZF@0XFE3I_ijEhUbKh2v zz0Zz9aDVs-T_Y&5<9|TY4(yS&E!|cWGp{nTGg0vv=qn@TS|RmYb-T1VecVxj7h#3g zf7{yb(HV~EQ8PA;`Y^fAo~?DE=koF*hC6}CAu`f0tZzRRdo-c5LkQd|s~7z6dlL(N z0^IRZr|!k`=!khI9;I{#O!Pt8f8s0v#U$~nuuS8!%Ff5>;6<(bEOqWp`)i6H~lrmk1MYQg5((2&#e)_8iga~Vd-x>&ODZ9UjGTdT ze`|3^tqc<0p55v&0$o|wOKbbbPoJacoxhULAcBxd@6ktI#vEfUsr@N8i)~|1`zMcT z*Gl6u@*!rfac&SYAJgSOR6zBbl18TONpnBtZFGnwrz79mG_tr4F)5~tKklcKKo+6G z^^vYDP1p*{4&(Lb+^8P?k8=>Ni86sY{PQ7wTK<~B`=cx*z7B_%}e4B~fq@ zLW0`G%Qf**S!tjwG`q(v5OsoO@D>AcX$*6}e;sgrlb4YUN(dO}bpigfkZ~^_VIv>) z4%-6yRPENOTjW&7H(Xck{jBPeE29&Ja_W3FD$FBOg`1zHTOhH4V?j2JONftiPu<9q znU$E+plD9yTI&W1NweQ+nC_YF?QU-(+WxgA26k;c^Cavc8ok(G>3e(E+Sad6Z{Bt! zw9(sv>Nq@luw->oFttG^CVHxGZ$9#%U!d?t1mP;Ew$5*Fhr*3SZ^7mmu(Bh?t5KMj$+(;gr0=Kwoky>2*nbphl*F*N^h6fX#{VEx_`r-MrcelaJbNym44O z(!ZGl7Bzgz$ht;HwDVAD%FCPX7%W&ATIZ9eE-gJ4WPh79eBZSoE;A!R-C3AQy9q*T zfE=^&`H&qb>u=dN{cDFD7bzX^m!AnbN#4#N;3LelU& zUv~{=u>YzgjDSbPHDSNHNCTX`X`OW~AX=-C$I*bc9ZK496?z4&DI zY-%*VVz6eLMDA1=-47YR+xA-@YDL(Qc}5SOr0NaLMt{@xYguHE;NN%9Kcz&rD5+%Y zDhAP0bfYSxn0lTFGVSqI>RYu8+3}(FAx;&G-{ZgjWQ1A&kk#^5#avOJrg@nAa~8U& zis`<02Hp`^dM9yk*Q^TSpB$da67xYN1>6!Mzd(YALn&0n=%Sb^%HJB_lKT~n8G!_9y{|3>?|dNHV<-G zl`*!Ba=h$Y6Y36U=yvhT$B#YT=f#~TB6co1D=~%T#;n+pSC(}=W`m9#eZFL8b{35f zw==(`{OCKHcIM|N~Ufy z{j96=SKoeGlA6NVI2=&=)-J+n%Qpn|=gCNbnFb}v;zcPi{<}DDD_;Zi@R8GvQ2&9X zAb>$K@Y!$N2~8Y7=l~L^Uu|Qnc6M2^rYR*4kT%!fby=E@k-M4jfHBG;!k-iJ!a;6F z=*GSz8HfS!)sUm}pzxsgO)+JY-wJbPW?z@5=2&;4<)#3B7#EB3jB4*= z+BzFh(EEW6^2+aPxklo&{&f8Q3m5Ockrc*{7^N81f<93Y$HP6s`(|lg!k61F8%$7I z*7M!>VF-=fiB@)9r3~WL%?kfnis_&HU7U}?w{g6{rTWN(1U{njg4#r*kE6H`bjK(~ z`p_pg!cWRVs70ihH|j}y%4w&FS7PLWgEwW_*@tG9fnUCQLP-slmlY8*bX^+P*Bu?g zo~{;|e@GiRj!fEGMYM$W#%4rg{*CE8PPt86-wA%BywY4u)z9Aqkvwy&Ied>BIxPKW z*M((gDZpK!hB~4B=lp8uN_Qn@0Q;ulw!7DF%8{~qj^c<}`uPCV(I@@AB12m-mbWsJ z4FrgHu^W@>9=73;^tz$%y+FrDu;9I&O#!j_^~N?FFHoik>U6`rGaTzKLf_mg|y@>74n3l46N^g*)q_WlB~c1399haeoPsy6Y4 zfmwDho201H1dV_o*_L>t?{#{~vcREwQrz%ymFcsndj7Ffr*fIzvZ2%-z4A0a>V0Hs z4NK(H!lUh%sCd#tatAs|l)>2t^fUwI0F=i$Zy(L7g#!6d>Om?ufBRKkyp)ozNv+M)`!60J{K-es_cdw#J)7J-VwqS|s(z;e5AQzv9pBM4I^@waAIyD*`7M^(A824gm`0Wph z?7+4@#H669uV`S}QtDIjLeI*G<$?VtM4XpL_K)%1Bk5sG)^f)ym{GUlJII|xRKlohQi#8qSx5Qt59&E@CPFkWK-sV^a8m*in&&5+7r5;$t@?AF{DXv*vSZ!P|cB15V_2z%*7a-yr=dOS-jh;6T5 z@gJcA3%xG!CUtJ-lErj2F#p1TN7KZ+V$Lv})6KxG2+tj8^(~*xDKceTkMDdVG(0Qc zcN)1}aZ4`W5Y*Tem(X>!8~bST^mE9EW)oP*Y`40~%zVlC1h~d){CN`NL*_E5?KIxv zM7ysF6yC}^c3g+I3Vm)|-g@4c#y3L-^Am1upiH-4UjDDj6LmtEfmX7!%fi;*DCRrX z;4^w|bJdA71}t_g#?eT^!Q)sFy`Z$(xsSe7dyS6F{Ed^q;3JvMjD~$8ao{v|P4993 z)CpBF*n&XMqKWLOcqA5(F66?GB5tg&?pWcGA>Y!C;oQhRg27106- z5OQ9P#Wb!AUOryl{z&yX=X*FHaegos8NzId-M>aR2|s}5MVDF(BSCxyF&`{P^ik$w<72c3}{FG`d=pmV-^7qv>oJ5^iwXn7i+W8Sfa zi4IN=Mc{oVt=TouTu7v66aJx*(YcM4N+ZD=xGdC$FyZ!eDf{4k`^e`n71WRA^CN~_ z_`Sm(^?Xvl+Im?wmmWQvOiY5L6~ZSLYu5h&sa!aHoY|4i1N`^Y>>$FDvuj(5*qSxO zLzHZw5|s3_a*hhmd?^lSAARH@Q^2ApH%|ioF3(}g3)olbgf+yGV?dD9HC*wy9h|@U z8ExQAkHA!=nn6JKq-#MTQE2A^x0n(_hC{f#+;7>9-wWa$6c6UfOPCar30|G-FPwVK zf9XIxo3rwDcHN3Y;SU5B2IV#*KU4VgAn4%0XlPPgFi|C4jZ5qtfqhPdE33yg`XtEl zHD+RO7ZDYug&X1=mr*O8_>%AU#f2i|?$Cx^wnRa#)hQ{{fJ9OQ#O>1C1bmRR8Lly1 z08ZjAN0QiIz6FBrXh`TvSy(n(lH$C~doVup7VW=RdZlj5yeaH?sP4|N%(ZVtA{pYZ znRcrwIXBI!KJ-@nq&bSCl03VJEzj9^1o`O3#tM4=6V ztM}TPO#ivU0zP=s1;0GXGtR+R5q@n5$+?98EH7E{*{D(v4c)Nb8JlhTzj6O+3IO^~YnH4wX35}8o` zu4uNk%Vk&EV^!r0s_S5BZPx?iwJ7r~>z&~#L~wy<{)8pz#h0q!1KZNt1hETGdYPGz zpRncsRnm=Roby9cq$}RotaaDGw>u+H!BVE}Jy=137-#p3w*e$^oFqK^IE?ufWf+Vy zq%6JZNeV0OX+HYn=7~(4iRKrr#Hr{JME_Z1Q%aIAgW35Nmen6Q>6T^bZB5$dbrx8k z(&~?Dr#{KyjV=>PK8pr|=!!Lb6Q`$s|Ej1sbPek$K&nY*|1umVJWd_9`9ZapHfAe@ zfQ2mXa+tVtyyR7Fm+j`}Ck|})#mrWpB|1FH-!X-O@`N1JlJ$QX4`?AbO#9{}4yA3f z9k}W^6=meccr44$!LJve`yBYB2=TT`wHOHAe-C8Db$5OszMJSk{!(u%A3<;Q?iGW4 zo((?uXRPe_d|39^L?k>a{Dt*^3crW2)h_w*Y+v^nPQO3p z>;)Q?uVx3N{tX-Ou|bEHwh6j%sX*TGQ(@{Mi#q91Wzaz2h18G!!LR_6a+E$oo{$ne zf}3SLX`5O7fuT&fB6r_6d;RpKttq{Q%B^kmqvL7+r*e>oH=_*kufWlM{X7J=dN`(i zIiSZ(@3G+J{a+w5r?!8sb?75sQyv=f?aJY$gk*vs+8&nQ4sc((455I<-=N>llnoR- znp77ce$L`{eFjG%H=8Tmf{c1L%dy-uViO`Pm)gD^C!Sdbpyt_kD{aMc4q3E3$vjBc zC9g*Rc(tbZ<<<@6JM}@(`TE8j0is@f`w9gKXGg_HS8SscdLOiQ-@nwjc`pKIg1R4U zyasSSgdq;DvhDAuvhrrDpNeFq8XMeY)v@r-biU4A-4) z3WL!XF*KBv1g8sXZLGhLpH8~Qvgt-GKbju z@vD>RZ)C;?`*yN~CGs*ZGyt!Gha1VOBZ2>^1OC-doR@^!8dkkDyi8DmO9F`hj^cE0 z+j4!744-9UiZGnXr$sIg&ZAle1)h;+Y1wjHcbg|pMZR>Iq~~x+&LeQMa9LVmAU!nQ3W!S{|PthZN-#L3m>|T z?Xk!)6lh0u9RN(_0xAwXqMof0kCq2R^bs3qtQ(FIH=-r4_FT#c=VN=MYU(_;z`G#8$h{@bVcTig*9;rFkz#c?<=$tS~a3ByvNG~1AklS%2N z!1;g0Ag;D!AGo!l;y$$IBd^Tody8iJQu<~?qwak~62RdS^=H+IwkBZ2B6wISYW;js z-^BU3GReA(+H6;P)>T?^aWsX`FQ*BZ&i)_F8#vvwAs}K{_|g`^5T!Ec?!|d{j@+sf z72%K_CSFA97rN80vym@Z)5s%{!HDU9#rVXeHMThC!jk18(LvpLwyG8in4kp3hvIk@wL zdgWlx#QiQgeaDCpWVqUfSv?BY|LZ!BUdW?$ZiNa-#de3xdYyCxm7-f~zR%OHbDIa zoQP8~j+|6zj4=r>y={s|=u7`h5{#bURSR8+1ZVra$}R18f)}l~&+8%of=-E{%6^@x zV?_ZU=Uql@e;AfMPs@|>;RbiF7Y8)V$8hvGk^RN`GTD9Za}iSs>N2|pDX2oH6vYms z<4`EP63;hi@o58o!Wv&CR`<22`SD+{re;4WJv5j9ZXXNjk`F@!`O-!f);x#Qbe`dN z{TkCc`#r~P0dyXs=zwD%mCu$8ZZ2Etj6&!XU#E+5H7?=x>utg7+W1mFacrY!l{VmhoS2I2h9feqy3|QLzL= z>jicg9d_Y)T_CfNEPgIOWL>2DV-@lH!l!-kmKcNiRA7OWd!k3sIKup=`e1Dk`bqen zW|ccJ4cA8hKe+e48EsKxhx8FD3v1`86^qm>44BwT?56o$jMwCQThNx`)#KUA6WX_f zyMOo|vl2=)63<~xg3b<&r#SzK=~{JrdJP`rf5|oCHK=Y$ibg+iuo3=_fQ{$NVn0Bdv4MP9NfapWz^0j8M7IGKu$U(pM6WeKCtUy78y;r8VwBxNMvy_@PtYjzwG>C?x=Dp+g&#Z(F1qr5T{dLq@`-q}=I$ z02CymJekba_Er+0kczQSSV&-E1X%d|iN9vS8$+MGZ*xy^@Or|sZ&g?fqe!i&KyEVD zM3L2`Yy@t7_*(o|VGziI_hGSi)BU#&D-v6XRlYq~CN`&7A=FblT9H5J_~xefA(bs3 zaI;_M4tf#!Z^0V&_CussJsxh}sh_ZY_ys(Or`{_pit?I4nKS$}E7ZgR1q^gS>;_r}WvulXfQNOn24dxrZX0=J>u z>f!FB%L%D$c!ypV&@9t{GU>24I!{~{Du{;c+}%TWw8=K4bF*Wzvmw-Iuz6Z{ShM5B zp*|8=BjzaF($)F}1R-Z(f#Bp(3z9S}rg_jGU4my~+tP3yj-NYNVKx?5u`PEN#th_d z&22`^Fsu5y6(^14s&5{8Qe3}$W6FX+hgQkpP}}?xD#wd9cY}O8#`xG?NiaFDY}%ED z^oZ4{ZIitwX5OA{fQaS1DbWz6OyaarzX#bDYW%P_4TuE}F-@ zq*oT&N!!@W zn;L8!trr6c%t)^b=8IEg z4H2?4_GRpngehAxs3cqVY%z9b?EAhmjGZy|_5G>)x&Qam|9zk5{roz~l@m!BJ#0ax_k?@J-J z7wU1UnDu;lkN+GbE}Fi-pBmomBf}XorQyBg-LC=E}xQUx@%!IZZC@zs-)%@`Fm;(Ss!=9XQ)~geV6H9R4*7Q((xb zeFo^&e;fQpC89rCXhq~=mEd%}w;hbM6uMN@;<5mm#msNZNXh_S?dfiWy4y2%klmZh zH2QF;H?4=s_cKZLFgM=7r^_PGYF9K8K>|-JrMuc?%POaL*$+J`FHOU$GQ~z|@oUT7 zK3{?dJf)bWDD<6poVAI@-W0*i5tWnnw?62%NlQ~5Z7)DZfNMqiUhmbPV`pD`>cyDz zJoG2{d#4l*bA9Jl`s&;zjWL?@OCZ}Z?k(fU;v0cphpZL&Z?S2)AkP-}neRtx8d%kd zZsDYy%G2+}22Ez`33|VQR~Ac(ZB{&Hfa9suAA1ThaJ%!4!N6?_&jC&6;dgAh(aQs+ z86FjOmcuuC)g!aQFioM9er&kh^~qlEBNZF{q}X7;=II2El884`L&a^O?vzSi9_?n$ z^zM1tpXn7Ur)VpZMCuQjInKXdo7%qNZuWG3I7gCe9foJ6^=r`PQ4Y@`q>gi09>x$nPxtc9z@lPe(*^SSWQCe#IBq5M zn@-rW>&D`tv92<05=$|Z;*FF|ooAmHN+3IlV*>Ro{0%{Nn1Aq_E5^H7I9(-6a3&D-|#0;_FTm3LLBJby9PpR~5lA zNit_>GIJ(8(=VHz^UUiu)MIYj7Vcpr-WdlXR#k-b)er9P?)*Y-@>e!+E4T3mNS~-t zwKGT_j~%J8m6N+~1kb=1)YQ0^nv?830RW+07Kpmn%dIeaZI0d#rF;MWM8O)}O0x=7 zaj8CyE%E$rS$uUQw;M;hcb+twW4L+VOzvxi@Z+BwB`Vd9Ps*jq!?k3Y&~zHI%n!id zN(o=5X{>VY`=QR+*x3JMidY4u^w4ADi~tXNKIlq0^hrM_!E=kJ9o#)U9-14($E(vA zx(&s7XWpCQ!g$CZK_%;G6s{f9nLWX3I0?6hT6=t-v72=}O5)rmt&R7xyj;ThXixUz zDTLZxg?*}*TLi_E>sx7cDnG7YeIG{+Fh#!U*7+!wOn2vN-C6C`dw%SH>&>U|44uhi zkc##f7C3^L$Atn1Kpl`0V&yyb;H2!w9!r6bxl#{sR|&}7e&uuJ4`5#T<3V_^m?JX~ zfpBuFdy!ymXoIFE$poY^;MKzLjKd~xT{xboBJ;4aHyo8xta zeHR1UDjN<%UH)~$^+&f24O?yH0cD2WxFXoB?IU%Bi~H1~2z3I$8p+zEq~Ol&j-w2! z;u}Mgq<3TA{%wHQRLIbZ-Pvb9g$W}i4)*d>9UmNY{<6V<@R&Hi7kKnwU+KYBWaRO* zW$rWA(AcrCG&d{s9K0(|H>K1_fg4#XSgL28Uxz@rk5G|HWD*h+9q!#hCWAgm*uqf4 zT)`oVY{K$h!2*fu=Y*N{k+p3R(IE3($j3##;YMRVT2ToD<=)Wq9TOWUbj3pemd|)l za!CbLPW8Y%CPbMJVi2ME(hxY}a^k)Q$4<)|N5|(YOps&?ghosZ&zCWLR@G99g2UK= z?bM?#uV7A)6v97a!^sUnzIf*`5K#|6C{Gf(0al7*qv*{QTRbN0`ole0nUznF8>TBu+dNpC)m&s$&O~Xgr z&5sKMO|~2cou1&e@K-=`d**;6j^f<;GRZ^=SFBcr?v*7IK4@> zQ&?2Ot^iP@+2-9+9C<*g3^~NrN9IpnG=`+tkiRG^yzz;TSL-rR?KRCGK2iNn&TQVU z5EO4UOppQM8n=_)a;ecHyDzemuQaO@u3C%kJ{$*n=}9m9`7!8^K^M=26HKRP>l?}7 zg2az?beLPjlrD@GC5~*)h-7ft)!|cuurA?~_^7E``IV0`QwTlX^YHcB$L`uCWt8Vu zg8_WQDad)PT+hw*cS5+9Bf~(*v!EcPc2W?RIeO8f9=-GQi^(Hd=NR5wd(lv$iXML` z6G!8XC{VMcdcZiTq}=LoERTbai0*NH#Hil)F4rHe?y&06u#M+7MrA8NG@eO2T@LFo zRNKxsMw*zohOe@yr@ypP^cR5pmpe!b(ImxbU0l04xPC+8rJHdw9ro&2DHTe0e(iCA zcRj$3K?-EBr`yr{ttc%Z$Wz;$x^|H2SwefZjUxyba=C3HCA-kdpj`UNO?5*%sPyRD z$V=}StRp42xC9!=PGe!Ii1LJ}mWbpxpiHWG!k+b({`xd(A4&%g6TpNMMY)j@)r#tm zEZN6|Fsh0Vi{@4-#0Kyc1;q^2%|I;TjprlO+>U;T%YyY4^0Hx{`a^`}57zy+Z{L_j zqxF6`$6vZ;SOE;Ms`RuIb)D5twD zlk&RndUYz`fRF7xPIR=?AlXQq)-Fg~Dt;_O!H*=G-Bi~l*T7o2aZ#{H9W!0Nn=YfF zb&$1OOktP-)4n=ezb1PjB)oo^SI=qV*l+)-HJo|>?VP_yH2OpFOEKx}Qhz*RR)?%S zb+RVHlh7{cqm1zc5gxtBY`gvK6ZLr);?+l^>}VBtdPVheI!l>!zj)Ccn0e{aHO8Kz zf24^3J*mlxyT;5haSA?JoeV!61FM#At|E7WwWcQ*?q_X(IeY~3m)m@m0=%4E^QtjL z^^ajeb$%>mdlmpuzUQYCC$8AGII{vE`?XS@lMLoSBZ?!hFt;s$VxM&1gu&DD5YvK;TiC5k%6K8F8EZ2vM3iKtm7U7()iJ!|fdyLWGm zpmxh;8q?RVPAVl)ak!zu;mm1daN~;cDu&xhcnD0b27o`eRsJZS&{l3QadXJ`McEIt z0Z3LbjPOoX&=0kBm*eKb5xJc}rsTn~MVkq}-br`uVP!+=xW#v0;V@2uU3-BJa6qTT z5^iYV57V|du!pbljq}(RvR3;CfnZUH=o@!J;T_Bu7fTB(KL`*iHY&AU_C0(BWSv!D zOX*p)#DamX^X=}$EPFkVAz#kz&RAgKbrq&N;{A?5NjdeESw8OPA8>Fq1)%o4ycJxb zzFa&C^g#n#lb{+WF_@w`h$LuNi1ce<3GQbk8I1$rL}Wv_mVz0OyD$%3tcp>w4} zlLeRSdv#*}+2fGUz*Xh7nAiiliSH$xXB8}>PxK!teBcMV|8jUE;o96|+NuMc?5So_ddPp+~{vs~q-uX?j~F&&yEgtvW}VMpR4^X?&XT zKk~}Axq@%1&lOm6_zDjMq~r%v=?PwM_r<(tC?}0{9E(~rF5*m@GC3YToua6|*c>~N zzm96D>xdL{<5=|;gML0+&Y9|a7GQA>0xnVb_BGU}F`b zK#=h|BfLfBC>SlY4dF%-XK$+8+^0&?aq2nqvFMoG|NVP;&nlkr)2CX}k(%r151hh4 zr9qFnl!a7DQo-J;e|z^n1$<@CJQG*1>+Ow{Ld0A`wsmg?2bllZ$s6nuWvWbGY;BpG zZwQ`J@u8>!u}9tensW`v{O?w}sS`x+v(bojlc1{rasNA?e)8VoSJJ-^uS;~idnaaH z^*Gn|@aCCs0~vteKk_x(jpy5-lKXTXn|`C%R{#oaSblN@ME8ILZ z^dpi@R_ccyuSne9G*WOTyeR2PeE{rhkIpqZjizDv8{O=ty*ZP6+3L4Qi18RZU|rRn zyzXQq{HQH-fNIzsGkviU<-&G4sA@KbT7P|5ZvW}6{FkDeeH^kiG>KB6zl zk`oepBWhiJaV|UUVN<9v(geU^U2P50ICh3PbBIEC|MdCv+UU2C)@4VcC#ZZGBl_}~ z-D=@$W3#@CK(&}UB~azim0M1m;O?&Chk7INbnRvF4cqadf%{zM`9Qz%0J$_Kk#rj1 z-Nq6X+)8fTVoc;Z(~uh=AoQHA?am>2lX1$F_w`-R;y zvCbt)I3b@`O9IODIJSZZj~hd^b#rdjrDpE*q_WEG?#XAd9}FnQDsQkSSc7;@!3AqH zqqe?W!VTDA9Gi+vPsF4;n}E(S&gd8a=1uF`ZRr zvt*;-fLGcjgTl7#FKOZ#zB6JQ58`yci_0+X=#aH*p2d+Fz9WN(Xq&7koxK|tk?*C( zHXAtb;sQ4A1(!h0)d&q)`3g=!pM6FE#X~F6?;(2Y!_RL&Cu!~NVgN+#!AN0+KSamT zsAxubuG5{oNu-F!YtVu@^F8Q^#m2;LJi%a;lW)2ranTxw3HP}EW%Xqz#of*t5+Het z(O_*)UrVRgxO5!Jk!I-l7byH!#pa3PaVnyIE1h2MW`Xrh8SJKlc{ljf7nWU+NGX5m zh>g||@LW^73S?=^#@*hxEs6o$XTaXiW$~5v;EX5*?eFhZueYeCqDztFvW#~H$Y0H^RAov%te{0 zb9$cFMgDaxJprhktd3g57L}^(D&+c$s>hCa(Ve4Q+J2J|^VIjC(Y7@e;k=Kp&IO=W zx*o5=oL=KYa$A9bJK!|saY5sicrdfJHx?h;quF z<)4%nKXeA1{TCKs97rlSVNsH->N}iw>82BB6gJw30j1+_DdkLR7(r7sKyh%Le zr6y(A_YAqcp1^Nt@quT(HYH0$`)eFG^V%B_d~@El5lNslV2j=NK&x@an%=lFqa=oH z+-h*lK-38xKd~-)#lFA!zh1PxZT-S^IL8|afX9sy5OIJa6u_X@Ld!)T9 zg6H8+{r#(+w`z}w0*5v~6ksA+VpP;KjhmBmFg>Bd4kh17^akaCv)NcV=*ha#cj<4E zROh@6f|B9FS?XL^cSfihvn_K-cve@IeOYyA=V+zkYS=b?g_k$qO$+cA)gI*Rho%0p z2_Co{(cUoVr(XulbqUPDia9=WB8&iRaBH)^Me^t%(5Vn%=LrEOARrOxAaK7O4P? z%d#GagvZK=Mw3FuKd56iFL}j%UQYf2DpOTiLnT^E;(N~>QrR1B#*R&6>;yG;Wn~(Y zZ%Sba+VnW5!YPO|?0{3D%OX{FX@6Jvda>)D-U|@i+qt$ML=K>I)dh{_8Qg$6A}6=B z+2F-Zr%m;%;FxbZ)6URcB|^G(3PyusNQk6(ab*ec*`C~Ni#`^jc5pi4iY|Wf1AS@l zx<2<#VHr#4ZYB_p6GcX{>D4H&vO`Xb=)}^0{F<#FLT8pdeD~!%M@_`Gnc{AW&*{}V zjJ^Dl2^p_0*Yb46C zoUW~=d(67mUKz0e{BWM&jQRYj=$}xzlb{#RIRzl+8oc%OMY?Z_h!l;n0?cP-=rOvm-6sk>eJ)9 zfKBqu%gAMhZcC91e}>MTebM%T(xN-HTHx+!t_JbZ3o;(ET-ky&YMKuwbB|B$^f~=x z%#AY@Q(Y*`X>~WvbOyET-22!k3d9<4Oa5FKBii7WzR5G!p4GnFM}^&Gopik(4>NTU zXWO>PCfrK5&<4EWWH4cbV|f#UNIWK7t7DS<(?p$%w5p$Z7B4TCLK^c*K#FdoRmT9+ z&E>A*LHK-a%_8jWds;ZzGU#B`Wei4p0gyg^WOqOHg!6^H4QS92dD1$H@0kcgQz)Pq zMX~dX%j5xw@|-!i0?l(FJdgC?7kNi4z0{W(RpJwSt_hM$sh4hBn+nURdkYt~-44y6 zvraSY#h2PFJdIxG779*0s5X#;CIg+|=}_c`s3II!FyAf*AGoitCw)nY5=q>xHTW*g?ac&89js-GvZ}8tMmq_G7ul}=lz=DA#QZ*+B} zgg(*M>-8c|phxXKSO#TZyQuN=r7#G0-P5zSAZdm8euW@;@^^IDxLaKKAX738oh$@P z8}xuuF}(jqH!qhuy!F$&up)iwdm+V9azR_WcYo$ad?%# z>Iq(J;JbS?=QzB#?lc6vxi*rRIXnf47ak<14S@gY0;ur^yBjy5*vY?=#(alx`c2X( zaHphyL#TLku4aI9mYgRN4Un42slmHW1AAfGHh&W-a3lYg(5tljME-ICxXSs&R=Ufuc_&gVm|x!| zEEj9YAtP7(@v}~K{sJh&d|J_x)IXKd2Ww~8L;!pwWBI}XjzP-HxL2VaXT&ct^IL=p`k#?Q9<{gdQSe9Q%dbFAliCKCHxylJX+`8lu_S=Ek2 zsF$Cvj)512RQ#R)#m|A9f+fX4&(7y_!a^X=yt{^mYeSd4z&MM(s7>Q%PpFFg>dma? znD#U-V&_3*u}9FQdgs$3UB9_1aYiw`I7V#i)T7{>*O$XzHh$cv+z3@ru1S9k+&Y=( zav}U-`p-i?f7GJF6CeaHAw(5nSJrzEwQ4<&zLwkdw7vcE9sv+ewb&!l=gK=*xQqFM zp9AF&f2aT&&8K?I3Rh$g-6)?L8`r^v<=rTj`bVm^yK0(Jzk|pH0&O+aIWFLwUcB%n z3bH3&f_w`6?K)}F;dtkm?bmYWUoir#^nA)<*y%#d4GB*fN>69(w?j)&D~887X4Jr} zDJkns^fL#iOSPG<*Xs6@Rv#`Id(&LqVqn0{wFk{jd#<76W7z`QbIATww;$egFA@}Y z=kK0=>EuH1DQ4GcEUYT(v6j>XyFRv9KV04Ecn{f)TR5lTJz41%Yj&cqfe5qm*t*ZUR*%ljJeUbSAS>8|BBI*_h(twlA8jlpwD+TIMD+FYj=l! z#H~FPAsJs>o{#T>d3k)mqp{@{QoPu7prHuI@>atpP>JzZZs?4nx?zUUr6od8uqP>( zbAvVI>&X2>(u((_A>pP)-O-hkE)v(-j4~~L)WE)1AoT4I=GTnuxJ0>L`uhOzX0_$G z13AI>0{mD9S+aS7ek$d+3pECt0v$txz!C9p=J9q|eUKa=$N&$OfwW+Kz-To_E`6<(97$X* zMv5WM`lDnRG%M6$p8yn=`0)Kzo{^Q|?r*uXlT<-yJ?|-A-nJvQ_Qs_b(m$Lxr_vG^ zh^yz-)jGIQbh1ZN>1LgCDK(z-t{ERgN}-!hry44M>8McQmg=U+Hx4kA^Sv zj;KE%%C(?zIk}+0sBECFciqtgdEQ-8oAq;KchS_My8OM`Cer4u7uq z{)4slv_F;NwcYq{g#5vA>wtzmk1KmN405}10xKda>GA6@;dTpLcMF+K7kI69kt
}X_R+j>lz+GHfJxAxSBUTa1t&^kPDx5F>hlFa+Q>0 z1fqE!Ks1l6@{AYI5?R(`lG%*PV4{Jm>OtPStpOKoL$l z$NUycK(KIi|q^92PLq+6{NafgfL1xg{A>YCvf{VahOXE9I2#`oQDeTJD z)I50eH<7-ZPp=K)-ySMHs~3{Pn{jfILEKeiPIBF5vOxy5Hk*a6Q$1s#Tho90jG))=v>jfA9AdjLk?zg3 zANuySxE$VFQQsUPPWxG9zZ!b#68K?7g7E|T3TcCZsz|2Fg{Va(si#QxZqu?;i5h#M z@HMq`->i?Z5NzI4c?U(Bec|!MQ2gP`SP;szJQa-8R94GdL z@|}pn%{DD^$W@nz-*(SzQMNlL*Ta@tT5qSl->ly6;I#SXB^!O`vR7mI!5M#4$(OT0 z-KK~0_6-N<5-zz4YrmD{bvo|iTyVk-rB6K zMf-Wp9sXbjGA-e^LOg*}{%Jenh2_g-w)cEduxj&un_UYpa9;uPFL`6fF)H6`-}S+y z$Ixz{RWzw3`E=#LjKx2iKa{+wSQBxoCRT8Co&xSKo;l-@xA0z+qy1$ibn6kj$f$ik zly&1rkpq&!%h@;pRi$e5%`6yyWYlP@m%^$3hmNLiT)%ToK^W5>NBeEqny@h!A^ zB&lGfmITqADNC+D_Np>3-s;g#E*pPKMD4}(Dc^O5%w4SzYL5$CsbfPdLK(T+AFYP} z(sjLxG_nmr&|7Qt)Jq`l(I8DN$J3uymt>I;N0}PbO1}8aaENx9%(2fz5{sx2^CRB= z&@)#3+$eMWbN5-k3fC?LX1R7z9G5_^1HiFzuH4~$iuQ4{PEohjx1j$;SG(pGut7`q z#5KIUMk30k?`_Ux4T#Rh+kDFWdWS8SF$o=*!@5H2W))z5l1`?;U74@2Fn<{b>dQCSQQ~*6DFcCrxUw~ITkBfL8QMpdu`&yI@`@^YHk1U{a6PX3BMq9OKis7z2_e`lC zr}QrP=YF86J^J%Zy{bdih03_%_|a0j-^9^j6_pITm?EqhMPe4RDKv%>pD7|EC5~B( z9A}0?qD4SUKx?9Xaa9M}E#uTG%_Zr}q52i(PIsejL20hzfUg#aQzJj8c;2BLm*DO7rV0qOs=7OB}UU!5kd2)e#Z72S+;BHj+Gp15jhxl(cYIVn5Sy30LORe-|kU zKA^-j;52XBo*MVWy|`U^C!m2Jh`doXHg+v+z=z>nqdftE}Xc2%uuk4d5~Y~Ui2ws!3{cb zNpG?>IZ;?}^jY&yDM0xu!R3wk9SW0gh4eaeL9~nYO`hBK$L$gJX<9L@i2S+leB_W~ zbG38G$b$~L_Hh6-?Dge{j3apV&x6jJ$BSRR<)su@&Lu3%hIeeyV%=hmZdonnwh{Owj)OW1P`qae!;7GmWvx60~-pR>{ z!W{~Y^ER(W?<0m#*x>J~5LU;(XnPY;wFo;|ST07UiQ&IHeU)n53a znhyBar>w*Wni)7i&nl^17Hw5{>3>^gAkdnp1|rUD!=4(su8D0i)mu2fhlvQ?{#CU( z2l|md;$mr6g^)@(7Sge|oSy@Vfa4_0Zna>jq{$$hK{=_hH)`u8_5s^0BMH#s3=@F` z^xB!_BD$4?lm1ppyipV$RG^w$lV3nL{5LZV6cHVsRJ5hHW_VwoI#EI201th2k-XnC zKB?G-SGcS3dm#ZaCG7e;Ltu;S^nE@1vrLR|;Yr)jEEVVnE+f&wSd zr=>@yx$refTwRb@0cF>gXm1snoPddxy)E|L<&78eD~_47rfUyar!W!>3?oVXkF4a( zEGfwE=+G{9}eTH>&cw=~0Q_<2>Z3~mW zqVHka5Pn&XvSQ#rhF%x;x)l@R*SLpYl}jJIXVB+=r+Q^bKDJ!?6gth4RinuJQBQ+r zx}jEK7-l$BzWN4Gc7EKq{}A;!5b>&h9@I4!g4g_vZUR_T)ny* zOB#m}MSl(5ca&@NbJS6TRCter8S>j(tCnR$r}?8m!B!^Ih%q+*EWOuU0@O=7LeLrRH?Ku>XVMF$2=Dw~?-5YYtcYj32l&VsB zg_JQe#gNT{RpTt!MVaNkT4v2xOoM9m#*0f^z;&xcGlXPTP!O)SQaJpQ~j;xoO)-n$#w5PER|=Ek0<3TP8m5mqK} zIOf*xCbA}(Vr}nu&_{KQ53(Ms{YG(T6gP)bOKDt244tP$MoI%%UKi*1HQ3j5Z9DVI z*A>9O4DF#hnLzhH{ab3u5aimGsG+Z8P3I<6fu6dx#hQT%E6sCDIrbP07w77O!bN+- zZ_55_ZX(p>KT2a91y4MQBn`X%!1XD6&CEp0HC|#~XbczD;Vl@T?ENo%R+l~(L_0HZ zrjA_j5p|{a6r%BsuJqI3_w2s|E9MtG^Jd%FDGv8;sQuhE(x8*mqVmlJ-?%wy0$>^c zGTq2dS8+x4`!5+uDfLG$&6}U97Q5v2T-6S7*s&aC9J~*gDEeZEo;rmTU>l4i z9643zkxo>P-E>G14ilIxv1v~^{;N%=0WRc=$;Iz?kS1&~8vn8dXD2UquwDo1S9a}z zw!P*El!xR?mVRE}U%>8P!3z|8BkBIz26_>tS@nOpUlKrTl{i3ZwW%+$)6{z>XQgXe z7UU-@?`{Z65I+xJg=aF+nO&lLkNo{w}omSDKL&a?Y16)(e=wy7#1BY`aY%>F+7w z=QJ(GW5h8_qv~+b*FD;vF1*#=CEDldC+&BceAqosg$6mCd zt{x5B`LS$izyuOQZ=k<=UQ|@yFBlhK!iE6%q4ej^T{Dn&r|VPj`V($>8Mxy5ptYNi zOC9MvtIzpYRM6ZBJxB1>U}|!Eav5Q0X~_i?%3)Dr3@S9~CXzx2G>kjRe7uZ6g)M#g z4HCP2JmMVF&``%kc53#kS04hc^e3}l{+ueTA42a05nXDb3H)NG5^SUDJG zoSIek@wc-j`_p{_4sZ^33$k3`!t+mAWmE60sr~YoP(Y(aAb3K?z(E_CGL~84ecL#S zdbZ^Wngw35=h1QV+7TJIu>3 z__f%5>{smL69dbPhv2n0A204~Khgz9&gX3Z3kx78U-nS|7A_VCOfUQMLQcJRtK_|* zefk)#)s^LccE|bGzB@T>(DXrAh=Pgge`7{#0f-d&Yus#IuX>9J`^oq>CO zqH(Yv5YCYO9HD7Uj^zpo=Q5`>_P%4H7FY1hWt0B(gVgf@=V72Sp$uROcvp=zYB+QG8qYP-7T;RmuorL7-xW6we4e``CPiB9y1K|>alPHK zeWa_!dEC3Qt@A$8`Tob83YKT%?IW}#6mSwc+`m6ssUSlyYlC2h2wT=Rw__{SigyfC zY(#{-BcX~(23h*exs=Uk+j^fhLS2{G#ckVY6t|N8e^X^;mRcvJ0i?IYuVSw zx{kRF%e~^|b{AyHAph6*%K@#HN_{!~hVag9wtW_NKLmP^TerV2p^>hVBJMhWb9Ss( z^|9aGpT%Qtx;|sFPw{r$=wt0g$L!t17f46`*$giHhAe(#deEg&)E%#1DWsaS6C_8M zz=b_^6M5Q~EBN1@R1fsdNM&XA={Eu{6^~&FFoYJlcz`bA5rAAmw9loIHXzdngM|rS#HA(0 zd&m_Ztcke;k;s{ELa~k1r*ouNlt}FTxyY|kD25N#N+^bxo~BX^cMUf8XLI!IoL^Hz zYVO0zr{APH-xJ&2v)Ff*Is8UrI`)*9^mQ@B1af?^6p*~jX4qG|zk1z1ScM-vC+uS75ipbNK0=Y0tlW|;_5kH{YSlO>>(Q{62 z{Md8^I3ri-3}gFHd28MJy#`wLV}5yv?G)Jqpvd1C8q*(IOubH0NXv||aPOg_rF08z4So*xf0Zi)4KnC$uq=2_@0OYr@ z>rueVW#t%fABIEKPu5Gq!(pwBN9L>afX|3a!Z%yOywU7Wkz&*Gazs6X_n{Hg+Y)tse5C1t*Vf4X00e z^LsHbjvpY93{z>v`%=8%a|d&q<9(dRv&qFJ;#kUYu`iq&JE5_!zwi3IsAtN8ueXr@ zQx$ZCl0kkyy{q+pS&hjSH1ggxItgRr{n-I=!`ZNJ$Fd3zQg+DhvaKhFs~XStoev3i zP|qBp090w2r~FZ_vug#yjhfZ6$mg4`0+}5L7 zCqcp8yNt$c1%~Kc+S423!dJI~=Y4z#3+?j}Ni39Q;#ha7jgQ`Phd#s{@xy{~WSNeS zW+DqB`2RJwG~$S-bjI-PX8hhU-{MBoZJ7`5PMf+jAge18CbCB+Ax+i&vIo0my& zQ*X=Jl`kb?ic|gL1y&(~kr<8U&xdx{cjf}Pk+>IG3Pl{QBYS#GxO>K3(TZ(r9f96& zx51@%$Btu^eUj33)TDrbwoPIo2)3vBu7KWQx! z9dJd?id-*a%nBz|)LcDDL@!l0F|09$Q$9N&Og47Ase@?8v|P_%SCM`jRRGj^55R<( zaBtD5a;5z?yK!NHsm~|Q_CkaP1CAt(*`KY73lMx-K>BBCgvlUdCmN(>St<2Ice$en zijUmc_1Hqn<1|wvphtHS=Ma3(g1uw2tfn5VcFhdI5uoMz&PkBd8hzPbMA&luV@36) zfhg}5*_bhYJCXhG-g1k!mB8}fZ2gZqt7Wm?5W4<~M)<5PH0qIn^N%(ItfOl8C%NMe z2Y2()BwnzaoYSY5U>fND>!Xs+#iLX!K!}Gkj~6^$8$%kva~Q{3upRIJedj#`Cx#^T z`_=a)EyX&nCUvidq80dtpC)huP$anXM#+^qgp7ruOap z{Z|3$n&~Tmi4I7FB*#~LJ{?BBI{Nen$mg(%|Ine`?x4sjfX!LeMLS?+70N46;q%U0 zPIjn5^`E8@eGhs2*P~em8|jxoowMy4Kf5aTo|wm@AIlekowooFg_3*r&qa9d#WcS? z;eWWeZYV>nmnt+dSl6d@fe#?I@IRU+u^dqERqb7Wl-KxvvujqDUjvW+QQ=E)h5dfS zCPuz=8E)d)sg879e53d*w7;_Kx_idJ$Mz??+(Qoxg=N**Y;mD^<6U)1$xa zAIwSSM8)=pIu8;iB>H*jf2He4ddE?Mq zFQGI}4X@VK#z}%Ju*G_S35@9c*$RFcZSsr$Y^x_)dUoqe_sJaPu=3*uLwulgS)Y9D zwn;>w>)cJA{4v8HAZ3}O%kFp7U&iO5UkYFcOFi!OPuKfcBjXAyKXZ0#f;j;d{qR5A z9HIvy%S5wlc*|O_ZZL0;*_{}D0G;kn^3e)r1{?0j0&lPh*f@Rp!-3NcTVE2mQth7Q zi?;6`JsE>-r|yZ#Z`Dno?B)OHfdCe}0x=~I*)=0nx-;akcRg=#8%|jo`PYt?mR3^cQ zvf>U4s9&_YTW+V(z|U4}@j!kc(B1~^Haq}MDWWNid1adngJ+H2#y4u zS+T0Dn>*RRDCzY?8n{cJ-MgKfqGl?aV^wI8tD(mSYGL0Dp8upFfOT3en~rVN%q;4` zFV`3EKi#NY9av*XK2bTuEkd^pwsg8o9=<*sKa;mu@tJct1oLz7|A*F!QQ1h4?AT6p zIa=BsBYwClAK%9^8tUSY(u`aM&?|UPSyTA4G9W@|x|fIUbme2!Bhgm=Pd>bZ4|oik z3wGcBwg`PJjjFgIWF^NTHsFk2p?hE5$^r@}Y z_#K$f`v(AXx&I4ux2Z9Yizj0SF|lKzsr|?4G_tm%qjpYUV7o`@e?05_f!I)dqzKJ^ zTdbU8%tQ6b@;^GrE35U`MF&XfER;XstwbIQb}%tC-hJ#cTuToum@U$ASc9Wqu}#SE z(90H?JfukONItRrH~NadwKYfTw!UIXjxgPt8jRdK)U-MZSW07g8> z%)!&b71F+^p88}!2Dx@mO9r7pXsvMOF!&S!9k3u0>2cQp1NP65!a!E{;CuwGqPL(w z)ZM|{44f$UW&C*WBQ(Y@)+7-q(;BybNDgWDI^uM^jY79t&zz#eP26IL>^PTneKqdz zHkA3jnPEX7KfCvV_3PhO{hyx&YtBO+Gp^1^LSqM5!jlk|y0Pzro(1FPO;$a)vF`Rn zRX|^@=Tz|Buo>e{(1me7)0M(Dge~HBryYujK#0KJuTxPi^$yh;$!IUH1(Wy6EB_?_ z_t(PK3EqQSJnRD~pS3qFFgD8h?bWh{X82s|)n6+}oGW_Hjyvx?>A7w$v>F4|+ca8e z?I)1!y8|vyN!1*Wc~=1QyE*=(9VsQD{hhZwPQQKMe|}y}R$pGWax#i6DHAII(c1Q} zuIi%!fyICSwW#jKcp+e?Y)5l886Kwz@L(U=F{GAQF#&Fs!Ar%qH^{msAXe#J4){76 z1x?iOp4ra28-<;k@gXXG8PsZgi#`3ChQ&ixy$xDu?J{-S%)CgM-i(ImK8uybuFwr` z^gVD_=*oP3FRN{rUu*hGWqVpT`To%6z8!kKZ2hkAN(jtrDv_QYCwH*Pw0;9R@SXw3 zChyRdhTsE8_+%_&M40hWO*mJGRL0FEJFNSlORp)T_l&3F$9BBd6qT%c`R}0jbXH_G zGvc1=H}-4g45aJs3qHw&E!Dm9&8p0J;{{%wjdT;rrulBC6k_%zBi~-)?oQ8 zMe-Y{bwx=swTVKKKoa9mi#PZqu)8yOaSy`u zQS;`0fAP`7F(}l=37nB*g*Qp^oCC6hay#3{{Nn~iVmx)bLtzoD#W`d^=telZzT|E= zqXIWZ3-#2LHdSY^HeGvcSxFt}qz{4=HkF~V>Ds%`@(v%d4|v%hastO*fo;QYT_8;h?Cpku0+!4$r=m>)&=2hmPRIgTdo=22vBtLX zl(i`k)c8N_y?0m>Th|AQf?@*{MWhK9K&6RDZz3I}D7`BkLXi>>LK753q)8P*2kC?s zdO$>)G-(M00fEpGij+_SfjhzTes4RU=lpx`{g~&;GZ|)f)?Rzn-(GtUh3L;WmOtKa zdrXPSsE0;!{u{hT0^1BW#Y`sscuLfwCJYts2 z0m?mA-Mc!?oB%7UDezm2!g+H#g50?SKxw2HFb$2;!(jp_VyfRHO&#UCRrz|E-p)0F zBUk3xfq|m{=lvI{m$0|XYS_hcPy8fD5LDK;)3nl00oybTcLO-N(YBpAegxhDTwI=p zSeg&t0it|C+21*@H3dE?m(A==V}rDFuGHT%A!{w$>I;Wb@Hx-f+!M+e z5pMM4Ck0s7e&?}XWYL?6d+8n&;{hmX{^cz2F)Txzq=XSzU1x5sIS*?8i^Iaep*lY1Sar8LU2+tb}YyorZ8}-JM=%?4iFMZrIg*{oN7!Hb%Ap!+g$fkycbd;^E(E@^EkiDpx{)QaksuvczgQ z5#Jvi9=f+Gd`J|tIT~JxS{#r*TqWAaK>b!kNkaYGYK)FW^9tv~KBAzD#;D*|7L!5@eFg?lV`YR3P>LJ2| z8spc?S3Ch$R_JWkWRk|&^o9E)N>KRHB-@gmNRkTVhy{cO@dyO zT)1To)VV(z^K*SjDGDG~hUybw`oGL*UgXj{j~^x(_Y+`Z4If6=9EnY9f=zsB&i>tW zBzfMzZp4UnES~+&7Gq-a*Xc}(X~TT2%dQM4nfkd@|P*L5k@F59=PZtPg4IcoV`Fc1bH6v?r_uQ?=&Q_KNss`J-qUc zZ9a9FzBAI>?D0Lgwscu*cVkK$V@AFmsd zYegLM)|8vGS3x9Xk)a zJKtagIKq!#dYMc-y&DZq)EG$`Qbq!>mMb5Q@6WuU{{s2hzSK5wk zl{OJz+bbcs-s#vqphI=QQl(aat_gSS4)>)2lx8#$82?&63+WHn38mi=giP(IEGNar zJrpOYS0_cq$5Mx7dYhYe&it)LRuVM6_UM^H&$u@F>@Kf&bn)wLn%ByxPZH*V9l@6l z_r*ma>o@;02VB$T^P5MKyB^y6x8>{fF+)&*nm9#OcxnMf=o-EU$*u%A>aX+DYVWmA z;o$u9HY>|tek_x?8w7n>90CS*Zu94h%a;wIAS(#}ZQ7V&DzWFG{w8ap*O_Q^)Rq51 zU%GA{Yz{g+J*Ex#jo;vBvWT56r3p5hj~o6Z(?R8$iiH4c-6MD6yXqq)zMj1NVEDHn zgTzqSyv8h*tJLV4+Ajj!Xc|j`pdklaHtW5<+hs3LXo7zqG~uV8_pN`wJ0BPFYfSm1 zgn$O34plyUZ%p}1?BGQq{i^?znt^vKAEq~1x09||I_{I;n8_eXJZ@+-0rA@&Z=Jfi zu(LJ!*>vphofEdTU15Th@1*;HThb3E`Nn_NfV|7Tv(5h#F7YDb|C+5vz&z<%4PgEd zglEL2!x2$T5=rP8SVM7aHa5h|qAs)ce~k(hn@Z4%XOTl|t5?5!e-b3gn1I)QC1CQ5 z>(tu()-MW`LS~}R{i7D(uRw-kQy&o4Mk)^NxBWbYJ)f!=K zia}N@3Q_5CeC98{5c6q(_!B%zTsI_o{xy8G?Y$Y55X26jCsB+JbMC6w*e@9&#KFFrOpXFeJ8TY6(%FH~#Wfe93bKOV;?Oe)Q)BpE zj&{_>KGSOLk$6n(OtiXgR|_q&*(|^s7J>6?I-~N1O}w-eZ4M~6A`>V zR6qs6d{^Zw3q7H!^H&X|^fg4EaqWd3b^xqVj@sxZwz~tCzA3W&FAWp$^KVo50PbmS zs{Im{<^vL1T)s;8cT~4wGa~57wnx}Z0I`8CEr!{9{}r|CXYt@aT*H-{cT%L%cC07G zXvB7QI-~CA5{=f22MuNZnC|%}FjNr*ehb`6nj@|&v5{cHG^{%S(ISoWEJ1{X`82;( zwtcOUwEbluFwy$7n(odTJL=zYD-!U-Ete9Zp4!QT@hP4;-3QdSH0?wHq5H)C@v#>q zVCTW&4|d|44@K!8zyC?*ov)J8tKNs9a&7c)-$xh8_cQ`Yilyi|sgIECSvxo^MS!hxZcXak~!IA9})tC$~DbN zX^R6(viu9S!yF70WB~O6W$)SMdx!fl6rxz3wF%0j2FU0c|7)`DXg+yCUW?>OZ4{f? za?6vBJ*fRtSA0~&BFmRFKyu$x;%*wnSd%?&CId2^KLbDhbZQp@ zQkw5#R^0LhvUJ)%wGu~F9~ty&i>)e7(o(3fP=Pq&^0EJ=I^>^psRu$;AQ#9;l?Hz@ z=SeE}p+?xM@ByL!bEZG_B}Zi~-@-nU=8eg!|J+IZUo-z-<_#I??>Ued9-WXS0HXBw zEVww02_ZXwUwC#Cj(I87cJeDU#Pc~#|FIZ#^|}+9E}wy#dGYG zW87JJ-N-Mo#{Hb*STjTNw9KxgFc+nyzEPP(d*_=m#g9CKV=;}4dd9g)!y_^&-*qj# zqfN8v7v;Uz0$1b}LC1i~zMoNFqAK@{vZYO%(KCnveH%xPJ1?wk9Tc-D>Vmll@myxf zQ5j%AJBBxU)#@dMWkDnapBjs)V;uYkf=~aPPt52nnFkPVD5xsEDAo|8(JlAT_Kp`) zwJi_KQG{gs$t#&Z8Ha~93#~c6)vZ-uDRh|y7wCku40VD5m>nR9L>C{%)V=aDnFDF2 z?6UN?+xSL>MJ7JCsqV^m%TAY@noNRw<7z#;9}#p3txbMPA9LPVo;e97Ans+aHq)o6{%0hp8iv5az382%hQfUG{J1V}G=6IOA1)rnTlh70<9} zK%*As(oK#0UFOgMlbi>^LZ|8Kl%8I{lS1W(+d$bAofV?koIh)N@qPcpc~5Zz@eA)S z<6L%e_nIc3BJjIKa5aT%eiB$N!5WKPCeku2#Z(2SyDR1j2=i-sT{cV(UqEuK@!7qPkbD+;&Rs>z zBy3Z|+DVRf*YsKPTa|4qzcs$qsBcf@fHw>)Kh^PHhps*WweRIP=9>i;OAh$6ar=UT zXqVn{&G0oQVM%DFzH{}j%I#kwbC)(kev9T=3Ft1-d}cZZ@BdgxlxD~ z6SRRTI!1P&M2IbUa1zEVawTfz!tFXCmrA`PqMzMpOx0;9LtJW@5xc~;@1>DjXhVPq zFBCdoD}zxyF9rcn80%RaB*x>x#|td5A&G5~3?DCH@+xq4KZl-W=n83^onMOrtLN@* z=Sr6~nd~0`!Jefr6uoabenH03JV{953Db4(o@yFAKh!!UH^mKg8gT(&qtbQwOB`az z#_>_+``Y_`DL2Yd*s)iJ$xV_5A?I;akB})hh7??MHugW3KuLrkkRB=Jprveet75Qb zZV_A^s~u-*-0@2<^@*lM=>H&#Ml4r|96!L&BX-`CgCir(OX#!#Q-*?nDpgS3gUNva z`03j|&sRrE6xLwf2uJJbr@2EY1E$PCPyfXD47^|dBowmn+(DyaCv4*FV6!1=7_eC$ zPdNXuDNH0g2C$?*@z=Oe^{cPJunF%Vg56i!3Wcw@g{;kq3X3;Z8yq)jF-ZQ1$rxaO z-JLB8H)1LbaA)luKQCAqKGIx?`sj)@OupeCwrMkN{E&48N>nk<0okkLo>%uMZb}obE@#V3!1s_+1#jOm#oSVH=&xG?e<(hm`3hN_1AY!>#AL!_IYn! zSdQlamuydLqN3M}!s#$Qs*Td{OOxL%FO}GFM)6{; zEkmH#|5(Ef7m4c`Dc3@oyP85Z=N%{$FkWy)$5aJEj;Br2ISq_B{dY9RfqKqg$AN>R zg&Z*;ewVwfAvc=dKwOX`S`tAkb~nktCA&AwEbfpF{vK3J^`z^)1ne!3eahP+@RQsp zAi!I9pr4Q|{Vx+B&v)6#$c2yBI()IUb+xtV`Hh*(PgSV49DkiT`IoB58sKh3BExYj zQ~LHTbjvucQd6*6CnKL+%6icWz}Wsce#+~u!+F&r?uJgIZg{KERL-SQB|cL?-Yq!) zP%FUF$fp?VS$Mm+AX8P9u8Zd-euys%k|bP47w?^+*qvzW$;i5i{-vdaKU z{p9`;WpSo2iLZn`lthTvBV)=&^@3F#);U@R%J`wRqj10jXX~M>X>7ii2=HG>Mp)UG zg>P1#TeVF{ZCRwZf28Da@0rDo6lcIpj*@KnE)rd+RcsIVW_53VR!Yz^Qe=C(*C_?M z-^=?GZ8+2!F4&mv-S0~p_-guG8c$V3AK%O1bc%hcwcWYNeLT;AZ~C{Hs)JPb;jli| zsHd_I_8T|he)-Oe@k-5O4&nxd5y-VLXJrHhj>s?xBlv{l9^MnvdAg_!M#p&@%jBEA z$Lr$&YtWZ>)B19qdhf4rfDZc|2YCAB+X$HD7G1X?Q|R((=(x#>E|di z!+3lP$+3E>zY@%At2v)XS$w#X(D;PO4y^cwU2VWuWVw!&3h7U?88@M10|RSvj)4Fd z3vpxs7d#HdcFai~?7Q=aKJq}9PgmAIW#XVxJTU8vw*hNp% zG96AF1ZO`)uGW^Kw?q=N1`rTN%%K~=cV}q3C^*K=16g3yPRRE1-8 zxaLbBng#0e$oPUm<-*I2){DuBd!r|Fyqw6mbvVJ0i8|`gn{$3uNU|#_Rq(2HF*+ka zJadqj3$^kA@2*t_4;v0ELm-=Y9IL(k#6)9PN)I68QN@#^nV>M_ZEK>#KJwcYbyHLe zqY9+>&}q_nW}65l2shndy^@N^($YsK2&t^D4K%F|_G6agAd2tFZ5>KYuzbsECv`x|NyLPCmz~Kg)_a z&7cKV5g#wmPt@`Obdb)-s6hQFi{S3Iv+a^F$$587tVYO~aDF3D5jtXEw2&9wtrh4% zNkwIMXyTNp^(@5!2G-7fs5m#0rxk8*?2@vym01S>vY*i-hAq9RmGv!4PUR;LcEcSf z;8-yVq~>t-^^J!gF5uk2A4}K`fM64OIWMLTDLb90qm?H3BiB#r!s5?dqGzMnB1lpn zl!iU;PmmYlBxKuJ*&bBY?jptVV~R<^-_zn^u~|})(5P|!4@91`>{4G|bVuT*>38mo z7|%JM%E#%4(#DUWj^3(pvz}Xc~5}Q{4sN&nWRnR@3yZxj@o@ zvg6qO+R&7tBPQgjf-4WeyFn-4*ic*^1t&<-gUuqLH*-BUK(pjRoF`%`7Q)BW>v3IYifOKT286XGqPvm zp2T$)@UHsnF0psgKPNN?f2a2iU7+3cFP8*}|j6<&9W2~-l*S-#^%fUYZZG7a_ zt*IMB@`$s*ise(j>(8j*w6_ewVjD5f1ND3yj)dFUTtU6z6Sv#!NNW4MvR&%W$5m<-kwUqMlLc&jU z0AP#MkdM-?$9jmV_UAmaD@>Ladq^|hx^lHr69jq!gv&KcV);L94mLaAu{|tSONqCd zseL#QG+e3mZQUQ=D{ z5MYIkonoK9C-#kNnFkr%l5mxJI?Kfz#_Hk`>o5%dS zbwz$yI;vqYp8-sQQxP=G^~I4^-SQ;a%aS}PM9zXYc$^N*@~$Y{3pb%ZF*d|Igx;C3 z&YzS@q9dzRvAy2M<5a=AY~55z#c@v<4<4sg!_=xRKP2TLC2A@5S~Fi>QroFAVQG=8 zvh82f@0%tyoKz^&I?rWR7-4R!%5*A*KGf04HnuHTA~(-6yVzo&y2{P(c~vUx`dINi z72G4gX(2ypaK?9_>bB#KWIpdE`c|_l(+1SK{P{2DjVSYBCy$xUtp@mYW9#@-RVhAT zH~9;%eo&1;T_~8m#N&;Hol(D+#x-Pd_5D`P0W|AJxvq+>JYti%$9rXTvINF;=?+0Z zr3m2skzl_0G8MHsLPc3Fl-mOFey?Z~Tkp=nAv?AdLe9VuoUOMLHF*f zRAnL{d~pfRFk8`td)QFiqf`UUxKI22uJ(FI{m8`S)B0vvW+vJmcQ~?wu)Rt^>MUsJ zlQ>k3rzZWw?1~V-=$)w&51eK2lZN7$Sf?S%1 zR+<)ghf1vL=gY^kyakzG)urHwhXF+gf2%Snn5F8kzW*-N2(z3K}S6MWG!;8cIjx~#z*lp#~pf-cz4 zFUEc8w5nygR?-lUFXvfj^XowsD6+)=!N8*My8s5ZXhgXD{p}-^!!6=JY60YKN_g6? zy=bcB!K;?S6$v!2a-1DC15F;^-eF;_YOJmWk%{OV#fZh#3nA3i?IpN`MmWNego%{# z0ZDyJ*%Z?mjLK=4W9-Lp#K71v&y+F*p}&SU#G8KrEwiGZZX7G6^3RZ28x^> zH`s75Lyn-dc|O{jA0Uu6U~xo@+_fI~c<>?~R0^z&tE8a6t z0WYLo$Y|sIWBdMC{ft8IcKV9F_7scoS7U(R!+DW>d8Y2`d!|{Y-TMc{8Ib&*<`1Tu z4t!$yT58_>kj3WS_tiqV^d>tEr$`#6nxd8b(tEL6YUzbXh5n|{XTXIl^i@3jmfZS3 zs9GC_#eUuKGOmc~afWQ8m0>W_D0!r(HiQ~inz3MA{0=T4m=}YuZR1eOE8BYrH5|_8 z@HJNF>*Y2E0`e5*uH6sAbKB!q*CJ4m{?65P}}}8UPG;qKs?}2PrF;O2uTQV_;L+8opA7-JJ4;S(Cr=f z7T9h4_B8;0yBk2_a>sl15O?TC0jOLsqcZH|AAp<*j{m}ArXC5{7b_`!2fW$ zFMgSN@Ou^9eF#+`0F|Q+A+B4Q5#lWyp6AL9W=39OTInE^gDY3u?_Hl7rGoUIw-MuL zG4N!1tN8gIw3PpOH)bn#9R5EDU00e12s+m80qK`v)hJxO!KP*sUD-a99=W__o+?#k zlKXb=g<){Du$76#kZB6-OlR1ut)YIdo zl)^o%+QP;HPYx-Y2w2&yPd7}R@#gpAPIBWEtVbjcY9QSdMQAH7OpEO9rNSZ|x2Bb< zDH86h?0wQ7MI^!^=?}g72{puJ+M*v`{r#pK&VLLH)@S!mVMYhXTf>f?^StGr|9}|{ zn07wcg;IGam6ou>o8SB=#JJS*s<>w%wW<=1wD$M|XKWRg5<+38^c>^GvmNcwDc4kn zm3`C5Sq7f0(x>%t9uVSp!!yUl^7;I0#09!km! zpU?*PrDX|K5nPTyeV`o~_0b+mK)8Nu_wchhi+9Nv z%U^Ya6y8VXOI4k$R2^g2URkZLd$EA*zME^AGGtL6oUkPsjgfztFj}lNCB-|cfvvmD z6gXXd@-vbYYfD5ix&w02==XNnF`A&WOgNsM6XDmfVgVsq5*_#)-}g2@W66%-_`2L$ zb8gi>zla{dM;wQ5*LZn6fbVYK;1eg_hY+LYs90tt`3xs*`mhS8cYLQeD6?J0_rs3O z?)O?#Hw$64^CDG;?SyQVO-rlHP&Iat^}x^UkbZ*6s?jVeLB7miNQ4V1}G$+DtlD;*!3zadCL2-~+He6WtL?OW&ANAhqr5RB`{A z<4F8{Q0dZ8t)K~q|hr$V;`+Y3BCPi&G z#%c3#QJX;#L%_?I>f7c#Vh2WlBp`ijnRd#?dkA6_2s_WJw+5@pMupBNaD2XHtz{-^ zV%$oT-^Wan9rFG_d0oBvHCPiy!_*1-!yr~07{Z&XAqpH)gH(v_t^|N^MMJe8X4YzB(D`n-W^uv!&%QOvFK!W9~*MONzD#M`4 zGdY}HMOs_ujRACuP&2Z+^b;9CAtW~t!K^J<)gOlS^vKu1qH>3Ou;CFoZhc`M5TMU} zHc%UA-ctelMZg zC^`S>I$gz={opzXZhyYqgcH6i{_UCLfnoNc$*<5PQdmM)4Rgy6?T{ zcWOR!@Y5>8HBVU+7UVg7nWdAEHU;X7pbE&EK8%9AcwjG<@oMHhu@9vLeHNL1?w3V% z^!q9B{&rEY3d@CWyv4d2f}T0!RU-rg@JHgo$m&duoX}7oWvM8*JUA((cp#hb!T>=r zV5X+mwAzZ*R$!gq(lY*Be9(}4ASYyL`m|D;@3OC{wxVniwW{&grJ45#TdIiUpxwy( zx3VIKf26GKndY?-HrlK5&8!h7Zw}1qZl@^cXQQ(X?IZ^8sukG zaAKfzC)@ZHC5hz|VZFOBqu$lM?!3+7Q%b(5C7xz zZQqLfldoMZ0B8%jVIFGAz15Hx(QP+Q&xZ)Twc+K$d+RG?NVUwg+dE>>EKVoa9P)wI z7doi1H}=KfF89^&?Jtx?#Ew|(OyW7mO25N$UMJ(c$eC!2W5+ziPpG@r+IFjIwiaAI z-d=@^&5b0LYSoZEOugQs5@83*it&Bf2skcQT!IIDk=uhy9j>f08Bw5zVl>Q=W#u&m z+^(;a7a>@g2A0Ej^MleO8;8x$xZ?vgHCmv-v1nd>> z1VZK7>;f=8*yg3|lwuv8%g0UeOCD^rW}Gn6`3w{QtKP=rZyWS51cjf;9-!G!Zi%r9sr2q~15D)sLp#mj2Rd02*fJk25-4+{xR7!RRLkDlvg-uSh!}x=^)#!J^7rI~PMNnYr`558-CJflQWLV?u zM7#V$Xal~C@ItIQvYmQsVeB&f)o;U}?tI875tFnr$(4#5aL!`o!dc*O9QR~9ui|QR zeEl=sS#eKqu(3pU-&l6#^#irn@=F?fE({v(6KumWP8(E8rRoOleJ#p*vTjTcfcV3! zMNM#Nn*cqj|HHS2(JqL!AjRGdpU{@A>biILQ?+wX<>6W=im&zN!srCH zKL&?=pE!164cj^5-k<77ivuP zW{3Ow6YTN!wh!tQmuL{<74x48aoEb$b6vI#JHcuvgkNq_Rn!@Uz~sd|^3GmWeCzbi zqJL^v&#GN^;0fv`3*`DhQ~u`N51Qnv9>sHkZ_Vk2;6g2Bov(=JIf?Vmj$6K}SauP} za>kGm63q7wc=1?MC2vpN*c)^rY$3X%EKe@7)sc9nm#R7XSn{=qEGb=-(J27M-&{3d z8MRuyBuu9ux8<&i%Q?2TH&ptK7ZH^8Br_bps@|3lX@{`aRI1fggH`%I+4gIZ-C3P^ zCB>La%rA0w^7zC>@Of+}ExJ6@sgLc5bbSb2Y#Dz7D{&h-|H#zh1|o70HWjxje${rk z*-Ig=s1Mb^b3Lm+56{dVHqdSXNy@fE>CcG|3o0#rPkDsjYel>-Gh{i2Vyprud|U*k zeJ4Mh8^HHjfvaCpN5t*dYq_u*5idzHYe1HGXlsgO50|mr3~wz{pWJ6v2v#w>Rn6f) zX|tND?eRu{r^N(Mn7`nl*~hnNrYDJVSIzEltfJ43)Ox0_f8FCDb0N8GSF)?05Y}6y zYDHc5k8J$xkacN>+C#`!2HiQ?;CDFn*lSfN!+Kt56~iOy2PysQQhk-)@&o9F*>e=T zP}N3soJ(wH|JBokIT*jD`^BcwGzQGV;7tb#QEx2?@gsDw_TJTWMu&UqoSl-fjo(h1 zP6mV97xvMM{EH@w6@ttKTDtcFnZafHzV~JF^*D#|9!c4dblAJ|oW=ABmZp*IOH!#- z-kGM1)sfctSNIK4gNgZ2hjaQZDk~34fBF`!q`s%ahrzD9kqy0E8DRiKW7(x;&b3cm_QKpOTVdatWIZXI!9kv0e#RwC0yF;nRT+_boPOt zexKv=-i+1Z3b#HhZk{=9=lC)MYUWN|LZ^t~ooiEYsnaW^Wt{nsetfmkkq`6}8ctP;eXp~#5Lu4T%Mq$L zW;a^05=Hl(8f+6WTCX!Y_HNI?OvFv51!}*&w$vINgxXZrN7R*IhZuQ5&lAO|0Q9DU z0!cOM&5l%N#p%uATk9?owmMm;4!)`v-|-YN9KOYZji1uuXPD@RHry)Yc4aM0%>zZJ z%7CA3Qu`((KJiR2eBQIz9F1g`pOG~C78*?~o6KXkZXOvPI zxA{pC)z!0ZjO&wr-u%K4iy*|n#K6sB6Jo1|Xh()=^qF27*sQ~4&MXr6%>jPZ{qmm0 z6)@LeJm$gZ0A1OkN>LP((7fY@D%L)9?f!MoM0_s^`mcbAS3r2Q-E{m7ZnOW%`Bwp-+;or>egw z+?CLvpCy%=s*sXKlwA}uyV@Zw)iva{j~SJ6O4eQP7ryaJ>?q`v@FAf`C_s{xi)9G(2%rT^o^ z|6gRn@{LMvA7`W5V-=w4_#IGIPevB?64;xMEHRAq$wp4niMzn6VKTA@CrLHRPkBk7 z&!2rbr(AKyeqe&M&P0lhr$cna05dZnCA7!GNuja_T{QETR~oW;=k(-o+|E}UIiF12 zb|{nV`Ctb7)DHaADp2Z9Mn)eodY=78)CVe%7)>wY2G1j98cSCxrxgnwvKV6H(p}DF zx4F|Mz*Yjri2|G)8FZtp(tC|XFi}C35Yid-syqk^&9b+a zy~LDj%-*E#UHW9-y*NQYh+|UfTc#j=jUiKoq~~mF5q={nTkW% zO*{{xV(7jtM0Pn;4@T6Z8zv_L&C1ExDg zR|f;E$|NJ}`$bG;ZI<1fhH5!0=F*v`m$^I2eC0?jXp(G9z*z+cjl3U^`8KYFjkD$c z%-1~&35V{2rY|+L(Ev9+{o|$yw(M^vg$~ToF{>LrlZ@Y=MG1JKb=#6^2Mb+WnDOA+ z5q>hV31D9$GBVyyRTorfEUy|EHso3}8H>oK#f(e^wCS!2fHF|I;@c^L<^lZu55xA=shYyOamc5RwK52VJ+8M&CBhEe_^dSzCX^nr&o7O5K5s zhp_tH3YE*ugn7+%e|X#Y(J%|C`_LDLg_O*pw52cND{d!XkKx_&fp3Ts??zgz=Obc? z&IYJpo)!;%!i)c&ld5rtm=q_WK8x6%D8$aVuM3WEZD$P3+vobT+OHX#EW->I-SDqB zw=>Xv!(^IgfwHY@r(7>Pi?DU9O(+2S=7|JCThHnMmsV?&*lgBP3r~|y8OiJc!*rKI zrgxeO*!6T`Ebk)lBCV*37a3=OOOkpQG29bwf=8$14|o7w3TEptXqXCMYlkp_1EJGE zdwkl!o-qyc_CWiP5{{$OUz=W>rw|PjW(M|tbgwBI*;bV@}A z2PO-z1OgNVlLH$MIu4z7eR~6FMDz7OiTp+HvGmKpoSrPO$Zq2KgQyuqxR{K(3(yFC z0qN2oME;_eZ0INOV5fe4A$!#^TSM2QwpuLB5|3c)^>B#^?K$XwQ02H+xlZn_C z!cvH~Uchjh<~{r;k-zBu9a9hZAU4zVt#Nqb;g6ILHb|Q)&X{h?d!g2ooJomMmb4YC zg`=E>)&l%(H&-CWpL{9lv>#lclRsua5i2irfkMthM(D9j)N-Tm%5p&owq&KmzApXc zWS@p_c74H0ew~hq?@D!_WP5{+;DZRSKKlUXjnv_&)dC^&;~Pw@o%UddfK!5zSSYW>17Oro#|SqFo6gxG@!5b%vshs?Db zqDziR+%7uV!M|!CIfNf7x7_lN+3M_Ct}xf{+3hm5Gdj)_P4RgDi+K>8?u!c-IyruV zFX~&Sm`mffw$eF_`s0z_fPq&pFRWUAVH_c(-QJ!+_L2TVexzABuJ@xp%&T`_f_qtx zVkDwcI7Y(eBTfSf=w*Z)2UGBWvA4$65fZ&#@pg?!^@%*9_O%*%YB{UwnnpShNfW_ z&z%Ra26W|gq@%8apBD0weohdjxx$yk1EW*x6lpqEA(F5QzBZd;t#8_ch_+ZB1Y7&Dz!ze0 z6{(ZkZ0*lfKFCD1?5P}ct=zjp5{Xl6l>c?K=i)KtH}1S~!*$CRp}Ry~-zi{hIf*R$ z7esse6hqWny}WN+rwold_6HC6?JIH^0CAxHm!mhJurL?cq#TBMEco)aRndWY2nt
tgaZ_d4$VF77I!zx$Jin`8vnW)J)%&C{L}v5M{BA z)?t+;6FpCH3`2$);o^H&HtTs$Xqo<95Am$U`ywaZb6mWChcJsUrGS-C~}t zOh3*2$v@Cbr_f#9?aWW%C^HU$2N3UApbVs4OoqPWu|~?kNozyjbH^|b&QnB@M`c~{ z5(9RJkAE0-d?K?tD^WfN+}@i3tI?uye<7O83h%)Y>v zpF}c%rf<(LJfOa>l=H~?V|2Evz^j3n0e>RrFFH9#U2a*p9asj5JacY&yj>1FxZ!Xd zlW231O)(Al;v-E4@a4WS&^M|lRuyEkP(vMq2ST^z{eYWDWBhjS z)v*%4sy2Chna4mGG#mzC4V$=BPNBsFNrFzPw8PeA1($$9_!NKJ+`;R^@j>m65Pt%D z|KLWpnVO`i20CO5|Am8vi^a`J!^(_+}X=Ih~)!oMLWi+J@ldloKp=|Ka34RN!Hei45sF18z zZ%!Amx|)O@F5p%R*Y-Sa-#lq|q*<2drfmb5%`Sb^twlwp8G_x}LxlA{OIspdYP?z0 zIRSBBjmXzod7ZB_H~MAh&W3}zeVkNsqT%aR%16b30VY&S1~8LE^3=3Qvbqk_g>)77 zr7;>C(#1mRN7Fw)-ms>|iQY8`fVNcpm%6_5hRD(Nyz+XN0|V+gCI4YTD7kjio5@cCnhC05l>?Tib zapkG{&-(7h(C3MliD&=A9;#2qRmGR>)DjX(tB21k8V07`M^f|jK8SEl@AZEZmmU&8 zkN))eq{69_N2xTs;@KfhRf~g?H}tjFplg| znQw*eF-G558m+2s*rH#qZw&URxLMSG-H|JOm|~dw3~G5acQ}1RbCm`#1m^+fsyB&a zQwIH7Sh9^cUY9nhp}Xon9z;G*MB}N7j{S!(H4bFvxofdSE7&jE@%ZIs_NU(hsTlL= zEO(}AdM%=6$jo9L#jhsNa)`=pT_F?QV*5(>!o^PO?dSZ8y)lcZ8&#;cel80Z30}&> zC?$|sau?*`jB)IdN%{vRoMB<|e$f1;XNSUetY)tM4F)0)Y-s;;P&ZjHU;6r+UPZWF zh!$uc$vlg>bwe5hko=1f%9_eKpiMT@WTrT|4r5-Eo4tU)r#UzO-!0nBrE$V3G({*CX#mD~OLvMg6c2P02)=hh7@Du~Ed)<`X)ZHB3Ai&0u|I0CWXz13& zIL%$tw*InkQ)Ms}aD?P*h-3x|I9S>&Er=>caEnfVBj;+@FMC>fwGZBt;mF`lDV|4UK28yDq=8l zX&pW?8@;F+!MxlcT$1tDx{+~Qt1wo_6CcF9*B}ug>bfKofx|X2B3h0^Ki!sOYqwS$ zhj~AUm=lBt=^lIYhZnK=#Ek#)ni=hoxL$tFH8r_GKL8rH{pm5~zlAOgPh3sLJH3Y9 z5dDNS)1hqwFHh`f+=bc43FLhq8q7MrPrj+w2Zz<+xOdBg)v9$0vCuJB8uz7K#ZjH} zZh~+Xu=>Rj3dswiyj*^w(wF}cnh_=+NAACqP5#sxV;L1=sDJxGZ>8BiiYRvTKiWJcx&G<>s@p3X3b6BZDyF(a_3}iIR!Rc0M+{7f7BQ%2frtZNu3qyx3e0 zX)S^!{qLX0c?#g>^BAt<9sJJEe{4i}Yg8LkO|Qv^0G|2Y!F>zmurGCap@8Fi`Wwd= z6?qDX$eUmGiDP@LkndCdZG<(dUqV+s=J<7el#0fF-U6K9$p7vH&tq=<&+pp>1_*<2m^@)!!jr2>Qo-2`H%R56aZua!3K3BD=9=}DY%1Gsx&mFyV1E4X{&xaTuL|px|jDSk!{QdL)PDsndT>8fa;C)HX zrlxV-D@iO}hb8t^#%YOZzzgk?Pb;Pz!z_@JoBv8@fH5H_h5mnJB0s$peV4CL+rOt? zp8h#E(_^>vTIcru>d;{LyOdM(Y@9pnBG_|mia-L>9drkXOe70|AnA{6CD=y~e&J%` zsY~@$tz;H_uQE2iY z$*#%VE%S^>gMsVMn?~+GFC9WMX8n;M(fP%u%VY5B|5VgPdc3|*)SLIGs_xj(jp^2e z3&Mp-k@16HA@Vu5D6IrOvhYK-r9u`_<_QXRx-yo<+5OeEYX;`^V4Bcnm6`vtLSd$( z+h>?Ah&(jCIR{v}(Z*MBwUHllHy z@4~Svu*Xk1E3LBLsr~&Keas8|+GsCIP1Z?Kz)soo6O>* zNcl(!0W@OeVu1C=;8G8j9rMJJq-k43YRSC6bj5W8hwAOKWhQT>nZYCn`_H50%`UVH?}|A(^oj)trK-iIYxB1%LH1`|SbPa?|bA|eQ)can(SV)RZV z5hbIO=%V-DTSPF3KI$mJ=tggY8Sjzj`+S~!Kkxfn>;0|shqbI_oZ06-dtcYJuYKQg z=)nb&=WrQt%nL=lUY$qy;y2ljqG~92UjF8HY?P25w;#5);;uRqckmf_2)Yp!>OA0& zu7<(;ns4tkQ$l>ak&vMcybULk=VrupD6?` z?P{DOGv8iUdis@!hiebSDWG_Inp|_eo+IKiXAj~|!2CE#YQ9DOf zweFt{*pJ^=x*;NeN`39jkX$M+II7(y2I$*w4*Y=;K-0x|4;5%D#f#ay!U{I(1-%YY zoVbR}UTD8I{i{YA_qPAa`McLpMR5HLZ;aTyE&5|}&^EnIFs(0G;W{x;Tt^XHkcuCa zytjL!GE;@KU=mJbP!O9#(>3U4EP~thVYG5&4E>97T_RcXIo0b>&>8dPxBdHG?!hyn z7YMBO+{+6&(2Kuv@-Y(bPrA-Q1Ey&O)uP{LXoKCR1UiOiuK!VKFH^HwgURe!1<6AA ztW@G?)tE=Ny&4;|YF^fq6}p-Ajt`$Hsy(@#HUZov72U;13Gr0{kzLZZ%Yqx}gy8ya zv3_AjrvxAhO3loA73h<>DbCq2t}?$H0Hj(BB&unk-ks5he`C=+a$oMpb=+(x>Or~vN#j)% zh=Sn1OCX}6v@?t7VSivSP=)KB7Z%h}|8nG=EMJbjBLYx&(@zE3)%>tIzH3p@e70Ki zP|0c~NizHI9x321^A3T=9+RhTq`&b^e;ENJq5t|{g8S~9R@Q96!U83#z%e{iSsJ+6 zD#?2tN8QRlj?_*6H*>}Vc8rY-S`(9E>jFU{1#SRO)8{deG0Dh%#?(ud=w4WiHrqKm zkOd2~*muXu_6Jf`pEn=BeemNbck#y&BQyQc|4|Vl^DObhha9Q%xrNy@49Xk?j+pIB zB>a{OE-Ne^!~(MJnQ`@}oqvj28mpDuNdDc(7*prK)?@g>;|)SvO60)lf2hHKD1vOe z)@616pXyi%^ICXx#o}wLhSLio++IT;@%t0lhR zC;i;Bpn+pNHk@#NuT?)y1hYC>v4sAl|G)S^7ld~MVPrL15a(mM zz2gKHe#$d-2hdb7bcxhV!S{Ips6dJKgutv4_if_5^?uEn=671`)k`VxzsoEZ@4o}< zf=KGsl37mN&J-=PMz3lFf_lElZTmB(+9DGQbcR~ceC=cEEYx6243n_lJw9TN!yA_c zm7)OeKN{m@X+6d#kR6n{%z*!_(_wW1m7DlyWD!sgxv~#0V6QcyiBw@5mR*~;4r zNFo1Tm$G5tB@6(5WjP30FCY2w4Yy;L`s?!xGIog?V#thSv(L=Er`(5g{;e0^7XC$S($reBuUW+cIi>;f}oroS& z`B;__ZRg+Xjf)CB>@jnZU@0%9K|LOXOs3>Ak8&Mlc1Rl%LRqoZ13{(7BPN#q%r41W zQXtjwnaxn}z!BfvD?frN~Y6sixBnwRA(c@NGnm=>Cw~#&Aa+Hu)!n#1K27n#% zJUTFXOIt4y zYlZ(oB_4b7JO$$lg^O&e@0k-&Cw|KGpBHw>Ts#uG)Z1nIz6a$#lU5=n z6&fo&yq?yAf|?RH+DxGSN=@JWfQZ-pjPkHM!s}h~=u-0r5YQV!-Ay2xMyLu?P=6ou zUzaruL06XP@l;F#Ocv>N8Nd;y!xFdqWobt|xV_+yR3L=iGyV|*2u^2EQ2I2s_)`kY zN8twm5ItdlhothB^iADg@Q|CMDyPD%9>@hv0^V;jWtY&*FHoS9sYm1le5sqtFfj;AP#XtiEjnn- zRM`5jNBvp%gstDm1l@3)+U$=&;h)X+4eX2y6e-Q8FF#dJv5O&6A3o|*9p67x;}>Ub z9oGiko67RI|{iw<=%Tm?@mE z#l$G0N@#sRU%kmAjXRG1W{%EUWk|ku%P}_Ke`MBU;rrDjZzXPP(|@!9P&GJj;AR(B z-;+^pK&f>@1exB#KZ}VfDr^kKPb}mObGcqE(=Qix>%{H7B@MX^y!UI$xiKCDpA1Sq zaBKV(hAI3oZ#$u8J?0ftpva#I5q@`4;nM`4lrZg^@V7&-mfzJQJ%jC@{!$!;)o8oZ zO^MHV&<~VweW!%m6KQ=fh4>O6>GjTTMLjvqBj-n*E-f<|F|M#3up5I6EClFASn?p< zy;zXRjbE}6Syt1ZwZr>PitA`;@?mGDq5@+o7eZ!4Qn~-8u1moD4{Bb#0XzLU7ZT`u zMi_56`u$3u8BUR3wqGp@Tk}Nz`Hjzu60LIo;#rpWi#HuG7H_6M5XRiMl z%WIdg;BSWb5ay-baC@+nxx@5>g%(t1e-s8v0I$68QCV9*x(41^O$B5!Dv)bv z%g|Lwa1X`(F?)#HMbhJod;D*#D=kO#%8eCy|42+gPvlaExg`6f3<{D0TBNJ)O>L$n z;nICq`Zn{fCV+E)Z4$Pm%zY(r^=4#=xpGAYcFc76MZpqi-d9aMRCf(OO)b!Nb*%$7 z2Hg&`udMmAZw7R~{^3&TP6#Tx&@0#s7EJG&w;EKYlA|2K4$r7qtYV70qpQem?)UmW z(8PgxJ+c3Q|HIRDuJ9E@95tDC-FR`|7XDlq&zDV%|0mxbczk{e(ri3eogQ z&!#DM098w1Z_d@=zP|dE*sNVecSL^qgioW^*|;M$eY>H>ZhqiX$yF|6;l>#J|7I@# z`_A!4>orUa-NW0z{8;d+1+V0rcl#h0X+qmx*r!@KPNMN39FXDG;yoK9~ z>Ieb#Cl}TKqDA>I_#`_rMwy4r&R=)W#YPLHpzVSGD!T5id|V*Yug2&=Gyd19_l&T( z@~t0I8_a)pkpn+mgLfYtoB81;f%oE{r>!43GQvl+Uv=o&UB3dvfr;f|D+Q>V$qkxEw7FpngTD3V`{#C?&~dHm{PkC z`eP;cr>n0{lh&NKi+WC;^ijIy=g%k?-|(2f$9F3^KkPNtIY${>jDDsJzAFsBBcqCU zPxPbMJXvghNXzZ+GKj;W!u27SV#Nxb=3_c6?@Dl|0@ zl>4jW3K5q~sO0(3NGjDNKK1ef$f%7b&Nvu1>^D#o!E|@{>a)v*`YechM9hLs=rqVZk zBAk+B)j~I1#K`|#u`)8Mr?Y|$39Hrjk{_d9GuqtqEv+PpSYLazevOI^tk68m1Rr|G z#sHS9FZQyD6N~P!f&pR{_hgQDWM*o#IS94m43JlC!_Ov!|3s21>E-svK%Xr)Ty%jN zWh{pGt}-2vlf(sJ+nQrm<3~b&RXzO23osnjgsuq%-hKhGbg~oeA3btq7 zNcxxVy~@6yBrbi^{x$KRnS_+&eZTq&eDbgRA;t#=FwnhUZR4y^qpG3W*Ii1CC9>qT znWC1Ck5SF0#4UTDl=+P+bJhG41MR> zgyvD7yMpoucPO^YboUKs4;xkOjt7^Y@_vp@sGNi{8Hd7 z|53p;N^^P6i>IGncljl1rW~}zUhgc>$)9ysS5cxEEH8Cgx=UX!2``tfx!xcH3&V}B zD%=$(`o~EzYoXhi-1TG_;8ma=JGD{-8T9HxC`O7PP>aM{w@P~BI2`RUvWND$3hn|h zh`ZvPlU1edJd3{Nj_rAK^gcVQT0e|9d{Tmvzhnp|^5@GBhD%ttG5tpr2olcMpd?$! zhel~T+CN)-&XJR@DgvKOF>XJ`yxwp^CMnSNj`*R>CxMz^@&;iV=JiP~>1Tbb8B?%D z&-NT6RKUOW{87DM(o*-rRFVJfKh{3+UIU^#hKV-9d6Ja&>=Hr!ZHn<2SC^(?C)zbM zjhtg(eDhB3OLEVCgKYmU&@vo|>4iyAfb$nj!0j-<)JT9*P;BbCbzP? z_--7oWQR(4&KzkXF%6DXt)q^W`xWS^f0pXy&wuMWj6!@p_E$X7PJS<{wge*;D)*&i zi+Khd?1GNP`n1CMH~a{KH}3$gMSb!|7m(xJOuvhxGYEk?e{W^N83+!U^oV9bR@#=D z+jTl>1qBK6S-Pxrt4}6l6`Xwe8(9YNQLAO1`R`q;JcUL7ZA|`l;ruQ2tO#Es?vuBY z3r76z(A&;fwV^~|V@Mx`fGX;YHo01?&>m>n7A~JpLIV%QE3r#?DmqYf&jL@_*MY}g6k*M#3$k84;Wy*D1t>wB> zJM0mVEESN<#klQK7rgA)!t(Fx`;BdX%ll2JJWc&K4ByzDIFB@!cQCwxLM=<~Hd0 zS2F|Y`!By9Ik_E|WtVqs&Zt;##uR_yeV7?qzH|J;wR@5%a`6s)4Q*#G;?U4G&)nd? zNY?bQNnD*^w4%t|4toB&=7A-9VT%^ozuko2K>2qCB1tMfe6=IB&FzV8X{rQup1V8e zyo{`zhts!gM>ML5x+4}Xt|j3_F!7mw!U^^l7=La2o!oI;%pn2n5E3c4^-a{zXU*Ba z*Gp*uL_|zO$8+M9_$oWwy(mhvhuyK=!^t@BHNZy{z`51MvVsN5^%B&lH@!tpjfMGK z84UejNs1eJex?zk+ns*m9z0z<6<=cN>|MFG@}J&^>}9{;_q_&nsFyyY3OW|5x#Isq ziJoP`zjfo?%Sh+d*GzNA=ud0?Oot9(f(&oM%Dh(<(x8a(;+7DK^fW_fzKaWbC644K z#EMM+XC||g-O;{tnhl5iArL71It?h0Iw+fA~phU<0uR6Mg z!>>1lNLHTF*G4MX4rxB|6Aer@W^bIR-JPol*`=CXj!6P+YT`A?)hXc?lB4>6=be8T zn;=R?)gdz~Ai@PQpo(e&MMw3-5TG9{ur zivQT*=15V0b;>?h<+Y~TFFWqoVzLr)ZsHgqeR1O5dv&cH#gY}SJKbkVwQ8R1O4 zQt$`;7NXnjCCn|`fD$_`zJAtH^#uRZ(RBsv0cOPK#mTSJjT0vo1DuG;%?E?v;GFr7 zRvG>eXhp}k;MWDnSCGCbJJsz%4HnQ?e7Js@MNl0x;{|@?2yx`T?{^Wq$Aj07mU?XU zrkds|YU=%mt4-g?mT|x*bsH$aT?OU9A*V+}am-l!={sc5SO`3}cOD=Fe^O<^*D|Uo z%kM+d%$%kE(wspQo5yKo+Np^NIj{#FegpeOIB2uQS?y2JAIGJQgIiPTxu_oL8&=;n zt`beFQ@}}nt<-$GC@pfwjq=*evz%41XR&PN*{1Y0NZoXs+e&pf>Y3F= z(2S6WZzSx4c)^y4BlSdZZhrH1AY(t!U_`xx30^uBE}_mp9Opm~p7FQ^wVEcyTk3Bi z|A1vWHzA~rQX4tMAi>vI>IhQ9U(l)r4 zQgzZJgWMFnfM9b{x0{Ier;YA7p7U%nNXt~kc%Hf}W>b%&x7@7v0Kif7`H$V^=+L#K9>NR`QxD%CvGeOFllTn?3-fE9~815A%yC zPVvWj1W;@V)ZADRZ5B4BLOqjupkIk49LhbxDVv2ILe}k7!uv3lqOc-9{DnMa&91BQ zxH!PgyJvYs`BXu zf*>r>S}H|2Y8jYpB%4a#8MH$vystG8xoK5xltAA~<2yB#j&yhfgD33UFVte8sX>IO z$Ql}l#UZ8G;MM#YwL@g3*Wg`oDR+&#Q3o-o(;@2;0-P=o~10;y>$<1ofWu7gK z3lhjmM7U5q9!j)w(um_U=8dFwf|_81`E+^4xeg0=iH%OFXv#Tex$ghNQU;dh+Msnfyn(UR1$XJE zCSONBMj%ouU!7dspfG6b%jxQH?;P*6@PEcKcDnhq%8;k5jL|(# zTecgq7b)#wxI>HMl!2ve^5|B(Gm6jMp@7<;Z!udEUHuP?8Z6TcmEM>aO z(~gW`$w*-YzXZBVf=Lhca-~STG)#1d5S_%A^wF$2-hUX892Lkm*;UR`dGYQdxYZ9R zYAdxr*PhIFh5=jmLDpr}LKd%kH<~gXnpsBdI(zXBGJMjgOJK2e@8rOFX$|uE_*yHk z1q3DY%;=t!PuHyxjWL~nHH?&t-a{qZRLDf>_)B@NUG}UMrZU@u73v_v!K+8F2n9Fj-MCMhkqek{_@u z=l@h$-~NW3`xiP6mJJ6g!d~26pqe89KA~Dx6#=~9{dOAJ-0N%wM&{Z&@`5ZA($&0Q zu%FK}CG@8JpFCa#l}hllO4LL^r~I;Mh-M`3jeX8k?S^r!-DlENcWH&JYxI8+!s%W| zCM03X-L%bj$4AEIdd7*DiM{%Aa$yZxtk~<^k`5~A8|0{GkO%L#E3;*u85UaC|12Fi zl$NjjOr?FkJwC=n#mJKUs+e_|BGL>G^|XxFcgt}JB=-QGktgHj*e3KLz2{ze+K#Xp z&#Nm?YA?xk*I5CzEwAW{RxW=kpsqDa&mS9(=iDo<@4^8>`z4dTgc0pZ4|mFl*#!L- zlfWwoDf>w0OQlXQseDA9g`GckoJmZ-3%A|aycziIA`~8x&Zv#ASOMX1AvI0#7wf$}=-U;Gj# z$#0cWHIfHO$4BUxuqpJ_;X@kLwsqKZX93bv+J|Hu(Kqpwyf_Pdzx&FJ8($6U|4Tdo zlmfQw%4cfwHzm1`JuA(zNTZ?)O*rB&N z`~hnlq5_ElPFL^=u3NFV5cs!-i=tKhcvY5eooW z3R{y<9cr57H96QCKpOdF&KG<&2UW<2@LoHQ4e9guM#OAY7W!l()pN6YwdR9iwsX2U z;_DjnB?)p*3h_Q{=9M-iRI8m4Hr}_o8*G3!MguK3&eH&xyXv=#5Tn~-GOF!ML@g9o zcoO+V*cS*|g?Y#m%0BFW^%`}R2Hj*_F(CHWQX~a;@xj;D(DRs>Jb#L9Kjj1Ca}Y3( zb?i)RwN75}R1?Q}6&T++4d2@O<@;!~O?4~<@$=$gk*sQ$JmxGynray*-{io5Y2Ex= z%}#%rIht853!}at)$mLd)^ZhEAzT_2)8=YIk^<4XbH^1Ru)Op^r1#t(7UIb!Q`cm3K2*sVr5H)2chfhR4d zG9R>4?$a2wL`+PLdZw1rA7QrfRl0k-9v^a7DY2JoSD3a;A>r{OOn@R zrluCA*~9s{9al~-&$PMkkFQMiUqMAG6)kOzOaDx}-mEcuzv1F1D8uO+oQx5#1!f~2>#Jt)Xj#Wz1S zPrC&X=`V}lsD7(BsV-fU*xJgz3Gr*ujLrqRo1Tu_z2~CQIx`m6P){+iu_e2O@ukFW z^&(&v2I;f9;(;@HiIz8%qPqYXeA45wYs%A`~G(a+5{7m&#G zp8cqS{Uhgf=Vy`wZC9b!vNZgCX!q%BF}Sv4%!b@jFdp%Y?XD|~np7HL-#nI8b_P&soo^GmCyY%*hz!^`oX zdf!={ZIY+%S{@*OI2v;>82i<|YY&8|6Q)Ae0h^cWR@x|~&cmlA-Fu0d{PLPj)f?7B zxWqFiro&LJmJ%DZmGOw^Pa;UfyYnO#1q>{KEHGIz_jm_uGKrOHXJ@hLS_ z+O=O;C`f7m55g}?E?=acrqQ3bbwD;|*)M7zDL1u~H<9xq!XfX${^~Qz`|&J*1#{@M z>99$9nJJ~qp1;?i(^Q}b7-Er|vh$5!+FlrVms<2<*9%$rZ@f^dfED!h(@ZibAU-#= zIZN>~9ZpGfy0r)p`3(moeXq}!4cn6xBqr9t?Dh?mg>~eQfgmCPEGYM^=S?|QKMoZ) z2L`6%4JRk6SziSyeQdl6A?_jH@$F=~ol8azef(%9qUN>Na-MS3oul3@wdUnKf7)Yu z>0oq}V`vQpc6Bw+y{7v`P|m>M5#|#H|0=Y>yK#y8)y#EgvOo}*T7REx?f&aAz>L!) z+&UZ8SE>!z119uNc^f|qUyp2`U_6`q<;$RP`xQNBE5~Vgj=LB>B$g$(Cc_6JmJv$u z>wx2cX&tOk@K^2O4;=@=4DPliXRC?8WQhN*V?E_+Jc#AK9cJO**Xn6nvI2_qP9&SR za6FZmL|8eYzk90gJ;A|7;W!e1-HE5B0z@Xmv1MaK0U)v@G^A1Qxay)yYR;!LS>j={ zaEj!K^HmlE-Keq4Z_Q@`BW`6dj3Ms|bZ}epob8_oU;~y&_Vuab=f9{-oDc#=_1_$3 zeFUY0Z!lsXBV$b;^{P|Uy)R8m6Ad{Y?MaRU0@7cVJb%Pu?4I)Z$O;b?$vlSWPN0N#yK`=Rh?RcJmwJR?+F z>`EnpHaEY{8}VcNMu2d!7JwA6QP1PQ*$cZr>>UtLl8^+}x?EIUE3HW(&Mz`G1x?rF z_}j$u8zC~7fGs1R74F?GXv&qmCVdj*DV+atI%W9Cwmh2SwCl@$>&wtXO61VE4V}=V%;M@ z9=j(Oucth@=_(XeGbVkJbV*^uwB4G{S>{>hiiJ<9(A6I`5W4#DVRSRd>DWp|Rf&RX z^kpmk$cEAIMC!>vrFZ)x`SEjax4JECHwRPcSVQgC*@Z4<25IeSaa(4s;#{-1{(Yrs ziI?7UBAZ9Wwfme|1v%X9!ZUn;H-gx5V>~;|2P~Lix){~R-fh@H-B2x%Z}-GJZg=Bg zJy8p1GF~I{1C!%;l;?QnmD=)JvtcE!)Y%s5DLq@hM6ToCl4=au!QU?J_l=pJ+ML4C z&egCvMdy807IzMqgcLLbJ+?Uw>WOF6epCVF9$P?%!6^gPV>7Wbt?h=e?-L(9a03 zjq9u>2xs01R?scEJsaVtz1&|zEZkk5X&Q3qZ~<_1kPJCr$EOY-U%?HT#7otv_r1SJl{8aseBacK z>b-i?i3>8v#+5;>QQ;~UCc)OU8=3F1pCZZ!UdfxJ7|S=3P9iD?eZi9m0}If3ERx*F zKX=`?fq1o{&emV{St2}!%A>KzLe&$$RaL7w)Iaqr0RdXoV6%#^VSFw17$vbL_#{mz z^X#xAXUOvNFo&dC?6yjH8vM-3>BDN;tTyXHMj>ZsTMpLK%`!AEWR`EBzN)aQp2M50 zR%Bz9ccg!0*24dw__gM?b7fZfyJLJ6O0B8s=+^hG(h%#4{DJirKk3_^I^KKO!Nzlb zCzg1Q{1%o~`kpkWMk!&ecu1=6@Nv-4{=q^0T0ZcE3ghM|p4hMd{)4|FZ~QG|L@s9T zak``y+(2XBx)M)w$n@uQ{VZ2}iHW5OuzUCs#DaQw{4g%$m=lw!N_Lp9EwJe+3#jLG z`-k@m3{L`ZL+l~^_T23g*}^depxpT;y4W@((*J9XW5zypC~jZ6MORjq0iH9H`)CQYeIgF~A}%UlTO+P4;+2%fWR~}rS%2;Y zF3q%2DZrboZ(p)sae5Y*^K`GkCsXA@^*e(5Z(GZyPl6!}oGZ*K6Sw+Vt$6Pk%?t5$ zLKv=dzjszt_6|F?*9loywwtssXuIN$Sn{FHy#nP;j2G*>vM@~rtxdig+oLuTfctdV z(HDW5|J^hJozW+x+>ZH7)7Zn)?#EGdxESUp+dlwbiX(BOz89t-(C- zNewWoqXkP+amD25NC#EIh?vrMDPCDs>n579>FpCNIB=D|wS0O|auyic`G>=i332sC zgvqOCa|_Bet46U{a=rygU7LEzx1C(mc_wUDgn#}y9|jDz$d~iG6U&fOvFGJCgb_F~ zPk7)Xb!`g$sN?lJi1$tH2FA#soNalP1!9ab@>_9Sl=n_I^V~&ZLv0}&6ydHL&gs>l z!-g8M`W_X9Hix0*&MrXZ9B$US$)#||9AR<52)|?Hl6lx*%q3-Y8x@;OHL~nr+$3|? zQ|ch2XBn`xW4xwROK#Wf-VXo~!mS+~Eo$vr-s96ic6U^5D>lsv4}w74&I4?zE#qX` zCR1n8Bi;^m0m%?+XAc&F6jEpz#tX6GW2~govqJz0x$#31u+5&Gz1%%~g{{B34NMUK zLvp|@#F~87MGf^+&I-*>QMczu1)C&A(=}RrdQ?8J!4+>R+Dzgcfd%qa7EI=bYhL2l zxxep!+weHu23zoM#OE(*Thl;?NI3?og47Z=t{R!gC*jD*WhMpR8My_o)QPq7%oYw^ z6eC7>2&x7;QLUnr?rP3t7SXh`#YlsBWKd7Ljiw#Jx#y1{wQIFF)20VW>XB5@I&GyL z!EK7H^Skke`tEAAcKf5%3YgQZ1)|P%wGij*2Pizq1Gs)HSM+=Tgo6}&e6ID<3_WQ$ zB!=?{a8o(tJyPeCh~{?0mJvcUvi~ZWwQzLyJN0RCaP428zYgVO4d2RddXC->j!a-0 zyX+?a-4GkRsr^#(j<@G_FO;CGGHRfr$XUOW$+b5?z28a0`@44#zV$anU^dVWs?dD* zNzpxEbE0 zreMsi{VYh2iG9`@n9Rl=HND(ui(4vFrGR5>6v$g? zlQeof_$h6|`sFIPiYfZ?s#H4CSAiLGoP_m;ote8sbBr!8TVAJj4Bx5skgKY_O{%3@ z!m8m^0(5gVfLq=2>*M!zbps#x;Pj2QMV}2ka8*Hl_~yhXVs9nouA{VSwG2};<+nt# zjNZ6N3nf_lOM_C`$21?_{)7M9H~a7S1}AgJn*Lx@kaSDTSiNl=6qF_Zwa?eoCJ1DH z^(oVclY|?Bum33ft=^cX?hB7`+*L?IiP3`kZ5J}zi`<#nff%!XmPQVCskUy@h1`m3>W!E1| z{4Q!FL#|?-DU~iEdnBBVs~11nx^o3;wLY74HW%CKzCGt89qgHC!%KNQeBKJV@DsHr z97;<2pIrt3t513czqu66(gOc{PEMv@%cGL>OyYu722c@G=9hzwy2c6 zQF$z%v-m4jVbD^X?AtC?XJ>j_ar!>5fG-$)WVp<@6V4-av2bofg57ikCli^R%Cd5?E23fQ3?1w#t+Qtah>S}>r!gQknzSKP635a8ePZUOB#_xFVgs2Fmau*45TmA1kyjA~@ugcP)*q5$VK`;RA)U?9E4CI*HGD zoCKKkH$kXKi;E$#l+wRP#(qogA1YcD&pX?q&hH*k4O}Yd-=nffWPF)GS*29==<{zv za7e==yV^6&ZSnPbWR+~c1J?KTgmp>ZNR48MCYR^^r5hE73DPSfUlAvr8~R;UrlMQk zTX!7|LR0gbe~I3d*hgs={Yo3pj}I#^7p{3t$hghqqgFll&R)N%kI8yz))_%(kQr)I z;Ud0Htti_i;&o=Ea0UDOe#923F}-^j4}j{GOA(;cN}X3g0N1?;B=s=y?#C z+t!4wE8vryxw0?_JrXxOOdadj!7yjEnlD42qfGQ&$_Bjw#k*xvMVg1{u-@7kQ$BQY zKAVZP#PtKJx%no|$je!=9a_izr-zgyvM@v~nxQ^$IxxBXio%J|Q^^_5)_aEvGEeYo zClTB^rZW#`45o|Ev)ItCE_-Lspxda_T_J%LFc zgV(Lk&H1k?Kb%okPi>fi;@k=6*um5FpeO~|se8Y4Ag#geGA3)BT^-hMlM5n7qZDGD z->ca_zq>RYrQVIi`XHUQA?qt7KXwNim1;9pqeP)FDsEHNGe=J#TqdS@+`Y}XcOUW6 z3ydw^Ca)J{PWJ~fDp+l;kf5G_Uu*TH>nQmG>bQuf)}`!1`gmU;D^#XFlxXX!mEPX0 z&w~mgWMKs4$w1^p^a^*DJjtP|^7^??PS-wg4?8`lDV`^Q0;l@L&UJt3>orbT!qIO6 zxq0Z52*E74pUa9MDM5I^i7in|`FPN#>l{K3zGqu06ng0U$1>vwCgq1rww_C|V45<3 zchj{X`mQX28ZohF#uy4FAYPphm=eNkKBV6BoKqi|Dj?#HC58u(iuXyZ5XZQBo2T(nF2~i-j*aPMGHZ^7YRpsMl7D&dg@yvtFZGxkT1Y}V0%t=iD!Zr$ z)P#@FQmqd<8et7CDk*mpwZ+yI21sr$&{;73r5Sf8wHH2Dm#L~QF=nGG-zR^y?46Vq zH(U|Ik^a3dT^x`{*x1RMF47EAi@$m$t9Q*B*k0OiNGFj`8gzP|T?fQ()jPQV?De8zf^a^R**-xtO%SLS z@7k$O>Un$hIC45aOt()pqDzVijL_U7fa`jF@f9-e_>Yd%n=24HLjkBlG^htKA)PMg zX-?WgIeB1S!lDzqIlaTp@WtW9-+HAh zV!Di;z0cFx2sEdIt{k8TD}N%`Wc ztihJZRQI}1ERVVvh#<q^fo~DUhzOuCQr)p$^!!EQ;n-0jRR$Zc@Lz0rKD5iAUwe|@F;Fhll3OlFo$+l zCK_cc^ih^vJO8V5zIDlb{o3lb3MOfjnY=Xg?4J09Bz&z#!Y~J`!8@b-uRdu7CR))G1rb!mlMA0Mcnza(ZwrldJ9PryC*IB9R@% zm-qY=>cL$GZdmA(vfj2Uaa{2QR6|wxy25PEHYZ@*$cvRXnF}-SkRM!C-;bchTBmR6u>qou^7CSmE z=>Emgnl;;A2gVxk%FL>}=iKAu@aLuJT%HJ#dgK{7G}@2WUf!qZMgfSIDtl2{;$Xh) z3glA)BU6u~cqNxSm^G2+sA@!jon{cP!)lgIi*FP>Rd;kTY9~ZJRZNXj3{RQNdVOAnW}A;7wTYCQGk0N* zp}N;QVB^&}=#3<))fdpKuXA5MSF9vciKIG$^;+rtkvHFhgAc4uGN->hD^l7_%2Z{C zr@VXD2m(E)cly-Ui28;UD5oh8KRlX%Ce_{cp?5=c)7LyX-D#6Olc!{V6lUCiqZHB? zY}vhp5Mpxee!02!3b2ydEAMP{E;r%7_qoY(Q+E^Lvb%Z)`BrbF->oWr{_$haWC=_u z9Yp)u`Pu4iO!IiL`kk}N-sX)wW%l%hnUZ=_d1XTHi*IM^`J7q|v+_b5wZO>A2krp^ z*(gKdx$h374N(_p*T@my_mb6HVt(X=ZsS8t@a|%pc`WYRcaPDtY`*Nov^e!U5qoI= zk7e-_IcF1!(K{LB(3-R!sJsb>rtt8H2&eIyXU~ zV9S9u$#b7pmGiOUKIYy^lf)0B(?b$gvgB><bpUa`}?k6v4WRVMu8Rh=jUmY*l_+Ns&*&_EOoc|d%iW7 zG&v-bkCO6yJDRw&%%ssQk|;4ZQFV7b#(jAgI7gh$b6kCUtBUL`&1ewkT-d=zbro-S zRs3{Z0a;4l;ZOB@Nzl~m<*7OKPib76$f3L|>?uL9ERO}?QD2K%u4|?hQjflD4JY#s zal9~j{-L_GsJ@6n&6}_QVOp|+kH}?9wGi0yj7rcu(vFm)3CdF=*9GYWC9iJFr~Obp zW`<|H8*bt~&@g`fKDF7!?%}7)wD`76V$JdBfwAzMH0Liq`Cc-e$os`M)PN!1@lk()%2>f-9XZ`%tr$H2y(3MoWw&N#dG4`@z_ zh?lrj3mu+6FfDG&H>!y1;cTQ2pob#X=!W!L>FjHSrih5|u^DrOpkqd!b!X(;zlFq0 zxe@|~8BXo!VYB@dl{KH6{;RK3YBG(D``Y^Q)idh_m3BUW$(!A!c#W$0R0o+O_K zjmxUqcN)wdt)?fXY^{)@e5%-Ej=im(WVeguv%*Nca!OW^5oDsQ!Uh**+~v-u8KJSx zPwIJp>a9A1bL*S+Q(GPn@B@XZr1?pj2Prgb%`Z@G^)0s{NzKk;=H1!$E0=zzNg@H4 z2~xm4hdg6BW{Cx_08SLY^NZOdM_{)&0OwzA*kZ6%Zt^=V^NVyY*GVM@_G9>uH{%+L z^G;yJt!M?*E5y;0qwJtLA_Vp3>+Xi}xn z4T}rHzp54cG$H!FY2Fb(JgUI4;~X`uUYoc6D$WN-o$|G78E|>;$olBKKYCHZ#}=~` z-V|frB$k>|NF8K-Ra8TZT$40h!$zYHop2l)s^RTC5c)JirK@Q>FRib9>Gm30eJ1Tl z*!s9Sv_6q7w6wpNQFpEmn^ z9rupXrm=U$-OGa<{ej&gUj;Ea>hW;DKc+8u`sT+S6032&G<-;pwKjL8T$-iSHC)ir ziw2iT1R>O5L%wn3LLs$tnWW(Pbr-RgT-H;t*0&Z7kw>|buH^4h0o_B zcOE?&QBTO};LI7~JiN4#1^pOUl-Bha*5;>@V{k*TUo(HN1PIOA>E%h>Lza=5$xpQW zd$KcCTOTXqt2Ya8r&9G2@5ZT2t)$icmB@GTm#T>yzeN8OAHF{qcP{&@+J@#AQE9kec12$ydkcD2>Up_im45B&&z2$?CYuO=cn*z*m^-|K#U*K^-5fP-UZ&t7}2bA8siF5fTSH|on~(n`0QWA&%#y4*4j5J_q`wV7?#YLA;%PX#CZHkDy~q#1Lo(J~T$UN^43yBx3uE~D^h zDc9V2i30hUs@+;8wiLfR!?abtPM}zCb&%EM#Fvv&Czr9)Mcs;`O@-q-w%$BO%xR1Q zQ9e{ID^p{Ot=&`}r`Brvy-34sUS=s|oySq~*8WMrFGF5i9u)+G**NQ7&f8{L&Mg8A zcx_TPv+wH5K-s7H8|vccK$V1$o4o`&(JCF(y`S&(i7B7?PYd+N6_NFg{xfOte;5x? zTgYj`l?YI04@i7bA-nsbnq-#^Ht7hLQv;S&D?Z5x*Ikbz+@=(1Qt7h};{_Y&C&6Fj zadAWw{DAD(ak?w)pFkg>1teS9wQJ-y=SsQm;_yVN)SOUkS;N8Hlk1T_;ESGH>A^gH zy8RoleQDN&n?}QIZAP_UFHo!XIpf1fsIU5|sCuFL%o0acDGj`CDr5EuyB#mBrSfjt@PB+h|)tM=L*nU@S?HZsB_ph*f8~>&1Z<^?BfA5Lw zz`v)INE>@*_e0L8?XjP%k#C1Ooil#G{Iv-HcC6nOW?B)FZ2b|oVoN0jiY&sV)*EwI zQ2Dv1C^{^0vP_F6Oms&>Dg(}%@L577l>~&bl!smRYS4hexHb?4g7$ddeUGs51o+$c zww@JG36+nUx#6M_J}dbBxmeJ;)o&Yy00AZUFh9P$et!26da~)0KKqWE4>&RR9~qyp z{u`JjUn0POY9)m!~p!d1l=ld8cMnelMqx*yXJ1w?gT*bUB1zJbf=n< z-+qBUUB_zWrKA-{5}+nZp+_w^A_Ryo;{#ZG03kAesPAAwk1AU;*sB1@(Im3-z?ch( zW&`;tAYEhntE@d_Xu7Uc4*#eT@GL_VclF))#X)!*G!_F*+EBDP+zpd4ONFrA2mLkS zw8qE~2WpRWYE1*_4041PRc%nRKJGj)D#fw`+FJP@MCY!?SS0+Jnwc?{ise6}5n<2R z%Nh{Mv64w^b##qOK(R%84rsZ-SP0Y1A;JKrJ>Ha6yydf}-rkBQ($(blD1h&AM&A(C z7bN_j@B%cNM8KDC+!?s7xrH$y1t;#ICaDcNi$y^ER*12wlkPBBA%fwFB?lFu*q;Rl zQ};9Gn#pTsl`O~_gD-NJrG=Q?g{Z+=7Lj%@3}@YeeJAR5(oMJq0(*ls6N5g4N46U0 z=(sD{hH-gq!G%NoKGloJ2;#!&$mz(Ej3`XIhu2++Hs-^w02@kp;&o86a~z+bI{83z zA!%1DAoJo9o@>QrPwC3~j?KO0ekSFwF)aN|b7%iE5eLwAaqY0%yiiHd5kiFw+d)03 z0W4T--|1|gK7F{dLF(7!rTLjJlsP$))zSr?7~GGo#`v90oxvXN73@D#1XQn8r3Q6? z*WukiPo(o)8cTXv0Z=H)(Q;x_?CvkWBf0glQHJcP0;*P3y|JZWVxu@{Dxi}Ai19D~kI$$M#ngu|kEw0lvQ)RO z{}j)Cc3RY;DL(o#OlyaQ1p~?wz3L?DQL%@byJ>7>+2?`g zU$He_Om-RitOEN#0a&kw>Df~)G-oiQ4)RG*ZTsz`ZoXyHo%_=0YChT?;EGVNq`>pK z4;fKGNq?L7kGdBo&Nu(eQ<_vOw^fy}mFih6JtJ*{akF=`YvcOSU0~Mgl)0sP2`#`b z!;6POI@fRe$*B2_NC=8<9%8AxjuS3(nCD6k^RF*~hQqA{D5Blw#$A)`f7(;h=)Xv6 zXJ?9Ppfd$EJz-PwL4`F#T9hGqGyp|Ym&FEU#aLjI^_|@Ov|Rd-)-rjHA_$M|#-HDg z@KT3o#2b~V{?W0C-%uI_Uj)fbyCmdo(}~V`2<_Qjy57&$ppGy;M0Omrk4lV$l8<93 zi|t#x@0CoRH*g8{S~7{dS~xpfHw`iTYD>0}h-E@-C4tv$vr~JYRyVUN7mEHIc}r=j zWc)#8efJ0c+WmVIrb=~H1GUA|*P86bg{*J>w{iBenPqaix7JqI&KuDCFVfxW#k;Cg zVTlKG`f#stPsLJ~|gDyvW> z{&(^DgBa$??sKhNjZNWFm{}T*z-9J4=MJ>VWosfJD5DY7+7rXrK&Jy_iF<6n>UzmK z>U}VTaOQc?fJRLJ)^Iw-{<1yCR$yF~_X94>9GtoC*x^s|l$6W2dvSb^_oxK%Ty{iiZ}nEBf81Lr(0yTA`>Ujm1^*49gtv|6Go#^UWilFjg+W z*-^(%(v!D8ZVB2v>Kywsx6fAlt;xLljyiG&K284OctqTX__x%cc?Q{s)kP_@m^4M+ z21+--wW+}AtrA6$i}N}T0iz2RZl^pkVfXxx2L;fEEOCu zkrnBFI;MNa;MNK}$-g5_SNi08aGUL@N=3WvL@55UtzMOG%@}BDF~Ub`ca^ep6b$t# z9kPqWCoGhn3y8uWzE<7Q-h?3oLXmnQdg1Q;baI34xx|>}XFGBfNX9dxK0CwTQLq+P zWU%1&aeO-kJ`k~t<6kIL`xP$EiBB$H1ru+Xi)jO+N2%GO#@xnV0Z*%-c9&K(VM9N$ z3jg3_+y_pU?Lg`?6^dgp|^H9@_u22~^RhYpDbXDM>gKtj&dZ}5+W`l@Lbe!@_ zO)p~EZ@v}%?yFvBK_koNY(%(8h>+W97WQuX7<=~cjp%*>qtIG5rmm>KQJh}6)Vjkb zv@j&)q=P=iT6W7oK?!jzKY6@OmCi1-=U^{4DRR+QlJ7U~&p^>+h1SA)A~Q2H&IAU! znI(8Jm|nBM9LP)Flp%mnS2Q;)vVhXl8e}ZK1yxvdj_QJc;TL#D^%%Td36{i%Db_% zz{@+pF7kmUED}RtfE4q;SyZsWtX^@~9A}D<-3YC8mt3$;n!+YmKP|c_ZN^ZL97TVe z!e{pQK{jda+Jm1vjIs0*MG?=5?1Z$;-V^;;F<(-z8fehD`w`diMVPV_;sKR@QE=Vz z1;c5VNAY<=X=0O%R1Bho-+eBAdLn0zrT^x5TglJxYAbV^$~H8tb}7!?(XsYuNb2ZI zL!%pTL>0Q_k%Q_WK1QI@aI(K%K{V@jNG)`qG`7)Tq}GoyQB%LWA#q}Pjle|%&ksghE5NCQ;8l`Qp3~01m-{# z?jjEkjOAU>&fl6j11C~dp92LgR^`;CR$!E3x`)j^1)~V(^29x1xOcCE!0AZQY#8 z9ZQcJ1nAPa-|QP2Zp#NOLPgUxw3`-Y^netWfOPc0@3VuXy4%BZ*s~xt9zxvDLf#d# ztqd~+FUK@ej!Dwf1QSZ^5{hv4(9|B#VF1`Qd^jR{BD%kDhkM6@Kz;6R3I_A?)P?MpgjYo}7pr!}c9zz-;7`5)g8P*TqfHmp~-xDpce4Q9q& z$RrKE`poP}(Z~J@^{zmA1N>ai^O<&m0h@+t=!UX8PijFqRa+erl#5HPQnIzEx+W6*B-s4_WM$va<3bZImXJgRBnmUt3Q+Q1;~7dP4Ri;Yz#=^(pUJ|x3v}nf3Xn#;u|wtE#nrr zx!cgT{5e`)S7Owqz?LdJ+Bq>Ux@NsD(S8;_GiFvMSRxz|_|k zYAfJPt1F$bkej41zRkbw4T8z>Sbi5sF^q_M?>^@}(={pBCn4KnCrI!xc#MOP+pecf>8A4e@En3q-{%0(2~*wv1(nr#ykD%O8Qdy+%Uyt4 zO&8q#dqK%Q<<_|Bz|P1abK7OTrolw-??}tRnk2RJ2O=VucUwHv(fI0+7E+6Oj3uBL ziq>y;3xD4%gs`6hfJJgn!;k#RVt?L>#Sq9EHZvd9;Jht8_L_x%G}Je8f$&zT!o5r) zEbn&qwcvu3$KIH$n|*|d)QGtJl{yultfLiJ*d1~N3F7>{sKrFRt$oXMIHQZ_M$%` zJKs*TOixzxCO+kj8(&|qA0Q8Yj}dw^G9h7DvFY-*MI-Ig&EhqUCLpb|G5R*Sh4}dN zZ9gV=T%9iLw_?Bwyg!}|3^(vU-&?%Gl};8IZ*FyM#f^Ob*DTig$7!{>D0SFzSRs97 z+(%~c!dF+9WGo-Rg-|2J>Y#2N9mbK}sNJ2IOdr+u^zQ}(z=!-bt1&L4>V`~17c%7;z?$G}Uy~F+Ia$AeL`>|0KeV0_at!?Ma zHv@bhz9{!1z)F0OomULv1R=4&jurYr$PQTj9b{IhxUAg5tJyn)a0C}L1Z@*F)1P}$7ADcei+B_fMQT9+xt zBidlVME_EY4uz#ZP>XbqG+bscI-kltPD;S%xK7+6HbLhSD|={w^xhj#54HcS2)Uw* zJRA6_C!(S5bSqARrSPG;3>Ojb=k0V`&2aUhdo1cWcAZ{QXMDCiYEsbHBPxXK=oDYp zcje|uvfm!PESiT-k5?zZU-(w&nNxAgC4h{5Qk*Cuzcbs=Pky9)!qk3nxG7JE~uOr>=YG9byOx9w{{tgGouUdc>`P| zDruO1M%x~bcdwH6|BVl@I~83m4|R(k_FbMiJqHzJn+;p&F*kggb+$J-g-io44ia#_+P z#Uv8E(E38e^Wp6f_l+fye16`r^|*ArinD(H>Ggh;nX0y~D;X#3xtDkwGNh;e^|c;c zY@fZw=Qcd9->u6G$A&QYOj^Y`M3dujSb~wQSaH3={0n*X$B`gzNog9)3Coho&0op1 zJqmj|rsK69|42{w3FniATAh zLmX~U&t}Uf#&%3Swzp9idkdWE4OkOr>Zw=y=>e72AM^!v?Q@xK%nR0aTK?fCvG9PT zT7QC-Gk0ckFhXEkfUT?l&?)HhMVe26dm*3laahx(^WV$Uy|WN8VdG+txh6MG-;&7( z%m;)x2E)Agj${8vsskHzh^ut`&PgREM61BacM$i@{as)n z*!=fbuGpVn$N(h~)|rQGJ>G)3e3J7ws91x=DejC;eT%eB0zUuhd$6l(_y+=fe{JRQ zaWq)x3&GdFhGdh)NHXATM>7? z(D2`w{+jIx5+9nuKi)gX-ec~&BT4^Z?@MpoN;Vm@e0x^ zwYFL#_4^*nea3h%#KGY|@C~ZAL83i_JUmsiaKUNGK}Q4T!;)E&Js-G>+f*qHZ$WEG zAUG|kX2zz{58nK#(`{dnRm4x^vU!BYVt-S>2ShEq=a;b;9DGvaxODVkGu1N6^;HDT zPXel^Ba(jP@K8YzxSLK6IE~6bfW!xZS;u*WSEEM~qqI@j%Z| z7{8+(yyuj`JoXcxxc>I2=`-rSD>^rYj!^rtp}Cg-L-z=4LC|xbQg{4rB>>DK1X?7r zf-m1nRqdqhnKO1MQN_{}D>^v@HsC55T3@BEJs`2F5tgczVJv89{b;Fc)++CO3t!TR zBKF;v07-2qv{6TPll6b>{X)i#0sG43-68>+`+0(5gf!0>*NH#&R!x<2f&!88)L55L zxMBIu)4>vxhZuo@Sq2wWz9ZE7`8{Ja3GOy?RI(EmYo;uk0;c(;)B8#GLHq>yo)mT0rW=|XX_$xCPdN^T6^Eon~1 z%x$?H;ro_{r1x7$(u`~t^Y!u`0mye)X6w_#?1dSs-`Ps+XMi!{!q2%lZ;gA6e1pow z^>ApmYA^{br{p=$=RL(-dS5G_VL9oTF1oQx(O?du#P|u2ACo59%*?CfHHTlq3j4Gb z32aayCZpFI&R-4Z6$8zF@Ha1vJ4O-wF**DAN1vWUIx4HfC;+Ut+%M4eo--D;ls5JV zZ9nLlvwr}1+FHBPkg#)Wh1h2)I)VcuRQ7Wa+fS#&9VQWYO=*&jO+b}deK3%!ECX-owmU@l0jh3YlaQ*!v6R(<|Q*}n}mx7I+o zoQr(l>aVz*Y<*DfX_$gDoYa-v%*m);f+yC4vMKXi<`jDpkD1MPQy&lZ>G#EiE;$Pg zb1@sHHjmbuu*82OXN3a|rtMR$l(6HyIM=lbt1lxy&F4X;HXz*i((^vsX&-EGX*k)H zns=QS3E8tKTQqKm3g7--Jzelij&pO6rx(KS6h$AUb@}MoRtVMm{yUB-M zR51X5G}zS0{p@E(ywX-c_35b@4(!xVFY;Tu!#koQHui%OifEQpe|D|dPlZwWkHY&+ zZ%GEsOV35L2+J>)lmvE|OC~TTUq9L2kmTgOw7u(sX6H^)7viPO*#!nfZ2;7Oo>YF04Ea!( zHkIOLyg^JR84PZIFh*e<{AKbX#{;DLNHX14@#cLxut@H$jlABD)}%!D-LhY>#G=7* z8&xCf+A|8Mb`?GRPZ){Oz484Wf;r(12UgNBY&|+{ov-V^q|-P+JVo$ZyTEy=;yZ4@ zQuS-3LsSAp00-!R`VXT2avEu*L`TE9{+`#iT$;W@<`3xBO6ucW^eSFI^4VO>n0gxD z4K!ph0pnG_(~z^Ird{#rEMdsGaYL&qoR!=B_sf6ouI@2#Yw?&0;-`Obx0e)^W~xTy z7>fZP(WoO5b4?W*g>fL({8-}Tn6p<>uCuv5Bq7NFPg@D7$oJdVtg-$6mKPgZt`UKS zBAeNrIl%W8HT9LlH^S-np2cLpqCb)?n#HFFBx10}){1%fSBZ~MKH2&_j5HN1;^9L|7K#&Kkt%!^E-EPo^q36HmpoHJL9zLE;!Wf z!f|T-dRxUgy2IZ4`GQn z#?aW{-1vRMM+i4hf3B5wS!qsdp&;zxr@>M-j%h5aOn%DX@Ah{hJa*?jcERH9HYs>@p1q6UcB zV&`dM(DmmsPL#g|@qs5vedh{Q%D3AsyXwI(FyqS@_MgXk|J?oAr)V(8 zLyXb8zA7R_XDwHpcaawJSg^^zG1z2=ITrPnDPbgm<@51T$lsig--k9<0>RZ|`z4Fk z$a@W6tBCIqINhUL6V3?WN%5H{5g5vG&DT*em{2bciX~ko`du_#CSE1$>L}iku{ASf zX<%?2ljBp-Z`IDNVsb64OskPi)11Rkv-88b>{&*M-c}Mji|vw6JfAD84t@Ww<-Uf@ zmT9cS$N4yVlyJ%79~mEZ1Lb5Gvp*$W)yP}OQm&C@gmq)6aMIt9?RhqnyXyJLhQKN6 zWwn1fdr9m~=CyG0R9W7WLC0B?fJfbuk!2uJ=y{2T|3(Z0-S+s)%x}y%_*VF*g5)?s(1n6=p}TzX`B=>W=RB|)=V;e6RSCIFpzB$hk^Zd zNJT@0^Lmg1n8IlCE>>cm$~x+~&^>0S8hjC4Cok>d(6dU%Z4aljD`?p;IjCX!bfixy z*YPL5TwgG4=??jq7vqJS0P-IEYZxL^DmN*4hvFNzE#9wVO!EFzQ|^dW{`q#n1uZm# z0ws=5ns4`T+{d1qw#X3q@zaFKc$cc^XS~3bi%l?0f9)wkD#-c27ZJ!w-|Lvslf!-` zX#M`K*lE1R`uh*SyjUgZ^af3_=^@KPV@={MgJwl2Jay2^9McH3cTeG7A>Ub)B}6I} zNDv3u3(QJlYW%ayL2L>r#bn(rR=Xc?=?cvU%v&Y-C#(xrjCZsamp&;^q=GjJI^>d% zmc#BvjU(2-G+LF(#G<}9Oy&$9958NuPl#CZtkZO(P;-qadhg19L}>>XeAoc73hb%W z3TllDoY)_~qkh<*8f3>TVonDI?@mDS?QivW&2l>l(`W1Z0t!^3wORVlo&Z5 zLiR8=!M;F6f}y0HKVpq?YOmB1xL=?^T2S2;i(LPp!a8Y4j!n*D#tZrq#so)Q|G50J z!tuC8(dH@A4s_Zz73tw}07lL_QTm*>d&nl3LZjB*Z@Sn!vB2E#G0+_P61ABjoKD7WEs8pV&0BX9`S%wSo_g9K6@9f`JKW$ z4C4MkcZLJf0vh1KJe+kN&H3Kzh7j*CD=Spm$@RF5d5TjqJnX=Zb$)Z5gMh@p(m0_A z29uAMib@pF0a5h-a#hh_aCOdawsR2wiQ%?m0B4}JT&$#YRQ+z3TwunpGO6!BmFRId zs0M}h@H*&+3Rt8qBz|Zc+NOd)w%oS7c=)s;=nd{>_`j5~GtJ9-HfuCD|8~vVTbcy# zU`)*yc1%_*Feyi44 zPP^M=0wH>o7qV6{CpSn02kimi>YeY5f5b4CJi@tm%%54?&uZL+c8i8Z*Vs)&noIOZ zkmo8`9MB^Mlc-Xr^)$Hh1Hk9g(=@GB)vJ%GNf^iwqE~W-jqJIj->++$vl2OI!cYw5 zzVBi8M^uCpE@(t2}%-JeT>KUtMjgCT#UDcshDrv3U$*Yj zA+e*wI(zkF`t~LD(8(SQNCJrB@SB0A)YhDw<>&~d4#My%U9Tpdlm4tr#+qz@tl(5c z4q+t?=BwWPfSAG3?=^(Dmp(=CwGQ}@?t2y9l`418kKFY>k?|eUd-TF1?dZL?rNz$Y z7zk6A5!65d4iCY-#5~`^Zc-nwAcOQetp}OxXyE)(`e;pE9{fG=%LcM~iKFtuFsT1Z zUA%6_dxH=kx#DA%pLgt&92_)YQ@2_W2PJxazQ{GGZ{Ed*ed{qw0DA;JvvkObwAM>9 zt!FEHIyGfIYFPn{i#ATrTc`M)W0PUMS$iF!C4ZTvVavCaaC1r>pp=?2Ej2Ko|k zg1R5)EX>rp_z|De@OlJmcA4bOJTVe@cFH@u&_iN;`KJ(qT^bIe3w3wn~wmO3D3e zAXC$?h|uZlyNb~HqM95dArA6^%B&3zw27DK z4SsOE^!RIsV~!PH?ur5_Q-?@f@s?b!OD3LOfLkjwbdBkqSED?hB-|xOnw!1H!aACx z#CzJ-40OedjRx|8Wm3YgvWbo_*8u@F=3UxAz0jlV)cg$He37-6LRUG8ZVAeQ8YZyt zf_15)%gu?^axcLl?MOQrIAQ`-i?`t(JW#Ubj~CG+G&@EUB2H{3oD!gdT{+y=gSQ7> z=-T4tawbz5hcH;{c##86KXUrKvTG4dBrOmP z_Tj^~Qq=&9THZLK6~4?|>LtzdX&d3$wL>9up+U}r4L>$LX3|hR3>#qX3_BYyi_^dG~loc>3bth7)ZgAOfLi0iQBoZ zSlqAfzM|rX*ETZxR^bg{p>}C7xa^ol|FoViRB`#5-`c^7(3++sLa1EdzzkfKjRN;F zmH<)SE9&kHrOd7K7+;`Crlw6WWdaX(g+-t^`;N90+KSHORg_b|02tNB_4pupMF&u+ z7z*B-ae%=JMZYfqs-gZ%@8J?&KVs2#f9m5{U!kZAiS$r|JbmeiR7PAVn@9>~E;UIo z)_af?g!i51H-na2L~5Q8c`^l9IO??&b$S9%Dzt|nuLRSM#v-&2YhFS4HVBMmG*x`) zx2O(nw7=?L)5;Cn1;nfkbY!*w84|FA@(~3p3@{EEhpKjLxYi=I1{g((sso;XfUlDY z<(oNkQ%{C>)AOeKNGf`Jj&)fqbQXVP|I|HPc~Fiq?&J0c%E=B4h9FIS@2rVBdHBGU zl3g`mE}S0NnEpOPfCkXg#;nqEirSlhCZN7I3ImDU!X2du2J_zC$g!jThs9)Dw za>4+*s3cjw3}pw*-hu%cS$noh@!jYp3S*~@rNdf%#%Fy{UlNzMTFgv)8gQTgQ=n8( zE3whZ@~Gk-wC>Vi9;h4qKy(fI4)H0@zi%t@@M{_?mG z;vuSM>%9*JcOF8;KUFEv5I7J8sg|=ro3StD42Q3Z#KR=&mlb>-n)82~E*79_u}H5h zuu`q@PwTAP`Sd1HaoVs=&LNgN!2`~T#+7#;H0>Snv-G1eDB`@Ana?0i{G(6VDm0iH z)-vzmoe5fA(d{(F<;B>=FG?;M$Ee4;+PxT(nMyR4HHNW^6pOTzdgDym1Vc6j9WeUm z4_b7mRyTOsmGCn2VN;9egIC>)x@&a-zXPTO=aTP?rYZ#*Dn^;2Fp9KSAF!L=kM{0& ziC$nJ#D6hV;H_zXsEhH@X7gc2&!9gO;k7B2Kzm_3%QSB;4#*no1R9dO7t@C3wbI&~ zF6fZq!(pEu4xCE{h~Go%0lyL;_XsJ0$zI z8e3Kpfka1CWTu=idP9!*w|Vw3`7CRhy%e;Kd(3U$(xsP|gz?36WOAyttVa9Wa_+yY zB1>xpLI-?QFUR;=6p3!Mn49fYltI}#h3$qfV*^YupGHbXVh!Oc%MvN_Xko)|r^v13 z*$`iq#=VS6o>{u+@=$?4$QqCCKM$sHluC$_Z?Z#rp)oYw)RO-zMy%@%hDPCsEK$2& zk9aH{x1GEb8W!Iv%Y)ViZ7rHJ24}iI`yHCF<-N~3@^Vh&+=kUlqge>-BKP)2ON#1j zVz=G8jvJ{Ii@hx*VS($OWU1CA-2Rznj<&4j5h0$2rm=|dXJQJz47ZhxKdE^E_37h; zSvIrr$0#Om@D?79ATkhRQ zt=ry7DLz>c-a8IE$`FSQe-WFVd(n0&ixP9Jd5PQ?@WW3;J72(!??Z5 z-fA0J2P#=;WH-@HE>)IGiSLuF|HAM#piW)0vxC~pIb-bVVmlM<81s+wU9I#G}Btf!#SRUPN}@A-=lAtQF(?cJjL%{~K1A`>*sJUH_f3umLRq*S!| zboQp9cp(x07m_YpkRklq^3F80la0ZFmX%sqI zn{6YIXUon2iM+PX{w7=ed`7B|DPLF;=1-wGG0=%X_~)x^a-MYP2isc#efTrNkvT9ncbcj=akND?p;f`j*6ZZ!Jtt! zzEBk>DoS-bUK=NyH5)KlN(k94bi{q;3l=C*VN7FzI^ZJFRf~HG*mdnCsBWBed!_9NCs;wT>iN~Kk8_xQg z^0yj2Q)-4Bi!)L8qzv8tP7>L-!_YRLk*S@BwR_Z+>@nfp$180+UhC&AvNTJfSKiC! z@BLm9togsycAHm;a&Q!KtUA9C0LDBz;Cy&!vDRr6$L%p*Di8dt=6bqmHE5m^S{-1E zn*?UM@C4pRO_x_|(DuV9PL9i=CSOXTe+y1&1diGyfBhic2o$DLPyZ435EIAWr#a|)fu zijlDoOcpmF)3dgD-*JQdEGs_SN|+fm57_DOc(9!BD_T$2zSp?0Y*EfYz(_1c^VZ~} zxWb*9GCLbfRsZ<3s^)(3^*3!7Lu+#I4Y)6=kf_Hheqmd`V?DeR&fU^)aPEI+Fn-m` ziFPI-i81rEvgJK+ajsmc2a8GkbS1~pXDp_v7_Nf%?43>hwzZL%lx8~M;rZTCyUZFI zwh2P`{XOo!(+s{T(%yKW@Ska%9jPmFd>~*JP80<837oKoe@N3PFA1=j7-Cq*OFj#| z5>i@`byIwBdn9vJ9#LS^##*Yq-};L&DfbhB zrTy9zcUcnA#|q7Kt(PlwJwaLrLT6$Hi0frV5BxMyTLEij6{dZ3^mR}4p=4Uqi`Pc> z>6=%AB8wWO+G0%)A+ynyTCDYl&FKgJ{o1?kgojlU$I`tyt>MjRX%s5L081;&1r^KEFTgl1m&&i(3H?;PB(#!c__h}!;TgY;S!YM*#vZ#JxI|gS@ru_Fc ztyq;9IhLfy6xtk(VaZ7Rc%SpBdR&<2_m{*(^qq@$Q|JT8DPHN`!IvAZ9MZ-Ub6MIR zfeihS4VG8b%H=5m_DIL#KT}pj{NGK_B$rIwa#=@%G$XxW7~0YwL`viscS_2Gz(d4} zt@l;A9fNAA!y6KZ(_Q2-agi*G7V|(tB#zD^AX{vp$(X{v(m?5{x)>m#vbOofC@`bq zk3wtv9-=x5iM?b{irv}Ld8*V+S+cywu8b57^`<=tjL%bag;OU%2^6UO z`$f{W3kVR2{7IWzxix8JYRnk)dsjl3YIi8GlE9L;uV;nM=9Ln)(;0)YeV;M8u~~ls(<@ENFH|1WK%PV1A-WnzQeA5oePmRi z5DqB_@nEg5B*(^*3+b{*AR!H^JL}A{{6OjNWZ)2sN={q-O&o6+;av0N*)?&@uu6n* z??{M0)Z)=zyMhZIp!_(~2mYIQ;AKh^XM)lCfX3filv2CQ=2g|Q<1kElJV);n(WE+4 z70e;G8+}aJnh4$~Do66#2nmVfd<4n_d#t1jl>(=OIO{k4X9(>j`l^Nct3seSpx95f z952oF;ThSi!rZ)kA(k1+md<{+1m*rmI7Ws1{@R8Sd)5H0Bowe%reqOjCev;&lg&0f zkv#_2ND>`6tYupELyOhkl?@LuV5eUxBkS8nQp$uL2c5FKpl#~0`T%M(Sm>@MB;>zqGEE0glv{T_;k0;ECUyrYe z7NeE6e@J6%2VY_NIz~MEmGzyGRhH#6OQr-RX@TLRyl=$$gWnz}c|Hq}))I@4l|U*E zHx}m43-3Ea1k&D$eQSz@8 z^@GoaSQk_7?U|NWHIU6N1K7iP51U;NpNiEXGVe@5#~SlMDcp z3j5+9k=Y+Lw9tstiBwb+v96KR7kaK&zO7)bsJA?T=e_0Ig$D0u$HpGYbmIcKft0 zSDxcqcENgSFY*O_-NudayCiTG!pa40(QA8Xn0-%VOPD9V7>9xIr>`_Yh=B2D$O8)c zjeYV$d#<7Ji!qhqB!vVQfKc6_+_|%BrSu&EI|+T*Z6xLL7>Fzb4nOd8Q-h|ME(QlM zgif>j3>^J3Q@oVHVGZM0Z4+Q^>#t|luCb2_Z7H%^eMTBR zc2uLfpC^PG-notbv>deG5yUR?xY1=Ay)X1DY3(7+m;Nj1Jr7SmuX#cyf zio=2Zn7C@_NT63wK+n)47$29;b##;E>wsSQsU<4pWfsuqoR0V)NaBZu{sJ@4nR8^l zLsmCBzRmdhoSvlmyeJS{%6Ito@On^Mt&$nB{b8POe{qjXD$vZSK)eEdZ|R9S@!~mI zNbzqee4}^ zEJOxe;2|Ao*5lzFViKdvRXIAOojaeF)j?@6zv%EK9NIwCw=R2|8!-?_ONCe5D$^}b zjH12hm{nLlp?~ix)y6_QBFgp1pCJzFo?c|?7otJ9em?JiK61t*_g_J!x8k4PgSZUi zv4Czni@56Btel7#=2Ml6+*rx$AzB=!`_uce^WsVLQYl!&f-siDSyU8qzep4Kbqnd| zC(*q`x+YSKb@%2OBEMIz*{C@$T{m)S;M=DJQp4XVR)QC-H-VRWi;N z-!wStuGD7~2)h#fU(cX@Ix|NQ)#Ei%a7xWVGw>6S@g9h$DbD?j(;$2*a^fW6X{8MJ z(zPR6nI&MB<3Yz6(XRSvEHT30DEap?xYh^@?CLej@n(V+U6SjMbl)TOUOS%w7o97~ z6KE7Uu_mToN_{j!?%1Q2wq)xU^|dz=#=`s7dDHmbBAv828wN*u(y&ts#T z$&rpj5ux(Uh|#z3uo4C0BHq$%g67x<+{pJQcSq%f2NCW?~v)n9WUf&sm<01#=G|VaXoGR zqlR}A?t>fquZwoxP!Dgbl;N;kOmF zmY(V*mq2}ZHuEmNE6?*h$m#ZIG8$w#gWD$KLj^C6F&5%06Ol5Uh*L$b3Q>a!jo*b_ zIfPKXmMRfece|^zWrTom)l-;Fqc)K@~qN#=EP?YMDC z9QPB0^$^pp0ga$yJ~~?(JCER=v%}}LhiKN49#;EmP(dpYX?PmlbKQv-eN~-Q8{FNn z!56(VDofkmVM}Tj(8hZiah|*L)euxpx#1yPah5eOL7>Q;YS;1V3VrZrX6TbNTQB$t z)!&$Ihw}7FPZ874Z)LsC`xYB9C!Mfk89A-$Ghih6H8F^7fHNV96-VQRMd;YyCp=dQ z|G))Bts~d)obVq*HaG-rCA19Dij2+gr~!m)6f1nO3~!~w`BtU%&GfVHU(0(}RzR_m z!`%*5HIZwzsX>ou3n7+h26k0UsJSkrTK8K*Kd1pKKa9P2fvb8mWfrb#{7_0h$+&Ev zP$O~*qP0AMl%0$eD`jnUf3Y!9%^Ytt)xos0D{ZbVGJ&0_;P7mRsXwGa+Q4Zph%{oaACH_G3R-PSm`n_IWI9F}#&beLxW;rE` z>Bc*)1}{)YMME7MBo=k(r`H+fwjv%+)c&|#hmy;H2)bwSV9M*@DmSeLOVC3jL>+$4I-Cml0k_pO-TWJUpmu zL>l&ztp^^_FlyO;1?~?NzY(mm20i z2*)WSHJSw#JgM$^I>?$gDMJN)w`@>}B~hlE4y^#W@cjkPlTeRFEHPs2M4bR>~Sg@#o5`p(g&6H4pyCa^>h^kg$;d*h6@G|&#jX2 zFWn59q$xpTQCU5z4doc)VN<2a_!;iHwU0*RO9m7Q3e3!`7)ABnU2mj<$F&&b#GE2( z#{^H%?~Xw7ls;hHxhfjwmYO(AWkY5?ZRca(kg?FGexL_QJOm2R`UOwlFGEOxR3)-w zBXvA7pP1?I(@HO{MLo|WN;q}b7~=9^sZkhg5&xig3QnDU)-a1|+gsh=7nvD4b2L-n z7q6O9`YChc8tlA!Xej}$LjFL3dl63U?-c$f)~@Z*`vL7 zkS&2W9pLl)8v7>M5PXj{UW8UQ_v(;WD-Os)gXJ_Zi{5}6=barEDDYrFuYzEI|0a{} zN_NfjoaLSF*6HM==s)~W0fNzjP=ls%(v@l1|A|y!`G#G zv$LWTr<`{8{>Zp*9ItJ0$QT}w^aGoH_L5*Uw~}nFi^8v{vFE)QQs|$~70&63$tz*> z-CyxG4%MXW>k(c>w4Ppp8SyD-kvKvehF!%A2r4fwdypvJC};0E86sd(ag-egU-60> z|6U~!BhhmfQ4%A#8@(dt{DQM(+#+8>eB_)x@Y>*4*^*)z{FeS(ok-$cGH>7OiRxS_ zXI5C+5pv$B%y*eIdOcztt;yfUXVBM_4_GjotuLY$C(>k4CDcqXuquU3^fjyfP*Szb z=f)wTI3?V`{f=lHDyV?Q#g2uBZ>v70Wf zpqL_@U0QcvwJLTwWZ+VKz^}HgK8kcCv%AoGpzuv;2Q|>0k>JTASM2|?gaorYQk^`^ zbaBsP@sj;k1%DNTps#abh1jvgN+QQ=8TX}6^D_*yj`ZfxVB%%oU6NW661lF|E4)OUTt-Cx8J+H5=Odi$>#FV|| zw_CbEo4Cp+2@+}oMzgKHnEZgzl+Cj>yR=XEv1fnguv^={#$|6#Y?rycy)UTPjxNh@ z@8dxBb&2+==U3%A1^}WQIrdH11RWr_LvR>8xChtZP6#j%ToYUdhv07a+xyh1v+sYZrkLrq zx>xt}zWsA`r((%){W(OdCTsGZwjsatk{pIe>76Vld(iosaQ$y|z~H3dJ}4Y3;@7wG z38I5P5_bS-eccJPkmqDdW@S}nCYM{`psb7j1vLxI4)yL)y2f_!!}RqBBFW}%rERB$nk z0JY&s^h2VWpL=HwBrKhEz+WxP1R(^Oy;K|fiD`aLZ=Wz< z54FQjYeoz;Eco= zAEKe*l8gbL&_kOTA~Z4z);a#xt{MPMvSh%847+vj2qNJT6dMpv1DCRfrqCQ!l<>77 zTtJ`mf<{u^rRs1?_n{n%a$>m(u|Q(l_Ui3SVsa>SN7`3oG&_RqrOm31kL1LDpzGmI zsa7}>e4*5qeyA%+=WytZz%L&ehB%sa8b7%CnTakpNE)wd7?seo9xdUcGfq6&nfJ#p zC}1s89d4_a2Oew-j?s-?4AOB{jHvZ##tPlMn*I%2 z%&21c9wx-5+h5p{{LH*bb867j)-~}z1ilb4yi`OV`XfPm1@ve8{0-llKf0({vGF2` zVs&x7>h*BvuEtMrtgU|bvbfC|Y5<|$?JO@Umr$%+2+832n7_5a zjIZ#@*nPKzeDvS0o`Oz-prU96Je!-Iw!A%LG!SArM_G-}qNE8A^jv@szovOFq2Z15 ziqIz3SlNc~&z%KAC7m%0z|YDQ(r)B!g_`17M9RIWhX88;;$) zPMs<_6q!&$r_6RAV9mpj-@?0^${Y!B^MHG}^Hqt2qL{)KeF(_AwCejkFmANMS4ww{ zeo^pV;Qk2|I+X<|GSF5}M2iF?Vho6bdpmzzpn<=x9c`+jZ|>bW_aWjLt5-5#Ujx`$ zVot$bNT+Nr%FIeOo7f#SWoDVw# z;YABuF%>8=xz|c8zxpNVe~Fug;i1q%)!k>&AWLUUHw~Qw81IvL-*bA`{?Nb>C(j14 z#r@~`*I5QY;3-BVpG%pu&ij6Zlso*G=fmQZs*y{3-K&j`OW4(56a9NHn5aE>l_CnA zmh2a&QW$esh}C7%OZN0j2}$7;)r#O!kOSdsEk2)&%WF?j8m}La-8Q|dyMa^6NeR!A z)WR@@w>EH0o=O+wBdG=r*$PKI0pXB=ry`^oLPgu4t&zG-=x9OajW3*~O8^6=j4{Hp zHE6inzeC0TURk>0*JPR%I{KB-m1nwib824CNV$Y8Y58=r`AXiTc6cer8@#+iI%y48 zYkrE4bleGkui$w$fA}436DJJ;CB>BlQ^ERN0;)}AKSn_k@nmpGl+Be)3lj!d zfz6%YxEJ@PvrQclFmthS2Xn-6OYmbDI?K-aH{j3tf}L@+WZCQhI3o z6~~q%CFwp$Q050u2%*94PgVlsF+nM?AF(YYo#Ho|#`f#MCVWrND&Ljrsd`j3iX{umLEFA0G6RQ06Lb>WczV|9{L^BL<+uhq4*n@GRNV+IoyY^nM;K`F|*u0Qb?&5{rq6Fv=hWk>zlOO;%;3s)&$ z-LahhRHYx8wuVT&U-K=)u$Ylcp~37BK#~YjO;t5;nW5WIG7~VSgnz>rKKKyJx<*Vv^8;OWRuAiS?%m{ zYlHx?(QgzF^7%;#yJ8ASSsccC-wC9M(ZKInXpU4=V z)*`Y#4ayzNBn#%F`(XS$ZPZd2CH<(k?xlIZtW6KgkPJ zc%XV+cJMW79ChY6Z)CX-Exru^N8Ru=a*~Sw0{Ia{kQlyJ4I~^Kg?qLn&(mdH8LDZ3 zpCm7;IwmnXx9w=~mNnaIfa=DKTEY)c>dKbrl1$i(?fAWzsa@QTJM|rdOk~sl{~M!M z=C!@V-DpsnVR1+xfPm01TrB-Cic|TnbHC-UMMl@UULF?l9NRGAQimz5k}HOn8hlx+~6e^JaDByJ)n47fb4%+fL+oQ25jMxF6KpL|EIZ-ESi4zYM(ott+C9S z(ATnG@-FCTF+m!0FzM3oGB4=fn5@L81<(-;_AwewlnBiTuHP~*KAhfpMR&1CI(u`F zFU_sp_p$aWZQj34I%a+=$b?1atGRov5j=Hi>K#-4PjzjR?>F&!4u_~%!rON(%XNVLg8=V&Zh*bApY0qx;(fYyE(?7uU zw$7%CIA^|Ta~wsC?;m;HzoM=8SIj_PVb3sF&Jv~JVrz7k|9%odx-_M7`1Lm@%>|b!TEr2)07bO58?jP0y zvQzpZA0ezxt&W5f8HBnZ@i*(vSXu+yHw=UmE_8L?9^v!|uTIS7Z-qN!l@-u`- z!6H|Wn4P8%_&r;Og515AJn{;ye*!V6>e;EsM{?bg|uRn1Yq$i!6z9@!* z4IwLiPl~<)mDlDqr;k!}jvCY@_^5=2&JI&qmp&}BBautk8~NBr)~FlU*}{!G?quCupeb}KLji{sl|H5d zVNza<0POVQnBti5S8|El#QNlt`}+7J#)<{SBt@z&*P)4Tq?8cXJf3YQka%K`Vmrnb zr$qoK>zK{_(Em726ew!;?W~_hVuS=!l^mQ> zv1W!tx`+&sIqX>(x4awxSPi|w{x2|{ixttjQlPO6; zuasUwm121@V7=Pl=e_`|V^Y1LGx~$oY{vGLOeBbiimLYMw^7#jKb6F!XIs%UHTCLU zSyX8GlF@}vMrOr)Bid{~U?%USQgonaZPMX!@&EN^(Y|^-x$q@1XWlpuW3(#z_GPz% zwMpNRk8qU%0GMro#Lz1o=wvUjuTp^0Hs?XaCCEi*$%PJxUgY`#Nm;?1#@~goWs+Rl z`%CW-s*G=aid1DLZ5)5DLiR*DY45NgJ*ln45r_JDo@8QI(edXS?cR;IZBiO~UdfCw zqk~3+4rl!~Q0Fvnj^6N+9d-2e^;crAw69+v!PiDB!87XYra0d2KtPa=VssL3>b66QV55c_X1*hA0LCw-h8VxJdD)BH0=dMVMNC*wLm;*4FqnoL6hcyp^4q1C^MV6=KL4|F_9s#ZZ$t;+hh9=-KjrM>gyigZ|NWbiC`+}SFaJx`EuoZ+UH zp>^}&eeYrn!pYj!ptBE`iwh%t^x}#h_f%MXleUj!AU7^5YZ38=oHdW%?{*I&^}XoE z8EjxwO2T74t;YKzO-#|DO>$>q+w;T|BS zVoaOaJd#5BQclWg7Uf$~-LEk_)|ZyxlEpi$$~_oh!r3TO#@{vbdyLM9{soT3MFTD# zhzLEagVroy1`|HP*EoPV;0@ldqBgVH7EH`((wDgpYr0*3>(Qa++WvczN7VPlt(sZ< zxNJ|M8*uztt>QSAI9rtjkm~!bn&_$`6jmmBr4_BwYr+u-IV}+;)?UEN-ED)}uY+Ar z+t71Z_HZCX(L;VH1xtW5&VECuN6PcYJ%noZd}(GSva+3bw@rodL_sTEAyQF;+{5;eJZ^2anavW`tq`jZUEhg3Sh`Mq9mm3yfmS_h%n$k5`oI$UgXm#{!4jcz{CZEnPOT*-J)T$bOVt zmxPPF%gxO;*oI*DOX6Pb^1{PB8pK${q1Jkvsbq3`h{0gTF$8&c(K;B&-VpL)h zO&&_ZCY)ng;DHXJx#M3fmFegv*un@H?;@-;4L6Y3yagT4g56CMvJtM?Gmb9T+)9y9s`or@m^an9n)Lb5;J=l^N1##&Uq`hm)E6*zdKngj z?CL%Ht*uaEy8*vUM_VdOUx_OaG5qKU$L}&@H(M^_%{nwDGN$$JQT*T>B0s$v^&(Yex%?wY@vtKpQ6l?Gc%E2$xhzsvS{ukreaBx5q30 z>bsSI1YX)tozDDWtZAi=YFC-EF;L0(3d&smH#K$SC#6DhB0a=2Sds7T zB_&*O=g6}?m0NQ29tAf0j8hFtq}L#-gG89LpF{i~dj7L(*r%Mtc7Kl^Ij|ezVDBS-aY&*D#o*) zv{wo?Zd*u^f1&(6=xn)sL$Vb1}96t}5+>n?ENJwzjz{2YevuQ3G&mKbu&LiKxG)-aj71W}7SZAou%`q`g zGO2yuMk*kcRo4oW5iYeX;DBjUqm&+S0nJ=53SG5Ouu~YUdVUqOqu4KwcTbRYNko@4 zJ}IYLkaP~Z3VIbKGfVPo9T97H;(`ShR7%DE!8o;46sBBDnC$hM1TbJeOjX0B{yb7) zA+52#FGwGuTMJ2Xyp}SfjJo8Mk|4v}4fDg}la!h&vmcksk89%2zT2;Vuma4L&ytpV(nM8HT|{2MG>tso{TV7-m|r?Z`WJtff416U5x5V(GG(qm zu57idx@JOiN+7hp!+tYt)wXb8!$2BlC7Svxdo4knIqfo5ckwF`M<=HV^QT7wlb5QN zM6oM6jjqqp-f<6zlK3kYjv#H}_$jR-VEcsYR}ZQ!UqRWr^|!|NJpZW@`~jU!a4Ziu z+FJK7%`B<)_aBL+S2qb!>c0lWD2P*qeWvY*+PU|u!vZG1Dov+bDN-Hc%|(3K=;(Q^ z2pX%SEtwS5?(F+M!WYiDRF{-lWC%scDcw4F@A|$gGZi=;hpJSkNxWn9ZuyCl8ezD?|{Kj_e)rQ83sZM^zvQ9!I;mDvG2$8bmtTG*!@gaG``aI ziU4W6ujAUWw!(>^@cjf7Gl746bmZBfg-%=I0GnW}k5 zqVs5XwIp)O{RFElF=SxBRW@PX9?3|{JSOI6^SmW|=zhg_3PruGUL)8 z`WXDo0ezM+=&gpUe?JBB{uMBwb3*SrbcYmsy1%57Y9#voq!OR(fGRRb5vHIhY}2AaVbj1=XH9=8*sKYjxCysYnE0}cK)63)?mYzBD?z(#bh$GH4PH|f?i6tgxj_I$5;PaOIU2=8Xi#=DGP|TM>UY*|1DjRu@`Qtv4Hs4>K z*SNU7eDIk&H`@68s7YK^hRvajb*(`8U=L@~&wp^!2zLq-EIT3lD1Sw$)AO&3#J>sDncQ7zeeh08|UvrdnR*SkI;3@Hp1IkJ>ps_>yvLPxkEw*;uN$a z&D<5Kx2LTr7Afx!OG5}=>3s}-6o+Bn8;8PSSdUHLiZR*kl^XvTDlQMk*r1^Jc2QZy zq|#P8oG&Vbx+CMCQlLPfh;sGrVeA6p!$MU$PEcKg)$+=XnQ@?j6`NO;`yp@g011rW zT7TvI{K4}nSRn(SRE&pUlsPXv4c+!3!^s(__WeQ|Y}-vmVP$H%2E~&TLXAHM3eGlJ zv{t^vmTrs~&19sPP5W0j#%O2pkkf4Ve(uFDPTBMD^G1dY#{)2^V_0P5*uhUv5~biQ z=RwoXd%O9?NYCX7BgxIj-AZ^4PlUO4*0E|%(Zkiz&0@hdGV0!hVgbhcDyA-XZ%HY) zXcU5}m+%>Qew%K>kfe!cP+#cOOz=a(EeC#fo0)yQXX=c_qT)?)C3p$BA)<4vS8`s>m2yST zd0J*U!aTY~g8O;!jgbJBl6xDOkNOgK8pRvG&$Rwzpp+Lmv2DZ5diok}8)|c{o2$l~ z^va?v&*i&tk^gb~`8U<`X9*hW<$bHK2VO>jtlV=$e>~BE&R{>j@kg6> z%ICuE$HpJ;!+NRQVfW7w)1h_I+%kq8 zQ>WcLsy*>&l9F9NzT9?A_#=W(8flx3Ump{^Jkd8)t=>#OW^3UF4VO8(gf(tNF;D=K z<$Y`n%mZvdxSc~+yqN#s8xTx2(Z8;n;V%o7MF&@qhU8XMS1_TM^fE2oj^opXBp&o_ z-6sLoTE+zs6cEb;-XF!xT=;$NgMoH^K=%*4fu0(iUdZIdmQtEy>DpJRq6~P}T70(L$8Vu+>Xw+B1cN z>25kMg6!RX1F>r<=|d=Ox5H^YLuOrZ`SO-adW>RR(9^=q)l9Hi`Iu?KPUp8@weh;k zj-IpyE-I3x1c|&>S0ElHO7r>tIb+QZ+A*%3&<@8Ge)a~KT5HW( zGU1}^;MAt8&o{yKv-@|BAzNBr!bV0`+1(n~HhzMXLOY9%rGv_M=Gd^IY<~3P&59e8?9}n7aw&z($4M^1i1)61MDCw=Q@v5j zSX~`a@{Q(^CT|zDJ^kj7@P}Hxhf^rR?WCj5&8)7N5Vz(wQT*Ixn97u{3lHKyFw0HY zDEmy`J|fJHSORd|-Q{dLjp@wX>V!8wZwJ*|UbQpu*Aq`9W56ZoAn%s+ZoPr>(yD+% zFRmgYdH~@o!&{)BYk{||J(?V}k~Nb2giNaC;t4}_7Y#TfjAwr{qcWOOP;q%9^kdE3 z@2?Mbh9cdt;hD;JFx_ZQ;3u|iKlrI~4aLR(X1}pz)1ceV<-miBiKt8w6e(97ke{ZRpoyflAi}2_MQIvc*Rz(K{6;;jrOZ@V= zIix!<3lLK4tbhET zC%VUlYf6SQ4CGX3k8nCsKLZjWVDN2&`t!!7QytpGBLk>L{Z!6kS+vN6yBQ45RpLGB;kDKl8*CB6<-;Qm7o-C{xhp_hxD~gi5A^h-?`?l*f8pD|2Woy zwc>o8viK|cK3auiRcZ&mTta~W7V8H0aE7q*i9|7I@YI+}SvIRy>NLxA>n)4M&VQJX z%9>OO-%z;aH^q4A-%`lnD+5NJBhGDd-oe6-$n z)cgEZFaAu4`S#Mnln8$W&{bS~qK^>G0n8?r%06b@HhL?;5Pd~DiB55<}F#Wki1oNUY zW*<~kNI#-MEKl$qJijGBZv%w<3Wt~cq|JUvZ}6udCBqXuzdu@hT1o{()FzYoa4u8E z-H@nehcxrA{(tNI6fynfI~|G3*UPRLWUmuh2hbOlG0!%thNnhJVh;5$ z>YT>`$ExA$Sv?!_Pdjil=)wE5u(vDtOr{@(mX+JCXXy-wL=3|%OV6t|n-l%C#aV1B z%8WDYG86p-F{n0^0eYMYenWm29d|l!atvj6L&kt3^k{d6e^}(yB-76+c(ilWPb#gE z*iH@(K-L~bl(wj(;DGCyd@o%%XG@) zTk;g6a{X7=)TUqb=4bBE%*x2WRObKKgROGv^0Govz}~`k$hdI0MOR#bqBqYgUN5K`W$D%sw8!XjGB%xN4DX z`}|Dhdp$+$KaFecUqZh6;L!RMSZH?#QoZW>F$xc4P$iI|VPDWFPnLQjG>~?b0V)Q=KAw9j|3d^86 z+3d-PvkV3O$40rsSPKQK_W+QL8WZ)#{+rmWRL@g54?YQUuyL$#J_($ps z_xoQUSsG#2bbYwvd{II~m$HkGO-V=6MxStJrv!qjl&*t5=Uudnh@QCzXK{6zFy1c> zhbkhY!3Ep}^4C-QCSOIrE$yl@cg@6%AG-Cs`d+%~sIDeMI$u**K+K}GOstbbqhqz+ zY}UlSw~4T4NjWrJsvW`XI^-seh>GYtiL|1!Ido=-mOqzF@}MSRVHKPkIRb;wz~w}e zB82CSx>;9Rv!vShaOxeuq5r3`}-GZ3?J@9As3!%h5tznKy81LI6oohzD1p;F=yov4nbwyA{FwA62Sl(LFo3!?rM7%07*eEi=76l}^{M*Xn1gi{U_} z2KIpQKO2<3!dVRjp@#~;UG&Li#(M#koyIelQd#f6R<>OxO6mRdNnANRsH}4+4-{_j zo@j5@8TnO$*C7iseR%9UsOz)p8RhO9n^)zy2KBB&!zRsm&+YqnxVF2~e_|DK=_lFp zY^zZ`H&3hmKVAUH+OfIpe8a&UoauPFg9-803T+ zQ`3_sT1WcHZv8M^F_sfWo=6b4PRC$CQBLf<2|F1 zqM0FdGiN6*TbrQ2D9-znH3x;2AXb1wXux%NA&uc17M1XpZH5`lp!4^2Gf^I5_t@}I z@p0xh#OY>CbYHt|3wV6Y``85a3|w|wC@qex2zHr5B0aV~uU5I^#b(^Ybra8(7n@QY{McRzF#P$v-o zmQgf#&2m&30^W~d?6U*RC}Peag?U&Wa?Pq{CyB!b?ezm zy`Q@>juD>QTf3iI^ZKj!NP)`k`F4;?WU!E8(p7y28p^*8A4G6HF%z&Q;N?Ua?iakP zU*%vt#;_xl>H7k6)Iaignq{>*K_gR5g|I|sirp6>(A`V&>lnPCb!qa~qQ}YS*cR4C zpc@Iywu%8hZ7w=C`B*aJ3KMDcztvy=t|7xLTW|AjEGigxW#vs$zfGr*M5=bTcR}@E z8Y9K!D}k~fXYZCw8(jZr|4Ez%#w2N6JYLyZb4><^d8j0)YhD#%2A7$IapRv9$^s_(3O`*_)i!YxKA$po^%4Sa8=?ouip^AENb4_zOr>jV47RMixJ)A08GWa zwcfe-(1xu` z6B{cOp}3A(aj&;ElB<$5h^nN8Uipz(HYBUQa4@2$HoX-A4j<4zm0DQ0qoPr}Y8)l# z54>3paonZuckwDQ$osmaaV3)-K2mpyqZ}G!Il$17AM+S{2i#I5 z6j9&InJGl}1W4-(!-}@bBArybXr&g>Kp?fKfRGg`z0S~`Uf%%LXaB$h9TN?d=TU<{ z>rJ8+6_Et@L*0pfj%EKD2v%Ny^y8F4fs9;-b<}}M4q@6Pub(J=saTqBBg-`bNJkGk z;j^IN=C#e0-H}`|%crPLgh%raw&kqk=Qg(DS}0hQ@%7XzfZ!?1rpD3k@w6m=TvFsKo zb#FDJfh_^B*+#R6##cR6n1}fu!}%=&pd#N4el$L;f8&#hYc(tp`Te^iqsW-k=xZP* zQnN=(XeHzIgMN~nr2Mq;mz0Y1@qJEgkS4IfPp=L1t!<%TK>!2xM{>@-o%oLJg6S0m zx6X)Zcely^A%j;I0gjm-imYqh{&#F$3JLs2_Zuk9=>C+~wCx3*N$ z(b)Xy@ugJ@-d;K4A5}2|qoihiu&lqMgT^0*wa9`Z{kr9kJSr?k<|tIR4Z9)F}CPpG3EL`c|eb>oImMw@5PM1A@G%`)6v~Dcc5b5 zZqbPx14fDy|L6!^9HJRvwswxa3GB{)McUksX)jR0w%@y?$Gh4C)jUx1(7RCz!@~i; z9`?D49*{#SYuss)uEfn7kc?_$jXyzh?9MSi)4O4O5AU^eeV4yk!|HPEQMYXl8ypjV zN)mOZ79X1#;I1*Iw7G>}0wlkVGcS(el3dRcJR%^V`^WR9Er)UfOt9aV%cJ=NG)T*Z zoY)Pm6yPjaMz37<-fa)LKKHWCR_u}m_J_Oy|9HN$$Y)`3CdtsyDv-}(>^7RSol#~wsS5^w6~blyAS2SSXTa8RZiBCOZcRY=)G z?Zy+w?&OMY5u=^1BJ=0}JsHx+KDvPP1OoZ~99GP~M#F*yC1W`M<}?&z%zs8i{r#5G zbwP1Xn`gAV@0T%mBWQh`qRR&8-I+qnYIWQGSo5oJs}4M)eLWYUa&PUGj%`K7+Uf#{ zn8hChTC0zDsu;(xRBExAo!%e|Z>Fwql3zok^RQ+;^R-dF0P9%=` z*@SF5C9-fNqTE$!r^w+gJYWXQWMmee{`(cGmu#+^$w`k$yUCOT&nClC_?)f}DD(yP zB@YxDfHU0Jvi+_eKW2)HvLLG6!92CjE}%?61#6jUK0Yk{*$qESGN&jSy-UUGay$Rn zxXU0s5Uc_Tz>(aKTQc2odQg;_h>%l-^$4KqUWy)*K}HvS%fRsBTV#hf=kXVr^XOZ5ya zWe8g@UED$0cfOTx+Ave}K&P-4$2&FztOSo7bQ0dxSlk+YZz+$38mso&i(CZseL4Mg z^DV&xHg(S)d;@soH|3pWe7o*Tk^aycMUusiy69o*W}tFtOX?P*$WKzDzu^ zCK8;=$Z>oHm34;wCDm}lLnOKbH1`Tk~xqU7D1;%iY@T{qFMPXy9}bzOLP zpbbP6LpmfRc9$|4QVM0L?riDw(>@X;1}UQFjP4#T5tL;_WVP;e`zd~e{ZE%H5xfYW zGOoTvqc8ta{?mN^l;6Gc2b3bz**^>GHQnjN%u#b3_xchUCH48S^M8A-(n&*N@qVGI z1ic|}oSg)mzGD#)VQ*J>m7&D`QxwNSyYp_dGfGZ@3R@G2Q_X`)+-M*|L%%!QGRrP@ z7~67td=Zb4aX}ys-x{UM57qjpYO~^US+; zem=nZq5D(w77Ux|E{gKU9=_`oKiyOqq^qFaT;XUaNE)EJT=>OEl;82iuza{U?9P5l@wB z&8BIz`Wh|wN=Yd^^%C9eJV<&*P!7@IxNrDvTO+2oyxr`cgxF!+v8JcF1>kWO!OIVf z{%=`7|CF1_P_V4D!>T^B${xCODFik;X!+-Gh{oNw{C=}!D0Z7pg2$>-K^R0OR1JAQ zQPf|0w!yU3#QhL%U(po!-|S)XS&d0(?MgA;za<(y!igTnw$SkMR?|F=n#DP<=d(oQ zpa!L0b^>JPQ^vw%IzS0$?@sD!Eq}L015`)+xuZYF_VgCZZl1OB_nJ|_{fkWuz_S&) z>Hh2314?`nv1@yyW)#gg7{?D=vjh|jUEds)t;F<(%I$xi59CaWXQ+`wi4#;WG(WCl z{1t>D)-vi7nJ3W@H=Z#l0wBjicu3LCr*wEZpY|q4n=@$yU`nMIoY;f?hy=k(t&z&H za7;h}hq2Axc>MO5h)58)iK>>+!s+5%%8kHyqH5UL8VaUDuzYdFX*R6*=i&LVGu(q@ zzG>%~W#nPI%FF5FO6B!==k+qeSDO%rS7^izN#8LCUV{}gvs?!lg9wN~jEFLFTQQI^ z@J^QNT>8rW44b>Vp@*R=7u{dc`)cF)(u)18auN3*C09?56+Kkh?$)54FVNZj`u4LC z{ei%&Z-Cp#0<>Mx%xu|@+ckU53+<>wnYl9ca@J6M%DI~oFzR604Y9E*A|@-l7kjNL z=Ps*jK4Fb)RB`v-H&87wFTwTBLfOIHO4DMr9;fqWc8v`um})zvFqKQ44F2lvNsDy| z8QdPS8am!TtxJIGu{0|QLbpuazQ;5P6QEo>&D(sFYr@-{oPyb7a1!_SeJh4}g$XPv zn>+FP=k=lJ>BKtAlFMooTBF4NQup+E(vd8zNZEjmI$yOEI$zct`>3UWQ;YU62r`=bM-lVFJJm2)caa2UXTrjsELXuwASr| z3;``E;K57#=(61}&ZmQUN05N$n(S2w=H8y8Bk(EfMc(e%bt%Y_Nq@ zVq85RFJt+S5jAfl7#d@bG9iP@Dq(xhJ2C-3 zKwK>)-{O=vIY|pDxjHg=*M3+{_S4G?JY4FbSFQF<6m^`2tncn_|F}WCB(H7Ln%YU!!sC# zF=G`2P2g(-&}l#pH@5fzyN%B~x+MR-Ej#32NReHsb2kXaVs>wX2(B_-xg{HHAh<(` zw^CIHyJ_)M#1Vn!rt>K|9;C%(bKu{Yxcm6Z_T!I1=&X{(m;7D~NX8EaXX&?fD}*)q zO<6h3MvXULw5Yx|Nbg46$#tsg@6?R>ByEW<{~R(Ho3dg?29Nz2GcGe9|B~|vh+t*( z?9-O}4!G2+{sIe&)AYiu{yg77?Xu+*uDo2dbmoJ{i9;h67uoa@rt5iuMd9~PXt>c> zL*;-F+4f+UK7eo`@2=_Ds^cw)h*W+hpfkARja!)5qNS?owKzjcNR(M5QDE;_~a9Z+b4En732*Pb#{sRw2jRiyCFF*5Dtw%OlH zY4leuG9G^4gHO)U@F3s25*BgJw-88<@;TjWt#~>_3qpy+JnaT2#?kr#Owmr^NP39;8S;Gec?@lI4tj zmpNJ>arsXmh^c!E_nS}a4`JpTaGt2jVS73Q{feE*7a?= zvk^3j%s^#z7Bx+20PZwv{*%h+Sl~Yq0azX9bfzZ;lLNs$&*z<%r<4Q?1vyxDjm>Vn2JQc@rRWT;yP-C_4aaBX8gTNYK zBU+@IF<%#_SHvKK<8*UXr`w^%Tf;^U3{7m~x~w z$HNK?uyIttM{{W4wLkAbqI1Av%zQ7B98T}{h;IhrBF!(W!zV$Cvovj*4*`kS-%tMv z3~`?XA@4)j9un*M3aj>7&7Fvz-IkNS2$@4vnX0chtnRxD-eBG3hE3yygQRNye11d5 zIdlWvRtflih^TJ#eTN{|$zaoKnUly$T0Ivha~0pa;b2cy+tW6x-p8`u!YpD{@ke8Qd2|3JU5( z%_Kz0D&$40=BI+?T`JOep0_=>(uzNUQMxySg~dhh=Ddkw;>{8yQQx>?_szs7FYtB4 zVX&Mi&X5TQr}E!pgNoe5xHCw$RnBJ>`fe(*LRXUZ7GI6j)9x|#=w)-vh{PT|Ln^}GrQ-_>$dS{?r3kj`6<#(EWP)S2|Sj@t8 z6yw8t3}p(DWVe@ZEcv0xuaEY9e8L0#@fq>MavuVZLUckx>&j~)2AG%wJ6Ku*FIi!Cz!s%uCSd1+Mh9TCZ9fX$|YW#A+ z3Xj%&(yt$HzS5KB{>G_blwN&r>nH0i!{s4a;_W%kptqT&nQE|lZIgmqc3qG&z$v>L z^U2?i$F-4lrbe!2~3HERYm@t{O`YC$Z!`Fx zYJw6S48+3$B`or~a2+R)KZy^LtTCS4iv|Hzz4FZX&Bfn$XWg$v&df=PZ?EqjE36&< z3h7F)O{3AX;rCJa-~i5Z@JyG#0}=E*`hcfCI=$`n7F(1$CIl4bdU)dECjIQw1Ju9H zqJu+!t#ymbqV8*j11D&|@w<+uv<=bvB~9=EZXgA9ESX6OAnO`GP8!kmV4;sX+G5&< zjr-d!j4h?bk`oS$zK6w#3)mm{^#He^t+(nL+8l9%T{ri1Nvclmw=+Mn&7yt~!H zn4shZwi`(y`QdOnn&;w^^*66Smd`3BJl)v|JmJmHe>GwKhEdbvV;GCYl-P7KSR_7d zFmqPcQ2*m`s_Q1vZO_Xb@HF5;6AyS3JUG|oRq+D;%ITX&-7w!jaUm5*v%l#p82TkM zjErJ-4!b;4`^0a28UwPcFZL4hQ{D7}V$l#eOAhfi)|_Ml@1^wFTy@f+lf!AN{i?_5 zQv{Gi>>yi<4&~8%{~!hMo?A2j_NJH@b#1)QqjH+X^hG3U2|DSqGNf{GRuscYn`>h(PIL&NG+xx2 zO%j-jh!@7QOTm|&GaRp~OE_Uo#e~8CS9u=En(Ud>zh4mGQ?FlUlh2nCZu?4(%s6Yna>iu2!h_Z|4UNWANjiffmrCr!#}L0S)GBSW|3JclL! zn%P7ZLj^{Yfk9s|k`b}r6@$>pF6`?NECOTGOXoYBdpsuG(>oM3r0oRvY^GPaJ7}0b zQSY2RnjfKtWdzyOJSKq8us7a_CIw{;qvO}o)E!)5(e>hy zKBi91{L&6*KSD*NXDxSyOyTRPP%0~!5=JU<60bY1^s#u__s&&CN#kK3wQMJR)PaW3 zB?M1gp7RSlG=i#RPQRDh+cV_mp3Y3!h#Vv@9dzAUSG!k!EpmYe(9ELh4WmB&asr+b0k9V`bhAFgmK*OV zFz#mGIZc1)rgC?56trOVuVH_S{+|!W>Lv^?KX`Q}uH^S;n+W7%!KTlI20k>QXb@a- zz8_EsT~W*<(Fg07#rfG8l^>)P3}A^o#uVy*q1Tq^FzZ_$$6KcC1ECJlHQ#7=S$83E zwZh-DvQwrPZDc`eU(d+Ag};96n()1VMR4gOZLpEOPwUAulxZ2e0XjfxIUu$E`74`8 zR)N8!+O1-|PG-@#!I{tHG;HeDW_K?QKhjIZlZ&pMXtu=i_L~UW8e~w+o^wj*x`z@$ zrrUNYKQ__bb3ORBy&Lu>Q`Us(Ytl1$8+8Ii^)XGbL9mlK1{+5SjXlWza%VqD!M%4~ zjZuF#WV&`?vP;Z9#T6UI@~NBTNqgHZ99ES?MU7N{Ag76@x zRd8uDjOrKRLZA}+?6U6Bfa(OniqRxHj^&8IBbExjn4mRaKYVp&UhXyk-*QK-+uhu? zv;E2Rv*1)mg-}0b9rRp4bJ##us;<^wf$|PUfuR%3G6pTwmU5nouQb2n}G*>AP5eYxvCgd;Wj2tQearaD;p{rg^=~)Dzs2D5F#-T?p8+h(|H8pn>5f2e>rHkHbosEoFKK zrb|Np0E{PTP84p>;Isp2VPdG5j1H~Mq`w@2J_z&9FmUS$&dgY!TiqV$pq8Mp%HD*& zJrXb54U3QRDJuFH&V))p*(i!pj*3OC(X?4gXUF!~CX%LrHV)YmdbGHIxy!IwnyS#! zed=30R=VYnpGw$}Cg^8=ilJ8{2L$aa$^mnKj3k^$&)cUFT`*%mYDGoY!)^G5sT}(7 zzAF#fBP!<5>KZ=z*xuC`4;yXXmBqGQ+9Ed*H(DkY_o(G2NI@&UZ&s}D?W78tCBznM zaAY!KTBs{3lDKGS-N~Tq_ywo3w0=7;(KK%USJ9LHy8XKF*4H3gc4p!gmDlRlvwqp1 zo!5pn{!8|oR)KNu^bYKP2RJyhRO$uMg;1U6rKWKHCXAv{&|5hUBTpv@65@)@d&?L5 zd>TMN`5UX|ed8&&WI8E?gQjh(%`7&i*W)fFbb|UmiRhK-VF;7)4R95IhHuMfqf}S? zKuy4nBc!_7RKC;=hJV?tkwQ5?qSC9pnnt z91g_p+-y3>+2((*e?&pB%{X{qWVt^l$D~WH!To5`&x5$njC3ThoF+cqXqz6DB&@cc zfX}3V7~SQP+n&P7a(2X_QtK6%BRrgP>}?G8AoG2 zF|E1LHcyPF_~IGWxq;vw(feef2CnENc-}KZLm8gMRiXIXT>H=;pq*)_gf zN-8u4hPNiXaV(w0>+rg$#?bdrFnq&~&ddIM8Z7C4`?g8dBqWDcdwq8gl~z6%9&6;F zzF>qxh6mF1Ut-m|{-s8*t8nTs4rb+ac5~X!eNR5uFE}0g7oq@1$B?P@DL``Qc3vTy zqpD?ot4MqI8_wx<gjihc5u$2hsl_YOrQ3Af|F3xkW0X?KW&&EZK;HJ|H& z+@6Hd)}%g>P+IMEg{57L^OJfsn)on``hi?p7cc(rutC$ZL0D||OSww+FvIaB z3vj4?m2-DkJ+~O|Md=N@=lBpAKj)3D>(k1&`nqNnGqRg4*kAfhyQ?s27^QvA<7k%W zkv!!iIV7%=Z%|NQEri6TEeJVhvRW{A5HRxF+$u7v`=Oitt}HDh7@cy@s(qloVN8Tk zjkXvKvnr^_%#ThvC;MBeC#8QjTTAXa3TF>{uJ1D&F*oYg`eh4rC9A7A{cxrG6o=DD zQ!iKHYe3Vv=(4Eu_bB?Wq@SEPC1qkmaefJgvP)KW9QOWG_mSX8v$tIQo8*nz3{4<| zSnZFqKnew)Q`br-=C&pUp{qrMQ9>Uy9UU)bOfAQmi%!lO*F!v`PS3Axcr-`c(KY&m zK3{Sge?4}!6X&&{jW}$)ZP9uwS+1RbxIt6!KdfL`9hlmy4Q2+(ji1Q{ocVAN5R_H1 zv~0e4u4VCj-VyibESrq^I6go4J?`PeyHV2!<_& ziXDzFN0>;i-6=paN6RpAho3xSbV1M^i!Ab&1(4M)7$KHfU5+|HD8)qeGgG5t&X^gCTAOLAJB=oIOis%BO9 z*EdP<$XoE6gSFp12-sWy^^!g5Db9;jjMGB*vmv!7kxw;Y7_TYTiCLI-OXCa{MTo1y zH&${QJy!77No%uP#HtzL_|pI2SUK@xrGJ-TaG$cs@$G3T3)^&g_*LZlL^k`fdwqDI zQ*{C~gIZ$R?nt3~XBm#|i~ zU09CgeX8z{oB8Li)^fx1M;EHaKM59-z4+AicQv)jxclQbF*pR|Ngv(4oFKo|>&sGf zGS_gjaan!XZVJI*(6R7dv9O`IwIp5h!+J6@D)xBKUbUW7)7OANh5pWL*)yC@BiY}6 z-XB%36=kvo3~*sB^-dQYR$dewJ|KIJP$l;~9gRVG*oAV}xyfL~jbuu7MV1Q);@y~# zkgKf~YyE6PsL3lYm!0k!+vq|(!gTw~v@pG65;Fa=Yq3au`9|(c6@7Y-Q_M%G zaty{4w+^Dk&%9y%rs}V$^Mqk^gUuXarGmHNGQ)+3IO?fOFI~dR*QvHK%aMOUjh7th zuYYVm*`Tx+w2nDaHmKXFpo#wQM;q!uj8yJPN)wq<`(9oVz#Vgv??}%t}cJ1~}Ys;z? zoYIQlRl)drvTKf^BschlFPsgvA3YVN*a?m{#eMiuUc;KFVT@=vWX8LD#%?ZNk$Qi5 z`9#S#nK$X)4H-Z_{OGz#;q4ph!w<)2zUefD@JOsXIQB*~zvkVZ6w&_IX`O00a5h1@ z6CG?^#4;w6GZL=ZWI6L03}&&4U(M)@TGlk0nW5-`YH;)qQP5u3B{>j@IN6GT|>&K2}ZxBOB?)72TDYXt$Vexh>QMMAG z61KEXVoj?^jL__Tf^k3Zl7Uv=?|4^0pvevo#6qR4?p=tkRomy?F`*@R;mkFt<}B7_*bQAeJ|y-B(sYBd)jtor6K;QWa@uG!l>H*e;|p! zHG{Xm8kO6RJPmGy7TMUx!nC4o^k)}nx+P05vBx|SMe)ytQ18XY7CVgnNy^=o+Lyx= z*n$NQY09|whm808GSvw4FDBt!M6M9UhCUD2G+`kD}~yIiSjr@K*!QEylXi zLFNSAv_=P9zfx4p+O_Ii1RjI zQ$5MxS3-x!sbt;=Blvi4G?*Y=2J~$e_+s$O9rb1m(i&zNsnvwtzb7}8!hO$jk`65z zEzPHDt5|we;ao^}tar;}l-^lYtD?AQN3fLG%~e448O1>JF5|^$m;9t%lhM#{&lyHU z2J>#R`0$y_ziK|31(f1C4yRx<0yx z`emBtjr8!`i0FeNrYTw5IOF5e&ye-(+;8NE6f^Go7HDF5c*w8&h}?(!<&?em>^ zso;-qC#^i7yo(R}p@7lcmM}osFSC11Wcs-88=%9H5p5PfBBCf|@v--lT)=sLJ024E*~Gz zheKJh^hYnau&W?JT~ob)Hh&qP9M0e{`QilEk4wSC1VI$t?t?6w79C)HlPBEt4M=Z} z*4HqydX+Uxj5z=6A3(I|BlGVlgU6e zq7tX^DtoF0(Pi`AEGXQ!w}ZitaP%cQyX74_3P27{NBc-Yg76k^G%5P#y|Rjd+^gHK zwC6om5=Pg?8|#_)=j3GHhnn)xmFpBD6N$U<#xvW$&pOh^P;Ukv7uXli9fq7}NFXt_b^k&M{e*Ue` zbx>&L_77s>nff7wGY407^J_=A+8saI*u=lmXRFm#tW=;1YwN*o)JGgG zSNi-+V)~P_-_=u%gGD8igmApZvg}%P!Sql>tm?EVwwb@k%V#1_mAIM$IDeU*efiSFdXOl@q8H}U{W)gR+DWN!`u_kki3B#i)f9fce$5qO*+QY0-D!AE#OtM3UsLVh*2ae-Z4 zP@{jgKZd!(2!y5pWC9k}N|F&Yx z*vZ{piyxO2FkVygd9Q1R%l9x)xrPYgMKO~iuMe?s&&mdjH~Ow+iV^9kO=Swk2S>cW z%OO_vMesgVb?-ReKX~D)>{Mw^?f>qBnwmnRno2G{Rc>?7J5fXz`f%jNag_9tk1Tbn z(_d>_!z7BC&Du$R7IaerOzPWgQ065G_qRK0dX$qF9`9eG=+=26%lH`vW#5`Z`w^je z9YQcIr?jrV4JXD7NVzNJOZiElc$})b2^5w~u&$ol|3i4U&o^?#r}coERw~ADE-yI~ z&AQF)07PE-j^HR|Sm{IcB&=+;@Wn;|u9gu|Y&jH+bZ#$I!5O^VL~Vl`LNXLdUwu-4 zL7lP8GqAD9UOAL2|K7C03&=bK&Nkv&t0V-=*2f)yC#dqz9=_oGeD*Z9`7F4yf__6jrHhfT<4}4JK^~1wyHkf3W4uH}H_M*qXwef`sm85qH zg=S_=no93{J+u)cmL0s<+N|(mgPbxlUTHisw7W(StewpSmh;`tbRB)1i29s-Q3??*=mP6m4tgNwdu3JZxyOepdg6V$&xz-zp{E6<@ zp#VPo9%&3NklN)lZxlI~to|RjM!L}V5kO3^LHgyx%Ro{&{B3$5F-XmC|MS=Ewv>P( zw=ptjP{Dffc4W-7tr{#4#fpQ(0h%Lt@#OM~FV*P4dmlLe0gZNl*l-woxRr|aT|ud) z4*xfAf-3ay&}JEZ1dC)M>e zpt}l(+Oak^(I9grV)r2MwfxQy@L&oRqAmRT5S~TQXb+T%&jMAUhX+BP+3iJ2`9$66 zJKKN)hX(%y*XWNGNUh*-Z%Xgzm-pd=3**2iP=6l;isu#)T*l-yv^ucTU-n5zW{;byiWy?RSoGYQnCP4r^O&RO({Q_F70J4r3lsA-o zz$}utg&{?$ZQ~;lDOB=q5+MGDn$a)&e4>Jw2Bku!$ufJ-nUD}IwG+Um_erXbF` z`~3Z8k&WYKr|a`5w*O(1_?CBy3;phGtDJU;S+3r0;3C*&vrET2t9$g~;{L7-#!I4B zkC1Z1@$7D2IM_3D*0V?LjBJne`r2YLx4P~9kqtp2CGxUq6z-;(?7_0@3U?(>Y%y<- zQ0D*O?*MVDFsHMS8FUdXb6TE*07x&+uRah(6X5h93x9tkkR8VaLxZ9B+@4=4P>Nq0 zf=JIFy?D!)CFJ53)dU^Xyr89`F)@RfJQDrEtSE@|uU{ zD-c8{+$TAqSWDy11tMOeuJ=n}F5)tl`tM(tH80I z86|F9PdHI3@D&vL(X*)#@h2mSg7)!*@3At(@fI1v^92vIf&QX6d1GH>?sxy;m{NiN z)%fRiZsncZ8)}ZV_g|5;tiMFpcSrryJz1VISn$!Ss3_;J84l;U%S0r)0~dMJ70F`j zMAtcd-3p?=9k#P&CRFFTS<<`vi| zz|)qCJnWVEwDl#b+CvMZ(ozSMagO&*CHy>Q4ND$RY>(f=y_|GXpbYiYTIok9aN{ zM>PNw|0)!)WUUJ5nqD%LB2uxlV8G-}qKYtR@Caz1yiVg5R(8DUQOkBQNHHj#?B(gp zO7S-YKi_+WygdDxrS`qRJ|RIkmuwjOb>wIIJBH-HVD%l#=RzXY>-^M>!>4Nof7?Su zMBW=Aq4=6?jDUb(_pwe32OzwxUQfhUC2F@{3f)CjGL{OEQfxPguIvI^z&IG~Z_iWk zcQgzR;Oe-e#S+_P9zR*mw=1Mmee3h>s$H7>BQn>(tqd=qF-5YM)v=EU+s+A#=JG2W znds-A-DxXV=RLH}=FK^=g3;))DjLmKq5&G7j6z0TSyM?ry7j#rCpekY_hIUyU>w4* zmQ24C>3`&MP1*-1?12}NFSu-|2kZtxI|LQZDpR<*v0O-p(7c%CgMAgc8HG>9F;8Oj z`xOQ9Q$xX*A`B%!TZq+xD&y>(BE>wL%eclnmsB#$Z~P=`#dZFis8aA4Bl}->gqQB8 zfaG(kUgw&6SvwhR$+G0luQ#(LgsOLs7%MDR`F;^;x?&DeCZy|;j zc}hPn;&AeX*n6{3MBDt|^>52-$D<{?<3`?YoIFuLaXHM)l-~MTK>fBUnze_(ZF8>s zsmCJ=Ql%rODiw=QJ0s6?^P0|G2$`cx07l+ugMfS?O!L);C1A|sEmacYU+EA+0*^!y zY;Mw{AkNPQ{PX@hkOt|Tf4n`VVPOL8@cARkopRx zS5tmztKsK#1u6r!<%vCyn7n#aY* zDq){Sf{DC(=K9;#OOgtdSxC7L3lU#e2|=#CoDy@aFk42vYJjRw9#@0C69vv5t8=a0 z0h5ewM862Gyf7vw$b#<;OHrJ+PYy4X6thC}4tJjgg!9an;KMpzxGru${DkHKN}vp* zA76hKL%CqSn*JLLHKXC#}Oyi3R}2{~jdJv+0Qm^>cNI*4ks&)1lK zs^_rmV_%Za7|Gw~z-z#H_HB0Kw&xHU+aYHA{+#iG2v4)wAXjfO^5DAk--lsMNo%Ty zR;GU;g47-F#)blJ=17nJ-KkAdA*T==@6?oT$}-{wuX|!j^rp={vW+St;b`u}Ap)6> z{V6n`K4aw(_y~>(1ba>daPVH3hQn~!!pk=P0~8ifmlVUt3_`4b|3{~@R=9l0UA_#B z+Ogdqses@@KQ`9L0ssB>Rq{~ZKxTQ~u5_=jJK$)AVh1z8JtHtXaiiTr6?Andi#z`L zVqPr1$MHo9!$mhf9!oZ_)ATJrPK}h=sxvDhPZnxu7~RuHEC1q7Om(;r z&HCB?eHQ~TD+w^-ls&yoa#WsgJ{v%?J-=UCO)pElx`4x(zk96WjLJky10o^Ff~3;? zu0p`;2M`YlCe#A(psStIb*2U9I>yp$deIiDL^4s!d1~@20OMZ8`dVUy7AF!}u#W2< z5gadLBI>og52_2rD#6hi#W?Ht7Rz~h7+%Io6gJi-54RfzunbC}$%i<=7Vkce5%W+g z66>H%rt>h%Tg6Iae@}SPLs^I}Bt%HxAc7QL;d2j$?DPX#D(o#=wGh(9IUYF1ex@Eu z$nje-MP6M#kcmGKx<}rrIQiAL(%f%pzZq-vVSERpGnt7?WrgXryeReF_7zv z+T&e0**&a(4PV%ZUI+TkNor}&?mdV|LcAoWs-<@ij{N&CLPpKVQ6OQARFU#UZ6y1MI!u8H* z#$#K|%0{0TN2M2zc>!53W8oKn*l93zOwT_8bmYZ`lTI)&d#=-&BIf5$YRd(eOUqjo zm$yZ3$Ss1?_H}=NOlc^cNbK7c$F$rBfDt7JxP5r*r9JjC?y|f^hD|P~06H9Qx%&_OaNHxKXsm#@w>crjFp)u1hlreJ*H*TBiyg zpZ!#Qc4!RFtM%g2SyMlbEA~vxiU4Z;6-^f>ezXe|GVW;V7c-l(T&wH+FR*_6v zCMi|TR1xo2S)6&Ncjl-as169BCy$2%S)O_+JpOp8I#`vojuFrMhVZE|Xr;UPwQgsB zpTzkU?4#?Z7MwY8syIdk4=Os|{ZfUyAuFobdA@ESKxuu_xgHkSL*}04_jc)fd9b5Y z_roe`BA+X{Qcy=a?yh7Rjih{Zzi09}!@Q+bpj?7|PZKJbk2L1Nk zE$m%PX(ULoUR2>k_N{&D($tpMiM@oc21o-^b$NmuIqUS9*!uc7Vu3_d8X{p- z!+`|V9cxSxNE^>r8*q#_Ls7bm;^CWmtg&}3Qk3-G38L-kbf{?imE-?d`vT|&>vYCB zj$YthD6WVWoDvWh?oQkL$??Ex&b=A;agVAV@_Zhn%cX3q8fTyQo7J|uxHyCcDnv(e z$7B=YFvf}nGQvTFkB9asIDn!LftP~t-OZ1VI&FDwCoHGnJ&g@Zo-vR$*jh&>WPqWB zZcuJ2CXIgi#N90qim~i7Ckj?gAQ!;$%LGUdVIqV6xtlO!W)DwD}SJ9 z_8IQd_S8n;71E?EfZ!GlsK&j>`_4$TM7{L%#oovLY=4$fqJ4dHS?|GV%G zGw*Cb7o)Q)!){+mh;6Y!{i@6rPBuowv4~2j3`uz9X#NQns_c?8e*din0I8`=1?~Aa zzTz#Q3Fr!00tIP5)=C_Q>|mSd|=DQ4RKuX6fKnKP~V65g(6()=Yta|ZlYV}+L4yIfKR%hilZUrsgcR2 zpXA12^DBJ*f-~7F-W_g=0}^DDxTZRM3~$C(T(d&XvFy|5W6bQ(RnL(71F8m!uI1|M zU{ZrE4R>aa1_C{(!w`DLO1lRA{cmEWFnv|~X_nblXCSAc@G7)~9B)qs=>Md-^f-IP0^|3K?b9nW5qUg#qS5 z$dgqb7O%m6wD2=-UiHKfOGYDrcOqPbl>~Z;7b8$XO*bpjKC$`M^_pPSqBf@H`eA>; z1i8NqHZ4E0`_I^HE;?l1R=<{*6F?O){;6l;&j=YnJ6*zujvc+3KgF;{DqCzh`qD*= z6sU?Q27C~PfT}%@L0Ex+$AA-OMt4v@M~sO1`*&|KT&WtP&*MA5?_dD$Zv4c|tY%Dv6~dA>C^ zxq%huD8+yNb!zm7ujXU4ECzfa!9SeRPqHjD>mCK6*gvAtfN(nA%BNlhqaJi=FTL76 zUSze3Vf{iT;?B@!X~EtgpBh3=>sT+Oh+HNrG1s}Uq5pBLXq%B#6rKXh+g`6#H%NLl zHw&+!`u%{)u{?WBBO(_i%pVA$NwKdbb8;F0g!LXK-rBeA!&s6j%K+R+6p|bJ57S67 z8mF#C{zwiF_9oH$5^?;M0xQQRbb*9jYsY_1_NN0BkR2q7F^fj>C?Hhp+;>6H`H@ls zib+;6n_8zlpxSs(@%sMgDAkR27yTx=tvyUEffn@#46oq`$J6W>>csVZ!dw1f>&l32 z%6vV=UT(sNQw$Tc%Yo)$hLV>9TL3jyMajt?o@%_2P5q>*UjgkS7l`I!wB2E zQGYxG9%G8(BNetAm(jCsq%zYp@05@Lqs4nDnD$DvaEm)HM30JU1~sMx{MEy*&PPBnXWl_!OyufICYDfb zCk_a;a)-mxP7PON`*NAXjb=i43aX@VTByr+;7&A31k;)3W4&o_z&h0C5g{DANy*97 z_t83Y4VU_@6W#3sHQ5nyjvk4AUuOJ_IEN9DB4r8ru;aSgmJ#p#iL-$ayP!JE$^3Ln z?1Ommh7SKg%;8V}0p0`ESFL}F@;;yS7zST#6+`jL*m?Y<9UU7CUvHQ-p%!jKp@cP` zVBMgb?+p&@7lWSB>d>K<4)FEnMd^(L&a7Ulm!hH6Oi$Xi3J~>5yfDgSvygGD3yk^% zV3UM>+K|t-uJS)*0AK~rB+sV^i^#_$CljGB<7is_{yrqGRmAok@&P9}c(8jn1hwz? z=g~=zzedxD*pT~`LU2f?9zsxgH5vyU&;}gT9nmQjE0rUvXqo8eg?H5oetID2QVzGM z{yp{c-^>O5(+2mTTWYZNgMlkrNG4zazaX1yaeGGyj&dnlk&ShYGtHtU^S@IG%9L_l zoQgv+>-l2hb_0O2X`4d2_f~Yw2{-d?6`IqP(i6;G#N-sSgm%JEvL9bGMS?21^{4at z{fQH1%4ad_fB196xRE`b;byuu0^>j0;mO1cso=t2&*!SLf~YZHcBL?$glq*WC${x( zL?x2hZi@!fqk;1iySOVj<-E5)XtN7io5OL*1!X&FU&Oi$)vu8J{W)>m<4Cw7a8Lh) z2bxjZQzSBT3k6v@f|t(DTl@8F+R)g}Qu)9px*EYmc!K1t`1%8$8UKOP0&yQ$eOlBd z60|nW_(WKyW;BNmZEcX{{38T{z)fPb&+u+O9HMByg2Hn3RZ}%BuHEV3dFu=xwBxu@ zCzL0DmY2ujLvs1=)49C_V>qkGaUqQ@9;z5=G1=NRD_S-32rj>?4U5vL3Wh-ut<;gh>O-?JL94@DHi zf`Sjlf(W$XtuYuE;6O+Zg+a5`ha?b@iNeutpf&JtxngdxbY75|SYuL$K;0y*!mUW3 z8%|@UI~S&tkpq*X?_DryWGM{e)nepU7kxvE@<)dBV)y2^dF&$r|9%5(hC*|)N{W*G zh4+@kXM$83(?a77j6c5w#2JKQOGa5(YggiB>eu zPMJ|%P&|&0XH)0a=M~jJ!epY@aTo{GoE zM-#A0X4ZG~`}F8fevy66K-OZ>5&1<)3OFyH&w=7Kt@5&k`M5io^w>Dl|KMBF>}N7l z)FrwsxdaQ02o3asN>JI!tPgh!e7~9RPtR~S6~u}}Sx7zsP?`iCm`=JVfqB(ksciGY zwaC6)Wz>lb5xgT;hok0ZMp2DJfQV62>7>Mv~46j#d8F z6%0v`>#Jq!@l)IOcXAn)**Cwx)w54^mmKXwK&-Yu`d3|`0Nzs)0N+zr{V6-?MTiZP zIu2?5x-C3B`0`NXh^iP|lY~lVst!vwpXokGnx-Q8%vvlE!|~dYMabb709;Y|cj7XU z=Uq?jGb7FHzA=MPJjiFl`0G1L$W(yq@&%;|W(6l4e8HNlhM86z0o}FWiG;-ULky`z z`|4^8F}b#^!;~}^mUC-BoNi*zXq`+%BZyyt4u>@*vIiQxX(R9FLxYL@R z-9}II#VK=~N5IKZq8h@39}B;|shhmRg5g3oIhdm+d-$=P3zOKYCkQ39BqDMDq(a=# z3h-~Z#(g6%9rI%c8dElCe#c^f3VSbn={H|@6uGyvR4p+ff9@vxT(e!|`{Lm4e;yJX zPA@XCSG)c*%KbmkwO)qZFDhbWxQl5n6b6pR7uBU*!=fQ>LQ0yy6Bx;kpxxi7>MZq(Xe(*W{i{S`}GBD_am1f|*G2oG$+C#TDYwZ5Le zfF>teG3o{&bICM<5SvaUi{DObGaWooUF6QQR_@SDNwME$RSjmSSJ&S&OQ6dFS>`lH zonInRje$Y* zH?dtp|4w4D;ea`3p>wtQA!r7;)5~cL@+mba+$u*eHLH?u{riO^E>5~*WmY>|D4pA! zx=`{)R_!v-fCS@l)4Q@dMlH-wubvlokaBZ@J^9Eq-5pri_vu?^jiM=|p`>vI_YG32 zW&8dM^MAyehBbxa!!VC<`w7@wgjUbhpGE#Ahz+Kvq(y>bG0Jk{K28!C_V3`6Ue9?u z%>$sPSD7!ktmlJ+xA%XX=Nmxc-5^9NFNh?m@MY`IdPpYm69G@K_e(|F!TksD20*?x$*~nGp)inpVL6<7Py4<~)h=k>@D2~aBsr7orSe9x zA`-#uPk{)9X_qlL@hX_d(c4=e9Xj+&BwlFCj(COBmZL1-QT@3}RobeiO;8v|=o3(4 zYRttf^jf&`S~sbqUpPoWkH~l)+uLDTd4mtxhb8rg=4I@ZW%tGNYLCjsyuIBI&a)Xa zGalj;F33ZHP2weK`F1im<<92Z2M zOKr@tseIG)hjps7ScCzm^zhvbMHViiiKfZmFv6cZoZK85UPTCU|<4>c(_QES9obt%sG~N}469 z;P1JRMCE)KF49H8>Gy<_-qf4l0JA&Qgfrte{88flt;`p|6^Y1Z(=`34jfA-mSUhH^ zyy({S&c5IEv~?S>fKAA4$GB$i-U)=u9qFF?eNb$*i@|uGl+>E@_t47g578=*#6L5k z%J#fPQ=HgxDwfgD;@Z#uIa(1wYR_RdoC3tOE`a4dez-aqSXfW{gEgSWtfLM z73Ve>idWHdyL9SmAc@-SvW5I381M&T!&3;7)1aY%U{R^UJY8eWeD{H)m8YZdErG|J zr%q6WU@f-A6fIjE*hIcgDfB)Qi3VMg;zdLLqKD#Q(iYB0hcvw@o7-l?gM1Lir=N{` zcVSH&>MfX&(OC7-g3005wZLGHw(v7vxd^qIPV)WRB#g`4lkm-Xxvd_5)veakY1Xy> z{xMac(EblSE3Fn4WqAC*sop0%3h+*@j02nQYzkxA|9$ z`FRd}MF`JqNISTZmNJ=f%?+H`{kLB?uYW=82Q%}M?H$r)0i*||$q}ez0SY%(Py+pk z(Mw9h-zirPl_j(Y89UW#0|CfU8i=L1=MLgw98G+@|JB*LbQSLQ7x46V-Z={`AVNKh zD^1pIB&={d{ilP~2!wNzEwwYEr9U(x4}{-M10bGXs-<)%1|D{R_s9B0oEu5cAeHBc$06WP&43Z9;i{}Z=V2R>rK$n`TK<-AmmDZ(!S_2cT zK7N}b=+wPXcm9zK-^FD`>@ipNz=pm)+j(4(p;7LX&qVb3?n5;ajBWY~z~Cd-DwSk2 zsEKVkc*K2J8_5i^*tRl zr|{^gW00tzxO~4oD=|S@eESuJpUFZ=5vUwW%8E0Z9_hAyyv1rvL95raG^PK^wzyYQ z)w1{YJ!JmRY<)--ISNE%mobclB&#eUtfpp~g4S~oWjS%35G6^aV4pNX1l?djEe7{0 z>r7^1M6P~IpJ=u?A-RxDbR)J|@tJD!5H{NYDtQx+?sqkH(%=wm8bG@OeXXx)B8s$O zTF6^IOlT*Ca`TRm718n^E!#eJYiSkNqIkGxnpy1IWDepWY{L!rzK1+g%&d7UU~s^G zfmiAnB&a(zyX~fU^9F|}s;m1u1K5o(x4%|TRtVAl>Am^p3*RLlbYP%|q+TJ(`UAD- z`F)0*Q2TIHs>|i2DmCkd=<2tVi|l~*W9*lE6`$A6g|9!`=FP`!l%n=lQ)kHv3*_#) zY)2>XS4ph5KZE+kE)sqI?h_}ZuVi4h|7a#t0K2ER*evQN-LOZ%HAU zlIee0>e#R*xsT=+00tU-L1b~McmO5?U_AU?2&XT>SDsB-``cEmhH5ta)% zRz)8RM|6h`TxPS{WXaW`&&c2s@5Gx{n*O+p(VKr7rvJPb8cfPMyP>OB`4l|ctX-mI zk_No(5{)_(MOUqI5*FU2j~^2-q^})0*khH^IZ*9F9db#FDpqOJASr&yS zK_+O(|D;Ny{(^>+Rx7p@?;gg|U0$GolVV?MEqvFj7G1=th0$fvtu;SBQMaqaiB5aC`jR68oeIvu~ADqWsPEhJ3qQ6Is)%8mE`mEfxbRYLk?r zz8V)2bT^q3KE-qIbl&We{y>7Jr+OtY4@e48%RJKNEgwap`#_XO_?fN^3W?@^;MMNX zR>ciT${z~#DinJI9bW|YLWAtFcVxOUHpYY`0sLwEf1F`MRe_@Dip{YzUYFlk)xHGl z7EzR3_QGa<>eaG*+q2mw*zJ~|Lj)v7bu1Sb{gMf!8ZW@FIplQ2bP_)eu4egrF}oWa zw8l*T2d4*2;Et6k$+mOR55D( zh}2~cZbi0DOK;27U&L}g-h_{q(A3lw^+vxrfCN5j$%%rm`>foZM({;3 z1CP#_H=P0mqB9?&Wn{G}#ei-lN5t*!-n1lyQ8))?TwTwz3+CX)CFKCSat?D8xEM}R z^sCQ5{khfssgcSG?xgiI@xjoOl0}BRk3)qwWJg%toq<;jA!(~6&Bk3z?B@PWdZx&) z24MoMT(}T{Bbjft%XaM9qr9s+d-uO)IvYN7f24@C`2Bd9N$^VI_RWy7RhnH49uK&0 z&(||hZFY8qUfy+SK}+{~_jGMD5Rsc&K8qNlWLIr^1Hx->Qh8B4>&Myv0JpHK&rAJ} zc{$B*=GY`nT7tC1>DP#9%1YQ6CUEpPDHy29h)RTHcPqtCy43%tw`rZ3!9L<{(+;=VBv`AfjyLTMp5asaDObk>PK90T$%4pDnTF9g#*&tzCKp3S?XVa0)Ac6+ZHUFbxDu z$=CCTruWOJ`1F^*r@3jeF!0U zSyxZ-3q7CIqGnf=RjFZtFO+I9)xtx+aq3?sXmH$k)va{oV?ZdZUqXHK9u@Af8qh=P z_LL0`7-BKL=EPEP39k?PN6**-SWsm(1EZLX4f=QllFf`L3+O+;pNPDh4naQTb~dsa zNN*}IE=yWs;KxKdd6yH#uv?#ep(%>UqTe1F-7$(oPHQv(ngs;U%1&k{g!AwO8`Vyg zve~JrUC8Y?Q1Yj$k|2R_4$|cs~^hU=%w`rWX6WM_uSd ztluH!QjIq3N#9x>G|ac;RQ0)Ws=iyB9g77Z{3S0`kVwwI`}M&4&^4V|AFMzB)rrmW zKIB*x53OoROKYCn47^NxXlT5f@CiIpY^I>^O`2_WTd|BV9Qoi`x`6OU>0E#|{% zPbqh&c|k_VP-J4fPvujgT=#bo^w75{DOS1nf)UL>1b(P3K)BV^!Y& z0JrPDP;U45H;vY-fY0Y0etvi35sK82&3C{@Z9U*;0T zxd2s1i0f)Zd;7nR=rKRwT^#*5=|dn?7Lx;~d+fuk#ET zqj%*tR%gNemy`kZ-_iAR#~FfWTplyhhT}45KS-FJU)vsSi_1ADUidZ`J6hCRt9I0S z+c&1n)Avo5^krHq;KtW|PZ>E{+8E1w3JuK`#>~xkg=Q-xCDHr|S>CcxyJvZxyuTY? z>rJ!Hl6QHog!jnQ$@!Upg28;gxFfqj0m}q!&ToC*Q56*OBlI?@M8>HTWM;R>T9rV13pj96# zu4*o@Jk~OAF4+i`n@)t`sfRZLgH)JDY%mhQg5OvFy)OO-;0uf2*NVz zRyvJW%Vd(>^RJJLwj@-Qa#6REs!kYY)Rv1hV zRndNq^vf)~juKD<^~_e*7#EiXj28mJ1m@w6k1jL8Z#RRu0JE3RObS1$%=;}bSUkcz zGd#coFU$2JS)!|F+=S(lUWVx28xEZ304_*}%Irw%&;Qj_CeI)uj`4s3 zMQ8mJ=K1>B;S$o+IP|WtO}zS;+BL|*HK}XIw>N|+{?xebmm$n8H(j6Tdr~D7HcgBP zW@<*=NN(a-e_mcfTJ+YRK$OA#Bi5=U>^(fD75?MP%>bKJk_V^?3ZrVk8)R;)QEFk9 zzJ2+MNH5CL77+94D2#MR=Hj}hUA_;=Zl?`s}Jx~(gG?xgRjt*_^u*Kc0# z=>z_-vv2&aQuYMBe_O!xR>IDHn_^c<*)2f5;L0?Mc95zcg$XI~rwzz*KuE3*^f4gX zE`86J%ZygoyKz;p4o-JxxTa;AE!Aw`%g54Gi^sj3*|;jNG!P?{9ra~t-)x-dW}UBA z{}JFHELFkuPX1%=Ehbs|)%2V!$VbIz0cr8S%_S$yYC#L-d3)ENY5pOK-2?V;Zw|ziT38h0%D-Ao0^mT%_{Mfzs?7DL?@pR}bX@h@ z!X(UBuP0Yw{n*E{WGYhIkhN=tbSH%l+o>_cpWjE5yd|Gey z_Vcuo%pviUly?tQ%!&`gi#JTrPIC$!l{zaPeX5aJgSW<=G!mqTUzkej%aGNOxQ1l5 z1-$h=Y1Ox?-ypocXr~Za1O+@7vBFNRD?KPOB%udX5q`H^pK}0SA$!F>dil-{(Lhs5 zhx*X?`lT%LDon0&5bL(dIp^*+zT+a^)EQKMw;&cUxXc(BO52dh1#B}-&}J;WbymF- zA%J)`itOcf!deXF^Xc4yrPE6bJdd}EUm}!jl7~&-@*6$+TYdu~GZ6SOtnS=OlQ}-u6E`LE#~^OpPmGD(kiFrky5z-u%v0C`&p4cV;A*)zdjgkr^!{@pm#_3XW~AEBb8i1EdZ}L7y%hfywEFb;!E=6X zJpA_6Uat$KTjSr(AeV!`6h)D%T6d{xe2%TOOh^-B39K8U=+FlEt;0vc+7a@mJ8mpc z>7|+C{mYR7O_L(^K*tZ-r!v>)Y3nGuh{i^-Oigb4-48^6x`z_a3M<0jI-m6MeBp2Y zsnN>Nw>Lckj7r#m6^GR#vIe+&D0**j-ISv^EFOgfK6RkMbCE)1T$A3OX#oSJ487Bz zoQu8aCPARI(mAJqH=umBU`wZ#^0Qt^^Jt=(n@KY|wG_j8Rw^%Ua-MIWFn)XZuqD)6Y_?AM=>7YH z$%PZRR^+h#_$oaptS0Xle|0*8adrmT=b@CFMF2J_tL`MDPBLJU>s@ZkwOKis_xbsQ z7ftVDwgl~%G%L0BY6o>8FLOa6338C}EA(=jE6hAb)-tv?GRU=3=`4sYLuB+Bq^{>X zvIFj|&$~l9v&9e40q~^4zUZ>3*e5J4G#3VI{3D}mFR#sLnb`_AR)=D8`H^|cQifKH zBgOk>?F=_fv7_AgKGHW>4Im#gKOV~3qPfl_v;prgD-Cel(ygaxnnxYrqfJ1T-J z;->`~mh3ck`a>=+n89U~6jJ6hg1*kW6wS%!KlONeY`Obr{F`OqIh0Z__V*o&u1&+E z0n57}t15epm<6EmG$n5yw$4!NX$_H{Hcxo*FGh~|D(dt)YfBqIs+{$S^Z`^r+DpTeXKqP4SAJm+UIj4)rh?$DZwyEw|m5iKq6#Vg9RPjrBZdl~Ww z`^?|1W`%Dr|Nekhvy^=p%-Gt@5D_;hk-F~G^?*g|l7yC0)UST{NOY`R_A~V#E^-9{ zf+8;gIK#iSIisn@dMK5D;bHH=Po5v(bX%TnQf7w->rkNUVz&MUl&AwHRNKh`mOojO zYv=ir@qogqDL292kgP~RAO_|`{)ts+T%!Dj*`jzpYqo`zsW`iT0=epgKBVPB9jE-e@K^iX?B2uC#9Hwc(JBLvtR_uvBX7XL?xd zE;*xr!fB?9eizOkXD$I@zj8;@UVr1LEZmM<;mzriS~lrK64m@B^-WCL4uCQ31?%zAu= zbx8fZ$T1lE2~EBG&p8F+Vwk5FNQ;N^$s^f|pr=zQm?uRq0euU-PT^CSMn@nVnKzwD z1{`LzwVb}LT$b~REwhZeNj8P}0VP#exvJXN4`~=U-;>2F5!Xk zO)sx!`d95=TPOzfIoaQinuQA%gR?%7(fVBhQQRa(2M!BRJ2Fb!e|c>FZ=ESjeQYtD zN!=6U{W~!K9l`%bui0MqWtpD?s?$e}Oq9KSUlKHqZ^m_F64YCJFoCacvxLfnscQM( zKz4zaQj*5kY$&pH_=fJ((htJx2UMwG#_W~kY{uBJ*fdqHt&F>XQ#I+d>Rl4H-pjmf zvz8|nk+P=n&C4JO_mQsPjR(o^ZGVTm#>rEWK>(*o-d-CAdnLcSSE=*mmG_Eojdgs& z82TUPP2evXJrz>zll{76F&55twqvK9;v#TeYWkQb_)B;Ea^%}yK|QVMH*-<|#;k2R z{mHF=%UcR-f;TIJyweWp1F(EB&wKXqgS9QR$~{<_vid1>3zU#;brKF zmG7HRJ(sfL0l5^~x}%bjHs&c^+^DDcGxjNojXq4=xYP^8(cZDZl8Ph&j z6PZ*c(lXpZcqg|KV1IM({q>Ju0+tPK+Db;*1f(^|ozFHx^KtQHe)PG^0m=MSo#2(E z@02KC_Zi9)&LW%cVX4G*3ClRn`=fduHEva*+LERvxwzkh**i2%#QuucT-Kh*;vsY$xe&*ZRzfZ2xc8k zQ+ffGU-hEqHJEEzx`7}-S3|3v7e+bv4b2&F7xgqK@XhJ9v0pCz#CK3A9F`OhuOj+5 zsRfn!&muYtYYeLseEXC}{MmM&aSRz)8+lo2#!!nj__nAVZ|O`cHkhlQ?v0?FOEk~ zuiuB=ck}-jZa_y7Z2`@&(!P;ilN791$UZ8di9oglHH{#JXoTE9JTEPzCSd~TujjdQ zOP9(v+fAU;$ltq{43Y$D=2q?EmG64}jlzx@FbD{wo!6NjD1 zpo<3_k~tZ*MKlos(@I_5iS$y>Mt*v0RoDfm0zRDpe0LQDOiDS}#W6~AwGNCf_Juu zYSU?Qkx}J7QID_8)`<^$qiLH(^?lC%PIx>dbR`zT`SME8dzGy3FSQkWHhvqNct#28-R0fBtCfRL-#zX4 z-WZaab#_RSDuoc)EmZOoMO~BtErgJ7?%qZ2Gb7yf7Bn3>=TCyfak{b-El*{rk0XP4 zB~n_IANAtI%=470wmV2IB`nw_BiSHjCQW6&3ADv2>oNPJ@x~0VL80+n2M0}`o>rnc8<;{+4Qb-$dK#K`j`8NRJeYVLSi*UxThlu&rigVI?UDNp zQVGING}+A{yWzEqb;GVPUOv`4E=pu_A4Ix7`af$WE5M5x@b&?*vq}z zh5`Ew?w$M6*z0F0MlWKu(9fbAwXU&}uyRnvJmgr9^o`e;`kCmx$1p{vu*>{t*GSi6 zicY(zcXB8AT3NwmkRkQ=x@$F(9USQjk&+fRhaLRC_9wfG!svsyqxGf>*S5OsoGq#p z&h6_sOxrNyTLmYvhdl~lct*?f1SbZ`$nEHQ({1@hTN-F4=-6?HH3Z7kJ}2cB*Clck z!X&zP_~y)xH8-qf#j~Kme4A7v!$Fy;+)u3PP<8O?$wA~h`&V$`Li~$I5Oou=zTCl4 z?u@%td3&(uH1C`mdS4%nN|mA~oChH$h^{e0IG60jp#jUzVA4Xx$-TF1l5aguk=hCAn8zyssAY@O^t7U zrF2V=$5~+S4dG&mr881v90X|m-cr`JYHGQ6n``vNss**36i zRLN^P{cyp!MD-4+s=|3!T5Ud`(&OgqPbh6AxOPyjtlOJA$t7a1V>*7%ZnSA4n6?O( zk%UVA$w4`l+$yq6hlq?wR;9lD7+9$PLPLzBacegTH{<}VFqow~I@yRg( zlR4RT<9`;U2fszlr@Ywe(aG&U{(b9%MU-UG7H0BJRoe1;d7Yv%y@>oHT4EJcZ=c7c z)FD}|Bu-T|rlZ%mAvKfq!l@-`d$~I_*RK2-zpZNqP8Ow%D9k=A>(n(;n2h~)=Arz{IKOc&xuhBg;p3UJ-!5`Hz67Zk;1ZD@;_@4g7D%3F?IhogOQ7Y`K3E?r_J`B0Np z7}n8Yu2j_ujscNjKCh=|0+ z?!N#Qdn_)L6JZo)6#Mm7r2?5ey!D4wdBxR!qdhEcH>{VF?n3*$^%tLYt550|FGJ~x zHv_8?UMnNQ-~bhH{(w}d;w1$#1^CO)^mQ$kvY!hqoBQ18FOt1qg5z+wI!8{ z>U|lQmg>mm!=Z)0{O9 z+sde=>`AYIsyO8LGaPf-MK~=9)p>#&dl*S6K?koErTIyC!Kg?A!kY&s&13bErvAi?DQ68c>Ng7ZNAwdeIst z_Reqh1iO2{(7p^WyTc3dcA7&;JR9=yAtkg;z3Q?yh@<=7O$qvPo~sm}UOok9;|U48 z_|tS<5v~?$6KE`hB{eR9+78JUy$VB}Ma-{4_Ul7mF8J?Z@w>67e*)r0Gbz zRxlXoRm)2IIN2S4^sgu1zsuMIy#5J$_)4})8#QZG=)H{au65Mp<5XeJSTSjt`cErK zLs!4f8nBnt)REiMK{9&EM6eRlC&!ch9-PvVg!cP~LWcGFjcKo|H>g+~>fmdXAbSZ2 zX6^)pt!2A-acXD1mGP?_BMWDvZ0bm**EV6TFFfNxu+$vaL#c#dtMvDyn+#0unh@6B z;pa<4sIOOQdq89qBA?9m@@+&onHH`}sL7!KstI!GIcbZI1dANXbwaC+CDT@-ONNbs zspPO<{EmUCsgxQI@6`UAgb|jv%8zI1Qo6KgH|s7((Vp*}`L=Y#Z#mn)`5_)x*!ec# zn~r(aAtxGW#bz z6=aapl3cYK$DPYVJ=F+K@|jq_3PeBHrK;zcgPohCMDmdjJvUKR3w=paNlEpS%onQe z5tVih0v1(Gf#aNgj6K9ZOTfx(tDs#(|E(uyAQ8L3@en;j!;bQ(P0{%D;xgn~?#|9m z1~#k9-Q4O4T)2MQ<;>&MP{Z}}S~^#&uqj*o;2{60@XS8qqzh7vuzuX*VDJdS zHa;W)#KPfU-Xs|Q91;QD=2(iL6RT|CA6~R~Bn2L#< zO8t~1>r0bh7|YoKY;EeS=t;5P_2-j)Fq+S$OZ=wIWxdAKhcUFQW}e|ES8Bn>PseH5 z_YUVw{On~mHd;3oeQGuknZ$>KL$4fPu#JK{i;7h~Dc6Tj2y;6yhPz0ep6hIGw0mB< z1jNGof~@(ET$SBE_nHL+=Vy3xEi(z3Jia-*DC_Tg{L>YW?S%P@@W6#A8KIu5uT%DC zqOd;Dlib(X#zevqG2ujsAE7aeNI$+n>$+UWJ@g^=*OPpb&*$sF#$TV4;TKBq>1%~8 zxh;ke&R&k$5hjtvr!qU0JT7BMYTO3ce{L+_bahwnv|sLgo3#9JlCbGhydERn7B7fY zZkLDUdNmd+{5)v(8N-D!^MmOi-N$|40}@{2d|#yUSZM#UYKw97{f5%ywoZs-v6W(`*GD` z2Z5K6Ud?f472GY(^L;?5&~K|giMCJ`FX_hJ=uV`W(V36SmRA)HC`P;{IA> zn8aFSkVo_)d9XjUhk!1))1{UY% zmXNBP1F2v1{T4whX@`OCs}$?US_#KgZw&aQAc<6pkHSN9b!W^chNSP$$*Q9~K&HBE zcVUD>T)|}24R(xW^R5D)i@1$fG85W}wJzGE{xK*%em0mA2iCw(6WiE)b^2wV zL3jw6u*&XfZ-y#{_U)zaH#YRRI%B_esgMWpcG)!&{4=Wac$0e1j%F#pTEwTrmc|zMXF?7aR5Wj3T7!Z# zk#;KY>0E{9q?;Riy>^sx^q&bI!@?}pC%>OuoD!%J#xOYvareE+)`r!t%Qj5xlb?;m z4(md5&3INr`6`c314czOzm=*DCeiZNFjTh<;oWoO3}5sOwIKvgza`ax?rqS9(_L7;{r2 z0H63DEkH~Ttk^e%1;hfTnStZqtkw`3(;^Uv1dw5o-!b5 zc2_t&r7LRv!06ubsbT6eyPrmqyhCVjRyU+}-&^4vCuPwc=vS_~(^)d=WRl-ZjqGA- z6~d>7r>Zb06;3Ww+|57o$2akx`1dKQJ8SO)ftNc)!F*4Y`-F?t`Y=WvPj5K0ifl=S zV#1uwUkxZC$1fKam+wf+s8qqIkkgdQr%-N_vg|ro5{Uxps^c6Ay$6%7h~aHu!%ZM9 zx%*04{%-wl33vETawQ))Z+a=Aer%g_wpSSmj?a$|Uyc#F3UqxN+}82;U!O0+fn|7A zWx<}pD!sc{n$H4ZhCF$Oa;4v;mKgS(s((2D>%yNG)zRouL^OuAyvY6@CRwpiA%jvp z>p()6s(%0cx=G6cxsRDcoOz8skfu;}%N)o~eXtR7&XHriw{`ZFf|z7$`-RjUe&-e= zz3Qty2YgCI)8GQOKOOZ1y;z5-9sb!^hua}}c(MrP>N7;-*)gs}M$4gs5!qN(Yr0LO zLd**_wXauRIY095YyKvO!) zW(ysNM!>zz0l1w*Z$%W(^smI48NJGAsQcL*aZy>@jtzR{D+1$f!$R0S$+7xX*dj`- zfD)Mc!s^cGrlOFMb{xDvc06wXnf^}}xwQVNo;~vxae$|40h?0_bU{aagBwPn?0y2r ze{8Yqx)ptJ!*K0<++^Nd4%LYcL0}5t5D=7Is-DSOqOzj7OIO=t-?$ayWXtrl@Jb9( zj1UEDNIF{7DSW$p#S(0<#2_-<@}@ed)nuV@&UhBa_Tg2`9#j)p@jso0qn) zX&w@Ng9hNn{Oxa3#LefewXRuZk)$_yzt9n=wqe_Ffp)Vz` z?N^Z}i)0RykrSB3+_UD>3rDcGNLKIJ1%v~-js5+E1!2a5=Q6p_bX)z^$IF+?+v>gU z4Vw)~mkwiyorvFxvW?UCvJk`_9}7ky$`R<;)%>p@qXnbcbErZ_%RnB<%74hN=C-t}hOWfNq-G7LS|+$Z72wcU8)%<@v&mVUTtM$q3|f41>_ z`btx8|L&#Gv@Nd)tfapYy8^rj&92?^UHK1m0etx%zeCd)+BtV_OEYH8+i84ukVvHe zCCsj%?wbH@GSo$#ijQccdLJ9kkY($9?ETnF`#7e9xX;%k)z27vwsYXrS@pFrGjP&t z(&vmhQc5njf5o^tu(uDMwZ7aXd~v+-kjOhD0I1-b%072i?mD57m9KWvn?5>1^HZL+ zipLF>!@rqo6nsZwJGv8T`#?Wx#>S0l$_{qV>d0%!f7aHKAKY!6PK{){2davGcXHh7 z)a7G7aMXPfp~;F4DU>)xVy0$@zxy?~pAiqGK0e4#cP7wJu%A)$-932B!Lhn;x{V79 zPXpPxG`2LF98%A7HEMiLi}ZWppSD#yO*8}Ut+Kap;V5^SJ`lq=iFEV{u_xByCU~yu zuH!G47AJqX?I3ZYC&E4tc*+!$z6!%ilP26StM}CrG&R2-Lv-l_04UrtP{K_)I)}K9 z>#5Z=$hd-Adwg6YZp2V#mg@3q-nIT%%d(zC0s8aIC`R&B(fLylT?{mz>|H(xl}^r% z^m^BnPL9GbNssDfmg={gnx3I2*X-Dx54J{}{JC=!;iakd@8ERid8-kdGn*B90XMQ% zdeV1Gb7;L%7249d9QtNo(^fIuQ%Nx~`F(#6BWuEUJd-WutO%d5Fn$4~dVqzT&+vuo$Ioyg<~jO@azRJN(x4snjku+3k;9c}c;8MLI_-8OCcZ1I&l zmV8d$X#A_^^q6mLSh4C9tK07`mmU|2EQ3b**biN|Z|QHMp%;A0GZ-wBP#T zDw)q9G?tJ))M*AqF5GDz%t#lEnU6wnTt|85y z%3RrUp7)QdUG;y?s(hq#-rOiDr#rP{;P7p#A@@*SA6UGrf|?_&Kf^yrpyQ0C5=uF3 zWSE(Nm;cIXZejI+H{W)x)|=I;c{@Wgi6LXlza^p3sAhhnafMda-f*|T8@KAlXS-tz z;XhW#mHV;wVE7QB9gyV;dJvCZr0wg+{80vA_pM(&cl{S4Gq|zM&A1%#1K0CY0`hR5 zxM|gqDwVs1wT@BRtH9^S#zv+De{sU>Fjfvn1v)6Rj#8yLzJ_F8qN(3!==x_XUYeKK zfUpkqDjh}&QGjfiA?I|I0GLX`s?-d?b7zGp$w$_((@*4L23OOYTAd+;I%hkv(r0= zM@|GIB?2BV-sCRtlb)`65luO`SXFpdQq=2QM;Ii)-$oYc+fbOV^zf&g3OAvMDkYO| z(6r8k6v@RrpRHYX)xUV3C$q)lzS=>q8|CBOHEOh)hCMF>$1Fe24<5aZJxg<|blIxF z^4lt>mv`#-Q{5a$>;!}*>7`g0lxJR@M%4b6qZD5mm57k%w~Y-rC5_HNhUBOtvx55W zkl~SZE~F1`-A5wPbx`WVm{(k8^-pe=Aw)L0STx&)SocIZ{z<@p3P~B%_u}5^rV=)u z{9x!Ibr z^G<9mf6(pEu(_$9Bt2PU+tPgmuton{=;Temu^@35Pspqr=jZC1l zhiUI8C}Yp2eXM(^K_Jiut2K1#H6IVj9fZqMC&_Sz5~;_n~lK;Q?k!&a=WEj^;{<-Ff{{S;`;jeJRZFW(P}|T1u_-y@(FN5 zDx6)?eSVHevxoOWOww#WVj)$MmM_(1^fjN;ezjYEQfZqTu$W@<3W7uRfVlEk{#!$8!rt$24fTcZ6l6Lye=}4CV75O` znkyBE#*g*mc0FNjAk+oh$OC@gIyd&nKU{{NHmpAQwmOryOV*V4+}^$M!I>W9^3ktD zT3*O~AEe0>Y<4xyVec?4w6}sB3{e#Y=4d;nH|e-~5-iCJFlRj+)y@iRr(cX$S058H<#jG#|n zh@e^l^!uXyZDqJxhVeP0<88VaA^q)umT?c1#Y8amJiu&(-kQ}C*Fhz%+M^NGD|(gs zQnQ6zy0OWZW9=_0YKz#o7O()~_NwA_bAx~DlTj%!wA|Fz*gx4!InD(-9gyQxnPaHfj8_bzCKfu-xJhjIaMzHq>!)MKYwh_e|Zgj?(Ae82t#A5m+SCt6lUeo;=}c)imXtmHZ^;lk+|4 z#+q8WW@m!Nvm^-uO(Js44i|X+wQJ9JI5JQxmDairQ4 ziWw`y*MC>FAZZ+z(3N{DyS=#Ymsv^v;1fU$_|q8t)g0KzEK9M(Vyhf7Ea#%6;3S!o zk&L-6c)KGR0cbc@|A3^j7*QFt+37wel*$az`rKI9sI7~NpRhwJ3r=IqaAq-ko`XN< z!+K*95v>N55{vt7LW%E?c_K3ocDWcU((Q*Ia2FZ|+* zp&*z5Mj$j{E8L*Wy=Cgv&{9Cj&Tsu4z)~0{@yo5XSjqlwd?&0}MGFXOf3>OqT22Z@ zGQ+!FiAu^qfu`5xHUKfLXh)y*bK#vtECSe2xOcg6)KAlxPYPgrFea=&jkIIO6&eNg zFv00pJ6S}85b5&#vhbM!Gk^e3&M20Iw`z+%X6-pB)ptC`?O@s+mH`< zR*oUfNt&ap1xDviG?jW=4SpK)@E zO7YS;-sfYxb9!bupd-BupV(QO)`fbf8o?UWyfO_%oh(awy=)Vndz)bLras|+Z=Vcb zivo7*e=jRQGrkeBo%%88(qPz2Y4fe0xFjFxrKDR_BY9+q_vkt3z&02cN6Mp)9jc-XP>XmcondXmxD~yY$J^;FEzKurL2t>`P-a67g^~}|YX-bv$)#}6$hyrus zVwxDX;-6!xnPKSumNro|u3kMayPFkHa7lB?UT8jy(>SZ-z`tEmskMb^A+C)%&i0x1 z^uuOep|VuQP(5iJrrCKujEg<|d{Z%X+W`qp=f`Yn*t9k;)7~1X6RkG3?iVPR z|ML(VqPDP_Jg=v9xdR7lEqXdf3XxLuY`Rlh*V@<)9qKi4u@A9gdh#R+>e3c@26}(~ z7d9PxnKoO*4THuLU>=b)Vm|BaGz;KIO9bnLC6P9z)w?Y|xhGPPo^*5NH{s8zxA(*w zTKZn6%0o?#t?>k(mc@ap(^#(c`|ew{6R+@dQ9@(&k|&J2EC@Rb#V4rgYF%mT>4XV^ znCitC>6abQ$fX`3+4w%z{CCFH`saF&-HT@Nnb5qlal8K%u>T}mAlTdgK0d63lSXcIL(2`nKw~8qm7*r}kX{B-%S}fYRna+M1i>GOh(jjl zU2~cZTQl0+1L%9;(ancfV38t{F+EX8?EJ4U)Sv6HF~{{`>g-0h$3 z_0JV1)LI`Zv@&cl|J9El{+ineek}5`nbIufkFtr`2{c^K8RHr zl9A4#8r<7QA48cu(Dkx~ZFwdnf~u@y<-?Qw1LW$;sG)u@0XGDfLRm`*tlUKXT}wq>)@M`O=0BRBEqLAwr<+mbAhBO9hV1_>oX@sGUEX=zRjw3A@hOw8edC}G!d{n_(R zYsDdCoFJ!#0$PUJ8r#WaV@b`*mhb)bp3eGd6RpPm7bZ=fL6eQ+nKvq{T`Z9Y)zzlH zEM)#(W+5^XdgkEaF@aNqvnil zw%dh(ckgXhVVLvf+B%D)Cgso3Hf`p8fl^%nCnKI%K%EBsLycAaCLz1L2G}-zKF@ap zHo1Op4ATcx$futu;0@N#5=aN+XG=)YdBsR)j7ZbP zyc^b+`U^fIQtJHv|KFEa%2@nCTopsK6z<;4s;e$Zu*T1|Z_Hzl>8R;}jlvvbA%TjB z72Dd!_saus>}doxA%0z!H;f#Bc?t37`0U`X;cW5SWf> zdnRO}MEZcY=`8Yn*F|tpZ*r~dmglPnCER3lUed-Ox0?)F|DB#I6v-@(?JIS<<{uGv z;T>i>@7}9^{roFjolVyMPh_tRsdtk>y^Zb#K~_H%^%hPoB*biY#H3q$g0PF#Qj0J% z0qG&kg}$y@Dr|wx-NiCE(8v={U6=6+EwpmT5nNpYCF; z>@R+}s~Wy>_-(oWMFN}h?hFy)={2t(t%8}}j#L`U{X47({u99v;q|H`DahyYq^F z{|hqy8=d=u&;cTtG>nz$*j6wldtB`B@nDgzd47iTa{P8bbf=|c)=LhxHVHOrT~HxW z_guHvILH(QN_2K*{ntjKXql-)4yCBo72zXi|GwCQx1h>K3uc!z-*DhYFGOE{``h zK1O=sZ27;!YLgRtNYR}qOz-T%W5pzqql3w2J?=H184CM3?6bIO$~o+rUMcViiiX;4k99`Y+T>2wK z`&VEi)Q88}`30^>pE$Lz5)~c&8h*K{#izcgcij`s)Gx@RDazdwjzng08JO3S z1B~&RGf%ntT1lD^lYgg0T1vDAM|YdL&o16U>!*;m0-VFNJj?imU}8U>fh#?j&p3^{ z!Jz%WCt5wcV}Rrx56x#)pfL-&9ZX(6H(*-rk2m`RH`LfLO+bB;5(kWHdlVb}&XXU< zxUeK8ojm)NNUdMLKgl#Zn(TV+8vN3wRzVyr*de6?|!MpiL&EUn5=D)AyHnC7VVqsrz#+nmxbi{qgoIulZy7+9zUCKzSx9di~;J(cv%3aiqwvAh|XwaY)`!y{Dvj`bkNZXcuPM zc$)^0=ZWx82z?OYc^`^|HG)(WVsipB=$YYJpRZXzw2JSKX@t157=K#WnqJ3 z+=LD9_9hbh`!oRjV`}I_M8Da{;Rrn4j1_%B({@*A5|V$5JBG5sInGHIk2f?Yg&<;F z)}pWc1$X~{*-4%gl13+Ku9v~4w5BC5uaglI_6r#@H1($)RZhjoo=^Xkgb+YAqUk1_ z`mqDwZH1~x2H_l-^dspp{yf&|zdJ+sHaoRA1J`^;L%#N!NeVbnMnLTX#9-<9H~xm# z|MmACLt1)#PA`>0UOaU3Gk(AV@uwY(FhhGi|I<~Bl={69>N}m7%G?euDt@g_j}c9H zXw5uBQfEgs+xmh!)%qs*Wf|3(c;j#lbSgBB24?deD;fk$%9~a~&uH5zUH+qO1bDgs zd(tjbfJB`ZvK!mm*ORARIus&X42SBS9ENd!g#xY6zW&`Sb^*Ue3k&|E1$YcAm3m?9 zXYauQjog0KwNj$PZAwtY3EkP@fb?AU1rXVRC4Er6o*x%xWafsfExv4Uy5Npa zE6%cznGG3!4MMAjPS$Tp4G~(G4)eYP>K_I83hBqkp&g9HDj3TDj()+gT%3#57xQW8S+lA}je5sBMvbcJ2%q+I+&S@P zAF3OpVsP~K*7UIja(aO@#4xjCCGZq+h7@4{){cAG5$r;mEI>o$3@s5Tm zad?R5cR=fM8Eb8$a1-j04fr^2ObP7i9Ym)Rc#h!8KT_m{kF<{$5;yYJFzve%znvGcD|Z0321A;IVhb zAZ0C&UVGZu<0xb8so*6PHQd=A5}VLxXxIyCuD|0@6w#Vd&dC}#+`y!ZWfg%mvk1^q zop~}faz-MTC)D;J!1bxw+`#oDreX*hWNH4FzpdXf_1_l8oK|m%8kh4oi0#2=~xb;^+Ol}bo z+8Cbcv9U@`sL}0VGLwAXbC}+o&4O-r8OVIa*$kWoguD?i)gzl6Pip{?r>SHWV?_!$ z$L$Zq_~#u5h{#_i$w=J&l;KF*38Zs}xT=k9zZDYRitDd&cuISRdsLKpGowaj@^Oy^ z^{SS6?IV0jJqtyM078L@S(rNsv4!~2Ws&U#$7VkVw z#kB#Up;D>=AucI`1UCdGZxJUYFu{d}Qi&7X9w&&Z&`{yHL);zML6&bp)1a9r30uy4 z&lokKwf3Bv(4%5JC4p5S-@)kK+VDZ__Z&oSoo^b$_Iuv3kD))t({1i8i4SM37e$Kt z&(DS)5IKuj;MHm z9I>*({k$^dY3G*X7vXCdqj$ro9&qkXCI&MJttypU6?-HDV0VFug%3W%#RK#>5<8Cf z8_1(tlwfdwL~_=?E4fox=QY-f2nBFQ!ySC^wOKKvhaO1{I`tnSC|Ycl*ZpCRs@w!m zi%`hZ!(z&O>EY0FynJ3<40#|#^5$DXDWmUkWFjj<;8&;r>C_fEs~CEF9lK zAd}z4YhP-_$-vb4+0UPEhl(-(QIpL*4FWKwQRYDxSvpBLulp{|o@v`742;-e^d16c z3Dg(ChtH4{{?u+^87C5`t`q9&MXls8t@qPIKYjMpj&m|tuF=aa9sz;UZK<-^7+xVi zGGqWn_=_tTsaF8!(Dv%D#$pU~0+}0aBu*0us48fUvoWFD(pOSGZw=KsGsFtp0PAKv9gx1wgDtA`K%h zfAJFrz4eLPI2~;1S{zY2upIj+TvK(iz0UE&aKe?i{3qWr;)2jk#dx3rWHrz#KSPc@ zd5RIodoHwr58e$#h7Z9>dcSOba>%INP48=}@l*RhE2myOzjE79he=#$PJGip3nz@q zZx$J>1Q7|-Ia{+%4)LM>Abr4bo^lp+8a{3XNxp+ot@JNzuPFibjTK%^i#7-26u zbP#p@Z{;-(_9_8VTQZ#9j+O;RVaMg0Lc%h-fKnJ33|D|K@96d48rfN$j~7RDFDzqv zOMgoCcE#-LH>IA{fk%^>REhf*!1&LKNuYB4&`BUs#D7~A;n@5N|B) z|HQ;UE*KaOi2qi9zp!WnnpIv7gnfQru3$W7{aalaQ7r>{ud6Hd*X0_<8@0bxwft-# zZ)l{tD&(&VCdRW|v^C(n@@qm4f7>jPLUjR4?&3h=R=%k*?msRV7*c;bQ{eu(zQpr`krk3{TwBwUjT;();^_nx0b`cM3DRjcWwfBOJIC0t{fu`lXNKf_&S;!V#&2E-0f} z;ET;YeBJ~!dIFmK_&U*-ry7UEys5?0ed!Raf+@M3Gs6CX{`@_uA7)g%5(`Ck?1KWD zpJkuGOsn22AB~Fez&Th_?tut+rJ!(xJtc^MX!{z}>M7*c^9q)WLu_ShCr{(WUscA# z@uj zOwo9w>x;+UC!n?iQ-$>&Vj}D4v!is`8F_bS=ADz!?0vsLeO>ptE-75qW&)ekQd6+S))t89 zd+RTUom!`a{Crz{`0JgHHPn+j%|chBzN?f?K0NoC>vc8#b;PtAWxBQ$h{sgnGgdtB zlQFLlfI7vvq0CVVnJQ(*wB4MQjB?gIpbJ!KH44Nry~EoUminM*audP@TyQ|4erWX>XIjJ*49O<(aS23qIt_1aTF}hFuQ506813AG(OT7cbNj8O9s zc+qt*DAepyFxPUcCflkoFQXr_&4a0li&OfaW=#|`Kc|k8_tj;K_6UiF}Eu$hXYYQ_3nZuN^j~ArU?gD+Lt=*b`7hkJ<~-_p@!j3EBBU zK%sf&$I*MY0RDsPnIOY}j4=p2HaO*GtTr;|2?d zON>cd`A;pPrUGMy=$mAd98L6j-Z&(T+hWr)1CQ}~fy+LqMF@6lol>eN(#E8u^Gsfg zcZMGLd{0+IiYVT7FnR>(f^;BCRPkLbx~2W{?EL`m2LPfdtpXLqh+;$75aCJU;fEHf zwzqOO+b2#f*j;2?MY<9XUkYoqQ4lBKyF4(DuM3V!a3FTKdD<`Z75}&=Vm(3VH8Z<7 zvFJ3?ntF*@9Lh{oM+U-TS$$9`I3h+{bl%*2l?UEme9Q79yl0d1Q{EmG!-`5>T(Mx& zrURY>OFPS3RPz-*yZCdj-4e!Ex@8;H|X3Ui=I z8gD^Pe7Wf~Q0f6;v(x5YN&46~u|A7?r;+8dirO?~Ao7D+xft0w~`gq6By+D4SRJ2F_kL#!J< zfhQtL$`7OZjAcSIBU~W;ZUx&y3|T?F^>d2Mr$VEinb9Z&fZ@QN1^FVW4QY!Nbu(LR z5@o(!3!e$D5f5LHfqmrTo7;&eh49GK!AU54swmHNdi|hU4o9j8~mIrB`^^#~P*v5^gT3!p<`1FkX5k#zT5i+UIq$L7Q zi5gvuXgtH`T}QA_rA`7D0RX7mz#7oJs!5O)es**P8XV)h+(^5$t@7qpvI?r|2q=MA z1OTPvpAS5d>Y57m(N2f()bZ0gD+=weSH035we&3+bVEPh^(x)hwNr1aD=>xBFwe)6 zIH#y9K^mC-;?Im_yTlz3njf`=M)u3SK#ePSX1?%@5VF_XLj_OG$j1NyCp0g%z+%`9A5)m(vdS2? zr(be4As_;Unhy>(HvnHo#0s0}FCEu2Tb*ui6IQZ_B#(pyS zV;1NUAscnVX2;vKQVo;fYy32QffwgG*Xa>G@`>6I*ch5@Ejr4w0x7O z4yre?wwtQxL0d=OOf=T}yfi;UGPg~}S~5rKpH;v8aQq;R)x&_R$!9zUhl-u0?yY5kga(}olf3JC?i`uGzK`Qy+1Zj7da{eou)Z04Wo3AZPO1 z@b;^?@q?NxjM&TeZQ$!JiJB(Kbe>uD^Z_Bs2!Fu|m3r1S{he>oB?yBm-U;AR7e}b+ z9oxA~wnI*o><7mq9euMCkP zN4l=Z0kw@=H<>5(>^!|Tth7FP!m@TeEZvCKF$OoD+X80^krZ1t6tx`4 z`AEb?L@B!tUyoJ-xVg*1uYO!X`1F*Fst-NBvPcI zR@I<8YCWm_UOr#!t4LpJQKz!RAI7gH#Pgs%EyGJaQ9hZ`i3o_8Vu!waoK`Ppu!tV} zg^z)hsWG+E!;^VQyl4(OpYoLRZFly50ZlJnrbMdt%5Do#TItiK1QAgaSPkNadyPFQ zlsW8=6i~r9UlJ0*$!zYp_FI7VE6^4B%JI0CM!WZ!ttZ?JOZA3C@GHqm4U+S^U~)1K zXw%~Qma&kR6qJ6o?SvJKI?{&J*yd0dv_^G(G^9E z=TEknHAi(SEL^ZzHBLduYXI{UtmPVE2(Z4d9U}$V23>}JpAm4ow4#*xu3CqGPjl1) z^+9?R1PZ0rHxHP6eUe|lugOE~L99x7iN1J1Huie5-%)Wezd${f7)&%*eAG9ur`){^ zvEX)5m#~Mp+q6VFL{@0@PAWE31xEK-Um@qxdQcv$$h;P>;GOwU_etW-n~@Y5Hy%@& zN;4I9CyFbcIqZ2FZ}6o{%19J-j=%LFEWAZ#JaA{xeH2MDv6e z%x6`NkTDx%%UK#FWG6R|uj&=^B4&1nj;B|75q!OWrz#VBV}nMRL>lkBaQ{IF-npC_ zr2b4=6H+haP|%f_RYxWrmSM6k#1n!H$$83Z`dNL$)Lpq`$Gf{~{=v*AmbE;X-M1G; zM6yYRX1WE4e0<)fUm$^@mT;YaMeBjihT2P%Pr`ut6U#DsZ1!S>Ye$@M->T&Ybc(`K zvp|+tG_|F5>g0!QGIbOhtnT07!zM2c>c?D?Wk~HIRr87tnrpuT@52<|gOUCaZ7LBF zj=5DB==(_J{9M%GTRvwlU5#JkxYL{LrAT%+HJsdQM;K5mC`5qS2Ae=O zA6A-EkxW(D-qm|1>i16mtkue%0BxFFWO@;t_pt{q@Ig8EV=+J2&9;QRgXI!We(z*@ zR|2#BP*q#V3B_APbXn07$Isv6wt-lxw2!l!P#jbav+UD*1QWC8e8gj0P4cX*O}k}% ztiZAX#a4Ie;}Ouc1k0X0{s5|bsp=XhAC{J#pwt9r9{}MKfhO_5jQoi)>|vj zS6J~PA5^Q-Zh<-(o*`22X-0ULB(w9~%740xDh#>t@x{oqE)=#Tm*0T?v|96ELFw24 zVX(n12S45fUx8X#&KHjc zxXnnUZ}ky5zs?d+oW5o0WieQ*;r4vq_T*?Rzd~yS^*OI^j1l)s;iC>qtLO7BK>w0* zIPb-US48R&nygQ|vuM}N*TN!#cwLr0Xgpf2@e5D5;DR>RbTy5h15RE6y?(>dS&5ky z)HxU->*)0b;7&mN4PPcDA!ECgdc#F1NZ6Xuo@fpQac)uWqA~-`fbO2*I&6(zep}twFuYS^~=mO11 zh52_D6PTM zjGW2#C;#PKN`CghsoN_RT2~3qUR)PYsZjC%wy3T&$!Yswy(-7Bi(Zzwk*-)i9&^ktebbDkR#!sZk|Z z-$R9L_GX3V;SFpdbVX3N()~*77jR;$CrHG;!wR~_y)$LHx8Az}ehfgaBvz%}=?hfC z>x!N$Dk_!Kj-+dajxJgiE3UtezaaoSW*o_t9()zmC;vJ@zXI;^E^`p`A#=j@!=!T& zjt%HMbu>ZUm_q&Sg0Bs);;Awfa3c7-qnt0LU7whX2&(Q9Zs?}+W%^jdB@5x2a_@IL zRO^y9&NP5W2)ow`$!SW)(As6A?s z71ma*i7gyd2qe!G)@_q=6)MDwbfGcq&6extAN@X&q((E#{Lo5n;E}u6885WR6msMK zOfgDhp+d2YlY^xt8S&`q5J{q7(KGfk_7cw~rA36O3i~~4#^n=eS<=FLowVM@v?IH) z^->N--dR$gxM-?F&X^Z3`ZEI&nQn4zhMb!U>{cgkA&9eXNEyzHp2Vi5yolYVQR}LL z2>l6Ea~^*YaeaF%tnj^&zP8HB;X)TEp|wG?syvjQd1C_wW!4NC-%yTTaR;`V6jW{J zmXymWeg||M9qI{CVp^%Ibh8(sqb3s6j^d{EQO&rfKiaWw)t*_+fO7LMm9k3%AP*8r zaY&J&1?B0Qw`C$-0DLg{mt%?@=9nHoUnYhOKYSd{rmVFOGTJ6*GswYzyjR3GCp3!cvn#ou=>IDS3+c$gRe@hu9P{7@A7+CVSq}!XH;Uxix<>?kPV;qana%;KzrreY zP1`AumOE{a}07Y#JqS9n%$r{f6;l!)-kN?$8sV?9R4qcv(gz->=<%12Ap|q1)N08e$ z$sN2ySq}r>^8G$7QjlZol+*-Kw3$bNuiFg^sw7pC{%yr*(6y~LNTTkl8m6Uzd693{ z+x4O3*n$^ly%u26K{Mdg?C!0@8$>Xj_%^PluamQ^@egz+kGGM_F4KK0sv_h^^+KH< zSN2-^cD~tBl1nGkRf6*SV^zJ|6e5U3OZs&iQgvb!h6#C8YSpK88Qo&3>xTShA;&C5 zicJ%DHCG1tvx}eD6X;74xoyz!N>s^seeQe2-<_E7Oh?TzL9i6@gOpPHB`TMHxP4K< zoZ^;iSY~xbe?7hN=Hc5#){(~#_b!^LEbb)ldS3e`;R4pLg_V{JC%CpzkZ3N~XL>`{ zJ<@FH2F5?eGPW6PK1k9iI24)DNX+V1{XIxyhtF{DP~l0$p@KN{j54w>UQ@oFi|y5&M1$}6 z#!gstR>hgO>NIC|aV`@)$V23Vvavq{?*5F4O>bvMTNtcZE1_;i!QJ|0%LwtvX)MvX zas&+{rqGsFhB^JFUG*v=&$!}93IG)h1?fjxyvs~-`ZTGq=VOxzVX5a{m{TQ6)Ei4` zHSw&>-=iV{29X$tgNdd?H-r=WGK)o15u>yp_4|dqNG#T{!7lv%jsCFOVKbF0+T&nk z4{&TKi3pf^b9xQVR`5EI|OI|e}KvCpMngF(0V~9NR|@xS2V&Hh(>hCphm+I0eG5agvuW7@^@Jf zhT=Yqvc_H@HUgMKIXQZ&B0OQU)4X@*w7>!} ziW|nh65B^uSRc$`rBBO3^ohk%T;~x;LJ?I*H-zG##YRFR6mvj2`d}Vji@7302x1r^ zT=@uuUwer2ID%?f!wiQ*}Yoi*5O-YLCzau%EepZvrww2{U zQ_=QK{OdxT>{c3wR(2qn)RLt3S>lZi`Bz<9T#a|3?m{I{7d0T8`ARE3f^hh#`2DIC2VUqN_!9j5t-K|Up8-IvpsH5%pBCek(h4DI4~G8 zJzIR{V8KtS-bu0zN}5)33Gxs%?>(r6o98P#T(FBqu&l*dzLN1K4nqYxoA(p4AS!qu z6G+0Tfmsc#fntY)Kt~vAEZhM1ybyk;Pi7Bkle{?E6n1YR>N8juRVAjX%LnCqI_6#V7>D25Ju? z!u#<%D7kPIt!fs9fS6BCxo5emCWQM&4~gPRf&7L<-6LJMr!Pe$01R;i7WV~!UEMTu zPCDL@I?RDez7J4wt>=i^E`p%&r!|E8B87ohzqds#7wj$2a5j#9>VW0(JupJ$NocGA z;Y#`<9J&FbY0g-qnsY{zLBN+GFL1%3*xJh=)bPUT;*ffqO3)LY?nHNg*?W)ikHyUT1u-X%5kcP)Me93PrGa2pC3? z+%L-Bx}o7^NE{PWTwYIKG5Rd`G6yocT6 zT2IQlAhin+F)O48$NP#1lDb~0VOgx1pxJ@CwUbQpEr1|6b zOPmS5vL9d~HSbT%&q&I%xMjuuIyyjNQDR;So~Bsl=vwaKU8qvUuXN#*+&Ckfq%8n* zyUvGWB?-f33|qIy_A=Sv3w6(9Fh6S~jdymyo|z#&kR|i-E(ny3Nx5sK|2jh*Qxas3 z`Bgd;FYP(ByLP zWQ;6*#@<*5+hp`$;b`2daurK`mn_f&M1{f};ZiABuo|BFz@H}Spdh8#sO89lE9EkC zBuB@6L3>_%qixq09Z!m5`?K{a&gHrfT1t3Wb%0m%nJKBaa_mXMB)Y=-cJ%5V+1nr+ z`d>2Uj94OBaPy+e29WQnl0M~3i_ECBlLwhum&#o1cs|vUk#V8@d~BXhOu*~ZM!{0F zddAp<_~BlAeReUf-#Ht4{m`lvVX&D{06h~$*&T zi;wCPWrf92(Mm_cC&C5q9e6ZP=^T{tE|XNd=;2-AGzXXkaCO&S`cEzij?Jk!Gj!CS zkw5fe#C>TylQ9&6l-)zw?{oM=rE0R~MjI0)Xa=oV^qQBBLzx;6CdlG!9V{2``mOt3 z1&LMLXN}inud6NXw$!rs@eskfJB9tbef#U<7H1s4gwYXCXTB+PsyUCqb((ooFSqe< zk~qQ$FWkML`5j90HSOb|Gc`KKtUKbW=7C&xACNop>GT1rNk)p{!HQag{)xH3(JyXI zOwMcb#6pHP=4S7VXe;JIWE@L#d;=8{fc|_+R_Kh*exIUuri@@mR*M- z)_}gcg!{d25uF4zbuc$=(u#RV+tXXOk`Red$lYfM(a)A)DM1-m*;faciB^6p z*32n>{c?xnwNn}5aY0_C!L6#yTTyg%wI?`fjP9RrH%C>qYx79&Ch*W#j2)Yqs#=`ghjx6!|MkPvQyX zDy!P*FSrB0eC-?4dYkgXmOv~G8j>_ZY zJ_a^0>qtZ*{LY$%scK)V>d>8RrmSGog)<%0WA%fNF?*c)7f0%OnMojY(WgY^k2Q^S zA=P{CC73Ap#rx@ml%rNGbCH+Xu%?$(NuLxMEZIz7ikRPdS zpR|@N2CrDlGe&o9;*4T2`c6t5J|s#Kw09PCf{iCe1_lQz^wO7AcqH84K}g?yEp0@W zRY=OC%2pgPdaJfuUt?VywPh&uE(K(OY?g0sPhlox@aK++Xpr-L`H8dn^`d66ZfbO{ zamjV0w$h%@s4du!Qwd7@^p}$D1tydL2ita{<^vvey@@S_k`C%73ziJCpB=Y zzLVhk$E7Ai$$oX4g$md3^)%~>K5DHKs=# zth56~ce%|W4mGJJM#+@HuAJpe*1}ewf6T-BFk`xsT<%JaB<(7s~`8$G!ay<^wOQ%AxoN}>~>P&Jvm>zdhFufd3I|`2? zU6T5Pw_Ih)c7=w#d%%eV^XE^-3-1z#Q0ihKq3kSo`EbZ*c%D6tTYf?i6esQRAhQm= z>cC9MXivy~!6hX{;PR}$@<0r(&umLe#ATxeY}qBJ5>V<_Jz~SGw+Zz&p z0*zZXv?lQgEY^;%1lAemFbl1x_u|8t=xYL0T|7;gvtCa_LOAWO+P-154n}@%;=;kU zPJ2l~oXl3QmEKi>5L2*7ZZ|X?)!vEivaqyC6P1>|nXA7vUOl(>$WbRyuZJ;P(vOaU z9;>ma$!`-N=&)Pbtt&%`Do3sOcsa24{oz5frLXkrD5m=r^6)fz&%n}R{M6h zkqM)n>NUEi>_ndT);E}0$tv*7g#{-VK^)AJZpjcI@oA731^X>~>lqDB^HScXwDciX ze)7B5A<(|nhz`g;a~HhUkxRbzlgX*baP8ZR*XLG z;&d+`oz@p*gdo8mc&ua1k6PxAxRlt~hFHd4Vd8q&b$=RmsHCNwt#>F3VY(3)RBd(t zRM=S3yRh~Zd*9bdp(4cAmccr)LefwqpHVjFy5Q_m#!zy6KbPSzJN>D$BwM z@8s!Mh_5t6PeQYiS6bDVx0(YJ!9jO<^+KYS2V^MH;=5|QwFbCuB)C``o>qDJ9@j`4 z@^WNP4Xl8bNH;A96jBUjXi`{f>q*{p&8xRAi{O`zPlY;Svc>6KW#uV646IBxJP(Uf?}2@ACp~4sDv7L zXk26QN{)&=57G_^p|=X?=W5wcBT8$Ow}%L@mK4z2XC1UmFL8q-^Tr;n=+GS|R;C{^ z(_3i-HA=jkGf@y@HcWnFMKCiP|6RG8lfq|jQMto<6~_u~OabXdezaQaP+CCky;j;B z->{R@f9g>oJurc(wi?_Gu?w-0NSw`**aOXs8n(NRBp9_264xK$DdsM0Ee>Y9jp}o< zD9{QysnAoBe}4Fuwb6n11$`W!kFQO<)2}^QU#xI}<(K;RbZ$HSx}G!!2 zeK#cOX#kN}fByYjKL4*| z@}YCw@(z)L0$W~&A+YFxVfHKkvMb)D396?NPo8XS{qQ-E$&7)KkIquYz<^={i%}RD z%>T1b^N0AV_MQ(aV9`mgp1WW4tJda+Cb-&>b1{Ezdx|Mo$)de71;B zrVo)giobS(YU_sMukfu{ym9Q+KU(W{imjE}= z-a0rJ_(4R2wHbH$m}fS>`b%EGEiCxVVV9bR1TsAyK9@Uqsb3?3zv_~I(+Bs{t-M9& zaQ>d8XLTMekEiGaZ=lhEF04sDw_ipi)upK9fL(pprq_jJV=nvit4`o1j5o}`q=)|Q zaP_h&|M~ZSWP;X#|4|{{NWOaYDy*o8xfavL$%$0ZX^xgMv|^6_QSuDYjLpWJrv9n_ z%5l(qt?2G)e>O$jWNL+Tm1zgJ(?YAlB*s*gaU}cf$B!TFYonv1)h&Uq-pZsHw8X%a zxE+XmRH6rpM25d_lSI*KRV2!w5JZ$=RLfA{7!C}4(f{1@Kgj2(*rQIk|c*UK#-G51ISH(uh0Q3V6BRA3j-9I*LUvRhGK8V;@rM1r^l@WGD* z2<1?h&@1I4^HezqS;PLn3S1>3#)xoC;2wdd;6zwnnvy^nm>$cUMjG$g3kmcHB4mIg za82l7`0P6U^svEjTxqy7P~Vll!AiMq!9|mmdgTQ@BEymROpXw@3vmS}n%Z}4_hAXt zz3~I01(D|2)xO|0XRcn-QY4$|(Q6f0Q?^#0GM-L|ziF1+15Q2P&HDp~KB~jsvg*K| zEMURbf&gf=G#)(`MG*24iWY_so?NSY-dWTz8&Z8t1Qz!V$Xwri<>rb>0(SCRo-dci zCNfpX3m!m&yHwe0#>n<8Lo4Y8hTayesH&7Yst#{2%eMFYQ<}2bn^jMyHZ6>?e$s$P z5`mprKnAvcFo353Y(FYN*924y=Q9+!!I1 zcXC)3u7$cDOHb2#v9Y3$by#o6mrBIhPS5_$k3c=;zkMv?)#sO`+mp1SutAgF5~TV& z#tfvw-n@u3eCl*0oT@q_v;zA+OvEx?;q4M{RKI>`tR+3rB#dWKzohU>DCnl5o>|B~ z1H&`~Xy79g44ZL8S~}D1aw^}1Mi{VwS@usic8T~|+l@2!&f=Ly zeNOU|i9FtX#=(C&7?-~SKSp&dxJ*fd22 zAN&~sYsA0z@|*i^9?RXF`UIfds6Kmk({IW6{tADEu!az@snz zUZ<-9Xgyjb@GvCQfPo;r8W*Hi10@Ac+x2;YRCqu^S!N1?4BJ?slC1!VNgQ?zO39r1wHAgj6Swe;Rowj7x)wfu0%?oYTglPAnCOF`uhFxph{Cic zMHOn-RujS0)YQpyDASS^(;Iyuizw5B71Q)S_W&KII19^E(YWZMVbP?due$!?(_FJe z!26m~32ZaBledjPNG6!jR4etA(0~b9t>B%RZ|PfZ1j;%`tLt1d<+|1J^&c?fpm~iQ zY1L!jW5#soEqplR#IU6CB={C>oU<5ufy!_ydGI>(mr^Wkw0(C-q{^d4%0qOx{Ch-S z+39z@o=nZv?lH4Tawa#p0c_hN1?SFs)U@}8Q9V03N8YZxl_a#Y8`SlMT^Fq+`j-+) zh@EMQc`c)|Vg7p>Cg@SkGE0A!rfX3Ca^`*ej|R&GXobz?Dm+TTIVJ&r9zHhmH+r%l z>WLP4?PbZ{$(d4dm&gn@kKY5Vvh-4P=3;-S$&s22fZJ`*{Bt?V&REuIGo419X4aN7^_}(4y7xPH4!-YINPQ8v3N7i#H>$HdyC4t)PfeImCiC>PI9jRU zd(GdG^BMNZ?)@Hh;DRQuznh4j3eJ7-pY1Jyyk~$3zwDm5u|SMKWAu;a4kX2?_Wsnm z&24rVz#M)$Pgg8_u>X?_z;-Po0OyDhL-F8>( z_0w{?n{`D z_yzNat}#?kL>7reff2ey`(LVO-ni9mH}P^E;oJB{{%5%pipt>Ew8saBch*!&I#5=# zfW>OrLdcFBKlyavz1B#0PX#tmd{`Lx{*WqxUQXl}_A4gQ?oW`@7_6}AMnzC9dU;(P zid$xI9ISe-osvl?t#X4cS;*_# z8PeJ-a$LWi=hzG3g6aI^{qM{}DkoU>ValyL56zrE2ptq`?S7>od3B6?$x;5Aq(?LH z>jo%P8@Iu+rEOdt>g%6wqZbfg68-5rqV?0F<_;8xt6QTJL|izY-Kg z%I@dKNw1rne;|grxASFGES>(f+?HySyn-SjTcN05G))1Y3?oyaYuoKFY=8f-qvdK= z=P}pA+TkiMO+aXM%NqYYHje`;SYc4lHgpVQ6d;>;m)6h%=P$U78kx*19FjA2w{C=w zeHZY1{u{8c-wrotLWh5Vp-1gAc_;@U))DuMCH{o~whc8ZO6ksxuj_n9587LE|DdhU z>OI7LC*`&Y`}8IcD~Cea24X@5dIcwd-e)e`7#}@26cU_q=4_giQh9iEsu0WYHSn60n;TqsVM@7s5+^)LFn zDw&ilpt<90T|Tw$2h)fBo?A8KWBtXcAN|`;*8J($vJQM8rp0afqOWtFh7)kHWWYMv z7+a;I;vYKc=M6jGqUk-HgLO%NCG#>?eKdAxum&`x8mIc~)Jl1>PwIi!t?WIEPz3fk zL+{#;55Gz4A0m$Oq}MHqAGO-)+;MPh0x}04{b>S~xc)aHaS&18QU3V7R3Y(1o_kPwCKsC3L8xB-Cp zJ`40nMnyy8Q?68dn;k@vsM@}z%3K02Q*q1 zHns`;$V|s46W?Whv42DegzTemR!#jfsz;AV&Z?VEeu1DMNZw4;SWka26m!D1Hu)w5Gw96HP zQY@vvoZzwSZ@xvh6(-7oFUA69w*PnV2KvS~JDF!0 zod|B9*(5utabDc~KWL;p&`8G$7i5~@d0l3vaj#gh;HjJ72^=bM zd@C+Nf`>V6>jgU(3>DlPSX(Oy7vc6vr*MQY;Sx2i(PO7XCKfQpY25AD zm_$dG0sJ#={i z=g|-N%U$B&c~#PPm-u12sPw&Ry{O+dpkZZit|@QtyZE<{+$z~LhJA5~sE--YJdvhN zH&|0+;?sWoP^5yw5t5m5f&}kMe8$r7nPRd=j5!T`7n=nv;bN2WVS_aI*d;C&Hq=7;GY0I0YHZF3NMbQ?wwd?o+H+Okb#05k_ELBcAc6B0Q`gM&I7;9 z;Uo8-{j7A$ba$IgiXR3`d&Vs%ldXEsd~undsv>HV60Is^gts)t5Hi4BGUL0n;i@rY zesjwgiK}Is!2>V4_WguSHaD+(z87;VmivXMziSIZ?po}#a@h&Q;APB%wC|Z7bN{xJ zdLd=^<~LZZo;zYOh>+UcW`+572NgSkJ}~t1u6g*A$1Sr-h=hur8uv;GoZ`mq5vq$x z%3p8ymk1=eDh?)I^1I%8*(D$nf&V*D6t^sK)D@RkWa0g3>&MF3$sXBny4cHOlp!)R zu0vfSH%#q;XjhSlW4L-pCPEtJd6WU-fQeLZ3tO;#z%Ny!XHl!pv5|&3e_d(<4}&j@6RG6=dbJv zZ;=V(e}Zn6`p7Hu(ARwCA!(?Sv!m^rmY4SJWIqL7G@d_wMesbFO0!(=v_ad~1dDt} zJIkR!4*v5&N%I!*F%_8LPNm{*Nn|nLDZzcaqIdexlR@Ii$U|fC!9jAT<+V_rIg`;| z%r>Bw-!^k>0HCjOuS&q$gb!!ua$;gGQ~}^*X`k6`{9^syW%e?HQ$qt+h`e?@c)Yc{ zI5CMl%HDeT!A@6JMkR+NyY+>9{9=TjY;e@^2Tt>=tQlLkw8$3CJ4IN+-4_xrZA4DW zg#_+{RX&6f$hn;$&b-x-5zrzj(#yGe@E8Eq=0M+Ec2D=NlmqZ~C7^pMzO~jzCrVUJ z%HNytD|>$Wp=~g5Hj_Jj@9bO%8MtTo4hQUN)N(6qC4#B(?9979jtPiY%q*mClYcj! zkZ^kF^3bNi{QS;1SXWio%|0{#v@yy7YDvieb|IKJdNa@pFV$-uwi?20$zWv(&(5I=LFXqTX}l#w+Y6d&@`Z!2rGb zZTs8wP)5SVl&@hjIchVlW@oLnz>!73FxK6s(S2|7ePQM8`%-bbuAL@H&eMDI!Ym(R zIhzVE&TdN@e!A$jQJ-bnhn3-uO)AUR&Nd~0`P8=Zdk_kIM9fND(NQX&RnRJwa4)2 zTBU#f?4@TS-2d)m-~&Y9=)>Ll zH_8D*u1AlneBkj;WoXJmyiP*Dwg(dJJ9=$6XkD(ek!7V4&imD)O|l0tO*t)qt=GGW zj`m0B1ESd>p=Wty0pXj8=x&Zn=Vx_2LgC4opES;2x{_?89MUSvfm!#gkE94vW@~pf zFSb^3w@HBccnxFzZ(^nN0Fl~36j3(WFXCmk`Ht7z{XqSXM-5lacar4a|W;_7yc59j9R9`G!|D60i-?(XUy?EB=4eYV7*@3qoXKy|(3Uf{TbW|?UJ z1VH0UP*>TiwO<&;or_=pT*uH}@ZRx>4Di!Zg7LZT;UNE4l^7!wpFqU$EAb8MMxHxy zV*_B95|b@`56Q$TQ92dfiDTav_+XJlbo2s{?H@a#r86AOK>3=4;&WYJd5*uli@3M05>)gK5!n{G2r!3uxZzCysjC{3Wp8?pFCO?Le|`V;>`FiI-sAtm zJ@)mR43Zo^=~UxpXYR*}9gnM^QB_R8H@0LmWiyWu?8u*fP$#^JR!`_u*>X|COtsS? z5tug=*nqD~!&~p>>UyRti=9fWzOyUTO~>{wl1eo<*D{nKd@256)*iE=sV+8Yio~v% z>SV8GP9lr&hGT;qJoR`>SN9Js|0C@TWUb4+NnE2QcJ0>=t1f1t#b~jB223g^-p?YQ z$ZA&+Q&tMzeL=n}11tfUgf&=c0;^GOsYj#CfR`4-m4j4oQ@g5!&mamDarqp|bSmv+Md@_*zZR+-Opk5Eh-=4-_)FGTxc!g$OuU(BqtYyQ^Z>I`P%2kf7W5}Al zN2Ix67VawX?F%DAfC$W{`pwZIxUmywek6272L6rO3bj)T)j^ePl9PgIM4`UYaNTN} zYL~XqhfNlW*IiKL{_p+W&`R^0^GVO>RWEp{5D&5u-KaYblVWmnuH*&G%vk=6bK{pD zM|0zot>hXwNtG;`2F_=58Rld+u3VTi!1flWre^sF)zm^^5zK+wHcX60#PB>=#+aS|Qns?8{V^DZ8=n zX|rV+vSkoLwh@zk>sA=sP?j;)FbrmpWh}$+KBM1qfA9PL(;p?@XF1O~pYu7N^E|WZ z>DlewK}?t2_U8Vet8gya(T$y@oAcv{Ap!hJr!%#K5&ePc@-DN_D{oasn3C3Ivgiv_ zuhy^;Kx<4cY`;bLXziu8!sGf94eB}1)%CW^2MByd0~HVWixiaJyilq&y&yovv^|Fwhq>p(+o9 z=ne^u%Kn-@>Q^KVSQsHy{Bu?aQPd~T)WF~6%BY8Bw%WpwThXC^)%HioEKatD-#rj~ zImdiXTQ})zcICkp!BqV?143z_zSwe3yh>cmlfIJZ@!ko4v_f3_~TEb?FO zC)cf%z4_YThJ^FY3P*k|o>!&0ywmJC!mY}sGV0!0DE&0o%a3|ns5rM|uB&@GFP7Pk zj?ug>vqN@M7GVCXGQjVE#h_E{>O(00LRu$lh3k(;5nu6FsvG|@{b~fx%1Z%Rj<3yDBRk+|7jCeGc}+8|vF-?iuox_;u-V z%}x}uqM_}U5WMmaFlQVH#D~4+V9EHL%@9ckSff;o#jdF!{fsGTVCU}E-)IN`Gp%e^ z^twbRUKW~5$pS+Zq$7Een;&e-la2o!ijz0xyMi9+338CRxKsf@BBhb zrk?X_Igwvqn$-cE?Hu1Azz5>c@!#rC{kISv>u0Cpb-O^9@Q&H?Ar}aOQHF94z%xsc z+L|v{U8XcLg)i`~)AM?5#B(-CcBq*ej3V^4iwo*Y!Qj1}j5Qv9DIb%X9Kf}}rKjk; z;s5j7T|dE7G3oMv@-Ib#vin~d`|RUsWwy@BR?W9zaNFnrdVc)w_UCA1wIl5n@sr%x; z>Cuc83ly27(*#NUCq&_knii2j0aW##+TnI16cnP~Tn}3?I8-HO%wQWa+1+B7mEHp53Fuxd_9u0%(7^LT9 ze=NRDamFG5)&1%~m2O8W_*`u&hZXImLJ+MK_kE@p6(}diUx-!*b?Mx$y1Vg*g-d$Q z2(e$f0(bJ`HC+=dn|xUDev+R;S=~EHkFu+pSS{!fBfgq#29L#}x``WtEw_NpKg{gm zD#-5Q>Hj)$Dk%9=fJeu(#RGVniJnH>m8JN4WT)~!OST#iX?^xX($-2PVuX+R*j=V05 zEqY4*ACH%W5zbC7C+K4n0v--_tq9) zZXeT+_?p|PsWWj}l3Rk;Vn32f{W{1}aTd~Ey$E+y1rQpPbN{m{(QO2g0Q7Rz&clAI zQvdw+Y`{Vr+BAl; z}Ov+*ZnuGxxscmg6 zq6dclV}U%OM_-$2d`tudEjtylI6FEzVY=qH5S~As>ALd1JoTcS(8#lB?hZ1Pv=--b z^DxUhtP)lFo`pcZNWX5x%Z8>8%U?DOX(G3R`wu~BNE4eQTYm(UHrDZ!gYWpI4!S+L zpd)Z3m?%YxQn@nHtTW-FT5q8@A!8AuQs)8(gzmb<#KxgI@!ydr2E4J8SVZUv-*Ntm zC>38My3ykj&+5qc^HHFHt++0?+zC)WQOe_Rn5|EB9Y zzDd{HxApq3HIj8-fR%XU1_lI;Ea^;GH^T3p&lE9&sIIo2&}$|(j^D2Q^St>W`u*oB6XnoUhla``+D4}dag&>#FPt+YU>@A9 zT(v|zP#yKwhP8)s9U89hHv0y8a7ZlLiE^iyeW>L}r)n+XM%4oG-GiM!tg*I!&SlY?P`tI8kxg3FN+ zNwxeita|-wAY99SHtrxCD}RX29ww<&o2VIkB@T3Pu*$stxZ~0bLy@_xChqK-^4f4H zAugwHL+i<2bma1%El<`oz?U-Wj1ZX8iJho0ag!xc&I~%qa|MM-hu65(+P;r29pl)7 z%t;r~t?*%zc;-qK=SbxAS)CCvlqI>-KrHk9X3vPcXf;2q^*5VM6#k#yx)VGS14Tv0T+2#T;)vSG z{hW6_ZAn}<_*ccJtK9upe-1~32g$whT~zvY$w1u}0z8>f;%&H#aK4nnfi>zv%Iohw zbQqyNw8$@XkeRPDay~R+xpO)Fb^hjTVo$cnIl>n3z;rPEEN$z+KOsisiPueGU{U6O{}2wWQ}V>i4KDzt+{9ttCrFHCOQa z`oiIdxDb~CIWHH%HrG&Db*y2qdEkgB9ol_84~U%U-ICxl}k#H|Cg)NjX~zrw8+N_;9h8*N-hmh+#enY8li zai)ViZ{?IcUi}wwSL6~VHBhWgI8w7uhE-`? zrik*RZJP8)5mh>$cZuY34aOMPI5t;8<;-j5MIW+wC*(gm_1~r`yKdh(IIUWHz2gl+ z;4-Z;&o|Df{X5e;j$I3P??=g3C|mWs$pI)a^^(K0C;YkeX1;BZgp`{{G7z4EC?c+5 z;M(y(!1+7XaoZuaIiWbtM11rRFl2!g!9?B^*UV#62RNGY{)uQ{Ga9Kj`%gntHs2Me z&iKWfRXSpuA))vIhN8vc`OG{!Nw{46cZ&JHG0#w|SBHn;W0u>5=a5Mv(EXQ{djYJO zJRt%v_VN|6K)(wshWgIxt`Am#H0SUjut2aA%o$o*X3OuaC_X48JzdG|!tPgvro_1# zOHPhZQxatZwAS`2Nrt6n?SwNWX)(w=D{qzm1wv&*=8_pzH#**o@vZMwa!s1QjdP_b z(DM>)Wds@oF7ssFNG;=K^5i@TIT3p}GoIaSs)dt6p6#a1s9DFGM6^ICp2ogaVrMw3 z!Wx9=AEL-S+$K_nD6;=_{CDh{JoHeBvODFwTNvT}E58P$aRc1%jLQ?{HL0BQ|Kiy~o}KGjOtXHeJO?}o>4r`A<&6LF{G6nn z6$#_Yf}dZ!TgVedmTUG+$V1PVh0#8UaeHrC9*Y`FE}tinvm)q|$x^Y($<7n@Yw#V< z@@+_z?Q!inf=10OO|=y2#~>*y3se{C@BhFnmPHj=GJ0F}!Wpk;Q&s9+ViZ$UAJH`q z^jU!Tl@kb$z%8%q6I+jus-204sYzsY1l`h;$l$I&L;U)I*K3K6$_voPD>uAe?|%#o zpv;*FJYLpsk$<$gWzk|r9I!5mYQi8?y6r>e)S~|ZS<42@d%1G~s(Y~$ieGQt9jFLk zNCRquq$j|C2PZHNo-(m*$cFAVI&lZNC2i`Rw8bpfQ58#UV^COeGZV?k&AJv=p2zVd zlPbWlXc1g8ewb@6g$?Qo!wBfDcCy+ZJxrY!-(m5-fmUQqY;2%SHc+{8axMOHn!mu5 z2`8zD!St$yal?aD=w{o3qL0hs+h97LSp|vH%EC)0yG-X)a_o$#Ct=ecJM;IcqV9fN zN3cY_Vj=A=wB2hIyk^&LrD1?o+kiED6$Dz`vwD}+bcA&L_Z}umUKF-N`Ftp^Oh3QY zbV8yr6)aS{ZBq}lg{QCYrheGc1okYigX0MPF?6okTl7nLp-2E|2W~n z$hA5Pq8v>F>zn~SWs6BpqFQFt6xI}>#V5qzM$6X^KRp#em1zmS*Mz()rLGdx5tR7M zaXpSu#r*St4S3Y16B}Nc6 zuN^UOsa*f(f&0?M(oY?Ady|X3vaERaAyKyp){y+g0X)T}di>Ep$DuNAUM>zPy`pb9 z*?I#l`UlpGNQTzZNjzsO@-p;|izHN!ijq(Ig#n{1@ z4`m0u33^dnxRzzqI~lHf{Hdc-!+wJ}MXst!DR2#Bs@LSbRbrq&R|Kk8FFVH|$$S$O zo^^4)#m)5?36NPH=4AGI4Rr4> z#7rk;Rx5;8?$w`-`n;7LaQ=3DKi1D`N2F!`C}7$SEBkF%USfo~lS;1W?>qk;L?CnK z2`Sl90t<4s=#uJTeya*|`JV*nN{GU^|A=$$40AQt84=xV98M{X#UgW-&;_5KMLCa& zA*U1c!Zhh-i>5Nt(%lX3N;<4?!VJ0aB*A;ty(6kGU;YM!c0zu?r|_T3{s=Bm#Ggr0 zWcc?&RHnF=5?e|H^rw!;JauHo+T>v^HXj0o8zM;o44dKM(r9SJ$=>sUQOLh{o_%2_ zxJ0fXIV>`_B>iL++_{B)OU)_9z+%oqPG$FH2RLK}25eF-DCCX_xv9z(w&oISPf9Op>7z%K+dFG#%Rz+(1$PnLO|O(xpo z2Y5+}U&vE~o&tu~1bm##`S|Q{@q;lxeJJHXZFWyM_=Z(`K+na8^;nMH#o&PY+6fPf zFma;L37M4>peChZux7Xc3pMDCFb-|DRtch$FfMZWVw#ysRl!a!nsJ1AHgMbNOqkc{ z5~})ESK1>q_CZ{hmA>l#wNoA3l^WV_7GLb#K&N&U4?@t#35O)XW%y8I5tqNf{`%x; z;2JsGWI7$+A4~!~`}5e6c0aBw1RtCU3QfAHU1cO^VL9t{f_3RF!WHm>eI*uBuVx{VF5oo{7hXQ5ShlER2cH_)s0!@ArU_9fIb9Jq+3#5u zl*_LlS@%gP`K^N-?vgtEs5i)DMHCr{(e_4o+2`$-5>=;1WJ9<7DPui&H6fR}cFwpW zuds&cnsGt6eYMwj*ZM5jrnwaX0|~BQ#MeLk6P!7KK!8RTllJu-od!T<$??SEZaNz8 zF4TErmmr69*ey`Sv8(&ZGeNA8E4sC+60>|4e}i>JzbzlOZy1-?6;#)m7x9RA!3<&6;G7nZ~L_dON zqyd*&=5Lppytf_)iXXqYE)2ijIbDKv*`RuXBc8=5o6Gj#bqxk~#w1x(6&!Z~-s)`_zcxM@p~Dw|e&(`Gvk|Vu5}P z)<1LKgP`?rG2`d`yKc21;xvEx1@~V$Qk<5r>q&BHR!9@=CGuX$il?=UK0a(h0A!CNkfn~8` z%_A3jAqQ9#vl`J{0JA&%{QHUG8_GeGF3C24)C#0+R@Z!Cmz(7^lf0&h>_b+rrWmSUpN8 zx>OiMy*g76pnp{l)Y&+aJopP;e8UrE>eT06^st2{ps+n*e!_IDbKv5f zFw<3h!`h?rx?_@O%Chpj@{GTZGu1!78iT0XWXK!5>+|BA3pr?N?SuK{mYpq^}Gyd1X){*A8eBIQfhMJDL* z8aubTeF|sE`UZ4yJ>LD4m|V&hu3ZhM@U5pfr_L}L4eh|^hMSm{v9(e3U{-`eL1HU{LS6`VSEfS z#X0Uod&~Q|pTCr^zX7QZeba=9$pSjq*ZQYhoCfhv#}~(bQ5W31FhdvS;gTPiCSv3L?DQO~RI^5|=Muk=&+Cj2Cv#T_)ds;qC#iso9QaGrq($S+H zLdNTdlYk@2lvnn3=D4AufAB0p^H+eI7LI$MKcO4lV!R#a^d}5wALO95!dauxUbY$B7m5be9Iww(c>>BBJYhQBOf< z@|R+J)EYehVC(N5-wKjPnSwR$Ow%2N(OsBiIlrttMO_rY7_yttF~TO+jjAEPEf>EzLc^JanJ`X8pJKJ8(+o}r!!~wbKKAu0 z3I4SYnkBoUVrPGE=OesI9X8*7r@D0?c-yn!N&7OL&}KMAln{=M#VX} z&2+@t?!w%aME2Li%wpV|n{-^mvZ`&Y>m8S~cC--zE&UW!H~J+8g4V(b?FdQz)00}; zHLZU35pV$UMjC0Oc*(?}IE9@~er{q>q3ZHfor0jHX4p5CV!p9~5kj(!UvTEg!Qz~m zI(RN2mYm;LC2P~dTZ_d;rG%JvpA?a^FXs!`AM%VuYOp}$7b!5&phSNUdbkN_@SaI5 zg3o@Rk*@jhT}6)s@7GWLv^w^Z$aBpErY6iU@V<0+G0ak(Ku#+lC8^N!_+K&Txz59A z5QAiOI>r1$E2hZBsdFWI3j-8DCdM^^)Mow`RP&{Csx?AK?&<7FlV%G@M}@Lr5c#>o z*w#RmyR`xsUy1E0QOCxwZ6L|sV`VrCi4uepG;lhL<0QqQUo@onJbWvsGZP&a2kot} zX_q{H9%9%#b~f{l=gAIXKPz>D*is(JSn=Y&hlMxqib@gn$=&(>Si^u>eux>ia?i+7 z`{3Ree5||Jo%FJ7dpZ%niS3+ibjT|YEOR#Nz@HoZGcJ6zc6S3Y8?w5(m&`i?Y( zTeXG?>7VVa%e3EINHz>w3iH@wQ$r+K1}g{VO#2VDP6()o!cj1^M`80%$0g8#>iKCoG(FFcSO)-(>7%B1oEj^@)ASg==}v~_jo;~!%?ThR zDy;8?2o42M>Oyi6Q^B!r)yBOCK6~DFX}mAsad9Z;$uY=ei*>tHl~W2w1)o4%@AFz9 z);R;g5+C5WaZi#k9`8DAmK{8f$55o#mhy(YJ=^L~aaKe#$(!c2{|(I#n>4bC z*9@bVV(3|%x?BMqBsF`QaqZGMhr`9SH0Wuk=Q4k1gvCpY=1MO-JGw`q^f~dh1^3hH z;%J6^#W=co40S8cRjhKKlm090t<&%9S;D8&me2+9ip?bw-3hN5FBUu3xa|+LjQu8h zp5q)BI;_mA{qxpC4Z`qkfuRidrAaOc4q+ASle`ukoN_50yH<@wZ#zlUkRfXau?G zQ#Z-l=xR(yKu1fC+QB!VZ8QZB>#Bdm6xo90k4|?brz>8a+`X>ld|z9BZ@u86&trFCO)TQVqIChO(itr zFxsaP{ob-~?*x01G8Q3LA>KY3vzt&HbT-B*#(H;O(K+Irg03&OX9qIvL^3GP2mQIK zbh{=RnSmSMs;D~guY(x(0(~lb!~I$ql?Mo%U4IckTO1 zy`%|eTQA>apEq|X4q09qn*}lh_kj#{F6@Nzsca3xl}OCvlJOF?{?|&4aTJS^h@VTS zQJ%YXE38e0YhA^ub(@gcp7c``{>M+Vwre*unu-*UC-W=87Pcz(USyqxXvrV98D#wT zM5-#YnmmN;38K8xwnnT@Y1qCyHOy~K~%4Za-{%$2LVz2XO_-;4)4p%sa(PubPk{VObOTI|-w zm*JU76$J+Z(iKy+1>0mf4TGnV$V~>w5ute>rdUP1zjQ9VFvZYhhoI82=ySJ66Xzi! zEN2TfLfQ6;E3YmTO@sUYPH*B`(Mc<(r6;>t!Dg^BP_DccK##M` z3@xqf!_Pu&y+8ViaL71#gwNNGJQB&6a1Za~oxC#@_SbBo<$!*Dk4jOAbvoHGX$rL5 z1D#ROrUoKZZdL=0y;wAxWHRHYv-A2bzPQU|5!vp=%k1^6e17HG-GeC!zi-C%-O;Zw zUte0U1%raG?1&|RA(!CQiZ8p$Hd7+79nsIky)L50$ZuSd!-6t+U&_1D_ypWkEli5O zwmn^H=eMjAd3PRhPOCX}J$aQKa%%rwmukX`!y|Hq--qAtQQ~c#@1Uoy{%WrzyRi21 zjBviHR?>KTVxmz!_7>smHLJfqL#M?;1>Jn&%niDOuMbwu&inGog`BHa0@9QqPEss8 zN|ZyU!98Vx938%H;(L%=wtu{RKDomZYkI zva-dkCvscyTpR8C{uW#3x7svyif2`T*3{>%AHyU3fS?NbDq>WD*ke&&<3iX06)Zw& zz+IRsDsDC)vl-Lc5?MP2N)(Hn@MPHz7ULRGPjt~@<2kM%!$sE8{UCC|@CnwPmD*rQ z0hwu0IDy-xk_byk{_!jE8O{5u1FuVczM3rA){9GQ7x2T*MnBO0qOlBV|3-em|M(Hg zqxj+^E)sdcfv7f@qQDaNp7^$+9^<+9*=MHn1!{7vp*p^KY_N7GcZ%-;c<|QV*>C77 z2l~fOYXRE%r4zzfx&v0Jr?o}Jew*~5i-%Y`J7M7Ibvg*;#II>m)4MszBNUBgmf}^b zfI4aWP3#Lls`wIj!U?r|4r7fT_YB>{x~$gJzD31u6jFRP%dZozJi#pJ`E+ymJ&JV> z^9k`8wuMf0sto$;*r=mE`_ddUwy{bjgMuw75A*U#wjl>l=j86XAs1`-^Vj_FT)Q1x z>8#jt48lm}>l*RUy+0Y3jk~>iMtncFjj*FL=D%6F%BB>GlhCiwEa%>hLTZikYssbP zmog1p1_Z?4kBGzW4QOm~>Dr_g;cG=jr~)iCQ3^ zcB{%ZnJ-P6I|MVK6O7(XeYCUvSYE8XIwJ`8?eX0pFVUq_8cbI%sj4`>4m>faD>$}u z#g=G23^Ov(shIUg)qPn zX2KH(Bn;%UOk;@=DJtjXlt36)G?S}UuiP##epQ`_Uyf?YW97oyGCz2k#}6m-!H2Qd`#A=AhNz2}Nun&jn3>O!@izYifiIFs_}nqn5V_CD{xfrHPj~Yo zsX)9V1?AOWT@;9oba>XdS%VE3V51nmbM0^MN`7UbUD#6FH(S(hw_{Go00maKeU7RXuWL8Jbhn2c#pYp({Nboh6;4X_f^aywU?lp zhgv6fc)k8$VddLR@^|!%9XY^pXjbetTNdYc#xmy3_+C^JoG3mRFPd;`fxXQM-#h`} z)~85J6f~ZDl2<{btFL(2k>`uKV#>x@`BQ~yS=SUs6txDrG$a^B4sJI2JoVfB8Q5M~ zuf{YiptJ~gMJ}Oi*-3ziu-E%`e4zj>Waesy2O6n5KRFv;##QI$Z|57ab&{lYRjNE6 z_Vpi)W*e9VJnS;}iEo#IvZS2#9jHPV-C6-f;V+JbCVIw11A48nFZN=P;VsFC3vVvn zXHG8Aja$i<%;>#kjA}*uk`Z2Z?x=mS*$+z0FWH&RdU4+u^Y13_wx!4q_%tgmUY1qE z_QMYD+o_ z=rg+3kz-PIoQB4l*v!$uTjddLfo(CCgnN?K?uw(K`8lFiZ{?=Q*Q@5lamdRLUg%h% zo%zkB_IIhNVc;YSW#J*()E%Wd^(Hd9I^Jnxxpb66u3?7E%+n@eQI~7#;=kT-4uKBy~6vVS7_ zdwyZbvj9up)|f5W?76d3ucGy$Heh_*+|^ZD;vNBBHPcL-=R7!+1BTKYBZ$k?W8VfS z-JO4|0P0@qwX2)EDRDB(H|WP_2_8`0C2-%bIKwr{qYenvC`?5OrU-K;6RT!T_Ue6c zIhD~*)haVrrWoGUYf|J)do)z8VWkDTjzBN{)D(d4E977G<=0}0XZmZ)uv;^Zj9=KB zs1M-zH!fz>zz!KwBqd7#KA5#;UMz2BwlXGgd+U+YR$YF&nC0ob+RmLoL9Y|Mjek|C zFF>vp&p6p>%sOsD-=glK!Ie^4a`j(xALqdL-`b|&`MfM+VDI&j<8;vM4c+|Gy8uI# zX}->uG-I5AnW;F}jvZjPSAH}Jy4jxkewkQPah5A$=y@jl?+CjG2=vGJ12msnzXaA= zDKD!eB2|ssr_O@4o;X~#9!3^;p{$9mnv)ZNH?J={eH)rM%Z14Mx=-9_nQ;{#7lOyJ zF9yjk5x?O$e$jAIx^lF~v{T&^0?RHjd8?Pg0u~>EUhIq%meIC`z|$|f9htuoUAKQj z^y|k`+D_p%>{~<7{1Wnhm|zu)HS$qE!(yM6TY~ot*iM0>@qTQE4N%SioCR~2t23)V zyW9~o2~>$5b##JD`nV*|Y3sLM*sHx|B%+Vr*S37nadJZKI$>C!@H?q2c?YT3NZjM4 zSkpp!Ci5h=GD}0IwY*kLae!$u0`0Urlx=aHxqHa^b3mY$9?&wGP?#3O4XH^GvzrB7 z3%^P(F8uJeP^*KZ#$jUs6nI_vREbrQfFqw41mB$}*U_lT_@zdWzV$Q4QbugFUO%_! zlUJFBuS0bQyHewOSotYiwxV&GSMIe1ceQvX!H5-!ni9i@{I zcCjwB6A|;->q#T1*G8))Bs3%F8HLRoebc#yKG8(TZ} znfd#m?AoN2AW$FRq$V+~nCCjq#y{G6A|)5{7wE-sbH`q@dLjJs^lYqT#B1sBP96(s zBL_AUiN$Kgi1S?7IaR-^uz>!e53+W{v6?gzY-WyXp2Gov=oREXt{n^RZ$F6eb zNK?7?W4Y?C)phLBJKmr7bUGkr*JTZRE!NG4?20RbK2E)#f)kgsOQdIf<4GKd%MsJt zdaq+J6&>6_wN;cg`mJZNudqSYq<3(SVLea8uQf|X2fHUoF=-*~L?fFDxd!Sgj~jMt z#1$e_OKMxe-7=*^xRj*X_G0WWm8(IGf)4Ad7z+fRXa~VpC_@cGxn+d;HH(68iLO7C zgl{VBk6Wzy{i3-)3G!>9PG1QNhg5c`jpC=4cfNbHDe|}PuzR#C|Ms%7fq2aN^LYeI zh%YUu3tT?CA{kvfhCUYPZ|Zb#8aJkO_f#?iKG$x_m>Sq0cJ^BcU6S+JaTYC-T~Ye? zG`-%EBN{ZDCR{@fPVZEyq1FNFVRj*IA{B7;zATW+h-ka{N6zT2mX?sAjk~=j3w7V$ zchXwZVs*N^#e47KlD-^&24vqLcPv@2F@;8Ep2sV9R@FOpYZ_p6sUxjPKp{nMF5m(b zf~ksope?ob?j6D zogbaFz=iUlTLk0;4}8HvBkqMJwxXNqKnC zN?QyxoKxj6BAo73dM^$5vAE3hp8H3%u*CDuh@>^+5Z9d$`dq-ynA?KiJWGkW`-xnD zK;4RV(7;l+yfaSyG=AbtwC?vSlriA4EYTvi}d33jr zV#MHJN(Po*sd#{fDePl4zEHhv_JLZ;~Fm?$>G% z?fr3qXslX@!?qg`uG#o@?Z?S^S^Uxr6lzt%Wkm+jvlstH%O0b0Lw@fP;TNJw#?2O) zz3H-Tx%4$sa&d`zOvB(+Wf6nf)g#6kEg)VKH~MjP($4qwG!1swZp68*8~=(evv-(x zf|K>wSI#%*an|Ey@daJ9p6`?IOUaomejrS2G~6&-xydlHkCb-%3xEe%wl}tM!`7T&xF5=~;`?||d|cgvp5Db3*G6&IQD2w#zfhk;TRije{SrYZBj`%G-@6B& z$=*$F_+VIEk6j4pkYa_DDG?WYmDeE}2Bq1I5Wk`5Be`DF@ft)}&8dn-pMLdW7fEP`lC@2+lC9lt5$XV+_fuPrA=L=!?J^l%%A_=42Y!l+9FFV>)86k1e zsJEY`&QQZ-IrF0X9ixJ|Jy{Bsu4u%Sp~{&+q0(p?gM6(hmBe4kj9ON&D8Z8e1o z{kntiw^B(sxOfh@fEqP#Q>LawVy4(~0OE2(B=f=33GVS${U}C=T3oOsycszpNY7B> zK(QWLa9ZNbl3DpJljTZc;$T(rTv=oh=5dkA{C+pkS)#1Zh{sYk&p;lB{e<#}xj$Mt z2Z`A)o%EwvdiLf9-Md^?a4cv`; z`x6+|`6ae6FPwGSZl}-K-`T(9Gu~4u7jYgELR>P!H%5;PYa>RaX`w>KRM)PeTTur4-E&Nt`S5yn+IIEPgkL`>|W4->}*&~LrQkBn<22h(9r zJ)C(iIyNjw)5e+9j;{b0epoojzWQsh9^5@Utx&U3SO%I*q=)^ucC(vw33|=CO)H5a z;~w+^*V*I@+jP|0W!+nw;Gtdh;-h;Rzy?2HJoUWAW;5JY|7#(kzK;arHW+!wXFoy)>vbR;|70w-H&H`ym1;wkNheV zdG;!rd5B!#RSjDGplW9D65kKvP)rFojyHBVEx52A+d~Tg`&Btu*YG;nV#Gbvdlp55 z-rd_$U9@zbv^*DtKzkL0x>ZJ`^|q-K6wDac#)AX9Ep$Lz@7NL)hEIAgABFU+dB2re z;aBbSqm%a(;&sC+p)E2+B0hb%7H$+4x<&(_hYyZiA6wF1?@|oHij~;1fmwBU3fmc2 z!w(vo*XDJ6#>3opV7C!oWp(-vEp(*)4bPz@JiTo(@n$D@gTK(f(izM1ulULf5KiNK zpOc*hq~&%3tNyeI9BvEWn|{NYIXtXlXj3S&Bb4hyy22O7&JX9uET`MNCFoB4sQZ?z zv>sYfvvP5;s?ru**@f}M#%|zUhk$(;Bwy!;b<3B6JB_w-+%sq4E3R$jc0q_4|4F*G zo^cF_>CPrw1r!<0W_Jb^gGSW$ptIt!0F_2^gVQxlwrwHD9Fr_2J|-=c(SLBWcydo+ z(Q1E;*Jm80AY4X-+q~P}==!#18ODkve)i&xmhrr1i4ntx3^0 zcN6Ld>cV5ioTrXnTjghfSW*jYPZsY*MM=6^h z1=sTD&({R~KC0QWw7NMR&K)EFlXh)ZIsrX!BkpORl=YawpKxD)Ht>_uiyOx^r+bB=msgtAZ$r^;mx$9BJzvG0`~#jQ zW!H9{Nyf38_ejF}hx6{XZpz~0@~eq$$3~t$;SQBj?UR%L@L<2*<6H24%LUB0@A8Y0 zk}o8S+O2)!t$5-eRtQO5ZpS|2y$1i}f5C#B*R*o;2@-WYt%skTG4$qdmZ|44;bOVy zgSbG}9*6l;PkV&IV%E#!c4wawD)lMnq=i*}c+>6Jx?mRlPeo z&VjL5yhOZllvk9rr5Q50>K~D%``e#BQO@&e>U^)C6CO=*)%M4HPTeCl*SG5{#0P5H1}&J+ z34U8=fE%G^q?kt0*KRPS(FzrxwH`YTX&E{SQc^E%%m(<~R1=P9e2^`{PLCBQEwUu33s~ z+I)KLPksjPVu+U&Lv5g$mI=mved_JoKP_`Z-`>{G-QKDubH05j3hi|tZsXzn z@RyImw|%EM*uICfpTDNu_LA*5;hO!!;0$IWlU%KVjE*Em!vFXC-9|?tycuT*_Y}1j zc~f!DBBumXZcTYNR^)ino*}8HUoqg#by*1>91{I~pSk8NvzxtdV9SV}akG3kq0PUa zt9%>Uap|~@vcn3xdtbf&15IMS0n#e_O8VW5{YQJSjl!F4GjmmM!jbt*@NKfN!6cYu z<>w#D)Zs0=%xN|`{wDz|I#1^}oi7h{_8R+Kf<1&sM+4gRQm8WQ>Sw?7bC05EH$*d) zB9&M_@`N0TluG#WibLkmXg6;^;av7khT6StDZQta{_{5aF$6XuKC*y+pR~5T5HkjcB_VSa3`!86$c+3MY9rxx` zh?L<7y>m_GVaF5hs~Jys!Uf~V7fuETWjJu?EH^o;wATZG-9rP$9NXZ0J?vQy69(as2S{i!a#mWSV#m<2Ds zo7pv?79E4!hi2q|uP`cB++fiBF?RkLL|MVDLFh!AUWVt^4WGxS34hrEQ{{H-raK~7 z@C8}1>z6#?)=HBJnf^0L-VR{CPuLLKiq9DF554)RS5iJ8_k;$V9$eBAg^K3=b<&o) zY_h<{u3<8jc2mhez0TF6U}o?Z`{G5ylhu4(bbXchi3En5)0K7l^?SG5y7D}-OjpG9 z6K0yZiK)RRRqhBOH!tesp9}Bz9G)VB*{QrM{+BRPqJL!=k0~AVn^$0a!4|^+7reEa zmbnMJSs)0`Yw;ymO5du>WaP-79ry2wEjx{horKWimlEd|#Ff7ST@F1?Z z84jF2QF0=~*m_b2s)(%^umfxJ38fO=e)?+-SeZAMB3L5L_IS-Ud_;V5iQn?cx|Z#k zX>SC>RL>bq>8^a(whk5vp5KlzW^(==vcIG6Ev8<`-E{M8xTJLqKhq_JIX?FJ9LAF} z;V)yJ)k!b4^r}bzcb0Z|Bp4v4rcW96P5mJl+_Ks1VOL(z^`-F{H)iC?Hrl9=cvAD$ zh%>D6^~d>h8zn~|yrR#A$!=UV?$5Ezn4;+9 zV1||-m)iGb&SS-yG@t>g;w$;b;M?5_FV1NtH{bc(R&&Mdo5dXB4~QphK4^D{=34(j zoFoFQV_@!{BGX4{=(U6|&ZZ_BeIt21UQWTwdwFYJ1_*kod*%5hBEenT%UAY= z1eP@J9Urvgxx5g@NRwJPlVaM+vz2)2LSAxvwB`a+W^Gg1|Vs5gR zGj7(mE|s=bp!O{GOOU#%-rWh~Ss@zbz-*&8xvB2-2 zg!|{rMC9i-JAbJtxi|4exok$Frt@u|K=DTtN)dBFf_ zG`aQQaiK^!;j8XCOX`1vHh0s`(Z+DDRNaHZAZyipt0}>-8`qiM?esdqg0JqJX-dBr ztiAM|k8_J^Ja$w~Q_X8X{|R?%;hVj#&C7`}F0CBh4@H@7o;wouCr30Ke1}8F{ts1O z!PW+|ZH?1HfdT~z1S#$mZ_q%I;x0v7+$F)?T~gd#i)*2{2d6-BC%6^20$<*9&$;J* ze;~;-Gnu{il09A*!hxADI4VWYHW9l_?|UB4M{o3$Y0LhZjC$~#JySU^?7G8S9t^|! zi}3%hzV{Gu%6JK| zK603O3#ls!b1o`L=$=yJ=I4^46ni86R4Pps_QOqNt%&RU(s#b`J6&gVbl`5!Ffk?k z4>3f-rG)kW0JCIX81vaSvDyd%a3Lm38~%h+hmrJamRk9(9r_@{0!T~`_TG?WkBYzA zbMFR?M~kqf;e(QF;B1U#DH2T15vye;(n{;Z;$8>$le}zm+}CMhQ1yYA27*5A&WN8b zMChlrAYh8AeePy*Ca(060W*+l`nU}RI{Jfd!sV}-KVZqMZ-3Em`fxm?0^2j+x$u=KwZ#CECrGB~ zcI4dWP2)s_M9Pc_$It!{ZvMCBX2rkV-Nezcn8?v5s9?zAHil@BGJk;mvxJ^Ay%D7# z(6{!MIt(lPiBNQ5_NpyVf%5Iv=ySrMt;iJh?)V5Co+UPQ7(3^~+1|H8_9H1aWj?j} z12ty!v<*$K2;v0rL3=IwLr)2>j!BR6b|;o79m;Dn?R@^@1)wmmYt4}KZb&k8xJ#Lq zV+0?MRKjgb&3~O3ylk}ubaIQuKu*X21=PFMGPJOn%garFz@((mvylX}AcW)puYiLj zf>$ctza;sh=2W>S#Y#nys=3rCemGJOo)AWVPM~Z4_QuODVuePQQ|9&DF=N0aBPx(v z=y}b#GrDQy+UhUx{ zE*Bw#n;+#p$&-8rLuli71GAA!+ou~U_|1zSCUNA~pQSpMwIPGaLFJ1%18J%QaJ9*o!f)c^Wz z1FKPZ^FP4gUv11Q_}-BaF!s37>IdaJw6`Zzv|ow)`@CsaNAL7U-?9I0-$cHxVxa!= zQw4$de5lQzqjikc{Rr;_|JVTA?nH0B7Av=;Qb_hECIm&~V~Z$h?LOK~ZLQ)ZuzCJP zl+H}1v&;U$NjKv}>mTk_jk&vWMUdcYr&II|U)QIwFM2jX)Pg4}HI`T+rUYGLFtTGPX6W+o z!rOY)Aj1Xj?_sHIKC*gV4k^H6kx%s$)r}N<#R$#hk zVj!Rc^%Ywr#sDVoV93$yy$aN`gQ>SL)eox)<7;ELtJrk7hbwy?Qv}(iKKguty-J57 zd(D*|csqD-&>SD%7h`epSX-m1mS%6(lZ?Kk`j8W?_EK&~B5&VEMZhJ*UO_R}Ff#Ib z1Fx6h(<-T#nqzmsWudt|HpU!n75U<2j0LP=dnvdN;MV|B@*^P?yd(FF@%VkE+1`)i z@mgYVIj6zz420{=0h~m%Sp+CRS|4})^}J{ahJyTRaq!#A$PWlx(zaWT z0vyYF#^7xMnFF>}+h?tTVx-cfQyD|4m|TIK;#R+}Z;#KTvwjG#(kK-vnR;96`z+tq zznxeM4gl1^dY%0g`ZBf78@YQR#cQr5*G`qIgo(pvJ68USLYnVdE-=BjY^hOxI^Ix1 z1W|zUOmbm2+}jzn-k?*_WdCcTD(P#u?>LSj-Qz4IP^^dwq7iBJ6(B2j@=5PSe8vRU z6-&>J7&o;=MSJL*%x8-BrivE^c|V$4@F4rClMzOZY@JyrIWh*qKA$gm60LQ80@;QHGP~c$%Lel z3liv4D2!r_!qRK_Or>C0x~F1-L+nsba*InnX-`s^({1KST5ZKM?x$)jr5^g=M>`wY@ZrAjdbVfg(qZwKJ1df{}dT~ z)*9~2$!3_v2g6oaM}40#?1!VG#BS%Wk<|Xsz;<7fCakvdkQ&8~%9V4pBOn z9987AN$Yp$z&6}ZRlS>m0LxvRi#;oqW9-+2O+!ui7UI%|ffEj0{BbQgr%RZB=Gk{N@bT>Plnv(I;vOqUL$vR}8R?>gXSxC>E-dYB z8jt}|6e*y+ey2UXI7A(}F&|q6_^nS?=Mz$kFBe>%HUvpCQsae<{6D-dx64(Wx;9!> z%KHo?#S^4rhVlpsi?i_$yr^&St|h40UglPz3cs5K1mq=av=ETAj~ z6AJTUF@_v!+JK=AdLPWYitjLi+2!xGBEUn^o)E$I2z`nsUDg`pg%54M<3}mNtYHoh z71Ect+Q?vPy^!Q9;WGGArryU1!W5S(o&}oRD;jzZ&P;OV?0%>xN~2qT-0dhQ44Db# z!r!*B9|bsxEGNFFQ^Z-lk81E+lFc$BUs{Q+R^Xh`$L#Tv`_cTD`S0x&v z&<&qFJ)%sZ$#%JfBzY#oE5$k(>es*?%nzFZ|DGvuMV5l11&QB8@LXg)^tv* zkQe1k=moW|{@X=|R+83V|2pE&W zpuo%t62$rr&sl(%Z(Kf8N}nLsOZq|ei@uaBi4IIutb3DTKff=YV^4qJBgoyrClE?} zJWNDP2v;x_f^t?qM;2wZ^LfU!a@*2VkPJ(Z;K2XT`)%hTP8vG27n`Eoox1m-W9trA z#LZLMi+3Q3cR*peo`JG&6z!{$n|>tx&OUZU!9;3KQhsq&;0Hc>oP+7>AB1TyzBSQ7 zbq2XBZ+=SzW@1%KszSGHHb?E9)BYD+j23VjrT0aYedi8~>DJ+>rzEj3%d^g|>oz{0 z>0EEtAL>WcfQ090Cv$O>$s+%ZPe0TID!W6)3j>fgy?1WX&ZXO4R7%YLs>X!}pZ5Ad zy)}n^bcqIJ({>j(X|RUqbVMxm=crSW5L4H@4zLUBAGu~(G2Wlg&S={qf%^x1`62On zIxq-esFQJsTR5AtHdv3AkIE06ekAhjigV^`+S-JD0H5qiA1KP2L9Roe`fN>vW5_$! zWDc7N-+7@utg9jc3x?)k^|;Cj7G`s?L;JGr11m{2QHBXLHnb#oa7jSdRy;Th(YYak z;Sz&XWtSAB6nVQiiQBSVbKB;ZkXGY*yp|Tq5uTvyRN3>&({e^5OmD?4pN(g9C(gN7 zapj8`u$-H)Z%gDRA!c&#_;ioUL(qUCK&ifENgds!n(4@uJ??+=T5n-#GDf1Po4%>m zIe9Pjk;tT=^H(HJs;&w_v*?zYUCl)Jh~h_0=s$6tY9@yE4052U&!}s}AfF^PPn+Nd z_IY$~qj%>=aGWUr#i%D32=&cE5cUOKPt~#7=Zfvo6y?UQi(9UWEj;X-;%vH_%RAmm zl2`Oe@ANhyDg{F@hbM8|M3!#vNMQsY+x$e$M6R)qoohn;r!;DGz+RO>wXm}>*%Gmug&1!YRt*uPF^g0qyJg}|T6_fkG;qN%6cV`f=beJhAO89A~w!Bl` zqUNi%X-VC0PKlao&B)QGO>x{zp^_(}wdYSc@eY@&qlvWWh|4Pye=gNQM^1DK?(OAu{<2?EcL% ziqvu4JUps87}5L>bHemQ18K5$we-biL*w)o{` zdCQR?_O{ZR!_^ijwn%!-E9*v5K0%=0c52V-C_Ih{cE;_ZH$^?@C9q1;|KuFpu);;# zTU2z!@bAjvrBRuLW~V2e%-%b9?LP~&Hv-vnX52j-FSiUJct^5^kkE|IjET}KS)Sgh z@b`q++>=uh6#{5q+P%xufr%JQNrt1?unm%@uU<*M1}p09oMGwM^OgtQTAkHDJH9`O z=(e35q5>=R2lMqNUV5Xtc}!mvtpBX;87?y^*4P&hbl3OgQp**Dpwj!z+QF@Lcg`=KfP>OO>4=x_7dmcAa+E?5( z*Iv~++cMQo4QA?L>d7j&yppw1pe0l%AgOU=TTjh=P)79mD6kD4ILO~H#KF>qNyOor z{&@N=>thYk-7L#BbX%-D)5kI)+*Y@YbmZtIL9X|nyanJ zR9tDI_npVUd2g^r*495)!9M^fIhbf!S2}rxMJ4dP#4U}BS1>R5!^Qh>Tcf5dG!c!n z8=1ajG=$L6lOdLaW9@@-P2D^sx()I{ozl*PM&#bulP4N#J5JUGHu#HbxkSB8O0zNcnG-@;DkreHmg?(_CIwQ~h~z37}EG&e?cCp@7Pu zA&i@z35EhFYKW%DURLHMg_j5H95_KbT>pk->C~fL25S+!5Sa6z?5Q8Rc!+?X3eW=a zz0{j+9tBPdquIBt%j?9CqbK~}B5F*-Wa-ib?cKts#b3Z>W-RcyS@!f>0shKNy3V@- z5Ty9B@Gc%5=%npfC0=en&io(R*p~SV0Ic`2VHAT;*Iv1M%#M4j@|C?VYEwCBMgX9( z!~0?V6?UU2fAQDSa{M#V%&tV6ICBjTJ|A9eb0eU`e){Z#M6ZfX(G0 z8G!b|SFoQ?>ks4CoTL7!?8xBNyx)-J*gL!qV z&@-FsrbsgchbPJzZMNeMPBf%XXMV+h8TF?7Huo3u)(tPyBPB6S!?BfJgPc*B(-?Sc zPlu$ABiv!mfYaeoSVXYYX&mCwd2x*GyUuB*XM9C@@{n#CP@RO|)N;aJ_WB;hxqzOu zlW`jL7`#@ipd|d;CT3t>G!%CpIL4SYkSJ(T>r*t8;<}g*+J??{)Emu8zw3zx^dg-# zpNMTev7ZwFXm8mf2KFi#3S^#g^a~qi7}aOyEDFdUz49~*U3aC87?VA%n$5e)`6_h` z7tuSaLQBWgk8>)1iw4;YxHq9vq8fdy^wB&i_qg`S((AhB+a8nG_YDwE0nS~{gqtgY zQr^kVAt~Kh^NvNL&>374A%)6}kq{q3&d^^JYOnRl-`<6P$endl?xFPbrnRP-@tc*G zi)fMMeQbO3@MH3L^nMkSahw{ft8H`gDcxbtkwmsykum4iI}q>V_dvQkyOo$Uu?{i) zca4~_uy>9wh8b|5-*a;^c_|zZpUKxYYq$jkc9UF9)pi6@nz7G}|J~BbA_0fjrFdYf z^&iswq7>YuOk=E5!qYD@Dh$DL?cX=r5CYzxz&r=;IX z;N#9?JMNp1Ne@NcHj&+00uGFqAjE_w$0?{f%e?Esu#x5RQ@Z}Kam7+hexWoa%Z~`5 z*hRjttyzs^ULW@PPp~fp`0O)$@t24m?7>B1nD#CklF99js}7GuWp8h0<>UHx3%)l- z8uF|*dc|MzX^+cC$N7jBbIE1M?FvsUR8yh&LE&NqF;EDvJLiLvLEl{SMcnOU!q;lo zR-$g!y)#8mXrXJXm-+3Ay&XVO{<{Kz=gfPkw;1!feC3myd=&hy0ISK=UA@I1vbSr|~uzNT@1^{4NB z(i+4T@f`g^Q(G$AWJ zNGWR5S&HLU!pfRdI1r%@Pf9=gS$zi5A9F7!+Ut=ojCA?90=oze327Ja#_OIiV*p(d z^rW*9ef@8R8a|M_Lu*%&Ln5vsuqZAbK5O17JO?otTSe#0VH}RI_)wvlNM}Xml{7@) zxqSO|Zpl5?P48kn(-vaeZIb88Nio)e|@5S@&Tb2R}78sa+kCdq4HDdT_H zZ*ck~>pC7iF28(*e`pn5Fq5O6UMCUdg}r>AD*Qz|H{r8n3Z`iYT}QP7-vcF3EQ z@D^EK*23kID%{rc&EzPQIQr}<48`OK$ms{OPN%+)5BPdCor4TFGXDz>{Mjp{ac#@l zoY??z0Ra3pxXrnrNp;AU)Dr zmRSx7$CW|MPKY3suxW*~v3yoP>CU%e%FWm`Gc}`cYOc>e6oQ^RHng_xy^j7Idc8$9 z+Ku#1(?soMjNTW*2nf%wD)bhBQfem$=_NZq%!wJKx}a_zH=(yo%PeCV4aIy1Nr#x* zFx+LJVmf6$Nk8G=;_Z)5zLRxTD7F{w1&tdA0HpFva5{ubr%jPn%#CtIa;xFVr2i2|avsoknF^Emwm&2re}1gw4XR-eJ(xnY z(u6LQBNIJZ2D9?|{|L0+RjI`qjy5x;I*8Lo_y@cK6xt8V?o7(?Q94hEda} ze0-f7^ik?_^+ST$90ANLWoyX3T0+f8MG3)nTe^1dLDR`e9+a&z&o+@B12b>yKRgFt z$aP*b-Q)^H%c#d4;6xrNEh`RQmTS~kgA$2%2!B2xHpu;(ZHWEXHV3Kq$(tT_HQHhW z&9<>~*`W5M3{FRtT|3zewk8k``m!G1Y%SZ&? zAjRe)RzwWp4V#$|csNId`YP3nNgpmI^6nU&^TUNKrw<36j=ewQPO zabb71#ZF-Q`68&<*wwtk~h* zRo^e!`@pEKG)!`jx`jH0xjr5tgE25uG~AIO+G{JY_u*~Z@h=RZ@MXwN;Q*Ns`F^d> z;1)&WlHy2}m5LyG&hH;L!QTe)!oFp%ih3+J%d4h-w(yi;h4Oq5{bUICh#1eyZH(xwXS{Aml}zXu7cD|}Q*`G?f6seyZ2y+XyZ9_pm_7(#L^wL|a_v-P z+NzxGQ;`GQP``pc>s*y*pJU@JU@qiY^}$g7==GCldh^H@u5+F%L6?!gkZw@SrI0?x zMmIe+_`B!#(#d;lrHSdoerX}T?bP~;CJ5BlWrEScAez>%GaWP@nq0QB+S)^otZ+XB z9J^C=vrRCZ)Br`(#_V_YQU=RXt@BIFpY3eQpu(5ErQJnks8UYW66K}2k6@B{M-cvb zgrLZ{A8F|(giLKUS}=J1kbC;uel8(8a6m=kYCb^a{3=VMsQIQqWqHmgq^J;hL5+E2 zJS!y__9*+HX;0<;BJVouRB75acMvx;J}cW@CZ*M046D>3nt?WGD+&vI?i1Dg=$N9w z?7hbQzy7EPqIu)M%#B&Ow!78}(W}mR#*Ed94;9VyldA5+=R5?hBN!xcGAJ5&YLt=t zH%(NB2zrSh*Urwc^zu;iYx&+^ZawZR45=?{Ebf3h{dQDgqN2~J98stya;PxVJwtB% zwhSl@XXOfg0AMm=g9L$Wda`S+0HHa`n;RDBh^9&RVU9JZ{&`n4yvqcDb|;HUO#5>iK@VF zx=sDg9DwRW!UcsqGB=*`d2)&Zl|P(RI@`~`&3|vHEgo_WDiVwhvNB@(3`Ly_TbLWF zC$*rz^EJtqBdLnyba~I%!bSR3byPZQ7qIqPdC(us;!jgmRCT#465&x z79lKsd_md$Pm9+4Q0JuXymyn*g%xWmo@b6O^l-u+g8dOdnG^!tQ}h4BgfzO-tKRU)lo! zIvTyrCc`EjJJ)1cdJ~p$t03G&vQJYaNbV?*I)kP^)Qo5OjsYmxcs@ay1AwYm2kfeA zr3Jq8{adA>1aBvm1<%OOLXt4Vmui#4ZfEA{Jimf)Q}1l#K7U#q2vOrng#;J`4p*dy z`;_LH*uDMai6>lk{&wsdz1H++GjIg?_pGt%dj8&$PiH`o7}=%$NgG{!x1&O3R5@}J zS@pTHx}bn?v{N<_<=G-C5zIGt0rcETCyvXe&|mc}=fS7y*N;XANhGKBtBppXskjZOk}iM_yXI6D{|Xx&z_ko#vc&5snIF;9!s#r+!EO;Ul8ez3HnKI513kmJGkb zyj|@>Sb<%g{_*0xBF#GxP3W%*e8s^Pwd9=PEA3$SF>k9Y&|F;KMm>1k#r~ac0N_1r zAizU^oH(-f$K2J%W1k?^`7*9@(L|56p7(oo-`hH26U!P4XH}5Wbh~Ry?8GN@39EV( zo}!7z;hLmEo5HC7OK|?GK9$@PZM#Ed$K~5;BK6WEHTaJgfMi?dNA+ui!Uh*UXlrO{ zz^|3bO3&Pki79v5-(~m6xD z{KV{Ru$HGp$8SzgH}{ypG&d*P$sznRoaKGRiLk#mt3Su?775cIi%TMk@I~>D4=Hut zA_x+~-4suC8zZ*z$l`5vlSf(>@$t((y0iD-oxc36M4``RNI;cHDH0;-cc!)~Uq|Ji z!!C|XRrYO6{CkS*T3EPEo2w)zt$l}gXt}q~QQukp_}!uXT6ut=j`W?`)AEa@m~DMh z5^rZz7H^=XL&0^&#VfEbrk+&wH>wBUieEqSY(Bk#w?Sn25J`hN8s}f;NOd40D|@?w$Cl#z6!u=andzI_<6Q z)M1=H!Z$f&J`ScUxr4v!RD5I;=O$9mjN5qpvxBbcAQ0E(uAp0g#>d>GS?ZFua(&-b z+-PQ_HAKRoX6zPk4m~G?&vib_uC6@l_Q{>7|D>9Z6ASiIBtTGH)rNz4#ckBrV5EKE z|Ed6cb8f@;AKQ>C6t(KLvWugXo4*3h+f^MC&Z{0uoQ3>Q*{X*dWmPC@S9~mkuJ!iN zqt73p(*}&ExD4(wI0qzfG}}HW2!*7N2>&}+nRDzU;B{`-(OvOMJg@e{)!UMyQdh*k zbIo|wr)9RIC8gG->W0`sH8-EPq|~O*H)u|Qv3!U*iQ2;2Hgleg+IEa9qp{P&3Bm9r zQ8RwwNmhlYMOfxL|ArBVckVWLw$U9jYCe=WR*to!A=Cu)(eH9RQYJ>Jf{|n-3Dg$M;!(I!jKq#V);#T1H5%1$4Cg#FcdRi}U zEV#!@sd5X{{(72Rf7g1j?G{JalD6+WD;Z4nd)=5#gES>0I*oQ65EeQO=`8?&*TRQF zNmwDS+^^_>BVntuvTqn^geqr^L^@lPl9^0kgd@qGutBMQ{md4MYW~*j)2^{mK3h0d z4W7xGuCL*r&$oYPN89DH(oiu6wk)y#Aasb_vEHBqEp1z0q)GKxaHeFD|L~6pA7ufF zk*1k!Kx zMTjFszI&@)a1^v0s4eU3ERr0;+!imw>KuEh%fQZ;y_@8os=au_n5h(B z%^?d-m`aq$hWIM^X7OI?O4l0{>gYIOdu&=Ze?hiMx&#&BC2EQTnChoo$0sp#@f9vq z&;+r@#;xD*A^8~30VX;0hN;7*x5<^Xvi_o@MCd@3pD=_t z@^8&J*4KM56ejtdboK9w$LHf>kJwvNk*=;tI<1BTM)ppPpRyk3(ITX8)2LTS(a$r) zxY@a(zrA`g)~25smR#k|8_>U?B8^wrqP{o0cn24M;j~K3fVd|Yx%q&V>dS#mD1z5` z-D0I~a?RA2NRe6q3T1J+lYg*NJnNhpdUCNskX` zwe*+H!4CM{nuh8-m!~QXI&}6Qohj!CyorOimqtFiqBB~uU%mApZ=K?bvMWFv{L#LS z-18OHXvH6^S{(iJ8~N98&;q?aZ8ES^0Ym9otLdPAX83tJV+da6lSju^5=*DqlrV_5 zfif#1udhKIY(qq{tG2t$wfwF#_9pHMJNHFmQ1{x2i}haKpVXLjFTTds zc^m=+dNUPPJjE}?dk|XXO%DA_3iUk_|H~s0-*HM=-Uo@*yvtEOn(<5LWB`nf$&UnW7z8<=bjp z&_gl_raJO1I??(3<4#HITcIeo-Vh15%en(4L-zNeAYaUAZT9S!Xm(xfF@KnE9c8F6 z<%KPFCRNK;xYE<}H;3LE`k924a{Boy$m>h8cE9X6eC>^aaA1<;Nz%#{^5Vn-68q3U*%PL)KYPQQ)fqTz-+}|wS z9b7>zwX#QUOz$_TR7*l6;^&e%U>kaIDfbi1CzfO>_+-r<2%NPSp_;d4-RO&~i3~?r z=~N#|WgD+mgS**1PqNlxB?gC*C|GunI&iKU<*Hi_(7?A-qPOD%)%>Hg*oF=qSQ-+M z>Dy_*SgXcMH!d4a6{;T;@32w8*4UKbnxTYft#N(wyZ955Oe1PB^hX3C=*{Z$^8Xm& z@6SSXeFNT}_?4|Lzab&|U4;)XDo?(Y-o{>Y_(#<;hc7=Sws`@w8N!1dx*0u&NIr(3 zin}4+Jym|vYT8Ti>W?Sc==Y?c0MnqRNJ+q{P1BfsXQ z>h;Z<(N~=30e!Mx)peT8L#OGd8$%(`Xj$xlDXq>uN}+q&-hC7M6kky7Y_qWq21zC| zhlP)NOt}Ct0k&7z;HfbU(FlyS*knWR{MJ?NPA4h0{r8k>sV1V>m|!r)+2eyP^ytvW zzl(W^Tbc(}rikxfSM#{4&shFtO3zTE~G-FCBE~OXNU=Tz}O5cr^EvD@> zE6^;!d%-LsXLhg@ScFC*82a7k7@;Shzi-zN$fcR{C7W7x%NEBqJ?y@Ex3F)LX=0XW zYNS^H>b_!e|3Pv#WLFratRlM z5uRMSlglZDWqW`K6M2`wtyIu}(XvPz+UpjiaY2FGMC%(yt&Y|el-g3+b$Z6>hW-nJ z%WbbY2E0Zw^fMO7I79<8lrRjfwLf!AFkLLg%!OpC$Fc-qb&ZOF>BFE!{5sBYI*`C) zqS~8X3OE{|f2w}oWp}&tkaC~F;b$lF1X}k0l2iZCx_!s@37h_TKg4VH`)(7xxm4pl z;{M(Zb9hf>`i5TOUQRJ8|GA)wbN@x)U)So+vu(~2zlrmiuHNKl^`vJvJ0^?DL3doi z7c&E$**`8_bC8-tH}{nD`E$%wQ81k#=0HnSnos+%?LZV zXm`G&wLf|6tRcB!iSUklunkISyz(3e^-sJV9D@*CRgRRd3v#rK3c-e2Hlw0e3@8!1 zoZHV?B0?uMXjxdMiK~CF=f#IGHbV@Agwb6jx`vVm(JC5xf_a)gKkRyLKb$2sGmi6wNz|ty8fGO3jjPmMDCMz+33vk zw{c-NvSrRS$7j?g!DZ`D_r~PhH9y3(iuejW-YJtPz5X}|`1xhq0Xz^YWp8X950e}v z<=#i4SAEWr_MvP9ZGVlhbbI5g+Upjvul$L+N^GqN^0U_}Mnlg7vERgbM54R{8*lhP z;hc(T20a)8f3HZHW?p5fpLEbJpEP65qY4~qa!qYWDlbK!LN8y@#Y9~Rac-nm(&u;F zpwz33y0$;I1!Zz$ww>LqHuxiK;v>;ycFYLi7HOZGTJykQ)crtY;8>1i)|-V2=g_Vz zyp5dS`tH&3r;l>r$c7+B? zy@Rfy*)^>X_w2He!t$JuY7Y0B!WCp^`t+j6tx6Sz#C5-8@szy*`haO3lnd2zDA0w$tu#iA{QED>q0P@V5k zCm}g9*f%${49%YcB8mt$939(72-R=wV!Jhc8yGP_Vd>5^w~;rf6|x$dXkuy;9@RZN z%AM4)AfVdH;+)Yy3`hC!ZO94~a-^?@@UC;MFTPgUQ7Y#AD{d3R()zncZ8E%a7<8Fy z#AVPW>ckrepL0tHeZn9k?29NGzf0dVco#==%>Gq%LH; zwkDA|+tQ~mvOu_Rol}LIy~uqX-hQ@5V`&q|WTmtnplA{=H6@T{7+}~%htJy%U}6>x zs=%AgYC_sJ?;~?HV*V9v{C9rs{)XK#>4$PL8Ot9@`5oWbZO)-nf)%BcMrB8a2tjI)9vZkXii|nEcYTK

~iEnB&~m8dZ#V{;H%{Q&ZriJdonTJJ7Rk#_X~zXg)n`ssO= zuRoTsN9frX)xsWuGvoKxFOC{A+@RCy`XS2Dm_QO@xTBzWLI;C&+^M7tV=Y`a{D%L^ z5(BvPF`qujIpC>AkJkisV9wGbvnuXJ_pCWfv(Je_^q0M}+sxhDD-D4HT!dL$ckMeh zn&V06)bJ^qV?GDbTHIKeJO(@(R%N1Me;>WYQ}_@qK}zoov>Bb<6XOCRrYkkmF1clb z9;EkbNR-d3?#FjLOr!Kf5gYBo7QbwBP|TGB@r+d%d79?6n7l^3l-8PkI(7V89KZi& zhG(&WLd9x0V*%5pED9TZ3+8-nN=Y?E4oibUroRWJuZqV?=53i+4JK0K0wyYE*}7fD zZ5*Z{r(L*cz@jl9vRyzkl{|BO?EKyejs(Bj017?Ey#=!1a>>=r*VApp*k$39IPh0DqtS@h z3WE|C`#ld70j%CRa%_1JJmJk(k{+PW879bTlBf8v7F7v_Ougmv@vy zfqTiJwAim3RvkwH(~YN)iO}$cw+NLywmvVo>QlQSSXDz@AE|7o`WsZUqy}|936vG5 z`i)Pt_L|E{^>E2xC2(^L1NkR%(l^n@w69UfVB-T7B;TaQaNM*dWwJ+XGEZ27mw8{T zx{?=|R9k{c6v(GIyJWG2a;@>kV`3n;4auRt4G`(sBPR;K(H{5N*Z5spiA@vq$Q4v65l z6w=?eg83}=CcNi<;I)ZTBV?`r=9B;B<23vs)nqvh7ZT*{7CDZi&KNa@5t@q)3vn~u zpHrwC{@^bXQ1d0_>r2}8&m8*j(Ih~nU{xHqvpPL;=+nmlr4Bi#td0R6^ddb7I?L)| zbFHw(J;srw>T00Pq80u=3V5&Vi~p{kw){;`0Kk(VcXI!eSLLuG3Qpx2^TimG6*c1s z*^R>=*I#GcRaoLm0gZiCpUg`axOKDg0VKl-rkxWj&EH~4ntvT=-ILTl1n)oayG zmxHl##N#?L4rJoRCB-fnz^9}q78i_5bnxX4c3=%bJqjg;VeJe3`Z;#kfN1l^4fK%RHx$4c( zpq>aU_KM&15QF@D9M{1(MUB?3BUh7#TxkD93Cz)u*eAYQ;3a-8Wp6`gO)fqgS2YM5 zdi~B&Q6*j4NXC9?U=Q#QVS=Z2(Ai9FVH>Wn3xv7>vJ2*dzeAo`(0~NG8mAY`G%4EY zCKl~JRlN2Qv>cR`(Go+J+Bttb1-Ya;xRmLYmp?0+c%_8J?~EHx{btO5jGsxB{DB$+ zC{sbJy7OkNIxBNJ4#476P}ZxJ;S`2#Y(QpI+Xs?@0F;Sqcyq&U;|Q51e)xuO$@j%m z0A=sqcgrNF5&PUvEiq+Oj~rqoS`1d>>Iu_*%XHG$k@Sx(=z;;64dgn$2Ms4QStSM$ zS+go=T|04Z(?f0y{LUPIu$tFpHkS!@UV-E7UW4x*9n%z|UnQId)|~b3M^BUa{Nr~2 z*VqBX-#Wvg7H{>kdlTX*SKu(LsqcSJxG(}%t%xT^vFL^JuiSzGkPF{c*4`0aZ29XQ zVOYf+X(_^!@!jAxJ2MoOVo2$4C=@}u2_d2WL?!A66E6S@hf_F*Y$6o&UPHI6!UyX| zITd$(id^(NY~nXr6?|QXqfNoK;cZiRRW~erDW0jra08C?qHBHJ7`(q7On^ChYo!m zqp1Gdl*^!;=MioXqJIL6Qw+NilfgkEGKvK6o{HbF>>Axtv{QN;KcE?=nCFn6S?~?q zA8B#d8pe>B^eb_lH*-kOn~QGLxEIf?&!c(tT9d~-&#_`|@Ae}mBTUU!3%gC8`yW?C zRW=6Fcr%yf=ay@!1kdpX**o-#Ao@d)5Jrd5`XXl0rwc^gP?i%N@I(imh?(f$+H0Fc zQdhNB>zOUzvX`ntAW@7Wem#+TbQ249tjTD}E0>cm;kUL@rQ|+~`c-SZz@qjqXMb+# z?!rE^)NTmsoN+ES+8465N-#os`1lkn1dOl0EY#|q9~H-Wi_-KG_WpmjyM@u~5zXfP zY4~9$szZhC58Ze%qn>zVODWc!5gU$*KR{UrqzSO{99v9p(HQBXqx!p9m#K9$qjV#=b6KW%YHWpp*KuLQN0RZ+;Dq_y`>dzC(U1+rjh6c?Ak5W(?Z?x-fH{{W$A zK-`{66{XYk`FC(}5$cl&@ucK#!=1n22$*IGl0I1~T3^<+jJQm%fVw^0HBM_6Vq zu!P{02FvY-Tp#~i(>a2*BSE#fvi@BtYq^@|7)q45w3d#!GrNQ!O!b}ft62eV4*w4a zhPheiu}8wUf3>*p76gNYUEgbnK81cP8EW6sch&3*NJCG;$0Pu3HHb*CxuK@alsm z3NxzQW;e`f;9EIfJ^9gWwaLMKE9-=b76uw^4r>t=##Q8zx-MMt@v9iQU4P>TOUsK< zqk2kQ5yX8BA_3L9ZtIHUcK~K>#t?;!vibX-eK84CowDcUuwQEpA`LDW3Q>z`Nok!n z`N8@%WwBY5b!^YWykRUXTZp}#HhvcXp{%|;(;Ib00VZdPDk=M>2`|x?3Vvc_QiFOc zYrI+grGqf(ik>_sN?#gnE1c~1tEoD@j^eOno!t8;U+|yU)w1`U*2)i~#3LJ%=&Ue) z+ge7y_MpIlNqhZKfl46GlGB49tr6%$)gU-!0M0!I34KNG`?Z3GQ2eDWTrk|4#FwG5K%V1t zdS`9b79C7g>-1qi$x6=ZO5TN~^54rY$UyDIo)43ULv}S3EFd`p6A1> z@6Ugazc}BndU1Zf>bRM(RJx#ATc5azoqZ4CUzq;L)BVMe0#C3o0MIcKx2?zW@%cFT zJuM=2-8-bLwa;6yH5TQR|5@nIqQ@>$(AhrqN{ zAC7qMi_`q~;7Nutc9_&x1vhra!iV4|@z`B!r!4aR9C31VBykhmJHd4uaUlo0O=7<5 zc%01a`1)@tU2_(M=5HlW-mGcc(~I*y5!Tr>ZgTmZo-1JButoDV5@@6I|6@=&MWo2F z1r20FX>!f_jCL&=N3ux}Az=F+?D3>K6reX?FT7EOx}-#^Zn9Q2@tgjdlBWJ%l|?)Q!)gS7yQl~k%%g*p8MXa8`q*)rnzf^d`$g9=xn&p6zs?q}kn zD+^xk9%*Sx3lAQ#eh0XIus1 z^l?^4pb_yWOl}erd|s4`zPZP;zZRf)`HlE(?%q*I$MzBrHaTl>2yXGgm3boZeQp%$ z7AQ0w3-uGfj5ZoO?=; z18Fq?pIuq?*6qA!)(Mpa(*jvSl|Mm31Z})xnMf4L8+qgbR74RsJ3S}$$`C~!{ybm( z@SARnzDY;rzsJXPEOYK1>Ix4ga12IyY0@KFz~dy1yvxI5_?oz>JFZz_@IAqv6=+T# zfa!*XZs8#Hd>KylM?<302C!uRtU|{0ZS{L)(GL3@-{_B!p!n%gStx9o

*Dm^-*b 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 X#2`hU=Dw}nx6fGLT(4Z`*5m&HAxIDJ literal 0 HcmV?d00001 diff --git a/docs/_static/img/score_ic.png b/docs/_static/img/score_ic.png new file mode 100644 index 0000000000000000000000000000000000000000..14ecd4f14f458d0bb3a95d48998a004b8fe90bee GIT binary patch literal 91595 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

9UxeKTNe73*Gy<-En&84)*N*wlJy+Dl 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 and a `score` column. And users need to assign a strategy used in backtest, if strategy is not assigned, +a 'TopkAmountStrategy' strategy with(topk=20, buffer_margin=150, risk_degree=0.95, limit_threshold=0.0095) will be used. +If strategy module is not user's interested part, 'TopkAmountStrategy' is enough. + +The simple example is as follows. + +.. code-block:: python + + from qlib.contrib.evaluate import backtest + report, positions = backtest(pred_test, topk=50, margin=0.5, verbose=False, limit_threshold=0.0095) + + +Score file +-------------- + +The score file is a pandas DataFrame, its index is and it must +contains a "score" column. + +A score file sample is shown as follows. + +.. code-block:: python + + instrument datetime score + SH600000 2019-01-04 -0.505488 + SZ002531 2019-01-04 -0.320391 + SZ000999 2019-01-04 0.583808 + SZ300569 2019-01-04 0.819628 + SZ001696 2019-01-04 -0.137140 + ... ... + SZ000996 2019-04-30 -1.027618 + SH603127 2019-04-30 0.225677 + SH603126 2019-04-30 0.462443 + SH603133 2019-04-30 -0.302460 + SZ300760 2019-04-30 -0.126383 + +``Model`` module can produce the score file, please refer to `Model `_. + +Strategy +-------------- + +To know more abot ``Strategy``, please refer to `Strategy `_. + + +Api +============== +Please refer to `Backtest Api <../reference/api.html>`_. \ No newline at end of file diff --git a/docs/advanced/cache.rst b/docs/advanced/cache.rst new file mode 100644 index 0000000000..ef9c6e052e --- /dev/null +++ b/docs/advanced/cache.rst @@ -0,0 +1,84 @@ +.. _cache: +==================== +Cache: Frequently-Used Data +==================== + +.. currentmodule:: qlib + +The `cache` is a pluggable module to help accelerate providing data by saving some frequently-used data as cache file. Qlib provides a `Memcache` class to cache the most-frequently-used data in memory, an inheritable `ExpressionCache` class, and an inheritable `DatasetCache` class. + +`Memcache` is a memory cache mechanism that composes of three `MemCacheUnit` instances to cache **Calendar**, **Instruments**, and **Features**. The MemCache is defined globally in `cache.py` as `H`. User can use `H['c'], H['i'], H['f']` to get/set memcache. + +.. autoclass:: qlib.data.cache.MemCacheUnit + :members: + +.. autoclass:: qlib.data.cache.MemCache + :members: + +`ExpressionCache` is a disk cache mechanism that saves expressions such as **Mean($close, 5)**. Users can inherit this base class to define their own cache mechanism. Users need to override `self._uri` method to define how their cache file path is generated, `self._expression` method to define what data they want to cache and how to cache it. + +`DatasetCache` is a disk cache mechanism that saves datasets. A certain dataset is regulated by a stockpool configuration (or a series of instruments, though not recommended), a list of expressions or static feature fields, the start time and end time for the collected features and the frequency. Users need to override `self._uri` method to define how their cache file path is generated, `self._expression` method to define what data they want to cache and how to cache it. + +`ExpressionCache` and `DatasetCache` actually provides the same interfaces with `ExpressionProvider` and `DatasetProvider` so that the disk cache layer is transparent to users and will only be used if they want to define their own cache mechanism. The users can plug the cache mechanism into the server system by assigning the cache class they want to use in `config.py`: + +.. code-block:: python + + 'ExpressionCache': 'ServerExpressionCache', + 'DatasetCache': 'ServerDatasetCache', + +User can find the cache interface here. + +ExpressionCache +==================== +.. autoclass:: qlib.data.cache.ExpressionCache + :members: + +DatasetCache +===================== +.. autoclass:: qlib.data.cache.DatasetCache + :members: + + +Qlib has currently provided `ServerExpressionCache` class and `ServerDatasetCache` class as the cache mechanisms used for QlibServer. The class interface and file structure designed for server cache mechanism is listed below. + +ServerExpressionCache +===================== +.. autoclass:: qlib.data.cache.ServerExpressionCache + + +ServerDatasetCache +==================== +.. autoclass:: qlib.data.cache.ServerDatasetCache + + +Data and cache file structure on server +======================================== +.. code-block:: json + + - data/ + [raw data] updated by data providers + - calendars/ + - day.txt + - instruments/ + - all.txt + - csi500.txt + - ... + - features/ + - sh600000/ + - open.day.bin + - close.day.bin + - ... + - ... + [cached data] updated by server when raw data is updated + - calculated features/ + - sh600000/ + - [hash(instrtument, field_expression, freq)] + - all-time expression -cache data file + - .meta : an assorted meta file recording the instrument name, field name, freq, and visit times + - ... + - cache/ + - [hash(stockpool_config, field_expression_list, freq)] + - all-time Dataset-cache data file + - .meta : an assorted meta file recording the stockpool config, field names and visit times + - .index : an assorted index file recording the line index of all calendars + - ... diff --git a/docs/advanced/data.rst b/docs/advanced/data.rst new file mode 100644 index 0000000000..2e2155d4c5 --- /dev/null +++ b/docs/advanced/data.rst @@ -0,0 +1,176 @@ +.. _data: +============================ +Data: Data Framework&Usage +============================ + +Introduction +============================ + +``Qlib`` provides some methods for obtaining and processing data, and allows users to customize their own methods. + + +Raw Data +============================ + +Qlib provides the script 'scripts/get_data.py' to download the raw data that will be used to initialize the qlib package, please refer to `Initialization <../start/initialization.rst>`_. + +When Qlib is initialized, users can choose A-share mode or US stocks mode, please refer to `Initialization <../start/initialization.rst>`_. + +A-share Mode +-------------------------------- + +If users use Qlib in A-share mode, A-share data is required. The script'scripts/get_data.py' provides methods to download A-share data. If users want to use A-share mode, they need to do as follows. + +- Download data in csv format + Run the following command to download A-share data in csv format. + + .. code-block:: bash + + python scripts/get_data.py csv_data_cn --target_dir ~/.qlib/csv_data/cn_data + + Users can find A-share data in csv format in the'~/.qlib/csv_data/cn_data' directory. + +- Convert data from csv format to Qlib format + Qlib provides the 'scripts/dump_bin.py' to convert data from csv format to qlib format. + Assuming that the users store the A-share data in csv format in path '~/.qlib/csv_data/cn_data', they need to execute the following command to convert the data from csv format to Qlib format: + + .. code-block:: bash + + python scripts/dump_bin.py dump --csv_path ~/.qlib/csv_data/cn_data --qlib_dir ~/.qlib/qlib_data/cn_data --include_fields open,close,high,low,volume,factor + + + When initializing Qlib, users only need to execute `qlib.init(mount_path='~/.qlib/qlib_data/cn_data', region='us')`. Please refer to `Api`_. + +US Stock Mode +------------------------- +If users use Qlib in US Stock mode, US stock data is required. Qlib does not mention script to download US stock data. If users want to use Qlib in US stock mode, they need to do as follows. + +- Prepare data in csv format + Users need to prepare US stock data in csv format by themselves, which is in the same format as the A-share data in csv format. In order to refer to the format, please download the A-share csv data as follows. + + .. code-block:: bash + + python scripts/get_data.py csv_data_cn --target_dir ~/.qlib/csv_data/cn_data + + +- Convert data from csv format to Qlib format + Qlib provides the 'scripts/dump_bin.py' to convert data from csv format to qlib format. + Assuming that the users store the US Stock data in csv format in path '~/.qlib/csv_data/us_data', they need to execute the following command to convert the data from csv format to Qlib format: + + .. code-block:: bash + + python scripts/dump_bin.py dump --csv_path ~/.qlib/csv_data/us_data --qlib_dir ~/.qlib/qlib_data/us_data --include_fields open,close,high,low,volume,factor + + + When initializing Qlib, users only need to execute `qlib.init(mount_path='~/.qlib/qlib_data/us_data', region='us')`. Please refer to `Api`_. + +Please refer to `Script Api <../reference/api.html>`_ for more details. + +Data Retrieval +======================== + +Please refer to `Data Retrieval <../start/getdata.html>`_. + + +Data Handler +================= + +Data Handler is a part of estimator and can also be used as a single module. + +Data Handler can process the raw data. It uses the API in 'qlib.data' to get the raw data, It uses the API in'data' to obtain the original data, and then processes the data, such as standardizing features, removing NaN data, etc. + +Interface +----------------- + +Qlib provides a base class `qlib.contrib.estimator.BaseDataHandler <../reference/api.html#class-qlib.contrib.estimator.BaseDataHandler>`_, which provides the following interfaces: + +- `setup_feature` + Implement the interface to load the data features. + +- `setup_label` + Implement the interface to load the data labels and calculate user's labels. + +- `setup_processed_data` + Implement the interface for data preprocessing, such as preparing feature columns, discarding blank lines, and so on. + +Qlib also provides two functions to help user init the data handler, user can override them for user's need. + +- `_init_kwargs` + User can init the kwargs of the data handler in this function, some kwargs may be used when init the raw df. + Kwargs are the other attributes in data.args, like dropna_label, dropna_feature + +- `_init_raw_df` + User can init the raw df, feature names and label names of data handler in this function. + If the index of feature df and label df are not same, user need to override this method to merge them (e.g. inner, left, right merge). + +If users want to load features and labels through config, users can inherit `qlib.contrib.estimator.handler.ConfigDataHandler`, Qlib also have provided some preprocess method in this subclass. +If users want to use qlib data, `QLibDataHandler` is recommended. Users can inherit their custom class from `QLibDataHandler`, which is also a subclass of `ConfigDataHandler`. + +Usage +------------------ +'Data Handler' can be used as a single module, which provides the following mehtod: + +- `get_split_data` + - According to the start and end dates, return features and labels of the pandas DataFrame type used for the 'Model' + +- `get_rolling_data` + - According to the start and end dates, and `rolling_period`, an iterator is returned, which can be used to traverse the features and labels used for rolling. + + +Example +------------------ + +'Data Handler' can be run with 'estimator' by modifying the configuration file, and can also be used as a single module. + +Know more about how to run 'Data Handler' with estimator, please refer to `Estimator `_. + +Qlib provides data handler 'QLibDataHandlerV1', the following example shows how to run 'QLibDataHandlerV1' as a single module. + +.. note:: User needs to initialize package qlib with qlib.init first, please refer to `initialization `_. + + +.. code-block:: Python + + from qlib.contrib.estimator.handler import QLibDataHandlerV1 + from qlib.contrib.model.gbdt import LGBModel + + DATA_HANDLER_CONFIG = { + "dropna_label": True, + "start_date": "2007-01-01", + "end_date": "2020-08-01", + "market": "csi500", + } + + TRAINER_CONFIG = { + "train_start_date": "2007-01-01", + "train_end_date": "2014-12-31", + "validate_start_date": "2015-01-01", + "validate_end_date": "2016-12-31", + "test_start_date": "2017-01-01", + "test_end_date": "2020-08-01", + } + + exampleDataHandler = QLibDataHandlerV1(**DATA_HANDLER_CONFIG) + + # example of 'get_split_data' + x_train, y_train, x_validate, y_validate, x_test, y_test = exampleDataHandler.get_split_data(**TRAINER_CONFIG) + + # example of 'get_rolling_data' + + for (x_train, y_train, x_validate, y_validate, x_test, y_test) in exampleDataHandler.get_rolling_data(**TRAINER_CONFIG): + print(x_train, y_train, x_validate, y_validate, x_test, y_test) + + +.. note:: (x_train, y_train, x_validate, y_validate, x_test, y_test) can be used as arguments for the ``fit``, ``predict``, and ``score`` methods of the 'Model' , please refer to `Model `_. + +Also, the above example has been given in `examples.estimator.train_backtest_analyze.ipynb`. + +To know more abot 'Data Handler', please refer to `Data Handler Api <../reference/api.html#handler>`_. + + + + +Api +====================== + +Please refer to `Data Api <../reference/api.html#>`_. \ No newline at end of file diff --git a/docs/advanced/estimator.rst b/docs/advanced/estimator.rst new file mode 100644 index 0000000000..28c10ded0e --- /dev/null +++ b/docs/advanced/estimator.rst @@ -0,0 +1,720 @@ +.. _estimator: +=================== +Estimator: Workflow Management +=================== +.. currentmodule:: qlib + +Introduction +=================== + +By ``Estimator``, user can start an 'experiment', which has the following process: + +- Data loading +- Data processing +- Data slicing +- Model static training, rolling training +- Model saving & loading +- Back testing + +Qlib will capture the standard input and output, and backtest performance files of this experiment, and identifiers such as names are stored on disk or on a database. + +Example +=================== + +The following is an example: + +.. note:: Make sure user have installed the latest version of `qlib`, see detail in `Qlib installation <../start/installation.html>`_. + +If user want to use the models and data provided by `Qlib`, then user only need to do as follows. + +First, Write a simple configuration file as following, + +.. code-block:: YAML + + experiment: + name: estimator_example + observer_type: file_storage + mode: train + + model: + class: LGBModel + module_path: qlib.contrib.model.gbdt + args: + loss: mse + colsample_bytree: 0.8879 + learning_rate: 0.0421 + subsample: 0.8789 + lambda_l1: 205.6999 + lambda_l2: 580.9768 + max_depth: 8 + num_leaves: 210 + num_threads: 20 + data: + class: QLibDataHandlerV1 + args: + dropna_label: True + filter: + market: csi500 + trainer: + class: StaticTrainer + args: + rolling_period: 360 + train_start_date: 2007-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-12-31 + test_start_date: 2017-01-01 + test_end_date: 2020-08-01 + strategy: + class: TopkAmountStrategy + args: + topk: 50 + buffer_margin: 230 + backtest: + normal_backtest_args: + verbose: False + limit_threshold: 0.095 + account: 100000000 + benchmark: SH000905 + deal_price: vwap + open_cost: 0.0005 + close_cost: 0.0015 + min_cost: 5 + long_short_backtest_args: + topk: 50 + + qlib_data: + # when testing, please modify the following parameters according to the specific environment + mount_path: "~/.qlib/qlib_data/cn_data" + region: "cn" + + +Then run the following command: + +.. code-block:: bash + + estimator -c configuration.yaml + +.. note:: 'estimator' is a built-in command of our program. + + +Then Make a happy one-click alchemy! + +Configuration file +=================== + +Before using `estimator`, user need to prepare a configuration file. Next Qlib will show user how to prepare each part of the configuration file. + +About the experiment +-------------------- + +First, configuration file needs to have a field about the experiment, whose key is `experiment`, this field and its contents determine how `estimator` tracks and persists this "experiment". Qlib used `sacred`, a lightweight open source tool designed to help us configure, organize, generate logs and manage experiment results. The field `experiment` will determine the partial behavior of `sacred`. + +Usually, in the running process of `estimator`, those following will be managed by `sacred`: + +- `model.bin`, model binary file +- `pred.pkl`, model prediction result file +- `analysis.pkl`, backtest performance analysis file +- `positions.pkl`, backtest position record file +- `run`, the experiment information object, usually contains some meta information such as the experiment name, experiment date, etc. + +Usually it should contain the following: + +.. code-block:: YAML + + experiment: + name: test_experiment + observer_type: mongo + mongo_url: mongodb://MONGO_URL + db_name: public + finetune: false + exp_info_path: /home/test_user/exp_info.json + mode: test + loader: + id: 677 + + +The meaning of each field is as follows: + +- `name` + The experiment name, str type, `sacred` will use this experiment name as an identifier for some important internal processes. Usually, user can see this field in `sacred` by `run` object. The default value is `test_experiment`. + +- `observer_type` + Observer type, str type, there are two values which are `file_storage` and `mongo` respectively. If it is `file_storage`, all the above-mentioned managed contents will be stored in the `dir` directory, separated by the number of times of experiments as a subfolder. If it is `mongo`, the content will be stored in the database. The default is `file_storage`. + + - For `file_storage` observer. + - `dir` + Directory url, str type, directory for `file_storage` observer type, files captures and managed by sacred with observer type of `file_storage` will be save to this directory, default is the directory of `config.json`. + + - For `mongo` observer. + - `mongo_url` + Database URL, str type, required if the observer type is `mongo`. + + - `db_name` + Database name, str type, required if the observer type is `mongo`. + +- `finetune` + Estimator will produce a model based on this flag + + The following table is the processing logic for different situations. + + ========== =========================================== ==================================== =========================================== ========================================== + . Static Rolling + . Finetune=True Finetune=False Finetune=True Finetune=False + ========== =========================================== ==================================== =========================================== ========================================== + Train - Need to provide model(Static or Rolling) - No need to provide model - Need to provide model(Static or Rolling) - Need to provide model(Static or Rolling) + - The args in model section will be - The args in model section will be - The args in model section will be - The args in model section will be + used for finetuning used for training used for finetuning used for finetuning + - Update based on the provided model - Train model from scratch - Update based on the provided model - Based on the provided model update + and parameters and parameters - Train model from scratch + - **Each rolling time slice is based on** - **Train each rolling time slice** + **a model updated from the previous** **separately** + **time** + Test - Model must exist, otherwise an exception will be raised. + - For `StaticTrainer`, user need to train a model and record 'exp_info' for 'Test'. + - For `RollingTrainer`, user need to train a set of models until the latest time, and record 'exp_info' for 'Test'. + ========== ============================================================================================================================================================================= + + .. note:: + + 1. finetune parameters: share model.args parameters. + + 2. provide model: from `loader.model_index`, load the index of the model(starting from 0). + + 3. If `loader.model_index` is None: + - In 'Static Finetune=True', if provide 'Rolling', use the last model to update. + + - For RollingTrainer with Finetune=Ture. + + - If StaticTrainer is used in loader, the model will be used for initialization for finetuning. + + - If RollingTrainer is used in loader, the existing models will be used without any modification and the new models will be initialized with the model in the last period and finetune one by one. + + +- `exp_info_path` + experiment info save path, str type, save the experiment info and model prediction score after the experiment is finished. Optional parameter, the default value is `config_file_dir/ex_name/exp_info.json` + +- `mode` + `train` or `test`, str type, if `mode` is test, it will load the model according to the parameters of `loader`. The default value is `train`. + Also note that when the load model failed, it will `fit` model. + +- `loader` + If the `mode` is `test` or `finetune` is `true`, it will be used. + + - `model_index` + Model index, int type. The index of the loaded model in loader_models (starting at 0) for the first `finetune`. The default value is None. + + - `exp_info_path` + Loader model experiment info path, str type. If the field exists, the following parameters will be parsed from `exp_info_path`, and the following parameters will not work. This field and `id` must exist one. + + - `id` + The experiment id of the model that needs to be loaded, int type. If the `mode` is `test`, this value is required. This field and `exp_info_path` must exist one. + + - `name` + The experiment name of the model that needs to be loaded, str type. The default value is the current experiment `name`. + + - `observer_type` + The experiment observer type of the model that needs to be loaded, str type. The default value is the current experiment `observer_type`. + +Detail Observer Type +~~~~~~~~~~~~~~~~~~~ + +The observer type is a concept of the `sacred` module, which determines how files, standard input and output which are managed by sacred are stored. + +file_storage +^^^^^^^^^^^^ + +If user's choice is `file_storage`, the config may be as following: + +.. code-block:: YAML + + experiment: + name: test_experiment + dir: # default is dir of `config.yml` + observer_type: file_storage + +mongo +^^^^^^^^^^^^ + +If user's choice is `mongo`, the config may be as following: + +.. code-block:: YAML + + experiment: + name: test_experiment + observer_type: mongo + mongo_url: mongodb://MONGO_URL + db_name: public + +The difference with `file_storage` is that user need to indicate `mongo_url` and `db_name` for a mongo observer. + +Note about Mongo Observer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Also note that if user choose mongo observer, user need to make sure: + +- have an environment with the mongodb installed and a mongo database dedicated for storing the experiments results. +- The python environment(the version of python and package) to run the experiments and the one to fetch the results are consistent. + +Note about mode test +~~~~~~~~~~~~~~~~~~~~ +Also note that if user choose `mode` test, user need to make sure: + +- The loader of `test_start_date` must be less than or equal to the current `test_start_date`. +- If other parameters of the `loader` model args are different, a warning will appear. + + +About the model +----------------- + +User can use a specified model by configuration with hyper-parameters, + +For Custom Models +~~~~~~~~~~~~~~~~~ + +Qlib support custom models, but it must be a subclass of the `qlib.contrib.model.Model`, the config for custom model may be as following, + +.. code-block:: YAML + + model: + class: SomeModel + module_path: /tmp/my_experment/custom_model.py + args: + loss: binary + + +The class `SomeModel` should be in the module `custom_model`, and Qlib could parse the `module_path` to load the class. + +Learn more about how to integrate custom model into Qlib, see detial in `Integration <../start/integration.html>`_. + +About data +----------------- + +Qlib have provided a implemented data handler `ALPHA360`, which is used to load raw data, prepare features and label columns, preprocess data, split training, validation, and test sets. It is a subclass of `qlib.contrib.estimator.handler.BaseDataHandler` which provides some interfaces, for example: + +- `setup_feature` + Implement the interface to load the data features. + +- `setup_label` + Implement the interface to load the data labels and calculate user's labels. + +- `setup_processed_data` + Implement this interface for data preprocessing, such as preparing feature columns, discarding blank lines, and so on. + +The `ALPHA360` implements these interfaces as a subclass. Its original data is the stock data of CSI 500, and the tag is the excess return of `t+2` day. + +Qlib also provided two functions to help user init the data handler, user can override them for user's need. + +- `_init_kwargs` + User can init the kwargs of the data handler in this function, some kwargs may be used when init the raw df. + Kwargs are the other attributes in data.args, like dropna_label, dropna_feature + +- `_init_raw_df` + User can init the raw df, feature names and label names of data handler in this function. + If the index of feature df and label df are not same, user need to override this method to merge them (e.g. inner, left, right merge). + +User can use the specified data handler by config as following, + +.. code-block:: YAML + + data: + class: ALPHA360 + provider_uri: C:\\Users\\v-shuyw\\qlib\\qlib_data\\qlib + args: + start_date: 2005-01-01 + end_date: 2018-04-30 + dropna_label: True + feature_label_config: /data/qlib/feature_config/feature_config.yaml + filter: + market: csi500 + filter_pipeline: + - + class: NameDFilter + module_path: qlib.filter + args: + name_rule_re: S(?!Z3) + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + - + class: ExpressionDFilter + module_path: qlib.filter + args: + rule_expression: $open/$factor<=45 + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + +- `class` + Data handler class, str type, which should be a subclass of `qlib.contrib.estimator.handler.BaseDataHandler`, and implements 5 important interfaces for loading features, loading raw data, preprocessing raw data, slicing train, validation, and test data. The default value is `ALPHA360`. If the user want to write a data handler to retrieve the data in qlib. QlibDataHandler is suggested. + +- `module_path` + The module path, str type, absolute url is also supported, indicates the path of the `class` implementation of data processor class. The default value is `qlib.contrib.estimator.handler`. + +- `market` + Index name, str type, the default value is `csi500`. In the 0.3.2 version, move to filter section. + +- `train_start_date` + Training start time, str type, default value is `2005-01-01`. + +- `start_date` + Data start date, str type. + +- `end_date` + Data end date, str type. the data from start_date to end_date decides which part of data will be loaded in datahandler, user can only use these data in the following parts. + +- `dropna_feature` (Optional in args) + Drop Nan feature, bool type, default value is False. + +- `dropna_label` (Optional in args) + Drop Nan label, bool type, default value is True. Some multi-label tasks will use this. + +- `normalize_method` (Optional in args) + Normalzie data by given method. str type. Qlib give two normalize method, `MinMax` and `Std`. + If users wants to build their own method, please override `_process_normalize_feature`. + +- `feature_label_config` (Optional in args) + Features and labels config location, str type (or dict type), indicates the path and filename of user's features and labels config. User can configure the features and labels data in this yaml. (Or, users can just put their data config here directly.) + Here is a reference of data config: + + .. code-block:: YAML + + static_fields: ['$open/$close', '$high/$close', '$low/$close', '$vwap/$close'] + static_names: ['OPN', 'HIGH', 'LOW', 'VWAP'] + windows: [5, 10, 20, 30, 60] + dynamic_fields: ['Ref($vwap, {w})/$close', + 'Mean($vwap, {w})/$close'] + dynamic_names: ['ROC{w}', + 'MA{w}'] + labels: ['Ref($vwap, -2)/Ref($vwap, -1) - 1'] + + + - `static_fields` + Single feature list, list type, each element in the list represents a kind of feature. + + - `static_names` + Single feature name list, list type, each element in the list represents the name of each element in the `static_fields`. + + - `windows` + Time windows, list type, each element represent a time window which will be used when calculating dynamic features. + + - `dynamic_fields` + Dynamic feature which will be expanded by windows, list type, each element in the list represents a feature need to be calculated through time window. + + - `dynamic_names` + Dynamic feature name list, list type, each element in the list represents the name of each element in the `dynamic_fields`. + + - `labels` + Data labels, list type, the labels of the data. + + Qlib gave `ALPHA360` a default config in code, user can use it directly. + + +- `filter` + Dynamically filtering the stocks based on the filter pipeline. + + - `market` + index name, str type, the default value is `csi500`. In the 0.3.2 version, move to this section. + + - `filter_pipeline` + Filter rule list, list type, the default value is []. Can be customized according to user needs. + + - `class` + Filter class name, str type. + + - `module_path` + The module path, str type. + + - `args` + The filter class parameters, this parameters are set according to the `class`, and all the parameters as kwargs to `class`. + + +For Custom Data Handler +~~~~~~~~~~~~~~~~~~~~~~ + +Qlib support custom data handler, but it must be a subclass of the `qlib.contrib.estimator.handler.BaseDataHandler`, the config for custom data handler may be as following, + +.. code-block:: YAML + + data: + class: SomeDataHandler + module_path: /tmp/my_experment/custom_data_handler.py + provider_uri: C:\\Users\\v-shuyw\\qlib\\qlib_data\\qlib + args: + start_date: 2005-01-01 + end_date: 2018-04-30 + feature_label_config: /data/qlib/feature_config/feature_config.yaml + +The class `SomeDataHandler` should be in the module `custom_data_handler`, and Qlib could parse the `module_path` to load the class. + +If user want to load features and labels through config, user can inherit `qlib.contrib.estimator.handler.ConfigDataHandler`, Qlib also have provided some preprocess method in this subclass. +If user want to use qlib data, `QLibDataHandler` is recommended, user can inherit user's custom class through this one, which is also a subclass of `ConfigDataHandler`. + + +About training +----------------- + +User can specify the trainer `trainer` through the config file, which is subclass of `qlib.contrib.estimator.trainer.BaseTrainer` and implement three important interfaces for training the model, restoring the model, and getting model predictions, for example: + +- `train` + Implement this interface to train the model. + +- `load` + Implement this interface to recover the model from disk. + +- `get_pred` + Implement this interface to get model prediction results. + +Qlib have provided two implemented trainer, + +- `StaticTrainer` + The static trainer will be trained using the training, validation, and test data of the data processor static slicing. + +- `RollingTrainer` + The rolling trainer will use the rolling iterator of the data processor to split data for rolling training. + + +User can specify `trainer` through the configuration file: + +.. code-block:: YAML + + trainer: + class: StaticTrainer // or RollingTrainer + args: + rolling_period: 360 + train_start_date: 2005-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-06-30 + test_start_date: 2016-07-01 + test_end_date: 2017-07-31 + +- `class` + Trainer class, trt should be a subclass of `qlib.contrib.estimator.trainer.BaseTrainer`, and need to implement three important interfaces, the default value is `StaticTrainer`. + +- `module_path` + The module path, str type, absolute url is also supported, indicates the path of the trainer class implementation. + +- `rolling_period` + The rolling period, integer type, indicates how many time steps need rolling when rolling the data. The default value is `60`. Only used in `RollingTrainer`. + +- `train_start_date` + Training start time, str type. + +- `train_end_date` + Training end time, str type. + +- `validate_start_date` + Validation start time, str type. + +- `validate_end_date` + Validation end time, str type. + +- `test_start_date` + Test start time, str type. + +- `test_end_date` + Test end time, str type. If `test_end_date` is `-1` or greater than the last date of the data, the last date of the data will be used as `test_end_date`. + +For Custom Trainer +~~~~~~~~~~~~~~~~~~ + +Qlib support custom trainer, but it must be a subclass of the `qlib.contrib.estimator.trainer.BaseTrainer`, the config for custom trainer may be as following, + +.. code-block:: YAML + + trainer: + class: SomeTrainer + module_path: /tmp/my_experment/custom_trainer.py + args: + train_start_date: 2005-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-06-30 + test_start_date: 2016-07-01 + test_end_date: 2017-07-31 + + +The class `SomeTrainer` should be in the module `custom_trainer`, and Qlib could parse the `module_path` to load the class. + +About strategy +----------------- + +User can specify strategy through a config file, for example: + +.. code-block:: YAML + + strategy : + class: TopkAmountStrategy + args: + topk: 50 + buffer_margin: 300 + +- `class` + The strategy class, str type, should be a subclass of `qlib.contrib.strategy.strategy.BaseStrategy`. The default value is `TopkAmountStrategy`. + +- `module_path` + The module location, str type, absolute url is also supported, and absolute path is also supported, indicates the location of the policy class implementation. + +- `topk` + A threshold for buying rank, integer type, determines the threshold for the topk-margin strategy buy rank. The default value is 30. + +- `margin` + The sell buffer threshold, integer type, determines the buffer threshold, those who are outside the margin will be sold. The default value is 350. + + +For Custom Strategy +^^^^^^^^^^^^^^^^^^^ + +Qlib support custom strategy, but it must be a subclass of the `qlib.contrib.strategy.strategy.BaseStrategy`, the config for custom strategy may be as following, + + +.. code-block:: YAML + + strategy : + class: SomeStrategy + module_path: /tmp/my_experment/custom_strategy.py + +The class `SomeStrategy` should be in the module `custom_strategy`, and Qlib could parse the `module_path` to load the class. + +About backtest +----------------- + +User can specify `backtest` through a config file, for example: + +.. code-block:: YAML + + backtest : + normal_backtest_args: + topk: 50 + benchmark: SH000905 + account: 500000 + deal_price: vwap + min_cost: 5 + subscribe_fields: + - $close + - $change + - $factor + + long_short_backtest_args: + topk: 50 + subscribe_fields: + - $close + - $factor + +- `normal_backtest_args` + Normal backtest parameters. All the parameters in this section will be passed to the `qlib.contrib.evaluate.backtest` function in the form of `**kwargs`. + +- `long_short_backtest_args` + long short backtest parameters. All the parameters in this section will be passed to the `qlib.contrib.evaluate.long_short_backtest` function in the form of `**kwargs`. + +- `benchmark` + Stock index symbol, str or list type, the default value is `None`. + + .. note:: + + * If `benchmark` is None, it will use the average change of the day of all stocks in 'pred' as the 'bench'. + + * If `benchmark` is list, it will use the daily average change of the stock pool in the list as the 'bench'. + + * If `benchmark` is str, it will use the daily change as the 'bench'. + + +- `account` + Backtest initial cash, integer type. The `account` in `strategy` section is deprecated. It only works when `account` is not set in `backtest` section. It will be overridden by `account` in the `backtest` section. The default value is 1e9. + +- `deal_price` + Order transaction price field, str type, the default value is vwap. + +- `min_cost` + Min transaction cost, float type, the default value is 5. + +- `subscribe_fields` + Subscribe quote fields, array type, the default value is [`deal_price`, $close, $change, $factor]. + + +Experiment Result +=================== + +User can check the experiment results from file storage directly, or check the experiment results from database, or user can get the experiment results through two API of a module `fetcher` provided by us. + +- `get_experiments()` + The API takes two parameters. The first parameter is experiment name. The default are all experiments. The second parameter is the observer type. User can get experiment name dictionary with list of ids and test end date with this API as follows: + + +.. code-block:: JSON + + { + "ex_a": [ + { + "id": 1, + "test_end_date": "2017-01-01" + } + ], + "ex_b": [ + ... + ] + } + + +- `get_experiment(exp_name, exp_id, fields=None)` + The API takes three parameters, the first parameter is the experiment name, the second parameter is the experiment id, and the third parameter is field list. + If fields is None, will get all fields. + + .. note:: + Currently supported fields: + ['model', 'analysis', 'positions', 'report_normal', 'report_long', 'report_short', 'report_long_short', 'pred', 'task_config', 'label'] + +.. code-block:: JSON + + { + 'analysis': analysis_df, + 'pred': pred_df, + 'positions': positions_dic, + 'report_normal': report_normal_df, + 'report_long_short': report_long_short_df + } + + +Here is a simple example of `FileFetcher`, which could fetch files from `file_storage` observer. + + +.. code-block:: python + + >>> from qlib.contrib.estimator.fetcher import FileFetcher + >>> f = FileFetcher(experiments_dir=r'./') + >>> print(f.get_experiments()) + + { + 'test_experiment': [ + { + 'id': '1', + 'config': ... + }, + { + 'id': '2', + 'config': ... + }, + { + 'id': '3', + 'config': ... + } + ] + } + + + >>> print(f.get_experiment('test_experiment', '1')) + + risk + pred_long mean 0.001964 + std 0.001880 + sharpe 16.516510 + mdd -0.006503 + annual 0.490902 + pred_long_short mean 0.005570 + std 0.005056 + +If users uses mongo observer when training, user should initialize their fether with mongo_url + +.. code-block:: python + + >>> from qlib.contrib.estimator.fetcher import MongoFetcher + >>> f = MongoFetcher(mongo_url=..., db_name=...) + diff --git a/docs/advanced/model.rst b/docs/advanced/model.rst new file mode 100644 index 0000000000..b779f4203a --- /dev/null +++ b/docs/advanced/model.rst @@ -0,0 +1,179 @@ +=================== +Model: Train&Predict +=================== + +Introduction +=================== + +By ``Model``, users can use known data and features to train the model and predict the future score of the stock. + +Interface +=================== + +Qlib provides a base class `qlib.contrib.model.base.Model <../reference/api.html#module-qlib.contrib.model.base>`_, which models should inherit from. + +The base class provides the following interfaces: + +- `def __init__` + - Initialization. + - If users use `estimator <../advanced/estimator.html>`_ to start an experiment, the parameter of `__init__` method shoule be consistent with the hyperparameters in the configuration file. + +- `def fit(self, x_train, y_train, x_valid, y_valid, w_train=None, w_valid=None, **kwargs)` + - Train model. + - Parameter: + - ``x_train``, pd.DataFrame type, train feature + The following example explains the value of x_train: + + .. code-block:: YAML + + KMID KLEN KMID2 KUP KUP2 + instrument datetime + SH600004 2012-01-04 0.000000 0.017685 0.000000 0.012862 0.727275 + 2012-01-05 -0.006473 0.025890 -0.250001 0.012945 0.499998 + 2012-01-06 0.008117 0.019481 0.416666 0.008117 0.416666 + 2012-01-09 0.016051 0.025682 0.624998 0.006421 0.250001 + 2012-01-10 0.017323 0.026772 0.647057 0.003150 0.117648 + ... ... ... ... ... ... + SZ300273 2014-12-25 -0.005295 0.038697 -0.136843 0.016293 0.421052 + 2014-12-26 -0.022486 0.041701 -0.539215 0.002453 0.058824 + 2014-12-29 -0.031526 0.039092 -0.806451 0.000000 0.000000 + 2014-12-30 -0.010000 0.032174 -0.310811 0.013913 0.432433 + 2014-12-31 0.010917 0.020087 0.543479 0.001310 0.065216 + + + ``x_train`` is a pandas DataFrame, whose index is MultiIndex . Each column of `x_train` corresponds to a feature, and the column name is the feature name. + + .. note:: + + The number and names of the columns is determined by the data handler, please refer to `Data Handler `_ and `Estimator Data `_. + + - ``y_train``, pd.DataFrame type, train label + The following example explains the value of y_train: + + .. code-block:: YAML + + LABEL3 + instrument datetime + SH600004 2012-01-04 -0.798456 + 2012-01-05 -1.366716 + 2012-01-06 -0.491026 + 2012-01-09 0.296900 + 2012-01-10 0.501426 + ... ... + SZ300273 2014-12-25 -0.465540 + 2014-12-26 0.233864 + 2014-12-29 0.471368 + 2014-12-30 0.411914 + 2014-12-31 1.342723 + + ``y_train`` is a pandas DataFrame, whose index is MultiIndex . The 'LABEL3' column represents the value of train label. + + .. note:: + + The number and names of the columns is determined by the data handler, please refer to `Data Handler `_. + + - ``x_valid``, pd.DataFrame type, validation feature + The form of ``x_valid`` is same as ``x_train`` + + + - ``y_valid``, pd.DataFrame type, validation label + The form of ``y_valid`` is same as ``y_train`` + + - ``w_train``(Optional args, default is None), pd.DataFrame type, train weight + ``w_train`` is a pandas DataFrame, whose shape and index is same as ``x_train``. The float value in ``w_train`` represents the weight of the feature at the same position in ``x_train``. + + - ``w_valid``(Optional args, default is None), pd.DataFrame type, validation weight + ``w_valid`` is a pandas DataFrame, whose shape and index is same as ``x_valid``. The float value in ``w_train`` represents the weight of the feature at the same position in ``x_train``. + +- `def predict(self, x_test, **kwargs)` + - Predict test data 'x_test' + - Parameter: + - ``x_test``, pd.DataFrame type, test features + The form of ``x_test`` is same as ``x_train`` in 'fit' method. + - Return: + - ``label``, np.ndarray type, test label + The label of ``x_test`` that predicted by model. + +- `def score(self, x_test, y_test, w_test=None, **kwargs)` + - Evaluate model with test feature/label + - Parameter: + - ``x_test``, pd.DataFrame type, test feature + The form of ``x_test`` is same as ``x_train`` in 'fit' method. + + - ``x_test``, pd.DataFrame type, test label + The form of ``y_test`` is same as ``y_train`` in 'fit' method. + + - ``w_test``, pd.DataFrame type, test weight + The form of ``w_test`` is same as ``w_train`` in 'fit' method. + - Return: float type, evaluation score + +For other interfaces such as ``save``, ``load``, ``finetune``, please refer to `Model Api <../reference/api.html#module-qlib.contrib.model.base>`_. + +Example +================== + +'Model' can be run with 'estimator' by modifying the configuration file, and can also be used as a single module. + +Know more about how to run 'Model' with estimator, please refer to `Estimator `_. + +Qlib provides LightGBM and DNN models as the baseline, the following example shows how to run LightGBM as a single module. + +.. note:: User needs to initialize package qlib with qlib.init first, please refer to `initialization `_. + + +.. code-block:: Python + + from qlib.contrib.estimator.handler import QLibDataHandlerV1 + from qlib.contrib.model.gbdt import LGBModel + + DATA_HANDLER_CONFIG = { + "dropna_label": True, + "start_date": "2007-01-01", + "end_date": "2020-08-01", + "market": MARKET, + } + + TRAINER_CONFIG = { + "train_start_date": "2007-01-01", + "train_end_date": "2014-12-31", + "validate_start_date": "2015-01-01", + "validate_end_date": "2016-12-31", + "test_start_date": "2017-01-01", + "test_end_date": "2020-08-01", + } + + x_train, y_train, x_validate, y_validate, x_test, y_test = QLibDataHandlerV1( + **DATA_HANDLER_CONFIG + ).get_split_data(**TRAINER_CONFIG) + + + MODEL_CONFIG = { + "loss": "mse", + "colsample_bytree": 0.8879, + "learning_rate": 0.0421, + "subsample": 0.8789, + "lambda_l1": 205.6999, + "lambda_l2": 580.9768, + "max_depth": 8, + "num_leaves": 210, + "num_threads": 20, + } + # use default model + # custom Model, refer to: TODO: Model api url + model = LGBModel(**MODEL_CONFIG) + model.fit(x_train, y_train, x_validate, y_validate) + _pred = model.predict(x_test) + +.. note:: 'QLibDataHandlerV1' is the data handler provided by Qlib, please refer to `Data Handler `_. + +Also, the above example has been given in ``examples.estimator.train_backtest_analyze.ipynb``. + +Custom Model +=================== + +Qlib supports custom models, how to customize the model and integrate the model into Qlib, please refer to `How to integrate Model into Qlib <../start/integration.html>`_. + + +Api +=================== +Please refer to `Model Api <../reference/api.html#module-qlib.contrib.model.base>`_ for Model Api. diff --git a/docs/advanced/report.rst b/docs/advanced/report.rst new file mode 100644 index 0000000000..029fc0e419 --- /dev/null +++ b/docs/advanced/report.rst @@ -0,0 +1,76 @@ +=================== +'Report': Graphical Results +=================== + +Introduction +=================== + +By ``Report``, user can view the graphical results of the experiment. + +There are the following graphics to view: + +- analysis_position + - report_graph + - score_ic_graph + - cumulative_return_graph + - risk_analysis_graph + - rank_label_graph + +- analysis_model + - model_performance_graph + + +Example +=================== + +.. note:: + + The following is a simple example of drawing. + For more features, please see the function document: similar to ``help(qcr.analysis_position.report_graph)`` + + +Get all supported graphics. Please see the API section at the bottom of the page for details: + +.. code-block:: python + + >>> import qlib.contrib.report as qcr + >>> print(qcr.GRAPH_NAME_LISt) + ['analysis_position.report_graph', 'analysis_position.score_ic_graph', 'analysis_position.cumulative_return_graph', 'analysis_position.risk_analysis_graph', 'analysis_position.rank_label_graph', 'analysis_model.model_performance_graph'] + + + + + +API +=================== + + + +.. automodule:: qlib.contrib.report.analysis_position.report + :members: + + + +.. automodule:: qlib.contrib.report.analysis_position.score_ic + :members: + + + +.. automodule:: qlib.contrib.report.analysis_position.cumulative_return + :members: + + + +.. automodule:: qlib.contrib.report.analysis_position.risk_analysis + :members: + + + +.. automodule:: qlib.contrib.report.analysis_position.rank_label + :members: + + + +.. automodule:: qlib.contrib.report.analysis_model.analysis_model_performance + :members: + diff --git a/docs/advanced/strategy.rst b/docs/advanced/strategy.rst new file mode 100644 index 0000000000..4c9bf4c339 --- /dev/null +++ b/docs/advanced/strategy.rst @@ -0,0 +1,121 @@ +.. _strategy: +========================== +Strategy: Portfolio Management +========================== +.. currentmodule:: qlib + +Introduction +=================== + +By ``Strategy``, users can adopt different trading strategies, which means that users can use different algorithms to generate investment portfolios based on the predicted scores of the ``Model`` module. + +``Qlib`` provides several trading strategy classes, users can customize strategies according to their own needs also. + +Base Class & Interface +===================== + +BaseStrategy +------------------ + +Qlib provides a base class ``qlib.contrib.strategy.BaseStrategy``. All strategy classes need to inherit the base class and implement its interface. + +- `get_risk_degree` + Return the proportion of your total value you will use in investment. Dynamically risk_degree will result in Market timing. + +- `generate_order_list` + Rerturn the order list. + +User can inherit 'BaseStrategy' to costomize their strategy class. + +WeightStrategyBase +-------------------- + +Qlib alse provides a class ``qlib.contrib.strategy.WeightStrategyBase`` that is a subclass of `BaseStrategy`. + +`WeightStrategyBase` only focuses on the target positions, and automatically generates an order list based on positions. It provides the `generate_target_weight_position` interface. + +- `generate_target_weight_position` + According to the current position and trading date to generate the target position. + + .. note:: The cash is not considered. + Return the target position. + +`WeightStrategyBase` implements the interface `generate_order_list`, whose process is as follows. + +- Call `generate_target_weight_position` method to generate the target position. +- Generate the target amount of stocks from the target position. +- Generate the order list from the target amount + +User can inherit `WeightStrategyBase` and implement the inteface `generate_target_weight_position` to costomize their strategy class, which focuses on the target positions. + +Implemented Strategy +==================== + +Qlib provides several implemented strategy classes, such as `TopkWeightStrategy`, `TopkAmountStrategy` and `TopkDropoutStrategy`. + +TopkWeightStrategy +------------------ +`TopkWeightStrategy` is a subclass of `WeightStrategyBase` and implements the interface `generate_target_weight_position`. + +The implemented interface `generate_target_weight_position` adopts the ``Topk`` algorithm to calculate the target position, it ensures that the weight of each stock is as even as possible. + +.. note:: + ``TopK`` algorithm: Define a threshold `margin`. On each trading day, the stocks with the predicted scores behind `margin` will be sold, and then the stocks with the best predicted scores will be bought to maintain the number of stocks at k. + + + +TopkAmountStrategy +------------------ +`TopkAmountStrategy` is a subclass of `BaseStrategy` and implement the interface `generate_order_list` whose process is as follows. + +- Adopt the the ``Topk`` algorithm to calculate the target amount of each stock +- Generate the order list from the target amount + + + +TopkDropoutStrategy +------------------ +`TopkDropoutStrategy` is a subclass of `BaseStrategy` and implement the interface `generate_order_list` whose process is as follows. + +- Adopt the the ``TopkDropout`` algorithm to calculate the target amount of each stock + + .. note:: + + ``TopkDropout`` algorithm: On each trading day, the held stocks with the worst predicted scores will be sold, and then stocks with the best predicted scores will be bought to maintain the number of stocks at k. Because a fixed number of stocks are sold and bought every day, this algorithm can make the turnover rate a fixed value. + +- Generate the order list from the target amount + +Example +==================== +``Strategy`` can be specified in the ``Backtest`` module, the example is as follows. + +.. code-block:: python + + from qlib.contrib.strategy.strategy import TopkAmountStrategy + from qlib.contrib.evaluate import backtest + STRATEGY_CONFIG = { + "topk": 50, + "buffer_margin": 230, + } + BACKTEST_CONFIG = { + "verbose": False, + "limit_threshold": 0.095, + "account": 100000000, + "benchmark": BENCHMARK, + "deal_price": "vwap", + } + + # use default strategy + # custom Strategy, refer to: TODO: Strategy api url + strategy = TopkAmountStrategy(**STRATEGY_CONFIG) + report_normal, positions_normal = backtest( + pred_score, strategy=strategy, **BACKTEST_CONFIG + ) + +Also, the above example has been given in ``examples.estimator.train_backtest_analyze.ipynb``. + +To know more about ``Backtest``, please refer to `Backtest: Model&Strategy Testing `_. + +Api +=================== +Please refer to `Strategy Api <../reference/api.html>`_. diff --git a/docs/changelog/changelog.rst b/docs/changelog/changelog.rst new file mode 100644 index 0000000000..2414029293 --- /dev/null +++ b/docs/changelog/changelog.rst @@ -0,0 +1,2 @@ +.. include:: ../../CHANGES.rst + diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000000..0e815d7e02 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,224 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +# QLib documentation build configuration file, created by +# sphinx-quickstart on Wed Sep 27 15:16:05 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +import pkg_resources + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.todo', + 'sphinx.ext.mathjax', + 'sphinx.ext.napoleon', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u"QLib" +copyright = u"Microsoft" +author = u"Microsoft" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = pkg_resources.get_distribution("qlib").version +# The full version, including alpha/beta/rc tags. +release = pkg_resources.get_distribution("qlib").version + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en_US' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = False + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +add_module_names = True + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinx_rtd_theme" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# html_context = { +# "display_github": False, +# "last_updated": True, +# "commit": True, +# "github_user": "Microsoft", +# "github_repo": "QLib", +# 'github_version': 'master', +# 'conf_py_path': '/docs/', + +# } +# +html_theme_options = { + 'collapse_navigation': False, + 'display_version': False, + 'navigation_depth': 3, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +html_sidebars = { + '**': [ + 'about.html', + 'navigation.html', + 'relations.html', # needs 'show_related': True theme option to display + 'searchbox.html', + ] +} + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'qlibdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, "qlib.tex", u"QLib Documentation", u"Microsoft", "manual"), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'qlib', u'QLib Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'QLib', u'QLib Documentation', + author, 'QLib', 'One line description of project.', + 'Miscellaneous'), +] + + + +# -- Options for Epub output ---------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project +epub_author = author +epub_publisher = author +epub_copyright = copyright + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + + +autodoc_member_order = 'bysource' +autodoc_default_flags = ['members'] diff --git a/docs/hidden/client.rst b/docs/hidden/client.rst new file mode 100644 index 0000000000..242c1afc27 --- /dev/null +++ b/docs/hidden/client.rst @@ -0,0 +1,171 @@ +.. _client: + +Qlib Client-Server Framework +=================== + +.. currentmodule:: qlib + +Introduction +----------- +Client-Server is designed to solve following problems + +- Manage the data in a centralized way. Users don't have to manage data of different versions. +- Reduce the amount of cache to be generated. +- Make the data can be accessed in a remote way. + +Therefore, we designed the client-server framework to solve these problems. +We will maintain a server and provide the data. + +You have to initialize you qlib with specific config for using the client-server framework. +Here is a typical initialization process. + +qlib ``init`` commonly used parameters; ``nfs-common`` must be installed on the server where the client is located, execute: ``sudo apt install nfs-common``: + - ``provider_uri``: nfs-server path; the format is ``host: data_dir``, for example: ``172.23.233.89:/data2/gaochao/sync_qlib/qlib``. If using offline, it can be a local data directory + - ``mount_path``: local data directory, ``provider_uri`` will be mounted to this directory + - ``auto_mount``: whether to automatically mount ``provider_uri`` to ``mount_path`` during qlib ``init``; You can also mount it manually: sudo mount.nfs ``provider_uri`` ``mount_path``. If on PAI, it is recommended to set ``auto_mount=True`` + - ``flask_server``: data service host; if you are on the intranet, you can use the default host: 172.23.233.89 + - ``flask_port``: data service port + + +If running on 10.150.144.153 or 10.150.144.154 server, it's recommended to use the following code to ``init`` qlib: + +.. code-block:: python + + >>> import qlib + >>> qlib.init(auto_mount=False, mount_path='/data/csdesign/qlib') + >>> from qlib.data import D + >>> D.features(['SH600000'], ['$close'], start_time='20080101', end_time='20090101').head() + [39336:MainThread](2019-05-28 21:35:42,800) INFO - Initialization - [__init__.py:16] - default_conf: client. + [39336:MainThread](2019-05-28 21:35:42,801) INFO - Initialization - [__init__.py:54] - qlib successfully initialized based on client settings. + [39336:MainThread](2019-05-28 21:35:42,801) INFO - Initialization - [__init__.py:56] - provider_uri=172.23.233.89:/data2/gaochao/sync_qlib/qlib + [39336:Thread-68](2019-05-28 21:35:42,809) INFO - Client - [client.py:28] - Connect to server ws://172.23.233.89:9710 + [39336:Thread-72](2019-05-28 21:35:43,489) INFO - Client - [client.py:31] - Disconnect from server! + Opening /data/csdesign/qlib/cache/d239a3b191daa9a5b1b19a59beb47b33 in read-only mode + Out[5]: + $close + instrument datetime + SH600000 2008-01-02 119.079704 + 2008-01-03 113.120125 + 2008-01-04 117.878860 + 2008-01-07 124.505539 + 2008-01-08 125.395004 + + +If running on PAI, it's recommended to use the following code to ``init`` qlib: + +.. code-block:: python + + >>> import qlib + >>> qlib.init(auto_mount=True, mount_path='/data/csdesign/qlib', provider_uri='172.23.233.89:/data2/gaochao/sync_qlib/qlib') + >>> from qlib.data import D + >>> D.features(['SH600000'], ['$close'], start_time='20080101', end_time='20090101').head() + [39336:MainThread](2019-05-28 21:35:42,800) INFO - Initialization - [__init__.py:16] - default_conf: client. + [39336:MainThread](2019-05-28 21:35:42,801) INFO - Initialization - [__init__.py:54] - qlib successfully initialized based on client settings. + [39336:MainThread](2019-05-28 21:35:42,801) INFO - Initialization - [__init__.py:56] - provider_uri=172.23.233.89:/data2/gaochao/sync_qlib/qlib + [39336:Thread-68](2019-05-28 21:35:42,809) INFO - Client - [client.py:28] - Connect to server ws://172.23.233.89:9710 + [39336:Thread-72](2019-05-28 21:35:43,489) INFO - Client - [client.py:31] - Disconnect from server! + Opening /data/csdesign/qlib/cache/d239a3b191daa9a5b1b19a59beb47b33 in read-only mode + Out[5]: + $close + instrument datetime + SH600000 2008-01-02 119.079704 + 2008-01-03 113.120125 + 2008-01-04 117.878860 + 2008-01-07 124.505539 + 2008-01-08 125.395004 + + +If running on Windows, open **NFS** features and write correct **mount_path**, it's recommended to use the following code to ``init`` qlib: + +1.windows System open NFS Features + * Open ``Programs and Features``. + * Click ``Turn Windows features on or off``. + * Scroll down and check the option ``Services for NFS``, then click OK + Reference address: https://graspingtech.com/mount-nfs-share-windows-10/ +2.config correct mount_path + * In windows, mount path must be not exist path and root path, + * correct format path eg: `H`, `i`... + * error format path eg: `C`, `C:/user/name`, `qlib_data`... + +.. code-block:: python + + >>> import qlib + >>> qlib.init(auto_mount=True, mount_path='H', provider_uri='172.23.233.89:/data2/gaochao/sync_qlib/qlib') + >>> from qlib.data import D + >>> D.features(['SH600000'], ['$close'], start_time='20080101', end_time='20090101').head() + [39336:MainThread](2019-05-28 21:35:42,800) INFO - Initialization - [__init__.py:16] - default_conf: client. + [39336:MainThread](2019-05-28 21:35:42,801) INFO - Initialization - [__init__.py:54] - qlib successfully initialized based on client settings. + [39336:MainThread](2019-05-28 21:35:42,801) INFO - Initialization - [__init__.py:56] - provider_uri=172.23.233.89:/data2/gaochao/sync_qlib/qlib + [39336:Thread-68](2019-05-28 21:35:42,809) INFO - Client - [client.py:28] - Connect to server ws://172.23.233.89:9710 + [39336:Thread-72](2019-05-28 21:35:43,489) INFO - Client - [client.py:31] - Disconnect from server! + Opening /data/csdesign/qlib/cache/d239a3b191daa9a5b1b19a59beb47b33 in read-only mode + Out[5]: + $close + instrument datetime + SH600000 2008-01-02 119.079704 + 2008-01-03 113.120125 + 2008-01-04 117.878860 + 2008-01-07 124.505539 + 2008-01-08 125.395004 + + + + + +The client will mount the data in `provider_uri` on `mount_path`. Then the server and client will communicate with flask and transporting data with this NFS. + + +If you have a local qlib data files and want to use the qlib data offline instead of online with client server framework. +It is also possible with specific config. +You can created such a config. `client_config_local.yml` + +.. code-block:: YAML + + provider_uri: /data/csdesign/qlib + calendar_provider: 'LocalCalendarProvider' + instrument_provider: 'LocalInstrumentProvider' + feature_provider: 'LocalFeatureProvider' + expression_provider: 'LocalExpressionProvider' + dataset_provider: 'LocalDatasetProvider' + provider: 'LocalProvider' + dataset_cache: 'SimpleDatasetCache' + local_cache_path: '~/.cache/qlib/' + +`provider_uri` is the directory of your local data. + +.. code-block:: python + + >>> import qlib + >>> qlib.init_from_yaml_conf('client_config_local.yml') + >>> from qlib.data import D + >>> D.features(['SH600001'], ['$close'], start_time='20180101', end_time='20190101').head() + 21232:MainThread](2019-05-29 10:16:05,066) INFO - Initialization - [__init__.py:16] - default_conf: client. + [21232:MainThread](2019-05-29 10:16:05,066) INFO - Initialization - [__init__.py:54] - qlib successfully initialized based on client settings. + [21232:MainThread](2019-05-29 10:16:05,067) INFO - Initialization - [__init__.py:56] - provider_uri=/data/csdesign/qlib + Out[9]: + $close + instrument datetime + SH600001 2008-01-02 21.082111 + 2008-01-03 23.195362 + 2008-01-04 23.874615 + 2008-01-07 24.880930 + 2008-01-08 24.277143 + +Limitations +----------- +1. The following API under the client-server module may not be as fast as the older off-line API. + - Cal.calendar + - Inst.list_instruments +2. The rolling operation expression with parameter `0` can not be updated rightly under mechanism of the client-server framework. + +API +******************** + +The client is based on `python-socketio`_ which is a framework that supports WebSocket client for Python language. The client can only propose requests and receive results, which do not include any calculating procedure. + +Class +-------------------- + +.. automodule:: qlib.data.client + + diff --git a/docs/hidden/online.rst b/docs/hidden/online.rst new file mode 100644 index 0000000000..da4fc99d47 --- /dev/null +++ b/docs/hidden/online.rst @@ -0,0 +1,285 @@ +.. _online: + +Online +=================== +.. currentmodule:: qlib + +Introduction +------------------- + +Welcome to use Online, this module simulates what will be like if we do the real trading use our model and strategy. + +Just like Estimator and other modules in Qlib, you need to determine parameters through the configuration file, +and in this module, you need to add an account in a folder to do the simulation. Then in each coming day, +this module will use the newest information to do the trade for your account, +the performance can be viewed at any time using the API we defined. + +Each account will experience the following processes, the ‘pred_date’ represents the date you predict the target +positions after trading, also, the ‘trade_date’ is the date you do the trading. + +- Generate the order list (pre_date) +- Execute the order list (trade_date) +- Update account (trade_date) + +In the meantime, you can just create an account and use this module to test its performance in a period. + +- Simulate (start_date, end_date) + +This module need to save your account in a folder, the model and strategy will be saved as pickle files, +and the position and report will be saved as excel. +The file structure can be viewed at fileStruct_. + + +Example +------------------- + +Let's take an example, + +.. note:: Make sure you have the latest version of `qlib` installed. + +If you want to use the models and data provided by `qlib`, you only need to do as follows. + +Firstly, write a simple configuration file as following, + +.. code-block:: YAML + + strategy: + class: TopkAmountStrategy + module_path: qlib.contrib.strategy + args: + market: csi500 + trade_freq: 5 + + model: + class: ScoreFileModel + module_path: qlib.contrib.online.online_model + args: + loss: mse + model_path: ./model.bin + + init_cash: 1000000000 + +We then can use this command to create a folder and do trading from 2017-01-01 to 2018-08-01. + +.. code-block:: bash + + online simulate -id v-test -config ./config/config.yaml -exchange_config ./config/exchange.yaml -start 2017-01-01 -end 2018-08-01 -path ./user_data/ + +The start date (2017-01-01) is the add date of the user, which also is the first predict date, +and the end date (2018-08-01) is the last trade date. You can use "`online generate -date 2018-08-02...`" +command to continue generate the order_list at next trading date. + +If Your account was saved in "./user_data/", you can see the performance of your account compared to a benchmark by + +.. code-block:: bash + + >> online show -id v-test -path ./user_data/ -bench SH000905 + + ... + Result of porfolio: + sub_bench: + risk + mean 0.001157 + std 0.003039 + annual 0.289131 + sharpe 6.017635 + mdd -0.013185 + sub_cost: + risk + mean 0.000800 + std 0.003043 + annual 0.199944 + sharpe 4.155963 + mdd -0.015517 + +Here 'SH000905' represents csi500 and 'SH000300' represents csi300 + +Manage your account +-------------------- + +Any account processed by `online` should be saved in a folder. you can use commands +defined to manage your accounts. + +- add an new account + This will add an new account with user_id='v-test', add_date='2019-10-15' in ./user_data. + + .. code-block:: bash + + >> online add_user -id {user_id} -config {config_file} -path {folder_path} -date {add_date} + >> online add_user -id v-test -config config.yaml -path ./user_data/ -date 2019-10-15 + +- remove an account + .. code-block:: bash + + >> online remove_user -id {user_id} -path {folder_path} + >> online remove_user -id v-test -path ./user_data/ + +- show the performance + Here benchmark indicates the baseline is to be compared with yours. + + .. code-block:: bash + + >> online show -id {user_id} -path {folder_path} -bench {benchmark} + >> online show -id v-test -path ./user_data/ -bench SH000905 + +The default value of all the parameter 'date' below is trade date +(will be today if today is trading date and information has been updated in `qlib`). + +The 'generate' and 'update' will check whether input date is valid, the following 3 processes should +be called at each trading date. + +- generate the order list + generate the order list at trade date, and save them in {folder_path}/{user_id}/temp/ as a json file. + + .. code-block:: bash + + >> online generate -date {date} -path {folder_path} + >> online generate -date 2019-10-16 -path ./user_data/ + +- execute the order list + execute the order list and generate the transactions result in {folder_path}/{user_id}/temp/ at trade date + + .. code-block:: bash + + >> online execute -date {date} -exchange_config {exchange_config_path} -path {folder_path} + >> online execute -date 2019-10-16 -exchange_config ./config/exchange.yaml -path ./user_data/ + + A simple exchange config file can be as + + .. code-block:: yaml + + open_cost: 0.003 + close_cost: 0.003 + limit_threshold: 0.095 + deal_price: vwap + + +- update accounts + update accounts in "{folder_path}/" at trade date + + .. code-block:: bash + + >> online update -date {date} -path {folder_path} + >> online update -date 2019-10-16 -path ./user_data/ + +API +------------------ + +All those operations are based on defined in `qlib.contrib.online.operator` + +.. automodule:: qlib.contrib.online.operator + +.. _fileStruct: + +File structure +------------------ + +'user_data' indicates the root of folder. +Name that bold indicates it’s a folder, otherwise it’s a document. + +.. code-block:: yaml + + {user_folder} + │ users.csv: (Init date for each users) + │ + └───{user_id1}: (users' sub-folder to save their data) + │ │ position.xlsx + │ │ report.csv + │ │ model_{user_id1}.pickle + │ │ strategy_{user_id1}.pickle + │ │ + │ └───score + │ │ └───{YYYY} + │ │ └───{MM} + │ │ │ score_{YYYY-MM-DD}.csv + │ │ + │ └───trade + │ └───{YYYY} + │ └───{MM} + │ │ orderlist_{YYYY-MM-DD}.json + │ │ transaction_{YYYY-MM-DD}.csv + │ + └───{user_id2} + │ │ position.xlsx + │ │ report.csv + │ │ model_{user_id2}.pickle + │ │ strategy_{user_id2}.pickle + │ │ + │ └───score + │ └───trade + .... + + +Configuration file +------------------ + +The configure file used in `online` should contain the model and strategy information. + +About the model +~~~~~~~~~~~~~~~~~~~~ + +First, your configuration file needs to have a field about the model, +this field and its contents determine the model we used when generating score at predict date. + +Followings are two examples for ScoreFileModel and a model that read a score file and return score at trade date. + +.. code-block:: YAML + + model: + class: ScoreFileModel + module_path: qlib.contrib.online.OnlineModel + args: + loss: mse + +.. code-block:: YAML + + model: + class: ScoreFileModel + module_path: qlib.contrib.online.OnlineModel + args: + score_path: + +If your model doesn't belong to above models, you need to coding your model manually. +Your model should be a subclass of models defined in 'qlib.contfib.model'. And it must +contains 2 methods used in `online` module. + + +About the strategy +~~~~~~~~~~~~~~~~~~~~ + +Your need define the strategy used to generate the order list at predict date. + +Followings are two examples for a TopkAmountStrategy + +.. code-block:: YAML + + strategy: + class: TopkAmountStrategy + module_path: qlib.contrib.strategy.strategy + args: + topk: 100 + buffer_margin: 300 + +Generated files +------------------ + +The 'online_generate' command will create the order list at {folder_path}/{user_id}/temp/, +the name of that is orderlist_{YYYY-MM-DD}.json, YYYY-MM-DD is the date that those orders to be executed. + +The format of json file is like + +.. code-block:: python + + { + 'sell': { + {'$stock_id1': '$amount1'}, + {'$stock_id2': '$amount2'}, ... + }, + 'buy': { + {'$stock_id1': '$amount1'}, + {'$stock_id2': '$amount2'}, ... + } + } + +Then after executing the order list (either by 'online_execute' or other executors), a transaction file +will be created also at {folder_path}/{user_id}/temp/. diff --git a/docs/hidden/tuner.rst b/docs/hidden/tuner.rst new file mode 100644 index 0000000000..35d606c9c1 --- /dev/null +++ b/docs/hidden/tuner.rst @@ -0,0 +1,327 @@ +.. _tuner: + +Tuner +=================== +.. currentmodule:: qlib + +Introduction +------------------- + +Welcome to use Tuner, this document is based on that you can use Estimator proficiently and correctly. + +You can find the optimal hyper-parameters and combinations of models, trainers, strategies and data labels. + +The usage of program `tuner` is similar with `estimator`, you need provide the URL of the configuration file. +The `tuner` will do the following things: + +- Construct tuner pipeline +- Search and save best hyper-parameters of one tuner +- Search next tuner in pipeline +- Save the global best hyper-parameters and combination + +Each tuner is consisted with a kind of combination of modules, and its goal is searching the optimal hyper-parameters of this combination. +The pipeline is consisted with different tuners, it is aim at finding the optimal combination of modules. + +The result will be printed on screen and saved in file, you can check the result in your experiment saving files. + +Example +~~~~~~~ + +Let's see an example, + +First make sure you have the latest version of `qlib` installed. + +Then, you need to privide a configuration to setup the experiment. +We write a simple configuration example as following, + +.. code-block:: YAML + + experiment: + name: tuner_experiment + tuner_class: QLibTuner + qlib_client: + auto_mount: False + logging_level: INFO + optimization_criteria: + report_type: model + report_factor: model_score + optim_type: max + tuner_pipeline: + - + model: + class: SomeModel + space: SomeModelSpace + trainer: + class: RollingTrainer + strategy: + class: TopkAmountStrategy + space: TopkAmountStrategySpace + max_evals: 2 + + time_period: + rolling_period: 360 + train_start_date: 2005-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-06-30 + test_start_date: 2016-07-01 + test_end_date: 2018-04-30 + data: + class: ALPHA360 + provider_uri: /data/qlib + args: + start_date: 2005-01-01 + end_date: 2018-04-30 + dropna_label: True + dropna_feature: True + filter: + market: csi500 + filter_pipeline: + - + class: NameDFilter + module_path: qlib.data.filter + args: + name_rule_re: S(?!Z3) + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + - + class: ExpressionDFilter + module_path: qlib.data.filter + args: + rule_expression: $open/$factor<=45 + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + backtest: + normal_backtest_args: + verbose: False + limit_threshold: 0.095 + account: 500000 + benchmark: SH000905 + deal_price: vwap + long_short_backtest_args: + topk: 50 + +Next, we run the following command, and you can see: + +.. code-block:: bash + + ~/v-yindzh/Qlib/cfg$ tuner -c tuner_config.yaml + + Searching params: {'model_space': {'colsample_bytree': 0.8870905643607678, 'lambda_l1': 472.3188735122233, 'lambda_l2': 92.75390994877243, 'learning_rate': 0.09741751430635413, 'loss': 'mse', 'max_depth': 8, 'num_leaves': 160, 'num_threads': 20, 'subsample': 0.7536051584789751}, 'strategy_space': {'buffer_margin': 250, 'topk': 40}} + ... + (Estimator experiment screen log) + ... + Searching params: {'model_space': {'colsample_bytree': 0.6667379039007301, 'lambda_l1': 382.10698024977904, 'lambda_l2': 117.02506488151757, 'learning_rate': 0.18514539615228137, 'loss': 'mse', 'max_depth': 6, 'num_leaves': 200, 'num_threads': 12, 'subsample': 0.9449255686969292}, 'strategy_space': {'buffer_margin': 200, 'topk': 30}} + ... + (Estimator experiment screen log) + ... + Local best params: {'model_space': {'colsample_bytree': 0.6667379039007301, 'lambda_l1': 382.10698024977904, 'lambda_l2': 117.02506488151757, 'learning_rate': 0.18514539615228137, 'loss': 'mse', 'max_depth': 6, 'num_leaves': 200, 'num_threads': 12, 'subsample': 0.9449255686969292}, 'strategy_space': {'buffer_margin': 200, 'topk': 30}} + Time cost: 489.87220 | Finished searching best parameters in Tuner 0. + Time cost: 0.00069 | Finished saving local best tuner parameters to: tuner_experiment/estimator_experiment/estimator_experiment_0/local_best_params.json . + Searching params: {'data_label_space': {'labels': ('Ref($vwap, -2)/Ref($vwap, -1) - 2',)}, 'model_space': {'input_dim': 158, 'lr': 0.001, 'lr_decay': 0.9100529502185579, 'lr_decay_steps': 162.48901403763966, 'optimizer': 'gd', 'output_dim': 1}, 'strategy_space': {'buffer_margin': 300, 'topk': 35}} + ... + (Estimator experiment screen log) + ... + Searching params: {'data_label_space': {'labels': ('Ref($vwap, -2)/Ref($vwap, -1) - 1',)}, 'model_space': {'input_dim': 158, 'lr': 0.1, 'lr_decay': 0.9882802970847494, 'lr_decay_steps': 164.76742865207729, 'optimizer': 'adam', 'output_dim': 1}, 'strategy_space': {'buffer_margin': 250, 'topk': 35}} + ... + (Estimator experiment screen log) + ... + Local best params: {'data_label_space': {'labels': ('Ref($vwap, -2)/Ref($vwap, -1) - 1',)}, 'model_space': {'input_dim': 158, 'lr': 0.1, 'lr_decay': 0.9882802970847494, 'lr_decay_steps': 164.76742865207729, 'optimizer': 'adam', 'output_dim': 1}, 'strategy_space': {'buffer_margin': 250, 'topk': 35}} + Time cost: 550.74039 | Finished searching best parameters in Tuner 1. + Time cost: 0.00023 | Finished saving local best tuner parameters to: tuner_experiment/estimator_experiment/estimator_experiment_1/local_best_params.json . + Time cost: 1784.14691 | Finished tuner pipeline. + Time cost: 0.00014 | Finished save global best tuner parameters. + Best Tuner id: 0. + You can check the best parameters at tuner_experiment/global_best_params.json. + + +Finally, you can check the results of your experiment in the given path. + +Configuration file +------------------ + +Before using `tuner`, you need to prepare a configuration file. Next we will show you how to prepare each part of the configuration file. + +About the experiment +~~~~~~~~~~~~~~~~~~~~ + +First, your configuration file needs to have a field about the experiment, whose key is `experiment`, this field and its contents determine the saving path and tuner class. + +Usually it should contain the following content: + +.. code-block:: YAML + + experiment: + name: tuner_experiment + tuner_class: QLibTuner + +Also, there are some optional fields. The meaning of each field is as follows: + +- `name` + The experiment name, str type, the program will use this experiment name to construct a directory to save the process of the whole experiment and the results. The default value is `tuner_experiment`. + +- `dir` + The saving path, str type, the program will construct the experiment directory in this path. The default value is the path where configuration locate. + +- `tuner_class` + The class of tuner, str type, must be an already implemented model, such as `QLibTuner` in `qlib`, or a custom tuner, but it must be a subclass of `qlib.contrib.tuner.Tuner`, the default value is `QLibTuner`. + +- `tuner_module_path` + The module path, str type, absolute url is also supported, indicates the path of the implementation of tuner. The default value is `qlib.contrib.tuner.tuner` + +About the optimization criteria +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You need to designate a factor to optimize, for tuner need a factor to decide which case is better than other cases. +Usually, we use the result of `estimator`, such as backtest results and the score of model. + +This part needs contain these fields: + +.. code-block:: YAML + + optimization_criteria: + report_type: model + report_factor: model_pearsonr + optim_type: max + +- `report_type` + The type of the report, str type, determines which kind of report you want to use. If you want to use the backtest result type, you can choose `pred_long`, `pred_long_short`, `pred_short`, `sub_bench` and `sub_cost`. If you want to use the model result type, you can only choose `model`. + +- `report_factor` + The factor you want to use in the report, str type, determines which factor you want to optimize. If your `report_type` is backtest result type, you can choose `annual`, `sharpe`, `mdd`, `mean` and `std`. If your `report_type` is model result type, you can choose `model_score` and `model_pearsonr`. + +- `optim_type` + The optimization type, str type, determines what kind of optimization you want to do. you can minimize the factor or maximize the factor, so you can choose `max`, `min` or `correlation` at this field. + Note: `correlation` means the factor's best value is 1, such as `model_pearsonr` (a corraltion coefficient). + +If you want to process the factor or you want fetch other kinds of factor, you can override the `objective` method in your own tuner. + +About the tuner pipeline +~~~~~~~~~~~~~~~~~~~~~~~~ + +The tuner pipeline contains different tuners, and the `tuner` program will process each tuner in pipeline. Each tuner will get an optimal hyper-parameters of its specific combination of modules. The pipeline will contrast the results of each tuner, and get the best combination and its optimal hyper-parameters. So, you need to configurate the pipeline and each tuner, here is an example: + +.. code-block:: YAML + + tuner_pipeline: + - + model: + class: SomeModel + space: SomeModelSpace + trainer: + class: RollingTrainer + strategy: + class: TopkAmountStrategy + space: TopkAmountStrategySpace + max_evals: 2 + +Each part represents a tuner, and its modules which are to be tuned. Space in each part is the hyper-parameters' space of a certain module, you need to create your searching space and modify it in `/qlib/contrib/tuner/space.py`. We use `hyperopt` package to help us to construct the space, you can see the detail of how to use it in https://github.com/hyperopt/hyperopt/wiki/FMin . + +- model + You need to provide the `class` and the `space` of the model. If the model is user's own implementation, you need to privide the `module_path`. + +- trainer + You need to proveide the `class` of the trainer. If the trainer is user's own implementation, you need to privide the `module_path`. + +- strategy + You need to provide the `class` and the `space` of the strategy. If the strategy is user's own implementation, you need to privide the `module_path`. + +- data_label + The label of the data, you can search which kinds of labels will lead to a better result. This part is optional, and you only need to provide `space`. + +- max_evals + Allow up to this many function evaluations in this tuner. The default value is 10. + +If you don't want to search some modules, you can fix their spaces in `space.py`. We will not give the default module. + +About the time period +~~~~~~~~~~~~~~~~~~~~~ + +You need to use the same dataset to evaluate your different `estimator` experiments in `tuner` experiment. Two experiments using different dataset are uncomparable. You can specify `time_period` through the configuration file: + +.. code-block:: YAML + + time_period: + rolling_period: 360 + train_start_date: 2005-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-06-30 + test_start_date: 2016-07-01 + test_end_date: 2018-04-30 + +- `rolling_period` + The rolling period, integer type, indicates how many time steps need rolling when rolling the data. The default value is `60`. If you use `RollingTrainer`, this config will be used, or it will be ignored. + +- `train_start_date` + Training start time, str type. + +- `train_end_date` + Training end time, str type. + +- `validate_start_date` + Validation start time, str type. + +- `validate_end_date` + Validation end time, str type. + +- `test_start_date` + Test start time, str type. + +- `test_end_date` + Test end time, str type. If `test_end_date` is `-1` or greater than the last date of the data, the last date of the data will be used as `test_end_date`. + +About the data and backtest +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`data` and `backtest` are all same in the whole `tuner` experiment. Different `estimator` experiments must use the same data and backtest method. So, these two parts of config are same with that in `estimator` configuration. You can see the precise defination of these parts in `estimator` introduction. We only provide an example here. + +.. code-block:: YAML + + data: + class: ALPHA360 + provider_uri: /data/qlib + args: + start_date: 2005-01-01 + end_date: 2018-04-30 + dropna_label: True + dropna_feature: True + feature_label_config: /home/v-yindzh/v-yindzh/QLib/cfg/feature_config.yaml + filter: + market: csi500 + filter_pipeline: + - + class: NameDFilter + module_path: qlib.filter + args: + name_rule_re: S(?!Z3) + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + - + class: ExpressionDFilter + module_path: qlib.filter + args: + rule_expression: $open/$factor<=45 + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + backtest: + normal_backtest_args: + verbose: False + limit_threshold: 0.095 + account: 500000 + benchmark: SH000905 + deal_price: vwap + long_short_backtest_args: + topk: 50 + +Experiment Result +----------------- + +All the results are stored in experiment file directly, you can check them directly in the corresponding files. +What we save are as following: + +- Global optimal parameters +- Local optimal parameters of each tuner +- Config file of this `tuner` experiment +- Every `estimator` experiments result in the process + diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000000..0d3cee4e16 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,56 @@ +============================================================ +QLib Documentation +============================================================ + +QLib is a Quantitative-research Library, which can provide research data with highly consistency, reusability and extensibility. + +.. _user_guide: + +Document Structure +==================== + +.. toctree:: + :hidden: + + Home + +.. toctree:: + :maxdepth: 3 + :caption: INTRODUCTION: + + Introduction + +.. toctree:: + :maxdepth: 3 + :caption: GETTING STARTED: + + Installation + Initialization + Data Retrieval + Integrate Custom Models + + +.. toctree:: + :maxdepth: 3 + :caption: ADVANCED FEATURES: + + Estimator: Workflow Management + Data: Data Framework&Usage + Model: Train&Predict + Strategy: Portfolio Management + Backtest: Model&Strategy Testing + Report: Graphical Results + Cache: Frequently-Used Data + + +.. toctree:: + :maxdepth: 3 + :caption: REFERENCE: + + Api + +.. toctree:: + :maxdepth: 3 + :caption: Change Log: + + Change Log diff --git a/docs/introduction/introduction.rst b/docs/introduction/introduction.rst new file mode 100644 index 0000000000..597ebdc4c3 --- /dev/null +++ b/docs/introduction/introduction.rst @@ -0,0 +1,45 @@ +=================== +Qlib +=================== + +Introduction +================== + +``Qlib`` is a an AI-oriented quantitative investment platform. aims to realize the potential, empower the research, and create the value of AI technologies in quantitative investment. + +With ``Qlib``, you can easily apply your favorite model to create better Quant investment strategy. + + +Framework +================== + +.. image:: ../_static/img/framework.png + :alt: Framework + + +At module level, Qlib is a platform that consists of the above components. Each components is loose-coupling and can be used stand-alone. + +====================== ======================================================================== +Name Description +====================== ======================================================================== +`Data layer` `DataServer` focus on providing high performance infrastructure for user + to retreive and get raw data. `DataEnhancement` will preprocess the data + and provide the best dataset to be fed in to the models. + +`Interday Model` `Interday model` focus on produce forecasting signals(aka. `alpha`). + Models are trained by `Model Creator` and managed by `Model Manager`. + User could choose one or multiple models for forecasting. Multiple models + could be combined with `Ensemble` module. + +`Interday Strategy` `Portfolio Generator` will take forecasting signals as input and output + the orders based on current position to achieve target portfolio. + +`Intraday Trading` `Order Executor` is responsible for executing orders output by + `Interday Strategy` and returning the executed results. + +`Analysis` User could get detailed analysis report of forecasting signal and portfolio + in this part. +====================== ======================================================================== + +- The modules with hand-drawn style is under development and will be released in the future. +- The modules with dashed border is highly user-customizable and extendible. \ No newline at end of file diff --git a/docs/reference/api.rst b/docs/reference/api.rst new file mode 100644 index 0000000000..23e5aee8cc --- /dev/null +++ b/docs/reference/api.rst @@ -0,0 +1,49 @@ +================================ +API Reference +================================ + + + +Here you can find all ``QLib`` interfaces. + + +Data +==================== + +Provider +-------------------- + +.. automodule:: qlib.data.data + :members: + +Filter +-------------------- + +.. automodule:: qlib.data.filter + :members: + +Feature +-------------------- + +Class +~~~~~~~~~~~~~~~~~~~~ +.. automodule:: qlib.data.base + :members: + +Operator +~~~~~~~~~~~~~~~~~~~~ +.. automodule:: qlib.data.ops + :members: + +Contrib +==================== + +Model +-------------------- +.. automodule:: qlib.contrib.model.base + :members: + +Evaluate +-------------------- +.. automodule:: qlib.contrib.evaluate + :members: \ No newline at end of file diff --git a/docs/start/getdata.rst b/docs/start/getdata.rst new file mode 100644 index 0000000000..8a2d297e16 --- /dev/null +++ b/docs/start/getdata.rst @@ -0,0 +1,141 @@ +.. _getdata: +============================= +Data Retrieval +============================= + +.. currentmodule:: qlib + +Introduction +==================== + +Users can get stock data by Qlib, the following are some examples. + +Examples +==================== + +Init qlib package: + +.. note:: In order to get the data, users need to initialize package qlib with qlib.init first. + +Please refer to `initialization `_ + + +It is recommended to use the following code to initialize qlib: + +.. code-block:: python + + >>> import qlib + >>> qlib.init(mount_path='~/.qlib/qlib_data/cn_data') + + +Load trading calendar with the given time range and frequency: + +.. code-block:: python + + >>> from qlib.data import D + >>> D.calendar(start_time='2010-01-01', end_time='2017-12-31', freq='day')[:2] + [Timestamp('2010-01-04 00:00:00'), Timestamp('2010-01-05 00:00:00')] + +Parse a given market name into a stockpool config: + +.. code-block:: python + + >>> from qlib.data import D + >>> D.instruments(market='all') + {'market': 'all', 'filter_pipe': []} + +Load instruments of certain stockpool in the given time range: + +.. code-block:: python + + >>> from qlib.data import D + >>> instruments = D.instruments(market='csi500') + >>> D.list_instruments(instruments=instruments, start_time='2010-01-01', end_time='2017-12-31', as_list=True)[:6] + ['SH600000', 'SH600003', 'SH600004', 'SH600005', 'SH600006', 'SH600007'] + +Load dynamic instruments from a base market according to a name filter + +.. code-block:: python + + >>> from qlib.data import D + >>> from qlib.data.filter import NameDFilter + >>> nameDFilter = NameDFilter(name_rule_re='SH[0-9]{4}55') + >>> instruments = D.instruments(market='csi500', filter_pipe=[nameDFilter]) + >>> D.list_instruments(instruments=instruments, start_time='2015-01-01', end_time='2016-02-15', as_list=True) + ['SH600655', 'SH600755', 'SH603355', 'SH603555'] + +Load dynamic instruments from a base market according to an expression filter + +.. code-block:: python + + >>> from qlib.data import D + >>> from qlib.data.filter import ExpressionDFilter + >>> expressionDFilter = ExpressionDFilter(rule_expression='$close>100') + >>> instruments = D.instruments(market='csi500', filter_pipe=[expressionDFilter]) + >>> D.list_instruments(instruments=instruments, start_time='2015-01-01', end_time='2016-02-15', as_list=True) + ['SH600601', 'SH600651', 'SH600654'] + +To know more about how to use the filter or how to build one's own filter, go to API Reference: `filter API <../reference/api.html#filter>`_ + +Load features of certain instruments in given time range: + +.. note:: This is not a recommended way to get features. + +.. code-block:: python + + >>> from qlib.data import D + >>> instruments = ['SH600000'] + >>> fields = ['$close', '$volume', 'Ref($close, 1)', 'Mean($close, 3)', '$high-$low'] + >>> D.features(instruments, fields, start_time='2010-01-01', end_time='2017-12-31', freq='day').head() + $close $volume Ref($close,1) Mean($close,3) \ + instrument datetime + SH600000 2010-01-04 81.809998 17144536.0 NaN 81.809998 + 2010-01-05 82.419998 29827816.0 81.809998 82.114998 + 2010-01-06 80.800003 25070040.0 82.419998 81.676666 + 2010-01-07 78.989998 22077858.0 80.800003 80.736666 + 2010-01-08 79.879997 17019168.0 78.989998 79.889999 + + Sub($high,$low) + instrument datetime + SH600000 2010-01-04 2.741158 + 2010-01-05 3.049736 + 2010-01-06 1.621399 + 2010-01-07 2.856926 + 2010-01-08 1.930397 + 2010-01-08 1.930397 + +Load features of certain stockpool in given time range: + +.. note:: Since the server need to cache all-time data for your request stockpool and fields, it may take longer to process your request than before. But in the second time, your request will be processed and responded in a flash even if you change the timespan. + +.. code-block:: python + + >>> from qlib.data import D + >>> from qlib.data.filter import NameDFilter, ExpressionDFilter + >>> nameDFilter = NameDFilter(name_rule_re='SH[0-9]{4}55') + >>> expressionDFilter = ExpressionDFilter(rule_expression='($close/$factor)>100') + >>> instruments = D.instruments(market='csi500', filter_pipe=[nameDFilter, expressionDFilter]) + >>> fields = ['$close', '$volume', 'Ref($close, 1)', 'Mean($close, 3)', '$high-$low'] + >>> D.features(instruments, fields, start_time='2010-01-01', end_time='2017-12-31', freq='day').head() + + $close $volume Ref($close, 1) \ + instrument datetime + SH600655 2015-06-15 4342.160156 258706.359375 4530.459961 + 2015-06-16 4409.270020 257349.718750 4342.160156 + 2015-06-17 4312.330078 235214.890625 4409.270020 + 2015-06-18 4086.729980 196772.859375 4312.330078 + 2015-06-19 3678.250000 182916.453125 4086.729980 + Mean($close, 3) high− low + instrument datetime + SH600655 2015-06-15 4480.743327 285.251465 + 2015-06-16 4427.296712 298.301270 + 2015-06-16 4354.586751 356.098145 + 2015-06-16 4269.443359 363.554932 + 2015-06-16 4025.770020 368.954346 + + +.. note:: When calling D.features() at client, use parameter 'disk_cache=0' to skip dataset cache, use 'disk_cache=1' to generate and use dataset cache. In addition, when calling at server, you can use 'disk_cache=2' to update the dataset cache. + +Api +==================== +To know more about how to use the Data, go to API Reference: `Data API <../reference/api.html#Data>`_ \ No newline at end of file diff --git a/docs/start/initialization.rst b/docs/start/initialization.rst new file mode 100644 index 0000000000..c9e2919cad --- /dev/null +++ b/docs/start/initialization.rst @@ -0,0 +1,51 @@ +.. _initialization: +==================== +Initialize Qlib +==================== + +.. currentmodule:: qlib + + +Initialize ``qlib`` Package +========================= + +Please execute the following process to initialize ``qlib`` Package: + +- Download and prepare the Data: execute the following command to download the stock data. + .. code-block:: bash + + python scripts/get_data.py qlib_data_cn --target_dir ~/.qlib/qlib_data/cn_data + + Know more about how to use get_data.py, refer to `Raw Data <../advanced/data.html#raw-data>`_. + + +- Run the initialization code: run the following code in python: + + .. code-block:: Python +<<<<<<< HEAD + from qlib.config import REG_CN, REG_US + mount_path = "~/.qlib/qlib_data/cn_data" # target_dir + qlib.init(mount_path=mount_path, region="REG_CN") + +======= + + import qlib + # region in [REG_CN, REG_US] + from qlib.config import REG_CN + mount_path = "~/.qlib/qlib_data/cn_data" # target_dir + qlib.init(mount_path=mount_path, region=REG_CN) + +>>>>>>> c9205cac41923fe695edf8bd5728613d5c2f55c2 + + +Parameters +=============================== + +In fact, in addition to'mount_path' and 'region', qlib.init has other parameters. The following are all the parameters of qlib.init: + +- ``mount_path``: type: str. The local directory where the data loaded by 'get_data.py' is stored. +- ``region``: type: str, optional parameter(default: `qlib.config.REG_CN`/'cn'>). If region == `qlib.config.REG_CN`, 'qlib' will be initialized in US stock mode. If region == `qlib.config.REG_US`, 'qlib' will be initialized in A-share mode. + + .. note:: + + The value of'region' should be consistent with the data stored in'mount_path'. Currently,'scripts/get_data.py' only supports downloading A-share data. If users need to use the US stock mode, they need to prepare their own US stock data and store it in'mount_path'. \ No newline at end of file diff --git a/docs/start/installation.rst b/docs/start/installation.rst new file mode 100644 index 0000000000..d7bb346394 --- /dev/null +++ b/docs/start/installation.rst @@ -0,0 +1,55 @@ +.. _installation: +==================== +Installation +==================== + +.. currentmodule:: qlib + + +How to Install Qlib +==================== + +``Qlib`` only supports Python3, and supports up to Python3.8. + +Please execute the following process to install ``Qlib``: + +- Change the directory to Qlib, and the file'setup.py' exists in the directory +- Then, execute the following command: + + .. code-block:: bash + + $ pip install numpy + $ pip install --upgrade cython + $ python setup.py install + + +.. note:: + It's recommended to use anaconda/miniconda to setup environment. + ``Qlib`` needs lightgbm and tensorflow packages, use pip to install them. + +.. note:: + Do not import qlib in the ``Qlib`` folder, otherwise errors may occur. + + + +Use the following code to confirm installation successful: + +.. code-block:: python + + >>> import qlib + >>> qlib.__version__ + + +.. + .. note:: Please read this documentation carefully since there are lots of changes in qlib. + +.. + .. note:: On client side, there are some configs you need to notice like the providers, flask_server, flask_port and mount_path. The default is built for 10.150.144.153 since the server data path is pre-mounted to the mount_path. Don't change these configs unless you have some special test purposes. + + +.. + .. note:: You can always refer to the server docs on http://10.150.144.154:10002 + + + + diff --git a/docs/start/integration.rst b/docs/start/integration.rst new file mode 100644 index 0000000000..3f37e5355f --- /dev/null +++ b/docs/start/integration.rst @@ -0,0 +1,140 @@ +========================================= +Integrate Custom Models into QLib +========================================= + +Introduction +=================== +The baseline of the qlib model includes lightgbm and dnn. In addition to using the default model, users can their own integrate custom models into qlib. + +In order to use the custom model, user can do as follows. + +- Define a custom model class, which should be a subclass of the `qlib.contrib.model.base.Model <../reference/api.html#module-qlib.contrib.model.base>`_ +- Write a configuration file that describes the path and parameters of the custom model + +The following is an example of integrating a custom lightgbm model into qlib: + +Define a custom model class +=========================== +The Custom models need to inherit `qlib.contrib.model.base.Model <../reference/api.html#module-qlib.contrib.model.base>`_ and override the methods in it. + +- Override the `__init__` method + - Qlib passes the initialized parameters to the \_\_init\_\_ method + - The parameter must be consistent with the hyperparameters in the configuration file. + - Code Example: In the following example, the hyperparameter filed of the configuration file should contain parameters such as ‘loss:mse’. + .. code-block:: Python + + def __init__(self, loss='mse', **kwargs): + if loss not in {'mse', 'binary'}: + raise NotImplementedError + self._scorer = mean_squared_error if loss == 'mse' else roc_auc_score + self._params.update(objective=loss, **kwargs) + self._model = None + +- Override the `fit` method + - Qlib calls the fit method to train the model + - The parameters must include training feature 'x_train', training label 'y_train', test feature 'x_valid', test label 'y_valid'at least. + - The parameters could include some optional parameters with default values, such as train weight 'w_train', test weight 'w_valid' and 'num_boost_round = 1000'. + - Code Example: In the following example, 'num_boost_round = 1000' is an optional parameter. + .. code-block:: Python + + def fit(self, x_train:pd.DataFrame, y_train:pd.DataFrame, x_valid:pd.DataFrame, y_valid:pd.DataFrame, + w_train:pd.DataFrame = None, w_valid:pd.DataFrame = None, num_boost_round = 1000, **kwargs): + + # Lightgbm need 1D array as its label + if y_train.values.ndim == 2 and y_train.values.shape[1] == 1: + y_train_1d, y_valid_1d = np.squeeze(y_train.values), np.squeeze(y_valid.values) + else: + raise ValueError('LightGBM doesn\'t support multi-label training') + + w_train_weight = None if w_train is None else w_train.values + w_valid_weight = None if w_valid is None else w_valid.values + + dtrain = lgb.Dataset(x_train.values, label=y_train_1d, weight=w_train_weight) + dvalid = lgb.Dataset(x_valid.values, label=y_valid_1d, weight=w_valid_weight) + self._model = lgb.train( + self._params, + dtrain, + num_boost_round=num_boost_round, + valid_sets=[dtrain, dvalid], + valid_names=['train', 'valid'], + **kwargs + ) + +- Override the `predict` method + - The parameters include the features of the test data and return the prediction labels + - Please refer to `qlib.contrib.model.base.Model <../reference/api.html#module-qlib.contrib.model.base>`_ for the parameter types of the fit method + - Code Example:In the following example, user need to user dnn to predict the label(such as 'preds') of test data 'x_test' and return it. + .. code-block:: Python + + def predict(self, x_test:pd.DataFrame, **kwargs)-> numpy.ndarray: + if self._model is None: + raise ValueError('model is not fitted yet!') + return self._model.predict(x_test.values) + +- Override the `score` method + - The parameters include the features and label of the test data, and the return loss whose type is passed in the __init__ method + - Code Example:In the following example, user need to calculate the weighted loss with test data 'x_test', test label 'y_test' and the weight 'w_test'. + .. code-block:: Python + + def score(self, x_test:pd.Dataframe, y_test:pd.Dataframe, w_test:pd.DataFrame = None) -> float: + # Remove rows from x, y and w, which contain Nan in any columns in y_test. + x_test, y_test, w_test = drop_nan_by_y_index(x_test, y_test, w_test) + preds = self.predict(x_test) + w_test_weight = None if w_test is None else w_test.values + scorer = mean_squared_error if self.loss_type == 'mse' else roc_auc_score + return scorer(y_test.values, preds, sample_weight=w_test_weight) + +- Override the `save` method & `load` method + - The `save` method parameter include the a `filename` that represents an absolute path, user need to save model into the path. + - The `load` method parameter include the a `buffer` read from the `filename` passed in `save` method , user need to load model from the `buffer`. + - Code Example: + .. code-block:: Python + + def save(self, filename): + if self._model is None: + raise ValueError('model is not fitted yet!') + self._model.save_model(filename) + + def load(self, buffer): + self._model = lgb.Booster(params={'model_str': buffer.decode('utf-8')}) + + +Write the configuration +======================= + +The configuration file is described in detail in the `estimator <../advanced/estimator.html#Example>`_ document. In order to integrate the custom model into qlib, you need to modify the "model" field in the configuration file. + +- Example: The following example describes the ‘model’ field of configuration file about the custom lightgbm model mentioned above , where ‘module_path’ is the module path, ‘class’ is the class name, and ‘args’ is the hyperparameter passed into the __init__ method. All parameters in the field is passed to 'self._params' by '\*\*kwargs' in `__init__` except 'loss = mse'. + +.. code-block:: YAML + + model: + class: LGBModel + module_path: qlib.contrib.model.gbdt + args: + loss: mse + colsample_bytree: 0.8879 + learning_rate: 0.0421 + subsample: 0.8789 + lambda_l1: 205.6999 + lambda_l2: 580.9768 + max_depth: 8 + num_leaves: 210 + num_threads: 20 + +Test the custom model +===================== +Assuming that the configuration file is named test.yaml, user can run the following command to test the custom model: + +.. code-block:: bash + + estimator -c test.yaml + +.. note:: 'estimator' is a built-in command of our program. + +Also, 'Model' can also be tested as a single module. An example has been given in 'examples.estimator.train_backtest_analyze.ipynb'. + +Know More about 'Model' +===================== + +If user want to know more about 'model', please refer to document `Use 'Model' to Train&Predict <../advanced/model.rst>`_ and api `qlib.contrib.model.base.Model <../reference/api.html#module-qlib.contrib.model.base>`_. \ No newline at end of file diff --git a/examples/estimator/analyze_from_estimator.ipynb b/examples/estimator/analyze_from_estimator.ipynb new file mode 100644 index 0000000000..2e489f3bfc --- /dev/null +++ b/examples/estimator/analyze_from_estimator.ipynb @@ -0,0 +1,261 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import json\n", + "import yaml\n", + "import pickle\n", + "from pathlib import Path\n", + "\n", + "import qlib\n", + "import pandas as pd\n", + "from qlib.config import REG_CN\n", + "from qlib.utils import exists_qlib_data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use default data\n", + "# NOTE: need to download data from remote: python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data\n", + "mount_path = \"~/.qlib/qlib_data/cn_data\" # target_dir\n", + "if not exists_qlib_data(mount_path):\n", + " print(f\"Qlib data is not found in {mount_path}\")\n", + " sys.path.append(str(Path(__file__).resolve().parent.parent.parent.joinpath(\"scripts\")))\n", + " from get_data import GetData\n", + " GetData().qlib_data_cn(mount_path)\n", + "qlib.init(mount_path=mount_path, region=REG_CN)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "CUR_DIR = Path.cwd()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with CUR_DIR.joinpath('estimator_config.yaml').open() as fp:\n", + " estimator_name = yaml.load(fp, Loader=yaml.FullLoader)['experiment']['name']\n", + "with CUR_DIR.joinpath(estimator_name, 'exp_info.json').open() as fp:\n", + " latest_id = json.load(fp)['id']\n", + " \n", + "estimator_dir = CUR_DIR.joinpath(estimator_name, 'sacred', latest_id)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# read estimator result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pred_df = pd.read_pickle(estimator_dir.joinpath('pred.pkl'))\n", + "report_normal_df = pd.read_pickle(estimator_dir.joinpath('report_normal.pkl'))\n", + "report_normal_df.index.names = ['index']\n", + "\n", + "_report_long_short_df = pd.DataFrame(pd.read_pickle(estimator_dir.joinpath('report_long_short.pkl')), columns=['long_short'])\n", + "_report_long_df = pd.DataFrame(pd.read_pickle(estimator_dir.joinpath('report_long.pkl')), columns=['long'])\n", + "_report_short_df = pd.DataFrame(pd.read_pickle(estimator_dir.joinpath('report_short.pkl')), columns=['short'])\n", + "report_long_short_df = pd.concat([_report_long_short_df, _report_long_df, _report_short_df], axis=1)\n", + "\n", + "analysis_df = pd.read_pickle(estimator_dir.joinpath('analysis.pkl'))\n", + "positions = pickle.load(estimator_dir.joinpath('positions.pkl').open('rb'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# get label data from qlib" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qlib.data import D\n", + "pred_df_dates = pred_df.index.get_level_values(level='datetime')\n", + "features_df = D.features(D.instruments('csi500'), ['Ref($close, -1)/$close - 1'], pred_df_dates.min(), pred_df_dates.max())\n", + "features_df.columns = ['label']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# analyze graphs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qlib.contrib.report import analysis_model, analysis_position" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## analysis position" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_position.report_graph(report_normal_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### score IC" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pred_label = pd.concat([features_df, pred_df], axis=1, sort=True).reindex(features_df.index)\n", + "analysis_position.score_ic_graph(pred_label)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### cumulative return" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "analysis_position.cumulative_return_graph(positions, report_normal_df, features_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### risk analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "analysis_position.risk_analysis_graph(analysis_df, report_normal_df, report_long_short_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### rank label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_position.rank_label_graph(positions, features_df, pred_df_dates.min(), pred_df_dates.max())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## analysis model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### model performance" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "analysis_model.model_performance_graph(pred_label)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/estimator/estimator_config.yaml b/examples/estimator/estimator_config.yaml new file mode 100644 index 0000000000..392e91e23c --- /dev/null +++ b/examples/estimator/estimator_config.yaml @@ -0,0 +1,56 @@ +experiment: + name: estimator_example + observer_type: file_storage + mode: train + +model: + class: LGBModel + module_path: qlib.contrib.model.gbdt + args: + loss: mse + colsample_bytree: 0.8879 + learning_rate: 0.0421 + subsample: 0.8789 + lambda_l1: 205.6999 + lambda_l2: 580.9768 + max_depth: 8 + num_leaves: 210 + num_threads: 20 +data: + class: QLibDataHandlerV1 + args: + dropna_label: True + filter: + market: csi500 +trainer: + class: StaticTrainer + args: + rolling_period: 360 + train_start_date: 2007-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-12-31 + test_start_date: 2017-01-01 + test_end_date: 2020-08-01 +strategy: + class: TopkAmountStrategy + args: + topk: 50 + buffer_margin: 230 +backtest: + normal_backtest_args: + verbose: False + limit_threshold: 0.095 + account: 100000000 + benchmark: SH000905 + deal_price: vwap + open_cost: 0.0005 + close_cost: 0.0015 + min_cost: 5 + long_short_backtest_args: + topk: 50 + +qlib_data: + # when testing, please modify the following parameters according to the specific environment + mount_path: "~/.qlib/qlib_data/cn_data" + region: "cn" diff --git a/examples/train_and_backtest.py b/examples/train_and_backtest.py new file mode 100644 index 0000000000..d33b152803 --- /dev/null +++ b/examples/train_and_backtest.py @@ -0,0 +1,126 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import sys +from pathlib import Path + +import qlib +import pandas as pd +from qlib.config import REG_CN +from qlib.contrib.model.gbdt import LGBModel +from qlib.contrib.estimator.handler import QLibDataHandlerV1 +from qlib.contrib.strategy.strategy import TopkAmountStrategy +from qlib.contrib.evaluate import ( + backtest as normal_backtest, + long_short_backtest, + risk_analysis, +) +from qlib.utils import exists_qlib_data + + +if __name__ == "__main__": + + # use default data + mount_path = "~/.qlib/qlib_data/cn_data" # target_dir + if not exists_qlib_data(mount_path): + print(f"Qlib data is not found in {mount_path}") + sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath("scripts"))) + from get_data import GetData + + GetData().qlib_data_cn(mount_path) + + qlib.init(mount_path=mount_path, region=REG_CN) + + MARKET = "CSI500" + BENCHMARK = "SH000905" + + ################################### + # train model + ################################### + DATA_HANDLER_CONFIG = { + "dropna_label": True, + "start_date": "2007-01-01", + "end_date": "2020-08-01", + "market": MARKET, + } + + TRAINER_CONFIG = { + "train_start_date": "2007-01-01", + "train_end_date": "2014-12-31", + "validate_start_date": "2015-01-01", + "validate_end_date": "2016-12-31", + "test_start_date": "2017-01-01", + "test_end_date": "2020-08-01", + } + + # use default DataHandler + # custom DataHandler, refer to: TODO: DataHandler api url + x_train, y_train, x_validate, y_validate, x_test, y_test = QLibDataHandlerV1(**DATA_HANDLER_CONFIG).get_split_data( + **TRAINER_CONFIG + ) + + MODEL_CONFIG = { + "loss": "mse", + "colsample_bytree": 0.8879, + "learning_rate": 0.0421, + "subsample": 0.8789, + "lambda_l1": 205.6999, + "lambda_l2": 580.9768, + "max_depth": 8, + "num_leaves": 210, + "num_threads": 20, + } + # use default model + # custom Model, refer to: TODO: Model api url + model = LGBModel(**MODEL_CONFIG) + model.fit(x_train, y_train, x_validate, y_validate) + _pred = model.predict(x_test) + _pred = pd.DataFrame(_pred, index=x_test.index, columns=y_test.columns) + + # backtest requires pred_score + pred_score = pd.DataFrame(index=_pred.index) + pred_score["score"] = _pred.iloc(axis=1)[0] + + # save pred_score to file + pred_score_path = Path("~/tmp/qlib/pred_score.pkl").expanduser() + pred_score_path.parent.mkdir(exist_ok=True, parents=True) + pred_score.to_pickle(pred_score_path) + + ################################### + # backtest + ################################### + STRATEGY_CONFIG = { + "topk": 50, + "buffer_margin": 230, + } + BACKTEST_CONFIG = { + "verbose": False, + "limit_threshold": 0.095, + "account": 100000000, + "benchmark": BENCHMARK, + "deal_price": "vwap", + "open_cost": 0.0005, + "close_cost": 0.0015, + "min_cost": 5, + } + + # use default strategy + # custom Strategy, refer to: TODO: Strategy api url + strategy = TopkAmountStrategy(**STRATEGY_CONFIG) + report_normal, positions_normal = normal_backtest(pred_score, strategy=strategy, **BACKTEST_CONFIG) + + # long short backtest + long_short_reports = long_short_backtest(pred_score, topk=50) + + ################################### + # analyze + # If need a more detailed analysis, refer to: examples/train_and_bakctest.ipynb + ################################### + analysis = dict() + analysis["pred_long"] = risk_analysis(long_short_reports["long"]) + analysis["pred_short"] = risk_analysis(long_short_reports["short"]) + analysis["pred_long_short"] = risk_analysis(long_short_reports["long_short"]) + analysis["sub_bench"] = risk_analysis(report_normal["return"] - report_normal["bench"]) + analysis["sub_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"] - report_normal["cost"]) + analysis_df = pd.concat(analysis) # type: pd.DataFrame + print(analysis_df) diff --git a/examples/train_backtest_analyze.ipynb b/examples/train_backtest_analyze.ipynb new file mode 100644 index 0000000000..3f98bfea70 --- /dev/null +++ b/examples/train_backtest_analyze.ipynb @@ -0,0 +1,377 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "from pathlib import Path\n", + "\n", + "import qlib\n", + "import pandas as pd\n", + "from qlib.config import REG_CN\n", + "from qlib.contrib.model.gbdt import LGBModel\n", + "from qlib.contrib.estimator.handler import QLibDataHandlerV1\n", + "from qlib.contrib.strategy.strategy import TopkAmountStrategy\n", + "from qlib.contrib.evaluate import (\n", + " backtest as normal_backtest,\n", + " long_short_backtest,\n", + " risk_analysis,\n", + ")\n", + "from qlib.utils import exists_qlib_data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# use default data\n", + "# NOTE: need to download data from remote: python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data\n", + "mount_path = \"~/.qlib/qlib_data/cn_data\" # target_dir\n", + "if not exists_qlib_data(mount_path):\n", + " print(f\"Qlib data is not found in {mount_path}\")\n", + " sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath(\"scripts\")))\n", + " from get_data import GetData\n", + " GetData().qlib_data_cn(mount_path)\n", + "qlib.init(mount_path=mount_path, region=REG_CN)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "MARKET = \"csi500\"\n", + "BENCHMARK = \"SH000905\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# train model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "outputPrepend" + ] + }, + "outputs": [], + "source": [ + "###################################\n", + "# train model\n", + "###################################\n", + "DATA_HANDLER_CONFIG = {\n", + " \"dropna_label\": True,\n", + " \"start_date\": \"2007-01-01\",\n", + " \"end_date\": \"2020-08-01\",\n", + " \"market\": MARKET,\n", + "}\n", + "\n", + "TRAINER_CONFIG = {\n", + " \"train_start_date\": \"2007-01-01\",\n", + " \"train_end_date\": \"2014-12-31\",\n", + " \"validate_start_date\": \"2015-01-01\",\n", + " \"validate_end_date\": \"2016-12-31\",\n", + " \"test_start_date\": \"2017-01-01\",\n", + " \"test_end_date\": \"2020-08-01\",\n", + "}\n", + "\n", + "# use default DataHandler\n", + "# custom DataHandler, refer to: TODO: DataHandler api url\n", + "x_train, y_train, x_validate, y_validate, x_test, y_test = QLibDataHandlerV1(\n", + " **DATA_HANDLER_CONFIG\n", + ").get_split_data(**TRAINER_CONFIG)\n", + "\n", + "\n", + "MODEL_CONFIG = {\n", + " \"loss\": \"mse\",\n", + " \"colsample_bytree\": 0.8879,\n", + " \"learning_rate\": 0.0421,\n", + " \"subsample\": 0.8789,\n", + " \"lambda_l1\": 205.6999,\n", + " \"lambda_l2\": 580.9768,\n", + " \"max_depth\": 8,\n", + " \"num_leaves\": 210,\n", + " \"num_threads\": 20,\n", + "}\n", + "# use default model\n", + "# custom Model, refer to: TODO: Model api url\n", + "model = LGBModel(**MODEL_CONFIG)\n", + "model.fit(x_train, y_train, x_validate, y_validate)\n", + "_pred = model.predict(x_test)\n", + "_pred = pd.DataFrame(_pred, index=x_test.index, columns=y_test.columns)\n", + "\n", + "# backtest requires pred_score\n", + "pred_score = pd.DataFrame(index=_pred.index)\n", + "pred_score[\"score\"] = _pred.iloc(axis=1)[0]\n", + "\n", + "# save pred_score to file\n", + "pred_score_path = Path(\"~/tmp/qlib/pred_score.pkl\").expanduser()\n", + "pred_score_path.parent.mkdir(exist_ok=True, parents=True)\n", + "pred_score.to_pickle(pred_score_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# backtest" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "###################################\n", + "# backtest\n", + "###################################\n", + "STRATEGY_CONFIG = {\n", + " \"topk\": 50,\n", + " \"buffer_margin\": 230,\n", + "}\n", + "BACKTEST_CONFIG = {\n", + " \"verbose\": False,\n", + " \"limit_threshold\": 0.095,\n", + " \"account\": 100000000,\n", + " \"benchmark\": BENCHMARK,\n", + " \"deal_price\": \"vwap\",\n", + " \"open_cost\": 0.0005,\n", + " \"close_cost\": 0.0015,\n", + " \"min_cost\": 5,\n", + " \n", + "}\n", + "\n", + "# use default strategy\n", + "# custom Strategy, refer to: TODO: Strategy api url\n", + "strategy = TopkAmountStrategy(**STRATEGY_CONFIG)\n", + "report_normal, positions_normal = normal_backtest(\n", + " pred_score, strategy=strategy, **BACKTEST_CONFIG\n", + ")\n", + "\n", + "# long short backtest\n", + "long_short_reports = long_short_backtest(pred_score, topk=50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# analyze" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "###################################\n", + "# analyze\n", + "# If need a more detailed analysis, refer to: examples/train_and_bakctest.ipynb\n", + "###################################\n", + "analysis = dict()\n", + "analysis[\"pred_long\"] = risk_analysis(long_short_reports[\"long\"])\n", + "analysis[\"pred_short\"] = risk_analysis(long_short_reports[\"short\"])\n", + "analysis[\"pred_long_short\"] = risk_analysis(long_short_reports[\"long_short\"])\n", + "analysis[\"sub_bench\"] = risk_analysis(report_normal[\"return\"] - report_normal[\"bench\"])\n", + "analysis[\"sub_cost\"] = risk_analysis(\n", + " report_normal[\"return\"] - report_normal[\"bench\"] - report_normal[\"cost\"]\n", + ")\n", + "analysis_df = pd.concat(analysis) # type: pd.DataFrame\n", + "print(analysis_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# analyze graphs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qlib.contrib.report import analysis_model, analysis_position" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# get label data\n", + "from qlib.data import D\n", + "pred_df_dates = pred_score.index.get_level_values(level='datetime')\n", + "features_df = D.features(D.instruments(MARKET), ['Ref($close, -1)/$close - 1'], pred_df_dates.min(), pred_df_dates.max())\n", + "features_df.columns = ['label']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## analysis position" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_position.report_graph(report_normal)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### score IC" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pred_label = pd.concat([features_df, pred_score], axis=1, sort=True).reindex(features_df.index)\n", + "analysis_position.score_ic_graph(pred_label)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### cumulative return" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_position.cumulative_return_graph(positions_normal, report_normal, features_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### risk analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "report_long_short_df = pd.concat(long_short_reports, axis=1)\n", + "analysis_position.risk_analysis_graph(analysis_df, report_normal, report_long_short_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### rank label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_position.rank_label_graph(positions_normal, features_df, pred_df_dates.min(), pred_df_dates.max())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## analysis model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### model performance" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "analysis_model.model_performance_graph(pred_label)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/qlib/__init__.py b/qlib/__init__.py new file mode 100644 index 0000000000..3007f96312 --- /dev/null +++ b/qlib/__init__.py @@ -0,0 +1,196 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +__version__ = "0.4.6.dev" + +import os +import copy +import logging +import re +import subprocess +import platform +from pathlib import Path + +from .utils import can_use_cache + + +# init qlib +def init(default_conf="client", **kwargs): + from .config import ( + C, + _default_client_config, + _default_server_config, + _default_region_config, + REG_CN, + ) + from .data.data import register_all_wrappers + from .log import get_module_logger, set_log_with_config + + _logging_config = C.logging_config + if "logging_config" in kwargs: + _logging_config = kwargs["logging_config"] + + # set global config + if _logging_config: + set_log_with_config(_logging_config) + + LOG = get_module_logger("Initialization", level=logging.INFO) + LOG.info(f"default_conf: {default_conf}.") + if default_conf == "server": + base_config = copy.deepcopy(_default_server_config) + elif default_conf == "client": + base_config = copy.deepcopy(_default_client_config) + else: + raise ValueError("Unknown system type") + if base_config: + base_config.update(_default_region_config[kwargs.get("region", REG_CN)]) + for k, v in base_config.items(): + C[k] = v + + for k, v in kwargs.items(): + C[k] = v + if k not in C: + LOG.warning("Unrecognized config %s" % k) + + if default_conf == "client": + C["mount_path"] = str(Path(C["mount_path"]).expanduser().resolve()) + if not (C["expression_cache"] is None and C["dataset_cache"] is None): + # check redis + if not can_use_cache(): + LOG.warning( + f"redis connection failed(host={C['redis_host']} port={C['redis_port']}), cache will not be used!" + ) + C["expression_cache"] = None + C["dataset_cache"] = None + + # check path if server/local + if re.match("^[^/ ]+:.+", C["provider_uri"]) is None: + if not os.path.exists(C["provider_uri"]): + if C["auto_mount"]: + LOG.error( + "Invalid provider uri: {}, please check if a valid provider uri has been set. This path does not exist.".format( + C["provider_uri"] + ) + ) + else: + LOG.warning("auto_path is False, please make sure {} is mounted".format(C["mount_path"])) + else: + mount_command = "sudo mount.nfs %s %s" % (C["provider_uri"], C["mount_path"]) + # If the provider uri looks like this 172.23.233.89//data/csdesign' + # It will be a nfs path. The client provider will be used + if not C["auto_mount"]: + if not os.path.exists(C["mount_path"]): + raise FileNotFoundError( + "Invalid mount path: {}! Please mount manually: {} or Set init parameter `auto_mount=True`".format( + C["mount_path"], mount_command + ) + ) + else: + # Judging system type + sys_type = platform.system() + if "win" in sys_type.lower(): + # system: window + exec_result = os.popen("mount -o anon %s %s" % (C["provider_uri"], C["mount_path"] + ":")) + result = exec_result.read() + if "85" in result: + LOG.warning("already mounted or window mount path already exists") + elif "53" in result: + raise OSError("not find network path") + elif "error" in result or "错误" in result: + raise OSError("Invalid mount path") + elif C["provider_uri"] in result: + LOG.info("window success mount..") + else: + raise OSError(f"unknown error: {result}") + + # config mount path + C["mount_path"] = C["mount_path"] + ":\\" + else: + # system: linux/Unix/Mac + # check mount + _remote_uri = C["provider_uri"] + _remote_uri = _remote_uri[:-1] if _remote_uri.endswith("/") else _remote_uri + _mount_path = C["mount_path"] + _mount_path = _mount_path[:-1] if _mount_path.endswith("/") else _mount_path + _check_level_num = 2 + _is_mount = False + while _check_level_num: + with subprocess.Popen( + 'mount | grep "{}"'.format(_remote_uri), + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) as shell_r: + _command_log = shell_r.stdout.readlines() + if len(_command_log) > 0: + for _c in _command_log: + _temp_mount = _c.decode("utf-8").split(" ")[2] + _temp_mount = _temp_mount[:-1] if _temp_mount.endswith("/") else _temp_mount + if _temp_mount == _mount_path: + _is_mount = True + break + if _is_mount: + break + _remote_uri = "/".join(_remote_uri.split("/")[:-1]) + _mount_path = "/".join(_mount_path.split("/")[:-1]) + _check_level_num -= 1 + + if not _is_mount: + try: + os.makedirs(C["mount_path"], exist_ok=True) + except Exception: + raise OSError( + "Failed to create directory {}, please create {} manually!".format( + C["mount_path"], C["mount_path"] + ) + ) + + # check nfs-common + command_res = os.popen("dpkg -l | grep nfs-common") + command_res = command_res.readlines() + if not command_res: + raise OSError( + "nfs-common is not found, please install it by execute: sudo apt install nfs-common" + ) + # manually mount + command_status = os.system(mount_command) + if command_status == 256: + raise OSError( + "mount {} on {} error! Needs SUDO! Please mount manually: {}".format( + C["provider_uri"], C["mount_path"], mount_command + ) + ) + elif command_status == 32512: + # LOG.error("Command error") + raise OSError("mount {} on {} error! Command error".format(C["provider_uri"], C["mount_path"])) + elif command_status == 0: + LOG.info("Mount finished") + else: + LOG.warning("{} on {} is already mounted".format(_remote_uri, _mount_path)) + + LOG.info("qlib successfully initialized based on %s settings." % default_conf) + register_all_wrappers() + try: + if C["auto_mount"]: + LOG.info(f"provider_uri={C['provider_uri']}") + else: + LOG.info(f"mount_path={C['mount_path']}") + except KeyError: + LOG.info(f"provider_uri={C['provider_uri']}") + + if "flask_server" in C: + LOG.info(f"flask_server={C['flask_server']}, flask_port={C['flask_port']}") + + +def init_from_yaml_conf(conf_path): + """init_from_yaml_conf + + :param conf_path: A path to the qlib config in yml format + """ + import yaml + + with open(conf_path) as f: + config = yaml.load(f, Loader=yaml.FullLoader) + default_conf = config.pop("default_conf", "client") + init(default_conf, **config) diff --git a/qlib/config.py b/qlib/config.py new file mode 100644 index 0000000000..6c64c2ba2d --- /dev/null +++ b/qlib/config.py @@ -0,0 +1,167 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +# REGION CONST +REG_CN = "cn" +REG_US = "US" + +_default_config = { + # data provider config + "calendar_provider": "LocalCalendarProvider", + "instrument_provider": "LocalInstrumentProvider", + "feature_provider": "LocalFeatureProvider", + "expression_provider": "LocalExpressionProvider", + "dataset_provider": "LocalDatasetProvider", + "provider": "LocalProvider", + # config it in qlib.init() + "provider_uri": "", + # cache + "expression_cache": None, + "dataset_cache": None, + "calendar_cache": None, + # for simple dataset cache + "local_cache_path": None, + "kernels": 16, + # How many tasks belong to one process. Recommend 1 for high-frequency data and None for daily data. + "maxtasksperchild": None, + "default_disk_cache": 1, # 0:skip/1:use + "disable_disk_cache": False, # disable disk cache; if High-frequency data generally disable_disk_cache=True + "mem_cache_size_limit": 500, + # memory cache expire second, only in used 'ClientDatasetCache' and 'client D.calendar' + # default 1 hour + "mem_cache_expire": 60 * 60, + # memory cache space limit, default 5GB, only in used client + "mem_cache_space_limit": 1024 * 1024 * 1024 * 5, + # cache dir name + "dataset_cache_dir_name": "dataset_cache", + "features_cache_dir_name": "features_cache", + # redis + # in order to use cache + "redis_host": "127.0.0.1", + "redis_port": 6379, + "redis_task_db": 1, + # This value can be reset via qlib.init + "logging_level": "INFO", + # Global configuration of qlib log + # logging_level can control the logging level more finely + "logging_config": { + "version": 1, + "formatters": { + "logger_format": { + "format": "[%(process)s:%(threadName)s](%(asctime)s) %(levelname)s - %(name)s - [%(filename)s:%(lineno)d] - %(message)s" + } + }, + "filters": { + "field_not_found": { + "()": "qlib.log.LogFilter", + "param": [".*?WARN: data not found for.*?"], + } + }, + "handlers": { + "console": { + "class": "logging.StreamHandler", + "level": "DEBUG", + "formatter": "logger_format", + "filters": ["field_not_found"], + } + }, + "loggers": {"qlib": {"level": "DEBUG", "handlers": ["console"]}}, + }, +} + +_default_server_config = { + # data provider config + "calendar_provider": "LocalCalendarProvider", + "instrument_provider": "LocalInstrumentProvider", + "feature_provider": "LocalFeatureProvider", + "expression_provider": "LocalExpressionProvider", + "dataset_provider": "LocalDatasetProvider", + "provider": "LocalProvider", + # config it in qlib.init() + "provider_uri": "", + # redis + "redis_host": "127.0.0.1", + "redis_port": 6379, + "redis_task_db": 1, + "kernels": 64, + # cache + "expression_cache": "ServerExpressionCache", + "dataset_cache": "ServerDatasetCache", +} + +_default_client_config = { + # data provider config + "calendar_provider": {"class": "LocalCalendarProvider", "kwargs": {"remote": True}}, + "instrument_provider": "LocalInstrumentProvider", + "feature_provider": {"class": "LocalFeatureProvider", "kwargs": {"remote": True}}, + "expression_provider": "LocalExpressionProvider", + "dataset_provider": "LocalDatasetProvider", + "provider": "LocalProvider", + # config it in user's own code + "provider_uri": "~/.qlib/qlib_data/cn_data", + # cache + # Using parameter 'remote' to announce the client is using server_cache, and the writing access will be disabled. + "expression_cache": {"class": "ServerExpressionCache", "kwargs": {"remote": True}}, + "dataset_cache": {"class": "ServerDatasetCache", "kwargs": {"remote": True}}, + "calendar_cache": None, + # client config + "kernels": 16, + "mount_path": "~/.qlib/qlib_data/cn_data", + "auto_mount": False, # The nfs is already mounted on our server[auto_mount: False]. + # The nfs should be auto-mounted by qlib on other + # serversS(such as PAI) [auto_mount:True] + "timeout": 100, + "logging_level": "INFO", + "region": REG_CN, +} + + +_default_region_config = { + REG_CN: { + "trade_unit": 100, + "limit_threshold": 0.1, + "deal_price": "vwap", + }, + REG_US: { + "trade_unit": 1, + "limit_threshold": None, + "deal_price": "close", + }, +} + + +class Config: + def __getitem__(self, key): + return _default_config[key] + + def __getattr__(self, attr): + try: + return _default_config[attr] + except KeyError: + return AttributeError(f"No such {attr} in _default_config") + + def __setitem__(self, key, value): + _default_config[key] = value + + def __setattr__(self, attr, value): + _default_config[attr] = value + + def __contains__(self, item): + return item in _default_config + + def __getstate__(self): + return _default_config + + def __setstate__(self, state): + _default_config.update(state) + + def __str__(self): + return str(_default_config) + + def __repr__(self): + return str(_default_config) + + +# global config +C = Config() diff --git a/qlib/contrib/__init__.py b/qlib/contrib/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/qlib/contrib/backtest/__init__.py b/qlib/contrib/backtest/__init__.py new file mode 100644 index 0000000000..31746819cd --- /dev/null +++ b/qlib/contrib/backtest/__init__.py @@ -0,0 +1,9 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# -*- coding: utf-8 -*- +from .order import Order +from .account import Account +from .position import Position +from .exchange import Exchange +from .report import Report diff --git a/qlib/contrib/backtest/account.py b/qlib/contrib/backtest/account.py new file mode 100644 index 0000000000..4335a6af24 --- /dev/null +++ b/qlib/contrib/backtest/account.py @@ -0,0 +1,174 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import copy + +from .position import Position +from .report import Report +from .order import Order + + +""" +rtn & earning in the Account + rtn: + from order's view + 1.change if any order is executed, sell order or buy order + 2.change at the end of today, (today_clse - stock_price) * amount + earning + from value of current position + earning will be updated at the end of trade date + earning = today_value - pre_value + **is consider cost** + while earning is the difference of two position value, so it considers cost, it is the true return rate + in the specific accomplishment for rtn, it does not consider cost, in other words, rtn - cost = earning +""" + + +class Account: + def __init__(self, init_cash, last_trade_date=None): + self.init_vars(init_cash, last_trade_date) + + def init_vars(self, init_cash, last_trade_date=None): + # init cash + self.init_cash = init_cash + self.current = Position(cash=init_cash) + self.positions = {} + self.rtn = 0 + self.ct = 0 + self.to = 0 + self.val = 0 + self.report = Report() + self.earning = 0 + self.last_trade_date = last_trade_date + + def get_positions(self): + return self.positions + + def get_cash(self): + return self.current.position["cash"] + + def update_state_from_order(self, order, trade_val, cost, trade_price): + # update cash + if order.direction == Order.SELL: # 0 for sell + self.current.position["cash"] += trade_val - cost + elif order.direction == Order.BUY: # 1 for buy + self.current.position["cash"] -= trade_val + cost + else: + raise NotImplementedError("{} ".format(order.direction)) + # update turnover + self.to += trade_val + # update cost + self.ct += cost + # update return + # update self.rtn from order + if order.direction == Order.SELL: # 0 for sell + # when sell stock, get profit from price change + profit = trade_val - self.current.get_stock_price(order.stock_id) * order.deal_amount + self.rtn += profit # note here do not consider cost + elif order.direction == Order.BUY: # 1 for buy + # when buy stock, we get return for the rtn computing method + # profit in buy order is to make self.rtn is consistent with self.earning at the end of date + profit = self.current.get_stock_price(order.stock_id) * order.deal_amount - trade_val + self.rtn += profit + + def update_order(self, order, trade_val, cost, trade_price): + # if stock is sold out, no stock price information in Position, then we should update account first, then update current position + # if stock is bought, there is no stock in current position, update current, then update account + if order.direction == Order.SELL: + # sell stock + self.update_state_from_order(order, trade_val, cost, trade_price) + # update current position + # for may sell all of stock_id + self.current.update_order(order, trade_price) + else: + # buy stock + # deal order, then update state + self.current.update_order(order, trade_price) + self.update_state_from_order(order, trade_val, cost, trade_price) + + def update_daily_end(self, today, trader): + """ + today: pd.TimeStamp + quote: pd.DataFrame (code, date), collumns + when the end of trade date + - update rtn + - update price for each asset + - update value for this account + - update earning (2nd view of return ) + - update holding day, count of stock + - update position hitory + - update report + :return: None + """ + # update price for stock in the position and the profit from changed_price + stock_list = self.current.get_stock_list() + profit = 0 + for code in stock_list: + # if suspend, no new price to be updated, profit is 0 + if trader.check_stock_suspended(code, today): + continue + else: + today_close = trader.get_close(code, today) + profit += (today_close - self.current.position[code]["price"]) * self.current.position[code]["amount"] + self.current.update_stock_price(stock_id=code, price=today_close) + self.rtn += profit + # update holding day count + self.current.add_count_all() + # update value + self.val = self.current.calculate_value() + # update earning (2nd view of return) + # account_value - last_account_value + # for the first trade date, account_value - init_cash + # self.report.is_empty() to judge is_first_trade_date + # get last_account_value, today_account_value, today_stock_value + if self.report.is_empty(): + last_account_value = self.init_cash + else: + last_account_value = self.report.get_latest_account_value() + today_account_value = self.current.calculate_value() + today_stock_value = self.current.calculate_stock_value() + self.earning = today_account_value - last_account_value + # update report for today + # judge whether the the trading is begin. + # and don't add init account state into report, due to we don't have excess return in those days. + self.report.update_report_record( + trade_date=today, + account_value=today_account_value, + cash=self.current.position["cash"], + return_rate=(self.earning + self.ct) / last_account_value, + # here use earning to calculate return, position's view, earning consider cost, true return + # in order to make same definition with original backtest in evaluate.py + turnover_rate=self.to / last_account_value, + cost_rate=self.ct / last_account_value, + stock_value=today_stock_value, + ) + # set today_account_value to position + self.current.position["today_account_value"] = today_account_value + self.current.update_weight_all() + # update positions + # note use deepcopy + self.positions[today] = copy.deepcopy(self.current) + + # finish today's updation + # reset the daily variables + self.rtn = 0 + self.ct = 0 + self.to = 0 + self.last_trade_date = today + + def load_account(self, account_path): + report = Report() + position = Position() + last_trade_date = position.load_position(account_path / "position.xlsx") + report.load_report(account_path / "report.csv") + + # assign values + self.init_vars(position.init_cash) + self.current = position + self.report = report + self.last_trade_date = last_trade_date if last_trade_date else None + + def save_account(self, account_path): + self.current.save_position(account_path / "position.xlsx", self.last_trade_date) + self.report.save_report(account_path / "report.csv") diff --git a/qlib/contrib/backtest/backtest.py b/qlib/contrib/backtest/backtest.py new file mode 100644 index 0000000000..ea7220133d --- /dev/null +++ b/qlib/contrib/backtest/backtest.py @@ -0,0 +1,128 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import numpy as np +import pandas as pd +from ...utils import get_date_by_shift, get_date_range +from ..online.executor import SimulatorExecutor +from ...data import D +from .account import Account +from ...config import C +from ...log import get_module_logger + +LOG = get_module_logger("backtest") + + +def backtest(pred, strategy, trade_exchange, shift, verbose, account, benchmark): + """Parameters + ---------- + pred : pandas.DataFrame + predict should has index and one `score` column + strategy : Strategy() + strategy part for backtest + trade_exchange : Exchange() + exchage for backtest + shift : int + whether to shift prediction by one day + verbose : bool + whether to print log + account : float + init account value + benchmark : str/list/pd.Series + `benchmark` is pd.Series, `index` is trading date; the value T is the change from T-1 to T. + example: + print(D.features(D.instruments('csi500'), ['$close/Ref($close, 1)-1'])['$close/Ref($close, 1)-1'].head()) + 2017-01-04 0.011693 + 2017-01-05 0.000721 + 2017-01-06 -0.004322 + 2017-01-09 0.006874 + 2017-01-10 -0.003350 + + `benchmark` is list, will use the daily average change of the stock pool in the list as the 'bench'. + `benchmark` is str, will use the daily change as the 'bench'. + benchmark code, default is SH000905 CSI500 + """ + trade_account = Account(init_cash=account) + _pred_dates = pred.index.get_level_values(level="datetime") + predict_dates = D.calendar(start_time=_pred_dates.min(), end_time=_pred_dates.max()) + if isinstance(benchmark, pd.Series): + bench = benchmark + else: + _codes = benchmark if isinstance(benchmark, list) else [benchmark] + _temp_result = D.features( + _codes, + ["$close/Ref($close,1)-1"], + predict_dates[0], + get_date_by_shift(predict_dates[-1], shift=shift), + disk_cache=1, + ) + bench = _temp_result.groupby(level="datetime")[_temp_result.columns.tolist()[0]].mean() + + trade_dates = np.append(predict_dates[shift:], get_date_range(predict_dates[-1], shift=shift)) + executor = SimulatorExecutor(trade_exchange, verbose=verbose) + + # trading apart + for pred_date, trade_date in zip(predict_dates, trade_dates): + # for loop predict date and trading date + # print + if verbose: + LOG.info("[I {:%Y-%m-%d}]: trade begin.".format(trade_date)) + + # 1. Load the score_series at pred_date + try: + score = pred.loc(axis=0)[:, pred_date] # (stock_id, trade_date) multi_index, score in pdate + score_series = score.reset_index(level="datetime", drop=True)[ + "score" + ] # pd.Series(index:stock_id, data: score) + except KeyError: + LOG.warning("No score found on predict date[{:%Y-%m-%d}]".format(trade_date)) + score_series = None + + if score_series is not None and score_series.count() > 0: # in case of the scores are all None + # 2. Update your strategy (and model) + strategy.update(score_series, pred_date, trade_date) + + # 3. Generate order list + order_list = strategy.generate_order_list( + score_series=score_series, + current=trade_account.current, + trade_exchange=trade_exchange, + pred_date=pred_date, + trade_date=trade_date, + ) + else: + order_list = [] + # 4. Get result after executing order list + # NOTE: The following operation will modify order.amount. + # NOTE: If it is buy and the cash is insufficient, the tradable amount will be recalculated + trade_info = executor.execute(trade_account, order_list, trade_date) + + # 5. Update account information according to transaction + update_account(trade_account, trade_info, trade_exchange, trade_date) + + # generate backtest report + report_df = trade_account.report.generate_report_dataframe() + report_df["bench"] = bench + positions = trade_account.get_positions() + return report_df, positions + + +def update_account(trade_account, trade_info, trade_exchange, trade_date): + """Update the account and strategy + Parameters + ---------- + trade_account : Account() + trade_info : list of [Order(), float, float, float] + (order, trade_val, trade_cost, trade_price), trade_info with out factor + trade_exchange : Exchange() + used to get the $close_price at trade_date to update account + trade_date : pd.Timestamp + """ + # update account + for [order, trade_val, trade_cost, trade_price] in trade_info: + if order.deal_amount == 0: + continue + trade_account.update_order(order=order, trade_val=trade_val, cost=trade_cost, trade_price=trade_price) + # at the end of trade date, update the account based the $close_price of stocks. + trade_account.update_daily_end(today=trade_date, trader=trade_exchange) diff --git a/qlib/contrib/backtest/exchange.py b/qlib/contrib/backtest/exchange.py new file mode 100644 index 0000000000..68a5067185 --- /dev/null +++ b/qlib/contrib/backtest/exchange.py @@ -0,0 +1,430 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import random +import logging + +import numpy as np +import pandas as pd + +from ...data import D +from .order import Order +from ...config import C, REG_CN +from ...log import get_module_logger + + +class Exchange: + def __init__( + self, + trade_dates=None, + codes="all", + deal_price=None, + subscribe_fields=[], + limit_threshold=None, + open_cost=0.0015, + close_cost=0.0025, + trade_unit=None, + min_cost=5, + extra_quote=None, + ): + """__init__ + + :param trade_dates: list of pd.Timestamp + :param codes: list stock_id list or a string of instruments(i.e. all, csi500, sse50) + :param deal_price: str, 'close', 'open', 'vwap' + :param subscribe_fields: list, subscribe fields + :param limit_threshold: float, 0.1 for example, default None + :param open_cost: cost rate for open, default 0.0015 + :param close_cost: cost rate for close, default 0.0025 + :param trade_unit: trade unit, 100 for China A market + :param min_cost: min cost, default 5 + :param extra_quote: pandas, dataframe consists of + columns: like ['$vwap', '$close', '$factor', 'limit']. + The limit indicates that the etf is tradable on a specific day. + Necessary fields: + $close is for calculating the total value at end of each day. + Optional fields: + $vwap is only necessary when we use the $vwap price as the deal price + $factor is for rounding to the trading unit + limit will be set to False by default(False indicates we can buy this + target on this day). + index: MultipleIndex(instrument, pd.Datetime) + """ + if trade_unit is None: + trade_unit = C.trade_unit + if limit_threshold is None: + limit_threshold = C.limit_threshold + if deal_price is None: + deal_price = C.deal_price + + self.logger = get_module_logger("online operator", level=logging.INFO) + + self.trade_unit = trade_unit + + # TODO: the quote, trade_dates, codes are not necessray. + # It is just for performance consideration. + if limit_threshold is None: + if C.region == REG_CN: + self.logger.warning(f"limit_threshold not set. The stocks hit the limit may be bought/sold") + elif abs(limit_threshold) > 0.1: + if C.region == REG_CN: + self.logger.warning(f"limit_threshold may not be set to a reasonable value") + + if deal_price[0] != "$": + self.deal_price = "$" + deal_price + else: + self.deal_price = deal_price + if isinstance(codes, str): + codes = D.instruments(codes) + self.codes = codes + # Necessary fields + # $close is for calculating the total value at end of each day. + # $factor is for rounding to the trading unit + # $change is for calculating the limit of the stock + + necessary_fields = {self.deal_price, "$close", "$change", "$factor"} + subscribe_fields = list(necessary_fields | set(subscribe_fields)) + all_fields = list(necessary_fields | set(subscribe_fields)) + self.all_fields = all_fields + self.open_cost = open_cost + self.close_cost = close_cost + self.min_cost = min_cost + self.limit_threshold = limit_threshold + # TODO: the quote, trade_dates, codes are not necessray. + # It is just for performance consideration. + if trade_dates is not None and len(trade_dates): + start_date, end_date = trade_dates[0], trade_dates[-1] + else: + self.logger.warning("trade_dates have not been assigned, all dates will be loaded") + start_date, end_date = None, None + + self.extra_quote = extra_quote + self.set_quote(codes, start_date, end_date) + + def set_quote(self, codes, start_date, end_date): + if len(codes) == 0: + codes = D.instruments() + self.quote = D.features(codes, self.all_fields, start_date, end_date, disk_cache=True).dropna(subset=["$close"]) + self.quote.columns = self.all_fields + + if self.quote[self.deal_price].isna().any(): + self.logger.warning("{} field data contains nan.".format(self.deal_price)) + + if self.quote["$factor"].isna().any(): + # The 'factor.day.bin' file not exists, and `factor` field contains `nan` + # Use adjusted price + self.trade_w_adj_price = True + self.logger.warning("factor.day.bin file not exists or factor contains `nan`. Order using adjusted_price.") + else: + # The `factor.day.bin` file exists and all data `close` and `factor` are not `nan` + # Use normal price + self.trade_w_adj_price = False + # update limit + # check limit_threshold + if self.limit_threshold is None: + self.quote["limit"] = False + else: + # set limit + self._update_limit(buy_limit=self.limit_threshold, sell_limit=self.limit_threshold) + + quote_df = self.quote + if self.extra_quote is not None: + # process extra_quote + if "$close" not in self.extra_quote: + raise ValueError("$close is necessray in extra_quote") + if self.deal_price not in self.extra_quote.columns: + self.extra_quote[self.deal_price] = self.extra_quote["$close"] + self.logger.warning("No deal_price set for extra_quote. Use $close as deal_price.") + if "$factor" not in self.extra_quote.columns: + self.extra_quote["$factor"] = 1.0 + self.logger.warning("No $factor set for extra_quote. Use 1.0 as $factor.") + if "limit" not in self.extra_quote.columns: + self.extra_quote["limit"] = False + self.logger.warning("No limit set for extra_quote. All stock will be tradable.") + assert set(self.extra_quote.columns) == set(quote_df.columns) - {"$change"} + quote_df = pd.concat([quote_df, self.extra_quote], sort=False, axis=0) + + # update quote: pd.DataFrame to dict, for search use + self.quote = quote_df.to_dict("index") + + def _update_limit(self, buy_limit, sell_limit): + self.quote["limit"] = ~self.quote["$change"].between(-sell_limit, buy_limit) + + def check_stock_limit(self, stock_id, trade_date): + """Parameter + stock_id + trade_date + is limtited + """ + return self.quote[(stock_id, trade_date)]["limit"] + + def check_stock_suspended(self, stock_id, trade_date): + # is suspended + return (stock_id, trade_date) not in self.quote + + def is_stock_tradable(self, stock_id, trade_date): + # check if stock can be traded + # same as check in check_order + if self.check_stock_suspended(stock_id, trade_date) or self.check_stock_limit(stock_id, trade_date): + return False + else: + return True + + def check_order(self, order): + # check limit and suspended + if self.check_stock_suspended(order.stock_id, order.trade_date) or self.check_stock_limit( + order.stock_id, order.trade_date + ): + return False + else: + return True + + def deal_order(self, order, trade_account=None, position=None): + """ + Deal order when the actual transaction + + :param order: Deal the order. + :param trade_account: Trade account to be updated after dealing the order. + :param position: position to be updated after dealing the order. + :return: trade_val, trade_cost, trade_price + """ + # need to check order first + # TODO: check the order unit limit in the exchange!!!! + # The order limit is related to the adj factor and the cur_amount. + # factor = self.quote[(order.stock_id, order.trade_date)]['$factor'] + # cur_amount = trade_account.current.get_stock_amount(order.stock_id) + if self.check_order(order) is False: + raise AttributeError("need to check order first") + if trade_account is not None and position is not None: + raise ValueError("trade_account and position can only choose one") + + trade_price = self.get_deal_price(order.stock_id, order.trade_date) + trade_val, trade_cost = self._calc_trade_info_by_order( + order, trade_account.current if trade_account else position + ) + # update account + if trade_val > 0: + # If the order can only be deal 0 trade_val. Nothing to be updated + # Otherwise, it will result some stock with 0 amount in the position + if trade_account: + trade_account.update_order( + order=order, + trade_val=trade_val, + cost=trade_cost, + trade_price=trade_price, + ) + elif position: + position.update_order(order, trade_price) + + return trade_val, trade_cost, trade_price + + def get_quote_info(self, stock_id, trade_date): + return self.quote[(stock_id, trade_date)] + + def get_close(self, stock_id, trade_date): + return self.quote[(stock_id, trade_date)]["$close"] + + def get_deal_price(self, stock_id, trade_date): + deal_price = self.quote[(stock_id, trade_date)][self.deal_price] + if np.isclose(deal_price, 0.0) or np.isnan(deal_price): + self.logger.warning(f"(stock_id:{stock_id}, trade_date:{trade_date}, {self.deal_price}): {deal_price}!!!") + self.logger.warning(f"setting deal_price to close price") + deal_price = self.get_close(stock_id, trade_date) + return deal_price + + def get_factor(self, stock_id, trade_date): + return self.quote[(stock_id, trade_date)]["$factor"] + + def generate_amount_position_from_weight_position(self, weight_position, cash, trade_date): + """ + The generate the target position according to the weight and the cash. + NOTE: All the cash will assigned to the tadable stock. + + Parameter: + weight_position : dict {stock_id : weight}; allocate cash by weight_position + among then, weight must be in this range: 0 < weight < 1 + cash : cash + trade_date : trade date + """ + + # calculate the total weight of tradable value + tradable_weight = 0.0 + for stock_id in weight_position: + if self.is_stock_tradable(stock_id=stock_id, trade_date=trade_date): + # weight_position must be greater than 0 and less than 1 + if weight_position[stock_id] < 0 or weight_position[stock_id] > 1: + raise ValueError( + "weight_position is {}, " + "weight_position is not in the range of (0, 1).".format(weight_position[stock_id]) + ) + tradable_weight += weight_position[stock_id] + + if tradable_weight - 1.0 >= 1e-5: + raise ValueError("tradable_weight is {}, can not greater than 1.".format(tradable_weight)) + + amount_dict = {} + for stock_id in weight_position: + if weight_position[stock_id] > 0.0 and self.is_stock_tradable(stock_id=stock_id, trade_date=trade_date): + amount_dict[stock_id] = ( + cash + * weight_position[stock_id] + / tradable_weight + // self.get_deal_price(stock_id=stock_id, trade_date=trade_date) + ) + return amount_dict + + def get_real_deal_amount(self, current_amount, target_amount, factor): + """ + Calculate the real adjust deal amount when considering the trading unit + + :param current_amount: + :param target_amount: + :param factor: + :return real_deal_amount; Positive deal_amount indicates buying more stock. + """ + if current_amount == target_amount: + return 0 + elif current_amount < target_amount: + deal_amount = target_amount - current_amount + deal_amount = self.round_amount_by_trade_unit(deal_amount, factor) + return deal_amount + else: + if target_amount == 0: + return -current_amount + else: + deal_amount = current_amount - target_amount + deal_amount = self.round_amount_by_trade_unit(deal_amount, factor) + return -deal_amount + + def generate_order_for_target_amount_position(self, target_position, current_position, trade_date): + """Parameter: + target_position : dict { stock_id : amount } + current_postion : dict { stock_id : amount} + trade_unit : trade_unit + down sample : for amount 321 and trade_unit 100, deal_amount is 300 + deal order on trade_date + """ + # split buy and sell for further use + buy_order_list = [] + sell_order_list = [] + # three parts: kept stock_id, dropped stock_id, new stock_id + # handle kept stock_id + + # because the order of the set is not fixed, the trading order of the stock is different, so that the backtest results of the same parameter are different; + # so here we sort stock_id, and then randomly shuffle the order of stock_id + # because the same random seed is used, the final stock_id order is fixed + sorted_ids = sorted(set(list(current_position.keys()) + list(target_position.keys()))) + random.seed(0) + random.shuffle(sorted_ids) + for stock_id in sorted_ids: + + # Do not generate order for the nontradable stocks + if not self.is_stock_tradable(stock_id=stock_id, trade_date=trade_date): + continue + + target_amount = target_position.get(stock_id, 0) + current_amount = current_position.get(stock_id, 0) + factor = self.quote[(stock_id, trade_date)]["$factor"] + + deal_amount = self.get_real_deal_amount(current_amount, target_amount, factor) + if deal_amount == 0: + continue + elif deal_amount > 0: + # buy stock + buy_order_list.append( + Order( + stock_id=stock_id, + amount=deal_amount, + direction=Order.BUY, + trade_date=trade_date, + factor=factor, + ) + ) + else: + # sell stock + sell_order_list.append( + Order( + stock_id=stock_id, + amount=abs(deal_amount), + direction=Order.SELL, + trade_date=trade_date, + factor=factor, + ) + ) + # return order_list : buy + sell + return sell_order_list + buy_order_list + + def calculate_amount_position_value(self, amount_dict, trade_date, only_tradable=False): + """Parameter + position : Position() + amount_dict : {stock_id : amount} + """ + value = 0 + for stock_id in amount_dict: + if ( + self.check_stock_suspended(stock_id=stock_id, trade_date=trade_date) is False + and self.check_stock_limit(stock_id=stock_id, trade_date=trade_date) is False + ): + value += self.get_deal_price(stock_id=stock_id, trade_date=trade_date) * amount_dict[stock_id] + return value + + def round_amount_by_trade_unit(self, deal_amount, factor): + """Parameter + deal_amount : float, adjusted amount + factor : float, adjusted factor + return : float, real amount + """ + if not self.trade_w_adj_price: + # the minimal amount is 1. Add 0.1 for solving precision problem. + return (deal_amount * factor + 0.1) // self.trade_unit * self.trade_unit / factor + return deal_amount + + def _calc_trade_info_by_order(self, order, position): + """ + Calculation of trade info + + :param order: + :param position: Position + :return: trade_val, trade_cost + """ + + trade_price = self.get_deal_price(order.stock_id, order.trade_date) + if order.direction == Order.SELL: + # sell + if position is not None: + if np.isclose(order.amount, position.get_stock_amount(order.stock_id)): + # when selling last stock. The amount don't need rounding + order.deal_amount = order.amount + else: + order.deal_amount = self.round_amount_by_trade_unit(order.amount, order.factor) + else: + # TODO: We don't know current position. + # We choose to sell all + order.deal_amount = order.amount + + trade_val = order.deal_amount * trade_price + trade_cost = max(trade_val * self.close_cost, self.min_cost) + elif order.direction == Order.BUY: + # buy + if position is not None: + cash = position.get_cash() + trade_val = order.amount * trade_price + if cash < trade_val * (1 + self.open_cost): + # The money is not enough + order.deal_amount = self.round_amount_by_trade_unit( + cash / (1 + self.open_cost) / trade_price, order.factor + ) + else: + # THe money is enough + order.deal_amount = self.round_amount_by_trade_unit(order.amount, order.factor) + else: + # Unknown amount of money. Just round the amount + order.deal_amount = self.round_amount_by_trade_unit(order.amount, order.factor) + + trade_val = order.deal_amount * trade_price + trade_cost = trade_val * self.open_cost + else: + raise NotImplementedError("order type {} error".format(order.type)) + + return trade_val, trade_cost diff --git a/qlib/contrib/backtest/order.py b/qlib/contrib/backtest/order.py new file mode 100644 index 0000000000..740773b2fd --- /dev/null +++ b/qlib/contrib/backtest/order.py @@ -0,0 +1,29 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +class Order: + + SELL = 0 + BUY = 1 + + def __init__(self, stock_id, amount, trade_date, direction, factor): + """Parameter + direction : Order.SELL for sell; Order.BUY for buy + stock_id : str + amount : float + trade_date : pd.Timestamp + factor : float + presents the weight factor assigned in Exchange() + """ + # check direction + if direction not in {Order.SELL, Order.BUY}: + raise NotImplementedError("direction not supported, `Order.SELL` for sell, `Order.BUY` for buy") + self.stock_id = stock_id + # amount of generated orders + self.amount = amount + # amount of successfully completed orders + self.deal_amount = 0 + self.trade_date = trade_date + self.direction = direction + self.factor = factor diff --git a/qlib/contrib/backtest/position.py b/qlib/contrib/backtest/position.py new file mode 100644 index 0000000000..b614c08d01 --- /dev/null +++ b/qlib/contrib/backtest/position.py @@ -0,0 +1,207 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import pandas as pd +import copy +import pathlib +from .order import Order + +""" +Position module +""" + +""" +current state of position +a typical example is :{ + : { + 'count': , + 'amount': , + 'price': , + 'weight': , + }, +} + +""" + + +class Position: + """Position""" + + def __init__(self, cash=0, position_dict={}, today_account_value=0): + # NOTE: The position dict must be copied!!! + # Otherwise the initial value + self.init_cash = cash + self.position = position_dict.copy() + self.position["cash"] = cash + self.position["today_account_value"] = today_account_value + + def init_stock(self, stock_id, amount, price=None): + self.position[stock_id] = {} + self.position[stock_id]["count"] = 0 # update count in the end of this date + self.position[stock_id]["amount"] = amount + self.position[stock_id]["price"] = price + self.position[stock_id]["weight"] = 0 # update the weight in the end of the trade date + + def buy_stock(self, stock_id, amount, price): + if stock_id not in self.position: + self.init_stock(stock_id=stock_id, amount=amount, price=price) + else: + # exist, add amount + self.position[stock_id]["amount"] += amount + + def sell_stock(self, stock_id, amount): + if stock_id not in self.position: + raise KeyError("{} not in current position".format(stock_id)) + else: + # decrease the amount of stock + self.position[stock_id]["amount"] -= amount + # check if to delete + if self.position[stock_id]["amount"] < -1e-5: + raise ValueError( + "only have {} {}, require {}".format(self.position[stock_id]["amount"], stock_id, amount) + ) + elif abs(self.position[stock_id]["amount"]) <= 1e-5: + self.del_stock(stock_id) + + def del_stock(self, stock_id): + del self.position[stock_id] + + def update_order(self, order, trade_price): + # handle order, order is a order class, defined in exchange.py + if order.direction == Order.BUY: + # BUY + self.buy_stock(stock_id=order.stock_id, amount=order.deal_amount, price=trade_price) + elif order.direction == Order.SELL: + # SELL + self.sell_stock(stock_id=order.stock_id, amount=order.deal_amount) + else: + raise NotImplementedError("do not suppotr order direction {}".format(order.direction)) + + def update_stock_price(self, stock_id, price): + self.position[stock_id]["price"] = price + + def update_stock_count(self, stock_id, count): + self.position[stock_id]["count"] = count + + def update_stock_weight(self, stock_id, weight): + self.position[stock_id]["weight"] = weight + + def update_cash(self, cash): + self.position["cash"] = cash + + def calculate_stock_value(self): + stock_list = self.get_stock_list() + value = 0 + for stock_id in stock_list: + value += self.position[stock_id]["amount"] * self.position[stock_id]["price"] + return value + + def calculate_value(self): + value = self.calculate_stock_value() + value += self.position["cash"] + return value + + def get_stock_list(self): + stock_list = list(set(self.position.keys()) - {"cash", "today_account_value"}) + return stock_list + + def get_stock_price(self, code): + return self.position[code]["price"] + + def get_stock_amount(self, code): + return self.position[code]["amount"] + + def get_stock_count(self, code): + return self.position[code]["count"] + + def get_stock_weight(self, code): + return self.position[code]["weight"] + + def get_cash(self): + return self.position["cash"] + + def get_stock_amount_dict(self): + """generate stock amount dict {stock_id : amount of stock} """ + d = {} + stock_list = self.get_stock_list() + for stock_code in stock_list: + d[stock_code] = self.get_stock_amount(code=stock_code) + return d + + def get_stock_weight_dict(self, only_stock=False): + """get_stock_weight_dict + generate stock weight fict {stock_id : value weight of stock in the position} + it is meaningful in the beginning or the end of each trade date + + :param only_stock: If only_stock=True, the weight of each stock in total stock will be returned + If only_stock=False, the weight of each stock in total assets(stock + cash) will be returned + """ + if only_stock: + position_value = self.calculate_stock_value() + else: + position_value = self.calculate_value() + d = {} + stock_list = self.get_stock_list() + for stock_code in stock_list: + d[stock_code] = self.position[stock_code]["amount"] * self.position[stock_code]["price"] / position_value + return d + + def add_count_all(self): + stock_list = self.get_stock_list() + for code in stock_list: + self.position[code]["count"] += 1 + + def update_weight_all(self): + weight_dict = self.get_stock_weight_dict() + for stock_code, weight in weight_dict.items(): + self.update_stock_weight(stock_code, weight) + + def save_position(self, path, last_trade_date): + path = pathlib.Path(path) + p = copy.deepcopy(self.position) + cash = pd.Series() + cash["init_cash"] = self.init_cash + cash["cash"] = p["cash"] + cash["today_account_value"] = p["today_account_value"] + cash["last_trade_date"] = str(last_trade_date.date()) if last_trade_date else None + del p["cash"] + del p["today_account_value"] + positions = pd.DataFrame.from_dict(p, orient="index") + with pd.ExcelWriter(path) as writer: + positions.to_excel(writer, sheet_name="position") + cash.to_excel(writer, sheet_name="info") + + def load_position(self, path): + """load position information from a file + should have format below + sheet "position" + columns: ['stock', 'count', 'amount', 'price', 'weight'] + 'count': , + 'amount': , + 'price': , + 'weight': , + + sheet "cash" + index: ['init_cash', 'cash', 'today_account_value'] + 'init_cash': , + 'cash': , + 'today_account_value': + """ + path = pathlib.Path(path) + positions = pd.read_excel(open(path, "rb"), sheet_name="position", index_col=0) + cash_record = pd.read_excel(open(path, "rb"), sheet_name="info", index_col=0) + positions = positions.to_dict(orient="index") + init_cash = cash_record.loc["init_cash"].values[0] + cash = cash_record.loc["cash"].values[0] + today_account_value = cash_record.loc["today_account_value"].values[0] + last_trade_date = cash_record.loc["last_trade_date"].values[0] + + # assign values + self.position = {} + self.init_cash = init_cash + self.position = positions + self.position["cash"] = cash + self.position["today_account_value"] = today_account_value + + return None if pd.isna(last_trade_date) else pd.Timestamp(last_trade_date) diff --git a/qlib/contrib/backtest/profit_attribution.py b/qlib/contrib/backtest/profit_attribution.py new file mode 100644 index 0000000000..d51fc450eb --- /dev/null +++ b/qlib/contrib/backtest/profit_attribution.py @@ -0,0 +1,324 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import numpy as np +import pandas as pd +from .position import Position +from ...data import D +from ...config import C +import datetime +from pathlib import Path + + +def get_benchmark_weight( + bench, + start_date=None, + end_date=None, + path=None, +): + """get_benchmark_weight + + get the stock weight distribution of the benchmark + + :param bench: + :param start_date: + :param end_date: + :param path: + + :return: The weight distribution of the the benchmark described by a pandas dataframe + Every row corresponds to a trading day. + Every column corresponds to a stock. + Every cell represents the strategy. + + """ + if not path: + path = Path(C.mount_path).expanduser() / "raw" / "AIndexMembers" / "weights.csv" + # TODO: the storage of weights should be implemented in a more elegent way + # TODO: The benchmark is not consistant with the filename in instruments. + bench_weight_df = pd.read_csv(path, usecols=["code", "date", "index", "weight"]) + bench_weight_df = bench_weight_df[bench_weight_df["index"] == bench] + bench_weight_df["date"] = pd.to_datetime(bench_weight_df["date"]) + if start_date is not None: + bench_weight_df = bench_weight_df[bench_weight_df.date >= start_date] + if end_date is not None: + bench_weight_df = bench_weight_df[bench_weight_df.date <= end_date] + bench_stock_weight = bench_weight_df.pivot_table(index="date", columns="code", values="weight") / 100.0 + return bench_stock_weight + + +def get_stock_weight_df(positions): + """get_stock_weight_df + :param positions: Given a positions from backtest result. + :return: A weight distribution for the position + """ + stock_weight = [] + index = [] + for date in sorted(positions.keys()): + pos = positions[date] + if isinstance(pos, dict): + pos = Position(position_dict=pos) + index.append(date) + stock_weight.append(pos.get_stock_weight_dict(only_stock=True)) + return pd.DataFrame(stock_weight, index=index) + + +def decompose_portofolio_weight(stock_weight_df, stock_group_df): + """decompose_portofolio_weight + + ''' + :param stock_weight_df: a pandas dataframe to describe the portofolio by weight. + every row corresponds to a day + every column corresponds to a stock. + Here is an example below. + code SH600004 SH600006 SH600017 SH600022 SH600026 SH600037 \ + date + 2016-01-05 0.001543 0.001570 0.002732 0.001320 0.003000 NaN + 2016-01-06 0.001538 0.001569 0.002770 0.001417 0.002945 NaN + .... + :param stock_group_df: a pandas dataframe to describe the stock group. + every row corresponds to a day + every column corresponds to a stock. + the value in the cell repreponds the group id. + Here is a example by for stock_group_df for industry. The value is the industry code + instrument SH600000 SH600004 SH600005 SH600006 SH600007 SH600008 \ + datetime + 2016-01-05 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + 2016-01-06 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + ... + :return: Two dict will be returned. The group_weight and the stock_weight_in_group. + The key is the group. The value is a Series or Dataframe to describe the weight of group or weight of stock + """ + all_group = np.unique(stock_group_df.values.flatten()) + all_group = all_group[~np.isnan(all_group)] + + group_weight = {} + stock_weight_in_group = {} + for group_key in all_group: + group_mask = stock_group_df == group_key + group_weight[group_key] = stock_weight_df[group_mask].sum(axis=1) + stock_weight_in_group[group_key] = stock_weight_df[group_mask].divide(group_weight[group_key], axis=0) + return group_weight, stock_weight_in_group + + +def decompose_portofolio(stock_weight_df, stock_group_df, stock_ret_df): + """ + :param stock_weight_df: a pandas dataframe to describe the portofolio by weight. + every row corresponds to a day + every column corresponds to a stock. + Here is an example below. + code SH600004 SH600006 SH600017 SH600022 SH600026 SH600037 \ + date + 2016-01-05 0.001543 0.001570 0.002732 0.001320 0.003000 NaN + 2016-01-06 0.001538 0.001569 0.002770 0.001417 0.002945 NaN + 2016-01-07 0.001555 0.001546 0.002772 0.001393 0.002904 NaN + 2016-01-08 0.001564 0.001527 0.002791 0.001506 0.002948 NaN + 2016-01-11 0.001597 0.001476 0.002738 0.001493 0.003043 NaN + .... + + :param stock_group_df: a pandas dataframe to describe the stock group. + every row corresponds to a day + every column corresponds to a stock. + the value in the cell repreponds the group id. + Here is a example by for stock_group_df for industry. The value is the industry code + instrument SH600000 SH600004 SH600005 SH600006 SH600007 SH600008 \ + datetime + 2016-01-05 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + 2016-01-06 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + 2016-01-07 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + 2016-01-08 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + 2016-01-11 801780.0 801170.0 801040.0 801880.0 801180.0 801160.0 + ... + + :param stock_ret_df: a pandas dataframe to describe the stock return. + every row corresponds to a day + every column corresponds to a stock. + the value in the cell repreponds the return of the group. + Here is a example by for stock_ret_df. + instrument SH600000 SH600004 SH600005 SH600006 SH600007 SH600008 \ + datetime + 2016-01-05 0.007795 0.022070 0.099099 0.024707 0.009473 0.016216 + 2016-01-06 -0.032597 -0.075205 -0.098361 -0.098985 -0.099707 -0.098936 + 2016-01-07 -0.001142 0.022544 0.100000 0.004225 0.000651 0.047226 + 2016-01-08 -0.025157 -0.047244 -0.038567 -0.098177 -0.099609 -0.074408 + 2016-01-11 0.023460 0.004959 -0.034384 0.018663 0.014461 0.010962 + ... + + :return: It will decompose the portofolio to the group weight and group return. + """ + all_group = np.unique(stock_group_df.values.flatten()) + all_group = all_group[~np.isnan(all_group)] + + group_weight, stock_weight_in_group = decompose_portofolio_weight(stock_weight_df, stock_group_df) + + group_ret = {} + for group_key in stock_weight_in_group: + stock_weight_in_group_start_date = min(stock_weight_in_group[group_key].index) + stock_weight_in_group_end_date = max(stock_weight_in_group[group_key].index) + + temp_stock_ret_df = stock_ret_df[ + (stock_ret_df.index >= stock_weight_in_group_start_date) + & (stock_ret_df.index <= stock_weight_in_group_end_date) + ] + + group_ret[group_key] = (temp_stock_ret_df * stock_weight_in_group[group_key]).sum(axis=1) + # If no weight is assigned, then the return of group will be np.nan + group_ret[group_key][group_weight[group_key] == 0.0] = np.nan + + group_weight_df = pd.DataFrame(group_weight) + group_ret_df = pd.DataFrame(group_ret) + return group_weight_df, group_ret_df + + +def get_daily_bin_group(bench_values, stock_values, group_n): + """get_daily_bin_group + Group the values of the stocks of benchmark into several bins in a day. + Put the stocks into these bins. + + :param bench_values: A series contains the value of stocks in benchmark. + The index is the stock code. + :param stock_values: A series contains the value of stocks of your portofolio + The index is the stock code. + :param group_n: Bins will be produced + + :return: A series with the same size and index as the stock_value. + The value in the series is the group id of the bins. + The No.1 bin contains the biggest values. + """ + stock_group = stock_values.copy() + + # get the bin split points based on the daily proportion of benchmark + split_points = np.percentile(bench_values[~bench_values.isna()], np.linspace(0, 100, group_n + 1)) + # Modify the biggest uppper bound and smallest lowerbound + split_points[0], split_points[-1] = -np.inf, np.inf + for i, (lb, up) in enumerate(zip(split_points, split_points[1:])): + stock_group.loc[stock_values[(stock_values >= lb) & (stock_values < up)].index] = group_n - i + return stock_group + + +def get_stock_group(stock_group_field_df, bench_stock_weight_df, group_method, group_n=None): + if group_method == "category": + # use the value of the benchmark as the category + return stock_group_field_df + elif group_method == "bins": + assert group_n is not None + # place the values into `group_n` fields. + # Each bin corresponds to a category. + new_stock_group_df = stock_group_field_df.copy().loc[ + bench_stock_weight_df.index.min() : bench_stock_weight_df.index.max() + ] + for idx, row in (~bench_stock_weight_df.isna()).iterrows(): + bench_values = stock_group_field_df.loc[idx, row[row].index] + new_stock_group_df.loc[idx] = get_daily_bin_group( + bench_values, stock_group_field_df.loc[idx], group_n=group_n + ) + return new_stock_group_df + + +def brinson_pa( + positions, + bench="SH000905", + group_field="industry", + group_method="category", + group_n=None, + deal_price="vwap", +): + """brinson profit attribution + + :param positions: The position produced by the backtest class + :param bench: The benchmark for comparing. TODO: if no benchmark is set, the equal-weighted is used. + :param group_field: The field used to set the group for assets allocation. + `industry` and `market_value` is often used. + :param group_method: 'category' or 'bins'. The method used to set the group for asstes allocation + `bin` will split the value into `group_n` bins and each bins represents a group + :param group_n: . Only used when group_method == 'bins'. + + :return: + A dataframe with three columns: RAA(excess Return of Assets Allocation), RSS(excess Return of Stock Selectino), RTotal(Total excess Return) + Every row corresponds to a trading day, the value corresponds to the next return for this trading day + The middle info of brinson profit attribution + """ + # group_method will decide how to group the group_field. + dates = sorted(positions.keys()) + + start_date, end_date = min(dates), max(dates) + + bench_stock_weight = get_benchmark_weight(bench, start_date, end_date) + + # The attributes for allocation will not + if not group_field.startswith("$"): + group_field = "$" + group_field + if not deal_price.startswith("$"): + deal_price = "$" + deal_price + + # FIXME: In current version. Some attributes(such as market_value) of some + # suspend stock is NAN. So we have to get more date to forward fill the NAN + shift_start_date = start_date - datetime.timedelta(days=250) + instruments = D.list_instruments( + D.instruments(market="all"), + start_time=shift_start_date, + end_time=end_date, + as_list=True, + ) + stock_df = D.features( + instruments, + [group_field, deal_price], + start_time=shift_start_date, + end_time=end_date, + freq="day", + ) + stock_df.columns = [group_field, "deal_price"] + + stock_group_field = stock_df[group_field].unstack().T + # FIXME: some attributes of some suspend stock is NAN. + stock_group_field = stock_group_field.fillna(method="ffill") + stock_group_field = stock_group_field.loc[start_date:end_date] + + stock_group = get_stock_group(stock_group_field, bench_stock_weight, group_method, group_n) + + deal_price_df = stock_df["deal_price"].unstack().T + deal_price_df = deal_price_df.fillna(method="ffill") + + # NOTE: + # The return will be slightly different from the of the return in the report. + # Here the position are adjusted at the end of the trading day with close + stock_ret = (deal_price_df - deal_price_df.shift(1)) / deal_price_df.shift(1) + stock_ret = stock_ret.shift(-1).loc[start_date:end_date] + + port_stock_weight_df = get_stock_weight_df(positions) + + # decomposing the portofolio + port_group_weight_df, port_group_ret_df = decompose_portofolio(port_stock_weight_df, stock_group, stock_ret) + bench_group_weight_df, bench_group_ret_df = decompose_portofolio(bench_stock_weight, stock_group, stock_ret) + + # if the group return of the portofolio is NaN, replace it with the market + # value + mod_port_group_ret_df = port_group_ret_df.copy() + mod_port_group_ret_df[mod_port_group_ret_df.isna()] = bench_group_ret_df + + Q1 = (bench_group_weight_df * bench_group_ret_df).sum(axis=1) + Q2 = (port_group_weight_df * bench_group_ret_df).sum(axis=1) + Q3 = (bench_group_weight_df * mod_port_group_ret_df).sum(axis=1) + Q4 = (port_group_weight_df * mod_port_group_ret_df).sum(axis=1) + + return ( + pd.DataFrame( + { + "RAA": Q2 - Q1, # The excess profit from the assets allocation + "RSS": Q3 - Q1, # The excess profit from the stocks selection + # The excess profit from the interaction of assets allocation and stocks selection + "RIN": Q4 - Q3 - Q2 + Q1, + "RTotal": Q4 - Q1, # The totoal excess profit + } + ), + { + "port_group_ret": port_group_ret_df, + "port_group_weight": port_group_weight_df, + "bench_group_ret": bench_group_ret_df, + "bench_group_weight": bench_group_weight_df, + "stock_group": stock_group, + "bench_stock_weight": bench_stock_weight, + "port_stock_weight": port_stock_weight_df, + "stock_ret": stock_ret, + }, + ) diff --git a/qlib/contrib/backtest/readme.md b/qlib/contrib/backtest/readme.md new file mode 100644 index 0000000000..578b248cad --- /dev/null +++ b/qlib/contrib/backtest/readme.md @@ -0,0 +1,184 @@ +# backtest + +modules + +simulate true trading environment + + +- Order +- Exchange +- Position +- Account +- Report + +backtest demo + + auto-update cross different modules from trade order + +strategy framework + +## Order + +trade order +- Order.SELL: sell order, default 0 +- Order.BUY: buy order, default 1 +- direction: `Order.SELL` for sell, `Order.BUY` for buy +- sotck_id +- amount +- trade_date : pd.Timestamp + +## Exchange + +the stock exanchge, deal the trade order, provide stock market information + +### Exchange Property +- trade_dates : list of pd.Timestamp +- codes : list stock_id list +- deal_price : str, 'close', 'open', 'vwap' +- quote : dataframe by D.features, trading data cache, default None +- limit_threshold : float, 0.1 for example, default None +- open_cost : cost rate for open, default 0.0015 +- close_cost : cost rate for close, default 0.0025 +- min_cost : min transaction cost, default 5 +- trade_unit : trade unit, 100 for China A market + +### Exchange Function +- check_stock_limit : buy limit, True for cannot trade, limit_threshold +- check_stock_suspended : check if suspended +- check_order : check is executable, include limit and suspend +- deal_order : (order, trade_account=None, position=None),if the order id executable, return trade_val, trade_cost, trade_price +- get price information realated, in this way need to check suspend first, (stock_id, trade_date) + - get_close + - get_deal_price +- generate_amount_position_from_weight_position : for strategy use +- generate_order_for_target_amount_position : generate order_list from target_position ( {stock_id : amount} ) and current_position({stock_id : amount}) +- calculate_amount_position_value : value +- compare function : compare position dict + +## Position + +state of asset + +including cash and stock + +for each stock, contain +- count : holding days +- amount : stock amount +- price : stock price + +### Functions: +- update_order + - buy_stock + - sell_stock +- update postion information + - cash + - price + - amount + - count +- calculate value : use price in postion to calculate value + - calculate_stock_value : without cash + - calculate_value : with cash +- get information + - get_stock_list + - get_stock_price + - get_stock_amount + - get_stock_count + - get_cash +- add_count_all : add 1 to all stock count +- transform + - get_stock_amount_dict + - get_stock_weight_dict : use price in postion to calculate value + +## Report + +daily report for account + +- account postion value for each trade date +- daily return rate for each trade date +- turnover for each trade date +- trade cost for each trade date +- value for each trade date +- cash +- latest_report_date : pd.TimeStamp + +### Function +- is_empty +- get_latest_date +- get_latest_account_value +- update_report_record +- generate_report_dataframe + +## Account + +state for the stock_trader + +- curent position : Position() class +- trading related + - return + - turnover + - cost + - earning +- postion value + - val + - cash +- report : Report() +- today + +### Funtions + +- get + - get_positions + - get_cash +- init_state +- update_order(order, trade_val, cost) : update current postion and trading metrix after the order is dealed +- update_daily_end() : when the end of trade date, summarize today + - update rtn , from order's view + - update price for each stock still in current position + - update value for this account + - update earning (2nd view of return , position' view) + - update holding day, count of stock + - update position hitory + - update report + + +## backtest_demo + +trade strategy: + + parameters : + topk : int, select topk stocks + buffer_margin : size of buffer margin + + description : + hold topk stocks at each trade date + when adjust position + the score model will generate scores for each stock + if the stock of current position not in top buffer_margin score, sell them out; + then equally buy recommended stocks + + the previous version of this strategy is in evaluate.py + + demo.py accomplishes same trading strategy with modules of Order, Exchange, Position, Report and Account + + test_strategy_demo.py did the consistency check between evaluate.py and demo.py + + strategy.py provide a strategy framework to do the backtest + +## Strategy + +strategy framework + + strategy will generate orders if given pred_scores and market environment information + there are two stages: + 1. generate target position + 2. generate order from target postion and current position + +document for the framework + + the document shows some examples to accomplish those two stages + +two strategy demo: +- Strategy_amount_demo +- Strategy_weight_demo + +backtest_demo with using strategy diff --git a/qlib/contrib/backtest/report.py b/qlib/contrib/backtest/report.py new file mode 100644 index 0000000000..beb9759d0d --- /dev/null +++ b/qlib/contrib/backtest/report.py @@ -0,0 +1,106 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from collections import OrderedDict +import pandas as pd +import pathlib + + +class Report: + # daily report of the account + # contain those followings: returns, costs turnovers, accounts, cash, bench, value + # update report + def __init__(self): + self.init_vars() + + def init_vars(self): + self.accounts = OrderedDict() # account postion value for each trade date + self.returns = OrderedDict() # daily return rate for each trade date + self.turnovers = OrderedDict() # turnover for each trade date + self.costs = OrderedDict() # trade cost for each trade date + self.values = OrderedDict() # value for each trade date + self.cashes = OrderedDict() + self.latest_report_date = None # pd.TimeStamp + + def is_empty(self): + return len(self.accounts) == 0 + + def get_latest_date(self): + return self.latest_report_date + + def get_latest_account_value(self): + return self.accounts[self.latest_report_date] + + def update_report_record( + self, + trade_date=None, + account_value=None, + cash=None, + return_rate=None, + turnover_rate=None, + cost_rate=None, + stock_value=None, + ): + # check data + if None in [ + trade_date, + account_value, + cash, + return_rate, + turnover_rate, + cost_rate, + stock_value, + ]: + raise ValueError( + "None in [trade_date, account_value, cash, return_rate, turnover_rate, cost_rate, stock_value]" + ) + # update report data + self.accounts[trade_date] = account_value + self.returns[trade_date] = return_rate + self.turnovers[trade_date] = turnover_rate + self.costs[trade_date] = cost_rate + self.values[trade_date] = stock_value + self.cashes[trade_date] = cash + # update latest_report_date + self.latest_report_date = trade_date + # finish daily report update + + def generate_report_dataframe(self): + report = pd.DataFrame() + report["account"] = pd.Series(self.accounts) + report["return"] = pd.Series(self.returns) + report["turnover"] = pd.Series(self.turnovers) + report["cost"] = pd.Series(self.costs) + report["value"] = pd.Series(self.values) + report["cash"] = pd.Series(self.cashes) + report.index.name = "date" + return report + + def save_report(self, path): + r = self.generate_report_dataframe() + r.to_csv(path) + + def load_report(self, path): + """load report from a file + should have format like + columns = ['account', 'return', 'turnover', 'cost', 'value', 'cash'] + :param + path: str/ pathlib.Path() + """ + path = pathlib.Path(path) + r = pd.read_csv(open(path, "rb"), index_col=0) + r.index = pd.DatetimeIndex(r.index) + + index = r.index + self.init_vars() + for date in index: + self.update_report_record( + trade_date=date, + account_value=r.loc[date]["account"], + cash=r.loc[date]["cash"], + return_rate=r.loc[date]["return"], + turnover_rate=r.loc[date]["turnover"], + cost_rate=r.loc[date]["cost"], + stock_value=r.loc[date]["value"], + ) diff --git a/qlib/contrib/estimator/__init__.py b/qlib/contrib/estimator/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/qlib/contrib/estimator/config.py b/qlib/contrib/estimator/config.py new file mode 100644 index 0000000000..2ae8d4a0d4 --- /dev/null +++ b/qlib/contrib/estimator/config.py @@ -0,0 +1,176 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import yaml +import copy +import os +import json +import tempfile +from pathlib import Path +from ...config import REG_CN + + +class EstimatorConfigManager(object): + def __init__(self, config_path): + + if not config_path: + raise ValueError("Config path is invalid.") + self.config_path = config_path + + with open(config_path) as fp: + config = yaml.load(fp, Loader=yaml.FullLoader) + self.config = copy.deepcopy(config) + + self.ex_config = ExperimentConfig(config.get("experiment", dict()), self) + self.data_config = DataConfig(config.get("data", dict()), self) + self.model_config = ModelConfig(config.get("model", dict()), self) + self.trainer_config = TrainerConfig(config.get("trainer", dict()), self) + self.strategy_config = StrategyConfig(config.get("strategy", dict()), self) + self.backtest_config = BacktestConfig(config.get("backtest", dict()), self) + self.qlib_data_config = QlibDataConfig(config.get("qlib_data", dict()), self) + + # If the start_date and end_date are not given in data_config, they will be referred from the trainer_config. + handler_start_date = self.data_config.handler_parameters.get("start_date", None) + handler_end_date = self.data_config.handler_parameters.get("end_date", None) + if handler_start_date is None: + self.data_config.handler_parameters["start_date"] = self.trainer_config.parameters["train_start_date"] + if handler_end_date is None: + self.data_config.handler_parameters["end_date"] = self.trainer_config.parameters["test_end_date"] + + +class ExperimentConfig(object): + TRAIN_MODE = "train" + TEST_MODE = "test" + + OBSERVER_FILE_STORAGE = "file_storage" + OBSERVER_MONGO = "mongo" + + def __init__(self, config, CONFIG_MANAGER): + """__init__ + + :param config: The config dict for experiment + :param CONFIG_MANAGER: The estimator config manager + """ + self.name = config.get("name", "test_experiment") + # The dir of the result of all the experiments + self.global_dir = config.get("dir", os.path.dirname(CONFIG_MANAGER.config_path)) + # The dir of the result of current experiment + self.ex_dir = os.path.join(self.global_dir, self.name) + if not os.path.exists(self.ex_dir): + os.makedirs(self.ex_dir) + self.tmp_run_dir = tempfile.mkdtemp(dir=self.ex_dir) + self.mode = config.get("mode", ExperimentConfig.TRAIN_MODE) + self.sacred_dir = os.path.join(self.ex_dir, "sacred") + self.observer_type = config.get("observer_type", ExperimentConfig.OBSERVER_FILE_STORAGE) + self.mongo_url = config.get("mongo_url", None) + self.db_name = config.get("db_name", None) + self.finetune = config.get("finetune", False) + + # The path of the experiment id of the experiment + self.exp_info_path = config.get("exp_info_path", os.path.join(self.ex_dir, "exp_info.json")) + exp_info_dir = Path(self.exp_info_path).parent + exp_info_dir.mkdir(parents=True, exist_ok=True) + + # Test mode config + loader_args = config.get("loader", dict()) + if self.mode == ExperimentConfig.TEST_MODE or self.finetune: + loader_exp_info_path = loader_args.get("exp_info_path", None) + self.loader_model_index = loader_args.get("model_index", None) + if (loader_exp_info_path is not None) and (os.path.exists(loader_exp_info_path)): + with open(loader_exp_info_path) as fp: + loader_dict = json.load(fp) + for k, v in loader_dict.items(): + setattr(self, "loader_{}".format(k), v) + # Check loader experiment id + assert hasattr(self, "loader_id"), "If mode is test or finetune is True, loader must contain id." + else: + self.loader_id = loader_args.get("id", None) + if self.loader_id is None: + raise ValueError("If mode is test or finetune is True, loader must contain id.") + + self.loader_observer_type = loader_args.get("observer_type", self.observer_type) + self.loader_name = loader_args.get("name", self.name) + self.loader_dir = loader_args.get("dir", self.global_dir) + + self.loader_mongo_url = loader_args.get("mongo_url", self.mongo_url) + self.loader_db_name = loader_args.get("db_name", self.db_name) + + +class DataConfig(object): + def __init__(self, config, CONFIG_MANAGER): + """__init__ + + :param config: The config dict for data + :param CONFIG_MANAGER: The estimator config manager + """ + self.handler_module_path = config.get("module_path", "qlib.contrib.estimator.handler") + self.handler_class = config.get("class", "ALPHA360") + self.handler_parameters = config.get("args", dict()) + self.handler_filter = config.get("filter", dict()) + # Update provider uri. + + +class ModelConfig(object): + def __init__(self, config, CONFIG_MANAGER): + """__init__ + + :param config: The config dict for model + :param CONFIG_MANAGER: The estimator config manager + """ + self.model_class = config.get("class", "Model") + self.model_module_path = config.get("module_path", "qlib.contrib.model") + self.save_dir = os.path.join(CONFIG_MANAGER.ex_config.tmp_run_dir, "model") + self.save_path = config.get("save_path", os.path.join(self.save_dir, "model.bin")) + self.parameters = config.get("args", dict()) + # Make dir if need. + if not os.path.exists(self.save_dir): + os.makedirs(self.save_dir) + + +class TrainerConfig(object): + def __init__(self, config, CONFIG_MANAGER): + """__init__ + + :param config: The config dict for trainer + :param CONFIG_MANAGER: The estimator config manager + """ + self.trainer_class = config.get("class", "StaticTrainer") + self.trainer_module_path = config.get("module_path", "qlib.contrib.estimator.trainer") + self.parameters = config.get("args", dict()) + + +class StrategyConfig(object): + def __init__(self, config, CONFIG_MANAGER): + """__init__ + + :param config: The config dict for strategy + :param CONFIG_MANAGER: The estimator config manager + """ + self.strategy_class = config.get("class", "TopkAmountStrategy") + self.strategy_module_path = config.get("module_path", "qlib.contrib.strategy.strategy") + self.parameters = config.get("args", dict()) + + +class BacktestConfig(object): + def __init__(self, config, CONFIG_MANAGE): + """__init__ + + :param config: The config dict for strategy + :param CONFIG_MANAGE: The estimator config manager + """ + self.normal_backtest_parameters = config.get("normal_backtest_args", dict()) + self.long_short_backtest_parameters = config.get("long_short_backtest_args", dict()) + + +class QlibDataConfig(object): + def __init__(self, config, CONFIG_MANAGE): + """__init__ + + :param config: The config dict for qlib_client + :param CONFIG_MANAGE: The estimator config manager + """ + self.provider_uri = config.pop("provider_uri", "~/.qlib/qlib_data/cn_data") + self.auto_mount = config.pop("auto_mount", False) + self.mount_path = config.pop("mount_path", "~/.qlib/qlib_data/cn_data") + self.region = config.pop("region", REG_CN) + self.args = config diff --git a/qlib/contrib/estimator/estimator.py b/qlib/contrib/estimator/estimator.py new file mode 100644 index 0000000000..f41a3383c4 --- /dev/null +++ b/qlib/contrib/estimator/estimator.py @@ -0,0 +1,321 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# coding=utf-8 + +import pandas as pd + +import os +import copy +import json +import yaml +import pickle + +import qlib +from ..evaluate import risk_analysis +from ..evaluate import backtest as normal_backtest +from ..evaluate import long_short_backtest +from .config import ExperimentConfig +from .fetcher import create_fetcher_with_config + +from ...log import get_module_logger, TimeInspector +from ...utils import get_module_by_module_path, compare_dict_value + + +class Estimator(object): + def __init__(self, config_manager, sacred_ex): + + # Set logger. + self.logger = get_module_logger("Estimator") + + # 1. Set config manager. + self.config_manager = config_manager + + # 2. Set configs. + self.ex_config = config_manager.ex_config + self.data_config = config_manager.data_config + self.model_config = config_manager.model_config + self.trainer_config = config_manager.trainer_config + self.strategy_config = config_manager.strategy_config + self.backtest_config = config_manager.backtest_config + + # If experiment.mode is test or experiment.finetune is True, load the experimental results in the loader + if self.ex_config.mode == self.ex_config.TEST_MODE or self.ex_config.finetune: + self.compare_config_with_config_manger(self.config_manager) + + # 3. Set sacred_experiment. + self.ex = sacred_ex + + # 4. Init data handler. + self.data_handler = None + self._init_data_handler() + + # 5. Init trainer. + self.trainer = None + self._init_trainer() + + # 6. Init strategy. + self.strategy = None + self._init_strategy() + + def _init_data_handler(self): + handler_module = get_module_by_module_path(self.data_config.handler_module_path) + + # Set market + market = self.data_config.handler_filter.get("market", None) + if market is None: + if "market" in self.data_config.handler_parameters: + self.logger.warning( + "Warning: The market in data.args section is deprecated. " + "It only works when market is not set in data.filter section. " + "It will be overridden by market in the data.filter section." + ) + market = self.data_config.handler_parameters["market"] + else: + market = "csi500" + + self.data_config.handler_parameters["market"] = market + + data_filter_list = [] + handler_filters = self.data_config.handler_filter.get("filter_pipeline", list()) + for h_filter in handler_filters: + filter_module_path = h_filter.get("module_path", "qlib.data.filter") + filter_class_name = h_filter.get("class", "") + filter_parameters = h_filter.get("args", {}) + filter_module = get_module_by_module_path(filter_module_path) + filter_class = getattr(filter_module, filter_class_name) + data_filter = filter_class(**filter_parameters) + data_filter_list.append(data_filter) + + self.data_config.handler_parameters["data_filter_list"] = data_filter_list + handler_class = getattr(handler_module, self.data_config.handler_class) + self.data_handler = handler_class(**self.data_config.handler_parameters) + + def _init_trainer(self): + + model_module = get_module_by_module_path(self.model_config.model_module_path) + trainer_module = get_module_by_module_path(self.trainer_config.trainer_module_path) + model_class = getattr(model_module, self.model_config.model_class) + trainer_class = getattr(trainer_module, self.trainer_config.trainer_class) + + self.trainer = trainer_class( + model_class, + self.model_config.save_path, + self.model_config.parameters, + self.data_handler, + self.ex, + **self.trainer_config.parameters + ) + + def _init_strategy(self): + + module = get_module_by_module_path(self.strategy_config.strategy_module_path) + strategy_class = getattr(module, self.strategy_config.strategy_class) + self.strategy = strategy_class(**self.strategy_config.parameters) + + def run(self): + if self.ex_config.mode == ExperimentConfig.TRAIN_MODE: + self.trainer.train() + elif self.ex_config.mode == ExperimentConfig.TEST_MODE: + self.trainer.load() + else: + raise ValueError("unexpected mode: %s" % self.ex_config.mode) + analysis = self.backtest() + self.logger.info(analysis) + self.logger.info( + "experiment id: {}, experiment name: {}".format(self.ex.experiment.current_run._id, self.ex_config.name) + ) + + # Remove temp dir + # shutil.rmtree(self.ex_config.tmp_run_dir) + + def backtest(self): + TimeInspector.set_time_mark() + # 1. Get pred and prediction score of model(s). + pred = self.trainer.get_test_score() + performance = self.trainer.get_test_performance() + # 2. Normal Backtest. + report_normal, positions_normal = self._normal_backtest(pred) + # 3. Long-Short Backtest. + long_short_reports = self._long_short_backtest(pred) + # 4. Analyze + analysis_df = self._analyze(report_normal, long_short_reports) + # 5. Save. + self._save_backtest_result( + pred, + analysis_df, + positions_normal, + report_normal, + long_short_reports, + performance, + ) + return analysis_df + + def _normal_backtest(self, pred): + TimeInspector.set_time_mark() + if "account" not in self.backtest_config.normal_backtest_parameters: + if "account" in self.strategy_config.parameters: + self.logger.warning( + "Warning: The account in strategy section is deprecated. " + "It only works when account is not set in backtest section. " + "It will be overridden by account in the backtest section." + ) + self.backtest_config.normal_backtest_parameters["account"] = self.strategy_config.parameters["account"] + report_normal, positions_normal = normal_backtest( + pred, strategy=self.strategy, **self.backtest_config.normal_backtest_parameters + ) + TimeInspector.log_cost_time("Finished normal backtest.") + return report_normal, positions_normal + + def _long_short_backtest(self, pred): + TimeInspector.set_time_mark() + long_short_reports = long_short_backtest(pred, **self.backtest_config.long_short_backtest_parameters) + TimeInspector.log_cost_time("Finished long-short backtest.") + return long_short_reports + + @staticmethod + def _analyze(report_normal, long_short_reports): + TimeInspector.set_time_mark() + + analysis = dict() + analysis["pred_long"] = risk_analysis(long_short_reports["long"]) + analysis["pred_short"] = risk_analysis(long_short_reports["short"]) + analysis["pred_long_short"] = risk_analysis(long_short_reports["long_short"]) + analysis["sub_bench"] = risk_analysis(report_normal["return"] - report_normal["bench"]) + analysis["sub_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"] - report_normal["cost"]) + analysis_df = pd.concat(analysis) # type: pd.DataFrame + TimeInspector.log_cost_time( + "Finished generating analysis," " average turnover is: {0:.4f}.".format(report_normal["turnover"].mean()) + ) + return analysis_df + + def _save_backtest_result(self, pred, analysis, positions, report_normal, long_short_reports, performance): + # 1. Result dir. + result_dir = os.path.join(self.config_manager.ex_config.tmp_run_dir, "result") + if not os.path.exists(result_dir): + os.makedirs(result_dir) + + self.ex.add_info( + "task_config", + json.loads(json.dumps(self.config_manager.config, default=str)), + ) + + # 2. Pred. + TimeInspector.set_time_mark() + pred_pkl_path = os.path.join(result_dir, "pred.pkl") + pred.to_pickle(pred_pkl_path) + self.ex.add_artifact(pred_pkl_path) + TimeInspector.log_cost_time("Finished saving pred.pkl to: {}".format(pred_pkl_path)) + + # 3. Ana. + TimeInspector.set_time_mark() + analysis_pkl_path = os.path.join(result_dir, "analysis.pkl") + analysis.to_pickle(analysis_pkl_path) + self.ex.add_artifact(analysis_pkl_path) + TimeInspector.log_cost_time("Finished saving analysis.pkl to: {}".format(analysis_pkl_path)) + + # 4. Pos. + TimeInspector.set_time_mark() + positions_pkl_path = os.path.join(result_dir, "positions.pkl") + with open(positions_pkl_path, "wb") as fp: + pickle.dump(positions, fp) + self.ex.add_artifact(positions_pkl_path) + TimeInspector.log_cost_time("Finished saving positions.pkl to: {}".format(positions_pkl_path)) + + # 5. Report normal. + TimeInspector.set_time_mark() + report_normal_pkl_path = os.path.join(result_dir, "report_normal.pkl") + report_normal.to_pickle(report_normal_pkl_path) + self.ex.add_artifact(report_normal_pkl_path) + TimeInspector.log_cost_time("Finished saving report_normal.pkl to: {}".format(report_normal_pkl_path)) + + # 6. Report long short. + for k, name in zip( + ["long", "short", "long_short"], + ["report_long.pkl", "report_short.pkl", "report_long_short.pkl"], + ): + TimeInspector.set_time_mark() + pkl_path = os.path.join(result_dir, name) + long_short_reports[k].to_pickle(pkl_path) + self.ex.add_artifact(pkl_path) + TimeInspector.log_cost_time("Finished saving {} to: {}".format(name, pkl_path)) + + # 7. Origin test label. + TimeInspector.set_time_mark() + label_pkl_path = os.path.join(result_dir, "label.pkl") + self.data_handler.get_origin_test_label_with_date( + self.trainer_config.parameters["test_start_date"], + self.trainer_config.parameters["test_end_date"], + ).to_pickle(label_pkl_path) + self.ex.add_artifact(label_pkl_path) + TimeInspector.log_cost_time("Finished saving label.pkl to: {}".format(label_pkl_path)) + + # 8. Experiment info, save the model(s) performance here. + TimeInspector.set_time_mark() + cur_ex_id = self.ex.experiment.current_run._id + exp_info = { + "id": cur_ex_id, + "name": self.ex_config.name, + "performance": performance, + "observer_type": self.ex_config.observer_type, + } + + if self.ex_config.observer_type == ExperimentConfig.OBSERVER_MONGO: + exp_info.update( + { + "mongo_url": self.ex_config.mongo_url, + "db_name": self.ex_config.db_name, + } + ) + else: + exp_info.update({"dir": self.ex_config.global_dir}) + + with open(self.ex_config.exp_info_path, "w") as fp: + json.dump(exp_info, fp, indent=4, sort_keys=True) + self.ex.add_artifact(self.ex_config.exp_info_path) + TimeInspector.log_cost_time("Finished saving ex_info to: {}".format(self.ex_config.exp_info_path)) + + @staticmethod + def compare_config_with_config_manger(config_manager): + """Compare loader model args and current config with ConfigManage + + :param config_manager: ConfigManager + :return: + """ + fetcher = create_fetcher_with_config(config_manager, load_form_loader=True) + loader_mode_config = fetcher.get_experiment( + exp_name=config_manager.ex_config.loader_name, + exp_id=config_manager.ex_config.loader_id, + fields=["task_config"], + )["task_config"] + with open(config_manager.config_path) as fp: + current_config = yaml.load(fp.read()) + current_config = json.loads(json.dumps(current_config, default=str)) + + logger = get_module_logger("Estimator") + + loader_mode_config = copy.deepcopy(loader_mode_config) + current_config = copy.deepcopy(current_config) + + # Require test_mode_config.test_start_date <= current_config.test_start_date + loader_trainer_args = loader_mode_config.get("trainer", {}).get("args", {}) + cur_trainer_args = current_config.get("trainer", {}).get("args", {}) + loader_start_date = loader_trainer_args.pop("test_start_date") + cur_test_start_date = cur_trainer_args.pop("test_start_date") + assert ( + loader_start_date <= cur_test_start_date + ), "Require: loader_mode_config.test_start_date <= current_config.test_start_date" + + # TODO: For the user's own extended `Trainer`, the support is not very good + if "RollingTrainer" == current_config.get("trainer", {}).get("class", None): + loader_period = loader_trainer_args.pop("rolling_period") + cur_period = cur_trainer_args.pop("rolling_period") + assert ( + loader_period == cur_period + ), "Require: loader_mode_config.rolling_period == current_config.rolling_period" + + compare_section = ["trainer", "model", "data"] + for section in compare_section: + changes = compare_dict_value(loader_mode_config.get(section, {}), current_config.get(section, {})) + if changes: + logger.warning("Warning: Loader mode config and current config, `{}` are different:\n".format(section)) diff --git a/qlib/contrib/estimator/fetcher.py b/qlib/contrib/estimator/fetcher.py new file mode 100644 index 0000000000..920c258c3a --- /dev/null +++ b/qlib/contrib/estimator/fetcher.py @@ -0,0 +1,291 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# coding=utf-8 + +import copy +import json +import yaml +import pickle +import gridfs +import pymongo +from pathlib import Path +from abc import abstractmethod + +from .config import EstimatorConfigManager, ExperimentConfig + + +class Fetcher(object): + """Sacred Experiments Fetcher""" + + @abstractmethod + def _get_experiment(self, exp_name, exp_id): + """Get experiment basic info with experiment and experiment id + + :param exp_name: experiment name + :param exp_id: experiment id + :return: dict + Must contain keys: _id, experiment, info, stop_time. + Here is an example below for FileFetcher. + exp = { + '_id': exp_id, # experiment id + 'path': path, # experiment result path + 'experiment': {'name': exp_name}, # experiment + 'info': info, # experiment config info + 'stop_time': run.get('stop_time', None) # The time the experiment ended + } + + """ + pass + + @abstractmethod + def _list_experiments(self, exp_name=None): + """Get experiment basic info list with experiment name + + :param exp_name: experiment name + :return: list + + """ + pass + + @abstractmethod + def _iter_artifacts(self, experiment): + """Get information about the data in the experiment results + + :param experiment: `self._get_experiment` method result + :return: iterable + Each element contains two elements. + first element : data name + second element : data uri + """ + pass + + @abstractmethod + def _load_data(self, uri): + """Load data with uri + + :param uri: data uri + :return: bytes + """ + pass + + @staticmethod + def model_dict_to_buffer_list(model_dict): + """ + + :param model_dict: + :return: + """ + model_list = [] + is_static_model = False + if len(model_dict) == 1 and list(model_dict.keys())[0] == "model.bin": + is_static_model = True + model_list.append(list(model_dict.values())[0]) + else: + sep = "model.bin_" + model_ids = list(map(lambda x: int(x.split(sep)[1]), model_dict.keys())) + min_id, max_id = min(model_ids), max(model_ids) + for i in range(min_id, max_id + 1): + model_key = sep + str(i) + model = model_dict.get(model_key, None) + if model is None: + print( + "WARNING: In Fetcher, {} is missing when the get model is in the get_experiment function.".format( + model_key + ) + ) + break + else: + model_list.append(model) + + if is_static_model: + return model_list[0] + + return model_list + + def get_experiments(self, exp_name=None): + """Get experiments with name. + + :param exp_name: str + If `exp_name` is set to None, then all experiments will return. + :return: dict + Experiments info dict(Including experiment id and task_config to run the + experiment). Here is an example below. + { + 'a_experiment': [ + { + 'id': '1', + 'task_config': {...} + }, + ... + ] + ... + } + """ + res = dict() + for ex in self._list_experiments(exp_name): + name = ex["experiment"]["name"] + tmp = { + "id": ex["_id"], + "task_config": ex["info"].get("task_config", {}), + "ex_run_stop_time": ex.get("stop_time", None), + } + res.setdefault(name, []).append(tmp) + return res + + def get_experiment(self, exp_name, exp_id, fields=None): + """ + + :param exp_name: + :param exp_id: + :param fields: list + Experiment result fields, if fields is None, will get all fields. + Currently supported fields: + ['model', 'analysis', 'positions', 'report_normal', 'report_long', 'report_short', + 'report_long_short', 'pred', 'task_config', 'label'] + :return: dict + """ + fields = copy.copy(fields) + ex = self._get_experiment(exp_name, exp_id) + results = dict() + model_dict = dict() + for name, uri in self._iter_artifacts(ex): + # When saving, use `sacred.experiment.add_artifact(filename)` , so `name` is os.path.basename(filename) + prefix = name.split(".")[0] + if fields and prefix not in fields: + continue + data = self._load_data(uri) + if prefix == "model": + model_dict[name] = data + else: + results[prefix] = pickle.loads(data) + # Sort model + if model_dict: + results["model"] = self.model_dict_to_buffer_list(model_dict) + + # Info + results["task_config"] = ex["info"].get("task_config", {}) + return results + + def estimator_config_to_dict(self, exp_name, exp_id): + """Save configuration to file + + :param exp_name: + :param exp_id: + :return: config dict + """ + + return self.get_experiment(exp_name, exp_id, fields=["task_config"])["task_config"] + + +class FileFetcher(Fetcher): + """File Fetcher""" + + def __init__(self, experiments_dir): + self.experiments_dir = Path(experiments_dir) + + def _get_experiment(self, exp_name, exp_id): + path = self.experiments_dir / exp_name / "sacred" / str(exp_id) + info_path = path / "info.json" + run_path = path / "run.json" + + if info_path.exists(): + with info_path.open("r") as f: + info = json.load(f) + else: + info = {} + + if run_path.exists(): + with run_path.open("r") as f: + run = json.load(f) + else: + run = {} + + exp = { + "_id": exp_id, + "path": path, + "experiment": {"name": exp_name}, + "info": info, + "stop_time": run.get("stop_time", None), + } + return exp + + def _list_experiments(self, exp_name=None): + runs = [] + for path in self.experiments_dir.glob("{}/sacred/[!_]*".format(exp_name or "*")): + exp_name, exp_id = path.parents[1].name, path.name + runs.append(self._get_experiment(exp_name, exp_id)) + return runs + + def _iter_artifacts(self, experiment): + if experiment is None: + return [] + + for fname in experiment["path"].iterdir(): + if fname.suffix == ".pkl" or ".bin" in fname.suffix: + name, uri = fname.name, str(fname) + yield name, uri + + def _load_data(self, uri): + with open(uri, "rb") as f: + data = f.read() + return data + + +class MongoFetcher(Fetcher): + """MongoDB Fetcher""" + + def __init__(self, mongo_url, db_name): + self.mongo_url = mongo_url + self.db_name = db_name + self.client = None + self.db = None + self.runs = None + self.fs = None + self._setup_mongo_client() + + def _setup_mongo_client(self): + self.client = pymongo.MongoClient(self.mongo_url) + self.db = self.client[self.db_name] + self.runs = self.db.runs + self.fs = gridfs.GridFS(self.db) + + def _get_experiment(self, exp_name, exp_id): + return self.runs.find_one({"_id": exp_id}) + + def _list_experiments(self, exp_name=None): + if exp_name is None: + return self.runs.find() + return self.runs.find({"experiment.name": exp_name}) + + def _iter_artifacts(self, experiment): + if experiment is None: + return [] + for artifact in experiment.get("artifacts", []): + name, uri = artifact["name"], artifact["file_id"] + yield name, uri + + def _load_data(self, uri): + data = self.fs.get(uri).read() + return data + + +def create_fetcher_with_config(config_manager: EstimatorConfigManager, load_form_loader: bool = False): + """Create fetcher with loader config + + :param config_manager: + :param load_form_loader + :return: + """ + flag = "" + if load_form_loader: + flag = "loader_" + if config_manager.ex_config.observer_type == ExperimentConfig.OBSERVER_FILE_STORAGE: + return FileFetcher(eval("config_manager.ex_config.{}_dir".format("loader" if load_form_loader else "global"))) + elif config_manager.ex_config.observer_type == ExperimentConfig.OBSERVER_MONGO: + return MongoFetcher( + mongo_url=eval("config_manager.ex_config.{}mongo_url".format(flag)), + db_name=eval("config_manager.ex_config.{}db_name".format(flag)), + ) + else: + return NotImplementedError("Unkown Backend") diff --git a/qlib/contrib/estimator/handler.py b/qlib/contrib/estimator/handler.py new file mode 100644 index 0000000000..e63eb55ecc --- /dev/null +++ b/qlib/contrib/estimator/handler.py @@ -0,0 +1,584 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# coding=utf-8 +import abc +import bisect +import logging + +import pandas as pd +import numpy as np + +from ...log import get_module_logger, TimeInspector +from ...data import D +from ...utils import parse_config, transform_end_date + +from . import processor as processor_module + + +class BaseDataHandler(abc.ABC): + def __init__(self, processors=[], **kwargs): + """ + :param start_date: + :param end_date: + :param kwargs: + """ + # Set logger + self.logger = get_module_logger("DataHandler") + + # init data using kwargs + self._init_kwargs(**kwargs) + + # Setup data. + self.raw_df, self.feature_names, self.label_names = self._init_raw_df() + + # Setup preprocessor + self.processors = [] + for klass in processors: + if isinstance(klass, str): + try: + klass = getattr(processor_module, klass) + except: + raise ValueError("unknown Processor %s" % klass) + self.processors.append(klass(self.feature_names, self.label_names, **kwargs)) + + def _init_kwargs(self, **kwargs): + """ + init the kwargs of DataHandler + """ + pass + + def _init_raw_df(self): + """ + init raw_df, feature_names, label_names of DataHandler + if the index of df_feature and df_label are not same, user need to overload this method to merge (e.g. inner, left, right merge). + + """ + df_features = self.setup_feature() + feature_names = df_features.columns + + df_labels = self.setup_label() + label_names = df_labels.columns + + raw_df = df_features.merge(df_labels, left_index=True, right_index=True, how="left") + + return raw_df, feature_names, label_names + + def reset_label(self, df_labels): + for col in self.label_names: + del self.raw_df[col] + self.label_names = df_labels.columns + self.raw_df = self.raw_df.merge(df_labels, left_index=True, right_index=True, how="left") + + def split_rolling_periods( + self, + train_start_date, + train_end_date, + validate_start_date, + validate_end_date, + test_start_date, + test_end_date, + rolling_period, + calendar_freq="day", + ): + """ + Calculating the Rolling split periods, the period rolling on market calendar. + :param train_start_date: + :param train_end_date: + :param validate_start_date: + :param validate_end_date: + :param test_start_date: + :param test_end_date: + :param rolling_period: The market period of rolling + :param calendar_freq: The frequence of the market calendar + :yield: Rolling split periods + """ + + def get_start_index(calendar, start_date): + start_index = bisect.bisect_left(calendar, start_date) + return start_index + + def get_end_index(calendar, end_date): + end_index = bisect.bisect_right(calendar, end_date) + return end_index - 1 + + calendar = self.raw_df.index.get_level_values("datetime").unique() + + train_start_index = get_start_index(calendar, pd.Timestamp(train_start_date)) + train_end_index = get_end_index(calendar, pd.Timestamp(train_end_date)) + valid_start_index = get_start_index(calendar, pd.Timestamp(validate_start_date)) + valid_end_index = get_end_index(calendar, pd.Timestamp(validate_end_date)) + test_start_index = get_start_index(calendar, pd.Timestamp(test_start_date)) + test_end_index = test_start_index + rolling_period - 1 + + need_stop_split = False + + bound_test_end_index = get_end_index(calendar, pd.Timestamp(test_end_date)) + + while not need_stop_split: + + if test_end_index > bound_test_end_index: + test_end_index = bound_test_end_index + need_stop_split = True + + yield ( + calendar[train_start_index], + calendar[train_end_index], + calendar[valid_start_index], + calendar[valid_end_index], + calendar[test_start_index], + calendar[test_end_index], + ) + + train_start_index += rolling_period + train_end_index += rolling_period + valid_start_index += rolling_period + valid_end_index += rolling_period + test_start_index += rolling_period + test_end_index += rolling_period + + def get_rolling_data( + self, + train_start_date, + train_end_date, + validate_start_date, + validate_end_date, + test_start_date, + test_end_date, + rolling_period, + calendar_freq="day", + ): + # Set generator. + for period in self.split_rolling_periods( + train_start_date, + train_end_date, + validate_start_date, + validate_end_date, + test_start_date, + test_end_date, + rolling_period, + calendar_freq, + ): + ( + x_train, + y_train, + x_validate, + y_validate, + x_test, + y_test, + ) = self.get_split_data(*period) + yield x_train, y_train, x_validate, y_validate, x_test, y_test + + def get_split_data( + self, + train_start_date, + train_end_date, + validate_start_date, + validate_end_date, + test_start_date, + test_end_date, + ): + """ + all return types are DataFrame + """ + ## TODO: loc can be slow, expecially when we put it at the second level index. + if self.raw_df.index.names[0] == "instrument": + df_train = self.raw_df.loc(axis=0)[:, train_start_date:train_end_date] + df_validate = self.raw_df.loc(axis=0)[:, validate_start_date:validate_end_date] + df_test = self.raw_df.loc(axis=0)[:, test_start_date:test_end_date] + else: + df_train = self.raw_df.loc[train_start_date:train_end_date] + df_validate = self.raw_df.loc[validate_start_date:validate_end_date] + df_test = self.raw_df.loc[test_start_date:test_end_date] + + TimeInspector.set_time_mark() + df_train, df_validate, df_test = self.setup_process_data(df_train, df_validate, df_test) + TimeInspector.log_cost_time("Finished setup processed data.") + + x_train = df_train[self.feature_names] + y_train = df_train[self.label_names] + + x_validate = df_validate[self.feature_names] + y_validate = df_validate[self.label_names] + + x_test = df_test[self.feature_names] + y_test = df_test[self.label_names] + + return x_train, y_train, x_validate, y_validate, x_test, y_test + + def setup_process_data(self, df_train, df_valid, df_test): + """ + process the train, valid and test data + :return: the processed train, valid and test data. + """ + for processor in self.processors: + df_train, df_valid, df_test = processor(df_train, df_valid, df_test) + return df_train, df_valid, df_test + + def get_origin_test_label_with_date(self, test_start_date, test_end_date, freq="day"): + """Get origin test label + + :param test_start_date: test start date + :param test_end_date: test end date + :param freq: freq + :return: pd.DataFrame + """ + test_end_date = transform_end_date(test_end_date, freq=freq) + return self.raw_df.loc[(slice(None), slice(test_start_date, test_end_date)), self.label_names] + + @abc.abstractmethod + def setup_feature(self): + """ + Implement this method to load raw feature. + the format of the feature is below + return: df_features + """ + pass + + @abc.abstractmethod + def setup_label(self): + """ + Implement this method to load and calculate label. + the format of the label is below + + return: df_label + """ + pass + + +class QLibDataHandler(BaseDataHandler): + def __init__(self, start_date, end_date, *args, **kwargs): + # Dates. + self.start_date = start_date + self.end_date = end_date + super().__init__(*args, **kwargs) + + def _init_kwargs(self, **kwargs): + + # Instruments + instruments = kwargs.get("instruments", None) + if instruments is None: + market = kwargs.get("market", "csi500").lower() + data_filter_list = kwargs.get("data_filter_list", list()) + self.instruments = D.instruments(market, filter_pipe=data_filter_list) + else: + self.instruments = instruments + + # Config of features and labels + self._fields = kwargs.get("fields", []) + self._names = kwargs.get("names", []) + self._labels = kwargs.get("labels", []) + self._label_names = kwargs.get("label_names", []) + + # Check arguments + assert len(self._fields) > 0, "features list is empty" + assert len(self._labels) > 0, "labels list is empty" + + # Check end_date + # If test_end_date is -1 or greater than the last date, the last date is used + self.end_date = transform_end_date(self.end_date) + + def setup_feature(self): + """ + Load the raw data. + return: df_features + """ + TimeInspector.set_time_mark() + + if len(self._names) == 0: + names = ["F%d" % i for i in range(len(self._fields))] + else: + names = self._names + + df_features = D.features(self.instruments, self._fields, self.start_date, self.end_date) + df_features.columns = names + + TimeInspector.log_cost_time("Finished loading features.") + + return df_features + + def setup_label(self): + """ + Build up labels in df through users' method + :return: df_labels + """ + TimeInspector.set_time_mark() + + if len(self._label_names) == 0: + label_names = ["LABEL%d" % i for i in range(len(self._labels))] + else: + label_names = self._label_names + + df_labels = D.features(self.instruments, self._labels, self.start_date, self.end_date) + df_labels.columns = label_names + + TimeInspector.log_cost_time("Finished loading labels.") + + return df_labels + + +def parse_config_to_fields(config): + """create factors from config + + config = { + 'kbar': {}, # whether to use some hard-code kbar features + 'price': { # whether to use raw price features + 'windows': [0, 1, 2, 3, 4], # use price at n days ago + 'feature': ['OPEN', 'HIGH', 'LOW'] # which price field to use + }, + 'volume': { # whether to use raw volume features + 'windows': [0, 1, 2, 3, 4], # use volume at n days ago + }, + 'rolling': { # whether to use rolling operator based features + 'windows': [5, 10, 20, 30, 60], # rolling windows size + 'include': ['ROC', 'MA', 'STD'], # rolling operator to use + #if include is None we will use default operators + 'exclude': ['RANK'], # rolling operator not to use + } + } + """ + fields = [] + names = [] + if "kbar" in config: + fields += [ + "($close-$open)/$open", + "($high-$low)/$open", + "($close-$open)/($high-$low+1e-12)", + "($high-Greater($open, $close))/$open", + "($high-Greater($open, $close))/($high-$low+1e-12)", + "(Less($open, $close)-$low)/$open", + "(Less($open, $close)-$low)/($high-$low+1e-12)", + "(2*$close-$high-$low)/$open", + "(2*$close-$high-$low)/($high-$low+1e-12)", + ] + names += [ + "KMID", + "KLEN", + "KMID2", + "KUP", + "KUP2", + "KLOW", + "KLOW2", + "KSFT", + "KSFT2", + ] + if "price" in config: + windows = config["price"].get("windows", range(5)) + feature = config["price"].get("feature", ["OPEN", "HIGH", "LOW", "CLOSE", "VWAP"]) + for field in feature: + field = field.lower() + fields += ["Ref($%s, %d)/$close" % (field, d) if d != 0 else "$%s/$close" % field for d in windows] + names += [field.upper() + str(d) for d in windows] + if "volume" in config: + windows = config["volume"].get("windows", range(5)) + fields += ["Ref($volume, %d)/$volume" % d if d != 0 else "$volume/$volume" for d in windows] + names += ["VOLUME" + str(d) for d in windows] + if "rolling" in config: + windows = config["rolling"].get("windows", [5, 10, 20, 30, 60]) + include = config["rolling"].get("include", None) + exclude = config["rolling"].get("exclude", []) + # `exclude` in dataset config unnecessary filed + # `include` in dataset config necessary field + use = lambda x: x not in exclude and (include is None or x in include) + if use("ROC"): + fields += ["Ref($close, %d)/$close" % d for d in windows] + names += ["ROC%d" % d for d in windows] + if use("MA"): + fields += ["Mean($close, %d)/$close" % d for d in windows] + names += ["MA%d" % d for d in windows] + if use("STD"): + fields += ["Std($close, %d)/$close" % d for d in windows] + names += ["STD%d" % d for d in windows] + if use("BETA"): + fields += ["Slope($close, %d)/$close" % d for d in windows] + names += ["BETA%d" % d for d in windows] + if use("RSQR"): + fields += ["Rsquare($close, %d)" % d for d in windows] + names += ["RSQR%d" % d for d in windows] + if use("RESI"): + fields += ["Resi($close, %d)/$close" % d for d in windows] + names += ["RESI%d" % d for d in windows] + if use("MAX"): + fields += ["Max($high, %d)/$close" % d for d in windows] + names += ["MAX%d" % d for d in windows] + if use("LOW"): + fields += ["Min($low, %d)/$close" % d for d in windows] + names += ["MIN%d" % d for d in windows] + if use("QTLU"): + fields += ["Quantile($close, %d, 0.8)/$close" % d for d in windows] + names += ["QTLU%d" % d for d in windows] + if use("QTLD"): + fields += ["Quantile($close, %d, 0.2)/$close" % d for d in windows] + names += ["QTLD%d" % d for d in windows] + if use("RANK"): + fields += ["Rank($close, %d)" % d for d in windows] + names += ["RANK%d" % d for d in windows] + if use("RSV"): + fields += ["($close-Min($low, %d))/(Max($high, %d)-Min($low, %d)+1e-12)" % (d, d, d) for d in windows] + names += ["RSV%d" % d for d in windows] + if use("IMAX"): + fields += ["IdxMax($high, %d)/%d" % (d, d) for d in windows] + names += ["IMAX%d" % d for d in windows] + if use("IMIN"): + fields += ["IdxMin($low, %d)/%d" % (d, d) for d in windows] + names += ["IMIN%d" % d for d in windows] + if use("IMXD"): + fields += ["(IdxMax($high, %d)-IdxMin($low, %d))/%d" % (d, d, d) for d in windows] + names += ["IMXD%d" % d for d in windows] + if use("CORR"): + fields += ["Corr($close, Log($volume+1), %d)" % d for d in windows] + names += ["CORR%d" % d for d in windows] + if use("CORD"): + fields += ["Corr($close/Ref($close,1), Log($volume/Ref($volume, 1)+1), %d)" % d for d in windows] + names += ["CORD%d" % d for d in windows] + if use("CNTP"): + fields += ["Mean($close>Ref($close, 1), %d)" % d for d in windows] + names += ["CNTP%d" % d for d in windows] + if use("CNTN"): + fields += ["Mean($closeRef($close, 1), %d)-Mean($close= -3, -3 - (x + 3).div(x.min() + 3) * 0.5, inplace=True) + if self.fillna_feature: + x.fillna(0, inplace=True) + return x + + TimeInspector.set_time_mark() + + # Copy + df_new = df.copy() + + # Label + cols = df.columns[df.columns.str.contains("^LABEL")] + df_new[cols] = df[cols].groupby(level="datetime").apply(_label_norm) + + # Features + cols = df.columns[df.columns.str.contains("^KLEN|^KLOW|^KUP")] + df_new[cols] = df[cols].apply(lambda x: x ** 0.25).groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^KLOW2|^KUP2")] + df_new[cols] = df[cols].apply(lambda x: x ** 0.5).groupby(level="datetime").apply(_feature_norm) + + _cols = [ + "KMID", + "KSFT", + "OPEN", + "HIGH", + "LOW", + "CLOSE", + "VWAP", + "ROC", + "MA", + "BETA", + "RESI", + "QTLU", + "QTLD", + "RSV", + "SUMP", + "SUMN", + "SUMD", + "VSUMP", + "VSUMN", + "VSUMD", + ] + pat = "|".join(["^" + x for x in _cols]) + cols = df.columns[df.columns.str.contains(pat) & (~df.columns.isin(["HIGH0", "LOW0"]))] + df_new[cols] = df[cols].groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^STD|^VOLUME|^VMA|^VSTD")] + df_new[cols] = df[cols].apply(np.log).groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^RSQR")] + df_new[cols] = df[cols].fillna(0).groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^MAX|^HIGH0")] + df_new[cols] = df[cols].apply(lambda x: (x - 1) ** 0.5).groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^MIN|^LOW0")] + df_new[cols] = df[cols].apply(lambda x: (1 - x) ** 0.5).groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^CORR|^CORD")] + df_new[cols] = df[cols].apply(np.exp).groupby(level="datetime").apply(_feature_norm) + + cols = df.columns[df.columns.str.contains("^WVMA")] + df_new[cols] = df[cols].apply(np.log1p).groupby(level="datetime").apply(_feature_norm) + + TimeInspector.log_cost_time("Finished preprocessing data.") + + return df_new diff --git a/qlib/contrib/estimator/trainer.py b/qlib/contrib/estimator/trainer.py new file mode 100644 index 0000000000..d19051de92 --- /dev/null +++ b/qlib/contrib/estimator/trainer.py @@ -0,0 +1,315 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# coding=utf-8 + +from abc import abstractmethod + +import pandas as pd +import numpy as np +from scipy.stats import pearsonr + +from ...log import get_module_logger, TimeInspector +from .handler import BaseDataHandler +from .launcher import CONFIG_MANAGER +from .fetcher import create_fetcher_with_config +from ...utils import drop_nan_by_y_index, transform_end_date + + +class BaseTrainer(object): + def __init__(self, model_class, model_save_path, model_args, data_handler: BaseDataHandler, sacred_ex, **kwargs): + # 1. Model. + self.model_class = model_class + self.model_save_path = model_save_path + self.model_args = model_args + + # 2. Data handler. + self.data_handler = data_handler + + # 3. Sacred ex. + self.ex = sacred_ex + + # 4. Logger. + self.logger = get_module_logger("Trainer") + + # 5. Data time + self.train_start_date = kwargs.get("train_start_date", None) + self.train_end_date = kwargs.get("train_end_date", None) + self.validate_start_date = kwargs.get("validate_start_date", None) + self.validate_end_date = kwargs.get("validate_end_date", None) + self.test_start_date = kwargs.get("test_start_date", None) + self.test_end_date = transform_end_date(kwargs.get("test_end_date", None)) + + @abstractmethod + def train(self): + """ + Implement this method indicating how to train a model. + """ + pass + + @abstractmethod + def load(self): + """ + Implement this method indicating how to restore a model and the data. + """ + pass + + @abstractmethod + def get_test_pred(self): + """ + Implement this method indicating how to get prediction result(s) from a model. + """ + pass + + @abstractmethod + def get_test_performance(self): + """ + Implement this method indicating how to get the performance of the model. + """ + pass + + def get_test_score(self): + """ + Override this method to transfer the predict result(s) into the score of the stock. + Note: If this is a multi-label training, you need to transfer predict labels into one score. + Or you can just use the result of `get_test_pred()` (you can also process the result) if this is one label training. + We use the first column of the result of `get_test_pred()` as default method (regard it as one label training). + """ + pred = self.get_test_pred() + pred_score = pd.DataFrame(index=pred.index) + pred_score["score"] = pred.iloc(axis=1)[0] + return pred_score + + +class StaticTrainer(BaseTrainer): + def __init__(self, model_class, model_save_path, model_args, data_handler, sacred_ex, **kwargs): + super(StaticTrainer, self).__init__(model_class, model_save_path, model_args, data_handler, sacred_ex, **kwargs) + self.model = None + + split_data = self.data_handler.get_split_data( + self.train_start_date, + self.train_end_date, + self.validate_start_date, + self.validate_end_date, + self.test_start_date, + self.test_end_date, + ) + ( + self.x_train, + self.y_train, + self.x_validate, + self.y_validate, + self.x_test, + self.y_test, + ) = split_data + + def train(self): + TimeInspector.set_time_mark() + model = self.model_class(**self.model_args) + + if CONFIG_MANAGER.ex_config.finetune: + fetcher = create_fetcher_with_config(CONFIG_MANAGER, load_form_loader=True) + loader_model = fetcher.get_experiment( + exp_name=CONFIG_MANAGER.ex_config.loader_name, + exp_id=CONFIG_MANAGER.ex_config.loader_id, + fields=["model"], + )["model"] + + if isinstance(loader_model, list): + model_index = ( + -1 + if CONFIG_MANAGER.ex_config.loader_model_index is None + else CONFIG_MANAGER.ex_config.loader_model_index + ) + loader_model = loader_model[model_index] + + model.load(loader_model) + model.finetune(self.x_train, self.y_train, self.x_validate, self.y_validate) + else: + model.fit(self.x_train, self.y_train, self.x_validate, self.y_validate) + model.save(self.model_save_path) + self.ex.add_artifact(self.model_save_path) + self.model = model + TimeInspector.log_cost_time("Finished training model.") + + def load(self): + model = self.model_class(**self.model_args) + + # Load model + fetcher = create_fetcher_with_config(CONFIG_MANAGER, load_form_loader=True) + loader_model = fetcher.get_experiment( + exp_name=CONFIG_MANAGER.ex_config.loader_name, + exp_id=CONFIG_MANAGER.ex_config.loader_id, + fields=["model"], + )["model"] + + if isinstance(loader_model, list): + model_index = ( + -1 + if CONFIG_MANAGER.ex_config.loader_model_index is None + else CONFIG_MANAGER.ex_config.loader_model_index + ) + loader_model = loader_model[model_index] + + model.load(loader_model) + + # Save model, after load, if you don't save the model, the result of this experiment will be no model + model.save(self.model_save_path) + self.ex.add_artifact(self.model_save_path) + self.model = model + + def get_test_pred(self): + pred = self.model.predict(self.x_test) + pred = pd.DataFrame(pred, index=self.x_test.index, columns=self.y_test.columns) + return pred + + def get_test_performance(self): + model_score = self.model.score(self.x_test, self.y_test) + # Remove rows from x, y and w, which contain Nan in any columns in y_test. + x_test, y_test, __ = drop_nan_by_y_index(self.x_test, self.y_test) + pred_test = self.model.predict(x_test) + model_pearsonr = pearsonr(np.ravel(pred_test), np.ravel(y_test.values))[0] + + performance = {"model_score": model_score, "model_pearsonr": model_pearsonr} + return performance + + +class RollingTrainer(BaseTrainer): + def __init__(self, model_class, model_save_path, model_args, data_handler, sacred_ex, **kwargs): + super(RollingTrainer, self).__init__( + model_class, model_save_path, model_args, data_handler, sacred_ex, **kwargs + ) + self.rolling_period = kwargs.get("rolling_period", 60) + self.models = [] + self.rolling_data = [] + self.all_x_test = [] + self.all_y_test = [] + for data in self.data_handler.get_rolling_data( + self.train_start_date, + self.train_end_date, + self.validate_start_date, + self.validate_end_date, + self.test_start_date, + self.test_end_date, + self.rolling_period, + ): + self.rolling_data.append(data) + __, __, __, __, x_test, y_test = data + self.all_x_test.append(x_test) + self.all_y_test.append(y_test) + + def train(self): + # 1. Get total data parts. + # total_data_parts = self.data_handler.total_data_parts + # self.logger.warning('Total numbers of model are: {}, start training models...'.format(total_data_parts)) + if CONFIG_MANAGER.ex_config.finetune: + fetcher = create_fetcher_with_config(CONFIG_MANAGER, load_form_loader=True) + loader_model = fetcher.get_experiment( + exp_name=CONFIG_MANAGER.ex_config.loader_name, + exp_id=CONFIG_MANAGER.ex_config.loader_id, + fields=["model"], + )["model"] + loader_model_index = CONFIG_MANAGER.ex_config.loader_model_index + previous_model_path = "" + # 2. Rolling train. + for ( + index, + (x_train, y_train, x_validate, y_validate, x_test, y_test), + ) in enumerate(self.rolling_data): + TimeInspector.set_time_mark() + model = self.model_class(**self.model_args) + + if CONFIG_MANAGER.ex_config.finetune: + # Finetune model + if loader_model_index is None and isinstance(loader_model, list): + try: + model.load(loader_model[index]) + except IndexError: + # Load model by previous_model_path + with open(previous_model_path, "rb") as fp: + model.load(fp) + model.finetune(x_train, y_train, x_validate, y_validate) + else: + + if index == 0: + loader_model = ( + loader_model[loader_model_index] if isinstance(loader_model, list) else loader_model + ) + model.load(loader_model) + else: + with open(previous_model_path, "rb") as fp: + model.load(fp) + + model.finetune(x_train, y_train, x_validate, y_validate) + + else: + model.fit(x_train, y_train, x_validate, y_validate) + + model_save_path = "{}_{}".format(self.model_save_path, index) + model.save(model_save_path) + previous_model_path = model_save_path + self.ex.add_artifact(model_save_path) + self.models.append(model) + TimeInspector.log_cost_time("Finished training model: {}.".format(index + 1)) + + def load(self): + """ + Load the data and the model + """ + fetcher = create_fetcher_with_config(CONFIG_MANAGER, load_form_loader=True) + loader_model = fetcher.get_experiment( + exp_name=CONFIG_MANAGER.ex_config.loader_name, + exp_id=CONFIG_MANAGER.ex_config.loader_id, + fields=["model"], + )["model"] + for index in range(len(self.all_x_test)): + model = self.model_class(**self.model_args) + + model.load(loader_model[index]) + + # Save model + model_save_path = "{}_{}".format(self.model_save_path, index) + model.save(model_save_path) + self.ex.add_artifact(model_save_path) + + self.models.append(model) + + def get_test_pred(self): + """ + Predict the score on test data with the models. + Please ensure the models and data are loaded before call this score. + + :return: the predicted scores for the pred + """ + pred_df_list = [] + y_test_columns = self.all_y_test[0].columns + # Start iteration. + for model, x_test in zip(self.models, self.all_x_test): + pred = model.predict(x_test) + pred_df = pd.DataFrame(pred, index=x_test.index, columns=y_test_columns) + pred_df_list.append(pred_df) + return pd.concat(pred_df_list) + + def get_test_performance(self): + """ + Get the performances of the models + + :return: the performances of models + """ + pred_test_list = [] + y_test_list = [] + scorer = self.models[0]._scorer + for model, x_test, y_test in zip(self.models, self.all_x_test, self.all_y_test): + # Remove rows from x, y and w, which contain Nan in any columns in y_test. + x_test, y_test, __ = drop_nan_by_y_index(x_test, y_test) + pred_test_list.append(model.predict(x_test)) + y_test_list.append(np.squeeze(y_test.values)) + + pred_test_array = np.concatenate(pred_test_list, axis=0) + y_test_array = np.concatenate(y_test_list, axis=0) + + model_score = scorer(y_test_array, pred_test_array) + model_pearsonr = pearsonr(np.ravel(y_test_array), np.ravel(pred_test_array))[0] + + performance = {"model_score": model_score, "model_pearsonr": model_pearsonr} + return performance diff --git a/qlib/contrib/evaluate.py b/qlib/contrib/evaluate.py new file mode 100644 index 0000000000..4a25df4a02 --- /dev/null +++ b/qlib/contrib/evaluate.py @@ -0,0 +1,389 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from __future__ import division +from __future__ import print_function + +import numpy as np +import pandas as pd +import inspect +from ..log import get_module_logger +from .strategy import TopkAmountStrategy, TopkWeightStrategy +from .strategy.strategy import BaseStrategy +from .backtest.exchange import Exchange +from .backtest.backtest import backtest as backtest_func, get_date_range + +from ..data import D +from ..config import C + +logger = get_module_logger("Evaluate") + + +def risk_analysis(r, N=252): + """Risk Analysis + + Parameters + ---------- + r : pandas.Series + daily return series + N: int + scaler for annualizing sharpe ratio (day: 250, week: 50, month: 12) + """ + mean = r.mean() + std = r.std(ddof=1) + annual = mean * N + sharpe = mean / std * np.sqrt(N) + mdd = (r.cumsum() - r.cumsum().cummax()).min() + data = {"mean": mean, "std": std, "annual": annual, "sharpe": sharpe, "mdd": mdd} + res = pd.Series(data, index=data.keys()).to_frame("risk") + return res + + +def get_strategy( + strategy=None, + topk=50, + margin=0.5, + risk_degree=0.95, + str_type="amount", + adjust_dates=None, +): + """get_strategy + + Parameters + ---------- + + strategy : Strategy() + strategy used in backtest + topk : int (Default value: 50) + top-N stocks to buy. + margin : int or float(Default value: 0.5) + if isinstance(margin, int): + sell_limit = margin + else: + sell_limit = pred_in_a_day.count() * margin + buffer margin, in single score_mode, continue holding stock if it is in nlargest(sell_limit) + sell_limit should be no less than topk + risk_degree: float + 0-1, 0.95 for example, use 95% money to trade + str_type: 'amount' or 'weight' + strategy type: TopkAmountStrategy or TopkWeightStrategy + + Returns + ------- + :class: Strategy + an initialized strategy object + """ + if strategy is None: + logger.info("Create new streategy ") + if str_type == "amount": + str_cls = TopkAmountStrategy + elif str_type == "weight": + str_cls = TopkWeightStrategy + else: + raise ValueError("Unsupported strategy type") + strategy = str_cls( + topk=topk, + buffer_margin=margin, + risk_degree=risk_degree, + adjust_dates=adjust_dates, + ) + if not isinstance(strategy, BaseStrategy): + raise TypeError("Strategy not supported") + return strategy + + +def get_exchange( + pred, + exchange=None, + subscribe_fields=[], + open_cost=0.0015, + close_cost=0.0025, + min_cost=5.0, + trade_unit=None, + limit_threshold=None, + deal_price=None, + extract_codes=False, + shift=1, +): + """get_exchange + + Parameters + ---------- + + # exchange related arguments + exchange: Exchange() + subscribe_fields: list + subscribe fields + open_cost : float + open transaction cost + close_cost : float + close transaction cost + min_cost : float + min transaction cost + trade_unit : int + 100 for China A + deal_price: str + dealing price type: 'close', 'open', 'vwap' + limit_threshold : float + limit move 0.1 (10%) for example, long and short with same limit + extract_codes: bool + will we pass the codes extracted from the pred to the exchange. + NOTE: This will be faster with offline qlib. + + Returns + ------- + :class: Exchange + an initialized Exchange object + """ + + if trade_unit is None: + trade_unit = C.trade_unit + if limit_threshold is None: + limit_threshold = C.limit_threshold + if deal_price is None: + deal_price = C.deal_price + if exchange is None: + logger.info("Create new exchange") + # handle exception for deal_price + if deal_price[0] != "$": + deal_price = "$" + deal_price + if extract_codes: + codes = sorted(pred.index.get_level_values(0).unique()) + else: + codes = "all" # TODO: We must ensure that 'all.txt' includes all the stocks + + dates = sorted(pred.index.get_level_values(1).unique()) + dates = np.append(dates, get_date_range(dates[-1], shift=shift)) + + exchange = Exchange( + trade_dates=dates, + codes=codes, + deal_price=deal_price, + subscribe_fields=subscribe_fields, + limit_threshold=limit_threshold, + open_cost=open_cost, + close_cost=close_cost, + min_cost=min_cost, + trade_unit=trade_unit, + ) + return exchange + + +# This is the api for compatibility for legacy code +def backtest(pred, account=1e9, shift=1, benchmark="SH000905", verbose=True, **kwargs): + """This function will help you set a reasonable Exchange and provide default value for strategy + Parameter + ---------- + + # backtest workflow related or commmon arguments + pred : pandas.DataFrame + predict should has index and one `score` column + account : float + init account value + shift : int + whether to shift prediction by one day + benchmark : str + benchmark code, default is SH000905 CSI 500 + verbose : bool + whether to print log + + # strategy related arguments + strategy : Strategy() + strategy used in backtest + topk : int (Default value: 50) + top-N stocks to buy. + margin : int or float(Default value: 0.5) + if isinstance(margin, int): + sell_limit = margin + else: + sell_limit = pred_in_a_day.count() * margin + buffer margin, in single score_mode, continue holding stock if it is in nlargest(sell_limit) + sell_limit should be no less than topk + risk_degree: float + 0-1, 0.95 for example, use 95% money to trade + str_type: 'amount' or 'weight' + strategy type: TopkAmountStrategy or TopkWeightStrategy + + # exchange related arguments + exchange: Exchange() + pass the exchange for speeding up. + subscribe_fields: list + subscribe fields + open_cost : float + open transaction cost. The default value is 0.002(0.2%). + close_cost : float + close transaction cost. The default value is 0.002(0.2%). + min_cost : float + min transaction cost + trade_unit : int + 100 for China A + deal_price: str + dealing price type: 'close', 'open', 'vwap' + limit_threshold : float + limit move 0.1 (10%) for example, long and short with same limit + extract_codes: bool + will we pass the codes extracted from the pred to the exchange. + NOTE: This will be faster with offline qlib. + """ + # check strategy: + spec = inspect.getfullargspec(get_strategy) + str_args = {k: v for k, v in kwargs.items() if k in spec.args} + strategy = get_strategy(**str_args) + + # init exchange: + spec = inspect.getfullargspec(get_exchange) + ex_args = {k: v for k, v in kwargs.items() if k in spec.args} + trade_exchange = get_exchange(pred, **ex_args) + + # run backtest + report_df, positions = backtest_func( + pred=pred, + strategy=strategy, + trade_exchange=trade_exchange, + shift=shift, + verbose=verbose, + account=account, + benchmark=benchmark, + ) + # for compatibility of the old api. return the dict positions + positions = {k: p.position for k, p in positions.items()} + return report_df, positions + + +def long_short_backtest( + pred, + topk=50, + deal_price=None, + shift=1, + open_cost=0, + close_cost=0, + trade_unit=None, + limit_threshold=None, + min_cost=5, + subscribe_fields=[], + extract_codes=False, +): + """ + A backtest for long-short strategy + + :param pred: The trading signal produced on day `T` + :param topk: The short topk securities and long topk securities + :param deal_price: The price to deal the trading + :param shift: Whether to shift prediction by one day. The trading day will be T+1 if shift==1. + :param open_cost: open transaction cost + :param close_cost: close transaction cost + :param trade_unit: 100 for China A + :param limit_threshold: limit move 0.1 (10%) for example, long and short with same limit + :param min_cost: min transaction cost + :param subscribe_fields: subscribe fields + :param extract_codes: bool + will we pass the codes extracted from the pred to the exchange. + NOTE: This will be faster with offline qlib. + :return: The result of backtest, it is represented by a dict. + { "long": long_returns(excess), + "short": short_returns(excess), + "long_short": long_short_returns} + """ + + if trade_unit is None: + trade_unit = C.trade_unit + if limit_threshold is None: + limit_threshold = C.limit_threshold + if deal_price is None: + deal_price = C.deal_price + if deal_price[0] != "$": + deal_price = "$" + deal_price + + subscribe_fields = subscribe_fields.copy() + profit_str = f"Ref({deal_price}, -1)/{deal_price} - 1" + subscribe_fields.append(profit_str) + + trade_exchange = get_exchange( + pred=pred, + deal_price=deal_price, + subscribe_fields=subscribe_fields, + limit_threshold=limit_threshold, + open_cost=open_cost, + close_cost=close_cost, + min_cost=min_cost, + trade_unit=trade_unit, + extract_codes=extract_codes, + shift=shift, + ) + + _pred_dates = pred.index.get_level_values(level="datetime") + predict_dates = D.calendar(start_time=_pred_dates.min(), end_time=_pred_dates.max()) + trade_dates = np.append(predict_dates[shift:], get_date_range(predict_dates[-1], shift=shift)) + + long_returns = {} + short_returns = {} + ls_returns = {} + + for pdate, date in zip(predict_dates, trade_dates): + score = pred.loc(axis=0)[:, pdate] + score = score.reset_index().sort_values(by="score", ascending=False) + + long_stocks = list(score.iloc[:topk]["instrument"]) + short_stocks = list(score.iloc[-topk:]["instrument"]) + + score = score.set_index(["instrument", "datetime"]).sort_index() + + long_profit = [] + short_profit = [] + all_profit = [] + + for stock in long_stocks: + if not trade_exchange.is_stock_tradable(stock_id=stock, trade_date=date): + continue + profit = trade_exchange.get_quote_info(stock_id=stock, trade_date=date)[profit_str] + if np.isnan(profit): + long_profit.append(0) + else: + long_profit.append(profit) + + for stock in short_stocks: + if not trade_exchange.is_stock_tradable(stock_id=stock, trade_date=date): + continue + profit = trade_exchange.get_quote_info(stock_id=stock, trade_date=date)[profit_str] + if np.isnan(profit): + short_profit.append(0) + else: + short_profit.append(-profit) + + for stock in list(score.loc(axis=0)[:, pdate].index.get_level_values(level=0)): + # exclude the suspend stock + if trade_exchange.check_stock_suspended(stock_id=stock, trade_date=date): + continue + profit = trade_exchange.get_quote_info(stock_id=stock, trade_date=date)[profit_str] + if np.isnan(profit): + all_profit.append(0) + else: + all_profit.append(profit) + + long_returns[date] = np.mean(long_profit) - np.mean(all_profit) + short_returns[date] = np.mean(short_profit) + np.mean(all_profit) + ls_returns[date] = np.mean(short_profit) + np.mean(long_profit) + + return dict( + zip( + ["long", "short", "long_short"], + map(pd.Series, [long_returns, short_returns, ls_returns]), + ) + ) + + +def t_run(): + pred_FN = "./check_pred.csv" + pred = pd.read_csv(pred_FN) + pred["datetime"] = pd.to_datetime(pred["datetime"]) + pred = pred.set_index([pred.columns[0], pred.columns[1]]) + pred = pred.iloc[:9000] + report_df, positions = backtest(pred=pred) + print(report_df.head()) + print(positions.keys()) + print(positions[list(positions.keys())[0]]) + return 0 + + +if __name__ == "__main__": + t_run() diff --git a/qlib/contrib/evaluate_portfolio.py b/qlib/contrib/evaluate_portfolio.py new file mode 100644 index 0000000000..04ddd8db04 --- /dev/null +++ b/qlib/contrib/evaluate_portfolio.py @@ -0,0 +1,246 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import copy +import numpy as np +import pandas as pd +from scipy.stats import spearmanr, pearsonr + + +from ..data import D + +from collections import OrderedDict + + +def _get_position_value_from_df(evaluate_date, position, close_data_df): + """Get position value by existed close data df + close_data_df: + pd.DataFrame + multi-index + close_data_df['$close'][stock_id][evaluate_date]: close price for (stock_id, evaluate_date) + position: + same in get_position_value() + """ + value = 0 + for stock_id, report in position.items(): + if stock_id != "cash": + value += report["amount"] * close_data_df["$close"][stock_id][evaluate_date] + # value += report['amount'] * report['price'] + if "cash" in position: + value += position["cash"] + return value + + +def get_position_value(evaluate_date, position): + """sum of close*amount + + get value of postion + + use close price + + postions: + { + Timestamp('2016-01-05 00:00:00'): + { + 'SH600022': + { + 'amount':100.00, + 'price':12.00 + }, + + 'cash':100000.0 + } + } + + It means Hold 100.0 'SH600022' and 100000.0 RMB in '2016-01-05' + """ + # load close price for position + # position should also consider cash + instruments = list(position.keys()) + instruments = list(set(instruments) - set(["cash"])) # filter 'cash' + fields = ["$close"] + close_data_df = D.features( + instruments, + fields, + start_time=evaluate_date, + end_time=evaluate_date, + freq="day", + disk_cache=0, + ) + value = _get_position_value_from_df(evaluate_date, position, close_data_df) + return value + + +def get_position_list_value(positions): + # generate instrument list and date for whole poitions + instruments = set() + for day, position in positions.items(): + instruments.update(position.keys()) + instruments = list(set(instruments) - set(["cash"])) # filter 'cash' + instruments.sort() + day_list = list(positions.keys()) + day_list.sort() + start_date, end_date = day_list[0], day_list[-1] + # load data + fields = ["$close"] + close_data_df = D.features( + instruments, + fields, + start_time=start_date, + end_time=end_date, + freq="day", + disk_cache=0, + ) + # generate value + # return dict for time:position_value + value_dict = OrderedDict() + for day, position in positions.items(): + value = _get_position_value_from_df(evaluate_date=day, position=position, close_data_df=close_data_df) + value_dict[day] = value + return value_dict + + +def get_daily_return_series_from_positions(positions, init_asset_value): + """Parameters + generate daily return series from position view + positions: positions generated by strategy + init_asset_value : init asset value + return: pd.Series of daily return , return_series[date] = daily return rate + """ + value_dict = get_position_list_value(positions) + value_series = pd.Series(value_dict) + value_series = value_series.sort_index() # check date + return_series = value_series.pct_change() + return_series[value_series.index[0]] = ( + value_series[value_series.index[0]] / init_asset_value - 1 + ) # update daily return for the first date + return return_series + + +def get_annual_return_from_positions(positions, init_asset_value): + """Annualized Returns + + p_r = (p_end / p_start)^{(250/n)} - 1 + + p_r annual return + p_end final value + p_start init value + n days of backtest + + """ + date_range_list = sorted(list(positions.keys())) + end_time = date_range_list[-1] + p_end = get_position_value(end_time, positions[end_time]) + p_start = init_asset_value + n_period = len(date_range_list) + annual = pow((p_end / p_start), (250 / n_period)) - 1 + + return annual + + +def get_annaul_return_from_return_series(r, method="ci"): + """Risk Analysis from daily return series + + Parameters + ---------- + r : pandas.Series + daily return series + method : str + interest calculation method, ci(compound interest)/si(simple interest) + """ + mean = r.mean() + annual = (1 + mean) ** 250 - 1 if method == "ci" else mean * 250 + + return annual + + +def get_sharpe_ratio_from_return_series(r, risk_free_rate=0.00, method="ci"): + """Risk Analysis + + Parameters + ---------- + r : pandas.Series + daily return series + method : str + interest calculation method, ci(compound interest)/si(simple interest) + risk_free_rate : float + risk_free_rate, default as 0.00, can set as 0.03 etc + """ + std = r.std(ddof=1) + annual = get_annaul_return_from_return_series(r, method=method) + sharpe = (annual - risk_free_rate) / std / np.sqrt(250) + + return sharpe + + +def get_max_drawdown_from_series(r): + """Risk Analysis from asset value + + cumprod way + + Parameters + ---------- + r : pandas.Series + daily return series + """ + # mdd = ((r.cumsum() - r.cumsum().cummax()) / (1 + r.cumsum().cummax())).min() + + mdd = (((1 + r).cumprod() - (1 + r).cumprod().cummax()) / ((1 + r).cumprod().cummax())).min() + + return mdd + + +def get_turnover_rate(): + # in backtest + pass + + +def get_beta(r, b): + """Risk Analysis beta + + Parameters + ---------- + r : pandas.Series + daily return series of strategy + b : pandas.Series + daily return series of baseline + """ + cov_r_b = np.cov(r, b) + var_b = np.var(b) + return cov_r_b / var_b + + +def get_alpha(r, b, risk_free_rate=0.03): + beta = get_beta(r, b) + annaul_r = get_annaul_return_from_return_series(r) + annaul_b = get_annaul_return_from_return_series(b) + + alpha = annaul_r - risk_free_rate - beta * (annaul_b - risk_free_rate) + + return alpha + + +def get_volatility_from_series(r): + return r.std(ddof=1) + + +def get_rank_ic(a, b): + """Rank IC + + Parameters + ---------- + r : pandas.Series + daily score series of feature + b : pandas.Series + daily return series + + """ + return spearmanr(a, b).correlation + + +def get_normal_ic(a, b): + return pearsonr(a, b).correlation diff --git a/qlib/contrib/model/__init__.py b/qlib/contrib/model/__init__.py new file mode 100644 index 0000000000..c639b57f53 --- /dev/null +++ b/qlib/contrib/model/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import warnings + +from .base import Model diff --git a/qlib/contrib/model/base.py b/qlib/contrib/model/base.py new file mode 100644 index 0000000000..b3ea917a52 --- /dev/null +++ b/qlib/contrib/model/base.py @@ -0,0 +1,155 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import abc +import six + + +@six.add_metaclass(abc.ABCMeta) +class Model(object): + """Model base class""" + + @property + def name(self): + return type(self).__name__ + + def fit(self, x_train, y_train, x_valid, y_valid, w_train=None, w_valid=None, **kwargs): + """fix train with cross-validation + Fit model when ex_config.finetune is False + + Parameters + ---------- + x_train : pd.dataframe + train data + y_train : pd.dataframe + train label + x_valid : pd.dataframe + valid data + y_valid : pd.dataframe + valid label + w_train : pd.dataframe + train weight + w_valid : pd.dataframe + valid weight + + Returns + ---------- + Model + trained model + """ + raise NotImplementedError() + + def score(self, x_test, y_test, w_test=None, **kwargs): + """evaluate model with test data/label + + Parameters + ---------- + x_test : pd.dataframe + test data + y_test : pd.dataframe + test label + w_test : pd.dataframe + test weight + + Returns + ---------- + float + evaluation score + """ + raise NotImplementedError() + + def predict(self, x_test, **kwargs): + """predict given test data + + Parameters + ---------- + x_test : pd.dataframe + test data + + Returns + ---------- + np.ndarray + test predict label + """ + raise NotImplementedError() + + def save(self, fname, **kwargs): + """save model + + Parameters + ---------- + fname : str + model filename + """ + # TODO: Currently need to save the model as a single file, otherwise the estimator may not be compatible + raise NotImplementedError() + + def load(self, buffer, **kwargs): + """load model + + Parameters + ---------- + buffer : bytes + binary data of model parameters + + Returns + ---------- + Model + loaded model + """ + raise NotImplementedError() + + def get_data_with_date(self, date, **kwargs): + """ + Will be called in online module + need to return the data that used to predict the label (score) of stocks at date. + + :param + date: pd.Timestamp + predict date + :return: + data: the input data that used to predict the label (score) of stocks at predict date. + """ + raise NotImplementedError("get_data_with_date for this model is not implemented.") + + def finetune(self, x_train, y_train, x_valid, y_valid, w_train=None, w_valid=None, **kwargs): + """Finetune model + In `RollingTrainer`: + if loader.model_index is None: + If provide 'Static Model', based on the provided 'Static' model update. + If provide 'Rolling Model', skip the model of load, based on the last 'provided model' update. + + if loader.model_index is not None: + Based on the provided model(loader.model_index) update. + + In `StaticTrainer`: + If the load is 'static model': + Based on the 'static model' update + If the load is 'rolling model': + Based on the provided model(`loader.model_index`) update. If `loader.model_index` is None, use the last model. + + Parameters + ---------- + x_train : pd.dataframe + train data + y_train : pd.dataframe + train label + x_valid : pd.dataframe + valid data + y_valid : pd.dataframe + valid label + w_train : pd.dataframe + train weight + w_valid : pd.dataframe + valid weight + + Returns + ---------- + Model + finetune model + """ + raise NotImplementedError("Finetune for this model is not implemented.") diff --git a/qlib/contrib/model/gbdt.py b/qlib/contrib/model/gbdt.py new file mode 100644 index 0000000000..e79945d8af --- /dev/null +++ b/qlib/contrib/model/gbdt.py @@ -0,0 +1,95 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import numpy as np +import lightgbm as lgb +from sklearn.metrics import roc_auc_score, mean_squared_error + +from .base import Model +from ...utils import drop_nan_by_y_index + + +class LGBModel(Model): + """LightGBM Model + + Parameters + ---------- + param_update : dict + training parameters + """ + + _params = dict() + + def __init__(self, loss="mse", **kwargs): + if loss not in {"mse", "binary"}: + raise NotImplementedError + self._scorer = mean_squared_error if loss == "mse" else roc_auc_score + self._params.update(objective=loss, **kwargs) + self._model = None + + def fit( + self, + x_train, + y_train, + x_valid, + y_valid, + w_train=None, + w_valid=None, + num_boost_round=1000, + early_stopping_rounds=50, + verbose_eval=20, + evals_result=dict(), + **kwargs + ): + #print("input featrue", x_train) + #print("input label", y_train) + #print("input weight", w_train) + # Lightgbm need 1D array as its label + if y_train.values.ndim == 2 and y_train.values.shape[1] == 1: + y_train_1d, y_valid_1d = np.squeeze(y_train.values), np.squeeze(y_valid.values) + else: + raise ValueError("LightGBM doesn't support multi-label training") + + w_train_weight = None if w_train is None else w_train.values + w_valid_weight = None if w_valid is None else w_valid.values + + dtrain = lgb.Dataset(x_train.values, label=y_train_1d, weight=w_train_weight) + dvalid = lgb.Dataset(x_valid.values, label=y_valid_1d, weight=w_valid_weight) + self._model = lgb.train( + self._params, + dtrain, + num_boost_round=num_boost_round, + valid_sets=[dtrain, dvalid], + valid_names=["train", "valid"], + early_stopping_rounds=early_stopping_rounds, + verbose_eval=verbose_eval, + evals_result=evals_result, + **kwargs + ) + evals_result["train"] = list(evals_result["train"].values())[0] + evals_result["valid"] = list(evals_result["valid"].values())[0] + + def predict(self, x_test): + print("predict test", x_test) + if self._model is None: + raise ValueError("model is not fitted yet!") + return self._model.predict(x_test.values) + + def score(self, x_test, y_test, w_test=None): + # Remove rows from x, y and w, which contain Nan in any columns in y_test. + x_test, y_test, w_test = drop_nan_by_y_index(x_test, y_test, w_test) + preds = self.predict(x_test) + w_test_weight = None if w_test is None else w_test.values + return self._scorer(y_test.values, preds, sample_weight=w_test_weight) + + def save(self, filename): + if self._model is None: + raise ValueError("model is not fitted yet!") + self._model.save_model(filename) + + def load(self, buffer): + self._model = lgb.Booster(params={"model_str": buffer.decode("utf-8")}) diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py new file mode 100644 index 0000000000..5402c25bd9 --- /dev/null +++ b/qlib/contrib/model/pytorch_nn.py @@ -0,0 +1,363 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import os +import numpy as np +import pandas as pd +from sklearn.metrics import roc_auc_score, mean_squared_error +import logging +from ...utils import unpack_archive_with_buffer, save_multiple_parts_file, create_save_path, drop_nan_by_y_index +from ...log import get_module_logger, TimeInspector + +import torch +import torch.nn as nn +import torch.optim as optim + +from .base import Model + + +class DNNModelPytorch(Model): + """DNN Model + + Parameters + ---------- + input_dim : int + input dimension + output_dim : int + output dimension + layers : tuple + layer sizes + lr : float + learning rate + lr_decay : float + learning rate decay + lr_decay_steps : int + learning rate decay steps + optimizer : str + optimizer name + GPU : str + the GPU ID(s) used for training + """ + + def __init__( + self, + input_dim, + output_dim, + layers=(256, 256, 128), + lr=0.001, + max_steps=300, + batch_size=2000, + early_stop_rounds=50, + eval_steps=20, + lr_decay=0.96, + lr_decay_steps=100, + optimizer="gd", + loss="mse", + GPU="0", + **kwargs + ): + # Set logger. + self.logger = get_module_logger("DNNModelPytorch") + self.logger.info("DNN pytorch version...") + + # set hyper-parameters. + self.layers = layers + self.lr = lr + self.max_steps = max_steps + self.batch_size = batch_size + self.early_stop_rounds = early_stop_rounds + self.eval_steps = eval_steps + self.lr_decay = lr_decay + self.lr_decay_steps = lr_decay_steps + self.optimizer = optimizer.lower() + self.loss_type = loss + self.visible_GPU = GPU + + self.logger.info( + "DNN parameters setting:" + "\nlayers : {}" + "\nlr : {}" + "\nmax_steps : {}" + "\nbatch_size : {}" + "\nearly_stop_rounds : {}" + "\neval_steps : {}" + "\nlr_decay : {}" + "\nlr_decay_steps : {}" + "\noptimizer : {}" + "\nloss_type : {}" + "\neval_steps : {}" + "\nvisible_GPU : {}".format( + layers, + lr, + max_steps, + batch_size, + early_stop_rounds, + eval_steps, + lr_decay, + lr_decay_steps, + optimizer, + loss, + eval_steps, + GPU, + ) + ) + + if loss not in {"mse", "binary"}: + raise NotImplementedError("loss {} is not supported!".format(loss)) + self._scorer = mean_squared_error if loss == "mse" else roc_auc_score + + self.dnn_model = Net(input_dim, output_dim, layers, loss=self.loss_type) + if optimizer.lower() == "adam": + self.train_optimizer = optim.Adam(self.dnn_model.parameters(), lr=self.lr) + elif optimizer.lower() == "gd": + self.train_optimizer = optim.SGD(self.dnn_model.parameters(), lr=self.lr) + else: + raise NotImplementedError("optimizer {} is not supported!".format(optimizer)) + + # Reduce learning rate when loss has stopped decrease + self.scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( + self.train_optimizer, + mode="min", + factor=0.5, + patience=10, + verbose=True, + threshold=0.0001, + threshold_mode="rel", + cooldown=0, + min_lr=0.00001, + eps=1e-08, + ) + + self._fitted = False + self.dnn_model.cuda() + + # set the visible GPU + if self.visible_GPU: + os.environ["CUDA_VISIBLE_DEVICES"] = self.visible_GPU + + def fit( + self, + x_train, + y_train, + x_valid, + y_valid, + w_train=None, + w_valid=None, + evals_result=dict(), + verbose=True, + save_path=None, + ): + + if w_train is None: + w_train = pd.DataFrame(np.ones_like(y_train.values), index=y_train.index) + if w_valid is None: + w_valid = pd.DataFrame(np.ones_like(y_valid.values), index=y_valid.index) + + save_path = create_save_path(save_path) + stop_steps = 0 + train_loss = 0 + best_loss = np.inf + evals_result["train"] = [] + evals_result["valid"] = [] + + # train + self.logger.info("training...") + self._fitted = True + + # prepare training data + x_train_values = torch.from_numpy(x_train.values).float() + y_train_values = torch.from_numpy(y_train.values).float() + w_train_values = torch.from_numpy(w_train.values).float() + train_num = y_train_values.shape[0] + + # prepare validation data + x_val_cuda = torch.from_numpy(x_valid.values).float() + y_val_cuda = torch.from_numpy(y_valid.values).float() + w_val_cuda = torch.from_numpy(w_valid.values).float() + + x_val_cuda = x_val_cuda.cuda() + y_val_cuda = y_val_cuda.cuda() + w_val_cuda = w_val_cuda.cuda() + + for step in range(self.max_steps): + if stop_steps >= self.early_stop_rounds: + if verbose: + self.logger.info("\tearly stop") + break + loss = AverageMeter() + self.dnn_model.train() + self.train_optimizer.zero_grad() + + choice = np.random.choice(train_num, self.batch_size) + x_batch = x_train_values[choice] + y_batch = y_train_values[choice] + w_batch = w_train_values[choice] + + x_batch_cuda = x_batch.float().cuda() + y_batch_cuda = y_batch.float().cuda() + w_batch_cuda = w_batch.float().cuda() + + # forward + preds = self.dnn_model(x_batch_cuda) + + cur_loss = self.get_loss(preds, w_batch_cuda, y_batch_cuda, self.loss_type) + cur_loss.backward() + self.train_optimizer.step() + loss.update(cur_loss.item()) + + # validation + train_loss += loss.val + if step and step % self.eval_steps == 0: + stop_steps += 1 + train_loss /= self.eval_steps + + with torch.no_grad(): + self.dnn_model.eval() + loss_val = AverageMeter() + + # forward + preds = self.dnn_model(x_val_cuda) + cur_loss_val = self.get_loss(preds, w_val_cuda, y_val_cuda, self.loss_type) + loss_val.update(cur_loss_val.item()) + if verbose: + self.logger.info( + "[Epoch {}]: train_loss {:.6f}, valid_loss {:.6f}".format(step, train_loss, loss_val.val) + ) + evals_result["train"].append(train_loss) + evals_result["valid"].append(loss_val.val) + if loss_val.val < best_loss: + if verbose: + self.logger.info( + "\tvalid loss update from {:.6f} to {:.6f}, save checkpoint.".format( + best_loss, loss_val.val + ) + ) + best_loss = loss_val.val + stop_steps = 0 + torch.save(self.dnn_model.state_dict(), save_path) + train_loss = 0 + # update learning rate + self.scheduler.step(cur_loss_val) + + # restore the optimal parameters after training + self.dnn_model.load_state_dict(torch.load(save_path)) + torch.cuda.empty_cache() + + def get_loss(self, pred, w, target, loss_type): + if loss_type == "mse": + sqr_loss = torch.mul(pred - target, pred - target) + loss = torch.mul(sqr_loss, w).mean() + return loss + elif loss_type == "binary": + loss = nn.BCELoss() + return loss(pred, target) + else: + raise NotImplementedError("loss {} is not supported!".format(loss_type)) + + def predict(self, x_test): + if not self._fitted: + raise ValueError("model is not fitted yet!") + x_test = torch.from_numpy(x_test.values).float().cuda() + self.dnn_model.eval() + preds = self.dnn_model(x_test).detach().cpu().numpy() + return preds + + def score(self, x_test, y_test, w_test=None): + # Remove rows from x, y and w, which contain Nan in any columns in y_test. + x_test, y_test, w_test = drop_nan_by_y_index(x_test, y_test, w_test) + preds = self.predict(x_test) + w_test_weight = None if w_test is None else w_test.values + return self._scorer(y_test.values, preds, sample_weight=w_test_weight) + + def save(self, filename, **kwargs): + with save_multiple_parts_file(filename) as model_dir: + model_path = os.path.join(model_dir, os.path.split(model_dir)[-1]) + # Save model + torch.save(self.dnn_model.state_dict(), model_path) + + def load(self, buffer, **kwargs): + with unpack_archive_with_buffer(buffer) as model_dir: + # Get model name + _model_name = os.path.splitext(list(filter(lambda x: x.startswith("model.bin"), os.listdir(model_dir)))[0])[ + 0 + ] + _model_path = os.path.join(model_dir, _model_name) + # Load model + self.dnn_model.load_state_dict(torch.load(_model_path)) + self._fitted = True + + def finetune(self, x_train, y_train, x_valid, y_valid, w_train=None, w_valid=None, **kwargs): + self.fit(x_train, y_train, x_valid, y_valid, w_train=w_train, w_valid=w_valid, **kwargs) + + +class AverageMeter(object): + """Computes and stores the average and current value""" + + def __init__(self): + self.reset() + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + + +class Net(nn.Module): + def __init__(self, input_dim, output_dim, layers=(256, 256, 256), loss="mse"): + super(Net, self).__init__() + layers = [input_dim] + list(layers) + self.hidden_layer_num = len(layers) + dnn_layers = [] + drop_input = nn.Dropout(0.1) + dnn_layers.append(drop_input) + for i, (input_dim, hidden_units) in enumerate(zip(layers[:-1], layers[1:])): + fc = nn.Linear(input_dim, hidden_units) + # drop = nn.Dropout(0.2) + # relu = nn.ReLU() + # activation = nn.Sigmoid() + activation = nn.Tanh() + bn = nn.BatchNorm1d(hidden_units) + seq = nn.Sequential(fc, activation, bn) + dnn_layers.append(seq) + + drop_output = nn.Dropout(0.1) + dnn_layers.append(drop_output) + self.dnn_layers = nn.ModuleList(dnn_layers) + + if loss == "mse": + fc = nn.Linear(hidden_units, output_dim) + self.output_layer = fc + + elif loss == "binary": + fc = nn.Linear(hidden_units, output_dim) + sigmoid = nn.Sigmoid() + self.output_layer = nn.Sequential(fc, sigmoid) + else: + raise NotImplementedError("loss {} is not supported!".format(loss)) + # optimizer + + self._weight_init() + + def _weight_init(self): + for m in self.modules(): + if isinstance(m, nn.Linear): + m.weight = nn.init.xavier_normal_(m.weight) + + def forward(self, x): + cur_input = x + for i in range(self.hidden_layer_num): + output = self.dnn_layers[i](cur_input) + cur_input = output + output = self.output_layer(output) + return output diff --git a/qlib/contrib/online/__init__.py b/qlib/contrib/online/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/qlib/contrib/online/executor.py b/qlib/contrib/online/executor.py new file mode 100644 index 0000000000..2bd0937a03 --- /dev/null +++ b/qlib/contrib/online/executor.py @@ -0,0 +1,291 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import re +import json +import copy +import pathlib +import pandas as pd +from ...data import D +from ...utils import get_date_in_file_name +from ...utils import get_pre_trading_date +from ..backtest.order import Order + + +class BaseExecutor: + """ + # Strategy framework document + + class Executor(BaseExecutor): + """ + + def execute(self, trade_account, order_list, trade_date): + """ + return the executed result (trade_info) after trading at trade_date. + NOTICE: trade_account will not be modified after executing. + Parameter + --------- + trade_account : Account() + order_list : list + [Order()] + trade_date : pd.Timestamp + Return + --------- + trade_info : list + [Order(), float, float, float] + """ + raise NotImplementedError("get_execute_result for this model is not implemented.") + + def save_executed_file_from_trade_info(self, trade_info, user_path, trade_date): + """ + Save the trade_info to the .csv transaction file in disk + the columns of result file is + ['date', 'stock_id', 'direction', 'trade_val', 'trade_cost', 'trade_price', 'factor'] + Parameter + --------- + trade_info : list of [Order(), float, float, float] + (order, trade_val, trade_cost, trade_price), trade_info with out factor + user_path: str / pathlib.Path() + the sub folder to save user data + + transaction_path : string / pathlib.Path() + """ + YYYY, MM, DD = str(trade_date.date()).split("-") + folder_path = pathlib.Path(user_path) / "trade" / YYYY / MM + if not folder_path.exists(): + folder_path.mkdir(parents=True) + transaction_path = folder_path / "transaction_{}.csv".format(str(trade_date.date())) + columns = [ + "date", + "stock_id", + "direction", + "amount", + "trade_val", + "trade_cost", + "trade_price", + "factor", + ] + data = [] + for [order, trade_val, trade_cost, trade_price] in trade_info: + data.append( + [ + trade_date, + order.stock_id, + order.direction, + order.amount, + trade_val, + trade_cost, + trade_price, + order.factor, + ] + ) + df = pd.DataFrame(data, columns=columns) + df.to_csv(transaction_path, index=False) + + def load_trade_info_from_executed_file(self, user_path, trade_date): + YYYY, MM, DD = str(trade_date.date()).split("-") + file_path = pathlib.Path(user_path) / "trade" / YYYY / MM / "transaction_{}.csv".format(str(trade_date.date())) + if not file_path.exists(): + raise ValueError("File {} not exists!".format(file_path)) + + filedate = get_date_in_file_name(file_path) + transaction = pd.read_csv(file_path) + trade_info = [] + for i in range(len(transaction)): + date = transaction.loc[i]["date"] + if not date == filedate: + continue + # raise ValueError("date in transaction file {} not equal to it's file date{}".format(date, filedate)) + order = Order( + stock_id=transaction.loc[i]["stock_id"], + amount=transaction.loc[i]["amount"], + trade_date=transaction.loc[i]["date"], + direction=transaction.loc[i]["direction"], + factor=transaction.loc[i]["factor"], + ) + trade_val = transaction.loc[i]["trade_val"] + trade_cost = transaction.loc[i]["trade_cost"] + trade_price = transaction.loc[i]["trade_price"] + trade_info.append([order, trade_val, trade_cost, trade_price]) + return trade_info + + +class SimulatorExecutor(BaseExecutor): + def __init__(self, trade_exchange, verbose=False): + self.trade_exchange = trade_exchange + self.verbose = verbose + self.order_list = [] + + def execute(self, trade_account, order_list, trade_date): + """ + execute the order list, do the trading wil exchange at date. + Will not modify the trade_account. + Parameter + trade_account : Account() + order_list : list + list or orders + trade_date : pd.Timestamp + :return: + trade_info : list of [Order(), float, float, float] + (order, trade_val, trade_cost, trade_price), trade_info with out factor + """ + account = copy.deepcopy(trade_account) + trade_info = [] + + for order in order_list: + # check holding thresh is done in strategy + # if order.direction==0: # sell order + # # checking holding thresh limit for sell order + # if trade_account.current.get_stock_count(order.stock_id) < thresh: + # # can not sell this code + # continue + # is order executable + # check order + if self.trade_exchange.check_order(order) is True: + # execute the order + trade_val, trade_cost, trade_price = self.trade_exchange.deal_order(order, trade_account=account) + trade_info.append([order, trade_val, trade_cost, trade_price]) + if self.verbose: + if order.direction == Order.SELL: # sell + print( + "[I {:%Y-%m-%d}]: sell {}, price {:.2f}, amount {}, value {:.2f}.".format( + trade_date, + order.stock_id, + trade_price, + order.deal_amount, + trade_val, + ) + ) + else: + print( + "[I {:%Y-%m-%d}]: buy {}, price {:.2f}, amount {}, value {:.2f}.".format( + trade_date, + order.stock_id, + trade_price, + order.deal_amount, + trade_val, + ) + ) + + else: + if self.verbose: + print("[W {:%Y-%m-%d}]: {} wrong.".format(trade_date, order.stock_id)) + # do nothing + pass + return trade_info + + +def save_score_series(score_series, user_path, trade_date): + """Save the score_series into a .csv file. + The columns of saved file is + [stock_id, score] + + Parameter + --------- + order_list: [Order()] + list of Order() + date: pd.Timestamp + the date to save the order list + user_path: str / pathlib.Path() + the sub folder to save user data + """ + user_path = pathlib.Path(user_path) + YYYY, MM, DD = str(trade_date.date()).split("-") + folder_path = user_path / "score" / YYYY / MM + if not folder_path.exists(): + folder_path.mkdir(parents=True) + file_path = folder_path / "score_{}.csv".format(str(trade_date.date())) + score_series.to_csv(file_path) + + +def load_score_series(user_path, trade_date): + """Save the score_series into a .csv file. + The columns of saved file is + [stock_id, score] + + Parameter + --------- + order_list: [Order()] + list of Order() + date: pd.Timestamp + the date to save the order list + user_path: str / pathlib.Path() + the sub folder to save user data + """ + user_path = pathlib.Path(user_path) + YYYY, MM, DD = str(trade_date.date()).split("-") + folder_path = user_path / "score" / YYYY / MM + if not folder_path.exists(): + folder_path.mkdir(parents=True) + file_path = folder_path / "score_{}.csv".format(str(trade_date.date())) + score_series = pd.read_csv(file_path, index_col=0, header=None, names=["instrument", "score"]) + return score_series + + +def save_order_list(order_list, user_path, trade_date): + """ + Save the order list into a json file. + Will calculate the real amount in order according to factors at date. + + The format in json file like + {"sell": {"stock_id": amount, ...} + ,"buy": {"stock_id": amount, ...}} + + :param + order_list: [Order()] + list of Order() + date: pd.Timestamp + the date to save the order list + user_path: str / pathlib.Path() + the sub folder to save user data + """ + user_path = pathlib.Path(user_path) + YYYY, MM, DD = str(trade_date.date()).split("-") + folder_path = user_path / "trade" / YYYY / MM + if not folder_path.exists(): + folder_path.mkdir(parents=True) + sell = {} + buy = {} + for order in order_list: + if order.direction == 0: # sell + sell[order.stock_id] = [order.amount, order.factor] + else: + buy[order.stock_id] = [order.amount, order.factor] + order_dict = {"sell": sell, "buy": buy} + file_path = folder_path / "orderlist_{}.json".format(str(trade_date.date())) + with file_path.open("w") as fp: + json.dump(order_dict, fp) + + +def load_order_list(user_path, trade_date): + user_path = pathlib.Path(user_path) + YYYY, MM, DD = str(trade_date.date()).split("-") + path = user_path / "trade" / YYYY / MM / "orderlist_{}.json".format(str(trade_date.date())) + if not path.exists(): + raise ValueError("File {} not exists!".format(path)) + # get orders + with path.open("r") as fp: + order_dict = json.load(fp) + order_list = [] + for stock_id in order_dict["sell"]: + amount, factor = order_dict["sell"][stock_id] + order = Order( + stock_id=stock_id, + amount=amount, + trade_date=pd.Timestamp(trade_date), + direction=Order.SELL, + factor=factor, + ) + order_list.append(order) + for stock_id in order_dict["buy"]: + amount, factor = order_dict["buy"][stock_id] + order = Order( + stock_id=stock_id, + amount=amount, + trade_date=pd.Timestamp(trade_date), + direction=Order.BUY, + factor=factor, + ) + order_list.append(order) + return order_list diff --git a/qlib/contrib/online/manager.py b/qlib/contrib/online/manager.py new file mode 100644 index 0000000000..7e9c766e85 --- /dev/null +++ b/qlib/contrib/online/manager.py @@ -0,0 +1,147 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import os +import pickle +import yaml +import pathlib +import pandas as pd +import shutil +from ..backtest.account import Account +from ..backtest.exchange import Exchange +from .user import User +from .utils import load_instance +from .utils import save_instance, init_instance_by_config + + +class UserManager: + def __init__(self, user_data_path, save_report=True): + """ + This module is designed to manager the users in online system + all users' data were assumed to be saved in user_data_path + Parameter + user_data_path : string + data path that all users' data were saved in + + variables: + data_path : string + data path that all users' data were saved in + users_file : string + A path of the file record the add_date of users + save_report : bool + whether to save report after each trading process + users : dict{} + [user_id]->User() + the python dict save instances of User() for each user_id + user_record : pd.Dataframe + user_id(string), add_date(string) + indicate the add_date for each users + """ + self.data_path = pathlib.Path(user_data_path) + self.users_file = self.data_path / "users.csv" + self.save_report = save_report + self.users = {} + self.user_record = None + + def load_users(self): + """ + load all users' data into manager + """ + self.users = {} + self.user_record = pd.read_csv(self.users_file, index_col=0) + for user_id in self.user_record.index: + self.users[user_id] = self.load_user(user_id) + + def load_user(self, user_id): + """ + return a instance of User() represents a user to be processed + Parameter + user_id : string + :return + user : User() + """ + account_path = self.data_path / user_id + strategy_file = self.data_path / user_id / "strategy_{}.pickle".format(user_id) + model_file = self.data_path / user_id / "model_{}.pickle".format(user_id) + cur_user_list = [user_id for user_id in self.users] + if user_id in cur_user_list: + raise ValueError("User {} has been loaded".format(user_id)) + else: + trade_account = Account(0) + trade_account.load_account(account_path) + strategy = load_instance(strategy_file) + model = load_instance(model_file) + user = User(account=trade_account, strategy=strategy, model=model) + return user + + def save_user_data(self, user_id): + """ + save a instance of User() to user data path + Parameter + user_id : string + """ + if not user_id in self.users: + raise ValueError("Cannot find user {}".format(user_id)) + self.users[user_id].account.save_account(self.data_path / user_id) + save_instance( + self.users[user_id].strategy, + self.data_path / user_id / "strategy_{}.pickle".format(user_id), + ) + save_instance( + self.users[user_id].model, + self.data_path / user_id / "model_{}.pickle".format(user_id), + ) + + def add_user(self, user_id, config_file, add_date): + """ + add the new user {user_id} into user data + will create a new folder named "{user_id}" in user data path + Parameter + user_id : string + init_cash : int + config_file : str/pathlib.Path() + path of config file + """ + config_file = pathlib.Path(config_file) + if not config_file.exists(): + raise ValueError("Cannot find config file {}".format(config_file)) + user_path = self.data_path / user_id + if user_path.exists(): + raise ValueError("User data for {} already exists".format(user_id)) + + with config_file.open("r") as fp: + config = yaml.load(fp) + # load model + model = init_instance_by_config(config["model"]) + + # load strategy + strategy = init_instance_by_config(config["strategy"]) + init_args = strategy.get_init_args_from_model(model, add_date) + strategy.init(**init_args) + + # init Account + trade_account = Account(init_cash=config["init_cash"]) + + # save user + user_path.mkdir() + save_instance(model, self.data_path / user_id / "model_{}.pickle".format(user_id)) + save_instance(strategy, self.data_path / user_id / "strategy_{}.pickle".format(user_id)) + trade_account.save_account(self.data_path / user_id) + user_record = pd.read_csv(self.users_file, index_col=0) + user_record.loc[user_id] = [add_date] + user_record.to_csv(self.users_file) + + def remove_user(self, user_id): + """ + remove user {user_id} in current user dataset + will delete the folder "{user_id}" in user data path + :param + user_id : string + """ + user_path = self.data_path / user_id + if not user_path.exists(): + raise ValueError("Cannot find user data {}".format(user_id)) + shutil.rmtree(user_path) + user_record = pd.read_csv(self.users_file, index_col=0) + user_record.drop([user_id], inplace=True) + user_record.to_csv(self.users_file) diff --git a/qlib/contrib/online/online_model.py b/qlib/contrib/online/online_model.py new file mode 100644 index 0000000000..0e8c0cb19d --- /dev/null +++ b/qlib/contrib/online/online_model.py @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import random +import pandas as pd +from ...data import D +from ..model.base import Model + + +class ScoreFileModel(Model): + """ + This model will load a score file, and return score at date exists in score file. + """ + + def __init__(self, score_path): + pred_test = pd.read_csv(score_path, index_col=[0, 1], parse_dates=True, infer_datetime_format=True) + self.pred = pred_test + + def get_data_with_date(self, date, **kwargs): + score = self.pred.loc(axis=0)[:, date] # (stock_id, trade_date) multi_index, score in pdate + score_series = score.reset_index(level="datetime", drop=True)[ + "score" + ] # pd.Series ; index:stock_id, data: score + return score_series + + def predict(self, x_test, **kwargs): + return x_test + + def score(self, x_test, **kwargs): + return + + def fit(self, x_train, y_train, x_valid, y_valid, w_train=None, w_valid=None, **kwargs): + return + + def save(self, fname, **kwargs): + return diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py new file mode 100644 index 0000000000..500e732ffd --- /dev/null +++ b/qlib/contrib/online/operator.py @@ -0,0 +1,317 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import fire +import pandas as pd +import pathlib +import qlib +import logging + +from ...data import D +from ...log import get_module_logger +from ...utils import get_pre_trading_date, is_tradable_date +from ..evaluate import risk_analysis +from ..backtest.backtest import update_account + +from .manager import UserManager +from .utils import prepare +from .utils import create_user_folder +from .executor import load_order_list, save_order_list +from .executor import SimulatorExecutor +from .executor import save_score_series, load_score_series + + +class Operator(object): + def __init__(self, client: str): + """ + Parameters + ---------- + client: str + The qlib client config file(.yaml) + """ + self.logger = get_module_logger("online operator", level=logging.INFO) + self.client = client + + @staticmethod + def init(client, path, date=None): + """Initial UserManager(), get predict date and trade date + Parameters + ---------- + client: str + The qlib client config file(.yaml) + path : str + Path to save user account. + date : str (YYYY-MM-DD) + Trade date, when the generated order list will be traded. + Return + ---------- + um: UserManager() + pred_date: pd.Timestamp + trade_date: pd.Timestamp + """ + qlib.init_from_yaml_conf(client) + um = UserManager(user_data_path=pathlib.Path(path)) + um.load_users() + if not date: + trade_date, pred_date = None, None + else: + trade_date = pd.Timestamp(date) + if not is_tradable_date(trade_date): + raise ValueError("trade date is not tradable date".format(trade_date.date())) + pred_date = get_pre_trading_date(trade_date, future=True) + return um, pred_date, trade_date + + def add_user(self, id, config, path, date): + """Add a new user into the a folder to run 'online' module. + + Parameters + ---------- + id : str + User id, should be unique. + config : str + The file path (yaml) of user config + path : str + Path to save user account. + date : str (YYYY-MM-DD) + The date that user account was added. + """ + create_user_folder(path) + qlib.init_from_yaml_conf(self.client) + um = UserManager(user_data_path=path) + add_date = D.calendar(end_time=date)[-1] + if not is_tradable_date(add_date): + raise ValueError("add date is not tradable date".format(add_date.date())) + um.add_user(user_id=id, config_file=config, add_date=add_date) + + def remove_user(self, id, path): + """Remove user from folder used in 'online' module. + + Parameters + ---------- + id : str + User id, should be unique. + path : str + Path to save user account. + """ + um = UserManager(user_data_path=path) + um.remove_user(user_id=id) + + def generate(self, date, path): + """Generate order list that will be traded at 'date'. + + Parameters + ---------- + date : str (YYYY-MM-DD) + Trade date, when the generated order list will be traded. + path : str + Path to save user account. + """ + um, pred_date, trade_date = self.init(self.client, path, date) + for user_id, user in um.users.items(): + dates, trade_exchange = prepare(um, pred_date, user_id) + # get and save the score at predict date + input_data = user.model.get_data_with_date(pred_date) + score_series = user.model.predict(input_data) + save_score_series(score_series, (pathlib.Path(path) / user_id), trade_date) + + # update strategy (and model) + user.strategy.update(score_series, pred_date, trade_date) + + # generate and save order list + order_list = user.strategy.generate_order_list( + score_series=score_series, + current=user.account.current, + trade_exchange=trade_exchange, + trade_date=trade_date, + ) + save_order_list( + order_list=order_list, + user_path=(pathlib.Path(path) / user_id), + trade_date=trade_date, + ) + self.logger.info("Generate order list at {} for {}".format(trade_date, user_id)) + um.save_user_data(user_id) + + def execute(self, date, exchange_config, path): + """Execute the orderlist at 'date'. + + Parameters + ---------- + date : str (YYYY-MM-DD) + Trade date, that the generated order list will be traded. + exchange_config: str + The file path (yaml) of exchange config + path : str + Path to save user account. + """ + um, pred_date, trade_date = self.init(self.client, path, date) + for user_id, user in um.users.items(): + dates, trade_exchange = prepare(um, trade_date, user_id, exchange_config) + executor = SimulatorExecutor(trade_exchange=trade_exchange) + if not str(dates[0].date()) == str(pred_date.date()): + raise ValueError( + "The account data is not newest! last trading date {}, today {}".format( + dates[0].date(), trade_date.date() + ) + ) + + # load and execute the order list + # will not modify the trade_account after executing + order_list = load_order_list(user_path=(pathlib.Path(path) / user_id), trade_date=trade_date) + trade_info = executor.execute(order_list=order_list, trade_account=user.account, trade_date=trade_date) + executor.save_executed_file_from_trade_info( + trade_info=trade_info, + user_path=(pathlib.Path(path) / user_id), + trade_date=trade_date, + ) + self.logger.info("execute order list at {} for {}".format(trade_date.date(), user_id)) + + def update(self, date, path, type="SIM"): + """Update account at 'date'. + + Parameters + ---------- + date : str (YYYY-MM-DD) + Trade date, that the generated order list will be traded. + path : str + Path to save user account. + type : str + which executor was been used to execute the order list + 'SIM': SimulatorExecutor() + """ + if type not in ["SIM", "YC"]: + raise ValueError("type is invalid, {}".format(type)) + um, pred_date, trade_date = self.init(self.client, path, date) + for user_id, user in um.users.items(): + dates, trade_exchange = prepare(um, trade_date, user_id) + if type == "SIM": + executor = SimulatorExecutor(trade_exchange=trade_exchange) + else: + raise ValueError("not found executor") + # dates[0] is the last_trading_date + if str(dates[0].date()) > str(pred_date.date()): + raise ValueError( + "The account data is not newest! last trading date {}, today {}".format( + dates[0].date(), trade_date.date() + ) + ) + # load trade info and update account + trade_info = executor.load_trade_info_from_executed_file( + user_path=(pathlib.Path(path) / user_id), trade_date=trade_date + ) + score_series = load_score_series((pathlib.Path(path) / user_id), trade_date) + update_account(user.account, trade_info, trade_exchange, trade_date) + + report = user.account.report.generate_report_dataframe() + self.logger.info(report) + um.save_user_data(user_id) + self.logger.info("Update account state {} for {}".format(trade_date, user_id)) + + def simulate(self, id, config, exchange_config, start, end, path, bench="SH000905"): + """Run the ( generate_order_list -> execute_order_list -> update_account) process everyday + from start date to end date. + + Parameters + ---------- + id : str + user id, need to be unique + config : str + The file path (yaml) of user config + exchange_config: str + The file path (yaml) of exchange config + start : str "YYYY-MM-DD" + The start date to run the online simulate + end : str "YYYY-MM-DD" + The end date to run the online simulate + path : str + Path to save user account. + bench : str + The benchmark that our result compared with. + 'SH000905' for csi500, 'SH000300' for csi300 + """ + # Clear the current user if exists, then add a new user. + create_user_folder(path) + um = self.init(self.client, path, None)[0] + start_date, end_date = pd.Timestamp(start), pd.Timestamp(end) + try: + um.remove_user(user_id=id) + except BaseException: + pass + um.add_user(user_id=id, config_file=config, add_date=pd.Timestamp(start_date)) + + # Do the online simulate + um.load_users() + user = um.users[id] + dates, trade_exchange = prepare(um, end_date, id, exchange_config) + executor = SimulatorExecutor(trade_exchange=trade_exchange) + for pred_date, trade_date in zip(dates[:-2], dates[1:-1]): + user_path = pathlib.Path(path) / id + + # 1. load and save score_series + input_data = user.model.get_data_with_date(pred_date) + score_series = user.model.predict(input_data) + save_score_series(score_series, (pathlib.Path(path) / id), trade_date) + + # 2. update strategy (and model) + user.strategy.update(score_series, pred_date, trade_date) + + # 3. generate and save order list + order_list = user.strategy.generate_order_list( + score_series=score_series, + current=user.account.current, + trade_exchange=trade_exchange, + trade_date=trade_date, + ) + save_order_list(order_list=order_list, user_path=user_path, trade_date=trade_date) + + # 4. auto execute order list + order_list = load_order_list(user_path=user_path, trade_date=trade_date) + trade_info = executor.execute(trade_account=user.account, order_list=order_list, trade_date=trade_date) + executor.save_executed_file_from_trade_info( + trade_info=trade_info, user_path=user_path, trade_date=trade_date + ) + # 5. update account state + trade_info = executor.load_trade_info_from_executed_file(user_path=user_path, trade_date=trade_date) + update_account(user.account, trade_info, trade_exchange, trade_date) + report = user.account.report.generate_report_dataframe() + self.logger.info(report) + um.save_user_data(id) + self.show(id, path, bench) + + def show(self, id, path, bench="SH000905"): + """show the newly report (mean, std, sharpe, annual) + + Parameters + ---------- + id : str + user id, need to be unique + path : str + Path to save user account. + bench : str + The benchmark that our result compared with. + 'SH000905' for csi500, 'SH000300' for csi300 + """ + um = self.init(self.client, path, None)[0] + if id not in um.users: + raise ValueError("Cannot find user ".format(id)) + bench = D.features([bench], ["$change"]).loc[bench, "$change"] + report = um.users[id].account.report.generate_report_dataframe() + report["bench"] = bench + analysis_result = {} + r = (report["return"] - report["bench"]).dropna() + analysis_result["sub_bench"] = risk_analysis(r) + r = (report["return"] - report["bench"] - report["cost"]).dropna() + analysis_result["sub_cost"] = risk_analysis(r) + print("Result:") + print("sub_bench:") + print(analysis_result["sub_bench"]) + print("sub_cost:") + print(analysis_result["sub_cost"]) + + +def run(): + fire.Fire(Operator) + + +if __name__ == "__main__": + run() diff --git a/qlib/contrib/online/user.py b/qlib/contrib/online/user.py new file mode 100644 index 0000000000..d8a8fdabe3 --- /dev/null +++ b/qlib/contrib/online/user.py @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import logging + +from ...log import get_module_logger +from ..evaluate import risk_analysis +from ...data import D + + +class User: + def __init__(self, account, strategy, model, verbose=False): + """ + A user in online system, which contains account, strategy and model three module. + Parameter + account : Account() + strategy : + a strategy instance + model : + a model instance + report_save_path : string + the path to save report. Will not save report if None + verbose : bool + Whether to print the info during the process + """ + self.logger = get_module_logger("User", level=logging.INFO) + self.account = account + self.strategy = strategy + self.model = model + self.verbose = verbose + + def init_state(self, date): + """ + init state when each trading date begin + Parameter + date : pd.Timestamp + """ + self.account.init_state(today=date) + self.strategy.init_state(trade_date=date, model=self.model, account=self.account) + return + + def get_latest_trading_date(self): + """ + return the latest trading date for user {user_id} + Parameter + user_id : string + :return + date : string (e.g '2018-10-08') + """ + if not self.account.last_trade_date: + return None + return str(self.account.last_trade_date.date()) + + def showReport(self, benchmark="SH000905"): + """ + show the newly report (mean, std, sharpe, annual) + Parameter + benchmark : string + bench that to be compared, 'SH000905' for csi500 + """ + bench = D.features([benchmark], ["$change"], disk_cache=True).loc[benchmark, "$change"] + report = self.account.report.generate_report_dataframe() + report["bench"] = bench + analysis_result = {"pred": {}, "sub_bench": {}, "sub_cost": {}} + r = (report["return"] - report["bench"]).dropna() + analysis_result["sub_bench"][0] = risk_analysis(r) + r = (report["return"] - report["bench"] - report["cost"]).dropna() + analysis_result["sub_cost"][0] = risk_analysis(r) + self.logger.info("Result of porfolio:") + self.logger.info("sub_bench:") + self.logger.info(analysis_result["sub_bench"][0]) + self.logger.info("sub_cost:") + self.logger.info(analysis_result["sub_cost"][0]) + return report diff --git a/qlib/contrib/online/utils.py b/qlib/contrib/online/utils.py new file mode 100644 index 0000000000..cf08e4dbe9 --- /dev/null +++ b/qlib/contrib/online/utils.py @@ -0,0 +1,110 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pathlib +import pickle +import yaml +import pandas as pd +from ...data import D +from ...log import get_module_logger +from ...utils import get_module_by_module_path +from ...utils import get_next_trading_date +from ..backtest.exchange import Exchange + +log = get_module_logger("utils") + + +def load_instance(file_path): + """ + load a pickle file + Parameter + file_path : string / pathlib.Path() + path of file to be loaded + :return + An instance loaded from file + """ + file_path = pathlib.Path(file_path) + if not file_path.exists(): + raise ValueError("Cannot find file {}".format(file_path)) + with file_path.open("rb") as fr: + instance = pickle.load(fr) + return instance + + +def save_instance(instance, file_path): + """ + save(dump) an instance to a pickle file + Parameter + instance : + data to te dumped + file_path : string / pathlib.Path() + path of file to be dumped + """ + file_path = pathlib.Path(file_path) + with file_path.open("wb") as fr: + pickle.dump(instance, fr) + + +def init_instance_by_config(config): + """ + generate an instance with settings in config + Parameter + config : dict + python dict indicate a init parameters to create an item + :return + An instance + """ + module = get_module_by_module_path(config["module_path"]) + instance_class = getattr(module, config["class"]) + instance = instance_class(**config["args"]) + return instance + + +def create_user_folder(path): + path = pathlib.Path(path) + if path.exists(): + return + path.mkdir(parents=True) + head = pd.DataFrame(columns=("user_id", "add_date")) + head.to_csv(path / "users.csv", index=None) + + +def prepare(um, today, user_id, exchange_config=None): + """ + 1. Get the dates that need to do trading till today for user {user_id} + dates[0] indicate the latest trading date of User{user_id}, + if User{user_id} haven't do trading before, than dates[0] presents the init date of User{user_id}. + 2. Set the exchange with exchange_config file + + Parameter + um : UserManager() + today : pd.Timestamp() + user_id : str + :return + dates : list of pd.Timestamp + trade_exchange : Exchange() + """ + # get latest trading date for {user_id} + # if is None, indicate it haven't traded, then last trading date is init date of {user_id} + latest_trading_date = um.users[user_id].get_latest_trading_date() + if not latest_trading_date: + latest_trading_date = um.user_record.loc[user_id][0] + + if str(today.date()) < latest_trading_date: + log.warning("user_id:{}, last trading date {} after today {}".format(user_id, latest_trading_date, today)) + return [pd.Timestamp(latest_trading_date)], None + + dates = D.calendar( + start_time=pd.Timestamp(latest_trading_date), + end_time=pd.Timestamp(today), + future=True, + ) + dates = list(dates) + dates.append(get_next_trading_date(dates[-1], future=True)) + if exchange_config: + with pathlib.Path(exchange_config).open("r") as fp: + exchange_paras = yaml.load(fp) + else: + exchange_paras = {} + trade_exchange = Exchange(trade_dates=dates, **exchange_paras) + return dates, trade_exchange diff --git a/qlib/contrib/report/__init__.py b/qlib/contrib/report/__init__.py new file mode 100644 index 0000000000..06309f4120 --- /dev/null +++ b/qlib/contrib/report/__init__.py @@ -0,0 +1,11 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +GRAPH_NAME_LISt = [ + "analysis_position.report_graph", + "analysis_position.score_ic_graph", + "analysis_position.cumulative_return_graph", + "analysis_position.risk_analysis_graph", + "analysis_position.rank_label_graph", + "analysis_model.model_performance_graph", +] diff --git a/qlib/contrib/report/analysis_model/__init__.py b/qlib/contrib/report/analysis_model/__init__.py new file mode 100644 index 0000000000..496805d671 --- /dev/null +++ b/qlib/contrib/report/analysis_model/__init__.py @@ -0,0 +1,4 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from .analysis_model_performance import model_performance_graph diff --git a/qlib/contrib/report/analysis_model/analysis_model_performance.py b/qlib/contrib/report/analysis_model/analysis_model_performance.py new file mode 100644 index 0000000000..51bfcba073 --- /dev/null +++ b/qlib/contrib/report/analysis_model/analysis_model_performance.py @@ -0,0 +1,304 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pandas as pd + +import plotly.tools as tls +import plotly.graph_objs as go + +import statsmodels.api as sm +import matplotlib.pyplot as plt + +from scipy import stats + +from ..graph import ScatterGraph, SubplotsGraph, BarGraph, HeatmapGraph + + +def _group_return( + pred_label: pd.DataFrame = None, reverse: bool = False, N: int = 5, **kwargs +) -> tuple: + """ + + :param pred_label: + :param reverse: + :param N: + :return: + """ + if reverse: + pred_label["score"] *= -1 + + pred_label = pred_label.sort_values("score", ascending=False) + + # Group1 ~ Group5 only consider the dropna values + pred_label_drop = pred_label.dropna(subset=["score"]) + + # Group + t_df = pd.DataFrame( + { + "Group-%d" + % (i + 1): pred_label_drop.groupby(level="datetime")["label"].apply( + lambda x: x[len(x) // N * i : len(x) // N * (i + 1)].mean() + ) + for i in range(N) + } + ) + t_df.index = pd.to_datetime(t_df.index) + + # Long-Short + t_df["long-short"] = t_df["Group-1"] - t_df["Group-%d" % N] + + # Long-Average + t_df["long-average"] = ( + t_df["Group-1"] - pred_label.groupby(level="datetime")["label"].mean() + ) + + t_df = t_df.dropna(how="all") # for days which does not contain label + # FIXME: support HIGH-FREQ + t_df.index = t_df.index.strftime("%Y-%m-%d") + # Cumulative Return By Group + group_scatter_figure = ScatterGraph( + t_df.cumsum(), + layout=dict( + title="Cumulative Return", xaxis=dict(type="category", tickangle=45) + ), + ).figure + + t_df = t_df.loc[:, ["long-short", "long-average"]] + _bin_size = ((t_df.max() - t_df.min()) / 20).min() + group_hist_figure = SubplotsGraph( + t_df, + kind_map=dict(kind="DistplotGraph", kwargs=dict(bin_size=_bin_size)), + subplots_kwargs=dict( + rows=1, + cols=2, + print_grid=False, + subplot_titles=["long-short", "long-average"], + ), + ).figure + + return group_scatter_figure, group_hist_figure + + +def _plot_qq(data: pd.Series = None, dist=stats.norm) -> go.Figure: + """ + + :param data: + :param dist: + :return: + """ + fig, ax = plt.subplots(figsize=(8, 5)) + _mpl_fig = sm.qqplot(data.dropna(), dist, fit=True, line="45", ax=ax) + return tls.mpl_to_plotly(_mpl_fig) + + +def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> tuple: + """ + + :param pred_label: + :param rank: + :return: + """ + if rank: + ic = pred_label.groupby(level="datetime").apply( + lambda x: x["label"].rank(pct=True).corr(x["score"].rank(pct=True)) + ) + else: + ic = pred_label.groupby(level="datetime").apply( + lambda x: x["label"].corr(x["score"]) + ) + + _index = ( + ic.index.get_level_values(0).astype("str").str.replace("-", "").str.slice(0, 6) + ) + _monthly_ic = ic.groupby(_index).mean() + _monthly_ic.index = pd.MultiIndex.from_arrays( + [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], + names=["year", "month"], + ) + + # fill month + _month_list = pd.date_range( + start=pd.Timestamp(f"{_index.min()[:4]}0101"), + end=pd.Timestamp(f"{_index.max()[:4]}1231"), + freq="1M", + ) + _years = [] + _month = [] + for _date in _month_list: + _date = _date.strftime("%Y%m%d") + _years.append(_date[:4]) + _month.append(_date[4:6]) + + fill_index = pd.MultiIndex.from_arrays([_years, _month], names=["year", "month"]) + + _monthly_ic = _monthly_ic.reindex(fill_index) + + _ic_df = ic.to_frame("ic") + ic_bar_figure = ic_figure(_ic_df, kwargs.get("show_nature_day", True)) + + ic_heatmap_figure = HeatmapGraph( + _monthly_ic.unstack(), + layout=dict(title="Monthly IC", yaxis=dict(tickformat=",d")), + graph_kwargs=dict(xtype="array", ytype="array"), + ).figure + + dist = stats.norm + _qqplot_fig = _plot_qq(ic, dist) + + if isinstance(dist, stats.norm.__class__): + dist_name = "Normal" + else: + dist_name = "Unknown" + + _bin_size = ((_ic_df.max() - _ic_df.min()) / 20).min() + _sub_graph_data = [ + ( + "ic", + dict( + row=1, + col=1, + name="", + kind="DistplotGraph", + graph_kwargs=dict(bin_size=_bin_size), + ), + ), + (_qqplot_fig, dict(row=1, col=2)), + ] + ic_hist_figure = SubplotsGraph( + _ic_df.dropna(), + kind_map=dict(kind="HistogramGraph", kwargs=dict()), + subplots_kwargs=dict( + rows=1, + cols=2, + print_grid=False, + subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name], + ), + sub_graph_data=_sub_graph_data, + layout=dict( + yaxis2=dict(title="Observed Quantile"), + xaxis2=dict(title=f"{dist_name} Distribution Quantile"), + ), + ).figure + + return ic_bar_figure, ic_heatmap_figure, ic_hist_figure + + +def _pred_autocorr(pred_label: pd.DataFrame, lag=1, **kwargs) -> tuple: + pred = pred_label.copy() + pred["score_last"] = pred.groupby(level="instrument")["score"].shift(lag) + ac = pred.groupby(level="datetime").apply( + lambda x: x["score"].rank(pct=True).corr(x["score_last"].rank(pct=True)) + ) + # FIXME: support HIGH-FREQ + _df = ac.to_frame("value") + _df.index = _df.index.strftime("%Y-%m-%d") + ac_figure = ScatterGraph( + _df, + layout=dict( + title="Auto Correlation", xaxis=dict(type="category", tickangle=45) + ), + ).figure + return (ac_figure,) + + +def _pred_turnover(pred_label: pd.DataFrame, N=5, lag=1, **kwargs) -> tuple: + pred = pred_label.copy() + pred["score_last"] = pred.groupby(level="instrument")["score"].shift(lag) + top = pred.groupby(level="datetime").apply( + lambda x: 1 + - x.nlargest(len(x) // N, columns="score") + .index.isin(x.nlargest(len(x) // N, columns="score_last").index) + .sum() + / (len(x) // N) + ) + bottom = pred.groupby(level="datetime").apply( + lambda x: 1 + - x.nsmallest(len(x) // N, columns="score") + .index.isin(x.nsmallest(len(x) // N, columns="score_last").index) + .sum() + / (len(x) // N) + ) + r_df = pd.DataFrame({"Top": top, "Bottom": bottom,}) + # FIXME: support HIGH-FREQ + r_df.index = r_df.index.strftime("%Y-%m-%d") + turnover_figure = ScatterGraph( + r_df, + layout=dict( + title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45) + ), + ).figure + return (turnover_figure,) + + +def ic_figure(ic_df: pd.DataFrame, show_nature_day=True, **kwargs) -> go.Figure: + """IC figure + + :param ic_df: ic DataFrame + :param show_nature_day: whether to display the abscissa of non-trading day + :return: plotly.graph_objs.Figure + """ + if show_nature_day: + date_index = pd.date_range(ic_df.index.min(), ic_df.index.max()) + ic_df = ic_df.reindex(date_index) + # FIXME: support HIGH-FREQ + ic_df.index = ic_df.index.strftime("%Y-%m-%d") + ic_bar_figure = BarGraph( + ic_df, + layout=dict( + title="Information Coefficient (IC)", + xaxis=dict(type="category", tickangle=45), + ), + ).figure + return ic_bar_figure + + +def model_performance_graph( + pred_label: pd.DataFrame, + lag: int = 1, + N: int = 5, + reverse=False, + rank=False, + graph_names: list = ["group_return", "pred_ic", "pred_autocorr", "pred_turnover"], + show_notebook: bool = True, + show_nature_day=True, +) -> [list, tuple]: + """Model performance + + :param pred_label: index is **pd.MultiIndex**, index name is **[instrument, datetime]**; columns names is **[score, label]** + + + .. code-block:: python + + instrument datetime score label + SH600004 2017-12-11 -0.013502 -0.013502 + 2017-12-12 -0.072367 -0.072367 + 2017-12-13 -0.068605 -0.068605 + 2017-12-14 0.012440 0.012440 + 2017-12-15 -0.102778 -0.102778 + + + :param lag: `pred.groupby(level='instrument')['score'].shift(lag)`. It will be only used in the auto-correlation computing. + :param N: group number, default 5 + :param reverse: if `True`, `pred['score'] *= -1` + :param rank: if **True**, calculate rank ic + :param graph_names: graph names; default ['cumulative_return', 'pred_ic', 'pred_autocorr', 'pred_turnover'] + :param show_notebook: whether to display graphics in notebook, the default is `True` + :param show_nature_day: whether to display the abscissa of non-trading day + :return: if show_notebook is True, display in notebook; else return `plotly.graph_objs.Figure` list + """ + figure_list = [] + for graph_name in graph_names: + fun_res = eval(f"_{graph_name}")( + pred_label=pred_label, + lag=lag, + N=N, + reverse=reverse, + rank=rank, + show_nature_day=show_nature_day, + ) + figure_list += fun_res + + if show_notebook: + BarGraph.show_graph_in_notebook(figure_list) + else: + return figure_list diff --git a/qlib/contrib/report/analysis_position/__init__.py b/qlib/contrib/report/analysis_position/__init__.py new file mode 100644 index 0000000000..86d8803dd2 --- /dev/null +++ b/qlib/contrib/report/analysis_position/__init__.py @@ -0,0 +1,8 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from .cumulative_return import cumulative_return_graph +from .score_ic import score_ic_graph +from .report import report_graph +from .rank_label import rank_label_graph +from .risk_analysis import risk_analysis_graph diff --git a/qlib/contrib/report/analysis_position/cumulative_return.py b/qlib/contrib/report/analysis_position/cumulative_return.py new file mode 100644 index 0000000000..c31179bab0 --- /dev/null +++ b/qlib/contrib/report/analysis_position/cumulative_return.py @@ -0,0 +1,281 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import copy +from typing import Iterable + +import pandas as pd +import plotly.graph_objs as go + +from ..graph import BaseGraph, SubplotsGraph + +from ..analysis_position.parse_position import get_position_data + + +def _get_cum_return_data_with_position( + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + start_date=None, + end_date=None, +): + """ + + :param position: + :param report_normal: + :param label_data: + :param start_date: + :param end_date: + :return: + """ + _cumulative_return_df = get_position_data( + position=position, + report_normal=report_normal, + label_data=label_data, + start_date=start_date, + end_date=end_date, + ).copy() + + _cumulative_return_df["label"] = ( + _cumulative_return_df["label"] - _cumulative_return_df["bench"] + ) + _cumulative_return_df = _cumulative_return_df.dropna() + df_gp = _cumulative_return_df.groupby(level="datetime") + result_list = [] + for gp in df_gp: + date = gp[0] + day_df = gp[1] + + _hold_df = day_df[day_df["status"] == 0] + _buy_df = day_df[day_df["status"] == 1] + _sell_df = day_df[day_df["status"] == -1] + + hold_value = (_hold_df["label"] * _hold_df["weight"]).sum() + hold_weight = _hold_df["weight"].sum() + hold_mean = (hold_value / hold_weight) if hold_weight else 0 + + sell_value = (_sell_df["label"] * _sell_df["weight"]).sum() + sell_weight = _sell_df["weight"].sum() + sell_mean = (sell_value / sell_weight) if sell_weight else 0 + + buy_value = (_buy_df["label"] * _buy_df["weight"]).sum() + buy_weight = _buy_df["weight"].sum() + buy_mean = (buy_value / buy_weight) if buy_weight else 0 + + result_list.append( + dict( + hold_value=hold_value, + hold_mean=hold_mean, + hold_weight=hold_weight, + buy_value=buy_value, + buy_mean=buy_mean, + buy_weight=buy_weight, + sell_value=sell_value, + sell_mean=sell_mean, + sell_weight=sell_weight, + buy_minus_sell_value=buy_value - sell_value, + buy_minus_sell_mean=buy_mean - sell_mean, + buy_plus_sell_weight=buy_weight + sell_weight, + date=date, + ) + ) + + r_df = pd.DataFrame(data=result_list) + r_df["cum_hold"] = r_df["hold_mean"].cumsum() + r_df["cum_buy"] = r_df["buy_mean"].cumsum() + r_df["cum_sell"] = r_df["sell_mean"].cumsum() + r_df["cum_buy_minus_sell"] = r_df["buy_minus_sell_mean"].cumsum() + return r_df + + +def _get_figure_with_position( + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + start_date=None, + end_date=None, +) -> Iterable[go.Figure]: + """Get average analysis figures + + :param position: position + :param report_normal: + :param label_data: + :param start_date: + :param end_date: + :return: + """ + + cum_return_df = _get_cum_return_data_with_position( + position, report_normal, label_data, start_date, end_date + ) + cum_return_df = cum_return_df.set_index("date") + # FIXME: support HIGH-FREQ + cum_return_df.index = cum_return_df.index.strftime('%Y-%m-%d') + + # Create figures + for _t_name in ["buy", "sell", "buy_minus_sell", "hold"]: + sub_graph_data = [ + ( + "cum_{}".format(_t_name), + dict( + row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"} + ), + ), + ( + "{}_weight".format( + _t_name.replace("minus", "plus") if "minus" in _t_name else _t_name + ), + dict(row=2, col=1), + ), + ( + "{}_value".format(_t_name), + dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}), + ), + ] + + _default_xaxis = dict(showline=False, zeroline=True, tickangle=45) + _default_yaxis = dict(zeroline=True, showline=True, showticklabels=True) + sub_graph_layout = dict( + xaxis1=dict(**_default_xaxis, type="category", showticklabels=False), + xaxis3=dict(**_default_xaxis, type="category"), + xaxis2=_default_xaxis, + yaxis1=dict(**_default_yaxis, title=_t_name), + yaxis2=_default_yaxis, + yaxis3=_default_yaxis, + ) + + mean_value = cum_return_df["{}_value".format(_t_name)].mean() + layout = dict( + height=500, + title=f"{_t_name}(the red line in the histogram on the right represents the average)", + shapes=[ + { + "type": "line", + "xref": "x2", + "yref": "paper", + "x0": mean_value, + "y0": 0, + "x1": mean_value, + "y1": 1, + # NOTE: 'fillcolor': '#d3d3d3', 'opacity': 0.3, + "line": {"color": "red", "width": 1}, + }, + ], + ) + + kind_map = dict(kind="ScatterGraph", kwargs=dict(mode="lines+markers")) + specs = [ + [{"rowspan": 1}, {"rowspan": 2}], + [{"rowspan": 1}, None], + ] + subplots_kwargs = dict( + vertical_spacing=0.01, + rows=2, + cols=2, + row_width=[1, 2], + column_width=[3, 1], + print_grid=False, + specs=specs, + ) + yield SubplotsGraph( + cum_return_df, + layout=layout, + kind_map=kind_map, + sub_graph_layout=sub_graph_layout, + sub_graph_data=sub_graph_data, + subplots_kwargs=subplots_kwargs, + ).figure + + +def cumulative_return_graph( + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + show_notebook=True, + start_date=None, + end_date=None, +) -> Iterable[go.Figure]: + """Backtest buy, sell, and holding cumulative return graph + + Example: + + + .. code-block:: python + + from qlib.data import D + from qlib.contrib.evaluate import risk_analysis, backtest, long_short_backtest + from qlib.contrib.strategy import TopkAmountStrategy + + # backtest parameters + bparas = {} + bparas['limit_threshold'] = 0.095 + bparas['account'] = 1000000000 + + sparas = {} + sparas['topk'] = 50 + sparas['buffer_margin'] = 230 + strategy = TopkAmountStrategy(**sparas) + + report_normal_df, positions = backtest(pred_df, strategy, **bparas) + + pred_df_dates = pred_df.index.get_level_values(level='datetime') + features_df = D.features(D.instruments('csi500'), ['Ref($close, -1)/$close - 1'], pred_df_dates.min(), pred_df_dates.max()) + features_df.columns = ['label'] + + qcr.cumulative_return_graph(positions, report_normal_df, features_df) + + + Graph desc: + - Axis X: Trading day + - Axis Y: + - Above axis Y: (((Ref($close, -1)/$close - 1) * weight).sum() / weight.sum()).cumsum() + - Below axis Y: Daily weight sum + - In the sell graph, y < 0 stands for profit; in other cases, y > 0 stands for profit. + - In the buy_minus_sell graph, the y value of the weight graph at the bottom is buy_weight + sell_weight. + - In each graph, the red line in the histogram on the right represents the average. + + :param position: position data + :param report_normal: + + + .. code-block:: python + + return cost bench turnover + date + 2017-01-04 0.003421 0.000864 0.011693 0.576325 + 2017-01-05 0.000508 0.000447 0.000721 0.227882 + 2017-01-06 -0.003321 0.000212 -0.004322 0.102765 + 2017-01-09 0.006753 0.000212 0.006874 0.105864 + 2017-01-10 -0.000416 0.000440 -0.003350 0.208396 + + + :param label_data: `D.features` result; index is `pd.MultiIndex`, index name is [`instrument`, `datetime`]; columns names is [`label`]. + **The ``label`` T is the change from T to T+1**, it is recommended to use ``close``, example: D.features(D.instruments('csi500'), ['Ref($close, -1)/$close-1']) + + + .. code-block:: python + + label + instrument datetime + SH600004 2017-12-11 -0.013502 + 2017-12-12 -0.072367 + 2017-12-13 -0.068605 + 2017-12-14 0.012440 + 2017-12-15 -0.102778 + + + :param show_notebook: True or False. If True, show graph in notebook, else return figures + :param start_date: start date + :param end_date: end date + :return: + """ + position = copy.deepcopy(position) + report_normal = report_normal.copy() + label_data.columns = ["label"] + _figures = _get_figure_with_position( + position, report_normal, label_data, start_date, end_date + ) + if show_notebook: + BaseGraph.show_graph_in_notebook(_figures) + else: + return _figures diff --git a/qlib/contrib/report/analysis_position/parse_position.py b/qlib/contrib/report/analysis_position/parse_position.py new file mode 100644 index 0000000000..c3a7807e36 --- /dev/null +++ b/qlib/contrib/report/analysis_position/parse_position.py @@ -0,0 +1,187 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pandas as pd + + +from ...backtest.profit_attribution import get_stock_weight_df + + +def parse_position(position: dict = None) -> pd.DataFrame: + """Parse position dict to position DataFrame + + :param position: position data + :return: position DataFrame; + + + .. code-block:: python + + position_df = parse_position(positions) + print(position_df.head()) + # status: 0-hold, -1-sell, 1-buy + + amount cash count price status weight + instrument datetime + SZ000547 2017-01-04 44.154290 211405.285654 1 205.189575 1 0.031255 + SZ300202 2017-01-04 60.638845 211405.285654 1 154.356506 1 0.032290 + SH600158 2017-01-04 46.531681 211405.285654 1 153.895142 1 0.024704 + SH600545 2017-01-04 197.173093 211405.285654 1 48.607037 1 0.033063 + SZ000930 2017-01-04 103.938300 211405.285654 1 80.759453 1 0.028958 + + + """ + + position_weight_df = get_stock_weight_df(position) + # If the day does not exist, use the last weight + position_weight_df.fillna(method="ffill", inplace=True) + + previous_data = {"date": None, "code_list": []} + + result_df = pd.DataFrame() + for _trading_date, _value in position.items(): + # pd_date type: pd.Timestamp + _cash = _value.pop("cash") + for _item in ["today_account_value"]: + if _item in _value: + _value.pop(_item) + + _trading_day_df = pd.DataFrame.from_dict(_value, orient="index") + _trading_day_df["weight"] = position_weight_df.loc[_trading_date] + _trading_day_df["cash"] = _cash + _trading_day_df["date"] = _trading_date + # status: 0-hold, -1-sell, 1-buy + _trading_day_df["status"] = 0 + + # T not exist, T-1 exist, T sell + _cur_day_sell = set(previous_data["code_list"]) - set(_trading_day_df.index) + # T exist, T-1 not exist, T buy + _cur_day_buy = set(_trading_day_df.index) - set(previous_data["code_list"]) + + # Trading day buy + _trading_day_df.loc[_trading_day_df.index.isin(_cur_day_buy), "status"] = 1 + + # Trading day sell + if not result_df.empty: + _trading_day_sell_df = result_df.loc[ + (result_df["date"] == previous_data["date"]) + & (result_df.index.isin(_cur_day_sell)) + ].copy() + if not _trading_day_sell_df.empty: + _trading_day_sell_df["status"] = -1 + _trading_day_sell_df["date"] = _trading_date + _trading_day_df = _trading_day_df.append( + _trading_day_sell_df, sort=False + ) + + result_df = result_df.append(_trading_day_df, sort=True) + + previous_data = dict( + date=_trading_date, + code_list=_trading_day_df[_trading_day_df["status"] != -1].index, + ) + + result_df.reset_index(inplace=True) + result_df.rename(columns={"date": "datetime", "index": "instrument"}, inplace=True) + return result_df.set_index(["instrument", "datetime"]) + + +def _add_label_to_position( + position_df: pd.DataFrame, label_data: pd.DataFrame +) -> pd.DataFrame: + """Concat position with custom label + + :param position_df: position DataFrame + :param label_data: + :return: concat result + """ + + _start_time = position_df.index.get_level_values(level="datetime").min() + _end_time = position_df.index.get_level_values(level="datetime").max() + label_data = label_data.loc(axis=0)[:, pd.to_datetime(_start_time) :] + _result_df = pd.concat([position_df, label_data], axis=1, sort=True).reindex( + label_data.index + ) + _result_df = _result_df.loc[_result_df.index.get_level_values(1) <= _end_time] + return _result_df + + +def _add_bench_to_position( + position_df: pd.DataFrame = None, bench: pd.Series = None +) -> pd.DataFrame: + """Concat position with bench + + :param position_df: position DataFrame + :param bench: report normal data + :return: concat result + """ + _temp_df = position_df.reset_index(level="instrument") + # FIXME: After the stock is bought and sold, the rise and fall of the next trading day are calculated. + _temp_df["bench"] = bench.shift(-1) + res_df = _temp_df.set_index(["instrument", _temp_df.index]) + return res_df + + +def _calculate_label_rank(df: pd.DataFrame) -> pd.DataFrame: + """calculate label rank + + :param df: + :return: + """ + _label_name = "label" + + def _calculate_day_value(g_df: pd.DataFrame): + g_df = g_df.copy() + g_df["rank_ratio"] = g_df[_label_name].rank(ascending=False) / len(g_df) * 100 + + # Sell: -1, Hold: 0, Buy: 1 + for i in [-1, 0, 1]: + g_df.loc[g_df["status"] == i, "rank_label_mean"] = g_df[ + g_df["status"] == i + ]["rank_ratio"].mean() + + g_df["excess_return"] = g_df[_label_name] - g_df[_label_name].mean() + return g_df + + return df.groupby(level="datetime").apply(_calculate_day_value) + + +def get_position_data( + position: dict, + label_data: pd.DataFrame, + report_normal: pd.DataFrame = None, + calculate_label_rank=False, + start_date=None, + end_date=None, +) -> pd.DataFrame: + """Concat position data with pred/report_normal + + :param position: position data + :param report_normal: report normal, must be container 'bench' column + :param label_data: + :param calculate_label_rank: + :param start_date: start date + :param end_date: end date + :return: concat result, + columns: ['amount', 'cash', 'count', 'price', 'status', 'weight', 'label', + 'rank_ratio', 'rank_label_mean', 'excess_return', 'score', 'bench'] + index: ['instrument', 'date'] + """ + _position_df = parse_position(position) + + # Add custom_label, rank_ratio, rank_mean, and excess_return field + _position_df = _add_label_to_position(_position_df, label_data) + + if calculate_label_rank: + _position_df = _calculate_label_rank(_position_df) + + if report_normal is not None: + # Add bench field + _position_df = _add_bench_to_position(_position_df, report_normal["bench"]) + + _date_list = _position_df.index.get_level_values(level="datetime") + start_date = _date_list.min() if start_date is None else start_date + end_date = _date_list.max() if end_date is None else end_date + _position_df = _position_df.loc[ + (start_date <= _date_list) & (_date_list <= end_date) + ] + return _position_df diff --git a/qlib/contrib/report/analysis_position/rank_label.py b/qlib/contrib/report/analysis_position/rank_label.py new file mode 100644 index 0000000000..75b42f033f --- /dev/null +++ b/qlib/contrib/report/analysis_position/rank_label.py @@ -0,0 +1,127 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import copy +from typing import Iterable + +import pandas as pd +import plotly.graph_objs as go + +from ..graph import ScatterGraph +from ..analysis_position.parse_position import get_position_data + + +def _get_figure_with_position( + position: dict, label_data: pd.DataFrame, start_date=None, end_date=None +) -> Iterable[go.Figure]: + """Get average analysis figures + + :param position: position + :param label_data: + :param start_date: + :param end_date: + :return: + """ + _position_df = get_position_data( + position, + label_data, + calculate_label_rank=True, + start_date=start_date, + end_date=end_date, + ) + + res_dict = dict() + _pos_gp = _position_df.groupby(level=1) + for _item in _pos_gp: + _date = _item[0] + _day_df = _item[1] + + _day_value = res_dict.setdefault(_date, {}) + for _i, _name in {0: "Hold", 1: "Buy", -1: "Sell"}.items(): + _temp_df = _day_df[_day_df["status"] == _i] + if _temp_df.empty: + _day_value[_name] = 0 + else: + _day_value[_name] = _temp_df["rank_label_mean"].values[0] + + _res_df = pd.DataFrame.from_dict(res_dict, orient="index") + # FIXME: support HIGH-FREQ + _res_df.index = _res_df.index.strftime('%Y-%m-%d') + for _col in _res_df.columns: + yield ScatterGraph( + _res_df.loc[:, [_col]], + layout=dict( + title=_col, + xaxis=dict(type="category", tickangle=45), + yaxis=dict(title="lable-rank-ratio: %"), + ), + graph_kwargs=dict(mode="lines+markers"), + ).figure + + +def rank_label_graph( + position: dict, + label_data: pd.DataFrame, + start_date=None, + end_date=None, + show_notebook=True, +) -> Iterable[go.Figure]: + """Ranking percentage of stocks buy, sell, and holding on the trading day. + Average rank-ratio(similar to **sell_df['label'].rank(ascending=False) / len(sell_df)**) of daily trading + + Example: + + + .. code-block:: python + + from qlib.data import D + from qlib.contrib.evaluate import backtest + from qlib.contrib.strategy import TopkAmountStrategy + + # backtest parameters + bparas = {} + bparas['limit_threshold'] = 0.095 + bparas['account'] = 1000000000 + + sparas = {} + sparas['topk'] = 50 + sparas['buffer_margin'] = 230 + strategy = TopkAmountStrategy(**sparas) + + _, positions = backtest(pred_df, strategy, **bparas) + + pred_df_dates = pred_df.index.get_level_values(level='datetime') + features_df = D.features(D.instruments('csi500'), ['Ref($close, -1)/$close-1'], pred_df_dates.min(), pred_df_dates.max()) + features_df.columns = ['label'] + + qcr.rank_label_graph(positions, features_df, pred_df_dates.min(), pred_df_dates.max()) + + + :param position: position data; **qlib.contrib.backtest.backtest.backtest** result + :param label_data: **D.features** result; index is **pd.MultiIndex**, index name is **[instrument, datetime]**; columns names is **[label]**. + **The ``label`` T is the change from T to T+1**, it is recommended to use ``close``, example: D.features(D.instruments('csi500'), ['Ref($close, -1)/$close-1']) + + + .. code-block:: python + + label + instrument datetime + SH600004 2017-12-11 -0.013502 + 2017-12-12 -0.072367 + 2017-12-13 -0.068605 + 2017-12-14 0.012440 + 2017-12-15 -0.102778 + + + :param start_date: start date + :param end_date: end_date + :param show_notebook: **True** or **False**. If True, show graph in notebook, else return figures + :return: + """ + position = copy.deepcopy(position) + label_data.columns = ["label"] + _figures = _get_figure_with_position(position, label_data, start_date, end_date) + if show_notebook: + ScatterGraph.show_graph_in_notebook(_figures) + else: + return _figures diff --git a/qlib/contrib/report/analysis_position/report.py b/qlib/contrib/report/analysis_position/report.py new file mode 100644 index 0000000000..680c6777fd --- /dev/null +++ b/qlib/contrib/report/analysis_position/report.py @@ -0,0 +1,220 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pandas as pd + +from ..graph import SubplotsGraph, BaseGraph + + +def _calculate_maximum(df: pd.DataFrame, is_ex: bool = False): + """ + + :param df: + :param is_ex: + :return: + """ + if is_ex: + end_date = df["cum_ex_return_wo_cost_mdd"].idxmin() + start_date = df.loc[df.index <= end_date]["cum_ex_return_wo_cost"].idxmax() + else: + end_date = df["return_wo_mdd"].idxmin() + start_date = df.loc[df.index <= end_date]["cum_return_wo_cost"].idxmax() + return start_date, end_date + + +def _calculate_mdd(series): + """ + Calculate mdd + + :param series: + :return: + """ + return series - series.cummax() + + +def _calculate_report_data(df: pd.DataFrame) -> pd.DataFrame: + """ + + :param df: + :return: + """ + + df.index = df.index.strftime("%Y-%m-%d") + + report_df = pd.DataFrame() + + report_df["cum_bench"] = df["bench"].cumsum() + report_df["cum_return_wo_cost"] = df["return"].cumsum() + report_df["cum_return_w_cost"] = (df["return"] - df["cost"]).cumsum() + # report_df['cum_return'] - report_df['cum_return'].cummax() + report_df["return_wo_mdd"] = _calculate_mdd(report_df["cum_return_wo_cost"]) + report_df["return_w_cost_mdd"] = _calculate_mdd( + (df["return"] - df["cost"]).cumsum() + ) + + report_df["cum_ex_return_wo_cost"] = (df["return"] - df["bench"]).cumsum() + report_df["cum_ex_return_w_cost"] = ( + df["return"] - df["bench"] - df["cost"] + ).cumsum() + report_df["cum_ex_return_wo_cost_mdd"] = _calculate_mdd( + (df["return"] - df["bench"]).cumsum() + ) + report_df["cum_ex_return_w_cost_mdd"] = _calculate_mdd( + (df["return"] - df["cost"] - df["bench"]).cumsum() + ) + # return_wo_mdd , return_w_cost_mdd, cum_ex_return_wo_cost_mdd, cum_ex_return_w + + report_df["turnover"] = df["turnover"] + report_df.sort_index(ascending=True, inplace=True) + return report_df + + +def _report_figure(df: pd.DataFrame) -> [list, tuple]: + """ + + :param df: + :return: + """ + + # Get data + report_df = _calculate_report_data(df) + + # Maximum Drawdown + max_start_date, max_end_date = _calculate_maximum(report_df) + ex_max_start_date, ex_max_end_date = _calculate_maximum(report_df, True) + + _temp_df = report_df.reset_index() + _temp_df.loc[-1] = 0 + _temp_df = _temp_df.shift(1) + _temp_df.loc[0, "index"] = "T0" + _temp_df.set_index("index", inplace=True) + _temp_df.iloc[0] = 0 + report_df = _temp_df + + # Create figure + _default_kind_map = dict(kind="ScatterGraph", kwargs={"mode": "lines+markers"}) + _temp_fill_args = {"fill": "tozeroy", "mode": "lines+markers"} + _column_row_col_dict = [ + ("cum_bench", dict(row=1, col=1)), + ("cum_return_wo_cost", dict(row=1, col=1)), + ("cum_return_w_cost", dict(row=1, col=1)), + ("return_wo_mdd", dict(row=2, col=1, graph_kwargs=_temp_fill_args)), + ("return_w_cost_mdd", dict(row=3, col=1, graph_kwargs=_temp_fill_args)), + ("cum_ex_return_wo_cost", dict(row=4, col=1)), + ("cum_ex_return_w_cost", dict(row=4, col=1)), + ("turnover", dict(row=5, col=1)), + ("cum_ex_return_w_cost_mdd", dict(row=6, col=1, graph_kwargs=_temp_fill_args)), + ("cum_ex_return_wo_cost_mdd", dict(row=7, col=1, graph_kwargs=_temp_fill_args)), + ] + + _subplot_layout = dict( + xaxis=dict(showline=True, type="category", tickangle=45), + yaxis=dict(zeroline=True, showline=True, showticklabels=True), + ) + for i in range(2, 8): + # yaxis + _subplot_layout.update( + { + "yaxis{}".format(i): dict( + zeroline=True, showline=True, showticklabels=True + ) + } + ) + _layout_style = dict( + height=1200, + title=" ", + shapes=[ + { + "type": "rect", + "xref": "x", + "yref": "paper", + "x0": max_start_date, + "y0": 0.55, + "x1": max_end_date, + "y1": 1, + "fillcolor": "#d3d3d3", + "opacity": 0.3, + "line": {"width": 0,}, + }, + { + "type": "rect", + "xref": "x", + "yref": "paper", + "x0": ex_max_start_date, + "y0": 0, + "x1": ex_max_end_date, + "y1": 0.55, + "fillcolor": "#d3d3d3", + "opacity": 0.3, + "line": {"width": 0,}, + }, + ], + ) + + _subplot_kwargs = dict( + shared_xaxes=True, + vertical_spacing=0.01, + rows=7, + cols=1, + row_width=[1, 1, 1, 3, 1, 1, 3], + print_grid=False, + ) + figure = SubplotsGraph( + df=report_df, + layout=_layout_style, + sub_graph_data=_column_row_col_dict, + subplots_kwargs=_subplot_kwargs, + kind_map=_default_kind_map, + sub_graph_layout=_subplot_layout, + ).figure + return (figure,) + + +def report_graph(report_df: pd.DataFrame, show_notebook: bool = True) -> [list, tuple]: + """display backtest report + + Example: + + + .. code-block:: python + + from qlib.contrib.evaluate import backtest + from qlib.contrib.strategy import TopkAmountStrategy + + # backtest parameters + bparas = {} + bparas['limit_threshold'] = 0.095 + bparas['account'] = 1000000000 + + sparas = {} + sparas['topk'] = 50 + sparas['buffer_margin'] = 230 + strategy = TopkAmountStrategy(**sparas) + + report_normal_df, _ = backtest(pred_df, strategy, **bparas) + + qcr.report_graph(report_normal_df) + + :param report_df: **df.index.name** must be **date**, **df.columns** must contain **return**, **turnover**, **cost**, **bench** + + + .. code-block:: python + + return cost bench turnover + date + 2017-01-04 0.003421 0.000864 0.011693 0.576325 + 2017-01-05 0.000508 0.000447 0.000721 0.227882 + 2017-01-06 -0.003321 0.000212 -0.004322 0.102765 + 2017-01-09 0.006753 0.000212 0.006874 0.105864 + 2017-01-10 -0.000416 0.000440 -0.003350 0.208396 + + + :param show_notebook: whether to display graphics in notebook, the default is **True** + :return: if show_notebook is True, display in notebook; else return **plotly.graph_objs.Figure** list + """ + report_df = report_df.copy() + fig_list = _report_figure(report_df) + if show_notebook: + BaseGraph.show_graph_in_notebook(fig_list) + else: + return fig_list diff --git a/qlib/contrib/report/analysis_position/risk_analysis.py b/qlib/contrib/report/analysis_position/risk_analysis.py new file mode 100644 index 0000000000..46122e17d1 --- /dev/null +++ b/qlib/contrib/report/analysis_position/risk_analysis.py @@ -0,0 +1,271 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from typing import Iterable + +import pandas as pd + +import plotly.graph_objs as py + +from ...evaluate import risk_analysis + +from ..graph import SubplotsGraph, ScatterGraph + + +def _get_risk_analysis_data_with_report( + report_normal_df: pd.DataFrame, + report_long_short_df: pd.DataFrame, + date: pd.Timestamp, +) -> pd.DataFrame: + """Get risk analysis data with report + + :param report_normal_df: report data + :param report_long_short_df: report data + :param date: date string + :return: + """ + + analysis = dict() + if not report_long_short_df.empty: + analysis["pred_long"] = risk_analysis(report_long_short_df["long"]) + analysis["pred_short"] = risk_analysis(report_long_short_df["short"]) + analysis["pred_long_short"] = risk_analysis(report_long_short_df["long_short"]) + + if not report_normal_df.empty: + analysis["sub_bench"] = risk_analysis( + report_normal_df["return"] - report_normal_df["bench"] + ) + analysis["sub_cost"] = risk_analysis( + report_normal_df["return"] + - report_normal_df["bench"] + - report_normal_df["cost"] + ) + analysis_df = pd.concat(analysis) # type: pd.DataFrame + analysis_df["date"] = date + return analysis_df + + +def _get_all_risk_analysis(risk_df: pd.DataFrame) -> pd.DataFrame: + """risk_df to standard + + :param risk_df: risk data + :return: + """ + if risk_df is None: + return pd.DataFrame() + risk_df = risk_df.unstack() + risk_df.columns = risk_df.columns.droplevel(0) + return risk_df.drop("mean", axis=1) + + +def _get_monthly_risk_analysis_with_report( + report_normal_df: pd.DataFrame, report_long_short_df: pd.DataFrame +) -> pd.DataFrame: + """Get monthly analysis data + + :param report_normal_df: + :param report_long_short_df: + :return: + """ + + # Group by month + report_normal_gp = report_normal_df.groupby( + [report_normal_df.index.year, report_normal_df.index.month] + ) + report_long_short_gp = report_long_short_df.groupby( + [report_long_short_df.index.year, report_long_short_df.index.month] + ) + + gp_month = sorted( + set(report_normal_gp.size().index) & set(report_long_short_gp.size().index) + ) + + _monthly_df = pd.DataFrame() + for gp_m in gp_month: + _m_report_normal = report_normal_gp.get_group(gp_m) + _m_report_long_short = report_long_short_gp.get_group(gp_m) + + if (len(_m_report_normal) < 3) and (len(_m_report_long_short) < 3): + # The month's data is less than 3, not displayed + # FIXME: If the trading day of a month is less than 3 days, a breakpoint will appear in the graph + continue + month_days = pd.Timestamp(year=gp_m[0], month=gp_m[1], day=1).days_in_month + _temp_df = _get_risk_analysis_data_with_report( + _m_report_normal, + _m_report_long_short, + pd.Timestamp(year=gp_m[0], month=gp_m[1], day=month_days), + ) + _monthly_df = _monthly_df.append(_temp_df, sort=False) + + return _monthly_df + + +def _get_monthly_analysis_with_feature( + monthly_df: pd.DataFrame, feature: str = "annual" +) -> pd.DataFrame: + """ + + :param monthly_df: + :param feature: + :return: + """ + _monthly_df_gp = monthly_df.reset_index().groupby(["level_1"]) + + _name_df = _monthly_df_gp.get_group(feature).set_index(["level_0", "level_1"]) + _temp_df = _name_df.pivot_table( + index="date", values=["risk"], columns=_name_df.index + ) + _temp_df.columns = map(lambda x: "_".join(x[-1]), _temp_df.columns) + _temp_df.index = _temp_df.index.strftime("%Y-%m") + + return _temp_df + + +def _get_risk_analysis_figure(analysis_df: pd.DataFrame) -> Iterable[py.Figure]: + """Get analysis graph figure + + :param analysis_df: + :return: + """ + if analysis_df is None: + return [] + + _figure = SubplotsGraph( + _get_all_risk_analysis(analysis_df), kind_map=dict(kind="BarGraph", kwargs={}) + ).figure + return (_figure,) + + +def _get_monthly_risk_analysis_figure( + report_normal_df: pd.DataFrame, report_long_short_df: pd.DataFrame +) -> Iterable[py.Figure]: + """Get analysis monthly graph figure + + :param report_normal_df: + :param report_long_short_df: + :return: + """ + + if report_normal_df is None and report_long_short_df is None: + return [] + + if report_normal_df is None: + report_normal_df = pd.DataFrame(index=report_long_short_df.index) + + if report_long_short_df is None: + report_long_short_df = pd.DataFrame(index=report_normal_df.index) + + _monthly_df = _get_monthly_risk_analysis_with_report( + report_normal_df=report_normal_df, report_long_short_df=report_long_short_df + ) + + for _feature in ["annual", "mdd", "sharpe", "std"]: + _temp_df = _get_monthly_analysis_with_feature(_monthly_df, _feature) + yield ScatterGraph( + _temp_df, + layout=dict(title=_feature, xaxis=dict(type="category", tickangle=45)), + graph_kwargs={"mode": "lines+markers"}, + ).figure + + +def risk_analysis_graph( + analysis_df: pd.DataFrame = None, + report_normal_df: pd.DataFrame = None, + report_long_short_df: pd.DataFrame = None, + show_notebook: bool = True, +) -> Iterable[py.Figure]: + """Generate analysis graph and monthly analysis + + Example: + + + .. code-block:: python + + from qlib.contrib.evaluate import risk_analysis, backtest, long_short_backtest + from qlib.contrib.strategy import TopkAmountStrategy + from qlib.contrib.report import analysis_position + + # backtest parameters + bparas = {} + bparas['limit_threshold'] = 0.095 + bparas['account'] = 1000000000 + + sparas = {} + sparas['topk'] = 50 + sparas['buffer_margin'] = 230 + strategy = TopkAmountStrategy(**sparas) + + report_normal_df, positions = backtest(pred_df, strategy, **bparas) + long_short_map = long_short_backtest(pred_df) + report_long_short_df = pd.DataFrame(long_short_map) + + analysis = dict() + analysis['pred_long'] = risk_analysis(report_long_short_df['long']) + analysis['pred_short'] = risk_analysis(report_long_short_df['short']) + analysis['pred_long_short'] = risk_analysis(report_long_short_df['long_short']) + analysis['sub_bench'] = risk_analysis(report_normal_df['return'] - report_normal_df['bench']) + analysis['sub_cost'] = risk_analysis(report_normal_df['return'] - report_normal_df['bench'] - report_normal_df['cost']) + analysis_df = pd.concat(analysis) + + analysis_position.risk_analysis_graph(analysis_df, report_normal_df, report_long_short_df) + + + + :param analysis_df: analysis data, index is **pd.MultiIndex**; columns names is **[risk]**. + + + .. code-block:: python + + risk + pred_long mean 0.002444 + std 0.004391 + annual 0.615868 + sharpe 8.835900 + mdd -0.016492 + pred_short mean 0.002655 + std 0.004241 + annual 0.669002 + sharpe 9.936303 + mdd -0.016071 + + + :param report_normal_df: **df.index.name** must be **date**, df.columns must contain **return**, **turnover**, **cost**, **bench** + + + .. code-block:: python + + return cost bench turnover + date + 2017-01-04 0.003421 0.000864 0.011693 0.576325 + 2017-01-05 0.000508 0.000447 0.000721 0.227882 + 2017-01-06 -0.003321 0.000212 -0.004322 0.102765 + 2017-01-09 0.006753 0.000212 0.006874 0.105864 + 2017-01-10 -0.000416 0.000440 -0.003350 0.208396 + + + :param report_long_short_df: **df.index.name** must be **date**, df.columns contain **long**, **short**, **long_short** + + + .. code-block:: python + + long short long_short + date + 2017-01-04 -0.001360 0.001394 0.000034 + 2017-01-05 0.002456 0.000058 0.002514 + 2017-01-06 0.000120 0.002739 0.002859 + 2017-01-09 0.001436 0.001838 0.003273 + 2017-01-10 0.000824 -0.001944 -0.001120 + + + :param show_notebook: Whether to display graphics in a notebook, default **True** + If True, show graph in notebook + If False, return graph figure + :return: + """ + _figure_list = list(_get_risk_analysis_figure(analysis_df)) + list( + _get_monthly_risk_analysis_figure(report_normal_df, report_long_short_df) + ) + if show_notebook: + ScatterGraph.show_graph_in_notebook(_figure_list) + else: + return _figure_list diff --git a/qlib/contrib/report/analysis_position/score_ic.py b/qlib/contrib/report/analysis_position/score_ic.py new file mode 100644 index 0000000000..bc6f8f5ff1 --- /dev/null +++ b/qlib/contrib/report/analysis_position/score_ic.py @@ -0,0 +1,72 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import pandas as pd + +from ..graph import ScatterGraph + + +def _get_score_ic(pred_label: pd.DataFrame): + """ + + :param pred_label: + :return: + """ + concat_data = pred_label.copy() + concat_data.dropna(axis=0, how="any", inplace=True) + _ic = concat_data.groupby(level="datetime").apply( + lambda x: x["label"].corr(x["score"]) + ) + _rank_ic = concat_data.groupby(level="datetime").apply( + lambda x: x["label"].corr(x["score"], method="spearman") + ) + return pd.DataFrame({"ic": _ic, "rank_ic": _rank_ic}) + + +def score_ic_graph( + pred_label: pd.DataFrame, show_notebook: bool = True +) -> [list, tuple]: + """score IC + + Example: + + + .. code-block:: python + + from qlib.data import D + from qlib.contrib.report import analysis_position + pred_df_dates = pred_df.index.get_level_values(level='datetime') + features_df = D.features(D.instruments('csi500'), ['Ref($close, -2)/Ref($close, -1)-1'], pred_df_dates.min(), pred_df_dates.max()) + features_df.columns = ['label'] + pred_label = pd.concat([features_df, pred], axis=1, sort=True).reindex(features_df.index) + analysis_position.score_ic_graph(pred_label) + + + :param pred_label: index is **pd.MultiIndex**, index name is **[instrument, datetime]**; columns names is **[score, label]** + + + .. code-block:: python + + instrument datetime score label + SH600004 2017-12-11 -0.013502 -0.013502 + 2017-12-12 -0.072367 -0.072367 + 2017-12-13 -0.068605 -0.068605 + 2017-12-14 0.012440 0.012440 + 2017-12-15 -0.102778 -0.102778 + + + :param show_notebook: whether to display graphics in notebook, the default is **True** + :return: if show_notebook is True, display in notebook; else return **plotly.graph_objs.Figure** list + """ + _ic_df = _get_score_ic(pred_label) + # FIXME: support HIGH-FREQ + _ic_df.index = _ic_df.index.strftime("%Y-%m-%d") + _figure = ScatterGraph( + _ic_df, + layout=dict(title="Score IC", xaxis=dict(type="category", tickangle=45)), + graph_kwargs={"mode": "lines+markers"}, + ).figure + if show_notebook: + ScatterGraph.show_graph_in_notebook([_figure]) + else: + return (_figure,) diff --git a/qlib/contrib/report/graph.py b/qlib/contrib/report/graph.py new file mode 100644 index 0000000000..082eafa49c --- /dev/null +++ b/qlib/contrib/report/graph.py @@ -0,0 +1,370 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import math +import importlib +from pathlib import Path +from typing import Iterable + +import pandas as pd + +import plotly.offline as py +import plotly.graph_objs as go + +from plotly.tools import make_subplots +from plotly.figure_factory import create_distplot + +from ...utils import get_module_by_module_path + + +class BaseGraph(object): + """""" + + _name = None + + def __init__( + self, df: pd.DataFrame = None, layout: dict = None, graph_kwargs: dict = None, name_dict: dict = None, **kwargs + ): + """ + + :param df: + :param layout: + :param graph_kwargs: + :param name_dict: + :param kwargs: + layout: dict + go.Layout parameters + graph_kwargs: dict + Graph parameters, eg: go.Bar(**graph_kwargs) + """ + self._df = df + + self._layout = dict() if layout is None else layout + self._graph_kwargs = dict() if graph_kwargs is None else graph_kwargs + self._name_dict = name_dict + + self.data = None + + self._init_parameters(**kwargs) + self._init_data() + + def _init_data(self): + """ + + :return: + """ + if self._df.empty: + raise ValueError("df is empty.") + + self.data = self._get_data() + + def _init_parameters(self, **kwargs): + """ + + :param kwargs + """ + + # Instantiate graphics parameters + self._graph_type = self._name.lower().capitalize() + + # Displayed column name + if self._name_dict is None: + self._name_dict = {_item: _item for _item in self._df.columns} + + @staticmethod + def get_instance_with_graph_parameters(graph_type: str = None, **kwargs): + """ + + :param graph_type: + :param kwargs: + :return: + """ + try: + _graph_module = importlib.import_module("plotly.graph_objs") + _graph_class = getattr(_graph_module, graph_type) + except AttributeError: + _graph_module = importlib.import_module("qlib.contrib.report.graph") + _graph_class = getattr(_graph_module, graph_type) + return _graph_class(**kwargs) + + @staticmethod + def show_graph_in_notebook(figure_list: Iterable[go.Figure] = None): + """ + + :param figure_list: + :return: + """ + py.init_notebook_mode() + for _fig in figure_list: + py.iplot(_fig) + + def _get_layout(self) -> go.Layout: + """ + + :return: + """ + return go.Layout(**self._layout) + + def _get_data(self) -> list: + """ + + :return: + """ + + _data = [ + self.get_instance_with_graph_parameters( + graph_type=self._graph_type, x=self._df.index, y=self._df[_col], name=_name, **self._graph_kwargs + ) + for _col, _name in self._name_dict.items() + ] + return _data + + @property + def figure(self) -> go.Figure: + """ + + :return: + """ + return go.Figure(data=self.data, layout=self._get_layout()) + + +class ScatterGraph(BaseGraph): + _name = "scatter" + + +class BarGraph(BaseGraph): + _name = "bar" + + +class DistplotGraph(BaseGraph): + _name = "distplot" + + def _get_data(self): + """ + + :return: + """ + _t_df = self._df.dropna() + _data_list = [_t_df[_col] for _col in self._name_dict] + _label_list = [_name for _name in self._name_dict.values()] + _fig = create_distplot(_data_list, _label_list, show_rug=False, **self._graph_kwargs) + + return _fig["data"] + + +class HeatmapGraph(BaseGraph): + _name = "heatmap" + + def _get_data(self): + """ + + :return: + """ + _data = [ + self.get_instance_with_graph_parameters( + graph_type=self._graph_type, + x=self._df.columns, + y=self._df.index, + z=self._df.values.tolist(), + **self._graph_kwargs + ) + ] + return _data + + +class HistogramGraph(BaseGraph): + _name = "histogram" + + def _get_data(self): + """ + + :return: + """ + _data = [ + self.get_instance_with_graph_parameters( + graph_type=self._graph_type, x=self._df[_col], name=_name, **self._graph_kwargs + ) + for _col, _name in self._name_dict.items() + ] + return _data + + +class SubplotsGraph(object): + """Create subplots same as df.plot(subplots=True) + + Simple package for `plotly.tools.subplots` + """ + + def __init__( + self, + df: pd.DataFrame = None, + kind_map: dict = None, + layout: dict = None, + sub_graph_layout: dict = None, + sub_graph_data: list = None, + subplots_kwargs: dict = None, + **kwargs + ): + """ + + :param df: pd.DataFrame + + :param kind_map: dict, subplots graph kind and kwargs + eg: dict(kind='ScatterGraph', kwargs=dict()) + + :param layout: `go.Layout` parameters + + :param sub_graph_layout: Layout of each graphic, similar to 'layout' + + :param sub_graph_data: Instantiation parameters for each sub-graphic + eg: [(column_name, instance_parameters), ] + + column_name: str or go.Figure + + Instance_parameters: + + - row: int, the row where the graph is located + + - col: int, the col where the graph is located + + - name: str, show name, default column_name in 'df' + + - kind: str, graph kind, default `kind` param, eg: bar, scatter, ... + + - graph_kwargs: dict, graph kwargs, default {}, used in `go.Bar(**graph_kwargs)` + + :param subplots_kwargs: `plotly.tools.make_subplots` original parameters + + - shared_xaxes: bool, default False + + - shared_yaxes: bool, default False + + - vertical_spacing: float, default 0.3 / rows + + - subplot_titles: list, default [] + If `sub_graph_data` is None, will generate 'subplot_titles' according to `df.columns`, + this field will be discarded + + + - specs: list, see `make_subplots` docs + + - rows: int, Number of rows in the subplot grid, default 1 + If `sub_graph_data` is None, will generate 'rows' according to `df`, this field will be discarded + + - cols: int, Number of cols in the subplot grid, default 1 + If `sub_graph_data` is None, will generate 'cols' according to `df`, this field will be discarded + + + :param kwargs: + + """ + + self._df = df + self._layout = layout + self._sub_graph_layout = sub_graph_layout + + self._kind_map = kind_map + if self._kind_map is None: + self._kind_map = dict(kind="ScatterGraph", kwargs=dict()) + + self._subplots_kwargs = subplots_kwargs + if self._subplots_kwargs is None: + self._init_subplots_kwargs() + + self.__cols = self._subplots_kwargs.get("cols", 2) + self.__rows = self._subplots_kwargs.get("rows", math.ceil(len(self._df.columns) / self.__cols)) + + self._sub_graph_data = sub_graph_data + if self._sub_graph_data is None: + self._init_sub_graph_data() + + self._init_figure() + + def _init_sub_graph_data(self): + """ + + :return: + """ + self._sub_graph_data = list() + self._subplot_titles = list() + + for i, column_name in enumerate(self._df.columns): + row = math.ceil((i + 1) / self.__cols) + _temp = (i + 1) % self.__cols + col = _temp if _temp else self.__cols + res_name = column_name.replace("_", " ") + _temp_row_data = ( + column_name, + dict( + row=row, + col=col, + name=res_name, + kind=self._kind_map["kind"], + graph_kwargs=self._kind_map["kwargs"], + ), + ) + self._sub_graph_data.append(_temp_row_data) + self._subplot_titles.append(res_name) + + def _init_subplots_kwargs(self): + """ + + :return: + """ + # Default cols, rows + _cols = 2 + _rows = math.ceil(len(self._df.columns) / 2) + self._subplots_kwargs = dict() + self._subplots_kwargs["rows"] = _rows + self._subplots_kwargs["cols"] = _cols + self._subplots_kwargs["shared_xaxes"] = False + self._subplots_kwargs["shared_yaxes"] = False + self._subplots_kwargs["vertical_spacing"] = 0.3 / _rows + self._subplots_kwargs["print_grid"] = False + self._subplots_kwargs["subplot_titles"] = self._df.columns.tolist() + + def _init_figure(self): + """ + + :return: + """ + self._figure = make_subplots(**self._subplots_kwargs) + + for column_name, column_map in self._sub_graph_data: + if isinstance(column_name, go.Figure): + _graph_obj = column_name + elif isinstance(column_name, str): + temp_name = column_map.get("name", column_name.replace("_", " ")) + kind = column_map.get("kind", self._kind_map.get("kind", "ScatterGraph")) + _graph_kwargs = column_map.get("graph_kwargs", self._kind_map.get("kwargs", {})) + _graph_obj = BaseGraph.get_instance_with_graph_parameters( + kind, + **dict( + df=self._df.loc[:, [column_name]], + name_dict={column_name: temp_name}, + graph_kwargs=_graph_kwargs, + ) + ) + else: + raise TypeError() + + row = column_map["row"] + col = column_map["col"] + + _graph_data = getattr(_graph_obj, "data") + # for _item in _graph_data: + # _item.pop('xaxis', None) + # _item.pop('yaxis', None) + + for _g_obj in _graph_data: + self._figure.append_trace(_g_obj, row=row, col=col) + + if self._sub_graph_layout is not None: + for k, v in self._sub_graph_layout.items(): + self._figure["layout"][k].update(v) + + self._figure["layout"].update(self._layout) + + @property + def figure(self): + return self._figure diff --git a/qlib/contrib/strategy/__init__.py b/qlib/contrib/strategy/__init__.py new file mode 100644 index 0000000000..a67a7e7a55 --- /dev/null +++ b/qlib/contrib/strategy/__init__.py @@ -0,0 +1,11 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from .strategy import ( + TopkAmountStrategy, + TopkWeightStrategy, + TopkDropoutStrategy, + BaseStrategy, + WeightStrategyBase, +) diff --git a/qlib/contrib/strategy/cost_control.py b/qlib/contrib/strategy/cost_control.py new file mode 100644 index 0000000000..58d299edbe --- /dev/null +++ b/qlib/contrib/strategy/cost_control.py @@ -0,0 +1,76 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from .strategy import StrategyWrapper, WeightStrategyBase +import copy + + +class SoftTopkStrategy(WeightStrategyBase): + def __init__(self, topk, max_sold_weight=1.0, risk_degree=0.95, buy_method="first_fill"): + """Parameter + topk : int + top-N stocks to buy + buffer_margin : int + buffer margin, in single score_mode, continue holding stock if it is in nlargest(margin) + margin should be no less than topk + risk_degree : float + position percentage of total value + buy_method : + rank_fill: assign the weight stocks that rank high first(1/topk max) + average_fill: assign the weight to the stocks rank high averagely. + """ + super().__init__() + self.topk = topk + self.max_sold_weight = max_sold_weight + self.risk_degree = risk_degree + self.buy_method = buy_method + + def get_risk_degree(self, date): + """get_risk_degree + Return the proportion of your total value you will used in investment. + Dynamically risk_degree will result in Market timing + """ + # It will use 95% amoutn of your total value by default + return self.risk_degree + + def generate_target_weight_position(self, score, current, trade_date): + """Parameter: + score : pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + current : current position, use Position() class + trade_date : trade date + generate target position from score for this date and the current position + The cache is not considered in the position + """ + # TODO: + # If the current stock list is more than topk(eg. The weights are modified + # by risk control), the weight will not be handled correctly. + buy_signal_stocks = set(score.sort_values(ascending=False).iloc[: self.topk].index) + cur_stock_weight = current.get_stock_weight_dict(only_stock=True) + + if len(cur_stock_weight) == 0: + final_stock_weight = {code: 1 / self.topk for code in buy_signal_stocks} + else: + final_stock_weight = copy.deepcopy(cur_stock_weight) + sold_stock_weight = 0.0 + for stock_id in final_stock_weight: + if stock_id not in buy_signal_stocks: + sw = min(self.max_sold_weight, final_stock_weight[stock_id]) + sold_stock_weight += sw + final_stock_weight[stock_id] -= sw + if self.buy_method == "first_fill": + for stock_id in buy_signal_stocks: + add_weight = min( + max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), + sold_stock_weight, + ) + final_stock_weight[stock_id] = final_stock_weight.get(stock_id, 0.0) + add_weight + sold_stock_weight -= add_weight + elif self.buy_method == "average_fill": + for stock_id in buy_signal_stocks: + final_stock_weight[stock_id] = final_stock_weight.get(stock_id, 0.0) + sold_stock_weight / len( + buy_signal_stocks + ) + else: + raise ValueError("Buy method not found") + return final_stock_weight diff --git a/qlib/contrib/strategy/order_generator.py b/qlib/contrib/strategy/order_generator.py new file mode 100644 index 0000000000..494981ecc0 --- /dev/null +++ b/qlib/contrib/strategy/order_generator.py @@ -0,0 +1,171 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +""" +This order generator is for strategies based on WeightStrategyBase +""" +from ..backtest.position import Position +from ..backtest.exchange import Exchange +import pandas as pd +import copy + + +class OrderGenerator: + def generate_order_list_from_target_weight_position( + self, + current: Position, + trade_exchange: Exchange, + target_weight_position: dict, + risk_degree: float, + pred_date: pd.Timestamp, + trade_date: pd.Timestamp, + ) -> list: + """generate_order_list_from_target_weight_position + + :param current: The current position + :type current: Position + :param trade_exchange: + :type trade_exchange: Exchange + :param target_weight_position: {stock_id : weight} + :type target_weight_position: dict + :param risk_degree: + :type risk_degree: float + :param pred_date: the date the score is predicted + :type pred_date: pd.Timestamp + :param trade_date: the date the stock is traded + :type trade_date: pd.Timestamp + + :rtype: list + """ + raise NotImplementedError() + + +class OrderGenWInteract(OrderGenerator): + """Order Generator With Interact""" + + def generate_order_list_from_target_weight_position( + self, + current: Position, + trade_exchange: Exchange, + target_weight_position: dict, + risk_degree: float, + pred_date: pd.Timestamp, + trade_date: pd.Timestamp, + ) -> list: + """generate_order_list_from_target_weight_position + + No adjustment for for the nontradable share. + All the tadable value is assigned to the tadable stock according to the weight. + if interact == True, will use the price at trade date to generate order list + else, will only use the price before the trade date to generate order list + + :param current: + :type current: Position + :param trade_exchange: + :type trade_exchange: Exchange + :param target_weight_position: + :type target_weight_position: dict + :param risk_degree: + :type risk_degree: float + :param pred_date: + :type pred_date: pd.Timestamp + :param trade_date: + :type trade_date: pd.Timestamp + + :rtype: list + """ + # calculate current_tradable_value + current_amount_dict = current.get_stock_amount_dict() + current_total_value = trade_exchange.calculate_amount_position_value( + amount_dict=current_amount_dict, trade_date=trade_date, only_tradable=False + ) + current_tradable_value = trade_exchange.calculate_amount_position_value( + amount_dict=current_amount_dict, trade_date=trade_date, only_tradable=True + ) + # add cash + current_tradable_value += current.get_cash() + + reserved_cash = (1.0 - risk_degree) * (current_total_value + current.get_cash()) + current_tradable_value -= reserved_cash + + if current_tradable_value < 0: + # if you sell all the tradable stock can not meet the reserved + # value. Then just sell all the stocks + target_amount_dict = copy.deepcopy(current_amount_dict.copy()) + for stock_id in list(target_amount_dict.keys()): + if trade_exchange.is_stock_tradable(stock_id, trade_date): + del target_amount_dict[stock_id] + else: + # consider cost rate + current_tradable_value /= 1 + max(trade_exchange.close_cost, trade_exchange.open_cost) + + # strategy 1 : generate amount_position by weight_position + # Use API in Exchange() + target_amount_dict = trade_exchange.generate_amount_position_from_weight_position( + weight_position=target_weight_position, + cash=current_tradable_value, + trade_date=trade_date, + ) + order_list = trade_exchange.generate_order_for_target_amount_position( + target_position=target_amount_dict, + current_position=current_amount_dict, + trade_date=trade_date, + ) + return order_list + + +class OrderGenWOInteract(OrderGenerator): + """Order Generator Without Interact""" + + def generate_order_list_from_target_weight_position( + self, + current: Position, + trade_exchange: Exchange, + target_weight_position: dict, + risk_degree: float, + pred_date: pd.Timestamp, + trade_date: pd.Timestamp, + ) -> list: + """generate_order_list_from_target_weight_position + + generate order list directly not using the information (e.g. whether can be traded, the accurate trade price) at trade date. + In target weight position, generating order list need to know the price of objective stock in trade date, but we cannot get that + value when do not interact with exchange, so we check the %close price at pred_date or price recorded in current position. + + :param current: + :type current: Position + :param trade_exchange: + :type trade_exchange: Exchange + :param target_weight_position: + :type target_weight_position: dict + :param risk_degree: + :type risk_degree: float + :param pred_date: + :type pred_date: pd.Timestamp + :param trade_date: + :type trade_date: pd.Timestamp + + :rtype: list + """ + risk_total_value = risk_degree * current.calculate_value() + + current_stock = current.get_stock_list() + amount_dict = {} + for stock_id in target_weight_position: + # Current rule will ignore the stock that not hold and cannot be traded at predict date + if trade_exchange.is_stock_tradable(stock_id=stock_id, trade_date=pred_date): + amount_dict[stock_id] = ( + risk_total_value * target_weight_position[stock_id] / trade_exchange.get_close(stock_id, pred_date) + ) + elif stock_id in current_stock: + amount_dict[stock_id] = ( + risk_total_value * target_weight_position[stock_id] / current.get_stock_price(stock_id) + ) + else: + continue + order_list = trade_exchange.generate_order_for_target_amount_position( + target_position=amount_dict, + current_position=current.get_stock_amount_dict(), + trade_date=trade_date, + ) + return order_list diff --git a/qlib/contrib/strategy/strategy.py b/qlib/contrib/strategy/strategy.py new file mode 100644 index 0000000000..64d7d97164 --- /dev/null +++ b/qlib/contrib/strategy/strategy.py @@ -0,0 +1,765 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import copy +import numpy as np +import pandas as pd + +from ..backtest.order import Order +from ...utils import get_pre_trading_date +from .order_generator import OrderGenWInteract + + +class BaseStrategy: + """ + # Strategy framework document + + class Strategy(BaseStrategy): + + def __init__(self): + # init for strategy + super(Strategy, self).__init__() + pass + + def generate_target_weight_position(self, score, current, trade_exchange, topk, buffer_margin, trade_date, risk_degree): + '''Parameter: + score : pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + current : current position, use Position() class + trade_exchange : Exchange() + topk : topk + buffer_margin : buffer margin + trade_date : trade date + risk_degree : 0-1, 0.95 for example, use 95% money to trade + :return + target weight position + generate target position from score for this date and the current position + + ''' + # strategy 1 :select top k stocks by model scores, then equal-weight + new_stock_list = list(score.sort_values(ascending=False).iloc[:topk].index) + target_weight_position = {code: 1 / topk for code in new_stock_list} + + # strategy 2:select top buffer_margin stock as the buffer, for stock in current position: keep if in buffer, sell if not; then buy new stocks + buffer = score.sort_values(ascending=False).iloc[:buffer_margin] + current_stock_list = current.get_stock_list() + mask = buffer.index.isin(current_stock_list) + keep = set(buffer[mask].index) + new_stock_list = list(keep) + list(buffer[~mask].index[:topk-len(keep)]) + target_weight_position = {code : 1/topk for code in new_stock_list} + + return target_weight_position + + def generate_target_amount_position(self, score, current, target_weight_position ,topk, buffer_margin, trade_exchange, trade_date, risk_degree): + ''' + score : pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + current : current position, use Position() class + target_weight_position : {stock_id : weight} + trade_exchange : Exchange() + topk : topk + buffer_margin : buffer margin + trade_date : trade date + risk_degree : 0-1, 0.95 for example, use 95% money to trade + :return: + ''' + # strategy 1 + # parameters : + # topk : int, select topk stocks + # buffer_margin : size of buffer margin + # + # description : + # hold topk stocks at each trade date + # when adjust position + # the score model will generate scores for each stock + # if the stock of current position not in top buffer_margin score, sell them out; + # then equally buy recommended stocks + target_amount_dict = {} + current_amount_dict = current.get_stock_amount_dict() + buffer = score.sort_values(ascending=False).iloc[:buffer_margin] + mask = buffer.index.isin(current_amount_dict) + keep = set(buffer[mask].index) + buy_stock_list = list(buffer[~mask].index[:topk - len(keep)]) + buy_cash = 0 + # calculate cash for buy order + for stock_id in current_amount_dict: + if stock_id in keep: + target_amount_dict[stock_id] = current_amount_dict[stock_id] + else: + # stock_id not in keep + # trade check + # assume all of them can be sold out + if trade_exchange.check_stock_suspended(stock_id=stock_id, trade_date=trade_date): + pass + else: + buy_cash += current_amount_dict[stock_id] * trade_exchange.get_deal_price(stock_id=stock_id, trade_date=trade_date) + # update close cost + buy_cash /= (1 + trade_exchange.close_cost) + # update cash + buy_cash += current.get_cash() + # update open cost + buy_cash /= (1 + trade_exchange.open_cost) + # consider risk degree + buy_cash *= risk_degree + # equally assigned + value = buy_cash / len(buy_stock_list) + # equally assigned + value = buy_cash / len(buy_stock_list) + for stock_id in buy_stock_list: + if trade_exchange.check_stock_suspended(stock_id=stock_id, trade_date=trade_date): + pass + else: + target_amount_dict[stock_id] = value / trade_exchange.get_deal_price(stock_id=stock_id, trade_date=trade_date) // trade_exchange.trade_unit * trade_exchange.trade_unit + return target_amount_dict + + + # strategy 2 : use trade_exchange.generate_amount_position_from_weight_position() + # calculate value for current position + current_amount_dict = current.get_stock_amount_dict() + current_tradable_value = trade_exchange.calculate_amount_position_value(amount_dict=current_amount_dict, + trade_date=trade_date, only_tradable=True) + # consider cost rate + current_tradable_value /= (1 + max(trade_exchange.close_cost, trade_exchange.open_cost)) + # consider risk degree + current_tradable_value *= risk_degree + target_amount_dict = trade_exchange.generate_amount_position_from_weight_position( + weight_position=target_weight_position, cash=current_tradable_value, trade_date=trade_date) + + return target_amount_dict + + pass + + def generate_order_list_from_target_amount_position(self, current, trade_exchange, target_amount_position, trade_date): + '''Parameter: + current : Position() + trade_exchange : Exchange() + target_amount_position : {stock_id : amount} + trade_date : trade date + generate order list from weight_position + ''' + # strategy: + current_amount_dict = current.get_stock_amount_dict() + order_list = trade_exchange.generate_order_for_target_amount_position(target_position=target_amount_position, + current_position=current_amount_dict, + trade_date=trade_date) + return order_list + + def generate_order_list_from_target_weight_position(self, current, trade_exchange, target_weight_position, risk_degree ,trade_date, interact=True): + ''' + generate order_list from weight_position + use API from trade_exchage + current : Postion(), current position + trade_exchange : Exchange() + target_weight_position : {stock_id : weight} + risk_degree : 0-1, 0.95 for example, use 95% money to trade + trade_date : trade date + interact : bool + :return: order_list + ''' + # calculate value for current position + current_amount_dict = current.get_stock_amount_dict() + current_tradable_value = trade_exchange.calculate_amount_position_value(amount_dict=current_amount_dict, trade_date=trade_date, only_tradable=True) + # add cash + current_tradable_value += current.get_cash() + # consider cost rate + current_tradable_value /= (1+max(trade_exchange.close_cost, trade_exchange.open_cost)) + # consider risk degree + current_tradable_value *= risk_degree + # Strategy 1 : generate amount_position from weight_position + # use API of trade_exchange + target_amount_dict = trade_exchange.generate_amount_position_from_weight_position(weight_position=target_weight_position, cash=current_tradable_value, trade_date=trade_date) + order_list = trade_exchange.generate_order_for_target_amount_position(target_position=target_amount_dict, current_position=current_amount_dict, trade_date=trade_date) + + return order_list + + def generate_order_list(self, score_series, current, trade_exchange, trade_date, topk, margin, risk_degree): + ''' + score_series: pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + current: Postion(), current position + trade_exchange: trade date + trade_date: + topk: topk + margin: buffer margin + risk_degree: risk_degree : 0-1, 0.95 for example, use 95% money to trade + :return: order list : list of Order() + ''' + # generate_order_list + # strategy 1,generate_target_weight_position() and xecute_target_weight_position_by_order_list() for order_list + if not self.is_adjust(trade_date): + return [] + target_weigth_position = self.generate_target_weight_position(score=score_series, + current=current, + trade_exchange=trade_exchange, + topk=topk, + buffer_margin=margin, + trade_date=trade_date, + risk_degree=risk_degree + ) + order_list = self.generate_order_list_from_target_weight_positione( current=current, + trade_exchange=trade_exchange, + target_weight_position=target_weigth_position, + risk_degree=risk_degree, + trade_date=trade_date) + + + # strategy 2 : amount_position's view generate_target_amount_position() and generate_order_list_from_target_amount_position() to generate order_list + target_amount_position = self.generate_target_amount_position(score=score_series, + current=current, + trade_exchange=trade_exchange, + target_weight_position=None, + topk=topk, + buffer_margin=margin, + trade_date=trade_date, + risk_degree=risk_degree + ) + order_list = self.generate_order_list_from_target_amount_position(current=current, + trade_exchange=trade_exchange, + target_amount_position=target_amount_position, + trade_date=trade_date) + return order_list + """ + + def __init__(self): + pass + + def get_risk_degree(self, date): + """get_risk_degree + Return the proportion of your total value you will used in investment. + Dynamically risk_degree will result in Market timing + """ + # It will use 95% amount of your total value by default + return 0.95 + + def generate_order_list(self, score_series, current, trade_exchange, pred_date, trade_date): + """Parameter + score_series : pd.Seires + stock_id , score + current : Position() + current state of position + DO NOT directly change the state of current + trade_exchange : Exchange() + trade exchange + pred_date : pd.Timestamp + predict date + trade_date : pd.Timestamp + trade date + + DO NOT directly change the state of current + """ + pass + + def update(self, score_series, pred_date, trade_date): + """User can use this method to update strategy state each trade date. + Parameter + --------- + score_series : pd.Series + stock_id , score + pred_date : pd.Timestamp + oredict date + trade_date : pd.Timestamp + trade date + """ + pass + + def init(self, **kwargs): + """Some strategy need to be initial after been implemented, + User can use this method to init his strategy with parameters needed. + """ + pass + + def get_init_args_from_model(self, model, init_date): + """ + This method only be used in 'online' module, it will generate the *args to initial the strategy. + :param + mode : model used in 'online' module + """ + return {} + + +class StrategyWrapper: + """ + StrategyWrapper is a wrapper of another strategy. + By overriding some methods to make some changes on the basic strategy + Cost control and risk control will base on this class. + """ + + def __init__(self, inner_strategy): + """__init__ + + :param inner_strategy: set the inner strategy + """ + self.inner_strategy = inner_strategy + + def __getattr__(self, name): + """__getattr__ + + :param name: If no implementation in this method. Call the method in the innter_strategy by default. + """ + return getattr(self.inner_strategy, name) + + +class AdjustTimer: + """AdjustTimer + Responsible for timing of position adjusting + + This is designed as multiple inheritance mechanism due to + - the is_adjust may need access to the internel state of a strategyw + - it can be reguard as a enhancement to the existing strategy + """ + + # adjust position in each trade date + def is_adjust(self, trade_date): + """is_adjust + Return if the strategy can adjust positions on `trade_date` + Will normally be used in strategy do trading with trade frequency + """ + return True + + +class ListAdjustTimer(AdjustTimer): + def __init__(self, adjust_dates=None): + """__init__ + + :param adjust_dates: an iterable object, it will return a timelist for trading dates + """ + if adjust_dates is None: + # None indicates that all dates is OK for adjusting + self.adjust_dates = None + else: + self.adjust_dates = {pd.Timestamp(dt) for dt in adjust_dates} + + def is_adjust(self, trade_date): + if self.adjust_dates is None: + return True + return pd.Timestamp(trade_date) in self.adjust_dates + + +class WeightStrategyBase(BaseStrategy, AdjustTimer): + def __init__(self, order_generator_cls_or_obj=OrderGenWInteract, *args, **kwargs): + super().__init__(*args, **kwargs) + if isinstance(order_generator_cls_or_obj, type): + self.order_generator = order_generator_cls_or_obj() + else: + self.order_generator = order_generator_cls_or_obj + + def generate_target_weight_position(self, score, current, trade_date): + """Parameter: + score : pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + current : current position, use Position() class + trade_exchange : Exchange() + trade_date : trade date + generate target position from score for this date and the current position + The cash is not considered in the position + """ + raise NotImplementedError() + + def generate_order_list(self, score_series, current, trade_exchange, pred_date, trade_date): + """Parameter + score_series : pd.Seires + stock_id , score + current : Position() + current of account + trade_exchange : Exchange() + exchange + trade_date : pd.Timestamp + date + """ + # judge if to adjust + if not self.is_adjust(trade_date): + return [] + # generate_order_list + # generate_target_weight_position() and generate_order_list_from_target_weight_position() to generate order_list + current_temp = copy.deepcopy(current) + target_weight_position = self.generate_target_weight_position( + score=score_series, current=current_temp, trade_date=trade_date + ) + + order_list = self.order_generator.generate_order_list_from_target_weight_position( + current=current_temp, + trade_exchange=trade_exchange, + risk_degree=self.get_risk_degree(trade_date), + target_weight_position=target_weight_position, + pred_date=pred_date, + trade_date=trade_date, + ) + return order_list + + +def get_sell_limit(score, buffer_margin): + """get_sell_limit + + :param score: pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + :param buffer_margin: int or float + """ + if isinstance(buffer_margin, int): + return buffer_margin + else: + if buffer_margin < 0.0 or buffer_margin > 1.0: + raise ValueError("Buffer margin should range in [0, 1]") + return int(score.count() * buffer_margin) + + +class MarginInterface: + def get_buffer_margin(self, trade_date): + """get_buffer_margin + Get the buffer margin dynamically for topk strategy. + + :param trade_date: trading date + """ + raise NotImplementedError("Please implement the margin dynamically") + + +class TopkWeightStrategy(ListAdjustTimer, WeightStrategyBase, MarginInterface): + # NOTE: The list adjust Timer must be placed before WeightStrategyBase before. + def __init__(self, topk, buffer_margin, risk_degree=0.95, **kwargs): + """Parameter + topk : int + top-N stocks to buy + + buffer_margin : int or float + if isinstance(margin, int): + sell_limit = margin + else: + sell_limit = pred_in_a_day.count() * margin + buffer margin, in single score_mode, continue holding stock if it is in nlargest(sell_limit) + sell_limit should be no less than topk + + risk_degree : float + position percentage of total value + """ + WeightStrategyBase.__init__(self, **kwargs) + ListAdjustTimer.__init__(self, kwargs.get("adjust_dates", None)) + self.topk = topk + self.buffer_margin = buffer_margin + self.risk_degree = risk_degree + + def get_risk_degree(self, date): + """get_risk_degree + Return the proportion of your total value you will used in investment. + Dynamically risk_degree will result in Market timing + """ + # It will use 95% amoutn of your total value by default + return self.risk_degree + + def get_buffer_margin(self, trade_date): + return self.buffer_margin + + def generate_target_weight_position(self, score, current, trade_date): + """Parameter: + score : pred score for this trade date, pd.Series, index is stock_id, contain 'score' column + current : current position, use Position() class + trade_exchange : Exchange() + trade_date : trade date + generate target position from score for this date and the current position + The cache is not considered in the position + """ + sell_limit = get_sell_limit(score, self.get_buffer_margin(trade_date)) + buffer = score.sort_values(ascending=False).iloc[:sell_limit] + if sell_limit <= self.topk: + # no buffer + target_weight_position = {code: 1 / self.topk for code in buffer.index} + else: + # buffer is considered + current_stock_list = current.get_stock_list() + mask = buffer.index.isin(current_stock_list) + keep = set(buffer[mask].index) + new_stock_list = list(keep) + if len(keep) < self.topk: + new_stock_list += list(buffer[~mask].index[: self.topk - len(keep)]) + else: + # truncate the stocks + new_stock_list.sort(key=score.get, reverse=True) + new_stock_list = new_stock_list[: self.topk] + target_weight_position = {code: 1 / self.topk for code in new_stock_list} + return target_weight_position + + +class TopkAmountStrategy(BaseStrategy, MarginInterface, ListAdjustTimer): + def __init__(self, topk, buffer_margin, risk_degree=0.95, thresh=1, hold_thresh=1, **kwargs): + """Parameter + topk : int + top-N stocks to buy + buffer_margin : int or float + if isinstance(margin, int): + sell_limit = margin + else: + sell_limit = pred_in_a_day.count() * margin + buffer margin, in single score_mode, continue holding stock if it is in nlargest(sell_limit) + sell_limit should be no less than topk + risk_degree : float + position percentage of total value + thresh : int + minimun holding days since last buy singal of the stock + hold_thresh : int + minimum holding days + before sell stock , will check current.get_stock_count(order.stock_id) >= self.thresh + """ + BaseStrategy.__init__(self) + ListAdjustTimer.__init__(self, kwargs.get("adjust_dates", None)) + self.topk = topk + self.buffer_margin = buffer_margin + self.risk_degree = risk_degree + self.thresh = thresh + # self.stock_count['code'] will be the days the stock has been hold + # since last buy signal. This is designed for thresh + self.stock_count = {} + + self.hold_thresh = hold_thresh + + def get_risk_degree(self, date): + """get_risk_degree + Return the proportion of your total value you will used in investment. + Dynamically risk_degree will result in Market timing + """ + # It will use 95% amoutn of your total value by default + return self.risk_degree + + def get_buffer_margin(self, trade_date): + return self.buffer_margin + + def generate_order_list(self, score_series, current, trade_exchange, pred_date, trade_date): + """Gnererate order list according to score_series at trade_date. + will not change current. + Parameter + score_series : pd.Seires + stock_id , score + current : Position() + current of account + trade_exchange : Exchange() + exchange + pred_date : pd.Timestamp + predict date + trade_date : pd.Timestamp + trade date + """ + if not self.is_adjust(trade_date): + return [] + # generate order list for this adjust date + current_temp = copy.deepcopy( + current + ) # this copy is necessary. Due to the trade_exchange.calc_deal_order will simulate the dealing process + + sell_order_list = [] + buy_order_list = [] + # load score + cash = current_temp.get_cash() + buffer = score_series.sort_values(ascending=False).iloc[ + : get_sell_limit(score_series, self.get_buffer_margin(trade_date)) + ] + current_stock_list = current_temp.get_stock_list() + mask = buffer.index.isin(current_stock_list) + keep = set(buffer[mask].index) + # stocks that get buy signals + buy = set(buffer.iloc[: self.topk].index) + new = buffer[~mask].index.get_level_values(0) # new stocks to buy + # sell stock not in keep + # sell mode: sell all + for code in current_stock_list: + if not trade_exchange.is_stock_tradable(stock_id=code, trade_date=trade_date): + continue + if code not in keep: + # check hold limit + if self.stock_count[code] < self.thresh or current_temp.get_stock_count(code) < self.hold_thresh: + # can not sell this code + # no buy signal, but the stock is kept + self.stock_count[code] += 1 + continue + # sell order + sell_amount = current_temp.get_stock_amount(code=code) + sell_order = Order( + stock_id=code, + amount=sell_amount, + trade_date=trade_date, + direction=Order.SELL, # 0 for sell, 1 for buy + factor=trade_exchange.get_factor(code, trade_date), + ) + # is order executable + if trade_exchange.check_order(sell_order): + sell_order_list.append(sell_order) + trade_val, trade_cost, trade_price = trade_exchange.deal_order(sell_order, position=current_temp) + # update cash + cash += trade_val - trade_cost + # sold + del self.stock_count[code] + else: + # no buy signal, but the stock is kept + self.stock_count[code] += 1 + elif code in buy: + # NOTE: This is different from the original version + # get new buy signal + # Only the stock fall in to topk will produce buy signal + # Only in margin will no produce buy signal + self.stock_count[code] = 1 + else: + self.stock_count[code] += 1 + # buy new stock + # note the current has been changed + current_stock_list = current_temp.get_stock_list() + n_buy = self.topk - len(current_stock_list) + value = cash * self.risk_degree / n_buy if n_buy > 0 else 0 + + # open_cost should be considered in the real trading environment, while the backtest in evaluate.py does not consider it + # as the aim of demo is to accomplish same strategy as evaluate.py, so comment out this line + # value = value / (1+trade_exchange.open_cost) # set open_cost limit + for code in new[:n_buy]: + # check is stock supended + if not trade_exchange.is_stock_tradable(stock_id=code, trade_date=trade_date): + continue + # buy order + buy_price = trade_exchange.get_deal_price(stock_id=code, trade_date=trade_date) + buy_amount = value / buy_price + factor = trade_exchange.quote[(code, trade_date)]["$factor"] + buy_amount = trade_exchange.round_amount_by_trade_unit(buy_amount, factor) + buy_order = Order( + stock_id=code, + amount=buy_amount, + trade_date=trade_date, + direction=Order.BUY, # 1 for buy + factor=factor, + ) + buy_order_list.append(buy_order) + self.stock_count[code] = 1 + return sell_order_list + buy_order_list + + +class TopkDropoutStrategy(BaseStrategy, ListAdjustTimer): + def __init__(self, topk, n_drop, method="bottom", risk_degree=0.95, thresh=1, hold_thresh=1, **kwargs): + """Parameter + topk : int + top-N stocks to buy + n_drop : int + number of stocks to be replaced + method : str + dropout method, random/bottom + risk_degree : float + position percentage of total value + thresh : int + minimun holding days since last buy singal of the stock + hold_thresh : int + minimum holding days + before sell stock , will check current.get_stock_count(order.stock_id) >= self.thresh + """ + super(TopkDropoutStrategy, self).__init__() + ListAdjustTimer.__init__(self, kwargs.get("adjust_dates", None)) + self.topk = topk + self.n_drop = n_drop + self.method = method + self.risk_degree = risk_degree + self.thresh = thresh + # self.stock_count['code'] will be the days the stock has been hold + # since last buy signal. This is designed for thresh + self.stock_count = {} + + self.hold_thresh = hold_thresh + + def get_risk_degree(self, date): + """get_risk_degree + Return the proportion of your total value you will used in investment. + Dynamically risk_degree will result in Market timing + """ + # It will use 95% amoutn of your total value by default + return self.risk_degree + + def generate_order_list(self, score_series, current, trade_exchange, pred_date, trade_date): + """Gnererate order list according to score_series at trade_date. + will not change current. + Parameter + score_series : pd.Seires + stock_id , score + current : Position() + current of account + trade_exchange : Exchange() + exchange + pred_date : pd.Timestamp + predict date + trade_date : pd.Timestamp + trade date + """ + if not self.is_adjust(trade_date): + return [] + current_temp = copy.deepcopy(current) + # generate order list for this adjust date + sell_order_list = [] + buy_order_list = [] + # load score + cash = current_temp.get_cash() + current_stock_list = current_temp.get_stock_list() + last = score_series.reindex(current_stock_list).sort_values(ascending=False).index + today = ( + score_series[~score_series.index.isin(last)] + .sort_values(ascending=False) + .index[: self.n_drop + self.topk - len(last)] + ) + comb = score_series.reindex(last.union(today)).sort_values(ascending=False).index + if self.method == "bottom": + sell = last[last.isin(comb[-self.n_drop :])] + elif self.method == "random": + sell = pd.Index(np.random.choice(last, self.n_drop) if len(last) else []) + buy = today[: len(sell) + self.topk - len(last)] + for code in current_stock_list: + if not trade_exchange.is_stock_tradable(stock_id=code, trade_date=trade_date): + continue + if code in sell: + # check hold limit + if self.stock_count[code] < self.thresh or current_temp.get_stock_count(code) < self.hold_thresh: + # can not sell this code + # no buy signal, but the stock is kept + self.stock_count[code] += 1 + continue + # sell order + sell_amount = current_temp.get_stock_amount(code=code) + sell_order = Order( + stock_id=code, + amount=sell_amount, + trade_date=trade_date, + direction=Order.SELL, # 0 for sell, 1 for buy + factor=trade_exchange.get_factor(code, trade_date), + ) + # is order executable + if trade_exchange.check_order(sell_order): + sell_order_list.append(sell_order) + # excute the order + trade_val, trade_cost, trade_price = trade_exchange.calc_deal_order(sell_order) + # update cash + cash += trade_val - trade_cost + # updte current + current_temp.update_order(sell_order, trade_price) + # sold + del self.stock_count[code] + else: + # no buy signal, but the stock is kept + self.stock_count[code] += 1 + elif code in buy: + # NOTE: This is different from the original version + # get new buy signal + # Only the stock fall in to topk will produce buy signal + # Only in margin will no produce buy signal + self.stock_count[code] = 1 + else: + self.stock_count[code] += 1 + # buy new stock + # note the current has been changed + current_stock_list = current_temp.get_stock_list() + value = cash * self.risk_degree / len(buy) if len(buy) > 0 else 0 + + # open_cost should be considered in the real trading environment, while the backtest in evaluate.py does not consider it + # as the aim of demo is to accomplish same strategy as evaluate.py, so comment out this line + # value = value / (1+trade_exchange.open_cost) # set open_cost limit + for code in buy: + # check is stock supended + if not trade_exchange.is_stock_tradable(stock_id=code, trade_date=trade_date): + continue + # buy order + buy_price = trade_exchange.get_deal_price(stock_id=code, trade_date=trade_date) + buy_amount = value / buy_price + factor = trade_exchange.quote[(code, trade_date)]["$factor"] + buy_amount = trade_exchange.round_amount_by_trade_unit(buy_amount, factor) + buy_order = Order( + stock_id=code, + amount=buy_amount, + trade_date=trade_date, + direction=Order.BUY, # 1 for buy + factor=factor, + ) + buy_order_list.append(buy_order) + self.stock_count[code] = 1 + return sell_order_list + buy_order_list diff --git a/qlib/contrib/tuner/__init__.py b/qlib/contrib/tuner/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/qlib/contrib/tuner/config.py b/qlib/contrib/tuner/config.py new file mode 100644 index 0000000000..28796bcf2f --- /dev/null +++ b/qlib/contrib/tuner/config.py @@ -0,0 +1,88 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import yaml +import copy +import os + + +class TunerConfigManager(object): + def __init__(self, config_path): + + if not config_path: + raise ValueError("Config path is invalid.") + self.config_path = config_path + + with open(config_path) as fp: + config = yaml.load(fp) + self.config = copy.deepcopy(config) + + self.pipeline_ex_config = PipelineExperimentConfig(config.get("experiment", dict()), self) + self.pipeline_config = config.get("tuner_pipeline", list()) + self.optim_config = OptimizationConfig(config.get("optimization_criteria", dict()), self) + + self.time_config = config.get("time_period", dict()) + self.data_config = config.get("data", dict()) + self.backtest_config = config.get("backtest", dict()) + self.qlib_client_config = config.get("qlib_client", dict()) + + +class PipelineExperimentConfig(object): + def __init__(self, config, TUNER_CONFIG_MANAGER): + """ + :param config: The config dict for tuner experiment + :param TUNER_CONFIG_MANAGER: The tuner config manager + """ + self.name = config.get("name", "tuner_experiment") + # The dir of the config + self.global_dir = config.get("dir", os.path.dirname(TUNER_CONFIG_MANAGER.config_path)) + # The dir of the result of tuner experiment + self.tuner_ex_dir = config.get("tuner_ex_dir", os.path.join(self.global_dir, self.name)) + if not os.path.exists(self.tuner_ex_dir): + os.makedirs(self.tuner_ex_dir) + # The dir of the results of all estimator experiments + self.estimator_ex_dir = config.get("estimator_ex_dir", os.path.join(self.tuner_ex_dir, "estimator_experiment")) + if not os.path.exists(self.estimator_ex_dir): + os.makedirs(self.estimator_ex_dir) + # Get the tuner type + self.tuner_module_path = config.get("tuner_module_path", "qlib.contrib.tuner.tuner") + self.tuner_class = config.get("tuner_class", "QLibTuner") + # Save the tuner experiment for further view + tuner_ex_config_path = os.path.join(self.tuner_ex_dir, "tuner_config.yaml") + with open(tuner_ex_config_path, "w") as fp: + yaml.dump(TUNER_CONFIG_MANAGER.config, fp) + + +class OptimizationConfig(object): + def __init__(self, config, TUNER_CONFIG_MANAGER): + + self.report_type = config.get("report_type", "pred_long") + if self.report_type not in [ + "pred_long", + "pred_long_short", + "pred_short", + "sub_bench", + "sub_cost", + "model", + ]: + raise ValueError( + "report_type should be one of pred_long, pred_long_short, pred_short, sub_bench, sub_cost and model" + ) + + self.report_factor = config.get("report_factor", "sharpe") + if self.report_factor not in [ + "annual", + "sharpe", + "mdd", + "mean", + "std", + "model_score", + "model_pearsonr", + ]: + raise ValueError( + "report_factor should be one of annual, sharpe, mdd, mean, std, model_pearsonr and model_score" + ) + + self.optim_type = config.get("optim_type", "max") + if self.optim_type not in ["min", "max", "correlation"]: + raise ValueError("optim_type should be min, max or correlation") diff --git a/qlib/contrib/tuner/launcher.py b/qlib/contrib/tuner/launcher.py new file mode 100644 index 0000000000..711658c9a6 --- /dev/null +++ b/qlib/contrib/tuner/launcher.py @@ -0,0 +1,34 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# coding=utf-8 + +import argparse +import importlib +import os +import yaml + +from .config import TunerConfigManager + + +args_parser = argparse.ArgumentParser(prog="tuner") +args_parser.add_argument( + "-c", + "--config_path", + required=True, + type=str, + help="config path indicates where to load yaml config.", +) + +args = args_parser.parse_args() + +TUNER_CONFIG_MANAGER = TunerConfigManager(args.config_path) + + +def run(): + # 1. Get pipeline class. + tuner_pipeline_class = getattr(importlib.import_module(".pipeline", package="qlib.contrib.tuner"), "Pipeline") + # 2. Init tuner pipeline. + tuner_pipeline = tuner_pipeline_class(TUNER_CONFIG_MANAGER) + # 3. Begin to tune + tuner_pipeline.run() diff --git a/qlib/contrib/tuner/pipeline.py b/qlib/contrib/tuner/pipeline.py new file mode 100644 index 0000000000..3a76d071d2 --- /dev/null +++ b/qlib/contrib/tuner/pipeline.py @@ -0,0 +1,86 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import os +import json +import logging +import importlib +from abc import abstractmethod + +from ...log import get_module_logger, TimeInspector +from ...utils import get_module_by_module_path + + +class Pipeline(object): + + GLOBAL_BEST_PARAMS_NAME = "global_best_params.json" + + def __init__(self, tuner_config_manager): + + self.logger = get_module_logger("Pipeline", sh_level=logging.INFO) + + self.tuner_config_manager = tuner_config_manager + + self.pipeline_ex_config = tuner_config_manager.pipeline_ex_config + self.optim_config = tuner_config_manager.optim_config + self.time_config = tuner_config_manager.time_config + self.pipeline_config = tuner_config_manager.pipeline_config + self.data_config = tuner_config_manager.data_config + self.backtest_config = tuner_config_manager.backtest_config + self.qlib_client_config = tuner_config_manager.qlib_client_config + + self.global_best_res = None + self.global_best_params = None + self.best_tuner_index = None + + def run(self): + + TimeInspector.set_time_mark() + for tuner_index, tuner_config in enumerate(self.pipeline_config): + tuner = self.init_tuner(tuner_index, tuner_config) + tuner.tune() + if self.global_best_res is None or self.global_best_res > tuner.best_res: + self.global_best_res = tuner.best_res + self.global_best_params = tuner.best_params + self.best_tuner_index = tuner_index + TimeInspector.log_cost_time("Finished tuner pipeline.") + + self.save_tuner_exp_info() + + def init_tuner(self, tuner_index, tuner_config): + """ + Implement this method to build the tuner by config + return: tuner + """ + # 1. Add experiment config in tuner_config + tuner_config["experiment"] = { + "name": "estimator_experiment_{}".format(tuner_index), + "id": tuner_index, + "dir": self.pipeline_ex_config.estimator_ex_dir, + "observer_type": "file_storage", + } + tuner_config["qlib_client"] = self.qlib_client_config + # 2. Add data config in tuner_config + tuner_config["data"] = self.data_config + # 3. Add backtest config in tuner_config + tuner_config["backtest"] = self.backtest_config + # 4. Update trainer in tuner_config + tuner_config["trainer"].update({"args": self.time_config}) + + # 5. Import Tuner class + tuner_module = get_module_by_module_path(self.pipeline_ex_config.tuner_module_path) + tuner_class = getattr(tuner_module, self.pipeline_ex_config.tuner_class) + # 6. Return the specific tuner + return tuner_class(tuner_config, self.optim_config) + + def save_tuner_exp_info(self): + + TimeInspector.set_time_mark() + save_path = os.path.join(self.pipeline_ex_config.tuner_ex_dir, Pipeline.GLOBAL_BEST_PARAMS_NAME) + with open(save_path, "w") as fp: + json.dump(self.global_best_params, fp) + TimeInspector.log_cost_time("Finished save global best tuner parameters.") + + self.logger.info("Best Tuner id: {}.".format(self.best_tuner_index)) + self.logger.info("Global best parameters: {}.".format(self.global_best_params)) + self.logger.info("You can check the best parameters at {}.".format(save_path)) diff --git a/qlib/contrib/tuner/space.py b/qlib/contrib/tuner/space.py new file mode 100644 index 0000000000..76f101671b --- /dev/null +++ b/qlib/contrib/tuner/space.py @@ -0,0 +1,17 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from hyperopt import hp + + +TopkAmountStrategySpace = { + "topk": hp.choice("topk", [30, 35, 40]), + "buffer_margin": hp.choice("buffer_margin", [200, 250, 300]), +} + +QLibDataLabelSpace = { + "labels": hp.choice( + "labels", + [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]], + ) +} diff --git a/qlib/contrib/tuner/tuner.py b/qlib/contrib/tuner/tuner.py new file mode 100644 index 0000000000..8da40bc695 --- /dev/null +++ b/qlib/contrib/tuner/tuner.py @@ -0,0 +1,218 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import os +import yaml +import json +import copy +import pickle +import logging +import importlib +import subprocess +import pandas as pd +import numpy as np + +from abc import abstractmethod + +from ...log import get_module_logger, TimeInspector +from hyperopt import fmin, tpe +from hyperopt import STATUS_OK, STATUS_FAIL + + +class Tuner(object): + def __init__(self, tuner_config, optim_config): + + self.logger = get_module_logger("Tuner", sh_level=logging.INFO) + + self.tuner_config = tuner_config + self.optim_config = optim_config + + self.max_evals = self.tuner_config.get("max_evals", 10) + self.ex_dir = os.path.join( + self.tuner_config["experiment"]["dir"], + self.tuner_config["experiment"]["name"], + ) + + self.best_params = None + self.best_res = None + + self.space = self.setup_space() + + def tune(self): + + TimeInspector.set_time_mark() + fmin( + fn=self.objective, + space=self.space, + algo=tpe.suggest, + max_evals=self.max_evals, + ) + self.logger.info("Local best params: {} ".format(self.best_params)) + TimeInspector.log_cost_time( + "Finished searching best parameters in Tuner {}.".format(self.tuner_config["experiment"]["id"]) + ) + + self.save_local_best_params() + + @abstractmethod + def objective(self, params): + """ + Implement this method to give an optimization factor using parameters in space. + :return: {'loss': a factor for optimization, float type, + 'status': the status of this evaluation step, STATUS_OK or STATUS_FAIL}. + """ + pass + + @abstractmethod + def setup_space(self): + """ + Implement this method to setup the searching space of tuner. + :return: searching space, dict type. + """ + pass + + @abstractmethod + def save_local_best_params(self): + """ + Implement this method to save the best parameters of this tuner. + """ + pass + + +class QLibTuner(Tuner): + + ESTIMATOR_CONFIG_NAME = "estimator_config.yaml" + EXP_INFO_NAME = "exp_info.json" + EXP_RESULT_DIR = "sacred/{}" + EXP_RESULT_NAME = "analysis.pkl" + LOCAL_BEST_PARAMS_NAME = "local_best_params.json" + + def objective(self, params): + + # 1. Setup an config for a spcific estimator process + estimator_path = self.setup_estimator_config(params) + self.logger.info("Searching params: {} ".format(params)) + + # 2. Use subprocess to do the estimator program, this process will wait until subprocess finish + sub_fails = subprocess.call("estimator -c {}".format(estimator_path), shell=True) + if sub_fails: + # If this subprocess failed, ignore this evaluation step + self.logger.info("Estimator experiment failed when using this searching parameters") + return {"loss": np.nan, "status": STATUS_FAIL} + + # 3. Fetch the result of subprocess, and check whether the result is Nan + res = self.fetch_result() + if np.isnan(res): + status = STATUS_FAIL + else: + status = STATUS_OK + + # 4. Save the best score and params + if self.best_res is None or self.best_res > res: + self.best_res = res + self.best_params = params + + # 5. Return the result as optim objective + return {"loss": res, "status": status} + + def fetch_result(self): + + # 1. Get experiment information + exp_info_path = os.path.join(self.ex_dir, QLibTuner.EXP_INFO_NAME) + with open(exp_info_path) as fp: + exp_info = json.load(fp) + estimator_ex_id = exp_info["id"] + + # 2. Return model result if needed + if self.optim_config.report_type == "model": + if self.optim_config.report_factor == "model_score": + # if estimator experiment is multi-label training, user need to process the scores by himself + # Default method is return the average score + return np.mean(exp_info["performance"]["model_score"]) + elif self.optim_config.report_factor == "model_pearsonr": + # pearsonr is a correlation coefficient, 1 is the best + return np.abs(exp_info["performance"]["model_pearsonr"] - 1) + + # 3. Get backtest results + exp_result_dir = os.path.join(self.ex_dir, QLibTuner.EXP_RESULT_DIR.format(estimator_ex_id)) + exp_result_path = os.path.join(exp_result_dir, QLibTuner.EXP_RESULT_NAME) + with open(exp_result_path, "rb") as fp: + analysis_df = pickle.load(fp) + + # 4. Get the backtest factor which user want to optimize, if user want to maximize the factor, then reverse the result + res = analysis_df.loc[self.optim_config.report_type].loc[self.optim_config.report_factor] + # res = res.values[0] if self.optim_config.optim_type == 'min' else -res.values[0] + if self.optim_config == "min": + return res.values[0] + elif self.optim_config == "max": + return -res.values[0] + else: + # self.optim_config == 'correlation' + return np.abs(res.values[0] - 1) + + def setup_estimator_config(self, params): + + estimator_config = copy.deepcopy(self.tuner_config) + estimator_config["model"].update({"args": params["model_space"]}) + estimator_config["strategy"].update({"args": params["strategy_space"]}) + if params.get("data_label_space", None) is not None: + estimator_config["data"]["args"].update(params["data_label_space"]) + + estimator_path = os.path.join( + self.tuner_config["experiment"].get("dir", "../"), + QLibTuner.ESTIMATOR_CONFIG_NAME, + ) + + with open(estimator_path, "w") as fp: + yaml.dump(estimator_config, fp) + + return estimator_path + + def setup_space(self): + # 1. Setup model space + model_space_name = self.tuner_config["model"].get("space", None) + if model_space_name is None: + raise ValueError("Please give the search space of model.") + model_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + model_space_name, + ) + + # 2. Setup strategy space + strategy_space_name = self.tuner_config["strategy"].get("space", None) + if strategy_space_name is None: + raise ValueError("Please give the search space of strategy.") + strategy_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + strategy_space_name, + ) + + # 3. Setup data label space if given + if self.tuner_config.get("data_label", None) is not None: + data_label_space_name = self.tuner_config["data_label"].get("space", None) + if data_label_space_name is not None: + data_label_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + data_label_space_name, + ) + else: + data_label_space_name = None + + # 4. Combine the searching space + space = dict() + space.update({"model_space": model_space}) + space.update({"strategy_space": strategy_space}) + if data_label_space_name is not None: + space.update({"data_label_space": data_label_space}) + + return space + + def save_local_best_params(self): + + TimeInspector.set_time_mark() + local_best_params_path = os.path.join(self.ex_dir, QLibTuner.LOCAL_BEST_PARAMS_NAME) + with open(local_best_params_path, "w") as fp: + json.dump(self.best_params, fp) + TimeInspector.log_cost_time( + "Finished saving local best tuner parameters to: {} .".format(local_best_params_path) + ) diff --git a/qlib/data/__init__.py b/qlib/data/__init__.py new file mode 100644 index 0000000000..b6eb66468c --- /dev/null +++ b/qlib/data/__init__.py @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +from .data import ( + D, + CalendarProvider, + InstrumentProvider, + FeatureProvider, + ExpressionProvider, + DatasetProvider, + LocalCalendarProvider, + LocalInstrumentProvider, + LocalFeatureProvider, + LocalExpressionProvider, + LocalDatasetProvider, + ClientCalendarProvider, + ClientInstrumentProvider, + ClientDatasetProvider, + BaseProvider, + LocalProvider, + ClientProvider, +) + +from .cache import ( + ExpressionCache, + DatasetCache, + ServerExpressionCache, + ServerDatasetCache, + SimpleDatasetCache, + ClientDatasetCache, + ClientCalendarCache, +) diff --git a/qlib/data/_libs/__init__.py b/qlib/data/_libs/__init__.py new file mode 100644 index 0000000000..59e481eb93 --- /dev/null +++ b/qlib/data/_libs/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. diff --git a/qlib/data/_libs/expanding.pyx b/qlib/data/_libs/expanding.pyx new file mode 100644 index 0000000000..76b824c947 --- /dev/null +++ b/qlib/data/_libs/expanding.pyx @@ -0,0 +1,152 @@ +# cython: profile=False +# cython: boundscheck=False, wraparound=False, cdivision=True +cimport cython +cimport numpy as np +import numpy as np + +from libc.math cimport sqrt, isnan, NAN +from libcpp.vector cimport vector + + +cdef class Expanding(object): + """1-D array expanding""" + cdef vector[double] barv + cdef int na_count + def __init__(self): + self.na_count = 0 + + cdef double update(self, double val): + pass + + +cdef class Mean(Expanding): + """1-D array expanding mean""" + cdef double vsum + def __init__(self): + super(Mean, self).__init__() + self.vsum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + if isnan(val): + self.na_count += 1 + else: + self.vsum += val + return self.vsum / (self.barv.size() - self.na_count) + + +cdef class Slope(Expanding): + """1-D array expanding slope""" + cdef double x_sum + cdef double x2_sum + cdef double y_sum + cdef double xy_sum + def __init__(self): + super(Slope, self).__init__() + self.x_sum = 0 + self.x2_sum = 0 + self.y_sum = 0 + self.xy_sum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + cdef size_t size = self.barv.size() + if isnan(val): + self.na_count += 1 + else: + self.x_sum += size + self.x2_sum += size * size + self.y_sum += val + self.xy_sum += size * val + cdef int N = size - self.na_count + return (N*self.xy_sum - self.x_sum*self.y_sum) / \ + (N*self.x2_sum - self.x_sum*self.x_sum) + + +cdef class Resi(Expanding): + """1-D array expanding residuals""" + cdef double x_sum + cdef double x2_sum + cdef double y_sum + cdef double xy_sum + def __init__(self): + super(Resi, self).__init__() + self.x_sum = 0 + self.x2_sum = 0 + self.y_sum = 0 + self.xy_sum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + cdef size_t size = self.barv.size() + if isnan(val): + self.na_count += 1 + else: + self.x_sum += size + self.x2_sum += size * size + self.y_sum += val + self.xy_sum += size * val + cdef int N = size - self.na_count + slope = (N*self.xy_sum - self.x_sum*self.y_sum) / \ + (N*self.x2_sum - self.x_sum*self.x_sum) + x_mean = self.x_sum / N + y_mean = self.y_sum / N + interp = y_mean - slope*x_mean + return val - (slope*size + interp) + + +cdef class Rsquare(Expanding): + """1-D array expanding rsquare""" + cdef double x_sum + cdef double x2_sum + cdef double y_sum + cdef double y2_sum + cdef double xy_sum + def __init__(self): + super(Rsquare, self).__init__() + self.x_sum = 0 + self.x2_sum = 0 + self.y_sum = 0 + self.y2_sum = 0 + self.xy_sum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + cdef size_t size = self.barv.size() + if isnan(val): + self.na_count += 1 + else: + self.x_sum += size + self.x2_sum += size + self.y_sum += val + self.y2_sum += val * val + self.xy_sum += size * val + cdef int N = size - self.na_count + cdef double rvalue = (N*self.xy_sum - self.x_sum*self.y_sum) / \ + sqrt((N*self.x2_sum - self.x_sum*self.x_sum) * (N*self.y2_sum - self.y_sum*self.y_sum)) + return rvalue * rvalue + + +cdef np.ndarray[double, ndim=1] expanding(Expanding r, np.ndarray a): + cdef int i + cdef int N = len(a) + cdef np.ndarray[double, ndim=1] ret = np.empty(N) + for i in range(N): + ret[i] = r.update(a[i]) + return ret + +def expanding_mean(np.ndarray a): + cdef Mean r = Mean() + return expanding(r, a) + +def expanding_slope(np.ndarray a): + cdef Slope r = Slope() + return expanding(r, a) + +def expanding_rsquare(np.ndarray a): + cdef Rsquare r = Rsquare() + return expanding(r, a) + +def expanding_resi(np.ndarray a): + cdef Resi r = Resi() + return expanding(r, a) diff --git a/qlib/data/_libs/rolling.pyx b/qlib/data/_libs/rolling.pyx new file mode 100644 index 0000000000..37d27ffa4d --- /dev/null +++ b/qlib/data/_libs/rolling.pyx @@ -0,0 +1,207 @@ +# cython: profile=False +# cython: boundscheck=False, wraparound=False, cdivision=True +cimport cython +cimport numpy as np +import numpy as np + +from libc.math cimport sqrt, isnan, NAN +from libcpp.deque cimport deque + + +cdef class Rolling(object): + """1-D array rolling""" + cdef int window + cdef deque[double] barv + cdef int na_count + def __init__(self, int window): + self.window = window + self.na_count = window + cdef int i + for i in range(window): + self.barv.push_back(NAN) + + cdef double update(self, double val): + pass + + +cdef class Mean(Rolling): + """1-D array rolling mean""" + cdef double vsum + def __init__(self, int window): + super(Mean, self).__init__(window) + self.vsum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + if not isnan(self.barv.front()): + self.vsum -= self.barv.front() + else: + self.na_count -= 1 + self.barv.pop_front() + if isnan(val): + self.na_count += 1 + # return NAN + else: + self.vsum += val + return self.vsum / (self.window - self.na_count) + + +cdef class Slope(Rolling): + """1-D array rolling slope""" + cdef double i_sum # can be used as i2_sum + cdef double x_sum + cdef double x2_sum + cdef double y_sum + cdef double xy_sum + def __init__(self, int window): + super(Slope, self).__init__(window) + self.i_sum = 0 + self.x_sum = 0 + self.x2_sum = 0 + self.y_sum = 0 + self.xy_sum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + self.xy_sum = self.xy_sum - self.y_sum + self.x2_sum = self.x2_sum + self.i_sum - 2*self.x_sum + self.x_sum = self.x_sum - self.i_sum + cdef double _val + _val = self.barv.front() + if not isnan(_val): + self.i_sum -= 1 + self.y_sum -= _val + else: + self.na_count -= 1 + self.barv.pop_front() + if isnan(val): + self.na_count += 1 + # return NAN + else: + self.i_sum += 1 + self.x_sum += self.window + self.x2_sum += self.window * self.window + self.y_sum += val + self.xy_sum += self.window * val + cdef int N = self.window - self.na_count + return (N*self.xy_sum - self.x_sum*self.y_sum) / \ + (N*self.x2_sum - self.x_sum*self.x_sum) + + +cdef class Resi(Rolling): + """1-D array rolling residuals""" + cdef double i_sum # can be used as i2_sum + cdef double x_sum + cdef double x2_sum + cdef double y_sum + cdef double xy_sum + def __init__(self, int window): + super(Resi, self).__init__(window) + self.i_sum = 0 + self.x_sum = 0 + self.x2_sum = 0 + self.y_sum = 0 + self.xy_sum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + self.xy_sum = self.xy_sum - self.y_sum + self.x2_sum = self.x2_sum + self.i_sum - 2*self.x_sum + self.x_sum = self.x_sum - self.i_sum + cdef double _val + _val = self.barv.front() + if not isnan(_val): + self.i_sum -= 1 + self.y_sum -= _val + else: + self.na_count -= 1 + self.barv.pop_front() + if isnan(val): + self.na_count += 1 + # return NAN + else: + self.i_sum += 1 + self.x_sum += self.window + self.x2_sum += self.window * self.window + self.y_sum += val + self.xy_sum += self.window * val + cdef int N = self.window - self.na_count + slope = (N*self.xy_sum - self.x_sum*self.y_sum) / \ + (N*self.x2_sum - self.x_sum*self.x_sum) + x_mean = self.x_sum / N + y_mean = self.y_sum / N + interp = y_mean - slope*x_mean + return val - (slope*self.window + interp) + + +cdef class Rsquare(Rolling): + """1-D array rolling rsquare""" + cdef double i_sum + cdef double x_sum + cdef double x2_sum + cdef double y_sum + cdef double y2_sum + cdef double xy_sum + def __init__(self, int window): + super(Rsquare, self).__init__(window) + self.i_sum = 0 + self.x_sum = 0 + self.x2_sum = 0 + self.y_sum = 0 + self.y2_sum = 0 + self.xy_sum = 0 + + cdef double update(self, double val): + self.barv.push_back(val) + self.xy_sum = self.xy_sum - self.y_sum + self.x2_sum = self.x2_sum + self.i_sum - 2*self.x_sum + self.x_sum = self.x_sum - self.i_sum + cdef double _val + _val = self.barv.front() + if not isnan(_val): + self.i_sum -= 1 + self.y_sum -= _val + self.y2_sum -= _val * _val + else: + self.na_count -= 1 + self.barv.pop_front() + if isnan(val): + self.na_count += 1 + # return NAN + else: + self.i_sum += 1 + self.x_sum += self.window + self.x2_sum += self.window * self.window + self.y_sum += val + self.y2_sum += val * val + self.xy_sum += self.window * val + cdef int N = self.window - self.na_count + cdef double rvalue + rvalue = (N*self.xy_sum - self.x_sum*self.y_sum) / \ + sqrt((N*self.x2_sum - self.x_sum*self.x_sum) * (N*self.y2_sum - self.y_sum*self.y_sum)) + return rvalue * rvalue + + +cdef np.ndarray[double, ndim=1] rolling(Rolling r, np.ndarray a): + cdef int i + cdef int N = len(a) + cdef np.ndarray[double, ndim=1] ret = np.empty(N) + for i in range(N): + ret[i] = r.update(a[i]) + return ret + +def rolling_mean(np.ndarray a, int window): + cdef Mean r = Mean(window) + return rolling(r, a) + +def rolling_slope(np.ndarray a, int window): + cdef Slope r = Slope(window) + return rolling(r, a) + +def rolling_rsquare(np.ndarray a, int window): + cdef Rsquare r = Rsquare(window) + return rolling(r, a) + +def rolling_resi(np.ndarray a, int window): + cdef Resi r = Resi(window) + return rolling(r, a) diff --git a/qlib/data/base.py b/qlib/data/base.py new file mode 100644 index 0000000000..c357700c0c --- /dev/null +++ b/qlib/data/base.py @@ -0,0 +1,229 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import abc +import six +import pandas as pd + + +@six.add_metaclass(abc.ABCMeta) +class Expression(object): + """Expression base class""" + + def __str__(self): + return type(self).__name__ + + def __repr__(self): + return str(self) + + def __gt__(self, other): + from .ops import Gt + + return Gt(self, other) + + def __ge__(self, other): + from .ops import Ge + + return Ge(self, other) + + def __lt__(self, other): + from .ops import Lt + + return Lt(self, other) + + def __le__(self, other): + from .ops import Le + + return Le(self, other) + + def __eq__(self, other): + from .ops import Eq + + return Eq(self, other) + + def __ne__(self, other): + from .ops import Ne + + return Ne(self, other) + + def __add__(self, other): + from .ops import Add + + return Add(self, other) + + def __radd__(self, other): + from .ops import Add + + return Add(other, self) + + def __sub__(self, other): + from .ops import Sub + + return Sub(self, other) + + def __rsub__(self, other): + from .ops import Sub + + return Sub(other, self) + + def __mul__(self, other): + from .ops import Mul + + return Mul(self, other) + + def __rmul__(self, other): + from .ops import Mul + + return Mul(self, other) + + def __div__(self, other): + from .ops import Div + + return Div(self, other) + + def __rdiv__(self, other): + from .ops import Div + + return Div(other, self) + + def __truediv__(self, other): + from .ops import Div + + return Div(self, other) + + def __rtruediv__(self, other): + from .ops import Div + + return Div(other, self) + + def __pow__(self, other): + from .ops import Power + + return Power(self, other) + + def __and__(self, other): + from .ops import And + + return And(self, other) + + def __rand__(self, other): + from .ops import And + + return And(other, self) + + def __or__(self, other): + from .ops import Or + + return Or(self, other) + + def __ror__(self, other): + from .ops import Or + + return Or(other, self) + + def load(self, instrument, start_index, end_index, freq): + """load feature + + Parameters + ---------- + instrument : str + instrument code + start_index : str + feature start index [in calendar] + end_index : str + feature end index [in calendar] + freq : str + feature frequency + + Returns + ---------- + pd.Series + feature series: The index of the series is the calendar index + """ + from .cache import H + + # cache + args = str(self), instrument, start_index, end_index, freq + if args in H["f"]: + return H["f"][args] + if start_index is None or end_index is None or start_index > end_index: + raise ValueError("Invalid index range: {} {}".format(start_index, end_index)) + series = self._load_internal(instrument, start_index, end_index, freq) + series.name = str(self) + H["f"][args] = series + return series + + @abc.abstractmethod + def _load_internal(self, instrument, start_index, end_index, freq): + pass + + @abc.abstractmethod + def get_longest_back_rolling(self): + """Get the longest length of historical data the feature has accessed + + This is designed for getting the needed range of the data to calculate + the features in specific range at first. However, situations like + Ref(Ref($close, -1), 1) can not be handled rightly. + + So this will only used for detecting the length of historical data needed. + """ + # TODO: forward operator like Ref($close, -1) is not supported yet. + raise NotImplementedError("This function must be implemented in your newly defined feature") + + @abc.abstractmethod + def get_extended_window_size(self): + """get_extend_window_size + + For to calculate this Operator in range[start_index, end_index] + We have to get the *leaf feature* in + range[start_index - lft_etd, end_index + rght_etd]. + + Returns + ---------- + (int, int) + lft_etd, rght_etd + """ + raise NotImplementedError("This function must be implemented in your newly defined feature") + + +class Feature(Expression): + """Static Expression + + This kind of feature will load data from provider + """ + + def __init__(self, name=None): + if name: + self._name = name.lower() + else: + self._name = type(self).__name__.lower() + + def __str__(self): + return "$" + self._name + + def _load_internal(self, instrument, start_index, end_index, freq): + # load + from .data import FeatureD + + return FeatureD.feature(instrument, str(self), start_index, end_index, freq) + + def get_longest_back_rolling(self): + return 0 + + def get_extended_window_size(self): + return 0, 0 + + +@six.add_metaclass(abc.ABCMeta) +class ExpressionOps(Expression): + """Operator Expression + + This kind of feature will use operator for feature + construction on the fly. + """ + + pass diff --git a/qlib/data/cache.py b/qlib/data/cache.py new file mode 100644 index 0000000000..a91b5d71ef --- /dev/null +++ b/qlib/data/cache.py @@ -0,0 +1,1143 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import os +import sys +import stat +import time +import pickle +import traceback +import redis_lock +import contextlib +from pathlib import Path +import numpy as np +import pandas as pd +from collections import OrderedDict + +from ..config import C +from ..utils import ( + hash_args, + get_redis_connection, + read_bin, + parse_field, + remove_fields_space, + normalize_cache_fields, + normalize_cache_instruments, +) + +from ..log import get_module_logger +from .base import Feature + +from .ops import * + + +class MemCacheUnit(OrderedDict): + """Memory Cache Unit.""" + + # TODO: use min_heap to replace ordereddict for better performance + + def __init__(self, *args, **kwargs): + self.size_limit = kwargs.pop("size_limit", None) + # limit_type: check size_limit type, length(call fun: len) or size(call fun: sys.getsizeof) + self.limit_type = kwargs.pop("limit_type", "length") + super(MemCacheUnit, self).__init__(*args, **kwargs) + self._check_size_limit() + + def __setitem__(self, key, value): + super(MemCacheUnit, self).__setitem__(key, value) + self._check_size_limit() + + def __getitem__(self, key): + value = super(MemCacheUnit, self).__getitem__(key) + super(MemCacheUnit, self).__delitem__(key) + super(MemCacheUnit, self).__setitem__(key, value) + return value + + def _check_size_limit(self): + if self.size_limit is not None: + get_cur_size = lambda x: len(x) if self.limit_type == "length" else sum(map(sys.getsizeof, x.values())) + while get_cur_size(self) > self.size_limit: + self.popitem(last=False) + + +class MemCache(object): + """Memory cache.""" + + def __init__(self, mem_cache_size_limit=None, limit_type="length"): + """ + + Parameters + ---------- + mem_cache_size_limit: cache max size + limit_type: length or sizeof; length(call fun: len), size(call fun: sys.getsizeof) + """ + if limit_type not in ["length", "sizeof"]: + raise ValueError(f"limit_type must be length or sizeof, your limit_type is {limit_type}") + + self.__calendar_mem_cache = MemCacheUnit( + size_limit=C.mem_cache_size_limit if mem_cache_size_limit is None else mem_cache_size_limit, + limit_type=limit_type, + ) + self.__instrument_mem_cache = MemCacheUnit( + size_limit=C.mem_cache_size_limit if mem_cache_size_limit is None else mem_cache_size_limit, + limit_type=limit_type, + ) + self.__feature_mem_cache = MemCacheUnit( + size_limit=C.mem_cache_size_limit if mem_cache_size_limit is None else mem_cache_size_limit, + limit_type=limit_type, + ) + + def __getitem__(self, key): + if key == "c": + return self.__calendar_mem_cache + elif key == "i": + return self.__instrument_mem_cache + elif key == "f": + return self.__feature_mem_cache + else: + raise KeyError("Unknown memcache unit") + + def clear(self): + self.__calendar_mem_cache.clear() + self.__instrument_mem_cache.clear() + self.__feature_mem_cache.clear() + + +class MemCacheExpire: + CACHE_EXPIRE = C.mem_cache_expire + + @staticmethod + def set_cache(mem_cache, key, value): + """set cache + + :param mem_cache: MemCache attribute('c'/'i'/'f') + :param key: cache key + :param value: cache value + """ + mem_cache[key] = value, time.time() + + @staticmethod + def get_cache(mem_cache, key): + """get mem cache + + :param mem_cache: MemCache attribute('c'/'i'/'f') + :param key: cache key + :return: cache value; if cache not exist, return None + """ + value = None + expire = False + if key in mem_cache: + value, latest_time = mem_cache[key] + expire = (time.time() - latest_time) > MemCacheExpire.CACHE_EXPIRE + return value, expire + + +class CacheUtils(object): + LOCK_ID = "QLIB" + + @staticmethod + def organize_meta_file(): + pass + + @staticmethod + def reset_lock(): + r = get_redis_connection() + redis_lock.reset_all(r) + + @staticmethod + def visit(cache_path): + # FIXME: Because read_lock was canceled when reading the cache, multiple processes may have read and write exceptions here + try: + with open(cache_path + ".meta", "rb") as f: + d = pickle.load(f) + with open(cache_path + ".meta", "wb") as f: + try: + d["meta"]["last_visit"] = str(time.time()) + d["meta"]["visits"] = d["meta"]["visits"] + 1 + except KeyError: + raise KeyError("Unknown meta keyword") + pickle.dump(d, f) + except Exception as e: + get_module_logger("CacheUtils").warning(f"visit {cache_path} cache error: {e}") + + @staticmethod + @contextlib.contextmanager + def reader_lock(redis_t, lock_name): + lock_name = f"{C.provider_uri}:{lock_name}" + current_cache_rlock = redis_lock.Lock(redis_t, "%s-rlock" % lock_name) + current_cache_wlock = redis_lock.Lock(redis_t, "%s-wlock" % lock_name) + # make sure only one reader is entering + current_cache_rlock.acquire(timeout=60) + try: + current_cache_readers = redis_t.get("%s-reader" % lock_name) + if current_cache_readers is None or int(current_cache_readers) == 0: + current_cache_wlock.acquire() + redis_t.incr("%s-reader" % lock_name) + finally: + current_cache_rlock.release() + try: + yield + finally: + # make sure only one reader is leaving + current_cache_rlock.acquire(timeout=60) + try: + redis_t.decr("%s-reader" % lock_name) + if int(redis_t.get("%s-reader" % lock_name)) == 0: + redis_t.delete("%s-reader" % lock_name) + current_cache_wlock.reset() + finally: + current_cache_rlock.release() + + @staticmethod + @contextlib.contextmanager + def writer_lock(redis_t, lock_name): + lock_name = f"{C.provider_uri}:{lock_name}" + current_cache_wlock = redis_lock.Lock(redis_t, "%s-wlock" % lock_name, id=CacheUtils.LOCK_ID) + current_cache_wlock.acquire() + try: + yield + finally: + current_cache_wlock.release() + + +class BaseProviderCache(object): + """Provider cache base class""" + + def __init__(self, provider): + self.provider = provider + self.logger = get_module_logger(self.__class__.__name__) + + def __getattr__(self, attr): + return getattr(self.provider, attr) + + +class ExpressionCache(BaseProviderCache): + """Expression cache mechanism base class. + + This class is used to wrap expression provider with self-defined expression cache mechanism. + + .. note:: Override the `_uri` and `_expression` method to create your own expression cache mechanism. + """ + + def expression(self, instrument, field, start_time, end_time, freq): + """Get expression data. + + .. note:: Same interface as `expression` method in expression provider + """ + try: + return self._expression(instrument, field, start_time, end_time, freq) + except NotImplementedError: + return self.provider.expression(instrument, field, start_time, end_time, freq) + + def _uri(self, instrument, field, start_time, end_time, freq): + """Get expression cache file uri. + + Override this method to define how to get expression cache file uri corresponding to users' own cache mechanism. + """ + raise NotImplementedError("Implement this function to match your own cache mechanism") + + def _expression(self, instrument, field, start_time, end_time, freq): + """Get expression data using cache. + + Override this method to define how to get expression data corresponding to users' own cache mechanism. + """ + raise NotImplementedError("Implement this method if you want to use expression cache") + + def update(self, cache_uri): + """Update expression cache to latest calendar. + + Overide this method to define how to update expression cache corresponding to users' own cache mechanism. + + Parameters + ---------- + cache_uri : str + the complete uri of expression cache file (include dir path) + + Returns + ------- + int + 0(successful update)/ 1(no need to update)/ 2(update failure) + """ + raise NotImplementedError("Implement this method if you want to make expression cache up to date") + + +class DatasetCache(BaseProviderCache): + """Dataset cache mechanism base class. + + This class is used to wrap dataset provider with self-defined dataset cache mechanism. + + .. note:: Override the `_uri` and `_dataset` method to create your own dataset cache mechanism. + """ + + HDF_KEY = "df" + + def dataset( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + ): + """Get feature dataset. + + .. note:: Same interface as `dataset` method in dataset provider + + .. note:: The server use redis_lock to make sure + read-write conflicts will not be triggered + but client readers are not considered. + """ + if disk_cache == 0: + # skip cache + return self.provider.dataset(instruments, fields, start_time, end_time, freq) + else: + # use and replace cache + try: + return self._dataset(instruments, fields, start_time, end_time, freq, disk_cache) + except NotImplementedError: + return self.provider.dataset(instruments, fields, start_time, end_time, freq) + + def _uri(self, instruments, fields, start_time, end_time, freq, **kwargs): + """Get dataset cache file uri. + + Override this method to define how to get dataset cache file uri corresponding to users' own cache mechanism. + """ + raise NotImplementedError("Implement this function to match your own cache mechanism") + + def _dataset( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + ): + """Get feature dataset using cache. + + Override this method to define how to get feature dataset corresponding to users' own cache mechanism. + """ + raise NotImplementedError("Implement this method if you want to use dataset feature cache") + + def _dataset_uri( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + ): + """Get a uri of feature dataset using cache. + specially: + disk_cache=1 means using data set cache and return the uri of cache file. + disk_cache=0 means client knows the path of expression cache, + server checks if the cache exists(if not, generate it), and client loads data by itself. + Override this method to define how to get feature dataset uri corresponding to users' own cache mechanism. + """ + raise NotImplementedError( + "Implement this method if you want to use dataset feature cache as a cache file for client" + ) + + def update(self, cache_uri): + """Update dataset cache to latest calendar. + + Overide this method to define how to update dataset cache corresponding to users' own cache mechanism. + + Parameters + ---------- + cache_uri : str + the complete uri of dataset cache file (include dir path) + + Returns + ------- + int + 0(successful update)/ 1(no need to update)/ 2(update failure) + """ + raise NotImplementedError("Implement this method if you want to make expression cache up to date") + + @staticmethod + def cache_to_origin_data(data, fields): + """cache data to origin data + + :param data: pd.DataFrame, cache data + :param fields: feature fields + :return: pd.DataFrame + """ + not_space_fields = remove_fields_space(fields) + data = data.loc[:, not_space_fields] + # set features fields + data.columns = list(fields) + return data + + @staticmethod + def normalize_uri_args(instruments, fields, freq): + """normalize uri args""" + instruments = normalize_cache_instruments(instruments) + fields = normalize_cache_fields(fields) + freq = freq.lower() + + return instruments, fields, freq + + +class ServerExpressionCache(ExpressionCache): + """Prepared cache mechanism for server.""" + + def __init__(self, provider, **kwargs): + super(ServerExpressionCache, self).__init__(provider) + self.r = get_redis_connection() + # remote==True means client is using this module, writing behaviour will not be allowed. + self.remote = kwargs.get("remote", False) + if self.remote: + self.expr_cache_path = os.path.join(C.mount_path, C.features_cache_dir_name) + else: + self.expr_cache_path = os.path.join(C.provider_uri, C.features_cache_dir_name) + os.makedirs(self.expr_cache_path, exist_ok=True) + + def _uri(self, instrument, field, start_time, end_time, freq): + field = remove_fields_space(field) + instrument = str(instrument).lower() + return hash_args(instrument, field, freq) + + @staticmethod + def check_cache_exists(cache_path): + for p in [cache_path, cache_path + ".meta"]: + if not Path(p).exists(): + return False + return True + + def _expression(self, instrument, field, start_time=None, end_time=None, freq="day"): + _cache_uri = self._uri( + instrument=instrument, + field=field, + start_time=None, + end_time=None, + freq=freq, + ) + _instrument_dir = os.path.join(self.expr_cache_path, instrument.lower()) + cache_path = os.path.join(_instrument_dir, _cache_uri) + # get calendar + from .data import Cal + + _calendar = Cal.calendar(freq=freq) + + _, _, start_index, end_index = Cal.locate_index(start_time, end_time, freq, future=False) + + if self.check_cache_exists(cache_path): + """ + In most cases, we do not need reader_lock. + Because updating data is a small probability event compare to reading data. + + """ + # FIXME: Removing the reader lock may result in conflicts. + # with CacheUtils.reader_lock(self.r, 'expression-%s' % _cache_uri): + + # modify expression cache meta file + try: + # FIXME: Multiple readers may result in error visit number + if not self.remote: + CacheUtils.visit(cache_path) + series = read_bin(cache_path, start_index, end_index) + return series + except Exception as e: + series = None + self.logger.error("reading %s file error : %s" % (cache_path, traceback.format_exc())) + return series + else: + # normalize field + field = remove_fields_space(field) + # cache unavailable, generate the cache + if not os.path.exists(_instrument_dir): + os.makedirs(_instrument_dir, exist_ok=True) + if not isinstance(eval(parse_field(field)), Feature): + # When the expression is not a raw feature + # generate expression cache if the feature is not a Feature + # instance + series = self.provider.expression(instrument, field, _calendar[0], _calendar[-1], freq) + if not series.empty: + # This expresion is empty, we don't generate any cache for it. + with CacheUtils.writer_lock(self.r, "expression-%s" % _cache_uri): + self.gen_expression_cache( + expression_data=series, + cache_path=cache_path, + instrument=instrument, + field=field, + freq=freq, + last_update=str(_calendar[-1]), + ) + return series.loc[start_index:end_index] + else: + return series + else: + # If the expression is a raw feature(such as $close, $open) + return self.provider.expression(instrument, field, start_time, end_time, freq) + + @staticmethod + def clear_cache(cache_path): + meta_path = cache_path + ".meta" + for p in [cache_path, meta_path]: + p = Path(p) + if p.exists(): + p.unlink() + + def gen_expression_cache(self, expression_data, cache_path, instrument, field, freq, last_update): + """use bin file to save like feature-data.""" + # Make sure the cache runs right when the directory is deleted + # while running + meta = { + "info": { + "instrument": instrument, + "field": field, + "freq": freq, + "last_update": last_update, + }, + "meta": {"last_visit": time.time(), "visits": 1}, + } + self.logger.debug(f"generating expression cache: {meta}") + os.makedirs(self.expr_cache_path, exist_ok=True) + self.clear_cache(cache_path) + meta_path = cache_path + ".meta" + + with open(meta_path, "wb") as f: + pickle.dump(meta, f) + os.chmod(meta_path, stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH) + df = expression_data.to_frame() + + r = np.hstack([df.index[0], expression_data]).astype(" 0: + start, stop = ( + index_data["start"].iloc[0].item(), + index_data["end"].iloc[-1].item(), + ) + else: + start = stop = 0 + + with pd.HDFStore(cache_path, mode="r") as store: + if "/{}".format(im.KEY) in store.keys(): + df = store.select(key=im.KEY, start=start, stop=stop) + df.reset_index(inplace=True) + df.set_index(["instrument", "datetime"], inplace=True) + df.sort_index(inplace=True) + # read cache and need to replace not-space fields to field + df = cls.cache_to_origin_data(df, fields) + + else: + df = pd.DataFrame(columns=fields) + return df + + def _dataset( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=0, + ): + + if disk_cache == 0: + # In this case, data_set cache is configured but will not be used. + return self.provider.dataset(instruments, fields, start_time, end_time, freq) + + _cache_uri = self._uri( + instruments=instruments, + fields=fields, + start_time=None, + end_time=None, + freq=freq, + disk_cache=disk_cache, + ) + + cache_path = os.path.join(self.dtst_cache_path, _cache_uri) + + features = pd.DataFrame() + gen_flag = False + + if self.check_cache_exists(cache_path): + if disk_cache == 1: + # use cache + with CacheUtils.reader_lock(self.r, "dataset-%s" % _cache_uri): + CacheUtils.visit(cache_path) + features = self.read_data_from_cache(cache_path, start_time, end_time, fields) + elif disk_cache == 2: + gen_flag = True + else: + gen_flag = True + + if gen_flag: + # cache unavailable, generate the cache + with CacheUtils.writer_lock(self.r, "dataset-%s" % _cache_uri): + features = self.gen_dataset_cache( + cache_path=cache_path, + instruments=instruments, + fields=fields, + freq=freq, + ) + if not features.empty: + features.reset_index(inplace=True) + features.set_index(["datetime", "instrument"], inplace=True) + features.sort_index(inplace=True) + features = features.loc[start_time:end_time] + return features + + def _dataset_uri( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=0, + ): + if disk_cache == 0: + # In this case, server only checks the expression cache. + # The client will load the cache data by itself. + from .data import LocalDatasetProvider + + LocalDatasetProvider.multi_cache_walker(instruments, fields, start_time, end_time, freq) + return "" + + _cache_uri = self._uri( + instruments=instruments, + fields=fields, + start_time=None, + end_time=None, + freq=freq, + disk_cache=disk_cache, + ) + cache_path = os.path.join(self.dtst_cache_path, _cache_uri) + + if self.check_cache_exists(cache_path): + self.logger.debug(f"The cache dataset has already existed {cache_path}. Return the uri directly") + with CacheUtils.reader_lock(self.r, "dataset-%s" % _cache_uri): + CacheUtils.visit(cache_path) + return _cache_uri + else: + # cache unavailable, generate the cache + with CacheUtils.writer_lock(self.r, "dataset-%s" % _cache_uri): + self.gen_dataset_cache( + cache_path=cache_path, + instruments=instruments, + fields=fields, + freq=freq, + ) + return _cache_uri + + class IndexManager: + """ + The lock is not considered in the class. Please consider the lock outside the code. + This class is the proxy of the disk data. + """ + + KEY = "df" + + def __init__(self, cache_path): + self.index_path = cache_path + ".index" + self._data = None + self.logger = get_module_logger(self.__class__.__name__) + + def get_index(self, start_time=None, end_time=None): + # TODO: fast read index from the disk. + if self._data is None: + self.sync_from_disk() + return self._data.loc[start_time:end_time].copy() + + def sync_to_disk(self): + if self._data is None: + raise ValueError("No data to sync to disk.") + self._data.sort_index(inplace=True) + self._data.to_hdf(self.index_path, key=self.KEY, mode="w", format="table") + # The index should be readable for all users + os.chmod(self.index_path, stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH) + + def sync_from_disk(self): + # The file will not be closed directly if we read_hdf from the disk directly + with pd.HDFStore(self.index_path, mode="r") as store: + if "/{}".format(self.KEY) in store.keys(): + self._data = pd.read_hdf(store, key=self.KEY) + else: + self._data = pd.DataFrame() + + def update(self, data, sync=True): + self._data = data.astype(np.int32).copy() + if sync: + self.sync_to_disk() + + def append_index(self, data, to_disk=True): + data = data.astype(np.int32).copy() + data.sort_index(inplace=True) + self._data = pd.concat([self._data, data]) + if to_disk: + with pd.HDFStore(self.index_path) as store: + store.append(self.KEY, data, append=True) + + @staticmethod + def build_index_from_data(data, start_index=0): + if data.empty: + return pd.DataFrame() + line_data = data.iloc[:, 0].fillna(0).groupby("datetime").count() + line_data.sort_index(inplace=True) + index_end = line_data.cumsum() + index_start = index_end.shift(1).fillna(0) + + index_data = pd.DataFrame() + index_data["start"] = index_start + index_data["end"] = index_end + index_data += start_index + return index_data + + @staticmethod + def clear_cache(cache_path): + meta_path = cache_path + ".meta" + for p in [cache_path, meta_path, cache_path + ".index", cache_path + ".data"]: + p = Path(p) + if p.exists(): + p.unlink() + + def gen_dataset_cache(self, cache_path, instruments, fields, freq): + """gen_dataset_cache + + NOTE:This function does not consider the cache read write lock. Please + Aquire the lock outside this function + + The format the cache contains 3 parts(followed by typical filename). + - index : cache/d41366901e25de3ec47297f12e2ba11d.index + - The content of the file may be in following format(pandas.Series) + start end + 1999-11-10 00:00:00 0 1 + 1999-11-11 00:00:00 1 2 + 1999-11-12 00:00:00 2 3 + ... + NOTE: The start is closed. The end is open!!!!! + - Each line contains two element + - It indicates the `end_index` of the data for `timestamp` + + - meta data: cache/d41366901e25de3ec47297f12e2ba11d.meta + - data : cache/d41366901e25de3ec47297f12e2ba11d + - This is a hdf file sorted by datetime + + :param cache_path: The path to store the cache + :param instruments: The instruments to store the cache + :param fields: The fields to store the cache + :param freq: The freq to store the cache + + :return type pd.DataFrame; The fields of the returned DataFrame are consistent with the parameters of the function + """ + # get calendar + from .data import Cal + + _calendar = Cal.calendar(freq=freq) + self.logger.debug(f"Generating dataset cache {cache_path}") + # Make sure the cache runs right when the directory is deleted + # while running + os.makedirs(self.dtst_cache_path, exist_ok=True) + self.clear_cache(cache_path) + + features = self.provider.dataset(instruments, fields, _calendar[0], _calendar[-1], freq) + + # sort index by datetime + if not features.empty: + features.reset_index(inplace=True) + features.set_index(["datetime", "instrument"], inplace=True) + features.sort_index(inplace=True) + + # write cache data + with pd.HDFStore(cache_path + ".data") as store: + cache_to_orig_map = dict(zip(remove_fields_space(features.columns), features.columns)) + orig_to_cache_map = dict(zip(features.columns, remove_fields_space(features.columns))) + cache_features = features[list(cache_to_orig_map.values())].rename(columns=orig_to_cache_map) + # cache columns + cache_columns = sorted(cache_features.columns) + cache_features = cache_features.loc[:, cache_columns] + cache_features = cache_features.loc[:, ~cache_features.columns.duplicated()] + store.append(DatasetCache.HDF_KEY, cache_features, append=False) + # write meta file + meta = { + "info": { + "instruments": instruments, + "fields": cache_columns, + "freq": freq, + "last_update": str(_calendar[-1]), # The last_update to store the cache + }, + "meta": {"last_visit": time.time(), "visits": 1}, + } + with open(cache_path + ".meta", "wb") as f: + pickle.dump(meta, f) + os.chmod(cache_path + ".meta", stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH) + # write index file + im = ServerDatasetCache.IndexManager(cache_path) + index_data = im.build_index_from_data(features) + im.update(index_data) + + # rename the file after the cache has been generated + # this doesn't work well on windows, but our server won't use windows + # temporarily + os.replace(cache_path + ".data", cache_path) + # the fields of the cached features are converted to the original fields + return features + + def update(self, cache_uri): + cp_cache_uri = os.path.join(self.dtst_cache_path, cache_uri) + + if not self.check_cache_exists(cp_cache_uri): + self.logger.info(f"The cache {cp_cache_uri} has corrupted. It will be removed") + self.clear_cache(cp_cache_uri) + return 2 + + im = ServerDatasetCache.IndexManager(cp_cache_uri) + with CacheUtils.writer_lock(self.r, "dataset-%s" % cache_uri): + with open(cp_cache_uri + ".meta", "rb") as f: + d = pickle.load(f) + instruments = d["info"]["instruments"] + fields = d["info"]["fields"] + freq = d["info"]["freq"] + last_update_time = d["info"]["last_update"] + index_data = im.get_index() + + self.logger.debug("Updating dataset: {}".format(d)) + from .data import Inst + + if Inst.get_inst_type(instruments) == Inst.DICT: + self.logger.info(f"The file {cache_uri} has dict cache. Skip updating") + return 1 + + # get newest calendar + from .data import Cal + + whole_calendar = Cal.calendar(start_time=None, end_time=None, freq=freq) + # The calendar since last updated + new_calendar = Cal.calendar(start_time=last_update_time, end_time=None, freq=freq) + + # get append data + if len(new_calendar) <= 1: + # Including last updated calendar, we only get 1 item. + # No future updating is needed. + return 1 + else: + # get the data needed after the historical data are removed. + # The start index of new data + current_index = len(whole_calendar) - len(new_calendar) + 1 + + # To avoid recursive import + from .data import ExpressionD + + # The existing data length + lft_etd = rght_etd = 0 + for field in fields: + expr = ExpressionD.get_expression_instance(field) + l, r = expr.get_extended_window_size() + lft_etd = max(lft_etd, l) + rght_etd = max(rght_etd, r) + # remove the period that should be updated. + if index_data.empty: + # We don't have any data for such dataset. Nothing to remove + rm_n_period = rm_lines = 0 + else: + rm_n_period = min(rght_etd, index_data.shape[0]) + rm_lines = ( + (index_data["end"] - index_data["start"]) + .loc[whole_calendar[current_index - rm_n_period] :] + .sum() + .item() + ) + + data = self.provider.dataset( + instruments, + fields, + whole_calendar[current_index - rm_n_period], + new_calendar[-1], + freq, + ) + + if not data.empty: + data.reset_index(inplace=True) + data.set_index(["datetime", "instrument"], inplace=True) + data.sort_index(inplace=True) + else: + return 0 # No data to update cache + + store = pd.HDFStore(cp_cache_uri) + # FIXME: + # Because the feature cache are stored as .bin file. + # So the series read from features are all float32. + # However, the first dataset cache is calulated based on the + # raw data. So the data type may be float64. + # Different data type will result in failure of appending data + if "/{}".format(DatasetCache.HDF_KEY) in store.keys(): + schema = store.select(DatasetCache.HDF_KEY, start=0, stop=0) + for col, dtype in schema.dtypes.items(): + data[col] = data[col].astype(dtype) + if rm_lines > 0: + store.remove(key=im.KEY, start=-rm_lines) + store.append(DatasetCache.HDF_KEY, data) + store.close() + + # update index file + new_index_data = im.build_index_from_data( + data.loc(axis=0)[whole_calendar[current_index] :, :], + start_index=0 if index_data.empty else index_data["end"].iloc[-1], + ) + im.append_index(new_index_data) + + # update meta file + d["info"]["last_update"] = str(new_calendar[-1]) + with open(cp_cache_uri + ".meta", "wb") as f: + pickle.dump(d, f) + return 0 + + +class SimpleDatasetCache(DatasetCache): + """Simple dataset cache that can be used locally or on client.""" + + def __init__(self, provider): + super(SimpleDatasetCache, self).__init__(provider) + try: + self.local_cache_path = C["local_cache_path"] + except KeyError as e: + self.logger.error("Assign a local_cache_path in config if you want to use this cache mechanism") + + def _uri(self, instruments, fields, start_time, end_time, freq, disk_cache=1, **kwargs): + instruments, fields, freq = self.normalize_uri_args(instruments, fields, freq) + local_cache_path = str(Path(self.local_cache_path).expanduser().resolve()) + return hash_args( + instruments, + fields, + start_time, + end_time, + freq, + disk_cache, + local_cache_path, + ) + + def _dataset( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + ): + if disk_cache == 0: + # In this case, data_set cache is configured but will not be used. + return self.provider.dataset(instruments, fields, start_time, end_time, freq) + os.makedirs(os.path.expanduser(self.local_cache_path), exist_ok=True) + cache_file = os.path.join( + self.local_cache_path, + self._uri(instruments, fields, start_time, end_time, freq, disk_cache=disk_cache), + ) + gen_flag = False + + if os.path.exists(cache_file): + if disk_cache == 1: + # use cache + df = pd.read_pickle(cache_file) + return self.cache_to_origin_data(df, fields) + elif disk_cache == 2: + # replace cache + gen_flag = True + else: + gen_flag = True + + if gen_flag: + data = self.provider.dataset(instruments, normalize_cache_fields(fields), start_time, end_time, freq) + data.to_pickle(cache_file) + return self.cache_to_origin_data(data, fields) + + +class ClientDatasetCache(DatasetCache): + """Prepared cache mechanism for server.""" + + def __init__(self, provider): + super(ClientDatasetCache, self).__init__(provider) + + def _uri(self, instruments, fields, start_time, end_time, freq, disk_cache=1, **kwargs): + return hash_args(*self.normalize_uri_args(instruments, fields, freq), disk_cache) + + def dataset( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=0, + ): + + if "local" in C.dataset_provider.lower(): + # use LocalDatasetProvider + return self.provider.dataset(instruments, fields, start_time, end_time, freq) + + if disk_cache == 0: + # do not use data_set cache, load data from remote expression cache directly + return self.provider.dataset( + instruments, + fields, + start_time, + end_time, + freq, + disk_cache, + return_uri=False, + ) + + # use ClientDatasetProvider + feature_uri = self._uri(instruments, fields, None, None, freq, disk_cache=disk_cache) + value, expire = MemCacheExpire.get_cache(H["f"], feature_uri) + mnt_feature_uri = os.path.join(C.mount_path, C.dataset_cache_dir_name, feature_uri) + if value is None or expire or not os.path.exists(mnt_feature_uri): + df, uri = self.provider.dataset( + instruments, + fields, + start_time, + end_time, + freq, + disk_cache, + return_uri=True, + ) + # cache uri + MemCacheExpire.set_cache(H["f"], uri, uri) + # cache DataFrame + # HZ['f'][uri] = df.copy() + get_module_logger("cache").debug(f"get feature from {C.dataset_provider}") + else: + mnt_feature_uri = os.path.join(C.mount_path, C.dataset_cache_dir_name, feature_uri) + df = ServerDatasetCache.read_data_from_cache(mnt_feature_uri, start_time, end_time, fields) + get_module_logger("cache").debug("get feature from uri cache") + + return df + + +class CalendarCache(BaseProviderCache): + pass + + +class ClientCalendarCache(CalendarCache): + def calendar(self, start_time=None, end_time=None, freq="day", future=False): + uri = self._uri(start_time, end_time, freq, future) + result, expire = MemCacheExpire.get_cache(H["c"], uri) + if result is None or expire: + + result = self.provider.calendar(start_time, end_time, freq, future) + MemCacheExpire.set_cache(H["c"], uri, result) + + get_module_logger("data").debug(f"get calendar from {C.calendar_provider}") + else: + get_module_logger("data").debug("get calendar from local cache") + + return result + + +# MemCache sizeof +HZ = MemCache(C.mem_cache_space_limit, limit_type="sizeof") +# MemCache length +H = MemCache(limit_type="length") diff --git a/qlib/data/client.py b/qlib/data/client.py new file mode 100644 index 0000000000..2e83726d19 --- /dev/null +++ b/qlib/data/client.py @@ -0,0 +1,102 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import socketio + +from .. import __version__ +from ..log import get_module_logger +import pickle + + +class Client(object): + """A client class + + Provide the connection tool functions for ClientProvider. + """ + + def __init__(self, host, port): + super(Client, self).__init__() + self.sio = socketio.Client() + self.server_host = host + self.server_port = port + self.logger = get_module_logger(self.__class__.__name__) + # bind connect/disconnect callbacks + self.sio.on( + "connect", + lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), + ) + self.sio.on("disconnect", lambda: self.logger.debug("Disconnect from server!")) + + def connect_server(self): + """Connect to server.""" + try: + self.sio.connect("ws://" + self.server_host + ":" + str(self.server_port)) + except socketio.exceptions.ConnectionError: + self.logger.error("Cannot connect to server - check your network or server status") + + def disconnect(self): + """Disconnect from server.""" + try: + self.sio.eio.disconnect(True) + except Exception as e: + self.logger.error("Cannot disconnect from server : %s" % e) + + def send_request(self, request_type, request_content, msg_queue, msg_proc_func=None): + """Send a certain request to server. + + Parameters + ---------- + request_type : str + type of proposed request, 'calendar'/'instrument'/'feature' + request_content : dict + records the information of the request + msg_proc_func : func + the function to process the message when receiving response, should have arg `*args` + msg_queue: Queue + The queue to pass the messsage after callback + """ + head_info = {"version": __version__} + + def request_callback(*args): + """callback_wrapper + + :param *args: args[0] is the response content + """ + # args[0] is the response content + self.logger.debug("receive data and enter queue") + msg = dict(args[0]) + if msg["detailed_info"] is not None: + if msg["status"] != 0: + self.logger.error(msg["detailed_info"]) + else: + self.logger.info(msg["detailed_info"]) + if msg["status"] != 0: + ex = ValueError(f"Bad response(status=={msg['status']}), detailed info: {msg['detailed_info']}") + msg_queue.put(ex) + else: + if msg_proc_func is not None: + try: + ret = msg_proc_func(msg["result"]) + except Exception as e: + self.logger.exception("Error when processing message.") + ret = e + else: + ret = msg["result"] + msg_queue.put(ret) + self.disconnect() + self.logger.debug("disconnected") + + self.logger.debug("try connecting") + self.connect_server() + self.logger.debug("connected") + # The pickle is for passing some parameters with special type(such as + # pd.Timestamp) + request_content = {"head": head_info, "body": pickle.dumps(request_content)} + self.sio.on(request_type + "_response", request_callback) + self.logger.debug("try sending") + self.sio.emit(request_type + "_request", request_content) + self.sio.wait() diff --git a/qlib/data/data.py b/qlib/data/data.py new file mode 100644 index 0000000000..5420f8efa2 --- /dev/null +++ b/qlib/data/data.py @@ -0,0 +1,1111 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import os +import abc +import six +import time +import queue +import bisect +import logging +import importlib +import traceback +import numpy as np +import pandas as pd +from multiprocessing import Pool + +from .cache import H +from ..config import C +from .ops import * +from ..log import get_module_logger +from ..utils import parse_field, read_bin, hash_args, normalize_cache_fields +from .base import Feature +from .cache import ServerDatasetCache, ServerExpressionCache + + +@six.add_metaclass(abc.ABCMeta) +class CalendarProvider(object): + """Calendar provider base class + + Provide calendar data. + """ + + @abc.abstractmethod + def calendar(self, start_time=None, end_time=None, freq="day", future=False): + """Get calendar of certain market in given time range. + + Parameters + ---------- + start_time : str + start of the time range + end_time : str + end of the time range + freq : str + time frequency, available: year/quarter/month/week/day + future : bool + whether including future trading day + + Returns + ---------- + list + calendar list + """ + raise NotImplementedError("Subclass of CalendarProvider must implement `calendar` method") + + def locate_index(self, start_time, end_time, freq, future): + """Locate the start time index and end time index in a calendar under certain frequency. + + Parameters + ---------- + start_time : str + start of the time range + end_time : str + end of the time range + freq : str + time frequency, available: year/quarter/month/week/day + future : bool + whether including future trading day + + Returns + ------- + pd.Timestamp + the real start time + pd.Timestamp + the real end time + int + the index of start time + int + the index of end time + """ + start_time = pd.Timestamp(start_time) + end_time = pd.Timestamp(end_time) + calendar, calendar_index = self._get_calendar(freq=freq, future=future) + if start_time not in calendar_index: + try: + start_time = calendar[bisect.bisect_left(calendar, start_time)] + except IndexError: + raise IndexError( + "`start_time` uses a future date, if you want to get future trading days, you can use: `future=True`" + ) + start_index = calendar_index[start_time] + if end_time not in calendar_index: + end_time = calendar[bisect.bisect_right(calendar, end_time) - 1] + end_index = calendar_index[end_time] + return start_time, end_time, start_index, end_index + + def _get_calendar(self, freq, future): + """Load calendar using memcache. + + Parameters + ---------- + freq : str + frequency of read calendar file + future : bool + whether including future trading day + + Returns + ------- + list + list of timestamps + dict + dict composed by timestamp as key and index as value for fast search + """ + flag = f"{freq}_future_{future}" + if flag in H["c"]: + _calendar, _calendar_index = H["c"][flag] + else: + _calendar = np.array(self._load_calendar(freq, future)) + _calendar_index = {x: i for i, x in enumerate(_calendar)} # for fast search + H["c"][flag] = _calendar, _calendar_index + return _calendar, _calendar_index + + def _uri(self, start_time, end_time, freq, future=False): + """Get the uri of calendar generation task.""" + return hash_args(start_time, end_time, freq, future) + + +@six.add_metaclass(abc.ABCMeta) +class InstrumentProvider(object): + """Instrument provider base class + + Provide instrument data. + """ + + @staticmethod + def instruments(market="all", filter_pipe=None): + """Get the general config dictionary for a base market adding several dynamic filters. + + Parameters + ---------- + market : str + market/industry/index shortname, e.g. all/sse/szse/sse50/csi300/csi500 + filter_pipe : list + the list of dynamic filters + + Returns + ---------- + dict + dict of stockpool config + {`market`=>base market name, `filter_pipe`=>list of filters} + + example : + {'market': 'csi500', + 'filter_pipe': [{'filter_type': 'ExpressionDFilter', + 'rule_expression': '$open<40', + 'filter_start_time': None, + 'filter_end_time': None, + 'keep': False}, + {'filter_type': 'NameDFilter', + 'name_rule_re': 'SH[0-9]{4}55', + 'filter_start_time': None, + 'filter_end_time': None}]} + """ + if filter_pipe is None: + filter_pipe = [] + config = {"market": market, "filter_pipe": []} + # the order of the filters will affect the result, so we need to keep + # the order + for filter_t in filter_pipe: + config["filter_pipe"].append(filter_t.to_config()) + return config + + @abc.abstractmethod + def list_instruments(self, instruments, start_time=None, end_time=None, freq="day", as_list=False): + """List the instruments based on a certain stockpool config. + + Parameters + ---------- + instruments : dict + stockpool config + start_time : str + start of the time range + end_time : str + end of the time range + as_list : bool + return instruments as list or dict + + Returns + ------- + dict or list + instruments list or dictionary with time spans + """ + raise NotImplementedError("Subclass of InstrumentProvider must implement `list_instruments` method") + + def _uri(self, instruments, start_time=None, end_time=None, freq="day", as_list=False): + return hash_args(instruments, start_time, end_time, freq, as_list) + + # instruments type + LIST = "LIST" + DICT = "DICT" + CONF = "CONF" + + @classmethod + def get_inst_type(cls, inst): + if "market" in inst: + return cls.CONF + if isinstance(inst, dict): + return cls.DICT + if isinstance(inst, (list, tuple, pd.Index, np.ndarray)): + return cls.LIST + raise ValueError(f"Unknown instrument type {inst}") + + +@six.add_metaclass(abc.ABCMeta) +class FeatureProvider(object): + """Feature provider class + + Provide feature data. + """ + + @abc.abstractmethod + def feature(self, instrument, field, start_time, end_time, freq): + """Get feature data. + + Parameters + ---------- + instrument : str + a certain instrument + field : str + a certain field of feature + start_time : str + start of the time range + end_time : str + end of the time range + freq : str + time frequency, available: year/quarter/month/week/day + + Returns + ------- + pd.Series + data of a certain feature + """ + raise NotImplementedError("Subclass of FeatureProvider must implement `feature` method") + + +@six.add_metaclass(abc.ABCMeta) +class ExpressionProvider(object): + """Expression provider class + + Provide Expression data. + """ + + def __init__(self): + self.expression_instance_cache = {} + + def get_expression_instance(self, field): + try: + if field in self.expression_instance_cache: + expression = self.expression_instance_cache[field] + else: + expression = eval(parse_field(field)) + self.expression_instance_cache[field] = expression + except NameError as e: + get_module_logger("data").exception( + "ERROR: field [%s] contains invalid operator/variable [%s]" % (str(field), str(e).split()[1]) + ) + raise + except SyntaxError: + get_module_logger("data").exception("ERROR: field [%s] contains invalid syntax" % str(field)) + raise + return expression + + @abc.abstractmethod + def expression(self, instrument, field, start_time=None, end_time=None, freq="day"): + """Get Expression data. + + Parameters + ---------- + instrument : str + a certain instrument + field : str + a certain field of feature + start_time : str + start of the time range + end_time : str + end of the time range + freq : str + time frequency, available: year/quarter/month/week/day + + Returns + ------- + pd.Series + data of a certain expression + """ + raise NotImplementedError("Subclass of ExpressionProvider must implement `Expression` method") + + +@six.add_metaclass(abc.ABCMeta) +class DatasetProvider(object): + """Dataset provider class + + Provide Dataset data. + """ + + @abc.abstractmethod + def dataset(self, instruments, fields, start_time=None, end_time=None, freq="day"): + """Get dataset data. + + Parameters + ---------- + instruments : list or dict + list/dict of instruments or dict of stockpool config + fields : list + list of feature instances + start_time : str + start of the time range + end_time : str + end of the time range + freq : str + time frequency + + Returns + ---------- + pd.DataFrame + a pandas dataframe with index + """ + raise NotImplementedError("Subclass of DatasetProvider must implement `Dataset` method") + + def _uri( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + **kwargs, + ): + """Get task uri, used when generating rabbitmq task in qlib_server + + Parameters + ---------- + instruments : list or dict + list/dict of instruments or dict of stockpool config + fields : list + list of feature instances + start_time : str + start of the time range + end_time : str + end of the time range + freq : str + time frequency + disk_cache : int + whether to skip(0)/use(1)/replace(2) disk_cache + + """ + return ServerDatasetCache._uri(instruments, fields, start_time, end_time, freq, disk_cache) + + @staticmethod + def get_instruments_d(instruments, freq): + """ + Parse different types of input instruments to output instruments_d + Wrong format of input instruments will lead to exception. + + """ + if isinstance(instruments, dict): + if "market" in instruments: + # dict of stockpool config + instruments_d = Inst.list_instruments(instruments=instruments, freq=freq, as_list=False) + else: + # dict of instruments and timestamp + instruments_d = instruments + elif isinstance(instruments, (list, tuple, pd.Index, np.ndarray)): + # list or tuple of a group of instruments + instruments_d = list(instruments) + else: + raise ValueError("Unsupported input type for param `instrument`") + return instruments_d + + @staticmethod + def get_column_names(fields): + """ + Get column names from input fields + + """ + if len(fields) == 0: + raise ValueError("fields cannot be empty") + fields = fields.copy() + column_names = [str(f) for f in fields] + return column_names + + @staticmethod + def parse_fields(fields): + # parse and check the input fields + return [ExpressionD.get_expression_instance(f) for f in fields] + + @staticmethod + def dataset_processor(instruments_d, column_names, start_time, end_time, freq): + """ + Load and process the data, return the data set. + - default using multi-kernel method. + + """ + normalize_column_names = normalize_cache_fields(column_names) + data = dict() + # One process for one task, so that the memory will be freed quicker. + if C.maxtasksperchild is None: + p = Pool(processes=C.kernels) + else: + p = Pool(processes=C.kernels, maxtasksperchild=C.maxtasksperchild) + + if isinstance(instruments_d, dict): + for inst, spans in instruments_d.items(): + data[inst] = p.apply_async( + DatasetProvider.expression_calculator, + args=( + inst, + start_time, + end_time, + freq, + normalize_column_names, + spans, + C, + ), + ) + else: + for inst in instruments_d: + data[inst] = p.apply_async( + DatasetProvider.expression_calculator, + args=( + inst, + start_time, + end_time, + freq, + normalize_column_names, + None, + C, + ), + ) + + p.close() + p.join() + + new_data = dict() + for inst in sorted(data.keys()): + if len(data[inst].get()) > 0: + # NOTE: Python version >= 3.6; in versions after python3.6, dict will always guarantee the insertion order + new_data[inst] = data[inst].get() + + if len(new_data) > 0: + data = pd.concat(new_data, names=["instrument"], sort=False) + data = ServerDatasetCache.cache_to_origin_data(data, column_names) + else: + data = pd.DataFrame(columns=column_names) + + return data + + @staticmethod + def expression_calculator(inst, start_time, end_time, freq, column_names, spans=None, C=None): + """ + Calculate the expressions for one instrument, return a df result. + If the expression has been calculated before, load from cache. + + return value: A data frame with index 'datetime' and other data columns. + + """ + # NOTE: This place is compatible with windows, windows multi-process is spawn + if getattr(ExpressionD, "_provider", None) is None: + register_all_wrappers() + + obj = dict() + for field in column_names: + # The client does not have expression provider, the data will be loaded from cache using static method. + obj[field] = ExpressionD.expression(inst, field, start_time, end_time, freq) + + data = pd.DataFrame(obj) + _calendar = Cal.calendar(freq=freq) + data.index = _calendar[data.index.values.astype(np.int)] + data.index.names = ["datetime"] + + if spans is None: + return data + else: + mask = np.zeros(len(data), dtype=np.bool) + for begin, end in spans: + mask |= (data.index >= begin) & (data.index <= end) + return data[mask] + + +class LocalCalendarProvider(CalendarProvider): + """Local calendar data provider class + + Provide calendar data from local data source. + """ + + def __init__(self, **kwargs): + self.remote = kwargs.get("remote", False) + + @property + def _uri_cal(self): + """Calendar file uri.""" + if self.remote: + return os.path.join(C.mount_path, "calendars", "{}.txt") + else: + return os.path.join(C.provider_uri, "calendars", "{}.txt") + + def _load_calendar(self, freq, future): + """Load original calendar timestamp from file. + + Parameters + ---------- + freq : str + frequency of read calendar file + + Returns + ---------- + list + list of timestamps + """ + if future: + fname = self._uri_cal.format(freq + "_future") + # if future calendar not exists, return current calendar + if not os.path.exists(fname): + get_module_logger("data").warning(f"{freq}_future.txt not exists, return current calendar!") + fname = self._uri_cal.format(freq) + else: + fname = self._uri_cal.format(freq) + if not os.path.exists(fname): + raise ValueError("calendar not exists for freq " + freq) + with open(fname) as f: + return [pd.Timestamp(x.strip()) for x in f] + + def calendar(self, start_time=None, end_time=None, freq="day", future=False): + _calendar, _calendar_index = self._get_calendar(freq, future) + if start_time == "None": + start_time = None + if end_time == "None": + end_time = None + # strip + if start_time: + start_time = pd.Timestamp(start_time) + if start_time > _calendar[-1]: + return np.array([]) + else: + start_time = _calendar[0] + if end_time: + end_time = pd.Timestamp(end_time) + if end_time < _calendar[0]: + return np.array([]) + else: + end_time = _calendar[-1] + _, _, si, ei = self.locate_index(start_time, end_time, freq, future) + return _calendar[si : ei + 1] + + +class LocalInstrumentProvider(InstrumentProvider): + """Local instrument data provider class + + Provide instrument data from local data source. + """ + + def __init__(self): + pass + + @property + def _uri_inst(self): + """Instrument file uri.""" + return os.path.join(C.provider_uri, "instruments", "{}.txt") + + def _load_instruments(self, market): + fname = self._uri_inst.format(market) + print(fname) + if not os.path.exists(fname): + raise ValueError("instruments not exists for market " + market) + _instruments = dict() + with open(fname) as f: + for line in f: + inst_time = line.strip().split() + inst = inst_time[0] + if len(inst_time) == 3: + # `day` + begin = inst_time[1] + end = inst_time[2] + elif len(inst_time) == 5: + # `1min` + begin = inst_time[1] + " " + inst_time[2] + end = inst_time[3] + " " + inst_time[4] + _instruments.setdefault(inst, []).append((pd.Timestamp(begin), pd.Timestamp(end))) + return _instruments + + def list_instruments(self, instruments, start_time=None, end_time=None, freq="day", as_list=False): + market = instruments["market"] + if market in H["i"]: + _instruments = H["i"][market] + else: + _instruments = self._load_instruments(market) + H["i"][market] = _instruments + # strip + # use calendar boundary + cal = Cal.calendar(freq=freq) + start_time = pd.Timestamp(start_time or cal[0]) + end_time = pd.Timestamp(end_time or cal[-1]) + _instruments_filtered = { + inst: list( + filter( + lambda x: x[0] <= x[1], + [(max(start_time, x[0]), min(end_time, x[1])) for x in spans], + ) + ) + for inst, spans in _instruments.items() + } + _instruments_filtered = {key: value for key, value in _instruments_filtered.items() if value} + # filter + filter_pipe = instruments["filter_pipe"] + for filter_config in filter_pipe: + from . import filter as F + + filter_t = getattr(F, filter_config["filter_type"]).from_config(filter_config) + _instruments_filtered = filter_t(_instruments_filtered, start_time, end_time, freq) + # as list + if as_list: + return list(_instruments_filtered) + return _instruments_filtered + + +class LocalFeatureProvider(FeatureProvider): + """Local feature data provider class + + Provide feature data from local data source. + """ + + def __init__(self, **kwargs): + self.remote = kwargs.get("remote", False) + + @property + def _uri_data(self): + """Static feature file uri.""" + if self.remote: + return os.path.join(C.mount_path, "features", "{}", "{}.{}.bin") + else: + return os.path.join(C.provider_uri, "features", "{}", "{}.{}.bin") + + def feature(self, instrument, field, start_index, end_index, freq): + # validate + field = str(field).lower()[1:] + uri_data = self._uri_data.format(instrument.lower(), field, freq) + if not os.path.exists(uri_data): + get_module_logger("data").warning("WARN: data not found for %s.%s" % (instrument, field)) + return pd.Series() + # raise ValueError('uri_data not found: ' + uri_data) + # load + series = read_bin(uri_data, start_index, end_index) + return series + + +class LocalExpressionProvider(ExpressionProvider): + """Local expression data provider class + + Provide expression data from local data source. + """ + + def __init__(self): + super().__init__() + + def expression(self, instrument, field, start_time=None, end_time=None, freq="day"): + expression = self.get_expression_instance(field) + start_time = pd.Timestamp(start_time) + end_time = pd.Timestamp(end_time) + _, _, start_index, end_index = Cal.locate_index(start_time, end_time, freq, future=False) + lft_etd, rght_etd = expression.get_extended_window_size() + series = expression.load(instrument, max(0, start_index - lft_etd), end_index + rght_etd, freq) + # Ensure that each column type is consistent + # FIXME: The stock data is currently float. If there is other types of data, this part needs to be re-implemented. + try: + series = series.astype(float) + except ValueError: + pass + if not series.empty: + series = series.loc[start_index:end_index] + return series + + +class LocalDatasetProvider(DatasetProvider): + """Local dataset data provider class + + Provide dataset data from local data source. + """ + + def __init__(self): + pass + + def dataset(self, instruments, fields, start_time=None, end_time=None, freq="day"): + instruments_d = self.get_instruments_d(instruments, freq) + column_names = self.get_column_names(fields) + cal = Cal.calendar(start_time, end_time, freq) + if len(cal) == 0: + return pd.DataFrame(columns=column_names) + start_time = cal[0] + end_time = cal[-1] + + data = self.dataset_processor(instruments_d, column_names, start_time, end_time, freq) + + return data + + @staticmethod + def multi_cache_walker(instruments, fields, start_time=None, end_time=None, freq="day"): + """ + This method is used to prepare the expression cache for the client. + Then the client will load the data from expression cache by itself. + + """ + instruments_d = DatasetProvider.get_instruments_d(instruments, freq) + column_names = DatasetProvider.get_column_names(fields) + cal = Cal.calendar(start_time, end_time, freq) + if len(cal) == 0: + return + start_time = cal[0] + end_time = cal[-1] + + if C.maxtasksperchild is None: + p = Pool(processes=C.kernels) + else: + p = Pool(processes=C.kernels, maxtasksperchild=C.maxtasksperchild) + + for inst in instruments_d: + p.apply_async( + LocalDatasetProvider.cache_walker, + args=( + inst, + start_time, + end_time, + freq, + column_names, + ), + ) + + p.close() + p.join() + + @staticmethod + def cache_walker(inst, start_time, end_time, freq, column_names): + """ + If the expressions of one instrument haven't been calculated before, + calculate it and write it into expression cache. + + """ + for field in column_names: + ExpressionD.expression(inst, field, start_time, end_time, freq) + + +class ClientCalendarProvider(CalendarProvider): + """Client calendar data provider class + + Provide calendar data by requesting data from server as a client. + """ + + def __init__(self): + self.conn = None + self.queue = queue.Queue() + + def set_conn(self, conn): + self.conn = conn + + def calendar(self, start_time=None, end_time=None, freq="day", future=False): + self.conn.send_request( + request_type="calendar", + request_content={ + "start_time": str(start_time), + "end_time": str(end_time), + "freq": freq, + "future": future, + }, + msg_queue=self.queue, + msg_proc_func=lambda response_content: [pd.Timestamp(c) for c in response_content], + ) + result = self.queue.get(timeout=C["timeout"]) + return result + + +class ClientInstrumentProvider(InstrumentProvider): + """Client instrument data provider class + + Provide instrument data by requesting data from server as a client. + """ + + def __init__(self): + self.conn = None + self.queue = queue.Queue() + + def set_conn(self, conn): + self.conn = conn + + def list_instruments(self, instruments, start_time=None, end_time=None, freq="day", as_list=False): + def inst_msg_proc_func(response_content): + if isinstance(response_content, dict): + instrument = { + i: [(pd.Timestamp(s), pd.Timestamp(e)) for s, e in t] for i, t in response_content.items() + } + else: + instrument = response_content + return instrument + + self.conn.send_request( + request_type="instrument", + request_content={ + "instruments": instruments, + "start_time": str(start_time), + "end_time": str(end_time), + "freq": freq, + "as_list": as_list, + }, + msg_queue=self.queue, + msg_proc_func=inst_msg_proc_func, + ) + result = self.queue.get(timeout=C["timeout"]) + if isinstance(result, Exception): + raise result + get_module_logger("data").debug("get result") + return result + + +class ClientDatasetProvider(DatasetProvider): + """Client dataset data provider class + + Provide dataset data by requesting data from server as a client. + """ + + def __init__(self): + self.conn = None + + def set_conn(self, conn): + self.conn = conn + self.queue = queue.Queue() + + def dataset( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=0, + return_uri=False, + ): + if Inst.get_inst_type(instruments) == Inst.DICT: + get_module_logger("data").warning( + "Getting features from a dict of instruments is not recommended because the features will not be " + "cached! " + "The dict of instruments will be cleaned every day." + ) + + if disk_cache == 0: + """ + Call the server to generate the expression cache. + Then load the data from the expression cache directly. + - default using multi-kernel method. + + """ + self.conn.send_request( + request_type="feature", + request_content={ + "instruments": instruments, + "fields": fields, + "start_time": start_time, + "end_time": end_time, + "freq": freq, + "disk_cache": 0, + }, + msg_queue=self.queue, + ) + feature_uri = self.queue.get(timeout=C["timeout"]) + if isinstance(feature_uri, Exception): + raise feature_uri + else: + instruments_d = self.get_instruments_d(instruments, freq) + column_names = self.get_column_names(fields) + cal = Cal.calendar(start_time, end_time, freq) + if len(cal) == 0: + return pd.DataFrame(columns=column_names) + start_time = cal[0] + end_time = cal[-1] + + data = self.dataset_processor(instruments_d, column_names, start_time, end_time, freq) + if return_uri: + return data, feature_uri + else: + return data + else: + + """ + Call the server to generate the data-set cache, get the uri of the cache file. + Then load the data from the file on NFS directly. + - using single-process implementation. + + """ + self.conn.send_request( + request_type="feature", + request_content={ + "instruments": instruments, + "fields": fields, + "start_time": start_time, + "end_time": end_time, + "freq": freq, + "disk_cache": 1, + }, + msg_queue=self.queue, + ) + # - Done in callback + feature_uri = self.queue.get(timeout=C["timeout"]) + if isinstance(feature_uri, Exception): + raise feature_uri + get_module_logger("data").debug("get result") + try: + # pre-mound nfs, used for demo + mnt_feature_uri = os.path.join(C.mount_path, C.dataset_cache_dir_name, feature_uri) + df = ServerDatasetCache.read_data_from_cache(mnt_feature_uri, start_time, end_time, fields) + get_module_logger("data").debug("finish slicing data") + if return_uri: + return df, feature_uri + return df + except AttributeError: + raise IOError("Unable to fetch instruments from remote server!") + + +class BaseProvider: + """Local provider class + + To keep compatible with old qlib provider. + """ + + def calendar(self, start_time=None, end_time=None, freq="day", future=False): + return Cal.calendar(start_time, end_time, freq, future=future) + + def instruments(self, market="all", filter_pipe=None, start_time=None, end_time=None): + if start_time is not None or end_time is not None: + get_module_logger("Provider").warning( + "The instruments corresponds to a stock pool. " + "Parameters `start_time` and `end_time` does not take effect now." + ) + return InstrumentProvider.instruments(market, filter_pipe) + + def list_instruments(self, instruments, start_time=None, end_time=None, freq="day", as_list=False): + return Inst.list_instruments(instruments, start_time, end_time, freq, as_list) + + def features( + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=None, + ): + """ + disk_cache : int + whether to skip(0)/use(1)/replace(2) disk_cache + + This function will try to use cache method which has a keyword `disk_cache`, + and will use provider method if a type error is raised because the DatasetD instance + is a provider class. + """ + disk_cache = C.default_disk_cache if disk_cache is None else disk_cache + if C.disable_disk_cache: + disk_cache = False + try: + return DatasetD.dataset(instruments, fields, start_time, end_time, freq, disk_cache) + except TypeError: + return DatasetD.dataset(instruments, fields, start_time, end_time, freq) + + +class LocalProvider(BaseProvider): + def _uri(self, type, **kwargs): + """_uri + The server hope to get the uri of the request. The uri will be decided + by the dataprovider. For ex, different cache layer has different uri. + + :param type: The type of resource for the uri + :param **kwargs: + """ + if type == "calendar": + return Cal._uri(**kwargs) + elif type == "instrument": + return Inst._uri(**kwargs) + elif type == "feature": + return DatasetD._uri(**kwargs) + + def features_uri(self, instruments, fields, start_time, end_time, freq, disk_cache=1): + """features_uri + + Return the uri of the generated cache of features/dataset + + :param disk_cache: + :param instruments: + :param fields: + :param start_time: + :param end_time: + :param freq: + """ + return DatasetD._dataset_uri(instruments, fields, start_time, end_time, freq, disk_cache) + + +class ClientProvider(BaseProvider): + """Client Provider + + Requesting data from server as a client. Can propose requests: + - Calendar : Directly respond a list of calendars + - Instruments (without filter): Directly respond a list/dict of instruments + - Instruments (with filters): Respond a list/dict of instruments + - Features : Respond a cache uri + The general workflow is described as follows: + When the user use client provider to propose a request, the client provider will connect the server and send the request. The client will start to wait for the response. The response will be made instantly indicating whether the cache is available. The waiting procedure will terminate only when the client get the reponse saying `feature_available` is true. + `BUG` : Everytime we make request for certain data we need to connect to the server, wait for the response and disconnect from it. We can't make a sequence of requests within one connection. You can refer to https://python-socketio.readthedocs.io/en/latest/client.html for documentation of python-socketIO client. + """ + + def __init__(self): + from .client import Client + + self.client = Client(C.flask_server, C.flask_port) + self.logger = get_module_logger(self.__class__.__name__) + if isinstance(Cal, ClientCalendarProvider): + Cal.set_conn(self.client) + Inst.set_conn(self.client) + if hasattr(DatasetD, "provider"): + DatasetD.provider.set_conn(self.client) + else: + DatasetD.set_conn(self.client) + + +class Wrapper(object): + """Data Provider Wrapper""" + + def __init__(self): + self._provider = None + + def register(self, provider): + self._provider = provider + + def __getattr__(self, key): + if self._provider is None: + raise AttributeError("Please run qlib.init() first using qlib") + return getattr(self._provider, key) + + +def get_cls_from_name(cls_name): + return getattr(importlib.import_module(".data", package="qlib"), cls_name) + + +def get_provider_obj(config, **params): + if isinstance(config, dict): + params.update(config["kwargs"]) + config = config["class"] + return get_cls_from_name(config)(**params) + + +def register_wrapper(wrapper, cls_or_obj): + """register_wrapper + + :param wrapper: A wrapper of all kinds of providers + :param cls_or_obj: A class or class name or object instance in data/data.py + """ + if isinstance(cls_or_obj, str): + cls_or_obj = get_cls_from_name(cls_or_obj) + obj = cls_or_obj() if isinstance(cls_or_obj, type) else cls_or_obj + wrapper.register(obj) + + +Cal = Wrapper() +Inst = Wrapper() +FeatureD = Wrapper() +ExpressionD = Wrapper() +DatasetD = Wrapper() +D = Wrapper() + + +def register_all_wrappers(): + """register_all_wrappers""" + logger = get_module_logger("data") + + _calendar_provider = get_provider_obj(C.calendar_provider) + if getattr(C, "calendar_cache", None) is not None: + _calendar_provider = get_provider_obj(C.calendar_cache, provider=_calendar_provider) + register_wrapper(Cal, _calendar_provider) + logger.debug(f"registering Cal {C.calendar_provider}-{C.calenar_cache}") + + register_wrapper(Inst, C.instrument_provider) + logger.debug(f"registering Inst {C.instrument_provider}") + + if getattr(C, "feature_provider", None) is not None: + feature_provider = get_provider_obj(C.feature_provider) + register_wrapper(FeatureD, feature_provider) + logger.debug(f"registering FeatureD {C.feature_provider}") + + if getattr(C, "expression_provider", None) is not None: + # This provider is unnecessary in client provider + _eprovider = get_provider_obj(C.expression_provider) + if getattr(C, "expression_cache", None) is not None: + _eprovider = get_provider_obj(C.expression_cache, provider=_eprovider) + register_wrapper(ExpressionD, _eprovider) + logger.debug(f"registering ExpressioneD {C.expression_provider}-{C.expression_cache}") + + _dprovider = get_provider_obj(C.dataset_provider) + if getattr(C, "dataset_cache", None) is not None: + _dprovider = get_provider_obj(C.dataset_cache, provider=_dprovider) + register_wrapper(DatasetD, _dprovider) + logger.debug(f"registering DataseteD {C.dataset_provider}-{C.dataset_cache}") + + register_wrapper(D, C.provider) + logger.debug(f"registering D {C.provider}") diff --git a/qlib/data/filter.py b/qlib/data/filter.py new file mode 100644 index 0000000000..1552aeee7c --- /dev/null +++ b/qlib/data/filter.py @@ -0,0 +1,375 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from __future__ import print_function +from abc import abstractmethod + +import re +import pandas as pd +import numpy as np +import six +import abc + +from .data import Cal, DatasetD + + +@six.add_metaclass(abc.ABCMeta) +class BaseDFilter(object): + """Dynamic Instruments Filter Abstract class + + Users can override this class to construct their own filter + + Override __init__ to input filter regulations + + Override filter_main to use the regulations to filter instruments + """ + + def __init__(self): + pass + + @staticmethod + def from_config(config): + """Construct an instance from config dict. + + Parameters + ---------- + config : dict + dict of config parameters + """ + raise NotImplementedError("Subclass of BaseDFilter must reimplement `from_config` method") + + @abstractmethod + def to_config(self): + """Construct an instance from config dict. + + Returns + ---------- + dict + return the dict of config parameters + """ + raise NotImplementedError("Subclass of BaseDFilter must reimplement `to_config` method") + + +@six.add_metaclass(abc.ABCMeta) +class SeriesDFilter(BaseDFilter): + """Dynamic Instruments Filter Abstract class to filter a series of certain features + + Filters should provide parameters: + + - filter start time + - filter end time + - filter rule + + Override __init__ to assign a certain rule to filter the series. + + Override _getFilterSeries to use the rule to filter the series and get a dict of {inst => series}, or override filter_main for more advanced series filter rule + """ + + def __init__(self, fstart_time=None, fend_time=None): + """Init function for filter base class. + Filter a set of instruments based on a certain rule within a certain period assigned by fstart_time and fend_time. + + Parameters + ---------- + fstart_time: str + the time for the filter rule to start filter the instruments + fend_time: str + the time for the filter rule to stop filter the instruments + """ + super(SeriesDFilter, self).__init__() + self.filter_start_time = pd.Timestamp(fstart_time) if fstart_time else None + self.filter_end_time = pd.Timestamp(fend_time) if fend_time else None + + def _getTimeBound(self, instruments): + """Get time bound for all instruments. + + Parameters + ---------- + instruments: dict + the dict of instruments in the form {instrument_name => list of timestamp tuple} + + Returns + ---------- + pd.Timestamp, pd.Timestamp + the lower time bound and upper time bound of all the instruments + """ + trange = Cal.calendar(freq=self.filter_freq) + ubound, lbound = trange[0], trange[-1] + for _, timestamp in instruments.items(): + if timestamp: + lbound = timestamp[0][0] if timestamp[0][0] < lbound else lbound + ubound = timestamp[-1][-1] if timestamp[-1][-1] > ubound else ubound + return lbound, ubound + + def _toSeries(self, time_range, target_timestamp): + """Convert the target timestamp to a pandas series of bool value within a time range. + Make the time inside the target_timestamp range TRUE, others FALSE. + + Parameters + ---------- + time_range : D.calendar + the time range of the instruments + target_timestamp : list + the list of tuple (timestamp, timestamp) + + Returns + ---------- + pd.Series + the series of bool value for an instrument + """ + # Construct a whole dict of {date => bool} + timestamp_series = {timestamp: False for timestamp in time_range} + # Convert to pd.Series + timestamp_series = pd.Series(timestamp_series) + # Fill the date within target_timestamp with TRUE + for start, end in target_timestamp: + timestamp_series[Cal.calendar(start_time=start, end_time=end, freq=self.filter_freq)] = True + return timestamp_series + + def _filterSeries(self, timestamp_series, filter_series): + """Filter the timestamp series with filter series by using element-wise AND operation of the two series + + Parameters + ---------- + timestamp_series : pd.Series + the series of bool value indicating existing time + filter_series : pd.Series + the series of bool value indicating filter feature + + Returns + ---------- + pd.Series + the series of bool value indicating whether the date satisfies the filter condition and exists in target timestamp + """ + fstart, fend = list(filter_series.keys())[0], list(filter_series.keys())[-1] + timestamp_series[fstart:fend] = timestamp_series[fstart:fend] & filter_series + return timestamp_series + + def _toTimestamp(self, timestamp_series): + """Convert the timestamp series to a list of tuple (timestamp, timestamp) indicating a continuous range of TRUE + + Parameters + ---------- + timestamp_series: pd.Series + the series of bool value after being filtered + + Returns + ---------- + list + the list of tuple (timestamp, timestamp) + """ + # sort the timestamp_series according to the timestamps + timestamp_series.sort_index() + timestamp = [] + _lbool = None + _ltime = None + for _ts, _bool in timestamp_series.items(): + # there is likely to be NAN when the filter series don't have the + # bool value, so we just change the NAN into False + if _bool == np.nan: + _bool = False + if _lbool is None: + _cur_start = _ts + _lbool = _bool + _ltime = _ts + continue + if (_lbool, _bool) == (True, False): + if _cur_start: + timestamp.append((_cur_start, _ltime)) + elif (_lbool, _bool) == (False, True): + _cur_start = _ts + _lbool = _bool + _ltime = _ts + if _lbool: + timestamp.append((_cur_start, _ltime)) + return timestamp + + def __call__(self, instruments, start_time=None, end_time=None, freq="day"): + """Call this filter to get filtered instruments list""" + self.filter_freq = freq + return self.filter_main(instruments, start_time, end_time) + + @abstractmethod + def _getFilterSeries(self, instruments, fstart, fend): + """Get filter series based on the rules assigned during the initialization and the input time range. + + Parameters + ---------- + instruments : dict + the dict of instruments to be filtered + fstart : pd.Timestamp + start time of filter + fend : pd.Timestamp + end time of filter + + .. note:: fstart/fend indicates the intersection of instruments start/end time and filter start/end time + + Returns + ---------- + pd.Dataframe + a series of {pd.Timestamp => bool} + """ + raise NotImplementedError("Subclass of SeriesDFilter must reimplement `getFilterSeries` method") + + def filter_main(self, instruments, start_time=None, end_time=None): + """Implement this method to filter the instruments. + + Parameters + ---------- + instruments: dict + input instruments to be filtered + start_time: str + start of the time range + end_time: str + end of the time range + + Returns + ---------- + dict + filtered instruments, same structure as input instruments + """ + lbound, ubound = self._getTimeBound(instruments) + start_time = pd.Timestamp(start_time or lbound) + end_time = pd.Timestamp(end_time or ubound) + _instruments_filtered = {} + _all_calendar = Cal.calendar(start_time=start_time, end_time=end_time, freq=self.filter_freq) + _filter_calendar = Cal.calendar( + start_time=self.filter_start_time and max(self.filter_start_time, _all_calendar[0]) or _all_calendar[0], + end_time=self.filter_end_time and min(self.filter_end_time, _all_calendar[-1]) or _all_calendar[-1], + freq=self.filter_freq, + ) + _all_filter_series = self._getFilterSeries(instruments, _filter_calendar[0], _filter_calendar[-1]) + for inst, timestamp in instruments.items(): + # Construct a whole map of date + _timestamp_series = self._toSeries(_all_calendar, timestamp) + # Get filter series + if inst in _all_filter_series: + _filter_series = _all_filter_series[inst] + else: + if self.keep: + _filter_series = pd.Series({timestamp: True for timestamp in _filter_calendar}) + else: + _filter_series = pd.Series({timestamp: False for timestamp in _filter_calendar}) + # Calculate bool value within the range of filter + _timestamp_series = self._filterSeries(_timestamp_series, _filter_series) + # Reform the map to (start_timestamp, end_timestamp) format + _timestamp = self._toTimestamp(_timestamp_series) + # Remove empty timestamp + if _timestamp: + _instruments_filtered[inst] = _timestamp + return _instruments_filtered + + +class NameDFilter(SeriesDFilter): + """Name dynamic instrument filter + + Filter the instruments based on a regulated name format. + + A name rule regular expression is required. + """ + + def __init__(self, name_rule_re, fstart_time=None, fend_time=None): + """Init function for name filter class + + params: + ------ + name_rule_re: str + regular expression for the name rule + """ + super(NameDFilter, self).__init__(fstart_time, fend_time) + self.name_rule_re = name_rule_re + + def _getFilterSeries(self, instruments, fstart, fend): + all_filter_series = {} + filter_calendar = Cal.calendar(start_time=fstart, end_time=fend, freq=self.filter_freq) + for inst, timestamp in instruments.items(): + if re.match(self.name_rule_re, inst): + _filter_series = pd.Series({timestamp: True for timestamp in filter_calendar}) + else: + _filter_series = pd.Series({timestamp: False for timestamp in filter_calendar}) + all_filter_series[inst] = _filter_series + return all_filter_series + + @staticmethod + def from_config(config): + return NameDFilter( + name_rule_re=config["name_rule_re"], + fstart_time=config["filter_start_time"], + fend_time=config["filter_end_time"], + ) + + def to_config(self): + return { + "filter_type": "NameDFilter", + "name_rule_re": self.name_rule_re, + "filter_start_time": str(self.filter_start_time) if self.filter_start_time else self.filter_start_time, + "filter_end_time": str(self.filter_end_time) if self.filter_end_time else self.filter_end_time, + } + + +class ExpressionDFilter(SeriesDFilter): + """Expression dynamic instrument filter + + Filter the instruments based on a certain expression. + + An expression rule indicating a certain feature field is required. + + Examples + ---------- + - *basic features filter* : rule_expression = '$close/$open>5' + - *cross-sectional features filter* : rule_expression = '$rank($close)<10' + - *time-sequence features filter* : rule_expression = '$Ref($close, 3)>100' + """ + + def __init__(self, rule_expression, fstart_time=None, fend_time=None, keep=False): + """Init function for expression filter class + + params: + ------ + fstart_time: str + filter the feature starting from this time + fend_time: str + filter the feature ending by this time + rule_expression: str + an input expression for the rule + keep: bool + whether to keep the instruments of which features don't exist in the filter time span + """ + super(ExpressionDFilter, self).__init__(fstart_time, fend_time) + self.rule_expression = rule_expression + self.keep = keep + + def _getFilterSeries(self, instruments, fstart, fend): + # do not use dataset cache + try: + _features = DatasetD.dataset( + instruments, + [self.rule_expression], + fstart, + fend, + freq=self.filter_freq, + disk_cache=0, + ) + except TypeError: + # use LocalDatasetProvider + _features = DatasetD.dataset(instruments, [self.rule_expression], fstart, fend, freq=self.filter_freq) + rule_expression_field_name = list(_features.keys())[0] + all_filter_series = _features[rule_expression_field_name] + return all_filter_series + + def from_config(config): + return ExpressionDFilter( + rule_expression=config["rule_expression"], + fstart_time=config["filter_start_time"], + fend_time=config["filter_end_time"], + keep=config["keep"], + ) + + def to_config(self): + return { + "filter_type": "ExpressionDFilter", + "rule_expression": self.rule_expression, + "filter_start_time": str(self.filter_start_time) if self.filter_start_time else self.filter_start_time, + "filter_end_time": str(self.filter_end_time) if self.filter_end_time else self.filter_end_time, + "keep": self.keep, + } diff --git a/qlib/data/ops.py b/qlib/data/ops.py new file mode 100644 index 0000000000..104296a0ea --- /dev/null +++ b/qlib/data/ops.py @@ -0,0 +1,1405 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import numpy as np +import pandas as pd + +from .base import Expression, ExpressionOps +from ._libs.rolling import rolling_slope, rolling_rsquare, rolling_resi +from ._libs.expanding import expanding_slope, expanding_rsquare, expanding_resi +from ..log import get_module_logger + +__all__ = ( + "Ref", + "Max", + "Min", + "Sum", + "Mean", + "Std", + "Var", + "Skew", + "Kurt", + "Med", + "Mad", + "Slope", + "Rsquare", + "Resi", + "Rank", + "Quantile", + "Count", + "EMA", + "WMA", + "Corr", + "Cov", + "Delta", + "Abs", + "Sign", + "Log", + "Power", + "Add", + "Sub", + "Mul", + "Div", + "Greater", + "Less", + "And", + "Or", + "Not", + "Gt", + "Ge", + "Lt", + "Le", + "Eq", + "Ne", + "Mask", + "IdxMax", + "IdxMin", + "If", +) + +np.seterr(invalid="ignore") + +#################### Element-Wise Operator #################### + + +class ElemOperator(ExpressionOps): + """Element-wise Operator + + Parameters + ---------- + feature : Expression + feature instance + func : str + feature operation method + + Returns + ---------- + Expression + feature operation output + """ + + def __init__(self, feature, func): + self.feature = feature + self.func = func + + def __str__(self): + return "{}({})".format(type(self).__name__, self.feature) + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + return getattr(np, self.func)(series) + + def get_longest_back_rolling(self): + return self.feature.get_longest_back_rolling() + + def get_extended_window_size(self): + return self.feature.get_extended_window_size() + + +class Abs(ElemOperator): + """Feature Absolute Value + + Parameters + ---------- + feature : Expression + feature instance + + Returns + ---------- + Expression + a feature instance with absolute output + """ + + def __init__(self, feature): + super(Abs, self).__init__(feature, "abs") + + +class Sign(ElemOperator): + """Feature Sign + + Parameters + ---------- + feature : Expression + feature instance + + Returns + ---------- + Expression + a feature instance with sign + """ + + def __init__(self, feature): + super(Sign, self).__init__(feature, "sign") + + +class Log(ElemOperator): + """Feature Log + + Parameters + ---------- + feature : Expression + feature instance + + Returns + ---------- + Expression + a feature instance with log + """ + + def __init__(self, feature): + super(Log, self).__init__(feature, "log") + + +class Power(ElemOperator): + """Feature Power + + Parameters + ---------- + feature : Expression + feature instance + + Returns + ---------- + Expression + a feature instance with power + """ + + def __init__(self, feature, exponent): + super(Power, self).__init__(feature, "power") + self.exponent = exponent + + def __str__(self): + return "{}({},{})".format(type(self).__name__, self.feature, self.exponent) + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + return getattr(np, self.func)(series, self.exponent) + + +class Mask(ElemOperator): + """Feature Mask + + Parameters + ---------- + feature : Expression + feature instance + instrument : str + instrument mask + + Returns + ---------- + Expression + a feature instance with masked instrument + """ + + def __init__(self, feature, instrument): + super(Mask, self).__init__(feature, "mask") + self.instrument = instrument + + def __str__(self): + return "{}({},{})".format(type(self).__name__, self.feature, self.instrument.lower()) + + def _load_internal(self, instrument, start_index, end_index, freq): + return self.feature.load(self.instrument, start_index, end_index, freq) + + +class Not(ElemOperator): + """Not Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + feature elementwise not output + """ + + def __init__(self, feature): + super(Not, self).__init__(feature, "bitwise_not") + + +#################### Pair-Wise Operator #################### +class PairOperator(ExpressionOps): + """Pair-wise operator + + Parameters + ---------- + feature_left : Expression + feature instance or numeric value + feature_right : Expression + feature instance or numeric value + func : str + operator function + + Returns + ---------- + Feature: + two features' operation output + """ + + def __init__(self, feature_left, feature_right, func): + self.feature_left = feature_left + self.feature_right = feature_right + self.func = func + + def __str__(self): + return "{}({},{})".format(type(self).__name__, self.feature_left, self.feature_right) + + def _load_internal(self, instrument, start_index, end_index, freq): + assert any( + [isinstance(self.feature_left, Expression), self.feature_right, Expression] + ), "at least one of two inputs is Expression instance" + if isinstance(self.feature_left, Expression): + series_left = self.feature_left.load(instrument, start_index, end_index, freq) + else: + series_left = self.feature_left # numeric value + if isinstance(self.feature_right, Expression): + series_right = self.feature_right.load(instrument, start_index, end_index, freq) + else: + series_right = self.feature_right + return getattr(np, self.func)(series_left, series_right) + + def get_longest_back_rolling(self): + if isinstance(self.feature_left, Expression): + left_br = self.feature_left.get_longest_back_rolling() + else: + left_br = 0 + + if isinstance(self.feature_right, Expression): + right_br = self.feature_right.get_longest_back_rolling() + else: + right_br = 0 + return max(left_br, right_br) + + def get_extended_window_size(self): + if isinstance(self.feature_left, Expression): + ll, lr = self.feature_left.get_extended_window_size() + else: + ll, lr = 0, 0 + + if isinstance(self.feature_right, Expression): + rl, rr = self.feature_right.get_extended_window_size() + else: + rl, rr = 0, 0 + return max(ll, rl), max(lr, rr) + + +class Add(PairOperator): + """Add Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + two features' sum + """ + + def __init__(self, feature_left, feature_right): + super(Add, self).__init__(feature_left, feature_right, "add") + + +class Sub(PairOperator): + """Subtract Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + two features' subtraction + """ + + def __init__(self, feature_left, feature_right): + super(Sub, self).__init__(feature_left, feature_right, "subtract") + + +class Mul(PairOperator): + """Multiply Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + two features' product + """ + + def __init__(self, feature_left, feature_right): + super(Mul, self).__init__(feature_left, feature_right, "multiply") + + +class Div(PairOperator): + """Division Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + two features' division + """ + + def __init__(self, feature_left, feature_right): + super(Div, self).__init__(feature_left, feature_right, "divide") + + +class Greater(PairOperator): + """Greater Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + greater elements taken from the input two features + """ + + def __init__(self, feature_left, feature_right): + super(Greater, self).__init__(feature_left, feature_right, "maximum") + + +class Less(PairOperator): + """Less Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + smaller elements taken from the input two features + """ + + def __init__(self, feature_left, feature_right): + super(Less, self).__init__(feature_left, feature_right, "minimum") + + +class Gt(PairOperator): + """Greater Than Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + bool series indicate `left > right` + """ + + def __init__(self, feature_left, feature_right): + super(Gt, self).__init__(feature_left, feature_right, "greater") + + +class Ge(PairOperator): + """Greater Equal Than Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + bool series indicate `left >= right` + """ + + def __init__(self, feature_left, feature_right): + super(Ge, self).__init__(feature_left, feature_right, "greater_equal") + + +class Lt(PairOperator): + """Less Than Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + bool series indicate `left < right` + """ + + def __init__(self, feature_left, feature_right): + super(Lt, self).__init__(feature_left, feature_right, "less") + + +class Le(PairOperator): + """Less Equal Than Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + bool series indicate `left <= right` + """ + + def __init__(self, feature_left, feature_right): + super(Le, self).__init__(feature_left, feature_right, "less_equal") + + +class Eq(PairOperator): + """Equal Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + bool series indicate `left == right` + """ + + def __init__(self, feature_left, feature_right): + super(Eq, self).__init__(feature_left, feature_right, "equal") + + +class Ne(PairOperator): + """Not Equal Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + bool series indicate `left != right` + """ + + def __init__(self, feature_left, feature_right): + super(Ne, self).__init__(feature_left, feature_right, "not_equal") + + +class And(PairOperator): + """And Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + two features' row by row & output + """ + + def __init__(self, feature_left, feature_right): + super(And, self).__init__(feature_left, feature_right, "bitwise_and") + + +class Or(PairOperator): + """Or Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + + Returns + ---------- + Feature: + two features' row by row | outputs + """ + + def __init__(self, feature_left, feature_right): + super(Or, self).__init__(feature_left, feature_right, "bitwise_or") + + +#################### Triple-wise Operator #################### +class If(ExpressionOps): + """If Operator + + Parameters + ---------- + condition : Expression + feature instance with bool values as condition + feature_left : Expression + feature instance + feature_right : Expression + feature instance + """ + + def __init__(self, condition, feature_left, feature_right): + self.condition = condition + self.feature_left = feature_left + self.feature_right = feature_right + + def __str__(self): + return "If({},{},{})".format(self.condition, self.feature_left, self.feature_right) + + def _load_internal(self, instrument, start_index, end_index, freq): + series_cond = self.condition.load(instrument, start_index, end_index, freq) + if isinstance(self.feature_left, Expression): + series_left = self.feature_left.load(instrument, start_index, end_index, freq) + else: + series_left = self.feature_left + if isinstance(self.feature_right, Expression): + series_right = self.feature_right.load(instrument, start_index, end_index, freq) + else: + series_right = self.feature_right + series = pd.Series(np.where(series_cond, series_left, series_right), index=series_cond.index) + return series + + def get_longest_back_rolling(self): + if isinstance(self.feature_left, Expression): + left_br = self.feature_left.get_longest_back_rolling() + else: + left_br = 0 + + if isinstance(self.feature_right, Expression): + right_br = self.feature_right.get_longest_back_rolling() + else: + right_br = 0 + + if isinstance(self.condition, Expression): + c_br = self.condition.get_longest_back_rolling() + else: + c_br = 0 + return max(left_br, right_br, c_br) + + def get_extended_window_size(self): + if isinstance(self.feature_left, Expression): + ll, lr = self.feature_left.get_extended_window_size() + else: + ll, lr = 0, 0 + + if isinstance(self.feature_right, Expression): + rl, rr = self.feature_right.get_extended_window_size() + else: + rl, rr = 0, 0 + + if isinstance(self.condition, Expression): + cl, cr = self.condition.get_extended_window_size() + else: + cl, cr = 0, 0 + return max(ll, rl, cl), max(lr, rr, cr) + + +#################### Rolling #################### +# NOTE: methods like `rolling.mean` are optimized with cython, +# and are super faster than `rolling.apply(np.mean)` + + +class Rolling(ExpressionOps): + """Rolling Operator + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + func : str + rolling method + + Returns + ---------- + Expression + rolling outputs + """ + + def __init__(self, feature, N, func): + self.feature = feature + self.N = N + self.func = func + + def __str__(self): + return "{}({},{})".format(type(self).__name__, self.feature, self.N) + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + # NOTE: remove all null check, + # now it's user's responsibility to decide whether use features in null days + # isnull = series.isnull() # NOTE: isnull = NaN, inf is not null + if self.N == 0: + series = getattr(series.expanding(min_periods=1), self.func)() + else: + series = getattr(series.rolling(self.N, min_periods=1), self.func)() + # series.iloc[:self.N-1] = np.nan + # series[isnull] = np.nan + return series + + def get_longest_back_rolling(self): + if self.N == 0: + return np.inf + return self.feature.get_longest_back_rolling() + self.N - 1 + + def get_extended_window_size(self): + if self.N == 0: + # FIXME: How to make this accurate and efficiently? Or should we + # remove such support for N == 0? + get_module_logger(self.__class__.__name__).warning("The Rolling(ATTR, 0) will not be accurately calculated") + return self.feature.get_extended_window_size() + else: + lft_etd, rght_etd = self.feature.get_extended_window_size() + lft_etd = max(lft_etd + self.N - 1, lft_etd) + return lft_etd, rght_etd + + +class Ref(Rolling): + """Feature Reference + + Parameters + ---------- + feature : Expression + feature instance + N : int + N = 0, retrieve the first data; N > 0, retrieve data of N periods ago; N < 0, future data + + Returns + ---------- + Expression + a feature instance with target reference + """ + + def __init__(self, feature, N): + super(Ref, self).__init__(feature, N, "ref") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + # N = 0, return first day + if series.empty: + return series # Pandas bug, see: https://github.com/pandas-dev/pandas/issues/21049 + elif self.N == 0: + series = pd.Series(series.iloc[0], index=series.index) + else: + series = series.shift(self.N) # copy + return series + + def get_longest_back_rolling(self): + if self.N == 0: + return np.inf + return self.feature.get_longest_back_rolling() + self.N + + def get_extended_window_size(self): + if self.N == 0: + get_module_logger(self.__class__.__name__).warning("The Ref(ATTR, 0) will not be accurately calculated") + return self.feature.get_extended_window_size() + else: + lft_etd, rght_etd = self.feature.get_extended_window_size() + lft_etd = max(lft_etd + self.N, lft_etd) + rght_etd = max(rght_etd - self.N, rght_etd) + return lft_etd, rght_etd + + +class Mean(Rolling): + """Rolling Mean (MA) + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling average + """ + + def __init__(self, feature, N): + super(Mean, self).__init__(feature, N, "mean") + + +class Sum(Rolling): + """Rolling Sum + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling sum + """ + + def __init__(self, feature, N): + super(Sum, self).__init__(feature, N, "sum") + + +class Std(Rolling): + """Rolling Std + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling std + """ + + def __init__(self, feature, N): + super(Std, self).__init__(feature, N, "std") + + +class Var(Rolling): + """Rolling Variance + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling variance + """ + + def __init__(self, feature, N): + super(Var, self).__init__(feature, N, "var") + + +class Skew(Rolling): + """Rolling Skewness + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling skewness + """ + + def __init__(self, feature, N): + super(Skew, self).__init__(feature, N, "skew") + + +class Kurt(Rolling): + """Rolling Kurtosis + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling kurtosis + """ + + def __init__(self, feature, N): + super(Kurt, self).__init__(feature, N, "kurt") + + +class Max(Rolling): + """Rolling Max + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling max + """ + + def __init__(self, feature, N): + super(Max, self).__init__(feature, N, "max") + + +class IdxMax(Rolling): + """Rolling Max Index + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling max index + """ + + def __init__(self, feature, N): + super(IdxMax, self).__init__(feature, N, "idxmax") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = series.expanding(min_periods=1).apply(lambda x: x.argmax() + 1, raw=True) + else: + series = series.rolling(self.N, min_periods=1).apply( + lambda x: x.argmax() + 1, + raw=True, + ) + return series + + +class Min(Rolling): + """Rolling Min + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling min + """ + + def __init__(self, feature, N): + super(Min, self).__init__(feature, N, "min") + + +class IdxMin(Rolling): + """Rolling Min Index + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling min index + """ + + def __init__(self, feature, N): + super(IdxMin, self).__init__(feature, N, "idxmin") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = series.expanding(min_periods=1).apply(lambda x: x.argmin() + 1, raw=True) + else: + series = series.rolling(self.N, min_periods=1).apply( + lambda x: x.argmin() + 1, + raw=True, + ) + return series + + +class Quantile(Rolling): + """Rolling Quantile + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling quantile + """ + + def __init__(self, feature, N, qscore): + super(Quantile, self).__init__(feature, N, "quantile") + self.qscore = qscore + + def __str__(self): + return "{}({},{},{})".format(type(self).__name__, self.feature, self.N, self.qscore) + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = series.expanding(min_periods=1).quantile(self.qscore) + else: + series = series.rolling(self.N, min_periods=1).quantile(self.qscore) + return series + + +class Med(Rolling): + """Rolling Median + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling median + """ + + def __init__(self, feature, N): + super(Med, self).__init__(feature, N, "median") + + +class Mad(Rolling): + """Rolling Mean Absolute Deviation + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling mean absolute deviation + """ + + def __init__(self, feature, N): + super(Mad, self).__init__(feature, N, "mad") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + # TODO: implement in Cython + + def mad(x): + x1 = x[~np.isnan(x)] + return np.mean(np.abs(x1 - x1.mean())) + + if self.N == 0: + series = series.expanding(min_periods=1).apply(mad, raw=True) + else: + series = series.rolling(self.N, min_periods=1).apply(mad, raw=True) + return series + + +class Rank(Rolling): + """Rolling Rank (Percentile) + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling rank + """ + + def __init__(self, feature, N): + super(Rank, self).__init__(feature, N, "rank") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + # TODO: implement in Cython + + def rank(x): + if np.isnan(x[-1]): + return np.nan + x1 = x[~np.isnan(x)] + if x1.shape[0] == 0: + return np.nan + return (x1.argsort()[-1] + 1) / len(x1) + + if self.N == 0: + series = series.expanding(min_periods=1).apply(rank, raw=True) + else: + series = series.rolling(self.N, min_periods=1).apply(rank, raw=True) + return series + + +class Count(Rolling): + """Rolling Count + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling count of number of non-NaN elements + """ + + def __init__(self, feature, N): + super(Count, self).__init__(feature, N, "count") + + +class Delta(Rolling): + """Rolling Delta + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with end minus start in rolling window + """ + + def __init__(self, feature, N): + super(Delta, self).__init__(feature, N, "delta") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = series - series.iloc[0] + else: + series = series - series.shift(self.N) + return series + + +# TODO: +# support pair-wise rolling like `Slope(A, B, N)` +class Slope(Rolling): + """Rolling Slope + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with regression slope of given window + """ + + def __init__(self, feature, N): + super(Slope, self).__init__(feature, N, "slope") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = pd.Series(expanding_slope(series.values), index=series.index) + else: + series = pd.Series(rolling_slope(series.values, self.N), index=series.index) + return series + + +class Rsquare(Rolling): + """Rolling R-value Square + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with regression r-value square of given window + """ + + def __init__(self, feature, N): + super(Rsquare, self).__init__(feature, N, "rsquare") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = pd.Series(expanding_rsquare(series.values), index=series.index) + else: + series = pd.Series(rolling_rsquare(series.values, self.N), index=series.index) + return series + + +class Resi(Rolling): + """Rolling Regression Residuals + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with regression residuals of given window + """ + + def __init__(self, feature, N): + super(Resi, self).__init__(feature, N, "resi") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = pd.Series(expanding_resi(series.values), index=series.index) + else: + series = pd.Series(rolling_resi(series.values, self.N), index=series.index) + return series + + +class WMA(Rolling): + """Rolling WMA + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with weighted moving average output + """ + + def __init__(self, feature, N): + super(WMA, self).__init__(feature, N, "wma") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + # TODO: implement in Cython + + def weighted_mean(x): + w = np.arange(len(x)) + w /= w.sum() + return np.nanmean(w * x) + + if self.N == 0: + series = series.expanding(min_periods=1).apply(weighted_mean, raw=True) + else: + series = series.rolling(self.N, min_periods=1).apply(weighted_mean, raw=True) + return series + + +class EMA(Rolling): + """Rolling Exponential Mean (EMA) + + Parameters + ---------- + feature : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with regression r-value square of given window + """ + + def __init__(self, feature, N): + super(EMA, self).__init__(feature, N, "ema") + + def _load_internal(self, instrument, start_index, end_index, freq): + series = self.feature.load(instrument, start_index, end_index, freq) + + def exp_weighted_mean(x): + a = 1 - 2 / (1 + len(x)) + w = a ** np.arange(len(x))[::-1] + w /= w.sum() + return np.nansum(w * x) + + if self.N == 0: + series = series.expanding(min_periods=1).apply(exp_weighted_mean, raw=True) + else: + series = series.ewm(span=self.N, min_periods=1).mean() + return series + + +#################### Pair-Wise Rolling #################### +class PairRolling(ExpressionOps): + """Pair Rolling Operator + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling output of two input features + """ + + def __init__(self, feature_left, feature_right, N, func): + self.feature_left = feature_left + self.feature_right = feature_right + self.N = N + self.func = func + + def __str__(self): + return "{}({},{},{})".format(type(self).__name__, self.feature_left, self.feature_right, self.N) + + def _load_internal(self, instrument, start_index, end_index, freq): + series_left = self.feature_left.load(instrument, start_index, end_index, freq) + series_right = self.feature_right.load(instrument, start_index, end_index, freq) + if self.N == 0: + series = getattr(series_left.expanding(min_periods=1), self.func)(series_right) + else: + series = getattr(series_left.rolling(self.N, min_periods=1), self.func)(series_right) + return series + + def get_longest_back_rolling(self): + if self.N == 0: + return np.inf + return ( + max( + self.feature_left.get_longest_back_rolling(), + self.feature_right.get_longest_back_rolling(), + ) + + self.N + - 1 + ) + + def get_extended_window_size(self): + if self.N == 0: + get_module_logger(self.__class__.__name__).warning( + "The PairRolling(ATTR, 0) will not be accurately calculated" + ) + return self.feature.get_extended_window_size() + else: + ll, lr = self.feature_left.get_extended_window_size() + rl, rr = self.feature_right.get_extended_window_size() + return max(ll, rl) + self.N - 1, max(lr, rr) + + +class Corr(PairRolling): + """Rolling Correlation + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling correlation of two input features + """ + + def __init__(self, feature_left, feature_right, N): + super(Corr, self).__init__(feature_left, feature_right, N, "corr") + + +class Cov(PairRolling): + """Rolling Covariance + + Parameters + ---------- + feature_left : Expression + feature instance + feature_right : Expression + feature instance + N : int + rolling window size + + Returns + ---------- + Expression + a feature instance with rolling max of two input features + """ + + def __init__(self, feature_left, feature_right, N): + super(Cov, self).__init__(feature_left, feature_right, N, "cov") diff --git a/qlib/log.py b/qlib/log.py new file mode 100644 index 0000000000..bc87fc5796 --- /dev/null +++ b/qlib/log.py @@ -0,0 +1,112 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import os +import re +import logging +from time import time +import logging.handlers +from logging import config as logging_config + +from .config import C + + +def get_module_logger(module_name, level=None): + """ + Get a logger for a specific module. + + :param module_name: str + Logic module name. + :param level: int + :param sh_level: int + Stream handler log level. + :param log_format: str + :return: Logger + Logger object. + """ + if level is None: + level = C.logging_level + + module_name = "qlib.{}".format(module_name) + # Get logger. + module_logger = logging.getLogger(module_name) + module_logger.setLevel(level) + return module_logger + + +class TimeInspector(object): + + timer_logger = get_module_logger("timer", level=logging.WARNING) + + time_marks = [] + + @classmethod + def set_time_mark(cls): + """ + Set a time mark with current time, and this time mark will push into a stack. + :return: float + A timestamp for current time. + """ + _time = time() + cls.time_marks.append(_time) + return _time + + @classmethod + def pop_time_mark(cls): + """ + Pop last time mark from stack. + """ + return cls.time_marks.pop() + + @classmethod + def get_cost_time(cls): + """ + Get last time mark from stack, calculate time diff with current time. + :return: float + Time diff calculated by last time mark with current time. + """ + cost_time = time() - cls.time_marks.pop() + return cost_time + + @classmethod + def log_cost_time(cls, info="Done"): + """ + Get last time mark from stack, calculate time diff with current time, and log time diff and info. + :param info: str + Info that will be log into stdout. + """ + cost_time = time() - cls.time_marks.pop() + cls.timer_logger.info("Time cost: {0:.5f} | {1}".format(cost_time, info)) + + +def set_log_with_config(log_config: dict): + """set log with config + + :param log_config: + :return: + """ + logging_config.dictConfig(log_config) + + +class LogFilter(logging.Filter): + def __init__(self, param=None): + self.param = param + + @staticmethod + def match_msg(filter_str, msg): + match = False + try: + if re.match(filter_str, msg): + match = True + except Exception: + pass + return match + + def filter(self, record): + allow = True + if isinstance(self.param, str): + allow = not self.match_msg(self.param, record.msg) + elif isinstance(self.param, list): + allow = not any([self.match_msg(p, record.msg) for p in self.param]) + return allow diff --git a/qlib/utils.py b/qlib/utils.py new file mode 100644 index 0000000000..225c03aba0 --- /dev/null +++ b/qlib/utils.py @@ -0,0 +1,547 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +from __future__ import division +from __future__ import print_function + +import os +import re +import copy +import json +import yaml +import redis +import bisect +import shutil +import difflib +import hashlib +import datetime +import requests +import tempfile +import importlib +import contextlib +import numpy as np +import pandas as pd +from pathlib import Path + +from .config import C +from .log import get_module_logger + +log = get_module_logger("utils") + + +#################### Server #################### +def get_redis_connection(): + """get redis connection instance.""" + return redis.StrictRedis(host=C.redis_host, port=C.redis_port, db=C.redis_task_db) + + +#################### Data #################### +def read_bin(file_path, start_index, end_index): + with open(file_path, "rb") as f: + # read start_index + ref_start_index = int(np.frombuffer(f.read(4), dtype=" end_index: + return pd.Series() + # calculate offset + f.seek(4 * (si - ref_start_index) + 4) + # read nbytes + count = end_index - si + 1 + data = np.frombuffer(f.read(4 * count), dtype="= data[mid][level]: + left = mid + 1 + else: + right = mid + return left + + +#################### HTTP #################### +def requests_with_retry(url, retry=5, **kwargs): + while retry > 0: + retry -= 1 + try: + res = requests.get(url, timeout=1, **kwargs) + assert res.status_code in {200, 206} + return res + except AssertionError: + continue + except Exception as e: + log.warning("exception encountered {}".format(e)) + continue + raise Exception("ERROR: requests failed!") + + +#################### Parse #################### +def parse_config(config): + # Check whether need parse, all object except str do not need to be parsed + if not isinstance(config, str): + return config + # Check whether config is file + if os.path.exists(config): + with open(config, "r") as f: + return yaml.load(f) + # Check whether the str can be parsed + try: + return yaml.load(config) + except BaseException: + raise ValueError("cannot parse config!") + + +#################### Other #################### +def drop_nan_by_y_index(x, y, weight=None): + # x, y, weight: DataFrame + # Find index of rows which do not contain Nan in all columns from y. + mask = ~y.isna().any(axis=1) + # Get related rows from x, y, weight. + x = x[mask] + y = y[mask] + if weight is not None: + weight = weight[mask] + return x, y, weight + + +def hash_args(*args): + # json.dumps will keep the dict keys always sorted. + string = json.dumps(args, sort_keys=True, default=str) # frozenset + return hashlib.md5(string.encode()).hexdigest() + + +def parse_field(field): + # Following patterns will be matched: + # - $close -> Feature("close") + # - $close5 -> Feature("close5") + # - $open+$close -> Feature("open")+Feature("close") + if not isinstance(field, str): + field = str(field) + return re.sub(r"\$(\w+)", r'Feature("\1")', field) + + +def get_module_by_module_path(module_path): + """Load module path + + :param module_path: + :return: + """ + + if ".py" in module_path: + module_spec = importlib.util.spec_from_file_location("", module_path) + module = importlib.util.module_from_spec(module_spec) + module_spec.loader.exec_module(module) + else: + module = importlib.import_module(module_path) + + return module + + +def compare_dict_value(src_data: dict, dst_data: dict): + """Compare dict value + + :param src_data: + :param dst_data: + :return: + """ + + class DateEncoder(json.JSONEncoder): + # FIXME: This class can only be accurate to the day. If it is a minute, + # there may be a bug + def default(self, o): + if isinstance(o, (datetime.datetime, datetime.date)): + return o.strftime("%Y-%m-%d %H:%M:%S") + return json.JSONEncoder.default(self, o) + + src_data = json.dumps(src_data, indent=4, sort_keys=True, cls=DateEncoder) + dst_data = json.dumps(dst_data, indent=4, sort_keys=True, cls=DateEncoder) + diff = difflib.ndiff(src_data, dst_data) + changes = [line for line in diff if line.startswith("+ ") or line.startswith("- ")] + return changes + + +def create_save_path(save_path=None): + """Create save path + + :param save_path: + :return: + """ + if save_path: + if not os.path.exists(save_path): + os.makedirs(save_path) + else: + temp_dir = os.path.expanduser("~/tmp") + if not os.path.exists(temp_dir): + os.makedirs(temp_dir) + _, save_path = tempfile.mkstemp(dir=temp_dir) + return save_path + + +@contextlib.contextmanager +def save_multiple_parts_file(filename, format="gztar"): + """Save multiple parts file + + Implementation process: + 1. get the absolute path to 'filename' + 2. create a 'filename' directory + 3. user does something with file_path('filename/') + 4. remove 'filename' directory + 5. make_archive 'filename' directory, and rename 'archive file' to filename + + :param filename: result model path + :param format: archive format: one of "zip", "tar", "gztar", "bztar", or "xztar" + :return: real model path + + Usage:: + + >>> # The following code will create an archive file('~/tmp/test_file') containing 'test_doc_i'(i is 0-10) files. + >>> with save_multiple_parts_file('~/tmp/test_file') as filename_dir: + ... for i in range(10): + ... temp_path = os.path.join(filename_dir, 'test_doc_{}'.format(str(i))) + ... with open(temp_path) as fp: + ... fp.write(str(i)) + ... + + """ + + if filename.startswith("~"): + filename = os.path.expanduser(filename) + + file_path = os.path.abspath(filename) + + # Create model dir + if os.path.exists(file_path): + raise FileExistsError("ERROR: file exists: {}, cannot be create the directory.".format(file_path)) + + os.makedirs(file_path) + + # return model dir + yield file_path + + # filename dir to filename.tar.gz file + tar_file = shutil.make_archive(file_path, format=format, root_dir=file_path) + + # Remove filename dir + if os.path.exists(file_path): + shutil.rmtree(file_path) + + # filename.tar.gz rename to filename + os.rename(tar_file, file_path) + + +@contextlib.contextmanager +def unpack_archive_with_buffer(buffer, format="gztar"): + """Unpack archive with archive buffer + After the call is finished, the archive file and directory will be deleted. + + Implementation process: + 1. create 'tempfile' in '~/tmp/' and directory + 2. 'buffer' write to 'tempfile' + 3. unpack archive file('tempfile') + 4. user does something with file_path('tempfile/') + 5. remove 'tempfile' and 'tempfile directory' + + :param buffer: bytes + :param format: archive format: one of "zip", "tar", "gztar", "bztar", or "xztar" + :return: unpack archive directory path + + Usage:: + + >>> # The following code is to print all the file names in 'test_unpack.tar.gz' + >>> with open('test_unpack.tar.gz') as fp: + ... buffer = fp.read() + ... + >>> with unpack_archive_with_buffer(buffer) as temp_dir: + ... for f_n in os.listdir(temp_dir): + ... print(f_n) + ... + + """ + temp_dir = os.path.expanduser("~/tmp") + if not os.path.exists(temp_dir): + os.makedirs(temp_dir) + with tempfile.NamedTemporaryFile("wb", delete=False, dir=temp_dir) as fp: + fp.write(buffer) + file_path = fp.name + + try: + tar_file = file_path + ".tar.gz" + os.rename(file_path, tar_file) + # Create dir + os.makedirs(file_path) + shutil.unpack_archive(tar_file, format=format, extract_dir=file_path) + + # Return temp dir + yield file_path + + except Exception as e: + log.error(str(e)) + finally: + # Remove temp tar file + if os.path.exists(tar_file): + os.unlink(tar_file) + + # Remove temp model dir + if os.path.exists(file_path): + shutil.rmtree(file_path) + + +@contextlib.contextmanager +def get_tmp_file_with_buffer(buffer): + temp_dir = os.path.expanduser("~/tmp") + if not os.path.exists(temp_dir): + os.makedirs(temp_dir) + with tempfile.NamedTemporaryFile("wb", delete=True, dir=temp_dir) as fp: + fp.write(buffer) + file_path = fp.name + yield file_path + + +def remove_repeat_field(fields): + """remove repeat field + + :param fields: list; features fields + :return: list + """ + fields = copy.deepcopy(fields) + _fields = set(fields) + return sorted(_fields, key=fields.index) + + +def remove_fields_space(fields: [list, str, tuple]): + """remove fields space + + :param fields: features fields + :return: list or str + """ + if isinstance(fields, str): + return fields.replace(" ", "") + return [i.replace(" ", "") for i in fields if isinstance(i, str)] + + +def normalize_cache_fields(fields: [list, tuple]): + """normalize cache fields + + :param fields: features fields + :return: list + """ + return sorted(remove_repeat_field(remove_fields_space(fields))) + + +def normalize_cache_instruments(instruments): + """normalize cache instruments + + :return: list or dict + """ + if isinstance(instruments, (list, tuple, pd.Index, np.ndarray)): + instruments = sorted(list(instruments)) + else: + # dict type stockpool + if "market" in instruments: + pass + else: + instruments = {k: sorted(v) for k, v in instruments.items()} + return instruments + + +def is_tradable_date(cur_date): + """judgy whether date is a tradable date + ---------- + date : pandas.Timestamp + current date + """ + from .data import D + + return str(cur_date.date()) == str(D.calendar(start_time=cur_date, future=True)[0].date()) + + +def get_date_range(trading_date, shift, future=False): + """get trading date range by shift + + :param trading_date: + :param shift: int + :param future: bool + :return: + """ + from .data import D + + calendar = D.calendar(future=future) + if pd.to_datetime(trading_date) not in list(calendar): + raise ValueError("{} is not trading day!".format(str(trading_date))) + day_index = bisect.bisect_left(calendar, trading_date) + if 0 <= (day_index + shift) < len(calendar): + if shift > 0: + return calendar[day_index + 1 : day_index + 1 + shift] + else: + return calendar[day_index + shift : day_index] + else: + return calendar + + +def get_date_by_shift(trading_date, shift, future=False): + """get trading date with shift bias wil cur_date + e.g. : shift == 1, return next trading date + shift == -1, return previous trading date + ---------- + trading_date : pandas.Timestamp + current date + shift : int + """ + return get_date_range(trading_date, shift, future)[0 if shift < 0 else -1] if shift != 0 else trading_date + + +def get_next_trading_date(trading_date, future=False): + """get next trading date + ---------- + cur_date : pandas.Timestamp + current date + """ + return get_date_by_shift(trading_date, 1, future=future) + + +def get_pre_trading_date(trading_date, future=False): + """get previous trading date + ---------- + date : pandas.Timestamp + current date + """ + return get_date_by_shift(trading_date, -1, future=future) + + +def transform_end_date(end_date=None, freq="day"): + """get previous trading date + If end_date is -1, None, or end_date is greater than the maximum trading day, the last trading date is returned. + Otherwise, returns the end_date + ---------- + end_date: str + end trading date + date : pandas.Timestamp + current date + """ + from .data import D + + last_date = D.calendar(freq=freq)[-1] + if end_date is None or (str(end_date) == "-1") or (pd.Timestamp(last_date) < pd.Timestamp(end_date)): + log.warning( + "\nInfo: the end_date in the configuration file is {}, " + "so the default last date {} is used.".format(end_date, last_date) + ) + end_date = last_date + return end_date + + +def get_date_in_file_name(file_name): + """Get the date(YYYY-MM-DD) written in file name + Parameter + file_name : str + :return + date : str + 'YYYY-MM-DD' + """ + pattern = "[0-9]{4}-[0-9]{2}-[0-9]{2}" + date = re.search(pattern, str(file_name)).group() + return date + + +def split_pred(pred, number=None, split_date=None): + """split the score file into two part + Parameter + --------- + pred : pd.DataFrame (index:) + A score file of stocks + number: the number of dates for pred_left + split_date: the last date of the pred_left + Return + ------- + pred_left : pd.DataFrame (index:) + The first part of original score file + pred_right : pd.DataFrame (index:) + The second part of original score file + """ + if number is None and split_date is None: + raise ValueError("`number` and `split date` cannot both be None") + dates = sorted(pred.index.get_level_values("datetime").unique()) + dates = list(map(pd.Timestamp, dates)) + if split_date is None: + date_left_end = dates[number - 1] + date_right_begin = dates[number] + date_left_start = None + else: + split_date = pd.Timestamp(split_date) + date_left_end = split_date + date_right_begin = split_date + pd.Timedelta(days=1) + if number is None: + date_left_start = None + else: + end_idx = bisect.bisect_right(dates, split_date) + date_left_start = dates[end_idx - number] + pred_temp = pred.sort_index() + pred_left = pred_temp.loc(axis=0)[:, date_left_start:date_left_end] + pred_right = pred_temp.loc(axis=0)[:, date_right_begin:] + return pred_left, pred_right + + +def can_use_cache(): + res = True + r = get_redis_connection() + try: + r.client() + except redis.exceptions.ConnectionError: + res = False + finally: + r.close() + return res + + +def exists_qlib_data(qlib_dir): + qlib_dir = Path(qlib_dir).expanduser() + if not qlib_dir.exists(): + return False + + calendars_dir = qlib_dir.joinpath("calendars") + instruments_dir = qlib_dir.joinpath("instruments") + features_dir = qlib_dir.joinpath("features") + # check dir + for _dir in [calendars_dir, instruments_dir, features_dir]: + if not (_dir.exists() and list(_dir.iterdir())): + return False + # check calendar bin + for _calendar in calendars_dir.iterdir(): + if not list(features_dir.rglob(f"*.{_calendar.name.split('.')[0]}.bin")): + return False + + # check instruments + code_names = set(map(lambda x: x.name.lower(), features_dir.iterdir())) + _instrument = instruments_dir.joinpath("all.txt") + miss_code = set(pd.read_csv(_instrument, sep="\t", header=None).loc[:, 0].apply(str.lower)) - set(code_names) + if miss_code and any(map(lambda x: "sht" not in x, miss_code)): + return False + + return True diff --git a/qlib/version.py b/qlib/version.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/dump_bin.py b/scripts/dump_bin.py new file mode 100644 index 0000000000..d972f6318e --- /dev/null +++ b/scripts/dump_bin.py @@ -0,0 +1,250 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import shutil +from pathlib import Path +from functools import partial +from concurrent.futures import ThreadPoolExecutor + +import fire +import numpy as np +import pandas as pd +from tqdm import tqdm +from loguru import logger + + +class DumpData(object): + FILE_SUFFIX = ".csv" + + def __init__( + self, + csv_path: str, + qlib_dir: str, + backup_dir: str = None, + freq: str = "day", + works: int = None, + date_field_name: str = "date", + ): + """ + + Parameters + ---------- + csv_path: str + stock data path or directory + qlib_dir: str + qlib(dump) data director + backup_dir: str, default None + if backup_dir is not None, backup qlib_dir to backup_dir + freq: str, default "day" + transaction frequency + works: int, default None + number of threads + date_field_name: str, default "date" + the name of the date field in the csv + """ + csv_path = Path(csv_path).expanduser() + self.csv_files = sorted(csv_path.glob(f"*{self.FILE_SUFFIX}") if csv_path.is_dir() else [csv_path]) + self.qlib_dir = Path(qlib_dir).expanduser() + self.backup_dir = backup_dir if backup_dir is None else Path(backup_dir).expanduser() + if backup_dir is not None: + self._backup_qlib_dir(Path(backup_dir).expanduser()) + + self.freq = freq + self.calendar_format = "%Y-%m-%d" if self.freq == "day" else "%Y-%m-%d %H:%M:%S" + + self.works = works + self.date_field_name = date_field_name + + self._calendars_dir = self.qlib_dir.joinpath("calendars") + self._features_dir = self.qlib_dir.joinpath("features") + self._instruments_dir = self.qlib_dir.joinpath("instruments") + + self._calendars_list = [] + self._include_fields = () + self._exclude_fields = () + + def _backup_qlib_dir(self, target_dir: Path): + shutil.copytree(str(self.qlib_dir.resolve()), str(target_dir.resolve())) + + def _get_date_for_df(self, file_path: Path, *, is_begin_end: bool = False): + df = pd.read_csv(str(file_path.resolve())) + if df.empty or self.date_field_name not in df.columns.tolist(): + return [] + if is_begin_end: + return [df[self.date_field_name].min(), df[self.date_field_name].max()] + return df[self.date_field_name].tolist() + + def _get_source_data(self, file_path: Path): + df = pd.read_csv(str(file_path.resolve())) + df[self.date_field_name] = df[self.date_field_name].astype(np.datetime64) + return df + + def _file_to_bin(self, file_path: Path = None): + code = file_path.name[: -len(self.FILE_SUFFIX)].strip().lower() + features_dir = self._features_dir.joinpath(code) + features_dir.mkdir(parents=True, exist_ok=True) + calendars_df = pd.DataFrame(data=self._calendars_list, columns=[self.date_field_name]) + calendars_df[self.date_field_name] = calendars_df[self.date_field_name].astype(np.datetime64) + # read csv file + df = self._get_source_data(file_path) + cal_df = calendars_df[ + (calendars_df[self.date_field_name] >= df[self.date_field_name].min()) + & (calendars_df[self.date_field_name] <= df[self.date_field_name].max()) + ] + cal_df.set_index(self.date_field_name, inplace=True) + df.set_index(self.date_field_name, inplace=True) + r_df = df.reindex(cal_df.index) + date_index = self._calendars_list.index(r_df.index.min()) + for field in ( + self._include_fields + if self._include_fields + else set(r_df.columns) - set(self._exclude_fields) + if self._exclude_fields + else r_df.columns + ): + + bin_path = features_dir.joinpath(f"{field}.{self.freq}.bin") + if field not in r_df.columns: + continue + r = np.hstack([date_index, r_df[field]]).astype(" --qlib_dir + + Examples + --------- + + # dump all stock + python dump_bin.py dump_features --csv_path ~/tmp/stock_data --qlib_dir ~/tmp/qlib_data --exclude_fields date,code,timestamp,code_name + # dump one stock + python dump_bin.py dump_features --csv_path ~/tmp/stock_data/sh600000.csv --qlib_dir ~/tmp/qlib_data --calendar_path ~/tmp/qlib_data/calendar/all.txt --exclude_fields date,code,timestamp,code_name + """ + logger.info("start dump features......") + if calendar_path is not None: + # read calendar from calendar file + self._calendars_list = self._read_calendar(Path(calendar_path)) + + if not self._calendars_list: + self.dump_calendars() + + self._include_fields = tuple(map(str.strip, include_fields)) if include_fields else self._include_fields + self._exclude_fields = tuple(map(str.strip, exclude_fields)) if exclude_fields else self._exclude_fields + with tqdm(total=len(self.csv_files)) as p_bar: + with ThreadPoolExecutor(max_workers=self.works) as executor: + for _ in executor.map(self._file_to_bin, self.csv_files): + p_bar.update() + + logger.info("end of features dump.\n") + + def dump_calendars(self): + """dump calendars + + Notes + --------- + python dump_bin.py dump_calendars --csv_path --qlib_dir + + Examples + --------- + python dump_bin.py dump_calendars --csv_path ~/tmp/stock_data --qlib_dir ~/tmp/qlib_data + """ + logger.info("start dump calendars......") + calendar_path = str(self._calendars_dir.joinpath(f"{self.freq}.txt").expanduser().resolve()) + all_datetime = set() + with tqdm(total=len(self.csv_files)) as p_bar: + with ThreadPoolExecutor(max_workers=self.works) as executor: + for temp_datetime in executor.map(self._get_date_for_df, self.csv_files): + all_datetime = all_datetime | set(temp_datetime) + p_bar.update() + + self._calendars_list = sorted(map(pd.Timestamp, all_datetime)) + self._calendars_dir.mkdir(parents=True, exist_ok=True) + result_calendar_list = list(map(lambda x: x.strftime(self.calendar_format), self._calendars_list)) + np.savetxt(calendar_path, result_calendar_list, fmt="%s", encoding="utf-8") + logger.info("end of calendars dump.\n") + + def dump_instruments(self): + """dump instruments + + Notes + --------- + python dump_bin.py dump_instruments --csv_path --qlib_dir + + Examples + --------- + python dump_bin.py dump_instruments --csv_path ~/tmp/stock_data --qlib_dir ~/tmp/qlib_data + """ + logger.info("start dump instruments......") + symbol_list = list(map(lambda x: x.name[: -len(self.FILE_SUFFIX)], self.csv_files)) + _result_list = [] + _fun = partial(self._get_date_for_df, is_begin_end=True) + with tqdm(total=len(symbol_list)) as p_bar: + with ThreadPoolExecutor(max_workers=self.works) as execute: + for symbol, res in zip(symbol_list, execute.map(_fun, self.csv_files)): + if res: + begin_time = res[0] + end_time = res[-1] + _result_list.append(f"{symbol.upper()}\t{begin_time}\t{end_time}") + p_bar.update() + + self._instruments_dir.mkdir(parents=True, exist_ok=True) + to_path = str(self._instruments_dir.joinpath("all.txt").resolve()) + np.savetxt(to_path, _result_list, fmt="%s", encoding="utf-8") + logger.info("end of instruments dump.\n") + + def dump(self, include_fields: str = None, exclude_fields: tuple = None): + """dump data + + Parameters + ---------- + include_fields: str + dump fields + + exclude_fields: str + fields not dumped + + Examples + --------- + python dump_bin.py dump --csv_path ~/tmp/stock_data --qlib_dir ~/tmp/qlib_data --include_fields open,close,high,low,volume,factor + python dump_bin.py dump --csv_path ~/tmp/stock_data --qlib_dir ~/tmp/qlib_data --exclude_fields date,code,timestamp,code_name + """ + if isinstance(exclude_fields, str): + exclude_fields = exclude_fields.split(",") + if isinstance(include_fields, str): + include_fields = include_fields.split(",") + self.dump_calendars() + self.dump_features(include_fields=include_fields, exclude_fields=exclude_fields) + self.dump_instruments() + + +if __name__ == "__main__": + fire.Fire(DumpData) diff --git a/scripts/get_data.py b/scripts/get_data.py new file mode 100644 index 0000000000..9e3a99556b --- /dev/null +++ b/scripts/get_data.py @@ -0,0 +1,79 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import fire +import zipfile +import requests +from tqdm import tqdm +from pathlib import Path +from loguru import logger + + +class GetData: + REMOTE_URL = "http://fintech.msra.cn/stock_data/downloads" + + def _download_data(self, file_name: str, target_dir: [Path, str]): + target_dir = Path(target_dir).expanduser() + target_dir.mkdir(exist_ok=True, parents=True) + + url = f"{self.REMOTE_URL}/{file_name}" + target_path = target_dir.parent.joinpath(file_name) + + resp = requests.get(url, stream=True) + if resp.status_code != 200: + raise requests.exceptions.HTTPError() + + chuck_size = 1024 + logger.info(f"{file_name} downloading......") + with tqdm(total=int(resp.headers.get("Content-Length", 0))) as p_bar: + with target_path.open("wb") as fp: + for chuck in resp.iter_content(chunk_size=chuck_size): + fp.write(chuck) + p_bar.update(chuck_size) + + self._unzip(target_path, target_dir) + + @staticmethod + def _unzip(file_path: Path, target_dir: Path): + logger.info(f"{file_path} unzipping......") + with zipfile.ZipFile(str(file_path.resolve()), "r") as zp: + for _file in tqdm(zp.namelist()): + zp.extract(_file, str(target_dir.resolve())) + + def qlib_data_cn(self, target_dir="~/.qlib/qlib_data/cn_data"): + """download cn qlib data from remote + + Parameters + ---------- + target_dir: str + data save directory + + Examples + --------- + python get_data.py qlib_data_cn --target_dir ~/.qlib/qlib_data/cn_data + ------- + + """ + file_name = "qlib_data_cn.zip" + self._download_data(file_name, target_dir) + + def csv_data_cn(self, target_dir="~/.qlib/csv_data/cn_data"): + """download cn csv data from remote + + Parameters + ---------- + target_dir: str + data save directory + + Examples + --------- + python get_data.py csv_data_cn --target_dir ~/.qlib/csv_data/cn_data + ------- + + """ + file_name = "csv_data_cn.zip" + self._download_data(file_name, target_dir) + + +if __name__ == "__main__": + fire.Fire(GetData) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000..cc08d682da --- /dev/null +++ b/setup.py @@ -0,0 +1,111 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# -*- coding: utf-8 -*- +import io +import os +import numpy + +from setuptools import find_packages, setup, Extension + +# Package meta-data. +NAME = "qlib" +DESCRIPTION = "A Quantitative-research Library" +REQUIRES_PYTHON = ">=3.5.0" +VERSION = "0.4.6.dev" + +# Detect Cython +try: + import Cython + + ver = Cython.__version__ + _CYTHON_INSTALLED = ver >= "0.28" +except ImportError: + _CYTHON_INSTALLED = False + +if not _CYTHON_INSTALLED: + print("Required Cython version >= 0.28 is not detected!") + print('Please run "pip install --upgrade cython" first.') + exit(-1) + +# What packages are required for this module to be executed? +# `estimator` may depend on other packages. In order to reduce dependencies, it is not written here. +REQUIRED = [ + "numpy>=1.12.0", + "pandas>=0.25.1", + "scipy>=1.0.0", + "requests>=2.18.0", + "sacred>=0.7.4", + "pymongo==3.7.2", + "python-socketio==3.1.2", + "redis>=3.0.1", + "python-redis-lock>=3.3.1", + "schedule>=0.6.0", + "cvxpy==1.0.21", + "hyperopt==0.1.1", + "fire>=0.2.1", + "statsmodels", + "xlrd>=1.0.0", + "plotly==3.5.0", + "matplotlib==3.1.3", + "tables>=3.6.1", + "pyyaml>=5.3.1", + "tqdm", + "loguru", + "lightgbm", + "tornado", +] + +# Numpy include +NUMPY_INCLUDE = numpy.get_include() + +here = os.path.abspath(os.path.dirname(__file__)) + +with io.open(os.path.join(here, "README.rst"), encoding="utf-8") as f: + long_description = "\n" + f.read() + +# Cython Extensions +extensions = [ + Extension( + "qlib.data._libs.rolling", + ["qlib/data/_libs/rolling.pyx"], + language="c++", + include_dirs=[NUMPY_INCLUDE], + ), + Extension( + "qlib.data._libs.expanding", + ["qlib/data/_libs/expanding.pyx"], + language="c++", + include_dirs=[NUMPY_INCLUDE], + ), +] + +# Where the magic happens: +setup( + name=NAME, + version=VERSION, + description=DESCRIPTION, + long_description=long_description, + python_requires=REQUIRES_PYTHON, + packages=find_packages(exclude=("tests",)), + # if your package is a single module, use this instead of 'packages': + # py_modules=['qlib'], + entry_points={ + # 'console_scripts': ['mycli=mymodule:cli'], + "console_scripts": [ + "estimator=qlib.contrib.estimator.launcher:run", + ], + }, + ext_modules=extensions, + install_requires=REQUIRED, + include_package_data=True, + classifiers=[ + # Trove classifiers + # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers + # 'License :: OSI Approved :: MIT License', + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + ], +) diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py new file mode 100644 index 0000000000..d779929fe8 --- /dev/null +++ b/tests/test_all_pipeline.py @@ -0,0 +1,183 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import sys +import unittest +from pathlib import Path + +import numpy as np +import pandas as pd +from scipy.stats import pearsonr + +import qlib +from qlib.config import REG_CN +from qlib.utils import drop_nan_by_y_index +from qlib.contrib.model.gbdt import LGBModel +from qlib.contrib.estimator.handler import QLibDataHandlerV1 +from qlib.contrib.strategy.strategy import TopkAmountStrategy +from qlib.contrib.evaluate import ( + backtest as normal_backtest, + long_short_backtest, + risk_analysis, +) +from qlib.utils import exists_qlib_data + + +DATA_HANDLER_CONFIG = { + "dropna_label": True, + "start_date": "2007-01-01", + "end_date": "2020-08-01", + "market": "CSI500", +} + +MODEL_CONFIG = { + "loss": "mse", + "colsample_bytree": 0.8879, + "learning_rate": 0.0421, + "subsample": 0.8789, + "lambda_l1": 205.6999, + "lambda_l2": 580.9768, + "max_depth": 8, + "num_leaves": 210, + "num_threads": 20, +} + +TRAINER_CONFIG = { + "train_start_date": "2007-01-01", + "train_end_date": "2014-12-31", + "validate_start_date": "2015-01-01", + "validate_end_date": "2016-12-31", + "test_start_date": "2017-01-01", + "test_end_date": "2020-08-01", +} + +STRATEGY_CONFIG = { + "topk": 50, + "buffer_margin": 230, +} + +BACKTEST_CONFIG = { + "verbose": False, + "limit_threshold": 0.095, + "account": 100000000, + "benchmark": "SH000905", + "deal_price": "vwap", + "open_cost": 0.0005, + "close_cost": 0.0015, + "min_cost": 5, +} + + +# train +def train(): + """train model + + Returns + ------- + pred_score: pandas.DataFrame + predict scores + performance: dict + model performance + """ + # get data + x_train, y_train, x_validate, y_validate, x_test, y_test = QLibDataHandlerV1(**DATA_HANDLER_CONFIG).get_split_data( + **TRAINER_CONFIG + ) + + # train + model = LGBModel(**MODEL_CONFIG) + model.fit(x_train, y_train, x_validate, y_validate) + _pred = model.predict(x_test) + _pred = pd.DataFrame(_pred, index=x_test.index, columns=y_test.columns) + pred_score = pd.DataFrame(index=_pred.index) + pred_score["score"] = _pred.iloc(axis=1)[0] + + # get performance + model_score = model.score(x_test, y_test) + # Remove rows from x, y and w, which contain Nan in any columns in y_test. + x_test, y_test, __ = drop_nan_by_y_index(x_test, y_test) + pred_test = model.predict(x_test) + model_pearsonr = pearsonr(np.ravel(pred_test), np.ravel(y_test.values))[0] + + return pred_score, {"model_score": model_score, "model_pearsonr": model_pearsonr} + + +def backtest(pred): + """backtest + + Parameters + ---------- + pred: pandas.DataFrame + predict scores + + Returns + ------- + report_normal: pandas.DataFrame + + positions_normal: dict + + long_short_reports: dict + + """ + strategy = TopkAmountStrategy(**STRATEGY_CONFIG) + _report_normal, _positions_normal = normal_backtest(pred, strategy=strategy, **BACKTEST_CONFIG) + _long_short_reports = long_short_backtest(pred, topk=50) + return _report_normal, _positions_normal, _long_short_reports + + +def analyze(report_normal, long_short_reports): + _analysis = dict() + _analysis["pred_long"] = risk_analysis(long_short_reports["long"]) + _analysis["pred_short"] = risk_analysis(long_short_reports["short"]) + _analysis["pred_long_short"] = risk_analysis(long_short_reports["long_short"]) + _analysis["sub_bench"] = risk_analysis(report_normal["return"] - report_normal["bench"]) + _analysis["sub_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"] - report_normal["cost"]) + analysis_df = pd.concat(_analysis) # type: pd.DataFrame + print(analysis_df) + return analysis_df + + +class TestAllFlow(unittest.TestCase): + PRED_SCORE = None + REPORT_NORMAL = None + POSITIONS = None + LONG_SHORT_REPORTS = None + + @classmethod + def setUpClass(cls) -> None: + # use default data + mount_path = "~/.qlib/qlib_data/cn_data" # target_dir + if not exists_qlib_data(mount_path): + print(f"Qlib data is not found in {mount_path}") + sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath("scripts"))) + from get_data import GetData + + GetData().qlib_data_cn(mount_path) + qlib.init(mount_path=mount_path, region=REG_CN) + + def test_0_train(self): + TestAllFlow.PRED_SCORE, model_pearsonr = train() + self.assertGreaterEqual(model_pearsonr["model_pearsonr"], 0, "train failed") + + def test_1_backtest(self): + TestAllFlow.REPORT_NORMAL, TestAllFlow.POSITIONS, TestAllFlow.LONG_SHORT_REPORTS = backtest( + TestAllFlow.PRED_SCORE + ) + analyze_df = analyze(TestAllFlow.REPORT_NORMAL, TestAllFlow.LONG_SHORT_REPORTS) + self.assertGreaterEqual( + analyze_df.loc(axis=0)["sub_cost", "annual"].values[0], + 0.10, + "backtest failed", + ) + + +def suite(): + _suite = unittest.TestSuite() + _suite.addTest(TestAllFlow("test_0_train")) + _suite.addTest(TestAllFlow("test_1_backtest")) + return _suite + + +if __name__ == "__main__": + runner = unittest.TextTestRunner() + runner.run(suite()) diff --git a/tests/test_dump_data.py b/tests/test_dump_data.py new file mode 100644 index 0000000000..b871fcc9a9 --- /dev/null +++ b/tests/test_dump_data.py @@ -0,0 +1,87 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import sys +import shutil +import unittest +from pathlib import Path + +import qlib +import numpy as np +import pandas as pd +from qlib.data import D + +sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath("scripts"))) +from get_data import GetData +from dump_bin import DumpData + + +DATA_DIR = Path(__file__).parent.joinpath("test_data") +DATA_DIR.mkdir(exist_ok=True, parents=True) +SOURCE_DIR = DATA_DIR.joinpath("source") +QLIB_DIR = DATA_DIR.joinpath("qlib") +QLIB_DIR.mkdir(exist_ok=True, parents=True) + + +class TestDumpData(unittest.TestCase): + FIELDS = "open,close,high,low,volume,vwap,factor,change,money".split(",") + QLIB_FIELDS = list(map(lambda x: f"${x}", FIELDS)) + DUMP_DATA = DumpData(csv_path=SOURCE_DIR, qlib_dir=QLIB_DIR) + SOTCK_NAMES = list(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.iterdir())) + + # simpe data + SIMPLE_DATA = None + + @classmethod + def setUpClass(cls) -> None: + GetData().csv_data_cn(SOURCE_DIR) + mount_path = provider_uri = str(QLIB_DIR.resolve()) + qlib.init( + mount_path=mount_path, + provider_uri=provider_uri, + expression_cache=None, + dataset_cache=None, + ) + + @classmethod + def tearDownClass(cls) -> None: + shutil.rmtree(str(DATA_DIR.resolve())) + + def test_0_dump_calendars(self): + self.DUMP_DATA.dump_calendars() + ori_calendars = set( + map( + pd.Timestamp, + pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values, + ) + ) + res_calendars = set(D.calendar()) + assert len(ori_calendars - res_calendars) == len(res_calendars - ori_calendars) == 0, "dump calendars failed" + + def test_1_dump_instruments(self): + self.DUMP_DATA.dump_instruments() + ori_ins = set(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.iterdir())) + res_ins = set(D.list_instruments(D.instruments("all"), as_list=True)) + assert len(ori_ins - res_ins) == len(ori_ins - res_ins) == 0, "dump instruments failed" + + def test_2_dump_features(self): + self.DUMP_DATA.dump_features(include_fields=self.FIELDS) + df = D.features(self.SOTCK_NAMES, self.QLIB_FIELDS) + TestDumpData.SIMPLE_DATA = df.loc(axis=0)[self.SOTCK_NAMES[0], :] + self.assertFalse(df.dropna().empty, "features data failed") + self.assertListEqual(list(df.columns), self.QLIB_FIELDS, "features columns failed") + + def test_3_dump_features_simple(self): + stock = self.SOTCK_NAMES[0] + dump_data = DumpData(csv_path=SOURCE_DIR.joinpath(f"{stock.upper()}.csv"), qlib_dir=QLIB_DIR) + dump_data.dump_features(include_fields=self.FIELDS, calendar_path=QLIB_DIR.joinpath("calendars", "day.txt")) + + df = D.features([stock], self.QLIB_FIELDS) + + self.assertEqual(len(df), len(TestDumpData.SIMPLE_DATA), "dump features simple failed") + self.assertTrue(np.isclose(df.dropna(), self.SIMPLE_DATA.dropna()).all(), "dump features simple failed") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_get_data.py b/tests/test_get_data.py new file mode 100644 index 0000000000..b7fdc274a4 --- /dev/null +++ b/tests/test_get_data.py @@ -0,0 +1,53 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import sys +import shutil +import unittest +from pathlib import Path + +sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath("scripts"))) +from get_data import GetData + +import qlib +from qlib.data import D + +DATA_DIR = Path(__file__).parent.joinpath("test_data") +SOURCE_DIR = DATA_DIR.joinpath("source") +SOURCE_DIR.mkdir(exist_ok=True, parents=True) +QLIB_DIR = DATA_DIR.joinpath("qlib") +QLIB_DIR.mkdir(exist_ok=True, parents=True) + + +class TestGetData(unittest.TestCase): + FIELDS = "$open,$close,$high,$low,$volume,$vwap,$factor,$change,$money".split(",") + + @classmethod + def setUpClass(cls) -> None: + mount_path = provider_uri = str(QLIB_DIR.resolve()) + qlib.init( + mount_path=mount_path, + provider_uri=provider_uri, + expression_cache=None, + dataset_cache=None, + ) + + @classmethod + def tearDownClass(cls) -> None: + shutil.rmtree(str(DATA_DIR.resolve())) + + def test_0_qlib_data(self): + + GetData().qlib_data_cn(QLIB_DIR) + df = D.features(D.instruments("sse50"), self.FIELDS) + self.assertListEqual(list(df.columns), self.FIELDS, "get qlib data failed") + self.assertFalse(df.dropna().empty, "get qlib data failed") + + def test_1_csv_data(self): + GetData().csv_data_cn(SOURCE_DIR) + stock_name = set(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.iterdir())) + self.assertEqual(len(stock_name), 300, "get csv data failed") + + +if __name__ == "__main__": + unittest.main() From cfb45cc0de37246133b83db497c8ea879af19d61 Mon Sep 17 00:00:00 2001 From: zhupr Date: Mon, 21 Sep 2020 11:26:42 +0800 Subject: [PATCH 2/2] Add tuner --- docs/advanced/tuner.rst | 327 ++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 1 + setup.py | 1 + 3 files changed, 329 insertions(+) create mode 100644 docs/advanced/tuner.rst diff --git a/docs/advanced/tuner.rst b/docs/advanced/tuner.rst new file mode 100644 index 0000000000..47dbb30315 --- /dev/null +++ b/docs/advanced/tuner.rst @@ -0,0 +1,327 @@ +.. _tuner: + +Tuner +=================== +.. currentmodule:: qlib + +Introduction +------------------- + +Welcome to use Tuner, this document is based on that you can use Estimator proficiently and correctly. + +You can find the optimal hyper-parameters and combinations of models, trainers, strategies and data labels. + +The usage of program `tuner` is similar with `estimator`, you need provide the URL of the configuration file. +The `tuner` will do the following things: + +- Construct tuner pipeline +- Search and save best hyper-parameters of one tuner +- Search next tuner in pipeline +- Save the global best hyper-parameters and combination + +Each tuner is consisted with a kind of combination of modules, and its goal is searching the optimal hyper-parameters of this combination. +The pipeline is consisted with different tuners, it is aim at finding the optimal combination of modules. + +The result will be printed on screen and saved in file, you can check the result in your experiment saving files. + +Example +~~~~~~~ + +Let's see an example, + +First make sure you have the latest version of `qlib` installed. + +Then, you need to privide a configuration to setup the experiment. +We write a simple configuration example as following, + +.. code-block:: YAML + + experiment: + name: tuner_experiment + tuner_class: QLibTuner + qlib_client: + auto_mount: False + logging_level: INFO + optimization_criteria: + report_type: model + report_factor: model_score + optim_type: max + tuner_pipeline: + - + model: + class: SomeModel + space: SomeModelSpace + trainer: + class: RollingTrainer + strategy: + class: TopkAmountStrategy + space: TopkAmountStrategySpace + max_evals: 2 + + time_period: + rolling_period: 360 + train_start_date: 2005-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-06-30 + test_start_date: 2016-07-01 + test_end_date: 2018-04-30 + data: + class: ALPHA360 + provider_uri: /data/qlib + args: + start_date: 2005-01-01 + end_date: 2018-04-30 + dropna_label: True + dropna_feature: True + filter: + market: csi500 + filter_pipeline: + - + class: NameDFilter + module_path: qlib.data.filter + args: + name_rule_re: S(?!Z3) + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + - + class: ExpressionDFilter + module_path: qlib.data.filter + args: + rule_expression: $open/$factor<=45 + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + backtest: + normal_backtest_args: + verbose: False + limit_threshold: 0.095 + account: 500000 + benchmark: SH000905 + deal_price: vwap + long_short_backtest_args: + topk: 50 + +Next, we run the following command, and you can see: + +.. code-block:: bash + + ~/v-yindzh/Qlib/cfg$ tuner -c tuner_config.yaml + + Searching params: {'model_space': {'colsample_bytree': 0.8870905643607678, 'lambda_l1': 472.3188735122233, 'lambda_l2': 92.75390994877243, 'learning_rate': 0.09741751430635413, 'loss': 'mse', 'max_depth': 8, 'num_leaves': 160, 'num_threads': 20, 'subsample': 0.7536051584789751}, 'strategy_space': {'buffer_margin': 250, 'topk': 40}} + ... + (Estimator experiment screen log) + ... + Searching params: {'model_space': {'colsample_bytree': 0.6667379039007301, 'lambda_l1': 382.10698024977904, 'lambda_l2': 117.02506488151757, 'learning_rate': 0.18514539615228137, 'loss': 'mse', 'max_depth': 6, 'num_leaves': 200, 'num_threads': 12, 'subsample': 0.9449255686969292}, 'strategy_space': {'buffer_margin': 200, 'topk': 30}} + ... + (Estimator experiment screen log) + ... + Local best params: {'model_space': {'colsample_bytree': 0.6667379039007301, 'lambda_l1': 382.10698024977904, 'lambda_l2': 117.02506488151757, 'learning_rate': 0.18514539615228137, 'loss': 'mse', 'max_depth': 6, 'num_leaves': 200, 'num_threads': 12, 'subsample': 0.9449255686969292}, 'strategy_space': {'buffer_margin': 200, 'topk': 30}} + Time cost: 489.87220 | Finished searching best parameters in Tuner 0. + Time cost: 0.00069 | Finished saving local best tuner parameters to: tuner_experiment/estimator_experiment/estimator_experiment_0/local_best_params.json . + Searching params: {'data_label_space': {'labels': ('Ref($vwap, -2)/Ref($vwap, -1) - 2',)}, 'model_space': {'input_dim': 158, 'lr': 0.001, 'lr_decay': 0.9100529502185579, 'lr_decay_steps': 162.48901403763966, 'optimizer': 'gd', 'output_dim': 1}, 'strategy_space': {'buffer_margin': 300, 'topk': 35}} + ... + (Estimator experiment screen log) + ... + Searching params: {'data_label_space': {'labels': ('Ref($vwap, -2)/Ref($vwap, -1) - 1',)}, 'model_space': {'input_dim': 158, 'lr': 0.1, 'lr_decay': 0.9882802970847494, 'lr_decay_steps': 164.76742865207729, 'optimizer': 'adam', 'output_dim': 1}, 'strategy_space': {'buffer_margin': 250, 'topk': 35}} + ... + (Estimator experiment screen log) + ... + Local best params: {'data_label_space': {'labels': ('Ref($vwap, -2)/Ref($vwap, -1) - 1',)}, 'model_space': {'input_dim': 158, 'lr': 0.1, 'lr_decay': 0.9882802970847494, 'lr_decay_steps': 164.76742865207729, 'optimizer': 'adam', 'output_dim': 1}, 'strategy_space': {'buffer_margin': 250, 'topk': 35}} + Time cost: 550.74039 | Finished searching best parameters in Tuner 1. + Time cost: 0.00023 | Finished saving local best tuner parameters to: tuner_experiment/estimator_experiment/estimator_experiment_1/local_best_params.json . + Time cost: 1784.14691 | Finished tuner pipeline. + Time cost: 0.00014 | Finished save global best tuner parameters. + Best Tuner id: 0. + You can check the best parameters at tuner_experiment/global_best_params.json. + + +Finally, you can check the results of your experiment in the given path. + +Configuration file +------------------ + +Before using `tuner`, you need to prepare a configuration file. Next we will show you how to prepare each part of the configuration file. + +About the experiment +~~~~~~~~~~~~~~~~~~~~ + +First, your configuration file needs to have a field about the experiment, whose key is `experiment`, this field and its contents determine the saving path and tuner class. + +Usually it should contain the following content: + +.. code-block:: YAML + + experiment: + name: tuner_experiment + tuner_class: QLibTuner + +Also, there are some optional fields. The meaning of each field is as follows: + +- `name` + The experiment name, str type, the program will use this experiment name to construct a directory to save the process of the whole experiment and the results. The default value is `tuner_experiment`. + +- `dir` + The saving path, str type, the program will construct the experiment directory in this path. The default value is the path where configuration locate. + +- `tuner_class` + The class of tuner, str type, must be an already implemented model, such as `QLibTuner` in `qlib`, or a custom tuner, but it must be a subclass of `qlib.contrib.tuner.Tuner`, the default value is `QLibTuner`. + +- `tuner_module_path` + The module path, str type, absolute url is also supported, indicates the path of the implementation of tuner. The default value is `qlib.contrib.tuner.tuner` + +About the optimization criteria +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You need to designate a factor to optimize, for tuner need a factor to decide which case is better than other cases. +Usually, we use the result of `estimator`, such as backtest results and the score of model. + +This part needs contain these fields: + +.. code-block:: YAML + + optimization_criteria: + report_type: model + report_factor: model_pearsonr + optim_type: max + +- `report_type` + The type of the report, str type, determines which kind of report you want to use. If you want to use the backtest result type, you can choose `pred_long`, `pred_long_short`, `pred_short`, `sub_bench` and `sub_cost`. If you want to use the model result type, you can only choose `model`. + +- `report_factor` + The factor you want to use in the report, str type, determines which factor you want to optimize. If your `report_type` is backtest result type, you can choose `annual`, `sharpe`, `mdd`, `mean` and `std`. If your `report_type` is model result type, you can choose `model_score` and `model_pearsonr`. + +- `optim_type` + The optimization type, str type, determines what kind of optimization you want to do. you can minimize the factor or maximize the factor, so you can choose `max`, `min` or `correlation` at this field. + Note: `correlation` means the factor's best value is 1, such as `model_pearsonr` (a corraltion coefficient). + +If you want to process the factor or you want fetch other kinds of factor, you can override the `objective` method in your own tuner. + +About the tuner pipeline +~~~~~~~~~~~~~~~~~~~~~~~~ + +The tuner pipeline contains different tuners, and the `tuner` program will process each tuner in pipeline. Each tuner will get an optimal hyper-parameters of its specific combination of modules. The pipeline will contrast the results of each tuner, and get the best combination and its optimal hyper-parameters. So, you need to configurate the pipeline and each tuner, here is an example: + +.. code-block:: YAML + + tuner_pipeline: + - + model: + class: SomeModel + space: SomeModelSpace + trainer: + class: RollingTrainer + strategy: + class: TopkAmountStrategy + space: TopkAmountStrategySpace + max_evals: 2 + +Each part represents a tuner, and its modules which are to be tuned. Space in each part is the hyper-parameters' space of a certain module, you need to create your searching space and modify it in `/qlib/contrib/tuner/space.py`. We use `hyperopt` package to help us to construct the space, you can see the detail of how to use it in https://github.com/hyperopt/hyperopt/wiki/FMin . + +- model + You need to provide the `class` and the `space` of the model. If the model is user's own implementation, you need to privide the `module_path`. + +- trainer + You need to proveide the `class` of the trainer. If the trainer is user's own implementation, you need to privide the `module_path`. + +- strategy + You need to provide the `class` and the `space` of the strategy. If the strategy is user's own implementation, you need to privide the `module_path`. + +- data_label + The label of the data, you can search which kinds of labels will lead to a better result. This part is optional, and you only need to provide `space`. + +- max_evals + Allow up to this many function evaluations in this tuner. The default value is 10. + +If you don't want to search some modules, you can fix their spaces in `space.py`. We will not give the default module. + +About the time period +~~~~~~~~~~~~~~~~~~~~~ + +You need to use the same dataset to evaluate your different `estimator` experiments in `tuner` experiment. Two experiments using different dataset are uncomparable. You can specify `time_period` through the configuration file: + +.. code-block:: YAML + + time_period: + rolling_period: 360 + train_start_date: 2005-01-01 + train_end_date: 2014-12-31 + validate_start_date: 2015-01-01 + validate_end_date: 2016-06-30 + test_start_date: 2016-07-01 + test_end_date: 2018-04-30 + +- `rolling_period` + The rolling period, integer type, indicates how many time steps need rolling when rolling the data. The default value is `60`. If you use `RollingTrainer`, this config will be used, or it will be ignored. + +- `train_start_date` + Training start time, str type. + +- `train_end_date` + Training end time, str type. + +- `validate_start_date` + Validation start time, str type. + +- `validate_end_date` + Validation end time, str type. + +- `test_start_date` + Test start time, str type. + +- `test_end_date` + Test end time, str type. If `test_end_date` is `-1` or greater than the last date of the data, the last date of the data will be used as `test_end_date`. + +About the data and backtest +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`data` and `backtest` are all same in the whole `tuner` experiment. Different `estimator` experiments must use the same data and backtest method. So, these two parts of config are same with that in `estimator` configuration. You can see the precise defination of these parts in `estimator` introduction. We only provide an example here. + +.. code-block:: YAML + + data: + class: ALPHA360 + provider_uri: /data/qlib + args: + start_date: 2005-01-01 + end_date: 2018-04-30 + dropna_label: True + dropna_feature: True + feature_label_config: /home/v-yindzh/v-yindzh/QLib/cfg/feature_config.yaml + filter: + market: csi500 + filter_pipeline: + - + class: NameDFilter + module_path: qlib.filter + args: + name_rule_re: S(?!Z3) + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + - + class: ExpressionDFilter + module_path: qlib.filter + args: + rule_expression: $open/$factor<=45 + fstart_time: 2018-01-01 + fend_time: 2018-12-11 + backtest: + normal_backtest_args: + verbose: False + limit_threshold: 0.095 + account: 500000 + benchmark: SH000905 + deal_price: vwap + long_short_backtest_args: + topk: 50 + +Experiment Result +----------------- + +All the results are stored in experiment file directly, you can check them directly in the corresponding files. +What we save are as following: + +- Global optimal parameters +- Local optimal parameters of each tuner +- Config file of this `tuner` experiment +- Every `estimator` experiments result in the process + diff --git a/docs/index.rst b/docs/index.rst index 0d3cee4e16..3ad0cfdd71 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -41,6 +41,7 @@ Document Structure Backtest: Model&Strategy Testing Report: Graphical Results Cache: Frequently-Used Data + Tuner: Tuner .. toctree:: diff --git a/setup.py b/setup.py index cc08d682da..c07b952b23 100644 --- a/setup.py +++ b/setup.py @@ -94,6 +94,7 @@ # 'console_scripts': ['mycli=mymodule:cli'], "console_scripts": [ "estimator=qlib.contrib.estimator.launcher:run", + "tuner=qlib.contrib.tuner.launcher:run", ], }, ext_modules=extensions,