You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

knn_classification_EN.ipynb 88 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# kNN Classification\n",
  8. "\n",
  9. "\n",
  10. "K-Nearest Neighbor (kNN) classification algorithm is a mature method in theory and one of the simplest machine learning algorithms. The idea of this method is:***If a sample has k most similar smaples(have a shortest distance in characteristic space) which are mostly belong to a category, then the sample also belongs to this category.*** Although KNN method also depends on limit theorem in principle, it is only related to a very small number of adjacent samples when making category decisions. Because the KNN method mainly depends on the limited neighboring samples, rather than the method of judging the class domain, the KNN method is more suitable than other methods for the sample set which has more overlapping or overlapping class domains. \n",
  11. "\n",
  12. "KNN algorithm can be used not only for classification, but also for regression. KNN algorithm can be used not only for classification, but also for regression. The attributes of a sample can be obtained by finding out k nearest neighbors of the sample and assigning the average value of the attributes of these neighbors to the sample. A more useful method is to give different weights to the influence of neighbors with different distances on the sample, for example, the weights are proportional to the distance (combinatorial function).\n",
  13. "\n",
  14. "The main disadvantage of this algorithm in classification is that when the samples are unbalanced, for example, the sample size of one class is very large, while the sample size of other classes is very small, which may lead to a large number samples contains most in the k neighbors of the sample when a new sample is input.In this case, the result of misjudgment may be produced. Therefore, we need to reduce the influence of quantity on operation results. \n",
  15. "another disadvantage of this method is that it is computationally intensive, because the distance between each text to be classified and all known samples must be calculated in order to obtain its K nearest neighbors. At present, the commonly used solution is to clip the known sample points in advance and remove the samples which have little effect on classification in advance. This algorithm is more suitable for automatic classification of class domains with large sample size, while those with small sample size are more prone to mismatching.\n",
  16. "\n",
  17. "K-NN is the most direct method to classify unknown data. Basically, you can understand what K-NN does through the following picture and text description\n",
  18. "![knn](images/knn.png)\n",
  19. "\n",
  20. "In short,k-NN can be seen as:**While you have a set of data which have already being sorted, \n",
  21. "There is a pile of data that you already know the classification, and then when a new data enters, you start to find the distance from each point in the training data, and then pick the K points closest to this training data to see what these points belong to, and then classify the new data with the principle that the minority obeys the majority.**\n"
  22. ]
  23. },
  24. {
  25. "cell_type": "markdown",
  26. "metadata": {},
  27. "source": [
  28. "## Algorithm steps:\n",
  29. "\n",
  30. "* step.1---Import training sample\n",
  31. "* step.2---Transfer the featuresof the sample into numbers\n",
  32. "* step.3---Calculate the distance between unkonwn sample and training sample.\n",
  33. "* step.4---Record the distace calculated in step 3 and save the category which training sample belong.\n",
  34. "* step.5---Repeat step2,3, until we calculate all the distance.\n",
  35. "* step.6---Sort the training data according to the distance with unkonwn sample and find the K nearest sample.\n",
  36. "* step.7---Count the number of occurrences of each class label in the K-nearest neighbor sample\n",
  37. "* step.8---Choose the label with the highest occurrence frequency as the class label of the unknown sample"
  38. ]
  39. },
  40. {
  41. "cell_type": "markdown",
  42. "metadata": {},
  43. "source": [
  44. "## 生成数据"
  45. ]
  46. },
  47. {
  48. "cell_type": "code",
  49. "execution_count": 1,
  50. "metadata": {},
  51. "outputs": [
  52. {
  53. "data": {
  54. "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAEICAYAAACgQWTXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOydd5hkVdGH37qde3LYXRBYESSIKCAIfGQEJImI5CQIghKUjAiSFVAQEEGigOQkOScFREB3RZQgwhKWvGHyTOdb3x91J+3kme6Z2ZnzPs88uz197jnVs7N1z61T9StRVRwOh8MxNfAm2gCHw+FwFA/n1B0Oh2MK4Zy6w+FwTCGcU3c4HI4phHPqDofDMYVwTt3hcDimEM6pO6YsInKFiJxapLnOEJGbijGXw1FKnFN3TEpE5D0R2Xosc6jqj1T17GLZNFxE5HoR+cV4r+twgHPqjqUUEQlPtA0Ox2TEOXXHpENEbgRmAw+ISJuInCgiK4qIisjBIjIfeDoYe6eIfCoizSLyrIh8ucc8XTtmEdlCRD4UkeNEZIGIfCIi3x/Ehi+IyDMi0ioiTwD1S7zf77oiciiwL3BiYPsDwfdPEpF5wXyvi8guxf2pORyGc+qOSYeq7g/MB3ZS1XJV/XWPtzcHvgRsG7x+BFgFmAn8E7h5kKmXAaqA5YCDgctEpGaAsbcAczFnfjZwwBLv97uuql4V/P3Xge07BePnAZsG658J3CQiyw5iq8MxKpxTdyxtnKGq7aqaAlDVa1W1VVUzwBnAWiJSNcC1OeAsVc2p6sNAG7DakoNEZDbwdeBUVc2o6rPAAz3HjHBdVPVOVf1YVX1VvR14C1h/hJ/d4RgS59QdSxsfdP5FREIicl4Q1mgB3gvequ/3SlisqvkerzuA8n7GfQ5oVNX2Ht97fwzrIiLfE5F/iUiTiDQBaw423uEYLc6pOyYrA8mH9vz+PsDOwNZYWGPF4PsyxrU/AWpEpKzH92aPYN1etovI54GrgSOBOlWtBl4tgp0ORx+cU3dMVj4DVhpiTAWQARYDSeCcYiysqu8Dc4AzRSQqIpsAO/UYMtS6S9pehjn6hQDBAe2axbDV4VgS59Qdk5VzgZ8H4YrjBxhzAxYW+Qh4HXixiOvvA2wANACnB2sNd90/AGsEtt+rqq8DvwFewBz+V4Dni2irw9GFuCYZDofDMXVwO3WHw+GYQjin7nA4HFMI59QdDodjCuGcusPhcEwhxlUUqb6+XldcccXxXNLhcDiWeubOnbtIVWcMZ+y4OvUVV1yROXPmjOeSDofDsdQjIu8PPcpw4ReHw+GYQjin7nA4HFMI59QdDodjCuGcusPhcEwhnFN3OByOKYRz6g6HwzGFcE7dMSVRLeC3XY3fdAyaeWmizXE4xg3Xkd0xJdH2K6HtCiCNpp+C+geR8Owhr3M4lnbcTt0xNcm9AqTt7xKG/LwJNcfhGC+cU3dMSSSxFxAHKQNJQHTdiTbJ4RgXXPjFMSWR+JZQdxcU3oXoBohXOazrVPNoyy8g+zzEvolUHI+IayXqWHpwTt0xZZHIqhBZdWQXpe6C1N1AGjpuguhXIL5dSexb2tDsy1CYD7HNEa96os1xDIBz6g5HD7SwEMgFr3woLJpIcyYNfsefoOVMwAOvAuofRbyyiTbL0Q8upu5w9ECSu4NXAyTAq4PEjhNt0uQgdRd28NwB2g751yfaIscAuJ26w9EDCS0DM/4MhY8htBwi0Yk2aXIQ/TrkXsMcuw+hFSfYIMdAOKfucCyBSAzCX5hoMyYVUn4U6tVCfh6S3BsJDatfg2MCcE7d4XAMiUgIKTtwos1wDAMXU3c4HI4phHPqDofDMYVwTt3hcDimEM6pOxyOaYEWFqKph9Bx1AFSvwO/4WD8z9bFbz4ZVb/ka7qDUofDMeXRwmfooh2BAqgPtdcg0a+Xft2O6yH7EpCF9MMQ2xzi25Z0TbdTdzgcU5/s34C8FU6RQlP3jc+62gEUOl+Apkq+pHPqDodj6hNezXboACQgsta4LCvJAyC0LBAyG+Lbl3xNF35xOBxTHomsATWX2g49sh6S2G181g3NgPqn7AlBysZF8XNIpy4i1wLfAhao6prB984HdgKywDzg+6raVEpDHQ6HYyxIbDMkttn4rysCUj5u6w0n/HI9sKT26BPAmqr6VeB/wM+KbJfD4RgCzX+A33AQ/uJ90JwT2HIYQzp1VX0WaFjie4+raj54+SKwfAlsczgcg6CNP7QDwNwctOGAcUmXc0x+inFQehDwyEBvisihIjJHROYsXLiwCMs5HP2jfgeqOtFmjB/+Z0DgyLWVbh14x3RmTE5dRE4B8sDNA41R1atUdT1VXW/GDKfsNtVRzeG3XoTfcBCafmqc1szjNxyMLlgXXbgZmv9wXNadcMoOA2JAHBJ7mrqkY9oz6uwXETkQO0DdSqfV9sgxGNp+FbRfB6TR7Byo+xMSWaW0i2aeg9xcoAD+QrT9MqTq3NKuOQnwyn+AxrcBzUL4ixNtjmOSMCqnLiLbAScCm6tqR3FNcizV5N7EGikAEoLC+zAKp65+O9p2GWgDUnYoEl5p4MESBzr3FR5IcvjrZF5Csy8hsQ2R6PojtnOikfDnJ9oExyRjyPCLiNwKvACsJiIfisjBwKVABfCEiPxLRK4osZ2OpQRJ7gskQMpAKiG6wajm0eYToOMGSN2DLt4L1ezAg6MbQmIPkAqIrI2U/3h4a2TnoI2HQPulaMMP0OzcUdm6NKLqo5m/odm/T69ziGnAkDt1Vd27n2//oQS2OKYAEtsA6h8KduhrId4o83Nzr2JlEFhptd8AoWX6X1MEqTwFKk8Z2RrZf3SvQQ6ycyC67ujsXcrQ5uMh87S9iH8bqTprYg1yFA0nE+AoOhJeHoltPHqHDpDcE9vxJyGyGngzi2ZfF9GNgCgQsa/Y/xV/jR6oZlC/paRrDM8OH9IPmS6JdkDqnok2yVFEnEyAY1LilR+BRtcHvxlimyFS/P2HRNeCulsg+3eIboBEvlz0NTrRzEto06GgOTSxO17VmSVbayhEPDS0PBQ+AgTCK06YLY7i45y6Y1xQv8Xi17nXIb4NUnU+IqFBrxkPaVSJrAmRNUu+jrb+oluhL3U3WnYIEp64mj2pvQltvRgkjJQfPWF2OIqPc+rTEFW/JDvfQddsvyaIk+cslpt5suS60pMKqcCinT6gIIkRXa6Z59C2qyG8ElL5U2SE1/cxJ7QsUv2rMc3hmJy4mPo0QvPv4y/YDP1sDfzmn49z1kOerrRDBbQw2OClEs29jqYf7TduLlXnmfSqNwMqz0JCdUPPp4rm5+NnX0cbj4Dci5D6E9py3uhtVEX9RrQEP3/NvYG234jm3ij63I7h43bq0wht/RX4CwAfUg9Acg+IfNXe0xxkngI8iG01ZGhkpEjyYDT9Zyi8Yxkm8W2KOv9E46cehuafgQhIFdQ/jHhlXe9LeDZSP7LGDNryM0g9hO3uO/dfGci/NSobVTNow/6Qew28Wqi7AwktO6q5+syd+w+6eF/sji1Qd4uFtkqIbUryiERKus7ShnPq04olHXX3a206wg4MAWJbINUXF3VlCdUhMx5BtVD0G8akoONWIBU8jHgWaoqNLkcfQAuL7cbbpecSttx/LSBlh4xu0vQTkP+fzekvRNv/gFT+fNQ29iLzfGBrAQjZ6xI6dc2/jS7eD7QJTXwXqfzlsLXKNfM8mp2LxDZFouuUzMaJwoVfphFSeRKEPg/EILl3V7aHqg+ZZ7pT3NJPls6GqejQASJrA/HgRQHGWukpCbpvuh6E10BqrkLqH0LiWw5rCs39F03djRY+DuYs6/Fu2IrDikX0a1hqKPZn9GvFm7sftOVc0EYgSM/MD096WDPPoY2HBQVnB6C510pq50TgdurTCAkth8x4rO/3xUNDK0PhPSzFbbURzat+s83jVRXByv7xUw9Ay5kgcaT6UiS6Nuo32Q0otCwS27hoa2nmBbTtYvBmIVVnIF7tkNdIxVGoVwb5t5HkvsgAhVLDRbwk1FyOtp4HXjVSdR4SWm7Y12vmJcs2Eg/woP4BiG0Bid0g9SBEvoqU/WBMNvayN7q+2Zt9AYluVPrMJYkCgvX9zKNtV0FyjyF/DzT7El0yFihk50IJU1knAhnPw7L11ltP58yZM27rOYaP+g2WXSEhpOyQYTtov/1GaA0O7iqOxyv7fvFt0wz62bp0VX+GlkfqH0YXbgt+0HCr4uiirK1+M7pgU+w/fhiim+DVXjXmeXutoRmLlUsY4tuPOias+Xlo09GWy1/xc7zEN7ve85tPh9StwasEUnkakty1CNZPDrTwEdpwKBTmYyGfPBBH6m5CgnOifq/rvNlRAMJI3Z1IZNXxMXoMiMhcVV1vOGNd+MUBgHi1eJU/xas4fmQ77tZfY7HUHLReUKKMGp8u3XAAzUH+bdAWIGVfqXuLtFTProx5KHxQnHl7oA0Hoy1nos2nok3Hjn6epmMtRu5/Cs3Hon5b95uRrwGdaY8KkS+NyebJhoSWw5vxECT3wRx6wBDhFIltgNTegFQcj9TdvlQ49JHiwi+OseGVg5+xv0uyqI11VQugbRb7rTgpeCKImKxuaDa2JxEgZqJexSA0G6Lr2WM5PpQfWZx5A1TzkPsHXemdmWfGMFlr9zwo3To2IIlv2zu5OUh8e2u8PAWR+DZox62AWOZRdKOhr4muDdG1S2/cBOGcumNMSPUVaPNJgBZVw1zz76CL97HdePT/kJorg12Z1104VXcH2nG7hWOS+xRlXRGBmmsg/wZ4NUjoc0WZt3v+MBpeFfLvAAKRtUY/V8WpaNNPAB+SB/SK/YsIktwZ2HnMNk9mJLoe1N1h2UbR9ZHw7Ik2acJxMXXHpMRvOgbSD2PVl0mk+rKiHoZOJOo3o+03W4l+ct9e+ewjnktToNmSHlI7Jp6RxNTdTn0pQNU36VmvZuqmBC6JlGMpfUElqoze8U02xKtCKg4vzlySGLHkgGNq4w5KJznqt6CLtkcXboEu2gb1GybapHFBKo61wz6pgeRBFgcdBzT3Jv7CHfAXbIFm/jIua04XtPApfuvv0Y7bSyJT4DDcTn2yk7oXCh8DWSh8Bh13QfmhE21VyRGvBqm7adzX1aajTMoA0MYfw6y5iESHf72mwG8Dr76oh8ZLO6oZdPF3wW9CCUPuDaTqjIk2a0riduqTHa+S7n+mEHgVE2nN1Edbe7woWPrkcC/NzkUX/B+6cEu06ahJ1yZOVfHbr8Nf/D2rLxhPCh9btTJ5IA3Z58d3/WmEc+qTnfhOkNgRvHqIf9MqAh2lo+I0rBtSGMp+NKJDTG05O3BcWUtVzL85/Guz/8BfsBH+Z1/HTz0++Nj8fPymY/CbTkQLC4a9BplHoe1iU3tsvQBNPz38a8dKaDmQaiAGJCA2tQTdJhPTLvyiqtY/06tGvOqJNmdIREJI1TkTbUZRUb/RUtDCqyKhWeO0ZosVEoVXRiQ+4DgvsS0a2xTII97wtVE091/I/7fHd/IjeqqyytBF9qL5WDT+Sr+H4qqKNuwXqG0Kmv8vUn//8BbJvwfaoydr4d1h2zdWRKJQf7dV0obqIbbduK093ZhWTl3VRxsP7VYjrPk9EttkYo2aZmjhU3TRt7HHcB9qb0ciI9OaGfGa+XfQxbvbelIJ9ff1uaH7Lb+CjhtM76X2+pHnO2eW2PXGth6RVgua7/mC7qKiJSmA/1n3+/n3hr9GfAdovzp44UFsfJuUiFcLZfuPeR5VhcxfrB1ffDskVD9246YQ0yv8kn8rqOZLA2m09aKJtmj6kfkzaNoqRbUDLVZ5/yBox23Beu0mA7CECqXm3oCOmzFJ2o/QllNHvkjky1jYBiCBJPcc2fVV52AqjxGoPA2R/vdbImGI72gNuUlAcq9hLyHhzyMznjRBtBmPT2g7vbGgHdeiTUejrb9CF38b9dsn2qRJxbTaqeNVg3ZqiIRhjEp6jlEQWgkr7QdIjI/2Rmh5LJabtqUHbQyhkH0JP/UYXmL4O1mJbY5WnQfZZyC6FRIbuly9J158K3TWvwAdundr1QWQmwuEA8nf4SNeLYzQtklH6mFM8wfQiOkARUdfmTvVGNKpi8i1wLeABaq6ZvC9WuB2YEXgPWAPVW0snZnFQUKz0Krzoe0SCC2HVJ090SZNOyS2AVp5OqQfhOjGEP8OEDQ9SN2HhL4Aie+MqYeqqg8I5P6NNh9rceTYJva4nvhO38rU8OoQ3w7SnU8Nvv2OjMCpA3iJHSCxw6jt7vmZLcTwBBQ+hfgOvUIMIh6MQ1PuyYRm/oK2XQuRVU3nJ/82kMG05r8w0eZNKoaUCRCRzYA24IYeTv3XQIOqniciJwE1qvrToRZzMgGO/tDCYnTR1kHmSBzKf4hXPrqKS7/jHmg5FVN1LNAdm44js/414M1C/UZ0wWaYowhDdFO82itHZcNAaOY5i4HHtxlSb91vuwzar7Jerl6VhU2maeWo5ueji76FhU1jkNgTiayOFj5AEt9FxtqQZCmgqNK7qvossGQZ487AH4O//xH4zogsdCw1aOYF/MYf4rf8BtXs0BeMhsI8uhoekILMX0c1jWoBWn6OqRX2aHQNdB3MDoB4NUjN5RD+CsS+gVT3L06m6qMdd+O3/g7Nzx+2bX77rWjjkWjrr9FF3+5qLNJpt+betBZ2naQfA03ZZ9EOyI9fpsqko/AJdIWkMlB4C0nuhldxzLRw6CNltDH1War6SfD3T4EB89JE5FDgUIDZs52C2tKEFj5CG3+I7ZD+hpJHKod8IBs54dWxQ8YY4EH8W0Pblvu3ZTFFvo50xVOF/vcpAhUnDHj42DUqtsmQ2VDadgm0Xwdk0I4bYMbTyHBSF9M94sBEIPcGxDZENY82fA/yr4Eq1Fxu4aHopkFmS87Gh6bx/53oWuAtY7rxWkDKDp5oiyY1Yz4oVVUVkQFjOKp6FXAVWPhlrOs5xpH8fNshKVgX++H1gRwuFvv2LR+8/n6LIYdWHLolWe7f1nSYPBCG2j8i0XWsLV/VBdD8M7MXH4hD7dV40WE9udr8hYXgL4Twan0PLTPP0u2cC5br7fXttKOq4H8MXq2FTWKbQu7f2A1SIbyKDcy/bl9qc2rb75DYxkjFcRBeCS18jCR2QbzyYds/1RCJQ/299vPzll1qs3bGi9E69c9EZFlV/URElgVGUNbmmAi0sMBS+kIrDl+TJLo2eLXmG7WAJA8omj1++mloOhrIoxUn45XtB8l9h3dx5iXMoQchlewLEHSF9xLbdh1wqt8UNO4YgXZL5lm08UhM63wNqL2x9w4/vh20zQMKIDEIrdx3Ds2hDQeaE5KIzVF2CIRmovl3kcROIGH85rOtiKhL3CoSZOoEh6HJXZnq6jGqBUjdB9psh9heTb/jRGLT7nB4tIzWqd8PHACcF/x5X9EschQNLSyA3D/R/KfQ9htAIL41Un3hsK4XSUDd/ZCbA6EVkPBKxTOu5RS6GgC3noMm9xi+841+HfvV9YEoRNfvd9hoKoa17dJuu/Jv2FfkK91zlh0C4ZWDwpft+5cRyM6xcAoZ0Aza9ju8mivMaQVD/MX7Qe6fwWcog/BKdsOtPG3ENi/NaMvpkHoAKEDHTVD/2JBhMsfgDCel8VZgC6BeRD4ETsec+R0icjDwPrBHKY10jBwtfIwu2gnwg6ySIPKVfhwtfDbs8nzxyiC2eQks7NlsubMt3fCQ6NpQex1kX7RuNyMIrQxJaHbQ5zJnNQ1e72pFEYH4VoPP4dX0qIeIgDej75j8m3T31uxAam+eniGWzDN0hbMKC0wqwdWPjIkhnbqq7j3AW0P8ZjsmlMwzgcJgeok3vKABxcQi1ReZzK1moPIsRCJDX9Tz+ui6EF23+HZVnobiQ/49pPwIZNBCpQHmiKyOVpxgB6rhVZCKE/oOSuwGqVuwMM86Qzp01QLa/NMe3aDKkeoLkdimI7ZvUhHb1PRgyJsmjOdK/seKa2c3RdHsPy2uSxqI2w5UQkjFT0dc7egYO6pqT0xBc25VNckK7YDoJkOGHDT9JNp0HN2HtIBU4M2aW1rDR4imn0Czc5H4VsgwYuCqeesZoM2Q2KVXn1VHN66dnQOJfg2t+g1kHoLIhkhyz2ndtEFV0dbzIHUHhFaEilOh5UR73C87Aq/8kNKt7behDftC/n+2dt1t1lO0x1mA334DtF0EUoPUXNGPfEKBvnn2k6t7kKYfR5uOB9Joxy32OSNrDHqNSBiSxZWT1uwraMd1EPo8Un64HbJOI5xTLzF2un8XWvgESeyKhFcYt7W9xDaQcLrVAOReho7bgJTFs5uPBH8xoNB2CRrfflSpcla+fhmEZiOVp/cv15u6F/LvYCmQ8yF1J5T9oHuOwkJo/TVWaNRuYZbEt4LUyjYrjVcfy1nvJAqVI5dk9lOP24FkZC2k4icjDnsNhmb/Tq9wX+7flkHU31hNQ+pByw6K71i0w1H1G9DGA4JzpBjqNyFVZxZl7qUF59RLjLaeDx23AFnbvcx4ekodiPm5d6HpSJODLf8xXlnx0h7HiqpvremkxvRfRILzYj9II+wZehz5rlcLC9DGnwBpyL2OolB1rmmjZ1+C6KZI9QVBY+jOoigPU2PsyRJr5+ehrRfS5cTTnecgnTv1GNTdjxcZmeaJ5t6E5uMDe/+FenGk/IgRzTEYEtsG7bgjeOGZRstAtjQcFBxIA+mnkJpLimNE4SO6D90zkPtPceZdiphe0rsTQfZ5bPcS7LQKH0ywQcVBNY2/eB9YvC0U3gJtsW46+Q8n2jSgUzv/B+iiXa29nKYguhngWTZK1TlBJx4PkvuNrtzcX2TOC4Ac5N+HjjtM5kDbTPM79QAkvg3xLUEqILYZJHsni0loGSg7GAjZGNL03pX7waF35646D40H4rf+dmQt8wrv9yi3T0Pb5Rb2KRIS2wCpuwWpPAmpuxcJr9jvONVcoDKZsq/MM0WzgfBq4M0EKcOkiceu37604XbqpSa+PbTPt8dnKZ86inKp+617US8E012ZBOTfhmyn4wDaLsGrvwfVLJp7F9ovs+47FUfjhboP51R9yP8Xzb8JbZfawWbVhUhklb5rhFeD8Jcsl119pPzIQMemc0dtWjYiEaT64kHN9SqOQct/DISss1HuZbpTHjHZgNBMK7QqzAf/E2j/A+ovhMhadsg4VAgjuhFIlenZUwCy0Ho+Gtu835ua+q1o8wmQexPK9scrO2jw+QGJrAmRNQcfIxE0/MVABkGsyK1IiESh7h77OYWWHTKmPxVxTr3ESNlh9p/f/9SKVQZppbZUIWF655YLJHaBUOlvWqp5yDwFhCG2Zf/Ki1413eGVMIQ+1/1e475Yg+kw+B9B7R+CedW0brLP09OhatOPkRmP9llCJAS1N1kbO68OCS2D+l+Djrst7BNeAQ2tCJoe1r97l1Ou/YM19mi7ArTRdu+J7ZD4jtYHNdUp7pWB1J/Q1P2Qe3nItofilUP9Q+jivaDQ2T/VC+LPfdHWiyDzHJCD1ovR6PrmtIuA1N6Mtt8MEkWGW0k83Lm95NC1BFMY59RLzLCKVZZG4jtB+gkLNUTWhppL8AYo8S422nS4iXkpEN8Kqf5NnzESmgnVF6FtF0No+W7tfL8x2KkqFjJ5q/si/2PIPgtLtpLzF6N+s2WsLLmOhIKuR8Frr8ocZ/ZFaPoRNB2JerVQdx/ileO3Xwttv7e2eTVX9HtwLhJHyg7Ej+8Ki7YxeYfmU6xorOxANP0QXQ2uKdhX5tlh/ezEK4PqX1q6q6YhvnUgqNYP/iK6wkASsp9dkRCvGqkoXjzf0Y1z6o5RIRIxqdpxRtUPYrDdFbIDIfGtkCVvqN5MuwnlX7OQWHK/HhdU0cehA2gzumBDtPZ2vGhf8S6zK4u2/8GKlsr2h9TtXSJd+ED2BTS8GrRehMnHtqItpyO11w5sf+EdlKyNB0g/hJQfDDOfRQufQcOBQQNqz2L1w0QiX4WZL4GmBm2uLeWHo9nn7ZA5vBpENxj2Go6Jwzl1x6jR3GtQ+BCiG49bRo+Ih3qzAmcm5mxGdL0EEgN/B68S6anr4pWj4a9AvvOsIAl09r8sQPPJMOPBfue1LKfbgTSaeQwS+2BZLmm7eYSWo/d5g3Y7/YEIfwHLZfCAWJfjFokh4dlo/Z8gdY/djBIja2kgErF0wsHGRFaHmc+D32DqiNO4zmFpwjl1x6jwO+6DltMs+8OrhfqH+o0b+6kHIXW3abSUHTq2NnX5eWjH3dY8GgEiMMQBZH+IRGAged/a62DhNpa90kdiYRCyL/cYLxD7BpC3XO3EPkhkDfy2P9Kd1RJBKn8+uJ1eJdTdjabuQULL25lFr/drYBiHl2NBJN77PMIx6XFO3TE6UjcDKYtW+FjTh0D+thPN/guaT7Fx2bmoVCJl+/SZym//o8WZQ8sgNZcj/TgRv+0qy0YhS1d2iSQQ/zOgiPra+flBzL3T+caw8Ed0wG5IACT3gta3ADEN9eia4JVD5KvdjZ7bL++2nQKEhk6jlPBspOKo0X4axzTEOXXH6IisBbn/0tX0IdSPYy280+NFUMm5BJqfD60XYE04mtHm05Daa7rfV0Xbr7US+l5FOkEoYAg5YNUC2nEr5N9FknsgkYHDNeq3BcU5nWGRGCR2RSqOtRvIIOEKL7kbGlkVCh9DdBPI/t102SUIncx4BELLQr4J8EGSMAGZUKo5tPkkO1iNboRUnz8ivXnH5Mc5dceokIoTUK8K8u8gyQOQUD/ystHNsbhy0IUoNxf1OyzlrBNN050a6VumR08yj0H7JfR26GHwZkPFEQM2Veiavu130H4tkEbTd0P9k0iorv/B6QfNKdsnNPXEypMRiaKFz9D82xBZs98sGAgOICN2kOp33IXF07FK1uwcpOYytPl00Dak8mcToxueuh/ST2JFP3+G1J8gOZAQq2NpxFWUOkaFSBSv/Ei86gt79AhdYkyoDsoPpOvXLP++OZGehFeBxLforKaUypN7v5+fH1RTAkhQcemB/w40H4//6VfxW/umNHaRfZFese5eTw9LGlxpDhiAKBLf2hx67g100bZo04/RhduaJstQRNcJ5AEAzaGpRyD3Bl7t1UjtH6QVnDcAACAASURBVEHKTf9kvNF2eoWABshR7/fSwmfWILtLK94xGXFOfQqhfiua+4+VxJdqjcJi/EW74X+2Dn7LeUOWqYuUA52l6RIULfV8X/CqzkFmzkFm/r1XNgoA8R2CUEW5OfTQF+jOIlEgDe03WCZOfyR2ARL2JQmrAB2I+HYQ38VkBOJbW5wc0NTd5vy0zTJWMn8e9DMD1vqv/DiIbmx2Zh5Cm47FTz2KLvwmuvi76MIt8dNP4Lf8Ck0/NuScQ6F+I1pYNPigxC4Qno0VZC1vuu7DwE89ji7cGm3YA208dGTyBI5xxYVfpgiafw9dvBvWO7MM6u8viTa1tv0maECdh45bIb7N4M0qkrubE8z+w9rQJb7b77B+28KBKSfOeNKKhMKroJm/QfNJ2EFmEJIRsVzqfvCSe6LhlWzHH99y0NRLEQ+pOgM4o/cboVXoSk+EYUk9iHhI2fdQsmj2peC7GUtB9Bfb3zUNTT8BCmhHAi3/BApvmPxu+ZGD2qqq1jCj8B7Ed0QzL0DrL+29skPxKn7Sv11eBdQ9aBW1UjH8NMX2SwKbsXTQwrtDnmc4Jgbn1KcImrorKH1XUyBMP1aaWKl2ipMRONPMoMNF4oMW2AwH8aq7mg5LYgc0vBKanWvZMNoIsW9aQdFA10e/3m/TYtVCkINda5WhA12f3A3VBgvlxL89ZPMHzf3P+o9G1zPNFvkdaHDIGv16EBKC7ieYApCCtguwm1UYzb+D1F418Bod10Hrb4EMtP8BVOl6gmm/HC0/bMCDXRGxUNNI8JYD3qFLPmGcqocdI8c59SmChJZHiQFpc7Ylyi2W8qNNN9tfZFkeg8irlgqJrG4t45L7APlRaYKr34wu3t0ORkOzoO7OAZ9sRDyk/EeoHoJ23IjffDKS2LPfswTNvYou7kzbFKTuNqTuHsj+04SrQiujfjNkHrUbUfoJzLkXMIfeKV/w+uAfIHU/XVk6mgmEuoJDZolT7P/aUn0u2nwqFD5BKo4e8oDaMXE4pz5VSOxuIYbs30yXJTr8svGRIOHZMOM5IDtoRxn1WyDztFUixoZXXq6qkHkMzb2FJLZHwl8c3BYJCpBGgBYWWiOKzF+CTJcsFD61AqkejSv6vbb9cmi7GkiZ/kr9o317mGbsZ2NPMyHIPIeUH9orVCGVxwHH2Zz599H0o0EOfmecOgSJ3S39sPU8C10lvtNbJbHXYW0OKk+D9itAs0jV2UWv/hSvFqm5bFhjVXN209GOoEXd1OkfsDTgnPoUQSSEVJ44TmsJVpTTP6oZdPF3oNAAKFpxDF7ZgUPOqx23BB2AMmjHtYHTnFUss/FTD1ipPxIcmHaGP0IMqxl3TylfQmjmGbTjZlNhrDzTer9G1gKiWPw9MqSsrIQ/D9ENULmiO5QV+gJexVH47ddBx502V+tv0fDq3f1lw8tDrtOxR5DY+khiu2H/LEqJNch+CvBNA6fuAScxMI647BdH8cnPCxT9OoCU7YKHQ+YZGx90JtK2K1G/oXh2tV6I5cynTd8l9g3LdIltihaarbnzYFkdid2wA9OkZdK0X20FVYX30cbDUM0jsY2Qmt9B8gCo/i3acTf+gs3wW84aOBUwsoaFy6TM5i8PDjnzH9El5gX2RBEgVb+yA1yvDirP6hU6Ui2g+bctzDMRZJ7F/h0z9ruwZO2Bo6S4nbqj+ISWp7ugKG4HhsMhvq21get0vKk70czjMOMJpDPnewBUM5CdA6FZA4dtQrOsuUQQGpGqXwJpdOE2kPkzSgQqjjeVxa55s6YEKSEkvh2EV7DmDrFN0IXb95g8i+bfh8zjEFoBqTgZUrei6YeDz/IniHwtyMnvjTV2uDuwf1kkCNVI2d5o+h6z16u2NMvOa8IrIjMe6nrtpx6B9L0QWdcOyQtvAwI11yNFbEIxFKpq5yyZZzEphBWCm5VjvHBO3VF0TIjqDmuCEFoeKfvesK7zkruioRlo8ynW85SMxWXz8wbtpqOatXTOwoe2w686By9wnqoZKCyA0OeQ6ovQ5p+B34hUnIR4STTzMhbLzttX5kno6dQbf2SHnAJEH8Wr+W1X1ahWnAwtp9j1yQOgYS9U24CodSdS6MoWUT8QIhvgZyaxPiJjEl4ZZvzFWiCGVx7wDEOzLwdpninIPB981zJhtO1ypPbKAdcdDup3mM68NwPpkb5qcsPXQeFTpGw/y0hqOQsIQ2J3JLys/TnOoRfN/A1t+YWpcFb92s6BphFjcuoicgzwA+zX9z/A93VCyuQckw0JfxGpOn3k18U2Q+M7Wcd7MoA3tPBV/n/m+DqrI9uvhcS3gtz9PSwNMzwbqb0Dr/b63teGV8c8dgiIQnhN05qJrGPOO/s8liaKHfz2wEvujMa3orM/qaZupSs9MXUf1FwHqdssFBVaBhI7jfzn4VWAN0RLtvy8Hi+ydJ8VRMecBaWaRxt2Dxo6K1p+VNeBrbacZZ+TLJoODkY72+SlH0ZmvTCmtUdnb8ZuxKShIGjTT5D6e8fdjolk1E5dRJYDfgKsoaopEbkD2Au4vki2OUaJph9Ds68g8W0HLOGfzEjFcRCejRY+RBK7mWMbDG9ZujNHYhCxTj7afj1os72X/wBt/CEaXhWpOLIrJU9CddbTMv2wpYS2XYRSAEJIzdUQ/iLk38W0YL7cZ+nOzA5f3+wdOy58AM0nmNaMLrZd7ii1XlTVnkK8CsvZX5LYZiAxulIjk9+3kFFkNftZjoXC+8ETUHBA3HFHt9xvdi7dMf8C3fIDgDb21fkZD7r6rwJoUOg1vRhr+CUMJEQkh3UU+HiI8Y4S46ce7JK71Y6boP7uIVMDR0PngWIpHq1FQpDci+HOLKE6qLkGbbvGduQVx9oboXosEyWI0ef+bqJi+deQutu6rw/PhvIfmdyA6QgDOTT7HFJ7o90cCCGDaZe3X7PEN0xLXXRx37THJVDNWqPs0DJ9cuVVFW0+JsgmAa2+ONCtV1NZFM9a9814FLKvQGRVkASa+xdkX0ZTDyBlYyhC82Zh/80FiEJkra7UU0IrBDt4sQNnzVgvXrCxhfeGfsooMuJVoYk9IHUXoFB+wriuPxkYtVNX1Y9E5AJgPnbU/biq9uktJiKHAocCzJ49vWJbE0L2b3Sl3YkHuVdtt1lE/PZbrSRdYlB9KRL7v6LOPyoiX0UqjrEYfnCoKmU/QPPvWAML/6NgYN7CNf0RXRdLCLOUTYluaPnZnTeJwQjVYf+d8j2+GUYbDkELH0JsB7yavo2hVVPool2tPypA7Q2m9thJ4cPAoQc74uYTgycJrOl29UWdxqO5VyD7gjna7N/NltZz0dgGXYevI0W8cqi9zVJMvWWQ8h+i7VcEOfF5+x2oOAmJ74C2XwXtQSMQSQ5LL74UeFWno+WHgsRKIpUx2RlL+KUG2Bn4AtAE3Cki+6nqTT3HqepVwFUA6623nlMBKjES3xZNPUig+QqRYWaeDBPVNLSeDeRBs2jTsTDz6SGzU0qJ+i2WF+83Ah5aewdeZGWTKKi+EAC/4RDI/cMuWKKDUCcS+TLU3oBmnkOiX0MG6o7U37UVJ1lhU+5tyyH36qDwCeT/bQMyd+G3r4FXtl/vCzMvWkZOcB6gbdcgNZd0v98r9OSZqFhXf9ZHUL0QEUGbjrQiJXx63VzEA79l2J+j388WWQWp6m4Qouknu8MxxJDwaub8y4+2DUThE0jsPKCez3gw1NPRVGYs4ZetgXdVdSGAiNwNbATcNOhVjpIisc2h9o9WZh7dxASxirsC9AyMaAO6aEeou2/o2HepSD8JhcV0PaEs3hWd8XCvDkpSc7lVe0ocLSzC/2wdIIrU/A6Jrt89Lrr2qFIAxavpo3HjL9im96Dcv/teGJplWj0AxCDU+2lWvGrLd289H7wqKDSCPz+4doXu8FfuP3R3a1IsGlqwFMcllS8HQf0mtO1SK6gqP7zfLlTEt4S2t+k6lO1MwRQPEt/uPV/mRbTlTJAkUv1ry+hxlJSxFB/NBzYUkaTYb9ZWwBvFMcsxFiS6DpLc16oViz23xKDyLLozLNREsTLPFXUdVR8tfIzvp4aWeQ3NoncTjQ60rXcan0gYiW9pOfMtP7NDTW1Em8Z4kNhpr9+M33Qs/uK90M60wl6HlB4ku1v5qSq+3w5+K5QdbhWuiW8jFUf2nTy2CdZk5J/gvwfhdSHxXaT2hu4x8R0wR56EyNeQWS8gM55Aaq4ZVKysz+do/BF03AKpu9DFe/f7s5eyI5CqXyDlRyH19w54M1fNoU0/hMI8yL9qnaAcJWcsMfWXROQu4J/Ys97LBGEWx9TGS+6K7y+Atsux7j6+hRyKhGoWbdgXcq8BeZQYWn0JXnzLfsdLbGM0vjOkg8MxwjDgo7/SnSkDvW8GY7C5+ZRAZz2HNh4GM/+Cl9gOP/KI5Y5HN8KL2NmG5ueji/cGXYjiAR5UnIVX1r+2uWb+ZlK3nfbnX8Gr7/1ALJVnQmxLC4vEt7GCptAoQmL5N+kK3XTWCtC77Z6IDC89U3N0SyJrEB5zlJoxyQSo6umqurqqrqmq+6sOocPqGDWa+y+afnTiSr+XQMp+YNK+kbWh8vTeh3tjwE89gS7awQ54uw4dM9D808HtqfoFJPc3tcLo15Gyw/ofJ1GoPAOIWEig6ldFsZvCe3SHPyQIB4EXXhmv7HtdDh1A2y4C7dRt8bEDzTMGlhHoL41xCUQ8JP4NJLHj2HqOxr+DNRRJWvhuDH1UxUtaeiVR+6oYH22i6Y6MZweT9dZbT+fMmTNu600V/NQT0HwcSAikDKl/ZOLi1yVECx+jC7eju/1cD6QWb9aLfb8/2rXUB6RoKZl+6lFoPtEOJr16KLRAeHmk5vdIaJneY5tPgtS99MrrxkNmPD9g/1S/4ceQfQwQKD8GiW+HhFcsiu09UVXLoNIsxDYtSh9VLSwAiTi53jEgInNVdVhZD07Qa2kgdRsW5mi3LIncvybaotJQWGhOsYtQ8FWJVA/Sh3QUiHhFzbH3EtshMx6Fql8HwltNkH/dqi6XXLv8uEAlssdn9WYNuiP3an+HzHodYttB2+/QRdviL9qTYj8ciwgS2xiJb9nl0FV9tONO/NaLTN9mpHOGZjqHPo447Zelgeg6Qbpa2jIlQitOtEWlIfJlK9vPvQEoUnP5iNIKxwM/9QS0/Qa8WksvLHwCyX2RsgMsU8RvQiUUhO39IAWxNxKagdTfY0VHHbejfiuS3HPoA01tM8GwznOA/Mto26VjrxodAm27GNqvB7ImNTzjadP3cUxKnFNfCpCyw0xBMP8/JLkXEl5hXNbVwmeQex0iX7aqxRIjEobam+2wzpuBhGaUfM2BUM1aGmHuP5DcHy+xI1pYDM3HAhkovNM9uP33aPtVaHIvpOJUiG0D6YcsZl8x8FmASNTEw7QA2RfRQgIi6wz8BCFJrClIj8Pd/Hw0Pw9N3W8FRvFvF7/KN/M83SEx32QTlkL5iemCc+qTHNUM2nAQ5OZAeBX7Go918++ii79LV0563T0lSZFcEpGQ6YsPA828gKbuhsjaSHKfojozbbscOm4H0tD8ujWvlgQMKF6Qh4470OSBeNUXoP4ZIPFhxaS16Uf2JKYKyf2Qyv5L20WiaO210HAQliMegcR3TaFSO1DiUFiAlB8yug89EIkdLC9dfWuVVwLZCUfxcDH1yU7qoSATRCH/Lto+TrVd6UdNHEnb7M90HwWIEaGaQ3NvWZu7MaLqWxOIxh9C+j5o/bXp3BST/Dt07U4lhKafQBftju2SB2qhl4VF2+A3/th26f04dNU02nEXmrrXfiZ+O2T+GlSUpqxT0CBIZN1AojcC+JD5G3ajUbs+8+zoPm8/aPop/KbjgCqo+i1SeRJSd/+EVoo6hsbt1EuE7/v88fTbmfPYK2yx50bsduxOo9tJ9nIMAqNosjwqwquARC3vWSLD2p1p/j209TcgCaTihK7wiWo6aPI8H/Cg9iYryR8hqoq2nm3FMVJO9645Ba3no5HVelWHjgZVNR2WxK6Q/YvZ69UFmiatwaiwfR8fiFq2i9+A3QQUss/Zk1U/tmjD94P8eyD9JFJ9iR2QBhIHSz6JaeETtOU8II9UnGhaK119UIHUH4FyrL2gB/Edx/T5u9bN/tMkIEiZnVXnIMl9izK3o7Q4p14iHr/+L/zpogfJdGSZ/8aHzF59OTbYcd2hL1yS+A7WcT7zDETXRpL7DX1NEZD41qh/solJxbexasxBUFW0YZ9A6tRD8/OQ+j/Zm5kXesm3avs1PYSoesyRf9ccVmQNpEe3JEu7zZmSYcdd2AFkC71/fdNo4xHIrH+M+jObIuJx9vMGqDzbzi8iX0YXbNi7ZokQXTnm4dXAq7Q4OnlsYN+GFr6fg9zc7m9knkYbvw/Rb1hmk1dhomQ9bWo4qKvwSHP/QeofobchPiR3Q0LLQXhFJLbpwJ8v9xZoUxC3H+K/fv6/dKdcptDcq0hibDcMzf0HbToeNINU/XLSHYJPFZxTLxGfvPsZ2bQVo/i+8tn7i0Y1j0jYel5OAF5yT0juOczR2WC3qkChRwUkEJph8VjAdrZ99UQ0/wG6eBdT/iME1Rcj8S0tZNOwvzmj2DfodmgeRNY3Od2u7kJj7M9S+DBw6EGaYPuVyIxHbOrKcywPHYXyYyDzl2Bt3/K6EztDeA373Ml9+9Wxl/yraFeoBLM7+wIQh+QBeJX9ZLEUPqTLufqfWVy//DBo+x3dNw9F234LmkErT8NL7t5nGr/9JmvqLZ41x665vs+To/ptaP4DaL+kKwMJKQP1kcT2feYcKdp4RJc0rzYdDjNfNr0YR1FxP9ES8c0DtqCsMkmyMkFZZZJNd91gok0qKdaO7ZuWoSEJSHQ/qktkTag4CUJfhPiO/eubdO1gs0AKzTwJgLaeB9qIOc/ng/CCCV9J1Vnd1aFEoPK0XlOq5vAbj8D/dE38xXujft/0wu6xCkHDC8ODHhk/XmIHSHwHCEHbb60RR1fvzQzk38Grvwtv1ly8JaR6NT8ff8E30Ia96f1frjOFMQ2FAeSAk/vaz1MSkNjV8uvLjoDkQaZnntgF0o8ETy4ZaDmj/9z19j/YOtph7fn8T3u9rdlX0IWbQsN3rcOT/zEgUHY4Un9fcSqGOztTgUkIFEmiwdEbt1MvEct9cVlumHcpH/7vE1b88vIkyidOmna8kOqLA+cc7bNT9cr2hsGaNUS+YtkfACQgulEwaY8whmYguTde9Xnda4Zno4md7e9L9vBMP2qHkGQh9x+04wak/PBeQ1TzJlub+bOdG1SdbZo2oZm9JATU77Dm0Z2OKHUfeDPBXwBaQMq+P+BH09ZfBXrugS4NSVNj1BbwF2H649Woap/ds1T8FBI7WtpjZK3gcwpUHGPpkN4y6MLBQ2MAhFeG7IJgrUifQidtu4RenZsAJIRE1ixe5WrFqUFPVx8qjkPG63xomuGcegmpqCnnSxuMTwriZEDEg+jXu16r5qwdmrdMV9u3Aa8Nrwx1N6Lpp5DIV5D41vZGYl/IPBWM8qHlPLTull7Ob6CGzJDvTgxB6Za47UHmKci+SGd2Ebk38WY81o+BMdstaxsg1qWo7g7IzrGm1kNKygaGSASpvRGJfCXoUnWSfT/9qGW19JCuVb8d0g+bpnrsm12fWfPvB71XO8xZV/4Cmo+x0v7K0/r9eUj1BXZzKSxCKo7qq38fmoE98XTq10QgtLqpWhYJ6+m6DeAP+fvgGD3OqTtKgvrt6OJdg8f8MNTdNmRbPYl8tc9jvohY79DO9ML8y2jqLqSfuHEf4jvajjr7AoRXRsq+18+gJSKQA8R4RUJQez3a8ktLV6w8yxzjIAeTXddWnITm34TCx5DYDcJr2vf9hT2OPLNQ+MgKvvDBm4U27AX5982m+AtI1ZkA1hhbmwCFwnuItkL1BWjHHeA3oOr3iVWLV92r0UVfG3+GFhrtMNqrhvxrgWTuvK6er8Vg3HuWTkOcU3eUhsyfzaFrByBo+w0WAx8p0fWs12jhw+AbvlW5DgORKFJ7fb9OrovYNyC2hTXaCK+KlA1cuCORryJ1g+eR93tdeAVkxpN934hvD21XYCqGIVQ7YOFW9l5y/yBXPmdPGpnHAXPqeLXYrjoLKKrt0HgSkIbMX1EJD95PtT8bvSqk9ko095plMeGDNqOtv0JqrxvxZ15a0ezLaNPRQBYqf4kX/8ZEmzRinFN3jAhVtRxsLUB0/YGdZWhmjxh5FJZQKhwuIlG05mZY/C3M0fhI4jsjnGPgfACRkJ0FTAASWgZmPGW74/BK6IJN6Mo/77jORL78BUC4V1tCKT8Uzc+D3CuWTy/lpuCpYA22XxuDUbEe/25eIE0wfdCmnwQ68kDTUeisf42oychkwDn1CebFB+dy67l3s8Lqy3H4xd8nWVH6A1Xf93n1r/8lHAnxpQ1XHVFRlLacYVWcALGtBlRPlOj6aPlPIHUnRL9m+uujxAsvi854whpIh1cds/aNZl9Bm08EfCuq6XEOMN6IVw7RtVEtmAPtTMuUKqi9A1K3gFQhZZZNpOpbMVB0Xag6E/FqUL8R7dQ9Vx9JDCM0NZA94S+i5YdD+zXWxLvy54OONwnj/Ng03CcTvTKHClg66dLl1J2e+gSyYP5CDvrS0WRSWSKxMFvtuxnHXdN/c4dicu5+v+Vv988BVXb4wVYcdtHAmRtL4n/6FbryuBFk1hslyzVWzaCNP7aG0dFNkOoLi5Ix4S/YGPygSYVUIDPnFF8Ea6Q2NR4CmZeADEg9UnulpYIuOa7lF3aj1IJl6NQ/hkgE9ZsgO9fODkqgs94fmv0H2nio3YjKfoRXcdS4rFtK/NTjgWibDxU/wyvbf6JNApye+qRAtYCmHkQ7bhkwP3rRx414IfsnyGXyfPjmxyW3661/vsPTt/6VdFuadHuGh67qJ9Y7GOHPYzsXD0LLlbZ4pON2O+TUdtM0Sd1fnHl7pu5piiVKRccd9Vt7KCFa9Wx/Dh2wCl9NYQeriwLt9uAgNL7VuDl0AG0+PfhZFqD9arSwcMhrJjte4pvIrJeRWf+aNA59pDinXiK05Qy05RS05Vx08e79tipbdd2VWGH15UiUx4kloux98ndLatOzd73AMZue2vXaC3kst8qyI5pDaq616sn4TkjtjUWzTbN/x1+0kxUJdTZi0AzdpepK9xPCGKn4GV0FSxUnTHxVoyRBKrG0RwGvauBm27FNsJ6hYfCqgqbbE8SSIZcidEmaDIhElupwkgu/lAh/wUZBYQlAFJnxFyRU32dcPpfn7Zffpe5ztcxYvv9WZsXihK3P5F9PvwpAKBxi7S2/zPHXHUH952pLuu5QqGbRBV8PdqAC4VXx6h9A/RarwszPg/AaSO1NRUuJs6cnnTRtAf30Y9B0FHYTi0PlmXjJXfqMU81D6h6TZEh8d2I153P/Q5sOA78JKk40WQlHSRhJ+GVq3FpHSaotxVUn3Mgn7y5g75/twlqbj1w5cECiG1qaHHlT8RugnVc4Emb19cenQGn19b/IGy/8ryuGf+w1hxXVoWv+A7TjFmtwUbbf8Hc7mg3KxgE0EAUD8SqR+odQTY+pAXK/5F5DW89FvSo7LA0tV9z5R4j4bajEghtb2jJb6OvURcIwnBz9cUAiqyIznhp6oGNcmdZO/ZLDr+GZO18gl8nx2l//yw3vXEbNzKqizC1V50FkBK3KxoEDztyTeFmc9179gJ2P2JaZK/R9chgtJq+7G2gzEEELbyNV5wzrWvHK0eRe0HEnJpjVW9iq2A5dNY02HRo4UA9tOgqpu6uoa4yY2MbQ0iNEV6SbjGoWbbsU8vOQsgMnNNPHMT5Ma6f+3usfkMsEO0RPWPxxQ/GcetCqbGJzKnoTjoTZ95RdSzN54dMgHc8HMpD9+4gu9ypPQ8sOBmL9hqmKiqYCNUgAHwoLSrvecPDq6SVw1X4NFKGDkbaeDx23ARk0+1eofxyZyDh8EdD8PNOYlyhSeYr1hnV0Ma0PSvc8YWdiiSiJijgrrPY5vrDm7Ik2aekltFxwaJewr/hOI55CQsuVzKGratfho3g1gcZKHIiZlG4R1/Hbb8dv/jmaHcn5kdDrv2Oxnuxyr9J9wOz1qMxdOjHd/v0h+yxknkIbity6bwowpp26iFQD1wBrYukJB6nqC8UwbDzYYs+N+eLXVmLxxw2s8X+rEgpPfIikJ4s+WsyVJ9xILp3l4HP3ZYXVRv9I3tGa4s4L7ifdkWG3Y3eibtn+Y/yjRSQCdXdD+jEI1UF086LOPxY08wzadBRoAa38BV5yZ6TyHCj7kXVpKmJTbe24GVrPB1Jo6n6ov9caQg+BSAitOh9afg5E+q1yVVXQVpCy4YfzkvtD82t2k/DqYRQdpyYX+R66/Qr+0n2TKgVjyn4RkT8Cz6nqNWKnYklVbRpo/HTIfvF9HxEpSjHLj9Y5gXdfnY/6SvXMKm7/+KpRz/vTb57Nf557Hb/gU79cHTe+c9mEF9yMF/5nGwSa7AARZNa/S3bG4TcdbcqKYM636jwkvu2Y51XNo42HQPYlkEqk7rY+OelaWATpR9HQTAithoSXNZmF3Fu2Q49uMCUEtfzmk613Lwpl38erKN6T1mRlXLJfRKQK2Aw4EEBVs3QJV0xPnrzpGS485Eo8Tzj5lqPZaOexHUp9PO9T/IIdnjV+1sQTNz7DN7+3xajmevMfb5PLWBx50UeLSbenp4XGOwAiPeqL+r+RaeYvaOpxk9bN/QeiayFV5/aVqB1qqcR30PTTWCglDJFRtDDstEkVCh+ZamLuZfsiD9qEtl2KVF/QPdZvRxfvDH4zJp8bQr1qqLsbiawCkakjAS2Vv4Tk3kAEKaKC5FRhLDH1LwALgetE5GURuUZE+rQZF5FDRWSOiMxZuHDprzgbCN/3ufCQK8hlcmRSWc4/6LIxz/mdH2/fVXEKcMlhV/PR25/w1j/f4c1/vD1wgUo/bL7HbMbOiwAAIABJREFURsTLYsTLYnxpw1UHdejvv/4B7/z7/RHNP5mRqt9YcY8koerXfXbpftNxVu6evgsyj1pDi/STaNvVI18rtgVSdytSdQZS/9CozwhUC2jjweii7dGFm6D5D3sIbYVAlsivL8wLFDFNudHCFI0mx9s5Z+7f+Iv3xm/4AVoYe/WyZv+Bph9Dx9pGcKh1Ms+jbVebiBkmxyyRrziHPgCjDr+IyHrAi8DGqvqSiPwWaFHVUwe6ZiqHX1SVb5XvRzZlDyuVdRWcff9PefS6P7PyWp9np8O2xfNGfg89coOTePMf9sucKI+z4bfW5W/3z0EEvrHPphxz5Q+7xv7372/x7F0vsOq6K7P5Hhv1Cq/4vs+LD84l05Fl413WJxrrX0Pl+tNu467fPAAibHfQlhx5ycHdc3TcDx3XmqhW5RlT41G+5QLouKqfdwQSe+KNRi64CGj2FbTxgO4WcJENILqOSSeEV0Vqfof06F6kfqt1QNJWuh9L4kjlSUhyH1Rz6IINgiYfHoS/hFd/z6jt89uuhLbfY8Vin0fq7i5JSMtPPRw0Eslbtkvdg0h4+aKvM9kZr+KjD4EPVfWl4PVdwEljmG9CaGlo5YKDfs+H//uEfU7eha33G90Bn4hw8s1Hcf73LyMUDnHYhQfw023OJt2RIZaMkW7PsOeJI5OMBf6/vfMOj6Lq4vB7Z2t6o/ceeu9IEUFQqopiQWlKFVFBVBAQlKLAR1FERBFQQQGpiggiTQHpHSHU0FMIqZut9/tjwoaQQgKBFOd9Hh+zu3funFmSM3fOPed36DflFUZ1mIiUUK5Waf5etdvd0Pq3bzYxdM5rKIrCpZCrDG89DmvS+awWG+16Jbc5UxSFpp0zDgfZbXaWT1uLNenGtOaL3xk4vRc6nU5dJcV8ACSC4zRSeCP8xmQ4X04hpU3ts4kJTC0zlgGwrErjTaPaCCOLmuTZiuJPcrNuPegKqr1P7+h/eguh+EDQCmTCz+A4qnZxMjUFj+fUAdKarACJC5xX788+y1LAov7sOKc2ALlP9cw0sW7C3SAFk1qU9R906lnhnp26lPKaEOKiECJYSnkSeAzIXPeCXMQXQ79lz28HcNidTO//FVWbBFOsfNra3y6XC5fThd6Q9tfWrGtDmnVtCMA/v+5D0avOxJpg5ehf/9J9RNbtq9miKj9cmEPU9WhKVCrKa9Xf5nLIVSRQoFige/Ufsu8sik64z3dg05EUTj0jbFY7I5+YwOGtx9HpFRBq5Nm/kB86XdLqyxl2m2a3DZwXs34xDwl541WwH1YvwtwJ4fdR+oMNNcB2W1Wk71SEsS7oCmbQJu/BI/Slkb5jIf4L0JW5qwSuekwphG/am4ZC8UaaO6tNqnHBHb1as4yhBjivo/Y8NSa1w3sA3GpgghWQkB0NsPM591t8NAT4ISnz5SyQeQ3XLGK1WFkycQWRV6LoNqwTpatmz6og/FIkDrta9KHoFG6Gx6Tp1I9sP8GojhOxWmxUblgBl1PSvs+jdHitbZrzVmlSCYPJgNnbhXRJHu/ZCoCwixEsm7oGT18Puo/omin9dN9AH3wD1RjqpPUf8OWwhTgdTvpNSW7PVv2RygghMHoYEQJaPNsk09/B9uW73DF6KaFoucIUK1eYgTNu++c01gNdaXCeByTCu39602UL0nEGGb8AdIURXq9l2sFKaQH7btSGGkDir2oz6XQQ/p8iYyaqq03vISjmZtlif3ageD4DntlXLCb8JoFXHxBmhP7+ajKE3ySkrjS4whFefbJfxiEJxaMTUvEB+wlVv/9BPA3kM/KMoNekHjPZvuIfHFY7Xn5eLL74JR5e9/+LdGT7CUY+OQEpJZUbVeSTDaOTV6e30afqm1z893KK90yeJib//gHVm6W9YRMVFs2+DYcoWbk4wfXL43Q66VFmEDeu3USnV6jVqjqTfht139dwi6vnrrN3/UHK1SpDtabBmT5u67KdTO0zm8R4KwaTnhdHPkOP0d1SjZPSDo4Qtemy8uBEwKQrARneIik+bATzEyj+n2buWCmR4a2TeqMqYKiLEpQ9apLSlQBC/9AU/KQrARk9XM3G8XgG4T30P5OGqpGSfCno9e/u09iTYsl2m4MbV6MoXkGVjd2+4h9O7TtD86cbUane3bq6p6RG8yosuTg3aYVeON3NTKM59caiEHDtXFi6Tj2gkB9terRwv06IsRAVFo3LqYZxTu09kyVb70bRsoXpNDDrOdGPPN2QHat3s2P1HoIbVODpNzukOU4IAxiq3q+Zd8d1LUngK0lu134w04cKISDoR2T8PLWwyKtf9pgU+xnEzwF0EPAZwtQqW+bNCBk/V9WRxwbx3yD1lREe7R/4eTXyNnnGqT/5Whu+H78MIQRFyhaiSBm1CnDjd1uZOXAe1gQrq2atY87+KZTIoka4t78X3v6psjFTMGLB64zt+gnRkbHYbQ4MBj2evh7UbVMjS+ep3LACpw+cR7pctOreNEt2Pih0Oh3vf599XWukK1rVgtGXu7dORbpSquyA64qaxueR+qkhI4SucKZi0JlFumKTHLoDcCCjP0QU2pJt86eLK4rk0g8rRL+DNAQj9GUf2CmllOA4BcL0UBtuaGQfeUb7pfs7XZi4bhTvfDuYWTsnukv69288jDVB1bYQiiBk39kHcv5yNUvz3dkvWBP9HYsvzKFczdJER8TSu/JQQvanf84Ni7bwVGAvXiw9gJD9Z+k2rDNOhxrDP7bjJHabPd1j8yLSfhgZ3goZ2R0Z+QxSZr2xhRB6RNByhO8EROA8FO/sWW3fM0JPSl2Wh5PKqfZ1vX3PxY60/PpAzyljRiEjn0NGdMJ1D3n6GjlPnnHqoIZKmj/TGLNn8qZZ82caY/I0YTAZEAiqNa2U4piEWAujO0/m+RL9+W78skydx+VyER0Rg9PpTPPzq2euc+bwBRw2BwkxFuaPWpLmOEuchRn95xJ3M57wi5FMfvkzlk1ZjcPmwJZo58zB8wxu+B426/07drvNzukD57gZHs1v8zcxvf+XHN728JORZNy8pBZnCWqGjG3XPc0jFE+ERweEsWH2GpgJpDMcaT+mNqQAtarUbyooBUFXFuH/v4dih9CXAv+pqMJjqKtnQ9bCi1lBykS1AQcWwArxcx/YuTQeHHkm/JIeTbs0YNJvozhz8DwNn6xDoVIpU6u+G7+MfRsOYbc5WDplNbUfrU6N5lXSnS8h1sLQZqO4dOoqQUUD+OyfSankeL38PJFJ5fs6vYJvkHeac7mcLm7fh7Zb7ZSsXJx/d592l/9fCbnGsimrCSwaQIP2tSlQPOvdj6wWK4Mbvk/YhXAcdgcgsFvtbPrhL2bvnpRtmUJSShaM+ZG/Vu6m4RN1eO2THqn3IHTFARNgVZsjKznXmedekNadyKgB6oaJrhwE/YgQRhSP9pAD8WzF3BaXz0i10tXUCkwP0gYjCC+QMag9aLMWxtTIHeSplXp61Gheha5DnkgzFTEmItadsiiEIDYq7SbQt/hz8V9cPXMdh81BxJUb/PLlhlRjSlctSZ9JLxJULIDqj1RhwP96pTmXl58XvcZ3R6dXMHuZeHveAAbP7E3ZGqW4lcTgdLr4YcLPzB76La/VHEbU9ZR6aFt++ptXKr7O263GEHE5Ms3zHNx8jLDQcCxxiditDrdGvKITnD0cmuH1ZoXtP+9ixYxfCT1+ibVzNrBh4dZUY4TPUDA/CfpK4Dsa8TA2VrMRGfclYFErOZ3n1Hz3HEbxeh4lcAGKV68Hmv0ihIIIXATGRmBsgQj48oGdS+PBkedX6nfjhfefYtcv+7DEJ1K2Rinqt6ud4XhPXw+Eov7h6HRKuhuoT7/RgaffSDtL5Ha6j+hKt7c7IRThXtX+b+t4Pnp2Gif3ncHbz5OrZ8MABzq9wvGdp9wFTDeuRTGl92xsiXaunw9nat85TF6fegOwQPFAnLduXIqqEGk0G9DpdNRsmexUd/2yj7OHL9DsqYaUrpJ2VZ7NamfHqt2Yvcz4BHoz7dU5KDqFEQsGE3klCqdDfcJw2OxEXrmR6nghPBD+n9z1e8m16EuCfR9gS3rSyD5Z3ryAMFTN1obiGg+ffO/US1Qqxo+X5xITGUdgEf+7rnRaPteEg5uPsnPNHmq2qEqH/mkXF91J3M149EZ9inj/Le7Uaff08WBSknP+8JkpSU5dDc+Uq1naPS4hxsKtJb3L6eJmWDQJsRaunQujRKWiGM1qvnS5mqUxmAzYEu1IKSldrQTPDetCncequ3XTNyzawqxBX2O32vlx8kq+PjY9VTs7KSXvth3P6QPnkBJcDid2mxpXHt35E748MIWfPl1FQowFo4eRtq/kHs307EL4vKfKDDhOg1e/+y7S0dB42OR7pw5gMBoy3RRCp9Px9lcD4KsBmZ7/m5E/sHzaWoROodGTdbl06gpNOtWn98cvZHgTiY2KZcfqPe7XeqOeouWSW40Vr1iUpp3r8/fqPSiK4OmhT9KjzEAcdic+gd7M2f8pvoE+WC02LHFJ+hgSwkMjUzncXWv3pcgSOrX3TCqnnhBr4cSuU+7V+O3ERycQUMiPhSGfsWTSSn6e/gtvNB7JuNXvElz/wW3ePWyE4o3IZKGThkZuJF/E1B8Wh7Ye49XqbzG44XtcOK5qn8TdjGf5tLU47E7siXb+WvkP549eZOWsdWz+8e9057LEJzKo/ntIV/JOqpdfylQ5IVRd9oWnPuOnK/O4cPwScdEJWOISiY6I4a+fVS01s6eJBu1r4+Ftxuxlon2f1qnO17RLfUyeJnR6HdIlCW5QIdUYD28zQcUC0ekUDCY9xSsWwWDUozPoKFW5OIsnriAx3srST1eTGG8l8moUU3p9fk/fpYaGxoPhP7FSzw6cTicfdJxEYry62h1QdwStujel/7SequZ5Ukz7luqpw+Yg4lLyxmZMZCyHth6nVOVilK5akpO7TxMTEev+3Gg2MHb58FTnFUJQsISaEVOoVAGMJgNWiw0hBAVKJGfKjFs1gv0bD2P0MFKzRerNyTY9WuIb5Mu5I6E07VLfPeftKIrCzB0T2Dh/Ph2eW4qX7xGuh79Iv8bHCNl/ltATl4iOjOF2YYlbOfcaGhq5g/+UU7dZ7Ux8YQYHNx+lXtuavP/D0DQVF50OJ0smryRk71k6DmhLg/Z1cNqdbslbUJ321qU7CSjsR4f+bVk5ax0iSd7Q7GnC5Gmi9UvNAVXet2+1t7BarLicLsb+/A6lKhfHmZTWaPQw0mVweyo3zLg7TYd+bbl06ioHNx+l9YvNadA+edNXp9PRoH2dDI9v+EQdGj6R8ZgCxQLpPvAg2KMBSaGgHyherhpnj4HVYuPc4VD6THiBb95fjNnbxLBv7lPtTyPLSOsONTPH9BhCl7aiqMZ/l3zv1KWURF6Nwtvfiw0LtrD394NYLTb+WXeAP77blmao4qdPV/Pj5JVYE2zs++MwX+z9hFKVi/PcO51ZNnWNO+Zst9q5ei6M6+fCQIJEYvY08ebc/jTpXN8tOHZk2wlsFhuWWDXu/du8PxizfDgfrXmXFTN+pUyNUrwy9tkUNmxavJ0Z/eeiN+gZvfRtzh+7yLwR32HyNDF+9btprsazDxe3HjmEouDpZ8bDR+JyuujYvy0tujXhmbc6ZlsvVo3M40pYDrEfqVrrYgYU3IBQsreJuEbeJl87dZfLxfhnp7F73QF0eh2P92rlLvqRLpc7lHInIfvPYk1QNTd0OoVLp65QqnJx+k58iSdfa8voTpO4dj4Mh83J3yt3YzQZ0Bt0alzd5mDF9LX8teIfhsx+lYBCfpSqkrwqN3maCG6kxrPrtK5Bndaqdsz5YxcJC42gZsuqGIx6pvb5AofNAViZ1GMmcTcTcNidOKITmNrnCxadfnCxbOE7FhnVG1xRCM+efPzrQPZvOkqx8oUpX6sMwD11cdLIBhJ/AZnUnAID2I+D6f7kgqXrBtgOgSEYoSt2/zZq5Cj52qmfPXRBrSa12rFb7YTsO0OxikW5+O9lSgQX4/FerdI8rtOAx9mz/iA6nYKHjznFqrho2UJ8eWAKO9fs4ZNXPsdqcWJLtOHl50VCrAWn3cnJvWcJOXCe2Kg4pvwxlpLBxRm/+l1++/oPKtYrh9FsYFKPmbR5uSUN2tVm69IdTOkzG0Wno0DxQGbvnpTCnjvVkW/vW5o8RnLm4Hn0Rj1lqmWtglRKSeiJS3j5eVKgeBDCEIwotAMpJUIIvIDmTzfK0pwaDwhjc7AdQC3ll6C/v4bS0nkdGdERcKr/BS5GGKplg6EaOUW+dupe/p64krJLdHodgUUDmPn3cBLjEzF7mVOEDk7tO8N345cRWDSA7iO60uX19ljjrbw8tluqAiS9QU+p24t3hMBhd7ifAkDNK79y+pr7dd3HahDcoDyzBs1j+8+7sFsd/L1qN7N2TGTFzF/dTwYRlyM5dySUt+cNcIdf3l00hIhLkXzx5gI8vM28u2hIqmud3n8um5f8hZSS7iO68vKYlOEc6YoG2z+qdsltneWllHz8/HT++XUf0iV5a94A2rzUIumytNBKZpHSAYm/AxLM7e5NnTITCK8+oAtCOk6DoT7Y9yGpj7jXzkPWLWqru6SWcdKyOlNOXTouqm3zDLW01X0uI1879aJlC/P6rD58/9FyipYrzNAvXkMIgYd3ym5DljgLw1uPwxJrQWfQsen77TgdTnR6hfiYBN5dmNqJlq5akm7DO7F82loKlgiifK0y7Fy7172ZajAbUjSacDgcvNFkJJdOXXU7f0VROH80lITY5G7s9kQ7hcsUomqTYLcW+y3n+kTfxwA1rLTu602EnrjI4z0fpWTlYvw+/0/3DWzZtDUpnLp0xSIjOqhCW9IJ/jMRZrXVXeSVG+xcs9ctLbBwzE+0eakFdpsdS1yiu+NSZrAlqnsVvoHe1GxZ9YHfFKS0IWPGgm232rYuB5tIyJtDwZqUwmpZjQh8MAqHQgjw6Aq2/cgbvZBCB+igwC/3tmmqL4/a9w/AA6FPuzfA7Uj7SeSN53BnRAeteKBywBpZI187dVAd4S1nmB43w2PcqXlOu9Ndcu+wwb4Nh1KNd7lcbF7yN57eHiwM+ZygogHYbXZWzlpH+MVIaj1ajfI1y7gLiQ5uPsrozpNTxvCFWmxUs1U1Jr08K3lup4urZ65lWP360yer+GHCCqwJVtbN28T8f2fiG+RDdESMGi7x9aRPlaEULV+YEQtex9dnv6plIuMBkJYf3U7dy8/THc5RdAqFShXg390hjGg7HpvFziNPN2LUkjfv6ixdLhdvtxxD6InLSCnpNqwzPT98LsWYqLBobBYbhUtnj8iXjP8eLL8AVkj4Fgy1wJy5vqzZjnULkJQdZdvuDl09KKRlNZCo7mcLD/WGcg+t74SxPtLvY7CsBVNj8Hjq7udO3JDUxFoCBrBuBs2p5xr+E7tdUddvsv+Pw8TciE3z88KlC1KwRKCqm6IT+BX0xWAyYPI0pZkm+M3IxcwYMJdvP1jCwLojsFqsGIwGnhvehcEz+/BI10YpKkP/99qcFA5db9BRrWkw3xybToFigSnCOy6XZESb8cx9Z5H7vcQEK5dOXUlSYIQDm46kqA4NPXGZKX9+SL3Ha1HnsRpER8Zy8eQV9m04zKxB81S1wSQZWfBI0bzXw9uDj9e+R6X65anfrjbv/zCUL978FktsIk6Hk61Ld7D/D1XUSrrikLZDSFcc/+4O4Z024/i4+/+Iun6TG1ejOHckFEtcIonxVtbP/zPFd7Zh0RZ6lBlInypD+ez1rzPzz5Yh0rpVdSa3mkhIwJVai+ahoa8CGAA96Cs9+CcGQ03cWutSgqFShsMzQvHohBL4FYpXn0zZrYq03WolqYdMrO41Hh75fqV+4cQl3mg8EoQaV597cGqqwpvTB84RcfkG0iUxmPS069WKoKKBePp50vblFqnm3Llmr9tJJ8YncvVsWJqbk1JKju885c58AXU13O3tTrR+8RFWzlpHfHQCTTrWY+N329xj7DYHqz9fz4CpPbl8+ipDGo/EnminQIkgZu+ZzGM9WnB8VwggMZgMVKxbFp8Ab/pOeomTu0+rzTdQ8+0jLt9Q9UsCvkJafgR9FYRX3xR21n60OrN3T3a/tsSlzAra9es+6rYuiIzoCjiwJRoY0bYillgrOr2OqLBoxv48HL1Bj81qx2DUE1y/XIo5vnn/B3doat28P+gz4QW8/DLuNpUervglEDf5thuVGXRFwJz1Vn7ZhQicj4z/FnAhvB5Y//Xk83k8rWrU2HcjzJ0Rhsx34Lrvc5sfQ/qOA9sWMD2OMOWODl4aKnnCqR/aeowrp6/RuFP9VNrmd+PPxdtJiLOAVKs2/165m65DnkgxJvxipDsEYbc62LpsJ11ff4K2r7RIswl1k871CQ+NwGF3YPYyU7Rc2kp+MwZ8xZ+Lt+NyujB7qSX61ZoF8/PMX/np09UInQAJ3gFeGMx67IkO97GupHDQDx//rMoFS3UT9e9Vu2nX61GKlCnE5ZCrNO5UD58Ab5ZNW8PCsT8hhMBgMqjyA0LQeVA7Vn3+G+VqlqZmixmZ+s46D27HZ4O/RrokOr1Cqcol1MdzGQc4iIs247CqK2Snw8nl09d4o8konE4niqJQ+9HqqTZzAwr5E3UtGikleqMeg/k+mjdb1yen9Qlv8BmN8Oj4wDYnM4NQfFXZ4Yd1PiEQXi8ALzy0c96O4tkVPLvmyLk1MibXO/XfvtnE7KHfAjB/1BIWnJqFl2/m24mVqlwCs4eJxAQrik6hRHDqnfq6bWoQWCSASNcNEuOtXD8fzoIxP2G32nnh/ac5c+g8y/+3lkKlCvDiyKfpO/FFytUoTeSVGzzWowUmj9TKjADr52/C5UzOvlkVtZAnPV5MzpV3qJ8lRCcwdfOHvN/+Y3WVLKB09VLs3XCIPxdvd0sPSAkBhf0BqNWqGrVaJWcprJiRnEHjsDv5cMVwLhy/xIyB83A5nAhF4d2Fr9P8mcZ3/c469mvL1TPX2P7zP9RtU5MnX30M7L+hhhccBBQU1H+8JAc2X8flkrR9uQWrZ693n//GtZupNqPHLB/GlN6zibsZz+CZfTCa7sMBm1qA7SBqxoZEmJrnqEPX0MhN5HqnvvG7re74sU6vcPrAOWq1zHwebesXH2HT4u0c2HSEAiWCqFSvXKoxeqOezoPasXfjIY5sPU5ivBVrgpUjf/1Ly7PXeLvlGFVu1mwg8koUPcd1p9aj1ShQLDDVXOeOhvLh01OIDo9xZ6MAFCwZhKJT8PQxE3czIcUxxSoWoWqTYL7YN4VvRy1GbzLQoH1tFn34k7t6VQioVK8cFeumvSFVumoJboZF47A7MZoNfNpzNgmxlqQCJpWty3ZmyqkLIXhp1DOUqFQc/4K+6lOMrgM4z0PinwhzG8au7M/p/efw8vfCN8ib1bPXA2D0MFClcer4brHyRZi+7aO7njszCM8+oBRGOs6qLe90Be5+kMZdkY5zyKhB4IoE7zdRvF7MaZM07gEh76xsyeoEQuiAvcBlKWXHjMbWr19f7t27N0vzLxq3lKVT1mBNsOLhbWZhyGfu1WpmCNl/lrdajMaaYENn0NH25ZYM+3pgijETXpzBjtV7cNqdSCkxeRpxWB3JTlngzojxK+hLQqwazun98fM8O6xzirkG1H2HMwfPp3hPUQQvf/gcPT7oxsk9pxnRdryqlZ6EV4AXT/R5lM2L/6ZC3bLYbXZO7AzBZrUjXTJF/juAb5APIxcPpV7bWu73Ym7E8vW7PxAdEUO1ZpX5/qNlblmCW/T79GWeHZ7S3rRwOpz0rfYWEZcjEULQeXB7XpvcI8NjTh84x88zfqFoucI8/95T97cSz6VI+wlkzDhAh/Abj9DnH8lhAFfkC2Dfj/poaEIU3ITQ/beahORWhBD7pJT1MzM2O1bqQ4ETgG82zJWKHqO7EVgkgNB/L/FEn9ZZcuig6oCLpJJ2l8OZZju7g38ewWZJkgUw6BgwrScLPviRqLBo9xiztxmX00VMZKxbLnfhmJ+o2iSYZVPXUKxCYXqO6+4OQdyO0WykatLqNbhBBZ4b0YUFH/zo/tyeaGP5tF8AiPw1KsWxBrMBRaekWHHHRMby8fPTWRm5wP2eb6APb89TNeAvnLjEog9/SjGP3qCjebf0V+mXTl1hwdif8PT2oOOAtkRcjnRfy7alO+/q1CvUKZtmPn9+Qkb1UVexCOSNVxGFNue0SdmLTKpSdb9O/buskfu5r5RGIUQJoANw/zlq6aAoCh37t2XQ9N6UrVH67gfcQY0WVajeNBi9UY+HtwcBhf3Ys/5AijGNOtTD7GXCaDZQvEIRmnZpgN2e7EQNJgNvz+vPJxtH4+WfHM/Xm/S802Ycf6/azerP1/PFmwsYOuc1zF4mFJ1CndbVqfNYDfpOfokaLasw8aWZdPR6iT3rDvDIUw3VjByjLlVnJFBDIHqDjuAG5SlQPHWYJ61GFrcoXaUEH699nwZP1MHkYUTRKTzzdifsVjs9yg3iSY8XWfjhUvd4l8vFWy1Gs23pTjYu2sLsN+bj4e2BolMwehip0bIKn/T6nGeLvMonPT/7T8rtSukC163+sRJcETlqz4NA+I5RG0+jA88XEPq0Wx5q5G7uK/wihFgOTAJ8gOFphV+EEP2AfgClSpWqd+HChXs+370ipeTItuO8/+QEbBY7Jk8jo5a8RZNO6tOM0+lk85K/iY9OoE2P5ozrNo3DW4/jdDgRimDs8mHUfrQ6bzQdxZXT13A4nCkWNLcoX7sM5WqW5sCmI1SoU4Yhs19j5sB57NtwELOXGbvNjs1iBwHlapTmf9vGY/Y00SWgJ9Y7xMUMJj0Nn6zL2/MGcGjLUT7uPkMNwyQVLb23aAgtn717KpmUEqfDid6g3oAObT6KlGDyMPLlwamUqFiUhFgLTwf1djtrnwAvvjwwhV/mbsS/sB9Gk4Evhy2IzfLPAAAeA0lEQVTCmmDF5Gli8Mzedy3oyo+4YqZCwkL1hfcgFO+BGR+QB5HSCdgRwnzXsRoPj6yEX+55pS6E6AiESSn3ZTROSvmVlLK+lLJ+wYLZU0mYVYQQXDx5xV1YYU2wsX/TEffnOp2ONj1a0GVwe7z8vAg9ccnt4PR6HVUaV+KP77dz7Xw4DnvaDt1g1ONXwIc/vt9GxOUb7PplPwPqvMPhbcdxOlwkxNy2aSnh/LFQFk9cgU6vo2mn1P9WdquDU3vO4OnjwcyBX+NyudAZdNRrW5Nf43/IlEO/de23NOOlS6YQB5MudbXv6eNB/Xa13J2TOg1sR6FSBekz4UWefqMD1gQbLqf6fbicTuKjE1Kd57+A4jscUeAXRIF1+dKhAwih0xx6Hud+YurNgM5CiCdRy8t8hRDfSykzDr7mELe0SAxGPYpe7SWaHs+81ZGFY39CURSqNqlEQGF/tZxeSbvaTtErlKtThmvnw1O0p4u7GY/RrG4YKjqB3qh3x6ldTsmlk1foX1tNPSxZpTgXT1xOMa/T6SLuZrzqRKW6WXv20IV7lr195q2OHNl+ApfTRdVmwZQMLu7+bNyqERzachyzl8kd/79F254tWfvlBsJCwylYskC66pb/BYQ+6yFADY2HyX1nvwAIIVqRTvjldu4l+yU7OX/sIvs2HCK4YQWqN8u4tPn0wXPE30ygevPK6HQ6nE4nMwfOY+eavVSqXw6fAG/CL0Uikfy7KwS71YHBZMBus4NUV8ilq5eg0RN1+fWrP0iIVTdsnXYnepMeg1FPg/Z1+HvlPzgdanGSEMLdQFrRKUz4dST12tZkeOsPCdl3Fiklz7zdkTqta7BzzR5qtqhG0y4N3DY7nU6WfrqaE7tC6NCvDY061EtxTX2qvsnFf5NvHHMPTsW/kC+xUfGUqlw8wxJxl8tFdEQsfgV8skVL/WZ4NNERsZQMLqZps2to3IWshF/+U079QbB9xT9M6f25O32wcad6lK1RitWfr8dhdxJUxJ+eHz3PrEHz3GmMtVpVY+zPw/n2gyWsm7cJp8OJ2dtMvykvc2TbCXyDvOk57jn++fUAx3edomW3xiTGW/Hy88ToYeTNR0a7VRU7DmjL0C/6ASRVlS51x74/2zkhxebyU0G9iIuKd79+rEdzti/fhVAU6rapwbiVIzJ07NL6FzL6PUCP8P8fwpj+005G7Pn9IOOengJCUK1pMJPWj9Icu4ZGBjyUmPrtSCm33M2h53XibsZz9ex1bt0Ej/79LzvX7qVqk0p4eJnx9PHA5Gni6aEdUIRCYrwVm8XGjWs3CQuNSCrbB7OXiVbdm+IT4M1LH3SjWIUiCEXQ6Mk6dHitDSN/GMrrs/qyY/VeZgz4irVf/M6ojpMoUrYQ1R+pwsndp9WngSR+/eoP4mPUGHfI/nPuQi1Fp+4j3E7H/m3dPyt6haN//Yst0Y41wcr+jYe5cuYa6SGlRN4cDK4wcF1B3nw93bGqdMBVEhPS7iy1cMxPWC02rAlWju88ybkjoXf59jWyinTF4Yr7Glfc10hX6jTe/IKUicjEzUj78Zw2JdeQ6ytKcwMH/jzC6M6fIKWkTuvqVG5YkZ8+XYUQgjLVS/LVkWkc33GKkpWLU6JiUUJPXMZg1GO12BCKoGRwMWbtnMjWZTsoW72Uu6ozqGgA84/PSFOm9ci248kOWlE4feA8pauWpM5jNRAIZNJurXRJ5o9azOuz+tL2lRZsXbYDgcBgNFC7dXVcLhfbl+8iPjqBF95/GktcIr9+tRGjyYhvkA8Rl24kZ70EemfwLbhAJt9MVOnV1FjiExnSeCTXzoVhNBuYtmUcpauWSLESL1y6AGcOnsNhdyJdEr8Cmdds18gcMqov2I+pP1v/QAT9eJcj8h5S2pCRz4DzCkgn0ncMime3ux+Yz9GceiaYP2qJ28Ee2nKMk3vOuFUazxw8jz3R7k6PBOjQrw0h+8+yY/UeipQtRNkapSheoShlqnVPc/60Qh4tuzdjy9IdqnCTIqjZUm2pV6JSMd77/g0+7fmZO1d9w4It1GtTi23Ld6JTFOw2B3abHZ1ex2eDv+aP77chpWTV579x/UI4DpsTh83CpX+vUL99bSIuRdJ34osZNsQQQof0GQWxEwAFfMenOW7nmr1cPx+GNUGVWuhfaxg+gT5M3fwhZauXAmDonH44HU6ung3j5bHPUqB4UJpzZRfSGYaM+xKEHuE9AKGkzvvPd9gPo7aoA+yHcMXPh8Q/wdwW4flK/uhq5TgNzstqrwCAhO9Ac+qaU79FfHQ8h7edoHjFopSqXDzFZ0HFAtDpFZwOFy6XpGzNUhzdfgKHzYnJ04RvgeRi2qjrNxn/3DRC9p7Fbndwev853mgykh8ufInZM23hr7Ro0K42/9s6njMHz1Ovbc0UcsGtX3iEs4fOs2zaWlxOF1JCzI04Tu07iz0pbVK6JJFXovhr5T/uG9DFk1fQ6ZNXzE6Xi4/XvJdpmxSvl5Ce3QCBEGmrLPrfoaIppVoB+9XwRUxa/wGgyhx8uGJEps97v8gbL4MzFBBI2x5EgZUP7dw5hrER2ParP+tLQ9xMtWLUfgR0xcHcJmftyw50RW97YQKttyqgOXVAdeiv1nibhBgLToeTscuHp2iOMXROP6wJNq6dC+PlD5+lcYd6fDd+GdHhMal0Tma/MZ8TO0NSVF3aLHYiLkUSH2PhyLbj1GxZlUr17q4bUqle+XTHdR7cno2LthIbFYenjwdR16No37c1i8YuRdEJipYtTPEKRajZoiq7ftmH0+EksKg/fSa+yLQ+c5BS8tZX/TP9HblcLhRFQYiMb0x1Wlfn+Xe78uu8P4i8EoXL6ULRKZi8Mn9Dy06kdKlCZLeKCxync8SOh40ImAuWNYDaXJr42Umf2MH58AsAHwRCCYDARci4r0FXEuGTv2UqMku2ZL9kluzIfvnp01UsnbqGouUK8+GKd9JUSswMYRcj+LTX59y8Hk3L55qyfNpaVagLqFC3HN3e6kiLZxtjMGZOmEpKiZSS99tPcHcKAlXDvVCpAgyfP4h3H/8Ip8OFTqcwbcs4ghtUID46nm9H/8jN8BheGvWMO0QRGxXHhBdmcP5oKF2HPMHz76ZuM+awO3jzkQ84e1jdaCxSpiDt+zxGsYqFadCuNiYPEzarnbVzfifuZjydBjxOYJEAnEmFRGlpxd/JhROXGNFmPFHXb9JlcHsGzeid5qP7pVNXGPfMVG6Gx/DqJy/Rruej/DDhZ5ZNXUORMoUYv+ZdCpXMGTVFV9QgsO1QX5jaofh/kiN25BTSEYqMfAr1xqYgglZpEgB5jIee0phZ7tepnz92kdcbvofVYkPRKTzyVENGLx12T3O91WI0x3ecxOWSaoGQENiS5hWKWqRUrVllJieFDDLi4OajjOn6CTaLnS5D2rP+mz+xJdqpVL88HV5tQ7OnG7L68/UsHPsTLqcLnV6h1/jnef69pxjVcRL7/ziM0+7Ay8+Ln658hdFsZOageayf/ycOmwOTp0m9CdRPvWpvb+yeQgfG7G2mUYe6fLDkrRTjNi3ezrp5f1CtWTA9P+yept5MWrzX7iP2/3FYlRbwNPLZzolpavAMbTaKE7tOqZ3VTAYWh87Bv2DWGpo8KKR0qj1EhQ6MLRDiv5c+KV03wH4KDMHqClcjT/GwVRofGonxiYikqk6X0+VeWd8LN65GuaV1JTD864FsW7aDHWv24rK7cNqd7P/jMC6Xi/Xf/sk/v+yjbc9HeaRrw1RzTXt1jjtPfc3n6/nx8ldIKVM4tZotqqgZMYk29AY91ZtXAeDckQtu+QBboo3oiFhMHkbOHw11v68ogrg01CUBqjQJ5sTOU+5wT2JcIn+v2J1izMk9p5neby7WBCsn95zBx987UxK8AIpep4q5SwkSd4eoO0mItaSQILBbHWmOywmE0IH5v6dVcztCCVQbS2vke/LUkiW4QQUad6yHTq/DJ8CLV+8iB5sRr07ugdFswGg20LB9HYxmA0Nmv0aVRhXRG/XoDXrK1SjN0qlrmP7aXHas3su4p6fw220NlaWUnD54LoU0AEJgNBvcDt0Sn8ihLccoVLogE38bRY/R3Zj42yiqN6tMQqyFJp3qY/Qw4uFjplSV4rzbbjzdCvfl1N4zAElKjRWo/Wj1VNcgpSTsQngKvXWdQUfZGin7pV45c90tcWBNsHLhxKVMf0+vz+pD0XKFMZoNPPN2R0pXTd2LVR3X192yr+OAtqn6wGpoaDwc8lT45dCWY3w7egn+BX0Z+mV/Agr5EXMjlun95nLlzDVeHvMsjzzVKNPzRUfEcHznKSa8MB2dXocQgunbP+LvlbtxOV10feMJ+tcaTsTl5C71BUsGsfjClwBMfGkmO9fswelwYkjaLB00vTftej8KQHxMAv1qDSMuKh6X08Wk30ZR/RF1hR5x5QYD67yDzarKCgya1YcfPl7O1TPXU9jYaeDjDPn81TTj2Jb4RLr693Q7db1Rz1NvqPF336Dk9MTYqDj61RxGQqwFl9PF1D8/JLhBhUx/T5nFYXdgS7Tj6eNx98EaGhqZJl+GX+JuxjOq4ySsCVb0Bh3T+n7Bx2vfZ9bgr9m1di8Ou5PJPWbx7clZmV4l+hXw5cj2E26RLaPZwNHtJ+gxOjnXtWiFIimcemARf5xOJwkxFrYt3+nuiOTt78XSqyll5Q9tPkbsjTh3aGbV5+vdTn3b0p3ExyRgtzpQdAphoeHE39HmzuRpokqjSiTGJzLhxZmE7D3D471a0WfCiwgh8PAyU61ZMCH7zwFqqmO/T19JdZ0+Ad58c3wGIfvOUrxS0XveXL4beoPerQipoaGRM+SZ8Et0RAy3grYOu5MrSSva6+fCVDlcQCiC6PCYLM1boU5Zd/64UBTKJGWf3GLssmEULBUEQtU4D9l/jueKvqa2rLvV7U4RFC6Tuu1X0XKF3I2nTR5GylRLzjgoXKage7PSYDJQpEwh+k97BYPJoKYkli/Ms8M6sXjiz3T2fYXd6/Zz49pNVn32Gwf+POqeZ/Lvoxk2bwAjfxjK0DmvpXudnj4e1GqVdl9VDQ2N/EOecerFyhehevMqaociDyM9Rj8DwCvjumPyMGLyNFG5YUXK1ix1l5lS8ujzzeg/7RXK1iyNdLmY/Moszh1N1iLxK+DL4vNfMnXTh+gNelxOF7GRcYzrNtWtA6M36Biz7O1Uc5euVpLHejQnqFgADZ+si5efl7vrUtMuDegxuhuV6pfn2eGdadGtMTfDouk6pD1zD05jUcjnRFy54b553YrbCyFS6JkbTQZadW9Gk071NVEsDQ2NvBVTdzqdnDl4Hr8CvhQundxwIyosmujwGEpVKX5Pju3GtSh6lB3sVj4MbliBz3dNSjHm5N4zDGs11i0XcCdFyhZi+DeDqNUquartdtVEAJ1eQW/U89onPegy+An3uIjLkQxt9gERlyJBQIESQXx3ZjbT+89l44ItOJNi5jqDjkr1yjF187j7auzsdDhZN+8PIq9G8UTfx1J8lxoaGrmPh67S+LDQ6XRUqlc+lRMKKORHmWol73mlenv2CJCiyfMtguuXp/uILugNd+R3J+1fXjsXxuguk7n9Jnlw87EUNwGnw4U1wcbG77almOKdx8YTFhqByyVxOSU3rt4kLiqeXuOfp0RwMXR6HW1eacHi0C+Z+feE+3LoALPf/Ja5wxexZNJKBjd8L101RQ0NjbxHnnLqD4oCxYPoPqILik7BO8CLN7/sl+a4l8c8S/k6Zd2vjWZDCgdrs9hxuZJvEI+/0hKTpwlFn/Jr9vBObhcmpUwleVu6agl8Ar0JKhrA10ens972I+8uGEJgYf/7FmIKvxTJhgVbsFpsuJwurBYbYaH5r4myhsZ/Fc2pJ9FzXHfWJS5mRcS3VG5Y0f1+6L+X+Xn6Lxz96wQAfSe+iMnThNFsoH672rz+WV81r92op8/EF1KU3rd8rimfbhzNYy+1SFHBeWzHScJCwwG4GR6Dl5+aAqjoFKo2DWb6tvFu5339Qjgn955xl/bfC9ERMXz/8XKWT1/LuGempnh68A30pkjZ1Ju8GhoaeRMt/+w27tRCuXz6KoMbvIvD7kSnVxi9dBiNnqzLT1e+Ii4qnkKlCiCEoMWzTZAuibe/V6o5qzYJpkrjSoTsP8P5IxcBtUl1yP5zFCpVkPkjF7s3PnUGHa9OehEPb9XJb126g097z0bRKQQ3KM+nG8dkOcQkpeTNRz7g6rkwdDolRdWnolP4ZOPo+w7naGho5B60lXoGHP3rX0CNsVsTbOxcswcAL19PCpcu6F5Ne/p44OmbfsGNEILuI7pi8jShN+pBQnADVcfFbrW7Ha1Or8NuS16Rf/fRcmwWG4lxifz7z2kunbqa5WuwxCVy5ex1nHYntkQ7QlHDRiZPI48+34wSFYtleU4NDY3ci7ZSz4DKjSq6Ha7J00i9trVSjTm4+Shju36KLdFGv6mv8NSQJ9Ocq81LLfAv6Mf5o6E06Vzf3Rii5/juHNp6jMgrUTRoV4vajyZnz5SoWITLp64k5eFL/Av6pjl3Rnh4mylfqwyhJy4hhOCRpxrR++PnscQlUqqKptSnoZHfyFMpjTnByb1n2PXLXio3qECjDvVSfd6j7CCuX1Dj43qjnhUR893hk8wipcRhd6SS+Y25EcvsN+Zz/UI4Pcd1p07rGlma9/Lpq0x4YQbR4TE06lCXak0r0+r5ppmS3NXQ0Mg95EuZgJwiuH55/Av6kl7Sye2dhARqVWpWEUKkqdvuG+jD+98PTfW+y+Ui6no0/gV9M5TQnfCCKg0A8Pu3m3l1cg/NoWto5HO0mPpd+G78MnpXGUrvykP5/uPlqT5/d9EQAgr74+FtZuicfllqWXcvWOIsDKw7gpfLD+alMgMJvxQJqKv90H8vExYazuFtx+lXexinkzRhQBXbslpsD9Q2DQ2NnEcLv2TAhROXeLVacrMJvVHPb4lLHrodUkoO/HkUa4KVm2HRfDH0WxITrCg6hU6D2qEogj3rDxKWFAZyuWSqAipPXw9W31z00G3X0NC4f7TwSzYxb8R3KV57+Xlm6jin08nmJX+TEGPhsR7N8fLN3HHpMeetBfz2zZ8IAcUqFHFXseoNOnau2UPk5Rspuh/dic6go1rTyvdlg4aGRt7gnsMvQoiSQojNQojjQohjQojUwd88jsFkcHdaEopgyOd9M3Xc9H5zmTnwK+a+s4ihzT5IUWV6O2ps/GaKJtVpsWHhFhLjE7HEJXLuSChte7YisGgAjTvWI/ZGXAqHLhSBf0FfDGYDeqOe0tVK0vrFR3jve60pr4bGf4H7Wak7gGFSyv1CCB9gnxBio5TyeDbZluMMnN6LyyFXuXYujKfe7EDLZ5tm6rhdv+wjMV6t2rwccpW4qPgUTStAbXDxVvPRhJ64hG+QD5/tmpSuDnzZmqX5958QXA4ngUX8GfJZX974/FUAZr3+NRsXbkG6JHqjnsqNKvLW3P4IAQazkYBCuaNPqIaGxsPhnp26lPIqcDXp51ghxAmgOJBvnHqhkgX46tC0LB9X+9Fq7Fy7D5fDScESQXgHpK40/evnf7gcchW71UHU9WhWzVrHa5++nOZ841eN4PuPlmOJS+SlUc9wMzyGb977nsQEK73GP0+zLg2wJdpp+ESdTDeU1tDQyJ9kS0xdCFEGqAP8k8Zn/YB+AKVKZU3rPLdwat8ZPug0mfib8fSd9BJPD+2Q5rgT/4Qw6aWZ2K122vV+lALFA+nwWps0S/u9/JPj7DqDDu/A1I7/Fj4B3gz8Xy/36yFNRhKy7wwup+TQluMsvTrvvoW+NDQ08gf3nf0ihPAGtgITpJQrMhqb17JfbtGv9jDOHVYbZxhMepZcnItfgdTVnS+U6k/EJbX1ncnTyJqY79LVapFSMuetBWz56W+qNavMe98NweSRuXTIrgE93Xoxik5hdfSiB55KqaGhkXM8tOwXIYQB+Bn44W4OPS9zq+uQ+gLSuxHeiqMDOGxO9bh0tqKFEAya0ZtBM3pn2Z7Og9qxctY6hBDUbVtTc+gaGhpu7if7RQDfACeklP/LPpNyH2/PG4hvkA96g45eHz+Pf8G0Nx+HzH4VRad+pRLJvo2Hs9WO3xdsZnCj94iPSWDCulGMX/0uY5YNy9ZzaGho5G3uOfwihHgE2A4cAW7l1I2UUq5L75i8Gn65hZQyw9i11WKli98r7hTDoGIB/Hjpq2w596l9Z3i75RisCTaMHka6v9OZVz7sni1za2ho5G4eSvhFSvkX7jKY/wZ324wUioKi07mduiEbdcrDQiPcTwE2i43Lp6/d5QgNDY3/Ipr2SzZiNBl4d9Hr+AR6U6BEICMXv5ltc9drW5PAwv54+nhg9janm4GjoaHx30bTfsnl2Kx29AYdiqJgS7Rx9vAFipQtlG5cX0NDI/+RlfCLtlLPxcwdvpBO3j14Oqg3/+4OwWg2UrlhRc2ha2hopIvm1HMpV89dZ80Xv+NyuoiPTuCz17/JaZM0NDTyAJpTz6UYjHp3Kz0h1L6iGhoaGndDc+q5lALFg+g3pQdefp4Ur1SMYV8PzGmTNDQ08gDaRmke5urZ6xhMencTaw0NjfyJtlH6H+CLN7/l1Rpv80qFIaya/VtOm6OhoZFL0Jx6HsSWaGP17PXYLDbsVjuLxi7NaZM0NDRyCZpTz4PoDDrMXqqIlxCCgML+OWyRhoZGbkFz6nkQnU7HpPUfUKl+eao3r8K4VSNy2iQNDY1cgtZ4Oo9StXElZu+enNNmaGho5DK0lbqGhoZGPkJz6hoaGhr5CM2pa2hoaOQjNKeuoaGhkY/QnLqGhoZGPkJz6hoaGhr5CM2pa2hoaOQjHqqglxAiHLjw0E54/xQAInLaiPtAsz9n0ezPWfK6/ZB8DaWllAUzc8BDdep5DSHE3swqo+VGNPtzFs3+nCWv2w/3dg1a+EVDQ0MjH6E5dQ0NDY18hObUM+arnDbgPtHsz1k0+3OWvG4/3MM1aDF1DQ0NjXyEtlLX0NDQyEdoTl1DQ0MjH6E59XQQQuiEEAeEEL/ktC33ghDCXwixXAjxrxDihBCiSU7blBWEEG8JIY4JIY4KIZYIIcw5bVNGCCHmCyHChBBHb3svUAixUQgRkvT/gJy0MSPSsX9K0u/PYSHESiFErm2xlZb9t302TAghhRAFcsK2zJCe/UKIIUn/BseEEJ9mZi7NqafPUOBEThtxH8wE1kspKwO1yEPXIoQoDrwB1JdSVgd0wPM5a9VdWQC0v+O994BNUsqKwKak17mVBaS2fyNQXUpZEzgFvP+wjcoCC0htP0KIksDjQOjDNiiLLOAO+4UQjwJdgFpSymrA1MxMpDn1NBBClAA6AF/ntC33ghDCD2gBfAMgpbRJKW/mrFVZRg94CCH0gCdwJYftyRAp5Tbgxh1vdwEWJv28EOj6UI3KAmnZL6XcIKV0JL3cBZR46IZlknS+f4DpwAggV2eEpGP/QGCylNKaNCYsM3NpTj1tZqD+Irhy2pB7pCwQDnybFEL6WgjhldNGZRYp5WXUVUkocBWIllJuyFmr7onCUsqrST9fAwrnpDH3SR/gt5w2IisIIboAl6WUh3LalnukEtBcCPGPEGKrEKJBZg7SnPodCCE6AmFSyn05bct9oAfqAnOklHWAeHL3o38KkmLPXVBvTsUALyFEj5y16v6Qau5wrl4tpocQYhTgAH7IaVsyixDCExgJjMlpW+4DPRAINAbeAZYKIcTdDtKcemqaAZ2FEOeBH4HWQojvc9akLHMJuCSl/Cfp9XJUJ59XaAOck1KGSyntwAqgaQ7bdC9cF0IUBUj6f6Yen3MTQoheQEfgJZm3ilrKoy4KDiX9LZcA9gshiuSoVVnjErBCquxGjRzcdbNXc+p3IKV8X0pZQkpZBnVz7k8pZZ5aJUoprwEXhRDBSW89BhzPQZOySijQWAjhmbQyeYw8tNF7G2uAnkk/9wRW56AtWUYI0R41DNlZSpmQ0/ZkBSnlESllISllmaS/5UtA3aS/jbzCKuBRACFEJcBIJlQnNaeefxkC/CCEOAzUBibmsD2ZJukJYzmwHziC+nuaq0u+hRBLgJ1AsBDikhCiLzAZaCuECEF9+pickzZmRDr2fw74ABuFEAeFEF/mqJEZkI79eYZ07J8PlEtKc/wR6JmZpyVNJkBDQ0MjH6Gt1DU0NDTyEZpT19DQ0MhHaE5dQ0NDIx+hOXUNDQ2NfITm1DU0NDTyEZpT19DQ0MhHaE5dQ0NDIx/xf6q74p+QBv6gAAAAAElFTkSuQmCC\n",
  55. "text/plain": [
  56. "<Figure size 432x288 with 1 Axes>"
  57. ]
  58. },
  59. "metadata": {
  60. "needs_background": "light"
  61. },
  62. "output_type": "display_data"
  63. },
  64. {
  65. "data": {
  66. "image/png": "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\n",
  67. "text/plain": [
  68. "<Figure size 432x288 with 1 Axes>"
  69. ]
  70. },
  71. "metadata": {
  72. "needs_background": "light"
  73. },
  74. "output_type": "display_data"
  75. }
  76. ],
  77. "source": [
  78. "%matplotlib inline\n",
  79. "\n",
  80. "import numpy as np\n",
  81. "import matplotlib.pyplot as plt\n",
  82. "\n",
  83. "# data generation\n",
  84. "np.random.seed(314)\n",
  85. "data_size_1 = 300\n",
  86. "x1_1 = np.random.normal(loc=5.0, scale=1.0, size=data_size_1)\n",
  87. "x2_1 = np.random.normal(loc=4.0, scale=1.0, size=data_size_1)\n",
  88. "y_1 = [0 for _ in range(data_size_1)]\n",
  89. "\n",
  90. "data_size_2 = 400\n",
  91. "x1_2 = np.random.normal(loc=10.0, scale=2.0, size=data_size_2)\n",
  92. "x2_2 = np.random.normal(loc=8.0, scale=2.0, size=data_size_2)\n",
  93. "y_2 = [1 for _ in range(data_size_2)]\n",
  94. "\n",
  95. "x1 = np.concatenate((x1_1, x1_2), axis=0)\n",
  96. "x2 = np.concatenate((x2_1, x2_2), axis=0)\n",
  97. "x = np.hstack((x1.reshape(-1,1), x2.reshape(-1,1)))\n",
  98. "y = np.concatenate((y_1, y_2), axis=0)\n",
  99. "\n",
  100. "data_size_all = data_size_1+data_size_2\n",
  101. "shuffled_index = np.random.permutation(data_size_all)\n",
  102. "x = x[shuffled_index]\n",
  103. "y = y[shuffled_index]\n",
  104. "\n",
  105. "split_index = int(data_size_all*0.7)\n",
  106. "x_train = x[:split_index]\n",
  107. "y_train = y[:split_index]\n",
  108. "x_test = x[split_index:]\n",
  109. "y_test = y[split_index:]\n",
  110. "\n",
  111. "# visualize data\n",
  112. "plt.scatter(x_train[:,0], x_train[:,1], c=y_train, marker='.')\n",
  113. "plt.title(\"train data\")\n",
  114. "plt.show()\n",
  115. "plt.scatter(x_test[:,0], x_test[:,1], c=y_test, marker='.')\n",
  116. "plt.title(\"test data\")\n",
  117. "plt.show()\n"
  118. ]
  119. },
  120. {
  121. "cell_type": "markdown",
  122. "metadata": {},
  123. "source": [
  124. "## Program"
  125. ]
  126. },
  127. {
  128. "cell_type": "code",
  129. "execution_count": 2,
  130. "metadata": {},
  131. "outputs": [],
  132. "source": [
  133. "import numpy as np\n",
  134. "import operator\n",
  135. "\n",
  136. "class KNN(object):\n",
  137. "\n",
  138. " def __init__(self, k=3):\n",
  139. " self.k = k\n",
  140. "\n",
  141. " def fit(self, x, y):\n",
  142. " self.x = x\n",
  143. " self.y = y\n",
  144. "\n",
  145. " def _square_distance(self, v1, v2):\n",
  146. " return np.sum(np.square(v1-v2))\n",
  147. "\n",
  148. " def _vote(self, ys):\n",
  149. " ys_unique = np.unique(ys)\n",
  150. " vote_dict = {}\n",
  151. " for y in ys:\n",
  152. " if y not in vote_dict.keys():\n",
  153. " vote_dict[y] = 1\n",
  154. " else:\n",
  155. " vote_dict[y] += 1\n",
  156. " sorted_vote_dict = sorted(vote_dict.items(), key=operator.itemgetter(1), reverse=True)\n",
  157. " return sorted_vote_dict[0][0]\n",
  158. "\n",
  159. " def predict(self, x):\n",
  160. " y_pred = []\n",
  161. " for i in range(len(x)):\n",
  162. " dist_arr = [self._square_distance(x[i], self.x[j]) for j in range(len(self.x))]\n",
  163. " sorted_index = np.argsort(dist_arr)\n",
  164. " top_k_index = sorted_index[:self.k]\n",
  165. " y_pred.append(self._vote(ys=self.y[top_k_index]))\n",
  166. " return np.array(y_pred)\n",
  167. "\n",
  168. " def score(self, y_true=None, y_pred=None):\n",
  169. " if y_true is None and y_pred is None:\n",
  170. " y_pred = self.predict(self.x)\n",
  171. " y_true = self.y\n",
  172. " score = 0.0\n",
  173. " for i in range(len(y_true)):\n",
  174. " if y_true[i] == y_pred[i]:\n",
  175. " score += 1\n",
  176. " score /= len(y_true)\n",
  177. " return score"
  178. ]
  179. },
  180. {
  181. "cell_type": "code",
  182. "execution_count": 3,
  183. "metadata": {},
  184. "outputs": [
  185. {
  186. "name": "stdout",
  187. "output_type": "stream",
  188. "text": [
  189. "train accuracy: 0.986\n",
  190. "test accuracy: 0.957\n"
  191. ]
  192. }
  193. ],
  194. "source": [
  195. "# data preprocessing\n",
  196. "x_train = (x_train - np.min(x_train, axis=0)) / (np.max(x_train, axis=0) - np.min(x_train, axis=0))\n",
  197. "x_test = (x_test - np.min(x_test, axis=0)) / (np.max(x_test, axis=0) - np.min(x_test, axis=0))\n",
  198. "\n",
  199. "# knn classifier\n",
  200. "clf = KNN(k=3)\n",
  201. "clf.fit(x_train, y_train)\n",
  202. "\n",
  203. "print('train accuracy: {:.3}'.format(clf.score()))\n",
  204. "\n",
  205. "y_test_pred = clf.predict(x_test)\n",
  206. "print('test accuracy: {:.3}'.format(clf.score(y_test, y_test_pred)))"
  207. ]
  208. },
  209. {
  210. "cell_type": "markdown",
  211. "metadata": {},
  212. "source": [
  213. "## sklearn program"
  214. ]
  215. },
  216. {
  217. "cell_type": "code",
  218. "execution_count": 7,
  219. "metadata": {},
  220. "outputs": [
  221. {
  222. "name": "stdout",
  223. "output_type": "stream",
  224. "text": [
  225. "Feature dimensions: (1797, 64)\n",
  226. "Label dimensions: (1797,)\n"
  227. ]
  228. }
  229. ],
  230. "source": [
  231. "% matplotlib inline\n",
  232. "\n",
  233. "import matplotlib.pyplot as plt\n",
  234. "from sklearn import datasets, neighbors, linear_model\n",
  235. "\n",
  236. "# load data\n",
  237. "digits = datasets.load_digits()\n",
  238. "X_digits = digits.data\n",
  239. "y_digits = digits.target\n",
  240. "\n",
  241. "print(\"Feature dimensions: \", X_digits.shape)\n",
  242. "print(\"Label dimensions: \", y_digits.shape)\n"
  243. ]
  244. },
  245. {
  246. "cell_type": "code",
  247. "execution_count": 8,
  248. "metadata": {},
  249. "outputs": [
  250. {
  251. "data": {
  252. "image/png": "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\n",
  253. "text/plain": [
  254. "<Figure size 432x288 with 10 Axes>"
  255. ]
  256. },
  257. "metadata": {
  258. "needs_background": "light"
  259. },
  260. "output_type": "display_data"
  261. }
  262. ],
  263. "source": [
  264. "# plot sample images\n",
  265. "nplot = 10\n",
  266. "fig, axes = plt.subplots(nrows=1, ncols=nplot)\n",
  267. "\n",
  268. "for i in range(nplot):\n",
  269. " img = X_digits[i].reshape(8, 8)\n",
  270. " axes[i].imshow(img)\n",
  271. " axes[i].set_title(y_digits[i])\n"
  272. ]
  273. },
  274. {
  275. "cell_type": "code",
  276. "execution_count": 9,
  277. "metadata": {},
  278. "outputs": [],
  279. "source": [
  280. "# split train / test data\n",
  281. "n_samples = len(X_digits)\n",
  282. "n_train = int(0.4 * n_samples)\n",
  283. "\n",
  284. "X_train = X_digits[:n_train]\n",
  285. "y_train = y_digits[:n_train]\n",
  286. "X_test = X_digits[n_train:]\n",
  287. "y_test = y_digits[n_train:]\n"
  288. ]
  289. },
  290. {
  291. "cell_type": "code",
  292. "execution_count": 12,
  293. "metadata": {},
  294. "outputs": [
  295. {
  296. "name": "stdout",
  297. "output_type": "stream",
  298. "text": [
  299. "KNN score: 0.953661\n",
  300. "LogisticRegression score: 0.908248\n"
  301. ]
  302. }
  303. ],
  304. "source": [
  305. "# do KNN classification\n",
  306. "knn = neighbors.KNeighborsClassifier()\n",
  307. "logistic = linear_model.LogisticRegression()\n",
  308. "\n",
  309. "print('KNN score: %f' % knn.fit(X_train, y_train).score(X_test, y_test))\n",
  310. "print('LogisticRegression score: %f' % logistic.fit(X_train, y_train).score(X_test, y_test))"
  311. ]
  312. },
  313. {
  314. "cell_type": "markdown",
  315. "metadata": {},
  316. "source": [
  317. "## References\n",
  318. "* [Digits Classification Exercise](http://scikit-learn.org/stable/auto_examples/exercises/plot_digits_classification_exercise.html)\n",
  319. "* [knn算法的原理与实现](https://zhuanlan.zhihu.com/p/36549000)"
  320. ]
  321. }
  322. ],
  323. "metadata": {
  324. "kernelspec": {
  325. "display_name": "Python 3",
  326. "language": "python",
  327. "name": "python3"
  328. },
  329. "language_info": {
  330. "codemirror_mode": {
  331. "name": "ipython",
  332. "version": 3
  333. },
  334. "file_extension": ".py",
  335. "mimetype": "text/x-python",
  336. "name": "python",
  337. "nbconvert_exporter": "python",
  338. "pygments_lexer": "ipython3",
  339. "version": "3.6.8"
  340. }
  341. },
  342. "nbformat": 4,
  343. "nbformat_minor": 2
  344. }

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。