Files
FYS-STK4155/doc/LectureNotes/_build/jupyter_execute/chapter6.ipynb
T
Morten Hjorth-Jensen 9587aff02c adding dft slides
2023-10-25 15:38:49 +02:00

1542 lines
217 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Decision trees, overarching aims\n",
"\n",
"\n",
"We start here with the most basic algorithm, the so-called decision\n",
"tree. With this basic algorithm we can in turn build more complex\n",
"networks, spanning from homogeneous and heterogenous forests (bagging,\n",
"random forests and more) to one of the most popular supervised\n",
"algorithms nowadays, the extreme gradient boosting, or just\n",
"XGBoost. But let us start with the simplest possible ingredient.\n",
"\n",
"Decision trees are supervised learning algorithms used for both,\n",
"classification and regression tasks.\n",
"\n",
"\n",
"The main idea of decision trees\n",
"is to find those descriptive features which contain the most\n",
"**information** regarding the target feature and then split the dataset\n",
"along the values of these features such that the target feature values\n",
"for the resulting underlying datasets are as pure as possible.\n",
"\n",
"The descriptive features which reproduce best the target/output features are normally said\n",
"to be the most informative ones. The process of finding the **most\n",
"informative** feature is done until we accomplish a stopping criteria\n",
"where we then finally end up in so called **leaf nodes**. \n",
"\n",
"## Basics of a tree\n",
"\n",
"A decision tree is typically divided into a **root node**, the **interior nodes**,\n",
"and the final **leaf nodes** or just **leaves**. These entities are then connected by so-called **branches**.\n",
"\n",
"The leaf nodes\n",
"contain the predictions we will make for new query instances presented\n",
"to our trained model. This is possible since the model has \n",
"learned the underlying structure of the training data and hence can,\n",
"given some assumptions, make predictions about the target feature value\n",
"(class) of unseen query instances.\n",
"\n",
"\n",
"## General Features\n",
"\n",
"The overarching approach to decision trees is a top-down approach.\n",
"\n",
"* A leaf provides the classification of a given instance.\n",
"\n",
"* A node specifies a test of some attribute of the instance.\n",
"\n",
"* A branch corresponds to a possible values of an attribute.\n",
"\n",
"* An instance is classified by starting at the root node of the tree, testing the attribute specified by this node, then moving down the tree branch corresponding to the value of the attribute in the given example.\n",
"\n",
"This process is then repeated for the subtree rooted at the new\n",
"node.\n",
"\n",
"\n",
"\n",
"In simplified terms, the process of training a decision tree and\n",
"predicting the target features of query instances is as follows:\n",
"\n",
"1. Present a dataset containing of a number of training instances characterized by a number of descriptive features and a target feature\n",
"\n",
"2. Train the decision tree model by continuously splitting the target feature along the values of the descriptive features using a measure of information gain during the training process\n",
"\n",
"3. Grow the tree until we accomplish a stopping criteria create leaf nodes which represent the *predictions* we want to make for new query instances\n",
"\n",
"4. Show query instances to the tree and run down the tree until we arrive at leaf nodes\n",
"\n",
"Then we are essentially done!"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2nd degree coefficients:\n",
"zero power: 2.731441119315968\n",
"first power: -0.07208896238192342\n",
"second power: 0.0005051756404139333\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHFCAYAAADxOP3DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAADDiUlEQVR4nOzddXzU9R/A8deteyPWG4zuFKRLpBsVBCRE5UeYiCKgCAaIImALBqFIKKkg3d0hHYOxsQ0YrHv3/f3x5b7sVixuuw3eTx/38O5bn8/3xm3ve39KpyiKghBCCCHEY8rC3BUQQgghhDAnCYaEEEII8ViTYEgIIYQQjzUJhoQQQgjxWJNgSAghhBCPNQmGhBBCCPFYk2BICCGEEI81CYaEEEII8ViTYEgIIYQQjzUJhoQoRhYsWIBOp9MeVlZW+Pn58eKLLxISEpLn67Vt25a2bduavqJmsGPHDnQ6HTt27Ci0cw3HGR6Wlpa4u7vTo0cPjhw5kr+Kl0CGf4fXrl0zd1WEKBJW5q6AECKz+fPnU716dRISEti1axfTp09n586dnD59GkdHR3NXzywaNmzI/v37qVmzZqGXNW3aNNq1a0dKSgrHjx9n6tSptGnThhMnTlClSpVCL9/cunXrxv79+/H29jZ3VYQoEhIMCVEM1a5dm0aNGgHQrl070tLS+Pjjj1m9ejWDBg0yc+3Mw8XFhaZNmxZJWVWqVNHKatWqFW5ubgwdOpTff/+dqVOnFkkdDOLj43FwcCjSMt3d3XF3dy/SMoUwJ2kmE6IEMPxhvn79OgCJiYlMmDCBChUqYGNjg6+vL2PGjCEyMjLbayiKQpUqVejUqVOmfbGxsbi6ujJmzBjgQXPRkiVLmDRpEj4+Pri4uPD0009z4cKFTOf/+uuv1KtXDzs7O0qXLk2fPn04d+6c0THDhg3DycmJ8+fP06lTJxwdHfH29uazzz4D4MCBA7Rs2RJHR0eqVq3KwoULjc7PqqnryJEjPP/88wQEBGBvb09AQAADBgzQ3idTMQSm4eHhRtsvXbrEwIED8fDwwNbWlho1avDdd99lOv/MmTN07NgRBwcH3N3dGTNmDOvWrct0P23btqV27drs2rWL5s2b4+DgwPDhwwGIjo5m3LhxRj/zN998k7i4OKOy/vzzT5o0aYKrqysODg5UrFhRuwaAXq/nk08+oVq1atjb2+Pm5kbdunX56quvtGOyaybLy8/58uXLdO3aFScnJ/z9/Xn77bdJSkrK/ZsuRBGSYEiIEuDy5cuA+o1dURR69+7NzJkzGTx4MOvWrWPs2LEsXLiQp556Kts/ODqdjtdee43Nmzdz6dIlo32LFi0iOjpaC4YMJk6cyPXr1/n555+ZN28ely5dokePHqSlpWnHTJ8+nZdeeolatWqxcuVKvvrqK06dOkWzZs0ylZOSkkLfvn3p1q0ba9asoUuXLkyYMIGJEycydOhQhg8fzqpVq6hWrRrDhg3j6NGjOb4v165do1q1asyZM4eNGzcyY8YMQkNDady4MXfu3Mn1+/swgYGBAFStWlXbdvbsWRo3bsx///3Hl19+yT///EO3bt14/fXXjbJHoaGhtGnThgsXLvDDDz+waNEiYmJiePXVV7MsKzQ0lBdeeIGBAweyfv16Ro8eTXx8PG3atGHhwoW8/vrr/Pvvv4wfP54FCxbQs2dPFEUBYP/+/fTv35+KFSuydOlS1q1bx+TJk0lNTdWu//nnnzNlyhQGDBjAunXrWLZsGS+99FKOgTTk/efcs2dP2rdvz5o1axg+fDizZ89mxowZeXrfhSgyihCi2Jg/f74CKAcOHFBSUlKUmJgY5Z9//lHc3d0VZ2dnJSwsTNmwYYMCKJ9//rnRucuWLVMAZd68edq2Nm3aKG3atNFeR0dHK87Ozsobb7xhdG7NmjWVdu3aaa+3b9+uAErXrl2Njlu+fLkCKPv371cURVHu3bun2NvbZzouKChIsbW1VQYOHKhtGzp0qAIoK1as0LalpKQo7u7uCqAcO3ZM2x4REaFYWloqY8eOzVSn7du3Z/v+paamKrGxsYqjo6Py1Vdf5enc9MctW7ZMSUlJUeLj45W9e/cq1apVU2rWrKncu3dPO7ZTp06Kn5+fEhUVZXSNV199VbGzs1Pu3r2rKIqivPPOO4pOp1POnDljdFynTp0y1alNmzYKoGzdutXo2OnTpysWFhbK4cOHjbb/9ddfCqCsX79eURRFmTlzpgIokZGR2d5j9+7dlfr16+f4Phj+HQYGBiqKkr+f8/Lly42O7dq1q1KtWrUcyxXCXCQzJEQx1LRpU6ytrXF2dqZ79+54eXnx77//4unpybZt2wC1OSK95557DkdHR7Zu3ZrtdZ2dnXnxxRdZsGCB1ryybds2zp49m2WmomfPnkav69atCzxortu/fz8JCQmZ6uLv789TTz2VqS46nY6uXbtqr62srKhcuTLe3t40aNBA2166dGk8PDwe2twVGxvL+PHjqVy5MlZWVlhZWeHk5ERcXFym5pu86N+/P9bW1jg4ONCiRQuio6NZt24dbm5ugNpMuXXrVvr06YODgwOpqanao2vXriQmJnLgwAEAdu7cSe3atTN1/B4wYECWZZcqVYqnnnrKaNs///xD7dq1qV+/vlFZnTp1Mmpqa9y4MQD9+vVj+fLlWY5AfPLJJzl58iSjR49m48aNREdHP/T9yM/PuUePHkbb6tata/LmSyFMRYIhIYqhRYsWcfjwYY4fP87Nmzc5deoULVq0ACAiIgIrK6tMHVx1Oh1eXl5ERETkeO3XXnuNmJgYFi9eDMC3336Ln58fvXr1ynRsmTJljF7b2toCkJCQoNUFyHLUkY+PT6a6ODg4YGdnZ7TNxsaG0qVLZzrfxsaGxMTEHO9l4MCBfPvtt7z88sts3LiRQ4cOcfjwYdzd3bU65seMGTM4fPgwO3fuZNKkSYSHh9O7d2+tCTIiIoLU1FS++eYbrK2tjR6GYM/QTBcREYGnp2emMrLaBlm/l+Hh4Zw6dSpTWc7OziiKopXVunVrVq9eTWpqKkOGDMHPz4/atWuzZMkS7VoTJkxg5syZHDhwgC5dulCmTBnat2+f49QBpvg529raPvTnKYS5yGgyIYqhGjVqaJ12MypTpgypqancvn3bKCBSFIWwsDAtO5CdypUr06VLF7777ju6dOnC2rVrmTp1KpaWlnmupyFYCg0NzbTv5s2blC1bNs/XzK2oqCj++ecfPvzwQ9577z1te1JSEnfv3i3QtStWrKi9/61bt8be3p7333+fb775hnHjxlGqVCksLS0ZPHhwpn5WBhUqVADU9yhjx2uAsLCwLM/T6XSZtpUtWxZ7e3t+/fXXLM9J/z736tWLXr16kZSUxIEDB5g+fToDBw4kICCAZs2aYWVlxdixYxk7diyRkZFs2bKFiRMn0qlTJ27cuJHlyDVz/pyFKAqSGRKihGnfvj0Av//+u9H2FStWEBcXp+3PyRtvvMGpU6cYOnQolpaWvPLKK/mqS7NmzbC3t89Ul+DgYLZt25aruuSXTqdDURQtW2Xw888/G3XwNoV3332XypUr89lnnxETE4ODgwPt2rXj+PHj1K1bl0aNGmV6GAKINm3a8N9//3H27Fmjay5dujTX5Xfv3p0rV65QpkyZLMsKCAjIdI6trS1t2rTROi0fP3480zFubm48++yzjBkzhrt372Y7yaI5f85CFAXJDAlRwnTo0IFOnToxfvx4oqOjadGiBadOneLDDz+kQYMGDB48OFfXqFmzJtu3b+eFF17Aw8MjX3Vxc3Pjgw8+YOLEiQwZMoQBAwYQERHB1KlTsbOz48MPP8zXdXPDxcWF1q1b88UXX1C2bFkCAgLYuXMnv/zyi9a3x1Ssra2ZNm0a/fr146uvvuL999/nq6++omXLlrRq1YpRo0YREBBATEwMly9f5u+//9b6dr355pv8+uuvdOnShY8++ghPT0/++OMPzp8/D4CFxcO/k7755pusWLGC1q1b89Zbb1G3bl30ej1BQUFs2rSJt99+myZNmjB58mSCg4Np3749fn5+REZG8tVXX2FtbU2bNm0A6NGjhzaPlbu7O9evX2fOnDmUL18+2wklzflzFqIoSGZIiBJGp9OxevVqxo4dy/z58+natas2zH7btm2ZMiXZ6devH0C2Q7xza8KECfz888+cPHmS3r178+qrr1KrVi327dtX6LM1//HHH7Rr1453332Xvn37cuTIETZv3oyrq6vJy3ruuedo0qQJs2bNIioqipo1a3Ls2DFq167N+++/T8eOHXnppZf466+/jDIlPj4+7Ny5k6pVqzJy5EgGDRqEjY0NH330EUCuAjdHR0d2797NsGHDmDdvHt26daNfv358/fXX+Pn5aZmhJk2aEBYWxvjx4+nYsSMjRozA3t6ebdu2UatWLUCdxHPXrl2MHDmSDh068P7779O+fXt27tyJtbV1tnUw589ZiMKmU5T7E1QIIR4rjRo1QqfTcfjwYXNX5bE0YsQIlixZQkREBDY2NuaujhCPNWkmE+IxEh0dzX///cc///zD0aNHWbVqlbmr9Fj46KOP8PHxoWLFisTGxvLPP//w888/8/7770sgJEQxIMGQEI+RY8eO0a5dO8qUKcOHH35I7969zV2lx4K1tTVffPEFwcHBpKamUqVKFWbNmsUbb7xh7qoJIZBmMiGEEEI85qQDtRBCCCEeaxIMCSGEEOKxJsGQEEIIIR5r0oH6IfR6PTdv3sTZ2TnLafKFEEIIUfwoikJMTAw+Pj4PndxUgqGHuHnzJv7+/uauhhBCCCHy4caNG/j5+eV4jARDD+Hs7Ayob6aLi4uZayOEEEKI3IiOjsbf31/7O54TCYYewtA05uLiIsGQEEIIUcLkpouLdKAWQgghxGNNgiEhhBBCPNYkGBJCCCHEY036DJlIWloaKSkp5q6GECZhY2Pz0KGoQgjxqJBgqIAURSEsLIzIyEhzV0UIk7GwsKBChQqyoroQ4rEgwVABGQIhDw8PHBwcZGJGUeIZJhoNDQ2lXLly8m9aCPHIk2CoANLS0rRAqEyZMuaujhAm4+7uzs2bN0lNTcXa2trc1RFCiEIlnQIKwNBHyMHBwcw1EcK0DM1jaWlpZq6JEEIUPgmGTECaEcSjRv5NCyEeJxIMCSGEEOKxJsGQKHIBAQHMmTPH3NUwiWvXrqHT6Thx4gQAO3bsQKfTyehCIYQoQSQYegwNGzYMnU6HTqfDysqKcuXKMWrUKO7du2fuqhWaDRs2oNPpCAsLM9ru5eWFv7+/0bbg4GB0Oh2bNm0qkrql/3lYW1vj6elJhw4d+PXXX9Hr9Xm61oIFC3BzcyucigohxCNKgqHHVOfOnQkNDeXatWv8/PPP/P3334wePdrc1So0LVu2xMrKih07dmjbzp07R2JiItHR0Vy+fFnbvn37dqytrWnRokWR1S/9z+Pff/+lXbt2vPHGG3Tv3p3U1NQiq4cQomRITksmJU0m+jUVCYYeU7a2tnh5eeHn50fHjh3p37+/USYkLS2Nl156iQoVKmBvb0+1atX46quvjK4xbNgwevfuzcyZM/H29qZMmTKMGTPGaCbuW7du0aNHD+zt7alQoQKLFy/OVJegoCB69eqFk5MTLi4u9OvXj/DwcG3/lClTqF+/Pr/++ivlypXDycmJUaNGkZaWxueff46XlxceHh58+umn2d6vk5MTjRs3NgqGduzYQcuWLWnZsmWm7U8++SSOjo5s2LCBli1b4ubmRpkyZejevTtXrlzJ9fuckJBAt27daNq0KXfv3s32OMPPw9fXl4YNGzJx4kTWrFnDv//+y4IFC7TjZs2aRZ06dXB0dMTf35/Ro0cTGxur1fvFF18kKipKyzRNmTIFgN9//51GjRrh7OyMl5cXAwcO5NatW7m+DyFE8ZGqT6X297VpOK8heiVv2WORNZlnyMQURSE+Jb7Iy3Wwzv+Ej1evXmXDhg1G88no9Xr8/PxYvnw5ZcuWZd++fYwYMQJvb2/69eunHbd9+3a8vb3Zvn07ly9fpn///tSvX59XXnkFUAOmGzdusG3bNmxsbHj99deN/ggrikLv3r1xdHRk586dpKamMnr0aPr3728UoFy5coV///2XDRs2cOXKFZ599lkCAwOpWrUqO3fuZN++fQwfPpz27dvTtGnTLO+zXbt2/PXXX0Z1b9u2LXq9nu3bt/Pyyy9r2wcNGgRAXFwcY8eOpU6dOsTFxTF58mT69OnDiRMnHrpcRVRUFN27d8fOzo6tW7fi6OiYy5+I6qmnnqJevXqsXLlSq5uFhQVff/01AQEBBAYGMnr0aN59912+//57mjdvzpw5c5g8eTIXLlwA1CAQIDk5mY8//phq1apx69Yt3nrrLYYNG8b69evzVCchhPkFRQVx6e4lAG7H3cbTydPMNSr5JBgysfiUeJymOxV5ubETYnG0yf0f23/++QcnJyfS0tJITEwE1KyDgbW1NVOnTtVeV6hQgX379rF8+XKjYKhUqVJ8++23WFpaUr16dbp168bWrVt55ZVXuHjxIv/++y8HDhygSZMmAPzyyy/UqFFDO3/Lli2cOnWKwMBAre/Ob7/9Rq1atTh8+DCNGzcG1ODs119/xdnZmZo1a9KuXTsuXLjA+vXrsbCwoFq1asyYMYMdO3ZkGwy1bduWadOmERoaire3Nzt37uSdd95Br9drWa8bN24QGBhIu3btAHjmmWeMrvHLL7/g4eHB2bNnqV27drbvb3h4OP3796dSpUosWbIk38taVK9enVOnTmmv33zzTe15hQoV+Pjjjxk1ahTff/89NjY2uLq6otPp8PLyMrrO8OHDtecVK1bk66+/5sknnyQ2NlYLmIQQJUNIdMiD5zEhEgyZgDSTPabatWvHiRMnOHjwIK+99hqdOnXitddeMzrmxx9/pFGjRri7u+Pk5MRPP/1EUFCQ0TG1atXC0tJSe+3t7a1lfs6dO4eVlRWNGjXS9levXt2og++5c+fw9/c36sRcs2ZN3NzcOHfunLYtICAAZ2dn7bWnpyc1a9Y0ys54enrm2PTTokULbGxs2LFjB2fPniUhIYGGDRvyxBNPEB0dzaVLl9i+fTu2trY0b94cUDNSAwcOpGLFiri4uFChQgWATO9DRk8//TQVK1Zk+fLlBVrfS1EUo4zf9u3b6dChA76+vjg7OzNkyBAiIiKIi4vL8TrHjx+nV69elC9fHmdnZ9q2bZur+xBCFD/B0cFZPhf5J5khE3OwdiB2QqxZys0LR0dHKleuDMDXX39Nu3btmDp1Kh9//DEAy5cv56233uLLL7+kWbNmODs788UXX3Dw4EGj62RcqkGn02kjoBRF0bZlJ+Mf++y2Z1VOTmVnxcHBgSeffJLt27dz9+5dWrZsqQVyzZs3Z/v27ezfv59mzZphZ2cHQI8ePfD39+enn37Cx8cHvV5P7dq1SU5OzrYcgG7durFixQrOnj1LnTp1cjw2J+fOndMCsOvXr9O1a1dGjhzJxx9/TOnSpdmzZw8vvfSSUT+tjOLi4ujYsSMdO3bk999/x93dnaCgIDp16vTQ+xBCFD8hMekyQ+myRCL/ik1maNeuXfTo0QMfHx90Oh2rV6822m/oEJrx8cUXX2R7zQULFmR5jqFZqDDodDocbRyL/FHQGYM//PBDZs6cyc2bNwHYvXs3zZs3Z/To0TRo0IDKlSvnqeMwQI0aNUhNTeXIkSPatgsXLhjNwVOzZk2CgoK4ceOGtu3s2bNERUUZNaeZSrt27dixYwc7duzQsiMAbdq00bYbmsgiIiI4d+4c77//Pu3bt6dGjRq5nn7gs88+Y+jQobRv356zZ8/mq67btm3j9OnTWlPdkSNHSE1N5csvv6Rp06ZUrVpV+3kZ2NjYZFpC4/z589y5c4fPPvuMVq1aUb16dek8LUQJJpkh0ys2wVBcXBz16tXj22+/zXJ/aGio0ePXX39Fp9Nl6tORkYuLS6ZzDd/6xQNt27alVq1aTJs2DYDKlStz5MgRNm7cyMWLF/nggw84fPhwnq5ZrVo1OnfuzCuvvMLBgwc5evQoL7/8Mvb29toxTz/9NHXr1mXQoEEcO3aMQ4cOMWTIENq0aWPUvGYq7dq149KlS2zYsIE2bdpo29u0acM///zDtWvXtGCoVKlSlClThnnz5nH58mW2bdvG2LFjc13WzJkzGTRoEE899RTnz5/P8dikpCTCwsIICQnh2LFjTJs2jV69etG9e3eGDBkCQKVKlUhNTeWbb77h6tWr/Pbbb/z4449G1wkICCA2NpatW7dy584d4uPjKVeuHDY2Ntp5a9eu1TKAQoiSxygzFCOZIVMoNsFQly5d+OSTT+jbt2+W+728vIwea9asoV27dlSsWDHH6xo6k6Z/iKyNHTuWn376iRs3bjBy5Ej69u1L//79adKkCREREfmah2j+/Pn4+/vTpk0b+vbty4gRI/Dw8ND2G7KApUqVonXr1lpfm2XLlpny1jTNmjXD1tYWgCeeeELb3rhxY9LS0rC3t9c6e1tYWLB06VKOHj1K7dq1eeutt3LMRGZl9uzZ9OvXj6eeeoqLFy9me9yGDRvw9vYmICCAzp07s337dr7++mvWrFmjNeXVr1+fWbNmMWPGDGrXrs3ixYuZPn260XWaN2/OyJEj6d+/P+7u7nz++ee4u7uzYMEC/vzzT2rWrMlnn33GzJkz83QfQojiQzJDpqdTDB07ihGdTseqVavo3bt3lvvDw8Px8/Nj4cKFDBw4MNvrLFiwgJdffhlfX1/S0tKoX78+H3/8MQ0aNMj2nKSkJJKSkrTX0dHR+Pv7ExUVhYuLi9GxiYmJBAYGUqFCBck2iUeK/NsWovgqN7scN6LVrgXVy1bn3JhzDznj8RQdHY2rq2uWf78zKjaZobxYuHAhzs7O2WaRDKpXr86CBQtYu3YtS5Yswc7OjhYtWnDp0qVsz5k+fTqurq7aI+NSDUIIIYS5pOnTCI0N1V5LZsg0SmQw9OuvvzJo0KCHfmNt2rQpL7zwAvXq1aNVq1YsX76cqlWr8s0332R7zoQJE4iKitIe6Tv2CiGEEOZ0K+4WqfpUdKiDZmKTY4lOijZzrUq+Eje0fvfu3Vy4cCFffUosLCxo3LhxjpkhW1tbrU+JEEIIUZwYOkz7OPsQlxJHZGIkwdHB1HSvaeaalWwlLjP0yy+/8MQTT1CvXr08n6soCidOnMDb27sQaiaEEEIULkOzmK+LL77OvoDMNWQKxSYzFBsba7RyeGBgICdOnKB06dKUK1cOUDtD/fnnn3z55ZdZXmPIkCH4+vpqI2ymTp1K06ZNqVKlCtHR0Xz99decOHGC7777rvBvSAghhDAxQ+Dj5+JHXHIcZ26fkX5DJlBsgqEjR45o87sA2nwuQ4cO1VbtXrp0KYqiMGDAgCyvERQUZLQ8Q2RkJCNGjCAsLAxXV1caNGjArl27ePLJJwvvRoQQQohComWGnH2JS1aX4ZG5hgqu2ARDbdu25WGj/EeMGMGIESOy3Z9+lXNQ53iZPXu2KaonhBBCmJ0h8DFkhkCayUyh2ARDQgghxOPiYPBBQmJCsLey56kKT2FrlfPAnfiUeLYFbuNU+ClADYZik9V1MINjpJmsoCQYEkIIIYrQ4ZDDNP2lqfb6wzYfMqXtlBzPeXfzu3x3+EF/1/TBkGSGCq7EjSYTxde1a9fQ6XScOHHC3FUpdgICApgzZ465qyGEKAYM2Z3sXmflZPhJAGqUrcGw+sNo7t9cG00mHagLToKhx9D06dNp3Lgxzs7OeHh40Lt3by5cuFAkZbdt2xadTodOp8PW1hZfX1969OjBypUri6T8wpT+3tI/UlNTOXz4sFF/N8OabEKIx48hePFw9DB6nZtzfurxE/N7zcfKwgo/Fz8AbsffJik1KafTxUNIMPQY2rlzJ2PGjOHAgQNs3ryZ1NRUOnbsSFxcXJGU/8orrxAaGsrly5dZsWIFNWvW5Pnnn8+xc7ypJCcnF+r1DfeW/mFlZYW7uzsODg6FWrYQomQwdIJu4tvE6HV29IqemzE3AbQACKC0fWlsLdW+Rob9In8kGHoMbdiwgWHDhlGrVi3q1avH/PnzCQoK4ujRo9oxAQEBTJs2jeHDh+Ps7Ey5cuWYN2+e0XUOHTpEgwYNsLOzo1GjRhw/fjxX5Ts4OODl5YW/vz9NmzZlxowZzJ07l59++oktW7Zox4WEhNC/f39KlSpFmTJl6NWrF9euXdP2p6am8vrrr+Pm5kaZMmUYP348Q4cONVrgt23btrz66quMHTuWsmXL0qFDBwDOnj1L165dcXJywtPTk8GDB3Pnzh3tPEVR+Pzzz6lYsSL29vbUq1ePv/76K9f3lv5heD8NzWQBAQEA9OnTB51Op70WQjweDFkeQzAUFhtGqj412+PvxN8hOU39Iuft/GDSYJ1Oh6/L/YkXZXh9gUgwZGqKAnFxRf94yLQEOYmKigKgdOnSRtu//PJLLcgZPXo0o0aN4vz58wDExcXRvXt3qlWrxtGjR5kyZQrjxo3Ldx2GDh1KqVKltOay+Ph42rVrh5OTE7t27WLPnj04OTnRuXNnLbszY8YMFi9ezPz589m7dy/R0dFZNj0tXLgQKysr9u7dy9y5cwkNDaVNmzbUr1+fI0eOsGHDBsLDw+nXr592zvvvv8/8+fP54YcfOHPmDG+99RYvvPACO3fuzPc9Ghw+fBiA+fPnExoaqr0WQjweDIFLA+8GWFlYoVf0hMWGZX/8/Q7Sno6e2FjaGO0zZIqk31DByGgyU4uPByenoi83NhYcHfN8mqIojB07lpYtW1K7dm2jfV27dmX06NEAjB8/ntmzZ7Njxw6qV6/O4sWLSUtL49dff8XBwYFatWoRHBzMqFGj8lV9CwsLqlatqmV+li5dioWFBT///DM6nbog4fz583Fzc2PHjh107NiRb775hgkTJtCnTx8Avv32W9avX5/p2pUrV+bzzz/XXk+ePJmGDRsybdo0bduvv/6Kv78/Fy9exNfXl1mzZrFt2zaaNWsGQMWKFdmzZw9z586lTZs22d7H999/z88//6y9/t///pdpxnR3d3cA3NzctMyREOLxYQhc/F388XH2ISgqiODoYKMmsKyON2SB0pMlOUxDgqHH3KuvvsqpU6fYs2dPpn1169bVnut0Ory8vLh16xYA586do169ekb9YAyBQ34piqIFPkePHuXy5cs4OzsbHZOYmMiVK1eIiooiPDzcaDZxS0tLnnjiCfR6vdE5jRo1Mnp99OhRtm/fjlMWQavh2omJiVqTmkFycjINGjTI8R4GDRrEpEmTtNdubm45Hi+EeLwkpCRwN+EuoGZ1/Fz8CIoKyjGYST/RYkaSGTINCYZMzcFBzdKYo9w8eu2111i7di27du3Czy/zh8za2trotU6n0wKNh80WnldpaWlcunSJxo0bA6DX63niiSdYvHhxpmMNmRVDndLLql6OGTJmer2eHj16MGPGjEzHent7899//wGwbt06fH2Nv4nZ2uY8MZqrqyuVK1fO8RghxOPLENjYW9njZueWq+Hx6ZfgyEjLDEmfoQKRYMjUdLp8NVcVJUVReO2111i1ahU7duygQoUKeb5GzZo1+e2330hISMDe3h6AAwcO5LtOCxcu5N69ezzzzDMANGzYkGXLluHh4YGLi0uW53h6enLo0CFatWoFqAHV8ePHqV+/fo5lNWzYkBUrVhAQEICVVeaPQM2aNbG1tSUoKCjHJrGCsLa2Ji0trVCuLYQovtIvtKrT6bTMTk7BjGSGCp90oH4MjRkzht9//50//vgDZ2dnwsLCCAsLIyEhIdfXGDhwIBYWFrz00kucPXuW9evXM3PmzFydGx8fT1hYGMHBwRw8eJDx48czcuRIRo0apS3WO2jQIMqWLUuvXr3YvXs3gYGB7Ny5kzfeeIPgYPVD/9prrzF9+nTWrFnDhQsXeOONN7h3716mbFFW93/37l0GDBjAoUOHuHr1Kps2bWL48OGkpaXh7OzMuHHjeOutt1i4cCFXrlzh+PHjfPfddyxcuDDX71FOAgIC2Lp1K2FhYdy7d88k1xRCFH+GwMbQ/yc3mR1DAJVlZkhGk5mEBEOPoR9++IGoqCjatm2Lt7e39li2bFmur+Hk5MTff//N2bNnadCgAZMmTcqy2SkrP/30E97e3lSqVIk+ffpw9uxZli1bxvfff68d4+DgwK5duyhXrhx9+/alRo0aDB8+nISEBC1TNH78eAYMGMCQIUNo1qwZTk5OdOrUCTs7uxzL9/HxYe/evaSlpdGpUydq167NG2+8gaurKxYW6kfi448/ZvLkyUyfPp0aNWrQqVMn/v7773xl0bLy5ZdfsnnzZvz9/R/aD0kI8egwZHAMGZ3cZHYynmOgKAppEWkQDCFnQrgTcSer04u3yEiYPx8y9PUscorIUVRUlAIoUVFRmfYlJCQoZ8+eVRISEsxQM5FRWlqaUrVqVeX99983d1VKPPm3LUTheH396wpTUMZvHq8oiqLsvr5bYQpKpa8qZXuOy3QXhSko526fUxRFUW7duqW8++67SoUKFRTA6FGnTh1l7ty5SlJSUpHcT4G99pqigKIMGmTyS+f09zsjyQyJEuv69ev89NNPXLx4kdOnTzNq1CgCAwMZOHCguasmhBBZMqwwn1VmSMliAEhMUgzRSdEA+Dj5MGvWLCpVqsTnn39OYGAg1tbWWJa2BFf1+NOnT/O///2PatWqsX///iK4owI4eRK+u7/47IsvmrUqEgyJEsvCwoIFCxbQuHFjWrRowenTp9myZQs1atQwd9WEECJLGfv/+Dj7AJCUlqQNuTc6/n5fIGfFmSHPD+Htt98mJiaGBg0a8Ndff3H37l0aftYQ3oKFexcyZ84cvL29uXbtGq1bt+bbb78tojvLI0WBV19Vm8eeew7atzdrdSQYEiWWv78/e/fuJSoqiujoaPbt20fr1q3NXS0hhMhWxv4/NpY2OS7YGhwdDPGQ8msKa9aswcbGhu+//54jR47wzDPP4OTkpF0rxiqGN954gwsXLtCvXz9SU1N57bXXMk38WiwsXgx79qjTwhSD+snQeiGEEKIIpOpTtWU30s8m7evsy624W8zYO4MKbsaDNE5cOwG/QWJoIu7u7qxbt06bjy39+QBLzywlITWBUY1GsXTpUmrUqMHUqVMZN24cd1Pv8un4Tx9cN+wEK86uQK+oHZd1Oh19qvfhCZ8nCuPWjUVGgmH5pvffB3//wi/zISQYEkIIIYpAeGw4aUoaljpLPB09te2VSlfieNhxlvy3xPiENGAxEAp2rnZs27Yt07JJhvMB9gTtYU/QHpxtnPlfo//x4Ycfcu3ONRZ+t5BpE6fRrVU3mjdvDsDwNcM5Hma8uPaq86s4M/qMSe85S5MnQ3g4VKsGY8cWfnm5IMGQEEIIUQQM/X+8nb2xtLDUtn/61KdUcKugrUxvsPun3Ry7egxrO2tW/r0yy0AI4MX6LxKZGMm6S+s4cvMIl+9eBtRsz9OvPM3CnQvhP+jXrx/Hjx/H3d1dO+bF+i9iqbPk5+M/c+XuFaNlkQrFsWMPOk1/9x08ZFb/oiLBkBBCCFEEspsvqGqZqnze4XOjbStXruSrlV8BsOT3JXRp1SXb67rauTKl7RRcbF04cvOI0QSMN2NvQg8gDEJCQhgxYgQLly4kJjkGgK+7fI2NpQ0/H/+ZpLQkIhIiKOtQ1hS3m5leD6NHq/9//nmzd5pOTzpQCyGEEEUgp5mk0wsLC2PEiBGAOrmsYZmih8lqnbPg6GCwBZ4DK2srVq9ezcIl6kz6LrYuONk4YWNpg7uDe6ZzTe6XX+DgQXB2LhadptOTYEgIIYQoAtllhtJTFIWXX36ZiIgI6tevz0cffZTr62e1zpn23BOefflZAKa+NxUSjeuhnRtdSMt63LkD772nPv/oI/DxKZxy8kmCIWFSU6ZMeehCqUK1YMEC3NzczF0NIUQR0dYlyyEztHz5ctatW4eNjQ2//fYbNjY2ub6+tk5ZdIg2gWP6TE+bwW2oUqUKEeERsMu4HoZzCy0z9N57cPcu1K2rzi9UzEgw9BjatWsXPXr0wMfHB51Ox+rVqzMdoygKU6ZMwcfHB3t7e9q2bcuZM8ajDLI7N6927NiBTqdDp9NhYWGBq6srDRo04N133yU0NLTA1zen9PeW/vH+++/Tv39/Ll68qB0rgaQQj7aHZYaio6N56623AJg0aVK2Haazk34Cx4iECMA403Mr+RZz5sxRXxwEtyQ3bZ+fc+asksns3682kQF8/z1YFb/uyhIMPYbi4uKoV69ejjOTfv7558yaNYtvv/2Ww4cP4+XlRYcOHYiJiSm0el24cIGbN29y+PBhxo8fz5YtW6hduzanT58utDJBDfxSU1MLtYwLFy4QGhqqPd577z3s7e3x8PAo1HKFEMVHxhXrM5oyZQqhoaFUqlSJd999N8/XzziBY6o+ldDYB18og6OD6dKlCz51fCANLvx1QdtXaJmh1FS10zSoS260aGHa65uIBEOPoS5duvDJJ5/Qt2/fLPcrisKcOXOYNGkSffv2pXbt2ixcuJD4+Hj++OMPAAICAgDo06cPOp1Oe23w22+/ERAQgKurK88//3yugigPDw+8vLyoWrUqzz//PHv37sXd3Z1Ro0YZHTd//nxq1KiBnZ0d1atXN1rtHmDfvn3Ur18fOzs7GjVqxOrVq9HpdJw4cQJ4kK3ZuHEjjRo1wtbWlt27d6MoCp9//jkVK1bE3t6eevXq8ddffxld++zZs3Tt2hUnJyc8PT0ZPHgwd+48fKVow70ZHk5OTkbNZAsWLGDq1KmcPHlSyx4tWLDgodcVQpQMiqLkmBm6dOkS33zzDQDffvstdnZ2+Sonfd+f8NhwbVJFUIMxnU5HxecqAnB602nOnj1rfJ6pM0Pffw8nTkCpUjBjhmmvbUISDJmYoijExcUV+SOrBf7yKzAwkLCwMDp27Khts7W1pU2bNuzbtw+Aw4cPA2pgEhoaqr0GuHLlCqtXr+aff/7hn3/+YefOnXz22Wd5roe9vT0jR45k79693Lp1C4CffvqJSZMm8emnn3Lu3DmmTZvGBx98wMKF6uiImJgYevToQZ06dTh27Bgff/wx48ePz/L67777LtOnT+fcuXPUrVuX999/n/nz5/PDDz9w5swZ3nrrLV544QV27twJQGhoKG3atKF+/focOXKEDRs2EB4eTr9+/fJ8bxn179+ft99+m1q1amnZo/79+xf4ukKI4uFe4j0SUxOBB81Z6U2aNInU1FQ6d+5M586d811O+hFlGQMbQ5NZvGc81FD/Xhl+N2c1Eq3AQkPhgw/U59Ong7u76a5tYsWv4a6Ei4+Px8nJqcjLjY2NxdHR0STXCgtTp4v39PQ02u7p6cn169cBcL//j9rNzQ0vLy+j4/R6PQsWLMDZ2RmAwYMHs3XrVj799FPyqnr16gBcu3YNDw8PPv74Y7788kstq1WhQgXOnj3L3LlzGTp0KIsXL0an0/HTTz9hZ2dHzZo1CQkJ4ZVXXsl07Y8++ogOHToAatPhrFmz2LZtG82aNQOgYsWK7Nmzh7lz59KmTRt++OEHGjZsyLRp07Rr/Prrr/j7+3Px4kWqVq2a7X34+Rl/EzS8jwb29vY4OTlhZWWV6f0UQpR8hkCkrENZ7KyMsz6HDh3izz//RKfTMaOA2RNDhic4Ohh3R/X3tLONMzHJMVqgExwdDK2Ac/DHH3/w0UcfFc5osnHjIDoannwSXn7ZdNctBBIMiWxlnIU0tzOTBgQEaIEQgLe3t5bZyStDxkun03H79m1u3LjBSy+9ZBTcpKam4urqCqh9c+rWrWuUYn7yySezvHajRo2052fPniUxMVELjgySk5Np0KABAEePHmX79u1ZBrtXrlzJMRjavXu30XtSqlSpbI8VQjx6DIFIViPJJk6cCMCQIUOoW7dugcoxXD8kJkTrP9TYtzHbArcRkRBBdFI0t+JugQ+0eaoNO7ftZObMmUz7Uv2SF5UURWxyLE42BfxSv307/PEH6HRqU5ml5cPPMSMJhkzMwcGB2NhYs5RrKobMRFhYGN7e3tr2W7duZcoWZcXa2trotU6nQ6/XZ3N0zs6dOweoAZbhGj/99BNNmjQxOs7y/gctq4AtuybE9Jk0w7XXrVuHr6/xLyvb+9PF6/V6evTokeU3t/TvU1YqVKggw+iFeIwZmqwy9hfau3cvW7duxcrKiilTphS4HKPM0P2JFOt41GHfjX0kpiZy5OYRQO1sPXnSZNpva88vv/zClClTtAxSSHQI1cpWy38lkpMfdJoePRqeKILFXwuo2PQZethw72HDhmUanty0adOHXnfFihXUrFkTW1tbatasyapVqwrpDlQ6nQ5HR8cif5hyLZkKFSrg5eXF5s2btW3Jycns3LlTW+QP1KAnLS3NZOVmlJCQwLx582jdujXu7u54enri6+vL1atXqVy5stGjQgV1pefq1atz6tQpkpKStOscOXLkoWUZ/o0EBQVlurb//RWVGzZsyJkzZwgICMh0jCmaKG1sbAr1/RRCmE92maGpU6cC8OKLL2YaiJIf2lxDMSFG8xoZgqSDwQe1be3ateOJJ54gMTGRX375xXQjymbPhvPnwcMDPvmkYNcqIsUmGMrNcO/OnTsbDU9ev359jtfcv38//fv3Z/DgwZw8eZLBgwfTr18/Dh48aOrqlyixsbGcOHFCG10VGBjIiRMnCAoKAtSA7s0332TatGmsWrWK//77j2HDhuHg4MDAgQO16wQEBLB161bCwsK4d+9eget169YtwsLCuHTpEkuXLqVFixbcuXOHH374QTtmypQpTJ8+na+++oqLFy9y+vRp5s+fz6xZswAYOHAger2eESNGcO7cOTZu3MjMmTO1+8qOs7Mz48aN46233mLhwoVcuXKF48eP891332mds8eMGcPdu3cZMGAAhw4d4urVq2zatInhw4ebJIgJCAjQfhZ37twxCuiEECWboS9O+szQ/v372bx5M1ZWVkyYMMEk5aTPDKUfvWYIwg6GHNS26XQ6Xr0/AeL333+Pr9ODQCrfAgPhfoDHF19AScmIK8UQoKxatcpo29ChQ5VevXrl6Tr9+vVTOnfubLStU6dOyvPPP5/ra0RFRSmAEhUVlWlfQkKCcvbsWSUhISFP9TK37du3K0Cmx9ChQ7Vj9Hq98uGHHypeXl6Kra2t0rp1a+X06dNG11m7dq1SuXJlxcrKSilfvryiKIry4YcfKvXq1TM6bvbs2dr+h9VHp9Mpzs7OSr169ZR33nlHCQ0NzXT84sWLlfr16ys2NjZKqVKllNatWysrV67U9u/du1epW7euYmNjozzxxBPKH3/8oQDK+fPnjcq7d++e0XX1er3y1VdfKdWqVVOsra0Vd3d3pVOnTsrOnTu1Yy5evKj06dNHcXNzU+zt7ZXq1asrb775pqLX63O8t4xlKYqizJ8/X3F1ddVeJyYmKs8884zi5uamAMr8+fOzfc8KW0n9ty1EcdX5984KU1B+OfaLtq1nz54KoAwfPtxk5UQnRitMQWEKiucXngpTUHZe26kMWjFIYQqK10wvhSkoz/+l/h2Mj49XypQpowBKu/faKUxB+XTXp/krXK9XlM6dFQUUpV079bUZ5fT3O6MSFQy5uroq7u7uSpUqVZSXX35ZCQ8Pz/E6/v7+yqxZs4y2zZo1SylXrly25yQmJipRUVHa48aNG49cMPS4+f333xVra2slPj7e3FUpMeTfthD5E5ccp7y85mXl30v/Gm2v830dhSkoGy9vVBRFUc6dO6d9ATR8UTMVl+kuWkDEFJQrd68o4zePN9o2buM47fjx48crgFKhYQWFKSij/xmtKIqirD63Wvnf3/9TElMSc1fwsmVqIGRjoygXLpj0nvIjL8FQsWkme5guXbqwePFitm3bxpdffsnhw4d56qmncmxKCAsLy3J4uGHoeFamT5+Oq6ur9jD0FxElx6JFi9izZw+BgYGsXr2a8ePH069fP+zt7c1dNSHEI279pfX8fPxnJm+fbLQ9Y5+hL++v2t6zZ0+qVStAZ+Us1PZ4sIyHq60rvs6+RtsAannU0p6PHDkSnU5H4LFAuAfBMWpdJ22bxNyjc9kauPXhhUZGwhtvqM8nTYIcRtcWRyVmNFn6Cehq165No0aNKF++POvWrct2JmXI+/DwCRMmMHbsWO11dHS0BEQlTFhYGJMnT9ZGwz333HP5muNICCHyKihK7Xt5I/qGti0+JZ57iWq/Sj8XP8LCwli0aBEA77zzjsnr8Odzf7ItcBuKovCEzxPYWtnyfO3nKWVXirsJdyllX4rOlR9M7BgQEED79u3ZsmULnICQmiHG9xJ1I6tijE2cCGFhUK0aZDPRbXFWYoKhjLy9vSlfvjyXLl3K9hgvL69MWaCHDQ+3tbXVhlKLkundd9/N17o+QghRUIYMUHhsOClpKVhbWmudpx2tHXGxdWH2j7NJTk6madOmtCiEtbp8nH14oe4LRtusLKzoVrVbtue8+OKLWjB0o+sNopOiiUmOMbqnbO3fDz/+qD6fOxdK4N/QEtNMllFERAQ3btzIcX6XZs2aGQ0PB9i0aZPR8HAhhBDCVAwjsRQUbZHU9HMMpaSkMHfuXADeMDQrFQN9+vTBxdUFouDWmVtci7ym7ctxdFlKCvzvf6Ao6kKsbdoUfmULQbEJhnIa7h0bG8u4cePYv38/165dY8eOHfTo0YOyZcvSp08f7RpDhgwxGp74xhtvsGnTJmbMmMH58+eZMWMGW7Zs4c033zRp3RUTrgsmRHEg/6aFyJ/0WRSj5S9Q5wD666+/tCb8Z555xix1zIq9vT0DB9yfOuU4HA55sN5kjpmhWbPg9GkoW1YdSl9CFZtg6MiRIzRo0EBb+mDs2LE0aNCAyZMnY2lpyenTp+nVqxdVq1Zl6NChVK1alf379xstcRAUFERoaKj2unnz5ixdupT58+dTt25dFixYwLJlyzLNXpxfhpmW4+PjTXI9IYqL5ORk4MHM3kKI3Em/tpfhefo5hgwr048cOTLTbP3mNnToUPXJedhzZY+2PdvM0NWrD+YU+vJLKFOmkGtYeIpNn6G2bdvm+G1048aND73Gjh07Mm179tlnefbZZwtStWxZWlri5uamrbvl4OBg0pmghTAHvV7P7du3cXBwwMqq2PyKEKLY0yt6o8AhY2bI6pYVBw4cwNramhEjRpiljjlp0qQJtmVtSbqTxLYN26Ccuj3LzJCiqEttJCRAu3YweHDRVtbE5DddARnW8crvQqRCFEcWFhaUK1dOgnsh8uB23G1S9anaa0NgZPj/lS1XAOjdu7f2t6M40el0VGpdibMrzxK0N0gLhqKToolJisHZ9kFLDMuXw8aNYGOjdp4u4b8rJBgqIJ1Oh7e3Nx4eHqSkpJi7OkKYhI2NDRYWxaYVXYgSIWMGxSgYSoEjG9V1El9++eUir1tuNe7UmLMrz8IlIB64vwZ4SEwI1W2rqy9K+JxCWZFgyEQsLS2lf4UQQjzGMvatMWomOwdx0XGUL1+ep59+2hzVy5V6deqBJxAOnAPuLzgfEh1C9bL3g6EJEyA8vMTOKZQV+eonhBBCmIAh+PFw9ADUACJVn0pYbBgcU48ZPnx4sc66+rr4gmGy6rMP7kXLej0Ccwplpfj+RIQQQogSxDBqrImvOmI5JCaE0JhQ9Hf0cE3ti/fiiy+asYYP5+fiBzXvvwiEBq7qCO+QmBBIToZXXlH3leA5hbIiwZAQQghhAoY1vRr5NAIgOS2Zk+En4bi6v3PnzsV+eSdfZ18og9pUpgfrS+rw/+DoYJg+Hc6cAXf3Ej2nUFYkGBJCCCFMwJAZquBWAU9Hddmnfdf2wQl1f3HuOG3g7eyNDh3UUF9f238NAItz58GwxuM335ToOYWyIsGQEEIIYQKGfjV+Ln5q3xtg/fr1EAu2rrZ0797dnNXLFRtLG7Wf0P2msvMHz6OLh1d+OKQuvdGjB/TrZ95KFgIJhoQQQogCUhTFaNkNPxc/AM5sOgNAnY51it2M09nxc/EDD3DxdSE1JZUOG6He1Thwdobvvy/xcwplRYIhIYQQooCik6KJS4kD1H43vs6+EAepF9RJGNv2amvG2uWNIatVrXk1AEqdUrenTv8U/PzMVa1CJcGQEEIIUUCGOYbc7NxwtHGkZbmWcBbQA17Qp3WfHM8vTlqVawVA7569AdiswDZ/CBlQ/Jv58kuCISGEEKKA0vcXAhhYZyCNItRRZR++9iHN/ZubrW55Na75OCLejeBdvR+lgbvAsMYQHHvT3FUrNBIMCSGEEAVkGEnm66w2MV27do0jB46g0+l4Zegr5qxavpSOTcNq7Fi63H99IzyH1esfARIMCSGEEAWUMTP0xx9/ANCuXTt8fX3NVq98e/NNiIige7n7q7VezGb1+keEBENCCCFEARmyJr7OviiKwuLFiwEYNGiQOauVP+vWwR9/gIUFnebPR2ehg9tw5sIZc9es0EgwJIQQQhRQ+szQyZMnOXv2LLa2tjzzzDNmrlkexcTAqFHq87feotRTT1GpfiUAju8+bsaKFS4JhoQQQogC0jJDLr5aVqh79+64urqas1p5N3Ei3LgBFSvCRx8B0OypZgAEHgg0Z80KlQRDQgghRAEZMkPejt4sWbIEgBdeeMGcVcq7ffvgu+/U5/PmgYMDAF27dQUg8kIkMTEx5qpdoZJgSAghhCiAxNRE7sTfAeD6yeuEhITg5uZGly5dHnJmMZKQoK5ErygwfDi0b6/tala/GZQG0mDjpo3mq2MhkmBICCGEKICbMer8O3ZWdmxYswGAZ555BltbW3NWK28mT4aLF8HHB7780miXj7MPVFWfr1izwgyVK3wSDAkhhBAFYJhjyMfRh1WrVgHw3HPPmbNKeXPgAMyapT6fNw/c3Ix2W1taU6peKQA2b9iMXq8v4goWPgmGhBBCiAIw9BdyCnXi1q1blC5dmqeeesrMtcqlxES1eUyvhyFDoFu3LA8LqBMA1hBxO4LTp08XbR2LgARDQgghRAEYRpIlnEwAoHfv3iVmhXqmTIHz58HbG+bMyfawcmXKQYD6fNOmTUVRsyIlwZAQQghRAMHRwaCHm4fUvkMlpons0CH44gv1+dy5UKpUtof6OvuCOt2QBENCCCGEMBYSEwLXIe5eHKVKlaJ9upFYxVb65rFBg6BHjxwP93Px04Kh3bt3Ex8fXwSVLDoSDAkhhBAFEBwdDGfV5yWmieyjj+DsWfD0hK++eujhvi6+UBZsS9uSlJTE7t27i6CSRUeCISGEEKIAgiMfBEP9+vUzb2Vy48gR+Pxz9fmPP0KZMg89xc/FD3RgV80OePSayiQYEkIIIfIpTZ9G6JlQiANXN9fi30SWlKQ2j6WlwYAB0Lt3rk7zdfZVTy+fBEgwJIQQQoj7bsXdIu2/NKCENJF98gn89x94eMDXX+f6NF8XNRhKLJeITqfjv//+4+bNm4VVyyInwZAQQgiRTzeibsA59Xn/fv3NW5mHOXYMpk9Xn3//PZQtm+tTnWyccLV1BQeoXb82AJs3by6MWpqFBENCCCFEPm3bvQ1iwdLesng3kSUnw7BhavNYv37wzDN5voSfix8AtZupwdCj1FRWbIKhXbt20aNHD3x8fNDpdKxevVrbl5KSwvjx46lTpw6Ojo74+PgwZMiQh6boFixYgE6ny/RITEws5LsRQgjxONiybgsA3g29sbGxMXNtcjB1Kpw+rWaDvv02X5cwNJWVb1geUDNDj8rSHMUmGIqLi6NevXp8m8UPKT4+nmPHjvHBBx9w7NgxVq5cycWLF+nZs+dDr+vi4kJoaKjRw87OrjBuQQghxGNEURSObj8KQJ02dcxcmxwcOACffaY+//FHcHfP12X8nNXMkG2ALU5OTty+fZuTJ0+aqpZmZWXuChh06dKFLl26ZLnP1dU1U9vkN998w5NPPklQUBDlypXL9ro6nQ4vLy+T1lUIIYT477//iLwZCZbQtE1Tc1cna/HxMHTog8kV89E8ZmDIDIUnhNOuXTv+/vtvNm3aRIMGDUxVW7MpNpmhvIqKikKn0+GWYXXdjGJjYylfvjx+fn50796d48eP53h8UlIS0dHRRg8hhBAiI8MK9VSCSl6VzFuZ7Lz3Hly8CL6+8M03BbqUoc9QcEwwTz/9NABbt24tcBWLgxIZDCUmJvLee+8xcOBAXFxcsj2uevXqLFiwgLVr17JkyRLs7Oxo0aIFly5dyvac6dOn4+rqqj38/f0L4xaEEEKUcFowVP1B1qRY2br1QQD0yy85rj2WG4a5hkKiQ7RgaPfu3Y9EP9wSFwylpKTw/PPPo9fr+f7773M8tmnTprzwwgvUq1ePVq1asXz5cqpWrco3OUTHEyZMICoqSnvcuHHD1LcghBCihAsMDOTEiROgA6o9yJoUG1FR6uSKAKNGQadOBb6klhmKDqZGjRp4e3uTmJjI/v37C3xtcytRwVBKSgr9+vUjMDCQzZs355gVyoqFhQWNGzfOMTNka2uLi4uL0UMIIYRITxvxXA5wfJA1KTbefBNu3IBKlR6sTF9AhuzX7fjbJKcla1MJbNmyxSTXN6cSEwwZAqFLly6xZcsWyuRiLZWMFEXhxIkTeHt7F0INhRBCPC60YKgGlLYvjb21vVnrY2TNGliwAHQ6WLgQHB1Nctky9mWwtbQF4GbMTa2p7FEIhorNaLLY2FguX76svTakIEuXLo2Pjw/PPvssx44d459//iEtLY2wsDAASpcurc3tMGTIEHx9fZl+f4bNqVOn0rRpU6pUqUJ0dDRff/01J06c4Lvvviv6GxRCCPFIuH37Nnv27FFfVC9mWaHbt2HECPX5O+9AixYmu7ROp8PXxZer964SEhOiZYaOHDlCZGTkQwc0FWfFJjN05MgRGjRooA3RGzt2LA0aNGDy5MkEBwezdu1agoODqV+/Pt7e3tpj37592jWCgoIIDQ3VXkdGRjJixAhq1KhBx44dCQkJYdeuXTz55JNFfn9CCCEeDWvXrkWv11OuejlwK0b9hRQFRo6EW7egdm346COTF5G+35Cfnx/VqlVDr9ezY8cOk5dVlIpNZqht27YoipLt/pz2GWT8YcyePZvZs2cXtGpCCCGEZs2aNQBUalaJIIKKT2Zo8WJYuRKsrGDRIrC1NXkR6UeUAbRv354LFy6wdetWevfubfLyikqxCYaEEEKI4i4hIUHrI1OqXimILCaZoeBgePVV9fmHH0IhTYRouNddQbuoUKoCTtWdgJLfb0iCISGEECKXtm7dSkJCAv7+/iSUTYDIYjDHkF4Pw4erw+mffFKdaLGQ+Luoc++tvbCWtRfWQgKgg/PnzxMSEoKvbzHJkuVRsekzJIQQQhR3f//9NwA9evQgJEZtKjJ7Zuibb2DzZrC3V0ePWRVenuO5Ws/Rq1ovWvi3oIV/C0qXLg33B2iX5NmoJRgSQgghckGv1xsHQ/f7zZi1z9Dp0zB+vPr8yy+hevVCLc7LyYvVz69mz/A97Bm+h97VekNFdV9JbiqTYEgIIYTIhWPHjhEaGoqTkxNNWzYlIiECMGNmKDFRXXw1KQm6dVNHkhUxPxc/LRjaunVrrgY7FUcSDAkhhBC5YMgKdezYkYhkNRCyt7LHzc7NPBWaNEnNDLm7q2uP6XRFXgVfF1/wBwtrC27evMn58+eLvA6mIMGQEEIIkQvpm8iCo4MBNTOiM0MQwtatMGuW+vzXX8HTs+jrwP3MkDU4VHK4X62S2W9IgiEhhBDiIW7cuMHx48fR6XR07dpV6zxtlpFkd+/C0KHq85EjoXv3oq/DfYb+UvoKeqDk9huSYEgIIYR4iH/++QeAZs2a4eHhYZQZKlKKAv/7H4SEQNWqMHNm0ZafgeH+4/3iAdi+fTupqanmrFK+SDAkhBBCPET6JjLAfCPJFi2Cv/5Sh88vXmyyRVjzq7R9aXXxVm9wcXUhOjqao0ePmrVO+SHBkBBCCJGD2NhYtm3bBjwIhoJjzJAZunr1wSzTU6dCo0ZFV3Y2dDqd+h5YQP1m9YGS2VQmwZAQQgiRg82bN5OUlETFihWpWbMmYIbMUGoqDB4MsbHQsuWDuYWKAUO/qUpPVAJKZidqCYaEEEKIHKRvIjOMHCvyPkPTp8O+feDiAr/9BpaWRVNuLhjeA/fa7gDs3buX+Ph4c1YpzyQYEkIIIbKRlpamdZ42NJGl6lMJiw0Dimg02cGDarMYwHffQUBA4ZeZB4bsWKJrIv7+/iQnJ7N3714z1ypvJBgSQgghsnHo0CFu376Ni4sLrVq1AiA8Npw0JQ1LnSWejoU8v09UFAwYAGlp0L+/OuN0MWPIDN2MvUn79u2BktdvSIIhIYQQIhuGJrIuXbpgY2MDoM0x5O3sjaVFITZXKYo6j1BgIJQvDz/+aJZZph/GkBkKjg7m6aefBiQYEkIIIR4ZGYfUQxH2F1qwAJYuVfsHLVkCbm6FW14+Gd6HkOgQLTN0/PhxIiIizFmtPJFgSAghhMhCYGAg//33H5aWlnTp0oVUfSrfHPyGn4/9DBTySLILFx4Mo//oI2jWrPDKKiBDv6mbMTdx93CnVq1aKIrC6n9X883Bb4hMjMz23PWX1jNhywQ2X9lcRLXNmpVZSxdCCCGKKUNWqGXLlpQuXZq1F9by+obXtf0VS1UsnIKTkuD55yE+Hp56qlgNo8+Kl5MXFjoL0pQ0bsXd4umnn+bMmTN8vfRrTjU+RUxyDBNbTczy3I2XN/L1oa9RUOhQqUMR1/wByQwJIYQQWcjYRHb57mUAapStwcSWExnbbGzhFDx+PJw4AWXLFrth9FmxsrDCy8kLUPtTGZrKrhy9Ajx437Ji6H9V5MuaZCDBkBBCCJFBdHQ0O3fuBDIvwdG1Slc+bf+pFgCY1D//wFdfqc8XLAAfH9OXUQgMwUxwdDBt2rTB0tKSuLA4iHwQ8GTF0P+qyJc1yUCCISGEECKDjRs3kpKSQtWqValatSrwYAmOQvvDffMmvPii+vyNN6Bbt8IppxAY3pOQ6BBcXFxo0qSJuuPqg4AnK4ZAqUjma8qBBENCCCFEBmvXrgWgZ8+e2jZDZqhQmnTS0uCFF+DOHahfH2bMMH0ZhSh9Zgigbbu26o6rD963jNL0aYTGhBqdby4SDAkhhBDppKWl8e+//wLQvXt3bbvWpFMYWYwZM2D7dnUV+qVLwdbW9GUUIi0zdD/TU69ZPXVHIEQlRhGbHJvpnPC4Ipy88iEkGBJCCCHSOXjwIBEREbi5udGiRQsA9IqemzE3gULIYuzfD5Mnq8+//RaqVTPt9YtAxsyQZ3VPsAbigFtZZ4cMxxb65JW5IMGQEEIIkY5hLbIuXbpgZaXOQHM77jYp+hR06PB28jZdYXfvPlhuY8AAGDrUdNcuQoZsmSEzFJ4YDuXv78ym35AhQDJ352mQYEgIIYQwYgiG0jeRGf7Iezp5Ym1pbZqCFEXtMH39OlSqBD/8UCyX28iN9JkhRVHUQMcwDdPVrEeUFdlM3rkgwZAQQghx3/Xr1zl9+jQWFhZ07txZ214oWYzZs2HtWrCxgeXLwdXVdNcuYob3JT4lnqikKDX4qXB/53W4fvd6pnO0kWSSGRJCCCGKj3Xr1gHQokULSpcurW03eRbjwIEHM0vPmQMNG5rmumZib21PaXv1/QqODlbfL0/QOeggGY4fOZ7pHMkMCSGEEMVQVk1kYOIsRkQE9OsHqanQv7+6Mv0jIP1cQyExIWAB7rXdATh78Gym44vLHEMgwZAQQggBQFxcHNu2bQMyB0Mmy2Lo9Won6Rs3oEoVmDevxPYTyih9vyHD+/VEiycACDkpfYZyZdeuXfTo0QMfHx90Oh2rV6822q8oClOmTMHHxwd7e3vatm3LmTNnHnrdFStWULNmTWxtbalZsyarVq0qpDsQQghRkm3dupWkpCQCAgKoUaOG0T6TZTG+/BLWrVPnEVq+HFxcCna9YsSQGboRfUObhqB3194AxF6NJTb2wVxDWidrpM+Qkbi4OOrVq8e3336b5f7PP/+cWbNm8e2333L48GG8vLzo0KEDMTEx2V5z//799O/fn8GDB3Py5EkGDx5Mv379OHjwYGHdhhBCiBIqfROZLkO2xiRZjH37YMIE9flXX6kzTT9CDO/NyfCTJKclo0NHtye7gRughy3btmjH3ku8R0JqAiDNZEa6dOnCJ598Qt++fTPtUxSFOXPmMGnSJPr27Uvt2rVZuHAh8fHx/PHHH9lec86cOXTo0IEJEyZQvXp1JkyYQPv27ZkzZ04h3okQQoiSRlGUbPsLgQlGk925o/YPMswnNGJEvutaXBmCmoPBasLB08kTb2dvLKqqocaKNSu0Yw3vZxn7MthZ2RVxTTMrNsFQTgIDAwkLC6Njx47aNltbW9q0acO+ffuyPW///v1G5wB06tQpx3OSkpKIjo42egghhHj0zD0yl4lbJ6IoCsePHyc0NBRHR0fatGnDlqtb6P5Hdzr/3plOv3ciJllthchXFkOvhyFDIDgYqlaFuXMfmX5C6RkyQ6GxD9Ybs9BZULZ+WQA2b9iMoihA8eovBGBl7grkRlhYGACensZrl3h6enL9eua5C9Kfl9U5hutlZfr06UydOrUAtRVCCFHc6RU9b2x4g6S0JF6s/6KWFerQoQN2dnZ8tPMjdgftNjqnvGt5nGyc8l7YF1/Av/+CnR38+Sc4O5viFoqdGmVrYKGzQK/oAajlXguASg0rccvqFuE3w/nvv/+oU6dOsRpJBiUkGDLI2IarKEqmbQU9Z8KECYwdO1Z7HR0djb+/fz5qK4QQori6HXebpLQkQO3wm7GJLCgqCICpbadSwU2dPbBFuRZ5L2jXLpg0SX3+zTdQt24Ba158lXcrz97he7kUcQlrS2s6V1YnrSxXphz7K+6Hi2q/rDp16jzIDDlLZijXvLy8ADXT4+39YE2YW7duZcr8ZDwvYxboYefY2tpiW8JWCxZCCJE36dfKOhN4hsOHDwPQtWtX9Ipey1y8WP9F/F3z+YX45k11PqG0NHjhBXjppQLXu7hr6teUpn5Njbb5OvtCVbRgaMKECQ/6YBWTzFCJ6DNUoUIFvLy82Lx5s7YtOTmZnTt30rx582zPa9asmdE5AJs2bcrxHCGEEI++9Gtl7dy8E4BGjRrh7e3N7bjbpOpTsdBZ4OXklb8CUlLUQCg8HGrXhh9/fCT7CeWGn4sfVFGf79+/n9u3bxMcI32GshQbG8vly5e114GBgZw4cYLSpUtTrlw53nzzTaZNm0aVKlWoUqUK06ZNw8HBgYEDB2rnDBkyBF9fX6ZPnw7AG2+8QevWrZkxYwa9evVizZo1bNmyhT179hT5/QkhhCg+0meGju9Sl4owNJEZ9nk6FmBR1nffhb171XmEVq4ER8eCVbgE83XxBVdwLO9I3PU41qxZQ0hK8ZljCIpRMHTkyBHatWunvTb02xk6dCgLFizg3XffJSEhgdGjR3Pv3j2aNGnCpk2bcE7XES0oKAgLiwfJrubNm7N06VLef/99PvjgAypVqsSyZcto0qRJ0d2YEEKIYsfQTEMqXD+mDsQxBEOGrFG+sxbLl6vrjQEsXKjONP0YM7yP1rWt4bo6GXJwW8kMZalt27bakLus6HQ6pkyZwpQpU7I9ZseOHZm2Pfvsszz77LMmqKEQQohHhaGZhuuQlpiGt7c3DRo0UPfdzwzlqz/L2bMwfLj6fPx46N3bBLUt2QzZn7hKcYA603dKvRSwf4T6DCUmJpqiHkIIIUSR0TJDF9X/de3aVWtZMOzL80in6Gjo2xfi4qBdO/jkE1NVt0TzdvZGh46U0ilUq16NlJQUuAiO1o642rqau3pAPoMhvV7Pxx9/jK+vL05OTly9ehWADz74gF9++cWkFRRCCCFMLTg6GBTggvq6c9fOD/bF5CMzpChqRujCBfD1haVLwarYNL6YlY2lDR6OHgC07txa3XhOfX8fNj1OUclXMPTJJ5+wYMECPv/8c2xsbLTtderU4eeffzZZ5YQQQghTUxRFDYbuAJGAJdRqUkvbr2WG8tKfZdYsWLECrK3ViRU9PExa55LO8F7Wbltb3XAJPC2zn+amqOUrGFq0aBHz5s1j0KBBWFpaatvr1q3L+fPnTVY5IYQQwtSik6KJS4nTmsgIgEh9pLZf6zOU25FOu3ap/YMAZs+GZs1MVtdHhSHLZu1jjWcFT0iDlNMpZq7VA/kKhkJCQqhcuXKm7Xq9Xm0LFEIIIYopw2gxy8v3v8xXfRAAaVkjcpkZSj+x4qBBMHp0odS5pDP0vwqJCaFim4rq870hOZ1SpPIVDNWqVYvdu3dn2v7nn39qvfGFEEKI4ig4OhjiIe16mrqh6oMAScsakYs+Q0lJ8OyzDyZWfEQXYDUFw3sZEhOCa2O10/SNUzcIDAw0Z7U0+erd9eGHHzJ48GBCQkLQ6/WsXLmSCxcusGjRIm19FyGEEKI4CokOgSuAHsqUL0NEqQgtG2QIitzs3HCwdsj+IooCr74K+/eDm9tjP7HiwxiybMHRwURZR0FF4Cr89ttvTJ482byVI5+ZoR49erBs2TLWr1+PTqdj8uTJnDt3jr///psOHTqYuo5CCCGEyQRHB2v9heq1qgc8CIJy3UQ2dy78/LOaCVqy5LGfWPFhDP2vQqJD1Pdafdv5+eefSU1NNWPNVPke99epUyc6depkyroIIYQQhe5G5A24v/pTm45t2HZ124PMUHQulonYvRtee019Pn06dO6c/bECeBBcXou8RlJaEtSEMrvLcOPGDVatWsVzzz1n1vrlKzN0+PBhDh48mGn7wYMHOXLkSIErJYQQQhSW/479Bwng6OpI25ZtgQdB0EMzQ8HBaj+h1FS14/S77xZFlUs8Q5+hhNQE9IoeK1srRo9SO5vPnj3bnFUD8hkMjRkzhhs3bmTaHhISwpgxYwpcKSGEEKKwXDl4BYDGbRpTvlR5QG0mUxRFay7LMjOUmAh9+sCtW1C3Lvz6q3SYziUnGyfqe9XXXjf3b87o0aOxtrZm//79WSZYilK+gqGzZ8/SsGHDTNsbNGjA2bNnC1wpIYQQorBEnIgA1FmnvZ29AUhOS+ZO/J3sM0OKAiNHwpEjULo0rF4tHabz6MBLBzgz+gxnRp9hy+AteHl5MWDAAADmGBa2NZN89RmytbUlPDycihUrGm0PDQ3FSqYfF0IIUUydv3SetPA00MGz3Z/FxtIGT0dPwuPCCY4OfpAZyjis/ptv1BXoLSzUVekrVDBD7Us2WytbarrXNNr21ltvUaZMGV599VUz1UqVr8ilQ4cOTJgwgTVr1uDqqs4XEBkZycSJE2U0mRBCiGJr6aqlAOjK66joo36h93XxJTwunJCYkKwzQ9u3w9ix6vOZM6F9+yKt86Osfv361K9f39zVyF8w9OWXX9K6dWvKly+vTbJ44sQJPD09+e2330xaQSGEEMJU/l33LwCl6pbSFgn1c/HjWOgxrty9wp34O0C6PkPXrsFzz6kzTL/wArz5phlqLQpbvoIhX19fTp06xeLFizl58iT29va8+OKLDBgwAGtra1PXUQghhCiw2NhYju0/BkDFJg+6eRgCn0M3DwFgZ2VHafvSEBsLvXtDRAQ0bAjz5kmH6UdUvjv4ODo6MmLECFPWRQghhCg0W7ZsITUlFUpBlWoPJkk0NIkdDFZHNPk6+6JTFBg8GE6eVFegX7UK7O3NUm9R+PIdDF28eJEdO3Zw69Yt9Hq90b7iMLW2EEIIkd7ff/+tPqkC/i7+2nZDZujKPXXIva+LL7z/vjpizMZG/X+5ckVcW1GU8hUM/fTTT4waNYqyZcvi5eWltbsC2vIcQgghRHGRlpb2IBiqbjxaLOMw+v7HU+Dr6eqLX36BZs2KqprCTPIVDH3yySd8+umnjB8/3tT1EUIIIUzu0KFD3L59G0t7S9LKpxlNqpg+MGp6A0YsUvsOMWGC2mlaPPLyNenivXv3zL6OiBBCCJFba9asAcC2ui1YGmeDDIGRfySsXgpWKWlqx+lPPjFDTYU55CsYeu6559i0aZOp6yKEEEIUirVr1wKQWDkRMM4GOds6440za5eAZxxEVguA335TJ1gUj4V8NZNVrlyZDz74gAMHDlCnTp1Mw+lff/11k1ROCCGEKKhLly5x7tw5rKysSK2YioXOAi8nrwcH6PUsWgX1wyHcEW4unEMDJyfzVVgUuXwFQ/PmzcPJyYmdO3eyc+dOo306nU6CISGEEMWGISvUsFlDDtkfwsvJCyuLdH/+PviAp0/GkGQJvZ+HP2s8YaaaCnPJVzAUGBho6noIIYQQhcIQDNVtXZdDHDIePbZ4MUybBsBLPeFQuQxZI/FYkAZRIYQQj6w7d+6wZ88eAMo1VucK0kaS7d4Nw4cDsGtAcxbXI3PWSDwW8v0TDw4OZu3atQQFBZGcnGy0b9asWQWumBBCCFFQ69evR6/XU69ePeId44H7I8kuXlRHjCUnwzPPcO7N9vDvvkxzDonHQ76Coa1bt9KzZ08qVKjAhQsXqF27NteuXUNRFBo2bGjqOgohhBD5YhhS37NnT67FXAOgcqordO0Kd+9Ckybw2290TAyj8sHKvFBH5hV6HOkURVHyetKTTz5J586d+eijj3B2dubkyZN4eHgwaNAgOnfuzKhRowqjrmYRHR2Nq6srUVFRuLi4mLs6QgghcikxMZGyZcsSFxfHkSNHeOe/d9h3aTs31lXB/cQlqFABDhxQ1x4Tj5y8/P3OV5+hc+fOMXToUACsrKxISEjAycmJjz76iBkzZuTnkkIIIYRJbdu2jbi4OHx8fGjYsCE3o4JZuBo1EHJzg3XrJBASQD6DIUdHR5KSkgDw8fHhypUr2r47d+6YpmZCCCFEARhGkfXs2ROAl1cE0v8MKNbW6ir0NWqYs3qiGMlXMNS0aVP27t0LQLdu3Xj77bf59NNPGT58OE2bNjVpBQ0CAgLQ6XSZHmPGjMny+B07dmR5/Pnz5wulfkIIIYoPvV6vLczaq1cvEn74mnG7UgFI+fF7aNvWjLUTxU2+OlDPmjWL2NhYAKZMmUJsbCzLli2jcuXKzJ4926QVNDh8+DBpaWna6//++48OHTo8dI20CxcuGLUVuru7F0r9hBBCFB9Hjx7l5s2bODk50S4lBZvX3wZgxtN2jB/+splrJ4qbfAVDFStW1J47ODjw/fffm6xC2ckYxHz22WdUqlSJNm3a5Hieh4cHbm5uhVgzIYQQxY2hiaxzs2bYDhoEaWksqguL+1RmvJnrJoqffDWTVaxYkYiIiEzbIyMjjQKlwpKcnMzvv//O8OHD0el0OR7boEEDvL29ad++Pdu3b3/otZOSkoiOjjZ6CCGEKFm0IfVHjkBMDKFPVOWVnuDn6m/mmoniKF/B0LVr14yarAySkpIICQkpcKUeZvXq1URGRjJs2LBsj/H29mbevHmsWLGClStXUq1aNdq3b8+uXbtyvPb06dNxdXXVHv7+8sERQoiS5MqVK5w+fRpLoOu9e1C9Or992Idkq3SzTwuRTp6ayQxpR4CNGzfi6uqqvU5LS2Pr1q0EBASYrHLZ+eWXX+jSpQs+Pj7ZHlOtWjWqVaumvW7WrBk3btxg5syZtG7dOtvzJkyYwNixY7XX0dHREhAJIUQJsmr5cgDaAmV8fGDjRi6f/ARAZpgWWcpTMNS7d29AXZneMM+QgbW1NQEBAXz55Zcmq1xWrl+/zpYtW1i5cmWez23atCm///57jsfY2tpia2ub3+oJIYQwp7Q0VsycCUBfOzvYsAHKlSNkj9pq4esimSGRWZ6CIb1eD0CFChU4fPgwZcuWLZRK5WT+/Pl4eHjQrVu3PJ97/PhxvL29C6FWQgghzE5RCBk+nAN37wLQ+7ffoE4dAIKjgwHJDIms5Ws0WWBgYKZtkZGRhT5qS6/XM3/+fIYOHYqVlXHVJ0yYQEhICIsWLQJgzpw5BAQEUKtWLa3D9YoVK1ixYkWh1lEIIYSZTJ/O6vt/A5pXq4bPs89qu0Ki72eGpM+QyEK+OlDPmDGDZcuWaa+fe+45Spcuja+vLydPnjRZ5TLasmULQUFBDB8+PNO+0NBQgoKCtNfJycmMGzeOunXr0qpVK/bs2cO6devo27dvodVPCCGEmSxYAJMmYehA0feVV7RdCSkJRCSoI6AlMySykq+FWitWrMjvv/9O8+bN2bx5M/369WPZsmUsX76coKAgNm3aVBh1NQtZqFUIIYq59euhZ0/upKXhpdORpihcuXJFm+rlyt0rVP6mMvZW9sRNjHvolCzi0ZCXv9/5aiYLDQ3VRlj9888/9OvXj44dOxIQEECTJk3yc0khhBCPqIj4CIKigmjg3cD0Fz90CJ57DtLSWNusGWn791O/fn0tEPrv1n+svaCOhPZz8ZNASGQpX81kpUqV4saNGwBs2LCBp59+GgBFUbKcf0gIIcTj67k/n6PhvIacvX3WtBc+dw66doX4eOjUiZWlSgHwzDPPAHAz5iYN5jZg0rZJgDSRiezlKzPUt29fBg4cSJUqVYiIiKBLly4AnDhxgsqVK5u0gkIIIUq2U+GnADgdfpqa7jVNc9Hr16FDB4iIgMaNif7lFzbfzwYZ+oaeu32OVH0qjtaONPZtzHst3zNN2eKRk69gaPbs2QQEBHDjxg0+//xznJycALX5bPTo0SatoBBCiJIrfedlw/D2AgsPh6efhpAQqFkT/v2X9Zs3k5ycTLVq1ahRo4ZRec38m7F58GbTlC0eSfkKhqytrRk3blym7W+++WZB6yOEEOIRcjPmpvY8JMYEyzVFRkKnTnD5MpQvD5s2QZky2kS8ffv21foFGcqT5jHxMLkOhtauXUuXLl2wtrY2WpYjKz179ixwxYQQQpR86bNBBc4MxcdD9+5w8iR4esKWLeDrS0JCAuvXrwcwmj5Fm2jRWYIhkbNcB0O9e/cmLCwMDw8PbVmOrOh0OulELYQQAjDOBhUoM5ScDM8+C3v3gqsrbNwI9/uobtq0ibi4OMqVK8cTTzyRqTxZgkM8TK6DIcNSHBmfCyGEENkxSWYoLQ2GDIF//wV7e1i3DurV03Zn1USWvjxpJhMPk+c+Q3q9ngULFrBy5UquXbuGTqejYsWKPPPMMwwePFjmcBBCCKExLIMBav8hvaLHQpeHWV0UBcaMgWXLwNoaVq6EFi203SkpKVrXjYwrDMgSHCK38jTPkKIo9OzZk5dffpmQkBDq1KlDrVq1uHbtGsOGDaNPnz6FVU8hhBAlUHDMg2xQqj6VW3G3cn+yosCECTB3Luh08Pvv0Lmz0SHbt28nMjISDw8Pmjdvrm1PTksmPC4ckMyQeLg8ZYYWLFjArl272Lp1K+3atTPat23bNnr37s2iRYsYMmSISSsphBCiZEqfGTK89nLyyt3JH30EM2aoz3/8Efr1y3TIn3/+CUCfPn2wtLTUtofGhAJgY2lDWYey+ai5eJzkKTO0ZMkSJk6cmCkQAnjqqad47733WLx4sckqJ4QQomQz9NuxsbQxev1QM2bAlCnq81mzYMSITIekpKRo/YX69+9vtE/rPO3sK903xEPlKRg6deoUnTOkKNPr0qVLoa5aL4QQouRI1acSFhsGQAMvdV2yXI0o++oreO/+bNHTpsFbb2V52NatW7l79y6enp60bt3aaJ8h6JKRZCI38hQMGf7RZcfT05N79+4VuFJCCCFKvvDYcNKUNCx1ljT0bgjkIjM0dy4YJvD94AO1z1A2li1bBsCzzz5r1EQGD5rnpL+QyI08BUNpaWlYWWXfzcjS0pLU1NQCV0oIIUTJZ8gCeTt7U861nNG2LC1cCCNHqs/feQemTs320OTkZFatWgVAvyz6EmmZIRlJJnIhTx2oFUVh2LBh2NraZrk/KSnJJJUSQghR8qWf58eQock2M7RsGQwfrj5/7TW1z1AOfX02bdpEVFQU3t7etGzZMtN+WYpD5EWegqGhQ4c+9BgZSSaEEAKM5/kxZGgyji4DYNUqGDQI9Hp45RW1z9BDOj0bmsiee+45LCwyN3LIhIsiL/IUDM2fP7+w6iFEkbgWeY2FJxaSnJasbWsb0JYOlToQkxTDghMLeKbmM/g4+5ixlkI8GrLLDCmK8mCE17p10L+/Osv04MHqEPqHBEKJiYmsWbMGgMhKkUzZMYUh9YZQsVRFzt4+y9L/lnLuzjlAmslE7uRr1XohSqoJWyew9L+lRttmH5hN5HuR/HL8F97a+BZnb5/lh+4/mKmGQjw60g9vN4zqikuJIzopGlc7V/j7b3jmGUhJUecQ+vVXyCLLk9GGDRuIiYkBF1gUsQh2wpnbZ/jzuT8ZtW4Uu67v0o4NcAsolHsTjxYJhsRj5fLdywD0rt6b8q7l+f7w9ySkJhAaE6rtu3zvsjmrKMQjI32/HQdrB0rZleJe4j1CYkJw3bRTXXg1JQWee06dXTqHATrpLV++XH1SC20YkPb5vf//QXUG0alSJ7ydvU16T+LRlKfRZEKUdIb+Ch+0/oA5nedoqfuQmBDtF3eWfRqEEHmWca4fw/+TVix/EAj17w9//KGuO5YLcXFx2lpk1IKKpSoC6uc2/bxGX3T4gsH1BpvydsQjTIIh8dhISUvRflEa+hEYfjkHRwdrv7jzvbK2EEKjKEqmuX58nX3pfQ7qvfaJGgg9/3yeMkIAa9euJS4uDjdvN/CFJ32fBOB2/G2CooLQK3osdZZ4OHqY/J7Eo0uCIfHYCIsNQ0HB2sIad0d34MEv6ZDoEO0Xd0xyDNFJ0WarpxCPgnuJ90hITQDQBiT0PJPK8j/BIjUNBgyA337LUyAEaEs+lWtZDnRQ16MudlZ2ABwKOaSVZ2lhme01hMhIgiHx2DBkfHycfbDQqf/0DRmia5HXtKwRSFOZEAVl+AyVdSirBisrVvC/L7ZjrYdDbSrDokV5DoTu3LnDxo0bAXBo6ACo2V3D5/hg8EFtmxB5IcGQeGxkNQmb4fmR0CMoKJmOFULkj9EM0H/9Bf37Y5mm5/c68MnLVfMcCIHacTo1NZWGDRsS6RwJGA/bPxhyUNsmRF5IMCQeG1kt3Gj4Rnn05tEsjxVC5I/hC8Wg0zq1b1BaGsG9nmJoH7gRdzNf1/z9998BeOGFF4yCLcNn+ljoMW2bEHkhwZB4bGidOZ0zZ4aS0pKyPFYIkT/B0cG8fBTe/uGEOqHikCHc/X4meov8fdm4evUq+/fvx8LCgm59uhGbHAuoX24Mn2nD51gyQyKvJBgSj43gmCwyQ9n0LZBmMiEKpvrvG/npb7BQgFGjYP58fN3UxVrvxN8hMTUxT9f7448/AHjqqadIdVQXBHe1dcXJxinT51gyQyKvJBgSj42s1irydvJGx4Op/51tnI2OFULkkaLAp5/y/C8HADg1pDN89x1YWFDavrQ28utmTO6byhRF0UaRDRo0KNOQ/YyZIMkMibySYEg8NtIvGmlgbWmNp5On9rqxb2P1WMkMCZF3igITJ8L77wMwuS2EffCmttaYTqfLecHWbBw/fpzz589jZ2dH3759M0/mmCETJKPJRF5JMCQeC4qiZDmaLOPrJr5NAMkMCZFnej288QZ89hkAH3S15+O24Ofqb3RY+gVbc8vQcbpHjx64uLg8+Cw7Z50ZkoWWRV6VmGBoypQp6HQ6o4eXl1eO5+zcuZMnnngCOzs7KlasyI8//lhEtRXFzZ34O9pK9RnXKkr/rdIQDN2Ku2W0sr0QIgdpafDyy/DNN6DTkfzd13zypDrhYnZZm9xmX1NSUrRgaPBgdXkNLct7/1qeTp7a3GHavEZC5EGJCYYAatWqRWhoqPY4ffp0tscGBgbStWtXWrVqxfHjx5k4cSKvv/46K1asKMIai+LC8C3U09ETG0sbo33pv1XW9ayLraUtkLc+DUI8tpKSYOBAmD9fXXF+0SKu9+8MgJONEy62LkaHG7I5uc0MrV+/ntu3b+Pp6Unnzup1DYMhDJ9dKwsrvJ28jbYJkRclatV6Kyurh2aDDH788UfKlSvHnDlzAKhRowZHjhxh5syZPPPMM4VYS1EcGb6FZtWXIP03V18Xdc6Sq/euEhIdQoBbQFFVUYiSJyYG+vaFLVvUhVaXLIFnniHk2g5A/WzpdDqjU/KaGZo/fz6gzi1kfX8x16z6//m6+BISEyIjyUS+lKjM0KVLl/Dx8aFChQo8//zzXL16Ndtj9+/fT8eOHY22derUiSNHjpCSkpLteUlJSURHRxs9RMmVmJrIy2tfZsLWCUDW3xoN2wxZI8MvU8M31+m7pzNz38wiqrEQJcTt2/DUU2og5OjI0s+H0DnhJzr/3pm3Nr4F5Px523p1K72W9tKW0MjKrVu3WLduHQAvvviitj2rkaHZjSwTIjdKTGaoSZMmLFq0iKpVqxIeHs4nn3xC8+bNOXPmDGXKlMl0fFhYGJ6enkbbPD09SU1N5c6dO3h7e2c6B2D69OlMnTq1UO5BFL1NVzbxy/FftNe13GtlOqa2R211n4e6T1u8NSaEiPgIJm6bCMCIJ0ZkSvkL8Vi6fh06doSLF6FsWaJXLmXAtqchyviwrD5vhm33Eu+x9sJaLHWWrOy/MstiFi9eTGpqKo0bN6ZWLfW8pNQkbsffBowzvbXda7Py3MosyxTiYUpMMNSlSxfteZ06dWjWrBmVKlVi4cKFjB07NstzMqZnFUXJcnt6EyZMMLpedHQ0/v7+2R4viregqCBA7Rg9rvk4ulbpmumYBt4N2DVsF1XLVAUwygzdiL6hHRcSHYKLuwRD4jF35owaCN28CeXKwaZNXHNLgm3gZufG152/BsDWypYulbtkOr1a2WrseXEPq86v4sv9Xxp9xtJTFEVrIkufFTL05bO1tKWM/YMvwuNbjqdluZa0CWhjslsVj48SEwxl5OjoSJ06dbh06VKW+728vAgLCzPaduvWLaysrLLMJBnY2tpia2tr0roK8zGk05/0fZJnaz6b7XGtyrfSnqfv05C+k2dwdDA13GsUUk2FKAH27YPu3eHePahZEzZuBD8/gi+tByDALYDB9QY/9DItyrXAzsqOL/d/mW1H6uPHj3P69GlsbW15/vnnte3p+/+l/2LrYO1Ah0odCnJ34jFWovoMpZeUlMS5c+eybe5q1qwZmzdvNtq2adMmGjVqpHXCE4++7OYWykn6eVDSTwwnEzGKx9r69fD002og1KwZ7N4NfveblKPz/zkLjw0nJS1zP05DVqh3796UKlVK255VfyEhCqrEBEPjxo1j586dBAYGcvDgQZ599lmio6MZOnQooDZvDRkyRDt+5MiRXL9+nbFjx3Lu3Dl+/fVXfvnlF8aNG2euWxBmkH5l69xKP0NuxsyQEI+l+fOhVy9ISIAuXWDzZihdWtudn8+Zu6M71hbWKCiExoYa7UtKStLWIkvfRAZZjyQToqBKTDAUHBzMgAEDqFatGn379sXGxoYDBw5Qvnx5AEJDQwkKCtKOr1ChAuvXr2fHjh3Ur1+fjz/+mK+//lqG1T9mCvKNNSQmJFOfISEeK4oCU6bA8OGQmgovvABr1oCjo9Fh+cnAWugstJmiM362Vq9ezd27d/H19eXpp5822ieZIVEYSkyfoaVLl+a4f8GCBZm2tWnThmPHjhVSjURxpyhKpjWMcsPLyQsdOlL1qRwPO65tN0z0JsRjITkZRoyAhQvV1xMnwscfqxMrZpCfzBCon8vrUdczZV0NqwW89NJLWFpaGu3T+gxJZkiYUIkJhoTIq8jESBJSs14SICfWltZ4OXkRGhvKf7f+07ZLZkg8NqKi4Nln1TmELC3h++/VwCgb+ckMpT8+fX+8CxcusGPHDiwsLHj55ZcznSOZIVEYSkwzmRB5ZfgFW9q+NPbW9nk615BJ0it6bZv0GRKPheBgaNVKm0yRtWtzDISAfGVggUwTnALMmzcPgK5du2Y5rUlOs8kLkV8SDIlHVkG+QWZ1zu342ySlJhW4XkIUWydPQtOmcPo0eHnBrl3QNfPcXOnFJccRmRgJFDwzlJiYqHV5+N///pfpeL2i1+YZksyQMCUJhsQjqyCjTtKf42zjLIu3ikffpk1qRigkRJ1D6MABaNjwoacZApmsFmV9mIyZoRUrVnD37l38/f2NJto1uBV3i1R9KhY6C7yccrdOpRC5IcGQeGSZKjPk5+KX58UlhShRvvtOzQDFxEDbtrBnD9wfqfswpvicGb64GDpOv/LKK5k6Tqcvy8vJCysL6fIqTEeCIfHIKsiok/Tn+Ln4GU3EKMQjIzUVxoyBV1+FtDQYPBg2bIB0kxw+TIEysOm+ZPz333/s2bMHS0tLXnrpJZOXJUROJLQWjyxTZYZ8XXy1vkIyokw8Mu7dg3791I7SOh1Mnw7vvqs+z4OCfM4M8wwlpyXz9ffqmmY9evTAx8fH5GUJkRMJhsQjqyCjTtKf4+fsR1KaGgxJZkg8Ei5dgh494MIFcHCAxYuhd+98XaogGVgbSxs8HD24dfcWS35fAmTdcdoUZQmREwmGxCOrIN8iMzaTJaYmAtJnSDwCtm+HZ55RM0N+fvD331C/fr4vV9BsjZ+LH7e23SI2JpaqVavSsWPHQitLiOxIMCRKnDR9Gj2W9ODwzcM5Hnc34S6Qv2+RjjaOuNm5EZkYadRMJpkhUaLNm6f2EUpNhSZNYPVqdQh9Pvx55k/e2vgW4XHhQP7n/fFx9OHYQXWlgNdeew0LCwviU+Lp8FsHLkZcxMbShi86fMHAOgNljiFRaCQYEiXOpbuX+Pfyv7k6tqZ7Tdzs3PJVTqtyrdhydQsNvRsSFKWueyeZIVEiJSfDm2/CDz+orwcMgF9+Afu8TUaa3sKTC7XPg52VHQ29Hz4MPyv6S3q4C7aOtgwbNgyAg8EH2Xdjn3bM/BPzGVhnoGSGRKGRYEiUOIZfiFVKV2H186tzPLZiqYro8tgh1GBV/1XEJsfiaueqzUR9M+YmekWPhU4GYooSIixMXVpj7161c/THH6vrjOXzc2Fg+BzO7T6X52o+Ryn73I9AS+/i+osAVG5fGScnJ6NrW+osSVPSCIkOQVEUGU0mCo0EQ6LEMfxCrFCqAjXdaxZaOZYWlrjauQLqvCYWOgtS9ancirslE76JkuHAAbV/0M2b4OqqdpTu1s0klzZkhZr6Nc13IHTu3DkuH74MOijV5sE1DNdu5NOIgyEHCYkJISopiriUOECayYTpyddbUeLkd4XsgrCysMLT0dOofCGKtZ9+gtat1UCoZk04fNhkgVBiaiJ34u8ABfscfv21OpyeanDX7q623fAZa+LbBIDopGjO3zkPQCm7UjhYO+S7TCGyIsGQKHHyu0J2QWWcLVeIYikpCf73P3Vx1ZQUNTN04ABUqWKyIgzL0thZ2VHavnS+rnHv3j0WLVqkvmhi/CXD8BmvXra6tsTHoZBDgPQXEoVDgiFR4pgjMwQPUvOSGRLF1s2b0K6dOmpMp4Np0+DPP8HZ2aTFpP8M5rdP3ty5c4mPj6d2ndoQoGZ/YpJijK/v4qt9zg+GHNS2CWFqEgyJEsdsmSFn4xW2hShWtmxR5wvavx/c3GD9epgwocAdpbNiyI7m9zOYkJDAnDlzAHhn3Du42KnZH8NnK/31DWUcDFaDIcPnUAhTkmBIlDjpvzUWJVmsVRRLaWkwdSp07Ai3b0O9emr/oM6dC63Igs73s2DBAsLDwylXrhwDBgzQsj8h0SGkpKUQFhumXt/ZVyvjyr0rBSpTiJxIMCRKlOS0ZG7F3QLM12dImslEsXHrFnTpAlOmgKLAK6+omaHKlQu1WG2+n3xkaVJTU/niiy8AGDduHNbW1kafrdDYUBQUrC2scXd0z1SG9BkShUGG1osSxdBx09bSljL2ZYq07PTfXoUwuz17oH9/tZ+QgwP8+KO66nwRKEhmaPny5QQGBlK2bFltdfr0WVfD58vH2QcLnUWmMmSOIVEYJDMkShRt0jWX/HfczK/0314VRSnSsoXQKAp88QW0basGQjVqwKFDRRYIQf7XCFMUhc8++wyAN954AwcHdYi8IfsTHB2c6doZy5DMkCgMEgyJEsVcI8ngwbfXuJQ4opOii7x8IbhzB3r2hHffVfsKDRqkBkK1ahVpNfI7E/T69es5ffo0Tk5OjBkzRttulBnKkHXKWIb0GRKFQYIhUaKYayQZgIO1A6Xs1Flypd+QKHJbtkDduvDPP2BrC3Pnwm+/wf0lLIpKmj5Na67Oy+dQURSmT58OwKhRoyhV6sGM0+mzrhn7I6Uvw97KXvsMCmFKEgyJEsWcmSGQEWXCDJKTYfx4dbRYaOiDZrERIwpl2PzD3Iq7RZqShoXOAk8nz1yft3XrVvbu3YuNjQ1vvvmm0b70/fEyZobKOpTFxtJG21bUzePi8SDBkChRzJkZSl+uZIZEkbh0CVq0gM8/V/sKjRwJR46oGSIzMfzb93byxsoid2NwFEXh/fffB2DkyJH4+PgY7Td8rsLjwgm8F2i0TafTacGS9BcShUWCIVGimGuOIYO8jiiLT4kvzOpkoihKkZeZneJSj4JK1aeSlJqUp3MiEyO5HnldW78rzxQFFi6EBg3U4KdUKVi5En74QR05Zkb5GUm2bt06Dh48iIODAxMmTMi0P33252joUfX66bK/2fUfEsJUJBgSJUpBZ74tqLxkhr468BUu013YcHlDYVdL8/q/r1N6RmltUUtzWXVuFc7Tnfnp6E9mrUdBKYpCk5+bUP276rkOiI7ePIrHFx4EfBWAxxce/Hnmz7wVeu+e2jF62DCIi4M2beDUKejTJ+83UAjyOpJMr9fzwQcfAPDaa6/h5eWV6Zj02Z9UfWqm62c3skwIU5FgSJQYekX/4FupufoMOee+z9DWwK2kKWnsvLazsKul2RK4haS0JPYG7S2yMrOy/dp29Iqebde2mbUeBRWZGMmx0GNci7xGYGRgrs7ZdX0XKfoUABQUtl/bnvsCN26E2rVhyRKwtIRPP4WtW8Gv+AQBeR1JtnLlSk6cOIGzszPvvPNOtscNrTcUB2sH7Kzs6FCxA/6u/tq+fjX7UcGtAr2q9SpY5YXIhky6KEqM23G3SdWnYqGzwMsp87fLopCXzJC2zlIRdrY2/KEydwfvjGtMlVTp38eQ6BCql62e63McrR2JS4nL3c8iNhbeeUedOBGgalVYtAiaNMlXvQtTcEzuM0NpaWlMnjwZgLFjx1KmTPYTpX7Y9kM+bPthlvv61OhDnxrFIzMmHk2SGTInmbgvTwwBiKejJ9aW1mapQ15GkxnqW1SdraOToolJNl7121yK+t4LS/r65/ZeDMc18WuSu/P27FHXEzMEQq+/DsePF8tACPKWGVqyZAnnzp2jVKlSvPXWW4VdNSHyTYIhcwkKgmbN4MABc9ekxDD3SLL0Zd+Jv0NiamK2x6VfQ62osjTpszBmzwyly1CV5Nm68/OeGo5r4tsk0zWMJCaqkye2bg1Xr0K5cmqT2Fdfmb2TdE5y22coISGBiRMnAvDOO+/g6upa6HUTIr9KTDA0ffp0GjdujLOzMx4eHvTu3ZsLFy7keM6OHTvQ6XSZHufPm7dzKQATJ8LBg9C8OYwdC/GPxsibwpR+KQ5zKWVXCjsrO+DBOmlZSb+vqJbvyE8WozCk6lMJjQ0F1KAw3yOqioECZYbuB0PhceEkpyUbH3ToEDRqpC6roShqZ+lTp+Cpp0xS78KiKEquR5PNmjWLGzdu4O/vn2leISGKmxITDO3cuZMxY8Zw4MABNm/eTGpqKh07diQuLu6h5164cIHQ0FDtUaVKlSKo8UN89ZW6lpCiwOzZUKcObM9DR8vHUEFWyjYVnU6Xq35D6bMB8SnxRCVFFXrdMvZvMZfw2HD0iv5BXUrwBJVG72ku7kOv6LVAuJ5XPW24eGiMGhwSFwdvv61mhc+cAQ8PWLMG5s+HEpA5iUyM1KZMyKmZ7ObNm9ps0zNmzMDe3r5I6idEfpWYYGjDhg0MGzaMWrVqUa9ePebPn09QUBBHjx596LkeHh54eXlpD0tLyyKo8UOUKaN2kFy3Th0pcvWq+q3wf/+DqML/w1kSFWSlbFPKzVxDGQOlosjUpC8jIiEix2a8oqpHVq9Lkrxmhu7E3yE5LRkd6lBxH2d1csGQmBDYtk2dLHHWLNDr4YUX1ICoZ89Cq7+pGT6Dpe1LY2+dfYAzadIk4uLiaNq0Kc8//3xRVU+IfCsxwVBGUfcDhtKlSz/02AYNGuDt7U379u3Z/pDsS1JSEtHR0UaPQtW1q/oLceRI9fW8eeqii+vWFW65JVB+V8o2tVxlhjJkEYoiU5OxDHNlh8xx74Ulr9k2wzGeTmonfz8XP1wTwOvN96F9e/VLj7+/+vn+7TcoW7bQ6l4YcvMZPHr0KAsXLgRgzpw5snyGKBFKZDCkKApjx46lZcuW1K5dO9vjvL29mTdvHitWrGDlypVUq1aN9u3bs2vXrmzPmT59Oq6urtrD398/22NNxsVFnVl2+3aoVAlCQqB7dxg4EMLCCr/8EsLccwwZ5GauoYyBUlE0FRmGPBdlmVnJGDQ8KpmhW3G3Mvf9ySDjv9HeZxXOfgcVV97/EjZmjPrlp2vXwqlwIXvYSDJFUXjrrbdQFIVBgwbRpJiOiBMioxIZDL366qucOnWKJUuW5HhctWrVeOWVV2jYsCHNmjXj+++/p1u3bsycOTPbcyZMmEBUVJT2uHHjhqmrn722bdVOlG+/DRYW6sRr1avD999DWlrR1aOYKi6ZIUMzXW4yQzp0Dz3WVAx/qIqyzKwYytXqEVMyg6GElATuJtwF1HtRUB70/cmG4d4bJpWGXr14e+ZefGLhlm8p2LULvv0WnJ0Lve6F5WEjOv/44w92796Nvb291mdIiJKgxAVDr732GmvXrmX79u345WNW1qZNm3Lp0qVs99va2uLi4mL0KFIODjBzpjrS7Ikn1P5DY8aoHS6PHSvauhQj0UnRxCbHAubvM2T4Q5BT5sUQmNTyqGX0ujAZ/hAXZZlZMbwv5q5HQRk6QjtYO1DerTzw8GxbWEQQ7+2Gb9/ZDmvXkmZpwbSW8Pbn7aFVq0Kvc2HT1gbMIjMUERGhjRqbNGlS0WTVhTCREhMMKYrCq6++ysqVK9m2bRsVKlTI13WOHz+Ot7e3iWtXCBo1UgOib79Vm9EOH4bGjeGNN6Cw+zEVQ4ZfwqXsSuFgbd45WAx/CHLKvGQcXl3Y2ZGk1CRux982LtPMmSFz16Og0v/hz9XM49u2MeLl75m+FWySUqFNGzavnMmkpyEwMeeMUkmRU2bo7bff5s6dO9SuXTvHZTeEKI5KTDA0ZswYfv/9d/744w+cnZ0JCwsjLCyMhIQE7ZgJEyYwZMgQ7fWcOXNYvXo1ly5d4syZM0yYMIEVK1bw6quvmuMW8s7SUs0KnT8Pzz+vjkD5+mu16Wzp0sdqBuviMMeQgeEPQWhMKGn6zM2X6YdXP+n7JFD42RFDebaWttT1rKuWaa4+Q/fL1e69hA6tT/+HP8cRhGFh6siw9u3xCY4i3BF2fzoCtm/HpUETo2uVdFqAmOFzuHXrVhYuXIhOp+Onn37CxsbGHNUTIt9KTDD0ww8/EBUVRdu2bfH29tYey5Yt044JDQ0lKChIe52cnMy4ceOoW7curVq1Ys+ePaxbt46+ffua4xbyz9tb7T+0aRNUrgyhoTBggLqa9fHj5q5dkcgpPV/UPJ08sdBZkKakER4Xnmn/7bjbpOhT0KGjkU8joPCzI+mnHcjL+mmmpihKpsxQdFI0MUkxRV6Xgkr/hz/L9zQ5WR0mX60aLF4MOh2LW5ei2quQMqA/pJuTKiQ6xGjupZLKEAymzwwlJCTwv//9D1C/tDZt2tQsdROiIEpMMKQoSpaPYcOGaccsWLCAHTt2aK/fffddLl++TEJCAnfv3mX37t10LaGjOADo0AFOn4apU8HeHnbvVvsVjRgBt26Zu3aFqjgsxWFgZWGFt5Pa1JpVpsBQVy8nLwLcAoDCn/cn/R+p3PRpKiz3Eu9p91mtbDVcbF3MVpeC0t5TZz/jEYSKAn//ra4u//bbarN1o0Zw6BCju6QRZf8gaPd28kaHjhR9SomeiRvUDuURCRGA8ZeSqVOncuXKFXx9ffn000/NVT0hCkRWrS9p7Oxg8mR48UUYP17NGP30EyxbBh9+yN2XBrIr9ECmb6E2ljY8VeEpk/a3iUqM4tLdS1r2ozAVp8wQqNmCkJgQgqODaezb2Ghf+oxCKbtS2FvZk5CawMITC3F3dEeHjpblWuLu6G6y+qR/fwzvkaEZz0Jnwb4b+wiPC8fJxol2Ae0KZaHbC3cusPHKRgDKOpTFzsoOPxc/zt4+y/Izy6ntoU6D0cinEeVcyxWorKv3rqJDR4VSmfsORsRHsDtot/YZ0KGjVflWlHXI25w+hn5evi6+eDp6AhB/4jDhsxvgue8kAIqnJ7pp07jR+yn23jxAdFK0dg6AtaU1nk6ehMWGERwdjIejR/5uuBhI36Hczc4NgN27d/PFF18A8N133xX9gBMhTESCoZLK3x/++ANGj1Y7VR87Bm+/TdwXH/Bzu3jWVQUyzHU2pvEYvu36rcmq8OKaF1l1fhX7hu+jmX8zk103K8UpMwRqPQ6FHMoy45E+S6PT6fB39edixEVGrhupHdPUryn7X9pvsvqkf3+8nLyw1FlqzXhnb5+lw28dtGNnd5rNm03fNFnZoAbGDec11JZqMPyc/F38OXv7LB/u+FA71svJi5CxIVjo8peYTkpNotG8RljoLAh9OzRTYPfcn8+x/Zrx5Koty7Vk94u781SOUbYtxZ5v1sHII1exUiDJEmY3BfdPxjO8zYs0n1NOC0jd7NxwsnHSruPr7EtYbBgh0SE09G6Yn1suFtIH3DqdjsjISF544QX0ej1Dhw6lV69eZq6hEPlXYprJRDZatlRHmv3yC3h44B8Wzz9L4PASJ15JqUsL/xbUKFsDgFPhp0xa9Mnwk4Vy3axk13HTXHIaUZYxizW17VRalWtFC/8WNPZRs0inwk+ZdPHW9GVaWlji5eSlbT8ZdtLo2ML4eV25d4X4lHhsLW1pXb41k1tPBuCd5u/QLqAdLfxb0MK/BQBhsWEFajK6EX2De4n3iEiIyHKxXMO/yye8n9Cylvm55+DoYOxS4Inft/FE6+d59TBYKbCzYWmefs+bCR3gaNwl7iXe097/Fv4t+Kz9Z0bXMWcfLlNKH3ArisLIkSMJCgqiUqVKfPPNN2aunRAFI5mhR4GFBQwfTmLv7nzV05M3DkCji7E0+vQUPPssR14dQ+MdA036y1hRFO2bc1FOKFicMkOQdV+YjFms52s/z/O11fWZElIScJjmQHxKPJGJkZSyL2WS+mQs08/Fj5CYEEKiQ7Sfj4ejB7fibhXKz8twzTqeddg5bKe2vX3F9rSv2F577TXTi/C48AI1GWVcL8wwBxAYT5S4ZcgWrCyscJ7urHXidrbN3YSHqcmJdN51kw+3g3/0/T/0devCnDm0adeOQUd+ZM+6UQRHB2v1KWNfhj3D92S6Vm5mLC8J0n8hWbRoEcuWLcPS0pLFixfjXIInkhQCJDP0SLmpi+W9DlDnLVuUYcNAp4O//uKJp4fw3T+QEhpssmxEREIESWlJQOH/kk8/h06x6TOUh8xQevbW9pS2V9fTM+X7ljFzln6WbEM5htFdhfHzym2wmn50VUHLgizWQbv/2tHaEVdbV5xsnHC1dc3y2CwpCqxZg1K3Lj+vUfCPBsXfX11V/tgxaNfO+D7uB5zpt2X0yGSG7t+nY7SjNj3J1KlTZckN8UiQYOgRYvhlq/j7oZs/H06ehK5d0aWmMvoInJuVQvyEcRAZabKyMj4vDIamEDsrOy2QMLec/qg/rH9TbiZtzIv08xoZru3nnO6PdYZgqDAzQw8LVnOzlEluy8rqOumDQsMCobkuc88etdm5d2+sL1wiwh4+7umK7uJFGDZMnffrvvQBTvppDbJi2F7iM0MxwZAEaz9aS2xsLK1ateK9994zd7WEMAkJhh4hmb6h1qmjro69fTvH/a1wSgHHGbMgIAA++khd6qOAZUHh/5LP2HGzOEj/BzZjtu1h/ZtMkR1J71bcLVL1qVjoLLS+QunrZ6iPYRLEwpj3J7cd3NMHaQUtCzK/h1llaR76fu/fD506qctl7NsH9vZceKUvlV6H9T1rqCM4MzAEfbfibnH13lW1HOdHOzMUHBkMKyH0aije3t4sXboUy3QBohAlmQRDj5Bs/wi3bctLE2vzTD+IrlJODYI+/BAqVIBPP4WYvP9hLMrMUHEbSQYP/hgmpCYQmRipbTdaQy2bLImpM0OGP/Kejp7ayCrDe3Uj+oaWNapetnqhzftjtsxQTDaZoXT1yPb9NgRBzZurE5paWalzdl2+zKaX2hJln/2/ubIOZbGxVGdZPnzzsNG9ZZTj7NUlyLk/z8EFsLG1YdWqVfj4+Ji7SkKYjARDjxAtaMjiG6qfqz8ra8KS399Tl/KoUQPu3YP331czRZ99BrGxeS4LCn+G4eI2kgyM+/5kFRi62bnhaOOY5bmmnhTRUGb6P9yGP8Anw04aZY1MnZUyyHVmyAT3nmNmKIt6ZCrzwAHo3PlBEGRpCS+9BBcuwNy54OPz0OBOp9Np+w6HHM5UZnqGf7cxyTHaPEQlzdJlS4nZon7Gv/jqC+knJB45Egw9QnIKGrRvx7E3oX9/dSbrP/5QlxK4excmTIBy5dSM0Z2HD3vO+C27MJvK0s8EXJxk9Yc9Nx2JTZEdSS+rPiuG8qOS1KZQQ9bI1Fkpg9wGrKYoP1d9hjJmhhRwO3BCDYKaNYONGx8EQRcvws8/Q8WK2jm5Ce4yvsfZBU5GnbhLYHZo9+7dvPjiiwDomukY88oYM9dICNOTofVm9ueff3L27FmtL4xOp8v388OHDkMUHIs/xux9s42OuXHlBlyCzcGb8Tzr+eDcV1+FI0fQrV+P7vZtdB99hO6zz7Bq3Rrrbt2w8vTE2toaKysro/+fPnwawlDDaQvYe2Qvugo67Rg7Ozvs7e2xs7PD2rpgsx2nnwm4OPF19uVU+Kks/zjn1FxUaJmhdMFixvcq/ZD79OeYQm6aBjPWI79BQao+lbDYMO31zZib6BW9NoFjpiyZXs8TB4M48DM0Cbk/yaWlJQwdCpMmGQVA6eXm55jde5wVPxc/om5HERITQg33GjnfZDFy7NgxunfvTmJCIlQB377qPFZCPGokGDKz5cuX89dff5n0mgs3Lcx238H7/+UoORm2bFEfufTy3Jez3WdpaakFRvb29jk+d3BwwMnJCUdHR5ycnHBycuL4seMQC7e9b7MnZY+23fBwcHDAwqLok5xZ/WHXsjQ5/RE1cR+SrDJDdlZ2lLEv82AtKcOQ+0KY8yY3TYMGGZuMDH2YcissNgy9osdSZ4le0WtrfhnmLNIyOrbu6kSkX3xBowsXAEiwAvtXRsG4cdkGQQYPGyEGmTOVOR3r6+LLmdtnSlQn6nPnztGpUyeio6Op2agmZzuexa9U8crOCmEqEgyZWceOHSlbVl0zybD4bH6e6/V6Fp9ajIJCn+p9sLeyNzomLDaMHYE7cLF1oXPlzkaL3Wa6VlgYqRcvkhoRQQqQCqSUKkWqhwcp9vakpKRw7tY59Kl6bHQ2JCcn42jliDXWpKSkkJKSQnJysnaPaWlpxMbGEpuHPklZ+eTPT/iET7LcZwiisns4Ojri4OCAo6Oj0eNh2+zt7bMdwZZVk09W/XcyMuyLSIj4f3v3HR9FnT9+/LWbsqmbBNIroR+dBFA4FMGj2YFT4c4TTuV7yKEnnMfp6Yl6Kp6HHl8LqCeC97WhJ/BD5ShKUSnSFUMLEEgnhZRN25Sd3x/LTHaTTbLp7f3kMQ+yU3ZmPjPJvvc9n0JpRSmebp5NKo+a+wz3CaekpISysjLKysoIMgeRm5ULleDi7cLXX39N3ok8OAkHsg7w7uV3KS8vx2w2O/W/xeJ41PXLRZchGSwGC7OPzcbDwwMPDw8MBoPd/97e3vj7++N13osSlxJ27t9JfJ94/P398fHxcaqloBpAhvuGU2GpsBvzq9JSiTkrg6VHYMRbsyDDmkGy+PuxfGgBr14DKS+u1Co+10VRFKeuo23wo/ZrVBetFV0neUyWlJTEL37xC3Jychg1ahR3/v1O/vztnztUIwYhWpIEQ+1s/vz5LfI+GaYM3n/lffQ6PZ88+QmuevtLeyr7FINWDQIDrH9svXNvevAg/P3vsHGjtbJ1Xh4MHkzZwv+hR9ofKHWHBWMW8OrBV5k7ai5v3PyGtqnFYsFsNlNaWkpZWRmlpaVO/VxcXExxcTFFRUUUFxdjMpn47IfPUMwKQ/yHYC41a4FVUVGRFsCVlJRQUlJCVlZWi5SnLS8vLzw9PTEYDLi7u2tTYWUhFMEGnw1cev0S7u7uHMk6AiWw/eB2Lr13Caj9WBPA5Qfr2GG/vfBbfN19qaqqorKyksrKSioqKrSfbSc10FSDHXXKKcyBcpj79FzmMtfhOXx29Z/qGMe4n/tbtJwKKWT9MSfvLWDGuhnaz25uboSFhREeHk5ERESt/3v37k1UVJRdkKIGQ2mFacTluFH28oskf6DgVQmQCRERsHgxuvnz+durwZirzKSb0unl36ve48ory6OssgywBl11sauwbqy/24eWrifWmk6cOMG0adNIT09n8ODBbN26lX8csw7G2lE6PRWipUkw1EWof2TDfMJqBUJQ/Ye7UcMSjBkDn31mrWD62mvWXngTEvD4/R9I8YT3RrsTGG99PFGzibNer9cefTVHhimD/7zyH/Q6PceePGZ3boqiUFpaahccqYGU7WQymSguLqakpEQLtmwnR/PNZrO2HzXQqssVrrDj9A67eQcSDnCAAw2e3/qjzgcPjeHq6orOTUeFrgJcIcQ/hCBjEIqrQsKVBNwMbkzpPwV3d3ctyLMN9hzNc3V1/Ofiv4n/5YuzXzA2aiyzB82mrKwMs9msBWvqz0VFReTn53Pg3AEK8gswKkZKTaVakJecnExycnKd5+Tm5kZAWAAYILtvNt4hnoxPht4bF8MP51GHRk0Id2Pwc2/Br38N7u7osAYjF/IukFaY1mAwpP4uBXoF4uFau48hlW1g0Bat6NrCN998w2233UZBQQGDBw9mx44d9OzZ06lMmRCdmQRDXURDdRx8Db74uvtiKjeRZkpjoGGg82/ev781GHruOXj3XUpfeYmeqZks+aYcy96n8O0HuyafhDur7HrpbQnqeTkK8nQ6HV5eXnh5eREc3LRxrupSVVVlFySVlZVRXl5uN53NOsvCzQvx1nvz5vQ3KS8v5w9f/IGi0iIWj1lMqLe1A0RHjyPfOfIOSflJ/HLQLxkeMhxXV1dtUiuhO3rt5uZmVzm9QlfBuPfGgStc+tMlevj2wMPDA1dXV57d86w2WvxH937ExNiJZBdnE7wimAoq2PDkhgYfGTnjxy9+BH+YfP1kHp74cIPr3/f/7mPt8bUsnbiUv1z3F0pLS8nJySEjI4O0tDTS09Pt/k9NTSUpKYny8nKykq2Zv3OJ57T3G8J5IoG+Pf1IDCvAc0w0n8XHM0iv1/7ARfhagyFnMjPqoyxnK4M7s25rteJrSRs3bmTOnDmYzWbGjx/P5s2bCQiwjp3nTF04ITozCYa6CGfrqpzKOUVaYRoDAxsRDKn8/GDxYv4zIYDPXvotT/8YwIhTecw4DTNOn4P/1xseeADuu8/6iKIFtFcfQy4uLvj6+tY7AGVcaRwLzy6kmGJm3T0LvU7P/SnWR09P/OkJenr1rHPbUxtPkfRjEqN/MZqlP1/a5ONMyEqAnhDgEUB0WLTdMkd97aidBZZXlTv1yMgZje0U07ZFmxrQRkdHEx0dXec2VeXlpH38MV8sfxTdmWwuKHAK+EEHqQqkAqm5BZAL/HSe4e8Ox8vLi/j4eK655hprfSeLc8GIs1mQUJ9Q9Do9FsXSqTNDVVVVvPDCCyxbtgxFUbjjjjv48MMP7bK6khkSXZ0EQ12EM99mI4wRnMo51eRvp+ZKM6sPr+aLs1/w9c/Af/ZtvBxxH//30ATu/QF6JCfDU09R9fQyzlzbj8M3jSBxdG+C/cJ5cPSDuOpdWf/TesJ9w7ku5jpyS3L58MSHzBk6h0CvwHrPqyP+Efb38MfT1ZPSylLSTGm46KxZMYOLocEx1NTrtOHUBgAWjFrgdMuqnUk7+frC1wBcKrDWS6qvbynb5WpngUn5STy751mm9pnK3UPudmq/ddHuPScDVmdatCmKwppjaxhHNIO+OIDLmjVEJyez8OrynGH9ODvzem6sWEMv315c53Ede4/s5cLpC0SURlB4qRCTycS3337Lt99+q73vU+89xZ7xe+gzog8FIQUE9w3GxdUFnU7H7QNuZ3TEaKezIG4uboR4h5BRlOF0z9tZxVmYK80YXA31rv9JwieE+oRyfcz19a5X0/kr59l6bisPxD3Q4D4AsrKymDJjCj/s+wGAkbeMZMRDI8ivzMcTTw6nH2bT6U2kFKTYnYcQXY0EQ12EWmfHmVZMTf12+tmpz1i8bbH2undAbwJGjeep2315/BcmZp2E/zkC1ycrDNp3lkH7zpLpDR8NhX1/qiJ64u3M/mw2wd7BXH70MisPrOS5b5/jcvFlnpvkuJWYs8M8tAedTkekMZLEK4mkFqZqwVCkMbLBllF9AvoA8H3a93yf9j0uOhf+OO6PDe6zylLF7R/frvXro+odULupuDovxDsELzev6n336ENSfhJrj69l7fG1jI0aS7Rf3VmZhjT2GjXY11FREWf/9SJRbzzPgAuAOvRbQADrhlpYMbiA1X9eg16np2ztGi6WXeRi2UXoA/SBP0/7MwtHLeTMmTMcPHiQgwcP8vnOz0lNTKUkr4TPP/8cPr/6nm5AFBAD/x72b86+eLZRWZDeAb3JKMpwWP62enr2xOBiwFxlJqMoo96MXHJBMnf/524CvQLJejSrUePxPbrjUTad3kRPr57MHjK73nV3797NnF/NITMj01oON8OxEcc49u0xssuyef2m17lnwz2cybV2TeDu4l5vhXIhOjMJhroIpzJDzezf5twVaz2NYSHDuK3/bSwcvdDaeu3OT9h6biuMhw3A3uQrjN36E6O+Pk1oYSmLDwCzFlPUbyV/joYPhmVhMps4l3fO7n0dnlcHHJfMVoQxgsQriaQVpmmd0Tnz7XnO0DlkFmXy33P/ZX/q/nrLwFZWcRZF5UXodXoeGvMQAG56N+6Pq90yrF/Pfrxz6zvEBsTazX9lyiu898N7rDu+jtzSXC7kXWhyMGSuNJNdkg04f40cjuJeWQk7dsD778OmTQwoKWGAumzCBJg/H2XGDB78Z0/KKq376uXfi39O/ScX8y9qbxPgEcDcEXNxcXFh0KBBDBo0iHnz5jHp5CTu/PBOhlqGMrfnXB579zEqL1RCGXDBOqXsSsH/TX+8Yr0gGApCCigZXYKXV3UgWdNr019j18VdTOkzpd5z1ul0WiXu1MLUeoOh81fOA5BTkkOhuRA/j7qb7Nek3kf13U85OTksXbqUtWvXWmcEgtevvZg/bT5ncs+w9dxWzl05h0WxcD7Peizz4+Zzc7+b661QLkRnJsFQF9GY/m1qtvxylhpEzRg4g6dveFqbP63vNKb1nWa/8v8AFRWsWX4XPp9sYuZZF3wSL/FiIrzwNZR9fyNjYq+wJ6T+TFVHzgyBfZZDDYacCQp83H3464S/EuwdzP7U/U5n69T1Qn1CWTltZYPrOwqShoYMZcWUFRzNOMqui7ua1feNOgisM48GVWr55JiyKN/1Fe4bN8P69WDTLUJuVE9W9s3lw6FwYsUWvNy8uFKSa9fkXafT8ci1jzi/Tzco9Cvkwd8/yKNFj4IF9t66l8P7D/OHt/4AF8FcbMZ82gyn4eVvXubVh19lzJgx3HDDDUyYMIFx48bh7V3dseTIsJGMDBvp9DGoLdrqYze8iymtUcGQ+t6O9mGxWFi3bh1/+tOfuHLlCgBT75rKtr7bGNRrECunrWT7+e1sPbeVNFMa2cXZVFoq0aHjjZve0AYBFqIrkmCoC1AUxakec5ubGdKGxXA2MHFzo3Dy9TygbGJer9v45Ukd3us3cMMl8Np3iMX74A/AkdhDULASZs2CqCi7t+jwmSGb+i/qY7LGBG6N7X+mJYPDluj7xvb6OPU4p6KCnt8d5e0v9dx60oL7s5OrlwUFwZw5cM89PJH5Dm8dfdu6j8I0+vXsp+0ryCvIqfowtmyvk1r/xdvgzdj4sYwbNY7l5cvJNGWy4RcbuOef91ByroSQnBAup19m79697N27l+effx5XV9dawZGPj099u651DA2Vd81OPAcFDXLq/UsqSsgry7NuZ/OFp6qqik8++YTnn3+ehIQEAIYNG8bq1as57nacbVu2ab9ftseolneIT4gEQqLLk4Fau4D8snxKKqz94DgzJlZTP/yaUplZXfecJZst14cy8bcQ/QgcXDKb/VE69MDoJDMsXmwdKPbaa2H5cjhxAsVi6ZAj1tuyLVNn6m3Vtb3TmaEWrFCu9YrcjBZOTl2foiLYvNnayjA0FN3Uqcw/ZCG0GCr8fK3jhH35JaSlwf/+L4weTVpRura5enzNuRfUll+VlkqOZR4D7AO4SGMk6MDsb6ZkWAnMhNPnTnP+/HnWrFnDvffeS1RUFJWVlezbt48XXniBqVOnEhAQwLhx4/jLX/7Ctm3b6u1l3dlrbTe8SyO+uNTczmQysWbNGgYNGsSvfvUrEhIS8PPzY8WKFRw5coRx48bVeryuHmN+WT5nc8/azROiK5PMUBeg/nHt4dmj3qEdbFu0lFeVN7qPmaZ8GNlmH3p6Wpuap/jDR9eEstKoEFEAM0/BisJrcd//PXx/dfrLX1AiI1gRWsKX/SDCJaBRx9pWmp0Z8m1cK6MOlxmqKzhLTLQGOFu2wJ491vHuVEFBbB7kwutRmTywZDV3jfx1rfd1NMRJcwJB25Zf36dax+azvY8jfCM4zGFtmbebN34efvj39qd3797cd999KIrCxYsX2b17tzYlJyezf/9+9u/fz/Lly3F1dWXEiBGMGTOGMWPGcM0119C/f3/0er3zmSFT7XN3RmphKlQBF+Hk5pOELgnVOgvt0aMHixcvZtGiRfj7+9fal3psRoMRbzdviiuKq8upgz6iFqIlSTDUBTjb+sW2j5kMUwYx/jFO76Osskwb9LMpmY90U7pdnZLv06x/aNP84LVr4bf/s4qRhMKmTfDFF7BzJ/rUNB5MhQcPAxsjYeJEmDwZJk2CoUOhHQZnrcmuzpDO+TpDKrtr0kArI2jZx4Yt0feNeu/10QfC559bB/fdsgXO1ajAGxsLN99sfRR63XV8vOk37PjpI6aWZjp4V8fZkeYGgpHGSGswdPXec9QPk+2ymo/9dDodsbGxxMbG8tvf/hagVnB06dIlDh8+zOHDh1m1ahUARqOR+Ph4PMI9IB9OlpwkZ2KONiZhvefewLWpqKjg9OnT7N69m3Ub18E+wAxmrD2o9+/fn/nz5/O73/3OYZ9ZNQNMtYXkmdwzDstJiK5KgqEuwNkec/U6PeG+4VzMv0iaKa1RwZC6Dw9XDwI8nM/ShPmEoUNHeVW5tYPAq45mHLVbL7UwlZEDRsKDD1qnkhKOfLCC799exh0X3Ai/Ugb//a91AujZ0xocTZpknfr3h0Y0QW4panYhsygTvU5vN88Ztv3+NGaoiJZ4bNisXpGLiuC777hh9X/51WGIz3wNLK9WL3dzg+uvh5tusk4DBthdn/r6GrJtoWZ7fM0NBCOMERxKP6Tde3b9MF39WVvmZPn26tWLefPmMW/ePAAuXbrE999/z/fff8/Bgwc5cuQIhYWF7Nq1S9sm4csEgl4KIigoiNjYWKKiooiMjCQ8PBw/Pz8Sv020difgAsdKj7HVdSsVFRXk5uaSnZ1NdnY2ly5dIiEhgbNnz1JRUWF/UB7AEPjs+c+YMXlGvXW5HN1PEcYIzuSecVhOQnRVEgx1AY3pFyXSGMnF/IuN/gBsdEXZq9xc3AjxCSGzKBNzVfV4X7Y/276/xsuL4/ER/P4W+KLPjWwZ8Q/YuhV27YJvvoHcXPjPf6wTQFgYjB1rncaNg7g48Gj9ZsAh3iG46KyDrloUC3qdnlCf0Ea9R6QxkqT8JOeGimiFzFBmUSaVlkqHY9ppUlLgwAHYv986HT4MlZXcrq2gQL9+1gB12jS48UYw1t2JZH3119QWaqpadYaamhm6WkdKvfccZYYcLWuMmJgYYmJiuOuuuwCorKwkISGBo0ePcvD4Qd7875uQA+ShBTYHDx6s8/0OcpDpf59e7z59fHy45pprKIksYb/7fggD9BA8MLje31VFURz+7WipshCiM5FgqAtozLhBTW1R1pwPogjfCDKLHD8OUTk6nuoWcpEwZIh1evRRqKiAQ4dg507rtG8fZGTAhg3WCayZibg4a3A0ahSMHGnNHtUx2GhTuehdCPMN08on1Ce0/qDCAYf97jigKIrTWUBnBHsHa4Hc5aLL1dmBvDz44Qc4csQa+Bw4YK3cXFNMDJ+E5PB5RDFLHt/MyNG3Or3v+s65ZoCkrtMSmSG71w566Ha0rDlcXV0ZPnw4w4cP5zeW3/B2z7et/fcsOE9+Wj7JycmkpqaSkpJCZmYmmTmZbD+53dr/kQKuLq4MDRmKi4sLPXv2JCgoiMDAQCIiIhg8eDCDBg0iOjoanU7HzPUz4XT1vhsKrgvNhRRXFNcuixrn3lEbLwjRkiQY6gIa8yHR1BZlzam8GmmM5EjGEQBtsFiV+tpR30d1Zrzc3KzZn3Hj4MknobTU+sG9b1915uLy5erK2CoPDxg2DEaMqJ4GDoSA5lXOjjRGNmvsJjVj0dA1KTAXVH94tcAHlIsCY83BBJ7PQFm2DJJy4PhxuHTJwcou1rIbO9ba4m/8eCy9Yvj1cwYqLbB8gHN97ai0+kr1BMHavXG1XJr7iLDmtXGUDanrdUtw1bsS6hNKuimdvKo84uPiiYuLs1vnQOoBtq/Zrp17JZXsf2K/U10JqOVTs9zqopazv4c/3u7VfSe1RVkI0dFIMNQFNOZDwplxoerdRxMzQ6qhIUM5nH6Y8ipr66LREaPZmbSzgcxQA/v09ITx460TgKLAxYvW4OjAATh2zJrpKCqCgwetk63gYGtQNHCgtW7LwIHQp4+1qb9n3a3zHJ1fk8rHycyQWkYBHgF2w2vUS1EgJwfOn4czZ+ync+f41qw+rlxjv12vXtZg8dprrdOoUWDT2SBA1tXHa015NGh7H6qPF1XqvabeG5lFmRSaC8kvyweakRmqJ+NRa1kr1ZOJ8I0g3ZROmimNeOJrLVfPfUjwEI5mHMVcZSbdlF6rF3FH1Punvt8pR/tq6NylzpDoDiQY6gIak7VpcmaoGY8oan4DzzBlkJSfBMA1EdewM2mnw+NpcrZFp7O2XoqNhV9fbbZtsVgDguPHrcHR8ePw44/Wxz9ZWdbpm29qv1dwsDUoiomxTtHREBpqnX91ivKuHq+pOeXjbGd82j5KSiA7u/r4s7KsdXuSk63ZneRk61RWVud7VrjqORFowTDqGgb/Yo41ABo2zKlsWXMeDdr2+5NdnE2IT4i2TL2fR4aO5JtL31BpqeRIenVm0dkBbWuyvTaueleCvYO1197u3vh7+Dc74HLmGA6lH6rzWtv+Ll8uvqwN39FQMFRpqdQeRWu/Uw30NF/X3w3b1zWzRkJ0VZ0uGFq1ahX/+Mc/yMjIYPDgwaxcuZLrrruuzvX37NnDkiVLSEhIIDw8nKVLl7JgwYI2POLWVVpRqjV5d6rOkJNZiJqa84jCdptI30jSjel2wVBdx9OS9WPQ660VfPv1gzvvrJ5vMsHZs9ZMyenT1VNSkjWTpAYZhw/X+dYv63U85glXPMEvaBO8fBJ8fa0ViH19rZO7u7W+kptb9f9ubqDTEZ+dyCP7IejISbi83DpOV0WFdf8mk3UqKmJYRiJH0iG86hz8yQeKi50///Bwa9arxrT01EpWHn6NpeMm8PfJf2hUkbZUvz+phal2wZD6IR7tF02YTxgphSlaM+/mPB603TbcN9wuGwXW+0wNhlqrnkxDdfZsA141GHLmdzWzKBOLYsFV78rI0JH17kNVV13D+jJmQnRVnSoYWr9+PY888girVq3i5z//OW+99RbTp0/n5MmTREfXHmgyKSmJm266ifnz5/P++++zd+9eFi5cSFBQELNmzWqHM2h5assbLzcv/D38G1zftq5GzccT9WmpzFCEMYLIourXYyLGANbKnCazCV+DtS8U2yCvVess+PpCfLx1sqUo1orEapZFnVJS7DMxubnoLQohxRBSDOSkwKmURh1CLPBPAPLh87/UuV7Y1QlKq2caDNZhLIKDrf9HRlZnsNQpMtK6ngMRmdbfm6aMV9dS/f7UfGRkGwRHGiPtgqHm3Atebl4EeASQV5bn8H0ijZEkZCfUyhq1pIbGB7QNUNRMjzNZXHWdcN9wovyinNqursxrsHcwrnpXKi2VUl9IdBudKhh65ZVXuP/++3nggQcAWLlyJdu2bWP16tUsX7681vpvvvkm0dHRrFy5EoCf/exnHD58mBUrVnSZYMj2A8mZJu9qvz8VlgpySnKc+qNfZakiw5Sh7aexbLeJNEZqAZzRYCTMNww/gx8F5gLSTGkMNAwEqoM8T1dPp4K8FqfTQY8e1mnEiLrXq6hg//EvWPDuTAJK4bXxzzPUqxcUFlozOoWF1gxPeXl1xkedKivBYsHi6sKHp/9DpR7uHv4rPD19rdkjb+/qzJKvL2+d+YhNaV8xa+x9PDDtL9bgx9e3Wf0rNWe8upbq96fmh7bth7SapWip3pAjjBHkleU5fB91nqOsUUvRMrNOZobqW9dWzQASIKMogypLlTaAcK1t6qiTp/ZHllyQLJkh0W10mmCovLycI0eO8Nhjj9nNnzJlCvv27XO4zf79+5kyZYrdvKlTp7JmzRoqKipwc6s9+KDZbMZsru4Dp7CwsAWOvmHrf1rPd8nfsXLaSu2PV1phGk/sfIJFYxYxKnyUw+0a+4Fk2+/PzPUzmdpnKn+d8Fdt+Y+Xf+SV/a/w9A1Pax0AXi6+TJVShYvOpdEVZaHGYzKbYEg95khjJAXZBczdNJfro6/npckv2X0oNKZfozbn5kZI3+H8eLVYPGfeBT36Nuot9MDSl8PJKMpg6PwlxIdbsyQ5JTks3bGU+0bex/jo8Wz+8DO2esGssWOtFbxbgHoNDqcfZtr70wBr/ZkXJr3AgMABgLVJ/5M7n+RIxhFc9C48POZhpvad2mL9/th+2FsUCxlFVwNvY4S2jjqvuZmKSGMkP2X9VGdmqCX20dD+AQ6mHeSWD29hydglTIqdpC23DVDUYGh9wnpO5ZwCrFmb16a/htFg1K4JQEphivb+tvWxprw/hRkDZ7BozKJax1JfnbxIYyTJBcmSGRLdRqcJhnJycqiqqiIkJMRufkhICJmZjvuwyczMdLh+ZWUlOTk5hIWF1dpm+fLlPPPMMy134E5a+tVSkguSuWvwXVwXY60D9X8//h/v/fAe5iozH836yOF2TanLMyR4CJlFmexN2cvelL08EPcAYb7Wsnj1+1d574f3iPaL5tmJzwLVH1ahPqF1fsusj4+7D738e1lHH+/RTxtUdnDQYO14ErITOJh2kINpB5k7Yq7zLck6gAjfCPwMfigozcqS1Hxk9GnCp6w9vpbLxZf58ldftmwdqqv69+yPq96V4opitp3fps2P9I3kf6f/LwDn887zwncvaMtyS3KZ2ndqi/X7Y/vIKKs4y66F2pDgIXbbqPdMUw0JGsLWc1sdvo+6r+buoz4Deg7AReeCqdzEl4lfUlRepAVDtv1IRRojtRaXGUUZWjAIMCl2EtdFX2d3TVSDgwbjqnflZ4E/IyE7gZ1JO9lzcQ+/i/9drZHn67ufhgQNYV/KPgYHt15ZCNGRdJpgSFUzS6AoSr2ZA0frO5qvevzxx1myZIn2urCwkKioqKYerlMqLZXaHyb1Gx5AckGydV5B3XVQtD+evs5/IL0/432+uvAVj2x7hJySHFIKU7RgSNunzXE0pw8d1df3fk1+WT5B3kHcGHsjO+/dybCQYQCsunkVtw+4nSd2PkFSfhIpBSktss+2YnA1sO/+fSiKgodr03q9jjRGcjj9sF2WpOb1b40yCfEJ4cD9BziZfRKAXRd3sfb4Wof3oUpd1lL9/tiec80WavcOv5dg72Dyy/Lp4dmDaX2nNWlfqmU3LGNq36lMiJlQa9nMn83kq998VWcWtiWE+Yax//79fJn4Jc/secaunHNLc7Ven8N9w4nxi2H7Pdu1ukPrfljHzqSdpBSkaNckwjeC5Tdaqwh4uXlxU7+bANjy6y3subiH+zffT4WlgsyiTK0uEdgPeeLofvrHlH9w1+C7uKHXDS1fCEJ0QJ0mGAoMDMTFxaVWFigrK6tW9kcVGhrqcH1XV1d69uzpcBuDwYChjsqmreVykfUxFDgerbu+ipDaqNON+EAK8Qnh18N+zWsHXyOnJIfUwlStIrOjfbZElqZ3QG/tZ51Ox8TYidrrHp49mDN0Du+feF8blqI1siCtaVDQoGZt72icMPXapham2g2U29LZsvjweO3RnNFgZO3xtQ7vw8FBg0nITtCG72juNXJ0zjXf083FjVsHON+zdUN83H34Re9fOFzmonfhxt43tti+6jI6YjSBXoE8s+cZ0grTtC906rkHeQXh7uIOwOQ+k7Xtzl05p3VDoZbZgMAB/Gb4b2rtI9ovmt8M/w1P7nqS5IJkUgtT7YIh9VG1wcVgN4CyymgwtklZCNFRtP+w305yd3cnPj6eHTt22M3fsWMH48aNc7jN2LFja62/fft2Ro0a5bC+UHuxbTrraMTqdFM6FsXieNtm9gxd1z4dfVtvTPapKbQ6JKY0LRDoDJmhluBoBHn1GuSV5XHuinUUeE9Xz0YNlNtYjrpeUI8jLiwOV70rFsXC6ZzTze4N27Z/JTVj25kygs0R7mvtm8pcZdaC3IbO3fYecfYRpaP7qua+OnSdPCHaSKcJhgCWLFnCO++8w7vvvsupU6dYvHgxycnJWr9Bjz/+OPfee6+2/oIFC7h06RJLlizh1KlTvPvuu6xZs4ZHH320vU7BIUfZANv5FZYKsouza21nu05zWnmp72Eymyg0F9Y6praqv2Pb0qazZYaay2FmyOZnrTWV0blWg01Vc/BW2+OIMkZpH+Lq8TSqN+wa1OtdXFGs3XeNGWevMzO4GgjyCgKqy7eh3zPbQNXZ33tH95Uz+xKiu+lUwdDdd9/NypUrefbZZxkxYgTffPMNW7ZsISYmBoCMjAySk6vrN8TGxrJlyxZ2797NiBEj+Nvf/sarr77a4ZrV22Vmrv5cXlVOVnFW9XwHHa/Z9jrbrMxQjYEwAUzltQOj1v62btsHS3fJEKhqXgtFUeyuR0v0s+MMtY8Zi2LR7i3bLIT64dqS/f7Y7qM7XfeamdmGMrC2mbRGZ4YK684MCSE6UZ0h1cKFC1m4cKHDZevWras1b8KECRw9erSVj6p5HGUD1Gf6tvPjwuwHdVTrGrnoXJrUSZzWmqeOuklphWkYg4xtlqVR3/9S/iXtg7i7fHOteS3yy/K1VndQHXy09jWw7WMmtTDVbhDaCGN1HzYt0SO0un1eWR6phakMChrUrTIWEcYIjmUeq84MFTaQGbp67XNKcjh/5bzdvDr3oWaGTLV/t53ZXojuolNlhroq2wxAzcqp2jr1DGQa7hvepCbvtTJDNfdpslbubOvM0JncM1qQF+LtuHJ8V6N+KBWVF1FoLqyVCfwp6yegbb7J1+yI0VFmSDueZtYjqzM70g0yFrZ15IAG68n18OyhtVZMyE6od11tH3VlhrpZnTwhGiLBUAdg+8FXpVRxuehyrQ/DesfuauK3aNsPvZqPZdT5+WX5lFZah39Q64u0FvU81MriYb5hTQryOiN1oFDArjWdSi2TtvgmbxskV1RVcLnosrZvdZl2PM3NDNmMXm/bz053yFjU7I26oXPX6XTaMmfLv66xCLtTOQvhDAmGOgBHwxHUNUSBo3nN7fSutLJUe1RR13H09OyJp5tnk/bjLD+DH95u1SNkd7dvrbbf4uvqTqEtM0OphalkFGWgoOCmdyPIO6jWh29L9Ait7qvAXNDsFmqdSc1xypz5fbZd5swYarb3lNpiz9l9CdGdSDDUzmy/Dat/2NJMaQ7n1dTcljcerh709LT2t5RWWN1c1+442rAOh06n69YjZtsGITWvhbZOG1wHuybchdWPYvU6fa0Pz2aPFWaTGVL31ZwWap2JbWa2qLyIAnOBdX4919h2mTNjqDlqwl9lqbIb8kQIIcFQu8sry9MeQ9l2fKh+W7wm4hptXk0t8e3O9pu5+n62+2zrb5C2++lu31ptg5Ca16LmOq3JtjJ3zetfM/hpycxQd8tW2LUOuxoI+rr7YjQY697Gt3G/H+4u7lpArZZvzSFPhBASDLU79Y9goFcgfQL6aPPU+WqAVF8F6uZ8O7etU1Brn6a27+/Hdj/dNTNkm6VTrwXQZhXKbR+t1MwM1qw31hKtyeraV1ennmeBuYAzuWfs5jW0DTj/+1FXhXh1yBMhhARD7c628zTbZrA1MwO2/f7U3LZZmaGr3zST8pK0UbIlM9Q+HPWzpPb6DG1Xodz2cV3Nvm9sOwtsid6w1XPOLsnWmou3dk/nHYXRYMTX3RewjmIPzrcOc2bdmuvV7EKju/1+CVEfCYbamW2zZfWPU0pBitbP0IDAAfgZ/Kzr2mSH7FreNOObtLrtofRDgDWtPiJ0BGBNpyflJ1nXa4/MUDfJEKgc9cBt2+tzW10D23omP17+0e7YwOaRWQv0hh3gEaA1F1fvwe503dVzdbYfqaZkTm3rZYG0JBPCEQmG2pltZkj9kDmeeZwKSwU6dIT5hNX6Zgf2dY2a0+S9Vid6vhEEegVicLEOVqt+QElmqPWp53vuyjmtsqttkNxW5WFwNWj1TBz1NN2Sx6PT6Wrdg93pumvnnurcuUtmSIjWIQ+M25ntQKvqt0RTuQmwji7v5uJGhDGChOwEZn0yC4OrNUipslhHuQ/0CtS+WTeF+u1QfQSnftuPMEZwIe+C3fy2ULO1THeiXgv1+nu6euLv4a/Nb8tv8hG+EWQVZ1VffwcZiZY6ngjfCM5dOedwX11dzWve0LmH+ISg1+mxKBanfydr9jXUXcZ/E6IxJDPUztRWYxHGCKKMUUT7RWvLxkePB+C66OsA6x/MnJIcckpyyCvLs1unqUaEjrDr22d8lP0+wVrRUq3c3doGBg4k0CuQUeGjmhXkdUY9PHvws8Cfaa/HR49Hp9Np1+Ln0T9vs2Oxvf7+Hv4MDh5sd1y2/zeX7ft4uXkxMmxki7xvZ2Bbznqdnmsjr613fVe9K+OixuFn8GNw0OB611VJZkiIhukU2564RC2FhYX4+flRUFCA0Vh3k9emulJ6hZSCFMJ9wwnyDqKkooSL+RfR6/T069EPF70LiqJwIe8C5iqz3bY6dPTv2b/ZlWrzy/JJN6Xj7uJOn4A+6HQ6LIqFxNxEqpQqov2i8XH3adY+GsNkNmFwNeDu4t5m++woyirLuJB3AR06+vXsp1WevlJ6hR6ePdrsOBRFIfFKIpWWSiKNkbWae+eW5NLTq2eL7et83nnKq8oJ8wkjwLN5lbI7m0v5lyiuKCbQK9CpMQYrqioorSyttwm+rVPZpxi0ahB+Bj/yH8tnwOsDOJt7ll1zd3FDrxuaefRCdFyN+fyWYKgBrR0MCSFEazKZTRhftP7tMj1uImRFCCUVJSQ+lEjfHn3b+eiEaD2N+fyWx2RCCNGF+Rp8tSb8CVkJlFSUAFJnSAhbEgwJIUQXV7PFXg/PHq0+1qAQnYkEQ0II0cU1tj8jIbobCYaEEKKLa2x/RkJ0NxIMCSFEF6dmgs7nnbd7LYSwkmBICCG6uJqZIMkMCWFPgiEhhOjiamaCutP4b0I4Q4IhIYTo4iQzJET9JBgSQogurmYmSOoMCWFPgiEhhOjiAr0C7Ya3kcyQEPYkGBJCiC5Or9MT7hsOgKerJ/4e/u17QEJ0MBIMCSFEN6BmgyKNkeh0unY+GiE6FgmGhBCiG1DrCUlLMiFqk2BICCG6AdvMkBDCngRDQgjRDdwx8A5i/WO5c9Cd7X0oQnQ4ru19AEIIIVrf+OjxXPjDhfY+DCE6JMkMCSGEEKJbk2BICCGEEN1apwiGLl68yP33309sbCyenp706dOHZcuWUV5eXu928+bNQ6fT2U3XXnttGx21EEIIITqDTlFn6PTp01gsFt566y369u3LTz/9xPz58ykuLmbFihX1bjtt2jTWrl2rvXZ3d69nbSGEEEJ0N50iGJo2bRrTpk3TXvfu3ZszZ86wevXqBoMhg8FAaGhoax+iEEIIITqpTvGYzJGCggJ69OjR4Hq7d+8mODiY/v37M3/+fLKysupd32w2U1hYaDcJIYQQouvqlMHQ+fPnee2111iwYEG9602fPp0PPviAnTt38vLLL3Po0CEmTZqE2Wyuc5vly5fj5+enTVFRUS19+EIIIYToQHSKoijttfOnn36aZ555pt51Dh06xKhRo7TX6enpTJgwgQkTJvDOO+80an8ZGRnExMTw8ccfM3PmTIfrmM1mu2CpsLCQqKgoCgoKMBqNjdqfEEIIIdpHYWEhfn5+Tn1+t2udoUWLFjF79ux61+nVq5f2c3p6OhMnTmTs2LG8/fbbjd5fWFgYMTExJCYm1rmOwWDAYDA0+r2FEEII0Tm1azAUGBhIYGCgU+umpaUxceJE4uPjWbt2LXp945/w5ebmkpKSQlhYWKO3FUIIIUTX1CnqDKWnp3PDDTcQFRXFihUryM7OJjMzk8zMTLv1Bg4cyMaNGwEoKiri0UcfZf/+/Vy8eJHdu3dz6623EhgYyIwZM9rjNIQQQgjRAXWKpvXbt2/n3LlznDt3jshI+xGXbas8nTlzhoKCAgBcXFw4ceIE//73v8nPzycsLIyJEyeyfv16fH192/T4hRBCCNFxtWsF6s6gMRWwhBBCCNExNObzu1M8JhNCCCGEaC2d4jFZe1ITZ9L5ohBCCNF5qJ/bzjwAk2CoASaTCUA6XxRCCCE6IZPJhJ+fX73rSJ2hBlgsFtLT0/H19UWn07Xoe6sdOqakpEh9pFYk5dw2pJzbhpRz25BybhutWc6KomAymQgPD2+wOx7JDDVAr9fXasHW0oxGo/yytQEp57Yh5dw2pJzbhpRz22itcm4oI6SSCtRCCCGE6NYkGBJCCCFEtybBUDsyGAwsW7ZMxkJrZVLObUPKuW1IObcNKee20VHKWSpQCyGEEKJbk8yQEEIIIbo1CYaEEEII0a1JMCSEEEKIbk2CISGEEEJ0axIMtZNVq1YRGxuLh4cH8fHxfPvtt+19SJ3a008/jU6ns5tCQ0O15Yqi8PTTTxMeHo6npyc33HADCQkJ7XjEncM333zDrbfeSnh4ODqdjk2bNtktd6ZczWYzDz30EIGBgXh7e3PbbbeRmprahmfR8TVUzvPmzat1f1977bV260g5N2z58uWMHj0aX19fgoODueOOOzhz5ozdOnJPN58z5dzR7mkJhtrB+vXreeSRR3jiiSc4duwY1113HdOnTyc5Obm9D61TGzx4MBkZGdp04sQJbdlLL73EK6+8wuuvv86hQ4cIDQ1l8uTJ2thzwrHi4mKGDx/O66+/7nC5M+X6yCOPsHHjRj7++GO+++47ioqKuOWWW6iqqmqr0+jwGipngGnTptnd31u2bLFbLuXcsD179vD73/+eAwcOsGPHDiorK5kyZQrFxcXaOnJPN58z5Qwd7J5WRJsbM2aMsmDBArt5AwcOVB577LF2OqLOb9myZcrw4cMdLrNYLEpoaKjy4osvavPKysoUPz8/5c0332yjI+z8AGXjxo3aa2fKNT8/X3Fzc1M+/vhjbZ20tDRFr9crW7dubbNj70xqlrOiKMrcuXOV22+/vc5tpJybJisrSwGUPXv2KIoi93RrqVnOitLx7mnJDLWx8vJyjhw5wpQpU+zmT5kyhX379rXTUXUNiYmJhIeHExsby+zZs7lw4QIASUlJZGZm2pW5wWBgwoQJUubN4Ey5HjlyhIqKCrt1wsPDGTJkiJR9I+3evZvg4GD69+/P/PnzycrK0pZJOTdNQUEBAD169ADknm4tNctZ1ZHuaQmG2lhOTg5VVVWEhITYzQ8JCSEzM7Odjqrzu+aaa/j3v//Ntm3b+Ne//kVmZibjxo0jNzdXK1cp85blTLlmZmbi7u5OQEBAneuIhk2fPp0PPviAnTt38vLLL3Po0CEmTZqE2WwGpJybQlEUlixZwvjx4xkyZAgg93RrcFTO0PHuaRm1vp3odDq714qi1JonnDd9+nTt56FDhzJ27Fj69OnDe++9p1XKkzJvHU0pVyn7xrn77ru1n4cMGcKoUaOIiYnhyy+/ZObMmXVuJ+Vct0WLFvHjjz/y3Xff1Vom93TLqaucO9o9LZmhNhYYGIiLi0utyDYrK6vWtxHRdN7e3gwdOpTExEStVZmUectyplxDQ0MpLy8nLy+vznVE44WFhRETE0NiYiIg5dxYDz30EJs3b2bXrl1ERkZq8+Webll1lbMj7X1PSzDUxtzd3YmPj2fHjh1283fs2MG4cePa6ai6HrPZzKlTpwgLCyM2NpbQ0FC7Mi8vL2fPnj1S5s3gTLnGx8fj5uZmt05GRgY//fSTlH0z5ObmkpKSQlhYGCDl7CxFUVi0aBEbNmxg586dxMbG2i2Xe7plNFTOjrT7Pd3iVbJFgz7++GPFzc1NWbNmjXLy5EnlkUceUby9vZWLFy+296F1Wn/84x+V3bt3KxcuXFAOHDig3HLLLYqvr69Wpi+++KLi5+enbNiwQTlx4oQyZ84cJSwsTCksLGznI+/YTCaTcuzYMeXYsWMKoLzyyivKsWPHlEuXLimK4ly5LliwQImMjFS++uor5ejRo8qkSZOU4cOHK5WVle11Wh1OfeVsMpmUP/7xj8q+ffuUpKQkZdeuXcrYsWOViIgIKedGevDBBxU/Pz9l9+7dSkZGhjaVlJRo68g93XwNlXNHvKclGGonb7zxhhITE6O4u7srcXFxdk0ORePdfffdSlhYmOLm5qaEh4crM2fOVBISErTlFotFWbZsmRIaGqoYDAbl+uuvV06cONGOR9w57Nq1SwFqTXPnzlUUxblyLS0tVRYtWqT06NFD8fT0VG655RYlOTm5Hc6m46qvnEtKSpQpU6YoQUFBipubmxIdHa3MnTu3VhlKOTfMURkDytq1a7V15J5uvobKuSPe07qrBy6EEEII0S1JnSEhhBBCdGsSDAkhhBCiW5NgSAghhBDdmgRDQgghhOjWJBgSQgghRLcmwZAQQgghujUJhoQQQgjRrUkwJIQQQohuTYIhIUSnlZWVxe9+9zuio6MxGAyEhoYydepU9u/fD1hHH9+0aVP7HqQQosNzbe8DEEKIppo1axYVFRW899579O7dm8uXL/P1119z5cqV9j40IUQnIpkhIUSnlJ+fz3fffcff//53Jk6cSExMDGPGjOHxxx/n5ptvplevXgDMmDEDnU6nvQb4/PPPiY+Px8PDg969e/PMM89QWVmpLdfpdKxevZrp06fj6elJbGwsn376qba8vLycRYsWERYWhoeHB7169WL58uVtdepCiBYmwZAQolPy8fHBx8eHTZs2YTabay0/dOgQAGvXriUjI0N7vW3bNu655x4efvhhTp48yVtvvcW6det4/vnn7bb/61//yqxZs/jhhx+45557mDNnDqdOnQLg1VdfZfPmzXzyySecOXOG999/3y7YEkJ0LjJQqxCi0/rss8+YP38+paWlxMXFMWHCBGbPns2wYcMAa4Zn48aN3HHHHdo2119/PdOnT+fxxx/X5r3//vssXbqU9PR0bbsFCxawevVqbZ1rr72WuLg4Vq1axcMPP0xCQgJfffUVOp2ubU5WCNFqJDMkhOi0Zs2aRXp6Ops3b2bq1Kns3r2buLg41q1bV+c2R44c4dlnn9UySz4+PsyfP5+MjAxKSkq09caOHWu33dixY7XM0Lx58zh+/DgDBgzg4YcfZvv27a1yfkKItiHBkBCiU/Pw8GDy5Mk89dRT7Nu3j3nz5rFs2bI617dYLDzzzDMcP35cm06cOEFiYiIeHh717kvNAsXFxZGUlMTf/vY3SktLueuuu/jlL3/ZouclhGg7EgwJIbqUQYMGUVxcDICbmxtVVVV2y+Pi4jhz5gx9+/atNen11X8SDxw4YLfdgQMHGDhwoPbaaDRy9913869//Yv169fz2WefSSs2ITopaVovhOiUcnNzufPOO7nvvvsYNmwYvr6+HD58mJdeeonbb78dgF69evH111/z85//HIPBQEBAAE899RS33HILUVFR3Hnnnej1en788UdOnDjBc889p73/p59+yqhRoxg/fjwffPABBw8eZM2aNQD885//JCwsjBEjRqDX6/n0008JDQ3F39+/PYpCCNFcihBCdEJlZWXKY489psTFxSl+fn6Kl5eXMmDAAOXJJ59USkpKFEVRlM2bNyt9+/ZVXF1dlZiYGG3brVu3KuPGjVM8PT0Vo9GojBkzRnn77be15YDyxhtvKJMnT1YMBoMSExOjfPTRR9ryt99+WxkxYoTi7e2tGI1G5cYbb1SOHj3aZucuhGhZ0ppMCCFqcNQKTQjRdUmdISGEEEJ0axIMCSGEEKJbkwrUQghRg9QeEKJ7kcyQEEIIIbo1CYaEEEII0a1JMCSEEEKIbk2CISGEEEJ0axIMCSGEEKJbk2BICCGEEN2aBENCCCGE6NYkGBJCCCFEtybBkBBCCCG6tf8P3XA2HBKLxuYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_1.png"
}
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_2.png"
}
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn.linear_model import LinearRegression\n",
"\n",
"steps=250\n",
"\n",
"distance=0\n",
"x=0\n",
"distance_list=[]\n",
"steps_list=[]\n",
"while x<steps:\n",
" distance+=np.random.randint(-1,2)\n",
" distance_list.append(distance)\n",
" x+=1\n",
" steps_list.append(x)\n",
"plt.plot(steps_list,distance_list, color='green', label=\"Random Walk Data\")\n",
"\n",
"steps_list=np.asarray(steps_list)\n",
"distance_list=np.asarray(distance_list)\n",
"\n",
"X=steps_list[:,np.newaxis]\n",
"\n",
"#Polynomial fits\n",
"\n",
"#Degree 2\n",
"poly_features=PolynomialFeatures(degree=2, include_bias=False)\n",
"X_poly=poly_features.fit_transform(X)\n",
"\n",
"lin_reg=LinearRegression()\n",
"poly_fit=lin_reg.fit(X_poly,distance_list)\n",
"b=lin_reg.coef_\n",
"c=lin_reg.intercept_\n",
"print (\"2nd degree coefficients:\")\n",
"print (\"zero power: \",c)\n",
"print (\"first power: \", b[0])\n",
"print (\"second power: \",b[1])\n",
"\n",
"z = np.arange(0, steps, .01)\n",
"z_mod=b[1]*z**2+b[0]*z+c\n",
"\n",
"fit_mod=b[1]*X**2+b[0]*X+c\n",
"plt.plot(z, z_mod, color='r', label=\"2nd Degree Fit\")\n",
"plt.title(\"Polynomial Regression\")\n",
"\n",
"plt.xlabel(\"Steps\")\n",
"plt.ylabel(\"Distance\")\n",
"\n",
"#Degree 10\n",
"poly_features10=PolynomialFeatures(degree=10, include_bias=False)\n",
"X_poly10=poly_features10.fit_transform(X)\n",
"\n",
"poly_fit10=lin_reg.fit(X_poly10,distance_list)\n",
"\n",
"y_plot=poly_fit10.predict(X_poly10)\n",
"plt.plot(X, y_plot, color='black', label=\"10th Degree Fit\")\n",
"\n",
"plt.legend()\n",
"plt.show()\n",
"\n",
"\n",
"#Decision Tree Regression\n",
"from sklearn.tree import DecisionTreeRegressor\n",
"regr_1=DecisionTreeRegressor(max_depth=2)\n",
"regr_2=DecisionTreeRegressor(max_depth=5)\n",
"regr_3=DecisionTreeRegressor(max_depth=7)\n",
"regr_1.fit(X, distance_list)\n",
"regr_2.fit(X, distance_list)\n",
"regr_3.fit(X, distance_list)\n",
"\n",
"X_test = np.arange(0.0, steps, 0.01)[:, np.newaxis]\n",
"y_1 = regr_1.predict(X_test)\n",
"y_2 = regr_2.predict(X_test)\n",
"y_3=regr_3.predict(X_test)\n",
"\n",
"# Plot the results\n",
"plt.figure()\n",
"plt.scatter(X, distance_list, s=2.5, c=\"black\", label=\"data\")\n",
"plt.plot(X_test, y_1, color=\"red\",\n",
" label=\"max_depth=2\", linewidth=2)\n",
"plt.plot(X_test, y_2, color=\"green\", label=\"max_depth=5\", linewidth=2)\n",
"plt.plot(X_test, y_3, color=\"m\", label=\"max_depth=7\", linewidth=2)\n",
"\n",
"plt.xlabel(\"Data\")\n",
"plt.ylabel(\"Darget\")\n",
"plt.title(\"Decision Tree Regression\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Building a tree, regression\n",
"\n",
"There are mainly two steps\n",
"1. We split the predictor space (the set of possible values $x_1,x_2,\\dots, x_p$) into $J$ distinct and non-non-overlapping regions, $R_1,R_2,\\dots,R_J$. \n",
"\n",
"2. For every observation that falls into the region $R_j$ , we make the same prediction, which is simply the mean of the response values for the training observations in $R_j$.\n",
"\n",
"How do we construct the regions $R_1,\\dots,R_J$? In theory, the\n",
"regions could have any shape. However, we choose to divide the\n",
"predictor space into high-dimensional rectangles, or boxes, for\n",
"simplicity and for ease of interpretation of the resulting predictive\n",
"model. The goal is to find boxes $R_1,\\dots,R_J$ that minimize the\n",
"MSE, given by"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\sum_{j=1}^J\\sum_{i\\in R_j}(y_i-\\overline{y}_{R_j})^2,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $\\overline{y}_{R_j}$ is the mean response for the training observations \n",
"within box $j$. \n",
"\n",
"\n",
"Unfortunately, it is computationally infeasible to consider every\n",
"possible partition of the feature space into $J$ boxes. The common\n",
"strategy is to take a top-down approach\n",
"\n",
"The approach is top-down because it begins at the top of the tree (all\n",
"observations belong to a single region) and then successively splits\n",
"the predictor space; each split is indicated via two new branches\n",
"further down on the tree. It is greedy because at each step of the\n",
"tree-building process, the best split is made at that particular step,\n",
"rather than looking ahead and picking a split that will lead to a\n",
"better tree in some future step.\n",
"\n",
"\n",
"### Making a tree\n",
"\n",
"In order to implement the recursive binary splitting we start by selecting\n",
"the predictor $x_j$ and a cutpoint $s$ that splits the predictor space into two regions $R_1$ and $R_2$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\left\\{X\\vert x_j < s\\right\\},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\left\\{X\\vert x_j \\geq s\\right\\},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"so that we obtain the lowest MSE, that is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\sum_{i:x_i\\in R_j}(y_i-\\overline{y}_{R_1})^2+\\sum_{i:x_i\\in R_2}(y_i-\\overline{y}_{R_2})^2,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which we want to minimize by considering all predictors\n",
"$x_1,x_2,\\dots,x_p$. We consider also all possible values of $s$ for\n",
"each predictor. These values could be determined by randomly assigned\n",
"numbers or by starting at the midpoint and then proceed till we find\n",
"an optimal value.\n",
"\n",
"For any $j$ and $s$, we define the pair of half-planes where\n",
"$\\overline{y}_{R_1}$ is the mean response for the training\n",
"observations in $R_1(j,s)$, and $\\overline{y}_{R_2}$ is the mean\n",
"response for the training observations in $R_2(j,s)$.\n",
"\n",
"Finding the values of $j$ and $s$ that minimize the above equation can be\n",
"done quite quickly, especially when the number of features $p$ is not\n",
"too large.\n",
"\n",
"Next, we repeat the process, looking\n",
"for the best predictor and best cutpoint in order to split the data\n",
"further so as to minimize the MSE within each of the resulting\n",
"regions. However, this time, instead of splitting the entire predictor\n",
"space, we split one of the two previously identified regions. We now\n",
"have three regions. Again, we look to split one of these three regions\n",
"further, so as to minimize the MSE. The process continues until a\n",
"stopping criterion is reached; for instance, we may continue until no\n",
"region contains more than five observations.\n",
"\n",
"\n",
"The above procedure is rather straightforward, but leads often to\n",
"overfitting and unnecessarily large and complicated trees. The basic\n",
"idea is to grow a large tree $T_0$ and then prune it back in order to\n",
"obtain a subtree. A smaller tree with fewer splits (fewer regions) can\n",
"lead to smaller variance and better interpretation at the cost of a\n",
"little more bias.\n",
"\n",
"The so-called Cost complexity pruning algorithm gives us a\n",
"way to do just this. Rather than considering every possible subtree,\n",
"we consider a sequence of trees indexed by a nonnegative tuning\n",
"parameter $\\alpha$.\n",
"\n",
"Read more at the following [Scikit-Learn link on pruning](https://scikit-learn.org/stable/auto_examples/tree/plot_cost_complexity_pruning.html#sphx-glr-auto-examples-tree-plot-cost-complexity-pruning-py).\n",
"\n",
"\n",
"For each value of $\\alpha$ there corresponds a subtree $T \\in T_0$ such that"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\sum_{m=1}^{\\overline{T}}\\sum_{i:x_i\\in R_m}(y_i-\\overline{y}_{R_m})^2+\\alpha\\overline{T},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"is as small as possible. Here $\\overline{T}$ is \n",
"the number of terminal nodes of the tree $T$ , $R_m$ is the\n",
"rectangle (i.e. the subset of predictor space) corresponding to the $m$-th terminal node.\n",
"\n",
"The tuning parameter $\\alpha$ controls a trade-off between the subtrees\n",
"complexity and its fit to the training data. When $\\alpha = 0$, then the\n",
"subtree $T$ will simply equal $T_0$, \n",
"because then the above equation just measures the\n",
"training error. \n",
"However, as $\\alpha$ increases, there is a price to pay for\n",
"having a tree with many terminal nodes. The above equation will\n",
"tend to be minimized for a smaller subtree. \n",
"\n",
"\n",
"It turns out that as we increase $\\alpha$ from zero\n",
"branches get pruned from the tree in a nested and predictable fashion,\n",
"so obtaining the whole sequence of subtrees as a function of $\\alpha$ is\n",
"easy. We can select a value of $\\alpha$ using a validation set or using\n",
"cross-validation. We then return to the full data set and obtain the\n",
"subtree corresponding to $\\alpha$. \n",
"\n",
"\n",
"### Schematic Regression Procedure\n",
"\n",
"Building a Regression Tree\n",
"\n",
"1. Use recursive binary splitting to grow a large tree on the training data, stopping only when each terminal node has fewer than some minimum number of observations.\n",
"\n",
"2. Apply cost complexity pruning to the large tree in order to obtain a sequence of best subtrees, as a function of $\\alpha$.\n",
"\n",
"3. Use for example $K$-fold cross-validation to choose $\\alpha$. Divide the training observations into $K$ folds. For each $k=1,2,\\dots,K$ we: \n",
"\n",
" * repeat steps 1 and 2 on all but the $k$-th fold of the training data. \n",
"\n",
" * Then we valuate the mean squared prediction error on the data in the left-out $k$-th fold, as a function of $\\alpha$.\n",
"\n",
" * Finally we average the results for each value of $\\alpha$, and pick $\\alpha$ to minimize the average error.\n",
"\n",
"\n",
"4. Return the subtree from Step 2 that corresponds to the chosen value of $\\alpha$. \n",
"\n",
"!eblock\n",
"\n",
"\n",
"\n",
"## A Classification Tree\n",
"\n",
"A classification tree is very similar to a regression tree, except\n",
"that it is used to predict a qualitative response rather than a\n",
"quantitative one. Recall that for a regression tree, the predicted\n",
"response for an observation is given by the mean response of the\n",
"training observations that belong to the same terminal node. In\n",
"contrast, for a classification tree, we predict that each observation\n",
"belongs to the most commonly occurring class of training observations\n",
"in the region to which it belongs. In interpreting the results of a\n",
"classification tree, we are often interested not only in the class\n",
"prediction corresponding to a particular terminal node region, but\n",
"also in the class proportions among the training observations that\n",
"fall into that region. \n",
"\n",
"\n",
"\n",
"The task of growing a\n",
"classification tree is quite similar to the task of growing a\n",
"regression tree. Just as in the regression setting, we use recursive\n",
"binary splitting to grow a classification tree. However, in the\n",
"classification setting, the MSE cannot be used as a criterion for making\n",
"the binary splits. A natural alternative to MSE is the **classification\n",
"error rate**. Since we plan to assign an observation in a given region\n",
"to the most commonly occurring error rate class of training\n",
"observations in that region, the classification error rate is simply\n",
"the fraction of the training observations in that region that do not\n",
"belong to the most common class. \n",
"\n",
"When building a classification tree, either the Gini index or the\n",
"entropy are typically used to evaluate the quality of a particular\n",
"split, since these two approaches are more sensitive to node purity\n",
"than is the classification error rate. \n",
"\n",
"\n",
"\n",
"If our targets are the outcome of a classification process that takes\n",
"for example $k=1,2,\\dots,K$ values, the only thing we need to think of\n",
"is to set up the splitting criteria for each node.\n",
"\n",
"We define a PDF $p_{mk}$ that represents the number of observations of\n",
"a class $k$ in a region $R_m$ with $N_m$ observations. We represent\n",
"this likelihood function in terms of the proportion $I(y_i=k)$ of\n",
"observations of this class in the region $R_m$ as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"p_{mk} = \\frac{1}{N_m}\\sum_{x_i\\in R_m}I(y_i=k).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We let $p_{mk}$ represent the majority class of observations in region\n",
"$m$. The three most common ways of splitting a node are given by\n",
"\n",
"* Misclassification error"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"p_{mk} = \\frac{1}{N_m}\\sum_{x_i\\in R_m}I(y_i\\ne k) = 1-p_{mk}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Gini index $g$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"g = \\sum_{k=1}^K p_{mk}(1-p_{mk}).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Information entropy or just entropy $s$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"s = -\\sum_{k=1}^K p_{mk}\\log{p_{mk}}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Visualizing the Tree, Classification"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" mean radius mean texture mean perimeter mean area mean smoothness \\\n",
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
"3 11.42 20.38 77.58 386.1 0.14250 \n",
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
".. ... ... ... ... ... \n",
"564 21.56 22.39 142.00 1479.0 0.11100 \n",
"565 20.13 28.25 131.20 1261.0 0.09780 \n",
"566 16.60 28.08 108.30 858.1 0.08455 \n",
"567 20.60 29.33 140.10 1265.0 0.11780 \n",
"568 7.76 24.54 47.92 181.0 0.05263 \n",
"\n",
" mean compactness mean concavity mean concave points mean symmetry \\\n",
"0 0.27760 0.30010 0.14710 0.2419 \n",
"1 0.07864 0.08690 0.07017 0.1812 \n",
"2 0.15990 0.19740 0.12790 0.2069 \n",
"3 0.28390 0.24140 0.10520 0.2597 \n",
"4 0.13280 0.19800 0.10430 0.1809 \n",
".. ... ... ... ... \n",
"564 0.11590 0.24390 0.13890 0.1726 \n",
"565 0.10340 0.14400 0.09791 0.1752 \n",
"566 0.10230 0.09251 0.05302 0.1590 \n",
"567 0.27700 0.35140 0.15200 0.2397 \n",
"568 0.04362 0.00000 0.00000 0.1587 \n",
"\n",
" mean fractal dimension ... worst radius worst texture \\\n",
"0 0.07871 ... 25.380 17.33 \n",
"1 0.05667 ... 24.990 23.41 \n",
"2 0.05999 ... 23.570 25.53 \n",
"3 0.09744 ... 14.910 26.50 \n",
"4 0.05883 ... 22.540 16.67 \n",
".. ... ... ... ... \n",
"564 0.05623 ... 25.450 26.40 \n",
"565 0.05533 ... 23.690 38.25 \n",
"566 0.05648 ... 18.980 34.12 \n",
"567 0.07016 ... 25.740 39.42 \n",
"568 0.05884 ... 9.456 30.37 \n",
"\n",
" worst perimeter worst area worst smoothness worst compactness \\\n",
"0 184.60 2019.0 0.16220 0.66560 \n",
"1 158.80 1956.0 0.12380 0.18660 \n",
"2 152.50 1709.0 0.14440 0.42450 \n",
"3 98.87 567.7 0.20980 0.86630 \n",
"4 152.20 1575.0 0.13740 0.20500 \n",
".. ... ... ... ... \n",
"564 166.10 2027.0 0.14100 0.21130 \n",
"565 155.00 1731.0 0.11660 0.19220 \n",
"566 126.70 1124.0 0.11390 0.30940 \n",
"567 184.60 1821.0 0.16500 0.86810 \n",
"568 59.16 268.6 0.08996 0.06444 \n",
"\n",
" worst concavity worst concave points worst symmetry \\\n",
"0 0.7119 0.2654 0.4601 \n",
"1 0.2416 0.1860 0.2750 \n",
"2 0.4504 0.2430 0.3613 \n",
"3 0.6869 0.2575 0.6638 \n",
"4 0.4000 0.1625 0.2364 \n",
".. ... ... ... \n",
"564 0.4107 0.2216 0.2060 \n",
"565 0.3215 0.1628 0.2572 \n",
"566 0.3403 0.1418 0.2218 \n",
"567 0.9387 0.2650 0.4087 \n",
"568 0.0000 0.0000 0.2871 \n",
"\n",
" worst fractal dimension \n",
"0 0.11890 \n",
"1 0.08902 \n",
"2 0.08758 \n",
"3 0.17300 \n",
"4 0.07678 \n",
".. ... \n",
"564 0.07115 \n",
"565 0.06637 \n",
"566 0.07820 \n",
"567 0.12400 \n",
"568 0.07039 \n",
"\n",
"[569 rows x 30 columns]\n",
" malignant benign\n",
"0 1 0\n",
"1 1 0\n",
"2 1 0\n",
"3 1 0\n",
"4 1 0\n",
".. ... ...\n",
"564 1 0\n",
"565 1 0\n",
"566 1 0\n",
"567 1 0\n",
"568 0 1\n",
"\n",
"[569 rows x 2 columns]\n"
]
},
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import os\n",
"from sklearn.datasets import load_breast_cancer\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import confusion_matrix\n",
"from sklearn.tree import export_graphviz\n",
"\n",
"from IPython.display import Image \n",
"from pydot import graph_from_dot_data\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"\n",
"cancer = load_breast_cancer()\n",
"X = pd.DataFrame(cancer.data, columns=cancer.feature_names)\n",
"print(X)\n",
"y = pd.Categorical.from_codes(cancer.target, cancer.target_names)\n",
"y = pd.get_dummies(y)\n",
"print(y)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n",
"tree_clf = DecisionTreeClassifier(max_depth=5)\n",
"tree_clf.fit(X_train, y_train)\n",
"\n",
"export_graphviz(\n",
" tree_clf,\n",
" out_file=\"DataFiles/cancer.dot\",\n",
" feature_names=cancer.feature_names,\n",
" class_names=cancer.target_names,\n",
" rounded=True,\n",
" filled=True\n",
")\n",
"cmd = 'dot -Tpng DataFiles/cancer.dot -o DataFiles/cancer.png'\n",
"os.system(cmd)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Common imports\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split \n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.datasets import make_moons\n",
"from sklearn.tree import export_graphviz\n",
"from pydot import graph_from_dot_data\n",
"import pandas as pd\n",
"import os\n",
"\n",
"np.random.seed(42)\n",
"X, y = make_moons(n_samples=100, noise=0.25, random_state=53)\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0)\n",
"tree_clf = DecisionTreeClassifier(max_depth=5)\n",
"tree_clf.fit(X_train, y_train)\n",
"\n",
"export_graphviz(\n",
" tree_clf,\n",
" out_file=\"DataFiles/moons.dot\",\n",
" rounded=True,\n",
" filled=True\n",
")\n",
"cmd = 'dot -Tpng DataFiles/moons.dot -o DataFiles/moons.png'\n",
"os.system(cmd)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Other ways of visualizing the trees\n",
"\n",
"**Scikit-Learn** has also another way to visualize the trees which is very useful, here with the Iris data."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"[Text(0.5, 0.9166666666666666, 'X[2] <= 2.45\\ngini = 0.667\\nsamples = 150\\nvalue = [50, 50, 50]'),\n",
" Text(0.4230769230769231, 0.75, 'gini = 0.0\\nsamples = 50\\nvalue = [50, 0, 0]'),\n",
" Text(0.5769230769230769, 0.75, 'X[3] <= 1.75\\ngini = 0.5\\nsamples = 100\\nvalue = [0, 50, 50]'),\n",
" Text(0.3076923076923077, 0.5833333333333334, 'X[2] <= 4.95\\ngini = 0.168\\nsamples = 54\\nvalue = [0, 49, 5]'),\n",
" Text(0.15384615384615385, 0.4166666666666667, 'X[3] <= 1.65\\ngini = 0.041\\nsamples = 48\\nvalue = [0, 47, 1]'),\n",
" Text(0.07692307692307693, 0.25, 'gini = 0.0\\nsamples = 47\\nvalue = [0, 47, 0]'),\n",
" Text(0.23076923076923078, 0.25, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
" Text(0.46153846153846156, 0.4166666666666667, 'X[3] <= 1.55\\ngini = 0.444\\nsamples = 6\\nvalue = [0, 2, 4]'),\n",
" Text(0.38461538461538464, 0.25, 'gini = 0.0\\nsamples = 3\\nvalue = [0, 0, 3]'),\n",
" Text(0.5384615384615384, 0.25, 'X[2] <= 5.45\\ngini = 0.444\\nsamples = 3\\nvalue = [0, 2, 1]'),\n",
" Text(0.46153846153846156, 0.08333333333333333, 'gini = 0.0\\nsamples = 2\\nvalue = [0, 2, 0]'),\n",
" Text(0.6153846153846154, 0.08333333333333333, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
" Text(0.8461538461538461, 0.5833333333333334, 'X[2] <= 4.85\\ngini = 0.043\\nsamples = 46\\nvalue = [0, 1, 45]'),\n",
" Text(0.7692307692307693, 0.4166666666666667, 'X[1] <= 3.1\\ngini = 0.444\\nsamples = 3\\nvalue = [0, 1, 2]'),\n",
" Text(0.6923076923076923, 0.25, 'gini = 0.0\\nsamples = 2\\nvalue = [0, 0, 2]'),\n",
" Text(0.8461538461538461, 0.25, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 1, 0]'),\n",
" Text(0.9230769230769231, 0.4166666666666667, 'gini = 0.0\\nsamples = 43\\nvalue = [0, 0, 43]')]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {
"filenames": {
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_24_1.png"
}
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import load_iris\n",
"from sklearn import tree\n",
"X, y = load_iris(return_X_y=True)\n",
"tree_clf = tree.DecisionTreeClassifier()\n",
"tree_clf = tree_clf.fit(X, y)\n",
"# and then plot the tree\n",
"tree.plot_tree(tree_clf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Alternatively, the tree can also be exported in textual format with the function exporttext.\n",
"This method doesnt require the installation of external libraries and is more compact:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"|--- petal width (cm) <= 0.80\n",
"| |--- class: 0\n",
"|--- petal width (cm) > 0.80\n",
"| |--- petal width (cm) <= 1.75\n",
"| | |--- class: 1\n",
"| |--- petal width (cm) > 1.75\n",
"| | |--- class: 2\n",
"\n"
]
}
],
"source": [
"from sklearn.datasets import load_iris\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.tree import export_text\n",
"iris = load_iris()\n",
"decision_tree = DecisionTreeClassifier(random_state=0, max_depth=2)\n",
"decision_tree = decision_tree.fit(iris.data, iris.target)\n",
"r = export_text(decision_tree, feature_names=iris['feature_names'])\n",
"print(r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Algorithms for Setting up Decision Trees\n",
"\n",
"Two algorithms stand out in the set up of decision trees:\n",
"1. The CART (Classification And Regression Tree) algorithm for both classification and regression\n",
"\n",
"2. The ID3 algorithm based on the computation of the information gain for classification\n",
"\n",
"We discuss both algorithms with applications here. The popular library\n",
"**Scikit-Learn** uses the CART algorithm. For classification problems\n",
"you can use either the **gini** index or the **entropy** to split a tree\n",
"in two branches.\n",
"\n",
"### The CART algorithm for Classification\n",
"\n",
"For classification, the CART algorithm splits the data set in two subsets using a single feature $k$ and a threshold $t_k$.\n",
"This could be for example a threshold set by a number below a certain circumference of a malign tumor.\n",
"\n",
"How do we find these two quantities?\n",
"We search for the pair $(k,t_k)$ that produces the purest subset using for example the **gini** factor $G$.\n",
"The cost function it tries to minimize is then"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(k,t_k) = \\frac{m_{\\mathrm{left}}}{m}G_{\\mathrm{left}}+ \\frac{m_{\\mathrm{right}}}{m}G_{\\mathrm{right}},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $G_{\\mathrm{left/right}}$ measures the impurity of the left/right subset and $m_{\\mathrm{left/right}}$\n",
" is the number of instances in the left/right subset\n",
"\n",
"Once it has successfully split the training set in two, it splits the subsets using the same logic, then the subsubsets\n",
"and so on, recursively. It stops recursing once it reaches the maximum depth (defined by the\n",
"$max\\_depth$ hyperparameter), or if it cannot find a split that will reduce impurity. A few other\n",
"hyperparameters control additional stopping conditions such as the $min\\_samples\\_split$,\n",
"$min\\_samples\\_leaf$, $min\\_weight\\_fraction\\_leaf$, and $max\\_leaf\\_nodes$.\n",
"\n",
"\n",
"### The CART algorithm for Regression\n",
"\n",
"The CART algorithm for regression works is similar to the one for classification except that instead of trying to split the\n",
"training set in a way that minimizes say the **gini** or **entropy** impurity, it now tries to split the training set in a way that minimizes our well-known mean-squared error (MSE). The cost function is now"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"C(k,t_k) = \\frac{m_{\\mathrm{left}}}{m}\\mathrm{MSE}_{\\mathrm{left}}+ \\frac{m_{\\mathrm{right}}}{m}\\mathrm{MSE}_{\\mathrm{right}}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here the MSE for a specific node is defined as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\mathrm{MSE}_{\\mathrm{node}}=\\frac{1}{m_\\mathrm{node}}\\sum_{i\\in \\mathrm{node}}(\\overline{y}_{\\mathrm{node}}-y_i)^2,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\overline{y}_{\\mathrm{node}}=\\frac{1}{m_\\mathrm{node}}\\sum_{i\\in \\mathrm{node}}y_i,\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"the mean value of all observations in a specific node.\n",
"\n",
"Without any regularization, the regression task for decision trees, \n",
"just like for classification tasks, is prone to overfitting.\n",
"\n",
"\n",
"\n",
"### Computing the Gini index\n",
"\n",
"The example we will look at is a classical one in many Machine\n",
"Learning applications. Based on various meteorological features, we\n",
"have several so-called attributes which decide whether we at the end\n",
"will do some outdoor activity like skiing, going for a bike ride etc\n",
"etc. The table here contains the feautures **outlook**, **temperature**,\n",
"**humidity** and **wind**. The target or output is whether we ride\n",
"(True=1) or whether we do something else that day (False=0). The\n",
"attributes for each feature are then sunny, overcast and rain for the\n",
"outlook, hot, cold and mild for temperature, high and normal for\n",
"humidity and weak and strong for wind.\n",
"\n",
"The table here summarizes the various attributes and\n",
"<table border=\"1\">\n",
"<thead>\n",
"<tr><th align=\"center\">Day</th> <th align=\"center\">Outlook </th> <th align=\"center\">Temperature</th> <th align=\"center\">Humidity</th> <th align=\"center\"> Wind </th> <th align=\"center\">Ride</th> </tr>\n",
"</thead>\n",
"<tbody>\n",
"<tr><td align=\"center\"> 1 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 0 </td> </tr>\n",
"<tr><td align=\"center\"> 2 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 3 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 4 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 5 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 6 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 0 </td> </tr>\n",
"<tr><td align=\"center\"> 7 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 8 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 0 </td> </tr>\n",
"<tr><td align=\"center\"> 9 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 10 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 11 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Mild </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 12 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 13 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Hot </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"center\"> 14 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 0 </td> </tr>\n",
"</tbody>\n",
"</table>\n",
"\n",
"### Simple Python Code to read in Data and perform Classification"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'DataFiles/rideclass.csv'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"Input \u001b[0;32mIn [6]\u001b[0m, in \u001b[0;36m<cell line: 37>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msave_fig\u001b[39m(fig_id):\n\u001b[1;32m 35\u001b[0m plt\u001b[38;5;241m.\u001b[39msavefig(image_path(fig_id) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.png\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpng\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 37\u001b[0m infile \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrideclass.csv\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;66;03m# Read the experimental data with Pandas\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mIPython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdisplay\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m display\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'DataFiles/rideclass.csv'"
]
}
],
"source": [
"# Common imports\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.tree import export_graphviz\n",
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.compose import ColumnTransformer\n",
"from IPython.display import Image \n",
"from pydot import graph_from_dot_data\n",
"import os\n",
"\n",
"# Where to save the figures and data files\n",
"PROJECT_ROOT_DIR = \"Results\"\n",
"FIGURE_ID = \"Results/FigureFiles\"\n",
"DATA_ID = \"DataFiles/\"\n",
"\n",
"if not os.path.exists(PROJECT_ROOT_DIR):\n",
" os.mkdir(PROJECT_ROOT_DIR)\n",
"\n",
"if not os.path.exists(FIGURE_ID):\n",
" os.makedirs(FIGURE_ID)\n",
"\n",
"if not os.path.exists(DATA_ID):\n",
" os.makedirs(DATA_ID)\n",
"\n",
"def image_path(fig_id):\n",
" return os.path.join(FIGURE_ID, fig_id)\n",
"\n",
"def data_path(dat_id):\n",
" return os.path.join(DATA_ID, dat_id)\n",
"\n",
"def save_fig(fig_id):\n",
" plt.savefig(image_path(fig_id) + \".png\", format='png')\n",
"\n",
"infile = open(data_path(\"rideclass.csv\"),'r')\n",
"\n",
"# Read the experimental data with Pandas\n",
"from IPython.display import display\n",
"ridedata = pd.read_csv(infile,names = ('Outlook','Temperature','Humidity','Wind','Ride'))\n",
"ridedata = pd.DataFrame(ridedata)\n",
"\n",
"# Features and targets\n",
"X = ridedata.loc[:, ridedata.columns != 'Ride'].values\n",
"y = ridedata.loc[:, ridedata.columns == 'Ride'].values\n",
"\n",
"# Create the encoder.\n",
"encoder = OneHotEncoder(handle_unknown=\"ignore\")\n",
"# Assume for simplicity all features are categorical.\n",
"encoder.fit(X) \n",
"# Apply the encoder.\n",
"X = encoder.transform(X)\n",
"print(X)\n",
"# Then do a Classification tree\n",
"tree_clf = DecisionTreeClassifier(max_depth=2)\n",
"tree_clf.fit(X, y)\n",
"print(\"Train set accuracy with Decision Tree: {:.2f}\".format(tree_clf.score(X,y)))\n",
"#transfer to a decision tree graph\n",
"export_graphviz(\n",
" tree_clf,\n",
" out_file=\"DataFiles/ride.dot\",\n",
" rounded=True,\n",
" filled=True\n",
")\n",
"cmd = 'dot -Tpng DataFiles/cancer.dot -o DataFiles/cancer.png'\n",
"os.system(cmd)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above functions (gini, entropy and misclassification error) are\n",
"important components of the so-called CART algorithm. We will discuss\n",
"this algorithm below after we have discussed the information gain\n",
"algorithm ID3.\n",
"\n",
"In the example here we have converted all our attributes into numerical values $0,1,2$ etc."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"# Split a dataset based on an attribute and an attribute value\n",
"def test_split(index, value, dataset):\n",
"\tleft, right = list(), list()\n",
"\tfor row in dataset:\n",
"\t\tif row[index] < value:\n",
"\t\t\tleft.append(row)\n",
"\t\telse:\n",
"\t\t\tright.append(row)\n",
"\treturn left, right\n",
" \n",
"# Calculate the Gini index for a split dataset\n",
"def gini_index(groups, classes):\n",
"\t# count all samples at split point\n",
"\tn_instances = float(sum([len(group) for group in groups]))\n",
"\t# sum weighted Gini index for each group\n",
"\tgini = 0.0\n",
"\tfor group in groups:\n",
"\t\tsize = float(len(group))\n",
"\t\t# avoid divide by zero\n",
"\t\tif size == 0:\n",
"\t\t\tcontinue\n",
"\t\tscore = 0.0\n",
"\t\t# score the group based on the score for each class\n",
"\t\tfor class_val in classes:\n",
"\t\t\tp = [row[-1] for row in group].count(class_val) / size\n",
"\t\t\tscore += p * p\n",
"\t\t# weight the group score by its relative size\n",
"\t\tgini += (1.0 - score) * (size / n_instances)\n",
"\treturn gini\n",
"\n",
"# Select the best split point for a dataset\n",
"def get_split(dataset):\n",
"\tclass_values = list(set(row[-1] for row in dataset))\n",
"\tb_index, b_value, b_score, b_groups = 999, 999, 999, None\n",
"\tfor index in range(len(dataset[0])-1):\n",
"\t\tfor row in dataset:\n",
"\t\t\tgroups = test_split(index, row[index], dataset)\n",
"\t\t\tgini = gini_index(groups, class_values)\n",
"\t\t\tprint('X%d < %.3f Gini=%.3f' % ((index+1), row[index], gini))\n",
"\t\t\tif gini < b_score:\n",
"\t\t\t\tb_index, b_value, b_score, b_groups = index, row[index], gini, groups\n",
"\treturn {'index':b_index, 'value':b_value, 'groups':b_groups}\n",
" \n",
"dataset = [[0,0,0,0,0],\n",
" [0,0,0,1,1],\n",
" [1,0,0,0,1],\n",
" [2,1,0,0,1],\n",
" [2,2,1,0,1],\n",
" [2,2,1,1,0],\n",
" [1,2,1,1,1],\n",
" [0,1,0,0,0],\n",
" [0,2,1,0,1],\n",
" [2,1,1,0,1],\n",
" [0,1,1,1,1],\n",
" [1,1,0,1,1],\n",
" [1,0,1,0,1],\n",
" [2,1,0,1,0]]\n",
"\n",
"split = get_split(dataset)\n",
"print('Split: [X%d < %.3f]' % ((split['index']+1), split['value']))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Entropy and the ID3 algorithm\n",
"\n",
"The ID3 algorithm learns decision trees by constructing\n",
"them in a top down way, beginning with the question **which attribute should be tested at the root of the tree**?\n",
"\n",
"1. Each instance attribute is evaluated using a statistical test to determine how well it alone classifies the training examples.\n",
"\n",
"2. The best attribute is selected and used as the test at the root node of the tree.\n",
"\n",
"3. A descendant of the root node is then created for each possible value of this attribute.\n",
"\n",
"4. Training examples are sorted to the appropriate descendant node.\n",
"\n",
"5. The entire process is then repeated using the training examples associated with each descendant node to select the best attribute to test at that point in the tree.\n",
"\n",
"6. This forms a greedy search for an acceptable decision tree, in which the algorithm never backtracks to reconsider earlier choices. \n",
"\n",
"The ID3 algorithm selects which attribute to test at each node in the\n",
"tree.\n",
"\n",
"We would like to select the attribute that is most useful for classifying\n",
"examples.\n",
"\n",
"What is a good quantitative measure of the worth of an attribute?\n",
"\n",
"Information gain measures how well a given attribute separates the\n",
"training examples according to their target classification.\n",
"\n",
"The ID3 algorithm uses this information gain measure to select among the candidate\n",
"attributes at each step while growing the tree.\n",
"\n",
"\n",
"### Cancer Data again now with Decision Trees and other Methods"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split \n",
"from sklearn.datasets import load_breast_cancer\n",
"from sklearn.svm import SVC\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"# Load the data\n",
"cancer = load_breast_cancer()\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0)\n",
"print(X_train.shape)\n",
"print(X_test.shape)\n",
"# Logistic Regression\n",
"logreg = LogisticRegression(solver='lbfgs')\n",
"logreg.fit(X_train, y_train)\n",
"print(\"Test set accuracy with Logistic Regression: {:.2f}\".format(logreg.score(X_test,y_test)))\n",
"# Support vector machine\n",
"svm = SVC(gamma='auto', C=100)\n",
"svm.fit(X_train, y_train)\n",
"print(\"Test set accuracy with SVM: {:.2f}\".format(svm.score(X_test,y_test)))\n",
"# Decision Trees\n",
"deep_tree_clf = DecisionTreeClassifier(max_depth=None)\n",
"deep_tree_clf.fit(X_train, y_train)\n",
"print(\"Test set accuracy with Decision Trees: {:.2f}\".format(deep_tree_clf.score(X_test,y_test)))\n",
"#now scale the data\n",
"from sklearn.preprocessing import StandardScaler\n",
"scaler = StandardScaler()\n",
"scaler.fit(X_train)\n",
"X_train_scaled = scaler.transform(X_train)\n",
"X_test_scaled = scaler.transform(X_test)\n",
"# Logistic Regression\n",
"logreg.fit(X_train_scaled, y_train)\n",
"print(\"Test set accuracy Logistic Regression with scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n",
"# Support Vector Machine\n",
"svm.fit(X_train_scaled, y_train)\n",
"print(\"Test set accuracy SVM with scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n",
"# Decision Trees\n",
"deep_tree_clf.fit(X_train_scaled, y_train)\n",
"print(\"Test set accuracy with Decision Trees and scaled data: {:.2f}\".format(deep_tree_clf.score(X_test_scaled,y_test)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Another example, the moons again"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"from __future__ import division, print_function, unicode_literals\n",
"\n",
"# Common imports\n",
"import numpy as np\n",
"import os\n",
"\n",
"# to make this notebook's output stable across runs\n",
"np.random.seed(42)\n",
"\n",
"# To plot pretty figures\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.colors import ListedColormap\n",
"plt.rcParams['axes.labelsize'] = 14\n",
"plt.rcParams['xtick.labelsize'] = 12\n",
"plt.rcParams['ytick.labelsize'] = 12\n",
"\n",
"\n",
"from sklearn.svm import SVC\n",
"from sklearn import datasets\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.datasets import make_moons\n",
"from sklearn.tree import export_graphviz\n",
"\n",
"Xm, ym = make_moons(n_samples=100, noise=0.25, random_state=53)\n",
"\n",
"deep_tree_clf1 = DecisionTreeClassifier(random_state=42)\n",
"deep_tree_clf2 = DecisionTreeClassifier(min_samples_leaf=4, random_state=42)\n",
"deep_tree_clf1.fit(Xm, ym)\n",
"deep_tree_clf2.fit(Xm, ym)\n",
"\n",
"\n",
"def plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):\n",
" x1s = np.linspace(axes[0], axes[1], 100)\n",
" x2s = np.linspace(axes[2], axes[3], 100)\n",
" x1, x2 = np.meshgrid(x1s, x2s)\n",
" X_new = np.c_[x1.ravel(), x2.ravel()]\n",
" y_pred = clf.predict(X_new).reshape(x1.shape)\n",
" custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])\n",
" plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)\n",
" if not iris:\n",
" custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n",
" plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)\n",
" if plot_training:\n",
" plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\", label=\"Iris-Setosa\")\n",
" plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\", label=\"Iris-Versicolor\")\n",
" plt.plot(X[:, 0][y==2], X[:, 1][y==2], \"g^\", label=\"Iris-Virginica\")\n",
" plt.axis(axes)\n",
" if iris:\n",
" plt.xlabel(\"Petal length\", fontsize=14)\n",
" plt.ylabel(\"Petal width\", fontsize=14)\n",
" else:\n",
" plt.xlabel(r\"$x_1$\", fontsize=18)\n",
" plt.ylabel(r\"$x_2$\", fontsize=18, rotation=0)\n",
" if legend:\n",
" plt.legend(loc=\"lower right\", fontsize=14)\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n",
"plt.title(\"No restrictions\", fontsize=16)\n",
"plt.subplot(122)\n",
"plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n",
"plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"np.random.seed(6)\n",
"Xs = np.random.rand(100, 2) - 0.5\n",
"ys = (Xs[:, 0] > 0).astype(np.float32) * 2\n",
"\n",
"angle = np.pi/4\n",
"rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
"Xsr = Xs.dot(rotation_matrix)\n",
"\n",
"tree_clf_s = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_s.fit(Xs, ys)\n",
"tree_clf_sr = DecisionTreeClassifier(random_state=42)\n",
"tree_clf_sr.fit(Xsr, ys)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
"plt.subplot(122)\n",
"plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"# Quadratic training set + noise\n",
"np.random.seed(42)\n",
"m = 200\n",
"X = np.random.rand(m, 1)\n",
"y = 4 * (X - 0.5) ** 2\n",
"y = y + np.random.randn(m, 1) / 10"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
"tree_reg.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"\n",
"tree_reg1 = DecisionTreeRegressor(random_state=42, max_depth=2)\n",
"tree_reg2 = DecisionTreeRegressor(random_state=42, max_depth=3)\n",
"tree_reg1.fit(X, y)\n",
"tree_reg2.fit(X, y)\n",
"\n",
"def plot_regression_predictions(tree_reg, X, y, axes=[0, 1, -0.2, 1], ylabel=\"$y$\"):\n",
" x1 = np.linspace(axes[0], axes[1], 500).reshape(-1, 1)\n",
" y_pred = tree_reg.predict(x1)\n",
" plt.axis(axes)\n",
" plt.xlabel(\"$x_1$\", fontsize=18)\n",
" if ylabel:\n",
" plt.ylabel(ylabel, fontsize=18, rotation=0)\n",
" plt.plot(X, y, \"b.\")\n",
" plt.plot(x1, y_pred, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"plt.subplot(121)\n",
"plot_regression_predictions(tree_reg1, X, y)\n",
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
"plt.text(0.21, 0.65, \"Depth=0\", fontsize=15)\n",
"plt.text(0.01, 0.2, \"Depth=1\", fontsize=13)\n",
"plt.text(0.65, 0.8, \"Depth=1\", fontsize=13)\n",
"plt.legend(loc=\"upper center\", fontsize=18)\n",
"plt.title(\"max_depth=2\", fontsize=14)\n",
"\n",
"plt.subplot(122)\n",
"plot_regression_predictions(tree_reg2, X, y, ylabel=None)\n",
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
"for split in (0.0458, 0.1298, 0.2873, 0.9040):\n",
" plt.plot([split, split], [-0.2, 1], \"k:\", linewidth=1)\n",
"plt.text(0.3, 0.5, \"Depth=2\", fontsize=13)\n",
"plt.title(\"max_depth=3\", fontsize=14)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"editable": true
},
"outputs": [],
"source": [
"tree_reg1 = DecisionTreeRegressor(random_state=42)\n",
"tree_reg2 = DecisionTreeRegressor(random_state=42, min_samples_leaf=10)\n",
"tree_reg1.fit(X, y)\n",
"tree_reg2.fit(X, y)\n",
"\n",
"x1 = np.linspace(0, 1, 500).reshape(-1, 1)\n",
"y_pred1 = tree_reg1.predict(x1)\n",
"y_pred2 = tree_reg2.predict(x1)\n",
"\n",
"plt.figure(figsize=(11, 4))\n",
"\n",
"plt.subplot(121)\n",
"plt.plot(X, y, \"b.\")\n",
"plt.plot(x1, y_pred1, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"plt.axis([0, 1, -0.2, 1.1])\n",
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
"plt.ylabel(\"$y$\", fontsize=18, rotation=0)\n",
"plt.legend(loc=\"upper center\", fontsize=18)\n",
"plt.title(\"No restrictions\", fontsize=14)\n",
"\n",
"plt.subplot(122)\n",
"plt.plot(X, y, \"b.\")\n",
"plt.plot(x1, y_pred2, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
"plt.axis([0, 1, -0.2, 1.1])\n",
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
"plt.title(\"min_samples_leaf={}\".format(tree_reg2.min_samples_leaf), fontsize=14)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pros and cons of trees, pros\n",
"\n",
"* White box, easy to interpret model. Some people believe that decision trees more closely mirror human decision-making than do the regression and classification approaches discussed earlier (think of support vector machines)\n",
"\n",
"* Trees are very easy to explain to people. In fact, they are even easier to explain than linear regression!\n",
"\n",
"* No feature normalization needed\n",
"\n",
"* Tree models can handle both continuous and categorical data (Classification and Regression Trees)\n",
"\n",
"* Can model nonlinear relationships\n",
"\n",
"* Can model interactions between the different descriptive features\n",
"\n",
"* Trees can be displayed graphically, and are easily interpreted even by a non-expert (especially if they are small)\n",
"\n",
"### Disadvantages\n",
"\n",
"* Unfortunately, trees generally do not have the same level of predictive accuracy as some of the other regression and classification approaches\n",
"\n",
"* If continuous features are used the tree may become quite large and hence less interpretable\n",
"\n",
"* Decision trees are prone to overfit the training data and hence do not well generalize the data if no stopping criteria or improvements like pruning, boosting or bagging are implemented\n",
"\n",
"* Small changes in the data may lead to a completely different tree. This issue can be addressed by using ensemble methods like bagging, boosting or random forests\n",
"\n",
"* Unbalanced datasets where some target feature values occur much more frequently than others may lead to biased trees since the frequently occurring feature values are preferred over the less frequently occurring ones. \n",
"\n",
"* If the number of features is relatively large (high dimensional) and the number of instances is relatively low, the tree might overfit the data\n",
"\n",
"* Features with many levels may be preferred over features with less levels since for them it is *more easy* to split the dataset such that the sub datasets only contain pure target feature values. This issue can be addressed by preferring for instance the information gain ratio as splitting criteria over information gain\n",
"\n",
"However, by aggregating many decision trees, using methods like\n",
"bagging, random forests, and boosting, the predictive performance of\n",
"trees can be substantially improved."
]
}
],
"metadata": {
"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.9.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}