Skip to content

Instantly share code, notes, and snippets.

@timvieira
Last active May 12, 2022 05:25
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timvieira/788c2c25c94663c49abada60f2e107e9 to your computer and use it in GitHub Desktop.
Save timvieira/788c2c25c94663c49abada60f2e107e9 to your computer and use it in GitHub Desktop.
Counterfactual reasoning demo. Accompanies blog post "Counterfactual reasoning and learning from logged data" http://timvieira.github.io/blog/post/2016/12/19/counterfactual-reasoning-and-learning-from-logged-data/
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Counterfactual reasoning demo"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/timv/anaconda/lib/python2.7/site-packages/IPython/html.py:14: ShimWarning: The `IPython.html` package has been deprecated. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n",
" \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n"
]
}
],
"source": [
"import numpy as np\n",
"import pylab as pl\n",
"from numpy import sqrt, log\n",
"from scipy.stats import norm, uniform, laplace\n",
"from IPython.html.widgets import *\n",
"\n",
"\n",
"def bernstein(samples, delta, a, b):\n",
" \"\"\"Plug-n-chug empirical Bernstein bound, computes \"error bars\" which hold with\n",
" probability `1-delta` for the mean of independent samples from a given range\n",
" `b-a` (known a priori).\n",
"\n",
" Returns epsilon such that the following bound hold,\n",
"\n",
" p( mean(samples) - true_mean >= eps ) >= 1-delta\n",
"\n",
" We assume that sample are independent (not necessarily identically\n",
" distributed).\n",
"\n",
" Bound is based on sample variance `V` and a priori knowledge that RVs in are\n",
" in the range `[a,b]` (although we only really require a known range `b-a`)\n",
"\n",
" The bound holds with probability `>=(1-delta)`.\n",
"\n",
" The sample mean has symmetric deviations so we get a two-sided bound by\n",
" passing in 2*delta, i.e.,\n",
"\n",
" p( |mean(samples) - true_mean| >= eps ) >= 1-2*delta\n",
"\n",
" This is analogous to p-values, which make assumption of normally distributed\n",
" random variables. This means that the bounds can be 'tighter', but the\n",
" assumptions are usually not valid.\n",
"\n",
" \"\"\"\n",
" n = len(samples)\n",
" V = samples.var(ddof=1) # sample variance\n",
" #assert np.ptp(samples) <= b-a + 1e-8, [np.ptp(samples), b-a]\n",
" return sqrt(V*2*log(2.0/delta)/n) + (b-a)*(7.0/3.0)*log(2.0/delta)/(n-1)\n",
"\n",
"\n",
"class bernstein_confidence:\n",
"\n",
" def __init__(self, L, p, Delta, R, M):\n",
" \"\"\"\n",
" L: Logged data\n",
" fs: Evaluations random variable (try to estimate E_{x ~ p}[ f(x) ])\n",
" xs: samples from q.\n",
" qs: proposal density\n",
"\n",
" p: target density\n",
"\n",
" R: upper bound on importance weights (used for clipping/capping)\n",
" M: upper bound on objective.\n",
" Delta: probability of failure in bound (the \"confidence\" of bound)\n",
" \"\"\"\n",
"\n",
" fs, samples, qs = L.fs, L.xs, L.qs\n",
"\n",
" w = p.pdf(samples) / qs\n",
"\n",
" # Using clipped weights eliminates the contribution of samples from poorly\n",
" # explored regions -- a large weight indicates a mismatch between p and q.\n",
" if 0:\n",
" clip = w.copy()\n",
" #clip[w > R] = 0.0 # zero-out large values\n",
" clip[w > R] = R # max-out large values\n",
"\n",
" else:\n",
" # Smooth approximation to clip. This is result in a smoother\n",
" # optimization problem, currently the objective function has a bunch of\n",
" # kinks in it.\n",
" #\n",
" # check we satisfy the relevant assumptions (e.g., bounded by R).\n",
" T = -5\n",
" clip = np.logaddexp(R*T, w*T)/T\n",
" #assert (clip <= R).all(), clip\n",
"\n",
" # Using these weights we obtain the following (biased) estimator\n",
" yhat = (clip * fs).mean()\n",
"\n",
" # divide by three because final bound holds w.p.(1-3*delta), we have\n",
" # 3*delta because we're using a two-sided bound and a one-sided bound.\n",
" delta = Delta / 3.0\n",
"\n",
" # Solve for fudge terms of the two parts.\n",
" eps_R = bernstein(clip * fs, 2*delta, 0, M*R) # two-sided bound\n",
" eta_R = bernstein(clip, delta, 0, R) # one-sided bound\n",
"\n",
" inner_lb = yhat\n",
" inner_ub = yhat + M*(1 - clip.mean() + eta_R)\n",
" outer_lb = inner_lb - eps_R\n",
" outer_ub = inner_ub + eps_R\n",
" yhat = yhat\n",
"\n",
" # use prior knowledge of ranges to keep estimate sane.\n",
" self.inner_lb = np.clip(inner_lb, 0, M)\n",
" self.inner_ub = np.clip(inner_ub, 0, M)\n",
" self.outer_lb = np.clip(outer_lb, 0, M)\n",
" self.outer_ub = np.clip(outer_ub, 0, M)\n",
" self.yhat = np.clip(yhat, 0, M)\n",
"\n",
"\n",
"class LoggedDataset(object):\n",
"\n",
" def __init__(self, fs, xs, qs):\n",
" self.fs = fs\n",
" self.xs = xs\n",
" self.qs = qs\n",
"\n",
" def direct(self, p):\n",
" \"Ordinary importance sampling estimator for counterfactual expectation\"\n",
" w = p.pdf(self.xs) / self.qs\n",
" return (self.fs*w).mean()\n",
"\n",
" def indirect(self, p, R=0):\n",
" \"\"\"\n",
" Indirect importance sampling estimator for counterfactual expectation.\n",
"\n",
" R: importance weight penalty from Levine & Koltun (2013).\n",
" \"\"\"\n",
" w = p.pdf(self.xs) / self.qs\n",
" return (self.fs * w).sum() / w.sum() - R*np.log(w.sum())\n",
"\n",
" def bernstein(self, p, **kwargs):\n",
" return bernstein_confidence(self, p, **kwargs)\n",
"\n",
"\n",
"class InteractivePlot(object):\n",
"\n",
" def __init__(self, hs, f, p):\n",
" self.hs = hs\n",
" self.f = f\n",
" self.p = p\n",
"\n",
" # precompute true expectation because it doesn't change.\n",
" def expect(h, dx=0.1):\n",
" \"Integration by quadrature\"\n",
" x = pl.arange(h-50, h+50, dx)\n",
" return (p(h).pdf(x) * f(x) * dx).sum()\n",
"\n",
" self.expect = np.array([expect(h) for h in hs])\n",
"\n",
" def update(self, N, R, q_mu, q_sigma):\n",
" # which things to plot.\n",
" indirect = 0\n",
" bottou = 1\n",
"\n",
" hs = self.hs\n",
" p = self.p\n",
" M = 1\n",
"\n",
" # Take a new sample.\n",
" q = norm(q_mu, scale=q_sigma)\n",
" samples = q.rvs(size=N)\n",
"\n",
" L = LoggedDataset(self.f(samples),\n",
" samples,\n",
" q.pdf(samples))\n",
"\n",
" # TODO: need to tune on held out data.\n",
" #R = L.tune_R(hs, p, M, plot=1)\n",
"\n",
" A = np.array([L.direct(p(h)) for h in hs])\n",
"\n",
" if indirect:\n",
" B = np.array([L.indirect(p(h), R=0) for h in hs])\n",
"\n",
" if bottou:\n",
" ci = np.array([L.bernstein(p(h), Delta=0.1, R=R, M=M) for h in hs])\n",
" ci_lb, yhat, ci_ub = np.array([(x.outer_lb, x.yhat, x.outer_ub) for x in ci]).T\n",
" ci_inner_lb, ci_inner_ub = np.array([(x.inner_lb, x.inner_ub) for x in ci]).T\n",
"\n",
" pl.plot(hs, self.expect, c='k', alpha=1.0, lw=2, label='true')\n",
" pl.plot(hs, A, c='r', alpha=0.75, lw=2, label='direct')\n",
"\n",
" if indirect:\n",
" pl.plot(hs, B, c='orange', alpha=0.75, lw=2, label='indirect')\n",
"\n",
" if bottou:\n",
" pl.plot(hs, ci_ub, c='b', alpha=0.5, label='upper')\n",
" pl.plot(hs, yhat, c='b', alpha=0.5, lw=2, label='$clipped')\n",
" pl.plot(hs, ci_lb, c='b', alpha=0.5, label='lower')\n",
" pl.fill_between(hs, ci_inner_lb, ci_inner_ub, alpha=0.25, color='b')\n",
" pl.plot(hs, ci_inner_lb, color='b')\n",
"\n",
" pl.title('Estimates')\n",
" pl.ylim(-0.25, 1.5)\n",
"# pl.legend(loc='best')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Demo for a one-dimension problem\n",
"\n",
"The problem setup is as follows\n",
"\n",
"* $q$: normal distribution (you can play with the mean and standard deviation).\n",
"* $p$: normal distribution with standard deviation = 1 and mean determined by $\\theta$.\n",
"* $r$: is a non-differentiable function (see definition in code or look at picture).\n",
"\n",
"The following plot illustrates these components along with $J(\\theta)$. \n",
"\n",
"Note that we're taking a \"shortcut\" to make a nice plot: we assume that $\\mathcal{X}$ and $\\theta$ live in the same space. This is clearly not always allowed, e.g., when $\\mathcal{X}$ is discrete or when $\\theta$ isn't the mean of a simple policy family."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nv9OzZ0/3ZlIipYWCBBEp9YYOHerekbFp06b873//K3BNZk7g5yTExcSRnZtNrs0lOjqa6dOnU61a\nNQA+/vhjnnzyyYDWL+JvChJEpFT79NNPmTBhAgCxsbHMmDGD2NiCwwpBGW44usQyb/+GU045hRkz\nZmCMAWDYsGEFtpcWKckUJIhIqbVv3z569erlfv/oo4/StGlTj9cGa7ghr648l112Gffccw/g7CPR\ns2dP97CISEmnIEFESiVrLf369XMnLLrsssu46667Cr0+GEsg88rPdOXfCXL06NGcffbZAHz77bda\nFimlhoIEESmVUlNT3Rs3nXTSSUyZMsW97NCTUPUkAMTFxTFt2jRiYpw99R555BFWrFgR0LaI+IOC\nBBEpdX777TfuvPNO9/vJkye7ExgVJiMnI6BpmQH3nAdP20W3aNGC4cOHA+ByuejZsydHjhwJaHtE\niktBgoiUKtZa+vbt6067fMstt3DjjTee8J5Q9iTkGTJkCK1atQJg/fr1+TagEimJfAoSjDF3GmN+\nMcYcMcZ8ZYz5VxHvu9AYk22MWeVLvSIir776Kh999BHgrB547rnnTnhPdm42QPDmJORkejxfpkwZ\npk2b5l598dRTTykbo5RoXgcJxpibgfHACKA5sBqYb4xJPMF9CcBU4FMf2ikiwtatW0lJSXG/f+ml\nlzj55JNPeF/ek32oexLA2U9i7Nix7ve33XYbBw4cCGi7RHzlS09CCjDZWjvNWrse6AccBnqf4L5J\nwAzgKx/qFJEIl5ubS+/evfnrr78ASE5O5qqrrirSvXlf2sHKk3C8IAHg7rvvpl27dkDBwEekJPEq\nSDDGlAFaAp/lHbPOhu2fAhcc575k4AxglG/NFJFI98ILL/D5558DcNppp7kTKBVFSepJAGdb6SlT\nplChQgXAGUKZM2dOQNsm4gtvexISgWhg1zHHdwGneLrBGFMfeATobq1V4nIR8dq6deu499573e9f\nffVVEhISinx/3hyBUOVJ8KROnTo89dRT7vd9+/YlPT09YG0T8UVAVzcYY6JwhhhGWGs35R0OZJ0i\nEl6ysrLo0aMHGRnO0/mdd97JZZdd5lUZ7uGGEC6B9KR3797ujah27dpF//79cTpng8Dlgrffhpkz\nYeFC+PFHSE8HbUIl/xDj5fXpgAuofszx6sBOD9dXBFoB5xpjnj96LAowxpgsoIO1dlFhlaWkpBR4\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa3f925e910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def p(h): return norm(h, scale=1.0)\n",
"\n",
"def r(x):\n",
" y = ((2 < x) & (x < 3)) + .25\n",
" y[y > 1] = 1\n",
" return y\n",
"\n",
"hs = pl.linspace(-20, 20, 200)\n",
"pl.plot(hs, r(hs), label='r', c='g')\n",
"pl.plot(hs, norm(0, 2).pdf(hs), label='$q=\\mathcal{N}(0,5)$', c='b')\n",
"pl.plot(hs, p(5).pdf(hs), label=r'$p_{5}=\\mathcal{N}(5,1)$', c='r')\n",
"pl.plot(hs, InteractivePlot(hs, r, p).expect, label=r'$J(\\theta)$', c='k', lw=2)\n",
"pl.legend(loc='best')\n",
"pl.xlabel(r'$\\theta$ (or $x$)')\n",
"pl.ylim(0, 1.5)\n",
"pl.xlim(-10, 10);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Interactive demo\n",
"\n",
"Here you can play around with some of the components of the picture above."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n7rvv7u0mhIV+zoFFP+fAMlg+Jwyuz9oT+uQCT8aYucDOnTt3DqYEE6WUUqrbdu3axbx58wDmWWt3\ndedY2pOglFJKKUcaJCillFLKkQYJSimllHKkQYJSSimlHGmQoJRSSilHGiQopZRSypEGCUoppZRy\npEGCUkoppRxpkKCUUkopRxokKKWUUsqRBglKKaWUcqRBglJKKaUcaZCglFJKKUcaJCillFLKkQYJ\nSimllHKkQYJSSimlHGmQoJRSSilHGiQopZRSypEGCUoppZRypEGCUkoppRxpkKCUUkopRxokKKWU\nUsqRBglKKaWUcqRBglJKKaUcaZCglFJKKUcaJCillFLKkQYJSimllHKkQYJSSimlHGmQoJRSSilH\nGiQopZRSypEGCUoppZRypEGCUkoppRxpkKCUUkopRxokKKWUUsqRBglKKaWUcqRBglJKKaUcaZCg\nlFJKKUcaJCillFLKkQYJSimllHKkQYJSSimlHGmQoJRSSilHGiQopZRSypEGCUoppZRypEGCUkop\npRxpkKCUUkopRxokKKWUUsqRBglKKaWUcqRBglJKKaUcaZCglFJKKUcaJCillFLKkQYJSimllHKk\nQYJSSimlHGmQoJRSSilHGiQopZRSypEGCUoppZRypEGCUkoppRxpkKCUUkopRxokKKWUUsqRBglK\nKaWUcqRBglJKKaUcaZCglFJKKUcaJCillFLKkQYJSimllHKkQYJSSimlHGmQoJRSSilHGiQopZRS\nypEGCUoppZRypEGCUkoppRxpkKCUUkopRxokKKWUUsqRBglKKaWUcqRBglJKKaUcaZCglFJKKUca\nJCillFLKkQYJSimllHKkQYJSSimlHHU6SDDGLDfGvG6MyTHGBI0xN3fgNZcbY3YaY6qMMYeNMfd2\nrblKKaWUCpeu9CTEALuBRwHb3s7GmLHAX4C1wCzgp8BvjDFXd+G9lVJKKRUmns6+wFr7DvAOgDHG\ndOAljwDHrLXfrvv3IWPMZcBjwHudfX+llFJKhUc4chIWA+83e+5dYEkY3lsppZRSXdTpnoQuSAfO\nNnvuLBBvjImw1la39sI33oCMjJC2bUBxucDn69i+xkB0NMTGwpw5kJAQ2rYppVRHHTgA+/aBbXdA\nuylroaYGgsHQtKu/yM7uuWOFI0josl//+jF8vqZXr0mT7mby5Lt7qUV9m9sNQ4ZAcrJc9NsaDAoG\n4cIFKCyEI0fgC19oe3+llAq1igp46y0JEEaOhKiojr2ushJyc6GkBPz+wRUkHD78EkeOvNTkOb+/\nuMeOH44gIQ8Y2uy5oUBJW70IAN/+9hNMnDg3ZA0baPx+KCoCj0d6B6ZPb//Cf/IkPPss7NoF8+aF\np51KKdVcXh68+KL0BNx+O1xyScduXMrK4KOP5P+nToXISLlhGixWr74baHrjvHPnLv7pn3rmhB6O\nIOFjYHWz566pe75NUVEQExOSNg1IMTGQlATFxbBjhww/TJ3a9h/a6NEweza8/z5MmyZDEEopFU6H\nD8Of/gQpKXD33RAf37HXlZfDxx/DqVMwbtzgCg7a4unBK3tX6iTEGGNmGWNm1z01vu7fo+q2/8gY\n81yjlzxVt8+/G2OmGGMeBW4H/rPbrVeOEhIgLg62b4djx9rf/+qrZSzv/ebppUopFWJ79sBLL8H4\n8XD//R0PEGpq5Gbo5EkYM0YDhFDpyuyG+cAnwE6kTsJPgF3AD+q2pwOj6ne21mYDNwBXIfUVHgMe\ntNbqJSmEkpOlJ2b7djhzpu19Y2Jg1Sr45BPIzw9P+5RSatcuePVVGR69886OJ15bC3v3Sj7VqFE9\ne+esmup0kGCt/cBa67LWups9Hqjbfr+19opmr9lorZ1nrY2y1k6y1v5PT30A1brUVIm2t22TIYi2\nzJ8vPRDr1oWnbUqpwW33bnj9dTn33HSTDI921NGjMvMtPb3jgYXqGl27YYAbORIKCiRQqKpqfT+3\nGy6/HA4ehJycsDVPKTUInTghU9znzYPrr+/czKr8fOmBiImRKdwqtDRIGOCMkeTEEyckcg8EWt/3\n0kul90F7E5RSoXLhAvzv/8p5qbMBQmWlBAgVFXKuUqGnQcIg4PHAiBFSoOTQodb3c7ngiiukK+/E\nifC1Tyk1OAQCEiBERsIdd3Qu2TAYlDyE06clD0GFhwYJg0RUlEyP/OQT+SNrzdSpkJYGmzaFr21K\nqcHhgw/g3DlJUuzsdOvjx2U4dNgwnckQThokDCJJSfJ1506pTObEGLjsMskazssLX9uUUgNbTo7c\nfKxcKQmHnVFUJMOl0dFayyXcNEgYZIYPh/PnZVyvpsZ5nxkzIDFRexOUUj2jthb+/GcJDi67rPOv\n3b1bZmhpHkL4aZAwyBgj43lHj0rXnROXC5Ytg/37ZW0HpZTqjk2bJGHx1ls7P1SQmSnnq5EjdX2Z\n3qBBwiDk80n50wMHWi+eNHu2dOvV10RXSqmuKCiADz+EpUsl36kzTpyQPKohQ7QeQm/RIGGQSkyU\nugl79zoPO3i9sHChlEytqAh/+5RS/Z+18OabUmp5xYrOvbagQMoue726lH1v0iBhEBs+XNYdz8py\n3j5/vvyR79wZ1mYppQaIjAxZP+aGG+Ri31GlpVIArrQUhjZfQ1iFlQYJg5jPJxH6vn3OZZtjYmDW\nLNi6VZKHlFKqo0pK4K23JBF64sSOv66yUs45ubmSP6V5CL1Lg4RBLiVF/pgzM6XXoLnFi2W99v37\nw982pVT/ZK2sy+D1Si9CR1VVSQ9Cdrau7NhXaJAwyBkj3XlZWVLkpLnUVJg0SdZsdwoilFKquV27\n5Jxy881SyK0jysrkPHPkiJRs1pUd+wYNEhSxsZK8eOCA89oOS5ZIYaXs7LA3TSnVz5SUwJo1MHeu\n3GB0RFERbN4s+QtjxuhMhr5EgwQFSBLjiRPOK0COGye9DR9/HP52KaX6l7fflmGGa67p2P7FxTLV\nOicHxo7tXIKjCj0NEhQgkbvbLQtANe9NMEZ6Ew4flmqNSinlJDNTirStXi2LOLWnpEQChLw8CRA0\nB6Hv0SBBXTR0qCz+lJvbctuMGTIssWVL+NullOr7qqtlNsPkyTB9evv7V1bK+SQ3V4YYXHo16pP0\nx6Iu8vkkWSgzs2VvgsejxZWUUq378EO58F9/ffvTFgMBOZecPKk9CH2dBgmqiaFDZWzQqTehvrjS\njh3hb5dSqu8qKJCcpWXLpJprew4dkkTpESM0QOjrNEhQTfh80u2XldVyymN0tBRX2rZNiysppRq8\n+y7ExUmQ0J68PFnVMSmp49MjVe/RIEG1kJoquQlOiz9pcSWlVGNZWZLUfM017c9M8PtlvZjaWgkS\nVN+nQYJqISpK/oiPH2+5TYsrKaXqBQLwzjuSVzBtWvv7HzkCp07JlGvVP2iQoBylpEiQ4LSmQ31x\nJacgQik1eGzbJvkIq1e3n6xYUCDrxCQlaTXF/kSDBOUoLg7KyyX7uLn64krbtoW/XUqpvqGsDDZs\ngAUL2l+pMRiUAKG8HJKTw9I81UM0SFCOjJEVIo8ckUVXmm9bsEAylJ16GpRSA9/atZLkvGpV+/ue\nOiU9jzrM0P9okKBalZQEFy44T4e89FKZCbFzZ/jbpZTqXbm5MkPhiivan6FQXS2Jzl5vx6owqr5F\nR4ZUq9xu+aM+elQSkxpXRPP5ZDrkzp2wcqXOdVahdfSodG0bI7+TS5fK76QKP2tlfYa0NJg3r/39\ns7LgzBn9efVX2pOg2jRkiPyBOy0jvWCBjDEeOBD+dqnBY88e+P3vJUBISoLSUnjhBRkKU+GXkSHD\nB6tXt19KubBQzg9JSXoj0V9pkKDaFBEh05yclolOTZUkxu3bw94sNUjs2AF//jPMng333Qe33QYP\nPggTJsAf/iB5MSp8/H547z245JL2ewYCAQkoyso0WbE/0yBBtSslRZaRdkpSXLBAZkCcPRv+dqmB\nrbQU1qyRLu2bbmq4a/V44M47pV7Hq6/qWiLh9NFHsj7D1Ve3v++xYzJMNGJE6NulQkeDBNWuuDi5\nGzh9uuW2KVNku/YmqJ62bp0EBFdd1XIOvtstgUMwCB980DvtG2zKyiRIWLSo/fUZiotlmCguTvKX\nVP+lQYJqlzEQHy8JSNXVTbe53XKnt3dvy21KddWZM5I9f/nlrWfPx8TAihUSoDqVEFc9a8MG+Xtf\nvrzt/ayV2QzFxZLTpPo3DRJUhyQnS8U0p+mQc+dKGec9e8LfLjUwvfuuXGDmz297v0WLpJ7HmjXh\naddglZ8Pu3ZJUNbeNMacHLmhGDas/SqMqu/TIEF1iNst3YZZWdLF21h8PEydKnd0up6D6q7cXEmU\nvfLK9rPnPR4ZHz9yxHk4TPWMtWvl73zBgrb38/ulsqIxsmqs6v80SFAd1t50yPx8SXBUqjt27JDe\ngcmTO7b/tGnS07V1a2jbNVidOAGZmRK0tbfmwtGj0pMwbFh42qZCT4ME1WGRkTKtySkQGDtWgghN\nYFTdUVUl0+bmzWu/F6FefZnwAwckuU71HGtlyuPw4TBjRtv7lpbKzyAhQRdwGkg0SFCdkpwsQUJp\nadPn60/UBw+23KZUR+3dK4HonDmde92cORJU7NgRmnYNVgcPyjDO1Ve3n19w+LCUcU9JCU/bVHho\nkKA6JT5egoCcnJbbZs2S3IVdu8LfLtX/WSs9UVOnytS5zoiMlN+/HTskyFDdFwjA++9LPYpx49re\nt6BA8kJSUzVZcaDRIEF1ijEQGysJjDU1TbdFRsrCT3qiVl1x6pTktbQ3o6E1CxfKcMPBgz3brsFq\n507pGWivcJK18j2vrJShBjWwaJCgOi0lRU7meXktty1YID0NWi5Xdda+fdJT1d5da2vS0mD0aKmv\noLqnulrqIsyeLd/XtuTmSnXF9PSwNE2FmQYJqtM8HhlWOHas5ZTH9HQ5UWsCo+qM+rvR6dO71109\na5Zk2GteTPds3iw9hatWtb1fbW3DAm/tLRmt+icNElSXJCdLXsKFCy23LVgAx49rFTzVcadOyYV9\n+vTuHeeSSySAzcjomXYNRkVF8PHHsHix9Oy05eRJSWzUXoSBS4ME1SWxsTIG6VSBcdo0KZmrmeaq\no/bvl2TFUaO6d5zISFlPRKt/dk0wKKtuxsTAZZe1vW9VlfzcoqJ0fYaBTIME1WXx8dK16/c3fd7j\nkVLNu3e33KZUcz011FBv1ixZldQpZ0a1bfNm6R247TZZJr4tx45JYbXU1PC0TfUODRJUlyUlQWGh\n88l43jwJELTbV7Xn9GkoKen+UEO9CRPkTlh7EzonJwfWr5cehDFj2t63pERyERITZXhHDVwaJKgu\nq09gzM5uuS0xUcrq6noOqj0HDsjwVXeHGuq53TBzpgSozdcZUc6qquBPf5Jyypdf3v7+hw7JKo/J\nySFvmuplGiSobklOlryE1hIY8/J04R3VOmslSJg2reNlmDvi0kulZsLRoz13zIHKWnjtNckxuv32\n9nsGzp2TwklpaVo4aTDQCtuqW2JjZfw3J0eGHxqbMEGCiO3be+4uUQ0sOTlyR3rJJW3v5/dLklx+\nvhTqSkiQQCA21nn/YcNkrHzPHqkYqFq3davkhNx1V8u/4eaCQdm3ulrWc1ADn/YkqG6rT2Csrm76\nvDFSPW//figv7522qb7twAHJHxg9uvV9yspkSt6uXZIDU1oqF6r1651n14D87s2aJasXNv+9VA1y\ncmQBpyVLpBx2R/bPztZVHgcTDRJUtyUny8n7zJmW22bPlhP2J5+Ev12qb+vIUEN5OXz4oZQBHzVK\n5uOnpUlVxqIi2eb0ewfS0xAINBT7UU1VVsIf/ygX/Kuuan//mhr5XrrdMtVUDQ4aJKhuc7slifH4\n8ZZJitHRssTsjh2aRKaaOnNGLvStzWqwVnqhcnNlKfLGc/FdLgka/H4JQCsrW76+vsSzznJoyVp4\n9VXpZelIHgJID4IWThp8NEhQPWLIEDmZnz/fctuCBXIxOHIk/O1Sfdf+/RJEjh3rvD03V7Lohw5t\n/SI2fLjst2+f8yyaWbPk4lZU1FOtHhg+/li+t7fdJjOR2lNZ2VDwyqOZbIOKBgmqR0RFyV3JqVMt\nt40YISdzrcCo6rU31FBV1dAD0FpyIkjwkJ4uOQpOs2imTQOvF/bu7Zl2DwSnTskS0MuWyTTljsjO\nluWghwwJadNUH6RBguoxiYky5ODU9btggYwrO02VVINPXp78LrQ21HD8uPQQdCSDPjZWAo2DB2XB\nocZ8PnmPPXu0XgdARYXUQxgxAq64omOvqayUXof4+J6dpqr6B/2Rqx6TmCjduk6JZDNmSLKT9iYo\nkF6EqCjnoYbqajh8WKY5drSa39Chknnv1Jswa5bcBefkdKvJ/V4wCK+8IgmIHc1DACnTXFCghZMG\nKw0SVI9xuSQQOHq0ZZKi1yszHT75pOXdnhpc6hMSp051vlCdOiW5LZ25KHm90muQmSkXwcbGjpWx\n9MGewLhmjfTQ3HGHBGAdUVUl39O4OC2/PFhpkKB6VHKydCU7JTDOny/dnfv3h79dqu84e1amzDoV\nUKqpkV6E6OjOX5TS0qQXq3lvgssl0yH37Ru8AequXbBlC6xeLTM+Our4cflbTkkJXdtU36ZBgupR\nUVFyonfq9k1JkSqMOuQwuB04ID1OThernBwJMruysqDXKysXZma2DAZmzZKx9cE4wyYjA954Q/KC\nFizo+OvKyyXPIz5eexEGMw0SVI9rK4Fx/nzpTm6tAI4a2OpnNTgNNQSDktzq83V9ml1qqgQZzX+/\n0tIkWW/nzq4dt7/auxf+7/8kSFq9unOvPXpUeny0F2Fw0yBB9bi2EhinTJE7E+1NGJzy86X72mlW\nQ0GBXOC7c1HyeiX4OHas5WyG+hk2hYVdP35/UVgowcGf/yy5QLfc0rmZCSUlMqMhOVlnNAx2+uNX\nPa6tBEaXC+bNkzucqqreaZ/qPRkZ8rsxfnzLbadPSwXFqKjuvceQIXKs5nkxl1wixx7IAWpursxg\n+MUvpDdv9Wq4+ebOrdZorQwzlJS0v+CTGvg0SFAhkZLSegLj3LlSU3+wZ5sPNtZKkHDJJS2HE6qq\n5KLWkep/7YmOlmmU2dlNn/d6Yc4cmWHTfAZEf2at3PX/9rfw619LgHTttfC1r8HChZ1fzjk7W/I6\n0tN1KWilQYIKkchIuSt0qsAYFyeV8LZv1wI3g8mpUzIMdemlLbfVr+PQ0al57UlJkYtdaWnT5+fP\nbygx3N/V1krA86tfwUsvSa/dZz4DX/0qLFokQVFnFRfLMSMiZHVOpTRIUCGTlCQn6oqKltsWLZJe\nhsGYbT5Y7d0rQUDzZaGtlRwCn6/nsujj46W7vHkBpeRkmDhRpgP21wC1tha2boWf/hRee00+0wMP\nwIMPtr2iZntqamD3bqmEOXRoz7ZZ9V8aJKiQqU9gzMtruW3UKBg5UhaaUQNfICB37zNntuzCLizs\nfsJic8ZIueasrJZDC5ddJu/X3wJUayXQ+sUv4J13ZDrxl78Md9/dMvDqyrH3729YkluHGVQ9DRJU\nyLhc0m3ptIS0MbBkiWzT6ZAD35Ej0s3f2lBDVVX3ExabS0mR2RTNg9QxY+TxwQf9pzchKwueflpm\nLKSnw6OPwq23dq2ehJPsbAlA0tKaLsmtlAYJKqTqExgLClpumzZNhiQ++ij87VLhtWePXNzS0po+\nX1Mjs2Di43v+PT0eGb5oHqQaAytWyFDE0aM9/749qbgY/vAHeOEFuXg/+CDcdVfPBQcgf5s7d0pA\nHxfXc8dVA4MGCSqkoqLkLtFpcR2XCxYvlm5OXR1y4Kqfcz9vXstt587JcEOoptqlpEi2f/PaCOPH\ny3BXX+1NCAYl7+CXv5T233EH3H+/DAX0JL9fSjaXlmoegnKmQYIKuYQEuZvz+1tumzNHxo7feSf8\n7VLhsWOHZNo7DTXUl+/uaoXF9sTEyDBH81k2xsDll8vzBw+G5r27Ki8PnnlG/iZmzYKvfEWmjfZ0\nnkB99cuTJ3s++FADhwYJKuSSkqSnwCmB0eeTOd2HDslDDSyBgNypzpol3dmNlZfLBSrUSxAnJcns\nieZlwidOlAqg77wjdRV6W20trF0rtQ5qamTGwg03yHTiUDh9WupWpKaGLkhT/Z8GCSrk3G55ZGc7\nd+1Ony6Z2m+/PbCK3Ci5Uy0rc15YKC9PhiJCPQ6emChBqtOQ1+rVEjxs2BDaNrTn1Cl46inJz1m5\nEh56KLR39yUlEry5XKHJB1EDhwYJKiySk+UkXVTUcpsxcP31Mi76xhty96kGhu3bZbXH5ol21soQ\nVGRk6NcGcLmkCuORIy1/txIT5aK8datzT1eo+f3Sk/Hss9LT8tBD0p5QrrpYUyMFk86fh+HDQ/c+\namDQIEGFRWysFFVyupsDSTC79VZJYnz+eemKVv1bdrYMJyxa1HJbQQGcPRv6oYZ6KSmSJOkUCCxZ\nIkHMyy+Hdz2RY8fgySclZ+Oaa2TmQvPZHz2tPg9B6yGojtIgQYVNfLxMOXNKYAQptHPffXKH89RT\ncrfTfIEo1T9YK+Prw4fLuH9zubmhqY3QGp+vofei+ZCX2y3ljCsrZXGkUP/OlZfD669LMJyQIDUP\nliwJz2pDh/CtAAAgAElEQVSLx4/LdNTUVK2HoDpGgwQVNsnJcgfZVvGkUaPgS1+SYjevvSbBwo4d\numJkf3PkiIyzX3lly7tVv18uVh0dC/f7qzl4YBs7d6ylqsqhxncHpabCiRPONTuSk+H22+UO+/33\nQzMtMhCQnIOf/Uzu5m+4Ae69N3y9KWfPyt9SZKTmIaiO05xWFTZut2RRZ2dLGdnWujoTEuSEvWSJ\nJJS9+aaM244fL68bMUIy1uPjne++rJVM8erqhkdVlYzF1p/8fT45WcbFyVCIdrv2HGth3ToYO9Z5\nSeizZ6VuQXuJeQXn83j1b75F9QlDOfOoIpEdvoeY9uXrWH7TX2E6+UOLiZH3PnZMlpNubsIEuO46\nSaD1+yVPpifu7utXaVyzRnJy5s+X6ZfR0d0/dkdduADbtsnfgk53VJ2hQYIKq5QUyUsoLGy/Vv+I\nEfDZz0omdkaGnNw3bmwYrjBGLvb1q93V1kog0NnER69X2jJihBTYmThRK891x+7dMvb/wAPOwdeJ\nE3LxbWva3bmzp3n1gb9jV8VXOcI8gnWnqmT/NZQ88QpZr9/HvU8/g9vduVNYSor0YkyZ4rzi5KJF\n8jv1xhsyLHDLLV2fgmitDK9t3Ci5GRMmSLXEUOcdNHf+vKyRcv689NAp1RldChKMMV8G/gZIB/YA\nX7XWbm9l35XA+mZPW2CYtfZcV95f9V8xMXIBOX264wv6xMfDsmXyCAYlwCgqkpK1fr88jJGLTv3D\n623oLYiIkIfX23DR8vuld6GkRI537px0j+/aJSf3ESPkQjJlipzUtaehYy5ckF6f2bOdFx26cKH9\nn/3ZvJO8ev/fs6Pqm2Qxh9l8wPjIbGqDhk3+a3iLL7Pk6Ov83w++wx0/fLxT7UtIkItldrbUbnAy\nZ478nr7yCvz851LHw2lhqtZUVUlQu3On/K6PHCnB7sSJ4f09qqmRob1du+TvZcyY8OQ9qIGl00GC\nMeYzwE+ALwHbgMeAd40xk62151t5mQUmAxdXd9cAYfBKSJBegSlTOn+X5nJJV7FTd3FnxMTI12HD\nmj5fUSHj0pmZsGmTdJsnJcGMGXKhCPddYH8SDMKf/yzJiKtXO++TkyN36Onpztuttbzx1e+ys+ob\nZDGHFeY1vvl3Hm7653spzy3iqTue49dbVrCN6xny4RG2vPsKi6/9dKfamZQkORMTJshQk5PJk6XS\n4TvvyKJKGzdKUDF1quQQNJ6iGAhInsPJk3LcY8fkuUmTJMAYOzZ8wUFtbUPQe/y4tMvrlQBBA13V\nFV3pSXgMeNpa+zyAMeZh4AbgAaCtsD7fWlvShfdTA0xSktzJnTkjc+j7kuhoKR986aVyws3OliSz\n7dvhww+lvn19wJCY2Nut7Vs2bpTemPvua1ldEWQ8PCur7aS59S8+Te75aznCPJaZN/j2P0Ryww+v\nAyB2ZBLf3Px1iqf/mF8cGsFGPk/0499j/OyFpA3t+EB7UpIMAxw92npvAsiQ0x13wMKFcje+caPM\n2HC7JdA1RoKBkhIJkFwuGe+//HL5/QnXkFVNjfSOnD0rgUpRkTwXFyc9YvXDcUp1RaeCBGOMF5gH\n/Gv9c9Zaa4x5H1jS1kuB3caYSGAf8H1rra79N0i53XIROXYsvHdZneXxSBfxxImSxHb0qHQj118s\nRo2SgGHy5NAtUNRfbN0qSaarVrU+7p2bK3e5rW0vLb3Akd/tZDuPM4wsPn3FCW744Vea7GNchr99\n/4scnfISL1d8kd3BB4j7/r/w2Sef6nBbjZHhjkOHpC3tBXv1S0vfcIP0hJw/L8MmxjRULExLkwAy\nVCWUm7O2YabQ8ePSnkBAAoP0dJ3eqHpOZ3sShgBu4Gyz588CDrOhATgDPATsACKALwIbjDELrbW7\nO/n+aoBISZET3PnzPbvsbah4PA05Cn6/XGAyMiRj/e235TNMmiQBw6hRoa2Y19ds3y7fg2XLZAlm\nJ8GgBIU+X+vfm9d/8I9k1t5NBfHcGPV7Hn75Qcf9Ykcm8be/nkPWPevZwVVMy3yP40f2Mm6SwwpS\nrUhMlPYcPiw9BR3h80nPV2/2flVXS7B17Jj8/VRXS5AyfLj2GKjQCPnsBmvtYeBwo6e2GGMmIMMW\n94b6/VXfFBXVMF++PwQJjfl8Mtwwc6acpOsvNnv3yjx4r1dO2qNHS8AwalT4igaFU3W1jNl/8oks\n+X3VVa33Cp07J3fhrf2sc04eoWDnEDJYznS28LlvTyQqufVv2qzPLuGaH/4b+w4vYS83kPBv/8W4\nZ57tcNuNkbv/o0dlmmZ3c1xCrX4xrMOHpQfB55NAeyD+Xg1o1hKZl03MsQw8ZUUULLmR2vgwFcro\nos4GCeeBANB85fGhQGcqn28DlrW30y9/+RixsU3nKV1xxd1ceeXdnXgr1VelpMiY/9Sp/be4S0QE\nTJsmD2vl7u7ECTmhf/KJ5DGAXIRGjmx4pKX130xzayWxc82ahmmCs2e3HiBYKxe3YLD1i9oH//lz\nDnAPHvxcOWwTq7/37Xbbcd9Pb+D96zezzV7DzGOTyMzYytSZDjWgWxEXJxfc/fvhssv6Zu9PRYX8\njWRmylBNfLwMffTFtqq2RZ45zrhn/xHf+Yba9EM+ep3jD/4zFaOndvm4a9e+xLp1LzV5rrCwuMvH\na87YTpYWM8ZsAbZaa79e928DnAR+Zq39cQePsQYosdbe3sr2ucDOp5/eyeTJczvVPtV/WCt34YsW\nydj+QGOtjBWfOiXT/k6fluSyYFCCi3HjJMN+4sT+kdNQXi7DLFu2SM/AuHFw003tVww8exbee0/2\ncyogVFhwlj/c/jj/x78xg8089ZtIFj+4uENt+v6MH/Pj/Q8xlGwuG/UTHnj+uU59pupq6eFYsUJ+\nDn2F39+QNFtQIImSycn9N7Ac7HyFeUz66VfwlLQs92k9Xk5+9jsUzb68x97vo4928d3vzgOYZ63d\n1Z1jdWW44T+B3xljdtIwBTIa+B2AMeZHwHBr7b11//46cBzYD0QiOQmrgKu703DV/xkjJ78jR+QE\nHa6kr3AxRk7syckNWfT1c9ezs6Wr++23JWhITpZ8h0svlcSzvpLMWVQkd7EHD0rvCEhgc+ONznUQ\nmqsvKFRT03qFwXW/eILD3AjA4uTtLLr/bzrcvvt+dhNrrtrMx/Y6Zp2awInjmYwZ1/G7sogImQa5\nZ4/07vR2j1YwKEHLvn2SexAXJ8GYBgf9l6esiPFPfetigFCVPo7ChdeRkLGJmOMZmNoaRr/wL5SP\nmU5NUt+bY93pIMFa+7IxZgjwQ2SYYTdwrbU2v26XdKDxfCQfUldhOFAB7AWutNZu7E7D1cBQPx3y\n1ClJ/BvovF65uI4eLXev1dWSl5GVJTkNH38s4/b1OQ/h7mGwFvLzJSjIzJSAxu2WcfubbpJApr7G\nREecPy+fr7X6EuXlJeRvLCCThUxkN7d8dSbG1fEIaewVU1k16TV2Hr6cw1zJ5iefZMzjP+14A5Hv\n97Fjkoi6eHHvdeUXFkrPwdGj0oYxY9quSqn6h1Ev/TsR+acBqE4dRdaXnyAQm8D5FZ9i9O9/ROIn\n6zCBWoa+9z+cvvObvdzalrr0K2it/RXwq1a23d/s3z8GOjQMoQYft1vu5Pbvl8JGrRW3GagiIiQn\nY+pUKUBUf7H68MOG9Q9mz4bp00M3rc1aGQqp7zEoLJR2TZokMxYmTXKue9CeYFAuen5/64HFhuef\n5kTwFvxEsSB2K9d855FOv8+nvrWUV7/4CVnM4ZIdv6WsrLhFLlNbjJF6ApmZcufemeqKPaGyUnI2\nDh6U/09P14TEgSLu0A7iD2wBoDYumaOP/AeBut9N6/Zw+va/Jv7AFlzVFaRseYtzq+7CnzqiN5vc\ngsapqtelpsrd5oEDsGBB3+lqDze3Wy7IkybJhfXgQVkH4dVX4a23JG9j9myZLdHd71FNjXzPDx2S\nC1RpqVzIp0yRYGXcuO7fxZ48Ke8xfLjzdmstOW/uJpN7GUUm134mBbev87fxc+5bxqJvPcmBoiXk\n2BtY9+JT3Pylv+3UMSIjJbl0924Zchg7ttPN6LRAQJJc9++XvI0hQ1qvRKn6oWCQ4a89efGfubc8\n0mI4IRAdx7lVnyH9nd+CDZL+7u84ec93w93SNmmQoHqdyyWFaA4dkju6EX0rkO4VPp/kMcyaJcmP\ne/bIBWzXLrmITZsmwcTo0R3rYbBWegiysyUHpD5PIDlZgo+pUyX46Kmx78pK6RGpXzfDScaODVwo\nX04xaSxzv8enfnRrl97L5XFx491JrHkyi0MsYsSrLxJ4MIC7k+MGCQnS7u3b5XvaWnDTXdbKmg4H\nD0qQEBkpQZnOWBhYkre/S+SZYwBUjprChblXOu6Xv/J2Uje+gruihKRdazl71T1Up/edlbg0SFB9\nQmysXMT27JETdH+rnRBKSUlS6nflSrk7P3BALjBbtzYEWKmpMqW0fkGr+qWyi4sbSvaWl0sPRH3p\n4ClT5DU93XNTvzTyuXNt35HveeYlDvMosRSyZFYu0amdSHZo5rp/vIFLn3mXt/13Ula5kp0fvcXC\n5Td1+jjp6ZI4uGmTzLrp6VUTz5+XnpujR2U4ZsQIrY44ELn8VQx765mL/865+ZFW/9CCkdGcu/Ju\nhr3xNFhL8rZ3OHPzQ+Fqars0SFB9xogRksC4dq1k+U+c2LMn0PoLZ3W1/H8wKM+73dK1Hhkpj746\n3GFMQ4ng666TqXHHj0tyYX6+XHjqP5vLJd+7uDjpxp43T3odRo4M/SySkyclCTM1tfW74+Li85Qc\niuYElzCbD7jte9d36z2jhyVw9aIzbPywiCMsJfm5n3YpSAD5PczLg82bZUXHCRO6N/RirQQHR49K\nzklVlQQjrc32UP1f6rr/vTiboWTGMsontrFICFCwcDXD/vLfYIMk7tnAmZu+1GdORBokqD7D7ZY7\nz8JCyfKvX6lv2DDpCu7oidrvlyI05eXyKC6WLvuyMtlWWyvjwfVBgsslx/b55C48JUUucPHxchff\nlaS9UDOm9dUwAwH5TL1xjikshB075HvZ1nTCDc//mhNcSxAXc5P3Mv0m567Yzrj5b6/gfzbtJsMu\nZfbRaAoKzpCSMqz9FzpIT5fPsmmTTEWcObPzvS5+vwQbx49LYqjfL79XoRrGUH2Dp7iAofXFjVxu\ncm9+uN3XBGITKJ08j7hD2/EV5hF9MpOKMdNC3NKO0SBB9TnJyRIUFBZKl3pEhNwRDx0qXyMjGy6C\nwaBc9P1+WY2vpEQCg6oqec7ahgWl6o/j9cpz9ePvjY9RXS13fJmZsk98vFww0tPlghwX12cC/Fb1\n1th2WZkECCUlbQ8zWGvJezuDI3yB0WRy5WdGdWraY2vGr57BotRf8Mm5leSwmnW/f5o7vvb9Lh8v\nOVmGwepXLB01SnIHkpNl9kHz3wNr5XtQXNx0RUa3W353tOdgcBj29rOYmmoAzi+9merUkR16XdGc\nVcQd2g5A4q51GiQo1Ra3W+66UlPlwl1aKmO5tbUN+xgjJ+b6/6/vDYiMlLu+iIiOXdDd7oZAovHy\nvrW18r5ZWZIDEBMj7Rk1Sk76iYla5KZecbFUYjx9uv2VPT/ZsoaiypUUkcZSz3vc9IOuJSw2Z1yG\nG+5O5/WfZnGEuQx/57cEvxLE1Y0fUv2iTmVlMlSQlSWBQ1ycBJD1iyqVlUlwWlYmyY/WSqA7apTW\nOhhMInOPkbztbQCCkTHkXdvx5YmKZ17GyD/+JyZQS+KeDeTe+mifuCPRX1/V57WVIR9KHo8MNyQl\nyUm/vFy6j7OzJRBJSpJx/pQU+f+BVjGyo/LzYds2uXseO7b9now9z/4vh/kasRSydPbZbiUsNnf5\nN69ixpPrWeP/FP7KpezY+i4Ll6zu9nFjY+URCMhQVlGRfG5r5eH1yiMurn+vy6G6wVqGv/7kxTuX\ns1ffc7EmQkcEouMonbKA+AMf4y0+T8yxDMondHxl01DRIEGpDjCm4UIBcrdYXCzDIfUFoVJT5QKR\nkCAXi5iYgX2x8Puld2ffPuntGTu2/c9bWJhHRVYcJ7iEWWzktn+4rs399+yR4xcWypTNRYtkaefW\nlkWOHZXElbNOsXF7OVlcRsxzT/ZIkFDP7ZafbeMeJ6UA4jK3E3doBwA1SUPJX/6pTh+jaO4VxB/4\nGIDET9ZrkKBUfxUV1VAVLxCQYYnTpyWfwRjZFh3d0MsQE9Pw6MszKDrC75dZKIcPS1JfcnLHiwCt\n/91TnOA6griYn7KXaTdd4bhfba2sa7Fzp5SEri8wtXatBGa339762hE3/vUynv/sXrKYxSWHLIWF\neSQna5UiFUKBgPQi1Mm98UtYb+enZhVfshTr9mACtcQf3EpO+y8JOQ0SlOomt1vyExIT5d+BgCRO\nVlTIOHZNjTzv8UjwUJ/bkJQk49oJCX1zBkVjwaBMuczLk89UUCDBTmfWFwgEAuS/d5AjPMpoMrn6\n7jGOCYu1tfD881Kv4JZbYM6chm3LlsFrr8FLL8GDDzrP7ph6xxwWfvVZ9hcuIZ8bWfvH/+aOh/6x\ni59cqfalbHubyLxsACpGT6VozqouHScYGU35uBnEZu3GV3gGX8EZ/F2codNTNEhQqoe53Q29Bo35\n/RI8lJZKoaFgUC6wMTEyTFE/gyIxsW/0NNTUSDBw/rxk6hcWyrBCfLwEB52dRbFj81sUV10uCYve\n91n9Dzc77rdmjfRQ3HefJP41lpICd98NzzwDL74IX/hCy1kDLq+bGz8Vy19+c5LDzCPpLy8Q/GL3\nEhiVao2nuEAKIdXJvfXL3foDLp08n9is3QDEHd5JwZIbu93G7tC/GqXCpL52wNChMn4/frzUgHC7\nJRly40ZZo2HNGpmCeeFCw+yNcKmslKGE7dvhL3+Bd9+V7v3SUglgJkxou0hSWzJ+90cOs4RYCrls\nzjlihrZczevgQUmCvPbalgFCvago+OxnJWD505+cv0ervrGK6Z59nGEClM1h1861nW+wUu2xlpGv\n/BfuyjIAiuZeSfm4Gd06ZNmUeRf/vz7HoTdpT4JSvcjrbTpUUVkpd+ynT8vFsD6gGDo0dCtkVlRI\npn5urnTxl5bK8/HxUvintSTBzjh37hTVxxMvJize8p1rW+xTUgKvvy7rUsyf3/bxkpLgttvghRdk\ngaQZzc7LSdPSuWLqMTbv83OMK/A899/MX3B19z+IUo0k7vmAhIxNANTGJnL6tq92+5gVIycTiI7D\nXVFK7JFd0uXYi71gGiQo1Yc0ToisqJAiPtnZcsEeOVIeqandn25ZXi7DCPWBQUmJ9A4kJEhCYE8X\nZNrw3NMXExYXpOxzTFh87z1535tv7lhv7cSJElC8+67zctY3fXkOv39kP1nMYcJ+P+fOnSItrZXu\nCaU6KSL/NCP/+MTFf+d8+uudmvLYKpeLsolzSNi7EXdFKdGnD1Mxemr3j9vV5vTaOyul2hQdLUHB\nuHEyVHHoELz/Prz5pgwBZGfLfP368tJtqamRoCArq2FYY+1amaHg8UhvxZgx0qPR0wFCIFBL/vuZ\nHGG+JCx+dmyLhMWcHFk18oorGoKkjrj2Wsnz+OCDlttmfn4B8+IPUEECxdzM23/4VTc/iVLCU1zA\nhCf/BndFCQDFM5dTNGtljx2/dHLDkEPsoZ09dtyu0J4Epfo4l0vu8BMSZOZESYnkLOzbJxfU2Fi5\nuCclSTBRf5GvqZFx+4ICqelQXi7Jk16vHKsjdQ16wqa1r1Dmv4Ii0ljmXct132m68JK10hswdCjM\nnt25YycmwooVsH69DFEkJzds80T7uP3TXtb8NodMlhD15v/gf7gKn2+QVr1SPcJ74Rzjf/13eC+c\nBaBq2HhO3f3tHs02Lp3SMN4Wd3gn567+bI8du7M0SFCqH3G7m1aBrKqSUsCnTkmNhsZlqq2VrxER\nDfkNvbEs8b7fvsxhvkcshayYX9AiYfHgQZk98bnPdS1oWbxYelY2boRbm1V4XvWtlcz6/U7W+W9g\ngf9y1r33Itfd8EA3Po0atKwlZcubDH/tSVzVFQD4k4dx9KHHCUT1bMKQf8hw/MnD8BWeIeZ4BsZf\njfX1zjxpDRKU6qfqizZ1pns+3DL2biaYN5XjzGCBWc9t/9g0YdFa6QWYOFFmTnSF1wuXXSazQlas\naNqbkDQtnRvn57D5owoOcwX+57/Ptdffj+kLc0xVn+TyV+GuLMNVWY63tBBvUT4xJw6QkLHp4vLP\nADWJaRx7+HFqE1JC0o6yibNJ3nYGE6gl5uRByiZ2sputh2iQoJQKmc1PPsUhHsJDDSvHHGDS6qua\nbD94UGZW3OxcMqHD5s2TZZ0//FAKMDV242MLeW7Lbg4E5zL93Ch27VrHvHndX5pa9X+mxk9s1m7i\nD2wh+uRBIgrO4C4vbvd1hQtXk3vroz3eg9BY+YRLLy4WFXMsQ4MEpdTAkpOTRSAzhiPMYzK7+NS3\nFzfZbq1c1MeNa70mQkc17k1Yvrxpb8LET81i5Yhn2XtqMae4lZKn/4N5v9YgYTBzlxWT+sGfSN30\nZ1xV5R16jfV4KZ2ygPPLb2uSMxAqZeMb1m2IObY35O/XGg0SlFIh8c6vfsIJbqEGH0uTd7PooUea\nbM/Kkime93Z8Nd021fcmbN4MNzXKjTQuw12PjuMv3znIfruMa4+8QEbGJmbOvKxn3lj1H9aStv5/\nSX/nd5ia6qbbjKEmfgj+lGHUxiQQiIohEJOAPzENf3I6ZRNnE4yMdj5uCPhThlEbn4KnpICY7P2S\ntdzTU486QIMEpVSPy8k5SuVHxRxkMWM5wC1fGN9k2qO1kmg4cqTMsugJXq+sEvnBB7BqVdPiU/O/\nsowrnniZ35y7hDzu5C9PPc7MX2qQMJh4igsY8+KPiD3cMKXQuj0UzV5F8czLKJ0yP6xBQLuMoWz8\nTBJ3b8BVXUnUmWNUjpwU9mZonQSlVI979YkfkMPdlJHIktidXPXdpgvenDghMzJWrOjZdSrmz5cZ\nElu3Nn3eGxvB5x5OYwyZZLCCmAM+DhzY6nwQNeDEHdjK1B8/2BAgGEPBsls4+N3fc/Ke71A8a0Xf\nChDqlI+befH/Y472zpCDBglKqR6VlbUHu9PNHlYynn3c9aWhRMQ3nb61caMsaDWph2+MoqIkUNi+\nXWpENLb4Gyu4PGUXpaRwnrv4w39+BxvuxTFUWJnaGkb8+ReM/++/u5iQWBufwtFHfsLp2/+amqS0\nXm5h28onNOQlxPZSXoIGCUqpHvWX//h/HOduqojh8qQtXPvDpjMaTp+W5aaXLw/NapeLF0vRqF27\nmj7vS4ji3i8mMZIsdrOKtKNDef/9F3u+AapPiDh7kkn/9ShDNr5y8bmS6UvI/NYzlE2a08Yr+47K\nYeMJRkgPR8zxjPCv+IYGCUqpHvTBhlfwHkpnH5cxmd381V9PwhfTdIWoDz+UFSWnTQtNG+Lj4dJL\n4eOPJdersaXfXskNw7ZTRhLHuZ/1P/svKutW8FMDhLUkb3mLKT/5ElE5WfKUx0vOp77G8S/8S8+s\nrxAuLtfFVSU9pReIOJ8T/iaE/R2VUgNSaekFNv/7z9nH5wji4ar0nVz+9yua7JOXJ2tQLF8e2pLQ\nS5dK+eqMjKbPRyRF8/A/jOES9y72spJhZdfw/LM/DF1DVFi5K8sY8/wPGfW/P744e6E6bTSH//pJ\nzi+/LTRdVyHWdCpkRht7hoYGCUqpHvG7//gm7qq7yGQh810f8oXHF+P2Nj3FfPihlJRuvrRzT0tL\ng8mT4aOPWvbQznp4CffM3o+HGnZxF/l/2swnn6wPbYNUyMXv/5gpjz9I4u4NF58rWHIjh775a6pG\ndLGcZx9QPr5R8qIGCUqp/mjD+j9iNgb4mE8zhBw+f1Uesz93aZN9zp+HAwdg2bLwTPe+7DI4dw6O\nHGn6vHEZPv/T5VwWtZlsZlLLV3jh+1+nqCg/9I1SPc53Ppcxz/2Acb/5Dt6icwAEomLJvu8HnL7z\nm7225kFPqRg9FeuWagW9kbyoQYJSqlsOHdrBpn/5KZl8iVKSuT5hHff8tmWd5U2bpHZBZ1d67KpR\no+SxeXPLbcOWjecbD1Qz1hziI25jVMlneOKH9xMI1IancQOZtbjLionIP03U6SNEn8wkMvcYvvwc\nXP6qHnubyJyjjHrpcab96+ea9B6UTpnPoW89Q/GsFa2/uB+xXh8Vo6cC4Dufg6ekMKzvr8WUlFJd\ndu7cKZ7/m0dwBf6O/SxjkXsDj/7rNOKGxzXZr6gI9u6Fa64BT5jOOsZIr8Uf/iCrTI4e3XT7NT9Z\nzVd2/IEfbB3CRh7gik+y+Pd/uZe//e7zuHuhsl2/ZC1RuUeJOZZB9MlMonKy8BXkthkMBKLjqElM\nw5+YRk1SGtXJw+pWPUzHnzLMeT0Ea3FXlhF96hAxxzJIyNhE5JljTY8bk0DOrV/mwryr+mXuQVvK\nx80k5vg+QIYcimevDNt7a5CglOqS48f387Nv/hXpZY+whluYZPby9buLWfTo5S323bQJIiNh7tzw\ntnHKFFki+4MPZCnqxtwRHr740moOLX2PZ/M+zRb+nsXr/5Un3F/iG3//37hCmVnZjxl/NfGHtpOw\nZyNxh7bjKSvq1OvdFaW4K0qJzD3quN16I6iNjiPok+VNTaAWb2lhyzLKdYKRMZy7/E7yV97eJwsi\n9YTyCZfCupcAGXLQIEENXMEgvoIzROUdx1dwBm9JAZ7SC5SVG/afG0JZbSQ17kis20tEpCEiyuBN\njMWTkoAvLZHokcl4UhIG3J1Cf7Nz5/u88J2vMdz/KGv5PKnk8siSDD7zu79qsW9hodQsuPJK8PnC\n205jYOVKePllqfDYfCGp+HEpfOeZSyn67Nv8X9FqNvM9lr3/b3wv/3q+8b3nSE4eGt4G91HGX018\n5jYS93xA/P6PcFVXOu5n3R7pEUhOpzYumaAvEuv24KqpxlVdibf4PN6ic/iK8iEYcDyGqanGW+wc\nEHR55n0AACAASURBVDRWMWY6hfOvoWjelSFdjbEvKB83Q36ZrQ178qIGCSrkIvJOkLD/I2KzdhNz\nPKPJCeZCbRwbSufxWtFKdpRP50IgnhrrxgBRrmqiXFVEmSqiXdXEe0pJducwNKKI0WmVDB3hI25k\nAvET04iZPhp3QlzrjVA95q03n+Xjn/ySRPtd3uVOUjjLF6d8yMN/+TQud8vgbf16iImBhQt7obFI\nPYa0NOlNuOeeltvHXj+dx38Pnnve4I8XbmA932fZnhf56edu5Ypvf5Plyz81KHsVXFUVxGVul8Dg\nwMeOQwjBiCjKJs6hdPI8KsZOp3L4BKzH63C05i8M4im9gK8wD19hHhGFZ/AVyMNTVoSnogRXdSXW\n5QJjqI1LpiZhCFWpoygfN4Py8TP7fLXEnhSIiqUqfRyRZ44RlZuFq6oibL0mGiSokPCUFZG85S2S\ndr5PZN5xx30OVo7l1+c/xWsXVlIUjGeMN4f50fvxGLnDqAxGUBGMpDIYQXEghlM1QykN1t0x5EPk\ngSrSPIUM9RaQ7t3FhMTzTBgbIGV8EnFThhE9fRyuuJhwfeQB78KFc7z55OMUv1dGIT/jAEsZaw7z\n5YW7eOSN24hKimzxmrw8qVVw442yAFNvMEbWiPjTn6Ta48iRLfcZe/10Hn/FS/Rdr/HKuVW8yWPM\nrJjHvu+/zPa0Z5j7hc+zdPktRA7Q7ux63sKzJOz/iPi6oN44JHIGouMonnEZRbNWUjZl3sXM+05x\nuahNSKE2IYWKcZf0QMsHvvLxMyUPw1pisvdTOnVBWN5XgwTVoyJzj5G27iUSd29wPMHUxqdQOvoS\n1lYt5dk989lamExKQoDbl1Zw5+3xLF0YQ7SrClvtp6LIT1lBNaU5hZSeLuZCbgW5p4McORXBqcI4\nztfEc7YmhcyqcWyvmAnFEHHST/pH5xnuzWe472OmpeYzdqyLxPHJxE4dgW/KeExUy4tZXxSorqE2\nv4iawhJqCkvxF1VQU1yBv6SK6pJqyotrKSzxUOF3Y4OGgDUEgoA1REUEiI+uJT4mQGSMG2+Ul8jE\nSHzJsfiSY4hITcA7NAlPckKT1RnrBYNBCgpyOX5sP8e2fcSF7ZkETyVxmuvZw+X4iWKhZxOP3pTP\nPX+4E7fPOdFv3TpIToY5vVwFd/p06U14/31ZmtpptGrkqkk8sTWZ+V94m6fXj2dPcAUHWMr4c7sJ\n/OsuDvEosaM9DJkylhGzZzFi+kwSR4zC7e2nSY7WEnE+h5hjGcQc30fMsQwi8k857hqIjqN45nKK\nZl9O2aQ5XQsMVLeUjb+UlM2vAZK8GK4gwfTFBU6MMXOBnatXP0BycrrjPu23u+3t7b2+u9tD/f59\noQ2Ntw8rK2LViYNMKTzTYr9T8cnsHzKCw8np5PviOJ0zj8OHr6a0dDgJCUeZMWMDM2bsxeNpOkbZ\n1vsbf5Co8wbXOQ+BgkjKCoeQUzqOs7XDOBdM51xwGJVIL0IsJaS5zpDqOkuSq4DkiDwSo3LxRpUR\niKyhygf+SLDuIMZdS63bUGtcGGtwB2rxWHAFwF0LriCYoAt3AAgaCMh+8tUlz9lGVyALpu7nYG3L\nK5Oxcjxb66Y2EEl1IIbqmlgqAgmUB+KotNFU2GiqiKbS1j3q/t9Px4IdL34iqCLalBFtyok25cSY\nMqIpI9pVRqz7AtGus3hcZ6kNVlFbW01NdZBahlDNGM4ziXOM5hRTqcXLaA5ybfKHPPwfi5h7f+vz\nGbOy4IUX4PbbQ188qSPq23PXXTB1auv72aAl45kt/O5fDrLu5BQO2dlUEYMHPynkkEABsRQSSQUR\nVBPlKiPSVUqUt5woXwURvhqMN4j1WvBarM+CzxCINgSjXdREu/BHGXAYmmlfF15jLdE11QypKCW1\nvIiU8mJSy4pJKysiuqb1WQglETEcSR3BkbRRnEhKJzgIh1z6kriqcr7y4Z8BOJmUxu/nX9PqvqdP\nn2HDhmcB5llrd7W6Ywf06SCht9uh2pcOPAhc2ez5EuAt4HUg7+KzUcADwDeBUcCfgJ8AO3qkLQYX\nI0hlJCNJYQSGGZRwKecZyXlGUkg6tUTU7RsgjgtEU0IElURQiY9KfFRhsHWXdYOtewTwEMBb97Xx\no+G5WjwE8RDERf3JvP44jdlG/7YYavFRQwTWoWyJiwCRlLf6iKIUDxUYajEE6h5QQwx+4vETiZ9I\nqommklgqiaOCOCqJpYqYJm0zBHERwGAJ4LnYHkOQJM4yxhxiTsI+Vt2awp0//zS+2NazEGtr4Ve/\ngoQE+Pzn+0aeqbUSJBQVwaOPtl/QyQYtR1/L4I3/+JCPd0dzrGIU5xlGCcmUkURNK0GaIYiXKnyN\nHhFU1v28yi7+3CIpJIKzeMjDUkgVZVRRTgVllFNOCWVUUEWAIEGCBOoeHtz48ODDi7fuawxRF/+L\nrPsaQyTR+BjNOUZwkjRO4sPf6uetBQ4DW4CPgGOt7ql6y4vIOdcP3Ij8zNqhQYLqHQnAPcAtNB2z\nygf+ALwJzU5HicBX6h7xwHPAjwn1qciFj1EMYzgjSWYoPiZQyWQukE4JQ6ggFj9RVBN18SvU3/3L\n5dwQxE1to0cNbmrx1P3bRS2euufc1GIINjpGg+b/rj++Bz9eqvFSjY8qvJTiIx8fZzHk46ecasqp\npJwKyimru4AUU045rd8JGgwxRBJDJLFEE08sscQRTSxRxOEhkQDDqGY4laRSSRzBuuDAawLEuKtJ\n8JUyeUQhU+alsejuuUy+cYrj8ERzH3wgy0E//DCkpnbiBxZiZ8/CU0/BddfBokUdf50NWnI+OsrO\nv+zi0LajnDt+gdLiWkrLI6iqiaPKxuEnET9RFwMzP5HUXAzSoi4GZtVEtwgIPVQTRTmRlF38Gkk5\nEVTWBW9BDEEMti6U89YFpl4CeKkmssXvsZ8oAnhI5CxpnGI0B1nMm0xmF8M5SjGQCewDMoBDNP+b\nVX3N3wH1/QdfAQ60/5KBHSQ89tiTjBw5ua392jtOe+/Urdf39vv3RhvcNdWM37WOSTvW4PFXXbxF\n9EfFcHjRDZy4dDnBRuOVxhiKi72sWTOUzZtTsdayfHk+jz56llGjanug/Z3/HtjaAFVnyig9WUl5\nbgX+/HKqL/iprnZRXW0gEMAE5I4crxs8Hjw+g9vnwh3hwh3hxhNh8ES4Gn114/LVffU2fT/jMhd7\nDxo3xVV3J+uLj8AbH4E7zocnxtfiIhzq34P/3955h8dVnfv6XTPq1bJlS+5FLnLHCBcMGDAxxhTT\nAlzg5FAS4KZccjknCQFyIIGQhARIIARCIHQwgVBjDAZDKMYV9yo3uXf1OpJm1vnj03hG8rhI2qMZ\nSd/7PPuZtrVnLe3Ze/3W15bb7SYlMZmYSohzx+Kr8xKTGEtSz3Tc8c33PRcViRVh0iT41rdOvH9b\n8/77Uh76hz+EVIcSYqy1VFZUUrjvEIU7D+IpqqKmuJqa4hqqijxUF9VSXeShusRLdZmluCSeospk\niqqTqahLosqXSKUviSqbSJUvkSqbRLVNxGPj8OFqsGgFhIWbemJN/ZHHeDzEGw8JLg8JxkOCqSHB\neDBu2O/LYm9tNuXeFOLdHvp0LyZ3ZDFDRlfQq1cFbvexx4BoHB86M4PWLyLvizcBWD3pYvLHnRty\nv/XrN/Pcc98HB0RCVEef5OZOYOjQNq6+ooTE1NfRddEcsj95mZiyQoiNg9g4bGw8B8++ioPnXUt8\nQhJNJd3Bg/DBBzKrTEyEa66B++/vSXZ2z4j0QwkvXi+8/bYMvlOitCrutGmwaRPMni3xCU64Qowx\npKSmkJKaQv+hA0/676zPUltaTfmuEkp2llK6p4zy/fuoOFRN5eEaPJX1eL3g9Vp89ZZ6r2SJxMS5\niIt34U5wE5fgJjE9nqSuCSR1TySlexKpPXuQ3K8bJiWZXbtEFH34ISxeHM/Wrdls+yybflsgL09W\n5MzNlWJXSnQT33swqcvnATAaS0peU0ev4PFkOPadUS0SlMhj6uvouvhDsua9emTxFPnAReGkC9k/\n/Ubq07uF/Nv9++Hll+HjjyEtDW66Ce69V54rHZPPP4e9e+Hmm9u+cNLJkpgoKZmvvy7pmWPGnPhv\nwoVxGeIzkojPSCJzTK+wfEeXLjB6tASQ5ueLWHjrLVi1SgTd/PnyPzj3XBg5UuJIlOjEk9UPb3I6\n7spSkgvWSKBNmAN+VCQoITG1Hrou+YisT19rLA6A0tFnsu+iW/Bk9TvGX8OePRIk9sknsjTwbbfB\nL36hs5WOTEGBDDhTp4auRRBN5OZKxsWHH0L//p1jYHS7JRV0xAi49lpJB33tNViyRJ4vWSL/k7PP\nhrFjJWU0GgJOlSCMoWLQaNLXzJfS1vu3U9Pz5C1XLUFFgtKI+EO76bZwNl0Xz8FdVd7os7IRp7N/\n+g1U9xt23GPs2gUvvSQ58t27SyT5z38evTNLpfUcOiSljwcOlEWV2gMXXgh/+5tYFG6+OXLFniJB\nr16SdTJzpgSZvvoqLFgg27JlIqIuuEAEQ2JipFurBFM5UEQCSL0EFQlKeLGW+EO7SduwmC7LPyNp\n54ajdjlZcQCwYwe8+KLceLKy4Pbb4b//u3PdgDsbpaXiVkpLg6uvhvaSTp+UJDEJf/87vPuumOM7\n28y5Sxe49FKYPl0sCa+/Dp9+Km6YbdskduOyy45eQVOJHJU5Af9YyrbVFJ5x9LLsTqIioRMSU15M\n0vb1pG1cQurGJcQV7T9qH+uOoWTcVA5NuZLqvsfOMAmmoABeeAG++kpmKnfcAT/+cdstDay0PSUl\n4lZyuWRdhPbmTsrOhssvFytIWposZd3ZhALIeZsyRaxAa9YELCzvvQfbt8N118kKnu1FAHZkqnsP\nxsbGY+o8bbLYk96+OzDGW0/8gZ0k7t1Kwl5ZGCRx71ZiyouP+Tc1vXIoOu18isefT31Kl5P+ri1b\nxIIwf76stPfTn55cwRql/bJjB/zjHxAfL8swO5VO2NaMGAEzZkh8gscjQY2ddTB0u+GUU+APf4DT\nToM//QlWrIDDhyUzaepUdT9EGuuOoXLASFI2L5cVNQv3UdstfNliKhI6CO6KUhL3bSNxz5YGUbCV\nhP3bQ66fEIx1x1A5aAxlwydSNnwinuz+zf7u/HyJQViwAAYMgDvvlEDFzjgj6wzU1cHXX4vFqG9f\ncTEktfN1jyZOFLHz3ntQWSm++uROvDZYcrJkI40YAQ88AHPninVh+3b53zRdcltpW8qHnErKZil/\nkJr/DYWTLwnbd6lIaG80LMqSuGsTiXu3yrZni9QuOAm8yelU98qhulcOFYNPoWLIOHzxLZ8abNgg\nLoYlSyAnB+6+W24uKhA6HrW1sHatxJtUVMDkyXDOOR3HWnTKKSJ23n1XikFdfLEE8HXW37IxUhDr\nL3+Bhx6CWbMkZXLzZrjyShFWGowcGSqG5cGcZwEVCZ0e460naedGWaWtYC1J29cRU1FyEn9o8PTo\nd0QQVPfKobr3YOrTujp211u7VgTCsmUwdKjUQLjuus57Uw0XdXVQXg5lZY0fq6uhpkZM5DU1sp8x\nsrlc8hgbKwNfYmLgMTkZUlJkS06WrWnciLVy3JISWV55507YuFGEQm6u+O67do3M/yOcDB0qbrLZ\ns8WV0quX+OmHD++8LogBA8T9kJcHf/6z1FfYvVtcNBddJHEdSttS1Wco3qRU3FXlpGxZAT5f2H6g\nKhKiEOOtJ23dQrqs+oK09Ytw1VQed39vYgo1wWKgVw412QOwcfFha+OqVRKDsGKF3EB/9avwRIdb\nG9j8r12u9nnDtlYqEtbWygBcWxvYPB6oqgoIgKZiIJiEBPH/JyYGnnfvLrM6a+V+4X+sq5PjFhZK\nampV1dHHA7EGxMUFzl9trSzSBPK/7tFDBsuxYyUiviOTkiL+923bJMbmzTflfz1kCAweDL17i0Dq\nTGI4JQW++10JXnzkEXHLvP56wKpw6qkdx6LULnC5qBg8jvTVX+KuKidp9yaq+h1nadNWoCIhiogt\nOUTml2/TdelHx7QWeBNTqBowksr+I6juPZjq3oOp69K9ze5Y1oowePFFWL1aKrQ98IBEiLf2uPn5\nEgx38CAUF8uAVnOM9Yvi4mSA9G+JiYGZcfAM2f88IcGZf1F9vQyy/sG2qqrxc//s/lhCwOc79rFd\nLmlvaqpE2g8YII/+1/7H1pp4vV5pa0WF+N8rKwNt9YuxuDhpS1qazBQ7WwqrMeI+y8mRyqHr18vv\nc/Vq+TwuToqEZWSIaPJv6eny6NTvLZowRsTAE0/A+PHw1FOweLFYmS6+WOoqdETrUrRSPuw00ld/\nCUBK/jIVCR2ZuKL9ZH3yChlL5x4VaOhLSKZsxCTKB4+jcuAoqXIYobuPtfDNNyIQ1q2TUq8PPCB5\n1q055saN8O9/izjo2lVmrbm5gcHdP0Pxm9J9PhmIg7eqKti3Twa8igoZCINxu0MLiNjYwMDob4/H\nEzDhezwy8PtFQG2IZfKMaWzO94uWLl1kMImLk6A4//NjvY6PbxsLidstgqO9ZiO0NdnZsk2dGvid\n7d8vrpjiYsnsKSkJWF5AzqlfMKSni5jIzJQtI6N9WsL8ZGRI/ZO8PHj4YQlqfPFFqalw5ZUycWjP\n/WsvlA/NO/I8ddM3HJx2fVi+R0VCBDG1HrI+fY0en83C1Ncded+6YygdfSZF4y+gYlge1h3502St\nzBpeekmCFceOFYFwSSviZTwe8f2uWSMztksucSZq2j/Q+wVDqMfCQrFaBN/Y/drLP2D7B/uMDBEA\nTX37/vc64qxRCU1SUsDCEIy18rsqLZWtpCTwfPdu+Y17PLKv2y1iuHv3gHDwb+0lENDlkoWhhg6V\nrIdnnpGA1p07ZdJw3nkiwpXwUZvZi9quPYkr2kdywVpctTX44pwvVBL50aczYi1dVn1Br/eearQu\ngi8+iUNnXcHhs69sVo2CcOPzScrbSy/JrGncOHjwQQlcaikHDkgBm4oKiWUYNcq59hoTcEN0C732\nlKI4ijGBYNDevY/+3Fr5rR86JDUH/NuKFRJ34ictrbFo6NZNLBFOuJnCQVYW3HWX1FR4+GERCn/7\nm1gVLr9cxJQK6PBRPiyPbgtnY7z1JG9ZRfmIiY5/h4qEBmKLD5Kx/FMSDuzAVVOJ8dZT03MQVf2H\nU5EzFm+SM7bZhH0F9H77zxKR2oB1x3Boyrc5MO0/8CVGV3K21ysX/iuvSEXFCRPg17+W5XZbSn6+\nrEKXkQG33qoDudLxMSbg4hk0qPFnHk9j4XD4sFxry5Y1dpslJopgSE5u7NYK3vwWsGBrWLgDCmNi\nZMIwfDg8/rjcK+bMkQnFhRdKJccM51YuVoIoHzaebgtnA5C+boGKhHCQuGcLPf/1N1I3fdPYOQ2k\nrV8EgI2JpWTs2RROuljqZrdAGrurK8j+8Hky578LNhC9Vp47gT2X/whPj+irTuL1Sh33V1+VyPgz\nzoDf/EYu+pZgLSxcKCtD5ubKTCMaZ0eK0pbEx4v1oakFwucTd0VZWcB1UVYWCDYtLAzEy/hdGU0x\nRlbkHDJECiNlZoavHwMGyP1hwgR47DFYuhT++lcRO5deKnUoNAPCWcpzx2NjYjH1daSv/Zrd3/7/\njptuOq9I8Pno8fkbZM/5+wmrEpr6OjKWzSNj2Tyqew/h4LnXUHrK2ScVK2BqPXSf/w49Pn2t0aqK\ntV17sufyH1E28vSotMfV10tA0muvSZDWlClSUGViC4Wqzyezi2++EV/m1KlR2W1FiRpcrkAGxYnw\negOBtsFBt+Xlksr59deyKmu/fhJwOGpUeAbshARZNCsvT+IU/vEPqcy5bZvEHJ1/vloVnMQXn0j5\nsPGkrVtATFkhSdvXUzVwpKPf0SlFgqn1MPD5e0nduOTIe7VdsymaMIPS0WdSn5yO8XlJ2r2JlM0r\nyFj2yZEBPnHPZvq/8mvq332CovEXUHLqVKp75TQO57WW+AM76brko6PSGW1sPAem/QcHz7kaGxud\n0+jaWhnQX39dTJ/nngu//72kP7X0eP/8p5gfZ85s+XEURQmNP3snVCnp8eNF9G/cCMuXwzvvwLx5\nIvjz8sKzFsOQIWJVuOACePRRsR4+/7y04YorNAPCSUpHn0naugUApK+Z77hIMLaJiT0aMMacCix7\n+ullDB3q7Ijiqq1h4DN3B2ICjOHguf+H/TNuwsaETgY3dbWkr/6KHp+/QeLuTUd97otPorrXIHxx\nCRhvPYl7tzayGvi/p2j8dPZfcBN1GT0c7ZOTeDzwr3/JDKCkRGIPHnpI0h1bQnm5WCMKC6XG/+DB\nzrZXUZTmceiQuP1WrRJxMW6clF8O1wx/3z5xOzz3nGR69O8vdRXOOksCH5XW4a4oZdS9l4O11Gb2\nZsPdL7Ng4QruuScPIM9au7w1x+9UIsHUesh5+mckb5OKKL74JAq++2sqhow7uQNYS/LW1WR+/S7p\na+af0E0BgXTGA9NvoCZ7QCtaH34qKqSS2ltvyfMZM0Qg5LawRsehQxLE5PPB9ddr+VZFiSYqKiRu\nYOlSiWsYPlzW4+jTx/nvqq8Xa8Ijj0ggtDFiTZg2TSyLWVnqfmwNOX+5g5QtKwHI/9lzfFZQ7JhI\n6DzuBmvp/8qDAYGQkMzW7z/cvCpVxlA5eCyVg8cSU1FCl5Wfk7JlJclbVzVyKdSndqW6zxDKh+ZR\nfNq0qEpnPBaHD0v52Q8+kAt65kxxMTSNxD5ZCgrEGpGeLus5pKc7215FUVpHSoq4Es88E1auhEWL\n4NlnJW5h8mQYNsy5gdufATFyJDz9tExEVq2SmitDh8Lpp0tg44ABuhR1SygdfdYRkZC++itIdS6n\nvNNYEnrOfoYen74GiAVhyw8epbrfMEeOjbUYbz2mvg5jfXgT208VEX855HfekaqHCQlw1VWyFkNL\nZxSrVsH778sFf9VVckxFUaIbn0/qGyxYIEWRBg2SYEOn3RA+n4iSF1+Ejz6CrVvlPpSdLXUVJk1S\n60JziS0+yIj7rwHA070vz539Y+75xWmgloSTo+uSj44IBIxh+w33OScQGo5pY2KPGdMQrVRXS+Tx\ne+9JbfqsLLjhBlnuuSUzf2vhyy9FbIwbJ35HTXlSlPaByyWuxdxcCTKePVuWzJ46VYIcnQo0dLlE\nBIwdK4tGvf++WDA3bZL70eLF0oYpUyTtWt2UJ6YuoweVOWNJ3rqK+EO7SD2wxbFjd3iRkLgznz5v\nPnrk9Z4rbqd8+IQItijyWCvugA8+kAG9pATGjJElcm+6qWW1C7xeCXhcuVJuKmedpbMARWmvDB4s\n94NPP4WPP5Zl4WfOdDbQ0O2W+86YMXDLLZJ5MXu2pGquXSsTl/nzxU1x+um61siJKDz9YpK3rgKg\n+8avHDtuhxYJMRUlDHz+3iPrIhSecSmHz7wswq2KLIWFYk785BO5EFNTpdDJnXeKma8l1NRIieUd\nOyS9acwYZ9usKErbExcnA/SoUTLbf/ppiV+YMkViDJwkK0u+a/p0uS+9+WYgbmHzZhEQV1whqZU6\n+QhNyZgp9E56HHdVORkFyxw7bscVCV4v/V964MjaCFUDRrLn8h9FuFGRo7xcopjnzZPZvscj0czf\n+Y6URm7pEq+lpVKRsaxMjjVggKPNVhQlwvTtC7fdJrP6r76SYMOZM51ZjK0pLpdMMkaNkoqszz4L\nb78thd22bxehcOaZstCW0hgbG0dx3jQyv3obl7fuxH9wknRYkdDzg2dJ2SzxGvWpXSm48VdRsZpi\nW1NdLWr8k0+k2mFZmQQkTp0qF/7kyS0/9r59IhBiYsS32L27c+1WFCV6iImBc86R0s7vvSc1DyZM\nkNUew1Fa3R+38Mc/ync88ohkXzzxhNzPLrlEsiK0IFNjCiddROZXbzt6zA45anZZ+Tk9/v26vHC5\n2X7jL6lP71yrCNXVwbp14lNcvFhqFnTvDpddBjffLGa91lzcmzZJFcXu3eHaa3VZWEXpDPToIROC\nxYsldmDjRhmww1UkLT4errxSUicfe0zuOXPmyPdOmybCRQMbA9T0GkRVv+GwZsmJdz5JOpxISNi7\njb6zHjryes9lP6RyUAvLBbZDPB4xB375pbgXdu+WTIVp0yQo8dJLW2+qW7pULtRhw8T8p4s0KUrn\nweWSQMLcXAlWfuUVyVSYPj18boDcXLEmnHuuWBMWLYK//13EyrRp8v29emm8AkgAozd/jWPH61Ai\nIaa0kEHP3IWrtgaA4tPO7xSBitaK6T8/X8qtrl0rr5OTxZ3wne9ISeSWxh0Ef8+8ebJYzMSJclNQ\nc5+idE4yMuTesnKlxAxs2RIomBSOwTopSe5jEyfCSy/BrFny3evXS0Dj+PFSPr5/f7nXdVbBUJz3\nLVbWdoX7TnfkeB1GJLhqaxj07N2BQMV+uey66r869C/F65VgnsWLZdu8WWIQ0tNFHFx9tcz0nQgw\nqq2VAKL8fFm0paWZEIqidByMkZooQ4aIdfGf/4QVK0QshGtZ6v794Z574MIL4eWXJUUzP1/cqxkZ\nEjw9cqQEQPbtKy7RzlSvxcbG4YtxzrzbIUSCqatlwHP3Hll8qS4ji4Lv/QYbFx/hljmPtVBUJKp9\n6VJYs0aeGyPlVE85RXyEF17oXE5zSYmo9uJiiT8YOtSZ4yqK0jFISZFJyaZN8OGHUoRpwgRJlwyH\nC8LlkhUsx40T9+qcOSIWNm6E1atFqKSnS5B2//6SLdGjh1gYsrO19HNzaPciwdTXMeCF+0jNXwpI\nyeVtt/6O+tSOs2i51wsHDsCuXRLZm58v67OXlEhgz/DhMru//HK5MGMdLPy4a5csGR0bC9/7nlxo\niqIooRg6VMo5L1woKZMrVkjVxMmTna+tACIWRo6U7fvfF1fr119LNtfGjWJdXbdOhEtamoiE3r0l\nS2PIEIljyMrqXJaG5tKuRYLLU03/l+4nbf0iAHxxCWy79XdRv9riiaiulqJHhw+LOFi/XkTBRdOL\nSQAAD+hJREFUzp2SwuhyiRr2Ww2mT5cfvdOelZUrJTCpTx+ZJYRaq15RFCWYmBipuHrqqVJX4Ysv\nRCxccIGIiHB5gFNSxA06aZIIhg0bxKrw+edibT14ULK8CgpEwKSni0jo21dcE/36iYjo2lXWm+nA\nnupm0W5FQmzxQQY9cxcJ+7YBYGPj2XbL79pdJkNtrYiBwkIRBFu3yuz98GHZiotlQZS4OOjZUy68\n884Ti8HkyeFJPfT5JHXy66/l+y66SJW2oijNIzlZhMFpp8lCTrNmSarkjBnQLcwZ6UlJ4o7Iy4Mb\nb5TJ1d694g7xx3Bt2yaCYcMGCcju1i0gErKzxSLSo4fEOWRkQJcu4bGGRDvtssvpa+bT541HjizP\n7EtIpuDmB6gcPDbCLTs+dXUiBgoLRdFu2yaBh8GCoL5e9k1JkR9mv34SiHP22XKxjRsX3mpjNTWy\nIuSmTXKBT5yoilpRlJaTmQnXXy9u0rlzJV4hL0/SKJ1eYTIUxojVID1dXLOXXgqVlWJdWLVKrB2r\nV4uI2LNH2uknJUXEgV889OsnK1VmZUm/0tKcde9GIy0SCcaYHwI/AbKBVcD/s9YuPc7+5wCPACOB\nncCD1toXm/u9scUH6fX+U3RZ+fmR92oze7Pte7/Bk9WvuYcLK16vBBj6BUFBgWx+QVBYKKIBZNDP\nyBCXQZ8+MnvPzRVxMGSIROe2xUC9e7dEJ9fUwHXXyXcriqK0FmPknpaTIzUOFi6UwOvhw2Xik5PT\ntunUyclSW2HsWEnjLCyU+/OOHWLNXbNGnh88KJO3jRvF6gti1c3MlPtyerpYG/xZFImJ8nlcnMSL\nxcWJFda/uVziymhPFolmN9UYcw0y4N8KLAHuAOYaY4Zaaw+H2H8AMBt4ErgO+BbwrDFmr7X2kxN+\nobUk7Cug+5dv0XXpXPB5j3xUNnIyO6+9E29yWnO70SKslZl+TY1sHs/Rz8vLZbDdty8gEAoL5XOQ\nH0hGhhQi6t1bLpDhw2HgQLlQsrPbvvZAfb24Fr74Qnx0N94o6llRFMVJYmMlXmHSJIl5WrpUSrun\npASWqR44sG3dm8bIoJ+ZKbUW/FRUBALGd+6U2LD160U87N8vbgq/cAC5tyckBMSB/zEmprFQSEgQ\nYdGnjwiLtLTAlpISfa5dY61t3h8YswhYbK39ccNrA+wCHrfW/j7E/g8BM6y1Y4LemwWkW2svPMZ3\nnAos++d3/oczDu4k/sCORp97k9LYfcXtlJw6tVVTbJ9PBu9Qg71/q6wUJVlaKn6tqirZp7q68aP/\nb/1iAOQHkpER8HH5Fy4ZNCgQWRvpH8SOHbI8a2GhRCGfc07k26QoSufAWhlwV6+WQbekRGb5p5wi\nLonWFoBzGq9XJoCbN4twKCgQ1+yePWI59o8HtbWy1dXJOOP1Bh6Dh9zERFmJNy1NJmbp6TJW9Okj\n/4emwiMmprHoCH4dEyMTTGNgwYLl3HNPHkCetXZ5a/rcLEuCMSYWyAN+43/PWmuNMfOAY5V3mgTM\na/LeXOCPJ/q+LZ/twBefhUUS/n2xiZSOOoPSUWfgrU2CRf42hH70P6+vlxPmH8wrK2XQLy9vLAiC\nN/+A748RCMblaqwW4+PlJCckiOuge3eJ4vWnA+XkSK5uNJmYiookWGf9+sAqb06uFa8oinIijJGA\n7J494fzzZea+YoUsDb1ggVgWzjhDrK7REBvldssA3qdP4/erq+WeWlYm40pFhYwzVVUyhtTVBbZ9\n+yQewi8sSksDLmlvwFBObGxAICQkyOumoiDU67g4Oa5TNMuSYIzpCewBTrfWLg56/yFgirX2KKFg\njMkHnrPWPhT03gzEBZFkrfWE+JtTgWUJZj5uxmFdbnwuN9blBgyhmtz0vWDB4PMd/XkwbrecAP8W\nFxd49IuA1FRReV26yPPkZBEESUlyApOTA+9Fc/pMZaX8SA8dEtPWeeeJhSNa26soSuejrk6sCwsW\niJUzJUUmWh3JDerxiKgoLg6kvO/dK/fnkhKZrAZbJOrrZSwL3vwWiqNZjszn29iS0Nb4XHdi3RlY\nGkYwC4mJ15KYeG2j/Y41wBkjm8sVCBqJiREBkJIig3pqqph8/GadYPNOQkLAxHOiQbSqSrZoJz5e\nVPDEiVLnvKNH5iqK0v6IjQ1UVPQHfftjAToi/jTLIUNkQusXBsHW7dpaEQX+rb5eHrdtm8WOHbOO\nTIZ9PqirK6W83Jm2NVckHAa8QFPDdBZwrNO3/xj7l4WyIgTz9nuPM3r0qUBgkD7eY9PN/36wleBk\nBnxFURQl8rhc4q7NyYl0S6KZaxu2AMuXLycvL8+RozdLJFhr64wxy4DzgPfhSODiecDjx/izhcCM\nJu+d3/D+cenZU/JSFUVRFEVpe1qSbPcocIsx5j+NMbnAX4Ek4AUAY8xvjTHBNRD+CgwyxjxkjBlm\njPkB8O2G4yiKoiiKEqU0OybBWvuGMSYTuB9xG6wEpltrDzXskg30Ddp/uzHmIiSb4XZgN/Bda23T\njAdFURRFUaKIFgUuWmufRIojhfrsphDvfUlDqKWiKIqiKO2DNq7tpyiKoihKe0FFgqIoiqIoIVGR\noCiKoihKSFQkKIqiKIoSEhUJiqIoiqKEREWCoiiKoighUZGgKIqiKEpIVCQoiqIoihISFQmKoiiK\nooRERYKiKIqiKCFRkaAoiqIoSkhUJCiKoiiKEhIVCYqiKIqihERFgqIoiqIoIVGRoCiKoihKSFQk\nKIqiKIoSEhUJiqIoiqKEREWCoiiKoighUZGgKIqiKEpIVCQoiqIoihISFQmKoiiKooRERYKiKIqi\nKCFRkaAoiqIoSkhUJCiKoiiKEhIVCYqiKIqihERFgqIoiqIoIVGRoCiKoihKSFQkKIqiKIoSEhUJ\niqIoiqKEREWCoiiKoighUZGgKIqiKEpIVCQoiqIoihISFQkRZtasWZFuQpug/exYaD87Fp2ln9C5\n+uoEKhIiTGf5wWo/Oxbaz45FZ+kndK6+OoGKBEVRFEVRQqIiQVEURVGUkKhIUBRFURQlJDGRbsAx\nSADYsGFDpNsRdkpLS1m+fHmkmxF2tJ8dC+1nx6Kz9BM6R1+Dxs6E1h7LWGtbewzHMcZcB7wa6XYo\niqIoSjvmemvta605QLSKhG7AdGA7UBPZ1iiKoihKuyIBGADMtdYWtuZAUSkSFEVRFEWJPBq4qCiK\noihKSFQkKIqiKIoSEhUJiqIoiqKEREWCoiiKoighUZGgKIqiKEpIokYkGGP6G2OeNcZsM8ZUGWM2\nG2N+aYyJbbJfX2PMB8aYSmPMfmPM740xUdOPk8UYc7cx5uuGfhQdYx9fk81rjLm6rdvaGk6ynx3i\nnAZjjNke4tz9LNLtcgJjzA+NMQXGmGpjzCJjzPhIt8lJjDH3hbj21ke6Xa3FGHOWMeZ9Y8yehj7N\nDLHP/caYvQ334E+MMYMj0dbWcKJ+GmOeD3F+50SqvS3FGHOXMWaJMabMGHPAGPOOMWZoiP1adU6j\n6UacCxjgFmAEcAfwf4EH/Ts0DBxzkEqRk4AbgBuB+9u4rU4QC7wBPHWC/W4AsoBsoCfwbpjb5TTH\n7WcHO6fBWOAXND53f45oixzAGHMN8AhwHzAOWAXMNcZkRrRhzrOWwLnLBs6MbHMcIRlYCfwA+X02\nwhhzJ/Aj4FZgAlCJnNu4tmykAxy3nw18SOPze23bNM1RzkLuKROBbyH32o+NMYn+HRw5p9baqN2A\nnwBbgl7PAOqAzKD3bgOKgZhIt7eFfbwBKDrGZz5gZqTbGM5+dsRz2tCHAuD2SLcjDP1aBDwW9NoA\nu4GfRbptDvbxPmB5pNsR5j4edW8B9gJ3BL1OA6qBqyPdXof7+TzwdqTbFoa+Zjb090wnz2k0WRJC\n0QUINlFPAtZYaw8HvTcXSAdGtmXD2pC/GGMOGWMWG2NuinRjwkBHPqc/N8YcNsYsN8b8xBjjjnSD\nWkOD6y8P+NT/npU7zzzg9Ei1K0wMaTBXbzXGvGKM6RvpBoUTY8xAZEYdfG7LgMV0vHMLcE6DiX6j\nMeZJY0zXSDfIAboglpMicO6cRusCTzT4TX4E/FfQ29nAgSa7Hgj6bFUbNK0t+R/gM6AKOB940hiT\nbK19IrLNcpSOek4fA5YjF+xk4HdIf34SyUa1kkzATejzNaztmxM2FiEur3zETfRL4EtjzChrbWUE\n2xVOspEBJtS5zW775oSVD4G3EGtfDvBbYI4x5vQG0dvuMMYY4E/AfGutP37GkXMadpFgjPktcOdx\ndrHAcGvtpqC/6Y2cyH9Ya58LcxMdoyV9PR7W2geDXq4yxiQDPwUiKhKc7md7oTn9ttb+Kej9tcaY\nWuBpY8xd1tq6sDZUaRXW2rlBL9caY5YAO4CrEVO10o6x1r4R9HKdMWYNsBU4B/h3RBrVep5EYvnO\ncPrAbWFJeJgTX1jb/E+MMb2Q2fN8a+1tTfbbDzSNpM4K+izSNKuvLWAJ8D/GmNgIDzRO9jPaz2kw\nren3EuR6GwBsdrBNbclhwEvg/PjJIvrOlWNYa0uNMZuAdhfp3wz2I/ElWTSeeWYBKyLSojbCWltg\njDmMnN92JxKMMU8AFwJnWWv3BX3kyDkNu0iwsgLVSa1C1WBB+AxYCtwcYpeFwN3GmMwgH/b5QCkQ\n8RSl5vS1hYwDiiM9E3W4n1F9ToNpZb/HIUFFB51rUdtira0zxiwDzgPehyNmzvOAxyPZtnBijElB\nBpCXIt2WcNEwUO5HzuVqAGNMGhI5/5dIti3cGGP6AN2AfSfaN9poEAiXAmdba3cGf+bUOY2amIQG\nC8LniJ/oZ0APuf+Atdavgj5GBo6XG1I7egIPAE9EeuBsLg2BUF2B/oDbGDO24aMt1tpKY8zFiOJb\nhCyXfT5wF/D7SLS3pZyon3Sgc+rHGDMJuRD/DZQjMQmPAi9ba0sj2TYHeBR4oUEsLEFSlZOAFyLZ\nKCcxxvwB+BfiYugN/ArJwJkVyXa1lgZ35WBkdgkwqOF6LLLW7kJ82r8wxmwBtiPX4W7gvQg0t8Uc\nr58N231ITML+hv0eAjYhAdPtBmPMk0jq5kyg0hjjt/CVWmtrGp63/pxGOm0jKDXjBsSUGbz5AG+T\n/foCs4EKxITyEOCKdPtb0N/nQ/TXC0xp+Hw6EvhWCpQ1PP9epNvtdD870jkN6s84xEJShOQlr0WE\nb2yk2+ZQ/37QcMOpbujnaZFuk8P9m9VwI60GdgKvAQMj3S4H+nW2/57aZHsuaJ9fImlzVcigOTjS\n7Xayn0AC8BEiEGoQ9+BTQPdIt7sF/QzVRy/wn032a9U5NQ0HURRFURRFaUS010lQFEVRFCVCqEhQ\nFEVRFCUkKhIURVEURQmJigRFURRFUUKiIkFRFEVRlJCoSFAURVEUJSQqEhRFURRFCYmKBEVRFEVR\nQqIiQVEURVGUkKhIUBRFURQlJCoSFEVRFEUJyf8CUTHBMxmpxRkAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa3f8cdbfd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def p(h):\n",
" return norm(h, scale=1.0)\n",
"# return uniform(h, scale=1.0)\n",
"# return laplace(h, scale=1.0)\n",
"\n",
"objective = 3\n",
"if objective == 1:\n",
" def r(x):\n",
" y = 0.5*np.sin(x/2)*x\n",
" y[y >= 1] = 1\n",
" y[y <= 0] = 0\n",
" return y\n",
"else:\n",
" def r(x):\n",
" y = ((2 < x) & (x < 3)) + .25\n",
" y[y > 1] = 1\n",
" return y\n",
"\n",
" \n",
"hs = pl.linspace(-20, 20, 200)\n",
"foo = InteractivePlot(hs, r, p)\n",
"\n",
"interact(foo.update, N=(1, 5000, 50), R=(1, 100, 1), q_mu=(-10, 10, 1), q_sigma=(1, 10, 1));"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
},
"widgets": {
"state": {
"8cf00411e0fc49828df6556414b2de6a": {
"views": [
{
"cell_index": 5
}
]
}
},
"version": "1.2.0"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment