diff --git a/book/book.tex b/book/book.tex index 6f003ec7..9142a392 100644 --- a/book/book.tex +++ b/book/book.tex @@ -494,7 +494,7 @@ \section{Running Jupyter} \section*{Contributor List} If you have a suggestion or correction, send it to -{\tt downey@allendowney.com}. Or if you are a Git use, send me a pull request! +{\tt downey@allendowney.com}. Or if you are a Git user, send me a pull request! If I make a change based on your feedback, I will add you to the contributor list, unless you ask to be omitted. \index{contributors} diff --git a/code/chap01fig/bike_to_olin.png b/code/chap01fig/bike_to_olin.png new file mode 100644 index 00000000..7d9366a3 Binary files /dev/null and b/code/chap01fig/bike_to_olin.png differ diff --git a/code/chap01fig/dec.png b/code/chap01fig/dec.png new file mode 100644 index 00000000..237460cb Binary files /dev/null and b/code/chap01fig/dec.png differ diff --git a/code/chap01fig/decloc.png b/code/chap01fig/decloc.png new file mode 100644 index 00000000..df621c24 Binary files /dev/null and b/code/chap01fig/decloc.png differ diff --git a/code/chap01fig/plot.png b/code/chap01fig/plot.png new file mode 100644 index 00000000..fafffb28 Binary files /dev/null and b/code/chap01fig/plot.png differ diff --git a/code/chap01fig/run_steps1.png b/code/chap01fig/run_steps1.png new file mode 100644 index 00000000..a6e2b257 Binary files /dev/null and b/code/chap01fig/run_steps1.png differ diff --git a/code/chap01fig/run_steps2.png b/code/chap01fig/run_steps2.png new file mode 100644 index 00000000..42c5a8eb Binary files /dev/null and b/code/chap01fig/run_steps2.png differ diff --git a/code/chap01mine.org b/code/chap01mine.org new file mode 100644 index 00000000..698405c7 --- /dev/null +++ b/code/chap01mine.org @@ -0,0 +1,303 @@ +#+title: Chapter 1 Notebook +#+author: Kawin Nikomborirak +#+latex_header: \usepackage[margin=1in]{geometry} +#+options: toc:nil num:nil + +#+BEGIN_SRC ipython :session + %matplotlib inline + from modsim import * + plt.style.use('ggplot') +#+END_SRC + +#+RESULTS: + +* Exercise 1 +In reality, air resistance prevents the penny from reaching this velocity. +At about 20 meters per second, the force of air resistance equals the force of gravity and the penny stops accelerating. +As a simplification, let's assume that the acceleration of the penny is a until the penny reaches 20 meters per second, and then 0 afterwards. +What is the total time for the penny to fall 381 meters? + +#+BEGIN_SRC ipython :session :results output :exports both + a = 9.80665 + termV = 20 + totalDisplacement = 381 + + + def displacement(a, v0, v1): + return (v0 ** 2 + v1 ** 2) / 2 / a + + + def time(a, v0, v1): + return (v1 - v0) / a + + + dToTerm = displacement(a, 0, termV) + tToTerm = time(a, 0, termV) + dLeft = totalDisplacement - tToTerm + tAfterTerm = dLeft / termV + tTot = tToTerm + tAfterTerm + print("It will take %f seconds for the coin to fall" % tTot) +#+END_SRC + +#+RESULTS: +: It will take 20.987461 seconds for the coin to fall + +* Exercise 2 +Exercise: What happens if you spell the name of a system variable wrong? +Edit the previous cell, change the spelling of wellesley, and run the cell again. + +#+BEGIN_SRC python :session :results output :exports both + from modsim import System + + bikeshare = System(olin=10,wellesley=2) + bikeshare.wellesle +#+END_SRC + +#+RESULTS: +: +: >>> >>> Traceback (most recent call last): +: File "", line 1, in +: File "/usr/lib64/python3.6/site-packages/pandas/core/generic.py", line 3081, in __getattr__ +: return object.__getattribute__(self, name) +: AttributeError: 'System' object has no attribute 'wellesle' + +* Exercise 3 +Exercise: Add a third attribute called babson with initial value 0, and print the state of bikeshare again. + +#+BEGIN_SRC ipython :session :results output :exports both + from modsim import System + + bikeshare = System(olin=1, wellesley=1, babson=0) + print(bikeshare) +#+END_SRC + +#+RESULTS: +: olin 1 +: wellesley 1 +: babson 0 +: dtype: int64 + +* Exercise 4 +In the cell below, write a few lines of code to move a bike from Wellesley to Olin and plot the updated state. + +#+BEGIN_SRC ipython :session :exports both :file chap01fig/plot.png :results raw drawer + %matplotlib inline + from modsim import (System, plot, newfig) + + bikeshare = System(olin=10, wellesley=10) + + newfig() + plot(bikeshare.olin, 'r8-') + plot(bikeshare.wellesley, 'bo-') + bikeshare.olin -= 1 + bikeshare.wellesley += 1 + plot(bikeshare.olin, 'r8-') + plot(bikeshare.wellesley, 'bo-') +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap01fig/plot.png]] +:END: + +* Exercise 5 +#+BEGIN_SRC ipython :session + def plot_state(): + plot(bikeshare.olin, 'rs-', label='Olin') + plot(bikeshare.wellesley, 'bo-', label='Wellesley') +#+END_SRC + +#+RESULTS: + +Define a function called =bike_to_olin= that moves a bike from Wellesley to Olin. +Run the new function and print or plot the results to confirm that it works. + +#+BEGIN_SRC ipython :session :file chap01fig/bike_to_olin.png :results raw drawer :exports both + def bike_to_olin(): + bikeshare.olin += 1 + bikeshare.wellesley -= 1 + + newfig() + + for _ in range(3): + plot(bikeshare.olin, 'r8-') + plot(bikeshare.wellesley, 'bo-') + bike_to_olin() +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap01fig/bike_to_olin.png]] +:END: + +* Exercise 6 +The following function definitions start with print statements so they display messages when they run. +Run each of these functions (with appropriate arguments) and confirm that they do what you expect. + +#+BEGIN_SRC ipython :session +def move_bike_debug(n): + print('Running move_bike_debug with argument', n) + bikeshare.olin -= n + bikeshare.wellesley += n + +def bike_to_wellesley_debug(): + print('Running bike_to_wellesley_debug') + move_bike_debug(1) + +def bike_to_olin_debug(): + print('Running bike_to_olin_debug') + move_bike_debug(-1) +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results output :exports both + move_bike_debug(0) +#+END_SRC + +#+RESULTS: +: Running move_bike_debug with argument 0 + +#+BEGIN_SRC ipython :session :results output :exports both + bike_to_wellesley_debug() +#+END_SRC + +#+RESULTS: +: Running bike_to_wellesley_debug +: Running move_bike_debug with argument 1 + +#+BEGIN_SRC ipython :session :results output :exports both + bike_to_olin_debug() +#+END_SRC + +#+RESULTS: +: Running bike_to_olin_debug +: Running move_bike_debug with argument -1 + +* Exercise 7 +Change the argument of legend to 'random string' and run decorate again. +You should get an error message that lists the valid location where you can put the legend. + +#+BEGIN_SRC ipython :session + def decorate(): + legend(loc='a random string') + label_axes(title='Olin-Wellesley Bikeshare', + xlabel='Time step (min)', + ylabel='Number of bikes') +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :file chap01fig/dec.png :results raw drawer :exports both + bikeshare = System(olin=10, wellesley=10) + newfig() + plot_state() + bikeshare.olin -= 1 + bikeshare.wellesley += 1 + plot_state() + decorate() +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap01fig/dec.png]] +:END: + +#+BEGIN_QUOTE + /usr/lib64/python3.6/site-packages/matplotlib/legend.py:326: UserWarning: Unrecognized location "a rand". Falling back on "best"; valid locations are + best + upper right + upper left + lower left + lower right + right + center left + center right + lower center + upper center + center + + six.iterkeys(self.codes))) +#+END_QUOTE + +* Exercise 8 +Write a version of decorate that takes an optional parameter named loc with default value 'best'. +It should pass the value of loc along as an argument to legend. +Test your function with different values of loc. +You can see the list of legal values here. + +#+BEGIN_SRC ipython :session + def decorate(loc=0): + legend(loc=loc) + label_axes(title='Olin-Wellesley Bikeshare', + xlabel='Time step (min)', + ylabel='Number of bikes') +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :file chap01fig/decloc.png :results raw drawer :exports both + bikeshare = System(olin=10, wellesley=10) + newfig() + plot_state() + bikeshare.olin -= 1 + bikeshare.wellesley += 1 + plot_state() + decorate(1) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap01fig/decloc.png]] +:END: + +* Exercise 9 + +#+BEGIN_SRC ipython :session + def move_bike(n): + bikeshare.olin -= n + bikeshare.wellesley += n + + def bike_to_wellesley(): + move_bike(1) + + def bike_to_olin(): + move_bike(-1) + + def step(p1=0.5, p2=0.5): + if flip(p1): + bike_to_wellesley() + + if flip(p2): + bike_to_olin() +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session + def run_steps(num_steps, p1, p2): + for _ in range(num_steps): + step(p1, p2) + plot_state() + +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :file chap01fig/run_steps1.png :results raw drawer :exports both + run_steps(100,0.5,0.5) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap01fig/run_steps1.png]] +:END: + +#+BEGIN_SRC ipython :session :file chap01fig/run_steps2.png :results raw drawer :exports both + run_steps(100, 0.2, 0.8) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap01fig/run_steps2.png]] +:END: diff --git a/code/chap01soln.ipynb b/code/chap01soln.ipynb index 887c6034..50e86c79 100644 --- a/code/chap01soln.ipynb +++ b/code/chap01soln.ipynb @@ -7117,7 +7117,7 @@ "metadata": { "kernelspec": { "display_name": "Python 3", - "language": "python", + "language": "python3.6", "name": "python3" }, "language_info": { diff --git a/code/chap02.ipynb b/code/chap02.ipynb index e9b48a66..5fab4f7b 100644 --- a/code/chap02.ipynb +++ b/code/chap02.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -39,7 +39,7 @@ "# If you want the figures to appear in separate windows, use\n", "# %matplotlib qt5\n", "\n", - "%matplotlib notebook\n", + "%matplotlib inline\n", "\n", "from modsim import *" ] @@ -59,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 11, "metadata": { "collapsed": true }, @@ -138,9 +138,57 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare1 = System(olin=10, wellesley=2)\n", "bikeshare1" @@ -148,9 +196,57 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare2 = System(olin=10, wellesley=2)\n", "bikeshare2" @@ -165,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 14, "metadata": { "collapsed": true }, @@ -176,7 +272,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 15, "metadata": { "collapsed": true }, @@ -194,18 +290,114 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin11
wellesley1
\n", + "
" + ], + "text/plain": [ + "olin 11\n", + "wellesley 1\n", + "dtype: int64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare1" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin9
wellesley3
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "dtype: int64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare2" ] @@ -228,9 +420,20 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEkCAYAAAAB5GevAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl4VNXZwH+TEAhhlTXsuwdlxwUFiwugVatS961qrV+1\ndWld6oqKWqu1dali61aXKiKguIMoiIpshk0U5UDYwyarJIEASeb7453LnZlMJneSmUwyvL/nmWfm\nnnvm3vfcTO57z3k3n9/vR1EURVFiJS3ZAiiKoii1E1UgiqIoSqVQBaIoiqJUClUgiqIoSqVQBaIo\niqJUClUgiqIoSqVQBXKIYozpbIzxG2NGh7X7jTGvJkeq+GKM6R4Yz6igtjqBtpcSfO5rAuc5IZHn\niSfGmL8GZG4fra0a5XnDGFNc3edVvFMn2QIo8cEY0xj4E/BroAeQDqwBPgb+aa3dkkTZGgI7gbnW\n2l+E7asT2NcQGG6tnR62/y7gb8D51tp3qknklMAY8zUwJKx5G7ASeBl4yVpbWu2CKSmDzkBSAGPM\n4cC3wAPAKuBO4M/AXESpLDXGHO/xcPWB/4unfNbaAmA+cKwxJits9zGI8igGTo7w9ZMAP/BlPGU6\nhNgD/CbwugL4O1AXeB74R1jf0UB9a21edQqo1F50BlLLCdyQPwTaAWdZaz8O2v2CMebfwDTgfWNM\nn4pmItbaogSJOgM4DhgckMfhJCAfmBr4fJDA7GQw8L21dluC5Ep1Dlhr3whuMMY8i8xOrwJuddqt\ntcWIIj8kMcY0stbmJ1uO2oQqkNrP74DDgcfClAcA1tr5xpi7gWeBvwC3RTuYMcYPvGatvSq8DXlq\nfRQ4GtgLvAf8OTDDqIgZwF3ILCNcgcwCpgNPG2OyrLV7Avuc2cmMMBkzA+O4FOgakGUmcK+19lsP\nskTEGHNa4LjHAvUACzxrrX0hrN8JwChgANAUWRZaDDxgrf2mgnNUKLsx5lhgXuB4oyMc49OAjG2s\ntXtjHae1dq8xZifQJOy4fwXuATpEm4UYY9KB55Df3m3W2ieC9l0C3AD0RZZRlyC/zUlhxzgL+T0e\nCTQAfkJmqXdYa3PD+jZFZk7nAo0C/W621uYE9amDzLxPQ/4fDgM2AR8h13ZHUN/uwArgXmQ5z5Hj\nDeCaQJ92gf1nAq2BrciD2ih9mHHRJazaz/mB9xej9HkVOACcV4Xz9Ef+GXOAW4DPkBvIE9G+FMQs\nYD9Bs4ygGcaXgVcGoWv2Tt8ZQd+pC3yK/HPPQpbqHgN6A7ONMQNiGpV73D8AU5AlvIeQMa4BnjfG\nPBLU74jA+bsDTwF/QJRzGtCngnN4kj2ghBYDvzXGpIUdoyMwDHjTo/LwGWNaBF4tjTG9jDH/BAzy\nQBATgRnve8hy2GVhyuNR4E1gV2CMdwL7gHeMMdcF9RsWOEYjxL51A/BfoCWiVEPkR35r2cgS26OI\ncvo4YFtzyERmUxa5pjchDyW/Bz43xmREGM75wBhgMnAj8rfBGNMFUVLnIkrlemAscBkwK2BvVNAZ\nSCrQG8gPf2oLxlq7xxhjgd7GmIYeZwzh9AUGW2vnBrafD/wj/dYYc0tFxwzI8A0wyBjTwFpbiDvD\n+MJa+6MxZgsyQ/ks8LWTEPvHV0GH+hNwAnCqtfbgTMYY8x/ge2Rdf3gsAwt4GD0FvGGtvSJo178D\nyz1/McY8Z61dC5yOKJkLrbULYzlPjLK/iCim4QRubAF+iygrr15kjZGn52BKgPustQ/FIrwxpgXy\nEHEEcEaww0Ng1nQH8JC19r6grz1tjPkIeNQY83rg735OYAzDgmcGwIMRTpsGzLHW3hR0LosoqosQ\nxQNi62kbplSfM8bMQ2ZLZwEhs6DAOPpYa5eHtY9BFFd/a+3GoPO+A8xGlNNfI8h6yKEKpPbTGNjs\nod/PgfcmQGUUyJwg5eHwOXAG0Bm5AVbEDOQGOgS5KZ4EFAILAvu/CrQFz06+DbvJXA4sBRYHbmjB\nTAcuNcbUs9bu8zQq4QLEsPxyhGN+CPwReep/Gfc6jjTG/BCjzSgW2d9AFMrvcJ+MfYgCWRyD8ioE\nRgZtZyNP3g8aY0qstX/zeJwuiNJqBJxorV0ctv8yRNn/L8LYPkCWggYhvxnnGp5vjPmvtbakgnM/\nGbb9eeC9h9MQ8CbbCweX2Boh9zen7yDKKpAPw5WHMaYZ8pDwArA/bCwrgdXAqagCAVSBpAK7ESVS\nEU6fn6P2Kp9VEdq2B96bAxhj6hO2rg78HPRUOANZ2jgZV4HMttYeCOz/EnjKGNMAmfE0BL4IO15P\n5GYf/lQdTDNk/dsrRwTJVx6tA+/OUsa9wG3GmDmIA8A4a+36Cs7jWXZr7W5jzHjgMmNMc2vtdmQ2\n0omy3lPRKA6e7QR4wxjzGfCQMebtCE/gkfgYmQ30tdZG+i0cgTy1r4hyDOcaPo3MCJ4H/hFwN54C\nvBXBvlAKrA1rC/ndORhjLkaWsfohy6HBHBZBnkjj7omM49rAKxIVKbxDBlUgtZ/vgaHGmO7lLWMF\n1q0NsKaSy1cQ/Z/GF3i/CHglbN9vERsMwBxkTfykwAxjCPBIUN8vkd/kCcDAQFv4TT0NsQ/8JYo8\nO6Lsi4Qj/2WIMTcSuXDQS+0UY8wgxGA7FHkaHW2Mudha+0GU88Qq+wvI9bsc+BcyGylClFhVmYoo\npJOIfCMN503khnqPMeb/IsSP+JDfyBnITT8S3wNYa7caY45Crt2IwPu/kFnRL8McEfxRYlWcvxvG\nmAuBcYjr+k1AHnKt6uIqv3D2RGhzjvkaMguMRKTvHZKoAqn9TEL+Aa9BjJaRuAL5RwqfwsebqcgN\nIZilzgdrbVHgif0EZBbSgND4jqWIR9PJiIdTKaH2D5An3JbAdGttvKqhOU/NWyM8rUfEWjsP8ZTC\nGNMJUQwPIcs10c7jWXZr7VxjzHfA74wxryNLUW9ba3d5kbECnCf0Rh77/xVxKngEqGOMuTps6WkF\nopBWW2ujzUIACHx3RuBFwIEgB/ECO8ejTMH8Brmxnxy8rGiM6R3jcXKRpbgMr7+FQxn1wqr9vIT8\n6G82xvwyfKcxZiDyT7+V2JY+YsZau8laOy3sFb6UNAN5cBmFrFl/E/R9P+LSOgKZnSyOcLP8HxLz\n8qdIMhhjWkdqr4DxiIfYgwE32/BjNg14UGHKru8DrEMUX7MKzlMZ2V9EvLv+hbgWVzkFS8CWcnZg\nc0G0vsFYax9FXJCvAF4P2BocXg+8PxLW7pyzddDnSNfwB2R2WtE1LI8S5IHj4D0tMM5R5X4jAoE4\nqU+BC4wxx4TvN8b4jDEtKyljyqEzkFqOtbbQGHM28Ani2vgOYjcoRmIFfoMYzUdaa70Y2xPNDCRi\nfigww1q7P2z/l4hHlNM3nCeQJ90njTHDkbHmA457az5lZ0FRsdauNcbcgHjr/GCMeQNRCi0RW8w5\nSGxBHrJUdTLijbQauWGdg7j1VmSQrozsryMxEJcjDwqxRuRnGGMuD9pujbhzHwdMsdZ+EcvBrLWP\nG2MOIAqtjjHmUmttsbV2jjHmIcQ2tNAY8zZih2qDxA2dinivAbxijGmFeNutBbKASwLv/4txfA5v\nI3+HzwOztXpIWp8yDwQeuBb4GvjaGPM/YBFyr+yCzAL/ixrRAVUgKUHABbYv8mR7LrIOnY78cz6D\n5MKqCcoDZNlnL3IziXQzDG77InyntXZ/YKZ1A3JTfSCwayOy/v1aZYSy1r5ojPkRecL+A+IMsA1Y\nhiyrOIbvd4FWwMWB972IDeF3lLX/VFl2a+0uY8xE5Kn/5Uos22Xhzg5A7AIrkKBOrzE84TI9bYzZ\nD/wbUSIXWWsPWGvvM8bMR2Iqbgmcewti+7gp6BCvAVcikfAtEceOpcC51tp3KynTG4G4kD8BjyO2\npA8QhVaeXau8Y60NzNzvRGZqVyDLY+uR+JW3KyNjKuLz++O1jKwoSiIwxjjG9I4RlgQVJWmoAlGU\nGowx5jDkyfdTa+25yZZHUYLRJSxFqYEYY/og6WOuRpaCHk2uRIpSFvXCUpSayUWIQbk7cF1FSRoV\nJRmk7BKWMaYekmtpExo5qiiK4pV0xHsup6KUQKm8hHUMElOgKIqixM4vEHfmckllBbIJYOzYsWRn\nZydbFkVRlFrB5s2bueyyy8BDPrlUViAlANnZ2bRv3z7ZsiiKosSNnByYMgU2bYI2beD006XdS9sx\nZeLry6XCpf9UViCKoigpR04OPPQQrF0LJYFb/GuBENT69d1+wW3p6dCtG2zYIG0xKJGoqBeWoihK\nLWLCBMjNhf37RYGUlMDu3fJytsPb9u+H5cth3z745JP4yaIzEEVRlFqC3w9ffy3vwRQXl+0b3lZS\nAqtWhc5SqooqEEVRlFrC7NlwIFB+zeeDAQNEISxaJG0DBrh9nbbu3WHJEvm8dassZ8ULXcJSFEWp\nBRQUwDvvQIcOst2+PTRsKAqhY0fo1Ek+Oy+nrWlTCHZELSiQJa14oDMQRVGUWsCkSVBYCK1aQZMm\nohx++gnatoVrrpE+n3wCGzeWbSspEftH69ZQrx5MngwjR1ZdJlUgiqIoNZzcXJg1y92+5Rbo27ds\nv0jeVU7brFnwv0C1lU8/hUGDxLW3KqgCURRFiQORYjMi3dDL61debMfHH8vL75flq1NPjaw8KmLw\nYFEiK1fKOa66Crp0kdlKjPEhB1EFoiiKUkVycuCll2DvXsjIkHiLlwLFh4NvzE6/0lJZjtq5E374\nAfr3h8WL3X47d8LMQCImn0/sFgArVsD111dORp8PLrsMbroJli2Ttvr1RTFFktULqkAURVGqyJQp\nsH49rF4tNob+/eX9k09Cb8pTpsgN+/vvYdcut33mTGjcOPSY27bJe4ugCvKdOsGcOTB8eOXkbNdO\nFJzD6tViU/H5ysrqBfXCUhRFqSK5ubBmjXzet0+WiUAM2sFs2iSvYOUBsGdP2WMWF4fGcjRoIAog\n/Jix0rixKDcQl2DnHJU5rs5AFEVRqoDfD5s3hwb3bdsGO3aUtVUcdpgEAjo0aAB16siNvEmT0L75\n+TIzaNJEZg1dush227ZVk7d9eygqgnXrxMXXmZFU5riqQBRFUarA7NmiCMLJzYWbbw5t8/ncJ/6s\nLAn8S0sTA/fs2aF927SR/i1bhrb/8pdVk/f008XmYUzVj6sKRFEUpZI4wX2tWsl2eroYuuvWlSf9\nn35y+/7wg8xMevaEvDxJbtixo9y4jzkGjjyy/DgOp83pWxWc78fjuKpAFEVRKsk774g3FcARR8Do\n0eJp5cRbTJ0q8RYtWsC4cdLWqhWcdRZcfXXosY45JnocRzwp71yxokZ0RVGUSrBiReiy0yWXyMxj\n8GCZXYC4644dK0/7zmykfn04//zqlzcR6AxEURQlBnJyygb3nXYa9Okj+514i7/+VYzrCxaIl1VW\nlvS9+eayLru1FZ2BKIqieMQJBPzmG7F/FBbKTKRHj9B+7dpB584SsFdYKIqmsFBsDpmZSRE9IagC\nURRF8ciUKa4LrEPnzmU9qEAURrCy8PkktfrUqQkXs9pQBaIoiuKRjRslSNApJduwoXgxRQrC27pV\nbCE+n2w76derGghYk1AbiKIoikd8Pti+3f3cvXv5wX1t2ogRvV8/qb/RvLm0VzUQsCahMxBFURQP\n7NsXmnIkO9s1hkcKwnOy6TZuLG68zkykqoGANQmdgSiKonjgo4/EptGzp7jkdu0qy1LlBeHFM2Cv\nppJUBWKM6Q78BTgO6A3MtNaeFNZnDdAp7KtbrLXZKIqiVAN5eTBtmnxu1QruuAOOO67i78UrYK+m\nkuwZSC/gDGAuUDdKvzeBZ4K241TRV1EUJTp+P7z5ptgzAA4/XKLLleQrkA+tte8DGGPeBlqU02+T\ntXZu9YmlKMqhRnkVAZ97TmpwZGWJy+5ll7n2jEOdpCoQa21pMs+vKIoCojwef1wKLDkuuk7uqvR0\nNxAwP18KR2XrAjpQe7ywrjbG7DfG/GyMedsYE24TURRFqTTvvy/ZcnfvFkVRWCiZc7dtcxVKZqZk\nz/3kk+TKWpOoDQrkfeB6YBhicD8emGmMaRL1W4qiKB6ZM0eKOgUTXBEwLU1sH2lpqRUIWFWSbQOp\nEGvtn4I2ZxpjZgOLgd8CTyVHKkVRUoWVK+Hnn93tww+HRo3gu+9ku08fKQFbJ3C3TKVAwKpSG2Yg\nIVhrvwcsMDDZsiiKUrspKZF06x06yHbz5mLfaNBA4jy6dXPLzjqkUiBgVanxM5Ao+CvuoiiKUj7T\np8OGDRLbkZEhqUl27kxsRcBUotYpEGNMb8AAzydbFkVRai87dkh0ucM118Cpp5btpwqjfJIdiZ6F\nBBICtAMaG2OcWl2TgZOBy4GPgI1AT2AUsA54tVqFVRSl1lFebMeUKRJZvmePLF/17w/DhiVX1tpI\nsmcgrYCJYW3OdhdgfaDPU0BTYDvwCXC3tXZ3dQmpKErtwyn+VFoqHlarVsEDD8i+unUl3TpI0acr\nrpB4DyU2kh1IuAaoKKZTnwsURYmZKVPEu+r7791Yjm3b5L1FUM6L7Gzp8+tfV7+MtZ1kz0AURVES\nwoYNYK2rPMCN63DIyIAuXTS2o7KoAlEUJSXJz5fysyABgBkZEs/h87lxHV27SrvGdlQOVSCKoqQc\nmzdLFUCHbt3EiP7TT6JAWrYM7a+xHZVDFYiiKCmF3y/Bgc2bS/GnwkKZYbRrp7Ed8abSCsQYczLQ\nF/jcWvtd/ERSFEWpPN98A8uXy+fsbLjnHqkcGIwqjPjgKZWJMeZNY8y4oO3fANOBJ4FvjDFDEySf\noiiKZ/bsgYlBgQHDhpVVHkr88JoL63jg46Dt24G3gc7A58A98RVLURQlNnJyJJ5j8mRYsEAM6Ged\nlWypUhuvCqQ1EtSHMaYNUor2H9badcC/gf6JEU9RFKVicnLgiSekpodT/KmgAJYsSbZkqY1XBbIX\nqB/4fAJQCMwPbBcCjeIsl6IoimcmT4bcXFEeIAb05s21+FOi8apAlgC/McY0Av4PmGGtdbLhdgR+\nSoRwiqIoXpg/X2YcIDEf3bqJu64GCCYWr15YDyE2kIuB/cDwoH1nAAviLJeiKIondu5081oBdOok\n5WdBAwQTjacZiLX2c+AI4EKgl7V2VtDuGcBjCZBNURSlQiZMkCBBgKwsifdw0ADBxOI5DiSQ+HBN\nhHaty6EoSlL4/ntYuFAKQoHMPvbt0wDB6sKzAjHG1AeuAk4EWgB/sNauMMacCyyx1uYmRkRFUZSy\n7N8P48a52yNHwpVXJk+eQxFPCsQY0xpZqjLABqT4k+N5dSZwKnBdIgRUFEWJxOTJbnr2rCw499zk\nynMo4nUG8hjQEBgA/IAY0h1moIGESgSiVYMLbtNlhsjXKhWuSyJ+Azk5YveYPBnq15eKgrfeCo00\nmKDa8apAzgButdYuMcaE1+1yZiSKcpCcHHj+eVi7Fvbuhe++g3feEdfKhg0llXZ+vtRsgNS4WVaW\nnBx48UXIy5N6FQcOSCU9qN3XJScHxoyBdetkTOG/gXr1ZBkqlrE61+q776TSYGGhuOrWrZvYsSiR\n8RoH0hBRFJHIjOE4yiHClClSQjQvD7Zvl9fGjaIwtm+HLVtg6VIp9nOoB3tNmQLr18Pq1fLuJAKs\n7ddl8mSJDN+8OfJvYOPG2Mc6ZYqkZN+1S7Z9PujRA6ZOTcwYlOh4nYGsQIzn0yPsOwFZ1lKUg1gr\nSxTBhFeDKyqSG2ZGRvXJVRNZtUqe0h22bpUssmm1/LEsOLjPIfw3sG2bKBOvY123ThStQ7t20KCB\nBgwmC68K5BXgYWPMBmC8811jzDnADcBtiRBOqZ2UloYqj8MOE7dK5ybRvr17w1y/Hvr2rX4Zawp+\nvzxRl5aGtufmwpFHJkemeBAe3NeuHTRt6v4Gmjd3969cCb17ez+uUyiqXj1x2wUNGEwWXhXIU0jC\nxP8AYwJts5Clq9estS8mQDallvL559CkiSiR9HRZYsjMhMMPlyWHFi3g55/l5ffLDcHvl32HGgsX\nyo0QZPzp6fKUvndv7TYKjx8vBvKff5YZQteuMj7nN9C0qSxDHTggM9GsrIqPuWpVqKLt3l2uF2jA\nYLLwpEACea+uNMY8D5yOZOfdBkyx1s5MoHxKLWPnTvjgAzewq1EjuTm0bRtaDa6oCJYtkyfToiKY\nOxeOPz55cieDoiLxJnKuVZ06okw3bpRZ2qpVYitq3Tq5csbKd9/BokWRg/uCfwM7d4qNrH17WZZy\nKgRGorRUqgw6xzxwQB5E2rXTgMFk4jUOJMNae8BaOxuYHWF/a2vtlrhLp9Q6xo+XmwVA//4wapT7\nlOjg/LNPmuQaP99+W5ayGjSoPlmTzQcfuMbg7t3hgQfELfWxx0R5FBfDm2/Cn/9ce2ZnXoP7jjlG\nZp3//Kcs15WWylhvvTXyWD//XJQNiMIZPVqWwZTk4tVM92p5O4wxzYFpcZFGqdU4T54Ol15aVnkE\nc+aZ0KyZfC4oEIVyqLBundwUHS68UGZqPh9cdplrK1i2TEq01hYmTxajOMjDwHnnld83fKwrVsCc\nOWX7ObNah1/9SpVHTcGrDeRMY8wj1tq7ghuNMU2BzxBXXuUQoLyAt9mz4c47xasmK0uUQ48e0Y9V\nrx5cfDH8+99iSP7Xv2Rpw5jyA84itR1zTGwBa8kO2ps3T+p0b9wo12roUDj6aHd/+/ZwyinyRL5+\nvfQ/6yw4++zY5U/EWMu71uHBfbfdJvEe0WjbFkaMgNdfl7HOnStjPeccd6wPPiiG9qwsGDgQhg+P\nfkyl+vCqQM4HPjbGrHGSJxpjGgKfIHmxTkiQfEoNIicHXngBfvxRngpBlqxatxZff6eYz/79cjPI\nyan4ZtWvnxhUv/pKthctgsWL4dVXZbt+fbdvpDbn/FvCFlAr6uvzyc2rtLR6g/ZycuDhh90Ayr17\nRenOnx96/jZtxC7gLAe+847M0ILH2rhx9KDDnBxZFsvLk+/FY6xOcODSpSI7uNc6M9OtBrhxo3f3\n7NatYc0asQmBjPPdd92xOobzwkLYvVscD9TmUTPwms59GvB74BljzJnGmEykPkgn4JRAaVslxXEC\n3rZvl39q52WtqzwAunSRm4fX4LC0NHepy++XY+bnyyv4PJHanPOHt1XUt6RExuIowuoK2nvvvdA4\nhg4dRMmFn//zz6UokoNzXYLHumuX3HghsvzjxoktZd8+WTJzlpaqMtbJkyX4r7Cw7LV2fgOxBvdN\nnx59rA7Z2eLdV9sDLFMJz6FK1trXgL8CbyEBhb2AEZqF99Bh5Uq56YazZ4+8+3zy1Oh4DXkN7tq1\nK9QlE8SAHB50Fqkt+PyV6btihdykqisQbfZsVy5nqQfKnn/TJlnnb9s21KgcLv/GjXLzDv9+aSl8\n/XWoYl+5UhRnVcb67beu4d8h+FqnpYnLbizBfc5Y27Urf6yNGsmDCWjQYE3Cczp3AGvtg8aYjsB5\nwDBr7feJEUupafj9ocsJjRu7AYC5uaIAfL7QG4DX4K42beS4rVq5N7yFC+VYAwa4/SK1BZ8/mGh9\nO3WCBQvkpldUJE/nJ1TDIuyyZXKzd+je3TUgh1+rNm1kmat7d3k6d66LM9alS2X25PdL269+Ffr9\nL74oG5zojPUXv6ic/Hv2hC4VtmsnN/Xgax38G4jl779hg4yza9eyY4XQSHUNGqw5lDsDMcbsNMbs\nCH8h9pAsYFpQ+/Zqk1hJCjk5rj3B53NvfmlpcNVV8h7ufuk1uMsxwvp87jE7dpSXs11eW/D5vfat\nV899mgWxESR6Td1xyXVmHK1aSYS+Q/i1cq4JhF4XZ6zByic/342PAJkhvP++e67Gjd19eXlw1FGV\nG8N777nnqVcPOncue62DfwOx/v0h8ljD05xo0GDNIdoM5H3AH2V/lTHGdAf+AhwH9AZmWmtPCuvj\nA+4C/oAY7HOAm6y1ixMpm+KyZ09owFvdunJTCq76duSRsjbtBIPFEtzl9Av+fnDAWbS28s5fUV8n\nKV9JiXg9/fADnHZa4uItpk6Vp/dWreTm260b7NhR/rWKdE3Cx7ptm6QDad9eHBt275a/y8SJMtto\n1UqWhjp0kP7Fxe5YTz89trGuWSOODs5vIDtb3iu61l7wMtbKHFdJPD6/P6E6IiqBXFpjgLmIAtkS\nQYHcBdyHKJplwC3AsUBva+3mKMfuDKyePn067du3T4j8hwrjxsmSCIjH1AMPiMdNbScvTzyinKWe\nq6+GQYPif56ffpJr5tgJLr4YTj656sctLhYXV2dZ6ZhjJJr/6afdPrfeKulDNm6Ehx5yx3rllTB4\nsLfzlJbC3/7m2r9694Ybbqg9wY1KbOTl5TFs2DCALoFS5uUSkw0kAXxorX0fwBjzNjLDOEjA2+tO\n4BFr7ZhA2xykNvsNwKiYznbttWXbHP/RoUPL7nu+dpd7r2psBIjymDrVNfhee21qKA9w4y2mTZOb\n/C23yBNvhw7xiTkB8Vr69FPxhOrQQb5/4onxkb9OHQnWfPJJkf+55+CZZ8QDrkMHiRs5/HDp68Rb\nTJ0qfW+7TcbasWPFY332WQlmzMqSpb9LLlHloQjlKhBjzBXAx9ba7YHPUbHW/i/Wk1trSyvoMhho\nDEwI+k6hMeZDJCdXbArEYe9e1+ncSe25c6esLXjJ6lYLcArvFBZKrMD27a6udKK/t2+H77+XlCOL\ngxYEg/v+/LNbuOennyJ7NtVmzjoLPvpIDNwgXlk//1y5axXc12mrV0+WqkDcUn/72/imae/ZE1q2\ndM8H8pPOzQ2184AEd37wgTvW5ctl2SvaWBculP5OfEdhobght2iBokSdgbyK2Ca2EyWVSQA/ELMC\n8UBPoASpRxLMj8BFlTripk1yl3Bw/ru/+07ee/SQR7BajhOz4cQJgFs/Ovyff9asUENrpL6O4Xbq\nVDj22ISInBQyM0OfGbZskVdVrlV5bW3bihvs2WfHR3YHv19mI8HKvUsXmDkTTjrJbQt/Ptq6VV5e\nx5qVJZ5Xn3yidghFiPYs1AVYHPQ52qtrguQ7DCiw1paEte8EsowxsReyDPajjIQTeVXLyc2VcrLB\nVCWOolMjdlHJAAAgAElEQVQnudmmog++3182t1JVY07C2+rWlWuYiOu3Y4d4RDk0bixG7kjn8vvL\nKgqvY+3RQx4kUvE3oFSOcmcg1tq1kT4ngUhWfl+UfdHp2FHenSUsZwZSt67M/UtKRIkccUTMh64p\n+P2hqUUyM+XlVIdr2jS0f3Fx2bbgvo0bi70AUtMHv21b+dOvXu3+LCp7rSK11akjNok6dRJz/dq0\nkZ9taanc9Dt3dlO1ROq7b5/I4nWsaWmyTNakibSn4m9AqRwxGdGNMW2RvFfNkaWtr621iXwe2Qk0\nMsakh81CmgJ7rLUHYj6iU9nIwQmrPeIIWV8AmdfXtiIMQcyZ46ZF9/mgVy/Zzs6W7ZYtQ/sPHiwR\n0sGU1zcVffBPP11yRAX/LKp6rarz+jnyhzsbRjpXVcda3nGVQxOv9UDSgX8B1wLBCbqLjTHPAX/2\nYBCvDMsC5+sO2KD2noF98aNJE/lP2hzwDM7NlcfSurGvkiWTwkKpreH462dmShqIeMZRpBpe41Bi\nuVbVef2ixVHEe6yp+htQKofXGciDSCDf80gurC1IVcJLgOuB3VTWIyo6swPHvgDJw4UxJgs4C3gh\n5qNV5Jabnw/33ecu/k6ZInmlaxHvvCNKBGRSdf/9bslUh/JuLNFuOKlOLOOPtW91UJ5MsfSNZayK\nAt4VyG+BJ6y1fwlqs8BXxphC4GoqoUACyuCMwGY7oLEx5vzA9mRr7R5jzKPAvcaYnbiBhGnAM7Ge\nr0IaNZIKOK+/LtuOy1Et8cpauVI8Zxwuvris8lAURYkXXhVIU6C85MyfILOTytAKmBjW5mx3QQIG\nH0UUxl2I7WU+kgU4MSV0hwyR8N3du2V70SLo08eNnKqBwYU5OfDxx/Ly+8Vge+qpbrJDRVGUROBV\ngcwH+hK5dG0/YEFlTh4Ik48a02qt9QMPB16JxylmsHCh3I137ZIIuhpqVM/JEaNoXp7rTbNiBVx/\nfXLlUhQl9fEaE3sTcKMx5hpjTCMAY0wjY8z/ISlFbkiUgEmhQYNQl5bVq2tsCPaUKeKWGRzz0alT\n5NrSiqIo8SRaKpOdhMZZZCJG9OeNMUW4ddD3ATOQ5aXUoWNHmXns2+cGCVRU5DsJbNokDmMlASfn\nBg0kWliDvRRFSTRJTedeo0lPdyv3gNypa+Ayls/nlioF0XHlBZEpiqLEk2iR6FdVoxw1k+bN5eXc\noXNzJdw3ntnwqsC+faHpJtq0cXMXabCXoiiJpmbcCWsy3bq5xboLCuDzz5MrTxAffyxuuj17SibV\nrl3FdHPNNeq7ryhK4kl2PZCaSbir7tSpMGmSfP7gA6kJGlyPNAls2ACffSafW7WC22+XYkKKoijV\nhc5AvDB8uGtU2LcPxo9Pqjh+P4wd61aX69EDjjsuqSIpinIIojMQL6SnS+k3p5DDV19JGbvmzau9\nomFOjhx29mypz9CpE4werRXiFEWpflSBeKVHj9Bki8uWiQHCqcYzf77kyO7eHRo2TIgIOTnwn//I\nqZwKcQUFEkRYS7KtKIqSQpS7hGWMWWWM6Rf4fF8glfuhTZcuUnAaJPBizx63Gs+ePZL+5Mcf3bWl\nODNlioSjHAgksc/MlLQln3ySkNMpSq1j0qRJXHDBBfTv35+BAwdy+eWXM3369JA+v/nNb7jpppsO\nbj/zzDMMGjSoukVNCaLZQDriBgveD7SP0vfQICNDZhjR1ov27pVasglg2TJ3AgSug5gGDSoK3H//\n/YwaNYp+/frx7LPP8uSTT9KuXTv++Mc/8sIL5SfvvuCCC/jvf/9bjZKmDtGWsDYCI4wxFslX1cAY\n07i8ztba3fEWrkbSsqWUaXOmAXPnynvXrlLJEESBOAU54kRxscQyOrRo4ZZh1aBB5VBn2rRpvPXW\nW4wePZpLLrnkYPuJJ55IixYtePLJJxkyZAi9evUq893s7Gyys7OrU9yUIdoMZCxSB2Q7EpE+DakQ\nWN7r0CEjQyzYWVli96hTR/KHOFF8paWS0dAfv0D+6dPdkqPp6TL7cNCgQaVGcO215b8SzGuvvUan\nTp248MILy+y77rrraNCgAW+88UbE74YvYc2bNw9jDPPmzeOmm25iwIABDBs2jLFjxyZM/tpKtEj0\nu4wxc4HewEPAf4G86hKs1uHzyfLWokVuFt9vvoE4rK1u3w4ffuhOapo0gfr1tUKcogAUFxezePFi\nLr30UtLT08vsb9SoEYMGDWL+/PkxHffee+9l5MiRXHTRRXz00Uc8+OCD9OnTh75aJ+EgUb2wrLXv\nA+8bY64Bxlhrv60esWooXtxyJ0yQ6QLAxIlSSyQrq9Kn9PvhrbfcFbOBA+Gee2pMNhUlVfnsM3lq\n2bfP+3ccl/ZIxDILqVcPzjoLRozw1H3nzp3s37+ftlHWctu2bcvMmTO9ywCceeaZ/PGPfwTg2GOP\nZcaMGXz66aeqQILw5MZrre2SaEFShrPPhgULJGIdZEbSvbt8jjFmJCcHXn4ZvvxSdFCHDnDHHao8\nlGrgs89iUx7xZN8+Ob9HBZIohgwZcvBzRkYGnTt3ZnOwF4viPQ7EGNMCuBk4GUndvh2YDjxlrd0e\n7buHFJmZcNFFrgLZtEkSVWVluTnXi4qgbt2omsAJGAyO+fj5Z1nO6tq1GsahHNqMGBH7DCRe1KsX\nk/I47LDDqFu3LhujuCNu3LiR1jFm027cONRnKCMjg/3798d0jFTHkwIxxnQCZgFtgO+AVYHPdwNX\nGGOGWGvVPuIwYIAojR075O7//ffSvnWrvH/zjRje+/WTAh4RmDIF1q1z/3/r1oXOnSXmQ20eSsIZ\nMSL2GUC0ZaoEloKuU6cO/fv354svvuCOO+4gLezBrKCggG+++Ybhw4cnTIZDFa+LIY8grrwDrbX9\nrbWnW2v7AwOAdKRuueLgGNSjrTUVF8Py5eV6auXmSoS5gxPDqDEfilKWK6+8kjVr1jBx4sQy+154\n4QUKCgq4/PLLkyBZauN1CWsEcHu4Ed1au8QYcx/w97hLVtvJzARjZBrhLF05HiI+nyiO/HxZ4goz\n/vn9EjDo6JamTV0PLI35UGosCZxlVMTw4cO5+OKLefDBB8nNzeXkk0+muLiYKVOmMGnSJG699daI\nMSBK1fCqQBoBG8rZtwFITPKn2k7LlvJyKCqS944d3SLma9ZIVGAQs2a5K1tpaaHB7xrzoSiRGT16\nNP369WPcuHFMnDgRn89Hr169+Pe//82wYcOSLV5K4lWBrAAuAD6NsO/CwH7FKx06SL31vXtlKcuJ\nYEcmJZMmuTOO+vUlN6PGfChKdHw+H+eeey7nnntu1H6vv/56yPaNN97IjTfeeHB70KBBWGsr/J7i\nXYE8C/w7kMpkLLAZyAYuB84DrkuMeLWYiqbzP/4ITz0Vun3EEUyaJB5XAEceCfffLwZ0RVGUmoYn\nI7q19jkkrclZwLvAHOA94FfAfdbaFxMmYapyxBFw7LHu9ptvsuKHA8ye7TZdcokqD0VRai6e40Cs\ntaONMU8BxwPNkDiQOdbanxMlXMpzwQXw1FPk5Pfk44I+fPT0aqhblw4NdvDLDj/Qu7d6jSiKUnOJ\nqaCUtXYXMCVBshx6NG5MTtMRvJQ3iPUHsik8kA5ksKKkNTc0+SLZ0imKokRFk2IkmSl7T6QovQFr\nDwT8c/fvp3PD7cze0i36FxVFUZKMlrRNMhv3NGWlL5vSgC5vSAFt0zezsbBpkiVTFEWJjiqQJOMD\nthc3hjr78RUfoEfGWny7i2jbrGxaakVRlJqELmElkX37YE9xoMZ6RgbZGdtplF4IpSX8Mn1acoVT\nFEWpgApnIMaYusDFwDwbKbpGqTQffgiZ6cX0bLKJn4oa0y1zN+0Lt/DLBjM5pmCpRKt36pRsMRVF\nUSJSoQKx1u43xrwAnA5UuwIxxlwFvBJh1x8C8Sm1kry8QN2poUNpBdx5NQw6ths88yMsbQb8AsaO\nhTvv1AIgiqLUSLzemVYg6duTySlIDIrzmpRccSqP3y+6obRUto0JxBT6fHDxxZLqHWQGEq3Km6Io\nTJw4EWNMmWJP//jHPzDG8P7774e0z5o1C2MMCxcu9HT88mqmL1++vOrCB3HKKafw97/Xrry0Xo3o\nDwP3G2NmWmvXJ1KgKORYawuSdO5KkZMjdT02bYI2beD006X9uedgzhypMdW5M1x6qZsskVat4Iwz\n4LbbZHv2bDj66NCQ9CRmPVWUmsbAgQMBWLhwIWecccbB9kWLFlG/fn0WLVrEOeecE9Jet25devfu\nXe2yphpeFchFQGNghTFmMbAJCC5k4bfWnhdv4WozOTnwxBOwYYNkc1+yBN5+WxRFaalbZTA/H9av\nh+zsoC+fdhrcdx/s2eMmW+zZM2ljUZSaTNeuXWnatCmLFi06qEAOHDjA0qVLGTlyJIsWLQrpv2jR\nInr37k1dzRNUZbwuYQ0A9iOKozXgFJMKfiWalcaYYmOMNcZEKX1WM3j/fVi6VIoQ7tghr02bpCBU\ncbH0ycyUzO6ffBL25Tp13DrqIJl7d+6sNtkVpbLk5MCDD8If/iDvOTmJP6fP56N///4hiuLHH3/E\n7/dz6aWXsnz5cgoKZPGitLSUb7/9lgED3FvWtGnTOPfcc+nTpw9Dhgzhscce48CBAzHJUFpaygsv\nvMCIESPo3bs3p512Gu+++25In/nz53PppZcycOBABg4cyDnnnMOUKdETe8yfP5/LL7+cfv36MWjQ\nIEaNGnVwLLt27aJPnz5lzuP3+znllFN45JFHYhpDZfA0A7HWdk6wHNHYBNwLfINUP7wEeM4Yk2Wt\nfTKJckVl9mwI/w06igNkJtKjh9jHI1YZbNoUWreGLVtkOzcXjjpKDepKjSUnB156yd3esMHdTnQZ\nggEDBjBmzBiKiorIzMxk0aJF9OrVi8MPP5zGjRuzZMkSBg8ezIoVK8jPzz+47DV58mRuvfVWLrro\nIm655RbWrVvHE088gd/v54477vB8/oceeoj33nuPP/7xj/Tq1YtZs2Zx991307RpU04++WQKCgq4\n7rrrGDZsGNdffz1+v5/ly5eTn59f7jEXLFjAVVddxfDhw3n66afZuXMnjz/+OLt37+bpp5+madOm\njBgxgkmTJvHrX//64PfmzZvHhg0bKkxrHw9qfCChtXYqMDWoaYoxph4wyhjzL2ttaZJEK5fcXNi9\n293u1k3qejj3/iOPlO369WW73CqDXbrA9u2iefbulbUudetVqoHPPhM38337vH9nwQK3FEEwCxdC\n4H7tiXr14KyzYivJPmDAAA4cOMB3333HMcccw6JFi+jfvz8+n49+/fqxcOFCBg8efHCWMnDgQPx+\nP//4xz8YOXIko0ePPnisunXr8uCDD/L73/+eww47rMJzr127lnHjxvHII48cvJEPHjyYrVu3MmbM\nGE4++WRWr15Nfn4+9957Lw0bSv29E044IepxH3/8cQYMGMBTQWUfWrduzVVXXcXy5cs5/PDDOf/8\n87n66qtZv349HTp0AGDSpEn06tULY4z3C1hJPD/OGmPqG2P+YIx5yxgzzRjTI9B+rjGme0XfjzNv\nIxmBO1fzeSukpEQ8rAJ/S1q0gHbtoFkzOPxw8bhq1sxVHhClymDduqJEHNavF0WiKAnms89iUx4g\nJrtIRFIq0di3T84fC3379qVOnToHFcSiRYsOLlP169cvpL1z5840a9aM1atXs3HjRn75y19SXFx8\n8HXcccexb98+VqzwVidvzpw5pKWlMWLEiJDjHH/88SxbtoySkhI6duxIVlYWt912G9OmTWN38BNm\nBPbu3cvixYs5/fTTQ4551FFHkZGRwdKlSwE4/vjjadu27cFlrIKCAj777DPOO696TNKeZiDGmNbA\nDMAgJWzbIWVuAc4ETiU5RaX8FXepXqZPlyWpVq0gI0NMGTt3yizjmmukzyefSB9PVQazs6VAen6+\nWN9zc8UCf9BtS1Hiz4gRsc9AsrIiKwunPLNX6tWLbfYBUL9+fXr27MnChQvZvHkzmzdvpn///oDM\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "bikeshare = System(olin=10, wellesley=2)\n", "newfig()\n", @@ -250,7 +453,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 19, "metadata": { "collapsed": true }, @@ -280,9 +483,20 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\nESQAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "bikeshare = System(olin=10, wellesley=2)\n", "newfig()\n", @@ -302,7 +516,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": { "collapsed": true }, @@ -341,7 +555,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 22, "metadata": { "collapsed": true }, @@ -359,9 +573,20 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x == 5" ] @@ -375,9 +600,17 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes, x is 5\n" + ] + } + ], "source": [ "if x == 5:\n", " print('yes, x is 5')" @@ -392,7 +625,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 25, "metadata": { "collapsed": true }, @@ -437,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 26, "metadata": { "collapsed": true }, @@ -456,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 27, "metadata": { "collapsed": true }, @@ -486,9 +719,20 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "newfig()\n", "plot_system(bikeshare)\n", @@ -505,18 +749,40 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.olin_empty" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.wellesley_empty" ] @@ -536,7 +802,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 31, "metadata": { "collapsed": true }, @@ -560,7 +826,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 32, "metadata": { "collapsed": true }, @@ -571,7 +837,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -582,8 +848,10 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": {}, + "execution_count": 34, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -598,7 +866,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 35, "metadata": { "collapsed": true }, @@ -620,8 +888,10 @@ }, { "cell_type": "code", - "execution_count": 42, - "metadata": {}, + "execution_count": 36, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -629,7 +899,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 37, "metadata": { "collapsed": true }, @@ -640,8 +910,10 @@ }, { "cell_type": "code", - "execution_count": 46, - "metadata": {}, + "execution_count": 38, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -656,8 +928,10 @@ }, { "cell_type": "code", - "execution_count": 48, - "metadata": {}, + "execution_count": 39, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# print(bikeshare.t_first_empty)" @@ -672,7 +946,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 40, "metadata": { "collapsed": true }, @@ -716,7 +990,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 41, "metadata": { "collapsed": true }, @@ -735,9 +1009,20 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 42, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "y = add_five(3)\n", "y" @@ -752,9 +1037,20 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 43, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "add_five(5)" ] @@ -772,9 +1068,20 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 44, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "add_five(3)\n", "add_five(5)" @@ -791,9 +1098,17 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 45, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8 10\n" + ] + } + ], "source": [ "y1 = add_five(3)\n", "y2 = add_five(5)\n", @@ -812,7 +1127,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 46, "metadata": { "collapsed": true }, @@ -823,8 +1138,10 @@ }, { "cell_type": "code", - "execution_count": 58, - "metadata": {}, + "execution_count": 47, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -850,7 +1167,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 48, "metadata": { "collapsed": true }, @@ -882,7 +1199,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 49, "metadata": { "collapsed": true }, @@ -902,9 +1219,20 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 50, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "7" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.olin_empty" ] @@ -918,7 +1246,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 51, "metadata": { "collapsed": true }, @@ -940,7 +1268,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 52, "metadata": { "collapsed": true }, @@ -951,9 +1279,17 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 53, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 0\n" + ] + } + ], "source": [ "print(system.olin_empty, system.wellesley_empty)" ] @@ -967,7 +1303,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 54, "metadata": { "collapsed": true }, @@ -989,9 +1325,20 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 55, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "system = run_simulation(p1=0.2)\n", "system.olin_empty" @@ -1006,9 +1353,20 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 56, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "system = run_simulation(p1=0.6)\n", "system.olin_empty" @@ -1025,7 +1383,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 57, "metadata": { "collapsed": true }, @@ -1036,8 +1394,10 @@ }, { "cell_type": "code", - "execution_count": 71, - "metadata": {}, + "execution_count": 58, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1061,9 +1421,20 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 59, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.25, 0.5 , 0.75, 1. ])" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "p1_array = linspace(start=0, stop=1, num=5)\n", "p1_array" @@ -1078,9 +1449,21 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 60, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n", + "0.25\n", + "0.5\n", + "0.75\n", + "1.0\n" + ] + } + ], "source": [ "for p1 in p1_array:\n", " print(p1)" @@ -1104,8 +1487,10 @@ }, { "cell_type": "code", - "execution_count": 74, - "metadata": {}, + "execution_count": 61, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1120,9 +1505,37 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 62, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function linrange in module modsim:\n", + "\n", + "linrange(start=0, stop=None, step=1, **kwargs)\n", + " Returns an array of evenly-spaced values in the interval [start, stop].\n", + " \n", + " This function works best if the space between start and stop\n", + " is divisible by step; otherwise the results might be surprising.\n", + " \n", + " By default, the last value in the array is `stop` (at least approximately).\n", + " If you provide the keyword argument `endpoint=False`, the last value\n", + " in the array is `stop-step`. \n", + " \n", + " start: first value\n", + " stop: last value\n", + " step: space between values\n", + " \n", + " Also accepts the same keyword arguments as np.linspace. See\n", + " https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html\n", + " \n", + " returns: array or Quantity\n", + "\n" + ] + } + ], "source": [ "help(linrange)" ] @@ -1136,8 +1549,10 @@ }, { "cell_type": "code", - "execution_count": 79, - "metadata": {}, + "execution_count": 63, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1161,9 +1576,20 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 64, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "p1_array = linspace(0, 1, 11)\n", "p1_array" @@ -1171,9 +1597,27 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 65, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0\n", + "0.1 0\n", + "0.2 0\n", + "0.3 0\n", + "0.4 4\n", + "0.5 11\n", + "0.6 24\n", + "0.7 11\n", + "0.8 24\n", + "0.9 32\n", + "1.0 44\n" + ] + } + ], "source": [ "for p1 in p1_array:\n", " system = run_simulation(p1=p1)\n", @@ -1190,9 +1634,20 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "newfig()\n", "for p1 in p1_array:\n", @@ -1209,7 +1664,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 67, "metadata": { "collapsed": true }, @@ -1223,9 +1678,28 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 68, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib64/python3.6/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n", + " warnings.warn(\"No labelled objects found. \"\n" + ] + }, + { + "data": { + "image/png": "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\nEwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "decorate_bikeshare(xlabel='Arrival rate at Olin (p1 in customers/min)')" ] @@ -1241,7 +1715,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 69, "metadata": { "collapsed": true }, @@ -1257,8 +1731,10 @@ }, { "cell_type": "code", - "execution_count": 86, - "metadata": {}, + "execution_count": 70, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1277,7 +1753,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 71, "metadata": { "collapsed": true }, @@ -1288,8 +1764,10 @@ }, { "cell_type": "code", - "execution_count": 88, - "metadata": {}, + "execution_count": 72, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1297,8 +1775,10 @@ }, { "cell_type": "code", - "execution_count": 89, - "metadata": {}, + "execution_count": 73, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1317,7 +1797,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 74, "metadata": { "collapsed": true }, @@ -1328,7 +1808,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 75, "metadata": { "collapsed": true }, @@ -1339,8 +1819,9 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 76, "metadata": { + "collapsed": true, "scrolled": false }, "outputs": [], @@ -1369,9 +1850,21 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 77, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "TypeError", + "evalue": "run_simulation() got an unexpected keyword argument 'olin'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mtotal\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_runs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0msystem\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_simulation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp1\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0molin\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwellesley\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m60\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mtotal\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0msystem\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0molin_empty\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0msystem\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwellesley_empty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mtotal\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mnum_runs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: run_simulation() got an unexpected keyword argument 'olin'" + ] + } + ], "source": [ "num_runs = 10\n", "total = 0\n", @@ -1383,7 +1876,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 78, "metadata": { "collapsed": true }, @@ -1394,8 +1887,10 @@ }, { "cell_type": "code", - "execution_count": 95, - "metadata": {}, + "execution_count": 79, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1403,8 +1898,10 @@ }, { "cell_type": "code", - "execution_count": 96, - "metadata": {}, + "execution_count": 80, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1412,8 +1909,9 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 81, "metadata": { + "collapsed": true, "scrolled": true }, "outputs": [], @@ -1423,8 +1921,10 @@ }, { "cell_type": "code", - "execution_count": 99, - "metadata": {}, + "execution_count": 82, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Solution goes here" @@ -1452,7 +1952,7 @@ "metadata": { "kernelspec": { "display_name": "Python 3", - "language": "python", + "language": "python3.6", "name": "python3" }, "language_info": { diff --git a/code/chap02fig/olinbikes.png b/code/chap02fig/olinbikes.png new file mode 100644 index 00000000..6757b921 Binary files /dev/null and b/code/chap02fig/olinbikes.png differ diff --git a/code/chap02fig/parameter-olin.png b/code/chap02fig/parameter-olin.png new file mode 100644 index 00000000..0c1472fc Binary files /dev/null and b/code/chap02fig/parameter-olin.png differ diff --git a/code/chap02fig/parameter-wellesley.png b/code/chap02fig/parameter-wellesley.png new file mode 100644 index 00000000..5f03c4d4 Binary files /dev/null and b/code/chap02fig/parameter-wellesley.png differ diff --git a/code/chap02mine.org b/code/chap02mine.org new file mode 100644 index 00000000..252c114b --- /dev/null +++ b/code/chap02mine.org @@ -0,0 +1,552 @@ +#+title: ModSim Chapter 2 + +#+latex_header: \usepackage[margin=1in]{geometry} +#+options: toc:nil num:nil + +* Preamble + +#+BEGIN_SRC ipython :session + %matplotlib inline + import matplotlib.pyplot as plt + plt.style.use('ggplot') + from modsim import * + + + def run_steps(system, num_steps=1, p1=0.5, p2=0.5): + """Simulate the given number of time steps. + + system: bikeshare System object + num_steps: number of time steps + p1: probability of an Olin->Wellesley customer arrival + p2: probability of a Wellesley->Olin customer arrival + """ + for i in range(num_steps): + step(system, p1, p2) + plot_system(system) + + + def step(system, p1=0.5, p2=0.5): + """Simulate one minute of time. + + system: bikeshare System object + p1: probability of an Olin->Wellesley customer arrival + p2: probability of a Wellesley->Olin customer arrival + """ + if flip(p1): + bike_to_wellesley(system) + + if flip(p2): + bike_to_olin(system) + + + def bike_to_wellesley(system): + """Move one bike from Olin to Wellesley. + + system: bikeshare System object + """ + move_bike(system, 1) + + + def bike_to_olin(system): + """Move one bike from Wellesley to Olin. + + system: bikeshare System object + """ + move_bike(system, -1) + + + def move_bike(system, n): + """Move a bike. + + system: bikeshare System object + n: +1 to move from Olin to Wellesley or + -1 to move from Wellesley to Olin + """ + system.olin -= n + system.wellesley += n + + + def plot_system(system): + """Plot the current system of the bikeshare system. + + system: bikeshare System object + """ + plot(system.olin, 'rs-', label='Olin') + plot(system.wellesley, 'bo-', label='Wellesley') + + + def decorate_bikeshare(): + """Add a title and label the axes.""" + decorate(title='Olin-Wellesley Bikeshare', + xlabel='Time step (min)', + ylabel='Number of bikes') +#+END_SRC + +#+RESULTS: + +* Exercise 1 +Add print statements in =move_bike= so it prints a message each time a customer arrives and doesn't find a bike. +Run the simulation again to confirm that it works as you expect. +Then you might want to remove the print statements before you go on. + +#+BEGIN_SRC ipython :session :exports both + def move_bike(system, n): + olin_temp = system.olin - n + if olin_temp < 0: + # print('Sorry, there are no bikes') + return + + wellesley_temp = system.wellesley + n + if wellesley_temp < 0: + return + + # update the system + system.olin = olin_temp + system.wellesley = wellesley_temp +#+END_SRC + +#+RESULTS: + +* Exercise 2 +Add an else clause to the if statement above, and print an appropriate message. +Replace the == operator with one or two of the other comparison operators, and confirm they do what you expect. + +#+BEGIN_SRC ipython :session :results output :exports both + x = 4 + + if x == 5: + print('yes, x is 5') + + + else: + print('no, x is not 5') +#+END_SRC + +#+RESULTS: +: no, x is not 5 + +* Exercise 3 +Let's add a "clock" to keep track of how many time steps have elapsed: +1. Add a new system variable named clock to bikeshare, initialized to 0, and +2. Modify step so it increments (adds one to) clock each time it is invoked. + +#+BEGIN_SRC ipython :session + bikeshare = System(olin=10, wellesley=10, clock=0) + + + def step(system, p1=0.5, p2=0.5): + """Simulate one minute of time. + + system: bikeshare System object + p1: probability of an Olin->Wellesley customer arrival + p2: probability of a Wellesley->Olin customer arrival + """ + # print(system.clock) + if flip(p1): + bike_to_wellesley(system) + print('Time before Wellesley:', system.clock) + + if flip(p2): + bike_to_olin(system) + print('Time before Olin:', system.clock) + system.clock += 1 +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results output :exports both + step(bikeshare) +#+END_SRC + +#+RESULTS: + + +#+BEGIN_SRC ipython :session :results output :exports both + print(bikeshare.clock) +#+END_SRC + +#+RESULTS: +: 1 + +* Exercise 4 +Now suppose we'd like to know how long it takes to run out of bikes at either location. +Modify =move_bike= so the first time a student arrives at Olin and doesn't find a bike, it records the value of clock in a system variable. +Hint: create a system variable named =t_first_empty= and initialize it to -1 to indicate that it has not been set yet. +Test your code by running a simulation for 60 minutes and checking the metrics. + +#+BEGIN_SRC ipython :session + def move_bike(system, n): + olin_temp = system.olin - n + if olin_temp < 0: + system.olin_empty += 1 + if system.t_first_empty == None: + system.t_first_empty = system.clock + return + + wellesley_temp = system.wellesley + n + if wellesley_temp < 0: + system.wellesley_empty += 1 + return + + system.olin = olin_temp + system.wellesley = wellesley_temp +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results output :exports both + bikeshare = System(olin=5, wellesley=5, clock=0, olin_empty = 0, wellesley_empty = 0, t_first_empty=None) + for _ in range(60): + step(bikeshare) + + print(bikeshare.t_first_empty) +#+END_SRC + +#+RESULTS: +#+begin_example +Time before Wellesley: 1 +Time before Olin: 1 +Time before Wellesley: 2 +Time before Olin: 3 +Time before Olin: 4 +Time before Olin: 5 +Time before Wellesley: 7 +Time before Olin: 8 +Time before Wellesley: 9 +Time before Olin: 10 +Time before Wellesley: 11 +Time before Wellesley: 12 +Time before Wellesley: 13 +Time before Olin: 14 +Time before Olin: 17 +Time before Wellesley: 18 +Time before Olin: 21 +Time before Wellesley: 22 +Time before Wellesley: 25 +Time before Olin: 25 +Time before Wellesley: 26 +Time before Olin: 27 +Time before Wellesley: 28 +Time before Olin: 28 +Time before Wellesley: 29 +Time before Wellesley: 30 +Time before Wellesley: 31 +Time before Wellesley: 32 +Time before Wellesley: 33 +Time before Wellesley: 34 +Time before Olin: 34 +Time before Olin: 35 +Time before Wellesley: 36 +Time before Olin: 37 +Time before Wellesley: 38 +Time before Olin: 38 +Time before Wellesley: 39 +Time before Olin: 39 +Time before Wellesley: 40 +Time before Olin: 40 +Time before Wellesley: 41 +Time before Olin: 41 +Time before Wellesley: 42 +Time before Wellesley: 43 +Time before Olin: 43 +Time before Wellesley: 44 +Time before Olin: 44 +Time before Olin: 46 +Time before Wellesley: 47 +Time before Wellesley: 48 +Time before Olin: 48 +Time before Wellesley: 50 +Time before Olin: 50 +Time before Wellesley: 51 +Time before Olin: 51 +Time before Wellesley: 52 +Time before Wellesley: 53 +Time before Olin: 54 +Time before Wellesley: 55 +Time before Wellesley: 56 +Time before Olin: 57 +Time before Olin: 58 +Time before Wellesley: 59 +Time before Olin: 59 +34 +#+end_example + +#+BEGIN_SRC ipython :session + def step(system, p1=0.5, p2=0.5): + if flip(p1): + bike_to_wellesley(system) + + if flip(p2): + bike_to_olin(system) + + + def move_bike(system, n): + olin_temp = system.olin - n + if olin_temp < 0: + system.olin_empty += 1 + return + + wellesley_temp = system.wellesley + n + if wellesley_temp < 0: + system.wellesley_empty += 1 + return + + system.olin = olin_temp + system.wellesley = wellesley_temp +#+END_SRC + +#+RESULTS: + +* Exercise 5 +Write a function called =make_system= that creates a System object with the system variables olin=10 and wellesley=2, and then returns the new System object. +Write a line of code that calls =make_system= and assigns the result to a variable. + +#+BEGIN_SRC ipython :session + def make_system(): + return System(olin=10, wellesley=2) + + makeSystemTest = make_system() +#+END_SRC + +#+RESULTS: + +* Exercise 6 +Write a version of =run_simulation= that takes all five model parameters as function parameters. + +#+BEGIN_SRC ipython :session + def run_simulation(olin=10, wellesley=2, olin_empty=0, wellesley_empty=0, p1=0.4, p2=0.2, num_steps=60): + bikeshare = System(olin=olin, wellesley=wellesley, + olin_empty=olin_empty, wellesley_empty=wellesley_empty) + run_steps(bikeshare, num_steps, p1, p2, plot_flag=False) + return bikeshare +#+END_SRC + +#+RESULTS: + +* Exercise 7 +The function linspace is part of NumPy. +[[https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html][You can read the documentation here]]. +Use linspace to make an array of 10 equally spaced numbers from 1 to 10 (including both). + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + linspace(1,10,10) +#+END_SRC + +#+RESULTS: +:RESULTS: +array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) +:END: + +* Exercise 8 +The modsim library provides a related function called linrange. +You can view the documentation by running the following cell: + +#+BEGIN_SRC ipython :session :results output :exports both + help(linrange) +#+END_SRC + +#+RESULTS: +#+begin_example +Help on function linrange in module modsim: + +linrange(start=0, stop=None, step=1, **kwargs) + Returns an array of evenly-spaced values in the interval [start, stop]. + + This function works best if the space between start and stop + is divisible by step; otherwise the results might be surprising. + + By default, the last value in the array is `stop` (at least approximately). + If you provide the keyword argument `endpoint=False`, the last value + in the array is `stop-step`. + + start: first value + stop: last value + step: space between values + + Also accepts the same keyword arguments as np.linspace. See + https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html + + returns: array or Quantity + +#+end_example + +Use linrange to make an array of numbers from 1 to 11 with a step size of 2. + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + linrange(1,11,2) +#+END_SRC + +#+RESULTS: +:RESULTS: +array([ 1., 3., 5., 7., 9., 11.]) +:END: + +* Exercise 9 +Wrap this code in a function named =parameter_sweep= that takes an array called =p1_array= as a parameter. +It should create a new figure, run a simulation for each value of p1 in =p1_array=, and plot the results. +Once you have the function working, modify it so it also plots the number of unhappy customers at Wellesley. +Looking at the plot, can you estimate a range of values for p1 that minimizes the total number of unhappy customers? + +** Preamble +#+BEGIN_SRC ipython :session + def run_steps(system, num_steps=1, p1=0.5, p2=0.5, plot_flag=True): + """Simulate the given number of time steps. + + `num_steps` should be an integer; if not, it gets rounded down. + + system: bikeshare System object + num_steps: number of time steps + p1: probability of an Olin->Wellesley customer arrival + p2: probability of a Wellesley->Olin customer arrival + plot_flag: boolean, whether to plot + """ + for i in range(int(num_steps)): + step(system, p1, p2) + if plot_flag: + plot_system(system) +#+END_SRC + +#+RESULTS: + +** Exercise + +#+BEGIN_SRC ipython :session + def parameter_sweep(p1_array): + newfig() + for p1 in p1_array: + system = run_simulation(p1=p1) + plot(p1, system.olin_empty, 'rs', label='olin') +#+END_SRC + +#+RESULTS: + + +#+BEGIN_SRC ipython :session :results raw drawer :file chap02fig/parameter-olin.png :exports both + parameter_sweep(linspace(0, 1, 11)) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap02fig/parameter-olin.png]] +:END: + +#+BEGIN_SRC ipython :session + def parameter_sweep(p1_array): + newfig() + for p1 in p1_array: + system = run_simulation(p1=p1) + plot(p1, system.wellesley_empty, 'rs', label='wellesley') +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results raw drawer :file chap02fig/parameter-wellesley.png :exports both + parameter_sweep(linspace(0, 1, 11)) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap02fig/parameter-wellesley.png]] +:END: + +Looks like p1=0.4 is the optimal p1. + +* Exercise 10 +Write a function called =parameter_sweep2= that runs simulations with p1=0.2 and a range of values for p2. +Note: If you run =parameter_sweep2= a few times without calling newfig, you can plot multiple runs on the same axes, which will give you a sense of how much random variation there is from one run to the next. + +#+BEGIN_SRC ipython :session + def parameter_sweep2(p2_array): + newfig() + for p2 in p2_array: + system = run_simulation(p1=0.2, p2=p2) + plot(p1, system.olin_empty, 'rs', label='olin') +#+END_SRC + +#+RESULTS: + +* Exercise 11 +Hold p1=0.4 and p2=0.2, and sweep a range of values for =num_steps=. +Hint: You will need a version of =run_simulation= that takes =num_steps= as a parameter. +Hint: Because =num_steps= is supposed to be an integer use range rather than linrange. + +#+BEGIN_SRC ipython :session + def run_simulation(num_steps, olin=10, wellesley=2, olin_empty=0, wellesley_empty=0, p1=0.4, p2=0.2): + bikeshare = System(olin=olin, wellesley=wellesley, + olin_empty=olin_empty, wellesley_empty=wellesley_empty) + run_steps(bikeshare, num_steps, p1, p2, plot_flag=False) + return bikeshare + + + def parameter_sweep3(num_steps_array): + newfig() + for num_steps in num_steps_array: + system = run_simulation2(num_steps=num_steps, p1=0.4, p2=0.2) + plot(num_steps, system.olin_empty, 'rs', label='olin') +#+END_SRC + +#+RESULTS: + +* Exercise 12 +The code below runs a simulation with the same parameters 10 times and computes the average number of unhappy customers. + +1. Wrap this code in a function called =run_simulations= that takes =num_runs= as a parameter. +2. Test =run_simulations=, and increase =num_runs= until the results are reasonably consistent from one run to the next. +3. Generalize =run_simulations= so it also takes the initial value of olin as a parameter. +4. Run the generalized version with olin=12. How much do the two extra bikes decrease the average number of unhappy customers. +5. Make a plot that shows the average number of unhappy customers as a function of the initial number of bikes at Olin. + + +#+BEGIN_SRC ipython :session + def run_simulations(num_runs=10): + total = 0 + for _ in range(num_runs): + system = run_simulation(p1=0.4, p2=0.2, olin=10, wellesley=2, num_steps=60) + total += system.olin_empty + system.wellesley_empty + return total / num_runs +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + run_simulations(30) +#+END_SRC + +#+RESULTS: +:RESULTS: +3.6666666666666665 +:END: + +#+BEGIN_SRC ipython :session + def run_simulations(num_runs=10, olin=10): + total = 0 + for _ in range(num_runs): + system = run_simulation(p1=0.4, p2=0.2, olin=olin, + wellesley=2, num_steps=60) + total += system.olin_empty + system.wellesley_empty + return total / num_runs +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results output :exports both + print(np.mean(np.asarray([run_simulations(30,10) for _ in range(30)]))) + print(np.mean(np.asarray([run_simulations(30,12) for _ in range(30)]))) +#+END_SRC + +#+RESULTS: +: 3.50666666667 +: 2.47444444444 + +It seems that two extra bikes decrease the average number by around 1. + +#+BEGIN_SRC ipython :session :results raw drawer :file chap02fig/olinbikes.png :exports both + newfig() + for bikes in range(30): + plot(bikes, run_simulations(num_runs=30,olin=bikes), 'rs-', label='olin bikes') +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap02fig/olinbikes.png]] +:END: diff --git a/code/chap03fig/1965.png b/code/chap03fig/1965.png new file mode 100644 index 00000000..6d4f52b5 Binary files /dev/null and b/code/chap03fig/1965.png differ diff --git a/code/chap03fig/ab.png b/code/chap03fig/ab.png new file mode 100644 index 00000000..318ca5d3 Binary files /dev/null and b/code/chap03fig/ab.png differ diff --git a/code/chap03fig/pre.png b/code/chap03fig/pre.png new file mode 100644 index 00000000..0cc74384 Binary files /dev/null and b/code/chap03fig/pre.png differ diff --git a/code/chap03fig/sim1b.png b/code/chap03fig/sim1b.png new file mode 100644 index 00000000..61f48b5b Binary files /dev/null and b/code/chap03fig/sim1b.png differ diff --git a/code/chap03fig/simulation2b.png b/code/chap03fig/simulation2b.png new file mode 100644 index 00000000..b4c5a641 Binary files /dev/null and b/code/chap03fig/simulation2b.png differ diff --git a/code/chap03fig/test.png b/code/chap03fig/test.png new file mode 100644 index 00000000..7cb8ce7c Binary files /dev/null and b/code/chap03fig/test.png differ diff --git a/code/chap03mine.org b/code/chap03mine.org new file mode 100644 index 00000000..383d88b7 --- /dev/null +++ b/code/chap03mine.org @@ -0,0 +1,390 @@ +#+title: Chapter 3 Notebook + +#+options: toc:nil num:nil +#+latex_header: \usepackage[margin=1in]{geometry} + +#+BEGIN_SRC ipython :session + %matplotlib inline + + from modsim import * + import matplotlib.pyplot as plt + import pandas as pd + + plt.style.use('ggplot') + + wpe = pd.read_html('https://en.wikipedia.org/wiki/World_population_estimates', + header=0, index_col=0, decimal='M') + toPres = wpe[2] + toPres.columns = ['census', 'prb', 'un', 'maddison', 'hyde', + 'tanton', 'biraben', 'mj', 'thomlinson', 'durand', 'clark'] + + un = toPres.un / 1e9 + census = toPres.census / 1e9 + + t0 = census.index[0] + t_end = census.index[-1] + total_growth = census[t_end] - census[t0] + elapsed_time = t_end - t0 + annual_growth = total_growth / elapsed_time + + system = System(t0=t0, + t_end=t_end, + p0=census[t0], + annual_growth=annual_growth) +#+END_SRC + +#+RESULTS: + +* Exercise 1 +Break down that expression into smaller steps and display intermediate results, to make sure you understand how it works. + +Where in the series is the largest relative error between two estimates, near the beginning or the end? + +When I computed relative errors, I used un as the denominator. +But that was an arbitrary choice. +What happens if we use census instead? +How much difference does it make? + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + diff = abs(census - un) / un + maxDiff = diff.max() + pctErr = maxDiff * 100 + pctErr +#+END_SRC + +#+RESULTS: +:RESULTS: +1.2862470293832287 +:END: + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + maxDiffIdx = diff.idxmax() + maxDiffIdx +#+END_SRC + +#+RESULTS: +:RESULTS: +1950 +:END: + +The largest relative error is towards the beginning in 1950 + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + diffs = abs(census - un) / census * 100 + diffs.max(), diffs.idxmax() +#+END_SRC + +#+RESULTS: +:RESULTS: +| 1.2813631502151765 | 2015 | +:END: + +Using census keeps the max diff approximately equal, but the year is now the opposite. + +* Exercise 2 +Try fitting the model using data from 1965 to the present, and see if that does a better job. + +Hint: Copy the code from above and make a few changes. + +Make sure your model starts in 1950, even though the estimated annual growth is based on later data. +You might have to shift the first value in the series up or down to match the data. + +#+BEGIN_SRC ipython :session :results raw drawer :file chap03fig/1965.png :exports both + import statsmodels.formula.api as smf + + ax = census.plot() + toPres['Year'] = range(1950, 2016) + toPres['census'] = toPres['census'] / 1e9 + toPres['un'] = toPres['un'] / 1e9 + + params = smf.ols(formula='census ~ Year', data=toPres.tail(50)).fit().params + ax.plot([1950, 2015], [(lambda x: params[0] + x * params[1])(i) + for i in [1950, 2015]]) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap03fig/1965.png]] +:END: + +* Exercise 3 +The constant growth model doesn't make a lot of sense, because it seems like the number of deaths and births should depend on the size of the population. +As a small improvement, let's write a version of =run_simulation1= where the number of deaths is proportional to the size of the population, but the number of births is constant. +This model doesn't make a lot of sense, either, but it's a good exercise. + +Write a function called =run_simulation1b= that implements a model where the number of births is constant, but the number of deaths is proportional to the current size of the population. +Set the death rate to 0.01, which means that 1% of the population dies each year; then choose the number of annual births to make the model fit the data as well as you can. + +Hint: It probably won't fit very well + +#+BEGIN_SRC ipython :session + def run_simulation1b(system): + results = TimeSeries() + results[system.t0] = system.p0 + for t in linrange(system.t0, system.t_end): + results[t + 1] = (results[t] + system.births) * (1 - system.deaths) + system.results = results +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results raw drawer :file "chap03fig/sim1b.png" :exports both + system = System(t0=t0, t_end=t_end, p0=census[t0], births=0.1,deaths = 0.01) + run_simulation1b(system) + ax = census.plot() + system.results.plot(ax=ax) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap03fig/sim1b.png]] +:END: + +* Exercise 4 +In this implementation, we compute the number of deaths and births separately, but since they are both proportional to the current population, we can combine them. + +Write a function called =run_simulation2b= that implements a model with a single parameter, alpha, that represents the net growth rate, which is the difference between the birth and death rates. +For example, if alpha=0.01, the population should grow by 1% per year. + +Choose the value of alpha that fits the data best. + +#+BEGIN_SRC ipython :session + def run_simulation2b(system, alpha): + results = TimeSeries() + results[system.t0] = system.p0 + for t in linrange(system.t0, system.t_end): + results[t + 1] = results[t] * (1 + alpha) + system.results = results +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results raw drawer :file chap03fig/simulation2b.png :exports both + system = System(t0=t0, t_end=t_end, p0=census[t0]) + run_simulation2b(system, 0.015) + ax = census.plot() + system.results.plot(ax=ax) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap03fig/simulation2b.png]] +:END: + +* Exercise 5 + +** Preamble +When you run =run_simulation=, it runs =update_func1= once for each year between =t0= and =t_end=. +To see that for yourself, add a print statement at the beginning of =update_func1= that prints the values of t and pop, then run =run_simulation= again. + +#+BEGIN_SRC ipython :session :results output :exports both + def update_func1(pop, t, system): + print(t, pop) + """Compute the population next year. + + pop: current population + t: current year + system: system object containing parameters of the model + + returns: population next year + """ + births = system.birth_rate * pop + deaths = system.death_rate * pop + return pop + births - deaths + + + def run_simulation(system, update_func): + """Simulate the system using any update function. + + Adds TimeSeries to `system` as `results`. + + system: System object + update_func: function that computes the population next year + """ + results = TimeSeries() + results[system.t0] = system.p0 + for t in linrange(system.t0, system.t_end): + results[t + 1] = update_func(results[t], t, system) + system.results = results + + + system.birth_rate=0.015 + system.death_rate=0.1 + run_simulation(system, update_func1) +#+END_SRC + +#+RESULTS: +#+begin_example +1950.0 2.557628654 +1951.0 2.34023021841 +1952.0 2.14131064985 +1953.0 1.95929924461 +1954.0 1.79275880882 +1955.0 1.64037431007 +1956.0 1.50094249371 +1957.0 1.37336238175 +1958.0 1.2566265793 +1959.0 1.14981332006 +1960.0 1.05207918785 +1961.0 0.962652456885 +1962.0 0.88082699805 +1963.0 0.805956703216 +1964.0 0.737450383442 +1965.0 0.67476710085 +1966.0 0.617411897277 +1967.0 0.564931886009 +1968.0 0.516912675698 +1969.0 0.472975098264 +1970.0 0.432772214911 +1971.0 0.395986576644 +1972.0 0.362327717629 +1973.0 0.331529861631 +1974.0 0.303349823392 +1975.0 0.277565088404 +1976.0 0.253972055889 +1977.0 0.232384431139 +1978.0 0.212631754492 +1979.0 0.19455805536 +1980.0 0.178020620655 +1981.0 0.162888867899 +1982.0 0.149043314128 +1983.0 0.136374632427 +1984.0 0.12478278867 +1985.0 0.114176251633 +1986.0 0.104471270245 +1987.0 0.0955912122738 +1988.0 0.0874659592305 +1989.0 0.0800313526959 +1990.0 0.0732286877168 +1991.0 0.0670042492609 +1992.0 0.0613088880737 +1993.0 0.0560976325874 +1994.0 0.0513293338175 +1995.0 0.046966340443 +1996.0 0.0429742015053 +1997.0 0.0393213943774 +1998.0 0.0359790758553 +1999.0 0.0329208544076 +2000.0 0.030122581783 +2001.0 0.0275621623314 +2002.0 0.0252193785332 +2003.0 0.0230757313579 +2004.0 0.0211142941925 +2005.0 0.0193195791861 +2006.0 0.0176774149553 +2007.0 0.0161748346841 +2008.0 0.014799973736 +2009.0 0.0135419759684 +2010.0 0.0123909080111 +2011.0 0.0113376808301 +2012.0 0.0103739779596 +2013.0 0.00949218983302 +2014.0 0.00868535369721 +2015.0 0.00794709863295 +#+end_example + +* Exercise 6 +Maybe the reason the proportional model doesn't work very well is that the growth rate, alpha, might be changing over time. +So let's try a model with different growth rates before and after 1980 (as an arbitrary choice). + +Write a function called =update_func1c= that takes pop, t, and system as parameters. +The system object, system, should contains two parameters: +the growth rate before 1980, alpha1, and the growth rate after 1980, alpha2. +It should compute and return the simulated population one year later. + +Note: Don't forget the return statement. + +#+BEGIN_SRC ipython :session + def update_func1c(pop, t, system): + if t < 1980: + return system.alpha1 * pop + pop + else: + return pop + pop * system.alpha2 +#+END_SRC + +#+RESULTS: + +* Exercise 7 +In the book, I presented a different way to parameterize the quadratic model: +$$ +\Delta p = r p (1 - p / K) +$$ +where $r=\alpha$ and $K=\alpha/\beta$. + +Write a version of =update_func2= that implements this version of the model. +Test it by computing system variables r and K equivalent to alpha and beta, and confirm that you get the same results. + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + system.alpha = 0.025 + system.beta = -0.0018 + system.K = -system.alpha / system.beta + system.beta,system.alpha,system.K +#+END_SRC + +#+RESULTS: +:RESULTS: +| -0.0018 | 0.025 | 13.88888888888889 | +:END: + +#+BEGIN_SRC ipython :session :results raw drawer :file chap03fig/ab.png :exports both + def update_func2b(pop, t, system): + return pop + system.alpha * pop * (1 - pop / system.K) + + + run_simulation(system, update_func2b) + system.results.plot() +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap03fig/ab.png]] +:END: + +* Exercise 8 +On the Wikipedia page about world population estimates, the first table contains estimates for prehistoric populations. +The following cells process this table and plot some of the results. + +Select table1, which is the second table on the page. + +#+BEGIN_SRC ipython :session :results raw drawer :file chap03fig/pre.png :exports both + table1 = wpe[1] + table1.replace('M', np.nan, regex=True, inplace=True) + table1.columns = ['prb', 'un', 'maddison', 'hyde', 'tanton', + 'biraben', 'mj', 'thomlinson', 'durand', 'clark'] + ax = table1.plot() + ax.set_xlim(-1000) + ax.figure.show() +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap03fig/pre.png]] +:END: + +#+BEGIN_SRC ipython :session :file chap03fig/test.png :exports both + def update_func1b(pop, t, system): + """Compute the population next year. + + pop: current population + t: current year + system: system object containing parameters of the model + + returns: population next year + """ + net_growth = system.alpha * pop + return pop + net_growth + + + system = System(p0=table1.mj[-1000], t0=-1000, t_end=1940, alpha=0.00099, beta=-0.0000001) + system.K = - system.alpha / system.beta + run_simulation(system,update_func2b) + + ax = table1.plot() + system.results.plot(ax=ax) + ax.set_xlim(-1000) +#+END_SRC + +#+RESULTS: +[[file:chap03fig/test.png]] + +The model does not match at all diff --git a/code/chap04fig/abovecap.png b/code/chap04fig/abovecap.png new file mode 100644 index 00000000..86e5a8ed Binary files /dev/null and b/code/chap04fig/abovecap.png differ diff --git a/code/chap04mine.org b/code/chap04mine.org new file mode 100644 index 00000000..f732a936 --- /dev/null +++ b/code/chap04mine.org @@ -0,0 +1,143 @@ +#+title: Chapter 04 Notebook + +* Preamble +#+BEGIN_SRC ipython :session :exports both + %matplotlib inline + from modsim import * + import pandas as pd + import matplotlib.pyplot as plt + + plt.style.use('ggplot') + + filename = 'data/World_population_estimates.html' + tables = pd.read_html(filename, header=0, index_col=0, decimal='M') + table2 = tables[2] + table2.columns = ['census', 'prb', 'un', 'maddison', + 'hyde', 'tanton', 'biraben', 'mj', + 'thomlinson', 'durand', 'clark'] + + census = table2.census / 1e9 + t0 = census.index[0] + p0 = census[t0] + t_end = census.index[-1] + system = System(t0=t0, + t_end=t_end, + p0=p0, + alpha=0.025, + beta=-0.0018) + + + def run_simulation(system, update_func): + """Run a model. + + Adds TimeSeries to `system` as `results`. + + system: System object + update_func: function that computes the population next year + """ + results = Series([]) + results[system.t0] = system.p0 + for t in linrange(system.t0, system.t_end): + results[t + 1] = update_func(results[t], t, system) + system.results = results + + + def update_func2(pop, t, system): + """Update population based on a quadratic model. + + pop: current population in billions + t: what year it is + system: system object with model parameters + """ + net_growth = system.alpha * pop + system.beta * pop**2 + return pop + net_growth +#+END_SRC + +#+RESULTS: + +* Exercise 1 +What happens if we start with an initial population above the carrying capacity, like 20 billion? +The the model with initial populations between 1 and 20 billion, and plot the results on the same axes. + +#+BEGIN_SRC ipython :session :results raw drawer :file chap04fig/abovecap.png :exports both + ax = census.plot() + for system.p0 in range(1,20): + temp_sys = system.copy() + run_simulation(temp_sys, update_func2) + temp_sys.results.plot(ax=ax) +#+END_SRC + +#+RESULTS: +:RESULTS: +[[file:chap04fig/abovecap.png]] +:END: + +* Exercise 2 +Suppose there are two banks across the street from each other, The First Geometric Bank (FGB) and Exponential Savings and Loan (ESL). +They offer the same interest rate on checking accounts, 3%, but at FGB, they compute and pay interest at the end of each year, and at ESL they compound interest continuously. + +If you deposit $p_0$ dollars at FGB at the beginning of Year 0, the balanace of your account at the end of Year $n$ is + +$ x_n = p_0 (1 + \alpha)^n $ + +where $\alpha = 0.03$. At ESL, your balance at any time $t$ would be + +$ x(t) = p_0 \exp(\alpha t) $ + +If you deposit \$1000 at each back at the beginning of Year 0, how much would you have in each account after 10 years? + +Is there an interest rate FGB could pay so that your balance at the end of each year would be the same at both banks? What is it? + +Hint: modsim provides a function called exp, which is a wrapper for the NumPy function exp. + +#+BEGIN_SRC ipython :session :results raw drawer :exports both + import sympy as sp + import numpy as np + + p0, a, n, t = sp.symbols('p0 a n t') + f = sp.Function('f') + fgb = p0 * (1 + a) ** t + esl = p0 * sp.exp(a * t) + fgbamnt = fgb.subs(a, 0.03).subs(p0, 1000).subs(t,10) + eslamnt = esl.subs(a, 0.03).subs(p0, 1000).subs(t, 10) + fgbamnt,eslamnt +#+END_SRC + +#+RESULTS: +:RESULTS: +| 1343.91637934412 | 1349.858807576 | +:END: + +Because both equations are fundamentally different, \alpha for FGB would have to change every year to match ESL. + +* Exercise 3 + Suppose a new bank opens called the Polynomial Credit Union (PCU). +In order to compete with First Geometric Bank and Exponential Savings and Loan, PCU offers a parabolic savings account where the balance is a polynomial function of time: + +$ x(t) = p_0 + \beta_1 t + \beta_2 t^2 $ + +As a special deal, they offer an account with $\beta_1 = 30$ and $\beta_2 = 0.5$, with those parameters guaranteed for life. +Suppose you deposit \$1000 at all three banks at the beginning of Year 0. +How much would you have in each account at the end of Year 10? +How about Year 20? +And Year 100? + +#+BEGIN_SRC ipython :session :results output :exports both + b1, b2 = sp.symbols('b1 b2') + pcu = p0 + b1 * t + b2 * t ** 2 + pcuyrs = pcu.subs(p0, 1000).subs(b1, 30).subs(b2, 0.5) + fgbyrs = fgb.subs(a, 0.03).subs(p0, 1000) + eslyrs = esl.subs(a, 0.03).subs(p0, 1000) + yrs = 10, 20, 100 + + amnts = pd.DataFrame({'PCU': [pcuyrs.subs(t, y) for y in yrs], 'FGB': [ + fgbyrs.subs(t, y) for y in yrs], 'ESL': [eslyrs.subs(t, y) for y in yrs]}) + amnts = amnts.set_index(pd.Series(yrs)) + print(amnts) +#+END_SRC + +#+RESULTS: +: ESL FGB PCU +: 10 1349.85880757600 1343.91637934412 1350.00000000000 +: 20 1822.11880039051 1806.11123466941 1800.00000000000 +: 100 20085.5369231877 19218.6319808563 9000.00000000000 diff --git a/code/chap05fig/2.png b/code/chap05fig/2.png new file mode 100644 index 00000000..77b04948 Binary files /dev/null and b/code/chap05fig/2.png differ diff --git a/code/chap05fig/budget.png b/code/chap05fig/budget.png new file mode 100644 index 00000000..49d44ffd Binary files /dev/null and b/code/chap05fig/budget.png differ diff --git a/code/chap05fig/logistic.png b/code/chap05fig/logistic.png new file mode 100644 index 00000000..d64d20b3 Binary files /dev/null and b/code/chap05fig/logistic.png differ diff --git a/code/chap05mine.org b/code/chap05mine.org new file mode 100644 index 00000000..3fe98dcc --- /dev/null +++ b/code/chap05mine.org @@ -0,0 +1,274 @@ +#+options: toc:nil num:nil + +#+title: Chapter 5 Notebook + +#+name: pre +#+BEGIN_SRC python + import pandas as pd + import numpy as np + + + def make_system(beta, gamma): + init = pd.Series({'S': 89, 'I': 1, 'R': 0}) + init /= sum(init) + t0 = 0 + t_end = 98 + + return pd.Series({'init': init, 't0': t0, 't_end': t_end, 'beta': beta, 'gamma': gamma}) +#+END_SRC + +* Exercise 1 +Suppose the time between contacts is 4 days and the recovery time is 5 days. +After 14 weeks, how many students, total, have been infected? + +#+name: update1 +#+BEGIN_SRC python + def update1(state, system): + s, i, r = state['S'], state['I'], state['R'] + infected = system.beta * i * s + recovered = system.gamma * i + + s -= infected + i += infected - recovered + r += recovered + + return pd.Series({'S': s, 'I': i, 'R': r}) +#+END_SRC + +#+BEGIN_SRC python :results output :exports both :noweb yes + <
>
+  <>
+
+  def run_simulation(system, update_func):
+      state = system.init
+      for t in np.arange(system.t0, system.t_end + 1):
+          state = update_func(state, system)
+      return state
+
+
+  init = pd.Series({'S': 89, 'I': 1, 'R': 0})
+  init /= sum(init)
+
+  state = update1(init, make_system(1 / 3, 1 / 4))
+
+  afterwards = (run_simulation(make_system(1 / 4, 1 / 5), update1))
+  totalInfected = 90 * afterwards.S
+
+  print(totalInfected)
+#+END_SRC
+
+#+RESULTS:
+: 54.8512613091
+
+The amount infected is $89 - 55 = 34$
+
+* Exercise 2
+Suppose the time between contacts is 4 days and the recovery time is 5 days.
+Simulate this scenario for 14 days and plot the results.
+
+#+BEGIN_SRC python :results file :var fname="chap05fig/2.png" :noweb yes :exports both
+  <
>
+  <>
+
+  def run_simulation(system, update_func):
+      df = pd.DataFrame(columns = system.init.index)
+      df.loc[system.t0] = system.init
+      for i in np.arange(system.t0, system.t_end):
+          df.loc[i + 1] = update_func(df.loc[i], system)
+      system.results = df
+
+  system = make_system(1 / 4, 1 / 5)
+  run_simulation(system, update1)
+  ax = system.results.plot()
+  ax.figure.savefig(fname)
+  return fname
+#+END_SRC
+
+#+RESULTS:
+[[file:chap05fig/2.png]]
+
+* Exercise 3
+Write functions that take a System object as a parameter, extract the results object from it, and compute the other metrics mentioned in the book:
+
+1. The fraction of students who are sick at the peak of the outbreak.
+2. The day the outbreak peaks.
+3. The fraction of students who are sick at hte end of the semester.
+   
+#+BEGIN_SRC python
+  def most_sick(system):
+      return system.results.I.max()
+
+
+  def most_sick_day(system):
+      return system.results.I.idxmax()
+
+
+  def end_sick(system):
+      return system.results.I.tail(1)
+#+END_SRC
+
+* Exercise 4
+Modify the parameters M, K, and B, and see what effect they have on the shape of the curve.
+Read about the [[https://en.wikipedia.org/wiki/Generalised_logistic_function][generalized logistic function on Wikipedia]].
+Modify the other parameters and see what effect they have.
+
+#+BEGIN_SRC python :exports both :results file :var fname="chap05fig/logistic.png"
+  import matplotlib.pyplot as plt
+  import numpy as np
+
+
+  def logistic(x, A=0, B=1, C=1, M=0, K=1, Q=1, nu=1):
+      exponent = -B * (x - M)
+      denom = C + Q * np.exp(exponent)
+      return A + (K - A) / denom ** (1 / nu)
+
+
+  def compute_factor(spending):
+      return logistic(spending, M=0, K=2, B=0.1)
+
+
+  spending = np.arange(0, 1200, 50)
+  percent_reduction = compute_factor(spending) * 100
+
+  plt.plot(spending, percent_reduction)
+  ax = plt.gca()
+  ax.figure.savefig(fname)
+
+  return(fname)
+#+END_SRC
+
+#+RESULTS:
+[[file:chap05fig/logistic.png]]
+
+* Exercise 5
+Suppose the price of the vaccine drops to $50 per dose.
+How does that affect hte optimal allocation of the spending?
+
+#+BEGIN_SRC python :noweb yes :var fname="chap05fig/budget.png" :results file :exports both
+  <
>
+  <>
+
+  def run_simulation(system, update_func):
+      """Runs a simulation of the system.
+
+      Add a DataFrame to the System: results
+
+      system: System object
+      update_func: function that updates state
+      """
+      frame = pd.DataFrame(columns=system.init.index)
+      frame.loc[system.t0] = system.init
+
+      for i in np.arange(system.t0, system.t_end):
+          frame.loc[i+1] = update_func(frame.loc[i], system)
+
+      system.results = frame
+
+  def calc_total_infected(system):
+      """Fraction of population infected during the simulation.
+
+      system: System object with results.
+
+      returns: fraction of population
+      """
+      frame = system.results
+      return frame.S[system.t0] - frame.S[system.t_end]
+
+
+  def add_immunization(system, fraction):
+      """Immunize a fraction of the population.
+
+      Moves the given fraction from S to R.
+
+      system: System object
+      fraction: number from 0 to 1
+      """
+      system.init.S -= fraction
+      system.init.R += fraction
+
+
+  def add_hand_washing(system, spending):
+      """Modifies system to model the effect of hand washing.
+
+      system: System object
+      spending: campaign spending in USD
+      """
+      factor = compute_factor(spending)
+      system.beta *= (1 - factor)
+
+
+  def compute_factor(spending):
+      """Reduction factor as a function of spending.
+
+      spending: dollars from 0 to 1200
+
+      returns: fractional reduction in beta
+      """
+      return logistic(spending, M=500, K=0.2, B=0.01)
+
+
+  def logistic(x, A=0, B=1, C=1, M=0, K=1, Q=1, nu=1):
+      """Computes the generalize logistic function.
+
+      A: controls the lower bound
+      B: controls the steepness of the transition 
+      C: not all that useful, AFAIK
+      M: controls the location of the transition
+      K: controls the upper bound
+      Q: shift the transition left or right
+      nu: affects the symmetry of the transition
+
+      returns: float or array
+      """
+      exponent = -B * (x - M)
+      denom = C + Q * np.exp(exponent)
+      return A + (K-A) / denom ** (1/nu)
+
+
+  def sweep_doses(dose_array):
+      sweep = pd.Series()
+      for doses in dose_array:
+          fraction = doses / num_students
+          spending = budget - doses * price_per_dose
+
+          system = make_system(beta, gamma)
+          add_immunization(system, fraction)
+          add_hand_washing(system, spending)
+
+          run_simulation(system, update1)
+          sweep.loc[doses] = calc_total_infected(system)
+      return sweep
+
+
+  beta = 1 / 3
+  gamma = 1 / 4
+  num_students = 90
+  budget = 1200
+  price_per_dose = 50
+  max_doses = _per_dose = budget // price_per_dose
+  dose_array = np.arange(max_doses)
+
+
+  infected_sweep = sweep_doses(dose_array)
+
+  ax = infected_sweep.plot()
+  ax.figure.savefig(fname)
+  return fname
+#+END_SRC
+
+#+RESULTS:
+[[file:chap05fig/budget.png]]
+
+* Exercise 6
+Suppose we have the option to quarantine infected students.
+For example, a students who feels ill might be moved to an infirmary, or a private dorm room, until they are no longer infectious.
+
+How might you incorporate the effect of quarantine in the SIR model?
+
+#+BEGIN_SRC python
+  def quarantine(system, rate, gamma0):
+      system.gamma = gamma0 * (1 - rate)
+#+END_SRC
+
+#+RESULTS:
+: None
diff --git a/code/chap06fig/test.png b/code/chap06fig/test.png
new file mode 100644
index 00000000..efc1cc00
Binary files /dev/null and b/code/chap06fig/test.png differ
diff --git a/code/chap06mine.org b/code/chap06mine.org
new file mode 100644
index 00000000..6af82755
--- /dev/null
+++ b/code/chap06mine.org
@@ -0,0 +1,175 @@
+Exercise: Write a version of update1 that uses unpack.
+#+BEGIN_SRC python
+  def update1(state, system):
+      """Update the SIR model.
+    
+      state: State (s, i, r)
+      system: System object
+    
+      returns: State (sir)
+      """
+      unpack(state)
+
+      infected = system.beta * i * s    
+      recovered = system.gamma * i
+    
+      s -= infected
+      i += infected - recovered
+      r += recovered
+    
+      return State(S=s, I=i, R=r)
+#+END_SRC
+
+
+Exercise: Write a version of =plot_sweep_frame=, called =plot_sweep_frame_difference=, that plots the fraction infected versus the difference beta-gamma.
+
+#+BEGIN_SRC python :results file :var fname="chap06fig/test.png" :exports both
+  from modsim import (SweepSeries, TimeFrame, linspace, SweepFrame, State, np, System, unpack, linrange, plot)
+  import matplotlib.pyplot as plt
+
+
+  gamma_array = linspace(0.1, 0.7, 4)
+  beta_array = linspace(0.1, 0.9, 11)
+
+
+  def calc_total_infected(system):
+      """Fraction of population infected during the simulation.
+
+      system: System object with results.
+
+      returns: fraction of population
+      """
+      frame = system.results
+      return frame.S[system.t0] - frame.S[system.t_end]
+
+
+  def update1(state, system):
+      """Update the SIR model.
+
+      state: State (s, i, r)
+      system: System object
+
+      returns: State (sir)
+      """
+      s, i, r = state
+
+      infected = system.beta * i * s
+      recovered = system.gamma * i
+
+      s -= infected
+      i += infected - recovered
+      r += recovered
+
+      return State(S=s, I=i, R=r)
+
+
+  def run_simulation(system, update_func):
+      """Runs a simulation of the system.
+
+      Add a TimeFrame to the System: results
+
+      system: System object
+      update_func: function that updates state
+      """
+      unpack(system)
+
+      frame = TimeFrame(columns=init.index)
+      frame.loc[t0] = init
+
+      for i in linrange(t0, t_end):
+          frame.loc[i + 1] = update_func(frame.loc[i], system)
+
+      system.results = frame
+
+
+  def make_system(beta, gamma):
+      """Make a system object for the SIR model.
+
+      beta: contact rate in days
+      gamma: recovery rate in days
+
+      returns: System object
+      """
+      init = State(S=89, I=1, R=0)
+      init /= np.sum(init)
+
+      t0 = 0
+      t_end = 7 * 14
+
+      return System(init=init, t0=t0, t_end=t_end,
+                    beta=beta, gamma=gamma)
+
+
+  def sweep_beta(beta_array, gamma):
+      """SweepSeriess a range of values for beta.
+
+      beta_array: array of beta values
+      gamma: recovery rate
+
+      returns: SweepSeries that maps from beta to total infected
+      """
+      sweep = SweepSeries()
+      for beta in beta_array:
+          system = make_system(beta, gamma)
+          run_simulation(system, update1)
+          sweep[system.beta] = calc_total_infected(system)
+      return sweep
+
+
+  def sweep_parameters(beta_array, gamma_array):
+      """SweepSeriess a range of values for beta and gamma.
+
+      beta_array: array of infection rates
+      gamma_array: array of recovery rates
+
+      returns: SweepSeriesFrame with one row for each beta
+               and one column for each gamma
+      """
+      frame = SweepFrame(columns=gamma_array)
+      for gamma in gamma_array:
+          frame[gamma] = sweep_beta(beta_array, gamma)
+      return frame
+
+
+  frame = sweep_parameters(beta_array, gamma_array)
+
+
+  def plot_sweep_frame_difference(frame):
+      for gamma in frame.columns:
+          series = frame[gamma]
+          for beta in series.index:
+              frac_infected = series[beta]
+              plot(beta - gamma, frac_infected, 'ro', label='Simulation')
+
+
+  plot_sweep_frame_difference(frame)
+  ax = plt.gca()
+
+  ax.figure.savefig(fname)
+
+  return fname
+#+END_SRC
+
+#+RESULTS:
+[[file:chap06fig/test.png]]
+
+The plot implies that a larger difference causes a larger fraction infected.
+
+#+BEGIN_SRC python :results output
+  from modsim import *
+
+  s_inf_array = linspace(0.0001, 0.9999, 101)
+  c_array = log(s_inf_array) / (s_inf_array - 1)
+
+  frac_infected = 1 - s_inf_array
+  frac_infected_series = Series(frac_infected, index=c_array)
+
+  frac_infected_series.sort_index(inplace=True)
+  print(np.interp(0.26, frac_infected_series, frac_infected_series.index))
+
+#+END_SRC
+
+#+RESULTS:
+: 1.158096819542062
+
+The estimated c-value is 1.15.
diff --git a/code/chap07fig/milk.png b/code/chap07fig/milk.png
new file mode 100644
index 00000000..38f59619
Binary files /dev/null and b/code/chap07fig/milk.png differ
diff --git a/code/chap07mine.org b/code/chap07mine.org
new file mode 100644
index 00000000..ee845ad4
--- /dev/null
+++ b/code/chap07mine.org
@@ -0,0 +1,129 @@
+#+title: Chapter 7 Notebook
+
+#+name: pre
+#+BEGIN_SRC python
+  import pandas as pd
+  import numpy as np
+  from scipy.optimize import fsolve
+
+
+  def update(state, sys):
+      T = state.temp
+      T += -sys.r * (T - sys.T_env) * sys['dt']
+      return pd.Series({'temp': T})
+
+
+  def final_temp(system):
+      if hasattr(system, 'results'):
+          return system.results.temp[system.t_end]
+      else:
+          return system.init.temp
+
+
+  def run_simulation(sys, update_func):
+      results = pd.DataFrame(columns=sys.init.index)
+      results.loc[sys.t0] = sys.init
+      for t in np.arange(sys.t0, sys.t_end, sys['dt']):
+          results.loc[t + sys['dt']] = update_func(results.loc[t], sys)
+      sys.results = results
+
+
+  def make_system(T0=90, r=0.01, v=300, t_end=30):
+      return pd.Series({'init': pd.Series({'temp': T0}), 'volume': v, 'r': r,
+                        'T_env': 22, 't0': 0, 't_end': t_end, 'dt': 1})
+#+END_SRC
+
+* Exercise 1
+Simulate the temperature of 50 mL of milk with a starting temperature of 5 \deg C, in a vessel with the same insulation, for 15 minutes, and plot the results.
+
+#+BEGIN_SRC python :results file :var fname="chap07fig/milk.png" :noweb yes :exports both
+  <
>
+  milk = make_system(T0=5, v=50, t_end=15, r=0.1)
+  run_simulation(milk, update)
+  ax = milk.results.plot()
+  ax.figure.savefig(fname)
+  return fname
+#+END_SRC
+
+#+RESULTS:
+[[file:chap07fig/milk.png]]
+
+* Exercise 2
+When you call =fsolve=, it calls =error_func1= several times.
+To see how this works, add a print statement to =error_func1= and run fsolve again.
+
+#+BEGIN_SRC python :results output :noweb yes :exports both
+  <
>
+
+  def error_func1(r):
+      print('error_func1 run')
+      system = make_system(r=r)
+      run_simulation(system, update)
+      return final_temp(system) - 70
+
+
+  fsolve(error_func1, 0.01, xtol=1e-8)
+#+END_SRC
+
+#+RESULTS:
+: error_func1 run
+: error_func1 run
+: error_func1 run
+: error_func1 run
+: error_func1 run
+: error_func1 run
+: error_func1 run
+: error_func1 run
+: error_func1 run
+
+* Exercise 3
+Repeat this process to estimate =r_milk=, given that it starts at 5 \deg and reaches 20 \deg after 15 minutes.
+
+#+BEGIN_SRC python :noweb yes :results output :exports both
+  <
>
+  def milk_func(r):
+      system = make_system(r=r, T0=5, t_end=15)
+      run_simulation(system, update)
+      return final_temp(system) - 20
+
+  r = fsolve(milk_func, 0.1, xtol=1e-8)
+  print(r)
+#+END_SRC
+
+#+RESULTS:
+: [ 0.13296079]
+
+* Exercise 4
+Suppose the coffee shop won't let me take milk in a separate container, but I keep a bottle of milk in the refrigerator at my office.
+In that case is it better to add the milk at the coffee shop, or wait until I get to the office?
+
+- Hint :: Think about the simplest way to represent the behavior of a refrigerator in this model. The change you make to test this variation of the problem should be very small!
+
+#+BEGIN_SRC python :noweb yes :results output :exports both
+  <
>
+
+
+  def mix(s1, s2):
+      assert s1.t_end == s2.t_end
+
+      volume = s1.volume + s2.volume
+
+      temp = (s1.volume * final_temp(s1) +
+              s2.volume * final_temp(s2)) / volume
+
+      return make_system(T0=temp, v=volume, r=s1.r)
+
+
+  refMilk = make_system(T0=5, r=0, v=50, t_end=30)
+  milk = make_system(T0=5, v=50)
+  coffee = make_system(T0=90, t_end=30, r=0.01, v=300)
+
+  run_simulation(coffee, update)
+  print(mix(coffee, refMilk).init)
+#+END_SRC
+
+#+RESULTS:
+: temp    62.685393
+: dtype: float64
+
+It is slightly better to mix later.
diff --git a/code/chap08-fig01.pdf b/code/chap08-fig01.pdf
new file mode 100644
index 00000000..18fcc3ba
Binary files /dev/null and b/code/chap08-fig01.pdf differ
diff --git a/code/chap08-fig02.pdf b/code/chap08-fig02.pdf
new file mode 100644
index 00000000..13bcfd14
Binary files /dev/null and b/code/chap08-fig02.pdf differ
diff --git a/code/chap08-fig03.pdf b/code/chap08-fig03.pdf
new file mode 100644
index 00000000..a70fd8e9
Binary files /dev/null and b/code/chap08-fig03.pdf differ
diff --git a/code/chap08-fig04.pdf b/code/chap08-fig04.pdf
new file mode 100644
index 00000000..4282829c
Binary files /dev/null and b/code/chap08-fig04.pdf differ
diff --git a/code/chap08fig/interp.png b/code/chap08fig/interp.png
new file mode 100644
index 00000000..b7ce44a6
Binary files /dev/null and b/code/chap08fig/interp.png differ
diff --git a/code/chap08mine.ipynb b/code/chap08mine.ipynb
new file mode 100644
index 00000000..e270c47e
--- /dev/null
+++ b/code/chap08mine.ipynb
@@ -0,0 +1,2945 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Modeling and Simulation in Python\n",
+    "\n",
+    "Chapter 8: Pharmacokinetics\n",
+    "\n",
+    "Copyright 2017 Allen Downey\n",
+    "\n",
+    "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# If you want the figures to appear in the notebook, \n",
+    "# and you want to interact with them, use\n",
+    "# %matplotlib notebook\n",
+    "\n",
+    "# If you want the figures to appear in the notebook, \n",
+    "# and you don't want to interact with them, use\n",
+    "# %matplotlib inline\n",
+    "\n",
+    "# If you want the figures to appear in separate windows, use\n",
+    "# %matplotlib qt5\n",
+    "\n",
+    "# tempo switch from one to another, you have to select Kernel->Restart\n",
+    "\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from modsim import *"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Data\n",
+    "\n",
+    "We have data from Pacini and Bergman (1986), \"MINMOD: a computer program to calculate insulin sensitivity and pancreatic responsivity from the frequently sampled intravenous glucose tolerance test\", *Computer Methods and Programs in Biomedicine*, 23: 113-122.."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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", + "
glucoseinsulin
time
09211
235026
4287130
625185
824051
1021649
1221145
1420541
1619635
1919230
2217230
2716327
3214230
4212422
5210515
629215
728411
827710
92828
1028111
122827
142828
162858
182907
\n", + "
" + ], + "text/plain": [ + " glucose insulin\n", + "time \n", + "0 92 11\n", + "2 350 26\n", + "4 287 130\n", + "6 251 85\n", + "8 240 51\n", + "10 216 49\n", + "12 211 45\n", + "14 205 41\n", + "16 196 35\n", + "19 192 30\n", + "22 172 30\n", + "27 163 27\n", + "32 142 30\n", + "42 124 22\n", + "52 105 15\n", + "62 92 15\n", + "72 84 11\n", + "82 77 10\n", + "92 82 8\n", + "102 81 11\n", + "122 82 7\n", + "142 82 8\n", + "162 85 8\n", + "182 90 7" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv('glucose_insulin.csv', index_col='time')\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the glucose time series looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nSURUx8SyZMkSTJs2DRMmTICbmxvMzLTHVxp6GhUiIjJtohPLhAkThO+PHj2qdbyp9wojIqIqohPL\nihUrDBkHERE1EqITy+jRow0ZBxERNRJPNKXL7du3hUkfW7duLWoCSSIiahrqlFhOnz6NlStXaqyH\nAgBdunTB/Pnz4e/vr9fgiIio4RGdWE6dOoVXX30Vjo6OiI6Ohre3N4CqNed3796NqKgoJCcni54r\njIiIGifRieWf//wn2rRpg23btmmtMR8dHY3w8HB89NFH2Lp1q96DJCKihkP0Ql8XLlzASy+9pJVU\nAMDe3h7jxo3D+fPn9RocERE1PKITi6Wlpc615aspFApYWlrqJSgiImq4RFeF9e3bF6mpqQgKCkLX\nrl01jp07dw6pqano27ev3gNsyLiiJBE1RaITy1tvvYXw8HBMmDAB3bt3R9u2bQEAly5dwo8//oiW\nLVvirbfeMligDQ1XlCSipkp0VZinpyf27duHyMhIFBUVYf/+/di/fz+KioowadIk7N27F56enoaM\ntUGpbUVJIqLGrE7jWFq2bIl3330X7777rqHiaTS4oiQRNVWin1iobtzcNLdv3gTOnKn6io+vqioj\nImqManxieeeddyCRSLB06VKYm5vjnXfeeezJJBIJli9frtcAG6qHV5S8eRP49deq7zt1YnsLETVu\nNSaWkydPQiKRQKVSwdzcHCdPnnzsySQSiV6Da8geXlEyJwewswM8PQFn5z/LpKczsRBR41NjYjly\n5Eit2/R41StKXrsGqFTax9neQkSNkeg2ltOnT6OoqKjG40VFRTjNhgOdHm1vqebu/nTjICJ6GkQn\nlkmTJuH48eM1Hv/+++8xadIkvQTV2ISEaO+7eRPIzwemT2djPhE1LqITi1qtrvV4eXk5zM3NRV/4\n0KFDiImJQWBgILp3744xY8bgwIEDWuW++uorDB06FL6+vhgzZgxOnDihVebGjRuYMWMGunfvjj59\n+iA+Ph5KpVJ0LIbWqxcwdSrg4QGYmQESSdUXUFVFVt2Yz+RCRI1BreNYrl27JizoBVRNka+ruksu\nlyMtLQ3udajbSUlJgYeHB9555x20aNEC2dnZmDt3Lu7cuYPIyEgAwIEDB/D+++8jNjYWPXv2xK5d\nu/Daa69hx44d6NChAwDgwYMHmDJlCiwsLLB27VrI5XKsXLkScrkcq1evFh2PoVW3twBVTyi68jQb\n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\nLwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(data.glucose, 'bo', label='glucose')\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration (mg/dL)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the insulin time series." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(data.insulin, 'go', label='insulin')\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the book, I put them in a single figure, using `subplot`" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(2, 1, 1)\n", + "plot(data.glucose, 'bo', label='glucose')\n", + "decorate(ylabel='mg/dL')\n", + "\n", + "subplot(2, 1, 2)\n", + "plot(data.insulin, 'go', label='insulin')\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='$\\mu$U/mL')\n", + "\n", + "savefig('chap08-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Interpolation\n", + "\n", + "We have measurements of insulin concentration at discrete points in time, but we need to estimate it at intervening points. We'll use `interpolate`, which is a wrapper for `scipy.interpolate.interp1d`" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource interpolate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The return value from `interpolate` is a function." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "I = interpolate(data.insulin)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use the result, `I`, to estimate the insulin level at any point in time." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(68.0)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "I(7)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`I` can also take an array of time and return an array of estimates, which we can plot." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAETCAYAAAAPucBzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd4VHXWwPHvpCekQCCQDiRBWmgB\nFOkQui5WkKqgEOkIogu+uiIW1EUi0ouCiosIZhFUwlIVC4oEFmmGkEBIg0DKZFJmkpl5/8hmyKQP\nmSHtfJ6HR+beO3fOhN17cn5Vodfr9QghhBAWYlXTAQghhKjfJNEIIYSwKEk0QgghLEoSjRBCCIuy\nqekAapu8vDzOnTuHh4cH1tbWNR2OEELUCVqtltTUVIKDg3FwcDA6J4mmhHPnzjFx4sSaDkMIIeqk\nL774gh49ehgdk0RTgoeHB1D4w/L09KzhaIQQom5ISUlh4sSJhmdocZJoSihqLvP09MTX17fS608m\nnmR/zH6Ss5LxcvFiZNBIevr0tHSYQghRK5XV5SCJphpOJp5kS9QWYtNjSctNo3Xj1iQqEwEk2Qgh\nxP/IqLNq2B+zH3WBmoSsBHIKcohXxgMQGRNZw5EJIUTtIYmmGpKzksnX5Rtea7QaAJKykmoqJCGE\nqHUk0VSDl4sXxZeK0+q1AHi7eNdUSEIIUetIoqmGkUEj0XMn0eh0OgBGBI2oqZCEEKLWkURTDT19\nevJkhydxtnVGgQInWyemdJ0iAwGEEKIYGXVWTR2bdyTEK8TwuotnlxqMRgghah+paKqpQFdg9Fpd\noK6hSIQQonaSRFNNWp3W6HVeQV4NRSKEELWTJJpqKhppVkStlYpGCCGKk0RTTSUrGmk6E0IIY5Jo\nqkkqGiGEqJgkmmqSikaIe2Px4sU8/vjjNfLZERERtG3bluzsbAASEhJo27YtR48etcjnZWdn07Zt\nWyIiIkx63/fff2/ye+6FWjW8+dq1a3z88cecPn2amJgYevToweeff244f/PmTbZu3crPP//M9evX\ncXV1pVevXixcuJAWLVoY3evGjRssW7aMX375BTs7Ox566CFeeuklHB0dzRqzVDRC3BuzZs0iL692\nDLZp3rw5O3fuJCAgoKZDMRIZGUl6enqNJeTyVCvRFBQUoFAozLYT5eXLl/nhhx/o0qULBQUFpc6f\nP3+eQ4cOMWbMGDp37szt27dZvXo148ePZ9++fTRq1AiA/Px8nnvuOWxtbQkPD0epVPLuu++iVCpZ\nsWKFWWItIhWNEPeGv79/TYdgYGdnR9euXWs6jDrDpETzxx9/cPjwYUPFUVRGOjs7ExgYSLdu3QgN\nDS21u1pVDR48mCFDhgAwb9480tPTjc53796d/fv3Y2NzJ+wOHTowYsQI/vOf//DYY48BcODAAa5c\nucJ//vMf/Pz8Cr+ojQ0LFy5kzpw5tGrV6q7iK4tUNKKhqak9mBYvXkx0dLShaSgiIoIlS5awd+9e\n3n33XU6fPo2npycLFy5k2LBhhvf98ccfrFy5kkuXLgHg5+fHjBkzGDlyJABt27bltddeY9KkSYb3\nrF69mu3bt/Pbb7+VGUtCQgKhoaFs2LCBQYMGAYXPr+HDh9OiRQs++eQTcnNz6du3L2+88Qaurq4V\nfrcDBw6wcuVKkpOT6dSpE4sXLy51zZ49e9i5cydXrlxBr9fTrl07Xn75ZTp16mT4+Rw4cMDwnQDm\nzJnD3LlzOXbsGJ9++imXLl1CrVYTFBTEvHnz6Nu3b+U/eDOoNNEUFBTw1VdfsW3bNuLj43Fzc6Nj\nx46MGjUKNzc39Ho9SqWShIQEIiIi2Lp1K76+vkydOpWxY8dia2tb5WCsrCruMirrH6t169Y4Ojpy\n8+ZNw7Eff/yRTp06GZIMwJAhQ7C1teX48ePmTTQyj0Y0IEV7MBVJVCYaXtfU0kuLFi1i7NixPPfc\nc2zfvp2FCxdy6NAhPD09UalUzJgxg9DQUGbPno1eryc6OpqsrCyLxLJ//37atm3Lm2++SUpKCu++\n+y4rV65k6dKl5b7n/PnzLFiwgCFDhvDKK69w+fJlXnjhhVLXJSQk8Oijj+Lv749Go+G7775j4sSJ\nfPfdd/j5+TFr1iySkpLIysri9ddfBzDsEpyQkMCgQYN49tlnsbKy4scff2T69Ols376d7t27W+Rn\nUVyliWbo0KHk5+fz2GOPMWLECDp27Fjh9efOnSMyMpL169fz8ccfc+TIEbMFW5ZLly6Rm5trlDxi\nY2MJCgoyus7Ozg5/f39iY2PN+vklK5qirQKEqI/2x+wv83hkTGSNJZpnnnmGJ598EoCOHTvSp08f\njh49yvjx44mLiyMrK4vXXnsNZ2dnAIv+Fm9jY8PatWsNrS4xMTF8//33FSaaTZs20apVK1atWoVC\noWDAgAHk5+fz4YcfGl03Z84cw991Oh19+vTh7NmzfPPNN8yZMwd/f38aN26MXq8v1axXvFrT6XQ8\n8MADxMTEsHv37tqRaGbNmsUjjzyCnZ1dlW4YHBxMcHAw8+bN45tvvql2gBXR6XS8/fbbtGrVisGD\nBxuOK5VKXFxcSl3v6uqKUqk0awzSRyMakuSs5DKP1+QeTMUTR5MmTXB3dyclJQUo7NdxcnJi0aJF\nPPnkk9x///2VNmNVxwMPPGDUtB8UFMTt27fJz88vt3Xnzz//ZNSoUSgUCsOxYcOGlUo0V65cYeXK\nlZw+fZrbt28bjl+9erXSuFJSUggPD+eXX34hNTXVsL1JSEhIJe80j0oTzZgxY0y6oVarRaPR4Ojo\naPJ7TfXBBx9w5swZtm/fblITnTmVrGik6UzUZ14uXobtyouryT2YSv5SaWdnh0ZT2LLg5ubG1q1b\nWb16NS+88AJ6vZ4+ffrw2muvGTWtm0vJJGZra4ter0ej0ZT7jEpNTaVp06ZGx9zd3Y1eq1Qqnn32\nWZo2bcrixYvx9vbG3t6eV1991fBdy6PT6Zg5cybZ2dnMmzePli1b4ujoyEcffWSUsCzJ7MObN23a\nxEcffcTFixfNfWsjX3zxBR9//DErV66kSxfjFZNdXV1RqVSl3qNUKmnXrp1Z4yhV0chgAFGPjQwa\nadRHU6Q278HUtWtXPv74Y/Ly8vjll1949913efHFF/nqq6+AwsSUn59v9J7MzMx7Fp+Hh0epB35a\nWprR6zNnzpCSksInn3xCYGCg4XhV+pquXbvGhQsX2Lx5M/379zccv5dDxevkhM0DBw7w1ltv8dJL\nLzFq1KhS5wMCAkr1xWg0Gq5fv272ce+lRp1J05mox3r69GRayDR8XX2xUljh6+rLtJBpdWIPJgcH\nBwYPHswTTzxBTEyM4binpydXrlwxvNbpdJw4ceKexRUcHMyRI0eMduv9z3/+Y3RNUVIo3oURFRVF\nYqJxdWlra4tabfwMKnpd/L2JiYmcPn3aPF+gCmrVhM2q+O2331i0aBGTJk3iueeeK/Oa/v378/LL\nL5OYmIiPjw8AR44cQaPR0K9fP7PGIxWNaGh6+vSsE4kF4NixY3z99deEhobi7e3NjRs32LlzJ716\n9TJcM2TIEP71r3/Rvn17/Pz82L17d5ktIpYyffp0xo4dy/z583nyySe5fPkyu3fvNrqma9euODk5\n8dprrzFt2jRSUlJYs2ZNqYnqrVu35vDhwxw6dIgWLVrQvHlzAgIC8PT05L333mP+/PlkZ2fz0Ucf\n0bx583v2HWtVosnNzeWHH34ACmf2q1QqIiMjARgwYABJSUnMnj2bgIAARo0axZkzZwzvdXd3N0zo\nGj58OBs2bGDu3LnMnz+frKwsli9fzsMPP2zWoc0g+9EIUZv5+/ujUCgIDw/n9u3buLu7M3DgQBYu\nXGi4Zs6cOaSlpbFq1SpsbW2ZOHEiQUFBfPHFF/ckxk6dOrFy5UpWrlzJ7NmzCQ4OJjw83KiPu1mz\nZqxatYr333+fWbNm0bJlS9544w22bDFuxpwwYQIXL17klVdeITMz0zCPZvXq1Sxbtox58+bh6enJ\njBkz+P3334mOjr4n31GhL16vmcH69evvuo+maBJUWQ4fPszvv//OkiVLyjz/2GOP8e677xpep6Sk\nsGzZMn799Vfs7OwYNWoUL7/8cqVL0BTFcPjwYXx9fSuNeduZbfx6/VfDazcHN94f+n6l7xNCiPqk\nomdnlSqaohm1VXHr1i3ToivG19eXv/76q8LzVV3Dx9PTk3Xr1t11LFUlw5uFEKJiVUo0jz76qNEY\n74ro9foqX1sflLUETUP7GQghREWqlGiWL19u6TjqrJIVjV6vJ1+Xj5111Sa4CiFEfVelRFO0WKUo\nrWRFA4XNZ5JohBCiUJ2cR1OblKxoQIY4CyFEcXc1vDkpKYlvvvmGhIQElEolJQeuKRQKVq9ebZYA\na7vyKhohhBCFTE40e/fu5ZVXXqGgoABXV1fDiqjFNaSO8JLzaEAqGiGEKM7kRBMeHk5AQACrVq2i\ndevWloipTimz6UwqGiGEMDC5jyYjI4Nx48ZJkvmfsprOZAVnIYS4w+REExISwvXr1y0RS50kgwGE\nuDcWL15c5QnbRXbu3MmhQ4csFFH1rV69mgceeMCk92g0GlavXm3WFfK3b99u2P7ZEkxONK+++ioH\nDhwgIiICrbb0Q7ahkcEAQtwbs2bNMlpmqipqe6K5G/n5+axZs8biW7GYk8l9NK1bt+b555/n1Vdf\n5R//+AceHh5YWRnnK4VCUe/+ccsjFY0Q90bRork1RavVotVqq7zbsLjD5Ipm8+bNLF26FBcXF0JC\nQujQoQPt2rUz+mPJEqy2kYpGiHujeNNZREQEbdu25a+//mLq1Kl07dqVESNGGO3jMnnyZM6fP8+/\n//1v2rZtS9u2bYmIiDCc37VrFw899BDBwcEMGjSIzZs3l/l5hw4d4qGHHqJz586cPXvW8Nlnz55l\nwoQJdO7cmeHDh3Pw4MFSMW/fvp1hw4YRHBzM0KFD2bZtW4XfMScnh2XLljF8+HC6dOnC4MGDeeON\nN4y2LSjafnnJkiWG75WQkAAU7j3z/vvvM2DAAIKDgxk9erRhRfwiGo2GZcuW0aNHD+6//37eeecd\nCgpKj541J5Mrmm3bttG7d2/Wr18vmR2paISoSYsWLWLs2LE899xzbN++nYULF3Lo0CE8PT15/fXX\nmTt3Ln5+fsyaNQu4UxVt2bKF8PBwpk2bxv3338/58+dZtWoVjo6OTJo0yXD/xMRE/vnPfzJr1iw8\nPDzw9fUlPj4egAULFjBhwgSef/55du/ezfz584mIiDDs4vvVV1/x5ptvMnXqVPr27ctvv/3Gu+++\ni0ajISwsrMzvk5eXh1arZcGCBbi7u5OcnMyGDRuYP38+H3/8MQCffvopzzzzDDNnzmTgwIEAhr1l\n5s2bx9mzZ5k7dy7+/v7s37+fmTNn8vXXX9O+fXsAVqxYwa5du1iwYAGBgYHs2rXLsB2LpZicaPLy\n8hg6dKgkmf+RikbUVQevHGRf9L4a+d+rvY09f7vvbwwNHFqt+zzzzDM8+eSTAHTs2JE+ffpw9OhR\nxo8fT1BQEI6Ojri7u9O1a1fDe1QqFWvXrmXmzJnMmTMHgD59+pCbm8v69esZP3481tbWQOEo223b\nthke0sWNGTPGsPliv379GDVqFBs3biQ8PBydTsfq1at5/PHHWbx4MQB9+/YlKyuLjRs38swzz2Bv\nb1/qnu7u7rzxxhuG1wUFBfj6+jJhwgSSkpLw9vamU6dOQGHSLP69fv31V44dO8bnn3/O/fffb/jM\nq1evGrZvSU9P58svv2Tu3Lk8++yzRrFbkslNZ/379ycqKsoSsdRJUtGIuupg7MEa+6VIXaDmYGzp\npiZT9e3b1/D3Jk2a4O7uTkpKSoXvOX36NDk5OYwYMYKCggLDn169enHr1i2j97do0aLMJAMwdOid\nJGllZUVoaChnz54FCvfDunnzJiNGjDB6z6hRo1CpVBVuh7Jnzx4effRRunXrRseOHZkwYQIAV69e\nrfB7/fLLL3h4eBASEmL0vR588EHOnTsHQHR0NGq12mjfr6LYLcnkimbBggXMmzePt956iyeffBIv\nLy9D9i+urBUD6iOZRyPqqqEBQ2u0ohkaUL1qBsDFxcXotZ2dHRqNpsL3pKenA/DQQw+VeT45Odmw\nBXyzZs3KvY+7u7vR66ZNm5Kamgpg+G/Tpk1LXQOQmZlZ5j0PHjzI3//+d8aPH8+CBQto3Lgxqamp\nzJ49G7W64n+n9PR0UlNT6dixY6lzRc/oov3CyovLUkxONMOGDQMKN0OraKvTujT0rjpkZQBRVw0N\nHFrtpqu6yM3NDYCNGzeW+YCt6mT0tLQ0mjRpYnh9+/ZtPDw8AAz/vX37ttF7il4XxVBSZGQkXbp0\nYenSpYZjv//+e5XicXNzo0WLFqxdu7bca4oS5+3bt2ncuHGpuCzF5EQze/bsBrWWWUX0ej06va7U\ncY224t+ohBD3hp2dXalKoFu3bjg4OHDz5k1DZ/rdOHjwIIGBgQDodDoOHz5M586dgcIdfps3b05k\nZCQDBgwwvGf//v04OzuXOzI3Ly+vVP/3vn37jF7b2toClPpeDz74IFu3bsXJyckQV0n33Xcf9vb2\nHD58uFTslmRyopk7d64l4qiTymo2A2k6E6K2aN26NT/99BPHjx+ncePG+Pr60qRJE+bMmcPbb79N\nYmIiPXv2RKfTcfXqVX777bcKK4Lidu3aha2tLW3atGH37t3Ex8ezcuVKoLDfY+7cufzjH/+gcePG\n9OnTh5MnT7Jjxw4WLlxY5kAAgN69e7Ns2TLWr19Ply5d+OGHH/j111+NrrGzs8PX15f9+/fTpk0b\n7O3tadu2LX369KFv3748++yzTJ8+naCgIFQqFZcuXUKtVvPiiy/SpEkTxo4dy+rVq7GxsSEoKIhd\nu3aRk5NTvR90JaqUaP71r38xcOBAvL29LRpMXVNWsxnIYAAhaotZs2aRnJzMCy+8gEqlYvny5Tz+\n+ONMnz6d5s2b8+mnn7J161bs7e1p1aqVSaOvwsPDeeedd/jwww/x8vIiPDycDh06GM6PHTsWtVrN\nZ599xueff06LFi1YvHgxU6ZMKfee48aNIyEhgc8++wy1Wk2fPn344IMPGDt2rNF1b7zxBu+99x5T\np05Fo9Fw+PBhfH19WbNmDRs2bODTTz8lOTkZNzc32rVrx+TJkw3vffnllykoKGDt2rVYWVkxevRo\npk6davKqC6ZQ6EtuJlOGnj17olKpCAgIoH///gwYMIAePXpgY3NX29nUagkJCYSGhhr+4SqSk5/D\ngsgFpY472znzwfAPLBWiEKIGRUREsGTJEqKiomjUqFFNh1NrVPTsrNLw5hMnTvDpp58yaNAgfvrp\nJ6ZMmUKvXr2YO3cuu3fv5ubNm2YJ9Nq1a/zjH//gb3/7G+3btzfKwkX0ej0bNmxgwIABdO7cmYkT\nJ5Y58CAmJoZnnnmGLl260LdvX1atWmX2tdmKVzS21raGv0tFI4QQd1Qp0VhbW3P//fezaNEi9u3b\nx7Fjx1i0aBFarZa3336bAQMG8OijjxIeHk5UVFSpHTer6vLly/zwww+0bt2aVq1alXnNpk2bWLdu\nHdOnT2fDhg04OTkxZcoUw3BCKBw6OGXKFBQKBevWrWP27Nls3bqVjz766K7iKk/xPhpHG0fDIIl8\nbX6ZgwSEEKIhuqu2L09PT8aNG8e4cePIz8/n999/58cff+TAgQNs3LgRNzc3+vTpY6goqmrw4MEM\nGTIEKFxKoWi8exG1Ws2mTZsICwszLBPRtWtXBg8ezPbt21mwoLAZ68svv0StVrNmzRqcnZ3p06cP\nKpWKNWvWMH36dLPN8Sle0dhY2WBvbW8YCKAuUONo62iWzxFC1B6PP/64ydsVNHQmrwxQkq2tLX36\n9GHJkiVERkZy8OBB5syZQ1ZWFidPnjQtGKuKw4mKikKlUjFy5EjDMScnJwYNGsTx48cNx3788Uf6\n9u1rlFAeeugh8vLyqjwmvSqKVzTWVtbY29wZSSLNZ0IIUajaiaYkPz8/Jk+ezObNm5k2bZpZ7x0b\nG4u1tXWpZrXAwEBiY2ONrgsICDC6xtvbG0dHR6Prqqt4RWOtsMbeuliikUmbQggBVLHpbPny5eWe\nUygU2Nvb4+3tTd++fQ1LN1iCUqnEycmp1JI3bm5u5ObmotFosLOzQ6lUllqaAsDV1RWlUmm2eEpW\nNLYKGRAghBAlVSnRfPrpp1W6mbW1NVOnTmXRokXVCqquKFnR2FnfmdErFY0QQhSqUqK5dOlShefz\n8vKIi4vjiy++4OOPP6Zly5aMGTPGLAEW5+rqSk5ODlqt1qiqyczMxNHR0bB0g6urq9FGQUWUSiWu\nrq5mi0f6aIQQonJm6aNxcHCgffv2vPXWWzz44IN8+eWX5rhtKQEBAWi1Wq5du2Z0vGSfTEBAQKm+\nmOTkZHJzc0v13VRHRX00sgyNEEIUMvtggP79+5u1w724kJAQnJ2djXaDy83N5ejRo/Tr188ohp9+\n+smoqvn+++9xcHAwbAhkDgW6O9uf2ljZ4GDjYHgtC2sKIUQhs68hY2VlddcTNnNzcw37W9+4cQOV\nSmVIKgMGDMDR0ZGwsDDWrVuHm5sbAQEBbN26FZ1OZ7SKwLhx4/j888+ZO3cu06dP5/r166xZs4Yp\nU6aYdZ+ckk1n0kcjhBClmT3R/Prrr+XO6q/M7du3mT9/vtGxotdF6+eEhYWh0+nYuHEjGRkZBAcH\ns3XrVqMNitzc3Ni2bRvLli1jxowZuLq68swzz5h95elSTWc20nQmhBAlmS3RJCUlsX37do4dO8aS\nJUvu6h6+vr4VbnEKhcOpZ86cycyZMyu8LigoiM8+++yu4qiqkhVN8aYzGQwghBCFqpRoevbsWeFm\nZ2q1Go1Gg16v57HHHuPpp582W4C1mUzYFEKIylUp0YSGhlaYaOzs7PD29qZ///60b9/ebMHVdjK8\nWQghKlelRGPJDXHqMqlohBCicib30cybN4927dpx33330bZtW/z8/IzO//XXXzg6OuLv72+2IGsr\nqWiEEKJyJiea+Ph4jh07hkajQaFQ4ODgQJs2bWjbti1t2rTh9OnT/Pnnnxw6dMgS8dYqUtEIIUTl\nTE40e/bsQavVEhcXR3R0NH/99ReXLl3iu+++Izc3FwAvLy+zB1obSUUjhBCVu6vhzdbW1gQFBREU\nFMSoUaMA0Gg0bN68mc8++4yNGzeaNcjaSpagEUKIypltCRo7Oztmz55Nr169WLlypbluW6tVOI9G\nms6EEAKwwFpn3bt358SJE+a+ba1U0coA0nQmhBCFTG46e+2114xGnZVcdj8+Pp6mTZuaLcDarLK1\nzvR6fYXzj4QQoiEwOdEcP36cXbt2AYXLwbRo0YJ27drRunVrbt++zdGjR1mxYoXZA62NSlY0NlY2\nWFtZo9Vp0el1aPVabBRmX05OCCHqFJOfgseOHUOlUhEdHc3ly5eJjo4mOjqaPXv2kJ6eDsDs2bNp\n2bIlgYGBBAQEEBQUxMMPP2z24GtayYoGwN7anhxdDlBY1djYSaIRQjRsd/UUdHZ2JiQkhJCQEKPj\nt27dMiSeoiR0/Phx8vLy6mWiKbkfDYC9jT05+YWJJq8gj0Z2jWokNiGEqC3M+ut2s2bNaNasGb17\n9zY6fv36dXN+TK1RsukMkBWchRCiBLOPOitLyWVq6ovyms6KyBBnIYSoQqIZPXo03377LQUFBZVd\nalBQUMDevXsZPXp0tYKr7cqqaG6obnAq+RTH44+z8teVnEw8WVPhCSFErVBp09moUaN48803efPN\nNwkNDaV379506NABX19f7OwKh/NqNBquX7/OuXPn+PXXXzly5AgKhYJnn33W4l+gJpWsaE4mnuSP\n5D/Izs8GIDkrmS1RWwDo6dOzRmIUQoiaVmmimTFjBpMmTWLXrl38+9//JiIiwjA3xN7eHr1ej0aj\nAUCv19OmTRtmzZrFE088gYuLi2Wjr2ElK5p9l/cZKhu4k4giYyIl0QghGqwqDQZwdnZm6tSpTJ06\nlYSEBE6fPk1sbCwZGRkANG7cmICAALp27Vpv+2PKUrKiSc5KNk40/0tESVlJ9zw2IYSoLUwedebr\n64uvr68lYqlzSlY0Xi5exKTFGI4VDX/2dvG+57EJIURtcU9GndVXxefRWFtZMzJopGE+TfHzI4JG\n3PPYhBCitqiTiea7777jscceo1u3bvTr14+XX36ZGzduGF2j1+vZsGEDAwYMoHPnzkycOJGLFy+a\nNQ6jpjOFNT19evJI20dwtnVGgQJXB1emhUyT/hkhRINW5xLN4cOHWbhwId26dWPdunUsWrSIP/74\ng+effx6dTme4btOmTaxbt47p06ezYcMGnJycmDJlCqmpqWaLxajp7H/zaLp5dSPEK4R+/v0YETRC\nkowQosGrcwtxffvtt3Ts2JF//OMfhmPOzs7MmjWLuLg4AgMDUavVbNq0ibCwMCZNmgRA165dGTx4\nMNu3b2fBggVmiaVkRQPgZOtkOFa0FI0QQjRkda6iKSgowNnZ2ehY0VYFer0egKioKFQqFSNHjjRc\n4+TkxKBBgzh+/LjZYimronG0dTQcy83PNdtnCSFEXVWtRJOdnU1ycjJJSUml/ljKE088walTp9iz\nZw8qlYq4uDg+/PBDevXqRVBQEACxsbFYW1vTqlUro/cGBgYSGxtrtlgqq2hyCyTRCCGEyU1narWa\nNWvWsHv3bsM8mrKYu+O9yMCBA1m+fDn/93//x9///ncAunXrxvr16w3XKJVKnJycsLa2Nnqvm5sb\nubm5aDQaw6oG1VFmRWNzp6KRpjMhhLiLRLN06VL27NnDkCFD6N69O25ubpaIq1wnTpzg9ddf5+mn\nn6Z///7cvn2b1atXM3v2bLZt21YquVhSWRWNNJ0JIYQxkxPNwYMHGTNmDMuWLbNEPJV67733GDx4\nMC+99JLhWLt27Rg5ciSHDx9m2LBhuLq6kpOTg1arNUo8mZmZODo6mqWaAeOKxrAfjbU9CoWicGke\nrYYCXYHR3BohhGho7qqPpkOHDuaOo8piY2Np37690bGAgAAcHByIj483vNZqtVy7dq3UewMCAswW\nS1nbBCgUCuN+GqlqhBANnMmMaGeFAAAgAElEQVSJZvDgwZw4ccISsVSJt7c3Fy5cMDp25coV8vLy\n8PHxASAkJARnZ2ciIyMN1+Tm5nL06FH69etntljK2iYAjPtpZECAEKKhM7lNZ968ecybN4+lS5cy\nbtw4vLy8yuwXKTkE2VzGjRvH8uXLad68Of379+fWrVusXbsWHx8fBgwYABSuKh0WFsa6detwc3Mj\nICCArVu3otPpmDx5stliKauiAemnEUKI4kxONEOGDAHgwoUL7Ny5s9zrLDXq7Omnn8bW1pYdO3bw\n5Zdf4uLiQvfu3XnxxRdxcrrTZBUWFoZOp2Pjxo1kZGQQHBzM1q1badasmdliKa+ikUmbQghxh8mJ\nZvbs2Yb9aGqCQqFgwoQJTJgwodLrZs6cycyZMy0Sh16vR6e/s+SNleJOK6TMpRFCiDtMTjRz5861\nRBx1TvFmMyuFlVHyNeqjkaYzIUQDV61xt3q9nvT0dACaNGlSo5XOvVbWZM0ixftopOlMCNHQ3VWi\niY2N5cMPP+Snn34iN7fwN3ZHR0f69evH/PnzzTqEuLYqXtGUnCcjTWdCCHGHyYnm0qVLTJw4kfz8\nfIYOHUrr1q0BiIuL49ChQ/z000988cUXtGvXzuzB1iblDQQAWYZGCCGKMznRrFixAldXV7Zv326Y\nt1IkKSmJiRMn8sEHH7B582azBVkblTe0GWR4sxBCFGfyhM2oqCjGjx9fKslA4WTKcePGcerUKbME\nV5tVVNFI05kQQtxh9v1oGsqAgAorGmk6E0IIA5MTTbdu3dixYwcpKSmlzqWkpLBjxw66detmluBq\nsypXNNJ0JoRo4Ezuo1m4cCGTJk1ixIgRDBs2zLC5WFxcHAcPHsTKyopFixaZO85ap8p9NNJ0JoRo\n4ExONB07dmTXrl2Eh4dz8OBBo+HNffv25YUXXjDsdFmfyagzIYSomruaRxMUFMTatWvR6XSkpaUB\n4O7ujpWV2bt8aq2K5tEUr2jyCvLQ6/UNpu9KCCFKqtbKAFZWVmZdpLIuKdAVGP5esunMSmGFg42D\nIcnkFeQZJR8hhGhIGk4JYmYVNZ2BLEMjhBBFKq1o2rVrh5WVFWfOnMHOzo527dpV2gykUChKbU5W\n31Q0GAAK+2nSKVwHTgYECCEaskoTTdG2ADY2NkavG7rKKhoZ4iyEEIUqTTQltwV44okncHd3x8HB\noczrc3NzDSs612eVVjTSdCaEEMBd9NGEhoZy8ODBcs8fPXqU0NDQagVVF5hU0UjTmRCiATM50ej1\n+grP5+fnN4hhzlXpoykiTWdCiIasSsObVSoVSqXS8DojI4OkpKRS1ymVSr7//ns8PDzMF2EtJaPO\nhBCiaqqUaLZt28batWuBwhFl77zzDu+8806Z1+r1ehYuXGi+CGupyioaaToTQohCVUo0/fr1w8XF\nBb1ez7vvvsvo0aPp2LGj0TUKhQJHR0eCg4Np3769RYKtTSqtaGQZGiGEAKqYaLp06UKXLl2Awma0\nYcOGcd9991k0sIoUFBTwySefsHv3bpKSknB3d2fEiBG88sorhmv0ej0bN25kx44dpKen06lTJ159\n9VWzJUFTRp1JH40QoiEzeQmaOXPmWCIOkyxevJgTJ04wZ84cAgICSE5O5sqVK0bXbNq0iXXr1vHy\nyy8TEBDA1q1bmTJlCt9++61Z+pBk1JkQQlTNXa11plarOXDgABcuXCArKwudTmd0vqgfxxJ+/PFH\n9u/fzzfffFPuKtFqtZpNmzYRFhbGpEmTAOjatSuDBw9m+/btLFiwoNpxmNJHI01nQoiGzOREk5iY\nyNNPP01iYiKurq5kZWXh5uZGVlYWWq2WJk2a4OTkVPmN7tLXX39Nr169KtyKICoqCpVKxciRIw3H\nnJycGDRoEMePHzdPojGhj0aazoQQDZnJE17ef/99VCoVX331FZGRkej1esLDwzl9+jSLFi3CwcGB\njz/+2BKxAnD27FlatWrFsmXLCAkJoUuXLsyZM4cbN24YromNjcXa2tqwKVuRwMBAYmNjzRKHSX00\n0nQmhGjATE40J06cYPz48XTu3NloYqadnR3Tpk2jV69eFms2A0hNTSUiIoKLFy8SHh7O8uXLOX/+\nPHPmzDFMJlUqlTg5OWFtbZwA3NzcyM3NRaPRVDuO4hVNyf1ooPSos8omugohRH1lctNZXl4ePj4+\nADg7O6NQKMjKyjKc79atG++99575IizHunXraNKkCQAeHh5MmjSJEydO8OCDD1r8s6HEfjRlNJ3Z\nWttiY2VDga4ArU5Lvi4fO2u7exKbEELUJiZXNF5eXoZmKhsbG1q0aMGZM2cM52NiYrC3tzdfhCW4\nurpy3333GZIMQPfu3bG1tSUmJsZwTU5ODlqt1ui9mZmZODo6YmdX/Qd+ZU1nICs4CyEE3EVF06tX\nLw4fPmwY5vzYY4+xadMmlEolOp2OvXv38sgjj5g90CKBgYGo1eoyzxU15QUEBKDVarl27RoBAQGG\n87GxsUavq6OywQBQ2E+jVBcu3ZOTn4Obg5tZPlsIIeoSkyuasLAwZsyYYejnmDFjBo8++igHDhzg\n8OHDPPzwwyxZssTsgRYZOHAg0dHRpKWlGY6dPHmS/Px82rZtC0BISAjOzs5ERkYarsnNzeXo0aP0\n69fPLHFUpaIxGnkmAwKEEA2UyRWNt7c33t7ehtf29va8/fbbvP3222YNrDxPPfUUn3/+OTNnzuT5\n558nOzubFStW0Lt3b3r06GGIKSwsjHXr1uHm5maYsKnT6Zg8ebJZ4qhKRSNNZ0IIYWKiyc3NZcaM\nGYwePZonnnjCUjFVyNnZmU8//ZS33nqLhQsXYmtrS2hoaKkqKiwsDJ1Ox8aNG8nIyCA4OJitW7fS\nrFkzs8Rhah+NTNoUQjRUJiUaR0dHzp8/z6hRoywVT5W0bNmSzZs3V3iNQqFg5syZzJw50yIxVLWP\npog0nQkhGiqT+2j69u3LL7/8YolY6hST+2ik6UwI0UCZnGjmz5/PlStXWLJkCWfOnOHWrVuoVKpS\nf+o7U/topOlMCNFQmTwYoGj9sJiYGPbs2VPudRcvXrz7qOoAowmb5VU0ssumEEKYnmhmz56NQqGw\nRCx1ilHTWXl9NDK8WQghTE80c+fOtUQcdY5R05msDCCEEOUyuY8mKSmJvLy8cs/n5eWRlJRUraDq\ngqpUNJdvX+ZU8imOxx9nb/ReTiaevFfhCSFErWFyogkNDeXgwYPlnj9y5AihoaHVCqouqKyiOZl4\nkoiLEWTnZ6NHT1pOGluitkiyEUI0OCYnmsqWu8/PzzfaPqC+qqyi2R+z32j7gLyCPNJy04iMiSx1\nrRBC1GdV6qNRqVQolUrD64yMjDKbx5RKJd9//z0eHh7mi7CWqmw/muSsZOys7XC2dUaVr0KHjlPJ\np7iQeoGkrCS8XLwYGTSSnj4972XYQghxz1Up0Wzbto21a9cChTPu33nnnXI3N9Pr9SxcuNB8EdZS\nlU3Y9HLxIlGZSPtm7fnz5p9k5GWQoc5AZaXihuoGOr2OLVFbACTZCCHqtSolmn79+uHi4oJer+fd\nd99l9OjRdOzY0egahUKBo6MjwcHBtG/f3iLB1iaVTdgcGTSSLVFbcLR1pHOLzvwn9j8ANLJrxKXb\nl7CztsPNwY3ImEhJNEKIeq1KiaZLly506dIFKGxGGzp0qGFJ/oaqsoqmKHlExkQWNpU5exUOcVaA\nHj2xGbF0bdGVpKz6P0JPCNGwmTyPpmjDM4Ds7GyUSmWZAwSKbyVQH1VlCZqePj0NCWfZD8u4knaF\nP5L+QIeOLE0WablpdPHsck/iFUKImmJyolGr1axZs4bdu3eTkZFR7nX1fQmaqiyqWVxRU5qXixeJ\nWYkAXM28yst9XrZYjEIIURuYnGiWLl3Kv//9b4YOHUr37t1xc2uY2xNXpaIprqiy+ebSN3zz1zc4\n2Djg5+Yny/kIIeo9kxPNwYMHGTt2LMuWLbNEPHWCXq9Hp9cZXlspqjZvqKgprYdPDz7772fEZ8Yz\n49sZ/K3t33iozUMyKEAIUS+ZnGgAOnToYO446pSSzWamViVNHZty+fZlCvSFK0CfTj5NclYyIEOd\nhRD1j8lT+AcPHsyJEycsEUudYWqzWUlHrx7F19XX8Ppa5jV0ep2sGiCEqJdMTjTz5s0jPj6epUuX\ncunSJTIzMxvcxmemDgQoKTkrGR8XH+ys7ABQa9Ukq5JlqLMQol4yuelsyJAhAFy4cIGdO3eWe119\nHnVW3YqmaNUAP1c/rmRcAeB65nW6e3U3W4xCCFFbyMZnd6G6FU3xoc4JWQmotWo0Og1NHZuaM0wh\nhKgV6vzGZzdu3GDEiBHk5OQQFRVFo0aNgMKRYRs3bmTHjh2kp6fTqVMnXn31VbMsj1Pdiqb4qgGp\n2akkZiXi5+ZHXEYcOfk5RhumCSFEXVet9fzj4uI4deoUWVlZ5orHZO+//z5OTqUfzJs2bWLdunVM\nnz6dDRs24OTkxJQpU0hNTa32Z1a3ooHCZPPagNf4+qmvGR40HIDj8cd5YucTLPthmexbI4SoN+4q\n0ezZs4f+/fszatQoJk2axLlz5wBIS0sjNDSUb7/91qxBlufkyZMcP36cZ5991ui4Wq1m06ZNhIWF\nMWnSJHr37s2qVatQKBRs37692p9b3YqmOGsrawKbBHLx1kWy87O5rrxOXHqcbJImhKg3TE403333\nHYsXL6Zt27YsXrzYaJ0zd3d3OnTowDfffGPWIMui1Wp58803mTVrFk2aNDE6FxUVhUqlYuTIkYZj\nTk5ODBo0iOPHj1f/s/UV70VjqmuZ13CycTLcu2hOjQx3FkLUByYnmo0bN9KvXz82b97M6NGjS53v\n1KkTf/31l1mCq8iXX36JRqNh4sSJpc7FxsZibW1Nq1atjI4HBgYSGxtb7c+ubBtnU91Q3cDfzd/w\n+mbOTfR6vQx3FkLUCyYnmri4OEJDQ8s936RJE9LT06sVVGXS09NZtWoVS5YswdbWttR5pVKJk5MT\n1tbGScDNzY3c3Fw0Gk21Pr9AV2D4e3WbzqBwuHMzp2aGe+UW5JKdn423S/1eAVsI0TCYnGhcXFzI\nzMws93xsbCzNmjWrVlCVCQ8Pp0uXLgwYMMCin1MecwwGKG5k0EisFFZGw5tvZt9kRNCIat9bCCFq\nmsmJpm/fvuzatavM2f9xcXHs3LmTgQMHmiO2Ml2+fJmIiAhmz56NUqlEqVSSm5sLFG7KlpeXh6ur\nKzk5OWi1WqP3ZmZm4ujoiJ2dXbViMOdgACgcgTYtZBqdmndCgQJnW2e8Xbzp4d2j2vcWQoiaZnJP\n9sKFCxkzZgx/+9vfGDx4MAqFgn379rF3717279+Pu7u70eZo5nbt2jXy8/N56qmnSp3r378/Tz75\nJA8//DBarZZr164REBBgOB8bG2v0+m6Zu6KBwmTTzasbLx98mWxNNgAxaTG0adrGLPcXQoiaYnKi\n8fT0JCIigvDwcPbt24deryciIoJGjRoxYsQIXnzxRZo2tdwM95CQED777DOjY8ePH2fz5s1s2rQJ\nPz8/fHx8cHZ2JjIyklmzZgGQm5vL0aNHGTt2bLVjMHdFU8TGyoYQrxCOXyscGfdH0h+SaIQQdd5d\njc318PDgnXfe4Z133iEtLQ2dToe7uztWVtWa/1kl7u7uPPDAA0bHEhMLd6zs0aOHYWWAsLAw1q1b\nh5ubGwEBAWzduhWdTsfkyZOrHYMlKpoi9/vcb0g0p5JP8VTwU1Xe70YIIWqjak8CcXd3N0ccZhcW\nFoZOp2Pjxo1kZGQQHBzM1q1bzTJQwVIVDUCQexCNHRpzOe0yp5JPMX73eDo278jIoJGyV40Qok4y\n+Vflt99+m+HDh5d7fvjw4bz33nvVCspUjz/+OH/99ZehmgFQKBTMnDmTH3/8kbNnz/Kvf/3LbBu2\nWbKisVJY0dihsWGlgBvZN0hUJspKAUKIOsvkRPPDDz8YzbgvadSoURw5cqRaQdV2lqxooHBoc5Hb\nObfRaAvn/chKAUKIusjkRJOSkoKPj0+55729vUlJSalWULWdJSsagNz8XMOSNAX6AuIy4gBkpQAh\nRJ1kcqJxdXUlLi6u3POxsbFGTVj1kaUrGm9XbwKa3BmGfSP7Bhl5GbJSgBCiTjI50fTr148vv/yy\nzPXMLl26xJdffknfvn3NElxtZemKZmTQSNwd3fFw8jAci0mLYUjAELN/lhBCWJrJo87mz5/P8ePH\neeKJJxgyZAhBQUFA4Yz9w4cP07hxY1544QWzB1qbWLqiKRpdtufSHvZG78XB2gE/Nz9u5dwy+2cJ\nIYSl3dWEza+//poVK1Zw5MgRIiMLO6gbNWrEqFGjWLhwIZ6enmYPtDaxdEUDhcmmp09PhgYOZcef\nO4DCwQBdPbvi5+Znkc8UQghLuKt5NC1atOCf//wner2etLQ0oHA+jUKhMGtwtVXxisYc+9FUpH/L\n/pxIOEFcehwFugL++cs/mdp1Kt28uln0c4UQwlyq9ZRUKBQWXW6mtjKqaCzQdFaclcKKyZ0n897P\n75GgTCA+M55DsYfo6tmVFx54AYVCwf6Y/SRnJePl4nXXEztPJp40y32EEKKkaiWa7OxslEql0S6b\nRby96+8IKXNvfFYZH1cfhgUO47Ujr5GnzQPgdMppntr9FAqFAkcbR2ytbfFx8eF65nUAk5LEiesn\nePv42yQoE7CztuM+zX0kKhNNvo8QQpTF5ESjVqtZs2YNu3fvJiMjo9zrLl68WK3AajNzb3xWFVHJ\nUXTz7Mal25dIzyvcWE6VX7hVg72NPWqtmtiMWJJVyWw7s40e3j2q1JR5IfUCSw4vISW7cO5TnjaP\n0ymnaePehsiYSEk0QohqMznRLF26lD179jBkyBC6d++Om5ubJeKq1e7FYICSkrOSsbW2JdgjmGuZ\n10jKSjJKeEVyC3I5evUoq39fzZgOY/By8Srzfjezb7Lr/C7O3jjLjewbRue0ei2Xbl9CpVFRoCuw\neD+UEKJ+M/kJcvDgQcaMGcOyZcssEU+dYOnhzWXxcvEiUZmIQqGgVeNWtHRryankUyhQ0NWzK8mq\nZOIz4ynQF9DIthHnb57nYupFBrYayN/a/g0n28KVBnLzc/n+8vccjjts+B5Otk7kFeTh4+JDak4q\nuQWFG8ll5GXwz5//yfM9nsfdsXYuniqEqP3u6ldVcy1OWVfVREUzMmgkW6K2GF4rFAr83fxRKBRY\nW1nj6+pL80bNuZZ5jcYOjQHQ6XUciTvC1xe/JikrCZVGhYONA94u3obJoAqFgofaPER8Zjx21nb4\nuvoSfTuaW7m38HPz42rGVd768S2e6/YcHZt3vCffVQhRv5icaAYPHsyJEycYN26cJeKpE2LSYjiV\nfIqc/Bz06LG1srV4X0bR/SNjIknKSsLbxZtpIdOMjgU0CWBWz1l4uXix89xOom9Hk5qTysVbd/rL\n1Fo1mepMaAa9fHvxVMenaNm4JScTTxruMzRgKE2dmnLu5jl0eh3ZmmxW/76ah9o8xEP3PST74wgh\nTKLQlzVkrAIJCQnMmzePzp07M27cOLy8vLC2Lv1bvbOzs9mCvJcSEhIIDQ3l8OHD+Pr6ljp/MvEk\nL/7nRVJzUgFo37Q9Ho08mBYyrVZ1nOv1ek6nnGZB5AJu5tw0Oudg7cADPg+w/uH1FQ4YiEmLYfOp\nzWTk3Rn00cGjA8+FPIezXd389xVCWEZFz06TK5ohQwrX27pw4QI7d+4s97r6Oupsf8x+o+HcRQ/q\n2jZCS6FQEOIVQvtm7QnQBhhiVigU2FrZolAoKh2VFuQexP/1/z8+jvqYS7cuAYWj1N768S3CuocZ\nLfwphBDlMTnRzJ49u8GsAFCW5Kxko9FeRc1ItXUJf29Xb8OcGKPjVVwJ2tXelfm95rPvr318f/l7\nANJz01nxywrGdBjDwFYDG/T/HoQQlTM50cydO9cScdQZXi5enEg4YXjtYOMAVP3Bfa+VHERQZETQ\niCrfw0phxSPtHiGgSQCfnP6EnPwctDotX577kpi0GCZ3mWz4OQghREnV6tUtWussLS2tzNUB6qOh\nAUNRa9UAKFAYHrCmPLjvpZ4+PZkWMg1fV1+sFFb4uvredX9SpxadeLX/q7Rs3NJw7I+kP1h+fHmt\nreiEEDXvroY3x8bG8uGHH/LTTz+Rm1s458LR0ZF+/foxf/58AgLqb9t96yatadesHdczr6PVa/F3\n82dE0Iha1T9TUtFK0ObQ1KkpL/V+ia/Of8WP134EIEWVwvLjy5nUeRIP+D5gls8RQtQfJieaS5cu\nMXHiRPLz8xk6dCitW7cGIC4ujkOHDvHTTz/xxRdf0K5dO7MHWxukZqfi4eSBh5MH7Zq1Y8GDC2o6\npHvO1tqWiZ0nEugeyPaz28nX5qPRavjk9CccjD1Ivjafm9k3ZXFOIQRwF4lmxYoVuLq6sn37dnx8\nfIzOJSUlMXHiRD744AM2b95stiCL279/P9988w3nz59HpVLRunVrnn32WR5++GGj67766iu2bNlC\ncnIybdq04aWXXuLBBx+s9uffzL4zVLh5o+bVvl9d1su3F/5u/mz4YwM3VDdIzUnlx/gfcbFzoX2z\n9iQqEw39Q5JshGi4TO6jiYqKYvz48aWSDBSu2Dxu3DhOnTplluDKsm3bNho1asSSJUtYt24dDzzw\nAC+++CKff/654Zpvv/2W119/nUceeYTNmzcTFBTE888/T3R0dLU/v2j+DIBHI48KrmwYvF28eaXf\nK4R4hRCfGQ9AliaLqOQoUlQp6PV6ImMiazhKIURNMvtqiZYe6rp+/Xrc3e+su/Xggw9y8+ZNtm7d\nyuTJkwFYvXo1jz76KLNnzwbg/vvv5+LFi2zatIkVK1ZU6/NTs4slGidJNFA48i6sexjfRn/LlfQr\n6NFToC8gOi2aWzm3ylz8UwjRcJhc0XTr1o0dO3aQkpJS6lxKSgo7duygWzfL7f5YPMkUad++PTdv\nFjZpXb9+natXrzJy5EjDeSsrK4YPH87x48er/fnFm86korlDoVDQ06cnXVp0wdHG0XA8LS+NS7cv\n8VvCbw1mZKIQwpjJFc3ChQuZNGkSI0aMYNiwYbRq1QooHAxw8OBBrKysWLRokbnjrNCZM2cMgxJi\nY2MBSo18CwwMJCMjg7S0tDKTVVXo9Dpu5942vJaKxtjIoJEkKhMJ8QzhasZVElWFE0U9nT355PQn\nnEo+xaTOk3C1d63hSIUQ95LJiaZjx47s2rWL8PBwDh48aDS8uW/fvrzwwgsEBQWZPdDy/Prrrxw6\ndIh33nkHgMzMTABcXY0fZkX75mRmZt51oknLTTMsre9q74q9jf3dhl0vFV/409balo7NO6JUK7Gz\ntgPgvyn/JSYthgmdJtDdq7usKCBEA3FXfTRBQUGsXbsWnU5HWloaUNikZWV1b1f1TUhI4MUXXyQ0\nNJTHH3/c4p9XvH+moY84K0/JOTvqAjURFyM4dvUYANmabDaf2swpr1NM6DQBF3uXGopUCHGvVCkz\n5Ofns2LFilKLaFpZWdGsWTOaNWuGlZUVO3fu5IMPPkCr1ZZzJ/PJyMhg+vTpeHt7G3XwF1UuWVlZ\nRtcXVTrV2RFURpyZzt7GnvGdxrPgwQVGm6dFJUfxxg9vEJUcVYPRCSHuhSolmt27d7Nt2zZ69OhR\n4XU9evRg69atREREmCW48uTm5jJjxgzy8/PZuHEjjo53Op+L+maK+mqKxMbG0rhx47tuNgOpaKqj\nXbN2vD7wdfq17Gc4lqXOYuMfG9kStYVsTXYNRieEsKQqJZrvvvuOIUOGEBgYWOF1gYGBDBs2jL17\n95oluLIUFBQwf/58rl69ypYtW2jatKnReT8/P1q1akVk5J25GzqdjsjISPr161fydiYxGnEmAwFM\n5mDjwKTOk5j3wDzDLqBQuMfP0mNL+W/Kf2swOiGEpVQp0Vy6dImePas2s7t79+5cunSpWkFV5I03\n3uCHH35g1qxZZGRkcObMGcMfjUYDFK4wHRERwbp16zhx4gSvvPIK165dIywsrFqfLU1n5tGxeUde\nH/g6vf16G44p1UrWnVxnWB1aCFF/VGkwgFqtxt6+aiOs7O3tUavV1QqqIj///DMAb7/9dqlzRTu7\nPfzww+Tk5LB582bWrVtHmzZt2LhxI/fdd99df65er5fJmmbkZOvEM12foZtXNz7/7+co1UoAfkv4\njaNxR3G1d0Wn11VrvbSTiSfZH7Of5KxkWXdNiBpUpUTTvHlzYmJiqnTDmJgYPDws9xA+cuRIla4b\nO3YsY8eONdvnKtVKNNrCisnJ1olGdo3Mdu+GrHOLziwduJSd53fyW8JvpOakcvFW4e6szZ2aczXj\nKr9e/5XhQcO5r2nVf1GIvh3NgZgDQGGTXb42X9ZdE6KGVCnR9O7dmz179vD888/TpEmTcq9LS0tj\nz549DB061GwB1hayIoDlNLJrxLPdnqWbZzfmfD/HcPxmzp2f+RdnvyDEK6TK9zyVfIrs/DsDDGwU\nNng4ebDjzx308O4hc3iEuIeq1Eczffp0cnNzefrppzl79myZ15w9e5YpU6aQm5vLc889Z9Yga4Pi\n/TMy4swyunl1o32z9mU2SxZPGlVRsp+nQF9AcnYykVcieeOHNzgUe4gsdVY57xZCmFOVKhp/f3/C\nw8N58cUXeeqpp/D396dNmzY0atSI7OxsLl++THx8PA4ODnzwwQeGZWnqE+mfuTf8G/tjbWWNZ64n\nmepMw/Gmjk0Z2WZkBe80plQrSctNQ6fXkZabRk5BYeJpZNuI5Kxkdp3fxdcXvqaLZxf6+PWhY/OO\nWCnu7YRjIRqKKq8MMHjwYPbu3cvmzZs5duwYhw4dMpzz8PBgzJgxTJs2DX9/f4sEWtOk6ezeGBk0\nki1RW2ji2IQmjneaaU3dftrHxcfQJ9O6cWuyNFmkqFKMqlGdXsfp5NOcTj6Nm4MbD/o+SB//PlKx\nCmFmJi1B4+fnx7Jly9ihWxcAABLhSURBVABQqVRkZ2fTqFEjnJ2dLRJcbWI0tFkqGospvl5aUlYS\n3i7ed7VVdsn7dPDowMIHF9KpRSdOJZ3i5+s/cyXtiuH6zLxMImMiiYyJpE3TNvTx60OIV4isZyeE\nGdz1fjTOzs4NIsFA4TDZfdH7yMzLxMnWiQRlAm2atqnpsOqtkuulmfs+ffz70Me/DymqFH6O/5kT\nCScMw6sBLt++zOXbl9lxbgc9vXviYufCf2/8lxRVSr0ZJi1Dv8W9ZPaNz+qbk4knWX9yPRl5GQDk\nFeSx488dONs5y/8x6zhPZ0+e6PAEj7Z7lHM3z/Hz9Z/588af6PQ6oHBB0H9f+jcXb13EycYJV3tX\nYtNjOZl4kqc6PkVv/9642bvhau+KrbVtDX+bqjt05RAf/fYRSo0SWytbUlQpRN+KZu4Dc3nA94Ga\nDk/UQ5JoKrE/Zj9q7Z0JqA42DigUCiJjIiXR1BPWVtZ08exCF88uKNVKTiSc4Kf4n7ihumHYnjqn\nIMcwoABg1W+rOB5/ZyM9J1sn3BzcDInHzeF//7V3w83Bjbj0OH6+/jO3sm/h7ep9TysIrU7LlfQr\n/HnjT87dPMe+6H1ljuKbt38ej7Z7FH83f/zd/PFz88PHxadOJVFRO0miqURyVjJOtk7YWdmh0WkM\n/TNJWUk1HJmwBFd7V4YFDmNowFBi02OZvm86eQV5aPXGK5KXfFDn5OeQk59DclZyqXsWn4RqrbCm\nkW0jjl09xrjgcQwPHI63i7fZH+YZeRmcv3meP2/+ycXUi+QV5BnFWpYsTRZXM65yNeOq4ZiVwgpP\nZ09D4vF388fP1Q9HW8cy7yFEWSTRVMLLxYtEZSI9vHuQV5BHI9vCFQG8XbxrODJhSQqFgkD3QAa2\nGkh8RjwZeRmotWo0Wg352nyc7Jxo2bglmXmZKNVKQ3NbWYqqIgCtXotSo0SpURbuy5N0CiuFFV4u\nXvi5+hke6KY+zHV6HbHpsZy7eY5zN89xPfN6udc62zlja2VLY4fGaHVaVPkqVBoVtlalk51OryMp\nK4mkrCROJJwwHG/m1Mwo+fi7+cvOqaJckmgqUTTc1sbKBme7O4MfRgSNqMGoxL1S9O/f1Ml4lfDi\nw631ej0qjYpMdWHSyczLNPr72RtncbRxJF+bT4G+wHCPoqpIp9eRqEwkUZlo9DD3aORhlHz83fz5\n69Zfhk58d0d3At0D0eq0XEi9UOFipE2dmhLcPJjg5sFkqbP47L+flbpmfPB4mjs353rmdeIz47mu\nvM4N1Y0y73cr5xa3cm4Z7Sfkau9aKvk0dWxap1ZhqG2DJGpbPHdLEk0lzDXcVtRNVfn3VygUuNi7\nlLtbaLIqmURlIgAarYZsTXZhBWFtS/NGzY3maBWXmp1Kanaq4WGempPKlbQrONs5k6/LJ0tTuLJB\nWaspWFtZ08a9jSG5eDp7Gj3w7aztyv1OHTw6GK7LK8gjQZlglHwSlYllVnBKtdJQURVxtHXEz9XP\nKPl4Onve88mxOr2OvII81AVq1Fq14b9Fx/IK8jh74yz7oveh1WnR6XVE347mh6s/MKj1IAKbVLxF\niiVcSb/C0bijQGETZlx6HL8l/MbotqPp6tkVext7HGwcsLe2x97GHnvr/722scfGqnY92hV6vV5f\n00HUJgkJCYSGhhpWghaiuk4mnjRMHi2uqCrKK8jjeuZ1riuvGx7oSVlJpR7mJddvK+Js60yIVwiN\nHRrTqUUnOnp0pL1HexxsHCzyfQp0BSRlJRklnwRlAuqCqq3abmtti4+LjyH5pOemE5Ucxc3sm3i5\neDEicASdPTsbEkBRYijr78UTRVnXFV2Tr82vNK7Kfr73WnXisbayLjcJFR0vel2VvzvYOHAq6VSF\n1VVFz87alfaEqIcqq4ocbBxo07SN0dysood5fGa84YH+y/VfjO6rQIGrvStNHZvy2oDX8HHxuSfN\nVDZWNobqpA99gMKK4Wb2TaPkE58ZX+bOqfnafMOgg6KBEgoU2FrZ8v/t3X1ME3cYB/BvaXkdFoZW\nQGFziBAUCyJxU0EmxjCHTtxMhgGxM3sxAyRk7sVEN8EY51ww2xzrHNliXIKLU0cwbiwjKgMW/IO4\njb3oCgqC1jGFlmJL6fX2B+vNo4UeL/WKfT6JCf3d9fr06dmnv9/97o5hGVS2VI54zTtXGmnocazX\n2ZssE4mHsTLoN/ejH5MTe/fdblz+5zKkXlIEeAfAYDZwvXQhoztUaAi5D8Z6Euq9X+Y2RosRrXda\n0W/uh0QiQbBfMGReMkTIIxAhF7f3bZudFhYYxjt21WPqsSs+PcYe7nm2iRIsWJitZq79uu76pBYa\niURi92t9+NBTj6kHOpMOUi8ppBIp91xFgAKbFm6atFiEMjNm/HP3HwBDhZyxMmBYBkG+QVgyewmv\nRze8dzfa5JTx6NB1wAorrFYrdAM63Oi7geiQaMGneVChIWSKyJyXiYrmCgR4B/Da3XViikQiQYh/\nCEL8Q5AQlsC1G8wGrvhcvn0ZLMvCaDGCxf+j+CaLCXJfOVcYfKQ+8JP5ORz2sRWM0ZZ5e3k77e3F\nzYgbdYjzfnvI+6FxxcOyLBiWGbEIDS9QQoYijYNGbvsyiQzT/Ycmxwg9zYMKDSFTxIMyMSXQJxBx\nijjEKeLQ1NWELn0XGCsDi9XC9SYigyKxO233fY3L3fI73ngkEglkkqFZsvfOlJ2IkvMluK67DoZl\nIPOScZM5hJ7mQYWGkClksq4D5y5s08elXlJIvf4frhKrl+Zu+XWXeJ6e9/TQ5wQpr13o50SFZhiG\nGToDXKvVihwJIQ++cIRj/az1uHDtAm7130LoQ6FIm5OGcDYcnZ2dYodH/iPkc7J9Z9q+Q+9FhWaY\n7u6h2wHk5OSIHAkhnukbfCN2CESAkT6n7u5uPProo7w2Oo9mGJPJhJaWFigUCkilUudPIIQQAoZh\n0N3djfj4ePj58c/hokJDCCHEpegm6YQQQlyKCg0hhBCXokJDCCHEpajQEEIIcSkqNIQQQlyKCo0A\nGo0GW7ZsQUJCAlJSUvDBBx84PCmJjO7UqVOIjY21+1dZWcmtw7Is1Go10tLSoFQqkZOTgz/++EPE\nqN1be3s73n77baxbtw5xcXHYvHmz3TpCc0r7uT0h+U1PT7fbp5cvX263nifnl07YdEKn00GlUiE6\nOhrl5eXo6OjAgQMHYLVaUVxcLHZ4U9LRo0d58+wjIyO5v48cOYLy8nK88cYbiIqKwhdffAGVSoUz\nZ85Aobi/l42fCv766y9cuHABCQkJsFgsDtcRklPazx0Tkl8AWLt2La8IeXvzb4vt8fllyajUajWb\nnJzM9vX1cW1HjhxhlUolr404d/LkSTYmJoY1GAwOl5tMJjYpKYn96KOPuLb+/n728ccfZ8vKyu5X\nmFMKwzDc34WFhWxubi5vudCc0n7umLP8sizLrly5kn333XdH3Y6n55eGzpyoq6tDSkoKAgP/vwpq\nZmYmTCYTLl68KGJkD57m5mYYDAasWbOGawsICMDKlSvx448/ihiZ+/LyGv2/sNCc0n7umLP8CuXp\n+aVC40RbWxuioqJ4bbNmzYK/vz/a2tpEimpqW716NebPn4+MjAwcP36ca29ra4NUKsWcOXN468+d\nO5dyPU5Cc0r7+cR8/fXXiI+Px+LFi7F9+3Z0dXXxlnt6fukYjRN6vR7Tpk2za5fL5dDr9SJENHUp\nFAoUFRVBqVSCYRicPXsW77zzDkwmE1QqFfR6PQICAuyuMRcUFASj0Qiz2QwfHx+Rop+ahOaU9vPx\nS09PR2JiIsLCwtDa2orDhw8jJycH1dXVXE49Pb9UaMh9k5qaitTUVO5xWloaBgYG8MknnyAvL0/E\nyAgZv127dnF/JycnY9GiRcjKysLJkyehUqnEC8yN0NCZE3K5HAaDwa5dr9dDLpeLENGDJSMjA729\nvejq6oJcLsfdu3ftpnzqdDr4+/tTb2YchOaU9vPJExMTg8ceewy///471+bp+aVC40RUVJTdGOrN\nmzdhNBrtxlzJ2N17H/eoqCgwDIP29nbeOo7Gt4kwQnNK+/nkkkgkdvu2J+eXCo0TK1asQH19Pe/X\nyNmzZ+Hn54clS5aIGNmDoaamBg8//DBmz56NpKQkBAYG4rvvvuOWG41GnDt3jjfkRoQTmlPazyfP\nlStX0NbWhgULFnBtnp5f6Z49e/aIHYQ7mzdvHr766is0NTVh5syZaGxsRFlZGbZs2YK0tDSxw5tS\nCgsL0dnZCYPBgKtXr6K8vBxnzpzBjh07kJiYCJls6JChWq2GXC5Hf38/9u/fD61WiwMHDiAgIEDk\nd+B+jEYjamtrodFoUF9fD51Oh+nTp0Oj0WD27NncibHOckr7uWPO8tvQ0IAPP/wQAwMD6OnpQV1d\nHXbv3o3g4GCUlpZyQ5Oenl+68ZkAGo0GpaWluHTpEuRyOTZu3IjCwkK6A+cYlZWVoaamBlqtFizL\nIjo6Gnl5ecjKyuLWYf+7XEplZSV6e3sRHx+PXbt2Yf78+SJG7r46OzuxatUqh8tqa2sREREhOKe0\nn9tzll+DwYD9+/fj8uXL6OvrQ3BwMFJTU1FcXIzQ0FDe+p6cXyo0hBBCXIqO0RBCCHEpKjSEEEJc\nigoNIYQQl6JCQwghxKWo0BBCCHEpKjSEEEJcigoNIQLYbkPd2dkpdig81dXVWLp0KUwm06RtMz09\nHW+99da4npudnY2DBw9OWizkwUBXbyYeKzY2VtB6tbW1Lo5kfCwWCw4fPozNmzfzbo0tphdffBGv\nv/46tm7diunTp4sdDnETdMIm8VhVVVW8x0ePHsWNGzewc+dOXvvq1avh6+sLi8UCHx8f3sUSxfT9\n99+jqKgIdXV1UCgUk7Zds9kMiURid997IaxWK1asWIHs7GwUFBRMWkxkaqMeDfFY69ev5z2uqalB\nb2+vXbuNu10q5NSpU0hOTp7UIgNgQrdj8PLyQkZGBqqqqpCfn+82RZmIi47RECKAo2M06enpePXV\nV9HQ0IANGzZAqVRiw4YN+OWXXwAAp0+fRkZGBhYuXIjc3Fxcv37dbrvNzc144YUXkJSUhMTERKhU\nKrS0tDiNZ2BgAPX19Vi2bJndstjYWOzbtw/V1dV46qmnkJCQgJycHFy7dg0AUFFRgSeffBJKpRLb\ntm1Db28v7/nDj9HY3vulS5ewb98+PPHEE0hMTER+fj7u3Llj9/rLli1DR0cHrly54vR9EM9AhYaQ\nCWhra8Obb76JVatWobi4GFqtFq+88gpOnDgBtVqN559/Hi+99BJ+/vln3p0YAaCxsRF5eXkwm83Y\nvn07ioqKoNVqkZubC41GM+rrtrS0YHBwcMSLjTY1NeHQoUN47rnnsG3bNvz2228oKCiAWq3Gt99+\ni61btyI7Oxvnz5/He++9J+i9lpSUQKPRoLCwEJs2bcK5c+dQWlpqt158fDyAoSJKCEBDZ4RMyNWr\nV3HixAkolUoAQGhoKIqLi3Hw4EHuXjvA0IH7Tz/9FDdv3kR4eDisViv27NmDlJQUqNVqbnsbN27E\nmjVr8PHHH+PQoUMjvq7tJloREREOl1+7dg01NTUIDw8HAMhkMrz//vs4ffo0qqurueGx27dvo7q6\nGiUlJU6PyYSEhKCiooIbDrNarTh27Bj6+vowbdo0br3Q0FB4e3ujtbV11O0Rz0E9GkImIDY2lisy\nAJCQkABgaPjJVmQAcOvYht7+/PNPtLe3IzMzE3fu3OH+DQ4OYvHixbh48eKor2sb7goKCnK4fPny\n5VyRuTeutWvX8o7BKJVKmM1mdHd3O32v2dnZvGMuycnJYBgGXV1ddusGBQWhp6fH6TaJZ6AeDSET\nMGvWLN5j2y/7sLAwh+06nQ4AuOMlO3bscLhdLy9hvwFHmjQ61rj0er3dc4a7t3AB4O51r9frBcdF\nPBMVGkImYKSC4GyGmu2LeOfOnYiJiRnz6wYHBwMY+pJ3NOtsrHEJKQxjea5er+f16Ihno0JDiAgi\nIyMBDPUKHM0ccyYqKgrA0FDc3LlzJzW2ibp16xYGBwfdLi4iHjpGQ4gIFixYgMjISHz++ecwGo12\nyx1NG75XfHw8vL298euvv7oqxHGzTc9etGiRyJEQd0E9GkJEIJVKsXfvXrz88stYt24dsrKyMHPm\nTGi1WjQ0NOCRRx4Z9Zphvr6+SElJwU8//eR2Z+A3NjYiIiJC8CV+yIOPejSEiGTp0qU4fvw4YmJi\ncOzYMezduxdVVVWIjIxEdna20+c/++yzaG5uxt9//30fohXGarWipqYGWVlZdFUAwqFrnREyRVks\nFmRmZuKZZ55Bfn6+2OEAGLoA6WuvvYYffvgBM2bMEDsc4iaoR0PIFCWTyVBQUIAvv/xyUm8TMBGf\nffYZcnJyqMgQHurREEIIcSnq0RBCCHEpKjSEEEJcigoNIYQQl6JCQwghxKWo0BBCCHEpKjSEEEJc\nigoNIYQQl/oX2mMKUIiJxFcAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ts = linrange(0, 182, 2)\n", + "\n", + "plot(data.insulin, 'go', label='insulin data')\n", + "plot(ts, I(ts), color='green', label='interpolated')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')\n", + "\n", + "savefig('chap08-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read the documentation](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html) of `scipy.interpolate.interp1d`. Pass a keyword argument to `interpolate` to specify one of the other kinds of interpolation, and run the code again to see what it looks like. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nhBCv+j/FGp0rKGHB0gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "I = interpolate(data.insulin, kind='quadratic')\n", + "\n", + "plot(data.insulin, 'go', label='insulin data')\n", + "plot(ts, I(ts), color='green', label='interpolated')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')\n", + "\n", + "savefig('chap08-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "### The glucose minimal model\n", + "\n", + "I'll cheat by starting with parameters that fit the data roughly; then we'll see how to improve them." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k1 = 0.03\n", + "k2 = 0.02\n", + "k3 = 1e-05\n", + "G0 = 290" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To estimate basal levels, we'll use the concentrations at `t=0`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Gb = data.glucose[0]\n", + "Ib = data.insulin[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the initial conditions, `X(0)=0` and `G(0)=G0`, where `G0` is one of the parameters we'll choose." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "init = State(G=G0, X=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the system object with all parameters and the interpolation object `I`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " I=I, Gb=Gb, Ib=Ib,\n", + " t0=0, t_end=182, dt=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the update function. Using `unpack` to make the system variables accessible without using dot notation, which makes the translation of the differential equations more readable and checkable." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func(state, t, system):\n", + " \"\"\"Updates the glucose minimal model.\n", + " \n", + " state: State object\n", + " t: time in min\n", + " system: System object\n", + " \n", + " returns: State object\n", + " \"\"\"\n", + " G, X = state\n", + " unpack(system)\n", + " \n", + " dGdt = -k1 * (G - Gb) - X*G\n", + " dXdt = k3 * (I(t) - Ib) - k2 * X\n", + " \n", + " G += dGdt * dt\n", + " X += dXdt * dt\n", + "\n", + " return State(G=G, X=X)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before running the simulation, it is always a good idea to test the update function using the initial conditions. In this case we can veryify that the results are at least qualitatively correct." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
G278.12
X0.00
\n", + "
" + ], + "text/plain": [ + "G 278.12\n", + "X 0.00\n", + "dtype: float64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_func(init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now run simulation is pretty much the same as it always is." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Adds a TimeFrame to `system` as `results`\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " unpack(system)\n", + " \n", + " frame = TimeFrame(columns=init.index)\n", + " frame.loc[t0] = init\n", + " ts = linrange(t0, t_end-dt, dt)\n", + " \n", + " for t in ts:\n", + " frame.loc[t+dt] = update_func(frame.loc[t], t, system)\n", + " \n", + " system.results = frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's how we run it. `%time` is a Jupyter magic command that runs the function and reports its run time." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 327 ms, sys: 2.89 ms, total: 330 ms\n", + "Wall time: 357 ms\n" + ] + } + ], + "source": [ + "%time run_simulation(system, update_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are in a `TimeFrame object` with one column per state variable." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GX
0290.0000000.000000
2278.1200000.000000
4266.9528000.000300
6256.2954600.002668
8245.0701400.004041
10233.9051380.004680
12223.2016510.005252
14212.9848440.005722
16203.2882070.006093
18194.1334610.006330
20185.5478350.006476
22177.5317190.006591
24170.0595020.006708
26163.0945480.006798
28156.6115640.006850
30150.5891370.006900
32144.9955440.006980
34139.7915890.007081
36134.9443430.007177
38130.4306140.007244
40126.2349760.007263
42122.3472580.007234
44118.7562270.007165
46115.4490930.007060
48112.4119820.006925
50109.6303370.006765
52107.0891160.006590
54104.7724210.006406
56102.6637290.006223
58100.7461710.006048
.........
12486.3377930.001159
12686.4773930.001028
12886.6309240.000900
13086.7970840.000778
13286.9742890.000662
13487.1607050.000555
13687.3542700.000458
13887.5529650.000370
14087.7550620.000289
14287.9590980.000214
14488.1638510.000146
14688.3683220.000082
14888.5717150.000023
15088.773420-0.000034
15288.972994-0.000087
15489.170153-0.000139
15689.364751-0.000189
15889.556731-0.000239
16089.746071-0.000287
16289.932781-0.000334
16490.116905-0.000381
16690.298509-0.000427
16890.477688-0.000473
17090.654557-0.000518
17290.829251-0.000564
17491.001926-0.000610
17691.172750-0.000655
17891.341908-0.000702
18091.509597-0.000749
18291.676027-0.000796
\n", + "

92 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " G X\n", + "0 290.000000 0.000000\n", + "2 278.120000 0.000000\n", + "4 266.952800 0.000300\n", + "6 256.295460 0.002668\n", + "8 245.070140 0.004041\n", + "10 233.905138 0.004680\n", + "12 223.201651 0.005252\n", + "14 212.984844 0.005722\n", + "16 203.288207 0.006093\n", + "18 194.133461 0.006330\n", + "20 185.547835 0.006476\n", + "22 177.531719 0.006591\n", + "24 170.059502 0.006708\n", + "26 163.094548 0.006798\n", + "28 156.611564 0.006850\n", + "30 150.589137 0.006900\n", + "32 144.995544 0.006980\n", + "34 139.791589 0.007081\n", + "36 134.944343 0.007177\n", + "38 130.430614 0.007244\n", + "40 126.234976 0.007263\n", + "42 122.347258 0.007234\n", + "44 118.756227 0.007165\n", + "46 115.449093 0.007060\n", + "48 112.411982 0.006925\n", + "50 109.630337 0.006765\n", + "52 107.089116 0.006590\n", + "54 104.772421 0.006406\n", + "56 102.663729 0.006223\n", + "58 100.746171 0.006048\n", + ".. ... ...\n", + "124 86.337793 0.001159\n", + "126 86.477393 0.001028\n", + "128 86.630924 0.000900\n", + "130 86.797084 0.000778\n", + "132 86.974289 0.000662\n", + "134 87.160705 0.000555\n", + "136 87.354270 0.000458\n", + "138 87.552965 0.000370\n", + "140 87.755062 0.000289\n", + "142 87.959098 0.000214\n", + "144 88.163851 0.000146\n", + "146 88.368322 0.000082\n", + "148 88.571715 0.000023\n", + "150 88.773420 -0.000034\n", + "152 88.972994 -0.000087\n", + "154 89.170153 -0.000139\n", + "156 89.364751 -0.000189\n", + "158 89.556731 -0.000239\n", + "160 89.746071 -0.000287\n", + "162 89.932781 -0.000334\n", + "164 90.116905 -0.000381\n", + "166 90.298509 -0.000427\n", + "168 90.477688 -0.000473\n", + "170 90.654557 -0.000518\n", + "172 90.829251 -0.000564\n", + "174 91.001926 -0.000610\n", + "176 91.172750 -0.000655\n", + "178 91.341908 -0.000702\n", + "180 91.509597 -0.000749\n", + "182 91.676027 -0.000796\n", + "\n", + "[92 rows x 2 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following plot shows the results of the simulation along with the actual glucose data." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nIiIistj/Ah9HuT4H5ZzgAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(2, 1, 1)\n", + "\n", + "plot(system.results.G, 'b-', label='simulation')\n", + "plot(data.glucose, style='bo', label='glucose data')\n", + "decorate(ylabel='mg/dL')\n", + "\n", + "subplot(2, 1, 2)\n", + "\n", + "plot(system.results.X, style='g-', label='remote insulin')\n", + "\n", + "decorate(xlabel='Time (min)', \n", + " ylabel='Arbitrary units')\n", + "\n", + "savefig('chap08-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Numerical solution\n", + "\n", + "We can do the same thing using `odeint`. Instead of an update function, we provide a slope function that just evaluates the right-hand side of the differential equations. We don't have to do the update part; `odeint` does it for us." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes derivatives of the glucose minimal model.\n", + " \n", + " state: State object\n", + " t: time in min\n", + " system: System object\n", + " \n", + " returns: derivatives of G and X\n", + " \"\"\"\n", + " G, X = state\n", + " unpack(system)\n", + " \n", + " dGdt = -k1 * (G - Gb) - X*G\n", + " dXdt = k3 * (I(t) - Ib) - k2 * X\n", + " \n", + " return dGdt, dXdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-5.9399999999999995, 0.0)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `System` object we use with `run_odeint` is almost the same as the one we used with `run_simulation`, but instead of providing `t0`, `t_end`, and `dt`, we provide an array of times where we want to evaluate the solution. In this case, we use `data.index`, so the results are evaluated at the same times as the measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system2 = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " I=I, Gb=Gb, Ib=Ib,\n", + " ts=data.index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`run_odeint` is a wrapper for `scipy.integrate.odeint`" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource run_odeint" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 244 ms, sys: 0 ns, total: 244 ms\n", + "Wall time: 424 ms\n" + ] + } + ], + "source": [ + "%time run_odeint(system2, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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", + "
GX
time
0290.0000000.000000
2278.503218-0.000072
4267.4070440.001329
6255.9625660.003315
8244.5524870.004232
10233.5701250.004808
12223.0754690.005331
14213.0942040.005750
16203.6512010.006054
19190.5408140.006312
22178.6714830.006494
27161.3891800.006705
32146.8790180.006894
42124.4404730.007088
52109.2309320.006417
6299.4055100.005610
7293.1789060.004775
8289.5013280.003855
9287.5623950.002954
10286.7862890.002279
12286.8323210.001258
14288.3394440.000219
16290.119785-0.000323
18291.759884-0.000789
\n", + "
" + ], + "text/plain": [ + " G X\n", + "time \n", + "0 290.000000 0.000000\n", + "2 278.503218 -0.000072\n", + "4 267.407044 0.001329\n", + "6 255.962566 0.003315\n", + "8 244.552487 0.004232\n", + "10 233.570125 0.004808\n", + "12 223.075469 0.005331\n", + "14 213.094204 0.005750\n", + "16 203.651201 0.006054\n", + "19 190.540814 0.006312\n", + "22 178.671483 0.006494\n", + "27 161.389180 0.006705\n", + "32 146.879018 0.006894\n", + "42 124.440473 0.007088\n", + "52 109.230932 0.006417\n", + "62 99.405510 0.005610\n", + "72 93.178906 0.004775\n", + "82 89.501328 0.003855\n", + "92 87.562395 0.002954\n", + "102 86.786289 0.002279\n", + "122 86.832321 0.001258\n", + "142 88.339444 0.000219\n", + "162 90.119785 -0.000323\n", + "182 91.759884 -0.000789" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system2.results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the results from `run_simulation` and `run_odeint`, we can see that they are not very different." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nUpIAhBDCS/1/h05IZZJnatsAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system.results.G, 'r-')\n", + "plot(system2.results.G, 'b-')\n", + "plot(data.glucose, 'bo')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The differences are usually less than 1% and always less than 2%." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GX
2-0.137599-100.000000
4-0.169870-77.434912
60.130056-19.505817
80.211674-4.504691
100.143431-2.674804
120.056565-1.472096
14-0.051320-0.482966
16-0.1782430.648509
22-0.6379111.495184
32-1.2823301.246544
42-1.6821022.058923
52-1.9608152.688650
62-2.0005882.243049
72-1.8694492.598662
82-1.6657042.426032
92-1.4257252.657894
102-1.1595411.045825
122-0.7130992.627447
142-0.430551-1.933447
162-0.2075063.583700
182-0.0913880.890527
\n", + "
" + ], + "text/plain": [ + " G X\n", + "2 -0.137599 -100.000000\n", + "4 -0.169870 -77.434912\n", + "6 0.130056 -19.505817\n", + "8 0.211674 -4.504691\n", + "10 0.143431 -2.674804\n", + "12 0.056565 -1.472096\n", + "14 -0.051320 -0.482966\n", + "16 -0.178243 0.648509\n", + "22 -0.637911 1.495184\n", + "32 -1.282330 1.246544\n", + "42 -1.682102 2.058923\n", + "52 -1.960815 2.688650\n", + "62 -2.000588 2.243049\n", + "72 -1.869449 2.598662\n", + "82 -1.665704 2.426032\n", + "92 -1.425725 2.657894\n", + "102 -1.159541 1.045825\n", + "122 -0.713099 2.627447\n", + "142 -0.430551 -1.933447\n", + "162 -0.207506 3.583700\n", + "182 -0.091388 0.890527" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff = system.results - system2.results\n", + "percent_diff = diff / system2.results * 100\n", + "percent_diff.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** What happens to these errors if you run the simulation with a smaller value of `dt`?" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " G X\n", + "0.0 290.000000 0.000000\n", + "0.5 287.030000 0.000000\n", + "1.0 284.104550 -0.000044\n", + "1.5 281.229268 -0.000090\n", + "2.0 278.403529 -0.000096\n", + "2.5 275.620863 -0.000020\n", + "3.0 272.869334 0.000179\n", + "3.5 270.131906 0.000541\n", + "4.0 267.386792 0.001052\n", + "4.5 264.615400 0.001636\n", + "5.0 261.809705 0.002223\n", + "5.5 258.971601 0.002740\n", + "6.0 256.112255 0.003160\n", + "6.5 253.245932 0.003498\n", + "7.0 250.384283 0.003770\n", + "7.5 247.536483 0.003992\n", + "8.0 244.709378 0.004176\n", + "8.5 241.907820 0.004334\n", + "9.0 239.134995 0.004478\n", + "9.5 236.392528 0.004620\n", + "10.0 233.680592 0.004763\n", + "10.5 230.998839 0.004906\n", + "11.0 228.347255 0.005044\n", + "11.5 225.726142 0.005176\n", + "12.0 223.136086 0.005300\n", + "12.5 220.577749 0.005417\n", + "13.0 218.051663 0.005528\n", + "13.5 215.558239 0.005633\n", + "14.0 213.097773 0.005732\n", + "14.5 210.670550 0.005825\n", + "... ... ...\n", + "167.0 90.506027 -0.000442\n", + "167.5 90.548441 -0.000454\n", + "168.0 90.590749 -0.000465\n", + "168.5 90.632952 -0.000477\n", + "169.0 90.675052 -0.000488\n", + "169.5 90.717051 -0.000499\n", + "170.0 90.758950 -0.000511\n", + "170.5 90.800752 -0.000522\n", + "171.0 90.842458 -0.000534\n", + "171.5 90.884070 -0.000545\n", + "172.0 90.925591 -0.000557\n", + "172.5 90.967023 -0.000568\n", + "173.0 91.008367 -0.000580\n", + "173.5 91.049626 -0.000591\n", + "174.0 91.090802 -0.000603\n", + "174.5 91.131899 -0.000614\n", + "175.0 91.172917 -0.000626\n", + "175.5 91.213861 -0.000638\n", + "176.0 91.254731 -0.000649\n", + "176.5 91.295531 -0.000661\n", + "177.0 91.336264 -0.000673\n", + "177.5 91.376932 -0.000684\n", + "178.0 91.417539 -0.000696\n", + "178.5 91.458085 -0.000708\n", + "179.0 91.498576 -0.000719\n", + "179.5 91.539013 -0.000731\n", + "180.0 91.579400 -0.000743\n", + "180.5 91.619739 -0.000755\n", + "181.0 91.660033 -0.000767\n", + "181.5 91.700286 -0.000779\n", + "\n", + "[364 rows x 2 columns]\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "system = pd.Series({'init': init, 'k1': k1, 'k2': k2, 'k3': k3,\n", + " 'I': I, 'Gb': Gb, 'Ib': Ib, 't0': 0, 't_end': 182, 'dt': 0.5})\n", + "\n", + "\n", + "def update_func(state, t, system):\n", + " G, X = state\n", + " dGdt = -system.k1 * (G - system.Gb) - X * G\n", + " dXdt = system.k3 * (I(t) - system.Ib) - system.k2 * X\n", + " G += dGdt * system['dt']\n", + " X += dXdt * system['dt']\n", + " return pd.Series({'G': G, 'X': X})\n", + "\n", + "\n", + "def run_simulation(system, update_func):\n", + " frame = pd.DataFrame(columns=system.init.index, dtype=np.float64)\n", + " frame.loc[system.t0] = system.init\n", + " ts = np.float64(np.arange(system.t0, system.t_end - system['dt'], system['dt']))\n", + " for t in ts:\n", + " frame.loc[t + system['dt']] = update_func(frame.loc[t], t, system)\n", + " system.results = frame\n", + "\n", + "run_simulation(system, update_func)\n", + "\n", + "\n", + "system2 = pd.Series({'init': init, 'k1': k1, 'k2': k2,\n", + " 'k3': k3, 'I': I, 'Gb': Gb, 'Ib': Ib, 'ts': data.index})\n", + "\n", + "\n", + "system2.results = pd.DataFrame(scipy.integrate.odeint(slope_func, list(\n", + " system2.init), system2.ts[:-1], (system,)), columns=system.init.index, index=system2.ts[:-1], dtype=np.float64)\n", + "\n", + "diff = system.results - system2.results\n", + "percent_diff = (diff / system2.results * 100).dropna()\n", + "print(system.results)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's find the parameters that yield the best fit for the data." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k1 = 0.03\n", + "k2 = 0.02\n", + "k3 = 1e-05\n", + "G0 = 290" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, we'll get basal levels from the initial values." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Gb = data.glucose[0]\n", + "Ib = data.insulin[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the slope function is the same." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes derivatives of the glucose minimal model.\n", + " \n", + " state: State object\n", + " t: time in min\n", + " system: System object\n", + " \n", + " returns: derivatives of G and X\n", + " \"\"\"\n", + " G, X = state\n", + " unpack(system)\n", + " \n", + " dGdt = -k1 * (G - Gb) - X*G\n", + " dXdt = k3 * (I(t) - Ib) - k2 * X\n", + " \n", + " return dGdt, dXdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`make_system` takes the parameters and `DataFrame` and returns a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(G0, k1, k2, k3, data):\n", + " \"\"\"Makes a System object with the given parameters.\n", + " \n", + " G0: initial blood glucose\n", + " k1: rate parameter\n", + " k2: rate parameter\n", + " k3: rate parameter\n", + " data: DataFrame\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(G=G0, X=0)\n", + " system = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " Gb=Gb, Ib=Ib, \n", + " I=interpolate(data.insulin),\n", + " ts=data.index)\n", + " return system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`error_func` takes the parameters and actual data, makes a `System` object and runs it, then compares the results of the simulation to the data. It returns an array of errors." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func(params, data):\n", + " \"\"\"Computes an array of errors to be minimized.\n", + " \n", + " params: sequence of parameters\n", + " data: DataFrame of values to be matched\n", + " \n", + " returns: array of errors\n", + " \"\"\"\n", + " print(params)\n", + " \n", + " # make a System with the given parameters\n", + " system = make_system(*params, data)\n", + " \n", + " # solve the ODE\n", + " run_odeint(system, slope_func)\n", + " \n", + " # compute the difference between the model\n", + " # results and actual data\n", + " error = system.results.G - data.glucose\n", + " return error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we call `error_func`, we provide a sequence of parameters as a single object." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(290, 0.03, 0.02, 1e-05)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params = G0, k1, k2, k3\n", + "params" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how that works:" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(290, 0.03, 0.02, 1e-05)\n" + ] + }, + { + "data": { + "text/plain": [ + "time\n", + "0 198.000000\n", + "2 -71.558054\n", + "4 -19.753661\n", + "6 4.791154\n", + "8 4.385049\n", + "10 17.385689\n", + "12 11.875391\n", + "14 7.883104\n", + "16 7.432604\n", + "19 -1.688894\n", + "22 6.430723\n", + "27 -1.858707\n", + "32 4.627308\n", + "42 0.272257\n", + "52 4.125928\n", + "62 7.310554\n", + "72 9.102455\n", + "82 12.434359\n", + "92 5.498085\n", + "102 5.712650\n", + "122 4.844866\n", + "142 6.356758\n", + "162 5.136930\n", + "182 1.795663\n", + "dtype: float64" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(params, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`fit_leastsq` is a wrapper for `scipy.optimize.leastsq`" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource fit_leastsq" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we call it." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000004e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000004e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000003e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000001e-05]\n", + "[ 2.62493674e+02 2.01273810e-02 2.45144666e-03 1.92369457e-05]\n", + "[ 2.68162651e+02 2.74362052e-02 1.33003595e-02 1.34043117e-05]\n", + "[ 2.68162655e+02 2.74362052e-02 1.33003595e-02 1.34043117e-05]\n", + "[ 2.68162651e+02 2.74362056e-02 1.33003595e-02 1.34043117e-05]\n", + "[ 2.68162651e+02 2.74362052e-02 1.33003597e-02 1.34043117e-05]\n", + "[ 2.68162651e+02 2.74362052e-02 1.33003595e-02 1.34043119e-05]\n", + "[ 2.68130427e+02 2.67895723e-02 1.33400852e-02 1.32669040e-05]\n", + "[ 2.68130431e+02 2.67895723e-02 1.33400852e-02 1.32669040e-05]\n", + "[ 2.68130427e+02 2.67895727e-02 1.33400852e-02 1.32669040e-05]\n", + "[ 2.68130427e+02 2.67895723e-02 1.33400854e-02 1.32669040e-05]\n", + "[ 2.68130427e+02 2.67895723e-02 1.33400852e-02 1.32669042e-05]\n", + "[ 2.68106028e+02 2.67883857e-02 1.33425246e-02 1.32677630e-05]\n", + "[ 2.68106032e+02 2.67883857e-02 1.33425246e-02 1.32677630e-05]\n", + "[ 2.68106028e+02 2.67883861e-02 1.33425246e-02 1.32677630e-05]\n", + "[ 2.68106028e+02 2.67883857e-02 1.33425248e-02 1.32677630e-05]\n", + "[ 2.68106028e+02 2.67883857e-02 1.33425246e-02 1.32677632e-05]\n", + "[ 2.68041048e+02 2.67750698e-02 1.33457781e-02 1.32557121e-05]\n", + "[ 2.68041052e+02 2.67750698e-02 1.33457781e-02 1.32557121e-05]\n", + "[ 2.68041048e+02 2.67750702e-02 1.33457781e-02 1.32557121e-05]\n", + "[ 2.68041048e+02 2.67750698e-02 1.33457783e-02 1.32557121e-05]\n", + "[ 2.68041048e+02 2.67750698e-02 1.33457781e-02 1.32557123e-05]\n", + "[ 2.68121217e+02 2.67401554e-02 1.33518009e-02 1.32595427e-05]\n", + "[ 2.68121221e+02 2.67401554e-02 1.33518009e-02 1.32595427e-05]\n", + "[ 2.68121217e+02 2.67401558e-02 1.33518009e-02 1.32595427e-05]\n", + "[ 2.68121217e+02 2.67401554e-02 1.33518011e-02 1.32595427e-05]\n", + "[ 2.68121217e+02 2.67401554e-02 1.33518009e-02 1.32595429e-05]\n", + "[ 2.68098642e+02 2.67349642e-02 1.33494450e-02 1.32402827e-05]\n", + "[ 2.68098646e+02 2.67349642e-02 1.33494450e-02 1.32402827e-05]\n", + "[ 2.68098642e+02 2.67349646e-02 1.33494450e-02 1.32402827e-05]\n", + "[ 2.68098642e+02 2.67349642e-02 1.33494452e-02 1.32402827e-05]\n", + "[ 2.68098642e+02 2.67349642e-02 1.33494450e-02 1.32402829e-05]\n", + "[ 2.67981165e+02 2.67464081e-02 1.33479731e-02 1.32382983e-05]\n", + "[ 2.67981169e+02 2.67464081e-02 1.33479731e-02 1.32382983e-05]\n", + "[ 2.67981165e+02 2.67464085e-02 1.33479731e-02 1.32382983e-05]\n", + "[ 2.67981165e+02 2.67464081e-02 1.33479733e-02 1.32382983e-05]\n", + "[ 2.67981165e+02 2.67464081e-02 1.33479731e-02 1.32382985e-05]\n", + "[ 2.67941003e+02 2.67405065e-02 1.33494212e-02 1.32333368e-05]\n", + "[ 2.67941007e+02 2.67405065e-02 1.33494212e-02 1.32333368e-05]\n", + "[ 2.67941003e+02 2.67405069e-02 1.33494212e-02 1.32333368e-05]\n", + "[ 2.67941003e+02 2.67405065e-02 1.33494214e-02 1.32333368e-05]\n", + "[ 2.67941003e+02 2.67405065e-02 1.33494212e-02 1.32333370e-05]\n", + "[ 2.67821508e+02 2.67309385e-02 1.33515814e-02 1.32268293e-05]\n", + "[ 2.67821512e+02 2.67309385e-02 1.33515814e-02 1.32268293e-05]\n", + "[ 2.67821508e+02 2.67309389e-02 1.33515814e-02 1.32268293e-05]\n", + "[ 2.67821508e+02 2.67309385e-02 1.33515816e-02 1.32268293e-05]\n", + "[ 2.67821508e+02 2.67309385e-02 1.33515814e-02 1.32268295e-05]\n", + "[ 2.67876674e+02 2.67386568e-02 1.33541272e-02 1.32100667e-05]\n", + "[ 2.67868601e+02 2.67361280e-02 1.33523041e-02 1.32213157e-05]\n", + "[ 2.67847465e+02 2.67336336e-02 1.33514712e-02 1.32262515e-05]\n", + "[ 2.67831538e+02 2.67319763e-02 1.33514987e-02 1.32267845e-05]\n", + "[ 2.67825532e+02 2.67313547e-02 1.33515447e-02 1.32268268e-05]\n", + "[ 2.67823196e+02 2.67311130e-02 1.33515656e-02 1.32268303e-05]\n", + "[ 2.67822200e+02 2.67310101e-02 1.33515748e-02 1.32268301e-05]\n", + "[ 2.67821784e+02 2.67309671e-02 1.33515788e-02 1.32268297e-05]\n", + "[ 2.67821617e+02 2.67309498e-02 1.33515804e-02 1.32268294e-05]\n", + "[ 2.67821550e+02 2.67309428e-02 1.33515810e-02 1.32268294e-05]\n", + "[ 2.67821526e+02 2.67309403e-02 1.33515813e-02 1.32268293e-05]\n", + "[ 2.67821516e+02 2.67309394e-02 1.33515814e-02 1.32268293e-05]\n", + "modsim.py: scipy.optimize.leastsq ran successfully\n", + " and returned the following message:\n", + "The relative error between two consecutive iterates is at most 0.000000\n" + ] + } + ], + "source": [ + "best_params = fit_leastsq(error_func, params, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have `best_params`, we can use it to make a `System` object and run it.\n", + "\n", + "We have to use the scatter operator, `*`, to make `best_params` behave like four separate parameters, rather than a single object." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = make_system(*best_params, data)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results, along with the data. The first few points of the model don't fit the data, but we don't expect them to." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "system.results.plot() #the fit is slightly better" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Since we don't expect the first few points to agree, it's probably better not to make them part of the optimization process. We can ignore them by leaving them out of the `Series` returned by `error_func`. Modify the last line of `error_func` to return `errors.loc[8:]`, which includes only the elements of the `Series` from `t=8` and up.\n", + "\n", + "Does that improve the quality of the fit? Does it change the best parameters by much?\n", + "\n", + "Note: You can read more about this use of `loc` [in the Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer)." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func(params, data):\n", + " \"\"\"Computes an array of errors to be minimized.\n", + " \n", + " params: sequence of parameters\n", + " data: DataFrame of values to be matched\n", + " \n", + " returns: array of errors\n", + " \"\"\"\n", + " print(params)\n", + " \n", + " # make a System with the given parameters\n", + " system = make_system(*params, data)\n", + " \n", + " # solve the ODE\n", + " run_odeint(system, slope_func)\n", + " \n", + " error = system.results.G - data.glucose\n", + " return error.loc[8:]\n", + "\n", + "# The fit is better without" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** How sensitive are the results to the starting guess for the parameters. If you try different values for the starting guess, do we get the same values for the best parameters?" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(90, 0.03, 0.02, 1e-05)\n", + "time\n", + "8 -150.755637\n", + "10 -127.386945\n", + "12 -123.071252\n", + "14 -117.787609\n", + "16 -109.515216\n", + "19 -106.583617\n", + "22 -87.593075\n", + "27 -80.128353\n", + "32 -60.471399\n", + "42 -44.662951\n", + "52 -26.978262\n", + "62 -14.385637\n", + "72 -6.151731\n", + "82 1.611766\n", + "92 -2.249138\n", + "102 0.121443\n", + "122 1.884066\n", + "142 4.753431\n", + "162 4.255768\n", + "182 1.306500\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "params = (90, 0.03, 0.02, 1e-05)\n", + "print(error_func(params, data))\n", + "\n", + "# The results change by quite a bit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Interpreting parameters\n", + "\n", + "Based on the parameters of the model, we can estimate glucose effectiveness and insulin sensitivity." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def indices(G0, k1, k2, k3):\n", + " \"\"\"Compute glucose effectiveness and insulin sensitivity.\n", + " \n", + " G0: initial blood glucose\n", + " k1: rate parameter\n", + " k2: rate parameter\n", + " k3: rate parameter\n", + " data: DataFrame\n", + " \n", + " returns: State object containing S_G and S_I\n", + " \"\"\"\n", + " return State(S_G=k1, S_I=k3/k2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
S_G0.026731
S_I0.000991
\n", + "
" + ], + "text/plain": [ + "S_G 0.026731\n", + "S_I 0.000991\n", + "dtype: float64" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "indices(*best_params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The insulin minimal model\n", + "\n", + "In addition to the glucose minimal mode, Pacini and Bergman present an insulin minimal model, in which the concentration of insulin, $I$, is governed by this differential equation:\n", + "\n", + "$ \\frac{dI}{dt} = -k I(t) + \\gamma (G(t) - G_T) t $" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a version of `make_system` that takes the parameters of this model, `I0`, `k`, `gamma`, and `G_T` as parameters, along with a `DataFrame` containing the measurements, and returns a `System` object suitable for use with `run_simulation` or `run_odeint`.\n", + "\n", + "Use it to make a `System` object with the following parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "I0 = 360\n", + "k = 0.25\n", + "gamma = 0.004\n", + "G_T = 80" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(I0, k, gamma, G_T, data):\n", + "\n", + " state = State(I=I0)\n", + " system = System(init=state, \n", + " k=k, gamma=gamma, G_T=G_T,\n", + " G=interpolate(data.glucose),\n", + " ts=data.index)\n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = make_system(I0, k, gamma, G_T, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a slope function that takes state, t, system as parameters and returns the derivative of `I` with respect to time. Test your function with the initial condition $I(0)=360$." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "\n", + "def slope_func(state, t, system):\n", + " I = state\n", + " unpack(system)\n", + " \n", + " return - k * I + gamma * (G(t) - G_T) * t\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 -90.0\n", + "dtype: float64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "init = State(360)\n", + "slope_func(init, 0, system)\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Run `run_odeint` with your `System` object and slope function, and plot the results, along with the measured insulin levels." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " I\n", + "time \n", + "0 360.000000\n", + "2 219.652719\n", + "4 137.739127\n", + "6 89.505898\n", + "8 61.636133\n", + "10 45.765330\n", + "12 37.053121\n", + "14 32.989732\n", + "16 31.406589\n", + "19 31.811071\n", + "22 32.581632\n", + "27 34.014287\n", + "32 33.758216\n", + "42 30.932902\n", + "52 24.554216\n", + "62 15.767804\n", + "72 7.782053\n", + "82 -0.382598\n", + "92 0.598298\n", + "102 1.943431\n", + "122 3.415756\n", + "142 4.413573\n", + "162 11.170251\n", + "182 25.702699\n" + ] + }, + { + "data": { + "image/png": "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\n9KG04n1hKrDnnMrfefXsOb8AY8eOtUk6npbbdZZp8ufXLGwsW7bMHB0dbc7Pz7euW7Fihbl37942\n60Tdvv76a3PXrl3NOp2u2u1FRUXmfv36md955x3ruoKCAvONN95ofuONN65WmNcUo9FofTxnzhzz\nAw88YLPd3nMqf+fVq+v8ms1m86233mp+9dVXaz1OUz+/UhVWSU13oywqKmLfvn0ujKzxOXjwIDqd\njlGjRlnX+fn5ceutt7Jz504XRua+1HXMjmzvOZW/8+rVdX7t1dTPrySWSlJSUqrMiFzxbpTCcbff\nfjvXX389I0aMYM2aNdb1KSkpaDQaOnToYLN/p06d5FxfIXvPqfyd189XX31Fz5496d+/P48++igZ\nGRk225v6+ZU2lkrkbpTOExISwty5c+nduzdGo5GNGzfywgsvUFRURHx8PFqtFj8/vypztAUFBaHX\n6ykuLsbLy8tF0V+b7D2n8nd+5WJjY+nbty+hoaGcOnWKJUuWMGnSJNavX289p039/EpiEQ1m6NCh\nDB061Pr85ptvxmAw8N577zFlyhQXRibElXv22Wetj6Ojo7nhhhsYN24cX3/9NfHx8a4LzI1IVVgl\ncjfKhjVixAhyc3PJyMggMDCQwsLCKl0w8/Ly8PX1ldLKFbD3nMrfufN07dqVjh078scff1jXNfXz\nK4mlErkbZcNSVbgPe1RUFEajkbS0NJt9qqufFvax95zK37lzqVSqKn/bTfn8SmKpZNiwYezatcvm\n14a9d6MUddu8eTPNmzenbdu29OvXD39/fxITE63b9Xo927Zts6lCE/az95zK37nz/Pnnn6SkpNCj\nRw/ruqZ+fjUvvvjii64Owp106dKFzz//nJ9//pnWrVuzZ88e3njjDaZOncrNN9/s6vCuKXPmzCE9\nPR2dTkdqaipLly5lw4YNPPnkk/Tt2xcPD6WJb9myZQQGBlJQUMArr7xCVlYWixcvxs/Pz8WfwP3o\n9XqSkpJITk5m165d5OXl0bJlS5KTk2nbtq11IGpd51T+zqtX1/ndvXs3b7/9NgaDgcuXL7Njxw6e\ne+45goODWbhwobWqsamfX7nRVzWu9G6UwtYbb7zB5s2bycrKwmw207lzZ6ZMmcK4ceOs+5jLph/5\n7LPPyM3NpWfPnjz77LNcf/31LozcfaWnpzN8+PBqtyUlJREREWH3OZW/86rqOr86nY5XXnmFEydO\nkJ+fT3BwMEOHDmXevHm0adPGZv+mfH4lsQghhHAqaWMRQgjhVJJYhBBCOJUkFiGEEE4liUUIIYRT\nSWIRQgjhVJJYhBBCOJUkFiGqYbmtcnp6uqtDsbF+/XoGDRpEUVGR044ZGxvL008/fUWvjYuL47XX\nXnNaLKJxkNmNRZPRrVs3u/ZLSkpq4EiuTGlpKUuWLGHy5Mk2t3p2pWnTpjF//nweeughWrZs6epw\nhJuQAZKiyfj2229tnn/00UecO3eOZ555xmb97bffjre3N6WlpXh5edlMLuhKW7ZsYe7cuezYscN6\n73pnKC4uRqVSVblvuz1MJhPDhg0jLi6O2bNnOy0mcW2TEotoMu666y6b55s3byY3N7fKegt3m3pj\n7dq1REdHOzWpAPW6PYFarWbEiBF8++23zJo1y22SsHAtaWMRohrVtbHExsbyt7/9jd27dzN+/Hh6\n9+7N+PHjOXz4MADr1q1jxIgR9OrViwceeICzZ89WOe7Bgwd58MEH6devH3379iU+Pp6jR4/WGY/B\nYGDXrl3cdNNNVbZ169aNl156ifXr1zNy5Ej69OnDpEmTOH36NAArV67klltuoXfv3syYMYPc3Fyb\n11duY7F89kOHDvHSSy8xcOBA+vbty6xZs8jJyany/jfddBNnzpzhzz//rPNziKZBEosQDkhJSeHv\nf/87w4cPZ968eWRlZfHII4/w5ZdfsmzZMiZOnMj06dP57bffbO40CLBnzx6mTJlCcXExjz76KHPn\nziUrK4sHHniA5OTkWt/36NGjlJSU1Dg5588//8ybb77JPffcw4wZM/j999+ZPXs2y5YtY9OmTTz0\n0EPExcXx448/8q9//cuuz7pgwQKSk5OZM2cO999/P9u2bWPhwoVV9uvZsyegJE0hQKrChHBIamoq\nX375Jb179wagTZs2zJs3j9dee816rxlQGtqXL19OZmYmYWFhmEwmXnzxRYYMGcKyZcusx7v33nsZ\nNWoU7777Lm+++WaN72u5aVRERES120+fPs3mzZsJCwsDwMPDg9dff51169axfv16a3XXpUuXWL9+\nPQsWLKizTaVFixasXLnSWr1lMplYvXo1+fn5Nvdzb9OmDZ6enpw6darW44mmQ0osQjigW7du1qQC\n0KdPH0CpTrIkFcC6j6Uq7fjx46SlpTFmzBhycnKsS0lJCf3792ffvn21vq+l+iooKKja7YMHD7Ym\nlYpxjR071qYNpXfv3hQXF5OdnV3nZ42Li7NpM4mOjsZoNJKRkVFl36CgIC5fvlznMUXTICUWIRwQ\nHh5u89zyyz00NLTa9Xl5eQDW9o4nn3yy2uOq1fb9xqupE6ejcWm12iqvqaxiogKs92rXarV2xyWa\nJkksQjigpgRQVw8yy+tcVtUAAAGQSURBVIX3mWeeoWvXrg6/b3BwMKBc1KvrFeZoXPYkAkdeq9Vq\nbUpsommTxCLEVRAZGQkov/qr69lVl6ioKECpWuvUqZNTY6uv8+fPU1JS4nZxCdeRNhYhroIePXoQ\nGRnJf/7zH/R6fZXt1XXjrahnz554enpy5MiRhgrxilm6S99www0ujkS4CymxCHEVaDQaFi1aREJC\nAnfccQfjxo2jdevWZGVlsXv3btq1a1frnFve3t4MGTKEvXv3ut0I9z179hAREWH3lDmi8ZMSixBX\nyaBBg1izZg1du3Zl9erVLFq0iG+//ZbIyEji4uLqfP3dd9/NwYMHuXDhwlWI1j4mk4nNmzczbtw4\nGXUvrGSuMCGuEaWlpYwZM4Y777yTWbNmuTocQJmw84knnmDr1q20atXK1eEINyElFiGuER4eHsye\nPZtPPvnEqdPm18f777/PpEmTJKkIG1JiEUII4VRSYhFCCOFUkliEEEI4lSQWIYQQTiWJRQghhFNJ\nYhFCCOFUkliEEEI4lSQWIYQQTvX/AQ4+knHSKsQ5AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_odeint(system, slope_func)\n", + "print(system.results)\n", + "plot(system.results, 'r-', label='model')\n", + "plot(data.insulin, 'bo-', label='insulin')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write an error function that takes a sequence of parameters as an argument, along with the `DataFrame` containing the measurements. It should make a `System` object with the given parameters, run it, and compute the difference between the results of the simulation and the measured values. Test your error function by calling it with the parameters from the previous exercise.\n", + "\n", + "Hint: As we did in a previous exercise, you might want to drop the errors for times prior to `t=8`." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def error_func(params, data):\n", + " system = make_system(*params, data)\n", + " run_odeint(system, slope_func)\n", + " \n", + " return (system.results.I - data.insulin)[8:]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "time\n", + "16 -3.593411\n", + "19 1.811071\n", + "22 2.581632\n", + "27 7.014287\n", + "32 3.758216\n", + "42 8.932902\n", + "52 9.554216\n", + "62 0.767804\n", + "72 -3.217947\n", + "82 -10.382598\n", + "92 -7.401702\n", + "102 -9.056569\n", + "122 -3.584244\n", + "142 -3.586427\n", + "162 3.170251\n", + "182 18.702699\n", + "dtype: float64" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "params = [I0, k, gamma, G_T]\n", + "error_func(params, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Use `fit_leastsq` to find the parameters that best fit the data. Make a `System` object with those parameters, run it, and plot the results along with the measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "modsim.py: scipy.optimize.leastsq ran successfully\n", + " and returned the following message:\n", + "The relative error between two consecutive iterates is at most 0.000000\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'slope' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mparams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfit_leastsq\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0msystem\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmake_system\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mrun_odeint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mslope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r-'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'model'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minsulin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'bo-'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'slope' is not defined" + ] + } + ], + "source": [ + "# Solution goes here\n", + "params = fit_leastsq(error_func, params, data)\n", + "system = make_system(*params, data)\n", + "run_odeint(system, slope)\n", + "plot(system.results, 'r-', label='model')\n", + "plot(data.insulin, 'bo-', label='data')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Using the best parameters, estimate the sensitivity to glucose of the first and second phase pancreatic responsivity:\n", + "\n", + "$ \\phi_1 = \\frac{I_{max} - I_b}{k (G_0 - G_b)} $\n", + "\n", + "$ \\phi_2 = \\gamma \\times 10^4 $" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "phi1 = (data.insulin.max() - data.insulin[0])/(system.k*(data.glucose.max() - data.glucose[0]))\n", + "print(phi1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "phi2 = gamma * 1e4\n", + "print(phi2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python3.6", + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap08mine.org b/code/chap08mine.org new file mode 100644 index 00000000..2e03693d --- /dev/null +++ b/code/chap08mine.org @@ -0,0 +1,188 @@ +#+title: Chapter 8 Notebook + +#+name: pre +#+BEGIN_SRC python + import pandas as pd + import numpy as np + import scipy.interpolate + import matplotlib.pyplot as plt + + + data = pd.read_csv('glucose_insulin.csv', index_col='time') + k1 = 0.03 + k2 = 0.02 + k3 = 1e-05 + G0 = 290 + I = scipy.interpolate.interp1d(data.insulin.index, data.insulin.values) + Gb = data.glucose[0] + Ib = data.insulin[0] + + init = pd.Series({'G': G0, 'X': 0}) + + def slope_func(state, t, system): + G, X = state + return -system.k1 * (G - system.Gb) - X * G, system.k3 * (system.I(t) - system.Ib) - system.k2 * X +#+END_SRC + +#+RESULTS: pre +: None + +* Exercise 1 + +#+BEGIN_SRC python :results file :noweb yes :var fname="chap08fig/interp.png" :exports both + <
>
+
+  ts = np.float64(np.arange(2,182,2))
+  plt.plot(ts, scipy.interpolate.interp1d(data.insulin.index, data.insulin.values, kind='quadratic')(ts))
+  ax = plt.gca()
+
+  ax.figure.savefig(fname)
+  return(fname)
+#+END_SRC
+
+#+RESULTS:
+[[file:chap08fig/interp.png]]
+
+* Exercise 2
+What happens to these errors if you run the simulation with a smaller value of dt?
+
+#+BEGIN_SRC python :noweb yes :results output :exports both
+  <
>
+
+  system = pd.Series({'init': init, 'k1': k1, 'k2': k2, 'k3': k3,
+                      'I': I, 'Gb': Gb, 'Ib': Ib, 't0': 0, 't_end': 182, 'dt': 0.5})
+
+
+  def update_func(state, t, system):
+      G, X = state
+      dGdt = -system.k1 * (G - system.Gb) - X * G
+      dXdt = system.k3 * (I(t) - system.Ib) - system.k2 * X
+      G += dGdt * system['dt']
+      X += dXdt * system['dt']
+      return pd.Series({'G': G, 'X': X})
+
+
+  def run_simulation(system, update_func):
+      frame = pd.DataFrame(columns=system.init.index, dtype=np.float64)
+      frame.loc[system.t0] = system.init
+      ts = np.float64(np.arange(system.t0, system.t_end - system['dt'], system['dt']))
+      for t in ts:
+          frame.loc[t + system['dt']] = update_func(frame.loc[t], t, system)
+      system.results = frame
+
+  run_simulation(system, update_func)
+
+
+  system2 = pd.Series({'init': init, 'k1': k1, 'k2': k2,
+                       'k3': k3, 'I': I, 'Gb': Gb, 'Ib': Ib, 'ts': data.index})
+
+
+  system2.results = pd.DataFrame(scipy.integrate.odeint(slope_func, list(
+      system2.init), system2.ts[:-1], (system,)), columns=system.init.index, index=system2.ts[:-1], dtype=np.float64)
+
+  diff = system.results - system2.results
+  percent_diff = (diff / system2.results * 100).dropna()
+  print(system.results)
+#+END_SRC
+
+#+RESULTS:
+#+begin_example
+                G         X
+0.0    290.000000  0.000000
+0.5    287.030000  0.000000
+1.0    284.104550  0.000019
+1.5    281.220318  0.000056
+2.0    278.374131  0.000112
+2.5    275.562964  0.000186
+3.0    272.783943  0.000389
+3.5    270.019157  0.000720
+4.0    267.251678  0.001178
+4.5    264.465533  0.001761
+5.0    261.645699  0.002282
+5.5    258.802469  0.002742
+6.0    255.945648  0.003141
+6.5    253.084556  0.003479
+7.0    250.228026  0.003772
+7.5    247.382692  0.004019
+8.0    244.554818  0.004221
+8.5    241.750306  0.004379
+9.0    238.974710  0.004533
+9.5    236.228458  0.004683
+10.0   233.511947  0.004828
+10.5   230.825535  0.004970
+11.0   228.169549  0.005105
+11.5   225.544567  0.005234
+12.0   222.951119  0.005357
+12.5   220.389687  0.005473
+13.0   217.860707  0.005584
+13.5   215.364571  0.005688
+14.0   212.901630  0.005786
+14.5   210.472191  0.005878
+...           ...       ...
+167.0   90.529022 -0.000459
+167.5   90.571856 -0.000470
+168.0   90.614585 -0.000482
+168.5   90.657211 -0.000494
+169.0   90.699738 -0.000506
+169.5   90.742168 -0.000517
+170.0   90.784502 -0.000529
+170.5   90.826744 -0.000541
+171.0   90.868895 -0.000552
+171.5   90.910958 -0.000564
+172.0   90.952934 -0.000576
+172.5   90.994826 -0.000588
+173.0   91.036636 -0.000599
+173.5   91.078366 -0.000611
+174.0   91.120018 -0.000623
+174.5   91.161594 -0.000635
+175.0   91.203096 -0.000646
+175.5   91.244525 -0.000658
+176.0   91.285884 -0.000670
+176.5   91.327175 -0.000682
+177.0   91.368399 -0.000694
+177.5   91.409558 -0.000705
+178.0   91.450654 -0.000717
+178.5   91.491688 -0.000729
+179.0   91.532663 -0.000741
+179.5   91.573580 -0.000753
+180.0   91.614440 -0.000765
+180.5   91.655246 -0.000776
+181.0   91.695998 -0.000788
+181.5   91.736699 -0.000800
+
+[364 rows x 2 columns]
+#+end_example
+
+The errors get smaller.
+
+* Exercise 3
+Since we don't expect the first few points to agree, it's probably better not to make them part of the optimization process.
+We can ignore them by leaving them out of the =Series= returned by =error_func=.
+Modify the last line of error_func to return errors.loc[8:], which includes only the elements of the Series from =t=8= and up.
+
+#+BEGIN_SRC python :noweb yes
+  <
>
+
+  def error_func(params, data):
+      print(params)
+      system = make_system(*params, data)
+      system.results = pd.DataFrame(scipy.integrate.odeint(slope_func, list(system.init), system.ts, (system,)), columns = system.init.index,index = system.ts)
+      error = system.results.G - data.glucose
+      return error.loc[8:]
+
+
+  def make_system(G0, k1, k2, k3, data):
+      init = pd.Series({'G': G0, 'X': 0})
+      system=  pd.Series({'init': init,
+                          'k1': k1, 'k2': 'k2', 'k3': k3,
+                          'Gb': Gb, 'Ib': Ib,
+                          'I': scipy.interpolate.interp1d(data.insulin.index, data.insulin.values),
+                          'ts': data.index})
+      return system
+
+  params = G0, k1, k2, k3
+  best_params = scipy.optimize.leastsq(error_func, x0=params, args=(data,))[0]
+  # system = make_system(*best_params, data)
+#+END_SRC
+
+#+RESULTS:
diff --git a/code/chap09-fig01.pdf b/code/chap09-fig01.pdf
new file mode 100644
index 00000000..2ed03b97
Binary files /dev/null and b/code/chap09-fig01.pdf differ
diff --git a/code/chap09-fig02.pdf b/code/chap09-fig02.pdf
new file mode 100644
index 00000000..843c097a
Binary files /dev/null and b/code/chap09-fig02.pdf differ
diff --git a/code/chap09mine.ipynb b/code/chap09mine.ipynb
new file mode 100644
index 00000000..afa00211
--- /dev/null
+++ b/code/chap09mine.ipynb
@@ -0,0 +1,2154 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Modeling and Simulation in Python\n",
+    "\n",
+    "Chapter 9: Projectiles\n",
+    "\n",
+    "Copyright 2017 Allen Downey\n",
+    "\n",
+    "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# If you want the figures to appear in the notebook, \n",
+    "# and you want to interact with them, use\n",
+    "# %matplotlib notebook\n",
+    "\n",
+    "# If you want the figures to appear in the notebook, \n",
+    "# and you don't want to interact with them, use\n",
+    "# %matplotlib inline\n",
+    "\n",
+    "# If you want the figures to appear in separate windows, use\n",
+    "# %matplotlib qt5\n",
+    "\n",
+    "# tempo switch from one to another, you have to select Kernel->Restart\n",
+    "\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from modsim import *"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "collapsed": true
+   },
+   "source": [
+    "### Dropping pennies\n",
+    "\n",
+    "I'll start by getting the units we'll need from Pint."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "m = UNITS.meter\n",
+    "s = UNITS.second\n",
+    "kg = UNITS.kilogram"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "collapsed": true
+   },
+   "source": [
+    "And defining the initial state."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
y381 meter
v0.0 meter / second
\n", + "
" + ], + "text/plain": [ + "y 381 meter\n", + "v 0.0 meter / second\n", + "dtype: object" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(y=381 * m, \n", + " v=0 * m/s)\n", + "init" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Acceleration due to gravity is about 9.8 m / s$^2$." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "g = 9.8 * m/s**2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "When we call `odeint`, we need an array of timestamps where we want to compute the solution.\n", + "\n", + "I'll start with a duration of 10 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}0.0 & 0.5 & 1.0 & 1.5 & 2.0 & 2.5 & 3.0 & 3.5 & 4.0 & 4.5 & 5.0 & 5.5 & 6.0 & 6.5 & 7.0 & 7.5 & 8.0 & 8.5 & 9.0 & 9.5 & 10.0\\end{pmatrix} second\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}0.0 & 0.5 & 1.0 & 1.5 & 2.0 & 2.5 & 3.0 & 3.5 & 4.0 & 4.5 & 5.0 & 5.5 & 6.0 & 6.5 & 7.0 & 7.5 & 8.0 & 8.5 & 9.0 & 9.5 & 10.0\\end{pmatrix}\\ \\mathrm{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "duration = 10 * s\n", + "ts = linspace(0, duration, 21)\n", + "ts" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now we make a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = System(init=init, g=g, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And define the slope function." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing `g`\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " print(t)\n", + " y, v = state\n", + " unpack(system) \n", + "\n", + " dydt = v\n", + " dvdt = -g\n", + " \n", + " return dydt, dvdt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "It's always a good idea to test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "0.0 meter / second\n", + "-9.8 meter / second ** 2\n" + ] + } + ], + "source": [ + "dydt, dvdt = slope_func(init, 0, system)\n", + "print(dydt)\n", + "print(dvdt)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now we're ready to run `odeint`" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 second\n", + "0.0\n", + "1.2204606467739427e-05\n", + "1.2204606467739427e-05\n", + "2.4409212935478853e-05\n", + "2.4409212935478853e-05\n", + "0.12207047389032974\n", + "0.244116538567724\n", + "0.3661626032451183\n", + "1.586623250019061\n", + "2.8070838967930034\n", + "4.027544543566946\n", + "16.23215101130637\n" + ] + } + ], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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", + "
yv
0.0381.0000.0
0.5379.775-4.9
1.0376.100-9.8
1.5369.975-14.7
2.0361.400-19.6
\n", + "
" + ], + "text/plain": [ + " y v\n", + "0.0 381.000 0.0\n", + "0.5 379.775 -4.9\n", + "1.0 376.100 -9.8\n", + "1.5 369.975 -14.7\n", + "2.0 361.400 -19.6" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "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", + "
yv
8.067.400-78.4
8.526.975-83.3
9.0-15.900-88.2
9.5-61.225-93.1
10.0-109.000-98.0
\n", + "
" + ], + "text/plain": [ + " y v\n", + "8.0 67.400 -78.4\n", + "8.5 26.975 -83.3\n", + "9.0 -15.900 -88.2\n", + "9.5 -61.225 -93.1\n", + "10.0 -109.000 -98.0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The following function plots the results." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_position(results):\n", + " \"\"\"Plot the results.\n", + " \n", + " results: DataFrame with position, `y`\n", + " \"\"\"\n", + " newfig()\n", + " plot(results.y, label='y')\n", + " \n", + " decorate(xlabel='Time (s)',\n", + " ylabel='Position (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap09-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nhBCiVfn/2mYqHxqusFUAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_position(system.results)\n", + "savefig('chap09-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** Add a print statement to `slope_func` to print the value of `t` each time it's called. What can we infer about how `odeint` works, based on the results?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems to almost square the time in each step." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** Change the value of `dt` and run the solver again. What effect does it have on the results?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Decreasing makes the values more accurate, increasing makes them less accurate." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Onto the sidewalk\n", + "\n", + "Here's the code again to set up the `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(duration, v_init=0):\n", + " \"\"\"Make a system object.\n", + " \n", + " duration: time of simulation in seconds\n", + " v_init: initial velocity, dimensionless\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(y=381 * m, v=v_init * m / s)\n", + "\n", + " g = 9.8 * m/s**2\n", + " ts = linspace(0, duration, 11)\n", + " return System(init=init, g=g, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n", + "0.0\n", + "1.2391823754412774e-05\n", + "1.2391823754412774e-05\n", + "2.478364750882555e-05\n", + "2.478364750882555e-05\n", + "0.12394302119163657\n", + "0.2478612587357643\n", + "0.37177949627989204\n", + "1.6109618717211696\n", + "2.850144247162447\n", + "4.089326622603725\n", + "16.481150377016498\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
0.0381.00.0
1.0376.1-9.8
2.0361.4-19.6
3.0336.9-29.4
4.0302.6-39.2
5.0258.5-49.0
6.0204.6-58.8
7.0140.9-68.6
8.067.4-78.4
9.0-15.9-88.2
10.0-109.0-98.0
\n", + "
" + ], + "text/plain": [ + " y v\n", + "0.0 381.0 0.0\n", + "1.0 376.1 -9.8\n", + "2.0 361.4 -19.6\n", + "3.0 336.9 -29.4\n", + "4.0 302.6 -39.2\n", + "5.0 258.5 -49.0\n", + "6.0 204.6 -58.8\n", + "7.0 140.9 -68.6\n", + "8.0 67.4 -78.4\n", + "9.0 -15.9 -88.2\n", + "10.0 -109.0 -98.0" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(10)\n", + "run_odeint(system, slope_func)\n", + "system.results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "To figure out when the penny hit the sidewalk, we use `interp_inverse`, which return a function that maps from height to time." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "y = system.results.y\n", + "T = interp_inverse(y, kind='cubic')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "`T(0)` interpolates the time when the height was 0." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(8.81792826905006)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T_sidewalk = T(0)\n", + "T_sidewalk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We can compare that to the exact result. Without air resistance, we have\n", + "\n", + "$v = -g t$\n", + "\n", + "and\n", + "\n", + "$y = 381 - g t^2 / 2$\n", + "\n", + "Setting $y=0$ and solving for $t$ yields\n", + "\n", + "$t = \\sqrt{\\frac{2 y_{init}}{g}}$" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720552 second" + ], + "text/latex": [ + "$8.817885349720552\\ \\mathrm{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sqrt(2 * init.y / g)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The estimate is accurate to 4 decimal places." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We can double-check by running the simulation for the estimated flight time." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n", + "0.0\n", + "1.2373598314419205e-05\n", + "1.2373598314419205e-05\n", + "2.474719662883841e-05\n", + "2.474719662883841e-05\n", + "0.1237607303408209\n", + "0.24749671348501295\n", + "0.371232696629205\n", + "1.6085925280711255\n", + "2.845952359513046\n", + "4.083312190954967\n", + "16.45691050537417\n" + ] + } + ], + "source": [ + "system = make_system(duration=T_sidewalk)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And checking the final state." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def final_state(results):\n", + " \"\"\"Returns the final position and velocity, with units.\n", + " \n", + " results: TimeFrame with y and v.\n", + " \n", + " returns: y, v at t_end\n", + " \"\"\"\n", + " t_end = results.index[-1]\n", + " y, v = results.loc[t_end]\n", + " return y*m, v*m/s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "As expected, the final height is close to 0." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.003708896250259386 meter" + ], + "text/latex": [ + "$-0.003708896250259386\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_final, v_final = final_state(system.results)\n", + "y_final" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And we can check the final velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-86.41569703669059 meter/second" + ], + "text/latex": [ + "$-86.41569703669059\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v_final" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And convert to km/h" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-311.0965093320861 kilometer/hour" + ], + "text/latex": [ + "$-311.0965093320861\\ \\frac{\\mathrm{kilometer}}{\\mathrm{hour}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "km = UNITS.kilometer\n", + "h = UNITS.hour\n", + "v_final.to(km / h)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "If there were no air resistance, the penny would hit the sidewalk (or someone's head) at more than 300 km/h.\n", + "\n", + "So it's a good thing there is air resistance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Try changing the initial velocity and see what effect it has on the time to hot the sidewalk. Sweep a range of values for the initial velocity, from 0 to 25 m/s, and plot `T_sidewalk` as a function of initial velocity. You might find the following function useful.\n", + "\n", + "Things might go horribly wrong for the larger initial velocities. What's going on?" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def flight_time(system):\n", + " \"\"\"Simulates the system and computes flight time.\n", + " \n", + " Uses cubic interpolation.\n", + " \n", + " system: System object\n", + " \n", + " returns: flight time in seconds\n", + " \"\"\"\n", + " run_odeint(system, slope_func)\n", + " y = system.results.y\n", + " inverse = Series(y.index, index=y.values)\n", + " T = interpolate(inverse, kind='cubic')\n", + " T_sidewalk = T(0)\n", + " return T_sidewalk * s" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n", + "0.0\n", + "1.2391823754412774e-05\n", + "1.2391823754412774e-05\n", + "2.478364750882555e-05\n", + "2.478364750882555e-05\n", + "0.12394302119163657\n", + "0.2478612587357643\n", + "0.37177949627989204\n", + "1.6109618717211696\n", + "2.850144247162447\n", + "4.089326622603725\n", + "16.481150377016498\n", + "0.0\n", + "0.0\n", + "2.4409212935478853e-05\n", + "2.4409212935478853e-05\n", + "4.8818425870957706e-05\n", + "4.8818425870957706e-05\n", + "0.24414094778065948\n", + "0.488233077135448\n", + "0.7323252064902366\n", + "3.173246500038122\n", + "5.614167793586007\n", + "8.055089087133892\n", + "32.46430202261274\n", + "0.0\n", + "0.0\n", + "3.573176919464151e-05\n", + "3.573176919464151e-05\n", + "7.146353838928302e-05\n", + "7.146353838928302e-05\n", + "0.3573891554848043\n", + "0.7147068474312194\n", + "1.0720245393776344\n", + "4.645201458841784\n", + "8.218378378305935\n", + "11.791555297770085\n", + "0.0\n", + "0.0\n", + "4.613006463536682e-05\n", + "4.613006463536682e-05\n", + "9.226012927073364e-05\n", + "9.226012927073364e-05\n", + "0.46139290648293896\n", + "0.9226935528366071\n", + "1.3839941991902753\n", + "5.997000662726958\n", + "10.610007126263639\n", + "0.0\n", + "0.0\n", + "5.547740886983432e-05\n", + "5.547740886983432e-05\n", + "0.00011095481773966864\n", + "0.00011095481773966864\n", + "0.5548850435160829\n", + "1.1096591322144262\n", + "1.6644332209127695\n", + "7.212174107896201\n", + "12.759914994879633\n", + "0.0\n", + "0.0\n", + "6.373956781545842e-05\n", + "6.373956781545842e-05\n", + "0.00012747913563091685\n", + "0.00012747913563091685\n", + "0.6375231572902151\n", + "1.2749188354447993\n", + "1.9123145135993835\n", + "8.286271295145225\n", + "14.660228076691066\n", + "0.0\n", + "0.0\n", + "7.095202033197637e-05\n", + "7.095202033197637e-05\n", + "0.00014190404066395274\n", + "0.00014190404066395274\n", + "0.7096621073604277\n", + "1.4191823106801915\n", + "2.128702513999955\n", + "9.223904547197591\n", + "16.31910658039523\n", + "0.0\n", + "0.0\n", + "7.719449625742039e-05\n", + "7.719449625742039e-05\n", + "0.00015438899251484078\n", + "0.00015438899251484078\n", + "0.7720993515667187\n", + "1.5440443141409226\n", + "2.3159892767151264\n", + "10.035438902457166\n", + "0.0\n", + "0.0\n", + "8.256907718939225e-05\n", + "8.256907718939225e-05\n", + "0.0001651381543787845\n", + "0.0001651381543787845\n", + "0.8258559100483013\n", + "1.6515466819422238\n", + "2.477237453836146\n", + "10.73414517277537\n", + "0.0\n", + "0.0\n", + "8.718429798969494e-05\n", + "8.718429798969494e-05\n", + "0.00017436859597938988\n", + "0.00017436859597938988\n", + "0.8720173484929289\n", + "1.7438603283898784\n", + "2.615703308286828\n", + "11.334133107256324\n", + "0.0\n", + "0.0\n", + "9.114511907553673e-05\n", + "9.114511907553673e-05\n", + "0.00018229023815107345\n", + "0.00018229023815107345\n", + "0.9116334809935184\n", + "1.8230846717488856\n", + "2.734535862504253\n", + "11.849047770057926\n", + "0.0\n", + "0.0\n", + "9.454750196759271e-05\n", + "9.454750196759271e-05\n", + "0.00018909500393518542\n", + "0.00018909500393518542\n", + "0.9456641146798622\n", + "1.8911391343557893\n", + "2.8366141540317162\n", + "12.291364350790987\n", + "0.0\n", + "0.0\n", + "9.747612646647661e-05\n", + "9.747612646647661e-05\n", + "0.00019495225293295323\n", + "0.00019495225293295323\n", + "0.9749562169176991\n", + "0.9749562169176991\n", + "1.9497174815824652\n", + "2.9244787462472313\n", + "12.672091392894892\n", + "0.0\n", + "0.0\n", + "0.00010000402676456341\n", + "0.00010000402676456341\n", + "0.00020000805352912682\n", + "0.00020000805352912682\n", + "1.0002402756991633\n", + "1.0002402756991633\n", + "2.0002805433447977\n", + "3.0003208109904316\n", + "13.000723487446773\n", + "0.0\n", + "0.0\n", + "0.00010219327271785773\n", + "0.00010219327271785773\n", + "0.00020438654543571545\n", + "0.00020438654543571545\n", + "1.022137113724013\n", + "2.04406984090259\n", + "3.066002568081167\n", + "13.28532983986694\n", + "0.0\n", + "0.0\n", + "0.00010409613345092066\n", + "0.00010409613345092066\n", + "0.00020819226690184131\n", + "0.00020819226690184131\n", + "1.0411695267761085\n", + "1.0411695267761085\n", + "2.0821308612853153\n", + "3.1230921957945217\n", + "13.532705540886587\n", + "0.0\n", + "0.0\n", + "0.00010575639028847439\n", + "0.00010575639028847439\n", + "0.00021151278057694877\n", + "0.00021151278057694877\n", + "1.0577754156653207\n", + "1.0577754156653207\n", + "2.1153393185500646\n", + "3.1729032214348085\n", + "13.748542250282247\n", + "0.0\n", + "0.0\n", + "0.00010721061864752782\n", + "0.00010721061864752782\n", + "0.00021442123729505563\n", + "0.00021442123729505563\n", + "1.072320607712573\n", + "2.144426794187851\n", + "3.2165329806631293\n", + "13.937594845415909\n", + "0.0\n", + "0.0\n", + "0.00010848935252554772\n", + "0.00010848935252554772\n", + "0.00021697870505109544\n", + "0.00021697870505109544\n", + "1.0851105039605282\n", + "2.170004029216005\n", + "3.2548975544714827\n", + "14.103832807026254\n", + "0.0\n", + "0.0\n", + "0.00010961809947100227\n", + "0.00010961809947100227\n", + "0.00021923619894200454\n", + "0.00021923619894200454\n", + "1.0964002309089647\n", + "1.0964002309089647\n", + "2.192581225618987\n", + "3.28876222032901\n", + "14.250572167429238\n", + "0.0\n", + "0.0\n", + "0.00011061820311916963\n", + "0.00011061820311916963\n", + "0.00022123640623833925\n", + "0.00022123640623833925\n", + "1.1064032675979347\n", + "1.1064032675979347\n", + "2.212585298789631\n", + "3.3187673299813274\n", + "14.380587641898291\n", + "0.0\n", + "0.0\n", + "0.00011150756463067493\n", + "0.00011150756463067493\n", + "0.00022301512926134985\n", + "0.00022301512926134985\n", + "1.1152986614360105\n", + "1.1152986614360105\n", + "2.2303743077427596\n", + "3.345449954049509\n", + "14.496206417117001\n", + "0.0\n", + "0.0\n", + "0.00011230124015171632\n", + "0.00011230124015171632\n", + "0.00022460248030343265\n", + "0.00022460248030343265\n", + "1.1232370039974666\n", + "1.1232370039974666\n", + "2.2462494055146296\n", + "3.369261807031793\n", + "14.599385822203425\n", + "0.0\n", + "0.0\n", + "0.00011301193265669876\n", + "0.00011301193265669876\n", + "0.00022602386531339752\n", + "0.00022602386531339752\n", + "1.1303453504323009\n", + "1.1303453504323009\n", + "2.2604646769992884\n", + "3.3905840035662758\n", + "14.691777269236152\n", + "0.0\n", + "0.0\n", + "0.00011365039553078947\n", + "0.00011365039553078947\n", + "0.00022730079106157895\n", + "0.00022730079106157895\n", + "1.1367312560989564\n", + "1.1367312560989564\n", + "2.2732352114068513\n", + "3.409739166714746\n", + "14.774778719793694\n", + "0.0\n", + "0.0\n", + "0.00011422576328790598\n", + "0.00011422576328790598\n", + "0.00022845152657581196\n", + "0.00022845152657581196\n", + "1.1424860844056357\n", + "2.2847437172846954\n", + "3.4270013501637555\n", + "14.849577678954354\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "duration = 10\n", + "vs = linrange(0, 25, 1)\n", + "\n", + "for v_init in vs:\n", + " system = make_system(duration, v_init)\n", + " run_odeint(system, slope_func)\n", + " y = system.results.y\n", + " inverse = Series(y.index, index=y.values)\n", + " T = interpolate(inverse, kind='cubic')\n", + " T_sidewalk = T(0)\n", + " plot(v_init, T_sidewalk, 'b')\n", + " \n", + "# Eventually the function is not one-to-one" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### With air resistance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we'll add air resistance using the [drag equation](https://en.wikipedia.org/wiki/Drag_equation)\n", + "\n", + "First I'll create a `Condition` object to contain the quantities we'll need." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(height = 381 * m,\n", + " v_init = 0 * m / s,\n", + " g = 9.8 * m/s**2,\n", + " mass = 2.5e-3 * kg,\n", + " diameter = 19e-3 * m,\n", + " rho = 1.2 * kg/m**3,\n", + " v_term = 18 * m / s,\n", + " duration = 30 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now here's a version of `make_system` that takes a `Condition` object as a parameter.\n", + "\n", + "`make_system` uses the given value of `v_term` to compute the drag coefficient `C_d`." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Makes a System object for the given conditions.\n", + " \n", + " condition: Condition with height, g, mass, diameter, \n", + " rho, v_term, and duration\n", + " \n", + " returns: System with init, g, mass, rho, C_d, area, and ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(y=height, v=v_init)\n", + " area = np.pi * (diameter/2)**2\n", + " C_d = 2 * mass * g / (rho * area * v_term**2)\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, g=g, mass=mass, rho=rho,\n", + " C_d=C_d, area=area, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Let's make a `System`" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "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", + "
value
inity 381 meter\n", + "v 0.0 meter / secon...
g9.8 meter / second ** 2
mass0.0025 kilogram
rho1.2 kilogram / meter ** 3
C_d0.4445009981135434 dimensionless
area0.0002835287369864788 meter ** 2
ts[0.0 second, 0.3 second, 0.6 second, 0.8999999...
\n", + "
" + ], + "text/plain": [ + "init y 381 meter\n", + "v 0.0 meter / secon...\n", + "g 9.8 meter / second ** 2\n", + "mass 0.0025 kilogram\n", + "rho 1.2 kilogram / meter ** 3\n", + "C_d 0.4445009981135434 dimensionless\n", + "area 0.0002835287369864788 meter ** 2\n", + "ts [0.0 second, 0.3 second, 0.6 second, 0.8999999...\n", + "dtype: object" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's the slope function, including acceleration due to gravity and drag." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing g, rho,\n", + " C_d, area, and mass\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system)\n", + " \n", + " f_drag = rho * v**2 * C_d * area / 2\n", + " a_drag = f_drag / mass\n", + " \n", + " dydt = v\n", + " dvdt = -g + a_drag\n", + " \n", + " return dydt, dvdt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "As always, let's test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(, )" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And then run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "First check that the simulation ran long enough for the penny to land." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Then compute the flight time." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(22.43979420707891)" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = system.results.y\n", + "inverse = Series(y.index, index=y.values)\n", + "T = interpolate(inverse, kind='cubic')\n", + "T_sidewalk = T(0)\n", + "T_sidewalk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Setting the duration to the computed flight time, we can check the final conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(duration=T_sidewalk)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "y_final, v_final = final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The final height is close to 0, as expected. And the final velocity is close to the given terminal velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_final, v_final" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's the plot of position as a function of time." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap09-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nRAbU/wG0X34BNaqIOAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_position(system.results)\n", + "savefig('chap09-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And velocity as a function of time:" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_velocity(results):\n", + " \"\"\"Plot the results.\n", + " \n", + " results: DataFrame with velocity, v\n", + " \"\"\"\n", + " newfig()\n", + " plot(results.v, label='v')\n", + " \n", + " decorate(xlabel='Time (s)',\n", + " ylabel='Velocity (m/2)')" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZkAAAEVCAYAAAAy15htAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XucXHV9//HXzOz9vtlcNiEJhNuH\nS0RuCqgIBQQBL71AU6W2YFul1qJWpUqRi/ZXQaml2v5Kf8V6K4iKVESDGEARuYtELkk+3BJyIffd\nzWbvt/n9cWY3s5PdnZnNzJ6dmffz8Vh25syZmU+Wfcx7v+d7i8TjcURERPIhGnYBIiJSvBQyIiKS\nNwoZERHJG4WMiIjkjUJGRETyRiEjIiJ5UxZ2AflgZscAXwNOAzqAW4Hr3X04zfMqgTcBW4EpzxUR\nkTExYCHwlLv3Jz9QdCFjZs3A/cAa4L3AYcA/E7Tark7z9DcBD+e1QBGR4nU68OvkA0UXMsDlQDXw\nh+7eCawyswbgOjP7UuLYZLYC3HbbbbS2ts5AqSIihW/btm1ccsklkPgMTVaMIXM+cF9KmNwB3Aic\nAdwzxXOHAVpbW1m8eHH+KhQRKU77dTMUY8f/UcC65APuvhHoSTyWlXg8zoO/2cjt963j9Z1dOSpR\nRKQ0FGPINBN09qdqTzyWlY6uftasb6Ots48n12w74OJEREpJMYZMTkUjkbHbHXv7pzhTRERSFWPI\ntAONExxvTjyWlbqaCiKJoOnqHWR4eOTAqhMRKSHFGDLrSOl7MbMlQA0pfTWZiEUj1FWXj93v7Bk4\n0PpEREpGMYbMvcB5ZlafdGwF0As8NJ0XbKitGLu9t1shIyKSqWIcwnwLcAVwl5ndCBwKXAd8Jc0c\nmUnV1+wLmU6FjIhIxoquJePu7cDZBMsc3ANcD/wLcO10X7OhLqklo8tlIiIZK8aWDO6+BjgrV6/X\nMK4lM5irlxURKXpF15LJh/ra5JDRMGYRkUwpZDIwruO/Ry0ZEZFMKWQyUFtVPjYps6dvkMEhzZUR\nEcmEQiYD0WiEupp9c2XU+S8ikhmFTIYaaivHbmuujIhIZhQyGWqoTZr1r5AREcmIQiZDyS0ZLS0j\nIoXqrrvuYvny5XR2jp+b/tJLL2FmPProozl9P4VMhupr1JIRkcJ3zjnnALBq1apxx1euXMncuXM5\n5ZRTcvp+RTkZMx/UJyMiE3nGd/Dkmm2hjDotL4vy5mNaOcHmZ/ychoYGTj/9dFauXMkf/dEfjR1f\nuXIl5513HrFYLKc1qiWTofETMhUyIhJY/eLO0KY1DA6NsPrFnVk/74ILLuDxxx+nvT3Y/WTt2rVs\n2LCBCy64INclKmQyVVtVRiwazJXpGxhiYHC/raxFpAQdf+Q8ysvC+SgtL4ty/JHzsn7eWWedRVlZ\nGT//+c+BoBXT2trKSSedlOsSdbksU5FIhPqaCjq6gmVl9vYM0NJYHXJVIhK2E2x+VperZoPa2lrO\nOOMMVq5cyYoVK7j33nt55zvfObZBYy6pJZOFBl0yE5EiceGFF/LUU0/x4IMPsmnTJi688MK8vI9C\nJgv1tVryX0SKwxlnnEFVVRXXXHMNixcv5rjjjsvL+yhksqCWjIgUi6qqKs466yx27tyZlw7/UeqT\nyULyDpkaxiwihe6mm27ipptuyut7qCWTBbVkRESyo5DJgkJGRCQ7CpksVFeWUR4LfmT9g8P0DQyF\nXJGIyOymkMlCJBLRzH8RkSwoZLLUqJAREcmYQiZLasmIiGROIZMldf6LiGROIZOlxrqkzcu6+0Os\nRERk9lPIZCl5QqZaMiIiU1PIZCn5ctne7gHi8XiI1YiIzG4KmSxVlMeorgxW4xkeidPdOxhyRSIi\ns5dCZhrU+S8ikhmFzDSMCxkt+S8iMimFzDSMC5kuhYyIyGQUMtPQUKthzCIimVDITIP6ZEREMqOQ\nmQaFjIhIZhQy01BXU0EkEgGgu2+IoeGRkCsSEZmdFDLTEItGqK8pByAej7NXI8xERCakkJkmLS8j\nIpKeQmaaGusUMiIi6Shkpmn8MGaFjIjIRBQy0zTaJwMKGRGRyShkpmncvjJdmpApIjIRhcw0af0y\nEZH0FDLTVF1ZRlks+PH1DwzTNzAUckUiIrNPWTYnm9mhwDHAXCAO7ALWuvureahtVotEIjTUVtDW\n2QcEC2VWzcnqxykiUvTSfiqa2anApcB7gflAJOWUuJntAO4GvuXuj+W6yNmqMTlkugeYP6cm5IpE\nRGaXSUPGzM4GPg+cBqwFvg88DbwKtBOETTOwDDgJOAf4kJk9Dlzt7g/mt/TwNSR1/neo819EZD9T\ntWTuBv4b+JC7vzDFeQ8D3wYws+XAhxLPrc9Vkdkws18CZ0zwULW79+XyvZrqtOS/iMhUpgqZpe7e\nls2LufvzwBVmdt0BVXXgfgFclXIs5ynQkDTrf482LxMR2c+kIZNtwOTquTnS5u6P5/tNGpNm/e/R\n5TIRkf1oCPMBqK8pJ5pY8r+rd1BL/ouIpMhkdNkc4HLgaIIhy9+bqJVgZmcBn3H3c3NeZfbONbOe\nxO2HgU+7+7O5fpNYLEpdTfnYsjKd3QPMaajK9duIiBSsKVsyZjYfWA38I/Au4G+AR8zsG2aW+mm6\nEDg7L1Vm5yHgY8B5BIMQlgIPm9kh+Xiz5OVldMlMRGS8dC2ZzwNNwNnu/gszqwc+CfwDcJSZvcvd\nd+ezQDNrJAiwKbn7usT3a5MOP2xm9wPrgI8nvnKqsbaCTYnbChkRkfHS9cmcA3zN3X8B4O573f06\nglbCkcCvzWxpfkvkYoJ5Oum+JuTu24BHgBPzUVzDuJaMRpiJiCRL15JZCLycetDdHzSztwP3AY+a\n2fn5KC7xXrcCtx7gy8QTXzmXPFdmj+bKiIiMk64lswU4YqIHEhM03wp0A78C3p7b0nLDzFqBtxGs\nVpBz43bIVEtGRGScdC2ZRwguV6VObATA3V8zs7cCPwP+ijy1FjJlZscBXwR+ALxG0On/WWAEuDkf\n7zluyf/uAUZG4kSjqcu7iYiUpnQtmduBLjN722QnuPsu4ExgJfB67kqblt0Ea6p9keBS3leAF4C3\nuPvGfLxheVmM2qpgl8yReJy92ltGRGTMlC0Zd18FnJDuRdy9i2CIc6jcfQtwwUy/b2NdJd19g0DQ\nmkke1iwiUsrSzZN5xMyuMrPjZ6qgQpTcL6PVmEVE9knXJ/M88GHgH81sK0Hfy0+BVe6+N9/FFYrk\nlos6/0VE9kl3uezDAGb2BoLLUOcDdxBsVPYoQT/MyjRbARS95M5/tWRERPbJaL9gd38OeA640cwa\nCCZjng98ArjBzDYB9xK0ch5w99481TsrjW/JKGREREZlvSm9u3cSDBH+AYCZncS+Vs5fAYNmdoW7\n/1cuC53Nkvtk9nQPEI/HiUQ0jFlEJOuQSeXuTxNMdPyCmbUQtHLC3k9mRlVVlFFZEaN/YJih4RG6\n+4aoqy4PuywRkdAdcMgkSyyWeXsuX7NQNNVVsr0t2F2gs6tfISMiQpYhY2YrgEuBZUAzwcTHZHF3\nX5Cb0gpLQ+2+kNnTNcCieSEXJCIyC2QcMmZ2A/BpYBvB5bE9+SqqEDWNmyvTF2IlIiKzRzYtmQ8R\njB77A3cfzlM9Baupft8Is469GmEmIgLp1y5L9VMFzMSa6vdtFKqQEREJZBMyPyJYCFMmMK4l09XP\nyEioC1KLiMwK2VwuuwK4y8xuBf4b2ATs16px97BXYg5FZXmMmqpyevoGGR4JVmPWQpkiUuqyCZlB\ngm2OPwpcNsV5sQOqqIA11VXSk1iNuaOrXyEjIiUvm5D5T+ADwP3AE2h02X6a6it5fVcXEPTLHNwa\nckEiIiHLJmT+APgvd788X8UUOo0wExEZL5uO/x7g2XwVUgyaUzr/RURKXTYh8w3gj80s22HPJUMt\nGRGR8bK5XPYEwUrLj5vZN5l8dNnK3JRWeBpqKohGIozEg9Flg0MjlJcpk0WkdGUTMv+bdPvklMfi\nBOuYxSnh0WWxWJSG2oqxS2V7uvqZ21QdclUiIuHJJmTekbcqikhTfeVYyHTsVciISGnLOGTc/YF8\nFlIsmuorYWtwW53/IlLq1GGQY011yZ3/Wo1ZRErbpCFjZneZ2ZuyfUEzO8XM7jqwsgpXc8O+hTLb\nNcJMRErcVJfLOoBHzex54HvAA8Cz7j7uk9PMqoDjgXOAi4GjgW/np9zZL3kpmY6ufuLxOJFI6t5u\nIiKlYdKQcfcPJjYq+zhwJfB/gGEz2wa0E4wmawYWEIwo2wN8F7jI3V/Kd+GzVW1VGeVlUQaHRugf\nGKa3f4iaKm3FLCKlacqOf3d/EfiImX0cOAM4DTgKaEmc8jywDngM+FVqK6cURSIRmuur2NEebMXc\n0dWvkBGRkpXR6DJ3HwBWJb4kjca6yn0hs7efRXPrQq5IRCQcGl2WB80NWl5GRAQUMnmRPIy5vVPD\nmEWkdClk8mBO0jDm3QoZESlhCpk8aK6vJJoYtry3Z5DBoZGQKxIRCYdCJg9isSgNdRUAxONxXTIT\nkZKlkMmTlqRLZm1aXkZESlTGIWNmr5nZF81seT4LKhbJ/TJtexQyIlKasmnJPA5cAfzOzFab2afM\n7KA81VXw5jQmhYwul4lIico4ZNx9BcESMh8EtgNfBF4zswfM7DIzq89TjQVpXEtGISMiJSqrPhl3\n73L3b7n7ecBi4FNAPfB1YLuZfc/M3m1m2WyGVpSa6vaNMOvsHmBwaL+dqkVEit60O/7dfbu73wz8\nOXAnUEWwCvPdwOtmdl1iheaSFItFgw3MEto6NfNfRErPtFocib6Y9wHvB95IsALzfxEs8T8IfAj4\nB4LFNP8kJ5UWoOaGqrFLZW17+lgwpybkikREZlbGIWNmTQQtlfcDpwPDwM+AfwJ+nFhEc9STZvYq\ncFUOay04LQ1VvJK4rX4ZESlF2bRktgPlwG8I9pi5w913TXH+cwT7zpSs8cvL9IZYiYhIOLIJmS8D\n33F3z+Rkd78HuGdaVRWJccOYNVdGREpQNh3/PQQ7YE7IzI42s5K+PJaqsa6SaDQYYdbVO8jAoEaY\niUhpySZkvgAcP8XjxyXOkYRYNEJzXfIIM7VmRKS0ZHO5LJLm8WZgIM05B8TMVgArCLaBbgUuc/dv\nTnDeQcC/AecA/cAdwJXu3pPP+iYyp7FqbLn/ts4+WltqZ7oEEZHQTBkyZvY24O1Jh95rZodMcGoT\nwZDm53JX2oQuAg4BfgL85UQnmFk5cB9B4P1JoravJL7/aZ7r20+zZv6LSAlL15I5G7g2cTtOMIT5\n4knOXQP8bY7qmswKdx8xszomCRmCIDoaONzd1wOY2SBwh5ld7+4v5bnGcbRQpoiUsnQh8yWCy04R\nYAdwOfDDlHPiQI+75/0T1N0z2f3rfOCp0YBJ+BFBy+adwIyGTEvSCLPdChkRKTFThoy79wK9AGZ2\nBLDN3btnorADcBRBq2qMuw+Y2SuJx2ZUY20l5bEog8MjdPcN0tM3SE1V+UyXISISiow7/t39lfRn\nzQrNQMcEx9sTj82oaDRCS1M123YH2byzvZeDFypkRKQ0TBoyZvYSMAIc6+5DifvxNK8Xd3fL9M3N\nrBFYmO48d1+X6WvORvOSQ6ajl4MXNoRckYjIzJiqJfMEQajEU+7n0sUEC2umk274dLJ2oHGC483A\n77J4nZyZ21Q9dntnh5aXEZHSMWnIuPufTnU/F9z9VuDWHL/sOlL6XsysAjgUuCXH75WReUkhs0sh\nIyIlZNr7ycxi9wJvMrODk469B6gkWDV6xrU0Vo1tYLanq59+LS8jIiUim6X+rwQudPczJnn8lwRL\n/n8lR7VN9B7HAMcQbJAGcLKZdQE73f2hxLE7CfayucvMPkdw6exfgNtneo7MqFgsypzGqrFWzO6O\nXhbNqwujFBGRGZVNS+bPgKemePxJ4NIDqia9PwZ+AHwncf9vEvevHz3B3QcJ5sNsAr5PMM/nhwQb\nqYUm+ZLZznZdMhOR0pDN2mXLgKmW+X8J+MiBlTM1d78OuC6D8zYDv5/PWrI1vvN/xpdQExEJRTYt\nmV7goCkeX0KeF8gsZONaMh2a+S8ipSGbkHkI+LCZLUh9wMwWElyO+lWuCis2yS2Z9s4+hoYzWSFH\nRKSwZXO57BrgceAFM/tP4IXE8eUEAVOZOEcmUFEeo6muko6ufkbicdr29DF/Tk3YZYmI5FXGLRl3\nfwE4g6Dv5bPA/yS+PgO8CJzp7s/mo8hioUmZIlJqsmnJ4O6/BU4zs1aCyY0Ar7r7tpxXVoTmNlXz\n8uZgWTWFjIiUgqxCZlQiVBQsWZrXnDyMWSPMRKT4ZRUyZtYMXAlcCIzOqH+NYKfKL7t7e27LKy7J\nI8x27+ljZCRONJrNsmwiIoUl4z4ZM1tKsMDk3wN9wN2Jr16CfpnViXNkEjVV5dRVB8v8Dw2PaDtm\nESl62bRkvgQ0AKe7+yPJD5jZW4CfAjcC78tdecVnQUstXYl+mW27u8cNBhARKTbZzJN5B3BzasAA\nuPujwFeBc3NVWLFqTRq2PLrHjIhIscomZKqYeMfJUR3sW7hSJrFwbu3Y7W271fkvIsUtm5D5HfBB\nM9tv+WAzqwUuA1bnqrBiNa+pmliis7+jq5+evsGQKxIRyZ9s+mSuBVYCa8zsVoIJmAAGfJBgG+UL\nclte8YnFosxrrhm7VLa9rYdliybayFNEpPBlM+N/FfAuYA/BSsi3J76uTRx7l7vfn4cai05rS3K/\njC6ZiUjxynbG/33AfWa2mKR5Moml9SVDrS21wE5Anf8iUtymO+N/M6BgmaYgZAI72no0KVNEitak\nIWNm75/OC7r77dMvpzTUVQeTMrt6BxkcHmHXnl7mN2tFZhEpPlO1ZP5nGq8XJ+inkTQWzq3lpU3B\niPDtu3sUMiJSlKYKmSNmrIoS1DpnX8hs293NGw6fG3JFIiK5N2nIuPsrM1lIqWlNmpS5VZ3/IlKk\nsu74N7PDCDYvmwd81903mlkF0Apsc/eBHNdYlOY2VlEWizI0PEJn9wA9fYPUVJWHXZaISE5lswpz\nNLHtsgO3Av8EHJ54uAJ4Frgi5xUWqVgsOm7p/9d3qTUjIsUnm2Vlrgb+ArgGOA0YG3Pr7l3AncAf\n5LS6InfQ/H0r9Gze0RViJSIi+ZFNyFwGfN3d/wl4eYLHn0eDBbKyZEH92O3N2/eGWImISH5kEzIL\ngaemeLwfqJ/icUnROqeGsljwv6Cjq5/ObnVniUhxySZkXmdfH8xETgVePbBySkssFmVR0iizzTvU\nmhGR4pJNyNwBXG5mJyQdi8PY6gDvB27LYW0lYXHyJTP1y4hIkclmCPMXCDr8HyfYWyYO3GBmzcBh\nwIMEWzRLFpbM3xcym7bvJR6PE4loHTMRKQ7ZLPXfC5wNXA7sIOj8n0NwiezDwHnuPpSPIovZ3KYq\nqiqCrO/tH6Ktsy/kikREcmfKloyZVSRPrnT3EeAbiS/JgUgkwpIFdWNLzGzavpeWxuo0zxIRKQzp\nWjLbzezrZnaWmekaTp4sHnfJTP0yIlI80oXMk8CfAauAzWb2z2Z2cv7LKi2LkyZlvr6ri+GReIjV\niIjkzpQh4+7nAYsIlotZD3wceMLM3MyuMbOphjRLhhrrKmmorQBgcGiE7W1aYkZEikPajn933+nu\n/+7ubwOWAVcBPcB1gJvZk2Z2hZktyG+pxS159v/GbZovIyLFIZt5Mrj7Rne/0d1PAI4lWCSzCbiZ\n4HLaz/NQY0lYmhQy67fsCbESEZHcySpkkrn7Wnf/HHA+8GMgRjDEWaZhaWv92BIzuzv7aN+rocwi\nUviy3k8GIHFpbAXBLP83EazI/Ds043/aystiLG2t59VEK2b9lk6aj6oKuSoRkQOTcciYWSNwEfA+\ngk3LYgSDAb4I3Obua/NSYQk59KDGsZB5ZUsHJx41P+SKREQOTLrJmNXAewiC5TygEtgJ3ALc7u6P\n5b3CEnJIawPRSISReJztbT109Q5SV63dMkWkcKVryewEqoFugk3JbgNWuftwvgsrRVWVZRw0v45N\nib1l1m/ZwxsOnxtyVSIi05cuZB4EbgfuTqxdJnl26KLGsZB5RSEjIgVuypBx9/fMVCESWHZQIw89\nsxmA13d20dc/RFXltMZniIiEbtpDmCU/6qrLaW0JNjIbicdZ/3pnyBWJiEyfQmYWOnRR49jtlzd3\nhFiJiMiBUcjMQoct3hcyG7fvpat3MMRqRESmr6Au9pvZCoJJoKcBrcBl7v7NlHPOBH4xwdNvdPfP\n5LvGXGisq+SgeXVs2dlFPB5n3YY2Tj5aS8OJSOEptJbMRcAhwE8yOPcSgjAa/fr3/JWVe8csmzN2\ne92GNuJxLf8vIoWnoFoywAp3HzGzOuAv05z7rLs/PxNF5cNhi5v41TNb6B8cpqOrn9d3dXPQvLr0\nTxQRmUUKqiWT2P65JJTFohyxtHns/tr1u0OsRkRkegoqZLL0oJkNm9kGM7vazGJhF5StYw7Zd8ns\n5c176BsYCrEaEZHsFWPI7AFuAC4lWG/tR8D1wFdCrGla5jVXM7epGoCh4RFe2qThzCJSWELtk0ms\n7Lww3Xnuvi7T13T3Z4Bnkg7db2b9wN+Z2RfcfVf2lYYjEolwzLI5/OqZLQCseXU3yw9tIRKJhFyZ\niEhmwm7JXAyszeDrQN1JEKjH5eC1ZtSRS5qJRYNQ2dnRy+YdXSFXJCKSuVBbMu5+K3DrDLxVPOV7\nwaiqLOPoQ+bw/KtBx//T63awJGmrZhGR2SzslsxMuQgYAp4Nu5DpOMHmj10i27xjL9vbekKuSEQk\nMwU1T8bMjgGOAUb3JT7ZzLqAne7+UOKc/yDYB+cpYAC4APgocLO7F+Q44Ma6So5c0oRvbAfgt+u2\nc/5bloVclYhIeoXWkvlj4AfAdxL3/yZx//qkc9YCv0+wD86PgXOATwKfmrkycy95K+ZXtuyhrbMv\nxGpERDJTUC0Zd78OuC7NOV8FvjoT9cyklsZqli1qZP3re4CgNXPOmw8OuSoRkakVWkumpJ2U1Jp5\ncWMH7XvVmhGR2U0hU0BaW2pZPD8YWTYSj/Pw6i1aOFNEZjWFTIF563GLxkaabdy2lw1btXOmiMxe\nCpkCM6+5mmOTtgF4ePUWhoZLZt1QESkwCpkCdOryhVRWBOt9dnYPsPrFnSFXJCIyMYVMAaqqLOPU\nY/ct+fb02u10dg+EWJGIyMQUMgXq2ENbxlZoHhweYdUTrzEyokEAIjK7KGQKVDQa4cwTFxNNDALY\nurubp9ZsC7kqEZHxFDIFrLWlljcf2zp2/zfrdrB5x94QKxIRGU8hU+BOtPksnl8HQDwe5/4nN9LT\nNxhyVSIiAYVMgYtGI5zz5oOprgxWCOrqHWTloxsYHBoOuTIREYVMUairLuecNy0du79tdzc/e+w1\nhjUQQERCppApEgcvbOD04w8au//atk4efGqjlp0RkVApZIrIG4+Yx8lHLxi77xvb+eVvN2tos4iE\nRiFTZE45tpXlh7aM3X/h1d389JH16qMRkVAoZIpMJBLh7ScsxpY2jx17bVsnd/3iZbp6NepMRGaW\nQqYIBSPOlo67dLazo5fvrfKxTc9ERGaCQqZIRSIRTl2+kN87acnYqgC9/UP89JH1PPibjQwM6vKZ\niORfQW2/LNk79tAWGmoruP/JjXQnJmmuWd/Gxm17OfUNCzlySTPRaCTkKkWkWKklUwKWLKjnfeca\nRyxpGjvW1TvI/U9u5PsPvMhrWzs11FlE8kItmRJRVVnGeacewrJF7Ty8egu9/UMA7Oro5Z5fv0pL\nQxVvOHwudnAz5WWxkKsVkWKhkCkxRy5t5pCFDax+cSfP+A4GE7tq7u7s45e/3cxjz2/lsIMaOXxx\nE4vn1+tSmogcEIVMCaooj/HmY1tZflgLv1m7nbUb2hgcCsKmf2CYNevbWLO+jerKMpYuqGfx/HqW\nLKijrqYi5MpFpNAoZEpYTVU5bz9hMacsX8i69W0898ouOrr6xx7v7R/CN7bjG9sBaKitYMGcGuY3\n1zC3qZqWxiqqK8uIRNTaEZGJKWSEyvIYbzxyHscdMZftbT28tKmDVzZ37Dd5s7N7gM7uAV7a1DF2\nrKqijOb6ShpqK6ivraChtoLa6nJqq8qprS6nqiKmEBIpYQoZGROJRGhtqaW1pZa3vXERO9t72byj\ni0079rJ1VzdDif6bZH0DQ2zdPcTW3d2TvmZVRYzqyjIqy2NUVsSoLI9RXh6jvCxKRVmU8rIoZbEo\nZWVRyqJRYrEIZbEosWiEaDRCLBolGg0mmUYjkbHjkUiESASikeB2NMLYMQWbyOygkJEJRSIR5s+p\nYf6cGk48aj7DwyPs7uxjR1sP29t6aOvso62zb6wvZzLxeJze/qGx0WwzKRKJEIFxoRNJ/Cf1fvAt\nkvTcyV9z7Pa447mqWmT2aqyr5IwTFzOnoSrj5yhkJCOxWJT5zUF/zPLDgmPxeJyu3kE69vaztye4\nlLa3e4DuviF6+gbp7h2kP8SVBeLxOHEg6T8icgC6egd57uVdnHHi4oyfo5CRaYtEItTXVFA/xaiz\n4eER+gaG6RsYon9gmP7B4GtwcISBoWEGh0YYHBphaHiEodHvw3GGR+IMD48wEg9uj4x+xYPvwyNx\n4vEgSEbiwe3R75pYKpIfFeUxDlnUkNVzFDKSV7FYlNrqKLXV5TP6vvHRwAnuMJLUmhk9PhZGSZk0\n7viEr7vfU6YqItuy93+JA34FkdypqiijvCy7hWIUMlKURgcAJO6hNQxEwqGQGS8GsG3btrDrEBEp\nGEmfmfv9PaeQGW8hwCWXXBJ2HSIihWgh8EryAYXMeE8BpwNbAW24IiKSmRhBwDyV+kBEI3FERCRf\ntJ+MiIjkjUJGRETyRiEjIiJ5o5AREZG80eiyNMzsGOBrwGlAB3ArcL27l/ToMzO7FPjGBA/9tbvf\nMsPlhM7MDgc+TfB7cizwsLufmXJOBPgs8NfAXIKROFe4++qZrXbmZfjz2QAcnPLU7e7eOgMlhsbM\nLgY+AJwENAIO3OTu300576+AK4ElwAvAle7+wAyXmzW1ZKZgZs3A/QSre7wX+DzwSeD6MOuaZc4i\n+OAY/bor3HJCcyxwAcEHxIsKi6Q1AAAHqElEQVSTnPMZ4HPAjcC7gS7gfjMr6g/RhEx+PgC3M/73\n6YL8lxa6vyP4XfgE8B7gF8DtZva3oyeY2fuAW4BvA+cThMxPzGz5zJebHbVkpnY5UA38obt3AqvM\nrAG4zsy+lDhW6p5y966wi5gF7nH3uwHM7E6ClsoYM6siCJkvuvu/JY49BmwAPgpcPaPVzrwpfz5J\ntrr74zNX1qzwbnfflXT/QTNbRBA+X0scuw74lrt/AcDMHgJOIPid+tMZrDVraslM7XzgvpQwuYMg\neM4IpySZjdx96o114C1AA/D9pOd0A/cQ/J4VtQx+PiUrJWBGPQMsAjCzQ4EjGf+7MwL8gAL43VHI\nTO0oYF3yAXffCPQkHhN4xcyGzMzN7MNhFzOLHUWwisRLKcfXot+lZH9hZgNmtsfM7jSz1D6aUnEa\n+y4rjv5+rEs5Zy0wx8zmzVhV06CQmVozQWd/qvbEY6VsK0H/wgcI+hceB24xs0+EWtXs1Qx0TTBg\npB2oMbPJN+UpHXcDHwHOZt8ggYfNrDHUqmaYmZ0N/D7wz4lDo581qZ9F7SmPz0rqk5Fpcff7gPuS\nDt2b6He42sz+VZdHJFvu/rGkuw+b2aPAauAy4OZwqppZZnYIweCHu939m+FWkxtqyUytnWBIYapm\n9v0VIfvcCcwBDgm5jtmoHagzs9Sl0JuBHncfCKGmWc3dnycYjXZi2LXMBDObA9wLvAYkLwU/+lmT\n+lnUnPL4rKSQmdo6Uq6Xm9kSoIb9r4/Kvo0cterq/tYRrFR7eMrx/fr9ZJw4JfD7ZGY1wE+ACuBd\n7t6T9PDo70dq391RQJu775yBEqdNITO1e4HzzKw+6dgKoBd4KJySZrWLgF0Ef4nJeI8CncDFowcS\nHyzvJvg9kxSJOSBHAU+HXUs+mVkZwUixI4B3uvuO5Mfd/VWCQQDJvzvRxP1Z/7ujPpmp3QJcAdxl\nZjcChxKMV/9Kqc+RMbMfAk8CzxL8hb4i8XVFKfbHJAJjdOLgQUCDmV2UuL/S3XvM7Abgc2bWTvDX\n6d8R/KH3tf1esMik+/kAv0cw3+MnwOsE4XI1sBH45owWO/P+L8HP5mNAi5m1JD32jLv3E3zu/E9i\nVYRHgD8nCKX3z2il06CQmYK7tydGevwbwXyGDuBfCP6HlzoHPkiwxEUEWAP8mbt/J9SqwjOf4K/R\nZKP3lxFMuryBIFQ+C7QAvwHe4e7bZ6jGMKX7+WxKnHMz0ATsBn4GXFUCf9Cdm/j+rxM8tgzY4O7f\nNbM64O8JRnW+QHBZ7fkZqnHatGmZiIjkjfpkREQkbxQyIiKSNwoZERHJG4WMiIjkjUJGRETyRiEj\nIiJ5o5ARySEzu9TM4omFDmcNM3u/me0ws+osnvMOM9trZpNtMCaSliZjiqRhZplOJluW10KmKbFs\nyXXAV929N9PnufsqM3uJYALgp/NUnhQ5hYxIeh9Iuf9x4GCCPdmT7QS+Q7B7av8M1JWp9wCHAbdO\n47n/D/iymV2X2MlTJCua8S+SJTP7EXC8ux8Sdi2ZMLN7gDp3/71pPHc+wVpiH3T3b+e8OCl6asmI\n5JCZXQp8A1jm7hsSxzYQbL7178CNwNEEW+de7u5PmtmfA/8ALAWeAC519/Upr/sW4HrgFIIFSR8D\n/t7dp1yhOLGR3LnA5yd47B3AtcBygs+CLcAP3f2q0XPcfYeZPQu8F1DISNbU8S8yM44i+JD+EUGg\nLAZ+YmZ/AVwF/CdBAJ1CymUtMzsH+CVQCVxDsEDiYuBXZnZMmvc9iWCPkt+mvOaxBCseDyTq+VTi\n/tsmeI2ngbdm9s8UGU8tGZGZYcAp7v4kgJltBr4HfBk4wt13J46XA581syXuvimxb8h/APe5+7vH\nXszs6wTbBVwD/MkU7zu60dX6lOPvAPoIVoEeTlP7q8ACM5vj7m0Z/FtFxihkRGbGs6MBk/BE4vuP\nRwMm5fjo8vdvJNhN89oJhhI/DJyZ5n1H9yZJ3aK3A6gF3gn8NM1rjD53LqCQkawoZERmxsaU+3sS\n3zdNcnx0//YjEt9vm+R1M90gLpJy/3vAXxJcstsK3A/8L/Ajd08dDTT6XI0SkqwpZERmxmSXpCY7\nPvrBPtpv+glgOhtUjbaSmoFtowfdvdfM3k6wI+UFBC2aDwCrzOz8lEtoo4G3axrvLyVOISMyu72S\n+N7h7vdP4/nrEt+XEYxoG5PYJvuBxNcnzexKgsEHZyaOkfTc7e6eeslNJC2NLhOZ3X5L0PH+KTOr\nSX3QzOalef7TBCPITk55XssE565OfK9KOX4S8GhG1YqkUEtGZBZz92Ez+xBB5/xzZvYtYCvBEOZz\ngZfZf0WC5Of3mdnPgXMYP1fmc4nLZSuBDcA84CPAZuDXoyclJmMex8T7z4ukpZaMyCzn7g8AbwGe\nAz4GfI0gWF4BbsngJb4BvNXMFiYd+zHBYITLCCaJfpRgtNpZ7r4n6bw/JBjq/MMD/GdIidKyMiJF\nLrFA5hrgO+7+hSyf+zTwS3f/ZF6Kk6KnloxIkXP3IYJVmP8226X+CSaR3pCn0qQEqCUjIiJ5o5aM\niIjkjUJGRETyRiEjIiJ5o5AREZG8UciIiEjeKGRERCRvFDIiIpI3ChkREcmb/w8xpw4zoUCzzgAA\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_velocity(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "From an initial velocity of 0, the penny accelerates downward until it reaches terminal velocity; after that, velocity is constant." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Run the simulation with an initial velocity, downward, that exceeds the penny's terminal velocity. Hint: use `condition.set`.\n", + "\n", + "What do you expect to happen? Plot velocity and position as a function of time, and see if they are consistent with your prediction." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "condition.set(v_init = -30 * m / s)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "plot_position(system.results)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nIyIiRfV/+WxXFuSECzEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_velocity(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dropping quarters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we drop a quarter from the Empire State Building and find that its flight time is 19.1 seconds. We can use this measurement to estimate the coefficient of drag.\n", + "\n", + "Here's a `Condition` object with the relevant parameters from\n", + "https://en.wikipedia.org/wiki/Quarter_(United_States_coin)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(height = 381 * m,\n", + " v_init = 0 * m / s,\n", + " g = 9.8 * m/s**2,\n", + " mass = 5.67e-3 * kg,\n", + " diameter = 24.26e-3 * m,\n", + " rho = 1.2 * kg/m**3,\n", + " duration = 19.1 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's a modified version of `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Makes a System object for the given conditions.\n", + " \n", + " condition: Condition with height, v_init, g, mass, diameter, \n", + " rho, C_d, and duration\n", + " \n", + " returns: System with init, g, mass, rho, C_d, area, and ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(y=height, v=v_init)\n", + " area = np.pi * (diameter/2)**2\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, g=g, mass=mass, rho=rho,\n", + " C_d=C_d, area=area, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can run the simulation with an initial guess of `C_d=0.4`." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(C_d=0.4)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "plot_position(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final height is -11 meters, which means our guess was too low (we need more drag to slow the quarter down)." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`height_func` takes a hypothetical value of `C_d` and returns the height after 19.1 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def height_func(C_d, condition):\n", + " \"\"\"Final height as a function of C_d.\n", + " \n", + " C_d: drag coefficient\n", + " condition: Condition object\n", + " \n", + " returns: height in m\n", + " \"\"\"\n", + " condition.set(C_d=C_d)\n", + " system = make_system(condition)\n", + " run_odeint(system, slope_func)\n", + " y, v = final_state(system.results)\n", + " return y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we run it with `C_d=0.4`, we get -11 meters again." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "height_func(0.4, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `fsolve` to find the value of `C_d` that makes the final height 0." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "solution = fsolve(height_func, 0.4, condition)\n", + "solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plugging in the estimated value, we can run the simulation again to get terminal velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(C_d=solution)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, the terminal velocity of the quarter is higher than that of the penny, but we should not take this result seriously because the measurements we used are not real; I made them up." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python3.6", + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap09mine.org b/code/chap09mine.org new file mode 100644 index 00000000..e4c77bc5 --- /dev/null +++ b/code/chap09mine.org @@ -0,0 +1,37 @@ +#+title: Chapter 9 Notebook + +* Exercise 1 +#+BEGIN_SRC python :results output + import pint + import numpy as np + import pandas as pd + from modsim import run_odeint, linspace, unpack + + ureg = pint.UnitRegistry() + m = ureg.meter + s = ureg.second + kg = ureg.kilogram + + init = pd.Series({'y': 381 * m, 'v': 0 * m / s}) + + g = 9.8 * m / s ** 2 + duration = 10 * s + ts = linspace(0, duration, 11) + system = pd.Series({'init': init, 'g': g, 'ts': ts}) + + + def slope_func(state, t, system): + y, v = state + dydt = v + dvdt = -g + return dydt, dvdt + + + dydt, dvdt = slope_func(init, 0, system) + + run_odeint(system, slope_func) + + print(system.results.head()) +#+END_SRC + +#+RESULTS: diff --git a/code/chap10-fig01.pdf b/code/chap10-fig01.pdf new file mode 100644 index 00000000..dc811a50 Binary files /dev/null and b/code/chap10-fig01.pdf differ diff --git a/code/chap10-fig02.pdf b/code/chap10-fig02.pdf new file mode 100644 index 00000000..23b3d5ac Binary files /dev/null and b/code/chap10-fig02.pdf differ diff --git a/code/chap10-fig03.pdf b/code/chap10-fig03.pdf new file mode 100644 index 00000000..bff4c433 Binary files /dev/null and b/code/chap10-fig03.pdf differ diff --git a/code/chap10mine.ipynb b/code/chap10mine.ipynb new file mode 100644 index 00000000..f344bcec --- /dev/null +++ b/code/chap10mine.ipynb @@ -0,0 +1,6906 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 10: Vectors\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# tempo switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib notebook\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Vectors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `Vector` object is like a combination of a NumPy array and a Pint Quantity.\n", + "\n", + "I'll start by grabbing the units we'll need." + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m = UNITS.meter\n", + "s = UNITS.second\n", + "kg = UNITS.kilogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a two dimensional `Vector` in meters." + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "A = Vector(3, 4) * m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can access the elements by name." + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "3.0 meter" + ], + "text/latex": [ + "$3.0\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.x" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "4.0 meter" + ], + "text/latex": [ + "$4.0\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The magnitude is the length of the vector." + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "5.0 meter" + ], + "text/latex": [ + "$5.0\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.mag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The angle is the number of radians between the vector and the positive x axis." + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.9272952180016122 radian" + ], + "text/latex": [ + "$0.9272952180016122\\ \\mathrm{radian}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.angle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we make another `Vector` with the same units," + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "B = Vector(1, 2) * m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can add `Vector` objects like this" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}4.0 & 6.0\\end{pmatrix} meter\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}4.0 & 6.0\\end{pmatrix}\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A + B" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And substract like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}2.0 & 2.0\\end{pmatrix} meter\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}2.0 & 2.0\\end{pmatrix}\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A - B" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can compute the Euclidean distance between two Vectors." + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "2.8284271247461903 meter" + ], + "text/latex": [ + "$2.8284271247461903\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 191, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.dist(B)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the difference in angle" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.17985349979247822 radian" + ], + "text/latex": [ + "$-0.17985349979247822\\ \\mathrm{radian}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 192, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.diff_angle(B)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we are given the magnitude and angle of a vector, what we have is the representation of the vector in polar coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mag = A.mag\n", + "angle = A.angle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `pol2cart` to convert from polar to Cartesian coordinates, and then use the Cartesian coordinates to make a `Vector` object.\n", + "\n", + "In this example, the `Vector` we get should have the same components as `A`." + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}3.0000000000000004 & 3.9999999999999996\\end{pmatrix} meter\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}3.0000000000000004 & 3.9999999999999996\\end{pmatrix}\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x, y = pol2cart(angle, mag)\n", + "Vector(x, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Create a `Vector` named `a_grav` that represents acceleration due to gravity, with x component 0 and y component $-9.8$ meters / second$^2$." + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a_grav = Vector(0, -9.8) * m / s ** 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Degrees and radians\n", + "\n", + "Pint provides units to represent degree and radians." + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "degree = UNITS.degree\n", + "radian = UNITS.radian" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you have an angle in degrees," + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "45 degree" + ], + "text/latex": [ + "$45\\ \\mathrm{degree}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 197, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle = 45 * degree\n", + "angle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can convert to radians." + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483\\ \\mathrm{radian}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 198, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle_rad = angle.to(radian)\n", + "angle_rad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If it's already in radians, `to` does the right thing." + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483\\ \\mathrm{radian}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 199, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle_rad.to(radian)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also convert from radians to degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "45.0 degree" + ], + "text/latex": [ + "$45.0\\ \\mathrm{degree}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 200, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle_rad.to(degree)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an alterative, you can use `np.deg2rad`, which works with Pint quantities, but it also works with simple numbers and NumPy arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483\\ \\mathrm{radian}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 201, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.deg2rad(angle)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Create a `Vector` named `a_force` that represents acceleration due to a force of 0.5 Newton applied to an object with mass 0.3 kilograms, in a direction 45 degrees up from the positive x-axis.\n", + "\n", + "Add `a_force` to `a_drag` from the previous exercise. If that addition succeeds, that means that the units are compatible. Confirm that the total acceleration seems to make sense." + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a_force = Vector(2 ** 0.5 / 2, 2 ** 0.5 / 2) * 0.5 / 0.3 * m / s ** 2" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}1.1785113019775793 & -8.621488698022421\\end{pmatrix} meter/second2\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}1.1785113019775793 & -8.621488698022421\\end{pmatrix}\\ \\frac{\\mathrm{meter}}{\\mathrm{second}^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 203, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_force + a_grav" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Baseball" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a `Condition` object that contains the parameters for the Manny Ramirez problem." + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(x = 0 * m, \n", + " y = 1 * m,\n", + " g = 9.8 * m/s**2,\n", + " mass = 145e-3 * kg,\n", + " diameter = 73e-3 * m,\n", + " rho = 1.2 * kg/m**3,\n", + " C_d = 0.3,\n", + " angle = 45 * degree,\n", + " velocity = 40 * m / s,\n", + " duration = 5.1 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the function that uses the `Condition` object to make a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition object with angle, velocity, x, y,\n", + " diameter, duration, g, mass, rho, and C_d\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " # convert angle to degrees\n", + " theta = np.deg2rad(angle)\n", + " \n", + " # compute x and y components of velocity\n", + " vx, vy = pol2cart(theta, velocity)\n", + " \n", + " # make the initial state\n", + " init = State(x=x, y=y, vx=vx, vy=vy)\n", + " \n", + " # compute area from diameter\n", + " area = np.pi * (diameter/2)**2\n", + " \n", + " # compute timestamps\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, g=g, mass=mass, \n", + " area=area, rho=rho, C_d=C_d, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we use it:" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "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", + "
value
initx 0 meter\n", + "y ...
g9.8 meter / second ** 2
mass0.145 kilogram
area0.004185386812745002 meter ** 2
rho1.2 kilogram / meter ** 3
C_d0.3
ts[0.0 second, 0.051 second, 0.102 second, 0.153...
\n", + "
" + ], + "text/plain": [ + "init x 0 meter\n", + "y ...\n", + "g 9.8 meter / second ** 2\n", + "mass 0.145 kilogram\n", + "area 0.004185386812745002 meter ** 2\n", + "rho 1.2 kilogram / meter ** 3\n", + "C_d 0.3\n", + "ts [0.0 second, 0.051 second, 0.102 second, 0.153...\n", + "dtype: object" + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the slope function that computes acceleration due to gravity and drag." + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes derivatives of the state variables.\n", + " \n", + " state: State (x, y, x velocity, y velocity)\n", + " t: time\n", + " system: System object with g, rho, C_d, area, mass\n", + " \n", + " returns: sequence (vx, vy, ax, ay)\n", + " \"\"\"\n", + " x, y, vx, vy = state\n", + " unpack(system)\n", + " \n", + " a_grav = Vector(0, -g)\n", + "\n", + " v = Vector(vx, vy)\n", + " \n", + " f_drag = -rho * v.mag * v * C_d * area / 2\n", + " a_drag = f_drag / mass\n", + " \n", + " a = a_grav + a_drag\n", + " \n", + " return vx, vy, a.x, a.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Always test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " ,\n", + " )" + ] + }, + "execution_count": 208, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run `odeint`" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the first few time steps." + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "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", + "
xyvxvy
0.0000.0000001.00000028.28427128.284271
0.0511.4349292.42222927.98892427.491730
0.1022.8550173.80438927.70222626.712880
0.1534.2606975.14716527.42383625.947141
0.2045.6523846.45121127.15343325.193958
\n", + "
" + ], + "text/plain": [ + " x y vx vy\n", + "0.000 0.000000 1.000000 28.284271 28.284271\n", + "0.051 1.434929 2.422229 27.988924 27.491730\n", + "0.102 2.855017 3.804389 27.702226 26.712880\n", + "0.153 4.260697 5.147165 27.423836 25.947141\n", + "0.204 5.652384 6.451211 27.153433 25.193958" + ] + }, + "execution_count": 210, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the last few. The last value of `y` is negative, indicating that the ball hit the ground before the end of the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "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", + "
xyvxvy
4.896100.2747613.58038315.135822-21.336469
4.947101.0440112.48328115.030816-21.686507
4.998101.8079021.36842314.925643-22.032810
5.049102.5664240.23599814.820318-22.375365
5.100103.319572-0.91380014.714856-22.714157
\n", + "
" + ], + "text/plain": [ + " x y vx vy\n", + "4.896 100.274761 3.580383 15.135822 -21.336469\n", + "4.947 101.044011 2.483281 15.030816 -21.686507\n", + "4.998 101.807902 1.368423 14.925643 -22.032810\n", + "5.049 102.566424 0.235998 14.820318 -22.375365\n", + "5.100 103.319572 -0.913800 14.714856 -22.714157" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualizing the results\n", + "\n", + "We can extract the x and y components as `Series` objects." + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "xs = system.results.x\n", + "ys = system.results.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The simplest way to visualize the results is to plot x and y as functions of time." + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(vxs, label='vx')\n", + "plot(vys, label='vy')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Velocity (m/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another way to visualize the results is to plot y versus x. The result is the trajectory of the ball through its plane of motion." + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)',\n", + " xlim=[0, 105],\n", + " ylim=[-5, 35],\n", + " legend=False)\n", + "\n", + "for x, y in zip(xs, ys):\n", + " plot(x, y, 'bo', update=True)\n", + " sleep(0.01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a function that encapsulates that code and runs the animation in (approximately) real time." + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def animate2d(xs, ys, speedup=1):\n", + " \"\"\"Animate the results of a projectile simulation.\n", + " \n", + " xs: x position as a function of time\n", + " ys: y position as a function of time\n", + " \n", + " speedup: how much to divide `dt` by\n", + " \"\"\"\n", + " # get the time intervals between elements\n", + " ts = xs.index\n", + " dts = np.diff(ts)\n", + " dts = np.append(dts, 0)\n", + "\n", + " # decorate the plot\n", + " newfig()\n", + " decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)',\n", + " xlim=[xs.min(), xs.max()],\n", + " ylim=[ys.min(), ys.max()],\n", + " legend=False)\n", + "\n", + " # loop through the values\n", + " for x, y, dt in zip(xs, ys, dts):\n", + " plot(x, y, 'bo', update=True)\n", + " sleep(dt / speedup)" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap10-fig03.pdf\n" + ] + } + ], + "source": [ + "newfig()\n", + "plot(sweep)\n", + "decorate(xlabel='Launch angle (degree)',\n", + " ylabel='Range (m)',\n", + " legend=False)\n", + "\n", + "savefig('chap10-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `max_bounded` to search for the peak efficiently." + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45.0\n", + "34.3769410125\n", + "55.6230589875\n", + "21.246117975\n", + "41.8191039876\n", + "41.6971472537\n", + "41.6051027027\n", + "41.6031028628\n", + "41.6034368132\n", + "41.6027689123\n", + "CPU times: user 3.19 s, sys: 15.2 ms, total: 3.21 s\n", + "Wall time: 3.16 s\n" + ] + } + ], + "source": [ + "%time res = max_bounded(range_func, [0, 90], condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `OptimizeResult` object." + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "scipy.optimize.optimize.OptimizeResult" + ] + }, + "execution_count": 239, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(res)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the following variables." + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " fun: 109.69517452154646\n", + " message: 'Solution found.'\n", + " nfev: 9\n", + " status: 0\n", + " success: True\n", + " x: 41.60310286275633" + ] + }, + "execution_count": 240, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the optimal angle is about 41 degrees, and the resulting range is 103 meters." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add a print statement to `range_func` that prints `angle`. Then run `max_bounded` again so you can see how many times it calls `range_func` and what the arguments are." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It calls range 10 times with decreasing variance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Turning off units\n", + "\n", + "Each time `range_func` runs, it calls `odeint`, which runs `slope_func` many times. And each time `slop_func` runs, it checks the units for all computations, which takes some time. We can speed up the whole process by removing the units from the computation (now that we are satisfied that they are correct).\n", + "\n", + "Because of the way we organized the code, all units are in the `Condition` object, so we can \"turn off units\" by defining a new `Condition` object with no units:" + ] + }, + { + "cell_type": "code", + "execution_count": 241, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(g = 9.8,\n", + " mass = 145e-3,\n", + " diameter = 73e-3,\n", + " rho = 1.2,\n", + " C_d = 0.3,\n", + " angle = 45,\n", + " velocity = 40,\n", + " duration = 7)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now `range_func` and `max_bounded` are substantially faster." + ] + }, + { + "cell_type": "code", + "execution_count": 242, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45\n", + "CPU times: user 53.8 ms, sys: 78 µs, total: 53.9 ms\n", + "Wall time: 51.3 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "array(102.72237841710867)" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time range_func(45, condition)" + ] + }, + { + "cell_type": "code", + "execution_count": 243, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45.0\n", + "34.3769410125\n", + "55.6230589875\n", + "21.246117975\n", + "41.4051852323\n", + "41.2368620421\n", + "41.1390964625\n", + "41.1364127398\n", + "41.1367466832\n", + "41.1360787963\n", + "CPU times: user 477 ms, sys: 5.11 ms, total: 483 ms\n", + "Wall time: 473 ms\n" + ] + } + ], + "source": [ + "%time res = max_bounded(range_func, [0, 90], condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Manny Ramirez problem\n", + "\n", + "Finally, let's solve the Manny Ramirez problem:\n", + "\n", + "*What is the minimum effort required to hit a home run in Fenway Park?*\n", + "\n", + "Fenway Park is a baseball stadium in Boston, Massachusetts. One of its most famous features is the \"Green Monster\", which is a wall in left field that is unusually close to home plate, only 310 feet along the left field line. To compensate for the short distance, the wall is unusually high, at 37 feet.\n", + "\n", + "Although the problem asks for a minimum, it is not an optimization problem. Rather, we want to solve for the initial velocity that just barely gets the ball to the top of the wall, given that it launches at the optimal angle.\n", + "\n", + "And we have to be careful about what we mean by \"optimal\". For this problem, we don't want the longest range, we want the maximum height at the point where it reaches the wall.\n", + "\n", + "If you are ready to solve the problem on your own, go ahead. Otherwise I will walk you through the process with an outline and some starter code.\n", + "\n", + "As a first step, write a function called `height_func` that takes a launch angle and a condition as parameters, simulates the flights of a baseball, and returns the height of the baseball when it reaches a point 94.5 meters (310 feet) from home plate." + ] + }, + { + "cell_type": "code", + "execution_count": 251, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def height_func(angle, condition):\n", + " condition.set(angle=angle)\n", + " system = make_system(condition)\n", + " run_odeint(system, slope_func)\n", + " \n", + " T = interp_inverse(system.results.x)\n", + " t_wall = T(94.5)\n", + " \n", + " Y = interpolate(system.results.y)\n", + " return Y(t_wall)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your function with a launch angle of 45 degrees:" + ] + }, + { + "cell_type": "code", + "execution_count": 252, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(11.025366370141327)" + ] + }, + "execution_count": 252, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "height_func(45, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now use `max_bounded` to find the optimal angle. Is it higher or lower than the angle that maximizes range?" + ] + }, + { + "cell_type": "code", + "execution_count": 254, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " fun: 11.045254540092481\n", + " message: 'Solution found.'\n", + " nfev: 19\n", + " status: 0\n", + " success: True\n", + " x: 44.51992616853677" + ] + }, + "execution_count": 254, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_bounded(height_func, [0, 90], condition)\n", + "# higher" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following lines compute the height of the ball at the wall, given that it's launched at the optimal angle." + ] + }, + { + "cell_type": "code", + "execution_count": 255, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(10.360365286000551)" + ] + }, + "execution_count": 255, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle = res.x\n", + "height = height_func(angle, condition)\n", + "height" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to find the height of the ball at the wall, for a given velocity, given that it's launched at the optimal angle.\n", + "\n", + "Write a function called `best_height` that takes velocity and a `Condition` object as parameters. It should use `max_bounded` to find the optimal launch angle, then compute and the highest possible height of the ball at the wall, for the given velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 258, + "metadata": {}, + "outputs": [], + "source": [ + "def best_height(velocity, condition):\n", + " condition.set(velocity=velocity)\n", + " angle = max_bounded(height_func, [0, 90], condition).x\n", + " return height_func(angle, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use this code to test `best_height`" + ] + }, + { + "cell_type": "code", + "execution_count": 259, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(11.04525454009248)" + ] + }, + "execution_count": 259, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "best_height(40, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we want to use `fsolve` to find the initial velocity that makes the height of the ball exactly 11 meters when it reaches the wall.\n", + "\n", + "To use `fsolve`, we need an error function that returns 0 when we have the right velocity. Write a function called `error_func` that takes a velocity and a `Condition` object, uses `best_height` to find the height of the ball at the wall, and returns the difference between the result and the target value (11 meters)." + ] + }, + { + "cell_type": "code", + "execution_count": 260, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func(velocity, condition):\n", + " return best_height(velocity, condition) - 11\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your error function like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 265, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.045254540092480866" + ] + }, + "execution_count": 265, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(40, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then use `fsolve` to find the answer to the problem, the minimum velocity that gets the ball out of the park." + ] + }, + { + "cell_type": "code", + "execution_count": 266, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "min_velocity = fsolve(error_func, 40, condition)" + ] + }, + { + "cell_type": "code", + "execution_count": 269, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 39.98870758])" + ] + }, + "execution_count": 269, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "min_velocity" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And just to check, run `best_height` with the value you found. The result should be 11 meters." + ] + }, + { + "cell_type": "code", + "execution_count": 268, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(10.999999999981757)" + ] + }, + "execution_count": 268, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "best_height(min_velocity, condition)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python3.6", + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap10mine.org b/code/chap10mine.org new file mode 100644 index 00000000..7e2a829f --- /dev/null +++ b/code/chap10mine.org @@ -0,0 +1,27 @@ +#+title: Chapter 10 Notebook + +#+name: pre +#+BEGIN_SRC python + import pint + + ureg = pint.UnitRegistry() + m = ureg.meter + s = ureg.second + kg = ureg.kilogram + + # condition = pd.Series({'x': 0 * m, 'y': 1 * m, 'g': 9.8 * m / s**2, 'mass': 0.145 * kg, 'diameter': 0.073 * m, + # 'rho': 1.2 * kg / m ** 3, 'C_d': 0.3, 'angle': 45 * degree, 'velocity': 40 * m / s, 'duration': 5.1 * s}) +#+END_SRC + +* Exercise +Create a =Vector= named =a_force= that represents acceleration due to a force of 0.5 Newton applied to an object with mass 0.3 kilograms, in a direction 45 \deg up from the positive x-axis. + +Add =a_force= to =a_drag= from the previous exercise. +If that addition succeeds, that means that the units are compatible. +Confirm that the total acceleration seems to make sense. + + +#+BEGIN_SRC python :noweb yes + <
>
+  a_grav = 
+#+END_SRC
diff --git a/code/chap11-fig01.pdf b/code/chap11-fig01.pdf
new file mode 100644
index 00000000..99092d88
Binary files /dev/null and b/code/chap11-fig01.pdf differ
diff --git a/code/chap11-fig02.pdf b/code/chap11-fig02.pdf
new file mode 100644
index 00000000..9f3ec298
Binary files /dev/null and b/code/chap11-fig02.pdf differ
diff --git a/code/chap11mine.ipynb b/code/chap11mine.ipynb
new file mode 100644
index 00000000..9ba62bc9
--- /dev/null
+++ b/code/chap11mine.ipynb
@@ -0,0 +1,1958 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Modeling and Simulation in Python\n",
+    "\n",
+    "Chapter 11: Rotation\n",
+    "\n",
+    "Copyright 2017 Allen Downey\n",
+    "\n",
+    "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "# If you want the figures to appear in the notebook, \n",
+    "# and you want to interact with them, use\n",
+    "# %matplotlib notebook\n",
+    "\n",
+    "# If you want the figures to appear in the notebook, \n",
+    "# and you don't want to interact with them, use\n",
+    "# %matplotlib inline\n",
+    "\n",
+    "# If you want the figures to appear in separate windows, use\n",
+    "# %matplotlib qt5\n",
+    "\n",
+    "# tempo switch from one to another, you have to select Kernel->Restart\n",
+    "\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from modsim import *"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Rolling paper\n",
+    "\n",
+    "We'll start by loading the units we need."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "radian = UNITS.radian\n",
+    "m = UNITS.meter\n",
+    "s = UNITS.second"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "And creating a `Condition` object with the system parameters"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "condition = Condition(Rmin = 0.02 * m,\n",
+    "                      Rmax = 0.055 * m,\n",
+    "                      L = 47 * m,\n",
+    "                      duration = 130 * s)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The following function estimates the parameter `k`, which is the increase in the radius of the roll for each radian of rotation. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "def estimate_k(condition):\n",
+    "    \"\"\"Estimates the parameter `k`.\n",
+    "    \n",
+    "    condition: Condition with Rmin, Rmax, and L\n",
+    "    \n",
+    "    returns: k in meters per radian\n",
+    "    \"\"\"\n",
+    "    unpack(condition)\n",
+    "    \n",
+    "    Ravg = (Rmax + Rmin) / 2\n",
+    "    Cavg = 2 * pi * Ravg\n",
+    "    revs = L / Cavg\n",
+    "    rads = 2 * pi * revs\n",
+    "    k = (Rmax - Rmin) / rads\n",
+    "    return k"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "As usual, `make_system` takes a `Condition` object and returns a `System` object."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "def make_system(condition):\n",
+    "    \"\"\"Make a system object.\n",
+    "    \n",
+    "    condition: Condition with Rmin, Rmax, and L\n",
+    "    \n",
+    "    returns: System with init, k, and ts\n",
+    "    \"\"\"\n",
+    "    unpack(condition)\n",
+    "    \n",
+    "    init = State(theta = 0 * radian,\n",
+    "                 y = 0 * m,\n",
+    "                 r = Rmin)\n",
+    "    \n",
+    "    k = estimate_k(condition)\n",
+    "    ts = linspace(0, duration, 101)\n",
+    "    \n",
+    "    return System(init=init, k=k, ts=ts)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Testing `make_system`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "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", + "
value
inittheta 0 radian\n", + "y 0 meter\n", + "r ...
k2.7925531914893616e-05 meter
ts[0.0 second, 1.3 second, 2.6 second, 3.9000000...
\n", + "
" + ], + "text/plain": [ + "init theta 0 radian\n", + "y 0 meter\n", + "r ...\n", + "k 2.7925531914893616e-05 meter\n", + "ts [0.0 second, 1.3 second, 2.6 second, 3.9000000...\n", + "dtype: object" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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", + "
value
theta0 radian
y0 meter
r0.02 meter
\n", + "
" + ], + "text/plain": [ + "theta 0 radian\n", + "y 0 meter\n", + "r 0.02 meter\n", + "dtype: object" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can write a slope function based on the differential equations\n", + "\n", + "$\\omega = \\frac{d\\theta}{dt} = 10$\n", + "\n", + "$\\frac{dy}{dt} = r \\frac{d\\theta}{dt}$\n", + "\n", + "$\\frac{dr}{dt} = k \\frac{d\\theta}{dt}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes the derivatives of the state variables.\n", + " \n", + " state: State object with theta, y, r\n", + " t: time\n", + " system: System object with r, k\n", + " \n", + " returns: sequence of derivatives\n", + " \"\"\"\n", + " theta, y, r = state\n", + " unpack(system)\n", + " \n", + " omega = 10 * radian / s\n", + " dydt = r * omega\n", + " drdt = k * omega\n", + " \n", + " return omega, dydt, drdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `slope_func`" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " )" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0*s, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And look at the results." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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", + "
thetayr
124.81248.046.7070640.054851
126.11261.047.4224870.055214
127.41274.048.1426300.055577
128.71287.048.8674930.055940
130.01300.049.5970740.056303
\n", + "
" + ], + "text/plain": [ + " theta y r\n", + "124.8 1248.0 46.707064 0.054851\n", + "126.1 1261.0 47.422487 0.055214\n", + "127.4 1274.0 48.142630 0.055577\n", + "128.7 1287.0 48.867493 0.055940\n", + "130.0 1300.0 49.597074 0.056303" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Extracting one time series per variable (and converting `r` to radians):" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "thetas = system.results.theta\n", + "ys = system.results.y\n", + "rs = system.results.r * 1000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `theta`" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAETCAYAAABwaNKCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XlYU2f6N/BvCGEzJIiiCEQhoIAC\nyuKCIAi0WpdOq120VSutBR2VOtZqa9cpXaydto4tQxXbwVY7On1/w7TVKjqColYsIqKiuEAUwo4s\nCZFAQnLeP6hHj7gEDSTA/bkur8s858nhPiK5Odv38BiGYUAIIYR0MwtTF0AIIaRvogZECCHEJKgB\nEUIIMQlqQIQQQkzC0tQF9AQtLS0oKCiAk5MT+Hy+qcshhJAeQafToba2Fn5+frCxsemwnBqQAQoK\nCjBv3jxTl0EIIT3SDz/8gJCQkA7j1IAM4OTkBKD9H9HZ2dnE1RBCSM9QVVWFefPmsZ+ht6MGZIAb\nh92cnZ3h5uZm4moIIaRnudupC2pAhBBCHohOz+DUxRpcKm2Aq5MQkUGd+wWdGhAhhJBOq6lvRuZJ\nOa41qgEA9coWjB05GHY2AoPXQQ2IEEKIwdp0euScq0L+pVrob0ly83ARw9a6cy2FGhAhhBCDVNSq\nkJkrR6OqlR2z5Ftg/ChnjB7uBB6P16n1UQMihBByTxqtDtlnK3G2+Bpn3NVJiKhgCRzsrR9ovdSA\nCCGE3FVJpRIHT8qhUmvZMSsBH2EBLhjp4djpvZ5bUQMihBDSgbq1DUfzy3GxtIEz7jFEhMggNwjt\nrB76a1ADIoQQwmIYBkVljTh8qhzq1jZ23NbaEpPGuGK4xOGh9npuRQ2IEEIIAECl1iIrrwxXKhSc\n8RFD+yN8tEunLrE2BDUgQgjp4xiGQeHVevx2ugKtWh07LrQVIDLIDR4u4i75utSACCGkD1OoWnHw\nZBnKapo4437SAQgNcIG1oOueAEANiBBC+iC9nsHZoms4XlAJrU7PjjsIrREVIoGrk7DLazDpA+lK\nSkrw7rvv4vHHH4evry8WLFjAWV5TU4P169fjT3/6EwIDAxEZGYnXX38d1dXVHdZVXV2NZcuWITAw\nEOPHj0diYiLUanWHeT/++COmTJkCf39/zJ49G9nZ2V22fT3Nnj17kJaWxhlbsGABXnnlFaOsf8uW\nLfj999+Nsi5CyIOrU6iRdqgIR06Xs82Hx+Mh0HsQ5jzq3S3NBzBxA7p8+TKysrLg4eEBd3f3DsvP\nnTuHAwcOYObMmfj666+xZs0anD59Gs899xyuX7/OztNqtVi0aBEqKiqwYcMGvPXWW0hPT8c777zD\nWd/u3bvx3nvv4YknnsCWLVvg5eWFxYsX49KlS129qT1Ceno6/vvf/3bZ+r/55hvk5OR02foJIfem\n0+mRc74K/z5wCVV1Nz9DB4ht8XT0cIQFuEBg2X1twaSH4KKjo/HII48AAF555RU0NHCvNw8ODsbe\nvXthaXmzzJEjR+Kxxx7D/v37MWvWLADAvn37UFxcjP3790MikQAALC0t8eqrr2L58uVsc/vqq6/w\n5JNPYtmyZQCAcePGobCwECkpKfjss8+6enMJIcRkquubkZkrR53i5pEhCwsexvoORpD3IPD53b8/\nYtI9IAuLe395kUjEaT4A4OHhAVtbW9TU1LBjhw8fhr+/P9t8AOCRRx6BQCDAkSNHAAByuRxXr17F\ntGnTOF9/6tSp7Jy+7I033sC+ffuQk5MDb29veHt746uvvmKX79q1C48++iiCgoLw8ssvo6qqivP+\n1tZWfPrpp4iMjISfnx/+9Kc/ISsri10eHR2NxsZGJCUlseu/cTjun//8J5566ikEBwdj4sSJWLJk\nCUpKSrpnwwnp5bRtevx2pgL/l3mZ03wGO9phziMjMHaks0maD9ADL0K4cOEC1Go155CdTCaDl5cX\nZ56VlRWGDh0KmUzGzgEAqVTKmefp6YnGxkbU19fD0dGxa4s3Y0uXLkVFRQWamprw3nvvAWh/AF9O\nTg5Onz6NmpoavP7662htbcVHH32Ed955B1u2bGHf/8orr+DMmTNISEjA0KFDsXfvXvz5z3/Gf/7z\nH/j6+iIpKQkvvPACpk6dimeeeQYA2O9ZVVUV5s+fDxcXF6hUKuzcuRNz587F/v37YW9v3/3/GIT0\nEuW1Khy8LTxUwLfABL8h8PcaCAsL49xQ+qB6VAPS6/X46KOP4O7ujujoaHZcqVTe8YNKJBJBqVQC\nABQKBTt2K7FYzC43dgM6dbEGOeeroG3T33+ykQksLTBupDMCvQcZNH/o0KFwcHAAwzAYM2YMZ5lK\npcLmzZvZf6va2lqsW7cOLS0tsLGxQXZ2Ng4dOoRt27Zh3LhxAIDw8HBcvXoVX3/9Nb788kuMHDkS\nfD4fzs7OHdb/5ptvsn/X6XQICwtDaGgoMjIy8OSTTz7MPwMhfVKrVofsMxUokNVxxt0G2SMq2A1i\n4YOFhxpbj2pAn3/+OfLz87F9+3YIBMa9I7cr5F+qNUnzAdp3u/Mv1RrcgO7F39+fbT7AzT2X6upq\nDBs2DMeOHYOTkxOCgoLQ1nYzuiM0NLTDVXV3kp+fj40bN+L8+fNobGxkx69cufLQtRPS11ytVOLQ\nbeGh1gI+wka7wNf94cJDja3HNKAffvgB3377Lb744guMHj2as0wkEkGlUnV4j1KphI+PD4CbezpN\nTU2cvaAbe0a3fsAay5gRTibdAxozwsko67p9r/FG829tbd+tb2hoQG1tLUaNGtXhvXd7FvwNFRUV\neOmllxAQEID3338fgwYNgkAgwOLFi6HRaIxSPyF9QXOLFkdPV+DS7eGhLuL28FBb8/ulvUc0oH37\n9uHDDz/E6tWrMX369A7LpVIpe47nBo1GA7lcjrlz57JzgPZzQa6uruw8mUwGBweHLjn/E+g9yCh7\nIOZOLBZj8ODB+Mc//tHp9x45cgQtLS1ITk6GnZ0dAKCtrY39xYAQcm8Mw+CyvBFH8juGh0YGusHT\nTWxWez23MvsG9Pvvv+O1117D/PnzsWjRojvOiYiIwJo1a1BeXs42l8zMTGg0GkyaNAkAIJFI4O7u\njvT0dHZMr9dzXvd1AoGA3avpjNDQUKSmpsLOzg6enp6dWn9LSwssLCw4Vzvu3buXcyiPEHJnqmZN\ne3hopZIz7jOsP8JHu8Kmk4/I7m4mrU6tVrOX6lZXV0OlUiE9PR0AEBkZiYqKCixbtgxSqRTTp09H\nfn4++15HR0cMHToUADB16lRs2rQJCQkJWLFiBZqamrBu3TrMnDmTc7VcQkICVq9eDVdXVwQFBeGn\nn35CSUkJPv/88+7baDPm4eGBjIwMHDhwAIMHD8agQYbtvYWFhSE8PBwvvfQS4uLi4OXlBZVKhQsX\nLqC1tRWrVq0C0L4XmpWVhUmTJsHOzg4eHh6YMGECdDod1q5di6effhqXL1/GP//5zw6H/QghNzEM\ng3OyOhw7WwnNbeGhUcESDBvSM35+TNqA6urqsGLFCs7YjdcZGRk4ffo0mpqacOHCBfZQ2g2zZs3C\nJ598AqD9N+tvvvkGiYmJ+Mtf/gIrKytMnz4da9as4bxn5syZaG5uxpYtW5CcnIzhw4dj8+bNGDFi\nRBduZc/x/PPPo7CwEG+++SYUCgWWL19u0Pt4PB6SkpKwadMmfPfdd6isrIRYLIaPjw8nXmnNmjVI\nTEzE4sWLoVar8f3332P8+PFYt24dkpKS8L///Q8+Pj7YuHEjVq5c2VWbSUiP1tjUioMn5Siv5Z73\n9vMciIn+Q2DVheGhxsZjGIYxdRHmrqysDDExMcjIyICbm5upyyGE9EF6PYP8y7XIOVeFttvCQ6ND\nJHDppvy2zrjfZ6d5HyAkhBCCOoUamblyVNc3s2MWPB7GjHDCuFHOsDRRksHDogZECCFmSqfT4+SF\nGuReqIZef/Ng1UAHW0QHSzDI0c6E1T08akCEEGKGquubkXmiFHXKFnaMb8HD2D8STvgmjtExBmpA\nhBBiRrRtevx+rhKnL1/DrafonQf0Q3SIBI4iGxNWZ1zUgAghxEzIq5tw8KQcyus3U0AEfAtM8B8C\nf0/Th4caGzUgQggxsRZNG46dqcT5K9zwUMlge0QFSyDqZ2WiyroWNSBCCDGhKxUKZOWVccNDrfgI\nD3CFj3t/s43RMQZqQIQQYgLNLVocyS/HZXkjZ9zTtT081M7G/MJDjY0aECGEdCOGYXCptAFH8ivQ\normZeWhnI0BEoCu83BxMWF33ogZECCHdRNWswcGTZSip4oaH+ro7IizAxezDQ42tb20tIYSYwN3C\nQ0X9rDA5yA1DnXtGeKixUQMihJAu1NjUisxcOSqu3QwP5fF48PccgFD/IRBY9pzwUGOjBkQIIV1A\nr2eQf6kWOedvCw+1t0ZMyFAMGdjPhNWZB2pAhBBiZNca1cjILUVtg5ods+DxEOg9CGNHDu6x4aHG\nRg2IEEKMRKfT40RhNfIu1EB/S4yOk4MtokOGwqm/rQmrMz/UgAghxAiq6q4jM1eO+tvCQ8eNcsaY\nEb0jPNTYqAERQshD0LbpcLygCmeKuOGhLgP7ISpEgv72vSc81NioARFCyAO6Y3iopQUm+rvAz3NA\nr47RMQZqQIQQ0kktmjb8droChVfrOeNDne0xOaj3hocaGzUgQgjpBFl5e3jo9Zab4aE2VpYIH+MC\n76G9OzzU2Ex6LWBJSQneffddPP744/D19cWCBQs6zGEYBps2bUJkZCQCAgIwb948FBYWdphXVFSE\nhQsXYvTo0QgPD8fGjRuh0+keaF2EEHK75hYt0rOvYs+xK5zm4+XmgOenesNnmCM1n04yaQO6fPky\nsrKy4OHhAXd39zvOSUlJQXJyMuLi4rBp0ybY2dkhNjYWtbW17ByFQoHY2FjweDwkJydj2bJlSE1N\nxZdfftnpdRFCyK0YhsGFknr8a99FFJXdTK62sxFgWqg7Hgt17xPJ1V3BpIfgoqOj8cgjjwAAXnnl\nFTQ0NHCWt7a2IiUlBfHx8Zg/fz4AYMyYMYiOjsb27duxcuVKAMDOnTvR2tqKpKQkCIVChIWFQaVS\nISkpCXFxcRAKhQavixBCblBe1+BQnhylVU2c8ZEejpgY4AIbKzqL8TBMugdkYXHvL5+XlweVSoVp\n06axY3Z2doiKisKRI0fYscOHDyM8PBxCoZAdmzFjBlpaWpCTk9OpdRFCCMMwOFt0DTv2X+A0H1E/\nKzwR4YnokKHUfIzArPMgZDIZ+Hx+h8Nznp6ekMlknHlSqZQzx8XFBba2tuw8Q9dFCOnbGppa8N9D\nRcg6VQZtW3uGG4/Hw+jhTnhuijckg+1NXGHvYdYtXKlUws7ODnw+Ny1WLBZDrVZDo9HAysoKSqUS\n9vYd/1OIRCIolcpOrYsQ0jfp9AxOXazBifNV0Olv3lDqKLJBdIgEzgMoPNTYzLoBEUJId6htUCMz\ntxS1jdzw0GCfQQjxHQw+hYd2CbNuQCKRCM3NzdDpdJw9F4VCAVtbW3aPRSQSQaVSdXi/UqmESCTq\n1LoIIX1Hm06PE+erceoiNzx0UH87RIdIMNCBwkO7klk3IKlUCp1Oh5KSEs45ntvP+Uil0g7ncSor\nK6FWq9l5hq6LENI3VF67jozcUjQ2tbJjlnyL9vDQ4U6woPDQLmfW+5VBQUEQCoVIT09nx9RqNQ4e\nPIhJkyaxYxERETh69ChnL2jPnj2wsbHBuHHjOrUuQkjvptHqcPhUGdIOFXGaj8tAIeY8OgJB3oOo\n+XQTk+4BqdVqZGVlAQCqq6uhUqnYBhEZGQlbW1vEx8cjOTkZYrEYUqkUqamp0Ov1nNSEuXPnYtu2\nbUhISEBcXBzkcjmSkpIQGxvLXpptbW1t0LoIIb1XSZUSh06Woan5ZniolYCPif5DMEpK4aHdzaQN\nqK6uDitWrOCM3XidkZEBNzc3xMfHQ6/XY/PmzWhsbISfnx9SU1MxcOBA9j1isRhbt25FYmIilixZ\nApFIhIULFyIhIYGzbkPWRQjpfVpa23D0dAUulHDDQ4c5ixAV7AahHZ0DNgUec+sDLMgdlZWVISYm\nhm2KhJCegWEYFP8RHqpubWPHbawsMWmMC0ZQeGiXut9np1lfhEAIIQ/qulqLw6fKUFyu4IwPlzhg\n0hhXym8zA9SACCG9CsMwuHC1AUfPlKNVczMRv5+NAJOD3eDhIjZhdeRW1IAIIb2GQtWKQ3llkFdz\nw0NHSQcg1H8I5beZGfpuEEJ6PL2ewdniazh+thJanZ4dF/WzQlSwhPLbzNQDNaC2tjbweLwOuWqE\nENLd6pUtyMyVo6ruOjvWHh46EONHOUNgSZ9T5sqgBpSbm4uMjAycOnUKRUVFuH69/RstFArh6emJ\nwMBAxMTEICQkpEuLJYSQG+4WHjpAZIMoCg/tEe7agNra2vDjjz9i69atKC0thVgsxqhRozB9+nSI\nxWIwDAOlUomysjKkpaUhNTUVbm5uePHFF/Hss89CIKArTAghXaOmvhmZJ+W4dmt4qAUPIT6DEewz\niMJDe4i7NqBHH30UWq0Ws2bNwmOPPYZRo0bdc0UFBQVIT0/H119/jW+//RaZmZlGL5YQ0re16fTI\nOVeF/Eu1nPDQwY7t4aEDxBQe2pPctQEtXboUTzzxhMEp0X5+fvDz88Mrr7yCn3/+2WgFEkIIAFTU\nqpCZK0ejihseOsHPGQFeFB7aE921AT3zzDMPtEIrK6sHfi8hhNxOo9Xh2NlKFBRf44y7OgkRFSyB\ng721iSojD4suwyaEmK2SSiUOnpRDpdayY1YCPsICXDDSw5FidHq4uzagpKSkTq+Mx+Nh2bJlD1UQ\nIYSoW9twNL8cF0sbOOMeQ0SIDJZAaEsXOfUGnWpAN37buD2/lMfjgWEYakCEkIfCMAyKyhpx+FQ5\nJzzU1toSEYGu8HJzoL2eXuSuDejChQuc19XV1YiPj8fw4cOxcOFCeHh4AGh/ouh3332H4uJibN68\nuWurJYT0Wiq1Fll5ZbhSwQ0PHTG0PyaNcYWtNZ0x6G0Mvlj+/fffx7Bhw/DZZ5/B398fQqEQQqEQ\nAQEB+PzzzzF06FAkJiZ2Za2EkF6IYRick9Vhx74LnOYjtBVgZrgUU8YPo+bTSxncgI4fP44JEybc\ndfmECROQnZ1tlKIIIX2DQtWKnw/LcPCkHK3am8nVftIBeH6qD9yHiExYHelqBjcga2trnDlz5q7L\nT58+DWtruhySEHJ/ej2D/Es12LH/IspqbiZXi4XWmDXZC5ODJbASUIZbb2fwfu3jjz+Obdu2QSwW\nY/78+ZBIJAAAuVyObdu24ZdffsGCBQu6rFBCSO9Qp1AjM1eO6vpmdozH42HMCCeMG+kMgSXF6PQV\nBjeg1157DQ0NDfjuu+/w/fffs0nYOp0ODMNgxowZeO2117qsUEJIz6bT6XHyYg1yC6uhvzU8VGyL\nmBAJBjnambA6YgoGNyArKyv87W9/w6JFi3D48GGUl5cDAFxdXREREQEfH58uK/LXX3/FN998g6tX\nr0IoFCI0NBSrVq3C4MGD2TkMw2Dz5s3YsWMHGhoa4O/vj7fffhu+vr6cdRUVFeGDDz5Afn4+7O3t\n8cwzz2D58uX0aAlCulB1fTMyT5SiTtnCjvEteBg70hmBI5woPLSP6vSlJT4+Pl3abG6XkZGBV199\nFfPmzcOaNWtQU1ODjRs3YvHixUhLS4OFRft/3JSUFCQnJ2PNmjWQSqVITU1FbGwsdu/eDScnJwCA\nQqFAbGwsvLy8kJycjNLSUqxfvx56vR4rV67stm0ipK/Qtv0RHnq5lnP/oPOAfogOkcBRZGPC6oip\nmf21jbt378aoUaPw7rvvsmNCoRBLly7FlStX4OnpidbWVqSkpCA+Ph7z588HAIwZMwbR0dHYvn07\n21x27tyJ1tZWJCUlQSgUIiwsDCqVCklJSYiLi4NQKDTJNhLSG5XXqnDwtvBQAd8CE/yGwN9rIIWH\nks41oKysLGzduhXnz59HU1NTh0QEACgsLDRacUD7c4lubwwiUfulmTe+fl5eHlQqFaZNm8bOsbOz\nQ1RUFI4cOcI2oMOHDyM8PJyzvhkzZuCzzz5DTk4OoqOjjVo7IX1Rq1aH7DMVKJDVccYlg+0xOcgN\nYiFdLUvaGXzgdd++fViyZAmuXbuG6dOnQ6/XY8aMGZg+fTpsbGzg7e3dJTE8Tz31FE6ePImffvoJ\nKpUKV65cwd///ndMmDABXl5eANrTGPh8Ptzd3Tnv9fT0hEwmY1/LZDJIpVLOHBcXF9ja2nLmEUIe\nzJUKBXbsu8BpPtYCPqJDJPjTJCk1H8Jh8B7Q5s2bERAQgH/9619QKBTYsWMHnnrqKYSGhqKsrAxz\n5syBm5ub0QucPHky1q1bh7feeguvv/46ACAwMBBff/01O0epVMLOzq7DhQRisRhqtRoajQZWVlZQ\nKpWwt7fv8DVEIhGUSqXRayekr2hu0eJIfgUuy28LD3URIzLIjcJDyR0ZvAdUXFyM6dOng8/nw9Ky\nvW+1tbWHBbq5ueG5557Dli1bjF7g8ePH8d577+GFF17A999/jw0bNkChUGDZsmXQ6XT3XwEhpMsw\nDINLpQ3Ysf8ip/nYWlvisQnumD7RnZoPuSuD94BsbGwgELT/RxKJRLCyskJtbS27fODAgSgrKzN6\ngevXr0d0dDRWr17Njvn4+GDatGnIyMjAlClTIBKJ0NzcDJ1Ox9kLUigUsLW1ZZ/qKhKJoFKpOnwN\npVLJnlcihBhG1axpDw+t5B498BnWH+GjXWFD+W3kPgzeA/Lw8EBxcTH72tfXFz///DPa2trQ2tqK\n3bt3Y8iQIUYvUCaTdbiXRyqVwsbGBqWlpexrnU6HkpKSDu+99ZyPVCrtcK6nsrISarW6w7khQsid\nMQyDguJr+Nf+i5zmI7QV4PFwKR4ZN4yaDzGIwQ3o0UcfRUZGBjQaDQBgyZIlyMnJwdixYzFhwgTk\n5uYiPj7e6AW6uLjg/PnznLHi4mK0tLTA1dUVABAUFAShUIj09HR2jlqtxsGDBzFp0iR2LCIiAkeP\nHuXsBe3Zswc2NjYYN26c0WsnpLdpbGrFT1nFOJRXBs0t4aH+ngPx/FQfDKPwUNIJBv+asmjRIixa\ntIh9HRUVhW3btmH//v3g8/mIjIy8Z1r2g5o7dy7WrVuHQYMGISIiAteuXcM//vEPuLq6IjIyEkB7\nUGp8fDySk5MhFovZG1H1ej0nn27u3LnYtm0bEhISEBcXB7lcjqSkJMTGxtI9QITcg17PIP9yLXLO\nVaFNp2fHHeytER0sgYsT/fyQzjOoAWk0Gpw+fRpOTk6cS51DQkIQEhLSVbUBAF544QUIBALs2LED\nO3fuhL29PYKDg7Fq1SrY2d3MjoqPj4der8fmzZvR2NgIPz8/pKamYuDAgewcsViMrVu3IjExEUuW\nLIFIJMLChQuRkJDQpdtASE92p/BQixvhoaOcYUkxOuQB8Zg73U16G71ej4CAAKxduxbz5s3rjrrM\nSllZGWJiYpCRkdEll5oTYo50Oj1OXvgjPPSWj4mBDraIDpFgUH8KDyX3dr/PToP2gCwsLCCRSNDU\n1HT/yYSQHq+q7joyc+Wov1N4qPcg8ClGhxiBwfvOixcvxg8//MBeeUYI6X20bTocPV2O/xws4jQf\n5wH9MOdRb4T4DqbmQ4zG4IsQCgsLIRKJMH36dEyYMAGurq6wseEm2fJ4PLzxxhtGL5IQ0vXk1U04\neFIO5XUNOyawtECo/xD4SSk8lBifwQ3ou+++Y/9+9OjRO86hBkRIz9OiacOxM5U4f4XCQ0n3MrgB\nXbhwoSvrIISYwJUKBQ6dLMP1Fi07Zm3Fx6TRrvAe1h88Hu31kK5DtysT0ge1h4eW47K8kTPu6eaA\nyEBX2NlQfhvpendtQDcSpB/Ew7yXENJ1boSHHsmvQIumjR23sxEgItAVXm4OJqyO9DV3vQpu8uTJ\n2Lx5M+rq6u42pYNr164hOTkZUVFRRimOEGI8Tc0a7D56Bf/LKeU0H193Rzw/1ZuaD+l2d90DWrt2\nLZKSkvDll18iJCQEEydOxMiRI+Hm5gaxWAyGYaBQKFBWVoaCggJkZ2cjLy8PEokEa9eu7c5tIITc\nA8MwKJDV4diZCmjbbsboiPpZYXKQG4Y6U34bMY27NqDHH38c06dPR0ZGBtLS0pCUlAStVtvhpCTD\nMBAIBAgLC8Pf//53REdHd3gwHCHENBqaWnAwtwwV124G8PJ4PPh7DkCo/xAILOlnlZjOPS9C4PP5\nmDJlCqZMmQKNRoOCggLIZDI0NrafuHRwcIBUKoWfnx+d8yHEjOj1DPIv1SLnfMfw0JiQoRgysJ8J\nqyOkncFXwVlZWSEoKAhBQUFdWQ8h5CFda1QjI7cUtQ1qdsyCx0Og9yCMHTmYwkOJ2aDLsAnpJXQ6\nPU4UViPvQg0nPNTJwRbRIUPh1N/WhNUR0hE1IEJ6gcpr7eGhDU3c8NBxo5wROGIQxegQs0QNiJAe\nTNumQ/bZSpwtrsOtT1ZxGdgPUSES9Le3uce7CTEtakCE9FClVUocyivrEB460d8Ffp4DKEaHmD1q\nQIT0MC2aNvx2ugKFV+s540Od7TE5SAJRP7oilfQM1IAI6UGKyxqRdaoczbeHh45xhfdQCg8lPUun\nrscsLi7GqlWrEB4eDj8/P2RnZwMA6uvr8frrr+PUqVNdUiQhfV1zixZ7s69ib/ZVTvPxcnPAvKk+\n8BnmSM2H9DgGN6Bz587h6aefxu+//46QkBDodDp2maOjI0pKSrBjx44uKbKtrQ0pKSmYMmUK/Pz8\nEBERgY8//pgzh2EYbNq0CZGRkQgICMC8efNQWFjYYV1FRUVYuHAhRo8ejfDwcGzcuJGzLYSYE4Zh\ncOFqPX7YdwHFZTeTq+1sBJgW6o7HQt0puZr0WAYfgvvss88wZMgQ/Pjjj9BoNEhPT+csDwsLwy+/\n/GL0AgHgjTfewPHjx7F8+XJIpVJUVlaiuLiYMyclJQXJyclYs2YNpFIpUlNTERsbi927d8PJyQkA\noFAoEBsbCy8vLyQnJ6O0tBTr16+HXq/HypUru6R2Qh6U8roGh07KUVrdxBkf6eGIiQEusLGiI+ik\nZzP4f3B+fj5WrFgBoVCIhoZWT4JcAAAgAElEQVSGDsudnZ1RU1Nj1OIA4PDhw9i7dy9+/vlneHl5\n3XFOa2srUlJSEB8fj/nz5wMAxowZg+joaGzfvp1tLjt37kRrayuSkpIgFAoRFhYGlUqFpKQkxMXF\nQSgUGr1+QjqLYRicLb6G7LOVHcJDo4IlkAy2N2F1hBiPwYfgLCwsYGFx9+k1NTWwtTX+ndb/+c9/\nMGHChLs2HwDIy8uDSqXCtGnT2DE7OztERUXhyJEj7Njhw4cRHh7OaTQzZsxAS0sLcnJyjF47IZ3V\n0NSCtINFOHyqnG0+PB4Po4c74bkp3tR8SK9icAMKCAjA//73vzsua2lpwU8//YSQkBCjFXbDmTNn\n4O7ujsTERAQFBWH06NFYvnw5qqur2TkymQx8Ph/u7u6c93p6ekImk3HmSaVSzhwXFxfY2tpy5hHS\n3XR6BrmF1di5/yIq666z444iGzwV5YVJY1wpuZr0OgYfgktISMALL7yApUuXYsaMGQDaT+hXV1fj\n22+/RU1NDb788kujF1hbW4u0tDT4+Phgw4YNuH79Ov72t79h+fLl+PHHH8Hj8aBUKmFnZ9fhMRBi\nsRhqtZp9QqtSqYS9fcffIEUiEZRKpdFrJ8QQtQ1qZOaWoraRGx4a7DMIIb6DwafwUNJLGdyAgoKC\nkJKSgvfffx+rVq0CAHz00UcAAIlEgk2bNsHX17drqgSQnJyM/v37AwCcnJwwf/58HD9+HKGhoV32\nNQnpSm06PU6cr8api9zw0EH97RAdIsFABwoPJb1bpy6jmThxItLT03HhwgVcvXoVDMNAIpFg1KhR\n9zw/9DBEIhEkEgnbfAAgODgYAoEARUVFCA0NhUgkQnNzM3Q6HWcvSKFQwNbWln1WkUgkgkql6vA1\nlEolRCJ6KiTpPhXXVMjMlaOxqZUds+RbYNwoZ4wZ7kThoaRP6PR1nDweD76+vl26t3MrT09PtLa2\n3nHZjaYnlUqh0+lQUlLCOcdz+zkfqVTa4VxPZWUl1Gp1h3NDhHQFjVaH4wUdw0NdnYSICpbAwd7a\nhNUR0r3u2oBOnDjxQCscO3bsAxdzJ5MnT8ZXX32F+vp6ODo6AmivTavVwtvbG0D74UGhUIj09HQs\nXboUAKBWq3Hw4EE8++yz7LoiIiLw7bffQqVSsVfC7dmzBzY2Nhg3bpxR6ybkdiVVShw6WYam5pvh\noVYCPib6D8EoKYWHkr7nrg1owYIFnfqBYBgGPB7vjukDD2POnDnYtm0b/vznP2Px4sW4fv06Pvvs\nM0ycOJG96s7a2hrx8fFITk6GWCxmb0TV6/VYsGABu665c+di27ZtSEhIQFxcHORyOZKSkhAbG0v3\nAJEu09LahqOnK3ChhBse6j5EhMlBbhDaUXgo6Zvu2oC+//777qzjroRCIb777jt8+OGHePXVVyEQ\nCBATE4O1a9dy5sXHx0Ov12Pz5s1obGyEn58fUlNTMXDgQHaOWCzG1q1bkZiYiCVLlkAkEmHhwoVI\nSEjo7s0ifQDDMCguUyDrVBnUrW3suI2VJSaNccEICg8lfRyPufVANLmjsrIyxMTEICMjA25ubqYu\nh/QA19VaHD5VhuJyBWd8uKQ/Jo1xofw20ifc77OTwqQIMSKGYVB4tR6/na5Aq/ZmyK3QVoDIIDd4\nuIhNWB0h5sXgBvTCCy/cczmPx4O1tTWcnZ0xfvx4TJ06FZaW1N9I36FQteJQXhnkt4WHjpIOwMQA\nF1gLKMmAkFsZ3CEYhkF1dTVKS0shFovh6uoKACgvL4dCocCwYcMgFApx+vRp/Pjjj0hJSUFqaip7\n5RohvZVe3x4eevxsJbQ6Cg8lxFAG3z26YsUKKBQKfPLJJzh27BjS0tKQlpaGY8eOYd26dVAoFHjn\nnXdw/PhxfPzxxygqKsKGDRu6snZCTK5e2YK0Q0U4kl/ONh8ej4cxI5zw3BQfaj6E3IPBe0Cffvop\nZs+ejSeffJIzzufzMWvWLFy6dAnr1q3Dv//9b8yePRv5+fnIzMw0esGEmAOdnsGpizU4cb4KOv3N\n63gGiGwQFSKB84B+JqyOkJ7B4D2gixcv3vMKMDc3N1y4cIF9PWrUKCgUirvOJ6Snqqlvxv/LuITj\nBZVs87Gw4GHcSGc8+8gIaj6EGMjgBuTk5IT9+/dDr9d3WKbX65Gens6556axsRFiMV3xQ3qPNp0e\nx85U4P9lXsa1W5KrBzvaYc4jIzBulDMlVxPSCQYfgnvxxRfxwQcfYN68eZgzZw4kEgkAoLS0FP/+\n979x+vRpvP322+z8ffv2wd/f3/gVE2ICFbV/hIequOGhE/ycEeBF4aGEPAiDG9C8efPA4/Hw5Zdf\n4o033mDv4GYYBg4ODnj77bcxb948AIBGo8Hq1avppk3S42m0Ohw7U4ECWR1n3G1Qe3ioWEjhoYQ8\nqE7dqPP888/jmWeeQUFBASoqKgC0P1HUz88PAsHNO7utrKzoOT2kxyupVOLgSTlUai07ZiXgIyzA\nBSM9HClGh5CH1Ok7RQUCAQIDAxEYGNgV9RBicurWNhzNL8fF0gbOuMcQESKDJRDaUowOIcbQ6QZU\nVFQEuVx+1yvcbr9Mm5CegmEYFJU14vCpck54qK21JSaNccVwiQPt9RBiRAY3oNLSUqxevRpnzpzB\n3fJLeTweNSDSI6nUWmTlleFKBfcXK++h/RE+xhW21hQrRYixGfxT9e677+LSpUt48803ERISQo+w\nJr0CwzA4f6Uex850DA+dHCyB+xD6f05IVzG4AeXl5SE+Pp7zgDdCejKFqhUHT8pRVqPijPv9ER5q\nReGhhHQpgxuQg4MD3VhKegW9nsGZolocL6hC2y3hoQ5Ca0SFSODqRE/HJaQ7GHzb9pw5c/DLL79A\np9PdfzIhZqpOocZ/Dl7G0dMVbPPh8XgI8h6EuVO8qfkQ0o0M3gMaMWIEMjIyMGvWLDz99NMYMmQI\nLCw69q+YmBijFkiIMeh0epy8WIPcwmrobw0PFdsiJkSCQY52JqyOkL7J4AaUkJDA/v3jjz++4xwe\nj4fCwsKHr4oQI6qub0bmiVLUKVvYMb4FD2NHOiNwhBPltxFiIgY3oO+//74r6zBYdXU1HnvsMTQ3\nNyMvLw/9+rUnDzMMg82bN2PHjh1oaGiAv78/3n77bfj6+nLeX1RUhA8++AD5+fmwt7fHM888g+XL\nl4PPpxPOvY22TY+c81XIv1TLuXXAeUA/RIdI4CiyMWF1hBCDG9C4cePuO0ej0TxUMYb49NNPYWdn\nh+bmZs54SkoKkpOTsWbNGkilUqSmpiI2Nha7d++Gk5MTAEChUCA2NhZeXl5ITk5GaWkp1q9fD71e\nj5UrV3Z57aT7lNU04eDJMihuCQ8V8C0wwW8I/L0GUngoIWbgoY89MAyD7OxsrF27FmFhYcao6a5O\nnDiBI0eO4KWXXuKMt7a2IiUlBfHx8Zg/fz4mTpyIjRs3gsfjYfv27ey8nTt3orW1FUlJSQgLC8Nz\nzz2HZcuWYevWrVCpVLd/OdIDtWp1OHhSjp+yijnNx22QPeZO8cboEZRcTYi5eOAGdPbsWaxbtw4R\nERF46aWXsHfvXoSEhBizNg6dTocPPvgAS5cuRf/+/TnL8vLyoFKpMG3aNHbMzs4OUVFROHLkCDt2\n+PBhhIeHQyi8eaXTjBkz0NLSgpycnC6rnXSPKxUK7Nh3AeduSa62FvARHSLBExFSSq4mxMx0Kl+k\npKQEu3btwq5du1BaWgoAiIqKwpw5czBhwgRYW3fdD/jOnTuh0Wgwb9487Nq1i7NMJpOBz+fD3d2d\nM+7p6Ym9e/dy5k2YMIEzx8XFBba2tpDJZIiOju6y+knXaW7R4kh+BS7LueGhUlcxIgLdKDyUEDN1\n3wZ07do1/Prrr9i1axfOnTsHkUiERx99FC+//DLeeecdPPnkk4iMjOzSIhsaGrBx40b87W9/4zz2\n4QalUgk7O7sOFxKIxWKo1WpoNBpYWVlBqVTC3t6+w/tFIhGUSmWX1U+6BsMwuCxvDw9t0XDDQyOD\n3ODpKqbwUELM2D0b0IsvvoicnBzY2NggJiYGCQkJCAsLg6WlJbsH1B02bNiA0aNHd3mjIz2HqlmD\nQ3lluFrJ/cXBZ1h/hI92hQ2FhxJi9u75U5qdnQ03Nze88847iIiIMMlvk5cvX0ZaWhq2b9/O7qWo\n1WoAgEqlAp/Ph0gkQnNzM3Q6HWcvSKFQwNbWFlZWVgDa93TudLGBUqmkcNUegmEYnJPV4djZSmhu\nCQ+1t7PC5GA3DHOm7yMhPcU9G9Brr72G3bt3Y8mSJRgwYAAee+wxTJs2DcHBwd1VH0pKSqDVajFn\nzpwOyyIiIvD0009j5syZ0Ol0KCkpgVQqZZfLZDLOa6lUCplMxllHZWUl1Go1Zx4xT41N7eGh5bXc\nXyICvAZigt8QCg8lpIe5ZwN6+eWX8fLLL6OoqAi7du3Cr7/+iu3bt8PZ2Rnjxo0Dj8fr8r2ioKCg\nDjfBHjlyBFu2bEFKSgokEglcXV0hFAqRnp6OpUuXAmjfSzp48CCeffZZ9n0RERH49ttvoVKp2Cvh\n9uzZAxsbG4PucyKmodczyL9ci5xzt4WH2lsjOkQCl4GU30ZIT2TQgXIvLy+sXLkSK1euRF5eHnbv\n3o309HQwDIOPP/4Yx48fx+TJkzF+/Hj2cJexODo6Yvz48Zyx8vJyAEBISAibhBAfH4/k5GSIxWL2\nRlS9Xs95fMTcuXOxbds2JCQkIC4uDnK5HElJSYiNjeVcmk3MR51CjcxcOarrb954bMHjIdDbCWNH\nOsOSYnQI6bE6faY2KCgIQUFBeOutt/Dbb7/hl19+wX//+1/88MMPsLOzQ15eXlfUeV/x8fHQ6/XY\nvHkzGhsb4efnh9TUVAwcOJCdIxaLsXXrViQmJmLJkiUQiURYuHAhJ+eOmAedTo+TF/4ID70lRsfJ\nwRZRIRIM6k/hoYT0dDzmbs/X7oSWlhYcOHAAu3fvxqZNm4xRl1kpKytDTEwMMjIy4ObmZupyer2q\nuuvIzJWj/k7hod6DwKckA0J6hPt9dhrlWlUbGxvMnDkTM2fONMbqSB+lbdPheEEVzhRd44SHDvkj\nPLQ/hYcS0qvQzRLELMirm3DwpBzK6zcDbQWWFgj1HwJ/z4F0QykhvRA1IGJSLZo2HDtTgfNX6jnj\nQwfbY3KwBKJ+xr2ohRBiPqgBEZORlSuQlVeG6y1adszaio/wAFf4uPenvR5CejlqQKTbNbdocfhU\nOYrKGjnjnm4OiAx0hZ0NhYcS0hdQAyLdhmEYXCptwJH8Ck54qJ2NABGBrvByczBhdYSQ7kYNiHSL\npmYNDp0sQ0kVNzzU190RYaNdYGNF/xUJ6Wvop550KYZhUFBch2NnK6BtuxmjI+pnhclBbhhK4aGE\n9FnUgEiXaWhqwcHcMlRcuxkeyuPxEOA5EBP8nSGwpPBQQvoyakDE6PR6BvmXavH7uUro9DdvKO1v\nb4PoEAmGDOxnwuoIIeaCGhAxqtoGNTJPlqK2Qc2OWfB4CPIZhBDfwRQeSghhUQMiRtGm0yO3sBp5\nF2q44aH9bREdPBRO/W1NWB0hxBxRAyIPrfJae3hoQ9PN8FBLvgXGjXTGmBFOsKDwUELIHVADIg9M\n26bD8bNVOFPMDQ91GShEVIgb+ttTeCgh5O6oAZEHcrfw0IkBLvCTDqAYHULIfVEDIp3SomnDb6cr\nUHj1tvBQZ3tEBUtgb0fhoYQQw1ADIgYrLmtE1qlyNN8SHmpjZYnwMS7wHkrhoYSQzqEGRO6ruUWL\nrFPlKL4tPHS4xAGTxlB4KCHkwVADInfFMAwuljTgyOlytGp07Hg/GwEig9wgdRWbsDpCSE9n9ncF\n7t27F0uWLMGkSZMQGBiI2bNnY/fu3R3m/fjjj5gyZQr8/f0xe/ZsZGdnd5hTXV2NZcuWITAwEOPH\nj0diYiLUanWHeQRQXtdg1xEZDpwo5TSfkR6OeG6qNzUfQshDM/s9oK1bt8LNzQ1r165F//79cfjw\nYaxatQoNDQ1YsGABAGD37t147733sHz5cgQHByMtLQ2LFy/G//3f/2HEiBEAAK1Wi0WLFkEgEGDD\nhg1QKpX45JNPoFQq8dlnn5lyE80KwzA4W3wN2WcrO4SHRgVLIBlsb8LqCCG9idk3oK+//hqOjo7s\n69DQUNTU1CA1NZVtQF999RWefPJJLFu2DAAwbtw4FBYWIiUlhW0u+/btQ3FxMfbv3w+JRAIAsLS0\nxKuvvorly5fD3d29ezfMDDUoW5CZK0dl3XV2jMfjYfTwgRg/isJDCSHGZfaH4G5tPjf4+vqipqYG\nACCXy3H16lVMmzaNXW5hYYGpU6fiyJEj7Njhw4fh7+/PNh8AeOSRRyAQCDjz+iKdnkFuYTV2/u8i\np/k4imzwVJQXwke7UvMhhBid2e8B3Ul+fj48PDwAADKZDAAglUo5czw9PdHY2Ij6+no4OjpCJpPB\ny8uLM8fKygpDhw5l19EX1TaokZlbitpGbnho8B/hoXwKDyWEdJEe14Cys7Nx4MABfPzxxwAAhUIB\nABCJuA82E4vF7HJHR0colUrY23c8fyESiaBUKjuM93ZtOj1OnK/CqYu1nPDQQf3tEB0iwUAHCg8l\nhHStHtWAysrKsGrVKsTExGD27NmmLqfHqrimQmauHI1NreyYJd8C40Y5Y8xwCg8lhHSPHtOAGhsb\nERcXBxcXF85Vazf2dJqamjh7QTf2jG4sF4lEUKlUuJ1SqYSPj09Xlm42NFodss9W4mzxNc64q5MQ\nUcESONhbm6gyQkhf1CMakFqtxpIlS6DVarF582bY2t48PHTj3I9MJoOrqys7LpPJ4ODgwF7EIJVK\nO5zr0Wg0kMvlmDt3bjdshWmVVCpx8KQcKvXNGB0rAR8T/YdgFIWHEkJMwOzPMLe1tWHFihW4evUq\nvvnmGwwYMICzXCKRwN3dHenp6eyYXq9Heno6Jk2axI5FRETg7NmzKC8vZ8cyMzOh0Wg483qbltY2\nHMgpwa6jMk7zcR8iwvNTvOHnOZCaDyHEJMx+D+j9999HVlYW3nrrLTQ2NiI/P59dNnLkSFhZWSEh\nIQGrV6+Gq6srgoKC8NNPP6GkpASff/45O3fq1KnYtGkTEhISsGLFCjQ1NWHdunWYOXNmr7wHiGEY\nFJcpkHWqDOrWNnbc1toSk8a4YrjEgRoPIcSkzL4B/fbbbwCAjz76qMOyjIwMuLm5YebMmWhubsaW\nLVuQnJyM4cOHY/PmzWwKAgAIBAJ88803SExMxF/+8hdYWVlh+vTpWLNmTbdtS3e5rtYi61QZZOUK\nzvhwSX9MGuNC4aGEELNg9g0oMzPToHnPPvssnn322XvOcXZ2RnJysjHKMksMw6Dwaj1+O1PByW8T\n2raHh3q4UH4bIcR8mH0DIoZRqFpxKK8M8uomzvgo6QBMDHCBtYCSDAgh5oUaUA+n1zM4W3QNxwsq\nodVxw0OjQyRwG0ThoYQQ80QNqAer/yM8tOq28NAxw50wbpQzBJZmf5EjIaQPowbUA+l0epy6VIsT\n56ug09+M0RkgskH02KEY7GhnwuoIIcQw1IB6mJr6ZmSelOPareGhFjyE+A5GsPcgCg8lhPQY1IB6\niDadHjnnqnDqUi2YW8JDBzu2h4cOEFN4KCGkZ6EG1AOU16pwMFeORhU3PHSCnzMCvCg8lBDSM1ED\nMmMarQ7HzlSgQFbHGXcbZI+oYDeIhRQeSgjpuagBmam7hYeGBbhgpIcjxegQQno8akBmRt3ahqP5\n5bhY2sAZ93ARIzLIDUJbitEhhPQO1IDMBMMwuCxvxJH88g7hoRGBrvByo/BQQkjvQg3IDKjUWmTl\nleFKBTc81Htof4SPcYWtNX2bCCG9D32ymRDDMDh/pT08VKPlhodGBUswbIjoHu8mhJCejRqQiShU\nrTh4Uo6yGu5jwv3+CA+1ovBQQkgvRw2om+n1DM4U1eJ4QRXabgkPdRBaIzpEAhcnoQmrI4SQ7kMN\nqBvVKdTIzJWjur6ZHePxeAgc0R4eakkxOoSQPoQaUDfQ6fQ4ebEGuYXV0N8SHjrQwRbRwRIMovBQ\nQkgfRA2oi1XXNyPzRCnqlC3sGN+Ch7EjnRHoPQh8itEhhPRR1IC6iLatPTw0/zI3PNR5QD9Eh0jg\nKLIxYXWEEGJ6fa4BFRUV4YMPPkB+fj7s7e3xzDPPYPny5eDzjXfVWVlNEzJz5VBe17BjAr4FJvgN\ngb/XQAoPJYQQ9LEGpFAoEBsbCy8vLyQnJ6O0tBTr16+HXq/HypUrH3r9rX+Eh567LTxUMtgek4Mo\nPJQQQm7VpxrQzp070draiqSkJAiFQoSFhUGlUiEpKQlxcXEQCh/8EugrFQpk5ZVxwkOtrfgID3CF\nj3t/itEhhJDb9Knrfg8fPozw8HBOo5kxYwZaWlqQk5PzQOtsbtFi3/ES/PrbFU7zkbqK8fwUH/hS\ncjUhhNxRn2pAMpkMUqmUM+bi4gJbW1vIZLJOr+9aoxr/2ncRl+U3k6ttrS3xWKg7poW6ox8lVxNC\nyF31qUNwSqUS9vb2HcZFIhGUSmWn15d/qQYtmpvJ1T7DHBE+2gU2FB5KCCH3RZ+UD8HDRYyiMgWE\ntgJMCnTFMGcKDyWEEEP1qQYkEomgUqk6jCuVSohEnW8enm4OcB8iAp8idAghpNP61CenVCrtcK6n\nsrISarW6w7khQ1HzIYSQB9On9oAiIiLw7bffQqVSsVfC7dmzBzY2Nhg3btxd36fTtT+rp6qqqlvq\nJISQ3uDGZ+aNz9Db9akGNHfuXGzbtg0JCQmIi4uDXC5HUlISYmNj73kPUG1tLQBg3rx53VUqIYT0\nGrW1tRg2bFiHcR5za1BZH1BUVITExETk5+dDJBLh6aefRkJCwj2jeFpaWlBQUAAnJyejRvYQQkhv\nptPpUFtbCz8/P9jYdMy/7HMNiBBCiHmgM+iEEEJMghoQIYQQk6AGRAghxCSoARFCCDEJakCEEEJM\nghrQAyoqKsLChQsxevRohIeHY+PGjXe92coc7N27F0uWLMGkSZMQGBiI2bNnY/fu3R3m/fjjj5gy\nZQr8/f0xe/ZsZGdnm6Baw1RXVyMwMBDe3t64fv06O84wDDZt2oTIyEgEBARg3rx5KCwsNGGlHbW1\ntSElJQVTpkyBn58fIiIi8PHHH3PmmPt2/Prrr5g1axYCAwMxadIkrFmzBtXV1Zw55rYNJSUlePfd\nd/H444/D19cXCxYs6DDH0JpN9Rlwv22oqanB+vXr8ac//QmBgYGIjIzE66+/3uF7A7T/DC1btgyB\ngYEYP348EhMToVaru3wbbqAG9ABuPFmVx+MhOTkZy5YtQ2pqKr788ktTl3ZXW7duRb9+/bB27Vok\nJydj/PjxWLVqFbZt28bO2b17N9577z088cQT2LJlC7y8vLB48WJcunTJhJXf3aeffgo7O7sO4ykp\nKUhOTkZcXBw2bdoEOzs7xMbGsjcUm4M33ngD33//PV566SX885//xKpVqzrcJ2HO25GRkYFXX30V\ngYGBSE5OxmuvvYbc3FwsXrwYer2enWdu23D58mVkZWXBw8MD7u7ud5xjSM2m/Ay43zacO3cOBw4c\nwMyZM/H1119jzZo1OH36NJ577jnOL2parRaLFi1CRUUFNmzYgLfeegvp6el45513unwbWAzptE2b\nNjEhISFMU1MTO5aSksIEBARwxsxJXV1dh7FXX32ViYqKYl9PmTKFeeONN9jXOp2OmTlzJrNq1apu\nqbEzcnJymLFjxzLffPMNM2LECEalUjEMwzAtLS1MUFAQ89VXX7Fzr1+/zowfP5754osvTFUuR1ZW\nFjNy5Ejm8uXLd51j7tvxl7/8hZk1axZn7MCBA8yIESOYoqIihmHMcxt0Oh3794SEBGb+/Pmc5YbW\nbMrPgPttg0KhYLRaLWdMJpMxI0aMYNLS0tixXbt2MT4+PkxpaSk79uuvvzLe3t7MlStXuqb429Ae\n0APoiierdjVHR8cOY76+vqipqQEAyOVyXL16FdOmTWOXW1hYYOrUqThy5Ei31WkInU6HDz74AEuX\nLkX//v05y/Ly8qBSqTjbYWdnh6ioKLPZjv/85z+YMGECvLy87jrH3Lejra2tQ3zVjUR55o97281x\nGyws7v2RZ2jNpvwMuN82iEQiWFpyU9Y8PDxga2vL/rwD7dvg7+8PiUTCjj3yyCMQCATd9v2hBvQA\njP1kVVPJz8+Hh4cHALB1375dnp6eaGxsRH19fbfXdzc7d+6ERqO5YzafTCYDn8/vcGjC09PTbL43\nZ86cgbu7OxITExEUFITRo0dj+fLlnGP05r4dTz31FE6ePImffvoJKpUKV65cwd///ndOYzX3bbgT\nQ2vuaZ8BFy5cgFqt5mzXnbbBysoKQ4cO7bZtoAb0AIz9ZFVTyM7OxoEDB/Diiy8CaD+mDaDDc5HE\nYjFnuak1NDRg48aNWLt2LQSCjo88VyqVsLOz65DZJxaLoVarodFouqvUu6qtrUVaWhoKCwuxYcMG\nrFu3DufOncPy5cvZvQdz347Jkydj3bp1eOeddxAcHIzHHnsMOp0OX331FTvH3LfhTgytuSd9Buj1\nenz00Udwd3dHdHQ0O24O29Cn0rBJu7KyMqxatQoxMTGYPXu2qcvplA0bNmD06NGIjIw0dSkPLTk5\nmT2E6OTkhPnz5+P48eMIDQ01cWX3d/z4cbz33nt44YUXEBERgbq6Onz11VdYtmwZtm7dSqG9ZuTz\nzz9Hfn4+tm/ffsdf2kyJGtADMPaTVbtTY2Mj4uLi4OLigs8++4wdv7Gn09TUxNmGG3s+N5ab0uXL\nl5GWlobt27ezv6HduGRUpVKBz+dDJBKhubkZOp2O8yGoUChga2sLKysrk9R+K5FIBIlEwjl/FRwc\nDIFAgKKiIoSGhpr9dqxfvx7R0dFYvXo1O+bj44Np06YhIyMDU6ZMMfttuBNDa+4pnwE//PADvv32\nW3zxxRcYPXo0Z9m9tgv4ALMAAAjcSURBVMHHx6db6qNDcA+gK56s2h3UajWWLFkCrVaLzZs3w9bW\nll12o+7bt0smk8HBweGOFzF0t5KSEmi1WsyZMwdjx47F2LFjkZiYCKD9YYMffPABpFIpdDodSkpK\nOO+90/FuU/H09GQPtd3uxglmc98OmUwGX19fzphUKoWNjQ1KS0vZ1+a8DXdiaM094TNg3759+PDD\nD7F69WpMnz69w/I7bYNGo4FcLu+2baAG9AAiIiJw9OhRzm8PhjxZ1ZTa2tqwYsUKXL16Fd988w0G\nDBjAWS6RSODu7o709HR2TK/XIz09HZMmTerucu8oKCgI33//PedPXFwcgPZ7NxYtWoSgoCAIhULO\ndqjVahw8eNBstmPy5Mm4dOkS58KOEydOQKvVwtvbGwDMfjtcXFxw/vx5zlhxcTFaWlrg6uoKwPy3\n4U4MrdncPwN+//13vPbaa5g/fz4WLVp0xzkRERE4e/YsysvL2bHMzExoNJpu+/7w//rXv/61W75S\nLzJ8+HD8+9//xu+//45Bgwbh2LFj+OKLL7Bw4UKzPTfx3nvvYc+ePVi1ahXEYjGqqqrYP46OjuDz\n+ejfvz++/PJLWFhYQKfT4R//+Adyc3Oxfv36Dg3LFGxtbeHm5sb5U1VVhYyMDLz//vsYPHgwe/np\npk2bIBKJcP36daxbtw5VVVVYv379HW9c7W4jRoxAWloaDh06hAEDBqCgoADvv/8+AgICsHTpUgAw\n++3Q6XRITU2FSqWChYUFTp06hb/+9a/o168f3nzzTQgEArPcBrVajYyMDBQVFeHo0aNQKBQYMGAA\nioqK4Orqyt4MfL+aTfkZcL9tKC0txYsvvohhw4YhLi4O1dXV7M+6RqNhD6d7eHhg//792L9/P5yd\nnVFQUICPPvoIMTExePbZZ7t0G26gB9I9oAd5sqopRUdHc37TuVVGRgbc3NwAtEfxbNmyBZWVlRg+\nfDjWrFlj1ifF09LSsHbtWuTl5aFfv34Abkap7NixA42NjfDz88Pbb7+NkSNHmrjam0pKSvDhhx/i\nxIkTEAgEiImJwdq1aznn2sx5OxiGwY4dO7Bjxw7I5XLY29sjODgYq1at4txXYm7bUFZWhpiYmDsu\nu/FzYGjNpvoMuN825OTkYO3atXdcPmvWLHzyySfs66qqKiQmJiI7OxtWVlaYPn061qxZwzk835Wo\nARFCCDEJOgdECCHEJKgBEUIIMQlqQIQQQkyCGhAhhBCToAZECCHEJKgBEUIIMQlqQIR0k7S0NHh7\ne6OsrMzUpXDs2rULoaGhaGlpMfg9v/32GwIDA83qMR2k56EwUkIewo3onPvJyMjo4koeTFtbG5KS\nkrBgwYIOjwS/l7CwMLi7u2PLli14/fXXu7BC0pvRjaiEPISff/6Z8/q7775DRUVFhzvRH330UVhb\nW6OtrQ1WVlb/v727CYlqD+M4/q2UcZMY5mihLgySsKRJEcZMSDMpMVSCCkRqoRNmDgOSBi2CwEVK\nrQxDqIVpwUDRshaC2SmSEioFRcnEpEHyJSHFlGghM9xptMl7rx1ffh+YxZxz/uc8Zxbz8H/h/7Bp\n06a/GeaSnj59itPp5NmzZ0RFRS2r7f3797l+/TqGYZi+NZCsTUpAIv+j8vJyent7aWtrMzuUP3L+\n/Hm+fftGc3PzstuOjY1x6NAhamtrKSgoWIHoZL3THJDIX7LYHFBWVhbl5eUYhkFhYSHJyckUFhby\n7t07AB49ekRubi779u2juLiY4eHhgPt2dXVx7tw5Dhw4wP79+zl79izd3d1B45mdneX58+ekp6cH\nnDMMgzNnzpCamorNZiM3N5cbN274XRMZGUliYuKqHV6U1U8JSMRkHz58oLq6muzsbFwuFx6PB4fD\ngdvtprGxkVOnTlFaWsrbt2+5cuWKX9sXL15QUlLC9+/fqaysxOl04vF4KC4uZmBg4LfP7e7uZm5u\nLmCTzf7+fhwOB6GhobhcLi5dusThw4d58+ZNwD2SkpLo6ur67z+CbEhahCBissHBQdxuN8nJyQBE\nR0fjcrmoq6vjyZMnvsqp8/Pz3L59m8+fP7Njxw5+/PjB1atXycjIoLGx0Xe/kydPcuzYMRoaGrh5\n8+aSz/UWI/PuhO5lGAYWi4W7d+8G3dk5Li6OL1++MDk5SURExL96f9m41AMSMVliYqIv+QC+0slZ\nWVl+Zbu913iH8Hp7exkaGiIvL4/x8XHfZ25ujpSUFDo7O3/73MnJSSCw3Hp4eDgzMzN0dHQEjd1b\nfnpiYiLotSK/Ug9IxGQ7d+70+75161YAYmJiFj3+9etXAD5+/AhAVVXVovf1lvcO5td1SMePH8ft\nduNwOIiKiiI9PZ2cnByOHDkSsHrP23a1rOqTtUUJSMRkSyWKYMNf3j//y5cvs3v37mU/1ztkNjU1\n5bcEOywsjJaWFl69ekV7ezsdHR08fvyYgwcP0tTU5BfX1NQUgF9PTeRPKQGJrFHeyqPh4eGLrmQL\nJiEhAVgY0tu1a5ffuc2bN2O327Hb7dTU1NDU1ER9fT2dnZ1+FXI/ffrE9u3bA4bxRP6E5oBE1qik\npCTi4uK4c+cOMzMzAeeDbZOzd+9eQkNDef/+vd/xxeZz9uzZAyws3f6nnp4ebDbbckMXAdQDElmz\ntmzZwrVr1ygrKyM/P5+CggKsVisejwfDMIiPj6eurm7J9haLhYyMDF6+fElFRYXv+K1bt3j9+jWZ\nmZnExsYyPj5Oa2srMTExpKSk+K4bGxujr6+PkpKSFX1PWb+UgETWMLvdzoMHD2hoaKC5uZnp6Wms\nVis2m43Tp08HbV9UVITT6WR0dBSr1QosrL4bGRnh4cOHTExMsG3bNtLS0rh48aJvIQQsbONjsVg4\nevToir2frG/aikdkA5ufnycvL48TJ05w4cKFZbUtKioiLS2NmpqaFYpO1jvNAYlsYCEhIVRUVHDv\n3r1ll2MYHBykrKxsBaOT9U49IBERMYV6QCIiYgolIBERMYUSkIiImEIJSERETKEEJCIiplACEhER\nUygBiYiIKX4C5b3bPDX8IpYAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(thetas, label='theta')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angle (rad)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `y`" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Length (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `r`" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(rs, color='red', label='r')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Radius (mm)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also see the relationship between `y` and `r`, which I derive analytically in the book." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEXCAYAAABRWhj0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3XtYlGX+P/D3MBzkOICoHAbEAUU5\nCooHTMlDaWWbumq2qEuapKa5rWvZ1q9y263Nav2WhoIm5iHNTazNFCu1tMwDggcMRRw5DKIoMgyH\n4TAzz+8P13HHAR0UmBl4v66r65LP88zMhyflzXO471skCIIAIiIiE9iYuwEiIrIeDA0iIjIZQ4OI\niEzG0CAiIpMxNIiIyGQMDSIiMplZQyM9PR0hISFG/23dulW/jyAIWLNmDeLj4xEZGYmEhATk5uaa\nsWsios7L1twNAMBnn32GLl266L/29/fX/zk1NRXJycl4+eWXIZPJkJaWhsTEROzatQvdunUzR7tE\nRJ2WRYRGREQEnJ2djer19fVITU1FUlISpk+fDgDo378/Ro0ahc2bN+Oll15q9j3r6uqQk5ODbt26\nQSwWt1nvREQdiVarxbVr1xAeHm7wy/wtFhEazcnKykJ1dTUee+wxfc3JyQkjR47EoUOH7hoaOTk5\nSEhIaI82iYg6nC1btmDgwIFGdYsIjUceeQRKpRL+/v549tlnMW3aNACAXC6HWCxGYGCgwf5BQUHY\ns2fPXd/z1qWrLVu2wNvbu036JiLqaK5cuYKEhIRmL/+bNTS6deuGRYsWITIyElqtFrt378abb76J\nuro6JCYmQqVSwcnJyejykkQigVqtRkNDA+zt7Zt871uv8fb2hlQqbfPvhYioI2nusr5ZQ2P48OEY\nPny4/uv4+HjU19dj9erVmDlzphk7IyLquIp/LUb+nnx0D++OsKlhLXqtxY3TGDt2LJRKJUpKSuDm\n5oba2lpotVqDfSorK+Ho6NjsWQYRETXt4vcXcXLDSVRfrYZ8nxz1VfUter3FhYZIJNL/WSaTQavV\norCw0GAfuVwOmUzW3q0REVktQRCQtysPv335m77m1dcLDq4OLXofiwuNvXv3wsPDA35+foiJiYGL\niwsyMjL029VqNQ4cOGBwWYuIiJonCALO7TyH89+c19e69u6K2HmxLX4vs97TWLhwISIiIhASEgKd\nTofdu3dj9+7deP3112FjYwMHBwckJSUhOTkZEolEP7hPp9NhxowZ5mydiMgqCIKAnK05KPipQF/r\nFtoNsfNiIbZv+Rg2s4ZGr169sGPHDly5cgWCICA4OBjvvfceJkyYoN8nKSkJOp0OKSkpUCqVCA8P\nR1paGry8vMzYORGR5RN0Ak5+dhKKIwp9zTvKGwOSBsDG9v4uNIk66nKvCoUCo0ePxr59+/jILRF1\nOjqNDlnrslCaXaqv+Q3yQ//E/rARNx8Y9/rZaRGD+4iIqPVoG7TIXJOJsrNl+lrP4T0R8YcIiGxE\nd3nlvTE0iIg6kEZ1I46tOoYb+Tf0NdkYGUInhxo8nXq/GBpERB1EfVU9jn58FJVFlfpayJMh6P1E\n71YJDIChQUTUIagr1Djyf0dQfaVaXwubGgbZ6NYd08bQICKycjVlNTjyf0dQW14L4OYg6cgZkQgY\nFtDqn8XQICKyYiqFCkc+OoJ61c3pQGzENoieHQ3fAb5t8nkMDSIiK3Xj4g0cW3UMjbWNAACxnRgD\n5w1E97DubfaZDA0iIitUdrYMmWsyoW24OaGrbRdbDF44GJ7Bnm36uQwNIiIrU5pViqx1WdBpdQAA\nB1cHDF40GBJ/SZt/NkODiMiKFB4qxJktZ3BrMg9HT0cM+dMQuPRwaZfPZ2gQEVkBQRBwce9F5O7M\n1ddcerhgyEtD4Ojh2G59MDSIiCycIAjITc/Fxe8u6mvuPd0xaOGgFq+H8aAYGkREFkzQCTi16RSK\nDxfra14hXoidHwvbLu3/I5yhQURkobSNWmStzcKVU1f0Ne/+3oh5LgZiu5avhdEaGBpERBaosbYR\nx5OPo/xCub4WMCwAkdMjH3im2gfB0CAisjB1lXU4+vFRqBQqfS14bDD6TuzbahMP3i+GBhGRBakp\nq8GRj46g9nqtvhY6ORRBjwSZsavbGBpERBaisqgSRz8+ivqqm/NIiWxE6P/H/pAOsZzVRxkaREQW\n4Pq56ziefByaeg2Am/NIDXh+AHpE9DBzZ4YYGkREZnY58zKy12frpwWxc7LDoAWD4BnUtvNI3Q+G\nBhGRGV06cAlnvzirnxaki3sXDFk0BK6+rmburGkMDSIiMxAEAee+Oof8jHx9zdXHFYNfHAxHz/ab\nFqSlGBpERO1Mp9Xh9KbTKP719ihvD5kHBi0YBHtnezN2dm8MDSKidqSp1+BE6gmU5ZTpaz0ie2DA\nnAEQ25tnlHdLMDSIiNpJfVU9jq06BmWBUl+zhFHeLcHQICJqBzXXanD046OoKavR13o/3hshvwsx\n+yjvlmBoEBG1MWWhEsdWHrs9aE8kQvgz4QiMDzRvY/eBoUFE1IbKcspwIvWEwaC9mOdi4N3f28yd\n3R+GBhFRGyn6pQinN5+GoLs5BsOSB+2ZysbcDdxy9epVREdHIyQkBDU1t6/5CYKANWvWID4+HpGR\nkUhISEBubu5d3omIyLwEQUDerjyc2nhKHxhOXZ3w0CsPWXVgABYUGsuXL4eTk5NRPTU1FcnJyZgz\nZw7WrFkDJycnJCYm4tq1a2bokojo7nRaHU5tPIXz35zX1yT+Egx7ZRhcvF3M2FnrsIjQOH78OA4d\nOoRZs2YZ1Ovr65GamoqkpCRMnz4dcXFx+OijjyASibB582YzdUtE1DRNnQbHPzlusDRrt37dEPeX\nOHSRdDFjZ63H7KGh1Wrx9ttvY/78+fDw8DDYlpWVherqajz22GP6mpOTE0aOHIlDhw61d6tERM2q\nU9bh8AeHUXb29qA9/zh/DFo4yCxrebcVs4fGtm3b0NDQgISEBKNtcrkcYrEYgYGBBvWgoCDI5fJ2\n6pCI6O6qLlfh53/+jMriSn2tz/g+iJoZBRux2X/Mtiqzxl9FRQU++ugjvP/++7CzszParlKp4OTk\nBLHYcGi9RCKBWq1GQ0MD7O0te54WIurYrp+/jszVmWhUNwK4uXBS5PRIBAwLMHNnbcOsobFixQpE\nRUUhPj7enG0QEd0XxREFTm08pV8Hw9bBFgOeH4DuYd3N3FnbMVtoXLhwAenp6di8eTNUqpuLp6vV\nagBAdXU1xGIx3NzcUFtbC61Wa3C2UVlZCUdHR55lEJFZCIKAC99eMHhCqot7FwxaMAgSf4kZO2t7\nZguNwsJCNDY24umnnzbaNmLECEyePBnjx4+HVqtFYWEhZDKZfrtcLjf4moioveg0OpzectrgCSk3\nPzcMWjgIjh6Wuw5GazFbaMTExGDjxo0GtUOHDmHt2rVITU2Fv78//Pz84OLigoyMDMyfPx/AzbOR\nAwcOYOrUqeZom4g6scbaRmSmZOL6uev6Wrd+3TBw7sAO9YTU3Zjtu/T09MTgwYMNaiUlJQCAgQMH\nwtnZGQCQlJSE5ORkSCQSyGQypKWlQafTYcaMGe3eMxF1XrXXa3Fs1TFUlVbpawHDAhCRENHhnpC6\nG4uPxqSkJOh0OqSkpECpVCI8PBxpaWnw8vIyd2tE1ElUXKrA8U+O62epBYC+E/oieFywVU1r3hos\nKjQmTZqESZMmGdREIhHmzZuHefPmmakrIurMSrNKkb0+G9pGLQDAxtYG/RP7wy/Wz8ydmYdFhQYR\nkaUQBAEXv7uI3PTbE6TaO9sjdn4sPIOte9LBB8HQICK6g06jw5nPz6DolyJ9zaWHCwYtGATn7s5m\n7Mz8GBpERP+jsbYRmWsycf387SekuvbuioHzBsLemWPDGBpERP9VU1aDY6uOofpqtb4mHSJF1Iwo\n2Nh2niek7oahQUQEoDyvHJlrMtFQ06Cv9X2qL4If63xPSN0NQ4OIOr3iw8U4vfm0fg4pG1sbRD8b\nDd+BvmbuzPIwNIio0xIEAed2nkP+3nx9zcHNAbHzYuEh87jLKzsvhgYRdUqaeg2yP83GlVNX9DU3\nPzfEvhALp67GS0/TTQwNIup01DfUOPbJMagUKn2tR0QPxDwX02nmkLpfPDpE1KlUXKrA8eTjqFfd\nnhIk6JEg9JvUDyIb3vC+F4YGEXUaJcdKcPKzk9Bpbt7w7uir7LUFhgYRdXiCIOD81+dxYc8Ffc3e\n2R4D5w5E1z5dzdiZ9WFoEFGHpqnTIHu94Q1vVx9XxL4QC+dunXtKkPtxX6Gh0WggEokMlmAlIrI0\nteW1OP7JcahKbt/w7h7eHTHPxcDO0c6MnVkvk0IjMzMT+/btQ3Z2NvLz81FTUwMAcHFxQVBQEKKj\nozF69GgMHDiwTZslIjJV+YX/jvCuvj3CWzZGhtDfh/KG9wNoNjQ0Gg22b9+ODRs2oKioCBKJBGFh\nYXj88cchkUggCAJUKhUUCgXS09ORlpYGqVSKZ599FlOnToWdHVOciMyj8FAhznx+BoJOAHBzhHdk\nQiT84/zN3Jn1azY0HnnkETQ2NmLixIkYN24cwsLC7vpGOTk5yMjIwOrVq/Hpp59i//79rd4sEdHd\n6LQ6nN1+FgU/FuhrDq4OGDhvIDyDOu8aGK2p2dCYP38+nnrqKdjbmzYVcHh4OMLDw/Hiiy/i66+/\nbrUGiYhM0VDdgBOpJwymNJf4SxA7PxaOno5m7KxjaTY0pkyZcl9vaG9vf9+vJSK6HyqFCseTj6O2\nvFZf8x3oi/5/7A+xPR/YaU185JaIrFppVimy07KhbdDqa5zSvO20KDTUajW+//57KBQKqFQqCIJg\nsF0kEmHp0qWt2iARUVMEQcD5/5zHhd23B+zZOtgienY0vKO8zdhZx2ZyaBw+fBh/+tOfoFKpmt2H\noUFE7aFR3Yjs9dm4evqqvubczRmx82Ph6utqxs46PpNDY9myZXB2dsaKFSsQFRUFFxeXtuyLiKhJ\n1VeqcTz5uMGSrN1CuyHmuRiu4d0OTA6NK1eu4C9/+QuGDRvWlv0QETXryqkryF6fDU2dRl8LHhuM\nvhP6csBeOzE5NPr164fKysq27IWIqEmCIODCtxdw/pvz+prYToyoP0bBL9bPjJ11Pjam7vjqq6/i\niy++wNGjR9uyHyIiA43qRmSuzjQIDKeuThj2yjAGhhmYfKYRFRWFV155Bc8++yx8fHzg4+MDGxvD\nzBGJRPjss89avUki6pyqSquQuTrT4P6FV18vDJgzAPYuvH9hDiaHxs6dO/Haa6/pn3uurq6+xyuI\niO5faXYpTqadhKb+9v0LrrBnfiaHxsqVKxEaGork5GR07969LXsiok5M0Ak49/U55Gfk62u8f2E5\nTA6NiooKzJkzh4FBRG2moboBWeuycC33mr7m5OWE2HmxcJO6mbEzusXk0BgwYADy8/PvvaOJMjIy\nsGHDBly6dAm1tbXw9fXFU089heeee04/SaIgCEhJScHWrVtRUVGBiIgIvP766+jXr1+r9UFElkFZ\nqETmmkyob6j1te7h3REzOwZ2TlxqwVKY/PTUW2+9hV9//RVpaWmoqqp64A9WKpUYPHgw/v73v2Pt\n2rX4/e9/jzVr1uCf//ynfp/U1FQkJydjzpw5WLNmDZycnJCYmIhr167d5Z2JyNoU/VKEX5b/YhAY\nfcb3waAFgxgYFkYk3DmBVDNiY2Oh0WhQV1cHAHBycjJa7lUkEj3QI7krVqzAli1bcPz4cTQ0NCAu\nLg7PPvssFixYAACora3FqFGj8PTTT+Oll16663spFAqMHj0a+/btg1Qqve+eiKjtaBu1yNmWg6Kf\ni/Q1O0c7RM+KRo/IHmbsrPO6189Oky9PjR49us1njHR3d0djYyMAICsrC9XV1Xjsscf0252cnDBy\n5EgcOnTonqFBRJattrwWJ1JOQFmo1Nfc/NwwcO5AOHd3NmNndDcmh8b/XjZqTVqtFg0NDTh79iw2\nbdqEZ555BiKRCHK5HGKxGIGBgQb7BwUFYc+ePW3SCxG1j7KzZcj+NBsNNbfX7/Yb5IfI6ZGwdeCK\nDZbM7P93+vfvj4aGm39xJkyYgJdffhkAoFKpmrwEJpFIoFar0dDQYPKqgkRkGQSdgLxv83Dh2wv6\npRVsxDYInRKKwIcDuf6FFWj2Rvh3331332/aktdu27YNW7ZswdKlS7Fv3z787W9/u+/PJSLLVV9V\nj6MfH0Xerjx9YHRx74K4v8Sh18heDAwr0eyZxhtvvIEVK1Zg6tSpGDduHHx8fO76RgqFAhkZGfj3\nv/8NlUqFRx991KQGwsLCAAADBw6Eh4cHXnnlFcyaNQtubm6ora2FVqs1ONuorKyEo6MjzzKIrEiF\nvAInUk9AXXH76Sivvl6IeS4GDq4OZuyMWqrZ0Ni3bx/S0tKQkpKC5cuXIyAgAGFhYZBKpXBzc4Mg\nCFCpVFAoFMjJyYFCoYBEIsH06dORmJh4X82EhoYCuBlAMpkMWq0WhYWFkMlk+n3kcrnB10RkuQRB\nwKX9l/Dbl79B0N1+ULP3470R8mQIpwOxQs2GhrOzMxYsWIDnn38e+/fvx4EDB5CdnY09e/boTy1F\nIhECAgIQExODJUuWYOTIkbCzu/9nqrOysgAAUqkUPXr0gIuLCzIyMjB//nwAN5ebPXDgAKZOnXrf\nn0FE7UNTp8HJz06iNKtUX7Nz+u/jtBF8nNZa3fNGuJ2dHcaOHYuxY8cCuPm00611NSQSidGNalPN\nnj0bcXFxCA4OhlgsRlZWFtLS0vD4448jICAAAJCUlITk5GRIJBLIZDKkpaVBp9NhxowZ9/WZRNQ+\nVAoVMlMyUVNWo6+593THgKQBcPJyMmNn9KBa/PSUWCyGp6fnA39wREQEdu7ciZKSEojFYvj7++PP\nf/4zpk2bpt8nKSkJOp0OKSkpUCqVCA8PR1paGry8vB7484mo9QmCgKKfi5CzLQc6jU5fD3w4EGFT\nwmBja/IkFGShTB4Rbm04IpyofWnqNTiz5QwURxX6mq2DLSJnRHJ2WivSaiPCiYiaU3W5Cpkpmai+\ncnudHTc/Nwx4fgBceriYsTNqbQwNIrpvgiBA8asCZz4/A22jVl/3j/NHxDMRENvf3z1PslwMDSK6\nL5p6Dc58fgaKI7cvR4ntxYj4QwT8h/qbsTNqSwwNImoxlUKFE6knDNbudvVxxYDnB8DVx9WMnVFb\nY2gQkckEQUDRoSKc3X7W6HJU+LRwTjbYCbTo//ChQ4fw5Zdfori4GCqVCnc+eCUSifDDDz+0aoNE\nZBka1Y04vfk0Lmde1tfE9mJEJkRCOoRPKHYWJofGunXr8OGHH6Jr166IjIxESEhIW/ZFRBZEWaDE\nibUnUHu9Vl9z83NDzJwYXo7qZEwOjY0bN2Lw4MFYu3btA00VQkTWQxAEyL+XI3dnrsHcUT1H9ETY\n1DCI7fh0VGdjcmioVCqMGzeOgUHUSdRX1eNk2kmUnS3T12y72CJqRhR8B/qasTMyJ5NDIyIiAgUF\nBW3YChFZimu515C9Phv1qnp9zT3QHQPmcO6ozs7kiWDeeOMNZGRkYPfu3W3ZDxGZkU6jQ256Lo78\n3xGDwAh6NAjDlgxjYFDzZxoTJ05ssr548WK89dZb8Pb2NprhViQSIT09vXU7JKJ2UVNWg6xPs6As\nUOprDq4O6P9sf3QP627GzsiSNBsaLi7G88W4uLjA358jPYk6EkEQoDiiQM7WHGjqNfp697Du6J/Y\nHw5uXFmPbms2NDZt2tSefRCRGTSqG3FmyxmUHC/R12zENug7sS9kY2Rct5uMmHxP46uvvoJCoWh2\ne0lJCb766qtWaYqI2t6Nizdw8O2DBoHh0sMFDy19CEGPBDEwqEkmh8arr76K7OzsZrefOnUKr776\naqs0RURtR9AJOP/NeRx+/zBqy28P1gsYFoDhrw2HJEBixu7I0pn8yO291mqqra2976Vfiah91Fyr\nQfb6bFTIK/Q1Oyc7RE6PhO8Ajr2ge7traJw7dw7nzp3Tf52ZmQmtVmu0n0qlwrZt29CrV6/W75CI\nHtitdS9ythne7O7apyuiZ0XD0cPRjN2RNblraPzwww9YtWoVgJuP037xxRf44osvmtxXIpFg+fLl\nrd8hET2QhpoGnN58GqVZpfqayEaEkN+FIHhsMEQ2vHdBprtraEybNg1jxoyBIAiYOHEiXnrpJcTH\nxxvt5+TkBD8/P16eIrIw1367hpMbTqKusk5fc+nhgujZ0XDv6W7Gzsha3TU0vLy84OXlBeDmhIVB\nQUHo2rVruzRGRPdP26jFuZ3nIN8nN6j3HNEToZNDue4F3TeT/+YMGjSoLfsgolZSWVSJ7PXZqCqt\n0tccXB0QNTMKPSJ7mLEz6ghMDo2ZM2fedbtIJIKDgwO8vb0xePBgjB07Fra2/G2GqL0IOgH5e/Nx\n/j/nDaYx7xHRA1Ezoziym1pFix65vXr1KoqKiiCRSODn5wfg5qC+yspK9OzZEy4uLjh16hS2b9+O\n1NRUpKWlwdPTs82aJ6KbaspqkJ1m+CitrYMtQqeEIuChAA7Uo1Zj8uC+RYsWobKyEv/85z9x+PBh\npKenIz09HYcPH8a7776LyspK/L//9/9w5MgRvPPOO8jPz8eKFSvasneiTk8QBBQeLMRPb/9kEBge\nMg+MeH0Eeg7vycCgVmXymcby5csxadIkTJgwwaAuFosxceJE5OXl4d1338UXX3yBSZMm4eTJk9i/\nf3+rN0xEN9Up63Bq4ymDRZJENiKEPBmC4HF8lJbahslnGufPn4dU2vzi8VKp1GAgYFhYGCorKx+s\nOyIyIggCFEcV+HHZjwaB4erjiuF/HY7ej/dmYFCbMflMo1u3bvjuu+/wzDPPwMbGMGt0Oh0yMjL0\nj+cCgFKphETCOWyIWlN9VT3ObDmD0uz/GagnEkE2RoaQp0K4Zje1OZND49lnn8Xbb7+NhIQEPP30\n0/p1NYqKivDFF1/g1KlTeP311/X77927FxEREa3fMVEnVZpditObT6OhukFfc/JyQv/E/ujam+On\nqH2YHBoJCQkQiUT4+OOPsXTpUv3NNUEQ4O7ujtdffx0JCQkAgIaGBixZsuSul7P27NmDr7/+GmfP\nnkV1dTV69eqFWbNmYfz48Qb7bd++HevWrUNpaSl69+6NJUuWYOjQoffzvRJZpYaaBuRsy0HJsRKD\nes/h/x2o14WPtlP7adHftj/84Q+YMmUKcnJycPnyZQCAr68vwsPDYWdnp9/P3t7+nj/YN2zYAKlU\nildffRUeHh44ePAgFi9ejIqKCsyYMQMAsGvXLrz55ptYsGABBgwYgPT0dDz//PP48ssv0adPn5Z+\nr0RW58qpKzi9+bTBet1d3LsgamYUl2Als2jxryh2dnaIjo5GdHT0A33w6tWrDcZwDB06FGVlZUhL\nS9OHxsqVKzFhwgS88MILAG6OSs/NzUVqaio++OCDB/p8IkvWWNuInC9yoDhiuPCZdIgU4U+Hw87J\nrplXErWtFodGfn4+iouLm30y6s5HcpvT1KC/fv36Ye/evQCA4uJiFBQU4LXXXtNvt7GxwdixY7kU\nLXVoV09fxenNpw0mGXRwc0DUDE4DQuZncmgUFRVhyZIlOH36dLMLMolEIpNDoyknT57Ur8khl9+c\naE0mkxnsExQUBKVSiRs3bnC0OXUoDTUNOPvFWSiO3nF2MViKsKfDYO9sb6bOiG4zOTTeeOMN5OXl\n4a9//SsGDhwINze3Vm3k119/xQ8//IB33nkHAPRnMnd+zq3HeCsrKxka1GGUZpfizOdnDO5dOLg5\nIHJ6JLyjvM3YGZEhk0MjKysLSUlJ+vsNrUmhUGDx4sUYPXo0Jk2a1OrvT2Sp6qvqkbMtB5czLxvU\neXZBlsrk0HB3d2+TwXpKpRJz5syBr6+vwc3tW59VVVVlcLZx6wyEAwfJmgmCgMvHLyNnWw4aam6P\nu+ji3gWRCZG8d0EWy+RpRJ5++mn85z//aXKN8PulVqsxd+5cNDY2IiUlBY6Ot9cpvnUv49a9jVvk\ncjnc3d15aYqslrpCjePJx5H1aZZBYPjH+ePhNx9mYJBFM/lMo0+fPti3bx8mTpyIyZMnw8fHx2g6\nEQAYPXq0Se+n0WiwaNEiFBQUYNu2bUYrAvr7+yMwMBAZGRkYPnw4gNvTldz6msiaCIKAokNF+G3H\nb9DUafR1R09HRE6P5LgLsgomh8bChQv1f751s/pOIpEIubm5Jr3fsmXL8NNPP+G1116DUqnEyZMn\n9dtCQ0Nhb2+PhQsXYsmSJfDz80NMTAy++uorFBYW4sMPPzS1bSKLUFNWg1ObTqE8r9ygHvhwIPpN\n7MdR3WQ1TP6bunHjxlb94F9++QUA8I9//MNo2759+yCVSjF+/HjU1tZi7dq1SE5ORu/evZGSksLR\n4GQ1dFod5N/Lcf6b89BpdPq6Sw8XRM6I5JxRZHXMtka4qWttTJ06FVOnTm3VzyZqD8pCJU5tPAWV\nQqWviWxECB4bjN5P9OaMtGSVWnxOXFVVhVOnTuHGjRuIi4vTT4eu0+mavMdB1Nlo6jU4//V5XNp/\nyWAgrCRAgqiZUZD488k/sl4tCo1PPvkEa9euRV1dHUQiEdavXw8vLy9UVFRg5MiRWLJkiX6mW6LO\nqCynDKe3nIb6hlpfE9uJEfJUCGSjZVwciayeyacGmzZt0k8guHLlSoPfoDw8PDBmzBhkZGS0SZNE\nlq6usg4n1p7A0ZVHDQKjW79uiH8zHkGPBDEwqEMw+Uxjy5YteOKJJ/DWW2+hoqLCaHu/fv1w5MiR\nVm2OyNLdeow2Nz0XjepGfd3e2R5hU8PgN9hPv/YMUUdgcmiUlJRg1qxZzW53cXHhmuDUqahKVDi9\n+TQq5Ia/REmHSBE2JQz2LpwChDoek0PD09MTZWVlzW7Pzc2Fj49PqzRFZMk09Rpc+PYCLn5/EYLu\n9mVa5+7OiEyIhFdfLzN2R9S2TA6NMWPGYOvWrZg0aZLBdB8AcOzYMezYsQOJiYmt3R+RRbl6+ipy\ntuWgtrxWX7MR2yBobBB6P87HaKnjMzk0XnzxRRw7dgy/+93vEBsbC5FIhLS0NKxevRqZmZno06cP\n5s6d25a9EpmN+oYaOdtycOWYMSAKAAAasklEQVTUFYN6195dEZEQAVcfVzN1RtS+TA4NiUSC7du3\nY/369fjuu+/g4OCAI0eOICAgAPPmzcNzzz1ndAZCZO10Gh3k++TI25UHbcPtyTrtne0ROjkU0qFS\n3uimTqVF4zQcHR3xwgsv6Nfs/l9arRZqtZrBQR1GeV45znx+BlWlVQb1gIcC0G9SP651QZ1Sq82S\nlpqaio8//tjkCQuJLFVdZR1yd+QaLbvq5ueGiIQIeAZxWn7qvDi1JtF/CToBlw5cwvn/nDeYutzW\nwRYhvwtBr1G9OECPOj2GBhGA8gv/vRR12fBSlO8AX4ROCYWjBy+7EgEMDerk6pR1+G3Hbyg5VmJQ\nd+nhgvBnwtGtXzczdUZkmRga1CnpNDpc2n8JebvyoKm/fSlKbC9Gnyf6QDZGBhtbztpMdKe7hsa5\nc+dMfqPr168/cDNE7aHsbBnOfnEW1VerDeq8FEV0b3cNjQkTJpj8DLogCHxenSxazbUa/Pbv34wG\n6Ln6uCJ8Wjin/yAywV1D4913322vPojajKZOg/yMfFz8/qLBkqu2XWwR8mQIAkcGwkbMS1FEprhr\naEycOLG9+iBqdYIgoORoCXLTc1FXWWewzT/OH/0m9oODm4OZuiOyTrwRTh1ShbwCZ7efRcUlw2nL\nPXp5IHxaONwD3c3UGZF1Y2hQh6KuUCM3PdfoEdouki7oN6kfF0UiekAMDeoQNPUaXPzuIi7uvQht\n4+2JBW1sbRD0SBCCxwXDtgv/uhM9KP4rIqsmCAIURxQ499U51CkN71v4xPgg9PehcPJyMlN3RB0P\nQ4OsVnleOc7++ywqiwyXGZb4SxA2NQxd+3Q1U2dEHRdDg6xO9dVq5O7INRpv4eDmgL4T+sJ/qD8n\nFiRqIwwNshr1VfW48O0FFPxUYLA2t9hODNkjMgSP5X0LorbGf2Fk8bSNWlzadwkX9lwwmLIcAKSD\npeg7sS+n/iBqJwwNsliCToDiqALnvz4PdYXaYFvXPl0ROjkU7j053oKoPTE0yOIIgoBrv11Dbnou\nVAqVwTaXHi7o9/t+6BHZg+MtiMzArKFRWFiITz/9FNnZ2cjPz8fAgQOxadMmg30EQUBKSgq2bt2K\niooKRERE4PXXX0e/fv3M1DW1JWWhErk7cnH9vOGsyQ6uDujzZB8EPBTAeaKIzMisoXHhwgX89NNP\niIqKgkajaXKf1NRUJCcn4+WXX4ZMJkNaWhoSExOxa9cudOvGBXI6ipqyGpz7+hwuZ142qIvtxQh6\nNAhBjwTxJjeRBTDrv8JRo0ZhzJgxAIAXX3wRFRWG8wTV19cjNTUVSUlJmD59OgCgf//+GDVqFDZv\n3oyXXnqp3Xum1lVXWYe8XXko+rnI4IkokY0IAQ8FIOTJEE4qSGRBzBoaNjZ3v8yQlZWF6upqPPbY\nY/qak5MTRo4ciUOHDjE0rFhjbSPyM/Jxaf8lg2k/gJsjuftO6AuXHi5m6o6ImmPR5/tyuRxisRiB\ngYEG9aCgIOzZs8c8TdED0dRrcGn/JVz87iIaaxsNtnXt0xWhvw/lDLREFsyiQ0OlUsHJyQlisdig\nLpFIoFar0dDQAHt7ezN1Ry2h0+hQeKgQF3ZfQL2q3mCbxF+CvhP7oltoNz4RRWThLDo0yPoJOgHF\nvxYjb1ce1DcMx1o4d3dG36f6wmeAD8OCyEpYdGi4ubmhtrYWWq3W4GyjsrISjo6OPMuwYIJOwOXM\nyzj/zXnUlNUYbHP0cETvJ3rDP86fj88SWRmLDg2ZTAatVovCwkLIZDJ9XS6XG3xNlkMQBJRmlSLv\nmzxUlVYZbHNwdUDwY8HoOaInxHbiZt6BiCyZRYdGTEwMXFxckJGRgfnz5wMA1Go1Dhw4gKlTp5q5\nO/pfgiDg6qmrOP/NeaNR3HZOdgh6NAi9RvWCrYNF/5Ujonsw679gtVqNn376CQBw9epVVFdXIyMj\nAwAQHx8PR0dHJCUlITk5GRKJRD+4T6fTYcaMGeZsnf5LEARcPX0Ved/kobLYcF0L2y62kI2WQTZG\nBjsnOzN1SEStyayhUV5ejkWLFhnUbn29b98+SKVSJCUlQafTISUlBUqlEuHh4UhLS4OXl5c5Wqb/\n0ofFrjyjRZDE9mL0GtkLQWODYO/M+05EHYlZQ0MqleL8+fN33UckEmHevHmYN29eO3VFd3O3Mwux\nnRiBDwci6NEgjuIm6qB4gZlMIggCrmRfQd63eUb3LMR2YvSM74ngscEMC6IOjqFBdyXoBFw+cRkX\ndl9A1WXDp6EYFkSdD0ODmqTT6lBytAQX9lwwGmchthcjMJ6XoYg6I4YGGdA2alH8SzEufncRteW1\nBttsHWwRODIQsjEyOLgyLIg6I4YGAQA0dRoUHizExe8vGs0NZedoh16je6HXqF58Goqok2NodHIN\n1Q24tP8SLh24ZDTrrL2LPWSjZQgcGQg7R46zICKGRqdVW14L+fdyFP1cZLSeRRf3Lgh6NAgBDwVw\nBDcRGeBPhE5GpVDh4ncXUXK8xGClPODmrLPBY4MhHSKFjS0nEiQiYwyNTkAQBJTnlePi3osoO1tm\ntF3iL0HwuGD4xPhAZMMpyomoeQyNDuzWGAv593IoC5VG271CvBA8Lhhe/by4ngURmYSh0QFp6jQo\n+qUIl/ZdMnpsViQSwTvaG8Fjg7msKhG1GEOjA1FXqHFp/yUUHSpCo9rwSSixnRjSoVIEPRIE5+7O\nZuqQiKwdQ6MDUBYoIf9BjssnLhvd3LZ3tkfgyEAEPhzIAXlE9MAYGlZK0AkozS7FpX2XcOPiDaPt\nLj1cIBsjg3SIFGJ7rpJHRK2DoWFlGmoaUPRzEQoOFEBdoTba3rVPVwQ9EoTuEd15c5uIWh1Dw0pU\nXa7Cpf2XoDiiMBqMZyO2gW+sL2RjZJD4S8zUIRF1BgwNCyboBFw5dQWX9l9CeV650XYHVwf0HNET\nPeN7ooukixk6JKLOhqFhgeqr6lH0cxEKfyps8hKUxF+CXqN6wTfWF2I73q8govbD0LAQgiBAeUmJ\ngh8LcPnEZeg0OoPtIhsRvPt7o9eoXvAM9uT9CiIyC4aGmWnqNSg5WoKCnwqMllEFbl6CChgegJ4j\nesLRw9EMHRIR3cbQMBOVQoXCQ4VQHFFAU6cx2u4h80Dgw4HwHeDLyQOJyGIwNNqRtkGLyycuo/Bg\nISrkFUbbxXZi+A3yQ+DDgZAE8CkoIrI8DI12oFKoUPRzERRHFEbTewA3B+L1jO8J/6H+sHPiYkdE\nZLkYGm1EU6dByfESFP1cBGWB8QyzNmIb+MT4oOeInvDszRvbRGQdGBqtSBAEVMgrUPRzEUpPlEJT\nb3yvwrm7M3oO7wnpUCnngiIiq8PQaAV1lXVQHFGg+JdiVF+tNtpuY2sDn2gfBDwUgK4hXXlWQURW\ni6Fxn3QaHa6evoriw8UoO1tmNLssALj6uiLgoQBIh0hh72xvhi6JiFoXQ6MFBEFAZWElin8tRsmx\nEjTWGt/UtnWwhd8gP/gP84d7oDvPKoioQ2FomEB9Qw3FUQUURxSovmJ8+Qm4ObtswLAAeEd7w9aB\nh5WIOiar+OmWn5+Pt99+GydPnoSrqyumTJmCBQsWQCxuu3mXGtWNKM0qheKIosnJAgHAqasTpEOl\n8B/qDycvpzbrhYjIUlh8aFRWViIxMRHBwcFITk5GUVER3nvvPeh0Orz00kut+lk6jQ5Xz1xFybES\nXD191Wj+J+Dm5SefAT6QDpGiax/e1CaizsXiQ2Pbtm2or6/HqlWr4OLigmHDhqG6uhqrVq3CnDlz\n4OLi8kDvL+gElOeVo+RYCUqzS5u8TyESieDVzwvSIVJ49+flJyLqvCz+p9/Bgwfx0EMPGYTDE088\ngQ8++ADHjh3DqFGjWvyet2aULTlegsuZl1Gvqm9yP4m/BNIhUvjG+nK9CiIiWEFoyOVyDBkyxKDm\n6+sLR0dHyOXyFoeGqkSFzDWZqCmraXK7k5cT/Ab5wW+QH1x9XO+7byKijsjiQ0OlUsHV1fiHt5ub\nG1Qq46nE70X+g9woMBzcHOA7wBd+g/zg3ouPyRIRNcfiQ6O1eUd5Q3FEAdsutvCJ8YFfrN/NG9o2\nDAoionux+NBwc3NDdbXx2AiVSgU3N7cWv593f288kfwEIIBBQUTUQhYfGjKZDHK53KBWWloKtVoN\nmUx2X+8pEokA5gURUYtZfGiMGDECn376Kaqrq/VPUO3evRtdunTBoEGDmn2dVqsFAFy5cqVd+iQi\n6ghu/cy89TP0ThYfGtOmTcOmTZuwcOFCzJkzB8XFxVi1ahUSExPvOkbj2rVrAICEhIT2apWIqMO4\ndu0aevbsaVQXCYJgPD2rhcnPz8ff/vY3nDx5Em5ubpg8eTIWLlx412lE6urqkJOTg27durXpdCNE\nRB2JVqvFtWvXEB4eji5djMenWUVoEBGRZbAxdwNERGQ9GBpERGQyhgYREZmMoUFERCbrkKGxZ88e\nzJ07F8OHD0d0dDQmTZqEXbt2Ge23fft2PProo4iIiMCkSZPw66+/mqFb65SRkYFp06Zh8ODBiIiI\nwNixY5GcnIyGhgb9PoIgYM2aNYiPj0dkZCQSEhKQm5trxq6t19WrVxEdHY2QkBDU1NyeO43H+P6l\np6cjJCTE6L+tW7fq9+HxNWbx4zTux4YNGyCVSvHqq6/Cw8MDBw8exOLFi1FRUYEZM2YAAHbt2oU3\n33wTCxYswIABA5Ceno7nn38eX375Jfr06WPm78DyKZVKDB48GLNnz4arqytOnz6NVatW4fr163jj\njTcAAKmpqUhOTsbLL78MmUyGtLQ0JCYmYteuXejWrZuZvwPrsnz5cjg5OaG2ttagzmP84D777DOD\nR0v9/f31f+bxbYLQAZWXlxvV/vznPwsjR47Uf/3oo48KS5cu1X+t1WqF8ePHC4sXL26XHjuif/3r\nX8KAAQMEnU4n1NXVCTExMcLKlSv122tqaoTBgwcL//rXv8zYpfU5duyYEBsbK6xbt07o06ePUF1d\nLQiCwGP8gHbs2GFwPO/E49u0Dnl5ytPT06jWr18/lJWVAQCKi4tRUFCAxx57TL/dxsYGY8eOxaFD\nh9qtz47G3d0djY03Vz7MyspCdXW1wTF2cnLCyJEjeYxbQKvV4u2338b8+fPh4eFhsI3HuG3x+Dat\nQ4ZGU06ePIlevXoBgH4CxDsnPAwKCoJSqcSNGzfavT9rpdVqoVarkZmZiU2bNuGZZ56BSCSCXC6H\nWCxGYGCgwf5BQUFGE1BS87Zt24aGhoYmp8PhMW4djzzyCEJDQzF27Fhs27ZNX+fxbVqHvKdxp19/\n/RU//PAD3nnnHQBAZWUlABhNrS6RSPTbmzpbIWP9+/fX3/yeMGECXn75ZQA3p653cnIymsJFIpFA\nrVajoaEB9vb27d6vNamoqMBHH32E999/H3Z2dkbbeYwfTLdu3bBo0SJERkZCq9Vi9+7dePPNN1FX\nV4fExEQe32Z0+NBQKBRYvHgxRo8ejUmTJpm7nQ5n27ZtUKvVOHPmDD755BP87W9/w1tvvWXutjqE\nFStWICoqCvHx8eZupUMaPnw4hg8frv86Pj4e9fX1WL16NWbOnGnGzixbhw4NpVKJOXPmwNfXFx98\n8IG+fuuMoqqqyuBs49YZyK3tdG9hYWEAgIEDB8LDwwOvvPIKZs2aBTc3N9TW1kKr1Rr8plZZWQlH\nR8dO+RtaS1y4cAHp6enYvHmzflljtVoNAKiuroZYLOYxbgNjx47Fnj17UFJSwuPbjA4bGmq1GnPn\nzkVjYyNSUlLg6Oio33brXoZcLoefn5++LpfL4e7uzktT9yk0NBTAzbM7mUwGrVaLwsJCg3tHcrn8\nvhfP6kwKCwvR2NiIp59+2mjbiBEjMHnyZIwfP57HuJWJRLdXZ+Pf4aZ1yBvhGo0GixYtQkFBAdat\nW4euXbsabPf390dgYCAyMjL0NZ1Oh4yMDIPTVWqZrKwsAIBUKkVMTAxcXFwMjrFarcaBAwd4jE0Q\nExODjRs3Gvw3Z84cADfHDsyePZvHuA3s3bsXHh4e8PPz4/FtRoc801i2bBl++uknvPbaa1AqlTh5\n8qR+W2hoKOzt7bFw4UIsWbJE/5fjq6++QmFhIT788EMzdm49Zs+ejbi4OAQHB0MsFiMrKwtpaWl4\n/PHHERAQAABISkpCcnIyJBKJfmCUTqfTD7Ck5nl6emLw4MEGtZKSEgA3LwU6OzsD4DF+EAsXLkRE\nRARCQkKg0+mwe/du7N69G6+//jpsbGzg4ODA49uEDhkav/zyCwDgH//4h9G2ffv2QSqVYvz48ait\nrcXatWuRnJyM3r17IyUlhaPBTRQREYGdO3eipKQEYrEY/v7++POf/4xp06bp90lKSoJOp0NKSgqU\nSiXCw8ORlpYGLy8vM3besfAY379evXphx44duHLlCgRBQHBwMN577z1MmDBBvw+PrzEuwkRERCbr\nkPc0iIiobTA0iIjIZAwNIiIyGUODiIhMxtAgIiKTMTSIiMhkDA2iZowaNQpLly7Vf31reVCFQtHu\nvaxZswZPPvkkLOkJ+WnTpuH99983dxvUzhgaZDXuXNM5LCwMDz/8MJYtW6afbLIjqqqqwvr16/Hc\nc88ZzI1kbs899xw+//xzlJeXm7sVakcdckQ4dWwvvfQSfHx8UFdXh6NHj+Lzzz9Hbm4utm7d2qY/\nVJ966ik88cQT7T676ZdffglBEAxWkLMEo0aNgrOzM7Zu3YoFCxaYux1qJwwNsjrx8fHo168fAOhn\ngf32229x5swZREZGttnnisViowV52kN6ejrGjBljcVNx31oi+euvv8YLL7xgUWdB1HZ4eYqs3oAB\nAwAARUVFBvUdO3Zg5syZGDp0KMLDw/H444/j888/N3q9IAhITk7GiBEjEBUVhRkzZuDChQtG+zV1\nTyMkJAQrV6402vfO+yGNjY1YtWoVHn30UURERGDw4MF45pln9POkNae4uBh5eXkYOnSoQV2hUCAk\nJAQbNmzAhg0bMGrUKPTv3x/PP/88bty4AY1Gg/fffx9xcXGIjo7G0qVLUV9fb/AeISEh+Mc//oFv\nvvkG48aNQ1RUFBISElBQUAAAWLduHR5++GFERkZi7ty5UCqVRv3FxcWhqKgIeXl5d/0+qOPgmQZZ\nvVuzv965fO/WrVvRu3dvjBo1Cra2tjhw4ACWLVsGQRAM1tz+6KOPsHr1aowcORLDhw/H2bNnMWvW\nLDQ2NrZaj6tWrcKnn36KP/zhD+jduzeqqqpw5swZnD17FsOGDWv2ddnZ2QBuL3Z1p507d0Kn02Hm\nzJm4fv061q9fj6VLl8Lb2xvFxcV44YUXcObMGezcuRP+/v544YUXDF5/9OhR7Nu3D8888ww0Gg1S\nUlKwYMECjB8/Ht9//z1mzZoFhUKBjRs3Yvny5folk28JDw8HcHNa/JCQkAc5RGQlGBpkdVQqFW7c\nuIG6ujocO3YMW7duhaenJ2JjYw3227x5M7p06aL/evr06Zg9ezbS0tL0oXHjxg2sW7cOo0ePxief\nfKK/xLJixQqsWbOm1Xr+8ccfMWXKFPz1r39t0evkcjmAm2uUNKW8vBwZGRlwcXEBcHNVv61bt2LQ\noEHYuHGj/vspKCjAzp07jUKjoKAAe/fuhY+PDwDA1tYWH3zwAXbu3IlvvvlGf0msvLwc33zzDZYt\nW2awXnmPHj1gZ2eHixcvtuj7IuvFy1NkdW5dcho5ciReeeUVSKVSpKamGqzOCMAgMKqqqnDjxg0M\nGjQIxcXFqKqqAgAcPnwYjY2NmDFjhsE1+T/+8Y+t2rObmxtOnTqFK1eutOh1SqUSDg4OcHBwaHL7\nuHHj9IEBAFFRUQCAiRMnGnw/kZGRKC0thU6nM3j9sGHD9IHxv68fP368wT2UyMhINDQ04Nq1a0Y9\nSCQSVFRUtOj7IuvFMw2yOsuWLUNAQACUSiW2bduG/Px8o8AAgBMnTmDlypU4efKkfn3tW6qqquDq\n6orLly8DAHr27Gmw3dPTs1XXin/xxRcxf/58PPzwwwgNDcXw4cPx5JNPIjg4+J6vvdvYDF9fX4Ov\nXV1dAcAgCG7VNRoNampq9Pvc7fXe3t5N1lUqldFrLGnsCLU9nmmQ1YmKikJcXBwef/xxrF27FhKJ\nBH/5y18MfosuKipCYmIiKioqsHTpUqSmpiItLQ2JiYkAYPQbd2vTarUGX8fGxuL777/HO++8g169\nemHr1q146qmnsGPHjru+j7u7OxoaGlBXV9fkdhubpv8JN1e/8wd8c/s195RYUwGhUqng4eHR5P7U\n8TA0yKo5ODhgwYIFyM3NxZ49e/T1/fv3o6GhAatXr8a0adMQHx+PuLg4g0tWwO3ftAsLCw3qN27c\nMGnAoEQigUqlMqg1dxnH3d0dkyZNwocffogff/wRffv2xccff3zX95fJZABgllHoprh69SoaGxsR\nFBRk7laonTA0yOqNGzcOfn5+WLt2rb526zfl//3NuKqqyug3+7i4ONjZ2WHTpk0G9c8++8ykz/b3\n90dmZqZBbfv27UZnGnde83dyckJgYKDRY7B3io6OBgDk5OSY1E97u9XXrT6p4+M9DbJ6YrEYM2fO\nxLvvvouDBw9ixIgRGDZsGOzs7DB37lxMmzYNNTU1+Pe//42uXbsanAV4enpi1qxZSElJwdy5czF8\n+HD89ttvOHjwoEmXXKZMmYI333wTCxcuRFxcHM6dO4eff/7Z6LVPPPEEYmNjER4eDnd3d+Tk5GD3\n7t0Gj/42xd/fH3369MHhw4cN1q62FIcPH4ZUKuXjtp0IzzSoQ5g8eTJcXV31ZxsymQwff/wxRCIR\n3nvvPWzbtg1Tp07FzJkzjV77pz/9CQsXLkROTg6WL1+OoqIirF+/Hk5OTvf83KlTp2LOnDk4fvw4\n3nvvPSgUCqSlpRm9dsaMGbh8+TJSU1Px97//HceOHcOiRYvwyiuv3PMzJk2apL/cZkl0Oh327t2L\nCRMmcDR4JyIS+OgDkUVTqVQYPXo0XnvtNYs629i3bx8WL16MH374AV5eXuZuh9oJzzSILJybmxtm\nz56NTz/91KIeb127di0SEhIYGJ0MzzSIiMhkPNMgIiKTMTSIiMhkDA0iIjIZQ4OIiEzG0CAiIpMx\nNIiIyGQMDSIiMhlDg4iITPb/AbWQp6Ly9/PyAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(rs, ys, color='purple')\n", + "\n", + "decorate(xlabel='Radius (mm)',\n", + " ylabel='Length (m)',\n", + " legend=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the figure from the book." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap11-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg8AAAJaCAYAAACoZqTmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl0U2X+P/B3kiZN2zRLS6Frurcg\nmyDrsEkrOy4wuA2oMA7oD0HHQVEc/aowLjjOOGKtguOgooPjOYOOIFSgKuIoooOgKHaFpAstpWRp\n2qTZ7u+PQjQmQFrapk3fr3M8h9775PaTa5u8e/O5zyMSBEEAERERUYDEwS6AiIiIeheGByIiImoX\nhgciIiJqF4YHIiIiaheGByIiImqXsGAX0BvYbDYcPXoUcXFxkEgkwS6HiIioy7lcLjQ0NGDIkCGQ\ny+Ve+xgeAnD06FEsXLgw2GUQERF1u7feegujRo3y2sbwEIC4uDgAbScwPj4+yNUQERFdGlurEyKR\nCOGy819Nr6urw8KFCz3vgT/H8BCAcx9VxMfHIzk5OcjVEBERtV+LzYGKahNK9AbUNTYjTCLG/Cuz\n0D8m8oKP8/dxPcMDERFRiHI43Thea0Kp3gB9XRPcP5tU2uly47TJetHw4A/DAxERUQhxuwVUn2pC\nqd6AihoTHE63zxixSIQcrRo5Wk2HvgfDAxERUS8nCAIaDFaUVhlQqjeixebwOy4hNgo5qRpkJasR\nEd7xCMDwQERE1EuZLK0oqzKiRGeAocnmd4w6OhwDU2OQnaKGShHeKd+X4YGIiKgXsbU6UV7dFhhO\nNjb7HRMplyI7RY1crQZxmgiIRKJOrYHhgYiIqIdzutw4UWtGid4AXZ0ZbrfgM0YaJkZmkgo5Wg2S\n+0dDLO7cwPBzDA9EREQ9kNstoKbBgrIqA8qrTbA7XD5jxCIRUgZEIzdVg/REJaRh3TMLMsMDERFR\nDyEIAhpNNpToDSjTG2Cx+m98HBATidyzjY+Rcmk3V8nwQEREFHRNLXaU6g0o1RnQaD5P46MiHDmp\nGuSkaKCO7pzGx45ieCAiIgoCm92Jiuq2CZxqGix+x0SEh7U1PqbGoH8XND52FMMDERFRN3G53Dhx\n0oxSvQEnTprh8tP4GCYRIyNJhVytBskDoiHpwsbHjmJ4II+dO3fCZrNh/vz5nm233HILNBoNNmzY\ncMnHf+WVVzBs2DCMHTv2ko9FRNRbCIKAk6ebUaI3oLzaiFa7b+OjSCRCSn8FclI1yEhUQSbtnsbH\njmJ4II+ioiIYDAav8NCZ/v73v2PRokUMD0TUJzSarCjVG1GqN6Cpxe53TH9NJHK1GmRrg9P42FEM\nD0RERJ3EYnWg9OydEg1Gq98xyigZcrQa5Go10Cjl3Vxh52B4IADAgw8+iA8//BAAkJubCwBYsWKF\nZ//27duxYcMGNDY2YuTIkfjTn/6E+Ph4z/7W1lY8//zz+OCDD9DY2IiMjAysWrUKU6ZMAQDk5eXB\naDSioKAABQUFAIA33ngDY8eOxT/+8Q988MEHOHHiBMLDwzFs2DCsWbMGqamp3fX0iYg6zO5weZa6\nrmmwQBB8+xjksjBkJauQk6pBQmxUj2l87CiGBwIALF++HLW1tWhqasKjjz4KAIiPj8fBgwdx5MgR\nnDp1Cg888ABaW1vxxBNP4JFHHsErr7ziefzdd9+Nb7/9FitXroRWq8WuXbvw//7f/8O///1vDBo0\nCAUFBbj11lsxY8YMXH/99QCArKwsAEBdXR0WLVqExMREWCwWvP3227jpppuwe/duREdHd//JICK6\nCJfLDX1928qVx2vNcLp8V64Mk4iRlqBEbqoG2gHRkEjEQai0azA8dKFvSk7h4A91fpdD7WrSMDHG\nXBaPEbn9Axqv1WqhVqshCAIuv/xyr30WiwUbN26ESqUCADQ0NOCpp56CzWaDXC7HF198gU8++QRb\ntmzBmDFjAAATJ07EiRMn8NJLL2HDhg247LLLIJFIEB8f73P8hx56yPNvl8uFCRMmYPz48SguLsZ1\n1113KaeBiKjTCIKAusaWtsbHKiNsdqfPGJFIhKQ4BXK1GmQkqxDewxsfO4rhoQsdLm0ISnAAAIfT\njcOlDQGHhwsZOnSoJzgAP10xqK+vR2pqKj7//HPExcVh5MiRcDp/+mUaP348tm3bdtHjHz58GM8/\n/zx++OEHGI1Gz/bjx49fcu1ERJfKYG6b8bFUb4C52X/jY5w6AtlaDXK0Gigiek/jY0cxPHShy3Pi\ngnrl4fKcuE45llKp9D62tO0Xo7W1FQBgMBjQ0NCAwYMH+zxWIrlw6q6trcVvf/tbDBs2DI8//jj6\n9+8PqVSKO+64A3a7/19SIqKu1mJzoExvRInegFOGFr9joiNlyNGqkaPVIFYV0c0VBhfDQxcakdu/\nU/7y7+lUKhUGDBiAF198sd2P3b9/P2w2GwoLCxEZGQkAcDqdMJlMnV0mEdEFOZwuVNSYUKozoOqU\n/8bHcJkEWcltS10n9Ov9jY8dxfBAHlKp1HM1oT3Gjx+PzZs3IzIyEpmZme06vs1mg1gsRljYTz+K\nu3bt8vr4g4ioq7jcAqrrm1CiN+B4jQkOP42PErEIaQlK5Gg1SEtQhlTjY0cxPJBHeno6iouLsXfv\nXgwYMAD9+wd21WTChAmYOHEifvvb32Lp0qXIysqCxWLBjz/+iNbWVqxatQoAkJGRgX379mHSpEmI\njIxEeno6xo0bB5fLhTVr1mDBggUoKyvDP/7xD5+PSoiIOosgCKg/09I2H0OVEdZW/3+sJPZTIDdV\ng8xkFeQyvl3+HM8GefzmN7/BsWPH8NBDD8FkMnnN83AhIpEIBQUFePnll/H666/j5MmTUKlUGDhw\nIG655RbPuNWrV2Pt2rW44447YLVaPfM8PPXUUygoKMCePXswcOBAPP/887j33nu76mkSUR9lbGpt\nW7lSb4DR4v8qa6xSjtzUGGRr1YiOlHVzhb2HSPD3oQ55qa6uRn5+PoqLi5GcnBzscoiIKEAtNgfK\nq40o0RlQf8Z/46MiQtp2p0SKBv3U8j7bx/BLF3rv45UHIiIKKQ6nC8drzSjRGVBV3wS3n7+RZVIJ\nMpNUyNFqkBSngLgHrlzZkzE8EBFRr+d2C6g+1TbjY0WNye8t8mKxCKnxSuRqNUhLVCKMjY8dxvBA\nRES9kiAIaDBYUXK28bHF5vA7LiE2CrmpGmQlqyEP59teZ+BZJCKiXsVkaUVZlRE/6s7A2OS/8VET\nLUduqgbZKWqoFOHdXGHoY3ggIqIez9bqRFm1EaU6A042NvsdEymXIjtFjdxUDeLUEWx87EIMD0RE\n1CM5XW4crzWhVG+E7qTZb+OjNEzsaXxM7h/NxsduEtTwoNPp8Oqrr+Kbb75BeXk5Ro0ahS1btniN\nEQQBGzduxNatW2EwGDB06FA8/PDDGDRokNe48vJyrFu3DocPH0Z0dDSuv/56rFixwmtthUCPRURE\nweF2C6hpsHgaH+0Ol88YsUgEbXw0crQapCeqIA1j42N3C2p4KCsrw759+zB8+PDzTke8adMmFBYW\nYvXq1cjIyMDmzZuxePFi7NixA3FxbQs/mUwmLF68GFlZWSgsLIRer8f69evhdru9JhsK5FhERNS9\nBEHAaaPt7IyPBlis/hsf42OjkKttm/ExUh76K1f2ZB0KD06nEyKR6KIrJl5MXl4errrqKgDA3Xff\nDYPB4LW/tbUVmzZtwrJly7Bo0SIAwOWXX468vDy8+eabnmDw9ttvo7W1FQUFBVAoFJgwYQIsFgsK\nCgqwdOlSKBSKgI9FRETdo6nF3jbjo86ARrPN7xi1Ihw5qW0TOKmj2fjYUwQUHr7++msUFxd7Pl5o\nbm5rVlEoFMjMzMSIESOQn5+PUaNGteubi8UXvtR06NAhWCwWzJo1y7MtMjISU6dOxf79+z1v+J9+\n+ikmTpwIhULhGTdnzhw8++yzOHjwIPLy8gI+FhERdR2b3YmKahNKdAbUnrb4HRMRHna28TEG/TVs\nfOyJzhsenE4n3nnnHbz22mvQ6/VQqVQYPHgwZs+eDZVKBUEQYDabUV1djW3btmHz5s1ITk7GkiVL\ncMMNN0AqvfRLSpWVlZBIJEhLS/PanpmZiV27dnmNGzdunNeYxMREREREoLKyEnl5eQEfi4iIOpfL\n5caJk2aU6g04cdIMl9tP46NEjPQkFXK1GiQPiIaEjY892nnDw7Rp0+BwODBv3jzMnDkTgwcPvuCB\njh49iqKiIrz00kt49dVX8dFHH11ycWazGZGRkT4fj6hUKlitVtjtdshkMpjNZkRHR/s8XqlUwmw2\nt+tYRER06QRBQO3pZpToDKioMaLV7tv4KBKJkDJAgRytBplJKkjDLu2jcOo+5w0Py5cvx7XXXhvw\nG+qQIUMwZMgQ3H333fjPf/7TaQUSEVHv0WiyokTXtnLl+Rof+2sikavVIFurZuNjL3Xe8HD99dd3\n6IAymazDj/0lpVKJlpYWuFwurysGJpMJERERnmCjVCphsfh+dmY2m6FUKtt1LCIiah+L1eFZ6vq0\n0ep3jDJKhlytBjlaDTRKeTdXSJ2tR08SlZGRAZfLBZ1Oh4yMDM/2yspKr68zMjJQWVnp9diTJ0/C\narV6xgV6LCIiurhWhwsV1UaU6o2oabBA8DOBk1wWhqwUNQamajAgJpKNjyHkvOGhoKCg3QcTiUS4\n6667Lqmgnxs5ciQUCgWKioqwfPlyAIDVasXHH3+MG264wTNu8uTJePXVV2GxWDx3XOzcuRNyuRxj\nxoxp17GIiMg/l8sNfX0TSnQGHK81+W18DJOIkZ6oRI5WA+2AaEi4cmVIald4OJcaf5kwRSIRBEFo\nd3iwWq3Yt28fAKC+vh4WiwVFRUUAgClTpiAiIgLLli1DYWEhVCqVZ2Int9uNW265xXOcm266CVu2\nbMHKlSuxdOlSVFVVoaCgAIsXL/aEifDw8ICORUREPxEEAScbm1GqM6C82gSb3XdCP5FIhKQ4hWcC\nJ5mUjY+h7rzh4ccff/T6ur6+HsuWLUN2djZuu+02pKenA2i77P/666+joqICGzdubNc3b2xsxD33\n3OO17dzXxcXFSE5OxrJly+B2u7Fx40YYjUYMGTIEmzdvRr9+/TyPUalUeO2117B27VrceeedUCqV\nuO2227By5UqvYwdyLCIiAs6YbZ4+BnOz3e+YOHUEcrQaZGs1UESw8bEvEQn+PqjyY/ny5QgLC8OG\nDRv87r/77rvhcrnw4osvdmqBPUF1dTXy8/M9gYaIKBQ1Wx0oqzKgRG9Ag8F/42N0pAw5Wg1ytGrE\nqiK6uULqThd67wu4YfLAgQO47777zrt/3LhxePbZZzteJRERdTu7w4XK2rYZH6tP+W98DJdJkJWs\nRq5Wg4R+UWx8pMDDQ3h4OL799lv85je/8bv/yJEjCA/nvONERD2dyy2g6meNj06X22eMRCxCWmLb\njI+p8Wx8JG8Bh4err74aW7ZsgUqlwqJFi5CSkgIAqKqqwpYtW/D++++z8ZCIqIcSBAH1Z1pQojOg\nvNoIa6v/xsfEflHITdUgI0kFuaxH381PQRTwT8Z9990Hg8GA119/HW+88YZnoiWXywVBEDBnzpwL\nfqxBRETdz9jUilJ9Wx+DydLqd0ysUo7c1BjkaNVQRHLCPLq4gMODTCbDn//8Z9x+++349NNPUVNT\nAwBISkrC5MmTMXDgwC4rkoiIAtdic6C82ogSnQH1Z1r8jlFESJGt1SBXq0E/NRsfqX3afU1q4MCB\nDApERD2Mw+nC8VozSnQGVNU3we2n8VEmlSArWYUcrQaJ/RQQc+VK6iB+oEVE1Eu53QKqTjWhVGdA\nZa0JDqdv46NYLEJqvBK5Wg3SEpUIY+MjdYJ2hYd9+/bhtddeww8//ICmpia/t/QcO3as04ojIiJv\ngiCgwWBFydkJnPw1PgJAQmxb42NWshrycP6dSJ0r4J+oDz/8EL///e+RlZWF2bNnY+vWrZg7dy4E\nQcBHH32E1NRUXHXVVV1ZKxFRn2Wy/NT4aGzy3/gYo5SfncBJA2UUGx+p6wQcHjZu3Ihhw4bhn//8\nJ0wmE7Zu3Ypf//rXGD9+PKqrq3HjjTdy9kUiok5kbXWivMqIEr0BdY3NfsdEyqXI0aqRq41BP7Wc\nEzhRtwg4PFRUVOAPf/gDJBIJwsLaHuZ0tl0uS05Oxs0334xXXnkF1113XddUSkTUBzhdbhyvNaFU\nZ4Cuzn/jozRMjMwkNXJTNUiKY+Mjdb+Aw4NcLodU2rbwiVKphEwmQ0NDg2d/v379UF1d3fkVEhGF\nOLdbQE2DBaV6AypqTLA7XD5jxCIRUuOjka3VID1RBWkYGx8peAIOD+np6aioqPB8PWjQIPznP//B\nNddcA5fLhR07diAhIaFLiiQiCjWCIOC08aeVK5ttDr/j4mOjkKvVICtFjQg2PlIPEfBP4rRp07Bl\nyxY88MADkMlkuPPOO7F8+XKMHj0aAGC1WvHkk092WaFERKHA3Gz3BIYzZpvfMWpFOHJS2yZwUim4\nZhD1PAGHh9tvvx2333675+upU6diy5Yt2L17NyQSCaZMmYJx48Z1SZFERL2Zze5ERXXbypW1py1+\nx0SEhyEnRYOcVA36ayLY+Eg9WkDhwW6348iRI4iLi0NaWppn+6hRozBq1Kiuqo2IqNdyutw4cdKM\nMr0BJ06a4XL7aXyUiJGRpEJOqgYp/aPZ+Ei9RkDhISwsDEuWLMGaNWu8wgMREf1EEATUnm5Gie4M\nKqpNaPXT+CgSiZAyQIFcbdvKldIwSRAqJbo0AYUHsViMlJQUNDU1dXU9RES9TqPJihJdWx+Dxeq/\n8XFATCRytBpkp6gRKZd2c4VEnSvgnoc77rgDf/nLXzB79mxotdqurImIqMeztNhRWmVEqd6A00ar\n3zHKKBlytBrkpmqgiZZ3c4VEXSfg8HDs2DEolUrMnj0b48aNQ1JSEuRy718GkUiEBx98sNOLJCLq\nCVodLlRUtwWGmoZmv+v7yGVhyE5pm8BpQEwkGx8pJAUcHl5//XXPvz/77DO/YxgeiCjUuFxu6Oub\n8KPOgBO1Jr+Nj2ESMdITVcjRqqGNV0LCxkcKcQGHhx9//LEr6yAi6jEEQcDJxmaU6gwoqzai1e6/\n8TG5/0+NjzIpGx+p7+B0ZUREZ50x21CiM6CsygBzs93vmDh1RNtS1ykaKCLY+Eh903nDg91uh0zW\nsSVdL+WxRETdyWJ1oLzKgBKdAQ0XaHzMTmlrfIxRsvGR6Lzh4corr8Rtt92GBQsWIDY2NqCDnT59\nGu+88w7eeust/Pe//+20IomIOpPd4UJljQklegOqT1n8Nj6GyyTITlYjR6tBQr8oNj4S/cx5w8Oa\nNWtQUFCADRs2YNSoUfjVr36Fyy67DMnJyVCpVBAEASaTCdXV1Th69Ci++OILHDp0CCkpKVizZk13\nPgciootyuQXo68wo1RtwvNYMp8vtM0YiFiEtUYWBqRpoB0RDIuHKlUT+nDc8XH311Zg9ezaKi4ux\nbds2FBQUwOFw+KRvQRAglUoxYcIE/O1vf0NeXh4kEjYOEVHwCYKA+jMtZ/sYjLDZnT5jRCIRkuKi\nkKPVIDNZjXA2PhJd1AUbJiUSCaZPn47p06fDbrfj6NGjqKyshNFoBACo1WpkZGRgyJAh7HEgoh7D\n0GRDqc6AEv35Gx9jVRHI1WqQo1VDEcnXL6L2CPhuC5lMhpEjR2LkyJFdWQ8RUYe02BwoOzvjY/2Z\nFr9jFBFSz4yPsaqIbq6QKHTwVk0i6rUczrbGx1K9EVX1TXD7a3yUSpCZ3DbjYyIbH4k6BcMDEfUq\nbreAqlNNKNUZUFlrgsPp2/goFouQlqBEjlaDtAQlwtj4SNSpGB6IqMcTBAGnDFaU6gworTLA2urb\n+AgAif0UyE3VIDNJBXk4X96Iugp/u4ioxzJZWlGqb2t8NDa1+h0To5QjR6tBjlYDZRQbH4m6A8MD\nEfUoLTYHKqrbJnCqa2z2OyZKLkW2Vo1cbQz6qeXsYyDqZgwPRBR0Dqcbx2tNKNMboKvz3/goDRMj\nM6mt8TEpTgExV64kCpp2hYeKigoUFhbiyy+/hNFoxCuvvILx48fjzJkzWL9+PW666SaMGDGiq2ol\nohDidguoabCgRGdARY3Rf+OjSITU+GjkpGqQlqCCNIyNj0Q9QcDh4fvvv8eiRYsQFRWFUaNG4cMP\nP/Tsi4mJgU6nw9atWxkeiOi8BEFAg9GKUr0BZXojmm0Ov+MSYttmfMxKUSOCjY9EPU7Av5XPPvss\nEhIS8M4778But6OoqMhr/4QJE/D+++93eoFE1PuZm+0o1RtQqjfgjNnmd4w6OvzsjI8aqBTh3Vwh\nEbVHwOHh8OHDuOeee6BQKGAwGHz2x8fH49SpU51aHBH1XrZWJ8qrjSjVG1F72uJ3TER4GHLOLnUd\np4lg4yNRLxFweBCLxRCLz/9546lTpxARweleifoyp8uNEyfNKNEZoKszw+323/iYkahCTqoGKf2j\n2fhI1AsFHB6GDRuGPXv24NZbb/XZZ7PZ8N5772HUqFGdWhwR9XyC0Nb4WKo3oLzaBLvD5TNGLBIh\nZUA0clM1SE9UQhrGlSuJerOAw8PKlStx6623Yvny5ZgzZw4AoLy8HPX19Xj11Vdx6tQpbNiwocsK\nJaKe5fTZxsdSvQEWq//GxwExkchN1SArWY1IubSbKySirhJweBg5ciQ2bdqExx9/HKtWrQIAPPHE\nEwCAlJQUvPzyyxg0aFDXVElEPYKlxY5SvRElegMaTVa/Y1SKtsbHbK0ammh5N1dIRN2hXfdA/epX\nv0JRURF+/PFHnDhxAoIgICUlBYMHD75gPwQR9V42u/PsypUG1DQ0Q/AzgVNEeBiyU9TI0WowICaS\njY9EIa7dN1CLRCIMGjSIVxmIQpjL5YaurgklegNO1Jrg8tP4GCYRIz1RhdxUDVIGREPCxkeiPuO8\n4eGrr77q0AFHjx7d4WKIKHgEQcDJ080o0RtQXm1Eq9238VEkEiG5f9vKlRmJKsikbHwk6ovOGx5u\nueWWdl16FAQBIpEIx44d65TCztm2bRvWrFnjs/2xxx7DzTff7PneGzduxNatW2EwGDB06FA8/PDD\nPldHysvLsW7dOhw+fBjR0dG4/vrrsWLFCkgkfAGkvuuM2YYSnQFlVQaYm+1+x8RpIpCr1SArRQNF\nBBsfifq684aHN954ozvruKjXX38dcvlPzVcpKSmef2/atAmFhYVYvXo1MjIysHnzZixevBg7duxA\nXFwcAMBkMmHx4sXIyspCYWEh9Ho91q9fD7fbjXvvvbfbnw9RMFmsDpSdvVOiwei/8VEZJfMsdR2j\nZOMjEf3kvOFhzJgx3VnHRQ0dOhRRUVE+21tbW7Fp0yYsW7YMixYtAgBcfvnlyMvLw5tvvukJBm+/\n/TZaW1tRUFAAhUKBCRMmwGKxoKCgAEuXLoVCoejW50PU3ewOFyqqTSitMqD6lMVv42O4TILsZDVy\nU2MQH8vGRyLyr9evOHPo0CFYLBbMmjXLsy0yMhJTp07F/v37PeHh008/xcSJE71Cwpw5c/Dss8/i\n4MGDyMvL6/baibqayy1AX2dGqd6A47VmOF2+K1dKxCKkJaqQq9UgNT4aEgnvnCKiCws4PPibWfLn\nRCIRwsPDER8fj7Fjx2LGjBkIC+u8bDJt2jQYjUakpKRgyZIluOmmmwAAlZWVkEgkSEtL8xqfmZmJ\nXbt2eb6urKzEuHHjvMYkJiYiIiIClZWVDA8UMgRBQF1jS9vKlVVG2OxOnzEikQhJcQrkaNXITFYj\nnI2PRNQOAb+7C4KA+vp66PV6qFQqJCUlAQBqampgMpmQmpoKhUKBI0eO4J133sGmTZuwefNmxMTE\nXFKBcXFxuOeeezBs2DC4XC7s3LkTjz76KGw2GxYvXgyz2YzIyEifpkeVSgWr1Qq73Q6ZTAaz2Yzo\n6Gif4yuVSpjN5kuqkagnMDTZUKozoER//sbHfuqItj6GFDUUkbJurpCIQkXA4eGee+7BXXfdhaef\nfhpXX321583a5XLh/fffx/r167F+/XoMHz4c7777Lh555BE899xzWLdu3SUVOGnSJEyaNMnz9ZQp\nU9Da2oqXXnrpoldDiEJdi82BsrMzPp4ytPgdo4iQIkfbtnJlrIqL1xHRpQs4PDzzzDOYP38+rrvu\nOq/tEokE8+bNQ2lpKZ566in861//wvz583H48GF89NFHnV4wAMyYMQO7du1CTU0NlEolWlpa4HK5\nvK4+mEwmREREQCZr++tKqVTCYvFdFthsNkOpVHZJnURdweF0oeLsjI9V9edpfJRKkJmsRm6qBon9\notj4SESdKuDwUFJSgmuvvfa8+5OTk/HPf/7T8/XgwYPx7rvvXlp15/HzF8KMjAy4XC7odDpkZGR4\ntldWVnp9nZGRgcrKSq/jnDx5Elar1WscUU/kdguoqm+b8fF4jQmO8zU+JiiRo9UgNUGJMDY+ElEX\nCTg8xMXFYffu3bj55pt91rFwu90oKipCv379PNuMRiNUKlXnVfozH374ITQaDZKSktC/f38oFAoU\nFRVh+fLlAACr1YqPP/4YN9xwg+cxkydPxquvvgqLxeK542Lnzp2Qy+U97rZUIqCtz+iUwYoS3RmU\nVRlhbfVtfASAxH5tMz5mJqsgl/X6G6iIqBcI+JVmyZIlWLduHRYuXIgbb7zRM0mTXq/Hv/71Lxw5\ncgQPP/ywZ/yHH36IoUOHXnKBK1euxNChQ5Gbmwu3242dO3di586dePjhhyEWixEeHo5ly5ahsLAQ\nKpXKM0mU2+3GLbfc4jnOTTfdhC1btmDlypVYunQpqqqqUFBQgMWLF3OOB+pRTJZWlOgNKNUZYLS0\n+h0Tq5QjJ1WD7BQNlFFsfCSi7hVweFi4cCFEIhE2bNiABx980PPRgSAIUKvVePjhh7Fw4UIAgN1u\nx/3334/k5ORLLjA9PR3//ve/UVdXB0EQkJWVhfXr13v1XixbtgxutxsbN26E0WjEkCFDsHnzZq8r\nISqVCq+99hrWrl2LO++8E0qlErfddhtWrlx5yTUSXaoWmwMV1SaU6A2oa2z2O0YRIUW2VoOcFA36\nqeXsYyCioBEJ/rqtLsDhcOAH2WicAAAgAElEQVTo0aOora0F0DZXwpAhQyCVhu5899XV1cjPz0dx\ncXGnBCIiAHA43The29b4qK9rgtvPr6JMKkFmkgo5Wg2S4hQQc+VKIuomF3rva/cHpFKpFCNGjMCI\nESM6rUCivsLtFlDTYEGJ7gwqakxwOH0bH8UiEVLjo5GTqkF6ooqNj0TU47Q7PJSXl6Oqqgomk8nv\n/l/eyknU1wmCgAajFaV6A0r1RrTYHH7HJcRGISdVg6xkNSLC2fhIRD1XwK9Qer0e999/P7799lu/\n95UDbbdQMjwQtTFZWlFWZUSp3oAzZpvfMerocAxMjUF2ihoqRXg3V0hE1DEBh4f/+7//Q2lpKR56\n6CGMGjWKEysR+WFrdaK8ui0w1J723/gYKZciO0WNXK0GcZoINj4SUa8TcHg4dOgQli1b5nX7IxEB\nTpcbJ2rNKNEboKszw+32vTInDRMjI1GFnFQNUvpHs/GRiHq1gMODWq3uskmfiHqbc42PpXoDKmpM\nsDtcPmPEIhFSBkQjR6tGRpIK0jCuXElEoSHg8HDjjTfi/fffx29+8xufFSyJ+gJBENBosqFEb0CZ\n3gCL1X/j44CYSOSebXyMlIfuLcxE1HcFHB5ycnJQXFyMefPmYcGCBUhISPCZphoA8vPzO7VAomCz\ntNhRqjeiRHcGjedrfFSEty11rdVAHc3GRyIKbQGHh5/PxPjkk0/6HSMSiXDs2LFLr4ooyGx2Jyqq\n2yZwqmnwXY0VACLCw5CdokaOVoMBMZFsfCSiPiPg8PDGG290ZR1EQedyuXHipBmlegNOnDTD5afx\nMUwiRkaSCrlaDZIHREPCxkci6oMCDg+BrDxpt9svqRii7iYIAk6ebkaJ3oDyaiNa7b6NjyKRCCn9\nFchJ1SAjUQWZlD0/RNS3XfI0doIg4MCBA3j//fexd+9efPXVV51RF1GXajRZUapvm4+hqcV/6O2v\niUSuVoNsLRsfiYh+rsPh4bvvvsOOHTuwc+dOnD59GuHh4Rg/fnxn1kbUqSxWB8r0BpTqDWgwWv2O\nUUbJkKPVIFergUYp7+YKiYh6h3aFB51Oh+3bt2P79u3Q6/UAgKlTp+LGG2/EuHHjEB7OLnPqWewO\nl2ep65oGi9+p1eWyMGQlq5CbGoP4WDY+EhFdzEXDw+nTp/HBBx9g+/bt+P7776FUKjFt2jT87ne/\nwyOPPILrrrsOU6ZM6Y5aiQLicrmhr29Cqd6A47VmOF2+K1dKxCKkJ6qQm6qBdkA0JFy5kogoYBcM\nD0uWLMHBgwchl8uRn5+PlStXYsKECQgLC/NceSDqCQRBQF1jS1vjY5URNrvTZ4xIJEJSnAK5Wg0y\nklUIZ+MjEVGHXDA8fPHFF0hOTsYjjzyCyZMn83Iu9TgGc9uMj6V6A8zN/hsf49QRyD47gZMigo2P\nRESX6oLh4b777sOOHTtw5513IjY2FjNnzsSsWbNwxRVXdFd9RD5abA6U6Y0o0RtwytDid4wiQorc\n1LbAEKuK6OYKiYhC2wXDw+9+9zv87ne/Q3l5ObZv344PPvgAb775JuLj4zFmzBiIRCJejaBu4XC6\nUFHTNuNjVb3/xsdwmQRZyW0zPib2i+LPJhFRFwnobousrCzce++9uPfee3Ho0CHs2LEDRUVFEAQB\nTz75JA4cOIArr7wSY8eOhUwm6+qaqY9wuQVU1zehRG/A8RoTHOdpfExLUCJHq0FagpKNj0RE3aDd\n8zyMHDkSI0eOxB//+Ef897//xfvvv493330Xb731FiIjI3Ho0KGuqJP6CEEQUH+mBaV6A8qqjLC2\n+jY+AkBSnAI5Wg0yk1WQyy55rjMiImqHDr/qSiQSTJ48GZMnT4bNZsPevXuxY8eOzqyN+hBjUytK\nqwwo1RlgtLT6HROrlCPnbB9DdCSvcBERBUun/Mkml8sxd+5czJ07tzMOR31Ei82B8mojSnQG1J85\nf+Nj9tkZH2NVcvYxEBH1ALzeS93K4XTjeK0JJToDquqb4PbT+CiTSpCVrEJ2igZJcQqIuXIlEVGP\nwvBAXc7tFlB9qm3Gx4oaExxO38ZHsViE1HglcrUapCUqEcbGRyKiHovhgbqEIAhoMFhRcrbxscXm\n8DsuITYKuakaZCWrIQ/njyMRUW/AV2vqVCZLK8qqjPhRdwbGJv+Nj5poOXJTNchOUUOl4GJqRES9\nDcMDXTJbq9PT+HiysdnvmEi5FDnatgmc4tQRbHwkIurFGB6oQ5wuN07UmlGiN0BXZ4bb7dv4KA0T\nIzNJhRytBsn9o9n4SEQUIhgeKGBut4CaBoun8dHucPmMEYtE0MZHI0erQXqiCtIwNj4SEYUahge6\nIEEQ0GhqW7myTG+Axeq/8TE+Ngq5Z2d8jJRz5UoiolDG8EB+NbXYUapvm/Gx0WzzO0atCEfO2aWu\n1dFsfCQi6isYHsjDZneiorptAqfa0xa/YyLCw5CdokZuagz6a9j4SETUFzE89HEulxsnTppRqjfg\nxEkzXP4aHyVipCepkKvVIHlANCRsfCQi6tMYHvogQRBQe7oZJToDKmqMaLX7Nj6KRCKkDFAgV6tB\nRpIK0jBJEColIqKeiOGhD2k0WVGiM6D0Ao2P/TWRyNVqkK1Vs/GRiIj8YngIcRaro63xUW/AaaPV\n7xhllAw5Wg1yUzXQRMu7uUIiIuptGB5CUKvDhYpqI0r1RtQ0WCD4WblSLjvX+KjBgJhINj4SEVHA\nGB5ChMvlhr6+CSU6A47Xmvw2PoZJxEhPVCJHq4F2QDQkXLmSiIg6gOGhFxMEAXWNLSjRnUF5tQk2\nu9NnjEgkQlKcwjOBk0zKxkciIro0DA+90BmzzdPHYG62+x0Tp45AjlaDbK0Gigg2PhIRUedheOgl\nmq0OlFUZUKI3oMHgv/ExOlJ2dsZHNWJVEd1cIRER9RUMDz2Y3eFCZW3bjI/Vp/w3PobLJMhKViNX\nq0FCvyg2PhIRUZdjeOhhXG4BVT9rfHS63D5jJGIR0hLaGh/TEpRsfCQiom7F8NADCIKA+jMtKNUb\nUFZlhLXVt/ERAJLiFMg52/gol/F/HRERBQffgYLI2NSKUn1bH4PJ0up3TKxSjtzUGGRr1YiOlHVz\nhURERL76XHgoLy/HunXrcPjwYURHR+P666/HihUrIJF0zy2MLTYHyquNKNEZUH+mxe8YRYQU2VoN\ncrUa9FOz8ZGIiHqWPhUeTCYTFi9ejKysLBQWFkKv12P9+vVwu9249957u+z7OpwuHK81o0RnQFV9\nE9x+Gh9lUgmyklXI0WqQ2E8BMVeuJCKiHqpPhYe3334bra2tKCgogEKhwIQJE2CxWFBQUIClS5dC\noVB02vdyuwVUnWpCqc6AyloTHE7fxkexWITUeCVytRqkJSoRxsZHIiLqBfpUePj0008xceJEr5Aw\nZ84cPPvsszh48CDy8vIu6fiCIKDBYEXJ2cbHFpv/lSsT+0UhR6tBVrIa8vA+9b+AiIhCQJ9656qs\nrMS4ceO8tiUmJiIiIgKVlZUdDg9ut4BvSk/h2IkzMDb5b3yMUcrPTuCkgTKKjY9ERNR79anwYDab\nER0d7bNdqVTCbDZ3+Lhf/VCHr47V+2yPlEuRo1UjVxuDfmo5J3AiIqKQ0KfCQ1f5efujNEyMzCQV\nclNjkBTHxkciIgo9fSo8KJVKWCwWn+1msxlKpbLDxx19WTzUinCEhYmRGq+ENIyNj0REFLr6VHjI\nyMhAZWWl17aTJ0/CarUiIyPjvI9zuVwAgLq6uvOOUZw9k/V1vuGEiIiotzn3nnfuPfDn+lR4mDx5\nMl599VVYLBbPHRc7d+6EXC7HmDFjzvu4hoYGAMDChQu7pU4iIqKeoqGhAampqV7bRIK/pRpDlMlk\nwpw5c5CdnY2lS5eiqqoKTz/9NG699dYLThJls9lw9OhRxMXFddtMlERERMHkcrnQ0NCAIUOGQC6X\ne+3rU+EBaJueeu3atTh8+DCUSiUWLFiAlStXMhQQEREFqM+FByIiIro0vC2AiIiI2oXhgYiIiNqF\n4YGIiIjaheHhEpWXl+O2227D8OHDMXHiRDz//PN+74kNFbt27cKdd96JSZMmYcSIEZg/fz527Njh\nM+6dd97B9OnTMXToUMyfPx9ffPFFEKrtPvX19RgxYgRyc3PR3Nzs2S4IAl5++WVMmTIFw4YNw8KF\nC3Hs2LEgVtr5nE4nNm3ahOnTp2PIkCGYPHkynnzySa8xfeE8fPDBB5g3bx5GjBiBSZMmYfXq1aiv\n9562PtTOg06nw//93//h6quvxqBBg3DLLbf4jAn0Offm19KLnYdTp05h/fr1uOaaazBixAhMmTIF\nDzzwgM/PB9D2WnLXXXdhxIgRGDt2LNauXQur1dpdTyVgDA+XwGQyYfHixRCJRCgsLMRdd92FzZs3\nY8OGDcEurcu89tpriIqKwpo1a1BYWIixY8di1apV2LJli2fMjh078Oijj+Laa6/FK6+8gqysLNxx\nxx0oLS0NYuVd65lnnkFkZKTP9k2bNqGwsBBLly7Fyy+/jMjISCxevNgzd0goePDBB/HGG2/gt7/9\nLf7xj39g1apVPrd1hfp5KC4uxh/+8AeMGDEChYWFuO+++/D111/jjjvugNvt9owLtfNQVlaGffv2\nIT09HWlpaX7HBPKce/tr6cXOw/fff4+9e/di7ty5eOmll7B69WocOXIEN998s9cfGw6HA7fffjtq\na2vx3HPP4Y9//COKiorwyCOPdOOzCZBAHfbyyy8Lo0aNEpqamjzbNm3aJAwbNsxrWyhpbGz02faH\nP/xBmDp1qufr6dOnCw8++KDna5fLJcydO1dYtWpVt9TY3Q4ePCiMHj1a+Pvf/y7k5OQIFotFEARB\nsNlswsiRI4UXXnjBM7a5uVkYO3as8Ne//jVY5Xaqffv2CZdddplQVlZ23jF94Tz8/ve/F+bNm+e1\nbe/evUJOTo5QXl4uCEJongeXy+X598qVK4VFixZ57Q/0Off219KLnQeTySQ4HA6vbZWVlUJOTo6w\nbds2z7bt27cLAwcOFPR6vWfbBx98IOTm5grHjx/vmuI7iFceLsGnn36KiRMnemarBIA5c+bAZrPh\n4MGDQays68TExPhsGzRoEE6dOgUAqKqqwokTJzBr1izPfrFYjBkzZmD//v3dVmd3cblcWLduHZYv\nXw6NRuO179ChQ7BYLF7nIjIyElOnTg2Zc/Hvf/8b48aNQ1ZW1nnH9IXz4HQ6vV4HAHjWyxHO3g0f\niudBLL7wW0igz7m3v5Ze7DwolUqEhXlP6Jyeno6IiAjPayfQdh6GDh2KlJQUz7arrroKUqm0x/2M\nMDxcgsrKSp81MRITExEREeGzhkYoO3z4MNLT0wHA87x/eV4yMzNhNBpx5syZbq+vK7399tuw2+1+\npy6vrKyERCLxuYyZmZkZMj8f3377LdLS0rB27VqMHDkSw4cPx4oVK7w+y+0L5+HXv/41/ve//+G9\n996DxWLB8ePH8be//c0rWPWF8/BLgT7nvvha+uOPP8JqtXqdG3/nQSaTQavV9rjzwPBwCcxmM6Kj\no322K5VKmM3mIFTU/b744gvs3bsXS5YsAdD22SUAn1VKVSqV1/5QYDAY8Pzzz2PNmjWQSqU++81m\nMyIjI31mL1WpVLBarbDb7d1VapdpaGjAtm3bcOzYMTz33HN46qmn8P3332PFihWev7j7wnm48sor\n8dRTT+GRRx7BFVdcgZkzZ8LlcuGFF17wjOkL5+GXAn3Ofe211O1244knnkBaWhry8vI823vTeehT\nC2NR56qursaqVauQn5+P+fPnB7ucbvfcc89h+PDhmDJlSrBLCbrCwkLPxzZxcXFYtGgRDhw4gPHj\nxwe5su5x4MABPProo7j11lsxefJkNDY24oUXXsBdd92F1157jdPfk5e//OUvOHz4MN58802/f3j0\nBgwPl0CpVMJi8V2C22w2+/zlHWqMRiOWLl2KxMREPPvss57t564wNDU1eZ2Dc1cczu3v7crKyrBt\n2za8+eabnr8Izt1OZbFYIJFIoFQq0dLSApfL5fXmYTKZEBERAZlMFpTaO5NSqURKSopXv8cVV1wB\nqVSK8vJyjB8/vk+ch/Xr1yMvLw/333+/Z9vAgQMxa9YsFBcXY/r06X3iPPxSoM+5L72WvvXWW3j1\n1Vfx17/+FcOHD/fad6HzMHDgwO4qMSD82OISZGRk+HwOdfLkSVitVp/PrUKJ1WrFnXfeCYfDgY0b\nNyIiIsKz79zz/uV5qayshFqt9ttw2RvpdDo4HA7ceOONGD16NEaPHo21a9cCaFv6fd26dcjIyIDL\n5YJOp/N6rL/PNXurzMxMz8cTv3SuiawvnIfKykoMGjTIa1tGRgbkcjn0er3n61A/D78U6HPuK6+l\nH374If70pz/h/vvvx+zZs332+zsPdrsdVVVVPe48MDxcgsmTJ+Ozzz7zSoo7d+6EXC7HmDFjglhZ\n13E6nbjnnntw4sQJ/P3vf0dsbKzX/pSUFKSlpaGoqMizze12o6ioCJMmTerucrvMyJEj8cYbb3j9\nt3TpUgBt97XffvvtGDlyJBQKhde5sFqt+Pjjj0PmXFx55ZUoLS31aoT96quv4HA4kJubCwB94jwk\nJibihx9+8NpWUVEBm82GpKQkAH3jPPxSoM+5L7yWfvnll7jvvvuwaNEi3H777X7HTJ48Gd999x1q\namo82z766CPY7fYe9zMieeyxxx4LdhG9VXZ2Nv71r3/hyy+/RP/+/fH555/jr3/9K2677baQ/Rz8\n0Ucfxc6dO7Fq1SqoVCrU1dV5/ouJiYFEIoFGo8GGDRsgFovhcrnw4osv4uuvv8b69et9wkZvFRER\ngeTkZK//6urqUFxcjMcffxwDBgzw3Jr18ssvQ6lUorm5GU899RTq6uqwfv16v5NK9TY5OTnYtm0b\nPvnkE8TGxuLo0aN4/PHHMWzYMCxfvhwA+sR5cLlc2Lx5MywWC8RiMb755hs89thjiIqKwkMPPQSp\nVBqS58FqtaK4uBjl5eX47LPPYDKZEBsbi/LyciQlJXkmC7vYc+7tr6UXOw96vR5LlixBamoqli5d\nivr6es/rpt1u93ycm56ejt27d2P37t2Ij4/H0aNH8cQTTyA/Px833HBDkJ+lNy7JfYnKy8uxdu1a\nHD58GEqlEgsWLMDKlStDtkEqLy/PKxX/XHFxMZKTkwG0TU/9yiuv4OTJk8jOzsbq1atDvnlu27Zt\nWLNmDQ4dOoSoqCgAP03Nu3XrVhiNRgwZMgQPP/wwLrvssiBX23l0Oh3+9Kc/4auvvoJUKkV+fj7W\nrFnj1d8S6udBEARs3boVW7duRVVVFaKjo3HFFVdg1apVXvfsh9p5qK6uRn5+vt99514PAn3Ovfm1\n9GLn4eDBg1izZo3f/fPmzcPTTz/t+bqurg5r167FF198AZlMhtmzZ2P16tVeHw/3BAwPRERE1C7s\neSAiIqJ2YXggIiKidmF4ICIionZheCAiIqJ2YXggIiKidmF4ICIionZheCAiIqJ2YXggIiKidmF4\nICIionZheCAiIqJ2YXggIiKidgkLdgG9gc1mw9GjRxEXF9crFmkhIiK6VC6XCw0NDRgyZIhnhdRz\nGB4CcPToUSxcuDDYZRAREXW7t956C6NGjfLaxvAQgLi4OABtJzA+Pj7I1RAREXWcIAg4aTkJEURI\niE4477i6ujosXLjQ8x74cwwPATj3UUV8fDySk5ODXA0REVHHlDWW4d0f30XFmQqIRCL8ftzvMbDf\nwAs+xt/H9QwPREREIa7KVIV3f3wX35/63rNNEASYbKYOHY/hgYiIKETVW+rxfsn7+Lr2a6/tErEE\neel5GJM0pkPHZXggIiIKMY0tjfig7AN8XvU5BEHwbBeJRBibNBZX516NfpH9Onx8hgciIqIQYW41\nY1fZLnyq+xROt9Nr34iEEbgm9xokRide8vdheCAiIurlmu3N2F2xGx8d/wh2l91r36C4Qbhu4HVI\nU6d12vdjeCAiIuqlbE4biiuLsbtiN2xOm9e+DE0Grht4HXL75Xb692V4ICIi6mXsLjs+OfEJisqL\n0Gxv9tqXrEzGtQOvxdD+QyESibrk+zM8EBER9RJOtxP7dfuxs2wnzK1mr30DFANwTe41uCLhii4L\nDecwPBAREfVwLrcLn1d9jg/KPoDBavDaFxsZi7k5czEueRzEou5Z75LhgYiIqIdyC24crDmI7SXb\ncbrltNc+tVyNOTlz8KuUXyFM3L1v5wwPREREPYxbcON/tf/D9tLtqLfUe+2LDo/GzKyZmJI6BVKJ\nNCj1MTwQERH1EIIg4Ju6b7C9ZDtqm2q99kXJojAjcwauTLsS4WHhQaqwDcMDERFRkAmCgCP1R7C9\nZDuqzdVe++RhckzLnIarMq6CPEwepAq9MTwQEREFiSAI+O7Ud9hesh16k95rX3hYOPLT8zEtcxoi\npZFBqtC/7mnLpB5v3759GDhwIKqqqry2V1VVYeDAgdi7d2+QKiMiCj2CIODoqaN4+rOn8eLBF72C\ng0wiw4ysGXgy/0lcO/DaHhccAF55oLMmTpyI/v3747333sPKlSs92999913ExsbiyiuvDF5xREQh\nQhAEfN/wPbaXbMcJ4wmvfVKJFFemXYkZmTMQHR4dnAIDxPDQhfZU7MH20u1odbZ2+/cODwvH1TlX\nY1rmtIDGSyQSzJs3D++++y5WrFgBkUgEQRDw3nvv4ZprrkFYGH9UiIg6ShAE/NDwA3aU7kClodJr\nX5g4DFPSpmBG5gyo5KogVdg+fEfoQnsq9wQlOABAq7MVeyr3BBweAGDBggXYuHEjvvzyS4wbNw4H\nDhxATU0N5s+f34WVEhGFrouFhkmpkzAzaybUcnWQKuwYhocuNC1jWlCvPEzLCDw4AEBKSgrGjBmD\nbdu2Ydy4cdi2bRuGDRuG7OzsLqqSiCg0hWpoOIfhoQtNy5zWrr/8e4Lrr78ejzzyCFatWoU9e/bg\ngQceCHZJRES9xrmehh2lO3DccNxrX5g4DBO1EzEzayY0EZogVdg5GB7Iy/Tp07F27Vrce++9cLvd\nmDNnTrBLIiLq8c7dPbGjdIdPI2QohYZzGB7IS3h4OK6++mq89dZbmDt3LpRKZbBLIiLqsQRBwLf1\n32JH6Q6feRrOfTwxI3NGyISGcxgeyMdVV12Ft956C7/+9a+DXQoRUY8kCAIO1x3GjtIdPjNChonD\nMDl1MmZkzei1PQ0Xw/BAPj777DMkJSVh3LhxwS6FiKhHObdg1c6ynT5rT0glUkxOnYzpmdNDNjSc\nE5Lhob6+HjNnzkRLSwsOHTqEqKgoAG1JcePGjdi6dSsMBgOGDh2Khx9+GIMGDQpyxT1DZWUlKioq\nsHXrVqxYsQJiMScgJSICfloae2fZTp9VLmUSGa5MuxLTMqdBGd43PuoNyfDwzDPPIDIyEi0tLV7b\nN23ahMLCQqxevRoZGRnYvHkzFi9ejB07diAuLi5I1fYcjz76KI4cOYK8vDzccsstwS6HiCjonG4n\nDlQfwK6yXTjdctprX3hYeFtoyJjW42eE7GwhFx6++uor7N+/H3fccQeeeeYZz/bW1lZs2rQJy5Yt\nw6JFiwAAl19+OfLy8vDmm2/i3nvvDVbJPcaWLVuCXQIRUY/gcDnw36r/oqi8CAarwWtfhDQCeel5\nyE/PR5QsKkgVBldIhQeXy4V169Zh+fLlPncJHDp0CBaLBbNmzfJsi4yMxNSpU7F//36GByIiQquz\nFZ/qPsWeyj0w2Uxe+6JkUchPz8fU9Kk9crGq7hRS4eHtt9+G3W7HwoULsX37dq99lZWVkEgkSEtL\n89qemZmJXbt2dWOVRETU07Q4WvDJiU+wt3Ivmu3NXvuiw6MxLWMapqRNgTxMHqQKe5aQCQ8GgwHP\nP/88/vznP0MqlfrsN5vNiIyMhEQi8dquUqlgtVpht9shk8m6q1wiIuoBmlqbUHy8GB8f/xg2p81r\nn1quxvTM6ZiUOgkyCd8ffi5kwsNzzz2H4cOHY8qUKcEuhYiIejiD1YDdFbuxX78fDpfDa1+/yH6Y\nkTUDv0r5FcLEIfM22alC4qyUlZVh27ZtePPNN2E2mwEAVqsVAGCxWCCRSKBUKtHS0gKXy+V19cFk\nMiEiIoJXHYiI+oBTzadQVF6EA9UH4HK7vPbFK+IxK3sWxiSNgVjEW9UvJCTCg06ng8PhwI033uiz\nb/LkyViwYAHmzp0Ll8sFnU6HjIwMz/7Kykqvr4mIKPRUm6uxq2wX/nfyfxAEwWtfiioFs7NnY0T8\nCIhEoiBV2LsEPTw4nU6IRCKfXoT2GDlyJN544w2vbfv378crr7yCTZs2ISUlBUlJSVAoFCgqKsLy\n5csBtF2d+Pjjj3HDDTdc0nMgIqKeqfxMOYrKi/Bd/Xc++zJjMjE7ezYGxw1maGinbg8PX3/9NYqL\ni/HNN9+gvLwczc1tXa0KhQKZmZkYMWIE8vPzMWrUqICPGRMTg7Fjx3ptq6mpAQCMGjXKM8PksmXL\nUFhYCJVK5Zkkyu12c0IkIqIQcm5Z7F1lu1B+ptxn/+D+gzEraxayY7ODUF1o6Jbw4HQ68c477+C1\n116DXq+HSqXC4MGDMXv2bKhUKgiCALPZjOrqamzbtg2bN29GcnIylixZghtuuMHv3RMdsWzZMrjd\nbmzcuBFGoxFDhgzB5s2b0a9fv045PhERBc+5dSeKyot8FqsSiUQYET8Cs7JnQavSBqnC0CESfvnh\nTxeYOnUqHA4H5s2bh5kzZ2Lw4MEXHH/06FEUFRXhvffeg0wmw0cffdTVJV5QdXU18vPzUVxcjOTk\n5KDWQkRE3hwuBz6v+hy7K3b7TCEtEUswLnkcpmdOR7wiPkgV9k4Xeu/rlisPy5cvx7XXXhvwHQ1D\nhgzBkCFDcPfdd+M///lPF1dHRES9UYujBftO7MNHxz+CudXstU8mkWFS6iRMy5gGTYQmSBWGrm4J\nD9dff32HHieTyTr8WJaPsIAAACAASURBVCIiCk1GmxHFlcX4VPepz8ROUbIoTE2birz0vD677kR3\nCPrdFkRERIGos9Rhd8Vuv3M0aCI0mJYxDRO1ExEeFh6kCvuOoIUHq9WKPXv2oLq6Gmaz2ee+W5FI\nhAcffDBI1RERUU9RcaYCH1Z8iCN1R3z2JUQnYHrmdIxJGsPZILtRUM70559/jt///vee2SD9YXgg\nIuq7BEHAt/Xf4sOKD1FxpsJnf4YmAzOzZmLYgGGcoyEIghIeHn/8cURFRXnWo1AoFMEog4iIehin\n24kvq7/E7ordqLPU+ewfNmAYZmTNQFZMVhCqo3OCEh7q6upw3333YcKECcH49kRE1MNc6M4JiViC\nsUljMT1zOhKiE4JUIf1cUMLDoEGDYDKZgvGtiYioB2lsaUTx8WJ8pv8Mrc5Wr33yMDkmp05GfkY+\n1HJ1kCokf4ISHtasWYMVK1Zg9OjRPtNKExFR6NMZddhTuQf/q/0f3ILba59arkZ+Rj4maSchQhoR\npArpQoISHoYPH44HHngAS5YsQUJCAhISEiAWey9/KhKJ8PrrrwejPCIi6gKCIOC7U99hT8UelDaW\n+uxPjE7E9MzpGJ00mndO9HBB+b/z7rvv4o9//KOnQ9ZisQSjDCIi6gYOlwMHqg9gb+Vev02QA/sN\nxPTM6bgs7jLeOdFLBCU8vPDCC7jssstQWFiI/v37B6MEIiLqYk2tTfjkxCf45MQnsNi9/0gUi8QY\nnTQa0zKmIUWVEqQKqaOCEh4MBgOWLl3K4EBEFIJqm2pRXFmMA9UH4HQ7vfada4LMS8/jmhO9WFDC\nwxVXXIHyct811omIqHcSBAE/nv4Reyr34PtT3/vsj4mIQX5GPiZqJ0IeJg9ChdSZghIeHnvsMSxb\ntgybN2/GggULEB0dHYwyiIjoEjlcDhysOYi9lXtR21Trsz9NnYZpmdMwMmEkxCKxnyNQbxSU8DBv\n3jw4nU4888wzeOaZ/8/encdFVe//A38N+74ju2yCoCCrgOaSWtliXbWuLVqZpZXmr695tbzXNr0t\nditvWZZkaWVX695suZbWdcnMFFQE2RQR2XdZBmSfOb8/jgwNMyionAPD6/l9+LjNOR+Y98wXh5ef\n8z6fzxuwsrKCsbGx1hiFQoGkpCQ5yiMioitQtipxMP8gDhYcRENrg9Y5hUKBSPdI3BxwMwIcA9gE\naYBkCQ/Tpk3jDxMR0SBUVF+Efef34VjJMZ1+BnMTc4z3GY9p/tPgau0qU4UkBVnCw+uvvy7H0xIR\n0VVQC2qkV6Rjb95eveszOFo6Yqr/VEwYPgFWplYyVEhS4yocRESkV3N7Mw4XHcaB8wdQ3VStcz7A\nMQDTAqaxn2EIkiQ8/Pzzz7jlllsk/1oiIuq7isYKHMg/gN+LftfZb8JIYYQYzxhM9Z+KAMcAmSok\nuUkSHl544QWsX78ec+bMwa233goPj8vvilZcXIw9e/bg3//+N5RKJcMDEVE/EwQBWVVZ2H9+PzIq\nM3TOW5laYaLvREzxm8L1GUia8LBv3z5s2bIFmzZtwhtvvIHhw4dj9OjR8Pb2hp2dHQRBgFKpRHFx\nMTIyMlBcXAx7e3vMmzcP8+fPl6JEIqIhqbWjFUeKj+DA+QN6l472sPXANP9piPeOh5mxmQwV0kAk\nSXiwtrbGU089hccffxz79+/HgQMHcPLkSezevRuCIAAQb+0ZPnw4oqOjsWLFCkyZMgWmpqZSlEdE\nNORUXqzEL/m/4HDhYbR0tGidUygUCB8Wjqn+UxHiEsK740iHpA2TpqammD59OqZPnw4AUKlUqK+v\nBwDY29vrrPVARETXT+eliQP5B5BRmaH5x1snCxML3DD8BtzodyOGWXP7AOqZrHdbGBsbw8nJSc4S\niIgMXktHC34v+h2/5P+CisYKnfNuNm6Y4jcF43zGcelo6hXeqklEZKDKGsrwS/4vOFJ8ROeuCQAI\nGxaGqf5TuRU29RnDAxGRAVELaqSVp+FA/gGcqT6jc56XJuh6YHggIjIAylYlfiv8Db8W/Ira5lqd\n8x62HpjqPxXxXvEwNzGXoUIyJAwPRESDlCAIyKvNw4H8A0gpS4FKrdI6b6QwQqR7JKb4T0GQUxAv\nTdB1w/BARDTItHa0IrkkGb/k/4JiZbHOeVtzW0wYPgGTfSdzQSfqFwwPRESDRFlDGQ4WHMSRoiM6\nazMAQKBTICb7TkaMZwxMjPjxTv1Htp+uQ4cO4T//+Q+KioqgVCp17jdWKBTYu3evTNUREQ0MHeoO\npJan4mD+Qb07WpoamyLOKw5T/KbAx95HhgppKJIlPGzevBlvvfUWnJ2dMWbMGIwcOVKOMoiIBqwL\nTRdwqPAQDhcehrJVqXPezcYNk30nY5zPOG6DTZKTJTx89tlniI+Px0cffcQlqImILlELamRWZuJg\nwUG9K0AaKYwQ4R6Byb6TuWw0yUqW8KBUKnHrrbcyOBARAahrqcPvRb/jUMEh1DTX6Jx3sHDARN+J\nmDB8AhwsHGSokEibLOEhPDwc+fn5cjw1EdGA0LnPxKHCQ0grT4NaUOuMGT1sNCb5TsIYtzEwUhjJ\nUCWRfrKEhxdeeAELFy7EmDFjcPvtt8tRAhGRLJStShwuPIzfCn9DdVO1znkbMxuM9xmPSb6T4Grt\nKkOFRFcmSXiYNWuW3uPLly/HSy+9BHd3d50dNRUKBXbu3ClFeURE/UoQBGRXZ+NQwSGklqfqnWUI\ndg7GJN9JiPKI4m2WNOBJ8hNqY2Oj95iPD28rIiLD1dnL8Fvhb7jQdEHnvJWpFcb5jMPE4RPhYesh\nQ4VEV0eS8PD5559L8TRERLLrvGPiUOEhpFek651lGOE0ApN8JyHaIxqmxmwcp8FHlrmxb7/9FrGx\nsfD29tZ7vqSkBMeOHcPMmTMlroyI6OpcaLqA34t+x+Giw3o3prI2s0aCdwJnGcggyBIeVq1ahTfe\neKPH8JCWloZVq1YxPBDRgNah7sCpilP4rfA3ZFVl6azLAIi9DBN9JyLKPYqzDGQwZAkP+v6C/VFT\nU5NOAyUR0UBR1lCGw0WHcaToCBrbGnXO25rbYpz3OEwYPgFuNm4yVEjUvyQLD6dPn8bp06c1j48f\nPw6VSqUzTqlUYseOHfD395eqNCKiK2rtaMXx0uP4rfA35NXm6ZxXKBQIdQnFRN+JGOM2hndMkEGT\n7Kd77969eO+99wCIf8m+/PJLfPnll3rH2tvb44033pCqNCIivQRBQF5tHg4XHcbx0uNo7WjVGeNo\n6YgbfG7AeJ/xcLZylqFKIulJFh7uu+8+3HTTTRAEAbNmzcKyZcswefJknXFWVlbw8vLiZQsikk19\nSz2OFh/F4aLDqGis0DlvbGSMCLcITBg+AaGuoVz9kYYcycKDi4sLXFxcAIgbYwUGBsLZmSmdiAaG\nzubH34t+R2Zlpt5bLD1sPTBh+ATEe8XD1txWhiqJBgZZLsrFxcXJ8bRERDqK6otwpPgIkoqT9DY/\nWphYYKzXWNzgcwP8HPy4kyURZAoPDz300GXPKxQKmJubw93dHfHx8Zg+fTpMTNh8RETXR2NbI5JL\nkvF70e8oqi/SOybYORg3DL8B0R7RMDM2k7hCooFNtls1KyoqUFhYCHt7e3h5eQEQF4eqr6+Hr68v\nbGxskJaWhq+++gqJiYnYsmULnJyc9H6/3bt347vvvkNmZiYaGxvh7++PBQsWYMaMGVrjvvrqK2ze\nvBllZWUICgrCihUrMG7cuH5/vUQkP5VahYzKDBwpPoJTFaegUuve7eVo6YjxPuMx3mc8XKxcZKiS\naHCQJTw8/fTTWLJkCV5//XXceeedmuZIlUqF77//HuvWrcO6desQERGBb775Bs8//zzWr1+PtWvX\n6v1+W7duhbe3N1atWgVHR0f8+uuvWL58OWpra/Hggw8CAHbt2oUXX3wRTz31FGJiYrBz5048/vjj\n+M9//oPg4GDJXjsRSavzskRySTIaWht0zpsamyLKPQrjfcZjpMtINj8S9YIs4eGNN97A7NmzdVaQ\nNDY2xqxZs5CTk4PXXnsNX375JWbPno3U1FTs37+/x+/3wQcfaM1KjBs3DpWVldiyZYsmPGzYsAEz\nZ87EkiVLAIh9F9nZ2UhMTMSbb77ZD6+SiOSibFUiqTgJR4uPolhZrHdMgGMAxvuMR4xnDKxMrSSu\nkGhwkyU8nDlzBn/60596PO/t7Y1//etfmsejR4/GN9980+N4fZczQkND8dNPPwEAioqKkJ+fj7/9\n7W+a80ZGRpg+fTo37SIyEO2qdqRVpOFI0RFkVmXqXcnWwcIB43zGYZz3OK78SHQNZAkPrq6u+Pnn\nn3H//ffDyEh7ilCtVmPPnj2a2zoBoK6uDvb29n16jtTUVM0qlXl54mpwAQEBWmMCAwNRV1eHmpqa\nHvspiGjgEgQBuTW5OFp8FMdLj6Olo0VnTOdliXE+4xDiEsLLEkTXgSzh4ZFHHsHatWsxd+5c3Hvv\nvfDx8QEAFBYW4ssvv0RaWhpWr16tGf/TTz8hPDy819//yJEj2Lt3L1599VUAQH19PQDAzs5Oa1xn\nIKmvr2d4IBpEKhorcLT4KJJKknCh6YLeMUHOQRjnPQ4xnjGwMLGQuEIiwyZLeJg7dy4UCgXeffdd\nPPfcc5r7pgVBgIODA1avXo25c+cCANra2rBixYoed+Dsrri4GMuXL8e0adMwe/bsfnsNRCSthtYG\nHC89jqPFR5Ffl693zDDrYUjwTkC8dzzvliDqR7ItnvDAAw/gz3/+MzIyMlBaWgoA8PT0RFhYGExN\nu7atNTMz6/XtlHV1dVi4cCE8PT21miA7ZxgaGhq0Zh86ZyT6ekmEiKTRpmpDWnkajhYfRVZVlt5V\nH61MrRDrGYtxPuPg7+DPRZyIJCDrykumpqaIiopCVFTUNX+v5uZmPPHEE2hvb8emTZtgaWmpOdfZ\n65CXl6dZU6LzsYODAy9ZEA0gakGN7KpsJJck42T5Sb2bURkbGWOM2xjEe8Uj3C2cO1gSSUzWv3G5\nubkoKirSzAB01/1Wzp50dHTg6aefRn5+Pnbs2KGzZ4aPjw/8/PywZ88eTJw4EUBXY2bnYyKSjyAI\nKKgvQHJJMo6VHIOyVal33AinEYj3jkeMRwyszawlrpKIOskSHgoLC7FixQqcOnVK7+1UgLhEdW/D\nw8svv4yDBw/ib3/7G+rq6pCamqo5N2rUKJiZmWHp0qVYsWIFvLy8EB0djW+//RYFBQV46623rstr\nIqK+q2isQFJJEpJLklF1sUrvGDcbNyR4JyDOK459DEQDhCzh4YUXXkBOTg7++te/IjY2VucuiL46\nfPgwAOCVV17RObdv3z54e3tjxowZaGpqwkcffYSNGzciKCgImzZt4uqSRBKrba7FsdJjSC5J7nFf\nCTtzO8R5xSHOKw7D7Yezj4FogJElPKSkpGDRokWa1R+v1eVWn/yjOXPmYM6cOdflOYmo9xrbGpFS\nloLkkmScvXBW7xgLEwtEe0QjziuOy0QTDXCyhAcHBwfe4UBk4Fo6WpBanorkkmRkV2XrvVPCxMgE\n4W7hiPOKQ/iwcJgam+r5TkQ00MgSHu699158//33eOCBBzSbYhHR4NemasOpilM4Xnoc6RXp6FB3\n6IxRKBQIcQlBnFccIt0jua8E0SAkS3gIDg7Gvn37MGvWLNxzzz3w8PDQWaYaAKZNmyZDdUTUF+2q\ndmRVZeFY6TGcqjil99ZKQNyIKs4rDjGeMbAzv7Y+JyKSlyzhYenSpZr/7lxCujuFQoHs7GypSiKi\nPuhQdyC7KhvHS48jtTxV754SAOBt5404rzjEesbC2cpZ7xgiGnxkCQ+fffaZHE9LRNdApVbhdPVp\nTWBoam/SO87dxh1jvcYi1jMW7jbuEldJRFKQJTzExcXJ8bRE1EedgeFE2QmklqfiYttFveNcrFw0\ngcHL1ou3VhIZOFlXmGxoaEBaWhpqamowfvx4zTbcarVabw8EEfW/DnUHzlSfwYmyEzhZdrLHGQZn\nK2fEeMQg1jOWazEQDTGyhYf3338fH330EVpaWqBQKPDJJ5/AxcUFtbW1mDJlClasWKHZWZOI+ldn\nD0NKWcplL0k4Wjoi1jMWsZ6x8LX3ZWAgGqJkCQ+ff/45NmzYgPvuuw833HCDVgOlo6MjbrrpJuzZ\ns4fhgagftavakVmViZSyFJyqOIXm9ma945wsnRDtEY0YzxjuWklEAGQKD1988QXuuOMOvPTSS6it\nrdU5HxoaiqNHj8pQGZFha+loQUZlBk6WnUR6ZXqPt1U6Wzkjyj0KsZ6x8HPwY2AgIi2yhIeSkhIs\nWLCgx/M2NjY97rRJRH3T1N6EtPI0nCw/iczKTL0LNwFi02OMZwyiPaJ5SYKILkuW8ODk5ITKysoe\nz2dnZ8PDw0PCiogMS31LPVLLU3Gy/CTOVJ/RuzQ0IO5YGeMhBgZvO28GBiLqFVnCw0033YTt27dj\n9uzZsLS01DqXnJyMr7/+GvPnz5ejNKJBq/JipRgYyk4irzavx3Hedt6I8ohCtEc0PGw8GBiIqM9k\nCQ//7//9PyQnJ+Ouu+7C2LFjoVAosGXLFnzwwQc4fvw4goOD8cQTT8hRGtGgIQgCipRFmsBQ2lDa\n41g/Bz9Ee0QjyiMKw6yHSVglERkiWcKDvb09vvrqK3zyySf4+eefYW5ujqNHj2L48OF48skn8dhj\nj+nMSBCRuGjT2ZqzSC1PRWp5KmqbdRuOAcBIYYRg52BEukci0j0SjpaOEldKRIZMtnUeLC0tsWTJ\nEixZskTnnEqlQnNzMwMEEcQ7JDIrM5FWkYb0ivQe12AwNTbFKNdRiHSPxBi3MbAxs5G4UiIaKmRd\nYbIniYmJePfdd7kxFg1Ztc21OFVxCmkVaThTfabHOySsTK0Q7haOSPdIjHYdDXMTc4krJaKhaECG\nB6KhRhAEFCuLkVaRhlMVp1BQV9DjWEdLR83liCCnIBgbGUtYKRERwwORbNpV7ci5kKMJDD31LwDi\nHRKR7pGIcI+Aj50P75AgIlkxPBBJqL6lHhmVGThVcQrZ1dk9rvBopDDCSJeRiHCLwBi3MXC2cpa4\nUiKinjE8EPUjQRBQWF+I9Mr0K16OsDK1QtiwMIxxG4OwYWGwNGXDMBENTJKFh9OnT/d6bHV1dT9W\nQtS/WjpakF2VjfTKdKRXpEPZquxx7DDrYRjjNgYR7hEY4TQCRgpuRU9EA59k4WHmzJm9vk4rCAKv\n6dKgIQgCKi5WIKMyA+kV6ThbcxYqtUrvWCOFEUY4jcAYtzEY4zYGbjZuEldLRHTtJAsPr732mlRP\nRdTv2lRtyLmQg/SKdGRUZqC6qefZMmsza83liFGuo2BlaiVhpURE159k4WHWrFlSPRXRdScIAiov\nViKjMgOZVZnIuZCDdlV7j+N97H0QPiwcYcPC4O/oz8sRRGRQ2DBJ1IPWjlacuXAGmZWZyKzKRNXF\nqh7HmpuYI9QlFOFuYmBwsHCQsFIiImkxPBBdIggCShpKkFWVhczKTOTW5Pa4siMAeNh6IGxYGMKG\nhWGE0wiYGPGvExENDfy0oyGtsa0R2VXZyKzKRFZVFupb6nsca25ijhCXEIQNC8No19Fce4GIhiyG\nBxpSOtQdyKvNQ1ZVFrKqslBYXwhBEHoc72XnhdGuozF62GjOLhARXcJPQjJogiCgvLFcExZyLuSg\nTdXW43grUyuMch2F0cNGY5TrKPYuEBHpwfBABqe+pR6nq08jqyoLp6tPo66lrsexRgoj+Dv6i4HB\ndTR8HXx5ZwQR0RUwPNCg19LRgpwLOThdfRrZVdkobSi97HhXa1eEuoRi9LDRGOk8kstAExH1EcMD\nDTqdfQvZVdk4c+EMzteeh1pQ9zje0tQSIS4hGOU6CqEuoXC1dpWwWiIiw8PwQAOeWlCjsL4Qp6tP\n43T1aeTW5F52gSZjI2MEOgYi1DUUo1xHYbj9cF6KICK6jhgeaMARBAHFymKcuXAGZ6rPIOdCDlo6\nWi77NT72Pgh1CUWISwhGOI2AuYm5RNUSEQ09DA8kO0EQUNZYhjPVZ3DmghgWLrZdvOzXDLMehhCX\nEIS4hGCky0jYmNlIVC0RETE8kOQEQUBpQylyLuRo/jS2NV72axwsHLTCgpOlk0TVEhFRdwwP1O/U\ngholyhJNUDhbc/aKMwu25rYY6TwSI11GYqTzSAyzHsZt2omIBgiGB7ruVGoVCusLcbbmLHIu5CC3\nJhfN7c2X/RobMxsEOwdrwoK7jTvDAhHRAMXwQNesTdWG87XncbbmLM5eOIu82rzLruIIiDMLQU5B\nmsDgYePBsEBENEgwPFCfNbY14lzNOeTW5OJszVkU1BVcdp0FALAzt0OwczCCnIM4s0BENMgxPNBl\nCYKAqqYqTVg4V3sOZQ1lV/w6ZytnjHAagWDnYAQ7B8PVypVhgYjIQDA8kJYOdQcK6wtxruYcztWe\nw7mac1C2Kq/4dR62HghyCsIIpxEIcg7i3RBERAaM4WGIU7YqkVebpwkLBXUF6FB3XPZrjI2M4Wvv\nixFOIzR/rM2sJaqYiIjkxvAwhKjUKpQ0lCCvNk8TGKqbqq/4dZamlgh0DNQEBT8HP5gam0pQMRER\nDUQMDwasrqUO52vP43zdeeTV5iG/Lv+ye0J0crV2RaBjIAKdxMDAOyGIiOiPGB4MRGtHKwrrC3G+\n7rwmMNQ2117x60yMTODn4IcAxwAEOgUi0DEQtua2ElRMRESDFcPDIKQW1ChtKEV+XT7y6/JxvvY8\nShtKr3i7JCDeBeHv4K8JC9523jAx4o8BERH1Hn9rDHCdt0oW1BUgvy4fBfUFKKgruOIiTABgZmwG\nXwdfTVgIcAyAvYW9BFUTEZEhG3LhITc3F2vXrkVqaipsbW3x5z//GU899RSMjY3lLg2CIKCmuQYF\n9QUorC8Uw0JdAZram674tQqFAu427vB38Ie/oz/8HfzhZecFI4WRBJUTEdFQMqTCQ319PebPn48R\nI0Zg48aNKCwsxLp166BWq7Fs2TJJa+kMCoX1hZqwUFBXcMXdJTs5WjrCz8FP64+FiUU/V01ERDTE\nwsOOHTvQ2tqK9957DzY2NrjhhhvQ2NiI9957DwsXLoSNjU2/PK8gCKhuqkZhfaHWn94GBWsza/g5\n+MHX3lcTFHj5gYiI5DKkwsOvv/6KCRMmaIWEO+64A2+++SaSk5MxderUa34OlVqFssYyFCuLNSGh\nqL4ILR0tvfp6CxML+Dr4wtfeF74OYlhwtnTmrZJERDRgDKnwkJeXh4SEBK1jnp6esLS0RF5e3lWH\nh+b2ZuzK2YWzNWdRoiy54gqNnSxMLDDcfrhWWOAeEERENNANqfCgVCpha6u7hoGdnR2Uyivv39CT\nXTm7sDdv72XHWJtZY7j9cK0/DApERDQYDanw0F8cLBy0HjtZOsHH3gc+dj6aoOBg4cCgQEREBmFI\nhQc7Ozs0Nuo2KSqVStjZ2V31950WMA2BToFoU7XBx86Hm0QREZFBG1LhISAgAHl5eVrHysrK0Nzc\njICAgB6/TqVSAQDKy8t7HGN26f9qW2pRiysvC01ERDSQdf7O6/wd+EdDKjxMmjQJH3/8MRobGzV3\nXPz444+wsLBAXFxcj19XVVUFAJg7d64kdRIREQ0UVVVV8PX11TqmEARBkKkeydXX1+OOO+5AUFAQ\nFi5ciKKiIrz++ut46KGHLrtIVEtLCzIyMuDq6jogVqIkIiLqbyqVClVVVQgLC4OFhfYihEMqPADi\n8tRr1qxBamoq7OzscM8992Dp0qUMBURERL005MIDERERXRvumkRERER9wvBAREREfcLwQERERH3C\n8HCNcnNz8fDDDyMiIgITJkzAO++8o/eeWEOxe/duPPHEE5g4cSKioqIwe/Zs7Nq1S2fcV199hVtu\nuQXh4eGYPXs2jhw5IkO10qmoqEBUVBRGjhyJixcvao4LgoAPP/wQkydPxpgxYzB37lxkZ2fLWOn1\n19HRgcTERNxyyy0ICwvDpEmT8Oqrr2qNGQrvww8//IBZs2YhKioKEydOxMqVK1FRUaE1xtDeh4KC\nArzwwgu48847ERoaigcffFBnTG9f82D+LL3S+1BZWYl169bhrrvuQlRUFCZPnoxnn31W5+cDED9L\nlixZgqioKMTHx2PNmjVobm6W6qX0GsPDNaivr8f8+fOhUCiwceNGLFmyBFu2bMG7774rd2n9ZuvW\nrbC2tsaqVauwceNGxMfHY/ny5fj88881Y3bt2oUXX3wRf/rTn/DRRx9hxIgRePzxx5GTkyNj5f3r\njTfegJWVlc7xxMREbNy4EQsXLsSHH34IKysrzJ8/X7N2iCF47rnn8Nlnn2HBggX45JNPsHz5cp3b\nugz9fdi3bx+eeeYZREVFYePGjfjLX/6C48eP4/HHH4dardaMM7T34ezZszh48CD8/f3h5+end0xv\nXvNg/yy90vuQmZmJvXv3YsaMGfjggw+wcuVKpKWl4f7779f6x0Z7ezseffRRlJaWYv369fjb3/6G\nPXv24Pnnn5fw1fSSQFftww8/FGJjY4WGhgbNscTERGHMmDFaxwzJhQsXdI4988wzwpQpUzSPb7nl\nFuG5557TPFapVMKMGTOE5cuXS1Kj1JKTk4WxY8cKmzdvFoKDg4XGxkZBEAShpaVFiI6OFjZs2KAZ\ne/HiRSE+Pl54++235Sr3ujp48KAwatQo4ezZsz2OGQrvw//93/8Js2bN0jq2d+9eITg4WMjNzRUE\nwTDfB5VKpfnvpUuXCvPmzdM639vXPNg/S6/0PtTX1wvt7e1ax/Ly8oTg4GBh586dmmP//e9/hZCQ\nEKGwsFBz7IcffhBGjhwpnD9/vn+Kv0qcebgGv/76KyZMmKBZrRIA7rjjDrS0tCA5OVnGyvqPk5OT\nzrHQ0FBUVlYCAIqKipCfn4/bbrtNc97IyAjTp0/HoUOHJKtTKiqVCmvXrsXixYvh6OiodS4lJQWN\njY1a74WVlRWmeqAFSQAAIABJREFUTJliMO/F119/jYSEBIwYMaLHMUPhfejo6ND6HACg2S9HuHQ3\nvCG+D0ZGl/8V0tvXPNg/S6/0PtjZ2cHERHtBZ39/f1haWmo+OwHxfQgPD4ePj4/m2E033QRTU9MB\n9zPC8HAN8vLydPbE8PT0hKWlpc4eGoYsNTUV/v7+AKB53d3fl8DAQNTV1aGmpkby+vrTjh070NbW\npnfp8ry8PBgbG+tMYwYGBhrMz8epU6fg5+eHNWvWIDo6GhEREXjqqae0ruUOhffh7rvvxokTJ/Dt\nt9+isbER58+fxz//+U+tYDUU3ofuevuah+Jn6enTp9Hc3Kz13uh7H8zMzDB8+PAB9z4wPFwDpVIJ\nW1tbneN2dnZQKpUyVCS9I0eOYO/evXjkkUcAiNcuAejsUmpvb6913hDU1tbinXfewapVq2Bqaqpz\nXqlUwsrKSmf1Unt7ezQ3N6OtrU2qUvtNVVUVdu7ciezsbKxfvx6vvfYaMjMz8dRTT2n+xT0U3ocb\nb7wRr732Gp5//nnExMTg1ltvhUqlwoYNGzRjhsL70F1vX/NQ+yxVq9V45ZVX4Ofnh6lTp2qOD6b3\nYUhtjEXXV3FxMZYvX45p06Zh9uzZcpcjufXr1yMiIgKTJ0+WuxTZbdy4UXPZxtXVFfPmzcPRo0cx\nbtw4mSuTxtGjR/Hiiy/ioYcewqRJk3DhwgVs2LABS5YswdatW7n8PWl56623kJqaim3btun9h8dg\nwPBwDezs7NDY2KhzXKlU6vzL29DU1dVh4cKF8PT0xJtvvqk53jnD0NDQoPUedM44dJ4f7M6ePYud\nO3di27Ztmn8RdN5O1djYCGNjY9jZ2aGpqQkqlUrrl0d9fT0sLS1hZmYmS+3Xk52dHXx8fLT6PWJi\nYmBqaorc3FyMGzduSLwP69atw9SpU7FixQrNsZCQENx2223Yt28fbrnlliHxPnTX29c8lD5Lv/ji\nC3z88cd4++23ERERoXXucu9DSEiIVCX2Ci9bXIOAgACd61BlZWVobm7WuW5lSJqbm/HEE0+gvb0d\nmzZtgqWlpeZc5+vu/r7k5eXBwcFBb8PlYFRQUID29nbce++9GDt2LMaOHYs1a9YAELd+X7t2LQIC\nAqBSqVBQUKD1tfquaw5WgYGBmssT3XU2kQ2F9yEvLw+hoaFaxwICAmBhYYHCwkLNY0N/H7rr7Wse\nKp+lP/30E/7+979jxYoVuP3223XO63sf2traUFRUNODeB4aHazBp0iT89ttvWknxxx9/hIWFBeLi\n4mSsrP90dHTg6aefRn5+PjZv3gxnZ2et8z4+PvDz88OePXs0x9RqNfbs2YOJEydKXW6/iY6Oxmef\nfab1Z+HChQDE+9offfRRREdHw8bGRuu9aG5uxoEDBwzmvbjxxhuRk5Oj1Qh77NgxtLe3Y+TIkQAw\nJN4HT09PZGVlaR07d+4cWlpa4OXlBWBovA/d9fY1D4XP0qSkJPzlL3/BvHnz8Oijj+odM2nSJKSn\np6OkpERzbP/+/WhraxtwPyPGL7300ktyFzFYBQUF4csvv0RSUhKGDRuG33//HW+//TYefvhhg70O\n/uKLL+LHH3/E8uXLYW9vj/Lycs0fJycnGBsbw9HREe+++y6MjIygUqnw/vvv4/jx41i3bp1O2Bis\nLC0t4e3trfWnvLwc+/btw8svvww3NzfNrVkffvgh7OzscPHiRbz22msoLy/HunXr9C4qNdgEBwdj\n586d+OWXX+Ds7IyMjAy8/PLLGDNmDBYvXgwAQ+J9UKlU2LJlCxobG2FkZISTJ0/ipZdegrW1Nf76\n17/C1NTUIN+H5uZm7Nu3D7m5ufjtt99QX18PZ2dn5ObmwsvLS7NY2JVe82D/LL3S+1BYWIhHHnkE\nvr6+WLhwISoqKjSfm21tbZrLuf7+/vj555/x888/w93dHRkZGXjllVcwbdo0zJkzR+ZXqY1bcl+j\n3NxcrFmzBqmpqbCzs8M999yDpUuXGmyD1NSpU7VS8R/t27cP3t7eAMTlqT/66COUlZUhKCgIK1eu\nNPjmuZ07d2LVqlVISUmBtbU1gK6lebdv3466ujqEhYVh9erVGDVqlMzVXj8FBQX4+9//jmPHjsHU\n1BTTpk3DqlWrtPpbDP19EAQB27dvx/bt21FUVARbW1vExMRg+fLlWvfsG9r7UFxcjGnTpuk91/l5\n0NvXPJg/S6/0PiQnJ2PVqlV6z8+aNQuvv/665nF5eTnWrFmDI0eOwMzMDLfffjtWrlypdXl4IGB4\nICIioj5hzwMRERH1CcMDERER9QnDAxEREfUJwwMRERH1CcMDERER9QnDAxEREfUJwwMRERH1CcMD\nERER9QnDAxEREfUJwwMRERH1CcMDERER9YmJ3AUMBi0tLcjIyICrq+ug2KSFiIjoWqlUKlRVVSEs\nLEyzQ2onhodeyMjIwNy5c+Uug4iISHJffPEFYmNjtY4xPPSCq6srAPENdHd3l7kaIiKia3DxIpCT\nA1hYAKGhPQ4rLy/H3LlzNb8D/4jhoRc6L1W4u7vD29tb5mqIiIj6qK0NSEsDkpKAzExArRaPP/kk\nEBl52S/Vd7me4YGIiMgQqdXAmTPA0aPAyZNAa6vuGIXiqr41wwMREZGhEASgqEicYTh2DKiv1z8u\nMBC48UYgIuKqnobhgYiIaLCrrgaSk8U/ZWX6x7i5AQkJQFwc4OJyTU/H8EBERDQYXbwInDghzjLk\n5uofY2cHjB0LxMcDw4df9WWK7hgeiIiIBov2diA9XexjyMgAVCrdMebmYhNkfLx4N4XR9V8PkuGB\niIhoIFOrxVsrk5PFmYaWFt0xRkbAqFFiYIiIEANEP2J4ICIiGmgEASgpES9JJCcDdXX6x/n7i4Eh\nNhawtZWsPIYHIiKigaK2VgwLR48CpaX6x7i6ioEhPh4YNkza+i5heCAiIpJTUxOQkiLOMuTk6B9j\nayvOLsTHA35+163x8WoxPBAREUmto0NsfExKEv+3o0N3jKmp2PiYkCA2Pg6gjRkZHoiIiKQgCOIt\nlUlJYuNjU5PuGIUCCAkRA0NkpLj/xADE8EBERNSfSkvFPoakJKCmRv8YX1/xksTYseLaDAMcwwP1\nSKVSQaVSwczMTO5SiIgGl7o6cXnopCRxuWh9nJ27Gh8H2Y7NDA+k8dxzzyEnJweLFy/G+vXrkZ+f\nj08//VRnH3ciItKjpaWr8fHMGfEyRXfW1kBMjHhZIiBA9sbHq8XwQFpKSkrwj3/8A4sXL4arqyu3\nICciupyODiArSwwMaWniCpDdmZiICzfFxwOjR4uPB7nB/wrouqqrq8PWrVsRGhoqdylERAOTIAB5\neWJgOH5c3GOiO4UCGDlS3IQqOhqwtJS+zn7E8NCf/vc/4L//1b+Hen8zNwfuvBO4+eY+fZmbmxuD\nAxGRPuXlXSs+VlfrH+PtLc4wxMUBDg7S1ichhof+9L//yRMcAPF5//e/PocHl2vcppWIyKAolV2N\njwUF+sc4OnY1Pnp6SlufTBge+tPNN8s789DH4EBERBA/s0+eFGcYsrL0Nz5aWYmNj3FxQFDQoG18\nvFoMD/3p5pv5C5yIaDBQqYDsbHFPibQ0oK1Nd4yJCRAeLs4whIcbROPj1Rq6r5yIiIY2QQDy87sa\nHxsa9I8LDhYDQ3S0OONAhhEedu7ciVWrVukcf+mll3D//fcDAARBwKZNm7B9+3bU1tYiPDwcq1ev\nZnMgEdFQU1nZteJjZaX+MZ6e4iWJ+HjAyUna+gYBgwgPnT799FNY/GEdcB8fH81/JyYmYuPGjVi5\nciUCAgKwZcsWzJ8/H7t27YKrq6sc5Q44r7/+utwlEBH1j4YGcXYhKQk4f17/GAeHrsDg5TXk+hj6\nwqDCQ3h4OKytrXWOt7a2IjExEYsWLcK8efMAAJGRkZg6dSq2bduGZcuWSV0qERH1t9ZW4NQpsY8h\nKwtQq3XHWFiIlyPi48XLE0ZG0tc5CBlUeOhJSkoKGhsbcdttt2mOWVlZYcqUKTh06BDDAxGRoVCr\ngdOnxRmGkyf13+1mbAyEhYmzDBER4tbX1CcGFR5uvvlm1NXVwcfHB4888gjuu+8+AEBeXh6MjY3h\n5+enNT4wMBC7d++WoVIiIrpuBEHcfKpzASelUv+4wEBxT4mYGHGPCbpqsoSHs2fPIiUlBbm5uait\nrYVCoYCjoyMCAwMRFRWF4ODgPn0/V1dXPP300xgzZgxUKhV+/PFHvPjii2hpacH8+fOhVCphZWUF\nY2Njra+zt7dHc3Mz2trauHMkEdFgU13d1fhYXq5/jLt714qPXATvupEsPNTU1GDHjh347rvvUFhY\nCEEQYGpqCnt7ewiCAKVSifb2digUCnh7e2PmzJm4//774dSLLteJEydi4sSJmseTJ09Ga2srPvjg\nAzz00EP9+bKIiEhKFy8CJ06IfQznzukfY2cHjB0rzjL4+LDxsR9IEh7efPNNfPHFF7CxscH06dMx\nfvx4jB49Gm5ublrjKioqkJmZicOHD2PHjh3YvHkzHnzwQTzzzDN9fs7p06dj9+7dKCkpgZ2dHZqa\nmqBSqbRmH+rr62FpaclZByKigay9XWx8TEoCMjLEBZ26MzcHoqLEWYaQEDY+9jNJwsOJEyfw5ptv\nYurUqVBcJgG6ubnBzc0NU6dOxerVq7F//35s3rz5qp7zj88TEBAAlUqFgoICBAQEaI7n5eVpPSYi\nogFCrQZycsTAkJICtLTojjEyAkaNEmcYxowRAwRJQpLwsH379j5/jUKhwLRp0zBt2rSres6ffvoJ\njo6O8PLywrBhw2BjY4M9e/Zg8eLFAIDm5mYcOHAAc+bMuarvT0RE15kgAMXFYh9DcjJQV6d/nL+/\nOMMQGwvY2kpbIwEwkLstli5divDwcIwcORJqtRo//vgjfvzxR6xevRpGRkYwNzfHokWLsHHjRtjb\n22sWiVKr1XjwwQflLp+IaGirqelqfCwt1T9m2LCuxsdhw6Stj3TIGh5UKhWqqqpQX18PQc+uZSEh\nIb36Pv7+/vj6669RXl4OQRAwYsQIrFu3DjNnztSMWbRoEdRqNTZt2oS6ujqEhYVhy5Yt3IKaiEgO\nTU1i42Nysnh5Qh9bW3F2IT4e8PNj4+MAohD0/dbuZ0qlEm+88Qb++9//ok3PzmWCIEChUCA7O1vq\n0vQqLi7GtGnTsG/fPnh7e8tdDhHR4NTRAaSnizMM6eni4+7MzMSFmxISgNBQcUEnksXlfvfJMvPw\n7LPP4pdffsHtt9+OiIgI2PKaFRGRYRIE4OxZMTCcOAE0N+uOUSjExsf4eCAyko2Pg4As4eH333/H\nww8/jOeee06Opyciov5WWioGhqQkoLZW/xhfXzEwjB0rrs1Ag4Ys4cHJyYnT/0REhqa2Fjh2TAwM\nxcX6x7i4iIEhPh7ottYPDR6yhIe5c+fiu+++w3333QcTE4O44YOIaGhqbhY3oEpKAs6cES9TdGdt\nLc4uxMeLt1my8XHQk+U392OPPQaVSoUZM2bgzjvvhLu7u86+EwC07pYgIqIBoqMDyMwUA0Namv7G\nR1NTsfExLg4YPRrgPxQNiiz/3ywsLMSuXbuQn5+PDRs26B2jUCgYHoiIBgpBAPLyxMBw/Li4x0R3\nCgUwcqQ4wxAdDVhYSF8nSUKW8PDXv/4VxcXF+Mtf/sK7LYiIBrLy8q6trqur9Y/x8elqfHRwkLY+\nkoUs4SEjIwNPPvkkHnvsMTmenoiILqe+Xmx8TE4GCgr0j3FyEi9JxMcDnp7S1keykyU8eHh4sFGS\niGggaWkBUlPFWYbsbP2Nj1ZWQEyMGBhGjGDj4xAmy2/wJUuWYP369ZgxY4bOttxERCQRlUoMCkeP\nisGhvV13jImJuGNlXBwQHs7GRwIgU3hIT0+HjY0Npk+fjgkTJui920KhUHARKSKi600QgPx8cYbh\n2DGgsVH/uODgrsZHKytJS6SBT5bw8Omnn2r+e+/evXrHMDwQEV1HlZVdKz5WVekf4+kp7ikxdqzY\n00DUA1nCw+nTp+V4WiKioaWhQbyt8uhRcbZBHweHrsZHrvxLvcSLV0REhqS1FTh1SgwMWVmAWq07\nxsKiq/ExKAgwMpK+ThrUBkR4aOzhmpuNjY3ElRARDUJqtdj4mJwsLhXd2qo7xtgYCAsTL0uEh4sr\nQBJdJVnCQ1tbGz7++GN88803KC0thUql0jsuOztb4sqIiAYJQQAKC7saH5VK/eNGjBBnGGJixD0m\niK4DWcLDiy++iG+//RYRERGYMmUKV5gkIuqt6uquxseKCv1j3N27dq50dpa2PhoSZAkPe/bswcyZ\nM/Haa6/J8fRERINLY6PY+JicDJw7p3+MnV1X46OPDxdwon4lS3iwsrJCeHi4HE9NRDQ4tLeLO1Ym\nJQEZGfobH83NxXUY4uPFDanY+EgSkSU8zJw5E/v27cMDDzwgx9MTEQ1MajWQkyMGhpQUccno7oyM\nxC2uExLElR/NzKSvk4Y8WcLDM888gzVr1uChhx7C7Nmz9a4wCQBjx46VoToiIgkJAlBc3NX4WFen\nf1xAgDjDEBsL8E40kpks4UGpVKK8vBzJyck4duyYznlBEKBQKHi3BREZrgsXxB6G5GSgtFT/mGHD\nxMAQFyf+N9EAIUt4WLVqFQ4fPoz7778fERERXM+BiIaGpibgxAlxluHsWf1jbG3F2YWEBMDXl42P\nNCDJEh6SkpKwYMECPPPMM3I8PRGRdNrbgfR0cYYhPR3o6NAdY2YGREaKswyhoeKCTkQDmCzhwdHR\nES4uLnI8NRFR/xMEcWYhKUmcaWhu1h2jUACjRomBITJSvHOCaJCQJTw8/PDD+M9//oM///nPsLS0\nlKMEIqLrr6REDAzJyUBtrf4xvr5iYBg7VlybgWgQkiU8KBQKGBkZ4ZZbbsHtt98ODw8PGHW7P1mh\nUODBBx+Uozwiot6rrRXvkkhKEu+a0MfFpWvFRzc3aesj6geyhIdXX31V89+ffvqp3jEMD0Q0YDU3\ni+swJCWJ6zIIgu4Ya2txdiEuTrzNko2PZEBkCQ/79u2T42mJiK5eRweQmSludX3qlP7GR1NTICJC\nnGEYPZqNj2SwZAkPXl5e/fr9KyoqcOutt6KpqQkpKSmwvrSTnCAI2LRpE7Zv347a2lqEh4dj9erV\nCA0N7dd6iGiQEgRxL4nOxseLF3XHKBRASIgYGKKiAAsL6eskkpgs4aG/vfHGG7CyskJTU5PW8cTE\nRGzcuBErV65EQEAAtmzZgvnz52PXrl1wdXWVqVoiGnDKyroaHy9c0D/Gx6er8dHBQdr6iGQmyS4q\nd911F3bt2oUOfdN8Pejo6MD333+Pu+66q0/PdezYMRw6dAgLFizQOt7a2orExEQsWrQI8+bNw/jx\n4/HOO+9AoVBg27ZtfXoOIjJA9fXA3r3AK68AL70E7N6tGxycnIDbbhPPr14N3HwzgwMNSZLMPNx+\n++1Yu3Yt1q5di2nTpmH8+PEYNWoUvL29YXZpU5e2tjYUFRUhIyMDR44cwf79+6FQKHRCwOWoVCqs\nXbsWixcvhl23W6BSUlLQ2NiI2267TXPMysoKU6ZMwaFDh7Bs2bLr82KJaPBoaQFSU8U+htOn9Tc+\nWlmJKz7GxQEjRrDxkQgShYcnnngC8+bNw7///W9888032LlzJxSX/gKam5tDEAS0tbUBEPsSgoKC\nsHjxYtx9992wtbXt9fPs2LEDbW1tmDt3Lv773/9qncvLy4OxsTH8/Py0jgcGBmL37t3X9gKJaPBQ\nqYCsLPGyRGqquAJkdyYm4o6V8fFAWJj4mIg0JPsbYWNjg0ceeQSPPPIIiouLcfLkSeTl5aHu0g5y\nDg4OCAgIQGRkJHx8fPr8/Wtra/HOO+/gH//4B0xNTXXOK5VKWFlZ6ezeaW9vj+bmZrS1tWlmQYjI\nwAgCcP68GBiOHwcaG3XHKBRAcHBX46OVlfR1Eg0SssRpb29veHt7X9fvuX79ekRERGDy5MnX9fsS\n0SBWUSE2PSYlAVVV+sd4eXXtXOnoKG19RIOUQczFnT17Fjt37sS2bdugVCoBAM2X1pJvbGyEsbEx\n7Ozs0NTUBJVKpTX7UF9fD0tLS846EBmKhoauFR/z8/WPcXAQw0J8PHCd/yFDNBQYRHgoKChAe3s7\n7r33Xp1zkyZNwj333IMZM2ZApVKhoKAAAQEBmvN5eXlaj4loEGptFfsXkpKA7GxArdYdY2EBxMSI\nW10HBbHxkegaGER4iI6OxmeffaZ17NChQ/joo4+QmJgIHx8feHl5wcbGBnv27MHixYsBiLMTBw4c\nwJw5c+Qom4iuhVotBoXOxsfWVt0xxsZAeLg4wxAeLq4ASUTXzCDCg5OTE+Lj47WOlZSUAABiY2M1\nK0wuWrQIGzduhL29vWaRKLVazT00iAYLQQAKC7sWcGpo0D9uxAgxMMTEiHtMENF1ZRDhobcWLVoE\ntVqNTZs2oa6uDmFhYdiyZQtcXFzkLo2ILqeqqiswVFToH+Ph0dX46OwsbX1EQ4zBhofZs2dj9uzZ\nWscUCgWefPJJPPnkkzJVRUS91tAg7ieRlATk5ekfY28vLg8dHy8uF80+BiJJyBIejhw5gszMTDz2\n2GOaY9988w3effddtLa2YsaMGXj22Wd11mQgIgPX1gakpYkzDBkZ+hsfzc3FdRgSEoCRIwEjSVbZ\nJ6I/kCU8bNiwAR4eHprH586dw/PPP4+QkBD4+vpi27ZtcHFxwaJFi+Qoj4ikpFYDZ86IMwwpKfob\nH42MxJUe4+PFlR95azWRrGQJD+fOncMtt9yiefz999/D2toa27Ztg4WFBWxsbPDdd98xPBAZKkEA\niovFPSWOHRM3pdInMFDsYYiNBWxspK2RiHokS3hobm7W2rPi0KFDmDhxIiwsLAAAYWFh+P777+Uo\njYj604ULXSs+lpXpH+Pm1rWAk6urtPURUa/IEh48PDyQm5sLAKioqEB2djYeeughzfn6+nqu+Ehk\nKC5eFC9HJCUBZ8/qH2Nr2xUYhg9n4yPRACdLeLjzzjuxadMmtLW1IS0tDXZ2dpg6darmfEZGhs7u\nl0Q0iLS3A+npYmBITxd3suzO3ByIjBQDQ2goGx+JBhFZwsMTTzyB9vZ2HDx4ELa2tnj//fdhZ2cH\nAKirq8OxY8e0ZiKIaBAQBHFm4ehRcabh0v4yWoyMxKCQkABERIgBgogGHVnCg4mJCZYtW4Zly5bp\nnHNwcMDhw4dlqIqIrkpJSdcCTrW1+sf4+YkzDLGxwKV/KBDR4GWwi0QRUT+qrRXDQnKyeNeEPi4u\nYmCIjxebIInIYMgSHlatWnXFMQqFAq+++qoE1RBRrzQ1ASdPipclzp4VL1N0Z23dteKjvz8bH4kM\nlCzhISkpSeeYWq1GVVUVVCoVnJycYGlpKUNlRKSlo0Nc6TEpCTh1SnzcnalpV+PjqFHiTpZEZNBk\nCQ/79+/Xe7y9vR1ffvklPv30U3zyyScSV0VEAMQZhdxc8ZLE8ePijEN3CgUQEiIGhqgo4NIaLUQ0\nNAyongdTU1PMmzcPubm5WLt2LRITE+UuiWjoKCvrany8cEH/mOHDxcAwdqy4KRURDUkDKjx0CgkJ\nwXfffSd3GUSGr65OXB46KQkoKtI/xtm5a6vrP+xJQ0RD14AMD7///jt7Hoj6S0uL2PiYlAScPq2/\n8dHKSrytMj5e3F+CjY9E9AeyhIf33ntP7/GGhgYcO3YMWVlZ3BSL6HpSqYDMTDEwpKWJK0B2Z2Ii\nLtwUHw+MHi0+JiLSY0CFB3t7e/j4+ODll1/GnDlzJK6KyMAIAnD+vBgYjh0T95joTqEARo4UL0lE\nRwOc8SOiXpAlPJw+fVqOpyUaGioqxMCQlARUV+sf4+3d1fjo6ChtfUQ06HFeksgQKJXi7EJyMpCf\nr3+Mo2PXzpVeXpKWR0SGRZLwUFpaCgDw9PTUenwlneOJSI/WViA1VZxhyM4G1GrdMZaWQEyMGBiC\ngtj4SETXhSThYerUqVAoFEhLS4OZmZnm8ZVkZ2dLUB3RIKJWi0EhKUm8Y6KtTXeMiQkQHi7OMoSH\niytAEhFdR5KEh1dffRUKhQKmlz7EOh8TUS8IAlBQ0NX42NCgf1xQkDjDEBMj3mpJRNRPJAkPs2fP\nvuxjItKjqqqr8bGyUv8YD4+uBZycnaWtj4iGLDZMEg0kDQ3AiRNiYMjL0z/G3l68SyIhQbxrgrN4\nRCQxScJDb7bg7o5bctOQ0dYmLtyUlCQu5KSv8dHCQlyHIT4eCA4GjIykr5OI6BJJwoO+LbhbWlpQ\nU1MDQFwcCgDq6+sBgFtyk+FTq4EzZ8TAkJIi3jnRnZEREBYmBoaICDY+EtGAIUl46L4Fd25uLhYs\nWIDHH38cDz/8MJycnAAANTU1+PTTT/Htt99yR00yPIIgbj7V2fh4KSzrCAgQL0nExAA2NtLWSETU\nC7L0PKxduxaTJk3CsmXLtI47OTlh2bJluHDhAtauXYutW7fKUR7R9VVdLS7elJQElJfrH+PmJgaG\nuDjAxUXa+oiI+kiW8JCWlobp06f3eH7UqFH44YcfJKyI6Dq7eLGr8TE3V/8YOzux8TE+Hhg+nI2P\nRDRoyBIe7O3t8dtvv+GBBx7Qe/7XX3+Fra1tr7/fnj17sHXrVpw/fx5NTU3w9PTEn/70Jzz22GMw\nMzMDAAiCgE2bNmH79u2ora1FeHg4Vq9ejdDQ0OvymojQ3g6cOiUGhowMcSfL7szNgchIMTCEhrLx\nkYgGJVnCw7333ot3330XS5cuxbx58+Dr6wsAyM/Px7Zt23Dw4EEsXbq019+vrq4O8fHxePTRR2Fr\na4tTp07hvffeQ3V1NV544QUAQGJiIjZu3IiVK1ciICAAW7Zswfz587Fr1y64urr2y+ukIUCtBnJy\nuhofW1p0xxgZAaNGdTU+mptLXycR0XUkS3hYvHgx2tra8PHHH2Pv3r1a54yNjbFo0SIsXry419/v\nvvvu03qVazDsAAAblElEQVSckJCAixcv4osvvsDzzz+PtrY2JCYmYtGiRZg3bx4AIDIyElOnTsW2\nbdt0ei+Irqi4WAwMyclAXZ3+Mf7+YmCIjQX6MJNGRDTQybZI1P/93//hoYcewpEjR1BSUgIA8PLy\nwrhx4zR3X1wLBwcHtLe3AwBSUlLQ2NiI2267TXPeysoKU6ZMwaFDhxgeqHdqa8WwcPQo0NPmbq6u\nYmCIjweGDZO2PiIiici6wqSTkxPuuOOO6/b9VCoV2trakJmZic8//xz3338/FAoF8vLyYGxsDD8/\nP63xgYGB2L1793V7fjJATU3i5YikJPHyhD42NmLjY1ycONvAxkciMnCyL0/d2NiIxsZGqPWsqtfX\nLbkjIyPRdmmXwZkzZ2LlypUAAKVSCSsrKxgbG2uNt7e3R3NzM9ra2jSNlUTo6ADS08XAkJ4uPu7O\n1FRsfExIEBsfu/1sEREZMtnCw7/+9S9s3boVRUVFPY7p65bcO3bsQHNzM9LT0/H+++9jzZo1eOml\nl66xUhoSBEG8pTIpSbzFsqlJd4xCAYSEiIEhMlJcMpqIaAiSJTxs374da9aswYQJE3D33Xdj/fr1\nmD9/PszNzbFz5064uLjgwQcf7PP3HT16NAAgNjYWjo6OePbZZ7FgwQLY2dmhqakJKpVKa/ahvr4e\nlpaWnHUYykpLuxZwurRcug5fX/GSxNix4qZURERDnCzhYdu2bZgwYQI2b96M2tparF+/HpMnT8a4\ncePw2GOP4e6770ZdTx3svTRq1CgAQHFxMQICAqBSqVBQUICAgADNmLy8PK3HNETU1YnLQyclictF\n6+Ps3LXVtYeHtPUREQ1wsoSHwsJCzQJRppc2++m8M8LW1hb33HMP/vWvf2HBggVX/RwpKSkAAG9v\nb7i5ucHGxgZ79uzR3ALa3NyMAwcOYM6cOdfyUmiwaGnpanw8c0a8TNGdtbW4n0RCgri/BBsfiYj0\nkiU82NraQnVp9T0bGxtYWlqi/A9r/ltbW6O6urrX3+/RRx/F+PHjMWLECBgbGyMlJQVbtmzB7bff\njuHDhwMAFi1ahI0bN8Le3l6zSJRarb6qyyM0SHR0AFlZYmBISxNXgOzOxERcuCk+Hhg9WnxMRESX\nJcsnZVBQEE6fPq15HBERge3bt2Py5MlQq9X48ssvdW6rvJzw8HB88803KCkpgbGxMXx8fPDMM89o\nLR61aNEiqNVqbNq0CXV1dQgLC8OWLVvgwk2IDIsgAHl5YmA4flzcY6I7hQIYOVK8JBEdDXD7dyKi\nPlEIgr752/719ddfY8eOHfjiiy9gZmaGEydO4JFHHtFcujAxMcGGDRtw4403Sl2aXsXFxZg2bRr2\n7dsHb29vucshfcrLu1Z87GnWytu7q4/BwUHa+oiIBpnL/e6TZebh7rvvxt133615HBMTgx9++AH7\n9++HsbExbrjhBvj7+8tRGg0mSmVX42NBgf4xjo5dKz72cd0QIiLSb8Bc4PXx8cHDDz8sdxk00LW2\nAqmpYmDIytLf+GhlJV6OSEgARoxg4yMR0XU2YMLDH/32229ITEzEZ599JncpNBCo1V2Nj6mpwKVV\nRLWYmADh4eIMQ3g4Gx+JiPqR5J+w6enpKCoqgp2dHcaOHQvzP2xP/OOPP2Lz5s3IysqCnZ2d1KXR\nQCII4qWIo0fFxseGBv3jgoLEwBATI844EBFRv5MsPCiVSjz++ONITU3VHHN2dkZiYiLMzc2xYsUK\nZGVlwcvLC6tWrcI999wjVWk0kFRWdq34WFmpf4yHh3hJYuxYcTEnIiKSlGTh4Z///CdOnjyJO+64\nA9HR0SgpKcH27dvx3HPPoaamBnZ2dnj77bdx6623wsjISKqyaCBoaBBnF5KTxdss9XFwEO+SiIsT\n75pgHwMRkWwkCw8HDhzAHXfcgbfeektzLDg4GM899xwSEhKQmJjIPSaGkrY2ceGmo0fFfgY9u6rC\nwkJsfIyPB4KDAYZKIqIBQbLwUFVVhYSEBK1j8fHxAID77ruPwWEoUKvFpaGPHgVOnhTvnOjOyEhs\neIyLE1d+vLR8ORERDRyShYeOjg5YdNvCuPOxPXcqNFyCABQWipckkpPFtRn0CQwU+xhiYsQ9JoiI\naMCS9G6LsrIyrWWpGy510BcXF2sd7xQSEiJZbXSdVVd3NT7+Yd8SLe7uXSs+cplwIqJBQ9LwsH79\neqxfv17n+AsvvKD1WBAEKBQKZGdnS1UaXQ8XL4qNj0lJwLlz+sfY2XU1Pg4fzsZHIqJBSLLw8Npr\nr0n1VCSl9nax8TE5GUhP19/4aG4OREWJswwhIWx8JCIa5CQLD7NmzZLqqai/qdVATo44w5CSArS0\n6I4xMgJGjRL7GMaMEQMEEREZBK7hS70jCEBJSdfOlXV1+sf5+4szDLGxgK2ttDUSEZEkGB7o8mpq\nuhofS0v1jxk2rKvxcdgwaesjIiLJMTyQrqYm4MQJMTCcPat/jK2tOLsQHw/4+bHxkYhoCGF4IFFH\nh9jwmJQk/m9Hh+4YU9OuxsfQUMDYWPo6iYhIdgwPQ5kgALm5YmA4cUKccehOoRAbH+PigMhIcclo\nIiIa0hgehqLS0q7Gx5oa/WN8fcUZhrFjxbUZiIiILmF4GCrq6rqWiC4q0j/GxUWcYYiPF1d/JCIi\n0oPhwZA1N4sbUCUliRtSCYLuGGvrrsbHgAA2PhIR0RUxPBiajg4gM1MMDKdOiStAdmdqKi7clJAg\n9jOY8MeAiIh6j781DIEgAHl54lbXJ06Ie0x0p1AAI0eKMwxRUYClpfR1EhGRQWB4GMzKy7saH6ur\n9Y/x8elqfHRwkLY+IiIySAwPg41SCRw7JoaGggL9YxwdxcbHhATA01Pa+oiIyOAxPAwGLS1AaqoY\nGLKz9Tc+WlkBMTHiLMOIEWx8JCKifsPwMFCpVGJQOHpUDA76Gh9NTMTGx7g4IDycjY9ERCQJ/rYZ\nSAQByM8XZxiOHQMaG/WPCw4WZxiio8UZByIiIgkxPAwElZVdjY+VlfrHeHqKPQxjxwJOTtLWR0RE\n9AcMD3JpaACOHxcvS+Tn6x/j4NC14qO3t6TlERER9cQgwsPu3bvx3XffITMzE42NjfD398eCBQsw\nY8YMrXFfffUVNm/ejLKyMgQFBWHFihUYN26cdIW2tgJpaeIsQ1YWoFbrjrGw6Gp8DAoCjIykq4+I\niKgXDCI8bN26Fd7e3li1ahUcHR3x66+/Yvny5aitrcWDDz4IANi1axdefPFFPPXU/2/vzoOauvY4\ngH+FBxWQiOJWEGVREEUwIC4dFoUWBbUKdWo74lYmxQGVKopS9KmItdQFlRERrAjqaLVN7aAWHGix\nKihaROs2GiObGuWBYTO+hHDfHzyuvSYWUAgQfp8ZZsg554ZzfsPc/HLvuecsgYuLC4RCIYKDg/Hj\njz/C1ta2/TrX0NA48TE/v3Gp6P/+V7WNri7g4NCYMDg6Nq4ASQghhHRSWpE87N27F33/Ng9g4sSJ\nePbsGVJSUtjkIT4+HrNmzUJoaCgAYNy4cbhz5w6SkpKwbdu2tu0QwwAlJa8mPlZXq29nY9OYMIwd\n27jHBCGEENIFaEXy0FfNBEJ7e3tkZmYCAEpLS1FUVISoqCi2XkdHB1OmTMGhQ4fariP/+U/jFYZL\nl4CnT9W3GTSoMWEYN65xF0tCCCGki9GK5EGdwsJCWFlZAQDEYjEAwNramtPGxsYGUqkUlZWVahOQ\nFpNKge+/B+7dU1/P472a+GhhQQs4EUII6dK0MnnIy8tDVlYWvvnmGwBAVVUVAIDH43Ha9e7dm61/\np+Th9GnVxOG99xo3oJowoXFDKpr4SAghREtoXfJQVlaG8PBweHt7IyAgQDN/1MYG+OOPxgRh1KjG\nKwxOToC+vmb+PiGEEKJBWpU8SKVSCAQCmJmZcSZBNl1hqKmp4Vx9aLoi0VT/1iZMAEaObFwemlZ8\nJIQQouW0JnmQyWRYvHgxFAoF9u3bBwMDA7auaa6DWCyGubk5Wy4Wi2FiYtLsLQulUgkAkEgkzXek\nsvItek8IIYR0Lk2feU2fgX+nFclDfX09wsLCUFRUhGPHjsHU1JRTb2FhAUtLS2RkZMDd3R0A0NDQ\nwHn9T8rLywEAc+fObfvOE0IIIZ1YeXk5hg4dyinTiuRh48aNOHfuHKKioiCVSlFYWMjWjRw5Evr6\n+li6dClWrVoFc3NzODs74+TJkyguLsb27dubfX8HBwccOXIE/fv3h66ubnsOhRBCCOkUlEolysvL\n4eDgoFLXg2EYpgP61Ka8vLzw6NEjtXXZ2dkY/P99IY4fP47k5GR2eeqIiAjNLk9NCCGEaAGtSB4I\nIYQQojm0+AAhhBBCWoWSB0IIIYS0CiUPhBBCCGkVSh7ekUgkwoIFC+Dk5AQ3Nzfs2rVL7TOx2uLX\nX3/F4sWL4e7uDj6fj4CAAJw6dUql3fHjx+Hj44PRo0cjICAAeXl5HdBbzXn69Cn4fD7s7OxQV1fH\nljMMg8TERHh6esLR0RFz587FnTt3OrCnba++vh5JSUnw8fGBg4MDPDw82KXhm3SHOJw+fRr+/v7g\n8/lwd3dHREQEnr62QZ62xaG4uBj//ve/MWPGDNjb27O7GP9dS8fclc+lzcXh2bNniI2Nxccffww+\nnw9PT0+sXr1a5f8DaDyXhIaGgs/nY/z48YiOjoZMJtPUUFqMkod3UFVVhYULF6JHjx5ISEhAaGgo\nUlJSsHv37o7uWrs5ePAgjIyMEBkZiYSEBIwfPx7h4eGc3UlPnTqF9evXY+bMmUhOTsawYcMQHByM\ne2/aOEwLfPfddzBUs7poUlISEhISIBAIkJiYCENDQyxcuJBdO0QbrFmzBmlpafjiiy9w4MABhIeH\no2fPnpw22h6H7OxsrFixAnw+HwkJCVi5ciWuXr2K4OBgNDQ0sO20LQ7379/HuXPnYGVlBUtLS7Vt\nWjLmrn4ubS4Ot27dQlZWFqZPn469e/ciIiIC169fx+eff875sqFQKBAUFITHjx8jLi4OUVFRyMjI\nwLp16zQ4mhZiyFtLTExkxo4dy9TU1LBlSUlJjKOjI6dMm1RUVKiUrVixgpk8eTL72sfHh1mzZg37\nWqlUMtOnT2fCw8M10kdNy8/PZ1xdXZn9+/cztra2TG1tLcMwDPPy5UvG2dmZiY+PZ9vW1dUx48eP\nZ3bs2NFR3W1T586dY0aOHMncv3//jW26Qxy++uorxt/fn1OWlZXF2NraMiKRiGEY7YyDUqlkf1+6\ndCkTGBjIqW/pmLv6ubS5OFRVVTEKhYJTJhaLGVtbW0YoFLJl6enpzIgRI5iSkhK27PTp04ydnR3z\n8OHD9un8W6IrD+/gjz/+gJubG3r16sWWTZs2DS9fvkR+fn4H9qz9qFvK297eHs+ePQMAlJaWoqio\nCL6+vmy9jo4OpkyZgvPnz2usn5qiVCqxadMmhISEoE+fPpy6goIC1NbWcmJhaGiIyZMna00sfvrp\nJ0yYMAHDhg17Y5vuEIf6+nrOeQB4tYsv8/+n4bUxDjrN7Bbc0jF39XNpc3Hg8Xj417+4azJaWVnB\nwMCAPXcCjXEYPXo0LCws2LIPP/wQenp6ne5/hJKHdyAWi9l9M5qYmZnBwMAAYrG4g3qleYWFhbCy\nsgIAdtyvx8XGxgZSqRSVWrb3x7FjxyCXy9UuXS4Wi6Grq6tyGdPGxkZr/j9u3LgBS0tLREdHw9nZ\nGU5OTliyZAnnXm53iMMnn3yCP//8EydPnkRtbS0ePnyInTt3chKr7hCH17V0zN3xXHr37l3IZDJO\nbNTFQV9fH0OGDOl0caDk4R1UV1fD2NhYpZzH46G6uroDeqR5eXl5yMrKwqJFiwC82qn077uXAq92\nLm2q1wbPnz/Hrl27EBkZCT09PZX66upqGBoaqixp3rt3b8hkMsjlck11td2Ul5dDKBTizp07iIuL\nw5YtW3Dr1i0sWbKE/cbdHeIwadIkbNmyBevWrYOLiwumTp0KpVKJ+Ph4tk13iMPrWjrm7nYubWho\nwObNm2FpaQkvLy+2vCvFQSv2tiAdo6ysDOHh4fD29kZAQEBHd0fj4uLi4OTkBE9Pz47uSodLSEhg\nb9v0798fgYGBuHTpUrdZ/v3SpUtYv3495s+fDw8PD1RUVCA+Ph6hoaE4ePAg7YlDOLZv347CwkIc\nPnxY7ReProCSh3fA4/FQW1urUl5dXa3yzVvbSKVSCAQCmJmZYdu2bWx50xWGmpoaTgyarjg01Xd1\n9+/fh1AoxOHDh9lvBE2PU9XW1kJXVxc8Hg8vXryAUqnkfHhUVVXBwMAA+vr6HdL3tsTj8WBhYcGZ\n7+Hi4gI9PT2IRCJMnDixW8QhNjYWXl5eWLVqFVs2YsQI+Pr6Ijs7Gz4+Pt0iDq9r6Zi707n0yJEj\n+P7777Fjxw44OTlx6v4pDiNGjNBUF1uEblu8A2tra5X7UE+ePIFMJlO5b6VNZDIZFi9eDIVCgX37\n9sHAwICtaxr363ERi8UwMTFRO+GyKyouLoZCocCcOXPg6uoKV1dXREdHAwA8PDywadMmWFtbQ6lU\nori4mHOsuvuaXZWNjQ17e+J1TZPIukMcxGIx7O3tOWXW1tbo2bMnSkpK2NfaHofXtXTM3eVcmpmZ\niZiYGKxatQp+fn4q9eriIJfLUVpa2uniQMnDO/Dw8MCFCxc4meKZM2fQs2dPjBs3rgN71n7q6+sR\nFhaGoqIi7N+/H6amppx6CwsLWFpaIiMjgy1raGhARkYG3N3dNd3dduPs7Iy0tDTOj0AgAND4XHtQ\nUBCcnZ3Rq1cvTixkMhl+//13rYnFpEmTcO/ePc5E2CtXrkChUMDOzg4AukUczMzMcPv2bU7ZgwcP\n8PLlS5ibmwPoHnF4XUvH3B3OpZcvX8bKlSsRGBiIoKAgtW08PDzw119/cXaJ/u233yCXyzvd/4ju\nhg0bNnR0J7qq4cOH44cffsDly5cxYMAA5ObmYseOHViwYIHW3gdfv349zpw5g/DwcPTu3RsSiYT9\n6du3L3R1ddGnTx/s3r0bOjo6UCqV2LNnD65evYrY2FiVZKOrMjAwwODBgzk/EokE2dnZ2LhxIwYO\nHMg+mpWYmAgej4e6ujps2bIFEokEsbGxaheV6mpsbW0hFAqRk5MDU1NT3Lx5Exs3boSjoyNCQkIA\noFvEQalUIiUlBbW1tdDR0cG1a9ewYcMGGBkZ4euvv4aenp5WxkEmkyE7OxsikQgXLlxAVVUVTE1N\nIRKJYG5uzi4W1tyYu/q5tLk4lJSUYNGiRRg6dCgEAgGePn3Knjflcjl7O9fKygpnz57F2bNnMWjQ\nINy8eRObN2+Gt7c3Pv300w4eJRdtyf2ORCIRoqOjUVhYCB6Ph9mzZ2Pp0qVaO0HKy8uLkxX/XXZ2\nNgYPHgygcXnq5ORkPHnyBMOHD0dERITWT54TCoWIjIxEQUEBjIyMALxamvfo0aOQSqVwcHDA2rVr\nMXLkyA7ubdspLi5GTEwMrly5Aj09PXh7eyMyMpIzv0Xb48AwDI4ePYqjR4+itLQUxsbGcHFxQXh4\nOOeZfW2LQ1lZGby9vdXWNZ0PWjrmrnwubS4O+fn5iIyMVFvv7++Pb7/9ln0tkUgQHR2NvLw86Ovr\nw8/PDxEREZzbw50BJQ+EEEIIaRWa80AIIYSQVqHkgRBCCCGtQskDIYQQQlqFkgdCCCGEtAolD4QQ\nQghpFUoeCCGEENIqlDwQQtqUUCiEnZ0dysrKOqwP69atQ3BwcKuOiYuL63QL8RDSWdHGWISQZjUt\nNd2c7Ozsdu5J80pKSiAUCpGamtqq4+bNm4eUlBTk5ORg0qRJ7dM5QrQELRJFCGnWL7/8wnmdmpqK\nx48fq6ya99FHH+G9995DfX099PX10aNHD012EwAQExODvLw8nD59utXHLl++HBUVFUhLS2uHnhGi\nPejKAyGkWTNnzuS8zszMhFQqVSlv0lFLCsvlcqSnp2PevHlvdfzUqVMRFhaGR48esRtaEUJU0ZwH\nQkibUjfnwcvLCyEhIbh48SL8/f3h6OgIf39/3LhxAwDw888/Y8qUKRg9ejQCAwNRWlqq8r4FBQVY\ntGgRnJ2dMWbMGCxcuBA3b95UaSOVStXuo3Lo0CFMmzYNTk5OcHV1RUBAANLT0zltPvjgAwCNOxkS\nQt6MkgdCiEaIxWKsXr0a3t7eWL58OSQSCYKDg3HixAkkJiZizpw5EAgEuH79OtauXcs5Njc3F/Pn\nz4dcLseyZcsQFhYGiUSCwMBAiEQitt21a9ego6MDe3t7zvHHjx9HTEwMxowZg6ioKCxZsgR2dna4\nfv06p52xsTGGDBmCgoKC9gsEIVqAblsQQjTi4cOHOHHiBBwdHQEAAwcOxPLly7F161ZkZmaiT58+\nAID6+nrs27cPT548wfvvv4+GhgZs2LABbm5uSExMZN9v9uzZ8PX1xZ49exAXFwegMUHp27evyvbW\nOTk58PT0xObNm5vtp4WFBSchIYSooisPhBCNsLOzYxMHAHBycgLQeEujKXEAwLZpuu1x9+5dFBcX\nY9q0aaisrGR/FAoFXFxckJ+fzx4rlUrB4/FU/jaPx4NIJMKDBw+a7SePx8Pz58/fbpCEdBN05YEQ\nohFmZmac18bGxgCAQYMGqS2vqqoCABQVFQEAVq5cqfZ9dXS434HUPUAmEAiQm5sLPz8/2NjYwM3N\nDdOnT+ckM38/viOeEiGkK6HkgRCiEa9/yDdp7smMpmQgMjIStra2/9jWxMQEt27dUim3sbFBRkYG\ncnJycP78eZw5cwapqalYtmwZQkNDOW2rq6s5V0IIIaooeSCEdGoWFhYAGm8nND0N8SbW1tY4deoU\n6urqYGRkxKkzNDSEn58f/Pz8oFAosGzZMiQkJEAgEEBfX59tV1ZWhlGjRrX9QAjRIjTngRDSqY0a\nNQoWFhY4cOAAZDKZSn1lZSX7+5gxY9DQ0IDbt29z2rw+h0FPTw/Dhw9HQ0MD5HI5W15TU4OSkhLw\n+fw2HgUh2oWuPBBCOjVdXV1s2rQJX375JWbMmIFZs2ZhwIABkEgkuHjxIoYMGYKtW7cCAFxcXGBi\nYoLc3Fy4urqy7xEUFIR+/fqBz+ejX79+EIvFOHLkCDw9PdGrVy+2XW5uLoDGSZyEkDej5IEQ0ulN\nnDgRx44dw549e3Do0CG8ePECAwYMAJ/Px2effca209fXx4wZM5CRkYGwsDC2fM6cOUhPT8fBgwfx\n4sULDBo0CIGBgQgJCeH8nYyMDLi6umLw4MEaGxshXRHtbUEI0SolJSXw9fVFamoqxo4d2+LjKioq\nMHnyZOzcuZOuPBDSDJrzQAjRKkOGDEFAQACSk5NbdVxaWhrs7OwocSCkBejKAyGEEEJaha48EEII\nIaRVKHkghBBCSKtQ8kAIIYSQVqHkgRBCCCGtQskDIYQQQlqFkgdCCCGEtAolD4QQQghpFUoeCCGE\nENIq/wM1t3NUVSgK9gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(3, 1, 1)\n", + "plot(thetas, label='theta')\n", + "decorate(ylabel='Angle (rad)')\n", + "\n", + "subplot(3, 1, 2)\n", + "plot(ys, color='green', label='y')\n", + "decorate(ylabel='Length (m)')\n", + "\n", + "subplot(3, 1, 3)\n", + "plot(rs, color='red', label='r')\n", + "\n", + "decorate(xlabel='Time(s)',\n", + " ylabel='Radius (mm)')\n", + "\n", + "savefig('chap11-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use interpolation to find the time when `y` is 47 meters." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(125.33333334940457)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T = interp_inverse(ys, kind='cubic')\n", + "t_end = T(47)\n", + "t_end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At that point `r` is 55 mm, which is `Rmax`, as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(55.00000000448797)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "R = interpolate(rs, kind='cubic')\n", + "R(t_end)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total amount of rotation is 1253 rad." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(1253.3333334940455)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "THETA = interpolate(thetas, kind='cubic')\n", + "THETA(t_end)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unrolling" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For unrolling the paper, we need more units:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "kg = UNITS.kilogram\n", + "N = UNITS.newton" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And a few more parameters in the `Condition` object." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(Rmin = 0.02 * m,\n", + " Rmax = 0.055 * m,\n", + " Mcore = 15e-3 * kg,\n", + " Mroll = 215e-3 * kg,\n", + " L = 47 * m,\n", + " tension = 2e-4 * N,\n", + " duration = 180 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`make_system` computes `rho_h`, which we'll need to compute moment of inertia, and `k`, which we'll use to compute `r`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition with Rmin, Rmax, Mcore, Mroll,\n", + " L, tension, and duration\n", + " \n", + " returns: System with init, k, rho_h, Rmin, Rmax,\n", + " Mcore, Mroll, ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(theta = 0 * radian,\n", + " omega = 0 * radian/s,\n", + " y = L)\n", + " \n", + " area = pi * (Rmax**2 - Rmin**2)\n", + " rho_h = Mroll / area\n", + " k = (Rmax**2 - Rmin**2) / 2 / L / radian \n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, k=k, rho_h=rho_h,\n", + " Rmin=Rmin, Rmax=Rmax,\n", + " Mcore=Mcore, Mroll=Mroll, \n", + " ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "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", + "
value
inittheta 0 radian\n", + "omega 0.0 radi...
k2.7925531914893616e-05 meter / radian
rho_h26.07109543981524 kilogram / meter ** 2
Rmin0.02 meter
Rmax0.055 meter
Mcore0.015 kilogram
Mroll0.215 kilogram
ts[0.0 second, 1.8 second, 3.6 second, 5.4 secon...
\n", + "
" + ], + "text/plain": [ + "init theta 0 radian\n", + "omega 0.0 radi...\n", + "k 2.7925531914893616e-05 meter / radian\n", + "rho_h 26.07109543981524 kilogram / meter ** 2\n", + "Rmin 0.02 meter\n", + "Rmax 0.055 meter\n", + "Mcore 0.015 kilogram\n", + "Mroll 0.215 kilogram\n", + "ts [0.0 second, 1.8 second, 3.6 second, 5.4 secon...\n", + "dtype: object" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "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", + "
value
theta0 radian
omega0.0 radian / second
y47 meter
\n", + "
" + ], + "text/plain": [ + "theta 0 radian\n", + "omega 0.0 radian / second\n", + "y 47 meter\n", + "dtype: object" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we compute `I` as a function of `r`:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def moment_of_inertia(r, system):\n", + " \"\"\"Moment of inertia for a roll of toilet paper.\n", + " \n", + " r: current radius of roll in meters\n", + " system: System object with Mcore, rho, Rmin, Rmax\n", + " \n", + " returns: moment of inertia in kg m**2\n", + " \"\"\"\n", + " unpack(system)\n", + " Icore = Mcore * Rmin**2 \n", + " Iroll = pi * rho_h / 2 * (r**4 - Rmin**4)\n", + " return Icore + Iroll" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When `r` is `Rmin`, `I` is small." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "6e-06 kilogram meter2" + ], + "text/latex": [ + "$6e-06\\ \\mathrm{kilogram} \\cdot \\mathrm{meter}^{2}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "moment_of_inertia(system.Rmin, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As `r` increases, so does `I`." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.00037418750000000006 kilogram meter2" + ], + "text/latex": [ + "$0.00037418750000000006\\ \\mathrm{kilogram} \\cdot \\mathrm{meter}^{2}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "moment_of_inertia(system.Rmax, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the slope function." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes the derivatives of the state variables.\n", + " \n", + " state: State object with theta, omega, y\n", + " t: time\n", + " system: System object with Rmin, k, Mcore, rho_h, tension\n", + " \n", + " returns: sequence of derivatives\n", + " \"\"\"\n", + " theta, omega, y = state\n", + " unpack(system)\n", + " \n", + " r = sqrt(2*k*y + Rmin**2)\n", + " I = moment_of_inertia(r, system)\n", + " tau = r * tension\n", + " alpha = tau / I\n", + " dydt = -r * omega\n", + " \n", + " return omega, alpha, dydt " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `slope_func`" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " )" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0*s, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And look at the results." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "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", + "
thetaomegay
172.8503.3769986.83022222.852269
174.6515.7882196.96058022.346268
176.4528.4371507.09437621.835001
178.2541.3301517.23180221.318468
180.0554.4739407.37306620.796665
\n", + "
" + ], + "text/plain": [ + " theta omega y\n", + "172.8 503.376998 6.830222 22.852269\n", + "174.6 515.788219 6.960580 22.346268\n", + "176.4 528.437150 7.094376 21.835001\n", + "178.2 541.330151 7.231802 21.318468\n", + "180.0 554.473940 7.373066 20.796665" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Extrating the time series" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "thetas = system.results.theta\n", + "omegas = system.results.omega\n", + "ys = system.results.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `theta`" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nmNT/A0+AXM1TsdzFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(thetas, label='theta')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angle (rad)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `omega`" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(omegas, color='orange', label='omega')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angular velocity (rad/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `y`" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAETCAYAAADKy1riAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3Xd4FdW6x/HvpPdCSAiQIARIgIQ0\nQkIVaSJNmtgCCFJUqlhAjoAevIrCuXg40lGDFMFCUTgKQkRK6IQWeggtgUCA9J6dff/IZXQbyg4k\nmZT38zw8h1kze+Zlzja/zMyatRS9Xq9HCCGEMIKJ1gUIIYSoPCQ0hBBCGE1CQwghhNEkNIQQQhjN\nTOsCykpOTg4xMTG4urpiamqqdTlCCFEp6HQ6kpKS8PPzw8rKqtj6KhsaMTExhIeHa12GEEJUSqtW\nrSIkJKRYe5UNDVdXV6DoH+7u7q5xNUIIUTkkJiYSHh6u/gz9uyobGndvSbm7u+Ph4aFxNUIIUbnc\n77Z+lQ2N+7lw5wLLjy3nTvYdFEVBQcFEMcHUxBRTxRQzEzPMTc0xMzHDwtQCC1MLrMyssDS1xMrM\nCmtza6zNrLExt8HWwhZbc1tsLWxxsHTAzsIOE0X6Fgghqq5qFxo7Lu8gMSOxzPZva2GLo6UjjlaO\nOFo64mztjJOVEzWsa6h/bMxtyuz4QghRlqpdaITVDeNU0inSc9PLZP+ZeZlk5mVyLf3afbexNrfG\nxdoFV1tXXG1ccbN1o5ZdLdxs3XC0dERRlDKpTQghHle1Cw1fN19mdZ1Fvi4fPXoK9YXo9Xp0eh26\nQh0FhQXkF+aTr8snT5dHni6PXF0uOQU55BTkkJ2fTXZBNln5WUUBkZ9JRl4G6bnpZOZnYsxQXtn5\n2cTnxxOfFl9snaWZJe527tS2q01t+9rUsa9DXfu61LCuIWEihNBctQsNABPFBEszy1Lfb6G+kIy8\nDFJzUknNTSU1J5XknGSSs5NJzknmTvYdbmXdIl+Xf9995BbkcjnlMpdTLhu0W5lZUdehLp4OntRz\nrIenoyd17OtgZlIt/y8UQmhEfuKUIhPFBAdLBxwsHfDE857b6PV6MvIySMpKIikzSf3fG5k3uJFx\ng6z8rHt+Lqcghwt3LnDhzgW1zczEjLoOdXnC8QnqO9WngXMDatvVlisSIUSZkdAoZ4qiYG9pj72l\nPV7OXgbr7gbK9YzrXE+/zrX0a1xLv0ZCegKZeZnF9lVQWKBeley8vBMouiJp4NyAhs4N8XL2omGN\nhliZFX+rUwghHoWERgXy10DxdvFW2/V6Pam5qcSnxXM19SpXUq9wJfUKt7JuFdtHTkEOp5NOczrp\ntLpPDwcPvF28aVyjMd4u3tha2Jbbv0kIUbVIaFQCiqLgZOWEk5UTfm5+antmXiZXUq9wKeUSF1Mu\ncjH5Imm5aQaf1ev1XE29ytXUq0TGRaIoCnXt6+JT04emNZvS2KWxXIkIIYwmoVGJ2VrY0tS1KU1d\nmwJFAXEn+w5xyXFcSL5A7J1Y4tPiDXp06fV64tOKem5FxkViopjQsEZDmrk2o5lrM55wfEKeiQgh\n7ktCowpRFAUXGxdcbFxoWbclUNS990LyBc7fPs+52+e4lHKJQn2h+plCfSHnb5/n/O3z/HTmJ+ws\n7PB188XPzQ9fV1+5lSWEMCChUcVZm1vj5+an3tbKKcgh9k4sZ26d4XTS6WLvimTkZbA/fj/74/ej\nKAoNnRsS4B5AQK0AatnV0uKfIISoQCpMaNy4cYNnnnmGrKwsoqOjsbUt+g23U6dOJCQkGGxbs2ZN\noqKitCiz0rMyszIIkbTcNM7cOsPJmyc5lXTK4JmIXq8n9k4ssXdiWXtqLbXsahHkHkRQ7SC5jSVE\nNVVhQmPWrFnY2NiQlVX8PYVevXoxePBgddnc3Lw8S6vSHCwdCK0bSmjdUPV5x4mbJzhx4wQXUy4a\nPA+5kXGDzbGb2Ry7GWdrZ4LcgwipE4KXs5cEiBDVRIUIjYMHD7Jr1y5ee+01Zs2aVWy9m5sbgYGB\nGlRWvSiKgqejJ56OnvRo3IP03HRO3DzB8RvHOXnzJHm6PHXb5Oxkfr/4O79f/B0nKyda1GlByzot\nqe9UXwJEiCpM83G8dTodH330EaNHj8bZ2VnrcsRf2Fva08azDa+HvM6cbnMY3XI0bTzbFHs4npKT\nQmRcJJ/u/pT3f3+f9afXP3DARiFE6dixYwdNmjTh6tWrBu1Xr16lSZMmbNu2rdSPqfmVxpo1a8jL\nyyM8PJyNGzfec5sff/yRFStWYGlpSdu2bZk8eTJ169Yt50qrN3NT86IH4u4B6Ap1nLt9jsPXD3Pk\n+hEy8jLU7W5n3VZvYXk4eBDmEUZY3TAcrRw1rF6Iqqldu3a4ubmxYcMGxo0bp7avX78eFxcXnnrq\nqVI/pqahkZyczNy5c5k9e/Z9n1N06tSJwMBA3N3duXDhAvPmzVMDxt7evpwrFgCmJqbq+yEvN3+Z\ns7fOcvDaQY5cP2IwdlZ8Wjzxp+JZd3odzVyb0dqjNYHugZibyjMpUXFtvbCVjec2kluQW+7HtjSz\npLd3b7o27GrU9qampvTr14/169czduxYFEVBr9ezYcMGnn32WczMSv9HvKah8fnnnxMQEECHDh3u\nu83UqVPVv4eEhBAUFETfvn1Zu3YtQ4cOLYcqxYOYKCYGAXLy5kkOJBzg2I1j6mi+er2ekzdPcvLm\nSWzMbQitG0rbem3xdPCU5x+iwtkat1WTwICiUa63xm01OjQAnnvuORYvXsz+/ftp1aoV+/btIyEh\ngf79+5dJjZqFxvnz51m3bh0rV64kLa2om2d2djYAGRkZmJqaYmVVfHgLb29vGjRowKlTp8q1XvFw\nZiZm6i2snIIcoq9Hs/fqXs7dPqduk5WfxR+X/uCPS3/g6ehJ+3rtCa0birW5tYaVC/Gnrl5dNb3S\n6OplfGAAeHp6Ehoayrp162jVqhXr1q3D39+fxo0bl0mNmoXG5cuXyc/P54UXXii27sknn+S5557j\n448/vudnFUWR31ArOCszK9p4tqGNZxtuZ91mX/w+9lzdYzDI4tXUq3x74lt+PPUjLeu2pMMTHXjC\n6QkNqxYCujbsWqLf9CuCgQMHMm3aNN5++222bt3K5MmTy+xYmoVGcHAwy5cvN2jbtWsXS5cuZcmS\nJXh63ns+inPnzhEXF8fzzz9fHmWKUuBi40JP7570aNyDc7fPEXU1iujr0ertqzxdHlFXooi6EsUT\nTk/Q4YkOhNYNlWcfQhjp6aefZsaMGUycOJHCwkJ69uxZZsfSLDRq1KhBWFiYQdvdN79DQkKwtbXl\njz/+4Oeff+app57Czc2NuLg4Fi5cSO3atcvsfp0oO4qi4FPTB5+aPrzo9yL74/ez68ouEtL+fOP/\ncspllqcsZ+3ptbT1bEuH+h2oaVNTw6qFqPgsLS3p3bs3q1atolevXjg4OJTZsTTvcvsg7u7u3L59\nm08++YT09HScnJxo3749EydOxM7OTuvyxGOwMbehY4OOPFX/KS6mXGTHpR0cunaIgsICoGjY998u\n/MbWuK0E1Aqgs1dnGtdoLLclhbiPLl26sGrVKgYMGFCmx1H0fx0nogqJj4+nc+fOREZG4uHhoXU5\nwgiZeZlEXY1ix6Ud95xgysPBgy5eXWhZt6XMjS7E38yaNYvNmzezbds2TEwe/b3th/3slP/yRIVh\na2HL0w2fpotXF2JuxrD94nZOJf3ZSy4+LZ5lR5ex/sx6OtbvyJNPPClDt4tqLy4ujgsXLrB69WrG\njh37WIFhDAkNUeGYKCb41/LHv5Y/19Ov8/vF39kXv08d+yo1J5UNZzbwa+yvtKvXji5eXahhXUPj\nqoXQxgcffMCxY8fo1KmTwcCuZUVCQ1Rote1rE+4fTt8mfdl5eSfbL20nNScVKHoRKjIuku0XtxNa\nN5RnGj1DbfvaGlcsRPlasWJFuR5PQkNUCrYWtnRv3J2uDbty6Nohfrvwm9rrqlBfyL74feyL30eA\newA9GvegvlN9bQsWooqS0BCVipmJGa08WhFWN4yTSSfZErvF4I3zY4nHOJZ4jKauTenZuCeNXcrm\nrVghqisJDVEpKYqizkAYlxzH5tjNHEs8pq4/nXSa00mnaezSmN7evfF28ZbuukKUAgkNUel5OXsx\nuuVorqVfY3PsZg4kHFBnHDx/+zxz9s6R8BCilGg+CZMQpaWOfR1eDXqVGR1n0LZeW0yUP7/ed8Nj\nzt45nL99XsMqhajcJDREleNm68aQgCH8T6f/of0T7Q3C49ztc/xrz7+Yu28ul1IuaVekEJWU3J4S\nVZaLjQuD/AfRvVF3fo39lagrURTqCwE4lXSKU0mnCKodRB+fPtJVVwgjSWiIKu9ueDzT6Bk2ndvE\nvvh96jOPI9ePcDTxKK08WvGsz7PykqAQDyG3p0S1UdOmJkMDh/LPp/5JSJ0QtV2v17P36l6m/T6N\nH0/9SGZepoZVClGxSWiIaqeWXS1GthjJ+0++j5+bn9peUFjA1gtbef/399kSu0Wd70MI8ScJDVFt\n1XOsx7iwcbzd5m0aODdQ27Pzs1l3eh3Tt09nf/x+quhA0EI8EgkNUe15u3gzue1kXg95nVp2tdT2\nO9l3+PrI18zcPZPYO7EaVihExSEPwoWg6A3zoNpB+NfyZ9eVXWw6t4n03HSgaDbB2VGzCa4dzIBm\nA2QmQVGtSWgI8RemJqY8Vf8pWnm0YnPsZrZe2KrOJhh9PZrjN47TtWFXujfqjqWZpcbVClH+5PaU\nEPdgZWZF3yZ9mdFxBi3rtlTbCwoL+PX8r0zbPs2g664Q1YWEhhAP4GLjwojgEUxuN9lguPXUnFQi\njkQwe89srqZe1a5AIcqZhIYQRvBy9uK9du8xLGgYDpYOavuFOxf4eNfHrDq+St7vENWCPNMQwkiK\notDKoxWB7oH8cv4XtsVtQ1eoQ6/Xs/PyTg5fP8yApgNo49lGRtIVVZZcaQhRQlZmVvRv2p8POnyA\nr5uv2p6Zl8nyY8uZFTWL+LR4DSsUouxIaAjxiGrZ1WJc6DhGtxyNi42L2h6XHMfHOz/mh5M/kFOQ\no2GFQpQ+uT0lxGNQFIUA9wCaujbl1/O/suXCFnSFOgr1hWyL28aha4d4qflLBLoHal2qEKVCrjSE\nKAUWphb0adKH6R2m41PTR21PyUlh4cGFLDi4gOTsZA0rFKJ0SGgIUYrc7dyZ2Goirwa9ir2lvdp+\nLPEYH/zxAdsvblfn9BCiMpLQEKKUKYpCmEcY/3zqn7Sr105tzy3IZU3MGmZHzeZ6+nUNKxTi0VWY\n0Lhx4wZBQUH4+PiQmflnf3e9Xs+iRYvo0KED/v7+hIeHc/r0aQ0rFcI4tha2DA4YzDtt3sHdzl1t\nj0uO46OdH7Hp3CZ1iBIhKosKExqzZs3CxsamWPuSJUtYsGABI0eOZNGiRdjY2DB06FCSkpI0qFKI\nkmvs0phpHabRy7sXpiamAOgKdWw8u5FPdn3C5ZTLGlcohPEqRGgcPHiQXbt28eqrrxq05+bmsmTJ\nEkaNGsWgQYNo06YNc+fORVEUVq5cqVG1QpScmYkZvX16M/XJqQZzdySkJfDp7k9Zf3q9TPokKgXN\nQ0On0/HRRx8xevRonJ2dDdZFR0eTkZFB9+7d1TYbGxs6duzIrl27yrtUIR5bHfs6TGo7ied9n8fc\n1ByAQn0hm2M38/Guj7mUcknbAoV4CM1DY82aNeTl5REeHl5sXVxcHKamptSvX9+gvWHDhsTFxZVT\nhUKULhPFhM5enZneYTreLt5q+/X06+pVhzzrEBWVpqGRnJzM3LlzmTJlCubm5sXWp6WlYWNjg6mp\nqUG7o6Mj2dnZ5OXllVepQpQ6N1s33mr9Fi81f0mdm0Ov1xdddez8WEbPFRWSpqHx+eefExAQQIcO\nHbQsQwjNKIrCU/WfKnbVcS39Gp/s+oT/nvuvvNchKhTNQuP8+fOsW7eOMWPGkJaWRlpaGtnZ2QBk\nZGSQk5ODg4MDWVlZ6HQ6g8+mpqZibW2NhYWFFqULUepq2tTkrdZv8aLfiwbPOn4++zOf7f6MGxk3\nNK5QiCKajT11+fJl8vPzeeGFF4qte/LJJ3nuuefo1asXOp2Oy5cv4+Xlpa6Pi4szWBaiKlAUhY4N\nOtLMtRnLji4jLrnoud2llEt8tPMjBjYbyJNPPCnDrgtNaRYawcHBLF++3KBt165dLF26lCVLluDp\n6UndunWxs7Nj8+bNjB49GoDs7Gy2b9/O888/r0XZQpS5Wna1eLftu/x24Td+PvszukId+bp8vj3x\nLcdvHOeVwFcMJoISojxpFho1atQgLCzMoC0hIQGAkJAQbG1tARg1ahQLFizA0dERLy8vIiIiKCws\nZPDgweVesxDlxUQx4ZlGz+Dr6svXR77mWvo1AGJuxjBjxwyGBAzBv5a/xlWK6uiRQqOgoABFUYr1\naioLo0aNorCwkMWLF5OSkoKfnx8RERHUrFmzzI8thNY8HT35R/t/sOHMBrbFbQMgPTed+Qfm8+QT\nTzLQdyAWpvJsT5QfRa/X6x+20aFDh4iMjOTIkSPExsaqY0PZ2dnRsGFDgoKC6Ny5MyEhIWVesLHi\n4+Pp3LkzkZGReHh4aF2OEI/tzK0zRByJICUnRW2rbV+bEcEj8HCQ77goHQ/72Xnf0CgoKOD7779n\n2bJlXLlyBUdHR3x9ffHw8MDR0RG9Xk9aWhrx8fGcPHmS1NRUPDw8GDZsGM8///w937soTxIaoirK\nzMtk5fGVRF+PVtvMTMwY0GwAHet3lIfk4rE97GfnfW9Pde3alfz8fPr168czzzyDr6/v/TYFICYm\nhs2bN7Nw4UK++uorfv/998evXghhwNbCllEtRrHn6h7WxKwhT5dHQWEB38V8x+mk07wS+Ap2FnZa\nlymqsPuGxujRo+nTp4/R70L4+fnh5+fH+PHj+emnn0qtQCGEIUVRaFuvLY1qNGJp9FL1zfHjN47z\n0Y6PGB483OBFQSFK031f7hs4cOAjvTxnYWHBwIEDH6soIcTD1bKrxXvt3qOLVxe1LSUnhTl757Dx\n7EZ5k1yUCc0HLBRCPDozEzMG+g5kbOhYbC2Kuqnr9Xo2ndvEv/f9m9ScVI0rFFVNibrcZmdns3Xr\nVuLj40lLS+Pvz9AVReG9994r1QKFEA/XvFZzpneYzlfRX3Hu9jkAzt46y0c7P2J40HCaujbVuEJR\nVRgdGnv27OHNN98kLS3tvttIaAihHScrJya2nsh/z/2X/57/L3q9nvTcdObun0sv7170aNwDE0Vu\nLojHY3Ro/POf/8TW1lYdmdbOTnpoCFHRmCgm9PbpTWOXxnwV/RVpuUV3BDae3UjsnViGBw3H3tJe\n6zJFJWb0rx2JiYm8+uqrtG3bVgJDiAquSc0mTOswDZ+aPmrb6aTT/M/O/+HCnQsaViYqO6NDo2nT\npqSmykM1ISoLB0sH3mz1Jj0a91DbUnJS+NeefxEZF1nsmaQQxjA6NKZMmcJ3333H/v37y7IeIUQp\nMlFM6NOkD+PDxqu9qwr1hXx/8nu+jP6SnIIcjSsUlY3RzzQCAgKYPHkyw4YNo3bt2tSuXRsTE8PM\nURSFb775ptSLFEI8Hl83X95v/z5LDi/hUsolAA5dO0RCegJvhLxBLbta2hYoKg2jrzTWr1/PpEmT\n1LFtMjIy1Bn37v6R21dCVFwuNi682/ZdOtT/c3rl6+nX+WTXJxxNPKphZaIyMfpK44svvqBZs2Ys\nWLAANze3sqxJCFFGzEzMeLn5y3g5e7Hy+ErydfnkFOSw8OBCejTuQW+f3tItVzyQ0d+O5ORkBgwY\nIIEhRBXQyqMVk9tOxsXGRW375fwvzD8wn6z8LA0rExWd0aHRokULYmNjy7IWIUQ58nT05P327+Pr\n9ucI1jE3Y5i5a6Y6U6AQf2d0aHz44Yfs3buXiIgI0tPTy7ImIUQ5sbWwZWzoWLo37q623cy8yae7\nP5XnHOKejJq5D6Bly5YUFBSQk1PURc/GxqbYdK+KolSYLrkyCZMQJRN9PZplR5eRW5CrtvX26U3P\nxj1lcqdq5JEnYfq7zp07yxdHiCosuHYwtWxrseDgAm5l3QJg49mNxKfFMyxwGJZmlhpXKCoCo0Pj\n008/Lcs6hBAVQF2Huvyj/T9YcngJZ26dAeDI9SMkZSYxuuVogwfnonqSvnVCCAO2FrZMaDWBzl6d\n1bb4tHhm7p5J7B3pDFPd3Tc0fvvtt0fe6eN8VgihPRPFhOd9n2dIwBBMTYqeXabnpjNn7xz2XN2j\ncXVCS/cNjenTp9O9e3ciIiK4fv36Q3cUHx/Pl19+Sbdu3fjggw9KtUghhDba1mvLW63fUodT1xXq\n+OboN6w9tVamk62m7vtMIzIykoiICBYvXsysWbOoV68evr6+eHh44ODggF6vJy0tjfj4eGJiYoiP\nj8fR0ZFBgwYxdOjQcvwnCCHKUqMajZjSbgrzD84nIS0BgN8u/MaNzBsMDxouD8irmYd2uc3Pz+f3\n339n+/btHDlyhCtXrqhDKiuKQr169QgMDKRz58507NgRc3Pzcin8YaTLrRClK6cgh6+iv+L4jeNq\nm6ejJ2NajsHZ2lnDykRpeuwut+bm5nTr1o1u3boBoNPp1IEJHR0di72rIYSomqzMrHij5RtsOLOB\nLbFbALiaepVPd3/KmNAx1HOsp3GFojyUuPeUqakpNWrUoEaNGhIYQlQzJooJ/Zv2Z0jAEHVgw5Sc\nFGZHzeZY4jGNqxPlwej3NErb5s2bWbZsGRcvXiQrK4s6derQp08fRowYgYWFBQCdOnUiISHB4HM1\na9YkKipKi5KFEP+vbb22uNi4sPjQYrLys8jT5bHw0EIGNhto0FVXVD2ahUZKSgphYWEMHz4ce3t7\njh8/zrx587h16xbTp09Xt+vVqxeDBw9WlyvKMxMhqrsmNZswud1kvtj/BbeybqHX6/n+5PckZSXx\nvO/zMsR6FaVZaLz44osGy61atSIzM5NVq1Yxbdo0dcgSNzc3AgMDtShRCPEQ7nbuvNfuPRYcXEBc\nchwA2y9u53bWbUYEj5CeVVVQhfpVwMnJifz8fK3LEEKUgL2lPW+1fosWdVqobcdvHGfO3jmk5aZp\nWJkoC5qHhk6nIzs7m0OHDrFixQpeeuklg4ERf/zxR/z8/GjRogXjx48v9oxDCKE9c1NzRgaPpFuj\nbmrbpZRLfLb7M25k3NCwMlHaNLs9dVdgYCB5eXkA9O3bl0mTJqnrOnXqRGBgIO7u7ly4cIF58+YR\nHh7Oxo0bsbe316pkIcQ9KIpC/6b9cbF2YXXMavR6PbeybvFZ1GeMaTmGhjUaal2iKAUlCo1du3bx\n448/cvXqVdLS0vj7e4GKorBt27YSFbBmzRqys7M5ceIE8+fPZ8aMGXz44YcATJ06Vd0uJCSEoKAg\n+vbty9q1a+WtcyEqqA71O+Bs7czSw0vJ0+WRmZfJ5/s+Z0TwCALd5flkZWd0aHz55Zf87//+Ly4u\nLvj7++Pj41MqBfj6Fk01GRISgrOzM5MnT+bVV1+lXr3iLwp5e3vToEEDTp06VSrHFkKUDf9a/rzd\n5m3mHZhHem46+bp8Fh1axEt+L9GhfgetyxOPwejQWL58OWFhYSxdurTMur02a9YMKHqN/V6hAUVX\nMzIZlBAVX32n+kxuO5m5++eSlJmEXq/n2xPfkpKTwrM+z8p/x5WU0Q/C09LSeOaZZ8r0PYno6GiA\n+44Vde7cOeLi4tSrEyFExeZq68rktpOp71Rfbfvl/C+sPL5SRsmtpIy+0mjevDmXLl0qtQMPHz6c\nNm3a0KhRI0xNTYmOjiYiIoIePXpQr149/vjjD37++Weeeuop3NzciIuLY+HChdSuXZv+/fuXWh1C\niLJ1t0vuksNLiLkZA8DuK7tJy01jZIuRWJhaaFyhKAmjQ2P69OmMHDkSf39/evTo8dgHbt68OevX\nrychIQFTU1M8PT1566231Jf+3N3duX37Np988gnp6ek4OTnRvn17Jk6ciJ2d3WMfXwhRfizNLBnd\ncjQrjq9g79W9QNG7HHP3zWVM6BhszG00rlAY675Do/fr169YW3JyMjdu3MDe3h53d/diAxYqisK6\ndevKptISkqHRhah49Ho968+sV0fJhaJ5yceHjcfJyknDysRdjzw0+r1+m7ezs8PT07N0KxRCVBt3\n3+VwsHTgh5M/AJCQlsCsqFm82epN3GzdNK5QPMx9Q2PFihXlWYcQohrp4tUFOws7vjn6DYX6Qm5n\n3WZW1CwmhE3A01F+Ma3IjO49tWHDBuLj4++7PiEhgQ0bNpRKUUKIqq+VRytGtxyNuWlRj8z03HT+\nd+//EnsnVuPKxIMYHRpTpkzhyJEj911/7NgxpkyZUipFCSGqh+a1mjOx1USsza0ByM7P5t/7/q32\nshIVj9Gh8ZCpxMnKypKZ/IQQJdawRkPeafMODpYOAOTr8pl/YD6Hrh3SuDJxLw/scnvmzBnOnDmj\nLh86dAidTldsu7S0NNasWUODBg1Kv0IhRJXn4eDBu23f5d/7/s3trNsU6gv5MvpLcgtyaVuvrdbl\nib94YGhs27aNefPmAUW9Hr777ju+++67e27r6OjIrFmzSr9CIUS14GbrxqS2k/h87+ckZiSi1+tZ\nfmw52QXZdPHqonV54v89MDRefPFFunTpgl6vp1+/fkycOJEOHYoPNmZjY0PdunXl9pQQ4rE4WTnx\nTpt3mLt/LldTrwLww8kfyC3IpUfjHjJeVQXwwNCoWbMmNWvWBIoGLGzYsCEuLi7lUpgQonqyt7Tn\n7dZFI+Te7Un189mfydXl0q9JPwkOjRn9IDw0NFQCQwhRLqzNrRkfNp6mrk3Vti2xW1gTs+ahnXJE\n2TJ67KkhQ4Y8cL2iKFhaWuLu7k5YWBjdunXDzEzziQGFEJWUpZklY1qOYWn0Uo4lHgPgj0t/kF+Y\nzyD/QZgoms9WXS2VqMttYmIiBw4c4OzZs2RkZJCRkcHZs2c5cOAAiYmJ3L59my1btvD2228zYMAA\n7ty5U5a1CyGqOHNTc15r8RohdULUtqgrUUQciZCh1TVidGhMmDCB1NRUPv30U/bs2cO6detYt24d\ne/bsYebMmaSmpjJt2jT27dsPqivEAAAbs0lEQVTHJ598QmxsLJ9//nlZ1i6EqAZMTUwZHjycNp5t\n1LYDCQdYengpBYUFGlZWPRkdGrNmzaJ///707dvXoJeUqakp/fr1o1+/fsycObNoQLL+/RkwYADb\nt28vk6KFENWLiWLCkIAhPPnEk2pb9PVolhxeIsFRzowOjbNnzz5wiHEPDw+DFwF9fX1JTU19vOqE\nEOL/KYrCy81fprNXZ7XtWOIxFh5cSL4uX8PKqhejQ8PV1ZXffvuNwsLi9xELCwvZvHmz2j0XICUl\nBUdHx9KpUgghKAqOgc0G0q1RN7Ut5mYMCw4ukOAoJ0aHxrBhw9i/fz/h4eFs2LCBw4cPc/jwYdav\nX8/LL7/MoUOHePXVV9Xtt2zZQvPmzcukaCFE9aUoCv2a9KOnd0+17VTSKeYdmEeeLk/DyqoHo/vE\nhoeHoygK//nPf3jvvffUF2z0ej1OTk5MnTqV8PBwAPLy8nj33XdlxjwhRJlQFIVnfZ7FRDFh49mN\nAJy5dYb5B+YzJnSMzDtehkr0IsXLL7/MwIEDiYmJ4dq1awDUqVMHPz8/zM3N1e0sLCxo3bp16VYq\nhBB/08u7F6aKKRvOFM3lc+bWGeYdmMeYlmOwNLPUuLqqqcRv35mbmxMUFERQUFBZ1COEECXSvXF3\nFEVh/en1AJy9dZZ5B+YxNnSsBEcZKHFoxMbGcvXq1fv2jOrbt+9jFyWEECXxTKNnUFBYd3odAOdu\nn2P+wfmMDR0rt6pKmdGhceXKFd59912OHz9+37FfFEWR0BBCaKJbo24oisLaU2uBoisOecZR+owO\njenTp3Pu3Dn+8Y9/EBISgoODQ1nWJYQQJfZ0w6fR6/XqFcfdh+NjQ8eqc5GLx2N0aERHRzNq1CgG\nDx5clvUIIcRj6daoG3r06jOOM7fOsODgAka3HC3BUQqMfk/DyclJXtYTQlQKzzR6hr5N/rxVfirp\nFIsOLZIhR0qB0aHxwgsv8PPPP99zjnAhhKhoujfuTm+f3upyzM0YGauqFBh9e8rb25vIyEj69evH\nc889R+3atTExKZ45nTt3vsenhRCi/PXy7oWuUMcv538Bisaq+ir6K0a2GCnzcTwio0Nj3Lhx6t8/\n+eSTe26jKAqnT582an+bN29m2bJlXLx4kaysLOrUqUOfPn0YMWIEFhZFPR30ej2LFy9m9erVJCcn\n07x5c6ZOnUrTpk0fsnchhCjyrM+z6PQ6tsRuAYpGx404EsGwoGESHI/A6NBYvnx5qR44JSWFsLAw\nhg8fjr29PcePH2fevHncunWL6dOnA7BkyRIWLFjApEmT8PLyIiIigqFDh7Jp0yZcXV1LtR4hRNV0\nd6wqXaGObXHbgKL5OMxMzBgSMETmHC8ho0MjNDS0VA/84osvGiy3atWKzMxMVq1axbRp08jLy2PJ\nkiWMGjWKQYMGARAYGEinTp1YuXIlEydOLNV6hBBVl6IoPNfsOfIL89lxaQcAe67uwdzUnJf8XpLg\nKIESX5ulp6eze/dufv75Z27duqW232vI9JJycnIiP79oeOPo6GgyMjLo3r27ut7GxoaOHTuya9eu\nxz6WEKJ6URSFl/xeom29tmrbjks7WHt67X1fWBbFlSg05s+fT/v27RkxYgSTJ0/m/PnzACQnJxMc\nHMyqVatKXIBOpyM7O5tDhw6xYsUKXnqpKPXj4uIwNTWlfv36Bts3bNiQuLi4Eh9HCCEURWGQ/yDC\nPMLUtq0XtrLp3CYNq6pcjA6NFStW8MUXX9C3b1+++OILg2R2dnamS5cubN68ucQFBAYGEhgYSHh4\nOC1btmTSpEkApKWlYWNjYzC1LICjoyPZ2dnk5cm4+UKIkjNRTBgaOJSg2n8Ourrp3Cb1Qbl4MKND\nY9WqVfTs2ZMPP/yQkJCQYuubNm3KxYsXS1zAmjVrWLVqFe+99x6RkZHMmDGjxPsQQoiSMFFMGBE8\nAl83X7Vt3el1/HHpD+2KqiSMDo2EhATCwsLuu97Ozu6R5gT39fUlJCSEYcOGMXXqVFavXs2VK1dw\ncHAgKyur2MuEqampWFtbq91yhRDiUZiZmPFGyBt4u3irbatPrGZf/D4Nq6r4jA6NGjVqcPPmzfuu\nP336NLVr136sYpo1awZAfHw8Xl5e6HQ6Ll++bLBNXFwcXl5ej3UcIYQAMDc1Z0zoGOo71Vfbvjn6\nDUeuH9GuqArO6NDo0qULq1evVmfs+6sDBw6wdu1aunXrdo9PGi86OhoADw8PgoODsbOzM3hOkp2d\nzfbt22nfvv1jHUcIIe6yMrNifNh46tjXAaBQX8iX0V9yOsm4F5WrG6Pf0xg/fjwHDhzg2WefpWXL\nliiKQkREBAsXLuTQoUN4e3vz+uuvG33g4cOH06ZNGxo1aoSpqSnR0dFERETQo0cP6tWrB8CoUaNY\nsGABjo6O6st9hYWFMtKuEKJU2VrYMrH1RGZHzeZm5k0KCgtYeGghb7Z6Ey9nubPxV0aHhqOjI99/\n/z1ff/01v/32G5aWluzbt4969erxxhtvMGLECKytrY0+cPPmzVm/fj0JCQmYmpri6enJW2+9ZfDS\n36hRoygsLGTx4sWkpKTg5+dHREQENWvWLNm/UgghHsLB0oE3W73J7D2zSc5OJrcgly/2f8E7bd6h\nrkNdrcurMBR9Kb3VotPpyMvLK1FwlKX4+Hg6d+5MZGQkHh4eWpcjhKgkEjMSmR01m4y8DKAoTCa3\nm0xNm+rxy+rDfnaW2mhdS5YsITg4uLR2J4QQmnC3c2d82HiszKwASMtN4/O9n5OWm6ZxZRWDDPEo\nhBB/84TTE4wJHaPO9Hcr6xZz980lKz9L48q0J6EhhBD34O3izcjgP+fdiE+LZ/6B+eTpqvdoFBIa\nQghxHwHuAbwS+Iq6HHsnliWHl6ArrL4zmEpoCCHEA7TyaMVA34Hq8okbJ1h5fGW1HRn3gV1uz5w5\nY/SO/jpMuhBCVCVdvLqQkZfBr+d/BYrm4rC3tKd/0/4aV1b+Hhgaffv2NXpyEr1eLxOZCCGqrD4+\nfUjLTSPqShQAW2K3YG9hT9eGXTWurHw9MDRmzpxZXnUIIUSFdncujoy8DI4lHgPgx1M/4mDpYDA/\nR1X3wNDo169fedUhhBAVnoliwsjgkfx737+JvRMLwLKjy7C3tKeZazONqysf8iBcCCFK4O7IuH8d\n4HDRoUVcTrn8kE9WDRIaQghRQjbmNowPG4+ztTNA0ThVB74gKTNJ48rKnoSGEEI8AmdrZyaETcDG\n3AaA9Nx0/rP/P6TnpmtcWdmS0BBCiEdU2742Y0PHqsON3My8ybwD88gtyNW4srIjoSGEEI+hYY2G\njAgeob5ycCnlEkujl1KoL9S4srIhoSGEEI8p0D2Ql/xeUpdP3DjBtye+rZJvjUtoCCFEKehQvwPd\nG3dXl3dd3sXm2M0P+ETlJKEhhBClpI9PH4MX/Tac2cD++P0aVlT6JDSEEKKUKIrCkIAhNKnZRG37\n5tg3nLll/Dh+FZ2EhhBClCIzEzNeD3ldfflPV6hj0aFFXEu/pnFlpUNCQwghSpm1uTXjw8bjZOUE\nQHZ+Nl/s/4LUnFSNK3t8EhpCCFEGnK2dGRs6FkszSwDuZN+pEu9wSGgIIUQZ8XT05LUWr6lTxl5J\nvVLp3+GQ0BBCiDLk6+bLy81fVpdP3DjB9ye/17CixyOhIYQQZaz9E+3p1qiburz94nZ+v/i7hhU9\nOgkNIYQoB/2a9KNFnRbq8vcnv1cnc6pMJDSEEKIcKIrCsMBheDl7AUVTZH8Z/SVXU69qXFnJSGgI\nIUQ5MTc1Z3TL0dS0qQlAni6PeQfmkZKTonFlxtMsNH799Vdef/112rdvT1BQEP3792fTpk0G2wwe\nPBgfH59if3JzK3eXNSFE9WVvac+4sHFYm1sDkJKTUqm64j5wjvCytGzZMjw8PJgyZQrOzs7s3LmT\nt99+m+TkZAYPHqxuFxYWxltvvWXwWQsLi/IuVwghSo27nTuvtXiN/+z/D4X6Qq6mXuWrI1/xesjr\navfcikqz0Fi4cCE1atRQl1u3bs3NmzeJiIgwCA0nJycCAwO1KFEIIcpMU9emvNz8ZVYeXwnAscRj\nrD+9ngHNBmhc2YNpFml/DYy7mjZtys2bNzWoRgghyl/7J9rTtWFXdfm3C78RdSVKw4oerkJdBx09\nepQGDRoYtO3evZuAgAACAgIYPnw4Z85UndEihRCif9P++NfyV5dXHl/JudvnNKzowSpMaOzdu5dt\n27YxbNgwta1ly5a8//77fPXVV8yYMYNr164RHh5OfHy8hpUKIUTpMVFMGBE8Ag8HDwAK9YUsOrSI\nm5kV865LhQiN+Ph43n77bTp37kz//v3V9vHjxzNgwABCQkLo06cPy5cvR1EUvvnmGw2rFUKI0mVp\nZsmY0DE4WDoAkJmXyYKDC8jOz9a4suI0D42UlBRGjhxJnTp1+Ne//vXAbV1dXQkODubUqVPlVJ0Q\nQpSPGtY1GN1yNGYmRf2Trqdfr5CDG2oaGtnZ2bz++uvk5+ezePFirK2tH/oZRVFQFKUcqhNCiPLV\nwLkBrwS+oi6fvHmSH0/9qGFFxWkWGgUFBUyYMIFLly7x5Zdf4uLi8tDPJCUlcfjwYXx9fcuhQiGE\nKH+hdUPp0biHuhwZF8muy7s0rMiQZu9p/POf/2THjh28//77pKSkcPToUXVds2bNiIuLY86cOTzz\nzDPUqVOH69evs3jxYkxMTHjllVcesGchhKjcnvV5lusZ1zly/QgAq2NW427nTmOXxhpXpmFoREUV\n9UX++OOPi62LjIzE2dkZvV7PnDlzSElJwdbWltDQUN58803q1KlT3uUKIUS5uTu4YVJmEvFp8eo8\n4/9o/w9cbB5+V6YsaRYav//+8LHkly5dWg6VCCFExWNpZsnolqOZuXsm6bnpZORlsODgAia1naRO\nIasFzXtPCSGEuDcXGxfeCHkDUxNTAOLT4ok4GoFer9esJgkNIYSowBrWaEh483B1+cj1I/z3/H81\nq0dCQwghKri29drS2auzurzx7Eb1IXl5k9AQQohK4Llmz9GkZhN1OeJoBAlpCeVeh4SGEEJUAiaK\nCaNajFJn/cstyGXBwQVk5mWWbx3lejQhhBCPzNbCljGhY9TeU7eybpX7UCMSGkIIUYnUsa/Dq0Gv\nqsunk06z7vS6cju+hIYQQlQyge6B9PLupS5vvbCV/fH7y+XYEhpCCFEJ9fLuRYB7gLq84vgKrqRe\nKfPjSmgIIUQlpCgKrwa9irudOwD5unwWHlxIRl5GmR5XQkMIISopKzMrRrccjZWZFQB3su+w9HDZ\nPhiX0BBCiEqsll0thgcPV5fP3DpTpg/GJTSEEKKS86/lT2+f3ury1gtbOZhwsEyOJaEhhBBVQM/G\nPQ0ejH9z7Bvi0+JL/TgSGkIIUQXcfTBey64WUPRgfNGhRWTlZ5XqcSQ0hBCiirAys+KNkDfUN8aT\nMpP4KvqrUh1KXUJDCCGqkNr2tRkaOFRdjrkZw6Zzm0pt/xIaQghRxQTXDqZbo27q8qZzmzhx40Sp\n7FtCQwghqqC+TfoaDKX+9ZGvuZV167H3K6EhhBBVkIliwojgEThbOwOQlZ/FwoMLydPlPd5+S6M4\nIYQQFY+9pT2vtXjNYI7xb098+1gPxiU0hBCiCmvg3IAX/V5Ul/de3cvuK7sfeX8SGkIIUcW1r9ee\n1p6t1eU1MWu4nHL5kfYloSGEEFWcoii83PxlPBw8ACgoLGDx4cWPNFWshIYQQlQDFqYWvBbymjoi\n7u2s2yw7uqzE+5HQEEKIasLN1s1gqtjjN46Tnpteon1IaAghRDUS4B7AgGYDMDMxw9fNFzsLuxJ9\n3qyM6hJCCFFBPd3waTrW74i5qXmJPytXGkIIUQ09SmBAFb7S0Ol0ACQmJmpciRBCVB53f2be/Rn6\nd1U2NJKSkgAIDw/XuBIhhKh8kpKSeOKJJ4q1K/rSHGi9AsnJySEmJgZXV1dMTU21LkcIISoFnU5H\nUlISfn5+WFlZFVtfZUNDCCFE6ZMH4UIIIYwmoSGEEMJoEhpCCCGMJqEhhBDCaBIaQgghjFatQiM2\nNpZXXnmFgIAA2rVrx9y5c+/7Aot4uHXr1uHj41Psz+rVq9Vt9Ho9ixYtokOHDvj7+xMeHs7p06c1\nrLpiu3z5MtOnT6d37940bdqUwYMHF9vG2HMq3/d7M+Ycd+rUqdj3um3btsW2q47nuMq+3Pd3qamp\nDB06lEaNGrFgwQKuXLnCZ599RmFhIRMnTtS6vErtm2++MejP7enpqf59yZIlLFiwgEmTJuHl5UVE\nRARDhw5l06ZNuLq6alFuhXb+/Hl27NhBQEAABQUF99zGmHMq3/f7M+YcA/Tq1csgUMzNDYfdqLbn\nWF9NLFq0SB8SEqJPT09X25YsWaL39/c3aBPGW7t2rd7b21ufkZFxz/U5OTn64OBg/RdffKG2ZWZm\n6sPCwvRz5swprzIrFZ1Op/593Lhx+kGDBhmsN/acyvf9/h52jvV6vb5jx476Tz/99IH7qa7nuNrc\nntq5cyft2rXDzu7PYYB79uxJTk4OBw4c0LCyqis6OpqMjAy6d++uttnY2NCxY0d27dqlYWUVl4nJ\ng/+TNPacyvf9/h52jo1VXc9xtQmNuLg4vLy8DNrq1KmDtbU1cXFxGlVVNXTt2pVmzZrRrVs31qxZ\no7bHxcVhampK/fr1DbZv2LChnPNHZOw5le/74/vxxx/x8/OjRYsWjB8/noSEBIP11fUcV5tnGmlp\nadjb2xdrd3BwIC0tTYOKKj9XV1cmTJiAv78/Op2OX375hQ8++ICcnByGDh1KWloaNjY2xcb+cnR0\nJDs7m7y8PCwsLDSqvnIy9pzK9/3xdOrUicDAQNzd3blw4QLz5s0jPDycjRs3que1up7jahMaovS1\nb9+e9u3bq8sdOnQgNzeXhQsXMmTIEA0rE+LxTJ06Vf17SEgIQUFB9O3bl7Vr1zJ06FDtCqsAqs3t\nKQcHBzIyMoq1p6Wl4eDgoEFFVVO3bt1ISUkhISEBBwcHsrKyinVBTE1NxdraWq4yHoGx51S+76XL\n29ubBg0acOrUKbWtup7jahMaXl5exe4zXr9+nezs7GL3JcWjUxRF/buXlxc6nY7Lly8bbHOve8HC\nOMaeU/m+lz5FUYp9v6vjOa42ofHkk0+ye/dug98MfvnlF6ysrAgNDdWwsqply5YtODs7U7duXYKD\ng7Gzs2Pz5s3q+uzsbLZv325wW0sYz9hzKt/30nXu3Dni4uLw9fVV26rrOTb98MMPP9S6iPLQuHFj\nvvvuO/bv34+bmxt79uxhzpw5vPLKK3To0EHr8iqlcePGER8fT0ZGBhcvXmTBggVs2rSJd955h8DA\nQMzMih6ZLVq0CAcHBzIzM5k5cyaJiYl89tln2NjYaPwvqHiys7OJjIwkNjaW3bt3k5qaiouLC7Gx\nsdStW1d9ifJh51S+7/f3sHMcFRXFf/7zH3Jzc0lOTmbnzp1MmzYNJycnZsyYod4CrK7nuFpNwhQb\nG8uMGTM4evQoDg4OPPfcc4wbN05m9ntEc+bMYcuWLSQmJqLX62nUqBFDhgyhb9++6jb6/x/yYvXq\n1aSkpODn58fUqVNp1qyZhpVXXPHx8XTu3Pme6yIjI/Hw8DD6nMr3/d4edo4zMjKYOXMmZ8+eJT09\nHScnJ9q3b8/EiROpVauWwfbV8RxXq9AQQgjxeKrNMw0hhBCPT0JDCCGE0SQ0hBBCGE1CQwghhNEk\nNIQQQhhNQkMIIYTRJDSEeIC7U9rGx8drXYqBjRs30rp1a3Jycoz+TFRUFEFBQdy5c6cMKxNVnYxy\nK6odHx8fo7aLjIws40oeTUFBAfPmzWPw4MEG0+w+TNu2balfvz5Lly5l8uTJZVihqMrk5T5R7fz0\n008Gy9988w3Xrl1jypQpBu1du3bF0tKSgoICLCwsDAar09Jvv/3GhAkT2LlzZ4nnWV+9ejWzZs0i\nKipKhnERj0RCQ1R7o0eP5syZM/z+++9al2KU119/nczMTFasWFHiz96+fZv27dvzySefGAz3IoSx\n5JmGEA9wr2canTp1YvTo0URFRdGvXz/8/f3p168fx48fB2D9+vV069aN5s2bM2jQIK5evVpsv9HR\n0QwbNozg4GACAwMZOnQoMTExD60nNzeX3bt306ZNm2LroqKieOmll9RJg7p168acOXMMtnFxccHH\nx6fC3noTFZ+EhhCPIC4ujsmTJ9O5c2cmTpxIYmIir732Gj/88AOLFi3ihRdeYOTIkRw7dsxgFjiA\nPXv2MGTIEPLy8hg/fjwTJkwgMTGRQYMGERsb+8DjxsTEkJ+fX2xwwvPnz/Paa69hbm7OxIkTmTRp\nEh07duTw4cPF9uHr60t0dPTjnwRRLcmDcCEewcWLF/nhhx/w9/cHoFatWkycOJHZs2erc4pA0UPr\nxYsXc/36dWrXrk1hYSEffvgh7dq1Y9GiRer+nnvuObp37878+fP5/PPP73vcu5P+eHh4GLRHRUVh\naWlJRETEQ0dY9fT05NatW6SkpODk5PRI/35RfcmVhhCPwMfHRw0MgICAAKDo1tXdwADUbe7e3jpz\n5gyXL1+mZ8+e3LlzR/2Tn59PixYtOHDgwAOPm5KSAoCjo6NBu4ODA9nZ2ezateuhtd+dijQ5Ofmh\n2wrxd3KlIcQjqFOnjsGyvb09AO7u7vdsT01NBeDSpUsAvPPOO/fcr4mJcb/H/b3/So8ePfjhhx94\n7bXXcHV1pU2bNnTt2pUuXboU6/V197MVpTeYqFwkNIR4BPf74f6wW0N3f2BPmTIFb2/vEh/37u2k\ntLQ0g+62VlZWrFq1iv3797Njxw527drFTz/9RNu2bVm6dKlBXWlpaQAGV0RCGEtCQ4hy5OnpCRTd\nIrpXD6iH8fLyAopudzVs2NBgnYmJCa1bt6Z169a89957LF26lH/9618cOHCA1q1bq9vFx8dTs2bN\nYre4hDCGPNMQohz5+vri6enJ119/TXZ2drH1Dxviw8/PD3Nzc06cOGHQfq/nE02bNgWKuun+1cmT\nJwkKCipp6UIAcqUhRLkyNTXlo48+YtSoUfTu3Zu+ffvi5uZGYmIiUVFR1KtXj9mzZ9/385aWlrRr\n1469e/cyduxYtX3BggUcOnSIJ598Eg8PD+7cucO3336Lu7s7LVq0ULe7ffs2Z8+eZciQIWX67xRV\nl4SGEOWsdevWrFmzhvnz57NixQqysrJwc3MjKCiIF1988aGf79+/PxMmTODmzZu4ubkBRb22EhIS\nWLduHcnJyTg7OxMaGsq4cePUh/FQNASJpaUlTz/9dJn9+0TVJsOICFHJFBQU0LNnT5599lnGjBlT\nos/279+f0NBQ3nvvvTKqTlR18kxDiErGzMyMsWPHsnLlyhIPjX7x4kVGjRpVhtWJqk6uNIQQQhhN\nrjSEEEIYTUJDCCGE0SQ0hBBCGE1CQwghhNEkNIQQQhhNQkMIIYTRJDSEEEIY7f8Anx5V02lR4aUA\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Length (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the figure from the book." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap11-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgYAAAJaCAYAAABUc48sAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl4U2Xa+PFvkibd050udKFlhwKC\nBcoi6ygKOKIjoiKCIugPrQ5uI4rjiK/jMi6vyMvihqKOOyoIAgLKoggqFkQoW4Hu+5KmW9Lk/P4I\nBEJbSEvbdLk/19UrzXNOTu70pM3d5zzP/agURVEQQgghhADUrg5ACCGEEK2HJAZCCCGEsJPEQAgh\nhBB2khgIIYQQwk4SAyGEEELYubk6AFerqqriwIEDhISEoNFoXB2OEEII0awsFgv5+fnEx8fj4eFR\na3uHTwwOHDjA9OnTXR2GEEII0aI+/PBDEhISarV3+MQgJCQEsP2AwsLCXByNEEIIcWkqqsx4uruh\nUqnq3J6Tk8P06dPtn3/n6/CJwZnLB2FhYURGRro4GiGEEKJxTGYL3+0+xYlsA2FB3vxtbLd6kwOg\n3svnHT4xEEIIIdo6Q7mJdTtTKTRUAZBfXEGNxYrWreFj5yQxEEIIIdqwnMJy1v14gsrqGnvb0Pjw\nRiUFIImBEEII0WYdTS9m8540LFbbskcatYqxCVH0igls9DElMRBCCCHaGEVR+OVgLnsO5tjbPHRu\nTBzehYgQn0s6tiQGQgghRBtirrGy5Zc0jmWU2Nv8fd25dmQcfj7ul3x8SQyEEEKINsJYaWb9jyfI\nK66wt0WF+jIhMQYPXdN8pEtiIIQQQrQBuUUVfPvTCYyVZntb/27BjBzQGbW6/mmJDSWJgRBCCNHK\nHT5VxNZf0+2DDNUqFVcM7Ey/rsFN/lySGAghhBCtlNWqsOtANr8fzrO3ues0XJ3YhahQ32Z5TkkM\nhBBCiFaoylTDpt2nSMsps7cF6j2YODwWf99LH2RYH0kMhBBCiFamyFDF+h9PUGKstrfFhuu5cmgM\nOm3zrgSsbtaji1Zj/fr1rF692qFtxowZ3H///U1y/DfffJPdu3c3ybGEEKIjS80s5bMtRxySgst7\nhTJxRGyzJwUgiUGHsWHDBr788stmO/5bb73Fnj17mu34QgjR3imKwu4D2az/6QTmGisAWo2aCYkx\nDOsXfsEFkZqSXEoQQgghXKzKVMPmPWmczDbY2/TeOiYOjyXY37NFY5Eegw7gscceY+PGjezZs4ee\nPXvSs2dPXn/9dfv2tWvXcuWVVzJo0CDuuusucnJyHB5fXV3Niy++yOjRo4mPj+evf/0r27Zts28f\nN24cJSUlLFmyxH78M5cV3nnnHf72t79x+eWXM3z4cO655x5OnTrVMi9cCCHagMLSSj7bctQhKYgK\n9eWm8T1aPCkA6THoEObNm0dWVhZlZWU89dRTAISFhbFnzx727dtHXl4e//jHP6iurubZZ5/lySef\n5M0337Q//v7772f//v0kJSURHR3Nt99+y//7f/+PL774gt69e7NkyRJuv/12JkyYwNSpUwHo1q0b\nADk5Odx2221ERERgNBr5+OOPufnmm9m0aRO+vs0z1UYIIdqKI2nFfP9rOmaL1d42sGcnhsWHN2nR\nooaQxKARfj+cx56DOfZrQC1J66ZmSJ8wBvbs5PRjoqOj8ff3R1EULrvsModtRqORFStW4OfnB0B+\nfj7PPfccVVVVeHh4sGvXLn744Qfef/99hgwZAsDIkSM5efIky5YtY/HixfTp0weNRkNYWFit4z/+\n+OP27y0WCyNGjGDYsGFs2bKFKVOmNPbHIIQQbZrFqvDT/iz2Hc23t2nd1IwfHE23SH8XRiaJQaMk\nH8l3SVIAtsUzko/kNygxuJB+/frZkwI4+59+bm4uMTEx/PTTT4SEhDBo0CBqas6u9T1s2LBasxzq\nkpyczGuvvcbBgwcpKTm74MeJEyeaJH4hhGhrjJVmNu46SXZhub3N39edicNjCdR7uC6w0yQxaITL\neoS4tMfgsh4hTXY8vV7veHytFrCNKwAoLi4mPz+fvn371nqsRnPhaTNZWVnceeed9O/fn6effppO\nnTqh1Wq5++67MZlMTfQKhBCi7cjIK2Pjz6eorD77j1ZcZz/+Mji6RaYiOkMSg0YY2LNTk/3H3tr5\n+fkRGhrK//3f/zX4sTt27KCqqoqlS5fi5eUFQE1NDaWlpU0dphBCtGqKovD74Xx2HchGUWzrHahU\nKobFhzOwZ0iLTUV0hiQGHYRWq7X3AjTEsGHDWLlyJV5eXnTt2rVBx6+qqkKtVuPmdvZt9u233zpc\nkhBCiPauqrqGLb+kceKcWQdeHlomJMbQOcTHhZHVTRKDDiI2NpYtW7awefNmQkND6dTJuR6PESNG\nMHLkSO68807mzJlDt27dMBqNpKSkUF1dzUMPPQRAXFwc27Zt44orrsDLy4vY2FgSExOxWCwsWLCA\nG2+8kaNHj/LOO+/UunwhhBDtVW5RBRt/Pomh/Ozl04hgb65K7IKPp9aFkdVPEoMO4tZbb+XQoUM8\n/vjjlJaWct999zn1OJVKxZIlS1i+fDnvvfce2dnZ+Pn50atXL2bMmGHf79FHH2XRokXcfffdVFZW\nsmrVKoYOHcpzzz3HkiVL+O677+jVqxevvfYa8+fPb66XKYQQrYKiKPxxvICd+7Kwnl4qGWxj1Ib1\ni0DjoqmIzlApZy52dFAZGRmMHz+eLVu2EBkZ6epwhBBCtHFVphq+/y2D4xlnZ2K5azX8ZUg0sRF+\nF3hky7jY5570GAghhBBNpK5LB50CvJiQGIOfT/MtldyUJDEQQgghLpGiKOw7ms9Pf2Q7XDro1zWY\nkQMi0GjazgoEkhgIIYQQl6Cyuoat58060Gk1jEuIcnkVw8aQxEAIIYRopMx8I9/tPoWx0mxvCw30\n4qqhbefSwfkkMRBCCCEayGpV+OVgDr+m5HHuGP7LeoQwLD68TV06OJ8kBkIIIUQDlFWY+G73KbIK\nzq514OnuxvjB0XQJb/t1WiQxEEIIIZx0NL2YH37LoNpssbdFdvLhL0NiWm3BooaSxEAIIYS4CHON\nhe2/Z3LoZJG9Ta1SMaRvGIN6dkLdigsWNVSjEoOamhpUKtVFV9cTQggh2rrcogq+232KEuPZ9WD0\n3jquGhpDWJC3CyNrHk4lBr/++itbtmzh999/59ixY5SX266r+Pj40LVrVwYOHMj48eNJSEho1mCF\nEEKIlmK1Kuw9nMeeP3OwnjPAsGd0AKMGReLeSpZJbmr1JgY1NTV8+umnvPvuu6SlpeHn50ffvn2Z\nOHEifn5+KIqCwWAgIyOD1atXs3LlSiIjI7njjju46aab0Grbx7UWIYQQHU+psZrNe9LILjw7wFCn\n1TB6YGd6xgS6MLLmV29icOWVV2I2m7n++uu5+uqr6du37wUPdODAATZs2MCyZct4++232bp1a5MH\nK4QQQjQnRVFIOVnMjn2ZmM4ZYBge5M1fhkS32doEDVFvYjBv3jyuu+46dDqdUweKj48nPj6e+++/\nn6+//rrJAhRCCCFaQkWVmW17MzieWWpva68DDC+k3goMU6dOdTopOJdOp2Pq1KkNflxubi4DBw6k\nZ8+e9jEMYMveli9fzujRo+nfvz/Tp0/n0KFDtR5/7NgxZs6cyYABAxg5ciSvvfYaFoul1n5CCCHE\n+U5klfLRpsMOSYG/rzt/G9edhN6hHSYpgAskBi3txRdfxMvLq1b7G2+8wdKlS5kzZw7Lly/Hy8uL\nWbNmkZ+fb9+ntLSUWbNmoVKpWLp0Kffeey8rV65k8eLFLfkShBBCtDEms4Wtv6ax7scTVFbX2Nvj\nuwYz7S89CA2s/bnU3tV7KWHJkiUNPphKpeLee+9t8ON++eUXduzYwd13382LL75ob6+uruaNN95g\n7ty53HbbbQBcdtlljBs3jg8++ID58+cD8PHHH1NdXc2SJUvw8fFhxIgRGI1GlixZwpw5c/Dx8Wlw\nTEIIIdq3jLwytv6a7rBEsreHlnGDo4gJa/sVDBurQYmBSmXrSjm3LvSZdkVRGpUYWCwWnnnmGebN\nm4de73gi9u7di9Fo5JprrrG3eXl5MXbsWHbs2GFPDLZv387IkSMdEoBJkybx0ksvsWfPHsaNG9eg\nmIQQQrRf5horP/+Rzb5j+Q7t3aP8GT0wEg/3jl37r95Xn5KS4nA/NzeXuXPn0r17d2bOnElsbCwA\nqampvPfeexw/fpwVK1Y0OICPP/4Yk8nE9OnTWbt2rcO21NRUNBoNXbp0cWjv2rUr3377rcN+iYmJ\nDvtERETg6elJamqqJAZCCCEAyC4oZ8svaQ7Fitx1GkYPjKR7lL/9H+COzOkxBk8//TQxMTG89NJL\n9OvXDx8fH3x8fOjfvz8vv/wy0dHRLFq0qEFPXlxczGuvvcaCBQvqrHtgMBjw8vKqVWHRz8+PyspK\nTCaTfT9fX99aj9fr9RgMhlrtQgghOpYai5Wd+zJZ/cMxh6SgS7ieW6/qRY/oAEkKTnM6Mfj5559r\n/Vd+rsTERHbt2tWgJ3/11VcZMGAAo0ePbtDjhBBCCGdlF5Tz8XeHST6Sb78UrtNqGJ8QzaQRsXi3\nk8WPmorTF1Lc3d3Zv38/t956a53b9+3bh7u784Ufjh49yurVq/nggw/s/9VXVlYCYDQa0Wg06PV6\nKioqsFgsDr0GpaWleHp62qdT6vV6jEZjrecwGAy1xi0IIYToGMw1Vnb/mc2+owUOY+OiQ30ZmxCF\nr1fDp+R3BE4nBtdeey3vv/8+fn5+3HbbbURFRQGQnp7O+++/z5o1a5gxY4bTT3zq1CnMZjPTpk2r\ntW3UqFHceOONTJ48GYvFwqlTp4iLi7NvT01NdbgfFxdHamqqwzGys7OprKx02E8IIUTHkJlvZOuv\n6ZSec9lAp9Uwon8EfWID5bLBBTidGDz88MMUFxfz3nvvsWrVKvt/8BaLBUVRmDRpEg8//LDTTzxo\n0CBWrVrl0LZjxw7efPNN3njjDaKioujcuTM+Pj5s2LCBefPmAbZehe+//56bbrrJ/rhRo0bx9ttv\nYzQa7TMT1q9fj4eHB0OGDHE6JiGEEG2byWzhp/1ZHEgtdGiXXgLnOZ0Y6HQ6/vOf/zB79my2b99O\nZmYmAJ07d2bUqFH06tWrQU8cGBjI0KFDHdrOHDMhIQFvb9tSlnPnzmXp0qX4+fkRFxfHypUrsVqt\nDr0TN998M++//z5JSUnMmTOH9PR0lixZwqxZs6SGgRBCdBAnsw388Fs6xkqzvc1dp2Fk/8706iKD\nC53V4MmavXr1anAScCnmzp2L1WplxYoVlJSUEB8fz8qVKwkODrbv4+fnx7vvvsuiRYu455570Ov1\nzJw5k6SkpBaLUwghhGtUVJnZkZzF0fRih/bYCD9GD4rERwYXNohKOb9aUQeTkZHB+PHj2bJlC5GR\nka4ORwghhJMUReFwWjE7k7OoMp0tZ+zp7sYVl3WWugT1uNjnXoN6DLZt28a7777LwYMHKSsrq1UB\nEahzgSMhhBCiKZUaq/lhbwbpuWUO7b1iAhgxoDOeHbx64aVw+ie3ceNG/v73v9OtWzcmTpzIRx99\nxOTJk1EUha1btxITE8Nf/vKX5oxVCCFEB2exKuw7ks+egznUWKz2dr23jtGDIjv0GgdNxenEYMWK\nFfTv35///ve/lJaW8tFHH/G3v/2NYcOGkZGRwbRp06QrXgghRLPJLarg+9/SKSiptLepVCr6dwsm\nMT4MrZvmAo8WznK68uHx48eZOHEiGo0GNzdbPlFTY7umExkZyS233MKbb77ZPFEKIYTosKpMNfyw\nN4PPtx51SAqC/T25cVx3rrissyQFTcjpHgMPDw/7egZ6vR6dTkd+/tmVqYKDg8nIyGj6CIUQQnRI\niqJwNL2EnfuyqKg6OwXRTaNmSN8wBnQPQaOWwYVNzenEIDY2luPHj9vv9+7dm6+//pq//vWvWCwW\nvvnmG8LDw5slSCGEEB1LSVk123/PIO28wYUxYXpGDeyMn4/zJfhFwzh9KeHKK69ky5Yt9hUN77nn\nHvbs2cPgwYNJTEzk119/Ze7cuc0WqBBCiPavxmJl94FsPtqU4pAU+HhquXpYFyaPjJWkoJk53WMw\ne/ZsZs+ebb8/duxY3n//fTZt2oRGo2H06NEXXH1RCCGEuJBT2Qa2/Z6Bodxkb1OpVPTrGkRifDg6\nrYwjaAlOJQYmk4l9+/YREhJCly5d7O0JCQkkJCQ0V2xCCCE6gFJjNTv3ZXEiq9ShPTTQi9GDIukU\n4OWiyDompxIDNzc37rjjDhYsWOCQGAghhBCNVWOxsvdwHntT8hxqErjrNAzvJ6sguopTiYFarSYq\nKoqysrKL7yyEEEJcgKIonMw2sCM50+GyAUDvLoEM6xeOl4esb+AqTo8xuPvuu3n55ZeZOHEi0dHR\nzRmTEEKIdqq4rIodyZmk5Tj+oxkS4MnogZGEBXm7KDJxhtOJwaFDh9Dr9UycOJHExEQ6d+6Mh4eH\nwz4qlYrHHnusyYMUQgjRtpnMFn45lMu+I/lYz1lnx12nYVh8OH1ig1BLTYJWwenE4L333rN/v3Pn\nzjr3kcRACCHEuRRF4dDJIn4+kONQpEilUtE3NpDE+HA8ZMGjVsXps5GSktKccQghhGhnsgvK2ZGc\nSV5xhUN7RLA3V1wWSUiAp4siExciaZoQQogmVVZh4qf92RxNL3Zo9/HUMqxfOD2iA2S2QStWb2Jg\nMpnQ6XSNOuilPFYIIUTbZDJb+C0lj31H8x2mH7pp1AzsEcKgXp1ksaM2oN6SyGPGjGHFihUUFhY6\nfbCCggKWLl3K2LFjmyQ4IYQQrZ/VqnDwRCEfbEjht5Rch6Sge5Q/t07oxdD4cEkK2oh6ewwWLFjA\nkiVLWLx4MQkJCQwfPpw+ffoQGRmJn58fiqJQWlpKRkYGBw4cYNeuXezdu5eoqCgWLFjQkq9BCCGE\ni6TnlvHj/iyH5ZABOgV4MfKyCCKCfVwUmWisehODa6+9lokTJ7JlyxZWr17NkiVLMJvNta4LKYqC\nVqtlxIgR/O///i/jxo1Do5GsUAgh2rPC0kp+3J9Vqx6Bj6eWxH7h9JRxBG3WBQcfajQarrrqKq66\n6ipMJhMHDhwgNTWVkpISAPz9/YmLiyM+Pl7GFAghRAdgrDTzy8EcDp4oQjmnHoFWo2Zgz04M7Bki\nlwzaOKdnJeh0OgYNGsSgQYOaMx4hhBCtkMlsYe/hPJKPOA4sVKlU9O4SwJC+4fh4Shnj9kCmKwoh\nhKiXxWLlzxOF/HIwl8rqGodtUaG+jOgfQbC/1CNoTyQxEEIIUYuiKBxNL+HnA9m1FjoK9vdkeL9w\nosP0LopONCdJDIQQQtgpikJabhk//5FN/nkzDXy9dCTGh0mBonZOEgMhhBCArYTxrj+yySowOrR7\n6Ny4vFcn+nULxk1Tb/kb0U5IYiCEEB1cQUkluw9kcyLb4NDuplEzoHsIA3uG4KGTj4uOQs60EEJ0\nUMVlVez5M5djGSUOUw/VKhV9YgNJ6BMmMw06oAYlBsePH2fp0qXs3r2bkpIS3nzzTYYNG0ZRUREv\nvPACN998MwMHDmyuWIUQQjQBQ7mJXw/lkHKyGOs5CYFKpaJHlD+D+4Th7+vuwgiFKzmdGPz555/c\ndttteHt7k5CQwMaNG+3bAgMDOXXqFB999JEkBkII0UoZK0z8lpLHnycKsVoVh22x4XqGxofL1EPh\nfGLw0ksvER4ezqefforJZGLDhg0O20eMGMGaNWuaPEAhhBCXxlhpZm9KLn+mFmI5LyGICvVlaN8w\nwoK8XRSdaG2cTgySk5N54IEH8PHxobi4uNb2sLAw8vLymjQ4IYQQjVdRZbb1EKQWOlQrBAgP8iax\nXzidQ2SRI+HI6cRArVajVtc/TSUvLw9PT+mCEkIIVyuvNLP3cN0JQWigF0P7hhEV6iu1CESdnE4M\n+vfvz3fffcftt99ea1tVVRVfffUVCQkJTRqcEEII5xkrzfxeT0LQKcCWEESHSUIgLszpxCApKYnb\nb7+defPmMWnSJACOHTtGbm4ub7/9Nnl5eSxevLjZAhVCCFE3Q7mJvYfzOHSi9hiCTgFeDO4TSpdw\nvSQEwilOJwaDBg3ijTfe4Omnn+ahhx4C4NlnnwUgKiqK5cuX07t37+aJUgghRC2lxmp+S8mtNe0Q\nbJcMBvcJI0Z6CEQDNaiOwfDhw9mwYQMpKSmcPHkSRVGIioqib9++Fxx/IIQQoukUllbyW0oeR9Md\nCxMBhAV5M7h3qFwyEI3W4MqHKpWK3r17S++AEEK0sNyiCn5LySU1s7TWtohgHwb3CSWyk48kBOKS\n1JsY/PLLL4064ODBgxsdjBBCCEeKopCRZ+S3lDwy8spqbY8K9SWhd6hMOxRNpt7EYMaMGQ3KOhVF\nQaVScejQoSYJTAghOjKrVSE1q5S9KXnkFVfU2h4b4UdC71BCA71cEJ1oz+pNDFatWtWScQghhABq\nLFYOnyrm98N5lBirHbapVSq6Rflzea9OBPlJ3RjRPOpNDIYMGdKScQghRIdWZarhwPFC9h8roKLK\n7LDNTaOmd5dALusRgp+PLG4kmpcsuyyEEC5Uaqxm/9ECDp4sxFzjWJTIXashvmswA7oH4+Uhyx+L\nluF0YlBXxcNzqVQq3N3dCQsLY+jQoUyYMAE3t/oP/+233/L111/z559/YjQaiY2N5c4772Ty5MkO\n+3366ae89dZbZGdn0717dx555BGGDRvmsE9ubi6LFi3ip59+QqfTMWnSJB555BEp0SyEaLVyiypI\nPpLHsYzSWlMOfTy1XNYjhD6xQei0GhdFKDoqpxMDRVHIzc0lLS0NPz8/OnfuDEBmZialpaXExMTg\n4+PDvn37+PTTT3njjTdYuXIlgYGBdR7v3XffJTIykgULFhAQEMD27dt56KGHKC4uZsaMGQB88803\nPPXUU9x3331cfvnlrF69mrvvvpvPP/+cHj16AGA2m5k9ezZarZZXX30Vg8HA888/j8Fg4KWXXrrU\nn48QQjSZMwMK9x3JJ7uwvNb2ID9PBvYMoXukPxqN1IYRruF0YvDAAw9w77338vzzz3Pttdei0diy\nWIvFwpo1a3jhhRd44YUXGDBgAF9++SVPPvkkr776Ks8880ydx1u2bJlD0jBs2DDy8vJYuXKlPTF4\n/fXXmTJlCvfeey9gG/dw6NAh3njjDfuH/saNGzl+/DibNm0iKirK9qLc3HjwwQe577776NKlS8N/\nKkII0YRMZguHThSx71g+hnJTre1Rob4M7BEiCxuJVsHpxODFF1/khhtuYMqUKQ7tGo2G66+/niNH\njvDcc8/xySefcMMNN5CcnMzWrVvrPV5dPQm9e/dm48aNAKSnp3Py5EmeeOIJ+3a1Ws2ECRN4//33\n7W3bt2+nX79+9qQA4C9/+QtarZYdO3ZIYiCEcJmSsmr+OFbAoVNFmMwWh21qtYoeUf4M6N6JkAC5\n7ClaD6cTg8OHD3PdddfVuz0yMpL//ve/9vt9+/blyy+/bFAwycnJxMbGApCamgpAXFycwz5du3al\npKSEoqIiAgMDSU1NpVu3bg776HQ6oqOj7ccQQoiWcqYg0f6j+ZzMKas1fsBD50Z81yDiuwbj4ykD\nCkXr43RiEBISwqZNm7jllltqrYtgtVrZsGEDwcHB9raSkhL8/PycDmTXrl1s3ryZf//73wCUltpK\nfur1eof9zhyztLSUwMBADAYDvr6+tY6n1+sxGAxOP78QQlwKc42FlFPF/HGsgCJDVa3tgXoP+ncL\npmdMIFo3GT8gWi+nE4M77riDZ555hunTpzNt2jR7131aWhqffPIJ+/btY+HChfb9N27cSL9+/Zw6\ndkZGBg899BDjx4/nhhtuaOBLEEII1ykpq+aP4wWknCyi+rzLBQAxYXoGdA+W8QOizXA6MZg+fToq\nlYrFixfz2GOP2d/giqLg7+/PwoULmT59OgAmk4lHHnmEyMjIix63pKSEOXPmEBER4TCL4EzPQFlZ\nmUOvwZmehDPb9Xo9RqOx1nENBgO9evVy9uUJIYTTrFaFUzkG/jhWQFpu7fULtG62gkT9ugUT4Ovh\nggiFaLwGFTi69dZbmTp1KgcOHCArKwuAiIgI4uPj0WrPXivT6XS1ag3UpbKyknvuuQez2cyKFSsc\n6g6cGVuQmppqnxp55r6/v7998GJcXFytsQQmk4n09HRuvvnmhrw8IYS4oIoqMwdPFHHwRGGdswv8\nfdzp1y2Y3l0Cpf6AaLMaXPlQq9UycOBABg4ceElPXFNTwwMPPMDJkyf5+OOPCQoKctgeFRVFly5d\n2LBhA1dccQVwdizDmfsAo0aN4tFHHyUzM9OeQGzduhWTyeSwnxBCNIaiKGQXlPPH8UKOZ5ZgtToO\nJlSpVHQJ8yW+WzDRcrlAtAMNTgyOHTtGenq6vUv/fOdPZ6zP008/zbZt23jiiScoKSkhOTnZvq1P\nnz7odDqSkpJ45JFH6Ny5M4MGDeKrr77i1KlTvPzyy/Z9J0yYwPLly0lKSuKBBx6grKyM5557jsmT\nJ8tURSFEo1VV13D4VDF/niisczChh86NPrGBxHcNRu+tc0GEQjQPpxODtLQ0HnnkEfbv319r+s0Z\nKpXK6cTgxx9/BODZZ5+ttW3Lli1ERkYyefJkKioqePPNN1m6dCndu3dnxYoV9qqHYOvBeOutt1i0\naBF///vf0el0TJw4kUcffdTZlyaEEMDp3oHCcg6mFnI0vQSLtfbfuvAgb+K7BtE10h83qU4o2iGn\nE4N//vOfHDlyhMcff5yEhIRa0wgb6kLFj8510003cdNNN11wn7CwMJYuXXpJ8QghOq7K6hpSThZx\n8EQRxWW1ewd0Wg09ovyJ7xpMsL8UIxLtm9OJwd69e5k7d669XLEQQrRlVqtCel4ZKSeLOJ5ZWmvs\nAECnAC/6xgXRI9ofrZsMJhQdg9OJgb+/f4MKFgkhRGtkKDed7h0oxFhprrVd66amR3QAfWOD6BTo\n5YIIhXAtpxODadOmsWbNGm699Vb7AkpCCNEWmGssHM8sJeVkERl5teueAIQFedMnNpDuUdI7IDo2\npxODHj16sGXLFq6//npuvPFUJXAMAAAgAElEQVRGwsPDa5VGBhg/fnyTBiiEEI1xZiBhyskijmWU\n1lrECMDT3Y2eMQH07hJIkJ+MHRACGpAYJCUl2b8/s57B+VQqFYcOHbr0qIQQopFKjdUcTism5WRR\nnUWIVCoV0aG+9I4NJDZcj0ZmFgjhwOnEYNWqVc0ZhxBCNFqVqYbjGaUcPlVMVkHdlwr8fd3p3SWQ\nnjGBsqqhEBfgdGIwZMiQi+5jMtXOzoUQojlYLFbScstIOVXMyazSOmsOuGs1dIvyp1dMIGFBXlKV\nUAgnNLjy4fkUReHnn39mzZo1bN68mV9++aUp4hJCiFoURSGroJwjacUcyyih2lR73IBapSIq1Jde\nXQKIjfCTIkRCNFCjE4M//viDb775hvXr11NQUIC7u7tTCycJIURDKIpCfnElRzNKOJpWXOcUQ7DV\nHOgZHUD3aH+8PORSgRCN1aDE4NSpU6xdu5a1a9eSlpYGwNixY5k2bRqJiYm4u7s3S5BCiI6nyFDF\nsfQSjqQXU1JWXec+em8d3aMC6BkTQKBeljcWoilcNDEoKChg3bp1rF27lj///BO9Xs+VV17JXXfd\nxZNPPsmUKVMYPXp0S8QqhGjnSsqqOZZRwtH0EgpLK+vcx0PnRrcof3pGB8i4ASGawQUTgzvuuIM9\ne/bg4eHB+PHjSUpKYsSIEbi5udl7DIQQ4lKcSQaOZ5SQX1J3MqB1U9O1sx/dowKIDPVFo5ZkQIjm\ncsHEYNeuXURGRvLkk08yatQoycyFEE2iuKyK4xmlF0wG3DRqYsL1dI/yp0u4XgYRCtFCLpgYPPzw\nw3zzzTfcc889BAUFcfXVV3PNNddw+eWXt1R8Qoh2QFEUCkurSM20JQOFhtorGAJo1Cqiw84mAzqt\nlCYWoqVdMDG46667uOuuuzh27Bhr165l3bp1fPDBB4SFhTFkyBBUKpX0Iggh6qQoCjmFFaRmlZKa\nWUqpse4BhGeSgW6RfnSJ8MNdkgEhXMqpWQndunVj/vz5zJ8/n7179/LNN9+wYcMGFEXh3//+Nz//\n/DNjxoxh6NCh6HS65o5ZCNFKWSxWMvKMpGaVciLLQEVV3VML3TRqYsJ8ievsR2yEn/QMCNGKNLiO\nwaBBgxg0aBBPPPEEP/74I2vWrOHLL7/kww8/xMvLi7179zZHnEKIVqqquoZTOQZOZBk4lWPAXGOt\ncz+dVkNMmJ6ukX7EhPnKCoZCtFKNLnCk0WgYNWoUo0aNoqqqis2bN/PNN980ZWxCiFaquKyKE1kG\nTmYZyCksx6rULkcMttULYyP86NrZj8hOPrJgkRBtwCWXRAbw8PBg8uTJTJ48uSkOJ4RoZSwWK1kF\n5ZzMNnAq20BJPeMFAPx93ImN8CM2Qk9YkDdqmVooRJvSJImBEKL9MVaaOZVtIC3HQHqeEZO59roE\nYFvGODTQiy7heuI6+xHg6y6DkoVowyQxEEIAtl6BnKIKWzKQW0ZBPfUFwFZwKCrUly7herqE62Vt\nAiHaEUkMhOjASo3VpOeWcSqnjIy8snoHDoJtXYIu4XpiwvV0DvGRgkNCtFOSGAjRgVSbLWTmGUnL\nLSM9t6ze2gIAarWKiGAfuoT7Eh2ml0sEQnQQkhgI0Y5ZLFZyiypIyy0jI89IblEFSj0zCMDWKxAd\npicmzJfOIT5SX0CIDkgSAyHaEatVoaCkkow8Ixn5ZWTnl2O21H95QKtR07mTD1GhvkSH+eLvI70C\nQnR0khgI0YadWYMgM89IRr6RrAIj1aa6Zw+AbQZBiL8nkZ18iA7zJTzIW2oLCCEcSGIgRBtitSoU\nlFaSlW8kM7+c7IJyqkw1F3yM3ltHVKgvUZ186dzJB093+bUXQtRP/kII0YpZLFbyiivJKjCSlV9O\nTmE51fXUEzjDy0NLVCcfOnfyIbKTL3pvWb9ECOE8SQyEaEWqTDXkFlaQVWDrDcgrrqDmAmMEwFZ2\nOLKTD51DbF/+MntACHEJJDEQwkUURaHEWE1OQQU5ReXkFJRTVFZ9wVkDAN4eWiJCfOgc4k1EiI9M\nIxRCNClJDIRoIdVmC3lFFeQWVZBTWE5OYcVFxwcA+Pm4ExHsTXiwNxHBPvj56CQREEI0G0kMhGgG\nFqtCYWmlPRHILaqg2IneALVKRbC/J+GnE4HwIG+8PaXcsBCi5UhiIMQlsloVisuqyC+uJLeogrzi\nCgpKKrFYL5wEAHjo3AgL8iIsyJuwIC9CA73QuklRISGE60hiIEQDWKwKJaeTgLziCvKLKykoqbxg\nEaEzVCoVwX4ehAbaEoHQIC8pKCSEaHUkMRCiHuYaC4WlVeSX2D7884srKSx1ricAbPUDQgO96BRg\n6wkICfCU3gAhRKsniYHo8BRFwVBuorC0ioLSSgpLqygsqaS03HTRMQFn+HhqCfH3pNPpRCAkwFOW\nIhZCtEmSGIgOQ1EUKqtrKCytoqi0ikKDLQkoMlRdcLnh8/l4agk5/eHfKcCLTpIECCHaEUkMRLuj\nKArllWaKDFUUG6opKqui2FBFoaHqgusInE+tUhHg606wvydB/p6EnP7ykJLCQoh2TP7CiTbLXGOh\npMxEibGK4rJqSk5/FZc1rAcAbNUDg/w8Cfb3IEjvSZCfB4F+HrjJAkNCiA5GEgPRqplrrBjKqyk1\nmigxVlN6+qukrBpjpbnBx9NpNQT4uhPkZ0sAAv08CPLzwNPdTWYHCCEEkhgIF1MUhfKqGsrKTbYE\noNyEwWjCcPp+Yz78wVYfIMDXnQC9BwG+7rYEQO+Bt6dWEgAhhLgASQxEs7JYbdf7jRUmyipMlFWY\nbbflJgynb52d/nc+tUqF3ltHgK87/r4e+Pu6n/7eXXoAhBCikdpNYnDs2DGeeeYZkpOT8fX1ZerU\nqdx3331oNDJvvLmYa6yUV5qpqDJjrLR9lZ++NVaYKK80U15V4/SUv7qoVSp8vXX4+ejw83bH38cd\nP1/bra+3Do1aPvyFEKIptYvEoLS0lFmzZtGtWzeWLl1KWloaL7zwAlarlfnz57s6vDbFYlWoqq6h\noqqGimozlae/r6yqobzKlgRUnP6+ISP8L8RD54beW4evtw69tw4/bx1+Pu7ovXX4eMmHvxBCtKR2\nkRh8/PHHVFdXs2TJEnx8fBgxYgRGo5ElS5YwZ84cfHx8XB2iS1gsVqrNFqpMFqpMNVSbLFRV276v\nMtVQWW2h2lRj+/Cvtt021Yf9GSqVCi93N3y8tPh46dB76fD11uLrpcPXy5YI6LTSqyOEEK1Fu0gM\ntm/fzsiRIx0SgEmTJvHSSy+xZ88exo0b58LonKcoClargtlipcaiUFNjxVxjxVxjOX1rxVRjwWy2\n3ZpqrJjMFkxmC9VmCyaz7X61yXa/xon6/ZdCrVbh7aHF21OLt4cbPp46vL20+Hie/vLS4e3hhkam\n/AkhRJvRLhKD1NRUEhMTHdoiIiLw9PQkNTX1khIDQ7mJY+klDh+yiqKgAIpy+nsFrIpi+2BXzn7A\nW60KVkXBYlWwWGy3VqvVdt+qUGOxUlNjtX9vsdj2dyWVSoWHToOXuxueHlo83d3w8rB9eXto8Tx9\n6+XhJgP8hBCiHWoXiYHBYMDX17dWu16vx2AwNPq4VqvCV9uOYSg3XUp4LqNWqXDXaXDXafDQueGh\n0+Ch0+Cus32oe+g0eLif/d5264ZarukLIUSH1S4Sg+bU0v/Aq1UqtG5q3DRq3NzUaN3UaDVqtNrT\nt24adFrbrbtWg1artt262W512jMf/hrcNGr5j14IIUSDtIvEQK/XYzQaa7UbDAb0en2jj6tWq5gy\nuitH00uwnjvXXgUqbN3uKtXp29P7q1Uq1Gpbu0atcmjTqFW4adSnv1fjplGh0dhu3TRqNBq1jMAX\nQgjhUu0iMYiLiyM1NdWhLTs7m8rKSuLi4i74WIvFNgo/Jyen3n3Cal+laDir7ctaY/u2BqhugsMK\nIYQQDXHm8+7M59/52kViMGrUKN5++22MRqN9ZsL69evx8PBgyJAhF3xsfn4+ANOnT2/2OIUQQojW\nIj8/n5iYmFrtKuVSytK1EqWlpUyaNInu3bszZ84c0tPTef7557n99tsvWuCoqqqKAwcOEBISIlUS\nhRBCtHsWi4X8/Hzi4+Px8PCotb1dJAZgK4m8aNEikpOT0ev13HjjjSQlJcmHvRBCCNEA7SYxEEII\nIcSlk5J0QgghhLCTxEAIIYQQdpIYCCGEEMKuXUxXbC7Hjh3jmWeeITk5GV9fX6ZOncp9993X5gc0\nfvvtt3z99df8+eefGI1GYmNjufPOO5k8ebJ9nxkzZrBnz55aj92/fz/u7u4tGe4lWb16NQsWLKjV\n/q9//YtbbrkFsK1tsWLFCj766COKi4vp168fCxcupHfv3i0d7iWr77yBbRXSgQMHMm7cODIzMx22\nBQcH8+OPP7ZEiI126tQp3n77bX7//XeOHTtGQkIC77//vsM+zp7LtvC7fbHXm5eXx8qVK/nxxx9J\nT09Hr9eTmJjIgw8+SGhoqH2/3bt3c/vtt9c6/pw5c3j44Ydb5LU4w5nz6+x7t7Wf34u91vrOGcDI\nkSN5++23Aef+vjWGJAb1KC0tZdasWXTr1o2lS5eSlpbGCy+8gNVqvegUyNbu3XffJTIykgULFhAQ\nEMD27dt56KGHKC4uZsaMGfb9hg4dyoMPPujwWJ1O19LhNon33nvPYVpOVFSU/fs33niDpUuX8uij\njxIXF8fKlSuZNWsW33zzDSEhIa4It9GeeuqpWlVAFy9ezMGDB+nXr5+9bfLkyQ7nWqvVtliMjXX0\n6FG2bdvGgAEDqKmpqXMfZ85lW/ndvtjr/fPPP9m8eTNTp06lf//+FBYW8vrrr3PLLbewdu1avL29\nHfZ/6aWXHN735yYPrYEz5xcu/t5tC+f3Yq+1b9++fPLJJw5tWVlZzJ8/nyuuuKLW/hf6+9YoiqjT\n8uXLlYSEBKWsrMze9sYbbyj9+/d3aGuLCgsLa7U9+OCDytixY+33b7vtNiUpKaklw2oWX3zxhdKj\nRw/FaDTWub2qqkoZNGiQ8vrrr9vbysvLlaFDhyqvvPJKS4XZbKqrq5XBgwcr//znP+1tY8eOVZ5/\n/nkXRtU4FovF/n1SUpJy2223OWx39ly2ld/ti73e0tJSxWw2O7SlpqYqPXr0UFavXm1v+/nnn5Ue\nPXoohw8fbt6AL9HFXq+iOPfebQvn15nXer4333xT6dWrl5KTk2Nvu9jft8aSMQb12L59OyNHjrRX\nUgSYNGkSVVVV9XbVthWBgYG12nr37k1eXp4LonGtvXv3YjQaueaaa+xtXl5ejB07lh07drgwsqax\nY8cOSktLHS4TtVVq9YX/XDl7LtvK7/bFXq9er8fNzbHTNzY2Fk9Pzzb5u3yx1+ustnB+G/Na161b\nx+DBg1ukp0cSg3qkpqbWWmchIiICT0/PWusytAfJycnExsY6tO3cuZMBAwYwYMAAZs+eTUpKioui\nu3RXXnklffr0YcKECXz88cf29tTUVDQaDV26dHHYv2vXru3iPK9fv56wsDASEhIc2j///HPi4+O5\n/PLLuf/++2tdt22LnD2X7fl3OyUlhcrKylo/A4CZM2fSu3dvxo0bx9KlS+utk9/aXey92x7P74kT\nJzh48GC9CX59f98aS8YY1MNgMODrW3v1JL1ej8FgcEFEzWfXrl1s3ryZf//73/a2wYMHM2XKFGJi\nYsjMzGT58uVMnz6dr7/+msjISBdG2zAhISE88MAD9O/fH4vFwvr163nqqaeoqqpi1qxZGAwGvLy8\nag1K8vPzo7KyEpPJ1GbHVVRWVrJ161amTZvmsPz2uHHjuOyyywgLC+P48eMsWbKE6dOns3bt2jrf\n822Fs+eyvf5uW61Wnn32Wbp06cK4cePs7b6+vsydO5eEhAS0Wi3ff/89r7/+OkVFRSxcuNCFETec\nM+/d9nh+161bh1ar5aqrrnJov9jft8aSxKCDy8jI4KGHHmL8+PHccMMN9vb777/f/n1CQgLDhw/n\nmmuu4b333uOJJ55wRaiNcsUVVzgM1hk9ejTV1dUsW7as3lG/7cX3339PRUUFkyZNcmg/98MgISGB\ngQMHMmXKFL744otL+mMiXOvll18mOTmZDz74wGFAXp8+fejTp4/9/vDhw9HpdLz77rvMmzevzkuL\nrVVHfe+uX7+eESNG4O/v79B+sb9vjb08I5cS6qHX62uN7gZbNqrX610QUdMrKSlhzpw5RERE8NJL\nL11w35CQEAYNGsTBgwdbKLrmM2HCBEpKSsjMzESv11NRUVGrW7W0tBRPT88221sAtv8yYmJiHGYj\n1KVHjx7Exsa2+XPr7Llsj7/bH374IW+//TYvvPACAwYMuOj+EyZMoKamhsOHD7dAdM2nrvduezu/\nKSkpHD9+vFaCX59z/741liQG9YiLi6t1PSo7O5vKyspa16/aosrKSu655x7MZjMrVqzA09Pzoo9R\nqVQOXdJt1bmvIS4uDovFwqlTpxz2qes6ZVtSVlbG9u3bnf5j0h7OrbPnsr39bm/cuJH/+Z//4ZFH\nHmHixIlOPebMuW7r5xxqv3fb2/ldt24dHh4ejB8/3qn9m+KcSmJQj1GjRrFz506HzHP9+vV4eHgw\nZMgQF0Z26WpqanjggQc4efIkb731FkFBQRd9TH5+Pr/99ht9+/ZtgQib18aNGwkICKBz584MGjQI\nHx8fNmzYYN9eWVnJ999/X+d84bbiu+++w2QyOTUb4ciRI6Smprb5c+vsuWxPv9u7d+/m4Ycf5rbb\nbmP27NlOP27jxo24ubnRs2fPZoyu+dX13m1P5xdsicHYsWNr1aWoz7l/3xpLxhjU4+abb+b9998n\nKSmJOXPmkJ6ezpIlS5g1a5bDNJi26Omnn2bbtm088cQTlJSUkJycbN/Wp08fUlNTeeWVV7j66quJ\niIggOzubFStWoFarmTlzpgsjb7ikpCT69etHz549sVqtrF+/nvXr17Nw4ULUajXu7u7MnTuXpUuX\n4ufnZy+KY7VaHYqotDXr1q2jV69edO3a1aH9hx9+YM2aNYwZM4ZOnTqRmprKsmXLCA8Pdxhj0hpV\nVlaybds2AHJzczEajfYkYPTo0Xh6ejp1LtvK7/bFXm9WVhb33nsvcXFxTJw40eH3ODAwkOjoaMBW\n9CowMJB+/fqh1WrZtm0bH374ITNnziQgIKDlX1g9LvZ6d+/e7dR7ty2cX2fey2CbLZaZmcnjjz9e\n53Eu9vetsVp82eXs7Gy2bt3K3r17OXbsGMXFxahUKgICAujatSuDBg1i7NixREREtGRYdTp27BiL\nFi0iOTkZvV7PjTfeSFJSUqspq9lYdZUVPWPLli1otVoWLlzIoUOHKCkpwdvbmyFDhvD3v/+91gdN\na/fKK6+wceNGcnJyUBSFbt26cfvttzNlyhT7PoqisHz5cj766CNKSkqIj49n4cKFDgO22pKioiKu\nuOIKHnjgAebOneuwLSUlheeee47Dhw9TVlaGv78/V1xxBfPnz291lfDOl5GRUW936pYtW4iMjHT6\nXLaF3+2Lvd49e/bUWQ4X4Prrr+f5558HYNWqVXz22WdkZGRgNpuJiYlh6tSpzJw5s1VdSrjY6zUa\njU6/d1v7+XXmvQzw7LPP8uWXX/LTTz/VOd7Jmb9vjdFiicG2bdtYuXIle/bsQVEUoqOjiYyMxM/P\nD0VRMBgMZGRkkJaWhkqlIiEhgdmzZzN69OiWCE8IIYQQtFBiMG3aNFJSUhg/fjxXX301w4cPr7dL\nx2g08uOPP7Jx40a2bNlC7969m6RggxBCCCEurkXGGCQmJrJ06VKnBrn5+PgwYcIEJkyYQGFhIatW\nrWqBCIUQQggBLhhjIIQQQojWq1VNVzSbzVRUVLg6DCGEEKLDcklisG7dOoe6/ADLli1j4MCBDB48\nmHvvvZfy8nJXhCaEEEJ0aC5JDN555x2HD/79+/fz2muvMWrUKGbPns3OnTtZvny5K0ITQgghOjSX\nFDhKT093mGe5bt06QkJCeP3119FoNJjNZjZt2sRDDz3kivCEEEKIDsslPQYmkwkPDw/7/Z07dzJq\n1Ch78YmuXbuSk5PjitCEEEKIDs0liUFkZCR//PEHYFvg5Pjx4w61zAsKCvDy8nJFaEIIIUSH5pJL\nCdOmTePZZ58lLy+Po0ePEhYWxpgxY+zbf//9d7p16+aK0IQQQogOzSWJwYwZM3B3d2fbtm0MGTKE\nu+66y35poaSkhPz8fG655RZXhCaEEEJ0aC1W4Oj48eOtcgGeqqoqDhw4QEhISKtZYEMIIYRoLhaL\nhfz8fOLj4x3G+53RYolBr1696Ny5M6NGjWLMmDEkJibi7u7eEk99Qb/++ivTp093dRhCCCFEi/rw\nww9JSEio1d5ilxI+/fRTtm/fzvbt2/nkk0/QarUMHjyY0aNHM3r0aPva4S0tJCQEsP2AwsLCXBKD\nEEII0SSUGihPA88I0NTuDQDIyclh+vTp9s+/87lkrYSioiK2b9/Ojh072LlzJwaDgejoaEaPHs2Y\nMWMYPHgwWq22RWI5sy72uWtgCyGEEG1O2XFIXQnV+aALggHPgkpVa7eLfe65ZPBhYGAgU6ZMYcqU\nKVitVn7//Xd7b8KqVavw9PQkMTGRMWPGMH78eIKDg10RphBCCNH6WWsgcw1kbwJO/69fUw5WM2h0\nDT6cSxKDc6nVai6//HIuv/xy5s+fT35+Pj/88AM7duzgP//5D/n5+dx3332uDlMIIYRofcrTbb0E\nlZln2zSeEHdHo5ICaAWJwflCQkKYOnUqU6dOpaamhtLSUleHJIQQQrQuVgtkfwuZ6wDr2XZ9b4ib\nCbqARh+6RRKDX375pVGPGzx4MEFBQU0cjRBCCNGGVWRA6rtQkX62TaWF6Buh0+g6xxU0RIskBjNm\nzEB1TqCKojjcr8+hQ4eaMywhhBCi7bDWQPaG2r0EPl0hdiZ4hjbJ07RIYrBq1SqH+yaTif/85z9U\nVVVx0003ERsbC9jWTfjss8/w9PTkkUceaYnQhBBCiNav/BSkroLKjLNtKi1ETYHQcaBquqWPWiQx\nGDJkiMP95557Dq1Wy6effupQ5GjcuHFMnz6d2267jR07djBixIiWCE8IIYRonaxmyFgDOd9hn3EA\n4BMHsbOarJfgXC5ZXXHt2rVcd911dVY+9PT05LrrrmPNmjUuiEwIIYRoJQxH4I9FkHPONESVFqKn\nQu9HmiUpABfNSqisrKSgoKDe7QUFBVRWVrZgREIIIUQrUVMOaV9AwY+O7b49IXYGeNRdsbCpuCQx\nGDZsGO+99x79+/dn/PjxDts2b97MqlWr5DKCEEKIjkVRoOhXOPUJ1JSdbVd72GYchIy85BkHznBJ\nYvDUU09x++23c9999xEeHm5fJyEtLY3s7Gyio6N58sknXRGaEEII0fKq8uHUR1D6p2N7wCCImQY6\n/xYLxSWJQWhoKGvWrOHjjz9m+/btZGVlARAbG8usWbO46aab6lwKUgghhGhXrDW2UsZZ60Exn23X\n+kOXWyFgQIuH5LLKh+7u7sycOZOZM2e6KgQhhBDCdQxH4OSHUJVzTqMKOo2xTUOsZ3XE5tbqSiIL\nIYQQ7ZqpFNK/gMLdju1e0dBlOvh0cUlYZ7gsMcjPz+fzzz/n4MGDlJWVYbVaHbarVCree+89F0XX\nPq1fv55ly5Zx4sQJgoKCmDJlCklJSbi5ubF69WoWLFjA6tWref7559m/fz9dunTh3//+N7GxsTzz\nzDNs2rQJf39/5s+fz+TJkx2OvXnzZpYuXcrRo0fR6/Vcd911zJ8/32H57G+//ZZXX32VnJwcBgwY\nwIIFC7j++ut57rnnuOGGGwD46quv+OSTTzh+/DiKotCrVy8effRR+vXr16I/KyGEaHKKFXK/t9Ul\nsFadbVd7QOR1EDqmSQsVNZZLEoOUlBRuv/12qqqqiI2N5ciRI3Tr1g2DwUBubi7R0dGEhYW5IrR2\na+fOncyfP58pU6bwyCOPcPjwYV577TWKi4tZtGiRfb/HHnuM6dOnc9ddd/Hyyy9z//33079/f6Kj\no1m8eDFffPEF//jHP0hISLCfo/Xr1/PQQw8xbdo0HnzwQdLS0njllVdQFIV//OMfAPzxxx88+OCD\nTJgwgYULF5Kamsr8+fNrxZmRkcGUKVOIjo7GZDKxbt06pk+fzrp164iKimqZH5YQQjQ1w1E49bFj\n5UKAwARbXYIWHFx4MS5JDF5++WW8vLz46quv8PDwYPjw4Tz++OMMGzaMb7/9ln/961+89NJLrgjN\nOdnfQeZasFa3/HOr3aHztRB+ZYMetnjxYoYMGcILL7wAwKhRowB45ZVXmDdvnn2/O++8k+uvv95+\nf+7cuQwZMsT+Id6/f382btzI1q1bufXWW1EUhf/85z9MmTKFf/3rX/bH6XQ6Fi1axNy5cwkICODN\nN9+ka9euvPrqq6hUKkaNGoXZbK51ns9dYttqtTJixAj279/P119/LctvCyHaHlOxrSZB0XmLCXqE\nQcwt4NfLNXFdgEv6LPbu3cu0adOIiIhArbaFoCi2qk7XXHMN1157LS+++KIrQnNOzneuSQrA9rw5\n3zXoIRaLhYMHD3L11Vc7tE+cOBGr1crvv/9ubxs2bJj9+zPTSBMTE+1tvr6+BAQEkJubC8CJEyfI\nysri6quvpqamxv6VmJhIdXU1R48eBeDAgQOMHTvWYfGscePG1Yr1+PHj3HvvvQwfPpzevXvTt29f\nTpw4wcmTJxv0moUQwqWsZsj6Fvb/0zEpUOsg8gaIf7JVJgXgoh4Dq9VKcHAwAHq9Ho1GQ0lJiX17\nz549+eKLL1wRmnPCrnRtj0FYw3oLiouLMZvN9p/5GWful5aWotPpANsH/xlnxgfo9XqHx+l0Okwm\nk/3YYOtZqEt2djZgG1MSGBjosO38+0ajkTvvvJOgoCAee+wxIiIicHd3Z+HChfbnE0KIVk1RoDgZ\n0j+H6vMq/AYOhui/gYLU7AEAACAASURBVC7ANbE5ySWJQWRkJBkZtussarWayMhIdu3axcSJEwFb\nj8K5H1CtTviVDe7Kd6WAgAC0Wi2FhYUO7WfKUvv5+TW6BLW/v+262DPPPEPv3r1rbY+MjAQgJCSE\noqIih23n309OTiYnJ4d33nmHrl272tvLysoQQohWryLDVrWw7Ihju2dniLkZ9D1cE1cDueRSwsiR\nI9mwYYP9/i233MJnn33GrFmzmDlzJl999VWtUe+i8TQaDX379nX4mYNtloBarWbgwIGNPnZsbCyh\noaFkZmbSr1+/Wl8BAbbMOD4+nu+//95+yQhg69atDseqqrKN0j3TewG2JDEzM7PR8QkhRLMzG+DE\nh3DgfxyTAo23bRxB/MI2kxSAi3oM7rnnHiZNmoTZbEar1TJz5kwqKirYtGkTarWaefPmcffdd7si\ntHYrKSmJ2bNns2DBAiZOnMiRI0d47bXXmDp16iXNAFGr1Tz22GM8+uijGI1GRo0ahVarJT09nc2b\nN7N48WI8PT2ZM2cON910E/Pnz+eGG24gNTWVzz77zH4MgMsuuwwvLy+efPJJ7rrrLnJycliyZAmh\noc2zgpgQQlwSqxlyNkPWBsfph6htUw87TwY3b1dF12guSQz8/Pzw8/Oz31epVMybN89hdLxoWiNH\njuTVV19l2bJlrF27lsDAQO68806SkpIu+dgTJ07E29ubFStW8MUXX6BWq4mKimLMmDH2cQr9+vXj\n5Zdf5tVXX2XLli3Ex8fzr3/9izvuuAMfHx/ANubhtdde48UXX2TevHnExMTw9NNP89Zbb11yjEII\n0WTOLHaUvhpMjpdE8etrm37oGe6a2JqASjm3b7cFVFZWcvnll3P//fdzzz33NNlxa2pqeOedd/j8\n88/JysoiMDCQq6++mscff/yCj8vIyGD8+PFs2bLFfj1ctIyvv/6aRx99lM2bN0uNAiFE22A4YhtY\nWH7Ksd0j3LYCol/fFlkB8VJc7HOvxXsMPD09CQoKwtu7abtXHnvsMX7++Wfuu+8+4uLiyM7O5vjx\n4036HOLSPPXUU4wYMQK9Xs/BgwdZtmwZY8aMkaRACNH6VWbbeghK9ju2u/lC5F9PL4ns+qqFTcEl\nlxKmTJnCmjVr+P/s3Xd4VGX6//H3zGTSM+khhISQEEogEEqAgAISRAIiIguWRVfcXdR1ZVnFLa5l\nV1HXtrtfGwquPyzYWCkq0kGqCAgC0gkBQgKkkDIpk2Ta74+TDIypkGROyv26Lq6Qc545cw+T8uE5\nT7nzzjudlsy9Vlu3bmX16tV8+eWXxMXFNUOFoiUUFhbyzDPPUFhYSEBAABMmTODPf/6z2mUJIUTd\nKguV6em5O4ArOtg1eghPgc4TwM1LtfJagirBoG/fvnz77bfccsstTJ06lcjISDw8PGq0Gzt2bKOu\nt3TpUpKTkyUUtHKvvfaa2iUIIUTjWMrgwhq4uMl5O2Q0EDxM2f2wla9HcK1UCQZ//OMfHX//97//\nXWsbjUbD0aNHG3W9gwcPkpKSwrPPPsuKFSuwWq2MHDmSp556Ska0CyGEaDxrJeRsVlYttJY5nzPE\nQ9QvwKd93/5UJRh8+OGHzXq93Nxcli1bRu/evfnPf/5DaWkpr7zyCg8//DBLlixxWoZXCCGEqMFm\nhbwdkLUSzEXO53yiIfI28K+5iFt7pEowGDp0aItcd/78+Y4FdUJDQ7n77rv5/vvvndb/F0IIIRzs\nNrj0A2R9BRW5zuc8QiFyCgQNbvUzDZqTKsGguRkMBqKiohyhAGDw4MHo9XrS0tIkGAghhHBWvadB\n1ldgOu98Tu+vLE4UMgK07eLX5FVxydyKBx980GkHv8bau3dvo9Y66N69O3Utx1C9qp4QQgiB3Q6F\nh+DwC5D2jnMo0HkrOx/2fw7CRnXIUAAu6jEIDQ3lnnvuISYmhgkTJjB8+HDi4+Px9PR0amcymTh8\n+DA7d+5kzZo1nD17lqlTpzZ4/RtuuIE33niD/Px8x459e/bswWw206tXrxZ5TUIIIdoQux2KjihT\nD0tPO5/TekD4WGXnWjdvdeprRVy28mFGRgYffvghK1eupKioCK1WS2BgIP7+/tjtdoxGIwUFBdhs\nNvz9/Zk0aRL33ntvoxa/KSkpYdKkSXTq1IkHHniA0tJSXn31VWJjY1m0aFG9j5WVD4UQoh2z28F4\nTAkEJT9b9E6jh05joPN40PuqU58KGvq95/Ilkc1mM3v37mX//v2kp6dTWFgIKNv3xsbGMmDAAMf4\ngKtx9uxZnnvuOfbs2YNer2fs2LE8/vjjTnsy1EaCgRBCtEOOQLASStKcz2ncIHQkREwA9/p/R7RH\nrW5JZL1eT3JyMsnJyc163ejoaN59991mvaYQQog2pvqWwfmVUJLufE6jqwoEqe12caLm0DFHVggh\nhGhf7HYo/AnOr6o5hkCjU2YYREwEjyB16mtDJBgIIYRou+x2KPhRCQRl55zPaXQQcp1yy0ACQaNJ\nMBBCCNH22G1waY+ydHH5BedzGjdlt0O5ZXBNJBgIIYRoO2wWyPsOLqyFijzncxq9sv5A55vAPUCd\n+toBCQZCCCFaP2s55GyDixvAXOh8TuuhTDsMvxH0furU146oEgzsdrtsbCSEEKJh5mLI3gTZm2vu\ndqjzgfAU6JQiCxM1I1WCwejRo7n55puZPHky8fEdY7cqIYQQV6E8Dy6uh9wdYDc7n9P7K7cLQkeC\nzkOd+toxVYLBkCFD+Oyzz3j//ffp3r07kydPZtKkSURERKhRjhBCiNai9CxcWAf5e4Gfrb/nEaYE\ngpBk0F7dInii8VQJBv/6178wmUysX7+elStX8vrrr/N///d/DBo0iMmTJ5OamorBYFCjNCGEEK5W\nvSjRxXXKaoU/591VmWEQOBA0sjFeS1Nt8KGXlxeTJ09m8uTJ5Ofns2rVKlauXMnTTz/Nc889x+jR\no5k8eTKjR4/G3d1drTKFEEK0FJsFLu1Wbhn8fOtjAEO8so+BoTfIuDSXaRWzEoKCgrj77rtJSkri\n7bffZu3ataxfv57169fj7+/PnXfeye9+97sauzEKIYRogyylkLMVsr8Fc9HPTmohOAnCbwKfhjfR\nE81P9WBw/vx5Vq5cyddff01aWhoGg4G77rqLKVOm4Obmxueff857773H6dOnef3119UuVwghxLUy\nZSvTDfN21hxQqPVQFiUKHwsewerUJwCVgkFBQQGrV69m5cqV/Pjjj7i5uXHDDTcwZ84cRo8e7bSz\n4rPPPktkZCTz589Xo1QhhBBNYbeD8Thkb4TCgzXP6/2h01gIGylTDlsJVYLByJEjsVgsDBgwgKef\nfpqJEyfWuz1yjx49CAqSda6FEKLNsJmrxg9sqH38gHeUsiBRUBJoVe+8FldQ5d144IEHmDx5MtHR\n0Y1qP2bMGMaMGdPCVQkhhGiyygLI3gK528BSUvO8fz/oPA78esqAwlZKlWCg0WioqKio8/zJkydZ\nu3YtDz/8sAurEkIIcU3sdihJV1YozN8H2JzPaz2UbY87jQGvTqqUKBpPlWDw1ltvER0dTc+ePWs9\nf/LkSd566y0JBkII0ZrZzMoOh9mbam55DOAerISB0Otk/EAbotpeCfUpLCyUtQuEEKK1qrgEOVsg\nZztYS2ue9+up7F8QmCgLErVBLgsGe/bsYdeuXY7P169fz9mzZ2u0Ky4uZtWqVXX2JgghhFCB3Q7G\no8pmRoUHqbFcsUYPwUOVTY28I9WoUDQTlwWDXbt28eabbwLKGIN169axbt26Gu00Gg09e/bkqaee\nclVpQggh6mIpg7zvlAGFFTk1z7sHQ6cbqm4X+Li8PNH8XBYM7r//fu69917sdjtDhw5l3rx5pKam\nOrXRaDR4eHg4rWMghBBCBSVnlNsFl/bUXIwIwNBHCQQB/eR2QTvjsmDg7u7uGDewceNGgoKC8PLy\nctXTCyGEaIi1QgkCuVuVXQ5/TuelzC4IGy2zC9oxVQYfdunSRY2nFUIIUZuyLGXvgrzvwVZe87x3\nlBIGgoeCzsP19QmXckkwSElJQavVsnr1avR6PSkpKWgaWNhCo9GwYcMGV5QnhBAdj7US8vcqvQMl\n6TXPa9yUVQk73QA+3WQxog7EJcFg6NChaDQatFqt0+dCCCFcrCwLcrbBpe/Baqp53rMThI2CkOEy\nmLCDckkwePHFF+v9XAghRAtyjB3YBqVnap7X6CBwoBIIZKniDk92rhBCiPbIblcGEOZuVzYzstWy\nDL1HmLKrYchw0Pu5vkbRKqkSDBYsWMDmzZv59NNPaz1/1113ceONN/Kb3/zGxZUJIUQbZylVBhHm\nbq99V0ONGwQOgNCRYOglvQOiBlWCwVdffcWoUaPqPD9o0CBWrFhxzcEgOzub1NRUysrK2LdvHz4+\ncp9MCNGO2W1QdFRZiKhgP9gtNdt4doaw6yE4GfS+rq9RtBmqBIPMzExiYmLqPN+tWzc++eSTa77+\nyy+/jLe3N2VlZdd8DSGEaPXK8yBvB+TtVLY7/jmtuzKzIPR68I2V3gHRKKoEAy8vLy5evFjn+ays\nrGveRGnPnj1s27aNBx54gJdffvlaSxRCiNbJWqFMM8z7DopP1t7Gp5sSBoKHgM7TpeWJtk+VYDB0\n6FA+//xz7rzzTsLCwpzOZWdns2TJEpKSkq76ularlXnz5vHQQw9hMBiaq1whhFCX3Q7FaUoYyN9b\n+0BCNz8IGQYh14F3hOtrFO2GKsFgzpw53H777UyaNInp06fTo0cPAE6cOMEXX3yBxWJhzpw5V33d\nzz77jMrKSmbMmMHXX3/d3GULIYRrlecp6w3k7YSKvFoaaCEgQVmmOKAfaGWimWg6Vb6KunfvzuLF\ni5k3bx7vvfee07nBgwfzxBNPXPW2ywUFBbz22mu88sorsgmTEKLtspZX3SrYWfetAs/OEDoCgoeB\nu79r6xPtnmrxMj4+nk8++YT8/HwyMzMBiIyMJCgo6Jqu95///IfExERGjx7dnGUKIUTLc8wq2Fk1\nq6CW3Qx13sqYgZDhskSxaFGq9zsFBQVdcxiodvLkSZYtW8bixYsxGo0AmEzKUp8lJSXodDo8PWUA\njhCiFbHboSxTuVVwaTeYjbU00oJ/HyUMBCaCVnpDRctTLRgUFBSwcOFCtmzZwvnzyiIcERER3HDD\nDcyaNYvAwMBGX+vs2bOYzWbuuOOOGudGjRrFtGnTeP7555utdiGEuGaVBZC3WwkEtS1ABOAVCaHD\nld0M9TKQWriWausY/PKXvyQnJ4cBAwaQmJgIwOnTp/l//+//8c033/DJJ580envmQYMG8eGHHzod\n27ZtG++++y4LFy4kKiqq2V+DEEI0msUEBfsgbxcUnwDsNdvoDUoQCE4GH/mZJdSjSjB45ZVXMJlM\nfP75545QUO3gwYP89re/5ZVXXuH//u//GnW9oKAghg0b5nQsKysLgKSkJFn5UAjhejYLFB1SwkDh\nwdpXI9ToIWigEgb840GjdX2dQvyMKsFg586d3HvvvTVCAUD//v255557+Oijj1SoTAghmsBuU9Yb\nuLRbmVlgrW31VQ0YekNIsrJngSxAJFoZVYJBZWUlvr51r9Xt5+dHZWVlk55j6tSpTJ06tUnXEEKI\nBtntUJahbGt8aQ+YC2tv5x2lTC8MHgLuAa6tUYiroEow6N27N0uXLmXatGk1AkJJSQlLly4lPj5e\njdKEEKJxTNlKz8Cl3VCRU3sb92Bl3EDIMPDq7Nr6hLhGqq18OGvWLCZMmMC0adPo1q0boAw+XLZs\nGfn5+bz77rtqlCaEEHWruKTcIri0G8rO1d7GzQ+CBiuBQDYuEm2QKsFg+PDhLFy4kJdffpm3337b\n6Vx8fDwvvfQSw4cPV6M0IYRwVlmkzCi4tAdKTtXeRusBgQOV2wSGeNDqXFujEM1ItXUMRowYwYoV\nK8jNzXVaxyA0NFStkoQQQmEuuRwGik9S6/RCjZuyP0Hw0Kp9CmTxIdE+qL7yYWhoqIQBIYT6LKXK\ncsSXfgDjMcBWS6OqlQiDh0BAIrh5ubpKIVqcS4LBihUrrulxU6ZMaeZKhBDiCpYyJQzk/6DsVVBr\nGNCAX08IToLAQaCve0aVEO2BS4LBX//616t+jEajkWAghGh+jjCwF4xHwW6tvZ1vd6VnIHCQ7GAo\nOhSXBIONGze64mmEEKJ2llIoONCIMBCrzCgIGgzujd+vRYj2xCXBoLF7HgghRLMxlyg9AwX76rlN\ngLKFcXUY8Ah2ZYVCtEqqDj48ffo0u3fvJj8/n1tuuYXIyEgqKyvJzs6mU6dOuLu7q1meEKKtMRuv\nuE1wgrrDQDQEJUkYEKIWqgQDq9XKU089xfLly7Hb7Wg0GgYMGEBkZCQWi4XbbruNBx54gFmzZqlR\nnhCiLaksgPx9UPCjsk9BbVMLQXoGhGgkVYLBW2+9xYoVK3j00UdJTk5m+vTpjnPe3t6kpqayYcMG\nCQZCiNqV50D+j8ptgtIzdbfz7Q5Bg5TFhyQMCNEoqgSDFStWMH36dGbNmkVBQUGN83FxcWzYsEGF\nyoQQrZLdDqasqtsE+5S/10oDfnFKr0DgQNmsSIhroEowyM3NJSEhoc7zer2esrLatisVQnQYdjuU\nnq7qGfgRKnLraKgFQ6+qnoEBoDe4tEwh2htVgkGnTp04c+ZMnef3799P165dXVeQEKJ1sFmg+IQS\nBgoPgLmo9nYaN/Dvq/QKBPYHNx/X1ilEO6ZKMLj55ptZvHgxqampREZGAsqCRqDcZvjmm2/44x//\nqEZpQghXs1ZA0WHlNkHhQbCaam+n9VD2JAgcCAEJoPN0bZ1CdBCqBIOHHnqIAwcOcNddd9GjRw80\nGg0vv/wyRUVFnD9/nuuuu45f//rXapQmhHAFsxEKDiphwHgU7Jba27n5KnsSBA0EQ2/ZqEgIF1Al\nGHh4eLBo0SK+/PJL1q1bR2VlJSaTibi4OH7/+98zZcoUtFqtGqUJIVqKKVu5PVCwH0rSqXNaoXuw\nMlYgcCD4dQeN/CwQwpVUW+Coei8E2Q9BiHaqevBgwX5lOeLyi3W39YqsCgOJ4B0FVbcWhRCup0ow\neOqpp5g4cSLJycmOsQVCiHbAZlaWHy48WDV40FhHw6pphYEDIGAAeIa4tEwhRN1UCQarV6/miy++\nICgoiPHjx5OamsrQoUPVKEUI0VRmIxT+pPQKFB0Bu7n2dho9+PepCgP9ZftiIVopVYLBzp072bZt\nG6tXr+arr77i008/JSQkhNTUVCZOnMjAgQPVKEsI0Rh2O5guKD0ChQeh5DR1jhdw81NCQGAiGOJB\nJ/ufCNHaqRIM9Ho9KSkppKSkUFlZydatW1mzZg3Lli1j8eLFhIeHk5qayl/+8hc1yhNC/JzNAsUn\nq24RHISKvLrbeoYrQSAgEXxjZPCgEG2MqrsrAri7u3PjjTdy4403UllZydKlS3n11Vd5//33JRgI\noSZzCRQdqgoDh8FWXkfDqvECAf2VMODVyaVlCiGal+rBACA/P5+1a9eyevVq9u7di9VqrXfJZCFE\nC3DcIvhJuU1Q35RCrecV4wUSZOVBIdoR1YJBYWEh69atY/Xq1ezZsweLxUJ8fDxz5sxhwoQJREVF\nqVWaEB2HzQzGE1Vh4CBUXqq7rXvw5fECfj1A2yr+XyGEaGaqfGf/5je/YdeuXVgsFnr27MnDDz/M\nhAkTiI6OVqMcITqWysKqIPCTsuqgrbKOhhrwja26RdAfvDrL+gJCdACqBIPs7GwefPBBJk6cSGxs\nrBolCNFx2G1QeuZyGCg7V3dbrScE9FWCgH9f0Pu5rEwhROugSjBYuXKlGk8rRMdhKVXWFCj8CQoP\ngbW07raenZTNiQL6g28caHWuq1MI0eq0i5uEq1ev5ssvv+Tw4cOUlJQQExPDr3/9ayZNmqR2aUK4\nht0OpqzLvQL1DRzU6JQxAgH9lUDgGebSUoUQrVu7CAbvv/8+kZGRPP744wQGBrJ161bmzp1LQUEB\n99xzj9rlCdEyrOXK8sNFh5ReAXNh3W31BvDvpwQB/3jZslgIUad2EQzefvttgoKCHJ8PHz6cnJwc\nFi1aJMFAtB/V0wmrg0BJGtitdTTWgE83ZSphQD/w7ioDB4UQjdIugsGVoaBafHw8a9euVaEaIZqR\ntRyMx5XbA0WHoTK/7rY6b2XAYECCDBwUQlwzlwcDq9VKdnY23t7eBAQEtNjz7N+/n5iYmBa7vhAt\n4spegaLDyjLEdfYKoGxR7F/VKyDLDwshmoHLg4HNZmPcuHH86U9/YubMmS3yHDt37mTDhg288MIL\nLXJ9IZqVY6zAYSUQVBbU3bZ6xcHqXgH3lgvXQoiOyeXBQK/XEx4ejs1ma5HrZ2ZmMnfuXMaOHcvU\nqVNb5DmEaBK7Hcoyr+gVOAXU8/3gFamsLeCfAL7dZTqhEKJFqTLG4O677+bzzz9n2rRpGAyGZrtu\nYWEhs2bNIiIigldffbXZritEk5lLlFUGCw+B8QiYjXW31XkpWxRLr4AQQgWqBAOtVoubmxvjxo0j\nNTWVLl264OnpPH1Ko9Fc1YwCk8nEgw8+iNlsZsGCBXh5eTV32UI0nt0GJaerbg8chtKz1LmuACiz\nBqqDgG+sjBUQQqhGlWDwz3/+0/H3zz//vNY2VxMMLBYLc+bM4cyZM3z22WcEBwc3S51CXJXKAmV7\n4qLDYDwG1rK62+p8rhgr0EdZZ0AIIVoBVYLBxo0bm/V6zzzzDFu2bOGJJ56gsLCQ/fv3O8716dMH\nd3f3Zn0+IQCwViqzBooOK8sPl1+op7FGmTXgXzVWwKer9AoIIVolVYJBly5dmvV6O3bsAOD555+v\ncW7jxo1ERkY26/OJDspuB9P5y0Gg+CTYLXW31wdUrSvQVxkz4ObtulqFEOIatYsFjjZt2qR2CaK9\nMhcrUwmNR5QwYC6qu63GDfx6VgWBPrJNsRCiTVItGBw7dozFixdz5MgRiouLa0xf1Gg0bNiwQaXq\nRIdls0DJKSUEFB2uf4tiAM/OyhgB/77KxkQ6uW0lhGjbVAkGu3bt4re//S3+/v4kJCRw5MgRkpOT\nqaioYP/+/cTFxZGQkKBGaaKjsduh/GJVEDgCxSfAVll3e523sgmRf18lELgHuq5WIYRwAVWCweuv\nv05UVBRLliyhsrKSESNG8MADDzB8+HAOHDjArFmzeOyxx9QoTXQE5mJl1kB1GKhvV0K0yvTB6jDg\nEy2DBoUQ7ZoqweDIkSPMnj0bX19fioqUe7bVtxISExO54447eO211xg9erQa5Yn2xmZWVhesHifQ\n0O0Bj7DLQcDQS7YoFkJ0KKoEA51Oh4+PDwAGgwE3NzcuXbrkOB8VFcWpU6fUKE20B3Y7mLKqegSO\nVs0eMNfdXucFht7KrQFDH/AMcV2tQgjRyqgSDLp27cqZM2cAZZBhbGwsGzZsYPLkyQBs3ryZkBD5\n4SyuQmWhEgSMR5UwYCmup7G2ak2BPsofn25ye0AIIaqoEgxGjx7N0qVLmTt3Lm5ubtx33308/vjj\n3HTTTQBkZGTw6KOPqlGaaCus5WA8cTkI1Lu4EFW3B6qCgF9PcJMls4UQojaqBIOHHnqIX/3qV+h0\nyi5xt912G1qtlnXr1qHT6XjwwQdlZ0ThzGaF0jOXg0BJOvXuSKjzUcYJGOKVjx6yTLYQQjSGKsFA\nr9cTGOg8zevWW2/l1ltvVaMc0RpVTyM0HqtaYOg42Mrrbq9xA784ZYyAf29lUyJZXEgIIa5au1j5\nULQTlUWXewSMxxqYRgh4R13uEfDrAVq9a+oUQoh2zCXB4Fe/+tVVP0aj0fDBBx+0QDWi1bjacQLu\ngVU9AvHKLAK9n2vqFEKIDsQlwcBur2cf+mZ8jGjlbBYoOa0EAeMx5e/1jhPwUtYRMMQrgwY9QuX2\ngBBCtDCXBIOPPvrIFU8jWhu7HcoylRBgPNbwcsMaN/DtfnnQoGxNLIQQLidjDETzKs+73CNgPAaW\nkvrbXzlOwDdONiESQgiVqRIM9uzZ06h2Q4YMaeFKRJOZjcqMgeoBg5WX6m/vEaIEAUNv5TaBjBMQ\nQohWRZVgcM8996BpxL3io0ePuqAacVUcAwaregRMWfW3d/OrCgFVf2S5YSGEaNVUCQYffvhhjWNW\nq5WsrCyWLFmCzWZj7ty5KlQmarCZlcWEqoNAyRnqHTCo9VCmDlbPHPDqIgMGhRCiDVElGAwdOrTO\nc1OnTuWXv/wlu3fvZvjw4S6sSgBgt0FpxhUDBtPq34BIo1O2Ja7uEfDpBloZuiKEEG1Vq/sJrtVq\nufnmm1mwYAFz5sxRu5z27+crDBafAKupngdowDuyKgjEK6sN6jxcVq4QQoiW1eqCAUBRURHFxfXt\njieapOLS5R4B4zFlAGF9PMKqtiWOVwYMuvm4pk4hhBAup0owOH/+fK3HjUYjP/zwA++99x5JSUku\nrqodq545UB0EKvLqb68PuDxrwD9eWXFQCCFEh6BKMEhJSalzVoLdbmfAgAE888wzLq6qHbGUQfHJ\nK2YO1B7EHHTeVSsMVs8c6CQDBoUQooNSJRi88MILNYKBRqPBYDDQtWtX4uLi1Cir7bJWQsmpy0Gg\n9CxQz5LSWndl5kB1r4B3lKwwKIQQAlApGEydOlWNp20/qvccKK66PVCSDnZr3e1l5oAQQohGkt8O\nbYHdBmXnoOiYEgaKT9a/5wAaZZ+B6iDg211mDgghhGgUVYJBQ9swazQaPDw8CA8PZ9iwYYwfPx43\ntw6UYex2MF1QQkCjphACXhHg1wv8e4NfT3Dzdk2tQggh2hVVftva7Xays7PJyMjA39+fLl26AJCV\nlUVRURHR0dH4+vpy4MABlixZwsKFC1m0aBFBQUFqlNvy7HaoyK2aOVB1e8DSwHRNjxClN6A6DOgN\nrqlVCCFEu6ZKMJgzZw6///3vefHFF7nlllvQ6XSAsizyV199xUsvvcRLL71EYmIiy5cv56mnnuI/\n//kP8+bNU6PccDRuvQAAIABJREFUllFZ4DyFsLKg/vZ6/8uDBQ29wSPYNXUKIYToUFQJBi+//DJT\np05lypQpTsd1Oh233XYbJ06c4J///Ceff/45U6dOZf/+/WzatEmNUpuPudi5R6Aip/72Op+fTSEM\nkymEQgghWpwqweD48ePceuutdZ6PjIzkk08+cXzet29fli9fXu8109LSmDdvHvv378fPz4/p06fz\n8MMPO3ojXM5pLYHjDe9CeOXmQ369lGWHJQgIIYRwMVWCQWhoKOvWreOuu+5Cq3WeP2+z2VizZg0h\nIZe35y0sLMTf37/O6xUVFTFz5kzi4uKYP38+GRkZvPTSS9hsNh555JEWex1OrBXKhkPVUwhLM6h3\nLQGNHvy6X7GWQDRoVQoxQgghRBVVgsF9993HvHnzmDFjBnfccQdRUVEAZGRk8Pnnn3PgwAGefPJJ\nR/u1a9fSr1+/Oq/32WefUVFRwZtvvomvry/XXXcdJSUlvPnmm8yaNQtfX9/mfxGO7Yir1xI4Tb3b\nEWt04BNzOQj4xoBW3/x1CSGEEE2gSjCYMWMGGo2G119/nb/+9a+OVRDtdjsBAQE8+eSTzJgxA4DK\nykr+9Kc/ERkZWef1tm7dyvXXX+8UAG6++WZeffVVdu/eTUpKStOLtlmh7OwVawmkgd1SzwM04BN9\neZyArCUghBCiDVBtcYBf/vKXTJ8+nUOHDjk2VYqIiCAhIQG9/vL/pN3d3Rk+fHi910pPTyc5Odnp\nWEREBF5eXqSnpzctGJScgayvqxYVqqi/rVeXyz0Cfj1kLQEhhBBtjqqrBun1egYOHMjAgQObdB2j\n0Yifn1+N4waDAaOxgS2F62O3w/HXwFpW+3nPTspAQUPVH33NGoQQQoi2RNVgkJaWxrlz5ygqKqr1\n/M+nM6rCPQhMZZf/Xj190NBTtiMWQgjR7qgSDDIyMvjTn/7EwYMHsdtrH7mv0WgaHQwMBgMlJSU1\njhuNRgyGJqwIqNFA/KPKboUeYcqiQjKFUAghRDumSjB4+umnOXHiBH/7299ISkpq2i9vIDY2lvT0\ndKdjFy5cwGQyERsbW+9jrVZlV8KLFy/W08oAxeVAA2sRCCGEEK1c9e+76t9/P6dKMNi3bx/3338/\n99xzT7Ncb9SoUbz33nuUlJQ4ZiasWrUKT09Phg4dWu9jc3NzARyzIIQQQoiOIDc3l+jo6BrHVQkG\nAQEB9S5YdLXuvPNOPvroI2bPns2sWbM4d+4cb775JjNnzmxwDYOEhAQ+/vhjQkND1VslUQghhHAR\nq9VKbm4uCQkJtZ7X2Ou6yd+C3nrrLTZv3sxnn33WbL+M09LSePbZZ9m/fz8Gg4Fp06Yxe/Zs+WUv\nhBBCXAVVgsH69et5++23sVgsTJs2jc6dO9dYGhlg7Nixri5NCCGE6NBUCQa9e/dusI1Go+Ho0aMu\nqEYIIYQQ1VQZY/Dhhx+q8bRCCCGEaIAqPQaNUVlZibu7u9plCCGEEB2Kqisf/pzdbuf777/nq6++\nYsOGDezZs0fVetLS0pg3bx779+/Hz8+P6dOn8/DDD7f5AY2rV6/myy+/5PDhw5SUlBATE8Ovf/1r\nJk2a5Ghzzz33sHv37hqPPXjwIB4ebWczqGXLlvH444/XOP6Pf/yDu+66C1C+7hYsWMCnn35KQUEB\n/fr148knnyQ+Pt7V5TZZXe8bKLuQDhw4kJSUFLKynNfkCAkJYceOHa4o8ZqdPXuW9957jx9//JG0\ntDSSkpL46KOPnNo09r1sC9/bDb3enJwcFi1axI4dOzh37hwGg4Hk5GQeffRROnXq5Gi3a9cufvWr\nX9W4/qxZs3jsscdc8loaozHvb2O/dlv7+9vQa63rPQO4/vrree+994DG/Xy7Fq0iGPz000+sXLmS\nVatWkZeXh4eHR4MbJ7W0oqIiZs6cSVxcHPPnzycjI4OXXnoJm83GI488omptTfX+++8TGRnJ448/\nTmBgIFu3bmXu3LkUFBQ4rS0xbNgwHn30UafHttVenA8++ABPT0/H59VbfQMsXLiQ+fPn8+c//5nY\n2FgWLVrEzJkzWblyJaGhoWqUe83+/ve/11gF9PXXX+fIkSNOW5dPmjTJ6b2+cuOy1urkyZNs2bKF\nxMRELJbadzZtzHvZVr63G3q9hw8fZsOGDUyfPp3+/ftz6dIl3njjDe666y6+/vprfHx8nNq/+uqr\nTl/3V4aH1qAx7y80/LXbFt7fhl5r3759+fzzz52OnT9/nkceeYSRI0fWaF/fz7drYlfJmTNn7G+8\n8Yb9pptusvfu3dveu3dv++9+9zv75s2b7eXl5WqV5fDOO+/Yk5KS7MXFxY5jCxcutPfv39/pWFt0\n6dKlGsceffRR+5gxYxyf33333fbZs2e7sqwWsXTpUnvPnj3tJSUltZ4vLy+3Dxo0yP7GG284jpWW\nltqHDRtm//e//+2qMltMRUWFfciQIfann37acWzMmDH2F198UcWqro3VanX8ffbs2fa7777b6Xxj\n38u28r3d0OstKiqym81mp2Pp6en2nj172pctW+Y49v3339t79uxpP378eMsW3EQNvV67vXFfu23h\n/W3Ma/25d9991967d2/7xYsXHcca+vl2rWrOEWxBeXl5fPDBB0ybNo3U1FQ++ugjhgwZwrPPPovd\nbmfKlCmMHj26VXRVb926leuvv95pgaSbb76Z8vLyOrtq24qgoKAax+Lj48nJyVGhGnXt27ePkpIS\nJkyY4Djm7e3NmDFj2LZtm4qVNY9t27ZRVFTkdJuoraptSvOVGvtetpXv7YZer8FgwM3NudM3JiYG\nLy+vNvm93NDrbay28P5ey2v95ptvGDJkiEt6elwWDO677z5Gjx7N66+/TmxsLO+88w47duzgueee\nY9iwYa4qo9HS09Nr7LMQERGBl5dXjX0Z2oP9+/cTExPjdGz79u0kJiaSmJjIb37zG44dO6ZSdU03\nbtw4+vTpw/jx4/nss88cx9PT09HpdHTr1s2pfffu3dvF+7xq1SrCw8NJSkpyOv7FF1+QkJDA4MGD\n+cMf/lDjvm1b1Nj3sj1/bx87dgyTyVTj3wDg3nvvJT4+npSUFObPn1/nOvmtXUNfu+3x/T19+jRH\njhypM+DX9fPtWrlsjMHOnTuJjIzkqaeeYtSoUWha+S6FRqMRPz+/GscNBgNGo1GFilrOzp072bBh\nAy+88ILj2JAhQ5gyZQrR0dFkZWXxzjvvMGPGDL788ksiIyNVrPbqhIaGMmfOHPr374/VamXVqlX8\n/e9/p7y8nJkzZ2I0GvH29q4xKMnf3x+TydSmZ8eYTCY2bdrEHXfc4fT9lpKSwoABAwgPD+fUqVO8\n+eabzJgxg6+//rrWr/m2orHvZXv93rbZbDz//PN069aNlJQUx3E/Pz/uv/9+kpKS0Ov1fPvtt7zx\nxhvk5+fz5JNPqljx1WvM1257fH+/+eYb9Ho9N910k9Pxhn6+XSuXBYPHHnuMlStX8uCDDxIcHExq\naioTJkxg8ODBripB1CIzM5O5c+cyduxYpk6d6jj+hz/8wfH3pKQkRowYwYQJE/jggw944okn1Cj1\nmowcOdJpsM7o0aOpqKjg7bffrnPUb3vx7bffUlZWxs033+x0/MpfBklJSQwcOJApU6awdOnSJv0w\nEer617/+xf79+1m8eLHTgLw+ffrQp08fx+cjRozA3d2d999/n4ceeqjWW4utVUf92l21ahXXXXcd\nAQEBTscb+vl2rbdnXHYr4be//S0rVqzg66+/5he/+AWbN29mxowZ3HDDDbz55ptoNJpW1YtgMBhq\njO4GJY02dZvo1qKwsJBZs2YRERHBq6++Wm/b0NBQBg0axJEjR1xUXcsZP348hYWFZGVlYTAYKCsr\nq9GtWlRUhJeXV5vtLQDlfxnR0dFOsxFq07NnT2JiYtr8e9vY97I9fm9//PHHvPfee7z00kskJiY2\n2H78+PFYLBaOHz/ugupaTm1fu+3t/T127BinTp2qEfDrcuXPt2vl0sGHAHFxcTzyyCNs2LCBTz75\nhJSUFLZv347dbueFF15g3rx5bNu2jcrKSleX5iQ2NrbG/agLFy5gMplq3L9qi0wmEw8++CBms5kF\nCxbg5eXV4GNaW3i7Vle+htjYWKxWK2fPnnVqU9t9yrakuLiYrVu3NvqHSXt4bxv7Xra37+21a9fy\n3HPP8ac//YmJEyc26jHV73Vbf8+h5tdue3t/v/nmGzw9PRu9d1BzvKcuDwZXGjRoEE8//TTbtm1j\n4cKFDB48mOXLlzNr1iySk5PVLI1Ro0axfft2p+S5atUqPD09GTp0qIqVNZ3FYmHOnDmcOXOG//73\nvwQHBzf4mNzcXPbu3Uvfvn1dUGHLWrt2LYGBgXTp0oVBgwbh6+vLmjVrHOdNJhPffvttrfOF24r1\n69dTWVnZqNkIJ06cID09vc2/t419L9vT9/auXbt47LHHuPvuu/nNb37T6MetXbsWNzc3evXq1YLV\ntbzavnbb0/sLSjAYM2ZMjXUp6nLlz7dr1SoWONLpdIwaNYpRo0ZRXl7Ohg0bWLlypao13XnnnXz0\n0UfMnj2bWbNmce7cOd58801mzpzpNA2mLXrmmWfYsmULTzzxBIWFhezfv99xrk+fPqSnp/Pvf/+b\n1NRUIiIiuHDhAgsWLECr1XLvvfeqWPnVmz17Nv369aNXr17YbDZWrVrFqlWrePLJJ9FqtXh4eHD/\n/fczf/58/P39HYvi2Gw2p0VU2ppvvvmG3r170717d6fjmzdv5quvvuKGG24gLCyM9PR03n77bTp3\n7uw0xqQ1MplMbNmyBYDs7GxKSkocIWD06NF4eXk16r1sK9/bDb3e8+fP8/vf/57Y2FgmTpzo9H0c\nFBRE165dAWXRq6CgIPr164der2fLli18/PHH3HvvvQQGBrr+hdWhode7a9euRn3ttoX3tzFfy6DM\nFsvKyuJvf/tbrddp6OfbtWq1eyW0BmlpaTz77LPs378fg8HAtGnTmD17dqtZVvNa1basaLWNGzei\n1+t58sknOXr0KIWFhfj4+DB06FD++Mc/1vhF09r9+9//Zu3atVy8eBG73U5cXBy/+tWvmDJliqON\n3W7nnXfe4dNPP6WwsJCEhASefPJJpwFbbUl+fj4jR45kzpw53H///U7njh07xj//+U+OHz9OcXEx\nAQEBjBw5kkceeaTVrYT3c5mZmXV2p27cuJHIyMhGv5dt4Xu7ode7e/fuWpfDBbjtttt48cUXAWXT\nuv/9739kZmZiNpuJjo5m+vTp3Hvvva3qVkJDr7ekpKTRX7ut/f1tzNcywPPPP8/y5cv57rvvah3v\n1Jifb9dCgoEQQgghHFQdYyCEEEKI1kWCgRBCCCEcJBgIIYQQwkGCgRBCCCEcJBgIIYQQwkGCgRBC\nCCEcJBgIIYQQwkGCgRBCCCEcJBgIIYQQwkGCgRBCCCEcJBgIIYQQwqFV7K6opvLycg4dOkRoaGir\n2WBDCCGEaClWq5Xc3FwSEhLw9PSscb7DB4NDhw4xY8YMtcsQQgghXOrjjz8mKSmpxvEOHwxCQ0MB\n5R8oPDy8xvl8Uz4Hsw9isVnQoGxRqtFo0KBBo9Gg1WgdH7Vo0Wl16DQ6tFotblo3tCgfdVodep0e\nN42b8lHrhpvWDXedO3qdHi3aVrUFqhBCiPbp4sWLzJgxw/H77+c6fDCovn0QHh7u2AO7ms1u462N\nb5Fvym/xOrQaLe46dzzdPHHXuePh5oGnm6fTHy83L7z0Xk4fvfXe+Lj7KB/1Puh1+havVQghRNtX\n1+3zDh8MGuKq/8Xb7DbKLeWUW8qbdB29To+P3gdfd1983JWPvu6++Ln7KR89/PBz98PgYcDgYcBb\n7y09FUIIIRwkGNRDq9Eyd/hcfjj/A2abGbvdDoAdO3a7HZvd5vhjx47VZsVqt2Kz27DYLFhtViw2\ni+OP2WbGbDU7fay0VlJhqcBmtzVLzWarmUJrIYXlhY1qr9Pq8HP3w9/TH38Pf6ePAZ4Bjj9+7n4S\nIIQQogOQYNCAYO9gxseNb/HnsdqsVFgrHEGh3FJOhVX5aDKbHL0JJosJk9lEmbmMMnMZJouJ0spS\nx+cWm+Wqn7ewvOEgodVoCfQKJNAzkECvQIK8gmr88dZ7N+WfQAghRCsgwaCV0Gl1eGu9m/TL1W63\nU2mtpNRcSkllCaWVysfiymKKK4qd/m6sMGKsMDb61oXNbuNS2SUulV2qs42X3otgr2CCvYMJ8Q4h\n2CuYUJ9QQrxDCPEOwV3nfs2vTQghhGtIMGhHNBoNHm4eeLh5EOQV1KjHmK1mjBVGiiqKKCovcvpY\nWF5IgamAwvJCysxlDV7LZDaRac4k05hZ63mDh4EwnzDCfMII9Ql1/D3MJwxPt5pzaYUQQrieBIMO\nTq/TE+yt/C+/PhWWCiUolBdQYCqgoLyAfFM++aZ8pSfBdAmz1VzvNap7KdLy02qcM3gY6OTbiU4+\nnQj3DaeTr/IxxDsErUYW6BRCCFeRYCAaxcPNQ/nF7dup1vN2u52SyhIumS6RV5bHpTLlY25ZruPz\n+gZYVoeGk5dOOh1307oR5hNGZ7/OdPbtTGe/zkT4RRDmE4abVr58hRCiuclPVtEsNBqNMhXSw49u\nAd1qnLfZbeSb8sktzSW3LJec0hyyS7LJKc0htywXq81a63UtNgvni89zvvi803GtRksn305E+EUQ\n4RdBF78udDF0IdQ7VGZPCCFEE0gwEC6h1WgdgxDjiXc6Vx0askuyuVhykezSqo8l2XXOlrDZbVwo\nvsCF4gvsZa/juLvOnQi/CCINkU5/vPReLfr6hBCivZBgIFR3ZWjoG9bX6ZzJbOJiyUUulCgh4ELJ\nBc4Xn69zdkSltZIzhWc4U3jG6XiIdwhR/lFEGaKI8o+iq39XAjwDWuolCSFEmyXBQLRqXnovYgJj\niAmMcTpeYalwhIQsYxZZxVlkGbMwVhhrvU5eWR55ZXn8eOFHxzGDh4Gu/l2JDogm2j+a6IBoCQtC\niA5PgoFokzzcPOgW0K3GeIbiimIyjZlkFWdxrugcmcZMLpRcqHUMg7HCyKGcQxzKOeQ45u/pT7R/\ntOPa3QK64ePu09IvRwghWg0JBqJd8fPwIz40nvjQy+MYLDYLF4ovcM54joyiDDKKMsg0ZlJhqajx\n+KLyIg6WH+Rg9kHHsTCfMLoFdCM2MJaYwBgiDZEyI0II0W7JTzfR7rlp3ZTxBf5RjIgaASiDF3NK\nc8goyuBs4VnOFp0loyij1rCQU5pDTmkOu7N2O64XHRBNbGAs3QO7ExsYi7+nv0tfkxCiY9iyZQsP\nPPAA69evJyoqynH83LlzjBs3jjfffJMbb7yxWZ9TgoHokLQaLeG+4YT7hjO0y1BACQvZJdmOwYtn\nCs9wzniuxm0Ii83CqfxTnMo/xXrWA8qeGt0DuxMXFEdcUBwRfhEybVII0WTXX389YWFhrFixgtmz\nZzuOL1++nODgYG644YZmf04JBkJU0Wq0ykJKfp0ZHjUcUELAuaJznCk8Q3pBOukF6eSV5dV4bPU+\nEtW9Cl56L7oHdqdHcA96BPUgOiBabj8IIa6aTqfjtttuY/ny5Tz88MNoNBrsdjsrVqxg8uTJuLk1\n/88V+UklRD3ctG6OWRFjYsYAygDH9IJ0ThWcIr0gnTOFZ2osB20ym5wGNup1emICYugZ3JMewT2I\nDYyVTaWEUMn6U+v5+sTXtd46bGkebh7c0vMWxnUf1+jHTJs2jQULFrBr1y6Sk5P5/vvvycrKYurU\nqS1SowQDIa6Sn4cfieGJJIYnAkqvQqYxk1P5p0jLTyMtP63GtEmz1cyJSyc4cekEoOym2S2gG72C\ne9ErpBfdA7uj1+ld/lqE6IjWp69XJRSAMtV6ffr6qwoGUVFRDB06lGXLlpGcnMyyZcvo378/PXr0\naJEaJRgI0URuWjfH1MaxsWOx2+3kluWSlp/GyUsnSctPI6c0x+kxVpvVMU5h1clVjp6J3iG96R3S\nm5iAGHRanUqvSIj2bVzsOFV7DMbFNj4UVJs+fTpPPfUUc+fOZf369fzlL39pgeoUGrvdbm+xq7cB\nmZmZjB07lo0bNxIZGal2OaKdKiwvJC0/zdFrcKH4Qr3tPdw86BHUg94hvYkPjaeLXxcZzChEB1ZR\nUcH1119Pjx49OHToENu3b8dgMFzTtRr6vSc9BkK4QIBnAEkRSSRFJAHKOIXqkHD80vEaQaHCUuE0\nRsHPw4/4EGV9hviQeAK9Al3+GoQQ6vHw8OCWW27h448/ZtKkSdccChpDgoEQKvDz8GNwxGAGRwwG\nlFUYj+cd51jeMY7lHasx86G4opjdWbsdsx4i/CLoE9qHPqF96BncU8YnCNEB3HjjjXz88cf84he/\naNHnkWAgRCtg8DAwpMsQhnQZAih7OxzLO8bR3KMczTtKaWWpU/vqrag3pG9Ar9PTM7gnfUP7khCW\nQJhPmNx2EKId2r59O126dCE5OblFn0eCgRCtUIh3CNd3vZ7ru16P3W4n05jJkdwjHMk9Qlp+Ghab\nxdHWbDVzOOcwh3MOs+TwEkK8Q0gIS6Bfp370Cu4lvQlCtHHp6emcOnWKTz/9lIcffhitVtuizyfB\nQIhWTqPROJZ0Hh83nkprJScuneBI7hEO5xzmYslFp/Z5ZXlsPrOZzWc2o9fp6RXci36d+tG/U3+C\nvIJUehVCiGv197//nQMHDpCSksI999zT4s8nwUCINsZd505CWAIJYQnQV1l18XDuYQ7lHOJY3jGn\nKVhmq9kxiPHTnz4l0hDpCAkxATFyy0GINuCjjz5y6fNJMBCijQv2DmZU9ChGRY/CYrOQlp/mCAM/\nn+2Qacwk05jJ6pOr8fPwo3+n/iR2SqR3SG883DxUegVCiNZEgoEQ7Yib1s2xSNK0PtPIK8vjp+yf\n+CnnJ47nHXcam1BcUcyOjB3syNiBXqcnPiSeAeED6N+pP34efiq+CiGEmiQYCNGOhXiHMCZmDGNi\nxlBhqeBo3lEOXDzATzk/UVxR7Ghntpo5mH2Qg9kH0Wg0xAXFMSB8AAPDBxLsHaziKxBCuJoEAyE6\nCA83DwaED2BA+ADsdjunC09zMPsgBy4e4HzxeUc7u93OyUsnOXnpJP87/D+i/KMY1HkQA8MH0tmv\ns4qvQAjhChIMhOiANBoNsYGxxAbGMqX3FHJKczhw8QD7L+7nVMEprlwp/VzROc4VnePLY1/S2a8z\nA8MHMjhisCzTLEQ7JcFACEGYTxjjuo9jXPdxGCuMHMw+yI8XfuRo3lGsNquj3YXiC1wovsCqk6sI\n8wlTVm/sPJhIQ6SEBCHaCQkGQggnBg+DY3Elk9nEoZxD7Luwj0M5h6i0Vjra5ZTmsPrkalafXE2o\nTyhJEUkSEoRoB1o0GFgsFjQaDTqdbB8rRFvkpfdyLNVcaa3kcM5h9l7Yy0/ZP1FuKXe0yy3NdYSE\nTr6dHBtGRfhFqFi9EOJaNGsw+OGHH9i4cSM//vgjaWlplJYq67v7+vrSvXt3Bg4cyNixY0lKSmrO\npxVCuIC7zp2BnQcysPNAzFYzR3KPsPfCXg5cPOAUErJLsvnmxDd8c+IbIvwiGNplKEO6DCHEO0TF\n6oUQjaWxXznK6BpYLBaWLFnC+++/T0ZGBv7+/vTt25fIyEj8/f2x2+0YjUYyMzM5fPgwRUVFREZG\nct9993H77bej11/dOu7Z2dmkpqZSVlbGvn378PHxAZSR1AsWLODTTz+loKCAfv368eSTTxIfH1/v\n9Rral1oIUb/qkPDD+R84kH3AaeXFK8UExjC0y1CSIpIweLTclrFCiPo19HuvyT0G48aNw2w2c9tt\nt5Gamkrfvn3rbX/o0CHWrFnD22+/zXvvvcemTZuu6vlefvllvL29KSsrczq+cOFC5s+fz5///Gdi\nY2NZtGgRM2fOZOXKlYSGhl716xJCNI5epycxPJHE8EQqrZUcyjnEnqw9/JTzE2ar2dHudMFpThec\nZsnhJcSHxDMschgDwgfg6eapYvVCiJ9rcjB46KGHuPXWW3F3d29U+4SEBBISEvjDH/7Al19+eVXP\ntWfPHrZt28YDDzzAyy+/7DheUVHBwoULuf/++7n77rsBGDBgACkpKSxevJhHHnnkqp5HCHFt3HXu\nDOo8iEGdB1FuKefAxQPsOb+HwzmHsdltgNK7V71TpF6nZ0D4AIZ1GUaf0D7otDIeSQi1NTkYTJ8+\n/Zoe5+7uflWPtVqtzJs3j4ceegiDwbkbct++fZSUlDBhwgTHMW9vb8aMGcO2bdskGAihAk83T4ZF\nDmNY5DBKK0vZd2Efu7J2cfLSSUcbs9XMnqw97Mnag5+HH0MihpAcmUxX/64ys0EIlbSZ6YqfffYZ\nlZWVzJgxg6+//trpXHp6Ojqdjm7dujkd7969O6tXr3ZhlUKI2vi4+zAyeiQjo0eSb8pnT9YedmXt\nIsuY5WhTXFHMptOb2HR6E539OjM8cjjDIocR4BmgYuVCdDwtEgxMJhPr168nMzMTo9HIz8c3ajQa\n/vrXvzb6egUFBbz22mu88sortQ5WNBqNeHt715gW6e/vj8lkorKystG3OoQQLSvIK4jxceMZHzee\nTGMmuzJ3sTtrN4XlhY42F4ovsOzoMpYfW058SDwjokYwIHwAet3VDVYWQly9Zg8G3333HX/84x8x\nGo11trnaYPCf//yHxMRERo8e3RwlCiFaiUhDJJF9Irkt/jaO5x3n+8zv2Xdhn2MhpSvHI3jpvRgS\nMYThUcOJCYiRWw1CtJBmDwbPPPMMPj4+jl/mvr6+TbreyZMnWbZsGYsXL3aEDZPJBEBJSQk6nQ6D\nwUBZWRlWq9Wp16CoqAgvLy/pLRCildNqtMSHxhMfGs8v+/2SHy/+yM5zOzl+6bijx9FkNrH17Fa2\nnt1KZ7/OjIgaQXJkskx9FKKZNXswuHjxIo899hjXXXdds1zv7NmzmM1m7rjjjhrnRo0axbRp05g0\naRJWq5VKHKX3AAAgAElEQVSzZ88SGxvrOJ+enu70uRCi9fNw8yA5MpnkyGQulV1iV9Yuvjv3Hbml\nuY42F4ovsPTIUpYfXU7/Tv25rut1JIQloNVoVaxciPah2YNBfHw8RUVFzXa9QYMG8eGHHzod27Zt\nG++++y4LFy4kKiqKLl264Ovry5o1a3jooYcApVfh22+/5fbbb2+2WoQQrhXsHczEHhOZEDeBUwWn\n+O7cd/xw/gfHIko2u439F/ez/+J+AjwDGBE1guu6XierLArRBM0eDB5//HEefvhhhgwZwrBhw5p8\nvaCgoBrXycpSRjInJSU5Vj68//77mT9/Pv7+/o4Fjmw2G/fcc0+TaxBCqEuj0RAXFEdcUBx39L2D\nvRf2siNjB2n5aY42heWFrDq5ilUnVxEfGs/IriNJDE/ETdtmJl8J0So0+3dMYmIif/nLX7jvvvvo\n3LkznTt3Rqt17t7TaDR88MEHzfq8999/PzabjQULFlBYWEhCQgKLFi0iJET+5yBEe+Lh5sGIqBGM\niBpBdkk2O87t4Ltz31FcUexoczT3KEdzj+Ln4cfwyOGMjB5JmE+YilUL0XY0ea+En1u+fDlPPPEE\nGo2G8PBw/Pz8am23YsWK5nzaayZ7JQjR9lltVg5mH2R7xnYO5x6uMUUaoHdIb0ZFj5JeBNHhtfhe\nCT/3xhtv0KdPH+bPn09YmCR0IUTL02l1jp0fC0wF7Di3g+0Z2ykwFTjaHMs7xrG8Yxg8DFzX9TpG\ndh1JsHewilUL0To1ezAoKChg1qxZEgqEEKoI9ApkUs9JTOwxkcM5h9l6dis/5fzk6EUwVhhZfXI1\na9LW0C+sH6O7jaZvaF9ZF0GIKs0eDAYPHkxaWlrDDYUQogVpNVr6depHv079KDAVsD1jO9sztjtW\nWLTb7RzMPsjB7IOEeIcwuttorou6Dh93H5UrF0JdzT7p9x//+Ac7d+5k0aJFFBcXN/wAIYRoYYFe\ngdzS6xb+eeM/+d2Q39EntI/T+byyPJYeWcpfNvyFD/Z/wNnCsypVKoT6mn3w4ZAhQ7BYLJSXlwPU\nuoeBRqNh165dzfm010wGHwrRMeWU5rD17Fa+O/cdpZWlNc7HBMYwptsYBkcMlsGKol1x+eDDsWPH\nyr06IUSrF+YTxrQ+07i1163sOb+HzWc2O/UUnC44zemC03xx5AtGRY9iVPQo/D39VaxYCNdo9mDw\n4osvNvclhRCixeh1ekZEjWB45HDOFJ5h85nN/HD+Byw2C6AMVlx5YiWrTq4iKSKJsbFj6RbQTd2i\nhWhB0j8mhBAotzhjAmOICYxhWp9pbMvYxpYzWxyDFW12G7uzdrM7azexgbGkxKQwqPMgdFpdA1cW\nom1p8uDDdevWqfJYIYRoKX4efkzsMZEXxr7ArMGziAuKczqfXpDOf/f9lyc2PcHatLW1jlEQoq1q\n8uDD5ORkAgMDuf3220lNTaVz5871ts/MzGTNmjX873//w2g0snPnzqY8fZPJ4EMhRGOcLTzLptOb\nnG4zVHPXuTM8ajhjY8bSybeTShUK0TgN/d5rcjAoLS1l0aJFLF68mKKiIrp27Urfvn2JjIzEYDBg\nt9sxGo1kZmZy6NAhMjMz8ff35+6772bmzJn4+vo25embTIKBEOJqGCuMbD27lc1nNjvtzwDK7Yh+\nYf0Y130cPYJ6yEBs0Sq1eDCoZjab2bRpE99++y0//vgjGRkZjpXGNBoNXbt2ZcCAAYwdO5YxY8ag\n1+ub42mbTIKBEOJaWGwWdmftZmP6RjKNmTXORwdEc2PsjQzuPFjGIYhWxWXB4OesVitFRUUA+Pv7\n11jLoLWQYCCEaAq73c6JSyfYkL6Bg9kHa5wP8gpibOxYru96PZ5unipUKIQzl69jUE2n0xEUFNRS\nlxdCiFZBo9HQK6QXvUJ6cbHkIhvTN7IzcydmqxmAfFM+/zv8P1aeWMmo6FGkxKQQ4BmgctVC1E2m\nKwohRDMJ9w1nRv8ZTO41mS1ntziNQzCZTaxNW8vG9I0MixzGTd1vItw3XOWKhahJgoEQQjQzPw8/\nJvWcxPju49mZuZP1p9aTU5oDKGMTdmTsYEfGDhLDE0mNSyU2MFblioW4TIKBEEK0EL1Oz6joUYzs\nOpID2QdYm7aW9IJ0x/kDFw9w4OIBegb3ZHzceNn+WbQKEgyEEKKFaTQaBoQPILFTIqcKTrE2ba3T\nQMUTl05w4tIJIg2RpMalMjhiMFpNs29+K0SjSDAQQggX0Wg0xAXFETc0jgvFF1h7ai27Mndhs9sA\nyDRm8t99/+Wr418xPm48yZHJsrOjcDmJpEIIoYLOfp2ZOWAmz499nrGxY3HXuTvO5ZTm8NGBj3hi\n4xNsTN9IhaVCxUpFR9MiUXTbtm188cUXnDt3DqPRyM+XStBoNGzYsKElnloIIdqUIK8gbu97OxN7\nTGTT6U18e/pbysxlABSWF7Lk8BJWp61mbMxYxsSMkbUQRItr9mDw3//+l3/9618EBwfTv39/evXq\n1dxPIYQQ7Y6vuy+Te03mpu43sfXsVtafWo+xwghAcUUxK46tYN2pdaTEpJASk4KPu4/KFYv2qtmD\nwYcffsiwYcN49913W82yx0II0VZ4unlyU/ebGNNtDDvO7WBt2lryTfkAlJnLWHliJevT1zOm2xhu\njL0RPw8/lSsW7U2zBwOj0UhqaqqEAiGEaAK9Ts8N3W5gZNeR7MraxeqTqx1rIVRYKliTtoZNpzcx\nuttobup+EwYPg8oVi/ai2YNBv379OHPmTHNfVgghOiSdVseIqBEkRyaz9/xeVp1cxfni8wBUWitZ\nf2o9m89sZnT0aMbHjZeAIJqs2WclPP3006xZs4ZVq1Y196WFEKLD0mq0DOkyhKdHP80DSQ8Qabi8\n+Y3ZamZD+gb+tvFvLDm8hKLyIhUrFW1dk3sMbrvttlqPz507l3/84x+Eh4fX2FlRo9GwbNmypj61\nEEJ0OBqNhkGdBzEwfCAHsw+y8sRKMooyACUgbEzfyNazWxkVPYrUuFTpQRBXrcnBwNfXt9ZjUVFR\nTb20EEKIOmg0GhLDE+nfqf//b+/Oo6Iu9z+Av4dFFnVYAhcEUVCQXRQkUQTUIlETzNIS98R7TeVi\nmpmkhmtpen+5pHYN0ct1S0xRgpQQF1wy3BUNUNlcWUVAYGZ+f3D81gQEwsAw8H6d4znyfLfPl2eW\nD8/3WXDt8TUcuXME9/PvA5BPELy6ecHH0oedFKnOGpwY7Nq1SxFxEBFRPYhEIjh2dIRDB4dqE4Rj\nqceQcC8B3t294WPpw2GOVCuF9zH48ccfkZmZWeP2rKws/Pjjj4q+LBFRq/YyQVg4cCE+6vcRzPT+\naLUtk5QhNiUWC+MW4vDtw8IESkTVUXhisHDhQly6dKnG7VeuXMHChQsVfVkiIsIfCcIij0WY6TpT\nrpPii4oXOHrnKBbFLUL079EorShVYqTUXCl8uOJfpz/+q+Li4iqdEYmISLH+3Afh0sNLiLodJQxz\nLC4vxqHkQ4hLi8OwnsPgae4JTXXOPUOVFJIYJCcnIzk5Wfj54sWLkEgkVfYrLCzEnj170L17d0Vc\nloiIavFyFEPvTr1xMfsiom5HCRMlFZUVYf+N/TiWegzDrYZjgNkAqKvxD7fWTiGJwfHjx7Fx40YA\nlS/CvXv3Yu/evdXuq6enh6+++koRlyUiojpSE6mhX5d+cDFxwbnMczhy5whyinMAVC7WFHE1Aj+n\n/oy3rd+Gq4krRCKRkiMmZVFIYjBu3DgMHToUMpkM/v7+CA4OhqenZ5X9dHV10aVLFz5KICJSEjWR\nGtzN3NGvSz+cTj+No3eOCos1PXn+BNuTtiM2JRajeo2CQwcHJgitkEISAyMjIxgZGQGoXETJ0tIS\nr732miJOTUREjUBDTQNe3bzgbuaO+LvxiEmJEUYrZBZmYtOFTbA0tMRom9HoYdhDydFSU1J458N+\n/fop+pRERNRI2qi3gU8PH3iYe+BY6jHE3Y3Di4oXAIDU3FSsObMGjh0d4dfLD13EXZQcLTUFhScG\nEydO/NvtIpEIWlpa6NSpE9zc3ODj4wMNDYWHQUREr0BXUxejeo2Cd3dvRP8ejZP3T0IirexEfvXR\nVVx7fA1uXdzwtvXbeE2XLcItWaMMV3z06BHS09Ohp6eHLl0qM8ysrCwUFBTA3Nwc7dq1w5UrV7Bv\n3z5s27YNYWFhMDQ0VHQoRET0isRaYoyzH4ehFkNx+PZhXMi6AJlMBplMhnOZ53Ax+yK8unnBt6cv\nZ1FsoRQ+wVFQUBAKCgqwevVqJCYmIjIyEpGRkUhMTMSqVatQUFCAzz//HOfOncPKlSuRkpKC9evX\nKzoMIiJqACNdI0x1noqQQSGw72AvlFdIK3A87TgW/bIIMSkxKJeUKzFKagwKTwy++uorjB49Gn5+\nfnKjD9TV1eHv7w9/f3+sWrUKIpEIo0ePxjvvvIP4+HhFh0FERApgKjbFbLfZ+Nj9Y3TT7yaUl5SX\n4OCtg/g8/nOcyzwHqUyqvCBJoRSeGNy+fRumpqY1bjc1NZWbDMnOzg4FBVw7nIioObN6zQqfDvwU\nM1xmoEPbDkJ5Xkkewi6FYcXJFbj15JYSIyRFUXhiYGxsjJ9//hlSadXsUSqVIiYmRhjaCAD5+fnQ\n09NTdBhERKRgL2dRXOq1FB84fCC3lHNmYSb+fe7f+Ob8N8LUy6SaFN75cMqUKVi2bBnGjx+PsWPH\nwsyscoWv9PR07N27F1euXEFISIiwf2xsLBwcHBQdBhERNRJ1NXV4dvOEm6kbfk79GcdSj6FMUgYA\nuPH4Bm4+uYkBZgPwtvXb0NPmH36qRuGJwfjx4yESifDNN9/g008/FWbNkslk0NfXR0hICMaPHw8A\nKCsrw/z58//20QMRETVP2hraeNv6bQwyH4So21E4k3FGGMFwOv00fs3+FW9avok3LN6AloaWssOl\nOhLJalsOsZ7Ky8tx/fp1ZGdXNimZmJjA3t4emprNawWvzMxMDBkyBHFxcUxQiIgaIKswCwduHcCN\nxzfkyvW19eFv4w+3Lm6cYrkZqO17r9FmFtLU1ISzszOcnZ0bdJ6YmBjs2LEDd+/eRXFxMUxMTDBq\n1Ch8+OGHaNOmDYDK1oitW7di9+7dyMvLg4ODA0JCQmBjY6OIWyEiojroIu6COW5zcPPJTRy4eQCZ\nhZkAKhdpCrsUhri0OLxn9x56vtZTyZHS32m0xCAlJQUZGRk1jjjw8/Or03ny8/Ph5uaGadOmoX37\n9rh69So2btyIp0+fYvHixQCAbdu2YfPmzfjkk09gYWGBsLAwTJ48GUeOHIGxsbHC7omIiGpna2yL\nXoN64WzGWfyY/KOwSFN6QTrWJq5Fn8598I7tOzDSNarlTKQMCn+UkJ6ejvnz5+Pq1auo6dQikQi3\nbtV/WMv69esRERGBX3/9FWVlZXB3d8eUKVMwa9YsAEBxcTEGDx6MsWPHIjg4+G/PxUcJRESNp7Si\nFLEpsTiWdkxuMiQNNQ0MsRgC356+0NbQVmKErU+TP0pYvHgx7ty5g88++wwuLi4Qi8WKvgT09fVR\nXl75AktKSkJRURGGDRsmbNfV1YW3tzdOnTpVa2JARESNR1tDG6N6jcIg80E4mHwQ5zPPA6icQTE2\nJRaJGYnw7+WP/mb9oSZS+Ah6qgeFJwZJSUkIDAzEhAkTFHpeiUSCsrIy3LhxA7t27cL7778PkUiE\ntLQ0qKuro1u3bnL7W1pa4qefflJoDEREVD8GOgaY6jwVXt28sO/GPtzNuwsAePbiGXZe2Yn4e/EY\nazeW/Q+aAYUnBvr6+o0yYVHv3r1RVlY5TtbPzw+ffPIJAKCwsBC6urpy0y8DgJ6eHkpKSlBWViZ0\nUiQiIuWyMLDAggEL8Gv2r4i8FYm8kjwAQEZBBtYmroWLiQvesX0HhjpcWE9ZFN5uM3bsWBw+fBgS\niUSh592zZw8iIiLw6aefIi4uDqGhoQo9PxERNQ2RSIR+XfrhC68vMMJqBDTV/xjGfjH7IhbHL8aR\nO0e4QJOSKLzFwMrKCnFxcfD398eYMWPQuXNnqKlVzT+GDBnySue1s7MDALi4uMDAwAALFizA1KlT\nIRaLUVxcDIlEItdqUFBQAB0dHbYWEBE1U1oaWhhpPRIDug5A5K1I/Jr1KwCgXFKOqNtRSMxIxBjb\nMXDu5Mz5D5qQwhOD2bNnC/9fuXJltfs0dFSCra0tgMqelRYWFpBIJLh//z4sLCyEfdLS0uR+JiKi\n5slQxxAf9vkQnuae2HtjLzIKMgAAOcU52HpxK3oZ9cI4+3Ho3L6zkiNtHRSeGOzcuVPRp6wiKSkJ\nQOVKjR07dkS7du0QExODmTNnAgBKSkoQHx+P9957r9FjISIixej5Wk985vEZzqSfwcHkg3he9hwA\nkPw0GaEJofDu7o2RViOho6mj5EhbNoUnBv369VPo+aZNmwZ3d3f06NED6urqSEpKQlhYGHx9fdG1\na1cAQGBgIDZv3gw9PT1hgiOpVKrwkRFERNS41ERq8DD3QF+Tvjh8+zAS7iVAKpNCKpMiLi0OF7Iu\nYLTNaPQ37c/HC42k0WY+fPbsGa5cuYLc3Fy4u7sLSy1LpdJq+xzUxMHBAQcPHkRWVhbU1dVhZmaG\nuXPnYty4ccI+gYGBkEql2Lp1K/Lz82Fvb4+wsDC55Z2JiEh16GrqYpz9OHh09cCe63twJ+cOgMrh\njeGXw3Hq/il84PABzPTMlBxpy9Moiyht2rQJ3333HUpLSyESifD999+jf//+yMvLg7e3N+bPny+s\nsKhsnPmQiKh5k8lk+O3Bb/jh5g/C8Eagsr+ap7knRvUaBV1NXSVGqFpq+95T+HDFXbt2YcOGDfDz\n88OGDRvkpkU2MDDA0KFDERMTo+jLEhFRCyUSieBi4oIvvL7AsJ7DoK5WOQJNJpPhxL0TWBy/GIkZ\niTVOw0+vRuGJQUREBIYPH46lS5fCxcWlynYbGxvcvXtX0ZclIqIWTktDC369/LDEcwlsjW2F8peP\nF9YkrhFWdKT6U3hikJWVBTc3txq3t2vXrsYVF4mIiGrTsV1HzHGbg3+4/AMGOgZCeWpuKlacXIF9\nN/ahtKJUiRGqNoV3PjQ0NMTjx49r3H7r1i107syxqEREVH8ikQjOnZ1ha2yL6N+jcSztGCRSiTB6\n4WL2Rbxn9x76du7L0QuvSOEtBkOHDsXu3buRnZ1dZduFCxdw4MAB+Pj4KPqyRETUCmlpaMHfxh+L\nPRejl1EvobygtADf/fYd/u/8/+Hx85r/WKWqFD4qoaCgAAEBAXjw4AFcXV1x4sQJeHh4oLS0FBcv\nXoSVlRUiIiLQtm1bRV623jgqgYioZZDJZLiYfRH7buxD4YtCoVxDTQNv9XgLb/V4S25dhtaqyUcl\n6OnpYd++fZgyZQqys7OhpaWFc+fOITc3F//85z+xe/fuZpMUEBFRyyESieDaxRWh3pWzJL58hFAh\nrcCRO0cQmhCKW0/qPx1/a9Eo8xj8HYlEgrKyMujoNI8pLdliQETUMqUXpCPiagTu5d+TK3czdcMY\n2zEQa4mVE5iSNXmLQW22bduGPn36NPVliYiolemq1xULBi7ABw4fyK2vcD7zPJbEL8Gp+6c490E1\nmjwxICIiaipqIjV4dvNEqHcoXLu4CuXF5cX479X/Ym3iWjx49kCJETY/TAyIiKjFE2uJ8WGfDxH0\nehCMdP9YRyclNwXLTi7DoeRDKJeUKzHC5oOJARERtRq2xrZY6rUUw3oOg5qo8itQIpUg+vdohCaE\n4vbT20qOUPmYGBARUauiqa4Jv15++Nzzc1gaWgrlj58/xrqz6xB+ORzPy54rMULlUsjMh8nJyXXe\n9+nTp4q4JBERUYOYtDfBfPf5OJV+CgduHhCmUU7MSMS1x9cw1m4sXExcWt3MiQpJDPz8/Or8i5PJ\nZK3ul0xERM2TSCTCIPNBcOzoiL3X9yLpQRKAyoWZ/pP0H5zPOo8PHD6AoY6hkiNtOgpJDFatWqWI\n0xARESmFvrY+ZrjMwJWHV/C/a/9Dfmk+AODao2tYmrMU/r384dXNq1X8YauQxMDf318RpyEiIlIq\np05OsDayxsFbB5FwPwEymQwvKl5gz/U9uJB1AROdJqJz+5a9ECA7HxIREf2JtoY23nd4H/Pd58sl\nAWl5aVh+cjmif4+GRCpRYoSNi4kBERFRNSwNLREyKAQjrEZAXU0dQOW6C4eSD2HlqZW4n39fyRE2\nDiYGRERENdBQ08BI65FY5LEI3fS7CeWZhZlYdXoVIm9FtriJkZgYEBER1aKLuAsWDFyAd+3eFZZu\nlslkiE2JxbKTy5Cam6rkCBWHiQEREVEdqInUMNRiKJZ4LoG1kbVQ/qjoEdYkrsHe63vxouKFEiNU\nDCYGREREr8C4rTGCXw9GgGMAtDW0AVS2Hvxy9xeEJoTiTs4dJUfYMEwMiIiIXpFIJIKHuQeWei2F\nfQd7ofxp8VN8nfg1dl/brbKtB0wMiIiI6slAxwCz+s3CFOcp0NXUFcpP3DuBLxK+QPLTui8Z0Fww\nMSAiImoAkUiE101fxxKvJXDs6CiU5xTnYP3Z9fjftf+pVOsBEwMiIiIF0NfWx0zXmZjqPBVt27QV\nyhPuJahU3wMmBkRERAoiEongZuqGpV5L4dTJSSh/2fdgz/U9zb71gIkBERGRgom1xPinyz8x1Xmq\nXN+D+LvxWH5yebOe94CJARERUSN42Xrw174Hj58/xprENThw80CznDWRiQEREVEjetn3YFLvSXLz\nHvyc+jOWn1ze7NZcYGJARETUyEQiEdzN3LHUaylsjG2E8odFD7H69GpE3Y5qNis2MjEgIiJqIgY6\nBghyC8J4x/HQ0tACAEhlUhy5cwSrT69G9rNsJUfIxICIiKhJiUQiDDIfhMWei9HztZ5CeXpBOlac\nXIFjqccgk8mUFh8TAyIiIiUw0jXC3P5z8Y7tO9BQ0wAAVEgr8MPNH7Du7DrkFOcoJS4mBkREREqi\nJlLDm5ZvYtGgReiq11Uov5NzB6EJoUjMSGzy1gMmBkREREpm0t4ECwYugG9PX4hEIgBAaUUpwi+H\nY+tvW/HsxbMmi4WJARERUTOgoaaBUb1G4ZMBn6BD2w5C+aUHlxCaEIrrj683SRxMDIiIiJoRCwML\nhAwKgWc3T6Gs8EUhNpzfgIirEY0+pTITAyIiomZGS0MLHzh8gNlusyHWEgvlJ++fxIpTK3Av/16j\nXZuJARERUTNl38EeS7yWwLmzs1D2qOgRvjz9JaJ/j4ZUJlX4NZkYEBERNWPt2rTDjL4zMKn3JLlJ\nkQ4lH8LXiV8rfFgjEwMiIqJm7uWUyos9F8PS0FIoT8lNQWhCKM5nnlfYtZgYEBERqQgjXSPMc5+H\nt63fhpqo8iu8tKIU31/6HtuTtqOkvKTB12BiQEREpELURGoYbjW8yrDGC1kXsOzkMqTkpjTs/A0N\nkIiIiJped4PuCBkUggFdBwhlOcU5WJu4FvF34+t9XiYGREREKkpLQwsTnSYisG8gdDV1AQAymQz7\nb+6v93wHTAyIiIhUXF+TvljsuRjWRtYAAHM9c2EEw6vSUGRgREREpBwGOgaY238u8kryoKetV+/z\ntPrEQCKRAAAePnyo5EiIiIgU4zme17jt5ffdy++/v2r1icGTJ08AAOPHj1dyJERERE3nyZMnMDc3\nr1IukjX1Qs/NTGlpKa5fvw5jY2Ooq6srOxwiIqJGJZFI8OTJE9jb20NbW7vK9lafGBAREdEfOCqB\niIiIBEwMiIiISMDEgIiIiARMDIiIiEjQ6ocr/p2UlBQsW7YMly9fRvv27fHuu+9i1qxZKj964aef\nfsKhQ4dw48YNFBUVoXv37pg6dSpGjBgh7DNhwgRcuHChyrFXr16Fllb9ZtNShsjISCxcuLBK+dKl\nS/H+++8DqJw+dOvWrdi9ezfy8vLg4OCAkJAQ2NjYNHW4DVZTvQHAnj174OzsjMGDByMrK0tum5GR\nEc6cOdMUIdbb/fv3sX37dly6dAkpKSlwcXHBrl275Papa12qwnu7tvt9/PgxwsLCcObMGWRkZEAs\nFuP111/H3Llz0bFjR2G/8+fPY+LEiVXOP336dMybN69J7qUu6lK/dX3tNvf6re1ea6ozABg4cCC2\nb98OoG6fb/XBxKAGBQUFmDx5Mnr06IHNmzcjPT0dX375JaRSKYKDg5UdXoPs2LEDpqamWLhwIQwM\nDHDy5El8/PHHyMvLw4QJE4T93NzcMHfuXLlj27Rp09ThKkR4eLjcsBwzMzPh/9u2bcPmzZvxySef\nwMLCAmFhYZg8eTKOHDkCY2NjZYRbb0uWLEFRUZFc2TfffIObN2/CwcFBKBsxYoRcXWtqajZZjPX1\n+++/IyEhAU5OTqioqKh2n7rUpaq8t2u73xs3buD48eN499134ejoiJycHGzYsAHvv/8+oqKi0LZt\nW7n9165dK/e6/3Py0BzUpX6B2l+7qlC/td2rnZ0d9u7dK1eWnZ2N4OBgeHh4VNn/7z7f6kVG1dqy\nZYvMxcVF9uzZM6Fs27ZtMkdHR7kyVZSTk1OlbO7cuTJvb2/h54CAANns2bObMqxGceDAAZmVlZWs\nqKio2u2lpaWyPn36yDZs2CCUPX/+XObm5iZbt25dU4XZaF68eCFzdXWVLV68WCjz9vaWrV69WolR\n1Y9EIhH+P3v2bFlAQIDc9rrWpaq8t2u734KCAll5eblcWVpamszKykoWGRkplJ07d05mZWUlu337\nduMG3EC13a9MVrfXrirUb13u9a++++47Wa9evWQPHz4Uymr7fKsv9jGowcmTJzFw4EC0a9dOKBs+\nfDhKS0trbKpVFYaGhlXKbGxs8PjxYyVEo1xJSUkoKirCsGHDhDJdXV14e3vj1KlTSoxMMU6dOoWC\nggK5x0SqSk3t7z+u6lqXqvLeru1+xWIxNDTkG327d+8OHR0dlXwv13a/daUK9Vufez169ChcXV2b\npLH1mJEAAAuvSURBVKWHiUEN0tLSYGFhIVdmYmICHR0dpKWlKSmqxnP58mV0795druz06dNwcnKC\nk5MTpk2bhuTkZCVF13BvvPEGbG1t4ePjgz179gjlaWlpUFdXR7du3eT2t7S0bBH1HB0djU6dOsHF\nxUWu/IcffoC9vT369u2LOXPmVHluq4rqWpct+b2dnJyMkpKSKr8DAJg0aRJsbGwwePBgbN68ucZ5\n8pu72l67LbF+7969i5s3b9aY4Nf0+VZf7GNQg8LCQrRv375KuVgsRmFhoRIiajxnz57F8ePHsXLl\nSqHM1dUVfn5+MDc3R1ZWFrZs2YLx48fj0KFDMDU1VWK0r8bY2BhBQUFwdHSERCJBdHQ0lixZgtLS\nUkyePBmFhYXQ1dWt0ilJT08PJSUlKCsrU9l+FSUlJfjll18wduxYiEQioXzw4MHo3bs3OnXqhNTU\nVGzcuBHjx49HVFRUta95VVHXumyp722pVIoVK1agW7duGDx4sFDevn17BAYGwsXFBZqamoiPj8eG\nDRuQm5uLkJAQJUb86ury2m2J9Xv06FFoamrizTfflCuv7fOtvpgYtHKZmZn4+OOPMWTIEIwePVoo\nnzNnjvB/FxcXuLu7Y9iwYQgPD8eiRYuUEWq9eHh4yHXW8fT0xIsXL/Dtt9/W2Ou3pYiPj0dxcTGG\nDx8uV/7nLwMXFxc4OzvDz88PBw4caNCHCSnX119/jcuXL+O///2vXIc8W1tb2NraCj+7u7ujTZs2\n2LFjB2bOnFnto8XmqrW+dqOjozFgwADo6+vLldf2+VbfxzN8lFADsVhcpXc3UJmNisViJUSkePn5\n+Zg+fTpMTEywdu3av93X2NgYffr0wc2bN5sousbj4+OD/Px8ZGVlQSwWo7i4uEqzakFBAXR0dFS2\ntQCo/CvD3NxcbjRCdaysrNC9e3eVr9u61mVLfG9HRERg+/bt+PLLL+Hk5FTr/j4+PqioqMDt27eb\nILrGU91rt6XVb3JyMlJTU6sk+DX58+dbfTExqIGFhUWV51EPHjxASUlJledXqqikpAT/+Mc/UF5e\njq1bt0JHR6fWY0QikVyTtKr68z1YWFhAIpHg/v37cvtU95xSlTx79gwnT56s84dJS6jbutZlS3tv\nx8bGYvny5Zg/fz58fX3rdMzLulb1OgeqvnZbWv0ePXoU2traGDJkSJ32V0SdMjGowaBBg3D69Gm5\nzDM6Ohra2tro16+fEiNruIqKCgQFBeHevXv4z3/+g9dee63WY548eYLffvsNdnZ2TRBh44qNjYWB\ngQG6dOmCPn36oF27doiJiRG2l5SUID4+vtrxwqri2LFjKCsrq9NohDt37iAtLU3l67auddmS3tvn\nz5/HvHnzEBAQgGnTptX5uNjYWGhoaMDa2roRo2t81b12W1L9ApWJgbe3d5V5KWry58+3+mIfgxqM\nGzcOu3btwuzZszF9+nRkZGRg48aNmDx5stwwGFX0xRdfICEhAYsWLUJ+fj4uX74sbLO1tUVaWhrW\nrVuHt956CyYmJnjw4AG2bt0KNTU1TJo0SYmRv7rZs2fDwcEB1tbWkEqliI6ORnR0NEJCQqCmpgYt\nLS0EBgZi8+bN0NPTEybFkUqlcpOoqJqjR4+iV69esLS0lCs/ceIEDh8+DC8vL3To0AFpaWn49ttv\n0blzZ7k+Js1RSUkJEhISAACPHj1CUVGRkAR4enpCR0enTnWpKu/t2u43OzsbH330ESwsLODr6yv3\nPjY0NETXrl0BVE56ZWhoCAcHB2hqaiIhIQERERGYNGkSDAwMmv7GalDb/Z4/f75Or11VqN+6vJaB\nytFiWVlZ+Oyzz6o9T22fb/Ulkslksnof3cKlpKQgNDQUly9fhlgsxpgxYzB79uxmM61mfVU3rehL\ncXFx0NTUREhICG7duoX8/Hy0bdsW/fr1w7/+9a8qXzTN3bp16xAbG4uHDx9CJpOhR48emDhxIvz8\n/IR9ZDIZtmzZgt27dyM/Px/29vYICQmR67ClSnJzc+Hh4YGgoCAEBgbKbUtOTsaqVatw+/ZtPHv2\nDPr6+vDw8EBwcHCzmwnvrzIzM2tsTo2Li4OpqWmd61IV3tu13e+FCxeqnQ4XAPz9/bF69WoAwM6d\nO7F//35kZmaivLwc5ubmePfddzFp0qRm9SihtvstKiqq82u3uddvXV7LALBixQocPHgQiYmJ1fZ3\nqsvnW30wMSAiIiIB+xgQERGRgIkBERERCZgYEBERkYCJAREREQmYGBAREZGAiQEREREJmBgQUZ1F\nRkbC2toamZmZSovh888/x4wZM17pmPXr1+O9995rpIiIWhbOfEjUytV1Wty4uLhGjqR26enpiIyM\nRHh4+CsdN2HCBISFheHEiRPw8vJqnOCIWghOcETUyh06dEju5/DwcGRnZ1eZVe+NN96AlpYWKioq\n0KZNG6XMmrd8+XKcPXsWR48efeVjg4ODkZOTg507dzZCZEQtB1sMiFq5UaNGyf0cGxuL/Pz8KuUv\nKWta2bKyMkRFRdV7DYu33noLQUFByMrKatACM0QtHfsYEFGdVdfHYPDgwZg5cybOnDkDf39/ODo6\nwt/fH1evXgUAHDx4ED4+PnBwcEBAQAAyMjKqnDcpKQlTpkxBnz590Lt3b0yePBnXr1+vsk9+fj76\n9+9f5fhdu3Zh+PDhcHJygqurK0aPHo2oqCi5fdzd3QEAv/zyS4N/D0QtGRMDImqwtLQ0LFiwAEOG\nDEFwcDAePnyIGTNmYP/+/diyZQvGjh2L6dOn48qVKwgJCZE7NjExERMnTkRZWRnmzJmDoKAgPHz4\nEAEBAUhJSRH2u3TpEtTU1GBjYyN3/L59+7B8+XL07t0bixYtwqxZs2BtbY0rV67I7de+fXt07doV\nSUlJjfeLIGoB+CiBiBrs7t272L9/PxwdHQEAHTt2RHBwMNasWSOsDw8AFRUV2Lp1Kx48eIDOnTtD\nKpVi6dKlGDhwILZs2SKcb8yYMRg2bBg2bdqE9evXA6hMPgwNDaGrqyt37RMnTsDT0xMrVqyoNU4z\nMzO5ZIOIqmKLARE1mLW1tZAUAICTkxOAyscML5MCAMI+Lx9FJCcn4/79+xg+fDhyc3OFf+Xl5ejb\nty8uXLggHJufnw+xWFzl2mKxGCkpKUhNTa01TrFYjLy8vPrdJFErwRYDImowExMTuZ/bt28PAOjU\nqVO15QUFBQCAe/fuAQDmzZtX7XnV1OT/dqluENX06dORmJgIX19fWFpaYuDAgRgxYoRcovLn45Ux\nmoJIlTAxIKIG++sX+Eu1jWB4+UW/cOFCWFlZ/e2++vr6uHHjRpVyS0tLxMTE4MSJEzh16hSio6MR\nHh6OOXPm4KOPPpLbt7CwUK4Fg4iqYmJAREpjZmYGoLKJ/+WogZpYWFjgyJEjeP78Odq2bSu3TVdX\nF76+vvD19UV5eTnmzJmDzZs3Y/r06WjTpo2wX2ZmJuzs7BR/I0QtCPsYEJHS2NnZwczMDN9//z1K\nSkqqbM/NzRX+37t3b0ilUty8eVNun7/2GdDU1ETPnj0hlUpRVlYmlD979gzp6elwdnZW8F0QtSxs\nMSAipVFXV8eyZcsQGBiIkSNHws/PDx06dMDDhw9x5swZdO3aFWvWrAEA9O3bF/r6+khMTISrq6tw\njmnTpsHIyAjOzs4wMjJCWloaIiIi4OnpiXbt2gn7JSYmAqjsEElENWNiQERK1b9/f+zZswebNm3C\nrl27UFxcjA4dOsDZ2Rnjxo0T9mvTpg1GjhyJmJgYBAUFCeVjx45FVFQUduzYgeLiYnTq1AkBAQGY\nOXOm3HViYmLg6uoKU1PTJrs3IlXEtRKISGWkp6dj2LBhCA8Ph4uLS52Py8nJgbe3N/7973+zxYCo\nFuxjQEQqo2vXrhg9ejS+++67Vzpu586dsLa2ZlJAVAdsMSAiIiIBWwyIiIhIwMSAiIiIBEwMiIiI\nSMDEgIiIiARMDIiIiEjAxICIiIgETAyIiIhIwMSAiIiIBP8PFe9yvxEgC8gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(3, 1, 1)\n", + "plot(thetas, label='theta')\n", + "decorate(ylabel='Angle (rad)')\n", + "\n", + "subplot(3, 1, 2)\n", + "plot(omegas, color='orange', label='omega')\n", + "decorate(ylabel='Angular velocity (rad/s)')\n", + "\n", + "subplot(3, 1, 3)\n", + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time(s)',\n", + " ylabel='Length (m)')\n", + "\n", + "savefig('chap11-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Yo-yo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Simulate the descent of a yo-yo. How long does it take to reach the end of the string.\n", + "\n", + "I provide a `Condition` object with the system parameters:\n", + "\n", + "* `Rmin` is the radius of the axle. `Rmax` is the radius of the axle plus rolled string.\n", + "\n", + "* `Rout` is the radius of the yo-yo body. `mass` is the total mass of the yo-yo, ignoring the string. \n", + "\n", + "* `L` is the length of the string.\n", + "\n", + "* `g` is the acceleration of gravity." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(Rmin = 8e-3 * m,\n", + " Rmax = 16e-3 * m,\n", + " Rout = 35e-3 * m,\n", + " mass = 50e-3 * kg,\n", + " L = 1 * m,\n", + " g = 9.8 * m / s**2,\n", + " duration = 1 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a `make_system` function that computes `I` and `k` based on the system parameters.\n", + "\n", + "I estimated `I` by modeling the yo-yo as a solid cylinder with uniform density ([see here](https://en.wikipedia.org/wiki/List_of_moments_of_inertia)). In reality, the distribution of weight in a yo-yo is often designed to achieve desired effects. But we'll keep it simple." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition with Rmin, Rmax, Rout, \n", + " mass, L, g, duration\n", + " \n", + " returns: System with init, k, Rmin, Rmax, mass,\n", + " I, g, ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(theta = 0 * radian,\n", + " omega = 0 * radian/s,\n", + " y = L,\n", + " v = 0 * m / s)\n", + " \n", + " I = mass * Rout**2 / 2\n", + " k = (Rmax**2 - Rmin**2) / 2 / L / radian \n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, k=k,\n", + " Rmin=Rmin, Rmax=Rmax,\n", + " mass=mass, I=I, g=g,\n", + " ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "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", + "
value
inittheta 0 radian\n", + "omega 0.0 radi...
k9.6e-05 meter / radian
Rmin0.008 meter
Rmax0.016 meter
mass0.05 kilogram
I3.0625000000000006e-05 kilogram * meter ** 2
g9.8 meter / second ** 2
ts[0.0 second, 0.01 second, 0.02 second, 0.03 se...
\n", + "
" + ], + "text/plain": [ + "init theta 0 radian\n", + "omega 0.0 radi...\n", + "k 9.6e-05 meter / radian\n", + "Rmin 0.008 meter\n", + "Rmax 0.016 meter\n", + "mass 0.05 kilogram\n", + "I 3.0625000000000006e-05 kilogram * meter ** 2\n", + "g 9.8 meter / second ** 2\n", + "ts [0.0 second, 0.01 second, 0.02 second, 0.03 se...\n", + "dtype: object" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "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", + "
value
theta0 radian
omega0.0 radian / second
y1 meter
v0.0 meter / second
\n", + "
" + ], + "text/plain": [ + "theta 0 radian\n", + "omega 0.0 radian / second\n", + "y 1 meter\n", + "v 0.0 meter / second\n", + "dtype: object" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Write a slope function for this system, using these results from the book:\n", + "\n", + "$ r = \\sqrt{2 k y + R_{min}^2} $ \n", + "\n", + "$ T = m g I / I^* $\n", + "\n", + "$ a = -m g r^2 / I^* $\n", + "\n", + "$ \\alpha = m g r / I^* $\n", + "\n", + "where $I^*$ is the augmented moment of inertia, $I + m r^2$.\n", + "\n", + "Hint: If `y` is less than 0, it means you have reached the end of the string, so the equation for `r` is no longer valid. In this case, the simplest thing to do it return the sequence of derivatives `0, 0, 0, 0`" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " theta, omega, y, v = state\n", + " unpack(system)\n", + " if y < 0 * m:\n", + " return 0, 0, 0, 0 \n", + " r = sqrt(2*k*y + Rmin**2)\n", + " alpha = mass * g * r / (I + mass * r**2)\n", + " a = -r * alpha\n", + " return omega, alpha, v, a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " ,\n", + " )" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0*s, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true, + "scrolled": false + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check the final conditions. If things have gone according to plan, the final value of `y` should be close to 0." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "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", + "
thetaomegayv
0.9667.11465144.630635-1.143965e-08-1.994692
0.9767.11465144.630635-1.143965e-08-1.994692
0.9867.11465144.630635-1.143965e-08-1.994692
0.9967.11465144.630635-1.143965e-08-1.994692
1.0067.11465144.630635-1.143965e-08-1.994692
\n", + "
" + ], + "text/plain": [ + " theta omega y v\n", + "0.96 67.11465 144.630635 -1.143965e-08 -1.994692\n", + "0.97 67.11465 144.630635 -1.143965e-08 -1.994692\n", + "0.98 67.11465 144.630635 -1.143965e-08 -1.994692\n", + "0.99 67.11465 144.630635 -1.143965e-08 -1.994692\n", + "1.00 67.11465 144.630635 -1.143965e-08 -1.994692" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "thetas = system.results.theta\n", + "ys = system.results.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`theta` should increase and accelerate." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nW72PF+jrQQ8fV6q0elCpsFHVhIfapubLxkYlgSCEEPVg9UESEBBAWlqaybpLly6h0WgICAho0DHt\nbNVyq0kIIZqI1QdJdHQ0a9asoby83Pjk1pYtW3B0dGTo0KE33E+vrxkyPScnp0XqFEKItqD2M7P2\nM9QcVh8kDz74IOvWrWPBggXMnTuXrKwsli9fzuzZs2/ahyQ/Px+AGTNmtFSpQgjRZuTn59OzZ0+z\ntlUpNxpz3Iqkpqby6quvcvToUdzc3Jg2bRoLFiy46RAplZWVnDx5Em9v71Y/lIoQQrQUvV5Pfn4+\nISEhODqaN+hrqwgSIYQQ1ksGbBJCCNEoEiRCCCEaRYJECCFEo0iQCCGEaBQJEiGEEI3S5oIkNTWV\nhx9+mIEDBzJq1Cg++OADszrWlJWVsXTpUoYMGcLgwYN59tlnKSoqaoGKm1ZDzv/48eMsXbqUCRMm\nMHDgQCZOnMjy5cupqqpqoaqbVkN/BmoZDAamTp1KcHAwP/30UzNW2jwac/7btm3jvvvuIywsjGHD\nhvHoo49SUVHRzBU3rYae/4kTJ3jkkUcYOnQoQ4cOZfbs2Rw7dqwFKm5aGRkZ/O1vf+Ouu+6iX79+\nzJo1y6z9GvMZaPUdEuujMbMp/ulPfyI9PZ3XX38dGxsbli1bxpNPPslnn33WQtU3XkPPf+vWrWRm\nZjJ37lx69uzJmTNn+OCDDzhz5gz//Oc/W/AMGq8pZtT86quvyM3NbeZKm0djzv+rr77i1Vdf5bHH\nHuP555+ntLSUffv21SuELa2h53/p0iXmzJlD//79eeeddwBYs2YNc+bMYdOmTXTv3r2lTqHRzp49\ny44dOxg4cCA6nc7s/Rr1Gai0IStXrlQiIyOVsrIy47pVq1YpYWFhJut+Kzk5WQkKClIOHDhgXHfs\n2DElKChI2b17d7PW3JQaev4FBQV11m3YsEEJCgpSsrOzm6XW5tLQ70Gt4uJiZdiwYcqXX36pBAUF\nKdu3b2/OcptcY34GBg0apHzxxRctUWazaej5f/bZZ0rfvn2V0tJS47ri4mKlb9++yqefftqsNTc1\nvV5v/P+CBQuUmTNn/u4+jf0MbFO3tm40m2JlZSUHDhy46X5eXl4MGTLEuC4sLAxfX1927tzZrDU3\npYaef8eOHeus69evHwB5eXlNX2gzauj3oNYHH3xAREQEUVFRzVlms2no+W/duhWAKVOmNHuNzamh\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(thetas, label='theta')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angle (rad)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`y` should decrease and accelerate down." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Length (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python3.6", + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/obipy-resources/28440uCp.png b/code/obipy-resources/28440uCp.png new file mode 100644 index 00000000..3d66e55e Binary files /dev/null and b/code/obipy-resources/28440uCp.png differ diff --git a/code/obipy-resources/48211Nb.png b/code/obipy-resources/48211Nb.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/48211Nb.png differ diff --git a/code/obipy-resources/4821BlC.png b/code/obipy-resources/4821BlC.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821BlC.png differ diff --git a/code/obipy-resources/4821CfV.png b/code/obipy-resources/4821CfV.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821CfV.png differ diff --git a/code/obipy-resources/4821Pin.png b/code/obipy-resources/4821Pin.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821Pin.png differ diff --git a/code/obipy-resources/4821RtT.png b/code/obipy-resources/4821RtT.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821RtT.png differ diff --git a/code/obipy-resources/4821b5O.png b/code/obipy-resources/4821b5O.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821b5O.png differ diff --git a/code/obipy-resources/4821oKJ.png b/code/obipy-resources/4821oKJ.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821oKJ.png differ diff --git a/code/obipy-resources/4821p2z.png b/code/obipy-resources/4821p2z.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821p2z.png differ diff --git a/code/obipy-resources/4821rBg.png b/code/obipy-resources/4821rBg.png new file mode 100644 index 00000000..ecd648ba Binary files /dev/null and b/code/obipy-resources/4821rBg.png differ diff --git a/code/rab2fig/rabs.png b/code/rab2fig/rabs.png new file mode 100644 index 00000000..1c7b31ae Binary files /dev/null and b/code/rab2fig/rabs.png differ diff --git a/code/rabbits.ipynb b/code/rabbits.ipynb index e8ff3cab..2936837c 100644 --- a/code/rabbits.ipynb +++ b/code/rabbits.ipynb @@ -752,7 +752,7 @@ "metadata": { "kernelspec": { "display_name": "Python 3", - "language": "python", + "language": "python3.6", "name": "python3" }, "language_info": { diff --git a/code/rabbits2mine.org b/code/rabbits2mine.org new file mode 100644 index 00000000..c22c3573 --- /dev/null +++ b/code/rabbits2mine.org @@ -0,0 +1,103 @@ +#+BEGIN_SRC ipython :session + %matplotlib inline + from modsim import * +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results raw drawer + system = System(t0=0, + t_end=10, + adult_pop0=10, + birth_rate=0.9, + death_rate=0.5, + juvenile_pop0=0, + mature_rate=0.33) + + system +#+END_SRC + +#+RESULTS: +:RESULTS: +t0 0.00 +t_end 10.00 +adult_pop0 10.00 +birth_rate 0.90 +death_rate 0.50 +juvenile_pop0 0.00 +mature_rate 0.33 +dtype: float64 +:END: + +#+BEGIN_SRC ipython :session + def run_simulation(system): + """Runs a proportional growth model. + + Adds TimeSeries to `system` as `results`. + + system: System object with t0, t_end, p0, + birth_rate and death_rate + """ + juveniles = TimeSeries() + juveniles[system.t0] = system.juvenile_pop0 + adults = TimeSeries() + adults[system.t0] = system.adult_pop0 + + for t in linrange(system.t0, system.t_end): + births = system.birth_rate * adults[t] + deaths = system.death_rate * adults[t] + maturations = juveniles[t] * system.mature_rate + + adults[t + 1] = adults[t] + maturations - deaths + juveniles[t + 1] = juveniles[t] + births - maturations + + system.adults = adults + system.juveniles = juveniles +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :output raw drawer + run_simulation(system) + system.adults +#+END_SRC + +#+RESULTS: +#+begin_example +0 10.000000 +1 5.000000 +2 5.470000 +3 6.209900 +4 7.057723 +5 8.021560 +6 9.117031 +7 10.362107 +8 11.777219 +9 13.385586 +10 15.213601 +11 17.291261 +dtype: float64 +#+end_example + +#+BEGIN_SRC ipython :session + def plot_results(system, title=None): + """Plot the estimates and the model. + + system: System object with `results` + """ + newfig() + plot(system.adults, 'bo-', label='adults') + plot(system.juveniles, 'rs-', label='juveniles') + decorate(xlabel='Season', + ylabel='Rabbit population', + title=title) +#+END_SRC + +#+RESULTS: + +#+BEGIN_SRC ipython :session :results file :file rab2fig/rabs.png :exports both + plot_results(system, title='Proportional growth model') +#+END_SRC + +#+RESULTS: +[[file:rab2fig/rabs.png]] diff --git a/code/rabbits2mine.pdf b/code/rabbits2mine.pdf new file mode 100644 index 00000000..1eb9817a Binary files /dev/null and b/code/rabbits2mine.pdf differ diff --git a/code/rabbits2mine.tex b/code/rabbits2mine.tex new file mode 100644 index 00000000..55c17ac6 --- /dev/null +++ b/code/rabbits2mine.tex @@ -0,0 +1,101 @@ +% Created 2017-09-26 Tue 19:25 +% Intended LaTeX compiler: pdflatex +\documentclass[11pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{graphicx} +\usepackage{grffile} +\usepackage{longtable} +\usepackage{wrapfig} +\usepackage{rotating} +\usepackage[normalem]{ulem} +\usepackage{amsmath} +\usepackage{textcomp} +\usepackage{amssymb} +\usepackage{capt-of} +\usepackage{hyperref} +\usepackage{minted} +\author{Kawin Nikomborirak} +\date{\today} +\title{} +\hypersetup{ + pdfauthor={Kawin Nikomborirak}, + pdftitle={}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 25.3.1 (Org mode 9.1.1)}, + pdflang={English}} +\begin{document} + +\tableofcontents + +\begin{minted}[frame=single]{ipython} +%matplotlib inline +from modsim import * +\end{minted} + +\begin{minted}[frame=single]{ipython} +system = System(t0=0, + t_end=10, + adult_pop0=10, + birth_rate=0.9, + death_rate=0.5, + juvenile_pop0=0, + mature_rate=0.33) + +system +\end{minted} + +\begin{minted}[frame=single]{ipython} +def run_simulation(system): + """Runs a proportional growth model. + + Adds TimeSeries to `system` as `results`. + + system: System object with t0, t_end, p0, + birth_rate and death_rate + """ + juveniles = TimeSeries() + juveniles[system.t0] = system.juvenile_pop0 + adults = TimeSeries() + adults[system.t0] = system.adult_pop0 + + for t in linrange(system.t0, system.t_end): + births = system.birth_rate * adults[t] + deaths = system.death_rate * adults[t] + maturations = juveniles[t] * system.mature_rate + + adults[t + 1] = adults[t] + maturations - deaths + juveniles[t + 1] = juveniles[t] + births - maturations + + system.adults = adults + system.juveniles = juveniles +\end{minted} + +\begin{minted}[frame=single]{ipython} +run_simulation(system) +system.adults +\end{minted} + +\begin{minted}[frame=single]{ipython} +def plot_results(system, title=None): + """Plot the estimates and the model. + + system: System object with `results` + """ + newfig() + plot(system.adults, 'bo-', label='adults') + plot(system.juveniles, 'rs-', label='juveniles') + decorate(xlabel='Season', + ylabel='Rabbit population', + title=title) +\end{minted} + +\begin{minted}[frame=single]{ipython} +plot_results(system, title='Proportional growth model') +\end{minted} + +\begin{center} +\includegraphics[width=.9\linewidth]{rab2fig/rabs.png} +\end{center} +\end{document} \ No newline at end of file diff --git a/code/rabbits3mine.org b/code/rabbits3mine.org new file mode 100644 index 00000000..d40089e0 --- /dev/null +++ b/code/rabbits3mine.org @@ -0,0 +1,145 @@ +#+name: pre +#+BEGIN_SRC python + from modsim import (TimeSeries, TimeFrame, System, State, linrange) + + init = State(juveniles=0, adults=10) + system = System(init=init, t0 = 0, t_end=20, birth_rate=0.90, + mature_rate=0.33, death_rate=0.5) +#+END_SRC + +#+RESULTS: pre + +#+name: run +#+BEGIN_SRC python + <
>
+
+  def run_simulation(system):
+      """Runs a proportional growth model.
+
+      Adds TimeSeries to `system` as `results`.
+
+      system: System object
+      """
+      juveniles = TimeSeries()
+      juveniles[system.t0] = system.init.juveniles
+
+      adults = TimeSeries()
+      adults[system.t0] = system.init.adults
+
+      for t in linrange(system.t0, system.t_end):
+          maturations = system.mature_rate * juveniles[t]
+          births = system.birth_rate * adults[t]
+          deaths = system.death_rate * adults[t]
+
+          if adults[t] > 30:
+              market = adults[t] - 30
+          else:
+              market = 0
+
+          juveniles[t + 1] = juveniles[t] + births - maturations
+          adults[t + 1] = adults[t] + maturations - deaths - market
+
+      system.adults = adults
+      system.juveniles = juveniles
+#+END_SRC
+
+#+RESULTS: run
+
+#+BEGIN_SRC python :results output :noweb yes :exports both
+  <>
+  run_simulation(system)
+  print(system.adults)
+#+END_SRC
+
+#+RESULTS:
+#+begin_example
+0     10.000000
+1      5.000000
+2      5.470000
+3      6.209900
+4      7.057723
+5      8.021560
+6      9.117031
+7     10.362107
+8     11.777219
+9     13.385586
+10    15.213601
+11    17.291261
+12    19.652658
+13    22.336542
+14    25.386953
+15    28.853947
+16    32.794414
+17    34.478600
+18    36.487431
+19    37.893339
+20    39.401924
+21    40.546917
+dtype: float64
+#+end_example
+
+#+name: frame
+#+BEGIN_SRC python :noweb yes :results output :exports both
+  <
>
+
+  def run_simulation(system):
+      """Runs a proportional growth model.
+
+      Adds TimeSeries to `system` as `results`.
+
+      system: System object
+      """
+      frame = TimeFrame(columns=system.init.index)
+      frame.loc[system.t0] = system.init
+
+      for t in linrange(system.t0, system.t_end):
+          maturations = system.mature_rate * frame['juveniles'][t]
+          births = system.birth_rate * frame['adults'][t]
+          deaths = system.death_rate * frame['adults'][t]
+
+          if frame['adults'][t] > 30:
+              market = frame['adults'][t] - 30
+          else:
+              market = 0
+
+          frame.loc[t + 1] = [frame['juveniles'][t] + births - maturations,
+                              frame['juveniles'][t] + maturations - deaths - market]
+
+      system.results = frame
+  run_simulation(system)
+  print(system.results)
+#+END_SRC
+
+#+RESULTS: frame
+#+begin_example
+      juveniles       adults
+0      0.000000    10.000000
+1      9.000000    -5.000000
+2      1.530000    14.470000
+3     14.048100    -5.200100
+4      4.732137    21.284023
+5     22.326152    -4.348269
+6     11.045080    31.867917
+7     36.081329    -3.111920
+8     21.373763    49.544128
+9     58.910136   -15.889088
+10    25.169612    86.295025
+11    94.529162   -65.966953
+12     3.964281   158.707262
+13   145.492605  -202.788399
+14   -85.029514   294.899364
+15   208.439653  -525.438299
+16  -333.239902   539.943888
+17   262.678765 -1223.124901
+18  -924.817639   960.925208
+19   245.204869 -2641.395271
+20 -2212.968481  1646.820111
+21    -0.550783 -5383.478247
+#+end_example
+
+#+BEGIN_SRC python :noweb yes
+  <
>
+
+  def plot_results(sytsem):
+      system.results.plot()
+#+END_SRC
diff --git a/code/rabbits3mine.tex b/code/rabbits3mine.tex
new file mode 100644
index 00000000..4a8935e0
--- /dev/null
+++ b/code/rabbits3mine.tex
@@ -0,0 +1,157 @@
+% Created 2017-10-03 Tue 19:55
+% Intended LaTeX compiler: pdflatex
+\documentclass[11pt]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{graphicx}
+\usepackage{grffile}
+\usepackage{longtable}
+\usepackage{wrapfig}
+\usepackage{rotating}
+\usepackage[normalem]{ulem}
+\usepackage{amsmath}
+\usepackage{textcomp}
+\usepackage{amssymb}
+\usepackage{capt-of}
+\usepackage{hyperref}
+\usepackage{minted}
+\author{Kawin Nikomborirak}
+\date{\today}
+\title{}
+\hypersetup{
+ pdfauthor={Kawin Nikomborirak},
+ pdftitle={},
+ pdfkeywords={},
+ pdfsubject={},
+ pdfcreator={Emacs 25.3.1 (Org mode 9.1.1)}, 
+ pdflang={English}}
+\begin{document}
+
+\tableofcontents
+
+\begin{minted}[frame=single]{python}
+from modsim import (TimeSeries, TimeFrame, System, State, linrange)
+
+init = State(juveniles=0, adults=10)
+system = System(init=init, t0 = 0, t_end=20, birth_rate=0.90,
+		 mature_rate=0.33, death_rate=0.5)
+\end{minted}
+
+\begin{minted}[frame=single]{python}
+<
>
+
+def run_simulation(system):
+    """Runs a proportional growth model.
+
+    Adds TimeSeries to `system` as `results`.
+
+    system: System object
+    """
+    juveniles = TimeSeries()
+    juveniles[system.t0] = system.init.juveniles
+
+    adults = TimeSeries()
+    adults[system.t0] = system.init.adults
+
+    for t in linrange(system.t0, system.t_end):
+	maturations = system.mature_rate * juveniles[t]
+	births = system.birth_rate * adults[t]
+	deaths = system.death_rate * adults[t]
+
+	if adults[t] > 30:
+	    market = adults[t] - 30
+	else:
+	    market = 0
+
+	juveniles[t + 1] = juveniles[t] + births - maturations
+	adults[t + 1] = adults[t] + maturations - deaths - market
+
+    system.adults = adults
+    system.juveniles = juveniles
+\end{minted}
+
+\begin{minted}[frame=single]{python}
+from modsim import (TimeSeries, TimeFrame, System, State, linrange)
+
+init = State(juveniles=0, adults=10)
+system = System(init=init, t0 = 0, t_end=20, birth_rate=0.90,
+		 mature_rate=0.33, death_rate=0.5)
+
+def run_simulation(system):
+    """Runs a proportional growth model.
+
+    Adds TimeSeries to `system` as `results`.
+
+    system: System object
+    """
+    juveniles = TimeSeries()
+    juveniles[system.t0] = system.init.juveniles
+
+    adults = TimeSeries()
+    adults[system.t0] = system.init.adults
+
+    for t in linrange(system.t0, system.t_end):
+	maturations = system.mature_rate * juveniles[t]
+	births = system.birth_rate * adults[t]
+	deaths = system.death_rate * adults[t]
+
+	if adults[t] > 30:
+	    market = adults[t] - 30
+	else:
+	    market = 0
+
+	juveniles[t + 1] = juveniles[t] + births - maturations
+	adults[t + 1] = adults[t] + maturations - deaths - market
+
+    system.adults = adults
+    system.juveniles = juveniles
+run_simulation(system)
+print(system.adults)
+\end{minted}
+
+\begin{minted}[frame=single]{python}
+from modsim import (TimeSeries, TimeFrame, System, State, linrange)
+
+init = State(juveniles=0, adults=10)
+system = System(init=init, t0 = 0, t_end=20, birth_rate=0.90,
+		 mature_rate=0.33, death_rate=0.5)
+
+def run_simulation(system):
+    """Runs a proportional growth model.
+
+    Adds TimeSeries to `system` as `results`.
+
+    system: System object
+    """
+    frame = TimeFrame(columns=system.init.index)
+    frame.loc[system.t0] = system.init
+
+    for t in linrange(system.t0, system.t_end):
+	maturations = system.mature_rate * frame['juveniles'][t]
+	births = system.birth_rate * frame['adults'][t]
+	deaths = system.death_rate * frame['adults'][t]
+
+	if frame['adults'][t] > 30:
+	    market = frame['adults'][t] - 30
+	else:
+	    market = 0
+
+	frame.loc[t + 1] = [frame['juveniles'][t] + births - maturations,
+			    frame['juveniles'][t] + maturations - deaths - market]
+
+    system.results = frame
+run_simulation(system)
+print(system.results)
+\end{minted}
+
+\begin{minted}[frame=single]{python}
+from modsim import (TimeSeries, TimeFrame, System, State, linrange)
+
+init = State(juveniles=0, adults=10)
+system = System(init=init, t0 = 0, t_end=20, birth_rate=0.90,
+		 mature_rate=0.33, death_rate=0.5)
+
+def plot_results(sytsem):
+    system.results.plot()
+\end{minted}
+\end{document}
\ No newline at end of file