{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Matrix Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Resources\n", "\n", "- [Matrix Cookbook](https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf)\n", "- [First Chapter of Yoshua Bengio's Deep Learning book](http://www.deeplearningbook.org/contents/linear_algebra.html)\n", "- [QA Site](http://stackoverflow.com/)" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vec_1 is equal to \n", "[[ 0.99899858 0.73141335 0.52014911 0.26303083]]\n", "Vec_2 is equal to \n", "[[ 0.72321931 0.28241295 0.69711204 0.71115872]\n", " [ 0.75777035 0.67067145 0.81723818 0.74861268]\n", " [ 0.98773623 0.30544845 0.64481952 0.69253541]\n", " [ 0.68356857 0.59590889 0.07894407 0.7613203 ]]\n" ] } ], "source": [ "#np.random.rand generates random values between 0 and 1 of size (n,m)\n", "vec_1 = np.random.rand(1, 4) #write commas as in writing, with a space after the comma\n", "vec_2 = np.random.rand(4, 4) #use underscores and descriptive names\n", "print 'Vec_1 is equal to \\n', vec_1\n", "print 'Vec_2 is equal to \\n', vec_2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Both vectors are also matrices." ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.80003058694\n" ] } ], "source": [ "print np.trace(vec_2) #Trace" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.72321931 0.75777035 0.98773623 0.68356857]\n", " [ 0.28241295 0.67067145 0.30544845 0.59590889]\n", " [ 0.69711204 0.81723818 0.64481952 0.07894407]\n", " [ 0.71115872 0.74861268 0.69253541 0.7613203 ]]\n" ] } ], "source": [ "print vec_2.T #Transpose" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.72321931 0.67067145 0.64481952 0.7613203 ]\n" ] } ], "source": [ "print np.diag(vec_2)" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.91173889 1.0303704 1.24061675 1.74993598]\n", " [ 2.37519295 1.35953345 1.66241882 2.17686856]\n", " [ 2.05611674 1.09345219 1.40865074 1.90490144]\n", " [ 1.54432262 1.07049858 1.07452978 1.56651087]]\n" ] } ], "source": [ "print np.dot(vec_2, vec_2)" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.87270397]]\n" ] } ], "source": [ "print np.dot(vec_1, vec_1.T)" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.34399734 0.37411323 0.50543426 0.6863573 ]]\n", "[ 0.95862379 0.06110035 0.92039397 0.2059746 ]\n" ] } ], "source": [ "'''\n", "This is another way to make block comments in python,\n", "\n", "Bug warning!!!!\n", "'''\n", "vec_1 = np.random.rand(1, 4) #write commas as in writing, with a space after the comma\n", "vec_1_ = np.random.rand(4)\n", "\n", "print vec_1 #this is a 2D array (matrix) of size 1x4\n", "print vec_1_ #this is a 1D array of size 4" ] }, { "cell_type": "code", "execution_count": 120, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.81224340453\n" ] } ], "source": [ "#This can generate confusion and some bugs\n", "print np.dot(vec_1_, vec_1_) #This works! And returns a scalar" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ValueError", "evalue": "shapes (1,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvec_1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvec_1\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#This doesn't work\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mValueError\u001b[0m: shapes (1,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)" ] } ], "source": [ "print np.dot(vec_1, vec_1) #This doesn't work" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.98484501]]\n" ] } ], "source": [ "# When np.dot detects a 1D array, operates as vector's inner product.\n", "# When it detects 2D arrays it operates as matrix multiplication\n", "# Is not possible to multiply a 1x4 matrix by a 1x4 matrix\n", "# We can use the transpose\n", "\n", "print np.dot(vec_1, vec_1.T) #This works, but the output is not a scalar is a 1x1 Matrix (yes, it sounds ridiculous)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's play with indexes." ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.95862379 0.06110035 0.92039397 0.2059746 ]\n", "[ 0.2059746 0.92039397 0.06110035 0.95862379]\n" ] } ], "source": [ "print vec_1_ \n", "print vec_1_[::-1] #inverts the order" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.958623785967\n", "0.20597460166\n" ] } ], "source": [ "print vec_1_[0] #first element\n", "print vec_1_[-1] #last element" ] }, { "cell_type": "code", "execution_count": 125, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ True False True False]\n" ] } ], "source": [ "print vec_1_>0.5" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(array([0, 2], dtype=int64),)\n" ] } ], "source": [ "print np.nonzero(vec_1_>0.5)" ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(array([0, 2], dtype=int64),)\n" ] } ], "source": [ "print np.nonzero(vec_1_>0.5)" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.95862379 0.92039397]\n" ] } ], "source": [ "print vec_1_[np.nonzero(vec_1_>0.5)]" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.95862379 0.06110035 0.92039397 0.2059746 0.95862379 0.06110035\n", " 0.92039397 0.2059746 ]\n" ] } ], "source": [ "print np.hstack((vec_1_, vec_1_))" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.95862379 0.06110035 0.92039397 0.2059746 ]\n", " [ 0.95862379 0.06110035 0.92039397 0.2059746 ]]\n" ] } ], "source": [ "print np.vstack((vec_1_, vec_1_))" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2L, 4L)\n" ] } ], "source": [ "print np.vstack((vec_1_, vec_1_)).shape" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.72321931 0.28241295 0.69711204 0.71115872]\n", " [ 0.75777035 0.67067145 0.81723818 0.74861268]\n", " [ 0.98773623 0.30544845 0.64481952 0.69253541]\n", " [ 0.68356857 0.59590889 0.07894407 0.7613203 ]]\n" ] } ], "source": [ "print vec_2" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.44643862 0.56482589 1.39422409 1.42231744]\n", " [ 1.5155407 1.34134291 1.63447635 1.49722537]\n", " [ 1.97547245 0.61089691 1.28963905 1.38507082]\n", " [ 1.36713713 1.19181778 0.15788814 1.5226406 ]]\n" ] } ], "source": [ "print vec_2+vec_2 #elementwise sum" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.52304617 0.07975707 0.4859652 0.50574672]\n", " [ 0.57421591 0.4498002 0.66787824 0.56042095]\n", " [ 0.97562285 0.09329876 0.41579222 0.47960529]\n", " [ 0.46726599 0.35510741 0.00623217 0.5796086 ]]\n" ] } ], "source": [ "print vec_2*vec_2 #elementwise product (not Matrix Multiplication!)" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.91173889 1.0303704 1.24061675 1.74993598]\n", " [ 2.37519295 1.35953345 1.66241882 2.17686856]\n", " [ 2.05611674 1.09345219 1.40865074 1.90490144]\n", " [ 1.54432262 1.07049858 1.07452978 1.56651087]]\n" ] } ], "source": [ "print np.dot(vec_2, vec_2)" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.0561744297093\n" ] } ], "source": [ "print np.linalg.det(vec_2)" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.52304617 0.07975707 0.4859652 0.50574672]\n", " [ 0.57421591 0.4498002 0.66787824 0.56042095]\n", " [ 0.97562285 0.09329876 0.41579222 0.47960529]\n", " [ 0.46726599 0.35510741 0.00623217 0.5796086 ]]\n" ] } ], "source": [ "print np.power(vec_2, 2)" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.91173889 1.0303704 1.24061675 1.74993598]\n", " [ 2.37519295 1.35953345 1.66241882 2.17686856]\n", " [ 2.05611674 1.09345219 1.40865074 1.90490144]\n", " [ 1.54432262 1.07049858 1.07452978 1.56651087]]\n" ] } ], "source": [ "print np.linalg.matrix_power(vec_2, 2)" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 28.14146233 16.36148772 19.12752395 26.49869503]\n", " [ 36.04754598 20.95189104 24.50016832 33.94052391]\n", " [ 30.64513248 17.8163811 20.82779782 28.85604704]\n", " [ 25.11603742 14.60142921 17.07471497 23.6465306 ]]\n" ] } ], "source": [ "print np.linalg.matrix_power(vec_2, 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Eigenvalues" ] }, { "cell_type": "code", "execution_count": 140, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pylab as plt\n", "%matplotlib inline " ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-0.23245839 0.34721948]\n", " [ 0.9310904 0.22913624]\n", " [ 0.58974444 0.01265035]\n", " [-0.81659372 -0.93399382]]\n" ] } ], "source": [ "circle_points = np.random.rand(1000,2)*2 -1 #this shifts the values to generate values between -1 and 1 \n", "print circle_points[1:5, :]" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nMBhzjP8P++UVM/KwAV8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(circle_points[:,0], circle_points[:,1])" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.41784958 0.95887056 0.58988011 1.2406328 ]\n" ] } ], "source": [ "dist_points = np.power(circle_points[:,0], 2) + np.power(circle_points[:,1], 2)\n", "dist_points = np.sqrt(dist_points)\n", "print dist_points [1:5]" ] }, { "cell_type": "code", "execution_count": 144, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(array([ 0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14,\n", " 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29,\n", " 30, 31, 32, 34, 35, 36, 38, 39, 40, 41, 43, 44, 45,\n", " 46, 47, 48, 49, 50, 53, 54, 55, 56, 58, 59, 60, 62,\n", " 63, 64, 65, 66, 68, 70, 71, 72, 73, 74, 76, 77, 78,\n", " 80, 81, 83, 84, 85, 87, 88, 89, 91, 92, 93, 94, 95,\n", " 96, 99, 100, 102, 103, 104, 105, 108, 109, 110, 112, 113, 114,\n", " 116, 117, 118, 120, 122, 123, 126, 127, 128, 129, 130, 131, 132,\n", " 133, 134, 135, 137, 138, 140, 142, 143, 144, 145, 146, 147, 148,\n", " 149, 150, 151, 152, 153, 154, 155, 157, 159, 160, 161, 162, 163,\n", " 164, 165, 166, 169, 171, 172, 173, 175, 176, 177, 178, 179, 181,\n", " 182, 183, 186, 187, 190, 191, 192, 193, 194, 196, 198, 199, 201,\n", " 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 217,\n", " 218, 220, 221, 223, 227, 228, 229, 230, 231, 232, 233, 235, 237,\n", " 240, 242, 243, 244, 245, 246, 248, 249, 251, 252, 253, 254, 255,\n", " 256, 257, 258, 259, 260, 261, 264, 265, 267, 269, 270, 272, 275,\n", " 276, 277, 280, 282, 283, 285, 286, 287, 289, 290, 293, 294, 295,\n", " 296, 298, 301, 302, 304, 306, 307, 309, 310, 311, 314, 315, 316,\n", " 317, 318, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 332,\n", " 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 347,\n", " 348, 350, 351, 352, 353, 354, 355, 356, 358, 359, 360, 361, 365,\n", " 366, 367, 368, 369, 370, 371, 372, 373, 375, 377, 378, 379, 380,\n", " 381, 382, 385, 386, 388, 389, 390, 391, 392, 393, 394, 395, 396,\n", " 397, 399, 400, 401, 402, 404, 406, 407, 410, 411, 413, 414, 416,\n", " 418, 419, 420, 421, 423, 424, 425, 426, 428, 429, 433, 434, 435,\n", " 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 447, 450, 451,\n", " 454, 455, 456, 457, 458, 459, 460, 461, 463, 464, 465, 466, 467,\n", " 468, 470, 471, 472, 473, 476, 479, 480, 481, 483, 485, 486, 487,\n", " 488, 489, 490, 492, 493, 495, 497, 498, 499, 500, 501, 502, 503,\n", " 505, 506, 507, 508, 509, 511, 512, 513, 514, 515, 516, 517, 518,\n", " 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532,\n", " 534, 536, 537, 539, 540, 542, 543, 544, 545, 546, 547, 548, 549,\n", " 551, 552, 553, 556, 558, 560, 561, 562, 563, 564, 565, 566, 567,\n", " 569, 570, 571, 574, 575, 577, 578, 579, 580, 581, 582, 583, 587,\n", " 588, 590, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602,\n", " 603, 604, 605, 606, 607, 608, 612, 613, 614, 615, 616, 617, 618,\n", " 619, 620, 621, 624, 625, 626, 629, 630, 631, 633, 634, 637, 640,\n", " 641, 642, 643, 644, 645, 646, 647, 648, 649, 651, 652, 654, 656,\n", " 657, 660, 662, 663, 666, 667, 668, 669, 670, 671, 672, 676, 677,\n", " 679, 683, 684, 688, 689, 690, 691, 692, 693, 695, 696, 698, 699,\n", " 700, 701, 704, 705, 707, 708, 710, 711, 712, 713, 714, 715, 716,\n", " 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731,\n", " 732, 733, 737, 739, 740, 742, 743, 745, 746, 747, 748, 749, 750,\n", " 751, 752, 753, 754, 755, 756, 757, 759, 760, 761, 762, 763, 764,\n", " 765, 766, 768, 773, 774, 776, 777, 778, 779, 780, 781, 782, 783,\n", " 785, 786, 787, 788, 789, 791, 792, 793, 795, 796, 797, 798, 799,\n", " 801, 802, 805, 806, 808, 809, 810, 813, 814, 815, 816, 817, 818,\n", " 819, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 832, 833,\n", " 834, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 847, 849,\n", " 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862,\n", " 863, 865, 866, 867, 868, 869, 870, 871, 873, 874, 875, 876, 877,\n", " 878, 879, 880, 881, 882, 883, 884, 885, 886, 888, 890, 891, 892,\n", " 893, 895, 896, 898, 899, 900, 901, 902, 903, 904, 906, 907, 910,\n", " 913, 919, 920, 921, 922, 923, 924, 925, 927, 928, 929, 930, 932,\n", " 933, 934, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946,\n", " 947, 948, 949, 950, 951, 952, 953, 954, 955, 957, 958, 959, 960,\n", " 962, 963, 964, 966, 967, 968, 969, 970, 971, 974, 975, 976, 977,\n", " 978, 979, 980, 981, 983, 984, 985, 986, 989, 990, 991, 992, 993,\n", " 994, 995, 997, 999], dtype=int64),)\n" ] } ], "source": [ "print np.nonzero(dist_points<1)" ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": true }, "outputs": [], "source": [ "inner_circle = circle_points[np.nonzero(dist_points<1)[0], :] #ask me about the zero" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nUAj/H45I4TfwL2M6AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(inner_circle[:,0], inner_circle[:,1])\n", "plt.gca().set_aspect('equal', adjustable='box') #without this it doesn't look like a circle" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(758L, 2L)\n" ] } ], "source": [ "print inner_circle.shape" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[2 1]\n", " [1 2]]\n" ] } ], "source": [ "transf_matrix = np.array([[2,1], [1,2]])\n", "print transf_matrix" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": true }, "outputs": [], "source": [ "transf_dots = np.dot(transf_matrix, inner_circle.T).T" ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(758L, 2L)\n" ] } ], "source": [ "print transf_dots.shape" ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQMAAAEACAYAAAC3RRNlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvX9wnNWV5/257XabxpJtteUfIsbGtEO0jlVGxrWvp0S9\ncu3EKNnKOIM1U5PJkCgkA2/eyUIMbeMwJo43ltdhgglJliqv2Sx2YNnZ7LjIeHc2Eg7BmhfeytQC\nhjhkEhLDeJKAswglgxkMQtbZP+5z+/l1n+5HVlutH/db1eX+8fy43dY999xzvud7lIjg4ODgkKn3\nABwcHCYHnDFwcHAAnDFwcHDw4IyBg4MD4IyBg4ODB2cMHBwcAMiO9wJKqTnA3wI57/HXIvLn472u\ng4PDxELVgmeglLpURN5SSs0CngJKIvLUuC/s4OAwYajJNkFE3vKezvGu+ZtaXNfBwWHiUBNjoJTK\nKKVOAGeA4yLy41pc18HBYeJQK89gVETagWXA/62U6qzFdR0cHCYO4w4gBiEibyil/gZYDwwEP1NK\nuSIIB4c6QURUtWPG7RkopZqVUvO953lgE/BcwoAm1eOLX/xi3ccwFcY0WcflxpTukRa18AxagMNK\nKYU2Lg+JyOM1uK6Dg8MEYtzGQEROAutqMBYHB4c6YkYzEDdu3FjvIcQwGccEk3Ncbky1RU1IR6lu\npJRM1L0cHBx8KKWQiQggOjg4TA84Y+Dg4AA4Y+Dg4ODBGQMHBwfAGQMHBwcPzhg4ODgAzhg4ODh4\ncMbAwcEBcMbAwcHBgzMGDg4OgDMGDg4OHpwxcHBwAJwxcHBw8OCMgYODA+CMgYODgwdnDBwcHABn\nDBwcHDw4Y+Dg4AA4Y+Dg4ODBGQMHhwro7+/nuuu6ue66bvr7++s9nIsKJ4jq4JCA/v5+rr++h3Pn\n7gYgn9/Bo48epqurq84jGxvSCqI6Y+DgkIDrruvm2LHNQI/3zmE2bTrKY48dqeewxgynjuzgUAX9\n/f2sW3ctCxeuYt26jRe8DQhuJfbu3TtltxXOM3CYkejv72fz5o8yPJwF7gEgl9vO0aMPlbcB0W1C\nLreV979/Lc3NC+nsXMfAwLMMDr7OCy88z/DwfcBJ4AHg68Dk2Vak9QwmsvmjODhMJPr6+mTTpi2y\nadMW6evrC322adMWgQ0ChwTEexySTZu2WK/R3t4hudwi7/iSwDzv+SGBZoE+gS1Vr1cPeHOv6hyt\naUt2B4fJguiq/uSTPWNapfv7+9m//yAApdLN7N9/kOHhm9Dxg2706t8TOONgLYdfF4zbGCillgHf\nApYAo8ADIvL18V7XwWE82L//oGcI9IQ9d06/Z4xBqXQzTzzxR4yMbAucdSudnXd4W4iPMzz8FQC+\n972PMnduHlhZ4Y6vAB3AreV38vkdlEqHa/m1Lipq4RmMALeLyHNKqQbgGaXUYyLykxpc28GhBugH\nDvDMM6/R399PV1cXXV1dtLWt4cSJ14E9wDLgJgYGnuXBB//KMwTakIjAm28eQMcDQBsFf9JnsyXa\n2lppbn6Zzs47GBg4CkCpVP94wZiQZi8xlgfwHeB3Le9f1H2Rg4NBX1+ftLd3SiazUKDb29Pr/X0+\nv6QcP9Bxg/Aev1hsEyjE3jfxgEKhKO3tHZLNzvdiDhskl1sQi0lMJpAyZlBrQ3AF8A9Ag+Wzi/6l\nHWYGKgUG+/r6JJ9fEgjuzfcCfvGgXvRYpRoCxzcHrrHECxAeksbG5dLYeHnMWGSzi6VQKEpvb289\nfpKKmHBjADQATwMfSfj8on9ph+mJ4OTv7e0NTeDgSi9iX+31Ch5e/dvbO6VQKEqx2CbFYpvnRawJ\nnNvnvW7yjIPJGpQSPAeTmZg36QxCWmNQk2yCUioL/BXwkIj8ddJxu3fvLj/fuHEjGzdurMXtHaYx\nolmBxx8vMTq6n6TAoA1KvYiICeTdyqlTACUAhoa2odTbiPw/wMuBs7qAM8C/IZ//L5w79xTwsPc+\nwG2BY7eFPrv33j2sX78+lI2YyNjB8ePHOX78+JjPqwnpSCn1LWBQRG6vcIzU4l4OMwtxSvDvAJ8B\nlqLTea/Q3j6LZ599ErARhbYDwwwPNwJF7xo3EqQYa9LRb4EVwIvAV7zPtpHNvktb29WcOBE95wHg\nvHf8jcCm8njy+VNAJlTTsHPnLQwMPAtMvHGYMNIROp9yHngOOAE8C3zQctzF9YUcpiXibn/J29v7\ne/pcblFoq+AThToll1sQ2ft3Wlz8QuCYeQILvON0nKC9vSMShzDbhWZpaVkuMMc7x8QeonGKkmQy\nTYlbm4sN6hFArHgjZwwcEhANCFaLERSLV8cmtI3pFzYkfd6+fonApYGJvSAWYNSxgvC1+/r6pFAo\nep91iM4ulKS9vaNCDMG8rs50vJhIawwcA9Ghroi69QMDHwfe9bj+8OSTxsU+yuDgr4FWTp/+5Vjv\ngnbx7/Ze30pLy5d45x3F8HCeN99sCxx3AE0g2ga0lYlDXV1dPPLI/d5YNVEpn98BtAJXxe6YyfyM\n0dHDgedjHHI9kMZi1OKB8wwcLEgT/Tcrs+8hhGsDMpkmaW/vqJBmTF6Z/WOi6cT50tDQEssMRL0Y\nPf6SwCLxtwkLpLe3N3UG5GIDt01wmApIawxssYPGxsu9lGApcZL57n3cGARjCzbuAGyoOnH7+vq8\nuMQ8MSSkbHa+dRxJ3IiLDWcMHKYE9GTyV9VsdmEo6Gcmo81oNDYuj71XKBSrEpHy+SWx1Voblagx\n6BDYYL1mEO3tndZx1GPi2+CMgcOkg2119FdWn9obdLFNQLG9vVOUKpS9gGx2oSjVZJnA9tXcXMPQ\niXXgL+xpBCP+OrDoG6lKHkKydzPxWwIbnDFwmFSwrc5JK34w0t7b2+ut2hs8Q7BAoNVLL3aLzg7E\nacM2XYKwJ2CYhf59DTMxzkaMjyt4Xf+cIFOxr+J5E4m0xsBlExwmBEklxZXQ39/Prl37GR39qvfO\nDuDTwMuIfB4d+T8MfBZY5D3v8v6tfP/RUVDqdkRMJmEbv/jFCEePasLRxz72WYaGwtcYHHyd667r\nBjRxCAhlQpTailLC6Oif4jMVpw6cMXCYEAwOvu4968cw9V566Q3mzWsik7mtnHoLagDs33/QMwQ9\ngSsdAC4DDM34DPD7aEbgGeBwFR0B//6XXJLh3DlzvYcZHj7D/v0HeeyxI4E0oj4rl9vOCy/4Kc/H\nH/9jVq5cFjIw2oe4B22M2mLfZ7LDGQOHi47+/n5Onnwa+F/ApRjNwVOnbgU+BGwgkymxdu0a9u2r\npgHwItBBPr+Dyy5byqlTZjLfARwgm32J1tb3xs4qlW5mYCCsefj221vRBNp7vKP8SdvV1cWjjx4u\ney+Dg1dx4oRROtKexalTNvb9Vd71dtPY+Ar/7b9NIU2DNHuJWjxwMYMZA3sufoN1H66ZfPa9dbzE\neIEUi6sj100fuLNF/f0swoUECddEgo4mVmDYjoVJUcGIixk41AM27cHLLlsMzEVXuae7hlmRDfsQ\noFT6y9gq++STvisfrB6MVjP29/dbmYsrV17Ob36zB4Dbb78lcRUvlW7m8cf/OMAk3AHcwNq1P+D0\n6T1efOEt4Bh+8RPs2nUb69evnxreQRqLUYsHzjOYEbDzAS4XTcq5VMKqwvPKEfhcblE55ZfN+qt1\ntAgpCuMhaGJRODvQ3t4ZUTYOswxzuUWSzc6VqGKRzhB0eGnIzvL9o5kN40n09fUFsgl2glM9gUst\nOtQDNld81qxF3hbBVPtt8R7d5QnnE43iW4nGxuUxAk9Qwry9vVPa2ztDEzubnR+4ZpCOrF14LWyy\nWsIU5GYpFld759mrIoOsxfb2jvK4/OKpySeXntYYuG2CQ40xgnbXDW7l/PmbvOf/CR3NvweTArzm\nGgHwovQ9aHHSMM6evYxjxzaX5c6ffvppdu36KqOjLcA/omXLT6Ir6D8DwPnzWxkZ+bR3zaOBq2nR\nkmuuOcozzzzvjcXPVpw+fQcjI63edXq8scEf/uHNrFp1Oc3NS+jsXMfevd8IFVeNjLwBbEWnPv3v\nP5WyCc4zcLhg2BiF2jMwq79x3fskTA7SHoLZGoRd/I7Yah0k8LS3dyQE7ZKCiX3eNeMUZy1+usE7\nt8/77DKxFTbp9/S47dRlw47cINAg+fzSKUdHdp6BwwUhqUmJ9gxMAO0VdL79ILp82F+BGxt38c47\n73rpOvClxzegV/gDwM/xFY00Tp8+Y+EemM9PohucAKxEqRcQucEby0mUup2rr25j3z7tXbz00q/Q\nqcCVwA1kMu/w7rujwI8JezfbgYfQPIajjI7GU5d+ShE012EPjz12pNyHESZe4WiscMbA4YKQxChs\nbl6CnsB70NH124D3xc6fPXs2Z8/eR3BSZ7N30Nb2L+ju/nOOHPkuzz03goiZlDeg1Ns0Na2KMQO1\n0XkPmnh0E/AU8H2amgoMDf1bfFJQG83NR3n66ae5666vAF/zzt8B9DB37rc5e3ZPYPzbvOcPEWY2\ndoSIUkptReTToRG9++4w69ZdywsvvFhuxjLWrk4TDdeF2aEigh2G03QV7uxch06vfQHYB7xDS8v/\nRqmt6Ml0mFxuOytWLI2dOzKS4/nnfwRAc/MSRIyx6AHuQeQKfvGLf/B0DfW1lNrqaQ7+HdoQPIze\n79/H0NAbsXsMDr7Orl1fRRsCc+27gaeYPTvnHdUFPAn0kMn8CsNs1DEBRT7/MB//+GYKhT0UCnv4\nxCc+Qi73rfKY4M84e3Y+J06cDjRj0V5UNQp2XZFmL1GLBy5mMOWgU2l27b5omi2XW1CuCoyn+Dqs\nlYlhXUE/zajFSuJZCRMXMFH8YFWjP5bkSsR8folXrRiPCWQyC6Wnp0eiqc8PfOADoe+ZyTRJT0+P\ntSR606Yt0tDQIr4MWn3lzgxwqUWH8aCvr0+UaowF2OKqQ5oZqDsM2YN+lcRF9GfLrAYkbCz8isSo\nMRDRxkn3ODgUu04wFajvF612nF+ezOHUZ8k69qTvIyKRz/okqZvTRMIZA4dxQa+gUWXhUoLqUFyd\nKEgLtq3yQdkxW3TeTPRoeXAutyAkhhL1VnRpc5xEFPdCugU2SCazsEwZtqkpZbOLxc9KVDcG8e9a\nsvIkJhLOGDiMC7Y/eGiqUhMQXj2DbnwlDcBK2xGRcAqzmmEJGgpDFrKpJGezi2O6iZV0Fk1a0aaS\nFBxv0hjqCWcMHMYF26TL51usAp+53CKrVFkQ1TQA02oEVhJDsX3mxzEOSZTvUGmcSduDKBMxqd9j\nvfQObXDGwGFciK5wfoBPk26MKpCt18HFnACVvAxbPwVfKq1ZxhLQq6bANJXgjIHDuBFeJbtFdxmq\nrEZc7Vq1MB5JWorRTkt+R+U+AXur9aQJXm1rYxtPe3uHFItXl3UWJ4NXIOKMgcMFIGmC6mBicJI1\niab4llKpAEcnVpptxVjhr+SGmuzTh31h02gcQHdMTvre0c5OScfo79Ytuipzg/eYVw5g1hvOGDiM\nCZVWQnvO30y21qoTOm1vhLTjtE1K2z2UavK2CeHovk5laj5ENIWZFEdIOsZPRzZKvKaidVJsLZwx\ncBgTxhqY8wuDOsuTLMlLSDYm/uv29s6qYwyvwssECtLT0yMi8YxEJtMkvb29gXsHPYZWMT0RdOqw\n8tah+m+zwRtP9Dsum1LGwNUmOFREf38/g4Ovk8mUGB09iS482oGm3Z4BFqLLkg8zNHQPx47ZOPjR\nsubbgX9Gt1d/E/gHnntuNnv37mXnzp2JY9H1ENei6c5fB+DwYV3g9O1v9zE6+ingAJnMz/jSl0rs\n3LmT9evX8+EP/xEjI7PxC4luBX4J/HtGRg6Yb4oRSh0cnFX1dzFKyYODr3sFUStixyj1z2UV5SmB\nNBaj2gP4JvBr4IcVjrnoFtChMqqlw6p1HVJqgcdKNP0BTIahcpQ+zuzrFh3cC+fwM5mmxDRde3un\nR/WNr8DVVvfKnkmf9z0qt3ivFPPQykyXSLC1u1LzJ4X+ocgEbxOAa4GrnTGYvEgTHbcLmYYnUWPj\n8nK03ATVbDn5oNvv39sYDpPui287gpM4zhwsiI1yXM0YVI9ZGHUlfyvR3t6R+NvEuzEdCtGdg1Jp\nkwETagz0/VjhjMHkxYXkzdOqD8c5Cc2xSHp0Tx+tX7AZAxs9WBuEcEbAVjhk7t3T0yOZzPzQOdGV\n3ac7h72gaCflSsZgMsQGkuCMgUPV1SypXZhxy4vF1RUncNgVN9WA4aImg0qGJUj1Tc4QBIt+SgJN\n0th4edkVt22BwlWIujVbS8tV0tfXJ729vVIoFKVQKEpPT48l63Ao0MsxnJJMElKdrEhrDCY0gLh7\n9+7y840bN7Jx48aJvP2MQlSJKJfbTi63leFh/blNmy98zkngQWAeSt1GQ0MjZ8/24LcNO8kzzzzP\nddd1Uyrd7ImabMYXK6mu+1covMaKFQ8C76O5+WVKpbDwR2fnOo4dMwpIBwjrFbaxatWD5YBjV1dX\nTDTkP//n76IDjf45r712B0BIw/Db397BJZfkApLrGiJzvXO7Q9cZHj6JFlL5jHfk9qrfdSJx/Phx\njh8/PvYT01iMNA+cZzCpkMTTr8T68wN9HeLvzQ8JLJBCYVHASwivlLZgo9E3SFuslPwdTOAxHhco\nFIoVz7fFErLZxdbfRm8l4jwB/Xn0+MmhU5AW1MEzUN7DYZKiuXkhjz12JPHzl176GfC3wCogrDM4\nNLQV+F30Cv0iwZXy3DkYGDhabkc2OPhrXnhhNidO3Aj4qcZgu7KoF5CMNrRHcC3h9OQ2VqwIy6kF\nm6+USjfzJ3/yoXLqUeNW/uRPrueVV87G7jI6ejnwkvf9IJt9l0zmDMPDh9EaicHrvJhi3FMQaSxG\ntQfwCFqI7h20dvWNlmMmwAY6GERXYq0eVJkvr5udHLKshGZ/vyXVypjklYxl7Js2bZFisc3bt2+Q\nKN03uk9P8jx6enokm10s2eziMkEpnqUw9OruWOl1NICoazOi4ijzpkXMoGbbhKo3csZgwmETB6nk\nnieV+hphE98YxOXEqlGDM5mFqSZMOA3pu+1GbixpmzPWbElfX59n/AoS5E00Nl4eK4AK3lPLq5ua\nB50mbWm5Is1/R93gjIGDiIxtkmjpsHD0XefgTYzANyhmpYx2FhIx6kXBmIOvkpR+vPFxVyqKGsv3\nNBNc90gwfIe4RFlvb29IuzGbne91YQp3bprMXoFIfWIGDlMcJjJ/7726q9Hv/d5HvP31y3R23sGR\nI8c4ffo7rFixivXr17N+/Xpr74Suri7Wrl3NiROmXbqhLr88rvENDS0KdVYKxhxKpZtDTVhzue0M\nDl5VznYAgXiGkS/fjI5DbEJTkf1sxblzsHfvdq+Fu84ajIxs49Sp3wCXAy9SLC7n/vv/66SVPh8z\n0liMWjxwnsFFQTWdgKiUVyaz8IIYcrY9eTUJMtsevlpZcNI2oRLHwZxXLLZJNrtY8vmlIYHWMMko\nqVuS7f0490DHF3wV58nuFYi4bcKMQFqdgN7eXm9/bP6Q0xmFaqSlSsKg0fNthsmWngxuPUxTVZv8\nevQ+YQakbRIb+rEtOFoUnUYM1kssEVtHZb1t2mIdx2SFMwYzAGl0AuKS44vEVz1ONgrRCabUgtiE\n1PvnuFhI8BrJtQ72IKMtKKnHEu67UDlgmbT6i0RjA34wcInAagmzKEsRA2Hauk9PY+BiBlMMwVz6\n4ODrVY8/ffpMqA2axgF027AdjI7u58QJuP76HnbuvIWBgWcBeOmllwLdgPSfvlK3IdIGaAbjvHmt\nwIfwuxzfxMDAs+zcae/F2NraWnGsuoehvp9p1+bvx2eTnvHXge5+pKE7ML3rcQZAqbe58sr7mDdv\nPm+80cLLLx9idPST3tGGWXiGXO6bLFzYxKuvmhZxn8Bv4XZ4anVYTgFnDKYQ4hTjreRy28sU4+gf\nfT6/g6amFktvQog2Qz13Du666zY02Qh0j8QwGhoaWbXqAU6fPsOKFa288cYQPikI4DCDg08D9l6M\n8AD5/A7veZTIY9qZx7F//8GQYRoehjvv3Fc2ip2d6xgY8H8HHbB8m2LxPq688kpKpYe8Nu4lRkff\ni0gXL798nLVr53P//V8p30Nf6w4GBo6WiVOvvrobOEkmc4i1a+fQ3X2HZzDj9OkpjzTuQy0euG3C\nuGEn88RbjQUDdNq99t1ipeYHGo1U2mKY1KJPSb7kkoJl6xDuLWBKf20Vh6a8N9zZyNc4SOIuJPEW\novEGrY5cEL3/LyVco7pcetI9p8KWwAZczGD6Yax/oDaRUMNCbG/viHABTHAxaBw6RAfMzGc2A2IC\narqOwJ5NqF7LEAwgJouO+gQkW0AxnXRbut9wJhoD14V5CqFUupl83kiOmT1rGlmtLuAI8Bl+/vN/\n5GMf+yyQ5UtfKlEo7EHHEEroDsamk/AOdCflBvTW4R40ZyCMTOZVdL5+M/n8w+XxdHV18eijh9m0\n6SiFwnfwaxn0Nmdg4Nny5+3tD9Da2sqRI9+1xkG6urrYufOWctfjlSuXobcn6dHZuY5M5jY0a746\nSqWbyeW2oqXZfodcbuvUkjC7EKSxGLV44DyDmiCNfHfw2HiPwXBdfniFLgUUhU0uPdgH0UiEBRl5\nbVX7BFRaZZN4BdFsQrQi0tZvMYlTobdLJhPQGvNSkn67ydYm7UKB2yZMb6T9YzXGQ+/RW2OTMpjL\nNxM6HndI7jsQbIia1EDE1uo83uw0WRwlTawk+H2jWyBfpMScX70Z6kzcJjhjMAVgU/GxSYAXi22J\n19B/3NE9f7jgKJdbFKsz0Pfq8AxJvCOxP3nDuXvDBdD1DsbTiMcWfM2C5FqGC4+VmOPjIqrVtBCc\nMXDGYNLAlx/riLnEvb29nnBHWLcPkotmfOJOtDOSLaMQbaIS7ai0pLx6674JNqbehsAKHTdCpuhI\nayPGW7IHqxzHWo4dl2BrjRmrqOCp7fcaqxjLZIUzBlMY4T/EeARfT55WGUvvQHNdzRo0E3RN7Hwb\nuy5ZatzEIOxpSntJdDyzYGuYWixeHUuZpinHtomzZrNzvVqFsWkW2jyyqYi0xsCRjiYhwoSdo7HP\nR0cVcAkgVa8VVf+58spWTp26w7t2P3BD4Oht6IxCGM3NCy1Xfg2tdFdCsxl7QtfJ5UZoarrCIzx1\noTMUu7GpJM2bFyQjgVJbeemlEU6d0ixCU6XY3LyQ0dH9oXMN+Whw8NdAltOnf8nw8CdC42lre5B9\n++4M/A67U5GFbLqK0xppLEYtHjjPIDWSVYEPia6lN3z58CprWooZ2CsNTcFRr+feLxWYJ0oVJJOZ\nY1097VmJVgnvxfvEtCsLchnCY18g+fxSqzcTXvnjgc4kHkG45Xqw3iC5wjH4+0yHlb8acNuEqQtb\nKi2fb/G2BVHXvjvg9iex7vzJ097e6cl8R7MCHR6j0GcXBjsU+5WEnYHy4LjLHy8gCgcOKzU6rUYM\nim8BFgSuH76P2bpUyrJUKn6aTnDGYIojumr5++/0Sr1JEfHGxuWx9/2VNbjqNoYmXybT5LU4swcD\nbfv3apoG9urDZMqwjnmYLsqrvWOiHkiz90ie5HGvpXpQcarCGYNpBF+vLz5RbJH4agIjNh0C7XVE\n04b2zsJjDVqmdcWrCbHE5dQWeZ6JLRDaWXF8tt+gWrpxqsIZg2mCMEPPFBi1CjSV2XWVUmBm7x7s\nARjWOvS3CX4fRKP+a5tkV0uwgOlCU25JRsL2fpg4FaxJ0PyEWbMWRd63Z0VEpNxJSZ/THTpnLArO\nUwnOGEwThF1nO+Ow0gSy8RT6+nwJcS39vVqifAU9UeaF7ukLo+g9eSaz0KpYXM0bqJTDr6yOFAwO\nRgOrPhsy+tzEPrSycdQIdsd+z+kGZwymCKpNnLFW25lrVuIpxNWPoipGJc9IrBGddegUvzTYGKYt\nAmu8cugwIaoaWScplmHPfnRavBO7ZqHpnagneIfouMIaKRZXe9eNn2M6LE1XQyCS3hg4nkEdERUr\nefzxP+ZLXyqVVYohqPq7MvV1NU/hBjRH4bXY58nqR6C5B4eB/d7rbUAPudzzzJnzFmfPnkRXNOox\ni2xD8wy6OHcOvvzlO72xHgVu5ty5uyOKRdXGHRZEOX16T+y4QuE1hoff4s03D5TvA3DNNWsBOHbs\nCuDJ8hhPnfoc8KfY1JnnzWus2GVqRiGNxajFA+cZxJAk2mGLykeLb5LYd5s2bfEi/sGOxeH0n321\nTdYsKBSKkToDW32C8SiioqLxfglJ24SkgiSb7kFSC3gdZIwHVf0xh/kSQV7GdAXOM5iaGB19r3Ul\nbW5ewtq1AA/S3LwwJrnV39/P5s0f9+TBnkGzA/1Vs7FxFxs2rC9r9mmPxJy9DfgU8E3rmMyKu3fv\nN4B7vXd78DstvwIcJpM5xOjo1wh7HFvp7Az2SPS1Dmx9F4O9D/L5Hezbp+8RPDYqgwYwZ84X2L//\nIKXSzaxdu4YTJ6Lf4kU0A/Ja4DZmzcpwxRXLWL9+vfU7z0iksRi1eOA8gzJMRFvn+y+xrqTVAoDR\nWEO4irF6NyM/xRhe5fP55hi3wJCNbKttNjtfGhsvl0Kh6AXooscsLXsWaZAmFZmsCm2PW/iBwg0C\nTR7TcnzZkKkEXABxcsKe1stLkEEY/mM2bnuwVHl1zHX2yUD2LYDNHbbJokFrWZsgWBRkc70bGlpi\nmgrBgGK0JVu1FGJaRPkIeuvSKUEdhHA6MtoodYGkoStPF0yoMQA+CPwE7YvtSDjm4n/rSYrgH75P\nHvInlRHaCP4R+8cYHUJ/YtpKj/V1LxV7A5E1FSr8omXNOmcfrjjcItAaoisnxR58I7JMkhqfVBNm\nSWMo/NqHyjEKu45DMg9hOmLCjAGQAX6O3qTOBp4DWi3HTcT3nnSI58njE3nWrEWem71a2ts7ve1D\nSaLcAl9HIP7HrcuAzUoc1SyIr5jx7UXY5fYJPv7YlWrwahSCCsf2FGGlbku2exrCz1h0BGzXUaoQ\nOj456BnXbZiumEhjsAH4buD1523ewUw1BvE/2GTpsPjzJL2BeEv0cPszYzCWifYs/AkXLYCy1Slk\nMgsTRUeWo4jwAAAgAElEQVTC0f3kQqVKk7oSFXgsCkO26zQ2Xl7+3E5YKiUqOk1XpDUGtcgmvAf4\nReD1L4F/WYPrTnn09/fz/PM/irzbRrG4gt/8Zg//9E9vcP78TfhNSE4C30Hnw28CHrJc9RXy+afY\nubPEwIDWOjARdh9d6K7HW9G2+rCnqrwqkMfvZ3g4y/DwH6KzCRpKbWXlyssZGHiWJUsaefXVcC7f\nxlEoFPZwzTVrQ1kBo2hsOjrffvst5c9WrFjK0FAww7CNFSveV+3njKGpaQ5DQ1sD72xj1Sr/OlHe\nghnrI488NLN0ClJiQlOLu3fvLj/fuHEjGzdunMjbTzj27z/ote3aUX4vk7mN++//L3R1dbFw4SqG\nhozktyH7GMOwDVjs/XsSeAr4KcViC/fff9ibbL54yeDgr0PdlXRHpI8AT1EofIdHHjEG4yTQDTyP\nniT3oFuS76ax8Ve88w6cOlXi1KmTwPfQ6TiAG8jlRlixYm2kQ1Mb11zzcoy409/fz9693ygTqvbu\n3cH69evp6upi374vsHnzRxke1kSnXG6Effu+AGhJ82PHgp2WbqWz847QdfX3fZ3Tp3+FJhMdAF4k\nm32nfJ0kXHPN2mlvCI4fP87x48fHfmIa96HSA7309AVez+htQjAlqF3wDaIpvX4TEwPt2puAny3I\nVRSdafCDZNUkxPU913jbA6Mh0CmbNm2xcPPDIiBht9uuhZB2T1/N3bcVUPnn2cVT427/Au+3Dccd\ngveYLjqG4wETGDOYhR9AzKEDiP/CctxEfO+6IlxhGO/0a0uv6Wj+GrHpCfiiJfZJZZtwts7IPpdh\nQ2yiBQNpOghZ8gzJYm9c4RScae+ezS6WYrGtChfAPqnDv5WJPTRJsXi1tfW72d/bS68XSlRaPfp/\nMhPUjCphwoyBvhcfBH4K/Az4fMIxF/9b1xmVioqSiDd+5H2ZZRJ3W69VyRjYJ4zpoRgX9GhoaClP\ncq2AdGnkmELZkFXqfxCFjU8RPNZXMO6QYMYkm13oGUjf2/HTkEn9ITfM2FU/DSbUGKS60Qw3BtUE\nQHyCT3TVjk8qUzbc3t4ZmjiVq/xEbIQk41rr85KrAZPShUFBkOAq3NJyhfiKRL2h3yAsUhK/X2Pj\n8rI3EP4+0bLlRQKtMmvWohlRY3ChcMagDkjaJqRZtZJy5jbXPtiBOJomi++rjQaBfeKZ8/Q17cag\nsfHyBLm0UrkEOMyaNFoIYS/H7tHYqcXJxUuGcbgmdI9sNl7g5aDhjEEdYEg8hUJRWlquKHP206xa\nUVYeNHscehujcINEJ7RtHL63oQ1IsdgWapVmZMW0y25asM8L3NPEO+Z5Ez8opBpXZvYZh7atSpOl\npZpttfcbtNgClvrzXtGqznYvxyEMZwwmGPE/2mReftL5l1xSkLBrbbyCqAqRneZru6ZNhShaDu1P\n5D7Re3jTGMXve2hW8GJxtRQKRU8lKclI2YzB0vI44/GESwOeiR+wNOQnrci8WLS4ivl87C3TZiqc\nMZhg2Cvp0vHfe3t7RalGifPso8pC9iKlsbrH9rEGKx1tbde2eKtvcmRfb2vSbhPiEupxsdNlkd8k\nyNCcKzNF3Xi8SGsMnJ5BndHf38+uXfsReT/wGcJaAJ9Dqa2IfBp4hUzmZ1x77Yf54Q9/zunTe1ix\nYhn79h2uEYnmPWQyJdauXUN3d4m9e3dE9A56yOW28sILsxkevglYCfjkoFxuO6Oj7zAycgD4LfAO\ncDs627yJfP7JspaCRhs+weowzc0vs3YtnDhxAJgDvAsUY79JY+MX2LDhZS677A/41reOIBInLjlc\nINJYjFo8mCaeQSVVX3sNvU6PGeJPsh6gbbUuSEvL8siKWX37YRMVrSwy6u/TgxF/E803WwO/gMqM\nsVQmDfkl1FEpd79JahqNhrBWod2DMQKn0VbyDnbgtgm1h43R1tvbW55oPT09gb2vLiYqFldb//AN\nqomS2BueJG8/4qzERbH0o5l4NnGTateLshb94qfkCWwTO00ykH6HaZNWjRqtkkA+Vk7tjEEynDG4\nCLClueyBOH8iVCrlFYl29mmVaODOTiJKNgbJKkDx+0cnaLRXY+XrRasl+0RnI+xNVqoxEs14whkV\n08MhKF5SEltMY7prEowHaY1Bpm77k2mBpxgd/Sp6T9vjPf+v6KKjdGhuXoLfbXkhWh9mM3CGfH4H\nt99+o1dxeNh73Irer+tKxFLp5gsevakszGRKwAFGRz/F3r3foL+/8vgLhdfYtOmo1xl5SeCT2cAf\noWMMh0Nj1F2SD3vfbTNw2HvPx5137gtoG/YA95LP//8oNQzciK7EPASMvcLRIQXSWIxaPJgGnoFf\nS2DIOQ2xFUq/v0CgOxWFN437HNzzB7clSfGCNNsEgzQFRdU6NsV7Emg9hYaGlrIYSj6/SKJbkigv\nIInh6GsrbBBNNgqnWzOZJrdNqADcNqH2iLqxSs2PTHQ/EGcCXXH3uDvWqPRCi2kqBTOjAUNbhaBI\n9YKiNOOzU5VLkcBnc2AS2wuLKjVDjQcf/a5OjopcGc4YXATY989rRJNs4rJa/l7ZnBOU4ApXMaY1\nCMEov17x7a3Ogh5EpS5HmgB0acDbudTaMq36eDoiqsq23gVbyr9NZU3Gym3SXSXi2OCMwUWAzRj4\nlN8opdaXPPfLlE2AMX5MNVfcVpikDYt5nSynZpcv01sRv+GKKYwqiNZQOCS2TshBVNri2Aum9O9X\nSTrdTfTawxmDi4DoNiGXW1RegVtarvQm5lKBZWX3NR4hbxJTxWf3HqTsQtuow3qy+sIlfqagEgMy\nXnyklLmmUTGOUp7Dab1oGtVeRJSsgJyk6eBw8ZHWGDgG4pjxLn5fwndZv34969ev5/rre4D7vPe3\nMTq6kV27vsrcuXNj3X+gBHySTOZnlEq7A/qFe4EHgXf40Y8yXH/9U17fwq8S74u4GR21b04x5g6P\nyWheb0PkPLpHYhEtqRbtvbgn8F4/5841cdddXwG+BujOR62tq6rc1/xWb6LUO1x55ePMm7eq/H2n\nu/zYlEMai1GLB9PAM0haCe1ltsn1+qazjwl86RLiOZ5nYYqTjJtfuebB5+4nbxOUWuBJnkWLjzo9\nL8NWi2C8AsMotHVz7kzc3th+K+2NVI4HONQeOM+gdti7dy93332Qs2f/GVCEV1ADIzQKWmzUrOZL\ngRsCx20HFtLY2Bjq8zc6egm+Z7EDrY78N2juwW2B87cBDwde51HqFq6+eh3d3Xewe/cdjIxcCdwB\nPAs8xdy5ea688r2cOrU5MPbD3pjvBe5CKyn798jn4e23/w0iC9C8hjneZ/3AQXR/xVmJPRNtEN81\nYXh4lDvv3OO8g8mENBajFg+mqGdgb4fWHVoJ48cskLinEBfkqNR92NcWMKv+AmlpuSoSQDSBPz8F\nl5Seiwb7NJ3XsCXj6c+GhpYQ5Vd7IOFKwWgnpCDiNOZoGlZLrjlcfOACiLWBnQ7cXCbUaNXh1REX\nPLhN8Gm+SaQa+z3ioiamKGfWrDiBJ5tdXOYUJKXngpH6eNMVo2GwRvxUY9LWIbxNSoL5zoVCUXK5\n+bFzGxuXT9R/44xGWmPgtgkXhCxvvfU2J07c6L3+Htqtb0O74TcAq9EU41dYu3Y1O3fuZGDgWY4d\nC19paCgPjBAsB9bbhMtidx0aWsTQ0E0odRu6tNd3sUdGFnP99T08+uhhjh79y7Lr3tn5YfbvP8id\nd+4Bsl47d01h9tuyn/Su8hnv321o0esoGqr+MqDLsu+8cx/PP/8jr29EG0ptDdxHY9WqleU+CACl\n0s1u21BPpLEYtXgwBTwDG3PPLj2et6yawaDeAjEtwIMMubjrXPBc7w2e+53sXYSrBUse+9F8tkh8\nqbAOC9nIrslovq/dM+mUcLqxWaLpRlthU6XyaF/8xE/Lur4GFx+4bcLYYOP0a82/DaIZhg0ya9ai\ncnPUSsagUHhPrBdi1FX35dHNJI1mA5o9g9LkdVgOV0Mq1Rho0uIbCXsVZeX6g+TKxJLovgRXSzR+\nYWoE0tQ6+CpJnal5Cg61gzMGY4Q9PRgO1gV58kl6h9Bsbbtu4/vH4wJmBe8UnfLbUA7+hYlHerUP\nN0FNogAbbyN5PHaPpSVmaPz4RlzgxHgiSX0bbKu+MwYTA2cMxoj4H6a9f4BBeIU3zU62lCdHdJIH\ni5PMufl8i4Sj+KUAMzDsUfhNR3yeQHCFTaIA2+jSSXUB8ZqH+Dl6HK2ivaVgG/g14m+P/POCSkdR\nVKNhO9QGzhiMEfHUWzyabzj6lSTEDG03qW15uKQ4LhyaVCSUZuJUUmJqb+9IlF6z/Ra2c/r6+iSb\nnS/h1OU8CXZE8qXMN0hj4/LU93K1CBcPzhhcAKK6AeFy5QXS09MTaRRSkMbG5dYJXDk4t0aS6gkq\nucnBUuRisa2sFRBtojLWisO0E1F7T1GPyZaC3FL2StwErz+cMagBwqIaJY+E0yoQzzAk1dTbA2oF\n8eXPx2YMxtLYtdJ1ogVQ1c7t6+vzApamsKmSMdggwapMh/rCGYMaIDnKbm/gYVtpk4J/+jrhbUJS\n6XI4OGealdpX42hg0DaeuDJR3BBV8pLC5dGNEabiAm98yZ2RHSYWE2IMgD8AfgScB9ZVOfbif+sL\nQCVXOTmFGHf9GxuXJ+7pbcG/fH5RIPUXV+wJewEmOGcyFnHhVbhCYJlks4vLpdO28fgGrnL5sX9v\no3EQ/R101iS4NbE1gnXbhPpjoozB+4D3At+fisagUlDOp/VGawH6xNYZWZOTkidXtLbfzxrYV2Zf\njiwYiFwoOu1oah3M9S6NjUe3aotf3zcG4f4G8YrD4L3tWwHbqu8CgpMPaY3BuOjIIvJTAKWUGs91\n6oX9+w9y7pxfx3/unH6vq6uL/fsPMjx8H/AAuiZ/Dpo2fAZYRjZ7nnx+F7Nnz+b22+/gyJHvescd\nBTTdd3DwdUDX7b///Vd53YIuAx5GZHeKEfajNQWWoinK+733t6G1AvZ4r+cCYc2Et9/eZr1iqXQz\nTz7Z433vG1DqFhoamli1qjVyZFDjYCnwscBn28jlRiiV4t+hq6vLUYqnKtJYjGoP4AmmoGdQifRi\nX0HtMmB2VZ95oSIhG6mpUgBPV0Iar8QWu2gWP4gYj2HAckniFiTpFpr27u3tnV7vx/B4TVfpKG/A\neQOTG9RqmwAcA34YeJz0/v29wDGpjMEXv/jF8uOJJ56YmF/Cgt7eXmloaJFMZn6I4x+dMEGuQJIR\n8NOH0T18Z2yrUKkbk52dZ1x1Qw32yUm6ctFMVluZdY/AGslmFyeSfuwxEb0lyGYXilINkmSsgr+B\nIw5NLjzxxBOhuVYzY5DqIlPIM/DVgIM1AQ3S2LhcisWrU+fs4xTecNuxIB8/eE7a/oC+J9Fb9jQq\nxwS6PQNhNBKrMw6TFYylPPZqK76jFE9+1MMYXFPlmIv9nVPBT8+ZP+A+uZCcfXLa0b8GNEsutyDA\nAkwfbfcDmM1iD+DZhVL6+mw9DJLasEWFUMMGrRrnIYlU5YzB5EJaYzCuAKJS6veBb6BVOf+HUuo5\nEfnQeK458TiIbg3eE3jvKOfO3V0OJqbDSbLZlxDZzvnzlwAvAw8zPHyMXbv2e63XQAf/lgJdoYBl\nFDrouNbTTDhqud9VQBfZ7B3Mm9fI7bffUr7ONdesjekm2NGGlj87CLyIUm8jcga/LZpuoR7VHACj\nhXA30dbswfMcphjSWIxaPJgknkF8m2BbdTsFNpRbe1WvFYiWHxcCK2wSXTe+ika3JUlpwHDnJr8J\nqj3eYScztbd3BoqYkmMY0WtlMk1erwV75aKLF0w+4BiIYQQn2gc+8AHJZOYLLJRC4T2WvgYNMhaG\noL1t+hpv8iSVFVefwNGCJ6UKHj/BL5dOcuuT4h22yV0pfpG8HUq/pXCoL5wxCKCS/kA2O1fy+UWS\nzS6WQmGF5zWY44ITuc+bBLqNWRDhfbN/XHt7R0zNx6TvopM0KRBnq5JMymAkTchqZc6VJnIlsRKb\nUXOYfHDGIIDkP+gk5WNznHHxo276vJBB8BWJK8uLVXKjk/QKkpA2pRf3BOKeyljuE9yiuK3B1IAz\nBgGEjYFZuYuiiTlRI7Es8NrEAuL7/mx2sYj4+29N0lk6polmYCMtZbNzE/UHgrUANi8j+bub72Tn\nVlQany3G4IzA1IAzBgEkl/7aCnCCnP/5ksvNsx5npMnDq2a83qBSk1EDm+cSFA+Ndk22MReTvA+7\nV9QqmczCsiZC2tXdMQ2nJpwxiMCef48rDSk1W3Twr1BeBTOZxthxRtAkvupGRU1LKdmGtiBd2MNI\nIgpVanOW7OZXpkM7TB84Y2CBT7QJ6hUu8VZ0TfnN5RZ5qbPoCr9UdECxIIXCosRgHDTJrFlGEMWu\nWmzLSkQj/LbgoF1p6FBV4o9vCINjqqxn4DB9kNYYzKgmKp2d6zh27C+Ar3vv3MrQ0Cjw7zGko+Hh\nNhoa9kTOPMlvf/sOun8iDA1t49ixleRy30epz6FtHWhC0ac4f/4/Ah34TU6e8khHS4GDnDu3ks9+\ndjtXXnmQwcFfA1laW1uBB2huXkJnZ4m9e7/BuXNtgE/k0cSfDnQFo0YmcxsrVqxmaCj5e3d1dfHI\nI/d7RCFNKoIXx/bjOUx/pLEYtXgwaTwDW8AwHFxsbFweES0tRFZVP72Wzzd714h+HlX/6fY8i2CX\n5bCScHD/b6thiIqOZDI6zdnScqXn3RRFy7ItiKU/zfm+hxBsiGIvxHKYHsBtE+KwG4M14kuRhZuK\ntrQsl3AMIMj8C1YPRnUBzbGd3nEdluuUxKaYlLT/D5Ydm6CfliNbIOGgZ3N5W2Kb2PHMSquMNbvg\nMLXgjIEF0b25Ugu8Mt2S2DQBstnFEo0x+Oy7ePDRZwY2eEZmobcCr7EYIZPeTNr/G8HUDVIsro51\nNNadnToSrm3vYCRi6yod7RjtYgfTDWmNwbSOGdiaej766OFAU9BPA5DJHGLu3LmcPRs+X+Q8en99\nj/fONjKZd1m7dg2nTz/H0NDXCRc4ldDNSfPo+AHA1oTR/QT43cBxOjbQ1LSYoaGT6LjA3QCcOvU5\n4E9D9zp16naU+kcqNUPV31GrIz35pG7KOjDwLLpJrCl+WpZ4vsMMQxqLUYsHE+wZVGLo2bYL0VZl\n+fwSKRTeEzuupeWqxGv4sYPw+/n8IgnzGxZIobA0hdsf9SSirzd4Xki8BLtyRiKcDnUpxukNZrpn\nUEnf0Ibm5iU8+ugXAp7EYT72sc/GjnvnnfOAzkw8/vhtjI7q9zOZ21i5soVTp34aO6e1dTUnTz7H\nyMgB751R3nzz7VgL8uuu6/Z0Fx+0jPCnaC8FtNdwLfB35HI5hoeHgbvQbdTfpr39aWA1J060xa7i\nayDq1/n8w+zcWWJg4Gj5ezsNwxmKNBajFg8m2DOoVPjT3t7hxQr06hrUKgzCrznwV13ThVmTf8Jt\n1/v64u3HcrlF5XtWqz2opFzc09PjsRKD1ZRRRuV8gXxFqXQRxyScaWCmBxArlwQHpcZ1abAtrear\nDWmjkc3OjdQQLAlNbJ+E5Af/TOfmSvJgwVoDP6UZT/eZlKMObPqBwuj2wWQS3KR3EHHGQEQqiYVU\n7x1gS+XZGYedorkJl1fshZC0UsfpwvMln2+uqECsvYwkYxDvrOQws+GMgQVxY5C8lbBNXLsxCJKL\nwh2Jg7l+G5EoSa8QlolShXKHpeh4/E7O0W1Ck2hOg+tx6OAjrTGYtgFEG/zg2Q3olN4q63FJwUfd\nRCXYnMToGfYE3nsAnbZ7hbVrV9PV1UV/f39AMxDOndvB008/7VGOV1pGsAyRz7Br122sX78+Np7h\nYWhvf5Dm5pcZHHwfp09/kaGhfwI+jdY1vJXOzjsu7EdymLGYUcbA8Az27z/I4OD7OHPmVV599dbA\nEXoS6Vx8HM3NS4AN+Dn6HnTnoSBeR7ee/ClvvNFS5jroyezXJtx9938IvBc0JtuAh4EuRkcpZzfi\nY1nIY48dAXQW4tixzaHrDAwcZefO6r+Jg4PBjDIGEG7/dd113bz66kr8yX0TAwPPxtJvudxWBgfX\nAiPkcv8fw8Nf8d7fDrzL8LBO+WWzn+P8eRD5PACnTm1j8+aP8v73r0X3nvGJRGfP3mZGhE4Z7kYX\nD92IX+CkEU8H6sIlY2ieeeZ5tEqxg8OFY8YZgzja8BmGh4GXIx7Er3nhhdmeZPlJlPoxjY27WLXq\ncvbte4inn36ae+/VVY5NTSs5dWorwRV6ePgAMEImc8hjA5rPTpLJ+DyFXO4UDQ2zGBp6wBuTNjal\n0kOh8QBlKfLNmz/uGabN+HLlbU6u3OHCkCawUIsHdVY6SqMUbBMrTcr9ZzJNUiyuDqUa7UrIa6RQ\nKEpj4+Wxz8y9fPbhIgm2Qc9m51bQTIwHM/P5FpdGdIgBl03QSNNDwKQNNWEoTBaKZyDCUf8otVep\nYHahIL7aclgFKTqOpIrKJNFRexbCXqnoMLPhjIEHex1CvJpPr7ThCkVD+NHGxNYMJV5h2NJyRTmF\nGFdMSm42YjcGyTUDmmsQNDxLXErRwQpnDDzYaMC+O+9PMj1xw9TjhoYWETEcgY5QQY+efL0SLxSa\nV+YHjKUpqU9lNgVIl0qlvgh9fX2eInN6eXWHmQlnDMQuQe7rF4QnmW1P39h4eex6YcnwbklSRDbH\nV+ttkLRN0XUG3SFPJTrRk5SSHRyCcMZAkoNsttXadmywnXoQfX19UiyulqSeCkEjYrwKzTzsrBjA\njLd1D7MbjccRHYurP3CohAkxBsBfAH8PPAccAeZVOHYCvrYP7UbbdAFMm3M9ybLZhVIsrvb6Jfp9\nDE0AMQm+JxHtttQsxWJbaBxj0VUINmW1yaU7OIwVaY3BeHkGjwGfF5FRpdSXgTu9R91x5537ELmR\noJKwzsXfBGzCtCEfGXmTU6cUhmug1OeYO/dS3vveqxKv3d/fz9mzb3qvgqSh14Aerrzy5fKxY9VV\ngFeAwyi1FZFPj+1LOziMA+MyBiLyvcDLHwDd4xtO7XD69C/RbL7D6In/CiBoQk+X9/gdoB34DGay\nisCbbx7gxImbuP56LRVm6gsM6Wdw8HXgU4QNzU/QtQEPpK4LiDMdt/P+919Fc/NROju3WeXSHRwu\nGtK4D2keaE7vxyp8fnF9oQhswiQ67x9tr2ZLGW4JuebJzUv9lKKuVowH+tLyHCr1VHTxAIfxgJTb\nBKWPTYZS6hiwJPgWeondKSL/3TtmJ7BORBI9A6WUVLtXLdHf38/mzR9leLjVe+eHwIeA7wIFADKZ\n18hkLmFkZDY+Jfl24BGM+18o7GHFimUeHbnHO2YbSn0TkfvKr01xERymvf1BYITTp8+wYsUyurs3\nlYufSqWbAWJCrQ4OFwtKKUREVTuu6jZBRDZVudEngX8N/Ktq19q9e3f5+caNG9m4cWO1Uy4YXV1d\nHD36l+VJ19n5YY4c+S7PPZdDpBeAbHY7u3Z9jiNHvsvp03toamrkF78YZXjYdB3axtBQD7/97aHI\n1duYOzfPm28eAOagS5v1Obncdk6efIuRkTxwD0ND8MIL2zl69CFrObNRLXYGwaFWOH78OMePHx/7\niWnch6QH8EHgBWBhimMvnh+UEmlIQPa+hHEFYV9tqE+02tEyaWhoCZCc7PcZCxHJwaEWYIKyCd8A\ncsAxpRTAD0Tkz8Z5zbqiq6uLa65Z6+kD+Kv1nDmXkM/vYcWKpezbZ6oGP8rwcBazxRge3l6HETs4\n1AhpLEYtHkwCzyANI9Ac5zMXkwuMkohKWpIsrpA8ljE4ONQKOAaiHWkj9NrdbxVYPGaXvxLrcCxj\ncHCoBZwxSImkiemnJpP3/26Vd5gKcMYgBSpN5nAPhAvjCTg4TAY4Y5AClSL78dblG6RQKLoJ7zDl\nkNYYOA3EBMRFSF/mkUccH8Bh+qIqA7FmN5pgBmIaRAlA+fyOEAHI1tLdwWGqIS0DcUYbA3AT3mH6\nwxkDBwcHIL0xyEzEYBwcHCY/nDFwcHAAnDFwcHDw4IyBg4MD4IyBg4ODB2cMHBwcAGcMHBwcPDhj\n4ODgADhj4ODg4MEZAwcHB8AZAwcHBw/OGDg4OADOGDg4OHhwxsDBwQFwxsDBwcGDMwYODg6AMwYO\nDg4enDFwcHAAnDFwcHDw4IyBg4MDME5joJT6klLqeaXUc0qp7ymlltVqYA4ODhOL8XoGfyEia0Xk\nauCvgd3jH9LE4fjx4/UeQgyTcUwwOcflxlRbjMsYiMibgZdzgcHxDWdiMRn/4ybjmGByjsuNqbYY\nd3s1pVQv8AngLeD/GveIHBwc6oKqnoFS6phS6oeBx0nv398DEJG7RGQ58CBw38UesIODw8VBzToq\nKaUuB/6niLQlfO7aKTk41AlpOiqNa5uglFolIj/3Xv4+8Nx4BuPg4FA/jMszUEr9FXAVcB54Cfh/\nReR/12hsDg4OE4gJa7zq4OAwuTGhDMTJSFJSSv2FUurvvTEdUUrNmwRj+gOl1I+UUueVUuvqPJYP\nKqV+opR6USm1o55jMVBKfVMp9Wul1A/rPRYDpdQypdT3lVIveEH2WyfBmOYopf5OKXXCG9e/q3iC\niEzYA2gIPL8F+I8Tef+EMX0AyHjPvwzsmwRjeh/wXuD7wLo6jiMD/BxYAcxGx4RaJ8Hvcy1wNfDD\neo8lMKalwNXe8wbgp5Pkt7rU+3cW8AOgI+nYCfUMZBKSlETkeyIy6r38AVB3b0VEfioiPwPqHXT9\nl8DPROS0iLwL/CXwkTqPCRF5EvhNvccRhIicEZHnvOdvAn8PvKe+owIRect7Ogdt3BN/twkvVFJK\n9Sql/hH4JLBvou9fBZ8CvlvvQUwivAf4ReD1L5kEf+CTHUqpK9Cey9/VdySglMoopU4AZ4DjIvLj\npGPHzUC03PwYsCT4FiDAThH57yJyF3CXt/+8D7ix1mMY65i8Y3YC74rIIxd7PGnH5DD1oJRqAP4K\n+BJF7SQAAAFISURBVFzEE64LPK+33YuFPaaU6hSRAduxNTcGIrIp5aGPAP+z1ve3odqYlFKfBP41\n8K8mYjwwpt+pnvgVsDzwepn3noMFSqks2hA8JCJ/Xe/xBCEibyil/gZYD1iNwURnE1YFXlYkKU0U\nlFIfBLYDm0XknXqPx4J6xg3+F7BKKbVCKZUDPgocreN4glDUP6YSxX8CfiwiX6v3QACUUs1Kqfne\n8zywiQpzbkJ5BpORpKSU+hmQA1733vqBiPxZHYeEUur3gW8AzcBvgedE5EN1GssHga+hF45visiX\n6zGOIJRSjwAbgYXAr4EvisiDdR5TB/C3wEn0dk+APxeRvjqOqQ04jDaaGbTHck/i8RNpDBwcHCYv\nnOyZg4MD4IyBg4ODB2cMHBwcAGcMHBwcPDhj4ODgADhj4ODg4MEZAwcHB8AZAwcHBw//BxCq7qQn\nysYPAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(transf_dots[:,0], transf_dots[:,1])\n", "plt.gca().set_aspect('equal', adjustable='box') #without this it doesn't look like a circle" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(array([ 3., 1.]), array([[ 0.70710678, -0.70710678],\n", " [ 0.70710678, 0.70710678]]))\n" ] } ], "source": [ "print np.linalg.eig(transf_matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Go back to the main page](https://leonpalafox.github.io/MLClass/)" ] } ], "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.11" } }, "nbformat": 4, "nbformat_minor": 0 }