UniTO/anno3/apprendimento_automatico/esercizi/1/coverage_plots.ipynb
Francesco Mecca 35a4cabdc3 meo .1
2020-06-16 18:27:43 +02:00

329 lines
60 KiB
Text

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Coverage plots"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us consider the following function which applies a linear model to the given data. \n",
"Specifically, given a \"model\" vector containing the model coefficients $(a,b)$ and a $n \\times 2$ \"data\" matrix containing the data points to be classified, the function outputs a vector $\\mathbf{z}$, $|\\mathbf{z}| = n$ of booleans where $z_i$ is `True` if $a \\cdot x_{i,1} + b \\cdot x_{i,2} \\geq 0$, it is `False` otherwise."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def apply_linear_model(model, data):\n",
" return np.dot(data, np.transpose(model)) > 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us define `data` by generating $1000$ points drawn uniformly from $\\mathcal{X} = [-100,100]^2$."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-49, 30],\n",
" [-72, 67],\n",
" [-19, 37],\n",
" ..., \n",
" [ 51, 68],\n",
" [ 18, -98],\n",
" [ 35, -65]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = np.random.random_integers(-100,100,[1000,2])\n",
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and let target_labels be the labeling output by applying `apply_linear_model` with our target model: $4x -y > 0$"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"target_model = [4.,-1.]\n",
"target_labels = apply_linear_model(target_model, data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By using matplotlib.pyplot module it is easy to plot the generated points onto a 2D plot:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x107f83e90>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python2.7/site-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n",
" if self._edgecolors == str('face'):\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEACAYAAABRQBpkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsXWeUFMXafnty98xsAiRJzkgQRMAAKmACEfDqxYAB/UQx\noOIiggKKGTGimHMGFRMGgiBJcpSMBMkiEjbv7E59Px7qdqjqCbugzNLPOX1YZnqqq6q73xwUxhg5\ncODAgYMTG65/ewIOHDhw4ODfh8MMHDhw4MCBwwwcOHDgwIHDDBw4cODAATnMwIEDBw4ckMMMHDhw\n4MABHQVmoCjK24qi7FUUZZXhs4cURdmhKMqyI8fFhu+GKYqyUVGUdYqiXFDe6ztw4MCBg/JDKW+e\ngaIonYgol4jeZ4y1PPLZKCLKYYw9azm3ORF9TESnE1FNIppGRI0ZY9FyTcKBAwcOHJQL5dYMGGOz\nieiA5CtF8lkvIvqEMRZhjG0lok1E1L68c3DgwIEDB+XDsfQZ3KkoygpFUd5SFCXjyGc1iGiH4Zwd\nBA3BgQMHDhz8izhWzOAVIqpHRKcS0W4ieibGuU49DAcOHDj4l+E5FoMyxv7kfyuK8iYRfXvkvzuJ\nqJbh1JOPfGaCoigOg3DgwIGDMoAxJjPRx8Ux0QwURalu+G8fIuKRRt8Q0ZWKovgURalHRI2IaKFs\nDMZYhT1GjRr1r8/BWZuzPmd9Fe8oD8qtGSiK8gkRnUNElRVF2U5Eo4joXEVRTiWYgLYQ0S1ERIyx\nNYqiTCCiNURUQkS3sfKuwIEDBw4clBvlZgaMsaskH78d4/zHiejx8l7XgQMHDhwcPTgZyP8Czj33\n3H97CscMFXltRM76Uh0VfX3lQbmTzo4FFEVxrEcOHDhwkCQURSF2PDmQHThw4MBBasFhBg4cOHDg\nwGEGDhw4cODAYQYOHDhw4IAcZuDAgQMHDshhBg4cOHDggBxm4MCBAwcOyGEGDhw4cOCAHGbgwIED\nBw7IYQYOHDhw4IAcZuDAgQMHDshhBg4cOHDggBxm4MCBAwcOyGEGDhw4cOCAHGbgwIEDBw7IYQYO\nHDhw4IAcZuDAgQMHDshhBg4cOHDggBxm4MCBAwcOyGEGDhw4cOCAHGbgwIEDBw7IYQYOHDhw4IAc\nZuDAgQMHDshhBg4cOHDggBxm4MCBAwcOyGEGDhw4cOCAjgIzUBTlbUVR9iqKssrwWZaiKFMVRdmg\nKMoURVEyDN8NUxRlo6Io6xRFuaC813fgwIEDB+XH0dAM3iGiiyyf3U9EUxljjYlo+pH/k6IozYmo\nLxE1P/Kb8YqiONqJAwcOHPzLKDchZozNJqIDlo8vJaL3jvz9HhH1PvJ3LyL6hDEWYYxtJaJNRNS+\nvHNw8O/jr7+I1q4lKiw8OuNt2ULUsSNRejpR27ZE69YdnXHLg717iV57jUhViRSFKBQimjXr357V\nCYDXXyeqXp0oK4vo7ruJSkrEcxgj2rqVaPNmomj0H59iRYDnGI1blTG298jfe4mo6pG/axDRfMN5\nO4io5jGag4NjhC1biKZMIdI0oj59iF5+mWjUKCKfD8fUqURt2pR9/OJios6diXbtwnu9fDlRp064\nbih09NaRDO69l+illzA3jrw8oi5diA4e/PfmFRPbthH9+CO4V58+ROEwiObUqUQbNhC1aoWNThR7\n9hB99x2Ry0XUqxdRpUry8/76i+jrr/F3z55EJ51U9jV8+y3RPfcQ5efj/2+8QRQMEj32mH5OYSFR\n9+5E84+QllatiKZNO05vynEMxli5DyKqS0SrDP8/YPn+7yP/jiOiawyfv0lEl0nGYw6OT8yfz1go\nxJiqMhYMMlajBv4GlcFRs2b5rvHbb4yFw+Yx09IYmzv36Kzh008Zu/hixvr2xbXiYfJkrNU4H+Px\n1VdHZ15HFYsWmW9UnTqM/f03Y7fcgv8HAoxpGmMjRyY23oYNjGVk4DeaxliVKoxt3y6et3UrY5Uq\n6edlZjL2++9lX8e114ob3rCh+Zxhw8wPod/P2MCBZb9mCuMI7SwTHT9WmsFeRVGqMcb2KIpSnYj+\nPPL5TiKqZTjv5COfCXjooYf+9/e5555L55577rGZaQphxw6i/fuJGjeGsHc0sH8/0fbtRHXrEmVk\nxD2dBgwgys3V/19UBJOJEbt3Q1gLBMo2p7Q0okjE/FlJCdGff8IKUK+eeM1E8dprRIMHQ9BUFKLJ\nk4mWLMGeGhGJEN1xB9HHHxOVlmKddqhRo2xzOaa47TbzjYpEiIYPJ3r/faKCAv3zp54iuv32+NJ7\ndjbR4cO6CaaoiGjkSKK33zafN3w4VKXSUvy/sJBo6FCiiRPLto5KlYjcbn08IvFBXbjQvKaiInx2\nAmDmzJk0c+bMozNYWbmI8SBRMxhDREOP/H0/ET155O/mRLSciHxEVI+IficiRTLeMeOcxyuiUca+\n+YaxZ55hbOpU8fvBgyHMhcOMVa6cmEQbDx9+CIEqLQ1C3NdfQ7AbN46xV19l7K+/zOevXs2YyyUK\nam63+f+VKsmvV1LC2IQJWOOcObHn9n//p0vjmoa/g0HMt1cvjJUsZs2CoGqcq6IwNnSoeO7gwbiu\nnTbAjypVsI/FxcnPx4j58xl79lnGPv6YsUikfGMxxhirXVucbPfujKWnmz8Lhxlbsyb+eO3aieOd\nfz5jkybhhk6fjvPOPVc874wzyr6OHTvwQPl8ePg0DTfSiEGDoA3w63m9jF1/fdmvmcKgcmgGR4MR\nfEJEu4iomIi2E1F/IsoiomlEtIGIphBRhuH84QTH8ToiutBmzGO5X8cdolHGrrsOxM7nw7/Dh+vf\n//STaKZo1EgcZ/Vqxi67jLHzzmPstdcwrh127hTNO4EALAv8vfN6GXvvPf03TZqI77nfz1hWlvmz\nIUPE65WWwjTD16hpjD3/vPmcVasY69MH83/jDZhzHnyQsdatzQxH0xh76aXk9njsWHvifsstjPXr\nx1jnzow98QQYTb16cqaXlob5166N/3u9WNMZZ5SdIbz5JubG733nzmVjdv9DNIoJGTm3pjH2zjtY\ngJWbFRbGH3PUKPMGqipjbduab+hDDzH29NPm8zSNsUcfLcdiGGO7dzM2Zgxjo0fjIbHi0CHGWrXC\nwxsO4+WwSjInCP5VZnAsjhONGXz/vVmwIcL79eef+P6ZZ/B/K2Ey4vff8R4oiv4OPvGE/TVnzRKF\nRKuEzz+bNAm/kX3frh3eQStTsTKi6dPF87xevMdLljA2ZQq+N85/zBj89uSTxev276+vu3VrjFW3\nLmMLFohrLSjA9zJGoGnmeblcjF1zDWOnnSbuw/XXM/bLLzC9W9cSCjE2cWLSt55t2KCv2TjWN19H\nGVu7FpuTCLE2YvhwkdPfdx++mz8fjh5FYax+/cRVzEgE6prXi4fxmmvk3LVqVahuPh/OHTAAnG3v\nXtycffuSW0uiKC7G2ubN0/dr2zbcSK+XsVq14qujFQAOM0hRRKMgMFZGwAnCunU4T+bArF/fPNYj\nj4jEukoV+2tv3y7SCytR4keHDozNmCF+r2nQ0K1zc7lE+vXZZ6JQ6vUyVr06Pvd4xOtWq4bfnn++\n+XtVhVYRiUBCNwrAaWkivdm7V9xjlwvC5B13yNf8yy9Yn8cD5nbSSRBQGQNts5rLVJWxV15J7v4X\nF4MuW68dViNs26k9MYFwGIv84w9xgL17GXvxRcaeegrHk0/Cy271vvt8jD33nPm3paXJTZYjGsUx\nZYooTRhv7KhR+o145x1sYloaNmrChLJdO9l5NmxofilCIcZ27Tr21/4X4TCDFMXEifIoFUUBISwq\nwnnRKEwZqor3LzOTsWXLzGONHp0cM2AMphg+JrfFy6T/00+Xv/eXXcbY+vVmAdHjYaxNG/0aXEPY\nts28Vrcb9MGOAXEhkzHQwdq1MUeXC+t/6y3GevSQE+UWLcBAfvkFvz9wQKSPwSDM0TfdJL92QQFM\n6U8+CTq6d6957zp2NDMoTUvej7NggZwJ9nF/zUoDmnmzunY1/3j7djiPjJvodmMigYD4QDVsCKki\nWZSUMPb441hw795QZaJRqK1W7m490tLgQ7DeZFWFenUssWePuA9pacdp6NfRg8MMUhSjR8uJYdOm\nulZgxIYNjP36K0wrVmzaJJpZHnkk/hx27mTsu+/gPN60CVqAdT4DB4qSdTAIaZ8xxn74AZKzxwOa\nsWsXNINrroGQqKqYy88/g8l5PDA3W525Vq3DaOb68ktxDrEYCR9jzhzGTj3VbGbzeHR/53vvib9z\nu0HvSksZu/tuXNfvhxbBBeq9exk7+2yMVakS9i9RvP22yJyMx/dnPSJ+WL26eZBbb5Vzbr4Ambqp\nabBJJoM77xTNQdxZcvHFchtevCMtjbHly5ObR7LIyxNtg8EgY7NnH9vr/stwmEGKwqoZKApMF0Zs\n3w6f3JNPgljbYfduxu69l7FmzWAmffnl2A5kjm++wbueng5BqmVL8d2VaQaaxtiKFfbjDhpkNkNp\nGiJljDj7bLNkHwiAcHfqBJOLcf5dusSnMTLmcMklovbl9TL2wAOgF5EIGBOnq14vnO+MwVdj9YU+\n9VT8PY2FWbNE85zx6NmTsej4V8wXdrsZ69bNPFCfPrE3wyoV8+OCC5KbsJ2zhQgLGTyYsfHjEwu9\nMv7uwIHkN6+oCOrs6NE6N4+Fxx/HvLiX/5JLEnspUhgOM0gBFBRAyqxeHYT1nHMYW7mSsRtv1M2p\nVauaNYKNG3Eu98WFQnICvGULpGyfD3TD7WascWPk4sSKcCkokNv7re9uhw4wuYTDmGcgoDt37dCg\ngTjO1Vebz9m6FYJlOIwxr7jC3pTdtWt8RlCnjvj5pZfKTXGBAGPNmzOWn489ev99rGnePP2anTuL\nvytPlCRjjN1/v/0afD7sCSspgc1OVbE5depAKohEGBsxAna41q3tCX6s48ILE5/s6NHxx2vSBOfO\nmRObyxmPsvgMiovxIGoabramiX4QGX7+GTf200/L7idJITjMIAXQs6doHw6F8PJv3szY0qUgTEZc\nc41InC+6SP8+Jweaup25RFUxhh22bBEFumDQbGHQNN3MevAgY4sXw7RkxZo1ENb+/BPHKaeYx3W7\nkfGbk2P+XU4ObP/c8nDvvXLhbcoUkdbwvQkEIPC+8IIoyc+fD81GRjeDQXPorBWXXy5njmefXfbI\nxSuukN+rQADaz//WHo3CLrh8ue6Nv+kmfYGKghvFJd9EJfJp0+QTy8uD1D1+PKT2VavszVDGo1Mn\nfYy3347/G6+Xsf37E9usnBxIIYsWIaRNFo42dSpiqh0wxhxmcNwjN1fuKPR4Ygs3F1wg/ub00/Xv\nr7pKbhq2XsMuZr2wULRdqyqEqEsuAeNJxOd45526IzoQwN/8vXW5dILq88G+vnmz/tv77xfNSePH\ny68zdSqYX48eMLH17w+m4/XqTvDrrsO+XXop/Ct8/++5R2Safj8YiAzbtsEPYkfPrP7cRPHgg+J4\nLhcS3woKYvwwGhWJvpEh2EkEfj9jZ56JhDM708rOnWZuqShiLLPsuqGQGMkwcSJuQO/eeLitzCEr\nKzFTzaef6mUzgkE40mQqHo9QuuMO/bdFRciaHDYMdtATCA4zOM6Rny8XmLxeRAba4a23REn36af1\n76tWjc0IODOIpR1Pnw6GwE01r78unrN/P0w8zZtDuuf5D4xBcItVt0cmWRv9IjIfRdeusJI0bw5h\n+PBh+dxzc+Xawg8/yM+/8EIzjVNVeQ4TYzDRy+ZupLFlwYIF5jn7fIz9978J/DAajc/5rYfPBy98\nPPNI27aJjef3I4Fs3Dg4pbZujT/vZ5/F78JhcGyjHY4xSCpWW+Ybb4ib7/fH1oCCQcZmzsRYZ5yh\nvzjBIExrTz+NB+/MMyu0E9lhBimAa68VtYPMTD12XYZoFD6wrCzUCBs61Pxet2ghfy+MEUVGgckO\nhw/DFyEzfUQiIMqciHq98EfwsNe33orNDOwY1M6dMHvLvgsEdFrABVuZMLlpk/zawSAiC604eBDm\nulAIOUiywJotWyCExlsDz4GIhx07cB0j0/n8c/iOVBVWlliBASYMGZKYozYQwMBdumAjPR6oJHYS\neaVK8cesVw82t7Lgzz/hIMvN1T8rLYVK6fFAUvrvf6HKVa9uP4cePTAP2U3XNEgQMhWc+xiM5x7r\naKZ/CQ4zSAF88w2eU07kGjXSBav8fGjUgwcjRPHbb/H3s8+a3x8r5s3De8Fr9zRqBKfzgAEw8bzw\ngigU7tzJ2MMPIyF10aL48161Sp5tu2QJvl+4MLlAEk6rTjtN1JZUVW6dCATkTLOgQB6iqaqMvftu\nYvfFisaN5RoBt5zwYpyJRGh++60eqaVp8IcwBpp86636d8GgvB6VgGgUEvnFFyP122ja8fnAxS64\nAI7f664zf69pjH3yiXzcTp1i37DMTCSz3Xcfxo4lwSSKcePMD04gEFvz8XrNaqs1pNXnS86hLitI\nVQHgMIPjHKWlojDDnZtFRebAEI9H14YDAdjEY9mSN2/GO/LRR/ABxsL27dAyuPCkqqh7FAvr1slr\nGBlNxWPG6CbkjAwcdn5ERWHs5ptFguvxQJCV0QOfz76KwfTp8mu8807sdTGGfeUaDmOxfTv/+Q/M\n2K++iioR8VBSIr/nCxfCmmH9rlJ6hEUfeADROR06iOYUK4qLISnzUtRt25rDNWWF6q69Vj7WoUNm\n7cDnwxEKgVs9/TQeAkXBZlSuXH6GcMkl4vxi2eW6dzdLNsuXYx6hEB6aM85InBG43dCUKiAcZnCc\n4++/RYk3HEbc/VdfiZK3VcrlyV3JYv16jM9NFEOGiES6ZUv9/H37IM3+8ovudC4qkkcM+nwQUjn2\n7wfjWLNGHlbKhbtbbwUds+Yt+P1gEjLh7vLL7dcYjYq+U0WJrRkUFiJ7mofh3ngj1ltaKl5flh8h\nQ0EBpPsffoDZ7a+/xHseCsGnKauI+jzdxaJWU0a8KJloFBz+999FFVCWPagocIZYQ7oYw+/nzcPN\nLy0FY1m7Fmpr48bmcTyexPsg2GHgQPmNs865WjWUheXrXbgQ6vMff+BGrluHh++JJxLzqbhccDob\noxgqEBxmcJwjGhUjU3j5gg8/jG9zb9o0+bLGr72ml6dWVfj9BgwQx+YlH5YvB4FOSwPROuccEO2V\nK+3np2liw5nGjeXvtNeLuH1eK8xaFdTlgt/QSiQrVZKvPTcXCWC33CKf11tv2e/NkCFiBNMTT6De\nUdeuevXQUAhm6GgUxP3hhxm7/XbRQX3gAAR67oivUQM0ukoVcW68FLd1jw4qGeYP3G5ztc9olLEP\nPgARfeaZOKFHR25oOCxyJL8/+fLONWuKCxk0KLkxrHj0UXETWrc21ys3lr+NRsG1g0G95rrRVpeT\ngxclFJLbLV0u3KR+/RCyW0HhMIMUwNKl0Gp5HD/Pct24MX5ZhUAgNnGzYv9+UcJ1u8GQrNfyeDAX\na1SPpuHzdevsTT4+H0pDc+Tnx9b0iUCEv/pK/t3YsYw99hgYh6bBlygzyRQWwnzG1+hyifXIYgW6\nWCuSEsG0xRlEIIBcgh9+AA06cAD0kJvvNA3mIo677zbTXLcbCcKLF4OZBYPiHN1uvTz/SScxFsmq\nIm7u00/jBnTqBMLOB1BVxtq3jy8h7NiB+iDWxdatm/jDxBjicq1aCy/8xFFcDJWnXj2YrGbPxgNx\n8KB+TjQK9bOkRG4matkSTuQ33xQjfn7+WZRKwmGzUzw/HxEXdeviZfN4zDfG58N3duFpFQAOM0gR\nFBVBOzU+i19+mZgDdsSIxK8jaxsZ68jKktcJuv9+eYllo5RrNKFEo+L76naLv5f1RSBCDgX3mbRo\nYW+WluUfKQoI7ymnxDe39+ljJswej+grMJYQf/ll0VSWmYnv9uyRR2by8Fl+z2UMqHNnfFdczNCg\ngT8IbjduyurVYrMII8f7+Wf7RR46JNb74Bt11lkJPUf/QyTC2F13QY2sV09eq/uWW8SKhTyT8Kyz\nwDxOOgkby3shGDfd5YIPxA7vvCN/uIyOMmt4mTEszcjIEnEopSjKwwxcSTRFc1BO+Hxo2RgO65/l\n56O/eLzftWun/58xdBu84Qaixx/Xe4Vz1K2bXFvIwkKitm2JPIYmqMEg0emno9E9+LMZqkrUoQPR\nf/+rf6YoRO+9R6RpWGMohLlYf5+XJ65ZUYhWrEB7y0iEaP16ov795fO1rpcI423fTvTbb0RnnBF7\nvc89R5SVhTmGw0SZmWKLTo9Hv05+PuZlxOHDRPffj3aZq1ebvwsEiM46C3/ze37OOeZrqCrRuefi\nO6+X0Hryww+JrrqKaOBAbMb69eKFjQvOy7Nf5K23Ei1apLep5BMLh4nOPBMPz8svm9tJ2sHjIXr+\neaI9e9B39PLLxXM++cR8Y0pKMHYkgnmcfz76lhYXo0Xl0qX43uXCg5KZSfTii/ZzaNNGfJBq1sTD\nxjF5snm/CgvN6yfCGLH27URGWbnIsTyogmoGMuzcaZbiZVL47bebf2MUwnhxt6IiaOT79kGab9UK\nY7lcsc1Qqgoz6p49uunF62UsOxtmDpnWkpkJH541s7moCE7rHj1wTqNGoh9A0+BE7dXL7O+TRfFw\n6Vu2Z8bqyX4/KiUng7//hmP+889hTalcWRcivV7sBffJvviifA9ln7lcENqrV0eGNBdcCwr0pDef\nDxnSxkgmKb7/Xq7iKQo0BllZh0gEGySrJtq5M5I2uJqjaQiTeuwx1D9q2BD2yL17E8sSLihAidrS\nUmxgLPXT7iH0+eAL+PVXzK1GDWQvy5JeXntNDyGtXl10sL/2mrzCqtFmGgzCNltBQeXQDP51wi+d\n1AnEDBiDP+G00/B8/+c/qF9TrRpMJTNnms/NyZHXOOrWDUSMH5yweTxIsOLvA8+/adQI790tt+il\nb6JRvNu8RPakSWLJepcLAR1WfPUVxrVq5eEwTMCNG4M+DRsGJpKXBz9mjRrwG2Zni6aYFi3s92zZ\nMn3P+vYVy3oXFSEy6pNPsI4PP7QPzolGEX3UqBFoWo8eev+CmTMTr7/GGYnxb162Ys8ehKZ++KGk\nttOKFfiC18/gKCzEJnCuyZ0MHTvK+xbz9nW88YNxYn4/nM9WUwvP8rMuok2b2F3JXnlFJ8wnn4zo\nImPdJCsjiCWR3HknbHz8HH59K0N6/XVc0+/Hjed7sG8fOPtHH+Fzo3PnsccYu+EGPGitWsW3IaY4\nHGZwAmHfPjFAJBCIXUrG7QZ94Iyifv3EfGibN4uCVpUqokawc6e930NVEZl0443ylpQchYWIhgyF\nwIDS0qCZlAV5eWAwwaDOODUNc7EWpotG4UPg7XM1zVzORhatZHcY6zAZj1GjQKPDYVynRQvGcncc\nQBYab0HJbek8M40jJwdhTNddB6ndTmLfu1f+EASDuHCLFoh9tXJ3OyLt9cLJK8OSJeYbriiIJ/7m\nG6hDd9+NtHUeXpWRgeghTROjEYJB1BO3zsuaabh8ufiQ1akDVTQrS79W/fq4/vXXM/bFF0k+OakP\nhxmcQIhGIRjy915REi9aaRQSR42KfZ2vvsL7nZ4Ogur3w/9nrUvGGGiMXQdEK2OYNcv+mpEIkuA+\n/7x8OU1PP22fjOr3m80zkyfLM6y5eSc72z6aiu9Lsvuf5c9lf2fWkxNiVRVVmC1bEFFUpQo467Zt\n+ncffgiiKJsk96o//ji4bV4ewqKMzRtiZe2edBJ+c+21+LtZMziCZTHAimLe2KIimLnGjgUjqlIF\nWYXPPYcIAl6Xfdgw9FSVVSQ1JtHZOZCtndR8vgqbXZwIHGZwguHAAZhGataUm2YSOa67zn78uXPN\nppFAAL3Q7eqdrV8vN6XI5mXt0XIsYNfXmNMKY92i11+373cwaRJCVNPTdfrJfTS1akFw3rjRPuDH\n7ricJrBCt43tKRw216bIz8eN5pvpdiO7ODdX3nBBdmiannm4bRtuQq1ajJ13HhxSsmQtRUHJi8su\nE8tayApSZWSIN2L3brPE7/NBkolG4e/gNdsjEaiF/CEKBqGSGWEXWiprYpFQ5b+KifIwAyea6DjG\ntGlEV16JqJpVq/TPMzKIPv2UqFUrBGdYAyaIYkcTBYNE551n//2kSQj44CgsJPr2W/uop8aNiYYM\n0aOIfD5EzzRoIJ67dCnR++/jrS0L1qwhuvFGor59iX76SX7OOedgjTJEIogk4mjfXr5/hYVE11yD\ntaxcifX93/8R9e6NCKkhQ4i+/proySeJDh5Mbg0hTxG53TZf5ucT1aih/3/1aqKcHH2SpaVEBw4Q\nZWcTzZqV2AUjEaIffsDflSsj3KpaNaI5c4jefRc3tnZtourVsXFpaXjI3n0XN76wUB+rtBTzuewy\n/VxNwwNpxezZ5htdXEy0eDF+n5WFkCoiRCvNnEn0yCNEt9xCNH480SuvmMeqXx/RQ243fqdpRA8+\nSLRzp/k8TSPq0iWxfXFgRlm5yLE86ATSDL77DqHbWVmQ1rmw9PXXuqCkKBCKZs1CpFBxMQI5YvUQ\n5lErRLo5w+3G33ffHTtYZPRo0fRRv378tSxfjryJ9evx/y++kPsSgsHE+jNbsXatuc+zqspD3qNR\nxoYPl2smPp9ognr3Xbm5PT1dD+XPy4PZjJ+nacjobt48Oa2AiLE+Z+xmUbtm8lzy506dNWtEU47f\nD8k+0QsGAmgSUVKCZDWZJhAKwTb488+w/f/1F7QPWYEl7rv49VeYjNq3x8PYtq05S1Bmg/N4Egij\nsmDXLrwgxsYYI0bgobSu49xzMbeDB/EgxsvUrmCgcmgG/zrhl07qBGEGS5eK5hjeGrJNG/E5d7nw\nbvKsVrt33+UCkTr/fLwvPXogfDI3N7H3cM8emHg5Q1BVEPlEsWIFovy+/hrtJKtXF83j4XDy+3X7\n7eI4p5xif/78+aL5StPkrUD37RNppKqi7A9joJPW791ulMROpCGYkRFOnMjgF+BtHGWE+dNPceHc\nXPnE7ApAyY7KlUEcFy2yL4TFU845eMlVI5f0+yG58NpGkQgyevkGcB8FD+0qLgaDMJp/hg9HZMIb\nb2CNiRA2TM9tAAAgAElEQVTrsWNFbp2eLve5jByJ9HC/H9dVVXO6eAWHwwxSEL/8IraG5O8LY/Lv\n4h2Komf88mKWZS1yt2cPNITsbL2eUCL44AO9zHMohGrLvL+JTFjt3h0F6mStNK24+WZxzY0axf4N\nbwHAy0jHYmq9e5vH7thR/27sWPmer1wJk35aGtYoK/fBi38GgzDBm3wvxcUiNwmFsJGMIY7XqkWE\nw4g6sl7sggvEsfx+tKNkDGGVdqnpbjfCRfv1Q/1zK/H1ePBdz56Iff71V0jeVqkkPd0cD52fj6JP\nd9+NyIDZs/W666EQpJZYddoZQ+EoWSKK9QgEEMcsc2CdIE5lhxmkGKZPtw/FDIVwzssvJ9cnwOUC\n4bVaFEKhxPKHZPjjD2j9Mkk6EkE73enTdeIWjYrvYSiEQBCjQKppCPnmdMTjQbBKvNa4c+eKCWzP\nPYffXXwxrlG3LoJTjFi5EuY4YxCOFX/+KRfAeSj7q6/K971TJ1h0pk5Fn3erGatfP0R9fv89Qmul\n96JPH7NNMCMDP5o8GQkn1otyleW228zcPxiESmcs2lSpkp7AVVCADUo0g87KDKyf9ewpt69VqQLv\nuwyyzkG9esW+8TKmIzv69tVvgvU7vx/VAys4HGaQYujWzf555ppBNArJuVUrJIbG69uhqjCjyCL+\nZMQ8FkpLEU0YCOC9qlfP/B7t3Gl+N9PTQZALCkQ7fTAIZrBsGaIimzdHzSMr4fX57HsfGzFlCkzU\nLVsiMzgaBUE20iRNS6J72BGsWSMKzenpOmOZP19O91TVnNC6ahWCdJo3h1aVkHm8oACJV82awba3\nbh04mJ3D5ZprzBM3cmCvF7kLzZoh5dm6EStWlC38THa43bBnygi1qsq7J8m6qnk8seuEHzwIH4Gs\neqrxps+YgeQUmU8kLU3vyFSB4TCDFMO559o/0+npIHBvvQW60Lcv7NW1a+Md5mZQI2HyeOB8XrnS\nTBfcbiRfJYv33jPTIbcbBI5DZsJq1w4hndbyzJomVh6V9XYngnaQbEHJ4mI5A3rzzeTG2b1bZLjh\nsLkqwjXXyGnzunXJXSshPPusyH1cLuQVGNWLhx8WTUMul5gZyLFjR3IdweIlkDRtijRv6w11u5H9\na8V//iPXQnr3ls933z49htquX0EgYK7ZMniweE5mpryPQwWDwwxSDF9+Kde6XS6Ygp980j6z3+9n\n7KGHGPvxR0jc77wDYY9j4kQQMUVBPPyOHcnP7+67xblVrqx/LxMEXS5zIhwXxuysBf37i2vj1RY0\nDaHi1s5tJSXIUeLl7P/v/yB5y0xjn3+e+HoLC0HTjPfE58PeGkthFxUhrJ2f5/djj+3obrnw1lui\nZmAt1vT773L7uKra2wajUVQRjdcIhvcTmDJFHrXDjzPOwLhWc5aqohIrY1CXmjXTW/fJapxcdRUi\nKqz+gyFD7LP6eEPulSvFdU6YoJe4qFmz7OnsKYbjlhkQ0VYiWklEy4ho4ZHPsohoKhFtIKIpRJQh\n+d0x2qrjB7J8ocxMmGhkTVGMh6LoBNHOQZxsMxwjrPW+XC7UEONo2FA+JyvT+uMP+2ssXhx7jYGA\nuUvj4cNiAE0ggFL7vJ0ur7vUpk1y0Yu//CL3q/r9YApnnQWT1M6dEFSvvhrmu/79zeX6jyry8pCp\ny+sMaZpYS0OmFRDFt7fl5CCpq2VLuZaQlQWnbzSKzbn5ZrmWEgzq9ZQmTNDnGgjAtnj4MA6jaYhH\nHPFzea0hvx8PdVaWuVm9TB0zSiiHDiE66fnn4QC3Op7K8yKkII5nZrCFiLIsn40hovuO/D2UiJ6U\n/O5Y7NNxhU8/Nb+HXq+u6cYrAGk8NA2mjNmz4UTt0kUee88YSj1ccAHMTz/+aD+3SARRPrypVNWq\nZrv4pk1mYY13BrMKhrEctnXrxl9bpUr6+bffLjd18/yH6dNRYuPVV5MPLZ8xI37/B68XFpN/tElW\nbi6k64ceEpu9MIbPrZvidqNxfaKb0Lq1uFjukxg7Fg+Y14sb2qgRQjcfegi1htasAdO65x5wzN69\nobq9+KJu75s3Tx4N9c03MCMNGCBqN8bmOx9/bB9J4XYjqiAU0qsz+nx6JNYJiOOdGVSyfLaOiKoe\n+bsaEa2T/O5Y7NNxhaVLzWYJt1sP8zYWgIx3pKXBnGFt42j1x/30k/kcVRXbNxoRjcL8NGeOPPIv\nJwd2+XffRXmMBg10BhEIgDbYWSpKS+3LP8sIPWP2/c7btYO0/uuviYWnylBQAEE2XvSiy4XQ0H8E\n0ShyERYtsifsdlE2qgqun0gYmdVBxHuZFhaK5plQyBw2yr33XKrx+WAOMqpla9eKxN4Y2fPSS6J2\noiiQ+BcsAPcdPVp+c3w+qKzWzz0ec7XBEwjHMzPYfMREtJiIbj7y2QHD94rx/4bPj8lGHU+Q9SNu\n2hTfRaPQejt2hIR+ww32ASCqiobx1s+tjuMLLhDP4eWVf/gBQtrHH9vXH4qHffvgxD79dDiS44WO\n165tngtv/6iqerfC66/XGdatt8pD3596Cr9NSwNNGTcuuXkfPgyryoMPIvgmHvM1msuOGbhqpmmQ\nok8+2V7NWroU4VWyktWJVvv7+GNw7y5d9JRrWRZeWpq5EujmzSKhD4fNZaKjUT00zSj5PPssvp82\nTWRo1apBLeQNvC+9VJ7xN24cfAayG3X22cnvewXA8cwMqh/5twoRLSeiTlbiT0R/S37HRo0a9b9j\nhjVwvAIgFjOwYvx4ez/hhx8ilt36XWYmpOZBg6DJyyKAunZF9eBgEO9WMIiE0bPOQvTQ9On28580\nCULhOefE1jDssHgxwuk5Eb/zTgiDL7+MfQgE9DmNGIHveG6Cz4foyTlz5OapRHuXHDoE7YMniymK\nfWIrZ1hPPx1/3KTzOqw/GD9eLBEdDiNWlTefMGL6dNHOlQwzsJtTo0Zic+nt2yExRKOxmcG8eVDn\nMjJg9pG1n+RhZoMG4YanpeF8q6Tg84k3RVXx26uvlt+sypUhmWRnV+iSFDNmzDDRyuOWGZguRDSK\niO49YiaqduSz6ieymciqnfNEUSt278Y7wt8nVUXIKa++aS27wDucEeEda9RIFKz8fgh5sfogqKrc\nVD1pkmiWmjIlsXVv2gRLw59/QipfsEAv+fDyy3J/ptcLwh2JIF9h+XJE8Fhb3hKBmCfKnJ57TtwX\nuz4sXi9M47E0pxdf1Hso9OiRQCTjvHlwyCgKuBLPcLNroqCqSPTiKCkBV50xA7831g9J1EwUC9u2\noYOQxwPu26OH/mC5XCDEZ50lmokWLowfvhoOMzZmDMxgJSVgLPPn40bLwlStZqKaNTHHDh3k4/N5\n8ptZtWrsntEVBMclMyAijYjCR/4OEtFcIrrgiAN56JHP7z9RHciMIcG0WTPYq8eMiX3upk2oAtCp\nE/x6VqLEHcht2shNsNZ3pXt3vOvxfBNXXSXORRYJ1aMHaM+XX8Ln8f774hxHjACd4qUZjAxkypTY\nDXJkkUn5+XLNgDMXGWbNgqP5pZeQ/BZr7UZaJAuZN+LHH83z9/vle8d274Z6MWyYvN5OURG84Hab\nwTljfj7MQ7wrT506OnFOxoGcKB56SCTSXi9sgoMH47oDBqCf6KBB8TeVV18MhSDBG+OImzUzP7TB\nIExlXC3UNKSUMyY3E9nZVIPBssVapxCOV2ZQ74hpaDkR/UZEw458nkVE00700NKdO6HJ+nwgNpom\nl8KTxcyZosVAxgwGDoRAVq9e7EJrxmRXjnPOEc/r2ROmHk6cg0FUGeDCqbU5FhcOeYz+fffZE+J6\n9eQS+d69mIvLBbrk95trra1eDT/AqaeCEb3xBpiFouDfOnXkIey88ZiRwcTq0sYY8kOs41SpYjlp\nxw7YwmVmD34sXYpN6dxZfo7HA5VjxAgxHO3yy2NPcvNm2N9bt4aaIzM52aFdO/l8mzQRz73rLvsH\nKi0NN8z40AUCKGDHsXo1Ni8cxnd33AFm8fbb8DUYE2uGDhW5sJ1W4nYnV3ExBXFcMoPyHCcCM7jn\nHpEIn3Za/N+tWwcpetcu+fc8gYoTM1VFOLmVEF92GWjO1q0QzAIBaNJGs4mmyfsd//CDeTxVRZa0\nVdANBvUKAJ9+KjIpn09vs/vss/J3+PTT5b7TwkKzZcTjwbo509i+HXSH01MeIWmdX9++4jXr14fm\n5Pcj7D2RYn9PPy2anJo1s5x0113xS5z++qtYztZ4Q/r2xVi9eonfCxc04K+/IH0YbY12Wb8cW7bg\nYduyBWqnbL6dO0NtmzJFL32xerU4f58P9vslS8BArONYW2zm58MmGCs+mTHYDm+9FRpGRgaK2tWt\na5+oxhPhKigcZpCCuO468Tlt0CD2b4YP180sRk3ZigMHEJffpQsEyKIiWBCM2rOmIVTcim+/BSHs\n3Vvsz27ElCkwDfXsibykjRvl9ntupp03T3w/s7J04p2TA40/GMQaeakZjiVL4Ox+/HFYWuwKcGZn\n43w7/4Px8Puh+VjpFq8Vl5ZmU2lUgsOH4Zsxzv+XXywnxUqg4pLr4cOQFGSTveoqZOS++irCLY0T\n9/kQSWCHzz4TC7i53fbmpNdf1x82v18ewur1wr/Bz1NV2DAZA0PjWck8EY3XKrr+elH1Gj069gYn\ng337EMFkna/HA6mlAsNhBimIb74RHcj33Wd/vszMEgzqCZbffQfNolUrmEqsvsNOncR346yzyr+O\nBQsQxde8ubk9JCf2Bw6A0DdoYPYBBgLmCETGYAn44AMQct4ghzFUBOUZxl4vBNzvvrMvTrlunTwC\ny+USNR9j6Q+7w+XCvcnPj22Kz8uDr+Tllw3JaZEI/APNmyOky8ihrE5Rvx8SeHa2aCLijhY+8bPP\nhg1MVfF569aw19vh88/lzEBmKtqzJz4ntTNzcafNxIkiA+HJZLt3Y76apju7k214Ew/RqOh7cLnE\nkrYVDA4zSFG8+ipi6zMyYBaNlTk/caKYyOn34739+WcxumfECBDMLVsQ81+9uvjeVqsWPx8gFtau\nNb/vPh/Wommge7xkjKx/uqxlrh1athSJc3a2PFw2LQ301BpMommw6/fqpftbf/wRTMdK1+JVc27R\nAv6KhHDzzaJNOysLG3DTTXLbFSfcxlrYVqdoKATCtmULFhGvQFJOjjm1XVF0k5MVixaJD1uih6Yh\n/t+uB4HbrWsKY8bAj1HeqCc77NqFF8y45nA4dp2UFIfDDE4AWCsVc7pRVATrgUxw45p7587yumR+\nP8xVZcWjj8pN4KoKCZnjmWdEf4Lfn/h1atQQr9G/P6wB1nG9XjG/qX59rHPQIGRNG+nmu+8m1zeC\nH6eemuDkZdm3zz+P7zZtEi8eCICLr14Ns0+vXihaJ0sAM2bZFhXBHj5oEGMffSQS2HXrxLk0aABb\n1uDB6EP65584d//+xPoH2B0uFySNROquL12a+IOQLGTlcVU1sVrpKQqHGZwgeP11s4Do96Mi8PXX\nx37nYkm6tWvr4x86lFwFzjFj7P10gYDe/XDJErG9Z58+iV0jGpUzg5tuwvczZ4IuhkIYt0UL8Vzu\nY+GC62WX6bTyo4/k1pNEGmvZ4vff0bSifn1xIJ8PMfJNmsDrXL++eIOaNjXbo6JRLMw4Vnq6TrwL\nCmDzM7aXvO0285w++EBcKJfQifQOQ9yj/913eugnr5tuR/h5gx3rdx5PbIe5ouDmJlNiNh4WLUKy\nW8OGcNhbmaimJV/fPIXgMIMTBOvWicKWqurtamMJanbfnX46LA2NG+Pd9fshiCaCnTvthb9QSBdu\nuWUgGISF5MorEzNPrVsnJqPyo39//bz8fFhKDh9GqLuRZrpc4vpVVbfpHzqE3vKcqXFz0iefxK/y\nLMXBgwiL5Bfli5fdCE1DHQwrIZXV4N6zBwwmMxN2M17Zc/RoOcH1es0+hGnT7PsfG4+OHXVveW4u\nNjY3F6npsvPdbvskOSLc7HgbGa9QVqLYvNm8Rp8PjJW/HB4PNJZ4LfVSGA4zOEGwZIkYQRMOIz+B\nC6EyuhAO45C9kz16wPZujTRKRHufPNle60hLQ3KXNQR12LDE1hqNghHIxtc0+CGsmDoVdZxCIb3F\nrtHvatwP4/r27YMQ2acPtC+uNfz4Iz6z036kpu7Jk0V7O1c1ZItp0kTuD7CWq5YhlhTg9Zrb05WW\niqViZQ+E1wsPuBV33GHP+TMz7Qn91VfD+x4M6teT7UO8HIlYmD8fSS5du8rXNHAg1ME77ihfiY4U\ngMMMThAUFCARkxN8txtSbXa2+R3g5Sg0DX7KuXPhS5NFFNWqJS/78sor8edz6aX2NCAzU15ptH37\nxNZ64IA9Ee7aVQz1NBbf9HhAj8ePR56Xdc9OPjnxBN0337Qvb83DWE2YNi2xrD9+tG6NQlBG50co\nlJiTc+hQ+3GJ9PIWjME3YOWKdrYwWWnWvDy06JP9JpZ/gYe7zpmDpLEJE8TGFIpibl6RDKZONfeP\nls1BVU+YvgYOMziBsHUrHMJVqiD7dts2SK/W579xY5h/jBF7o0eLTOPMM8EwrILpt9/Gn8sll8Sm\nRYGAWKbbLoDFipIS+7pJqoqyEkZY/Qo+n15UzrhnnTubu5fFQqxS+pyWChGRRUWI7+UbzcMnZQNo\nGpzAhw6h1kjlylCHxo1LzHnz0kv2HJMIJpH8fJz7/vuimcjjEfsK8+QwGaJRJIJlZurclcf82s1B\nlsJurD3Cy1IYs4qTwWmnxX4I+VHB8ws4HGZQQVBSAg392msRmZeo9Prcc2L04o03iufl5CD0mpuN\nMjIY++03+Ap5teRQCBJ/IqWsJ02KTQc8HtA3fr2qVc2Wi3hrilVE75ZbzOdbLRUuF8rplAddusSm\nL7wyhIDcXNjIrroKN7R3b/Ni3G7kCRhj3n/9VeeeXi8KsBUX47viYiRzXXstNoZLuYWFsbsEGctJ\nr1olcrZataD6+P24ZjAIqf3Agdgbs3077GrXXIOYZzsnscdjbxecMweOnwEDMLeyomnTxJhBKKRH\nNFRgOMygguDqq/X3NRAAPUhEuy0pAZ3wekFzOncGkTp0CL2Eq1eHALVsGRjMN98gIdUYK79pEyJr\npk1LLuz7wQdjv4M1akDC/vzz+DSG488/Y/scea9oIwYOFBNy69SB4JudXTYrQc+e9nNQFDC66tVh\n6Zk/32aQSAQJF23b6kT39tvFTZb1On32WZx3/vn64jQNKeL89ytW2E8yGMRN53j7bb12T/XqUBX5\nA+dygXnEqvJnhy5d7G+YquoMKTcXMb5xNy0JPPWUyIxkEkpaml4bpQLDYQYVAHv2iJJwKAR7f6I4\ndAglaDidOOcc85hpafY1jcqD3FyYbbKyxHcwEEBdomSwYoW9nd7lwjo2bzb/priYsbvvhj+gbl0x\n09jO8hELixbFNhMZaU4oBLOcCcuXg8irKm7EuHF6O0grZBc4/3yobtZJGMOhnnvOngifdx5UvPx8\nqHGffAK74q5d+Nyaiej1IiU7EUSjsNd/8AGI7NVXg/Omp4tzadUKm9Ozp9kJHQyKNzJZRKOInoh1\nc/iDeCwe/uMMDjOoANi6VR6SHqvBTCzk5YkCk8eD8tIDBuDdTbQHQaLIz5eHsTZsmFy1gdxceUBO\n06YwD8WjH7LSPjVqwMR+xRWo8SSjyZEI/AxXXAGhefNmSP+8vW4sDUjTzBVTWTQKu5j1JN7QxQqZ\nY/a669CvwMoZQyE9vVtW5IoISSBFRZAQmjTRS11nZCDmlzFzo3rOaUeNwndFRajb3aYNchyGDtU3\nLRqF6YvnIWiaXg20WzdxLjyaQRZa++qr+h4UF4MZXXEFMhoTrar66KNi2FrnznoLPFWF3fTqq6FC\nlpcBHcdwmEEFwN9/y7XbsmrSxcXxE6cCgcQqciaDiy+WRyfJQkFjYe5cs5+SMzNjXpQRxcV4xw8d\nQikO69rDYZ1e+P0oFWSkNdGoKLgaUwTiHcEgus79D3/9Jap64bD9hvfvb944rxe2dO4X4AvyesFd\nuT/hxRflxJerh6NGiSYcXpRK5hS59VZIJl27mjdfUeBwKixk7PvvRWd0OIxrfvZZ4indwaDevD4a\nZeyii3RzmKoi/C0R51UkAv+Mx4PjnHOQi5GRAfPcsGFmc1h6euJRBCkGhxlUAMgqE4TDaGRfVgwf\nHv999Hgk5o1yIDdXJMSKUjZnbmmpKBTL+hyvXg0hXNNAf0eOhNDLaZmstE84jDwCjm3bYgfmWA9F\n0dfp94M+mxLpSkrklQXtuHtxMWxZdeqg1oWx5OnOnfAT1KmDEC5jrHxenjk+2OUye9dlmkOtWvjO\nWKvIeHi9cskkGERy2JtviuGkLpeu/r39ttwHwht38E1r0EDftI0b5fVWkokyys2FRGA0VXFHmnUe\nI0YkPm4KoTzMwEUOjgvUqkWkaebPolGili3LPuajjxIFArHPKSkhuvzysl+DIzeXaNgwoquvJqpd\nm8jj0b9TVaKzzkp+TJeLqLTU/Fk0SlRcbP6sRw+ivXuJ8vPx3dixRO+9h/kMGkQ0caJ5PkREimIe\n58ABokgk8bl5PBj3ttuIRo4kWrKEKBg0nOB2E334IW5qWhr+7d+fqEMH+YBeL9FppxG1bUt0+unY\nRCKigwexII+H6K67iL76iqhaNf13mkb022/4nceD44MPiF58UV+oFS4X0eefE/31l3wukQjIpgzF\nxUTt25u/d7mImjQh8vnw//79ib74wvxAezxY+yef6Ju2dKm+aUVFGMc6z6Ii+TxkCAaJli83zy0S\nER+Y0lKiwsLExz1RUFYuciwPOgE1A8YQ+FGtmp40VR6tgGPgwPhVOH2+8l0jEjG32+Tl7d1uCGaJ\nNJG3w4ABZoExGDQ3vC8qEtdntd9HozAhcwGRRwIZo5tWrpSbhOzMRFlZR35YWor+mZUr4+aNGwc7\n1rp1mNyWLYx9/bU8kuW33xBVk56Odm58oS4XTBwbN6JJAp+4piHF2gprQ21+U3Ny5HX9a9Wy99DH\nOipX1ktcGMtoWKOWOMaNwzw8HqwzVvZvJAIzlLFbUb16yXVjYwyOsETKbhiL/FUgkGMmSm2UliIn\nZvx40IzDh49eVd9IBOVhYjGEYLB815g3T3z/fD7GHn4YYaXJvs9GFBejn0vjxkiQk3Ves/pBg0GE\nyBoxdapu/XC5UKTTiL//lpuJmjZFFnPt2uY8sv/Vb3rsMTMh5nbrUAgODmMWsBEHD2LidjfG64Uf\nwUq0PR6xsNPkyWIUj6bBLv7EE2ZHiMuFKKN4EgLv8BMOY0PPOUcPO928Waxd3rmzfJ0lJYnXSd+3\nD2UpGjZEtdaylI6IRMTcC1ljiwcfTH7sFIDDDFIYpaVwuvLikJqGsspGrF4N/1iPHsjmLwsWL0ZA\nSLduIh2IV046Px8+uAsuAGE29i5nDOZtmaAZCGBdrVvHT6BbsAB04NJLk69Z9vPPeh0iTUNFUyMz\nLSkRk9JU1RzYc8MNYnb2pZfqCbwHDiDQJTvbEuFlbbZgPRo2lE96xozYPQPcbiR1yZjBwYPmsXbt\nEm341aqBMBYUoAZIKITrVa0KYt6ypdlB7HYj5IpH4FSqBO1GhrfflvsMuFM7Ucyfj5veq9fRUYMZ\nk7fclB1Dhx6d6x1ncJhBCuOHH0SpOhDQgyg2bDD3OdE0FFMrK155RXxXMjJE+sJRWopkWS5cBgKg\nLcZqCfn58G3aRS9pGq67cycCZKyMwRrPz3sqGxGNwueXmYnjoYfMBH/3buylzFoha9yVlqYXBl22\nTLSyeL32e2JC587xCY9MzVuyJH7PgHvvhSOWE+1AABxZhqlTsTEuF27G8uWwsaWlwbwzZAjO4eGh\nf/yBkFEe9vnxx7jZ8+bB1GJcfGGhrqWcdBLKY1sfWr8/OXV2wQKx1d/RMN1MmCCvSW7t/sSrvlYw\nOMwghfHee/Jnl0vfQ4eKkjzvHlgWHD6MHB0jceQtbmX1iNaulQfFWIM8du1CfTOZUKYoKFrn9+v0\nxCiVX321+Jt27czjv/iieR7BYOI9SiIRke5qms44fvxRtLIEg+Zk3MJCREG+8IIe4s8Yg3QbDIKo\n2pleZEQyGkVkkLGVZfXq5jE4F73kEpSWHThQVMusY3Kb3D33iARw8mTz+YsXo8zFxx/HTtG2pner\nKiKBjFnRzz4b8x4IuPJKcZ86dEhuDBn69RPH1TRkKrdqhbDa2bPLf53jFA4zSGGsX29+z9xuxMBz\nZGeLzzaPDCwrDh2CPd+alBYMiuVbfvtNJKShkLzEdUGBvEyNNV6fh6xz9O0r/qZNG/PYZ50lnnPu\nuYmvmfdq4d3fRo7Uv9u718yQFQVWFm71KCiAqYtXYRaE2NWrsaG9eokeZ7fbXmIuKWHsnXdgg5sw\nASYl6yKrVkWdkGRRp444Fu8IxJhe5pVLAp062TMEWc/U+vXhyOne3Ryjmyguv1wc87TTxPOmTIEd\ntXv3+P2Lf/pJfFgVBXkRJwgcZpDi+OYbmGpcLggvxurFK1aI2vRTT5X/mrNmidIwb25TqZLutygp\nwZx4QIvPB0IuMw+XlsqLy8kicrxe/XfTp5s1FZnfpFcvs9CsKMmXwN+9G9f6X7N6A375BRqLooAm\nGzWXt94StaOqVSUX2LXLvKk885UxSOzLloH72zGHDh3EjeIbYszUTQStW4s3l9vJo1FxQaEQSlbI\nEKsYnKbBSZ0sZI27eQIax+TJZtujxxM7JX/sWHlOwQkEhxlUENhVLZ43D8mip5+OkgpHI9Jo+/bY\nLWo1DS0lGYPztH9/5EJdf73YKKq4GBWSx4xBfSBeeUDTIGHLxm/QAL/dvx8WEL8fhNjvlzO71ath\nYvJ6caSl2fs3ywPZPXjySdEfEgjYDLB+PTz9bdvCyRGJIBypTh0sQFXhmZZdaN48e+dnvXrJLWTm\nTNwAzuFPOgnOE8Zww2SlIeycUVOn4nu3W676Va6c3Nw4fvwRDqkOHeTaj7XvAREeFjt8+62oGdSv\nX4uuUSEAACAASURBVLa5pSgcZpCimDcPGnDnzpZSBv8QXntNzwmQ0Z9EupJFInifg0E9qrJ6ddDC\n559Hf3aZpsDt9bzaqlVrkPn3tmwBoxgzBhnD/xSsvk6fz96PK0W3bmYiqmlyh8eiRfbMoCyOot9+\nY+zxx1HMjvdL5mjXzszhVNU+DJYxqKj9+smrEVaqlPzcEoEs2up/CR4SRKMwhfGHOjMzsZZ9FQgO\nM0gR/P23fYi3pkHLnTvXXFqaMTzjq1aBKPFQx2RQWAgnrc8Hon3PPRiroABC6+zZYq9hv5+xZ56J\nP/bXX8tzfHw+mJStkUJWyd8uMvO885Jf57HEBx+Avng80NKM7YXjwtp5h4ixm28Wz5O1huMPxwsv\nHLW1MMZgM+vYEUwqKyt+JM9XX8kZlaaVv3GEHdq3F6+XiKNo3Tq8SNwBlpen9y8Nh6FeV1A4zCBF\ncMEFsQufKQqEIU1DzxDGIHn36KGHf9esmXwtocsvF6XvQAAMgDeb+fFHvOteL65Vr15ivUDeecc+\nQpL3Z16wABrQ2WfD/m40c/XrJ2eOLVokt0Yr/v4bEUhPPAGh9vPPkWj2+ee4/ubN0DCeeQYMMVEk\nZKIrKYHd7JFHEO/arZtZCtc0sc/wjBli9hwRQkutm3Y0kei4Mg9+ZiY2+VjNbe1aPJSKondE27Qp\nuTF+/BH+E+MLoGllc3qnABxmkCKI1bDFerjdCG185RXR11e3bmJdERkDU4l1DaO5Y8UKEMhXX7Uv\nu8/x5ZegD+3a2a8rFEJDq1jYv18UnFWVsQceiL82u4KWf/0Fpskbh7nd+NvlAj3p3Rtz4zXMMjKS\n6Omyfz8cJ23bIo7fyjFLS1F9k4ebBoNwpGRl4f8uFzbOGLkzbpy80qemJd8MIh6Mm5ZIRVCOs88W\n59er19GdmwxbtyJs9fnnkahih9JSkSk99JC9pHLPPcd23v8SUo4ZENFFRLSOiDYS0VDJ90d/l44D\nnHRS4syACARtwAD5d7fdFv96f/wRv4x1WcJUv/xSNP1kZuoCHNdyiPAuxkuSKy7Geni74FtuiR32\n/tZbIOZuN6wGVpPNI4/ErkBq1c5cLvh0Z8wAI7FFUREia3jEit8PpmAkqrNnx096UlXdaVJaKuem\nqnp0wsZkm9a+PZyzPIbW2lBahm+/FddgrKy6bx828Gh59fPywLU5J7eLWCosRM4Cd5SPGAGmkJdn\n/xD4fGWLgEoBpBQzICI3EW0iorpE5CWi5UTUzHLOsdinfx2TJoklD/x+mG5lz204jDwDWbhmvBIS\njCEENBYj8HhggkoWMiGxe3f4M4YM0YVgo4BrpBvlwezZojP3oovM58ic1rGYAf8sLQ1057rrYOUR\nBOeFC0VCr2lmAvjNN6LjU2YHu+sunF9YKE4oGIT97WhhzpzYPQZCIT3SKBa+/x6q5MUXm2P+Z8zQ\n64GoqtiTtCzo31+MN+YNdIwYNEisZPj++1iPncoaCMTh+qmLVGMGZxDRj4b/309E91vOOfq7dJxg\n+XL0GejXDwElBw9CkBk7Vs4MZs6E8CkTHGMhJ8deK/D58O42bBi/Ftj27RDQWrRA35OcHHlu1KWX\n6r+x0kuXCzlZdiguTtzs/OijYnSjppnP4ZGQsrVz03O88jXBINZkYghLloiLU1VzGdW9e831hHjp\nVuskBg/G+YcOiX0FAoGy9SK2w2OP2TetJwIRt9rQo9HE2tNFo2Lhp2AwuX6tMtSsKc5zwADxvEaN\nxPP69sW8mjSRr1tVk8/bSBGUhxn8G/0MahLRdsP/dxz57IRA69ZEjz2GkvMDBxJ99BHKvg8ZQpSe\nTuT34zy/Hz0OzjiD6MILzWOoKur0x4KqoqS+EYpCNGIE0dq1RPPnE61Zgz4EP/1EtHWrOEZODkrX\nf/MNSua/8w7mv327+bxAgCg7W/9/pUri9yedJI5/+DBRt274PhAgGjMm9pqIMA7fI47MTPP/u3Uj\neukloipViEIhol69iFq0wJ60aEG0cCHRHXegzYCqir0OiIjy8rBuTSN65ZUjH7ZqRdS4sT4BVUXv\ngQYNUDd/zhxs6uTJRA0b4sft2+OG89r+ioK/b74ZpOnMM8W+Ah4PUTgcfzMShWzTjIhEsFkcP/1E\nlJWFm9KoEdGGDfa/zc/HjTRCUYg2bizfnKtWNf/f40EPgtxc8+fG3g5E6AtRsybmMH26vH9EQQHu\nkwMzyspFynoQ0X+I6A3D//sR0TjLOWzUqFH/O2bES0NPUfC8IKPZpl49BJ8MGgStYdIk8zmKAqdt\nPEk6GkX0Io/91zRo90ZJ97nn9JBsVUUxSiO+/15uorIe1kzgKVN0+38wiPBRWUjs5ZeLjeu/+w6a\nwiuvwEQ2YYJ5rcbSELzK67BhqIt0+ukISR09WkyMs8Ovv8bv0mgyc+XkQKrv1g19DAoK4G1v2VLv\nM1ynjqhyTZgAW1rfvnpxow0b5BcMBMRs3PKgoAAZg3zTuH2dl5W99lp9k7dtEx+4WrXsnc3RqJhZ\nqGmoe1QeLFiAuXHPv6Jgb6tXNyeZrFihJ/MFg9Aotm9H+Gh2NkxL1haewSDKcVQAzJgxw0QrKcXM\nRB3JbCYaRhYnMlVgM5ERjzwiTwTlyM9HjTArrahWLf7Y/fvrgRQ+HxgIj0BatAj/t5qyFQX+gN9+\nw3mvvhqfESgK3jkr1q2DGSxWPwNZ18V77oFTmNOjYBAla5o2RRDOokUY75NPMP5VV8mtMNWrJ84Q\nHn8ce2RXZ87thnlKQG4uiGF2tpmreTxo6h4Ps2bJL+j3Y4GJoqQkfgKKcdNWr4Ytbdw4cHzOCIqL\n0cPY6vPw+1Fqww5LlsBRFA7j3DFjxHOiUX2/4qG42ByBZb0ZF15oPv+PP5BB+e678AV07KjbAYNB\nxu68Ew5zXlzquuuSi6RKIaQaM/AQ0e8EB7KPTiAHshWvvy5KpbVrI8GsSRM9EtFq9jz11Njj7tgh\n+s54lc6NG+NXTk5LQxTfhAmJNYTnpaCTRfPm5nECAcbuuCN2oypjp7N9++wDRjwe+GHiobQUTumP\nP2bsiy9QGUHWOe3NNw0/WrWKsZNPxo1JS4NKYp1Ay5bxL75/v5wDnXSSGLK6di2c0+vXmz9//HFs\ngtuN7j/xOOCMGbDxu90osLR4MTbh//5Prygos7MHg7ET0woKkMEsc8zOmgXC7nZjbQsW2I+zfn38\nTmWxSnPIOp15PNDe1q+PHZ5aAZBSzADzpYuJaD0hqmiY5Pujv0vHIQoLIfWGQiA4vAidlQArCghl\nMIhzZd2+GIPv8qGHoPVbHaRpaSB6Y8fGb/zOO3nJepTLDh4Ykyx4hzS+rubNodXH6vni8+mZ0Vu2\n2M9PURgbNcr+2itXIuilTh2MkZYGc9myZeiSpmn6vNq1M2g3kQiIqPViRm+93w/imggefxy/5XG5\nzZqJpSO4PS8tDf/yDNrJk8XQqksusb/Wvn0ioczKQpilcRy3W5+T9cHYvDmxdXH8/bfYoCcjQ979\nLBoVU+FlD0DfvvbX++IL8QHy+RJXE1McKccM4k7qBGEGjCFg44svQHw3bBADM/hx2WWw6dvV5Nm3\nDzTKSJOMMf9VqsDc/eKLsQvUcSGQm6zffVevcixjIorC2H33Jbfmgwdh3qlXDxUYevVC4lmzZpDA\n7faAaw/jxmGckhKUvLA7z45pxvIT8DpoGzfinnzxhaVCq9WmLrtwx45i1t7Bg/adwObPh5o4fbrZ\njFJYCHub9YYFAuD8Q4eK18/MFMfPy8Pxyy9iIapwWJ5dXLeuGI5m7AiUKObOlV/T2hCDMUjusdpx\nut1Qi2PVAtmzx8wMvF6E4x2rLOnjDA4zqCCQNXfngg2PhFu4EO+jMZqRMZhp7SR+RcEYH34IobNK\nFf091zQ4ZI3XzcgwWykOH0YVgP37zeVzuE8vXhRkcTG096++AtPq0ME+BFxVwbBk37vdmLtRcN61\nC4X+rJaNa66xn0/Xrvb0Ji0tzk3KzbWfvMcDzmgkPDt2QOXh5Vafe04+7pYt4Dxz58Jsk52tp09b\nF5eWBjv9uHGiatS0qXnjr7hCjyK4+GKRsXAbuvHhcbsZ69lTXGcwCHUuGfz+u/yaGzbA7PTDDzAx\nRSLyMFHjwfs35+TEvubSpai7XqkS1rxvX3JzTmE4zKACoV498R1o3hxC4u236zWKVNVcqWDEiNjv\nESf8a9aAPt1xB+jEJ59gfCMzUFXQGjtMngzJfsAAeW8AI/LzIZjxFrzp6fHNVF27in4NjwfRR3Ym\n3/PPF8vPWBt7ccjqn/FrnHNO7PUwxuCElWkHioIkEiM6dDATc49HLzxl3FB+Y4NBePFj2edCIYSi\n3XorbPCahs9CIag9HCNGiFnDZ5yh2780DVLE3r2IwuFjVK4M5vT22/rYwSCYRlkk7Pvv18fRNDDM\nrCydQdatq9sMZZKQ0W7q96NhdTQKZ/dNNyGJJZFCWicAHGaQojhwQOyzu2YNTCZ+P2jIzTdDwLOW\nUea0Z/NmlG2R5ejIaMgHH8Cf17o1IgYHDhS1EVVFaOfRwJgxZsHQWLJCdigKzEZWWqhpsKbYQeZn\nePBB+bkvvSTvedy0aRL+xeXLwbWssbFW25SM8wUCur0vGpU3vZdtjKbh3Gee0RfAHUpPPIGomkOH\nwKlPPllOXP1+xv7zH9jjjOGfhw8jRrdmTfx22DDY4Vatgq1w+nQ8aPXrI+vQGoccD/PmYZyFC+Ho\nts6rTx/xpgcCkOyt59avj1Z1fA98PmgVsVqCniBwmEGKobAQWjgXjC67zJzsWVKC99roY5s4UaQZ\nRJC0E8kFINLDq63N562/D4Xk/ZDLAlltJZ4fwImw0bcRDILO9uxppnfcR/v44/LrNGki0rxbbgHD\ntSIaBZM6+WQ4kJ9/HtpS0tGGxcVICKlRA8Tou+/Ec2QFqRQF0jJjMJFYIwZ8PtH5064dGEhREexi\n1vG4Xeycc+JXRFRVxB4bMX++2FLP6Ayyhr4ZS+smC5nWc/LJenlePsezzsLLYd2Lc88VmWwohPC3\nExwOM0ghfPEFnJRGy4GqwrrwxBPoO/DCC2JV0g0bEq962qABaAMv2xIOg8hefDFMJFbJnPf15bk7\ntWvDAhGr10mi+OADs8nH58P7/cormOPDDyPa8aaboKXwHIdIBOb1SpXEHvGyzocLFmD+oRDOd7nw\n90knmduI/qP4+GN7Tn377fp59euLdrpGjfQktvR0PVGNMYSgWcfr1QvSg1WrsEY6GYmnEYMHi+fU\nqKF/L2vJ2b178nuyeLF8P1q0wE1/9lm8BIMHY938hvJ1+HzwlcjqOVl7pZ6AcJhBisCo3VsPXiSN\nE7zLLjP/dtYsOE8TYQZXXqn/bsMG+AVkpbD5kZkJP9+wYaLVY9Uq2P23bbMPhomFaBQ5P/w9bt8+\nucYwVgbo8dgXnNy+XfS5uN36Xublofp01aqIQrLzKdhi+XI4QKpWhVnDqnZ8+y2IeI0a4MSxvORz\n5iAK4MwzwfH8fmyQ3w8pvKgIE5w4EREy+/ZBXapaFeqMtYjbV1/hN1bCHwpBW5DNwYiRI0VHtdut\nZ03LGEq3brH3a8YMOKSqVUMv6Px8EH3rOIqC+RshS/gwrrdZM/P++v0wcVWpgj2qVg2+hbJ0g0ph\nOMwgRWDXXpKHdRs/CwT0xjPr18cvRW0klkYhkuOSS+TnKwrKNzAmF/7S03XNISvLPlwzHnJzkY+U\nrP+xTh3zfIJBebtcxsAkZElybdvi+8suE+nz1VcnOKfdu82OCZ8PZgyOX38VnbWyydSsiSiaw4eh\ntvBzPB6odDLiFY0y1qaN2TSiqticRo3MpRWys3Wu7/eDGI8eLb/5xgdlxw5IBbIkFzuinJ5u77hd\ns0a0R155pbxtpqx0bjwnWKVKcGhXrw4GYOebsdZKqeBwmEGKQCaZ+/3yZ1nT9KZOd94pfx+seQUe\nD0wrubmQ8k85BYmwI0bIhUMivPvt2uE6rVrFfv/4Oxir18DRxpw5eiRSKIRy1XaNfawZzZzR8orK\nMnrh9SbYf/qzz0SnDfd23303wrPibZ7brWcQz5wper2NN33DBkQP9O2LCVq5WFqa3LETjYJb3nQT\nqpXm5iKTUZZVXLOmmRNu3663h4y3Fr7+666T75csu5FnbFu5u1UrYAzrjuUM41mUvEeD3Xk+XwI3\nt+LAYQYpgv79zcIjT6CqVUsk0C1a6ETvv/+1J+TGv++/H5aC1q3F7xo2tI9W5L0RXnopfvkJVU2u\nTWQy2LUL5iirpL5zJzKTZ86M7eSVaTZ16qCSgyyAhR9G870tvvvOvkyC1wviFE998/tBwBhDkSVr\n/KzfDw1k0yYwHi6Ry7SMUIixn39ObGPXrZMTVl6mwYhp0+KXgzAejRrJr/nKK4mlr9tlLB48yFin\nTnquhbVt6MCB8lrqMqZxAsFhBimCtWvN/rDrr0cCmezdM/Ya+eij2OGY/P1Ytw6+BZkGEgzCLFyj\nhjgWL/USjdprEEZmYFd4rqwoLoaA7fdj/PbtyxY2PmOGTn9cLtDT336DAGzH5AKBBHvNFxUh+9Uu\nfZt74DnRkhHfcBgaBmPgal27mivy3XADvhs6VJxwerrOPFQVWc7JqGjjx4tjhsMi541EcAP4Rhoj\nm6wPjtuNqAQZDh6ElBNLug8E4PQtKWHs668Ze+MNFNEz4vBhPHBz5kCFbdAAHZQikdh1S/g94aU7\nThA4zCBFcOqp5vcxGMR7L2MG3I7PGOjGpZfGFjxdLoRITpsmL0QXCunJrZdcgnPS00EPjHXDDh5E\nvH04rJtmAgGcq2nJR+/9+is0/iuusO92Zi2N4/eLkY+JYvFimIWGD0cOxpIlcprh9WIPzjwT1pHb\nbsO+vPRSDB9Cfj7MH7ffLi83O3YsCiLddJOc+6iquaF7cTFjL7+M8d59V7/wXXeJv61dG9FJd9yB\nG10WjnzrrXpyW6ysvIICXOP223HNyZPhEB85ErZHHuWkqox16WK/aX//jXKvN90kf3j9fqTWn3ee\nuUDXpEmJrefCC82mKI8HUsWdd2K+P/yQ/B6lOBxmkCKwCkkeDxKjZMTK7zcXgIxGYWGoUcOeKdx6\nK0zE1auL39Wpg3ecjzVvHiwfGzfCYrFwoR7lU1gIpvLTT8j8X7EC5uktW5Jb79y5Ymj6tGnieZde\nKs63eXP5mK+/jkCRzEy88/GE4w0b5LlMb7wB5rR/P8YzludIqPBe3776wIqCm7hjB0pC292gRPvu\nLlwobtwjjyT223hYsgQ3M1687caNkMTT0hDKylPNi4rw+0qVzJvWr5+YQckRjSLzWaaZvPaaKA1l\nZOA6a9fqKvJXX0HTSE+H1z8vT69twrvJJVKmtoLDYQYpgvr1zc98MIjIwfffl0cTyeL8//wTCaQy\nWsP7p//xB1rVcum+e3d5OfrPPjMzKK8XxdmOBtatg/PaOsfzzhPPzc4WLRCyAJPvvhNp5NChsecR\njcLnwrWlYBBjjx+PfZeZxTzuKCt98SU4KuycFIWFcBw3aYIkqFWrsGi7cFK/Pzlny/TpMNeccgoy\n5P7JQmv5+ZAojMQ7HEbSSHExtAWZOhsI2Id6HToEhpGRgZvQsSP27OWXRdObywUOHQph36xleD0e\nPODG+dpFFZxgcJhBimDRIr0+TzAI00lpKQQcWXZxv372NKBDB/O7qqoYP1Hs3i3376lq+dvv8k5n\nMkvJ2WeL548cKTIDWUTgDTeI49WvL543Zw6CYnr2xFxKS2GFyc5m7IEH9C5sdnTbTREW8Qdxky66\nKPHU5PHj7W3kiWoFxwOWLpWrq6qKB+/tt+2bYiQbYbBsmVg+OxAwPxDGNHXj8c479uPm5uKGd+sG\nJ/UJUqrCYQYphL/+AoFasgSEfuJEhIjKCBNvSCPD7t3Q3l0unPfee9DkV69GRM7y5bGf/1mz5Awo\nFJJXVUgG1twA43pkPodEzUT33itGEbZqhT3i+V9z5ojh7UbTuExbMdEyymN96RPzhlibxdvhww/l\n3vv27Y+NZB+N6jc9EoFpp00bLLp5c0jeZcGmTfaOclWFX0SWk8Cldt4LQVUR4xxv7XzfXC7M36om\n8y5PMk1ENnZJCfacryEQgJmqgnY3M8JhBimKBQtiR9+lp4NxxEJxMSwW55+PsbgQFQ4jv2fpUvnv\n/vhDzoBUFaba8kBmQahRw76T4/DhZtrj9co1g507UVCTF7L0+XDwYp/ffYfEsljaiLUvjfFQqIQN\npqdZERmckry6XyIoKAAR5otRFNQRkjVyKS+KiiD18t6/p5wC0wonmoqCB8AaOpoorr3WXvr3eiGJ\ndO0aP8zN70eJiXiIRvUU9wYNzGMEg3LJxe2WJ+mtXCnOnZfsreBwmEGKYtSo2O9RKITqwkbk5MBx\n2qkTAiZycpBbZMdUata0v/5LL5mDMbxexp58svzr6tHDbC0xNZSXIC8PvkoepFKvnthPnmPPHpjQ\n771X3tqze3dxDzp21H/fr5/5d1aB8zdqziLkNg9qbR4RC3l52NiRIxHreqxwzTXmycs6k6WlQVVK\nFMuXM9a7NyKE3n0X3LtWLXlSVyAAh80nn+Dhs0uvJ0LIVjJYuhS+BR7C1q8fbKDWngunnIJ8hvPO\ngxTAif2yZaJEEgyWXVNKITjMIEVx5ZXyd0dRIORZ3+OSEghknJj5/SCivXvbv4eKErum0LZtyHWY\nMCH5jobWcRYuhJ/wwAEIjW433sE33oj/+0gEv587V4964igsBD3gIa4vvAA6K2ug9eabopPZaJrK\nzYUvwe0GDRs7FlnbPP+je8s/WPEpR2KAs7KSs5m98QaIGC+DcKzs1JMmxc66Nap51rh9O6xda+bg\nbjdjTz+NiAW7jD1em2jnTtwQuxT2Xr2SX+OBA5AgVq3STUHffqubp9q0MZfe4Orwli14mFq00Nfj\n9yMT8wRwMjvMIAXxxx8w7ci0ajvTpkz7DQYRI2+nGVSqZD+HaBRVVJ94Au9ZWc3aDzwA+sed47y/\nytEy0VrXxxvUW9esqmBGP/wA68yZZ9rnRZSWius1zTfZyU+dauZCgYBYqmHbNnCe558vX2P2jh3j\nMwIiPGBjxkBTidcDuG9f8feapn9//fVmZhEI6HU+ON55R14o72ibZ/i9qVzZfC2eZ/D004id7t8f\nhaluusk+7LWCwWEGKYa1a0E4raVbPJ7Y/cxXrJAzg8WLYReX+fwqV8ZvrYQvGtXNwh4P/r377uTX\nYs0lIEL9taMJWY/0m25CvhK3UJSnvP5RQXa2OMkqVfTv16zBTefVST0eaBF16qB4VKIlYaNRed0N\n68FVH68XD0a1auZ+oVbIymK7XPr3+/ejUijvetaundkX8tVXuAncgRwMwnm8dWtS25gUKlUS56wo\nWLumoX7JCQaHGaQYevUSzbuKgoTKWAJMSQm0Y6OZqG1bfF5aCpoiYwhduuD9TEvTC1yuXi1K1n6/\nKLCuXw9zld283npLZFAul2jqKQ/atDGP7/VCG2EM8507V/StRKPQpH799R+KKnzySdGJ0aSJ/n3P\nnvbOVo8ndtNmxhDv27IlNjcjI36ZB6vD1esFcbaDLOvZytWLiyF5LF0KyWTePL0fsTXTUVURanss\n8dBD9nXZiWAq4sjLw8OwcuU/m7PxD8NhBikGmQlWlowlw6FDqNF1xhkwnxhr+MyaJe8dbHXmzpsH\nAm8NJee1fBjD+3LrrXin09JAfxYtAuF95BG853l5GMv6PlatenT3a+5crMvnw3xq1NB7nEejqAj9\n8MMI+ikpgcm4e3e98kL16gn6Q6JRJJo9/DCSp0pLIdmOGYOMvlgp2AcPopevpmGi1nTreKYdt9te\nOygtxdjxHMZ8nOxsuTp14432858wQTz//PPlc7niCn1zK1fWi25Z5/Hoo/H3/MABOIEee8w+9M0O\n0ShMYLKy2EZm9vvv0Ix4GY4ePf7Z0rv/IBxmkGIYO1Z0co4bZz5H5uvavh3Zx61bQ5CTRdUNGxa7\n8qjbjdaRhw7BF2fUTKpV00ve/PijyFiysvRwcFWF4JuTg8AZ7jPIyDDXOjpaWL8eEYovv2wu05Gd\njXnylpk9e4r96l0uRF/FxYABus3b4wGHDof1/qThMDjTtdei0JTVFn34MMorPPOMzlU5xoyJLcXG\nYga7dokqn12f5CuvxMNzxx2io+XrrzFeTg4kilNPha9g926EplnHk3F1a+s6RcE4ffqInZFiNa1m\nDKank0/G2rhp5/vvzed8/jkY6ZlnguvLIEtUIYIUwBj6ThhfCk3DfaqAcJhBiqG0FEmRPJTygQd0\nzXXHDphFXC7Ywr/4Ap/LiHfnzuLY8XIXNA31fRiDpt+4Md7hli31UvuMMfbii4m12XS7Eeq6bRss\nCDys/eBBBJgsWybXynftguCcaNRmSYlOq71e0LI//xStJcEgAnkSoWssEgHBmjUL0mO8mHnOcbiz\nx+fDzUrE2Vxaao5+sR59+9r/Ni9PXtgqVkRR5cq6epSRgRvKGG6G0cHk9cJvMXq0eMNPOUWcy4MP\nitcKh3HjL70UD1/lyox9+mn8PXniCXFdDRvq33/5pSg1yYrr/fKLfC/4TZe1CBw0KP78UhAOM6hA\naNXK/FzzXJm33pK/89YgkZ9+si98FwyC6Cdiz//5Z/ucIxmDeeYZ/bcrV0KL4MlgffqY6SX3Naan\ng3Y8/HD8+Tz6qLwukZW2pqejfa61wkHXrpYB8/IYO/10vXNOoj1FZc3rrVqADEuXwqnz1FOIzbcS\nLxnhNeLpp7EofiO7d4cZRNPss4XT0sTWnDt2iOeHw9Aa6tfXxwsGwSSt+Owz84PhcsGhXRYMGSLO\n2eh0lxWOuugi+VjZ2eY99Xh0M9d555m/CwZjl7JIYTjMoIKgqEje5/vNN5GlK3vfL73UPMb+/eb4\ne7cbiWfPP4/CbMk4du+/H7QnHIaw16mTvfBsJLannCKugXcTKywUNRfeazkWZH6Ws8+GKd34HIcI\nTwAAIABJREFUnmdkwJ9w1VWgaaEQktiEcjkjRybW0csoLQcCcsftmWfG1g54sSZFwe/DYZGLGb3u\nxcVyO+Hs2biRkyZBwt+/H7kNAwfKGYLLBROO0Ra/e7eoAYTDiLzJyQGRHDdOr1JqRTSKDmzcSX3y\nybpDprDQrAYuW4Yifi1aQKOw2ulnzhTDcY1+jS5d5MzilFMg2Rsf5tJSVCTkN71BAz0aYvt2PCi8\nHvvVV1fY0hQOM6ggiEZFGhEKwVQ6ZYqcEAcC5hL5jOHdb9oUY3XsCBNOWbFrFwh1QQFMVTLTEW/U\nw2H1JSoKsq2//VZeqiItTd750IgrrjATfUXRfaiBABhMs2bmWk5btyJqSmqK79RJnIjRKasosKGN\nHAn7XGYm7HmtW4u/C4ViZ/pa+3HyksvWG5mXB+7OO3sNGZJY5Mvs2bEZWihkfkguuUTnyLxPclFR\n7GscPIiHcO5cMKrt26ERFRXBsd6sGZhPKAQ7/+bN5pvNu5NZ8cEHMOeEw/DFGAn81Kmi5GDs/ta7\ntzie3U0vLtYLd1VgOMygAoHX7FJVvEvduuHdi0bhI7C+5+Ew4uuHD0cO0L33gobINPxksHcvoobu\nuw8RQxz/396XR1lVXOvvuvPU3UxhnmeJYAQZJKIgBETF2Z8aowZNxKfGkPAEIZFGiMNTY0ReANcT\ngviUBHSpKEMABUVlUoFmkPGB0DK0A1ND08O99fvju+UZqs65t7tpu++1vrXO6ttnqFNV55y9d+1x\n+HDZdpmTA9og0KePXMRnxgxndXk47CyICuzbB7fyaFSmDx4P6HalYPdXJcKS6tFHkR55zBhIyjt3\nwlp/6aUwGC9YIE9Abq5s+DSjZUv5Xq1a4QGHw9jmzoX7llnCj0Tcc4rv2wdmdcst7pWPAgGrHq+0\nFDaCoUMRXHL8OGwmjz6KF8mu9tq5E0tDUe1owAAr8+jSRTbQjhsnr6LMQWzpYuVKEP3eveUH7/Wm\nZmI/MtQ5ZkBEk4iokIg2JrfhpmPjiWg3Ee0goqEO19fQVGUGNm2CR8ybb1q1BadPQw0ihCOPBwRS\naCDs352osFhZHD0KdbQQXsNhQ3I/cgSrjnDYiGvq1AnaCyHE7tsHz8ZoFILnQw/BnqjKNRYMQg3m\nhpMnsaovKgLtathQXYGxUvngVPmwe/SwnlNQIHOwQADE3Ux869WzujjZMXq0bPBYtgyT+ve/Y1WR\nSKhr+joZlvfsAXFOJy1FqtqeX3yBh+P1GkZys0vYxRdbJzwQgNG5SxdIC/Y+xGJG/hC71OCGRAIP\nW7UaevVVtZvchAnoR58+WLUIxONVT9KXwaiLzCCfiP6o2N+NiDYRkZ+I2hLRHiLyKM6rmZnKAuze\njfc+Lw9/3Qq9t2xZtXtMmSJrMdq0MY5XVODbtAuxzz9vnFNWBmlfFKr64APZIB0IGPECKuzcCVWv\nz4f2J092Xl2EQpVUA9vDuSMRWVd1/fXqm4mCNnl5sMhv2uR+r7IylJBs2BAGHBH5t3w5CLrPB124\nXfINBLDMU+Gee9SRi0R4eIJwihxLhw5BnbRwobXANufQodvbuvxy47hbqtdwWJ2C4l//wmpCMIpo\nFLEETnj3XVzn82GO7Eak115T60ntTHbbNkhRIhq6devqp+HNINRVZjBGsX88EY0z/b+UiPopzquJ\necoorFgBV/GJE+XoWjMuusj5O61fv2r3VmVWYMwa3X/nnfI5553n3KaoOCayGYTDqJHidn6bNul5\ne4bDhoHajpISxHXcdx8YmEXofPddGCM7dVIXTlcZMInAoaqLo0dTu2s1aWLUIrVD5T/bqBFsDvff\nD+4oUkMMGgQvHOE5lZODF+u++8DBhw+X27roIuNeV17pbmwXtYujUdzjmmsw0QcPcj5qFNQ8L7/s\nbP84cEAduWheFtvjG1Sb1yu7kjEGqSiLo47NqKvMYD8RbSaiWURUL7l/GhHdbjrvJSK6UXF9DU1V\n7SMeh4Tbti3okCop5ssvG++zz4fvwkmCnjpVLS17veqA0/nzYS/s0AHumipp+uOP1U4zZl/9e++V\nCfXPfuY+9kQCrq+zZqUWpo8fT8/Zp2lT2FVatgTtNkcal5WBpokVTDRqqm+8ezeIopCgIxGUmjRj\n9mzZYp4qrUNJiezOqcJ777mnfSZS30d4Ec2fL0vFIv94u3bWdoJBeRxmQ2znznJb5mXe0aN4WcNh\ntaomNxeS/KxZyBLoRHjPnAFzaNsW7qiffYb9CxfK/tDhsNUQdfCg1SAdCMgvSCAA9ZS9rWDQPS9T\nFqFWmAERLSeiLYrtGiJqTEQsuf2FiGZxZ2Zwg6Jtnp+f//22sibzwv/AsEcI+3xYvZthT/MSCDjX\n+k4koNZRJXB88EHjvLIy2W3brc76PffI37zHY3zn27cbaZ9FW04BolVBRYWz+7y9T+b/69UzVMXL\nlsneSz5f0rag4mZ9+siT+9xzWGKJcowjRqg9UhIJPFwRFde7t7sdYft29+hAnw/2BDPefx/cT+QY\nue02GKKbNoWkLzi7nfB7PO5LrFgMEnXLlnj5pkxRp3T98kv1kjAQSO+h3nCD9aHGYka0ol2iCQbl\npFLr1sFNtVEjqPDMofxeL9Rhb78tryCCwfQTAWYYVq5caaGVdW5lYLkBbANbkr8fIaJHTMeWElFf\nxTU1MW91Aiop3h4QZY40Ft/ypEk4VlYGoe2uu7AqEK7b+fkyYTSnr544UW1rbNdO3U97NlLG5FKU\n27fD5fyWW0AjRo6Eavdcrchfew30MpWqyL6NGAEV+VtvyULi93YKVcpmVa1NzsGZhg411CyxmMzB\np0616s79fvcUtJzLKg275N61q8HZXnlF7SUg8oWb0aeP9WGrVgbmLTc3dUk9gYED1X1NhXhcti2E\nw0ZaiFGjDDVTOGyEyafCm2+CKT74IKLJ//hHqP1EvEE4bNhofgSoc8yAiJqZfv+BiF5L/hYG5AAR\ntSOivUTEFNfX0FTVPlQegObkipxDaDULUIwhZieRwLdotg1efjn2P/WUvGoWqVk4R4CWig6cdx5i\nc1R5u5591kgO17q1HM/AOYS3Tp0MtVIk4q5FqSy2b0eW13RSY5jnq1Ej2BLr17d6X/n90FB8OXOx\nnMAoNxe+7qdOYVKPHMEy4tVXZWmzdWujk1u2qB+syB/uho8/duZ2wSBiG0pK1MukQMBIM2HGl1/C\nMykUwoAnT4Y0IdJZixTaYtyNGjmnpT1zBsvEFi0QY3HzzXI/wmEQ+0OHnKMaEwn5IUajVkL94Ydg\negUFqedNNeZ69YyPIxhEnpTNm/GCi6RbWY66yAzmElFB0mbwFhE1MR2bkPQi2kFEwxyur6Gpqn10\n6SJ/S//5n9ZzSkuRW8t+XteuasK3ZQsCSxs2NARCu4v6XXfJKwOPxwjYystTxyYUF+NbcvLUmT9f\nrYo5l0WlKirgQdiyJewWbi71Zjr59NNgCH36GLWhxZzVr8/5yZn/K1upg0Fw3PbtcZHXa+QAt99E\nEK3bb1d34oILUg+upMR9ILfcgvBplUopFEL+HjM+/xzW9DVr8OBEimnO8fvQITC5q6+GeqlXL6jC\nFi1SSwQiqte8GjE/cJ8Py87mzXFeMIhV0htvIPjMzGTM7mDCPbUq7p9r12KMZsPT+PHyC96qleGl\nFQ47F+HOItQ5ZlDdLZuZwbZt+JZEIsyuXdX59u1Bq4KIqeiFiCf46iswlpEj5RioI0dATEWetXBY\nNhLn5FhpRzp4+WV19uJ0Y4EWL4Yw/uCDEJIffBA2QKdqk+XlUMenYgZCtXbqFDQHQmD8fzSP/y/d\nxl8I/JEvmVsEI3E6SZhUhtPmzSHxXnut+vx0UjKXljrfMxJBwElFBQI/7McHD7ZyaZG/SKS7mDDB\n/d5r1xrZEiMREM4777SqnlSR0lOmGC/aokXqdNmiH02bIqDtiSfA2H71KzzwCROcPaXc8PDD1jGK\n+AlV1lX7MwuH1cvbLIJmBhmGoiIITosXOxNNN5dRO4NIJ08a5yCMb78NXfrSpeoawqlyBFVUIOL/\nscegORACoVmwdsolZsesWca1jBlFqgQtcQq+PXIEKmb7PNiDYNevhxOMoGdj6Ql+iiCZlpKflzRo\nhog3VY6MdDa/H55DCxfKxdqffBKqiX373BNCVVSoVx0eDwwyn3+OaOn69cG9xZafD+4v/I6LimQ1\njJn4LV+OZWmTJlD7lJSol6li8t5/H9fZ50bUHBUoLnYPfPN6rTEUkQhcVatiWNqxQ12R6bvvECZv\nPqaKf8jNhY0hi6GZQRZixQr5XfZ68S0LoscYiN3ChZVXy+zbp/6u3Bxg9u6FEKgSFjt0wLFf/zq9\nSOCdO1MHz7ZoYb0mHodQKeihKgq5ZUsEEr//PhiemT7Wp2/5BjLKOyYiEXjsdOpknOhWc0BFNONx\npKgwL7P8fnCrWMzwv1elXhbIz7cWdhdtXHedtT8+H/x3jx2DEUiU0Lz2Wrhp2kO8he7PHkkdCkFC\nd3NtFfnRn3/eqtpp3dpaUSmRUIeW2xmbnUnt3Zv6JbFD5Y4bi4FJcI45Pv98eEX86U/qjIjCnTVL\noZlBlmLZMrz7fj/oSYsWiM+ZPh3St9gfiyGuqLIM4fHHjYJV4bDsyWhHjx7OhXOGDq3cvZ2EUvNm\nzmbMuVy0RkWbzfURpk+Xz2lERbyCPAZx69sXLo933w0C/vrr6rxFZsImKmYJKdNJTWTvnFu49YIF\nMPras/HZ2w0EoJ4xL8fCYTCUevVkQvnNN/AusEsW0SjqrDoZYMxutgsXIkBt0iS1aufdd40XSdWe\nXXqIRuEZUFmoAvUaNHBeec2bZ5Tqi0SqVuQ7w6CZQRbg2DGkb7A7PZw5Awl30SKrPt8eVxCNVi0X\nUUEBbJDpROw70Q3GYGc09/muu/Cdtm2LbKVmxOOp3UUjEWsmhkQCQrHT+X4/hEIzQ5wzRz4vSCX8\nMCnSK4TDRqDEkSNYcqlcOadMARMQJTDjcdzY3p592ZOba834p0KHDu6TQoSH0L27vH/wYFjzGzbE\nZOTlGaoelYG7USMwJ1XxC5/PPUGeCvv3Y16uuEKeN7PKRhjKnMpOFhdj2XjsGLyBGjXCcu+VV3B8\n2TL02e+HHWXDBvd+7dmDfq1di6R3qfSgGQ7NDDIcf/sbVvyxGN59cxpmgfJy2BlefBFGaDutCQat\nQaM1AZWdkDH02/yN2XOURSKIKzLDzswY4/w3v4GtRGSONhP2GTPUEckNG8Lx5+abZRXXp5/KHplh\nXykv69BVbZDt2JHzmTONco0nT8LA/NOfwqKvyp/xxBPyTYQey7wvFLJG1KowbFhq3dm4cRismTN7\nvUb66MaNYQAWOvklS2R1ic9njEXlonbhhalfBieo4hB69kTwR/v2WIU5RQMvWWIsdVXFu0VN6UQC\nXkrp2h02brS+PJ0763oGmhnUPXz2maz6MMcHcI5As/79DRV0JAI1t70i2vr1cDEdNQo2umnTzm1K\nlk8+gXpYVCjr0gUeffb003Zh0+u1RjqXl8tqZq/XmvvIDlWchN+futC9cD7Jy8Pf7z0xf/lLNWcL\nh3Hi00+nNylOUvqMGYaKIhwGx0+F/fuNwu2qaLvOnfFADx2CtCzUH/bz2rc32hw5Uu6f+QVT1Uqe\nOTO9sasgdI/m9vLzU193/Hhqr6777qtanxo0kNsaNapqbdVxaGaQwZgzR+2aaTbCvvaaWlV6wQVG\nrMCsWVhZi2wF4jt86CEwk/vvB0Fs3Lh6tcCPHoUX1Lp1zozGnk7DnkFZlWPNKX5KYMQImW7bq7w5\noaAAam1LFolVq9zTQQQCWKrk5cF44UQg7UVyGDOSQu3ejRubi0ubcfQoXMHOnDH2HTuGh/nii3II\n+B/+YJxXXAwPodGj1QVgNm2CGsheDpLImkSqpAQ2D1FQ5/e/T1+C2LQJK6ZYDDaGq682XD49HrT5\nq185q4QEDh4El05liL733vT6ZYdKJ5lODEgGQjODDMbq1TKhr1fP+j0+95y6Hjrn+JYLC0E77rlH\nXmV4vajTYhfWxozBysHNLbWsDHUIpk1LnVjOjHnzjPsFg4j9EbnbvvtOnQQvFHKvD7N5M2iO14st\nFkvfpdYRixZBL9WunazqEdG65klTJV9as0Ymxt26yRG9e/fCoj1nDtRPTz5p1BRt0ABLxG++gUpK\nBIOoaqDasWyZ/AIxhnaDQRSsadDAiLqLRHDvqVOhQxcoLU1NtM347jurwVr4BpsfqCpVhkBhIVZP\n/fsbdZ1TGZIGDkR22coan1VeB051IjIcmhlkIFas4PyqqyDx3nijEQUcjRqqUYENG6z0xudDhDLn\n8KoTahsVkRXMxb7P58P3GomoA7zKylDTJBo1opTnz09/fKtXI67omWesSTyLitQeSUOGpBZId+2C\nQ8tjjznHDr39NjIyX3+9tT6LK44csS7PzAEP5s1c29OM+++36vCDQahnBNasMSYyGsVKw95+s2aw\nBTg9RCI8BDsSCUjMQhdmv0YU0nn8ceQ0ueEGo+pQNIp96eDVV+EydtNNWGotX+7umur1Otcv2LbN\nMALbmZgbQzC/tEuXptdvztWlSqujCqvD0Mwgw/Dvf8tq2tmz8X051S4Qaa09HqzIxXlXXplezn+3\n43YbBedYEajUVwcOyOe+9x7cXsNhCG9u2YJPnVL3x549WoWKCtCR7dsN+9++fcioEAohBiOV4doR\nq1YZuuU2bZC0SbXEUuHKK+UBde9uHHdzgxKbxwNdv9Nxcw3hs2exVHr4YRDkUMjIQ2S/LifHKPag\nypQaDLoXzODcWrNUVEJbsMBdxx8Oq2tEcM75L35R+eyD9q1VqzQfLAfztV//0EPpX59B0Mwgw6Cq\nmTJ8eOrrEgl5Jd+zp9yW/TsTtEKoWNIROKdNUyeHa9kSCezmzAFN2rNHjovq3dt5DF99pa6GmCr9\n9cmT0OhEo9j69IEmpk0b59gHImRX+B6rVmGp8q9/yd4kL76IjuXm4gYiPbLXC2m9USMYblUYN846\nKL+f81tvNY63aJGauDVsCJ27fYXRsSOYyaRJ4IZffgm3rnQz90UixhLpgw/UYeep1C5t2sgv2MMP\no79CvRMMGl5NoRBUb055h1RGd8EQ7S+vSKRn3x+LuffZjP795fD06hjO6jA0M8gwDBokfwfppnCw\nY+JEK10IBKz/M4aUERs3wqPnd7+zCoeBgDpgbNMmZ41FIAAacMEFyDRsFxA9HuckkfE4aJn524zF\nwCTc8MAD1nGFQoh2ThUwfMcdyQZE3h4RqXf11YZeau9eWWKORqGfmzIFjMFeKtKM4mIsT0Senw4d\nrMsje5CYahszBpPQpg3aiEahC7QHVF16aXp1j4Xu0JxC9rvvZGbwk5/gYb3/PlxbBw+WObPKp3jM\nGDCnuXPxEr71FtRhjz0GTwC3BHSPPCLPdzgM7wY7dxfFvO0v7VVXqdvevRvqtgED8NzicUgsTZoY\njH748MrZRzIImhlkGBYulNVES5ZUra3XX5dpQ79+UP0wZlQ/bNoUaijOoXIStdQHDULhLDsSCXgd\nutGbaBSrbZWbvZv+f88e2Fg9HvTLzaVUoF8/+f79+qVWsX/yCQdBtatQYjFIypxj8u1EkjG5JrIb\nKirAPNaskTnh6dPQ1Qudtyp6LxjEpJWUoNOffaYOKbcHaDgNfNUqtWFl3Tos7zwerDq2bcM8mF/I\nYBAGnxUr8HI8+6xcL7o6wVtlZeDkfr/htbV6NXSI+/cbbnI/+QmezcaNWBkJD4IhQ+RqchUV6K+5\n4lIoBHsO52DYH38MKSeLS2BqZpCBePttCHmXXSanrfnwQ8QyzZ6dOvvnxRfLtMDj4XzsWKzG7bEI\nZr98p2+iogJpcdw8LwXRHz1aXsGnq86tzDepYgZt2sBGIRxvwmGrtqJHjyRdViVxy801gg727FEP\nNje3apk1Uw14yhSZg3u9xiqgsBAuZH/9K4ijGT//ubNeTKhrzInkVH2YPx81TxcuxP/XX+/8kEMh\nGKBnzsTLNmxYJSzzacyH00sgAsu6dzcKZ/fsac2LJFBcDB2ik2SQjkEqS6CZQRZh6lTrt961q3vF\nPhUzIEJAmF0ANdsS3fDSS+nlawuH5apsghmp1ESFhfDo690bKmfVOXv2gBH17g1hUKzm+/Z17gdj\nYAj2WgdhTwmfcutWEBZ74JHdGv6nP8kN+/1W90sVqiJl7t5tZT6MGb7/zzyDvjGGweTkWH1o/+//\noPcTgWnnn4//fT53ZpBIQGVy220grF4v/o4ejQl3e9A5OdVXq5w5g3tddBEC/tzUbqK/AwbItSa+\nL2Jtwpgx7mq4nJxzW2CjDkMzgyxBIqF+l6dNc77mzTfVWocBA2RBKRZLTx01erQ7bfD7Ye8cOVLt\nwBIKyTTyxAmohIRAHA7LQWNHj4K5mGvU33MPjt1wQ9UcUG7wvAm3SFXJRTOhLyhQN/DGG+pJOnIE\nHMrjge+u03kqfPutNUybMejAx46VVwzimJigiy82PHr+9jd1sepIxPoAHn8c4xVLJhU3dZvEYNDZ\neJ4OEgmodgTB9vthh1AV8hCwS0ViGzhQPnfw4NT9T+UxlSXQzCBLcOKE+l0W2YSdMGeOoSrx+0H0\nN25EFtJIxDD4ppvZdPZs55VBvXqGI86kSWo68j//I7f51ltygKnPZ7UzqurM+Hy4365dUOunqnLm\npXKD3tNp/jg9AgOKKnGcuUrYF1/InM3vdzZo9O4t1zz++OPUk8s5QspVNRSciHLfvrju4out9wwE\n1NzY4zEe9Pz5lUvLrdpyc60rg+PHkQjrscfSUxkdPapW05nrLpeXc/6Pf8AY/c47ajdbrxeViux4\n+GH3lUFenl4ZpEN3q3phTW7ZygwqKkBAf/YzePDYS706Fb365S9Tt/3NN3AHnzrVSKjJOejTs8+C\n/qT7PcTjyEKqUsH6fIaQaK8n4vWC7vboYVRrFALq22+rmYE5E+s//iEzA7/fYD5ffQWNgIr+ia0F\nHeQxOskjVMyH0DJeSg4nx2JWabe0FC6gZoJcr566NnBFhVpqrVcvPRvDvHnpF9TxemFt795dXcBB\ndc0llxj3uuuuyhN/M3OKRKwrKOHPGwphDsypvJ3w9dfqsnrCoyEeR+yBcFONRtWRkk2bqotlnD4N\n91FRO6J5czCf3FzcRzgK/AigmUGGYORIQ0ASGQPMhJtzJKCzf492G2JNIpGAWlaooFU0wrzinjfP\nKGRVv74sAIZCyMJQXAwaIgh5JGJ1xeccDM0cnBuJwBXWjvnz4YWocrUfGPiIbw5cxHdSJ55wI3Kq\ncGrh5iQGHouBi6mgIuY+HxLcbd4MQudUv+D4cXDNdIo5B4POBmPVyiActqZvHT/enXs6bX37cv7R\nR7LBVqTYNZ/bsqV6nGaMGGFIDoEAXvSTJyGtTJsmr16ER4B5XG4eTPE4VnfbtoFZHz6MKnEqg3MW\nQzODDMDSperv3J7MsrwcKuL69eH590MXZlJ9l3Zh9PBh+TpV5TSxCeGyqAiVHAcPhkONyiZ58CC8\nDgcPhkNNqkzDIkmmyK5wxx2cJz5cDcOqEzfLyZEntrwc+q0GDazXhcPqRHPz5qnb7t7dSA2Rk+Os\nOjp8GAntBg+Wl0weD3TjzzyjTt7m8xmRd1264LfItipqGAh88w3cu8Q5bgxI+CLn5RnVw+zIz5fn\nVZUzyY7SUqiALr8ckdQHDsCFNBZTZ2gNheDBdMUVSIFRmeRYKqxbByeBp55yD5HPcGhmUMcRj6u/\naXOmzo0bISwGAigIM3o0cpb9/Ofu+b4qg9JSZ1VRPA5vw1TaC78f36c9dfSBA85qW1GcXoWSEtnY\nLNzt08WHH0I99u67pra2bnXmTk2aGJlCy8txs6FD1VwwFkNglQrXXGNV1QSD8j1VuT7WrYMqp1s3\nENcNG8D9RXK5J55Av958U53ywedDtF9ZGcbxyiswEDllRz1xAjq4GTPw4ESSPGFQuv12LN+mT0dk\nrlsEoCoxn9cLXWRlMHascxS111v9mgNFRQg+69oV3hSC4QQCeP5ZyhA0M6jjcMrUGY3CKeXbb92D\nSqtaJVCguBgEXGQpHjdOJsDjx6dvZ2QMsU9m9XgigXuo6K8qRX5hoREHEQqBVnEOuhsOg4Gcf37q\nejCuWLoUXiuhkCF5+nyIaE0kwHF9PiPdstPk/9d/IaDJnGr64EGrSikvD0saO0f0eKyTvWOHlcCL\n5HWMQce9YAGCsHw+Y3LsfcrNrf6S8dQpqF2qEkcxZowsyaeKNLTjqqvU8+33g3gXFla+XwJlZWAm\nTuoxv99aYCOLoJlBHUciIefK8noNZwpVrV77uZMnV/3+9mwIkYgs7Kpyebltubmy3bC0FA4mffqA\nlkUiEKwvvFCW9Hv2lAPiXn1VNkhXO+38iRNydHFeHpYSqbifUL3k5GBr186QKC+4wDqAcBj+/Xam\nYtenP/GEO+cPBOQUtSoGZY/A/SGhcvvyeNwDYuyYMkU9tiZNqt+/NWtS525SeSVlAarDDDykUeNg\njGjxYqIGDYhiMaJgkOiFF4h+8Qsc9/vdr/d4cE0qrF5N1Ls3UefORH/+M1E8jv0rVxKdPWucd+YM\n0YoV1mt9vvTHQ4QvKhCw7gsEiCZOJFq3juiLL4imTiWaPZto7VqM4fRpnJdIEG3aZPRP7Fu40Npe\nPE60ZYtx3unTRGVllesn7dqFzto7P2MGJkIFr5eocWOiSy4hqqggOnUKW2Eh0dixcscEPv8cAzWj\nqIioQweiwYOJdu/Gw/Z6nfsbjxOVlBj/V1QYv4NBomiUaMEConr1Uo/91Cnr9ecKgwZZ/w8EiC69\nNPWLbMa4cUTt2sn77S9VOiguJiovx+/ycqI77yQqLXU+PxIhuu66yt8n21FVLlKTG2XZykDg7Fn4\ny5u9FZ9+2l1Q9HigThar5k8/hXv83r3WtgsK5AI2ojBW//5yIOejj1qvnznTmqVY3Nt/Sz27AAAR\nH0lEQVRpld2sGdJopBIGEwmoh30+bJdeCpuqKgnl2LGyzSIvD8L9wIFGG2PGGBqJzZsxH072TqUx\nw+9XB3fFYpjsgQOhN7dXMSOCrz/n8mojFoN6x81w0rAhbBkNGjg/dKHLUx2LxdSulXYcOgT/XlFH\n+LnnUl/DOewU772HNBX2gtJ2fPQRjNf166NSWlVWKvv3Y8UlXoZIBLaQdFFUhASBPp+h+pk4UT13\nzZph/lu3hpowS0HVWBnUOuFXdipLmYEdy5erdewXXgg1zk03oVTrmjVI9Ni9u+E+bS82k58vE++G\nDXGsoADXxGLYOnZUu8+/8Qbuee+98P757W+RqeCGG/D3uuvgDBIK4RuOxZBdwM3YO2+eVaNgLyAm\ntksuAWMZNsxIReP3w67bq5d11R+NIq3GY4+Bfoj5cMxKPHGi4YMeicAP3d4BxuSC9/bsmqEQykhy\nDpfTcNiY1GHDYMl2Uz3FYuBcX36JB3veeVamEAjAw6hpU7WaIxhUj+/4cRDCUaPQ/iWXWBmKzwdj\nqltpuLNnkQAqFsOE1q9f9VJyW7dCDfOHP4Bbu2HPHrxoN98MvWMiAX3hvffC88ctSnnIEKtdwONx\nZqRffFG1sWQYNDPIUEyerPZ+zMkxJN/CQnyXTnUIhGT+5JOyvczsyHLoEJxOFixw/75SoV8/ubqh\nmyPJvfc600bzOEQwcDxuVKMUdFg1RzfdJDPSUMjFHrpmDYj9mjWQ/FUdiUSQ0lXg7FlYxYNBbEOG\nWDnfjh2wfC9aZHi+PPWUrPc3EyuRCXXnTvkcvx+E/fhxTKqZsHm9SChnR3ExbBnCQ0HUYFCNLxq1\nVvtJJCBdl5bChmLPl3TRRaleB7mtdeus3D8cRjWndI3L5hqtoRBWOP/8Jxhn+/bwJRZtpaqZbN7M\n0Y1ZDM0MMhSzZqm9jLxeg2D/+c/O37Y55Yq9aAxjlff2Swf2YvdEEEidMGmSurqhnQabaZRbzIIY\n9913V61OC+ccyx4nCb55c+u5iQRcvg4fTp+gnTwJYm9vmzEjiG3FCrkP5piG3butD9TrVdftvfba\n9AkikZEQavduRAEGg3gJVUU2GjdOb7w7dsBQHgioOTdjUCmlcg0rKVHnkDKvkiIRMFzOscRNNV6v\n11bhKLtRK8yAiG4mom1EFCeinrZj44loNxHtIKKhpv29iGhL8thUl7ZrbrZqCYkEhMg77wSBPHUK\nUv2FF8rvb+vWxnVuSeMaNzYE0unTZUFyyJBzP47rrrMysEgEKw4VioqM1PmCJuTkYPzhsFHD5b77\nrNdt26aOdxDeSd26wWZip6W5uZVY9axdCx90+00CAfjsV8fH/fRpBDjZCWNOjpHQbvVq9UMVuvfn\nn5dVRR4PohRFtN5bb6mlCZFGQiVFDBqEazt3tvYvEJCrtV19dXrjbds2dbI7rxduZip8+y18m2+9\nVe6zyj20c2dc98knRkEhe6S2x4P0IjNnVu9ZZhhqixl0JaLORLTSzAyIqBsRbSIiPxG1JaI9RMSS\nx9YTUZ/k78VEdIVD2zU5X7WChx4yiFcwiFVvSQmCwET6h2AQgmlBAdRDp0/D2Gonel4vGMHGjWh7\n+3b1N5OXd276XliIQNmmTREE16MH+ur3owDOiRNQQ9m/ud/8RlbpXncdjm3dCrvILbfgm+3SBUFj\nnINJduhgMDevF/d+5RXYNktKwExfftmoM98or4x/ddPv0FjXrlBN2HHmDPxsmzVDOgQn98NIxJoQ\n6vXXcX6LFij64pbkSXB4u2GEMeTbKSrCg1WVwjSvDF580Tlo48orDcu8qv8eD1RK990nS9Vz56KP\nduItCu+YX7LbbkvNXYuL06u8Jl58O06cgPQjXhRzzIcIErO306MHVhllZfg7bx5UdQ88gHaCQRia\nzEbwRAKruyxPT1GraiIFMxhPRONM/y8lon5E1IyIvjDtv5WIZjq0WVNzVSs4e1b+XnJykJzRfM6h\nQ5CKRXH5QAA1xd95B/StVSskaDx40EqP7r5b/e1161b9vpeWQpsg+u/1on8HDkAbMmGCYRTu0sUa\nvKrSPJiFw9GjrYwuHIbAzjnmYtgwMMdBg6z5mfLzjXt27IgA3vhvR8nl4+yBWTfemLr8pFlSPnpU\nVilFItDdOeG999TLmubNDYPsggVqNVUgYFj2jx0z6hSomMauXVgOOunTAgEQw7//HTaF9u1xvkA6\neZFCIXgPuCGRUEdJqzZV1SPB0e3MrHlz5EdavNjqcSTquobDYK4ffWRt7+RJMFyzSq+oCAwkFMKL\n89BDWVvtrK4xg2lEdLvp/5eI6Makimi5af8AInrHoc2amqtawalT6kIzCxbI57ZvbxXaVDTNjltu\nkb87j8eqh68qNm+WaVtuLgjwO+9Yv2OvF96YApMny8R+7FjjeJMmcr/Nx1VYssTaptcLo7ZUZcfj\nAdcwozIJ28Jhw+vHfqxtW+cOLlrknNNj1y6c88or6nP++7+tbX39NTi9qmRnQQE4df/+aoYQCjlH\n8ZaXO/sN2zefLzXhXLhQbi8UMupCC1e21avla198UWaMIm+5wJ498Ey64w51KmxzZLgKV15pncNo\nFKuJLER1mIFr0BljbDljbItiG+F2nYYVsRjil0TgGGMI8rrsMut5ZWVE+/bhjTXj88/d27/7bsTR\nCASDRJMmEfXqVe2uUyQix1ZVVGD/hg3WuK14nGjjRuP/8eOJrrkGY/X5iIYOJZo82TgeDlvb9fmI\ncnLc+/Ppp9YAunicqKDAobFYzLovVUATY8Z5nTsTtWyJDtmDxKJR5zb693c+tnIl/g4ejDbF/fx+\nogEDiB54wHp+o0ZE06cTtWhhRAX6/URNmxJ17Yp+fvAB0bx5RHl51v5360bUvLm6H15v+lGGwaDR\nrhNGjCD6+GOi1q2NtidOJFq/HpGEs2cT7diBj8COYcOsgXrhMNG111r3dehA9NxzRL/+NVEoZL0+\nkSA6cMC9fxs2GEFpRIheXLvW/ZofI6rKRcRG8srgESJ6xPT/UiLqS0RNyaomuo1c1ET5+fnfbytT\nlR7MAJw8CcGmbVtIzyq350RCTuMejVprgDhhwQKohTp2hBfRuVoFJxLQFAjhLRJBWplEQp2VoGtX\nuY3iYrVnn7nuis+HfEeqjKhmzJ0r37Njx+QBc2ONG8vJyJ5/3jgnEMANu3ZFA+PHwzDSpg38Vr/9\nFtd8+SUeirlEmzBuOGHxYrWULXRgnCMvUP/+eCFGjnQPJvvqK0i3bdrAqKuapL17EQTSpg189lPl\nHPrLX1IbfSMROa1uKnz3XerC3XZ89hlUQm3bYiXmFLhiLxcqViCqoBkzevWSM9G6lQ/MIKxcudJC\nK6kOqIl6mf4XBuQAEbUjor1kGJDXJRkDox+ZATld/PvfIHa5ufh75521r96sqEBg6H/8BxJfCmeW\n8nLUJBGagNzcyqumVq2CCvfRR9OrrFhRAdf/WMzIEv19sa333oNFe+JE5zKH774LQ+Nf/pJ+1OyB\nAzCO/P738GBJBzfdZCVaonRlXcJzz4EpiriIVq1gdH7gAWxmo1ZdgT3SUFXv2Y6tW6FGFOqq/v0r\nz7AyBNVhBoJIVxqMseuJ6AUiakREJ4hoI+d8ePLYBCK6m4gqiOj3nPN/J/f3IqI5RBQmosWc84cc\n2uZV7Vc2oLAQqqGmTZFrKNUqvTaRSEBDcOIEUZ8+SOnzQ9zzk0+Ijh/H/DRpUvP3rBKWLEHCqH79\noC+ri/j6aySTys2FGseeW6kuYutWor17oQrr1Cm9a779FqohobN1yw+VwWCMEee8ShSjysygJvFj\nZwYaGhoaVUF1mEEGiAEaGhoaGjUNzQw0NDQ0NDQz0NDQ0NDQzEBDQ0NDgzQz0NDQ0NAgzQw0NDQ0\nNEgzAw0NDQ0N0sxAQ0NDQ4M0M9DQ0NDQIM0MNDQ0NDRIMwMNDQ0NDdLMQENDQ0ODNDPQ0NDQ0CDN\nDDQ0NDQ0SDMDDQ0NDQ3SzEBDQ0NDgzQz0NDQ0NAgzQw0NDQ0NEgzAw0NDQ0N0sxAQ0NDQ4M0M9DQ\n0NDQIM0MNDQ0NDRIMwMNDQ0NDdLMQENDQ0ODNDPQ0NDQ0CDNDDQ0NDQ0SDMDDQ0NDQ3SzEBDQ0ND\ng6rBDBhjNzPGtjHG4oyxnqb9bRljJYyxjcltuulYL8bYFsbYbsbY1Op2XkNDQ0Pj3KA6K4MtRHQ9\nEX2oOLaHc35hcrvftH8GEd3DOe9ERJ0YY1dU4/4Zi1WrVtV2F2oM2Tw2Ij2+TEe2j686qDIz4Jzv\n4JzvSvd8xlgzIsrhnK9P7ppLRNdV9f6ZjGx+IbN5bER6fJmObB9fdVBTNoN2SRXRKsbYJcl9LYio\n0HTOV8l9GhoaGhq1DJ/bQcbYciJqqjg0gXP+jsNlh4ioFef8WNKW8BZj7KfV7KeGhoaGRg2Ccc6r\n1wBjK4loDOf8c7fjRHSYiN7nnJ+X3H8bEV3GOb9PcU31OqWhoaHxIwXnnFXlOteVQSXw/c0ZY42I\n6BjnPM4Ya09EnYjo/zjnxxljJxljfYloPRHdQUQvqBqr6mA0NDQ0NKqG6riWXs8YO0hE/YhoEWNs\nSfLQZUS0mTG2kYgWENEozvnx5LH7ieglItpN8DhaWvWua2hoaGicK1RbTaShoaGhkfmo1QjkbA9c\ncxpf8tj45Bh2MMaGmvZnzPjMYIxNYowVmp7ZcNMx5VgzDYyxK5Jj2M0YG1fb/akuGGP7GWMFyee1\nPrmvAWNsOWNsF2NsGWOsXm33M10wxmYzxo4yxraY9jmOJ9PeS4fxnbvvjnNeaxsRdSWizkS0koh6\nmva3JaItDtesJ6I+yd+LieiK2hxDFcfXjYg2EZE/OdY9ZKzSMmZ8trHmE9EfFftVY/XUdn+rMD5v\nsu9tk2PZRETn1Xa/qjmmfUTUwLbvaSIam/w9joiequ1+VmI8A4joQjPtcBpPJr6XDuM7Z99dra4M\neJYHrrmM71oimsc5L+ec7yc8qL6ZNj4FVIZ/1Vj7/KC9OjfoQ7Bz7eeclxPRPwljy3TYn9k1RPRy\n8vfLlEHvH+d8NREds+12Gk/GvZcO4yM6R99dXU5Ul82Ba83JOo5Cwjjs+zNtfL9jjG1mjM0yLced\nxpppaEFEB03/Z+o4zOBEtIIx9ilj7LfJfU0450eTv48SUZPa6do5g9N4suW9JDpH3925ci11RLYH\nrlVxfBkJl7H+iZB3anLy/ylE9FciusehqUz0WsjEPqfCzznnhxljPyGi5YyxHeaDnHOeTTE/aYwn\nE8d6zr67GmcGnPNfVOGaMiIqS/7+nDG2lxCv8BURtTSd2jK5r9ZQlfER+tzK9H9LAueuc+MzI92x\nMsZeIiLBCFVjrTNjqgTs42hFVskr48A5P5z8+zVj7E2CGuEoY6wp5/xIUm1ZVKudrD6cxpMV7yXn\n/PvnU93vri6piSyBa4wxb/K3OXDtMBGdZIz1ZYwxQuDaW7XS28rDrNdbSES3MsYCjLF2hPGt55wf\noQwdX/JDE7iekNWWyGGsP3T/zgE+JWTabcsYCxDRLYSxZSQYYxHGWE7yd5SIhhKe2UIiuit52l2U\nIe+fC5zGkxXv5Tn97mrZOn49QQ9bQkRHiGhJcv+NRLSViDYS0WdEdJXpml7JAe8hohdq28JflfEl\nj01IjmEHEQ3LxPHZxjqXiAqIaDPhg2uSaqyZthHRcCLamRzL+NruTzXH0o7gbbIp+a2NT+5vQEQr\niGgXES0jonq13ddKjGkeQcVclvzuRrqNJ9PeS8X47j6X350OOtPQ0NDQqFNqIg0NDQ2NWoJmBhoa\nGhoamhloaGhoaGhmoKGhoaFBmhloaGhoaJBmBhoaGhoapJmBhoaGhgZpZqChoaGhQUT/H3SiTr7I\n8P09AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x107e28a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"colors = ['r' if l else 'b' for l in target_labels]\n",
"plt.scatter(data[:,0], data[:,1], color=colors)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally let us now generate at random 100 linear models with coefficients in $[-5,5]$:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2.42065006, -1.51408433],\n",
" [-4.65413701, -4.75333564],\n",
" [-0.19447508, 3.05241949],\n",
" [-2.48775025, 2.85338914],\n",
" [ 2.1362176 , 1.08304026],\n",
" [ 2.00429234, 3.42847837],\n",
" [ 0.88481654, 3.8669342 ],\n",
" [ 4.44211929, -3.83888206],\n",
" [-3.66822357, -4.28716487],\n",
" [-3.91824496, 3.06436092],\n",
" [-0.3920509 , 0.5227957 ],\n",
" [-0.94013027, 0.46786464],\n",
" [-4.57795069, 1.779259 ],\n",
" [ 0.36808181, -0.5344856 ],\n",
" [-4.93262404, -1.90698095],\n",
" [-0.33777705, -1.63020961],\n",
" [ 4.47799157, -1.31602341],\n",
" [-2.65965489, -3.18664523],\n",
" [ 3.1002499 , 3.88230724],\n",
" [ 1.2543389 , -3.92972403],\n",
" [-2.08471236, 0.19273355],\n",
" [ 4.04972983, -1.80477782],\n",
" [-3.04213845, -3.86273346],\n",
" [ 3.23897921, 2.35710368],\n",
" [ 0.82709134, 1.97296822],\n",
" [-2.41348448, 3.52387581],\n",
" [ 3.272664 , -4.01131236],\n",
" [-2.78192199, 1.20800436],\n",
" [ 2.15143713, 0.46205732],\n",
" [-0.27395696, -3.71015376],\n",
" [-3.49595585, 3.35236591],\n",
" [ 3.87269394, -2.38906937],\n",
" [ 3.54731272, 3.61539208],\n",
" [-4.24188741, 2.32108886],\n",
" [ 0.64768018, 2.67719383],\n",
" [-1.46035943, 3.40867468],\n",
" [ 2.09576921, 3.21825488],\n",
" [-2.61612374, -0.37691585],\n",
" [-3.44960902, -4.20342928],\n",
" [-4.74685223, 3.45572264],\n",
" [ 0.47240822, -4.01583302],\n",
" [ 2.999604 , 4.75639895],\n",
" [ 4.92750221, 1.78622421],\n",
" [-4.77167292, -2.26895667],\n",
" [ 4.33833673, 3.21539957],\n",
" [ 4.30829825, 1.92057033],\n",
" [ 1.14997347, -0.40697769],\n",
" [-0.52503915, -2.00002841],\n",
" [-0.80040233, 1.70290673],\n",
" [-2.97302617, -2.98759477],\n",
" [ 3.38727939, -4.75730242],\n",
" [ 4.30885635, -2.52883579],\n",
" [-3.23360834, 2.7252995 ],\n",
" [-4.98056317, -3.07687503],\n",
" [-0.62752698, -1.84668032],\n",
" [-4.46693483, 2.39512863],\n",
" [-4.53139418, 4.8182652 ],\n",
" [ 2.90990641, -0.81200988],\n",
" [ 0.81473891, -0.51190201],\n",
" [-1.70213346, 1.50323875],\n",
" [-3.42105141, -2.30779652],\n",
" [ 2.17377044, 3.57951352],\n",
" [ 2.46715515, -2.61123393],\n",
" [ 2.6401855 , -3.66495187],\n",
" [-3.62372777, 1.95002019],\n",
" [ 1.57178844, -1.57386143],\n",
" [ 0.97628317, -3.22374322],\n",
" [-2.62901857, -2.3521806 ],\n",
" [-2.07241213, -0.06618532],\n",
" [-1.35874934, 3.67684431],\n",
" [ 0.72182233, 1.16568076],\n",
" [ 4.18505486, -3.53601869],\n",
" [-1.37070263, -0.16277551],\n",
" [ 0.08486058, -2.78638763],\n",
" [ 2.32323512, 4.79326219],\n",
" [-3.17893632, -1.62899238],\n",
" [-0.16249256, -1.38160519],\n",
" [ 1.63573918, -2.67334439],\n",
" [ 3.89370811, 4.07947346],\n",
" [ 1.54299994, 2.40618785],\n",
" [-1.30578765, 1.82646402],\n",
" [ 2.61456717, -0.23854833],\n",
" [ 1.32655801, -1.09311069],\n",
" [-3.64407544, 4.17780474],\n",
" [-0.48365564, -0.31774477],\n",
" [-1.57456997, -2.64578667],\n",
" [-4.49431739, -4.50338848],\n",
" [ 1.21613128, -4.34637332],\n",
" [ 4.31502574, 0.22312125],\n",
" [ 0.85531139, 1.77814044],\n",
" [ 1.36949581, -1.56175179],\n",
" [ 0.07691984, 3.0667515 ],\n",
" [ 1.38754742, -3.26294532],\n",
" [-3.14312877, -3.88441664],\n",
" [ 3.08398027, -0.02962741],\n",
" [ 1.68912828, 2.02588202],\n",
" [-1.69812072, 4.41390119],\n",
" [ 4.47082376, -3.15265638],\n",
" [ 2.23288076, -3.36156815],\n",
" [-4.44213493, 3.2528898 ]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"models = (np.random.rand(100,2) - 0.5) * 10\n",
"models"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Write a function that, taken two list of labellings build the corresponding confusion matrix [[1](#hint1)];\n",
"1. For each model in `models` plot the [FP,TP] pairs on a scatter plot;\n",
"1. Just looking at the plot: which is the best model in the pool?\n",
"1. Find the model with the best accuracy [[2](#hint2)] and compare it with the target model, is it close? Is it the model you would have picked up visually from the scatter plot?\n",
"1. If everything is ok, you should have found a pretty good model for our data. It fits the data quite well and it is quite close to the target model. Did you expect this? If so, why? If not so, why not?\n",
"\n",
"<a name=\"hint1\">Hint 1:</a> it may be helpful to have a way to map TRUE to 0, FALSE to 1 and to use these values as indices in the confusion matrix. \n",
"\n",
"<a name=\"hint2\">Hint 2:</a> one way to proceed is to build a function `accuracy`, use the `map` function to calculate the accuracies of all the models, and then apply the `numpy.argmax` to retrieve the index of the best model."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [aaaid]",
"language": "python",
"name": "Python [aaaid]"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}