Skip to content

Instantly share code, notes, and snippets.

@enakai00
Created December 1, 2021 13:07
Show Gist options
  • Save enakai00/f31aa0e553ca729359768c740487a7d4 to your computer and use it in GitHub Desktop.
Save enakai00/f31aa0e553ca729359768c740487a7d4 to your computer and use it in GitHub Desktop.
Logistic regression example.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Logistic regression example.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/enakai00/f31aa0e553ca729359768c740487a7d4/logistic-regression-example.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VJO3PPzqsq8d"
},
"source": [
"実行に必要なモジュールをインポートします。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "gB5UUoAXIVmC"
},
"source": [
"import numpy as np\n",
"from numpy.random import multivariate_normal, permutation\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import tensorflow as tf\n",
"from tensorflow.keras import layers, models\n",
"\n",
"np.random.seed(20190220)\n",
"tf.random.set_seed(20190220)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "yz2h7_8St1wi"
},
"source": [
"学習データを乱数で生成します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ASgzWK5AjWvn"
},
"source": [
"n0, mu0, variance0 = 20, [10, 11], 20\n",
"data0 = multivariate_normal(mu0, np.eye(2)*variance0 ,n0)\n",
"df0 = DataFrame(data0, columns=['x1', 'x2'])\n",
"df0['t'] = 0\n",
"\n",
"n1, mu1, variance1 = 15, [18, 20], 22\n",
"data1 = multivariate_normal(mu1, np.eye(2)*variance1, n1)\n",
"df1 = DataFrame(data1, columns=['x1', 'x2'])\n",
"df1['t'] = 1\n",
"\n",
"df = pd.concat([df0, df1], ignore_index=True)\n",
"train_set = df.reindex(permutation(df.index)).reset_index(drop=True)\n",
"train_x = train_set[['x1', 'x2']].values\n",
"train_t = train_set['t'].values"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "txozw2MaFclz"
},
"source": [
"生成したデータを表示します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Hp4EnlqvToYN",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "9fddf951-a299-4c04-f9da-af154f67c8c3"
},
"source": [
"train_set"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x1</th>\n",
" <th>x2</th>\n",
" <th>t</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>11.148678</td>\n",
" <td>12.178698</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>8.628574</td>\n",
" <td>16.936525</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>6.751810</td>\n",
" <td>2.686665</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>14.613345</td>\n",
" <td>22.415744</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-0.582185</td>\n",
" <td>9.712311</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>8.720424</td>\n",
" <td>20.263025</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>14.689335</td>\n",
" <td>11.718604</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>15.174583</td>\n",
" <td>18.703856</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>18.932923</td>\n",
" <td>20.026993</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>10.199965</td>\n",
" <td>19.306527</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>8.047290</td>\n",
" <td>9.257321</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>7.973561</td>\n",
" <td>1.842595</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>9.367123</td>\n",
" <td>12.547001</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>13.379836</td>\n",
" <td>17.101564</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>10.050234</td>\n",
" <td>15.911195</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>21.531288</td>\n",
" <td>15.107301</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>9.636055</td>\n",
" <td>10.316380</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>5.415042</td>\n",
" <td>10.557410</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>15.189524</td>\n",
" <td>10.026291</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>8.816570</td>\n",
" <td>23.696075</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>17.037535</td>\n",
" <td>12.352113</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>11.378429</td>\n",
" <td>7.172675</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>23.073613</td>\n",
" <td>9.808894</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>14.247538</td>\n",
" <td>19.111286</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>16.194011</td>\n",
" <td>19.591581</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>21.138444</td>\n",
" <td>27.280888</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>17.428121</td>\n",
" <td>13.953785</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>16.275732</td>\n",
" <td>25.689385</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>13.915948</td>\n",
" <td>24.620724</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>11.609024</td>\n",
" <td>11.623596</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>13.652538</td>\n",
" <td>3.678494</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>3.424919</td>\n",
" <td>26.121595</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>19.663299</td>\n",
" <td>21.072943</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>3.977605</td>\n",
" <td>7.202972</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>3.360409</td>\n",
" <td>17.789434</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" x1 x2 t\n",
"0 11.148678 12.178698 0\n",
"1 8.628574 16.936525 0\n",
"2 6.751810 2.686665 0\n",
"3 14.613345 22.415744 1\n",
"4 -0.582185 9.712311 0\n",
"5 8.720424 20.263025 0\n",
"6 14.689335 11.718604 0\n",
"7 15.174583 18.703856 1\n",
"8 18.932923 20.026993 1\n",
"9 10.199965 19.306527 1\n",
"10 8.047290 9.257321 0\n",
"11 7.973561 1.842595 0\n",
"12 9.367123 12.547001 0\n",
"13 13.379836 17.101564 1\n",
"14 10.050234 15.911195 0\n",
"15 21.531288 15.107301 1\n",
"16 9.636055 10.316380 0\n",
"17 5.415042 10.557410 0\n",
"18 15.189524 10.026291 1\n",
"19 8.816570 23.696075 1\n",
"20 17.037535 12.352113 1\n",
"21 11.378429 7.172675 0\n",
"22 23.073613 9.808894 0\n",
"23 14.247538 19.111286 0\n",
"24 16.194011 19.591581 1\n",
"25 21.138444 27.280888 1\n",
"26 17.428121 13.953785 0\n",
"27 16.275732 25.689385 1\n",
"28 13.915948 24.620724 1\n",
"29 11.609024 11.623596 0\n",
"30 13.652538 3.678494 0\n",
"31 3.424919 26.121595 1\n",
"32 19.663299 21.072943 1\n",
"33 3.977605 7.202972 0\n",
"34 3.360409 17.789434 0"
]
},
"metadata": {},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 450
},
"id": "hD-HJuti3rqe",
"outputId": "3e9467e7-fa89-45a3-a32f-cba5cee4a6b6"
},
"source": [
"train_set0 = train_set[train_set['t']==0]\n",
"train_set1 = train_set[train_set['t']==1]\n",
"\n",
"fig = plt.figure(figsize=(7, 7))\n",
"subplot = fig.add_subplot(1, 1, 1)\n",
"subplot.set_ylim([0, 30])\n",
"subplot.set_xlim([0, 30])\n",
"subplot.scatter(train_set1.x1, train_set1.x2, marker='o')\n",
"subplot.scatter(train_set0.x1, train_set0.x2, marker='x')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fcbec84c690>"
]
},
"metadata": {},
"execution_count": 14
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fmnjQdqAvQRw"
},
"source": [
"確率 $P(x, y)$ を計算するモデルを定義します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "BakcuKxdQoSL",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d4604fd1-ab36-484d-e67a-3ee9be45532d"
},
"source": [
"model = models.Sequential()\n",
"model.add(layers.Dense(1, activation='sigmoid', input_shape=(2,),\n",
" name='logistic_regression'))\n",
"\n",
"model.summary()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Model: \"sequential_1\"\n",
"_________________________________________________________________\n",
" Layer (type) Output Shape Param # \n",
"=================================================================\n",
" logistic_regression (Dense) (None, 1) 3 \n",
" \n",
"=================================================================\n",
"Total params: 3\n",
"Trainable params: 3\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fBltXsSRvZn0"
},
"source": [
"バイナリー・クロスエントロピーを最小化するように指定します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "LlQCTsKKXkr5"
},
"source": [
"model.compile(loss='binary_crossentropy')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "6ZJDVflWv6bm"
},
"source": [
"モデルの学習処理を実行します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "R6aG8FEZSLdr",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "91a82051-72b4-4bd1-a649-a74f4fc14b45"
},
"source": [
"model.fit(train_x, train_t,\n",
" batch_size=len(train_x), epochs=5000, verbose=0)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7fcbeca53250>"
]
},
"metadata": {},
"execution_count": 17
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DrFqiUwcwSS4"
},
"source": [
"学習後に得られたパラメーターの値 $w_1,w_2,b$ を確認します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ffVp0em2Sn4U",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "54778ae0-aa2d-46b4-ed6a-5a0aece7f2a1"
},
"source": [
"model.get_weights()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[array([[0.10842396],\n",
" [0.20109653]], dtype=float32), array([-4.6493626], dtype=float32)]"
]
},
"metadata": {},
"execution_count": 18
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8vbl6mtdwi_z"
},
"source": [
"得られたパラメーターの値を用いて、境界線と確率 $P(x,y)$ を図示します。"
]
},
{
"cell_type": "code",
"metadata": {
"id": "EQCm_ZqJzV7T",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 450
},
"outputId": "7749ed45-3db5-49a3-e77c-d4e87ec14118"
},
"source": [
"[[w1], [w2]], [b] = model.get_weights()\n",
"\n",
"train_set0 = train_set[train_set['t']==0]\n",
"train_set1 = train_set[train_set['t']==1]\n",
"\n",
"fig = plt.figure(figsize=(7, 7))\n",
"subplot = fig.add_subplot(1, 1, 1)\n",
"subplot.set_ylim([0, 30])\n",
"subplot.set_xlim([0, 30])\n",
"subplot.scatter(train_set1.x1, train_set1.x2, marker='o')\n",
"subplot.scatter(train_set0.x1, train_set0.x2, marker='x')\n",
"\n",
"xs = np.linspace(0, 30, 10)\n",
"ys = - (w1*xs/w2 + b/w2)\n",
"subplot.plot(xs, ys)\n",
"\n",
"field = [[(1 / (1 + np.exp(-(w1*x1 + w2*x2 + b))))\n",
" for x1 in np.linspace(0, 30, 100)]\n",
" for x2 in np.linspace(0, 30, 100)]\n",
"subplot.imshow(field, origin='lower', extent=(0, 30, 0, 30),\n",
" vmin=0, vmax=1, cmap=plt.cm.gray_r, alpha=0.5)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fcbec6d5850>"
]
},
"metadata": {},
"execution_count": 19
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaQAAAGfCAYAAAAQ8aZbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXxU1d0/8M+5yyzZSYCQkBAIJMii7IvKprhW61aXtra1j7bYp/V52uepWqt1b22t3Wx/3Wi19WltK66oVURREQQFFFARISxhXwXClsyW8/tjJiEZkpncucvcmfm8Xy9fMpO55565Seabe77nfI+QUoKIiCjdlHR3gIiICGBAIiIil2BAIiIiV2BAIiIiV2BAIiIiV2BAIiIiV0gakIQQPiHEMiHEaiHEGiHEvbHnBwkh3hVCbBBCPCGE8NjfXSIiylY9uUMKADhbSjkKwGgAFwghJgN4EMAvpZRDABwEcIN93SQiomyXNCDJqKOxh3rsPwngbABPxZ5/DMBltvSQiIhygtaTFwkhVADvARgC4LcANgI4JKUMx16yHUD/bo6dBWAWAHi93nHl5eVm+9wjmVKBIlP62VEm9jmdeL3ITZz6edy1a9dxKWW+kWN6FJCklBEAo4UQJQCeBXBKT08gpZwNYDYA1NTUyDvuuKPj1xIdl6xdQ4+NtGXkXGa/uXZeA6v6Yea1yY6385fDqethdVtuDWBu6Zdb+mGUW/rtVD/uueeeQ0aPMTTLTkp5CMAbAE4HUCKEaAtoVQB2GD05ERFRm57MsusTuzOCEMIP4FwAaxENTFfGXnYdgLl2dZKIiLJfT4bsKgA8FssjKQDmSClfFEJ8DOBfQogfAlgJ4JFkDQkhIITo9LgjK28lO7adbGgrvh+pnqcn50p0vNl+GXnPiY6NZ7RfZs5ltC0z50nUttn3aKYtK89tJbf0yy39MMot/XZLP7qSNCBJKT8AMKaL5zcBmGhHp4iIKPewUgMREbkCAxIREblCj6Z9W0lRTsRAI2P4ra2tCb9uJB9lNO/jVI7J6lxDqv1IdqzZfhl5z8nYlWMymwdLV44pneP/bumXm3MkifD68Q6JiIhcggGJiIhcwfEhu0S3g4mmLXcc6utKoiE9o9PL7ZyOnuhcZocOEw2FJWsr0eutHr6ycoq5kfMaYfZnwMrhFzPXyy3DU27qV6LfObdy0zCknUOLvEMiIiJXYEAiIiJXYEAiIiJXcDSHJIRIOO3bzFTt+BxTohyI2anGTo1BOzk9PVFbVpZHMnJeK15vpK1E0jnN20hbLEOUmf0wyy3vw+xnK++QiIjIFRiQiIjIFRiQiIjIFVy1DinR65KVDkp0vJU7qyZjtt9mzmVX3sxsW06VJbKzn8nYue6IZYg6c8uaGyA7ckxueg+8QyIiIldgQCIiIldgQCIiIldwVQ7Jylp2RvpgZ44p0fqo+MdO5Ze6emzluY2wsk6e2ZqFduUd7dzy3cm6eGbPbRU39StTcjOJuOl68g6JiIhcgQGJiIhcgQGJiIhcISdq2RllZ47JyNohJ/M8ZtYKOdWPriTK+5gZG3fLGqZkbXMr9ZO5JSfiln6Y5eReVrxDIiIiV2BAIiIiV0jrtG8zw1eJ2jXblhF23s46OXXbyi3MzfTLzHCpm8oQJWrLKDNDY+ka0nPzcJVbhhrd0g+juIU5ERFlPcfvkIiIEtkQLMHyYCWOSh0FIoQJnp0Y4jmU7m6RAxiQiMg1NgRLsCgwAOHY4M1R6cGiwAAAYFDKAY4HpETTvjsymktwqq349oyO4SfajsJs6Ru7tp+wOpdlplySlbkuM/1yS44p28oSLQ9WtgejNmEoWB6sdCQguSX35ZZ+GMUtzIkoaxyVuqHnKbswIBGRaxSIkKHnKbswIBGRa0zw7oKGzsPaGloxwbMzTT0iJ7m2dJCV2z5bvYW0lSWOOkq23bmRHJOT5T6szDEle22ir5st+WTX1gxmx9XtLINl5Nh4drRVF8sTLQ9UnJhl592FIbo7JjQ4+XuVCf2wGmfZEZGr1HkOtQemNlnyeUtJcMiOiIhcgQGJiIhcIa3rkBLlTIyuFTKTTzGy/XmyfprJAxnZ7ryrtowwsj7KLKfWSyVri3Xy0rfuyGhb2bDVhVvq4gGZk2PiHRIREbkCAxIREbkCAxIREblCWvdDMrLtuNHxfyN5oY79WH3Ig1f3+tEUUlCst+Lcvs04taglpba6YiRXY+dW6vHMrI8yw8k9n8y0la41TD15faJjjbBz3VE66uKlem6ruKlfbsl1JcN1SB2sPuTB3J35CMnoN68ppGLuzny0ylaMKg6muXdERNmNQ3YdvLrX3x6M2oSkwIK9+WnqERFR7mBA6qAp1PXlaArzMhER2S1jatkZHedUVbXbY7vLiZTorTgUUhGvWG+1bB8nI7maZKys35eIk+uj4hnJMVl5XqPsXMNkpG07845mciLpqIvXk9dzDZO7cl3807+Dc8tboIvOF18XEuf2bU5Tj4iIcgcnNXQwulcIwHHM3+M7McuuvJkTGigt1rUU4Z3jfXCkVUeBEsLp/r2o9x1Od7eIbJPWad9GXmdlKaFEw2ZjyyIY3etI/BHdtm12iwMjpYOMcHLoxuj3wq6hNbNbmFvJ7BTpdS1FeONoRft23kdbPXjjWCUgBIZ2CEpWvmezQzNmhqDSNaTnpuGqjtzULyeHFjlkR+RC7xzv0x6M2oSh4J3jfdLUIyL7MSARudCRVt3Q80TZgAGJyIUKlZCh54myQVq3n7ByC/N4ZraysLOkkVNtGWXnlshObT9h5RbmZvtl5Oevq2NPz9+H149UdBq209CK0/P3GepXOre6MHJeK0szmekLyxJZ2w+jOMuOyIWG+qITa5Ye64sjrRoKlTBOz9+Lob4j3M6bshYDEpFLDfUdaQ9MRLmAOSQiInKFpHdIQohqAP8HoByABDBbSvmwEOIeAF8H0DaofbuU8qUkbVlWOsjKXE2y7RXM5Loyta1ErzWzTbvRfqQrx2RnbsbKXJfZfllZesnOtW1Gjo3HskSduWm7iXg9GbILA/iulPJ9IUQhgPeEEK/GvvZLKeXP7OseERHliqQBSUq5C8Cu2L+PCCHWAuhvd8eIiCi3GMohCSEGAhgD4N3YUzcJIT4QQjwqhOjVzTGzhBArhBArmpqaTHWWiIiyV49n2QkhCgA8DeA7UsrDQojfA7gf0bzS/QB+DuD6+OOklLMBzAaAuro62dMckpm8Tvxjo+uO4iXqi5VrhZK9Rye3P0/0Hs1u056o7UT96MnrzTDyfTWTm0nWlpnvnZ05ECfXMKVr3ZGVbTn5s2uEW/sF9DAgCSF0RIPR41LKZwBASrmnw9f/BOBFW3pIlGZrjxdg8eHS9vVAZxZ+imF5R9PdLaKsk3TITkTD6SMA1kopf9Hh+YoOL7scwEfWd48ovdYeL8CrTX1iNeQEjrTqeK2pL9YeL0h314iyTk/ukM4E8GUAHwohVsWeux3AF4QQoxEdsmsEcKMtPSRKo8VHShGWJ1fdfvtIGe+SiCzWk1l2iwF0NXCacM1Rd3qaQzKbT7FyTZORbcetzHXF67gte1evN7oFekeJ1hoZzXEY2fLc7NqXjscbybH11JFI178iR1o1S2vfdWQkx+SWNUw9eb2RthJJ57ojI22xLp5xrNRAlEChGjb0PBGljgGJKIGphQegic53XppoxZTCA2nqEVH2crS4qpWlg4wM6Vm9HXrHx0a3HTcytGh0CM7KoUUzbcUz8p7NMDJU2FW/ujK84Dgg9mPx4V44HNFQpIYxpegghuUdQ8eRbKe22Ihvz2hbmTJl3MoyRGbadrKkkVvL/TjZL1b7JkpieP4xDM8/1uk5Fy3dIMoaHLIjIiJXYEAiIiJXSOsW5laW5Ek0Hmtmyniyx2b7mYjRad5Gyv04WTqop+fp6lx2bmlg53R0M/2welvonjIzZTz+eKO5FyNLC8zmLczkRNxShsjsua3CLczJcR80ebFgXz6awgqKtVbM7H0UpxYH0t0tIsoyDEiU0OomD17YXYiQjP4l1BRW8cKeIgCHGZSIyFLMIVFCC/bmtwejNiEpsGA/a7kRkbXSug4p0ThxsjyPmTI5RvMpVjJT4iieEyWNmsJdn6MprLSf32y+yggrS+eb+V7Ymecxm8txqh/xzJRSsvI9p2sNk1u3Ujd67nTiHRIlVKx1Hfi7e56IKFUMSJTQOX2PQxed/7rShcTMvse6OYKIKDWc1EAJjSoJQuIIFuztMMuu7zGMKg6mu2tElGXSug7JSM7EzBYHVtaus7rtRMyso7Gyxt6YXmGM6dUU9zVrtk830y8zrzXKybVEVm5hbqZfbtlKPf71VtYCNMquNUw9Od5MW26tkxePQ3ZEROQKjgakVvcEYiIichlHA9L2I614cVMIgQgjExERdeZoDsmrCTzdEMKCrWFcXufBlEoVqtL1FtRG97bJ1BySmXVIRrYdN5PbsrIts20nOt7M9Yr/utlabIm+r1Zu2242l2UmN2Om3pyb9l5K1JYRZnOYrJPn8B1SeZ7A7ZP86O0X+MtHAdzxdjPe2xN2VVKNiIjSw/FJDUNLVfxgsh//PdYHAeA3KwP44TstWHcg4nRXiIjIRdJWOmhChYrRfVQs2hHGsw1B/HhZC0b1UXFVvQdVhYprh9WMtm2khI/ZftlVSsjscEGya2KmLTNDjWaul1umoxs9l5VDYYm+buVQrNF+mX29kbYSSec0byvbSvXnN5XrnNaFsaoiMKNax+mVGl5tDOHFTUHc+XYzzuyv4bLBGsr8nJVORJQrXFGpwasKXDzYg+lVGl7cFMRrW8J4Z1cY5wzQcNEgHQWe9GxYRtRTa47mYeHBYhyOqChSI5hWcggjCo6nu1tEGcUVAalNgUfg86d4cU6NjmcbgnilMYyF28O4aJCOcwao8KgMTOQ+a4748fKnvRCW0Tv6wxEN8w6UAgCDEpEBjgekjuOK3U3t7puvYNYoFRfWRvDkuiCeik0Vv6xOx5RKDaoi0pbnMdq2kXyK2enVifpldNtxK7eTj9dxa3Yz+aV4RqZ1d/XYSOmljo/fPFjcHozahKWCtw6VYGRhs+X9NsOp6enJ2nJLWaJ0Thm3c5q3ndPX7SxD5OokTXWhiv8d78f3J/rRyyfwl4+iOab3OVWcXORwRDX0PBF1zdUBqc0pZSrunOzDTaO9aJXAr1cG8MCyABoOcqo4pV+R2vXPYXfPE1HXMiIgAdHbxPH9NPxoih9fHeHB/maJB5YF8PD7Aew4ys3iKH1m9GqCJjr/DGqiFdM7VEgnouRcu/1Ed19TFODsGhVnVOqYvyWEf28K4s63I5jSX8PldTpKfSdvq21lnif+9WbzK4nasjO3lSzHZGUpISN5IStzXWbaipfoPZ9aHADEIbx5sAiHwyqKtAhmlDRhRGEzEm3T0R0j+Sun8ktdPbYzx2Tk2HhWlkuys5+J2LnlezrLECXjqll2Rng1gc8O9mBGtY4XNgaxYEsI7+wK49waHRfV6sjL2HdGmWhkYXOnCQzMcRIZl/Ef24UegS8O8+KcARqe3RDCy5tDWLg9FJsqrkHnVHEiooyQMTmkZPrkKZh1mhf3nuHD4GIVc9aHcNviFizeEUYr/1olInK9tNWyA+ypPzewRMHNE3V8vD+EJ9YF8chHQcxrFLiy3oPRfVQIYWwNU1u/u/u6mTxP/GM35baMfC+S6bjuKP54o9fPylyX0W3eEzGzFYOVbVs9pt/TfsQ/tvK8RtlZJ8/Iz5vZen6JmMkxOVkXz6isuUOKN6xMw92n+3HTaB/CrcDD7wfw42UtnCpORORSGZ9DSkQIgQkVGkb3VfDW9jCe2xDCj95twdi+Kq6s01FRkLXxmIgo42R1QGqjKQJnD9BxRqWG+VtCeGlTCHfsjWBalYpLB+so8XLiAxFRumXcOqRUHrf9O88DXFan4qxqT3Sq+NYQlu6M4LyBOi4cpCNfF4bbtnLvH6OszIEYYeWW5mbXCpnJdVnZlhFO1h2zMsdkZU0zJ3NMZnIi6XrPVucdjbSdzi3Nc+IOKV6RV+Da4V6cN1DH0w1BvLgphDe2hfDZWg/OHqBB50geEZHjcvqjt0+egm+M8uHeM3wYVKziX+uC+P6iZrzNqeJERI7LumnfqbQ1qETHrRN1rNkfxhOfBPDnj4KYt0XB1fUenBabKp5q2/Hc8p6dnPZt5vrZWdLILW2Zfb0RZrafsHLbdjPXwOhwn5kp+W4pQ5SsLSPcVJYoXk4O2XVnRG8N95ypYtmuEJ5aH8Qv3mvBKaUKrqr3YHAJtxIg6s7Hx/Kx6HAvHIloKFTDmFp4AMPyj6W7W5RhGJDiKEJgUoWOceUaFm4L47kNQdz/TgvGl6v4XJ2HU8WJ4nx8LB/zD/Vu36TwSETH/KY+AMCgRIYwIHVDUwRm1ug4s7+GeZuDeHlzCO/vbca0Ko1TxYk6WHy4V5c75i46UsqARIbk1LTvVB7neYDL632YWePB3A1BvL41hCU7wzh/oI7PDPLAryXeftrIVgJuec92thXP6PbdRvqZ7Fxm2jLSttU5o46vN7NNu9F+dJcDORzp+mPkSETrNt9g5VYXyV6b6OtW57qM9CvR681Oi7dzKYGRY43i+FMPFXkVfHmEDz+Zlo8xfTW8sDGEWxYewyuNIYRaOSOPclf3O+aGHe4JZToGJIPK8xV8c7QP95zhR02Rin9+Ep0qvmQnp4pTbppafLDLHXOnFB1MU48oUzEgpWhQsYpbJ/px83gf8nWB2R8EcPeSFny4P+JYxQQiNxiefwzn9/oURWoIgESRGsJ5JfsxnPkjMog5JJOPT+2jYURvFct2hfHU+iB++X4Qw0oVXDXUg9piNSvyPlZusZGsn1ZuYW5m/ZSVJaHsXJNjJEfZVVuJrp+RfowoON5FAEo9n2BmvZQRZtdeGcnJGT13qq9Nxmx+1ExbyXCWnQUUITC5Usf4fhpe3xrC8xuCuG9pCyb0U3HFEB398nkjSkSUDAOShTRF4NwaHVP6a5i3OYR5jSG8vyfSPlW8OBOnisf/BSQlkMbN14goezEg2cCvCVxe58FZAzQ8vyGEhdvDsaniGs6v0U6aKu5W9Tufhh45jg8rvxgNQlJi5I7HEVLzsK7iinR3j4iyDGvZ9eBxonxBojH8Ur+C60aqOH9QK55eH8TzG8N4Y1sYlwz24KxqDZoibOun6TxPays8rc0YtPcVAAIfV38Jw7f9HbX75mNT3/OhCNF+p2Tl2qFkjxPlmOzcTj6e0VyXEUbXZiX6mpH3bHYNiZH1UVadBzC3hikZMzm4dK1h6snrjbSViNXbiPAOyQH98hV8a4wPFx6KYM66AB5fG8T8xhA+V+fBhH5K9MPdbYTAx9VfBgDU7pmH2r3zAACb+l6ANVXXctiOiCyXNNsuhKgWQrwhhPhYCLFGCPHt2POlQohXhRANsf/3sr+7ma22RMWtE3z47jgvfJrAHz4I4N6lLVizv+uFhWnXISi1+bj6SwxGOWbN0Tz8blsFftJYhd9tq8Cao3np7hJlqZ5M/woD+K6UcjiAyQC+JYQYDuA2AAuklHUAFsQeUxJCCJzaR8O9Z/gw6zQvjoeBn70XwEMrWtB42L7dZVMiJYZv+1unp4Zv+/vJEx0oa605moeXP+0VKw8kcDii4eVPezEokS2SDtlJKXcB2BX79xEhxFoA/QFcCmBG7GWPAXgTwPeStdfT8W8nc0jJxvsT5YlS7ZcCYEqVion9NLyxLYS5G4K4750AJvVT8bl6D/rmKYbbTnT9DOdXWlsxbNvfMHDPPGwuvwBrB3wFw7b+H2r3zIMQiN45xdowumbHru+z0S3djax1MXr9rMx1GWkrGaM19xYeLO6ycOrCg8UYUXC82/OYXR9lhpEck5U144y25dQapvjXW9lPqxnKIQkhBgIYA+BdAOWxYAUAuwGUd3PMLACzAKCioiLVfmYtXRU4b6AHU/rreGlzEK80hrBiTzNmVGu4pFZHUbqmiguBkJqHxn4XYm0s+Kwd8BUAQEjN47Bdjjgc6XofsO6eJzKjxwFJCFEA4GkA35FSHo77K1cKIboMo1LK2QBmA8CIESM41tONPF3gc3UezKzWMHdjCG9sC+PtHdGq4ucPTM9U8Q1VV3UenosFJX4Tc0eRGumymnd3BVWJzOhRQBJC6IgGo8ellM/Ent4jhKiQUu4SQlQA2GtXJ3NJiU/BdSO8OK9Gx9MNwVhwCuGSwTqm9VehKQ4Hptj6o24fky0+aPJiwb58NIUVFGutmNn7KE4tDjjejxm9mvDSp533O9JEK2b0anK8L5T9kgYkEb0VegTAWinlLzp86XkA1wH4Sez/c3tywp6uQ3KS0fFuJ9ZL9S9S8F9jVWyMTRX/+9oQ5m8Jx6aKq1CEMNSvdOZ54llZU87K70Uiqtp5iMrM9Uv287a6yYMXdhciJKNtNIVVvLCnCFCOYFRx0FTeLJGurvWpxQEIpQlvHCjE4bCKIi2CGb0OY2RhC6Ts+R9HZtfF2ZVjcvK8RphZw9TV8WZqFprZ68uontwhnQngywA+FEKsij13O6KBaI4Q4gYAWwBcbWnPCAAwuETFbRP9+GBfNDD9fnUAL29WcPVQD4aVskZeNlqwN789GLUJSYEFe/MxqjjoeH9GFjZjZGFz2v5gpNzRk1l2i9F92d6Z1naHuiKEwKi+Gkb2VrB0ZxjPNITw0+UtGFGm4Kp6D2qKGJiySVO46+9nd88TZQuWDnJR2z0ZPpharWJSpQcLtoTw/MYA7lnagtMrNFxR70Eff8+HQ40M6ZkpgwNEh5WW7QWebwQOBoBeXolLaoAJfa0dVjPKyFBEsn5YOc27WG9FU+jkWWzFWqvp7RGsvJ5mtro22paR4ehkjEyBNjt0ZhWj1zbR9XTqPadybfgnVwbyqAIX1nrw0PR8XFyr4709Ydz21nE8vjaAw0H3Dass2wv8oyEajADgYEDgHxuA5Zk8DSb+l9bCD/pz+zZDj5u0qguJc/p2v+6HKBswIGWwfF3gqqFePDg9D1OqNLy2JYxbFx7H3A1BtITdE5iebwRCcTdZoVaB57ekpTumjdj3PMbsnXMiCEmJsfuexMj9L1jS/qiSIC6tPIZiPQJAoliL4JKKoxhV4nz+iMhJLK6aBUp9Cq4f6cP5NRE83RDEsxtCWLA1hEsH65hWpTk/VTzOwW5mK3f3vKtJCU+kGfUHXwcArOx7NcbsnYOhB1/Hul5nR4OUBcM4o0qC7QGIkwkoV3ALcxe1bbatqiKBb4/T0HAwgic+acHfYlPFr6z3Yny5Ymi6a8e8h5lp8QBQ6o3gQBfBp9QroCjmciBOTfvueO1WV3weEMDQAwswNBaY1veaiVXlV7dXbjczNdtMPiWdbaX6WqOc3H7Cyi3MzfTLTD+Snctov4zko4zikF0Wquul4vZJfvzPOB80ReC3q1pw3zstWPtpelbXXzoI8MT9pHkU4JKBaemOeUJgVfk1nZ5aWX41yykRmcSAlKWEEBjdV8MPp/jxtVO9aApIPLi8BT9f0YKth50NTBPLFVxbD5R6o49LvcAX64CJ5Rn6AS4lRu95otNTY/Z0yCkRUUqYQ8pyihCYWqVjYj8VC7aG8eKmIO5eEsHplSouH6Kjt9+Zv0kmliuYGCu/m9E5ESkxavcTqD+wAOtLZ2JV+TUYvSf6GOCdEpEZjgekVOewuyXPY2fbdrbl0wUuGqxixgAPXtwYxPzGIJbtimBmjY7PDvYgP+4nwUiJJ7e+Z1vaEgJhNQ/rS8/B6n7XQAiB1f0+D0AgpPqhxEoMdczBrTyo45WdHhwKCZToEudXBDCmNNzjfsUzU9app+1a3a9k50q2VstM206tZTOby0qUm0nWlpW5rkT9SvZ6s9ead0g5Jl8XuOYUL84ZoOHZDdGt1N/aHsJnBuk4d4AGbxqqimeaj8svhWxtPXEnJARW97umyzuj9w9oeGart70U0KGQwDPbfABaOgUlImIOKWeV+hXccKoPP5qSh2GlKp5uCOG2xS14c1sYkdYMHlJzSnzw6eavxld2erqsS/fKLq9dPSPKWAxIOa5/oYJvj/Pj9ole9PYLPPZxED9Y0oL39kQyO9fjEodCXQeq7p4nymUZU8uuJ233tK2My1vY0Fb8mP3QMh0/mKxh5d4InlwXwG9XB1FbrOCaoR7U9zK3Dsmt79nOn5m2n/MSj8Sh4MnBp0SX7ee3sx6d0W1HzLRlZk2OkbVuZte+GMlHWXWers5l5XopIzmmdK5hSoZ3SNROCIGx5Rp+OCUP14/04GCLxI+XteBX77dg2xFzBVZz1YWVoS7r0p1fyTJARPE4qYFOoioC06p0TKrQ8NqWEF7cFMLdS1pwRmyqeKmPw009NbYsAiCIl3fqOBQUKPFInF8RxFhOaCA6CQMSdcurClxU68G0/hr+vTmE17aG8e7uCGZWa7hokIYCDwNTT4wti8QCU5TZ7TyIslVa1yHZOYafap+MnitT8inxH4JGxuyLfAJfGKbivIGteKYhiPlbwnhrRxgX1eo4t0aHx0Q9OjN5nmRtJRvfTnRuO9fBJdo7Kb4fyfpi9vfCyD5ORhhdZ5TseDP5ZSPM9tvMuRK9R7PnTZSDs3MNk1HMIVGPlfkVfP00H+4/04+hvVQ8tT6E773VjIXbOVWciMxjQIoX/9cApz6fpKpQwXfG+fD9iT6U+QT+uiaIu5a04P29YU4VJ6KUuWr7iUScGFbr89GfoYSOYPeob0cXOkqJfh/8GhGtAHtH3OCafnb3ONEQi5ktJLr72rDeCu4q07BidxhPrQ/gNyuDGFKi4OqhHtT3UpMe39XXjE5TNlNGJ9G5nRxKNDoFOtV+AMaun5mhRbNtJWK2xJERTk5H78hNU8aNHGsW75DaSAkldARlDXPQb/XD0WC0+mGUNcyBEjrCO6VuCCEwvp+GH03Jw3+M9GJ/s8QD77bg4fdbsINTxYnIAM6yayME9oz+DgCgrGEOyhrmAAA+rbsau0/7b1ZwTkJVBGZU6zi9UsP8zUH8e3MIP3i7GVP6a7h0sIYyh6qKE1Hm4qdERx2CUpv24TvqEa8qcPFgDx6alofzBmpYujOM71zxJYkAACAASURBVC9uwZx1QRwL8S6TiLrneOkgq6Z99+RcPW2r/bGU6LvqV52+VrH619g9unNQsrKfVrJry4hUji3yAdcO9+P8Qa14al0A8xrDWLg9jM8O9mDmAA0e9eStvnvyONHPjJk8T7K2jG5DnoidU8qTUVW102Mz18/KXFc6r69VbduZ5zHSD7vP3VOpnJN3SG2kRN+Vv0Tp+idwoO4arL16KQ7UXYPShidQvupXzCGlqLdfwY2jfLjvTD/qeql4Yl0Qty1qxqLtIbTymhJRB8whtRECrXohDtRfEx22EwJ7xkSH71r1Ag7bmTSgSMX/jvdj7adhzFkXxCMfBTGvMYQr63SM6qOm5S84InIXBqQO9p/69c53QrGgxL/jrTOsTMOdkxWs2BPB0+uDeHhlEHUlCq6q11HXS03eABFlrZxYh2Rn2+nO1WRaW0D0ek+qVDGun463toXw7IYgHlgWwNhyFVfWeVBZkFouzMqtFsys24p/7GSe0Uz+xMmSRvHMrOsyw8rtzs1+RplZ/2N0G/JUz2s33iFR2miKwFkDdJxRqeGVxhD+vSmIO/Y0Y2qVhsuH6OjlczbFuWxPK+ZuBg4EgFIvcMlAYGK5e35ZibIdAxJ1TcrOebP4xxbyagKXDPFgRrWOFzYGsGBrGEt3hnFejY7PDNKQp9sfFN7d04rH1wPB2E3AgQDwjwYAkAxKRA7hLDs6Sf+G/0PNJ384kU+TEgM/+SOqNvzN1vMWeQW+OMyLn0z1Y3w/FS9tDuHWt5oxrzGEUMTeTN7cTbI9GLUJtgLPN9p6WiLqIK3bTyT6mpVj0Fbmm4z2M+PyPlJCCx9Hvy3PQQiBrcP+E9XrZqNi63PYVXM5FCEgbVxHI6VEeYGC/xyt4TO1Ecz5JIAn1oXw6pYwPlfnwemVKpQergkzspboQCCCrhwIRI9zy/fVaNvxEm2v4OS6IzP9trOtRK8FrN2OwsntJ+z6bLU6/8QhO+pMCGwb/p8AJPo1Pot+jc8CAHbVXI6tw77RXnTWCTVFKm6e4MfHsanif/owgJc3C1xZ77F8qnipNxp8unqeiJzBITs6WezOqKP2YJQGw8s03H26H98c7UWwFfjV+wH8ZFkLNh7q+q4mFZcPVuCJ+23wKMCltcwfETmFAYlOJiUGrP19p6cGrP2DY3dGXRFCYFKFjgem+PHl4R7sOtaK+99pwW9XBbDrmPmq4pP6qfjSUNF+R1TqBa4dKjCpnL8iRE5xvJadkXpr8ccmeq2Ta5rsOpdbckhVH/8O5Y3PYs+gK7Bt+DdRteZ3qGh8BiI2nGd3DinRY48QOHegiqlVHszbHMRLm4J4f28E06s0XDJYR4n3RN+MriU6vVLH6ZXm35PZ9+hk20a2MLdyrZCb1hUaOdbM9TKy5snK9VHJWFkXz2w/mUOizoRARC9oD0YnckpARM93NIeUiE8TuKzOi7OqNTy/MYTXt4bw9o4wzhuo4cKBuiNTxYnIWgxIdJJdQ78K2dp6ImfUFpRctKK7TZFXwZeGe3FujY6n1wfw4qYw3twWxsW1Os6qVqEr7uszEXXNVdO+E73OzqnZRs9t55TyVPthtl8nPbZparvV/WwbJulXoOKbY/z4TFMEc9YF8a+2qeL1HkyuiE4VT9cwm9XXz8hUbTP9tHILc7O/F0a2lzfTlpnPBqNDxHZNGbeak9PTmbGlrDKwWMWtE/24ZYIPBR6B2R8EcPeSFnywL2zrLy0RmcchO8pKI3trGFaqYNnuaFXxX7wXwCml0aritcWsKk7kRgxIlLUUITC5QsP4chVvbgtj7sYg7n8ngAnlKq6o01Gex/wSkZu4KodkpqRHNkwhd0v+yWi/Ej6WsvM08bjHZvInQM+2bfcowHmDVEyp0jFvcxAvbw7hvb0RzKjScMkQHSVe5aTj3ZrniW8v2fWxMx9q15TxnjzuaT+66osRZkoH2bmVejJGSkRZeR5O+ybXqlz3GNTw0WjVh9h08eqPf4+Ilo8d9V9xvD9+TeDyOi/OHqBj7oYQ3twWwuKdYVwwUMeFg3T4OJJHlFac1ED2kBJq+CjKNz+D6o9/3x6M+jU+AzV8NK1rmYq9Cr4ywosHpvgxuo+K5zeGcOvC43h1SwihVk58IEoX3iGRPYSILqwF0G/zM+jX+AwAYPfAK9JaF6+j8nwF3xztw4WxqeL/+CQ6VfzyITom9lM6VRUnIvulNYdkZykNM2sNjJzbzraszPuYYWb8f8fIm1C++ZkOj7/V6bbc6Ph+orUeqV6vwb0U3DZJw4f7olXFZ38YxLxGBVcP1TGiLFpV3C15nvjHydaBGDm3lT9/RraqiO9HsraNXj8rc11G2krGys+VZIyUbLMqx5RKOxyyI/tIiao1v+30VNWa36Z1uK47Qgic2kfDvWf68Y1RXhwPS/xsRQAPrWjB5ibrqooTUfc4ZEf2iAWjvpuexp5BV2D7iG+has1v2++W2urkuY0iBE6v1DGuXMWbW8N4fmMQ9y5twcR+Kq4YoqM8n3/DEdmFAYnsIQQiWgH21n4O22PBZ/uIbwEAIlqBK4NRR7oicO5AHVOqNLy8OYR5jSG8t+dEVfEiT7p7SJR9XLUOKdHrzI5BmznWyjVNTq1xckM+avew/wCkRPu7EAI7Rt4ECbQ/Z7T+l9PvOd8DXDlUxcwBOuZuDOLNbWG8HZsqfsEgHX5NGO6XmTxPsraT5TGM5naMsDIflYiqdp6fb+b6WZnrsvLa2rmGyexnltXblnfEOySyV/x2FS7ZvsKoEp+C60b4cP7AVjy1Poi5G0N4fVsIlw72YEa1BtXdN3xEGYEBiciAfvkKbhrjw8aDYcxZH8Tf1wbxSmMIn6vTMaGfyqniRCYwIBGloLZExfcm+PDh/gieXB/CHz4I4uVGgavqPRhRxpIPVlt5QMMru7w4FBIo0SXOrwhgTGk43d0iiyUNSEKIRwFcDGCvlHJk7Ll7AHwdwL7Yy26XUr7Ug7YSzod3ipX5KSfXIRlp284cklvbTkdbo8tVnNZXx5IdITzTEMTPVgQwokzFVfU6BsaqipsdozeSJzKTk7P6+2xGx2vw/qcqntnmQUhGnzsUEnhmmw8QAYztIigZqW1nZQ7YznxyMnbuj+S2/ZD+CuCCLp7/pZRydOy/pMGIKFspQuDM/jp+MjUPXzjFg8bDEdyztAV/WN2CvcdTL+xJUS/v1NuDUZuQFHhlJ6c6Zpukd0hSyreEEAPt7wpRZtNVgQsGeTCtSse/NwUxvzGE5bubcVa1hs/W6ijyMr+UikPBrq/boRCvZ7Yxs8rvJiHEB0KIR4UQvSzrEVGGy9MFrqz34MFpfkztr+H1bWF8b1Ez5m4IoSWceTMM063E0/U1K9F5LbNNqpMafg/gfgAy9v+fA7i+qxcKIWYBmAUAVVVVttVJMjO2a/b1Ro61cwzarn4yh5Ta47I8BdefpuH8QRE8vT6A5zaG8Pq2MC4domN6lQZNSb6GCUhtD6hUHru1rQv7h/FUY+dhO11IXNg/BEVRTNWjM/tZYCSf7GRbiV6f7HrZ+dmaTEp3SFLKPVLKiJSyFcCfAExM8NrZUsrxUsrxZWVlqfaTKGNVFij4r7F+3DnZj4p8gb99HMQdi5uxbFc4bRN7Msm4sgiurAmixNMKQKLE04ora4IYW8Yag9kmpTskIUSFlHJX7OHlAD6yrktE2WlILxXfn+TH6n1hPLkuiN+tDmDQZgVX1usYzqniCY0tizAA5YCeTPv+J4AZAHoLIbYDuBvADCHEaESH7BoB3NjTE1q1hbmR89h5+2t02MwtU8jtHIbMhmEiO9saU65gVF8db+8I4+n1ATy0IoBTe6u4aqgHNUVqwiE6J/vplraStW10C3MzyyPiWdlWd+2a7Vf8681cr/jHRobzeqIns+y+0MXTjxg+ExG1U4TA1Codkyo0vLYliBc2BnHX2804vVLD5YM19MljVXHKPazUQJRGHlXgwrip4st2hXF2tYaLB+so8nBqM+UOBiQiF8jXBa4e6sU5NTqeXR/Aa1vDWLQjjAsH6ThvgAqvxsBE2c+1209ki3RNITfblpnclpFzuzVv4WRbHcfsy/wqbjjNjwtrW/Hk+gCe3RCbKj5Yx7TYVPFse8+AvcsQrNzC3M7fQSNboNu5vMRI+SmrP885UE3kQpUFCr491o8fTPajPE/g/2JTxZfv5lRxyl4MSEQuVtdLxfcn+vDtsV6oCvDbVQH88N0APjmQZAp0fNBiEKMMwBwSkcsJITCmr4ZRfVS8vSOMZzaE8ODyAE7treDKOh3VhZ3/rhy05V/QwsfQUBsrniIl6jf/BWE1HxsHXJ2Gd0DUM44GJCGEK3JIdpYScuuaJjvbsnKc3Ui/7OynlW2Z3Va87bECYPoAFZMrdby2JYQXNgZxz9JAdKr4EB198hTI1lbokeOo3vlvCCHQUHs96jb/BdU7/41t/S+ObiDYzc+ck3keM9u4W/m9Mbsmx8zPTDwjuS6jjJQOSnQsYG1+OR7vkIgyjEcV+EytB9Ordby4MYj5W6JTxWcO0HBRrY4Ng28AAFTveBHVO14EAGzrf/GJOyYil2IOiShDRaeKe/DgVD9Or9Qwf0u0qviLm8NYM7Bz8Gmovb7TnRGRGzEgEWW4Mr+CG0714odn+jG0l4qnG0K4480D+Gf4LIRl9Fe8btOjnNhArpfWIbtEY5PpzDVl6tYWZo51ak1T/GM780/JmMkHGBnTN7OteLLHHf9dXazgf8YpOPrhc3h05wB8X34dD3tn4b8K3sIXt/8eAgINg6/vcQ4pnXmeROe2cu2Q0TVMZj4LzFw/I/1I1hejebNUz5MK3iERZRMhMKKwGb+qfR/fHuOFAHDHnqm4GL/Ge8FqDtuRq3FSA1GW2TLoi4CUGCsETuujYvHOMJ5t6INvb+uNUS0tuLLOg6pC/i1K7sOARJSNYndCqiIwvUrH5AoNr20J4cVNIdy1pAVnVqq4bIiOUh/vmMg9WMvOZlbmozJlTZOVbTu5dsgII3khq9dxpdK2XwE+O0TFjGoPXtwUxGtbQnh3dwQzB+i4uFZHgUcY7oedeZ5EeQyj+RQjnKz5qKqdN2W0K08Wz2wtu56yZT8kIsoeBR6Bz5/ixbk1Op5pCOKVxhAWbg/h4lod5wzQ4FFz6w9GchcOJBPloDK/gq+f5sN9Z/pR30vFk+tDuG1RC97aHkakldPDKT04ZJcCK7dat6ofgL3DgWbacqptNw3/uW3IrrvHNcUC352g4ZMDYTzxSQB/WRPEK40CVw31YnQfJeWp3PHfR6Olb9yybbsZZn7nrJzmHf/YybaM4h0SEeGUUg13Tvbjv8b4IAE8/H4LfvRuCxoOJqkqTmQh5pCICED0L+Px/TSM6ati0Y4wnm0I4kfvtmBMXxVX1ntQmZ/5oxvkbgxIRNSJqgjMqNYxuULF/MYQXtocwg8WN2NK/7ap4hxYIXukNYeUbBppLjCSj7KzpJGRftk5Bm1nP5lDMtaWXxe4tE7F2TUePL8hiAVbQnhnVwTn1ui4eLAHeVrPp31bWT4pU66f0d+TjtfM6jytmd8TM20ZxTskMif+B1BKlqfJMoUeBdcO97VPFX95c9tUcQ9mcqo4WYj33pSykpW/R+myh04EJSlRuvwhlKz6fXo7Rrbok6fgxlHRqeKDS1Q8sS6I2xY1Y9H2EFrTONuUsgcDEqVGSijBIyha+zhKlz/UHoyK1/4DSvDIyXdOlDUGFKn47ng/vjfBh2KvwCMfBXHn281YtTec1mUQlPlcu4V5puaXrCzHbuV26Ebb7kl+6tDk7wFCoPjjv6N47T8AAIeHX4uDE27p8ffLyq0srDyXW/MUXbW9aGsL/rnmGD5tbkWZX8HnR+RharXP9n6O6KPjnt4alu8O48l1ATy8Moj6XgqurvdgcIkzW27Y3ZadW5jHPzayhbmTpYRS/Z1L5TObd0iUOiFwaNKtnZ46OPFWa3JIXeWm6CSLtrbgjyuPYH9zKySA/c2tmL3yKBZta3Hk/EIITKzQ8eNp+fjKcA92H5P44bst+M3KAHYdNbYYlogBiVInJUre/Wmnp3ot+6np4NFr9R9QtuJnnXJTvd/7OUpX/9FUu9non2uOIRi3djUYAf615rij/dAUgbMH6PjpND+uqNPx8acR3PF2C/66JoCDLQxM1DMMSJSaWDAq+vjvODz8Wmz56mocHn4tij5+vPNEhxTaVYJHUPLJP9uDUu/3fo6ST/4JJcTcVLxPm7v+sO/uebv5NIFLBnvw4DQ/zhmgYfGOCG5b1IKnG0I4HuL3jhJz1RbmRiTLMXX8eqbkn9yqy2srBKS3EEdGfAmHJt4KIQQOTfoeAIFWTwFEh/FwI+PuUBQciOWgStb+AyWf/BMAcOiUL+DT8TdDsXAM3wi31NiLf1yWp2D/8ZODT5lfgaIotvYz0VqjEp/Al0aoOH9QK55uCOLfm8N4c3sYn6314OwBGnTFHdcz2WuNbONuZT7USH4pvh/J+mL29yJRrtpozcJ4XIdEKTs89lud71hiOSXTfwcLgU/H39w+UQIAPh1/M9c3deGLIwvwh/cOdxq286jAF0fmp69THfTJU/CNUT5cMDCMJ9eH8K91Qby6JYTLh+g4vVI96Q8Mym0csiNz4j9QLJrQULbiZ52e6pRTonbTBvjxjXFF6J2nQADo7VfwjbGFmDrAn+6udVJTpOLm8T7cOsGHQo/Anz8K4u4lLVi9L8Kp4tSOd0jkLrFgVLz2H2ga9kXsH/ddlK34WfvQnavvlOKrVDhUtWLaAD+mxQKQ2z/ch5epuOt0H5bvDuPp9SH86v0AhvZScGWdftJUcco9rtoPyam8T6aucYpnZ207p9c0tb9WCEhPEQ4PuxYHJ94CBdGp5EIISE9h9PXdfOjbOYaf7Br0WfNnqKGj2D3q29H+SIl+H/warXoh9o64wbJ+Ge2nnWtyUt2zSAEwuVLB+H46Fm4L47kNQfxoWQDjy1V8rs6DioLEuS+zuS4r6x8ayafYuQ7OyP5JVm4nHy9Zrivp8aaOJrLBoTH/iQMTbzkReITAgQm3AMBJ08HLVvwMvVb/IU09RXs/1NBRlDXMQb/VD0eD0eqH0XvDk5wZmICmCMys0fHQ9DxcPkTHR/sjuOPtZvx1TQCHArxmuYhDduROXdy1KsEj7RMdPh1/c3Ro75N/4tApX3BseKxLQkTvjACUNcxBWcMcAMD+IVeduGOibvk0gUuHeHBWtY65G4N4c1sYS3aGcX6NhgsH6fBrvH65ImO2nzA6HTNdU8ozdTjQLVtbJDgoOnQHgeK1j7cHpqZhX8TBCbdAEcJUP+L7YngoRwjsHfM/7cEIAPaO+Z+U+uVWRraQSGUorMQPXDfSjwsGteKp9QG8sCmMN7aFcclgD87qMFXczLBa/NetLMljZsp4/OvtXCpgdAg+1evH0kGU3YSIDuV1cGDCLe64A5ES5St/1emp8lW/4nBdCsrzFXxztA/3nOFHTZGKf3wSxPcXNWPJzjCrimc5BiTKHFJGq0B00FZpPK1iwai04QkcqLsGa69eik/rrkZZwxwGJRMGFau4daIft0zwIV8XmP1BAHcvacGHnCqetZhDoswQC0ZFax/H4WHX4sDEW1C67CEUr30cANonPaSFEIh4CnCg7hrsGfMdQAjsGf0dAECrXuiOO7gMNrK3hmGlCpbtjuDp9UH84v0ATilVcFW9jtpiNd3dIwu5tnSQkzmhbOSWbTC6en2q+SnpLYpubxGbBn4wVmlcegohlOjCUCPnNXJNkr2nA6fdCEjZXnlACoF9Y/8XEAKKg/mAbGwLiF7/M/qrmFih4/UtQczdEMT97wQwsZ+GK+p09MtXetyWkRywkRyT0bI5RqZqm2XlFuYdmZ3mHY93SJQxmsZ+E7K1tfN08IkuySEB9lStoE40ReDcgR5M6a/j5cYg5m0O4b09YUyv1nDJYB0lXmYhMhkDEmUWfugTAL8ucEWdF2cP0DF3QxALt4Xx9o4wLhio4/yBGqeKZygGJCLKWCVeBV8Z7sV5NTqeaQhi7sYQXt8WwiW1OmZUa9AUBqZMkrGlg5hjMsfKHJOT/TC0lYWJc5sZV49v28k1JdnYVk/arixUcNNYDZsORfDEJwE8/kkI87eE8bl6Dyb261xV3Eg/439GEuWJjKzTSvbYzutnlJ2/J/E44EpEWaO2RMX3Jvpw83gf/JrAH1YHcO/SFny0P5L8YEo7DtkRUVYRQuDUPhpG9Fbxzs4wnm4I4mcrWjCiTMFV9R7UFPHvcLdiQEoXKU+uWk1EllGEwBn9dYzvp+KNrWE8vzGIe5a2YFI/FVfU6eibx8DkNq4KSFauS7Ky3lyi16eSf/It/SVE4DCap9/VvlWB/6370eotRMvk/0l6vNukc2sLM8emuh4qlcdW9jMT8j5uypt5hcAFtSqmVXvw0uYg5m0OYsWeCM4aoOOSWh1F3p5vIZHqlhtGH7vp+hn5PUm0pXtP8E8Ep0kJETgM76pH4V94XzQYLbwP3lWPQgQO806JyCZ5usCV9V48NC0P06o0vL41hFvfOo7nNgTRHObvnRu46g4pJwgRvTMC4F31KLyrHgUABEZfj+Zpd2b2upquhiEz+f1QVirxKfjqSB8uGNSKJ9cF8NyGEF7fGsIlgz2YXqVyqnga8Q4pHToEpTbtw3cZKn/5r1Hw9gMn7vCkROGSB1Cw/Dfp7RhRN/rlK7hpjA93TvahIl/B39cGccfiFry7i1XF08W165CSHWcmT5H2NU5SwvfWfZ2e9791H5qnuScoGdqzSEoowSPI+/AxCAEcOeN2FCz5MfI//D8cO/W66BqQHrZn5fc5U9Y0uWWNk1vbsrufdaUKbp+s4YN9ETzxSQv+8EEQ8xoVXD3Ug2Gl9u4B5URbQOLcjpX9NFvbjkN2TpMSvoX3wrvyUQTGXI+W6Xe3P4bM0DslIXD0zDsAAHkfPIa8Dx4DABw79TocPfP2zHs/lHOEEBjVV8OIMj+W7gzjmYYQfrqcU8WdxoDkNCEgvUXtwQhCRP8PQHqKMvfDOxaU2oIRAAYjyjiKEDizv44J/TS8se3EVPHJFSouH6Kjj58/z3ZKGpCEEI8CuBjAXinlyNhzpQCeADAQQCOAq6WUB812xqlp30623ZXgGd+NzrZr2966LSgJ0WkLBSuHDm0nJfLffqDTU4VLHojeObmk3+maQg4Ar21owiPL92Hf0TD6FGi4YUIfnDOkuEdtuaUMTDYO2XU3rdunABfWqphWpeOlzUG8sjmE5bsjOHuAhs8O9qDIc/J26m59j0DiYV4z27hb+bMJ9GxSw18BXBD33G0AFkgp6wAsiD0mI7KparWUyF/8I+R98FccP+2r2Puf63H8tOuQ98FjKHj7Rzk/lf21DU34xaLd2Hs0DAlg79EwfrFoN17b0JTuruWu+J/Jbn5G26aK/3R6HqZWaViwNYxbFx7H3A1BtHCquOWSBiQp5VsADsQ9fSmAtrGZxwBcZnG/KJMIAektxPHTvopjU+5oH747ftp1mT0MaZFHlu9DIO7DKxCWeGT5vjT1KLdVb/w7Bq2f3WlGaG3DnzBg0+PdHtPLp+A/RvrwwzP9GNFbxbMbQrj1rWa8vjWEcCsDk1VSzSGVSyl3xf69G0B5dy8UQswCMAsAqqurUzwdud3xid8+se4o9n83Ddel076jYUPPk42khBY+hsqtcwEAG4d8DbUNf0L/bc9jR/UlSdfOVRYo+K8xPmw4FMGcdUH8bW0Ir2wJ48o6HeP6Ku4eVs8Apic1SCmlEKLbPxGklLMBzAaAcePGSaumfSc71q58lNVtm+G6HFMKw5BWb49uVdtWTiHvW6BhTxfBp0+B1uX3zMoxfKfyT1b3y8q2O+VIhEDj0BsBAJVb57YHpp0DLkVj/ayThoy6a7u+VMEdkzWs2hvGk+uC+N3qIAYVK7i63oNhZarl79FMnidZ22a2cU90HidLB+0RQlTETloBYG+K7RBlva9N7Atv3A6mXk3gaxP6pqlHOa5DUGqzuX6W4bt5IQRG99Vw/xQ/vn6qF00BiQeXt+DnK1qw9TC3u0hFqgHpeQDXxf59HYC51nSHKPucU1eCm6dVoLxAg0D0jum7UytwTl1xuruWm6TEwHV/7PRUp5ySQYoQmFKl4ydT/bhmqAebmiK4e0kLZn8QwP7m7jf0o5P1ZNr3PwHMANBbCLEdwN0AfgJgjhDiBgBbAFxtZyeJMt05dSU4p64EgPmpsWRCLBhVbp2LnQMuxeb6WRi0fnb70N2muq+nnPf0qAIXDtIxrUrDS5tCmL/lxFTxi2t1FOhWvpHslDQgSSm/0M2XZlrcl5TLChk91q35KCtzQj0aJ+6QwG0radT22OxYcDrYmY9y8lg727IyN5Mp4svZtOqF2FVzGbae8g0oALac8g0ICET0fCiq2um1qVy/Qi9wzTAV59ToeG5DEK9uCWPRjjAuHKTj/Bq9ffjWqTxPsraNrGGK/3qy8xrFSg05yvdObE+maR33ZLoP0luUkXsyEfXU9rovnzQjtPGUG088tkipX8H1p8aqiq8P4JmGEBZsDeOywTqmVmlQM+PvPEexQFMuktE9mXyr/gL/W/e1ByPfqr9wTybKDQ4uTK8sUPDtsX7cMcmHvn6Bxz4O4geLm7Fidzhj7zrtwjukXCRE9M4IgG/VX+Bb9RcAQMvo/+h0x0RE1qnrpeL2ST6s2hfBk+uD+O3qIGqLFVxVr+OUUjV5AzkgY7efsPPYdNbJc6otKEq00ngsGAFAy/S7XZcvMpOrsbItt6xpin9s9Hqwll362xrXT8XovjoWbw/hmYYgHlwewKg+Kq6s96C6UEmpH0ZyTIm2HTcq0Zbu3MKcek5Gt07vqG1LdSKyl6oITKvW8dPpebh6qAcNByO46+1m/CnHp4pzyC4XxYKRd9Wj0a3Tp9/V/hjAJ/Y8igAAEn9JREFUSbvZEpE9PKrARbUezKjW8eLGIOZvCeHdXWHMbJsq7nHXiIXdGJByUdueTLFghA5bqktvEXNIRA7L1wWuHurBzAEantsQwvwtYby1I4zPDNJxbo0GT46MZQknZ3mMGzdOLlmyJKVjzfTT6LFuPVey1xpuq8O6o9iTXa5DsrofdrVtNFdj5PVm2jbbDyv7aSYfxRySc21tOxzGU+uDWLk3ghKvwGVDdEztr0FVkq9hSvY4Pmdk13v+/Oc/v/Po0aP9YUCOxF3qUjbtyUSURaoKVXxnnB93TPKjt1/gr2uCuOPtZry3J7unijMgERG5VH2pih9M9uO/x3ghAPxmZQA/fKcF6w9mZ/FW5pCIiFxMCIGx5RpG9VGxeEcYz24I4cfLAhjVR8GVdR5UFWbPfUVa1yGZWQcSL13rkOw8l9G1Bk61la2M/GzauS+TkePtXNNkpp/MIVnflqIAZ9WoOKPKg/mbg/j3piDuWtKCKf01XDZER5lf6fb4jnmjRGuHrOhnm1Q+Q3iHRESUQbyqwMWDo1PFX9gUxGuNISzdFca5NTouGpTZU8UZkIiIMlCBR+ALp3hxbo2OZ9YHMW9zCAu3hXBRrY5zBmjwZGD11rQGJDPbTSRry8xwoNFhEDPHmhnqcWordQ7nWVs6yMpzuXUrC6PStT16NrTVN1/BjaNVfKY2gjnrAnhyfQivbQnj8jodZ1ZGp4p3HKZzsp9GZU82jIgoh1UXqfjuhDzcPsmPXj6BRz8K4s4lzVi5N3OmijMgERFlkVPKNNw52YebRnvR2go8/H4AP14WQEMGTBVnDomIKMsIITC+n4YxfVUs2hHGcxtCeGBZAGP6qrhiiIb+Be68F3FtQDIz9TrZ8WaOTXa8W7ZHd9O2GOnKQVm5dYWd3JKfsrMtK/NP6dy23S1tJdsyoi1npCjA2TUqzqjUMX9LKDZVPIKpVdGp4qU+hdO+iYjIOV5N4LNtU8U3BLBgaxhLd0anin9mkIZ83R0TlRiQiIhyRKFH4AvDvDinRsezG0J4OW6quJ7mqeLuHEgkIiLb9MlTMOs0L+49w4faEgVz1odw2+IWLN4RRmsah7YzpnRQona6YmWex8jxVh6bKfkoM9yafzLKzlJCTq1LMpubScTOvI8ZmZKPis8ZmSn/0/HfA0sU3DxBw9pPw3hiXRCPfBTEvEaBq+o9GNVHhRCC65CIiMg5w8o03H26HzeN9iHcCvzq/QB+vKwFGxyeKs4cEhERQQiBCRUaRvdV8Nb26FTxH77bgrF9VVxZp6PCganiDEhGSNntDqtERNlAUwTOHqDjjEoN87eE8NKmEH6wL4Kp/VVcOlhHide+z7ysqWWXqG2z6ysAQF30U6DlMCLn3A8ZbRTagjsBbzHCU29JeGxHmbCGyWzblud9EvwhkCjXlSn5p3jp2trCyXVIRtoy2na68lF2cmrLiI6P8zzAZXUqzqr24IWNQSzYGsLSnRGcN1DHhYN05OuJ80upYA6pJ6QEWg5DWzEb6mt3tgcjbcWfgEBT9OtkC9/SX8K/8L4T11hK+BfeB9/SX6a3Y0Q5osgrcO1wL34yLQ/j+ml4cVMIt751HPM2hxCKWPvZxyG7nhACkXPuBwBoK2ZDWzEbABAe/3WEZ97PYTu7SAkROAzvqkcBAM3T74J/4X3wrnoUgdHX8w8BIgf1zVPwjVE+XDAwjCfXh/CvdUG8ukXg8iE6Tq9UoVjwOciA1FOxoNQWjAAwGNlNCDRPvwsA4F31aHtgCoy+Pvq8EAxKRA6rKVJx83gVH38awZx1Qfz5oyBeaRS4st6DkWXC1NC4awOS2bVClrclZXS4rgNtwV3ROycTW18b6Ue6atlZnYsxtMZJUdAy4+72YAQALTPuzph8EOCumnpc05Qdtezc0PbIPgqGlalYvjuMp9YH8cv3AzilVMHV9R7Ulqgp/Y4yh9QTsWCkrZiN8PhZCNy2B+HxszrllMgmUsK38N5OT/kW3strTuQCihCYVKHjx1Pz8OXhHuw82or73mnB/1vZklJ7rr1DchUhAF8RwuNntd8RteWU4CvisJ1dYsHIu/JRBMZcj5bpd7c/BoCW6XenuYNEBESnip9T48EZlRpeaQxh3uZQau1Y3C/HOD2kF5l6a+fpx21BKe5Yt5Q0cuvwXzKd2hIC8BYjMOYGBGLDdIEZ9wAQgLcIQlGy4k7Jzu0n0lXSyMop5Ha27cahMKvbcrKf+R6BK+pVzKzx4Ev/D4ZlbEBKi/gPWt4Z2S5wxv+e9IdAYMbdvPZELlbsTS0bxBwSuR//ECDKCQxIRETkCmndfiKeldNhrTyPW9qyM+9j5FxWliVKZ1vZyC35KKPHOjnt26623ZrnSVc/Oe2biIgyFgMSERG5AgMSERG5gqumfacrv2SmbTvXQ5nJT1mZj0p2rJncQ9rWOJlsKxfYmTMy+noj65Cs3MrCCLeWNLKzbSuvH8A7JCIicgkGJCIicgUGJCIicgVX5ZASsTJXkyltu6UuXrJj3bL1up3bYqQz/2RnztOu3GyurGkyU2MvUV+yIYfEdUhERJSxGJCIiMgVGJCIiMgVMiaHlIyda5jc2rZTdfHMHpsp+SgzsqHGntVrh+xq28k1TWb6ZfaxVf2ys59ch0RERFmJAYmIiFzB0SE7IYRj5YHiz5tIpkwZNzOdNZ5bhgPdOvznluE+p/tiFTuH/5w81siQlJtKB2Uq3iEREZErmLpDEkI0AjgCIAIgLKUcb0WniIgo91gxZHeWlHK/Be0QEVEOc9W073Tkl5Kd1+y57dyeIl1tubUsEbeysJedZYfs7AenkOdO6SAJYL4Q4j0hxKyuXiCEmCWEWCGEWLFv3z6TpyMiomxlNiBNkVKOBXAhgG8JIabFv0BKOVtKOV5KOb5Pnz4mT0dERNnKVECSUu6I/X8vgGcBTLSiU0RElHtSziEJIfIBKFLKI7F/nwfgPst6dvL5Oj12cvzaqZL98cyOSaerrXRuj57oWLdsZUHmvs+5sKbJ6rYzpXSQmUkN5QCejV0oDcA/pJTzTPWGiIhyVsoBSUq5CcAoC/tCREQ5jJUaiIjIFVy1DskIO9cOmTm3U/klo+dyU1t21qMzc6yZfqWrLTcxkucx0lay9qzMR9m5pslMW1Zez2xeh0RERGQJBiQiInIFBiQiInKFjM0hJZONdfGSncuumntWjo1bfayV66XM5Cmc3Eqda5yMcern0a17KyU7l5lzW53r4h0SERG5AgMSUVfi/9LLkh05idzM8SE7K6eGWtGHrmTqlHG72s6U7dDNHtv2en3xz4BAE0Jn3wcIAUgJ/Y27Ib1FCJ15s+G23bQtRrqmlNs5vJzOYXAzn2dOTSFP1raVw25mf554h0TUkZRAoAn6e3+G/vpd0WD0+l3Q3/szROAw75SIbJS1kxqIUiJE9M4IiAal9/4MAAiN+xqCZ90bvWMiIlvwDokoXoeg1IbBiMh+ab1DcsuWyPHSlWPKlK3Uk7Xt1jJEPT5WSmiv39XpKc8bd5/IKfXgXHaWR7Ir72Nn/snJ3JVTZYfMtu3UFHKr22bpICKnSAl9QTRnFBr3NRy/ZSdC477WKadERPZgDomoIyEgfUUIjfta+x1R+/Cdt5jDdkQ2YkAiihOecgtka+uJ4NMWlBiMiGzlqoCUrnI/RmVjWSKntj832p6T65A6HavEjWY7WDooU7eyyMaSRnbmoxId7+Q6JDNts3QQERFlJQYkIiJyBQYkIiJyBVflkBJJZ/05Ixztp5Sdchsi2gHLz2v1e3IqX+WWGntWrzOyMleTjXmfZNxQTzO+H4B9a5rij7dy64pE/eI6pByiLHwQyqt3nFgXIyWUV++AsvDB9HaMiChFDEiZKFYAVFn2x/agpLx6B5RlfwQCTVy8SUQZKWOG7KgDIdB67o8AIBqUlv0RANA68cbo8zky9EJE2SVrAlKmrmFKuW+xoNQWjAAkDEZO7iETz8nadla1ZWWNPav3fHJqXVK69k7KJGa+z06taTJ6vJ1rmpLhkF2mig3TddQpp0RElGEYkDJRh5xR68QbEb5jP1on3tgpp0RElGmyZsgupwgBeIs75YzackosAEpEmSonApKb1zClmvtqnf69zuuQ2oJSD4ORk9fELeuOrGzLznVIRs5lZZ7Hypp7mZp/sjLXamavJbP5KDvXNBlpyygO2WWy+F/yDPmlJyLqCgNSror/S4Z5JyJKs5wYskvGrUN6dvVLWfggEGg6McTXNmPPWxwdCkxybjuH89xS4sjJrQSsnJ5uZqjHya3UM3VIL13S+fOY6rRvlg6i5FjlgYhcindIuYZVHojIpXiHlIs6ThOPYTAionTjHVIPuLUsUcr96qbKQ0+DUrq2Uk9n224pQ5TsWCfLECV6vZXbYsS3ly35JyfLedlVpojTvskcVnkgIpfiHVKuYZUHInIpBqQcZLbKAxGRHRiQTLJzHNiMpOP9Jx/g3LltygOZvfZmtrZ2qgyR2WMzJR9lhpEtONyaf7JyfZmdbXP7CSIiykoMSERE5AoMSERE5AqO55DMjNNnArfWxYuXzn7alQdyy/bnVrfl1m0ynMxHOZX3yZY1TvHs2mo90bGsZUdERBmLAYmIiFyBAYmIiFwhreuQ3Fojzk6Z8p7T1U8n63vFy8Qck5X5Kbfmo5LJ1rxPIm5Z/8hadkRElJUYkIiIyBVcWzooU6ZPWylT3rOTwwVOXhMrhynd0padw2xGzmXlNHA7SxzlIjOlhFg6iIiIshIDEhERuQIDEhERuYJrc0jJZEq+xUpufc/ZWIbIyHmMnsvOtuzMT7llm4xkrCxxlKn5JyvzvKlubeF46SAhxAVCiHVCiA1CiNvMtEVERLkt5YAkhFAB/BbAhQCGA/iCEGK4VR0jIqLcYuYOaSKADVLKTVLKIIB/AbjUmm4REVGuMZND6g9gW4fH2wFMin+REGIWgFmxhwFFUT4ycc5M1hvA/nR3Io1y+f3n8nsHcvv95/J7H2r0ANsnNUgpZwOYDQBCiBVSyvF2n9ONcvm9A7n9/nP5vQO5/f5z/b0bPcbMkN0OANUdHlfFniMiIjLMTEBaDqBOCDFICOEB8HkAz1vTLSIiyjUpD9lJKcNCiJsAvAJABfColHJNksNmp3q+LJDL7x3I7fefy+8dyO33z/dugMjGBaRERJR5WDqIiIhcgQGJiIhcwZGAlOslhoT4/+2cQYhWVRTHf39ESEZBBREXReamRYiKBIKEBLVoU0EIQmC7FglGG6FNKgghKu4miASF1CStXOpCsDYW2pjlgBJMCxlnFiI6myD9u7hnaBjmm0Hh+97z3fODj+9+5z3uO4c/757v3Xvf0ZikG5JGnmUr5POGpGOSJiX9OcO2UtJFSbfje0WTPvaLHrHvlXQn9B+R9E6TPvYLSS9KuiTppqS/JO0Oe+e1nyf2WrR/QdKvkq5H/PvCvlbSlRj7v4sNcL376fcaUpQYugW8RXl59jdgh+2bfb1wi5A0Bmy2XcULcpLeAKaAE7ZfC9tB4J7tL+NPyQrbe5r0sx/0iH0vMGX7UJO+9RtJa4A1tq9JWgZcBd4DPqLj2s8T+3bq0F7AkO0pSYuBX4DdwGfAOdunJX0FXLc93KufQTwhZYmhyrB9Gbg3y/wucDzaxyk3a+foEXsV2B63fS3aD4FRSkWXzms/T+xV4MJU/FwcHwNvAt+HfUHtB5GQ5ioxVI1QgYELkq5GKaUaWW17PNp3gdVNOtMAuyT9EVN6nZuymo2kl4GNwBUq035W7FCJ9pIWSRoBJoGLwN/Afdv/xSkLjv25qWEwbLW9iVIZ/ZOY1qkWl3nimt43GAbWARuAceBws+70F0lLgbPAp7YfzDzWde3niL0a7W0/sr2BUrXndeDVp+1jEAmp+hJDtu/E9yTwA0Ws2piIefbp+fbJhv0ZGLYn4mZ9DHxNh/WP9YOzwLe2z4W5Cu3nir0m7aexfR+4BGwBlkuaLsCw4Ng/iIRUdYkhSUOxyImkIeBtoMaK5+eBndHeCfzUoC8DZXowDt6no/rHwvY3wKjtIzMOdV77XrFXpP0qScujvYSyiW2Ukpg+iNMW1H4glRpiq+NR/i8xdKDvF20Jkl6hPBVBKdV0suvxSzoFbKOU3p8AvgB+BM4ALwH/ANttd27xv0fs2yhTNgbGgI9nrKl0BklbgZ+BG8DjMH9OWUvptPbzxL6DOrRfT9m0sIjyoHPG9v4Y/04DK4HfgQ9t/9uznywdlCRJkrSB3NSQJEmStIJMSEmSJEkryISUJEmStIJMSEmSJEkryISUJEmStIJMSEmSJEkryISUJEmStIInjTdK82RZi/IAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 504x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment