{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Modeling and Simulation in Python\n", "\n", "Chapter 14\n", "\n", "Copyright 2017 Allen Downey\n", "\n", "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Configure Jupyter so figures appear in the notebook\n", "%matplotlib inline\n", "\n", "# Configure Jupyter to display the assigned value after an assignment\n", "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n", "\n", "# import functions from the modsim.py module\n", "from modsim import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code from previous chapters" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def make_system(beta, gamma):\n", " \"\"\"Make a system object for the SIR model.\n", " \n", " beta: contact rate in days\n", " gamma: recovery rate in days\n", " \n", " returns: System object\n", " \"\"\"\n", " init = State(S=89, I=1, R=0)\n", " init /= np.sum(init)\n", "\n", " t0 = 0\n", " t_end = 7 * 14\n", "\n", " return System(init=init, t0=t0, t_end=t_end,\n", " beta=beta, gamma=gamma)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def update_func(state, t, system):\n", " \"\"\"Update the SIR model.\n", " \n", " state: State (s, i, r)\n", " t: time\n", " system: System object\n", " \n", " returns: State (sir)\n", " \"\"\"\n", " s, i, r = state\n", "\n", " infected = system.beta * i * s \n", " recovered = system.gamma * i\n", " \n", " s -= infected\n", " i += infected - recovered\n", " r += recovered\n", " \n", " return State(S=s, I=i, R=r)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def run_simulation(system, update_func):\n", " \"\"\"Runs a simulation of the system.\n", " \n", " system: System object\n", " update_func: function that updates state\n", " \n", " returns: TimeFrame\n", " \"\"\"\n", " unpack(system)\n", " \n", " frame = TimeFrame(columns=init.index)\n", " frame.row[t0] = init\n", " \n", " for t in linrange(t0, t_end):\n", " frame.row[t+1] = update_func(frame.row[t], t, system)\n", " \n", " return frame" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def calc_total_infected(results):\n", " \"\"\"Fraction of population infected during the simulation.\n", " \n", " results: DataFrame with columns S, I, R\n", " \n", " returns: fraction of population\n", " \"\"\"\n", " return get_first_value(results.S) - get_last_value(results.S)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def sweep_beta(beta_array, gamma):\n", " \"\"\"Sweep a range of values for beta.\n", " \n", " beta_array: array of beta values\n", " gamma: recovery rate\n", " \n", " returns: SweepSeries that maps from beta to total infected\n", " \"\"\"\n", " sweep = SweepSeries()\n", " for beta in beta_array:\n", " system = make_system(beta, gamma)\n", " results = run_simulation(system, update_func)\n", " sweep[system.beta] = calc_total_infected(results)\n", " return sweep" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## SweepFrame\n", "\n", "The following sweeps two parameters and stores the results in a `SweepFrame`" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def sweep_parameters(beta_array, gamma_array):\n", " \"\"\"Sweep a range of values for beta and gamma.\n", " \n", " beta_array: array of infection rates\n", " gamma_array: array of recovery rates\n", " \n", " returns: SweepFrame with one row for each beta\n", " and one column for each gamma\n", " \"\"\"\n", " frame = SweepFrame(columns=gamma_array)\n", " for gamma in gamma_array:\n", " frame[gamma] = sweep_beta(beta_array, gamma)\n", " return frame" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the results look like." ] }, { "cell_type": "code", "execution_count": 8, "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", "
0.10.30.50.7
0.100.0846930.0054440.0027360.001827
0.180.7086230.0159140.0061180.003783
0.260.9007800.0553800.0116390.006427
0.340.9568880.2678640.0221150.010191
0.420.9770450.5245630.0478160.015946
\n", "
" ], "text/plain": [ " 0.1 0.3 0.5 0.7\n", "0.10 0.084693 0.005444 0.002736 0.001827\n", "0.18 0.708623 0.015914 0.006118 0.003783\n", "0.26 0.900780 0.055380 0.011639 0.006427\n", "0.34 0.956888 0.267864 0.022115 0.010191\n", "0.42 0.977045 0.524563 0.047816 0.015946" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beta_array = linspace(0.1, 0.9, 11)\n", "gamma_array = linspace(0.1, 0.7, 4)\n", "frame = sweep_parameters(beta_array, gamma_array)\n", "frame.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's how we can plot the results." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXl8VFWe9/+uNfsKWSAJW5BDQMBgIAqIC4I0MP2zbWfw6XT7aD/YreAyzY9xAFseHBRbZRy65ddo2y40zNPTw2M3Lm0riI0LKG5hDxcIkI0Qsm9VSW3398ctKlXZKCC1JDnv1wtT99xzcr8pq+7nnnO+i05VVSQSiUQiCTf0oTZAIpFIJJLukAIlkUgkkrBECpREIpFIwhIpUBKJRCIJS6RASSQSiSQskQIlkUgkkrBECpREIpFIwhIpUBKJRCIJS6RASSQSiSQskQIlkUgkkrDEGGoDAokQIgKYBlQCzhCbI5FIJIMZAzAM+FpRlHZ/BgxogUITp89CbYREIpFIPNwEfO5Px4EuUJUA//mf/0l6enqobZFIJJJBy/nz5ykoKAD3fdkfBrpAOQHS09PJzMwMtS0SiUQiuYztFukkIZFIJJKwJKgzKCHEXcAyIA+IVxRFd4n+44DfAfnAeeApRVHeDLSdEolEIgk9wZ5BRQMfA7+6VEchhAn4K1CF5uzwNPA7IcTNAbVQIpFIJGFBUGdQiqJsAxBC3OJH9+8BGcB1iqK0Akfc4vQI8EnAjJRIJBJJWBDOThLTgf1ucbrIbrSZVJ/Q1NTEhQsXsNvtffUrJQMIk8lEamoq8fHxoTZFIhmUhLNApQIXOrVVu9uvmqamJqqqqsjIyCAqKgqdrtftMMkgQ1VVrFYrFRUVAFKkAoiqqu6foLpfqO5jUDvavfp2DO76skufLtfrMtT3hM/v8s/2K+VyhqtdLQ4qESYD0ZGmoF4znAUqoIpx4cIFMjIyiI6ODuRlJP0UnU5HdHQ0GRkZnDt3LigCpaoqDqcLu8OFza79tDud2B0uXC5V+6e6f7rQXqsqajdtF/urKh3jvNpdKp36XTzv1a6qqC4Vp+oWCa+7qcvl9VrtsL/j5q+piupu937t1p2Oc5J+gU6nY9qENKZPCF5MaTgLVBUwtlNbCl1nVVeE3W4nKiqqL36VZAATFRXV7RKwy6Vid4uJ3eHEbnf5HjtcXm1OL8Hprn/HGIkkXFFVlTMVjVKg3HwFLBdCRCuKYnG33Qbs76sLyGU9iTcXZxNOlwunS8XpPra02fnjh8d9BMXhlGLSl1z8Lurc/9G52zzHXt9VXZcXoOu04NLTV7vzd17naffDtgDdLrq7D4XjnSnCbAiqOEHw46CSgRG4Z0ZCiOvcp44B1wF/AOYoilIBfACcA14TQjyNFgv1P4C5wbRZMnBwqSouZ4cAudwidPGf6up+ucnpVKltaguKjSaDHqNRj8mox2wyeI6Neh06vQ69TodOp8OgB73XsV6v8xzrddq5i+0G90+du72jX6d2na6bn6DXaYqh99yotTGaeGhteq876sV+vmO0Bu9xuo7h8mFR0i3BnkF9H3jD67jQ/XM0WoyUAEwAiqLYhBALgVeAb9ECdX+mKIp0MZd0y8W9E6dbhPwVoCtBp9NpImLsEBSTweAWlo7jDrHpON/xz/fYaNCj18sbtURykWDHQb0JvNnD6bN0mtkqiqIAtwTSJkn/oScBev2137P9v/9IS3Mz0/Jv4PF/fZKk5ORuf0d7ezsv/GodRceOUlZWwn0//Rk/XfKgdlIHBr0Og16HXq/3vI6ONHLP3DE+wmI06ORTv0QSYMJ5D0oyiFFVFZvdRbvdgcPZ8wzor++9zZY3f88vn1zHsOEZ/GbjC6xds4pfb3ql6y/VgU6nEhsbw/+8/6f893/9HyJMBhLjIjAYOpbLOmMw6BmaKB1qJJJgI5PF9hMaGxtZtmwZkydPZt68eXzyyScIIdi/X/MZqamp4dFHH2XmzJnk5uZSUFBAUVGRZ3x5eTlCCHbt2sWdd97JlClTePTRR2lvb+fNN99kxowZzJo1ix07dnjG7N+/HyEEn3/+OXfccQe5ubmsXbsWh8PBhg0bmDZtGnPmzGHv3r2eMcXFxSxZsoT8/Hzy8vJ44IEHKCsr8+tv1ETJSXOrjZrGNhpb2mlrd+JwuHpcnntr+3+x+J4fM/uW27hGCJ5Y8xTfffsV5WVniIkyER9jJjEugiGJkaQkRpGZnsz6Z9bx4x8tJiEhHqN7r8eg18sZkUTSDS6HDUdTLY6mmqCHBcgZVD9h/fr1lJaWsnXrVgCeffZZn/NtbW3k5eWxbNkyzGYzW7Zs4aGHHuLDDz8kIiLC02/z5s2sWbMGnU7H0qVL+fnPf87IkSPZtm0bH330EWvWrGH27Nkkey2RvfHGG2zcuJHq6mqWLVvG2bNnycvLY/v27Wzbto2VK1fy8ccfYzKZsFgszJ8/n1WrVuF0OnnppZdYvnw527dv7/bvUlWVhQsXcu7cuR7/9hX/+kvm3bEAAL1B51l6czocFJ86wapVqxiSEIleryM16RoyMjIoPnGMqVMmXvH7LZEMFlSnHaelBZe1Gae1Cae1GZel2f2zCZe9o/htZNZ44ibdEjTbpEB5Uahc4Ktj54MSj2Iy6pk+IZ1ccenEGC0tLbz33nu8/vrrTJkyBYDHHnuM++67z9MnMzOTe++913O8Zs0a3n33XQ4dOsS0adM87UuXLmXq1KkAzJs3j507d/Lqq69iMplYsmQJmzdv5vDhw9x8c0dO3hUrVpCTk0NOTg75+fnU1NTw8MMPA/Dggw+ydetWSktLyc7OZtKkSUyaNMkz9qmnnuLGG2/k3LlzDB8+3NPucLpotzlpszn41Qu/weFwdPm79XodESYD6empxMdFejzTLlJV1YDL5SI9LQWDoWMxIDk5mbq6uku+rxLJYEB1OXFamj0C5LK0aD+tzVq7zer373I2B/d7JQXKiwMnqoMWLGl3uDhwotovgSorK8PhcDBxYseMwFsEQAs83rRpEzt37qS6uhqn04nVaqWy0rd45dixHbHPQ4YMYeTIkZhMWvoSvV5PYmIi9fX1vY5JSEjwOQaoq6sjOzublpYWXnzxRfbu3Ut1dbVnSaCyspK09HS3KGnLdhdJH9YhXDq9jkiTgQiz5uEml90kkt5RXU5cba04LU24rC04Le5ZkNU9C2prvfQv6QWd3oA+KhZDTBIx11zfR1b7hxQoL64blxLUGdR141L86uvPuu9rr73Gjh07eOKJJxg1ahQREREsXry4y8zEaOz4X67T6Tzi5N3mcvn+/d59Oo+5KCAXxzz33HMcOHCA1atXk5GRgcul8g//sIj6Jgu1Dd3HEv3kRz+k6nylz+/z5qmnnuL73/9+l/akpCT0ej21tbVkZ2d72uvq6nyWKCWS/oyqqqjtFpyWRpxeS29OawsuaxNOayvdZBb0H50OQ2Qs+uh4DFFxGKLj0EfFYYiORx8Vhz4iOmQPilKgvMgVqX7NaILNiBEjMBqNHDt2jOnTpwNw5MgRnz6FhYUsWLCAefPmAVBVVUVDQ0PQbS0sLGTx4sXk3zCTNpuT7wq/A7RgVx90YDYZiDQb+P3vX8Xl7LkK9MVZWmfMZjPjx49n//79nvelrKyMiooKz1KoRNKfUFUXzpZGHM21OJtqcDTV4GiqvaxluK7oMETFoI+KxxDVVYj0kTHodOHpLycFqh8QGxvLokWLeOaZZ1i3bh0AGzduBDpmHFlZWezZs4dFixYB8MILL/g4RwQaVVVptzkYNjyDd979K+MmXEdzUxObN2306Wcy6Yk0G4kwGTxBqVmZmVd83YKCAtavX09OTg6ZmZmsX7+e/Px8xo0bB8ChQ4d4/PHH2bJlC2lpaQCcOnUKu91Oa2sr1dXVFBUVkZCQ4LNHJpEEGtVhx9Fc6xEhR1MtzuZaVFfPD2s9oY+MwRDlnvl4Zj+x2s/IGHR6QwD+gsAjBaqfsHr1alatWkVBQQHDhg1jxYoVPPLII5jNZkBzfigpKaGgoIDk5GSWL19OaWlpQG1SVdWzHNrYaqOxxcZDy37B+qf/N0vuK2DY8OH88/J/5RePPkhUhIEhiZEY9H37pHb33XdTW1vL2rVraW5uZsaMGR4RB7BarZw5c8Yn4evPfvYzTxmNo0eP8qc//Ykf/OAH/OpXlyz0LJFcNqqq4mq3+MyIHE21OC1N+Ls0pzOYMMQmYYiOwxAVjz46VvsZFYchKhadYWDeynUDOd29EGIUcGb37t1kdnpKLyoqIicnJyR29QUHDhxg8eLF7Nu3r8clsEBwsSREm81Ju83pU3bBG4NBp82UzAaMhvBcPvCX/v5ZkQQP1eXE2droESKne4bksvmfy1EfGYMxbgjG+KHuf0PQR8f3e4eh8vJy5syZAzBaUZSz/owZmLI7ADl48CBVVVXk5ORQWVnJ008/zaxZs4ImTt5u4V32k9zo9ToizQYizEaZCkgy4HHZ290C5P7XXIuzuc7/JTqdDmNMEob4IRjj3YIUNwR9hMxachEpUP0Ep9PJpk2bKCkpIS4ujhkzZrB69eqAXtOlqrS1O7q4hXsj3cIlgwGntQVHUw3Opot7RjU4rc1+j9cZTR4BMsYPxRCfjDE2ecAuzfUV8t3pJ0ydOpV33nknaNdzuVQaWtq7FSadTqsNE2E2YpaiJBmAqA47ttoK7DXl2KrLcFoa/R5riIrF4Fmi037qo+Lk9+QKkAIl6YKqqjRZbL7ipIMI90wpwmSQXzbJgEJVVZzNtdiqy7BVl+GoP4+qXiIeUqfDGJuMMX6Ie5nOvURnjgyO0YMAKVCSLrRa7dhsHevoMVEmoiKMslaRZEDhardgc8+Q7DXlvcYa6fQGjImpPrMiQ2xSv3Xf7i9IgZL4YG13YGnryD4RHWkkJsrUywiJpH+gupzY689jry7DVlOOo6mm1/7GuCGYUjIxD83ClJQu94tCgHzHJR5sdifNFpvn2GwySHGS9FtUVcVlacJWXYqtphx77TlUp73H/npzJKYhmZhTsjAPzUQfGRNEayXdIQVKAoDT6aKx1eaJGzQYdMTHmOVek6Rf4bK3Y6+t0ASpuqx3TzudDlNSOuahmZhSsjDGp8jPe5ghBUri8di7WBRQp9eRGBsh95wkYY+qunA01mCv0Zwb7A1V0EvyAUNUHOaUEZhSsjANGY7eaA6itZLLRQrUIEdVVZpabR3BtzpIiDH71FeSSMIJZ1trhyDVlPsU1OuMzmDCNGS4e9kuC0NMQo99JeGHFKhBTqvVjs3e4bEXF23GbOpfnkmvvPIKW7dupbm5mZkzZ7Ju3boeM2ycPn2aNWvWcPLkSdra2hgxYgQPPPBAt+U8JOGB6nJir6vUBKm6DEdL70XzjPFDMadkYRqahSkpTXra9WOkQA1iuvPYi4roXx+Jt956i5dffpnnn3/ek818+fLlbNmypdv+JpOJH/7wh0yYMIHo6Gg+++wzVq1aRUZGBtdfH9xibJLecVqaaSs9Rlt5Ua+57PQRUZqn3VDN406mCho4yHWcfkJjYyPLli1j8uTJzJs3j08++QQhBPv37wegpqaGRx99lJkzZ5Kbm0tBQQFFRUWe8eXl5Qgh2LVrF3feeSdTpkzhsccepb29nT/9cRvfXziH+fNuY8eOHZ4x+/fvRwjB559/zh133EFubi5r167F4XCwYcMGpk2bxpw5c9i7d69nTHFxMUuWLCE/P5+8vDweeOABysrKAva+bNu2jfvvv5+5c+eSk5PD+vXr+fLLLzlx4kS3/bOysvjBD36AEIKsrCx+9KMfIYTgwIEDAbNR4j+qqmKrLqXxm79Rt+f/YDld2EWcdHoDpiEZxIh8kmb9I8m33UvclNuIzBgnxWmA0b8elwOM5fRBLCe/6dUVta/QGUxEX5NH9Bj/CuutX7+e0tJStm7dCsCzzz7rc76trY28vDyWLVuG2Wxmy5YtPPTQQ3z44Yc+daE2b97ME798kharnZX/8s/864pHGTFyJP+5bRu7d+9mzZo1zJ4926ci7RtvvMHGjRuprq5m2bJlnD17lry8PLZv3862bdtYuXIlH3/8MSaTCYvFwvz581m1ahVOp5OXXnqJ5cuXs3379h7/toULF3Lu3Lkez/dUUddms3H8+HFWrVrlacvKyiIjI4ODBw96akL1hKqqfP3115w5c4brrruu176SwOKytdFWrtBWetRdhsIXfWQMEWmjtaW75OHojDL8YTAgBcoL65mDQREnANVpx3rmoF8C1dLSwnvvvcfrr7/uqRT72GOPcd9993n6ZGZmcu+993qO16xZw7vvvsuhQ4eYNm2ap/3BBx9izDUTcDpVbr5lDp/s2c3rr/2eyMgIRo8ezebNmzl8+DA333yzZ8yKFSvIyckhJyeH/Px8ampqePjhh92/70G2bt1KaWkp2dnZTJo0iUmTJnnGPvXUU9x4442cO3eux4KAv/vd77qUpvemp/2k+vp6XC5Xl/PJycnU1fW+T7Fw4UJKSkoA+Ld/+ze5vBci7I0XaCs5Svu5U91mATcPzSRy5LWYU0eEbdVXSeCQAuVF1OgpQZ1BRY32b/ZUVlaGw+Fg4sSJnjZvEQCw2+1s2rSJnTt3Ul1djdPpxGq1UllZ6dMvPWOkx2MvKTmZUSNHERmpzbD0ej2JiYnU19f7jBk7dqzn9ZAhQ0hISPA5BqirqyM7O5uWlhZefPFF9u7dS3V1NRfrjVVWVvYoUBkZGX69D33J7373O1paWvjiiy/41a9+RXZ2tiwTHyRUp4P2ymKsJUdxNF7ocl5niiAyUxA1YqL0uhvkSIHyInrMFL+X3IKJP0UlX3vtNXbs2METTzzBqFGjiIiIYPHixV1mJqrXtmOEyYjZ7LtUotPpcLl8k2SaTCaf852PAc+Y5557jgMHDrB69WqP8CxcuLDXGdKVLvElJSWh1+upra0lOzvb015XV+ezRNkdF20TQnDq1Clef/11fv3rX/c6RnJ1OC1NWEuP0l52vFvXcGP8UKJGXkvE8Gx0BrmEJ5EC1S8YMWIERqORY8eOMX36dACOHDni06ewsJAFCxYwb948AKqqqmhoaPCcb7P5Lp9ERxoxGft+yaSwsJB77rnHs0RYWFh4yTFXusRnNpsZP348+/fv97wvZWVlVFRUXNZsSFVVDAbpihwIVNWFvboMa8lRbNVldC5xrtMbiBiWTeTIiRgTUmUmB4kPUqD6AbGxsSxatIhnnnmGdevWAbBx40agYwaTlZXFnj17WLRoEQAvvPCCxznCZnfSau1YtowwBy7HXlZWFu+//z433HADDQ0NbNiw4ZJjrmaJr6CggPXr15OTk+NxM8/Pz/c4SBw6dIjHH3+cLVu2kJaWxvvvv49er0cIAcC+fft4++23Pe+npG9w2ay0lR2nrfRYt+mGDFFxRI6YQGTmeOl5J+kRKVD9hNWrV7Nq1SoKCgoYNmwYK1as4JFHHsFs1lK1LF26lJKSEgoKCkhOTmb58uWUlpbidKlajj03RoOOuADm2Fu5ciUrV67krrvuIjMzkyeffNLHmaOvufvuu6mtrWXt2rU0NzczY8YMj4gDWK1Wzpw5g92uCbTRaOS3v/0tJSUl6PV6Ro8ezfPPP8/tt98eMBsHC6qq4miooq30GO2Vxd04Pegwp2QRNXIippQs6fQguSQ6f/Y3+hIhxCrgESAR2An8TFGUrjulWt/vA08BAqgD/i/wuKIotu76dzN+FHBm9+7dZGZm+pwrKioiJyfnSv+MkHPgwAEWL17Mvn37elwCc7lU6pvbPE4Rer2OpLgImcboMunvn5VAozrttJ8rxlpypNsSFnpTBBFZ44nKmiCdHgYx5eXlzJkzB2C0oihn/RkT1BmUEOJ+YDVwL3AG2Aj8EZjTTd9sNEFaDbwFjAa2AI3A/w6SyWHDwYMHqaqqIicnh8rKSp5++mlmzZrVozhpOfbafXPsxcoce5K+w9naiLX0KG3lCmp3Tg8JqUSNnEjEsGxZS0lyRQT7U/MI8KKiKH8BEEL8FCgWQlyrKMqRTn2nAk2KolzcxDgjhPhvYFAGrDidTjZt2kRJSQlxcXHMmDGD1atX99i/xWrHZu/wxouPNmMySkcAydWhqi5sF0ppKzmCraa8y3md3kDE8LFEjpiIKTE1BBZKBhJBEyghRAQwBfjFxTZFUU4LIc4C+UBngfoWiBNC3Am8DWQC84FXgmFvuDF16lTeeecdv/pa2+xYvXPsRRmJ7Gc59iThhavdojk9lB3DaW3pct4QHU/kiIlEZgr05sgQWCgZiATzrjUELfdf5/2maqDLo5ZbvL4P/AmIQbN1s6Iovwm0of0ZrSpuJ4+9SBlTIrkynG2tWJT9WqYH1dXprA5z6gjN6WFolnQRl/Q5wRSoy/r0CiGGA78FfgW8D4wEfi2EWK4oyosBsK/f43C6aGzt2AswGvUB9diTDFxUVaWt9Cityn5Uh29mFb05ksjMHCJHTMAQHRciCyWDgR4FSgjxT/7+EkVR/tuPbjWAC222VOTVnkLXWRXAUqBYUZRfuY8PCSHigP8ApEB1wuVSaWxp5+JDrl6vIyHGjF6Kk+QycTTX03LkE+z1533aTYlpRI6cSET6GOn0IAkKvX3K/qvTsYrvLMjbP/2SAqUoSrsQ4iBwK/AJgBBiNDAK2N/NkGigcyCFC1kipAvSY0/SF6guJ5ZT32EtLvRZzjPEJBB77c2Yh3SfS1EiCRS9CZT3xsVs4DfAL4HP3W2zgH8D/vkyrrcJ2CiEKATOos2G/q4oyhEhxHTgD8AcRVEq0Jb1HhNCPOx+PQpYB7x7GdcbFHTx2IuRHnuSy8Nef57mw5/gbPFKFKzTET0ml+ixU+WMSRISevzUKYrimb0IIf4d+IWiKB95dXlbCGFBi2XyK/GZoiivCyHSgJeBBGAX8DP36Wi0gFyTu+9Hbjf0FcDzaIG6bwOrOv/ewYylk8deTJSJSLO8mUj8w2Vvx6J8hbX0qE+7KTGN2Ek3Y4zrPemuRBJI/L2T5QBdgx6gDOi9KlwnFEV5Fni2m/Y9dHKkUBRlC1pwrqQbbHYnLZ089qIjB584vfLKK2zdupXm5mZmzpzJunXregxg9opm9xAXF8c333wTDFPDivbzZ2g59jmutlZPm85gIkZMJ3LkRJmKSBJy/L2bnQR+IYR4UFEUFUAIoUOLaToZKOMkPSM99jTeeustXn75ZZ5//nlPstjly5ezZUvvzzXbt29n2LBhgFYHazDhbGul9ejntFed8Wk3p44kduJNGKJiQ2SZJBypbq3lcJVCvbWBqcMnMTopK2jX9veb+QvgJ8BJIcR/CiG2oQnTT4DlgTJO0kFjYyPLli1j8uTJzJ07jw927mZWfi6F332DXq/D3tbEPz/2GDNnziQ3N5eCggKKijqcJcvLyxFCsGvXLu68806mTJnCo48+Snt7O2+++SYzZsxg1qxZ7NixwzNm//79CCH4/PPPueOOO8jNzWXt2rU4HA42bNjAtGnTmDNnDnv37vWMKS4uZsmSJeTn55OXl8cDDzxAWVlZwN6Xbdu2cf/99zN37lxycnJYv349X375JSdOnOh1XHJyMikpKaSkpPQ42xpoqKqKtfQY9Z/+yUec9BFRxF93O/HXz5fiJAG0z8rZ+nLeOb6Lvxz7gFO1Z6i11PPducNBtcOvGZSiKLuFENegpSrKQVuK2w78f4qidLf0J+lj1q9fT2lpKX/4wx9ottrYuOEFz7mEWDNV523k5eWxbNkyzGYzW7Zs4aGHHuLDDz/0lN0A2Lx5M2vWrEGn07F06VJ+/vOfM3LkSLZt28ZHH33EmjVrmD17tk/BvzfeeIONGzdSXV3NsmXLOHv2LHl5eWzfvp1t27axcuVKPv74Y0wmExaLhfnz57Nq1SqcTicvvfQSy5cvZ/v27T3+bVdasNBms3H8+HFWrerYlszKyiIjI4ODBw96Sm50x49//GMcDgcTJkxgxYoVvfYdCDhaGjTX8TrfCsuRmeOJybkRvSmih5GSwYTD6UCpPc3hquM0tXUtkzJ2yKig2uP3hoXbs25lAG0JOYfOF/HNuUM4nD0Xz+srjAYjecMnMzn90lmyW1paeO+993j99dfJvmYC1nYHS36+jH9+5OdERxkxGQ1kZmZy7733esasWbOGd999l0OHDjFt2jRP+9KlS5k6dSoA8+bNY+fOnbz66quYTCaWLFnC5s2bOXz4sKfgIMCKFSvIyckhJyeH/Px8ampqePjhhwF48MEH2bp1K6WlpWRnZzNp0iSfcvRPPfUUN954I+fOneux5PuVFiysr6/H5XJ1OZ+cnExdXV23Y6Kjo/nlL39Jbm4uNpuNLVu28OMf/5j333+foUOH9mhDf0V1ObEWH8BS/J1P+QtDdAKxk2ZjHnLltbgkAweLzcrR6hMcu3CSdodv4l+dTkd28igmp41naExwnWb8FighxFg0j7uxwEOKolQJIRYCpYqiBHfeFyAOVRUFRZxAe1I5VFXkl0CVlZXhcDgYM1ZgbdfsG58zAQCz253cbrezadMmdu7cSXV1NU6nE6vVSmWl7xPz2LFjPa+HDBnCyJEjPSXc9Xo9iYmJ1NfX9zomISHB5xi0MuvZ2dm0tLTw4osvsnfvXqqrqz3l6isrK3sUqKspWHi5JCcn85Of/MRzPGXKFBYsWMCOHTtYsmRJ0OwIBvb687Qc/hRHi5dY63REj7mO6LHXS9dxCbWWeg5XHedU3VlcLt9UVmaDiZzUa5iYOo5Yc0xI7PPrEyqEmInmEv41cANabjyAycB9wD8GwrhgMzktJ6gzqMlp/tUYuniTb7XYiY7RChRGdHIlf+2119ixYwdPPPEEo0aNIiIigsWLF3eZmRiNHeN0Op1HnLzbOn9Qvft0HnPRKePimOeee44DBw6wevVqj/AsXLiw1xnSlS7xJSUlodfrqa2tJTs729NeV1fns0TZGwaDASEEFRUVfvXvD7gcNs11vOQo3vH0xoRU4ibdjDF+cOy5SbpHVVXKmyo5dL6IiqbzXc7HRcQyKU0ghmZjMoQ2j6e/j1DPAusVRXlaCOG9MLkbeKjvzQoNk9Nz/JrRBJvhGZlcRBwpAAAgAElEQVQYDEYUpYjcqXkYjXqKFcWnT2FhIQsWLGDevHkAVFVV0dDQEHRbCwsLueeeezxLhIWFhZccc6VLfGazmfHjx7N//36mT58OaLPNiooKpkzxKzQPVVUpLi72WZbsz7RXnaXl6GddXcfHTSNy1LXSdXwQ43Q5OVl7lsNVRdRbG7ucT40dyuS0HEYlZaIPk8+JvwJ1HdpMqTNVdJOJXNJ3uFwqTkzMnTef32x8gZWr1xAbbeLXv/410DGDycrKYs+ePSxatAiAF154wcc5IlhkZWXx/vvvc8MNN9DQ0MCGDRsuOeZqlvgKCgpYv349OTk5Hjfz/Px8j9PDoUOHePzxx9myZQtpaWn87W9/w+l0MnHiRGw2G3/4wx84f/48//AP/3DFNoQDrnYLLcf20l5Z7NNuThmhuY7LpK6DljZ7G8eqT3L0wgms9jbfkzodoxOzmJw+nrTYlNAY2Av+ClQbEN9N+zVoSWAlAUBVVRrdOfYe/ed/Yf0z/5ulP/8pw4YNY8WKFTzyyCOYzdqS39KlSykpKaGgoIDk5GSWL19OaWlp0G1euXIlK1eu5K677iIzM5Mnn3yS++67L2DXu/vuu6mtrWXt2rU0NzczY8YM1q1b5zlvtVo5c+YMdrsW0KzT6fjtb39LRUUFkZGRTJw4kS1btpCenh4wGwOJqqq0lyu0HP/Cp6qt3hxFTM4MIoaPHXSxcRKNhrYmDp8/zona0zhdvmlNjQYj44eO5do0QXxE+IYW6C7ub/SGEOIPaCmIfgQ0oe09NQJ/BQ4oihKWy3xCiFHAmd27d5OZmelzrqioiJyc8FvO86a51eZxigCIjzV70hgdOHCAxYsXs2/fvkETxxMqwvWz4mxtpPnIJ9hrfffvIjPGEZMzQxYOHISoqkplywUOnS+itKHrvmq0OZpJaYLxQ8cSYTQH1TavLC6jFUU5688Yf2dQ/4KWgfw0EAm8BWSjpTp64rItlVwSu8PpI06nTxXR1FBLTk4OlZWVPP3008yaNUuK0yBEdTmxnj6I5dS3vq7jUXHETroZ89DMXkZLBiIul4vi+hIOVx2nprVriMWQ6CQmp+eQnTSyX2VO8TdQt0oIkQsUAHloGSheBrYqimINoH2DFu/s5GaTAZMBNm3aRElJCXFxccyYMYPVq1eH0EJJKLA3XKDl8Cc4mms7GnU6okZPJuaaPHQh9rqSBJd2h43jNac4UqXQarN0OT8iMYPJ6TkMi03tl0u9/rqZzwD2K4rye+D3Xu0GIcQMRVH2BcrAwYrN0fFkHGk2cP311/POO++E0CJJKFEddlpPfIX17BF8XMfjhxI3+RaM8QMvyFjSM03tLRypUjhec6pLWIxBb2DckDFMSh9PYmR3rgP9B3+X+D4DhtG18m2i+5wsPtSHqKqK3dExgzKZ+s+UXNL32C6U0nL0M5zWjggPnd5A9LjpRI2eJF3HBxFVLdUcOn+cMw1l0Ml/INIUybWp45iQcg2RpoGx/+ivQOnwraB7kQSg67xSclXYHS7Pu20w6DD0ozVjSd+hqiqtx7/AeuaQT7t5aCax187GEN2/n44l/qGqKiUN5Rw4f4wLLV2dppOiEpiUlsPYIaMw6gfWXKFXgRJC/M79UgVeFEJ47zcZ0PajLh2JKbksvJf3zLIy7qBEVVVai/ZhPduRRUxviiBmwkwihl/TL/cTJJdPraWefaXfUtlc1eVcRnw6k9NzyIwfNmA/D5eaQV3j/qkDxgA2r3M24Avghc6DJFeHt4OEXN4bfHQnTubUUcRNuhl9RFQILZMEizZHO9+eO8TRCyd9lvL0Oj1jh4xicloOydGJIbQwOPQqUIqi3AoghNgKLFMUpSkoVg1iXC4Vh9f+k5xBDS48y3pe4hSRPoa43NvlXtMgwKW6OF5dzNcVB32yiut0OiamCq5Ln0C0efA8pPi7B/VQd32FEImAQ1GUlj61ahDj7RxhNOrR6wfm1F3SFU2cvvTZc4pIH0PcdXOkOA0CzrdUs7fka2otvtUEMuLTmTEij6SohB5GDlz8Faj/Qstm/utO7T8B5gJdU01Lrgi71/6TyShvSoMFVVVpVb7Eeuagpy0ibbQmTgNs41viS6vNwv7yA5yqPePTHhsRw4ys6xmZmDlg95guhb8CdQPdFyv8GHiy78yR2HyW96RA+cMrr7zC1q1baW5uZubMmaxbt67HDBt//vOffSrwXmT27Nm8+uqrgTa1W1RVxaLsx3q6kzjl3i7FaQDjdDk5XKXwXeVhn1gmg95A7rCJTE6fMOC88i4XfwUqBrB30+4EZJrkPqLz/pNJ7j9dkrfeeouXX36Z559/3pPNfPny5WzZsqXb/gsWLOCmm27yHDscDhYtWsTtt98eLJN90MTpKyynD3jaItJGSXEa4JQ2VLCv7NsuZdXHJI8gPzOXuDBO4BpM/H1EPwb8oJv2HwBKN+2SK8Dbvbzz/lNjYyPLli1j8uTJzJs3j08++QQhBPv37wegpqaGRx99lJkzZ5Kbm0tBQQFFRUWe8eXl5Qgh2LVrF3feeSdTpkzh0Ucfpb29nTfffJMZM2Ywa9YsduzY4Rmzf/9+hBB8/vnn3HHHHeTm5rJ27VocDgcbNmxg2rRpzJkzh71793rGFBcXs2TJEvLz88nLy+OBBx6grKwsYO/Ztm3buP/++5k7dy45OTmsX7+eL7/8khMnTnTbPzIykpSUFM+/o0ePYrPZ+N73vhcwG3tCVVUsJ77CcrojUsOcOoq43LlSnAYojW1NfHByDx+c3OMjTklRCSwSc7g9+yYpTl74O4PaAGwRQqSg7UWpwB3AMuB/Bci2oNNw4CB1X32Dy9HdZLFv0RtNJE/PI/G6jsJ69l6W99avX09paSlbt24F4Nlnn/U539bWRl5eHsuWLcNsNrNlyxYeeughPvzwQ5+6UJs3b2bNmjXodDqWLl3Kz3/+c0aOHMm2bdv46KOPWLNmDbNnz/apSPvGG2+wceNGqqurWbZsGWfPniUvL4/t27ezbds2Vq5cyccff4zJZMJisTB//nxWrVqF0+nkpZdeYvny5Wzfvr3H9+JKK+rabDaOHz/us2SXlZVFRkYGBw8e9NSE6o23336bW2+9lfj44Aa9auL0NZZib3EaSfxUKU4DEbvTTmHlUQ5VFflUrDYbzeQNn8yE1GvCpkhgOOFvstg/CiFigbXAL9zNlcCjiqJsC5BtQafhwMGgiBOAy2Gn4cBBH4Gy2b0CdE0dN6mWlhbee+89Xn/9dU+l2Mcee8ynzlJmZib33nuv53jNmjW8++67HDp0iGnTpnnaly5dytSpUwGYN28eO3fu5NVXX8VkMrFkyRI2b97M4cOHPRVxAVasWEFOTg45OTnk5+dTU1PDww8/DMCDDz7I1q1bKS0tJTs7m0mTJvlUp33qqae48cYbOXfuHMOHD+/2vbjSirr19fW4XK4u55OTk6mr65rRuTONjY3s2bOHjRs3XrJvX6KqKpaT32Ap/s7TponTPClOAwxVVSmuK+HL8kIs3slcdTrGD81mWsYUogZIWqJA4O8MCkVRXgVeFUIMcx9XBsyqEJF43ZSgzqC8xcnpcuF0ugPydNoS30XKyspwOBxMnDjR09a5RLndbmfTpk3s3LmT6upqnE4nVquVykrf/01jx471vB4yZAgjR47EZNIyYOv1ehITE6mvr+91TEJCgs8xQF1dHdnZ2bS0tPDiiy+yd+9eqquruVhvrLKyskeBupqKulfD+++/T0xMDLNnzw7qdS0nv8Fy6lvPsTllhBSnAUiNpY69Jd9Q1VLt054aO5SZI/JIiZGlci6F3wIFIISYgJZdYpf72Ag4FUW5dNXDfkDidVN8RCOY2L2zRxj06L3cSv0pKvnaa6+xY8cOnnjiCUaNGkVERASLFy/uMjMxGjv+l+t0Oo84ebd5L0EAPn06j7no/npxzHPPPceBAwdYvXq1R3gWLlzY6wzpSpf4kpKS0Ov11NbWkp2d7Wmvq6vzWaLsibfffpuFCxd2eQ8CSWt34nT9HVKcBhBt9ja+rjhEUc0pnywQUaZI8jNzuWbI6EHrNn65+FtuIwnYDtyGtv90DVrxwt8B9cD/GygDBws+7uUm35vViBEjMBqNHDt2jOnTpwNw5MgRnz6FhYUsWLCAefPmAVBVVUVDQ0OAre5KYWEh99xzj2eJsLDw0qkar3SJz2w2M378ePbv3+95X8rKyqioqPAshfZEaWkphYWFQa2p1XryGywnv/Ecm1Oy5MxpAOFSXRRVn+LrioPYHB1Z4fQ6PdemCaYOn4RZ1uu6LPydQb3g7jsWOOjVvt19TgrUVdJbgG5sbCyLFi3imWeeYd26dQCefZOLT2JZWVns2bOHRYsWAfDCCy/4OEcEi6ysLN5//31uuOEGGhoa2LBhwyXHXM0SX0FBAevXrycnJ8fjZp6fn+9xkDh06BCPP/44W7ZsIS0tzTPu7bffZsyYMUyePPmKr305WE5924043YHOcFmLGJIw5VxzFftKv6WuUxaIzIRhzBiR1+/rMoUKf78d84E7FUU5LYTwbj8BjLycCwohVgGPoNWS2gn8TFGUznWmLvY1ogUC3w+kASVoOQF3Xc41wx2n03f/qbsMEqtXr2bVqlUUFBQwbNgwVqxYwSOPPILZbAY054eSkhIKCgpITk5m+fLllJaWBvPPAGDlypWsXLmSu+66i8zMTJ588kkfZ46+5u6776a2tpa1a9fS3NzMjBkzPCIOYLVaOXPmDHa7777iO++8ww9/+MOA2eWN5dS3tJ742nNsHpopxWmA0GJr5cuyQk7Xlfi0x0XEMmPE9YxIyJDLeVeBzp/9DSGEBZioKMoZIUQzMMUtVlOAzxRF8evxQAhxP/Ab4F7gDLARbQ9rTg/9XwOuB/4FOAmMAOoURTnSXf9uxo8CzuzevZvMzEyfc0VFReTk5PjzawKOtd1Bc6u2JGA26UmMu7RXz4EDB1i8eDH79u3rcQlM0jdczWfFcuo7Wk985Tk2D80k/vr5Upz6OQ6Xk0PnizhQeRSHq2N52qg3kjt8IpPScgZ9FojOlJeXM2fOHIDRiqKc9WeMv9+SA2hxTy93av8x8FXX7j3yCPCioih/ARBC/BQoFkJc21l0hBCT0IRsnKIoF5NUnb2Ma/UbfJf3uv9QHzx4kKqqKnJycqisrOTpp59m1qxZUpzCGEtxoRSnAYZWPLCCL8q+pbndN0d2dvJI8rNyiTXHhMi6gYe/35SngD8LIYajFSr8H0KIicAPAb9yxAghIoApdMRR4Z6FnQXygc6zooXAKeAeIcRSoBXYBjyrKIqTAYKqqj71n8w91H9yOp1s2rSJkpIS4uLimDFjRlA3+CWXh6W4kFZlv+fYNCRD89aT4tRvabA2sq/sW8obfUM3kqOTmDkij2FxqSGybODib6Duh0KIH6DtB+mANcC3wAJFUT7z81pD0FIrdd5vqga6+z87Cq1I4jzgbmA48ApaocTn/bxm2ON0qbhc2jKrTgdGQ/cCNXXqVN55551gmia5QiynD3QSp+Ek5M1HJz24+iV2p51vzx3mcNVxn5APs9HMtIwp5KSMlVkgAkSPAiWEWA38h6IoViHEcEVRdqI5NVwpl7tTqAfMwH2KopS4bRoBLGUACZTd7ru8JzdU+zeW0wdpPf6l59iUPJyE678nxamfUm9tZFfxpzRYvWq16nTkDB3LtMwpRBqD7yk7mOhN9v+NjkzlZUKIq52/1gAuus6WUug6qwKoAtovipMbBci6Sjs8dA5IDQW+8U/yKSzcuJzPiOXMQVqPf+E5NiUPJyHve+iMUpz6I8V1Jfyl6AMfcUqPS+GuCfO5adR0KU5BoLclvvPA/yOEeAdt9jO0k4u5h57cxDv1aRdCHARuBT4BEEKMRlvK29/NkC+BCCFEpqIo5e62sUCf+E7HxMRQUVFBWloaJpMpJDMXVVV9BEqW1wgfVFXFbrdTVVVFTMylN72tZw7RWuQtTsOkOPVTnC4n+8sPcKTquKfNoDcwc8Q0xNAxcpUjiPQmUBvQvPZeRssecbibPjr3OX/vrJuAjUKIQjSPvP8A/q4oyhEhxHTgD8AcRVEqgA+BIrT8fyuAYcAq4N/9vFavZGZmUlNTQ0lJSa9ZDAKJ06Visbrjc3RQG20OiR2S7jEajSQkJDB06NBe+1nPHqalaJ/nWBOnBVKc+iGtNgsfFX/ukz8vPjKOudk3MSQ6KYSWDU56FChFUTYKIf4v2qzlY+Cf0NIaXTGKorwuhEhDE70EtJx+P3OfjgYEYHL3dQghFgKbga/Rlvx+S9ey81eEXq8nNTWV1NTQed4cPFnNV8cqAMjOTGT69aNCZovkyrCePUzLsY56WKakdClO/ZRzTef56PRe2uxtnrZRSZncMupGzEb58BgKevXicy+tlQshngHeVxTF0lt/f1AU5Vng2W7a99DJkcId/zT/aq8ZrpRf6IijyEyVRcr6G9aSI13EKX6aFKf+hqqqHDxfxFcVBzqSu+p0TM+4jinpOXJJL4T462b+ZKANGWy4XCrnqqVA9VesJUdoOfq55/iiOOnlk3a/wuawsefsF5ytL/e0RZoiuT17FsPj0noZKQkG/mYzj0RLCDsPLSeej7uZoiiXLl0q8aGmwUq728U8JtJEYqz0COovWEuO+opTYpoUp35IraWeXcWf+ZReT4tN4fbsWcSYo0NomeQi/oa1bwL+Efhv4O9ojhGSq6Dz8p5cRugfWEuP0nK0IzbdlJgqxakfcrL2DJ+e3Y/T1RGHeG3aeG7IzEWvl+Ee4YK/AnUn8E+KonwYSGMGE+XVHU9tGXJ5r19gLT1Gy5EOcTImpBI/bSF6k5z99hecLidflH3LsQsnPW1Gg5GbR91AdvJlFWaQBAF/BcqBVqBQ0gc4nS4qa1o9x5mpcb30loQDbWVFtBz51HNsTEglYboUp/5ES3sru4o/o7q11tOWGBXP3OzZJEUlhNAySU/4K1C/BR4AHg+gLYOGC/VW7O4A3fgYM/ExcnkonGkrO07z4U88x8aEFClO/Yzyxkp2n95Lu6Pd0zYmeSSzR+XLKrdhjL8CNRz4JyHEbWilN2zeJxVFWdrXhg1kyi90LO9J773wpq28O3FaJMWpn6CqKoWVR/nm3CGPC7lOp+OGrKlcmyrk3m+Y469ATQSOul93znckHSYuE18HCbm8F67YGy/QfOgTLn7EjfFDpTj1I9oc7fz99D7KGs952qLNUdw+ZhbpsjRGv8DfOKibAm3IYMHhdHG+tmP/KSNFzqDCEVV10XL4U6Q49U9qWuvYWfwpLe0d37VhcWnMyZ5JtCkqhJZJLgdZPS3IVNa04nTXf0qKiyQmSq5/hyNtZ4/gaKoBQKc3EJ87F705MsRWSfzheHUxn5d+5ZOJfsqwCUzLmCLrNvUzeqsH9VvgcUVRWtyve0TuQflPhcweEfY4rS20nvjacxw99noMMdLLK9xxuJzsLfkapabY02YymLhl9I2MTuqzKj2SINLbDGqS1/lJvfSTe1CXgff+k4x/Ck9ajn6O6tSyzBtjk4kaMyXEFkkuRVN7C7tOfUqtpSOfdVJUAvPGziYhMj6Elkmuht6ymd/U3WvJlWOzO7lQ15FvN1PuP4Ud7efPYLtw1nMcO2k2Or2s0xXOlDZU8PGZfdgcHc7FY4eM5qaR0zBJF/J+jdyDCiKVNa243K6uKYlRREbItz+ccDlstBzryLEXmZWDKSk9hBZJesOluvju3GG+O3fE06bX6Zkx4npyUq6RLuQDAHmHDCJyeS+8sZz4Gleb5vWlN0cRM/6GEFsk6Yk2exu7T++loum8py3GHM3csbNJjRkSQsskfYkUqCDiHaAr3cvDC3vDBaxnO57EYybMlC7lYcqF1lp2nfqUVlvHcnlGfDpzxswk0iQ9LQcSUqCCRFu7g5pGrVKnXqeTAhVGqKrLnWdPW341D80kYlh2aI2SdEFVVYqqT7Kv9FtcaocL+dTh1zJ1+CTpQj4AkQIVJCqqW1Av7j8lRWE2yY33cMF69rBPzFPsxJvk/kWY4XA6+LTkK07VnvG0mY1mbhs9gxGJGSG0TBJIpEAFCd/4J5neKFxwWpuxnPjGcyxjnsKPxrYmdhV/Rp2lwdM2JDqJuWNnEx8hVyIGMv5W1E0GnqPniroyHfcl6FygUBJ6VFWVMU9hTo2ljr8qH/tkIRdDs5k5chpG6f4/4PF3BvV7IA94BahABudeFpY2O3VN2v6TQa8jfUhMiC2SANiqzmC7UOI5ljFP4UVncdLr9cwaMZ3xKXJ/cLDgr0DdBixQFGVfII0ZqHjPntKSYzAZ5WZuqNFinvZ6jmXMU3jRWZzMRjMLxt0mXcgHGf4KVANQf8lekm7xWd5Lk8t74YCMeQpfuhOnheNuI0WK06DD30f5Z4FVQgjpVHEF+DhISPfykCNjnsKXWku9FCeJB38F507gBqBUCHGMrhV1F/S1YQOFplYbjS3al81o0JOWHB1iiwY3MuYpfKm11POesluKU5ihOp3UffMt1rJykq6fSszoUUG7tr8CVQO8F0hDBioVXst7w4fGYDDI/adQImOewpMu4mQwSXEKA2wNjVTt3EV7jfadqfvq6/ATKEVRfhJoQwYqFdUd6Y1k/FNokTFP4Um34iTmSHEKMc0nTlK951NcDrunLWbM6KDacFl7SkKIYcAEtPWRIkVRKgNi1QBBVVWZIDZMkDFP4Ul34rRAilNIcdnt1Hy2l6bjxz1tOr2BITNuIGHStUG1xd9A3ShgE/A/6XCscAkh3gQeVhSlLTDm9W8aWtppsWo3RLPJQEpiVIgtGrzImKfwQ3OI6CpO0pU8dLTX1lG1cxe2+g6nbVNCAunz5hKRMjTo9vg7g3oeLYvEPwGfADrgZmCj+9yj/l5QCLEKeARIBHYCP1MU5cIlxlwPfAnsVRTlFn+vFWq8958yhsag18u9jlAgY57CjzpLA39VdtPmFieTFKeQoqoqTceKqPl8L6rT6WmPG3cNKbNvQm8OTbIgfwXqH4H7FEX5wKvtLSGEFXgdPwVKCHE/sBq4FziDJnB/BOb0MiYCeBNNGPuVm7vMvxceyJin8KLO0sB7ykc+4rRQilPIcNlsXNjzCS2nij1teqORoTfNIm68CKkTkb83/ETgdDftxcDl7DI/AryoKMpfAIQQPwWKhRDXKopypIcxTwMfowUK33IZ1wopcv8pPJAxT+GFFKfwou3CBao+3IW9ucOZy5ycTPq8uZiTk0JomYa/Ps9Hgf/VTfsS97lL4p4JTUETGwAURTkNnAXyexgzE/g+sMpPO8OGuqY2rO0OAKIijAxJkIXUgo2MeQov6qzdiJNMXxQSVFWl4cBBKv68w0ec4ifkkHn3XWEhTuD/DGot8Be3YFz8xt+MJix3+vk7hqAJYuf9pmogtXNnIUQ08AbwgKIoFiGEn5cJD8qrvGZPKbEy1iYEyJin8EETp91dxSk2+Bvvgx1nWxsXdv+d1pIOpyG9yUTKLTcTd83YEFrWFX/joN4VQkwD/gVY6G4+iubBd8DPa13uneFXwIeKonxymePCgvJqWV4jlMiYp/DBI052zdnXZDCxYNytUpxCgPXcOap27cbR2uppi0hJIX3e7ZgSwu/74bfTgaIohcCPruJaNYALbbZU5NWeQtdZFcBs4FohxEPuYz2gE0I4gGxFUUq6GRMWuFwq56rl/lOokDFP4UNP4pQWmxJiywYXqstF/XeF1H31Dd7VkhKnTGbIDfnoDOEZchE0rzhFUdqFEAeBW9E88hBCjAZGAfu7GfJDwDtwaCkwDbgfOBdQY6+SmgYr7XbNVTM2ykRirNyUDyYy5ik8kOIUHjgsFqp27cZaUeFpM0REkDrnVmJGjQqdYX7Qo0AJISzASEVRqt3u5D0WKVQUxd8MqJuAjUKIQjTniP8A/q4oyhEhxHTgD8AcRVEqFEUp9h4ohLgAtPbi7Rc2+Hjvyf2noCJjnsKDemujFKcwwFJWTtVHu3FarZ62yPR00ufdjjE2/Fd2eptBPQI0eb2+6iq6iqK8LoRIA15Gc0/fBfzMfToaEIDpaq8Taspl/r2QYVG+kjFPIabe2si7ykdSnEKI6nRS9/U31H93gI5bt46k63NJnpaHTt8/klb3KFCKorzm9fr3fXVBRVGeRasv1bl9D704UiiKsravbAgkTqeLyuqODUi5/xQ87A0XsJZ0RD3ImKfg0504fU+KU1CxNzdTtWs3befPe9oMUVGk3T6H6KzMEFp2+fibi+8EcIOiKHWd2hOBrxRFGRcI4/ojVfUW7E4XAPExZuJjQpMiZLAhY55Cj7as1yFORoOR7427lXQpTkGj9cxZqnb/HZet3dMWnZlJ6u23YYzuf7Xo/HWSGNtDXzOak4PEjU95d7m8FzRkzFNouShOVi9xWjDuNilOQUJ1OqnZ9yWNhw972nQ6Hcn500nMva7ffhd6FSghxAyvw2lCiHqvYwNaAtnyQBjWX6m4IOOfgo3T0ozlxNeeYxnzFFykOIWWzkUFAYwxMaTNm0vUsP7tIHSpGdTnaGsmKvBuN+ctwLK+Nqq/4nC6OF/rtf+UIgUq0KiqSsuxz1GdWlopGfMUXBqkOIWUbosKjhpF6m23YIjs/+nVLiVQo9EcF04D09HSEl3EBlQpiuIKkG39jsqaVpwubQ8kOT6SmKh+75AY9siYp9DR4HaI8BGna+SeUzC4VFHB/rqk15leBepitgYhhElRFGdvfSVd458kgaVLzNOICTLmKUj0KE5xXdJqSvqYnosK3k5EysB6OPDXSeIXQog6RVFe925013dKVhTl3/vetP5Hhcy/F1R8Yp4ioogR3SbFl/QxUpxCQ09FBWPHjiX1ltkhKyoYSPyN1noIONVN+wn3uUGPze7kQp0F0Lxn5AwqsHSJecqRMU/BoKGtqYs4fU+KU8Bx2WxU7dpN9aL4mGcAACAASURBVCefesRJZzCQeustpM2dMyDFCfyfQWUApd20V7jPDXoqa1pxqdr+09CESCIj+lXx335Fl5inlCwZ8xQEGtqaePf4ri7iNEyKU0Bpr6nl/AcfYm9q8rSZk5NJm3s7EUOSQ2hZ4PH3LloNTETLn+fNJKCuS+9BiKyeGzxkzFPwaWhr6uKtJ8Up8DSfPEX13/fgcjg8bfETchg6cwZ608B3wvJ3ie8vwH8IISZdbBBCTAb+HfhzIAzrb5RfkPn3gkGXmKdr8jBEx4fQooHPRXGy2LSEo1KcAo/qclH7xZdU7frII056o4m0ubeTesvNg0KcwP8Z1GogFzgghKhGW1tJBb6kH5Zj72va2h3UNGpPlnqdjuFDY0Js0cCk25in0ZNDbNXAprGzOOmlOAUaZ1sbVbt2Yykr87SZEhIY9r35YVOKPVj4W1G3BbhJCHEHMNXd/C2wS1GUq85y3t+pqG5Bde8/pSZHYzbJOJxAIGOegkuLrZW/nvjYR5zmj7tFilMAaa+t5fz7H2Bv7liRiR4xgrS5czBEDD4noMvayVcU5UPgwwDZ0m+R8U+BR8Y8BRervY2/Kh/T0q658Rv0BuaPu4XhcWkhtmzg0nKqmAsf7/HJCpF0/dR+VR6jr/FboIQQCWi590aiJYn1oCjK+j62q18h458Cj4x5Ch7tDhvvn/iYxjbNa0yv0zNv7GwpTgFCdbmo2/819YWFnja90UTq7bcSO2ZMCC0LPf6W27ge+ABNmGLQPPeGouXiuwAMWoGytNmpa9L2nwx6HcPk/lOfI2OegofD6eCDk3uotbizFOh03DZmJlkJw0Nr2ADF2d5O1c6Puuw3pc+/Y8C7kPuDvzOoDcA7aNVvG4AbACewzX1u0OK9vJc+JAajYXBOxQOFjHkKHk6Xk53Fn1LV0pFyc/bIfMYkjwihVQOX9to6zv/tA5/4psG839Qd/t5NrwM2uPPxuQCzO0/fvzKIZ08g458CjYx5Cg4u1cXHp/dR3ljpabtxxPWMT5EPA4Ggpfg0FW/9xUeckqbmMmzBfClOXvg7g3KhZS8HbUkvEziOFsA7OgB29Rt845+kQPUlMuYpOKiqyqdn93OmviNZzPUZk5mUNj6EVg1MVJeLuq++pv67TvtNc24lNntw7zd1h78CdRiYAhQD+4FVQggVbcnvZIBsC3uaWm00tWq6bTLoSUvqfyWVwxXV5aT54G4Z8xRgVFXli7LvOFFz2tN2bdp4pg67NoRWDUyc7e1afFNpx4OAKT6e9O/Nl/tNPeCvQD2L5hwBsAb4G7ALzVni7gDY1S/wrp47LCUGg9x/6jMsJ77GXn/efaSTMU8B4ttzhzlS1VFTSAzN5sasqXIZtY9pr63T8uk1NnraorOySJt3u1zS6wV/BervgB1AUZTTgBBCpAI1g7lgYUW11/Jeikxv1Fe0V53FcvqA5zhm3DQZ8xQADp0v4rtzhz3Ho5NGcNOo6VKc+piW06e58NHffeObcnNJzp82aOOb/OWSAiWEMKK5k08BPL6+iqJcCKBdYY+qqtJBIgA4Lc00H/q759icMoKo7NwQWjQwOV5dzJdl33mOMxOGcduYGeh18obZV6guF3Vff0P9tx3vs95oJPW2W4kdK51P/OGSAqUoikMIUY7/Hn+DgoaWdlqs2hNRhMlASmJUiC3q/6guJ80HdqHa2+H/b+/M4+O6yrv/vXdmNNolS5Zs2fKWOD5JbMd2gmOyOImzYUJLyxLespUGAi8vEFpeugVCAw0lUAqkkL7s60tZXngLJSUJWW1nj7PYiR3nON5t2bJlSdY+673949wZzYy1zMijmZH0fD+f+cw9555759GZ0fndsz0PYJdXUbNqgzzR55l9XQfZcvCZZHpuTRPXn30FPhlCzRsjzjfV1DD3ho0EGxuLaNnUIlvR+RrwGaWUDJZ6pM4/zWuqxralET1TBl59mugpr2NuWdSuuQ67TIQ/nxzuOcoj+54Ez3dkY+UsNi69Cr9P4pfli0hXN0d+/R9p4lS5oJXWG98m4pQj2f4qNwKXAm1KqZ3AQOpJrfUN+Tas1Ekd3msV/3tnTLh9H0MHhudDqtQ6mXfKM8f6TvDAni04rpk2rq+o5YZlV1Pmn57RWIvByPNNq2lYd7HMN02AbAXqJMaThICZf0rzvzdHBOpMiA/20vfSpmS6rHkRFUtWFc+gacjJgS7uf20TcceEC68OVnHDsqupCJQX2bLpgeu6Zn9TxnxT04arqDlnaREtm9pkG27jvZNtyFSiqzfEUNjsz6kI+mmolX/yieI6cXpffBA3ZvaT+SpqqLlA5p3ySfdQD/fufoRo3DzVVwTKedOyq6kuE7+R+SAeDnPioYcZOJgx3/TGjQRny5DemTCmQCml3gH8VmsdGavcTOPI8XTv5dKYTpyBXU8S6zG+3yzLpmbNddhlIvj5oi/cz+93P0IoZhaelPnLeNOya6grF48c+SDS1c2x++7P2N/UypzrrsVXLr/jM2W8HtTPgRaMeyOUUq8B12itD4151TTnSIfEf8oH4aN7MryUX0KgXoLh5YvByBC/3/0wg5FBwIRqv+GcDTRU1hfZsulB/779nHj4EZyozDdNFuMJVGbXYG4W14yJUupW4BagHngA+NBIe6qUUquBTwOXAzXADuA2rfVDZ/L5Z4rjpM8/yf6niREf6KFvx+ZkOjj3LMoXiXudfBGKhfn97ofpDZnfqm3bbFx6Jc3Vs4ts2dTHdV26tz5H13PPJ/NkvmlyKKjMK6VuAj4FfBSzKrAe00sbiTXAQYwrpdWYSL73KKWK6sGy49QQkag30VwRoL5aVt7nihuP0fvCA7jeSidfRQ3VK6+UodI8EYlHuW/3o3QPmWEny7K49qz1zKuVVZFnSjwcpv3e+9PEKVBTw/y3vkXEaRIYrzfkkgjEk543UW4Bvqq1/g2AUur9wF6l1Aqt9Y7UglrrH2Zce7tS6u2YqL6vUiRS9z/J/NPE6H/lCWJ9nYAJoVF74fUSgDBPxJw4D+zZTMeAqV8siw1LLmXxrNbiGjYNiHR3c+zejPmm1lbjT0/mmyaFbIb4fqWUSiySKAd+opQaSi2ktb5+vA/yNvmuAj6Rct0+pdQBYB1mCG+s6y2gERMwsWgcSfG/N1/87+VMqG03ocO7kumq8y7FX9dURIumD47j8NDexzjaezyZd/nCtSxtXFw8o6YJA/sPcPyhh9Pmm+pXr6Lx9etkvmkSGU+gfpyR/ukZfFYjZkgxc76pA8hmZvxjgA+45wxsOCPicYdjHcN7lGX+KTdi/d3073gsmQ62nE35wvOLaNH0wXVdNh14ikOn2pJ5F7eu4fzmc4po1dTHiUTofGYrPS8PbyK3fD6ar94gQ3oFYEyB0lrflMfPmvBYmFJqI/BF4C1a6+78mZQbx7sHicbNLvy66iC1VbIDP1vceJS+Fx7E9fbi+KrqZN4pT7iuy+MHt7Kn80Ayb3XLcla3iPhPFNd1Gdi3n5OPP0FsYPihNFBTw9yNbyDYJItNCkEhHXCdxETmbQZ2peQ3cXqvKolSaj3wK+ADWusHJtXCcUjzXi7Ly3Oif+fjxPq7AG/eac312OJiJy8827aNXR3DcUPPbz6HtfPFE8dEifb20rHl8TRfeuDFb7ruGplvKiAFEyitdVgptR3YAGwGUEotARZjovSehlLqYuC/gE9qrX9RIFNHJXOBhJAdoSOvEjqik+nq5Zfjr5Ud9vlg27GdbD/2SjK9tHEJly1cKz3TCeDG45zatp2u557HjceT+b6KCmZffhnVS8+Wei0whXZhfDdwl1LqReAAxkv6o1rrHZ4Y/QSzEbhNKbUSuB/4NvA7pVRijeyQ1rpnhHtPKrG4Q3vncFdfBCo7Yn1dafNO5fOXEWwt6k6BacPOE7t59shwYMdF9a1ctfj10ohOgKGjR+nY/BiR7tQZBIu6FefTsO5iiXpbJAoqUFrrHyil5gDfAuowYeM/5J2uBBQQ8NJvA2YBf+O9EvwY+ItC2JvKsZMDxB2zwr6htpzK8sA4VwhuLGr2O3kOSn3Vs6hevl4a0DzwWud+nji4NZmeVzuXa86+HFtWlOVEbHCIrqefpvdVnZYfnD2bpiuvoHyOeDYpJgUPAqO1vhO4c4T8TaQspNBafxb4bKHsGo8jMryXE67r0rdjM/EBsyvA8vmpXXMdll+E/Uw50H2ETfufSqabq2fzhqVX4JeAg1njui59r2o6n3yKeDiczLf9ARrWraVu5QpZPl4CSJSyLGkT/3s5ETq8i/DRPcl09fL1+GsaimjR9KCtt52H9j2G6wUcbKisZ+M5VxHwifBnS7izi47NWwi1t6flV591FrMvvwx/tXh5LxVEoLIgEo1zoss43LQsSwRqHGK9Jxl45Ylkurz1XMpbVREtmh4c7+/gD3s24zhmq0NteQ03LLuacr/Mj2SDE43S/dzznNq2PSnwYJaOz75iPVWLFhbROmEkRKCy4OjJARzvBz27rpzyoFTbaDixCL0vPJicd/JXN1C9/LIiWzX16Rzs5r7XNhGLmzhkVWWVvGnZ1VQGKops2dRg4MABOrY8Tqx/eCTEsm3qV69i1kUXYgekB1qKSEubBUdODLs3am0W90aj4bou/S9tIj7oOSn1Bai58HosGX46I3pCvdy7+xEiXlDHci/gYE1QevLjEevvp+OxJxjYvz8tv6KlhaYrr6CsYVaRLBOyQQQqC2T/U3aEDu0k3L4vma5eeSX+aok9dCb0egEHh6IhAAK+ADcs20B9RV2RLSttXMeh56WX6Xr2OZzYsP88XzBI46WXUHOuktWkUwARqHEIhWOc7DGNg21ZtMyWCdSRiPacYGDX8Mqy8oXnUz5PfJVNlFA0xIvtO9l5Yndyzsln+3jjOVcxu1IWm4xFqL2djs2PEe7sTMuvPfdcGi99vXiCmEKIQI1DW0d/ckK1uaGSsoAs5c3EiYaNn73EvFPtbKrPu7TIVk1NIvEoLx9/lZfadxGNDz/525bN9UuvYG6N7MsZjXg4TOdTz9D7yi5SowKVNTTQdOV6KlpaimecMCFEoMZB9j+NTXLeacjM01n+gNnv5JOfVi7EnDivnNjNtmM7CcXCaeeaqhq5ZOFFzK2WsCQj4bou/btf4+STTxEfGo4EZPl8NKx9HfWrLsDyyYPlVERakXGQ/U9jEzrwMuHjwxPQNSs34KuS+ZFscVyH3Sf38/zRlxiIDKadq6+oY+38VSyub5X5klGInDpFx+YtDLUdTcuvWrSI2esvJ1Ari5qmMiJQYzAwFKWr18w/+WyZf8ok2t1O/6vD804Vi1YQbDmriBZNHVzXZX/3Iba2vURPqDftXHWwitfNu4CljYuxLfFmMBJOLEb38y9y6sVtyaFlAH9VFbPXX0bVkiUi6tMAEagxSO09zW2swu+TxiKBEwnRt+0h8Obn/HXNVJ13SZGtKn1c1+VI7zG2tm3n5EBX2rnyQDkXtiznvKZz8InbolEZPHSYji2PEe0dFnbLsqi7YCUNa1+HXSZhXKYLIlBjIPNPI+O6Ln0vPUp8yNSPFQhSu+ZaLGlUx+R4fwfPHtnOsb7jafkBX4BVc89n5RwlLovGIDYwwMknnqR/z960/PLmZpquvEKCCE5DRKDGQDbojszQvm1EThxMpmsu2ICvsraIFpU2XYOneLZtW1o4djDLxpc3L2N1y3JxVzQGruPQu/MVOp9+BieasrKxLEjjJRdTe/75Mpw3TRGBGoXegQi9A2bnfsBv0zxLXMoARLuOMbD72WS6YskFBOcsLp5BJUxvuJ/n2l5iT9eB5FAomOGoc2cv5cJ5K6gqqyyegSWME4kweOQIg4cOM3jwUFrYdYCaZefQeOkl+Cul/qYzIlCjkOo9omV2FT6Zf8IJD9GbMu8UqJ9DlVpXZKtKj8HIEC8ce5ldHXvSnJICnN2wiNfNv4C6culxpuK6LpHOLgYPHWLw0GFCx46dVncAgbo6mq5cT2VraxGsFAqNCNQodPeFksetTTK8Z+adHsEJmSdZOxCkZs11Mu+UQjgWYVv7TnYc18RTVpYBLKyfz9r5q2isFN9vCeLhMENH2hg8eIjBw4dP6yWlYpcFqV+1klkXrpE9TTMIEahRWNRSy8t7T1IR9HPeEnEtM7T3BSIdh5PpmlXX4KuQhSMA0XiUHSc024+9QiTF+wPA3JpmLm5dLZts8XpJJzsZPGyG7ULt7SP2khIEZ8+mcuECKhctpHzOHAkgOAMRgRqF+U3VvP+PV+D3WTN+AjbSeZSB3c8l05VnraGsWWLnxJ04uzr28OKxHUlnrgkaK2exdv4qFtTNm9G/n3g4zNDhI8mhu9jg4Khl7bIglQtbqVywgMqFC/BXyb7DmY4I1BgE/PLE5oQH6dv2IAnfZoGGFirV2uIaVWQc12FP5wGeO/oS/eH0Yana8hrWzl/FWbMWzkhhSvaSDh1i4OAhwsePj91LamoyvaSFCymf0yy9JCENEShhVFzXoXfbwzhh49/MLqugZvW1WDPUu4Hruhw8dYStbdvpHupJO1dZVslF81agGs/GnmGNbDwcNqvtvF5Sqj+8THzBIBULFlC1aCEVC1plFZ4wJiJQQhquEyd26jjRrmNEOg4T7W73zljUrLoaX/nMHHZp621na9t2TvSfTMsP+oOsaVnO+c3L8M+QBSOu6xLu6PBE6TCh9uOkeg9Px6K8uckTpQUEm6WXJGSPCNQMx43HiJ46TrTzKNGuY8ROHU/zbZagcumFlDUtKIKFxcFxHHrDfXQN9bCr4zXaetvTzvt9fi6Ycx4XzD2Pshng/SEeCjF4+Ehyxd14vaTEsF3FggX4K2UPoTAxRKBmGG4smiJIR4n1dIwoSKmUz19G5TkXFcjCwhKNR+kJ9dEd6uFUqJfuIfPeE+odce7Etm3Ob1rGmpblVASmT+A713WJDw0R6+sn1t9PrK+PaG9f8jjc2cV4vaTEirtgU5P0koS8IAI1zXFiEWJd7US7TA8p2nMizavBSPgqawk0zCPQOI/ArBZ8lVN/H1goGqI71MupUA/dQ+b9VKj3tEUOo2JZqMazuGjeSqqDU2+Y043HiQ0MJAUo2tdHzBOgaJ95d+NjP6ik4quooHJBK5ULF1K5oBVfhfSShPwjAjXNcKJhI0Rdx7we0klGf/I1+KrqjRg1zCPQ0DJl55lc12UgMnhab+jUUM9pQQCzoaqsklkVdTRU1HPu7LOpryjdOFdONEqsLyE2fcR6+4n19xHtMz2g2MAg4/0OxsaifE5zcugu2Nw0I1cpCoVFBGqK40RCw72jrmPEejsZryHyVzcQaGxJCpIdnForqRLzQyP1iGLxWE73siyL2mANsypqqS+vo768llkV5r1UPIub4beQEZ6E4CR6Pl46Hs5dgDOxy8oI1NTgr67GX1ODv6Yaf3U1gdoaAvX1+ILi0FYoLCJQUwwnPJjsHUU7jxHr7xrnCgt/bSOBhpbkyy4r7eGYuBMnHI8QiUUIxyP0hvvTekS9oT4c18npnj7blyI+w0JUG6ye9NhLruviRqM4kQjxcAQnEsYJR3DCYZxIJPmKJ9Ip5+JhU3a8ecJs8FdWpgtP4tgTJREgodQQgSpx4qGBFEE6Snzg1NgXWBb+2ibTQ5rlCVKgsA2P67rEnJgnMlHC8QjhWIRIPJJ+7AnQ8HGUSCxCzMmtF5RKmb+MWRk9ofqKOmrKqiY8JOXG46eLSIaQnCYwEXMu7h2f2fDa+Fi2jb+qCn9tzQi9oBoCNdXiw06YcohAFQA3HsONhnGiEdxYGCcSwo1FvLzw8HEk5TjqlYlFx765ZRGoa/YWNbTgnzUX2z/xiKKu6+K4DnEnTsyNE3PiwwIypshEh49jkZx7ODkaSaWvnFmBaurLqqjzV1Lrr6LGX0GZ64N4HDcex+2J4XT24MQ6ORWL4cTi5ruIxXBjcZyYdxzPSMdi5jgex43F89J7OVPsQAB/jREaf4oABTwB8lVVypyQMO0ouEAppW4FbgHqgQeAD2mtT4xSdhnwHWAd0A58Tmv9owKZmsR1Xdx4FDcSNgITjeBGQ7jRCE4snJIfxo2mCo+XnmAD57ouDhDHNS/XJW5bWLWNWLWzsepmQ1U9jm0ZQXHCxE7uJe4Ji8lLvMdS8p2MtPcejxFz4xB3sFwXXBfLSXl3XKyMYxwHy0nPC3ppy3FSyqVe64xwPwfLBct797k2ASx82JThI2j5Kbf8lOGjDB+23Q8Mb5qNAJ15+bYnB9vvxy4rww4GzXtZGXawDLssiC9Yln4upYwvaNKW3y8CJMw4CipQSqmbgE8Bfw7sB+4Cfg5cM0LZAPB74AVgLUakvqOU2q+13jzZtsYHezn43L10nThCLBbFcR1MO+u94xoBcVzv2LgGchLnHBfHdQHz7rrg4uA4JPfXmHwHF3Ad17y77vALFwsb2xfA8pdh+4LYPj9W2ylw92CZC5ICgEuaGIx4zsuzXfA5LmUZQpQvLMvCZ/nw2Ta25cNn2fjsRNr20n7vOL2cbdtQUm2xlSYW4wuMl045J8NrgpA7he5B3QJ8VWv9GwCl1PuBvUqpFVrrHRll3wjMB1ZrrQeAHUqpK717TLpA7Xji9+x96GFsJz+NtoXxim5bNpYFWDZggeV5S0+8knnD5838Rdh7TT6WZXn22tiezcMiYuOzvbRlY9vD4jMsPL5Jf9q3fD4snx874DfHfj+23296Gol04lxGuWRZnw8rkDj2rvX7htPJ6yf/7xEE4XQKJlBKqSCwCvhEIk9rvU8pdQDTO8oUqIuBZzxxSvAw8PnJtdQQ6gtjZ06jWHZSRNJExWvQ00XGHi5zBiTEwvbuZ2eIx0jnbcyxZVnYnq2WZSePbSvletKPbdvGsn1YtgW2dx+vkca2zbFtm1dmnm/4GNuXLGP5RijvS3yOnZKXcp+08n5svy9NfEQwBGH6U8geVCNgA5nzTR1A8wjlm3Mom3dWbHgzbihK6ORJ8zTtNaa2bXkNtHmqtryhKSsl37Ztr6G3TeNvm56GlXi3bGzf8LEv7TpzL58dMA21ZSUFAdsabtQTwug15lh2Mj9hC97nk2j0LWu4nG0Pl7NSy0vDLwhCaVBIgcq15StqS1k1q4HXv+uDxTRBEARhRlNIj44nAYfTe0BNnN5TAjieQ1lBEARhmlEwgdJah4HtwIZEnlJqCbAYeGaES54F1imlUv3wXD1KWUEQBGGaUehVfHcDdymlXgQOAF8DHtVa71BKXQz8BLhGa90G3A8cBb6vlPo8ZiHFO4HrCmyzIAiCUAQKGrRFa/0D4E7gW8BTQB9GdAAqAQUEvLIR4E1AC/A88A+YTb2TvsRcEARBKD4F9yShtb4TI1KZ+ZvIWBihtdbAVQUxTBAEQSgpJOylIAiCUJJMd2exPoD29vZi2yEIgjCjSWmHs/b7Nd0FqgXg3e9+d7HtEARBEAwtwN5sCk53gdoKrAeOAcWPmSAIgjBz8WHEaWu2F1huHj1YC4IgCEK+kEUSgiAIQkkiAiUIgiCUJCJQgiAIQkkiAiUIgiCUJCJQgiAIQkkiAiUIgiCUJCJQgiAIQkkiAiUIgiCUJCJQgiAIQkky3V0dTQuUUrcCtwD1wAOYuFgnRii3Gvg0cDlQA+wAbtNaP1RAc0uSbOsw45qLgKeBJ7TWV026kSVOLnWolPIDnwFuAuYAB4GPaq0fLJC5JUeO9fdm4HOYGHldwK+Bv/Xi5M0YpAdV4iilbgI+BXwUuBTz4/75KMXXYBqCtwOrgT8A9yilzi2AqSVLjnWYuCYI/AiQAJlMqA6/DfwJ8AFMI3szxifmjCSX+lNKnY0RpH8HlgN/DrwN8/A5oxBffCWOUuoF4B6t9e1e+iyMJ+CVWusdWVy/E/i21vrrk2tp6TKROlRKfRkoA7qBq2Z6DyqXOlRKrQReAJZprfcX3NgSJMf6uxH4ptZ6dkreVwCltf6jAppddKQHVcJ4T/GrgEcSeVrrfcABYF0W11tAI3BqkkwseSZSh0qpy4A3A7cWwMSSZwJ1+CZgD/BnSqnDSqlXlVK3KaWyjgM0nZhA/T0P1Cil/lQpZSmlFgAbMcOCMwoRqNKmEfMdZY5TdwDNWVz/MYyL+3vybNdUIqc6VEpVAj/EzA8MTr55U4Jcf4eLgbOA6zHDzbcCHwc+OXkmljQ51Z8nXm/GDDFHgEPA5pk4CiICVdpYE71QKbUR+CLwbq11d/5MmnLkWodfBP6gtZa5p2FyrUMbMzz6F1rrZ7TWvwH+CTMfNRPJqf6UUvOA/4P5LV6EEauNSqn/PQm2lTSyiq+0OQk4mKesXSn5TZz+NJZEKbUe+BXwAa31jBsWyCDXOrwCWKGU+l9e2gYspVQMOFtrfXAyjS1Rcq3D40A4o640sGDSLCxtcq2/jwB7tdZf9NIvKaVqgK8BX51MQ0sN6UGVMFrrMLAd2JDIU0otwQyhPDPSNUqpi4H/Aj6ptf5FAcwsaSZQh2/DrIBMvL4FPOcdH51kc0uSCdTh00BQKdWakrcUM1Q145hA/VVyegRwhxnYXksPqvS5G7hLKfUiZlL1a8CjWusdnhj9BLhGa93mrZ66H7PE93dKqbnePYa01j1FsL1UyLoOtdZ7Uy9USp0ABrJZMTnNyboOMdsbdgHfVUr9NSbM963AV4pieWmQS/3dC/ylUupj3vFi4A5m4FzyjFPkqYbW+gfAnZgn+aeAPuCd3ulKzB6TgJd+GzAL+BvMnpPE618LaHLJkWMdCiOQSx1qrWOYlXwWsBX4LmZOZcb+DnOsv4eA9wP/E7PZ/ieYFXx/VViri4/sgxIEQRBKEulBCYIgCCWJCJQgCIJQkohACYIgCCWJCJQgCIJQkohACYIgCCWJCJQgCIJQkohACcIMQCm1WCnlKqUuL9DnfUMpdXdKepNS6nuF+OxR7HmnUmqr5+FfmCKIJwlhUlBKNQJ/hwla+lS30QAABvhJREFUtwjoBV4Fvgf8zNvMma/P2gP8VGv92Xzd07vv94ClMz0WVK4opRQmku7SSbj3RL/rXwC3Ae8Gfppvu4TJQXpQQt7xfLC9gPFs8Y/AhcBlwPeBvwZWFM+66YNSqqzYNozCx4F7tdbtxTYkgdbaxfz+Zpw3hqmMeJIQ8o5S6h5gLSYCaE/GuQBQprUe8I7vAN6L8ey8B/i81vpnKeVdTJjsS4A/xQRf/IbW+p+985uAKzNMWAIcBL4DXA3Mw7h8+gXwOc95Z+L+1wK3Y8IaRIFtGDcz7/XyU7lJa/0jpdTNmNhGS4ABYCfwLq31kVHqYxOwD+O5+mZMKIr/B9yitR5KKXeL97cuBg5j4gF9KdHbVEodwDz9NwD/A9intV47yme+A/gCkHhY+CLwn8B6rfXj3lDXqPXjRXzdA1yutX4y5b5XAo9iepb7RvhcG+O9+2MZ3+MZ10Eevuslng3naa1fHanehNJCelBCXlFKNQA3AHeP5KBWax3VWg94yS8AH8Q81a7ANL4/VUpdk3HZ7cAWjEfxLwNfUkolPEO/FeN88ysYp6QtmIbNwoR9eBdwnvcZNwGfSrH1Woxj0+cxArgO4/csAPwL8DOM37TEfX+plLoI40/tToz/tKu8a8bj7ZjAdesxw0xvBr6UYstnMb3LWz17/xLjiy1TJD+OaeQvAd430gcppdZgGuhfYSK5/gun+8Ebs3488XkQ8/2kcjPw8Eji5LES4w/y2RHOnWkdTPi79v6m/Zi624AwJZA5KCHfLMU8+LwyViEvcu3HgU9orX/lZX9BKbUW+DTwcErxX2qtv+sdf10p9RFMtNZHtdZdSqk40D/CkNJtKccHlFJnY2LtJBq824H7tNapwz7JJ2ul1BAQSb2vUmohptf0W611r5f98lh/q0cX8GGtdRzYpZS6DfiGUupWwAX+Fnir1vp+r/x+r8zXgc+k3GdrFvMvnwSe1lonQtZrLwjeNxIFtNYO49fPt4H/q5T6K611j1KqHjNsO6Iweizx3ttGOHdGdXCG33WCNky0X2EKIAIl5JvEKqnxxo6XYoZ5tmTkb8Y8QaeyLSPdBswZzxCl1AcxT/yLgSrM7z111OAi4O/Hu08GD2KGifYrpR4EHgH+Q2t9cpzrnvUa5gRPYP7+s4EgUAH8f29IM4EPKFdKNWmtOxL3ycLG80kXeIDHMwtlUT+/A3owPZNvAu8B+jFDhaNR4b2HRziXrzo4jSz+lgShFBuFEkeG+IR88xomuNryLMtnCpk1Ql5khGvG/O0qpW4E/g34JWbIcQ1mwUZmWI2cJmG11v3A64C3ALuBDwN7vKG/XEhd7pz4W24kPVjiSuAcTM8jwQDjM1IdppFN/XhzX99neJjvZuBHWuvM7yOVhIjMytLOBLnUQc5/SwoNKTYKJY70oIS84g3D3Ad8TCn1jdEWSWAm4MOYSe+dKUWuyEhnQwTzpJ3KFcCLWutkiGyl1OKMMs8DbyBl6CuL++L1ArYAW5RSt2OGM9/l3W801iqlfCk9iEu8++/FNNQh4Cyt9b1j3CNbdmJWTaaSmc6mfsDEcvqUUurDmPmsd4zz2S9ixHE5p/eO81EHE/2uUUpVYHprz43zNwglggiUMBl8BDN887xS6h8wQ3QR4PWYYIrv01pvU0p9HbhDKdXhlbkRs2/quhw/bz9wmTc/NIh52tbAB5RSf4IJ+vZHmEn2VO4A7lNK3QX8ACOYlwBPaa21d98blVLLMZPwfcBGzBzGFsyT+EXAAsaZc8MsDvg3pdS/etffAXw3sWBEKfUFzBwcmGFEP6b3sEZr/Xc51sfXgK1KqX8CfowRi09mlMmmftBaH1JK3Y9ZZLFJa717rA/WWncqpZ7FPHhkClQ+6mCi3zXA5ZjvePNYf4NQOsgQn5B3tNaHMHuf/hP4LGaZ85OYoaIvYxoRMIshvgvchXnqfw/wHq115vzJeNwO1GEaqg5gId4EP/BDzFP9Os+WVDsfwAwJrQOewczvvA+z3BzM8NZWz/YOTATUbuCPgfsxQ3z/DHweI3Bj8WuMwD2OWWF3L2ZRQMKWO4BPYIbRtnvlPoFZtZYTWuvnMT26P8Ms4Ph7716pjFs/KXwH0+v9TpYmfBOzTD+TfNTBhL5rj/cA/+4N0wpTANkHJQiTjLd/Z4/W+uZi2zIRvFWT/wjMT91XNEb5APAScKvW+reTbV82KKUWYGxao7U+UGRzhCyRHpQgCCOilKpWSq3G7E26OxtxArPXDdMTrZpM+3JkMfBBEaephcxBCYIwGndjhgofJGVDbTZorZ8luyXxBUFr/VixbRByR4b4BEEQhJJEhvgEQRCEkkQEShAEQShJRKAEQRCEkkQEShAEQShJRKAEQRCEkuS/AVFGjZjtnv+YAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for gamma in gamma_array:\n", " label = 'gamma = ' + str(gamma)\n", " plot(frame[gamma], label=label)\n", " \n", "decorate(xlabel='Contacts per day (beta)',\n", " ylabel='Fraction infected',\n", " loc='upper left')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's often useful to separate the code that generates results from the code that plots the results, so we can run the simulations once, save the results, and then use them for different analysis, visualization, etc." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Contact number" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After running `sweep_parameters`, we have a `SweepFrame` with one row for each value of `beta` and one column for each value of `gamma`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(11, 4)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frame.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following loop shows how we can loop through the columns and rows of the `SweepFrame`. With 11 rows and 4 columns, there are 44 elements." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.1 0.1 0.0846929424381071\n", "0.18 0.1 0.7086227853695759\n", "0.26 0.1 0.9007802517781114\n", "0.33999999999999997 0.1 0.9568878995442757\n", "0.42000000000000004 0.1 0.9770452570735504\n", "0.5 0.1 0.9845958628261559\n", "0.58 0.1 0.9874003453175401\n", "0.66 0.1 0.9884042490643622\n", "0.74 0.1 0.9887434214062726\n", "0.82 0.1 0.9888495150524135\n", "0.9 0.1 0.9888795705171926\n", "0.1 0.3 0.0054435591223862545\n", "0.18 0.3 0.015914069144794984\n", "0.26 0.3 0.055379762106819386\n", "0.33999999999999997 0.3 0.2678641677332422\n", "0.42000000000000004 0.3 0.5245629358439001\n", "0.5 0.3 0.6860504839161878\n", "0.58 0.3 0.7883785563390235\n", "0.66 0.3 0.8550657464101674\n", "0.74 0.3 0.8994791356903035\n", "0.82 0.3 0.9294693026191699\n", "0.9 0.3 0.9498533103273188\n", "0.1 0.5 0.0027357655411521797\n", "0.18 0.5 0.006118341358324897\n", "0.26 0.5 0.011639469321666152\n", "0.33999999999999997 0.5 0.022114766524234164\n", "0.42000000000000004 0.5 0.04781622666891572\n", "0.5 0.5 0.13243803845818214\n", "0.58 0.5 0.30326419264834004\n", "0.66 0.5 0.4641102273186152\n", "0.74 0.5 0.5884769725281787\n", "0.82 0.5 0.6827496109784223\n", "0.9 0.5 0.7545952983288148\n", "0.1 0.7 0.001826769346999102\n", "0.18 0.7 0.003782561608418833\n", "0.26 0.7 0.0064266722107564345\n", "0.33999999999999997 0.7 0.010190551933453973\n", "0.42000000000000004 0.7 0.015945826561526877\n", "0.5 0.7 0.025707925046422053\n", "0.58 0.7 0.04500775311679983\n", "0.66 0.7 0.09069406882939202\n", "0.74 0.7 0.18979521165624091\n", "0.82 0.7 0.3183431867354656\n", "0.9 0.7 0.4369993744563133\n" ] } ], "source": [ "for gamma in frame.columns:\n", " series = frame[gamma]\n", " for beta in series.index:\n", " frac_infected = series[beta]\n", " print(beta, gamma, frac_infected)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can wrap that loop in a function and plot the results. For each element of the `SweepFrame`, we have `beta`, `gamma`, and `frac_infected`, and we plot `beta/gamma` on the x-axis and `frac_infected` on the y-axis." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def plot_sweep_frame(frame):\n", " \"\"\"Plot the values from a SweepFrame.\n", " \n", " For each (beta, gamma), compute the contact number,\n", " beta/gamma\n", " \n", " frame: SweepFrame with one row per beta, one column per gamma\n", " \"\"\"\n", " for gamma in frame.columns:\n", " series = frame[gamma]\n", " for beta in series.index:\n", " frac_infected = series[beta]\n", " plot(beta/gamma, frac_infected, 'ro')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it looks like:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure to file figs/chap06-fig03.pdf\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_sweep_frame(frame)\n", "\n", "decorate(xlabel='Contact number (beta/gamma)',\n", " ylabel='Fraction infected',\n", " legend=False)\n", "\n", "savefig('figs/chap06-fig03.pdf')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It turns out that the ratio `beta/gamma`, called the \"contact number\" is sufficient to predict the total number of infections; we don't have to know `beta` and `gamma` separately.\n", "\n", "We can see that in the previous plot: when we plot the fraction infected versus the contact number, the results fall close to a curve." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the book we figured out the relationship between $c$ and $s_{\\infty}$ analytically. Now we can compute it for a range of values:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "s_inf_array = linspace(0.0001, 0.9999, 101);" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "c_array = log(s_inf_array) / (s_inf_array - 1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`total_infected` is the change in $s$ from the beginning to the end." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "frac_infected = 1 - s_inf_array\n", "frac_infected_series = Series(frac_infected, index=c_array);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can plot the analytic results and compare them to the simulations." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure to file figs/chap06-fig04.pdf\n" ] }, { "data": { "image/png": "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IL3P9DebB5L3P0UONNO2bj3xSITO4jLcSIS2devxtOzPdYhK5Z1YLIbfr1/e8kkgECASifS+Y4Y0QeWB5P1PoR07cPw+PD4f4biD4/fj+HxE176f6xCVyks69J1f+vv3oQkqD3Td/9TaBl4v8UiEcNyDt7gYx+fDqz0opdQwpAkqDyTvf/KVlxEPBvEUFODWN+AtLMCNRqmoqsh1iEqpPLZt2zZEhG3bth3zsS677DLuvvvufojq2GmCyrGWNWtZf8+9bH34VwRGj6agtpbi8eOIFBYTj0Rxo1Ea5p2a6zCVUv3g4YcfZtq0aTz44IO5DuWI7r77bq644opchwFogsqp9OU1HK8HB3BjMdrawnj8fkonT6Lu+Em5DlUp1Q+eeOIJPvvZz7Js2bJch3JElZWVlJSU5DoMQBNUzrSsWcua799J87vvsf/1Nzjw1l+JRyIU1tVSUFlJydzTKZ8+DX9FhU4zV2oI2Lx5Mxs3bmTp0qU0Njayfv36rtcuu+wy7rjjDq6//npmz57NggULePrpp7te37NnD1/96lc544wzmD17Npdeeinvv9/95KnGxkamTZt2yPEBvvSlL3HrrbcC8Kc//YmLL76YE088kblz53LllVceEktyiM91Xe644w7OPPNMZs6cycKFC3nkkUf67WfSG01QOdCyZi0bf3I/HXv3gccBHCIHDtDyviHWGaFtVxOdiSoSXo9DYYE3twErpY7ZsmXLOPfccyksLOT8888/rBf18MMPM2XKFJYtW8bixYu59tpr2bdvHwDhcJg5c+bwwAMP8NhjjzFlyhSuuuoqOjo6Dmunvr6eefPm8cQTT3Rt279/Py+//DJLliwhGo3y1a9+lSVLlvD73/+en//858ybN6/bmJ9++mmeeuop7rrrLp555hluvfVWampq+vGn0jOtJJEDTS+sINLSgidxD4fjccABNxIhtGUL/pmzu/YtLtIqEkplYpXZzavv7SISjQ9Ie36fh9Omj2S21PW6r+u6PPnkk9x8880AXHjhhXzzm99k6dKlXTcaz5kzh89+9rMAfOUrX+GnP/0pq1ev5qyzzmLMmDF85jOf6Tret7/9bZ566inefvttTj318GvUF198MXfddRdLly7FcRx+//vfM27cOE444QT2799PW1sbixYtYuTIkQAcf/zx3ca9a9cuJk6cyJw5cwAYPXp0H35Cx057UDkQbtxNPBLBV1oK8Thu3AXHwY3FiLUHKZ578NtMcZF+h1AqE2+taRqw5AQQicZ5a01TRvu+/vrrhEIh5s6dC8App5yC67qsXLmyax8R6Xrs8/moqqrq6kFFIhHuuusuFi1axJw5czjllFNob29n586d3bZ37rnn0tzczOuvvw7Ak08+yZIlSwAYMWIEF110ER/60IdYunQpjz/+OMGUdehSnXfeeaxdu5ZFixZx22238dprr2X0efuLJqgBkpyt9+5Nt9CxZw+44Hg9+CvKcTx2YULH66X8hBk4ow5+SynW609KZeSkqbX4fQN3SvP7PJw0tTajfZctW8bevXuZOXMm06dPZ8aMGTQ2Nh4yDOfzHfpl1HEc4nGbcO+//36WLVvG0qVLeeihh1i2bBmVlZVEo9Fu2ysqKuKCCy7gySefZMuWLbz99tssXry46/U777yT+++/n4kTJ3LfffexePFimpubDzvOmDFjePbZZ/na175Ge3s7X/ziF/nOd76T0WfuD/r1fADsfH452x7+FW40hre0BG9hIfFwmHhnB96SErylJXg6fBTU1TH6wxezKXywVEiJ9qCUyshsqctouG2gdXR08Ic//IE77riDqVOndm3fuHEj3/rWt7jhhht6PcaqVau48MILOe+88wA7EeLAgQM9vueSSy7hqquuYsSIEZx66qmMGjXqkNdnzZrFrFmz+NKXvsS8efNYuXJl1/FTFRcXc8EFF3DBBRcwb948rr/+eq677rpMPvox07Nflux8fjk7n3iKjj17iXeE8RYF8I+oxI1GiYTCFI0aSbStHTdmJ0OUTTue0R++hPKpUwiuPtht1x6UUoPb888/j8/nY9GiRXi9Byc8TZkyhVtuuYXnnnuu12OMHTuWF198kQ996EMAfO9736OwsLDH98yZM4fKykoeeOABbrrppq7tW7du5dFHH2XBggXU1NTwxhtvEAqFGDdu3GHHePzxx3Fdl1mzZuHxeFi+fDkTJkzI8JMfO01Q/aRlzVq2P7aMtrXriIZCxMNhe40JIO4SCwbx+P34SkuIA7GODgKjG5hxw/WHHSsYPthtD2gPSqlB7YknnmD+/PmHJCewQ3jz588/ZJjvSL785S+zefNmLr30Uqqqqvj617/Oli1ben3f4sWLue+++zj//PO7tgUCAdasWcOjjz5KS0sLY8eO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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_sweep_frame(frame)\n", "plot(frac_infected_series, label='Analysis')\n", "\n", "decorate(xlabel='Contact number (c)',\n", " ylabel='Fraction infected')\n", "\n", "savefig('figs/chap06-fig04.pdf')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agreement is generally good, except for values of `c` less than 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** If we didn't know about contact numbers, we might have explored other possibilities, like the difference between `beta` and `gamma`, rather than their ratio.\n", "\n", "Write a version of `plot_sweep_frame`, called `plot_sweep_frame_difference`, that plots the fraction infected versus the difference `beta-gamma`.\n", "\n", "What do the results look like, and what does that imply? " ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Solution\n", "\n", "def plot_sweep_frame_difference(frame):\n", " for gamma in frame.columns:\n", " series = frame[gamma]\n", " for beta in series.index:\n", " frac_infected = series[beta]\n", " plot(beta - gamma, frac_infected, 'ro')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "plot_sweep_frame_difference(frame)\n", "\n", "decorate(xlabel='Excess infection rate (infections-recoveries per day)',\n", " ylabel='Fraction infected',\n", " legend=False)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# Solution\n", "\n", "# The results don't fall on a line, which means that if we know the difference between\n", "# `beta` and `gamma`, but not their ratio, that's not enough to predict the fraction infected.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Suppose you run a survey at the end of the semester and find that 26% of students had the Freshman Plague at some point.\n", "\n", "What is your best estimate of `c`?\n", "\n", "Hint: if you print `frac_infected_series`, you can read off the answer. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "9.211261 0.999900\n", "4.642296 0.989902\n", "3.987365 0.979904\n", "3.612133 0.969906\n", "3.350924 0.959908\n", "3.151808 0.949910\n", "2.991711 0.939912\n", "2.858363 0.929914\n", "2.744467 0.919916\n", "2.645332 0.909918\n", "2.557767 0.899920\n", "2.479505 0.889922\n", "2.408879 0.879924\n", "2.344627 0.869926\n", "2.285771 0.859928\n", "2.231541 0.849930\n", "2.181315 0.839932\n", "2.134590 0.829934\n", "2.090947 0.819936\n", "2.050040 0.809938\n", "2.011573 0.799940\n", "1.975299 0.789942\n", "1.941002 0.779944\n", "1.908499 0.769946\n", "1.877628 0.759948\n", "1.848249 0.749950\n", "1.820238 0.739952\n", "1.793487 0.729954\n", "1.767898 0.719956\n", "1.743384 0.709958\n", " ... \n", "1.181034 0.290042\n", "1.173263 0.280044\n", "1.165630 0.270046\n", "1.158132 0.260048\n", "1.150765 0.250050\n", "1.143524 0.240052\n", "1.136407 0.230054\n", "1.129409 0.220056\n", "1.122527 0.210058\n", "1.115758 0.200060\n", "1.109099 0.190062\n", "1.102547 0.180064\n", "1.096099 0.170066\n", "1.089751 0.160068\n", "1.083503 0.150070\n", "1.077350 0.140072\n", "1.071291 0.130074\n", "1.065323 0.120076\n", "1.059444 0.110078\n", "1.053651 0.100080\n", "1.047943 0.090082\n", "1.042317 0.080084\n", "1.036772 0.070086\n", "1.031305 0.060088\n", "1.025914 0.050090\n", "1.020598 0.040092\n", "1.015356 0.030094\n", "1.010185 0.020096\n", "1.005083 0.010098\n", "1.000050 0.000100\n", "Length: 101, dtype: float64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "frac_infected_series" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.158096819542062" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Alternative solution\n", "\n", "\"\"\"We can use `np.interp` to look up `s_inf` and\n", "estimate the corresponding value of `c`, but it only\n", "works if the index of the series is sorted in ascending\n", "order. So we have to use `sort_index` first.\n", "\"\"\"\n", "\n", "frac_infected_series.sort_index(inplace=True)\n", "np.interp(0.26, frac_infected_series, frac_infected_series.index)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }