Skip to content

Instantly share code, notes, and snippets.

@fehiepsi
Last active December 13, 2019 09:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fehiepsi/76ecfed7a2f4444fc1ede3941c8f2758 to your computer and use it in GitHub Desktop.
Save fehiepsi/76ecfed7a2f4444fc1ede3941c8f2758 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"import matplotlib.pyplot as plt\n",
"import torch\n",
"import pyro\n",
"import pyro.distributions as dist\n",
"import pyro.contrib.gp as gp\n",
"pyro.set_rng_seed(0)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n = 100\n",
"x = torch.linspace(0, 1, n)\n",
"y = 2 * torch.sin(2 * math.pi * x) + torch.randn(n) * torch.linspace(0.5, 1.5, n)\n",
"plt.plot(x, y, \"x\");"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"class Constant(torch.nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.a = torch.nn.Parameter(torch.tensor(0.))\n",
"\n",
" def forward(self, x):\n",
" return self.a\n",
"\n",
"\n",
"class HGP(pyro.nn.PyroModule):\n",
" def __init__(self, x, y, use_mean_function=False, jitter=1e-2):\n",
" super().__init__()\n",
" self.gp_mean = gp.models.VariationalGP(\n",
" x, y, gp.kernels.RBF(1), gp.likelihoods.Gaussian(), jitter=jitter)\n",
" del self.gp_mean.likelihood.variance\n",
" mean_function = None\n",
" if use_mean_function:\n",
" mean_function = Constant()\n",
" self.gp_var = gp.models.VariationalGP(\n",
" x, None, gp.kernels.RBF(1), None, mean_function=mean_function, jitter=jitter)\n",
"\n",
" def model(self):\n",
" g_loc, g_var = self.gp_var.model()\n",
" g = dist.Normal(g_loc, g_var.sqrt())()\n",
" self.gp_mean.likelihood.variance = g.exp()\n",
" self.gp_mean.model()\n",
"\n",
" def guide(self):\n",
" self.gp_var.guide()\n",
" self.gp_mean.guide()\n",
"\n",
" def forward(self, x):\n",
" g_loc, g_var = self.gp_var(x)\n",
" g = dist.Normal(g_loc, g_var.sqrt())()\n",
" f_loc, f_var = self.gp_mean(x)\n",
" return f_loc, f_var + g.exp()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pyro.clear_param_store()\n",
"hgp = HGP(x, y)\n",
"losses = gp.util.train(hgp)\n",
"plt.plot(losses);"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Parameter containing:\n",
"tensor([-3.2154, -3.4938, -3.6883, -3.7932, -3.8253, -3.7962, -3.7358, -3.6686,\n",
" -3.6105, -3.5734, -3.5529, -3.5482, -3.5354, -3.5031, -3.4427, -3.3446,\n",
" -3.2248, -3.0808, -2.9471, -2.8348, -2.7597, -2.7281, -2.7424, -2.7890,\n",
" -2.8585, -2.9303, -2.9973, -3.0556, -3.1134, -3.1740, -3.2500, -3.3472,\n",
" -3.4666, -3.5962, -3.7291, -3.8445, -3.9101, -3.9181, -3.8525, -3.7216,\n",
" -3.5188, -3.2769, -3.0166, -2.7704, -2.5721, -2.4409, -2.3965, -2.4337,\n",
" -2.5408, -2.6922, -2.8479, -2.9717, -3.0417, -3.0284, -2.9432, -2.8021,\n",
" -2.6130, -2.4148, -2.2385, -2.0969, -2.0123, -1.9789, -1.9836, -2.0117,\n",
" -2.0500, -2.0844, -2.1132, -2.1395, -2.1644, -2.2135, -2.2785, -2.3654,\n",
" -2.4619, -2.5625, -2.6434, -2.6905, -2.7037, -2.6688, -2.5992, -2.5105,\n",
" -2.4041, -2.3221, -2.2715, -2.2665, -2.3079, -2.3914, -2.4950, -2.6048,\n",
" -2.7081, -2.7808, -2.8334, -2.8595, -2.8686, -2.8603, -2.8457, -2.8114,\n",
" -2.7629, -2.6763, -2.5390, -2.3642], requires_grad=True)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hgp.gp_var.f_loc"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD5CAYAAAA6JL6mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOydeZQU5fX3v08tvU3PBjOACLIpICAKDKIsgyC+icZo4gLGDREkRFFQ3BKN0SiJQVFAk/hDAVFBQRKTGEUDgowIKgOIyiLIvs8+02utz/tHdff0vlbPTGN9zuEcppeq6uquW/e593vvJZRSGBgYGBjkLkxrH4CBgYGBQWYYhtzAwMAgxzEMuYGBgUGOYxhyAwMDgxzHMOQGBgYGOY5hyA0MDAxyHE6PjRBCigC8BmAAAArgTkrp5livLykpod27d9dj1wYGBgY/GrZu3VpDKS0Nf1wXQw5gPoCPKKU3EEJMAGzxXty9e3dUVlbqtGsDAwODHweEkMPRHs/YkBNCCgCUA7gDACilIgAx0+0aGBgYGCSHHjHyngCqASwhhGwnhLxGCMkLfxEhZCohpJIQUlldXa3Dbg0MDAwMAH0MOQdgMIC/U0oHAXABeDT8RZTShZTSMkppWWlpRIjHwMDAwCBN9DDkxwAco5R+6ft7FTTDbmBgYGDQAmRsyCmlpwAcJYT08T10OYBdmW7XwMDAwCA59FKt3AtgmU+xcgDAJJ22a2BgYGCQAF0MOaX0awBlemzLwMDAwCA1jMpOAwMDgxzHMOQGBq2MLDsgSfWtfRgGOYxhyA0MWhlFcUKSalv7MAxyGMOQGxi0MpRKUFVvax+GQQ5jGHIDg1ZGVUWoqtHVwiB9DENuYNDKqKoESg2P3CB9DENuYNDqiFBVobUPwiCHMQy5gUEro6qSEVoxyAjDkBsYtDKUiqBUhqrKrX0oBjmKYcgNDFoZVZUAUFBqGHKD9DAMuYFBK0OpBEJYw5AbpI1hyA0MWhFKKShVABAASmsfjkGOYhhyA4NWRYU2rxyGR26QNoYhNzBoRTRv3P9/w5AbpIdhyA0MWhG/ISeE+JKeBgapYxhyA4NWpNmQc0a/FYO0MQy5gUGr4g+tsEZ1p0HaGIbcwKAVafbIGcOQG6SNYcgNDFqRZkPOGo2zDNLGMOQGBq1IaIzc8MgN0sMw5Drgdu8HpWprH4ZBDkKpDEIItBi50TjLID0MQ54hlFKI4inDmzJIC814sz5jTkN05QYGyWIY8gzRutZ5QanhTRmkDqUiCGGC/jaKggxSxzDkGeI35IZH3vqIYjUkqaG1DyMl/A2zmv82DLlB6hiGPEMolUGp1yjmaANIUi1kObcMuVbN6b8MiWHIDdJCN0NOCGEJIdsJIf/Va5u5AKUSKFUhy47WPpQfParqgaI0tvZhpERoaMXoSW6QHnp65DMA7NZxezmBpjrgoaqu1j6UHz2q6oEsN7X2YaQEpRIAI7RikBm6GHJCSBcAPwPwmh7byyVUVQLD8FAUZ4vul1IFXu8ROBw7DKWDD1X1QlFcOSUF1WLkBIDROMsgfTidtjMPwMMA8mO9gBAyFcBUADjnnHN02m3ro6oCCDFDVUVQqoQkrrKFJNXC5doJRXEBoHC7TcjLOz/r+23LUKoGdNiq6gXL2lr5iJJDVSWwrP83wxq5FoO0yNgjJ4RcDaCKUro13usopQsppWWU0rLS0tJMd9tmUFVPwHi3hHJFFGvQ2PgFAAYmUwfwfAd4PAcgCCeyvu+2jBaiAACaMwoibSVFgzxyo3GWQXroEVoZAeAaQsghAO8AGEsIeUuH7eYEmkfuN+TZ1ZJTSuF2fw+OKwDLWgFoy3GTqQRO546ciw/rSXNIgkBRPK16LMkSHhLT+q0YhtwgdTI25JTS31JKu1BKuwO4CcA6SumtGR9ZjkCpF4Rwvv9n9yKUpFooSlNE2IAQDixrh9P5tS7xYUmqzznP0O+Ra/mK3LihRTPkuXbeDdoGho48Q/weOSFMVj1BvzfOsvaoz7OsDbLsgiTVhr1PgdO5K+mEqCTVo7FxIzyeAxkfc0viN+SEmHPGkGvzOpsxGmcZpIuuhpxS+iml9Go9t9mWoZQG9cowQVGypyWP5Y0Hw3F2uN37QCkNPCYIx+Dx7IEk1Sfch6K44HBUguOK4PUegqK4dTn2lkBVRRBCwDCmnAkxRd5cjcZZBulheOQZoGl+qc+A8D4VSTb2E98b96N55Y2B6kZVFeB27wXLFkAQjsV9r6qKcDi2ghAeLGsDITy83kN6fYSso6puEML54sxyTsj4IkMrBIBqyEkNUsYw5BkQXLxBSPa05LJcB0VpTEpSx7LWQFjE4zkIgILjCiGKp2N6e5RSuFzfQlUFcJymIOW4Qni9h3PGK9fUQ341Lc0JGV8sg20UBRmkimHIM0C74JqlY5onqP9F6HbvA8vmRX1u3rylqKioDPzNcflYt24N/vSn38PrPQCOK/aVgKsR8XM/ongSongaPN8u8BghDAjhfTeDto+iBBtykhOGvHleZyiGITdIFcOQZ4A/tBL6mL4xTi1UUh8zrDJ4cH9MnPhowJhXVFRiypRnMWBAERjGHOjjwbJ2CMKRiPcrihcu105wXLuI5ziuEIJwJGshIz0J9si1xHMuHLMc0JAHYxhyg1QxDHkGNBehNKO36sDjOQiGMcd8vry8DEuXPouJEx/FM8+8gokTH8Xrr/8ZI0cOAMsWBl7HsjZIUl2IskaLve8GwGDBguUhnj0AfPbZNrz00j/h9R7X9TPpTXDSGQAYxhzSPEsQTsPp/K7NJRK144m8BA1DbpAqhiHPgGgXnJ4euaK4IIonwbIFcV9XXl6GyZNvwJw5r2Hy5BswevTF4PmSKN4eA0mq9h0nhSCchCieBM8XRfXsJ058FGVlgyAIh9t0Ak67oQZXSDYrV1RVgsv1HQThGBobP09KvdNySCFDJfy05XNt0DYxDHkGKIo3pLcKISxkWb8lvdd7BITwUZffwVRUVGLRolV4+OEpWLRoVYRn7Yfj8uH1HoLL9T0aGj6Fy7UDHFcMILpnv3Tpsxg9ehgolSFJdbp9Lr0JXxlp3SjdoFSFx3MAlCowmUpBCI/Gxs0QhLaxwtCUNaG9eYzGWQbpYBjyDNCKgZr7jjGMCaqqj3JFVQV4vYfBcYVxX+f3nJcufRaPPz4tYIyjGXMt5OCFIBwFw1jxt7+txsaN3wSeLy8vwxVXDA949uXlZQC0sIzXe1iXz5UNwg0fIQSUUkhSDbzeA+B57WbFslbwfCE8nkOtcJSRhI950zAaZxmkjmHIM0Arzw/2yDldJIiUqnC5dgUqRuOxbdtOLF36bMDo+j3rbdt2Rn29ydQePF8MhuEjwikvv7wMK1asxk03XRXi2TNMHiSpus1KEaPlKgDA7f4eDGMJOYcMY4GiONqE1xs+5g3Qjk+SqlrpiAxyFb3a2P4oCe58CPhjs5mNGtMSkHsgiqdgMnVI+PqZMydGPFZeXhYw7PEIDqeMGzccK1euxuzZMzF9+i0hnr62LRaiWAWrtXsanyq7aIY8PPxEoCgOmEwdo70DiuIAw0QqdVoSVY2MkbOsFYJQBVl2BDT9BgaJMDzyDAgPrRDCgFI5o54rHs9BeL2HwPMt0+rXnyhdseJDjB9/JaZPvyXweLBnz3EF8HoPtsmhDYrijvBseb5dzHNICNcmkp7RQysAw3A/+rbEBqlhGPI0CZe8+WEYE5qavkpLxywIVfB4dsdQnGSH4ETp2rWbQmLr5eVlAY+fYXioqrdNDjcOrerU0Aqaov+8NSnm6ZY4tLhES3YC2k1TEA5npbjM4MzEMORp4peIhRtcjisCIUBj46aUvT6PZx9YtrBFpgwBqSVKAS1Z2hY9xWBDHl7pCmifc968pYG/GcYCWW5s1Ti5trJRo96wCeFAqQJZbrtKIYO2hWHI0yRaVacflrWDZW1oavoSspxcR0RZbvR1N7TqeJTxiZUonT//jajG8KWX3oMonmhznmJweX4sPfzgwf3D3kWy2q0yEYm04iybl3OthA1aD8OQp0kspYQfhrGAYUzweH5Iante71EwjEmPQ0uamTMnRiRFy8vLMGPG7VGN4ZAhA6CqSpsLr6hq83CPWHr48M9JCANJar3PQamCBQvejbl6YNk8yHI9ZLllh3obZBdJqoMo1ui+XcOQp0kyZdRa+9iTkOXGuK9TVQGCcCxhBWcikgkrJEM8Y8iyFohi2wmvaKsDGhKiCK90jabgYdk8SNKpFjzScBQMGtQ77uqBEA6ieFL3Pbtce3KiF82ZiCw3QVX1H0BjGPI0Ce58GAtCCFjWCrd7X9zXieIpACShZjwRyYcVEhPLGGrNt062mfBKtJVRMpWuhJh9F1XrxMkpVTBq1IVxVw/audb3pkmpCkE4CkmK71wYZIdsTREzdORpkmxjI44rgCiehiQ1gOeLomxHKyP3V3DOm7cUgwf3D/EiKyoqsW3bzqia8WCCPenJk2/AokWrooYVwnn/Ww/e/MqFdjYGnQpYDOjMo7RpV4gx9GvT/S1xZbkeJlPLSCTjEW7Iw/Xv5eVlUcMrmgdPoShOMExxCx91c4w8+Ib58MNTQo5Rm3bUCEXx6JY7UVUPFMUNWa4G0FmXbRokj+aNxx8Qkw6GR54mWoItudOnJa72hoxg86MNfPCCYXgAmXvVyYQVgtm4X8Dv32+EIFPUu1Ws2+vFUx82YcrsD2OqWRjGmnDiUEsRbshTqXQlhG1FPbmmx0+8eqC6JmUVxQWG4SBJNVF/jwbZJRthFcDwyNPGP3Q5GbQl8ik4HNtgsZwDnm8HRXHB7d4LSaoK6acS7FUPGHAetm/fheXL5wYMUyLvPNwwxKvy/P60hAf/2YDzOnB4/bZ2yDMzUCnFT57djcbLp+D8QR1Djmnbtp2+OLnddwOSAjeg1iI8NJJKpav2OY7Bau3RYrp9P5Qq+OyzHZgy5dm4qweGsUAUq5Kq8k0GSaoDw1igqiJU1R1zYIlBdsiWITc88jTR+qxEapf9/w9OMlZUVOJvf/sYquqEw1GJ+vpP0NDweaCEnGEsIdv2e9UbNmyBJDXL1BJ556nowk83Kbh7RT3yzAQvjy9Gnln7KTCE4NWpvaGCwTMfNQW8tuDiIH9YItbEodjnTIWqSj4jIuriEWqKlfR091oTMRdkueW9ckoVbN++N+HqwV+8pJf3LEm1YBgrNPmloYhpSShVstYTn7TG8qqsrIxWVkYvOskVGhu/AKCAYSwhBhQAbr75QQAUy5fPBYAIL0srBiEBLzA8Ll5RUYmbb34Qgwadj+3bdwEgmDbtpoQx72Tj65RSTFlWj+9OSnjj9nbo0zHSq1682YkX1znx/HVF+Mn5lojnVVWAorhQWDgiqVmiglAFl+vrkBJ/QliwbD54vj0slm4pyy8pVdHYuBmAmtQxREOLkeehoCBxbxo9cbn2QBSPg+Mi8ybhiGIViorKM/aeVVVGff1amEylkOUm8HwJ7PYLMtqmQfIoihf19f+D3T4IFkvXtLZBCNlKKY34sRqhlTRRVU/AeIQnGbVCIRIIc0Qm2kIXQv64ePiN4KGHJgMAbrxxRtRkWDjJhBXmzVsKz1kX46vDxfjDVQXo05GPauxvH5aHj3d58aePmzC8hwn5ltBjZhgzVFWA07kD+flDwTCxf0qSVAuncys4rijEWFOqglIRXu9BCMIx2O0XhswNTYQgnISiNGUUdtDCK1WQZSc4Tv8kVCw0zzjyBhkdAklq1MGQu+AvYtM8/WpQSls8rPRjhVIpa9OfjNBKkqiqDIdjB5qatsLp3OGLdTUv6YOTjNOm/QrTpt2UdMIx+Ebw3HOL4Pfm/e/jeR6jRw+NOzQiWXr2vwDLdpnRu9CL6y+yxgzXcAzB768sRJ1Lxart0eN6HFcAWW6Cx/N9zKW/JNWjqWkLOK4wwuMmhAHDWMDz7cEwJjQ2fgGX63tIUj0UJX5PblUV4XbvCgzGyARC+KjzTLOFqspQFAcIiT3CLxiWterSG0YrLvJPUeJ8Ia7sxGwNIsmmIc/YIyeEdAXwBoBO0FLxCyml8zPdbkuihQncgQEE0ZDlegjCcXBcPlRVBcvaQzyZ4CTjK6+8DYAklXD0E02G5jeyy5c/j/LyMry/dhumLjmEQTvbo3fXdmhvZ/CT8y1RQyPRoJRibUMPmCxebH/1QcxuGBU3XDOgM4+h3UxYtsWFWy+2gWcjPTeeb+8bOsHDbO4Ils2HP/4qilXwePaB4/Ljzh0FtKSeyWSCIByG13sQWpEPD7O5M0ymTuC40B40WsUs1SXZynGF8HqPwmrtlfA49UBVtb7uyXrCDOP3ntWMag1kuSZsFaDJL9MNSxmkBqVS1uov9AityABmUUq3EULyAWwlhKyhlO7SYdstgsezH17vYRQVXRZTr+v1HgXH5UX90YfHyF955R0ANK6OOdo2wtUmwVK6r4+JeHFnF+T17oQTDU6cEgTUu1Us2ezCtFF2TB6eB46Jbxg+2uXF+r0CZl1egGPKqKTCNROH2TB9ZQPW7PHiqv6R54YQAp4vgSAcgte7H4RwvlFrWv8TLZySnLElhAHPtw/8TakMUTwJr/cwCOHA86Xg+Q5gGB5e72HwfElS201mvwCFKJ6CxdJNl23GI9gzTgatPbICRXGC49Kv/pWk2pDwDMOYIYo1uiliDOKjKd2ys+2MQyuU0pOU0m2+/zsA7AZwdqbbbSkUxRUwFG737qghAlUVIElVYJjoMcpgg7tt204sX/48li+fG5DrxZvYA8RWm/gTlyu3uTHpzTpYeIJ3Jpdiw297Y/3MDthwfwdccb4FL29w4rbX63CgJvbdvuIHAY+934iBZ/PoJuxOasYnAIw614zu7Vks/cIVM3xCCAuebw+TqYMvhGKGydQBPN8OCxYsj9o24Prr70vYTsB/I/BvV1Ea4XJ9C4ejEixry7gSNhiOK/TN98x+8l+Wa1NO7BLCZNTjRlG8UUYTto12vj8WtL752UlL6hojJ4R0BzAIwJdRnptKCKkkhFRWV1fruduM8HgOgBAePN/ON1U+csyWKGoyu1hL4ZkzJ2LkqCF4/1sPii65AcNHDgmR6wX/Pxrxilg27PPi6dVNuKSHCW9Pao/zOjR7t4VWBnN+UYTnryvCsQYZN7xWg4UbnZCUUGP0wPMfYMbKOpxbyuHWrodw5x2PYtasSbDbrYlb1xKC2y7Ow65TMrYeTVzOTggbYqRiFTiNGTMspcInTeFih8lUApOpA1hW38SkNm/V2yKSPEmq8UkAk4dhbL5WDumhJTrDt8n7worGjNCWIFrffL3QTX5ICLED2ABgNqX0n/Fe21bkh7LsQGPjRvB8qW96uQBF8aCoaFSIMWps3AxK5ZixxC2HRTy3tgm7T2ke8dBuJsz5RSFK7Jn1FW/yqvjl/9Wg0MZgxZ3to8ao/dS6FPz5Ywc+3u1Fnw4crh9khaQADR4Vizc5IVYdxAs/N2PPt9+B4zjMnbskcPNIVGTklSiueKkKF3Ux4aXxzXmEWHLH+fPfwIwZt0eVU3733b6Q/abaTiCbSFINrNY+WR1np6oi6uvXpdzewD9Murj48rTyAm73AXi9P4SErgBAFKuRl3d+i4SUfuxoMwpqsiI/1MUjJ4TwAP4BYFkiI96W8Hh+AMOYA562luhS4HJ9H+iFofWlaIhpxOevd+DOt+pQ71bx7LWFmP3zQnx7XMT4RbXYeiQz8f9zaxyodal4+urCECMercvhzq3b0eXIvzHvhiLUulT86WMHnlvrwKufuzDwbBNeuMaM30x5BE6nJ8SIA4lXDBaeYMIQGzbsE0LCN8l62wAgSRI2bNgSouJJ1E5Ar26OyaJV4Ga39UC6XQebe8M0pfV+LZwTuQrguCK43T+0mSZoZzLB7Zb1Rg/VCgGwCMBuSukLmR9SyyDLjRCEkxGJHo5rB1E8DodDgN0+EJJUjWjjuADgh2oJize7cPUAC/5wVSEsvGZs+3bi8MA/GjDt7TqsuqsE3dqlfpo37hfwr288mDI8D/3PCvXAgnXnwZ7t0qXPoryPBaN6mdHkVWHiCMwcgYkFCGkfszlTMtxcloe3vnJj/noH5t+oeeXxmnQNHNgn8Pgr/7cC9iHXYvDwcVheK+K/fzmO3p0suLTwRNx2AvE+Zzbwl8MrijtrSg5NdphexothTBDFmgivOhGUUshyfVSpJsPwkGXRl+jtktZxGSRGq2oWszb9Sw+PfASA2wCMJYR87ft3lQ7bzRqUqnA6d4Lj8iIuKkKIr/KtAU1NX8DrPRSzUOT5tQ7kmQkeuaIgYMQBoHcHHotvbQeeJfjDB41QUwxfOQUVT37QiJ4lLKaNitx3ouEJJo6gxM6iwMLAzGkVpMm0do1HuzwGk4fnYd1eAduONq80YnnV/sfnvvIf2K99ErYRt4Mr6YoLzuuIhu82YN9xB/62sxT9718Mh7UzZs2aFOHd+3MHiYZE6AuT1UZaohguAUwehslLqxe8qnriShc5rggez76EU4sM0idb+nE/eqhWNlJKCaV0IKX0It+/D/U4uGwhCCegKI1xE2aappxCUdxRtcWbDgj4/ICIX4+wo8gWeRo75LN4aFw+th6RsHJrakUXf93gRJVDxR+vLoSZi+69pRKW8HuyySY4Y3HrxXnoYGcw9xNHQN0R6wZRUVGJ1z85hK53/Q1c+66Y1KcWl3s/xD0DarHwrt44a9s83HxuPRwig9WeMsx//wBmzZqEbdt2hiQ+U+3mmCksa4MoZie8onnG0UMcyeAfgK0o7pTelyic40/0Rkv0G+hDoolimfKjq+xUVQFu9+6kKgI1lURz6MVvHBWV4vlPHOhSxKKLd3fMmO2h9e+ib5EXL6534ESj5u0kivHuOilheaUb4wdbceHZsSVqiTzs4Pj1tm07MWvWJMyduyRgHBNJIqNh5Qmmj7bjm+MS1uwRYsomX355GabMWQ/ruJno3zUfTw1vxEsPzQDHcZg48VEAwD9XzcOIs1w4svA36NtOhKX8Lrz0qQMOpycinJLJSiJVGMYKSaqDqgq6b1tVvaBUyXB5TUJG1KmqDK83/o1HlpsS7pPjCuB27w3phWOgH9keYPKjM+TatJ7kKwKDPVu/cbxv3qfYVyWjr/g1pkxqlsyFG+khQ/pj6yuPQFEUPPlBIz7dEF9ip6gUT69uQpGNwX1j8mMeUzJdDoPDL8kkOFVVSkpDfc1AK84t5TBvvQNbtu6K2Obrrz+Ld/eYYb70NozrY8bS29vh+p8MwtKlz0KW5chQyWt/wLJfd8N1F1phGvQLLP7OjkmTb4yIiSfq5qgXWqiNZGUuqR7j1VjWGiJD9HgOwOX6Lq6hSGYVoLW2dbe5eaxnCoZHriOSVAuv9zA4LvnGTMGebXl5Ge5/4E6sO9UOZucxLH7yd5g1a1KI0Qk20uXlZXj9rw+hccPr2HxQxNQXNsaN8a7a7sF3JyU8PC4fBZbYX02ywxOSDUtIUgNkuTGptrQsQ/DA2HwcrVewrehnOKf/RYHn6t0qPnWdh7qzRuKXF1rx3HVFMPlCQ/4bR7Rj4lmCsfn7IGz9B+wXjMPyg52w/tPKlIZE6AnLWuH1Htd9u7LckLFqgWFskOVqUKpAlhvh8fwAStWYNwktnNOQVOsBQhijtW2W0BKd2WtO9qNpYysIp30d+ApTTjYF651fX3sI1itmouqfs3HN4GKsXbspoQ766WdewZI97WDvOwqv3doOF3ePvKiONcgY/1ot+p3F49Wbi3X50hPptClVIUk14PkS5OX1g8OxFQDidtnza8fdJf3x9OomiDLFT7o0YvcxBw6jCwQZmHRJHu4fa4/6GaIdE9Dc6veg6Xw8/4kD8qFKvHxLJ1x+WcvryjXNdi2Ki8ekXIEZj4aGz0EI0k52+hHFKuTnD4XbvRtaHseDvLx+UbXJiuJGQ0NFUrp1WXaA59sbrW2zgNu9D4JwBJTKsNmif1fJkFUdeVvH6z0Mh6MSHNcurYso2IvsOPIGqI4a3PPLAVi7dhOuuGJ4XI+3oqISixetwm19G6E0nMDMlTU43RSqDjhQI2PiG3UgBPj9lQW6GvF4YQlJqobF0gP5+UPAsnmw2y+CorjiZtj9KxRbzU68N7UEPfM9+PehQvwgdcTQEifem9oeD1yeH1DKBIeaYh3TqlUfB24yEy/Jw+9+kg+uexme+8ICt9jyMdt0B2fEQ1UlKIojYyMOaFWuHs8+KIoLLJsHlrVAkmqivjaVcI42IzQ9nbpBfLJZ1Qn8CAy5230QTud3MJlK4sbF4xWf+BNuP7/1VjRZu+DS0gY88fivMWvWJKxYsRo33XRV1ERcsOF66vG78IdxLJrcEiYvOY5133vR6FGx66SEO96shaoCr9/WLi3NeTQShSVUVQDL2mGz9QnI0jiuAHl5/SBJdTHPS3l5GWbNmoTx42di4fxX8dVzd+HBC6vwl+FV+OiZaTixe0fIZw8ONcU6pp49u4TcBH9VloenflaAk2oJ7nizDjXO2LK4bBUNsawdXu+hjLYRjDZ3U5/VL8vmQxSrAr3bGcYCSaqNmuOIluiMdc7mz38Hqur6USc8s3Uj02b8GoY8LbRe2XtgMpUmPImxqhT9SoulS5+F0G0EWCj45NXn8fLLyzB37hLMnj0T/fr1iurxhhuu8T+9CHcNdOG4k8GMVQ0Y9UIVbltaCytPsPT2diF9VDLFH48OJjjBKctOWCzdIrx/s7kreL40oKWOdl7mzl2Ca64ZG1iJTLx6IH46dkhCzXeiYwrmuotseOnGIhyqVXDL67UxG4JlOqw6FixrhSw36JKgBLRZmXpdyAxjgsXSJWCgCeFAqQxVjeyZEi3RGeucDRnS31e4or9iJxdQFDcaGzfD5dodU1NPqQpRrE55ZFu2PfIzNkauqjKamjYDoElPVokWv922bScGD+6PC4cOxrgFVbiqvxWXF+yL6Cfif3+8niV+RJnimxMSthwScdqhYNooOzoVZKfiK+YxiFUoKhodtYJRVUU0NX0FSkVwXGHEefFLGaPF3p955pVA9ejjj0+Lum9NYaFEDTOE92/ZeULCXW9VQZBUzJvQAaPOjcwvZKtniyTVwB/dKygAACAASURBVGI5DzZbz4y3pVd8PBaiWI38/DKYTM2tfSmlqK9fA44rjigGinXORLEaBQUXpzSp6UzB6z0Bl0tbUfJ8Kez2C0KSxIrihtP5HSTpNFjWjvz8wSGD02NBKUVd3f/A8+0hy7VZiZGzTz75ZFobzISFCxc+OXXq1KzuQ5tQXw2eL8K8eUshijK6desceL6iohLvvbcGl1zSrLro1q0znE435sx5Dffeeytuu+0aXHLJRejWrTPe2erGZ/tFPP3zQgzp3xUTJlwZsj3/+4O3FwuWIehcyGJoNxMu622B3dyyCyNF0cbUWa3RDZTWlrYUgnAclEro0aN74Lxcc81YLFv2PpYufRa33XYNBg/u5/OA++Hw4RN44okFuPfeW7Fo0SoMHtwP3bp1BqXaAANZbgzycIlPTWELWRWIohzYXrdunbFn+3a89eencM6wcVixXQLHAoO78iHvifa9pUP474QQHuvXr8G//lWBkSNHprVNQLtxud17krro09+H6Ju21C7oMU/MyuRY50xRPOC4dhn1PQ/G3x4gVp//toTbvReEaMWAstwAr/cwJKnRN6DbAYdjGwAFJlMpKFV8vZosYNn4eS1KZXi9B8BxeVBVN3i+NO3fwlNPPXXyySefXBj++BkZWvnzn5/EmjXvBXpSDB7cHzff/CDuu282gNjL71jFJ5JCsXyLC4O78klP42nLKIoTZnP8bncsa0V+/lCoqohPP90UOC/vv78uILkEmuPcq1Z9HDWRuW7dJ5CkarBsPvLzh6K4eCyKi8egsHA4zOYukKSqkGVstPYDr/91Fv55dxf8tL8FCz514oF/NIQkQTMpGopWJ/Dyy8swb95SbNy4A3fe+RQGD+6XyumNQM/4eCy0cXChCc94FaCxzpnWe0W/OLGqeuF272nzcXdVlX3thbUVKs8Xg+MKoKpOeL2HAjdivwFmWRt4vj2czm8SVsRmW0MOnKGG/IILOmDKlL/gs8+2BT1K8c9/rokZv42n8nj/Ww9ONqmYMrzlhvNmC38ozWRK3HiJ4+yorHRi0qTHA+dl5cp5mDt3SUQCtGfPLhGJzNde+y2++eYUiopGo6BgiC/hrC1VCWGRl9cfNls/iGJ1iFImmtbcZmLwl2sL8eC4fKzbK+CON+pwqknJuGgovE5g1qxJeOyxedi1az8mTnwUixc/gUsv7ZX0+Y2GnvHxWBBihqI0htwUZbkxakVnvHPGMGYoin5FQZSKkOWmNjUbVFUliGLoTAStq6Qa4lkTwoFl88DzxVHFEtrUqmK43Tvjdo80DHkaKIoLl17aA0uX/iXEq1u+fG7cgcixFBWVW3dh4ecu9D+Lw8he6WuKM1VX6KXOUFWXb1xacrMpt2/fiyVL/oQRI/oCiF2UE57IVBQ3Ro8ehscemxOzkyAhBFZrd+TnD4Io1gSMeSxvkRCCicPyMM60FQdqRNyypBb/23I0oEWfN29pykVD4SuAuXOXYMKEK/HOOx9i8uQbcNlloyCKxzJq8yqKp7M+F5MQ4gthNXvhsSo64ymaCDFBURxRFTDpoPX4d+iWNNYDr/cwmpq+CjlXolidVs0Aw5ihqlJchVO2y/OBM9CQC8JpEMJGeHUA4i6/Yykqeo69AccbFEwbGb3AJZxYF0Cm6gq91BmK4k4p0fLII4/gpz+9OeRCTNS/nFIVsuyA3T4QDJPYEzWbO8NuHwhRrMGGDV8m9LCvvbgj6lf+DpIk4n/KcOypN4eci0THF07wb2XcuOFYs2ZT4Hfy2WfbfVWUdYk3FAU99ePJIMsOANqMWc04Rd6w46mHtPmg+ilXNCWN2mZK/xXFC49nPxiGg8dzEIB2zYriiZijHBPB88UBXX80NI88e1WdwBlmyClVIQgHwbIFEVPtb775wZSX37JK8ernLvTtyGH0ecl5sKJ4AqJYFSFfStR6NhGZvh/w32RIUg3DguH5YvB8h6Rjp5JUB6u1p6+DZHJYLF2Rl9cfW7Zsweuv/zluWX55eRmWzJuOY4tnwCQ2YMHXhXh03otpK1X8v5UJE67CypWrMWvWpJDfyaZN38PrPZLWtlsiPu6HYcyQ5Tq43fvhdH4Dk6kk7bmm0aSM6SDLLrBsQcyCpZbG6z0EQgg4rj0E4Qhk2QlVdUNVvWlNXgKaxxu63d9HfV4QToBls3sjP6MMuSzXQ1VFbNy4I8Sru+66/wemqDMqTuThRKOS9PJ79U4vjtRH98ajVf1RSkGIGVZrb0hSbUTfinDPLzxGnyhMkmlLV0oFsGx+Ul5yODZbbyiKJ+GSW2v7a4HVem7K+7Bau+Phhx/C8OGhMengkXHBj40b2R/fvfQbFLEeLNxdio37U/cig+PF/fv3wuzZMwM5AP/vZPv2A5CkaihK6nFeSaoNxMfTCY+l8h6GsUIQjsLt3gOTqUNGcXm9DLmqOsGydl+4pnX7nSuKG17vQZ8ck4BhTPB49vu6SWZmCjmuCIJwKqSYTtunK+7gdr04owy513sUDGMJxACHjxyClVvdqL5oGgp/9QJW7C/GlS+fxvTFP6Df4EGB5Xe0C6PereKvFU707sBhTJ9Qb1xVBchyU5QfpgKGMcNm64XCwhEA2JCWo+Ge38svLws8nkyYJNOWrqrqTXm6jB+OK/CpTGJ7Vlo81I38/EFp3SwAwGLpCUppRJuA8NDSyy8vw4oVqzH+2pE4/tYj6GARcd+79fg8RWMeHC+eOXMipk+/JeQmX15ehvvvnwht4ERqXqWqij75X0HUz5DM957KexiGB8NYYTJ1TNsT929Hr1CIojjBMCZfY6/U+qjrjTZo3RQ4NyxbCEE4Dq/3oC7ySI7L9xUTNTs7gnAChHBZbZgFnEEFQaoqoL5+PXi+JHDSXvrUgYWfu9CnA4drBlpxcTcT5n1wGBtPWGHiCGaMKUQ3YTcm3REapnB4VUxeVocDNTJevbkdBnUNTYLIcgNUVQbH2UNin4riAcOYUFBwceCYmpq+BKUqNm36PiQc8vLLy/DYY/MwYcKVWLNmU8IwScg4t/Dxbkl65lrRyOCI8XbJoqoiXK5dEMUT4Pn2IR4fpTJEsRYFBUNTHiwcjsdzyOdVhm7H/5nHjRuOlStXY/bsmZg+/Rbt8alPo++0l1AtmPDy+GJc0iO5UFiy+HuJFxaOSvqidLv3weM5GKIQSqd4qaWHVIf/jtOFUhX19WvA8yW+394gmEwdA8+53d/DZuudtfFnwSiKCw0NFYFB635kuQmy3AizuUvc7zXWoPHwAkBRrILdPhhmc0eoqoyGhnXguMLAtSJJNUbTrHAkqQ6CcBKCcApe72EACHwZ3x4XsWiTC9cMtGDVXSW4fVge+nbi8crkc/HkxVXwHNyO5z9x4O53nZj7f88FviCPRDF9ZT32Vcl44friCCMOaAaNZfMivEZKpZAlFMOYkZ9fBkoVVFZ+HXIBTp9+S4g6ItGFqU9LVxrQyaYDw5hgt1+IvLyBkKQ6SFINZLkJiuKGKNbAbh+YsREHtHi5pgYIXd77Q0srVnyI8eOvxPTptwQeX7rw9xhNN+KcdhzuXVmPLYf1LTNnGAsUxeWLeSfGn1Tj+aKonyGV8FhLT0nSq3mWqooB75RheIhic9hBkurg8RxoMS/dL4IIN9baSvOshDfnZFdG2oCOPaBUgSRV+0bsZVd6CugwfLk10O7mP8Dr3Yfgwcj+5JpXovjd+40ozWfw6BWRFWo3/GQQdm/5En/7YAPOuupe/GWHCf8+VQszR1DjUvFDlYw5vyxEeZRycA0ClrVDkmrABjkTlMoR7QBY1oaCgqGYPl0OqZarqKgMUUeEDx4OJ5oKI9F7gtF+UGzGMjhCCCyWLuC4IkhSDRTFA1V1w2brotvwXkJY2Gz94XRWwmRqXvFECy0F39jKy8tQ61Iw+a163LOiAc9eW4ixffRLMhHCQRBOJlX16PUe8BmOUG8z/DMk8x2m855MIIT19W4RM2rjS2lzPxKGsYYof7zeQ1BVL2TZAY6LPURFDyilEITDYNno31syhjZYbBBvZcQwFshyFQThpC+slt3PFthvi+xFR1RVgMOxDV7vfvB8B5hMpYF//i9k/qcOHKpV8MerC5EfZUCDv7XsPVf1RMM7D2JAkRMsQ+ASKDgGGGX6BraanRHvmTdvqS+hyQTKdIOhNHr/EK2r4IBA3LE1Jt+oqgCOK8oodhoMx9lhtXaH3X4+CgqGwGbroct2/ZhMpeD50pTPWfs8Fq/dUowe7VnMWNWAFz5xQFb1CR9yXAG83gNwufZAFKt8LX8jE3iK4vINMAn1xtP53lvjt6JBM054BksYtUIjB1RVhiw7fe0z2kOWs69mUZQmqKoXCxYsz6gWI9mVEccVwe3eDVlulp1GS1qvX78ec+bMSeMTRZJzhtzp/A6yXOfLykce/tfHRLz1lRs3DbHh0ihx0vAL4/W/PYR1f/o17jjnAJZNao+Vk0swYVi7mMsoVfUGDaeINBCxPBgtAaV1qUs1TBIt+ZcqquoBx6WX6GwNCCHIy+sPVVWgqlJK56zEzuKNie0xYbAVS75wYfJbdajY54VLaC4Tp5SiyqFg5wkJFfu8+NcOd8wOi83HxIHjiiCKx+FwbENDw2eoq1uD+vr1aGraiqamrWhs/AJNTV+BYUwRv890wmOtNSUJIBlXY6qqEBGyUFU3BOG4r2oysq1ANhCEUyCEz7gWI1mxgd8GcFzz6te/788+05pyrV+/HuPHj8fQoUMz+WgBci7Z2di4CVqsN/qSedrbddh9Wsbqu0tgM0Ua+mSTFrESTJJUB4ulB0ymjmhs/DwkJiyK1SgsHBm1SREAuN0H4PH8kFR5vB8tiVjjy/zLvkECqUuZ/FNlgrvj5QKCcBJO5/ZAkixV/vudB8+sboJL1FZb/Trx8MoUR+sVeKTQ3z4BcNUAC6aNtKN7++Sjjv4wBACf8WZ0nSzUGshyA8zmrrDZeqe9DW3lciLQn0QUq2Gz9YPHs8e3OmQhitW+LpzZaaqlJVzXgePyQQiXduJYD7GB9p5HMHXqHXj11WVYuXIlxowZk9LniZXszMkYeTTmzVuK0t4X4fMDHTHjMjtsJiaqgU421hy8jHr44SmB5ylVwHFFMS/UeBew2dwZHs9eX7w68WJIVb2QpEbY7RfCbD7LlyDaD0E4BZ5vF3NfiuKEJDXCbO4UFKMlad0AWhuTqRNMprMhSVVptVa9eoAVV/S14OtjIjYfFLH9qIizbCwu7m7COcUsOuazaG9nYDcx+Pe3HrxT6cbqnV7cO9qOKSOS662jeZdnzKUEwD+sIr1qVj+K4gQhzUU2DGOGIBwFpUpI7kCbdJQdQy7LDaBUCoRdY13XiYi3MkqlqG/SpJ/hz3+ej9///vcpG/F45PSvL9i7Hjy4P6a+fgC2Xu1R+9W/UaH0Cdwx0yFegoll80CICQDxxcxJoGoy+IcbDstaYDaf45Pvxa96VBQPFMWNwsJhAe23PxegzR/9GixrAcuGGhstpszAZjsPXu8RmEwlvguHa7EycT3RQizno7Gx1ld9l/pnMHMEw7qbMSzKrNRgHhibj9svtuFPHzdh/qdO9O3EY2QvfWWMuQIhJshyfdJORzQUxRXSIoBhrBDFEyGrK0I4yHJ91laKgnAi5BjSTRxnKjbw73vJkg/w29/OwN///neMGTNGN2OeczHyYIJjXj0uuAimXpeg9st/Yf/u71Ne9gQTK8G0YcOXAYOoVYZZgmLXWjFQIhmTxXJOUt3QZLkJBQVDohbwmM0dfQVHHAThNCSpDrLsgCjWghALCgouhdV6HhiGh6oKvvh4u6wXJWQLTfZ4ESSpIevVgSV2Fn+6pgjndeDw23834FRT61YjthbNPVfSS3hSqiVLgxUhDMP7GrY134y1OHl1tE1kjKrKEMUTYFlNOdJ6iePmfS9a9Ds88cQsrFy5EuPHj8f69et12b4uhpwQ8lNCyPeEkB8IIY/qsc1kCJYE3fvXLVAVGWPOdiatzY5FrGXU1q3fhBhETUuuGWVVlZKS9nGc3de3JHblnKK4fb2PY4cSOM6OgoJhyM8fDIulF3i+PSyWLigouBgsawHDcLDZ+kGWG6GqQs7FxsPh+Xaw2fq2SHLMwhMMdHwKt6Dg4fcaAqqXcIVDtuaFtiXS1Xlr0kMa4TyEh1AIMfva3GaWzI+GtqJQAiuK1kscN+971KgLAQBjxozBypUrsWXLFl22n7EhJ1qw668ArgTQD8CvCCGZdeJPgfLyMtwy+Rb8oJyNju692PDR2rRL2P3E6g53773XhRhEhmk25OHFQPHIy+sPgItZdKEoTl/FW3wPmmE4mM2dYLP1hN1+AfLy+oU0/jGZOoLjiqAo7oBXkstYrT0S3gT1YmxZdzR98ndsPybh7xXOqAqHbM0LbSsQwkT0C0qWZLsn+n/jqqp/m1uv92iIc5XKzNhkSfZmHm3fY8aMwcMPP5z2voPRwyO/GMAPlNIDVLsNvwPgWh22mxQVFZV49xsZhOXw9TvzIzrXbdjwJRTFnbF8D9Ay4MEGkeOCDXlkMVAsWNaCggJNdhR+oWhxYFvaPVGC0eLL/cBxhTmZ6AyHEAZ5eQN8y/bsDgguLy/DoieuhbRvI17b2IQ77n4uIlSXTEfKXPbaM0l4pjKcmBCSsJJUVQVIUm3S37uqii3SrKqt3Mz1MORnAzga9Pcx32MhEEKmEkIqCSGV1dX6xMS0HhvPIH/wz9CTO42nHpwQ0rnu9df/jC1btviKEdwQxeqQJlbpEGwQtRi5tuyOVQwUezs2FBRc7CuQaAhsR5abfN64XoU7hcjPL8t5OZwflrXAZusd6LudTcrLy/DLc11QFAUDbnogaqguUZFIW7nQ00G7burTeq9mcJPLyTCMJWJiDwDIshNu9340NGxEff06NDZ+hYaGzyCKicNr/u6kqeaFUr3x6tFeWg/0sBbRzlSEOJ1SupBSWkYpLSstzbwfB6DFnW783RwICoPn7xwQ0bnu0kt74uGHH0JBwcUoLh6DoqJyUNrc/yEVFMXpawHbbBA15UozqRpLls1DYeGl4LgSSFI1JKkWDGNOu6lVLFqqTLil0PqpZ38GZEVFJd5Z9Cb6sodxgHbFO6u/jvqaeEUirXmhZ7oaIISDqkpprX5U1Zl0B0ytfL8WolgDQTgFj+cwGho2orHxM1+rAwYmUweYzR3AslY4HF/C5dodN64uCEfSWoWmc+NNpRfO7lPZqdvRw5AfAxDcyqsLgBM6bDchk6fdho1VhRjXx4zzOmixYX/My98o3mo9L/B6bWBqScrxOFUVoShe2O0XhjwebrjDDXsysKwN+fkXorBwFEyms2Cz9W2RbnC5DMvawTBmXcJlsQhWOLz2wAhYeeCp946HGMZkVRAt3fTKj55TpVJFll1xpbjBaL1dKByOSjidO+Dx7AEhBCZTB1+9RLCE0QKe7wiv9zAcji1QlEhVjaJ4IEl1afUVSufGm2zF50e7PLjlDQUf7dQ/x6OHId8C4DxCSA+iWbKbAPxHh+0m5O1KNxwCxdSRoVpqSilkWSukCZ/6YbF0C/wwk/FYtDFf9bDbB0VUbGbqkQfDcXbY7RfAbO6c9jZ+LGgXeee0E3HJEKxwKLIxmDqqAFy3Ifhwy/GorwFiqyDCL/TVn2zFu9vc2HpEhKRkr7Jan9UASWvepqomb8gBbRi4VidRAp4viRum1L7/UqiqG01NmyDLjSHPa8qm5EMq4XagvLwMV1wxPKkbb7I3831VEp74bxMuPBsY2ydx07VUydiQU80tmg7gYwC7AayklGZdz+MWVbz5lQujzzXj/E6hPxh/GX20SkBNPsiCUiUpj0UUa2C19oHZHBnuYBjO1z9FQaJiIAN9MZk6pJRQS5VwlcEtQ20otTM41n5kIDSXjAoi/EJ/bP6LeHCtBX9c3YQ73qzDiLlVmL6iHscb9FldZGKUoqGNj0stTu4fAp3t60Er8+fR2LgJXu+RwJBjr/dIUuHE4w0ynvqwEYeLh+OOe56LGFpy001XJVS/JXMzb/KquP8fDcgzEcy5hoWJ0798R5ctUko/pJT2ppT2opTO1mObsZg/fxkqKrZh8WYXGjwUU0fmhXjRqiqAYbiYo8YYhoPJ1AWK4kjosSiKEyZTCazWnjGPh2VtUFVPUsVABvqhtSTVilZSJZ3Ysc3EYPpoO3Ycl7B6V/JFMv4L/dIRQ/DiOgcWfFuKTqUFuMryFebdUIRrB1qx9aiIGe82RPR+SYdYk5SSMUrRSEe5oim5IjXk2UALl7aDy7ULDQ3r4XLthqI0xfXo3aKKBesduOaVGrz/rQfrj+cj/6Z5mLr0GG65+0U89tg8zJ49EwsX/jFh0VCim7lKKR77TyOONyiYe30RSvOzc05yorJzzpw5gQqoQYP6Ysrv3sbCjU70Yk+gYf83IV60LDfAZusXEVIJxmzuDEXRvLl48UtF8cBsPifuD5Jl86Aonoz7fBukBsNw4HlteZ0qqcaO/Yb/2oFWnN+Rw4vrHFi7fmtSScOZMydi1KgheHp1ExZvduH6QVa8P/1s/GXWNbi8jwWP/bQAc35RhL1VmneYaRO7YOfkrrueSMkoRUOrDvakVLCjKG4sWLCyxWSXhHAwmUrBcYUQhCNgmNh9W7wSxfhFtXh1kwtXnG/Bf39TitX3lOL2S/Jg6zEEX5f+AldM/HXo0JI0i4YopZj7iQOf7hPw0Lh8DI4ypEYvcsKQDx06NFDO2m/wILS7+kGItcfQ/uB/Q7xoWW4Cz5cm7JSn6aotUFUxZqLCf0ElatTEMHk+jzz3ddq5htl8VlqJuFRjx37D//nGrXjk/xXgVJOKu1/anHTScPFmF97b4cGvR+bhD1cVRnTlHHWuGdNH2/HBd14s25L654kVTok6SSlNo5TKDVNRHBg8uG+Lyy4J4cDzJXHDKu9ud+NwnYIFNxbh2WuL0KmAxVmFLIbye9Gw/H604wXsKb0Sf1qxO/CedIuGFm924Y0v3bi5zIZflWXX0csJQ+4vZx0/YQJ+tWAf3BJQJnyOd9/+T8CL9veF0FQf8Zcv2pSbHli//rOYiQpVdYHnSxMmMFlWM+RnQsFNrhE+uCEVUlGSBBv+1W8shnTgS+QPvQ69LxqUcD//2+3FvPVOXNnPgnvKY3dTnDIiD2N7m/H8Wge+PpZa7D9eOGXt2k0RRj4do5TKDVMUqzF69LA2oa8Oxi2qeG2TC8O6m7DjwxURN5kH7v4lrsmrRP/2It7+oRgPLN0LJc2hJP/82q197/0teOT/5Wc9zJQThhzQjPmlU55GFemAXg0V+PzD/4Z40ZJUD4ulV9KaaZ4vwfbte2ImKhTFndToMm2AAJ+TnQVzHZa1gmXz02rslKxkzE+w4f9lj0aAMJizpglqnFDI9qMiHvtPAy48m8fTPy+MezEzhGD2NYUosTN49n/xtxvt2PQMp0QcG2OBJFUl9VpNMVYLhrG2muwyFm9XulHnUjF9tD3k5rdt207MmjUJc+cuwbAhfbFsWneM7OTEmmMFuHdlAxze5PIw8+YtxYYNlVi51Y2nPmzC8J4m/LToByyY/0aWP1kOGfL169fjq4/eRafG7fh08YKIUvzPPtue0sxIls3DzJm3YeTIgSGPl5eXYcaM2wEwvsKT+BBiAsPYzpjKyVxDU6+kZsjTHbnmN/zvLHoDV3ZtxJo9Ap5eHd3oVvwgYOryOnQsYDH/xiKYucQemd3MYMaYfOw8KeOD71L7THEHU2fYGIplbRDFU0klllXVE+g3nurNMps4BRVLvnBhZC8TLupiCrn5OZ0ezJ27JODUcQzB3+7shcd/WoDNBwXcvKQ24fQoADh/4AD8eulRPP1REzoz1ehb8z9MntQcTqqoqMSCBe9m5fPlhCH3j0V6e+5juOqsk3j66XvCSvFnY8eO/XGTHOEQQmA2d4mqRU42rAJoHjnLWtMqBjLInNBWwsmRahe8YMNvt1sxa9YkLHv8HvykaxNWbfdg2qIDePHF5iTef7/zYMa79ehRwmHp7e3QPi/5Aq+fDbCg/1kc5q13pKRiCTaaeoVT/PjluoqSuC2Cdj3RmDfL++6b3Sq9Z978yo1GD8X08uYVe7wVAyEEE4bY8Oot7dDkpbj+1Rr8/v1GHKqN/K15JIqPdnnw0vfnwNTrEghbVuDs/e/iycfnYtasSSEThQYNSn/iUjxyYrDEli1bAmORBg82A6C46KIBgekcI0acj8suK085DsXzpfB4foh4XFHcsNnOT2obmkdujauSMcgeWoVnanHMVIcEhBv+iRMfxaxZkyDVbsZV51yKD48U4FT+Zdi5rA5NHhW7T8sY2s2EBTcWwW5OzVdiCMFD4wpwx5t1WPqFC9NGJZ5SFD52rLy8DBMnPor5C+fAXdwX6/Z6wTLAH64qRKeC9KqGtbFstYGxbbGQpDowjCnmzXLVqo+jjkz7+c/HBByz4M8VPuErHTwSxZtfujC2txn9Ozdfp8kMmSg7x4RVU9pj0WYXVm134z/fejC0mwkldgaFFgb1bhWf7hPgkSjOKmCw+Lb2+IiaMWfOh5gw4SrMnbsEDQ2OwFi5Sy/tntFnicUZMbNTFKuRnz8o5bmO2jy/T8BxhYGyeEopJKkGxcWXJ22cRbEaPF9i6MhbAUmqRVNTZdR+68nOZ02V8LmPt81+Gd86S2A3ExRYGPQq5XBPuT2pcEosHvhHPTbuF/Hf35SgQ3584xv+ORWV4jeLD2DzaS0B360dixqnCjNPMO/6IgxKQwanql5QSlFUNDLu6xoaPgMhbEhZfTjR5mYCyHgmZiw+2ePFzH804NWbi3GJbyB7OjM4a5wK3trixpcHRTR4VDR6VPAswdg+ZlzZz4Ih55jw+catIZ/tiiuG4513PsTDD0/B449PgyTVwGbrB4ula9R9JOIMn9lJI0aeJYPWjKcTJKkGHKeVzcpyI0ymzil52MEDRp56vAAAIABJREFUmA1aFm0CTXRnxJ/QinaxZkL43MfHb+6b0faicf/YfHy6rwZz1jjw/HXx1TnBNyWVUvzhgyZsPp2HWy+24cZBNvRoz+JAjYL73q3HnW/V4YkrC/DLi1KTw2kdCqugKF6wbPTEvqpKUBRXwush1txMf/gl1cHI4YTf2D7Z60Uep2DTv1bgkvtvB5DeDM4SO4uZY/KBGNPZwm8GRUX5eOyxeYFirPLysqx55DkRI48HpTIYRks4poPJ1CmQLNNKfNWMJocbtCzBo8TCSbfXCKUKRLEKolgNUayGIJwOlH8D0RUvevcd71rM4dcj7fh4txfrvk8u8UkpxTOrm/Dvbzy4u9yOR64oQM8SDoQQ9CrlsHxSe5R1M+HJD5uwvzq9lgCK0hjnOS0+nohYSVC9VC7BihRJoVi7242GXZ+jbEjzvJtsDJkIvjlUVFRi7twlmD17Jvr16xUkytiR9vbjkfOGXFW9GYU1NC0yCcim8vIGxPQ4DNoe8Qw5kJ5xkOUGWCw9UFg4HEVFo5CfPwiSVAdVlWIm8TiO070A5s5L89C7A4fZHzUllMBRSjFnjQPvbvdgyvA8TBsZWddQaGUw5xdFsPIEL21IvZ87w1ghCCdjPq8ojoSdO+MphvRSuQTfwO//8z/hkRlM/0W/rMsfg28OfqM+ffotgceXLn0W27fvzcq+c96QK4oHHJd+aEMbCNseongSJtNZMJk66Xh0BtkmUWOmVI0DpSooVWGxdAPHFYBl82A2n4X8/MGQpDps3fpt1CW5LMu6F8DwLMEff1aIGpeKF9bFNryUUsxb78RbW9y47WIb7rvMHtOxKbYxmDgsD598L+C7E4mHgAfDsjZIUlVMGaIoViesp0gmCarHYGT/Dfy/XzeCUSVMubr5htoSKplYHv99992Ylf3lvCEHEIhvp4vJdDYIMcNm62ckLHMMQhhfB8pI4xJNNhjuNYdf0IrSBLO5a8SQYLO5E/LzB+Puu6/EqFFDQp7zL8mDvf9x44ZHJFnTMR79O/O4fZgNq7Z78EmMEMsrG11YvNmFCYOteGhc4irC24fZUGwjmP9pal65X4YYbSxbcCFQPGIZuJ49u+g6GLmiohKLFv8D7QZeBufeL/Ha/y0PPJ4rE5pSIaeTnf4J2Zk2rNIa7lxihFRyFE2C2Dwt3U8s2aDfOIQnPrVZoCIslnOi7sds7gRB6ARVdUZNrvu9/wkTrsLKlatx4YV9MH36LRknWe8uz8fmAyJmrmrATUNsuH+sHTYTgxONCpZvcWHpl25cO9CK3/20IClHJM/MYMpwO55b68CXhwQM6x5bYRKOJkOsAs+HJmAVxRn1O0iWVCWh8fCf7ycWvIAXvrHh54OK8Nhjv8U333yPNWs2tXqrgGyQ04ZcVT3guJKM51syDG/owHMYhjH7epOHfofBxiE4bjp58g1RQx+K4gTPd4jb5sFs7gync0eEIQ9XLFx4YR889tg8XYyHlSd46472mP+pA2995cbmgwLa5zHYdlQLjVwz0IKnflYAJoXV5IQhNrz5lQsL1jvx1h2mpFeiHFcEr/cALJbQVYvHs7/NVDf7b+Bfid3Bs248c89YuPdcGZABnmlGHMjx0IqieFPWjhuceWiaZSXh6xIlPlXVE7f3POCfFxqpzAj3/qdPvwUTJmjGQ48+Ixae4JErCrD41mIwBGjyUtx3mR0f3l2C2T8vAsukFhI0cwR3jbDjmxMSdhxPPlZOCAtCOHg8BwKPSVIDRPEEWDZ+sVAw35+WsO1odgaD+FsHr/1ewLDuJmz7chvWrNkUM0+SzQElLUVOG3JAzTg+bpD7EJLc/M54iU9FcYNlCxN2VGRZC1i2IKK/S3jst6KiMq7xSJeh3cz4z7RSvDe1BHeNsKNrcfqL6qsHWGAzEfxjuyel93FcEQThCGTZCUop3O7dYNm8pLx6lVIs3uzETYtrMfGNOkxfUY+DUcreM2VftYzjDQrOIafjJlEVxQVRbJERw1klZw25v/f4mTYh3iB1WNbmG7cXm0SNshTFBau1Z1LGyGLpAlmOPS80naZcrYHNxODKfhZ8vNsLp6AmrYUnhIBhzPB49kIUqyDL9UkV5NU4FfzmnXq8uM6JMb3NmDHGjsojIq5bWINXPtN3/urn+zUvWz2+I24SVVHc4LiitDpotiVy1pBrvcf7tPZhGLQBCDEl7LcSr5KPUhmEsOD5yDL/aHBcewCxdd2pNuVqTa6/yAqPRPHhTm9Kk5M4rhCieAou186E/VcAQFIo7lpej61HRDxxZQHmXleEKcPt+ODuEoztY8FfK5z45rh+IY6N+wWc14HDYw/clKDwh/omTeW2Ic/JXiuyXA+zuRvs9gE6H5lBLiKKNXA4KtNulaAN6+4Om+28pF5PKUVDw6dnRLM0Simuf60WJhZ4586SqH1QYsX3FcUNVfWA59sn3M8bX7rw3FoH5t9QhLF9QtVhLkHFz/5eg3OKWSy9vV3IqiidfjkuQcXIF6pw28V5eODy2Ct2RXGDYUywWHrC4djaIq02stVrJSc9ckppwqSUwY+HRNWdiaBUhsl0Vgr7IzCbz47aAjnXIITg+ous2HlSxp5TUkqVsNrg48RGvNqh4G8VTozqZcaY3pFSxzyzNth6+zEJa78XQp5Ldb4qAHx5SISsAiN7xVfRaH1huvrCQi3v0OpJDhpyBlbrecawY4MAmRhyRXGB59uD41Jrusbzpb5p8bnP1QOsMLHAP772ZGUYxIvrHRAVGnfk2S8vtOLcUm2wtaQ0G9Vk++UEx/c/PyDAZiJwHvo2QREWBc+3A8tafbUI+iddW4qcM+Rm89mwWru39mEYtCEyNeQWS4+U38dxBb6K0ty9+P0UWhmM62vBv792YuKdv9c1SbvtqIj3v/XijmF56NYu9vfEMgQPXp6Po/UK3q4MnQ+azCrB77lv2FCJjfsFnJvvDpnOE47W2qMoUATI8yVQlOTUO8kkhYObroliddYljjlnyC2WrnF7HRv8+Eg3Tq0lOXnwfLuU30sIC4ulJySpIa19tzWuv8gKj8Lgnmfn6pakpZTiL/9rQsd8BlNGJB5OPqKXGcN7mrDwc2fIdKRkVgn+Y500Yz5ONKr46t9vJ4jvO2E2N8epOa4k6YRnonCPlnckKCq6DIWFI2Gz9YYsx+4aqQcZGXJCyHOEkD2EkG8IIe8RQtIfa25gkCZaxz0m5UlB2sXcJWHHvlhYLOeAEDakxW2uUtbNhK7FLHZ6QgvsMmnt+tkPAnadknHPaK2lQDjRPNuL846h0aONTgNSk3KWl5dhxA1av/EbRpydoAiLhtzANRlz6O8nluftVyXFCveoqhs83x4sawHH2RPWJuhBph75GgADKKUDAewF8NvMD8nAIHWSre4MRlWlpJJ1sffJw2brC1muS3sbbQWGEFx3oRWVRyQcrss8XEQpxf997kLnQgZXD4jeSCuaZ/vMjAfQySZhxVYtvJKKlLOiohKVxykKaBPeWfRmzJCQonjAsgUheTatoIkNab4Wz/OOF+5RFDdMps6Bv1sigpCRIaeU/o82Bwm/AJD8GHsDAx1JN1nFsomX/PEwm88Cw+TlvA4ZAK4ZaAVLgPd2pFbpGY2vDov45riEOy+1468vvZGSZ3vnqHbYeVLGdyekpAdAVFRUYuKdT8DS9QJcO6xTXM9dURywWkOlpoQw4LjikO8xXqI1friHgueLg7ad/R40esbI7wSwOtaThJCphJBKQkhldXW1jrs1MIg05KoqQv3/7Z15lFx1lce/9221dFV3p5MOIYQsLBFCJAsNxGiHQRJHQYgjiIgoIJEBD5xhRnQWxnE2HJdhkYNzIALGGWVMGBjhKDojIp0EJdAJYXXQgAhBJIkknXS6u5b37vzxq+quvV7Ve1Wvq+t+zulzuqpe17u/rqpv3Xd/d3ESZY9Xk6XMqm1Xq0Gko6NjEdLpIThOErY9gnT6ENLpQ7Dtw7Dt0ZpDPuXwewpRITPjOvqPC+HBZ0bzMkfqYf3Ww+iNafjQkkjNnu2574wgYhK+t32kylkm2LHjBfzZV76GNBNWHRcq67krbzxecsarKgyqvtFaKdzjOEloWjTP29c0M7MxXtsVYy1UFXIieoSIni/xszbnmBsApAF8t9zzMPN6Zu5j5r7eXplxKfgLUTjvg5JOH6i4wWTbo74NzDbNGbCso8BsQ9MiMM3pmRhpHAAhlfIn9JIriLfe+m3cfvt38zbZ/BD1Dy+NYN9hB1t2lf8SrMbO3Uk8+dskLlvRgZBBNXu2sZCGc98Zxo9fHMWBkcqTkbJcd92l+I0zGzM6NJw6T3nApTx35Y0vLNkx1TC6ir50S9lXKdyj9l2OKnpu1UaicXspVfO2mHl1pceJ6FIAHwRwFgdRJioIAHQ9gmQy1+MhEBGYnZIfWsdJeJoslQsRIR5fUvIxx0lhaGgLHCfhOVaaK4irV6/Epk0/wo03XufrYOn+40LojWl4YOdoUQWmW+7cOoxpUcIFyyaudkoNXC5s/btqVd/47QuXL8GmHaN48NlRXLqievhraNTBlpcTuOiUaNlOkBPeeOnXXddjINLGX6tK9pUK96xa1Zfp1V7s7et6HKnUH6quo168Zq28H8BfAjiPmd1fBwmCz6jQivLe1IADHaY5s+hSeQJuSsM1tSF6EtJpf9IUs4K4cePDuPDCD+Cmm77l22g5ADA0wtqTI9jycgK/P1h7KGDH60lsfTmJT57ekZepUqtn+44jTCybY2LjjhHYTnX/8H9/OYaUDZxTZmMVUN54NPqOsldhmmYiFluOdPogHGes5p452fddqfeVrscb6pF7jZHfDiAO4CdEtJOI7vDBJkGoGVUUpD7wauDI9EwZffHGXdZL97rR6RbLmgnTnOlLLnGuID7yyM+xZs1Kz1PnC/nI8ig0Au76+eGa/o6Zceujh9Ab0/DxUyf+t+ViyoU9VID8cMjFp0bx+n67qGy/FD98YRQLputYNKt0kMFxxqDr8aqN0SxrBjo7VyCdPoxrr/2Iq43WLCpbZVbJdFZdjwQbI68EMx/HzEcz89LMz1V+GSYItZBb3ek4Y5nxfV0AuCju6ThjMIxuz5Ol3NtGiEZPgOOMefowFwriZz97OTZu/BEuuuhsX3uez+7S8aElETywcwRvDrm3d+DXCTy9O4Wr+mOImBNeb73dINecEMb86TrWbx2GUyFq+7shG9tfS+GcxZGy3nY6PYxweJ6rPRHT7EZX1wo4zljFDfNCHGe07PB2osamILZcZacglCJXyJkd6HocmhaCafbAcfK9clWwMbOp9hlGDOHwcZ688lxB3Lx5EDfd9C3ceON1WLTo2LrL6ctlwuj/92MwA9983F1jMNthfP2xYczr0fEnS/LDG25TCAvRNcKnV8bwqz1pDPy6vKA+/IJ6fc8+qVJM38lMd3KHYXSio2MJUqkDrrKOJsIqpc/R6FxyEXJhSkCUW6ZP42ETy5oD286PkzM7rnpo+00odISn3iy5gpgV9Wuu+fj4/fWU05dLDVzVdyzOXxrBfz8zijcO5NtcSvxvvv+X2LU3jWvOiMHUvWcCZTl7cRhzunXcuXW4pKAyM374/BiWzjHLTktSqabhmkNpodBMhMNzXRV8pdNDCIXmlm0X0eh5piLkwpQg65E7TiLjjasPlCrMKExhI1cTbfxG1+MgMn1ptFWvl1tIpdTAde+OgQj45uP5sfLCNMh/vW0jNuxwMDeWxPtODPua225ohHUrO/DCm2n8/JXixlODryWxa28a55xUaZNzGJZ1ZF2pptHoQhCZVQu+mNMIhcrXQxLpmQ35xsTJRciFKYHaYKKiQQe6HoWux8c/iGrTKxbIQAgiDZY1u2of80YX/hRSrtx8VqeOC5ZF8eCzo/jCTQ+M25QV/4svvh733f9T3Pl8N4xYD248fxa2btletV94rZx3cgSzOjXcsXU4L4Nl94E0rn9gCEdP03HO4vJhFcdJwrLqC6VpmoVY7GSk00NlQyy2PeyqFbKudzQsc0WEXJgSqDmSFmx7rKibYSg0B6nUH5BM7oFtjyAUmhuQlSq8Uq2laT3DFLxQqdz8ynd3oCeq4Sfp03H5n/9b3mOpVApvHHkWwvOWYOSx9fjBhnt8S4PMxdQJf/qeGHbuTuFT33kbbxxI49CYg2s2HkDKYXzjo9MQD5eWMiW+GnS9/iHtpjkd4fD8siGWdHoE4XD1QTeaFm9YO1tvo1UEYRKhaSHY9qGisEkoNBuG0QlNi0LTQr5Uc9aLrnch26mxnB254Q43I9dK4ThjSCb3IBSaXbFfe7WilxkxHd/6RA+u+O7b4Av/GZd/9ou4fO0g7rznIcRXfBSRJX+M5NPfx5kLnLxiH785f2kEIYPwpf85iPO/+QfM69Hx27fTuPNj07Bgevn1Oc5hmOYMaJo3qYtEjkUi8QYcJ5V3Nec4Keh62FUrZMOIiUcuCNUgCmfEOj9eqmlWZhJMOFARV7YYMM0ZcJzKOdq1jFwrhDmd2XybXbTRW4ib1MC5PQY2fKIH0zpMdK79Iu49fAa6r7gHkdMuxPtODOOaM+K+pkGWCi1t2bIdL/90E+7/9AycOMvAi79P4wsf6MRp8ytng9j2aE1j/MqhaSFEo4uQSu3Puz+dHkI4vMBVKqumhdEoyRUhF6YMKt1weuBiXQ0lsPkpkYXitXnzIO6443s444xTaxJHZgfJ5D50dCxBKDS36qW8203To7oNXP2O3Rh95Sl0jbyKkV98B1eftA8f7NmFm2/2ngaZTh8cj0FXCi3N7tJx18d78PBnZuDDS92Me2SYpj/9wEOhI2Ga3bDtYTCnkUy+BV2PIRRy90WhaaGG7c1IaEWYMqip9vXHQpuFGjSQv3GWFa9sr5SLL74eAONzn7sCAFzHnpPJfYhGT0A4fBTS6UNF56mXzZsHcd2Vuc2uenHppdfh3HPPLLIr69G7vYrIXkGoattY1dCSrlHZVMNcHCcJXe/wbb4vkYaOjpMwNLQFtj2Gjo7FmcEk7vxhFdYTIReEioTDc9AKF5m6HoGud8JxxjKX2/lx8cWLjwfAuPfeibFrbsSROQ1dDyESOSZzng4QaWUbh9VCpRBMuQZSblEDsHvz9jdKNdmqFTWPdV7Nf1cJw+hEPH4adD0GXa+tBTKR1bDe5JP/XS8ILtE0y/OmVrNQ4ZX8OHlWvAYGnsJVV30sT7zc5IgrD7RzPLSkhiX0+DL0wq+89VI4TiLzJVzbnM5qMKfqmsdaDcvqrVnEAZVZ1aj+PiLkghAAmhbJGysGeBcv5mRRxo7aWJ28jUmz6YGWNXt8OEgtczqrEUThVyU0TYRcEKYMhR3y/BAvx0kVtR5QwxLcDWcIgon0QBOmeSRse7juJlv5z5scTzedTFQrGqr7eRvyrIIgVKRQyGuJQZeHx2PuWZRHOnmzeGx7FJHIQgAqZJFIvFoyXFNr3F01Rptd/cAmo+udDfliFSEXhAAoFHI/xAugIg9U00zoesyXCUXVuPXWbxf1GM8OkMiujzldUKDE4x0DDcO/jCPHScGyplc/sMlY1hENeV4JrQhCIBQPH/BCtlK00CMHsnHy4gEbflOttQCzjUTizfEZpqrvTSd0XdmsaRYMo8uXzVlg8sXHAbXh2Yg6B/HIBSEA/B5qoTzdcMnnNc3pGBt71dfzlaJa/rfKIukFkYlkch+IgGj0hLznsKzZGB19qeQXkltU21qrqMJ3KiMeuSAEQLZbo18wJ8qGJpo10g6o3FpAbcZ2Ih5fDsuambmdnx5omtM8x5BtezTzhTF59wb8RoRcEAJBh19Vl0A2h7z0sAxNi+D22x/AwMC2vPsb0Rq3Ugolcwqa1gFNMxCLLUE83lcU/lCT7HVPYu44iaqzOacaIuSCEAClBvR6gdmGYZT2vIkIp5xyCi677G8a2hq3Wgplro1EGkKhWUVesxqX5jWmr0b9tRMi5IIQAGrTy5vnWUiluPJ733sW7r77b0tOAvILN/nfbkrU1ZzV+jY8VTsC3bf+Kq2CbHYKQkCoBkoO/PGninPIczGMON7znsWe+5dUwk0KpZvZlboeq3skmuOMwDBm+L6ZPNlpr9UKwiRCze/0PsNRefVaRW9X08LYsuUZz/1LvOLGI/fiTTvOGCyrveLjgAi5IASGppm+hFaYkzCMeMUsjYGBbVi37ku+9C+pz0YnM4C4ehtXTYtUDTuVm2v69a9vamqWzmRBhFwQAmIitOINNW6sclXk9u07cffdX0B//zIA9fUv8YLKWHHnaRMRDKMbjpMoe0y54qNlyxa2Vf54Fio3GbqmJyG6HsDXAPQy875qx/f19fHgYPMv6wRhMjE8/AJSqb0wDG8ZFqnUPkSjJyIcrjxU+uDBJzNpiu6Ezk3JfRbHSYE5Ubaa0raHYRjdiMWWuDr3yMgujI29CtOcVvaYrHhni482bPgXrFy5ANOmrZmyMXIi2s7MRZsbnldLREcDWAPgNa/PJQjthOqdXnuMnJkz038mbrvxdlXDpvJebiHVSu7VudNIJvfBtg+DyEIy+VbJuL8aWuw+5GEYnVUHFRcWH/X3L4GmRaesiFfCjxXfAuDz8LO6QRDaAquuGLltDwFwMqKp/t5NSbvqY+J+intuyX2plEXbHkEqtR+RyPHo7l6Fzs7TEYmcgFRqX9HQZzW9yL2Qu/liKiw+Ghh4IjNGr/3wJOREdB6AN5j5GRfHXklEg0Q0uHfvXi+nFYQpgUrFq0fIk4jH+xAOH4dkcg9U6mH1zob19C+pVHJv28OIx/sQjR4DTTNBpCEaPQadne+CbR8qei43qYdZdD2aGVNX2j8sVXz0qU/9Ax5/vDkx/8lGVSEnokeI6PkSP2sB3ADg79yciJnXM3MfM/f19vZ6tVsQWh5NM8oKVTnS6UOwrF4YRic6OhYiHl8G0+xxmQ1Su5CXK7lXnQs7YJrFrWJNc1qmdW4y734i92101SDmeNlQUKnio7vu+mvs2PFL1+eYSlQtCGLm1aXuJ6J3AlgA4JlM2tMcADuI6DRm/r2vVgrClKT2C2LbHs3bMAyFZiMUcjdAQQk5jbe8rUau15st7MneXrFiLmKxZWWfxzSPQDK5e9wLVy12axs8bBg9SCbfKPkFVKr4qL9/Cc49t7+mc0wV6g6tMPNzzDyTmecz83wAuwEsFxEXBHcQ6TV16LPtURhGZ91xYDX8NwbmZPWDUb7kfvv256BpIVhW+Str05w+7pEzM5iz6ZbuUSmI7mP6QH1XHVMBKdEXhIBQRS/5oRXHScBxRkuKtW0fQiy23FN7VsPoQiq111VMvVzJ/YoV8xCJHF+x8VduSiVzKhPzrs1uVeHpLvSk0io7fG9G1ir4lqeT8cyr5pALgpClWHRs+zAAGp+ik3u/poU9l5+rYczuPPJSqAEWGixrVsXjNC00HifPtq+tFZW54k78VXWrf6PiWo32S7gUhElCKe+R2UYkchx0PYZUaj+YGcnkPjAz4vFTPHucuh6teYM1l1TqAMLhY1xtrprmTDjOCJhTZVvsVkLTDOh6R9GmaSkcJ9G2qYeACLkgBEY5Uda0KOLxU6BpESSTbyIcPhpdXSt98Ti9xJBtexSaFkY4PN/V8dk4uRq9Vt/8TMPocdWbnNmpy+ufKkiMXBACoryQm9A0C52dfbDtwzDNnpLH1UOhkDtOEkRm1fi1qiYdQlfXykxFanWycXJVeeo+9TAXy5qBROJ1V8e260YnIEIuCAGioVQMOJvdoWmhugWwHKoDYQSJxFuZ4RbqXJV6mgBAKvU2IpEFVY/LJRsnT6f315x6OPEc7r1stz1kpiIi5IIQELlTgnL7g9Saplcr0ejxYAZMsxuOk8TBg7+oeLzjjEHTTEQix9d8LtOciXR6v6s+5KVQmSha0f8o377UeOvbdkWEXBACJHdKkNqEJBA19mOZW0CkaeHMgIt0yfMyO0ilDqCra4WrDc5CTHM6EomOuj1y1dJ2BhxnuGyvFuZEW2esALLZKQiBooZLZLsF2tA0y1OeeK2oIchHwbaHSz6eSu1FNLqwZCm+GwyjE5bV66kjoWVVHsasMlbch3ymIiLkghAgyhtWjbNUdkfz47yWNatkil86PQTDmI5I5Ni6n1vTLMRiJ3sxL9N+t3xzMWYbhtHl6Rytjgi5IASICq0oj1y1em2+kBtG13h4JYvjJMBsIxY7OfD+3mpYBZXMf2e2QaRLaCVoAwShnZkMHnlheIU5jVRqP2KxpZMiE0QVBpXuhGjbh2FZs9t6oxMQIReEQFEbiMEKOTARXmG2kUrtQyy2tGJTrGZjWTNxyy0bigYuDwxsw2233ReQVZMHEXJBCBAiK8cjr79wxisqvGIgmdyDaPQkhMNHBWJHOQxjGpYuPTZv9NzAwFNYt+7LOP309wRsXfBI+qEgBEjhlKBGpx6WQ4VX5oLIQCQyPxAbKqHrMfT3Lx0fPacGLt+HDRu+grPOWhO0eYEjHrkgBEhhK9tGFwNVIhpdiGi0/gyVRqLrYWhaCP39S8dHz1122dlYs2Zt0KZNCkTIBSFQ8jfpghTyZuav14NpHoFHH310fPTchg0/xNatVccFtwUSWhGEACnMtqinerJd2LbtDaxb9zXcddfnsWrVqejvX4aLLroEmzZtwplnnhm0eYEiHrkgBEhWyFUvEb3t0+gqsX3707jvvvtxzjlXgkjD6tXnYdOmTXjqqaeCNi1wyEuT+Xrp6+vjwcHB6gcKwhQnnR7G0NDWzOSeNLq723N4cK04jppUFHSxUrMhou3M3Fd4v4RWBCFAJjzy4HLIWxG3PdHbhfb6OhOESYYKp5AIueAJ+VoThACZSD+0RciFuhGPXBACJDe0Mhn6mgitiQi5IARMtt9KkDnkQmsjQi4IgWNk2rFKpFOoD89CTkTXEtFLRPQCEX3VD6MEoZ1QU4IcKQYS6saTC0BEZwJYC+BkZk4ujYk+AAAFPklEQVQQ0Ux/zBKE9oHIymSviJAL9eHVI78awJc50/Gdmfd4N0kQ2gtNM0FkiJALdeNVyBcC6CeibUQ0QESnljuQiK4kokEiGty7d6/H0wrCVMKEpoUmfdMqYfJSNbRCRI8AmFXioRsyfz8NwAoApwLYRETHcIm6f2ZeD2A9oEr0vRgtCFMJTTMDGyghTA2qCjkzry73GBFdDeCBjHA/SUQOgBkAxOUWBJdomiXFQIInvIZWvg/gvQBARAsBWAD2eTVKENoJIhFywRteE1fvAXAPET0PIAng0lJhFUEQyqNpYRiGlHQI9eNJyJk5CeASn2wRhLbENKcFbYLQ4ogbIAiC0OKIkAuCILQ4IuSCIAgtjgi5IAhCiyNCLgiC0OKIkAuCILQ4IuSCIAgtjgi5IAhCi0NBFGIS0V4Av63zz2eg/doAyJrbA1lze+BlzfOYubfwzkCE3AtENMjMfUHb0Uxkze2BrLk9aMSaJbQiCILQ4oiQC4IgtDitKOTrgzYgAGTN7YGsuT3wfc0tFyMXBEEQ8mlFj1wQBEHIQYRcEAShxZm0Qk5E7yeil4hoFxH9VYnHQ0S0MfP4NiKa33wr/cXFmv+CiF4komeJ6KdENC8IO/2k2ppzjruAiJiIWjpVzc16iejCzOv8AhHd22wb/cbF+3ouEf2MiJ7OvLfPDsJOPyGie4hoT2Z6WqnHiYhuy/xPniWi5Z5OyMyT7geADuBlAMdAzQF9BsCigmM+A+COzO8XAdgYtN1NWPOZAKKZ369uhzVnjosD2AzgCQB9Qdvd4Nf4eABPA5iWuT0zaLubsOb1AK7O/L4IwKtB2+3DulcBWA7g+TKPnw3gRwAIwAoA27ycb7J65KcB2MXMr7AaJ/c9AGsLjlkL4NuZ3/8LwFlERE200W+qrpmZf8bMI5mbTwCY02Qb/cbN6wwA/wTgqwDGmmlcA3Cz3k8D+AYz7wcAZt7TZBv9xs2aGUBn5vcuAL9ron0NgZk3A3i7wiFrAfw7K54A0E1ER9Z7vskq5EcBeD3n9u7MfSWPYeY0gCEA05tiXWNws+ZcroD6Rm9lqq6ZiJYBOJqZf9BMwxqEm9d4IYCFRPQ4ET1BRO9vmnWNwc2a/x7AJUS0G8DDAK5tjmmBUuvnvSKehi83kFKedWGepJtjWgnX6yGiSwD0ATijoRY1noprJiINwC0ALmuWQQ3GzWtsQIVX/gjqimsLES1m5gMNtq1RuFnzxwBsYOabiOhdAP4js2an8eYFhq/6NVk98t0Ajs65PQfFl1vjxxCRAXVJVulSZrLjZs0gotUAbgBwHjMnmmRbo6i25jiAxQAeI6JXoWKJD7Xwhqfb9/WDzJxi5t8AeAlK2FsVN2u+AsAmAGDmXwAIQzWWmsq4+ry7ZbIK+VMAjieiBURkQW1mPlRwzEMALs38fgGARzmzi9CiVF1zJsxwJ5SIt3rsFKiyZmYeYuYZzDyfmedD7Qucx8yDwZjrGTfv6+9DbWqDiGZAhVpeaaqV/uJmza8BOAsAiOhEKCHf21Qrm89DAD6ZyV5ZAWCImd+s+9mC3t2tsOt7NoBfQe1435C57x+hPsiAerHvA7ALwJMAjgna5ias+REAbwHYmfl5KGibG73mgmMfQwtnrbh8jQnAzQBeBPAcgIuCtrkJa14E4HGojJadAN4XtM0+rPk/AbwJIAXlfV8B4CoAV+W8zt/I/E+e8/q+lhJ9QRCEFmeyhlYEQRAEl4iQC4IgtDgi5IIgCC2OCLkgCEKLI0IuCILQ4oiQC4IgtDgi5IIgCC3O/wNu60SpMuXq1wAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x_new = torch.linspace(0, 1, 100)\n",
"with torch.no_grad():\n",
" loc, var = hgp(x_new)\n",
" plt.plot(x, y, \"kx\")\n",
" plt.plot(x_new, loc, \"-\")\n",
" plt.fill_between(x_new, loc - 2 * var.sqrt(), loc + 2 * var.sqrt(), color=\"y\", alpha=0.2)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pyro.clear_param_store()\n",
"hgp = HGP(x, y, use_mean_function=True)\n",
"losses = gp.util.train(hgp)\n",
"plt.plot(losses);"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Parameter containing:\n",
"tensor(-5.5921, requires_grad=True)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hgp.gp_var.mean_function.a"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Parameter containing:\n",
"tensor([-0.7010, -0.7950, -0.8811, -0.9575, -1.0269, -1.0911, -1.1507, -1.2047,\n",
" -1.2558, -1.3005, -1.3402, -1.3651, -1.3770, -1.3746, -1.3575, -1.3246,\n",
" -1.2821, -1.2331, -1.1828, -1.1438, -1.1182, -1.1085, -1.1174, -1.1402,\n",
" -1.1745, -1.2183, -1.2584, -1.3011, -1.3403, -1.3785, -1.4219, -1.4667,\n",
" -1.5146, -1.5640, -1.6079, -1.6415, -1.6509, -1.6391, -1.5991, -1.5375,\n",
" -1.4527, -1.3559, -1.2589, -1.1694, -1.0977, -1.0516, -1.0336, -1.0419,\n",
" -1.0713, -1.1130, -1.1563, -1.1907, -1.2051, -1.1981, -1.1641, -1.1098,\n",
" -1.0422, -0.9685, -0.8979, -0.8377, -0.7915, -0.7610, -0.7455, -0.7430,\n",
" -0.7493, -0.7636, -0.7832, -0.8018, -0.8331, -0.8684, -0.9029, -0.9415,\n",
" -0.9777, -1.0050, -1.0228, -1.0272, -1.0178, -0.9979, -0.9728, -0.9445,\n",
" -0.9211, -0.9038, -0.8958, -0.9003, -0.9173, -0.9457, -0.9829, -1.0182,\n",
" -1.0551, -1.0855, -1.1044, -1.1146, -1.1130, -1.0991, -1.0719, -1.0297,\n",
" -0.9711, -0.9002, -0.8119, -0.7147], requires_grad=True)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hgp.gp_var.f_loc"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x_new = torch.linspace(0, 1, 100)\n",
"with torch.no_grad():\n",
" loc, var = hgp(x_new)\n",
" plt.plot(x, y, \"kx\")\n",
" plt.plot(x_new, loc, \"-\")\n",
" plt.fill_between(x_new, loc - 2 * var.sqrt(), loc + 2 * var.sqrt(), color=\"y\", alpha=0.2)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.9"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment