{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to Multilayer Perceptrons - Part 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Contents\n", "\n", "* Backpropagation\n", "* Gradient Descent\n", "* Activation Functions\n", "* Tensorflow and Keras\n", "* Load and process data\n", "* Creating the model\n", "* Training the model\n", "* Model accuracy\n", "* Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the previous exercise we learned about perceptrons. In this exercise we will introduce backpropagation, Gradient Descent and setting up a multilayer perceptron for the Iris Dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Backpropagation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assume we have a simple neural network for classification consisting of layers of perceptrons, an example of which is shown below. We assume that each layer has a bias input, which is not shown." ] }, { "attachments": { "SimpleMLP.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAIGCAYAAAABemYyAAABJ2lDQ1BrQ0dDb2xvclNwYWNlQWRvYmVSR0IxOTk4AAAokWNgYFJILCjIYRJgYMjNKykKcndSiIiMUmB/ysDBwMnAz2DBoJuYXFzgGBDgwwAEMBoVfLvGwAiiL+uCzMKUxwu4UlKLk4H0HyDOTi4oKmFgYMwAspXLSwpA7B4gWyQpG8xeAGIXAR0IZG8BsdMh7BNgNRD2HbCakCBnIPsDkM2XBGYzgeziS4ewBUBsqL0gIOiYkp+UqgDyvYahpaWFJol+IAhKUitKQLRzfkFlUWZ6RomCIzCkUhU885L1dBSMDIwMGRhA4Q5R/TkQHJ6MYmcQYgiAEJsjwcDgv5SBgeUPQsykl4FhgQ4DA/9UhJga0HQBfQaGfXOSS4vKoMYwMhkzMBDiAwBvykp9SaK4XwAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAACEqADAAQAAAABAAACBgAAAABkHWulAABAAElEQVR4AeydB9glRbGGW6/XdBFQFBBRJCO4ICo5LBkBSZLjikQBQbwusqQFAYmipCVJDkuOIhLcJQuCChIlLSyYkGDEcMPcfttbQ5/5J6cz55yq5/n/M2emp6fnmznd1VX1Vb8tsGJUFAFFQBFQBBQBRUARKIHA20uco6coAoqAIqAIKAKKgCLgEFBFQl8ERUARUAQUAUVAESiNgCoSpaHTExUBRUARUAQUAUVAFQl9BxQBRUARUAQUAUWgNAKqSJSGTk9UBBQBRUARUAQUAVUk9B1QBBQBRUARUAQUgdIIqCJRGjo9URFQBBQBRUARUARUkdB3QBFQBBQBRUARUARKI6CKRGno9ERFQBFQBBQBRUARUEVC3wFFQBFQBBQBRUARKI2AKhKlodMTFQFFQBFQBBQBRUAVCX0HFAFFQBFQBBQBRaA0AqpIlIZOT1QEFAFFQBFQBBQBVST0HVAEFAFFQBFQBBSB0gioIlEaOj1REVAEFAFFQBFQBFSR0HdAEVAEFAFFQBFQBEojoIpEaej0REVAEVAEFAFFQBFQRULfAUVAEVAEFAFFQBEojYAqEqWh0xMVAUVAEVAEFAFFQBUJfQcUAUVAEVAEFAFFoDQCqkiUhk5PVAQUAUVAEVAEFAFVJPQdUAQUAUVAEVAEFIHSCKgiURo6PVERUAQUAUVAEVAEVJHQd0ARUAQUAUVAEVAESiOgikRp6PRERUARUAQUAUVAEVBFQt8BRUARUAQUAUVAESiNgCoSpaHTExUBRUARUAQUAUVAFQl9BxQBRUARUAQUAUWgNAKqSJSGTk9UBBQBRUARUAQUAVUk9B1QBBQBRUARUAQUgdIIqCJRGjo9URFQBBQBRUARUARUkdB3QBFQBBQBRUARUARKI6CKRGno9ERFQBFQBBQBRUARUEVC3wFFQBFQBBQBRUARKI2AKhKlodMTFQFFQBFQBBQBRUAVCX0HFAFFQBFQBBQBRaA0AqpIlIZOT1QEFAFFQBFQBBQBVST0HVAEFAFFQBFQBBSB0gioIlEaOj1REVAEFAFFQBFQBFSR0HdAEVAEFAFFQBFQBEojoIpEaej0REVAEVAEFAFFQBFQRULfAUVAEVAEFAFFQBEojYAqEqWh0xMVAUVAEVAEFAFFQBUJfQcUAUVAEVAEFAFFoDQCqkiUhk5PVAQUAUVAEVAEFAFVJPQdUAQUAUVAEVAEFIHSCKgiURo6PVERUAQUAUVAEVAEVJHQd0ARUAQUAUVAEVAESiOgikRp6PRERUARUAQUAUVAEVBFQt8BRUARUAQUAUVAESiNgCoSpaHTExUBRUARUAQUAUVAFQl9BxQBRUARUAQUAUWgNAKqSJSGTk9UBBQBRUARUAQUAVUk9B1QBBQBRUARUAQUgdIIqCJRGjo9URFQBBQBRUARUARUkdB3QBFQBIYKgV/+8pdmxx13NBdeeOFQ3ZfejCLQVQRUkejqk9F2KQKKQCkEDj/8cHPRRReZXXfd1fzlL39JrOOJJ54wf/jDHxKPj9qBf/zjH2bvvfc2e+yxh2E7KqeddprZeuutza9+9avoIf0+4gioIjHiL4DeviIwbAg89dRT7pb++c9/moceeij29qZMmWKWWGIJ88lPftK8+eabsWVGbed5551nUBbOPPNMc+211/bc/n/913+ZffbZx1x++eXmjDPO6DmmXxQBVST0HVAEakJgxowZZsKECebss8+uqUatpigCQRCYZ599Njzt0UcfDbf9jZtuusl9ZXYdN/v2y47KNgqEyO9//3vZdJ///u//bt7+9n8NF6+88krPMf2iCKgioe+AIlAAgZkzZ5pLL700dhaLSR2//G677WYop9I+AigRf/7zn8MLX3PNNeG2v/Hb3/7WfX3HO95hZp99dv/QSG5PmzbNPPzww+G9i9IQ7rAbKGmIuoMcDPrPQ0AVCQ8M3VQE0hD4n//5HzN+/Hiz3Xbbma9+9atjir766qvhvr///e/htm60h8CDDz7Yc7G//vWvPd/li8ROzD333OZtb3ub7B7Zz29+85s99/6///u/Pd9x//D+I6pI9ECjXywCqkjoa6AI5EQAc/gLL7zgSseZzP0BKdoR57yEFquIwD333NNTw29+85ue7/JFFL0PfOADsmtkP2+88UZz55139tx/VFl4/fXXw+P+drhTN0YaAVUkRvrx680XQeC73/1uWFxmZ+EOu/Hcc8+FX1WRCKFodeMHP/hBz/Vefvll89prr/Xs4wvBgwi+/1EVWCtY2DbZZBMHwRxzzGHe8573uG3ifXzxMVRFwkdGt0FAFQl9DxSBHAh8//vfN9OnTw9LvvOd7wy32aBTfvLJJ8N9cYpGeFA3GkHgZz/7mXnxxRdd3bPNNlt4jZ/85CfhNhsEV77xxhtun29F6ik05F+4/7XXXtvcddddRpTeQw45xLFYuHWw9OXXv/51+NVXKsKdujHSCKgiMdKPX28+DwJ/+9vfzH777ddTVALPZOdZZ50lm+5TFYkeOFr5cskll4TXgaL4b//2b+77bbfdFu5ng+/i2hhVRQKap68cLLXUUmbPPfc0K6+8ssPqF7/4hfGZG6KgcfCPf/yjgVqroggIAqpICBL6qQgkIHDggQf2UAop9vzzz4czOfzwUconykeanH766eYTn/iEcvLTQCpw7L//+7+NKBJLLrmkS5wkg+KVV17ZM/CddNJJBWoevqIowX7WT9w7F1xwgXPzbLDBBu6GKXPFFVeEN0+2UF/8wGJ/f9I2FhBwJxfFXnvtZfhNnXzyyeaxxx5LOkX3DxIC9oVRUQQUgQQE7Ow1sFQ4eG/B4osvHnzhC19w23zff//9AzuzDdZbb71wH/v547wksbO5wPqiXTnrl04qpvsLIHD99deHz8Aqae7Mq666Kty3yy67BDZnRPCNb3wj3Mdz+sxnPlPgKsNR1AYN92BwyimnhDdmFbLgox/9qDs+33zzBX/605/csRVWWKHnnJ///OfhOXk2bCxGz/nyO+Fz8uTJearQMh1GAG6wiiKgCHgI2Cj2wMY8BHYWFjDQ09lZE3hw9913B9Z3HNjcA2GnKAoBZUThYNvO5rwaezdtLEV4/vvf//7eg/qtFAKnnnqqw/RDH/pQOPhRkZ1hh1jzXKJ/Sy+9dOr1LEsnsNkcA5sJM7AxMoGNJ0gtPwgHUbQEB2shGNPkc845JzyOAnD77bf3vNuca4Nax5yXtsNa38I6Od+6ncLv/G5s7o+00/VYxxFQRaLjD0ib1y4Cv/vd75yiQMdncwyEnR3WBxEGlllmmSU8Rse46KKLBhMnTgz32SyBUnzMpw3+C8sx8KlURwArz/e+9z2nAPq1MUBtvvnmId4ohF/84hcDcOe52dgAv3i4bWNcgq222io8j7L8rbvuuoFlfITlBnHDBpsGxx57bHD++ecnNn/bbbcdc+/vfe97w30oG0XEujCCo446KrCxRsENN9zgTrWuDVcfirnNU1GkOi3bMQRUkejYA9Hm9BcBy84IO0sZPJjVYvL1xcZIOMXBUueCQw89NLCUONcxyznHHHOMX7xn+8c//nF4DVUkeqBp7Iul5jp300svveSuIeZ7u9ZG7DV/+MMfhs9Inql8XnzxxbHnDNNO3vdJkyYFNn7C4fC+970v8N1HRxxxRKXbRWGfc845Xd2bbbZZpbr05P4j8A7741BRBBSB/0cAXv24ceMMCadIE/zlL3/ZnHjiiSEDQICaf/75zXHHHSdf3adVCsLvacFodmYXlvPTOYc7daN2BBZYYAHDnwjPFiFIM054B6yVybE7rEXDZb884YQTXNH77rvPZTeNO29Y9sF4+da3vuXYSqQdt/FBBkqtdcU56qzP+Ch6zzBmttxyS8OaHdCojz766KJVaPmOIaCKRMceiDanvwhYl4WxgWTmmWeeMXPNNZfrOPO2iHTLImkLG9kgNqekwN+nU2UwY80HleYQgI5LuuxZZ53VXURon0mKxDzzzGNkFVFOgA4pioTQSptrbXdqRjn2FeR55523kiJBqm1rgQgzaYLpwgsv3J0b1paUQkDpn6Vg05OGGQEGisUWW6yQEgEeKB4iaYoEMzuhJlIeKqlKcwhY5oF7nuC+0EILuUXXxCIhGS6zru4vnf3pT386q/jQHkeRQFg1taiQZZT33rqN3KnQdLH8SHKwovVp+e4goIpEd56FtmTAEbA+33ABKOsDTr2bI488MkzPbIPPUsvqwWoIsP6GLC2+ww47uLTQYpHIo0iQjMkGF7pGfPjDH3Zmeb6Q/ZEVX3faaadwhl2tpd08G8uZ9cK7xnH/iKye6r7k+Ic1aLnllnPWPimOlWf11Vc3pOZefvnljWVFySH9HDAEVJEYsAemze0OArglZOllTOSkXqZTRLIUiVVWWcU89NBDxrI7zK677tqdmxrClmBBEHeEDZQ0H/zgB51riVtNcm34MNhg2jChFau+WiqoSyVtc1CYww47zFj2g7nlllv8U4Zmm0RrxPTg3iCJmljd/KyXeW6W9TmSFlBDSXnggQfMOuusY37605/mqU7LdAyBtxHv2bE2aXMUgYFAgI6PdMssdMSA9PWvf92wkiLZ+oh5II2wzHwH4oaGuJEsTGVZB+4OCe4799xzXRwMwYNpi1DhovrIRz4SKhy4RGRtCirDNE9Q4uc///mhRI+4H5TiTTfd1EyYMMGtfosyhZAqW2JO8tz8RRdd5JRnApUJZMW6we/j6aefNgcffLD73HDDDY1a6PKg2bEyKBIqioAiUBwBa6p19DX7kw7sWhuugrXWWivcZ5kbxSvVMxpB4P777w+fCzlArFXCfbeWitQkU0k00CWWWCKYOnVqQL6JYRVyc/Bu8wfFGbGptcN9QqWt4/5tim5Xr7V81FGd1tEyAura6Jhip80ZHARwS8iyy8Q8/OUvf+mJcE8LuBycuxyOluKft8mk3M3wnISeC5sjLU4C94WY87FG4NO/5pprHD146623Dl0kw4FS712wBoe46lglFPEtEHVSlyX4VT57W1LPN1wrNsmYOf744+upUGsJEVBFIoRCNxSBYgiwYiKLDyEzZ850nHubuCesBLaASncQYNEofyCkZcRPRJeE91tMPAU00HvvvdcFGE6bNs2Z+UfFZbXqqqs6OFAkHnzwQQM9WoQYoTrETp4dk4a6lllmmTqqjK3DWpDcQmQ2S62Lk2EZ9a985Svm1ltvjS2vO/MjoIpEfqy0pCIwBgG7CJRBoUBsiubQD893v9Plu0p/EcAvjyKwxhpruGeDtYFAySyZffbZzYorrthjbco6Z1iOb7TRRu5WiAuxabN7LDASwFrkXllllNU/ia8gpwTPgxVHb775ZlfNvvvuW6S6QmXt4npOkUTZJ08IK/TadW/MI488UqgeLTwWAQ22HIuJ7lEECiFAFkzoa3SMIh//+Mcd5bBMZyt16Gd1BFAUsCjArnj3u99dvcIRq4HBlvwbuH9wO8Di2HnnnR0KdmE7Y9ekyY0Iysi73vUuF7iKRQdLhC8sMd70Eu/8RvlN0g6V+hBQi0R9WGpNI4oAkftEmktmS5JZXXnllSHlcERh6ftt/+EPf3CDnl2gylxyySV9b88gNoAYIN5nBEXALroV3gYKRhFBEbFrnLhTfCWC/XZdD/Od73ynSHWlykJlVSWiFHSpJ2le3lR49KAikA+BNddc05C5D349wXniQ4cWygxIvuerTUvVgQADH39I0QRKdVx/WOrA6oDVDZG4H4IwJTlVkfu87rrrzEEHHeTcCVBvyafCejaWBVOkGi3bMQRUkejYA9HmDC4CKAxileAuiGqng6TDJeGOSrsI+DEqmOhVyiEgwahYJwTHAw44oJRyTFpscq2oDBcCqkgM1/PUu+kQAqyhYbn2hpUSMeWqVaLdh8MAiNkcq0QaxbPdVg3e1STOB+rrNtts4yxuMB5UFAFBQBUJQUI/FYGaEZAOmFwFpM/WYL+aAc5RHcoENEWyjKqUQwBlDMEisf3225erRM8aagQ02HKoH6/eXFcQ8IPLutKmUWiHDIKKf/mnLQoxCapUFIE4BFSRiENF9ykCNSDgD17+dg1VaxUFERCFouBpWtwiIIqEfCooikAUAVUkoojod0WgAQSEPdBA1VplCgKiwKkikQJSxiFRIFiITkURiENAFYk4VHSfIlADAn5wpSoSNQBaogpRJGQwLFHFyJ8iCoRiOPKvQiIAqkgkQqMHFIFqCEgHTC3KGqiGZdmzBXehMJatZ5TPk9gIXzEeZTz03scioIrEWEx0jyJQCwKqSNQCY+lKsEbAmEFUkSgNo1FFojx2o3KmKhKj8qT1PltHwDcFy8y49UaM8AXJKiqiaZEFieKfqkgUx2zUzlBFYtSeuN5vawj4FgnNY9Aa7OGFfMxVkQhhKbxB/ghE43wKQzcyJ6giMTKPWm+0bQRUkWgb8d7r+YqEJgPrxabIN8HOt/AUOV/LDj8CqkgM/zPWO+wTAmIS5vLq2mj/IZBNVEQGQ/mun/kREIuEKhL5MRu1kqpIjNoT1/ttDQG1SLQGdeyFVJGIhaXwzv/4j/9w5/gWnsKV6AlDjYAqEkP9ePXm+omAH2yps7n2n4Q/8KlFojz+733ve93JPp7la9MzhxEBVSSG8anqPXUCAT+boioS7T8StUjUg7laJOrBcZhrUUVimJ+u3ltfEfAVCcln0NcGjdjFVZGo54HPMsssriIfz3pq1lqGBQFVJIblSep9dA4BPxOgKhLtPx7fFK+ujfL4q0WiPHajcqYqEqPypPU+W0dA1nlo/cJ6QYeAKhL1vAiqSNSD4zDXoorEMD9dvbe+IuArEr6bo6+NGqGL+5RbTZFd/sFLsKWPZ/na9MxhREAViWF8qnpPnUDAzwSoikT7j8Qf+DSzZXn8NY9EeexG5UxVJEblSet9to6AKhKtQ95zQd+1oRaJHmgKfZH4Eo3zKQTbSBVWRWKkHrfebJsIqCLRJtpjr+Xj72cZHVtS96QhIIqEUpjTUBrtY6pIjPbz17tvEAF/Bucnp2rwklq1h4Afo+IzaLwiupkDAd5d/lSRyAHWiBZRRWJEH7zedvMI+D56P11281fWK0QR0BiVKCLFvuMa8t/nYmdr6WFHQBWJYX/Cen99Q8CfwalpvW+PwV1YLRLV8Of99d/narXp2cOGgCoSw/ZE9X46gQBujYMPPjhsi1okQij6sqEWiWqwq0WiGn7DfrYqEsP+hPX++oLA9ddfby644ILw2mqRCKHoy4ZaJKrBjiKhFolqGA7z2apIDPPT1XvrGwJXXnllz7XVItEDR+Nf/vjHP5q///3v4XXUIhFCUWpDLRKlYBuZk94xMneqN6oItIQAA9hNN93UczVlbfTA0eiXp59+2iy99NJGUjtzMbVIVINcFYlq+A372WqRGPYnrPfXOgI/+MEPzJ///Oee695222093/VLcwhcfPHF5s033zS///3vw4uoRSKEotQGrjllbZSCbiROUkViJB6z3mSbCFx44YVjLnfyySeP2ac76kfgueeeM8cdd9yYiv3kVGMO6o5UBN544w3z+uuvG/Jy+Lk5Uk/SgyOFgCoSI/W49WabRuDZZ58d49bgmr/4xS/MzTff3PTlR77+SZMmmX/84x9jcJg2bdqYfbojHwI77LCD+c1vfuMK+0nW8p2tpUYBAVUkRuEp6z22hsDEiRPD6PZx48b1XPeAAw4wOjPugaTWL48//rjxg1zf//73h/VDxdXZdAhH7o3jjz++RzHeYostzGuvvZb7fC04GgioIjEaz1nvsgUEbr31VnPddde5K+FTPvzww3uuilXijDPO6NmnX+pD4KSTTuqp7MADDwy/P/bYY+bSSy8Nv+tGNgJTpkwx+++/f09B3u+VV17Z/Pa3v+3Zr19GGwFVJEb7+evd14QA5vS99947rG2vvfYy8803X/hdNjC9v/TSS/JVP2tCAKbMFVdcEda24IILmqWWWir8zsbkyZNDa1HPAf0yBgGYL1/72tfC/XPOOWe4/dRTT5l11lnH/OlPfwr36cZoI6CKxGg/f737mhA46qijzDPPPONqm2222XqyWvqXoPPdeuutNQLeB6WGbeJPyB0hsvnmm8tm+Ekg5jnnnBN+141kBA466KAw1mSWWWYxiyyyiCssCsWjjz5qtt12W3UXJUM4UkdUkRipx6032wQCDz/8sDn66KPDqomFmGOOOXpyF8wzzzzh8fvuu8/stttu2gmHiFTfiObtYJCLyx2BVUJn0ul4v/LKK+baa68NC22yySZGEqrhHpJtMI9jyIQn6sbIIKCKxMg8ar3RphDApSHpgz/2sY+Zr371q2Mudeqpp/YMbOeff35suTEn6o5cCPh5Oj71qU+ZJZdcsue8WWed1X3/3e9+Z3bffXcNGOxBp/fLnXfeaXx2xoQJE8J3d4UVVuixthHE+rOf/ay3Av02cgioIjFyj1xvuE4EYArce++9YZUnnHCCefe73+2++zPitdde2xx22GFhOTZOP/10tUr0IFLuC4F/M2fODE/eb7/9wm3Z8ANfL7vsMvPBD37QPPHEE3JYPz0EnnzyyfDbAgssYNZcc83wPYX5QhDrJz/5SVcGBXqnnXZSV12I2GhuqCIxms9d77omBN773vcaWZBrs802M9DjRHxFgu1DDz3U/Um67A022CCc6ck5+lkcAbAlhTOy3HLLOd99tBYGO/5EOMenh8p+/TShdQ0sYG2AlVBn+eR9J9ZEsoXCRoImqjK6CLzNvhjB6N6+3rkiUB2BBx54wGCZwC8v1ghqpYMV5sBf/vKXcO2Hl19+2fz61782yyyzjCoS1eF3NfAMMLFvt912RtwYuDtgFyDERRA0eNppp5kbbrjBbLnllmaXXXZxx/RfLwIwNrbffnsXYMkKtii+q622msHl8Yc//MEQTIzA6vjOd77jtt/1rne5d/oDH/iA+67/RgsBVSRG63nr3baIwCOPPGLw1yOsvcFAptIeAuT1WHfddd0FfUWuvRYMz5VWX311c8cdd7j1S3ALIVBusQChMLNA2q9+9atQyRieO9c7yYOArv6ZByUtowiUQECNfSVAq/EUH38xw9dY/UhVJfj5C3dhffvRj37kEn2tssoqqkSM1BvRe7OdiZEgYxpmSIJ4ttlmG40E7n1O+m0AEfAHMn97AG9lIJvsYy4D4UDeSAcaLZTP6DomWCf22Wcft2x7B5qpTegTAp1QJI488kiz6aabGnya+JqJqsZ/HLeKYp9w0ssqApUQ8Ae1ShXpyaUQUEWiFGzhSaJI/POf/wz36YYiIAj0XZG4/vrrXepaGkQEPNYIkvewuNGXvvQl85Of/ETaqp+KwEAhoMpDdx4XzAOV8giIIkFchIoiEEWgr4oEwTtQ5mRFxPXXX9/521hgh4QyJEVhzQIVRWAQEfAVCX97EO9lENvsY64WiWpPUBWJavgN+9l9UyTQbKFf+RnUoBch8LsvueQSl4r1oYceMqQUVlEEBg0BfyDztwftPrS9ioAoEtEYCUVGEQCBvikSxxxzjGERHV8WXXTR8CtBl1grELjMKorAICOgikT7T893Z4jVs/1WDMcVVZEYjufY1F30RZF44403zIknnjjmnkjo4wvxEggr+6koAoOGgCoP/X1iMvjRCp+22N9WDebVJRurWiQG8/k13eq+KBKsMUCCnqiQMtgXcrzj23zppZdcshP/WJVtVmpcb731zG9+85sq1VQ6lxz10KbAQmU4EfAVCX97OO+2e3dFtkWRv/3tb7KpnyUQkBgTVchKgDcCp/RFkWDlQ4SXU9YpWGmllQwrJ/pCJkBxd5A9rQ555pln3KIzP/zhDw2rNvZL7r//fnPKKacYXDwqw4+AKhLtP2OyLYrETVzkmH5mIyCuIX2Ps7EaxRKtKxLkw2cwR9ZYY41wud+kQX2hhRZyZf3V/dyOkv8efPBBd+YiiywSskWiVWGpIGc/bXrzzTejh2v5LjQqVi5UbnYtkHauEr/T9bc719AhbZAqEvU9WFUk6sNyGGtqPUX2tGnTQhy32morw8ycwMqtt9463O9vkFMCeeWVV/zdpbfFncHyuNdee21sPbvttpv5/ve/7469+OKL5sYbb4wtV2WnLG6DEgEzZcUVV6xSnZ7bQQRUeejvQ5HFu2gFi02plEdA2HX6TpfHcJjPbF2RuOuuu0I8JQZCXtLwgLdBkiqkriAfYhMQsQi4L5F/99xzj9uz9NJLm9tvv91MnTrVJcqKFKv0dc455wzPl3sMd+jGUCDgd7r+9lDc3ADchKxSSVMJ8FYpj4BYTSVWonxNeuYwItC6IsGKiMiHP/xhM//887u/NGCFwlVXRywxGWkzFFYKRFZYYQVz3nnnGX/QT2trkWNzzz23ixHBZIh7Q2X4EJB3lzur6/0dPpSauyMUdJgbTB5UkaiGM8uwIyzUpaIIRBFoNUYCKwAMDAR3Rh6RF/g973lPnuKZZcTc+fvf/z6xrFgICNBaaqmlnNKTWLjkATo4lAnkhRdecJ/6TxFQBOpF4H3ve5+rMG3iUO8Vh7M2wa+ufng4URrdu2pVkUCJkJlZXkVCXmA/cMp/XLg8pIy/P2lbzJ1YAZJcKtL5MIu5/PLLk6qqvF9YKjNmzKhcl1bQbQTkve92K4evdTIpECvj8N1hO3ckMWqzzz57OxfUqwwUAq0qEq+++moIDm6NPPKrX/3KFYtzL9A5QA/l2L333punOsOytwhKxK9//evYc4R/Pn369Nz1xlaUsXO++eZzJZ5//vmMknp4EBFQ10b/n5o8g7pirPp/R/1pgSgSLF+goghEEWg1RkLcFDQiTjGINo7vQvskpiIql156qYFVgTz66KOGXBQISgKJnj7ykY+45cndzv//xz4RXAof/ehH3VfaRiDoLbfcEtYJY+Skk06S4rV/fvzjH3d1+qnCX3vtNfPwww+bX/7yl4YkOgQ54RLaddddzbzzzlt7G7TC5hCQbIBcQYJ8m7ua1hyHgCoScagU2/fHP/4xDE4XtlmxGrT0sCPQqiLhm3fz+NoY3MUiAV0zKldffXW4i8BIEZgWX/nKVwydCOcT0Mj16Nj9qONvf/vb5rTTTjNPPfWUYcVRcXVgDiV/BNeUjkjqruMTxQDlQRSrxx9/3Ky11lquHXK/ch2Cm3bffXcj7hbZr5/dR8BP0ayKRH+fl7AO+tuKwbz67373O9dwAtW1HxrMZ9h0q1tVJPyIX0lwknaDDLAI50k8gV+eHBQIysFiiy0WHhIXCorLcsstFwZ4hgX+f+P6668Pd6E8sNbHnnvuabbYYgs30AvDIywUs0EcBXEXvoISLUZg5wknnGBIhvXss8+al19+OYwVoSyd3I9+9KPwNJQXEmaRFAslIq/1JqxANzqBgFok+v8YZPKiilz5ZyGsMnVrlMdw2M9sVZHw3RN56FgPPPCAw3+JJZYYM1CT811m9B/60IeMxDVwgq+k7LDDDs5dgbtALA7yUDlnyy23NBtuuKH53Oc+F2rbUg7XAkmrcIFg0VhllVUMbRG5+OKLzY477mjWXXfd2IXF6LxwSXBt/tLkC1/4giGvBiwR/kgPrjLYCPiKhK5R0J9nKX2BKhLl8RdFYo455ihfiZ451Ai0qkgQYMngTeATMQBZIgGUyy677JiixBKIRF/wd77znXLIfOlLXzJHHXWU8/HBjmD2f8QRRxjcIrTnwgsvDMvKhnQ+WAl8SwHHN9poI4MCgYkPRYcZD+t20J5oO9gv64qgsKy66qpubRECPom/wHVCG3CjkOWTMirDg4BvpVLTen+eq0wK5LM/rRjsqzKRQiRQ3X3Rf4qAh0CrrA0GeLJFImJt8NrSs8lgDmsCGT9+fM8xvshgz7YfQMl33zohMxHcI5/4xCfcbJ81PhDcDHEdvF835ThXYiVuuOEGs/nmmzsFYsEFF+SwE9YQiYqvLKHV77XXXob021gfll9+eeeyWHzxxd1ptEVluBBQRaL/z1N+t2mZbPvfym63QBZM1GDvbj+nfrauVUWCG/385z/v7hdrQ1r+BxgUzPJRPnAdRMXPKxGNZYB5IRLHH//MZz7jDqNkPPHEE1I0/JTOhx0cx8Xx+uuvO6sB+2699VaDQuFbPlgvIyrCOGF/EsVT8mn4Ske0Hv0+WAignP7gBz8w3/rWt8KG42LbZZddxli4wgK60QgC0jfE9QONXHAIK/3JT37i7oq4LRVFIA6B1hWJbbbZxsU74DO+6KKL4trk9l1wwQXuc/311zdxSVCIIRAftN9JEHtxySWXhPXKIl3hDruBVUQS1fz0pz/1D7ltX0GQXA+04Xvf+17YFlJnS3IrTvrxj388ph4/LoKcFXFcdrHQPPnkk2PO1x2DhQDp31EW5pprLrPBBhsYeYe5CxTFc845x7FzeKfzxAgN1t13r7W4M8S6yG/x6KOPNjfddFPs77B7re9/i8gdwTsrqzVjNb377rt7AsX730ptQScQsD7+1mXTTTcN7M0HlokR2MF1zPUt3Siw7gRXxloXxhyXHePGjXNl7IAeWNOl221jItw+6ufv2GOPleI9n2uvvbY7vvPOO/fs54t1N4R1WKtJz3Fpu01v7fZb94Yra+MjAttphWWtohRYq0lYD22xNNPwuGxYy4wrYxWbwHZ8sls/BwiBv/71r8GECRN6nrW8f0mfn/rUpwIbGzNAdzk4TbUrDAdWoQv4Tcbhb3MhBKeeeurg3FCLLbUKbnDKKacEK6+8cmAts7H40T9ai3GLrdJLdR0BtMvWxboLAsuxdy/pIYccMub6loLpjlkXxJhj/o4jjzwyfNE32WSTYPvttw+/22XJ3fZ6663nTrEzksBaEcLTv/Od77jjyyyzTLhPNvgRSQdkLQmy231aFoY7ZuMw3HdL0QzL2jiJsKzNZRHul7ro4KKCAkRdlLG5JaKH9fsAIOC/A/Kso5/W8hTYAN2ed+LrX//6ANzd4DTRBkYHMrmI4h/3nd+yyr8QsO644KCDDhoz+YnDjX3WZRTYgHWFTxFwCPRFkeDKhx56qOtUbUBacOWVV4aPw5oeQ02YjiFNLP0zWHjhhXs6Z15yOnasA5auGb7wWA58LRpLAzMWFJqo1QOlRH5ATz/9dE8TUDw4ZjNiuv2WlRGWPfzww8OyG2+8sduPUiJtPPnkk8Pj/oZlbLiyluXh79btAUCA98OfubEt1jR5h/i0WVgDm98ksIHD4ftiKcWBzRo4AHfZ/SZOnTo1oC/xMc+zfeaZZ3b/5lpoIROuLLz895yy1r0c2NivFlqnl+g6An1TJGygYyCDLR2ADUYLbDbKcHZu2Q25sMNigPUBpWChhRYKjj/++NBFYH17bp+NpQisf3RMfVgIbEbJwNJCe47tvffe4Y/KBhoFxxxzTIC1wcZIhPvFJWIzUYYdmGWFuHpQjORHedlllzlFie82B0Ww7777jlFcrP/c/Shtps2eduiX7iOA8ijPmtkwli+UWN4tG+UeHrNxO+5mcNvhxpJzrrnmmu7fZMdbaIOhA5u0LcRUsPU/eTaUu+qqqwLcknLMxrO4/R2/xUabd91114V4CC7RT8uMC5h8WSp92N9RBleyiiLQN0UC6DGnoTxENV0UA47VIcQd2GDMQlWJ24MfCh09mjeKjsx4iH3wNXEbPBf+EPGVy4zUpu0O4yZs0FKAeXu//fYL4zn8RjEz9WMs/GO63U0EUIZlAOOZW759T0N9l4dlcYTHbCBm+L7gnlOphoDNUBviyaQBl9GNN94YfPWrX3UWSX7HoshxJSYFlJPBEivoKIvN5BtiYdf/CeyKx67fk3gw+ueJEyeGEB122GFheeLTiAdTGW0E+qpICPTETDDrJ14iy50h5zT5SacvnQx+Q9nmE2UCM7UvzEIlzkHKYiHB0qAyvAjgKpPnLRYq/25xVX3jG99w1jCUDpEvf/nL4XkHHnig7NbPkghgVZTnYBPM9dTyzW9+07kvoy4kSykPz5k8eXLPOaP05aWXXgrj1bDO2HT+PbePFRWFwhcCMmVSBe703yqjjUCrmS3tSxcrJIrirytCimoRMlh+8YtfNNYkaqy2bo477jhj/Yly2H1SnuN2MDFQpkilfdZZZ7n1MnoK6pehQsBPQkaK9aiQ/yQuB4pPLxYacvRc/Z4PARK9SfZZqNTk6/AFmriNxzKzzjqrv9v1N5JvRtbm6SkwIl+sGzZcmXb//fcfk72S3BF2gteDBlR4KM5CrfezDPcU1C8jg0AnFImuoU36an4orHpHeljL9nB/ae0k0RY/LHJF5FnZNK0uPTYYCEhHSmtRMvOKn2VRF0LKi1p8ufvuuw+rqjtoXaJjCllX4ph97PBzwEjSqtiCQ75TliHgNknTHxXr2o3uct+ZYMn77yvGsYV159Aj0HpCqkFBlFVDkbiEVUn3YM19qkQkgTOE+/2FuKIKAYMb1gbeCTJc2lwTIQL+DE4SnoUHdaMQAjZQOiwvC+phpWCBQOvbNzZWIjzub5DVViRqrZD9o/Ap62iAAUsNkHSKJQnAzrp1EyFQ/BKhGckDfVckWDTr3HPP7Rz4/JgQ8syT8lhFEYgiYBMbhbtYKt4XZsJkVkShoENmwSNMx5Yu2pMuXdK1++fqdn4EfAWN5/Hd737XLYaHMsFgaKnczjXpK2/U7mcWja7Vk//qg1+SBQMRlhygz7NUdcPyBAhYPvroo247+k/xiyIy2t/7qkiwDLhlObjYgugPvd+PRXzeuCp+/vOf97s5ev0OIiALrtE0/x2xTAy36utmm21mLMU5XJPl7LPPNosttpiR2Aqb3dJYKmIH72xwmuTHmGCaJ4bJsp/MTjvt5FbWtXli3AKBxGBdccUV4Y2Rsl5E1ruR76PyieuWPhjBTYGbiBWJLRPJ7WNxQVK9o5T5gvIh6yTh0sPNoTLaCPRVkfjzn/8cou9vhzv7uMEgQfAWJmviJVQUgSgCa665ZrjS7BlnnOGC1rCusWw9i7phheCPQFysE5jecXWIYJbH7eEPanJMP/MhYGm3YcFFF13UWSFsrhZjU+C7VXuZVRMAzT6bydIFSrOAnqyNwyA4alYh7p2gVJtUz1g2S4ifpXWal19+2a1VhDUHq9qSSy5pNtxwQyOWCwrfc889YVyKrKQcVqIbI4nAW71aH26fzlXE97nJvn5/MnPEZI3WraIIRBHAr8zghOACg63DMvEsdLTqqquGxemIbaI0Z4lgtoyw1P3XvvY1QzAbcRIsZicm5fBE3UhEgIX6cBmBocj9999vbOZZtziX7LNUW7P88subO+64w63kS2AlkwRm48jmm28eKoNyzjB+YnmwWTydMosCTH/LO+crCDbzrrG5N9zCcmDAoog2oZ4ra3OihAugsXihiF2WQDb1c4QR6Ksi4SsP/naXngc/JhVFIAkBrA/i4mAgQzlGkbD5C8zjjz/ugtdOPPFEYzNduuXoiZmA1YPSYXOnmB133NGZ3tnHqqDMqk877bQeH37StUdxP/ixui+0xO9///vmtttuMxtttJGDAuVi9dVXd2Z3m3E2hAfWFb7+iy++2BCTJYGxzLphWw2z8A7aTL0GJhrvIa5kVl1+4IEHXCA5y91LsCnuZdxxvkCfBWeWEsdCgaUNCxuy4oorOrz98ro9ogjYH2bfhHUKLOzu77HHHutbO/TCikAVBOzSyj0JeuSdjvtkfQ0bJxGwYqjtlAPLLgjsjDmwy8i7dTdsZ+9Wn6UcaeJJdqbyLwRIVw9WrN7JujV28uEOkHXWKgVhX2IHTbcWjvX3u7TOrDBsB0+XeMlaf8Jyn/70p13mS5KC2Zn50MDMQoCsPQJWrCVkLWIBSfZINmVz4rjkeSThkuzBshAh7yvlZcFDUmeT0p01YsCPhbokEZV1CQVWSRkazPRGqiHQ18yWdJ7S2T7yyCPV7kTPVgT6gMCLL74YMHAxQNHZsnIta67QIcu7TcZAOnMWeLP++sAmMHPZAq31IiBL4LbbbuvSqrPWigyOdqYd2GA313l/9rOfdXUP02BX5FHZYD+3LDgD2e677x7YmXN4OpgxqFmrg1MwBPOsT9JnI9bf754Xi/qxYu8gi6VuBihFZNXlnWSbtYAQUoSz37rcgqeeeiq8TTJbWguNe9dEScjCzlowAusqCuvQDUWgr4oEVgh5acl/r6IIDBICzNSsKyJgrQKUAl/4zqDHDDAqdN509CzgJsKMkUW+WF3Wt84xiDJ7/NjHPhbYjIJuzYNRSb3OjJl1bxi4VltttcDGoQhc7pP1NGwypODmm29233kezK6x8ki/4n8yULJujmVk9dSDxeLggw92M3VSnVPPoAiKJ+8Oiir3h6LAQoGy/sVzzz0X2MBT9+5MmTKlZz0f3lFwZfFExLp/Auv6cHj7uMk2CrF1HbmlxqPPYlDw0nY2g0BfFQmsEPKSPvjgg83cYcu10snTsV177bWB9ZmP/MqCLcPf2uVYCG7ZZZcNbNR6wEAUJyxIF7cGB2VRnFn8zbI9wlNZD8LGTLgB7dhjjw0HAwrQ6VvfdGAD5dyAwWDIYlUyYISVDMnGrbfe6pQ0LD2Y6aNi6bZOKWBwjBNWAUYxY7E81t+YPn26c3MwWLLAGmb7qLBmxEorrRR86EMfcgtXRY936TsKJu+IZV44i8Jee+3Vs7YPCgZuMlaatbk0AkvvHNP8I444wild0fU1eKfol1HiWFfIxkg4K4YsKog1B8U2rs4xF9EdI4FAXxUJ/L+iSNjgn1yA0yHwAzjllFOcWTjXSRUKoexMmjTJLbw0c+bMxJr4UY0fPz68H7kvfN02GCygY1QZDgSYKTOQ42O30fCJN5WmSHASMRLMqFncyxfeFTpqVouNc/kxy6QzFxM2K4ha2p5fxcBuP/PMM4ENgAz43bCIX5w7h3tlWWub4CvxPhkAbRBs7HEbzOqwE7O/X4jBkr4FKwjP2FJ0/cN937YprQPLlHAuL1xklokxBiObjde9OyhSKJtxQrwJ715Sv0TMSVJ8DkoKK9jiciPWR0UR6IwiYbnNmU8DM7EM0HzS2Tbp17QJWsIlwbkePlrM0X/729/GtNVfTdBvo7+98sorBwSYqgwuAgw0dOT41AlES5MsRYJzbZ4DN2gxU/YFBQVrBp09ioIExvllCKpjxk2HTkyGTcjkfNcyc/TLdn2b+8Wnz/0SG0LsSZzYfDOBTeTlzPFRd5JfPk2RoJxlyASsGpqEFUoG7gKsRieddFIYu+Jfo61tLFVYrlCMULAILo2z4DKos9os/dQee+yRqORiTbMZLFMVsTRFgvuW54C1I+05tIWRXqe/CHRGkUDTThPMk/6gLFHadAZVhFkh5mk/AIn6+HHww+WaBHNhxpZgJMr7HTs/YEsTdWVZdheTIH+WduVmrX67bda4HhNklbbrue0jYPMWBDYbZYBVIEvyKBLUgXKaZCq2K1sG888/f2ATAzl3SNI1mT3abI5u4LPUSDerfv3115OKd2Y/A7mlZToTO/eYFsTHbxJrhU0glTkTzlIkUALx+eMeSBOb58PFs6Cs4U5pU4iVIXgXZYZnarN2JlphsWrZfDcB/U/WpIw4CJSxJJcc95ilSFAGyxCxPvvssw9fVUYYgb4qEgTsyCBrk/GkPgYGcilLBDJmZb4nKRJ2MRr3kjOYp4koC2j5vtx5553h9fA1Iswa+aFy3VNPPTUszsxF2uYH0EkBrBD82GwSIlcO+t+w+rblnofx02ahdNaDvANKXkUCUzEz5CRTMTNIAjeZrdvsg6kDALPXKIU0b3vbfmZJdM6kdoAnMQE2E2hSkXB/liJBQYIU+U1mBXqDKUGczPSbpopGqZu4RSWYNLw5b4P4BhQD7oOgXH+C4xULN+2y4S5uAsZcmuRRJDhfYn1OP/30tOr02JAj0FdFAh6yDMDMvJKEmZVYA2xefFfMJvRx56JQxInNq++OQ22iI44TfoRyfXyuvhxwwAHhMd9P+tBDD7n9+CcR6HxiHaEuOvwksal5nfWDclELSNI5ur8bCEDdJEiPGJ28kleRoD5MxT4tNO4aKLe4VFBmGYSzBLefTyHFqhcXc5BVT93HfTonJnifzpl0LZQjLINxMSNx5+RRJDiPWBPJ6xFXj7/Pp4pCz61ToG4Si0XcC32RzdoZUjeTrpNE6UwqL1TPs846K6lIuD+vIsEJSbE+YWW6MfQI9FWRYDCVgTwacOYjf9NNN4Xl6JwRiZfAZxinhaN8zDbbbO48tPq4MrhTuD5mPr+Dgm0hrgroYphfcV+wH9Mq5zAzQhhY5B74tJnh3P60f1hLknyz0fOwXNDZYXlJwyh6nn6vDwGi1rEGwJooIkUUCeqNo4VGr8d7SIQ+s2Moi8xgs4SBG0sG7hOhkPZDkeU3mEbnTLqPKM0zqZy/P68iQbzTuHHjXJ4K//ykbZ8q+qUvfakSVRRLFH0bfQoTJYK1fepmUhvSKJ1J5+AW8qmeSeVkfxFFgnOII0HRU1qoIDhan31VJJjpyyCcFF3M4zj66KPDcufZxDOIXUkx3HfLLbe4fdF/flwFwZB2xbqeIpj5uD5uE19EwZC2+cmFZJ/N4e9Oufrqq8N2cMymjfWrqrzt3wNKUxpLoPLFtIIxCBBwC4WujOm2qCLBxYm4j9JCxzTK7uAdxW/ObDrLJy7nM5jwvgqFlN9EWxRSfqPk3IDOyWCZV7Jonkn15FUkOD+NEppUv08VLXI/1AfDy6ZHD6mbuF/z5AYRSif9wKabblqIfknALvk1olTPpPsrqkhQj9JCk9Ac/v19VST4QcnAzA8/SdD8pZyYdPnxyj4SriQJPyAphxWB4CmxBjA4cIwkQL5wnIA6OS/6SbAlflMEE6d/POoi8ests022RL9+P1lRmfr0nPwI4HojHbNdNyP/SV7JMooEp+c1FTObJiYH6wSuuCJuC2a1du2EwK5O6mKJmqKQ5qFzepD1bArNc+LEiT3783wpokhQXxolNOl69BNQRbF85qGK4hqxi1+554UVNI66mXQtXKrQgaF08n4UkSyqZ1xdZRQJpYXGITka+/qqSDAYyyDJjypJUBQoh/lPOksS98i5fNoV6ZJOd3n56WylPDMjOl46UvYxS4oKsz2O4eLAJIh7BN56NCjUt6pI/aJkROss8x1zMIFemF+xguQJNCtzHT2nFwFyhtBp48MvK2UVCa6XRAuNawsuN9JyQ+ljsCoiuEbs0udOmcbytuWWW9ZCIcVyhs8/i86Z1FahF5J1EUtKUSmqSFB/FiU0qQ1QRekf4qii9AVMWHg+adTNpLpxZdHv0H+lUTqTzheqZ1FlrIwiQRsk1kdpoUlPZDj391WRQKOXIEoi4pOEaHYGaWhwCBxzAt+gb7FOAcfoBHF3+CJKB/vQ6KUeGfDlM86KgIuC4/yg4vJGyHW4B9ohdfFJNLjK4CJA8B8dP/EuZQYxufMqigR1pNFC5RryiULw9a9/3Q04//mf/5lJj5Tz/E8opFj/hG7IwlhFKaT8HvLSOf1r+9tgnpfm6Z/nb5dRJPJSQv3r+NtCFYWeittUqJtMXNKom34d/rZQOgkwz+u+8s9nG0ZHFtUzeg7fyyoSnCu00DgGG8dVhg+BvioSwCmDMLP+JJGMkXTumOmWW245N3ATO0Ew4i677BIO5Mzc+fGQ6haOc1QJwB/KDIFOngRRDPz88KNCZyzKQVyGN2YKYmL0XS+cg/9TZTAR4LmyaiLvY55AxrS7rKpIZNFC465NoiIGHtgdaTkZ4s6VfcyiCYqEHcIsGotYHgopv8241Tml3ryf4JaX5plUZxlFgrryUkLjrktfg2WUXDH0A1iI0mK/4upgX1FKZ1I9eamecedXUSSoT2mhcagO776+KxIsMsOPDtNdUoIUUmLLoC6fKBd+LgaCudZZZx3Hp+ZHgD8xK+02plfqi8ZI8LgxF8u1uH5UyDuBXxnB2sE1pTz+VpXBQ4D3CfM2M7g63FNVFQkQFFMxwXV5rSP8jnDd4VZgVkgdZQUKKZYZfp8o3BdccEHoXpQ6y9A55dzoZ1GaZ/R8+V5WkeD8IpRQykepm7BpWMuDiQ8KXRGqaFFKJ9ePkyJUz7jzqyoS1Jk31ifu+rpvsBDouyIBLU0GYDqkOEHTJ/0vSVdwbxx11FGJSgedbRzVM65efI9cGwtHnBBUyXGCqYjSRvA5kkEQy4c/YyUgjx8f7csbGR13Td3XHwQwyRN3s8ACCxSKhk9rbR2KBPULLZQBrogwKyQ3BRkPq6aSj1JIcaNg3WPgT1qds0hbKVuG5pl0jSqKBP0Nv28sMUki1E3WnBDq5uWXX94zuSlCFfUpnVhMeR/LCn1gEapn3HXqUCSoV2mhcegO376+KxLMlqA/Ef3ctogiQexEnBCLgYkVZYKYDOImSHAFH5/kUlF54403+pqTP9oe/Z4fAYLRMEnDMqhL6lIkaE9eWmi07SjVzJCxTpB/oip9mEEKCikWP/ld4Ab0rYPRNuT5XpbmmVR3FUWCOpMooVHqJs84i7rJJAQ3KquKRqmiKCTf/va3nQupKKUz6d6LUj3j6qlLkaBupYXGITxc+/quSPQTTsleiQkyqYOl4yAGAg42UfwEUKnFoZ9Prf5rEwhHMh0G6zqlTkWCdlUxFZMoiCywKMFJeVfy3LtP52QCwD0KhRQXIIF2RaUKzTPpWlUVCeoVSihMKdgwBHbj4kGJIjukH8yd1A7Zj4WBtPo+VbQKpVPqjX4SI4PSmLSqZ7R80vc6FQmlhSahPDz7R1qROPzww92sipkVdDuV0UOAhF+4zKqa/uOQq1uR4BpFaKHRNmE1wJXI/ZLKPZqgLVre/+7TOYmZ8FfnxMVHojhijaBLQyGdbjO+5jHPY5EkJqUszdNvo79dhyIBPgSckpAMiySuLwb/KgJVlDgcFBJcIrvttlviJKbodcpSPeOuU6ciQf0S66O00Di0B3/f2+0gOrJiaW7hvVuLQ7itG6OBgF0MyVg/uLHKhLHZHgfipm3wpLExOsb65o2NWyjUZkuRNpMnTzY2dsJYV4Kxg6SxLIXUOmwXZ2wAoLEURmPTORs70zU2Vbixlo3wPKuYGJuy3ljWhrFWHWPTyhu7kJ07x7osjXX5hWX9DatomG222cZY5cPYgd/YgdU/3Ldtm/TNWMujsbRwY5UkYwdVY62XxgaaGhtwWqld1mVirKvD0N/YZGcOLxsfUalOOdlaiAx9mnVtyK7OfPJO2FTz7h2xK+h2pl3akJoQGHxdqPwdTJ06NbRIkPNeZXQQgJVDvgR/Fde6774JiwRtLEMLjd4bdRC0zEwb111cvgifzkkME+fkFVgvWE98CinBn76AT1Wap1+fv13UIkGAJYwJ6KvkpMFCImvbVKGESpt8SidWIWJXwIiATqwTMMiKuEqkXvkUqqcEhcv+sp91WySkHUoLFSSG63OkXRt0lFYfc38szKQyGgiwhDKrLNrZeaM33JQiQaPFVFyEFhp3s2CxwgoruBggyXlQJ52Ta7Ky7+abb+4GTKGQkmulyGqecW1P25dXkYC6SayUrLpJYCruh6gUpYT655Ogi/qhuscFZsqqojCGilBF5RpVqZ5Sj//ZlCLBNarE+vht1O3uIDDSigQzAPzFKBNEoqsMPwIE9hFwmEbtqwuFJhUJ2liWFhq9P5gYxx57rLNOwGBixVvog3Wv5IiCQlwS7AV+cyxx3tQqpGmKBJYVJg5C3eReoW6mWVywWJDoq8h7U4TSCVX0kEMOcf0RFqJXX301+phivwvVkxTddUqTigTthBYKbbjud6xODLSu/AiMtCIBTASGESBWNYgqP+Rasl8IYL7H1M4sPm3QqKt9TSsStLMsLTR6jzA5yIGCYg2zQKwT0XJVv0PzxKVEkCFr6BBwSCI5EjhVpZD6bYtTJGBgkQ0Xdwo0bp7PyRIY8wAAQABJREFU008/7Z+Wup1ECY2exLtVltLpU0VxvWZJHVTPuGs0rUhwzSIp4OPaqPu6g8DIKxJ0XuTYVxluBLA+kQcE8zKzyzakDUWC+6hiKmYgZV0LUmEfeuihbo0OBkGYCijZr7zySm1QCc2TZFYizNpt8J2jkEKxJrFbGQqp1CefviJx991391A3WZOnbDwCMTW4KZIWz6uD0hlHFZX78j/ronr6dcp2G4oEChdWIaxgpKZXGVwERl6RGNxHpy3PiwDKIoPlkksuWYjymLf+pHJtKRJcvygtNI3OSX0M8Jj8yRFhWRrsqiRZNE+hkC677LLOQrjFFlsE06ZNy0UhjWsYa17MPffcLk01SlEd1E25Ttwqof4qnazSm5SXRurI8+mvKsrz9a1odVI949rShiLBdSXWR2mhcU9hcPapIjE4z0pbWhIBUpqTJjppFlmy2szT2lQkaMw+++zj4j8w4ScJs92LLrrIBVeiWKUt7EVZfNnETBDPQIxDGcGPX2Q1TxbJ23nnnd11WfiKNsSxSuLags+dgRwXDYmZTjjhhICMs3UKFkyyoJLIDKljlc609l177bVuAUICVWXxNEu3LbWqZ9p1/GNtKRJcU2J9dLVQ/wkM1rYqEoP1vLS1BREg9TXBfUV84QUvkVi8bUWCGSuz5SRTcVk65wsvvBCstdZagc17MCbFc+LNewfAoQzNM0ohZZXfuOyjQt1kzRyom8xuYWIsvvjiXivq3YQSiqKCggSFViid9V7lrdrAgrgSqKLE+OCKqovq+dZV3tpqU5HgqkoLfQv7QdxSRWIQn5q2ORcCLIXNbBpfcj+kbUWCexRTsU8LxZLADJ9BaI899ghee+21UnBMmTLFRdrDEMhr3eEZ1EHzxM0BhZTBm5n5+eef79bD+MY3vhFSN2E9SLv8GIlSN5txEpROFAgGdCwobck111zjAlRxOZWhiuZtZ9uKBO2qEuuT9760XDMIqCLRDK5aa58RILkQ5u2qaw5UuY1+KBK0V0zFXL/O1Tmpe+bMmcG6667rWA8MpmkCxZKBn9l7XYKisN1227lBHAoplo5o/ADXakqRIHYE68zss8/uFhqEBVSEEloFB6F6YgURqihuu7xU0SLX7ociQfsk1kdpoUWeVv/LqiLR/2egLagZAXzWKBF56HM1X7qnun4pEjQCdgGDQVl3RM+NxHxh0SpoorhS4lgWda/mSdzHt771rR7qJotq+RRSYgmEQlq3IkG9QukkXkTiUPJSQmMgLLyLTKQwW2TRwKJU0SIX7JciQRuVFlrkSXWjrCoS3XgO2oqaECAOgDwFBOj1W/qhSPh0zq222sq5MyTVc914oEBA30OhwNUgEkfzlGNFP++6667Arsfh7oPVS+Oom88//3zAUuaY+4VCiiJVV4xEFqWTa3FtcasUvcc85ZOonj5VFEvRjBkz8lSXWaafioTSQjMfT+cKqCLRuUeiDSqLAOmH6dBJc9wFaVORSKJziqmYmXNTcu655zpXB4mlmCVXXc2TVTexNnziE59w+SwmTJiQK2EcFFIUGiikDITEZlShkELpJFiX2JIsSmccJbQuvPNQPaGKsj4ISnScq6doW/qpSNBWifVRWmjRJ9ef8qpI9Ad3vWrNCNCRzjfffC6osOaqS1fXhiKRh86ZhxZa+ib//0RM/QRhkiWW58DgV1QeeeQRFwxK3ge72mgl6iZreRDHQLCtUEiLBJkWpXRGKaFF7z2tfBGqZxxVNK3upGP9ViRol8T6sM6JSrcRUEWi289HW5cDAfIEjBs3zg1kftKeHKc2WqRpRSIvnVNoocsss0yjGQRRWIjJIP30GmuskcvMDnWToE2fullHgKzESGCpwc1FUCQsC9grcRRSeRHI5EnyKsqyLgirdOYVWSVUcj3kPS+tHKt6FqV6+lRRaLBlsnh2QZEAF6WFpr0d3TmmikR3noW2pAQCDEQrr7yy+2sr9XXeZjalSPh0TkzueWbaYir2aaF57yNPOZ/myewckzRm9tNPPz02O+UzzzwTQN1E8fjIRz7iWAh1xhiIIuG3HTcHGTOFQnreeef1KFaySuf48eNjV+n060raJlBwscUW66k3qWzWfmbkKGVnnnlmVtHY41VWFe2KIsGNKS009vF2aqcqEp16HNqYIggw08YvzKqMdWcvLNKOpLJ1KxLMjqvQOcVUvN9++yU1udT+JJrnFVdc4ZKBMTCzXDfP68Ybb3RMDxbrWn311QNm3E1YkeIUCbk5FB3W9MAFg/uD1TZZSp3tM844I1bxkXOzPlFmeR9JHlVFhOpZdVVPf1XRIlTRLikS4CixPkoLrfJWNXeuKhLNYas1N4wAZmoGA+Ijuih1KhL47Ikb4H5Z8rqs1LVaqFw/i+YJVZG8BwQsMlAzw2bW3nSm0TRFQtrOIEv8AUoNOSlY0I2ET0IhlXJFP+ughEapnkXbEC1flCraNUWC+1FaaPSpdue7KhLdeRbakgII4PuFofHUU08VOKvdonUoEj6dk9U5y/i7o3fNEuGY91k6vIpk0Tyhbm699dZOiVhggQVcVkxm/rBrmpYsRSJK6YxSSImPwIJTVqpQQpOonmXbIucRmAsbBrpuFlW0i4qExPokpYCX+9TP9hFQRaJ9zPWKFRE4+eSTnf/9gQceqFhTs6dXUSQIEkRZYsDfbLPNghdffLHWxoqpuCwtlJiLpZde2rmWMMOLRKmbzPgZtBFiOVAsCB4kpsI/T86v6zNJkfApnXvuueeYVTqFQkrwJwwU0nL/6Ec/KuXugBJKwiwG8LwiVE9/qfW85+YtJ1RR2DE8hzjXUhcVCe5PYn2UFpr3abdTThWJdnDWq9SEANkqyVrZVJKlmprpqimjSOShc9bVxrK0UBSA6GqeUDd33313l/eBYEOyQCbFrRA8N8888wTLL798YwtPxSkSRSmd3BMLhQmFFOUrT2CrPJ8ylFDiGMjDgdulaUmjinZVkQATifVRWmjTb0j++lWRyI9V50oWmel0rvElGsQiRSgRWWs8lKi6kVOKKhJ56Zx1NVZMxUVpoSggrHGBO4AlyYW6CSMkL3UTJWOHHXZwNEuW446bFVe5T1+RgNIp1ypK6aQNWIewghFEKRRSsbJktfGmm25y72weSmgZqmfW9bOOJ1FFu6xIcE9KC816su0eV0WiXbwrXw3THrQ5lsZmUG3SBFq5sTVWQMfNzBDWwqBIXkWiDJ2zLgzEVJyXFsqsHFonLguom/POO29A7EZZ6ia5F6gDv3dZN0scFqJIoOjMMcccAcyROmIzpk+fHlJISdkdpZDGtUUooWnxLVWpnnHXLbIPqigpxYllQWHvuiLBvSkttMgTbrasKhLN4ltr7cziSBtMhLn/Nwhm/ipAEHCI4jRp0qQq1bR+bpYiAZ0TF8Css84arLbaakG/qG1iKk6jhWIxYMVJBhj+SDhVF3WTWTEmfRRjFuaqyprgQeP7R+Gpg9IZ9+LgtjjiiCMci4ZrfO1rXwuefPLJuKJBFiW0Lqpn7MUL7MSdglLIc6B/ueOOOwqc3Z+iEuvTr99Of+66e1dVRaJ7zySxRZiU+YET5EbEPTx9vrMS47AKM93555/fzYAH7R7TFIm66Jx1YZJECwV/qIhzzjmne9dQeJqibuIWgd7K+/3www+XujWUkBNOOMExRVhrQ1bpLFVZjpNQAq677jrHgoBGyhLjcRTSNEpo3VTPHM1OLQJVlH4Fqi6Wna5L2Vifrt/XILVPFYkBeVrMXpn58AMXEzAzBsy2zI6GUWAALLnkki6wr45ZatsYxSkSTdA567ovnxZ65513OobFO97xDpd+nHcPE33TQjzCrrvu6tgqJI0qkqLap3SyGmhdq3/mvWdiRnA1Yj1jFdLDDjush0J6yimnjFkltCmqZ942J5Wjn8ECmIcqmlRHW/sl1kdpoW0hPvY6qkiMxaSTe5ih8eP+2Mc+1tM+Ot5hFMzB+LVXXHHFWnIn9AMjX5Hw6ZxQCuumc9ZxfyhuX/jCF1yCJoIKiYO4++67Y2medVwvrQ7SWWOJQpFMWxuDOqB0MoCT9EoonRIjkXaNpo5BIb3gggscKwUKKfRdoZCut956ISW0Dapn2XuUGIk8VNGy16jzPIn1UVponajmr0sVifxY9bUkHSOKBL7pYRdmGAT/sdDS66+/PrC3iyJB+mUC/pihMih20e+MkupTN1m7hABIBhGheZZZzbPqg+OarCVCLg1893GUyCRKZz8VCf++oZBiYSFQeKGFFnKpuUmkdvzxx7u4kLaonn6b8myLIiFloYqyJspnPvOZIA8DRc5r81NifZQW2ibq/7qWKhLtY17qigQVoUgwuxl2YZ0C6IV0DIMsW265pTNzw24g02HdFMcq2GDxiVI3idZHxFRMXASDR1lGRpX2+efiZmEQRrGEIotkUTq7okjIffgUUiwnDNR8Eo/QRYkqErSRoFgUTtpddlXRpu9VaaFNIxxfvyoS8bh0bi/8dxSJbbfdtnNtq7NBBx98sIv76GoHm+dehc5J8B3JmYokMcpTf5UyrLq5//77h9TNyZMnxyoKxx57rHNxYAFrMgNl3nvBfUFQHYPYhhtu6NqfRunsmiLh3ydB0rK+BxaJc889t5bVQv1rVN2OUySkzihVVPZ35VNpoe0/CVUk2se81BWh3qFIbLPNNqXOH4STmLWTtvfHP/7xIDR3TBujdE6eFQuL9VuwMNC5fu5zn3MD2JprrhlcddVViRYSWc3zwgsvdBko02ihbd7bc8895/JNMAjPPffcwX333Zd4+a4qEkL13GCDDZySSYAgTBWCGsE5iUKaeKMNHUhTJLikTxUllubVV19tqCXlqhVaqASml6tFz8qLgCoSeZHqc7kDDzzQKRKYy4dRmKXBXydB0SBKHJ3TD7bsxz3hkjjyyCNdvAPuFXzHWCTSRFbzZHEnJIkWmlZH3cdg7BBTwBoduPZmzJjh8jZgnZg4cWJsMG5XFQnyZBAvw6qoQgmFLgpjhoW0hEJ69dVX15JPo+yzyFIkpF4UH2JqYKqAeZdEaaHtPQ1VJNrDutKVDjroIKdIEJU8bEJEOywBZsCDJj6dEzeBn72wX4oEMQVbbbVVAHWTGe8555zjkiJlYSureUKd9MWnhfr729iG0on5n+BPrCq+3H///S5B28ILL+zYJf6xLioScVTPKCU0i0Lq32OT23kVCdpAqv4pU6Z0jioqsT5KC23yTflX3apINI9xLVeAk45rg1nLMAkzXhIHkURokCQPnbNNRQLqJoMSMRm4h8gUmUWb9PGGIRG3mqeUOemkk1wGzrZMxXGUTmmL/wnVkpgPrBO4BjgP6ZoikUb19Cmhcm+4DlCsWdhMKKS33357oZVEpa4yn0UUCakflg8TnbRVRaVsW59CC82bAr6tdg3bdVSRGJAnyhoTKBJ0LMMizz77bDDXXHM58/Sg3BOzLzr4PHTONhQJXBGwXOi8USJ4T1Aqigh++zw0z7322svlMWk6W2QSpTPtnrBcsKgWa0VAse2aIpG2qqesEor7Jk6gkPKMhUJK+u+mA3jLKBLSdp8qCoui3yK00K7E+vQbjyaur4pEE6g2UCeR3SgSiyyySAO1t18lzAY6/R133LG1WVbVu4R6yEqXZBPNQ+dsSpGAuokys+yyyzr3BUmkhLpZ5h7xJUO3zaJ5iqm46GqhedvkUzqLZrXkGsziiSUi78Q666zjFKu8126yHIGtxHekMZHyrBKKFQyrk6xCinKCu6QJqaJI0B6fKsoig77Lr4n2ZtUptNAzzjgjq6geL4GAKhIlQOvHKZg1USSIJRj05cPpZPB7r7/++n0NKMv7HFF6SCyF+ZwESXlng3UrEgRKElwoq24mUTfz3hfliG7HtcSsN48wmC211FIuYVidtFAUo7pW6cRKQwZYnhe/m34Ks2HWrMgzgKHQsShfnkEXqwtxMChNrEJaN4W0qiIhmHeJKqq0UHkq9X+qIlE/po3USBAWigR/M2fObOQabVSKT3v11Vd3LhrxZ7dx3TLX8OmctLnoCoN1KBJYAQh29KmbRPSzv6oIzbMoU0ZMxax4WVWgdLLQFWt5nHnmmbUpySgmZJBkoN1jjz0CFKC2RaieG220Ua5LZ60SGlcJbhGYOUIhhZlTB4W0LkWCNmMpQumFldVvqqjSQuPeour7VJGojmErNdApsSwyigRm0EEU7gH6HrOuvLP6ft1nHJ2zaFuqKBJlqJtF2heleRY5l7JVaaFRSmfdcRcSI4HyR1pnXDc80zbFp3rmvS7txeqI8lhE+G1FFU5cKkUWPfOvV6ciIfV2hSrK7xKLVd3vnNznKH6qIjFATx3/PIoEHdQgCm4BaHxdtqhA5yRZED5tZlF5zMxJz6KMIiEma6FuYrJmplqnJNE8i16jLC1UKJ0M7lFKZ9E2JJUXRYLjKC1HHHGEmxHvsssuhYNRk66Rtj+O6plW3j8WpYT6x/Jsk2cDF5isQsp7XDTdfBOKBG3vAlVUYn2UFprnbcpXRhWJfDh1ohQmWhQJVo8cNKEzw7f/+OOPd7LpeeicRRueV5F44403eqibxGMUoW4WaVcWzbNIXZQtQgvl2rJKJwyQJt0NviIh98S7R4Aq64fg1mlKhOoZzcdR5HpxlNAi51NWKKQrrLCCo5BKUG6eGKumFAm5B58qCtOoDled1J3nU2mheVDKX0YVifxY9b3kWWed5RSJBRdcsO9tKdKA008/3dET77333iKntVK2CJ2zaIOyFAncC6wMKdRNaH1FqZtF2oT5Ow/Ns0idlM1DCy1D6SzaDr98nCLBcQaso48+2rkP8Nc3sbpsGtXTb2PaNgG+LJqWRAlNOzfuGC4Tn0LK4J3mXmxakZA29pMqKrE+SguVp1H+UxWJ8ti1fiZrUGCRIEFNWd9n243GT0vA24033tj2pTOvV5TOmVlhpECcIuFTN2EVEDPSFrMgL80zchuZX8VUHEcLhdK5/fbbu4G7DKUz8+IJBZIUCSn+1FNPBczUyQdy3XXXye7Kn3monnkvkocSmrcuKYcVKEohlRVVpQyfbSkSXAsWF9ZWfg9tU0WVFsoTqC5DqUjccsstwZVXXlkdnY7VQH5+FAn+8OV3XaZPn+4GkPPOO69TTfXpnHvuuWfqzKxKw31FgueFWV+om2QqzcrbUOXa0XNxQRSheUbPz/rOABWlhdZJ6cy6fvR4liJBeSw0soYHyk7VhaeKUD2j7U36XoQSmlRH0n5JpY6iT1ZTUqkLk6pNRULah8Vy8cUXd/llquRFkfryfiotNC9SyeUaVySYgZF0CAoU1L80wW81bdq0tCKZx8i/L4Pt1KlTM8tTAM2/KAUuV8UNFEJr5/5Yn6LLgtl+1llnDY477rjONLMqnbPojWDyh9oYXYypbX9wWZpn0fsVUzExHk1QOou0J48iIfWRn2OVVVZxrgQW0CojKCWrrbaa6+fKnJ90jlBCd99996QilfdDIT3qqKOCj3/84269DCik9DEPP/xw5bqLVuBTRSdMmFBZuct7/ZNPPrnVFPB52zUo5RpXJFhDQQb2iy66KBUXgpMom5YBLrUCe/D8888Pr5fH90UAFtdEA8fc2XUhaQ/tJZdAV4XcACzznAf/tu4BRXHRRRd1fHtWGm1SsDTAEoCuy2wPHLJW3WyqPVVpnkXaBTti3333de8nSZL6Sa8rokhwj8TKkGOAZ7bFFlsEuGSKSBmqZ976y1JC89Yv5VCGmJ2Ts4Q+BldVFQqp1Fvm06eKXnLJJWWqKHxOnlifwpWOyAmNKxIslsJLCZ0ODTNNeHEpW2W2jTmVOvgbP3582uXcMcx5Up6OpOtCWmnaCy2wi8LsZqGFFgq222672pILVblPXAobbrhhLXTOrHbgymGZd6ibvMtrrrlm5jufVWeV40LzrCNxVFY7fEonK9WiQOFi7JcUVSSknSjBWBZIZpVX4axC9ZTrZn0yY6ZNbbnD6GMIRoVCyqSgDIU0656yjrdNFZVYH6WFZj2ZsccbVyTWWGMNN/BhOiQPQpqQSpYI9izBl8bsJ04wTYpiwIJQWUIEt5TPUnSy6mrj+Lhx41x76Vi6JvjJmYliyu93MChtIXCLAQ267IsvvtgIXFA3eRay6qZP3fRjJBq5eEqlddM8ky7FdbAk4nLzKZ1FaKFJdVfZX1aR4JoMYKylwiJZTISIqUmSOqieSXVH99dBCY3WmfRdYiRwNWBJXnHFFV2QN3gQvwBGbQnKE9dlbGiaKqq00HJPtXFFgpefgZokP0suuWRiK3lhKYdpMU0kBgLTcZwQQCSKAT8G6k0TFvmR8quuumpa0U4cI0sf7e3astvgzAwcnj6da7+EDg6rVJ7VOau0kWhvoW6SqTOOutkvRaIpmmcUr5tvvtn51VlECkZRVPppKq6iSMh9vPDCCy7WgwBZ6osTFEfWjcnqZ+LOLbpPKKFt/PZFkfDbiIuFWA2CdrE6fvvb324sUNm/rmy3RRWVWJ82LHlyb4P+2bgiscMOO7iBb+ONN3YmwyTA8KcyQJIeNk3oJPE5UzYuGOiXv/ylOybKQdZMlJdFyjIgdF2grNFegqO6IjwTTPrEIMAs6Zc0Tecky+UFF1zglCWhbqa54fqlSDRF85TnmpfSiamYiUQcLVTqauqzDkVC2saCWwQO4yLzXQt1Uj3lWlmfTVBC464Zp0hIOax9WGywjtJf4wKJo5BK+To/faro/vvvXynzbFq7lBaahs7YY40rEjLj5zNNRAHAv5wlzDoZSOPMa9CXRDHgE99tmtDZS3kWvum6YDWhvdAHuyLMPMkWyAyuH9I0nTNK3Tz88MNzBRL2Q5FomuZZlNLJoIMlEtM0CmdbUqciQZtJ604QIouLoUwK1ZNka21Lk5RQuZc0RULK8IkFeOutt3YuRCik3/ve91qxSPpU0VtvvdVvUm3bSgvND2XjioRkY4SnnSZE6TJAvv3tb08rlusYAUKiHKTNGKmMQVDKYg6vS5i9PvbYY7X/qFiFkvYefPDBdTW1Uj0kGaJzffTRRyvVU+Zk4jAw8zJbLLM6Z9o1mU2TqGidddZx7yR0RuJvilA321YkmqR5+qt08puOU+KT8BRTcZWU0Ul1J+2vW5GQ6zBQzjbbbC4fyNprry27W/1sgxKaV5GQG8dK5VNIYe9UYd9JvWmfuJMIAmVVUeLbquYBibtWv2N94trUxX2NKxIM5Ax8K620Uur9+zTM1II5Dgr7g+tmraLHQlJ1KxJ0YgRqUS/+RDLJ1SV0XtRLIGG/hQEFNs7dd9/delOgcy6yyCK10zmFuomFBd84rq+y1M02FYmmaJ4ENZMLhOdM0GpZSmfV1UKLvmBNKRK0Y9KkSW7w4rcN66sf0jQltKgiIRhgdWImj0uLDLwE25McsMnga6GKwmppgiraz1gfwbXrn40rEpi7GfjmmWeeVCyYvcuAnlowx8FtttkmrIsOJUl46VnIRq7L4BEnzEJJ8YzGjSkzLavkI4884iLYqZOZutRdNtFNtD3rr7++q7PN2V20DXwn8AlGRJaiFndulX1gz3oRdazO6bdjuqVukj8A1xoBo+fZbJzM/KpIW4pEUzRPn9LJ4FBVyq4WWua6TSkSPtUTFwfKJlarrFisMveQdU6TlNCyioTf5hkzZgTEMQiF9NBDD21s5V8sZPTNWItgjXHtuoT+n35XaaHJiDauSPAQCEzjxUxbkllcGwy8ZSOgWYCHRE2SUIW68OnGCT5PfHoy0PPJGvVRYZU6KI1+ObYJvOJYVJi1cRwFBcGfyXdmz0XMwdF65bsoPnvvvbfsav0TvyhBVm3Oxnw6JwN+HR031E1MlwSJQi3beeedA4Ks6pI2FAmheZI5tq4YhCRKZx24kKsFV1TTrrAmFIk4qicWmk022cRZHs8888xafuNFcG6KElqHIiH3QX9+8cUX91BIiWuooz+Ua8inTxWFVVLEFSl1xH0qLTQOlbf2Na5IcCmoQgymaZkj8cFShr8yKyDiHyYPhdQhn3GmLl5sAsCkjP95+eWXh+jwosOfluMoGnIv7MPKQn4MqK0oFQx2zNI5Jh0lgxWzZ/bVsfrltttu6+qCetgPweKC1k/+jTaEZ1A3nRNlYZdddnHKA0wdBrcy71zW/TetSKA4YJ1B0a2LcptF6cy65zzH2zAVN6FIpFE96WfIOosp//nnn88DQy1lmqKE1qlI+DcaRyFtIrahCaqoxPooLdR/ov/abkWRwPTHQMpSwknCQ6IMf0X9sJixZLCWOuQzLlsls1A5Hv1k4SERXkY5TiyFaND4e1lcRo7xSSfCgMc2yYl8obNnfxZzxT8naZsBkLqygleTzq+yH5wJSMXK0ob4dM7TTjut0uwCaxjp03FbYCHDcpQViFv1HptWJOqkefqUTnK0NOnTZpbYNC20bkUiD9WTrK5YDMmFw/sq/UXV9yjr/CYooU0pEnIvTLrAyKeQPvDAA3K4ls8mqKJtx/rUAkQLlbSiSJDEhMEPPnaS0JFRhj8eVpwykWS69QMmieLF8kGgD3VxLCrMQjlGtK/QKfmOuZ50sCIs8cx+/KCyKp4cg0fNMf4I8iEhD9fmO4uU+YIyw36sG1VFFtQR10nV+vKez/NZeOGFA+JPmu4g66RzElNBPAnWqo9+9KNBXupmXlzSyjWpSNRJ88TXjyI83qaUh4bdhjRNC61TkWCSQx+Ql+pJcOGcc87p+pZnn322DTgD3jX6tTT3cZGGNK1I+G256667XL+CNbcJCmndVFGlhfpP71/brSgSLJ/MQEoO/iThB0AZ/pjtR5kOpGVl4Mc0FhUGf87zmSHMnNnHOve+cL5cBzeBJMxiH7EVr732WlicFNvs9xUDotjxvRGUJ/XwSfvF7XDssceGdbABq4EyzFSSlKGeE1K+gCF1MaNrS/APEmgEY6TJmWpddE5mvFiThLpJu4tSN+vAtilFoi6aJ4OcrNJZlNJZBz5iKm4icLguRYLfK9RiYlCKCInZttpqK+c+YyJR9Xefde26KaFtKhJyb0xWWPxMViHF4lYXhRR3Nrl36qKKKi1Untq/PhtXJLAuyIBLVkbM/5iYMWth6meQJrXyggsuGJZDK436fGVNDPIW+OK7RCR1LD9aiVVgluULVhFpD4GZZGWT7767AJ+57CcK+LLLLnNUwPnnnz/cL4GPlOOFX3nlld0xzKC+0KlIXVWDBGGOUBcLC7UhDO4MxCgSKBRNSR10TuJUeD9g3zDDrkLdrOM+m1Ak6qB51kXprAMjMRUTqFin1KVI0O8wKSmbsRWFlokOk5ymrT11UkL7oUjI86f/hiUHUwLLMopcXRRSnypKAGgVaSPWp0r72jy3cUUCMzVR2jKQpn3KLD/uAbOWAediWvdFZvscu/32290hgp3kOgwovuy5557hMdomrgLK+7kZYHVIHdFPkmbBJUfZ4QfHcYKtRBm67777/Es6V4Dc2z333NNzrOgXwWH55Zcvemrh8rgwyFqHS4PZQhPi0zmZMZQxzU6bNq2HuomiWpW6Wce91q1IoCihJFVZnt2ndNJZd0GaoIXWoUgI1bPqKqZYOVkNlzguJjtNWifqooT2U5Hw30nisuiXhUJ6yCGHVKaQ0q/VQRXF8qm00H89rbfbQbBRse4BY4Pm3DVstL+xaajNvPPOa+yga2zMgLHuAHP22WcbO1N3+yhog5bGtIl6EDvw9ByzATXhd8uicNvWJxbusz9iYxWL8LtVHtw29fFnX9DwGG0SsT5R2Qw/bUdgrLnS2M7YWBOcsa4KY2cr7jjXtHEdblv2yYn2R2m4d8TObGR3qU9raXHn2VllqfOLnGSVLGOpnsZStXpwKlJHUllr3TAHHHCAsQs+GXC1cS3Gxpi47aRz/P3WYmRsp2lsYKuxVFxjlVX3ntmALWOz3Bkb7+IXH/htG6NjbNCusYu2GTsYFb4fzrcuRmOtgsZazoxNAOfqK1xRAydYt4GxSa+MpfUam0+mgSsUrxK86JsszdpYF1nxCrwz6Evs5MjYZcmNXb3S9Xt2ZuyVqG/TKq/GJuRzvwHbxddXcZ9qsm4Oc8wxxxibK8W993bSYKxV2NiU665fKnOP9MfW5W14Bpb2bZZYYgn3XKyCV+gurbXEWJafoS+21mxjFZRC5w9VYV/7a3KbQLcomyF6Pcz1Ftxg4sSJ0UNhnAF8f1+jx43AOfzJrJm8/rKPT9LaikDVZB9uFkSYFuyLRg0vsMACrixlsHLEcZLxnXKuWF2wPMTFEUiAZzT2Q9qV99MqXe56Prsk77lFyuFCgeYJ3bNOYTZAcB/mYii4d9xxR6HqMYX71E18lU1QNws1KqFwXRYJ3vcqNE+f0snquV0VrIVQrOMCrYu2uapFAqonv7GyOW2S2gsdnHTOBHbbATK2T0k6N+9+LK0Ee4qrN+95frmuWCT8Nsk2Lhxi38gsihWY+6xCIa1KFZVYn1GmhTbu2pCHT+Ab7IY02W233dwgGXVfcA7mQQZs/vxVP/1lw/kBEYPAYE5QDbENlCegDGEQo3NnHzkg8PkTuMZ3XsqoOVySSeFOSJLzbAZEzpe/pAGeZEeUAQM7K0mqLnO/rF1CHElTguKFGRZs65SydE7cHbgrSH0OdZOEVLgzui51KRLUgyLurzyZ595RrDGpM2g1TenM056sMnXSQqsoEnmonln3knUc5c5aZl3skeScyTqnyPGqlNAuKxKCQ5RCioJWVlGGKgrDj/6FbJxRlp5cM+lTYn3SmIlJ5w7D/tYUCRZxIXCGwTxJhFLJgBEnn/rUp9xgzKxF6uFloqNkkCY6Wtai4KUg8ZBk1SSQEosID1yooZwn28stt9yYS2KFgGlBEiqyZiIEqvmC8sGqoaJIJAWNEayFxsospOhL6l9vypQp7lrkQ2hCxF+Nll6XoODttNNO7lkw6/SZMWnXIH4CzIS6SSBlHbPVtGvWeawORQILFkpuUctQPyiddWAntFACmX3LY9G6yyoSRameRdvll2fwYoLBpOfII48c07f4Zcts8/6VpYQOgiLhY0KsHBNQoZBiuY0G7Pvlk7arUEVHmRbamiIhM2k6iiQRaiY/rLjBFjM45nYom74QjCMDOZ+kPJaBHzYAgy7WCSJ2kalTpzpeOGV58TADUm9cx8XLQUfOcWipcZYAaHQwUOocfP3787cJpqLdPtXVP15lmx8jlgieVR1Shs6JogaOKIQEtWLJ4nucW6mONjZZR1VFogzNUyidKF90pqJwN3mfddctpuIqtNAyigS//zJUz6r3T7poJiP0Lb61tWq9QgmNUuDz1DtoioTcUx0UUp8qCquwiNtkVGmhrSkSmJwYAPERpglsBMr5cQ1++bjBns6SAZYEUjZgL5fPnAELOhaKDYwLrglbBMZF9MXBmoBCQdKpuOv77Wt6W+if5LyoUzCvssgYJvA6pCidE0YCyaKEuskg0lYynzruN66OKopEUZon77Os0onrZ5AsN3HYiak4ycIXd46/r4wiUZXq6V+/6DZuVgZ8Jjb0YXFxVkXrpHxZSuigKhKCEf00irhPIbXBroVwZeLJEgi4o+OYhHKt6Oco0kJbUyR4sAwuWcIgDjWn7QA6TO64QcgFwaDWVRHrC8lu6hJWaCVmpI6FwIrSOUlTTbpq4lpwL3WFulkHtmUViaI0T2iKuP2Io+gKpbMO/MTNVoZ+WVSRqIvqWfW+if0hVw2ByChTdQizZAbDIjE2g65I+LjNsBRSyxBzlmdyehShkDJJLUoVHUVaaGuKhP9gdbs8ApJuvIy5Mu6qWFtwBW255ZaVrC1YdlBymFFlrc6JVYp4Fq5LDAosjDpX3Yy7z37sIy6Ieysi+HUxcedZzZOyxJCgAKMEprkNi7ShS2V5T8qsFlpEkQBHVuftStQ97eF58lsik20dzJGiq4QOkyIh7zM4Yn3GLUxs3MYbbxygpOZx/6GEEbcDazDPqqJYmAi8h0HYbyu23H+Tn6pINIluA3Xz8uOGIXlTVaHDIn6EzKJlOyt+hHnpnCRDIriMHyNBYF2mblbFlvNZ86VIRD4dDsvT51nNc1AonXXgWIYWWkSR4J1sgupZ9d5Zg4JAb5vnIIDxVEWKUkKHUZHw8eN3SUB+UQop8Vq4X20+l8zJTx2xPn6bu7ytikSXn05M22C0oEhUDYjEB0sAKoNW2ZlsHjon1E0osrLqJtaK6dOnx9yZ7oJuDCUwzQTtUzqJ9K/Ll95l9H1aaN7Mp3kViTaonlWw5X7JvovVCYtflKJepO4ilNBhVyQENywHMOFwJcHiI7gyi0LqU0XJeRRHDJD6JdZn2GmhqkjIEx+QT7RhFAk6hbKCFYH8Asx2WPq4qPh0TgKL4uicBLIOMnWzKCZVy+eheQ4qpbMqNpyPsktnj3k5jyk6jyIhVE8Gkq4LtERcgVDYoyn4i7Q9LyV0VBQJHztYayy8iEuJmCMma1htkyQvVXQUaKGqSCS9JR3cj+lb1uyoQhNjrQaCjp577rlCd5lF54Q5wCqbPnXzuuuuG0jqZiFgKhbOonkOA6WzIkTudAZ+MqKymnCWZCkS/JageuJKGhTBGsG9Y52A1ZTXOuPfX15K6CgqEoITVj8YPAS9QvtH+bIp5eVwz2deqmjZWJ+ei3X4iyoSHX440aZhCcAawR8vex7BLExwo+RhICEWwWvQC4uIT+dkJT5fotRNOrtBp27699fkdhrNE8WMJenJ7YFLiOc/6iKm4ixaaJYi0U+qZ9VnSCp/ctqwmB6z6KKShxI6yoqE4ImyiZLPsgoEZ7KEg11bI9admIcqmocWyrMlQJtVq6H4s43FbIZlnnRZVJHo8tOJtI1gRZQIEnZlmXcZdFi5U7J+ktyJlVD5JF9D1vly6TQ6J9RNcncIdRPTexUfrlxz0D/BgCycmEdxRREsR2dkF3pzAZhyf2k0z2GldMq9V/nMooUyAKAokAGX30zU9dYVqmcVDP7+97+7FYgxwxNbk+anj7tOFiWUfobf9yjE4MThE90HRd6nkB588MFjViGlTyUWAisG8WdkRvYlixZK7iTJtCwTRvmk3yYRYxlXtN+GprZVkWgK2QbqlQXK8JWmCbMUWSRMXsToJ8GP0RfdrxOfNDnno3TOKHVz1113LWzd8K8zbNuY39dYY43QchTFnQ4BlgCKXhzNE5+sUDoxqRIMpjIWAda/iaOFkjSOhZyiuPN7OPTQQ10ga5eonmPvrNgeFKVx48YFLDA4vUAQM4NeHCUUl+mqq64a4odlgqybBCGSgXPURSik5BsSCukPf/jDnomZTxVlQTGxBoNdHC30mWeeCexK2CHm0XfX/25XQw0zNHfpWagi0aWnkdGW448/3r1sdABxwksueSb8ly9p2y6hHthlm3uqooOJo3Myi2NFRMzsmFXJJNp20rCehnbwC4Mb+CTh7e9nEGQA8IO5hNLJ/qzI8Q7efutNghbKIEcWT2bo/D6YDfo4R7ex0KFoUH5YhN89SZZQ+sEkr/KJMsvyAORF4HdPjgW75HkqfvQ9UQvPsOBY9D6iFFLePz8rMvFhWCRhxvl5cnxaKK4MMgr77ymUVBKI+fuwQst3lAn/OkXb3UR5VSSaQLWhOukkeJniMlBigmSpaXnZ5JPZBcFZzIRlH9Hvsk2nKgpBlM5Jh3TuueeGq26StKrIrKchGDpZLc9EMJVPXBuyFL3sQ3mTbTJ5EgdBvAvR4gxyo0LprOMhMtNjYCMHBNYdwTXrk98DZvthE+JteOcYaG677bZctwf7CwXks5/9bG78iM3oqok9103XXIh+kuyXPoUUyxiSRBUl1odJBzl1ou8rfQDuOZ4NijLHWdCSJHVSlkUouySqSHTpaWS0RZZFj1vWHK65vGT+JzMOXkCCH9nmGEuts1KelCMISFbnZBstGWaHrLrJ+huDvnZDBrSVDmO+FCz9zyeeeMLVS9pq6TBY3M1X6qDhErtCIBeUWZViCPBeMxD6uLO9ySabuFkdqd/lmF8OzLucCr8YCm+VZkJBDBT3uttuu7mB7K2jY7dQYvmdC0byiWWTYD9cG+xjlgxdXI5j2vdN9mNrHs0999xzj5sUYEHwKaRRqigWIKi8gqc/4cCSIcL6OZQhAyeWJ3DnO88lak2Wc/rxqYpEP1AveU1mArxE0fUUyIAnLyQmMRaq4TszL9/MSVZMOg1eYjoc3zLBC3riiScGa621lhvoUFqUupn9oDBvgjN4M8Og82CbAFQ/UI1VTDlO2csuuyxU6ugQmM3wTFSKIcCsjays8u77n+QAwAVHEKLkXsF6gQtAyhVNX16sdf0tDTOD7Iusv4IPP07ADwqs4CGfKL0cQ3BpEguA4kXcFItYSblzzjknrlrdZxFAQYMhB4UUNybxTliMUPJQMnwcwRcLkii6vhsE6wRKnLhAoaGKckfAZ1dEFYmuPImMdvDDlhdNlkOXU0RL5Qd+9dVXu0h1XjZ+/L4QcEZaWAQ6p3SwnMfLjn9UqZs+YtnbsDGkYz3ttNMcXYzv5DvwhQBZlAtiS6B0ivJB2bxmaL8+3Q7cCsGCPUq25FhBWfbpnxyjs2ZdGUSCYSk/zP5+3GasFszARXyTuDDl3SEJmuBHAKoMUMTo+IL7k4EPAS9xz7FfJR0B+m1cFLideQfHW1onEzbWGBLscRnDMCI3CPtkoihWC/oVX7BeUo6VsrsijSoSr7/+euk1HLoCUFfagTuClwezuB8o9sgjj4QvpPzYafOkSZPcfiKCESKuMaXhm8NigVLiMzvoRPDRMzASbFk2bba72Ij8A1vpfLHuiFWBhXoYpCQgiiBKnhsuJiwWzBJh4Ehn0qWZxaA8Oszq4j8GayxDWHb4jaAQiyJBFkj2YaoXwfzMPv4uuugi2T20n8xiYWkxcSAvAgJFWRQC+gImJzAzwITYHRH6AfoFP28HyZUEP/oflXwIQCGlX/YDWlEuSOCHckCcChYLcV3jBsX1GRX2gz/PsyvSmCIhgX/ctEp1BO6880738jAI+cLiXfKjJuraF1wT+JDxBWOdIK8EL+4ss8zizOxQNyXICq0YpgD5/OmgMcMTR8EgqL5QH9W3tslVINj7a5+g6BFXQidLhDYdNRYKBjyf0knnzvnEp6gUQwCLmmDPACiy1VZbuf3EDKE4M1jifxYlT8rNNddcrhwU51EQfsP421EKyEdAvgPBT4K3wYiMt7yn4hLFekb2T3F1gBWBlnKuujeKvz2i8AqG9A3SRxDbI1gToxKXfRhFg3NxeXRFGlMkGPC4WUxmKtURuPDCCx2esDB8kQBMsI4z09I5oBxgSmf2jJKASZNoYkTOR5EQ4RwUF3zI0OnoXOiY8ZeqvIWAxKKAfVzWSToELBBYI0hKFaV0MhPhXBQ8lWII4KIDO/6mT5/eczKzOGZ9KMxgP3PmzJ7jfBEfta+EjCk0hDtYkZacBT6dEGuOCJMO3Jy4RLDcMAGJukQoK4HbKMwqxRAgkF3e3alTpzrKLgoe7yp/ZLFNE/KhcH6XXEuNKRLiO4aaNezCgEHaaCh8LCpUhVpGwidmCAxABOuIYPLi5YnOXiWSOsnMhSLHeQRexbWLYCCOo92iDWPq9V0nmECvuOIKZ5ZHa+Z6Bx10UFBlrQ+5p0H/5IcMdjAD4kSYGl/84hd7Ai+lrARmkoBKpRgCYkmjA/aDWqmF2TdKBM/mPLvybJxIAiCSg42a0F/xewcfJgq+MInAYsExrA1JiwNKfBUZXFWKIQB1E3z5k5V+sQChlEnsFP1ykhA0zLlZCkfS+U3sb0yRYMDjZkm2McwCZU86NXk5GHBffvnlwrc9Y8aMMO+A/FAlEE9ePpLH+CIzg2iAlJTBBMwsJE4IPpM2k/6VQEsGRWYhuKSiXHFiXkjjykwa8ydBbJiG4UzTAY2aiK+THAZxAo6CLzNfn26IRQgMOQ6LQ6UYAvLew8zwhfeQdxJcUeSWWWYZt9aMX4ZtoYX6ynq0zLB+Z3Ig7yW+eZFp06Y5CzLHeDcJ1owTaIhi0cBSqlIMgQkTJoT4k10YF7QEUMpzSeoTiLtifKEcfXFXpDFFQmZb3DAv7jAKJsEoB5uOjXtOWi0uCQdmCWRA4weMBQANlVmVzJiwKFCvKBZSD64K9uMHLiooJZxLPIS4Oug8CAQk4Ir95JUgSCgqvNDMWIiFYVaIn2+PPfZwfOfoDDF67rB8Fz87bouooEiCLdHYDFoManS+0A8xFZ999tnuODMQCcqM1qHfkxGQGbUfGIgljRgJyW7J7xNGU1SZYD/Phj/4/aMmUBPl/omDIs02NFoGKN5RFGBieZJ+x7iS5HxdnK/42yPBkmBIwLUoBrieea9ZkydJsAbLedJnJ5Vtc38jigSKg5houOmsZEZwnidPnuwirYkqvuOOOxIxoNPFykGmryRJmx3TiZArgY6dTp4fjNDCpD7MTfitmXHjmiEoMbrKHvEI8847b/iDYnbKuvNImZz0kgsCHETIPUAnKLNXBvbo4jzCA0cBkQApOT/tkzqJfeD5JPHpmaFgfeBZgkGcQsE1uC7KD64dOnGUK8z5PEtmL8MqPBv5UUdnb5LHgPcUdxCLm/GOQAMFH0mB2yXz5CA9J7EoSAwWv0fiHmAiMSjia6Yf4N2MKhOShZTfLwr8qAk5CXhv+cPySd8heU5wazAxoG/0EyP5GAm7I2oN8svo9lgEiNUhQFveXXkGBAXTx26++eYuK6nvWvZrYewSS1DXSAyNKBJo+QISn2la6+233x6CI+egoSWBSQwBzAM0Od9ULIDjZ2LAjaMl8SAIJJLryCeBob4yIT4oOS6fWFkYMOmgGDRlP5Hh1F1FLr74YlcfLAkRBnhmvdAxuRb0waj4CXYol1ek/WAFtTRNcF0QQczLTrY8mAhJguKAXxXXFgMnSh9KBS6W6GCbVMeg7JcBiWcTTfoDBRReOPQ5ZhkoVcRC8N6KAsJ5mNZHcTCr+oxFgaYvIF6Hzni85ejPsO5B3mmwFeqzr0wQMCydcdrMr2r7unw+gcGCEZ+sBAom0DoxsaNErLTSSi7fSfQ+sLSieIBv2mQuet6ofufdw/0jif4YQyQ+BwzBkkkF/QNjE3mA4oQ+mtTnnENsFvV2SRpRJIj4ZUbATfOXZOZnQJaANQZzv4OVIJQ4sMSfJGZ/KUNKYrkmVo6oSKQ2Az+DIx2QaNdkEBORHxmdPmwG6E90UswmmXHj45L8AZT1M5FJHUU/cVnQduhWIrAtuI7kexCLhxznk/gH+WHjXkiyGsg5DFr+AAh9NK/AOsBCwYyFQdFXvuLqwDSKAoEigUKByRTLBkGfwzB4YqWS9w3LlWSfQ2GiU0BJRvbdd1/HjmEby4ScQ2Ik3sVPfvKTYxQRyqokI0CQn+CIooaJHiUWiiOuJvoVlHMROt4VVlghTFVOfxO17knZYf1EqWWiRb8mFjEwpP84//zzHbuFfhtLJb9Tn8kFJuCF+5VzCAYcZmtjlXeAvo0+jnECrFHMWOqd8QqFjbHEX6IA9zSTRD8PkH/9a6+91k0owZ1+hQyZXZNGFAleNvHpc/NJN+5bLnBn4BKgPH/MLJKE5CiU4Qfg0+5YYErOjw6otEGO4Z8WQeFgvyT+IKBQyhGjECcoDlIGM/XEiRMDFryqIvxICSDjBy51SZ51rsUAniQM6tIeBiYi1eMsOlA6yYYmZXmpwZD2F4ljweVBPXTgKGBvvvlmUtPC/XQ6KEJYQsAVpYcBVha3CQsO2AZpxwVPgi7xN0+3PmQ6EOlon376aadY+2XpsElOQ+fOJ5jQkZBASSUbAWJQxLeMpQyqIh04AxxuJeJ1MNOLEDjsv/uSPVCOD/MnCj25C0RpZWBiBizvLQMZll4mLrgrwPD66693/ZG4iXGFMqvmHKxAuGJVehFgIovLAZcZv2cmqWANXZP+ACsP4xx/TKokoF6eA/0Hih6WZeLPeB4E0ctxrNNd7S9rVyR4wYg/YIARAGRg7IU9CMjoRxkAQnAPyDlxiTjkfPyh0olgjhPxrynn83Axe2JNoG4eqD/wweNlP9xeRDJISjtQLKLCj4uBXcrIJy9Ckl8xWkfcdyikYl3gZWTmT93UmxaQRweKIiTt4JMXmZwT+N1wSzBwy3E6AkzvKER0qHQkzIqTFL64trKPHwm48oNAeaEdeQT8L7/8ckc3RZmh4+IHWNU9lOfadZehg42ydnifuSesPbg38NmLBYtngDKFUkfHDhsHhQOFGLcRgyJxE9E06HW3e9DrmzJlihvQ5J2mPyDwF+UWpZzfIYo5v2esfMKwQYEjrgLrJ4PnMAv9FK5YArGZFTOBkt8oFh36AcGP95U+gz4UKyvvNe8iVkgS3XE+ZXmPu8QW6Pfzo18mhTXJ5Xi3+K3jykBxxW2JBZuJNYoZwjOgz4POj+USJcPvG+R5+J8cJ2YvzUrfbxxqVyQw97KeAH8CRtIsS2ZoBPogvOTCgkiivwhguBuon05cxI+GlbgMWAfSDj4xJ4sQBEpAJfvp2BECYvzySfkSeAnIuUDeCMz2/jlcs2w2SBQxBhJ8adK2a665Rpqc+ol5UvxofntkmxedJEpRVwxmXxL80BkzOy5inQAHfKUMirQZa0URgcGAJQnFjI4NDZyApKhFqUidbZcFLxRROgjBOu6TDgGFSwRll0ENf78k/eG95Z1CoeSZxMUByfmj+MngCL2TCQGzauIc/AER3FEmUI6jzwCTPaso8r5HAzCHDUt+h0xAUKD4PYmFEvwws9PPUkbcxIIV2OFKpX/FjI4y4R9jsjPqguKPospkDHyw4oAxVjL6AsY+LMvsZ6KK0E/uueeeTlnzJ5vERDDx5p3mWTDh4zsBmeOtCwSFT8ayLuNeuyIhN0sAj7yASWYw/MqUAWARWU41LrBQyvBJhyz1S1AVuRCi+8i5L/v4ZKDF7EnyJYmF8H2BdOh+eXz8WcJLQoAhs3o5t44kQ1hyqI9lqvMKCgwdBBovPjksFWSlBC8UDTrQJOE5YWGAZRANHkw6R/Yzg8EUx2DKsyuzJDazcn6EmKAZdDEFou1DVxsEof2SOAylivcbBQnXETEwKIa+BY17YkbDfeLX94NecZHQkfCOCmV0EDBoso0MhtA7UQjAR4Rl78FKfnvRT+IheC68oyLDqkwIlZP3hrwwoqBy3/QN+O3BT4LRmbxBAxdLaBQ7vjOwETMx6kot/THxZbglUBTYFms77iMsNSgAxOfgmhDrD79xJguMbb7VFYWEssOQy6QxRULygfMiJs1SRWkgOBPxrQHMnpOCNCmLe0NefsxxiG+R8JMw0XmLm8D/oTBYsZiP+LJdJfYfsx0pR06FvCKdE+fSftwqVURy2qP41CFYIrhnXyOO1ktnjUkevHCLFO08SLCCYoamHketjV4v6TuzdZ4rWj3PGSYNJkNiCrosQvuMayOWGywQzAp9YRYD1sxGotYiZtAys+Q9lpmlf/4obPv0zhkx8VO4hbC2EYeD24MVFmEOoRQnifxeh8HNwWSKSQO/FYKbo79b3htm0EykZOIluOCzZwJAX8dvnz4Rxhh/9GNlkutJ3YP+KZRN3ONYbMEQl67k2EA5Y7KKawh3NMsPMLEUQXHgGIpE1D2Ny43nMQy/6cYUCUl2xKAq0esCrnwCMMdlwSNmtHzHvMZnllUC3z/l6CzonCfbHAx8548BzRdJ2c0qjfilMRklDfS+ZUF8W35dadvMKsXUyiyoinBP+C2JNq9LMGsymGW5LzCnsQ4H5k065ujgl9Ue3Fm0Gx8h5mc/LiXr3Ohx3EuY/vDTouBg+sf3W6XO6DXq+k5HQ1xEnAgVNC7tMPhixeJ5+xRg6uEYAVgo3syuYSPIbCfuOsO2j9+y0DvjYpaIdWDWHJ2wyMSEzyQZdGUCKxhByyjuxIjExdbAJiJQEpdFnNw9yM0AAEAASURBVFLA7ykulwzvHfFPWW7mJGwHdT/vhE/ZJP6BSQDKrAjYoFDwXhKLQ2B8VCFgwsbvGcXMVy6og0kifWuRiapcu4ufjSkSxx9/fDioE1AS1cYAg9kmgz4BKJjk0PiIN2BWJsFRmOOThBdcFAcYH0S8yvfo9UTJwByVJT4LArOpL7xAaR0TL5PEefxfe2cCdEtR3fFBE5dEEzQqAlFQkoIE2bFYoj4MgqwBjWBYHwoaliCgRUSUTcAAJSBaGHyCTwTCjogsxfrCLipbIEaN+AwmqKhJiBKtJNZN/xrP0F+/7pnuWe6de+85Vd93587S0/OfudOnzzn/c1yXjdtGzjIxHbwkuqKqYd4FW5e5UtUfAq0w46FU1CUWC7XDDwXFhRcSFQf9H1TomNg6sIfpg6UD8yw/UgIXmYX6VqVYG32u59p4OcQUZ87tUkFDfcG1w+8gdH+YBaGgS/R9rvspdL6hryPvA8GrQu8M9Vcon6FtTArcEtihfaZRmXCpnLB9YtH8KF64CmHRhejavMuwYsRiwXhfuq7fEH6zsA7F3KdsEi/mWrblOrES4rrkPY8FR2jfsp1PYiaw8vDOCwmKW4zuGdp/6Ot6UyTw+8igjoUh9BAT4co+BNjhd2IZXz7CAM4AxuweHzP+JxQSV3hxY43gOGa/ck5usC9o6uyH8lInJFzi5cWPzw+ahMpHv1x/trTHLJ9ASc7jXotsb/Ip7pom2TJj5wMnBvfUQR0FAkWCAcyfLcfO4a7nPPygUCbwCaKctJ1Ryw8f3y3PDgoopmx+5P49c/vS5/Iyj/YZOhfPD890VQwJMxlm2KTDDQmDCM8FitQsU0ZREHEzYqlEiQwJzwGWzZiygHWI3B11Mi3KBAozFkJRJpkVx4TfLe9W2FtufIi7P9gSXxITBleeM3+2Hdt/2taHKJtcc+h5g0jAOAMeWEjd+BO5bqykxPEwRkgAv2yTT+JTmBzef//9smrqP3tTJDBny4DKIBQSBiWJdMd3j3bnCn4+NGIGdEzGvv+YfQmG5FjOJRRHzE0hefe73233IyiTFzpsCPoWCuaLDXSSd4KgRMyKCPvSllBM6QsKSxezZGa3tMcsvCvBukFQUExbDp2HHxazYWbL0HZj+ISOlXUoWliqGPh5wREBHvrByv6pn8zUeQ7gbWMR4CVLXAkDe5N+pp7X34+XC0ykOsGXX2cZg3bHdQg9NNQmz9+sUkYZLHnW6p5RBlKUyJjFDqsNE4sU5XLIygS/E9x5KE0+lTP0bCw3cSRMsnDpxlyA/B75LcayKdIukwAsmLOUdwNrdYiyGXuGsPZgGcatyu82NF6AFdYdqJ64z8E/JrTlJ1OM7Tst68eiSBD8ExO4sQyWfkxDbP/QevxXvHREccGXHBJ+UMxa0QZRPmAwEGiUIzxsaJucCyWIAVHcMHJ+fsBd0RdRRtCACcrpUpjBoXjFfjyxc+FawLKANQk/XxNhdkT8CC942AoEK3U14DNzQqljVsBslmtECSNhURdKS9X18izUDXwcz+CGla4ucDREDw2dn3gWZt2YqKedMso9QiETemfoet11BLFhsYwJv3l+pyhmKTJEZYIZsgTcYk2ssw4wy+Y3Su4BCQoMXTvuM2Ju6pQsmB5MwqZZeI+idDIh5f3PRE8om7Hrwt1D/Aj7M/CH4kvkWN6LWLFpP+TqkP1Q2nifN3ETSxtD/OxNkWBGIQNrlSLRFShYL3ihcE6iZ6sETbzqZlcdyzYGPrGCyDXKJ/7EkBunrs2q7ZJvI5T2u+q4qm3MNHBv8GPKFTRyaI1YNfxiZjltMZBiuUIxw5pDPom6l2RO+yhJJL7iZcBsgpcm8S9+3EtOm7F9ecnwDKQokAyWYO9TQUNtM3sK0UND+7qUUaxG05ZwiXsfoneGrpV1jz76qHUT1U1CUHqJn0qVoSgTVVTO2LVwDL8nAvzqlHPoySgmdYKLCctFqiu0rr1xbq+ibMb6QVyEMGCIzal7vnhvoaziiqyarKDMzArd08euN0WCOAPJ04AfbhxCHAUvc6Jo+xb82JixYCVgbkRrjyXeatsXLC5cF5TaLoVgVawpdTPj0Dl5SRGzgiUoJ89FqC2UOlwezKLQ6mHUdK2McY2wHUi0Q5+5ZzyXsSCzUD+r1jG7S4m/kTagiaFMVL14ZF8U3xg9VPZxP4mnkRnstFBG6+id7vXJMm4d8sHUCYMlcQI5Mklloo7KGbsOrKtYusgfUSfsi3LtB6WHjkPBo92qIOLQcZNah4uBCVKMshnrF+4IYq6w7DF5i7H65HgsOcTgEM+UkqhL6J78nmdNelMkAIpgEnK855rPm4IMw4MBNxRs2bTNIRxHbAjXxcy6S0EZgBLWxCoh/cBMzwyIH55Lj5LtOZ+YYRnsUdBQQolsDsXF5LQZ2pcgKYJ6oQ/z0sC9gmUkxZoQao91VbTP0DEoNrycQ1TQ0P4oHDF6aGx/KGzTQBmto3eGri9G+QztyzOEeTpXYR63MkHMC/Rs+orCG6Jyhq6PdWT55DeT+luOUT5j7eMmwW02VGEyUkfZjPUda7ZQaLG0prxzeP7IyEy8SkppgVmje/pY9qpI+Cfr+zspqxlweUHPkqD54jMm+K5rYeDGgtNGS8b6RLwJroM2rg732pgxid+fSGnubZduDzkXbhqsA5JNExYEcQ45ShEm3zrap5zP/ayjgrr7ynIVPVT2cT9RzkjOJFH+TVg3bntdL6fQO0PnxIKFApgiKGFYuqoSscXaGYcygYKDFY7fOJaTGJUz1kdcrZjWmbSlSB3lM9QGM24o13XuktCxfa2jL8SPYA0GOwb1GGUz1AesnuyPAsb7K9WijIJHllqOSY0TmzW6p4/nTCkS+MNRJPhRzZpITnw/K13b62QQJJCTKOY2grJDKmfcBgRS1gVwpZ6L2QIuFIImGQzxQ6K49CEELdJ34jWYFZIQjWcqFvUufYAdwossl6UjVFA+c6SOHhpqi8FqaJTRFHpn6FoYQKoon6FjYPTgCmkifSkTPC+pVM5Yv1EeeN+hTKRKHeUz1A5WZQbcriYKoXOkrsuhbIbaxCKJ4saEc7PNNsty2WBBxJ2NYpD6e59FuqeP60wpEmShRJHgL8X37IMx5O/QjriuJrOquutCiVjDFDnqIpiKQZVgV2b4uQNkVT+ZWRPTwSwAdwTWitQZRFW7sW3MlKlRwiyMFw5sn1jNGFgGdVlYY+dJoYKGjk2hh4aOw3xOIB6K0iSrjKbSO0PXUEf5DB2DQlgXhB06TtZ1qUzwbqI/QuUktqvJTB+rDIM7bo1UwfJYR/mMtcUzXsWQiR3XxXpiOYgV86ts5rjN2Zd4LlzfBJpW0V5DfRb6e26s2izSPX18ZkqRIBmRKBJ1s0gfiKF/lyJoBOx0LbxcGDCJG+hC8B+S/4AgJH78XSt1BEhCR8P6gSk4Nc6gybVhWSF4kShuXtpQe6kN41LBUmmfofOnUkFDx6bSQ0PHupRRcm641xPav6t1PAs59M7Qeeson6FjeCZRQFP82aHjWdeFMpFL5Yz1BasCCm4ufR2lJYXyGTovAcXEVI1LmPHnUjZDfcMliuKKewtrI27SnHcS78d99tnHBqbnBpxCRZ9FuqeP80wpEpgvRZGIJQ3xAZiW76Sa5trwq/ch+NEZJLtySdBH+kwgJhr58ooELU2vB7cHUdO8UJlh9J00B5Mo8RPMishOSSExqF/cl6aBmrzQYG+gKDaRHHpoqP1xUkZz6Z2h/qZSPkPHooBg0m4jTZUJLFzQUFFGmdWHsiKm9AvLBRYlflfcu1xJpXyG2iXnD7R3lNA+pQllM9QfLKwE4KM44b4ld07u+41r5vcOIyv3ulGEeKemBsCGrmFa1s2UIkG+ClEk6ri/03KDpJ+Y1bk2ePZ9CBYcNPaq2iZNzkswEm4ItHJmBTkzgdTzMdskPoNzkHMh5oJIbS9lPyrT4vrA6sJMl6ysTWf1OVTQUN+YMeXQQ0NtuJRRTLddB7Y2oXeG+plK+Qwdi7JMpc+2kqNMENNEPRieEdxjKL9NBfce7Alo0nXUxNA5ciifoeNZt+mmm3ZOQ6fdppRNjvUFZQvXEYM4sVVQoFPjGdy2UGjIlUMxtFiKcXd/f3mW6Z7+tc6UIkEgnigSBLjMkjD74Np4qPsSfIBdWyWkr8Q3MIuiCiEvjT4EpQWLDcFnWAu6TOAV6y+0V2ikMEuwUkAD9atQxo6V9blUUDnO/URBy6GHusfKMm24lFFMwE1899KefDahd8qx7icKI4pbLr7SBoM6M2pmmW2lTploQ+UM9Q1Fn3TXJDRa3tC6h0JPkGAbIRgZy0oX0oayGTs/VkkKtREH0qbqMGw2sR41+Q1gEZ+l6p4xvGX9TCkSQv9kwCUl8iyJ1PhgIO5LCEbCKoG5vg/h5crAyw+sa8uH21/cDLi5CChkBptK0XLbSFn2aZ8or5yPwY6X2ZIlS2oZH3IeFCAUkraSSw8Nna9LymhTemeoXzmUz9DxrMPHj6+/CwkpE22pnKF+MRsmFohYnKaplZtQPkN9YZaOop4T5Oi2w6DchrLptuUu0ybWEt4tZHXlPjQR+ieUUIoLNhUSW81Sdc86HGZKkZAKnygSuUFIdUBNertYJGIF0LrqH2Z2fIqYy/uS888/31KomL33GcsCZvyYeblgZuzaXL8sQvukdDOlrWHCkDmUF1OdSZtqoFg0umC6NKGHhu41AyVWPlxGTaqMNqV3hvrCCz6X8hlqh0BPkj11JaJMUFgQRUfydXTFriLXAW3DguK5aipNKJ+hc3EfeKZz85HgiuF3AHOG5wlFn8G/rasTNybPJso7Frmc/C/+9aGwYfXBdYQC3FTmge7pYzNTigQXR0AVgTVNg5l8gIbyHf42ClJTmmHqdTAbJRti27TXdeejDDv3CgtIDn2trt3QdpLpMAhxXQxuXUkd7ZPALihmxG1gHSHyu4o10JQKGrqepvTQUFtYdIQySixGSsZFoXemJkkKnddd14Ty6R4vy1gqMVl3xepiIEQxZpYOiwiLEINtF0LMDRYUrJBtagMxKWhK+QxdB8/AEUccEdq0YF0XlM0FDTpfGOgZ9MGdjJtYO9sIbi+wJq9EW9fXPNA9faxnTpHwL3BWvkuODAK3+hZMesw6+lbGeAmjsMjLoKuXewgfrBEnnXSSnbkwYPPiaCuYmlMHSgqFUdCNoDt8zFCVfWlDBfXb4nsbemiovRTKKPe0Lb0zdG5ezik1JELHuusY5InV4ffUVlwqJ2yQLbfc0gZzEsvRVng+mRBhtWtrSWtD+QxdB+wHSmWHpCvKZqht1j3yyCM2/wm/o8UmoyUTkrZy880329wSWEnaYj0vdE8fc1UkfEQG+h1/OxaJgw8+uPceMhhsuOGGtqhV7yczJ8AUSEwBMwLofX0KvmISMaG8YGptOtNjtsj9yKV9sj/xEGTCBGOUNkkEBu5tqKAh3NrSQ0Nt4jIi0yoze1wfMnDyEs6p3hlqO7QOhgxun66YWAxAlIVuKjEqp7g5YIYIJk3Owe+BvC70M5euGDofz1lKlc/QsaF1KJQErbqxR11RNkPnYx2KFXigQPD77WIiQLu4crEkdZGfZ57onmDniioSLhoDXmY2zcBFmuNxyDLj/2ew7eoHW9dnzK+Yz/F1Qt3qW5hNwg0nHiQ3wx19y6326V8PvlxKW1PnhFgKXmhYZNpSQf3z8L0LemioXZcySpIuXDgog8sbsgpC52BdG8pnqE3uNy41FLcc4bdQR+Vsq0xQZ4PMixTvyu1f6Fq6oHyG2uWZJdlckyqbofZi61D8cV2gQODKwCLRhTDoo0yS7jo33iN2/nmie/oYqCLhIzLQ74ceeqhVJAjiG5dgiufHO04huyYKDHkZ+hbiQcCT4C8YEzlKE9UTSYbVVhjkiScgfoNAPSLO6U/X2ToZlNrSQ0PXSrvQhokB4b6RsKurGAHOx8we601Tymeoz1ihKKGdWhzLpXISo1QXI9JUmcDEzrXyDHQlUD7bWF/8fghlk/wKTGxI1oRC0SbI0T8H38Gc55VnCrcWFo+uBEsKSi/Wv29+85udNDtvdE8fNFUkfEQG+p1BnR8uLo5xCbMBLARdD2p1/ScgjuAwEviI2b/umDbbKQIm7g4SW9XFavi0zzbnlmMxYVN4icyDDMr4x+uYHnJszmcX9FD3fELvxKXhshauv/56d7fGy11QPkMnJx8LsRxVAoWQvAkM7rlVOXOVCXzrKDe5dRyq+t8V5RPFEAseMQRgQZVNmC9Y87oWmCkoUrx3qKtz++23d3oKSoTTb9hvbdxPfqfmje7pX78qEj4iA/0OxQlFYhxmfxcCgsgomdskM5zbTu4yMwWYFvzgm3LCc8+JqZ5ZCuetYnfg9uGF2hcmEg+DQsELKsdSknLNXdFDQ/ROBtA2lFG3/wxgXVA+3TZlmQBE7nVIuK8UsmtL5UxVJsipgp++6/wtbSmfWF5ilE2UXN5HXQQ7cg/4jZNAClcDdNc+0t1fdtllVkEhRqmL2BN5duaR7inXLp+qSAgSA/8k4yQ/3FC0f59dx/TO7HicLhW5HsybJJnZaKONGifikbZSPxlE8PczI2LWFQrwq6N9pp6raj+YJZilmTkTaIjF5P777686JGtbW3poHb0T8zHFwFCGUimj/gWg8Ky88sqNkx/57bnfMUU/5znPGRHIKYKbhgysKC/Mus8777zWbpo6ZYL0zZjvqUvTpfC7xaqX224OZXOdddYZ4YpsI1j/wAAmzbrrrtvLRIn7etxxx1mLT9v+hq4V1wtFBOdZVJGYkrvPDBhFAhrhuIXgNApjNc2q16a/+GQZVFFm6nzTbc7jHwu7Ytddd7XMBMzbvJhFcmifckzuJwFgYM5MjQAzqqkScLbNNtuM8KV3IU3oobyUc+idRPijSNB3gmlz6pF0RfmMYYWVD6URoaoj7AZoz10nL4spEwTb8rvGEta15FA+UZ6bVNmEQUZulCZCfBI0UmItSPuNVabL2BrpE9jzO4YFc88998jqzj7nle7pA6iKhI/IAL8zmKBE8EcGxEkIyaOIWZiEEJNAwBgv+a59pnXXg68f1w6KDC/bprTPuvP42xmwfSooyg1Bt1hLsNK41FH/+NTvOfTQNvTOGGU01s+uKZ+h8xCPwKwahUXqKvSVO8VVJogDoOAb1pY+BjeuNYXy2ZayibWDLJA5gkuBUgb8nohVwLLVVxwU1kSUflwlxEF1LShg81Ldsw47VSTqEBrAdnzkoki43O1xdo1aH8wqCVaalDCDE2bAOPvACwMePmwKKKPMoMYhMSooEfLErkAdxQRPUq82AyDWFqwGVEqM3V8GP2bwbemdLmWUgdy19LiYdk35dNtmmd8UdV/4XeE26iOw1T8nygRsAVwOxF889NBD/i6dfEfZJnATJdEXAjC7omzyHOIeSrEUohhj2Vx77bXtc8sz2zb5k39t7ndor7hLqJZaFzztHpezjLsXhSj2DOe0Ne37qiIxBXeQmYMoEgxqkxIsEl0UlmrTf/zmDOhwyzGPjlOwRlArgJcnAVtdU978a8EShXsjxoDgBUZgJsoNmGCtwJXQRHjRx+ihXVXvlH5xLmalUF6ZlVJx1DVrC+UTpkDXQtwNOBG7AZWTGeu44n/47XJOlGHO2yVrwMXJp3wKZZOMqjy7XVI2me2j8FYJbjrYSOTHQAGmP30KLhMwZuLRlxBjQ2Ao6fdVRiNVJKbgKSB1MooE5tdJChHa/EAnXRCN7JdYBUhJzAxrXCK0T4LDeBnzYmS5T4WGxEQpyhvPCAwXAjOZaTe9Rz49VOide+yxR+csFXDDKoFlhcymojD1QflEKQtROcmBwWDYtzB4Et+CKwVGEtTGthkwQ30WyieWJZ+yCQOjq7wJcm6YITxvIeEZpNgYSi7nbmM1C7Xvr+P3yQQD5buLFOh+++73ead7uliwrIqEj8gAvxNJjiJBwNCkhWI9vBwmLZjaqUNA3ERXlRbrrokXo9A+mVVfeOGFdkZNLANBV31IblVQYgtwC6B0EkfBzD/XBy30UEz+XC+DBdfbl2Dyl0RcDLC4WJhVdiFYAUiYhCsBK4A/wDDwku65qSUnpY9YHrbYYovRxhtvXFa7dWMmurRMMMBh5em6ymbsOgn8ZWbu0imJ+yCmCvcKljsqmPYtnIO07Vi5+k6zr3TPFe+mKhIrYjK4NQxYKBK5gU19XAg/2HFo/Kl9x6zKC4uZe99unxDtE/8r6cspVY6Vguj/rgXWCub4HOE+0S9SQRNHwcyfwStVjjzySPvMcU194yp9Iv4HqwrPOrNcSk83FRSfVCong3yXtSjcPuNKocAV8SWUqXalK2VCKJtQpcEOhQl3Ud8uBK4F9xq/P+jEVLblvkn+k3HEndAH4reg7BI027e7kfMp3RMUFooqEgvxGOQ3EqnwgiBIawhy7LHH2pdjn7PUnOvkBYZVgBnft7/97ZxDs/blBR2r9snLnOqUWAJ40fBi7UpcKmhumwS0MbsHH1wxJIuqmiFyT4XeKUmbmF32bZaW6wK7Aw44oDFllHZyqZwE/uFm6Fpg2RDVv/3220cD/poqEyh3PmWTtO1Yc1zrQNfXFGqP0tsoSwRj77XXXsHcK6HjulgHBhIzlWt5a3J+pXuGUVNFIozLoNbyYkSRIFBqCBHCDCq4FJjxDUV4IcNp56XCbKxrSaV9MgsjXwKzMvjrbWbVcg0M7lBQzzrrLFmV/UkwIy9BBkzoo5ic/fiSEL0zhx6a3SnvAJ/yCWUUJQblzK0y6h1WfiWeA0WE/VGGUpWf5abIGO6NrrI00iGYDLgXSB1eF0OTo0xUUTZTKJ8lWB0sEIQLLZv3EpOcFPZGB6ctmyAHCDFbXbnByoYjCyhvSvcMg6OKRBiXQa3FPMqLDmWiL1987gVDIYPKNe7ZT10/USJQJhYvXtypaZdqn1AfUwV6IdQzZmlkvfMH7dR2ZL8YFVS253zi12bARdmhb8RhVNE7UV7r6KE554/tiwIWCtyDMoq1CeX1jDPOWEGZBmuCQQXrJiZ14knaKGruNZGBFOohsSouG8Xdx1+uUiZ4duoom1WUT/9cbb+D71/91V/Z54dAYCYUYJ+quLU9/9NPPz2i9hBxL+PMK6N0z/idU0Uijs2gtixatMgqEsxMh2CVwP+K/73r+gBdgM7ACN2Mgb+rwKum1T6Jnsfvjx8Zl1BTTnsdFbQJbrhfoCMyoyTuhcEahSIkWEVi9NDQ/rnr6iifnN+njD7xxBMllRMFpA0jgRTKb3nLW3K7vcL+DGzEyzSpDOsqE1jAUIpTKZs+5XOFjnWwApcYlh6eZYqYucm0iN/CBdu3oFSh9OFKwXU0LlG6ZzXSqkhU4zOYrTAGxCoBW2Ec/sC6i4cqSCBfn4ll6voQ246yxQwX1gFVNdsIWDM4tAmkpEYKFpw11ljDJuZp0p9UKmhO27gDMEvTL6ij+PPvuOOOaBM+PTS6Y+aGVMonbgICI7mv/B6gjaaWA6/qEjhQOAuFralQJRe3CsWnmgjWi2uvvdbSYVHucI2kUDYZXLEIECvUh2BpOP74462lD8ZWKL8HcS377bdfH6cv26QqMJMXlPpxBJKWJzYLSvd00VhxWRWJFTEZ7BpeKrg3+CMKHBoSAXFVL/4+LwafIZndYAQMVcjhz8udGWKqmdm/Fpf26W/L+c4giHkU1wtWilBBsKr2cqmgVW2xjQqLLr2T2hsoX/idycAYKx8v9FDiFroQ7ktKlU+eN6FykoQL8zZY8ltwZ8dN+oTFg0DFpgmGLr74YosbKZ9zhdgCfttC2dxzzz2tggQLI4UaetRRR1kLQe556/ZnsOZ5JUiX+AsCG2OCyxV6Ojj2IRRQ47k85phjejtHrN9K94wh8+x6VSSexWIqlqABijIhn/zAmprM21405lf8wW1mcm37UHc8Pmte0sy2fQpe3bFsJ48CLoCuBB8zpmiCHmEM5MSZcA25VNBQv6uqd+IygIGCuwMXET5wv49tq4e6fUIxqaryyeDkUjlxp4lS6FYZBdM2wa3MqomtyRXJpEjtk1QRyib0WqwPuFX4LclM23VzVCkTWN74/eVW+azqJxZGYnJIFEYCLSx6dQoCv39ibrqsUEsfee7IXYPC2+U1Vl2/v414onmv7ulj4n9XRcJHZAq+n3/++dYcLYoEZml5sY67+5wX8zI+5iELlUsxy9LX3Oj8Ktpnm2tmAMW3TGZFZj0p0oYKSvsMCELvxIxeJcRLkNIY1wfR6gScYhUQaVI9VI51P3lRo7iEhMBQqcrJ7DjmRiOhFAm0MPET5EiMQa6QrIoAvpzfEi4ZLF5Yd+oE7HzKJkGUsb6mKBM5VT7r+ocLj5k/SjeWRtr2FciqNmDYkLukK+H5Ixso77e+6pLU9VXopSjXKnEEVJGIYzPoLfzImDUwWx437coH5pprrrEmZtglQxZmbww2mGChFqZIKu0zpa3QPlhIDjzwQOufZ9Cui31BEWhKBQ3RO0N98tcxS8Z9xQBD2WfKbMssuS091Kd8yrmFyonVJofK6VJGjz766LKf0m7VJ2wAAglT3SS4FLDaLFu2rKrZURVls/JAs7FOmUDJQhlpIyhOuGZIO8/9JQ6mjrIaOh9KFW6mLgTLEsor7RHoOAlB8aMPTWNeJtHnSZ1TFYlJIT9j5+UHT577oYvMyPGtS22Hqj7n0j6r2qraRiAnMy+YE2TqqxJe9CSYqjM3u22geHKP2lTv5MWKWwGrDvgR/EmcBwpaU3qoT/kUKidmcnIUNKFyct11lFEXG3eZLKLEK1QJAy/KH5YaFJ6QpFA2Q8eF1sWUiS4on1hh1l13XeseIYi1jYsUpRCLUBP3oXvdxOYQ3EyAYxOFxm2rzbLSPdPRU0UiHSvdswKB++67z/pI21DwKprvfBPWHKL0Md9WCRHi0B7HIfiZMcsT88IsM2ZWZj9mwimKEP1msMfXvchQiFEouhCKhGF2humBEsEsPpce6lI+sWZJboK2VE65PhQt0stLlVFcgnVuC+IdwComWIwIhmTmzsDpCpabHMqme2zdckiZaEP5RNHCpUadDNySXcU4gQsuu6aCVYPfZVc5PZr2Q+meecipIpGHl+5dgQBR9GRznBbB/4l/m0jwkHRB+wy1W7eOQZrYCWpAxFJ+p1JBmTFDmeujeifXgfUE2h8vf6qxEpSGNQFLTp0waECJhVpIMB25CbqgcvrnZVZLlVaCB5l9x9goHEfwJsGPvpLANiwvO+20k3UBCOMGxcSvsolLpQ+F2lUmHnnkkUaUT6wYFEYDb+qpdKVYgg9CdtmDDz74mS8Z/8F27733tknHQvTSjKY62RWFvis3TScdGngjqkgM/AZNU/cIeGNAufPOO6em2wxcRL3vu+++K5hRu6J9NgGDFzx1C4gRwHriuzFSqKA+vbNJP1KPIRiNAZTskwzYKBNVlhwGDlwDuEgIZiXOpm9hIHarjMZiIbDcnHjiiQu6w4yd9bh1uFafsgnbgwHQv08LGungiygTxPmguKUKcRowfrB2HXLIIaO+4plwfUHNzRHcV7BXOK7PKqypfRK6Z2ocVWq7s7yfKhKzfHcncG2HH364fSn0/ULt8tLwyxNURRlit3pg17TPJn2G8gaTAGaDzzapooJW0Tub9CP1GAIWcQ8QuAerCFzdOAKeCwL7UDZIKEURtDp3Q+q5U/fD6kA8D8oOriufMopZnSBGEQJKyelA/AqBpjHKpuzf9ycZJolFAGMJeo2dE4sRLhCu9V3velfrVO2x88h6FAHua1VhONmXT1yiuEN23nnnztwrbvtNlpXumY+aKhL5mOkRFQgwEJPAhsFimoTBghknjAhm+whpeGPVPsd5bQx8ZDMlAG3JkiXlqUNUUAbqVHpn2VBPC+RVwOLAwMLsGWsAeSmwRDAIonROUmKUUZg6uDd4DnBhwFZBmWPwZtZcRdkcx/VA0cT1RdIwirCFlAlcYrgK6DM1X1CWxyUoBldeeWXt6Uh5DksGhX3cymSsc0r3jCFTvV4ViWp8dGsDBEiyBA89xvlv0ORYDsGXzqwNRYgESMyol5vKkEMRAgcZhJkxMcChNKD4wOJAmtI7+7w+FDSYIsyIwRPFgsRPDNQSZ9Dn+VPaJokSmBIvI5RR6jmg9NBP3HVYMHAPDEGE8iluDleZwGqFfx8FgiRqXdWaybluFBeqy8YEpQHlAbzbpq+PnaPJeqV7NkHtmWNUkWiOnR4ZQYAfJJHy0KemUeg3bASCFIcmWCdgSRAsd/rpp9v8DlBBsQS1pXd2fa3MgqUCKools3pyZfCJlYJt1E8YiqCoMZtGeaB/KD5YqYjnGIr4lE9RJlAuoKQSA0GWTNedNO6+Y8VzXUPu+aGGQrHFojLJPrp9kmWlewoS+Z+qSORjpkckIEAlQKhlqb7ShCbHugumeGaik+ayxy6a2gaY3GEhMHiwzKDXdRR+7PxV60NUTqwnBF+iANHfs88+e0SAIqZtZv7EVUh66Kq2u97mUzaZ3TPQiSIBo2QoZneu3ad8okCSFRTlB2tPFSOla+xi7cF4oT9+WXHcLVBryTBLptkhidI9290NVSTa4adHVyDAYExugGkToX2SYwLXAXQ5LAFDE2ajMDuYOWMmnrQbBmYDOQmqqJzQg+mv0ENxfRDAiMUCxROTuMSo9IU3ikGMskliMAZkslaipIFrHWW0r3767bpVPsEaZglxMwSCEpPAc+q6Ofzjx/kdq5Obgp28FbgMUR6H6PJUume7p0MViXb46dEVCECtxDfeB6e+4rStN7m0T2b4VOpkxj80OpjQO5mlijLBDBrmxDgFVxYUVQaPKionAzhVPjHBQ2t1q4eyjevZbrvt7GyWZFckNool5WpyfXWUTQLtsJDgMkIuvfRSe030E+WCgTpGGW3Sn9xjUG4IsKR/xMpARXULWYmbYwjKBGwYgn4RWDBY98gbMkRRumf7u6KKRHsMtYUKBN75zndaalfFLoPb5NM+GcxI3sPslEjzIYhP74QKSrIkTMf4nymfzuDcpwiVE+Xg1a9+tU2fXXVOqfKJO6GqeihsCtwgzGBpl1oHTestYPGg9HgdZZOslwx2MCJEmDnTBxScOsqoHNPXJ7EFWHqokgqllgyaIayHokyQAAyFhgRlWJpgGA1VCLQlyFqlOQKqSDTHTo9MQABzOz7x2267LWHvYewSo31CZ0SZQKkIvcTH0fsYvZMXNWZuLChYB0iyxXWkptHO7TumagLqmBkz00wxV2+99dYLqnyiMBAoStVI359Of6j7wMBO/gaeIeiMKZkvsZBgXYAyi0WsjrIJ64X2L7/88hVgIEsjs2sR+kwGV1gRmMNjlTtl/7afKLFS7ZcAYGJL6gq7DUGZWLZsmbWSQfMdskVS6Z5tn9BnjldFohsctZUKBDBxMhgwCA5dpNpnLN4A9wZuDiwAocGvz+uroneCrUsFZQaLSR4XAgN1V9RFIu2ZwdEulptUDAjAYyD0KZ9YDDDXE4fgJ9xysUSBIB4EqwHPEhkUfTZFkyqbxBlwLaQlDwn3G2XEj5FxKaMU+Qrlcgi1l7qO+0nAMinEYQ/BJvGzbVa1NUllAmxe9apXWeUMy8lQReme3d0ZVSS6w1JbiiDAYMMMecgvFel6SrVPWAkEkvKSH9dsC0tDHb0zVBWUdM7MnBkMoY027a9QOWmHPBC5VTn9Kp+CN58oBKnVQxnQTz75ZDtQYQ0hvwOKKi4dlAysELhQ6qpGMlAfccQR1lVw9913u91ZYRlWCblRQiJVRnGBELvgKzehY+rWEaSINYl041zrjTfeaGM3chlQk1AmiCtBMQNb6m5w34cqWNII8u3ing31GsfVL1UkxoX0nJ8HczuzlDZliscBYWq1T2Yz4/L/MotnoKSoVRW9k0j+WFVQFAgGa0zyKALf//73k+BEaaI2AwoEjIsmiohb5TN2Ugb21OqhxFgQA0JgJ0Gm/DHwUhI7RXAXcO9I0/3QQw/VHkKwIBaTmNB33F5SZbRpfAruv80228zeQ6xJYu3hvtHfJjIuZQIMKH5HsCrXj4AJ8TNDFKF7YvVRaY+AKhLtMdQWEhDAr4s/nMC5oYrQPm+++ebkLhJUxkxYIv2TD0zcEVeCVO9MiUM49NBDrdsl1jztwYjghf+BD3xghGshJClUztBxoXXM5lMLOWFVAU+hh0p7xKRAzaS4GkGHBGFKlU0qYZLvg/gVFIqQ20PaQQGE5cLxqTRTLAEoUpjsqwQrCEqHVBl16Y9Vx2ERoc4L/Wcm71oeUPhQ/h588MGqJiq39a1M0D6l3ykk5sawYD0in0QT5bPygjrYiJUOFo5KNwioItENjtpKAgIENhEQ2DQCP+EUrXZxaZ85DWHeJjIdWmNdIFxOu0LvJBaBGV+KMDgSixArPy5tkEcBJgP3g2yTDAYIA20KlVPaqftEAWBWes4559TtWm7HNYF5nFl5HWWzPMgskJyJOhjEsEBFpbYHrh0RaLHbbrutdUmRkyFHSDdN6fYUAUtm50IZjblOHnjgActoQnHi2XH7KueB8oklqq30pUxgLYOGSi6LUOApLkDyhAxJKGSGYjg0OveQMMrtiyoSuYjp/q0QYBaAqXyI4tM+c/pIMCH+VnJOEOjYVnx6Z057VVVB/XbIkIm1gIGXZEFcA7P1pUuXdsJMcSmf/rlj37GSkK2RmThuC4I7ia9JzXyJMketlC222MIOGARpojgxqFFDo4kiC07E+aBopQozclgfKApulVGqjQrzAwvL8uXLg03iu+ecbq6I4I6JK7tWJmBmEKeyxx57RF2WKBHchyEJ7CGle3Z7R1SR6BZPba0GARL6MBuARjc0wSzeptonAwc+bmiRTVMAY3loW71TqKC4J1IExgLxK5ihCRrENdAVvZWXNi6UOmGA9imbKBNYM2L00Lo22Q6Tg0EchYT4Efz2qdYdt33cFihbTQZ1oYxiKcK9x2dK4CvUV+5Ll1aurpQJficoSASDVgkWMp6rpr+HqrabbFO6ZxPU6o9RRaIeI92jYwTwpzKLGZLU0T5T+4r5nFoNBN7llm6uonemnp/9GChdKmjsWJfKiQmdmfqZZ55pZ5kEMqb6+GPtxyif7v4hyib9Ekmlh8r+/ieUUrAgBgGFBkWJwZzaHrnR+sQvYO3JFZ4tLBNYWJjBk7MihTKKQoqrpmtpo0ygUOGGQSm75pprkrqG64OkYJMWlFWSeQ05TmvSGDU9vyoSTZHT4xojwADDSxUf8VCEuhqUu+5CmEHiJiDozh0Uq9pOoXdWHe9vC1FBZR8UHDKOYhkKUTlxzTDQEaeAK6pphc4Y5ZP4BAbIVMomA34qPVSukU+C/JjR40YQOijuEQIiceFwf4gPiQWcum2xjEsCa8L3vvc9f1PwO4oZVhUCW7GqSCCiSxklEDWk0Nxxxx2NKJ/BjgRWNlEmCAJdZArDkWSK33CqnHDCCfa41P372k/pnn0hOxqpItEfttpyBQL4KIknGIqk0j5T+4tVgFk+DIO67JKp9M7Uc7OfUEHd1MS5VE5yRaBoMHiSn6EugNPtn1A+YVogDOBkaMTVgambQE+yNBIgmSLgmUoPpT2UVFwR9D/kpoECevHFF9vkVihMFJfjPtQJuTwI4qwSrl2CLYkPCGV15XpwszAoo+z4lNE2lM+qvrnbcpQJAhRRvohXSb1nci4UMO55KJhU9un7E6WOgGile/aDtCoS/eCqrdYgwKx0KKmzsSDAXsihfdZcXrkZky6+5JhpF4tFDr2zbDhhQaigLpWTGSV1LnKEgQDWAhYM2kyZwTPTxsITo2zmnN/dN0YPdfdhNs+ggTUgRegjSi1WMiw1VdH8KB9YMkJUXJQlLC3Uw8AtkWL6D1FGu6B8plw3+6QoEwSawkAhSLppvAZJvXCbTUqU7tkv8qpI9Iuvtl6BADPMIUR0C+0zNDhUdD95E7EGKCrkOnCj/pvQO5NPanYkv8JKK61k4wKIeeB8beTOO++094tB+rTTTgsOprSP2Zt9GFAZgHDzwJpgFt6FuPRQvz2sP1gYctJJSxskp6KeBwoFM2+sOX6fGfhJVy1JlzgW14Tkj8BdA2PEP07OEftkQD/22GMtXtBXGXjHJTFlgmsARxT+JUuWtOoOzwtFvCYhSvfsH3VVJPrHWM8QQQBzY4rpP3J4Z6uhfe68886dtRdqiFk9QX68TJcbul8bemeofXcdA8Df/d3fWcYD/nncCSHzvntMzjIzVK5ljTXWsOfhfFgppMomyguDMUmlUimbOedn31D1UNIzM+jFrD+p5yBAk8BKAgqhxjKIunEMMBWwODA75xoZ+GGXwHbBZdJGODf3DPxwJ/HcjEN8ZYKg4d122826h7DwtBWsLLg3JpGcSumebe9e/fGqSNRjpHv0iABxBJOaqchltaV9Sjt1n7gY8H0z2PHXlhUROh91GRjkYAfgXiBtNNaQVCpoqM3QOmbmBK8x+4cJQRyFVNmkCFcK5TPUbs46aJUoNAQykmEUTLss806Kaq6RvBrkcyDugTgTFGDcPFgm+CPWQ4I5c/of2lconwy4uFlQKLBkhZI9hY5vs06UCX4PMC2wiqQGlqaclwGdIN5xCtYrrGKTjM8Y5/VO6lyqSEwKeT2vRYCZbA6VrGvYuqJ9pvRL6J1cr2Qz7Kr2iE/llDoNWAtSqKAp/Zd9XMomhaUYdFAk8EOTxZHllMBFaa/NJ88PlhGsIDBv+hCsDFg7CBBlYMdtw/2j/oZrqeji3D7lk7TcDMCkz0bp7rrKqN9nGCUoSSiHXSsvKHkElvJMjkOE7lmX62IcfZn1c6giMet3eAqujyh4Mg5OQrqkfVb136d34rdlIMKnXlfDoapdmBRVVE6OraKCVrXtbiM4Fv59jLJJPAYDHlYBZrJdulLcfvjLpNFmxkka6VVXXbU3SjFJuyhfjisOywtmepJcEUDYVWxNFeWTQGDOzwAfo4z62OR+57fA/cNqgFUJS2GXigsWDxQiYm3GIViTUDK7VvbG0fdpO4cqEtN2x2awvwyymN9Toty7vnwKOBH02acsNzERDMB+9U5ecIcddpid3TJI5wy+ZAqUqpz40qt8zyEqaMr15lI2GXQYiHCrbLLJJtnskJQ+yT7MaknyhEUECwnfc+ih0k7dJ4G4DKooEMTSSPVVZuvQIVmP2+PII48cPfbYY3XNVW6vo3xyjVWU0crGKzZiceE55FquvPJKu6e4ObpWJvi9pdYsqehy7Sale9ZC1OkOqkh0Cqc21hQBKjmOO1aCYDnM1H3QPgWHFHon5mR87eQoINiuSlAKiO7npZ9D5RQqaFXbbEOZaUrZZKbMbJ1BiBgJzP+Uv3arWdadP2U79436GWD26KOPLjgkhR664IDIl/vuu88W+EIxYuAj/bkvpFuGmcLgjjUGK8V2221n41Jygy5zKJ/EY3CdUmW0DRsHxegtb3mLnbn7JdX7UCYuvPBCq4D5WHb9nWRoWt2za1Tj7akiEcdGt4wRAQYbBkdMyOOSvmmfOfROkvxgWWBgYoDyBX8vgwez3yZUzrqqoDlVNv2+8R0FxK/yibsD5QirAeyGLnzjWHFg2JCCPGYBAD+CQHF75Aoup1133bXM+skAHxOUBawSpNtGwPjwww+37geYHMcdd9yo6ni3XdwJYJUjDPRCGWXQjFUZjbUJI4SU0ZyXGXxIulYmeM6JoeHZ6EuU7tkXsvF2VZGIY6NbxowACYQwI49L+qR9NqV3cpz4qRl4xZzNII2/18+AmIMVs2XXrOxSNplNMzPNqbLpnht2CEqQT/ek/0uXLrUKENU3eck3Fawx1MwgtqQuCj9ED606L0rAnnvuaYMp+UwtKocfHiuMqySh7JDFk+slOJOsqaHsltIf9kdBvPzyy2VV1ifWEtxcWIBSKaOS24QA2TrGSdfKBEoPeSX6EqxDWt2zL3TD7aoiEcZF104AAah1BGNVvXS77BY0NwbuLoUBpW31TszqBA6iVNFHoXK2DeojWROMEXJMMOAQnU/2SbIxps6cY1jx8q6ifKK07L///vac7JdLR+V4XF8wJ1JTNLv0UGGx+P2H3kgabQZ8LBG+q8Tf3/9Ou2B63XXX+Zvsd9wF0DexkKAAYb0gR4MrUD6xYDTNGiltcb1CGeWaYqwLSnujdHzqU5+SQ2s/u1QmSHLF89KHKN2zD1Tr21RFoh4j3WOMCDCz2nbbbXs/I3UkiLpfbgIhuxKhd77yla+sTLNcdz6CB5nNQmmkLdwObYU2CU7E8oALidoSqQXF6s6dUuVT2sD8DqsDRYnYghThXjHrJ18EA1qOoICgkDGIu/EnBKsSN8KASnrsqrTYdecjyJNMmFVCLAIxJLhCcPWgbMKEQXzKZ1U7KdtilFEsH8SWcH4yjeZKV8oEzyJWN1+hyu2Pv7/SPX1ExvddFYnxYa1nSkCAgZ3ZYRtKZMJpbM6Brqp9cj4GCnzNtNlUOYHKSaVKLAXMYqnSSTwAs1U/EC7lGkOUTWaq5JVwTfEpbVXtQ1lpanGkCrEFzIZxhRAwWuUvJw4Ctw7tN7XIMIBK9VCsXbi0sBDAoumCiohVg2f24YcfroWAayczKNfNMShHKDNdB6TSEZcySjItmDQoVLHYktrOmx26UCaIp8HKFrPipPQjtI/SPUOojGedKhLjwVnPkoEA9Q5Iz9undEn7RHEI0TtT+8/sGGsBCoRP5eSlK7RG4hDqpI6ySYlwTPFuVdC6Nqu2Q/nEwiFVPqv29bfh28eXzXVz/VgPXEHBwHLB89DW7I8LgrouWKHIhtl1UC+KSq5f/sEHH7RxL1iJcNlgoamLV3DxSVlGYaRUOgGOpN7Glccz1Ua6UCb+4i/+YkG8Tpv+cKzSPdsi2O54VSTa4adH94AAAwgvvpyy1Tnd6JL2mULvjPUth8qJbx1z8EknnbSCNYGBIYeymUoFjfXbXS+UT3dd7rK4crBQkOqawZQ4EUzwuLraWE8wnzNTZQYM24U4DSwAsEi6FCwb3J/U+A3OLZRP7t3xxx9vq8CiOBFDEGNR5PaZ4FkUCFwpUlgMq0Qbyih9aKtMEIC79tpr515OdH+le0ahGcsGVSTGArOeJBeBnXbayZr3c49L2b8r2mcOvdPtF75cXupC5UytuUG/yR2ANQXLQ1PKZh0V1O1r1TIKDDTMv/3bv63aLXkbQaCkUOaPwa8JfVNOBsYU7yLGBFcOs32Zibehh0r7oU8G6DPOOCO0KbjOp3zSZ9geuCC4fiwcTVxanIxrJUkWwcuUPhdBAYCWSjbQJpRRaYfPNsqExCh1UctD6Z7uXZnM8iAUCR5IzJqYOklgww+gzSxkMlDqWbtEQNIFhxIBtT1PF7TPJvROnmkGtDZUTgaW1Vdf3boTCMZsStn0qaBNMI1RPpu0JcdQ04LYAdwd22+/fXagKTEIVOGEKkuxLSwPIbdILj1U+lf1iXJIUGiK1FE+sXDgLgELYm9QBlLdHrhxwI7YmlgQqUsZha3StMpoG2UCC1EXSigMkP322y8Fdt2nJwQmqkhgtkTzxm/p/xEMhS8XjZp9eDHwg8KHjLmuqaD1M4tqM9uJnRtuNDx/lW4Q2GyzzUbU4eha2tA+UQaa0Dvdqpynn356VuAgzyyzaEmUhI+fZ3ittdaKUvzqMIMK2rYqaB3ls64P/nZ+17gHGPwx+5PPAYWC3Bd1LgPuyyWXXGLjH7BCMKiDW5Wk0EOrjve3MRmiv7HB290/lfIJ04Ssr6ussor9470lbA+3PVnGHUi8DvEgxN7USSpltKqdpsoE1wJjpo0o3bMNet0dOzFFgqqHL3/5y1dQIHyFQr4TkITJDx+xS+PKhYKIZdrsOvEREdu0y0tMpRsESNCDb7tLmpiYVJc3oH02oXfi/4caiGKMKTuWzyCEGMeibIMBbhCXsklfUCxQKJr8Hhh421QFzaF8hq7NXweLAyXisssuW7DpnnvuGaFQEj+Boh5iblCjBeWQmApyYuQ8LzF66IJOZHzZZZddbN2KukOgfFJfJVVQirBKMJkifojzoJxyH0X4Dk7MzkM4yX6hT1hSWLeYuGGxyy3W1USZeOCBB6zFpSljBUzIzKnVPUN3dLzrJqZIcJk87Ph5eaBuv/12S3UTxYHZBZHlUJjYVjcjSYUNEx7nwCwMva4r4UdMu9RuIDJepT0C4oPH192VNK32mUvv9KmcdZkY5fpClE1mXSGzNiZ72C1Y65qU7WbWjnXDHYykH3WfuZTPqvaYHKBoVTFJcHmgNHGt1Gugz7wbYDtguSRVdNPfnUsP5V3URnhvUQNE4jFCbYnbrukASjDyQQcdZK8bq9Qpp5ximRkEkWLtaiMuZZQgVbBJlSbKBHTpnMRYbl8I9OV5yOmje7wud4fARBUJ/zJIkSyKRNOXgt+m/52ZlJyDH2NXQoIXaZdZpEo3CKBEMIBUvZhzztSE9on1IpXe6VI5SY1cVZVT+u1TNpmBn3322UnKMzEBuAAIUMRMnSNNqaBtKJ9+/8hyifKdks+BGSjBjCgOBAsycPLO8Gmj/jlSvqOYCM22SqGpa4t7iVLE5CcmdVU+Y8f562H98PvAYsW7BysrtNa2vxWwIPAVJYXnCoZFapu5ygRWJqwzuSJ0TxRMlckjMChFgqQpMhjnmtZSocQCwjmIfq9K6ZvanuwHDZB2ebmRPU6lGwQwU2OyvuKKK1o32IT2mUrv5KXO85talZMXcw5ls+riUSbItUAQZori4rbVhArKrDc1qNA9l7vM9UPF5HdIPoUUwfy+ww472DiEjTfe2JrhSegEVbQr6aJ6KFYi8mKERCifqdccakPWkVKeWAholJT/hgKJkkX2TCiksRTZcnzdJ1YwrAVSZRQXUorkKBNcAwGluZYgpXum3Inx7TMoRQJflygSXcwyQjDizuAcTbTgUHuyDtMy7RLLwYtdpTsECMrafPPNWzfILJGBPtV/nELvZJacQ+UUyiYzPWbVixcvtumKm7gXXEAYmMlamTMwc3wuFZTzYCFqE20PZgy2YMD56wQrojAY8P8LZRB3EQMKAY7Ei1RlyKw7h7u9LT2U44lpCbmjfMqne96cZZQqWBmwb9y4GywiuO+wahFLQWZU2DUh5krq+VAMcimjOcoE9y7HOqx0z9Q7N779BqVIYOYSRYKguD6ElxDnwDfcpTBz7rvvXfZ3mtpi1kIgXor5u+q6cmifdfROBn6Xygn/n0E2JCjFmKApOoWi2ZSyGWrbXSfmeWalOZkbc6igbSmf/E6I1Of3VxckSmD0vvvua2esFKOKKR1MDqRy5x577NFJIrM29FAUCBQJrASu1FE+3X2rlonDwH2CRTX2zHE8Ay4Wp5e85CU2QyhKTJu4sFzKaKoyQaps3FsE4KeI0j1TUBrvPoNSJAjukcE4NTgtFy7a5RyYgbsWfgy0fe+993bd9Ny3R+0JZldtJIX2yWBcR+9kkMaihW86RuVk1u1SNruqsply/WSHxMWGpSRFcqigKEFNXYLMnPHjg11VfhDM/2Jp4J6n1LDgOqncCT0cUzkKSNvMqG3ooYcffviIpGqukN+iTZVPnk2sc9DhUVxTBQUGpRf2EIrsIlPng+OxXjQRFDxSXIMz7qkqF0qKMoEFF3prShl1pXs2uWP9HzMoRYIoXFEkmIWmCD+uWNQugW8+FQz2B+dg0O9C+BHQJrMlfJO0zaCHj5IBiRcKswI+iSyHP55qWu+if7PShpjgc8s8y/Wn0D65L8x8ofCGcgFAx8QnX0XlrKJsSl/G8SmzvBQqIL8hqKB10fNtKJ8oDigQKBKuKd7Fgn2OOOIIO1Ay68Qq0EQw+0OP7EKhaEoPJQaC87uprrn+HMqne+0MyBQuI4V2U1xoDxcsuVlwK2HDq0mXAAAyjklEQVS5IgEgLj+egVxJpYymKBPkCkEJrBKUc6V7ViE0uW2DUiSY3YkiUTVjceHClImG7gcv8WDSFrxqd1BAC2c9/sMUueuuu6yJ0N8XM2FOHgy5Lj6hr6nkI4CffJ999sk/0ByB3xjmRUyq6J0ulfO9733vyLeW+ZRN2Boxymbs/H2sR/mS5ER1inkKFbQp5RMXBq4MXBq+Ys91E1jNTJv4FcqnL1u2rBM4COAThYJ0000osnSEiQrPHoN4TlAgKbNh3yBtKJ9YAF73uteNNt1008rZvz1R4j9cIjfddJN1CZE7gmyrKBjE8ORKCmW0TpkgXwjvcYKWY6J0zxgyk18/KEUCapcMuKkca6LHOcadTfEiYh0/PvJFYMoTwYIg58Anx4uN82I18Gse4KLAFAgNyhdMg6Shxe9Noiz47MxkaZvUvASTEfyGX54kOfSPP2YkfVFb/T7O2ndmQMzyeLHmShXtc3mE3olFiyAwgvl8KicKKc8AM2eekRzKZm7f2+zP7J8YCJ5JfOYxqaOCNqV8osww+2UgZkbpCoMLAdYo+xtttNEKvz933zbLPDc77rijvY+4TJrEXzFjz6WHUnWTBFII7wNm/7lC2XNcaMSAxCyvuW36+zN443YR1weBzXwPKX3+sfIdfEiYJZRRjvfjN6qUCY7H3ezWBZG2+VS6p4vG8JYHpUjg25VB3jUJVsHGS5JjcCOIMAtBgVhuBgh8rLzoeYhFGBg4Bt8eCoCck8+jjjpKdrNmVtbRlhv1TBAVMyh3HQeRGIb9MX+r9IMAAwIKWo5U0T5D9M4YlZMXY1eUzZz+t90X5ZmsmJiyiYeICco09MqQNKF8YiWERYIf3R1UGBBR3rHoETuCb7yJaT3Uz6p1uARQ/HBN4WZsEiOQQw/FksW7B3cXCrBvNa3qK9uwZhDrwkRkXMI7EQUIxRP3L+9V3wJX1Zc6ymiVMsEzisIZEqV7hlAZzrpBKRLk2JdBnYCrFOHlxzHMOBFmTvz4qGyHMGtku8s1p8YA6yRvBX43cj/IuTFDIlgcWIdiIsJLWYIq/cQ1BNexPy9PlX4QwATK/c15ucVonz69kxkzyqxU5STOAOmLstkPQvFWZRCEkRISiUPxgxRRAnIpn7gE+Z0wixdhkDnnnHPszJP2+G26Cobs1/cn9xVLJq6KpSbZUq4Sk0MPJd8FM32xTKRcGzgxcPKealvuO+V8oX24L+SNIKYFxhT9EdptaH9/HQoDpdFDVUZjyoRU5fXZG0r39NEd3vdBKRL4lWUwT+WEw2fnGGY2iCgOErEueSMuuOCCEn1xQeD64NirrrrKbtt2223td+IuECwLbMc9IeL20XeFCLWUY1IVIWlXP9MRQEkkRiVVsDL5jA+X3slAQtwKwbKk3OUZwiI2Dspm6jV0tR/PLLEIsQq7ISpoLuUTBZtZPwHHCIMSBblQHjBf85tlsJykMCGgH7gNSOqE+yNHUumhpP/GGpHCSOD8uHTf9KY3WRcBwa1DECZWvBux5BIjhKU3VYh1w9KA8s+ETKqMhpQJnhMmYbxjXVG6p4vGMJcHpUhQIplBmL8YD56XvjyMQErGQ/YneBKfHvQ0lt0ZK5kRTzjhhPIO4MfjGH7gfAqfHWWD78Lo4AfNd14GCOcmHoJ1/PGC9UWUFN9a4e+n35sjAI+eF07qYOTSPrmHLr3TpXKeeuqptmiUVNkcJ2WzORr5RxJ8DN1usUmG5bvnQlRQflOuZaHqjBTdYgZLPBBY8/sER9wYuEf68vNX9alqG4wrZtsMklg3q4L9/HZS6KG4JXhXpMRlQHNFmWXg7Kq2kN/nNt+JGSNgFqxgA2HBSpUQZTSkTMB447kU4R2LVcN9n8s2/RwOAoNSJKDfSfwCEboh4eHF70ikMILGCzebHyuR+cQzuK4I9tlmm20sr5xlhMAuUQb4lCAwTGiynhkpL1C+C2WLQCDZzicBRb4wSLGN5Foq/SCAAsFAGAvMcs/q0j5deidWB6Fy8lIk7oLZKW4NBhRiJ2ZZsNQxaEEpdAd3Bn+XCppD+eT3hxKB9QH3Ab8zAilRxBk0hizcb/qLxcRPJFXVb+ihME1gaMiExN0fyicuCtwhVcI5sRTx7PnKXdVxk9gGVrxjmbDh/qXeRWq8CZYf3sdSZRTLLRZGgtZxS6M4oHQivJd5FmUiN4lr1XOmITAoRYIuizuBhDKuEH2Ods+LiYGaojIiJMhhHeZUPpd59DFMrPhEMZ2xLJYG9uWBFkFJYR1/POBE6rPMMfxQCEBC0cHfyXp+9L5ABaQfBHEyY1HpBwHcFbyQEGYrBL/izwV3chGIn19on0LvxBpFQCHWKF5exMdgdh0KZbMftMKtomTh3lu0aNGCmThuQeo3oFS4lE9+A7GZIYo/9D1+KwysDIpHH310djnqcE/HsxZ3B0Gg9B0FK6QYhHqCIhaihwrlkxiJWKlrMMZaigJGjNg0Ce9LfmtYYfkNbbXVVjaVNkpTnUWFiSDWXbJuyjPD71GqM4O90D1RQlEyVIaLwOAUCcklIbnXeXFR4U8CJBnA2YZSIMKgIW4KGVxkG5+Y1XjJofni48N0TTv8YSLnwYdmJZk1mZXSPiY29iHCm3OyjNKCBs4ygxDH8QNy+4N5GIUoNSOf21ddTkOAAEoUNnzP7rPBfeGP5wHlAgUB2h33CisG1ixmPFiuhkrZTEOgm7144aN88RKX+jZCBQVbBtUzzzzTPuNgB7bgCLZCYyb/AAo5gYX8zki+lpoHppur6LYVBjFiaiTOww/+C50NhcCnh0L5JH8FMVfkgGDgJJ8GVE6eX1yxKCC8g9qmfw/1aVzrePfhLkNZAjesOigWvDOraPxgJpRRSq9jfQAnfs9YaHBpgBlt8dzRLgHy8tyN6/r0PPUITESRwA/JDDEky4w1gYdmyZIlo8MOO8y+mPjOH8l1YrEHxDfwg43NmKBg8XDy8PLjljZJxEK2SXn4WY/igPCy5DuWCD4JFmNWRhtkYWMdL84cU2jomnVdHgJkt8QqxMCGQsB9iP2xHSsSn+zPIMhMObdKZl4Pp2tvZnzMmrFCSGQ+AXIoX6J0hfDFpYj7D3wxc6Okz1KQMYwJBn7YHbg3Uyjpwowh3gZlFgon1oYQflhX11tvvWTLxzQ9VVhjsBBiccDSwjszJrgqCWxmAofyhuLAuzb22+a50zIEMTQns34iigRxBLy4GNyJS0Cb5cHDP0YuBrRQmf3wA+TBgTbWle9QXCG0jcsDt8kGG2xgH1yUEYmZwDXBD4H9mDUQDOoK/r66jIHu/rrcDgFmcJTLDr2UWcdghlKIW4xldz8C2G699dbKF1q73k330TzzzKCZGWKZQ6lw8ZNlLBSyLJ+4CpskCZsGxHjnfP7zn7fpvRngwIjJTpUQaMr7S6ykglPoE0VilmfYYEewO0oFgc2xd7hYJyTezcdKrBKyHoWD8UNlGAhMRJHAquC/6OUBcT/RSqFoycDeFWQSSc25CLASCZkwMdHyA5jlH7tc/5A/MbujYLrPhywT80A2Pr5jhkfIY8DLhnWY3cVsP+RrnHTfSEaEBUJwDX1+5jOfsQMplEnZTqAh8QWzLlA+cZPxPOEm9Qcy3lOwDmIzafBCyYBOThuCH8rxLAvuDeLJSIiGFQbXDondRJjI4ZIWPEKf/K6Jq3CfO6xFXY8N0if9zENgIooEXSTJD0E2FEliRoOPFp81gwIxEcQeVJnD8i5z4d5u4ivOqTJsBHgOJIOp/5IhsI9BjH1IxewmW5IcIxxDoimVOAKkAyeHho8v34l5AEt817vvvrttBMyJ3Jf93eDn+FlmYwuTi0MOOcS6dMAGdyfWMjeIW3Dhk9gR2YbLCFm+fLmtbyH7+dbO2UBq4VUQlAqbB2ULJR+3GPFkKKKCg/tJkkFcQygfknGVeAziSmQ/LJAqk0dgYorEJC8dF4o8iDkZ5ybZ53k+NywCuV+8VESpwKolOUWY4WBKdk3szFZkhk3wq0oYAZSCRYa5IRi7ZmR+HxJIzMvcTc5GPBIxQhxHwqJ5E7LlEj9FnJVQxQVD+SSuSyydKBNuCn5cJLIfisk8CdYvYk/k+vl0XUHkfhFrAyXLYQ+JYOEgEJNjsAypTB6BuVQkMFHKA6wDzOQfwqoe4FIiCEvuFwwbBjS+u/lCsHChIPoigbW8eFTCCGDFEXzBmsGO75joZaZM7gAUDD/jLGZq9iWgUF784bPM5lrSOruWHBQr4qwET7Yj4AhGpHh3BZYC+2JNmzchwFJw4vdJELR8F9wIiiaY9+67714AD3lf2JdYlJwkYgsa0S+dIfAcczPmTkxAWXnNRgsul3VheAiYINvCxDfYjpmCXYWh7hbGxG6/G9Nn2WEz8ysM97/8LgsmBsYuGvNzYbjoslo/f42AmS0XpkhTicfSpUsLExBnv5u4k8IEIdtlE59SmDLchck7Ue7LgrEO2e9GiSjMS3/Btnn4YlxrhfsOMS60wljN7KWDmbH02GUz+y5MRtbC+PgXwMLzjBi2S2FYIQu2zfIXYwUrTNxDeYnGhVEYRdV+N5lQS9wMJbQwVscCnF0xibDsV+PSLIxy627S5QkgMJeKBD9qYxa3cBttdwKw6ylTEDDqcmGC+8pdTeIeu2z46YWZLRfGt1puiy0Y10a5icFOZSECF110UWGYR3alMc8XO+20U6ksyCDHRvA2FOmFB5tvvPRFpB35Pg+fJtdGYdxp9lJNLERhKLCFyZBqv5scJiUEhvVlleByxa8XTObLchXKxLyIqadR4masMsU+++xTPkvuc2csDoWhIa8Ai2Hblevm8bkrL34gC4NUJPhhmmCk3iBiBmF8m7Z9Q2fr7TzacDsEjAvKzoJpxSRNKpjhIcbXXBgmTXkP7crIP5lds9mYTyN7ze9qLD4iphCaXTQ+6QJLjsysZXvo00Tih1bPzToThFpe63HHHWcVLlM23T5rhkJbbostGFdSucnkUyiXZ33Bxc240ixuJjdPgVIhilgVBmKVZB+sEiqTRWBwdn2TbMi+xNBETX6JwvCse0EIEy3KiuE499K+NtoeAZP3oWzEsAXKZRZMcN+C77EvJkuh3WQSUaki4YFkkk8VDzzwgF3LrM/EC9ll4+cvjC8/6QWNy0jEHRRl3Sx/YkEwNGN7iSbGocD1hpgaJoXx6ScpYq7y4A6OtqEZ/WeyqRYmBsJeHb9LE+tkl7EOm3xChYtJDIJ5fu5imExy/eAsEiZ/e4H/jIeJH2NfIj96w0Xu6xTabksETMGosgXDMy+XcxZM6mG7u4nuzjlsLvaVQZCLJb4E94UIyoSh6MnX6KfEReAqnLffkmFdlLjgxhB3KSsN6yDJYiaWV4417I+yvVlecJVU3sNujInJr1GY6su1l2/KIpT7EB+lMlkEBmeRMFzjEhHD1y6Xu14wpYNtQM+8vfy6xrHP9kwa9bJ5cUWVKxIWDMWsMPlI7J4mI2HCEfO1i/j2uWpD82x08TfddJM9DtfTvLmOCAIUIb6kiTADR3DbpShuTc4xtGNMxuCySxKMWq5IXDDJqeyexOiYomGJR+lufSEwOEWCmZBI31HMqskK0sP8dONXsFLlCj5/jjP0vAL/q8pCBGBsiLhBqbKu7pPf5xVXXGF3I1hu3sRkZCwv2aR2LpdTF0yNk8LU6bG7+6671DamcT+TvKvsNkGouYJb48ILL7SHzeNzl4vXOPYfnGvD1S5NmeNxYKDnGCgCLtVQZm6pXYVaJi8bU464pJalHj8P+7kxDU2UdpP2uEAZgc2x3377zQNkC67RtcCk+PUXHGy+QLtFGSGo1aTe9jfP7Hc3mFKo3TkXa2o1FVgrTR2kwiSqyjlU9+0JgcEpEgQtiRAMpjK/CLjuCCK7UwY7ZnkmS2BhSjpb4IigNyl15xfEiisnT4SIWBbke9UnUfLge9lll9ndTP2IAt/2vAlxECLiQpPvdZ/nn39+cfrpp9vdTKkAOyjWHTMr23GDiZgEc7KY9GnqJBXC+DjttNPmCrckgCa1U2eprTpqyJiiy/rzZDubViH3/sknn2xTD1P5jgyAVMKjZLNKOgJU8jS/DftnZjKj448/fmSYBiMzAywbMVHgtpAUVV2pNCj777XXXtFqg+XBc7xA6mup8kkWyzPOOKNMhx2DhQyNZIMVjKmLM6/CcyfVUEndTiXjOjFmeVtLCLzB0AS59lZTqK4vk9xOCmx5hoxCVfvcUYnZ5JcojzEWsEl2X8/tITDIFNnkp5eHjGJCdWIy7tnCQhRw2nnnnUdmpmSL6NQd19d2SuWiPMg1uJ+UJSc1rEoaArx4qePgYsgyaXMpIiVl3t3tJup7QfGutDPN517UezCMgRLftdZay9bTMImWbDpn6knwezrmmGPKCqtgzUDIunkXt5IwKbBNQqrRjTfeOELJEKEmCeuMFWeEMizPKu8qClnNo5Dy2rA1Siyo5PmRj3zEprlnooBSRoGvU045xVYGJRW24HbwwQfPRbXZaXouBqlI8AOTh4YXXZXwoqM8rewvnyaFatVhjbZRkdSwPewsgqqlWBx4SfhizJZlfxjwKBwlMxDpHxXs5rE2gY9VyndmzpSvNulyS1wFR/fTpHMenXrqqSOTCjulWd3n1wh8+ctfXjDAuZiGlg3DYGRiVhQ/gwBVZym4FcIJBc0tgCb78L5KmYXPOsAoCq5iJfjEPlE2rrnmmlmHZSqvb5CKhBQN4oEy/tcosMz8ebhCD55JdBI8zgTpjLBcvO997wtuj62kXHDoPBQ5evzxx8vDDC98ZPLpl/savrPdhkvjqquusuY50a7dktdlA7pQiQDFuShZTUVA7gdFjwwVbGTiJyqP043VCJigt5Hx1Y9QxlwLBRgzczSBryNKYKsCEcbRZFq1pcL9CYO8M1hPOXEUXd5BKs8gQCVP3JUm5fUKky2wo7IqbgyUDqlCq9gND4FBKhIm2r4ciLEAxOSGG24o98OsyECNksADaCLJg4fde++95THHHnvsCvtgUuOliTIjcsEFF5THYLqkEiLtmEhru97UgLC7MjsxGQLLfekHMR++mERAI0NbWlDy2t9Hv1cjgLkdfIk9UekWAcpe8+IGX55nFHaVNARQaFEqjjzySIvfa1/72pFJiqZWsgT4qOKJC4jnjokgbk2V6UBgkIrEww8/bB8mHigTWR5F0jUpMsAjfHIc5XxDL0AGe9pkHwKlsCC4YmoMWM2YGYRJ1z2iLxKQhpIiQrCfnEuUHawPtOv+aXClINbtJ+Z4cDb8+24b1tYsAgS3ga9J+KOINECAyQb4YZ1USUfAJCG0uJm8HOkH6Z4TR2Bw9E/z47NV4IyFgcXCDOSFMWnZZf/f/fffX64ycRV2WWpz/PKXv7S1Osodfr1gFITCsCdsFjkSo3DcU089ZbeSkvvBBx+09T3gdt9yyy22jDJpuxFKAJuZWvHhD3/YVqRbsmSJXU/FRMQEhtpP959xe7hfdbkjBCQLYJNEVR11YaabUXzb3V6hw+rzmYejPnd5eA1l70EqEhRvkfK6pMw2fvEgXm7ZXeHEm+DHct9LLrmkXHYXqMoH9x2hSBj53jkPSgti/MQFdR7cLJush/eN0vCxj32sQEEgR7zxedp1bEd58cVNB+tv0+/NEdAXTnPsUo7UgTAFpfg++nzGsanaos9dFTrD3TZIRQK4mP2LkLTE2G7ka/kpqVZJYkWWPhLlGNpauf3cc88tYpnTyCRngsfsvlgi9thjj0JqD6y22mrFqquuWhj/e+HWvZeGqdJ30EEHWWWDLGsibkpnWecWnpJ1+tkeAX3htMewqgUdCKvQqd+m+NVjFNqD4mWG6WJT24e267phIjBYRcIt5kIq2VAKWknxKylXyRCHBYDvuDBQNExAZRT5s846q1QmvvSlL5VKCMcZamZhaFqFYQiUx5Np0fg+bXpWw7hYodqh4eCX+8qCKhKCRLef+qLuFk+/NV7mvNTVNO8jk/ZdFd00nEJ7gZ0+dyFkhrtusIrE1ltvXUicBHEPsuxCudlmm9mvlJQ1WQwLQyOyCsQXvvCFMnc96VSXLl3qHlYuGxqmdXFQSY7qe+Iq4XiJd6CwFy9VBIuDoRsuKBdcNmYWqBPiKxP/8i//4u6iyx0hIHUOUPhU+kFAX+jNcVVFtx12qkg0x28SRw5WkcAasHjxYovJNttsE8TGUKxsjn8KB4nlwFAxix122KH45Cc/WUgufOotoGgYumhhUvyu0BYlgL/+9a8X73rXu+w2CsGsueaadhkFRgI5TXKsoIvFbVDcJbIOy4hK9whQsAcR91b3Z9AWTYZQGzukSOQjQPwUMVaq6OZjh+sY3ELu7PzW9IhxIDBYRYKLP+ecc2wwJMGNISEoEgWAAkJUIrzpppsKk7bX7sqM4NZbby1Mqmr7QKJooGB84hOfCDVl1xnusv303SjEQaAQYF0wHPHo8WygHyhA7I8lg+8q3SPAS5o/VSS6x1ZaRFlzS43Lev1MQwDmlz6faVi5e/HcoUQQAK8yHQj8xpC7yWC87rrrVnaRYEipoufvSAzF7bffXlx88cWWyknVOZPzwd+t/C5+Tf8B5jiCK4mLMBkxi6985Ss2DqM80FnArwy91BRAsqwOtGuVfhDghaMv6n6wpVUGQgKY+T3Ib6O/s81eyzyfJk/N7F1Yz1cEbgi/bXER9XxKbb4lAoNWJFpemz2cgX3vvfe2f3XtycsyROPEkgG19Oqrry5MqlsbpElQJ4oKCg/KgyumCqX7VZd7QIAXjklg00PL2iQIuC90+W0oMukIgB/UdZQx4rFU0hBwnztTpyjtIN1rogjo0+3Aj18TMRkxnbXPLJLbwqTgtoGbJuuatYKYQlJWqeBTZfwIqOm4X8zdF3q/Z5rN1hW/ZveV3zWi1sZm+E3iqJm3SOSAKsE98ukfi+Vhv/32s3/+Nv0+fgR4UWM90hlfP9jrQNgOVxc/gsdV0hAQ3EytjbQDdK+JI6AWCecWiAKhZkgHlAEvSvyJH9My4C5PVddkZqgBl81um+CnM+s8/AQ3fe7ycJvk3qpIBNC/7bbbClNdMrBFVw0JAeiJSCimZUj9nNa+qKLW7s7J86mKbh6OilseXkPYWxUJ5y5IjATJqCThkbNZFweGgL5w+r0him87fBW/ZvgJbjpBaIbfJI5SRcJBnSBKEZgZKsNGQF44OuPr5z4pvu1wFYuODoh5OApu+rvOw22Se2uwpYM++SIIqITWSbprlWEjoC+cfu+PKBI6EDbDWfDTATEPP8UtD68h7K2KhHMXqCJ6yimnBOt6OLvp4kAQkEh4TUPczw1RRa0drjogNsNPcWuG2ySPUkXCQ98tC+5t0q8DQoBcH08++aTtEfRPle4RkDihUF6V7s82ey0Kfqro5t1biiMi+tzl4TbJvVWRmCT6eu5GCKBAvPGNbyyo+op897vfLaQSbKMG9aAVEHj88ceLCy64wK7/1a9+tcJ2XVGNAPV6vvOd79idVNGtxsrd+pOf/MSWNGCdPncuMsNe1mDLYd8f7V0AgdNOO61UItjspycPHKKrMhD48Y9/XGyyySbFqaeeao+69tprM47WXckbQbzVu9/9bgvGgw8+qKAkIPCzn/2s2HTTTYsPfehDdu/rr78+4SjdZQgIqCIxhLugfUhGgAqsF1100YL977rrLq1SuQCRdl8++9nPFswMRagno7NDQaP+c8mSJcXDDz9c7njllVeWy7oQRwALGL9vkXvvvVfLsAsYA/9URWLgN0i7txCB3XffvfjhD39oV6699tr2kwx4mkBsIU5Nvz300EPFpz71qQWHk6r4pptuWrBOv4QR4NlEkXDlscceK/hTiSOAG+jjH//4gh2ILVFr2AJIBvtFFYnB3hrtmI/Ao48+Wnz1q1+1q9dcc83i8MMPL3dhFq3SHgGCjUVRo66MyLnnniuL+lmBwMEHH1x885vftHu8/vWvL/f83Oc+Vy7rwooIfPjDHy5Lri9evLjcQZ+7EopBL6xk6kuMBt1D7Zwi8GsE8NkfddRR9tsxxxxjAyx32mmnEp977rmn2GKLLcrvupCHALERq6yySsErgcJJX//614u11lrLNkL12+9973vFaqutltfoHO3905/+1OKHGwjGxnXXXVcsWrTIIrDqqqtasz04qixEgJiSl770pQUBqi94wQus9Wb11Ve3O1H3CGvFa17zmoUH6bdBIaAWiUHdDu1MFQKXXnqp3UzSMALZ/Gh4CdKqakO3xREguE3mFXvuuWfxvOc9r9wZKp5vei436oJF4MYbbyxjSXDBvexlLyuRIe2+H9tTbpzzhVtuucUqEcDw53/+54XQP/nOb5zgapVhI6CKxLDvj/bu1wgwG5bo91133bXAtSGKxIYbbmj3IihQXzrNH5mLL764PPg973lPia8kCPr0pz+9gC1T7qwLFoFLLrmkRGL//fcvlQqpJnzCCScUmuWyhKhciD13Uk78vPPOK3BrqgwXAVUkhntvtGcOAjfccEP5jRcyIi/oj33sY+Xs+YMf/GCx2267FU899VS5vy7UIwD1btmyZXbHt771rcUGG2xQKhLMrhGC3972trcV5JhQWYgA5nkJSCWnyZZbblnit80229idUYYPOuigcv3CFubzG+4MoXlCmcUVJBOEt7/97RYUrGHveMc79Lkb8COiisSAb4527VkENt98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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "![SimpleMLP.png](attachment:SimpleMLP.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each node will have weights, corresponding to the number of inputs including biases. For example, in the above model we have that there are 43 weights to determine. For each of the 5 nodes in the middle layer there are 5 inputs, while for each of the 3 nodes in the output layer there are 6 inputs. Training the neural network then corresponds to calculating the optimal weights such that the inputs best model the output. \n", "\n", "Training the neural network is the most computationally intensive component of neural networks. The basis of training is an algorithm called backpropagation, which was published in 1986. Backpropagation takes a data-set and does two sweeps through the neural network. The first is a forward calculation, which is used to calculate the error. This error is summed over all the instances of the data. The second is a backward calculation, hence the name of the algorithm, where the error is propagated back through the network. This uses the chain rule to calculate the partial derivatives of the error with respect to each of the weights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gradient Descent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the derivative of the error with the respect to the weights is known, we then have a gradient field, and gradient descent can be used to update the weights. If the model has $n$ parameters (the weights), then we can write the gradient of the error $E$ as\n", "\n", "$$ \n", "\\nabla E = \\left( \\frac{\\partial E}{\\partial w^{(1)}}, \\frac{\\partial E}{\\partial w^{(2)}}, \\dots , \\frac{\\partial E}{\\partial w^{(n)}} \\right). \n", "$$\n", "\n", "Then the weights, which we can write as ${\\bf w} = ( w^{(1)}, w^{(2)}, \\dots , w^{(n)} )$, can be updated using the rule\n", "\n", "$$ {\\bf w}^{(\\text{next})} = {\\bf w} - \\eta \\nabla E. $$\n", "\n", "The parameter $\\eta$ is known as the learning parameter. This corresponds to choosing the direction that the error is decreasing the fastest and heading in that direction. The hope is that this will eventually take us to the minimum of the error, and if this is the global minimum, then this will give the optimal weights. Choosing the best value of $\\eta$ is the key to making neural network training as efficient as possible. If the value is too small, the algorithm is very slow to converge, however if it is too large the algorithm will overshoot the minimum and may not converge. Hence is better to make the learning parameter too small, rather than too large. There are many algorithms for choosing the learning rate, however we will concentrate here on some simple methods.\n", "\n", "The algorithm where we use the whole training set to calculate the partial derivatives is know as batch gradient descent. If the training set is very large the cost can very large, as we must perform forward passes for each data instance. For stochastic gradient descent a single random data instance is chosen to calculate the gradient. Mini-batch gradient descent uses a small, randomly chosen batch of the training set to calculate the gradient.\n", "\n", "Stochastic gradient descent and mini-batch gradient descent require significantly less computational time than batch gradient descent, however they introduce a randomness to the descent method which means the error can bounce around and never reach a minimum. This behaviour decreases as the size of the batch increases. In some cases where the cost function is irregular, this behaviour of the error bouncing around can be a benefit, as it moves the error away from local minimum.\n", "\n", "One way to address this bouncing around of the error is to gradually reduce the learning rate. For example, the learning rate can be defined as \n", "\n", "$$ LR = \\frac{\\alpha}{1+\\beta n}, $$\n", "\n", "where $\\alpha$ is the initial learning rate, $\\beta$ is the decay rate and $n$ is the number of epochs (iterations of the training algorithm)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Activation Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One final change needs to be made to the algorithm as it currently stands. The activation function for a classical perceptron is the Heaviside step function\n", "\n", "$$ H(x) = \\left\\{ \\begin{array}{ll} 0 \\quad & x < 0, \\\\ 1 & x \\ge 0. \\end{array} \\right. $$\n", "\n", "Hence if the argument is less than zero the perceptron does nothing, and if it is greater than zero the perceptron fires.\n", "\n", "The problem with this function is that the function is singular at $x=0$, and otherwise the gradients are zero. Consequently, the gradient of the error will in most places be zero, and gradient descent will fail.\n", "\n", "To fix this problem smooth activation functions are used. A number of common choices are:\n", "\n", "### Sigmoid function\n", "\n", "The sigmoid function is\n", "\n", "$$ \\sigma (x) = \\frac{1}{1+e^{-x}}. $$\n", "\n", "This is a smoothed version of the Heaviside step function.\n", "\n", "### Tanh function\n", "\n", "The hyperbolic tangent function is\n", "\n", "$$ \\tanh (x) = \\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} = 2\\sigma(2x)-1. $$\n", "\n", "This has similar shape to the sigmoid function, but approaches $-1$ as $x\\to -\\infty$ and $1$ as $x\\to \\infty$.\n", "\n", "### ReLU function\n", "\n", "The Rectified Linear Unit function is the integral of the Heaviside step function:\n", "\n", "$$ ReLU(x) = \\hbox{max}(0,x) = \\left\\{ \\begin{array}{ll} 0 \\quad & x < 0, \\\\ x & x \\ge 0. \\end{array} \\right. $$\n", "\n", "Even though this function increases without bounds for $x$ positive, it is fast to compute and works well with the gradient descent algorithm. Consequently, it has become the default for Artificial Neural Networks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Output functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will concentrate on a multilabel regression problem, therefore we need to calculate the probability that a\n", "prediction belongs to a particular class. This can be done using the _softmax_ function, which we have previously seen with the logistic regression algorithm. If ${\\bf s({\\bf x})}$ is a vector with the scores for each class, then the proability that instance ${\\bf x}$ belongs to be class $k$ is\n", "\n", "$$ p_k = \\frac{ \\exp (s_k ({\\bf x})}{ \\sum_{j=1}^K \\exp (s_j ({\\bf x}))}, $$\n", "\n", "where there are $K$ classes.\n", "\n", "Finally the error function can be calculated. If $y_k^{(i)}$ is the probability that the $i^{th}$ instance belongs to class $k$, which is in general either $0$ or $1$, then the cross-entropy cost function is\n", "\n", "$$ E = -\\frac{1}{m} \\sum_{i=1}^m \\sum_{k=1}^K y_k^{(i)}\\log (p_k^{(i)}). $$\n", "\n", "Since $p_k^{(i)} \\le 1$, this function is always non-negative and only equal to 0 if $p_k^{(i)} = y_k^{(i)} $ for all $k$. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tensorflow and Keras" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tensorflow is an open-source Deep Learning library which was developed by Google, and is the most popular Deep Learning Library. Keras is high level Deep Learning interface which can run on top of a number of Deep Learning libraries, including Tensorflow, Microsoft Cognitive Toolkit and Theano. However, here we will use the implementation of Keras which is built in to Tensorflow. In later exercises we will explain what a tensor is, and how it relates to Deep Learning.\n", "\n", "First we import Tensorflow, and then import the implementation of Keras." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow import keras" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To test whether they are imported correctly, we can check the version numbers." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.4.0-rc0\n", "2.4.0\n" ] } ], "source": [ "print(tf.__version__)\n", "print(keras.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We import from `sklearn` functions to load the Iris data set, split of the data for training and testing, and analyse the output. From `keras` we introduce the functions `Sequential`, which creates a feed-forward neural network, `Dense` which creates a fully connected network and `Activation`, which introduces different activation functions. We also introduce `SGD` which implements stochastic gradient descent.\n", "\n", "Finally, we introduce the usual suspects." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Dense, Activation\n", "from tensorflow.keras.optimizers import SGD\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load and process data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first load the Iris data from `sklearn`. The `data` structure is used for our features, which we then normalize. In general the input data for neural networks should be normalized or scaled.\n", "\n", "The `target` values correspond the three categories: 0 - setosa, 1 - versicolor and 2 - virginica. We also store the species names for later analysis." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2]\n" ] } ], "source": [ "ds = load_iris()\n", "X = ds['data']\n", "X = (X-X.mean())/X.std()\n", "target_names = ds['target_names']\n", "print(ds['target'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The target values to be transformed to a binary categorization for each species. This can be done using `pd.get_dummies`, which creates a column for each category that is either 0 - false or 1 - true. The result will be a pandas dataframe, however we need to convert that a numpy array so that it can be used by `keras`.\n", "\n", "Once the feature and target arrays are created with can split them into training and testing sets. Here the testing set is 20% of the instances." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "Y = pd.get_dummies(ds['target']).to_numpy()\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating the model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this example we create a sequential neural network where there are 4 inputs (the dimensions of the irises), then two hidden layers which each have 10 nodes and a tanh activation function, and the output layer has 3 outputs (the iris species) and a softmax activation function. All the layers are dense, which means they are fully connected. For the first layer only we need to specify the number of inputs. We can then print out a summary of the model, which shows we have 193 free parameters." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense (Dense) (None, 10) 50 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 10) 110 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 3) 33 \n", "=================================================================\n", "Total params: 193\n", "Trainable params: 193\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model = Sequential([ Dense(10, input_dim=4, activation='tanh'),\n", " Dense(10, activation='tanh'),\n", " Dense(3, activation='softmax') ])\n", "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could also show a summary by using the `layers` attribute." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.layers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find the attributes of a particular layer we can refer to these by an index. For example, index=1 will give the second layer. We can then view the weights and biases for this layer. These are all randomly initialized by `Dense`, otherwise the stochastic gradient descent algorithm will fail." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "weights : [[ 0.49462318 0.20605463 -0.49497095 0.07855463 -0.24316806 0.4702474\n", " 0.21920347 -0.02022982 0.0570004 0.4997548 ]\n", " [-0.5223231 -0.05602154 0.20897734 0.4172505 -0.51635146 0.02329129\n", " 0.00900477 0.052149 -0.08700126 -0.1752469 ]\n", " [-0.48173907 0.22286409 -0.03746063 0.05650562 -0.08612934 -0.5121895\n", " -0.2712357 0.4032064 0.03546488 -0.19499534]\n", " [ 0.40411097 0.2507378 0.38394004 -0.20471 -0.46760547 -0.2888215\n", " 0.08275092 0.03520566 0.2167393 0.11646551]\n", " [ 0.54245055 -0.15050232 -0.17040393 -0.20157158 0.45085973 0.386912\n", " 0.3991801 0.00270826 -0.53547347 0.3452139 ]\n", " [ 0.12483054 0.33211732 -0.06949148 -0.3128831 0.13568628 -0.17653424\n", " -0.00622237 0.06860495 0.09452832 -0.4306746 ]\n", " [-0.24111378 0.4525125 0.3688298 0.29547703 0.19370568 -0.13219321\n", " 0.23905838 0.09457469 0.02739185 -0.21094188]\n", " [ 0.11890727 0.14854753 -0.45438966 0.44462633 -0.46597078 0.31837285\n", " -0.10292703 0.29024243 0.1206066 -0.19048342]\n", " [-0.03812754 0.28726947 -0.41406655 0.38624036 -0.2796975 0.33797926\n", " 0.50934815 -0.45491147 -0.28075343 -0.5061624 ]\n", " [-0.17938194 -0.28918087 -0.10836717 0.36149657 -0.3732981 -0.43713647\n", " -0.47314996 -0.14700964 0.19716114 -0.14219162]]\n", "biases : [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], "source": [ "hidden2 = model.layers[1]\n", "weights, biases = hidden2.get_weights()\n", "print('weights :', weights)\n", "print('biases :', biases)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The final step to initialize the model is to compile the model, which sets the loss or error function, the optimizer to use and the metrics to output.\n", "\n", "Here we use the cross entropy function discussed earlier and Stochastic Gradient Descent with a learning rate ($\\alpha$) of 0.02 and a decay rate ($\\beta$) of 0." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "opt = SGD(learning_rate=0.02, decay=0)\n", "model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=[\"accuracy\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training the model " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with `sklearn` we train the model using the `fit` method, and pass the features and target training set. This training set is split into an actual training set and a validation set. The validation set is used to independently test the accurary of the model after each epoch. If the training accuracy is significantly higher than the validation accuracy, then this suggests that the model is overfitting the data. In this case we make the validation set 20% of the training set. An explicit validation set could also be passed using the `validation_data` argument. Finally, we fit the model over 500 epochs or iterations. Each of these epochs involves one step of the backpropagation algorithm and stochastic gradient descent. After each epoch the model outputs the accuracy and loss for the training and validations sets. The accuracy should be increasing towards 1, while the loss should be decreasing to 0. The accuracy data of the model is stored in a dictionary called `history`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/500\n", "WARNING:tensorflow:AutoGraph could not transform .train_function at 0x17bc2d3a0> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "WARNING: AutoGraph could not transform .train_function at 0x17bc2d3a0> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "1/3 [=========>....................] - ETA: 0s - loss: 0.8815 - accuracy: 0.4375" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2021-08-10 08:58:26.178047: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)\n", "2021-08-10 08:58:26.178333: W tensorflow/core/platform/profile_utils/cpu_utils.cc:126] Failed to get CPU frequency: 0 Hz\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:AutoGraph could not transform .test_function at 0x17ee46310> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "WARNING: AutoGraph could not transform .test_function at 0x17ee46310> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "3/3 [==============================] - 0s 135ms/step - loss: 0.8822 - accuracy: 0.4818 - val_loss: 0.7023 - val_accuracy: 0.8333\n", "Epoch 2/500\n", "3/3 [==============================] - 0s 11ms/step - loss: 0.8287 - accuracy: 0.5260 - val_loss: 0.6887 - val_accuracy: 0.8750\n", "Epoch 3/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.7895 - accuracy: 0.7591 - val_loss: 0.6769 - val_accuracy: 1.0000\n", "Epoch 4/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.7753 - accuracy: 0.8984 - val_loss: 0.6660 - val_accuracy: 0.9167\n", "Epoch 5/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.7324 - accuracy: 0.8867 - val_loss: 0.6555 - val_accuracy: 0.7917\n", "Epoch 6/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.7434 - accuracy: 0.8411 - val_loss: 0.6454 - val_accuracy: 0.7500\n", "Epoch 7/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.7108 - accuracy: 0.7695 - val_loss: 0.6351 - val_accuracy: 0.7083\n", "Epoch 8/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.7022 - accuracy: 0.7422 - val_loss: 0.6251 - val_accuracy: 0.6667\n", "Epoch 9/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.6472 - accuracy: 0.7812 - val_loss: 0.6146 - val_accuracy: 0.6667\n", "Epoch 10/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.6567 - accuracy: 0.7305 - val_loss: 0.6043 - val_accuracy: 0.6667\n", "Epoch 11/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.6340 - accuracy: 0.7357 - val_loss: 0.5940 - val_accuracy: 0.6667\n", "Epoch 12/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.6154 - accuracy: 0.7734 - val_loss: 0.5834 - val_accuracy: 0.6667\n", "Epoch 13/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.6068 - accuracy: 0.7839 - val_loss: 0.5735 - val_accuracy: 0.7083\n", "Epoch 14/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5950 - accuracy: 0.7721 - val_loss: 0.5636 - val_accuracy: 0.7083\n", "Epoch 15/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.5963 - accuracy: 0.7604 - val_loss: 0.5538 - val_accuracy: 0.7083\n", "Epoch 16/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5901 - accuracy: 0.7461 - val_loss: 0.5447 - val_accuracy: 0.7083\n", "Epoch 17/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5698 - accuracy: 0.7799 - val_loss: 0.5352 - val_accuracy: 0.7083\n", "Epoch 18/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.5689 - accuracy: 0.7734 - val_loss: 0.5269 - val_accuracy: 0.7500\n", "Epoch 19/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5492 - accuracy: 0.7995 - val_loss: 0.5186 - val_accuracy: 0.7500\n", "Epoch 20/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.5491 - accuracy: 0.8268 - val_loss: 0.5099 - val_accuracy: 0.7500\n", "Epoch 21/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5297 - accuracy: 0.8398 - val_loss: 0.5016 - val_accuracy: 0.7500\n", "Epoch 22/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5208 - accuracy: 0.8438 - val_loss: 0.4938 - val_accuracy: 0.7917\n", "Epoch 23/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5371 - accuracy: 0.8529 - val_loss: 0.4862 - val_accuracy: 0.7917\n", "Epoch 24/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5096 - accuracy: 0.8672 - val_loss: 0.4788 - val_accuracy: 0.7917\n", "Epoch 25/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5132 - accuracy: 0.8737 - val_loss: 0.4716 - val_accuracy: 0.7917\n", "Epoch 26/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.5005 - accuracy: 0.8750 - val_loss: 0.4643 - val_accuracy: 0.7917\n", "Epoch 27/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.5176 - accuracy: 0.8477 - val_loss: 0.4581 - val_accuracy: 0.7917\n", "Epoch 28/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4667 - accuracy: 0.8867 - val_loss: 0.4511 - val_accuracy: 0.7917\n", "Epoch 29/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4739 - accuracy: 0.8997 - val_loss: 0.4449 - val_accuracy: 0.7917\n", "Epoch 30/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.4848 - accuracy: 0.8646 - val_loss: 0.4388 - val_accuracy: 0.7917\n", "Epoch 31/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4539 - accuracy: 0.9076 - val_loss: 0.4326 - val_accuracy: 0.7917\n", "Epoch 32/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4762 - accuracy: 0.8763 - val_loss: 0.4270 - val_accuracy: 0.7917\n", "Epoch 33/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4487 - accuracy: 0.8880 - val_loss: 0.4213 - val_accuracy: 0.7917\n", "Epoch 34/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4461 - accuracy: 0.9036 - val_loss: 0.4156 - val_accuracy: 0.8333\n", "Epoch 35/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4471 - accuracy: 0.8802 - val_loss: 0.4107 - val_accuracy: 0.8333\n", "Epoch 36/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4388 - accuracy: 0.9049 - val_loss: 0.4050 - val_accuracy: 0.8333\n", "Epoch 37/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4498 - accuracy: 0.8607 - val_loss: 0.4003 - val_accuracy: 0.8333\n", "Epoch 38/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4289 - accuracy: 0.8854 - val_loss: 0.3953 - val_accuracy: 0.8750\n", "Epoch 39/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4281 - accuracy: 0.8815 - val_loss: 0.3904 - val_accuracy: 0.8750\n", "Epoch 40/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4340 - accuracy: 0.8659 - val_loss: 0.3859 - val_accuracy: 0.8750\n", "Epoch 41/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.4273 - accuracy: 0.8815 - val_loss: 0.3814 - val_accuracy: 0.8750\n", "Epoch 42/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4209 - accuracy: 0.8776 - val_loss: 0.3772 - val_accuracy: 0.8750\n", "Epoch 43/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4028 - accuracy: 0.9089 - val_loss: 0.3723 - val_accuracy: 0.8750\n", "Epoch 44/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4044 - accuracy: 0.8893 - val_loss: 0.3680 - val_accuracy: 0.9167\n", "Epoch 45/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3895 - accuracy: 0.9049 - val_loss: 0.3638 - val_accuracy: 0.9167\n", "Epoch 46/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3903 - accuracy: 0.9010 - val_loss: 0.3596 - val_accuracy: 0.9167\n", "Epoch 47/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3993 - accuracy: 0.9036 - val_loss: 0.3557 - val_accuracy: 0.9583\n", "Epoch 48/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.4005 - accuracy: 0.8919 - val_loss: 0.3519 - val_accuracy: 0.9583\n", "Epoch 49/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3868 - accuracy: 0.9076 - val_loss: 0.3481 - val_accuracy: 0.9583\n", "Epoch 50/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3687 - accuracy: 0.9154 - val_loss: 0.3448 - val_accuracy: 0.9583\n", "Epoch 51/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3738 - accuracy: 0.9362 - val_loss: 0.3411 - val_accuracy: 0.9583\n", "Epoch 52/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3773 - accuracy: 0.9010 - val_loss: 0.3378 - val_accuracy: 0.9583\n", "Epoch 53/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.3733 - accuracy: 0.9245 - val_loss: 0.3340 - val_accuracy: 0.9583\n", "Epoch 54/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3614 - accuracy: 0.9440 - val_loss: 0.3303 - val_accuracy: 0.9583\n", "Epoch 55/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3514 - accuracy: 0.9323 - val_loss: 0.3266 - val_accuracy: 0.9583\n", "Epoch 56/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3523 - accuracy: 0.9427 - val_loss: 0.3233 - val_accuracy: 0.9583\n", "Epoch 57/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3460 - accuracy: 0.9284 - val_loss: 0.3197 - val_accuracy: 0.9583\n", "Epoch 58/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3328 - accuracy: 0.9531 - val_loss: 0.3162 - val_accuracy: 0.9583\n", "Epoch 59/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3418 - accuracy: 0.9518 - val_loss: 0.3128 - val_accuracy: 0.9583\n", "Epoch 60/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.3487 - accuracy: 0.9557 - val_loss: 0.3102 - val_accuracy: 0.9583\n", "Epoch 61/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3377 - accuracy: 0.9557 - val_loss: 0.3069 - val_accuracy: 0.9583\n", "Epoch 62/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3419 - accuracy: 0.9518 - val_loss: 0.3040 - val_accuracy: 0.9583\n", "Epoch 63/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3396 - accuracy: 0.9596 - val_loss: 0.3016 - val_accuracy: 0.9583\n", "Epoch 64/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3069 - accuracy: 0.9596 - val_loss: 0.2984 - val_accuracy: 0.9583\n", "Epoch 65/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.3043 - accuracy: 0.9674 - val_loss: 0.2951 - val_accuracy: 0.9583\n", "Epoch 66/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3296 - accuracy: 0.9557 - val_loss: 0.2926 - val_accuracy: 0.9583\n", "Epoch 67/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.3026 - accuracy: 0.9714 - val_loss: 0.2895 - val_accuracy: 0.9583\n", "Epoch 68/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3061 - accuracy: 0.9557 - val_loss: 0.2869 - val_accuracy: 0.9583\n", "Epoch 69/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3123 - accuracy: 0.9323 - val_loss: 0.2848 - val_accuracy: 0.9583\n", "Epoch 70/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3089 - accuracy: 0.9557 - val_loss: 0.2814 - val_accuracy: 0.9583\n", "Epoch 71/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3046 - accuracy: 0.9570 - val_loss: 0.2790 - val_accuracy: 0.9583\n", "Epoch 72/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2849 - accuracy: 0.9714 - val_loss: 0.2759 - val_accuracy: 0.9583\n", "Epoch 73/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.3112 - accuracy: 0.9609 - val_loss: 0.2734 - val_accuracy: 0.9583\n", "Epoch 74/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2888 - accuracy: 0.9727 - val_loss: 0.2704 - val_accuracy: 0.9583\n", "Epoch 75/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2987 - accuracy: 0.9727 - val_loss: 0.2679 - val_accuracy: 0.9583\n", "Epoch 76/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2875 - accuracy: 0.9518 - val_loss: 0.2665 - val_accuracy: 0.9583\n", "Epoch 77/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2719 - accuracy: 0.9766 - val_loss: 0.2640 - val_accuracy: 0.9583\n", "Epoch 78/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2692 - accuracy: 0.9596 - val_loss: 0.2624 - val_accuracy: 0.9583\n", "Epoch 79/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2823 - accuracy: 0.9648 - val_loss: 0.2595 - val_accuracy: 0.9583\n", "Epoch 80/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2822 - accuracy: 0.9688 - val_loss: 0.2573 - val_accuracy: 0.9583\n", "Epoch 81/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2691 - accuracy: 0.9857 - val_loss: 0.2549 - val_accuracy: 0.9583\n", "Epoch 82/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2632 - accuracy: 0.9648 - val_loss: 0.2529 - val_accuracy: 0.9583\n", "Epoch 83/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2598 - accuracy: 0.9688 - val_loss: 0.2509 - val_accuracy: 0.9583\n", "Epoch 84/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2661 - accuracy: 0.9518 - val_loss: 0.2480 - val_accuracy: 0.9583\n", "Epoch 85/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2526 - accuracy: 0.9688 - val_loss: 0.2455 - val_accuracy: 0.9583\n", "Epoch 86/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2640 - accuracy: 0.9609 - val_loss: 0.2434 - val_accuracy: 0.9583\n", "Epoch 87/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2595 - accuracy: 0.9648 - val_loss: 0.2413 - val_accuracy: 0.9583\n", "Epoch 88/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2475 - accuracy: 0.9609 - val_loss: 0.2392 - val_accuracy: 0.9583\n", "Epoch 89/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2573 - accuracy: 0.9688 - val_loss: 0.2376 - val_accuracy: 0.9583\n", "Epoch 90/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2556 - accuracy: 0.9727 - val_loss: 0.2361 - val_accuracy: 0.9583\n", "Epoch 91/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2615 - accuracy: 0.9492 - val_loss: 0.2347 - val_accuracy: 0.9583\n", "Epoch 92/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2474 - accuracy: 0.9688 - val_loss: 0.2321 - val_accuracy: 0.9583\n", "Epoch 93/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2397 - accuracy: 0.9609 - val_loss: 0.2301 - val_accuracy: 0.9583\n", "Epoch 94/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2501 - accuracy: 0.9727 - val_loss: 0.2284 - val_accuracy: 0.9583\n", "Epoch 95/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2375 - accuracy: 0.9688 - val_loss: 0.2265 - val_accuracy: 0.9583\n", "Epoch 96/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.2351 - accuracy: 0.9727 - val_loss: 0.2255 - val_accuracy: 0.9583\n", "Epoch 97/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2253 - accuracy: 0.9688 - val_loss: 0.2235 - val_accuracy: 0.9583\n", "Epoch 98/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.2395 - accuracy: 0.9688 - val_loss: 0.2221 - val_accuracy: 0.9583\n", "Epoch 99/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2359 - accuracy: 0.9688 - val_loss: 0.2203 - val_accuracy: 0.9583\n", "Epoch 100/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2405 - accuracy: 0.9570 - val_loss: 0.2190 - val_accuracy: 0.9583\n", "Epoch 101/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2293 - accuracy: 0.9570 - val_loss: 0.2170 - val_accuracy: 0.9583\n", "Epoch 102/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2243 - accuracy: 0.9570 - val_loss: 0.2161 - val_accuracy: 0.9583\n", "Epoch 103/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2111 - accuracy: 0.9766 - val_loss: 0.2146 - val_accuracy: 0.9583\n", "Epoch 104/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.2239 - accuracy: 0.9688 - val_loss: 0.2124 - val_accuracy: 0.9583\n", "Epoch 105/500\n", "3/3 [==============================] - 0s 11ms/step - loss: 0.2163 - accuracy: 0.9766 - val_loss: 0.2113 - val_accuracy: 0.9583\n", "Epoch 106/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2131 - accuracy: 0.9727 - val_loss: 0.2093 - val_accuracy: 0.9583\n", "Epoch 107/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2042 - accuracy: 0.9688 - val_loss: 0.2076 - val_accuracy: 0.9583\n", "Epoch 108/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2214 - accuracy: 0.9648 - val_loss: 0.2061 - val_accuracy: 0.9583\n", "Epoch 109/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2155 - accuracy: 0.9570 - val_loss: 0.2054 - val_accuracy: 0.9583\n", "Epoch 110/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2236 - accuracy: 0.9570 - val_loss: 0.2039 - val_accuracy: 0.9583\n", "Epoch 111/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.2060 - accuracy: 0.9766 - val_loss: 0.2021 - val_accuracy: 0.9583\n", "Epoch 112/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2023 - accuracy: 0.9609 - val_loss: 0.2002 - val_accuracy: 0.9583\n", "Epoch 113/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2064 - accuracy: 0.9648 - val_loss: 0.1993 - val_accuracy: 0.9583\n", "Epoch 114/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1956 - accuracy: 0.9766 - val_loss: 0.1980 - val_accuracy: 0.9583\n", "Epoch 115/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1945 - accuracy: 0.9805 - val_loss: 0.1969 - val_accuracy: 0.9583\n", "Epoch 116/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1950 - accuracy: 0.9766 - val_loss: 0.1954 - val_accuracy: 0.9583\n", "Epoch 117/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2027 - accuracy: 0.9688 - val_loss: 0.1939 - val_accuracy: 0.9583\n", "Epoch 118/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1897 - accuracy: 0.9688 - val_loss: 0.1928 - val_accuracy: 0.9583\n", "Epoch 119/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1905 - accuracy: 0.9688 - val_loss: 0.1918 - val_accuracy: 0.9583\n", "Epoch 120/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.2017 - accuracy: 0.9609 - val_loss: 0.1908 - val_accuracy: 0.9583\n", "Epoch 121/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1895 - accuracy: 0.9727 - val_loss: 0.1886 - val_accuracy: 0.9583\n", "Epoch 122/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1798 - accuracy: 0.9727 - val_loss: 0.1867 - val_accuracy: 0.9583\n", "Epoch 123/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1824 - accuracy: 0.9688 - val_loss: 0.1864 - val_accuracy: 0.9583\n", "Epoch 124/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1904 - accuracy: 0.9609 - val_loss: 0.1850 - val_accuracy: 0.9583\n", "Epoch 125/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1787 - accuracy: 0.9648 - val_loss: 0.1842 - val_accuracy: 0.9583\n", "Epoch 126/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1865 - accuracy: 0.9648 - val_loss: 0.1833 - val_accuracy: 0.9583\n", "Epoch 127/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1797 - accuracy: 0.9609 - val_loss: 0.1823 - val_accuracy: 0.9583\n", "Epoch 128/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1723 - accuracy: 0.9766 - val_loss: 0.1808 - val_accuracy: 0.9583\n", "Epoch 129/500\n", "3/3 [==============================] - 0s 11ms/step - loss: 0.1796 - accuracy: 0.9570 - val_loss: 0.1800 - val_accuracy: 0.9583\n", "Epoch 130/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1765 - accuracy: 0.9805 - val_loss: 0.1792 - val_accuracy: 0.9583\n", "Epoch 131/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1824 - accuracy: 0.9648 - val_loss: 0.1784 - val_accuracy: 0.9583\n", "Epoch 132/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1844 - accuracy: 0.9688 - val_loss: 0.1767 - val_accuracy: 0.9583\n", "Epoch 133/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1858 - accuracy: 0.9648 - val_loss: 0.1755 - val_accuracy: 0.9583\n", "Epoch 134/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1648 - accuracy: 0.9766 - val_loss: 0.1744 - val_accuracy: 0.9583\n", "Epoch 135/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1569 - accuracy: 0.9805 - val_loss: 0.1743 - val_accuracy: 0.9583\n", "Epoch 136/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1664 - accuracy: 0.9688 - val_loss: 0.1731 - val_accuracy: 0.9583\n", "Epoch 137/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1667 - accuracy: 0.9766 - val_loss: 0.1720 - val_accuracy: 0.9583\n", "Epoch 138/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1735 - accuracy: 0.9648 - val_loss: 0.1714 - val_accuracy: 0.9583\n", "Epoch 139/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1752 - accuracy: 0.9570 - val_loss: 0.1707 - val_accuracy: 0.9583\n", "Epoch 140/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1639 - accuracy: 0.9727 - val_loss: 0.1690 - val_accuracy: 0.9583\n", "Epoch 141/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1779 - accuracy: 0.9648 - val_loss: 0.1675 - val_accuracy: 0.9583\n", "Epoch 142/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1768 - accuracy: 0.9648 - val_loss: 0.1676 - val_accuracy: 0.9583\n", "Epoch 143/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1561 - accuracy: 0.9727 - val_loss: 0.1672 - val_accuracy: 0.9583\n", "Epoch 144/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1552 - accuracy: 0.9844 - val_loss: 0.1661 - val_accuracy: 0.9583\n", "Epoch 145/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1538 - accuracy: 0.9688 - val_loss: 0.1648 - val_accuracy: 0.9583\n", "Epoch 146/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1504 - accuracy: 0.9805 - val_loss: 0.1639 - val_accuracy: 0.9583\n", "Epoch 147/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1613 - accuracy: 0.9688 - val_loss: 0.1632 - val_accuracy: 0.9583\n", "Epoch 148/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1417 - accuracy: 0.9766 - val_loss: 0.1623 - val_accuracy: 0.9583\n", "Epoch 149/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1747 - accuracy: 0.9492 - val_loss: 0.1619 - val_accuracy: 0.9583\n", "Epoch 150/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1508 - accuracy: 0.9766 - val_loss: 0.1603 - val_accuracy: 0.9583\n", "Epoch 151/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1499 - accuracy: 0.9688 - val_loss: 0.1599 - val_accuracy: 0.9583\n", "Epoch 152/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1646 - accuracy: 0.9570 - val_loss: 0.1592 - val_accuracy: 0.9583\n", "Epoch 153/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1506 - accuracy: 0.9766 - val_loss: 0.1590 - val_accuracy: 0.9583\n", "Epoch 154/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1630 - accuracy: 0.9609 - val_loss: 0.1581 - val_accuracy: 0.9583\n", "Epoch 155/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1440 - accuracy: 0.9766 - val_loss: 0.1571 - val_accuracy: 0.9583\n", "Epoch 156/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1553 - accuracy: 0.9727 - val_loss: 0.1562 - val_accuracy: 0.9583\n", "Epoch 157/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1533 - accuracy: 0.9609 - val_loss: 0.1559 - val_accuracy: 0.9583\n", "Epoch 158/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1567 - accuracy: 0.9609 - val_loss: 0.1558 - val_accuracy: 0.9583\n", "Epoch 159/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1385 - accuracy: 0.9688 - val_loss: 0.1544 - val_accuracy: 0.9583\n", "Epoch 160/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1494 - accuracy: 0.9766 - val_loss: 0.1529 - val_accuracy: 0.9583\n", "Epoch 161/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1379 - accuracy: 0.9727 - val_loss: 0.1526 - val_accuracy: 0.9583\n", "Epoch 162/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1420 - accuracy: 0.9688 - val_loss: 0.1518 - val_accuracy: 0.9583\n", "Epoch 163/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1464 - accuracy: 0.9688 - val_loss: 0.1515 - val_accuracy: 0.9583\n", "Epoch 164/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1505 - accuracy: 0.9688 - val_loss: 0.1512 - val_accuracy: 0.9583\n", "Epoch 165/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1432 - accuracy: 0.9766 - val_loss: 0.1499 - val_accuracy: 0.9583\n", "Epoch 166/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1587 - accuracy: 0.9492 - val_loss: 0.1494 - val_accuracy: 0.9583\n", "Epoch 167/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1399 - accuracy: 0.9727 - val_loss: 0.1486 - val_accuracy: 0.9583\n", "Epoch 168/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1373 - accuracy: 0.9805 - val_loss: 0.1477 - val_accuracy: 0.9583\n", "Epoch 169/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.1257 - accuracy: 0.9805 - val_loss: 0.1464 - val_accuracy: 0.9583\n", "Epoch 170/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1372 - accuracy: 0.9766 - val_loss: 0.1466 - val_accuracy: 0.9583\n", "Epoch 171/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1430 - accuracy: 0.9648 - val_loss: 0.1459 - val_accuracy: 0.9583\n", "Epoch 172/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1383 - accuracy: 0.9648 - val_loss: 0.1454 - val_accuracy: 0.9583\n", "Epoch 173/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1399 - accuracy: 0.9609 - val_loss: 0.1450 - val_accuracy: 0.9583\n", "Epoch 174/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1423 - accuracy: 0.9727 - val_loss: 0.1444 - val_accuracy: 0.9583\n", "Epoch 175/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1319 - accuracy: 0.9766 - val_loss: 0.1436 - val_accuracy: 0.9583\n", "Epoch 176/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1271 - accuracy: 0.9805 - val_loss: 0.1426 - val_accuracy: 0.9583\n", "Epoch 177/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1344 - accuracy: 0.9688 - val_loss: 0.1417 - val_accuracy: 0.9583\n", "Epoch 178/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1310 - accuracy: 0.9805 - val_loss: 0.1416 - val_accuracy: 0.9583\n", "Epoch 179/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1488 - accuracy: 0.9570 - val_loss: 0.1415 - val_accuracy: 0.9583\n", "Epoch 180/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1242 - accuracy: 0.9766 - val_loss: 0.1400 - val_accuracy: 0.9583\n", "Epoch 181/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1324 - accuracy: 0.9688 - val_loss: 0.1391 - val_accuracy: 0.9583\n", "Epoch 182/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1229 - accuracy: 0.9805 - val_loss: 0.1386 - val_accuracy: 0.9583\n", "Epoch 183/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1270 - accuracy: 0.9805 - val_loss: 0.1378 - val_accuracy: 0.9583\n", "Epoch 184/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1214 - accuracy: 0.9805 - val_loss: 0.1371 - val_accuracy: 0.9583\n", "Epoch 185/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1316 - accuracy: 0.9609 - val_loss: 0.1375 - val_accuracy: 0.9583\n", "Epoch 186/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1328 - accuracy: 0.9688 - val_loss: 0.1374 - val_accuracy: 0.9583\n", "Epoch 187/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1214 - accuracy: 0.9805 - val_loss: 0.1367 - val_accuracy: 0.9583\n", "Epoch 188/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1355 - accuracy: 0.9688 - val_loss: 0.1361 - val_accuracy: 0.9583\n", "Epoch 189/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1420 - accuracy: 0.9492 - val_loss: 0.1361 - val_accuracy: 0.9583\n", "Epoch 190/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1220 - accuracy: 0.9727 - val_loss: 0.1354 - val_accuracy: 0.9583\n", "Epoch 191/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1161 - accuracy: 0.9727 - val_loss: 0.1341 - val_accuracy: 0.9583\n", "Epoch 192/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1077 - accuracy: 0.9844 - val_loss: 0.1333 - val_accuracy: 0.9583\n", "Epoch 193/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.1224 - accuracy: 0.9766 - val_loss: 0.1328 - val_accuracy: 0.9583\n", "Epoch 194/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1122 - accuracy: 0.9766 - val_loss: 0.1328 - val_accuracy: 0.9583\n", "Epoch 195/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.1277 - accuracy: 0.9688 - val_loss: 0.1328 - val_accuracy: 0.9583\n", "Epoch 196/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1356 - accuracy: 0.9570 - val_loss: 0.1324 - val_accuracy: 0.9583\n", "Epoch 197/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.1336 - accuracy: 0.9688 - val_loss: 0.1319 - val_accuracy: 0.9583\n", "Epoch 198/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1302 - accuracy: 0.9688 - val_loss: 0.1315 - val_accuracy: 0.9583\n", "Epoch 199/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1285 - accuracy: 0.9609 - val_loss: 0.1302 - val_accuracy: 0.9583\n", "Epoch 200/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1253 - accuracy: 0.9688 - val_loss: 0.1298 - val_accuracy: 0.9583\n", "Epoch 201/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1195 - accuracy: 0.9609 - val_loss: 0.1291 - val_accuracy: 0.9583\n", "Epoch 202/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1318 - accuracy: 0.9609 - val_loss: 0.1284 - val_accuracy: 0.9583\n", "Epoch 203/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1227 - accuracy: 0.9609 - val_loss: 0.1284 - val_accuracy: 0.9583\n", "Epoch 204/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1244 - accuracy: 0.9688 - val_loss: 0.1276 - val_accuracy: 0.9583\n", "Epoch 205/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1078 - accuracy: 0.9766 - val_loss: 0.1264 - val_accuracy: 0.9583\n", "Epoch 206/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1148 - accuracy: 0.9688 - val_loss: 0.1275 - val_accuracy: 0.9583\n", "Epoch 207/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1182 - accuracy: 0.9727 - val_loss: 0.1275 - val_accuracy: 0.9583\n", "Epoch 208/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1245 - accuracy: 0.9609 - val_loss: 0.1268 - val_accuracy: 0.9583\n", "Epoch 209/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1116 - accuracy: 0.9688 - val_loss: 0.1261 - val_accuracy: 0.9583\n", "Epoch 210/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1211 - accuracy: 0.9727 - val_loss: 0.1256 - val_accuracy: 0.9583\n", "Epoch 211/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1235 - accuracy: 0.9648 - val_loss: 0.1253 - val_accuracy: 0.9583\n", "Epoch 212/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1099 - accuracy: 0.9805 - val_loss: 0.1245 - val_accuracy: 0.9583\n", "Epoch 213/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1181 - accuracy: 0.9688 - val_loss: 0.1240 - val_accuracy: 0.9583\n", "Epoch 214/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1181 - accuracy: 0.9688 - val_loss: 0.1237 - val_accuracy: 0.9583\n", "Epoch 215/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1239 - accuracy: 0.9570 - val_loss: 0.1231 - val_accuracy: 0.9583\n", "Epoch 216/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1144 - accuracy: 0.9727 - val_loss: 0.1217 - val_accuracy: 0.9583\n", "Epoch 217/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1211 - accuracy: 0.9648 - val_loss: 0.1218 - val_accuracy: 0.9583\n", "Epoch 218/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1049 - accuracy: 0.9766 - val_loss: 0.1219 - val_accuracy: 0.9583\n", "Epoch 219/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1014 - accuracy: 0.9805 - val_loss: 0.1214 - val_accuracy: 0.9583\n", "Epoch 220/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1269 - accuracy: 0.9570 - val_loss: 0.1216 - val_accuracy: 0.9583\n", "Epoch 221/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1236 - accuracy: 0.9688 - val_loss: 0.1206 - val_accuracy: 0.9583\n", "Epoch 222/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1201 - accuracy: 0.9688 - val_loss: 0.1206 - val_accuracy: 0.9583\n", "Epoch 223/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1000 - accuracy: 0.9766 - val_loss: 0.1198 - val_accuracy: 0.9583\n", "Epoch 224/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1140 - accuracy: 0.9727 - val_loss: 0.1191 - val_accuracy: 0.9583\n", "Epoch 225/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1150 - accuracy: 0.9570 - val_loss: 0.1194 - val_accuracy: 0.9583\n", "Epoch 226/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1068 - accuracy: 0.9727 - val_loss: 0.1190 - val_accuracy: 0.9583\n", "Epoch 227/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.1144 - accuracy: 0.9648 - val_loss: 0.1183 - val_accuracy: 0.9583\n", "Epoch 228/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1027 - accuracy: 0.9727 - val_loss: 0.1179 - val_accuracy: 0.9583\n", "Epoch 229/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1092 - accuracy: 0.9648 - val_loss: 0.1178 - val_accuracy: 0.9583\n", "Epoch 230/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.1038 - accuracy: 0.9805 - val_loss: 0.1175 - val_accuracy: 0.9583\n", "Epoch 231/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1005 - accuracy: 0.9688 - val_loss: 0.1168 - val_accuracy: 0.9583\n", "Epoch 232/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0862 - accuracy: 0.9844 - val_loss: 0.1168 - val_accuracy: 0.9583\n", "Epoch 233/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1111 - accuracy: 0.9648 - val_loss: 0.1173 - val_accuracy: 0.9583\n", "Epoch 234/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0991 - accuracy: 0.9727 - val_loss: 0.1169 - val_accuracy: 0.9583\n", "Epoch 235/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1042 - accuracy: 0.9688 - val_loss: 0.1162 - val_accuracy: 0.9583\n", "Epoch 236/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1064 - accuracy: 0.9688 - val_loss: 0.1157 - val_accuracy: 0.9583\n", "Epoch 237/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0998 - accuracy: 0.9766 - val_loss: 0.1153 - val_accuracy: 0.9583\n", "Epoch 238/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1198 - accuracy: 0.9492 - val_loss: 0.1152 - val_accuracy: 0.9583\n", "Epoch 239/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0972 - accuracy: 0.9688 - val_loss: 0.1141 - val_accuracy: 0.9583\n", "Epoch 240/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1027 - accuracy: 0.9648 - val_loss: 0.1139 - val_accuracy: 0.9583\n", "Epoch 241/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1075 - accuracy: 0.9688 - val_loss: 0.1127 - val_accuracy: 0.9583\n", "Epoch 242/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1101 - accuracy: 0.9688 - val_loss: 0.1125 - val_accuracy: 0.9583\n", "Epoch 243/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0839 - accuracy: 0.9844 - val_loss: 0.1118 - val_accuracy: 0.9583\n", "Epoch 244/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1075 - accuracy: 0.9648 - val_loss: 0.1116 - val_accuracy: 0.9583\n", "Epoch 245/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1108 - accuracy: 0.9609 - val_loss: 0.1115 - val_accuracy: 0.9583\n", "Epoch 246/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0996 - accuracy: 0.9688 - val_loss: 0.1107 - val_accuracy: 0.9583\n", "Epoch 247/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1021 - accuracy: 0.9648 - val_loss: 0.1107 - val_accuracy: 0.9583\n", "Epoch 248/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0947 - accuracy: 0.9805 - val_loss: 0.1110 - val_accuracy: 0.9583\n", "Epoch 249/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0883 - accuracy: 0.9805 - val_loss: 0.1111 - val_accuracy: 0.9583\n", "Epoch 250/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0961 - accuracy: 0.9766 - val_loss: 0.1105 - val_accuracy: 0.9583\n", "Epoch 251/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0897 - accuracy: 0.9805 - val_loss: 0.1106 - val_accuracy: 0.9583\n", "Epoch 252/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1074 - accuracy: 0.9570 - val_loss: 0.1104 - val_accuracy: 0.9583\n", "Epoch 253/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1136 - accuracy: 0.9570 - val_loss: 0.1098 - val_accuracy: 0.9583\n", "Epoch 254/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0895 - accuracy: 0.9727 - val_loss: 0.1090 - val_accuracy: 0.9583\n", "Epoch 255/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1022 - accuracy: 0.9609 - val_loss: 0.1095 - val_accuracy: 0.9583\n", "Epoch 256/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0912 - accuracy: 0.9766 - val_loss: 0.1101 - val_accuracy: 0.9583\n", "Epoch 257/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0987 - accuracy: 0.9766 - val_loss: 0.1092 - val_accuracy: 0.9583\n", "Epoch 258/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0985 - accuracy: 0.9648 - val_loss: 0.1085 - val_accuracy: 0.9583\n", "Epoch 259/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.0975 - accuracy: 0.9727 - val_loss: 0.1082 - val_accuracy: 0.9583\n", "Epoch 260/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0997 - accuracy: 0.9648 - val_loss: 0.1079 - val_accuracy: 0.9583\n", "Epoch 261/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0941 - accuracy: 0.9688 - val_loss: 0.1077 - val_accuracy: 0.9583\n", "Epoch 262/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0912 - accuracy: 0.9727 - val_loss: 0.1077 - val_accuracy: 0.9583\n", "Epoch 263/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0960 - accuracy: 0.9688 - val_loss: 0.1068 - val_accuracy: 0.9583\n", "Epoch 264/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0959 - accuracy: 0.9805 - val_loss: 0.1061 - val_accuracy: 0.9583\n", "Epoch 265/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1002 - accuracy: 0.9609 - val_loss: 0.1057 - val_accuracy: 0.9583\n", "Epoch 266/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0928 - accuracy: 0.9727 - val_loss: 0.1056 - val_accuracy: 0.9583\n", "Epoch 267/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1004 - accuracy: 0.9609 - val_loss: 0.1054 - val_accuracy: 0.9583\n", "Epoch 268/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0937 - accuracy: 0.9688 - val_loss: 0.1053 - val_accuracy: 0.9583\n", "Epoch 269/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0963 - accuracy: 0.9688 - val_loss: 0.1050 - val_accuracy: 0.9583\n", "Epoch 270/500\n", "3/3 [==============================] - 0s 7ms/step - loss: 0.0893 - accuracy: 0.9688 - val_loss: 0.1042 - val_accuracy: 0.9583\n", "Epoch 271/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0794 - accuracy: 0.9805 - val_loss: 0.1033 - val_accuracy: 0.9583\n", "Epoch 272/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1103 - accuracy: 0.9570 - val_loss: 0.1033 - val_accuracy: 0.9583\n", "Epoch 273/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0877 - accuracy: 0.9688 - val_loss: 0.1036 - val_accuracy: 0.9583\n", "Epoch 274/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0982 - accuracy: 0.9688 - val_loss: 0.1030 - val_accuracy: 0.9583\n", "Epoch 275/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0809 - accuracy: 0.9805 - val_loss: 0.1025 - val_accuracy: 0.9583\n", "Epoch 276/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0927 - accuracy: 0.9766 - val_loss: 0.1017 - val_accuracy: 0.9583\n", "Epoch 277/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0901 - accuracy: 0.9766 - val_loss: 0.1017 - val_accuracy: 0.9583\n", "Epoch 278/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0993 - accuracy: 0.9609 - val_loss: 0.1016 - val_accuracy: 0.9583\n", "Epoch 279/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0980 - accuracy: 0.9609 - val_loss: 0.1017 - val_accuracy: 0.9583\n", "Epoch 280/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0882 - accuracy: 0.9727 - val_loss: 0.1017 - val_accuracy: 0.9583\n", "Epoch 281/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0881 - accuracy: 0.9805 - val_loss: 0.1015 - val_accuracy: 0.9583\n", "Epoch 282/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0987 - accuracy: 0.9609 - val_loss: 0.1022 - val_accuracy: 0.9583\n", "Epoch 283/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1035 - accuracy: 0.9570 - val_loss: 0.1017 - val_accuracy: 0.9583\n", "Epoch 284/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0920 - accuracy: 0.9688 - val_loss: 0.1017 - val_accuracy: 0.9583\n", "Epoch 285/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.0786 - accuracy: 0.9766 - val_loss: 0.1010 - val_accuracy: 0.9583\n", "Epoch 286/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0815 - accuracy: 0.9766 - val_loss: 0.1008 - val_accuracy: 0.9583\n", "Epoch 287/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.1037 - accuracy: 0.9609 - val_loss: 0.1008 - val_accuracy: 0.9583\n", "Epoch 288/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0799 - accuracy: 0.9766 - val_loss: 0.1006 - val_accuracy: 0.9583\n", "Epoch 289/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0752 - accuracy: 0.9844 - val_loss: 0.1003 - val_accuracy: 0.9583\n", "Epoch 290/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0872 - accuracy: 0.9688 - val_loss: 0.0993 - val_accuracy: 0.9583\n", "Epoch 291/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0841 - accuracy: 0.9688 - val_loss: 0.0996 - val_accuracy: 0.9583\n", "Epoch 292/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0880 - accuracy: 0.9688 - val_loss: 0.0998 - val_accuracy: 0.9583\n", "Epoch 293/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0800 - accuracy: 0.9766 - val_loss: 0.0993 - val_accuracy: 0.9583\n", "Epoch 294/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0955 - accuracy: 0.9570 - val_loss: 0.0987 - val_accuracy: 0.9583\n", "Epoch 295/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.1081 - accuracy: 0.9492 - val_loss: 0.0990 - val_accuracy: 0.9583\n", "Epoch 296/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0862 - accuracy: 0.9766 - val_loss: 0.0985 - val_accuracy: 0.9583\n", "Epoch 297/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0785 - accuracy: 0.9805 - val_loss: 0.0977 - val_accuracy: 0.9583\n", "Epoch 298/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0874 - accuracy: 0.9688 - val_loss: 0.0981 - val_accuracy: 0.9583\n", "Epoch 299/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0836 - accuracy: 0.9688 - val_loss: 0.0970 - val_accuracy: 0.9583\n", "Epoch 300/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0925 - accuracy: 0.9570 - val_loss: 0.0977 - val_accuracy: 0.9583\n", "Epoch 301/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0762 - accuracy: 0.9805 - val_loss: 0.0966 - val_accuracy: 0.9583\n", "Epoch 302/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0753 - accuracy: 0.9805 - val_loss: 0.0965 - val_accuracy: 0.9583\n", "Epoch 303/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0870 - accuracy: 0.9688 - val_loss: 0.0967 - val_accuracy: 0.9583\n", "Epoch 304/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0954 - accuracy: 0.9570 - val_loss: 0.0963 - val_accuracy: 0.9583\n", "Epoch 305/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0977 - accuracy: 0.9609 - val_loss: 0.0971 - val_accuracy: 0.9583\n", "Epoch 306/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0804 - accuracy: 0.9688 - val_loss: 0.0965 - val_accuracy: 0.9583\n", "Epoch 307/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0792 - accuracy: 0.9766 - val_loss: 0.0961 - val_accuracy: 0.9583\n", "Epoch 308/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0857 - accuracy: 0.9609 - val_loss: 0.0959 - val_accuracy: 0.9583\n", "Epoch 309/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0962 - accuracy: 0.9570 - val_loss: 0.0959 - val_accuracy: 0.9583\n", "Epoch 310/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0803 - accuracy: 0.9766 - val_loss: 0.0951 - val_accuracy: 0.9583\n", "Epoch 311/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0852 - accuracy: 0.9727 - val_loss: 0.0950 - val_accuracy: 0.9583\n", "Epoch 312/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0892 - accuracy: 0.9609 - val_loss: 0.0951 - val_accuracy: 0.9583\n", "Epoch 313/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0977 - accuracy: 0.9570 - val_loss: 0.0951 - val_accuracy: 0.9583\n", "Epoch 314/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0831 - accuracy: 0.9727 - val_loss: 0.0951 - val_accuracy: 0.9583\n", "Epoch 315/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0862 - accuracy: 0.9688 - val_loss: 0.0952 - val_accuracy: 0.9583\n", "Epoch 316/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0930 - accuracy: 0.9570 - val_loss: 0.0945 - val_accuracy: 0.9583\n", "Epoch 317/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0908 - accuracy: 0.9570 - val_loss: 0.0944 - val_accuracy: 0.9583\n", "Epoch 318/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0750 - accuracy: 0.9727 - val_loss: 0.0949 - val_accuracy: 0.9583\n", "Epoch 319/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0674 - accuracy: 0.9805 - val_loss: 0.0947 - val_accuracy: 0.9583\n", "Epoch 320/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0919 - accuracy: 0.9570 - val_loss: 0.0953 - val_accuracy: 0.9583\n", "Epoch 321/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0929 - accuracy: 0.9570 - val_loss: 0.0953 - val_accuracy: 0.9583\n", "Epoch 322/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0757 - accuracy: 0.9688 - val_loss: 0.0941 - val_accuracy: 0.9583\n", "Epoch 323/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0902 - accuracy: 0.9609 - val_loss: 0.0933 - val_accuracy: 0.9583\n", "Epoch 324/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0892 - accuracy: 0.9688 - val_loss: 0.0930 - val_accuracy: 0.9583\n", "Epoch 325/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0868 - accuracy: 0.9570 - val_loss: 0.0928 - val_accuracy: 0.9583\n", "Epoch 326/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0807 - accuracy: 0.9648 - val_loss: 0.0925 - val_accuracy: 0.9583\n", "Epoch 327/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0754 - accuracy: 0.9766 - val_loss: 0.0928 - val_accuracy: 0.9583\n", "Epoch 328/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0736 - accuracy: 0.9727 - val_loss: 0.0928 - val_accuracy: 0.9583\n", "Epoch 329/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0702 - accuracy: 0.9766 - val_loss: 0.0935 - val_accuracy: 0.9583\n", "Epoch 330/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0660 - accuracy: 0.9896 - val_loss: 0.0918 - val_accuracy: 0.9583\n", "Epoch 331/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0744 - accuracy: 0.9805 - val_loss: 0.0911 - val_accuracy: 0.9583\n", "Epoch 332/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0812 - accuracy: 0.9648 - val_loss: 0.0909 - val_accuracy: 0.9583\n", "Epoch 333/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0713 - accuracy: 0.9727 - val_loss: 0.0899 - val_accuracy: 0.9583\n", "Epoch 334/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0681 - accuracy: 0.9766 - val_loss: 0.0907 - val_accuracy: 0.9583\n", "Epoch 335/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0658 - accuracy: 0.9805 - val_loss: 0.0906 - val_accuracy: 0.9583\n", "Epoch 336/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0804 - accuracy: 0.9648 - val_loss: 0.0912 - val_accuracy: 0.9583\n", "Epoch 337/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0693 - accuracy: 0.9766 - val_loss: 0.0907 - val_accuracy: 0.9583\n", "Epoch 338/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0850 - accuracy: 0.9609 - val_loss: 0.0900 - val_accuracy: 0.9583\n", "Epoch 339/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0879 - accuracy: 0.9570 - val_loss: 0.0897 - val_accuracy: 0.9583\n", "Epoch 340/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0743 - accuracy: 0.9688 - val_loss: 0.0909 - val_accuracy: 0.9583\n", "Epoch 341/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0791 - accuracy: 0.9688 - val_loss: 0.0913 - val_accuracy: 0.9583\n", "Epoch 342/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0717 - accuracy: 0.9857 - val_loss: 0.0900 - val_accuracy: 0.9583\n", "Epoch 343/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.0804 - accuracy: 0.9818 - val_loss: 0.0893 - val_accuracy: 0.9583\n", "Epoch 344/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0734 - accuracy: 0.9688 - val_loss: 0.0897 - val_accuracy: 0.9583\n", "Epoch 345/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0780 - accuracy: 0.9857 - val_loss: 0.0882 - val_accuracy: 0.9583\n", "Epoch 346/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0718 - accuracy: 0.9727 - val_loss: 0.0878 - val_accuracy: 0.9583\n", "Epoch 347/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0845 - accuracy: 0.9648 - val_loss: 0.0879 - val_accuracy: 0.9583\n", "Epoch 348/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0770 - accuracy: 0.9609 - val_loss: 0.0880 - val_accuracy: 0.9583\n", "Epoch 349/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0759 - accuracy: 0.9648 - val_loss: 0.0878 - val_accuracy: 0.9583\n", "Epoch 350/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0667 - accuracy: 0.9857 - val_loss: 0.0875 - val_accuracy: 0.9583\n", "Epoch 351/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0824 - accuracy: 0.9570 - val_loss: 0.0882 - val_accuracy: 0.9583\n", "Epoch 352/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0828 - accuracy: 0.9740 - val_loss: 0.0878 - val_accuracy: 0.9583\n", "Epoch 353/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0813 - accuracy: 0.9779 - val_loss: 0.0877 - val_accuracy: 0.9583\n", "Epoch 354/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0703 - accuracy: 0.9727 - val_loss: 0.0880 - val_accuracy: 0.9583\n", "Epoch 355/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0876 - accuracy: 0.9779 - val_loss: 0.0872 - val_accuracy: 0.9583\n", "Epoch 356/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0779 - accuracy: 0.9818 - val_loss: 0.0871 - val_accuracy: 0.9583\n", "Epoch 357/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0638 - accuracy: 0.9805 - val_loss: 0.0872 - val_accuracy: 0.9583\n", "Epoch 358/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0736 - accuracy: 0.9648 - val_loss: 0.0878 - val_accuracy: 0.9583\n", "Epoch 359/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0658 - accuracy: 0.9857 - val_loss: 0.0871 - val_accuracy: 0.9583\n", "Epoch 360/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.0885 - accuracy: 0.9661 - val_loss: 0.0871 - val_accuracy: 0.9583\n", "Epoch 361/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0826 - accuracy: 0.9779 - val_loss: 0.0862 - val_accuracy: 0.9583\n", "Epoch 362/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0727 - accuracy: 0.9766 - val_loss: 0.0858 - val_accuracy: 0.9583\n", "Epoch 363/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0821 - accuracy: 0.9779 - val_loss: 0.0854 - val_accuracy: 0.9583\n", "Epoch 364/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0755 - accuracy: 0.9896 - val_loss: 0.0843 - val_accuracy: 0.9583\n", "Epoch 365/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0719 - accuracy: 0.9779 - val_loss: 0.0847 - val_accuracy: 0.9583\n", "Epoch 366/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0673 - accuracy: 0.9818 - val_loss: 0.0845 - val_accuracy: 0.9583\n", "Epoch 367/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0790 - accuracy: 0.9818 - val_loss: 0.0840 - val_accuracy: 0.9583\n", "Epoch 368/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0711 - accuracy: 0.9857 - val_loss: 0.0836 - val_accuracy: 0.9583\n", "Epoch 369/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0845 - accuracy: 0.9740 - val_loss: 0.0836 - val_accuracy: 0.9583\n", "Epoch 370/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0780 - accuracy: 0.9688 - val_loss: 0.0839 - val_accuracy: 0.9583\n", "Epoch 371/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0642 - accuracy: 0.9766 - val_loss: 0.0844 - val_accuracy: 0.9583\n", "Epoch 372/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0777 - accuracy: 0.9740 - val_loss: 0.0842 - val_accuracy: 0.9583\n", "Epoch 373/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0777 - accuracy: 0.9740 - val_loss: 0.0845 - val_accuracy: 0.9583\n", "Epoch 374/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0674 - accuracy: 0.9818 - val_loss: 0.0838 - val_accuracy: 0.9583\n", "Epoch 375/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0853 - accuracy: 0.9661 - val_loss: 0.0844 - val_accuracy: 0.9583\n", "Epoch 376/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0781 - accuracy: 0.9779 - val_loss: 0.0836 - val_accuracy: 0.9583\n", "Epoch 377/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0748 - accuracy: 0.9779 - val_loss: 0.0835 - val_accuracy: 0.9583\n", "Epoch 378/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0766 - accuracy: 0.9857 - val_loss: 0.0822 - val_accuracy: 0.9583\n", "Epoch 379/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0813 - accuracy: 0.9570 - val_loss: 0.0832 - val_accuracy: 0.9583\n", "Epoch 380/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0637 - accuracy: 0.9857 - val_loss: 0.0831 - val_accuracy: 0.9583\n", "Epoch 381/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0788 - accuracy: 0.9661 - val_loss: 0.0835 - val_accuracy: 0.9583\n", "Epoch 382/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0870 - accuracy: 0.9740 - val_loss: 0.0830 - val_accuracy: 0.9583\n", "Epoch 383/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.0729 - accuracy: 0.9688 - val_loss: 0.0831 - val_accuracy: 0.9583\n", "Epoch 384/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0766 - accuracy: 0.9779 - val_loss: 0.0826 - val_accuracy: 0.9583\n", "Epoch 385/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0798 - accuracy: 0.9740 - val_loss: 0.0823 - val_accuracy: 0.9583\n", "Epoch 386/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0726 - accuracy: 0.9740 - val_loss: 0.0829 - val_accuracy: 0.9583\n", "Epoch 387/500\n", "3/3 [==============================] - 0s 7ms/step - loss: 0.0667 - accuracy: 0.9779 - val_loss: 0.0831 - val_accuracy: 0.9583\n", "Epoch 388/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0617 - accuracy: 0.9896 - val_loss: 0.0819 - val_accuracy: 0.9583\n", "Epoch 389/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0834 - accuracy: 0.9570 - val_loss: 0.0823 - val_accuracy: 0.9583\n", "Epoch 390/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0696 - accuracy: 0.9779 - val_loss: 0.0821 - val_accuracy: 0.9583\n", "Epoch 391/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0842 - accuracy: 0.9661 - val_loss: 0.0817 - val_accuracy: 0.9583\n", "Epoch 392/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0617 - accuracy: 0.9896 - val_loss: 0.0803 - val_accuracy: 0.9583\n", "Epoch 393/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0768 - accuracy: 0.9779 - val_loss: 0.0802 - val_accuracy: 0.9583\n", "Epoch 394/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0724 - accuracy: 0.9857 - val_loss: 0.0795 - val_accuracy: 0.9583\n", "Epoch 395/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0667 - accuracy: 0.9857 - val_loss: 0.0790 - val_accuracy: 0.9583\n", "Epoch 396/500\n", "3/3 [==============================] - 0s 7ms/step - loss: 0.0716 - accuracy: 0.9740 - val_loss: 0.0803 - val_accuracy: 0.9583\n", "Epoch 397/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0741 - accuracy: 0.9661 - val_loss: 0.0814 - val_accuracy: 0.9583\n", "Epoch 398/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0809 - accuracy: 0.9661 - val_loss: 0.0819 - val_accuracy: 0.9583\n", "Epoch 399/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0694 - accuracy: 0.9857 - val_loss: 0.0806 - val_accuracy: 0.9583\n", "Epoch 400/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0773 - accuracy: 0.9661 - val_loss: 0.0809 - val_accuracy: 0.9583\n", "Epoch 401/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.0704 - accuracy: 0.9857 - val_loss: 0.0795 - val_accuracy: 0.9583\n", "Epoch 402/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0654 - accuracy: 0.9779 - val_loss: 0.0796 - val_accuracy: 0.9583\n", "Epoch 403/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0592 - accuracy: 0.9857 - val_loss: 0.0788 - val_accuracy: 0.9583\n", "Epoch 404/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0667 - accuracy: 0.9740 - val_loss: 0.0799 - val_accuracy: 0.9583\n", "Epoch 405/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0732 - accuracy: 0.9779 - val_loss: 0.0792 - val_accuracy: 0.9583\n", "Epoch 406/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0663 - accuracy: 0.9740 - val_loss: 0.0797 - val_accuracy: 0.9583\n", "Epoch 407/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0652 - accuracy: 0.9779 - val_loss: 0.0794 - val_accuracy: 0.9583\n", "Epoch 408/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0735 - accuracy: 0.9740 - val_loss: 0.0791 - val_accuracy: 0.9583\n", "Epoch 409/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0685 - accuracy: 0.9857 - val_loss: 0.0777 - val_accuracy: 0.9583\n", "Epoch 410/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0602 - accuracy: 0.9857 - val_loss: 0.0777 - val_accuracy: 0.9583\n", "Epoch 411/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0721 - accuracy: 0.9818 - val_loss: 0.0768 - val_accuracy: 0.9583\n", "Epoch 412/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0688 - accuracy: 0.9779 - val_loss: 0.0769 - val_accuracy: 0.9583\n", "Epoch 413/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0721 - accuracy: 0.9779 - val_loss: 0.0769 - val_accuracy: 0.9583\n", "Epoch 414/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0572 - accuracy: 0.9896 - val_loss: 0.0766 - val_accuracy: 0.9583\n", "Epoch 415/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0684 - accuracy: 0.9740 - val_loss: 0.0775 - val_accuracy: 0.9583\n", "Epoch 416/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0680 - accuracy: 0.9740 - val_loss: 0.0778 - val_accuracy: 0.9583\n", "Epoch 417/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0591 - accuracy: 0.9896 - val_loss: 0.0768 - val_accuracy: 0.9583\n", "Epoch 418/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0538 - accuracy: 0.9857 - val_loss: 0.0771 - val_accuracy: 0.9583\n", "Epoch 419/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0811 - accuracy: 0.9740 - val_loss: 0.0772 - val_accuracy: 0.9583\n", "Epoch 420/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0587 - accuracy: 0.9818 - val_loss: 0.0770 - val_accuracy: 0.9583\n", "Epoch 421/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0696 - accuracy: 0.9818 - val_loss: 0.0765 - val_accuracy: 0.9583\n", "Epoch 422/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0598 - accuracy: 0.9818 - val_loss: 0.0768 - val_accuracy: 0.9583\n", "Epoch 423/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0585 - accuracy: 0.9857 - val_loss: 0.0763 - val_accuracy: 0.9583\n", "Epoch 424/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0763 - accuracy: 0.9779 - val_loss: 0.0760 - val_accuracy: 0.9583\n", "Epoch 425/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0636 - accuracy: 0.9857 - val_loss: 0.0753 - val_accuracy: 0.9583\n", "Epoch 426/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0682 - accuracy: 0.9740 - val_loss: 0.0759 - val_accuracy: 0.9583\n", "Epoch 427/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0754 - accuracy: 0.9740 - val_loss: 0.0756 - val_accuracy: 0.9583\n", "Epoch 428/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0736 - accuracy: 0.9740 - val_loss: 0.0753 - val_accuracy: 0.9583\n", "Epoch 429/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0702 - accuracy: 0.9740 - val_loss: 0.0758 - val_accuracy: 0.9583\n", "Epoch 430/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0632 - accuracy: 0.9818 - val_loss: 0.0759 - val_accuracy: 0.9583\n", "Epoch 431/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0693 - accuracy: 0.9779 - val_loss: 0.0759 - val_accuracy: 0.9583\n", "Epoch 432/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0637 - accuracy: 0.9818 - val_loss: 0.0752 - val_accuracy: 0.9583\n", "Epoch 433/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0582 - accuracy: 0.9896 - val_loss: 0.0745 - val_accuracy: 0.9583\n", "Epoch 434/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0629 - accuracy: 0.9857 - val_loss: 0.0739 - val_accuracy: 0.9583\n", "Epoch 435/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0710 - accuracy: 0.9740 - val_loss: 0.0747 - val_accuracy: 0.9583\n", "Epoch 436/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0672 - accuracy: 0.9779 - val_loss: 0.0747 - val_accuracy: 0.9583\n", "Epoch 437/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0586 - accuracy: 0.9818 - val_loss: 0.0749 - val_accuracy: 0.9583\n", "Epoch 438/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0570 - accuracy: 0.9857 - val_loss: 0.0747 - val_accuracy: 0.9583\n", "Epoch 439/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0644 - accuracy: 0.9740 - val_loss: 0.0750 - val_accuracy: 0.9583\n", "Epoch 440/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0598 - accuracy: 0.9818 - val_loss: 0.0751 - val_accuracy: 0.9583\n", "Epoch 441/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0497 - accuracy: 0.9896 - val_loss: 0.0744 - val_accuracy: 0.9583\n", "Epoch 442/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0579 - accuracy: 0.9818 - val_loss: 0.0746 - val_accuracy: 0.9583\n", "Epoch 443/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0738 - accuracy: 0.9661 - val_loss: 0.0753 - val_accuracy: 0.9583\n", "Epoch 444/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.0559 - accuracy: 0.9857 - val_loss: 0.0745 - val_accuracy: 0.9583\n", "Epoch 445/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0692 - accuracy: 0.9818 - val_loss: 0.0736 - val_accuracy: 0.9583\n", "Epoch 446/500\n", "3/3 [==============================] - 0s 10ms/step - loss: 0.0814 - accuracy: 0.9661 - val_loss: 0.0736 - val_accuracy: 0.9583\n", "Epoch 447/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0717 - accuracy: 0.9661 - val_loss: 0.0748 - val_accuracy: 0.9583\n", "Epoch 448/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0558 - accuracy: 0.9857 - val_loss: 0.0740 - val_accuracy: 0.9583\n", "Epoch 449/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0506 - accuracy: 0.9896 - val_loss: 0.0727 - val_accuracy: 0.9583\n", "Epoch 450/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0690 - accuracy: 0.9779 - val_loss: 0.0729 - val_accuracy: 0.9583\n", "Epoch 451/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0611 - accuracy: 0.9857 - val_loss: 0.0721 - val_accuracy: 0.9583\n", "Epoch 452/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0605 - accuracy: 0.9740 - val_loss: 0.0731 - val_accuracy: 0.9583\n", "Epoch 453/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0651 - accuracy: 0.9779 - val_loss: 0.0731 - val_accuracy: 0.9583\n", "Epoch 454/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0692 - accuracy: 0.9779 - val_loss: 0.0730 - val_accuracy: 0.9583\n", "Epoch 455/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0603 - accuracy: 0.9779 - val_loss: 0.0734 - val_accuracy: 0.9583\n", "Epoch 456/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0622 - accuracy: 0.9857 - val_loss: 0.0721 - val_accuracy: 0.9583\n", "Epoch 457/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0675 - accuracy: 0.9740 - val_loss: 0.0727 - val_accuracy: 0.9583\n", "Epoch 458/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0769 - accuracy: 0.9661 - val_loss: 0.0729 - val_accuracy: 0.9583\n", "Epoch 459/500\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "3/3 [==============================] - 0s 8ms/step - loss: 0.0692 - accuracy: 0.9740 - val_loss: 0.0725 - val_accuracy: 0.9583\n", "Epoch 460/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0548 - accuracy: 0.9896 - val_loss: 0.0710 - val_accuracy: 0.9583\n", "Epoch 461/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0623 - accuracy: 0.9779 - val_loss: 0.0711 - val_accuracy: 0.9583\n", "Epoch 462/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0789 - accuracy: 0.9661 - val_loss: 0.0716 - val_accuracy: 0.9583\n", "Epoch 463/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0657 - accuracy: 0.9740 - val_loss: 0.0715 - val_accuracy: 0.9583\n", "Epoch 464/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0620 - accuracy: 0.9818 - val_loss: 0.0719 - val_accuracy: 0.9583\n", "Epoch 465/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0717 - accuracy: 0.9661 - val_loss: 0.0725 - val_accuracy: 0.9583\n", "Epoch 466/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0605 - accuracy: 0.9779 - val_loss: 0.0722 - val_accuracy: 0.9583\n", "Epoch 467/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0496 - accuracy: 0.9896 - val_loss: 0.0716 - val_accuracy: 0.9583\n", "Epoch 468/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0640 - accuracy: 0.9779 - val_loss: 0.0709 - val_accuracy: 0.9583\n", "Epoch 469/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0744 - accuracy: 0.9661 - val_loss: 0.0711 - val_accuracy: 0.9583\n", "Epoch 470/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0585 - accuracy: 0.9779 - val_loss: 0.0709 - val_accuracy: 0.9583\n", "Epoch 471/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0509 - accuracy: 0.9896 - val_loss: 0.0700 - val_accuracy: 0.9583\n", "Epoch 472/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0684 - accuracy: 0.9740 - val_loss: 0.0708 - val_accuracy: 0.9583\n", "Epoch 473/500\n", "3/3 [==============================] - 0s 7ms/step - loss: 0.0509 - accuracy: 0.9896 - val_loss: 0.0697 - val_accuracy: 0.9583\n", "Epoch 474/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0590 - accuracy: 0.9818 - val_loss: 0.0700 - val_accuracy: 0.9583\n", "Epoch 475/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0690 - accuracy: 0.9740 - val_loss: 0.0702 - val_accuracy: 0.9583\n", "Epoch 476/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0566 - accuracy: 0.9818 - val_loss: 0.0699 - val_accuracy: 0.9583\n", "Epoch 477/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0629 - accuracy: 0.9779 - val_loss: 0.0696 - val_accuracy: 0.9583\n", "Epoch 478/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0544 - accuracy: 0.9896 - val_loss: 0.0687 - val_accuracy: 0.9583\n", "Epoch 479/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0474 - accuracy: 0.9896 - val_loss: 0.0687 - val_accuracy: 0.9583\n", "Epoch 480/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0699 - accuracy: 0.9818 - val_loss: 0.0680 - val_accuracy: 0.9583\n", "Epoch 481/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0580 - accuracy: 0.9740 - val_loss: 0.0695 - val_accuracy: 0.9583\n", "Epoch 482/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0525 - accuracy: 0.9818 - val_loss: 0.0707 - val_accuracy: 0.9583\n", "Epoch 483/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0750 - accuracy: 0.9661 - val_loss: 0.0710 - val_accuracy: 0.9583\n", "Epoch 484/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0818 - accuracy: 0.9661 - val_loss: 0.0703 - val_accuracy: 0.9583\n", "Epoch 485/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0719 - accuracy: 0.9661 - val_loss: 0.0704 - val_accuracy: 0.9583\n", "Epoch 486/500\n", "3/3 [==============================] - 0s 9ms/step - loss: 0.0528 - accuracy: 0.9857 - val_loss: 0.0694 - val_accuracy: 0.9583\n", "Epoch 487/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0692 - accuracy: 0.9740 - val_loss: 0.0692 - val_accuracy: 0.9583\n", "Epoch 488/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0623 - accuracy: 0.9740 - val_loss: 0.0697 - val_accuracy: 0.9583\n", "Epoch 489/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0661 - accuracy: 0.9740 - val_loss: 0.0696 - val_accuracy: 0.9583\n", "Epoch 490/500\n", "3/3 [==============================] - 0s 7ms/step - loss: 0.0493 - accuracy: 0.9896 - val_loss: 0.0680 - val_accuracy: 0.9583\n", "Epoch 491/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0518 - accuracy: 0.9818 - val_loss: 0.0685 - val_accuracy: 0.9583\n", "Epoch 492/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0590 - accuracy: 0.9779 - val_loss: 0.0688 - val_accuracy: 0.9583\n", "Epoch 493/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0615 - accuracy: 0.9779 - val_loss: 0.0683 - val_accuracy: 0.9583\n", "Epoch 494/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0561 - accuracy: 0.9857 - val_loss: 0.0676 - val_accuracy: 0.9583\n", "Epoch 495/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0611 - accuracy: 0.9818 - val_loss: 0.0671 - val_accuracy: 0.9583\n", "Epoch 496/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0617 - accuracy: 0.9779 - val_loss: 0.0673 - val_accuracy: 0.9583\n", "Epoch 497/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0464 - accuracy: 0.9896 - val_loss: 0.0667 - val_accuracy: 0.9583\n", "Epoch 498/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0478 - accuracy: 0.9857 - val_loss: 0.0671 - val_accuracy: 0.9583\n", "Epoch 499/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0601 - accuracy: 0.9779 - val_loss: 0.0670 - val_accuracy: 0.9583\n", "Epoch 500/500\n", "3/3 [==============================] - 0s 8ms/step - loss: 0.0449 - accuracy: 0.9896 - val_loss: 0.0660 - val_accuracy: 0.9583\n" ] } ], "source": [ "history = model.fit(X_train, Y_train, epochs=500, validation_split=0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The loss and accuracy of the training and validation sets can now be plotted as a function of the epochs of the model. The behaviour looks reasonable where there is no significant difference between the testing and validation data, and the accuracy is generally monotonically increasing, while the loss is monotonically decreasing." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pd.DataFrame(history.history).plot(figsize=(8,5))\n", "plt.grid(True)\n", "plt.xlabel('Epochs')\n", "plt.title('Evolution of sequential neural network for irises');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model accuracy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally we can use the testing set to determine the accuracy of the model. This can be done using the `evaluate` function for the model. As can be seen the accuracy for the test set is consistent with the accuracy of the validation set." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 9ms/step - loss: 0.1301 - accuracy: 0.9667\n" ] }, { "data": { "text/plain": [ "[0.13010245561599731, 0.9666666388511658]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(X_test, Y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also investigate other measures of the accuracy using the actual classifications of the model. The model predicts the probability of a particular classification. To find the actual classification we then just need to find the column in each row with the maximum probability using the function `argmax()`. Recall that for a particular species $TP$ is the number of true positives, $FP$ is the number of false positives and $FN$ is the number of false negatives. Then the precision, recall and F1-score are respectively\n", "\n", "$$ P=\\frac{TP}{TP+FP}, \\quad R=\\frac{TP}{TP+FN}, \\quad F_1 = \\frac{2PR}{P+R}. $$\n", "\n", "The precision gives an indication of what percentage of the predictions of that species are correct, while the recall gives an indication of what percentage of the actual samples for that species are predicted correctly. The F1-score gives a weighted average of the precision and recall. For a perfect model all of these would be 1.\n", "\n", "The support is the number of actual samples for that species.\n", "\n", "As can be seen, the model gets the prediction of setosa correct, and the precision for virginica and recall for versicolor." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:AutoGraph could not transform .predict_function at 0x17eb52ee0> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", "WARNING: AutoGraph could not transform .predict_function at 0x17eb52ee0> and will run it as-is.\n", "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n", "Cause: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n", " precision recall f1-score support\n", "\n", " setosa 1.00 1.00 1.00 13\n", " versicolor 0.91 1.00 0.95 10\n", " virginica 1.00 0.86 0.92 7\n", "\n", " accuracy 0.97 30\n", " macro avg 0.97 0.95 0.96 30\n", "weighted avg 0.97 0.97 0.97 30\n", "\n" ] } ], "source": [ "proba = model.predict(X_test)\n", "print(classification_report(proba.argmax(axis=1), Y_test.argmax(axis=1), target_names=target_names))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The overall accuracy can also be investigated by plotting the confusion matrix for the classsifications. Here we see there is only one incorrect prediction of versicolor, when the species is actually virginica." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plt_confusion_matrix(cnf_matrix, cats, method):\n", " \"\"\"\n", " Plots a sklearn confusion matrix with categories 'cats' for a classifier 'method'\n", " \"\"\"\n", " # write the confusion matrix to a dataframe with row and column names as the categories, which are already defined\n", " cmatrix = pd.DataFrame(cnf_matrix,columns=cats,index=cats) \n", " f, ax = plt.subplots(figsize=(7,6)) # initialise the plots and axes\n", " sns.heatmap(cmatrix, annot=True, linewidths=.5) # plot the confusion matrix as a heatmap\n", " plt.title('Confusion matrix for '+method) # add a title, + concatenates two strings\n", " plt.ylabel('Actual label') # add a ylabel\n", " plt.xlabel('Predicted label') # add a xlabel\n", " # adjust the bottom and top of the figure, so we can view all of it\n", " bottom, top = ax.get_ylim() # get the y axis limits\n", " ax.set_ylim(bottom + 0.5, top - 0.5); # adjust the y axis limits\n", "\n", "cnf_matrix = confusion_matrix(proba.argmax(axis=1), Y_test.argmax(axis=1)) # create a confusion matrix for our actual and predicted values\n", "plt_confusion_matrix(cnf_matrix, target_names, 'Neural Network')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a sequential model for the same data set with one hidden layer with 50 nodes and a ReLU activation layer. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compile this model with a learning rate of 0.05 and a decay rate of 0.001." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train this model using the same parameters as for the previous model." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the evolution of the loss function and accuracy, for the validation and testing set." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How does the rate of convergence and accuracy of this model compare with the model covered earlier in the notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }