{ "metadata": { "name": "", "signature": "sha256:18938a9221b742b2f7b4267fff81d2771384abc6c99fba2e7385d073c911e5b7" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# WIND" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import gpkit\n", "import gpkit.interactive\n", "gpkit.interactive.init_printing()\n", "\n", "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Maximizing Differential Power" ] }, { "cell_type": "code", "collapsed": false, "input": [ "var = gpkit.Variable\n", "vec = gpkit.VectorVariable\n", "\n", "dCpdy = var(\"\\\\frac{dC_P}{dy}\")\n", "a = var(\"a\")\n", "b = var(\"b\")\n", "lam = var(\"\\\\lambda\")\n", "s = var(\"s\")\n", "xi = var(\"\\\\xi\")\n", "F = var(\"F\")\n", "y = var(\"y\")\n", "eps = var(\"\\\\epsilon\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "gp = gpkit.GP(1/dCpdy,\n", " [1 >= a + b,\n", " 2*a*b >= s*lam*y + s*xi,\n", " xi**2 >= (lam*y)**2 + 4*a*b,\n", " s*b >= dCpdy/(8*lam*y**2*F) + eps*a*b],\n", " {F: 1, y: 0.75, eps: 1.0/30.0})\n", "gp" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\begin{array}[ll]\n", "\\text{}\n", "\\text{minimize}\n", " & \\frac{1}{\\frac{dC_P}{dy}} \\\\\n", "\\text{subject to}\n", " & 1 \\geq a + b \\\\\n", " & 2a b \\geq \\lambda s y + s \\xi \\\\\n", " & \\xi^{2} \\geq 4a b + \\lambda^{2} y^{2} \\\\\n", " & b s \\geq 0.125\\frac{\\frac{dC_P}{dy}}{\\lambda F y^{2}} + a b \\epsilon \\\\\n", "\\text{substituting}\n", " & F = 1 \\\\\n", " & \\epsilon = 0.03333 \\\\\n", " & y = 0.75 \\\\\n", "\\end{array}$$" ], "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ " gpkit.GP( # minimize \n", " \\frac{dC_P}{dy}**-1, \n", " [ # subject to \n", " 1 >= a + b, \n", " 2*a*b >= \\lambda*s*y + s*\\xi, \n", " \\xi**2 >= 4*a*b + \\lambda**2*y**2, \n", " b*s >= 0.12*\\frac{dC_P}{dy}*\\lambda**-1*F**-1*y**-2 + a*b*\\epsil\n", " ], \n", " substitutions={ y: 0.75, F: 1, \\epsilon: 0.03333333333333333 }, \n", " solver=\"cvxopt\") \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "on,\n", " \n", " \n", " " ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "print gp.solve().table()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Using solver 'cvxopt'\n", "Solving took 0.0341 seconds\n", " 1.3203 : Cost\n", " | Free variables\n", "\\frac{dC_P}{dy} : 0.757 [-] \n", " \\lambda : 2.57 [-] \n", " \\xi : 2.14 [-] \n", " a : 0.315 [-] \n", " b : 0.685 [-] \n", " s : 0.106 [-] \n", " |\n", " | Constants\n", " F : 1 [-] \n", " \\epsilon : 0.0333 [-] \n", " y : 0.75 [-] \n", " |\n", " | Constant sensitivities\n", " F : -1 [-] \n", " \\epsilon : 0.11 [-] \n", " y : -1 [-] \n", " |\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Maximizing Total Power" ] }, { "cell_type": "code", "collapsed": false, "input": [ "B = 3\n", "N = 10\n", "\n", "f = var(\"f\")\n", "pi = var(\"\\\\pi\", np.pi)\n", "DCp = var(\"(\\Delta C_P)\")\n", "xi = vec(N, \"\\\\xi\")\n", "zeta = vec(N, \"\\\\zeta\")\n", "y = vec(N, \"y\")\n", "dy = vec(N, \"(\\Delta y)\")\n", "lam = var(\"\\\\lambda\", ('sweep', np.linspace(0.01, 8, 20)))\n", "\n", "constraints = [1 >= a + b,\n", " 2*a*b >= s*lam*y + s*xi,\n", " xi**2 >= (lam*y)**2 + 4*a*b,\n", " s*b >= DCp/(8*lam*dy**2*F) + eps*a*b]\n", "\n", "constraints += [ y[-1] + dy[-1]/2 <= 1,\n", " [y[i] + dy[i]/2 + dy[i+1]/2 <= y[i+1] for i in range(N-1)],\n", " #B*zeta[0]/(2*pi) + dy[0]/2 <= y[0],#switch0\n", " dy[0]/2 <= y[0],#switch0\n", " 1/y >= 1 + 2*f*s/(B*a),\n", " 1 >= F**1.56 + 1.655*F**5.51*f**-2.76 ]\n", "\n", "sol = gpkit.GP(1/(N*DCp), constraints, {eps: ('sweep', [0.2, 0.1, 0.05, 0.033])}).solve('mosek')\n", "print sol.table()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Using solver 'mosek'\n", "Sweeping 2 variables over 80 passes\n", "Solving took 3.87 seconds" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 92.607 : Cost (average of 80 values)\n", " | Free variables (average)\n", "(\\Delta C_P) : 0.0047 [-] \n", "(\\Delta y) : 0.0726 [-] \n", " F : 0.859 [-] \n", " \\xi : 2.4 [-] \n", " a : 0.298 [-] \n", " b : 0.702 [-] \n", " f : 2.95 [-] \n", " s : 0.123 [-] \n", " y : 0.363 [-] \n", " |\n", " | Constants (average)\n", " \\epsilon : 0.0958 [-] \n", " \\lambda : 4 [-] \n", " |\n", " | Constant sensitivities (average)\n", " \\epsilon : 0.526 [-] \n", " \\lambda : 0.179 [-] \n", " |\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plotting $C_P$ vs $\\Lambda$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "B = 3\n", "N = 20\n", "Nlams = 20\n", "\n", "f = var(\"f\")\n", "pi = var(\"\\\\pi\", np.pi)\n", "DCp = var(\"(\\Delta C_P)\")\n", "xi = vec(N, \"\\\\xi\")\n", "zeta = vec(N, \"\\\\zeta\")\n", "y = vec(N, \"y\")\n", "dy = vec(N, \"(\\Delta y)\")\n", "lam = var(\"\\\\lambda\", ('sweep', np.linspace(0.01, 8, Nlams)))\n", "\n", "constraints = [1 >= a + b,\n", " 2*a*b >= s*lam*y + s*xi,\n", " xi**2 >= (lam*y)**2 + 4*a*b,\n", " s*b >= DCp/(8*lam*dy**2*F*N/1.7) + eps*a*b]\n", "\n", "constraints += [ y[-1] + dy[-1]/2 <= 1,\n", " [y[i] + dy[i]/2 + dy[i+1]/2 <= y[i+1] for i in range(N-1)],\n", " #B*zeta[0]/(2*pi) + dy[0]/2 <= y[0],#switch0\n", " dy[0]/2 <= y[0],#switch0\n", " 1/y >= 1 + 2*f*s/(B*a),\n", " 1 >= F**1.56 + 1.655*F**5.51*f**-2.76 ]\n", "\n", "sol = gpkit.GP(1/(N*DCp), constraints, {eps: ('sweep', [0.2, 0.1, 0.05, 0.033])}).solve('mosek')\n", "\n", "plt.plot(sol(lam).reshape(4, Nlams).T, sol(N*DCp).reshape(4, Nlams).T, '--', linewidth=1.5)\n", "plt.gca().set_color_cycle(None)\n", "Fsub = sol(F)\n", "lamsub = sol(lam)\n", "epssub = sol(eps)\n", "\n", "##\n", "\n", "lams = []\n", "NDCps = []\n", "for j in range(Fsub.size):\n", " lam = var(\"\\\\lambda\", lamsub[j])\n", "\n", " constraints = [1 >= a + b,\n", " 2*a*b >= s*lam*y + s*xi,\n", " xi**2 >= (lam*y)**2 + 4*a*b,\n", " s*b >= DCp/(8*lam*dy**2*F*N/1.7) + eps*a*b]\n", "\n", " constraints += [ y[-1] + dy[-1]/2 <= 1,\n", " [y[i] + dy[i]/2 + dy[i+1]/2 <= y[i+1] for i in range(N-1)],\n", " #B*zeta[0]/(2*pi) + dy[0]/2 <= y[0],#switch0\n", " dy[0]/2 <= y[0],#switch0\n", " ]\n", "\n", " sol = gpkit.GP(1/(N*DCp), constraints, {F: Fsub[j], eps: epssub[j]}).solve('mosek', printing=False)\n", " \n", " lams.append(sol(lam))\n", " NDCps.append(sol(N*DCp))\n", " \n", "lams = np.array(lams)\n", "NDCps = np.array(NDCps)\n", "plt.plot(lams.reshape(4, Nlams).T, NDCps.reshape(4, Nlams).T, linewidth=1.5)\n", "plt.plot([0, 8], [16.0/27.0, 16.0/27.0], 'k')\n", "plt.ylim([0, 0.7])\n", "plt.xlabel('Tip Speed Ratio (lambda)')\n", "plt.ylabel('C_P')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Using solver 'mosek'\n", "Sweeping 2 variables over 80 passes\n", "Solving took 4.39 seconds" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 59, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEPCAYAAABP1MOPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4VFX6xz83vQGhE0IvARK6UqRoKC5gAUEQwYqNXXtX\n3HXBsj8bq6C7Kiqy6iosiKCggCBEgZAQQiAhhEBCTQgQSCF16vv746Rn6BnSzud5znNn7py5cwYy\n53vPeZshImg0Go2m/uJS3QPQaDQaTfWihUCj0WjqOVoINBqNpp6jhUCj0WjqOVoINBqNpp6jhUCj\n0WjqOU4XAsMwxhqGsc8wjAOGYbzk4PXnDcOIKWpxhmFYDcPwd/a4NBqNRqMwnBlHYBiGK5AIjAZS\ngShgmogknKP/LcDTIjLaaYPSaDQaTTmcvSIYCCSJyGERsQBLgAnn6T8dWOzkMWk0Go2mDM4WgkDg\nWJnnKUXnKmEYhg8wBlju5DFpNBqNpgzOFoJL2Xe6FdgiIlnOGoxGo9FoKuPm5OunAm3LPG+LWhU4\n4k7Osy1kGIZOiqTRaDSXgYgY53vd2SuCHUBXwzA6GIbhAUwFfqrYyTCMRsD1wI/nu5iI1Pg2e/bs\nah9DXRlnbRijHqceZ01vF4NTVwQiYjUM43FgHeAKLBSRBMMwZha9vqCo623AOhEpcOZ4NBqNRlMZ\nZ28NISJrgDUVzi2o8Pwr4Ctnj0Wj0Wg0ldGRxVVMaGhodQ/hoqgN46wNYwQ9zqpGj/Pq49SAsqrE\nMAypLWPVaDSamoJhGEg1G4s1Go1GU8PRQqDRaDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1GU8/RQqDR\naDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1GU8/R\nQqDRaDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1GU8/RQqDRaDT1HC0EGo1G\nU89xuhAYhjHWMIx9hmEcMAzjpXP0CTUMI8YwjD2GYYQ5e0wajUajKcUQEedd3DBcgURgNJAKRAHT\nRCShTB9/YCswRkRSDMNoJiKnHVxLnDlWjUajqYsYhoGIGOfr4+wVwUAgSUQOi4gFWAJMqNBnOrBc\nRFIAHImARqPRaJyHs4UgEDhW5nlK0bmydAWaGIaxyTCMHYZh3OPkMWk0Go2mDG5Ovv7F7OW4A/2B\nUYAPsM0wjAgROVCx45w5c0oeh4aGEhoaWjWj1Gg0mjpCWFgYYWFhl/QeZ9sIBgNzRGRs0fNZgF1E\n3inT5yXAW0TmFD3/AlgrIt9XuJa2EWg0Gs0lUhNsBDuAroZhdDAMwwOYCvxUoc+PwDDDMFwNw/AB\nBgF7nTwujUaj0RTh1K0hEbEahvE4sA5wBRaKSIJhGDOLXl8gIvsMw1gLxAJ24HMRcSgEhnFeUdNo\nNBrNZeDUraGqRG8NaTQazaVTE7aGNBqNRlPD0UKg0Wg09RwtBBqNRlPP0UKg0Wg09RwtBBqNRlPP\n0UKg0Wg09RwtBBqNRlPP0UKg0Wg09RwtBBqNRlPP0UKg0Wg09RwtBBqNRlPP0UKg0Wg09RwtBBqN\nRlPP0UKg0Wg09RwtBBqNRlPP0UKg0Wg09RwtBBqNRlPP0UKg0Wg09RwtBBqNRlPP0UKg0Wg09Rwt\nBBqNRlPP0UKg0Wg09RwtBBqNRlPPcXP2BxiGMRaYB7gCX4jIOxVeDwV+BA4WnVouIm86e1ya2oOI\nYBGhwG6n0G6nwGajsPhx0bHs4+KjXQRPFxc8DANPF5eSVvb5hR67GEZ1f32Nxuk4VQgMw3AF/gWM\nBlKBKMMwfhKRhApdfxeR8c4ci6ZmkWu1ctRk4mhhYaVjqtlMftFkXzypSzWN080waOTqShN3dxq7\nuZUe3dxo7O6ujhUeF/fxdnWtplFrNJeGs1cEA4EkETkMYBjGEmACUFEI9G1XHcImwgmzudzkfqTC\nhJ9ptZZ7jysQ6OlJOy8vrvHzw8/VFS8XF7xcXPAueuxd/LzoWO5chT5eLi64AGYRTHa7aiKYyzw2\n2e3quYPHJrsdswiFdjvZViuZVisZFgtnLBYO5OeTWXTufALl5eJSIhpN3d0J8PAgwNOT1h4eBHh4\n0NrTs+TY0NUVQ68+NNWEs4UgEDhW5nkKMKhCHwGGGIaxG7VqeF5E9jp5XJoqwmS3E3X2LL9nZ7M5\nK4vEggJSTCasUn6K9Hdzo13RRD+0USPaeXmVPG9XNCG6udQuk5VdhLNWKxllhKLc0Wols+hxusVC\ndG4ux8+cId9ur3QtbxeX8uJQQTSKH/u7uWnB0FQ5zhaCi1nR7wTaiki+YRjjgJVAkKOOc+bMKXkc\nGhpKaGhoFQxRcynk2Wxsy87mj+xs/sjKIuLsWUxFk34vX1+GNmxIey+vchN9W09PGro53Rx11XEx\nDPzd3fF3d7/o94gIOTYbaWYzx00m0szmco+Pm0zszs1ljdlMrs1W6f2+Li609/KivZcXHcoePT1p\n7+VFSw8Pbdeo54SFhREWFnZJ7zFEnLf7ahjGYGCOiIwtej4LsFc0GFd4zyHgGhHJqHBenDlWjWOy\nLBa2lJn4o3NzsYrgCvRv0IDrGzXien9/hjVqRJNLmBA1FybXalXiYDaTZjJx3GzmmMnE4aKttsOF\nhZW22DwNg3ZlRKK9p2c5wWjt6YmrFop6hWEYiMh5/9OdLQRuQCIwCjgObAemlTUWG4bREjglImIY\nxkBgqYh0cHAtLQRXgVNmM5uLJv3fs7KIzctDAA/DYGDDhiUT/5CGDWlQB+/yaxs5VmuJKBwpIxLF\n505ZLOX6uxkGbT096eztTZcKrZOXlzZw10GqXQiKBjGOUvfRhSLylmEYMwFEZIFhGI8BfwGsQD7w\nrIhEOLiOFgInICKEZWWx5NQp/sjOZl9+PgA+Li4MadSoZOIf2KCBniRqIfk2mzLWm0wl4nC4sJDk\nggKSCgrIqLCiCPTwqCQQXby96eztrYW/llIjhKCq0EJQtRTabHx36hTzU1KIzcujoasrw4sm/esb\nNaJ/gwZ41DLjrebSybBYSkShuBU/P1lhNdHS3b1EFLp4e9PV25vuPj4E+fjgo28SaixaCDSVOG4y\n8cnx4yw4fpx0i4Vevr483aYN01q00Hf8mnLkWK2VRKK4pZrN5fq29fSku48P3Xx81LFIJAI9PbWX\nUzWjhUBTQtTZs8xPSWFpejpWEW5t2pSn27Qh1N9f/1A1l0y+zUZyQQH78vNJzM9Xx4ICEvPzySnj\n7eTr4kJQsTiUEQm9irh6aCGo51jtdn44fZr5KSmEnz1LA1dXHgwI4PHAQDp7e1f38DR1EBEhzWwu\nFYcigdiXn8+RwsJy/uTtPD3p5uNDsI8Pwb6+JUftfVa1aCGop2RYLHyelsa/U1M5ZjLR2cuLJ9u0\n4f5WreqkP7+mdlBgs3GgaNVQLBTFLa9MkF1Ld3dCfH3LiUOwjw/NPTyqcfS1Fy0E9Yy9eXl8mJLC\n1ydPUmC3M9Lfn6fbtOGmpk2d7zuelQWHD0Nurnpe9v/qUh+7uEDTptC8uTpq8arT2EU4ZjKxNy+P\nvfn5Jcf4vLxy20zN3N0J9vFRIlFGIFp6eOjtzfOghaAeYBdhbUYG81NS+DUzE0/D4O6WLXmqTRt6\n+flV3Qfl5amJ/tAh1So+zsqqus8qi2FAkybQooUShuJj2cdlj02agN57rhOICKkmUzlx2JuXR3x+\nPlll3F4bu7kR7ONDLz8/evr6lrSmeosJ0EJQ54nOyeHehAT25ufT2sODRwMDeSQg4PKW0CYTHD1a\nOrlXnOzT08v39/aGDh2gY8fS1qEDNGpU2qfsXdqlPLZa4cwZ9Znp6XDqVOVjRkb5VUQxZVcTgYHQ\npQt07Vp67NgRPD0v/d9HU2MQEU6azcRXWD3E5eWVE4gAD48SUehVdAz29cW3nt0oaCGoo4gIH6Wm\n8nxyMi09PHinUycmN29+6X7/hw/D8uXwww+wbVv5idXdHdq1qzzRFz9u0aL8JH61sVqVGDgSieLj\nsWNw4ED51YphqO9VVhy6dFGtUyfw8qq+76S5IooN1XF5eewp0+Lz8igoskEYQEcvrxJhKG7dfHxw\nr6NxM1oI6iCZFgsPJiay4vRpbmnalP90735pS+DERDX5L18OO3eqc337wk03QVBQ6UTfunXd2WI5\ncwaSkpQoVDxmZpb2Mwxo27aySPTsqf5N6uhEUdexiXCooIA9RauGYoFIzM+n2ALhbhh08/Ghl68v\nvX196e3nR29f3zoRB6GFoI4RefYsU+PjSTWbeadTJ55p0+bCf6QiEBtbOvnvLcrwPXgw3H47TJwI\nnTs7f/A1lYwMxwKRlKReK8bPD3r3hj59SluvXuDrW31j11wRJrudxPz8EmGIy8sjLjeXIyZTSZ/G\nbm7lhKG3nx8htWx7SQtBHcEuwgcpKbx88CBtPD35X3AwAxs2PPcbRGD79tJtn+RkdTd7/fVq8r/t\nNmjT5up9gdpKRgbs3w9xcbB7t2qxsXD2rHrdMNSKoW/f8gLRpk31bptprogsi4U9eXnE5uURm5tL\nbJFIFKcFN4Au3t6VBKKDl1eNTAGuhaAOcMZi4b6EBH7OyGBSs2Ys7NbNcf57mw22bi2d/FNS1D7/\nqFEwaRJMmKD29TVXhoiyrRQLQ3E7eLC0T+PG5YWhTx8ICdFG6lqMXYTDhYUlwlB8TCooKAmS83N1\nLdla6uPnR58ikfCrZvdnLQS1nC1ZWUxLSOCU2cw/O3fmscDA8ltBIhAWBkuWwMqVykDq5QVjxqg7\n/1tvBX//aht/veLsWbVaKCsOcXFQUKBed3dXgjBoEAwcqI5du2q7Qy0nz2YjvowwxObmsruM95IB\ndPb2pk+ROPQtEoi2V9H2oIWglmIX4Z2jR3n10CE6eHmxNCSE/g0alO+UmgqPPQY//qj2r2++WU3+\n48ap55rqx2ZTtobdu5VhPjISduwoDbrz9y8VheJj8+bVO2bNFSNFAXK7c3PZnZvLriJxSCq+KaDU\n9lAsDH2KbA+eTrgx0EJQCzllNnNPQgK/ZmYytXlzPuvWrXxaCLsdFiyAl18GiwVeew2eeEK7PdYW\nbDZISFCisH27OsbFqf9XUN5JZYWhXz8Vs6Gp9eRYrcTl5ZUTiLi8vJIa1q5AD1/fcquHfn5+NLvC\n1BpaCGoZYZmZTE9IINNqZX6XLjwcEFB++bh3LzzyiLIFjB4Nn35avz1+6gp5eRAdXSoMkZEqBgJU\neo0+fUqFYcgQZaCugUZJzaVjEyG5oECtGsoIRNk034EeHkoUGjQoEYeOXl4XvbWkhaCWYBPhzSNH\neP3wYbp6e7M0JITeZbd3TCZ46y34v/+DBg3ggw/gnnv0ZFCDsYmQb7ORa7ORZ7NRYLdjB4K8vR3W\nfYjJySHHZsMugh1wP3GCBtHR9NizB8+oKIiKgpwc1bllSzIHDyZ70CAKhgzB2qcPHh4euBsGgZ6e\nTtle0FxdTpvN7M7LY1duLjE5OezKzWVfmbiHhq6u9CkShWJxCPb1dRhUqoWgFpBmMnF3QgIbs7K4\np2VLPu7atbyXwdat8PDDajth+nQlAtr756rzxfHjHCosJK94crfbybPZmNelC50cbN30jooiLi+v\n0vmYa66hb0V7D9A3Kord5+tvt6u/gfBw2LKFlA0baHP8OAC5Xl5sCwlhS69e3D1pEl1HjqwU3zAo\nOpr4vDw8XFzwMAz8XF3xc3VlSXAw3R3EQixMS+Os1Yqfqyu+RX39XF0Z2KBBtXvB1FcKbDb2FInD\nrtxcYopWEMVbS+6GQbCPT7mVQx8/P/zd3bUQ1GTWZ2Rwd0ICOTYb/+7alftbtSpd7mVnw6xZ8Mkn\n0L69Oo4bV70DrkN8deIEcbm5nLRYOGE2c8Js5qTZzNrevSsb5oGB0dFE5+SUmxh9XV35pnt3ejow\nzi9MSyPLasXXxQVfV1e8XVxwNQxG+Ps7dP+NPHuWPJsNF9QdnAvgYhj0OYf7YUR2NgXHjtEgIgL/\nbdtoun07/vHxGCIqIrx/fxg2DIYPh6FDmWcykWIyYRah0G4vWa3M79qV9g7sS8Hbt5NQVL+6LHsG\nDCDEgXDcHBvLCbOZxm5uNHZ3V0c3N55t25aWDva4z1qt+Lq6Oj8rbh2neGsppkgcilcQ5cqMjhih\nhaCm8v6xYzyfnEywjw9LQ0IILvvjWrlSeQSdOAFPPglvvKE9gS5ApsVSktu+ONf9EZOJT4OCGOQg\n+G70rl2Enz1LKw8PWnp4qKO7O8+2bUuQj0+l/ha7HTfDqNnpBrKzVc6oLVtUi4yEwkL1WlBQqTAM\nG6ZsS+f5LpaiFU/x6ie36PGABg0cVhZ76sABkgoKyLRaVbNYyLRa2TdwIB0drJi6RESQXFhII1dX\nmrm709zDg+bu7iwICiLAQbxFmslEIzc3XdXsIjlhMpWsGl7p0EELQU3k5zNnuDUujknNmvF1jx6l\nf9zHjysPoB9+UOkMvvgCBgyo3sHWIKx2OzZwuAd+a1wcq8+cAdQSuau3Nx29vJjdoQMDHAiByW7H\no6ZP7FeKyaTcVrdsgc2b1TZjcdqMwEAIDVVtxAiVcK+K/y2Kf6+O/o0/P36cVJOJDKuV0xYLpy0W\n0i0W1vfu7dBLpnV4OGlmMz4uLrQoEo3m7u583aOHw1xbWRYLjdzc6vb/70WibQQ1kKT8fAbs3EkH\nLy/C+/VThkO7XU36L76ofryzZ8Nzz6kgpHpKYn4+kWfPlqtklVRQwMdBQTwYEFCp/+9ZWeRYrXT3\n8aGDlxdu2mBaGbsd9u2DP/5QgYhhYXDypHqtTRslCMXC0KFDjXJG+OrECdJMJtKLBCPdYiHdbOb3\nfv0c5v3x37yZfLudlh4eBBSt+AI8PPigS5d6t6rQQlDDyLPZuG7nTlJNJnZcc41aMu/bp1xCN29W\nP8AFC1TEaT3n5eRk3jl2DDfDoIu3N928venu48PtzZs7vMPXXAYi6u8vLAw2bVLH4roT7dqVikJo\nqBKGWkJxmva0IttPmsnECbOZUxYLx667rpJdQkQICA+nqbs7rT09CfTwINDTk0BPT2a2bl3r7Rg1\nQggMwxgLzEPFS3whIu+co98AYBtwh4j84OD1Wi0EIsLdCQksPnWKtb178yc/P3jnHXjzTeXh8c9/\nwv3316i7MGdgFyEhP5/NWVlszs6mj58fL7ZrV6nfscJC8u12Onl51dk88TUOERWrUrxaCAuD06fV\nax06lN9KcvB/Vlsx2e08l5REmtnMcbOZFJOJNJMJb1dXzg4bVml7yWy3c09CQolYBHp40MbTkzae\nnnSogcF/1S4EhmG4AonAaCAViAKmiUiCg37rgXxgkYgsd3CtWi0E81NSeDopiX907MgrAQHKA2jj\nRpg6FebPh5Ytq3uITiUuN5e/HjrE1uxsMorysAR4ePBQQACvd+xYzaPTOMRuV8JQvFr4/XdV2wFU\nBPSIESqwceTIOvf3axMhw2JxWO3vlNnMsJgYUk2mEtdNgObu7pwaOrRS/0KbjVVnztDOy4t2np60\n9PC4qllKa4IQXAfMFpGxRc9fBhCRtyv0exowAwOA1XVNCH7PymLUrl3c2qwZy4ODcXngAfjqK1i4\nEB54oLqHV6VY7HaHd/CJ+fncGhfH8EaNVPP3p9MlREdqagB2O+zZU34rqbj6W69eKtPt6NEq3bkD\nF9y6hoiQbbWSYjKRajaTb7Mx0UGuqL15eYRERZU8dzcM2np6MrBhQxYHBzu8blX+LmqCEEwGxojI\nw0XP7wYGicgTZfoEAv8FRgJfAqvq0tZQqslE/x078HdzI+qaa2j47rvw178qg/CcOdU9vCoh3Wxm\naXo6S06dIrmggNTrrtMTfH3AZoOYGNiwAX77Tdm5TCaVFmPQoFJhGDQIrjBfTm3GZLezPz+foyYT\nRwsLS47+bm78OyioUv/onBxG7dpFey8vOnh5lRx7+fpyY5Mml/z5FyMEzg4RvJiZex7wsoiIoWaP\ncw54TpmJMzQ0lNDQ0Csdn1Mx2e1Mjo8n325nU8+eNFy+XInAXXcpIajlfHfyJP89eZJfMzKwAb18\nfZnRqhUmux2veuaZUS9xdYVrr1Xt5ZdVzEJ4eKkwvPkmvP66soFdf32pMPTqVa/Sb3u6uNDLz49e\nFxkL1MjVlXtateJoYSGHCwvZlJVFjs3GjY0bOxSC5IICVqSn06FIMFIjI9m5Zcsl3Yw5e0UwGJhT\nZmtoFmAvazA2DOMgpZN/M5Sd4GER+anCtWrdiuDR/fv55PhxlgUHMzk5We2pDhigfih1oEhJaEwM\nhwoLmd6yJdNbtLjoP3RNPSErS20fFQvDvn3qfLNmyq4werQSh06dqnWYNR0RIctqJddmo62DKPAl\nJ08yLaGc2RVfFxfua9WKfwcF1YitITeUsXgUcBzYjgNjcZn+i6gjW0OL0tJ4IDGRF9u25R3DUDWC\nGzaEiAj1Q6gl2EXIs9lo4CDNQbrZTFN39xpZnk9TA0lNVYJQLAxFuZLo1An+9CfVRozQxZQugyyL\nhSMmE4eLVhGHCwsJ8fHhodatq18IAAzDGEep++hCEXnLMIyZACKyoELfOiEE0Tk5DN25k2GNGrG2\nfXvchgxRgTsRESrUv4YjIsTl5fHdyZMsPnWKsU2asKBbt+oeFhw5okpwZmWVb+PHq+2GijzxhCrc\nU0yxYM2fr+o2V+Tpp+Gnn8r3Nwzl2jthQuX+33+vaho3aKCan5869u1b57xoqpziGIYNG2D9emV8\nzs1VW0aDBsGNNyphGDiwXgdWVgU1wUaAiKwB1lQ4t+AcfWc4ezzO5rTZzKQ9e2jh4cHioCDcxo9X\nxePXr69yEUjLSWNN0hqyC7Oxix272BGk5LFd7IhUeF7h9eI+3u7edGoaTLxLa9bme7G3oBBXYEyT\nJoy9DAPVRVNcIL64HTgAf/6zujOsyKuvwjffVD4fGOhYCHr2VLn+QU08xZxrki7Ox1O2r91+7myv\nS5fCsmWVzy9ZotyCK/L00yrdQ4sW5dttt6kaA/UJw4AePVR74glVZCkiAn79Vf1Wiu0LDRuqv4Xi\nFcMFciRpLg8dWVyF2EQYGxvL5qwstvTrx7XPPqtcRP/zH7jvvir5jOM5x1m+dznL9i5jy9EtyEXZ\n4xUGBi6GS7lmGOpcgaUAm6hs565uvnRo1pNRbQYwJPBa+gX0o0ezHri7XuadmYjjH+9TT8GHH5Y+\nd3VV/un/+AfccUfl/jExKsCpUSO1feDvrx5Xl71FRHnJ5OSou9mcHNWCghyXnJw7V935njqlVoin\nTqn3r16tSo1W5IknVJnLYsFo2RICAlTfwEDnf7/qJCNDxdmsXw/r1qnVIKjAtmJRGDkSGjeu1mHW\nBmrE1lBVURuEYNbBg7x99CgLu3Xjga+/Vp4Uf/2ruru5AlLPprI8QU3+W49uRRBCmocwJXgKtwff\nTtuGbUsm9HKTfJmJ/0IeBCarifj0eH5PiSLpVCwxJ2LYfXI3+RaVitjT1ZNeLXvRr1U/+gf0p1+r\nfvRu2Rtv9zKRlCkpqtLWgQPl7/Ife0z9O1Rk/Xrll961q5o8O3asX9sAIko4PD0di9nf/65cMotF\noziYa9MmFeFbkX/9S12vXTto21YdAwNr/7+piKr9vH69WjFs3Ki+p4uLcr4o3kYaPLj2f1cnoIXg\nKrI8PZ3J8fHMDAjg07g4mDJFbQ98991lucqlnE3h+73fs2zvMsKPhQPQs0VPpgRPYUrwFHo073FZ\n4xQRNmZl0djNzWHe/bLY7Db2n9lPzIkYdqbtJOZEDDFpMWQWZgLgarjSvVl3+gX0o3+r/vT7Yz8D\nX/0UHwvqjrh4gp80CW699bLGqymDxQJpaerf1lEqg6FDlftmWQwDduxQ9QkqkpKirlXbPNgsFpVi\nu1gYtm9XW3gNGyovpDFjVKtF+ZGciRaCq0RCXh4Dd+4kxMeH3y0WPEeMUEXHN268pKLyx7KPlUz+\n21K2AdC7ZW+mBE9hcvBkujfrfkXjDM/O5q+HDhGWlcXU5s1ZEhJyaRfIy0M2b+bImWRi+rcuJxDH\nc5QHiLeLJ2M73sjEXndwS9AtNPbWS/erSl6eqnd87BgcPaqOTz4Jjuw8nTvDoUNq9dC5s7JTdO6s\nbDSNGl39sV8umZnqt7ZuHaxdW1rvuVu3UlEIDQUHdSbqA1csBEUBXrcBXYBYEVlXtUO8eGqqEJy1\nWhm0cydnLBZ2tmxJm6FDVQBNZKTjfeIKHM0+WjL5R6REANCnZR915x8yhaCmV25g3pmTw98OHWJN\nRgYt3d15pX17HgkIuHDQl82m7iY3bFAtPBzMZnWnv39/ua4nc08SnRbNmgNrWLFvBak5qbi5uDGy\n40gmdZ/EhO4TaOXX6oq/i6YKWbwYEhOVM0Nystp+SU9XnliOhOCf/1R2is6dVWvevOYZbou9kdat\nUy0sTAW6eXiooLZiYejZs+aN3UlUhRB8AgQD4ahYgNUi8nqVjvIiqYlCICLcHh/PT6dPs6FLF0LH\njFG+0tu2KW+I87AiYQXvbH2HyNRIAPq26lty518Vk38xhTYbbSMisInwUrt2PB4Y6DB/u0NOn1ZG\nShG1wimODB02rFJN3LLYxU5UahQ/JPzAD/t+ICkjCQODIW2HMLH7RCb2mEinxjqIqEZy9qzaYqmI\nyaT+z2220nONGqm/8z/+qLl78wUFys5SLAzx8ep869alonDjjY5XTHWEqhCCeKC3iNgMw/ABtoiI\ng81G51MTheDtI0eYdegQ73fowDOPPKKMeOvWKW+GcyAivBf+Hi9teIkezXpwT+97mBIyhS5NnOc+\nGJ6dTYivL40cFR0XUeO+4QbltVORtWvhmmsuanXjCBEhPj2eHxJ+YMW+Few6sQtQwjex+0Qm9ZhE\nSPMQnZuoNmAyqa2k4tXD/v1qBbF0aeW+ubkqlUr37uVbdXv5pKSUisKGDWpbqdjoPGYMjB2rYhfq\nUIqUixECROScDYg53/Or2dRQaw7rzpwRl02bZOqePWKfOVMERBYuPO97rDarPPbzY8IcZOqyqVJo\nKazSMVkg06BEAAAgAElEQVTt9ovvnJsr8sknIj16qLGvWlWlYzkXyRnJMnfrXBm6cKgYcwxhDtL1\nw67y4q8vSsSxCLHZbVdlHBonk5wsEhws4u6u/r6K2zXXVPfISrFaRbZtE5k9W2TwYBEXFzXGxo1F\npk4VWbRIJC2tukd5xRTNneedXy+0IigAksqc6gwkl2qI9L5smbpEatKK4HBBAddER9Pa05OILVvw\nffZZ5Sr61lvnfE++JZ/py6fzY+KPPH/d87xz4zu4GFWTeOuEycRbR4+y7exZIvr3P3/Kh2PHlJvh\n55+ru6H+/ZU//9SpV917JC0njR8Tf2TFvhVsPLQRq91KYINAJnafyIx+M+gfUC2LT01VYrWqVcS+\nfaq5usKzz1but2sX/OUvEBKi9u+Lj61aXb29/IwMtUpYu1a1tDR1vm9ftVIYNw6uu67mboOdg6rY\nGupwvjeLyOHLGdjlUFOEoNBmY2hMDMkFBURlZtL1tttg8mQVTXoON9HT+ae5dfGtRKZEMm/sPJ4c\n9GSVjMVkt/Pa4cPMT0nBZLdzf6tWzOvSBT9HW0DF/Oc/8OCDyqXzqaeUy2EN2JbJLMhk9f7VrNi3\ngjVJayi0FnJt62t5pP8jTOs1DT8PndCuThMZCbNmQVxcaVU0gNtvV6k8rjYiEBurBGHNGti6VYla\ngwbKTjZunBKHtm2v/tgukavmPmoYxjYRue6KL3T+z6gRQvBhSgpPJSXxo5cX40eOhN691R77OUrU\nHcw8yNj/juXY2WN8O+lbJvWYVCXjOFRQwJT4eKJzc5nWogWvdehA14txjzOZVIBSDS41mFmQyX9j\n/8tnOz9jz6k9+Hn4cVevu5h5zUz6BfSr7uFpnM2pU8qou2ePMurefnvlPsuXw8cfl64eevVSj51V\nEOfsWZUor1gYil1UQ0KUIIwdC8OH18iYjKspBDEi4tRfaE0QAqvdTtD27bQWYcukSSpGICLinLlr\nolKjuGXxLVjtVn668yeGtqtcxu5y+U9aGs8kJ/Of7t2ZUDGb6YkTKrXFs8+eU6BqAyJCREoEC6IX\n8L/4/5WsEmZeM5M7e96pVwn1maVLlTtrfHxpPilQ+YlefdW5ny0CCQmlovDHH8qt2sdHOYoUbyPV\nkPTaWgiqmGWnTnHH3r388MUXTFy1SrmJOig1B/Dz/p+54/s7aOHbgrV3raVbs6rP3pluNpevqRod\nrTJrLlmioi9/+UX9QdYBilcJC6IXEJ8eTwOPBtzV6y4eueYRvUqoz9jtKnAuNlZtKw0bpjzgKvLJ\nJ8oO0bt3aauqoLm8PLUrUCwMBw+q80FBcNNN6jd4/fWXFFxalVyx19DFNq6CNxHV7DVkt9tl0I4d\n0nnNGrG6uIisW3fOvp/t+ExcXnOR/gv6S1rOVfA6+OMPkWHDlMeDn5/I44+LJCY6/3OrAbvdLluP\nbpX7VtwnXm96CXOQAZ8NkM+jP5ccU051D09TU3npJZEmTcp7MLVvL/Lrr1X/Wfv3i8yfLzJ2rIiX\nl/osHx+Rm28W+de/lEfVVYQq8BrqCrQUkS0Vzg8D0kQkueh5nV8RbM3OZlhMDP9auJDHTp9Wyl8B\nEWF22Gze+OMNxnYZy7Ipy6pk++K02Uyz89V8XbNGJXZ74gl44IHalR7gCjjXKmHmtTPp26pvdQ9P\nU9MQUcVwdu9WK4jYWHjlFWVbqMjHHysPp759lf3hctNT5Oer6OY1a1RLLnK6vIqrhaqII/gZFVBW\n8XxvVAGZ4ue9LqQ4V9qo5hXBxLg4abxhg+R6eYmEhVV63Ww1y30r7hPmIA/++KCYreYr/kyb3S5v\nHDokDf74Q+Jzc8/T0aZ8ouspxauEe1fcW26VsChmUZXHamjqCT17lq4cXFxUvM20aVceV1B2teDp\neVVWC1TBimCHiFx7jtf2iIgDKXUO1bkiSMrPJ2j7dl5ZtYo3w8NVzp0yLpdnTWeZvHQy6w+u57XQ\n13j1+levOFL2tNnMPfv2sTYjg7tatODToKDzu4VqgMqrhFZ+rXhy4JPMvHYmTbzrbhoBTRUjomog\n7NqlWkyMWknExztOr7J6tYqc7tTp4rMNn2+1MG6cajfccMWrhaqII0gSEYe5D873mjOoTiF4bP9+\nvkhN5cjtt9Nq0aJyZQuP5xzn5u9uJu5kHJ/f+jkz+l15kbWI7Gzu2LuXk2Yz87t0YWbr1hgWC8yZ\no4xjb799xZ9R1xERfjv0G3PD57IueR0+7j482O9Bnh78tM5zpKlasrNL6yw3aAB9+qjcXP37q4JU\nF3tTeOBAqShs2qRcvb29VebUYhfVrl0vOe6nKoRgCbBRRD6rcP5hYLSIOKjH5xyqSwjOWCy03baN\nO8PD+fLrr5Vvc5HiJ6QnMPbbsZzJP8P3d3zP2C5jr/jzsq1W2m/bRhN3d5aFhHBNgwZqL/Pee9Ud\nyUMPwWef1YggsNpC3Mk43o94n29jv8UmNm7vcTvPD3megYEDq3tomrqA1ap+ozExavWwc2dpZbli\nD6KK/S2W87t25+crt9Q1a5Q3UnG2344dS0VhxIiLipuoCiFoBawAzEB00elrAE9gooikXXAUVUR1\nCcE/jhzhb4cOETdjBj3nzCkpObn5yGbGLxmPp6snv9z1S5WmQ9iQkcE1DRrQ2MUF3ntPVapq0kSl\nhdAFXi6b4znH+SjyIz7Z8QnZpmyGtxvO80Oe55agW6os3YdGA6gsradOqdKiFYmMVBH9PXqUrhz6\n91eGaUeZX0EJSnG9hd9+Uy6r7u7KXbZYGHr1cniDWCVxBEU1CUYAPQEB4kVk43nf5ASqQwhMdjsd\nIiLoEx/P2jfeUBkXPTxYFr+Mu1fcTUf/jqy9ey0d/Ds4ZwCvvqrKXE6erPygKwaOaS6LHFMOX8Z8\nyQcRH3Ak+whBTYN4dvCz3Nvn3vKlNzUaZ3DwoEr1snOnasU5jW6+WdkaLoTZrFJeFOdEio1V51u3\nLhWF0aNLMr3qCmVXyKK0NB5ITGT9c88x+t574amn+O3gb4z+ZjRD2w7lp2k/OdcAmZ6u1H/qVL0V\n5ASsdis/JPzAe+HvseP4Dpr5NOPxAY/z6IBHae57eWm3NZpL5sQJta3k4+M4GG75cvjvf1U6+P79\n1bFsNoPUVFWyc+1adczKUtvXgwfD2LEYf/+7FoLLRUToFRWF65Ej7PrznzGOHsXu482AzweQUZDB\n3kf3XtHdY77NxuMHDnCDvz/3tar9lbtsdht5ljy83LzwcD1PzEMNRETYfHQzc8Pnsmr/KrzcvLi/\nz/08c90zVVokSKO5LBYtUg4iZasCtm4Nb7yh4obKYrVCVFTpaiEqCkO5iJ5XCJzuj2gYxlhgHuAK\nfCEi71R4fQLwOmAvai9Ux9ZTRdZlZBCfn89XX3yB8eST4OvL9/FL2Zm2k69v+/qKRKDQZmNsbCyb\ns7Pp7O2tXNVycs69P+gkRIQccw4NPSt/bkJ6Am9ufpMCSwEF1gIKrYUUWAro1aIXn4//vFL/34/8\nzqivRwHg7+VPC98WNPdpzrB2w3h7dGUvpwJLAdmmbJr5NMPNpXrdYg3D4Pr213N9++vZd3of7297\nn0W7FrEgegHju43nhSEvVGmeKI3mkpgxQ7WzZ5UxOjpabSm1bl25r5ub6te3rxIJb+9z5kIri1NX\nBIZhuAKJwGggFYgCpolIQpk+viKSV/S4F7DCkVvq1V4R3Lh7N3tTUjg0fToeBw9i8W9I8MfBeLl5\nsWvmLlxdLq+CkV2EaXv3sjQ9nW979GC6iwvMnKmWd1u3qv9IJ3Eq7xRRqVFEHVdtx/EddG7cmfAH\nwyv13XF8B3d+fyfe7t54u3mXHPu26utwYk85m8KSPUvIt+STnpdOen46p/JOEdI8hI9u+qhS/7VJ\naxn3rcqD1MS7Cc19mtPctzmjOo5iTuicKv/ul8rJ3JP8O+rffBz1MWcKzjCk7RBeGPIC47uN14Zl\nTc1m9Gi1pQwwcSLGihXVviIYCCRJUd2CInfUCUCJEBSLQBF+wGmqmd25uWzIzOTtxYvxeOABaNqU\nL3csICkjiVXTVl22CAC8fPAgS9PTebdTJ6Zv2waPPKL8kN9806l2gOSMZLp8pPTVwCC4eTA3db2J\noW0d3+le2/pakp5McviaI9o0bMPzQ56/6P49mvXg45s+LhGM4mOeOc9h/61Ht/JlzJcENw8uaW0b\ntXXapNzSryWvj3idl4a+xKJdi3h/2/tM/N9EujXtxvNDnufu3nfj5VY9ScQ0mvOyapUyIEdHq9XA\nihUXfIuzVwSTgTEi8nDR87uBQSLyRIV+twFvAQHAn0Rku4NrXbUVwX0JCSxPTeXYlCk0jo0lv1VT\nunzYhU6NO7F5xubLjho+YTIREhXFtBYt+OiTTzDmzVPuY19/7TjfyUVSYClg14ldRB2PIu5kHJ/d\n+lmlMdrFzoeRH9I/oD/9A/rXuhTOi+MW88y6ZziZd7LknK+7Ly8MeYHZobOd/vlWu5Xle5fzbvi7\n7EzbSUvfljw16Cn+fO2faexdzXV4NZrzUO1eQ4Zh3A6MvZAQlOk/HGVHqJSz2TAMmT279AcfGhpK\naGholY851WSiY0QEf1m5kvlZWbBoEW9veZtZv81i84zNDGs37Iquf6SwkDa//orrhAkqSdzcuXC+\nhHLnQET4Lu47Ptr+EdFp0VjtVgBa+bUiZmYMrfxqvwHaEWfyz5BwOoG96XvZm76XYe2GMTl4cqV+\nX+36io2HNzI4cDCD2wymV8teVWKLEBE2Hd7Eu1vfZV3yOvw8/Hi4/8M8Pfhp2jWqucV+NPWHsLAw\nwsLCSp6/9tpr1S4Eg4E5IjK26PkswF7RYFzhPcnAQBE5U+H8VVkRvJyczHtHj5I0fTodN24ks0Mr\nOn3YiWHthrFq2qqq+RAR+PFHlariCraDrl90PWcKzjCh2wQGtB7AgMABBDYIvOI8R3WBueFzmRs+\nt2QF4e3mzbWtr2X2DbMZ1WlUlXzG7hO7mbttLovjFmMYBnf2vJMXhrxA75ZXrZS3RnNBasKKwA1l\nLB4FHAe2U9lY3Bk4KCJiGEZ/YJmIdHZwLacLQa7VSttt2xi9eTPLoqJgxQpeWv8S74W/x64/76px\nP/D0vHSa+jTVxstzICIcyT5CZEokESkRRKRG8NaotwjtEFqp78HMg7Ru0Pqy9v2PZB1hXsQ8Pt/5\nOXmWPMZ0HsOLQ19kRIcRWpQ11U61C0HRIMZR6j66UETeMgxjJoCILDAM40XgXsAC5ALPikiUg+s4\nXQiK6xFHPPoog778ktTgtnT5qAuTgyfzzcRvLvl6Vrsdt3NkIiz+KheaJ45lH2Nn2k4mdJ9w/o6a\nK6LPp31ISE+gT6s+JdtJg9sMplPjThc9mWcWZPLJjk+YHzmfU3mnuCbgGl4Y8gK3B99e7S6ymvpL\njRCCqsLZQmAToWtEBK1jY9myZAls2sTMVTNZtGsRiY8n0rFxx0u6XqHNxp9iY5nUrBlPBwaCiwsi\nyg14yRLVMjPhuutUupBhw2DQoNL6F3vT9/Lu1nf5Nu5b/Dz8OP7scZ3+wImsSlxF+LFwIlMj2Z66\nnTyL8l469swx2jRsc0nXKrQW8s3ub5i7bS77z+yno39Hnhn8DPf0uQd/L39nDF+jOSdaCC6B70+d\nYsrevfzw6qtM/NvfSLymAyEfh/DogEf5cNyHl3Qtuwh37t3LsvR0lrq40OeRuSwe9zWL1/iTmKhC\nBf70J2jbVpU22LNHrRDc3CCoZw6FrX/jYIOv8OoUzSPDJ/Lsdc/S3r+9k765piI2u4349Hh2pu3k\n/r73O3z9s+jPuKHDDfRo1uOcKwab3cZPiT/xbvi7RKRE4O3mzZSQKTzU7yGGtRumt400VwUtBBeJ\niHDdzp2cTk4m8e23cY2O5o7vp/LLgV9IfjKZln4Xjswry/NJSfwzOp2bN7fm+CdZxNj7YBjCDTcY\n3Hkn3H57+fxxmZmwbRts2QKfr9zL6QOdwKr2qrt1K10xDBsGnTvrtEPVTUxaDP0/U9lmW/q2JLRD\nKKEdQhnZceQ5U1JEH4/m852f813cd+SYc+jWtBsP9X+I+/rcp/MaaZyKFoKLpKQe8fz5PHbnnewY\n3pkBnw/g79f/nddGvHbR1zl1Ch77LJPv/+cCe1Td4AEeu5j2UnvumNmYwMALX+N4znE8aUhinB+b\nNytx2LpViQWo+JCywtC3r1ODkTUOEBEOZR1i06FNhB0JY9OhTaTmpDKy40h+u/e38743z5zH0vil\nfBHzBeHHwnF3cWdC9wk83P9hRncarQ3/mipHC8FFMmnPHn4/coSjL7yAb2wsNy4ex64Tu0h+Mtlh\nHp6yZGerwL3Fi+G33wSbzaBBp3xeOPNvprsuo/O2/6rScxU4nHX4otNX2+2QkKBEobgdPqxe8/VV\nGSr+9reSrLOaq4yIkJSRRK45l34B/Sq9vj11O3tO7WF0p9HlYg3iT8WzMGYhX+/+mjMFZ2jfqD0P\n9nuQGf1mXLJdQqM5F1dcvL4mNZxUvP5AXp4YGzfKXx94QOTTT2V98nphDvLBtg/O+Z68PJH//U/k\ntttEPDxU/emOHUVeeUXk16hCyfvgA5GGDUV27qz0XrvdLq+HvS4eb3jI9pTtlz3uY8dEliwRuftu\nEcMQadJE5MMPRczmy76kxkk8v+55YQ7CHKTbR93k8Z8fl5/2/SRnC8+KiEihpVCWxC2RUV+NEuYg\nLq+5yM3f3iwrE1aK2ar/QzVXBhdRvL7aJ/iLbc4SgscSE8Vj/XpJCwoSe36+XPvZtdLug3ZSYClw\n2H/zZjXHg0hAgMhTT4lERIjY7RU6HjtW6b1mq1lmrJwhzEHu+eEeMVlNVfIddu0SGTlSjSkoSOSn\nnxyMR1Nt2O12iTsZJ++Hvy/j/jtOvN/0FuYg3+z+plLf5IxkeWXDKxIwN0CYg7Sa20pmbZglSWeS\nqmHkmrrAxQhBvd4aOmOx0HbrVu5cs4YvmzTh+1s7M2XZFBZNWOTQWyQzU9Wl9vBQVSOvvx5cLzL/\nXHZhNpOXTWbDwQ3MvmE2s2+YXaVeIyLw88/w/POQmAgjR8I//6lsCJqahclqIvxYOH1a9XFY2GjN\ngTV0btKZfaf38fnOz/nlwC/Yxc7IjiO5r899TOg2gUZejaph5JraiLYRXICSesRPPEH3P8II+XYI\nbi5uxP45tlKGURG44w5YuVK5fA4YoNxEXS5iMhcRhi8aTmRqJF/c+gX39b2vSr9HWSwWWLAA5syB\njAyVxvzNNx2XTtXUPCw2C03ebUKuOZdOjTtxY6cb6R/QnyNZR/huz3cczjqMh6sHY7uMZWrIVG4N\nupUGnhcuYK6pv2ghOA8mu50OW7bQNyKCNZmZfD65E4+sfoSVU1c6jOL98kt48EFVKOill5QI3BEf\nT4iPD6/5+l6w+MNvB5U3SVXlubkQmZnwj3/Ahx+qFcxLL8Fzz5UGrGlqJiLCgYwD/Jr8K+sPrmfj\noY3kmnNp6NmQ0y+cJjotmv/t+R/L9i4jNScVLzcvbup6E1NDpnJz15vx9fCt7q+gqWFoITgPJfWI\nZ81i6NLv6LJsGO0btWfrA1srbdns36+yRQ8eDOvXq3KgzyUl8X5KCv/cuZNn582D3btrpNtOcjK8\n/DJ8/z0EBsJbb8Fdd6nvoKn5WGwWIlMjOZR5iHv63FNy3i52wo+F883ub1ixbwXp+en4uPtwS9At\nTA2Zyrgu43QkugbQQnBORIRe27bhum8fu6KieO/ujry04SV+v/93rm9/fbm+ZjMMGQKHDqlaD4GB\npTmJnjx8mHkzZmC88oq6/a7BbNkCzzwDO3ao2tfvv69sHJrazXdx33HXD3cR2CCQxl6NOXb2GNmm\nbPw8/BjfbTxTQ6YypvMYPN08q3uommriYoSgXt4XrsvIIN5s5rmlSzn7+MO8teUtxnUZV0kEAF59\nVRX6WbhQicAfWVk8nZTExIwM3n/wQYxHH1Wb8EUU36nVNIYNg8hI+O9/4eRJuOEGFeGcdPFFyDQ1\nkGHthjFvzDz6tOrDwayDZJuycTVcCW4ezNqktUxYMoEWc1tw38r7+Hn/z5ht5uoesqYmciG3oprS\nqEL30dFRUdL6++/FNH26zNowS5iDxKTFVOq3fr1yyfzzn0vPjYqJkfa//ip5np4i06eL2GwlrxVY\nCmTK0ini8pqL7D6xu8rGW9Xk5Ym8+aaIr6+Iu7vIs8+KZGRU96g0V0qhpVA2JG+QF399UTYkbxCz\n1SxrDqyRGStniP/b/sIcpPHbjWXGyhmyMmGl5Jpyq3vImqsA2n20Mrtzc+m7YwdvL1jAjMdn0CHs\nNib2mMi3k74t1+/0aejdG/z91XZKsZE102Lh0Mcf03/DBvjhB3B3V/3zTzNhyQTCj4Xz3o3v8dx1\nz9X4pGInTqgVz8KF6nv+9a/w2GPgpUvx1jnMNjO/Jv/KI6se4WTeSexix93FndAOodzW/TZu7nqz\nTmxYR9E2Agfct2cPy1NSOPbpp7zyUABfxHzBvsf20blJaS0cEbjtNli7FrZvV7EDlbDZSoIIDpw5\nwE3f3cSx7GN8M/EbpoRMueJxXk1iY5VX0dq1KiPq66/DPfdcfIyEpvYwL2IeK/etZOuxrSXlTYvp\n1aIXtwTdwi1BtzAocFAlF2pN7UQLQQWOm0x0CA/nLz/8wAs3DqbDrvuYec1M/n3zv8v1++QTePRR\n+OADePrp81/TZrfR85OenM4/zY93/siQtkOuaIzVyaZNShCioiAkBP7v/+DWW3W207pInjmPzUc3\nsz55PZsOb2Jaz2n8kvQLm49sxiY2mno35aauN3FL0C2M6TxGB7DVYrQQVGBWUhLvHj1K0ty5zJrR\ngFUHVpP8ZHK5Qu/x8XDttRAaqiJ1L8bNMjIlkqY+TenSpMsVja8mIALLl6ttov37YehQeOcdddTU\nfbIKs1iXtI7VB1azev9qsgqzcDFcCGkewp0972RK8BS6Nu1a3cPUXAJaCMogIrTauJGhW7fyXls/\nuhx9jr8O/ytvjiz1+CkshIEDlVdNbGxpjNjFRhDXJSwWWLRIRSinpcH48WqFEBJS3SPTXC1iT8Yy\nc/VMdhzfUW4bqYVvC+7udTc3db2Joe2GXladZ83VQwtBGeLz8ugZFcXCb75h6Q3HiDoRzcEnD5Zb\n8j71lIrE/flnuOkmdW59RgYvxMWxIi+PjsUnaxhJScrw26EDtG5dtcFi+fkwf76KqM7NhXvvhdde\ng3btLvxeTd3AbDOz7dg2lu1dxur9qwFIy03DbDPj5ebF8HbDGd1pNKM7jaZvq766pkINQwtBGT5O\nTOSxtDQ2bvqRkS7zmHvjXJ4b8lzJ6z//DLfcosRg3jx1zmq303fHDgqOHmXvyy/jGR9Piind6bni\nk5NVxbKUlPJt2jSVJqIif/tbaTybhwe0bw8dO6o6BZMmVc2YzpxRUckffaRsBo8/DrNmQdOmVXN9\nTe1BRMiz5PH74d/ZcHADGw5tYM+pPQC4u7gT3DyYW4Nu5b6+99WJ7dLajhaCMtyxdi3bzp5l9K7X\n2ND8LAeeOFCypD1xQrmKBgSooKti98l/p6by+IEDqo7xs8+yZ2hXrv3sWv590795sP+Dlz0Wux2W\nLVOVxW6/vfLrH30ETz6pHjdurALZ2rSBO++E+xzkq0tNhbg4Vazm0KHS9sQT6g6+Ih98ABs3KrEo\nbkFB0L37hVcTR4/C7Nnw1VfQsKEyLj/1lM5hVN9Jy0nj+fXPsypxFTnmnJLzPu4+jOk8hqkhUxnZ\ncaQuy1kNaCEoQkRotW4do7aFs0zeYMHEhTzQ7wFATcrjxsEff6gI4uBg9Z4Mi4WuERH0iYnht59/\nxvbLaq77cgiHsw4T/2g8LXxbXPI47HZVzWz2bGWUnjFDJbOrSHq6ShoXGKgqkFU1774L336rxCKn\n9DfLggXwyCMXd409e+CVV2DVKiWgc+bAAw/ospkaOJp1lCV7lrBi3wp2n9yNq4srueZcAPq26svo\njmobaXj74fi46zsIZ6MrlBWRkJsrbNokLz40Sbr/q7tYbJaS195/X0UPf/JJ+fc8uX+/uPz2m+wO\nChLZt0/e2vyWMAdZumfpJX++3S7y448iffuqz+reXVUXKxOUXC3Y7SJnzojs2CHy5ZciR4867hcW\nJnL4sOPXNm8WGTJESorifP21SGGh88asqX2YrWaJTImUf/zxDxnxnxHi8YaHMAcx5hjS8r2Wcsu3\nt8jCnQtLKrZpqhZqQmSxYRhjgXmAK/CFiLxT4fW7gBcBA8gB/iIisQ6uI5c71k/37eMvJ07w4Cd3\n0+OpZ0psAzExMGiQMgyvWFHeX/6bw4fZ/9FHvOHuTvyz99D/s/6M7zaeZVOWXfLnWyzQrZvadpk9\nG6ZPrz3BWiLqjv/kSejUSRW8GTkSRoyAVq1K+/z0k3I5jY+H5s3VyuLPf1ZbWhpNWfIt+fx28Dde\nXP8iSZlJ5TySGns15v6+93ND+xsY1m4YTX20EepKqfatIcMwXIFEYDSQCkQB00QkoUyf64C9IpJd\nJBpzRGSwg2tdthBMW7uW33Nzaf3rFL58Yze9W/YmL0/FC5w9qzJIN2vm4I0FBSDChJ+mEX4s/LK3\nhAAOHFBePUUZKWoNImpy37hRtbAwyM5WW0BZWeW3rux2+O03ZeNYvVoJ38SJyrB8/fU6ME1TGREh\nJi2Gb2K/YeOhjaTmpJJjzilJjhfcPJjh7YZzXZvr6N+6P71a9KrmEdc+aoIQXAfMFpGxRc9fBhCR\nt8/RvzEQJyKV7iMvVwhEhMC1axkWuY0t3p+S8uIJXAwXZs5U5SbXr4dRF6gVk1mQyb7T+7iu7XUX\n/LzTp88hKnUEmw127VLi4MgQXVCghLV5c2Vz+OILZe/o1UsJwl13Ocfuoak7FFoLiUqNYvPRzWw+\nupmtR7eWGKDdXdzp6N+R4e2HM73XdEZ0GFHjc3pVNzVBCCYDY0Tk4aLndwODROSJc/R/HggSkUom\ny7RpniEAAB5GSURBVMsVgv35+XTbvp0nv5vP6bE+fDvpW1asUG6VL72k/OOrgogI+PvfYd8+dffv\nWU/Tv69apYLPWrVSx7Fj4dQp+PRTJSCNGimj8qOPQhftWai5CGx2Gz8f+JlPd3xKdFo06XnpCGou\n8HLzYmyXsQxrO4xBbQbRP6C/NkBX4GKEwNk+Hhc9cxuGMQJ4ADhnMoM5c+aUPA4NDSU0NPSC1/39\n8GEAzuZEM7rja6SkwEMPqW2h11+/2NGdm+hoJQC//KJWAi+/fOXXrM0MH65qHvz4I3z3HXz2Gfj5\nKa+if/1LtY8+UrEa48apVcKYMbpimubcuLq4Mr7beMZ3Gw+oqm2r969m6d6lpOelE3sylpX7Vqq+\nhiu9W/amXaN2BPgFMLHHREZ1HFWvEuiFhYURFhZ2Se9x9opgMGrPv3hraBZgd2Aw7g38AIwVEYel\nUi53RXD3mjVsKCig9brb+eGtozwwuS3btytDcdcyKVNOm80sSUxkZqdOuF/k3sWsWWpF0bgxvPii\nmtT8/C55iHWWwkJlV/jxR7UymDhRnU9LUwLx6acqhqNzZ5X+esYMlQ5bo7lUTuSeYHvqdiJTIolM\njeSPI39gsVsAMDBo4t2E4ObBTO81nYndJ9LS7/w1xusSNWFryA1lLB4FHAe2U9lY3A7YCNwtIhHn\nudYlC4GI0HbNGgbt2E6C/2LuzU9k1iyVQ+f++8v3fSwxkQUpKcR9+CH+33xCU99meLh6nPf669ap\nALSnn1bBVZpLw2yGqVNh504VqObjA3ffrQS1l7YJaq4Ak9XE6v2r+SnxJyJTIzmSfYRCa2HJ6+0b\ntWdQm0EMClStb6u++HrUTeNVtQtB0SDGUeo+ulBE3jIMYyaAiCwwDOMLYCJwtOgtFhEZ6OA6lywE\nyQUFdImM5C+L5yO3BPLtXf9i1ChVT6asfWlPbi59oqL4y8qVzO/XlyHWT2no2ZBf7/5VG6KciIja\nHvr1V/XYz08Zm2026NdPudneead2QdVUDSdyTxCfHs+utF1EpqqVw9HsoyWv+7j70L5Re/oH9OfG\nTjcyodsE/L1r/xK1RghBVXE5QrBw714eOnWKez6/n063zuO1abexapXKKVSMiPCn6GiiT5zgwPz5\nfDn7Rl787SUW376YO3veWcXfQuOIkyeVkXnlSuXFJQJ9+6q6CIahXE+nTYPJk3VuI03VciL3BJEp\nkbwX/h7x6fFkFWaVe71b024MCBxA/1b96RfQj76t+uLvVbvEod4Lwb0//8xas5nAX29ngHsm//2i\nEWfOgLd3aZ+fTp9mwp49zP/Xv7jl0ekEh0/n5qCb+X7K9+VWA1u3wpAh2hfe2eTmqhTgQ4aorKpL\nlqh0GPv2qdiFUaNUvqXx47UbqqbqsdltbDm6hdX7VxOZGklDz4bsTNtJWm5aSZ9OjTthsVno0bwH\nw9sO57Yet9GzRc9qHPX5qddCICJ0+Pln+u2K5lSLNRz/vwh691YRsGW5d/t2diQkEBMVxQ19d5CU\nkUT8o/HljEn/+5/aovjsM3j44ar6RpqLRUTFJrz6qgpUA5Vlddw45QH2pz+p5xqNsziZe5KYEzHs\nTNvJtmPbWJu8tlxEtIvhQkvfljzQ7wH6tepH75a96dS4U43wVqrXQnCooIBOkZE8vGQ+LiN6seDO\n1x1O5CLCyV9+YZv/CSZteKjSltC2bSqdwoABsGFD/Y0PqAkkJsJ//gOLF8ORI6XnGzRQ9oTp02HY\nMO2Kqrk6HMk6woqEFYQdCSP2ZCyZhZnkmHKwiQ0AbzdvgpsH07lxZ/Kt+VzX5v/bO/P4qqprj38X\nSYiBhAAJYQYHJiEoo+KAogXFVhC1loJVa7XWKtVnP32v1drKaz996rN2sFbtQ0WLKApIFeciBFAm\nmQkZBEwCBAxTmAIZSNb7Y59LbsK9EDDJvTd3fT+f87nn7LPPOeue5J7f2WvvvdYljD5vtMvZ0Ij/\npFEtBK9s3Midu3cz8aUf0aL3K7z4myvYscPFzQmEqjLvq3mMPHfkcZdQXp6LRdSqlZsw1pRnDEca\nubkwaxZMm+Yyya1aBSUl1eG6J050/QzmyjMak6MVR8nclXl82bBrA6t2rmLf0X3H6whCUnwS6e3S\n+cEFPyA9LZ30tHTaJLRpEJuiWgjufO895lZWcu6nE5GVxVRVNOeLL+p+vf37nZ/6669dq6B37zMw\n2mg0Skpch/Prr8OHH8KxY064L7nEJei55prIi/NkNB1y9+Ty4eYPWbJtCZm7Mtl+cDtllWXHYyoB\ndE7qTHpaOh0TOxIXE3c881vHpCBvr3UkqoXgnLlzSd+wlrL2S5n34w+YPNnNAK4rO3e6CVBPPOES\n2RuRw9698NZbbn5Hufc7i411+ZYnTIC77rLWnRF6VJXtB7cfbzn4f/r3P8RIDMlnJTOk0xDG9hpL\nn9Q+9EntQ6ekTnUa3h61QrC1tJTuy5Zx58xnOdrrMmb8x0OsXu3GpqsqeysqSK1D76KquRYimYoK\n168zZYqLmlpc7MqbNXOtveuvd0vfvvZ3NsKH0mOlfPrVpywqWMTar9eyuXgzRYeLqNTKGpPiEpsn\n0ie1D4lxicTGxDKgwwCGdxvOVWdfRVJ80vF6USsE0zIzuX3PHsZPvZvdFXP4cnF/tm51P/bZu3Zx\n55o1ZGz6kna3jaNrctcGttwIFwoKnPto9273uWaNKz/nHBg1yvUHTZxYnarUMMIJVWXn4Z3k7Mmp\nsSzdvvR4Bjgfcc3iGNBhAFd2v5I/XvvH6BSCu+bOZY4q/RfdxcoXdnH7bcLzz0NpZSXnZ2SQWFDA\nH7Pf5+Y2H7P23rWWYDtKKSyE9993ovDxx64FIeIS8Nxwg8sb3b17qK00jFOz89BO5ufNZ8m2Jawv\nWk/+gXziY+JdX8RvyqJTCHq8+y69Nq6nNDGbBQ9M5/33XRayxzdt4pHCQj7421/57oAPGdVzNHPG\nz0FEKCiArl1t6GG0snkz/OlPThi2Vkcd4OyzXfyjq692Hc/WWjAiicqqSmJjYqNPCLaXltJ12TJu\nn/V3tsdfz7IX7mDvXiCuko7z5zN8xQo6HJ7BrNaFZN2fRYfEDmzd6twCt9wCzzzT8N/FCG+OHIGX\nX3Yzmg8edLOaq6rcHJJLLnHzSgYMcCORTBiMcCcc8hE0Ogs3bQLgSMk6suf9mVGj3I/1rYLt7I+L\n44at67m7UyavXfcaHRI7cPCg6zA8csTl2DWMFi1cBNRJk9z2gQOweDEsWOCWyZPdQAKAtDS46CIX\nRfV737MZzkZk0uQcIQvz8kg+fJjidpXszO3CmDGuvFdlJZM2rGd63EeM7T2Wif0ncuyY+wFnZbnJ\nSX37htZ2IzxJTnYvC08/7UJm79kDDz3k/l+Ki13Yi9tucy8cV18NTz3lJrhVVobacsOoG03ONdTr\nnX9xdm4Wh47uZNnkv7Fzp0ub6GPjro20TWhLh8SOTJoEzz3ncuvec0JyTMOoG6tWOVfSwoXu4Z+T\n48pbt3aRU0eMgG7dYMwYazEYjU/UDR/dWVpKp2XLuHXO86z46lba7BrL8uWB6x49CiNHuvHkTz3V\nAAYbUcuOHW7egs+VtGVL9b7WraFPHycOEybABReEykojWog6IZixbh0Tiou5+bV7mf3acn7/aDKP\nPhq8fmmpe0OzkUJGQ7Jhg8vVvGQJfPWV64/y0aULDBvmBisMGwaDBrk+CsOoL6KuszgjP5+k2FiK\nkxOhLPl4/0AwbMSH0Rj07+/cjz727YOZM13ehX37XLrTWbPcvpgYN48hPt61Vm+6ybVcY0Ifzdho\nwjSpFkGfOW/TZfOXbN98hCMf/o6CAig5VkGiRRszwpyiIlixwkW5ffvt6n4GcJPc2rZ1guCLqtq1\nq4XFMOpGVLmGisrK6LB0Kd//1z+Y88H93DXqcp5+ppIun3zC95f/mzt+PIGhnYc2osWGceaUlbnJ\nbe+841oM+fkugJ7vJ9CmjetfGDDAiUTPnm5kU1LSSU9rRCFR5RpamJ0NQMXRLMq2XMyYZ2BuXh57\nExIo/2oR0xb04LfTh/Lii9C5c4iNNYxTEB/v3EI33VRd5kvjuW4drF3rPqdMqdnnEB8PnTq5SKvj\nx7tJb2lpjW+/EVk0HSHIyyMxPp4iSaVlQhwjRsDNH2+kS1kZq9pk02bGrWSusfDDRuSSmOj6DS69\ntLqsshLmz3ethxUrXKiMggKXVMmX1rNjR7jwQrcMGOCEYsgQ65Q2qmkyQjC/qpLBOZmszRvDNddA\nMaV8lJTE7Qvf5+Cgibz9TDJ/+IOlmjSaFjExLnLqqFE1y3NynBhkZ1e3IObNcwl7fDRvDikpLvpq\n//4us9vgweZeikaaRB/B7rIy0pYu5Za5U5g57RFefrIfe3ov4b/Ky/ney7dTctbbLJg+hG3bnD/V\nMKKR8nInDC+84MQhP98l8Skvr1mvSxc31+H8892nKgwfDunpNtQ6EgmLPgIRGQ38BYgBXlTVJ2vt\n7wNMBQYCv1bVp0/3GouysgCoLNkMe/ryne/AtOV7uTY7k23927Ly10O4914TASO6ad7cuYeef75m\neUmJmxVdVuaEIifHfU6d6vol/ElMdDP1e/WCu+92ndTnnmtupkinQVsEIhID5AIjgULgC2CCqmb7\n1WkHdAfGAcXBhOBkLYJJs2cztUUL+vzzRZrnz2bpUld+oGQfMz7ZyaP39GP5cvcPaxhG3VB1rYY3\n34SVK51AFBa6iKxVVTXrduwI553nwnbv2OHiMA0aBJdf7sqtJRE6Qj58VEQuAR5T1dHe9q8AVPWJ\nAHUfAw6fiRD0m/kWbQu38tnUdvxh/B088kjN/eXlFuPFMOqTwkL3wN+yxS2bN7vP3FzYtevE+q1a\nwbXXQo8eThh8S+fOJhINTTi4hjoD2/y2twMX1+cF9paXk9UujZtWvAt5/xtwNrGJgGHUL507u2Vo\ngKk5e/bAZ5/BF19AZqYLq3H4sEsNOmfOiR3Wqq6DOiXF9U+ce65rTVx7rZs4Z7/fhqehhaBemxuT\nJ08+vj5ixAhGjBjBog0bAKjcX0j3tp1IT6/PKxqGcbqkpsK4cW6pzbFjsG1bdUti2TL49FMXamPL\nFti0yQXqe+klV1/EuZ26dXNpQ5OTYf9+6N3b9XcMHer2GdVkZGSQkZFxWsc0tGtoGDDZzzX0MFBV\nu8PY23dGrqEHZr7Fi0mt6PCnmXyn90v87W/1+x0Mw2g8Dh50LQlfutCCArdeUFC9+LcofKSkuLkR\nvpaKb2nd2s3C7t0bYpvMYPnTIxxcQyuBniJyNrADGA9MCFL3jCKnLKiqZOCXWSwpuJHLHijn4tff\n4ocVO7jr1odoHmsxhgwjkmjVCr71reD7jx1z7qZVq9znpk1OKEScS2rdOhe3KdD7bUwMJCS4VkW/\nfi52k79odOoUvaOfGnwegYhcR/Xw0ZdU9XER+QmAqv5DRDrgRhO1AqqAQ0BfVT1c6zwntAiKy8pI\n+fxzbvj4Vf495Vl+88YqfhUPN06/h7x1a5n1RgvOO69Bv55hGGFGRYUTg8JCF6dp0SLYvt11YhcX\nu+Gyvnq1SUhws7UTEpwopaRA+/Zuot3ll7uhs+3bu7AdkdLCCPmoofokkBC8u3IlNxw+zLenPkVC\nyXvkTHibFru+5sDqjex/9zkKCizUtGEYJ6Lq3FC+0U+FhW5ZssS1Kg4edMmrAokFuBZIaqqLVHDk\niGtlpKQ4oejSxbmpBg2Cdu3cEsqIBuHgGmpQ/r35S+LbprJ+Sx/uvuUAs1NSmJDxKm+88zi/+5mJ\ngGEYgRFxD+/k5FPnKt+zB77+Gg4dcp++pajItTg2b3buqby84Odo1coJQlWVEw5fayMtzXWGDx3q\n4kClpbl6jf3simghWKhVXPhlFiu23cTW5M+JL4+jqHQXCYf7cd99obbOMIymQGpq3YJVVlU5F9TG\nja4vo6ICdu+uuaxcCQcOuPVNm6qP9U9cBG4Gd2qqO8/Ro267VSsXHSE11WW0u+ACJya+JSnpzHNU\nRKwQ7C8vZ2NaR65ft4BhXe9jZfxMrvoil3+vvJ97f+RujGEYRmPRrJkbylrX4axVVW4obW6uE41g\nwlFc7MSjoKD62NmzTzxfXJxbKiudK6plSzfTuy5ErBB8tm4dVTExlGw7xA3XN+fBG8fxl2nT+PLI\nLTz0UKitMwzDODnNmrm5Ed271/2Y0tLqvNelpS5ooP/y2WfORVVS4uZmHDhQt/NGbGfxpOmvMKVd\nJ1IfXcEnUx+lXz9Xrmop/AzDMHzUpbM4YqN8LFbhgs3ZSMXNNTp7TAQMwzBOj4gUgoNlZWR27EL7\nrVncdEUfe/gbhmF8AyJSCBavWU1VTAxH8ssYO8ZUwDAM45sQkULwQW4mcRUVbPlqEO/l/pWC/JMM\n4DUMwzBOSkQKwecSS/qWXEgYxgs9z2fcz57CC0JqGIZhnCYRJwSHy8rI7NyN9vk57B0cy+WrP2dr\nzs/p0SPUlhmGYUQmEScEGSuXUxkTw9G8SkquPEJs9kYevK0HCQmhtswwDCMyiTgheC9nAzGVleQX\n9af9sSJWrB1r4SQMwzC+AREnBMubNSd9cw5be13KoNXzueWyCXWKA2IYhmEEJqKEoKS0lMyu55CW\nv4X/7LaFkuze/OIhSz5jGIbxTYioWEPzli3mWGwcWhjDE6/ebBPJDMMw6oGIahHMzXb9A51bjzAR\nMAzDqCciSghWxbXk/LxN/GDctaE2xTAMo8kQUUKQ1e0cOmzJ48rhEeXRMgzDCGsiSgjKmzcnfncz\n4qx/2DAMo96IKCFoVlnJupY9+WhBUahNMQzDaDJElI+lT/4WUpsVcsXF7UNtimEYRpOhwVsEIjJa\nRHJEZJOI/DJInWe8/etEZGCwc6XlFdArthMtWjScvYZhGNFGgwqBiMQAzwKjgb7ABBE5v1adbwM9\nVLUncA/wfLDzVe07xu9+flcDWvzNycjICLUJdSIS7IwEG8HsrG/MzsanoVsEFwGbVTVfVSuAGcAN\nteqMBV4FUNXlQGsRCej7iS+PpWPH8PZmRco/RyTYGQk2gtlZ35idjU9DC0FnYJvf9nav7FR1ugQ6\n2c8nfq9ejTMMwzAaXgi0jvVqzxMOeNzoqy/8ZtYYhmEYJyCqdX1Wn8HJRYYBk1V1tLf9MFClqk/6\n1XkByFDVGd52DnClqhbVOlfDGWoYhtGEUdWTBuVpaIf7SqCniJwN7ADGAxNq1XkXmATM8IRjf20R\ngFN/EcMwDOPMaFAhUNVjIjIJ+BiIAV5S1WwR+Ym3/x+q+oGIfFtENgMlwJ0NaZNhGIZRkwZ1DRmG\nYRjhT9iHmKjLhLRwQEReFpEiEdkQaluCISJdRWSBiGwUkUwReSDUNgVCRM4SkeUislZEskTk8VDb\ndDJEJEZE1ojI3FDbEgwRyReR9Z6dK0JtTyBEpLWIzBKRbO/vPizUNtVGRHp799C3HAjj39HD3m99\ng4i8LiLxQeuGc4vAm5CWC4wECoEvgAmqmh1SwwIgIsOBw8A/VbV/qO0JhIh0ADqo6loRSQRWAePC\n9H62UNUjIhILfAb8QlU/C7VdgRCRnwODgSRVHRtqewIhInnAYFXdF2pbgiEirwILVfVl7+/eUlUP\nhNquYIhIM9xz6SJV3Xaq+o2J1y87HzhfVctE5E3gA1V9NVD9cG8R1GVCWligqouB4lDbcTJU9WtV\nXeutHwaygU6htSowqnrEW22O618KyweYiHQBvg28yInDoMONsLVPRJKB4ar6Mrj+xXAWAY+RwJZw\nEwGPg0AF0MIT1RY40QpIuAtBXSakGWeA98YwEFgeWksCIyLNRGQtUAQsUNWsUNsUhD8D/wlUhdqQ\nU6DAPBFZKSI/DrUxATgH2C0iU0VktYhMEZFwjyr2feD1UBsRCK/l9zSwFTdic7+qzgtWP9yFIHz9\nVhGM5xaaBTzotQzCDlWtUtUBuFnmV4jIiBCbdAIicj2wS1XXEMZv2x6XqepA4Drgfs+VGU7EAoOA\n51R1EG4E4a9Ca1JwRKQ5MAaYGWpbAiEi5wH/AZyNa/UnisitweqHuxAUAl39trviWgXGGSIiccBs\n4DVV/Veo7TkVnnvgfWBIqG0JwKXAWM///gZwtYj8M8Q2BURVd3qfu4E5OLdrOLEd2K6qX3jbs3DC\nEK5cB6zy7mc4MgRYoqp7VfUY8Dbu/zUg4S4ExyekeQo8HjcBzTgDRESAl4AsVf1LqO0Jhoikikhr\nbz0BGAWsCa1VJ6Kqj6hqV1U9B+cmmK+qt4fartqISAsRSfLWWwLXAGE1uk1Vvwa2iUgvr2gksDGE\nJp2KCTjxD1dygGEikuD97kcCQd2rYR3KM9iEtBCbFRAReQO4EkgRkW3Ab1V1aojNqs1lwA+A9SLi\ne7A+rKofhdCmQHQEXvVGZTQDpqnqpyG2qS6EqyuzPTDHPQ+IBaar6iehNSkgPwOmey99WwjTyaWe\nmI4EwrGvBQBVXee1Tlfi+q9WA/8XrH5YDx81DMMwGp5wdw0ZhmEYDYwJgWEYRpRjQmAYhhHlmBAY\nhmFEOSYEhmEYUY4JgWEYRpRjQmDUGyKS4heed6eIbPfWD4nIs6d5rl97obLXeedo0JmwIpIhIoOD\nlOd4IbGXikjfU5wnWUR+6rfdSUROKwyBiKSJyPve+oj6Cm8d7DsGqJcvIm1PUedT3yQ1I/IJ6wll\nRmShqntxgewQkceAQ6r6p9M9j4hcAnwHGKiqFd5DKWgs9XpCCTwhTIGJqrpaRH4IPImLMROMNsB9\nwPMAqroDuOU0bZkEvHKax9SFuk4aqku9GbgJVaf99zXCD2sRGA2JQM23WhGZLCLTRGSJiHwpIncH\nOK4DsMcLPY6q7vPFyvHeVp/0kqws94JrISLtvKQmK7zlUq+8pbikQcu9qJZjvfIEEZkhLgHK20CC\nz96TsAzwXS9RROaJyCrPFl8egieA87xWzJMi0l1EMr1jzvKia673bBkR5DrfxcVXqnkzRS7y7ttq\nEfncF45BRH4oIv8SkU9EJE9EJonIL7x6S0Wkjd9pbvNs2yAiQ73jU7xjM0Vkiv99EJE54iKWZkrN\nqKXv4sJqGE0AEwIjFKQDVwGXAL8VkY619n8CdBWRXBH5u4hc4bdPcSF1LwCeBXwxk/4K/FlVL8I9\nSF/0yn8NfKqqFwNXA0+JC2/8U+CwqvYFHsMllgn2Jux7MI4GMr31o8CNqjrYO+/TXvkvcTHqB6rq\nL71jfee9H6j0bJ+AC6PRvMaFXPKgSr98DP5k42L2D/Js/h+/ff2AG4GhwB+Ag169pYAv/pEACV4U\n0vuAl73yx4BFqpqOC0jXze+8P1LVId55H/C5jFS1CEj1wi0YEY65hozGRoF3VLUMKBORBbhImO8c\nr6Ba4vmyh+ME400R+ZVfdiVfsK8ZuHwA4GK/nO/F0wFIkuoAa2NE5BdeeTzuQTccJx6o6gYRWR/E\nXqE6/k0bwJd9rhnwuLhwzlVAJxFJ4+StisuAZ7xr5opIAdCbmgHgugM7gxzfGviniPTA3Uf/3+8C\nVS0BSkRkP+DrV9gAXOCtK969U9XFItJKvIQwOBFBVT8QEf8ESw+KyDhvvQvQk+ocFkW4iMA5J/nO\nRgRgQmCEAyckdVHVKmAhsFBcHug7gEBp9nxv2wJcrKrl/js9YbhJVTcFKK9LDgH/PoKncEloHgRu\nBVKBQapaKS4U9Vl1OF/tawZqhQSz6/e41s2NItIdyPDbV+a3XuW3XcXJf+f+96+mEc519S1gmKqW\neqLt31fj39oxIhhzDRmNjQA3iEi8iKQAI3C5qKsriPQSkZ5+RQOBfL/t8X6fS7z1T4DjScRF5EJv\n9eNa5QO91UXARK8sneq35mA2A/wGGCci3YBWuKQ0lSJyFe5NHuAQEGw0zWKcgOD597vhcnL7U4Dr\nIwlEK1y2Kah7ZE6ptT7eu/7lOBfbQWrei+twLR/f9Yo9EegD1E4m3x7LD9IkMCEwGhL1+/RfXw8s\nwPmvf+fFovcnEXhFRDaKyDqgDzDZb38br/xnwENe2QPAEHHDTTcCP/HKfw/EeR20mcB/e+XP47I2\nZXllK0/1PVS1FOdOehiY7l1vPXAbzn/vGzn1udcZ+2St7/4c0Mw7ZgZwh69D/PiF3L2Ileo0jf7H\n/y/OHbUaF5Y90P0lwLp/vVLv+OeAu7zy/8ZlgcvEuYgKvPKPPFuygMdxfy/geF/GXs8dZUQ4Foba\naFTEDSs9rKpPn7Jy4OPzgMFeTtYmiYhMBrJV9c1Q2xIMEbkHaKmqfz5lZSPssRaBEQq+ydtHNLy5\n/B3XJxLOjAemhNoIo36wFoFhGEaUYy0CwzCMKMeEwDAMI8oxITAMw4hyTAgMwzCiHBMCwzCMKMeE\nwDAMI8r5f6PA5bMYOwkuAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 59 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import CSS for nbviewer\n", "\n", "If you have a local iPython stylesheet installed, this will add it to the iPython Notebook:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython import utils\n", "from IPython.core.display import HTML\n", "import os\n", "def css_styling():\n", " \"\"\"Load default custom.css file from ipython profile\"\"\"\n", " base = utils.path.get_ipython_dir()\n", " styles = \"\" % (open(os.path.join(base,'profile_default/static/custom/custom.css'),'r').read())\n", " return HTML(styles)\n", "css_styling()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }