{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

Learning To See

\n", "\n", "

Part 10: World Domination

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import Data and Support Functions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "from supportFunctions import *\n", "import cPickle as pickle\n", "import time, itertools\n", "\n", "pickleFileName = 'data/fingerDataSet' + '.pickle'\n", "pickleFile = open(pickleFileName, 'rb')\n", "data = pickle.load(pickleFile)\n", "pickleFile.close()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#Return to just using 3 images at training data:\n", "trainingExampleIndices = [7, 30, 46]\n", "trainingExamples = [data[index] for index in trainingExampleIndices]\n", "trainX, trainY = extractExamplesFromList(trainingExamples, whichImage = 'image1bit', dist = 4)\n", "\n", "#And two for testing:\n", "testingExampleIndices = [40, 41]\n", "testingExamples = [data[index] for index in testingExampleIndices]\n", "testX, testY = extractExamplesFromList(testingExamples, whichImage = 'image1bit', dist = 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Search for 2 pixel patterns, by considering all possible rules made by combining 2 pixels." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time elapsed = 2.212 seconds.\n" ] } ], "source": [ "rules = []\n", "numErrors = []\n", "startTime = time.time()\n", "\n", "for i in range(81):\n", " for j in range(81):\n", " if i != j:\n", " #Not i and not j:\n", " yHat = np.logical_and(trainX[:,i] == 0, trainX[:,j]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, 0, 0])\n", "\n", " #i and not j:\n", " yHat = np.logical_and(trainX[:,i] == 1, trainX[:,j]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, 1, 0])\n", "\n", " #not i and j\n", " yHat = np.logical_and(trainX[:,i] == 0, trainX[:,j]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, 0, 1])\n", "\n", " #i and j\n", " yHat = np.logical_and(trainX[:,i] == 1, trainX[:,j]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, 1, 1])\n", "\n", "timeElapsed = time.time()-startTime\n", "print 'Time elapsed = ' + str(round(timeElapsed, 3)) + ' seconds.'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "478" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.argmin(np.array(numErrors))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "25920" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(rules)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "25920" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(numErrors)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[1, 40, 0, 1]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rules[478]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n7v5Akq0kN67r+cbEOcl1SX7e3b/o7peTfDvJDRueaZzu/mV3P7Jz/zc5+z/R1ZudaqaqOpnkE0nu\n2vQsk1XVO5P8eXffkyTd/Up3/8+Gx5rqsiTvqKqtJFckeWFdTzQpzlcnefacx89FdPZVVe9N8qEk\nP97sJGN9I8lXknhJ0v7el+Slqrpn5xTQnVV1+aaHmqa7X0jy9STPJHk+ya+7+0frer5JceYQqurK\nJKeT3LxzBM05quqTSV7c+Smjdm7sbSvJqSR3dPepJL9N8tXNjjRPVb07Z3+avzbJVUmurKrPrOv5\nJsX5+STXnPP45M7X2GXnR6rTSb7V3d/d9DxDXZ/kU1X1dJJ/SfKXVfXNDc801XNJnu3un+w8Pp2z\nseaNPpbk6e7+VXe/muS+JB9Z15NNivODSf6gqq7duQJ6YxJX2Pf2T0ke7+7bNz3IVN19a3df092/\nl7N/l+7v7s9ueq6JuvvFJM9W1R/ufOmjcRF1L88k+dOq+p2qqpzdT2u7cLq1rg0fVne/WlVfSPLD\nnP1H4+7udsV4l6q6PsnfJHm0qh7O2fOpt3b3DzY7GRe5m5LcW1VvS/J0ks9teJ5xuvuBqjqd5OEk\nL+/89851PZ9f3wYYaNJpDQB2iDPAQOIMMJA4AwwkzgADiTPAQOIMMJA4Awz0f4x8KH3OVXjnAAAA\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ruleVector = np.zeros(81)\n", "ruleVector[1] = -1\n", "ruleVector[40] = 1\n", "\n", "fig = figure(0, (6,6))\n", "imshow(ruleVector.reshape(9,9), interpolation = 'none', cmap = rwb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our first two pixel rule! Examples with ones in the blue spot and zeros in the red spot will be labeled as fingers" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix:\n", "[[ 362 133]\n", " [ 345 7027]]\n", "Recall (TPR) = 0.731 (Portion of fingers that we \"caught\")\n", "Precision (PPV) = 0.512(Portion of predicted finger pixels that were actually finger pixels)\n", "Accuracy = 0.939\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Try our out rule on training Data:\n", "rule = lambda X: np.logical_and(X[:, 1] == 0, X[:,40] == 1)\n", "\n", "fig = figure(0, (14, 8))\n", "testLogicalRules(trainingExampleIndices, data, fig, trainX, trainY, rule)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And testing data:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix:\n", "[[ 254 87]\n", " [ 237 4296]]\n", "Recall (TPR) = 0.745 (Portion of fingers that we \"caught\")\n", "Precision (PPV) = 0.517(Portion of predicted finger pixels that were actually finger pixels)\n", "Accuracy = 0.934\n" ] }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = figure(0, (14, 8))\n", "testLogicalRules(testingExampleIndices, data, fig, testX, testY, rule)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generalizes Well! Now 3 pixels:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time elapsed = 74.524 seconds.\n" ] } ], "source": [ "import itertools\n", "\n", "rules = []\n", "numErrors = []\n", "startTime = time.time()\n", "\n", "for c in itertools.combinations(range(81), 3):\n", " i = c[0]; j = c[1]; k = c[2]\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==0), trainX[:,k]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 0, 0, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==0), trainX[:,k]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 0, 0, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==1), trainX[:,k]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 0, 1, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==1), trainX[:,k]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 0, 1, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==0), trainX[:,k]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 1, 0, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==0), trainX[:,k]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 1, 0, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==1), trainX[:,k]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 1, 1, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==1), trainX[:,k]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, 1, 1, 1])\n", " \n", "timeElapsed = time.time()-startTime\n", "print 'Time elapsed = ' + str(round(timeElapsed, 3)) + ' seconds.'" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "218858" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.argmin(np.array(numErrors))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[9, 40, 53, 0, 1, 0]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rules[218858]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "682560" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(rules)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "rule = lambda X: np.logical_and(np.logical_and(X[:, 9] == 0, X[:,40] == 1), X[:, 53] == 0)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ncZIPJnl6w/OMU1XXJPlCkhu6+wNJtpLcsq7XGxPnJDcm+Wl3/6y7X0vyzSQ3b3imcbr75939+M7j\nX+Xs/0TXbnaqmarqZJJPJLl307NMVlXvTPLn3X1/knT36939vxsea6orkryjqraSXJXk5XW90KQ4\nX5vkhXOevxjR2VdVvTfJh5L8cLOTjPW1JF9O4keS9ve+JK9W1f07p4DuqaorNz3UNN39cpKvJnk+\nyUtJftndP1jX602KM4dQVVcnOZXktp0jaM5RVZ9M8srOdxm188HetpLckOTu7r4hya+TfGWzI81T\nVe/O2e/mr09yTZKrq+oz63q9SXF+Kcl15zw/ufM5dtn5lupUkm9097c3Pc9QNyX5VFU9l+Rfk/xl\nVX19wzNN9WKSF7r7RzvPT+VsrHmzjyV5rrt/0d2nkzyY5CPrerFJcX4kyR9U1fU7V0BvSeIK+97+\nOclT3X3XpgeZqrvv6O7ruvv3cvbv0kPd/dlNzzVRd7+S5IWq+sOdT300LqLu5fkkf1pVv1NVlbP7\naW0XTrfWteHD6u7TVfX5JN/P2X807utuV4x3qaqbkvxNkieq6rGcPZ96R3d/b7OTcYm7NckDVfW2\nJM8l+dyG5xmnux+uqlNJHkvy2s5/71nX6/n1bYCBJp3WAGCHOAMMJM4AA4kzwEDiDDCQOAMMJM4A\nA4kzwED/D9PmeIGj8QxOAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ruleVector = np.zeros(81)\n", "ruleVector[9] = -1; ruleVector[40] = 1; ruleVector[53] = -1\n", "\n", "fig = figure(0, (6,6))\n", "imshow(ruleVector.reshape(9,9), interpolation = 'none', cmap = rwb)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix:\n", "[[ 327 168]\n", " [ 73 7299]]\n", "Recall (TPR) = 0.661 (Portion of fingers that we \"caught\")\n", "Precision (PPV) = 0.818(Portion of predicted finger pixels that were actually finger pixels)\n", "Accuracy = 0.969\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy0AAAE9CAYAAAAGWY20AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8FtW9/z+TfQ8kQDaWQICwg+y4KwiKVqlWrfZatdd6\nW23rvb/eW++97W3v7Xrb2s22ttS123WrCiguFXAXCARZAwEMQbKHhOx7Mr8/8iTMfOdkzjxPnoQn\n+nm/XrzImTlzzpkz88zMOef7+X4N0zRBCCGEEEIIIaFK2LluACGEEEIIIYS4wUELIYQQQgghJKTh\noIUQQgghhBAS0nDQQgghhBBCCAlpOGghhBBCCCGEhDQctBBCCCGEEEJCGg5aCCGEEEIIISENBy2E\nEEIIIYSQkIaDFkIIIYQQQkhIE3GuG0AIOUtCQoKpyxMeHm5Lm6bzkIgI+0/bMAxHns7OTls6MjLS\nlu7q6tI1RVl3d3e3a7mqumV7VWXLclWo6pLHtba2OvLExsZqy5ZtlP3T3t7uOEZeq56eHm3dTU1N\njjzR0dF+16W6Nqr6Jao+FDzY2tp6n7YgQgghJIhwpYUQQgghhBAS0nDQQgghhBBCCAlpOGghhBBC\nCCGEhDTUtBASQkjtSViYc15BbpP6EMCbHkRqIGQ5Kh2MF2S5KqQ+xIv+QtUXso2qNsuyPWg2lEgN\nixeNjWyzSlPiRQMkUZ2nrEvVp16QxwVaDiGEEBJMOGghhBAyIomLi7ONqHSDftVAUzdIk2lZpmoA\n6cXhga4MOXjVDR5VkwXNzc22dFxcnC3d0tJiS0uHD4DzfFWTB1ZUTiJk21X1WPHiBEQ3IaBy7tHW\n1uZaZlRUlN/tkOcm29HR0RHY7A8hxAHNwwghhBBCCCEhDQcthBBCCCGEkJCGgxZCCCGEEEJISENN\nCyEhhBd7eYkXobTKxl7azHd0dNjSKptwLxqBQM7Bi9bAi1MCFbJ+le2/F/G5znY9UMcFshwv7fPi\nlEB1DkOhxziX+KtH8eI8wd/r6OVe0f1uVL81mUd3XVRlyG1enFtIdH0o04E4ifDy+9NdF4WWRFtG\nIL9pnZaGjisIGTq40kIIIYQQQggJaThoIYQQQgghhIQ0HLQQQgghhBBCQhpqWggJIaQNuipOQCB2\n6SqdhLRF96J3CMRe24teRVWXF22B7B+VXb8sx4uuQXWeuqCZXvpGVUawrmcgugBVXV70MyOF4QiU\n6UXTotvvJbhqIG2X90kgOix/dUKqe1PWE4huyt8+VaE732CUMZJ/L4SEOvx1EUIIIYQQQkIaDloI\nIYQQQgghIQ0HLYQQQgghhJCQhoMWQgghhBBCSEhDIT4hIYxK9OlF+CoFpVFRUY487e3ttrSXIIe6\nerwSSF1eUDku8IIXoXAgom4vAR8lqrqluFcl9vUS5M+LyH4kB5fUiaS9OHzw9/y9CPF17fRSp78B\nK1XlBsMxgRdnDrpjdPUGEvRUOuFQPVNkwMlAnjuyDArvCRk++GsjhBBCCCGEhDQctBBCCCGEEEJC\nGg5aCCGEEEIIISENNS2EhBC6gI+A07Y7JibGkaezs9OWVmla2traXOuOjIx0byy8BTAMJICdapsX\n23GVXb+X9nhpoyzbi55C2tlLe3jAmzbByzlI+3xVHi/2+MEIBDhc6LRRuuCKgP+6GC86EH91Dqoy\ndcFevQRN1Z2LvD+96KBknkB0If72udc8/qLT2ngJ+hksPR4hRA9XWgghhBBCCCEhzZCvtMTGxtqm\nKqyzFP7OnKhmkgItyx/8mTXTzcLJWRpr2fJYmTcQry0D4Ta76+9MuXW2Tp6DvGa6mT23/vBnplvW\no/EqtaO5uXmFWwZCCCGEEHLu4EoLIYQQQgghJKShpoUQQsiIRKdBkHoDGZtIdYxcpQ0ktonUg0mN\nWSAaDtkuufKs0utILZtsR3R0tC2tOje5Sq1bifeiT5PIlX/Vyri8lvIYqdfyorfTXVsvWiNqWggZ\nPjhoISSE0JkIAs6XpOoFL4+THysqdB9rgLuJptdyAecHRiBCeNU2VV1eRL/yQyQhIcGRR26TDhCk\nYwMAqK+vt6VVzg3ktfHy0af6UPJyjQMR2Q+l6S0hhBDilSEftMiPCOuLXTfrodNsWPMPxuOLvy9l\nf2beBqM70c0A+uPVRzcb5HYOuo9ka1p+lPnrech6vKxH9qXb7KU81svHLSGEEEIICU2oaSGEEEII\nIYSENJxuJoQQMiLRrT4HYjIXSAwRib8rzKo6ZBm6MlWr+nKbTMtz9RKbSdculblqMGL/6LxpetGW\n+Ouh04spaSCaJ0JIYAz5oMXN1azux+2PeC+YDwrdS8ztgSsfaLqHsz9ma/68tGRefx6s/tZr3e/m\n0lmVdguQpjsHiXW/v8eGCl5MJL0ElZN4yaN7GQNOYa8qsKUk0OCEXn53XgK9yWeQF8Hy+PHjHXkm\nTJhgS0uNS0NDg+OYwsJCW7qmpsaRJ5CAdiq83OPBCEhICCGEnAtoHkYIIYQQQggJaThoIYQQQggh\nhIQ0HLQQQgghhBBCQppzqmnR4U/gsEDiRwyELtCVP66ZByPq1OljdPoQt3a4tWswwkLZRp1rYXkO\nwdK0yL4YjOtpQkho4vb8AAIL6jgcQnwvgm9Zhjw3L0J0mSc2NtaWTklJsaUTExMdZcj4Q6dPn7al\nm5ubbWnVufsb1FF1Lv46IghEBybr9XJd/NG8EkIGB72HERJC6GLzAM6Pl0C85qiQAR9VnoTS0tJs\naSlOB5yC9OrqakeexsZGbXu8vPy9DNzluasmUqRDgYsuvsiR57e//I29HHFpIhTzM13i0iQrglYG\nIsQP1iSNlz5mxG9CCCGhAKefCSGEEEIIISENBy2EEEIIIYSQkGbYzcOspga6wE5DGVvDzU5ZF1tE\nmmZY26mzh3YzZxmsHbTb8UMZx8YNWa/OLtufGDhufa2zb6bJCyEjH2nqp9MjBiMGTSDPUp12IhD9\nhe7ZqqonIzPDlj68v8CWliaPABAuzB7nLphrSxcVFdnSXmJLybRO+zhQuVbc3st96J77XjQtsh4v\n8a0IIcGBmhZCQhgvHzOqF6uXCQDdh9SY1FTHMQVHjtjLKDziyCM/ctasXePIU1VVZUurPri8CKK9\nfDB4ccqQmZVpS//mV79x5IGoPlw2WfE9HCHyxCY6r2cgwm8vQSG9iIhVUFhMCCEkFKF5GCGEEEII\nISSk4aCFEEIIIYQQEtIMuXmYm5mKv2YRbmYeOhegXkwn+giGj30v+waLP3FZdPutZfmjw5Ho8urs\nkt10KTqdivWcdO0YyutCCDk3DIcpm5f4KNKFtswjn78y1kmw2iGfgzk5ObZ0QZhd0+IweVSQnp5u\nSxcXF9vSgZh6eonTonsfSJftwWiHl/eEl+tACAkO1LQQEkLIF6CXF68KLy9f+YEnP7SmTLV/4ABA\n2ImT2rqltuO1l19zZEkcZQ9iF6h2x4umReYJD3cOnPPy8u15vIxpPeTpEnniAtTu6I4BVOfp/Hjy\nUpe85wYTIJgQQggJFjQPI4QQQgghhIQ0HLQQQgghhBBCQpph17RYzUB0fud1ZhJW3+6dnZ2uZblp\nKbz4u/dalq7Nbu5EdaYuOrOgyMjI/r9lf+h82FvTUVFRtn06sxNr2dHR0a716vrHWpeuXmlSZDVj\n0elfqGkhZOSji/Pkjx6vD53LZ+tzFlDHGBkzZowtLU0vm5qabGmVCZ7cJp+l8nmoakeYMIV8ccOL\njjw2PDwWX3/1dVt69JjRtrR89wB680+5X3Uucpt818hrq+rT9vZ2v9qhQncPyfcnISR4cKWFEEII\nIYQQEtJQiE9ICOElsJ+cPVbNbMpZSS/CbcCe5/XXtzmO8SRQlyiOkbOR0vOPCi8BMlX9JfsiKSnR\nkccwmhzb/EaxELp0yUJRT4Ejj5fZfy8rBl5WjGX/qGaFA3EMQAghhAw153TQ4iVqtxuqjzWvZQ/G\nXbBbXaNGjbLtmzlzpi0tTQuOHj3a/7eMEq77CJFpa9nSdEDnhtH6MSPbKOtx+4DSmdbJJXs3Ewfd\nUr3bdWIUb0IIIYSQjw9caSGEEDIi0ek83GI5DbRNlqGLwzF33lxHme+9/d4ALe6r1J6cv3C+I4t1\nQgvQTx6pJmriY+LtGwJZNBNtvf6m623pLd1b7FUoJgR1cbJkev4CZ3+8ufVNv9o5ZdoUR5bKykpb\nWqe59DKBqYs9RggJHvy1EUIIIYQQQkIarrQQEkJ4MWP0EoBSN1sMOGcIpfZjKKUMgXh1UhFIf6Vn\nZDjbg5KA6tdRUWGf2fUyK6uaMZfnoConkFWFQGbFCSGEkHPBkA9agqklkfuDFanZXw2LxOp6cXJ2\ntm3ftjfftNcljr326qv7/96xY4dtX2trq2u9bm6LvXy0WnFzvaxzI2pF6oxkO/xxc+2vy2ev5RJC\nCCGEkJEFzcMIIYQQQgghIQ3NwwghhIxIdCL6QFbR5UqyTEdG2l+bbytE9/66Bh8/frxjmxTiyxVv\nLyvgcXFx/jXEA40Njba0zmOkCrnyHZ9gdxigFN3r+lTsP3asyJElOTnBltb1oer+8cdqgRASXLjS\nQgghhBBCCAlpQnqlRRc4zjorotMwDEbjoBMNjx0zpv/v9/J22vaFi0mobhEuZfOmzf1/z54327bv\n5MmTrvW6nYM/OhSJzg2kLMsfbZEUe0usZfkTH0bul8d6ESmHAvKcZMwcwBmIUXVtAwm6GBMT47md\ng8VLMEmJLtYQMJCw3J7esWOXs2y/WwOHQO2Syy9xZDnYdlC0RS98V10reT1VQSG9uGuVeVSxrkL1\nt0EIIeSTDVdaCCGEEEIIISFNSK+0EEIIIQMhVyLlqqOX1Tm5sqQrw+otEgjQNbg4xrri3keC0F/I\nFW0v2omkpCT/26ahtrbWtR2qlTqZR/bphAkTbOlqo9r/holqr7nmSkWmd12L0OmGAP39wZVKQoYO\nrrQQQgghhBBCQpqQitOiwx9Nhy6v27G6mRS5PyMr82zeD0+IhoiyXSbH5AyeTlsicYu14s910Olh\n3GbW/O13LzNbqnp06OoZKbNhgQYIDCTQoEo/EwxUvoWSg+BxSIVK35OZmWlLG0ad33V7oeSUM0Cl\n1O540asEK6aQl4CiKs9PXgJZEkIIIcMN30aEEEIIIYSQkIaaFkIIISMSnZ4gkFUj3TGxsbH+NNEb\nisU1XbwYLytyCQkJ2jz+0tDQYEsHsqobFWVf1d21a48tHZA3P0Fzc4tjm04H5GUFXmd5QAgZOoZ9\n0OKPKZEOa34vgsuB0JmDybRbcDFtUDG53/KMlO5H/TVpsu7398Fq7Uudq+FgPqT9MfGT5y/bad0v\nTZ10xxJCCCGEkNCF5mGEEEIIIYSQkIbmYYSEMKrAnYEItVXlyOCSg1mtdCM4snI1Tne1ztr2Hyiw\n5xmittTU1Di2ydVTLyt8quvgj8MKf8r2cn8N1X1BCCGE+AMHLYQQQkYk0nS1vb3dlpYDMC8e8nQx\nReLi4vxpoidUQ9lUjdmyF/PqodDfNDU12dJy4kBlxizbJttlGPVBat1ZSktLHdt0HjnlfjmxA1DT\nQsi5ZMgHLW66BH/d8g5WAzMQuplEnTAzSM1AS4tTOGhFJzq1Pjx1bov9uS4St7J1LzCdTsVats5t\nsT9um4fKrSwhhBBCCBl6qGkhhBBCCCGEhDQ0DyMkhPHigtOLOYbKzEEiTWuGEi+uZ+V5qfQX0twn\nPT3dkSdopieimy+5/BJbenfnbschgZiOqFYB5SqrqlzdSizgTVPjpd8JIYSQ4YYrLYQQQgghhJCQ\nZtg1LVbkbKtuFtBNe+KvdsK6X6edCCSoVyDoZrp1GiBr/+m0JV68CA10rD+xVXR4EXH2obsu1mN1\nKxTUtBAy8tE913TvAVUeiXzuDMXKk6oFsl63uFSAM2AjAGze/KotHQw/cP48s/uQz+rMrCz7flQM\nvmGCxsZGxzZ/34uqFWHd/cJ3CyFDB1daCCGEEEIIISENBy2EEEIIIYSQkIZCfEJGGF5MXryYNLq5\nmx5qpGOAjo4O7TGq84yOjrKlCwoKB9cwPygvK7elVWZDXtx0ezEnCcTMSWVuG4jbeMahIIQQEgoM\n+aDFLVCX7oWpsz+1fpjpPtLkR5G1LPkBpYsIPVyaFn/ikgDuHpnkB5U8Z+t+t34G3PUwOi9Hur61\n5vcntow8Vmer7MUOmxAysghEf6h7z8jB37kaxOliT0VHRzuOGYpXla4dqvdQRIT9+ZuXl29LB0Nr\nI4foo1pb/S4jkMkeCTUthAwdNA8jhBBCCCGEhDQctBBCCCGEEEJCGmpaCAlhvGgXvLjlVJksSLOX\nqKgoR56hwkuwS4mqfcnJyfYNRo0jz1DNzJw5c8aW9mI25MXcRHU95bXykkfVHi/3jj8uzgkhhJDh\n4pwOWvx9ObrZkg7GzlT30SBf/tI+dzBYPzPGauLU+HOOunNwK0v3wetWlr8xD9xsiHUfWJ2dnQPW\no+sraloIGfnonjdyIKeK9SWfI7pjdPHEgoVOSymfhwkJCYpSKoPdLIc+1MugNjLSHkMmKONg8Qif\nO2emLd3VVew8JIjfHAPloeMKQoYOmocRQgghhBBCQhoOWgghhBBCCCEhzZCbhw3GLEu3dGvdr4qR\nYEUutVvTuhgR0hzAMIJn+289Q51Zlm5p280FtM7lr8psYiCc/XG2HU5TuoFdK+uQZUlNgyzLes46\ncziahxFCCCGEjBwoxCckhPASm8dLHi+2/PK42NhYz+0cLDExMbZ0fX29I488T5WteGJiYnAb5oJU\nMowWcZVUBBI4Mli4xW1yw4tYP1TQTUYEMjmhO//h0rTIuCutIu6IbNe4ceMUpXw46HbIs00Wk0Wy\nv1RONiZlZ9vSYdg36HZJTp+2O+HwElxVPhe9XOtQ/j0Q8nGHvz5CCCGEEEJISMNBCyGEEEIIISSk\nGXZNi5tLW3/d5brl1+lBrGXp2uFl+TsYSLeQg2Ewbhfl8rfOpaOblkbXLjfzDZnXTUsj8+vawSV+\nQgghhJCRAzUthIQQ0rmAaoDsJS6AF52ELDs+Pt5LE4OC1M+ozkFuUznMGDVqVHAb1odiLH3egrli\ny0ltMV4Gx7oJFlUeL7b2gd47/jpEIYQQQoYDDloIIYSMSOTgTbdKrEIXxFGugA9X8EA5sG9sbLSl\n5blmZmYOSTvkkFV3/tHRTu+ae/bYhfcBhWcWl3LhkoW29JGmI/bsimuvE95L5wdNTU2OMuT9QM+U\nhAwftJEhhBBCCCGEhDQhrWnxJ9aGv2W5oSvLn5gm/uCvy1k3sxI33Ym/5QarTSoGo2lxq9tfvRQh\nhBBCCAlduNJCCCGEEEIICWmoaSEkhPAiuNbZ4Kvo7OzU5pH226pSZWu8rDmqmldQUGhLJybGOfLI\nNkdFOW3lx44d66EF/qNa05tS32BLS8cAqusgVxK9rHiqVoVlOV6uebDuneHScASCrv1e9Cg6XYwX\n5xhDwZgxY2zpyspKW1qe+tPPPOcoYyhmJXWr2CptjWHUBb0dNSKYpBfPlDoPpF4sFEL590DIxx2u\ntBBCCCGEEEJCmmFfabHOfuhmIeUMl9zvNuOh8yLj1g5dWUOlj0hMTPSrHrdzkjOMOq2Jdb+//WHN\nL6+ZnNmVs5T+aJ507bLW5Y8eihBCCCGEhDZcaSGEEEIIIYSENNS0EBJCBKJpUSFXw1SaFll2c3Oz\nvn3aHN6Qi4hxcU5Ni4xLERMT7cjz1NN/s6WDNQujOk/ZPzotBBCYFz/VNfeijfGymujl3hmM58Xh\nRrf6Lld2VX2ru0a6vg+W9kuSkZFhSx86dMi9HUH4cXYrFqBvu+1WsWWjLRUbG2NLHzhQMPiGeKCh\noUGfSaD7jXj5vcp7iJ4pCRk+zql5mE4U6o/bWn/NfdzcJetefNIEKlgkJCTY0rJ/5MPSn3MO5oeI\nbJe1P/x1Wy0J1jUejKtlQgghhBASWtA8jBBCCCGEEBLScNBCCCGEEEIICWmoaSGEEDIi0elPvGgU\n5DYvuh8d/qocVFaxL7ywyZYePTrJlg5GOx3tUGxrb7fHI5J9mp6ebi/DqHeU4bcxruKAS1deakvv\n6thlS3u5jv5qWgKBGhdCho4hH7S4aQd0D12daNV6vAz0Jl3+Sqz6EJ12RNLe3u66P1CkGFmeg65d\n/uAm+JYaHn/ErToBuDwH2fduWiN/XEDrXk4j5cXi5cNE9aKV10EVEE/2QWtrq5+tCx6pqamObbI9\nsbGxjjzDeRmlls3LPSTzePloVmnm5P2rehZ4qUsepypH9+wkhBBCzgU0DyOEEEIIIYSENDQPI4QQ\nQgj5GHPPttWDdpnZ/MeM2//4xz/+SW5PTk5OUuVX0d3d3d3U1KT3rz/MhIWFGVFRUVHh4eHhET7T\nhO7u7u6urq6utra2oTGvUZCQkBDf09PT09LS4tn0IZBjRioctBBCCCGEEL+JiIgI7+7udgqZBuYN\nAJcPVXsCJT4+/r6mpqZfqPYZhlEza9asqw8dOrRzKNswYcKE8c3NzacAICMjI6O8vLyib194eHjY\npEmTJhUVFZ2wHjN9+vRpzc3NRwFg7NixY6urq08PZRvPNedU06KLO6KLpWE93t84JFatgP9izuAL\nIAF9IDR/RIPSLl5np26tW2e7LzU91v26gHtyv9QiWa+L7n5w08forn8oB8yzotIlyOuh+p140TfI\n4+Rk0o03Xu845tlnn7elVSorL78OKQcpKCh05Jk4McuWzszMcuT52c/us2/4f99w5OkWDQpXNFrm\nWXnppY48XV27bWkvmhbds8Urut+Rqj2q9nmpf6T8NgC9Vs1Ln3gJ+GlFFah1KJBNTUqyT2a3tbXZ\n0vff/6/OQv73AVuyR9znpriN3nprm6OIxsYfu7ZL9dsdCkpLSm3pQDSeuvvBy+9jpOghh4uenp6e\nO+6449/k9ieeeOKnAJruuOOO/7Fub2lp+WjYGhcAGRkZH+Tk5Hyttra2dsKECRPefvvt21tbW28p\nKCjYccEFF9z03nvvPTtUdZtnb8AWw3KjRUdHR/X09NSfOHEiBsJfhuWYZuMTcHNypYUQQgghhPhN\nT0+PCeABud03aGl5/PHHHftCmVmzZtVs2bLlXV+yAMBrhmFsAvDk+++//wsAQzZoKSkpKZ0wYcKE\ntra2trKysv4VE99gJEZ1zLFjx45PmjRpUlNTU1NVVVXtULUtVKAQnxBCCCGEEAXh4eF9A5WsmTNn\nzhjKuk6dOlXir4nXyZMnP6qpqfnYD1gADloIIYQQQsgwYRjGA4ZhmDNmzMidOnXqPxqGUWcYhgkA\nmZmZGYZhmH1pxbGvGIZhLlmyZLHcd+GFF15gGMZHhmG0+8poTEpKenWw7e3q6uq3RRw1atQo675J\nkyY9YxhGrWEYnYZhdBiGUZOTk/O/qnKWLFmy2DCMcsMwWnz56zIyMjaHh4eHAcCYMWNS5bknJiY2\ntLe399uC9u136y/DMP7VMAwzISFBee5ZWVk3+46x2XtPmDDhW4Zh1BiG0eXbXzNt2jSF3SkwderU\nVwzDOOM7j2bDMMqmTp3quCbBZsjNw9xsRnU2qTp7ZbeYHtIu259AXLqyTHNoxnpSd6Kzr3XrH39t\n5639o7PZltfNqodx2yfbqMpv3a+zN/YSOG6gYwPVFgw1XmzwA9G0eNE3SK3SiRPFrm0F1LMegSgi\nVJfuo4/sNuyf+9xFjjwpo1LsdSvKkWcu9SsA8LsHf21Ll/3mN448uueVqo/lc8eLXkR1PeWzwUs5\nXq65l1gu/mo+hhNdDCkv/a+L0yXPv6WlRdsuxz0n69SW4ETGMiorK7Ole7qc56b6PVgpOLTflu7q\nqnTkqaurs6Vlf8jbTPVkDcYddObMGVtaXksvvwn5O9JJALzEwJKE6rslxGgHgMLCwsUAHkHvT8QZ\noMoPDMO4E8BjALoiIiJuB1BlmuZ3Gxsb1xiGccA0zbmBlh0ZGdn/YCkvLy8Her2NmabZA8A0DONk\neHj41wBEdXd3P1hUVHS/YRh3m6bZ/4KaMWNGbmFh4S4A3REREd8EUATgKxUVFVW+cgaq+1MRERGx\nXV1drwBARETESl17TdN8wDCMnzY3N1+o2l9WVvY9ALjkkkt+1bfNMIwPAMw3DONweHj4bQCSu7q6\nfn/8+PGfzpw5c/zhw4f/2ZL3EIBZAPZGRER8HcClPT09/6+zs7NK17bBErpvI0IIIYQQ8nHl4czM\nzIdN04wwTTPgqLbp6elp6B2wVMbFxSV3dnb+X2dn55aurq7zx48f/wcAc66//vpPB1p+V1fXat+f\nhcXFxScBwDTNIgCIjo7+bU9Pz+TOzs6/dHZ2PtbT05MQFhZ2AsDo5cuX/7avjOTk5N8DQG5u7uzO\nzs4fd3Z2PtvZ2XmJaZp3utVdW1v7Vnh4+Bt96c7Ozm19/zTN/ghA/C233PJZ60afe+ppACrffPPN\ntwAgMzNzHYAFsbGxm3t6emZ3dna+3NnZ+aRpmskA2o8cOXJPfHx8HADExMREo3fAAtM0z/O15dvd\n3d0JJ0+eHHInCxy0EEIIIYSQ4aaxqqrqnsEWUllZ+Y8AsG7dui81NzfblkJjY2MfAIAXXnjhfo9l\nxWdlZWWmp6enzZkzZ3ZKSsqDADYD6Fq7du3/A4A5c+bMBpANwGxra/uqLCMmJmYOAOzcufNzfduK\ni4tjAaCsrGxqAKfoNytXrvwCADz11FO2QVFDQ8MVADB16tS/9G0rLy9/BEBXS0vLpxRFfQ1A5Jo1\na74K9LpVHrJGe2DYXR5bl1t1blll2m2p3183nW7t0JkwyXb9w+fODmS7//qUbZ8/ZgDR0dH2Y8X5\nSlfEbv3lXML3bmqlM6Vzuw66pXGdCZy13TozPVmW9VjdNfsEeAYkhBBCQpktnZ2dgzIL8/EVADh1\n6tSpnJycKWJf38fAsqioqMiOjg5X+/eDBw+uAFAKAJWV/eaS+5cuXfrFzZs35wHA1KlTrzt06BAA\nvKgqo7m5ucX3jZE8d+7cOQcOHDg4Y8aMb1RVVb3Z2Ni4afz48X9ITEz81eHDh48EcK6e2LlzZ19M\nmctHjRp2s8fhAAAgAElEQVSVXFdX1xdL57cAutvb239lyZ4MoEPRd8jJydn64Ycf4vDhw5cB+PGp\nU6dKfOZhsw3DKLrzzju/9+c///nPQbqOWujymBBCyMcCnXZNNamiy+PUNNqPX7nyUkeZW7e+aUtL\nkwYvU2xyXmXPnn229KJFC2zppORkRxl78vJs6YVLl9rS3d3y3PT9ExsbK3IEIbi5qHbN2jWOLO+0\nvONaRCATU7o4SqoJvJGijxwJ3HvvvYP2eBUVFRUJIAMA8vPzd7vljeyd6XQdtMyZM2f39OnTfxQe\nHh5++vTp0x999NFHx48f/1BkWwIAhmG8p2tfenp6OoCDb7311tspKSnrzpw5s7G0tPRLAL5kGMYb\no0ePvqG2tvaMrhx/aWxsbDIM40kAt1x00UUXAXjJtysNwP6PPvroFNAbnBK9Y4GIoqIieZ79HDly\nJL7v78TExBWNjY2PAfjM448//hiAXyxcuPDf9uzZ83Cwz0PCQQshIYQugCagX4FUHacSjzo/xux1\nS+Frbx57+tlnn3TkufHGW2zplzZvdOS5+urrbOmnn/6rI8/NN3/Oll6yZIkjT7L4UPOyfqbySdPQ\n2GhLNzU1OfLo+suLQwTVinAgH9aqa65rH+Du+GIg+FFGCAlVwiwvtzlz5riK7Q8cOKD1opGWllb3\n3HPPPa/JVgMApmmO15VXUVHRH9W+trZ2U3R0dPTSpUuXvvvuu08BuOzMmTPHIiMj04dipWLZsmW/\n2rlz5y0vvfTSPQBeSkxM/AIArFy5sn+VJTExMREA4uPjmyZPnrxioLKaLC/FhoaGRgA3ZmZmZpSX\nl38bwJc++OCDP0yZMqW6qKhoQ7DPwwoHLYQQQggh5JzTbnFjOXbs2DGKmCU2l5FtbW3thmE0Akjs\n6enpOXToUMEwNPNlAP8I4F70aj4GovPAgQMHrRva29s7ALwLYLxhGIcBzJg4ceJE9HoTCyo7duzY\naRhGLYArU1JSRjc1Nf0KQMuWLVse68uTn5+/xzCMnubm5nDZVh1lZWXlAL68du3aTa+88srLJ06c\n+C2AkT1ocdOt6GYYdVoTtxnAYC7hymOlS2BrTB85i/vudvuS9ooVdretO3a82//300/bvdNdffWV\ntrSc+a6qsnuXO3367G/bX3fS1vy6fnabndW5g5THyhljN7fNOs2Tmwtsf86BEEIIIcNPTU1NrWEY\nbQBiLrzwwgth+QhetmzZUgBL5TFZWVn/UVpa+puCgoJvh4WF3dLT0zOky8MbNmx43jCMBgBJOTk5\nF3344Ye2D72EhITnACA2Nlbn4esAgBkR0le7wLR8wKSmpqb4E0gyNTX19zU1Nf+Zk5OTs3v37tis\nrKytMk94eHhpd3f3hPnz59+4b9++Z1XluFFQUNA3UExxzRgEuNJCCCHkY4kXkzl/J7RkmaWlZY48\nssgPPthlS593nt3U8cDBvY4y5syxa1ZeeukFWzo/3+7B9dFHnU6YIqKibOnCAjEJ3dFhz6/4dsrM\nzLSlpQOUp59+0Ja++aZbHWXI2Ejh3e7758xwek6Vk4U6DYsXPYrOfFPVH9IhjpfYR8Q/FixY8MDe\nvXu/tWHDhhduvvnmm0+dOnVq+/btywD8Ar0f+jYzsNra2scA/AeAm03THL18+fJvf/jhhx+GhYWF\njRkzZszMmTMXbdmyZZNFjD5orrvuus9v3LhxQ1FR0ZYVK1bcVVJS8kZ0dHS0YRj3NDc3Xw+gwTTN\ndX3558+f/0RWVtbThw4dOtTW1ta2pNfe+ToAbX2xXwaivb29w7cqM7O2tvY7ubm5v42JiYnZt2/f\nfrfjAGD06NGP19TU/Ofu3bufBxDe0dHxDzLP+PHjLzp58mTx/v37nzEM4wezZ89+srKysjI2NjZ2\n3Lhx4/Lz8xeZpvkHX3mj6urqvj1r1qxHqqqqqpKTk5NPnjz5U19RP/beg4HBQQshIUQgOgkvAQK9\n1CVpbHTqOv7rv/7Tlp4xw2mGu3Gj3Rw4IsLZvldf3WxLJyU563/llZds6WnTnHqQCD+CxrrR1tZm\nS8tAm0Bgq7VePpolgQiIVXV5aY+qHK5CEkLOJQUFBd8DcDGAi5955pmnfZu7pk2b9h9XXHFFw0MP\nPfRba/6WlpbWMWPGzK+pqXkMwNU7d+7si6uCqqoqFBQUYMaMGTMBBG3QsmHDho033HDDDc8///zj\nO3bs+JPY/U56evpN5eXl/S+W/fv3n79///7b+9KbN28GgDOXXHLJp998881GaFiyZMntu3bteg/A\n144ePdpnkqZ9WB87duy4YRh7ACwE0FZVVVUt8xQXF59ctGjRoj179vwfgG8eOnTom337Tp06BQDV\nAP4AAKtXr179zDPP3FdQUPAvgM3CZ2N0dPSPdO0ZLBy0EEIIIYSQoHH77bff0SZng3wsXLjwublz\n5x7dvXu30uWvT/dxyfLly5fl5ubmNjU1Ne3YsWPH0aNHy6ZMmTL59ttvv2Pbtm2V1mNOnz5dA+C6\niRMnTsjNzc3NysrKqq+vr6+oqKg4ePDgwcOHDztn4SxMnDjx70uWLLlDt+ph5bnnnns+MjJy05Il\nS5bk5OTk1NfX1xcUFBQovI0hIiJi1qJFixbNmDFjRnd3d3dxcXFxXl5e3ptvvtm/3NnU1NR0++23\n36GqKy8vb1daWtr4ZcuWLYuNjY0tKioqAoC6urq6gY7pY/ny5ffm5ubmHj9+/PhAefLz8/eEhYXN\nnDNnzpycnJyc5OTk5MrKysqSkpISq9bl6aeffmbnzp07p0+fPj0zMzOzrq6ubu/evXv7gm4ONcMe\np8W6tCyXe/WuJt33u+WVuMU0kbPUunZYzQv/+lf7gDsjwz5j+967b9nSXV1nl+f/9jd7jJcbb7S7\nkvSNePvZtctucnDWLTfQ3Gw/Vuc1yLpfLqv7oz3yV4fkplPpEKYL0ixBttNtdUHWK5f4CSGEkI8r\nb36lZNZgyygry3PaQg7AE0888ceB9uXn5+8BsEdXxo4dO3YC2GndVlRUdALAiYGO8bnyPTXQ/oHw\nCfj9FvH7vH5t9/3T5XOcj5W2trZ2AAP2W2VlZRVEbJiWlpZWt2MAYPv27TsA7HDLAwA+LdAB378B\n8Q1QhmWQIuFKCyGEEELIx5iCgoLD57oNhAwWDloIIYR8LAgkuKRcSVcJuN3y906O2vnxj39oS194\nod1K5tAhu35WZTWwd2++LZ2ebl8dfvnlTbb03LljHWXExMTY0nK1WvaGjHsEADfddJMtXVdXZ0uP\nG5duSx844HQqMNe0OxWQwvubPn29LX36HWcgSdl2uVquW+VXobPeUF0XeX940ZIRQoIDBy2EhBBe\nPqAC8YjkJUilRJrnAUCvqfHAbQGAqKhoW1rlgUcep/q+kOceHu6sS5bz91deceRZfdVVzsIF8uNO\n9+GqQvWR5OV6yuug6tNAgkJ68WLkxTEAvSERQggJBYZ90GJ9IetmRmRazqxYX6Y6b0nyWOuHlL/x\nYeRHmLUd0dExA+7rrcverri4uP6/c3KmutY7ZcoUW3rcuHG29KhRo/r/fkfMVFljuPS2Y+CPWl30\nbbdo67rr4M819fdjydputxguQGAfpYQQQggh5NzAKTRCCCGEEEJISEPzMEIIIR8LnGaH7t4LB9rm\nhsyviunT6+TnLNLUUgbslnoNADAMe2BIYcGIJBHcSLV6LLfJFWhpNRAbG+soIzc315aWninj4+Nt\nacPQz4UaossLjx61pQfwlCvq8V/DIgmGHiUY7SCEeIODFkI+hnh5ceryqMzz5DaV62g3N9Z9eBFI\ne8ER0VqR56VNmxRb7SQUF9vSU6dOdeQpENHEW1tbbelAA0fqzFNVebwEHVWZagZLC0MIIYQMN8Me\np8Wf2Cq6l7B1dko3oxasjyTAOXsVFXV2Riw62i5C1n0kWGepxo61e3+R4mA5W5eYmGhLWz8gZQyh\nxkZ7wFW3GDlu/azabz1H3cyVzvOKtR1yFtDLrOlAeTkbRgghhBAycuGUGiGEEEIIISSkoXkYIYSQ\nEYluxVyaugVieifTskyVa/Dq6mpbWqV7sSJX6AH9CrdciVatcutWlJ1uxZ26GKlzkWmHp8YAdCKV\nlZV+HxMMD5CBuBL319toqLBo0aKFgy2juLi4uKampjYY7fFCdnb2pFWrVq0CgEceeeTR4aqXhC7n\n1OWxDt3DYDBlWfH3JSWxBuSSLxLdA876ArC6PwbsZmeA83xlfqt52bRp02z7mpqabGn5krCW7eaG\nWNUOt+sgXwq6vrXu110Xt7J1bpqleRwhhBDyceX1qoZ8fS53/mX1NbcD+JPcnpycnHTXXXd92+3Y\nF198cf3Ro0eP+VPfggULFj766KOPADCHe9ASHx8ft2zZsmXTp0+fHh8fPx5ALIDTx48fL9i6devW\npqamZl0ZweDWW2+9JSMjI+NnP/vZz70eExcXF/vlL3/5v1966aVHCwsLj+qPGDlwpYWQEMLLwNyL\n0F0O2lSCeZ1GSDX7K7epBn+yLrVnJP1spDx3LwEyVf3VLmbCVTO0KSkptvSyZcsceSoqKlzTXvrY\ny/X0MoOsmrn3cm10g3nAeb10qwSEkE828fHx8T//+c+/7pZn1apVrwLwa9DSx7lYvbrgggsueP31\n1//+xhtvqHZ3GYbxmmma1wx1O5588sm/AAjbt29fwZYtW1617lu7du3NL7/88tPymNbW1iM///nP\nJwJYBWDRULdxOOGghRBCCCGEDJr09PQM1fa33347YLOywThOCgZJSUnJHR0dHZGRkZHZ2dnZBw4c\neAPA1YZhHDZNc+YQV98BIHzfvn27rRsNw6gEMA6AY9AC4IcAfg9g1xC3bdjhoIUQQsjHAvlxI1e/\nVKtYOvNf3SyvavXMy4qWrl0602IvZrq6tst2qdohy3Az6QWAbkU73n37bVv6vffes6VvPHXKlpbm\nzABQUlJiSx86dMiWbmhosKVV/aH7+PWiT5F9posN9EmjvLy8Qp9rZFFfX993c7UBOJCQkDCpubm5\nFkBuWFiY0SMDLwUR0zSdwZN6GXBJ3jTN9QDWD02Lzi0hPWgZzMNA96D1R+MiH+TyWBlcy61eacLh\n5rZZhyzb+jCV5i4zZsywpaUexhowTAYP04k1rR8GUoDqj8triZs7ZMDdvEl3vc/1zA0hhBDySSQh\nISE+MzMzMyEhIaGzs7Ozurq6uqKiYkBvDKpvo6SkpMS0tLS0hISEhLq6urrS0tLSjo4Oh01sXFxc\n7IQJEybEx8fHNzc3NxcXFxe3t7c7vWf4QVNTU3NMTMxH7e3tU3Nzc28G8JR1f1pa2riUlJSU6Ojo\n6Nra2trS0tLS7u7uAT9+MjMzM1JSUlLa29vba2tra63ODs4777wFhmEYe/bs+QAAJkyYMH5sr4A5\nHAAWLlx4Xl/eAwcOHOjs7OxKT09Py8zMzKyrq6srKio6kZmZmZGenp7e0dHRcfDgwUOOBvjK6enp\n6dm7d+8+6/YxY8akZmRkZERGRkbW1NTUlJSUlAx0Lunp6WmpqampHR0dHXV1dXXV1dWn9b3pHyE9\naCHkk4bUE6h0CV4GXHKG2YvXJJ0TCQBoaWnxu32qWWbZPtVg1kseL5oR6d1JOrhQtVHGTAKAiy66\nyJYuKiqypWVsJACorbVbRHjRtKj6NJCAnSpk/apyvNw7hBASCIZh/AnAbceOHZPbHzFN84uqY+Sz\n7aKLLvpCY2Pj7xsbG60vzNLIyMjszs7O/gfYLbfc8tnW1tYnjh49ap0tNi+++OJL3n777XcGcx7Z\n2dldhYWFAND/QsnKysosKyt7EsDFVVVV1uyFixYtujU/P3+PdeOYMWNSa2pqXgGwpLy8vH/7nDlz\n7j148OBDALB3794dAKIBGABw7bXX/vtDDz10b1/eDz74oL/MsWPHjgNQXVlZeUdlZeX/fvrTn34e\nwA1jxowZY8nneKBnZmauKC8vfx/AAQDzACAyMjJi7Nixv66pqflSTU2NNfsHY8aMueL06dP9G0eN\nGpVcX1+/AcClVidPU6ZM+XZRUdH3Bu5F/2GcFkIIIYQQMuRERUVdlZSU9L+LFi1anJ2dPfnKK6+8\nCkAxgLuSkpJ+ojt+6dKlS959991HAdStWrXqipycnKk33njjTQD+ah2wGIbx+aeeeupJAEeXL1++\nIjs7e/JnPvOZGwEY77zzzutTp07NGcx5FBYWpgBAY2PjVgCYOHHihLKysv0ALgbw4NKlS5fl5ubO\nuOaaax4AkLtnz578WbNm2fQvNTU1TwFYAuCH2dnZky+88MKLbrnllh8BeGugep9++unvZGdnTwZw\nBgCys7Mn9/2rEaOLPvbv338AQCkAzJgxI1fub2xs/B0ALF26tH+A0dXVtbm8vPxLAB7Kzc2dMX36\n9NxVq1Z9H8B5NTU1u8LDw/vHD/X19Y8CuBTAg1OnTp12/vnnX/BP//RP/5OamvqKphv9histhBBC\nCCFk0Nxwww1/U2yueu655+4BANM0M+vr663LycVjx45dcvr06fLGxsavAPiGW/ktLS3/AACXXXbZ\nza+//nqfa68PATwrsv4RQHVcXNzy7du395kIFM+YMWNGYWHhkdbW1t8CuNLP0wMAZGZmfhm9Iniz\npKSkFABOnTr1ewCpAP7TNM0fWbL/21VXXXXi1Vdf/e3hw4ffBjAWAFJSUkaj17sXwsLC/uvEiRM9\n6B28vetWt2+Fo8YwjB4AOHHiRLGXNi9evPhPu3fv/o+mpqbfALjCuq+pqSkXQMfOnTufBYDrrrvu\nWgCrATxnmua9lqz/demll0586623Pn/ppZdeCmBbYmJiAoAbACAiIuLrx44d6wJwHMD7XtrlL0M+\naHHTEvhrduCWX1eWNH2xmoPo4oHoxHlWfYg0v5D6D6klsZpnyGOlmYhOH2IVIsp65s+fb0snJiba\n0m1tbf1/y8G6NK+Rx7a2tirboEKaF7mZq+gEj27B1QajaSKEjAx0z2pdzCnVMbr9XsTa8rmv02eq\n2qUT2nsxjdQdo3LTLdGdryxDVaZ0O56RmWlLZ0+ebEtLXSUASHMiGWvMixBfEoiTBZ0Z5iddL/n8\n88/foNh8ou8Ple6kurr6tGEYzQASVGVar9OqVatqDx06hDfeeONLAJT+iDMzM+8AgKVLl/50586d\nto+OI0eOFBqGgbKysuUeTgcAMGvWrNUAGgDkVlVV/UtNTc08X7tmA8CUKVMmA1gLALGxsb+Ux7/2\n2mu/A/BfANL7tjU2Njb2/e3TqPgfYdUP9u/f/98A7i8tLbX581+5cuWnAMTEx8e/0Ldt06ZN9wJA\nWlravRDU19f/AsDnt23b9iCAOS2Wj7opU6ZMATCkcWFoHkYIIYQQQgaNaZqG4t8Umc8wjCmGYfzU\nMIx836pBEgbwiGUdCK5fv/7HANoB3GQYRo9hGI4PawDfB4C8vLzjhmGslP98eZK9mogdPnz4tcOH\nD28/fPjwEzU1NfMBvB8fH5/Q09NzGAAyM/tH4W+0tLS0yuN93sWKACApKWkdAPhM2X4IAJWVleWG\nYRxLTk5O8tKeQPA5H2gBkHDJJZdc3Ld927Zt9wNAU1PT9ZbsV/jaNb+vz8LCwlaGhYWt3LdvX6ov\nz2wA8Iny7wOAo0ePHjEM40RycvKooToPmocREkJ4WREKxC2nypWpPytXfVhX5AC1aFyuzKnqlsep\nZmdlOV6cCahmOWVdqnJk/aNGOZ+5utVKlcMBWVd9fb0jj8RLOV5WClV5dCvBqvp1LoEJIcQr8fHx\n17S0tLwIoBtATVpaWsOoUaMKCwsLp8HFjW8fra2tbXFxcaNN09za1ta2BMBvDMP45Zo1a6559dVX\nXwOA8vLyGF/2593K6tb5IvdhmqbrA3fcuHHjfH9WDZTn8ssvb922bRsAZFvK/eaMGTP2FBYWPgRg\nakNDQ71hGDtiYmIua21tbRuorEBJSEi4s6mp6dnOzs5vAHg7IiIiHMB89LpyBtDryQxnxfqvWdo6\nYLmmaT44Y8aMo4WFhU8AmNTQ0HDGMIxDcXFxS5ubm1sGPDAA+DYihBBCCCFDypIlS9a2tLRsAlA6\nZcqU6aZpplVUVEw7cuTITAB1XstpaWlpbW1tPd80zcg1a9b8BkDEa6+99urEiRMn+LL0AEBMTEzs\nACs/hmmahlc9iI6Gs7aJUwfKs23btr5VFFvAxyNHjjxnmmba6tWr1wA4BmB5W1vb48Fol6SxsfFv\nALB9+/ZlAHDjjTfeiF6TvH/uy9NhmS00DCPMrf/Eebxqmmb6xRdffCmAwwBmt7S0bAj2OQy7psUf\ngmkbKgfU1rJ1s7XyWOmWtr29fcC8Mi1ns63ImWVZj9xvMYkEAMTGno1BNG/evAH3AU6XrlYdiwzi\nJVz3IUHEpXn8pZf6/77t1ltt++TMrgwaduLECVu6uLi4/285Q66b8XXbr7N9J4SMfAKJxySfM7q4\nVF5WQ724D9chn53y+e+m0+zD+m4C9M9QVTt12hrZLplWtW306NG2tDyXhASntEHqNAsKCmzp0tJS\nW1rqJwHn+Un353LFVdWnsg+9XAfSy+7du38GwJg0adIFH3744Umvx7m9r1999dWvGoaRDOC21atX\nrwbwaEZGxvby8vJr582b908AfjXohms4cuTIEd+fi1JSUkbX1taese6PjIyMAJALAA0NDe/J4wHg\ntdde+/vYsWPPP336dDWA64awuS8DWLtq1aqVW7du/RwAJCYm/l/fztOnT9cYhlECoC8ezICrRyre\neuutt2NiYs5rb29vQ68ntaDClRZCCCGEEDLUxALAaDFqXbBgwXwAA+ogPAz6qwGg2efBobu7+4sA\nkJeX999jx44dM4j2esLnQewlADhz5owjEv2UKVPWo1ezoxyw9NF1dtTc5JYPAEaNGtUJAMuWLbvQ\nn7bm5OR8zdfmm9DrvWxbQ0ODbQb8mmuu+T0AVFVVSY9snug5O7MRVNMwgJoWQkIK3awm4Jwd9BKw\n0IsXHJlWegESM7cyDag9/0jkbKTUygDe9BdeNC2yjV4CWaoCUMr6p02bZkvLmWDAuaJ56JAzGLFc\n2QxUuyMJtL+8BAclhBB/mTVr1uaCgoJ79u7d+8bixYu/hl5x+mf37dt3F3pNurSalvHjxz8UGRk5\nMzU19XcAijs7O69FrxC86ZVXXnkFACorK6sMw3gAwL+ePn26ePz48c+np6c/gd7BwIy2trZ/jI6O\n/hcZ7HEwJCYm3trY2HgKwI2GYRxetGjR9wA0VVVV3X/q1KnzATTHx8ev6cufmZmZUV5evmvRokWP\nolc7klZXV/cz326teVhsbOzzdXV19+Tl5W1YvHjx9wBE+FayXCn2mbMUFhbeCSDyoosu+m+Z57XX\nXvsJgNsAXGwYxilfG18GkAhgyeHDhz/b3t6+qKurqzslJWX0mTNnDi1atOhPADYDGN3Z2fmAr6gX\nZNmDJaQGLf66EnRbMtS9eK3H+ms6JJeDrR+IOvePMm39oJJmCjExMba0/LCTy98pKSn9f0+cONG2\nLzo62pZOS0uzpa0fTtIsTfadLOvBn539nfzl61+HG/IKf2rtWlu6oqKi/2/5semPSZcuL8XFhBBC\nyPBx6NChew3DyAawNj8//0+WXYvS09O/UVFRcfPixYsX7d69O996nPV9Xlpamgng0uLi4kstWWoz\n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\n6Pn/rPJNHj58OCk/evRoto2TJ09OyrwezHnpmXiV+V7c5v8kuTXVufRM7nr69OlJmblf/B/uyc9Z\nO59OZksujaRt7GmRJEmSNDQrLZIkSZKGZqVFkiRJ0tCstEiSJEkamon40sB2lQS9ZYLHnkT8XR1f\ntq8q4TdinhSdJeL3TP7GbfdcLyYtZ9eCic5ZIn6WQF3pGdxgqy2DOIxi6yAGrbXn27N8NYDFlm3w\nu8RJSiMiXn755Uk5m6B16bgi5gNOVMnsWyeTbWWDbvDYWc7+typVIn7PYBY960jaDXtaJEmSJA3N\nSoskSZKkoRkeJkk6rv7rWR+AJOloWGmRBrJl0rld7WtXsdm7iulm7smTJ09myzCvJIvJZ3x8tgzj\n8LO4fL7GfWcT8zFXJvvsmDOQ4Tlkx9czYefzFm//5MmTP3vWxyBJOhqGh0mSJEkampUWSZIkSUOz\n0iJJkiRpaOa0SGP572d9AFLhi2d9AJKkF8+fHKeJwyRJkiS9eAwPkyRJkjQ0Ky2SJEmShmalRZIk\nSdLQrLRIkiRJGpqVFkmSJElDs9IiSZIkaWhWWiRJkiQNzUqLJEmSpKFZaZEkSZI0NCstkiRJkoZm\npUWSJEnS0Ky0SJIkSRqalRZJkiRJQ7PSIkmSJGloVlokSZIkDc1KiyRJkqShWWmRJEmSNDQrLZIk\nSZKGZqVFkiRJ0tCstEiSJEka2v8DBYYXdKhXV1YAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = figure(0, (14, 8))\n", "testLogicalRules(trainingExampleIndices, data, fig, trainX, trainY, rule)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Confusion Matrix:\n", "[[ 226 115]\n", " [ 102 4431]]\n", "Recall (TPR) = 0.663 (Portion of fingers that we \"caught\")\n", "Precision (PPV) = 0.689(Portion of predicted finger pixels that were actually finger pixels)\n", "Accuracy = 0.955\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = figure(0, (14, 8))\n", "testLogicalRules(testingExampleIndices, data, fig, testX, testY, rule)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## But why stop there? 4 pixels!" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import operator as op\n", "def ncr(n, r):\n", " r = min(r, n-r)\n", " if r == 0: return 1\n", " numer = reduce(op.mul, xrange(n, n-r, -1))\n", " denom = reduce(op.mul, xrange(1, r+1))\n", " return numer//denom" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1663740" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ncr(81,4)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.0% done! Time elapsed = 36.25 seconds.\n" ] } ], "source": [ "numCombinations = ncr(81, 4)\n", "combinationCount = 0\n", "\n", "rules = []\n", "numErrors = []\n", "startTime = time.time()\n", "\n", "for c in itertools.combinations(range(81), 4):\n", " i = c[0]; j = c[1]; k = c[2]; l = c[3]\n", " \n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==0), trainX[:,k]==0), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 0, 0, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==0), trainX[:,k]==1), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 0, 1, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==1), trainX[:,k]==0), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 1, 0, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==1), trainX[:,k]==1), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 1, 1, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==0), trainX[:,k]==0), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 0, 0, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==0), trainX[:,k]==1), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 0, 1, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==1), trainX[:,k]==0), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 1, 0, 0])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==1), trainX[:,k]==1), trainX[:,l]==0)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 1, 1, 0])\n", " \n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==0), trainX[:,k]==0), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 0, 0, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==0), trainX[:,k]==1), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 0, 1, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==1), trainX[:,k]==0), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 1, 0, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 0, trainX[:,j]==1), trainX[:,k]==1), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 0, 1, 1, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==0), trainX[:,k]==0), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 0, 0, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==0), trainX[:,k]==1), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 0, 1, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==1), trainX[:,k]==0), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 1, 0, 1])\n", "\n", " yHat = np.logical_and(np.logical_and(np.logical_and(trainX[:,i] == 1, trainX[:,j]==1), trainX[:,k]==1), trainX[:,l]==1)\n", " numErrors.append(sum(abs(yHat-trainY)))\n", " rules.append([i, j, k, l, 1, 1, 1, 1])\n", " \n", " combinationCount +=1\n", " \n", " #Print update each 1 percent complete:\n", " if combinationCount%round((0.01*numCombinations))==0:\n", " percentDone = float(len(rules))/(2**4*numCombinations)*100\n", " timeElapsed = time.time()-startTime\n", " print str(round(percentDone, 0)) + '% done! Time elapsed = ' + str(round(timeElapsed, 3)) + ' seconds.'\n", " combinationCount = 0" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.argmin(np.array(numErrors))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If this code finished, you are more patient than I. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 }, "toc": { "toc_cell": false, "toc_number_sections": true, "toc_threshold": 6, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }