{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Algorithms\n", "\n", "This document provides a high level description of the algorithms implemented within MatrixProfile. Runtime comparisons are also explored when appropriate.\n", "\n", "## Compute - MatrixProfile and Pan-MatrixProfile\n", "\n", "There are two types of algorithm implementations to be aware of:\n", "\n", "1. **exact** - an algorithm that computes the exact solution. The algorithm must complete before an answer is provided. The majority of the algorithms implemented are exact:\n", "\n", " * **stomp** - the first exact algorithm to compute the Matrix Profile.\n", " * **mpx** - a very fast algorithm that does not require fourier transform to compute the Matrix Profile.\n", " * **brute_force_pmp** - a naive Pan-MatrixProfile implementation that is inefficent.\n", "\n", "\n", "2. **anytime** - an algorithm that may provide an approximate solution. Note that we currently do not support interactivity to stop the algorithm from running. The \"anytime\" component is implemented by specifying the desired percentage of samples to compute.\n", "\n", " * **prescrimp** - computes the Matrix Profile in a stepping fashion based on 1/4 * window size.\n", " * **scrimp_plus_plus** - refines solutions of prescrimp for an anytime Matrix Profile calculation.\n", " * **skimp** - an efficient Pan-MatrixProfile algorithm." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Runtime Benchmarks\n", "\n", "In this section we explore runtimes of the algorithms based on varying time series length (N) and varying window sizes (M). The hardware specifications of this runtime is displayed below and will vary across different configurations.\n", "\n", "Note that comparisons are made between the MatrixProfile implementations only. Pan-MatrixProfile algorithms are built on top of these implementations and purely compute many MatrixProfiles over varying windows. For a fair comparison, anytime algorithms are forced to compute the exact solution.\n", "\n", "The following benchmarks were ran on:\n", "* Ubuntu 19.10\n", "* Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\n", "* 32 GB memory" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import timeit\n", "import numpy as np\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Single-Threaded Varying N\n", "\n", "This benchmark compares all algorithms, including the anytime implementations, with one CPU core. The window size (M) is held constant at 32." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "results = {\n", " 'Algorithm': [],\n", " 'N': [],\n", " 'Time (seconds)': [],\n", "}\n", "algorithms = [\n", " 'stomp',\n", " 'mpx',\n", " 'prescrimp',\n", " 'scrimp_plus_plus',\n", "]\n", "m = 2**5\n", "\n", "for algorithm in algorithms:\n", " for i in range(10, 16):\n", " n = 2**i\n", " setup = [\n", " 'import numpy as np',\n", " 'import matrixprofile as mp',\n", " 'ts = np.random.uniform(size={})'.format(n),\n", " 'm = {}'.format(m),\n", " ]\n", " setup_code = ';'.join(setup)\n", " \n", " runtime_code = 'mp.algorithms.{}(ts, m)'.format(algorithm)\n", " \n", " # force anytime algorithms to compute exact solution\n", " if algorithm in ('prescrimp', 'scrimp_plus_plus'):\n", " runtime_code = 'mp.algorithms.{}(ts, m, sample_pct=1.0)'.format(algorithm)\n", "\n", " try:\n", " result = timeit.timeit(stmt=runtime_code, setup=setup_code, number=1)\n", " except:\n", " result = np.nan\n", " \n", " results['Algorithm'].append(algorithm)\n", " results['N'].append(n)\n", " results['Time (seconds)'].append(result)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(results)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.pivot(index='N', columns='Algorithm', values='Time (seconds)').plot(title='Runtime Varying N\\n M = 2^5', figsize=(15,7))\n", "plt.ylabel('Seconds')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Algorithmmpxprescrimpscrimp_plus_plusstomp
N
10240.0017570.0296540.0750220.136062
20480.0061990.0688210.1826220.239098
40960.0243150.1767370.4600830.589630
81920.0989190.5453121.4077481.621021
163840.3849851.5182444.1920074.207855
327681.5549856.74891618.78097612.567574
\n", "
" ], "text/plain": [ "Algorithm mpx prescrimp scrimp_plus_plus stomp\n", "N \n", "1024 0.001757 0.029654 0.075022 0.136062\n", "2048 0.006199 0.068821 0.182622 0.239098\n", "4096 0.024315 0.176737 0.460083 0.589630\n", "8192 0.098919 0.545312 1.407748 1.621021\n", "16384 0.384985 1.518244 4.192007 4.207855\n", "32768 1.554985 6.748916 18.780976 12.567574" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.pivot(index='N', columns='Algorithm', values='Time (seconds)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Multi-Threaded Varying N\n", "\n", "This benchmark compares all algorithms, mpx and stomp, that have parallel implementations. The window size (M) is held constant at 32." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "results = {\n", " 'Algorithm': [],\n", " 'N': [],\n", " 'Time (seconds)': [],\n", "}\n", "algorithms = [\n", " 'stomp',\n", " 'mpx',\n", "]\n", "m = 2**5\n", "\n", "for algorithm in algorithms:\n", " for i in range(10, 16):\n", " n = 2**i\n", " setup = [\n", " 'import numpy as np',\n", " 'import matrixprofile as mp',\n", " 'ts = np.random.uniform(size={})'.format(n),\n", " 'm = {}'.format(m),\n", " ]\n", " setup_code = ';'.join(setup)\n", " \n", " runtime_code = 'mp.algorithms.{}(ts, m, n_jobs=4)'.format(algorithm)\n", " \n", " try:\n", " result = timeit.timeit(stmt=runtime_code, setup=setup_code, number=1)\n", " except:\n", " result = np.nan\n", " \n", " results['Algorithm'].append(algorithm)\n", " results['N'].append(n)\n", " results['Time (seconds)'].append(result)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(results)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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Rx99xG9+8xveffddNt54Yx577LEfjq9VqxYvvPACv/rVr+jbty+33nor77zzDnfffTdz584t769GkiRJUhVQbqUuIv4REbMi4p0SrzWKiKcj4qPiPxuW1/W/N2jQII499lgAjj32WAYNGvSj/WPHjv1hf9u2bWnfvj0Ar732Gt27d6dp06bUrFmTE044gRdeeAGAGjVqcOSRR5bq+q1ataJDhw4AdOzYkcmTJ/+w79BDDwWgXbt27LTTTjRr1ozatWuz9dZbM2XKlHX/0JIkSZKqjfJcfPxu4C/AvSVeGwA8k1K6OiIGFG/3X8l7y8TcuXN59tlneeedd4gIioqKiAh+/etf/3BMSmml713V6wB16tShRo0apcpQu3btH36vUaPGD7dfltxXUFDwo+MKCgpYtmxZqc4vSZIkqXort5G6lNILwJcrvNwXuKf493uAw8rr+gCPPvooJ598Mp999hmTJ09mypQptGrViqlTp/5wTJcuXXj44YcBeO+993j77bcB2H333Rk9ejRz5syhqKiIQYMG0a1btzVes7CwkKVLl5bPB5IkSZJU/cydtNrdFf1M3aYppRkAxX9usqoDI+L0iBgfEeNnz569ThcbNGgQhx9++I9eO/LII380Q+Wvf/1rZs+eTfv27bnmmmto3749G220Ec2aNeOqq66iR48e7Lzzzuy666707dt3jdc8/fTTad++/Q8TpUiSJEnSOln2HbxwPdy252oPi9XdZri+IqIlMDSl1LZ4++uU0sYl9n+VUlrjc3WdOnVK389I+b2JEyfSpk2b9c5YVFTE0qVLqVOnDpMmTWK//fbjww8/pFatWut97opSVt+FJEmSpEpiyjgYcibMeg927Escc9+ElFKnlR1ans/UrcwXEdEspTQjIpoBsyr4+v9j4cKF9OjRg6VLl5JS4q9//WteFTpJkiRJVcjiefDMZfDaXbDh5nDcQ7B9TzjmvlW+paJL3WDgFODq4j//U8HX/x8NGjRgxVFASZIkSapwE4fAk+fC/Jmw+69g3wugdoM1vq3cSl1EDAK6A00iYipwCbky93BE/Bz4HDiqvK4vSZIkSXlh3jQYfh68PxQ2bQfHPgCbdyz128ut1KWUjlvFrv3K65qSJEmSlDeWF8H4f8CogbB8GRxwGezxa6hRuFanqejbLyVJkiRJX7ybmwhl6muwdQ/ofRM0arVOp7LUSZIkSVJFWboIXrgOXrwF6mwER9wJ7Y6CiHU+paVOkiRJkirCJ8/D0LPhy0+gwwlw4OVQr9F6n9ZSJ0mSJEnlacFcGHkh/PdBaLQ1nDwYtu5WZqcvKLMzVUOTJ09mhx124LTTTqNt27accMIJjBo1ir333pvWrVszbtw4Lr30Uk466ST23XdfWrduzZ133gnA448/zv77709KiRkzZrDddtsxc+bMjD+RJEmSpDKTEvz3X3BrZ3j7YejaD/7vpTItdFBFRuoGDnmX96Z/U6bn3LH5hlzSZ6c1Hvfxxx/zyCOPcMcdd9C5c2cefPBBxo4dy+DBg7nyyivp0KEDb731Fq+88goLFixgl112oVevXhx++OE89thj3HrrrYwYMYKBAwey2WablelnkCRJkpSRLz+BoefAJ89Bi87Q50+w6Y7lcilH6tZTq1ataNeuHQUFBey0007st99+RATt2rVj8uTJAPTt25e6devSpEkTevTowbhx4wD485//zFVXXUXt2rU57rhVrQAhSZIkKW8ULYWxN8Nte8HU8XDI9fCzkeVW6KCKjNSVZkStvNSuXfuH3wsKCn7YLigoYNmyZQDECjPZfL89bdo0CgoK+OKLL1i+fDkFBXZsSZIkKW9NmwCDz4Qv3oYdesMh18GGzcv9sraICvCf//yHxYsXM3fuXJ5//nk6d+7MsmXL+OlPf8qDDz5ImzZtuPHGG7OOKUmSJGldLJkPw/vDnfvBwjlwzP1w7AMVUuigiozUVXa77bYbvXr14vPPP+eiiy6iefPmXHbZZXTt2pWuXbvSoUMHOnfuTK9evWjTpk3WcSVJkiSV1gfDYdjv4Zvp0Pk02O9iqLNhhUaIlFKFXnBddOrUKY0fP/5Hr02cODEvCtCll15K/fr16devX7ldI1++C0mSJKnKmD8Thp8H7/0HNtkxNxHKFp3L7XIRMSGl1Gll+xypkyRJkqTSWr4cJvwTRg2EZYtzI3N7nQE1CjOLZKkrZ5deemnWESRJkiSVhVkTYciZMOVVaLUP9L4ZGm+TdSpLnSRJkiSt1tLFMOYGGHsT1K4Ph/0Vdj4OVpjlPiuWOkmSJElalcljc6Nzcz+G9sfAQVfCBk2yTvUjljpJkiRJWtHCL+Hpi+GN+6BhSzjpcdhm36xTrZSlTpIkSZK+lxK88xiMGJArdnufBd36Q616WSdbJRcfL0M333wzCxcuzDqGJEmSpHXx1WfwwE/gsZ/DRlvAL0fDAQMrdaEDS12ZstRJkiRJeahoGbz0Z7htD/j8FTj4GjhtFGzWLutkpWKpW0cLFiygV69e7LzzzrRt25aBAwcyffp0evToQY8ePQAYNGgQ7dq1o23btvTv3/+H99avX5/+/fvTsWNH9t9/f8aNG0f37t3ZeuutGTx4MAB33303ffv25eCDD2b77bdn4MCBmXxOSZIkqUqb/gbc2QNGXgitusFvXoU9fgUFNbJOVmpV45m64QNg5ttle87N2kHPq1e5e8SIETRv3pxhw4YBMG/ePP75z3/y3HPP0aRJE6ZPn07//v2ZMGECDRs25MADD+SJJ57gsMMOY8GCBXTv3p1rrrmGww8/nAsvvJCnn36a9957j1NOOYVDDz0UgHHjxvHOO+9Qr149OnfuTK9evejUaaWLyEuSJElaG0u+heevgldugw2awtH3QptDK80yBWvDkbp11K5dO0aNGkX//v0ZM2YMG2200Y/2v/baa3Tv3p2mTZtSs2ZNTjjhBF544QUAatWqxcEHH/zDebp160ZhYSHt2rVj8uTJP5zjgAMOoHHjxtStW5cjjjiCsWPHVtjnkyRJkqqsD0fCbXvCy3+BjqfCb8bBjn3zstBBVRmpW82IWnnZbrvtmDBhAk8++STnn38+Bx544I/2p5RW+d7CwkKi+B+YgoICateu/cPvy5Yt++G4WOEfqhW3JUmSJK2Fb2flZrV85zFosj38dARstWfWqdabI3XraPr06dSrV48TTzyRfv368frrr9OgQQPmz58PwO67787o0aOZM2cORUVFDBo0iG7duq3VNZ5++mm+/PJLFi1axBNPPMHee+9dHh9FkiRJqtqWL4cJ98BfOsHEIdDjAvjVmCpR6KCqjNRl4O233+bcc8+loKCAwsJC/vrXv/Lyyy/Ts2dPmjVrxnPPPcdVV11Fjx49SClxyCGH0Ldv37W6RpcuXTjppJP4+OOPOf74432eTpIkSVpbsz+EoWfBZy/CVl2gz83QpHXWqcpUrO42wcqiU6dOafz48T96beLEibRp0yajROXv7rvvZvz48fzlL39Z47FV/buQJEmS1tqyJTD2ZhhzPRTWgwMvh11OzNvn5iJiQkpppaM8jtRJkiRJqlo+ewmGnAlzPoS2P4GDr4L6m2SdqtxY6iqpU089lVNPPTXrGJIkSVL+WPQ1jLoEJtwNG20JJzwKrQ/IOlW5y+tSl1Kq9jNC5sPts5IkSVK5SgneewKG94cFs2HP30KPP0CtDbJOViHyttTVqVOHuXPn0rhx42pb7FJKzJ07lzp16mQdRZIkScrG11PgyX7w4QhotjMc/zA075B1qgqVt6WuRYsWTJ06ldmzZ2cdJVN16tShRYsWWceQJEmSKtbyIhh3BzzzRyDBQVfCbr+EGnlbcdZZ3n7iwsJCWrVqlXUMSZIkSRVtxlsw5AyY/gZsewD0ugEabpV1qszkbamTJEmSVM18txCevwpevhXqNYKf/AN2OiJvlykoK5Y6SZIkSZXfx6Ng6Dnw9Wew6ylwwECo2zDrVJWCpU6SJElS5fXtbHjqD/D2w9C4NZz6JLTcO+tUlYqlTpIkSVLlkxK8+SCMvACWfAvd+kOXc6DQmd9XZKmTJEmSVLnMnQRDzoTJY2DLPaH3zbDJDlmnqrQsdZIkSZIqh2XfwUu3wOjroGadXJnb9RQoKMg6WaVmqZMkSZKUvSnjYPAZMHsi7HgY9LwGGmyWdaq8YKmTJEmSlJ3F8+CZy+C1u2DDzeG4f8H2B2edKq9Y6iRJkiRlY+IQePJc+PYL2OP/oMcFULt+1qnyjqVOkiRJUsWaNw2GnwfvD4VN28GxD8DmHbNOlbcsdZIkSZIqxvIiGP8PGDUQli+DAy6DPX4NNQqzTpbXLHWSJEmSyt8X7+YmQpk2HrbZF3rdCI1aZZ2qSrDUSZIkSSo/SxfB6GvhpT9BnY3hiDuh3VEQkXWyKsNSJ0mSJKl8fPI8DDkLvvoUOpwIB/4R6jXKOlWVY6mTJEmSVLYWzIWRF8B/B0GjreHkwbB1t6xTVVmWOkmSJEllIyV4618w4nxY8g107Qf79IPCulknq9IsdZIkSZLW35efwNCzc7dctugMff4Em+6YdapqwVInSZIkad0VLYWX/wLPXw0FhXDI9dDp51BQkHWyasNSJ0mSJGndTJ0AQ86AL96BNn2g57WwYfOsU1U7ljpJkiRJa2fJfHj2cnj1dmjQDI55ANr0zjpVtWWpkyRJklR67z8JT/aDb6bDbr+AfS+COhtmnapas9RJkiRJWrNvZsDw82DiYNhkRzjqHtiic9aphKVOkiRJ0uosXw4T/gmjLoWi72C/S2Cv30GNwqyTqZilTpIkSdLKzZoIQ86EKa9Cq27Q+yZovE3WqbQCS50kSZKkH1u6GMbcAGNvgtoN4LC/wc7HQkTWybQSljpJkiRJ/9+nY2DoWTD3Y2h/LBx0BWzQJOtUWg1LnSRJkiRY+CU8fRG8cT80bAknPQ7b7Jt1KpWCpU6SJEmqzlKCdx6DEQNyxa7L2bDPeVCrXtbJVEqWOkmSJKm6+moyDPs9fDwKNu+YG53brF3WqbSWMil1EXE2cBqQgLeBn6aUFmeRRZIkSap2ipbBK7fB81dBFEDPa6HzaVBQI+tkWgcVXuoiYnPgDGDHlNKiiHgYOBa4u6KzSJIkSdXO9Ddg8Bkw8y3Yrif0uh42apF1Kq2HrG6/rAnUjYilQD1gekY5JEmSpOphybfw3JXw6l9hg03g6HuhzaEuU1AFVHipSylNi4jrgc+BRcDIlNLIFY+LiNOB0wG23HLLig0pSZIkVSUfjoRh58C8KdDpZ7DfJVB346xTqYwUVPQFI6Ih0BdoBTQHNoiIE1c8LqV0R0qpU0qpU9OmTSs6piRJkpT/5n8Bj/wUHjwKam0AP3sKet9koatisrj9cn/g05TSbICI+DewF3B/BlkkSZKkqmf5cnjjvty6c0sXQY8LYe8zoWatrJOpHGRR6j4H9oiIeuRuv9wPGJ9BDkmSJKnqmf0hDDkTPn8JtuoCfW6GJq2zTqVylMUzda9GxKPA68Ay4A3gjorOIUmSJFUpy5bA2JtgzA1QWA8O/QvscqIToVQDmcx+mVK6BLgki2tLkiRJVc5nL+VG5+Z8CG1/AgdfDfWdl6K6yGpJA0mSJEnra9HXMOoSmHA3bLwlnPAYtN4/61SqYJY6SZIkKd+kBO89AcP7w4LZsNfvoPv5uRkuVe1Y6iRJkqR88vUUeLIffDgCmnWA4x+G5h2yTqUMWeokSZKkfLC8CF69HZ69HEhw0JWw2y+hhn+lr+78J0CSJEmq7Gb8NzcRyvQ3oPWB0OuG3DN0EpY6SZIkqfL6bgE8fzW8fCvUaww/+SfsdLjLFOhHLHWSJElSZfTxKBh6Dnz9Gex6ChwwEOo2zDqVKiFLnSRJklSZfDsbnvoDvP0wNG4Npz4JLffOOpUqMUudJEmSVBmkBG8+ACMvhCXfQrcB0PUcqFk762Sq5Cx1kiRJUtbmfAxDz4LJY2DLPaHPLdB0+6xTKU9Y6iRJkqSsLPsOXroFRl8HNevkytwuJ0NBQdbJlEcsdZIkSVIWPn81t0zB7Im5GS0PvhoabJZ1KuUhS50kSZJUkRbPg1EDYfw/YMPN4bh/wfYHZ51KecxSJ0mSJFWU9wbDk+fCglmwx/9Bjwugdv2sUynPWeokSZKk8jZvWq7MfTAMNm0Hxz0Im3fMOpWqCEudJEmSVF6WF8Frd8Ezl8HyZXDAZbDHr6FGYdbJVIVY6iRJkqTyMPOd3EQo08bDNvtB7xuhYcusU6kKstRJkiRJZWnpIhh9Dbz0Z6izMRzxd2j3E4jIOpmqKEudJEmSVFYmPQdDz/qz3U8AACAASURBVIavPoUOJ8KBf4R6jbJOpSrOUidJkiStrwVzYeQF8N9B0GgbOGUItNon61SqJix1kiRJ0rpKCd76F4w4H5Z8A/ucC137QWGdrJOpGrHUSZIkSeviy09yt1p+8jy02A363AKb7ph1KlVDljpJkiRpbRQthZf/As9fDTVqQa8boOPPoKAg62Sqpix1kiRJUmlNHZ9bpuCLd6BNH+h5LWzYPOtUquYsdZIkSdKaLJkPz/wRxt0BDZrBsQ/CDr2yTiUBljpJkiRp9d5/Ep7sB99Mh91Oh30vhDobZp1K+oGlTpIkSVqZb2bA8HNh4hDYZCc4+l5o0SnrVNL/sNRJkiRJJS1fDhP+AaMGQtF3sN8lsNfvoEZh1smklbLUSZIkSd+bNTE3EcqUV6FVN+h9EzTeJutU0mpZ6iRJkqSli2HM9TD2ZqjdAA77G+x8LERknUxaI0udJEmSqrdPx+RG576cBDsfBwdeARs0zjqVVGqWOkmSJFVPC7+Epy+CN+6Hhi3hpCdgmx5Zp5LWmqVOkiRJ1UtK8PajMGIALPoKupwN+5wHteplnUxaJ5Y6SZIkVR9fTYah58CkZ2DzjnDyf2CztlmnktaLpU6SJElVX9EyeOU2eO5KKKgBPa+FzqflfpfynKVOkiRJVdu013MTocx8C7Y/BA65DjZqkXUqqcxY6iRJklQ1Lfk2NzL36l9hg03g6PugTR+XKVCVY6mTJElS1fPhUzDs9zBvCnT6Oex/CdTZKOtUUrmw1EmSJKnqmP8FjOgP7z4OTXeAnz0FW+6RdSqpXFnqJEmSlP+WL4c37oWnL4ali2HfC2GvM6FmrayTSeXOUidJkqT8NvsDGHIWfP4StOwKvW+GJttmnUqqMJY6SZIk5adlS2DsTTDmBiisB31vhQ4nOBGKqh1LnSRJkvLPZy/llimY8yG0OwoOugrqN806lZQJS50kSZLyx6Kv4OlL4PV7YOMt4YTHoPX+WaeSMmWpkyRJUuWXUm5Gy+H9YeFc2Ot30P18qLVB1smkzFnqJEmSVLl9/TkM6wcfPQXNOsCJj0KznbNOJVUaljpJkiRVTsuL4NXb4dnLc9sHXQW7nQ41/CusVJL/RkiSJKnymfFfGHwGzHgTWh8Eva7PPUMn6X9Y6iRJklR5fLcAnr8KXr4N6jWGn/wTdjrcZQqk1bDUSZIkqXL4eBQMPTv3DN2up8ABA6Fuw6xTSZWepU6SJEnZ+nY2PHU+vP0INNkOfjocttor61RS3rDUSZIkKRspwZsPwFMXwNKFuSUKupwNNWtnnUzKK5Y6SZIkVbw5H8PQs2DyGNhyL+hzMzTdPutUUl6y1EmSJKniLPsOXrwFXrgOataBPrfALidDQUHWyaS8ZamTJElSxfj8VRhyBsx+H3Y6Ag6+GhpsmnUqKe9Z6iRJklS+Fs+DUQNh/F2w0RZw/MOw3UFZp5KqDEudJEmSykdKMHEIPHkuLJgFe/wGevwBatfPOplUpVjqJEmSVPbmTcuVuQ+GwWbt4LhBsPmuWaeSqiRLnSRJksrO8iJ47e/wzGW53w/4I+zxa6jhXzul8uK/XZIkSSobM9/JTYQybQJssx/0vhEatsw6lVTlZVLqImJj4O9AWyABP0spvZxFFkmSJK2npYtg9DXw0p+hzsZw5F3Q9kiIyDqZVC1kNVJ3CzAipfSTiKgF1MsohyRJktbHpOdg6Nnw1aewy4m52y3rNco6lVStVHipi4gNgX2AUwFSSt8B31V0DkmSJK2HBXPhqT/AWw9Bo23glCHQap+sU0nVUhYjdVsDs4F/RsTOwATgzJTSgpIHRcTpwOkAW265ZYWHlCRJ0kqkBP99KFfolnwD+5wLXftBYZ2sk0nVVkEG16wJ7Ar8NaW0C7AAGLDiQSmlO1JKnVJKnZo2bVrRGSVJkrSiuZPg3r7wxK+g8bbwyzGw74UWOiljWYzUTQWmppReLd5+lJWUOkmSJFUSRUtzk6CMvgZq1IJeN0DHn0FBFuMDklZU4aUupTQzIqZExPYppQ+A/YD3KjqHJEmSSmHqeBh8Bsx6F9ocCj2vhQ2bZZ1KUglZzX75O+CB4pkvPwF+mlEOSZIkrczib+DZP8K4O6FBMzj2QdihV9apJK1EJqUupfQm0CmLa0uSJGkN3h8Gw/rB/Bmw2+m55+bqbJh1KkmrkNVInSRJkiqbb2bA8HNh4hDYtC0ccx+08L/DS5WdpU6SJKm6W74cJvwDRg2Eou9g/0thz99CjcKsk0kqBUudJElSdTZrIgw5E6a8Clt3h943QaOts04laS1Y6iRJkqqjpYthzPUw9mao3QAOvx3aHwMRWSeTtJYsdZIkSdXNpy/AkLPgy0mw83Fw4BWwQeOsU0laR5Y6SZKk6mLhlzDyInjzfmjYCk56ArbpkXUqSevJUidJklTVpQRvPwojBsDir6HLOdDtPCism3UySWXAUidJklSVfTUZhp4Dk56BzTtBn1tgs7ZZp5JUhix1kiRJVVHRMnjlNnjuSiioAT2vg84/z/0uqUqx1EmSJFU1016HIWfAzLdh+0PgkOtgoxZZp5JUTkpV6iJiA2BRSml5RGwH7AAMTyktLdd0kiRJKr0l38JzV8Crf4MNNoGj74M2fVymQKriSjtS9wLQNSIaAs8A44FjgBPKK5gkSZLWwodPwbDfw7ypudss97sY6myUdSpJFaC0pS5SSgsj4ufAn1NK10bEG+UZTJIkSaUw/wsY0R/efRyatoGfPQVb7p51KkkVqNSlLiL2JDcy9/O1fK8kSZLK2vLl8Po98PQlsGwx7Hsh7HUm1KyVdTJJFay0xews4Hzg8ZTSuxGxNfBc+cWSJEnSKs3+AIacCZ+/DC27Qu+bocm2WaeSlJFSlbqU0mhgdIntT4AzyiuUJEmSVmLZEhhzI4y9EQrrQd9bocMJToQiVXOrLXURMQRIq9qfUjq0zBNJkiTpf01+EYaeBXM+hHZHwUFXQf2mWaeSVAmsaaTu+uI/jwA2A+4v3j4OmFxOmSRJkvS9RV/lnpt7/R7YeEs48THYdv+sU0mqRFZb6opvuyQi/phS2qfEriER8UK5JpMkSarOUoJ3/w3DB8DCubDXGdB9ANTaIOtkkiqZ0k6U0jQiti5+lo6IaAU43i9JklQevv48t+bcRyOhWQc48VFotnPWqSRVUqUtdWcDz0fEJ8XbLYFflksiSZKk6qpoGYy7HZ69HAg4+GrY7XQoqJF1MkmVWGlnvxwREa2BHYpfej+ltKT8YkmSJFUzM/4Lg8+AGW9C64Og1w2w8RZZp5KUB9ZmAfGO5EboagI7RwQppXvLJZUkSVJ18d0CeP4qePk2qNcYjrobdjzMZQoklVqpSl1E3AdsA7wJFBW/nABLnSRJ0rr6aBQMOzv3DF3HU2H/S6Fuw4xDSco3pR2p6wTsmFJa5Zp1kiRJKqVvZ8GI8+GdR6HJdvDT4bDVXlmnkpSnSlvq3iG3Tt2McswiSZJUtaUEb9wPIy+EpQuh+/nQ5WyoWTvrZJLyWGlLXRPgvYgYB/wwQUpK6dBySSVJklTVzPkYhp4Fk8fAlntBn1ug6XZZp5JUBZS21F1aniEkSZKqrGXfwYu3wAvXQWEd6PMn2OUkKCjIOpmkKqK0SxqMjohNgc7FL41LKc0qv1iSJElVwOevwpAzYPb7sNMRuXXnGmyadSpJVUyp/hNRRBwNjAOOAo4GXo2In5RnMEmSpLy1eB4MPQf+cWBuyYLjH4aj/mmhk1QuSnv75QVA5+9H5yKiKTAKeLS8gkmSJOWdlGDiYHjyPFgwC/b4DfT4A9Sun3UySVVYaUtdwQq3W86llKN8kiRJ1cK8qfDkufDBk7BZezj+IWi+S9apJFUDpS11IyLiKWBQ8fYxwPDyiSRJkpRHlhfBa3+HZy6DtBwOvBx2/z+oUdq/ZknS+intRCnnRsQRQBcggDtSSo+XazJJkqTKbuY7uYlQpk2AbfeHXjdAw5ZZp5JUzZSq1EVEK+DJlNK/i7frRkTLlNLk8gwnSZJUKX23EEZfAy/9Geo2hCPvgrZHQkTWySRVQ6W9L+ARYK8S20XFr3Ve+eGSJElV1KRnYejZ8NXk3HpzB1wG9RplnUpSNVbaUlczpfTd9xsppe8iolY5ZZIkSap8FsyBpy6Atx6CxtvCKUOhVdesU0lSqUvd7Ig4NKU0GCAi+gJzyi+WJElSJZES/PcheOoPsGQ+7HMedP09FNbJOpkkAaUvdb8CHoiIW4EETAVOLrdUkiRJlcHcSblbLT8dDVvsDn1ugU3aZJ1Kkn6ktLNfTgL2iIj6QKSU5pdvLEmSpAwVLYWX/gSjr4UataDXjdDxp1DgMr2SKp/Szn65KXAl0Dyl1DMidgT2TCndVa7pJEmSKtqU12DImTDrXWhzKPS8FjZslnUqSVql0v7npruBp4DmxdsfAmeVRyBJkqRMLP4GnjwX7joAFn8Nxw6CY+6z0Emq9Er7TF2TlNLDEXE+QEppWUQUlWMuSZKkivP+MBjWD+bPgN1/CfteCLUbZJ1KkkqltKVuQUQ0JjdJChGxBzCv3FJJkiRVhG+mw/DzYOIQ2LQtHHM/tOiYdSpJWiulLXXnAIOBbSLiRaAp8JNySyVJklSeli+H8XfBM5dB0Xew/6Ww52+hRmHWySRpra221EVEZ2BKSun1iOgG/BI4EhhJblkDSZKk/PLFe7mJUKaOg627Q++boNHWWaeSpHW2polSbge+K/59L+AC4FbgK+COcswlSZJUtpYuhmf+CLd3hS8nweG3w0lPWOgk5b013X5ZI6X0ZfHvxwB3pJQeAx6LiDfLN5okSVIZ+fQFGHJWrsztfDwceDls0DjrVJJUJtZY6iKiZkppGbAfcPpavFeSJClbC7+EkRfCmw9Aw1Zw8n9yt1xKUhWypmI2CBgdEXOARcAYgIjYFme/lCRJlVVK8PYjMGIALJ4HXc6BbudBYd2sk0lSmVttqUspXRERzwDNgJEppVS8qwD4XXmHkyRJWmtffgrDzoFJz8LmnaDPLbBZ26xTSVK5WeMtlCmlV1by2oflE0eSJGkdFS2DV26F566CgprQ8zro/HMoqJF1MkkqVz4XJ0mS8t+0CbllCma+Ddv3gkOug402zzqVJFUIS50kScpfS76F566AV/8G9TeFY+6HNn2yTiVJFcpSJ0mS8tMHI2DY7+GbabnbLPe7GOpslHUqSapwljpJkpRf5s+E4f3hvSegaRv4+UjYYresU0lSZix1kiQpPyxfDq/fA09fAssWw74XwV5nQM1aWSeTpExZ6iRJUuU3+4PcRCifvwwtu+aWKWi8TdapJKlSsNRJkqTKa9kSGHMjjLkBateHvrdBh+MhIutkklRpWOokSVLlNPnF3Ojc3I+g3dFw0JVQv2nWqSSp0sms1EVEDWA8MC2l1DurHJIkqZJZ9BU8fTG8fi9svBWc+Bhsu3/WqSSp0spypO5MYCKwYYYZJElSZZESvPtvGD4AFs6Fvc+EbgOgVr2sk0lSpZZJqYuIFkAv4ArgnCwySJKkSuTrz3Nrzn00Eprvkhuda9Y+61SSlBeyGqm7GTgPaLCqAyLidOB0gC233LKCYkmSpApVtAzG3Q7PXg4EHHw17HY6FNTIOpkk5Y0KL3UR0RuYlVKaEBHdV3VcSukO4A6ATp06pQqKJ0mSKsqM/8LgM2DGm9D6IOh1A2y8RdapJCnvZDFStzdwaEQcAtQBNoyI+1NKJ2aQRZIkVbTvFsBzV8Irf4V6jeGou2HHw1ymQJLWUYWXupTS+cD5AMUjdf0sdJIkVRMfPQ1Dz4F5n0PHU2H/S6Fuw4xDSVJ+c506SZJU/r6dBSPOh3cehSbbw09HwFZ7Zp1KkqqETEtdSul54PksM0iSpHKUErxxH4y8CJYuhO5/gC5nQc3aWSeTpCrDkTpJklQ+5nwEQ86Cz8bCVntD75uh6XZZp5KkKsdSJ0mSytay7+DFm+GF66CwLhz6Z+hwIhQUZJ1MkqokS50kSSo7n78CQ86E2e/DTkfk1p1rsGnWqSSpSrPUSZKk9bfoa3hmIIz/B2y0BRz/CGx3YNapJKlasNRJkqR1lxJMHAxPngcLZsGev4Xu50Pt+lknk6Rqw1InSZLWzbypMKwffDgcNmsPxz8EzXfJOpUkVTuWOkmStHaWF8G4O+HZP0JaDgdeDrv/H9TwrxWSlAX/31eSJJXezLdh8Bkw/XXYdn/odSM03CrrVJJUrVnqJEnSmn23EEZfAy/9Geo1giPvgrZHQkTWySSp2rPUSZKk1Zv0LAw9G76aDLucBAdclit2kqRKwVInSZJWbsEceOoCeOshaLwtnDIUWnXNOpUkaQWWOkmS9GMpwX8H5Qrdkvmwz3nQ9fdQWCfrZJKklbDUSZKk/2/uJBh6Fnz6AmyxB/S5BTbZIetUkqTVsNRJkiQoWgov/QlGXws1akHvm2DXU6GgIOtkkqQ1sNRJklTdTXkNhpwBs96DHfvCwdfAhs2yTiVJKiVLnSRJ1dXib+CZy+C1v8OGzeHYQbDDIVmnkiStJUudJEnV0cSh8OS5MH8G7P5L2PdCqN0g61SSpHVgqZMkqTr5ZnquzL0/FDZtC8fcDy06Zp1KkrQeLHWSJFUHy5fD+Ltg1EBYvhT2Hwh7/gZqFGadTJK0nix1kiRVdV+8B0POhKnjYOse0PtGaLR11qkkSWXEUidJUlW1dBG8cB28eAvU2QgOvwPaHw0RWSeTJJUhS50kSVXRJ6Nzi4h/+QnsfDwceDls0DjrVJKkcmCpkySpKln4JYy8EN58IHeL5cn/ga27Z51KklSOLHWSJFUFKcHbj8CIAbB4HnT9PexzLhTWzTqZJKmcWeokScp3X34Kw86BSc/C5p3g0D/BpjtlnUqSVEEsdZIk5auipfDyrfD81VBQEw65Hjr9DApqZJ1MklSBLHWSJOWjaRNg8JnwxduwQ2/oeS1stHnWqSRJGbDUSZKUT5bMh2evgHG3Q/1N4Zj7oU2frFNJkjJkqZMkKV98MByG9YNvpkHn02C/i3Lrz0mSqjVLnSRJld38mTC8P7z3BGyyIxz1T9hit6xTSZIqCUudJEmV1fLl8Po98PQlsGwx7HsR7HUG1KyVdTJJUiViqZMkqTKa9T4MOROmvAItu0KfW6DxNlmnkiRVQpY6SZIqk6WLYeyNMOZGqF0f+t4GHY6HiKyTSZIqKUudJEmVxeSxMOQsmPsRtD8GDroSNmiSdSpJUiVnqZMkKWuLvoKnL4bX74WNt4IT/w3b7pd1KklSnrDUSZKUlZTgncdgxABY+CXsfSZ0GwC16mWdTJKURyx1kiRl4avPYNj/a+/eg+S6CjuP/07ffsz0zGik0Yz1GD1sCT0sI1uSByQDTlgS/EqwyeJkAS84DoWTXVgCDrVL4q0tb2qzG7JLEpKwSzmBFKRSQBKyFUNgiUNIqCyLsWTL8lOyZPwYSZY0kvWYh6ZfZ/84p/vefo1mrJm509PfT1VX3z7ndPcZ9VVrfjrnnvNr0uGHpdW73Ojcqmvj7hUAoAUR6gAAmE/FgvTI56Xv/ZYkI93y29Kb75USQdw9AwC0KEIdAADz5dh+6Rsfk44/IW2+Rbrtf0hL18bdKwBAiyPUAQAw13Jj0vf+q/TD/yl1DUg//yVp2x1sUwAAmBWEOgAA5tLzD0vfvE8697J0/T3STz8gdS6Nu1cAgEWEUAcAwFwYPelWtXzq61L/Fume/yOtvyHuXgEAFiFCHQAAs8la6fE/k/7uP0r5Celf3O+2Kkhm4u4ZAGCRItQBADBbRp6XvvFx6aV/lta/VXrXZ6X+TXH3CgCwyBHqAAC4XIWc9H9/X/r+f5dSndLtfyjt+NdSIhF3zwAAbYBQBwDA5Xj5h9I3flU69Zz0xvdIN/83qWdF3L0CALQRQh0AAK/HxFnp7x+Q9v2p1LtOev9fSptvirtXAIA2RKgDAGAmrJWe+Rvp2/9eGjsl3fBR6e2/LmW64+4ZAKBNEeoAAJiuc8PS335SOvRtadV10vu/Jq3eGXevAABtjlAHAMCllIrSjx6U/uG/SLYk3fRb0u5fkQL+GQUAxI9/jQAAmMqrT0oPfUw69pj0hndKP/MZadn6uHsFAEAFoQ4AgEZy49I/fVr6wR9K2T7pPV9wq1saE3fPAACoQqgDAKDW4e9K3/yEdPYlaecHpHf+pgt2AAAsQIQ6AADKxkak7/yGdOBr0vI3SL/4t9KVb4u7VwAATIlQBwCAtdITX3GBbnJU+sn/IL3tPinVEXfPAAC4JEIdAKC9nT4iffPj0o+/L63dI73rs9IVW+PuFQAA00aoAwC0p0JO+sEfSP/0O1KyQ/rZ35N2/aKUSMTdMwAAZoRQBwBoP688Kn3jY9LJZ6Rt75Zu/bTUszLuXgEA8LoQ6gAA7ePieem7vyk9+ifSktXS+74qbbk17l4BAHBZCHUAgMXr/HHp6F5peK90dJ909DEpPy7t/hXpHfdLmZ64ewgAwGWb91BnjFkr6cuSVkoqSXrQWvvZ+e4HAGCRyY1Lx/f7ALdXGt4nnR92dYmUtPKN0o73SzveJw1eH29fAQCYRXGM1BUk/Zq19jFjTI+kfcaYh621z8TQFwBAKyqVpNPPS8OPhiHuxDOSLbr6peuldbulwY9Ia4akldeyPQEAYNGa91BnrT0u6bg/vmCMeVbSoCRCHQCgsdFTkWmUe6Wjj0uT51xdZok0uEt62ydcgBsckroH4u0vAADzKNZr6owxV0raKemRBnX3SrpXktatWzev/QIAxCh/UXr1QGQa5aPS2ZddnQmkFduk7e9x4W3NkLR8E9sQAADaWmyhzhjTLenrkj5urT1fW2+tfVDSg5I0NDRk57l7AID5YK3b/Ds6CvfqU1Ip7+qXrJHWXC+96cMuwK3aIaWz8fYZAIAFJpZQZ4xJyQW6P7fW/nUcfQAAxGD8jFuFsjKNcp808ZqrS3W5aZQ3fERa8yYX4tg7DgCAS4pj9Usj6QuSnrXW/u58vz8AYJ4UctKJJ90qlMOPuhB35gVfaaQrtklXvyucRjmwVUoEsXYZAIBWFMdI3VslfUDSk8aY/b7sN6y134qhLwCA2WCt9NqL1aNwxw9IxUlX373SBbedH3D3q3eyRxwAALMkjtUv/1mSme/3BQDMoomz0rHH3Chc+Xq48RFXl+yUVu+Qdt8bjsItGZQMX/0AAMyFWFe/BAC0gGJeOvF0uKH30b3SyKGwvn+LtPlmt6H3miE3rTJIxddfAADaDKEOABCyVjo3HFmNcp90bL9UmHD12X4X3Lb/gluVcvUuqXNpvH0GAKDNEeoAoJ1NXpCOPe4CXPlauNETri7ISKuuk4buCUfhlq5nGiUAAAsMoQ4A2kWpKJ18tnoU7uSzkvxWoH0bpQ1v99fBXS+t2C4l0zF2GAAATAehDgAWq/PHqwPc0cek/Jir61zmRt+uvt3tCTe4S8r2xdtfAADwuhDqAGAxyI1Lx/e7/eDKIe78UVeXSEkrt0s77wpXo+zbwDRKAAAWCUIdALSaUsmtPnk0ch3ciWckW3T1S9dL6/aEAW7ltVKqI94+AwCAOUOoA4CFbvRUGOCGH3ULm0yed3WZJW7q5I33uRA3eL3UPRBvfwEAwLwi1AHAQpK/KB1/onoU7uzLrs4E0oprpO13hqNwyzdJiUS8fQYAALEi1AFAXKyVTh+pDnCvPiWV8q5+yRq3CuWbPuwWM1l1nZTOxttnAACw4BDqAGC+jJ9xC5hEFzO5eNbVpbul1Tult3w0HIXrWRlvfwEAQEsg1AHAXCjkpFefrB6FO/OCqzMJaeBqadvtYYAb2Colgnj7DAAAWhKhDgAul7XSay/6UTi/mMmrB6RiztV3r3TBbecH3DTK1TukTE+sXQYAAIsHoQ4AZmrirN/Me184jXJ8xNUlO900yt2/HI7CLRlkTzgAADBnCHUAMJViXjrxtJ9Guc/djxwK6/u3SJtvdlsJrBmSrtgmBan4+gsAANoOoQ4AyqyVzg1H9oTb67YXKEy4+my/C27X/oLfE26X1NEbb58BAEDbI9QBaF+TF6Sjj1WPwo2ecHVBxm0hMHRPOAq3dD3TKAEAwIJDqAPQHkpF6eSz1aNwp56TZF1930Zpw9vD6+BWvFFKpmPsMAAAwPQQ6gAsTuePhVsJDO+Tjj0u5cdcXecyF96ueXc4jTLbF29/AQAAXidCHYDWlxuTju2P7Am3Tzp/1NUlUtLK7dLOu8JRuL4NTKMEAACLBqEOQGspldzqk0f9fnDD+6STz0i26OqXrpfW7XH7wQ0OuUCX6oi3zwAAAHOIUAdgYRs9GZlGuddNo5w87+oyvW7q5I33+WmU10vdA/H2FwAAYJ4R6gAsHPkJ6fiB6sVMzr3s6kwgrbhG2n5nOI1y+SYpkYi3zwAAADEj1AGIh7XS6SNuCmU5xJ14SioVXP2SNS647b7XhbhV10npbLx9BgAAWIAIdQDmx/iZ6mmUR/dJF8+6unS3tHqn9JZ/F47C9ayMt78AAAAtglAHYPYVJqVXn4osZrJXeu3Hrs4kpIGrpW23hwFuYKuUCOLtMwAAQIsi1AG4PNa6wDa8LxyFe/WAVMy5+u6VLrhdf7cLcat3SpnuePsMAACwiBDqAMzMxFk3dfLovnA65fhpV5fsdKFt9y+Ho3BLBtkTDgAAYA4R6gA0V8xLJ572i5n4EHf6+bC+f4u0+Ra3lcCaN0lXbJMCvlYAAADmE799AXCslc69Ei5iMrxXOr5fKlx09V0DbvTtun/l94TbJXX0xttnAAAAEOqAtjV5QTr6WPWecGMnXV2QcVsIDP1SOAq3dB3TKAEAABYgQh3QDooF6dSzkS0F9kmnnpNkXX3fRmnjO9w1cIPXSyveKCXTsXYZAAAA00OoAxaj88eqA9yxx6X8mKvrXOamT17z7nAaZbYv3v4CAADgdSPUdWjnlAAAFIhJREFUAa0uNyYd2x/ZE26fdOGYq0ukpJXbpZ13hatR9m1gGiUAAMAiQqgDWkmpJI0crB6FO/mMZIuuftmV0vq3+GmUQy7QpTpi7TIAAACas9bqYr6ksVxBY5MFjU0WNZYraHSyoPHJoivLFaZ8DUIdsJCNnowEuL1uYZPcBVeX6XVTJ2+8LxyF6+qPt78AAACLXKlkNZYraDxXrASv0clCJXyNTRY17kOZKyuGYa3SJgxvY5MFlezl9YlQBywEpZJ07mXp1EG3gMmxx90o3LmXXb0JpBXXSNf+vFuJcnBIWv4GKZGIt98AAAALXL5YcsGrEqaqA1Wj4DWaK2i8pt2oD2vjueK037szFagrk1RXJlBX2t33daW1ti+rrrSvSyfVlUmqOxMo64+7MoEvSyqbDtSdSWrZp5u/D6EOmE/FvHTmBR/eDrqplKcOSiPPS4WJsF3vWrcK5e57XYBbdZ2UzsbXbwAAgHlgrdVkoVQXvEYnoyNjLoSVj0drRsbK7cphLVcoTeu9jZG600llawLVqt6OStgqB6/ujGvX7UNZ5bgS0ly7IDE/6xgQ6oC5kJ9wQS0a3E4dlM4ckUqROdG9a6X+zdKVN0oDm6WBre4xq1ECAIAWUCpZTeSLdcGrevRrqpGx+uPiNOcipgJTF6K6M0kN9GQqo1/ZTKDumtGv6HPCUbKkOlIJmRZdTI5QB1yOi+ekU4d8cHsuPH7tJVX2gDMJt+Jk/xZp621hcOvfLGW6Y+0+AABoL4ViaYpA5Ue9auqqRsn8NWPlUbLxfFF2mteDdaQSlRDlglWgpdm0BpcFkfLmUxKjUxGzmUCZZDC3f1gthFAHXIq10thIdXA79Zw0cki6cDxsF6Sl5Zuk1buk697nQtvAVmn5RimZia//AACgJZWnIo7nqhfYKAev2pGxaPAanawOa+XFPCZnMBWxK10dorrSSa3o6VC2vzZshaNk5bBWOzKWTQVKBqwFMFcIdUCZtdL5o/XB7dRBaeJM2C7d7QLbhreHwW1gi7R0vRTwVwoAgHZlrZuKOBpd6bDZlMToCohTjJIVpjkVMUgYdaXD67qyPmz1dWV9WVA3StbVqNw/7kwFSszT9WC4fPwGivZTKkqvvRiuNFkObiOHpNxo2K5zmQts2253UyfL17wtGWTzbgAAFoGiX5p+rCaE1QavStjK1Y+SRacnjuUK056KmEkm6kJVb2dKq3s7qqYaRgNYdySsRUfGsulAmWTrXg+Gy0eow+JVmJROH4kENz8Cd/qwVJwM2/WsciNtO+5y9wNbXIjr6ie8AQCwgEwWipVphNXTDutXQCyHtEajZOV2F/PTm4ooqRKwomGrvzut9cuzvsyFra4mwSu6fH02EyjFVETMIkIdWt/kqAtt0eA2clA682PJlvcRMdKy9S6sveGnfHjbKvVvkjp6Y+0+AACLkbVWF/Oluk2Zx2r3CmuwWEd1u/A4X5zeMFjCqBLAooFqaTZdCV5VKyA2CF5dmaAyMpZlKiIWOEIdWsf4mergVh6BO/dK2CaRlPo2Sldsk675uchKk5ukVGd8fQcAYIErlmxlZcOqvcEqj6NTDcORsUZL2ZefM83LwZQOEjWrHrpAtaKno+FGzHXBq2bfMKYiot0Q6rCwWCuNnmiwWMlz0tipsF2y0wW1dXukgbv9NW9bpb6rpCAVX/8BAJgn+WKpwabM9VMSqxblaLhvmCubyBcv/aZeZ6ocssIphn1daa3ty1Y2b66bkli7YbMfGcumk0onmYoIXA5CHeJRKknnXo4Et/IG3YekyXNhu0yvW6Bk881hcBvYLPWukxL8AwAAaA3lpemrgleD1Q/r9garmYYY3ScsV5ze9WAJvzR9VzRQpZNavTQVCVvVe4NVr4hYPTKWTScVMBURWFAIdZhbxby7tq0quB2URp6XChNhu64r3HVu2+8Mg9vAVql7BYuVAADmXalkNZ6vHtUKpx3Wr3pY3oh5dLJ6IY5w37CiitOci5gKTP31XumkBnoy1cGrakXE5lMSO1JMRQQWO0IdZkd+wgW1yjVvPrydOSKVCmG73rUuvF15Yxjc+jdL2b74+g4AaHmFYskFr1yh4abMlVUPJy8xJTEXrpg4XR2pRCVElackLs2mtWZZtnrFxCmmJEZHxpiKCGCmCHWYmYvn64PbyEHptZck+f+BNAmpb4ObLrn1tshiJZulTHes3QcAxK88FbHppswNHkeXq280SpYrTG8qoqlMRQxDVDYdaOWSjqpph+Ul6RuNjNVOSWQqIoC4EerQ2NhIfXA7dUi6cCxsE6Sl5Zuk1buk697nQtvAVmn5RimZia/vAIBZZa2tBKmq671qNmIeqwlejUfJXF1hmlMRkwnTMFAt78o2uN6rZkpig1GyjiRL0wNYfAh17cxa6fzRmuDmbxNnwnbpbhfYNvxkuDH3wBZp6Xop4BQCgIWmUCzVbLIcCV656MIc9dMOx2rbTBY0ni/KTnNp+kwyEV7j5YNWb2dKg0s7wtUPa4JXd4PRr/LjdMD1YABwKfxGvhhZ626yki2527nh+uA2ckjKjYbP6+xzYW3b7WFwG9giLRlksRIAmCPWWuX89WBV13lNNh4Zi7aLhrXolMTJaU5FlOSWlM+E13Vl00ld0dOh7PLqZeerph1WQle4pH15GmMq4HowAJhv7RvqoqNUI4fc/enD0uQFuTBUDkWqeeyDUm1Zw3vNoG1p6vds2rbmfjp6VrtFSnbcFQa3ga1SV/+s/NECwGJmrdVEvnpPsPFmUxJz4UbMtaNk0emJ052KGCRMdcDyx2u7sjXTDiOjXjV7iUVHxjpTTEUEgMVg8Ye68pL6I5Gl9Ef8fXSUqqPXjU51XyHJ+JGp2nu5e5OYok3NfaWtLtE2cYnX0wzaNnjvnlV+wZJN7mcFgEXKWqtiySpftMoVSsoVS8oXS8oV3P14LtxwuXz9V/1eYVMc5wrTnoqYTibqrvHq6UhWFuXozkRGySIjZlVTEiMBLZNkKiIAoN7iCXW5sciS+pGFPc68IJXyYbuqUarN4TTDrgGmGALANBRL1WEpGphyBevuiyXlfRtXF5aX27qbWwUx79uHbWz161a9T6PXssoXSpr07aYbumpl00FlufnyyFZ/d1rrlmfVXbcRc3TErGZkLO2uKWMqIgBgPrReqBs7HRl1OxTen3slbGMCqe+qcEn9/i1+Sf1NUseS+PoOAJfgRpiqQ1G+YOtGm3I+yEQDUiVo+eBTG6Bcva0PYj4Q5Wpfx793bdk0ZwrOSCowSgcJpZIJpYKE0kFC6WRCqcAoFfiyZELZdLJSlk66dqlK24RSSfc61a9lwvogoc5Uo33DXIhjaXoAQCtqjVB37hXpi7e6MDd+OixPdrqgtm6P1P9Bv6T+FrdHGkvqA6hRKtnI6JKtCkjV4cdGwlH9aFO+WApHlyKvVRXEGow2lQNUrlBs8lpu2uBsiwajVJBQpkFYSgcJdaQS6ulIVgKRC0xhIEpHw5Ovy0QfJ8tt6l87FXmtuiAWGKYUAgBwGVoj1E2cdYuDbP2ZcLpk/2apd62UYGoLsBCUSlb5Uk1Yio4qNRhtCgNN9ehRuX3jwNVkFKpm1KrR1L/pLkYxE8mEiQSWQOnAVI02uaDjwkx3RzIsrxk9qgo/5dGmuvrqsBS+h6kLSpVRrkSChTAAAFjkYgl1xphbJH1WUiDpT6y1vz3lE1Zulz70nfnoGrAgWWsrQabZ6NFMR5uaXatUO9pUDmOXmsY3F4EpSJjKiFKmZoSoEqAq0/LKYcZEwlHjaXyZmrBUmfpXFYpMfXhq8FpM1wMAAHGb91BnjAkkfU7SOyUNS3rUGPOQtfaZ+e4L5p61ViXrrhMq+RXpitaqVAqPra+PtnH3Uz+vVJKri5RXnlfXtvb5bmSp+vlq0jYsK5YU1lfK1aRt5Ofxr139M6r6vSptrfL+uqowXM1+YDJGlcBTO0JUG2aWpFN11yVNNY0v5UerGo02lQNUVXk0LEX6Q2ACAAC4tDhG6t4s6bC19gVJMsZ8VdIdkpqGurHJgn5wZKSyDZuV3y7OF9jylnB+ubPKNm/Rehvu4matrbxG+RXD13DPK1nfrvy45OpLvmHJv0bJhxbZ8DmlSH9sTVtro+Xhe1WeX3nvsJ+lUv3zG7atea9oP6vCUTkM1YSoRsGjNoQ0Cl+V0NYozMzBggpzLWHcCFHCGAUJo8AYJRImUiYFxl0DFFTKa55T93y5aXAmrKu8VoP3Ki/u0Gy0qdnoUfW1UOVRq0CpZP0oFYEJAABgcYgj1A1KiixVqWFJu6d6wgsjY3r/Hz8yp52Km/HbySWMccfGVD2ulEtKJMwl20ruckMjV1YJJpWAUlPWIHhE64NE+Vh1ZYma1w/bRstqnjfN5wcJVbWte35tfyqhSlUBqlnQqm2T8H+eAAAAQKuII9Q1+o25bjzHGHOvpHslaeXaK/WVD++phBpfX/PYvXRln26FYadcbyL10bLKsX+cKB83DUthecLv9Z0wDYJWw/LoexAiAAAAAFyeOELdsKS1kcdrJB2rbWStfVDSg5I0NDRkb9i4fH56BwAAAAAtJI79AB6VtMkYc5UxJi3pvZIeiqEfAAAAANDy5n2kzlpbMMZ8VNJ35LY0+KK19un57gcAAAAALAax7FNnrf2WpG/F8d4AAAAAsJjEMf0SAAAAADBLCHUAAAAA0MIIdQAAAADQwgh1AAAAANDCCHUAAAAA0MIIdQAAAADQwgh1AAAAANDCCHUAAAAA0MIIdQAAAADQwgh1AAAAANDCCHUAAAAA0MIIdQAAAADQwoy1Nu4+XJIx5pSkl+LuB6bUL2kk7k5gQeBcQBTnA6I4HxDF+YAozodLW2+tHWhU0RKhDgufMWavtXYo7n4gfpwLiOJ8QBTnA6I4HxDF+XB5mH4JAAAAAC2MUAcAAAAALYxQh9nyYNwdwILBuYAozgdEcT4givMBUZwPl4Fr6gAAAACghTFSBwAAAAAtjFAHAAAAAC2MUIemjDEvGmOeNMbsN8bs9WV9xpiHjTHP+/tlvtwYY/7AGHPYGHPAGLMr8jp3+/bPG2PujuvnwcwYY75ojDlpjHkqUjZrn78x5np/fh32zzXz+xNiJpqcDw8YY47674j9xpjbInW/7j/bg8aYmyPlt/iyw8aYT0XKrzLGPOLPk68ZY9Lz99NhJowxa40x3zPGPGuMedoY86u+nO+HNjTF+cD3QxsyxnQYY35kjHnCnw//2Zc3/AyNMRn/+LCvvzLyWjM6T9qetZYbt4Y3SS9K6q8p+x1Jn/LHn5L0aX98m6RvSzKS9kh6xJf3SXrB3y/zx8vi/tm4Tevz/wlJuyQ9NRefv6QfSbrBP+fbkm6N+2fmNuPz4QFJn2zQdpukJyRlJF0l6YikwN+OSNogKe3bbPPP+QtJ7/XHn5f0b+L+mbk1PRdWSdrlj3skHfKfOd8PbXib4nzg+6ENb/7vbLc/Tkl6xP+9b/gZSvq3kj7vj98r6Wuv9zxp9xsjdZipOyR9yR9/SdK7I+Vfts4PJS01xqySdLOkh621Z6y1r0l6WNIt891pzJy19vuSztQUz8rn7+uWWGv/n3Xf3l+OvBYWoCbnQzN3SPqqtXbSWvtjSYclvdnfDltrX7DW5iR9VdIdfhTmHZL+yj8/em5hgbHWHrfWPuaPL0h6VtKg+H5oS1OcD83w/bCI+b/no/5hyt+smn+G0e+Nv5L0U/4zn9F5Msc/Vksg1GEqVtLfGWP2GWPu9WUrrLXHJfdFLukKXz4o6ZXIc4d9WbNytKbZ+vwH/XFtOVrPR/2Uui+Wp9tp5ufDcklnrbWFmnIscH6q1E65/43n+6HN1ZwPEt8PbckYExhj9ks6KfefNUfU/DOsfO6+/pzcZ87vlTNEqMNU3mqt3SXpVkkfMcb8xBRtG13vYKcox+Iy08+f82Jx+F+SNkraIem4pM/4cs6HNmCM6Zb0dUkft9aen6ppgzLOh0WmwfnA90ObstYWrbU7JK2RG1m7ulEzf8/5MEsIdWjKWnvM35+U9L/l/mKe8FNj5O9P+ubDktZGnr5G0rEpytGaZuvzH/bHteVoIdbaE/4f75KkP5b7jpBmfj6MyE3JS9aUY4EyxqTkfoH/c2vtX/tivh/aVKPzge8HWGvPSvpHuWvqmn2Glc/d1/fKTfXn98oZItShIWNMlzGmp3ws6SZJT0l6SFJ5hbK7Jf2NP35I0gf9Kmd7JJ3z02++I+kmY8wyP/XiJl+G1jQrn7+vu2CM2ePnzn8w8lpoEeVf4L2fk/uOkNz58F6/qtlVkjbJLXzxqKRNfhW0tNxF8Q/566a+J+lO//zouYUFxv+d/YKkZ621vxup4vuhDTU7H/h+aE/GmAFjzFJ/3Cnpp+Wus2z2GUa/N+6U9A/+M5/ReTL3P1kLiHulFm4L8ya3qtAT/va0pPt9+XJJ35X0vL/v8+VG0ufk5k0/KWko8lq/JHeB62FJ98T9s3Gb9jnwFbkpM3m5/xn70Gx+/pKG5P6RPyLpjySZuH9mbjM+H/7Mf94H5P5RXRVpf7//bA8qsnKh3EqIh3zd/ZHyDXL/YB+W9JeSMnH/zNyangtvk5vudEDSfn+7je+H9rxNcT7w/dCGN0nXSnrcf+5PSfpPU32Gkjr848O+fsPrPU/a/Wb8Hw4AAAAAoAUx/RIAAAAAWhihDgAAAABaGKEOAAAAAFoYoQ4AAAAAWhihDgAAAABaGKEOAIAmjDHWGPOZyONPGmMeiLFLAADUIdQBANDcpKR/aYzpj7sjAAA0Q6gDAKC5gqQHJX0i7o4AANAMoQ4AgKl9TtJdxpjeuDsCAEAjhDoAAKZgrT0v6cuSPhZ3XwAAaIRQBwDApf2+pA9J6oq7IwAA1CLUAQBwCdbaM5L+Qi7YAQCwoBDqAACYns9IYhVMAMCCY6y1cfcBAAAAAPA6MVIHAAAAAC2MUAcAAAAALYxQBwAAAAAtjFAHAAAAAC2MUAcAAAAALYxQBwAAAAAtjFAHAAAAAC3s/wMXVyPoQpKgVQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.pivot(index='N', columns='Algorithm', values='Time (seconds)').plot(title='Runtime Varying N\\n M = 2^5\\nCPU Cores = 4', figsize=(15,7))\n", "plt.ylabel('Seconds')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Algorithmmpxstomp
N
10240.0011930.123515
20480.0034010.248056
40960.0126960.254736
81920.0484920.759632
163840.2012522.103931
327680.8160599.997659
\n", "
" ], "text/plain": [ "Algorithm mpx stomp\n", "N \n", "1024 0.001193 0.123515\n", "2048 0.003401 0.248056\n", "4096 0.012696 0.254736\n", "8192 0.048492 0.759632\n", "16384 0.201252 2.103931\n", "32768 0.816059 9.997659" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.pivot(index='N', columns='Algorithm', values='Time (seconds)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Single-Threaded Varying M\n", "\n", "This benchmark compares all algorithms, including the anytime implementations, with one CPU core. The series size (N) is held constant at 2^15." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "results = {\n", " 'Algorithm': [],\n", " 'M': [],\n", " 'Time (seconds)': [],\n", "}\n", "algorithms = [\n", " 'stomp',\n", " 'mpx',\n", " 'prescrimp',\n", " 'scrimp_plus_plus',\n", "]\n", "n = 2**15\n", "\n", "for algorithm in algorithms:\n", " for i in range(5, 16):\n", " m = 2**i\n", " setup = [\n", " 'import numpy as np',\n", " 'import matrixprofile as mp',\n", " 'ts = np.random.uniform(size={})'.format(n),\n", " 'm = {}'.format(m),\n", " ]\n", " setup_code = ';'.join(setup)\n", " \n", " runtime_code = 'mp.algorithms.{}(ts, m)'.format(algorithm)\n", " \n", " # force anytime algorithms to compute exact solution\n", " if algorithm in ('prescrimp', 'scrimp_plus_plus'):\n", " runtime_code = 'mp.algorithms.{}(ts, m, sample_pct=1.0)'.format(algorithm)\n", "\n", " try:\n", " result = timeit.timeit(stmt=runtime_code, setup=setup_code, number=1)\n", " except:\n", " result = np.nan\n", " \n", " results['Algorithm'].append(algorithm)\n", " results['M'].append(m)\n", " results['Time (seconds)'].append(result)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(results)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3UAAAHICAYAAADpxcOiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3RU1frG8e+edEgICb1JAoKghKKUqxRBFFCQol4BQaWIoojKlWZBAQsi6NWrKBYwFsAOqCgoKmJBIRQBxUIgQOgk1IRAyv79MUl+AQMEmHBykuezFouZc87s806i6/rcvc+7jbUWERERERERcSeP0wWIiIiIiIjImVOoExERERERcTGFOhERERERERdTqBMREREREXExhToREREREREXU6gTERERERFxMYU6ERFxHWPMVGPMGKfr8DVjTB9jzJdO1yEiIu5itE+diIicLWNMAlAJyAQOAfOBu621h3wwdj/gNmttq7Md6zTvWw3YBFxgrY0/7txsIN5aO/xc1nQ2sn9HVYGq1to9eY6vAhoB0dbaBGeqExGRs6GZOhER8ZVrrbWhQGOgCfCAw/WcFWvtVuBr4Oa8x40xkcA1wJunO6Yxxt831Z2xjUDvnDfGmBggxLlyRETEFxTqRETEp6y1O4AFeMMdAMaYRcaY2/K872eM+SHPe2uMGWyM+dsYs9cYM8V41QemApcaYw4ZY/ZlXx9rjHk8+3VbY0yiMWakMWaXMWa7Maa7MeYaY8xfxphkY8yDee7lMcaMNsbEG2OSjDHvZwe1/LzJcaEO6AX8Zq1dkz3e88aYLcaYA8aY5caY1nnuNdYY86Ex5h1jzAFgtDEm1RhTLs81lxhjdhtjAgr6c8k+52eMecYYs8cYs9EYc3f29ScLjm8Dt+R5fyvw1kmuFxERF1CoExERnzLGVAeuBtaf5ke7AM3wLgW8EehorV0HDAaWWGtDrbVlT/DZykAwUA14BHgN6AtcArQGHjHG1Mq+9h6gO3A53uWIe4EpJxh3NlDeGJN36efNHBuEluENsJHATOADY0xwnvPdgA+BssAzwKLs75ejL/CutTb9BDX84+eSfXwQ3p9zY+Di7O90Kj8DZYwx9Y0xfkBP4J0CfE5ERIowhToREfGVOcaYg8AWYBfw6Gl+/ilr7T5r7WbgW/LM9BVAOvBEdjB6FygPPG+tPWit/Q34DWiYfe0dwEPW2kRr7RFgLHBDfjNc1trDwAdkz24ZY+rgDYoz81zzjrU2yVqbYa19BggCLsgzzBJr7RxrbVb2eG/iDXJkB6veeGfQTvfncmP2d0y01u4FnirYjyp3tu4q4A9gawE/JyIiRZRCnYiI+Ep3a20Y0BaohzdYnY4deV6nAqGn8dkka21m9uvD2X/vzHP+cJ7xagKzjTH7spdzrsPb4KXSCcZ+E7gxe/btZmC+tXZXzkljzP3GmHXGmP3Z44Vz7Hffctx4c4ELs2cOrwL2W2uXnuS7nejnUvW4sY+/z4m8DdwE9ENLL0VEigWFOhER8Slr7XdALDA5z+EUoFSe95VPZ0gflJXXFuBqa23ZPH+Csxuj/PPm1n4PJOFdRtmXPEEo+/m5UXhnzSKyl4fuB8yJ6rfWpgHvA33whsSTzdKdzHagep73NQryIWvtJrwNU64BPj7De4uISBGiUCciIoXhOeAqY0zOUsFVwHXGmFLGmPOBgacx1k6gujEm0Ee1TQWeMMbUBDDGVDDGdDvFZ94CJuJ9Lu7TPMfDgAxgN+BvjHkEKFOAGt7CO1PWlTN/pu194F5jTDVjTFm84bKgBgJXWGtTzvDeIiJShCjUiYiIz1lrd+MNLjkbhP8XOIo3oL0JzDiN4b7B+0zcDmPMnlNdXADPA58AX2Y/A/gz0OIUn3kLOA94L/s5vBwLgC+Av/DuaZdGAZZBWmt/BLKAFWexN9xrwJfAamAl8DnegJl5sg9l3z/eWht3hvcVEZEiRpuPi4iIOMAY8w0w01r7uo/GuxqYaq2t6YvxRETEPTRTJyIico4ZY5rh3YbgvbMYIyR7Lz5/Y0w1vN1GZ/uqRhERcQ+FOhERkXPIGPMmsBC4z1p78GyGAsbh3WdvJd4uno+cfYUiIuI2Wn4pIiIiIiLiYpqpExERERERcTGFOhERER8yxlxvjBlhjPF3uhYRESkZFOpERMS1jDHWGLPGGOPJc+xxY0ysj+/T2RjzgzFmnzFmhzHmNWNMWD7X9QRex7ux+HRjjDnu/I3GmJ+MManGmEUn+D4pxphD2X980hlTRESKN4U6ERFxu6pAr0K+RzjwePa96gPVgUl5LzDGXEn2putAG6AW8PRx4yRnX/PUSe7VyFobmv3nNt+ULyIixZlCnYiIuN3TwLjCXO5orZ1prZ1vrU211u7Fu/F3y5zzxpimwCtAR2ttnLX2ANARuNgYMzzPOAutte8D2wqrVhERKXkU6kRExO0+Bg4A/U51oTHmvOwllCf6c1MB79kG+C3nTXaQq22tXZ3nWIq1tr21dvJpfp/F2Us8PzbGRJ3mZ0VEpATSQ9wiIuJ2FhgDTDXGvH3SC63dDJQ9m5sZY64CbgVanM04J3A58DNQCu9yz8+MMY2ttRmFcC8RESkmNFMnIiKuZ639HNgM3F6Y9zHG/AuYCdxgrf3L1+Nbaxdba49aa/cB9wLReJ/hExEROSGFOhERKS4eBh7CO8uVr+zll4dO8qfPST7bBPgEGGCt/dr35efLAuaUV4mISImm5ZciIlIsWGsXGWPW4F0a+ekJrtkMhJ7u2MaYBsB8YKi1Nt+xCziOHxCA939/PcaYYCDTWptujLko+9waIATv8sutwLozvZ+IiJQMmqkTEZHi5GEgshDGvR+oAEzLM6v326k+lI+bgcPAy0Dr7NevZZ+rBLyHt+nLBiAK6GKtTT/L2kVEpJgz1lqnaxAREREREZEzpJk6ERERERERF1OoExERERERcTGFOhERERERERdTqBMREREREXExV2xpUL58eRsVFeV0GSIiIiIiIo5Yvnz5HmtthfzOuSLURUVFERcX53QZIiIiIiIijjDGbDrROS2/FBERERERcTGFOhERERERERdTqBMREREREXExVzxTJyIiIiIiXunp6SQmJpKWluZ0KVIIgoODqV69OgEBAQX+jEKdiIiIiIiLJCYmEhYWRlRUFMYYp8sRH7LWkpSURGJiItHR0QX+nJZfioiIiIi4SFpaGuXKlVOgK4aMMZQrV+60Z2EV6kREREREXEaBrvg6k9+tQp2IiIiIiIiLKdSJiIiIiMhZmz17NsYY/vjjDwASEhJo0KCBz8a/7bbb+P333wF48sknc4/7+j5upFAnIiIiIiJnbdasWbRq1Yp3333X52NnZmby+uuvc+GFFwLHhjpRqBMRERERkbN06NAhfvzxR6ZNm5ZvqEtNTeXGG2+kYcOG9OzZkxYtWhAXFwd4w2BMTAwNGjRg1KhRuZ8JDQ3lkUceoUWLFixZsoS2bdsSFxfH6NGjOXz4MI0bN6ZPnz6AN/QNGjSIiy66iA4dOnD48GEA2rZty7Bhw2jTpg3169dn2bJlXHfdddSpU4eHH374HPxkzg2FOhEREREROStz5syhU6dO1K1bl8jISFasWHHM+ZdeeomIiAhWr17NmDFjWL58OQDbtm1j1KhRfPPNN6xatYply5YxZ84cAFJSUmjQoAG//PILrVq1yh3rqaeeIiQkhFWrVjFjxgwA/v77b4YMGcJvv/1G2bJl+eijj3KvDwwMZPHixQwePJhu3boxZcoU1q5dS2xsLElJSYX9ozknFOpEREREROSszJo1i169egHQq1cvZs2adcz5H374Ifd8gwYNaNiwIQDLli2jbdu2VKhQAX9/f/r06cPixYsB8PPz4/rrry/Q/aOjo2ncuDEAl1xyCQkJCbnnunbtCkBMTAwXXXQRVapUISgoiFq1arFly5Yz/9JFiDYfFxERERGRM5aUlMQ333zD2rVrMcaQmZmJMYa77ror9xprbb6fPdFxgODgYPz8/ApUQ1BQUO5rPz+/3OWXec95PJ5jrvN4PGRkZBRo/KLOFTN16VnpTpcgIiIiIiL5+PDDD7nlllvYtGkTCQkJbNmyhejoaBITE3OvadWqFe+//z4Av//+O2vWrAGgRYsWfPfdd+zZs4fMzExmzZrF5Zdffsp7BgQEkJ6ujJDDFaFue8p2p0sQEREREZF8zJo1ix49ehxz7Prrrz+mQ+Vdd93F7t27adiwIRMnTqRhw4aEh4dTpUoVJkyYQLt27WjUqBEXX3wx3bp1O+U9b7/9dho2bJjbKKWkMyeb8iwqKtataHf9tcvpMkREREREHLdu3Trq16/vdBmnJTMzk/T0dIKDg4mPj6d9+/b89ddfBAYGOl1akZTf79gYs9xa2zS/613xTJ2l6AdPERERERHJX2pqKu3atSM9PR1rLS+//LICnQ8VWqgzxkwHugC7rLUNjjs3HJgEVLDW7imsGkRERERExHlhYWG5+9KJ7xXmM3WxQKfjDxpjagBXAZsLOpBm6kRERERERPJXaKHOWrsYSM7n1H+BkXAaSU2ZTkREREREJF/ntPulMaYrsNVa++vpfE4zdSIiIiIiIvk7Z41SjDGlgIeADgW8/nbgdoCwmmGFWJmIiIiIiIh7ncuZutpANPCrMSYBqA6sMMZUzu9ia+2r1tqm1tqm/gGuaNIpIiIiIiJyzp2ztGStXQNUzHmfHeyaqvuliIiIiIjImSu0mTpjzCxgCXCBMSbRGDPwTMdywwbpIiIiIiIlRUJCAvXq1eO2226jQYMG9OnTh4ULF9KyZUvq1KnD0qVLGTt2LDfffDNXXHEFderU4bXXXgNg9uzZXHnllVhr2b59O3Xr1mXHjh0OfyN3K7SZOmtt71Ocjyqse4uIiIiIlATjPv2N37cd8OmYF1Ytw6PXXnTK69avX88HH3zAq6++SrNmzZg5cyY//PADn3zyCU8++SSNGzdm9erV/Pzzz6SkpNCkSRM6d+5Mjx49+Oijj5gyZQrz589n3LhxVK6c7xNZUkDntPvlmVL3SxERERGRoiU6OpqYmBg8Hg8XXXQR7du3xxhDTEwMCQkJAHTr1o2QkBDKly9Pu3btWLp0KQAvvPACEyZMICgoiN69TzoXJAWgDiQiIiIiIi5VkBm1whIUFJT72uPx5L73eDxkZGQAYIw55jM577du3YrH42Hnzp1kZWXh8bhirqnIcsVPTzN1IiIiIiLuM3fuXNLS0khKSmLRokU0a9aMjIwM+vfvz8yZM6lfvz7PPvus02W6njtm6pTpRERERERcp3nz5nTu3JnNmzczZswYqlatyvjx42ndujWtW7emcePGNGvWjM6dO1O/fn2ny3Ut44bOkmVql7EH4n37AKiIiIiIiButW7fOFQFo7NixhIaGMnz4cKdLcZ38fsfGmOXW2qb5Xe+K5ZciIiIiIiKSP1csv9QzdSIiIiIi7jJ27FinSygx3DFTp0wnIiIiIiKSL3eEOizJM2aQeM+9ZB5KcboYERERERGRIsMVoa7K7kx2PvY4B7/8kkPfLXK6HBERERERkSLDFaEuMB0qjhiOX0QEKYsXO12OiIiIiIhIkeGKUAdQ5tprKd26FYcWf4/NzHS6HBERERERccAjjzzCwoULnS6jSHFFqDsaAAEVKxLa5nIy9+4lbe1ap0sSEREREZGTyCyEiZjMzEzGjx/PlVde6fOx3cwVoe5giPfv0FYtwePh0HffOVuQiIiIiEgJlpCQQL169bj11ltp2LAhN9xwA6mpqURFRTF+/HhatWrFBx98QHx8PJ06deKSSy6hdevW/PHHHwB88MEHNGjQgEaNGtGmTRvAG9iGDx9OTEwMDRs25IUXXgD4x5j9+vXjww8/zD334IMPcumll9K0aVNWrFhBx44dqV27NlOnTgVg0aJFtGnThh49enDhhRcyePBgsrKyHPipFR5X7FO3rzRYa/ErW5aQxo05tOg7Ktxzj9NliYiIiIg464vRsGONb8esHANXP3XKy/7880+mTZtGy5YtGTBgAC+99BIAwcHB/PDDDwC0b9+eqVOnUqdOHX755RfuuusuvvnmG8aPH8+CBQuoVq0a+/btA+DVV19l48aNrFy5En9/f5KTk3PvlXfM+fPnH1NHjRo1WLJkCcOGDaNfv378+OOPpKWlcdFFFzF48GAAli5dyu+//07NmjXp1KkTH3/8MTfccMPZ/6yKCFfM1AFkWW+aDr38ctJ+/530XbscrkhEREREpOSqUaMGLVu2BKBv3765oatnz54AHDp0iJ9++ol///vfNG7cmDvuuIPt27cD0LJlS/r168drr72Wu0xz4cKFDB48GH9/77xTZGRk7r1yxsxP165dAYiJiaFFixaEhYVRoUIFgoODcwNj8+bNqVWrFn5+fvTu3Tu31uLCFTN14A11fvgRenkbdv/3v6R8/z1lr7/e6bJERERERJxTgBm1wmKMyfd96dKlAcjKyqJs2bKsWrXqH5+dOnUqv/zyC/PmzaNx48asWrUKa+0/xsyRM2Z+goKCAPB4PLmvc95nZGSctNbiwjUzdZnWm+CDLrgA/8qVOfTdsVsbZKWksH/uXDYPvI2/WrVmw3XXseWuIewY/xh7XnuN/Z9+RmpcHEcTt2LT0534CiIiIiIixcbmzZtZsmQJALNmzaJVq1bHnC9TpgzR0dF88MEHgPdxql9//RWA+Ph4WrRowfjx4ylfvjxbtmyhQ4cOTJ06NTeI5V1+ebaWLl3Kxo0bycrK4r333vtHrW7nqpk68Kbq0DZtODBvHllpaaTGLWf/J3M5uPBrbGoqAdWrE9q6NRlJe0jfsoXUZcvIOnjw2MGMwb98efwrVyagcmX8q1Qm6PzzCe/eHU9goAPfTkRERETEXerXr8+bb77JHXfcQZ06dbjzzjtzm5vkmDFjBnfeeSePP/446enp9OrVi0aNGjFixAj+/vtvrLW0b9+eRo0a0aBBA/766y8aNmxIQEAAgwYN4u677/ZJrZdeeimjR49mzZo1uU1TihNjrXW6hlMKiQ6xu/7cRVhgGAAHv/6axCF34ylThqwDB/CUKUOZTp0I79aVkIsv/sd0auahFDJ2bCd9x07v39t3kL5jOxnbd5C+w/vHpqYSGBVF5UfGUPqyy5z4miIiIiIip7Ru3Trq16/vaA0JCQl06dKFtS7YamzRokVMnjyZzz77zOlSCiy/37ExZrm1tml+17tupg6g9KWXEnzhhfhXqUJ4166Etr0cT571s8fzCy2N3/nnE3T++fmet9aS8sMP7Hj8cTYPGEhYp05UGj2KgMqVff49REREREREfMk1M3Vb120lMjjy1BefhawjR0iePp09U18BPz8qDLmLyJtvxmhJpoiIiIgUEUVhpk4K1+nO1LmmUUrembrC4gkKovydd1Jr3jxK/+tf7Jo0mQ09riPl518K/d4iIiIiIiJnQqEuH4HVq1HjpSlUf/kl7JEjbO7Xj633Dyd9p/bGExERERGRokWh7iTC2rWj1mefUn7IEA5+9RUbrrmGpNhYbYkgIiIiIiJFhmtCXc4+deeaJziYCkPvptZnnxLS9BJ2PTWRjdffQGpcnCP1iIiIiIiI5OWaUJeVde5n6vIKPO88akydSvUpL5J16BCb+t7MtlGjyNizx9G6RERERESkZHNNqHNqpi4vYwxh7dtTa95nlBt8Bwc+/4L4TleT/PY72Oyd70VERERE5J+2bdvGDTfccM7vm5CQQIMGDQr9PrGxsT7bLP10uSbUOfFM3Yl4QkKoeN99RH8yl5CGDdn5xBNs/PeNpK5Y6XRpIiIiIiJFTkZGBlWrVuXDDz90upRiyTWbjxeFmbrjBUVHU2Pa6xz88it2TpjApptuIvy666g4/H78Iwt3Tz0RERERkYlLJ/JH8h8+HbNeZD1GNR91wvMpKSnceOONJCYmkpmZyZgxY6hVqxb33nsvKSkpBAUF8fXXX/PRRx8xb9480tLSSElJYfr06XTp0oW1a9cSGxvLnDlzyMzMZO3atdx///0cPXqUt99+m6CgID7//HMiIyNp27YtjRs3ZunSpRw4cIDp06fTvHnzfOsaO3Ys8fHxbN26lS1btjBy5EgGDRp0zDWxsbHExcXx4osvAtClSxeGDx9O69atGThwIHFxcRhjGDBgAMOGDcv3PgWpqV+/fnTp0iV3ZjI0NJRDhw6xfft2evbsyYEDB8jIyODll1+mdevWBf7dnIhrQl1RmqnLyxhDmY4dCG3Vkj1Tp5L0RiwHFy6k4rD7KHvjjRg/P6dLFBERERHxmfnz51O1alXmzZsHwP79+2nSpAnvvfcezZo148CBA4SEhACwZMkSVq9eTWRkJAkJCceMs3btWlauXElaWhrnn38+EydOZOXKlQwbNoy33nqL++67D/CGyJ9++onFixczYMAA1q5de8LaVq9ezc8//0xKSgpNmjShc+fOBfpOq1atYuvWrblj79u376TXn05Nec2cOZOOHTvy0EMPkZmZSWpqaoE+dyquCXVFcaYuL0/p0lS8/37Cu3dnx2OPs2PcePZ9+BGVH32EkIYNnS5PRERERIqhk82oFZaYmBiGDx/OqFGj6NKlC2XLlqVKlSo0a9YMgDJlyuRee9VVVxF5ghVs7dq1IywsjLCwMMLDw7n22mtzx1+9enXudb179wagTZs2HDhwgH379lG2bNl8x+zWrRshISGEhITQrl07li5dSuPGjU/5nWrVqsWGDRsYOnQonTt3pkOHDie9Pr+aCqJZs2YMGDCA9PR0unfvXqDaCkLP1PlYUO3anPfGdKo9+wwZu3eT0LMX28c8QsbevU6XJiIiIiJy1urWrcvy5cuJiYnhgQceYPbs2Rhj8r22dOnSJxwnKCgo97XH48l97/F4yMjThPD4sU90r4Jc6+/vf0xX/bS0NAAiIiL49ddfadu2LVOmTOG222474T1O9z7WWo4ePQp4Q+DixYupVq0aN998M2+99dZJ71NQrgl1RX2mLi9jDGWuuYZan39OZL9+7Pv4YzZ0upq977+PdXhrBhERERGRs7Ft2zZKlSpF3759GT58OD///DPbtm1j2bJlABw8ePCYUHa23nvvPQB++OEHwsPDCQ8PP+G1c+fOJS0tjaSkJBYtWpQ7e5gjKiqKVatWkZWVxZYtW1i6dCkAe/bsISsri+uvv57HHnuMFStWnFVNUVFRLF++PLem9PR0ADZt2kTFihUZNGgQAwcOPOV9Cso1yy/dMlOXl19oaSqNGkl4j+7sHP8YOx55lH0ffUS1Z54lsHo1p8sTERERETlta9asYcSIEXg8HgICAnj55Zex1jJ06FAOHz5MSEgICxcu9Nn9IiIiuOyyy3KbkpxM8+bN6dy5M5s3b2bMmDFUrVr1mGf5WrZsSXR0NDExMTRo0ICLL74YgK1bt9K/f//c2bUJEyacVU2DBg2iW7duNG/enPbt2+fOWC5atIhJkyYREBBAaGioz2bqjLXWJwMVppDoEPv9ku9pWrmp06WcMWstBz77jB2PPY4JCuS8V14h+MILnS5LRERERFxm3bp11K9f3+kyzom2bdsyefJkmjY9dQ4YO3YsoaGhDB8+vMjUdKby+x0bY5Zba/O9qWuWX7pxpi4vYwzh115L1MwZGP8ANt18C4d+/NHpskRERERExOVcs/zSTc/UnUzQ+ecT9e4sttx+B1vuGEzVJ58gvGtXp8sSERERESlyFi1a9I9jb7zxBs8///wxx1q2bMmUKVN8eu8hQ4bw43GTMPfee2++NTnNNcsvF/6wkJbVWjpdis9kHjxI4t1DSf3lFyrc/x/K3XbbSTv5iIiIiIhAyVp+WVIV2+WXxWWmLodfWBg1XnuVMp07s/uZZ9n5+BPYzOL1HUVEREREpPAVWqgzxkw3xuwyxqzNc2ySMeYPY8xqY8xsY0z+uwbmw+3P1OXHExhI1UlPEzlgAHtnzGDrfcPIyt4rQ0REREREpCAKc6YuFuh03LGvgAbW2obAX8ADBR2suM3U5TAeD5VGjqDSgw9wcOFCNg+8jcwC7kgvIiIiIiJSaKHOWrsYSD7u2JfW2pydCH8Gqhd0vOI4U5dX5C23UO3ZZ0hbvZqEPn1J37rV6ZJERERERArkueeeIzU11ekySiwnn6kbAHxxopPGmNuNMXHGmDgovjN1eZW5+mpqTHudjF27SOjVm7Q//nC6JBERERGRU1Koc5Yjoc4Y8xCQAcw40TXW2lettU1zOrzk7O5e3JVu3pyaM94BPz829elLypIlTpckIiIiIpIrJSWFzp0706hRIxo0aMC4cePYtm0b7dq1o127dgDMmjWLmJgYGjRowKhRo3I/GxoayqhRo7jkkku48sorWbp0KW3btqVWrVp88sknAMTGxtKtWzc6derEBRdcwLhx4xz5nm5yzvepM8bcCnQB2tvT2E8hi5IR6gCC69b17mU36HY2334HVZ98kvBruzhdloiIiIgUMTuefJIj63y7uiuofj0qP/jgCc/Pnz+fqlWrMm/ePAD279/PG2+8wbfffkv58uXZtm0bo0aNYvny5URERNChQwfmzJlD9+7dSUlJoW3btkycOJEePXrw8MMP89VXX/H7779z66230jV7/+alS5eydu1aSpUqRbNmzejcuTNNm+bbzV84xzN1xphOwCigq7X2tOZni/szdccLqFyZmjPeoVTjxmwbMYKkadNxw56CIiIiIlK8xcTEsHDhQkaNGsX3339PeHj4MeeXLVtG27ZtqVChAv7+/vTp04fFixcDEBgYSKdOnXLHufzyywkICCAmJoaEhITcMa666irKlStHSEgI1113HT/88MM5+35uVGgzdcaYWUBboLwxJhF4FG+3yyDgq+yNtn+21g4uyHiZWcX/mbrj+ZUpQ41pr7Nt1Ch2TZpE+o4dVBo9CuPn53RpIiIiIlIEnGxGrbDUrVuX5cuX8/nnn/PAAw/QoUOHY86fbCIiICCA7ByAx+MhKCgo93VGRkbudTnXnOi9HKvQQp21tnc+h6ed6XglbaYuhycwkGrPPMOuipVIfvNNMnbtourTE/Fk/wsgIiIiInIubdu2jcjISPr27UtoaLvz5XgAACAASURBVCixsbGEhYVx8OBBypcvT4sWLbj33nvZs2cPERERzJo1i6FDh57WPb766iuSk5MJCQlhzpw5TJ8+vZC+TfFwzp+pO1MlofvliRiPh0oPjMa/cmV2TZzIlqQkqk95Eb/jprpFRERERArbmjVrGDFiBB6Ph4CAAF5++WWWLFnC1VdfTZUqVfj222+ZMGEC7dq1w1rLNddcQ7du3U7rHq1ateLmm29m/fr13HTTTXqe7hSMG57TCokOsW988Qa96vVyuhTH7Z83j+2jHyCg5nmc99prBFSp4nRJIiIiInIOrVu3jvr16ztdRqGJjY0lLi6OF1980elSHJPf79gYszxnZ4DjOblP3WkpyTN1eYV37kyN114jY8dO7152f/7ldEkiIiIiIuIg14S6kvpMXX5K/6sFNWfMAGvZ1KcPKT//4nRJIiIiIiI+0a9fvxI9S3cmFOpcKvgC7152/pUrsWXQIA58/rnTJYmIiIjIOeKGR6jkzJzJ79Y1oU7LL/8poGpVombMILhRQ7b+536S3oh1uiQRERERKWTBwcEkJSUp2BVD1lqSkpIIDg4+rc+5pvulZury5xceznnTprFt5Ch2TZxIxo4dVBw1EuNxTV4XERERkdNQvXp1EhMT2b17t9OlSCEIDg6mevXqp/UZ14S6krj5eEF5goKo9uwz7HyqIslvvkn6rp1UnTgRT2Cg06WJiIiIiI8FBAQQHR3tdBlShLgm1Gmm7uSMnx+VHnyAgMqV2DVpMluSkqn+4gv4lSnjdGkiIiIiIlKIXLNGT8/UnZoxhnIDB1J10iRSV65kU5++pO/Y4XRZIiIiIiJSiFwR6gxGoe40hF/bhfNefYX0bdtI6NWbI3//7XRJIiIiIiJSSNwR6ozhSOYRp8twldKXXkrNGe9AZiYJffqSsnSp0yWJiIiIiEghcEWo8xgPRzIU6k5XcL163r3sypdny8DbODB/vtMliYiIiIiIj7kj1OEhLTPN6TJcKaBaNaJmziA4Joatw/5D8ltvOV2SiIiIiIj4kCtCnTGGwxmHnS7DtfzKluW86dMIu7I9O5+cwM6nJ2Gz1E1URERERKQ4cEWo8xiPnqk7S57gYKo99xwRN91E8vTpbBsxkqyjR50uS0REREREzpIr9qnz4CEtQ8svz5bx86PSmIfxr1yZ3c8+S0ZSEtVf+B9+YWFOlyYiIiIiImfIFTN1xhg9U+cjxhjK3z6IqhOfIjUujk19byZ95y6nyxIRERERkTPkilDnMZqp87Xwbt2o8cpU0rdsIaF3L46sX+90SSIiIiIicgZcEeqMMQp1hSC0ZUtqvvM2Nj2dhJv6kBoX53RJIiIiIiJymlwR6rSlQeEJvvBCombNwj8yks0DBnJgwZdOlyQiIiIiIqfBFaFOM3WFK7B6dWrOmknwhRey9b77SH5nhtMliYiIiIhIAbki1GlLg8LnHxHBeW9MJ/SKK9j5+OPsmjxZe9mJiIiIiLiAO0Id3lCXZRUyCpMnJITq/3uesr16kvT6NLaNGo3VXnYiIiIiIkWaK/apM8YAcCTzCCH+IQ5XU7wZPz8qP/ooAZWrsPu558hM2kO1//0Pv9BQp0sTEREREZF8uGOmznjL1HN154YxhvKD76DKk0+S8stS7152u7SXnYiIiIhIUaRQJydU9roe1Jj6Mkc3b2ZTr94c2bDB6ZJEREREROQ4rgh1Bu/yS21rcO6Ftm5NzbfeIuvIETb1vonUFSucLklERERERPJwRajTTJ2zQhpcRNS7s/ArW5bN/QdwcOFCp0sSEREREZFsrgh1eRuliDMCa9Sg5qyZBNW7gMR77iV55kynSxIREREREVwS6jzZZR7OOOxwJSWbf2QkNWNjCW3Thp3jH2PXs//FWut0WSIiIiIiJZorQl3OTJ2WXzrPExJC9RdfoOy//03Sq6+yffQD2PR0p8sSERERESmxXBHqcp6p0/LLosH4+1N5/DjK3zOU/XPnsvHfN3Loxx+dLktEREREpERyVajT8suiwxhDhbvuotrzz5N18CBbBt7G5gEDSfv9d6dLExEREREpUVwR6nK2NNBMXdFTpmMHan3xORVHjyLtt9/YeN31bB05kvStW50uTURERESkRHBFqNOWBkWbJzCQcv36UfurLyk36DYOLviS+E5Xs3Pi02Tu2+d0eSIiIiIixZorQl1uoxRtPl6k+ZUpQ8X776f2/C8oc+21JMfGsr5DR5KmTSPriGZZRUREREQKgztCHQZ/j79m6lwioEoVqj75BNFz5hDSpDG7Jk0mvtPV7JszB5uZ6XR5IiIiIiLFiitCHUCIX4hm6lwm+IK6nPfKK5wXG4t/uXJsH/0AG6+7nkPff6/97UREREREfMQ1oS7YP1gzdS5V+l8tiHr/Pao9+wxZKSlsGXQ7mwcM4PBvvzldmoiIiIiI6xVaqDPGTDfG7DLGrM1zLNIY85Ux5u/svyMKOl6QX5Bm6lzMeDyUueYaan8+j0oPPsiRdX+QcP0NbB0+gqOJiU6XJyIiIiLiWoU5UxcLdDru2Gjga2ttHeDr7PcFEuwfzJEMNdtwOxMYSOQtN3s7Zd5xBwcXLmTD1dewc8JTZOzd63R5IiIiIiKuU2ihzlq7GEg+7nA34M3s128C3Qs6XrBfMIcztfl4ceEXFkbFYfdRe8F8ynTrSvLbbxPfoSN7Xn2NrDTNyIqIiIiIFNS5fqaukrV2O0D23xVPdKEx5nZjTJwxJm737t16pq6YCqhUiaqPP06tuXModckl7H72WW+nzI8+VqdMEREREZECKLKNUqy1r1prm1prm1aoUEHLL4u5oDp1qDH1Zc576038K1Rg+0MPsbF7Dw599506ZYqIiIiInMS5DnU7jTFVALL/3lXQDwb7BatRSglQunlzb6fM5/5L1tEjbLljMJtv7cfhNWucLk1EREREpEg616HuE+DW7Ne3AnML+kEtvyw5jDGU6dSJ2p9+SqWHH+bI+vUk/PtGtv7nPxzdvNnp8kREREREipTC3NJgFrAEuMAYk2iMGQg8BVxljPkbuCr7fYFoS4OSxwQGEtm3D7W/XEC5Owdz8NtFxHfuwo4nniQj+fgePCIiIiIiJZN/YQ1sre19glPtz2S8EP8QPVNXQvmFhlLx3nuJ6N2bPS9OYe+MGez/+GPKDRpE5K234AkJcbpEERERERHHFNlGKccL9teWBiVdQMWKVBk/jlqffkKpf/2L3c89R3zHTuz78ENsRobT5YmIiIiIOMI1oS7IL4iMrAwysvQf7yVdUO3a1JjyIjVnvENAlSpsf3gMG7p35+C336pTpoiIiIiUOK4JdSH+3iV2RzK1BFO8Sl1yCTXfnUW155+H9AwS77yLzTffwuFff3W6NBERERGRc8Y1oS7ILwiAwxlagin/zxhDmY4dqPXZp1R+9BGObNxIQs9eJN43jKObNjldnoiIiIhIoXNNqAv2DwY0Uyf5MwEBRPTuTe0FCyg/ZAiHFi/2dsp87HEykpKcLk9EREREpNC4JtSFB4YDkHRY/4EuJ+YXWpoKQ+/m/AXzKXvD9ex9913ir+rAnpdfJis11enyRERERER8zjWh7vyy5wPw996/Ha5E3MC/QgWqjB1LrU8/pXTLy9j9/P+I79iJve+9r06ZIiIiIlKsuCbUVQurRoh/CH/vU6iTgguqFU31F16g5syZBNSowY5HH2VD124c/PprdcoUERERkWLBNaHOYzzUKVtHM3VyRkpd3ISaM96h+osvgLUkDrmbTX1vJnXlSqdLExERERE5K64JdQB1Iurw196/NMMiZ8QYQ9iVV1Lr00+oPHYsRzdvYlPvm0gceg9HNm50ujwRERERkTPiulC378g+9hze43Qp4mLG35+IXj05f/58yg+9m5Qff2RDl2vZPm4cGXv0z5aIiIiIuIurQl3diLoA/LX3L4crkeLAU7o0FYYMofaXC4jo2ZN9H3zI+g4d2f3iFLJSUpwuT0RERESkQFwV6uqUrQOoA6b4ln/58lR+ZAy1P/uU0Nat2fPii6zv2Im9776LTU93ujwRERERkZNyVagrG1yWiiEVNVMnhSIwKorqzz9H1LuzCIyqyY6x49hwbVcOfPWVnuMUERERkSLLVaEOoE5kHW1rIIUqpHFjar79NtVfmgJ+fmwdeg+bbupD6ooVTpcmIiIiIvIPrgt1dcvWJX5fPOlZWhYnhccYQ9gVV1Br7hwqjx9HemIim27qw5a77+bIhg1OlyciIiIikst1oa5ORB3Ss9LZfGCz06VICWD8/Ym48UZqL5hPhfvuJXXJz2y4tivbHx1L+q5dTpcnIiIiIuK+UKcOmOIET6lSlB88mNpffUlE797s++gj4jt2Yvf/XiDzkDplioiIiIhzXBfqosOj8TN+6oApjvCPjKTyww9Re95nhLa9nD0vvUR8x44kz5ypTpkiIiIi4gjXhbpAv0Ciw6M1UyeOCqxZk+r//S9R779HUK1a7Bz/GBu6XMuB+QvUKVNEREREzinXhTrw7lenmTopCkIaNuS8t96k+tSXMYEBbL3vPjb16k1qXJzTpYmIiIhICeHOUBdRh20p2zh49KDTpYh4O2W2bUv0nDlUeeJx0nfsYFPfm9ly1xCOxMc7XZ6IiIiIFHOuDHU5zVLW71vvcCUi/8/4+VH2+uupPf8LKgwbRurSpd5OmWPGkL5TnTJFREREpHC4OtR9n/i9w5WI/JMnJITyd9zu7ZTZtw/75swlvmNHdj33HJmHDjldnoiIiIgUM64MdVVCq3B11NVMXzudVbtWOV2OSL78IyKo/OCD1P58HmHt25M09RXir+pA8tvvYI8edbo8ERERESkmXBnqAMZcOobKpSszcvFI9h/Z73Q5IicUWKMG1Z6ZTNQHHxB0wQXsfOIJ4rtcy4EvvlCnTBERERE5a64NdWGBYTzd5ml2p+5m3JJx+o9jKfJCYhpw3hvTqfHaq3iCg9k67D8k3NiTlF+WOl2aiIiIiLiYa0MdQMMKDRl68VC+2vQVH/z1gdPliJySMYbQ1q2Jnv0xVSZMIGP3bjbfeitb7hhM2l/ae1FERERETp+rQx1Av4v6cVnVy3h62dPau05cw/j5UbZHd2rP/4KKw+8ndcUKNnbvwbaHHiJ9xw6nyxMRERERF3F9qPMYD0+0eoLSAaUZuXgkhzMOO12SSIF5goMpd9tt1P5yAZG33MKBTz4lvmMndj37XzIPah9GERERETk114c6gPIh5ZnQagLr961n0rJJTpcjctr8IyKoNHoUtb74grAOHUh69VVvp8y33iJLnTJFRERE5CSKRagDuKzaZfRv0J8P/vqABQkLnC5H5IwEVq9GtUlPE/XRhwRfWJ+dT05gwzWd2T9vHjYry+nyRERERKQIKjahDmBok6HElI9h7E9jid8X73Q5Imcs5KKLOG/6dGq8/jqe0FC23T+chH/fSMrPPztdmoiIiIgUMcUq1AV4Aph8+WSC/IIY8vUQktOSnS5J5KyEtmpJ9McfUXXiU2TsTWZzv/5svv120v5Up0wRERER8SpWoQ6gamhV/nfF/9hzeA/Dvh3G0Uw9jyTuZjwewrt1o/YXX1BxxAgOr/qVjd27s+2BB0nfvt3p8kRERETEYcUu1IF3/7rHWz3Oil0rGPvTWG1MLsWCJyiIcgMHcP6XC4js358D8+YR3+lqdj3zDJkHDjhdnoiIiIg4pFiGOoBOUZ0Y0ngIn274lNfWvOZ0OSI+41e2LJVGjqD2/C8o06kTSa9PI/6qDiS9EatOmSIiIiIlULENdQB3NLyDLrW68MLKF5ifMN/pckR8KqBqVapOfIro2R8THBPDrokT2dDpavZ/+qk6ZYqIiIiUIMU61BljGHfZOJpUbMLDPzzMmt1rnC5JxOeC69XjvNdf47zp0/CUDWfbiJFsvOEGUn76yenSREREROQccCTUGWOGGWN+M8asNcbMMsYEF9a9Av0Cea7dc5QPKc/Qb4ay/ZAaS0jxVPqyy4j+8EOqTppE1v4DbB4wkM0DbyNt3TqnSxMRERGRQnTOQ50xphpwD9DUWtsA8AN6FeY9I4MjmdJ+Ckcyj3D3N3eTkp5SmLcTcYzxeAi/tgu1vviciqNHkbZ2LRuvu54td99N6ooVTpcnIiIiIoXAqeWX/kCIMcYfKAVsK+wb1i5bm2cuf4b4ffGMXDySzKzMwr6liGM8gYGU69eP2l99Sfk7B3N4WRybbupDQq/eHPjyS2ym/vkXERERKS7Oeaiz1m4FJgObge3Afmvtl8dfZ4y53RgTZ4yJ2717t0/ufVm1y3ig+QMsTlzMM8uf8cmYIkWZX5kyVLjnHs7/9hsqjXmYjKQktt5zL/HXXMPeWbPIOnzY6RJFRERE5Cw5sfwyAugGRANVgdLGmL7HX2etfdVa29Ra27RChQo+u3/Pej3pW78vb//+Nu//+b7PxhUpyjylShHZpw+1539Bteeewy+8LDvGjWf9Fe3Z/cKLZCQnO12iiIiIiJwhJ5ZfXglstNbuttamAx8Dl53LAoY3HU6b6m148pcn+WmbOgRKyWH8/CjTqSNR771LzXfeJqRJE/ZMmcL6dlew/dGxHNm40ekSRUREROQ0FSjUGWNKG2M82a/rGmO6GmMCzvCem4F/GWNKGWMM0B44p+35/Dx+PN3maWqVrcXwRcPZsG/Duby9iOOMMZRq2pQaL02h1ufzCO/alf2zZ7Phms7ZTVVWOl2iiIiIiBSQsdae+iJjlgOtgQjgZyAOSLXW9jmjmxozDugJZAArgdustUdOdH3Tpk1tXFzcmdzqpLYf2k7veb0J8Q9hZueZRARH+PweIm6RsWcPyTNmsG/mLDL37yekcWMiBw4g7IorMH5+TpcnIiIiUqIZY5Zba5vme66AoW6FtfZiY8xQIMRa+7QxZqW1tomvi81PYYU6gNW7VzNgwQDqRdbj6TZPUzW0aqHcR8QtslJT2Td7Nsmxb5K+ZQuBNWsS2b8f4d274wkutC0lRUREROQkThbqCvpMnTHGXAr0AeZlH/P3RXFOa1ihIRNaT+DP5D/pOqcrU1ZN4XCGOgJKyXV8UxVPeDg7xo5jfbsr1FRFREREpAgq6Ezd5cD9wI/W2onGmFrAfdbaewq7QCjcmbocO1J28OzyZ/li4xdUKlWJ+5veT6eoTngf+xMpuay1HF6+nKTpb3Dom28wQUGE9+hOuX79CIyKcro8ERERkRLhrJdfOu1chLocK3au4KmlT7EueR1NKjZhdPPRXFjuwnNyb5Gi7siGDSS/Ecv+uXOx6emEXdmeyP4DKHXxOVmJLSIiIlJinXGoM8Z8CpzwAmtt17Mv79TOZagDyMzKZG78XJ5f8Tx70/ZyXZ3rGNpkKOVCyp2zGkSKsn80VWnShMgB/dVURURERKSQnE2ouzz75XVAZeCd7Pe9gQRr7YO+LPREznWoy3Hw6EFe+fUVZqybQbB/MIMbDeamejcR4HemuzmIFC9Zqans+3g2ybGxpCcmqqmKiIiISCHxRffLxdbaNqc6VlicCnU5Nu7fyOS4ySxOXEzNMjUZ2Wwkbaqfk68u4go2M5ODX31F0rTppK1Zg19EBBF9+hBxU2/8IyOdLk9ERETE9XwR6tYBna21G7LfRwOfW2vr+7TSE3A61OX4PvF7nl72NAkHEmhVrRUjmo2gVngtp8sSKTKstRyOi/M2Vfn2W29Tlet6UO7WW9VURUREROQs+CLUdQJeBTZkH4oC7rDWLvBVkSdTVEIdQHpmOrP+mMXLv75MWkYavev3ZnCjwZQJLON0aSJFypH4eJJjY9k/Zy42I4OwK68kckB/SjVRUxURERGR0+WT7pfGmCCgXvbbP6y1R3xU3ykVpVCXI+lwEi+sfIGP//6YiOAIhjYZSo/ze+DnUZMIkbwydu8mecYM9s56l6zspirlBg4gtF07NVURERERKSBfhbrL8M7Q5W46bq19yxcFnkpRDHU51iWt46mlT7Fi1wrqRdZjVLNRNK2c789apETLSk1l30cfe5uqbN2a3VSlP+Hdu6mpioiIiMgp+GL55dtAbWAVkJl92BanzcfPhrWWBQkLeGb5M+xI2UHHqI7855L/UDW0qtOliRQ5NiPj/5uqrF37/01V+tyEf0SE0+WJiIiIFEm+apRyoXVop/KiHupyHM44TOzaWKavnY7F0r9BfwY0GECIf4jTpYkUOblNVaZN59CiRZjgYMJ7dKdcv34E1qzpdHkiIiIiRYovQt0HwD3W2u2+Lq4g3BLqcmw/tJ1nlz/L/IT5VCpVifub3k+nqE4YY5wuTaRIOhIfT9Ibb3Bg7idqqiIiIiKSD1+Eum+BxsBSILdBirW2q6+KPBm3hbocy3cuZ+LSiaxLXkeTik0Y3Xw0F5a70OmyRIqsfzRVufhiyg3oT+gVV2A8HqfLExEREXGML0Ld5fkdt9Z+d5a1FYhbQx1AZlYmc9bP4X8r/8fetL30qNODoU2GUj6kvNOliRRZWSkp7Pt4tpqqiIiIiGTzVffLSkCz7LdLrbW7fFTfKbk51OU4cPQAr/z6CjPXzSTIP4g7Gt5Bn/p9CPQLdLo0kSLrH01VIiOJ6HMTETepqYqIiIiULL6YqbsRmAQsAgzQGhhhrf3Qh3WeUHEIdTk27t/I5LjJLE5cTI2wGgxvOpx2NdrpeTuRk7DWkrpsGcnT38htqlL2uh5E3nqrmqqIiIhIieCLUPcrcFXO7JwxpgKw0FrbyKeVnkBxCnU5ftz6I08ve5oN+zfQokoLRjYbSd2Iuk6XJVLkHVm/nqTY2GOaqpQbOICQxo2dLk1ERESk0Pgi1K2x1sbkee8Bfs17rDAVx1AHkJ6Vzvt/vs9Lq17iUPoh/l333wxpPISIYC0rEzmV9F272DtjJnvfzdNUZeAAQtu1U1MVERERKXZ8EeomAQ2BWdmHegJrrLUjfVblSRTXUJdjX9o+Xvr1Jd7/831KBZTizkZ30qteLwI8AU6XJlLkZaWksO+jj0l+801vU5WoKCL79VNTFRERESlWfNUo5TqgFd5n6hZba2f7rsSTK+6hLsf6veuZFDeJn7b9RFSZKEY0G0Gb6m2cLkvEFWxGBge//NLbVOW339RURURERIoVX8zURQPbrbVp2e9DgErW2gRfFnoiJSXUgbchxOLExUyKm8SmA5toWa0lI5uOpFbZWk6XJuIK1lpSly4jefp0Dn333f83VenXj8DzznO6PBEREZEz4otQFwdcZq09mv0+EPjRWtvs5J/0jZIU6nKkZ6Yz84+ZvPLrK6RmpNLzgp7c1fguwoPCnS5NxDWO/P23t6nKJ596m6pcdZW3qUqjc9LjSURERMRnfBHqVllrGx937Fd1vyx8yWnJvLjyRT76+yPCAsO4q9Fd3HjBjfh7/J0uTcQ10nftYu87M7xNVQ4cIOSSS7xNVdq2VVMVERERcQVfhLqvgBestZ9kv+8G3GOtbe/TSk+gJIe6HH8m/8mkZZP4Zccv1A6vzcjmI7ms6mVOlyXiKt6mKh+RHPsm6du2eZuq9O/vbaoSFOR0eSIiIiIn5ItQVxuYAVQDLJAI3GKtXe/LQk9Eoc7LWss3W75h8rLJJB5KpG31tgxvNpyaZbT5ssjp+EdTlXLlvE1VevdWUxUREREpknzS/TJ7oNDszxz0VXEFoVB3rKOZR3ln3Tu8uvpVjmQeoU+9Ptze6HbKBJZxujQRV8lpqpI0fRop3y3ObqpyHZH9blVTFRERESlSfDFTVwl4Eqhqrb3aGHMhcKm1dppvS82fQl3+9hzewwsrX2D237OJCI5gSOMhXF/nevw8fk6XJuI6xzRVycz0NlUZ0F9NVURERKRI8EWo+wJ4A3jIWtvIGOMPrLTWxvi21Pwp1J3c70m/M3HpRFbsWkHdiLqMajaK5lWaO12WiCv9o6lK00soN0BNVURERMRZvgh1y6y1zYwxK621TbKP/aMjZmFRqDs1ay1fbvqSZ+OeZVvKNtqf1577m95PjbAaTpcm4kqZh1LY/3GepirR0UT270d4NzVVERERkXPvZKGuoP+3c4oxphzeJin8X3v3Hh1Xeaf5/vvWTSpdLcmWb5LxRQYMNtggbsZIaUIDCQSsJARyOkDspElPn2SSSffpzpyeTvesdXq60yednPR0VvfKBDuEzJqEEGRMMASaAclgbJAJYLAxlm2MZFu+6X6vy3v+2FulkizJ8k27qvR81qqlXbv2Lv3kLcl+vN/39xpjbgQ6LlB9cgEYY7hj4R08vfZpvrHqG2w7so17N93LD3f+kJ5Ij9fliaQdf14uxQ89xJIXfse8f/o+vnCYlu/+DY23fpKT//qvRNvavC5RREREBJj8nbprgP8OLAfeA2YBn7fWvntxy3PoTt3ZO957nB+99SM2799MSXYJ37zmm9xbcS8+o+FjIufCWkvvjjc4tXHDyKYq675MqFx3xEVEROTiOufhl8aY64Ama22LO4/ua8DngN3Ad621rRej4NEU6s7drhO7+N6b3+OdE++wrHgZ37n+O1wz+xqvyxJJawP79nFq48/oeOYZGGqq8pX1hK+6yuvSREREJEOdT6h7C7jNWttqjKkCfgl8A1gJLLPWfv5iFDyaQt35sday5eAWfrjzhxzrPcYdC+/g29d+m3l587wuTSStRY4dp+0Xv3CaqnR1qamKiIiIXDTnE+resdZe7W7/GDhhrf1b97kapaSZ3kgvP3v/Z2x8byMWy8NXPsxXln+FnGCO16WJpLVYdw8dv3mSU489RvTIUTVVERERkQvufELde8BKa23UGPMB8Ii1tn7oNWvt8otS8SgKdRdWS08LP9j5A547+Byl4VK+de23uGvxXZpvJ3KebDRK5+9+R+ujG+jfvRt/SQnFX/ojZjzwAIGiIq/LExERkTR2PqHur4BPAyeBBcA11lprjKkAHrPW3nwxCh5Noe7iePv42/zDlqLRaQAAIABJREFUG//A+6fe56qZV/EX1/8FV8/SQssi5yvRVGXDo/TUb8WEw05TlS8/rKYqIiIick7Oa506d/mCucAL1toed9+lQJ619q0LXexYFOounriN88z+Z/jRWz/iRN8J7lp8F9+65lvMyZ3jdWkiGaH/ww9p3fgzOn77W6epyu23U7J+nZqqiIiIyFk578XHvaZQd/H1Rnr56a6f8tj7j+H3+Vm3fB1fvvLLhANhr0sTyQhOU5XHafvlr4h3dZFTWUnx+vXkfaJaTVVERETkjBTqZNKau5r5wc4f8OKhF5mTO4dvX/tt7lx4J8YYr0sTyQinNVVZvNhpqnLPPWqqIiIiIuNKuVBnjJkB/BRnMXMLrLfWvj7e8Qp1U+/Nljf5xzf/kQ9aP2BV6Sr+8rq/5MqZV3pdlkjGsJEInb97gVMbHmVg9x78M2c6TVXuv19NVUREROQ0qRjqHgO2Wmt/aowJATnW2vbxjleo80YsHmNT4yb++ff/TFt/G/csuYdvXvNNZuXM8ro0kYzhNFXZwakNG9RURURERMaVUqHOGFMAvAMstpP85Ap13uoe7OYn7/6Ex/c8TsgX4o+v+mMevOJBsvwaKiZyIY3ZVOUr6wmvWOF1aSIiIuKxVAt1K4GfALuBq4GdwDeHOmsmHfcI8AjAggULrj106NCU1imn+7jzY77f8H1ebnqZ+Xnz+bPKP+O2Bbdpvp3IBRY5doy2X/xCTVVEREQkIdVCXSWwHbjZWrvDGPMjoNNa+9fjnaM7dall+9HtfO+N79HY3kjl7Eq+vurrXFN6jcKdyAUW6+6h/clf0/rYz4keVVMVERGR6SzVQt0cYLu1dqH7/BbgO9bau8Y7R6Eu9UTjUZ7a9xT/8vt/oW2gjUsKLmFtxVruWXIPpTmlXpcnklFsJELn87/j1IYNDOwZbqpS9MAD+GfM8Lo8ERERmQIpFeoAjDFbga9aa/caY/4WyLXW/l/jHa9Ql7p6I728eOhFahtr2XlsJz7jY838NdRU1FBdVk3QH/S6RJGMYa2ld/t2Tm3YSM9Wt6nK5z7nNFUpK/O6PBEREbmIUjHUrcRZ0iAEHADWWWvbxjteoS49HOo8xNONT/N049Mc7ztOUVYRdy+5m5qKGpYWLfW6PJGM0r/3Q1o3bqTj2Wedpip33E7JejVVERERyVQpF+rOlkJdeonFY2w7so3axlpebnqZaDzK8pLl1Cyt4c5Fd1IQKvC6RJGMETl2jLbHH3eaqnR3k3PddRSvX0detZqqiIiIZBKFOvFMW38bzx54lqcan2Jf2z6y/Fncdslt1FTUcN2c6/AZ/aNT5EKIdXfT/uSTw01VliyhZN2XKfjMZ9RURUREJAMo1InnrLXsPrWb2sZathzYQleki/l587m34l7WLlnL3Ly5XpcokhHGbqryJYoeuF9NVURERNKYQp2klP5oPy99/BK1jbXsOLoDg+HGuTdSs7SGWxfcqkXNRS6A05qq5OQ4TVUefkhNVURERNKQQp2krMPdh3m68Wk2NW7iaM9RCkIF3LX4LmoqalhWsszr8kQyQv/eD2ndsMFpqhKPU3DnHRSvW094xXKvSxMREZFJUqiTlBe3cXYc3UFtYy0vHXqJwfgglxdfztqKtdy16C5mZGvYmMj5irS00PaLX4xsqvKV9eRVVampioiISIpTqJO00jHQwXMHn6O2sZbdp3YT9AW5dcGt1FTUcOPcG/H7/F6XKJLWYt3dtP/6SVp/ntRUZf06p6lKKOR1eSIiIjIGhTpJW3tb97KpcRO/PfBb2gfamZ0zO9Fcpbyg3OvyRNKa01TleU49uoGBDz7AP2smxX/0JYq++AD+wkKvyxMREZEkCnWS9gZjg7zS9Aq1jbVsO7KNuI1z3ZzrqKmo4bZLbiMcCHtdokjastbS+/rrTlOVV19NaqryMKGy+V6XJyIiIijUSYZp6Wnhmf3PUNtYS1NXE3nBPO5cdCc1FTWsmLkCY4zXJYqkrf69e2ndsFFNVURERFJM+oe6FZfahl0fel2GpBhrLTuP7aS2sZYXPnqB/lg/SwqXULO0hrsX301JuMTrEkXSVqSlhdbHH6f9V084TVWuv57i9evUVEVERMQj6R/qFhfbhgOtXpchKax7sJvnP3qe2sZa3j3xLgEToKqsis8u/Sw3z7+ZgC/gdYkiaSnW3U37E792mqq0tBCqWELJOjVVERERmWoZEOqKbMOBNq/LkDSxv30/mxo3sXn/Zlr7W5kZnsk9S+5hbcVaFhUu8ro8kbRkIxE6n3uOUxs2DjdV+dKDFD1wv5qqiIiITIH0D3WLZtiGg+1elyFpJhKPsLV5K7WNtWxt3krMxlhVuoqaihpuX3g7ucFcr0sUSTuJpiqPbqDntdecpiqf/xzFD6mpioiIyMWkUCfT3sm+k4nmKgc7DhIOhLlj4R3UVNSwqnSVmquInAOnqcoGOp7dMtxUZf1XCC+/0uvSREREMk76h7qFhbbhow6vy5AMYK3lnRPvsKlxE88dfI7eaC+XFFzC2oq13LPkHkpzSr0uUSTtjNVUpeQr68m95RY1VREREblAMiDUFdiGjzq9LkMyTG+klxcPvUhtYy07j+3EZ3ysmb+GmooaqsuqCfqDXpcoklZiXV20//pJNVURERG5CBTqRM7gUOchnm58mqcbn+Z433GKsoq4e8nd1FTUsLRoqdfliaQVNVURERG58NI/1F2SbxsOdXldhkwD0XiUbUe2salxEy83vUw0HmV5yXJqltZw56I7KQgVeF2iSNqw1tKzbRutGzaqqYqIiMh5yoBQl2cbDnV7XYZMM639rTx74FlqG2vZ17aPLH8Wt11yGzUVNVw35zp8RnOFRCar/4MPaN240WmqYi0Fd9xB8fr1aqoiIiIySQp1IufBWsvuU7upbaxly4EtdEW6mJ83n7UVa7l3yb3MzZvrdYkiaSNy9Citj/+C9l/9inhPDzk33EDJ+nVqqiIiInIG6R/qFuTaho97vC5DhP5oPy99/BK1jbXsOLoDg+GmeTdRU1HDHyz4A7L8WV6XKJIWYl1dtD/xa6epyrFjblOV9RR85m41VRERERlDBoS6HNvwca/XZYiM0NzVzOb9m9nUuImjPUcpCBVw1+K7qKmoYVnJMq/LE0kLdnBwuKnK3r0EZs2i6MEHKbr/C2qqIiIikkShTuQiits4O47uoLaxlpcOvcRgfJDLiy9nbcVa7lp0FzOyZ3hdokjKs9bS89o2WjdsoGfbNnw5Ocy47/MUP/QQwflqqiIiIpL+oa48bBua+rwuQ+SMOgY6eO7gc9Q21rL71G6CviC3LriVmooabpx7I36f3+sSRVJe/549nNq4kc4tzzlNVe68k+L16whfqaYqIiIyfSnUiXhgb+teNjVu4pkDz9Ax0MHsnNncW3EvayvWUp5f7nV5IikvcvQorT9/nPYnnnCaqtx443BTFWO8Lk9ERGRKpX+oK8u2Dc39Xpchck4GY4O83PQytY21bDu8DYvlujnXUVNRw22X3EY4EPa6RJGU5jRVeYLWnz9O9NgxspZWULxuPQV336WmKiIiMm1kQKjLsg3NA16XIXLeWnpa2Lx/M7X7amnubiYvmMedi+6kpqKGFTNX6O6DyAQSTVUe3cDAhx86TVUeepCi++/HX1DgdXkiIiIXVQaEupBtaB70ugyRCyZu4+w8tpNNjZt44aMX6I/1s6RwCTVLa7h78d2UhEu8LlEkZQ03VXmUnm2vq6mKiIhMC+kf6uaHbMNhhTrJTN2D3Tz/0fPUNtby7ol3CZgAVWVVfHbpZ7l5/s0EfAGvSxRJWWqqIiIi00UGhLqgbTgc8boMkYtuf/t+NjVuYvP+zbT2tzIzPJN7ltzD2oq1LCpc5HV5IilLTVVERCTTKdSJpJlIPMLW5q3UNtaytXkrMRtjVekqaipquH3h7eQGc70uUSQlnd5UZSnF69ZRePddGDVVERGRNJb+oW5ewDYciXpdhognTvad5Jn9z/DUvqf4qPMjwoEwdyy8g5qKGlaVrtJdCJEx2MFBOrZsoXXDRqepSmkpRQ9+SU1VREQkbWVAqPPbhsNR0D9eZRqz1vLOiXeobazl+YPP0xvt5ZKCS1hbsZZ7ltxDaU6p1yWKpBxrLT2vvkbrxg1JTVXuo/ihB9VURURE0kpmhLqmAfCrYYQIQG+klxcOvUDtvlreOv4WPuNjzfw11FTUUF1WTdAf9LpEkZTTv3s3pzb+jM4tWwAo+NSnKFm/juwrrvC4MhERkTPLjFD3cS8EsrwuRSTlHOo85DRXadzM8b7jFGUVcfeSu6mpqGFp0VKvyxNJOZEjR4abqvT2knPTjZSsX0/umjUaziwiIikrM0LdR50QUnMIkfFE41G2HdnGpsZNvNz0MtF4lOUly6lZWsMnF3xSa9+JjBLr7BxuqnL8uNNUZf16Cu/6tJqqiIhIysmMUHegDbI1uV1kMlr7W3n2wLM8te8pGtsbMRhWzFxBVVkV1eXVXFZ0me5IiLjs4CAdz26hdcMGBvbtI1BaSvFDDzLjC19QUxUREUkZmRHq9p+EcJHXpYikFWste9v2UtdUR11zHbtO7gKgNKeU6rJqqsuquX7u9YQDYY8rFfGe01TlVU5t2EDv69uHm6o8/BDBefO8Lk9ERKa5zAh1+45B7kyvSxFJayf7TrK1eSv1zfVsO7KN3mgvWf4sbph7A9Vl1VSVVTEnd47XZYp4rn/3bk5t2Ejnc88BUHjPPcz9b3+nO9wiIuKZlAx1xhg/0AActtbePdGxlfP8tmHvEcifPTXFiUwDg7FBGo41UN9czytNr3C4+zAAlxVdRnW5cxdv+czl+IzP40pFvDPUVMVGIsz56//idTkiIjKNpWqo+zZQCRRMKtTt+RgKtaaQyMVgreVgx0Hqmp1hmr8//nviNk5xdjG3zL+F6vJqbpp7E3mhPK9LFREREZmWUi7UGWPKgMeAvwO+PalQt/sgzFgwJfWJTHcdAx28evhV6prrePXwq3QNdhHwBaicXZmYi1deUO51mSIiIiLTRiqGuieBvwfygT8fK9QZYx4BHgG4dq7v2ob39kHx4qktVESIxqO8ffxt6pvrqWuu40DHAQAWFS5KzMNbVbqKgC/gcaUiIiIimSulQp0x5m7g09baPzXGfIJxQl2yynl+2/DuXphZMSU1isj4mjqbqD9cT11THW8ee5NoPEp+KJ8189ZQXV7NmvlrKMwq9LpMERERkYySaqHu74EHgSiQDRQAT1lrvzTeOZXz/Lbh7feh9PIpqlJEJqMn0sPrR16nrrmO+uZ6Wvtb8RkfK2etTDRbWVy4WB0DRURERM5TSoW6EZ/8bO7U/f5dmH3l1BQmImctbuO8f/L9RMDb07oHgPl58xPz8CrnVBLyhzyuVERERCT9ZEao2/kWzL16agoTkfPW0tNCfXM99c31bD+6nYHYAOFAmNXzVlNdVs0tZbcwM6y1J0VEREQmI2VD3WRVzvPbhjffhPnXeF2KiJyDvmgfb7a8SV2Ts2TCsd5jACwvWU5VeRXVZdUsK16mYZoiIiIi48iMULdjO5Rf53UpInKerLV82PZhYk28XSd2YbGUhksTAe+GuTcQDoS9LlVEREQkZWRGqNv+Giy40etSROQCO9V3KrEm3rYj2+iJ9JDlz+L6OdcnlkyYmzfX6zJFREREPJUZoW5bHSxc43UpInIRRWIRdh7fmRim2dTVBMClRZcmAt6KmSvw+/weVyoiIiIytTIj1L36v2FxtdeliMgUsdZysPMg9U3Ooue/P/57YjZGUVYRt5TdQlVZFavnrSY/lO91qSIiIiIXXWaEuq0vwpJbvS5FRDzSMdDBtiPbqGuuY2vzVjoHOwmYANfOvjaxJt6CggVelykiIiJyUWRGqKt7Hpb+odeliEgKiMajvHvi3cSaeI3tjQAsLFjorIlXXs3K0pUEfUGPKxURERG5MDIj1L38LFx2p9eliEgKau5qTqyJ90bLG0TiEfKD+dw8/2aqyqq4Zf4tzMie4XWZIiIiIucsM0LdS0/DsgnXKBcRoSfSw/Yj2xN38U71n8JnfFw962qqypwlEypmVGhNPBEREUkrmRHq/v0puOJer0sRkTQSt3F2n9rtrInXVMee1j0AzMud5wS88mqum3MdWf4sjysVERERmVhmhLoXnoDln/O6FBFJY8d6jrH18FbqmuvYfmQ7/bF+woEwN829ieryam6ZfwuzcmZ5XaaIiIjIaTIj1D3/S7jqPq9LEZEM0R/t582WN527eM11tPS0AHBlyZXOmnjlVSwrXobP+DyuVERERCRTQt2WX8DKL3pdiohkIGst+9r3Ud9czytNr/DuiXexWGaFZ1FVVkVVWRU3zr2RnGCO16WKiIjINJUZoe7Zx2DVl7wuRUSmgdb+Vl49/Cp1TXVsO7KN7kg3IV+I6+Ze5yyZUFbNvLx5XpcpIiIi00hmhLpnHoVrv+x1KSIyzURiEd46/lai2crHXR8DsLRoaSLgrZi5Ar/P73GlIiIikskyI9Q9/RO47itelyIi09xHHR8llkt469hbRG2UGVkzuGX+LVSVV7F63moKQgVelykiIiIZZqJQF5jqYs5ZPOZ1BSIiLCxcyMLChTx85cN0Dnay7cg26pvq2Xp4K88ceIaACXDN7GsSa+ItLFzodckiIiKS4dLnTt1T/wI3/gevSxERGVMsHmPXyV280vQKdc11NLY3AnBJwSWJgHdN6TUE/UGPKxUREZF0lBnDL5/8Eaz+uteliIhMyuHuw9Q311PXXMcbR98gEo+QF8xj9bzVVJdXs2b+Goqzi70uU0RERNJEZoS6J/4J1nzL61JERM5ab6SX7Ue3J0Leyb6TGAxXz7qa6vJqqsqqWDpjKcYYr0sVERGRFJUZoe5X/wi3/JnXpYiInJe4jbOndQ/1TU7Ae//U+wDMzZ2bGKZ5/dzryfJneVypiIiIpJLMCHX/6++h+i+8LkVE5II60XuCrYe3UtdUx+tHX6cv2kc4EOaGuTdQXebcxSvNKfW6TBEREfGYul+KiKSoWTmz+OzSz/LZpZ9lIDbAmy1vUtfkLJnwStMrACwrXkZ1ubMm3hUlV+AzPm+LFhERkZSSJnfqArbh8e/CJ7/rdSkiIlPCWktje2NiTbx3TrxD3MaZGZ5JVVkVVWVV3DT3JnKCOV6XKiIiIlMg/e/UGR9E+r2uQkRkyhhjWFq0lKVFS/nqiq/S1t/Gq4dfpb65nhc/epGn9j1F0Bfk+jnXJ0JeWX6Z12WLiIiIB9LjTl15tm348R/DPf/d61JERDwXiUd4+/jb1DXVUddcx0edHwFQMaMi0WzlqllXEfClx//biYiIyJmlf6OUBTm24Z/uh/s2el2KiEjKOdR5KLFcws6WnURtlMKsQtbMX0N1WTWr562mMKvQ6zJFRETkPKR/qLsk3zb8t0/BHz3hdSkiIimta7CLbUe2Ud9cz9bmrbQNtOE3flaVrnK6aZZXsahgkdbEExERSTPpH+oWFtqGv7kZ1m3xuhQRkbQRi8fYdXJX4i7eh20fArAgf4EzTLO8mmtLryXoD3pcqYiIiJxJ+oe6xcW24S+uhD/Z6nUpIiJp62j30UTA23F0B4PxQXKDuayet5rqsmrWzF9DSbjE6zJFRERkDOkf6pbMtA3fXAD/8S2vSxERyQi9kV7eaHnDWTKhqZ7jfccxGFbMWkF1mbMm3qVFl2qYpoiISIpI/1BXMds2/Ekh/PmHXpciIpJxrLV80PpBYk28XSd3ATA7Z7YT8MqruX7O9WQHsj2uVEREZPpK/1B36Vzb8LCBvzridSkiIhnvZN9JtjZvpa65jm1HttEX7SPbn80Nc29ILJkwO3e212WKiIhMK+kf6i6bbxu+2A3fbQOfz+tyRESmjcHYIA0tDdQ1O2viHe4+DMCy4mWJgHflzCvxGf1uFhERuZjSP9RdvsA2PNAB/7kZsvK9LkdEZFqy1nKg44AT8JrqePvE28RtnOLs4kTAu2neTeQGc70uVUREJOOkf6i7YqFt+EIbfPsDKJjrdTkiIgK097fz2pHXqGuu49XDr9I12EXAF+C62ddRXV5NVVkV5fnlXpcpIiKSEdI/1F25xDbcdxK+3gAzl3pdjoiIjBKNR/n98d8nlkw42HEQgMWFi51Fz8uqWFm6koAv4HGlIiIi6Sn9Q93ypbbh88fhkVdg3iqvyxERkTP4uPPjRMBrONZANB6lIFTAmvlrqC6r5ub5N1OYVeh1mSIiImkj/UPdisttw+eOwsO/hUW3eF2OiIiche7Bbl4/+jp1TXVsPbyV1v5W/MbPytKViTXxFhUu0pp4IiIiE0j/UHf1Fbah5jB88Zdw2ae8LkdERM5R3MZ57+R7iTXxPmj9AICyvLLEPLzK2ZWE/CGPKxUREUkt6R/qVi63DWub4HOPworPe12OiIhcIC09LdQ311PfXM/2o9sZiA2QE8hh9bzVVJVVcUvZLcwMz/S6TBEREc9NFOqmfMa6MaYc+DkwB4gDP7HW/mjik/zOx4Gui1ydiIhMpTm5c/jCZV/gC5d9gb5oH28cfSOxJt6/f/zvAKyYuYKqsio+Uf4JLiu6TMM0RURERpnyO3XGmLnAXGvtW8aYfGAnsNZau3u8cyqvXWUbPnMAbv9/YPU3pqxWERHxhrWWvW17qWtyhmnuOrkLi6U0pzQxD+/6udcTDoS9LlVERGRKpNSdOmvtUeCou91ljNkDzAfGDXXDd+q6L36BIiLiOWMMlxdfzuXFl/O1q7/Gyb6TvHr4Veqb63n2wLP8+sNfk+XP4oa5NySWTJiTO8frskVERDzh6YJBxpiFwCpgxxivPQI8ArBgwQII5sCgQp2IyHQ0MzyTtRVrWVuxlsHYIDuP7aS+uZ5Xml6hvrkegMuKLqOqrIrq8mqWlyzH7/N7XLWIiMjU8KxRijEmD6gD/s5a+9REx1ZWVtqG+zvg8k/DZyaeficiItOHtZaDnQepa3Lm4b19/G1iNkZxdnFiTbzV81aTF8rzulQREZHzklLDLwGMMUHgN8D/PFOgSwjlaviliIiMYIxhceFiFhcuZt3ydXQMdPDa4deoa67jlaZX2Lx/MwFfgMrZlYm5eOUF5V6XLSIickF50SjFAI8Brdbab03mnMrKStvw1WwoKIP/45cXt0AREckI0XiUd06846yJ11TP/o79ACwqXJSYh7eydCVBX9DjSkVERM4spdapM8asAbYCu3CWNAD4v621W8Y7p7Ky0jb86Szw+eHLv52KMkVEJMM0dTUl1sR7o+UNovEo+aF81sxbQ1V5FWvmrWFG9gyvyxQRERlTSoW6c1FZWWkb/tMi6D4OX6vzuhwREUlzPZEeth/ZzivNTqOV1v5WfMbHylkrnWYrZdUsmbFEa+KJiEjKyIxQ95fLoWUXfGOn1+WIiEgGids475983xmm2VzPntY9AMzPm+8sel72CSrnVBLyhzyuVEREprPMCHV/fSM0/jv82QdelyMiIhnsWM8x6g/XU99Uz/aj2+mP9VMxo4Lae2u9Lk1ERKaxlOt+eU6y8tX9UkRELrrZubO579L7uO/S++iP9vNGyxv0Rnq9LktERGRc6RPqQrnO4uPWwgWY49A7GOVU9yAnuwc41T1Ie1+ESCzuPiyRWJxoLM5gzBI9bb/zMRK3RKJxovEzHRcnErVE43GicYvfGAJ+Q9DvI+j3EfAZAn4fQb9JbIf8PgJ+Q8Dn7vf7CPqcc4bOTT4vsd/nnuceP+L1pPMDPh+hgPMxMMbrQb8v6b2c9/X5NLdERKaX7EA2VWVVXpchIiIyobQIdS2d/ew6EWMFlp/V7SbiC2OxBP0+soN+sgLOx+ygj6yAH2vhVM8AJ7sHOeWGtqHnQyGuLxKb9OcPJoWrRBDzm0Twcp77CLnHhUMjA1hoVBCLxq0T+OJOAIy6QTAaHw6CvYNRonGbeN3ZTgqK7r6h95mKUbQ+w4ivf+jPxO8z+IzBGEZ89CWeD2/7DDDq+cjXx36f8Y4Zeu1Mn3Oyxwy/9/Bz31hfl8/gfCnjHOMb/hyGcb4O38jzDaOO8Zkx64CRn2O8WpM/V8jvI8v9+fArnIuIiIhklLQIdSe6BvjVu22sCMKPn3+bE0y+5bTfZyjJDVGSl8XMvBALS3KYmZdFSV4WJXkhZuaFKMnNoignRCiQdJcqKYSlQ/ezWDwp7LlBLxpzQt9gLD4iMJ4eEO2Yr48ZKJPuOg69HrMWayE+xkfnAdb9mPx89DGxeHyCY4beY/h9RpzvLo4x7ueMJ9XG6Pccfr/pIOAzhAI+sgJOyMsK+kaEvqyAb+Tried+9xhne/gYH1lBf9J7DJ833udQsBQRERG5cNIi1F0+J5//+Olr4MWNvPyNVdiSpRhjiETjDETj9Edi9EdjDEScbQuJsFYYDk6LYYN+n8Hv85Md9HtdSto6LUQy8nncWmz89OCYHBKTw+Po4GhxwueZQq89LQSPUUdi38THOGHZCeUD0TiD0TgD7s/KiOfRkc+7B6IMROIMxuIMREa+PhiLn/HP8kwULEVEREQunLQIdUG/j9IFywDI6zoI869wXsjysCjJOIkhmugf+xOJx60b9kYGwqHtwaHnkVHPR7w++WA5EI0lvYfzPBI7/9uqCpYiIiKSKdIi1AEw+wrAQMt7cPldXlcjMm35fIbsxF3hoCc1XOhgOVZwHIzGFSxFREQkLaRPqAvlQskSaHnX60pExGOZECyd4a0KlgqWIiIi5y99Qh3AnBVw+C2vqxARSctgedpwVwVLBUsREckI6Rfq3q+F/g7ILvS6GhERT6VDsByv4U66BcuckJ+inBAzcoLMyAlRlBNM2g4xIxykKCdEfnZgWjTnEhGR1JJmoe4q5+Ox9+GS1d7WIiIi0yZYdvZH+bi1l/beCB19kXFr8RkodANeYU5wOAiG3SCYOxwAZ7jLZeLLAAATRklEQVTBsCgnRE7InxbL54iISGpKr1A3e7nzsWWXQp2IiABTHyxjcUtHX4T23kHaep2P7b0R2tyP7X3O/o7eCMc6+9nb0kV77yA9g7Fx3zPk97kh0AmAM5ID4ag7g8mvZQW0jI2IiKRbqMufAzkz1SxFREQ84/cZinNDFOeGzuq8gWiMjt4I7X0R2nrc4Nc3FAyHQqITDA+d6uXtpnbaeyMTrg0ZDvrdwDc6CA5tu3cGc4MUuncLC8NBAn7f+f4xiIhICkmvUGeMM6+uZZfXlYiIiJyVrICf0gI/pQXZkz7HWktfJDb2HcHEc3e7L8Kels7Ea/EJphrmZwcocu8AFrofi3JC7tDRIEW5ocQw0qE7hAXZAQ0RFRFJUekV6sAJdTv+DWIR8Hszf0NERGQqGGPICQXICQWYPyM86fPicUvXQHREEOwYcYfQ2ecMEx3ko5M9tPUO0tUfHfc9/T5DYTjpLmB4nKYxI54HCQc1X1BE5GJLw1B3FcQG4eQ+d0FyERERSeZzA1hhOMglJZM/LxqLu4HPHRra4wwXTR4aOhQSj3b0s+doJ229EfoiE8wXDPjGbA4zPGR0eGhoUe5wWAwFNERURGSy0jDUJTVLUagTERG5YAJ+HyV5WZTkZZ3Vef2RmNs8Zmh46KihoUnDRg+e7OGt3nbaewcnXI4iN+QfMVfwzI1knCGjWnNQRKaj9At1JUvBn+U0S7n6fq+rERERmfayg0730dlnOV+wdzB22h3A9r4I7e4w0fa+4UB4pL0vMYx0vPmCxkBB9sjhn0N3/sYKgkNhMT9L8wVFJL2lX6jzB5w7dGqWIiIikraMMeRmBcjNClBWNPnz4nFLV380EQAnujPY2jPI/hPdtPdE6BoYf75gwGeY4XYGHT00dEQgHJpHmOvcMQyHtKSEiKSG9At14DRL+eBZsNb5bzkRERGZFnw+Q2FOkMKcs2uWFnHnCyYHwLbeQTp6k5rGuPMID7f38f6RDtp6B+mPjL+kRFbAN7I5TNgNfDmjF5kPjQiIQS0pISIXWJqGuqvgrZ9D11EomOd1NSIiIpLign4fM/OymHkO8wVHLyWRPDQ0eRH6/Se6aTvkbEcnWFMiLyswomnM0B3C05aYyBnen5+t+YIiMr40DXUrnI9H31WoExERkYsmO+hnTqGfOYVnN1+wZzBGW48b/PqGl48Y6w5hc9vwfEE7wXzBwnBw1FIS4zSNGWomkxsiN6QlJUSmg/QMdbOXQygfXvv/oOI2Z56diIiISAowxpCXFSAvK0B58eTPi8UtXf2nDw0deYfQ2T7RPcC+492090bonmC+YNBvEktGDAW/GWF3+YihIaNjBMTsoOYLiqST9ExDWXlw9w/hqa/Cy38Ht/2N1xWJiIiInBe/z7jhKsQicid93mA0ab6gu8h88h3C5OYxTa297HK3B6LjzxfMDvpGDg3NTVpPcNTQ0KGwWBjWfEERr6RnqAO46j74aCu8+gNYeLNzx05ERERkmgkFfMzKz2JW/tnNF+wbjDnBr2fk8hEj5wo623tbuhIL08cmmC+YnxVgRu5E6wkObQ83k8nPDuDTfEGR85K+oQ7gU9+D5gZ46hH4k1c1v05ERERkksIhP+FQmLmF4UmfY62layA6YmjoaWsNJpabiPBxay/tvRE6+8efL+hz5wsm3wEcMTQ0d3Q3UWc7R/MFRRLSO9QFw3Dfz+Ann4DffBUe2qz5dSIiIiIXiTGGguwgBdlByotzJn1eLG7p7Dt9+YihBjGJ/b0RjnX2s7eli/beQXoGY+O+Z8jvc0Pgme8MJr+WFdB8Qck86Z+AZl0Kd/8Aar8Gdf8At/4XrysSERERkSR+n6EoN0RRbuiszhuIxtz5gu5cwb7Th4YO3Sk8dKqXd5rbaeuNMDjBfMFw0D9O99CkxefDwRHzCAvDQQKaLygpLP1DHcDVDzjz6+q/D5eshiW3el2RiIiIiJynrICf0nw/pflnt6RE32nrCyYNDXUXn+9wG8nsaemkw+0sOuF8wezA2OsJhp27hUW5w41lhu4QFmQHNERUpkRmhDqAT/2/0LwTfvPH7vy6uV5XJCIiIiJTzBhDTihATijAvBmTny8Yj4+cL5gYGtozNGR0ZCOZj0720N47SGf/+EtK+H3GWV9w6C5geJymMSOeBwkHNV9Qzo6x481aTSGVlZW2oaHhzAce/wD+xx/AzEthzX+CpbdDaPLjvUVEREREzkY05i4pMTQ0tGd4e8TdwqFOo24jmd6J5gsGfGM2hxkeMpq0xETucFgMBTRENJMZY3ZaayvHfC2jQh3A+5tgy59DzwkI5jjB7soaBTwRERERSRn9kaT5gqOGhrb3DdLuNpIZOY9wkEhs/H+754b8I+YKnrmRjDNk1K8lJdLCRKEuc4ZfDrlyLSz7DBx6zQl4ezbD7k0KeCIiIiKSMrKDfrKDfmYXnN18wd7B2Ii5golF5nuGlpIYHiJ6pL0vMYx0vOmCxkBB9sjhn0N3/sYKgkNhMT9L8wVTSebdqRstHhsZ8EbcwVvrBrzcC1uwiIiIiEiKiMctXf3RRABs6x1MmjsYoaM3af9QMOyJ0DUw/nzBgM8ww+0MOnpo6IhAODSP0F2UPhzSkhLnanoNv5zIRAHv0jthRjnkzYG8UsjKd/7rQkRERERkGooMzRfsHTkENDFkdJx5hH2R8ecLZgV8I5vDhN3AlzN6kfnQiIAY1JISCnVjisfg0DZ4v3Y44CULhJ1wlzcb8mc7H/NmD+8beuTOgsDZrbkiIiIiIpKp+t0lJUY3h0keGjoyIDrb0QmWlMjLCoxoGjN0h/C0JSZyhvfnZ2fWfEGFujOJx+Dkh9B9DLqPOx+7Woa3hz72tY59frh4VPgbFfyG9oWLdPdPRERERGQUay09gzHaeoaHgJ42NDR5yGjf8HDR8eKMMThLSoRPv/N32h3BoWYyuSFyQ6m5pETKNUoxxtwJ/AjwAz+11v6DF3Uk+PxQusx5TCQ64NzRGxH+jrnP3X0fb3e2o/2nn+8PQc5MCGaDL+g89wfdRwh8gdP3+YPjHBuc5HFD7xkCf2DUueO8Zwp+E4uIiIhI5jLGkJcVIC8rQPlZnBePWzr7I6cPDU2+I+gODT3ZPci+492090bonmC+YNBvEktGDAW/GWF3+YihIaNjBMTsoHfzBac81Blj/MCPgT8EmoE3jTGbrbW7p7qWsxbIgsIy5zERa2GgM+lOnxv4ulqg5yTEBiAWcR7xCMQGne3BHoi1nb4/5m7Ho+6+wYv7dSaHy8kEReMH43MfZngb4z4fvW+iY5P2j3ssE7yHb+T7TPj5kvef5bFjfr7RxzLBe5zlsef754kb1E/bZvjYoe2zPU7/CSAiIiIe8fmMG65CwOSbH0Zi8UTwa3cXmR/RTTQpIDa19rLL3R6Ixsd9z+ygb+TQ0Nyk9QRHDQ0dCouF4QszX9CLO3XXA43W2gMAxphfAvcCqR/qJssYyC50HjOXXvj3t9YZMjoU8BJhLzkAJm2PFSATr40Ki7Ho+OeP2O8+jw6CjTk12bjzYGjbTrA/ed94++Mj3+e0fWMcKyngHEPipM9hksedR1BNbJ/N13Q+NUzl15QUwi/ae48R9i/613Qu1+wsjissh9VfR0REMkPQ72NWfhaz8rPO6rz+iLOkhNMc5vQ7g8lzBD881p3YN9F8wfysADNyJ1pPMOiG1vF5EermA01Jz5uBGzyoI30Z4w6lDABab2+E5CA5bogcFRbH3H8+xzLB5xu9f7LH2gk+32RCMsOvDW0P/XmN2B7vuNHnnMf7TeoczqPWczmOSR53oWpgksddiM876px4fBLnpMj3ypjHncs1uwBf09yrFOpERITsoJ+5hWHmFoYnfY61lu6B6IgAmLzWYPJSEm29EZpae2nrjdDZP/58wdG8CHVjjdU6rVxjzCPAIwALFiy42DVJpkgMB1TbWxERERHxnjGG/GynG2d58eRvyMTils6ksFf5vfGP9SLUNcOI+Y9lwJHRB1lrfwL8BJzul1NTmoiIiIiIiPf8PkNRboii3DMvn+bF7Yw3gaXGmEXGmBDwALDZgzpERERERETS3pTfqbPWRo0xXwd+h7OkwQZr7ftTXYeIiIiIiEgm8GSdOmvtFmCLF59bREREREQkk6ibhIiIiIiISBpTqBMREREREUljCnUiIiIiIiJpTKFOREREREQkjSnUiYiIiIiIpDGFOhERERERkTSmUCciIiIiIpLGFOpERERERETSmEKdiIiIiIhIGlOoExERERERSWMKdSIiIiIiImlMoU5ERERERCSNGWut1zWckTHmBHDI6zrEEzOBk14XIZ7R9Z/edP2nL1376U3Xf3rT9R/fJdbaWWO9kBahTqYvY0yDtbbS6zrEG7r+05uu//Slaz+96fpPb7r+50bDL0VERERERNKYQp2IiIiIiEgaU6iTVPcTrwsQT+n6T2+6/tOXrv30pus/ven6nwPNqRMREREREUljulMnIiIiIiKSxhTqRERERERE0phCnUw5Y8xHxphdxpi3jTEN7r5iY8yLxph97scid78xxvyzMabRGPOuMeaapPd52D1+nzHmYa++HpmYMWaDMea4Mea9pH0X7HobY651v58a3XPN1H6FMpFxrv/fGmMOu78D3jbGfDrptf/sXsu9xpg7kvbf6e5rNMZ8J2n/ImPMDvf74lfGmNDUfXVyJsaYcmPMy8aYPcaY940x33T363dAhpvg2uvnfxowxmQbY94wxrzjXv//6u4f85oZY7Lc543u6wuT3uusvi+mLWutHnpM6QP4CJg5at8/At9xt78DfM/d/jTwHGCAG4Ed7v5i4ID7scjdLvL6a9NjzOtdBVwDvHcxrjfwBnCTe85zwKe8/pr1OOP1/1vgz8c49grgHSALWATsB/zuYz+wGAi5x1zhnvME8IC7/W/Af/D6a9ZjxDWdC1zjbucDH7rXWb8DMvwxwbXXz/80eLg/j3nudhDY4f5Mj3nNgD8F/s3dfgD41bl+X0zXh+7USaq4F3jM3X4MWJu0/+fWsR2YYYyZC9wBvGitbbXWtgEvAndOddFyZtbaeqB11O4Lcr3d1wqsta9b57f/z5PeS1LAONd/PPcCv7TWDlhrDwKNwPXuo9Fae8BaOwj8ErjXvSNzK/Cke37y95KkAGvtUWvtW+52F7AHmI9+B2S8Ca79ePTzn0Hcn+Fu92nQfVjGv2bJvxOeBD7pXuOz+r64yF9WSlOoEy9Y4AVjzE5jzCPuvtnW2qPg/EUAlLr75wNNSec2u/vG2y/p4UJd7/nu9uj9kvq+7g6v2zA09I6zv/4lQLu1Njpqv6QgdzjVKpz/sdfvgGlk1LUH/fxPC8YYvzHmbeA4zn/E7Gf8a5a4zu7rHTjXWP8OnCSFOvHCzdbaa4BPAf+nMaZqgmPHmhthJ9gv6e1sr7e+D9LTvwJLgJXAUeCf3P26/hnKGJMH/Ab4lrW2c6JDx9in74E0Nsa118//NGGtjVlrVwJlOHfWlo11mPtR1/88KdTJlLPWHnE/HgdqcX7Qj7nDaHA/HncPbwbKk04vA45MsF/Sw4W63s3u9uj9ksKstcfcv+zjwP/A+R0AZ3/9T+IMzwuM2i8pxBgTxPlH/f+01j7l7tbvgGlgrGuvn//px1rbDryCM6duvGuWuM7u64U4Q/f178BJUqiTKWWMyTXG5A9tA7cD7wGbgaFuZg8DT7vbm4GH3I5oNwId7lCd3wG3G2OK3KEbt7v7JD1ckOvtvtZljLnRHXv/UNJ7SYoa+se8qwbndwA41/8BtwvaImApThOMN4Glbte0EM4k+s3uHKqXgc+75yd/L0kKcH8uHwX2WGt/kPSSfgdkuPGuvX7+pwdjzCxjzAx3OwzchjOvcrxrlvw74fPA/3av8Vl9X1z8ryyFed2pRY/p9cDpUvSO+3gf+Ct3fwnwErDP/Vjs7jfAj3HGYe8CKpPeaz3OhNlGYJ3XX5se417z/4UzxCaC8z9rX7mQ1xuoxPlHwX7gXwDj9desxxmv/+Pu9X0X5y/huUnH/5V7LfeS1MUQpyvih+5rf5W0fzHOX/CNwK+BLK+/Zj1GXP81OEOi3gXedh+f1u+AzH9McO318z8NHsBVwO/d6/we8N2JrhmQ7T5vdF9ffK7fF9P1Ydw/FBEREREREUlDGn4pIiIiIiKSxhTqRERERERE0phCnYiIiIiISBpTqBMREREREUljCnUiIiIiIiJpTKFORERkDMYYa4x5POl5wBhzwhjzWy/rEhERGU2hTkREZGw9wHJ34VyAPwQOe1iPiIjImBTqRERExvcccJe7/UWcxdRFRERSikKdiIjI+H4JPGCMyQauAnZ4XI+IiMhpFOpERETGYa19F1iIc5dui7fViIiIjC3gdQEiIiIpbjPwfeATQIm3pYiIiJxOoU5ERGRiG4AOa+0uY8wnvC5GRERkNIU6ERGRCVhrm4EfeV2HiIjIeIy11usaRERERERE5BypUYqIiIiIiEgaU6gTERERERFJYwp1IiIiIiIiaUyhTkREREREJI0p1ImIiIiIiKQxhToREREREZE0plAnIiIiIiKSxv5/T15usSCkZ8cAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.pivot(index='M', columns='Algorithm', values='Time (seconds)').plot(title='Runtime Varying M\\n N = 2^15', figsize=(15,7))\n", "plt.ylabel('Seconds')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Algorithmmpxprescrimpscrimp_plus_plusstomp
M
321.5428655.31878614.24573113.244420
641.5260712.82971411.32235113.371113
1281.5315851.4725589.52365813.406355
2561.5324560.7506918.76453412.943933
5121.5233520.3900368.39595513.041736
10241.5701490.2104687.75890712.980969
20481.5932380.1086087.13454912.330609
40961.5497840.0611895.89649510.411182
81921.5178900.0336224.2448128.062553
163841.2564530.0131441.6818374.140138
327680.000264NaNNaNNaN
\n", "
" ], "text/plain": [ "Algorithm mpx prescrimp scrimp_plus_plus stomp\n", "M \n", "32 1.542865 5.318786 14.245731 13.244420\n", "64 1.526071 2.829714 11.322351 13.371113\n", "128 1.531585 1.472558 9.523658 13.406355\n", "256 1.532456 0.750691 8.764534 12.943933\n", "512 1.523352 0.390036 8.395955 13.041736\n", "1024 1.570149 0.210468 7.758907 12.980969\n", "2048 1.593238 0.108608 7.134549 12.330609\n", "4096 1.549784 0.061189 5.896495 10.411182\n", "8192 1.517890 0.033622 4.244812 8.062553\n", "16384 1.256453 0.013144 1.681837 4.140138\n", "32768 0.000264 NaN NaN NaN" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.pivot(index='M', columns='Algorithm', values='Time (seconds)')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }