{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have build our model, let's make future predictions. As a reminder, our plan of action was as follows:\n",
"\n",
"1. Perform EDA on the dataset to extract valuable insight about the process generating the time series **(COMPLETED)**.\n",
"2. Build a baseline model (univariable model without exogenous variables) for benchmarking purposes **(COMPLETED)**.\n",
"3. Build a univariate model with all exogenous variables to check best possible performance **(COMPLETED)**.\n",
"4. Evaluate the model with exogenous variables and discuss any potential issues **(COMPLETED)**.\n",
"5. Overcome issues identified above **(COMPLETED)**.\n",
"6. Make future predictions with the best model. **(Covered in this notebook)**\n",
"7. Replicate flow with Automated Time Series Modeling (AutoML)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Only enable critical logging (Optional)\n",
"import os\n",
"os.environ[\"PYCARET_CUSTOM_LOGGING_LEVEL\"] = \"CRITICAL\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"System:\n",
" python: 3.8.13 (default, Mar 28 2022, 06:59:08) [MSC v.1916 64 bit (AMD64)]\n",
"executable: C:\\Users\\Nikhil\\.conda\\envs\\pycaret_dev_sktime_0p11_2\\python.exe\n",
" machine: Windows-10-10.0.19044-SP0\n",
"\n",
"PyCaret required dependencies:\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Nikhil\\.conda\\envs\\pycaret_dev_sktime_0p11_2\\lib\\site-packages\\_distutils_hack\\__init__.py:30: UserWarning: Setuptools is replacing distutils.\n",
" warnings.warn(\"Setuptools is replacing distutils.\")\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" pip: 21.2.2\n",
" setuptools: 61.2.0\n",
" pycaret: 3.0.0\n",
" ipython: Not installed\n",
" ipywidgets: 7.7.0\n",
" numpy: 1.21.6\n",
" pandas: 1.4.2\n",
" jinja2: 3.1.2\n",
" scipy: 1.8.0\n",
" joblib: 1.1.0\n",
" sklearn: 1.0.2\n",
" pyod: Installed but version unavailable\n",
" imblearn: 0.9.0\n",
" category_encoders: 2.4.1\n",
" lightgbm: 3.3.2\n",
" numba: 0.55.1\n",
" requests: 2.27.1\n",
" matplotlib: 3.5.2\n",
" scikitplot: 0.3.7\n",
" yellowbrick: 1.4\n",
" plotly: 5.8.0\n",
" kaleido: 0.2.1\n",
" statsmodels: 0.13.2\n",
" sktime: 0.11.4\n",
" tbats: Installed but version unavailable\n",
" pmdarima: 1.8.5\n",
"\n",
"PyCaret optional dependencies:\n",
" shap: Not installed\n",
" interpret: Not installed\n",
" umap: Not installed\n",
" pandas_profiling: Not installed\n",
" explainerdashboard: Not installed\n",
" autoviz: Not installed\n",
" fairlearn: Not installed\n",
" xgboost: Not installed\n",
" catboost: Not installed\n",
" kmodes: Not installed\n",
" mlxtend: Not installed\n",
" statsforecast: 0.5.5\n",
" tune_sklearn: Not installed\n",
" ray: Not installed\n",
" hyperopt: Not installed\n",
" optuna: Not installed\n",
" skopt: Not installed\n",
" mlflow: 1.25.1\n",
" gradio: Not installed\n",
" fastapi: Not installed\n",
" uvicorn: Not installed\n",
" m2cgen: Not installed\n",
" evidently: Not installed\n",
" nltk: Not installed\n",
" pyLDAvis: Not installed\n",
" gensim: Not installed\n",
" spacy: Not installed\n",
" wordcloud: Not installed\n",
" textblob: Not installed\n",
" psutil: 5.9.0\n",
" fugue: Not installed\n",
" streamlit: Not installed\n",
" prophet: Not installed\n"
]
}
],
"source": [
"def what_is_installed():\n",
" from pycaret import show_versions\n",
" show_versions()\n",
"\n",
"try:\n",
" what_is_installed()\n",
"except ModuleNotFoundError:\n",
" !pip install pycaret\n",
" what_is_installed()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from pycaret.datasets import get_data\n",
"from pycaret.time_series import TSForecastingExperiment"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Global Figure Settings for notebook ----\n",
"global_fig_settings = {\"renderer\": \"notebook\", \"width\": 1000, \"height\": 600}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" NOx(GT) | \n",
" PT08.S3(NOx) | \n",
" RH | \n",
"
\n",
" \n",
" index | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 2004-03-10 18:00:00 | \n",
" 166.0 | \n",
" 1056.0 | \n",
" 48.9 | \n",
"
\n",
" \n",
" 2004-03-10 19:00:00 | \n",
" 103.0 | \n",
" 1174.0 | \n",
" 47.7 | \n",
"
\n",
" \n",
" 2004-03-10 20:00:00 | \n",
" 131.0 | \n",
" 1140.0 | \n",
" 54.0 | \n",
"
\n",
" \n",
" 2004-03-10 21:00:00 | \n",
" 172.0 | \n",
" 1092.0 | \n",
" 60.0 | \n",
"
\n",
" \n",
" 2004-03-10 22:00:00 | \n",
" 131.0 | \n",
" 1205.0 | \n",
" 59.6 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" NOx(GT) PT08.S3(NOx) RH\n",
"index \n",
"2004-03-10 18:00:00 166.0 1056.0 48.9\n",
"2004-03-10 19:00:00 103.0 1174.0 47.7\n",
"2004-03-10 20:00:00 131.0 1140.0 54.0\n",
"2004-03-10 21:00:00 172.0 1092.0 60.0\n",
"2004-03-10 22:00:00 131.0 1205.0 59.6"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = get_data(\"airquality\", verbose=False)\n",
"data[\"index\"] = pd.to_datetime(data[\"Date\"] + \" \" + data[\"Time\"])\n",
"data.drop(columns=[\"Date\", \"Time\"], inplace=True)\n",
"data.replace(-200, np.nan, inplace=True)\n",
"data.set_index(\"index\", inplace=True)\n",
"\n",
"exog_vars = ['NOx(GT)', 'PT08.S3(NOx)', 'RH']\n",
"data = data[exog_vars]\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 6: Making Future Predictions\n",
"\n",
"# Step 6A: Get future exogenous variable values using forecasting"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Model | \n",
" MASE | \n",
" RMSSE | \n",
" MAE | \n",
" RMSE | \n",
" MAPE | \n",
" SMAPE | \n",
" R2 | \n",
" TT (Sec) | \n",
"
\n",
" \n",
" \n",
" \n",
" lightgbm_cds_dt | \n",
" Light Gradient Boosting w/ Cond. Deseasonalize & Detrending | \n",
" 1.1990 | \n",
" 1.0486 | \n",
" 11.0836 | \n",
" 13.5879 | \n",
" 0.2862 | \n",
" 0.2304 | \n",
" -0.9502 | \n",
" 5.1700 | \n",
"
\n",
" \n",
" exp_smooth | \n",
" Exponential Smoothing | \n",
" 1.4890 | \n",
" 1.1904 | \n",
" 13.7510 | \n",
" 15.4140 | \n",
" 0.3037 | \n",
" 0.2478 | \n",
" -0.4248 | \n",
" 3.2700 | \n",
"
\n",
" \n",
" arima | \n",
" ARIMA | \n",
" 1.5657 | \n",
" 1.3693 | \n",
" 14.4696 | \n",
" 17.7412 | \n",
" 0.3539 | \n",
" 0.2739 | \n",
" -2.1191 | \n",
" 3.6833 | \n",
"
\n",
" \n",
" theta | \n",
" Theta Forecaster | \n",
" 1.9102 | \n",
" 1.4902 | \n",
" 17.6420 | \n",
" 19.2958 | \n",
" 0.3713 | \n",
" 0.2986 | \n",
" -1.2629 | \n",
" 3.1567 | \n",
"
\n",
" \n",
" ets | \n",
" ETS | \n",
" 3.4504 | \n",
" 2.6557 | \n",
" 31.8652 | \n",
" 34.3839 | \n",
" 0.6295 | \n",
" 0.4585 | \n",
" -6.1733 | \n",
" 9.8033 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"exog_exps = []\n",
"exog_models = []\n",
"for exog_var in exog_vars:\n",
" exog_exp = TSForecastingExperiment()\n",
" exog_exp.setup(\n",
" data=data[exog_var], fh=48,\n",
" numeric_imputation_target=\"ffill\", numeric_imputation_exogenous=\"ffill\",\n",
" fig_kwargs=global_fig_settings, session_id=42\n",
" )\n",
"\n",
" # Users can customize how to model future exogenous variables i.e. add\n",
" # more steps and models to potentially get better models at the expense\n",
" # of higher modeling time.\n",
" best = exog_exp.compare_models(\n",
" sort=\"mase\", include=[\"arima\", \"ets\", \"exp_smooth\", \"theta\", \"lightgbm_cds_dt\",] \n",
" )\n",
" final_exog_model = exog_exp.finalize_model(best)\n",
"\n",
" exog_exps.append(exog_exp)\n",
" exog_models.append(final_exog_model)\n",
"\n",
"# Step 2: Get future predictions for exog variables ----\n",
"future_exog = [\n",
" exog_exp.predict_model(exog_model)\n",
" for exog_exp, exog_model in zip(exog_exps, exog_models)\n",
"]\n",
"future_exog = pd.concat(future_exog, axis=1)\n",
"future_exog.columns = exog_vars"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" NOx(GT) | \n",
" PT08.S3(NOx) | \n",
" RH | \n",
"
\n",
" \n",
" \n",
" \n",
" 2005-04-04 15:00 | \n",
" 262.1091 | \n",
" 656.1044 | \n",
" 14.5065 | \n",
"
\n",
" \n",
" 2005-04-04 16:00 | \n",
" 297.1918 | \n",
" 638.6659 | \n",
" 15.6333 | \n",
"
\n",
" \n",
" 2005-04-04 17:00 | \n",
" 325.5872 | \n",
" 596.7227 | \n",
" 17.5673 | \n",
"
\n",
" \n",
" 2005-04-04 18:00 | \n",
" 259.7444 | \n",
" 556.0672 | \n",
" 22.7364 | \n",
"
\n",
" \n",
" 2005-04-04 19:00 | \n",
" 425.2039 | \n",
" 534.2108 | \n",
" 28.3385 | \n",
"
\n",
" \n",
" 2005-04-04 20:00 | \n",
" 403.5829 | \n",
" 553.1982 | \n",
" 33.7580 | \n",
"
\n",
" \n",
" 2005-04-04 21:00 | \n",
" 275.5622 | \n",
" 611.5993 | \n",
" 37.0870 | \n",
"
\n",
" \n",
" 2005-04-04 22:00 | \n",
" 266.8754 | \n",
" 652.8857 | \n",
" 39.7600 | \n",
"
\n",
" \n",
" 2005-04-04 23:00 | \n",
" 198.3008 | \n",
" 662.6246 | \n",
" 41.3155 | \n",
"
\n",
" \n",
" 2005-04-05 00:00 | \n",
" 140.6534 | \n",
" 680.4221 | \n",
" 42.4415 | \n",
"
\n",
" \n",
" 2005-04-05 01:00 | \n",
" 89.7790 | \n",
" 730.9550 | \n",
" 44.4348 | \n",
"
\n",
" \n",
" 2005-04-05 02:00 | \n",
" 85.5490 | \n",
" 799.7945 | \n",
" 46.8401 | \n",
"
\n",
" \n",
" 2005-04-05 03:00 | \n",
" 75.8562 | \n",
" 861.3735 | \n",
" 48.6809 | \n",
"
\n",
" \n",
" 2005-04-05 04:00 | \n",
" 63.6113 | \n",
" 890.8526 | \n",
" 49.7074 | \n",
"
\n",
" \n",
" 2005-04-05 05:00 | \n",
" 86.7398 | \n",
" 878.5921 | \n",
" 50.1808 | \n",
"
\n",
" \n",
" 2005-04-05 06:00 | \n",
" 190.1795 | \n",
" 796.5090 | \n",
" 50.4606 | \n",
"
\n",
" \n",
" 2005-04-05 07:00 | \n",
" 600.8788 | \n",
" 663.6406 | \n",
" 48.9828 | \n",
"
\n",
" \n",
" 2005-04-05 08:00 | \n",
" 591.7944 | \n",
" 561.3295 | \n",
" 46.7280 | \n",
"
\n",
" \n",
" 2005-04-05 09:00 | \n",
" 527.8903 | \n",
" 565.2039 | \n",
" 41.8545 | \n",
"
\n",
" \n",
" 2005-04-05 10:00 | \n",
" 476.1367 | \n",
" 599.8656 | \n",
" 37.9259 | \n",
"
\n",
" \n",
" 2005-04-05 11:00 | \n",
" 356.5084 | \n",
" 622.0729 | \n",
" 35.3302 | \n",
"
\n",
" \n",
" 2005-04-05 12:00 | \n",
" 295.9845 | \n",
" 630.0078 | \n",
" 34.0590 | \n",
"
\n",
" \n",
" 2005-04-05 13:00 | \n",
" 237.5478 | \n",
" 632.9998 | \n",
" 35.7544 | \n",
"
\n",
" \n",
" 2005-04-05 14:00 | \n",
" 267.1838 | \n",
" 653.6938 | \n",
" 36.6735 | \n",
"
\n",
" \n",
" 2005-04-05 15:00 | \n",
" 263.9894 | \n",
" 655.8095 | \n",
" 35.8249 | \n",
"
\n",
" \n",
" 2005-04-05 16:00 | \n",
" 298.8190 | \n",
" 638.3788 | \n",
" 35.1843 | \n",
"
\n",
" \n",
" 2005-04-05 17:00 | \n",
" 327.0035 | \n",
" 596.4545 | \n",
" 35.7987 | \n",
"
\n",
" \n",
" 2005-04-05 18:00 | \n",
" 260.9848 | \n",
" 555.8173 | \n",
" 38.7220 | \n",
"
\n",
" \n",
" 2005-04-05 19:00 | \n",
" 426.2978 | \n",
" 533.9706 | \n",
" 41.7648 | \n",
"
\n",
" \n",
" 2005-04-05 20:00 | \n",
" 404.5546 | \n",
" 552.9496 | \n",
" 44.0184 | \n",
"
\n",
" \n",
" 2005-04-05 21:00 | \n",
" 276.4319 | \n",
" 611.3244 | \n",
" 47.1953 | \n",
"
\n",
" \n",
" 2005-04-05 22:00 | \n",
" 267.6602 | \n",
" 652.5922 | \n",
" 49.4721 | \n",
"
\n",
" \n",
" 2005-04-05 23:00 | \n",
" 199.0148 | \n",
" 662.3268 | \n",
" 51.0524 | \n",
"
\n",
" \n",
" 2005-04-06 00:00 | \n",
" 141.3084 | \n",
" 680.1162 | \n",
" 53.1152 | \n",
"
\n",
" \n",
" 2005-04-06 01:00 | \n",
" 90.3847 | \n",
" 730.6264 | \n",
" 54.2431 | \n",
"
\n",
" \n",
" 2005-04-06 02:00 | \n",
" 86.1137 | \n",
" 799.4349 | \n",
" 55.4766 | \n",
"
\n",
" \n",
" 2005-04-06 03:00 | \n",
" 76.3867 | \n",
" 860.9863 | \n",
" 56.8362 | \n",
"
\n",
" \n",
" 2005-04-06 04:00 | \n",
" 64.1132 | \n",
" 890.4521 | \n",
" 58.0996 | \n",
"
\n",
" \n",
" 2005-04-06 05:00 | \n",
" 87.2179 | \n",
" 878.1971 | \n",
" 59.2240 | \n",
"
\n",
" \n",
" 2005-04-06 06:00 | \n",
" 190.6379 | \n",
" 796.1510 | \n",
" 59.8861 | \n",
"
\n",
" \n",
" 2005-04-06 07:00 | \n",
" 601.3206 | \n",
" 663.3422 | \n",
" 59.1575 | \n",
"
\n",
" \n",
" 2005-04-06 08:00 | \n",
" 592.2224 | \n",
" 561.0771 | \n",
" 57.2327 | \n",
"
\n",
" \n",
" 2005-04-06 09:00 | \n",
" 528.3069 | \n",
" 564.9498 | \n",
" 52.8706 | \n",
"
\n",
" \n",
" 2005-04-06 10:00 | \n",
" 476.5436 | \n",
" 599.5958 | \n",
" 46.1781 | \n",
"
\n",
" \n",
" 2005-04-06 11:00 | \n",
" 356.9073 | \n",
" 621.7932 | \n",
" 41.6050 | \n",
"
\n",
" \n",
" 2005-04-06 12:00 | \n",
" 296.3769 | \n",
" 629.7245 | \n",
" 38.9799 | \n",
"
\n",
" \n",
" 2005-04-06 13:00 | \n",
" 237.9346 | \n",
" 632.7152 | \n",
" 37.8304 | \n",
"
\n",
" \n",
" 2005-04-06 14:00 | \n",
" 267.5660 | \n",
" 653.3999 | \n",
" 37.2366 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" NOx(GT) PT08.S3(NOx) RH\n",
"2005-04-04 15:00 262.1091 656.1044 14.5065\n",
"2005-04-04 16:00 297.1918 638.6659 15.6333\n",
"2005-04-04 17:00 325.5872 596.7227 17.5673\n",
"2005-04-04 18:00 259.7444 556.0672 22.7364\n",
"2005-04-04 19:00 425.2039 534.2108 28.3385\n",
"2005-04-04 20:00 403.5829 553.1982 33.7580\n",
"2005-04-04 21:00 275.5622 611.5993 37.0870\n",
"2005-04-04 22:00 266.8754 652.8857 39.7600\n",
"2005-04-04 23:00 198.3008 662.6246 41.3155\n",
"2005-04-05 00:00 140.6534 680.4221 42.4415\n",
"2005-04-05 01:00 89.7790 730.9550 44.4348\n",
"2005-04-05 02:00 85.5490 799.7945 46.8401\n",
"2005-04-05 03:00 75.8562 861.3735 48.6809\n",
"2005-04-05 04:00 63.6113 890.8526 49.7074\n",
"2005-04-05 05:00 86.7398 878.5921 50.1808\n",
"2005-04-05 06:00 190.1795 796.5090 50.4606\n",
"2005-04-05 07:00 600.8788 663.6406 48.9828\n",
"2005-04-05 08:00 591.7944 561.3295 46.7280\n",
"2005-04-05 09:00 527.8903 565.2039 41.8545\n",
"2005-04-05 10:00 476.1367 599.8656 37.9259\n",
"2005-04-05 11:00 356.5084 622.0729 35.3302\n",
"2005-04-05 12:00 295.9845 630.0078 34.0590\n",
"2005-04-05 13:00 237.5478 632.9998 35.7544\n",
"2005-04-05 14:00 267.1838 653.6938 36.6735\n",
"2005-04-05 15:00 263.9894 655.8095 35.8249\n",
"2005-04-05 16:00 298.8190 638.3788 35.1843\n",
"2005-04-05 17:00 327.0035 596.4545 35.7987\n",
"2005-04-05 18:00 260.9848 555.8173 38.7220\n",
"2005-04-05 19:00 426.2978 533.9706 41.7648\n",
"2005-04-05 20:00 404.5546 552.9496 44.0184\n",
"2005-04-05 21:00 276.4319 611.3244 47.1953\n",
"2005-04-05 22:00 267.6602 652.5922 49.4721\n",
"2005-04-05 23:00 199.0148 662.3268 51.0524\n",
"2005-04-06 00:00 141.3084 680.1162 53.1152\n",
"2005-04-06 01:00 90.3847 730.6264 54.2431\n",
"2005-04-06 02:00 86.1137 799.4349 55.4766\n",
"2005-04-06 03:00 76.3867 860.9863 56.8362\n",
"2005-04-06 04:00 64.1132 890.4521 58.0996\n",
"2005-04-06 05:00 87.2179 878.1971 59.2240\n",
"2005-04-06 06:00 190.6379 796.1510 59.8861\n",
"2005-04-06 07:00 601.3206 663.3422 59.1575\n",
"2005-04-06 08:00 592.2224 561.0771 57.2327\n",
"2005-04-06 09:00 528.3069 564.9498 52.8706\n",
"2005-04-06 10:00 476.5436 599.5958 46.1781\n",
"2005-04-06 11:00 356.9073 621.7932 41.6050\n",
"2005-04-06 12:00 296.3769 629.7245 38.9799\n",
"2005-04-06 13:00 237.9346 632.7152 37.8304\n",
"2005-04-06 14:00 267.5660 653.3999 37.2366"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"future_exog"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 6B: Load Model and make future predcitons for the target variable"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"exp_future = TSForecastingExperiment()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Transformation Pipeline and Model Successfully Loaded\n"
]
}
],
"source": [
"final_slim_model = exp_future.load_model(\"final_slim_model\")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWkAAAEMCAYAAAAGQkenAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA8/0lEQVR4nO3dd5iU1fnw8e/MbO+VZakLLByFpS5IEZWImhhr7CVoTNHkZ4oxRZNoqm8SS2KixqgxiV0TC7EFY0URQWABcVGfpe3SYRs7W2d3yvvHlG2zu7M75Zln5v5cF9cFU8/OHO49zzn3uY/J5XIhhBAiOpn1boAQQoiBSZAWQogoJkFaCCGimARpIYSIYhKkhRAiiiWE8sUqKiqSgQXAIcARytcWQogYZgGKgY3l5eW2nneENEjjDtBrQvyaQggRL04C3u95Q6iD9CGAadOmkZSUFOKXNobKykrKysr0boYQQ5K+Gj06OzupqqoCTwztKdRB2gGQlJREcnJyiF/aOOL5ZxfGIn016vSbJg4oSCulNgNWzz/3aJp2TShbJYQQwr8hg7RSKgUwaZq2LPzNEUII0VMgI+nZQJpS6nXP43+qadr68DZLCCEEgGmoAktKqZnAIuBhYCqwClCaptn7PraioqIE2BP6ZgohRFyYVF5eXt3zhkBG0lXATk3TXECVUqoedz7fvoGeUFZWFrcLEhUVFZSXl+vdDCGGJH01ethsNiorK/3eF8iOw68CfwBQSo0BsvCTJiKEENHkw5padtU1692MoAUSpP8O5Cil3gf+BXzV31SHcOvs7OTUU0/Vuxlh863n1vP7tz7WuxlCDKrT7mD5X9/g2n+v07spQRtyukPTtE7gigi0RUS5VlsXD63bwYTcdG5ePlPv5ggxoN31LbR3Oag8fEzvpgQt1JtZhvTjlyt47qOakL7mRbMncsc5A8+t/eAHP+Ccc85h2bJl7Nq1i9tvv52HHnqo3+NWrFjBpEmT2LNnDy6Xi7vvvpvdu3dz1113kZiYyCWXXMKYMWO4++67sVgsjB8/nl//+td0dnbywx/+EKvVSnp6ekh/tmiys9596bjvWCsdXQ5SEi06t0gI/6pq3ds66lptHGvvJCfVuDug46IK3sUXX8zKlSsBeO6557jooosGfOy8efN4/PHHOfPMM3nwwQcB96T+U089xXnnncett97KfffdxxNPPEFRURErV67kmWeeYdq0aTz55JMsX748Ij+THqpq3UHa5YJd9caf6xOxa0et1e/fjSjiI+k7zikfdNQbDgsXLuS2226joaGBtWvXcuONNw742EWLFgHuYP32228DMGnSJAAaGho4evQoN9xwAwAdHR0sWbKEhoYGTjnlFABKS0tJSIj4xxoRfTv+jNE5+jVGiEFU1fXoq3XNLJhQoGNrghOb0aQPk8nEueeey2233caJJ55IYmLigI+trKxk9OjRbN68mdLSUgDMZvcFR25uLqNHj+b+++8nMzOTt956i7S0NDRNY+vWrZx22mlUV1djt8fmumpVjyC9MwZWzUXs2lnb3T+NnuERF0Ea4IILLmDZsmW8+OKLgz5u5cqVPPLII6SmpnLHHXd4K1MB7mD9s5/9jGuvvRaXy0V6ejp33HEH8+bN48c//jGXX345WVlZg/4SMLKeHX9HnbEvIUVsq6q1kpxgxmZ3Gr6vxk2QdjgclJeXM2XKlEEfd+ONN/Z6zMKFC1m4cKHv30uXLmXp0qX9nvfnP/8ZiO0NAlW1VsbnpLHvWJvhRycidrXYujhobefU0tG8t/tIr8GFEcVFkH799de59957+eUvf8nBgwe56aab+j1mwYIFOrTMOBrabNS32VhUMhaAHQbv+CJ2efvmcUXZ7G9qk5G0EZxxxhmcccYZvn8//vjjOrbGmLyLhlMLsmjvdPD2zsO0ddpJS4qLLiQMxLt2Mq0wk+qGFqpqrTS02chLM2apirhIwRPB86bfTS3MorQwE5A0PBGddnpGzlMLs5jq6atGXuiWIC0CsqPH6GRqQZbnNuN2fBG7vAOKaYVZlOZ7+6pxpzzkWlUEpKrHdEeLzZ1iuNPgc30iNu2otZJoMTMhJ9131WfkkbQEaRGQnXXNpCZaGJudRrOtC5CRtIg+LpcLrdbKlPwMEixmpha4g7SRR9Iy3SGG5HK5qKq1MrUgC7PZxOT8TEwmmZMW0afeU6tjaqF7mmNCbjpJFrOh+6oEaTGkQ9Z2WjvtvkWYlEQLE3LSDT06EbFpR133fDSAxWxmcn6Goa/6JEiLIXk7vnd0AlBakMlBazutnqkPIaKBb+2kR1+dUpBJY3sn9a02vZoVFAnSYkg9Fw29vP8Jdhr4MlLEnu58/kzfbb5sJIMudEuQFkPqmX7n1b0gI0FaRI/ujSw9rvoKjd1XJUiLIfm7hCz1jqQNOjoRsWlHbTPpSQkUZ6X6bvOOpI1ab0aCtBjSzrpmclKTKEjv3lZbmm/s0YmIPU6ni531VqYVZmEymXy3+676DDqgkCAtBuVwOtlZ18y0wsxeHX9yfgZmk8nQmwREbDlobaOt00Fpj/logHE5aSRZzIbtqxKkxaBqGlvpcjh7TXUAJCVYmJibbtiOL2KPv/locKfhTSnIZEetFZfLpUfTgiJBWgzKX2aHV2lBJoeb22nukDQ8ob+eRcD6Ki3IpKmjy5BpeBKkxaB2+jp+Zr/7fGl4MpoWUcBfFpJXdxqe8fqqBGkxqIEuIcH4CzIituyo65+F5OVLwzNgX5UgLQY16HSHjKRFFNlR20x+WrLf4v7ebCQjHqUlQVoMamddM6MzU8lM6X+4bmkMVBgTsaHL4WR3fbPfKz7oHl3LSFrEFJvdQXVji985PoBJeRlYzJKGJ/RX3dCC3enyu3YCMC47jZQEiyE3tEiQFgPaVdeMy+V/jg8g0WKmJDdDgrTQXd/qd32ZzSamFGSwo67ZcGl4EqTFgAabj/YqLczkaEsH1o7OSDVLiH68U26lAwRpgNKCLKwdXdS2dESqWSEhQVoMaGfdwOl3XlJoSUSDqkHS77x8aygGu/KTIC0GNFj6nZfRy0CK2OAbSecPHaSNNj0nQVoMaEetFZMJJg/W8WPgoE9hfFW1VsZlp5Ge3D8LyWuqQSs3SpAWA9pR18zE3HRSEi0DPsY3kpbpDqGT9i47+461DTotB8admpMgLfxq7ujikLV90EVDgIm56SSYTYYbnYjYsdPP8W7+jMlyp+EZ7apPgrTwyzvHPNh8NECCxcykPEnDE/oJZO0E3Gl4pQWZ7KgzVjU8CdLCr+7TWAa/hAR32lNdq41j7ZKGJyJvh5+TgwZSWphJi83OUQOl4UmQFn4FegkJPef6ZMpDRJ6vRGnB0AMKI66hSJAWfgV6CQnGLgMpjG9nrRWL2cSkvIwhH1tqwMqNEqSFXztqrSRazEzISR/ysb40PBlJCx1U1VmZlJdBUsLAWUheRsyVliAt+nG5XFTVNjMlP4MEy9BdZKpBd3IJ42tss1HbYgtoWg6MeVBFQEFaKTVKKbVPKXVcuBsk9FfvWQQMtOOPz0kn0WKWNDwRcd2FlYaejwYYk5VKWpLFUFd9QwZppVQi8CDQHv7miGgwnPlocKfhTc7LMNRijIgNgRQB68lkMlGan2WoaniBjKTvAh4ADoa5LSJKeFfLSwNYLfcqLcyksb2ThjbjHfQpjGvnIIfPDqS0MJPWTjuHm40x7kwY7E6l1FeAWk3T/qeU+kmgL1pZWRlsuwytoqJC7yYEZU3lUfdfGg9TURHY6DjL4e7wL6/ZQFlBWriaJkLM6H31w6r9ANgO11DRHNg4MsPeCsArazcxb9TQC+N6GzRIA18FXEqp04A5wGNKqXM1TTs82JPKyspITu5/zlg8qKiooLy8XO9mBKW58l0Azj5xPmOyAwu4J9o0ntY2YCkYS3n55HA2T4RILPTVuvcOk5Jg4cylCzGbTQE9Z6l9B499Uo8lbwzl5aVhbmFgbDbbgIPbQYO0pmkne/+ulFoNfHOoAC2Mb0dtM+lJCRRnpQb8HO+coBEP+hTG5M5CslJakBlwgIYefdUgC92Sgid6cTpd7KizMrUgE5NpOB3feJsEhLEdbemgxWb35ekHylvqwCgpo0NNd/homrYsjO0QUaKutYP2Lgcl+UPv3uppXE4aSRazofJPhbE1tLlrxYzKSBnW80ZnppKelGCYqz4ZSYterLYuAHJTk4b1PIvZTGlBJlW1xqowJozLe65m1iCF/v0xmUwcNyoLrbYJu8MZjqaFlARp0UtTuztIZ6cML0gDlBXnYO3oYm9ja6ibJUQ/TR2evjrMAQXAzOJcbHYnmgE2tUiQFr14R9JZKcMbnQDMKs4FYNuhxpC2SQh/rJ4gPdyRNMDsMZ6+ejD6+6oEadGLr+OPIEjP9HT8jw8dC2WThPDL21czRzKgkCAtjMrX8UcwOvGOpD8yQMcXxtccxFWfdyT9kQGu+iRIi16agxhJj89JIyc1iY8lSIsICGa6IzctmfE5aTKSFsZjtXlWzEcQpE0mE7OKc9hR10xbpz3UTROil2Cm5sA95XHI2k5tlB+lJUFa9BLM6ATcq+ZOl4tPjjSFsllC9BPMgAJ6THlE+WhagrToJdjRyUwDLcgIYwu6rxZ7F7qju69KkBa9dKfgDT/3FGBWcQ4Q/R1fGF+wV30ykhaGFOzopGx0DiaTBGkRfs0dXZhNJtKSAq5u0UtpQSapiZaov+qTIC16afal4I2s46cnJ1Kan8lHBxtle7gIK6uti6yUxGEVAuvJYjYzsziHT4400Wl3hLh1oSNBWvRitXWRnpSAxTzyrjFzTC4NbZ0ctBrj5AthTNaOrhFf8XnNGpNLl8PJZ0ejd3u4BGnRS0g6frEsHorwa+roIjvIvjq7OA+I7nlpCdKiF2tH14gXYrxmyuKhCDOXyxWavjomB4juAYUEadFLqC4hIbo7vjC2tk47TpdrRHU7ejJCUTAJ0sKn0+6gw+4IOkiX5GaQkZwghZZE2ARTrbGn7NQkSvLSo3pAIUFa+HSn340sR9rLbDYxc3Qunx1twhbFq+bCuIJNFe1pVnEuR1s6OBylC90SpIVPqEYn4J7ysDtdfCrbw0UYdG9kCW5AATB7THQvHkqQFj6hHJ34FmSieK5PGFdIR9JRvoYiQVr4BLvNtifvgszHB48F/VpC9BXKq77u7eENQb9WOEiQFj6h7Phlo3MAGUmL8AjmcIq+JuW5F7qjta9KkBY+wRxH1Jd31VxypUU4BHM4RV/dC93WqFzoliAtfEI53QHuUpBHmjs40hydq+bCuEJ51QfueWmH08Unh6NvoVuCtPAJ5egEjHUiszCWUC4cQvfiYTRmeEiQFj7BnnTRV3dR9WMheT0hvJo63H01O8icfi/fgOJQ9C0eSpAWPuEanUTrgowwrlD3VW+9mWi86pMgLXxCPSc9JT+D1ESLnB4uQi7UfTUjOZEpUVoHXYK08An26Ky+LGYzZaPdRdW7HM6QvKYQAM22LkwmSB/hqSz+zPLUQT/Q1Bay1wwFCdLCJ9hTWfyZWZxLp8NJVW30FlUXxmPt6CIzORGzeWSnsvjTPS99LGSvGQoSpIWPtaOLlAQLSQmWkL2mUQ77FMYSilrSfXVvD4+uxUMJ0sLH2tFFdmpoO/7MMd7t4RKkReiEou55X9E6oDB0kLY7nByMsvkjI2sKw+jEt2oe5xketS0dvKEdjLpFKSNyuVy+Q2hDaWJuOtkpiVGX4WHoIH3nO9spue0F3qw6pHdTYoLV1hnyjp+Xlsy47LS4z5X+9evb+MJDb/Hoxt16N8XwbHYnXQ5nSOp29GQymZg1Jpeq2mbau+whfe1gGDpIV+xvwOF08Y1/r/MteomRsTuctHUGfyqLPzPH5HKgqY36VlvIX9sotKPu7cbf+88GdtU169waY7N2hHbTVU8zi3NxulxURtGgwtBBuqaxBYC9ja3c9MpmnVtjbM220FUV62uWHExLTWMrZpOJFpudq59ai11SEkcs1HU7eorG7eGGDtLVDS1Myc+kbHQOD66r4i2Z9hixUB2d5U+0F1UPN4fTSU1jKwvG53PpnBLW1dTyu7cq9W6WYTW1u/tqqLaE9+RdPIymAYVhg7S1o5OGtk6mFmbyj8uWYDGbZNojCGEdnRjgROZwOmRtp8vhpCQvg/svWsj4nDR+88Y21tfU6t00QwpnXy0bnYPZZIqqAYVhg3R1QysAJXkZlI/P56ZTZ1DT2MrNr8q0x0iEuhZCT9MKs0iymON28bC7r6aTk5rEo1csxelycdWTa2VQMQLh7KtpSQlMLYiu7eGGDdJ7Gtzz0ZPyMgC45fRZzBidzQMfVPH2Dpn2GK5Q10LoKcFiZsboHCoPHYvLudhqz9rJRE9fPWVKET9aNoNd9c18/8WNejbNkEJ5Kos/88bl0dTRFTW7ZIcM0kopi1LqH0qptUqp95VSZZFo2FBqGnp3/OQEC/+47ETftEeLTUYowxHO0QnA3LF5dNgdbD9yLCyvH828fbUkN8N326++MJt54/L454ZdvLBtr15NM6RQ1z3va0nJKAA+qI6O6ahARtLnAGiadiJwC/D/wtqiAO3xdfx0323zx+fzo8/NoLqhlZ+8ukWvphmSd54vFEdn+bOopACIno4fST2nO7ySEiw8fsVSUhMtXPfsuqgr6hPNQl33vK/FJYUAUbNmMGSQ1jTtP8C1nn9OBI6FsT0Bq+4z3eH18zNmMb0om/vXaqzeeViPphlScxinOwAWT/R0/Oq6sLx+NPP21Ym5vfvqcUXZ3HlOOQ1tnVzz9FqczuiYA4124ZyaA/cu2fSkBNZFyYAioHJnmqbZlVKPAl8CLhrq8ZWV4U8v+vRALakJJqo/q6TG1LsS1o9m5/G1N5pY8dhqnj5rCqkJkZ16r6ioiOj7hYK25ygAh/fuocJ2NOSv73S5yEw0866235CfTzC0w/UUpCawfdvWfvctSHZx4pgM3tpxmIdWrWHB6PT+LxBGRvwudu1zrznt372DioZ9YXmP43OT2HS4idXrNpCZFLqCYyMRcE1KTdOuVkrdBHyolJquaVrrQI8tKysjOTk5JA30x+VyceSFHUwpyGb+/Pn97i8HttlSuPvdTzmYXMglc0rC1pa+KioqKC8vj9j7hUr6/o1AHfNnzWDeuPywvMfizU28rh1kgppBYUZKWN4j2jicTo488ykLxhcM2C++Zc5n7ZPv48geRXn5cRFrm1H7arL2PtDIonlzmJAbnl9qnz9qYdORj+nIHcuy48aG5T16stlsAw5uA1k4XKGU+onnn22A0/NHN8faO7F2dDExb+Av6LRpxQDsiJIV2mgX7oVDgCVRNtcXCQeb2rE7XYP21amFWQDskO3iAYlEX/XOS0fDlEcg8wAvAHOVUu8B/wNu0DStPbzNGlzf9Dt/SgsyAen4gfJ2/HDs4vJaNNG9eBgNHT9SvOl3JQH01Z3SVwMSjsMp+oqmvjrkT+mZ1rgkAm0JWM+NLAMpyc0gwWySYjYBaorA6GThxAJMJlhfEz+Lh96+OnGQy/Kc1CQK0pPZKVd9AbHaukhPSsBiDt9aU25aMtOLsvlwbx12h5MEi35bSgy5mcW7Wj5YkE6wmCnJy2BHnXT8QDR3dJFkMZMcwlNZ+spKSWJGUQ4b99XFzaaWQPoquEfTexpa4uZzCUZTexfZYRxMeC0uKaTFZqfy8LGwv9dgjB2kc4fu+LUtNpraOyPRLEMLRxF1fxaVFNDW6YibOh4DpYr2VVqQhd3poqZxwPV44RGOuuf+RMu8tCGDtG8jyyCLMSBzfcMRjuOI/FkUZ/nS3nK6Q2UhdK+hyJXfUCLVV70L3XpvwDJkkK5pbCE7JZHctMHT/KYWeFfNpeMPJRwHe/rj7fjr4iTDo7qhlTFZqUNOI3mDtKyhDM5md2Czh/5UFn+mFWaRl5YkI+nhcrlcVDe0DjnHB1BaKB0/EE6ni+YITXdES8ePBLvDyb5jgfVVScMLTHMY6573ZTKZWDSxkD0NLRyy6rdt33BBuq7VRmunPbAgLWl4AWnpDG/djp5MJhMLPR3/SLOumZxhd9DqyZEOYMOFTM0FJpy1pP3xXfnpOD1nuCBdHeB8NEgaXqDCXQuhr8VRlIMaToFmdoCk4QUqEhtZeoqGxUPDBelANrJ4SRpeYMJ5dJY/vsXDGM+X3jOMIA2ShheISA8oFozPx2I2SZAejhrf5oDAO76k4Q0u0peQJ0wowGwyxfz28JphB2lJwxtKpPtqenIic8bkUrG/HpvdEZH37MtwQdo3ks4PPEiDzPUNJtKXkJkpicwszmHj3no6der4kVDd2L+O9GAkDW9ovlNZItRXwT3l0elwsnl/Q8TesyfDBWnfUUQBVr+SNLyhRfoSEtxTHh12Bx9F0YGfoVbT0ILJBONzhhekZQ1lYHr0Vb3npY0XpOtbyEtLCnj+VNLwhqbH6MR7UkssT3lUN7YwJist4K32koY3tHAfneWP3sdpGSpIu1zu+bpAFg29JA1vaM0RnueD7pNa9ExtCid3jnRbr+PdhiJTc0Nr6nCvLYWzWmNf43PSGJudxrrqWl1OEDdUkD7S3EGH3eE7fDYQ3jS8nbXS8QfSXaY0ckG6tCCTgvTkmB1J729qw+F0URLg2glIGl4gIr1+Au7c/sUlhRxubvelVUaSoYL0cNLvvLxpeDvrpeMPxDs6iVQKHng3tRRQ09jKwRg8hDXQImB9SRre4CKd3eGlZx0PQwXpYDq+pOENTI/RCcR2HQ9fHekAMzu8JA1vcHr1VT0XD40ZpIdxCQky1zcUPVbMIbYr4nmr341kQAGSjTSQ7lNZIttX54zJJSXBIkF6KL6jiIZ5+KSk4Q1Or0tI726uWJyXHs6W8J4kDW9wVlsXqYkWEiN8UkpSgoUFE/LZduiY7xdFpBgqSO+pH2HHlzS8QTV3dGExm0hNjOzR9enJicwq1nc3V7jUNLZ6cqTThvU8ScMbXKRqSfuzeGIhTpeLDXsje+VnqCBd09jKqIwU0pKGdwClpOENzltL2mQyRfy9F00swGZ3suWAPru5wmVPQwvjstNIGuZxZL6+KhkefkWq7rk/i3VaQzFMkHY4ndQ0tga8xbYnScMbXKSOzvJnUYl3Xjp2pjy6HE72H2sb9hUfdKfhyVWff5E6OsufxTpleBgmSB+yttPlcI6o40sa3uD0voQEWBdDFfH2H2vF6XIFXASsL0nD88/ucNLW6dCtrxZmpDC1IJP11bWs2X0kYtliw5s30JE3pWm4q+VepQWZvPbZQZraO8lOjVw+cLRzuVy6XkJOzs9gVEZKTI2kh1tYqa/SgizW19RR09jKFM/0h+jeGRvpzI6eTikt4uH1O1n2l9cBdw2hWWNymT0ml5nFuZwwoWDI8yyHyzBBes8I0++8eqbhlY/PD1m7jK6t047T5Ypo3Y6e3EcUFfDS9v2ceM8qFk0sZFFJIYsmFDA+xJ09UryZHcGMpMGdjSRBuptvZ6yOg6w7zyln6aQiPj7UyEcHG/n4UCMvb9/Py9v3A2Axm3ju6lM4t2x8yN7TMEF6pHmnXj3T8CRId9Mr/a6nG06ZzoGmNjbuq3cfBPDepwCMzU5j4cQCPjdlNN9YPDXiaVcj5a15PvKRtGdAUdsMx4WsWYbXpFM+f09ZKUmsmD+5121HmtvZdrCRrQca+eX/PuKaZz5g841nDat8xWAME6S96XeB1pHuy5uGJxtaetNrB1dPp0wpYsP3z6Kt007F/nrWV9exfm8t66vreGHbXl7Ytpe9x1r5/dnzdGvjcIykfEFP3jS8nfXSV3uKhr7qT1FmKqerVE5XY8hNS+K6Z9dz+eNrWH39GcPO7vHHMEHaO5KeEGBt3r5k16F/3bsN9Z+nT0tK4KTJRZw0uQhwz5fvaWjhCw++xV2rt/OF48awrHS0zq0cWk1jC2aTiXFB9lVJw+stGq76hvK1haW8u+sIT23ew8/+u5U7zy0P+jWNcf2Ie3QyJiuVlBFuuJA0PP+idXQC7vnqyfmZPHbliZhNJr7y9FqOGaD+SnVDC+Ny0kY8PSNpeP5ZPYXA9Fo/CYTJZOL+CxcyrTCLP777CS9v3xf0axoiSPtq8wYxxyNpeP55RyeRLFM6XIsmFnLLaTPZd6yNbz//od7NGVSn3cGBpvZhly7oS9Lw+tOrxsxwZaYk8q+rTiYlwcI1T3/A3iCLZRkiSB/w1OYN9MisgUg1vP6a2iN/KstI/PS0mSycUMDTW6p5avMevZszoP1Nbe4c6SAXjaQaXn96nMoyUrPG5HL3+fNpbO/kisfX0BXEL1tdg7S1o5PHNu3irL+9xZVPrMHh9P+DDPfw2YHIvHR/zTZvLeno7vgJFjOPXXki6UkJfPv5D30ncUdae5ed9i77gPePtJxuX1INr7/uOWn9108C8Y1FU7l0Tgnramq55b9bRvw6EQ/SnXYHL1Xu47LH3qP4F89xzdMf8NpnB3lmSzX3rvnM73N8tXmD7PhSDa8/o1xCgnt0eff582nq6OKaZz4Y8Jd6qLlcLtbuOcrX//UBRT9/ltl3vuKbH+3Lt+kq6JF0jzQ8ARirr4J7fvqBixcytSCTu1Z/wquf7O/3mPYuO3sbWwddf4hYdkfFvnr+tn4Hz31UQ6NnumFaYRZXzJvEGaqYc//+Dres2srZM8ZR6gmmXtVBpjR5SRpef9G8cOjPV08o5dVPDvBi5T7+uPpTfnTqjLC91yFrG49v2s0/N+yiypNpkZ2SyK76Zm58cRMPX7qk33O6S5QGNzUnaXj9Ga2vgnvU/8xVJ7PknlVc/dRaFk4soK7VRm1LB3WtNlo73VdlxemJvHjeVL+vEfYg7XS6+N1bH/PL/23D6XJRnJXK9084nsvnTmLeuDxf5bU/f2kBVz7xPtf+ez1vfvN0zObuimy+OtKhGp1IkPYx2iWkyWTioYsX8WFNHbe+tpXTphUzd1xeSN/jzapD3LvmM1Z9dgCH00VygpnL55ZwzQmlLJ08iiV/XsU/N+zivLLxnDOj986yUPdVScPrZoQUPH/mjM3jni+dwPXPf8hrnx0kJcFCYUYyalQWBekpFKQnU5qbOuDzwxqka1s6WPHk+7xRdYhx2Wn89eJFfF4VYzH3n2W5dE4J/9pSzUvb9/Pg+iq+tUT57qtucOedDrc2b1+ShtefEUcnBRkp/P2yxZz1t7dZ8dT73Ly8jPYuBx1ddto6HbR3OWjvsmN3urhsbgkLJhQE9LoOp5Nb/ruVO97ZDsD88fl85YQpXDanhNy0ZN/jHrniRE64+79c9+x6lpSMIj+9+76ahlYsZhPjsoPrq5KG158R+6rX1xdN5aLZE0kwm0hPSuhXFthms1FZWen3uWEL0u/tOsKVT6zhoLWdM48fy6OXn9irM/dlMpn4y4ULeW/3UW5+ZTNnHT/OV6ikuqGFsdmpQe/ekTS8/ow2z+f1hePGcv2Jir+s1bj6qbUDPu7e9z/jplNncOvpswbtP/WtNq58Yg1vVB1iakEmj1+5dMDgPrM4l199YTY/eXUL1z//Ic9cdbLvvmpPHemEEGxhLy3IZNO+euwOZ0hez+iaO7pITjCTHIJdfHrIGWHNkbAE6b9+oPGjV7dhMsHvzprLD5fN6DV9MZAx2Wn84dz5fO1fH3Dds+v57zdOddfmbWrjpEmjQtI2qYbXW7OtC5MJ0od5kEI0uOvcchaVFNJi6yI1MYG0JAupiQmkJlpIS7RwpLmDG/6zkd++Wcmrnxzgn5cvYfaY/lMjWw80cOEjq6luaOWs6WN57IqlQ/6H+sGy6by8fT/PflTD+Vv2cNncSe4caWsbJ3t2TAbLWw2vurGl3zpNPGrq0K+WtJ7C8j/zrnc+oTgrlae+fBJLJw8vuF69YDL/2lrN69pBHt24m5Mmj8LlImTFSnqe0jJfCi1h7egiMzkxoF+i0SYpwcIV8yYN+pjPlY7mhy9v4uH1O1n4p1X8/IxZ/PhzM3wj06c27+Haf6+jvcvBz8+Yxa2nzwros7CYzfzz8iXM/cMrfPv5DZw8uYj2LgcuV/Dz0V4911AkSHtPZYm/gVVYrqFOnlJExY1nDTtAg3va48GLF5GRnMAPXtrkOwUh2LxTL28a3k5JwwP0PY4oEjJTEnnw4sW88vVTKUxP5tZVW1l672tUHmrkBy9uYsWT75NoMbPymmX84vOzh/XLqrQgizvOLqexvZNrn13fXU43RCVWJQ2vNz1PENJTWEbSf79kMampKSN+/oTcdG4/u5zrn/+Q763cAIRwdCJpeL1YO7ooyhz5d2UUZx4/lm0/Oofv/WcjT1bsYfZdrwBwfFE2z3/lFNSo7BG97nWLp7Hy472s+vSAb0dcqK76JA2vm8PppMVmj8sgPehIWimVqJR6XCm1Rim1QSl1bkAvGoJL52sXTWXZlCJfDdlg8069JA2vm8vliqvRSW5aMo9dsZTnvnIK47LTuHj2RNZ998wRB2hw9/W/X7qE7JRE3t9zFAj9dIek4UGLzZ1PrOepLHoZarrjy0C9pmknAV8A7gt/k9zMZhMPXbKYVE/Vu1B1fEnD62azO+lyOOOu439p5gSqb72AZ646OSQ1S8bnpvOnLy3w/TtU0x2ShtfNyOl3wRpquuNZ4DnP303AwEULwmBKQSaPXbGU9/ccCbq4kpek4XXzbm2Ox47fN081WCvKJ/NW1WE27atjbJA50j1JGp6bUTeyhMKgQVrTtBYApVQm7mB9SyAvOlBS9khMBCaOM7N58+aQveaoRBc762y8u24DGUmhz7msqKgI+WuGw75md5DuarUaps3R7DvTkmHaWD7aOvJiOn3lmrqwO128suZDxmf2zmxwOF20251B9WGjfO/batsAaDtWb5g2h8qQC4dKqfHASuB+TdOeCuRFy8rKSE4eeOOK3ubtdfDBIY30cVN85x26XC7aOu3UttqwdnRxfFH2iIq2V1RUUF4e/GkMkWDaXw/sZPLYYsO0Od4srE9kVfVHPFHdSXKCnaPNHRxt6eBISzt1rTZcLvjT+fP5zknHD/u1jdRX6z47CFQzbeJ4ystn6t2ckBvxjkOlVBHwOvBtTdPeCkPbdOFNw7v23+uwmE3UtnRQ22Kjw+7wPeZHn5thmDP1Rqopjuf5jGLO2FwAVn6813dbTmoSRRkpHD8qmw/31nH/2iq+vfS4kE/hRBOZ7hjYT4Fc4Fal1K2e287UNK09vM0KryWTCjGbTHx0sJH0pAQK0pMpK84hPz2ZwvQUXv1kP49s3MlvzpxjmBOqRyKeF2OM4uzp4/jgu18gwWymKDOFURkpvba3X/H4Gv61tZoNe+tYOLFQx5aGlxGOzgqXoeakvwd8L0JtiZh54/Kpv+0SEi1mUhP7fwTfW7mB+97X+J92kLOnj9OhhZHhDdLxlt1hJCaTadDgu2K+e4fuExV7YjxIe495kx2HcSMrJclvgAZYMX8KAI9v2h3JJkWckY4jEv6dPq2YoswUntmyh84e03WxJp6v+uI2SA+mfFwe04uyeXn7PhrbbHo3J2ysBjk6SwwswWLminmTaGjr5L+fHtC7OWFj1GqNoSBB2g+TycSK+ZOx2Z08+1GN3s0Jm3ju+LFkxfzJADxeEbtXfjKSFv1cMW8SJhM8EcNTHvHc8WPJ7DF5zCrO5dVPDlDfGptXfvGc3SFBegDjctI5tXQ0a6trY3ZbrtGOzhID+3L5JLocTv69tVrvpoRFPA8oJEgPwruA+ESMXkbGc8ePNZfPm4TZZIrZxe7mji4SzCZSDHoqSzAkSA/iSzPHk56UwOObduNyufRuTsg1+1LwjHcqi+htTHYap00r5sO9dWhHm/RuTshZbe5TWWJ5w85AJEgPIiM5kQtmTWBPQwtr99Tq3ZyQs9q6SE9K8HswsDAe7wLikxV7dG5J6Fk74qekbl/yv3MIK8q9K+e7dG5J6MVzx49F55eNJyM5gScqduN0xtaVX7wenQUSpIe0rLSIcdlpPLu1hvauiFZqDbtYPzor3qQlJXDRrInUNLayxnMAQSyIt8Mp+pIgPQSL2cyV5ZNo6uji5e379W5OSFk7ushOjc+OH6t8OdObYufKr7XTjssVn3U7QIJ0QL7snfKIoZXzTruDDrtD6nbEmJMnFzEhN53nPtpLW2dsXPk1+ep2xGdflSAdgOmjc5g/Pp//aQc50mzoAoA+3el38TnPF6vMZhNfLp9Es62LFyv36d2ckIj3VFEJ0gFaUT4Zh9PFM1uq9W5KSMTzDq5Y57vyi5H8ft8xb3F61SdBOkCXzi0hwWzisY2xMdcX76OTWKZGZbNwQgFvaIc4ZG3TuzlBi/e+KkE6QIUZKZx5/Fi2Hmxk28FGvZsTNCmuFNtWzJ+M0+XiqRjImY73qz4J0sPgXTl/NAZG0/He8WPdJXNKSEuy8Md3P6XF810bVffhFPG5fiJBehjOnj6O4qxUHvigir2NrXo3Jyi+ji9BOiblpyfzw2UzONzczl3vfKJ3c4IS74dTSJAehuQEC//vi3PpsDv46aub9W5OUGS6I/b9cNl0irNSuWv1dvYfM+6gIt6v+iRID9OK8smUj8vj6S3VrKs2bj2PeB+dxIP05ER+c+Yc2rsc3Lpqq97NGTFZOBTDYjab+ON5CwD4wYubDFsjQY7Oig9XzZ/M7DG5PLZpN5v31+vdnBGJ96s+CdIjsHTyKC6ePZEP99bx9BZjrp7H++gkXljMZu48pxyAH71UYciSu/HeVyVIj9Dvz55HcoKZn7y6hVYDrp7H++gkniyfVsxZ08eyetcRQ9af8c5Jy7ZwMSwleRnceMp0DjS18YfVxls9l6Oz4ssdZ5djMZu46ZXNdDmcejdnWKztnZhNJtKS4vNwCgnSQbjp1DJGZ6ZyxzvGWz2XhcP4clxRNtctnkZVrZUHP6jSuznD4i1TGo+nsoAE6aBkpiRy2xfdq+c//e8WvZszLNaOLlITLSRapAvEi5+fMYuslER+9fpHNLYZ51TxeD+cQv6HBunq+VOYOzaPJyv2sGFvnd7NCVi8d/x4VJiRws9Om0lDWye/fbNS7+YELN4Pp5AgHSR3St58AG78zybDrJ43xXnHj1ffXnocJXnp3Pv+Z+xv7tS7OUOK91NZQIJ0SJw8pYgLZ01gXU0tb9RY9W5OQLynL4v4kpJo4XdnzaPL4eSeLUf0bs6Q2rscOJyuuC5fIEE6RG4/ex5JFjP3bDniW5SLVnaHk7ZOhwTpOHXx7IksnTSK1fubeXl7dB8MIKmiEqRDZlJ+JjedWsbRdju/ev0jvZszqGabt6pY/Hb8eGYymfjrRQtJMMN3XtgQ1VXy4r1uB0iQDqmbl5cxLiORe9Z8xtYDDXo3Z0BydJaYPjqHFccXsO9YG794LXoHFU3tUr5AgnQIpSRa+PGCYhxOF996bj0OZ3RuGmiUji+Aa2YUUFqQyT1rPovauh6rPj0AwJT8TJ1boh8J0iG2qDiDS+eUsGFvPX9bv1Pv5vj1pOe0jrlj83RuidBTSoKZ+y9ciNPl4pvPrsceZTsRrR2d3LPmM/LTkn0HbsQjCdJh8Mfz5pOdkshPX90cdaeL17faeHBdFWOz07iyfJLezRE6Wz6tmC+XT6ZifwP3r9X0bk4vD3xQRWN7JzeccjwZcbx+IkE6DEZnpfL/vjiXpo4ufvhShd7N6eWeNZ/S2mnnh8umk5xg0bs5IgrcdW45eWlJ3PraVvZFyYlDbZ12/vjuJ2SnJHL9iUrv5uhKgnSYXLt4KgvG5/PU5j28WXVI7+YA7svH+97XKMxI5uuLpurdHBElCjNSuOOcclpsdr67coPezQHg4fU7qG2x8e2lx5GdGt8L3BKkw8RiNnP/RQsxm0x8+/kP6ehy6N0k/rq2imPtndxw8vFxW1FM+PeVBVM4ZUoRL23fz8qP9+raFpvdwV2rPyEtycJ3TzpO17ZEAwnSYTRvXD7fOUmxo66ZO97Wt1ZCW6edu99zXz5+a0l8Xz6K/kwmE/dfuJAki5nvrdyItUO/LeOPbtzFgaY2vrlYUZCRols7ooUE6TD71efnMDY7jd+9VcmOWv22jMvloxjKcUXZ3Ly8jANNbfzkVX2qOnY5nNz+diXJCWZuXHa8Lm2INhKkwywzJZG7z59Pp8PJdc+up9Me+WkPuXwUgbp5eRnHF2XzwAdV/PK1jyJeMOzpLXuobmjlawunUpyVFtH3jlYBBWml1EKl1OowtyVmXTBzAufPHM+7u45w6WPvRfxkjMc27eZAUxvXLZ4ml49iUMkJFl79+qlMzs/gN29s4+evbY1YoHY4nfz+zUoSzCZ+9LkZEXlPIxgySCulfgw8DMj/7hEymUw8ceVSlk8dzUvb93PFE2siFqjtDid3eC8fT5kekfcUxjYxL4O3v3UGpQWZ/PbNSn766paIBOrnt+1Fq7Vy1fwpTMhND/v7GUUgS/y7gAuAxwN90cpK4xQUD4eKCv+50b+Ym8OxJisvbNvL2fe9zK+XjCXBHN4jgV7b08Tu+hYunJrLoZ2fEh3JgCJaDNRXAf60dDT/95aNO97ZzoFDh/ju3KKwHWHldLm4ddVuzCY4q2jwdsWbIYO0pmnPK6VKhvOiZWVlJCcnj7hRRlZRUUF5efmA978zZw5nPfw2b+4+SmF+Ho9ecSIWc3iWBpxOF19562UsZhN3XLKMkryMsLyPMKah+irAB7Nncdpf3+DJzxrILxzFH88rD0ugfqlyHzuPfcoV8yZx/rLFIX/9aGez2QYc3MrCYYSlJyfy8tdOZUlJIU9vqearz6wLWyGmF7fv45MjTVw5b5IEaDEixVlpvP1/ZzBjdDb3rPmM767cGPKpD5fLxW/f/BiAnywvC+lrxwIJ0jrITEnk1W+cysIJBTxRsZtr/70epzM8Hd9kcq/YCzFSRZmpvPWtM5hZnMP9azW+/q91ITvI9pPDx7jmmQ/YuK+eC2ZNYPronJC8biyRIK2TrJQkVl27nPnj83lk4y6+/u91IdtAsGlfPRc+8i6b9zdw4ayJqFHZIXldEb8KM1J485unM2dMLo9s3EXpb//D7978eEQHBrhcLlbvPMw5D7/NzDtf5vFNu5lWmMVvvzg3DC03voD2BmuaVg0sCm9T4k92ahKvXbucMx58k0c37uLVT/bz09Nm8s0l04Zd/MjlcvHe7qP87s2PecNTK+SECfncfva8cDRdxKGCjBTe/+4XuP99jd+/Xcktq7Zyz5rP+MnyMq5dPI2UxMH7rN3h5IWP9/KH1Z+waZ+7fvWJJYXcuGw6584YjznMi+hGZQrl/FJFRUUJsEcWDgdfjOmr1dbFPWs+4453tmPt6GJCbjq//Pxsvlw+achFRZfLxX8/PcDv36rkg+paAE4tHc3Ny8s4derosK3GC+MbSV/1snZ0cve7n3L3u5/SbOtiXHYat54xi6sXTKHL4aSmsZWaxhZqGlvZ29hKTUML62pqqW5oxWSC88sm8INl01lcUhjin8qYeiwcTiovL6/ueZ8E6RALpuPXt9r4/VuV/GXtZ9jsTqYXZXPbF+dy7oxxmEwmmto72dPQwp6GFqobWthT38Ka3UfZdqgRgHNmjOPm5WUsmigdXwwtmL7qVdfSwZ3vbOe+9zU67A5SEy20D1BMLDXRwlXzp/D9U45namFWUO8bawYL0lIKLYrkpydz57nlfPek4/j169t4ZOMuLvjnaiblZdDU0UlDW/85a7PJxOVzS7hpeRkzi3N1aLWIZwUZKdx+TjnfO/l4fvvmx7y3+wjFWWlMzE1nYm46E3IzmOD5+9jsNBItsgw2XBKko9D43HT+duliblw2nVtXbeXNqkOMyUrlhAkFTMrLYHJ+JiV5GUzKy2BKQYYcKCt0NyY7jfsuXKh3M2KSBOkodnxRNs995RS9myGE0JFcewghRBSTIC2EEFFMgrQQQkQxCdJCCBHFJEgLIUQUkyAthBBRTIK0EEJEsVDnSVsAOjv1Ow4+GthsoSnjKES4SV+NDj1iZr8qVaEO0sUAVVVVIX5ZY4n348OEcUhfjTrFuI8s9Al1kN4InAQcAvxXWRFCCNGXBXeA3tj3jpBWwRNCCBFasnAohBBRTNcCS0qphcDtmqYtU0rNAR4A7EAV8HVN05w9HmsG7gdmAzbP/TuVUouAP3ue97qmab+K8I8RNfx9Rp67HgCSPLddpmlafY/npAJPAKOAZuBqTdNqlVLnAD/H/bn+Q9O0v4WhvX2//3txT5PZgKs0TTsy2M8Wye9f+mpoSV8N/PvXbSStlPox8DCQ4rnpF8CvNU1bCiQDZ/V5yvlAiqZpi4GbgT94bn8AuAJYCixUSsXzQWnn0/8zegi4RdO0k3F/VtP6POdbwMeapp0EPAbcopRKBO4GzgBOAa5VShWFsqF+vv8/A9/RNG0Z8AJwUwA/G0Tg+5e+GhbnI301oO9fz+mOXcAFPf69BchTSpmATKALQCn1mFJqAu4f7DUATdPWA/OVUllAsqZpuzRNcwH/A06L4M8Qbfp+RktxjzrOUUqtBhYDGwCUUq8rpZJ6PgdYhfvzOx7YqWlao6ZpncD7wMkhbmvf7/8yTdO2ev6eAHR42hkN37/01dCTvhrg969bkNY07Xk8ndtjB3AP8ClQBKz2PO4qTdP2AllAU4/HOzy3WXvc1gzE89HYfT+jLGAG8CbwOSAXuBpA07QzPJ2653O8n1/f1wn559r3+9c07RCAUmoJ8G3co6Oo+P6lr4aF9NUA2xlNRf//DJykadp2pdT1uC8Rru9xvxX3qMXL7Oe2TOBYKBs1wNxZAYPMLSmlCoCngFTgIHCNpmltSqlvANd5nnebpmmvhLKt9P88rECipmnveNr1CnA68I8BnuP9/ML+ufqjlLoU+BlwlqZptX3u1uX7H4D01eBJXw2wndGU3dFA92+ag7h/k/a0FvgigGcC/mNN06xAp1JqiufS8/PAmhC363z6zy8NNbf0c+Apz9zZFuA6pdRo4LvAiZ52/k4pFerTevt+RhuAKqXUSZ77Twa2D/Qc4Ezcn9+nwFSlVJ7nMvNkYF2I29qLUurLuEclyzRN2+3nIXp9//5IXw2e9NUAv/9oGkl/HXhGKWUHOoFvgHueB7gFWAmcrpT6ADAB13ie903gSdzJ4K9rmvZhiNvVa35JKXUycFjTtF2e9v0POE0pVQM8rGnaBZ7n/Nbz/FWev+8C1mqaZgNsSqmdwCz8JK8Hwd9nlAz8RSmVAOzBs8ihlHodOBv4K/CoUup93J/7FZqmdSmlbsQ9b2bGvWJ+IITt7EUpZcE9fbAXeEEpBfCupmm/iILv3x/pq8GTvhrg9y+bWYaglHoYeF7TtFWefzuBLZqmlXv+/VVgsqZpt/R4zk5gpqZp7UqpybhXoh/w3ObteI8Bj2ma9mZkfyIRq6SvxqZomu6IVn3nko7hnr/z8je3FDVzZyKuSF+NQRKkh9Z3fulDhp5b8jd3tgE4SSmVopTKxp06JNVtRChJX41BMt0xhB4r5rPonl/KAf5E99zSz5RSeXjm+ZQ7mf5R3COQOtxzZ62eFfNrcf9y/K0ntUeIkJC+GpskSAshRBST6Q4hhIhiEqSFECKKRVOedNQYYOfWTOAuYJ/nYb/QNO1dP88dA+zEXaHr2ci0WMSrAfoqDFJNrsdzU4Bq4A+apt0ZkQaLYZORtH/n03/nVjnwY03Tlnn+9AvQHtfgTna/foD7hQil8xl+NTmvC4FngK94gr2IQjKS9q/vzq35uEclc5VSN+BOUbpJ0zR7zyd50pxW4D5C7EWlVJmmaZVKqa/g/s+UibuWwq81TXteKVWJux5xp6Zpl0XkJxOxpm9fXYr7+LpzlFK/BzbRv5Sm19eBG3BXn/si8IpSahnumhROYDTwkKZpf1HuynRHgTzg85qmyfF4ESK/Pf3zV8XqHeA7uGsDZODe4tnXctz79GtxF4bpOZpOx10w5gzgj56trxnAbyRAiyAEXE2uJ6XUVCBd07SP6N9XxwLnAouA7yulRnluf1rTtNMkQEeWjKT981fF6iFN044BKKVeBC5USt2GeyQD7gD9DWCSUuo13CPv2Uqpmz33v6u5T+84opRqBAo9t2th/UlErAuompxSKg24yPOYK3GPotM9fdUELFFKlXru/8BTtwPP1d4Uz+3SV3UgQdq/tcA5wL+9VayAbUqpJZqm7ccdkCs0Tbvf+wTlLvm4CHdtBIfntr/hHsVYcc9p49k8kIX70hHcl5VCjFTfvroBKFRKnaRp2ho81eQ0TfsLcB+Acp9mchkwV9O0Bs9tPwP+D3gJmOMpJJSMe1S+w/Ne0ld1IEHaP39VrCbgrnrVDnwC9D1H7SrcxW16Xgr+DXfBmtuB0Uqpt3AX+v4/TdMcngpaQgQj4GpyPZyDe5DR0OO2fwIf4Z4mScRdES8fdy3pOumr+pEdhxHgWTg8TtO0m4d6rBB68iwcflPWSaKHLBwKIUQUk5G0EEJEMZmTDoBnoeUfQAnu+b7bcM9LPwK4cJdxvF7TNKdS6hfAWbjPhrtB07QNniOLXqF7Aeavmqb9K6I/hBDCkCRIB+bLQL2maSs8ZR63ev7comnaaqXUA8B5nmOJTgEWAuOB54EFuDM7/qhp2h/0aLwQwrgkSAfmWeA5z99NuEfJ5YB3a/gq3JtUNNw1e13AXqVUglKq0PNYpZQ6D/do+gZN05oj+QMIIYxJFg4DoGlai6ZpzUqpTNzB+hbA5AnGAM24U+v67v7y3r4B+JGnlsJu4BcRa7wQwtAkSAdIKTUe99bwxzVNe4reif1DnQ23UtO0Cs9tK4G54W6vECI2SJAOgGeX4Ou4iyr9w3PzFk9OKXSfDbcW+LxSyqyUmgCYNU2rA/6nlDrB89jlQAVCCBEAmZMOzE9xF6q5VSl1q+e27wH3KKWSgE+B5zy7CNcA63D/AvQWrfkWcK9Sqgs4jPvsOCGEGJLkSQshRBST6Q4hhIhiEqSFECKKSZAWQogoJkFaCCGimARpIYSIYhKkhRAiikmQFkKIKCZBWgghotj/B9vH3cPc4AiMAAAAAElFTkSuQmCC\n",
"text/plain": [
"