{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# practice - torch sklearn numpy\n", "sklearn, numpy for linear regression and gradient descent" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "[kaggle House Prices - Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data)에서 가져온 데이터를 이용하여, Linear Regression을 구현해보자.\n", "\n", "우리의 SalesPrice가 구하기를 원하는 y이고 이것은 연속적인(continuous)한 value이기 때문에 linear regression을 사용하는 과제라고 볼 수 있다. GriLivArea(Above grade(ground) living area square feet)은 cs229에서 말하는 size(feet^2)와 가장 유사한 column이라고 생각되어서 뽑았다. 단순하게 scatter plot을 해봐도 사이드로 많이 빠진 몇 outlier들을 제외하면 어느 정도의 linear 관계를 볼 수 있을 거라고 생각된다." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
1220RL80.09600PaveNaNRegLvlAllPub...0NaNNaNNaN052007WDNormal181500
2360RL68.011250PaveNaNIR1LvlAllPub...0NaNNaNNaN092008WDNormal223500
3470RL60.09550PaveNaNIR1LvlAllPub...0NaNNaNNaN022006WDAbnorml140000
4560RL84.014260PaveNaNIR1LvlAllPub...0NaNNaNNaN0122008WDNormal250000
..................................................................
1455145660RL62.07917PaveNaNRegLvlAllPub...0NaNNaNNaN082007WDNormal175000
1456145720RL85.013175PaveNaNRegLvlAllPub...0NaNMnPrvNaN022010WDNormal210000
1457145870RL66.09042PaveNaNRegLvlAllPub...0NaNGdPrvShed250052010WDNormal266500
1458145920RL68.09717PaveNaNRegLvlAllPub...0NaNNaNNaN042010WDNormal142125
1459146020RL75.09937PaveNaNRegLvlAllPub...0NaNNaNNaN062008WDNormal147500
\n", "

1460 rows × 81 columns

\n", "
" ], "text/plain": [ " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", "0 1 60 RL 65.0 8450 Pave NaN Reg \n", "1 2 20 RL 80.0 9600 Pave NaN Reg \n", "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", "... ... ... ... ... ... ... ... ... \n", "1455 1456 60 RL 62.0 7917 Pave NaN Reg \n", "1456 1457 20 RL 85.0 13175 Pave NaN Reg \n", "1457 1458 70 RL 66.0 9042 Pave NaN Reg \n", "1458 1459 20 RL 68.0 9717 Pave NaN Reg \n", "1459 1460 20 RL 75.0 9937 Pave NaN Reg \n", "\n", " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "2 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "4 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "... ... ... ... ... ... ... ... ... \n", "1455 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "1456 Lvl AllPub ... 0 NaN MnPrv NaN 0 \n", "1457 Lvl AllPub ... 0 NaN GdPrv Shed 2500 \n", "1458 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "1459 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "\n", " MoSold YrSold SaleType SaleCondition SalePrice \n", "0 2 2008 WD Normal 208500 \n", "1 5 2007 WD Normal 181500 \n", "2 9 2008 WD Normal 223500 \n", "3 2 2006 WD Abnorml 140000 \n", "4 12 2008 WD Normal 250000 \n", "... ... ... ... ... ... \n", "1455 8 2007 WD Normal 175000 \n", "1456 2 2010 WD Normal 210000 \n", "1457 5 2010 WD Normal 266500 \n", "1458 4 2010 WD Normal 142125 \n", "1459 6 2008 WD Normal 147500 \n", "\n", "[1460 rows x 81 columns]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression\n", "from IPython.display import display, Markdown\n", "\n", "train = pd.read_csv('./files/train.csv')\n", "train" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Z58VP/30k1i1apVwd3cXO3fulNps3rxZeHl5ifXr14vTp0+LJ598UgQGBhqsKrTWFzm4+o+IiKjlkfv57fSg6ttvvxUARE5OTqNz165dE0899ZQICgoSvr6+4sEHHxS//fabQZtz586Ju+++W/j4+IiQkBDxzDPPiNraWoM2e/fuFf369ROenp6iS5cuYt26dY3utWLFCtG5c2fh6ekpBg0aJH744Qeb+2INgyoiIqKWR+7nt0oIIZw6VNaGaLVaBAQEQKPRQK1WO7s7REREJIPcz2+XyKkiIiIiaukYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpgEEVERERkQIYVBEREREpoJ2zO0BERK4rr6QC569UISbYD7Ehfs7uDpFLY1BFRESNlFfVYPamLBzILZGODe8aihXj4hHg6+HEnhG5Lk7/ERFRI7M3ZeHQ2csGxw6dvYxZm447qUdEro9BFRERGcgrqcCB3BLUC2FwvF4IHMgtQf7lSif1jMi1MagiIiID569UWTx/rpRBFZEpDKqIiMhAdAdfi+djgpmwTmQKgyoicri8kgrszSnmNJKL6hLqj+FdQ+GuUhkcd1epMLxrKFcBEpnB1X9E5DBcUdZyrBgXj1mbjhv8Ww2JC8GKcfFO7BWRa1MJYZSJSM1Gq9UiICAAGo0GarXa2d0hcriJa9Nx6OxlgwRod5UKQ+JCsGHKICf2jMzJv1yJc6WVrFNFbZrcz2+OVBGRQ+hWlBnTX1HGD23XExvCYIpILuZUEZFDcEUZEbV2DKqIyCG4ooyIWjunB1UXL17EX//6VwQHB8PHxwe9e/fG0aNHpfNCCCxevBgdO3aEj48PkpOTkZuba3CNK1euYPz48VCr1QgMDMSUKVNQUVFh0ObEiRMYNmwYvL29ERUVhddff71RX7Zu3Yru3bvD29sbvXv3xtdff21wXk5fiMg0rigjotbOqUFVWVkZhgwZAg8PD3zzzTc4ffo03nrrLQQFBUltXn/9dbzzzjt47733cOTIEfj5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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "train[['SalePrice','GrLivArea']].plot.scatter(x='GrLivArea', y='SalePrice')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## standardization\n", "\n", "\\begin{equation*}\n", "z = \\frac{x - \\mu}{\\sigma}\n", "\\end{equation*}\n", "\n", "- $\\mu$는 평균, $\\sigma$는 표준편차\n", "- $z$는 표준화된 값으로, 평균으로부터 얼마나 떨어져 있으며, 그 거리를 표준편차의 몇 배수만큼 떨어져 있는지를 나타낸다.\n", "- 데이터를 평균이 0이고, 표준편차가 1인 값으로 변환하는 것.\n", "- 데이터의 범위를 일정하게 조정하고, 다양한 스케일을 가진 변수들간 비교 가능하도록 만듦.\n", "- outlier에 영향을 받을 수 있기 때문에 데이터의 분포에 따라 (가우시안 normal distribution이 아닐 경우) 다른 scaler를 사용해야 할 수 있다.\n", "- 입력변수 X를 standardization 하지 않고 학습할 경우에 가중치의 값이 제대로 학습되지 않을 수 있다. 스케일이 다르기 때문에." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X = train['GrLivArea'].values.reshape(-1,1)\n", "y = train['SalePrice'].values.reshape(-1,1)\n", "X = (X - X.mean()) / X.std()\n", "y = (y - y.mean()) / y.std()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Sklearn linear regression" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABVyUlEQVR4nO3deXhTVfoH8G9autuGFigtUmhZHKhl30FBELSC4MqIgoOoqMgmOAoyMsigIspPQUAQRhFFQEdFNsVhERCsghSEWpCtFaa0bIW2FFra5P7+iCm5WW+Se3Nvku/neXhmenJz7yEg580573mPThAEAUREREQqCFG7A0RERBS8GIgQERGRahiIEBERkWoYiBAREZFqGIgQERGRahiIEBERkWoYiBAREZFqGIgQERGRamqp3QFnjEYjTp8+jdjYWOh0OrW7Q0RERBIIgoCysjI0aNAAISHO5zw0HYicPn0aKSkpaneDiIiIPHDq1Ck0bNjQ6TWaDkRiY2MBmH4jcXFxKveGiIiIpCgtLUVKSkrNOO6MpgMR83JMXFwcAxEiIiI/IyWtgsmqREREpBoGIkRERKQaBiJERESkGgYiREREpBoGIkRERKQaBiJERESkGgYiREREpBoGIkRERKQaTRc0IyIibTIYBezOK8bZsgokxkaic1oCQkN4Jhi5j4EIERG5ZWNOIaavy0VhSUVNW7I+EtMGpiMzI1nFnpE/4tIMERFJtjGnEKOWZ4uCEAAoKqnAqOXZ2JhTqFLPyF8xECEiIkkMRgHT1+VCsPOauW36ulwYjPauILKPgQgREUmyO6/YZibEkgCgsKQCu/OKfdcp8nvMESEiIknOljkOQqRexyRXssZAhIiIJEmMjfTqOia5kj1cmiEiIkk6pyUgWR8JR/MXOpgCi85pCTavMcmVHGEgQkREkoSG6DBtYDoA2AQj5p+nDUy3WWphkis5w0CEiIgky8xIxsJh7ZGkFy+/JOkjsXBYe7tLLExyJWeYI0JERG7JzEhGv/QkyUmnciS5UuBiIEJERG4LDdGhW9M6kq71NsmVAhuXZoiISFHeJLlS4GMgQkREivI0yZWCAwMRIiJSnCdJrhQcmCNCREQ+4W6SKwUHBiJEROQz7iS5UnDg0gwRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREamGgQgRERGphoEIERERqYaBCBEREalG0UCkoKAAw4YNQ506dRAVFYVWrVrhl19+UfKRRERE5EdqKXXjixcvokePHujduze+/fZb1KtXD0ePHkV8fLxSjyQiIiI/o1ggMmvWLKSkpGDp0qU1bWlpaUo9joiIiPyQYksza9euRceOHTF48GAkJiaiXbt2WLJkidP3VFZWorS0VPSLiIiIApdigciJEyewcOFCNG/eHN999x1GjRqFcePGYdmyZQ7fM3PmTOj1+ppfKSkpSnWPiIiINEAnCIKgxI3Dw8PRsWNH/PjjjzVt48aNw549e5CVlWX3PZWVlaisrKz5ubS0FCkpKSgpKUFcXJwS3SQiIiKZlZaWQq/XSxq/FZsRSU5ORnp6uqitZcuWOHnypMP3REREIC4uTvSLiIiIApdigUiPHj3w+++/i9qOHDmCxo0bK/VIIiIi8jOKBSITJkzATz/9hNdffx3Hjh3DihUrsHjxYowePVqpRxIREZGfUSwQ6dSpE1avXo2VK1ciIyMDM2bMwJw5czB06FClHklERER+RrFkVTm4k+xCRERE2qCJZFUiIiIiVxiIEBERkWoYiBAREZFqFDtrhogo2BiMAnbnFeNsWQUSYyPROS0BoSE6tbtFpGkMRIiIZLAxpxDT1+WisKSipi1ZH4lpA9ORmZGsYs+ItI1LM0REXtqYU4hRy7NFQQgAFJVUYNTybGzMKVSpZ0Tax0CEiMgLBqOA6etyYa8Ogrlt+rpcGIyarZRApCoGIkREXtidV2wzE2JJAFBYUoHdecW+6xSRH2EgQkTkhbNljoMQT64j8okzZwCdzvTrmWdU7QoDESKNMxgFZB2/gDX7C5B1/AKn+DUmMTZS1uuIFGU0AvfcAyQlXW/LyVGvP+CuGSJN404M7eucloBkfSSKSirs5onoACTpTVt5iVT18cfA8OHitscfB/79b3X68yfOiBBpFHdi+IfQEB2mDUwHYAo6LJl/njYwnfVESD3HjpmWYCyDkMhI4OJF4IMPTK+piIEIkQZxJ4Z/ycxIxsJh7ZGkFy+/JOkjsXBYe85ekTquXQPatQOaNxe379wJXL0K1K6tSrescWmGSIPc2YnRrWkd33WMHMrMSEa/9CRWViVtmDULmDxZ3PbPfwLTp6vTHycYiBBpEHdi+KfQEB0DQ1LXL78AnTqJ25o3Bw4cMC3HaBADESIN4k4MInJLWRmQmgoUW9Wr+e03ID1dlS5JxRwRIg0y78RwNKmvg2n3DHdiEBHGjQPi4sRByKJFgCBoPggBGIgQaRJ3YhCRS999Z9rxMm/e9bY+fYDqauDpp9Xrl5sYiBBpFHdiEJFdZ8+aApDMTHH7qVPAli1AaKg6/fIQc0SINIw7MYiohiAA998PfP21uH31auDee9XokSwYiBBpHHdiEBGWLwcefVTcNmKEJgqSeYuBCBERkVYdPw40ayZuCw8HioqA+Hh1+iQz5ogQERFpTVUV0KGDbRDyww9AZWXABCEAAxEi8gJPBiZSwFtvmWY9srOvt738silH5JZb1OuXQrg0Q0Qe4cnARDLbuxfo2FHc1qwZcPCgZquiyoEzIkTkNp4MTCSjy5eBevVsg5CcHODo0YAOQgAGIkTkJp4MTCSj8eOB2Fjg/Pnrbe+9Z1qGuflm9frlQ1yaISK38GRgIhls2gTccYe4rXdvU7ufFSTzFgMRInILTwYm8sLZs0D9+rbtJ08CKSm+748GcGmGiNzCk4GJPGCuimodhHz1lem1IA1CAAYiROQmngxM5KZPPwVCQkyl2M2GDweMRuC++9Trl0ZwaYaI3GI+GXjU8mzoAFHSKk8GJrJgrypqrVqm5ZkAKkjmLc6IEJHbeDIwkRNVVUCnTrZByI4dptcYhIhwRoSIPMKTgYns+L//A/7+d3HblCnAa6+p0x8/wECEiDzGk4GJ/pSdbTobxlKTJqaiZFFR6vTJTzAQISLZGIwCZ0gouFy+DDRtasr7sHTwIJCRoU6f/AwDESI/ouWBnmfPUNCZOBF45x1x24IFwLPPqtMfP8VAhMhPaHmgN589Y13U3Xz2DBNYKaBs3gz06ydu69UL2LIl6KqiyoG7Zoj8gJYPmePZMxQ0zp0DdDrbIOTkSWDbNgYhHmIgQqRxWh/o3Tl7hsgvCQLw4INAYqK4/Ysvgr4qqhwYiBBpnNYHep49QwFt5UpTVdQvv7ze9re/maqiPvCAev0KIMwRIdI4rQ/0PHuGAtKJE6bdMJZCQ027YxJ4fIGcOCNCpHFaH+h59gwFlKoqoHNn2yBk+3aguppBiAIYiBBpnNYHevPZM+a+WOLZM+RX3n4bCA8H9uy53jZliikPpGdP9foV4BiIEGmcPwz0Wjx7xmAUkHX8AtbsL0DW8QvctUOO7dtn2g3z/PPX21JTgStXWJrdB3SCIGj2v87S0lLo9XqUlJQgLi5O7e4QqUrLdUTMtFJwzR8+K9KA8nLTEsyZM+J2VkX1mjvjNwMRIj+ilYFeyxwVVzN/SiyuRgBMsx9vvy1umzcPGDNGnf4EGHfGb+6aIfIjPGTOOVc1V3Qw1Vzpl57EAC5Y2auK2rOnqSpqLQ6JauCnTkQBw52aKwzogsz580C9erbtf/wBNGrk+/5QDSarElHA0HrNFVKBIACDB9sGIf/5j+k1BiGqYyBCRAFD6zVXyMdWrTJVRf3ii+ttQ4eaqqI++KB6/SIRLs0QUcAw11wpKqmwmyeig2lLMYurBbi8PKBJE9v28+eBOlyS0xrOiBBRwPCHmiukoKoqoGtX2yBk2zbTMgyDEE1iIEJEAUWLxdXIB+bMMVVF/fnn622TJpkCkF69VOsWucalGSIKOJkZyeiXnsSaK8Fg/36gXTtxW6NGwKFDQHS0Kl0i9zAQIaKAxJorAa68HLjpJuD0aXH7r78CrVur0yfyCJdmiIjIv7zwAnDDDeIg5N13TcswDEL8DmdEiIjIP3z/PdCnj7jtlltM7ayK6rf4J0dERNrmqCpqfj7QuLHPu0Py4tIMERFpkyAAQ4bYBiGff256jUFIQGAgQkRE2vP556aqqJ99dr3t4YdNVVEHD1avXyQ7Ls0QqcBgFLi1lMie/HwgLc22nVVRAxYDESIf25hTiOnrckWnxCbrIzFtYDqLbVHwqq4GevYEsrLE7d9/D9x2mypdIt/w2dLMG2+8AZ1Oh+eee85XjyTSnI05hRi1PNvmqPqikgqMWp6NjTmFKvWMSEVz5wJhYeIg5MUXTXkgDEICnk9mRPbs2YP3338frbm/m4KYwShg+rpcu4exCTCdhTJ9XS76pSdxmYaCw6+/Am3bittSUoDDh1kVNYgoPiNy+fJlDB06FEuWLEF8fLzSjyPSrN15xTYzIZYEAIUlFdidV+y7ThGp4coVoGFD2yBk/37g5EkGIUFG8UBk9OjRGDBgAPr27evy2srKSpSWlop+EQWKs2WOgxBPriPySy++CMTEAAUF19vmzjUtw7Rpo16/SDWKLs2sWrUK2dnZ2LNnj6TrZ86cienTpyvZJSLVJMZGur7IjeuI/Iq9qqjduwPbt7MqapBT7E//1KlTGD9+PDZt2oTISGn/sL700kuYOHFizc+lpaVISUlRqotEPtU5LQHJ+kgUlVTYzRPRwXRUfee0BF93zS9wy7OfunABqFvXtj0vD0hN9Xl3SHt0giDY+zfRa19//TXuu+8+hIaG1rQZDAbodDqEhISgsrJS9Jo9paWl0Ov1KCkpQVxcnBLdJPIp864ZAKJgxDycLhzWnlt47eCWZz8kCMAjjwCrVonbV60CHnpInT6Rz7gzfisWiJSVleGPP/4QtY0YMQItWrTApEmTkJGR4fIeDEQoEHFQdY85eLP+h4rBm4b95z/AX/8qbhsyBFixAtBxFisYuDN+K7Y0ExsbaxNsxMTEoE6dOpKCEKJAlZmRjH7pSVxmkIBbnv3MH3/YX245d87+8gwRWFmVSBWhITp0a8py1a64s+WZn6eKqquBXr2AH38Ut2/ZYpugSmTFp4HItm3bfPk4IvJz/rTlOWiTaefNA8aNE7f9/e/AW2+p0x/yO5wRISLN8pctz0GZ93PggG3djwYNgCNHTHVCiCTy2VkzRETuMm95djSvoINpwFdzy3PQnR905QrQqJFtELJvn6lIGYMQchMDESLSrNAQHaYNTAcAm2DE/PO0gemqLYG4SqYFTMm0BqMimxN9b/JkU6Bx6tT1tnfeMW3VtS7XTiQRAxGiIGYwCsg6fgFr9hcg6/gFTQ6YmRnJWDisPZL04uWXJH2k6lt3g+b8oG3bTNtuZ8263ta1K1BVBfBEdfISc0SIvOSvSYr+lNeg1S3P/pRM65HiYqCOnd1IJ04AaWm+7w8FJAYiRF7wp8HckqMiYea8BrVnGuzR4pZnf0mmdZsgAMOGmQqQWVq50lSYjEhGXJoh8pC/JikGXV6DgvwhmdZtX3wBhISIg5DBgwGjkUEIKYKBCJEH/HkwD5q8Bh/QejKtW06eNOWBDB4sbj93Dvj8c5ZmJ8UwECHygD8P5gGf1+BjWk6mlaS6Grj1VqBxY3H75s2mJRqWZieFMUeEyAP+PJgHbF6DirSaTOvS/PnA2LHituefB2bPVqc/FJQYiBB5QInB3Fe7b8x5DUUlFXaXlnQwfZv3q7wGDdBiMq1DBw8CrVuL25KTgaNHWZCMfI6BCJEH5B7Mfbn7xpzXMGp5NnSAqP9+l9dA7rl6FWjZ0nRKrqXsbKBdO3X6REGPOSJEHpAzSVGN3Td+n9dA7psyBYiOFgchb79tygNhEEIq0gmCoL20/j+VlpZCr9ejpKQEcXFxaneHyIa3MxkGo4BbZm11mPhqnlnZOamPIjMUzpaD/LVQG1nZvh247TZxW5cuwA8/AGFhqnSJAp874zeXZoi84G2Soju7b5TIP3CU1+CvhdrIQnGxaceL9XdNVkUljeHSDJETUs5iMQ/m97S9Ed2a1nFr1kCLu2/8tVAb/UkQgEcfNZVmtwxCVqww/cwghDSGMyJEDvhiVkBrW2ldFWrTwVSorV96klsBF5d5fOTLL4EHHxS3PfggC5KRpjEQIbLDV2exaG0rrRJLRVzm8YFTp4BGjWzbz54F6tXzfX+I3MClGSIrvizfrrUS4XIvFXGZR2EGA9Crl20QsmmTaRmGQQj5AQYiRFZ8Xb5dS1tppS4B5Z8vd3mNP5/H4xfeew+oVQvYseN623PPmQKQvn1V6xaRu7g0Q2RFjQRSrZQI75yWgKS4SBSVOv+9rdx9EmP6NHfaP1/uCAqqHJScHKBVK3Fb/frAsWPADTeo0yciLzAQIbKiVgKpFkqEh4bo8HDnRnhn8xGn1xWVVroMIHwV0AVNDsrVq8DNNwN5eeL2vXuB9u3V6RORDLg0Q2TFnEDq6Pu0DqaBTskEUinbhpWSWjda0nWuAghfBHRBk4Py8sumqqiWQcjs2aZlGAYh5Oc4I0JkxZOzWORcGlD7G767AYSj37vSO4KU2mqsKT/8APTsKW7r1AnYtYtVUSlgMBAhssOcQGodECTZCQjkDBx8tW3YGXcCCFe/dyUP11O7Kq2iLl407XgxGMTtx48DTZqo0ycihXBphsiBzIxk7JzUBytHdsXcIW2xcmRX7JzUxyYIkWtpQCu7TKRuKd6UW+Ty967kjiAtVqX1miAAw4cDCQniIGT5ctNrDEIoAHFGhMgJZwmkci8NaOkbvqsZoX7pSbhl1lZJv3eldgRprSqt1776CnjgAXHb/fcDX3zBqqgU0BiIEHlI7sBBa9/wnQUQWccvuPV7V2JHkNaq0nrMUVXUM2eAxETf94fIx7g0Q+QhqQHB5twiSdep/Q3f3k4dRwf6aSFo0lpVWrcZDMBtt9kGIf/9r2kZhkEIBQnOiBB5SGpA8MGufHRKS3CZD6HmN3x3E27VDprMHC0hxceE4dV7MrRbR2ThQuDZZ8Vt48cDc+ao0h0iNXFGhMhDruqNWJKSZKrWN3xPEm61UGvFLDMjGVMHpCMhJrymrbi8CjM2HNJeHZHffjPle1gGIYmJQFkZgxAKWgxEiDxkDhyk7GGRejaNr8+d8XSnjpaWRTbmFGL0imwUl18TtWuqqFlFBdC0KZCRIW7/5RdTLghLs1MQYyBC5IXMjGQ83iNV0rVS8yWkbBuWizcH/GnhsD6tbHl2aupUICoKOHHietubb5ryQDp0UK9fRBrBHBEiN9irItovPQkf7sp3+V538iWk7jLxtqKrp0mn5udWVhsx+8E2gA44f7nS5wfOaWnLs42dO4FbbxW3degAZGWxKiqRBQYiRBI5SuicOiBdlSRTOSq6epJ06uy5vh7stbB7x8bFi6a8j+pqcfuxY6blGSIS4dIMkQTOEjpHr8jGoDamgd9X+RJyVXR1N+lUa4fMaWX3DgDTUstjj5mqoloGIZ98YnqNQQiRXQxEiKxY1tPYdew8fjhyDpO/POg0D2Htr4VY8Eg7n+RLyJkX4U7SqRbzMTSze+frr4GQEGDZsutt994LGI3AsGHKPpvIz3FphoKSo9yKbw6cxstrclBcXiX5XuY8hPiYCOyc1Ef2UubW5M6LkHrAnxbzMTw5KVlW//sfkJJi286qqESSMRAhxXmbUCn3/RzlOGTcGIdNuWc97tfZsgpFSpnbe46c1wHOy7kr+Vw5uHNSsmwMBuCOO4CtW8Xt331naiciyRiIkKLkSKiU837mHAfrxYPCkgqn3/al8NXhakrlRbgKojSVj2FFqYP17Fq0CBg1Stw2dizw7rvyP4soCDAQIcU4GvTNiY3u5k54ez9nOQ7e8PXhamqVgtf6IXOKz0bl5gI33yxuq1sXyMtjQTIiLzBZlRQhd2KjHPdzlePgCXNewpBOKVh/4HTNYXFKMCfRrj9wGkM6Nap5vnV/AGXyIrRUTdWnKiqA5s1tg5A9e4Bz5xiEEHmJMyKkCLkTG+W4nxK5C/poU2GqdzYfrWnzZunJEXtLUrX/fPalK9cTa+XIi3CWg6NKPoaapk0D/vUvcdusWcCLL6rTH6IAxECEFCF3YqMc1+WfL5d0DylqR4fhsW6pmLvlqGxLT444WpIquVIFAcCEvs2RWjfG47wIy8Aj/3w5Vu4+iaLSyprXrQMrn+ZjqMBgFHDoi2+R8dAA8Qvt2gE//QSEh9t/IxF5hIEIKULuxEZvrzMYBazcfVLSPaS4r20DfPxTvsOlIh1MS0X90pO83iHkbElKB2DVnlPYOamPR8+xN9NizV5g5YvdQWrY/ONh3NqrNTKqxdu3d2zYhZ79u6vUK6LAxhwRUoTchabcuZ9lQTJzzsbuvGLRt3xPmcf6pT/+4bTWiLPD4tzhzaF0rjiqkmrvGYAGDo9TkiDgf/c/jL49WiLCIgiZMGAi0iatx/AdF7Vxii9RAOKMCClC7kJTUu+3KbfI5ht+Qkw4Wt2ol/Qcm3vrgP4ZSagfF4kPd+XD3XHY27wUpWp3uLuDSNXD45S2Zg1w771oaNH03+Zd8fR9UyDoTN/V5JrhIiJbnBEhxch9TLyz+y14pD1+L7qMZ+x8wy8uv4btR85Jeob1wCwIwIaDRfhqX4FbfTXztqaGUrU7PN1B5OtiZYoqKDBFmvfeK2ruOOYTPHX/yzVBCCDfDBcR2eKMCClK7sRGe/e7WF6Jf63/TZalF0csd6ZIIVdNDaVqd3gaUKhRrEx2BgNw553Ali2i5uGDp2N7kw5O3xpQgRiRRnBGhBRnTmy8p+2N6Na0jtdT25b3K7l6Dc+u2KdoEOIuOWtqKFW7w92AwmeHxylt8WKgVi1xEDJ6NLKOnXcZhAABEogRaQwDEfJbBqOAyV8d9Po+taPCZOjNdXKfuCv3EhfgOvnXUkAUKzt0yLQM8/TT19vi44HSUmD+fO2c4ksUhLg0Q35r/tZjbi+ZWPpbt8a4KyMZRkHA0H//LFu/Zj/YBj2a15XtfoD8S1zOkn+t+XWxsooKoE0b4MgRcfuePUDHjjU/qn6KL1EQYyBCfslgFLB0V55X97grIxndmtaBwSi4zMOIDAvB1SqjpPueL1dmmcjb2h3WFVP7pSfZrZKarI/EkE6NkFo32r+LlU2fDrzyirht5kxg8mS7lwdd1VgijWAgQn5pd14xLl31fDbEcppdyuzAkE6NsPTHfEn31mIegbNTi3dO6uO3VVLtlqP/KQvo0UN8Ydu2wM8/u6yKGuhVY4m0iIEI+SVvdy9YT7Obvw1P/uqgzXKPPjqs5lwXV+rEhGsuj0DuU5C1wjq4iqu4jD0L/obQ6mviC48cMR1aJ1GgVo0l0iomq5Jf8nTWIUQHvPdIO4cDr72ck5IrVXhn81FJwciMezI09e1Z7lOQtUJUFVYQMOubuTgwdwgiLIOQjz4yFYJxIwghIt9jIEJ+yZ1dH5bmP9we/Vs3sGk3D9j2mM90AWy30Fp6umca+rdWZ2bBXll7QNkS8WqxDK76Hv0Z+W8OxEMHN9W8vrlZZ3R/9b8wPPo39TpJRJJxaYb8kju7PgDbE2StSRmwL12pwoS+N2HVnpNWJeTD8Oo9GejfuoH9nAWrGRIp17jDWf5HZbW0BFt/KtS1O68Yxv/9D/nvPWbzWqfRn+DcDfFA2bXALEdPFIAYiJDfcrTLIVkfiakD0hEfEy55sJc6EKfWjXaY3OksIDAHQFKuccReALMpt8hp/sdzfaUtS2gxwdYugwFNh92Pn3/aIWp+7MFXsK1pR1GbPwVXRMGMgQj5Nbl2Obhzpou9ZEYpCaEAPE4atRfAJMVFoqLa4DD/Qwdg5e6TSIqLxJlSeUvEq+Lf/wZGjkSiRdMn7fpj6h3P2r3cb4IroiDHQIT8nhy7HLw508VVQqgOwCtrfwOgc3qN5emulrMf+eevYM7mI7YBTKnzb/wCgKLSSkzoexPmbD7iVqEuuZePvHL4MNCypaipNPIG9HjmQ5RFRNtc7lfBFRExECECvKusKSW/xNVZOJZJoyVXr9nMfngjtW603SUsfXQYRnRPQ7/0JNH13iwfyaqy0lT/4/BhcfvPP+PH6BRcZhVUooDAXTNEf/L0TBdXMxPu2PxnzodcQQhgWqLIzEjGzkl9MKFv85qzdS5dqcI7m4/glllbsTGnEIDVtlgL5uUj83WK+9e/gMhIcRDy+uum7bidOyty/g4RqUMnCIJiBQRmzpyJr776CocPH0ZUVBS6d++OWbNm4S9/+Yuk95eWlkKv16OkpARxcXFKdZMCgJxLCe7ca2NOIaasPojics+rvFpKiAmT7V6AaSZj56Q+Ncm09nJUzL+zBY+0w4wNhxwGQeYlD/P9FJGVBXTvLm5r1Qr45Re7VVE1tYRERDXcGb8VXZrZvn07Ro8ejU6dOqG6uhpTpkzBHXfcgdzcXMTExCj5aAoiciwleDKgORrYrekAJMaG45pBwEUHh/TpACTEhONC+TW7r3sqPTkWu/OK0aFxvMvCZi+vyXEaBFkuH8m+LbakBGjQALhyRdz+++/ATTc5fBuroBL5P0VnRKydO3cOiYmJ2L59O3r27Onyes6IkCuuvuVLmab3JJAxGAXcMmuryyUUcw5D7egwhycFm/s6okcqPtyV7/R+nkqICUexTEHO3CFtcU/bG2W5FwQBePppYMkScfvSpcBjj8nzDCLyOXfGb5/miJSUlAAAEhLsZ7NXVlaitLRU9IvIETnKl3uaE+EqQdUsJsI06egoCAGu5zVYJ43KSa4gBJBxW+z69UBIiDgIGTAAMBgYhBAFEZ8FIkajEc899xx69OiBjIwMu9fMnDkTer2+5ldKSoqvukd+yNvy5d4EMlKLZbla3qkTE47tL/RGZkayx2Xr5aRz8nAdxKcWe+z0adODBg60bTcHJ0QUNHz2X/zo0aORk5ODVatWObzmpZdeQklJSc2vU6dO+ap75IekBgOOrvMmkJE6K1By1Xni6YXya/gkKx9r9hdgd14xpg5o6fR6pZkXaq3jEVm2xRqNQGYmcKPVss6GDaYHJ3OnC1Ew8kkdkTFjxmD9+vXYsWMHGjZs6PC6iIgIRERE+KJL5MfMiaUbc4okXW8dNJjf/63Eraj2AhkpBdD0UWG45CIQAYAZGw7V/P9kfSSe6pmGz/b8T9J7lfBEj1R8k1MkruL6Z85Mv/QkZB2/4P4ulQ8+AJ58Utz2zDPAwoUy956I/I2igYggCBg7dixWr16Nbdu2IS0tTcnHURCwl1jqjPVSgrvvB+zPfkgpgHZr8zpYd0BasGRWVFKBxTvyMP725piz5ahb75VL3/QkTBmQbvdcG+sEXZe7k37/HWjRQtwWFwecOmX6XyIKeoouzYwePRrLly/HihUrEBsbi6KiIhQVFeHq1atKPpYClKPEUmd6WGztdPf9rnIinBXVeqpnmttBCHA9oPnsl1NIilNndvBi+bWabbH3tL0R3ZrWqTlcT3JSb2UlkJ5uG4T89JNpq67MQYjBKCDr+AWs2V+ArOMXnCYoE5G2KLp9V+cg823p0qV4TEJWPLfvkpnU7bL2mE7jbYl/rc91WWrd2iIJ23+ta5B0aByPXm9973V11OckzIpEhYUgNESHy5UGr55lKdmqaJmrz96m0NmrrwJTp4oveu01YMoU2fpoSTMl6YmohmYKmvmwRAkFOKnbZe0pLKnAsyv2ydyj66yLau06el6WEu3VEr7VX60yev0ca9ZFy6Qm9eZ+9V+0GpwpfjEjw1QVVaHcLymnHjMYIdI2HnpHfkHO81ykMp+aGxsZhvOXKyUlZ27MKcTkLw/K1AP5A/leN9XD9iPnXF5nTtA1GAXsOnbe6bU3VF7BT+8Nxw3XrJZcXVRF9ZaUU48tTzQmIm1iIEKatzGnEDPW/+bz55pPzR36759r2pxN+Ust+e6KeamjW5O6mP/9cS/vJtazeV1JgUhibKTrxF5BwOvfLcAjv24Ut3/wAfD44zL01jl3tl+zDDyRdrFyEGmaeXCX8yA4bxSWVOCZ5dmYu/mIKCHS2bdzazqYSr7r4LxeR9emdZCst92x46lkfSQe7ZYq6Z5bDzs/Bbj38T3If3OgKAgR7upvqorqgyAE8L6ODBFpAwMR0ix3Bndfe2fzUfR4Y2vNbhF3clgEAG/c38rlMfbmLcJyGdQmGeG1QjB1gOt7frAz3+7nXu9yMfJn3Y2lX0wXtX+/dR9032zwaVVUqUXlZCtJT0SK4NIMaZY3Caq+UFR6PSGyslp60mh8dFhN3kKfFvXxSVY+/ii+gsYJ0Xi0WyrCa10fzDMzkvFEj1R8IMNheIt35KFdo3jEx4S7vNY6T1YnGPHhF9PR+8ReUfvzf3sV/V54XJWEUClF5ZLkKElPRIrijAhplr9MqU9fl4u6MdJ3hVy8UvVnZdhC9Hrre8zYcAgfZ/2BGRsOoddb39vU5Ogr42F409floqjEvTo+gw9sQt6bg0RByKdtMzH721y8uXSKartSLGeMFClJT0Q+wRkR0ix/mFI3J0RCZ8rBkDqDsym3CEt32S5/2Nt26uqbv7t93XXsgqTr04oL8P2Sp0Vtl8Oj0O3Zj1AWEYNPm9azqb7q60HfXFTOOqk2iXVEiPyGogXNvMWCZsHNXEjL2wFYqhvCQ3D5mmd1OeYOaYuIWiF4Znm2pOsTYsJRXH7N7ms2BcJwPWkXUGJTr1hEdRXWLhuPv5w/KWq/b9hs7LvRVCm1dnQYImuFirZVq1lEzLqonBpBERFd5874zaUZ0ixnU+9yu7t1MrL/eSeS9ZEePSsxNhKZGcl475F2cDb+6QAkxIQ5DEIA+6f+OionL7fRP36G3//vPlEQMvvWYUidtL4mCAGAS1eqbGq7OCz37gPWJekZhBD5DwYipGm+GIBjIkIxd0g7hNcK8WiXSu3osJqEyP6tG2D+w+3tXmceGu9re6Ok+1rnyGRmJGPnpD5YObIrxvRu5nY/nWl7+nfkz7obL/zwSU3bkTqNcNPzqzG/+xBJ9zDP1ExflxtQZ73wHBsiZTFHhDQvMyMZRiPw8pocpzMJ9txUPwZHzpQ7vaa80lBT9Moc+ExZfVBy7ZIR3dNE38D7t07GohDbvIX4mDC8ek8G4mMiJO2CcXTqb7emddA5LQFfZv9P8rKV9QnBZjdUXsGP7z2GuGtXRO19nlyEE3UaSrizWKAVEeM5NkTK44wIad7GnEKMXpHtdhACAGdLpb3HcvYhMyMZU+++WdL7osNDMaaP7exEZkYypg5IR4LFVtni8irM2HAIF8uvOV0CcnXqL+D+stUNkbUwzqqfr363ADlz/ioKQl7MHIfUSes9CkIs+cuOJ2ccndas5hIUUSBiIEKa5m1Rs0tXpc1qWM8+JMVJWwp6umcTu/kIjoKnopIKjF6RjUFtHH+bFmAqPuYqz8HRslXt6DCEh4rfW1ZRjXlbjyE6PNRUFXXW3Ri2/9ua17entUeTF9fiv90GOH2mVP6w48kZV+fYAIG3BEWkFi7NkCaZd0HsPHbO66JmjpYlzK/ZK3olZctsfHQYxvRpbtMu5TC2tb8W4slbU7Hkh3y79zYXH3M1/Z+ZkYx+6Uk1O0byz1/BO5uP2L227uWL2LPgUZv2zs8uw7lY0zLKiO5pDt8vhfnz7NA4HlnHL/jtLhaeY0PkOwxESHNcHrbmJlffWe0VvTIvfYxanm03kNEBeKx7GtYfOG0z0EodxL7MLnB6jeXJsc62p5rzRgxGAd1nbra5l04w4oMv/oU+J34RtT/xwFRsadYFwPW8h37pSVi156Skz976czF/gh0ax6Pza5tFs1H+llfBc2yIfIeBCPmcs0FVrhNspQjRAfMfbu9wcHRULCs+OgwCIJo5sBxopQ5OrpJhzd+4S65ek5QwuTuvGGfKxEtBDx7cjNnfzBG1rWhzJ8rnLsCTDWtjkJ0/A3MA5ujP4OmeaWjXKN6mT7Wjw1BZbcT6A7a5E/YKtWkZz7Eh8h0GIuRT9mY7akeF4bHuqejQOB6Tvzzos0PujAKgjwoTtVkHSX1a1EdsZBiyjl8AICA0RIe5W47Z3MtyoJVzcPrut0Is+/EPSRVYLUu326uKeiUsAl1Gf4yyiBj87dJVjOzV1O4zHQVgdWLCMeOeDPRvbXqeeEmoHO9sPurw92FekrKc5dEynmND5DusrEo+48vZDqlqR4XhjQdaITMj2W6QFKITHwBn/bMl8+C0/YXe6PXW907zS6LCQnG1yuCyf7GRtVBWUe30eTsn9cGm3CJMWZ2DstJyrF02AS3P5YuuvX/YW8i+sWXNz1MHtMQTtzZx+myp1UrNFXClLqWtHNnVL/IqHFWzNX8C/jK7Q6QGd8ZvzoiQT3i7+0Upl65WYdTybDx5axqW/JBn87p10OFsk4Q59+OTrHxM6d8SY1fuc3itlCAEgMMgxPJ587cew5zNRzAq63O8uONj0TVv3zIU7/Z4WNSmA3BTYiwMRsHpzIQ598QVd09J9pe8Cp5jQ+QbDETIJ9wdrHxJAOwGIZ6aseGQ4iXpLe3+fCPylowTtR1LaIj+I+bhWq0wm+sFAI8u3S1bAqm7gYU/5VVY70ryxx1ARFrHQIR8wl++BctFjpmfOjHhuOCkiFtM5RVkLRyBuEpx5djbn1yI43VSXN5frgRSdwILV4XatEjqzBAReYYFzcgn/OlbsNp0f/6acU+Gwwqs//rvQvw256+iIGRS5likTlovKQgB5CvMZU7slMLeVmkiCm4MRMgn3Bmsgp0+OgzP9b0JfdPrY0inFNHsym3Hf0H+rLvxt30batp2pLZD2otr8VmbO91+lr2Tft0VGqJzWikWAGLCQ7GIyZ1EZAeXZsgnLAuEaS1hVQvapcQh7/xVXLpahUtXqvDO5iOYu+VITXJsPQdVUbds2ouRWwrh7d63XcfOeZwDYTAKWPur83NXYiNroV96knedJKKAxECEfCYzIxkLHmmP0SsYjFjbd6rUps0omKqiLvlyBvoe3yN6zbD6a2xq1lm2wG7+98dr/r+7SaxSEpGLSitZDp2I7OLSDPnU0bOXNRWE6DScrnB/zhbkvTlIFISsbH0H2r2yEdf6340pq3MU+SzdPV2W5dCJyBucESGfMRgFLN0l3zZZT5jPR7m9RT3sO3XJZZl1NaQWF2CbVVXUq7Ui0GX0MpRG3gBcrUan1/6Ly5VGRZ5vmcQqpQoqy6ETkTcYiJDP7M4rFh2EpoYkfSTaN6qNDQeLVO2HPWGGKqz5eCLSz4qDtfuHvoXshi1FbVKDkDG9m6J5/Vjkny/Hyt0nUVRaKbk/jk6Xta642qFxPMuhE5HHGIiQ16SWAldzat58ns3SXXmaDEKe+ekLTN7+kajtnR6PYO4tj3h13x7N6tUEEmP6NK/5czpSVIYF2467eDdQVCr+M7NXBj9ZH4lBbZKxeEeewxN5uW2XiBxhIEJecTQw2Ut2VHNq/tLVKszZ4vhQNrW0LjyCtR9PFLUdT2iI/iPeRWWtcI/va28WwrIw1wc/nJB0n+LL12dQHJ0VVFRSgcU78vBUzzSs/bWQ5dCJyC0MRMhjjgamwpIKPLM8G0/0SEXf9KSaGRJzLRGtlnr3pZjKK9i56AnEV5SJ2m9/YiGO15VWkMwZAcCQTilYf+C03VmqhBhpQY75OmdnBZlP1l37ayG2v9Abe/+4yHLoRCQZAxHyiJRD7D7YlY8PduWLZkhYSwR4ZdMiPJa9XtT20p1jsLJtpiz3vyGiFmqF6vDO5uszQNazVEn6KEn3Ml/naouuuTDa3j8ucosuEbmF23fJIz+duCB5ZsNyO6j5RNPa0baHsQW6nif2In/W3aIg5IfGbdHkhTUyBiGhKK+sxqUr4qRg6y25UivdXvzzrBtu0SUipTAQIbdtzCnE6E+zJV9vfaZJv/QkLHi4Pdqm6JXpoAZEh4fghgjThGPd8ovIn3U3Pv7PNNE1XZ79CI8OeRXGkFCvn2de/KgVGuJw+QS4/mcQGqLD1AEt7VwpNmOD6fq6MRGS+iH1OiIiMy7NkFsc5YW4Yp66n7/1KFbtOeXTPJHxtzfDqt0ncabM8Um2crtyzQidUI0lX72Gfsd+Fr028v6Xsal5V4/uG6ID7J1Pl6SPxJBOKaLlGGuW58p0a1oH8RKChppzaKSmeUi4TuouKyIKDgxESDIpeSGuOBsolVA7KgztG8Zj38lLOFN23mfPvS9nK97Z8Lao7fNWffHiXePdLucaFgKk1onB0XPldoMQAJg6IB1VRmm1Rc6WVcBgFLDz2DnJ10t1/rLzOiXu7LIiouDAQIQkk3KmiNZculqF4cv2uL5QJo0vnsb2xU+J2ipDw9BpzCemqqgeqDICR8+VO3xdB9MSyuzBbSTdL/98OTq8uskmj8QRd7ZdO7vW2fbfUcuzsZCn8xIFJQYiJJl1cSu6LsxQha8/fh43nxXX53hg6JvY2zBd0Webl1wgwGWF09rRYZJnpaxrkXhTPVXK9l9HJeW5lEMU2BiIkCQbcwoxY/1vandDk57++Qu8tO0jUdvc7kPwzq3DfNqP8+WVNdujHVU4FSSuq9mriOrq3s6qp0rd/mtdUp5LOUSBj7tmyCXzlLoWD4hTU6vCo8ifdbcoCDkR3wB/ef4rnwchgGlZxLw9Oslqa26SPhLP9b1J8lk/CTHhNkslzu7talnFk+2/5r931gGMu6cDE5G2cUaEnJIjQdUsISYcF8uv+X0xs+hrV7Fz0RNIuFoqau/7xHs4VreRz/tjvSySmZGMfulJNssZ6w+clnzPlwe0tBtYOLq33Cf0erOUQ0T+hYEIOSVHgqoOQP24CAzp1EiT5724Y9rm9zFi7zpR25Q7R2NF27tU6pGJ9bKI5bkyZu4knTqrvGrv3q6YC6hJzTHxdCmHiPwPl2bIKTkqZQoAKqqNfh2EmKuiWgYhuxq3RpMX1qgahCRLWBYx65yWgKQ418FIUlyEw6RTT4WG6DBtoClp13r+wl6OCSu5EgUPzoiQU96emKvTmRIkpW4V1Zo65Zewd75tvkfXUR+hKK6uCj26bkLf5hjTp7nkpYnQEB1eGZSOZ5Y7r4r7yqCbFVnuMOeYWCef2juh192lHCLyXwxEyClXU+quSN2loTmCgPdXv4Y7j/4kan76vin47qbuKnXKxJtdI5kZyVg0rD0mf3XQJjisHR2GN+5vpehuFKk5Ju4u5RCR/9IJgnaHitLSUuj1epSUlCAuLk7t7gQt8+4FAH6faCrFvb99jznr/0/U9p+Mvnihv/tVUeUyrEsjdGgcjyR9lCx1NAxGAT+duICs4xcACOjWpC66Nq2jqcRPR3/vzD1kATQi7XJn/GYgQpLYq+cQaBpdLMSOxSNFbddCaqHj2OUeV0WVy6dPdEGP5uouBamBdUSI/JM74zeXZkiSzIxk9GlRH11nbg64eiK1DNVY/cnzaHXmuKj9waGz8EvDm1Xqldj5cudnuAQqT7cLE5H/YCBCku3942LABSEjf/4K/9j2oajt3W4P4e2ej6rUI/uCOSnTk+3CROQ/GIiQZIG0VfLmomPYsOw5UVt+7WTc+fh8VIZFqNMpO5iUSUSBjoEIOWV54Nj5Mv9fHoi+dhU73n8Sda+UiNr7Pb4AR+s1VqlXzjk7w4WIyN8xECGHvjlwGi+vyREtx4ToAKNm05ud++fmxXh871pR28t3PIvl7fqr1CPnakeF4Y0HlN1OS0SkNgYiZNfMb3Lx/o48m3Z/DEJuyduH5Z9PFbVlNWqFoQ+9CmNIqM/7c1dGEr7NKXJ53YKh7dGjWfDtlCGi4MJAhGx8c6DQbhDibxxVRe02aikK4+qp0COTYV0bY9/JiygqdbzUlayPRNcmnidoWi6pOdtpIvU6X/Nlv7T6GRAFCwYiJGIwCnh5TY7a3fCOIGDR168j80iWqPnpe6fgu7+oXxW1a5M6eGXQzRi1PNthgbhBbZI9Hgyl1t7Qao0OX/ZLq58BUTDhoXcksjuvGMXl19TuhscG5W5D/psDRUHIlxl9kPriOtWDEOB64mlmRjKe6pnm8LrFO/KwMafQ7fubq5FaF54rKqnAqOXZNfeUep2v+bJfWv0MiIINAxES8dctuhlFx5A/6268u252TVu1LgRtxq3E8wMmqlaa3dJdGfVrvmUbjALW/up8oJu+LhcGN5JyDEYB09fl2p1lMbdNX5eLa9VGSde582w5uOq/IGO/pH5Wvv4MiIIRAxES8bfCWeHVVcifdTfWW9UEGfzIG2j24lqURMWq0zE7bqp/vS+784qdlssXABSWVGB3XrHk+0u95ydZ+bI/Ww6u+g/I1y8lPn8i8gxzRKiGwSjAKAiIqBWCymqj2t1x6b3Vr6P/kR9FbXsbtMADj8528A51zd1yDC2T45CZkSx55smdGSqp1+ZdKJf92XIoKpX2PKnXOaPE509EnmEgQgBMO2VMNUO0nx9y2/E9+OiL6TbtNz/3OcojolXokTQ6mKb7+6UnSZ55cmeGSuq1a/aflv3Zcii+LK1gntTrnFHi8ycizzAQIYc1Q7QmruIyDswdYtP+8JDXkNW4jQo9co/ldH/ntAQk6yNRVFJhN0/Bk9Luru5pVlZR7fJeySqUlU+ICZf1OmeU+PyJyDPMEQly3xw47RdByHcfPGsThPwnoy9SJ633iyDE0tmyCoSG6DBtYDoA06Bnyfyzu6XdLe/prakDfF9WPkkfJet1zijx+ZNvGIwCso5fwJr9Bcg6foEJxQGAMyJBzB9qhgzZvxFvfDffpr3Z379Gdah//vU1T/dnZiRj4bD2NnUskryoY2G+55TVB706KTlehlkHd5lnKZwlkco5U6PE50/KYt2XwKT4v+QLFizAW2+9haKiIrRp0wbz5s1D586dlX5s0HKnSqSpZojng5WSbiw5i12LHrdpv+Px+ThSL9X3HZKJPrIWcgpKUFRyFUn6KPRLT0K/9CRZK3tmZiTjapUREz7b7/E91EjSNM9SOCr0poP8sxSZGcmyf/6kDHPdF+u/G+a6LwuHtWcw4qcUDUQ+++wzTJw4EYsWLUKXLl0wZ84c3Hnnnfj999+RmJio5KODkr1vCwkxYXj1ngz0b93A5not7gjQCUbkvTnIpn32rcMwv7ttfoi/KamoxmvfHKr5Walvc0lx3iVZqpWk6WiWQslvvaEhOnRr6nk5fVKeq7ovlongDCL9j04QBMUW2Lp06YJOnTph/nzT1LrRaERKSgrGjh2LyZMnu3x/aWkp9Ho9SkpKEBcXp1Q3A4KjbwtmT/dMw0v9xfkDWccv4OElPynfOYn+vuNjjMn6XNR2OTwKGc99romCZErRAbJ/mzMYBdwya6vLxFV7kvWR2Dmpj6r/oPP8F7Ik9d+qlSO7MqjUCHfGb8VmRK5du4a9e/fipZdeqmkLCQlB3759kZWVZfc9lZWVqKy8vjWvtLRUqe4FFGffFsze35GHNg3j0b/19cFu8yHXJ8D6ws1Fx7DBqiAZAHR59iOciQ3802fNFUPl/DZnucyhA9wKRrSQpMlZCrLEui+BTbFdM+fPn4fBYED9+vVF7fXr10dRkf0BcObMmdDr9TW/UlJSlOpeQJFSkRIAJn91ANeqjTAYBYxdsRcf7MxXvnNOmKuiWgchEwZMROqk9ZoOQqLDQzGhb3O890h7m10XnlCiiqd5mSNJL22ZpXZ0GBZxnZ00iHVfApumth289NJLmDhxYs3PpaWlDEYkkPotoLSiGu1nbEKtEB0uXVU3SXX+mlm4+/APorZ9yX/BfX/7P5V65B59VBjG9GmO0BAdFobY5jR4wvzn6M6yhKtrrZMx88+XY+XukygqvT7zWDs6DCO6p2FMn2aqz4QQ2cO6L4FNsUCkbt26CA0NxZkzZ0TtZ86cQVJSkt33REREICIiQqkuBSx3vgVcrnRdzEpJvU7sxbL/TLNpz3juc1zWcFVUa4UlFfhoVx4e65EmGuw35Rbh6/2nPapQmxgb6db2RKnXWi9zjOnTnPkX5FecLTWy7ov/UzxZtXPnzpg3bx4AU7Jqo0aNMGbMGCaryshgFNDx1U24eEWbW3EBx1VRH3noVfyY2tb3HZKJvYHfPEtRVFqBGet/k7RFOlkfiakD0jF6hW3CsfmfVsuEVkfJyfauJQoUrCPiPzSRrAoAEydOxPDhw9GxY0d07twZc+bMQXl5OUaMGKHkY4POptwiGJWLJ7327Ydj0PJcvqjty4w+eH7ARPtv8CP2ahhYzkBEhYU43c0EmIKHqQNaYsYGadsT8ef/51ZGCjas+xKYFA1EHnroIZw7dw7//Oc/UVRUhLZt22Ljxo02CazkOVfbdtX00K/fYdbGeTbt/lwV1Zqrgd9RXQwz87c5fVS45GPpjYIg+dpuTetwKywFFO6oko9W/m1QdGnGW1yacc5cK8LbJEm5NSg9ix8X2lZFvfPx+fjdj6uiurJyZFd0Tkuw+x+25XJN8eVKJMSEI0kfVfP6mv0FGL9qv8tnPNEjFV9mF0hKNp47pC0iaoVwKpuIbCi9zKWZpRnynqOI1WAU8NGuPG0FIYKA/DcH2jS/fctQvNvjYRU65Fubc4sw8fP9Dv/DdvYtTmrC8Qe78iX3J/98OeZsPsqS2EQkorVy+ZwR0TBHEeugNslY+2uhpoKQiTs+wbisz0RtFbXC0WLilwFdFdUVKcmjBqOAn05cwOhPsx3OdOhg+hilHDRq3sooCIJom669a9SuoEpEvuVqJl2ufxs4IxIAHEWshSUVeH9Hnip9sif9zAl889E4m/auoz5CUZx2C5LJyVmQ4CqHxF6wae/+AgB3vjI81DEFc7Ycdfi6dR4JEQUHVwUw1fi3gYGIBkkp2a62MEMVjs6+z6b9+f4T8GWr21XokTqkBAmO/sOWmmicpI/EXRlJ+FDCskzt6DA81LEhPvrR9bUAS2ITBRstlstnIKJBUku2q+XdtW9i0KEdorYDSc0waPgcdTqkIneCBMv/sKUEm7Wjw7Dg4fbo2rQOducVS3rG8G6peHeLbV6IIyyJTRRctFgun4GIBmn1W+qtedn45PN/2rS3eu4zlEXEqNAj36sdFYa+LRPRo3k9JMVF1uySkRIk1I2JQNbxCzhbVoHzZZUug81LV6oQEqJDaIhOUonr+nER+GzPKUlBCEtiEwUnLZbLZyCiQQnR4Wp3QSSyqgLbFj+FpMviQ9mG/XUGdqa1U6lX6rh0tQpfZBdg86GzGNEjDZ3TEiT9h62PDsPz//kVRaXuBZnmoFRKieuHOzfCO5sd54VYY0lsouCjxXL5ip2+S547XFSmdhdqvPT9hzj89oOiIGR1+m1InbQ+oIKQ2tFhmD+kHRJiwiRdf+lqFd7ZfAQdXt2ETblFmDYwHQBsTuI1/4d+6UqV20EIIJ4edXSabpI+EguHtUdqXWmzUrWjwrh1lyiIufq3xNf/NnD7rgZN/fogPvnppKp96PbHAaxcNUXUtrthOh5+eCYMIaEq9UpZE/o2R0p8NKaty0FZhcGt9y4a1h4AbHbA6KNqodoooLzSvfs520LnqLZM1vELeHjJTy7v/emTXdCjWXDsaCIix5SsrMrtu34u/3y5as+ufbUU+999xKa9xzMfokCfqEKPfMedZQ1r09flYuekPuiXnoT5W49h6a48XLpahZKrnp927Gh61FGJa1dLRICpDk3XJtyuS0TaKZfPQEQjzJHp5twi/HDsgu87IAiYt/ZNDDz8g6h59KBJ2NDyVt/3x88UllTgnU2/Iyw0FHM2H/F66/UD7W+sOeBOKsu1X0cGtUlmXggRaQqXZjTgmwOF+MfXB3HxiuvzQ5Qw4NAPWLB2lqhtTcteGD/w70FdFVVtnp77MPObXIdF73RwXuWViEgOXJrxI84GDaU1LDmDnYuesGlvO24FLkUFbuDnLzw598FgFLD210Kn1ziq8kpEpAYGIir65sBpVYKQUKMBn62YjI4Fh0TtDw95HVmNW/u8P2SfZXn4Pi3qY+8fF10mlWmxfDMRkTMMRFRiMAr4x9cHff7cx35Zi1e2LBa1Lep8P97o/bjP+0KumQOHrjO3oLj8Wk27o2UbLZZvJiJyhoGISnbnFePiFc93VLirxdk8bFw6VtR2OrYu+oxchIowlvn2BR2AhJhwvDygJU4WX8HK3Scdno5rzTIIARwv22ixfDMRkTMMRFSyObfIJ8+JrKrA94ufRvJl8U6cu0a8i0OJTXzSB7pe6Oy1+zJqAocxfZrjo115mLHhkOM3OuDoVF8tlm8mInKGlVVVYDAKWL2/QPHnTN62FIffflAUhEy/fSRSJ61nEOJj1hULzdu1E26IkFzN1ZplvoeZeQsvYL/KK8DS7kSkLZwR8TGDUcBHu/JQXK7cVl17VVH3NmiBvw6dFbBVUbVoQt/mSK0bI0ouNRgFzN96FEt35ePSVXn+Dljne5jLN1tXeU3ycDswEZGSGIj40MacQpvBQU6OqqLe8swH+J++viLPJFshOmD+w+3Qv3UDUfvGnEJM/uogLslcL8ZevkdmRjL6pScpVr6ZiEguDER8wPwt2JsS4k4JAt5d9xYGHdohah4z6EWsb9lTmWeSzcmVZvMfbo/+rcWzDhtzCjFqebbXFVetJcSEOcz30Er5ZiIiZxiIKGxjTiFeWZvr0cmrUvQ/vBPvrXlD1Lauxa0YO+hFVkV1oHZUmNfLIhP63oRVe06KZrccbak1GAVMX5crexACAPe1vZGzHETk1xiIKEipb8EAcGPJWexaZFv7o93YT3ExWq/AEwOHN/GZedfJmD7NMKZPM0lLH66KjHmjr5vn0RARaQ0DEYUo9S041GjAqhUvoVNBrqj94SGvIatxG5mfFpguXqnC+NubYd7WYzC68Qdkb9eJo6UPy+O1j5657GWP7feF23CJKBAwEFGIEt+Ch+9dh+mb3xe1Le50H17vY3teDDmXWvcGzB3SDmNX7pP8Hqm7TpROSgZMuSk8SZeIAgEDEYXImRNiryrqmRsScNvIxbgazgqZnii+XIn0BtKWsMb0booezepJ2nUi53Jcsj4SGTfGYVPuWbuvL96Rh3aN4rkdl4j8GgMRhRRflla625nIqgpsWTIKN5adE7X3f+xd5NZnQTJL0eEhuHLNKPn6hJhwyeetNK8fK2n3iRzLcZa1Rzo0jkevt753ej1P0iUif8dARCEJMeFevX/Sto8w6ucvRG0z+jyJDzrd69V9A9XVKulBCAAk6aMkXyv1XBZvl+N0AFbtOYWdk/ogNESHrOMXeJIuEQU8BiIKcWegs9T15AGsWimuirov+S8YPHQWqkP5x+WI4MY0RLJFkqec57J4e6KtdWDBk3SJKBhwZFOI+fAxqd+Q9VfL8Ou7D9u03/L0v/G/2tyiKRcdxLtepg1Mx6jl2TbFyTw5l0WuE23NgQVP0iWiYMBD7xQ0pFOK64sEAXPWvWUThIwb+AJSJ61nECKjhJgw0cFzwPVzWZL04sHc+pA6KczBp7fZGubAwtX9dBDP7hAR+SPOiCjgmwOFeHlNDorLrzm97q7DO7HQqirq+r/cgjH3TGJVVJnViQlH1ku3I7yWbewt17ks5pNvnc2w6KPDUHKlSvJS0JBOjfDO5iN2rwV4ki4R+T8GIjKb+U0u3t+R5/SaBqVn8eNC26qo7cd+imJWRbWhj6yFkopqr+7xt26pTgdsuc5lcXXyLQBJS0GuapHwJF0iChQ6QXAnzc+3SktLodfrUVJSgri4OLW749I3B07j2RWOC2SFGg1YsXIKuvzvN1H7Iw+9ih9T2yrcO//16ZNdEKLToajkKmZsOISL5dc82iLr6CwYJVhWVrWeYbEXZFj2zVUtkgl9m2NMn+acCSEizXJn/GYgIhODUUDr6d+hvNJg9/VHs9djxqZForYlne7Fa32e9EX3/FayPrJmOyvgXcEw87Dtbu6HEhwFKgajgFtmbXU4E2JevrH8TIiItMad8ZtLMzKZv/Wo3SDkL+fy8d2HY0RtZ2Pi0eupJayKKoF1GXPz0scra39DUal7ReMEmAZyLRQBc7QU5KoWCWuHEFGg4a4ZGRiMApbuyhe1RVRVYufCx22CkAGPzUXnMZ8wCJFo7a+FMFidTJeZkYxdk2/HhL43uX0/y4Fci1g7hIiCDQMRGezOK8alq1U1P7+wfRl+f/sBNCy9fkbIq70fR+qk9fitflM1uui3HAUNoSE6jO/bHIuGtUey3v2gTqsDOWuHEFGw4dKMDMyDWudTOfh8xWTRa/uTb8KDQ98Mmqqo0eGhyLy5Pr7ad1q2ezoLGqy33p4vq8SMDYdc3lOrA7m5dohc1V6JiLQuOEZHhTUwXMWJWQMRYjV03Pr0v3EqyAqSXblmQHy0d+fsWHMVNFjmWxiMAv69M89vB3IptUhYO4SIAgmXZrwhCMCjj6JTx+aiIGTcwL8jddL6oAtCANNguXp/gWz3crdyqHkgN7/f+n6A9gdyOau9EhFpHbfvusm87TJ09Zfo/MLTote+uak7nr33JVZFhen0YU/rfQDeb7V1VavDHzirRUJEpGXcvquQjTmFWPjJNqx58xHbF8+exeF9xcDWYz7vlxbd27aBzU4iZxJiwlBcfj3h19vKoXKVbVeTXNVeiYi0jIGIRBt//R/iB96FNadyRO2P/nUGdqa1w8Iz1WiaeINKvfOdGyJq4XKl63Lr/dKT0DktAa+szUVRqeNkU3POxvYXemPvHxdlDRo4kBMRaR9zRCQwLliAzLYp6GIRhHzYYRBSJ63HD2ntAJiKZNW9IUKtLrok12rRmw+0lnwirKneRx9M6Nvc4bWAKWcjvFYIujWtg3va3ohuTev41cwFERF5jjMidpjX5q/u248+g/uKorVz0bXR6+kluBIeVdNmLpIFAU63XqrlwfY34ots7xJIk+Ii8Mqgm/9cKhHsnqljLxnUVO/jJvwlKdbhQXD+krNBRETyYyBiZWNOId74ah8+fvtxNCo5I3rt7uFzkJPUzOF7z5dXOtx6qRYdgM2Hz7q8zp772jbAbS0SRUslG3MKHdbpcBZYBELOBhERyY+BiIWNOYU49tQEbMv6TNT++m0jsLjLAy7fnxgbiW5N69g9Bj5ZH4lBbZKxeEceAN8FKQKAS1eqXF5nz43xUbin7Y01P7s6cG7qAOezG8zZICIiawxE/mTYvgOZt/UStR1Iaob7h812WRXVukiWo2//ABAdXgtLd+WLSsLrdKaSJFrTrUndmv9vMAqYvi7XYRCiAzBjQy7uzFD3MDkiIvIvDEQuXgTq1UOoQXxybs+nluBkvOvcBUdFsqy//dura2GmxSCkdnQYulr0n6fCEhGREoJ314wgAMOHAwkJgEUQMv7u55E6ab3DIKR2VJjoZynVLs1LGs4Gcq154/5WosCKp8ISEZESgnNG5PJlIDZW1HThzrvRoc3TLve5LhjaHiE6neSES1dLGlqTEB2G1+9vZRNY8VRYIiJSQnAGIlu3in8+cwa169ZD8qytLg9L69rEvRoXrpY05FQ7OszjxFSzqXfbTzjlqbBERKSE4FyaGTAA+Pxz4IcfTEs0iYmKHZbmi6WKZH0kFg1rj70v98PKkV0xd0hbTB3Q0qN7Jemj7LYHwmFyRESkPUE5I2LQhWB3+z6m5ZXjF2qWV8ynnspZeEuupYoQHWC0mIpIiAnHvW0b1JRSNwcA5kRRg1HAv3fmSS6uJmVGw9HnkxATjnvaNoA+KhwGo8BghIiIJAu603elnMoq56mnBqOAW5ws+bhifuqCR9ohPibCaZ+s+32xvBKj/6yA6uzZ7p50a37O5twirN5fIDqszt9OuCUiIvm5M34HVSDiqCCXq4HY28DE/FzAcUBgrsRqnechdWB3FGANapOMtb8WitqtZ1c8CR48/SyJiCjwMRCxwzwz4Shx1Lw0sXNSH1GQIWUGRQpndUQAID46DDPvb+VRGXRXQcGCR9ojPia85p4dGsd7ddKtp58lEREFB3fG76DJEfGkIJejAb6opAKjlme79a0/MyMZRqP9w+IA4OKfsyDulkF3tj1YwPWKp9ZBgTdFx1jcjIiI5BI0u2bcLcjlaoAHgOnrcmEwSptQMhgFh4fFAaaAwZ37mbkTFMiFxc2IiEguQROIuFuQS+4BXqmAQY2ggMXNiIhILkETiJgLcjnKWNDBlPth3r4q9wCvVMCgRlDg7mdJRETkSNAEIu4W5JJ7gFcqYFAjKGBxMyIikosigUh+fj6eeOIJpKWlISoqCk2bNsW0adNw7do1JR4nmbkgV5JePNjbO7hO7gFeqYBBraDAnc+SiIjIEUV2zRw+fBhGoxHvv/8+mjVrhpycHIwcORLl5eWYPXu2Eo+ULDMjWdIWWfMAP2p5dk2NDzNPBni572f9e5K7IqzU53qy3ZiIiMjMZ3VE3nrrLSxcuBAnTpyQ/B4lKqu6S646Ikrdz5KcFWGJiIg8pck6IiUlJUhIcL7sUFlZicrKypqfS0tLle6WS3J/61dyFsHdGiRERERq80kgcuzYMcybN8/lsszMmTMxffp0X3TJLXIP8AwYiIiITNxKVp08eTJ0Op3TX4cPHxa9p6CgAJmZmRg8eDBGjhzp9P4vvfQSSkpKan6dOnXK/d8RERER+Q23ckTOnTuHCxcuOL2mSZMmCA8PBwCcPn0at912G7p27YqPPvoIISHubdLRQo4IERERuUexHJF69eqhXr16kq4tKChA79690aFDByxdutTtIISIiIgCnyI5IgUFBbjtttvQuHFjzJ49G+fOnat5LSkpSYlHEhERkR9SJBDZtGkTjh07hmPHjqFhw4ai13y0W5iIiIj8gCLrJY899hgEQbD7i4iIiMiMiRtERESkGgYiREREpBoGIkRERKQan5V494Q5p0QLpd6JiIhIGvO4LSU3VNOBSFlZGQAgJSVF5Z4QERGRu8rKyqDX651e47PTdz1hNBpx+vRpxMbGQqdT7xTZ0tJSpKSk4NSpU6zwqhB+xsrjZ+wb/JyVx89Yed5+xoIgoKysDA0aNHBZ0FTTMyIhISE2dUjUFBcXx7/0CuNnrDx+xr7Bz1l5/IyV581n7GomxIzJqkRERKQaBiJERESkGgYiEkRERGDatGmIiIhQuysBi5+x8vgZ+wY/Z+XxM1aeLz9jTSerEhERUWDjjAgRERGphoEIERERqYaBCBEREamGgQgRERGphoGIG/Lz8/HEE08gLS0NUVFRaNq0KaZNm4Zr166p3TW/t2DBAqSmpiIyMhJdunTB7t271e5SwJg5cyY6deqE2NhYJCYm4t5778Xvv/+udrcC2htvvAGdTofnnntO7a4ElIKCAgwbNgx16tRBVFQUWrVqhV9++UXtbgUUg8GAqVOnisa5GTNmSDozxlOarqyqNYcPH4bRaMT777+PZs2aIScnByNHjkR5eTlmz56tdvf81meffYaJEydi0aJF6NKlC+bMmYM777wTv//+OxITE9Xunt/bvn07Ro8ejU6dOqG6uhpTpkzBHXfcgdzcXMTExKjdvYCzZ88evP/++2jdurXaXQkoFy9eRI8ePdC7d298++23qFevHo4ePYr4+Hi1uxZQZs2ahYULF2LZsmW4+eab8csvv2DEiBHQ6/UYN26cIs/k9l0vvfXWW1i4cCFOnDihdlf8VpcuXdCpUyfMnz8fgOmMoZSUFIwdOxaTJ09WuXeB59y5c0hMTMT27dvRs2dPtbsTUC5fvoz27dvjvffew6uvvoq2bdtizpw5ancrIEyePBm7du3CDz/8oHZXAtrdd9+N+vXr44MPPqhpe+CBBxAVFYXly5cr8kwuzXippKQECQkJanfDb127dg179+5F3759a9pCQkLQt29fZGVlqdizwFVSUgIA/HurgNGjR2PAgAGiv88kj7Vr16Jjx44YPHgwEhMT0a5dOyxZskTtbgWc7t27Y8uWLThy5AgA4Ndff8XOnTtx1113KfZMLs144dixY5g3bx6XZbxw/vx5GAwG1K9fX9Rev359HD58WKVeBS6j0YjnnnsOPXr0QEZGhtrdCSirVq1CdnY29uzZo3ZXAtKJEyewcOFCTJw4EVOmTMGePXswbtw4hIeHY/jw4Wp3L2BMnjwZpaWlaNGiBUJDQ2EwGPDaa69h6NChij2TMyIwffA6nc7pL+tBsaCgAJmZmRg8eDBGjhypUs+J3DN69Gjk5ORg1apVancloJw6dQrjx4/Hp59+isjISLW7E5CMRiPat2+P119/He3atcNTTz2FkSNHYtGiRWp3LaB8/vnn+PTTT7FixQpkZ2dj2bJlmD17NpYtW6bYMzkjAuD555/HY4895vSaJk2a1Pz/06dPo3fv3ujevTsWL16scO8CW926dREaGoozZ86I2s+cOYOkpCSVehWYxowZg/Xr12PHjh1o2LCh2t0JKHv37sXZs2fRvn37mjaDwYAdO3Zg/vz5qKysRGhoqIo99H/JyclIT08XtbVs2RJffvmlSj0KTC+88AImT56MIUOGAABatWqFP/74AzNnzlRs5omBCIB69eqhXr16kq4tKChA79690aFDByxduhQhIZxU8kZ4eDg6dOiALVu24N577wVg+uazZcsWjBkzRt3OBQhBEDB27FisXr0a27ZtQ1pamtpdCji33347Dh48KGobMWIEWrRogUmTJjEIkUGPHj1stp0fOXIEjRs3VqlHgenKlSs241poaCiMRqNiz2Qg4oaCggLcdtttaNy4MWbPno1z587VvMZv756bOHEihg8fjo4dO6Jz586YM2cOysvLMWLECLW7FhBGjx6NFStWYM2aNYiNjUVRUREAQK/XIyoqSuXeBYbY2FibnJuYmBjUqVOHuTgymTBhArp3747XX38df/3rX7F7924sXryYs9IyGzhwIF577TU0atQIN998M/bt24e3334bjz/+uHIPFUiypUuXCgDs/iLvzJs3T2jUqJEQHh4udO7cWfjpp5/U7lLAcPR3dunSpWp3LaD16tVLGD9+vNrdCCjr1q0TMjIyhIiICKFFixbC4sWL1e5SwCktLRXGjx8vNGrUSIiMjBSaNGki/OMf/xAqKysVeybriBAREZFqmOBAREREqmEgQkRERKphIEJERESqYSBCREREqmEgQkRERKphIEJERESqYSBCREREqmEgQkRERKphIEJERESqYSBCREREqmEgQkRERKphIEJERESq+X8qHKM71U3GzAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "$h(\\Theta)$ = 0.71x + 0.00" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lr = LinearRegression()\n", "lr.fit(X, y)\n", "y_pred = lr.predict(X)\n", "\n", "plt.scatter(X, y)\n", "plt.plot(X, y_pred, color='red')\n", "plt.show()\n", "\n", "# print(\"$h(\\Theta)$\" f\"= {lr.coef_[0][0]:.2f}x + {lr.intercept_[0]:.2f}\")\n", "result_str = r\"$h(\\Theta)$ = {:.2f}x + {:.2f}\".format(lr.coef_[0][0], lr.intercept_[0])\n", "display(Markdown(result_str))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Numpy implementation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "$h(\\Theta)$ = 0.71x + 0.00" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lr = 1e-1\n", "n_epochs = 5000\n", "a = np.random.randn(1)\n", "b = np.random.randn(1)\n", "\n", "for epoch in range(n_epochs):\n", " y_hat = a + b * X\n", " error = y - y_hat\n", " loss = (error**2).mean()\n", "\n", " a_grad = -2 *error.mean()\n", " b_grad = -2 * (X * error).mean()\n", "\n", " a = a - lr * a_grad\n", " b = b - lr * b_grad\n", " \n", "result_str = r\"$h(\\Theta)$ = {:.2f}x + {:.2f}\".format(b[0], a[0])\n", "display(Markdown(result_str))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## manim test" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# from manim import *\n", "# from manim import config; config.media_embed=True\n", "# %%manim -v WARNING --progress_bar None -r 400,200 --format=gif --disable_caching HelloManim\n", "\n", "# class HelloManim(Scene):\n", "# def construct(self):\n", "# self.camera.background_color = \"#ece6e2\"\n", "# banner_large = ManimBanner(dark_theme=False).scale(0.7)\n", "# self.play(banner_large.create())\n", "# self.play(banner_large.expand())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```{raw} html\n", "\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "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.11.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }