{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. How to Solve ODEs with Rate Law Functions\n", "\n", "Although the `ode` solver accepts `NetworkModel`, `ode.ODESimulator` owns its model class `ode.ODENetworkModel` and `ode.ODEReactionRule` for the extension. The interface of these classes are almost same with `Model` classes and `ReactionRule`. Here, we explain the usage specific to `ode` especially about `ode.ODERatelaw`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "from ecell4 import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, the rate law support in `ode` is under development. Some functions might be deprecated in the future. Currently, to enable rate laws, the option `ecell4.util.decorator.ENABLE_RATELAW` must be activated as follows:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "util.decorator.ENABLE_RATELAW = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.1. ode.ODEReactionRule\n", "\n", "`ode.ODEReactionRule` has almost same members with `ReactionRule`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "1\n", "1.0\n", "A+B>C|1\n" ] } ], "source": [ "rr1 = ReactionRule()\n", "rr1.add_reactant(Species(\"A\"))\n", "rr1.add_reactant(Species(\"B\"))\n", "rr1.add_product(Species(\"C\"))\n", "rr1.set_k(1.0)\n", "print(len(rr1.reactants())) # => 2\n", "print(len(rr1.products())) # => 1\n", "print(rr1.k()) # => 1.0\n", "print(rr1.as_string()) # => A+B>C|1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "1\n", "1.0\n", "A+B>C|1\n" ] } ], "source": [ "rr2 = ode.ODEReactionRule()\n", "rr2.add_reactant(Species(\"A\"))\n", "rr2.add_reactant(Species(\"B\"))\n", "rr2.add_product(Species(\"C\"))\n", "rr2.set_k(1.0)\n", "print(len(rr2.reactants())) # => 2\n", "print(len(rr2.products())) # => 1\n", "print(rr2.k()) # => 1.0\n", "print(rr2.as_string()) # => A+B>C|1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to the common members, `ode.ODEReactionRule` can store stoichiometric coefficients for each `Species`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A+2*B>2.5*C|1\n" ] } ], "source": [ "rr2 = ode.ODEReactionRule()\n", "rr2.add_reactant(Species(\"A\"), 1.0)\n", "rr2.add_reactant(Species(\"B\"), 2.0)\n", "rr2.add_product(Species(\"C\"), 2.5)\n", "rr2.set_k(1.0)\n", "print(rr2.as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also access to the coefficients as follows:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.0, 2.0]\n", "[2.5]\n" ] } ], "source": [ "print(rr2.reactants_coefficients()) # => [1.0, 2.0]\n", "print(rr2.products_coefficients()) # => [2.5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.2. ode.ODERatelaw\n", "\n", "`ode.ODEReactionRule` can be bound to a `ode.ODERatelaw`. `ode.ODERatelaw` provides a function to calculate a derivative (flux or velocity) based on the given values of `Species`. `ode.ODERatelawMassAction` is a default class bound to `ode.ODEReactionRule`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A+B>C|2\n" ] } ], "source": [ "rr1 = ode.ODEReactionRule()\n", "rr1.add_reactant(Species(\"A\"))\n", "rr1.add_reactant(Species(\"B\"))\n", "rr1.add_product(Species(\"C\"))\n", "rl1 = ode.ODERatelawMassAction(2.0)\n", "rr1.set_ratelaw(rl1) # equivalent to rr1.set_k(2.0)\n", "print(rr1.as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`ode.ODERatelawCallback` enables the user-defined function for calculating a flux." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A+B>C|mass_action\n" ] } ], "source": [ "def mass_action(reactants, products, volume, t, rr):\n", " veloc = 2.0 * volume\n", " for value in reactants:\n", " veloc *= value / volume\n", " return veloc\n", "\n", "rl2 = ode.ODERatelawCallback(mass_action)\n", "rr1.set_ratelaw(rl2)\n", "print(rr1.as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function bound must accept five arguments and return a floating number as a velocity. The first and second list contain a value for each reactants and products respectively. When you need to access the stoichiometric coefficients, use `rr` (`ode.ODEReactionRule`) in the arguments.\n", "\n", "A `lambda` function is available too." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A+B>C|\n" ] } ], "source": [ "rl2 = ode.ODERatelawCallback(lambda r, p, v, t, rr: 2.0 * r[0] * r[1])\n", "rr1.set_k(0)\n", "rr1.set_ratelaw(rl2)\n", "print(rr1.as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.3. ode.ODENetworkModel\n", "\n", "`ode.ODENetworkModel` accepts both `ReactionRule` and `ode.ODEReactionRule`. `ReactionRule` is implicitly converted and stored as a `ode.ODEReactionRule`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m1 = ode.ODENetworkModel()\n", "rr1 = create_unbinding_reaction_rule(Species(\"C\"), Species(\"A\"), Species(\"B\"), 3.0)\n", "m1.add_reaction_rule(rr1)\n", "rr2 = ode.ODEReactionRule(create_binding_reaction_rule(Species(\"A\"), Species(\"B\"), Species(\"C\"), 0.0))\n", "rr2.set_ratelaw(ode.ODERatelawCallback(lambda r, p, v, t, rr: 0.1 * r[0] * r[1]))\n", "m1.add_reaction_rule(rr2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can access to the list of `ode.ODEReactionRule`s in `ode.ODENetworkModel` via its member `reaction_rules()`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['C>A+B|3', 'A+B>C|']\n" ] } ], "source": [ "print([rr.as_string() for rr in m1.reaction_rules()])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, you can run simulations in the same way with other solvers as follows:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nv3HiA640d7FzAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run_simulation(1.0, model=m1, y0={'A': 60, 'B': 60})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Modeling with Python decorators is also available by specifying a function instead of a rate (floating number). When a floating number is set, it is assumed to be a kinetic rate of a mass action reaction, but not a constant velocity." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "with reaction_rules():\n", " A + B == C | (lambda r, *args: 0.1 * reduce(mul, r), 3.0)\n", "\n", "m1 = get_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the simplicity, you can directory defining the equation with `Species` names as follows:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "with reaction_rules():\n", " A + B == C | (0.1 * A * B, 3.0)\n", "\n", "m1 = get_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When you call a `Species` unlisted as a reactant or product, it is automatically added to the list as an enzyme." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S+E>P+E|((1.0*E*S)/(30.0+S))\n" ] } ], "source": [ "with reaction_rules():\n", " S > P | 1.0 * E * S / (30.0 + S)\n", "\n", "m1 = get_model()\n", "print(m1.reaction_rules()[0].as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where `E` in the equation is appended to both reacant and product lists." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZl2ADyn5N/wN59y9oWOewc+jURv4BPi5c25dmX5OIgYNERERqRh0rktERERiRkFDREREYkZBQ0RE\nRGJGQUNERERiRkFDREREYkZBQ0RERGJGQUNERERiRkFDREREYkZBQ0Riwsy6mFl+aH0EEUlSChoi\nUmZmVhAKEQWltHwzexq/EFlD59y+oOsVkeBoCnIRKTMzq1dosw/wLNCSyOJMB5xzueVemIhUOOrR\nEJEyc87tCDcgx+9yOwvtzw2dOikInzoxs7vMbK+Z9TSzNWZ20Mymmln10GMbzGyPmf3ezMKBBTOr\nYmbPmdlmMztgZgtCi0GJSBxIxGXiRaTiKN5lmgY8DNwKpAPvhNpeoAfQDJgBzAWmhZ7zEtAq9Jxt\n+NU83zOzLOfc+lj/A0Tk9ChoiEh5qgQ86Jz7GsDMpgO3A/Wcc4eANWb2IXANMM3MmgB3A42dc9+G\nXmOMmfUA7gGeLOf6RaSMFDREpDzlhkNGyHbg61DIKLwvPAYkE0gFvix8OgWoAuyKZaEiEh0KGiJS\nno4W23bH2BceP1YTyAPaAwXFjjsQ9epEJOoUNESkIluK79Go75ybF3QxIlJ2uupERGLJTnzIsTnn\n1gJvARPMrJeZnWdml5jZr0LjNESkglPQEJFYisZEPXcDE4DngDX4q1I6Apui8NoiEmOasEtERERi\nRj0aIiIiEjMKGiIiIhIzChoiIiISMwoaIiIiEjMKGiIiIhIzChoiIiISMwoaIiIiEjMKGiIiIhIz\nChoiIiISMwoaIiIiEjMKGiIiIhIzChoiIiISM/8PgnzAAjebf7AAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run_simulation(10.0, model=m1, y0={'S': 60, 'E': 30})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Please be careful about typo in `Species`' name. When you make a typo, it might be recognized as a new enzyme with no attention:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A13P2G+A13B2G>A23P2G+A13B2G|(1500*A13B2G)\n" ] } ], "source": [ "with reaction_rules():\n", " A13P2G > A23P2G | 1500 * A13B2G # typo: A13P2G -> A13B2G\n", "\n", "m1 = get_model()\n", "print(m1.reaction_rules()[0].as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When you want to avoid the automatic declaration of enzymes, inactivate `util.decorator.ENABLE_IMPLICIT_DECLARATION`. If its value is `False`, the above case will raise an error:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RuntimeError('unknown variable [A13B2G] was used.',)\n" ] } ], "source": [ "util.decorator.ENABLE_IMPLICIT_DECLARATION = False\n", "\n", "try:\n", " with reaction_rules():\n", " A13P2G > A23P2G | 1500 * A13B2G\n", "except RuntimeError as e:\n", " print(repr(e))\n", "\n", "util.decorator.ENABLE_IMPLICIT_DECLARATION = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although E-Cell4 is specialized for a simulation of biochemical reaction network, by using a synthetic reaction rule, ordinary differential equations can be translated intuitively. For example, the Lotka-Volterra equations:\n", "\n", "$$\\frac{dx}{dt} = Ax - Bxy\\\\\\frac{dy}{dt} = -Cx + Dxy$$\n", "\n", "where $A=1.5, B=1, C=3, D=1, x(0)=10, y(0)=5$, are solved as follows:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nVfPyVHfudPT2kNhXvU8L7ynUpbuXeteJS/h8qg89pNqnj+oLL0RbGm+5+a2b9d5P7g2rja1bVfPz\nVRsaXBKqA9bsW6N9fttHd1Tu8K4Tl2hsVL3jDtV+/VSLi6Mtjbdc9MJF+vzK58NqY/581RNPdEmg\nTnhv83t6zP3HaFV9laP3t947Hd9r49oDSE83McoXX/Suj4LsAu4/+34uffFSSms9SPx1iT17TEjs\n6adNWOPSS6MtkbeEGwICE9449lh45x2XhOqAcQXjuGXqLVz+8uU0NDd411GYbNhgrP6lS40H+fVu\nXtQ01E1gbfnGN8y8W7vWJaE64IzhZzBz2Ey+N+97nmQFxbUCALMr0Us3DOCKiVdw0biLuOTFSyJe\nrKkrVOEvf4ETToCTT4ZPPjEZUt2ddQfWheXC+7niCvP9ecltp95GYXYh3/3HdyOS2hcMzc1w//3m\n5v/tb5vF3n6hJcbEDS2+FjaVbQpbASQnm/HzZ4/L9zx4zoNsKN3ALxb8wv3Gg3EXInXhMASkqtrU\npFpYqLp5s+OPhERzS7Oe99fz9N9f/3f1+XzeduaQlStVTztN9fjjVT/7LNrSRI6y2jLN+mWWNrc0\nh93WgQOqPXuqVjnzsEOmuqFaJ/9pst698G5vOwqChQtVJ05UnTlTdf36aEsTOT7d8amOeXCMK22t\nWKF6zDGqLS2uNNcpu6t26zH3H9Nl2IpECgGBOaDhkkvgBY/LZyQnJfPXi/7KJzs/4Q+L/uBtZ11Q\nUgI33wynn25CPUuWwNSpURUposxdMZdvjv0myUnhFzLKzz+8WO4l2WnZvH7Z6zy4+EH+vvbv3nbW\nBVu2mBO8LrsM7rjD5Pe7dbpePPDY0se47gR3qthNmmSOUF240JXmOqV/Tn9ev+x1bnzrRj7b+Zl7\nDQejLSJ1EYQHoKq6YIHqpElBfSRktpRt0cH3DQ57ATIUSktVf/pTs/D9/e+rlpREXISo4/P5dMyD\nY3ThtoWutfnXv6rOmuVacwH5fNfnWvDbAn1x9YuR6bANO3aofve7ZuF7zhzvvZ5YpKKuQnPvztWS\navcmz29/q/qd77jWXEDeWP+G9r2nr3607aMOXydIDyDqN/sOhQpSAbS0qI4erfqXvwT1sZDZXrFd\nxz00Tn80/0fa4vPY91OTrfLf/20m7g03qG7b5nmXMcv7W97XCX+c4GoYrrrafLeRCqMt37NcB9w7\n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\n8QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with reaction_rules():\n", " A, B, C, D = 1.5, 1, 3, 1\n", "\n", " ~x > x | A * x - B * x * y\n", " ~y > y | -C * y + D * x * y\n", "\n", "run_simulation(10, model=get_model(), y0={'x': 10, 'y': 5})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.4. References in a Rate Law\n", "\n", "Here, we exlain the details in the rate law definition.\n", "\n", "First, when you use simpler definitions of a rate law with `Species`, only a limited number of mathematical functions (i.g. `exp`, `log`, `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, and `pi`) are available there even if you declare the function outside the block." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TypeError('a float is required',)\n" ] } ], "source": [ "try:\n", " from math import erf\n", "\n", " with reaction_rules():\n", " S > P | erf(S / 30.0)\n", "except TypeError as e:\n", " print(repr(e))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is because `erf` is tried to be evaluated agaist `S / 30.0` first, but it is not a floating number. In contrast, the following case is acceptable:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S>P|(0.995322265019*S)\n" ] } ], "source": [ "from math import erf\n", "\n", "with reaction_rules():\n", " S > P | erf(2.0) * S\n", "\n", "m1 = get_model()\n", "print(m1.reaction_rules()[0].as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where only the result of `erf(2.0)`, `0.995322265019`, is passed to the rate law. Thus, the rate law above has no reference to the `erf` function. Similarly, a value of variables declared outside is acceptable, but not as a reference." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S+E>P+E|((1.0*E*S)/(30.0+S))\n", "S+E>P+E|((1.0*E*S)/(30.0+S))\n" ] } ], "source": [ "kcat, Km = 1.0, 30.0\n", "\n", "with reaction_rules():\n", " S > P | kcat * E * S / (Km + S)\n", "\n", "m1 = get_model()\n", "print(m1.reaction_rules()[0].as_string())\n", "kcat = 2.0\n", "print(m1.reaction_rules()[0].as_string())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Even if you change the value of a variable, it does **not** affect the rate law.\n", "\n", "On the other hand, when you use your own function to define a rate law, it can hold a reference to variables outside." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEPCAYAAACgFqixAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8jef7wPHPHUEqQogRau8Ze6+oPaoxqhRFS3WgOml/\n9VXVb0uH+halRlG1a8YeFXvvFbElSIjEiJF17t8fd5QSyTnJOec55+R+v17PK845z7ho81znucd1\nCyklmqZpWsbmZnQAmqZpmvF0MtA0TdN0MtA0TdN0MtA0TdPQyUDTNE1DJwNN0zQNOyQDIYS3EOIv\nIcQpIcRJIUQdIURuIcQGIUSIEGK9EMLb1nFomqZpz2ePJ4P/AaullOUBPyAYGAZskFKWATYlvdY0\nTdMMImw56UwIkRM4JKUs8dT7wUATKWWEEMIXCJJSlrNZIJqmaVqKbP1kUBy4IYSYIYQ4KISYKoTw\nBPJLKSOS9okA8ts4Dk3TNC0Ftk4G7kB14FcpZXXgHk81CUn1aKJrYmiaphnI3cbnDwPCpJT7kl7/\nBXwOhAshfKWU4UKIAsD1pw8UQugEoWmalgZSSmHpMTZ9MpBShgOhQogySW81B04AgUDvpPd6A8uS\nO95vkh8P4h8gpdRbOrYRI0YYHoMrbfrfU/97OvKWVvYYTTQImCOEOIIaTfRfYDTQQggRAryU9PoZ\nmUQmPlr3kR1C1DRNy9hs3UyElPIIUCuZj5qndqwQgg3nNzDv2Dy6V+5u/eA0TdMcjJRw6xbcvg13\n7qjt9m2Ij4eAgGf3j46G11+Hu3ehY8e0X9fmySA9ImIi+LnVz7y3+j2q+FahQt4KRofklPz9/Y0O\nwaXof0/rcvV/z7g4CAxUN/jo6Mc/4+NhypRn9791C4oXhxw5IGdOteXIAQUKJJ8MPD1h4EDw8oJi\nxeCTT9IWp03nGaSHEEIevnaYMj5lmH98Pt/v/J69/fbildXL6NA0TcvAEhJg7FiIjISbN9UWGQn3\n78PBg8/uHxsL3bpBrlxq8/ZWP318oLsNGjyEEMg0dCA7dDJ4MrZ+K/oRExfDvM7zEMLiv6emaVqy\npIQxYyAiAq5ff7xFRsLly5Ap07P7f/aZupnnyaN+5s6tflasCEbfnlw+GTyIf0CD3xvQp2ofBtcZ\nbGBkmqY5umXLIDQUrl6Fa9ceb7t2qWaVpw0frr6x588PefNCvnxqK1jQ+Ju7pVw+GQCcjz5Pven1\nWNx1MQ2LNDQoMk3T7C0hQd3YL19WN/lH26hR6ib+tLfeAg8P1c5esKD6WaAAVKoE7g7dU5p+GSIZ\nAKw5s4Z+gf3Y138fBb0KGhCZpmnWFh+vbvQFC8ILLzz7eaVKqmO1SBEoXPjx1qeP6mDVHnPpZHA/\n/j4hN0Oo6lsVgFFbRrH23Fo2995MlkxZjAxT07Q0mD5dNdmcP6+2a9dUIggMVDf+p5lM4KZXXzGL\nSyeDoxFHaTe3HRc+uIC7mzsmaSJgfgBFchZhQtsJBkeqadojDx/CmTNw+jSEhKihkBWSGRE+c6Ya\nZVOyJJQoob7lZ85s93BdUlqTgVPkWr/8fhTKUYi1Z9cC4CbcmN1xNuvPrWfm4ZnGBqdpGt9+q8bG\n58oFr70Gc+aoiVLP+zbfpw8MGADNm6tkoBOB8ZziyQBgxqEZLA1eyoruK/5578T1E/jP8mf166up\n9WJyk5w1TUuPmBg4fvzx1qwZvPzys/udPq2GYBYr5vodtI7OpZ8MALpW7Mr2y9sJuxP2z3sV81Vk\nSvspdF7YmYiYiBSO1jTNEvPmQalSanjl++/D9u1QqJD69p+csmXV/joROC+neTIAeH/V++TPnp//\nNPnPv94fsXkEf1/8m01vbNIdypqWCpNJtecfOKDG3CdX4iA0FO7d0zd4Z+TSHciPhNwM4cqdKzQt\n3vRf7z/qUH7R60UmtZ9kzzA1zSlcugTjx8O+fXDokJpYVb26SgQ9ehgdnWZNGSIZpORO7B3qTqvL\noNqDeLfWuzaMTNMcV1wcZEnm4Tg0FGbPhpo11ZY7t/1j0+wjwycDgLNRZ2nwewMWdFmAfzF/2wSm\naQ4kLAy2bYMdO2DnTlVP59Il5yuhoFmPTgZJNp3fRI8lPdj11i6K53pOb5emOTmTSRVFi4yEhg2h\nQQO1Va8OWbMaHZ1mJJ0MnjB+z3imHJzCzjd36pLXmlO7eFG17ydXXO3SJVWeQT8FaE/KcMngxr0b\neGX1wsPd45nPpJQMWDmAazHXWPbaMjK5ZUrmDJrmeKKiYNMm2LgRNmxQNfJXrIDatY2OTHMWLj/P\n4Gn9Avsx//j8ZD8TQjCh7QRi4mIYtnGYnSPTtLQZOVJN2po5E8qVU0ng2jWdCDT7cNong1Uhqxi5\nZSR7++997j4379+k7vS6fN7wc96s9qYtwtQ0iyUkJD92/8YNtbyhbvPX0iPDPRm0LtWayPuR7Luy\n77n7+GTzIbB7IMM2DmPLxS12jE7THpMSTpyA0aOhfn1Vuyc5efPqRKAZx2mTQSa3TLxX6z3G7x2f\n4n7l8pRjbue5vPbXa5y5ecZO0WmaKtT26adQpgy0aaOGgY4YAXPnGh2Zpj3LaZuJAKIfRFPilxKc\nev8Uvtl9U9x36oGpfL/ze3a/tRufbD7WDFXTkhUfr6p5vvwyVKumR/1o9pHhRhM98seRP2harCmF\ncxZOdd/PNnzG7rDdbOi1gazu+nlcS7/ERFXErXJlPatXcwwZNhlYwiRNvLroVbJlzsYfAX8g9Fc1\nLQ2khIMHVc3++fNVZc8ZM9S3f00zWobrQE6LR4vihNwMYUTQCKPD0ZzQqlVQvjx07QrZs6s5AYcP\n60SgGcNkUivL/fUXDB+efAVac2WoJ4NHrt+7Tr3p9fi/Rv+nh5xqFgkOVguz16mj+wA0+7p/H44d\nU18+Hm3Hj4OPD1Sp8njr0kU3E1nkdORpGs9szJ8d/6RFyRY2u47mfKSEkydV7R9NM8KtW6rU+KFD\nqkny0CG4cEFNRqxa9fHm5wfe3v8+1mH7DIQQF4E7QCIQL6WsLYTIDSwAigIXga5SyltPHWdxMoiI\niSB/9vxm77/t0jY6L+zM+l7rqepb1aJraa4nKkqVeZ4yRT1+HzoEHs9WO9E0q4qOVjf8/fvVgkMH\nD0JEhLrR16ihmiCrVYMKFZIvT/40R04GF4AaUsqoJ977HoiUUn4vhBgK5JJSDnvqOIuSwcOEhxT5\nuQj7+u+jqHdRs49beGIhH637iB1v7rDoOM117N+vFn5ZvhzatYO334bGjXUzkGZ9d+8+vvHv26d+\nRkSom32NGo+3MmXUmtJp4ejJoKaU8uYT7wUDTaSUEUIIXyBISlnuqeMsfjL4dP2nJMpExrYaa9Fx\n43aPY8qBKWx/czu5X9DjAzOaH39UP/v0gTx5DA1FcyHx8apNf88e2LtXbRcuqGHItWqprWZNtX50\nWm/8yXHkZHAeuI1qJvpNSjlVCBEtpcyV9LkAoh69fuI4i5NB6O1Qqv5WlfODz5PTI6dFx3687mP2\nXt3Lhl4bkq2EqmmalpKwMNi9W2179qhmxqJFVaHBOnXUz0qVzGvqSQ9HTgYFpJTXhBB5gQ3AIGDF\nkzd/IUSUlDL3U8elqQO5x5IeVPOtxif1P7HoOJM00WNJD+IS41jYZaEue+1iDh2CZctUZVBNS6/Y\nWPX/1M6dsGuX2mJjoV49qFtX3fxr1oScln0ntQqHTQb/upgQI4AYoD/gL6UMF0IUADYn10w0YsTj\nuQD+/v74+/uneo0DVw/QcUFHzg0+R+ZMmS2KLzYhlnZz21EqdykmtZukJ6U5OSlh7Vr44Qc1Fnvw\nYPjoI+s+kmsZw40bamnRR8uLHj6smnfq1Xu8lShhTD9TUFAQQUFB/7weOXKk4yUDIUQ2IJOU8q4Q\nwhNYD4wEmgM3pZRjhBDDAO/0diA/aeLeibxR5Y00rXJ2N/YuTWc1pX2Z9nzl/1Warq8ZLzBQTcKR\nEj77TE0Sy2zZdwMtg5ISzp1TZUa2bVM/IyLUN/5Hy4vWrq0mHToih3wyEEIUB5YmvXQH5kgpv0sa\nWroQKIIVh5Zay/V712nwewM+qvsR79Z615AYtPT56y/Ilk1VC9UPeFpKTCbV0bt1q7r5b92qnh4b\nNVJbgwaqrd9ZnigdMhmkh5HJAOB89Hkaz2jMTy1/4rVKzylAr2ma00lMhKNHISgItmxRCcDHRw0n\nbtxYJYBixZz3S4ROBjZwLOIYzWc3Z1bALFqXam1oLNqzYmNVobiePZ3nW5tmfyaTuvlv3qwSwLZt\n4OsLTZqAv79KAAUKGB2l9ehkYCM7Q3fyyvxXWN5tOfUL1zc6HA21bOTMmTBqlCoZMWuWWiVM00C1\n+YeEqCKCf/+tEoCPDzRtqjZ/f8hvfqECp6OTwXMERwZTLk+51HdMwdqza+m9rDfre66nim+VdMek\npY3JBIsWqY7hQoXgv/9Vozg07do1dfPfuFFtbm7QrJnamjaFF180OkL70ckgGffj71Pk5yLs7reb\nUrlLpetcC08sZMjaIQT1CaKMT5l0nUtLm+XL4Ztv1OphzZs7b5uuln737qn2/g0b1Hb1Krz0kvr/\nolkzKFUq4/7/oZPBcwz/ezg37t9gcvvJ6T7X74d+Z+SWkWzru40iOYuk+3yaZUwm9QueUX/JMzIp\n4cgRWLdObfv2qRo+LVqorUYN3W/0iE4Gz3Hj3g3KTijLifdOUMAr/b1E43aP49d9v7K179ZU113W\nNC3toqLUt/61a9Xm6QmtW0OrVqrd38vyaUQZgk4GKRi0ehAe7h780PIHq5xv1JZRLDy5kM29N5Mn\nm65sZk2xsfDLL+oX/Z13jI5Gs6dH3/5Xr1bb0aNqxE/r1morWdLoCJ2DTgYpCL0dSpXJVQgZFGKV\nm7eUks83fc6G8xvY9MYmvD28Uz9IS9WaNapkRLly8NNPqoyv5tpiYlSH76pVKgFky6bKiLdtq4Z8\n6vUkLGezZCCE6AqslVLeEUIMB6oDo6SUB9MWqpmBWXlo6dqza2lUpBGeWTytcj4pJUPWDmHv1b2s\n77k+TaUvNOXCBRgyRK0u9r//qRuB5rpCQ1W5kMBAVeqhdm1o314lAf0FIP1smQyOSSkrCyEaAt8A\nPwLDpZR10haqmYE5yDyDlEgpGbByAKdvnmb166utlmgymk6dVIXHjz+GrFmNjkazNilVYbfly2HF\nCrh8WSX89u1V+78RlT1dmS2TwWEpZVUhxGjgmJRyjhDikJSyWlqDNSswJ0gGoEpfv7n8TULvhBLY\nPZBsmbMZHZLTkVKPEHI18fFqpu+yZWrLmhVeeQU6dID69cHd3egIXZctk8Eq4ArQAqgGPAT2SClt\nOvvKWZIBQKIpkd7LenP93nVWdF+hF8fRMqQHD2D9eli6VDUBlSgBAQFqq1BBJ3x7sWUy8ARaoZ4K\nziStP1BZSrk+baGaGZgTJQOABFMCvZb24vbD2yx9bSlZ3XV7x9OWLlWLfhQsaHQkmrXExKjO38WL\n1fj/6tVVs19AABQubHR0GVNak4FbajtIKe8BN4CGSW8lAGctvZAjWXpqKffi7ln1nO5u7szuOJvs\nWbLTaWEnYhNirXp+Z3bjBrz6KgwbBpGRRkejpdfduzB3LnTsqBL7jBlq4tfZs6oY3KBBOhE4o1ST\ngRDiK+Az4POkt7IAs20Yk83NPzGfifsmWv287m7uzOk0B8/MnnRa2ImHCQ+tfg1n89df4OcHxYur\nTkQ/P6Mj0tIiJgbmzVMJ4MUXYc4c1Qdw6ZKaENa/vy4W6OzMaSY6guorOPCo01gIcVRKadNfa1s2\nE528cRL/mf6cG3zOJkNC4xPj6bGkB/fi77G46+IM2YcgJfTqpcoGzJypC8o5owcP1Nj/+fNVX0CD\nBmrFuIAA8NZTaxyWzZqJgFgppemJCzn9+MkKeSvQvERzJuydYJPzZ86Umbmd55I9S3YC5gfwIP6B\nTa7jyISAHj3U04BOBM4jPl5N/nvjDdUENGmSGv55/rxKDH366ETgqsx5MvgUKAW0BL4D3gTmSil/\nsWlgNu5ADo4MptGMRpwbfI4cWXPY5BoJpgR6L+tNREwEK7qv0MNONYckJezapZp+Fi1SZR9ef131\n8/jq8ltOx6blKIQQLVHJAGCdlHKDpReylD1GE/Va2otqvtX4qN5HNrtGoimRN1e8yaVbl1j5+kqy\nZ3HQVbS1DCckRCWAP/+ELFnUinHdu6shoZrz0rWJ0iDqQRReWbzInCmzTa9jkiYGBA7gZORJVr++\nmpwerjPlUkqYOhWKFlXNCZpju3kTFiyAP/6AixfVE0DPnlCtmp4H4CqsngyEEDHA8+7GUkppm7aV\nx9d3qnkGqTFJE4PXDGbPlT2s67mO3C/kNjqkdLt9W40iOXNGjTQpl74F5TQbedQPMHOmWgaybVvV\nud+ihZ4J7Ir0k4ETkFIydONQ1p5dy4ZeG8if3XkXYj10SLUpt2qlKozq6pKO59gxNQdgzhxVAK5P\nH+jSRdcCcnVpTQapfi8QQiS7pJeU8rKlF8vohBCMaT4Gz8yeNJnZhI1vbKRQjkJGh2Wx2bPho49g\n/Hjo1s3oaLQn3bqlntJ+/12tC9y7t6oMWrq00ZFpjs6c0UTHedxc5AEUB05LKSvaNDAXfDJ40o87\nf2Tivols6LUh3esz29vu3ZArF5Qta3QkGqh+m23bYNo0VRW0ZUt46y21HrBeCjLjsVszkRCiOvC+\nlPItSy9m4XXsmgz2X93PohOLGNNijN2uOfXAVL7a8hVre6ylcv7Kdruu5hpu3FAdwVOmqLb/fv1U\nZ7CeCZyx2XLS2b8kLWpj07UMjFA6d2lmHJ7Biesn7HbN/jX681PLn2g+uzm7w3bb7bqa85ISgoJU\n81yZMnD8uOoXOH4cPvxQJwIt7cxpJvr4iZduqJXOckspbTqQ0IhmorG7xhJ0MYgV3VfY9bqrQlbR\nZ3kf5nSaQ8uSLVM/wE6kVOUkatc2OhItOlqNBvrtN/UUMGCAGhGkZwNrT7Plk4EXkD1pywKsBF6x\n9ELO4P1a73Ps+jG2XNxi1+u2K9OOpa8tpdfSXiw8sdCu136e2Fg1bLR/f3io6+0ZZv9+ePNNVehv\n/37VL3DsmKoMqhOBZk16aOlT5h6by7jd49jTbw/CzrNwjkYcpc2cNgxvPJx3ar5j12s/KTJS1aT3\n8VEjh7LrSdN29fChKgsxYQJERMC776qEoJuANHPY7MlACLFBCOH9xOvcQoh1FgSWSQhxSAgR+MTx\nG4QQIUKI9U+e2xF0q9SNivkqcv3edbtf2y+/H9v6buPHnT8yMmgkRiTD06ehbl1VoXLxYp0I7Cks\nDP7v/9Rs7j//hC+/hHPnYOhQnQg02zN7DeTU3kvh+I+AGoCXlLKDEOJ7IFJK+b0QYiiQS0o5LJnj\nXHpoaUoiYiJoO7cttQrWYmLbiWRys8/4QJMJatWC999X30Q123tUJO5//4MNG1Sl14ED9bBdLe1s\n2WeQKIQo+sSFigGm5+7976AKAW2BacCj4DoAs5L+PAsIMDPWDCN/9vwE9Q7ibNRZXl30qt1KYLu5\nwY4dOhHYQ1ycmhlcu7aaGNaggaoVNH68TgSaMcx5MmgNTAG2Jr3VGHhbSrk21ZMLsQj4FsgBfCKl\nfFkIES2lzJX0uQCiHr1+6tgM+2TwSGxCLH2W9yH0digruq9wiXpGGV1UlBoRNHGiuukPGQLt2qlE\nrGnWYLNyFFLKtUKIGjyeWzBESpnqSrZCiPbAdSnlISGE/3POLYUQz73jf/XVV//82d/fH3//ZE/j\nsrK6Z2VOpzkM2ziMBr83YE2PNRTzLmZ0WFoanD0L48aptYM7dFCLyFepYnRUmisICgoiKCgo3ecx\n58nADegBFJdSfp1Uq8hXSrk3leO+BXoBCagyFjmAJUAtwF9KGS6EKABsllI+U+/SUZ4Moh9Ecy/+\nnuE1hMbvGc/oHaMJ7B5I9QLV032+2FhYtgxee80KwWnPtWcPfP89bN0Kb7+t+mMKFjQ6Ks2V2bLP\n4FegHtA96XVM0nspklJ+IaUsLKUsDnQD/pZS9gJWAL2TdusNLLM0aHuafXQ2A1YOMDoMBtUZxPg2\n42n1ZytWhaxK17liYqB9ezV8MTHRSgFq/zCZYOVKaNxYJdsmTeDCBfjvf3Ui0ByXOcmgjpTyPeAh\ngJQyCkjLajCPvuaPBloIIUKAl5JeO6x3ar7DmZtnWHs21S4Sm+tUvhOB3QPpF9iPSfsmpekcN29C\ns2ZQrJha5EQXMrOe+Hg1L8PPD4YPV/MDzp6FwYP1EF3N8ZnTTLQHqA/sl1JWE0LkBdZLKavZNDAH\naSYCCDwdyNCNQznyzhGbr4pmjnNR52g7ty0dynRgTIsxuAnzeh+vXVMLmrRrB6NH65WtrOXBA5g+\nHX78Uc0UHjZMVQ7V/76aEWzZTDQeWArkS+oH2AF8Z+mFnFn7Mu0pnLMwE/dNNDoUAErmLsmut3ax\n9+peuizswr24e2Yd17evWuN2zBh9o7KGO3dUUi1eXM0RmD8fNm9WC/7of1/N2ZhVjkIIUR5olvRy\nk5TylE2jwrGeDACCI4NpPKMx5wafwyurl9HhAGro6YCVAzh+/Tgruq+goFfKDdJ37kAOmy5WmjFE\nRcEvv6jhoS1awBdfQKVKRkelaYot1kB+elD7o5NL+KfvwGYcLRkAhN0JM3xU0dOklHy3/Tsm75/M\niu4rqOpr1sRwLQ0iI2HsWDVP4JVX4PPP9QpimuOxRTK4yONO36dJKWUJSy9mCUdMBo5s0YlFvLf6\nPX5r/xudyncyOhyXcuOGWud56lS17vOwYaoDXtMckdUnnUkpi6UrIs2uXq34KsVzFafjgo6cunGK\n/uW+IG9eoduu0yEyUnUKT5miFpM5dAiKJLsiuKY5P7OGoQghXhFC/CSE+FEI8bKtg9LSpmbBmuzp\nt4f52/ZTvEIU23bphQjSIipKVQ8tW1YtMH/4MPz6q04Emmszp4T1aGAwcAI4BQwWQmSo0UTPY5Jm\n1euzq/iogtyespiKXZbw8YlGhN0JMzokp3HnDnz9tVpOMiICDhyAyZN1EtAyBnOeDNoBLaWUv0sp\npwOtgfa2DcvxLQ9eTu9lvVPf0Y6uXFETyj752I09k/rRpXwX6kyro9dXTsWDB/DDD1CqFJw5A7t3\nqxXFdL+AlpGYkwwk8OQCNN48v2M5w2heojnbL29nw7kNRocCwPXr0Lw59OunZrwKIRjacCi/tf+N\nDvM6MO3gNKNDdDjx8WpkUOnSKgEEBakZxKVKGR2ZptmfOTOQu6NKRgQlvdUEGCalnG/TwJxgNNGq\nkFUMWTeEY+8ew8Pdw9BYrlxRK5MNHvzsZ8GRwQTMD+Cl4i8xrvU4smTKYv8AHYjJpOoyffml+vb/\n7bdqUR9NcwVWH1r61MkLoqqNSmCvlDLc8hAtDMwJkgFA54WdqZS3EiObjjQ6lBTdfnibN5a9wc37\nN1n06iIKeBUwOiRDbNyolpF0c1Ozh5s1S/0YTXMmtphn8HSd5KcnnR209GKWcJZkEHYnjGq/VWNL\nny1UyFvB6HBSZJImRm0ZxdSDU1nQZQENijQwOiS7OXIEPvsMzp9XTwJduuiSERmVcKH/8MndI22R\nDEzAceDmc4JoaunFLOEsyQBg0/lNVPGtQp5seYwOxSyrz6ymz7I+DG88nIG1B7rUL8fTQkNVc9C6\ndaqS6NtvQ2bjaw1qBkq6WRodRro97+9hi2QwBHgVuAUsAJZKKe9aeoG0cqZkYIQ1a6B167R/uz0X\ndU41ceWrxG/tf8Mzi6d1AzTY3buqGWjyZFVK+rPPdF0mTXGlZPDzzz/j6elJ//79//W+VauWSinH\nSSkboOYYFAI2CSEWCSF08RuDjR8PH36obnhpVTJ3SXa+tRN3N3fqTKvD6cjT1gvQQImJasZwmTIQ\nFqaah775RicCzTXly5ePe/fMq1qcmlSHlkopzwHLgfWoTuSyVrmyliaLF6tvvGvWpP8Gly1zNma8\nMoMP6nxAwxkNWXRikXWCNMimTVCtGsyZo1YamzULCjlWXUFNc1jPrU0khCiJWq7yFeAyqqnov1LK\nB3aKTXvKjh3wzjuq/bt4ceucUwhB/xr9qVGwBl0WdmHb5W380OIHsrpntc4F7ODsWfj4Yzh2TNUS\n6thRdw5rmqVSejI4A3QF1gC7gCLAu0KIj4UQH9kjOGeUYEqg7Zy2XL171arnPX9ejYD54w+o/vQ4\nLyuoXqA6BwccJOxOGA1nNORC9AXrX8TK7t5Vw0Tr1oV69eDkSejUSScCTUuLlJLB18ASwARkT9q8\nnvipJcPdzZ3aL9bm7cC3rdpJ5emp+gratLHaKZ/h7eHN4q6L6VG5B3Wm1WHpqaW2u1g6mEwqKZYr\nB+Hh6olg2DDwMHben6alW7FixciWLRteXl74+vrSt29fq/UJpEpK6ZCbCs05xSbEyiqTqsgZh2YY\nHUqa7Q7dLYuPKy4HrhooH8Q/MDqcfxw8KGX9+lLWrCnlrl1GR6M5I0e+txQrVkxu2rRJSinllStX\nZKVKleSwYcOS3ReQc+bMkT///PMz78s03HPNW0lds0iWTFmYFTCLzzZ8xpU7V4wOJ03qFKrDwQEH\nCb8XTr3p9Qi5GWJoPFFR8N57ajhtnz6wZ49qHtI0V1WwYEFat27N8ePH7XI9nQxspIpvFQbVHkTf\n5X0dstS1Obw9vFnYZSEDagygwe8NmHl4pt3HZ5tMMGMGVEia3H3qFPTvr8pJaJorevQ7Fhoaypo1\na6hui07CZKQ0mugDKeX/hBANpZTb7RKNi/m80eeUPVUWgeU9mqdPq+qZmTLZIDALCCF4p+Y7NCjc\ngO6Lu7Pu3Domt5tMTo+cNr/20aNqwlh8vBoqWrOmzS+paYB1BiGk5XuTlJKAgADc3d3JmTMn7du3\n54svvkh/MGZI6fvVm0k/x9sjEFfk7uZO14pdLS73cO4cNG6sVthyFJXzV2Zv/714Z/Wm2m/V2Bm6\n02bXiomBTz9VJbnfeEOVl9aJQLMnKdO/pYUQguXLlxMdHc3FixeZMGECWbPaZ5h3SsngpBDiDFBW\nCHHsqe3cdtGEAAAgAElEQVSoXaLLgO7ehVdegf/8B2rUMDqaf8uWORuT2k9ibKuxdFrQia+CviLB\nlGDVa6xYARUrqpXGjh+HAQN0k5Cm2cNzm4mklN2FEL6omccvQxraOjSLSAl9+6qO0ffeMzqa5wso\nF0DtF2vTd3lfGs9ozOyOsymZu2S6znnlilqL4dgx1Ufw0ktWClbTNLOk+J1LShkupfQDrvF4rsEV\nKeVFO8TmkhJNic/97Mcf4dIlmDDB8SdOFfQqyJoea+hasSt1p9dl+sHpaepcNplg0iSoWlU9ERw9\nqhOBphnhuU8Gjwgh/IFZwKWkt4oIIXpLKbfYMjBXdP3edV6a9RJb+mzBJ5vPvz4zmVQfweLFzjN5\nyk24MaTuEJqXaE7PJT1ZEbKCqS9PJZ9nPrOOfzQySErYsuXxiCFNy6guXDBu5r85rbFjgZZSysZS\nysZAS+Dn1A4SQngIIfYIIQ4LIU4KIb5Lej+3EGKDECJECLFeCOGd2rlcRT7PfLQs2ZJ+gf2e+Rbt\n5qYKrBUpYlBw6VApXyX29NtD+TzlqTK5CsuCl6W4f1wcjBoFjRpB9+6wbZtOBJpmNHOSgbuU8p/6\nxlLKEMx4opBSPgSaSimrAn5AUyFEQ2AYsEFKWQbYlPQ6w/iu2XdcunWJ3w78ZnQoVpXVPSujm4/m\nr1f/4pP1n9B7WW9uPbz1zH4HDqiRQbt3w6FD8P77uoNY0xyBOb+GB4QQ04QQ/kKIpkKIacB+c04u\npbyf9McsQCYgGuiAanYi6WeAhTE7tazuWZnfZT7DNw/nWMQxo8OxugZFGnDknSNkz5wdv0l+rDu7\nDoCHD1X9oLZtVXG5lSuhcGGDg9U07R/mJIN3gVOoRW4GASeS3kuVEMJNCHEYiAA2SylPAPmllBFJ\nu0QA+S2O2smV8SnD2JZj6bW0l9POTk6JZxZPJrabyO+v/M6AlQN4ZXp//Grd4exZ1UHco4fjd5Br\nWkZjbnPPT0mbRaSUJqCqECInsE4I0fSpz6UQ4rlDUL766qt//uzv74+/v7+lITishjl6sWBbE3jb\nzWUH7TYs2JyAa0eZsvNTPLtV5u1uU8mfv6XRYWmaSwkPD//XvTKtnrsGsrUJIYYDD4B+gL+UMlwI\nUQD1xFAumf2lvevg2EtcHDRsCK+/DkOGGB2Nbezfr2YPV6gAv/4KR+5uoH9gf5oVb8ZPrX7C2yPD\njBvQHIwrrYE8Z84crl+/zpAnbiRWXwM5vYQQeR6NFBJCvAC0AA4BK4DeSbv1BlIeeuKCvvwSfH3h\ngw+MjsT64uNhxAho1w6GD4dFiyBfPmhRsgXH3j2Gh7sHlX6txPLg5UaHqmnaE1JsJhJCZALGSCk/\nScO5CwCzhBBuqKQzW0q5SQhxCFgohHgLuIhaTS3DWL8e5s5Vcwpcrd385Eno1Qvy51cjhQoW/Pfn\nXlm9mNhuIl0rdqVfYD/mHp/LL61/IX/2DNdtpGkOJ7UZyIlAQ2FppTV17DEpZXUpZVUppZ+U8oek\n96OklM2llGWklC2llM+OP3RRkZGq3MQff0CePM9+vun8JqfsUDaZYNw4aNJErdG8atWzieBJTYo1\n4eg7RynuXZzKkyobUhpb07R/M6eZ6DCwXAjRSwjROWnrZOvAXFGuXGpiWXLlFkzSxNdbv2Zk0Ej7\nB5YOYWHQsiUsXKjmDvTvb94TzwuZX2B089Gs67mO8XvH03x2c87cPGP7gDXNwW3fvp369evj7e2N\nj48PDRs2ZP9+s0bzp4s5ycADiAJeAtonbS/bMihXlSkTPG9AlJtwY0GXBUw/NJ2VISvtGldaLVoE\n1aurv9PWrVAyDbXqqhWoxp5+e2hfuj31ptfjm63fEJcYZ/VYNc0Z3Llzh/bt2/PBBx8QHR3NlStX\nGDFihF3KWNttNJGlXHk0UUp2hu4kYH4A2/puo2yeskaHk6y7d2HQINi5Uz3p1KplnfNeunWJgWsG\nci7qHJPbT6Zx0cbWObGmPcGRRxPt37+fFi1aEB0dneq+dh9NJIQoK4TYJIQ4kfTaTwjxpaUX0sxT\nv3B9vmv2HR3md0i2nIPR9uxRFUYzZ4aDB62XCACKehdlRbcVfPPSN/RY0oM3l79J5P1I611A0xxc\n2bJlyZQpE3369GHt2rVmJQVrSXXSGTAV+BSYnPT6GDAP+MZWQbmSBw/ghRcsO+at6m8RHhPO9XvX\nHWY8vskE338PY8eqktOdO9vmOkIIOpXvRIsSLRgRNIKKv1ZkVNNR9KveDzehixhp9iFGpn+onxxh\n+dOHl5cX27dvZ8yYMfTv35/w8HDatm3L1KlTyZfPvGrAaZVqM5EQYr+UsqYQ4pCUslrSe4eTCtDZ\nLjAXaCbauVONrjl82LmLsV27poaMxsXBn3/at7LqkfAjvLf6PRJMCfza9ldqFHSw5d80p+PIzURP\nO336ND179qR06dLMnTv3X58ZMenshhCi1BMX6oJa7EZLwf370Ls3fP21cyeCtWtVJ3HDhvD33/Yv\nsV3Ftwrb+m7jnRrv0G5uO95d+S5RD6LsG4SmGaRs2bL07t2b48eP2/xa5tymBgK/AeWEEFeBDzGz\nUF1G9sUXUKcOBDhpTdb4eFVdtH9/mD8fvvoK3M1pVLQBN+FG32p9OfX+Kdzd3Ck/sTy/7f8txVXj\nNM0ZnT59mrFjx3LlyhUAQkNDmTdvHvXq1bP5tVNNBlLKc1LKZkAeoKyUsoFe9jJlW7eqYZe//GLd\n895+eNu6J3yOy5fVBLLjx1UncZMmdrlsqnK9kIvxbcezvud6/jz2J7Wn1Wb75e1Gh6VpVuPl5cWe\nPXuoU6cO2bNnp169evj5+fHTTxbXCbWYOaOJ8gghxgPbgS1CiP8JIXxSOy6jSkhQ36YnTYLcua13\n3l2hu6g5tSY379+03kmTsWqVGiEUEACBgZA3r00vlyZVfKuwtc9WPqn3Cd0Xd+f1xa8TejvU6LA0\nLd0KFizIggULCAsLIyYmhrCwMCZNmkT27Nltfm1zmonmA9eBTkAX4AawwJZBOTN3d3VD7dDBuuet\nV7geHct1JGBBAA8THlr35KgkNmwYvPuuWof5s88cu69DCEH3yt0Jfj+YUrlLUfW3qowMGsn9+Pup\nH6xp2jPM+XX3lVKOklJekFKel1J+QwZckMYSpUqlvk9ajG4+mhe9XqTnkp5WrWF07Ro0a6aKyx04\noDqLnYVnFk++bvo1B98+yKnIU5SdUJY/j/7plDWeNM1I5iSD9UKI7kmrlrkJIV4D1ts6MO1ZbsKN\nWQGziLwfyUfrPrLK8LgtW9SaxC+9BKtXO2azkDmKehdlfpf5zO88n1/2/ELdaXV1f4KmWeC5yUAI\nESOEuAv0B+YAcUnbPOBt+4SnPS2re1aWdVvG5duXuRN7J83nkRJ+/BFeew1+/12tQZApkxUDNUiD\nIg3Y3W83H9T5gB5LetB5YWddAE/TzPDcZCClzC6l9Era3KSU7kmbm5TSy55BOrrYWPtez9vDmyWv\nLSGnR840HX/3rkoCCxbA3r3QqpWVAzSYm3Cjh18Pgt8PpmaBmtSbXo/BawZz494No0PTNIdlVhdh\nUj2iDkKITo82WwfmLBIT1dDL7U7SInH6tJr/kDMnbNtm/0lk9vRC5hf4vNHnnHr/FADlJ5bn223f\nci/unsGRaZrjMWdo6Qzgd6AzqnT1o00DJk4EDw9o0MDoSFK3YgU0agQffQRTp6q4M4K8nnn5pc0v\n7O63m8PhhykzoQxTDkwhwZRgdGiaQYQQTr9Z/d/EjNpEJ4GK9i4U5Ay1ia5cgSpV1FNBuXLGxiKl\n5MrdKxTKUeiZz0wmGDUKpk2Dv/5STwYZ2b4r+xi2aRhhd8L4puk3dK7QWRfBy4DGjRtn8+Jv9mCt\n2kTmFBjYB1QATlh6clf34YdqXL7RiQDgSMQR2sxpw8ZeG6mYr+I/79+5A2+8oZbc3LcPfH0NDNJB\n1HqxFht7bWTD+Q18sekLRu8YzX9f+i+tSrayyTcuzTF5enpy/fp1o8NIN09PT6ucx5wnA39gBRAO\nPOoqlVJKP6tE8PzrOvSTwdq1MHAgHDtmeYlqW5lzdA6fbfyMoN5BlPYpzdmz8Morqmnol18gSxaj\nI3Q8UkqWnFrCl5u/JG+2vPz3pf/SqGgjo8PStDRL65OBOcngHKo43XHgn5k8tq5P5OjJICpKrf/r\nZ9OUaLnpB6fz9dav+W+pLXz8VjG++ko9vWgpSzAlMOfoHEZuGUlpn9KMajqK2i/WNjosTbOYLZPB\nLiml7UvmPXtdh04GjkpKePWH8SyL+Jm5LYPo2sqFhwvZQFxiHDMOzeCbbd9QJX8VRvqP1GsoaE7F\nlsngV8AbCERNOgPVTLTE4igtCUwnA4vFx6umq5074Y2xM+lVrzW+2XUnQVo8THjItIPT+G77d9Qs\nWJMRTUZQvUB1o8PStFTZMhnMTPrjv3aUUva19GKW0MnAMjdvwquvQrZsMHcu5MhhdESu4WHCQ6Yc\nmMKYHWOoUaAGI5qM0E8KmkOzWTIwik4G5jt9Gtq3V53FY8a4RlkJR/PoSWH09tFU9a3Kl42/pG6h\nukaHpWnPsOWTwYyn3pIAUso3Lb2YJRwtGTx8CK+/DrNmgZcDFePYvBm6dYNvv4W33jI6Gtf3MOEh\nMw/PZPT20ZTKXYovG39Jk6JN9JBUzWHYcg3kVcDKpG0TkBPIcPP5f/gBhHCsRPD77yoRzJtnXiIY\n/vdwTlzX00XSw8Pdg3dqvsOZQWfoUbkH/QP703BGQ1aFrHKaRdY1LTkWNxMJIdyAHbYeYeRITwah\noVC1qqr1X6yY0dGoGcXDh6tCcytXmj/pbc7ROXyy4RNWv76aagWq2TbIDCLRlMhfJ//iu+3fATCs\n4TC6VOiCu5tBC0ZrGZ7d+gyEEOWAlVLKVJdwEUIUBv4A8qGal6ZIKX8RQuRGrZZWFLgIdJVS3nrq\nWIdJBj16QMmS8PXXRkeiKqT27QsXL8Ly5ZavP7D01FIGrBzAolcX0aSYgyxu7AKklKw+s5oxO8YQ\ndieMT+p/Qt+qfXkhs4PMSNQyDFv2GcTweCSRBCKAYVLKxWYE5YtaKe2wECI7cAAIAPoCkVLK74UQ\nQ4FcUsphTx3rEMlg1y41Sic4GOywDGmKbt6Ejh1VSYlZs9I+8/nvC3/T7a9uTOswjQ5lrbw+p8aO\nyzsYs2MMe67s4f1a7/N+rffxyaaXDdfswylGEwkhlgETkrYmUsqIpIQRJKUs99S+DpEMVq5Uncdd\nuhgbx4UL0KYNvPyyGjGU3vWJ913Zx5ebv2T166vJ5KaHH9nCyRsn+WnnTywJXkKPyj34sO6HlMxd\n0uiwNBdn9WQghEhx6qqU8rJFFxKiGLAFqARcllLmSnpfAFGPXj+xv0MkA0dw8KBKAp9/riaVac7l\n2t1r/LLnF6YenEqTYk34uN7H1C9c3+iwNBdli2RwnKcmmiXJC+SVUpr9dTKpiWgLMEpKuUwIEf3k\nzV8IESWlzP3UMXLEiBH/vPb398ff39/cS7qMdeugVy+YPBk66SWFnFpMXAwzD8/k590/kzdbXobU\nHULn8p3JnCmz0aFpTiwoKIigoKB/Xo8cOdK2zURJ3+yHAc2B/0kpx5t5XGbUsNQ1UspxSe8FA/5S\nynAhRAFgs6M2Exlp9mz45BNYssQ5Fs/RzJNoSiQwJJBxu8dxLvocA2sNpF/1frpfQbMKm80zEEKU\nSSpJsRbVAVzegkQggOnAyUeJIMkKoHfSn3sDyywJOiP48Uf48ksICrJfIpBSMmLzCK7evWqfC2ZQ\nmdwyEVAugKA+QSzvtpyTkScpNb4Ubwe+zbGIY0aHp2VQz00GQojKQoj5wGLUZLOKUsqpUsp4C87f\nAOgJNBVCHEraWgOjgRZCiBDgpaTXDmPrVlX0zQgmE3z8McycCTt2QPny9r1+lkxZqDutLkfCj9j3\nwhlU9QLVmRUwi9MDT1MkZxFaz2lN01lNWXxysV6WU7OrlPoMEoEwVBOP6amPpZRysE0DM6iZ6PRp\naNhQDSX1sfNTe3w8vPmmGjkUGAi5cqV+jC0sOL6AgWsG8nuH33m5rF7u2p7iEuNYemopE/ZN4EL0\nBQbUGED/Gv119VnNbLboQO6T9MendxCoZDDL0otZwqhk0KkT1K0Ln31m3+vevw9du6o/L1yoqo8a\naXfYbjov7Myg2oMY2mCorr1jgMPhh/l1368sOrmIViVb8V6t92hUpJH+b6GlyCnmGVjCiGSwYwd0\n766eDuy5lOWtW2roaLFiqt5QZgcZXHLlzhW+CvqKCW0nkNU9q9HhZFi3Ht7ijyN/MGn/JASCd2q+\nQy+/XuR6waBHR82h6WSQTlKq5qG334bevVPf31quX4dWraBxY/j55/RPJtNcl5SSbZe3MXn/ZFaf\nWU1AuQD6V+9P/cL19dOC9g+dDNLp779h8GA4csR+6wGEhkLz5uppZMQIVRVV08xx494NZh2ZxZQD\nU8icKTP9q/enp19P8mTLY3RomsF0MkgnKSE8HAoUsM/1QkKgZUv44AP48EP7XNNaHsQ/IKt7VtyE\nfowxmpSSLZe2MO3gNFaGrKR1qda8Ve0tmpVopv/7ZFC2LFRXFvgVVXCuohDCD+ggpfwmbaGaGZgL\nTzo7dgxat1ZVUJ1xQZovNn3B8evHmRkwk9wv5E79AM0uoh9EM/fYXKYdmkbUgyj6VOlDn6p9KJ6r\nuNGhaXZky2SwFfgUmCylrJY0key4lLJi2kI1MzAXTQb796slKseNUwvTOKO4xDiGbRzGklNLWNBl\nAXUK1TE6JO0ph64dYsbhGcw9Nhe//H70qdqHzuU745nF0+jQNBuzZTLYL6WsKYQ4JKWslvTeYSll\n1TTGal5gLpgMduxQJainTlXrFTu7R2sjfN7wc4bUHaI7MR1QbEIsgSGBzDw8kx2hOwgoF8Abfm/Q\npFgT3YzkomyZDNYAg4BFSU8GXYC3pJRt0haqmYG5WDIIClLzCGbPVqOHXMX56PO8vvh1+lbty4Ca\nA4wOR0tBeEw4c4/N5Y8jfxD1IIqefj3p5deL8nntPM1dsylbJoOSwBSgPhANXAB6SCkvpiFO8wOz\nQzKYNg28vW2/VsGGDWq1tIULwRULr8YnxmOSJj0XwYkcCT/C7KOzmXd8Hr7ZfelZuSfdKnWjgJed\nRlBoNmPz0URCCE/ATUp519KLpIWtk8H9+2opyzVr1PrGtrJmjZq3sGSJmsegaY4k0ZRI0MUg/jz2\nJ8uCl1GjQA1er/w6nct3JqdHTqPD09LAlk8GHkBnoBiQicflKGy6IrCtk8HYsaoNf3Gqi3emXWAg\n9Oun1iquW9d213FUcYlxZMmUxegwNDM9iH/AqjOrmHNsDn9f+JuXir9Et4rdaF+mve54diK2TAbr\ngFuo8tWJj96XUv5k6cUsCsyGyeDePfVUsH49+PnZ5BKsWAH9+8OqVVCzpm2u4ciklNSdXpcOZTow\ntOFQ3N3cjQ5Js8Cth7dYFryMecfnsTtsN21KteG1iq/RpnQbPNw9jA5PS4Etk8FxKWWlNEeWRrZM\nBj/8APv2qTZ8W1i+XJW1yKiJ4JHQ26H0C+zHzfs3mRkwk0r57P6/kWYF1+9dZ8mpJSw8sZBD4Ydo\nV7odr1Z4lValWunE4IBsmQymABOklEfTGlxa2DIZ9Oyp1hOuaIOZEjoR/JuUkumHpvP5ps8ZUmcI\nnzX4TC/z6MTCY8JZcmoJi04u4nD4YdqWbkvn8p1pXao12TIbXGpXA2xTwvoEah2DTEBp1Cii2KSP\npZTSRg0s/1zf6YaWPuoj0IngWZdvX+adle/wcb2PaVaimdHhaFYQHhPOsuBl/HXyL/Zd3UfLki3p\nVK4T7cq0I0fWHEaHl2HZIhlEA1VRHcbPcIWhpdb0aNTQqlVQq5bR0TgmKaWemOaiIu9HsuL0CpYG\nL2XLxS00LNKQjuU60qFsB/Jnz290eBmKLZLBPzOOjeBMyWD9etX0tGJFxhw1pGlPuhN7hzVn1rDs\n9DLWnl1LxbwVeaXsK3Qo24GyecoaHZ7Ls0UyCAPGkvyTgZRSjrX0YhYF5iTJYPNmeO01WLrUfgvX\nu5r5x+dTr1A9inoXNToUzcpiE2IJuhjEsuBlrAhZgVcWLzqU7cDLZV6mXuF6epSZDaQ1GaRUnCQT\n4AVkT2bzSkuQRkqwwdriO3aoRLBwoU4E6XHp1iWqT6nOqC2jeJjw0OhwNCvK6p6VVqVaMan9JMI+\nDGNOpzl4uHsweO1gfH/0pdfSXiw8sZBbD28ZHWqGlyGaieLj1XyCtWuhqJW+fO7fD23bwp9/qnUJ\ntPS5eOsiH637iCMRRxjXahzty7TX/QsuLvR2KCtDVrLyzEq2XdpG9QLVaVe6HW1Lt6VC3gr6v38a\n6T6DFMyYAXPmwMaNVjkdR4+qBDB1qlq7WLOedWfX8eG6D3m98ut82fhLo8PR7OR+/H3+vvA3q0JW\nsfrsagDalmpLm9JteKn4S2TPkt3gCJ2HLZKBj5TyZrojSyNrJYPERKhQASZPhqZN0x9XSIgqNjdu\nnKpCqllffGI8d+Pu6oVzMigpJaciT7H6zGrWnl3Lnit7qP1ibVqVbEWrkq3wy++nnxpSoJe9fI7F\ni9WM41270r/G8KVLauH6r76Cvn3THZqmaWaIiYvh7wt/s+7sOtadW8e9+Hu0LNmSliVa0rxEcz10\n9Sk6GSRDSqhdG/7v/yAgIH3xhIdDo0YwcKBat1izv+DIYLZe2krfqn31LOYM7FzUOdadW8eG8xsI\nuhhE0ZxFaVGiBc1LNKdR0UYZfia0TgbJuH8fRoyAMWPALR2LOkVFqaahV1+F4cPTFZKWDidvnGTw\nmsFcun2JUU1H0bViV71aVwaXYEpg75W9bDy/kY3nN3Lw2kFqFqxJs+LNaFaiGbUK1spwXxx0MrCR\ne/egRQuoVw9+/DH9TU1a+m06v4nPN31ObGIsI/1H8krZV3QbsgbA3di7bLu8jU3nN7HpwiYu3LpA\nwyINaVqsKU2LNaWqb1UyuWUyOkyb0snABuLioEMHKFAAfv9dJwJHIqUkMCSQMTvGsKTrEt1urCXr\nxr0bbLm0hc0XNrP54mauxVyjcdHG+Bf1p0mxJlTJX8XlkoNDJgMhxO9AO+C6lLJy0nu5gQVAUeAi\n0FVK+cyME6OTQWKiWqry4UP46y9w1xMlNc3phceEs+XiFjZf3MyWS1sIjwmnYZGGNC7SmCbFmlDN\nt5rTNys5ajJoBMQAfzyRDL4HIqWU3wshhgK5pJTDkjnWsGQgJQwaBCdOqAJ0Hrpku9MJjwnH5wUf\np//F1mwrPCacbZe2seXSFrZe2srFWxepU6gOjYo0olGRRtQpVMfpOqQdMhkACCGKAYFPJINgoImU\nMkII4QsESSnLJXNcmpNBVBTkTscQ9W++UUNSg4Igp14G1ikN3TCUBScW8En9T3iz2ptO9wutGSPq\nQRQ7Lu9g++XtbLu8jSMRR6iUrxINCjegYZGGNCjcwOGbJJ0pGURLKXMl/VkAUY9eP3VcmpJBdDSU\nLg1nzkCuZ86auqlTYfRoVXfI19fy4zXHsTtsN2N2jGHH5R0MqDGAgbUHOvwvsuZYHsQ/YN/VfSpB\nhG5nZ+hOfF7woX7h+tQrVI/6hetTKV8lh+p3cMpkkPQ6Skr5zPf4tCaDMWNU884ff1ge67Jl8N57\nsHUrlCpl+fGaYwq5GcLPu35m04VNnHr/lEP94mrOxSRNBEcGszN0JztCd7ArdBdX716l1ou1qFeo\nHnUL1aXOi3XI65nXsBidKRkEA/5SynAhRAFg8/OaiUaMGPHPa39/f/z9/VO8VlwclCihFpipUsWy\nOHfsUBPT1q6FGjUsO1ZzDvGJ8boPQbO6qAdR7A7b/c+298pefLL5UOfFOtR5sQ61X6xNtQLVbLZe\ndFBQEEFBQf+8HjlypNMkg++Bm1LKMUKIYYC3tTqQZ8+GWbMsL0gXHAxNmqhjW7e27FjN+R0JP0IB\nrwLk88xndCiaC3j09LD3yl72hO1hz5U9BEcGUz5veWoVrKW2F2tRIW8Fm6zn4JBPBkKIeUATIA8Q\nAfwHWA4sBIpgxaGlUkK1avDdd9CmjfkxXrsG9eurekO9e5t/nOY6vtv2Hd/v/J42pdrwdo23aVK0\niZ7EplnVg/gHHA4/zL6r+9h7ZS/7r+4n7E4YVXyrULNATWoWrEmNgjUo61M23c2YDpkM0sPSZBAb\nqyqJfvaZ+ZPD7t5Vhee6dFH1i7SMK/pBNLOPzua3A7+RYErg7epvM7D2QLK6ZzU6NM1F3X54mwPX\nDnDg6gEOXDvA/qv7ibgXQZX8VahRoAbVC1SneoHqlMtTzqLmzQyfDCwVH69mFxcpospb6y+CGqiZ\nzbvCdrHoxCJ+avWTrn2k2VX0g2gOhx/mwLUDHLx2kEPhh7h8+zIV8lagmm81qvlWo6pvVfzy++GZ\nxTPZc+hkYAEp4e234coVtYi9nl2smSvBlKDX7dXsKiYuhiPhRzgcfphD4Yc4FH6IUzdOUThnYar6\nVqVK/ipUyV8Fv/x+FMpRCDc3N50MzPXtt6rExJYt4OV0qzlrRvplzy9MPTiVHpV70L1Sd4p6W2kd\nVU2zQHxiPKdvnuZw+GEOhx/maMRRjkQcIT4xnuhh0ToZmGPePBg2TC12U7Cg1U+vuTiTNLH98nbm\nHpvLXyf/onze8nSr2I3ulbvrldk0w0XERODr5Zsxk8GNG5Anj3lt/o/mEmzaBH5+VghSy9DiEuNY\nd3bdP2UvqvpWNTokTcuYfQYmE5Qvrxa7r1kz5fOdOwcNG6pS1JYMPdW09Lh69yoFvfQjqGY/aU0G\nTt0Ttn49eHqmPmM4Ohrat1erlOlEoNlL5P1I/Cb5UdS7KB3LdaRD2Q5UzldZz2HQHJJTPxm0bQtd\nu0KfPs/fJz5eJYDKleHnn60bo6alJsGUwLZL21gWvIzAkEASZSLv1XyPoQ2HGh2a5qIyXDPRuXNQ\nt7ntDGYAAAnoSURBVC6Ehj5/vQEp4d13ISwMli+HTLo+mWYgKSUnb5zkxv0b+BfzNzoczUVluGai\n336Dvn1TXnhmwgTVabxjh04EmvGEEFTMV/G5n0/YO4HgyGBalGiBfzF/cnroxTQ0+3HaZFC6NDRr\n9vzP165V8wl27YIcOewXl6alVfMSzbkff5+J+ybSc2lPKuerTLPizehfoz9FchYxOjzNxTltM1FK\nTp1SVUiXLFEjiDTN2TxMeMj2y9vZfGEzfar2obRPaaND0pxEhuszeJ7oaKhdG774QjUjaZorklIS\nsCCACnkq0KhoI+oXro+3h7fRYWkOQCcDICFBjTCqVAnGjrVRYJrmAEzSxKbzm/5Zq3ff1X0U8y5G\n4yKNmdB2gh6+moHpZAB8+CGcPKlWOtPF57SMJD4xniMRRzgdeZoefj2e+fxhwkPuxt41dDlGzT4y\nRDKIjVU3+eRGBs2YoRa22bMHcuV69nNNy8j2X91P8z+a4+3hTc2CSYupJNXM98nmY3R4mhVliGQw\nYYL65v/rr//ed88eNcN461ZVnkLTtGeZpImzUWfZf3U/B64eYP+1/ZTPU57J7ScbHZpmRS6fDKRU\ni9z/73/QtOnj/cLDoVYtmDhRLVajaVr6TTs4jT+O/IFffj8q56tM5fyVqZi3op774ARcPhns3g29\nekFIyOMKpXFxKjG0bAkjRhgUqKa5oOgH0RwKP8TRiKMcjTjK8evHOXnjJN+89A1D6g4xOjwtBS6f\nDN58UzUBffrp433eeUc9GSxZAm56dUJNsymTNBGXGIeH+7PT/oduGMreq3sp61OWcnnKUdanLGV8\nylDUu6heGc7OXDoZ3L4NxYrB6dOQL5/6fPp0+PFH1V+gZxhrmrGu3b3G8evHOX3zNKcjT3P65mlC\nbobwS5tf6FD22fbbG/du4O3hbdFC75p5XDoZBAfDggWPm4L27YN27VSHcblyBgapaVqadF7YmZUh\nKynoVZASuUpQ3Ls4JXKVoG/VvhTwKmB0eE7NpZPBk27cUAvZjBsHHTsaEJimaVYRlxjHpVuXuHDr\nAheiL3A++jyD6gyiUI5Cz+z79ZavASicozCFcxb+52e2zNnsHbbDyxDJICEBWrWCOnVUETpN0zKG\nP4/+SXBkMJdvXyb0TiiXb1/myp0rhAwKSbaIX9DFILw9vCnoVZA82fLgJjJOp2KGSAZffKGaiNau\n1SWpNS2je3R/SK70RueFnTlz8wxX717lTuwd8mfPT4HsBdj0xia8sno9s/+F6Av4ZPPBK4uX05fy\ncPlksGIFDBwIBw5AXj2jXtM0M8UmxBJxL4Krd69S+8XazzwlSCkpN7EcV+5cIVEmks8zH/k885E3\nW15WdF+R7GioMzfP4JPNB28Pb4d76nDpZHDuHNSrpxJC3boGB6Zpmsu6F3eP6/euc+P+DW7cu0G7\nMu2e2Sc+MZ4Kv1Yg8n4kd2Pv4u3hjU82H/J75mdLny3PPFmYpIl1Z9fh7eFNrhdykcsjF94e3mR1\nz2qTv4NLJoOAAMnQoWrpyrfeUk8GmqZpjiLBlED0g2gi70dyO/Y2dQs9+231fvx9Oi3oRPTDaKIf\nRBP9MJpbD2+RyyMX1z+9/sz+D+If8J/N/8Hbw5scWXOQI2sOcnrkJJdHLpoUa5JqTE637KUQojUw\nDsgETJNSjnl6nx07YMoUNdns/fftHqKmaVqK3N3cyeuZN8VqsNkyZ2Ntz7X/ek9KyYOEB8nuL5Hk\n9czL7Ye3uRZzjTuxd7gde5tMIlOyySDyfiRVJlfBK4sXb1V7K81/F0OeDIQQmYDTQHPgCrAP6C6l\nPPXEPrJlS8nly6rTOHt2u4fpMoKCgvD39zc6DJeh/z2tS/97pk+iKZFr/9/evYTGVcVxHP/+GqOb\nVkUtLZqRuLAQBbEoVStixE2toKAFXYjFlQiiS1GEduNCEAnqxkWVQkGhCiVCYlEw6MaGYmLT+sAs\nCq2t3fggNaKt+bu4Rxln8rgzmcyZGX4fuPQ+zuKfwz/95z7OOefPMvfnHBsu20DlikpTdwa53nxs\nA2Yj4mREXADeBx6ubTQ5CQcPuhCs1sTERO4Qeor7s7Xcn6vTt66PgcsHGNo4tOgYjbJyFYPrgFNV\nx6fTuf8ZGSlWLTMzs7WVqxiUeja1e/dah2FmZpDvncGdwN6I2JGOXwQWql8iS+rMz5zMzDpc13xa\nKukSihfI9wNngElqXiCbmVn7ZPm0NCIuSnoWOEzxaek+FwIzs3w6dtCZmZm1T9ZJNSTtkPSdpB8k\nvbBEmzfS9a8lbW13jN1kpf6UNCzpN0lTaXs5R5zdQNI7ks5JmlmmjXOzpJX607lZnqSKpM8knZB0\nXNJzS7RrLD8jIstG8XhoFhgE+oFpYKimzU5gLO3fAXyZK95O30r25zAwmjvWbtiAe4CtwMwS152b\nre1P52b5vtwM3Jr211O8f131/5057wzKDDx7CNgPEBFHgCslbWpvmF2j1EA+oLvn522TiPgC+GWZ\nJs7NBpToT3BulhIRP0XEdNo/D3wLXFvTrOH8zFkMygw8W6xN80PseluZ/gxge7ptHJN0U9ui6z3O\nzdZybjZB0iDFHdeRmksN52e2ieooOfCM+r8W/MZ7cWX65SugEhHzkh4ADgFb1jasnubcbB3nZoMk\nrQc+AJ5Pdwh1TWqOl83PnHcGPwKVquMKRfVars1AOmf1VuzPiJiLiPm0Pw70S7qqfSH2FOdmCzk3\nGyOpH/gQOBARhxZp0nB+5iwGR4EbJQ1KuhR4DBitaTMKPAn/jVr+NSLOtTfMrrFif0rapLTyhqRt\nFJ8W/9z+UHuCc7OFnJvlpX7aB3wTESNLNGs4P7M9JoolBp5JejpdfzsixiTtlDQL/A48lSveTlem\nP4FdwDOSLgLzwOPZAu5wkt4D7gWukXQK2EPxlZZzswkr9SfOzUbcDTwBHJM0lc69BFwPzeenB52Z\nmVneQWdmZtYZXAzMzMzFwMzMXAzMzAwXAzMzw8XAzMxwMTBD0tVVUyeflXQ67c9Jeit3fGbt4HEG\nZlUk7QHmIuL13LGYtZPvDMzq/TstwrCkj9L+Xkn7JX0u6aSkRyS9JumYpPG0rjeSbpM0IemopI8l\nbc75g5iV5WJgVt4NwH0Uc8UfAD6JiFuAP4AH0+RhbwKPRsTtwLvAK7mCNWtEzimszbpJAOMR8bek\n48C6iDicrs1QrDC3BbgZ+DTNudYHnMkQq1nDXAzMyvsLICIWJF2oOr9A8bsk4EREbM8RnNlq+DGR\nWTlllmT8HtiYpgxGUr9X7LJu4WJgVi+q/l1sH+pXjYq09vQu4FVJ08AUcNdaBmrWKv601MzMfGdg\nZmYuBmZmhouBmZnhYmBmZrgYmJkZLgZmZoaLgZmZ4WJgZmbAP6MWir+Vz1y+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "k1 = 1.0\n", "\n", "with reaction_rules():\n", " S > P | (lambda r, *args: k1 * r[0]) # referring k1\n", "\n", "m1 = get_model()\n", "\n", "obs1 = run_simulation(2, model=m1, y0={\"S\": 60}, return_type='observer')\n", "k1 = 2.0\n", "obs2 = run_simulation(2, model=m1, y0={\"S\": 60}, return_type='observer')\n", "\n", "viz.plot_number_observer(obs1, '-', obs2, '--')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, in this case, it is better to make a new model for each set of parameters." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def create_model(k):\n", " with reaction_rules():\n", " S > P | k\n", "\n", " return get_model()\n", "\n", "obs1 = run_simulation(2, model=create_model(k=1.0), y0={\"S\": 60}, return_type='observer')\n", "obs2 = run_simulation(2, model=create_model(k=2.0), y0={\"S\": 60}, return_type='observer')\n", "# viz.plot_number_observer(obs1, '-', obs2, '--')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.5. More about ode\n", "\n", "In `ode.ODEWorld`, a value for each `Species` is a floating number. However, for the compatibility, the common member `num_molecules` and `add_molecules` regard the value as an integer." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n" ] } ], "source": [ "w = ode.ODEWorld()\n", "w.add_molecules(Species(\"A\"), 2.5)\n", "print(w.num_molecules(Species(\"A\")))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To set/get a real number, use `set_value` and `get_value`:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.0\n", "2.5\n" ] } ], "source": [ "w.set_value(Species(\"B\"), 2.5)\n", "print(w.get_value(Species(\"A\")))\n", "print(w.get_value(Species(\"B\")))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a default, `ode.ODESimulator` employs the Rosenblock method, called `ROSENBROCK4_CONTROLLER`, to solve ODEs. In addition to that, two solvers, `EULER` and `RUNGE_KUTTA_CASH_KARP54`, are available. `ROSENBROCK4_CONTROLLER` and `RUNGE_KUTTA_CASH_KARP54` adaptively change the step size during time evolution due to error controll, but `EULER` does not." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "with reaction_rules():\n", " A > ~A | 1.0\n", "\n", "m1 = get_model()\n", "\n", "w1 = ode.ODEWorld()\n", "w1.set_value(Species(\"A\"), 1.0)\n", "sim1 = ode.ODESimulator(m1, w1, ode.EULER)\n", "sim1.set_dt(0.01) # This is only effective for EULER\n", "sim1.run(3.0, obs1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`ode.ODEFactory` also accepts a solver type and a default step interval." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\niQODAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "run_simulation(3.0, model=m1, y0={\"A\": 1.0}, factory=ode.ODEFactory(ode.EULER, 0.01))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See also examples listed below:\n", "\n", "* [Glycolysis of Human Erythrocytes](../Examples/Glycolysis of Human Erythrocytes.ipynb)\n", "* [Drosophila Circadian Clock](../Examples/Drosophila Circadian Clock.ipynb)\n", "* [Attractors](../Examples/Attractors.ipynb)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }