##// END OF EJS Templates
More changes to example notebooks.
Brian Granger -
Show More

The requested changes are too big and content was truncated. Show full diff

1 NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,259 +1,201 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Animations Using clear_output"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 "Simple animations, progress bars, and clearing output"
15 "Simple animations Using clear_output"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 "Sometimes you want to print progress in-place, but don't want\n",
23 "to keep growing the output area. In terminals, there is the carriage-return\n",
24 "(`'\\r'`) for overwriting a single line, but the notebook frontend does not support this\n",
25 "behavior (yet).\n",
22 "Sometimes you want to clear the output area in the middle of a calculation. This can be useful for doing simple animations. In terminals, there is the carriage-return (`'\\r'`) for overwriting a single line, but the notebook frontend does not support this behavior.\n",
26 23 "\n",
27 "What the notebook *does* support is explicit `clear_output`, and you can use this to replace previous\n",
28 "output (specifying stdout/stderr or the special IPython display outputs)."
24 "To clear output in the Notebook you can use the `clear_output` function."
25 ]
26 },
27 {
28 "cell_type": "heading",
29 "level": 2,
30 "metadata": {},
31 "source": [
32 "Simple example"
29 33 ]
30 34 },
31 35 {
32 36 "cell_type": "markdown",
33 37 "metadata": {},
34 38 "source": [
35 "A simple example printing our progress iterating through a list:"
39 "Here we show our progress iterating through a list:"
36 40 ]
37 41 },
38 42 {
39 43 "cell_type": "code",
40 44 "collapsed": true,
41 45 "input": [
42 46 "import sys\n",
43 47 "import time"
44 48 ],
45 49 "language": "python",
46 50 "metadata": {},
47 "outputs": []
51 "outputs": [],
52 "prompt_number": 1
48 53 },
49 54 {
50 55 "cell_type": "code",
51 56 "collapsed": false,
52 57 "input": [
53 58 "from IPython.display import clear_output\n",
54 59 "for i in range(10):\n",
55 60 " time.sleep(0.25)\n",
56 61 " clear_output()\n",
57 62 " print i\n",
58 63 " sys.stdout.flush()"
59 64 ],
60 65 "language": "python",
61 66 "metadata": {},
62 "outputs": []
67 "outputs": [
68 {
69 "output_type": "stream",
70 "stream": "stdout",
71 "text": [
72 "9\n"
73 ]
74 }
75 ],
76 "prompt_number": 2
77 },
78 {
79 "cell_type": "heading",
80 "level": 2,
81 "metadata": {},
82 "source": [
83 "AsyncResult.wait_interactive"
84 ]
63 85 },
64 86 {
65 87 "cell_type": "markdown",
66 88 "metadata": {},
67 89 "source": [
68 90 "The AsyncResult object has a special `wait_interactive()` method, which prints its progress interactively,\n",
69 91 "so you can watch as your parallel computation completes.\n",
70 92 "\n",
71 93 "**This example assumes you have an IPython cluster running, which you can start from the [cluster panel](/#tab2)**"
72 94 ]
73 95 },
74 96 {
75 97 "cell_type": "code",
76 98 "collapsed": false,
77 99 "input": [
78 100 "from IPython import parallel\n",
79 101 "rc = parallel.Client()\n",
80 102 "view = rc.load_balanced_view()\n",
81 103 "\n",
82 104 "amr = view.map_async(time.sleep, [0.5]*100)\n",
83 105 "\n",
84 106 "amr.wait_interactive()"
85 107 ],
86 108 "language": "python",
87 109 "metadata": {},
88 "outputs": []
110 "outputs": [
111 {
112 "output_type": "stream",
113 "stream": "stdout",
114 "text": [
115 " 100/100 tasks finished after 30 s"
116 ]
117 },
118 {
119 "output_type": "stream",
120 "stream": "stdout",
121 "text": [
122 "\n",
123 "done\n"
124 ]
125 }
126 ],
127 "prompt_number": 3
128 },
129 {
130 "cell_type": "heading",
131 "level": 2,
132 "metadata": {},
133 "source": [
134 "Matplotlib example"
135 ]
89 136 },
90 137 {
91 138 "cell_type": "markdown",
92 139 "metadata": {},
93 140 "source": [
94 "You can also use `clear_output()` to clear figures and plots.\n",
95 "\n",
96 "This time, we need to make sure we are using inline pylab (**requires matplotlib**)"
141 "You can also use `clear_output()` to clear figures and plots."
97 142 ]
98 143 },
99 144 {
100 145 "cell_type": "code",
101 146 "collapsed": false,
102 147 "input": [
103 148 "%pylab inline"
104 149 ],
105 150 "language": "python",
106 151 "metadata": {},
107 "outputs": []
152 "outputs": [
153 {
154 "output_type": "stream",
155 "stream": "stdout",
156 "text": [
157 "\n",
158 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
159 "For more information, type 'help(pylab)'.\n"
160 ]
161 }
162 ],
163 "prompt_number": 4
108 164 },
109 165 {
110 166 "cell_type": "code",
111 167 "collapsed": false,
112 168 "input": [
113 169 "from scipy.special import jn\n",
114 170 "x = np.linspace(0,5)\n",
115 171 "f, ax = plt.subplots()\n",
116 172 "ax.set_title(\"Bessel functions\")\n",
117 173 "\n",
118 174 "for n in range(1,10):\n",
119 175 " time.sleep(1)\n",
120 176 " ax.plot(x, jn(x,n))\n",
121 177 " clear_output()\n",
122 178 " display(f)\n",
123 179 "\n",
124 180 "# close the figure at the end, so we don't get a duplicate\n",
125 181 "# of the last plot\n",
126 182 "plt.close()"
127 183 ],
128 184 "language": "python",
129 185 "metadata": {},
130 "outputs": []
131 },
132 {
133 "cell_type": "heading",
134 "level": 2,
135 "metadata": {},
136 "source": [
137 "A Javascript Progress Bar"
138 ]
139 },
140 {
141 "cell_type": "markdown",
142 "metadata": {},
143 "source": [
144 "`clear_output()` is still something of a hack, and if you want to do a progress bar in the notebook\n",
145 "it is better to just use Javascript/HTML if you can.\n",
146 "\n",
147 "Here is a simple progress bar using HTML/Javascript:"
148 ]
149 },
150 {
151 "cell_type": "code",
152 "collapsed": false,
153 "input": [
154 "import uuid\n",
155 "from IPython.display import HTML, Javascript, display\n",
156 "\n",
157 "divid = str(uuid.uuid4())\n",
158 "\n",
159 "pb = HTML(\n",
160 "\"\"\"\n",
161 "<div style=\"border: 1px solid black; width:500px\">\n",
162 " <div id=\"%s\" style=\"background-color:blue; width:0%%\">&nbsp;</div>\n",
163 "</div> \n",
164 "\"\"\" % divid)\n",
165 "display(pb)\n",
166 "for i in range(1,101):\n",
167 " time.sleep(0.1)\n",
168 " \n",
169 " display(Javascript(\"$('div#%s').width('%i%%')\" % (divid, i)))"
170 ],
171 "language": "python",
172 "metadata": {},
173 "outputs": []
174 },
175 {
176 "cell_type": "markdown",
177 "metadata": {},
178 "source": [
179 "The above simply makes a div that is a box, and a blue div inside it with a unique ID \n",
180 "(so that the javascript won't collide with other similar progress bars on the same page). \n",
181 "\n",
182 "Then, at every progress point, we run a simple jQuery call to resize the blue box to\n",
183 "the appropriate fraction of the width of its containing box, and voil\u00e0 a nice\n",
184 "HTML/Javascript progress bar!"
185 ]
186 },
187 {
188 "cell_type": "heading",
189 "level": 2,
190 "metadata": {},
191 "source": [
192 "ProgressBar class"
193 ]
194 },
195 {
196 "cell_type": "markdown",
197 "metadata": {},
198 "source": [
199 "And finally, here is a progress bar *class* extracted from [PyMC](http://code.google.com/p/pymc/), which will work in regular Python as well as in the IPython Notebook"
200 ]
201 },
202 {
203 "cell_type": "code",
204 "collapsed": true,
205 "input": [
206 "import sys, time\n",
207 "\n",
208 "class ProgressBar:\n",
209 " def __init__(self, iterations):\n",
210 " self.iterations = iterations\n",
211 " self.prog_bar = '[]'\n",
212 " self.fill_char = '*'\n",
213 " self.width = 50\n",
214 " self.__update_amount(0)\n",
215 "\n",
216 " def animate(self, iter):\n",
217 " print '\\r', self,\n",
218 " sys.stdout.flush()\n",
219 " self.update_iteration(iter + 1)\n",
220 "\n",
221 " def update_iteration(self, elapsed_iter):\n",
222 " self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)\n",
223 " self.prog_bar += ' %d of %s complete' % (elapsed_iter, self.iterations)\n",
224 "\n",
225 " def __update_amount(self, new_amount):\n",
226 " percent_done = int(round((new_amount / 100.0) * 100.0))\n",
227 " all_full = self.width - 2\n",
228 " num_hashes = int(round((percent_done / 100.0) * all_full))\n",
229 " self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'\n",
230 " pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))\n",
231 " pct_string = '%d%%' % percent_done\n",
232 " self.prog_bar = self.prog_bar[0:pct_place] + \\\n",
233 " (pct_string + self.prog_bar[pct_place + len(pct_string):])\n",
234 "\n",
235 " def __str__(self):\n",
236 " return str(self.prog_bar)"
186 "outputs": [
187 {
188 "output_type": "display_data",
189 "png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEICAYAAABRSj9aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdYFNfXx7+AooIowgJiwa7YscUSC/ZujDGWRGOPGktM\nfknemKZpxmgsWBJLTGISjT32xNhQlo5iBUEEAeltl7Kwbb7vH2OIBaVtAZ3P88zDrjNz79lx99x7\nzz3FgiQhISEhIfHMYmluASQkJCQkjIuk6CUkJCSecSRFLyEhIfGMIyl6CQkJiWccSdFLSEhIPONI\nil5CQkLiGUdS9BLPFXfv3oWlpSUEQXji+VdffRV16tTBpk2bTCZXXFwc7OzsIHk7SxgDSdFLGJ3G\njRvDxsYGdnZ2aNq0KRYvXozU1FRzi1Ukv//+O2rXro2MjAwsXLjQaP00btwY586dK3zv5uaGnJwc\nWFhYGK1PiecXSdFLGB0LCwscP34cOTk58Pf3R3x8PDZu3GhusYpELpeje/fusLQ07k/DwsJCmr1L\nmAxJ0UuYFBcXF0ycOBEnTpwo/DedTod9+/ZhwIAB8PDwwI4dO6DRaAAAKpUKs2fPRuPGjeHo6Ii+\nffsWKsgdO3agZ8+eqF27Ntzd3R+aIf/1118YM2YMWrVqhXXr1iE3N7dY2QYMGIAzZ85g8eLFqFWr\nFm7fvg1PT0/s2LGj8JpffvkFffr0KXxvaWmJXbt2wcPDA82bN8e6deseavP8+fOYMmUKHBwc0LZt\nW4SGhmLq1KmIi4vD6NGjYWdnh+++++4xk1JmZia+/fZbtGjRAuPHj8eFCxcK21y+fDkmT56MhQsX\nom7dupgwYQLCw8MLzz/tuUg8p1BCwsg0btyYZ86cIUneu3ePo0aN4jvvvFN43svLiwMGDOCNGzcY\nFRVFT09Pbtu2jSS5adMmvvbaa1QqldTpdJTL5STJtLQ0NmjQgJGRkSTJ2NhY3rlzhyR55MgRdujQ\ngf7+/kxMTOSECRP40UcfkSRjYmJoYWFBvV5fpKyenp7csWPHE9///PPP7N27d+F7CwsLDhgwgOHh\n4bx06RLt7OwYFRVFkrx8+TKdnZ25e/duajQaRkVFMTY2tvCZnD17trCdR+V64403OGHCBMbHx/Pg\nwYN0cHBgTEwMSXLZsmW0trbmtm3bmJmZydmzZ3PKlCnFPheJ5xdpRi9hdEhi7NixqFOnDho1aoSY\nmBh88sknhef37duHL7/8Em3btkWzZs3w9ttv4/DhwwAAQRCQnp6OhIQEWFlZ4cUXXwQgmj7y8/MR\nGRkJrVYLNzc3NG3aFACwd+9e/N///R969OgBV1dXLF26tLC9kspbGhYsWAB3d3d07twZvXr1wunT\npwEAe/bsweTJkzF58mRUrVoVzZo1g5ubW7Ht6fV6nDhxAl9++SUaNGiAcePGYfjw4fjzzz8Lr2nV\nqhXmzJmDOnXqYNasWThz5gyApz8XiecXSdFLGB0LCwscOXIEWVlZyMrKwrx589CmTRtoNBrk5eXB\nz88PI0eORJ06dVCnTh1Mnz4dfn5+AIBZs2bB09MTo0aNQvv27QvNKI6Ojvjtt9+wbt06uLq6YsmS\nJUhLSwMAnDlzBvPnzy9sr3///rh7926JN4BLuyHq4eFR+NrV1RWJiYkAAG9v78KBqTSEh4dDrVaj\nZcuWhf/WpUsX+Pj4FL7v2LFj4eu6desiJSUFgiA89blIPL9Iil7CpNjZ2WH+/PnIycmBj48PbG1t\n0b17d5w6dapwIFAoFMjKygIA2NjYYOnSpbhz5w5++uknvPvuuwgLCwMADB8+HGfOnEFYWBhiYmKw\natUqAKKtffv27YXtZWVlIS8vD87OzqWWt379+khOTi58HxoaWuJ7+/fvD7lcXuQ5KyurJ64c3N3d\nUa1aNURERBT+W0hICPr27Vuifp/0XCSeXyRFL2ES/lVqubm52LZtG2xsbNCrVy8AwNSpU/HZZ5/h\n8uXLEAQBCQkJ+OeffwAAJ06cQFRUFARBgK2tLaytrVG9enVERkbi3LlzUKvVsLa2RrVq1WBnZ1fY\n3qpVqyCXy6HX65GWloajR4+WWlYAGDhwIA4fPoyEhAScO3cOR44cKfbef++fNGkS9u3bh3379kGj\n0SAqKgpxcXEAxBn6pUuXimyjSpUqGDlyJJYtW4aEhAQcPnwYf//9N8aOHVus7E97LhLPL5KilzAJ\n/3qYNG3aFOfOncPOnTtRo0YNAMCcOXMwc+ZMfPbZZ3BwcMDgwYMRGRkJALh9+zYGDx6M2rVrY86c\nOfjqq6/QtGlTqNVqLF26FE5OTujatSvs7e3xzjvvABBntF988QU2bdoEJycn9OzZE0FBQYWyFGea\nefD8uHHj0KtXL3Tt2hWrVq3CggULHjr/aFsWFhaF/+bh4YFdu3bh0KFDcHZ2xrhx4wpXKvPmzcPx\n48fh4OCAtWvXPtbW2rVr0bFjR/Tr1w+//vor9u/fj8aNGz/Wx6NyPO25SDy/WLC0O08SEhISEpWK\ncs/oL168iNatW6NFixZFBsHk5+dj2rRp6NSpE/r161fs0ldCQkJCwrCUe0bfqVMneHl5oVGjRhg6\ndCjkcjlkMlnh+S1btuDatWv4/vvvERsbiwEDBiAqKkoK9ZaQkJAwEeWa0SuVSgBA37590ahRIwwZ\nMgSBgYEPXVO7dm3k5ORAq9UiMzMTNjY2kpKXkJCQMCHlUvTBwcFwd3cvfN+mTRsEBAQ8dM3kyZOh\n1+shk8nQu3dv7Nq1qzxdSkhISEiUkirG7mDTpk2oUqUKkpKScP36dYwcORKxsbGPJY2SZvkSEhIS\nZaM4C3y5ZvTdunXDrVu3Ct/fvHkTPXr0eOiaixcv4vXXX4eNjQ26d++OevXqFbrOFSWsdBDLli0z\nuwwV5ZCehfQspGfx9KMklEvR165du1CZ3717F6dPn0b37t0fumbgwIE4duwYBEFAdHQ0MjMzHzL3\nSEhISEgYl3KbbtavX4+5c+dCq9Vi8eLFkMlk2Lp1KwBg7ty5mDRpEsLCwtC1a1c4OTnBy8ur3EJL\nSEhISJScChMw9WAhBp0OiI0FIiKAmBigbVugZ0+gWjUzC2kivL294enpaW4xKgTSs/gP6Vn8h/Qs\n/qMkRWwqlKJ/6SUiMlJU7i4uQMuWgJsbcO0acOsW8OKLwODBwKBBQPv2gLR/KyEh8bxT6RT9gQNE\ny5ZA8+bA/TQohWRmAufPA6dPA2fOADk5wLBhwLJlgJRuW0JC4nml0in60ogSEwPs3g2sWwcsXgx8\n8AFQvboRBZSQkJCogJREd1ba7JVNmgAffwxcvgxcuSKacv7+29xSSUhISFQ8Ku2M/lFOngQWLQI6\ndRJn+Q0bGlA4CQkJiQrKMz2jf5QRI4AbN0QPnU6dgPXrgYoxhElISEiYl2dmRv8gUVHAxImAhwew\nZQtQtapBmpWQkJCocDzTm7HFkZsLTJoEaLXA/v1ArVoGa1pCQkKiwvBcmW4epWZN4PBh0fWyTx8g\nIcHcEklISEiYh2dW0QNAlSrA998Dr78uRtZev25uiSQkJCRMzzNrunmUvXtFr5xdu8ToWgkJCYln\ngefadPMoEycCBw8CU6cCv/1mbmkkJCQkTIfRC49UJPr0Aby9gYEDxRQL48ebWyIJCQkJ4/NcKXoA\ncHcXg6uGDAHs7IChQ80tkYSEhIRxeW5MNw/SsSPw55+iGcfX19zSSEhISBiX51LRA0CvXqKtftw4\nMVeOhISExLPKc6voAdFss3mzmD7hCWVsJSQkJCo9z52N/lHGjweys0WbvY+PlAxNQkLi2eO5V/QA\nMHMmoFCI/vUXLwLOzuaWSEJCQsJwPDcBUyXh44+Bc+fESlZSERMJCYnKwHOd1KwsCIKYCK16dWDn\nTqkmrYSERMVHiowtJZaWwC+/ADdvAqtXm1saCQkJCcMg2egfwcYGOHIE6N5dDK4aM8bcEklISEiU\nD8l08wQCA4FRo0Sbffv25pZGQkJComgk00056N5dLEc4ZgyQlmZuaSQkJCTKjjSjL4aPPgLkcuDM\nGcDa2tzSSEhISDyM5HVjAARBTJPg6Aj8+KPkiSMhIVGxkEw3BsDSEvj9dyAkBNi0ydzSSEhISJSe\nciv6ixcvonXr1mjRogU2btxY5DXBwcHo1q0bWrduDU9Pz/J2aXJq1gQOHQK+/BLw8zO3NBISEhKl\no9ymm06dOsHLywuNGjXC0KFDIZfLIZPJCs+TRIcOHbBu3ToMGjQI6enpD50vFKSCmm4e5PhxYP58\ncXbv4mJuaSQkJCRMYLpRKpUAgL59+6JRo0YYMmQIAgMDH7omJCQEHTp0wKBBgwCgSCVfWRg1Cpg2\nDZg8GdDpzC2NhISERMkol6IPDg6Gu7t74fs2bdogICDgoWtOnToFCwsL9OnTB6NHj8apU6fK06XZ\n+fxzoEoV4JNPzC2JhISERMkwemRsQUEBrly5gjNnzkClUmHw4MG4ceMGatSo8di1y5cvL3zt6elZ\nIe35VlbA7t1Aly5Ajx7A2LHmlkhCQuJ5wtvbG97e3qW6p1w2eqVSCU9PT4SGhgIAFi1ahGHDhmHk\nyJGF15w4cQLe3t5YfT95zMSJEzFz5kwMfaRYa2Ww0T9IYCAwerRYirBFC3NLIyEh8bxidBt97dq1\nAYieN3fv3sXp06fRvXv3h67p0aMHLly4AJVKhczMTISGhuLFF18sT7cVgu7dRTPOuHFAXp65pZGQ\nkJB4MuU23axfvx5z586FVqvF4sWLIZPJsHXrVgDA3Llz4ejoiBkzZqBr165wcnLCF198gZo1a5Zb\n8IrAvHmAv7/499dfHw+mUuvUCE4MRmJOIlLzUpGSl4LUvNTCI1eTi7o166KeXT3Ut6uPenb1Cl83\nd2iOOjXqmOeDSUhIPFNIkbHlRKUCevYU3S7nzQPS8tJw8vZJHIs8hjPRZ9DCsQUa2zeGs60znG2c\n4VLTRXxt6wybqjZIyU1BYk4iEnISkJiTWPj6dsZttJK1wuCmgzGo6SC82PBFVKtSzdwfV0JCooIh\npUAwEX+HROCVTw6h+YhjiFWFYVDTQRjdcjSGtxgOZ9uy1SXU6DXwj/fHmZgzOH3nNMLSwtCrYS8M\najoIL7u/jGYOzQz8KSQkJCojkqI3Mncy7+DT85/iXMw5eFR9FdcOjMaVw/3g7Gj4mbeiQIHzMefx\nT/Q/OBh2EB51PTC/63yMbjUaVSylsgISEs8rkqI3Esm5yfjq4lfYc2MPlvRYgiU9lqCmdU3Mnw+k\npwP79hk3+VmBrgAHww5iy6UtiMmKwezOszG782w0qNXAeJ1KSEhUSCRFb2Cy1dlY7bca3wd/j2kd\np+GjPh9BZvNfpG9BAdCrFzBzJrBwoWlkup5yHVsvbcXu67vRr3E/vN/rffRq2Ms0nUtISJgdSdEb\nCJLYfnk7Pj3/KYY3H47PPT9HI/tGRV4bFSUq+xMngG7dTCdjriYXv1/7Hd/Iv0EHlw74qv9X6Fi3\no+kEkJCQMAuSojcAKq0Kbx57EzfTbuLXsb+ivUvxdQUPHgTefx+4dAmoY2IPSbVOja2XtmKFzwr0\nb9Ifn3t+jpaOLU0rhISEhMmQ8tGXk+isaPTa0QuWFpbwnelbIiUPAK+8IiZAmzEDMPXYVa1KNSzu\nvhhRi6PQ3rk9eu3ohTnH5iBeGW9aQSQkJCoMkqJ/An/d/gs9d/TE7M6zsXPsTthUtSnV/atXA4mJ\nYt1Zc1DTuiY+6vMRIhdFQmYjg8dWDyz3Xo4CXYF5BJKQkDAbkunmEQQK+Pri19hyaQv2jd+HF93K\nnq4hJkZMlXD0qJgAzZzEK+Ox5NQSXEu5hu9HfI/BzQabVyAJCQmDINnoS4myQImpf05FZn4m9r+6\nH652ruVu8/Bh4O23gdBQwMHBAEKWk+ORx7Hor0Xo0aAH1g5Za5DPKCEhYT4kG30pUBYoMeDXAWhQ\nqwHOTTtnMAU4diwwfrxYsEQQDNJkuRjVchRuvnUTje0bo8OWDtgctBl6QW9usSQkJIyINKMHkKfJ\nw9Dfh6KTaydsGLYBFgaOdtJqgb59gZdfBj74wKBNl4ubqTcx/8R85Ovy8ctLv6Ctc1tziyQhIVFK\nJNNNCSjQFWDMH2NQv1Z97BizA5YWxlnkxMWJfvUHDwK9exulizLxb4zAx+c+xtLeS7GkxxKjPQMJ\nCQnDIyn6YtDqtXh1/6uoalUVf7zyh9Fzxpw4IWa4vHwZcHIyalelJjorGtMOT4OVhRV+GfsLGts3\nLn0jJJCVJY5qubmApWXRh5MT4OoqvpaQkCgXkqJ/CnpBjzcOvwFFgQJ/TvwT1lbWJun3ww+BK1eA\nkycrnp7TC3qs9V+LVX6rsHLgSszsNLNoM1ZuLiCXiyNWXBwQGyv+jYsTay26uQG1aombEo8eej2Q\nmgpkZgINGgCNGwONGolHkyZA585AmzYV7+FISFRQJEX/BEhi3ol5iEiPwF+v/4UaVR+vX2ssdDqg\nf39g+HDgo49M1m2puJ5yHVP/nIqGtRti++jtqGtVW6ywcv48cO4ccPUq0LWr6DvauLGo2P897lcd\nK5aCgv8GidhY4O5dIDoaCAkRB4IXXhB9Unv2FP+aOsRYQqKSICn6IiCJ90+/D584H5yZegZ21eyM\n3uejJCSIenLPHqBfP5N3XyI02Vk4/sUUOB8+jR5JVqjSwQMYMEAcpXr1AmxKF0BWKtLSgIAAcXDx\n9xeVv5sbMHKk6MbUvbu4cpCQkJAUfVF4BXhhR+gOeE/3hkMN8zm2nzoFzJol6rC6dc0mxuNcvw5s\n3Qrs3g306YMbI1/AqxnfY1TX1/D1gK9NZuJ6CJ1ONBMdOyYGJqSmAmPGAC+9BAwcCNQw3YpMQqKi\nISn6Rwi8F4jRf4xG4OxANKnTxKh9lYTlywFvb+DMGaCKOWuH5OcDBw4AW7aIJpQ5c8RRqGFDAEC6\nKh3TD09HmioNe17ZY/5nFx0NHDkiHqGhwJAhwPTpwNChZn6QEhKmR1L0D5CZn4nOWztj/bD1GOs+\n1mj9lAa9XrRGdOwIfPutGQTQaoEffgC++krcBJ03T8zGVoSyJIl1AeuwUr4S34/8HuPbjDeDwEWQ\nng4cOgT89BMQHy9Gps2cCTRvbm7JJCRMgqTo70MSL+15Cc0dmmPt0LVG6aOspKcDXboAXl6i+dkk\nkKIZ5P33gaZNxQxs7dqV6NbghGBMOjgJQ5oNwdoha026kV0sN2+KCv/33wF3d1Hhjx8P2NqaWzIJ\nCaMhKfr7fOf3HQ6EHcDFGRfNY2MuhqAgcSLt52eCiWhoKPC//4l27u++A4YNK3UTygIl5h6fi/D0\ncByccBDNHSrY7FmjAY4fB3bsAAIDRVPUwoVA/frmlkxCwuBIuW4A+MX7YbXfauwdv7dCKnlA9CRc\nvlzMY69SGamTxERxhjtiBDBxoujMXwYlDwC1q9fGH6/8gbld5qLXjl44fOuwgYUtJ9bWwLhxYoRa\nYKD4UNu3B6ZOFTd1JSSeM57pGX26Kh2dt3bG5hGbMbrVaIO2bWhIUQ9VqQL8/LOBi4vv3i2m0Jw1\nS3Ter1XLYE0HJQRhwv4JmNB2AlYMXGH06OIyk5UF/PgjsGGDuGx6911xg6QEgVmZWi1uqVS4pVIh\nMj8f6VotFDodlA8eej1y9XpUtbBAdUtLVLe0RLX7f6tbWqKmlRXqW1ujYfXqaFCtGhpUq4aG9/86\nVKli8PxKEs8Pz7XpRqCAUbtHoa1zW6wevNpg7RqTvDzRRfztt0VrQ7nJzRVNFv7+otN+p04GaPRx\n0lXpmHJoCvJ1+djzyp6KnfpYqwX27wfWrBGDtj75BJgwAbCyAkncUqlwXqHA1dxchN9X7gWCAHcb\nG7S2sUFLGxs4Va0K+ypVUPv+YV+lCmpbWaGmlRV0JAoEAQWCAPUDr3N0OtxTq3FPrUb8/ePf1wDQ\nwdYWHWvWFA9bW7SztUUNKVZAogQ814r+W/m3OBp5FN7TvFHVqqrB2jU2ERFAnz7AX3+Jm7Rl5vJl\nYNIksTEvL6BmTYPJWBR6QY+vLn6FbZe3Yfe43ejXuIJGgv0LCZw6hbj163G2Xj2cHT8e5+ztYW1p\niQH29uhqZwd3Gxu429jA1draqDPuNI0G1/LycCU3F1fvH5H5+WhcvTpesLODp709+tnbo0n16tLM\nX+IxnltFH5wQjNF/jEbwnGA0rN3QIG2akgMHgPfeA4KDy5D8TBDE+oUrV4pmikmTjCLjkzgVdQrT\nDk/D/3r+D+/1eq9CKqYrubnYmZyM4xkZUOp0GKBWY+DRoxgQHIym8+bBYvJks/vjawQB4SoV/LOz\ncUGhgLdCgaoWFuhnbw/P+0dTSfFL4DlV9DpBh27bu+G9nu/h9Q6vG0Ay87B0qbiPeOoUULWkC5LU\nVNGPXKEQ7fJNzBPYFKeMwyv7XkET+ybYMWaHWdJMPEqyRoNdKSn4NTkZSr0eb7i4YLyTE9rZ2sLS\nwkKc4Z8/D3z+ubhxvWwZ8NprFSa5Gknczs+Ht0KBCwoFzisUsLGywhhHR4x2dETv2rVRtYLIKmFa\nSqQ7WU4uXLhAd3d3Nm/enBs2bHjidUFBQbSysuLBgweLPG8AUUiSa/zWcNCvgygIgkHaMxc6HTls\nGPn22yW84cYN0s2NXLqU1GiMKltJyNfmc9aRWWyzuQ1vpd0yiwxqvZ77UlI44upV2vv4cHp4OM9n\nZVFf3Hfj3DmyRw+yQwfy+HGyAn6XBEFgaE4OP4+JYZeQENbx8eHkmzf5R0oKs7Rac4snYUJKojvL\nPaPv1KkTvLy80KhRIwwdOhRyuRwymeyha/R6PQYPHgwbGxvMmDEDr7zyStlGpWKIU8ah89bO8J/l\njxaOLcrVVkUgK0t0vfzkE3Gi/kR8fMTAoDVrgClTTCZfSdh+SSxqsm30NpNFJOfr9diRnIxVcXFo\nVqMGZtSti3FOTqhZms1NUqzq/tFHgKOjaArr1ct4QpeTBLUaxzMycDQ9HT5KJfra2+M1Z2eMkclK\n97kfQafUQR2vhjZdC71KD0ElQJ9//69KDyFfrI9pWd3y4aOG+LeqY1VY17WGtYs1LKtJKw5jYHTT\njVKphKenJ0JDQwEAixcvxtChQzFy5MiHrlu/fj2sra0RHByMUaNGGUXR83706wv1X8AnfT8pczsV\njZs3AU9PMX99t25FXHDokJi6YNcuYPBgU4tXIoISgjB+33i80fENfO75OawsjeNNkqvXY2tiItbE\nx+OFWrXwsZsbupXXlVSvB377TTTleHgAX39d4ihic5Gj0+FIRgZ2p6TAV6nECEdHvObsjKEODrB+\nxLxDEgUxBcgNzUXezTyo49RQ31OjIL4A6ng1QKBaw2qo6lQVVrZWsLKxEpW4jSWsaoivYQEIBcLj\nR74AbboWmmQNNCkaWNlZiUq/rjWquVZDjeY1UKNVDdi0soFNSxtY1ZS8jMpCSXRnuXacgoOD4e7u\nXvi+TZs2CAgIeEjRJyQk4MiRIzh37hyCg4ONtnl0+NZhRGVGYf+r+43Svrlo2xbYtk0MpgoOBlxc\nHji5eTOwYoVoyDeS66QheKH+Cwh5MwSTDkzCyN0jsWvcLjjaOBqsfaVOh80JCfC6dw+e9vb4q0MH\ndDSUl5GVlZgwbdIkMS/QwIHA6NHAl1+KVbIqIHZVqmCKiwumuLggTaPBgbQ0rIqPx4xbtzAj2x5j\nE2rCJVyH3NBc5F7JhZWtFWp2rgnb9raw62YH2TgZqjWshuoNq8OqtpVBfrMUCF2mDppkDdRJamgS\nNciPykf6oXSoIlTIj8pHVYeqqNGqBmxb26Jm55qw62oH2za2sKgibTiXF6O7FixZsgQrV64sHHWe\nNvIsX7688LWnpyc8PT1L1Ee2OhuL/16MXeN2oVqVauWUuOLx8sti5oLx44GzZwHrqgQ+/lgsQCuX\nm23TtTQ42zrjn6n/4MMzH6Lb9m44NPEQPOp6lKtNHYmN9+5hRVwchjs4wNvDA62NldemenXgnXeA\nGTPEwbVdO2DJEjGdhDFz85cT+2wLjLtYBf1P1UDaPyrkWSng1yoLie6WaDfbCSM9W6BufePnArKw\ntEBVWVVUlVWFbbvH+6NAqOPUUEWokHczD4pzCsSviof6nhq2HW1h19UOdl3tUOuFWqjRssZz7W3k\n7e0Nb2/vUt1jUNPNokWLMGzYsIdm9E2bNi1U7unp6bCxscH27dsxZsyYhwUph+nm7b/fRq4mFzvG\n7CjjJ6n4CIKYfr1xfS025s8WHe6PHwce2Q+pDOy9sRcL/1qIdUPXYUqHsu0pyJVKvBUZCRdra2xs\n0QLupla2MTFiXUg/P9GcM2VKhfDQoUBkB2Qj82QmMk9lQhWpgn0/ezgMdYDDUAfUaF4DJHFBqcSO\npCQcy8jAMAcHzHZ1xQB7e9EDqQKhU4orj+zgbOSE5CDbPxvUEPae9rD3tEftfrVh427zXCt+k7hX\n/rsZ6+bmhmHDhhW5GfsvM2bMwOjRozFu3LgyCVsUIYkhGLV7FG6+ddOg5oCKiDJdi6AmE9CyiRaN\n/PdW6qyMN1Jv4OW9L2NEixH4bvB3JQ5qS9Vo8EF0NM5kZWFts2Z41cnJvD9yPz8xnYJWK26Gl3AV\namhUt1VI+S0FKb+lwNLGErIxMjgMdUCtXrVgaf3kAShLq8Xu1FT8mJQEpU6H+fXqYaarKxxL7NNr\negruFkDhrSg89Pl62Hvao86AOnAY7oDqbtVL3SZJ6PVKaDTJ0GhSoNGkQKtNhV6fB0FQQxAK7h/i\na1IDC4uqsLSsBkvLarCwqFb42tLSBlWrymBt7YSqVWWoWlX8a2VlnN+rSRT9hQsXMG/ePGi1Wixe\nvBiLFy/G1q1bAQBz58596FpDK3qdoEP3H7tjSfclmNpxatk/RGVAEIBp05AXl4FW4Yex8w9rDBxo\nbqHKh6JAgSmHpiBbnY19r+5D3ZpPLrWlJ7E1MRHL797FG3XrYlmjRrCrKEVGSGDvXnGG37WrmPbZ\nBOY0bYYWqXtTkfJbCgpiCuA82Rkub7igpkfNMg1+QdnZ2JyQgKMZGRgnk2FB/frobGf+GIjiKLhb\nAMUFBbLAeqYoAAAgAElEQVROZyHzVCas61rDYbgDHEc4otaLtWBZVRzoSB3y86OhUt166FCr70Gr\nTYWFhTWsrV1gbV0X1tYuqFrVGVZWNWFpWf3+Ua3wtYVFVZDa+4pfDVJdOBDo9SpotemPHGkAAGvr\nuqhevTGqV2+C6tUbo0aNJoXvra1dYWFR+lXhMx8wtT5gPY5FHsOZqWee7aUbCSxYILrg/PUXvINs\nMGECcOEC0Lq1uYUrHwIFfHHhC+wI3YF94/ehZ8Oej10TnpeHqbduwdbSEptbtkS7irqSyc8XZ/Xr\n1gHz54uK3wipJ7IDsxG/Jh6ZpzLhONwRLm+4wGGIg8E2LdM0GvyYlIQtiYmoX60aFtavj/FOTo95\n7FREqCdyQnKQ/lcy0q8GosDmEqr0iwQaR0FbLQ7VqtWDjY37A0crVKvmBmtrF1hZGdf8p9eroNEk\noqDgLvLzY1BQcBcFBTGFh16fBxub1rC1bXf/aAtb23awtq73VP32TCv65NxktPu+Hfxm+aGlY0sj\nSlYB+PBDcRf27NnCzJM//ywWhgoMrJRm+sc4HnkcM4/MxOeen2Ne13mF34cfk5LwUUwMVjRpgtmu\nrpVjQL93D/i//xNH4pUrgddfL3c6UgpExokMxK+OhzpOjQbvNEDd6XVRpbbxVjU6EsczMrApIQFh\neXlYUL8+5tarB1kFNOvodAooFD7IzvaDUumH3NxLqF69CWpW7QHLqHbI/6cBsv+sjdoeTpCNk0E2\nVoZqrhXLcUOnUyAvLwx5eTfuHzeRl3cDpAY1a3ZCrVovwM6uG+zsXkC1ag0KfwvPtKJfcHIBqllV\nq3AVowzON9+IPvIXLoiBOw+wdKkYK3X2LFCtYn1ny8TtjNt4Zd8r6OTaCSuGbsTb0fGIys/HnjZt\nTL/Zagh8fcVUpNbWYmK5IgMhno6gFpDyewriv4uHpY0l3N53g9N4J5O7HN7Iy8O6+HgcSk/HJGdn\nLGnQAK3M+H9CEvn5kcjIOI6MjBPIyQlBrVrdUbv2i6hVqxdq1eqOKlVqP3SPPk+PzFOZSD+UjowT\nGbBpYwOncU5wetWpTHZ9U6HRpCIn5xJycoKRkxOM7OwgWFhYwM7uBdSq9QIaN/702VT0UZlR6PFj\nD9xaeAsym2dgOvskNm8WzQA+PkX6bAuCmGG3Rg3g118NnMPeTORp8jD2789wocaLeN21EX5o0wnV\nK4HJ4IkIArBzp+gOO3y46Jr5UDDEE24rEJCwOQHxa+JRs2NNNHy/Iez725t9RZOi0eD7hARsSUzE\nC7Vq4Z0GDdDf3jRykTooFBfuK/fj0OtVcHQcBUfHUahTZ0CpNjsFjQDFOQXSDqYh/c902LjbwHmy\nM5xedYK1c8UsUPQvJKFWxyMnJwjZ2cFo3nzVs6noJx+cjLZObZ+pCNjH+PVXUTlcvPjUjT2VSnT0\nGD0a+PRT04lnDHQkvoqNxdbERLxkEYk/ff8PP7/0M0a0GGFu0cqPUikGWf2r9BcsKDJbHQUidU8q\nYj6OgW0HWzT5sglqdjBuiumykK/X4/eUFKy7dw/VLS3xgZsbxjs5oYoRFH5u7nWkpOxESsouVKvW\nADLZS3B0HAVb244GGWAEjYCsf7KQ8kcKMk9kolaPWnCe7AzZyzJUqVVBNvyfgkmSmhmKkopyKfES\nXb9zZa4618gSmZHjx8m6dcmwsBJdnpRENmpE7t5tXLGMSapazb6XL3PQlStMLCggSfrG+bL+mvpc\ndn4Z9YLezBIaiPBwcsgQsk0b8syZh05lnstkSJcQhnQLYZZ3lpkELB16QeCx9HT2vnyZTfz9uene\nPebpdOVuV61OZXz8egYHd6KfXwPeubOUeXnGT46ny9UxZU8Kr425xou1LvLGhBtMP55OQVtxEttl\nZ2fzxIkTfO+999ilSxfTJDUzFCWd0Q/9fSjGthqL+d3mm0AqMxAWJk7Rjx4FevQo8W3Xr4vR+YcO\nAb17G088Y3AzLw+jr1/Hay4u+KJx44eCdpJzkzHxwETYVrXFby//9mzESvybMO2dd4BOnZA39xtE\nb1AjLywPTVc0hdMEJ1hYVj47nJ9SidXx8fBTKrGgfn0sqF+/VP74JKFQnENCwkYoFN5wdByDunXf\ngL19f1hYmD4PjjZTi7R9aUjemYyCuwVwfs0ZdafVNfkKS6VSQS6X4/z58zh//jxu3LiBbt26oX//\n/ujfvz/69u37bM3oz9w5w+YbmlOjM38aXqOQkUE2a0bu3Fmm20+dIp2dyevXDSyXEfkrI4NOcjl/\nS05+4jUanYb/O/U/NlrXiAHxASaUzrhoU3MZ2eN3yi0OM27Iduqzno1VanheHmfdusU6Pj5cHBnJ\nuPz8p16v1xcwKekXBgV1YGBgGyYkbKNWm20iaUtG3q08Rn8cTT83PwZ7BDNubRzVqWqj9ZeWlsaf\nfvqJo0ePpp2dHXv37s1PP/2U586dY/4jz7MkurPSKHpBENh1W1fuub7HRBKZGK2WHDSIfPfdcjWz\nezfZoAF5966B5DIiG+/dY11fX8oVihJdfyjsEJ1WOXFj4MZKX28g/WQ6/dz8GD49nJor0eSrr5KN\nG5MHD1bI/PdlIaGggO9FRbGOjw9nhIfzVl7eQ+c1mnTevfsVfX1deeXKYGZk/F3h/18FvcDMs5kM\nmxpGn9o+vPHKDaafTKegK7/csbGx9PLyoqenJ2vVqsVx48bxt99+Y2Zm5lPve6YU/b4b+9h5a+dn\nx1b7KEuWiLZbAxSN8PIiW7YkU1MNIJcR0AoCF0RGsk1gIO+oVKW6Nyojih5bPDhh/wRmF1SsWV9J\nUKeqGfZ6GP2b+DPjn4yHT549S7ZtKw74JdyfqQxkaDT8PCaGTnI5x9+4weD0cEZEvEUfH3uGh89g\nTs41c4tYJrQKLRN+SGBI1xD6NfBj9CfRVN0p3fdZoVBw69at7NGjBx0dHTl9+nQeOXKEqlL8Lp4Z\nRa/RadhiQwv+E/WPCSUyIT/9RLZoQRYzcpeGjz8mu3YlsyuYLlRotRxy5QqHXr1KRRkHNZVGxTlH\n57DVxla8nlI57FSCIDD592T6uvjy9ru3qct9woalRkOuX0/KZOLqroSrncpApiqJey/P5rHzdvzG\nbxrPp96q8DP4kpJzNYeRiyMpl8kZOiCUKXtSqC8oelKq1+t59uxZTpkyhbVr1+a4ceN47NgxaspY\nGe6ZUfRbgrdw4M6BJpTGhPj5kU5OBp/BCQI5Z444OVQbz5RYKpLVarYPCuKCyEhqDfAD33llJ2Wr\nZPwl9BcDSGc8Cu4V8OrwqwzqEERlkLJkN6WkkDNnit5XP/1E6ivvSlarVTA6+lP6+DgwMnIBs1X3\nuD0xkc0DAvji5cs8mZ7+zCh8fYGeKX+kMHRAKOVOcka9F8W8CNFkFR8fz2XLlrFx48bs0KED169f\nz7S0tHL3+Uwo+jxNHuutqcfghGATS2QC4uPJevXIEyeM0rxWS44dS06caH49EV9QwFaBgfw8Jsag\nP+rrKdfpvsmd0/6cxhx1jsHaNRTpx9Pp6+LLmOUx1GvK8J8QGEh2706+8AIZULk2onW6XMbGrqRc\nLmN4+HTm58c8dF4rCNydnMx2QUHsFBzM/ampxdfzrUTkReYx6v0o/ljnRw5zHkZ7W3u+Ne8tXrp0\nyaC/gWdC0a+4uIKv7nvVxNKYAJWK7NKFXLnSqN3k55P9+pELF5pvjy9apWJTf3+uio01Svu56lxO\nPzydrTa24pWkK0bpo7To1Xrefvc2/dz8mHWxnD7xer3oieXqSk6bJgZOVGAEQWBKyh/082vAGzfG\nMzf36atVvSDwSFoaXwgJoXtgIHcmJVFj7plJOdHpdDx06BB79+5NNzc3Lp+6nD79fMRZ/vtRVN0u\nnS3/aVQ6Rb948WLu2rWLUVFRFASBygIlHb91ZER6hLnFMzxvvUVOmGAS7atQkB4e5Icfml7ZR+Tl\nsaGfHzfdu2f0vn67+htlq2TcHLTZrKYA1W0VQ7qE8PpL16nJMKArsFJJvv8+6ehIrlpVcWxyD5Cb\ne4Ohof0ZFNSBCoVPqe4VBIGnMzPpGRrKxv7+/CEhgfmVTOHn5ubSy8uLTZs2Zffu3bl3715qH9iL\nyovMY9R7UZTL5Lwy+ApTD6aWbaX3AJVO0a9atYqvvPIK69evT5lMRvde7mw/qT1v375tbvEMy59/\niq50JtxoS0sj27cXN2lNpQOv5+aynq8vdyQmmqZDkhHpEey0pRPH7R3HTJXhNrdLSvLuZMplct7b\neM94g01EBDlihLiBf/RohXDH1GqVvH37XcrlMt67t5GCUD7vMV+FgiOuXmU9X1+uiYtjrgGibY2J\nSqXi2rVrWbduXY4bN45+fn5PvV6fr2fy78m83PsyfV19Gf1pNPPjnh5v8CQqnaJ/kKi7UbSfZs/X\n57xOJycnDh48mH/++edDo2OlJD5ejGoq5otgDFJTyXbtyM8+M35fl7Kz6eLry91PCYQyFgXaAi46\nuYiN1jWiX5xpnrNOpWP4zHAGtAxgTqiJ9gr++ot0dycHDyZv3DBNn48gCAKTk3+nr289hofPoFqd\nYtD2L2dnc/yNG3SSy/nl3bvMqmC///z8fG7YsIH16tXjyy+/zKtXr5a6jdzruYxcGEmfOj68NuYa\nM/7KoKAv+eBdEkVfYVMgbAnZgmORx3DitRMoKCjAgQMH8P333yM+Ph5vvvkmZs+eDdciMjqWh7w8\nIDYWyMoCMjPFv/8eCgVgZwc0aAA0bPjfX3v7UmSN1OvFPAWDB4uJrcxAairQvz8wcSLw2WfG6SMw\nOxtjrl/HlpYt8bKTk3E6KQGHbx3G3ONzMb/rfHzS9xNUsTROgip1gho3Xr6BGs1qoNX2VrCqacJw\nfa0W+OEHsTjBhAnA558/ls7aWBQUxCIiYha02ky0aLEZtWs/XjTGUITn5eHb+HgcS0/Hm/XqYUmD\nBnCxNl+WSbVajR07duCbb75Bp06dsHz5cnTu3Llcbepz9Uj5IwWJPyRCp9Sh3rx6cJ3hiqqyp6eR\nqLRJzbR6LZusb0J5rPyx60JDQ/nmm2/S3t6eEyZMKJdZJztbnBR9+CHZowdpa0u2aiW+HjGCfP11\ncRPz00/JNWvI5cvJWbPIoUPFuJZatUgbG3FSNXs2eeAAmfW0fbcvvyQ9PUkzL0OTk8nWrUVxDM3V\nnBw6y+U8kZ5u+MbLQEJ2Agf/Opg9fuzBqIwog7evDFTSr74f735917wugunp5IIFoquul5foj28k\nBEFgQsI2yuUyxsZ+W24zTWmIyc/nWxERrOPjw4WRkbxbTHoFQyMIAnft2kU3NzcOHz6cgYGBRulD\nGaBk+LRw+tj7MGxKGBW+iid+v0qixiukot91bRf7/NTnqdcrFAquWLGCjo6O/Pjjj5mbW7I8ISEh\n4n5Wt26iYu/XTzRlnD1LPhKhXSKUSvLqVfG3NWwYWbMm2bs3+dVXYl+Fe0m+vqLJxgSbkiUhKUkc\n1FasMFybkXl5rOfry30phl2+lxe9oOc6/3WUrZLx59CfDaaQk3clU+4kZ9rh8vtCG4zr10VTTqtW\n5JEjBrff5+fH8cqVIQwJ6cLcXPOYi0gySa3mB1FRdPDx4fQi0isYg4CAAPbo0YNdunThxYsXjd4f\nSWoyNIxbE8eAFgEM6hDEhB8SqM1+eGAtiaKvcKYbkui4pSO+HfQthrcYXux9CQkJeP/99+Hr64vv\nvvsO48ePfyxHtUYDHDgAbNwIJCUB06YBAwYA3bsD1Q1cWCY/X0wh//ff4qFQAG++UYC3/ugDl42f\nAC+9ZND+MvMzcTP1JsLSwhCeHg6lWgmBAvSCHnrqC18DQP1a9dG8TnM0d2iOFo4tUFXVCIMHVMWs\nWWLlu/JwT61Gn9BQfNyoEWYb2KRmKK6nXMdrh16Du8wdW0ZuKXMmTApEzMcxSN2binZH2qFm+wqW\nL54Uv3zvvQc4O4t1bMtpViCJ5ORfEB39ARo0WIKGDT+ApaX5SwpmabXYlJCAjQkJ6Gdvjw/d3NDF\nwAXN7927h6VLl+LcuXNYsWIFpk6dCksTF8OhQGSdzULiD4lQeCvgPMkZ9ebXQ832NStnKcHjkcfx\n6flPcfnNy6UqKnDhwgUsXLgQzs7O2LhxI9q0aYOkJGDrVmDbNrGI9qJFYoEOKxOaUMPDCK/RZ7A3\n4UWMnWyDd94BOnQoW1vKAiVO3D4B/3v+hco9X5ePNk5t0MapDVrLWsOhhgOsLKxgaWEJK0urwtcA\nEJ8dj6jMqMIjIScB9WwbIi3cHb1cB2LDwhFoJWtZ6mIO6Vot+oaGYqarK95r2LBsH85EFOgKsPTs\nUhwIO4CfxvyEwc0Gl+p+XbYO4VPCoVPq0PZAW1g7VeBqRDodsGMHsHw5MHQo8PXXQP36pW5GrU5C\nRMRsaDSJcHffiZo1y/gFNiK5ej1+TErCmvh4tLaxwYdubuWufKVSqbB69Wps2LAB8+fPx4cffoia\nRij2XlrUCWok/ZiEpO1JqN64Ojr7dq5cNnpBENhrR68yZ6jUarX08vJinTrd2Lr1JdrbC5w3z2wO\nCSI7dpDt2jE9XsWvvxYDYQcOFGuLlMRFODU3ldsvbefw34fTboUdR+0exbV+a3kq6hTjlfHlMkMU\naAt4K+0Wd/gdoGz6m7T9tAGbrG/CBScW8ETkCeZpil8OK7VadgkJ4Ud37pRZDnPwT9Q/dFvnxjeP\nvVni5GgF8QUMahfEiLkR1KsrkX+3UkkuXUo6OIgbTqVIgJSR8Td9fesyOvpT6vUVPz24Wq/nz0lJ\ndA8MZLeQEB4sY7Tt0aNH6ebmxokTJ/JuBU0FK2gFph1Jq3w2+gt3L7D5hubU6cu2WZmbS370Eeng\noGfr1jvZqVN/RkdHG1jSUhAVJQa3PDDSqNXkb7+RnTqJRYZOnXr8ttTcVHoFeLHfz/1Y+5vanLB/\nAvdc32PUbI1KJdnPU+DQN67xa++V7PdzP9ZcUZOjdo/iicgTRWYNVel07BcayrciIiplrhJFvoKz\njsxio3WNeObOmademxuWSz83P8Z+G1spPytJMjaWnDqVdHEhN258asCVIGh5586H9POrz6ys86aT\n0UDoBYGHUlPZLSSErQID+WNiIgtKMLNKTEzk+PHj2bx5c549e9YEkpafSqfoh/42lNsvbS/1vYIg\npvF2cyMnTyYTEsSd6zVr1tDJyYmHDx82gsTFoNeLHjbffVfkaUEQ98qaNhXz0URHk7GKWC46uYh1\nVtbh1ENTefTWUeZrTedVkJ8vyjJkiDhoZuVn8afLP7Hz1s5s5tWMa/3WMitfdCvS6PUcde0aX7t5\ns9LnJzkZeZIN1jbg/OPzi8yXowxQ0tfFl0k/V+zUAyXmyhXRc6BZM3LPnseWlvn5cbx8+UVevTrM\n4H7xpkYQBJ7NzOSwq1fp6uvLb2Jji/TF1+v13LJlC2UyGT/++ONSpQk2N5VO0ddfU58F2oJS3RcR\n8V8JzvPnHz/v5+dHNzc3vvvuu2VOA1omfvhBTERVjCtlfj65+MswWk+YxhrLHLjkxPtMyE4wkZCP\no9WSM2aILqYZ99OlC4JAvzg/Tj4wmfYr7Tn32Fy+HHCUI69dq/Q5Sf4lKz+LMw7PYJP1TXgu+lzh\nv6efTKdcJmf6sYrhLmpQzp4Vc1l36VJYvzYt7SjlcmfGxq6k8IzVfriSk8MpYWF08PHhu7dvF1a+\nunnzJl988UX27NmT1ytTebb7VDpFv8ZvTYmvV6tFM42jo+jj/jQdnp6ezhEjRrBnz56Mi4szgLTF\ncPeumE/85s2nXhZ4L5Av73mZzqud+d7RL/ny5Ey6uZH795s3ql0QRBfUtm0f9wZNzE7koMPvsMo3\nMg76dQhDk0LNI6SROBF5gvXX1OfcY3N556c7lDvLqfB9dnLCP4YgkHv3Ut+yKW+vbEQ/77pUKHzN\nLZVRic3P5zu3b9P+/Hl2WLCAdRwd+f3331NfSSctlU7RlzTN7N274mR5zBjRTFMS9Ho9V65cSWdn\nZ/7111/lkLQYBEFcYnz99RMvScxO5KQDk9hgbQN6BXgxV/1fDIC3t5iTZuhQ0oQpYork229Fc9iV\nBxJC7k9NZQM/P0bnZXNz0Ga6rHbhG3++wViFcTJTmoOs/CyunbWW++338+CRg5XXJl9C1OoUXr7U\nm9eOtqempatov6uEM9vSEBYWRo/Ondmqf3+6HD7MQVeu8GR6eqU0Q1Y6RV8Sjh8X447WrCnbrPfi\nxYt0cXHhjz/+WPqbS8JPP4k7rUUsMXR6HTcGbqRslYwfnvnwiV4tWi25bJlYc+LYMeOIWVL++ENc\nnBw+TAYqlZTJ5bz0gNeGskDJj89+TIdvHfjB6Q8KbfiVFUEQeOfDOwxsHUh5gJxtN7flyF0jeTer\nYnpelJfs7Ev083NjdPSnoqlGpRJ/XC4u5GuvkZGR5hbRoOj1eq5fv54ymYxbt26lIAhU6/X8NSmJ\nHsHBbB0YyG0JCVRV8CRqD2ISRX/hwgW6u7uzefPm3LBhw2Pnf//9d3bo0IEdOnTg5MmTGRFRdMrh\n4oTVasVUBQ0bkvLHMyOUioiICDZp0oRffPGFYWdr9+6JWjH0cXNGcEIwu2ztwr4/9+WNlJL5e/r4\nkI0aiWkYTBzp/RCBgaRLh3zWOuXLP1OLjgK9p7zHWUdm0Xm1M9f7r6daV/FS6BaHIAi8/e5tBncK\npiZdHKjVOjW/uvAVHb915Bq/NdTqK1ZSrfKQnLybcrmMqan7Hz+ZnS2Gd8tkYt4PI9USMCWxsbEc\nMGAAe/XqVWTqFEEQeC4zk6OuXaOzXM7PoqOZVAFTQT+KSRS9h4cHL1y4wLt377JVq1aPlcby8/Oj\n4n463l9++YVTpkwptbCJiWTfvqJFxFAFr5OSktipUyfOnTuXOkOM3oJAjhol+ik/gCJfwYUnF9Jl\ntQt/Cf2l1ANLVpaYtr5dO/OtppVaLd19g1h/SRzfeOPpg8615Gsc9vswtt3cloH3DJ8HxFgIgsDb\nb99mSJcQajIfX41Fpkey/y/92XlrZwbEV65KT48iCDreufN/9PdvwpycYgq1ZGb+67NMvvkmGRNj\nEhkNiSAI/PXXX+nk5MQVK1aU6PcenpfHeRERtPfx4ZSwMAYpS1gC0gwYXdErFAp6eHgUvl+0aBGP\nHz/+xOvT0tLYsGHDogV5grBnz4qFdT7/3PC5wJRKJQcNGsSXXnqp/O5Uu3aJ2viBGcDZ6LOsv6Y+\n5xydw/S8snttCIJoEZLJyM2bTbtRqxUEDr96lXMjIpibK3D8eLJnTzEx2pPlFfjH9T/ovNqZH5z+\nwKQuomVBEARGLopkSLcQarOePGMXBIG/XvmVrt+5cvrh6UzOMX0K5vKi1Wbx6tXhDA3tT42mFDl6\n0tPFYgYODuIMv5IEyCmVSk6cOJFt27ZlaBEr7eLI1Gi4Oi6Ojfz92ePSJe5OTqa6gm3aGl3Rnz59\nmpMmTSp8/8MPP/CTTz554vVff/0133rrraIFKULYnTtFe/zp0+WR8umo1Wq+/vrr7NWrFzP+9Scs\nLcnJoqBBQSRFW/zy88vp+p0rT98xnPAREaIn3Pjxop+7KVgYGcnBV64UulHq9WISuEaNHt6kLYrk\nnGSO3zeerTa2Mlle+NIi6AVGvBXBS90vUasomVlGWaDke/+8R9kqGdf6raVGV/EjRklSpbrNgICW\njIxcVPYo14wMcdXq6EhOn16hbfghISFs1qwZ582bV+6JnE4Q+GdaGvuHhrKery+/iImpMGadCqXo\nT58+zdatWzPrCXl8AXDZsmWFx7x55+nmRoY9vdykQdDr9fzggw/o7u7O2LLYIl99lfzgA5JkUk4S\nB+wcQM9fPJmYbXi3mYIC8o03xP3e+HiDN/8QWxMS2DowsMgAk383abdvL36Fsf/mftb9ri7fPfVu\nidIqmApBLzBibgQv9bxErbL0tvfwtHAO+W0IW29qbdAB3RgoFH709XVhQsIWwzSYlSXm7XZ0FDdt\ny1Bww1gIgsCNGzdSJpNx7969Bm//Wk4O59y6RXsfH068eZPeWVkm9cw6f/78Q7rS5KabhQsXFmm6\nuXr1Kps1a/bU3PH/CqvXk//7nxgAZQqX9wdZt24dmzRpUrrcFidPihGGKhXP3DlD1+9c+dn5z8qc\nxqEkCIJYMrRePTLASOZif6WSTnI5I56S/jUsTLRWvfZa8elT0vLSOPnAZDbf0LxC2LgFvcBbs2/x\n8ouXH0v7Wqp2BIF/hv/Jxusb8+U9LzMyveLNcFNTD1AulzE9/YThG1coRD9cV1exiMPFi2YNAsnK\nyuK4cePYuXNno5cgVWi13BAfT/fAQLYJDOSme/eoNEMFLJNuxsbExBS5GRsbG8vmzZszoBiNBIAa\njZiKo1ev/6IyTY2XlxebNGlSspm9SkU2bUrdiWP87PxnBjfVFMfRo2KdiV27DNtuslrNBn5+PJJW\nvA03L08sutKyZfGmHJI8GHaQTqucuN5/vdn80wVB4K05t3i5T/mU/IOoNCp+ffFrOn7ryIUnFzI1\n10BeA+UkPn4dfX3rMTv7knE7ys8nt24VJz29eolfThPbsoOCgtikSRMuXLiQBQWli7AvD4Ig8HxW\nFl+9cYP2Pj6cGxHBkFIkjisrqankzJkmUvTe3t50d3dns2bN6OXlRZLcsmULt2wRl4izZs2ig4MD\nPTw86OHhwW7duhUtCMDhw8mRI8tWAMSQrFu3js2aNWN8cbaRZcuY+eooDtw5kP1/6W8UU01xXLsm\n1hn/6CPD/K40ej37Xr7MT0uZDG7XLtGU88MPxU/o7mTeYZetXThu7ziT+90LgsDb79zmpR6XqMsx\n/KorNTeVi04uouO3jvz64tdmM1UJgo6RkYsZGNiG+fkmjAHQ6ci9e0XbYtu2oheBkX2D/zXVODk5\ncf/+IlxFTUhiQQG/vHuXjf392Sk4mN/fu0eFEWb5J0+Ki6j33quEAVPTpxu1AlqpWLNmDZs3b857\nT+evzjoAACAASURBVKoIdfs2o5vY031dc77919tGNdUUR2oq2aePGNCYU8661Etu3+aIq1fLFCEY\nEUF27Ci6gxbnjVagLeCCEwvY1KspLyUaebb5ADHLYxjUIahIF0pDcjvjNl/d9yrrr6nPHy/9aNLv\nh06Xx+vXxzI0tD+1WjMFsAmCmJp12DAx+Gr58qe7apURlUrFadOmsX379oyKMnypyLKiFwSeysjg\n+Puz/Onh4fRVPLkcYEnJyyPfekuMJzp3PyVTpVP0FS36ePXq1WzRosXjyl4QGPhKD7p+XoteAV7m\nEe4R1GrRCaJ7d9ETrizsSk5ms4AAZpZjtFWpyHnzRK+cf/4p/vq9N/ZStkrGH4J/MLopJ25NHANa\nBlCdbDpviYD4APb5qQ/bbG7DvTf2Fpnu2ZBoNOm8dKkHw8KmUK+vGF4hvHmTnDOHtLcXM+Zdu2aQ\nZmNjY9mlSxdOnDixxKVEzUGKWs1VsbFsGRDA1oGB/DY2lgllMC0FB4sVIl977eHa1JVO0VdEVq5c\nyZYtWzLxgcQzh3/6gLIPrXj4xgEzSvY4giA6/7RpU/rStFdyciiTy3m1vEuC+/z9t5gnZ86c4mf3\nEekR7PBDB046MKnE+Y5KS8K2BPo38md+nOl9+gVB4MnIk+y2rRvbfd+O+2/uN4rCLyhIYFBQW0ZF\nvVcx8/OkpYnRtq6uYvWdw4fFkPcycP78edatW5erV6+umJ+1CARBoI9CwVn3PXaGX73KvSkpzC/G\n5qrVio/NyUn0dnsUSdEbiBUrVrBVq1ZMSkqi14VVdH3fkkFHDeSmZgS+/Va02z8h28RjZGg0bOrv\nz90GXlorlWIwpZubqPifhkqj4vTD0+mxxYNxCsO6W6X8kULfer7MizTv5o8gCDwWcYxdtnZhhx86\n8FDYIYMpKZXqNv39mzA2dqVB2jMq/1bf6dlTtEF8+aVYrb4ECILAdevW0cXFhaeNGWBjZHJ1Ov6W\nnMyBV67QwceH8yMi6K9UPvZ9iIsje/cmBwx4sheipOgNyGfLP6NsioytPnVgzIyXzS1Osfz4ozhx\nunz56dfp70e+vmNEV7R//hFNObNmid54T0IQBK72Xc16a+oZzAUz7Wga5c5y5lwzzkqhLAiCwCO3\njrDTlk702OLBQ2GHyjXDz8m5Sl/fekxI2GpAKU3E5cv/mXUmTiQvXHjibr5KpeLrr79ODw8P81aO\nMzB38/P5RUwMWwYEsKm/Pz+JjmZ4Xh6PHhXjML/55umOFpKiNxBqnZqv7H2F9T9wZi+7KsyvoDUk\nH+XgQXG55+395Gu+vnuXfS5fptbIy9/sbNF236ABeejQ0z1zjt46StkqGf+4XsQ6tRRknc+i3ElO\nZWDFzFPyrw9+121d2WpjK26/tL3UhXcUCl/K5c5MSSlbneUKQ1YWuWED6e4u2h7XrhVNPfdJTEzk\nCy+8wEmTJjHP3G55RkIQBIZkZ3Pxzdu0nZhA67oFXHQouVh7fqVT9KmpFcvmTZL52nyO3DWSY/8Y\ny7y+L3JC584cN26cYRKhmYCzZ0Vlf+TI4+cuZmXRxdeX8Sb0OT53TvS6GzTo6XVZriZfZaN1jfjZ\n+c/KNNvNuZpDuZOcmWczyyGtaRAEgedjznPY78Po+p0rV/qspCK/+GInGRl/Uy53YkaGEesrmBpB\nEEvFTZ1K1q5Njh/P0E2b6ObmZvhssxWQqCix6NfoMQIP3sni9PBw2vv40DM0lN/fu8fkItIuVDpF\nL5c7MS+vhIZlE5CnyePgXwdzwv4J1Oz8iezShQV5eRw4cCDffPPNSvOlCw4Wc9vv3v3fv6VpNGzo\n9//snXd4U+X7xu8Wyiyre0BbWkaZZU8VUBAZsgUHQxFBxYU//SrKcLNkKQoCyhJRVJCtIDuddNDd\n0tJJd9Pd7Jz798dhWOlI06RJsZ/req+TJifveZImd97xDD+e0tdFpw6oVOTWraLf/VtvVfQg+CfZ\npdkcvns4Z/86u1b+6PJUOf06+jHnUMOrdxqeHc65R+bSZp0N3z37LtOLK4/lyM39lRKJA4uK6piz\n25wpKuKxl1+mXdOm/MXGhlyxosEkU9OHX34RB2VbtlSc8cq1Wv6Rl8dno6PZ7upVjvmX6Dc4oc/I\n2M6goN7UaEzvKlWqLOWoPaM478g8qosKxAXv29G9JSUlHDhwIFf+KyWxORMZKYr9wYPiuvykiAi+\na2K/49xccXnWyUncU6hsHVKulnPukbkctHOQTtkiVVIVA3sEMm1TPefPMDAphSl888yb7LC2A2cd\nnsVLyZfuDiyysw/Q19e55hTDDRhBELh+/Xq6uLgwMDBQzKXz5pvi6GDkSDEyzwSDFGOgUIi+8V5e\n4qCsOmQaDY/m5fGZ26L/aFhYwxN6QRAYEzOPMTHzTDpaLpIXcfju4Vx0fJEY6LJ8uZhJ7B/k5OSw\na9eu/Prrr01kZe2JihJ/r57Zks9hISFmU9g7OFh0wPhHjeoKCILAjy5+RK+tXkyQVr1prJFpGDoy\nlIn/Zz6BM3WlWFHMbYHb6L3Nm72/7c2f/BZQ4uvCsrLq6xE3ZJRKJRcuXEgfH5/7azyrVGLZtTlz\nyLZtxXqihw+LARwNkLQ0sSzq9OnVOypUxh3Rb3BCT4pRfUFBvQ2XZa+WSGVSDto5iEtPLRXXhpOS\nxAx9lTimJyUl0dXV1SgZ8ozFT4GltLRVctP3ZhJMcxtBEJeWunQhR48Wq2v9m53BO+n8pTOvZdw/\n7BE0AiOnRTL6mWgK2oaxpFYbBEHg+fBlPP53S/be2o5vnnmTMbn1kNq1npFKpRw1ahSnTJnC0ppi\nOoqLyb17xQ2fDh3IBQvEWqNmkj64Js6dE2ez69bVLQ9cgxR6kiwvj6dEYseSkhrmMQYmtyyXPtt9\n+PZfb9+bUcycKfr5VkF4eDgdHBx44U48shlToFLR3d+fX/sW0MVF/I6YG2q1mB7F3V0skH47xf9d\njsUdo/16e/6ZcM8xXxDEnPJhj4ZRqzCPWYqhuXVrG/383CiTJTClMIXv//0+nb504vDdw7krZBeL\nFebpWVQbkpOT6e3tzbfffrv2zg4ZGeLi9siRoujPny+O/OvR0UBXtFry88/F2bUhZKPBCj0pbjb5\n+7tTpaqfdTipTMq+2/ty+d/L74n8pUui4tQwLTx//jwdHBwYGxtrfEP1RBAETo2M5Ju3/eVjY8U0\nx3v2mNauqlAqyW+/JV1dxdn5PzNj+qb50nGDI/df30+STPk8hdd8rumVU74hkJa2if7+nSmTVfQd\nV2vVPBF/gtN/ns52a9pxwdEFvJxyucE4CfyTkJAQuri43E2MWCdu3RJ3+x96SBT9efPIo0frr1pP\nNRQWkk8+KS5V1jZ6vSoatNCTZELC2wwPf0KsTm9EShQlHLJrSMWRvEZD9utH/qybf/KePXvo6enJ\nnBzz9PTYmp7OQcHBFcqgxcaKQvr99yY0rAZkMnLzZnGK+8QTYvCVIJAxuTF02+zGlV+vpJ+7HxUZ\n5jdyMwSpqesYEOBFubz6tNk5ZTnc6LeRPb/pyS5fdeGqi6sYm2e+A49/cubMGdrb2/P33383fOcZ\nGaJ//mOPkW3aiHWdd+4UC1HXM+Hh4obr668bdnWpwQu9VqtiaOhIpqR8YbTrlqvK+cieR7jkxJKK\nI6Fdu8QRQS1GRytWrOCwYcPqXn/WwITdzmOTWIldcXGi2O/fbwLDaoFcLv4g9epF9ukjzkTCT0bT\n83VPLj241OjJwkxBSsrnDAjoRoVC96GfIAgMuhXEt/58i85fOrPfjn5ce3UtUwrNM8hv9+7ddHR0\npK+vr/EvVlAgbgQ9/bQYiTtkiJhEJizM6MVSDh8WHYZ+/NHwfTd4oSdJuTzVaP7CCrWCT/z4BOce\nmVtRKIqLxSFkcHCt+hMEgc8++yxnzpxJrZl4tJRrNOwRGMgD1eSxiY4WX66JU3nrhCCIeXPmjCzn\nUUtfrluYxKHfjeTzfzxPtfbBWbpJTV17W+T1H3lqtBpeTL7IxScW03adLUd8P4JbA7YaPJeQPgiC\nwFWrVtHT05PxuiZlMiRKpeji9frrZNeuYirl+fPFHwIdCu7oikYj1opwdydDjJSNWxeht7h9osmx\nsLBAVabk5x9HQsLrGDQoDFZWNga5nkbQYPavswEAh586jKaWTe89+L//AXl5wJ49te5XqVRi7Nix\nGDFiBNatW2cQW+vC0hs3UKjR4GCPHrCwsKjyvOvXgfHjgR9+ACZNqkcD9UAtVSN0WCgsn+uE7Wku\n+P14OVotnI5u7u3w1+KDaGHVzNQm1on09I3IzNyBfv0uoXlzV4P0qdaqcS7pHH6J/gWnbpyCR3sP\nTO0+FdO8p6G3Q+9qPxuGRq1WY/HixYiOjsbJkyfh4OBQb9eukps3gb/+Av78E7h8GejeXfxCjB0L\nDBsGNG9e6y6Li4HnngNKS4FffwWM9TKr0867GOc3pvbUZEpCwpuMjJxmkI0mraDl3CNzOf7A+Ptz\niyQkkDY2dVrDy8/PZ9euXfndd6ZNMnUiP5/u/v6VFveujIAAMTLPnJMCahVahj4cysR37/nK5+eT\nG7co2Pal6Wz50hNc9Wm5wTa66pv09C309/ekXG68Ubdaq+bF5It888yb9Njiwc5bOnPZn8t4Mfki\nVRrjFmQpLy/npEmTOHHiRPPNIa9Uiu4w771HDh5MWluLa/yff076++uUWjkuTswdv3Sp8Ysp6SLj\nDUbotVoFr10bwPT0r+p0HUEQuOTEEj6y55HKw+qnTSO/qPueQEJCAh0dHXnmjGnykGQplXTy9eWV\nqvILVMHly+JaYmV+7KZGEATGzI1h1MyoSn3lVRo1J+6aR6flD7O9YxEnThTXRhtKDqxbt7bR39+j\nXkv/CYLA61nX+fGljzlo5yC2W9OOUw9N5bdB3/JmgWHTDUilUg4fPpzz58+nylxKyelCYaFYA/et\nt8QSam3bkhMmiDpx5cp9pRJPnBAHTLt21Y95D5TQk2LObdG/Xv/FrvfOvcchu4awRFFJ8d7z58VE\n7gaqcSmRSGhvb8/IyEiD9KcrWkHg+PBwrtAzletff4kf1H/7sJua5I+TGTwkmJryqn2stYKWr556\nlf23D+TX3+dx7FjxezlnDvnbb+Yr+hkZO277yZs2/W5uWS4PRhzk/KPz6bjBkV2/6srXTr/GY3HH\nWCDTP0Fceno6e/bsyXfeecds9q/0Ji9PTA27bJk44m/dmhw+nMI773Lt/Gi6OGno51d/5jxwQk+S\n2dk/MSCgK9Xq2ldZ3+y/md7bvJlfXolvvlYrulMaOMr1xx9/ZOfOnZmbm2vQfqtja3o6h9YxxcGd\nXNjh4QY0rA5kH8ymv7s/lVk1+6UJgsDlfy9nz296MqMkg7m55HffibPvdu1E0f/9d/MR/czM3fTz\n60iZzHg1AfRBK2gZlhXGNVfX8LF9j9H6C2v239Gfb/35Fv+I/YNSmVSnfmJiYujm5sb169cb2WIT\nUVZG+Z+XOM8nnAPa3GC6tTfp6Sl692zaRPr6GjVFwwMp9CQZF/ciY2Keq9V6/U8RP7Hjpo5MLarC\nH3nfPnLYMKO4WX344YccOXIkFfUQpRdRjStlbfnlFzF6zxROEf+kyLeIEnsJyyJrt6a75uoaem31\nquBamJND7tghVuyxthajb7duJW/cMLTVupGVtY9+fq5mlbW1KpQaJX3TfPn5lc85bv84Wn9hTZ/t\nPnzt9Gs8GHGQNwtu3vedDAgIoKOjI/eaYxi2gcjOFqVj1qzbgwetloyJEUPPX31VTOLUsiXZv7+Y\nxW/7dnFDzEAjjQdW6DWacgYG9mRm5g86nX828SwdNjgwMqeKJRSZTCxpJjFOyletVssZM2Zw/vz5\nRo1alGk07B0UxD06lmXThd27RdewqsqYGRt5ipy+zr7MP61fhPTWgK103+zOROn9ic6KisTlnIUL\nxR+0O8Esp0/XTxBlTs5h+vo6saysYeasuSP8G3w3cMYvM+j8pTMdNjhwyqEpXHN1DdftXUdbO1ue\nOHHC1KYajbAwsVTmqlXVV4GiXC5u5H79tfiB699fFP+ePcnnniO//FL0gsjOrvVg84EVepIsK4ui\nRGJb45ckOCOYduvteCXlStUnrVkjpo8zImVlZezfvz/XrVtntGu8ceMGn4qKMviPycaNogdBfQf9\nako1DOobVOeUwzuu7WDHTR0ZlxdX5TmCIKZZ+OIL8uGHxWXXYcNEx4tTp2qfWbAm8vKOUyJxeKBS\nDQuCwNSiVP4S9QsnLJ/Apm2asvni5uz+dXc+89sz3OC7geeTztdprd+cOHJEdFzQMXj+fpRKsZTi\n99+Tr71GPvKImLLBzk7M7Pfaa+Kao6+vGOxVBbpoZ4Pwo6+KzMydyMz8FgMGBMDSssV9jydIEzBq\n7yh8O+lbTPOeVnkneXlAjx6Anx/QrZs+puvMrVu3MGzYMHzzzTeYOnWqQfs+V1CAhfHxCB80CDZW\nVgbtGwBWrgROnQIuXgTatTN49/dBgYieGY2mNk3RfXf3Ovt5772+Fx9e+BB/zf0LvR1613i+XA4E\nBABXrohu1deuiR+PUaOAoUOBwYOBzp0BfcwqLPwbMTHPok+fk2jbdoger8a82blzJz7++GOcOXMG\nPXr1QFx+HEKzQhGaHYrQrFBcz74O+1b26OvYF70det9t3Wy7oVkT84+BIIG1a4FvvwWOHgUGDTJw\n59nZQFQUEBl57xgXB7RqBXh739csPD1r1M4GLfQkERPzFJo1c0HXrl9VeCy7LBsjfxiJ90e+j5cG\nvlR1J2+8AQgCsG2bPmbXmmvXrmHixIk4d+4c+vXrZ5A+C9Vq+AQH4/vu3THOxjABZf+GFN+q8HAx\npqRVK6Nc5i5JHyShWFIMn799YNnM0iB9Hoo8hLfPvo3Tz55Gf+f+tXquSgUEB4vCHxQkNoVC/JIP\nHnyvOTlVL/7FxRJERU1Hr15H0L79w3V8RebHunXrsGPHDpw7dw5dunSp9ByBAhILEhGZE4mo3ChE\n5orH1OJUeHXwQm+H3uhu1x3dbcXWzbYb2jRvU8+vpHKUSuCll4CYGODYMcDVMPFsNUMCmZmi4MfH\ni8fbzSI9/cEWegBQqwsRHNwPXbtug53dkwCAEmUJRu0dhRneM7By1Mqqn5yQAAwfDsTGAvb2+ppe\naw4fPox3330XgYGBcHJyqnN/z8XEwMbKCl937WoA66pGEIAFC4CCAnEk08xIg6+cH3OQvCoZAwIH\noJm9YS9yJPYIXjn1Ck4+cxKDXQfXqa+sLHGkf6cFB4si36dPxdarF2BtDZSUXENk5CT06HEQNjbj\nDPSKzAOSWL58OU6cOIGzZ8/CVQ8FVGgUiMuPQ1RuFOKl8YjPj0e8NB4J0gR0aNkB3Wy7oZttN3h1\n8IJnB8+7rX2L9kZ4RfeTnw9Mny5GuO7fD7RuXS+XrRFdtLPBCz0AFBf7Ijp6JgYODIFlUwdM+mkS\nvGy88O3Eb6uf8s+aBQwYAHzwgZ5W68+dqe2lS5fQosX9y0668ktuLlanpCB04EC0atLEgBZWjlot\nvm2tWgE//ggY+pIlASWIfDIS/S72Q+vexvkmnbxxEguPLcTROUcx0m2kwfq9M+uOjKzYYmOBgQMj\n8P774xAevgtt2kxB167iUpC7u+Hfw/pGq9Vi6dKlCA0NxZkzZ2Bra2vQ/gUKuFVyC/H58bghvYHk\nomQkFSYhqTAJNwtvwsrSCp4dPNG5Q2d0atsJbu3c7rZObTvBobVDnZf+4uLE1CBPPQV88QVgaZhJ\npkH4zwg9AKSkfIrCwgvYmuqGAnkhjsw5UjF/zb/x8wPmzBGnQcZeh6gEknj66adhZWWFAwcO6PVB\nzFAqMSA4GCf79MHgtm2NYGXlKBTAxImiUG3frt86daX9pikQOiwU3Xd2h+1kw4rFvzl78yzmHpmL\nX5/6FaM8Rhn1WqWl8QgLGwOZbDPi4ubgxg3gxg1xQpmTA3h4iILv4XH/bScn8xKVf6NSqTB//nzk\n5ubi2LFjaNOmfpdYSEIqlyKpMAnJhclIL0lHWnFahVamKoNrW1e4tHG516zFo3MbZzhZO8GhtQNs\nWtrA0uL+N/vvv4FnnwXWrQNeeKFeX55O1IvQX7lyBUuWLIFGo8Ebb7yB119//b5zli9fjl9++QUd\nOnTAwYMH4e3trZex1UFq8fLPnggsEOD7UhxaN6tmNEgCI0cCixcDzz+v9zXrikwmw6hRozBjxgws\nX768Vs8liQmRkRjeti1We3gYx8BqKC0FHntMzPn0xRd1709brkXYQ2FweNYBbu+61b1DHbiQfAFP\n//Y0Ds08hMc8HzPKNRSKVISFPQwPj4/h7Hy/SshkQHIykJoKpKTcO95phYWAo6O4FuziUvHo5CQu\nIzg4AHZ2xltKqwq5XI5Zs2bBysoKP//8c51mpsakXFWOzNLMuy2rLOvu7YzSDOSW5yKnLAelqlLY\ntbKDY2tHOLR2gENrB2RdfhKBByZh8Zq/MfwhNWxb2cKulR1sW9qiQ8sOaNm0Zb0mhKuMehH6/v37\nY+vWrXB3d8f48eMhkUhgZ2d39/GgoCC8/fbbOH78OP766y8cPHgQJ0+e1MvY6tgduhtfXP0MX/Ut\nx8MDjqFduxFVn/z778AnnwChoSafN2dkZGDo0KHYtm0bpk2rwjOoEr7NyMDe7Gz49u8PKxMN+fLz\ngUceEUc5776rfz8kETMnBpYtLeG917tevzhXU69i5uGZ2D99P57o8oRB+1apshEW9jBcXV9Hx45v\n6NWHUinuBWRmAhkZ4vHO7ZwcIDdXbPn5QJs2oujb2wO2tmKzsbm/tWtXsemRmBElJSWYMmUKOnbs\niD179sDKCJ5e9Y1Kq0JeeR5yy3ORVZKLr7/oiJCLLpj52R7Q5gbyZfmQyqXiUSZFoaIQAgV0aNEB\nHVp2QPsW7e/ebtu8Ldo1b1fx2EI8WjezhnUza7Rp1gbWzazRulnr6lcfasDoQl9cXIzRo0cjLCwM\nAPDGG29g/PjxmPSPPLdff/01tFot3nrrLQCAl5cXbt68qZexVXEm4QxeOPYCrrxwBTaMRWLiWxg0\nKAxNm1aySaNSibtj33wDPP64XtczNHc8cf7++2/4+PjUeP4NmQwjwsLg278/uptg2emf3LoFPPww\n8OGHwKJF+vWR+lkqpCel6HepHyxb1P+Pll+6H6b9PA0/TP0Bk7tNNkifanUBrl8fBXv72fDwqMYh\nwEAIgjj6z8sTfwAKCsQmld5/u7i4YmvSBGjfHmjbVvyxsLa+/2htLa5wtmoFkFJ8/fUEdO06EG+9\n9Q2srS3RogUqtJYtxWPz5kBT/TXMJJSXi+mFi4qAI0fEH8eqUGgUKJQXokhRhEJFIQrlhShUFKJE\nWYISZQmKlcXiUVF8974yVRlKVaUoU5Xdbc2aNIN1M2u0smqF1lat0bpZ6wq3WzZtiVZWrdDSqiVa\nNr3drMT7lg5ZWqN21ulfcO3atQrLMD179kRAQEAFoQ8KCsK8efPu/m1vb4+bN2/Cy8urLpe+S0hm\nCOb/MR/Hnj6GbrbdAHRDYeE5xMcvRs+ev9w/Oty5E/D0NBuRB4DBgwdj27ZtmDp1KgIDA+Ho6Fjl\nuRoS82Jj8bGHh8lFHgA6dgTOnhX9y9u3Fzdqa0P+sXxkfpeJAYEDTCLyADCi0wicfPYknjz0JHZM\n2oHpPabXqT+NphQRERNgYzMe7u4rDGRl9Vha3hvFV7IyWiWkGDNwR/TLysRWWlrxWFYmPp6YmIWj\nRx+Hk9NENG++Fhs3WkChEPtQKFDhtlwuzkgAUfCbNROPd1qzZmKzsrr/aGUl/kDcOf77dpMm999u\n0qT6ZmkptqpuW1qKP5Zr14r7JG++KcZSWFiIzdKy4lFsLWBp6QwLC2dYWADtLYAOdx5rClhYARZt\n/nl+xXb7vwClIINcWw65tly8rSmHQlsOuVYGhbYcCq0MSq0cSoUcMq0chVo5lNoiKLRynf7PRv+t\npRh9W+G+qqbmH3300d3bo0ePxujRo6vtO6UoBVN+noLvJn+HEZ3uLdV4eX2JkJChyMraDReXf/jQ\nl5YCn30mFhgwM+bMmYOYmBjMmDEDFy5cQPMq5tNrUlPRvmlTvOriUs8WVk3XrsDp02KdhnbtgHE6\neg6WR5UjflE8+pzug+YueqwfGJAhrkNw5rkzmHhwItSCGrN7zdarH61WjqioKbC29oGn5waTr9/W\nhIXFvZG6s3P156ampmLs2LF4550XsHz5cp1fm0YjCr5KJR7vNJVK9OJSq+/d/ud9Gk3lR61WvH3n\neOe2SiUeK2uCILZ/39ZqxR+7OzMiPz9R5Fu1AnbvvvcYWfH2P++r7G9dGnDntgXI1gBaV7j/3uMV\n7ysvvwS5/BLINgB03PzWJVK3KoqKitivX7+7f7/22ms8efJkhXO++uorbtq06e7fnp6elfZVW1Ok\nMim9t3lza0DlVePLymIokdixrCzq3p2rV5Nz59bqOvWJVqvlrFmzqsyJE1JSQgeJhLfqITmaPly9\nKqY31iVFqypfRX9Pf2YfqLrEoSm4nnWdTl868cfw2hf31GpVjIiYzOjopykIVadSbojExcWxU6dO\n/OqrutWDMFfOnBE/u4cOmdqS2qOLdtY5102/fv14+fJlJicns3v37sz7V73FwMBAjhw5kvn5+Tx4\n8CAnTZqkt7F3kKvlfPiHh/n2X29Xe15m5vcMCupFjUYmJguysSGTk3W+jimoKieOXKtlr6Ag/lhN\n7Vdz4PRpMb1xRETV52hVWoaNCatQJcqciMqJostGF34f+r3OzxEEDaOjn2ZExGRqtQ2oqIYOXL9+\nnc7OztyzZ4+pTTEK334r1kyuj/rkxqBehP7SpUv09vaml5cXt24VR9c7duzgjh077p7z3nvv0cPD\ngwMGDGBMTOVJyHQVeq2g5Zxf53DW4VkVC3pXgiAIjI5+hvHxS8SaXm+9peOrMi3p6el0dXXl5kbn\npgAAIABJREFU0aNH7973TmIiZxohYZkxOHSIdHERqzJWxo3XbjB8QjgFjfm+lvj8eHba1InfBn1b\n47mCIDAu7iWGhY0WBxUPEH5+fnRwcODhw4dNbYrB0WjE2iHe3mSieY45dKJehN5Q6Cr07559lyO/\nH0m5WrcqUGp1MQOuuDFnsrVBq7sbm2vXrtHOzo6hoaG8UlhIZ19f5iprLrphLuzcKRbr+nd648xd\nmQzsHkh1kW51bE3JzYKb9NjiwU1+m6o8RxAEJia+w+DgIXoVwzFnzp8/T3t7e54+fdrUphic0lJy\nyhRyzJhqE0M2CB44od8WuI3dv+5eeYWoaihZOpaSs60plyfraZ1p+PXXX+nasSPdjh/nsQb0I3WH\nL78ku3W7l9646KpYQKQ83kxKO+lAalEqvbZ6cc3VNZU+npLyGYOCelOl0q3aUkPh+PHjtLe356VL\nl0xtisHJyBDTwS9cKGYKbug8UEL/R+wfdP7SmUkFtaypGRREurgwLXENQ0KGNbj108HLltG2Vy+W\nm0vdu1qycqVYoTErQiwgIv2z4QliRkkGvbd5c/XF1RWWztLTv2JAQBcqFJkmtM7wHDp0iI6Ojgwy\nt6LBBuD6dbHG0BdfGKWYnEl4YIQ+ID2A9uvteS3jWu06FQRxbvbddxQELcPDJ/DmzffraGn9cTo/\nn25+fnx67lzOmjWrQRZVFgTyjaVa9mldytjP001tjt7klOWwz7d9+N659ygIArOy9tLPr1ODmyXW\nxK5du+ji4sKI6nbTGygnT4qeNQYuC21yHgihT5Qm0ulLJ56I16Mc2Z9/imsHanE9WKnMoZ+fK6XS\nv+piar0gVano6ufHCwUFVCgUHDlyJD/88ENTm1VrBEFgxFNRnO5VyLFjBcp121oxS/LL8znguwF8\n8fcJvCpxZHl5rKlNMiibNm2iu7s7b5iqgK4R+eor0bPG39/UlhieBi/0uWW57PpVV26/tr32HWq1\npI8P+fvvFe4uKLhAX19nKhQZ+ppaLzwTHc03/vGFy83NZefOnbl//34TWlV7Uj5LYfCQYKrKtHzq\nKXLqVFLVsFbPKpCceZR9t1jxmcOTqdaa/4ayLgiCwNWrV7Nbt25MM1VxYCOhVot1gHv0IJNquerb\nENAK2oYt9KXKUg7eOZgrLqzQr8MDB8Sin5UsxCUnf8LQ0EcoCOb5RT2ck8NuAQEs11QMuomKiqK9\nvT2vXr1qIstqR96xPPq5+lGRIQZ4KZXkhAnk00+Lrm0NjaIiCSUSe2bmnePjBx7njF9mUKE2z+A1\nXdFqtXzzzTfp4+PDbDOP0agtxcXi523cOLKw0NTWGJ6I7Aj6bPdpuEKv0qg44ccJXHhsoX5+4wqF\n6Nt3+XKlDwuCltevP26W6/WZCgUdJBIGFhdX+vhff/1FR0dHxsfH17NltaMsqowSOwmLAyq+DpmM\nfOwxcsECcdLVUCgpCaZEYk+p9CxJUqFWcMYvMzj+wHiWqxrmRrlarebzzz/PkSNHsvABU8LkZLJX\nL/Lllxv2DLIq9l/fT7v1dtx3fV/DFHpBELjg6AJOOjhJ/6nx5s1kFRG4d1Aqc+nn15H5+SerPa8+\nEQSBE8PDubKGOebu3bvp6enJnDt+i2aGKl/FAK8AZu3LqvTx8nKx4P1LLzUMsS8ri6KvrxPz8v6o\ncL9aq+aCowv40A8PsUheZCLr9EOhUHD69Ol8/PHHWVZWZmpzDIqfH+nsTG7d+uB41txBoVbw5ZMv\ns+tXXRmRLW6YN0ihX/73cg7dNZRlSj0/fEVFYgx+ZKQOp16lROJAuTxFv2sZmJ0ZGRxw7RqVOqjf\nypUrOWTIELNzu9SqtLz+2HUmvF1FWOxtSkrI4cPFgGVz/jLKZIn083NldvbBSh/XClq+dvo1Dvhu\nAPPKG0asQ2lpKceNG8eZM2dSYaZ5k/Tlp59IOzvRw+ZBI7kwmYN2DuKMX2awWHFvptzghP6rgK/Y\n7etudfvCfPAB+cILOp+emrqeISFDqdWaNnLipkxGO4mEUTqOrgRB4Lx58zht2jRqzGjBO/7VeJ3T\nGxQVkYMHk2+/bZ5iL5en0d/fgxkZO6s9TxAEfnD+A/bY1oNpRea9mVlQUMBhw4Zx4cKFVKvNc49K\nHwSB/Ogj0t2dDA83tTWG59SNU3TY4MCNfhvvW85ucELvutGVyYXJ+ndy65aYuKwWngOCIDAi4kkm\nJJguD45GEPhQaCg31tLjQalUcsyYMXzjjTeMZFntuPXNLQb2qF16g4ICMaBq+XLzEnulMpsBAd2Y\nllZ1+oN/s9FvIztt6sSonKiaTzYBmZmZ7Nu3L5ctW9YgcibpSnk5OWcOOXQomVX5amGDRaPVcMWF\nFXTd6MqrqZU7YTQ4ob+edb1unbz0Evm//9X6aSpVAf39PZib+3vNJxuB9ampHBUWRq0eX77CwkL2\n6tWLmzdvNoJlulNwvoASBwllCbVP6pWXR/buLY7IzAGVSsqgoD5MTv641s/9MfxHOmxwoCRVYgTL\n9CcxMZGenp789NNPHyiRT08nBw4kn3tO3Oh/kMgsyeTovaP52L7HmF1atUdUgxP6OhETIy7O6Zmh\nqLg4iBKJPWWy6teWDU1kWRntJBIm1yGSKDU1la6urvztt98MaJnuyBJklDhIWHBB/+xQ2dmir/NH\nH5l2ZK9WFzE4eDATE9/RWxD/TPiTduvteCzumIGt04+wsDA6OztXyCj7IBAQIGZJXbvWvGaDhuDc\nzXN0/tKZH138iBpt9Uuz/y2hnzaNXL++Tl3curWNQUF9qNHUjxeCUqtlv2vX+H1m3XOlhIaG0t7e\nnhJJ/Y4k1UVqBnoHMmN73QPQsrPFkf0HH5jmi6tWlzAkZARv3HitzqPeoFtBdPrSibtCdhnIOv24\ndOkS7e3t+euvv5rUDkNz4IA4rjt+3NSWGBaNVsNVF1fR+Utn/n3zb52e898ReolEzFRUx/h6QRAY\nG7uAUVGz62V6+2FSEp+MiDDYtf766y86ODgwvJ52owS1wPAnwnljqeFC5vPyxDX7//u/+hV7jaaM\noaGPMC5uMYUa6hzoSnx+PDtv6cxPL5tmueTo0aO0t7fn+fPn6/3axkKjId97j+zcWSfHugZFVmkW\nx+wdwzF7xzCrVPfNhv+G0AsCOXIkaaDqN1qtnMHBg5mautYg/VWFX1ERHX19mWXgPKk///wzXVxc\nmFgPlRQSliXw+tjrFNSGFTGplBw0SAxdrw991GhkDAt7lLGxzxtM5O+QWZJJn+0+fOXkK/WaMmH3\n7t10cnJicHBwvV3T2BQXk5Mnk6NGNajSEjrx982/6fylM1ddXFXjUs2/+W8I/bFj4nzfgC6GCkU6\nfX2dKZX+abA+/0mJWk1Pf38eNdKndceOHfT09GRGhvHy+WTuymRA1wCqCowTdlhUJGawWLLEuEFV\nWq2c4eHjGR39rNHqvBbJizhu/zhO+HFCBf9nYyAIAtesWUMPDw+zj56uDbGxZPfuYqTrg5BD/g4q\njYrvnXuPLhtdeO7mOb36ePCFXq0Wd/CMEB1RWHiFEokDZTLDj4xfiI3lorg4g/f7Tz7//HP27t2b\nBUYon1NwTvSwMXYBkZIS8qGHxLAIY4QKaLVKRkRMZlTUU0bPe6TSqLjkxBL2/rY3UwqNE6Cn0Wj4\n6quvsk+fPrx165ZRrmEKjh4V0wt/r3sJ3wZBojSRg3cO5qSDk5hblqt3Pw++0O/eLcbSG2l+L27O\n9qZGU2qwPn/LzWWXgACWGjnISRAELlu2jMOHDzdoiHtZdBkl9hIWXqqf3ChlZWJJgblz72abNgha\nrYqRkdMZGTm13orRCILATX6b6PylMwPSAwzad3l5OadOncrHHnuMRUUNKx1DVWg05IoV4vZbYKCp\nrTEsd3LVfBXwVZ33bx5soS8vJ11dRR8rIyFuzi5kVNQsg2ym3bqdsCygioRlhkar1XLBggUcP348\nlQaY7yqzlfT38K8yh42xKC8XsxBOnizeritarYpRUU8xPHwitdr6TwFwPO447dbb8Zcow1TAyM3N\n5dChQzlv3jyD/J/NgYIC8X8+atS9UpQPAsWKYj73+3Pssa0Hw7MN4zShi3ZaoqGyeTMwfDgwdKjR\nLmFhYYFu3b6BQpGG9PR1depLIPF8XBxec3XF0LZtDWRh9VhaWmL37t1o0aIF5s+fD61Wq3dfWrkW\nUVOj4DjPEU7znQxoZc20agUcOwZ06ACMGwcUFOjflyCoEBMzB4IgQ+/ev8PSsrnhDNWRJ7s/iXPz\nzuGds+/g8yufQ/yu6kdCQgKGDx+OsWPHYt++fWjWrJkBLTUNUVHA4MFAt27AuXOAg4OpLTIM/un+\n6P9df1g3s0bw4mD0dexbfxc3yE+KAaiVKdnZYqqDevAsIUmF4hZ9fV2Yn69HlavbbE5P54iQEKpN\n4GYnl8v56KOPcv78+XrlxRG0AqOeimL0M9EmjarUasl33iF79hQjImv/fAUjIqYwImKKSUby/yaz\nJJODdg7ic78/p1eqY39/fzo5OfG7774zgnWm4Y5//IEDprbEcCg1Si7/ezkdNzjySMwRg/evi3Y2\nTKF/+WVy2TLjGVMJxcUBlEjsWVJSe3e1iNJS2kkkvGnCGO2ysjKOGTNGL7G/ufwmQ0eGUis3j5zC\nGzaQbm5iMLSuaLVyRkRMYmTkdJMnsPsn5apyzj0yl32392WiVPeByx0f+VOnThnRuvpDJiMXLRIr\nfz5IScnCs8Pps92HUw9NrTaNQV14MIU+Olr8yZdKjWtQJeTmHqGvr0ut0hrLtVr2CQriHjPItqSP\n2Gd+n8kArwAqc81HHEly/37S0VG3GqCiC+UTjIp6qt42XmuDIAjcFriNDhscaqyNLAgC165dS1dX\nV167dq2eLDQu8fFk375i5bGSElNbYxg0Wg3XXl1Lu/V23BO2x6gz4QdT6CdPJjduNK4x1ZCevpmB\ngT2pVuvmdbIsIYGzoqLMJpFUeXk5x4wZw3nz5tUo9tKzUtGNMta8ct7f4fRp0e2uukGtRlPO69fH\nMTr6abMtHXkHvzQ/dtzUkSsvrKw0aEahUHD+/PkcMGAA0/VZuzJDfv5ZHLft2PHg5KtJkCZwxPcj\nOGbvGKO50v6TB0/oz58XY59NWCxBEATeuPE6w8IerXEJ4IxUyo5+fsw3s1pmuoh9SXAJJXYSFl4x\n7xJzAQGkkxO5Zcv9QqHRlDEs7FHGxMw1e5G/Q3ZpNkftGcUnfnyCUtm9WWtOTg5HjBjBWbNmPRAV\noeRy8pVXSC8vMjTU1NYYBo1Wwy3+W2i33o5bA7ZSa+Ao66p4sIReqyX79yd/MYxLWl0QBA0jI6cy\nJmZ+lSP1DIWCTr6+vGymtTirE3tZooy+zr7MPaJ/EEd9kpIiTv1ffPFe1KRKVcCQkBG30xqYT2EW\nXVBr1Xzn7Dv02OLBaxnXGB4eTnd3d65cuZLahlB7sQZiYsSv8qxZYgT0g0BEdgSH7BrCUXtGMT6/\nfiOSHyyh37dPrCxgJvM7jaacwcGDmZy8+v7HBIGjw8L4SXJyvdtVG+6I/dy5c+9WG1JmKxngFcCM\nHcZLn2AMSkvFBKYPPUSmpWUzKKgPExLeMnjumvrk1+hf2e6zdmw9vjUP/lR5KcOGhCCQ27Y9WEs1\ncrWcH57/kPbr7bkrZFe9jeL/iS5C3zD86GUy4MMPgY0bAQsLU1sDAGjSpBX69DmB7Oz9yM7eW+Gx\nz1JTYQngA3d3k9imK61atcLJkyeRl5eH6dOnoySnBBETI+A41xEuS1xMbV6tsLYGfv8deOihQgwd\nqoJU+hq8vDbBwqJhfMT/jSAISDiWgBb7W8B7kje2K7YjpSjF1GbpTXY2MGkSsG8f4OsLLFliNl9l\nvbmcchk+O3wQlx+H8JfDsWjAIlia6+dN31+RkpISTpkyhZ06deLUqVNZWnp/moC0tDSOHj2aPXv2\n5KhRo3jwYNWjEgDM+6OKJF+ff07OnKmvqUalrCyGEokD8/PFfDuXCgvp5OvLzAZUdFmlUnHuc3PZ\nt11f+s/3N5uN49pSWhpBPz9XfvPNWdrbk0cM77JcLxQWFnLKlCkcPnw409PTqRW03OC7gXbr7bj/\n+v4G9/85elT0kFq5kjSz7Sq9yC/P5+ITi+m60ZVHY4+a2hzjLt2sW7eOr732GhUKBZcuXcoNGzbc\nd05WVhbDwsJIknl5eezcuTNLqvCfAkCJfSWJsu4ERyXUb+Wn2nDHxz4p5xQ7+vnxjAlcP+uCoBUY\n+XQkF3ZZyO7duzMlxfieAoamqMiXEokDs7N/Ikleu0Z27ChWrDKj2uk1EhYWRi8vL77xxhv3pTMI\nywpjz296cvavs1kgM3yyOkNTWirum3h6kr6+pram7qi1an4T9A3t19tz6amlLJKbxwaDUYV+5syZ\nd0U8JCSEs2bNqvE5kydP5oULFyo3BGDGjgwG9QqipvQf38xXXiHffFNfM+uNgsIrPHmpA9dENay1\nVEEQmPB2AkMfCqVGpuHmzZvp6upab8VLDIFU+iclEjvm55+ucH9mppgQbfRosW68ubNnzx7a2dnx\n0KFDVZ4jU8n4+unX2WlTJ566Yb7BUmfPig5yL7zwYPjGX0q+xL7b+3L03tEGy1FjKIwq9G5ubpTf\nruhUXl5ONze3as9PSEhg586dq3QNAyAmEXshllGzb/udR0SIjtL5+fqaWW9sSEvjs4E7eFVix6Ki\nhjN8Sf4omUG9gyrklT906BDt7e158eJF0xmmI1lZ+yiROLCoqPISihoN+dln4tLBCf0zWBgVuVzO\nl156id7e3oyOjtbpOWcTz9JrqxdnHZ7FW8Xm8yuWn08uWEC6u4txDg2d1KJUzv51Nt02u/HX6F/N\nctmszkI/duxY9u7d+7527NgxdurUSWehLykp4YABA/jHH39Ua+zq1au56sNVXOy8mL+88rM4FNu2\nrcYXYWoCiotpL5EwRS6/Pbq0Z3FxkKnNqpHUNakM9A6kMvv+eIDz58/T3t6ehw8fNoFlNSMIWiYl\nfUh//84sK6tZHCUSMW3CG2+YNAzjPm7evMmBAwfyqaeeqnJZsypkKhlXXFhB23W23OK/pV4rWP0b\nQRCDn5ycxPe4ki27BkWJooQfXfyItutsufriar1yERmLixcvcvXq1XebUUf0M2bMYOjtSIfg4GDO\nrGKzVKVScdy4cdy8eXP1hvzDWHmKnL7tz7Ow83TDJiE3AvkqFT38/fl77j2f87y845RIHFhaGmZC\ny6onbVMaA7oEUJFRteqFhYWxU6dO/OCDD/RKhmYsNBoZo6JmMyRkOJVK3XPYFhSQM2aINWmNXPel\nRgRB4A8//EA7Oztu2bKlTiPF2LxYjt47mgO+G8CgW/U/wEhLEwPWe/XSLSWFOSNXy7nJbxMdNjjw\nmd+eqZfI1rpSL5uxMpmMr776aqWbsYIgcN68eVymQwKyCsaWl1NqP4G+NhepSDej4de/UAsCx16/\nzncryaKZm/sbfX2dWFZmfhWMb227RX8Pf8pTay6mnpOTwzFjxvDxxx9nvhksoSmV2QwJGcro6Kep\n1da+GLwgkNu33/PlNkX8UV5eHqdPn84+ffowIiLCIH0KgsD91/fTcYMjXz31KvPKjV9UVaUSI5Lt\n7MhPPmnYJf5UGhV3XNvBjps6cuqhqYzINsz/pT4wqtBX5V6ZkZHBiRMnkiSvXr1KCwsL+vj4sF+/\nfuzXrx/PnDlTs7GrV5OzZzN1TSpDhoaYTdbEf/O/xESOvX69ytTD2dk/0dfXmSUl5hPjnbkrk36d\n/ChL0j2Tplqt5jvvvEMPDw+GhIQY0brqKSuLpL+/B5OSVtV5rTQyUqxJO3KkmCevvjhz5gxdXFz4\nzjvvUGGENSSpTMpXT71Km3U2/OjiRyxRGH4nVBDE6p3du5OPP167LKLmhkar4YHwA/Ta6sWx+8ca\nvPJXfWBUoTc0d41NThbdKVNTKQgCo2ZHMWpWFAWNeW2C/JKTQw9//xrz2OTm/k6JxJ5S6dl6sqxq\nsvZl0c/Vj+U39FtvPHz4MO3s7PjDDz8Y2LKaubP3kZ1tuETlGg35zTfiiHTFCjH/irEoLy/n0qVL\n2alTpyo9zwxJojSRc4/MpcMGB27020iZyjApsiMjyXHjSG9vMZmcGe5N6oRcLefO4J303ubN4buH\n80KS8f8nxqJhCv3MmeI88DZahZZhY8J4Y+kNs9nxvpNfPkzHHac7hcYNKVK1JefnHPo6+bIsum4J\nsaKjo9mtWzcuWbLEKCPSfyMIWqakfEFfX0cWFV01yjUyMsS8K126kH//bfj+fX196e3tzWeeecYo\nxdqrIzInktN+nsaOmzpyZ/BOqjT6RSzl5oplIOztya++ariBT7llufzo4kd03ODIiQcn8nzSebPR\nFX1peEL/99+kh4dYheAfqIvUvOZzjSmfmn5jRKpS0SsggAeza1dEoKwsin5+bkxNXVfvH6zM7zPp\n6+TL0nDDuEIUFxdz+vTpHDBggFH97VWqfIaHT2RIyAjK5WlGu84dTpwQPXPmzycNUT4gPz+fixYt\noouLC38xcTK+gPQAjt0/ll5bvbg1YCuLFbrVLS4qIj/9VJz1vPmmScpAGIS4vDguPrGY7de256Lj\nixidW4/rdUam4Ql9r15Vxq0rMhX09/Rn5q7MerbsHhpB4BPh4VymZ5SuQpHOoKDevHHj9XrLqJj2\nZRr93PxYHmdY9zBBELh7927a2dnx448/psrAQ7zi4gD6+7szMfH/6rVYSGkp+e674urh//6nXwiH\nIAjcu3cvHR0d+frrr7PIjFI0SlIlnPPrHHZY24GvnnqVMbmVL7BLpWLKAltbct4803sp6UO5qpw/\nRfzE8QfG0369PVddXGW0Kk+mpOEJ/dix1S76ld8op6+zb9U5cYzMBzdvcnRYWJ3qvqrVhQwLG82o\nqFl6eY3oiiAIvLn8JgO9AylPM9510tPTOWHCBPr4+Nx1t60LgiAwPX0LJRJ75uVVHXdhbNLTxaUK\nGxty1Srd0+lGR0fzkUce4aBBgxgcXPuyk/XFreJbXHlhJR03OHLs/rH8I/YParQa5uSQ770nvu5F\ni+qtLLPBEASBV1Ku8MVjL7LD2g4cf2A8D0YcNNgehTnS8IReB/eHkmsllNhLWHS1fkdJv+Xm0s3P\njzkG8CHTahWMiprN0NCRVCgMH9UoaATGL4ln8MDgeikBeGcEa29vzxUrVui9dq9WFzEqaiaDgwdS\nJrtpYCv1IymJfP55cW16zRqyqpofRUVFfP/992lnZ8dt27aZVdxBdSjUCh4IP8B+24bSelVHNp/6\nJqe9eZlJyQ3DflL8/EXlRHH1xdXsvKUze37Tk+sk68wqYtiYNDyh15E7Je7KIuun0o5/cTHtJBIG\nGzBph7jJ+Cl9fR2Zn2+4nCVapZZRs6MYNiaM6uL6DTbLyMjgk08+yV69elEiqTwlQVUUFl6kv78n\n4+NfNepMR1/i4sSapo6O5Icfis5hpFiHd+3atbS3t+eCBQuYmWm6pcXaolSShw+LE2k7O3LBu1F8\n98Qn9NnuQ4cNDlx8YjH/TPiTSo35OcgXK4p5JOYIXzr+Ejtt6kT3ze58/fTrvJZxrcFvrtYWXbTT\n4vaJJsfCwgK1MSXnUA6S/peEvmf7onWP1kazK0EmwyPXr2N39+6YZGtr8P6Liq4gNvY5ODg8jc6d\nv4ClpZXefWnLtYieGQ3LFpbo+XNPWLao/9zYJHHo0CG8//778PHxweeff46+fftWeb5GU4KkpP9B\nKj2Frl2/hZ3dk/Vobe2JjQV27gQOHCDs7dOQnf0xHntMjk8/XYUePXqY2jyduHED2LUL2L8f6NUL\neOklYPp0oEWLe+fcLLiJo3FH8Xvs74jPj8dYz7EY3nE4hnUchv7O/dGiaYuqL2AESpQluJ59Hf7p\n/jiTeAYhWSEY0WkEnvB6AhO6TkB32+6waOgJ7vVEF+1ssEIPANn7s5H0XhJ6H+uNtkPaGtymHJUK\nI0JD8b6bG15yMV4hDrU6H3Fxz0OtzkfPnj+jRQuPWvehzFAianoUWvdsje67u8OiqWk/9AqFAjt2\n7MCaNWswduxYfPLJJ/Dy8qpwjlR6GjduvAwbmyfg5bUBTZu2M5G1uqNWq7Fv3z589NE62NsvgYXF\ny8jOtsYLLwAvvgh4eprawsq5eRM4dUoszhIXBzz/PLBoEdC1a83PzSjJwPnk8wjMCETArQDE5ceh\nl30vDO04FMNch6GXQy90atsJNi1t6iy2AgVkl2UjPDscYdlhYssKQ3ZZNvo49sFgl8EY7zUeoz1G\no3Uz4w3wGhIPvNADQP6JfMS/GI8eB3vAZpyNwewp02ox5vp1TLCxwSedOxus36ogBdy6tQVpaWvR\nrdsO2NvP0Pm5xZJiRM+OhuvrrnB7382sRjalpaXYvHkzvvrqK8yePRsrV66EnV0zJCa+heJiX3Tv\nvhsdOjxqajNrJD8/H3v37sX27dvh4eGBzz77DMOHDwcgjvJ37QIOHAAcHYEnngDGjwcefrjiKLk+\n0WgAPz/g5EmxFRSIFZ6efBKYOBFo1kz/vmVqGUKzQhF4KxABGQG4Ib2B9OJ0KDQKdGzb8W7r1K4T\nWlu1hqWFJSwtLGEBi7u3AUAqlyK7LBvZZdnIKstCdlk28srz0L5Fe/Rx7IMBzgPQ36k/+jv1Rzfb\nbmhi2cRA786DxX9C6AGg6GoRomdGo+u2rnCY7VBnWzQkpkZGwrFZM3zfvX6nhCUlQYiJeRodOoyF\np+cXsLKyq/Jcksj6LgvJq5Lhvc8bthMMv7RkKPLz87F27Rr88MNOPPKIgPnzp2DKlF1o2tTa1KZV\nCUn4+/tj+/btOHHiBKZMmYJXXnnlrsD/G60WCA4G/voL+PNPICoKeOghUfgffRTo1q1uAlsdeXnA\n9etAWJhow99/A507A5Mni23gQMDSyCt55apy3Cq5hfSSdPFYnA65Rg6Bwt1GUDySsG1M3PmeAAAN\nsklEQVRpCydrJzi3cYaTtROcrJ3g0NoBzZoY6U16QPnPCD0AlIWXIWJiBNxXuMP1FVe9+yGJl27c\nQIZSieO9e8PK2N+OStBoipCcvAq5uT/D3X0FXFxeuW/tXlAKSHg9AcW+xej9R2+06tqq3u3UFZIo\nLDyHpKTlkEo18PUdjoMHz6F169ZYtGgR5s6dCxsbw83G6kppaSkOHjyI7du3QyaT4eWXX8bzzz8P\n21ru0RQUAOfPi6J/5QqQng54eAA9eojN21s8ursDrVoBLVsCTaoYtCoUQH7+vZaXJ84kwsLEVlYG\n9OsH9O8vtsceA1z1/xo00oD4Twk9AMiT5Ih4PAKO8x3hvtJdr5H4xykpOJ6fj8v9+8O6qm9dPVFe\nHo3ExLegVGaiS5ctsLEZBwBQZioRPSsazZyawXufN5q2aWpSO6ujpCQQSUnLoVJlonPnz2FnNwMW\nFhYQBAGXL1/G7t27cerUKUyYMAEvvvgiRo0aBSsr/Tek9eXmzZs4deoUTp06BT8/P4wbNw6vvPIK\nHnvsMVga6MdeoQASE0WBjo0V18pjY4FbtwC5HJDJxBF/q1b3mkolCrtaDdjZ3Wu2tuIM4Y6wd+7c\n8IttN6If/zmhBwBVtgoRT0Sg7Yi26LKlCyyb6f4l/S4zE+vS0uA3YACcjDXHriUkIZUeR2Li22jd\nujccClcj6VklXF52gdsHbrCwNM9vd3l5NJKTV6C0NBgeHh/ByWkBLCwq/0EqLCzEwYMHsW/fPsTH\nx2PYsGEYPXo0Ro0ahcGDB6OZEf4XCoUCvr6+d8W9uLgYEydOxKRJkzBu3Di0bWv4zf2aIAGlUhR8\nmQwoLwesrAB7e8DaulHIG6mc/6TQA4CmSIPYBbFQ3lKi50890ap7zcsa2zIysD4tDed9fNC1lfkt\ng6hLZYjcvxolbrtg02IGvEaIwm9OkAKKii4iM/M7FBVdgpvbe3BxeRVNmrTUuY/CwkJcvXoVly5d\nwuXLl3Hjxg0MHToUDz30EDp37gxXV1d07NgRrq6uaNOmTY39yWQyxMfHIyYmBtHR0YiJiUFMTAzS\n0tLg4+ODSZMmYdKkSejfv7/BRu6NNFKf/GeFHhBHwpk7MpGyKgWeazzh9KJTlUs5G9PT8U1GBs77\n+KBzS91Fqb4ovFiI+EXxaDeyHdzWWyNP8T0yM3ehZUsvuLq+Cju7GbC0NN0MRKXKRlbWHmRl7UaT\nJtZwcXkJjo7zDOIuWVRUBIlEAn9/f6SlpeHWrVvIyMhARkYGmjRpgo4dO8LW1hYqlQoKheK+plKp\n0KVLF/Ts2RM9e/ZEr1690LNnT3Tp0sUoM4VGGqlv/tNCf4fy6HLEPBuDVl1bodvObrCyqbj++3lq\nKvZmZ+OCjw86mcoXrgo0pRok/S8J0pNSdNveDbaT720GCoIaUulxZGR8C5ksGk5OC+HisgQtWrjX\ni22kBgUF55CVtQtFRRdhbz8Lzs4voU2bwfXipUQSRUVFyMjIgFQqRfPmzdGiRYv7mrW1NZo2Nd89\njEYaqSuNQn8bQSEg6f0k5B3JQ48DPdB+VHuQxKqUFPyel4fzPj5wbt7cKNfWl4K/ChC/OB4242zg\n9aUXmravWqxksjhkZu5AdvYBtGzphfbtH0G7do+gXbuHYGVlGG8WQVCjrCwERUWXUVR0CcXFfmjV\nqjucnRfBweEZNG1a8zJKI400Yngahf5fSM9IEf9iPByedsCeZwScRDHO+fjAwYym8GXXy5DySQrK\nQsvQbWc32Dyuu1ALggIlJUEoLr6CoqIrKCkJQIsWHreF/yE0b+4OKysbWFnZomnTDrCwqOhVRBIa\nTRHU6hyoVDlQqbIhl99EcfEVFBf7oUWLzmjffjTatx+F9u0fqdbHv5FGGqkfGoW+EpTZShx8OwKO\np8vh8UpHdHvX/b7lHFNQGlKKlE9SUHqtFG7/c4PzYmc0aVU3905xFB52V6hVqiyo1VKo1VJotcVo\n0qQNrKxs0aRJm9v358LCojmaNXNEs2ZOaNbMEc2bu6F9+4fRrt3DsLIy34CsRhr5r9Io9P+iVKPB\novh4pCmVONa2GwrXZSDvSB5cX3NFp2Wdql0eMRYl10qQ+kkqSkNL4faeG5xfckaTlsb33ye10GiK\nb4t+CaysbGFl5VgrD5lGGmnE9DQK/T+Ik8kwIyoKI9q1w7auXdHitiud/KYcqZ+lQnpSio5vdoTL\nUhdYdTDuCF9bpkXBnwXI+iEL5ZHlcHvfDc4vOpsk22QjjTTSsGkU+tv8lpeHV27cwBpPTyxydq70\nHNkNGVI/S0X+H/mw7m8N28m2sJ1si1berQziRaLKU0F6Qor8o/koulyEtsPbwmG2AxznOsKyeaPA\nN9JII/rxnxd6DYn3k5Lwe14efuvVCwN1CLDRyrQoulgE6SkppCelsGhqIYr+JFu07t0aVvZWNUbb\nako0UKQqoExVQhYnQ/6JfJRdL4PN4zawm24H24m2JlkmaqSRRh48/tNCn6NSYU5MDFpYWuJgjx6w\n1SN/CkmUR5VDelKKgtMFkN+UQ52nRpPWTWDlYAUreys0c2iGpjZNoc5XQ5mqhCJVAUEloIV7C7Rw\nb4GWXi1h84QNOozt0Lg000gjjRic/6TQk8TR/Hy8mZiIF5ycsNrDA00MGMBDEpoiDdS5aqjz1FDl\nqqCWqmFla3VX3JvaNjWrnPCNNNLIg8t/TuiDS0vxdmIiCjUabO3SBY926GAg6xpppJFGzBNdtPOB\nWCi+pVTiw6QknC0sxCceHljo7GzQUXwjjTTSSEOmQQt9uVaL9Wlp2JaRgZddXHBjyBC0acxr0kgj\njTRSAb13B0tLSzF16lS4ublh2rRpKCsrq/JcrVaL/v3748knn9T3cvf6InGlqAhvJiSgS2AgEuVy\nhA4ahM89PR8Ykb906ZKpTTAbGt+LezS+F/dofC9qh95Cv337dri5uSEhIQEdO3bEjh07qjx369at\n6Nmzp94blCpBwF8FBVgSHw8XPz+8kZgIOysrXPDxwcGePeFuZlkn60rjh/geje/FPRrfi3s0vhe1\nQ+8hcFBQEFasWIHmzZtj4cKFWLNmTaXn3bp1C6dPn8aHH36ITZs2Vdvn4dxcFGk0FVquWo0LhYXo\n3qoVZtjZwW/AAHiZYc74RhpppBFzRW+hv3btGry9vQEA3t7eCAoKqvS8ZcuWYcOGDSgpKamxz1/z\n8tC+adO7zbV5czzUtCm2dOmCjmaWRriRRhpppMHAahg7dix79+59Xzt27Bg7depEuVxOkiwvL6eb\nm9t9zz9x4gRfffVVkuTFixc5efLkKq8FoLE1tsbW2BqbHq0mqh3Rnzt3rsrH9u3bh9jYWPTv3x+x\nsbEYPHjwfef4+fnh+PHjOH36NBQKBUpKSjB//nzs37//vnPNxJ2/kUYaaeSBQ+/N2KFDh+KHH36A\nXC7HDz/8gGHDht13zhdffIH09HQkJyfj559/xqOPPlqpyDfSSCONNGI89Bb6V155BWlpaejevTsy\nMjLw8ssvAwAyMzMxadKkSp/TmBagkUYaaaT+MXkKhCtXrmDJkiXQaDR444038Prrr5vSHJOxcOFC\nnDp1Cg4ODoiMjDS1OSYlPT0d8+fPR25uLuzt7bF48WI8++yzpjbLJCgUCowaNQpKpRItWrTAnDlz\nsGzZMlObZVK0Wi0GDRqEjh074sSJE6Y2x2R4eHigbdu2aNKkCaysrKp0iAHMQOj79++PrVu3wt3d\nHePHj4dEIoGd3X+vFunVq1dhbW2N+fPn/+eFPjs7G9nZ2ejXrx/y8/MxZMgQhIeHo40OaaYfRGQy\nGVq1agWlUomBAwfijz/+QJcuXUxtlsnYtGkTQkJCUFpaiuPHj5vaHJPRuXNnhISEwMam5rrSJs2b\nW1xcDAB45JFH4O7ujscffxyBgYGmNMlkPPzww+jQmIQNAODk5IR+/foBAOzs7NCrVy8EBweb2CrT\n0apVKwBAWVkZNBoNmv+HXY3vxOUsWrSo0YEDujuxmFTo/+mLDwA9e/ZEQECACS1qxNxITExEdHQ0\nhgwZYmpTTIYgCPDx8YGjoyNee+01dOrUydQmmYw7cTmWlo21HSwsLPDoo49i2rRpNc5sGt+tRsyW\n0tJSzJkzB5s3b0br1q1NbY7JsLS0RHh4OBITE/Htt98iLCzM1CaZhJMnT8LBwQH9+/dvHM0D8PX1\nRXh4ONasWYO3334b2dnZVZ5rUqEfPHgw4uLi7v4dHR1dqZtmI/891Go1Zs6ciXnz5mHq1KmmNscs\n8PDwwMSJE/+zy5t34nI6d+6MZ555BhcuXMD8+fNNbZbJcL5d/7pHjx6YMmVKtRvTJhX6du3aAf/f\nzh2jOAhEYRz/38HGxhtIIFWuYGtpJZIinQT0BDa2HiKX0FQpvIddCCoIQhqRpFjYrTbdMsv4/eop\nXjF8M/DeDF+TN13Xcb1eORwOJkuSf+D1enE8HvF9n/P5bLoco4ZhYJomAMZxpGmazR58epfz4/l8\nMs8zAH3fU9c1QRD8ut74v75VVXE6nViWhTRNNzlxAxBFEbfbjXEc8TyPoihIksR0WUa0bcvlcmG3\n27Hf7wEoy/LjRrbV/X4njmPWdcV1XfI8/77Jbd2W3+U8Hg/CMATAcRyyLPvYuzE+XikiIn9LzVgR\nEcsp6EVELKegFxGxnIJeRMRyCnoREcsp6EVELPcGkQPsdA5FLVsAAAAASUVORK5CYII=\n",
190 "text": [
191 "<matplotlib.figure.Figure at 0x1082fcbd0>"
192 ]
193 }
237 194 ],
238 "language": "python",
239 "metadata": {},
240 "outputs": []
241 },
242 {
243 "cell_type": "code",
244 "collapsed": false,
245 "input": [
246 "p = ProgressBar(1000)\n",
247 "for i in range(1001):\n",
248 " time.sleep(0.002)\n",
249 " p.animate(i)"
250 ],
251 "language": "python",
252 "metadata": {},
253 "outputs": []
195 "prompt_number": 5
254 196 }
255 197 ],
256 198 "metadata": {}
257 199 }
258 200 ]
259 201 } No newline at end of file
@@ -1,404 +1,399 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Custom Display Logic"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 "Using the IPython display protocol for your own objects"
15 "Defining Custom Display Logic for Your Own Objects"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "IPython extends the idea of the ``__repr__`` method in Python to support multiple representations for a given\n",
23 23 "object, which clients can use to display the object according to their capabilities. An object can return multiple\n",
24 24 "representations of itself by implementing special methods, and you can also define at runtime custom display \n",
25 "functions for existing objects whose methods you can't or won't modify. In this notebook, we show how both approaches work.\n",
26 "\n",
27 "<br/>\n",
28 "**Note:** this notebook has had all output cells stripped out so we can include it in the IPython documentation with \n",
29 "a minimal file size. You'll need to manually execute the cells to see the output (you can run all of them with the \n",
30 "\"Run All\" button, or execute each individually)."
25 "functions for existing objects whose methods you can't or won't modify. In this notebook, we show how both approaches work."
31 26 ]
32 27 },
33 28 {
34 29 "cell_type": "markdown",
35 30 "metadata": {},
36 31 "source": [
37 32 "Parts of this notebook need the inline matplotlib backend:"
38 33 ]
39 34 },
40 35 {
41 36 "cell_type": "code",
42 37 "collapsed": false,
43 38 "input": [
44 39 "%pylab inline"
45 40 ],
46 41 "language": "python",
47 42 "metadata": {},
48 43 "outputs": []
49 44 },
50 45 {
51 46 "cell_type": "heading",
52 47 "level": 2,
53 48 "metadata": {},
54 49 "source": [
55 50 "Custom-built classes with dedicated ``_repr_*_`` methods"
56 51 ]
57 52 },
58 53 {
59 54 "cell_type": "markdown",
60 55 "metadata": {},
61 56 "source": [
62 57 "In our first example, we illustrate how objects can expose directly to IPython special representations of\n",
63 58 "themselves, by providing methods such as ``_repr_svg_``, ``_repr_png_``, ``_repr_latex_``, etc. For a full\n",
64 59 "list of the special ``_repr_*_`` methods supported, see the code in ``IPython.core.displaypub``.\n",
65 60 "\n",
66 61 "As an illustration, we build a class that holds data generated by sampling a Gaussian distribution with given mean \n",
67 62 "and variance. The class can display itself in a variety of ways: as a LaTeX expression or as an image in PNG or SVG \n",
68 63 "format. Each frontend can then decide which representation it can handle.\n",
69 64 "Further, we illustrate how to expose directly to the user the ability to directly access the various alternate \n",
70 65 "representations (since by default displaying the object itself will only show one, and which is shown will depend on the \n",
71 66 "required representations that even cache necessary data in cases where it may be expensive to compute.\n",
72 67 "\n",
73 68 "The next cell defines the Gaussian class:"
74 69 ]
75 70 },
76 71 {
77 72 "cell_type": "code",
78 73 "collapsed": false,
79 74 "input": [
80 75 "from IPython.core.pylabtools import print_figure\n",
81 76 "from IPython.display import Image, SVG, Math\n",
82 77 "\n",
83 78 "class Gaussian(object):\n",
84 79 " \"\"\"A simple object holding data sampled from a Gaussian distribution.\n",
85 80 " \"\"\"\n",
86 81 " def __init__(self, mean=0, std=1, size=1000):\n",
87 82 " self.data = np.random.normal(mean, std, size)\n",
88 83 " self.mean = mean\n",
89 84 " self.std = std\n",
90 85 " self.size = size\n",
91 86 " # For caching plots that may be expensive to compute\n",
92 87 " self._png_data = None\n",
93 88 " self._svg_data = None\n",
94 89 " \n",
95 90 " def _figure_data(self, format):\n",
96 91 " fig, ax = plt.subplots()\n",
97 92 " ax.plot(self.data, 'o')\n",
98 93 " ax.set_title(self._repr_latex_())\n",
99 94 " data = print_figure(fig, format)\n",
100 95 " # We MUST close the figure, otherwise IPython's display machinery\n",
101 96 " # will pick it up and send it as output, resulting in a double display\n",
102 97 " plt.close(fig)\n",
103 98 " return data\n",
104 99 " \n",
105 100 " # Here we define the special repr methods that provide the IPython display protocol\n",
106 101 " # Note that for the two figures, we cache the figure data once computed.\n",
107 102 " \n",
108 103 " def _repr_png_(self):\n",
109 104 " if self._png_data is None:\n",
110 105 " self._png_data = self._figure_data('png')\n",
111 106 " return self._png_data\n",
112 107 "\n",
113 108 "\n",
114 109 " def _repr_svg_(self):\n",
115 110 " if self._svg_data is None:\n",
116 111 " self._svg_data = self._figure_data('svg')\n",
117 112 " return self._svg_data\n",
118 113 " \n",
119 114 " def _repr_latex_(self):\n",
120 115 " return r'$\\mathcal{N}(\\mu=%.2g, \\sigma=%.2g),\\ N=%d$' % (self.mean,\n",
121 116 " self.std, self.size)\n",
122 117 " \n",
123 118 " # We expose as properties some of the above reprs, so that the user can see them\n",
124 119 " # directly (since otherwise the client dictates which one it shows by default)\n",
125 120 " @property\n",
126 121 " def png(self):\n",
127 122 " return Image(self._repr_png_(), embed=True)\n",
128 123 " \n",
129 124 " @property\n",
130 125 " def svg(self):\n",
131 126 " return SVG(self._repr_svg_())\n",
132 127 " \n",
133 128 " @property\n",
134 129 " def latex(self):\n",
135 130 " return Math(self._repr_svg_())\n",
136 131 " \n",
137 132 " # An example of using a property to display rich information, in this case\n",
138 133 " # the histogram of the distribution. We've hardcoded the format to be png\n",
139 134 " # in this case, but in production code it would be trivial to make it an option\n",
140 135 " @property\n",
141 136 " def hist(self):\n",
142 137 " fig, ax = plt.subplots()\n",
143 138 " ax.hist(self.data, bins=100)\n",
144 139 " ax.set_title(self._repr_latex_())\n",
145 140 " data = print_figure(fig, 'png')\n",
146 141 " plt.close(fig)\n",
147 142 " return Image(data, embed=True)"
148 143 ],
149 144 "language": "python",
150 145 "metadata": {},
151 146 "outputs": []
152 147 },
153 148 {
154 149 "cell_type": "markdown",
155 150 "metadata": {},
156 151 "source": [
157 152 "Now, we create an instance of the Gaussian distribution, whose default representation will be its LaTeX form:"
158 153 ]
159 154 },
160 155 {
161 156 "cell_type": "code",
162 157 "collapsed": false,
163 158 "input": [
164 159 "x = Gaussian()\n",
165 160 "x"
166 161 ],
167 162 "language": "python",
168 163 "metadata": {},
169 164 "outputs": []
170 165 },
171 166 {
172 167 "cell_type": "markdown",
173 168 "metadata": {},
174 169 "source": [
175 170 "We can view the data in png or svg formats:"
176 171 ]
177 172 },
178 173 {
179 174 "cell_type": "code",
180 175 "collapsed": false,
181 176 "input": [
182 177 "x.png"
183 178 ],
184 179 "language": "python",
185 180 "metadata": {},
186 181 "outputs": []
187 182 },
188 183 {
189 184 "cell_type": "code",
190 185 "collapsed": false,
191 186 "input": [
192 187 "x.svg"
193 188 ],
194 189 "language": "python",
195 190 "metadata": {},
196 191 "outputs": []
197 192 },
198 193 {
199 194 "cell_type": "markdown",
200 195 "metadata": {},
201 196 "source": [
202 197 "Since IPython only displays by default as an ``Out[]`` cell the result of the last computation, we can use the\n",
203 198 "``display()`` function to show more than one representation in a single cell:"
204 199 ]
205 200 },
206 201 {
207 202 "cell_type": "code",
208 203 "collapsed": false,
209 204 "input": [
210 205 "display(x.png)\n",
211 206 "display(x.svg)"
212 207 ],
213 208 "language": "python",
214 209 "metadata": {},
215 210 "outputs": []
216 211 },
217 212 {
218 213 "cell_type": "markdown",
219 214 "metadata": {},
220 215 "source": [
221 216 "Now let's create a new Gaussian with different parameters"
222 217 ]
223 218 },
224 219 {
225 220 "cell_type": "code",
226 221 "collapsed": false,
227 222 "input": [
228 223 "x2 = Gaussian(0.5, 0.2, 2000)\n",
229 224 "x2"
230 225 ],
231 226 "language": "python",
232 227 "metadata": {},
233 228 "outputs": []
234 229 },
235 230 {
236 231 "cell_type": "markdown",
237 232 "metadata": {},
238 233 "source": [
239 234 "We can easily compare them by displaying their histograms"
240 235 ]
241 236 },
242 237 {
243 238 "cell_type": "code",
244 239 "collapsed": false,
245 240 "input": [
246 241 "display(x.hist)\n",
247 242 "display(x2.hist)"
248 243 ],
249 244 "language": "python",
250 245 "metadata": {},
251 246 "outputs": []
252 247 },
253 248 {
254 249 "cell_type": "markdown",
255 250 "metadata": {},
256 251 "source": [
257 252 "## Adding IPython display support to existing objects\n",
258 253 "\n",
259 254 "When you are directly writing your own classes, you can adapt them for display in IPython by \n",
260 255 "following the above example. But in practice, we often need to work with existing code we\n",
261 256 "can't modify. \n",
262 257 "\n",
263 258 "We now illustrate how to add these kinds of extended display capabilities to existing objects.\n",
264 259 "We will use the numpy polynomials and change their default representation to be a formatted\n",
265 260 "LaTeX expression.\n",
266 261 "\n",
267 262 "First, consider how a numpy polynomial object renders by default:"
268 263 ]
269 264 },
270 265 {
271 266 "cell_type": "code",
272 267 "collapsed": false,
273 268 "input": [
274 269 "p = np.polynomial.Polynomial([1,2,3], [-10, 10])\n",
275 270 "p"
276 271 ],
277 272 "language": "python",
278 273 "metadata": {},
279 274 "outputs": []
280 275 },
281 276 {
282 277 "cell_type": "markdown",
283 278 "metadata": {},
284 279 "source": [
285 280 "Next, we define a function that pretty-prints a polynomial as a LaTeX string:"
286 281 ]
287 282 },
288 283 {
289 284 "cell_type": "code",
290 285 "collapsed": false,
291 286 "input": [
292 287 "def poly2latex(p):\n",
293 288 " terms = ['%.2g' % p.coef[0]]\n",
294 289 " if len(p) > 1:\n",
295 290 " term = 'x'\n",
296 291 " c = p.coef[1]\n",
297 292 " if c!=1:\n",
298 293 " term = ('%.2g ' % c) + term\n",
299 294 " terms.append(term)\n",
300 295 " if len(p) > 2:\n",
301 296 " for i in range(2, len(p)):\n",
302 297 " term = 'x^%d' % i\n",
303 298 " c = p.coef[i]\n",
304 299 " if c!=1:\n",
305 300 " term = ('%.2g ' % c) + term\n",
306 301 " terms.append(term)\n",
307 302 " px = '$P(x)=%s$' % '+'.join(terms)\n",
308 303 " dom = r', domain: $[%.2g,\\ %.2g]$' % tuple(p.domain)\n",
309 304 " return px+dom"
310 305 ],
311 306 "language": "python",
312 307 "metadata": {},
313 308 "outputs": []
314 309 },
315 310 {
316 311 "cell_type": "markdown",
317 312 "metadata": {},
318 313 "source": [
319 314 "This produces, on our polynomial ``p``, the following:"
320 315 ]
321 316 },
322 317 {
323 318 "cell_type": "code",
324 319 "collapsed": false,
325 320 "input": [
326 321 "poly2latex(p)"
327 322 ],
328 323 "language": "python",
329 324 "metadata": {},
330 325 "outputs": []
331 326 },
332 327 {
333 328 "cell_type": "code",
334 329 "collapsed": false,
335 330 "input": [
336 331 "from IPython.display import Latex\n",
337 332 "Latex(poly2latex(p))"
338 333 ],
339 334 "language": "python",
340 335 "metadata": {},
341 336 "outputs": []
342 337 },
343 338 {
344 339 "cell_type": "markdown",
345 340 "metadata": {},
346 341 "source": [
347 342 "But we can configure IPython to do this automatically for us as follows. We hook into the\n",
348 343 "IPython display system and instruct it to use ``poly2latex`` for the latex mimetype, when\n",
349 344 "encountering objects of the ``Polynomial`` type defined in the\n",
350 345 "``numpy.polynomial.polynomial`` module:"
351 346 ]
352 347 },
353 348 {
354 349 "cell_type": "code",
355 350 "collapsed": false,
356 351 "input": [
357 352 "ip = get_ipython()\n",
358 353 "latex_formatter = ip.display_formatter.formatters['text/latex']\n",
359 354 "latex_formatter.for_type_by_name('numpy.polynomial.polynomial',\n",
360 355 " 'Polynomial', poly2latex)"
361 356 ],
362 357 "language": "python",
363 358 "metadata": {},
364 359 "outputs": []
365 360 },
366 361 {
367 362 "cell_type": "markdown",
368 363 "metadata": {},
369 364 "source": [
370 365 "For more examples on how to use the above system, and how to bundle similar print functions\n",
371 366 "into a convenient IPython extension, see the ``IPython/extensions/sympyprinting.py`` file. \n",
372 367 "The machinery that defines the display system is in the ``display.py`` and ``displaypub.py`` \n",
373 368 "files in ``IPython/core``.\n",
374 369 "\n",
375 370 "Once our special printer has been loaded, all polynomials will be represented by their \n",
376 371 "mathematical form instead:"
377 372 ]
378 373 },
379 374 {
380 375 "cell_type": "code",
381 376 "collapsed": false,
382 377 "input": [
383 378 "p"
384 379 ],
385 380 "language": "python",
386 381 "metadata": {},
387 382 "outputs": []
388 383 },
389 384 {
390 385 "cell_type": "code",
391 386 "collapsed": false,
392 387 "input": [
393 388 "p2 = np.polynomial.Polynomial([-20, 71, -15, 1])\n",
394 389 "p2"
395 390 ],
396 391 "language": "python",
397 392 "metadata": {},
398 393 "outputs": []
399 394 }
400 395 ],
401 396 "metadata": {}
402 397 }
403 398 ]
404 399 } No newline at end of file
@@ -1,270 +1,278 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Cython Magics"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 "Cython Magic Functions Extension"
15 "Cython Magic Functions"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "heading",
20 20 "level": 2,
21 21 "metadata": {},
22 22 "source": [
23 23 "Loading the extension"
24 24 ]
25 25 },
26 26 {
27 27 "cell_type": "markdown",
28 28 "metadata": {},
29 29 "source": [
30 30 "IPtyhon has a `cythonmagic` extension that contains a number of magic functions for working with Cython code. This extension can be loaded using the `%load_ext` magic as follows:"
31 31 ]
32 32 },
33 33 {
34 34 "cell_type": "code",
35 35 "collapsed": false,
36 36 "input": [
37 37 "%load_ext cythonmagic"
38 38 ],
39 39 "language": "python",
40 40 "metadata": {},
41 41 "outputs": [],
42 42 "prompt_number": 1
43 43 },
44 44 {
45 45 "cell_type": "heading",
46 46 "level": 2,
47 47 "metadata": {},
48 48 "source": [
49 49 "The %cython_inline magic"
50 50 ]
51 51 },
52 52 {
53 53 "cell_type": "markdown",
54 54 "metadata": {},
55 55 "source": [
56 56 "The `%%cython_inline` magic uses `Cython.inline` to compile a Cython expression. This allows you to enter and run a function body with Cython code. Use a bare `return` statement to return values. "
57 57 ]
58 58 },
59 59 {
60 60 "cell_type": "code",
61 61 "collapsed": false,
62 62 "input": [
63 63 "a = 10\n",
64 64 "b = 20"
65 65 ],
66 66 "language": "python",
67 67 "metadata": {},
68 68 "outputs": [],
69 69 "prompt_number": 2
70 70 },
71 71 {
72 72 "cell_type": "code",
73 73 "collapsed": false,
74 74 "input": [
75 75 "%%cython_inline\n",
76 76 "return a+b"
77 77 ],
78 78 "language": "python",
79 79 "metadata": {},
80 80 "outputs": [
81 81 {
82 82 "output_type": "pyout",
83 83 "prompt_number": 3,
84 84 "text": [
85 85 "30"
86 86 ]
87 87 }
88 88 ],
89 89 "prompt_number": 3
90 90 },
91 91 {
92 92 "cell_type": "heading",
93 93 "level": 2,
94 94 "metadata": {},
95 95 "source": [
96 96 "The %cython_pyximport magic"
97 97 ]
98 98 },
99 99 {
100 100 "cell_type": "markdown",
101 101 "metadata": {},
102 102 "source": [
103 103 "The `%%cython_pyximport` magic allows you to enter arbitrary Cython code into a cell. That Cython code is written as a `.pyx` file in the current working directory and then imported using `pyximport`. You have the specify the name of the module that the Code will appear in. All symbols from the module are imported automatically by the magic function."
104 104 ]
105 105 },
106 106 {
107 107 "cell_type": "code",
108 108 "collapsed": false,
109 109 "input": [
110 110 "%%cython_pyximport foo\n",
111 111 "def f(x):\n",
112 112 " return 4.0*x"
113 113 ],
114 114 "language": "python",
115 115 "metadata": {},
116 116 "outputs": [],
117 117 "prompt_number": 4
118 118 },
119 119 {
120 120 "cell_type": "code",
121 121 "collapsed": false,
122 122 "input": [
123 123 "f(10)"
124 124 ],
125 125 "language": "python",
126 126 "metadata": {},
127 127 "outputs": [
128 128 {
129 129 "output_type": "pyout",
130 130 "prompt_number": 5,
131 131 "text": [
132 132 "40.0"
133 133 ]
134 134 }
135 135 ],
136 136 "prompt_number": 5
137 137 },
138 138 {
139 139 "cell_type": "heading",
140 140 "level": 2,
141 141 "metadata": {},
142 142 "source": [
143 143 "The %cython magic"
144 144 ]
145 145 },
146 146 {
147 147 "cell_type": "markdown",
148 148 "metadata": {},
149 149 "source": [
150 150 "Probably the most important magic is the `%cython` magic. This is similar to the `%%cython_pyximport` magic, but doesn't require you to specify a module name. Instead, the `%%cython` magic uses manages everything using temporary files in the `~/.cython/magic` directory. All of the symbols in the Cython module are imported automatically by the magic.\n",
151 151 "\n",
152 152 "Here is a simple example of a Black-Scholes options pricing algorithm written in Cython. Please note that this example might not compile on non-POSIX systems (e.g., Windows) because of a missing `erf` symbol."
153 153 ]
154 154 },
155 155 {
156 156 "cell_type": "code",
157 157 "collapsed": false,
158 158 "input": [
159 159 "%%cython\n",
160 160 "cimport cython\n",
161 161 "from libc.math cimport exp, sqrt, pow, log, erf\n",
162 162 "\n",
163 163 "@cython.cdivision(True)\n",
164 164 "cdef double std_norm_cdf(double x) nogil:\n",
165 165 " return 0.5*(1+erf(x/sqrt(2.0)))\n",
166 166 "\n",
167 167 "@cython.cdivision(True)\n",
168 168 "def black_scholes(double s, double k, double t, double v,\n",
169 169 " double rf, double div, double cp):\n",
170 170 " \"\"\"Price an option using the Black-Scholes model.\n",
171 171 " \n",
172 172 " s : initial stock price\n",
173 173 " k : strike price\n",
174 174 " t : expiration time\n",
175 175 " v : volatility\n",
176 176 " rf : risk-free rate\n",
177 177 " div : dividend\n",
178 178 " cp : +1/-1 for call/put\n",
179 179 " \"\"\"\n",
180 180 " cdef double d1, d2, optprice\n",
181 181 " with nogil:\n",
182 182 " d1 = (log(s/k)+(rf-div+0.5*pow(v,2))*t)/(v*sqrt(t))\n",
183 183 " d2 = d1 - v*sqrt(t)\n",
184 184 " optprice = cp*s*exp(-div*t)*std_norm_cdf(cp*d1) - \\\n",
185 185 " cp*k*exp(-rf*t)*std_norm_cdf(cp*d2)\n",
186 186 " return optprice"
187 187 ],
188 188 "language": "python",
189 189 "metadata": {},
190 190 "outputs": [],
191 191 "prompt_number": 6
192 192 },
193 193 {
194 194 "cell_type": "code",
195 195 "collapsed": false,
196 196 "input": [
197 197 "black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
198 198 ],
199 199 "language": "python",
200 200 "metadata": {},
201 201 "outputs": [
202 202 {
203 203 "output_type": "pyout",
204 204 "prompt_number": 7,
205 205 "text": [
206 206 "10.327861752731728"
207 207 ]
208 208 }
209 209 ],
210 210 "prompt_number": 7
211 211 },
212 212 {
213 213 "cell_type": "code",
214 214 "collapsed": false,
215 215 "input": [
216 216 "%timeit black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
217 217 ],
218 218 "language": "python",
219 219 "metadata": {},
220 220 "outputs": [
221 221 {
222 222 "output_type": "stream",
223 223 "stream": "stdout",
224 224 "text": [
225 225 "1000000 loops, best of 3: 821 ns per loop\n"
226 226 ]
227 227 }
228 228 ],
229 229 "prompt_number": 8
230 230 },
231 231 {
232 "cell_type": "heading",
233 "level": 2,
234 "metadata": {},
235 "source": [
236 "External libraries"
237 ]
238 },
239 {
232 240 "cell_type": "markdown",
233 241 "metadata": {},
234 242 "source": [
235 243 "Cython allows you to specify additional libraries to be linked with your extension, you can do so with the `-l` flag (also spelled `--lib`). Note that this flag can be passed more than once to specify multiple libraries, such as `-lm -llib2 --lib lib3`. Here's a simple example of how to access the system math library:"
236 244 ]
237 245 },
238 246 {
239 247 "cell_type": "code",
240 248 "collapsed": false,
241 249 "input": [
242 250 "%%cython -lm\n",
243 251 "from libc.math cimport sin\n",
244 252 "print 'sin(1)=', sin(1)"
245 253 ],
246 254 "language": "python",
247 255 "metadata": {},
248 256 "outputs": [
249 257 {
250 258 "output_type": "stream",
251 259 "stream": "stdout",
252 260 "text": [
253 261 "sin(1)= 0.841470984808\n"
254 262 ]
255 263 }
256 264 ],
257 265 "prompt_number": 9
258 266 },
259 267 {
260 268 "cell_type": "markdown",
261 269 "metadata": {},
262 270 "source": [
263 271 "You can similarly use the `-I/--include` flag to add include directories to the search path, and `-c/--compile-args` to add extra flags that are passed to Cython via the `extra_compile_args` of the distutils `Extension` class. Please see [the Cython docs on C library usage](http://docs.cython.org/src/tutorial/clibraries.html) for more details on the use of these flags."
264 272 ]
265 273 }
266 274 ],
267 275 "metadata": {}
268 276 }
269 277 ]
270 278 } No newline at end of file
@@ -1,252 +1,252 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Data Publication API"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "IPython's Data Publication API"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 "IPython has an API that allows IPython Engines to publish data back to the Client. This example shows how this API works."
22 "IPython has an API that allows IPython Engines to publish data back to the Client. This Notebook shows how this API works."
23 23 ]
24 24 },
25 25 {
26 26 "cell_type": "heading",
27 27 "level": 2,
28 28 "metadata": {},
29 29 "source": [
30 30 "Setup"
31 31 ]
32 32 },
33 33 {
34 34 "cell_type": "markdown",
35 35 "metadata": {},
36 36 "source": [
37 37 "We begin by enabling pylab mode and creating a `Client` object to work with an IPython cluster."
38 38 ]
39 39 },
40 40 {
41 41 "cell_type": "code",
42 42 "collapsed": false,
43 43 "input": [
44 44 "%pylab inline"
45 45 ],
46 46 "language": "python",
47 47 "metadata": {},
48 48 "outputs": [
49 49 {
50 50 "output_type": "stream",
51 51 "stream": "stdout",
52 52 "text": [
53 53 "\n",
54 54 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
55 55 "For more information, type 'help(pylab)'.\n"
56 56 ]
57 57 }
58 58 ],
59 59 "prompt_number": 48
60 60 },
61 61 {
62 62 "cell_type": "code",
63 63 "collapsed": false,
64 64 "input": [
65 65 "from IPython.parallel import Client"
66 66 ],
67 67 "language": "python",
68 68 "metadata": {},
69 69 "outputs": [],
70 70 "prompt_number": 12
71 71 },
72 72 {
73 73 "cell_type": "code",
74 74 "collapsed": false,
75 75 "input": [
76 76 "c = Client()\n",
77 77 "dv = c[:]\n",
78 78 "dv.block = False"
79 79 ],
80 80 "language": "python",
81 81 "metadata": {},
82 82 "outputs": [],
83 83 "prompt_number": 13
84 84 },
85 85 {
86 86 "cell_type": "heading",
87 87 "level": 2,
88 88 "metadata": {},
89 89 "source": [
90 90 "Simple publication"
91 91 ]
92 92 },
93 93 {
94 94 "cell_type": "markdown",
95 95 "metadata": {},
96 96 "source": [
97 97 "Here is a simple Python function we are going to run on the Engines. This function uses `publish_data` to publish a simple Python dictionary when it is run."
98 98 ]
99 99 },
100 100 {
101 101 "cell_type": "code",
102 102 "collapsed": false,
103 103 "input": [
104 104 "def publish_it():\n",
105 105 " from IPython.zmq.datapub import publish_data\n",
106 106 " publish_data(dict(a='hi'))"
107 107 ],
108 108 "language": "python",
109 109 "metadata": {},
110 110 "outputs": [],
111 111 "prompt_number": 14
112 112 },
113 113 {
114 114 "cell_type": "markdown",
115 115 "metadata": {},
116 116 "source": [
117 117 "We run the function on the Engines using `apply_async` and save the returned `AsyncResult` object:"
118 118 ]
119 119 },
120 120 {
121 121 "cell_type": "code",
122 122 "collapsed": false,
123 123 "input": [
124 124 "ar = dv.apply_async(publish_it)"
125 125 ],
126 126 "language": "python",
127 127 "metadata": {},
128 128 "outputs": [],
129 129 "prompt_number": 15
130 130 },
131 131 {
132 132 "cell_type": "markdown",
133 133 "metadata": {},
134 134 "source": [
135 135 "The published data from each engine is then available under the `.data` attribute of the `AsyncResult` object."
136 136 ]
137 137 },
138 138 {
139 139 "cell_type": "code",
140 140 "collapsed": false,
141 141 "input": [
142 142 "ar.data"
143 143 ],
144 144 "language": "python",
145 145 "metadata": {},
146 146 "outputs": [
147 147 {
148 148 "output_type": "pyout",
149 149 "prompt_number": 16,
150 150 "text": [
151 151 "[{'a': 'hi'}, {'a': 'hi'}, {'a': 'hi'}, {'a': 'hi'}]"
152 152 ]
153 153 }
154 154 ],
155 155 "prompt_number": 16
156 156 },
157 157 {
158 158 "cell_type": "markdown",
159 159 "metadata": {},
160 160 "source": [
161 161 "Each time `publish_data` is called, the `.data` attribute is updated with the most recently published data."
162 162 ]
163 163 },
164 164 {
165 165 "cell_type": "heading",
166 166 "level": 2,
167 167 "metadata": {},
168 168 "source": [
169 169 "Simulation loop"
170 170 ]
171 171 },
172 172 {
173 173 "cell_type": "markdown",
174 174 "metadata": {},
175 175 "source": [
176 176 "In many cases, the Engines will be running a simulation loop and we will want to publish data at each time step of the simulation. To show how this works, we create a mock simulation function that iterates over a loop and publishes a NumPy array and loop variable at each time step. By inserting a call to `time.sleep(1)`, we ensure that new data will be published every second."
177 177 ]
178 178 },
179 179 {
180 180 "cell_type": "code",
181 181 "collapsed": false,
182 182 "input": [
183 183 "def simulation_loop():\n",
184 184 " from IPython.zmq.datapub import publish_data\n",
185 185 " import time\n",
186 186 " import numpy as np\n",
187 187 " for i in range(10):\n",
188 188 " publish_data(dict(a=np.random.rand(20), i=i))\n",
189 189 " time.sleep(1)"
190 190 ],
191 191 "language": "python",
192 192 "metadata": {},
193 193 "outputs": [],
194 194 "prompt_number": 57
195 195 },
196 196 {
197 197 "cell_type": "markdown",
198 198 "metadata": {},
199 199 "source": [
200 200 "Again, we run the `simulation_loop` function in parallel using `apply_async` and save the returned `AsyncResult` object."
201 201 ]
202 202 },
203 203 {
204 204 "cell_type": "code",
205 205 "collapsed": false,
206 206 "input": [
207 207 "ar = dv.apply_async(simulation_loop)"
208 208 ],
209 209 "language": "python",
210 210 "metadata": {},
211 211 "outputs": [],
212 212 "prompt_number": 58
213 213 },
214 214 {
215 215 "cell_type": "markdown",
216 216 "metadata": {},
217 217 "source": [
218 218 "New data will be published by the Engines every second. Anytime we access `ar.data`, we will get the most recently published data."
219 219 ]
220 220 },
221 221 {
222 222 "cell_type": "code",
223 223 "collapsed": false,
224 224 "input": [
225 225 "data = ar.data\n",
226 226 "for i, d in enumerate(data):\n",
227 227 " plot(d['a'], label='engine: '+str(i))\n",
228 228 "title('Data published at time step: ' + str(data[0]['i']))\n",
229 229 "legend()"
230 230 ],
231 231 "language": "python",
232 232 "metadata": {},
233 233 "outputs": [
234 234 {
235 235 "output_type": "pyout",
236 236 "prompt_number": 61,
237 237 "text": [
238 238 "<matplotlib.legend.Legend at 0x10a8ed8d0>"
239 239 ]
240 240 },
241 241 {
242 242 "output_type": "display_data",
243 243 "png": "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\n"
244 244 }
245 245 ],
246 246 "prompt_number": 61
247 247 }
248 248 ],
249 249 "metadata": {}
250 250 }
251 251 ]
252 252 } No newline at end of file
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now