Last active
May 3, 2021 08:56
-
-
Save pseudo-usama/c380f884ae936549e1a15c6ae4447713 to your computer and use it in GitHub Desktop.
Using single perceptron to classify data in two groups.The perceptron is build from scratch using Numpy for learning purposes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Imports" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "jupyter": { | |
| "source_hidden": true | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from sklearn.model_selection import train_test_split\n", | |
| "from matplotlib import pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Some constents" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "BOUNDARY_LINE_FUNCTION = lambda x, margin=0: -2 * x + margin # It is just use to genrate points\n", | |
| "BOUNDARY_LINE_MARGINE = 20\n", | |
| "TOTAL_POINTS = 1000\n", | |
| "POINTS_X_AXIS_BOUNDARY = np.array([-10, 10])\n", | |
| "POINTS_Y_AXIS_BOUNDARY = np.array([-100, 100])\n", | |
| "\n", | |
| "TEST_RATIO = 0.3\n", | |
| "EPOCHS = 200\n", | |
| "LEARNING_RATE = 0.0001\n", | |
| "\n", | |
| "CLASS_A_CLR = 'red'\n", | |
| "CLASS_B_CLR = 'blue'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Perceptron class" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class Perceptron:\n", | |
| " LEARNING_RATE = 0.01\n", | |
| " \n", | |
| " def __init__(self, input_size, learning_rate=0.01):\n", | |
| " self._input_size = input_size\n", | |
| " self.LEARNING_RATE = learning_rate\n", | |
| "\n", | |
| " self._weights = np.random.rand(input_size)\n", | |
| " self._bias = np.random.rand()\n", | |
| "\n", | |
| " self._previous_weights = np.array([self._weights])\n", | |
| " self._previous_biases = np.array([self._bias])\n", | |
| "\n", | |
| " def predict(self, point):\n", | |
| " sum_of_product = (self._weights * point).sum() + self._bias\n", | |
| " return self._activation_function(sum_of_product)\n", | |
| "\n", | |
| " def predict_from_array(self, points):\n", | |
| " return np.array([self.predict(point) for point in points])\n", | |
| " \n", | |
| " def fit(self, x, y, epochs=1, mse_history=False):\n", | |
| " mse_arr = np.array([])\n", | |
| "\n", | |
| " for epoch in range(epochs):\n", | |
| " predicted = self.predict_from_array(x)\n", | |
| " self.update_weight_and_bias(x, y, predicted)\n", | |
| "\n", | |
| " mse = self.mean_square_error(predicted, y)\n", | |
| " mse_arr = np.append(mse_arr, mse) \n", | |
| "\n", | |
| " if mse_history:\n", | |
| " return mse, mse_arr\n", | |
| " return mse\n", | |
| "\n", | |
| " def update_weight_and_bias(self, points, real, predicted):\n", | |
| " dw, db = self._calc_slope(points, predicted, real)\n", | |
| "\n", | |
| " self._weights -= dw\n", | |
| " self._bias -= db\n", | |
| "\n", | |
| " self._previous_weights = np.append(self._previous_weights, [dw], axis=0)\n", | |
| " self._previous_biases = np.append(self._previous_biases, db)\n", | |
| "\n", | |
| " # Calculate the slope/gradient of error function\n", | |
| " def _calc_slope(self, points, predicted, real):\n", | |
| " sample_size = points.shape[0]\n", | |
| " predicted_real_diff = predicted - real\n", | |
| " activation_function_derivative = self._activation_function_derivative()\n", | |
| "\n", | |
| " dw = (2/sample_size) * (self.LEARNING_RATE * (predicted_real_diff * activation_function_derivative)[:, None] * points).sum(0)\n", | |
| " db = (2/sample_size) * (self.LEARNING_RATE * (predicted_real_diff * activation_function_derivative)).sum(0)\n", | |
| "# print((2/sample_size) * (self.LEARNING_RATE * (predicted_real_diff * activation_function_derivative)[:, None] * points).sum(0))\n", | |
| " return dw, db\n", | |
| "\n", | |
| " def mean_square_error(self, predicted, real):\n", | |
| " return ((predicted - real) ** 2).mean()\n", | |
| " \n", | |
| " # Calculate and return the slope and y-intercept for decision boundry\n", | |
| " def get_decision_boundry_m_and_b(self):\n", | |
| " # This method only works for 2 input perceptron\n", | |
| " # Todo: Have to generalize it\n", | |
| " m = -self._weights[0] / self._weights[1]\n", | |
| " b = -self._bias / self._weights[1]\n", | |
| "\n", | |
| " return m, b\n", | |
| "\n", | |
| " def _activation_function(self, input):\n", | |
| " # After changing the activation function\n", | |
| " # Also update the derivative of activation function\n", | |
| " # In _activation_function_derivative()\n", | |
| " return input\n", | |
| " def _activation_function_derivative(self):\n", | |
| " return 1\n", | |
| " \n", | |
| " # Some properties\n", | |
| " @property\n", | |
| " def weights(self):\n", | |
| " return self._weights\n", | |
| " @property\n", | |
| " def bias(self):\n", | |
| " return self._bias\n", | |
| " @property\n", | |
| " def previous_weights(self):\n", | |
| " return self._previous_weights\n", | |
| " @property\n", | |
| " def previous_biases(self):\n", | |
| " return self._previous_biases\n", | |
| "\n", | |
| "# model = Perceptron(1, LEARNING_RATE)\n", | |
| "# model.fit(X_train, y_train, epochs=EPOCHS)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Generating training & testing points" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "jupyter": { | |
| "source_hidden": true | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class_a_x = np.random.uniform(POINTS_X_AXIS_BOUNDARY[0], POINTS_X_AXIS_BOUNDARY[1], TOTAL_POINTS//2)\n", | |
| "class_a_y = np.random.uniform(BOUNDARY_LINE_FUNCTION(class_a_x, BOUNDARY_LINE_MARGINE), POINTS_Y_AXIS_BOUNDARY[1])\n", | |
| "\n", | |
| "class_b_x = np.random.uniform(POINTS_X_AXIS_BOUNDARY[0], POINTS_X_AXIS_BOUNDARY[1], TOTAL_POINTS//2)\n", | |
| "class_b_y = np.random.uniform(BOUNDARY_LINE_FUNCTION(class_b_x, -BOUNDARY_LINE_MARGINE), POINTS_Y_AXIS_BOUNDARY[0])\n", | |
| "\n", | |
| "X = np.concatenate((np.stack((class_a_x, class_a_y), axis=-1), np.stack((class_b_x, class_b_y), axis=-1)))\n", | |
| "y = np.concatenate((np.zeros(TOTAL_POINTS//2), np.ones(TOTAL_POINTS//2)))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Plotting points" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "jupyter": { | |
| "source_hidden": true | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.PathCollection at 0x17e6f0a80c8>" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "boundary_line_y = BOUNDARY_LINE_FUNCTION(POINTS_X_AXIS_BOUNDARY)\n", | |
| "plt.plot(POINTS_X_AXIS_BOUNDARY, boundary_line_y)\n", | |
| "\n", | |
| "plt.scatter(class_a_x, class_a_y, c=CLASS_A_CLR)\n", | |
| "plt.scatter(class_b_x, class_b_y, c=CLASS_B_CLR)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Splitting training & testing points" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "jupyter": { | |
| "source_hidden": true | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=TEST_RATIO)\n", | |
| "\n", | |
| "TOTAL_TRAIN_POINTS = X_train.shape[0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Training" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "model = Perceptron(2, LEARNING_RATE)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "_, mse_arr = model.fit(X_train, y_train, epochs=EPOCHS, mse_history=True)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Plotting MSE" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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4QUADh48yMSJE9m8eTM7d+7k2LFjvP/++zh3djvnxKv611xzDVu2bGHlypV07NgxqWYl0a5du7jtttt45513iIiIYOfOnfzvf/+jf//+Z60zISGBHTt2EBsby0cffcQ999zDoUOHSEhIYM6cOQwdOpRFixaxadMmxo4dCwT6oHzzzTds376dO++8k4EDBwKBhDIuLo6GDRsSFxdH2bJliYqKOue+LF++nA0bNtC7d+9UHbtEvXv3Zs2aNUyYMOEPfX1EJOspkDuKP3WryZTH2tCgfGGe/WoVV/93Lgs37fc7NBERX2VY0mFmb5vZL2b2Y9C0omY2zczWe3+LeNPNzEaZ2QYzW2lmjYLe089bfr2Z9UtuWxcxZgCS6wbYv39/HnnkEX744Qdef/31pM7RQ4YM4c033+TXX3+lefPmrFmzJlXbypUrF40bN2bYsGFcd911Z80vU6YMd911FxMnTiQqKorNmzene7/GjRvHpEmT+OCDD87ZfCcxYSlRogS9e/fm+++/B6BkyZLs2rULCPz4T2yuBLBy5UqGDh3KxIkTk67iT58+nUqVKnHppZcSHR3Ntddey3fffUfx4sWTfvxDIIlL3GaxYsXInTs3APfeey9LlixJ2saRI0fo3r07//rXv2jevDkQSHQ2bNhAlSpVqFixIsePH6dKlSpAoNahZcuWREdHU6lSJapXr8769espV64cDRs25PLLLycqKopevXqxdOlS9u7dy4oVK2jWrBkAffv25bvvvks6Jp9//jnLli3jueeeA6BQoUKUK1fuD7Uxifsyf/58lixZQsWKFWnVqhXr1q0jJiYm6Tju378/2eOYqE2bNmzcuJF9+/al9JGKZCtZsbxISZUSBXj3rit47dbGxJ9IoO+YBQz4eBl7jpzwMywREd9kZE3HWKBryLQhwAznXFVghvcaoBtQ1XvcB7wKgUIH+BvQDLgC+FtiwZMRzlfTcfjwYcqWLQvwh9GKNm7cSN26dXnqqado0qQJa9asoWDBgsTHx6e4vUGDBvHCCy8k/WBPNGXKFE6dCtzxdvfu3ezfv59LL700HXsUWNcLL7zAl19+eVaTn0THjh1LivfYsWN8++23SSMv9ejRI2l/x40bR8+ePYHASFDXXnstf/rTn6hWrVrSui677DIWLFjA8ePHcc4xY8YMatasiZnRrl07Pvvss7PWlZjU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\n", | |
| "text/plain": [ | |
| "<Figure size 936x288 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, (plt1, plt2) = plt.subplots(1, 2)\n", | |
| "fig.set_figwidth(13)\n", | |
| "\n", | |
| "plt1.plot(np.arange(EPOCHS), mse_arr)\n", | |
| "plt1.set_title('Learning curve (Linear scale)')\n", | |
| "plt1.set_xlabel('Iterations')\n", | |
| "plt1.set_ylabel('MSE')\n", | |
| "plt1.grid(True)\n", | |
| "x_min, x_max, y_min, y_max = plt1.axis()\n", | |
| "plt1.axis((x_min, x_max, 0, y_max))\n", | |
| "plt1.text(0, y_max-150, f'Last MSE: {mse_arr[-1]}')\n", | |
| "\n", | |
| "plt2.plot(np.arange(EPOCHS), mse_arr)\n", | |
| "plt2.set_title('Learning curve (Logrithmic scale)')\n", | |
| "plt2.set_xlabel('Iterations')\n", | |
| "plt2.set_ylabel('MSE')\n", | |
| "plt2.grid(True)\n", | |
| "x_min, x_max, y_min, y_max = plt2.axis()\n", | |
| "plt2.axis((x_min, x_max, 0, y_max))\n", | |
| "plt2.set_xscale('log')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Testing" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "predict = model.predict_from_array(X_test)\n", | |
| "\n", | |
| "X_test_class_a = X_test[predict < 0]\n", | |
| "X_test_class_b = X_test[predict >= 0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Plotting predictions & real data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": { | |
| "jupyter": { | |
| "source_hidden": true | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5, 1.0, 'True Classification')" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwYAAAEICAYAAADlU+ONAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydeZgcR3n/v7WrXUmrWytZlizvSL7ANyCFG3MTEBiHhIRjDeaKQIGEcIS1LSDmEAnXL1zGRgEH41muEA5rLd9gbDAGy7ZO37Kl1bG6VpJ1rKQ95v390T1Sz2wf1d1VXdU97+d5+tmdnp7qquqq96233reqBRGBYRiGYRiGYZjGpsl0BhiGYRiGYRiGMQ8bBgzDMAzDMAzDsGHAMAzDMAzDMAwbBgzDMAzDMAzDgA0DhmEYhmEYhmHAhgHDMAzDMAzDMGDDgCkIQoh5QggSQoyRuPY9Qog/ZJGvgPtvEkK8xv3/SiHE9xOms0EI8QqlmWMYhmFqEEK8RgixSWP63xdCXOn5/BEhxC4hxCEhxBT3b4eG+z4mhHiZ6nSZfBM5iGIY1bgCdg6AOUS0x3N+NYALAcwnok1mcpctRPQlmeuEED8EsJWIPu357bm68sUwDJMVQohDno9tAI4BGHE/f5CIujPIwwsBXAXgRe69nwBwNRH9SPe9iegDnnyMA/A1AAuIaIN7emLaewghygCeJKKrPPd9Vtp0meLBHgPGFE8DeEf1gxDifADjzWUnGTIeCoZhGCYYIppYPQD0ArjYc26UUaBa7gohXgrgDgB3AjgNQDuAjwBYpPI+kpwMYKzHKGCYTGHDgDHFDQDe7fl8GYCamRnXhfojIcRuIcRmIcSnhRBN7nfNQoivCSH2CCGeAvBGn9/+QAjRJ4TYJoT4ohCiOSpTnpCkxUKI7e7vP+H5/iohxC+EEGUhxAEA7xFCNAkhLhdCbBRC9Ashfi6EmO75zbvc/PcLIZbW3e8qdyan+vmlQoh7hRD7hRBb3LCnxQA6AXzKdSmvcK/1hiSNFUJ8w83zdvf/se53rxBCbBVCfMJ1T/cJId4bVRcMwzA24MrvnwkhfiKEOAjgUlcGX+W5pibcRwgxVwjxK1d/PC2E+HDILb4G4AdE9FUi6ieH+4no7QH5+bQQ4ikhxEE3pPPNnu/OEkLcLYR4xtVPP3bPNwkhvuXK4GeEEGuFEOe435VdXXA2gA3uuUNCiNuEEGNcnTTPPd8mhPgvIUSvm87drvxvcnXTDld/3OWmByHEPwF4G4Ar3XR/5Z7fKtxwVCHEODd/VZ35/4QQrd66FUJ8yq3P7UIIr/5mCgQbBowp7gMwWQhxtjtgfxuAct013wYwBc4MzsvhGBLVAe0/AngTgOcCWAjgrXW/vR7AMIAz3GteB+ADkOeVAM50f3d5dQDucgmAXwCYCqAbwL8A+Bs3j3MA7ANwNQC4gv8aAO9yv2sHMNfvhsKJIb3ZLfdMAM8BsJqIlrv3+Yo7g3axz8+XAnih+5sLATwfwKc9358Mpy5PAfB+AFcLIabJVwfDMIxR3gLgx3Dk2M/CLnR1Sg+A++HIvNcC+DchxKt9rp0ER17+IkZeHgfwEjcvywD8WAgxy/1uGYCbAEyDI+uvds+/AY6MPtP97u0A9noTJaJH4MjvqhfldT73/i8AFwB4AYDpAK4EUHG/63HTPxnAejgTcCCi78Kpsy+56b7FJ93PwtGlF8DRmS8BcIXn+7lwvPpzAHwIwDVCiMlBFcTkFzYMGJNUvQavBfAogG3VLzzGwhVEdNBdc/B1OANsAPgHAN8goi1EtBfAf3h+OwuOEP5XIjpMRLvgCFPf2Z8APuf+dh2A/4En7AnAn4jo10RUIaIjAD4IYCkRbSWiY3DiVN8qHHf3WwH0ENHd7nefwQkhXk8ngDuI6CdENOTOXK2WzG8ngM8T0S4i2g3gczhRVwAw5H4/REQrARwCwPGlDMPkhT8Q0QqP3A3jhQAmE9GXiGiQiJ4E8AP464DpAASAPtmMENHPiajPzcuPAWyCM6gGHFk7D8BsIjpKRH/0nJ8M4NluGg8T0Q7ZewLH9eJ7APyLe/8RIvqDK9crRPRDV18ehaOHFgghJkgm3wngKiLa7erMz6NWhxwF8EX3XjfCWQdyVpz8M/mADQPGJDcAeCccQVe/wGsGgFYAmz3nNsOZ/QGcWYstdd9VKQFoAdDnulT3A/gegJNi5K0+7TkB31Xv9yvPvR6Bs3htVn0+iegwgP6Ae54KYGOMPHqZg9F15c1zPxENez4PQMGCNoZhmIyol7thlAB0VGWyK5c/BWcmvZ69AAjAbNnE3RDPNZ60nw1HZwHAJ+Don1VCiHVCiMsAgIhuA3AtHA/yTiHEta63Ig6z4OjFUXpCOOG1X3FDnA4AeNL9akb9tQHMRrC+BYA9RDTi+cw6pKCwYcAYg4g2w1mEvAjAL+u+3gNnhqXkOdeBE16FPjgDae93VbbAmc2YQURT3WNyzF186tPe7s163bVbALzBc6+pRDSOiLbV51MI0QYnnMiPLQBOD/iu/p71bMfoutoecC3DMEzeqJeBh+HsYFTFO+jfAuCJOpk8yS8Mk4gOAvgLgL+TyYQQ4jQ4g/slANqJaCocj7dw0+sjog8Q0WwAHwawXAgx3/3uG0T0PADnATgHwMdl7ulhJ4BB+OuJd8PRpa+CE+J0RjXL1aJGpN2HYH3LNBBsGDCmeT+AV7kz6cdxZyZ+DmCZEGKSEKIER4hW1yH8HMC/uAvMpgG43PPbPgC3Afi6EGKyuyjrdCHEy2Pk6zPuIq9z4axrCItpvdbNZwkAhBAzhRCXuN/9AsCbhLOouBWOezao33UDeI0Q4h/cBWftQojnuN/thLPWIoifAPi0e+8ZcOJF69dsMAzDFIXVAN4ohJgmhJgNZ61XlT8BGBTOhgvj3Nn084UQCwLS+jcAHxBCfFy4G0cIIZ5bXThcx0Q4g+zdzmXiA3DDg9zf/YMQojrTvt+9dkQI8Xz3GAPHqBnEiS1ZpXD14g8BfEMIcbJbrpcIIVoATIIzIdYPx2BaVvdzGR3yWSHEDCHETDhhr6xDGhA2DBijENFGIloV8PU/wxGgTwH4A5yFZ9e53/03gFsBrAHwIEZ7HN4Nx+X6MJzFwL9ADFcxgN/DccXeCeBrrhs4iG8CuBHAbcLZMeM+OAvD4G4592E3731uXrb6JUJEvXBmfD4Bx71dfa8D4MTHnuO6rn/t8/MvAlgFYC2AdXDq5IuyhWUYhskZP4QTtrkZwC0Aflr9wg2bXARnUfEmOB7o78GJ8R8FEd0D4DUA/hrAJiHEXjhegZU+164F8C04XoY+OEbBnz2XvADA/UKIw3D00odd2T4Vjhzf7+apD87at7h8zC33A3D0xJfgeAX+B46XeDucnY3urfvd9wFcKITYJ4TwW2j9OTj6dB0cPfJneNbuMY2DIIryLjFM4+BuCfc0gJa6mHyGYRiGYZhCwx4DhmEYhmEYhmHUGAZCiOuE89KO9Z5z04UQtwshnnD/TnPPC/clGk8K5wUfz1ORB4ZhGIZhGIZhkqPKY/BDAK+vO3c5gDuJ6Ew4cdrVxaFvgPMCjjMBLIYTx8cwVkBEm4hIcBgRwzAMwzCNhhLDgIjuRt0b/OC8HfZ69//r4bwZtnr+R+4rx+8DMNXdUYBhGIZhGIZhGEOM0Zj2LHfbSBBRnxCi+nKpU1D7opKt7rmatw4KIRbD8ShgwoQJC5797GeD8WHvXmDzZqAS9DJdD62twPnn68+TIXr3DuDwsWE8e/bk4xs3V9m7F9i2DRgcdKrhlFOA6dONZLPh4LrPhgceeGAPEc00nQ/TzJgxg+bNm2c6GwzDMNYSpi90GgZB1I/ZAJ8XbxDRcgDLAWDhwoW0alXQjpaG6e4Gli4FenuBjg5g2TKgszO7+8+bJ2cUAMDQEGBrPSbFrf9DO3ZjwUfK+NBJhM9/6m9HXbJ4sTMwBZy/O3cCX/hCto+qEeG6zw4hxOboq4rPvHnzYK2+YBiGsYAwfaFzV6Kd1RAh9+8u9/xW1L5Vdi7ivKG1u9sZDDc1OX+7u9XkNgnVUc/mzQCR83fx4uA86ch7b6/8tR0d0dfkCU/933H683FsTCsuXv7FUfW6dCkwMFD704EB57zOrNnSTNOSpiwm6p5hGIZhmGToNAxuBHCZ+/9lAH7jOf9ud3eiFwJ4phpyFEncgbhu4ox6dOVddrAvhOPNKBKe+l9x9kWYfWA3FmxcPar+g2wn73mVA3nbmmka0pZFpu4ZhmEYhrEDVduV/gTOK8ifJYTYKoR4P4D/BPBaIcQTAF7rfgacNwk+Beetsv8N4J+kb2Tb9GOcUY+uvC9bBrS1hV8jBPChDxUvdsOt5/3jJuLu+c/Fmx69B02gUfUfZDt1dDgD3BkzgEsvVTeQt62ZyhBkGAWV5aMflTOkwuqeYRiGYRi7ULUr0TuIaDYRtRDRXCL6ARH1E9GriehM9+9e91oiog8T0elEdD4RyQeDhg3ETcRuxBn16Jo67ewEli8HSiXHACiVgCVLaj/fcAPw3e+mu48MWT8Dt55vOevFGGpuwcWP3F1zvoqf7dTWBixa5BgA/f2jk04zkM/bLHmYVyAoz/39coZUUN3b5rzKsukWKcyMYRiGKRhEZP2xYMECx5wolYicsUjt0d5O1NZWe66tjahcJq2Uy/L3Dcp7qaQ3j1kRpy4U3/Odb/sivfwfl1Ml5J7lslPVQjh/q5/9Hkn1ECJZtmx71H5l9xKW36g6kilf1P2zxC8vWTZdnfcCsIoskNemj+P6gmEYhvElTF8YF+Iyx3FB76dVqyM4UyMx2VGP7tGH6dGXodHwzv/ppvn/diN97WWXxi53ULNJm3UTNlKavATVgxDBXU6lIZUVQXXR3p5d09XZTfJgGAC4Ds5GFOs956YDuB3AE+7fae55AeBbcMJO1wJ4nsw92DDQgGn9wjCMUopjGBA5AilIk9s+UtElXG0YiYaNLjXywz8+TaWuHnpsx4HYvw2bDU9bfbboUZmBaNQ19WXJciCtkjjeD11NV2c3yYlhcBGA59UZBl8BcLn7/+UAvuz+vwjAza6B8EIAf5a5BxsGirFBvzAMo5QwfaFzVyI9dHYCEyfKXVuNNbclqLezE9i0yXnvwKZN6hYD27Da1dAq0xVrtuNZsybhrFmTYv82aN12e7uzbCPN49H1qOMis94hah1AfVm++U196wZ0dtW4azx0NN1GX4xNRHcD2Ft3+hIA17v/Xw/gbzznf+TqsfsATK1ugc1opL4TfvCD5vVL1tgyZigaXK/5IMhisOkYNQMUFQPindFohNkOQ7P1NRio5637BqjU1UPfvvPxxGnYMrOvC9nQlbj1oKPedDchG5Yo8RoDAoB5qPUY7K/7fp/7twfASz3n7wSwMCDNxQBWAVjV0dGRvjJtwIRwKlLsYFIaYcxgAq5XqwjTF8aVhMwxyjAI0vDNzaOFqG0rQXVgQxnrQ7za27V3+GvvepJKXT309O5DWu+TZ/Iki3U347C60GXo+KWpa7xXQMPgJh/DYEFU+spCiUzOGsTpuCrzqWK3gTwQVmdZ6tOiz0x5sWGcwhyneIZBHKFpw2y6blSM/rwCqr3dOeJMHxsYfb7xW3fTm799j9S1jSR/68lL2bPoqlnVhYkukWPD4DEAs93/ZwN4zP3/ewDe4Xdd2KHEMDBtUcdx9anMp4w3vnrYKkiiiKozGUGkQpCYbmNpSFL+RhiL5YjiGQZE8g2zUazUNIIqyn0cJawM1PHGXQep1NVD/333xshr08jfvAyqi0CRuqqJsuTYMPgqahcff8X9/42oXXz8F5n0lRgGphuj7CBKdT5lPQbt7SkLaJCoOgv7PmjzkyQDetNtLIowl2e9Qm1piZ5MtL28DUYxDQNZ8myVZ4WMMgjrvAZmAr55x+NU6uqh7fsHIq9NKo+y3t++0Q2QInVVE5NjeTAMAPwEQB+AIQBbAbwfQLsbJvSE+3e6e60AcDWAjQDWBa0vqD+UGAZRe/jq7qyyQkt1Q5NZY6CzU2ZRt1F1FiSIliwJr5u4A1ybZ9DDhLHMeMGvjdgq4HW3OUuVe3EMg6QVnHY23cKHqhQZ93GYsNK1wjWASqVCr/76XfT319ybqnhR8jerCQ5b5aUJitLd2GNggb5IQ9ADbGpyZkd1d1ZZoaCjodV3wiVLihV/J1NnfoIoakAcd0Bvwwx6kMANy5tsuJlfOUyv26m/t+42Z7FyL4ZhYKKCLX6oSknrMZCpJ4V1+UjfM1Tq6qEf3ft0quJFyd+sJnRs0A+MOlRGG8SBDQOFhoHMzLnuzioziNKlo0wM4GyfiVH9RkzT44uw+4cpP9lwMxs8H1WCyqr7pTwWK/diGAYmKjirNzmFCeEoAa1rEVRcYRWVD4XP78s3P0KnXXET7T54VCpLVRkVt0hZNTmbPcpMPIK6UgabdLFh4NUXKiiXnZ3ubB8EqR7EmxqwZikIk9RZ2IA4af2YnEEPU3BR6yxkjGYLBr/HkTVmVLc5i5V7MQyDMGtdR6cql7NRAmFCOEpAqxTgXgEVd1ciGWQ7SISgrFQq9NIv30mXfv++yOLUV001C7JFssmzzQRjU/iRybdCs2Gg2DAgihc2YVNDTIMpgWS7IDRp9esgah1N1NjDO15obVWrKFX3pTi7balscxa36WIYBkkXvCQl7H4qH2pSqz3qt7YhG9cZMRJ/qHcflbp66Gf396a+nQxZ6HoVBkhRxiRxMe2Nr89LkMjIYoKIDQMNhoGs3vFbmJrXsFNTs5w2deYgiiRoo5RknLKqrBcd7SCorLrfbmlxmy6GYZC1+yrMwlQ5mx4mhKMEtMVuqlHIdBCJ0fznV2ygM668ifYPDIbeLk9VQ5ROrlose7Rjk22c1VxCEGwYaDAM/DpXa+toHWBTQ0yLqVmV+sU5eZ2Jzwu2Kg4dfSkqMkOFUROUjqXGZDEMA6LaClY9NVf/8IJiAuoPXZZsETwG9XUatbtFxGh+ZKRCz192O73/h/dH3tr2qlFJI5W1HpsMwDCxlIUuYMNAg2FAJKfYbWqIaUk7YKwf4MukYeMgNYlhY+EAMBQb86yrL+ksq43tN4LiGAZeVI6G/B5qS8vouLmgBqvTks1qjYFqkuQt4pnet3EPlbp66NcPbdVy+7xiy5jEhI6xySgK81ZnARsGmgwDGWxqiCpI2pmjPPtB9WFb/cVVIFkoHBsH8TqwrS3IkMM8F9MwUNkRwzS6tyMGCTudlmyUMDAtLILun6SjRDzTK3+5lp796Zvp8LGhVFnLkizyYINMMmWI2WQAZpkXv3bFhoFiwyBujHXSh2+DoFJF1JqMIF0pM7uRZT3FFaq6hbBNgk43eSyrLbNzMTBmGAB4FoDVnuMAgH8FcBWAbZ7zi8LSCRT0qgSF7EO1YQRmE2EdOGlHCXimg8Mj9NzP30Yf7n5Ae7HS4g05TrJNapL7mZajJruGTeOqLPIS9LyBGU+RRnmel0PbewyiOlWSh29D51VJ0r3+owRI1vUUV3/pHhg22tjDJqEug8nt6BJihccAQDOAHQBKrmHwSdnfancNy3Y6HcIpbx3AS5r1ETG567FdVOrqoVvW9yksgHqiPOm6ZIXpZpTDCZNM0PFcgidlLzhGGclzmw+tbz5W2XnL5eD3JKi4T5LFkGkbbJjHIE0oTlYDY++sjkrDJi0sYO2lXB79NnTACUW3eDxni2HwOgB/dP+3yzCIM+BXqenzPlsUJqyWLFE6Xf6Jn6+m8z57Cx0ZHFZcCLVEedKLKssbbUJLBl3dO3hSdgFRRvLc5kOJvgib+VZh4UXNIKgIT/VrfGHbqqposEHlktlhKEy3ZhFqFPVMTK4xYAEbjsmZsSBvQVaLyxJii2FwHYCPuP9fBWATgLXu+Wlhv81kMVmjr5xMQtjaDL+3iy1Zkug2R4eG6bzP3kIf/9lqtfnXgMx7VPLyeOOQdxtXB7q6N3sMMjAMoix8XbvR6W4kYR4KVQ02SzeZylCjKE9BGsMmLbyGJRiTysdZ3OV/WD4DaNwwANAKYA+AWe7nWW5oUROAZQCu8/nNYgCrAKzq6OjQW0OmyLt7MKhDKo63u3V9H5W6euh3j+6UypJJGah7PGEzputeFm+0QHWclHSCMay8Onfd4zUGmg0DHTGB3gYTlm71ex3r5sLuaZs+8tZXe/vocA3VoUa2lb8eXsPij8kJ1iRhZ5Zgg2FwCYDbAr6bB2B92O+VCXrbRi159xgQ+derYgH74e4H6Lmfv40Gh0cis2JaBvrlQYWeZ9QQNt6Lu1W7gvf1pSpHfbfjXYkU6gui6HjzOPJMxtBQOZNg0mOgAr/68nuxXBUVOsem8quiiGWqx6RBZ/rlNSmwwTD4KYD3ej7P9vz/MQA/Dft9akFvw4gxT/lKi0JhdPjYED370zfTlb9cm+VtU2GjDco4qIrgkGlrUd1bdTthw0CxYVBFhWCRXXykSoCZWmOgirh1ruIZmQ5J0aE0TA6as1KENnoMVK4v0FSPRg0DAG0A+gFM8Zy7AcA6d43BjV5Dwe9ILehtGTH6UcRRpEIB+5vV26jU1UN/2rgn8lrbPcGMeWSiONKkU//7sI1hVI9B2DDQZBioeFhhDU/Xe3LCGl+QzjGhj1R4nVV1qCzL7/VI6drX2tTYJ0sjy7RBp/PeGtM37jFIe6QW9DxizB5FAvYD199Pz192Ow2PVCKvNSkD827bFaEMMmTpMdD5ez/ybBioeucNqdAXfqTtIDIPXGWjyEuHVrlOLS9lJtKzhkX2PlkMmrNWxiafvc57a6xHNgxs9BjkSYhVyTjP+wcG6cwrV9Lnbtwgnb2sN25QIXdNNwWbIgh0E2eNQdTEapo60zFXkWfDwHukeecNqdAXOpBpMCpnvfPSoYN084QJ2bwd0hSyoWUqMKFgGnUyVnVda6xHNgxsE5S25UcGA3n++f29VOrqoQc375XKXlXWxt1pJk3R0tqcOqo1rmxKUgbTxkwaZNqK7DguaR2EhaYmTbNAhkHid96QCn2hC5kGo6Jj2TgRFoTs7kkptru2kqLva52nNqgKHcqcPQaaBb1NI5k8dhoDeb70+/fRS798J1Uq4WFEaftjmqKlNehl7y3bfJPURdx3B7W3OxuE5MmujYvu5u73nFpa0tVrgQyD2O+8sWZ7axv0TJ5ma2VmzrPQj1k/t6hy512g2jr5Wa/Igna5kk3D+zsdSoPXGGg2DGwiT4K7SsZ53n3wKJ12xU305Zsfibw2bX9MUzRd966mIbOFd9r8RP1GJhxWt97Omiyae71+Sfv6jyIYBkneeVN/GNMXtgyG8jTxJCtcdOpHE8/N755F29faBiO5Pj9J32wdlkb1dzpfXKOhHtkwsI08Ce4qGef5R3/aRKWuHnp4+zOR12Y1a++HLm9FUk9zkrqIKoPspJ7Ndm1cTHTRtO24IIZBqnfekEl9YYtct8VAkUW1hRwXU8/NtoFz0ZFRZFHPPKytyMywWfS82TCwjbwJbqLM8/z3195Lr/76XZFhRERm4vxVeCSD7h0n7FZVXYTJLNn82GzXxsVEF03bjgtiGKR65w2Z1Bc2eYItG4TEIuvOZ9NzY/Qho8iinnlYWwlrtxaO+dgwsJE8Cu6M8rx9/wDNu7yHvnH749LZynJnINV9vP7eMoPwoAFjluufLJJxWsi6i8Z5dn55y7thoOKdN2RSX9jgMbBdr8RZLJVVObJ6bmnKZOq52t6e4iDrMQgrc1KvgA2yoQ42DJhc8d93b6RSVw9t3HVQ+jdF0iNpB+Kq6yJooWxSLwkTjOzGNX4GBDDjKbJAXps+GnaNgen7R2Fb/qqdrTrjGydfcYVsmrKrqjfdebbdiJBZYxD2ZvCgNGSehcwLDjOuLzYMqtjecPOExrp887fvoTd+625l6alGt+fZT/a0tpodiHPXsYdgw/GCY2SBvDZ9GJ1IMtlRLJyVrMGm/KVZ/JtkcJim7DK/jWp3uvNsm9EXRFQMsIq69sNCtzsbBkT5abh5QGNdbtpziEpdPXTtXU8qyKgestBvPBBnggiefFpAZIG8Nn00rIfZ9lh5m/Kne6BeT5qyR802y2xbpzrP9Qoq6wXjutC5s5BlW/uFGQZNaBSWLgUGBmrPDQw455l4aKzLnrV9AIA3XjA7dVq6WLYMaGurPdfW5pxXRWcnsGkTUKk4fzs71aXN5JuOjqBvhgazzAdjGUENI7jBZItN+evtjXc+7W/TlD3sGiKgvx8YGqo9X6+PVeZ5+nRg8WJg82bn/ps3O3mIm76N6GqjnZ3A8uVAqQQIEXydJfXVOIZBGkHA1KKxLles2Y4FpWmYO60t+mJD1PfxUsn5zIN3JguCDFNg+zYT+WEsIYsZizTYlD8dA3W/893dwLx5zuC5fkAoW3a/epPBq4+TlDdY0IyeGAzCFqNUFp1t1DvbVyr5X2NLfQW5Emw6lLiGbYpvzDua6vKxHQeo1NVD//OHp7QsoM1zaE6W+c97XTUCRdyVSNXRsKFERPZ3Xlvyl8Vi4DTrGPzuWa23qHCUoLj4JOX1e16yechrqHYWbTTtFnQKCNMXxoW4zMFrDCxDU11+/dZHaf7lPfS+fzoSe5MIA9nNjCzzn/e6amTYMGDDgImB7u1DdU1GJl3IqmqAGXT/9nY7jL68kGYLOgV1y4ZBFVtmK4qA4rqsVCr08q/8ll71+T8FTkgklad5dRaFbZKgK/95rSsZit792TCwxDAoekNTRdHrKcuFrFluW8ezR9mhUSEX1zAoumDxo6BlXrtlP5W6eqj0ys2BA+Gk8tSmzTCqJNldLov821hXKmgEXcaGgQWGQSM0NBU0Qj3pnGUxPQ4wff9GQaNCzr9h0No6ugE2gmCpp8BlXnbTw3T6FTdR8/hjgQPhpJ5K22bBZR6jjLeYPQbyFLVcXtgwsMAwaISGpoJGqKcC62smIwx5DPKxK9HgoFMdmzc722R1dzfm9qMFLXOlQuhZsx0XnTUTc09qDbzu4MHaHdKqTSEKmzbDAOQeY9QGT7ryb1tdqaJIm5JVNzppanL+yvQBJiOK1NB0orOeVHWQtOkUafs6FjpmMKWQgywGm44FftZSUWMewihomcvzH/0AACAASURBVO9/up9KXT30ywe3BG7kMGFCOsPZJs+nzGOMWlvAuxLFoygTlGGTkGCPgaMv2GNgP7rqacmS0QI2ySx93mb7dQrtvNVF0SjirkQANgFYB2B1NSMApgO4HcAT7t9pYWmMMgyqFdRoArigZf7sr9fRWUtX0sGjQ0QUb4c0lTZRVgNimcfIslgtRanPsLbDhoEFhkFRGppudNRTmKKIqyPzomvLZf+3Dqtsc3mpizCKONuVEhsMgxl1574C4HL3/8sBfDksDV+PQSMK4AKWeWh4hBZ84TZaUl4Vep0u2eTd+UflFqlR95TdBptlmTqKUJ9hBjIbBhoNgziNJ28NzVR+Vd83zM0adwbJFu98WB1F7VChauBuS10kpYDjJhXYaBg8BmC2+/9sAI+FpbEg6IHaJICzyotNZVbAPY/vplJXD61cuz30Ol0TTFE7/+iaFCnYY2Qygj0Gmg0Dv45Z5IFFkcoW9uKt5uZ4wtaGWfKoZxO1Q4WqgbsNdZGGvOdfE6YNg6cBPAjgAQCL3XP7667Z5/O7xQBWAVjVEbdTZ025TNTSUtvoWlrszKtlfOp/19A5n7mZjgwOR16b5QRT3iZFmMaA1xhoNAyCKtcvVKMoA4siDZpkBLqs4WODwRT1bKLeQKzqGdpQF2nIs8dD4wyiacNgjvv3JABrAFwkYxh4D+MvrIkiSHG0t5vOmdUcGxqh8//9FvrXnz5k5P4yb3bPo35kikt9SHF7+wldkXfDQMV6NEqjL2QHlnkaWESR50FTPTIu4DiC3bRbN+rZhLVX1QN303WRhrwav5oNsjB9oX27UiLa7v7dBeBXAJ4PYKcQYjYAuH936c6HVvr7451nAAD3PLEbB44O4+ILZxu5f0dH+PdF2KaTKQ7d3cB731srVg4cMJcfTbySiJ5DRAvdz5cDuJOIzgRwp/tZD3G3yowSIHkgqAx5LJvf9qBByDzrzk5g0yagUnH+dnbWbts5Y4Zz6NrCM+rZ+G1lCQDt7eq3RfWri7yQ1z24DW5Pr9UwEEJMEEJMqv4P4HUA1gO4EcBl7mWXAfiNkhvyXru54sY12zG1rQUvPWNm6HW6HqufvBDC+ZvVltPcZBlZPvpRYGio9tzQkHO+wFwC4Hr3/+sB/I22OwUNxNrb8zmwkCGvg6Yg6gewQcZBEsOnu9t5eU71ZTr9/c5BFO/FOrJEPRs/Q6hcBvbsydfAXTd5fZ+EyXeiBLkSVBwAToMTPrQGwAYAS93z7XBmf55w/04PS0fKNWwyDo5DiWIzcGyYzv7MzXT5/60JvU73YzXpIc176CaTLWGREc73uQ8lehoJ1qO550+sSevoSFbBYR3SdCiF7n3q8xomEoVKIWvidfRFfjZMOJpDoML0hXFlIHNIGQYm48jKZaLW1tr7Njc7hkF9h1bV0dOkY4Gw6VmznUpdPfTHJ3aHXpfX8EAZily2pFjQNK2lAQyD1OvRSFZfBGFjA1T10q5GRdUzlVmUlse1GYydaO73jWEYmF5E5RU+7e2jDYW2NudBq5i9SDMLYsk09Qd/tIoWfOF2Gh6phF5n+rHqpMhlSwJv7hVOlGMy74aB9wBwFYBPIubW1iSrL/KCypd2Mekw4TFgGhM/ZQg4Y0hFhOkL7YuPM8P0IipvbOPEicDgYO33AwPA976nZjFJmkUpWS5oCQigP3h0CL99bBfedMFsNDeJ0CTiPNa8xeubbrK20aAx9NJ885tAa2vtudZW53zeyXw9WlqyEjZLlzpDAj+yiDXOM6qfUdBi3yq61mbkTbEx6fFThgDw859nc/8gi8Gmw/o1BvXIuByTThE7G5YnTyeraeqQ5/F/D2yhUlcPrdrUnyaZRNeZIMiTrTLPNkZAxCUqVIYJf87IsccAitajkay+SEOWwiZMl6icnS6CAPGi6xnVRwb4hQurxGbFxugjA2UYpi+MKwSZQ1rQ2yLc4u6HLSvgVbwCPavA9pD7XHbdn+nF/3EnVSrhYURVZB6rrfH6UXJdRZMtiu5gwyAdeTYMVB7aDYMshU2ULlGxfi1taKoNOrceWxVCXIpSjrjY2q6ygg0DCwR9Wuobsd9agrBDttGreKFJVqPIgJmu/rYpdPoVN9GXVj6cxe2Mx+tnIdeLojt4c690sGGQkb7IUtjIvLSrrY3o1a9OvlAxqQCxeUYizjOyeRBqq2LTCS82y0QZsmGgkyDhuGRJrbBR8aDD3Mq27UoUoGy6X/VOKnX10Lqt+7O4nfHBcRZyXeU9TG/fWr9mv7VVXx5sHg8kgQ2DjPRF1sLG21Cbm4N1QNI8JRUgWdRD0k4qmzebjRsiNXWcN0HHM0SZKEM2DHSSpQCKIyR0C4Oo9P3KKwS9/RM/pFd+9XfSYURxsmOjfM+Tx8CGOsxKh9lQVtWwYZCRvjDZeHSsXwsaiEUJEN2zHlnsvmfTjJKf8Evb1vIo6MLacyOhWRmyYaCTLF2WtqzElU2/bh/enROm0bxP3Uhf//ov1OTDJ1sq+1Fe4v9V3SNIRzY3h6dlYkIq7T1tGg+ogg2DDPVFlo1ep8fAL2wDkJud1N2J0qYv84xsCdUJE+Jp2loeBR0bBpnAhoFOTLqVTa3ElU2/7rrrFlxMpa4eeuL850sXxRQqB/RZlFPFPcImI4PKbmJCSsU9bRkPqIQNgxzoi7jIrDEIa8xJB/cyYRu6O38WndSWgbOufKiqwyyVdRahRDYPPjKCDQOd2Oiq0y1QZdOvu+5vLv0avf493yISwspq86IyPCcv8kdmAxTZ3+jUqyruGTeNcrlWX7W32/cs2TDIgb6IS5gbL2yzCyHkXoYkK8uDBFkaARf12zRGS5w82KCIdOlsVWsUsqwj3fH1tjxzw7BhoBvbRn+6R2uyFr0nH71TZlGpq4eufsFbiUolayZqglAhp/Mmf6ImJ/3KrkOfRXWnrJ+Nn54C7Nsogw2DnOiLOKQduEchI4h1CDKZNLPqeKpiRm2MbVTx7OIaaFnVp8423wCwYdBo6B6RyhoGnnx89wV/R6WuHuo9uURULlsfymFiVtoGyuXgMOYsPAYyTTdrb06YJ8WmZ8mGQQH1hW4hkmWH8yKbZtjCaFsm5FToW506O209xdkNMavZsDT3sX3wkRFsGDQiOoVmggXXb3jPN+mS93/7eD5sHzSbimMPe2x+3+l4zHFn01XqAVMTmGGE6UWbdAkbBgXUF1k09ixcdPUkDEcdVQ9ZCYEwVIXr2BqrGGdmJCvFnuY+cX5r83NJCRsGjFpidsondh6kUlcPff+ep46fy0OYTdbe4bA68fuutXX0hiImJplUGie6IyeSwB6DfB2F0xemZ8Z1DPYShKPWHHHcmrpJazjZrgzL5WABKGvIqX6pTpr7yNZ3XmJIE8KGAaMWv45V7ag+iuu/bn+M5l3eQzueOTIqGRs8wbqIK+/DQjnj7FJo02A1LjZ6kvKiH9gwYH2hBR0D1wThqDX3lh2oZkFaoaVzfYEqBSv7rguVcZ5hbS7tfWTqJi8zQglhw4BRT7VjeY0Cnw5cqVTolV/7Hb3te/eaza8h4sjmuO8uskk3qsLWybM8eJTZMGB9oQ3Vszhp3/9j0wxCWqEVd/Y76Fl4z7e3q3Unx5ll1/lSnerzzUJR5CWGNCFsGDD6iOjA67ftp1JXD5Xv2ySdZNE9CUGETVDEOfI+mVHk56+zbGwYsL7IDVGzsVEdw7YZhDQdO27Me325W1qIJkzQrxxky6hCyMkYS7oVBXsM7D5Y0FtMRAf+j5WP0GlX3ET9h45JJWezvG9vdw5dcsiv7GGHjjUGRR2Uy5RLd9l1t202DFhf5IYoYSfTMYoirOIIhrSzR3mZ6bbBI5SXGNKEGDEMAJwK4HcAHgGwAcBH3fNXAdgGYLV7LIpKiwW9xYR04EqlQi/+jzvp3T/4s4rkMkeF7kpyT6+uCwrtbG523l+kMrzFNqNMFTLlyqLsuts2GwasL3JFWEhQQWZlpZE1ctLGm+alTm1RRmljSC02Xk0ZBrMBPM/9fxKAxwGc4xoGn4yTFgt6iwnpwA9s3kulrh7631VbpJNLutmAjv4nMzmjW84GVa/fy07Tyk2bjDKVyJQri7Lr3j6bDQPWF7kkq51sdJOFezmNxyCpgjBVpyrvG5aWrvLZYtwEYEUoEYDfAHgtGwYFJKBjXXXjejpz6Up65sigdFJJBmi6+p/M5EwWntms1t4V9b0vMuXKouzsMQjVD+xhblSy2slGJ1m5l+PEm44Zc0KwVV3MKu5n0eBWirAy6Cyf5TNtxg0DAPMA9AKY7Ar6TQDWArgOwLSA3ywGsArAqo6ODr01xChneKRCC794Oy3+0f2xfpekn+rqfzKTM83NZmSkjoGs5XIsMbZ4DHiNQaiOYA9zo5LVTjZB91YxW5yle7neM+EXBz9xopoFaEVQCmFl0Fk+y2fajBoGACYCeADA37qfZwFoBtAEYBmA66LSYEGfP/745G4qdfXQijXbYv82rqzW1f9kJ2dMTKDokGdB5Q0Lq7Q4hPI4tqwxqN6HdyWS0hvsYW4kstrJpv6eqjq9SfeyTpey5YNbKcLKoLN8lhtVxgwDAC0AbgXw8YDv5wFYH5UOC/r8cfn/raWzP3MzHT42pP1eOvtf/eRMU5MdfV3XQLZ+rVVY2nnyMtuwK5FuimIYsIeZSURcRaBScdjmXlY14A0qV1BZbBSipjwGlitIU4uPBYAfAfhG3fnZnv8/BuCnUWmxYZAvBodH6MLP3Ur//OMHM7lflv3PpgkUXTJYVlZaPiFSCOI84yIYBuxhZhITVxGoXvRsk3tZ57qNoLLYOhA2tcagem/bDCUXU4bBSwGQO9NzfOEYgBsArHPP3+g1FIIOFvT54reP7qRSVw/dtmFHZvfMqv81wmBYVl+Gec+Z+NS34bg7T+XdMGAPM5OaOIpAtTC3yb2scsBbLjsegqiy2KwcTexKZDnGFx+nPVjQ54uP/ewhOv/fb6GjQ8Oms6IcWydFVJLWYyBEseojC/zaVZDhFaRn82wY2OJhPjo0TCMjlcS/Z3KEbmFu2r2scsCbZms3ninyx28mKEMDJUxfjAHDKOTo0Ahu27ATi84/GWPHNJvOjnI6O52/S5cCvb1ARwewbNmJ80Vg2TJg8WJgYODEubY253z9de96lyP5vRA59VOkOtHN0qW19Q2Mrtcqvb3682OAlwB4F4B1QojV7rkrAbxDCPEcON7nTQA+qDMT/333U/j2b5/EqdPb0OEetf+PR1srq81CoFuYd3QAmzf7n8+Czs5syxJ0jRBAdzcrBC/d3bVKdvNm4JprTny/ebPzPWCk3gQFaR+LWLhwIa1atcp0NhgJblnfhw+VH8QN738+XnbmTNPZYRLS3S2nL4Xw/70QQKWiN49Foqkp2BCop1QCNm0afV4I8QARLVSasRySRl/cu3EPfvfoLvTuHUDv3iPo7T+Mw4MjNdfMmDgWHdPHjzYc2tswa9I4NDUFdAqmsagf/AHODMvy5fkbJMuUpbvbf6YICBZajcq8ef5GVD0a6y1MX/DUB6OUFWv60D6hFS86rd10VpgUyE42lUpmJ8VUEGUEyRpJaQibbPPqWT/PDaOOF58+Ay8+fcbxz0SEfQNDrqEwgC17B9Db7/x//6Z9uHHNdlQ8z6e1uQlzPUaD13A4dXobJo5lldswFMm9LFOWzk7g0kv9f19QN2diZOvDUL2xlGKUcejYMO58dCf+fsGpGNPcZDo7TAbIhh3Zip9H1+vBjfpeFUH1eNllwMqV+R9X5BUhBKZPaMX0Ca14zqlTR30/OFzB9v1Hag0H93hg0z4cPDZcc337hNaa0KTjhkN7G06ePA7N7G0oFirDeUwjU5a8zRSFzfronBEKmgnyu84AbBgwyrjzkZ04OlTBm58zx3RWmIzI+6SYX2z/wMCJNRJR36si7/XYqLSOacK8GRMwb8aEUd8REZ45csLb4DUcHtqyDzet68OIx93Q0iwwd1rVwzA6VGnSuJYsi8Yw8cnTTFHYrA+gd0bIr57qMVhvvMaAUcYHrr8fG7YfwB+7XsVxtozVVCeDgiZtqmskgmL/bVxDwWsMHPKiL4ZGKujbf9TXcOjdO4BnjgzVXD+trWXUYujq59lTxrGXlrGDLGIvVRAU518qOX+DvlMV819fT4sWZeoe5jUGjHb2Dwzi94/vxntePI+NAsZq/NbR1VP14JreWIQpLi3NTehod8KI/HhmYAhb9g2MMhzWbXsGt6zfgWGPt2FMk8Ap08YHGg5TxrO3gckI28OnomaFwuL6Vcb8W1xPbBgwSrh1ww4MjRAuvpDDiBi78QsP8uL14ObJM84UiyltLZjSNgXnnTJl1HfDIxX0PXO0xsNQNRxuXteHfQO13oYp41t8t1/tmN6G2VPHoYW9DUwjEGdWqIFnhNgwYJSwYk0fSu1tON9HiTGMTYRN+pRKtR5cjv1nbGRMcxNOdQf5L/b5/sDRIWypC03q3XsED/cdwG0PO5M4VZqbBOZMHRdoOEwZ3wIRtC8xw+SJOLNCDTwjxIYBk5rdB4/h3o178E+vOIMVCGM9QeFBQeGjFnt8GcaXyeNacO6cKTh3zuiJmpEKYceBo+jtrzccBnDbhp3oPzxYc/2kcWN8t1/tmN6GOVPHo3UMexuYnBBnVgho2BkhNgyY1Ny8vg8VAu9GxOQCleFBeVlnxzBVmpsETpk6HqdMHY8XnT76fTOHjg0fNxi8hsNjOw/izkd2YXDkxKr7JgHMnuJ5b0N7reEwrY29DYxFxJkVCpoRagChz4YBk5oVa7bjWbMm4axZk0xnhWEiURUelNU7DhgmSyaOHYOzZ0/G2bMnj/quUiHsPHj0+EvevIbDnY/uwp5Dx0alFbT96inTxmPsmOasisUw6WeFGkTo83alTCq27T+Cl/znb/HJ152Fj7zqTNPZYZjMCNvtTtNb7EPh7UodWF+YY2BwGFv2+r/wrXfvAAaHT3gbhABmTx5Xu6bB43Fon9DK3gZGPWlm/G0T+ing7UoZbdy0djsA4E0XcBgR01gEhasaeos9wxinrXUMnnXyJDzr5NHe40qFsPvQMcdIqPM4/P7x3dh18FhdWs2B26/OnTYe41rY28AkIM2isQYR+mwYMKlYsaYPF8yd4vvmT4YpMvyOA4aRp6lJYNbkcZg1eRz+at70Ud8fGRzBVp/3NmzuP4x7ntiNo0O1bxQ8efK4WsOh/cR7HGZOHMveBkY9DSL02TBgEvP0nsNYt+0ZLF10tumsMEzm8DsOGEYd41ubceasSTjTZ60akeNtOB6a1H/kuOHwxyf34P8OHK1Nq6UZp04PfuEbexuYRDSI0GfDgElMzxo3jOjC2YZzwjDZw+84YJhsEELgpEnjcNKkcVhQGu1tODo0gq37jvi+8O3ejf0YGBypuf6kSWNHb7/a7vydOXEsmprY28D40CBCnw0DJjEr1m7H8+dNx+wp401nhWGMwO840I8Q4vUAvgmgGcD3ieg/DWeJsYxxLc0446SJOOOkiaO+IyL0Hx48saah/4ThcN9T/fjV6m3w7sEydkxTjZeh9v/xaGvlYVND0wBC31gLZ2Gfbx7dcQCP7zyEL1xyrumsMAxTUIQQzQCuBvBaAFsB3C+EuJGIHjabMyYvCCEwY+JYzJg4Fs/rmDbq+2PDI9i274jPLkpH8Oen+nG4ztswY+LYmu1XO9onHP//pEnsbWDyjxHDgIV9/lmxZjuaBPCG8zmMiGEYbTwfwJNE9BQACCF+CuASAKwrGCWMHdOM02ZOxGkz/b0N+waGardfdT0O92/ahxvXbEfF421oHdOEU6fVvrPB63GYMJa9DYz9mGqlLOxzDBFhxZo+vOSMGZgxcazp7DAMU1xOAbDF83krgBfUXySEWAxgMQB0FGyHEMYcQghMn9CK6RNa8ZxTp476fnC4gu37/d/bsGrTPhw8NlxzffuE1uOGQqnuLdGzJo9DM3sbGAswZRhECnsW9Paydusz6N07gI+88gzTWWEYptj4jZRGvZWTiJYDWA44LzjTnSmGARwPwbwZE3y36yYiPHNkaNRi6N69A3hoyz7ctK4PIx53Q2tzE+ZOG++7vuHU6eMxaVxLlkVjGhhThkGksGdBby8r1mxHS7PAX593sumsMAxTbLYCONXzeS6A7YbywjDSCCEwta0VU9taccHc0d6GoZEK+vYf9TUcVm/Zj2eODNVcP93jbeio24p19pTx7G1glGHKMGBhn1MqFULP2j68/KyTMGU8z2AwDKOV+wGcKYSYD2AbgLcDeKfZLDFMelqam5wtUtvbfL9/ZmAIW3xe+LZ2637cvK4Pwx5vw5gmMcrbcNxwaG/DZPY2MDEwZRiwsM8p92/aix0HjuKKRc82nRWGYQoOEQ0LIT4C4FY4O9hdR0QbDGeLYbQzpa0FU9qm4LxTpoz6bnikgr5njvq+t2Hluj7sG6j1Nkxta/F92ZvjbRiHMc1NWRWLyQFGDAMW9vllxdrtGNfShNecPct0VhiGaQCIaCWAlabzwTC2MKa56fiORy/2+f7A0SFs8dl+9eHtB3Dbhh0YGjnhbWhuEjhlqv9bojumt2FKG3sbGg1je2exsM8fwyMVrFy3A68+exZvu8YwDMMwFjJ5XAvOnTMF584Z7W0YqRB2HDiK3v56w2EAt23Ygf7Dg3VpjTn+Vuh6w2HO1PFoYW9D4eDRHSPNvRv7sffwIN584RzTWWEYhmEYJiZVD8EpU8fjRae3j/r+0LHh4waD13B4dMdB3PHwLgyOVI5f2ySAOVPHj9pFqXpMbWuBELwoOm+wYcBIs2LNdkwaOwYvP2um6awwDMMwDKOYiWPH4OzZk3H27MmjvqtUCDsPHj3+kjev4XDHI7uw59CxmusnjR1zwlioe2/DKVPHo3UMextshA0DRopjwyO4ZcMOvO7ckzGupdl0dhiGYRiGyZCmJoHZU8Zj9pTxeMFpo70Nh48NY+u+0S98e3L3Ifz2sV0YHD7hbRACmDNlPE6d7u9xmD6hlb0NhmDDgJHi94/txsGjw7j4wtmms8IwDMMwjGVMGDsGzzp5Ep518qRR31UqhN2HjjlGQ/8ANnsMh989thu7D9Z6Gya0NteGJnk8DqdMHc8TlBphw4CRYsXaPkxra8FLzphhOisMwzAMw+SIpiaBWZPHYdbkcfiredNHfX9kcMR5b0P/ifCkrfsGsKn/MO5+YjeODtV6G06ePM7/vQ3T2zBjInsb0sCGARPJwOAw7nh4J97yvFN4BwKGYRiGYZQyvrUZZ82ahLNmjfY2EDnehqqHYbNnjcM9T+zGzgO13obxLc11oUnjj++sNHdaG3sbImDDgInkzkd24cjQCO9GxDAMw6SiuxtYuhTo7QU6OoBly4DOTtO5YmxGCIGTJo3DSZPGYUFptLfh6NAItlbfEt3vvLOhajj88ck9ODI0UnP9rMljA9/bMHPS2Ib3NrBhwESyYs12zJo81tf9xzAMwzAydHcDixcDAwPO582bnc8AGwdMcsa1NOOMkybhjJP8vQ17Dg2O2kWpd+8A/rSxH796aBuIvGk14dRpPtuvtrfh1GltGN9afG8DGwZMKM8cGcJdj+3GpS8sobmpsa1ohmEaE57lVsPSpSeMgioDA855rk9GB0IIzJw0FjMnjcWC0rRR3x8dGsG2/Sc8DN41Dvc91Y/Dg7XehpmTxga+t+GkSWPRVIBxEhsGTCi3bdiBwZEKLr5wNitHhmEaDp7lVkdvb7zzDKObcS3NOH3mRJw+c+Ko74gIew8Pjtp+tXfvAP7y9F78enWtt6F1TBNOneaz/arrbZgwNh9D7nzkkjHGirV9mDttPDbcPRUf/CArR4ZhGgue5VZHR4ejO/zO88QTYxtCCLRPHIv2iWPx3I7R3obB4cpxb0O9x2HVpn04eGy45voZE1trvAze/2dNHmdNVEa+DQOWJFrpP3QMf3xyDxZfdBo+/SHBypFhmIaDZ7nVsWxZrfcFANragEWL9HtleLjAqKZ1TBPmz5iA+TMmjPqOiLB/YKhmTUPV4/DA5n1YsWY7Kl5vQ3MT5k4b72s4nDp9PCaNa8msXPk1DNi/q52b1+/ASIXw5gvn4ApWjgzDNCBhs9xMPKqquX6ArtsrY9twgY2U4iOEwLQJrZg2oRUXnjp11PdDIxVs93gbvIbDg737cPBorbdh+oQT3oZlbzkPkzUaCoK8AVKWsnDhQlq1alXtyXnz/KV1qQRs2pRFtgrP2773J/QfHsTtH7sI8+eL0OpmQccwZhFCPEBEC03nwzS++iIF9YNKwJnlXr6cZZwqmpoAv6GIEEClMvp8XGwaLnB7YmR4ps7bUDUctu0/gts/dhHGpHynVJi+yO/bqti/q5UdzxzFXzbtxcUXzIEQAsuWOcLLS1ubYwBUBd3mzY5wr87GdHfryVt3tyPom5qcv7ruwzAM09npDNpKJWegWirxIE41Qd4XVV4Zm4YLYd4Rhqkypa0F58+dgjdeMBtLXnE6/uNvz0f5Ay/A7z75itRGQRT5NQx0S5IGp2ftdhABb7pwNoBw5ZiloMvaCIkLGy0MEw8hxFeFEI8KIdYKIX4lhJjqnp8nhDgihFjtHteaymNnpzOzXKk4f9koUEvYxJMKbBouZGmksD5ikpBfw0C3JGlwVqztw7lzJtds4RWkHLMUdDbPtthutDCMpdwO4DwiugDA4wCu8Hy3kYie4x4fMpM9RjeqvTL1A+JFi+wZLmRlpLA+YpKSX8OA/bva6O0fwJot+/HmC+dIXZ/lbIxNLuF6bDZaGMZWiOg2IqqutLsPwFyT+WHMoMor4zcgvv564LLL7BguyMxp+s30y56rwvqISYqWXYmEEF8FcDGAQQAbAbyXiPYLIeYBeATAY+6l96WaBersZENAAyvWbgcAvPGC2VLXB21Bp2M2xuYdQmw2WhgmJ7wPwM88n+cLIR4CcADAaz+OJwAAIABJREFUp4noHr8fCSEWA1gMAB02CAPGGEED4pUr7diXJGhnpup5vx2U3vtex6AZHDxx7n3vcwyfoaET57w7LbE+YpKiy2PAruEcs2LNdiwoTcPcaW3RF0Of88ZvNsTmCDJTcawcR8rYjhDiDiHEep/jEs81SwEMA6i24D4AHUT0XAAfB/BjIcRkv/SJaDkRLSSihTNnztRdHMZi8jAgDvOO+Bk2Q0MnjIIqg4MnjIIqXo+ATesqmHyhxTBg13B+eWLnQTy64yAulvQWVFG9OC8oPhKwN4LMhNHCcaRMHiCi1xDReT7HbwBACHEZgDcB6CR3D20iOkZE/e7/D8DxPp9lqgxMPsj7gDitAVP9vc2TaIzdZLHG4H0AbvZ8ni+EeEgI8XshxMuCfiSEWCyEWCWEWLV79279uWQAON6CJgEsimkYqCbqhTc27hAi4zkJmt2Pe74Kx5EyeUcI8XoAXQDeTEQDnvMzhRDN7v+nATgTwFNmcpkc3R49Fenb4nVUkY+8D4jTGjDV3/MyTCYxRJToAHAHgPU+xyWea5YC+BVOvEhtLIB29/8FALYAmBx1rwULFhCjn0qlQq/46u/oHcv/ZDorJASRMwdeewhhOmfJKZeJ2tpqy9PWRrRkSbzz5fKJNItYT0wyAKyihPLc5AHgSVcXrHaPa93zfwdgA4A1AB4EcLFMejbpi6A+7+3DptPXnUcT+SiXiUolRw6WSunLojq9qHvV14PsYeK5MfkkTF/oFPaXAfgTgLaQa+4CsDAqLZsEfZFZt3U/lbp66Cd/3mw6K1Qq+Qu+Usl0zpITVKbm5njnvXVQxHpikpFXw0D1YZO+0N0/VaRviwyxJR/1+A3UhXAmbnTe02uIhBkDWRksTLEI0xdaQomK7ho2jia/74o12zGmSeD1552sJL005N0d7EdQ7OjISLzz3nSKWE8MUxR0L4RVkb4ti3WD7rd5s9kwJ79wTSLgmmv05aU+XLZU8r+uVLIzrDYLbAl/KyK61hh8B8AkALfXvbHyIgBrhRBrAPwCwIeIaK+mPMiRVetSdR9Nq00rFULP2j5cdNZMTG1rTZw1VVVZxPjIoNjR5ubk6RSxnhjGNKpkme6FsCrSt2WxbtD9hDC7uUKYgfTRj2aTB54AqoU33dBMkCvBpkObazir4EqV99Hkb73/6X4qdfXQLx/ckuj3tsSpypJlzKj3nkFrCcLWCuSlThmzgEOJlOgLv/6YJtad1xgkz0eQXMwyvCgqlCcrTOgsW7E17CxPhOkL40Jc5tBmGGTVulTeR9Nq08/+eh2dtXQlHTgymOj3eeqoJmJGvff2E+4cQ8qkhQ2D9PqiXFY/GNU9oFORflQaOsrgl6ZsbH2WmyuUy+HymRlNmvYi81vedCM9bBgEkVXrUnkfDSPwoeERWvCF2+hDN6xKnEZYEW2b6QhTOKbylifDygZsa1M2wIZBen1hy2DUJnR4FGTTtEUuTpjgn4/29mzzoRNVMjVNe8lbu8gzxTAMdIwE8ugx0CCl//DEbip19dDKtdsTpxFUxPZ2O9zUXoKMGJOC3hZ3fh7guvKHDYP0hkGUbCiqMRqmXnWoSdk0benr5TJRa2ttPlpbi9MGbIl2DjPMve3SlnaRZ/JvGMyfr6dX5nGNQTU9hRqq6xdr6JzP3ExHBocTpxFUxPZ29UolLbbEjNbDs+By8GyRP2wYpDcMwmRDS4t+VZE15bK/jPaWTYdjPU6atshFW/Khg7CJPVmq9RPUf2TaS5hhXt8ui/w8siD/hkHQhu4qpnezal1Zt2LJ+x0bGqELrrqV/vWnD2m5pY2xgBwzaieyXcTGNmUDbBikNwyC1h8FhZLk2RiNepFWtWxRhngS1cbGvV2EDcjDnqfXGIga1Kf1GHAbUUv+DQMexcUjhofijod3UKmrh+58ZEes5GUVga0KoBFiRoPIaiFh3N/LOtVsbVOmYcMgvWFAlJ8JjrREDcKqZQvrm0md4RwKYhdRITx+RBmWSZ6tTJp57nM2wYZBoxFj5PTRnzxIF1x1Kx0bGpFKOq5At1UBFD1mNAiTCwnDiDPYt7VNmYYNAzWGgR9FNEbjzPAGGf5p6oVDQUZjqk7CvOhBA3GZ2f1qW0iyK1FcQ0UlMjtm5b295t8wiAolKtoTiyKqvJLTWwPHhumcz9xMXb9YI33rJIrA1sdja750oiKWVDbNOAI8bJDi93wa8dlFwYaBPsOgiMZo0PqvOGUroifFFGm8LypkYdz1gFGGZdpBvKk+53ff1tbirTHKv2Ewf/7op9LSks6XmUdkVooRSY/Ublq7nUpdPfTHJ3ZLZ4EVQb5JGkvqh4rFZlVkZp+K2q1VwYaBPsOAqFjGqJ/H1DtJIFu2InpSTJF00k3V8CduWlEyW4W8NtHnZD0hMu3cZpmRf8MgbLvSRpFMsivFgq6t66XlMlHpnato7odvp9K8CiuCBiGti1b1YjNvujLxqtzOgmHDQK9hUCRUeQ4baV5ON0km3VTq4/p5xygDMWihfvX+eW0DMp4QmWdje98ohmEQRKNMYcuuFKsSYqqWy0QTpgzSqR9fSdNevT5Wg7W9sTPhJIkl9f5W9WKz+vSrTTZpHhsZNgzYMJBFpdq0eVY0TyQZ5Kt6jqbDmGxClcfA9knUYhsGtte+KhROz5ZKRBPO3UKlrh4ae0p/7CSKKAyywJZ6S/puCV2LzeLcq2jdWiVsGKg1DGzprzrg/mUfSQbnqp5j3M0fsuwXJu5XH7meZPLL9jnrYhsGjTKFHTYqi1leIYhmvvXPdMqH7iSgYl2DLSJpmqlqwZg0L7oXm6nIo2rytDtFXg0DAFcB2AZgtXss8nx3BYAnATwG4K9l0lNhGNjS/nRhcmGnjX3HFuLWj6rnKLv5Q9btxlQ7DZo8a26WezblsnOtzcZ3sQ0DosaQNkFmbJyVYi6lM49Rxydvoqkvf9jKBltEks7s6BKMSbpMFovN0uZRJTp2p9BZppwbBp/0OX8OgDUAxgKYD2AjgOao9FQYBo0wo25iJrbIxpYpVDxH2c0fknqbk2KqH4YZSlGEhdza1N6Lbxg0An7bSCTceP+j39pMpa4eajlpv5UNtogkdSvqEIxJFUlRF5sFoXJ3CiL9A6MCGgZXALjC8/lWAC+KSk+FvrA9DCCPNIKxlVfirB/Lsl+Y6odBbVWIaHkd9NvmZrt0ZJi+aAKTD5YuBQYHa88NDjrnY7Jr3HbMaJ2AOeMnQwigVAKWLwc6OxXllRlFR0e881V6e+Odj6K7G1i8GNi82RFXmzc7n7u7o3/b2em0k1IJx9vNDTc46WzaVLz2E6eOZa5duhQYGKg9NzCQqAsXkY8IIdYKIa4TQkxzz50CYIvnmq3uOe0k7a9MMKplGaOOetkel6T9orsbmDcPaGpy/tbrIVP9cNky/3ogipbXQe25UsmPjsyXYRDVioqMIqm668BR/OmpfrzzZXOwaZNApVLMQZ1tLFsGtLXVnmtrc86HoVowph2cdnY67aUR2k2cOpa5tpEHRkKIO4QQ632OSwBcA+B0AM8B0Afg69Wf+SRFAekvFkKsEkKs2r17d+r8Ju2vtmKD6mRjy268sr1U8r+mvV1dv5CZpDLVDzs7nTz5ESWvC9HOg1wJNh3H32PQyAGKivyw1/3hKSp19dDjOw5oySYTTJIQHtXNPolr1lSsvw1rDFTsTlFFdygFchpK5D0AzAOw3v3fWCgRkfn2pwpbVKct+cgTJmVv0LNSlSdZeZhlHXjvlXTxcF7aeZi+0Cngr4KinSYWLFjAAYqKWttbrv4D/fV//T5xFoqgKPOGynoPi3/0S9/k7iU2CNe0u1MQnXh+VQOM1xiM0hWzPf9/DMBP3f/PRe3i46eQ0eLjLMhKntqkOlmHyGNCBnqfT3u7c+h6Vrat45FZZxFW/1nWnQpMGgZKdppYsGCBfa3IBCmlam//YSp19dDVv3si0a1tGKgx6Ygr/EwNKmwZzKTZnYIo2wXbOTYMbgCwDsBaADfWGQpLXR3xGIA3yKSXB8NApzytVxNB7beRVGceUfVuAdlhQ9Y6XqWM17kzk8wkUNK6M2ko22YYxHYPs8dADdfc9SSVunqot/9w7N9y9ReHOO5SU/a4LfMAaXanCPu9jn6TV8NA9ZEHw0BXuwgzRFl25wtZGRgV9iM7YM1ax6syRGTTiRqEp9E5SerO9GSrScNgkzsLdB2Aae757wC41HPdDwC81ef3iwGsArCqo6PDfC0WgEXfvJsu+c4fEv3WloEao5ao52pqu1RbDNFyOd3AKst+w4ZBfgwDXe0iKPRNZwgbowdZGRh2XZxZ8DDvqK62onOm31tPMsPHNDonSX82reO0GQYA7gCw3ue4BMAsAM1wdj5aBuA69zdX+xgGfxd2n+OCngMUE/PkroNU6uqh79/zVKLfm27EjB6inqtqezzO7I4t8wBBylLXTFLyfLJhQJQPw0CXwR3UVqtpF1F1ZjUsyDKGvFz2N/K8MtC7dilIPsm8rb6aZlhaNhuSYWWrosp4CCJJfzY92WrEY1Bzk5Q7TeRB0CtFg6T7r9sfo3mX91Df/iOJs2TLQK0o2GDnyjzXLBY/x42bzZI0g7gs+w0bBvnRF0EhP0uWJE8zbGCXxwkcmf6fVf+KWpul8p5B92pvrzUKotaKhXkM/K6NStPWNhQUDtvcfOKaOGFZSXROknZoerLVVCiRsp0mjAh6U6MSDZKuUqnQq772O/qHa+9NnTUbBmpFwLShZWoHBdOzJDLUt/MlS+I/KxP1y4ZBfgwDIqddqQzxMREKogtZ+ZjV4EpmgK3qnjJlispP2BqDMPkb5nXKSkbHHWeElatKFu0kbr7LZaLW1tr8tLYWf42Bsp0mMhf0JkdtGlrwhm3PUKmrh8r3bVKWTSYdcR+zSqOsYM1bKUF1s2SJfP2bql82DOwzDML6req+EJRee3vqYmRCnE0RqmQ10SATkqPqnjJlCstPfTuLW68mZXQS2Rm0rsbb7k1PxPlRLo9+T05LS8ENA5VH5oI+q57hpzU0SLr/vPkROu2Km6j/0DFlWWfSEecxqw73yZvgl0nTRKiTrjSSlocNA7sMg6i2rlrU2zj4kSXuzHYV9hjEy4OsLsnTxJGMYUBkX8SD6UkyNgziksU0RJAfOaiVJ2wtlUqFXvKfd9K7f/BndXlnUhNHKKheIGw6nMek9yPq3irqJk0aaZQyGwZ2GQZR/VbXAmSbBj+yxImF99IoawxUDt5l126YaEdJZKdpfZYU0/lmwyAuuk25MM9Ae7tSSffA5r1U6uqh/121RU3eGSXEEexJtxRtb/cX7kHXNzfnZyBRJe5iZp1b1qlII81v2TCwyzCI6rd5nuFXTZzdc7yUy7Vzad4FuqrJct2QzYN3nSSRf6Zn3pNiOt9sGMRFt8QOmx6pvjlJUY+/6sb1dOaVK+mZI4Nq8q6JrIWc3wLTrO5fvXd1MF4VBn5KL6ypVAWIjFL1NuGw2a+8DUzCyluPjCBW0fXTpJFmFokNA7sMA9n2VrTBXRLCJiuCBuKq+qrO+vdLn595MEmeaV4NbNP5ZsMgCTqnIqJWDilieKRCf/XF2+kfr79fWZpxkBWAWXcQmXhWXfeXLWsc17WsG97bvMpl+QV+NiOzVV0V3VvWqUiDPQY51Rc+mFb8eSKsroK+Sxt1q/v5+KXf2jp6wSm3iVqSyE4TxpZJPaECNgySoFNqBGn/qrdAEfc+uYdKXT20Ys02ZWnKEqf6snapJY1n1Xnv+ntFeQqi4k2DDpmdLUzEZiYVkGFlrce061aGcjn5FnZsGNhlGBDx7LAMUR7UOBMfceRX3BDMuCSZsGGyJ6khknejnw0DP6Jag85RhF+rSvt2Gx+u+OVaOvszN9PhY0NK0/WjvjrjzOZkPUCVDb3RcX/ZssatkyT1b8tAOY2QjWNj50GYl8vJt7Bjw8A+w8B2TBsuMn1SVl7HlV9xQzDjEiffti+ULSpJdUIRNg5gw6CeNNJIVQ/W3AoGh0foOZ+7lf75xw8qTdePpDPWVdhjIO8xUOkmt2WgnKas5XJwVw1agGzzDC6HElmoL3JC3LZtQ/+Xae9hM/tp8q97Rp89BtkTtw8k9RoVYathNgzqSSONctKDf/voTip19dBtG3Zov1daAchrDPTMbssISRsGymmFbNAzzOMsHC8+tlBf5IAk8sIGFSfT3qPWHySVX2kntJKkX9Q1BjbokSR9IKnXSPbdCbKY6ItsGNSTVhrlgI/97CE6/99voaNDw9rvpcIlm7Vgqb+fiV2JZBZlmxa2WZBWKNowwFEFewzs0RemZVKc+yVpNzasMZLNt65nUS4HD/JUyBK/fBdNrtsyVErSB5JOaqo2DEz0RTYM6jEtjTRzZHCYzv3sLfRv/7s6k/ulXcSVx2rOY55tJa1isUUxqSBNWdgwUKcvbPBixrlfkoGFDQa1DX03anCYV1mSFSrbURq9mqQPJPUaqR7Is8fAkKCvwQZppJGb1/VRqauH7n58Vyb3k41n9+vwqh5FlgP1IBexzhfeFJ20z69IhlrSsuTVMADwMwCr3WMTgNXu+XkAjni+u1YmPRX6wpZ1Tzq9ZnHCGnX2LdN9N2r38DzLkixQNUhOOxZI2ofq25+ujTvC2jmvMUhwGNmVKMf8U/cD9LzP30ZDwyOZ3TNpo1ehgLPuVDLuxwLZmYwENoiTvBoG3gPA1wF81v1/HoD1cdNQoS9s2SlN9n5JZWBUu00z6ZMXbPCc5BlV9Zc2HZWTjKo37rCxH7Fh0EAcOjpEz/r0Svr0r9Zlcj+ZxhzW4VUo4LD0dXQ22TUVrFjyg+pFjCYMw7wbBgAEgC0AznQ/GzMM8uYxINIj66LyZUvbT4MtZcja663q/a2q6k/FWEBVHcqkE+deNhqfbBgUBYmW+OuHtlKpq4f+/FR/JtmREQhhHV5FhwkbqOsQ+LILlvK4K04jYsqFLZs3WeVTAMPgIm8ZXMPgMICHAPwewMtCfrsYwCoAqzo6OmLXcz15W2OQ5r5h7StqsGbjgCcJpr0eWT7/cnn0zkiA/IsUg9JMW39FaUt+2LDQvx42DGwjSS+SlBzv/+Ff6IVfuoNGRipasu5FtiNHzeinFYhB6Vffoqla0MguWCqCQMsbSbpW2sXzuoR+3L5hs2EA4A4A632OSzzXXAPgE57PYwG0u/8vcL0Jk6Puladdibz3aG8/MYvr9wZgHfeOal9RMt7GAY/t+LWrtDIoDmETWyp0Y949rzqw0ehhw8AmkrZ+iZa1//AgnXHlTfTFng1ai1BFVilEFVnFwlO/F0kHCT8VSqteoRdxb+owTM+w+ZG0a6Xdblf11nVV4ioTmw2DqAPAGAA7AcwNueYuAAuj0sqLvvBrr1nucy/TvqL6lI0DHhvxDv7r5Y3srjiq2oIu3ahiYO9nKKvc6tXv92FpqgxNss3oKY5hYHI0oureSSWpxCj8Z3/ppVJXD63Zsi9Z3mISpyi6H12Y4M1Cadk4UNaFjUKOKHnXkg0NC0pLl2EQdzY254bB6wH8vu7cTADN7v+nAdgGYHpUWnkxDNK2u7TEmdjxk231ceo2yQKbkPEwB3m3dbQFXR4DlUaiDqPZL82WFiddvzRV6znbxgjFMAxMjkZU3jup71Wi1136/fvooq/8lioV/WFERHYOEKOUren8FQEds4QqhGbSriUbGhaUlq5wigbzGPwQwIfqzv0dgA0A1gB4EMDFMmnpNAxUKnfZgaCKtuRHmn4c1GfSLGItKrIGoM63MHvRscaASK0c1GE0x02z6N6wzA0DLftSm3xKKu+dNK2IUfjug0dp/uU99NVbHj1+eRbWqW1WMO9JrR/VA2FVBmbagY63HcvsZa3ivlF5KsoagywPXYaByomQclk+hE2XmktTnqIPmlQi85y9aw2SyKC41Ht7VBh0KttEnL4hq3fipln09TNGPQbK9qU2+ZRU3juNNA4ZhV9/79NU6uqhR/sOWDmTnxWssPSjuo5Vpad64CabVtL7yhjVcQxvNgz0GgZZzA8B2a5XSjqxU/RBk0qSerHzpsdV5pc9BvoxZhgo3Ze6KB4DIi3T7G+95o/02v93l3R2bZvpV0XehGkeUV3Hqu1uVe06Tlpx76ujnbJhoNcwUNlOw2Yv8yCbiz5oUolfX68+f9VyxTQ6F+uaWGNQ/13acCubMGkYJN6X2nsUao2BBrbtG6BSVw99+87HiShagVlenNTYKExN5UmHy7iarqryNOIgQ0eZ2TDQaxjYEFFqC0XXIarRJf9t1HWq8Ctb2vLGSdNvLUZLS3HqWIthoHtfat8X1pjsBbb0QJ98LP/9Rip19dDTuw8RUbTSybtSyhumlKiuRWaqacRBho5QDDYM1BgGYQMFE6FqtmKLSswjKuquCG3IZoo+TjLiMSjMvtQ6zNY0efGRBBdf9Wu6+Nv3RF12PJscH6qHoGYRJGB0vLzGS1hMpSrhptJ13EiDDPYY2GkYRMlOU6FqTHFQNaAv+sA1jDDjXVWfKvo4yZRhkP99qXUEuqXBRxI8PXU2lbp6aPnvN47KelAHaWSBohJvHbe3B8cqpn2BVlKyeMmbjhkrnbZ4UoWiehDHawzsNAxYNjK6UdXGij5wDSJIdi5ZolamFl0WmDIMcrEvdSg6lsanwUcSfOtFb6NSVw9t2zcglUR9zHnWtk1R8BNOQc3CVDPS7THQITh12uJJFUqWBlAa2DBIry8adbBlikb0mqRpY976CnopWhz5m8f6D9I7KurDi6o1BrbWcTFecBaGjpovl/1bWdCRhebw6RGvfd/V9Nb3fUPq50GDWX4pTXxkB/tCyBsRqpuR7jUGOgZROo2opAolLzNHbBikNwzy8qx1ocMzFrT5gYzBbeugKg1J25iMHkm7S08eJgjjvI8gjT4ql9PvSmRzHRfbMNBR83FGcllqjrp8PTqjRKWuHvrRN38u9fNGV3oqkRVO1bqtV3A6X17jJUwxp0VHe9LxYpskaXvTz8ssMhsG6Q0DmxW5blSXPWpiIkp+FPVZJC1X2MRGEsMpr+OBrDwGKurH5joutmGgo+bDpi1NrjEgqhlhfvVNH6b5XSto98GjUj/NywAnD8jMbIc1iyIoPR1lYI9BctgwSG8YEBVzlloG1e08KpQxSh/lpd8lIUkbU62/8zoeyGqNgYr6CZuMMk2xDQMdrTvq7TMWaI5KpUIXfeW3dOn375P+TZEFbdb4CaeWFmdGPs5LrvI+AMliUW5R1xiohg0DNYZBo5LVwLOaZpQ+yuvAVRdZGW55GA9ksSuRTo9BNcRYpkyy38el2IZBlh4Di3rMmi37qNTVQz/7S6/0b/IywMkLWQzsi2A8xMXGXYmWLDnhWWhudj7bBhsGbBikIWuPQZQ+yoEazhQdoV48HggmrH5k9VG5HGzgettx1LPQ8ayKbRhktcbAsh7zhRUb6Iwrb6L9hwdj/a4RB5p5JQfNsCHIy3Ngw4ANgzjU6wLVoRgymx+E6aO89Lss0eGh5fFAMEGTVHHaZZjXrEqUEazDSM6/YTB/frY+Fl1pKmJkpEIvWHYHvf+H95vOClOHba5MJj15eQ5sGOTLMDCpYsLC6lQPPNNsfpBVHVms7hnLiKsPZK6PCpvTEVaXf8OgqWm0BGvgnvvnp/qp1NVDv35oq+msMB5Uz3BxjK0/UbOMqhV8Xp4DGwb5MQyWLBndrrJUa3kxdrOAPRNMHOLqA5n2FbVLYdYegybkgUql9vPAALB0qZm8WMCKNdsxrqUJrzl7lumsMB6WLnWappc0TbWjI975RqC7G1i8GNi82RGNmzc7n7u7w79LAz8HRiXd3cC11zpt1EuWaq23N975IqNabjPFJq4+6OwEli8HSiVACOfv8uXOecCRBwcOjP5dayuwbJnz/7JlQFtb7fdtbSe+V00+DAM/GlGCARgeqWDluj68+uxZmDB2jNG8dHcD8+YBTU3O37QDsLyjQtl66/TQIaClpfb7JMKgSM8pTInrUvDLlo1+Di0t+oRyURFC/L0QYoMQoiKEWFj33RVCiCeFEI8JIf7ac/717rknhRCXZ59r9SxdOtooqJKVWmNj9wRsJI2mSDpDNUkG6Z2dwKZNzhz3pk0njALAkQdDQ6N/M2nSieuijAvlBLkSbDoWsM/zOHc/votKXT1087o+rXGRUbGhMu6xRovbTOvuC9qqM84WqDJp5tlNHubG1RXyUy6nfwNmfXo6+gUsDyUCcDaAZwG4C8BCz/lzAKwBMBbAfAAbATS7x0YApwFoda85J+o+tocShW3jmZVaK5pcSAOHVdXCbSMalTLcVKhqmL4wrixkDl5jcIJP/nw1nffZW+h/fjSsrfPK7CYRJUwbUbikLXOD7rwbi7Dy6CqrynR19gvbDYPq4WMYXAHgCs/nWwG8yD1uDbou6LDdMIizt7lOGm3iJohG1FVhFE1n2I6p+s6/YRC1K1GDcHRomM7791vo4z9brbUxRe0/TdTYb60MI42yzfJdfbYtnJUlam9pHQpeZR0G9Yv29nR5JAoX9DYdPobBdwBc6vn8AwBvdY/ve86/C8B3AtJcDGAVgFUdHR3pK1Mjfu1UCDvfjdEosJF0gqLpDNsxZZiG6Yt8rDGYPj04QKuBuPvxPTh4dBgXXzhba1xkWBrV76JiVBs1bjMsljAKHXG/RYslDou11BWHqbIOg9p/f79/HG/eYn2FEHcIIdb7HJeE/cznHIWcH32SaDkRLSSihTNnzkyS9czwa6c33AB897umc9a4pJHbRaNoOsN2Ml8/IEE+DAMGgLMb0bS2FrzkjBlaO29YGtXvohbgsHCJj46dB7LezSALwpS4DgWvsg7D2n/9ImnZXZaqxgOwYEH8HKmFiF5DROf5HL8J+dlWAKd6Ps8FsD3kfO7hgShjK0XUGbZjmzxgwyAnDAwO4/aHd+IN589GS3OT1s7rtwvaW97oAAAKvElEQVQLULt9VpSVy8IlPjpmDmycjcgbYXUYd0Y/rP3XexNkdlnyGg855kYAbxdCjBVCzAdwJoC/ALgfwJlCiPlCiFYAb3evZRhGE6wzGOPxpjKHkcVklgUddn1nG5W6emhcx56aV3Ob2pVINg2LqpBhlJI0NjTqZTZVZGJ9a9csLCCyQF4HHQDeAscLcAzATtQuLF4KZweixwC8wXN+EYDH3e+WytzH9sXHDMMwpkHIGgPhfG83CxcupFWrVmV3w+o0nHe6rq3NmNnc3Q188ter0HzSfmy75tUACZPZsZ7ubmdWtbfXCd1YtozriVHPvHn+M/WlkuMODkJWvMik39TkmAQOC0G0yi8uv6HIXF8wDMPkDCHEA0S00O87DiXyw7JXIS69agitpd0YeHQOQMJ0dqxG19tvGaaepAvsZV31ixY533upD8fjNTsMwzCMStgw8CMoYNdQIG//uJ0QYyo4/MjsmvNF3+EnCZbZdEyBSbPAPmqxWXc3cP31Xm+AYyRcdlnttX5reRiGYRgmKakMg8K+4r65Od55zbQ/dzuG94/HYN/UmvM8WziaRt0mNQ152xLTFnQusPczcImAlStrz3m9DwzDMAyTlrQeg/UA/hbA3d6TQohz4OwgcS6A1wP4rhCiWQjRDOBqAG8AcA6Ad7jX2sXISLzzGtl7eBBNc/Zg8Mk58G7rzTv8+PP/2zu3WCuuOoz/vkCpUUkLYuXSi21iiNUXK8F6TSOkF2KKNWrwQYlomqok9sFoG5KmsU/V6INXUm3jrRHqpZVUCKXaxifQQoCCFDmltFIQxCrVmEArfx9mHZ1sZvYZOHvPXlO+XzI5s2et2fOd/6yzvrNmrVnL06SeGR56dfYMc/aOM2ngjvc+wNatk7+yMcaYc5lJNQwiYk9E7K1IWgqsiYgTEfEMMAYsTNtYROyPiJPAmpQ3L+oev43gsdyGXYc5RfDFZXM9fVgDPE3qmeGhV5NjWPNPu4FrjDFmFAxkViJJjwNfiIgn0udvAZsj4ifp873AhpT9+oj4dDr+ceAdEbGy4jtvpljmHuCtFL0TrTALZl4Kl6nUcAo49Rw8ewxe6H8qx4avcFKcAxpnzYS58+C8afDSSTj0PBzrd9/O6iLkH0eYUGe/RbFaewLdhVi2rHHWTLj0MlDp4U2cguee7VOW50fE9FbkZYykvwKTeSEsx/JoTc2wpmZYUzNeyZoui4jKZeKnTnSmpEeB2RVJq6J+Ncu6peyreihql7gH7kkanqibViknuqDTGgdDFzRCN3Ra42CQ5Dk6gTqza0qO99qammFNzbCmZpyrmiZsGETE4rP43n5L2b8il7g3xhhjjDGmywxrulIvcW+MMcYYY0yHmLDHoB+SbgK+Cbwe+LWk7RFxXUTslvQA8EfgZeBzEfGfdM5KYCMwBbgvInY3uNQ9k9HZIl3QaY2DoQsaoRs6rXEwdEFjF8gxjtbUDGtqhjU145zUNJCXj40xxhhjjDHdxisfG2OMMcYYY9wwMMYYY4wxxmTUMJD0EUm7JZ2StKAn7XZJY5L2Srqu5vzLJW2RtE/S2vRy87A1r5W0PW0HJG2vyXdA0pMpX6tTCkq6U9LzJZ1LavJdn+I7Jum2ljV+VdJTknZKelDShTX5Wo/jRHFJL9ivTelbJL2xDV2l618i6TFJe9Lfz+cr8lwj6XipDNzRpsaSjr73TwXfSLHcKemqlvXNL8Vou6QXJd3ak6f1WEq6T9JRSbtKx2ZK2pTqu02SZtScuzzl2Sdp+bC1doXc/SZHb8nRS3Lyjty8IldvyM0Hcqn3s6rnIyKLDXgzMB94HFhQOn4lsAM4H7gceBqYUnH+A8CytL8a+EzL+r8G3FGTdgCYNaK43kmx+Fy/PFNSXK8ApqV4X9mixmuBqWn/buDuHOLYJC7AZ4HVaX8ZsLbl+zsHuCrtTwf+VKHxGuDhtsvemd4/YAnFQogCrga2jFDrFOAvFIvAjDSWwPuAq4BdpWNfAW5L+7dV/c0AM4H96eeMtD9j1OUgh61LfpOLt+ToJbl4R45ekas35OwDo6z3c6rns+kxiIg9EbG3ImkpsCYiTkTEM8AYsLCcQZKA9wM/T4d+CHxwmHorrv9R4KdtXXPALATGImJ/RJwE1lDEvRUi4pGIeDl93EyxvkUONInLUoryBkX5W5TKQytExOGI2Jb2/wnsAea1df0BsxT4URRsBi6UNGdEWhYBT0fEZFbQHQgR8TtOX3G9XO7q6rvrgE0R8UJE/B3YBFw/NKEdoit+00FvadVLMvKO7Lyiw94wSh8YWb2fUz2fTcOgD/OAP5c+H+T0wv064B+lCqIqzzB5L3AkIvbVpAfwiKStkm5uUdc4K1OX3H01XVFNYtwWKyieFlTRdhybxOV/eVL5O05RHlsndU2/DdhSkfxOSTskbZD0llaF/Z+J7l9O5XAZ9f+M5RDLN0TEYSj+AQAuqsiTUzy7Qm5+k5u35Owlo/SOrL0iM2/I2Qdyq/dHUs9Pah2DM0XSo8DsiqRVEfGrutMqjvXOsdokz1nRUPPH6P9E590RcUjSRcAmSU+l1uFA6KcR+C5wF0U87qLoll7R+xUV5w50HtsmcZS0imLdi/trvmaocaxgpGXvTJD0WuAXwK0R8WJP8jaKrtF/pXHBD1EsOtg2E92/XGI5DbgRuL0iOZdYNiGLeI6K3P0mR2/J0Us64h3ZekWG3pClD3S43h94vFptGETE4rM47SBwSenzxcChnjzHKLqbpqaWeFWes2IizZKmAh8C3t7nOw6ln0clPUjR7TiwSqlpXCV9D3i4IqlJjCdFgzguBz4ALIo0cK7iO4YaxwqaxGU8z8FUFi7g9O7AoSLpPIqK//6I+GVvetkMImK9pO9ImhURx9rU2eD+Db0cNuQGYFtEHOlNyCWWwBFJcyLicOpmP1qR5yDF2NhxLqYYU39OkLvf5OgtOXpJR7wjS6/I0Rsy9oEc6/2R1PNdGEq0Dlim4o3+yylaab8vZ0iVwWPAh9Oh5UDdE6FBsxh4KiIOViVKeo2k6eP7FC9L7arKOwx6xubdVHPtPwBvUjHTxjSK7rR1beiDYjYH4EvAjRHx75o8o4hjk7isoyhvUJS/39aZ0zBIY1TvBfZExNdr8sweH8sqaSHF3/3f2tKYrtvk/q0DPqGCq4Hj492oLVP7lDaHWCbK5a6uvtsIXCtpRhr2cW06ZurJyW+y8pYcvSQj78jOK3L0hsx9IMd6fzT1fLT4Nnq/jaKiOQicAI4AG0tpqyje+N8L3FA6vh6Ym/avoKjAx4CfAee3pPsHwC09x+YC60u6dqRtN0X3Z5tx/THwJLAzFbI5vRrT5yUUsxY8PQKNYxRj5LanbXWvxlHFsSouwJcpjAjgVam8jaXyd0XLsXsPRbfhzlL8lgC3jJdLYGWK2Q6KF/Te1abGfvevR6eAb6dYP0lptpgWdb6aosK/oHRspLGkMKvDwEupjvwUxdjk3wD70s+ZKe8C4Pulc1eksjkGfLLteOa60QG/ITNvIUMvISPvqPq9GaFXkKE31N0LRuwDZFDvk1E9r/SlxhhjjDHGmHOYLgwlMsYYY4wxxgwZNwyMMcYYY4wxbhgYY4wxxhhj3DAwxhhjjDHG4IaBMcYYY4wxBjcMjDHGGGOMMbhhYIwxxhhjjAH+C1XcPaG4r1JaAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<Figure size 936x288 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "fig, (plot1, plot2) = plt.subplots(1, 2)\n", | |
| "fig.set_figwidth(13)\n", | |
| "\n", | |
| "m, b = model.get_decision_boundry_m_and_b()\n", | |
| "boundry_line_y = (m * POINTS_X_AXIS_BOUNDARY) + b\n", | |
| "plot1.plot(POINTS_X_AXIS_BOUNDARY, boundry_line_y)\n", | |
| "\n", | |
| "plot1.scatter(X_test_class_a[:, 0], X_test_class_a[:, 1], c=CLASS_A_CLR)\n", | |
| "plot1.scatter(X_test_class_b[:, 0], X_test_class_b[:, 1], c=CLASS_B_CLR)\n", | |
| "plot1.set_title('Model prediction')\n", | |
| "plot1.axis((POINTS_X_AXIS_BOUNDARY[0], POINTS_X_AXIS_BOUNDARY[1], POINTS_Y_AXIS_BOUNDARY[0], POINTS_Y_AXIS_BOUNDARY[1]))\n", | |
| "\n", | |
| "plot2.scatter(X_test[y_test == 0][:, 0], X_test[y_test == 0][:, 1], c=CLASS_A_CLR)\n", | |
| "plot2.scatter(X_test[y_test == 1][:, 0], X_test[y_test == 1][:, 1], c=CLASS_B_CLR)\n", | |
| "plot2.plot(POINTS_X_AXIS_BOUNDARY, boundary_line_y)\n", | |
| "plot2.set_title('True Classification')" | |
| ] | |
| } | |
| ], | |
| "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.7.6" | |
| }, | |
| "toc-autonumbering": false, | |
| "toc-showcode": false, | |
| "toc-showmarkdowntxt": false, | |
| "toc-showtags": false | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment