Skip to content

Instantly share code, notes, and snippets.

@izmailovpavel
Created December 1, 2020 02:38
Show Gist options
  • Save izmailovpavel/4169c565db1d6f14ad5669926ddef15a to your computer and use it in GitHub Desktop.
Save izmailovpavel/4169c565db1d6f14ad5669926ddef15a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Stochastic Gradient MCMC"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import argparse\n",
"import os, sys\n",
"import time\n",
"import tabulate\n",
"import tqdm\n",
"\n",
"import torch\n",
"import torch.nn.functional as F\n",
"import torchvision\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"\n",
"from swag import data, models, utils, losses\n",
"from swag.posteriors import SWAG\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"HMC visualizations: \n",
"- https://arogozhnikov.github.io/2016/12/19/markov_chain_monte_carlo.html\n",
"- https://chi-feng.github.io/mcmc-demo/app.html\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Gaussian example"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [],
"source": [
"class NomalDist:\n",
" def __init__(self, mu, sigma):\n",
" self.d = mu.size\n",
" sigma_cho = np.linalg.cholesky(sigma)\n",
" self.mu = torch.from_numpy(mu).float()\n",
" self.sigma = torch.from_numpy(sigma).float()\n",
" self.sigma_inv = torch.inverse(self.sigma)\n",
" self.sigma_cho = torch.from_numpy(sigma_cho).float()\n",
" \n",
" def loss(self, x):\n",
" return (x - self.mu[:, None]).T @ (self.sigma_inv @ (x - self.mu[:, None]))\n",
" \n",
" def sample(self, n_samples):\n",
" z = torch.randn((n_samples, self.d)).float()\n",
" samples = (self.sigma_cho @ z.T).T\n",
" samples += self.mu[None, :] \n",
" return samples.data.numpy()"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a565ef40>]"
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 7))\n",
"\n",
"mu = np.zeros([2], dtype=float)\n",
"sigma = np.array([[10, 9.], [9., 10]])\n",
"dist = NomalDist(mu, sigma)\n",
"\n",
"original_samples = dist.sample(1000)\n",
"plt.plot(original_samples[:, 0], original_samples[:, 1], 'ro')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SGLD\n",
"\n",
"Paper: https://www.ics.uci.edu/~welling/publications/papers/stoclangevin_v6.pdf\n",
"\n",
"$$\\theta_t \\leftarrow \\theta_t - \\frac \\epsilon 2 \\cdot \\nabla_{\\theta} \\log p(\\theta_t \\vert D) + \\eta_t,$$\n",
"$$\\eta_t \\sim \\mathcal N(0, \\epsilon).$$\n",
"\n",
"$$\\nabla_x a^T x = a$$\n",
"\n",
"if $\\epsilon \\rightarrow 0$ then we end up with exact samples."
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [],
"source": [
"class SGLD:\n",
" \n",
" def __init__(self, params, eta, log_density):\n",
" \"\"\"\n",
" Stochastic Gradient Monte Carlo sampler.\n",
" \n",
" Args:\n",
" eta: learning rate parameter\n",
" log_density: function computing log_density for a given sample\n",
" and batch of data\n",
" \"\"\"\n",
" self.eta = eta\n",
" self.log_density = log_density\n",
" self.optimizer = torch.optim.SGD(params, lr=1, momentum=0.)\n",
" \n",
" def _noise(self, params):\n",
" std = np.sqrt(2 * self.eta)\n",
" loss = 0.\n",
" for p in params:\n",
" n = torch.randn_like(p) * std\n",
" loss += (n * p).sum()\n",
" return loss\n",
" \n",
" def sample(self, params):\n",
" self.optimizer.zero_grad()\n",
" loss = self.log_density(params) * self.eta\n",
" loss += self._noise(params)\n",
" loss.backward()\n",
" self.optimizer.step()\n",
" return params"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [],
"source": [
"x = torch.tensor(np.array([[-10.], [0.]]), requires_grad=True, dtype=torch.float32)\n",
"\n",
"sgld = SGLD([x], eta=1e-1, log_density=dist.loss)"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 10000/10000 [00:04<00:00, 2422.42it/s]\n"
]
}
],
"source": [
"samples = []\n",
"\n",
"for epoch in tqdm.tqdm(range(10000)):\n",
" x = sgld.sample(x)\n",
" samples.append(x.data.numpy().copy().T)\n",
" \n",
"samples = np.vstack(samples)"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a538a280>]"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"plt.plot(original_samples[:, 0], original_samples[:, 1], 'ro')\n",
"plt.plot(samples[:, 0], samples[:, 1], \"bo\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SGHMC\n",
"\n",
"Paper: https://arxiv.org/abs/1402.4102\n",
"\n",
"Similar, but also adds momentum"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [],
"source": [
"class SGHMC:\n",
" \n",
" def __init__(self, params, alpha, eta, log_density):\n",
" \"\"\"\n",
" Stochastic Gradient Monte Carlo sampler.\n",
" \n",
" Args:\n",
" alpha: momentum parameter\n",
" eta: learning rate parameter\n",
" log_density: function computing log_density for a given sample\n",
" and batch of data\n",
" \"\"\"\n",
" self.alpha = alpha\n",
" self.eta = eta\n",
" self.log_density = log_density\n",
" self.optimizer = torch.optim.SGD(params, lr=1, momentum=(1 - self.alpha))\n",
" \n",
" def _noise(self, params):\n",
" std = np.sqrt(2 * self.alpha * self.eta)\n",
" loss = 0.\n",
" for p in params:\n",
" n = torch.randn_like(p) * std\n",
" loss += (n * p).sum()\n",
" return loss\n",
" \n",
" def sample(self, params):\n",
" self.optimizer.zero_grad()\n",
" loss = self.log_density(params) * self.eta\n",
" loss += self._noise(params)\n",
" loss.backward()\n",
" self.optimizer.step()\n",
" return params"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [],
"source": [
"x = torch.tensor(np.array([[-10.], [0.]]), requires_grad=True, dtype=torch.float32)\n",
"\n",
"sghmc = SGHMC([x], alpha=0.01, eta=1e-4, log_density=dist.loss)"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 10000/10000 [00:03<00:00, 2517.57it/s]\n"
]
}
],
"source": [
"samples = []\n",
"\n",
"for epoch in tqdm.tqdm(range(10000)):\n",
" x = sghmc.sample(x)\n",
" samples.append(x.data.numpy().copy().T)\n",
" \n",
"samples = np.vstack(samples)"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a5563df0>]"
]
},
"execution_count": 172,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"plt.plot(original_samples[:, 0], original_samples[:, 1], 'ro')\n",
"plt.plot(samples[:, 0], samples[:, 1], \"bo\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Small Neural Net"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [],
"source": [
"def RegNet(dimensions, input_dim=1, output_dim=1):\n",
" dimensions = [input_dim, *dimensions, output_dim] \n",
" modules = []\n",
" for i in range(len(dimensions) - 1):\n",
" modules.append(torch.nn.Linear(dimensions[i], dimensions[i + 1]))\n",
" if i < len(dimensions) - 2:\n",
" modules.append(torch.nn.ReLU())\n",
" return torch.nn.Sequential(*modules)\n"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [],
"source": [
"net = RegNet(dimensions=[10, 10, 10], input_dim=2)"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a54b8fa0>]"
]
},
"execution_count": 177,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"for p in net.parameters():\n",
" p.data.normal_(std=0.1)\n",
"\n",
"def featurize(x):\n",
" return torch.cat([x[:, None], x[:, None]**2], dim=1)\n",
" \n",
"x = torch.cat([torch.linspace(-10, -6, 40), torch.linspace(6, 10, 40), torch.linspace(14, 18, 40)])\n",
"\n",
"f = featurize(x)\n",
"x_ = torch.linspace(-14, 22, 100)\n",
"f_ = featurize(x_)\n",
"\n",
"y = net(f)\n",
"y_ = net(f_)\n",
"\n",
"y += torch.randn_like(y) * .01\n",
"plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
"plt.plot(x_.data.numpy(), y_.data.numpy(), \"-b\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# np.savez(\"data\", \n",
"# x=x.data.numpy(), \n",
"# y=y.data.numpy(), \n",
"# x_=x_.data.numpy(), \n",
"# y_=y_.data.numpy())"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a56d7580>]"
]
},
"execution_count": 178,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"arr = np.load(\"data.npz\") \n",
"x = torch.from_numpy(arr['x'])\n",
"f = featurize(x)\n",
"y = torch.from_numpy(arr['y']) * 10\n",
"\n",
"x_ = torch.from_numpy(arr['x_'])\n",
"f_ = featurize(x_)\n",
"y_ = torch.from_numpy(arr['y_']) * 10\n",
"\n",
"plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
"plt.plot(x_.data.numpy(), y_.data.numpy(), \"-b\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Deep Ensembles"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {},
"outputs": [],
"source": [
"noise_var = 0.005\n",
"prior_var = .001\n",
"\n",
"num_steps = 3000\n",
"n_chains = 10"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 10/10 [00:20<00:00, 2.01s/it]\n"
]
}
],
"source": [
"all_preds = []\n",
"\n",
"for chain in tqdm.tqdm(range(n_chains)):\n",
" net = RegNet(dimensions=[10, 10, 10], input_dim=2)\n",
"\n",
" optimizer = torch.optim.SGD(net.parameters(), lr=5e-6, weight_decay=0.)#2/prior_var)\n",
" for epoch in range(num_steps):\n",
" optimizer.zero_grad()\n",
" preds = net(f)\n",
" loss = criterion(preds, y) / (2 * noise_var)\n",
"\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" test_preds = net(f_).detach().numpy()[None, :, 0]\n",
" all_preds.append(test_preds.copy())\n",
"\n",
"all_preds = np.vstack(all_preds)"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a516ba60>]"
]
},
"execution_count": 185,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"\n",
"pred_mean = all_preds.mean(axis=0)\n",
"pred_std = all_preds.std(axis=0)\n",
"pred_upper = pred_mean + pred_std\n",
"pred_lower = pred_mean - pred_std\n",
"\n",
"# plt.plot(x_ , all_preds[0, :, 0], '--k');\n",
"\n",
"plt.figure(figsize=(10,7))\n",
"plt.plot(x_ , all_preds.T, '-b',alpha=1.);\n",
"plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
"# # plt.plot(x_.data.numpy(), y_.data.numpy(), \"--b\")\n",
"# plt.plot(x_.data.numpy(), pred_mean, \"-b\", lw=5)\n",
"# plt.fill_between(x_.data.numpy(), pred_lower, pred_upper, color=\"b\", alpha=0.1)\n",
"# plt.plot(x_.data.numpy(), pred_lower, \"-b\", lw=1)\n",
"# plt.plot(x_.data.numpy(), pred_upper, \"-b\", lw=1)\n",
"# # plt.ylim(-1., 3.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SGLD"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [],
"source": [
"noise_var = 0.005\n",
"prior_var = .001\n",
"\n",
"num_steps = 20000\n",
"n_chains = 5\n",
"\n",
"lr = 1e-6"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 5/5 [02:11<00:00, 26.23s/it]\n"
]
}
],
"source": [
"all_chain_preds = []\n",
"\n",
"for chain in tqdm.tqdm(range(n_chains)):\n",
" net = RegNet(dimensions=[10, 10, 10], input_dim=2)\n",
" chain_preds = []\n",
"\n",
" optimizer = torch.optim.SGD(net.parameters(), lr=lr, weight_decay=0.)#2/prior_var)\n",
" for epoch in range(num_steps):\n",
" optimizer.zero_grad()\n",
" preds = net(f)\n",
" loss = criterion(preds, y) / (2 * noise_var)\n",
" \n",
" std = np.sqrt(2 * lr)\n",
" for p in net.parameters():\n",
" n = torch.randn_like(p) * std\n",
" loss += (n * p).sum()\n",
"\n",
" loss.backward()\n",
" optimizer.step()\n",
" \n",
" if epoch > 3000 and epoch % 100 == 0:\n",
" test_preds = net(f_).detach().numpy()[None, :, 0]\n",
" chain_preds.append(test_preds.copy())\n",
" chain_preds = np.vstack(chain_preds)\n",
" all_chain_preds.append(chain_preds[None, :])\n",
"all_chain_preds = np.vstack(all_chain_preds)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1 chain:"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a580ff10>]"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"all_preds = all_chain_preds[0]\n",
"\n",
"pred_mean = all_preds.mean(axis=0)\n",
"pred_std = all_preds.std(axis=0)\n",
"pred_upper = pred_mean + pred_std\n",
"pred_lower = pred_mean - pred_std\n",
"\n",
"# plt.plot(x_ , all_preds[0, :, 0], '--k');\n",
"\n",
"plt.figure(figsize=(10,7))\n",
"plt.plot(x_ , all_preds.T[:, ::100], '-b',alpha=0.1);\n",
"plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
"# plt.plot(x_.data.numpy(), y_.data.numpy(), \"--b\")\n",
"plt.plot(x_.data.numpy(), pred_mean, \"-b\", lw=5)\n",
"plt.fill_between(x_.data.numpy(), pred_lower, pred_upper, color=\"b\", alpha=0.1)\n",
"plt.plot(x_.data.numpy(), pred_lower, \"-b\", lw=1)\n",
"plt.plot(x_.data.numpy(), pred_upper, \"-b\", lw=1)\n",
"# plt.ylim(-1., 3.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"5 chains:"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f02a58756a0>]"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlsAAAGbCAYAAADzxVVYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd5gb5dXFz6juart33e21sammOraB+INAMCXU0AwB04tDChAnoQSTkILBgYQOAdNiYCEh1FAMAWIgNBvTMQYMxhXX7bvqmvn+OL6ekXbUpa3v73nmkVYrzYxG0jtn7r3vuZphGFAoFAqFQqFQFAdHT++AQqFQKBQKRX9GiS2FQqFQKBSKIqLElkKhUCgUCkURUWJLoVAoFAqFoogosaVQKBQKhUJRRFw9vQOpqKurM8aOHdvTu6FQKBQKhUKRlvfee2+LYRiDEx/v1WJr7NixWLJkSU/vhkKhUCgUCkVaNE1bZfe4SiMqFAqFQqFQFBElthQKhUKhUCiKiBJbCoVCoVAoFEVEiS2FQqFQKBSKIqLElkKhUCgUCkURUWJLoVAoFAqFoogosaVQKBQKhUJRRJTYUigUCoVCoSgiSmwpFAqFQqFQFBElthQKhUKhUCiKiBJbCoVCoVAoFEVEiS2FQqFQKBSKIqLElkKhUCgUCkURUWJLoVAoFAqFooi4enoHFApFzxOLAYbB+5pmPu509sz+KBQKRX9CiS2FYgATiwFtbUAgYP9/pxMoLeXidnfvvikUCkV/QYkthWIAYhhARwcXACgvN8WURLgMAwiFgM5OPk+EV1mZingpFApFNiixpVAMMAIBRrNiMYqnysrk4qmsDNB1IBjk6zo6eFtbC7jU6KFQKBQZoYZLhWIA0drKSJXbDdTUAB5P+tc4HIDPB5SUAI2NwJYtFF3DhvExFeVSKBSK1CixpVAMEFpaAL+f0aqqquxe6/czGmYYQEWFKbgGDaJwKy/nolAoFIquKLGlUPRzDINCKxCgUKqoyPy10SijYaEQo2DV1Uwf1tUBGzfy/x4PhVhJiUotKhQKhR1qaFQo+jGGATQ1USxVVmYXferspIgCGAkrKzP/V1ICDB/OtKKumwX31dWF3X+FQqHoDyhTU4Win2IYFEOhEEVQNkIrEGBEy+sFhgyJF1qCx8M0ojxfiu4VCoVCEY8SWwpFP0QiWuEwC+F9vsxfG40y7ShiKlUBvNfLmYmlpdzepk3577tCoVD0N1QaUaHoh0idVXU1hVCmGAbQ3EwX+ZqazF7j8XBmYigEbNhAAVZTE+9Er1AoFAMZFdlSKPoZ7e2cPVhRkV1EC6BIi0QolrKxdHA6gfp6bm/TJqYvVUpRoVAoiIpsKRT9CL+fYsvny27WIcC6K7+ftV1eb/bbdrmAoUOZTgwGOVvR4eDjTqd5KxEvTYtfHA4uKiKmUCj6G0psKRT9hFCItVZeb/Y+WtY6rcrK3PehooKCzevlEo0ywhUOJ++/aIeILhFhiYLMKsycTt63CjmFQqHoTeQltjRNGwTgnwDGAlgJ4CTDMJoTnrMXgL8BqAQQAzDHMIx/5rNdhUIRTyTCiJI4w2cjOqSY3q5Oa/Nm4NNPuXzyCbB0KTBiBHDyycARR3RNUzqdfCwQYL2YNRVpGKZNhPxtXXTdXKzPlSUW67qORESEWSNp1vsOVTihUCh6AM1INmpl8mJNuw5Ak2EYczVNuxxAjWEYlyU8Z0cAhmEYyzVNGwHgPQC7GIbRkm79kydPNpYsWZLz/ikUAwFdpygCaDaabfscv59RrUGD6J8FAIsWAeedB6xdC+y0E7D99lzGjQNWrQJefJHi65BDKLyOPtp8bTTKuq3y8vgomYgla5QqVxLFWSxm3loXXY9/nQgvWdxu3ioRplAoCoGmae8ZhjG5y+N5iq0vABxoGMZ6TdOGA3jVMIyd0rzmIwAnGoaxPN36ldhSKFJjGGydE41SaLnd2a9j0yaKn8GDWWt11VXA3/8OXHklxZQIEpfLjJjpOrB+PfDCC8Czz/LvhQtNL69161hsX1dnRqXsENHldjOF6fHwfqHSgVYBFo2aSyQSHx1zOrldWTweJcAUCkX2FEtstRiGUW35u9kwjKQTxjVN2xvAfAC7GoahJ3nOTAAzAaC+vn7SqlWrct4/haK/I8Xo1qhUNgQCtHqoqWGk6qyzgPHjgcsvB0aNyky8xWLArFmMrj39NOuzOjq41NUxrSjpPE2LTwVKZCocjhdk1rRfuiWdMEuMeEkdWShE0WV9XNdN8ef1ct+9XlMEKhQKRSpyFluapr0MYJjNv2YDmJ+p2JLIF4AzDcN4J5OdVpEthSI5bW0UNNm24bGyeTMFxh13AHfeCcyeDfzgB3SMzya65PcD559PkTR/PsVbSwvFSqbF+iK6IhEuIpJElKXCKrwcDjOaZlffpWnxYs5aGxaLUbyGw+a+yIzKkhIel7IyCjAlvhQKRSLJxFbaAnnDMA5OsdKNmqYNt6QRbf2jNU2rBPAcgCszFVoKhSI5fj+FVllZ7kJLIjv33gs88QTw+OPA6NGmiNB1s74q1Tr8ft7OnQtcfDFw6aXAgw9SkASDmYsth4OCxi5CZ1dEn1hMb100jdEoiahZi+YzSQ/GYqboCwZ5rOU2FuMxKikxG3t7vdnXyikUioFDvtYP/wZwJoC5W2+fTnyCpmkeAE8CeMAwjH/luT2FYsATCNA0NJuokR0dHcBzzwF33QU0NABjx1KkBAJcwmFTtJSUmOLFMExPrmiU4qW8nMLvgQeA6dOBCy8E/vxnCpRIJP8oUCGK6rNBRJoIqsGD4y0sxDh2wwbWrrndfP/SsNvj6Z79VCgUfYN8xdZcAI9qmnYugNUApgOApmmTAVxgGMZ5AE4C8D0AtZqmnbX1dWcZhvFhnttWKAYUUgy/fr3pL9XYaBZ0u92ZR1fCYeDNN4Hf/IaRrdGjgc5OCgld53rKy3k/FGKxO8BtSHrO7aa4KCkxo1/l5cBDDwEnnMAG1uedx9f3h5Sb08nWR6WlrJGTY9PRQfHV0cH6N7G/qKoyo17K/0uhGNjkVSBfbFTNlkJBQiFgzRrWaVVUsBehNdUlOJ2m8Eo1s+/991mb9dvfAlOnms+xFoVbiUa5D6EQo0s+X+rozdq1wOGHM9K1zz4slO/vRKOM5LW08HOSyKBEx6qqeNyU8FIo+i8512wpFIqewzAYvfr2W94fNYopLesJ2zBM0SWF3Va3dmvNkkTDTjgBOPVUYNIkCiuplUqWphPrh7KyzPZ71Cjgd78DLrqI9hCDBvV/KwWXi5E9iQgGAhRdbW2019iwgeK3ooKTGioq+kfET6FQpEdFthSKXkosBqxezdRUeTkbPWdq72CNelkNPltbKbLq6znzMBcT1EwxDOCccxiF+9vfsm+K3V8QMdzezqWtjVEwTTPTjZWVTE+qqJdC0bdRkS2Fog8RiQBff83oyPDhFCzZnIitBd7CqlXAcccBO+wAXHIJm0YXE00D/vIX4PvfZyH+9OnF3V5vRSYZ1NZyMQwW17e2UnitX8/IpdfLaFdNDSOI/T0SqFAMJJTYUih6GX4/sGIFox9jx3btV5gLb70FnHgicMopFFwjRuS/zkyorQX+8AdaQhx8cGHeS19H00y/rhEjmPYV4dXczEkQLhejXVVVXJTwUij6NkpsKRS9BMPgyXbtWp5cd9yxMKm3Bx8EfvUrtt+ZPJmRsu70hDriCNZt/eQnwD/+0X3b7St4PKzDGzyYArujwyyyb2rid6GykkJVCS+Fom+ifrYKRS8gHAY2buSMw5ISpvryFVq6DlxxBQvV77iDswIHD+4607DYeDw0On39deDRR7t3230NlwuormZEc7fd+D0YNIgC7Jtv2FLpm28oxtK56meFGK05HLxtaCjgyhUKhYpsKRQ9iK6bM9ba2hi5GDEif1PMcJh9DlesAO6/30xbJc4m1HWmLf1+07tL2tOIjUS+UTBNo2D44x8Z3Ro0iClFRWocDtOhfvRoFtc3NzPlKH5e1dVM1WbbXimOhgZg5kx+CQAW982cyfszZhTkvSgUAx01G1Gh6CE6O00/pnCYMw7r6vK3A2hro7WDx0OBI+Jp0CDzhCwiq7OT6Uuvl8+zNmwG+PzSUp7M8xFdgQBFwscfM6V5++3Aj36U3/scyLS2MsXY2srP0utlmjGnhuRjx1JgJTJmDLByZQH2VqEYOKjZiApFLyESYRpIzEilJqe2lqIoHzZsoJnoHntwxqH0CqyqonAyDKak/H7el+bKiQJPmjJ3dvK5gUB+oktSl1On0uj0nHOYNr344vze70BFCudjMUa5mpp4PDdupGivreV3KqPv0+rV2T2uUCiyRokthaKbMAyzrYvYMoRCvB00KP903Zdf0hX+hBPYJkd6+dXU8KQrBfjhMLdZXp78ZKxp/F9VFZ8nAi0QYFor23oyh4ORtlAImDiRTa9nzKDtwbXXKn+pXHE6GQ2tq+OxbWriZ7xyJY93ZSW/Wz5fisL6+nr7yFZ9fTF3XaEYUKgCeYWiGwiHgc2bKVp8Pi7BICNKtbX5C6233gIOOAD48Y+BCy7giTUYNHvz6boptKqqWOuTaRTN6eRrBg/mCbytjSf2bPF6TZPVceOAJ58EnnmG6cS33zZTl4rc8Ho503TnnYHtt2cUsrWVfm1ff83OAbaf25w5XdWzz8fHFQpFQVBiS6EoIobBE96WLbxfW0vB0t7O6FJtbf5T+e+7Dzj2WJ4bTzyRUSJZf1mZKbQiEYqs0tLctiMF2W4331M0mt3rpZZIWgkNG8YIV3U1cPbZbFz9ox+xkfWWLbnto8JMS2+3He1Dhg6lkF27lhMm1q3j92ObuJ0xA5g3jzVamsbbefNUcbxCUUBUgbxCUSQiEYqcaJSip7KS0abmZkYhrAXruRCNstj8+eeBW24BdtmFJ9rGRrMgXoRWLEZRUwjbh1iM23A4KBazeQ9NTXz94MHxj0cizGS9+iotIhYtYjRt552BCRNog7DLLozYZOumr+B3RWYzyqTD8nJ+J32+HIrqFQqFLckK5JXYUiiKQEcH020SDfJ6zZoaSR3mIxiamoCTT6ZwueYaYORIrq+piQKrttZ8nq6zbitfOwkroRBP3CUlfH+ZEgxyckB1dfITvDRxXrOG6a+vvmJEZsUK1mz7/Qy+jBsHjB8P7L47sNdeFGRKNKRG181ZsJ2dFLky8cHnU22CFIp8UWJLoegGZHZYOMyTmDh+h8NmxCnf1OEXXwBHHkmvqgsvpHARoRWJUFi53fw7GmWEK187CTs6Oxktqajo6t+VDMNg7ZrbnV3rHsPge4lGmcJcu5bCa80aYPlyHpNvvqGLwV57MRq2/fYUY+PH8xgoTKQ/Y3s7b8NhfiYS5SorK6w4VygGCsr6QaEoMoEAozYAhYTURkUiFD5OZ/5C6/33KbR+8QvOOpS65tZWs/hditilRqsYQgvgCTkS4Qnb5cosRSm+XZ2djLJkeiw0je/D7ebrhw1j6yGAwiES4Tq/+gpYtozC6+23KcZWruSxHz6cabPqah6nmhqmM8ePZ33TuHE0lO3OVkY9hbU/YyDASGwgEG/14Xbz/6WlKm2rUOSLElsKRZ4YhpmW8Xh4EpcTttQ3aVr+QuuNN4Djj2dj50MPNcVcWxtPjuXlfCwQ4AmzrKz4abWqKkabJDWYieASsRUIZB4RS4Wm8bh7PMCUKVwA05w1GmXBvcwGbW/nMWtv52fz9NOMlK1dy6hkfT0jYxMmMEU5YQKw0079N0VZWsolGOQxCYd5X8x229pMYaZSjApFbiixpVDkQSxmpu/Ky5lSkyiAYfB/QP72Di++CJx+OnDddcD3vmee+CUNVFbG7UejPDl6PPy72EgrnqYmCq6qqvSixOXi/hVKbCXD6TRbDtXXJ7eN0nVTlPn9LNSXWrGHHuLt6tWMfu25J33CJk5kujKx0L8vU1LCRUSX2HRY/eFKS1P7sykUCnvUT0ahyBEp9gbs26SIS3y+zvCPPw789KfArbcCe+9tRo/a2xkh8vko8gyD29Q00zE+F3SdswJffZVRumnTGOFJtj6Hg++/udkUXOnsJUpLzdRnT9cGORxcJEVZWwt85zv8n67zM/T7zRTlZ5/RI2zZMh73SZP4uUyZwvu9uj6soQGYPZvqsb6efiEJFg8iusJ/b4Dzt7PhWLcasRH16LxiDvzHzYDfb5ri9vRnp1D0FVSBvEKRA21tvNJ3u+3d39vbuVRW5hdhmj8fuPxy4M47GUmR+quODjPSUFXFx1pbGS2qqcnN4iEQoLC7+24KCysjRtCd/rDDgH32sa8DszrUpxNchgFs2sSTtux/XyIa5ftcuRL49FPgk0+ApUu5DB3KY/Td7wL77svWSb1ClCQ2nAao1O08tWyeq5f60P7XeYhMn4FolEJUIqj9NcWqUGSLmo2oUBQA8a0KhUzvrMSITzDItFppaXYz7hK54w62spk3D9h1VzM65vdT7FmFljR6Li/PXtxt2QL8/e8UdpL2TEVJCYMio0YBo0dzGT+e4qK83BRc5eWp28S0tvJYDR7cP2qBolG+ny+/BD76iMvHH7NIf9Ikpn+//30ep2zbHRWEZA2na2u7usgmeW5s1BhsXLQSHg8FdzDIVKPLZdYMqmL6NGQQXVT0XZTYUijyJBo1TTmrquxPmNEoC7FdLvary/XE85e/ALffzijTjjuaQkv8rbxeU8jJbEeJsmXK118Dd90FPPZYbu13EnG7gf/7Pxbv77uvKQS9Xp6Evd744xGJsEBdjDX7GzJLsrkZeO89YPFiziZdtoxp2e99j8vUqd2UenQ4uFN2PPRQ/Ak/yXMNTUNnm46ODl54+Hz8bgYCfK9OpymyleiyIZvooqJPosSWQpEH4vwuBeF2aSFdZ4BA1xmtyaUg3jA42/Dhhzn+jh/fdWaj02m6zxsGH9N1irtMIkTvvsu05IsvJj/3FoI992T7nUMP5d8OBwWX28334HbzmAKmCWt/RyYwLFlCAfbBB4yAjR5NoXrAAVxGjy7CxpNFtgC6xK5cmf65W5+n6+bkDMAsmu/sZFTT6TRnMCrRZSHNcVX0fZTYUihyROqvktVnCc3NvMKvq8utRscwgEsvZfudu+7i+CvbkpmNsRj3QSJdLS0UgsnqtAyDY/iSJVzefZcGoJnw3e/yPb/1VvZ9EK185zvA739P4RgOUxgKoRCPmfhfeTwDa6ZbLEbBsnSpKcCWLOHx2H9/4MADuWy3XQFES0MDcNpp9v/TtPgPJsMIjLQBCgT4Xa2spKju6OBn63BQiCnRtZVU0cVefC5WZI4SWwpFlkgTab+faTBxarfD76fwybUgXteBiy6iEeftt7MeyhqlshNVqeq0vvqKsxcXLmTkK1NcLuCHP+R5drfd+FhrK/DKK8ALLwD/+x8jM9nicABnnAFccgln8EWjFBri49TWZjZQFvNSsW5wOvk/ud8fTtqlTzSgYu5sOL/lTL/2y+cgcPwM6DpFypdfMu0oAtntZsRr2jTWfY0dm+OG6+rsvxB2kZUsaovCYX5PIhEK5qoq0zJCiS4LySJbmgY8+GD3pRJV3VjRUGJLocgCayF8RQWXZEidlseTWzosFgMuuIAz2m69lU7nVqFl1xYnWZ3Wpk3ADTcwDRmLZb4PlZX08Tr7bG4/GTLjUFrlSP/CV18FNmxIv53aWkbvTjopPvoXDFIDRKMUkx6PaUqaiMNBUSi3IsLksUTEvsEwzOf35Am/9IkGVF06E45A/Ey/1uvmIXB8/AnPMEzxtWgRBdjixQwyHXwwl2nTgCFDMtx4kWuGZPKG1HNVVprRLxFdFRUDuKaroYE/NLvzbnelElXdWFFRYkuhyBCpjYrFGM1KZ2GwZQufm0udVjQKnHMO28vceCOFjvUkZNfw2a5Oq7OTY+Udd8SPoekYMQI47zyOsflYVOg6Z9698ALwn/+kT1UOGwb8+MfcrghIXWcELxym4JKUlJiOxmK8L1ExOzGm6zw+MqwZhhkVs2KNmsnMuu5KXw7Zeyxc67pGN6Ijx2DT4pUpXyvia9kypncXLWLkq76eousHP2DRfcoJB9lGNbJ8vq6b1iQSrfT5zCim1HSJ6BpwJFOZiancYqHqxoqKElsKRQaEw6b9QbJCeCvit2VnapqOSIQlNBKNGjIkfhy2K4iPxUwzUEkpPvcccOWVXE+m7L47cP75wDHHFKd34ptv8vy8fHnq51VX87x9zDEc6z0eRrn8/vj+fRKx0nVTfMn9UMhcpFl1LGZGvlwuMy2pafGLYZjnNzE2FfHldhcn+jJ8lANakpl+69dmd7LVdR6rDz+k+Hr7bdZ/TZ7MiQk/+AH92XK21sgjCiJtnMS4tqqKxzQUMnt3ulwUXelMcPsVPSF2rII52Tm/u8ReP0eJLYUiDaEQhZbDkZnreyhEMVRWlr0xZygEnHwy666uu66rTYRdQXwgwHSMYTBaEIsBv/0t8OijqbdVUsKZgZMn0+9p0iRur9hEIjwn33wzI2/pcLk4C2/sWAZQxCyzooL7W1fH911ZycfleEmTahFVIrAAU3xZF2s0zCpCrBExQUSXLIWIfuUT2UqHtI965x0K3rfeorA55BDgiCMowLJqMVQAYSC1hboe700XDHLfolEe28rK3Mx4u41C1Tl1dxrPbnt2qMhWQVBiS6FIQSDAdJ3bnVnDaF1nnZam8eSVTQQkHAZOOIEn9muu4fYSX28tiHe7eVIKBs0IwQcfsKA+2Ux+gCLl5z8Hzj23eyMHhsFoXyDA47RpEwXXCy8UbhtyHGpqmJIcN46zHeV2xIjkKV1JRUajFIRyPzH1qGlch/V/Ei2zCrBsU8fZ1GzlSyQCrFgBvP46xdeiRcAOOwCHHw4cfTQFeMrverLZc1lGQcQqorOTx8vaQ9Pv5/9iMTN9XIxoa14UWiB1Z4F6KssPQdVsFQwlthSKJHR0UMx4vWa6Lh1NTYxO1dVld2KIxTietbYyomW3PSkylt5zra18nUR6brkFuOmm5AXwLhdw5pnAL37R/X36JPqm69xXr5eLw0E/qdtuAxYsKP4sd6eTn82QIeZidfuXW7ebqczqajNqVl7Ov8WEVQSVyxUv0oTEyFqqYn0h2WzEYiK1VIsXU3y9/jovMA49FDjqKKYcu3Q8KHDKyzprUVo1OZ38PnR2YptZamkpP4t8mrcXlL5c55TKbkLT1GzEAqPElkJhg9RclZTwRJOJ0MrV5sEwWBT++eecdWjnMC81Y14v96mtzfQvCoVYzP7GG8m3ccghwFVX0ZepOwmHKbJk6n9FRXIR+tVXLOR//PH8/LuKTWUl+xwOGcLo5bBhtOQYM4bnXqmxC4fNxVqgLw2urUX4UicGJA8YJd4mLvK4rF/uZ1tfJlGv117jsmQJPdGOPpr2HzvsgKKkvERYtbdzn60dBEQQStq5rIzfpR6fuVigCF+P0JeFYh9EiS2FIoGWFp5Dsqm5ytXmQQxLFy6kYemwYV1PIFIQ73Dwyr69nduprqYAO+002kPY4fPROHT6dLPo2zC4DWt9U6GJRnlyDAbNVi2ZpizXraO10KJFtI/Ixg+sN6BpFMwjRgAjR3Im6bBh/Hv0aB4LSVmKIBIRnWriRaIYy3SIthNg4lFmvW9nfSEzQf/3P35HX3uNv4ljjgGOL3sR+/79AjjWrCpoFCQaZZQrFOJxqa6O75bQ1sZIqXVGY4/RlwWLsnroVpTYUigsiNt7Og8tK/nYPMyZAzzyCHDPPV0NS2Xdzc1mZMh6Alq3DjjlFEYh7NhzT64/mT+Wx5N51C5TIhFGH4LB+FmD+WyjqYmia8UKntfa2ngyTlxkhltvp6oK2H57LtttZ95WV5vCy+Phku67JNEyWURMWyNpMjtTHovFgKpnGzD8ttnwbFyN8NB6fPvzOWg+fEacV5nVBkMeCwZZF/jf/3JpbgaOPBI4/nh6e2U78zYVfj8/V4CiSqxAgHi7CJeLx7RHiuj7umBRJqbdhhJbCgVMURMMZp8GzNXm4bbb6KH197/zZGtXy9PeznWLWBFDyC++AE491d4w1OHg+H/WWTwBlZXFRzIcDoq21lYzQpaNBUBiax0hEOB6RWT5fHlYC+SAYZi9KpuaeIw+/5znkbVrGWhoaem+/cmWIUPYXHz77VnMv8MOvO/zZS6+MsG2EL/Eh41Xz0PLETO22WfEYvHRM5kYIOJL0yiAX32VwuuLL1jndeKJFGD5+LMJsRg/s1DI/K5aZ34GAvz9xWLxtV7dihIsigxQYksx4LEKraqq+CvodITDjGr5fKa5aCY89hhw8cXAAw/wBGt3ghDLiVDItDooK2OfvDPOsBcOJSXA9dezeXG6qFIwSMHldDLClUkUxdpkOBGHg8ehu0VWKiIRHiddp0gFmO5dv95cOjvNqA/A4yC1ZhJFa27m7MlNm7q3nszlYqZKxNfOOwMTJjAd6fWm/8zsCu4r5s7O2GLCahJrtchIFGI1CxrguvkGLNg8CY95Z+BtbSoOmObG9Oms88rmt2FHqiiXtdYL6EX1XAqFhaKJLU3TBgH4J4CxAFYCOMkwjOYkz60EsAzAk4Zh/DzdupXYUhQK8a0KhXhCyKb+I1ebhzfeYNrl7ruBiRPtPZp0nSJOehyKY/1LL7GFTzDY9TUVFbRS2Gcf3s/kCj8cphjRNAquZH5RkQj3JRrlycwugifRjkJgGNyWNR1mNRq1Yi0St9YlAWZtlERHXC5GSGR4kxmDEjlKZ1gai/FzEaH27bdM58ry7bfAxo2FOQapqKyk+NppJ4qv3XYDdt01/vubzEpCC/hh9xazMU+VdGQ0CpQ+2YChV86EI2hup9EzHPcc/hieb56K994Dpk6lf9wJJ+QuvKxRrsRaLvm/1HPJ5JEBZYqaLypCV1SKKbauA9BkGMZcTdMuB1BjGMZlSZ57M4DBW5+vxJaiW9B1Cq1wOHuhBZj1XXV16R3lhS++YOPga69l4+Bkr2tqopDz+bj+0lIWjV9xhb3gGDyYMxmnTMnNsb6lxTRFTXy9RA3kBFas2pholJ9FKMTbQgfXOzv5eYmVR7F8m4JBCq81a+JTmCtWcAmFCr9NgJ/P2LEUXxMmAKXUah0AACAASURBVAfecxomNb6IwdgS9zxDc0Azun6JcjVPTWbGGhkxBssWrMSmTebMxg8+APbem8Lr+OPtveTS0dlJUaVpjEQnCiqrjYTXy+d0V8ulHqEQIqmv1571AYoptr4AcKBhGOs1TRsO4FXDMHayed4kAJcAeAHAZCW2FN1BNGo6safrc2hHZycH9GzquzZuBL77XeAnP+EVfjJR1NnJE7XHw+L2khJ6b91yi/3z6+tZ/7XrrrkXKEvUQHyOxIm+vZ0nL3ms0OlBw+D47veb/mASfXK74+vMrBEr6+vlNrEQHOj6Wut78nj4nrrzRByLUXxtOfosfNFYh4+wJz7CnliGXRBFcRw7R2Ad9sKHmIgPMBEfYC98gO1c6+CImrMJ8jFPTdpmCMD6dca2KGU4zN/ASy8Br7xCf7WpU1njddRRjKx6PJl9x6wtf0pLKagSXycXCbrO32i/TC0WSiT15VmVfYRiiq0WwzCqLX83G4ZRk/AcB4D/AjgdwDQosaXoBrLtc5hIJMJUUjY2Dx0dwIEHAvvvT/f2ZOIuEmHzaV3nOOd0ApdcwhovO3bemSJs3Lj8UyZS+9LcbBYkS61YMdIxgQCPSyxmbiuTOqRCIO7kgGlSavWrcjpNJ/hikChQQvDgM0zAh9gL78y8H59/zuL+bPpaZkMVWrGX5zN8J/w29qpZhR1/ejBG/vjonI59ssiWoWloueVBWwEnolMalC9dykjvCSdwVqMY98pnk4z2djPqKmLNiq4zCub399PUYqFEUl/2C+sj5CW2NE17GcAwm3/NBjA/A7H1cwA+wzCu0zTtLKQQW5qmzQQwEwDq6+snrUrXZkChsEEKbZ1OCqVsTy6GwfSeYTB1l+lV+LHHUrT8/vfJLSUMg2mmQIBjqK7T7PT11+2fP3UqMHcu/ZsKcQKJRs3WKR0dZosijye+ybNh8OI51yhaOMz1h8PcRnl5z0zblyiXuL5beyBaI2OJNV2FINM+iP4HHsOqq+7Fp+Ed8TH2wMfYA59iNwRReMVQWsr04x57sCH5HnuwLixd5K/0iQZUX3S6bXQrk9SkrjPt+u9/A88/T+1wxBEUXpIWl44DdhdGkQgvEKLR5JYtianFxHqvPkuhRJKKbBWdHk0japrWAGB/ADqAcgAeAHcYhnF5qnWryJYiF+Qq2OvlVXAuKbFc6rRmzQLef5+pvlSRsPXrGTEbNYpi5MwzWeNlxw9/CPzmN1xfrqaOhsGTj9RIRSKmbUNpKYWptVG0eC+J4Mq29yNgRhkcjuJFzApBLGa6v0ufRCBefEnkK5fUVKZ9EO1EWQwOLMcO+Bh74EPshcXTrsBnn/H7U2hKSkwBtscewN6bn8Wk+RfDu/6buHZCw0dqeRfdAzzuy5cDzz5L8RUKsbbrhBNogyE+ZGICK79hw6CY8vtN/zg7MSX1XoA5u7dPpxYLJZJUzVbRKabYuh5Ao6VAfpBhGJemeP5ZUGlERRGwWjv4fKzvyGWAzaUdz7x5tGJ48EFO10+23bY2jpk1NaxrOeccCi87zj8f+NnPsnNll7oZmboficQXoUvKprQ0XoTKxbH1MUnDyhT7TLff3MzX+nzFq58xDJ6gQyHuu117G2sdWGJNWDKSiS/rbEa5zfR9ZdIHMVk9lGCNHDU1AcuWAZ9+yrTc0qXA8i91xPTCFtqVwo+J+ABT8C6+4/4EO1/2Q+x138XwfLsy5f5lSyQCfPgh8NRTwHPP0Y3/pJPoXi+9Gt1uiq6SEt4PBMzZtXbF8wA/y9ZWjgcuF6Nc2ZYS9BoKKZKk0H7VKirVWIyiTc1KLAjFFFu1AB4FUA9gNYDphmE0aZo2GcAFhmGcl/D8s6DElqLASCF8NJq9h5aVXOq0Fi4EfvQjemlNmJA8bREMsk7L5QI++wz45S/trR2cTvY3POOM9OksXTdFh50JqfTlkyhBtsJHpuDX1aVPx1iL74vRXkXMTOX9WvsPyv/l1poqTMTOOsL6mHXRdVN0hcPx3lvWAn9pQA2YdWDZHOtk6UYgdVG7CLnIuo34pHwqPtR3x0f+HfCBZx98hD3hDxe2GK2iJIzJ4bcxRX8He2MxpuBdjCxpRNv1uRXdJxIIMJ3+1FM0UZ06laa+Bx0UX2cnoquzk59PWVl8o3Er4jMXi6V+Xkp6g11CIfdBRbiKhjI1VfRbQiFGUwBeCedaFyR1WrpOl+9M0o/LlwP77Qf85S/A976XXBxFIiwUDgSABQuAG26wf15ZGfC3vwHTpiXfpq7zBBIMmm1rHA7zxJ/o/p0P4jcl9S/JsJqKVlcXrjZLIlgiskRgSX1PqgiTddaitb2N3WzGRJ+vZMOi+HlJxNAqviT16Hbz2IsgsC7J9tUu3WgA0Gtq0fbHm5MKrVQpyliM4v7TT9lT8+OPeV/Sa4ViSEUAe+xTir32YiPrPffM39zUMNgr87nngKef5u/sxBPZH3TCBDNaq2mmGC4v50QYu9ozw+D77uzkb6OqKotaxN4uTHIRYap2q2gosaXol4g1g8uVfKDNFKn1yrQdT3MzsO++rLk6+eTkqb5YjCKusRF46CFGwOwYMQKYP58nk2SIOWskwveaqqBYnp+v4Oro4ImqooKCIjFtFwx2nSlmbYScLZL+tBNY6Zo4FxK7QvrE4VLStpGIKcBEhInFhYgwOwFm/b5mkm60kmnxfeL+rllD4fXxx7Rl+PTTwrc3GjcO28TXxIn8Tuf6uek68NVXwJNPUnj5fOZvrqqK3xG/n99TjwcYOpRiz+57by2gT2Yl0YXeLExyFYJqVmLRUGJL0a+wFsqWlOTfaDkSMc1FM7kqj0Y5k6q+HrjssuRpSxFHmzYBd96Z3Nphjz3YO3Ho0NTblcLz6uqugjAcNoWK38+6nk2bmIqRepVMao2koF7qluTYOBzmcRYhIgai0iQ48cSlafyfpNbs/LNEsMi+W2cISoF0jzQfzhGp+5KIi3VigpzHXC5TLFtTkXbHKBlJfa+yLFY3DCAwaT98tHEo3sMkLMFkLMFkNGNQxutIh9dLf7iJE4FJkyjCRo3K/jcbDgNvvgk88QQ9vKZOZd3joYfy+G7YwONdXs6JHWVlXUWeYVCYSS/SZDVf2+jNwiRXIdibBWQfR4ktRb9B102PqGRTwLPBMJgq0/XMbR5++Uu6ZN92m1nEa0drK9d97bVMH9px+OH00EpX4xQIcH3WgvVolI9v2gS8+CJrwZYtY/po9GiKrC++oLfR8cdzqr80OrYWjcu6RFzJsCCiIBqlgKut5fajUe5LOGz2ZrS22pHbxD57yXA4zG3JkusMwN6GiFep+5KZofKYrse/f4l+eTypj0Muka1kJKYkDQDfYDsswWQsxt5YNPQYfNCxY9ys1XwZPJiiS5Y998y81lIuYp59lhGvb75hbde55wLDhpm/56oqHsfSUi7WNL/VMDVlc+veLExSCcEHH0yeXuztqdE+jBJbin6B1RG+qqowRdjZpg8fegj43e+Ahx9OPfMwEOA0/auuAv77X/vnnH8+15VO4EWjTEO63RR3wSDXHwyyruW223iy2ntvnrgmTeL78XrpbXTPPcAjj/BkcvTRbGA9blzXfZcoSzQKfP01oxFy1d/YyBNYWRmPl0QFMo06NTVR+MlsyNJS08dLom6JxyEWM+vTrJMJrDMOC1kj1l1I4b0s1uhXNMrzp9TdyUw8qwBzuQDfk5nZSmTKtjTmOnOWWmzkmG3pTF3nd+LDD2lx8tFHFPfiX5YvTifNeydNMpexY9MLbl3nBcbjjzPNOGIEJ5cceqiZepbTnNvN75x1Nq61LZDtxI7eLEySCcHaWg4Qqfa5NxT9dyOFKKnIBCW2FH2efB3h7ZAUWWlp6giV8P77wGGHAffey5RIspqkcJhX21ddBfzvf/bPmTUL+NWvMkvrNTZubQZcatodLF8O/PnP3NYll1BAlZZ2XV9NDR+PRJh6mT8fePttRqamTGFroYkTmYJZsoTLl18ypVlSwvc6dmz88fd4KHJSicS2NuCdd5j2efNNjunbb29G40IhUzCKyBCLBZeL/4/F4s0urSlMiZ61tfEkOWwYT7QjRnD2ZEUFH6+qMi08RFi3t/N14XD8hAJJd4o3k9yWl3ORKF4xxJ2kURN7R1Y/34Cx82ajZPNqhIbUY+XMOWg9cgZKSoC6/zRgyE2z4VqfWZ1XoQmFKHREgH34IQVZoaitpeiaPJnLHnukTvkFArywefJJfucOOgg45RTgkEP4nfX7TZ85r9cU+9Yol60Zam8VJj/9KesTrOdxUZONjV2f3xuicTkiTdETF+vkFnme3aJpbItWbJTYUvRpxFfH6cy/EF6Q9GEsltnsw82bKU5+9Sv2eEt2wg2F6BA/Zw5tIey49FLg4osz28+mJqZNvV6+73AYuP12piV//nN6ElVVmScI60+6s5PPF8El7zsS4QXxyy+zcfBHH9HfaOJEYJ99WPhfU8OI2fXXAzfdxBNXZycHrWQRRcMAFi3ijMq332a0bZ99OGNzv/3MInu7wVDc6yXFJiLL6o1ljXRJRCUapWfZ6tWM4n37LY9XR4dp2Cr7LYKpvNxsUC0zE2Mx89jIa8Rlv7PTXJcEC0R4WddZUUGhN2QIxergwbwdOZLf22yvrL2PNaDm8vjoVczrw5eXzMO6AzjjUFLBYvNRWtp1Rmq6Yv9UpwHrPlsnRsittf2RpvF4ffIJhdeHH/K7ZXfezwWXi6nwSZP4W5w8mSI7EcPg9+Cpp4B//Yuf2SmnsF/p6NFm0EfXeZx8Pi7BYOrm12npTlFmF3HTNOCCC7oKMOv/e7rOLEN03ZxwIlHfxLck5RB230e7JVPfxHxQYkvRZymEI3yq9WaSPoxGmZbYZRfWayUbhDs6aPFw660c6O347W85HmbC5s0UEj4f33tnJ2diTZgAXHEFT+ylpamnvDc2crBK9j5FYOi6fSrvxReB009nIfKFF9oLhmiULVjuvJMRs7PPZipn6FCzRixXJBIWCJhWC5Jas/ZYtAoKEU+RCG+lbizVcJcoPqy1Z4miMBzmd6e11WyE3NbGz7+piUtjI2+3bDELt0eMYGH46NFcRo7k1fawYWa9oNWaYvy0sfCs75omCg0bg3f/tRLRqDlr0/o+pQZMBJikahM9weyEVKpjYr2fbIam3TrWr4+3oPjii8KlH0ePNoXXlCnATjvFf9+iUUa5/vUvXvzsvju/yyeeyGPk95spaomgBgJb/eKebUDZnNnQ1mQgnro73ZiqlgzIvM6sl0TtrJNyrLYqVkNhSaEniqzehBJbij6HdcZhaWny6dy5EIuxqFxmMqbjl7/kVfptt9nPVjQMRt6am4H77wfuu89+PX/6Ewf6dOg692/zZkZLRo7k2DljBk8SF19snkTTpfNEcEUifK+59Dr86ivguOMoFmbMMN+rRN0WLqRYOPtsRtpk9mOun5dEsCTtA5gzE0tKCtvvzk5QyePW22SvTVzkZBEMmpMOdJ2CbN06Wi+sXcvIy4YNFNObNvG7PmgQhZcsU+b/DPVYjdFYg9FYg0FoggbOOPz6Sz0uqiQCU2ZDig+bNd0i0S4xurUK1nwmJNh5lNl5l8mxDoVY7yWRr48+KlwbospKM/K1zz6MrpaW8lisXcvv6iuvcNtHH80LiQMPNC0kYrGtIvWxBlRdEh9VTCmeuruQPl1xfCbCr4fq0azdLRK7XIhnoLVPaW8UVclQYkvRp5DZRoWacZiItPUZMiT9ifuRRxhFeuQR+4J4EVptbbR2SGZYes01jEqlIxRiNKS5maJl5EjWw5xzDkXfKadwEErVTkhOuLGYeSXY0sKTvxTOp0Lqhqz2D52dwJVXsp6rqspMXVZXs5Zmv/2YTrMKP+vMQrlvPW5yK7MWrbMXAb5Oiul7U0Nhq12FLNa/JTIlV+gSYQPMtJ9cqYsA0nWKr1WrKMjWrAHa/taAtf6arVJrNCJwYzTWYJRnMwbvNQLjlz2L+valGFkbQs2Pp6P2jKPifitSiC8nN6mVk++GRA+SiTCJgnXHyW7jRuC991gz+N57jICJaW8+uN2MZk2ZwgkkO+7I71NLC9Pozz7Li5qTTqLw2m03ao+qPZO4+icTT91tEZFO3GUSseoGgSi/A6sXnRwOsYaxiqve9DvPBSW2FH2GWMw07qyuLnzbl3CYYkbqdlLx2WfAAQcAd9/Nq+XEgcAwzPqg//wH+P3v7cfbyy9nCi4dHR2McHR0UGAOHcor8VmzgLlzaRMhflfWVKaYgCYOZnbr1zQe1/Ly+DY11llxiYac1r6AUmCc2CrHzqVdCr6tTuvJkIHXOgOvELV5uSKRokQRKHYNVjTNrJNKtljb/1gX67GxThBwuwH3vxrg/tlMaFsjD22owGrvjli+/1nY9NoyfBsZsk2IrdHqsdo1Hg6Pa9tkgeHDzVtZhg3j916EodTAWe0o5POXfZf0mtVEtxAdClIRDjP1+N57XN59l2K0EIwbRwE2eTI7P3R2UnQ99xzf77HHAsfesD+m4i04Ef9hG5oGzc5WQfoNJlKsyFYholIFFogi6q2L1fJFvtf5NnjvzSixpegTiMWBruee8krHli3cztChqX/o7e28Ej77bGD69K7RIF3n1bHfz2LwX//aXlTMnEl7h1TbknXJDD2fjzOxHn0UuO46FpxPncrnitAyDD5X+sMB8f365CrR6p8VDPL9i7dQZWV8JEqMRCXCUSixY40EWZFjIhGensIw4mcA2gkq64zFxNuM6giTRBoSXeitqUdgqyXDn2fDuW419JH1iPxhDrx/mA1tddcTe2zUGHz71kqsXMnNrF4NbFn4MZreXIb1/iqscW2Hta7tEDI8GDrUTFeKEBsyhHWAdXXmhYj1mCSeOCX6Zf3OyKSGYrBunTlj9t13eTGUyr8tU0aMoGXKXnvxImT5cmDx/GXYEK3F0XgGx+DfOACvoRqtiFbVwhEOdE0vnnkmp/p2Z0ou33qrHCNbVu846/fW+psZCMLKDiW2FL2eSMSctVQoa4dEAgEzPZcqYmYYTNc5HMAf/tDVbFGMVaW59LnnMmqUyPTpTCumOvmEQkxBSiTF4eCAf801bMp7991MbcRi3G9pwBsIcD9dLu6f1TsoFYZBIdnSwudXVXVN80no365gvj8g4soqsID4yJJ1yTuVlkMUwhoZtEYIvY81oPrC02C3O4amIRrSTQFos12j1IfGv9yLFZN/tC1dKfVjmzaZNWSbN/N7NWSIudTV8SKgpoZiTFLZXm98gEROstZFBFkhRXVnJ1PsS5YAixczAlYI49W6OmCfYSsxZdl8BGJeLMFkLMI+GK99g/3db+PA8H+wP/6HIdhsvmjMGDPC1dssIpKR5nuZmOK3i1TLbyYuIjtAhJUdSmwpejWhEFOHDgcH82KkjwyDJxGHg8Xcqbj1VoqcBx7gSSZxPSK0WltZS7V6ddd1HHoo15HqvUjbEHmODGQXXcTI01138XiIU7ukfTTNNAXNVZRGInwf0sTX6TQFiEQLSkoofPsD0jpHFhn6EsVAUU4ShaqNaWiAMdNMKyZidY93OIDBU8bCuTaz7VrtNyRdummTKcbWrWMRuwgx6+J0UqDU1PD7UlPDCwPxOauq4mM1NfweixiT6KmkJUWM5TOxYtkyRr0WL+ZSiNRjHTZjquc91Ewcg+pFL2A5dsCb2A+lCGBXLMWuWIpdsAy7vHonxo9ntLAnU+BZ0dAA44rZwJrVMEbVI/i7OQgeP8M2/W9N89vVYSqU2FL0YqweWrW1xUsnSUPl2trUBeLvvAMccwwv+nbZpWtkR6b4h8MsWF+0qOs69t2XTvPJLCIkbSjRI4D316yhd9aRR7L+S6JYUhNk9YoqRMTJOuMTMK0C3G6euDo7KUytbU6Kgd0swEQPp2yRWW+yiIC0NvAWo9Sik21tTLL0UDLRBsDw+aDfOQ+R6eaJsmpQ8v6Jmzfo26J21pRourSoVZRJS6aWFlOMrV8fHx3bsoVLYyMXiaYmLjLZoqaGv9HaWjOdaU2Pywk+0yjumjWm8Fq0iDNr82UQGrE/Xsde+AhDsBF+lOHjkr3x7tiTsHkzf1O1tUzNjhrFCzYRm9XVptFuaSkvaORWxKZ1sfrSyXuypvESywSku4QsckHX1sb9stqUiIdcZyf3Z+RITgIaO5Z6fPx4TiiorOy+iRJ9HSW2FL2Szk4OAB4Pr4iLlbLSdZ4AvN7UkZrNm1kIP3s2neITo0YiDCMR9jN85JGu6xg7lsW2ySwlrGlDMVLUdZqL/ulP9OE6+WQz3SdpRTHOLMYxEvd2q9A1DB4zt5snjkKQrkA8GdaC/MSTkazXWqAv6wbi69AKbRuRMdlEtlKldk4/PbkXxUMPUZBZhZrDYVvUpI8eg5YPV26LYCWu0lrwb3fM5bF0WCdLSMSsvZ3RJuuycSN/e42NjLY2N3NcaG3lvlVUUKBIpEwEy6BB/G4OGmTWmtXWmrNX7WrqGhtN4bV4Mb2/8p0sOAiN+M5Ondjp4HrsuitrwKQN0ObNfM9ipCrmuDIpwbpIQXmiQ7qdeaxVeFonMlijtFJPJ5YpEg0vLTXHlIoK/i09VjdsYCRz/XpzVuyQIRRdO+7IC9DddmMrr3QZgoGIEluKXodcbYnXVTGvmlpaOJgMHpw87G0YdIavr6dLfGJNVzhspg+ffx64+uqu66isBJ55hm1p7LCmDb1e01Dxpps48P/1r5yibhh8vLSU6xTn9e5GPqO6uvxq6CIRnnCs/Q3F20nqOxLdyRO9mQyjq7VCIrIeOclIAXePk03NVj5mlXbbScRmu1YxlGyxQ0SX9TbxviyZtKWSz9gq0trazJP/+vVm6nLLFpYetLSY1isSsSkri4+WiSgTR/8hQxh1GjSIIufjj9lYfskSen7la7haU8NuDJMns43W+PHmRYB8nzWtq1FnMqyRROt962PSkgYwL07kNyYRa6vZbarPw/pbC4XoT7ZiBetTV6xgS6bly7nOCRMoviZO5AQDaz/VgYgSW4pehQyKhTYrtUP6H8oAnIybb2aN1vz5XaNfYkcRDHJg/tnPug7IDgdf//3vd113LMar9HDYvOru6ODgdfnldL3+3e94ApCBUwxLizEjM1MkuuVyUXBli1VkORw8z4sAylc8ygkBME/mvTrNkenMsXzMKpMJNaeTX6w8irYTBZnjHw3w/H42HFtnSXb8Zg78x81IGnizRicTRZj1NvExuW+HVZxJSs3v53dW0pobNvD3L2lNcfYXHz8RYDIrc/Bg/k5XraLT/fLlfF4+1NaytGD//Xk7bJg5OUNm8RkGMOTlBtTfORuejasRGVaP9RfOQeNhXT+rmgUNGHn7bLg38HmbZ82B/9gZcDqBimcaUHP9bDi/LUy/TKvwlUUmlWzYwLTs11+bAmzlSmr/XXc1Z3jutps5jiWmrTMRm30JJbYUvQZpcZJO/BQKcU9P1f/wgw9Y0N7QwCs16/OkIN7v59X0GWfY93r73e+AH/+46+PSb80wGKXSdR6DJ58E7riDvWTPOIPHQtJ50pqoNwxAkupNV+tmJRo1UycOh9lHsD/ObCw4+ZhVdpexZopInX7KDNsTtLX/ZOLjmZCu751dqs0uWmoVZ62tplCw2mWsXMlomdQwVVfzNWvW0G6iEOJrwgR6fe22GyPX9W80YOr9M+EKm8c06vHhg5/Og8sF7PwAm5FHKgbBFWiHI2I6vsZKfFhx+TwYBjB+7kw4Q/G9NL++fB62HDpj27G2qwGTzwXo2tw5UyRrsHYtzY8//5zLihXAdtuxRGOffRi9Hz06/rXW1LVVgBVkNnA3osSWolfQ3MwTcCaGooUgFKIwSuW23tHBQeAnP6GZYWK6rK2NwiEcZpuc997ruo7p04Ebb+w6IEjfPLebYioY5GB+7bUcuK+5hqaK5eWmX5Y0NO4tg0s2szgBvsfmZt4vZDH/gCEfs8psZz3m6tNUYOdxu16UyXpTJqaW5fV2LYNyOb1JHVtzM6PY771HwfDZZ/yN7rUXi95jMYqIjz+OT4/nwqhRwJGN83Fo4Gl8HwtRgxbz2AAANGhI/WYCQ5hmLt3U9XMJDh2DRf9cue13mBgFtkYPrdHFxGik9TFrqtIa7RI7Gun8IBNtPvuMx+r997lEo8B3v8s06/77sxbMajWR+NnZRcTybTNVDJTYUvQoVruEVMKn0GzezIFgyJDkP0jxyLr66q5+WlIQHw7TxuH++7u+fq+9gCeeiI/6GAZFWiDA8HlZGUXfihX07Ro+nH0Wt9/etJDQNEazMo0edSd+P49DuqbdUuPldvO5vSEy1yfJVQRlI9TyEXXd3ZomT+zEV7JTn7X2CeDbaWqiYGhsBN56C/jf/3hbUsKuDjvuyLqyt9+m7UQ+4suBGL6D93EwXsY0vIL/w5soRfoVGpoGGEZS/7X1a4v/uYjoCgTMmdZVVV0n3oTD/GqLQe3ixRwDDzwQOOQQLmPHxndtSNXBIdHXrSfHHSW2FD2GVWhVVXUVNMVCBEJiaxsr//gH+/39858UQFbEzT4Q4GAwa1bX19fWAgsWMN0gWG0dSkpMe4XlyznT8OCD6QpfW2sW7nu9TFX0ZnGyaRNvE33HALM/ZCDQPXV4ihRkKtTyiU4VOLLV27F+v8vKeMEYDlNwPfII2/yUlLCx9bHHcrx76y3gzTcZGcunx6MXQeyHN3AwXsbBeBkT8UGXFkIAEKmshautyTYCZvVf6y4CAV54idVHqgk2UiP39ttc3nmHx/ioo2jDs99+8RNdJB0sthfiDyhyxuk0I2vdPUFGiS1Fj2BtKN2dQktSX2K2aMc337Adz113sYYg8epLrmY3bmQnjtbW+Nc7HMB99/EqTBDPoUjEvPiPRBg+v+IK4IILgEsv5cAshqLFaLRdDMR93+czfY4krdDezvfZnVFLRZ7kE50qRF++PohM7EmcQR0KAW+86OORZwAAIABJREFUATz8MGsxJ0zgmHHoofyNL17MHqeLFgFLl+bXYmgQGnEQ/otD8BIOwUvYDisRK/FB95bC3dq1mNTQNDTd9CBCJ3b/5xKJcNyMxTjGZdLnVmZif/wxj9lrr/G64eCDgRNPpKBNth4RXqGQGV20pjS7w4BViS1Ft2MVWsVoKJ2K9nYuySwLYjE2mD7wQDrAJ6bGpE4rEODMw08/7bqOn/0MuOwyU6RFIny/fn+8B87ChTQovfpqbku8hqShdDHaEhWLxkb74mB5L70xBdqryLeXXSHJNzrVm95LN5LOG7C1ldGuv1+/CatXGjhbvwfnD3sGlbMvxIaDZqCxkd5eH33EyNfSpfntzzjnSkydFMZxiy/HNLyCKrTF/d8AsPgdY5vXlqTauivyLBOCQiHTyiabbUejLLhfuBB44QWKsMMP51fNzgvRul0xeA2FuM1hw4r/vpXYUnQrhsETczicOo1XDDIxMJ07l6H/efO6zoiUAu9QiG17/vGPrq/fbz/gzjtN49JIhJG09nazKLy0FHj6aRqV3nUXXeHlhy+2Dn2xcNyuUDlTR+8BTSGiQYUUOAM0OlUI0na92NpWaZl/DO7Cj/EQTsPhjv/g/EuqMPK8I7ZdbFVXA959J+KNDePxCqbhFUzDcuyY8345EcW+eAeH4j84DC9iMpYgOmw03v3Xym1pNoeDF4MyQ9jn657frngM2tVxZYquszbuuefodfj118AJJ/BrPHlyciElvV67w0ZHiS1Ft9GTQgswrSWGDLEPG3/4IVN/jz7KwlbrDzQWM+u03nmH7XgSGT6cZt077MABQ4RWW5vZG87pBP79b9Zo3XMPt9fZyWNTVdW9UT5FL6EQkaRCi6MBGp0qBCn7uSZ81i2owjzMxC2OWRiz73Ccfz4n1hgGMOLVBgyePROOAD/X1RiNVzANL+NgvIJp2IhhOe9jDZrwf3u0Y9+TxmC//bif4mQv/UGlz6q0Siqm8JLJQJnUcaUjFuPP5oknuFRUcLLTGWcUruNFLiixpegWrEIr3cy1YiDNc5N5eAWDvAI6+2xeESX+2JuaePXV3MxzjlgYCG43xdOUKVy/CK3WVr7fwYM5eC1YwBTj7bcD06Zxv9xuDmaqcesAJd8ZfHV19gZvPVmUPsDFWiRifiS1tZZi7CSfdQge3Ht7CLfcwo/9vPNYzjB8YQOG3kwjUr1qEKABjpYmRIfX4/Uf3YbncRQWL6ZlQqrmAOnYaSfaLBx0EA1HdZ3ra2+n+PJ6OYZJL8RiEIkwKqjr3E4hLsZDIc4Qfewx1nj94AfsMbvfft0/UUeJLUXR6WmhBZizHocOtb9C+9WvaLb31792LeTu7DRnEV5yCWfFJHLFFRRpdXVmEb4YftbVcZsvvcSZizfeyAJZoPd5Zyl6gHwiWw0NwGmn2f+vp+wWVBoSgDlrWdc57nm9SPtZR6MUBtdeS6Fz9tmceVdXZy9ypBNDZydrvN5/n7MdP/oo94++ro4XgocfDkydym1s2cLxs6yMka6ysuLUlFpnbEt/xkIgHS8ef5x1cz4fa2tPP737Ju4osaUoKr1BaElbnmSGqQsX8hzw+OO8CLcKH6vNw2OPUSglMm0aLRvEN2vjRqYOpeeawwG8+ip/3HPnAkccwShWdfXA7hWm2EoxzEqBnotsDTD7h1RI+UEsxuh1yeOZfdaxGMsNrr6a48m551JTJ5u1HQwy8h6NUgQZBssdXn+dEZ01a3Lb/0GDOL6dcw7LJGQGodR0lZUVfvKLYVBA+v18L4XujxsOc8x/+GHab1x8MXDVVYVbfzKU2FIUjZ6u0RKamrgPdm15WluBPfZgS51DDumayhOhtXw5rzIT+x4OHgw89ZRZ2L5li9mgWSJaH33EcfSqq4DjjjMHEDVDT7GNXNNuyVKQAAsIeyKS1MeMTYuC5fM0Rtej/Tdz0HHMDM6+fjKDz3rr6/VVq7Gw7iT8puxmbNCH4uKLgZNPto/OGwYFSkcH70uhu6bRzua113jR9/brEXSGszOZcjppr3DBBbxglXZbXi/Hs2KILr+fY6nLVZwWZYZhNtE+9dTil3EosaUoCr1FaIXDFEB2nlWGwatFp5NCKHEfOzp4hdXRQaH1zTdd1//gg2ys6nKxPqC1le9XhN3GjTQzPPVUXtD6fDZFswpFriSLItXW8ovfEwz0yJZNpNLw+dBxwzy0Hz0jva+gzet1aPj3QTdh9oaLEArRk+/II+MjPqVPNKBiLuu7IsPqse5nc9B65AxUVMSPbVVTdsSib0dhAQ7HAhyOpdgt47fm87HQ/NRTuU6ZcQwUR3TJmArwYrYYqcv2dvZnLLbVTjKxpSZrK3JGfLR6WmgBpm+VXV7+/vvZaHrWrK77GImYswRvucVeaJ1/Ps1Po1Fe6bW2sjheUod+P4sxJ00CzjqL+1BXp4SWooDMmdN1CqvPB9x8c8/sD5B8n+bM6Zn96W5mz+5Sra75/Si/ZjZKSjhOdHRk93oHDBy78BdY/IsG/OpXrC097DCmCQEKrapLZ8K1bhU0w4Bn/SqMmTMTtS82oLWV47FE5X3rv8JBWIjrcSk+xe5YjdGYh/NxFJ6BB6k7afv9tLY57jja18g63W6mF5ubeZGdb09IQWx6HA6zf25/Q0W2FDlhbcHT3YaliUizabsryaVLaVw6fz7TiNawvFUsLlzIovhEJkxgTYWYlUrYfsgQDjzRKKNlH34I3HsvswV2RocKRd70xpl/vXGfuosUaVQjpm9r75OshjRlanjMGAQ/X4ktW4B//Ys1pPX1wA1fHom9Nz/f5enRkWOw6rWVaG9nFMrnA7Y/eCxc6+zr/FpRiWdxFB7DiVjgPc7WqNjK7rsDF13E6H5FBaNDgQCFl3h2FaJO11o4X15e2KL2no5sKbGlyImmpu7vdZiMLVv4o09sNt3ZyYjUmWcC06d3DXuLyd7mzayPSGzHU1JCC4ehQ+lg7HBwoKmr4/90nenFW28F/v53TqWurVUzDhWKAUEGadSWFl6k2VrRpJr0sLXuLRo17Wgefhi4/bfrcSBexdW4EuOxYtvTpdG0rvO5fj8w6IUG1P9pJhzB5F4R0ZFjsOK/K3HvvcAdd6SOxDkcLJU44wwW0Q8axN3s6OD4W6j0omGwhisQ4DhbVVWYMbWnxZa6/lZkTU80lU5GMMirIDtbhQsvZGTq2GO7DgDRKMWYprFoPlFoAXx83Dg6FsuVVk2N2Vz6zTeBP/8ZuOYaGhQqoaVQDCAySKNWV3PcEFuZLq9PNmDU1wNgKUJdHcfac84BPh8xDbtiKfbBIszCDWgCW1jERvD5DgejaLW1QMcxM7DqynkIDx8DAxRkVvRSH9ovn4Pycs7Ue/NN1qwmK3/QdZqHnn02Z3SvWkWhNWgQ90/Si9KiLVc0jesrLze7efSH+RZKbCmyQkLjlZU9L7QAcxZL4pj34INsDHvZZfah6Lat7cMeeIBNYhM57DBmQ9av50BZWRkvLr/5hgPUxRfTQE/MTBUKRT+noYFRqdNPZxGodSC0KVyV5ux+f4LgmjGD0/4SB44EwSYO9eXlgP6b2ZhdeiOWYlcEUYKd8AVucF+Kxl9fG7cKt5siSP/RDHz2/Ep8+L6BDdc/iOjIMTA0DdGRY9B63TwEjjdTvnV1tKB49VUW5SejuZkWOJdfzlrYlSsphurq+F6toiscTn84k1FebhpHNzXl17y7N6DSiIqMkY73djP+eoJAgD/qxOL8zz+nS/K99wITJ3adShwMctD78kuOl9Fo/P+HDKExKcColqYBI0eafRY7OlgIP3IkcMMNwKhRSmgpFAMCO6+0ROy80xoaoP9mNrS1q6GPrIdzrqW2LYu6N78fCN3fgMq5s+FYtxpLhx6EWTXz8WXnSFxxBY1RE8ciXefYHQzywrSiIrNU35tvcreWL0/+nJISlmkccwzHTTGTDgR4kSrpxYoKi7t+loTDpkjNZ6ZiT6cR8xJbmqYNAvBPAGMBrARwkmEYzTbPqwdwD4DRYBPyIwzDWJlu/Ups9R7a27kka4PTE2zaxNshQ8zHAgFg331Zg3XKKV0HFcNgjVcgAPzoR/YlEw0NLAhtb+ePvLaWwsrh4IB1yy2s5XriCaYpldBS5EQxi8sHcuF6MUlVZ2XF6aTKqa+nu/H8+fEWEaU+4O550HL4TMJhRnoAXmh6PJzEc9llFCNXX81xKZFQiGNaNMqL08rK9GNXJMKL1htuoHhKxs47s2xjl12AYcPMCQF+P1+n6xyLy8tzE13RqJlOrKrKrRi/p8VWvmnEywG8YhjGDgBe2fq3HQ8AuN4wjF0A7A1gU57bVXQjnZ38opaW9h6hFQzyB5gYYbv4YtZZnXCC/dWbXG399a/2Y+b551Noic2Dx8PBw+HgY6+9RiuJv/yFA4sSWoqckAjJqlW8Ali1in83NPTudQ90Vq/O7HmxmHns77yzq0VEwA/98tlJJyOmwuNh2YLTyVnYfj/wwx/SVPn443mh+ZvfdK0R83p54VhWxrGtsbGreXMibjczna+9xuhVMj7/nGPvgw+yxGLtWrPtz+DBFFnSR7KlpWs2IR0ul+lbKKUsfY18xdYPAczfen8+gGMTn6Bp2gQALsMwXgIAwzA6DMPIo5WmojsRX6mSEl5F9Rba2/nDs6YPGxqA//6XF/R2ac5YjGJLGpYmsuuuHFgiEV5BRaMMi7vd/Hv5cto8/PKXrOlS9g6KnLHxWILfT/fdsWPzE0bJ1j17du7rlDolhyP//evLbC1cz4okisqxbjWam5O7P6TC6TRnRbe2cvF6aYL6ySccr773PQbUrLVOmsaxsaaGzxFLm3QMHw787W8UUyNH2j8nGuWF6K9/TcudNWuYRYhETO/BsjJG2KQDRzZ1WA4HSzk8ngw8zHoh+Z4uhhqGsR4Att4OsXnOjgBaNE17QtO0DzRNu17TtCL1E1cUEpkJ4vX2LqEVDJo/YOHzz4Ff/IIRq6FD7V/X3k6bB7v+WCUlnFUI8P22t7P0Quq01q5lNGvXXWmOWuxQtKKfkypCkm8kKtm6M43KJKIiZSZ2MxBzxBhVv22MzUVwaRrHJ5nt2NjI9YwYQVH073/zovKooyjArHi9FD8eD0VPpjP+DjqInoTnnps8qr9sGfCTn3DbmzZxaWnhvol1js9HkbdlC7Z5g2X6nqVGt6PDfhZ5byWt2NI07WVN0z61WX6Y4TZcAPYH8GsAUwCMA3BWiu3N1DRtiaZpSzZv3pzhJhSFJhzmD9DjMf1UegsS1ZIxz++nj9asWTQuteutFQrxeX/4g/0P9JJLWOgug4CumzMMv/0WeOYZ4NNPWa9la1CoUGRDughJPpGoZOt2OHKLTBUjUtZXmTGDxe9jxnBwGDOGykL+zrSxn88Hx7VzUFWF1IIrg4hiZSVrtSRiJNGiqVOBRYtoGXHqqcCVV8bXXTkcFC6VlWYdWCaRprIy4I9/pLP8TjvZPyccBm6/nZG2VasotkRYaRq3WVdH0dfZadbRZoLVGkImSfXieX7bSCu2DMM42DCM3WyWpwFs1DRtOABsvbWrxVoL4APDMFYYhhEF8BSA76TY3jzDMCYbhjF58ODBub0rRV5Ibt3p7H1Cyy6qddFFwA47JK/TAngV9I9/AG+91fV/3/8+ax4qKjhIBIOmtcXmzcBnn9Hw77bbWA+mUORNJhGSXCNRydZtrSPKJjJV6EhZX2fGDNPvYOVKDg7y9/z5mUW+ts5WlAlHtoIri4ii9GKNRjlmSS2Wy8Vaqo8/5hh4wAHAc891fW1NDb8eTU2Z11NNmgS88ALXn0xjfvABxd7ChWaBvggrl4siUWqxEtsNpUOc+UOhvuHFlW8a8d8Aztx6/0wAT9s8510ANZqmiXI6CMBneW5XUSRiMQot8XbpbXVJHR38YUut1oMPsngzWZ0WwB/20qWMSiVSV8fXij9MOGw6Ibe00Gfr1ltp5HfYYYXvSK8YoFgjJMnIpT4ocd3Joi3ZRKaS7Ueu+9efyeRzHTMmbmZoUsGVZUTR6zWj8Vu2xPctHDkSePRRziycO5eardniGyAZDGnDlqng8ngYvXr6aWD77e2f09HBqNqcOWYf2tZWnmfCYdMTrKqK221sZGozE/Hk85leXM3NvduLK99T6VwAh2iathzAIVv/hqZpkzVNuwcADMOIgSnEVzRN+wSABuDuPLerKAK6zi86QKHV24RFKBTvFv/xxyxW/8tf4u0frIjVw29/a3/FdNVVwOjRfK9+P9frdvO5GzcCL7/M7V56aWF6fykU25AIyUMPFb6hszX6kuyslWlkaqA3nM6WHD5Xq+DaNoswh4iiy0XB5XIxSpRo13D44Zy1OGwYcMghvFAVRPRIz9hMI0wA/QxfeIGzuZNlQp59lr6Gn35KYSgF+i0tFEmlpV3ruTJJLZaWMkImrY2ynenYXeQltgzDaDQMY5phGDtsvW3a+vgSwzDOszzvJcMw9jAMY3fDMM4yDCMPX1lFMTAMCq1YjD+4ZC0bupWEeoXQ/Q3bolrNzZzmfMUVyeu0AA42N94IfPVV1/+dcgoHnNJSXklpGpdQiD/axkbgvvtYdJ9MzCkUeWNXB5RoipkP+Uamir1//ZUsj1tZGSPsgcBWwZXN52YZKx3jxqLuPw1xMxWtlJcD99zD2YWzZrEtmbTXcbnM0pFsHeBLS4Hf/56Ns5PNWFyzhmnFe+7htqyzEzs6zHouudhvbc0sYuX15i4UuwvlIK/Y9gUNhfiF7RURHBunZr3Uh/Bt8+A+cwaOPpqzbi6/PHmJhK4DTz7Jmq5Exo/nbJkhQ8wfp6bxx61pPCaXXQbstx9NAnvFMVEocsHO9dzno/X3888r49NehhhIVz3XgLJf2HxuNu70tp/vvHloPWoGOjtN657EqNOGDSyRWLECuPtuMxUoLXdiMUaNsm0u3drK8fOZZ5I/54AD+JUbMYICMxikwKqoMMfbzk7T4qGiIn05nNX8VAxfhZ42NVViS4HmZn7Zq6sLNqs5f5I4NRv1Y/C7M1Zi4UJ6BYo1gx1ffcUm1NbaBIA/tn/+E9h7b9Ow1e1mJEtKXF58kWHv//yHYXmFok+T6Chv42pueyJX9AgiuKqfb4Dv6jSdAJK52o8ZA6xciY4ORu6lLiuxDlfXgZtuAv78Z35NxH1e0ny5Ci7DYJ3YlVcm9/IaMYJ9Fr/7XY69HR288PV4GOFyubj91laznlYeT0YyoajEVgqU2Co+0u9QmqX2GhwO2/m8T+FYXDjqSTz8MGcGJqsPCIfZjmfRoq7/u+wytpaQHL/DwbB9OGwWxp92GsPh3/9+75skoOhH9FRbnTQnaEXPI2OzzLpLSpKxEpq2rV5PUpNOZ/J63PvuY6Zg/nxgzz35mK6bBfO5CC6AUbOf/5y1Yna43ay9PftsRq/8fr5vXed4XF7OtxIIUDAZBh8vK0s+/lv3u7KSKc6eFlvqNDKAkRCtz9fLhBZgW5fwOXbCTMfduPFGswwiGbfdZi+0/u//gJ/9jPelTqutjT/k8nIOJn/8Iws999tPCS1FEelJs1Bl59DrEfuZjg4KhaRkUNtVWkqRpevx1hBWzjmH9a1nnAG89x4fEy8uaZNjneGYKePGAU89xa+2HZEIo2qzZtHTsKSEhfKlpfEeXFJA7/XymKSqzZL9drsZFesN7X3UqWSAEgyabXiqq3t6b2xImAHVikocpz2FK6Z/he98J3UY+d13GRZPpLaWIkxmHobD/DH7/RzYvF4OCuEwW07kchWnUGRMT5qFKjuH7ieHlkdVVRwG29tTtKfJcLaox0OxIsXvdkXnM2bQNuyss4B33uFjVsHV2pqb4PJ4OPP7nnuSR+kWLGBG4ZNPuG9VVWbaUzy4dJ3nq+pqc/a8RLsSkf2W9j6ZtCUqJkpsDUDEHd7t7l1teOKYMQP6nfMQHTkGUTgxo+QJTN3PgSP/tG/KYvWODhbE2w0kN93EgvhYjD/QQIBiq7SUonPtWg40N91EYaZQFJWejC4pO4fuJY8oZnW1OWPaVjBkMetRZhtKPZadSJk+nSnF888H3nyTj1kjRblGuABaTyxYAOy+u/3/v/iCbvcLFnB89ng4FosHl7jQS1NtiX6JZ1ci0t5HnOp70vhU1WwNMOQLq2ks/O7NaTLp7n7zzcAbb3CqcjoRdOGFwBNPdH38/PM5LRngILNlC4+Fx8MfrNPJq6rTTmNUS/U+VBSdnq6b6ql6sYFInp+1dca49AbMh1CIAkUsE+xKMp57jinF++4DpkzhY7pu1rdWV+c+SzsYZOu0Bx6w/7/DwYvmCy4wzap13bxIts5aDIXMptbWGq9EmpvZaUTVbCmKjlzNAL3THd5KJMKruAUL2GbnuutSzzwE6GJsJ7R2241+XAB/qJs28bakhION280LwZEjgZ/+VAktRTfR09GlxLYzSmgVjzyjmNJ02uOhaMg1siR4vWY/xWTNnI88knYQ555LA2mA54zqajM1l+t+lJQA117LLIKdYJMZkrNm0Z7CMLhta2qxpYXnM6czvsYrWZSrp70je/HpVlFIpA1DrzItTUFbG52GL7uMka3Ro1MXxK9bx+cm4vMxNejx8Ae8di1/kFVVFFluN3sfPvUUcMMNfFyh6BaUWWj/IlVNVgFq5DSNF8luN8dyMSLNFZkYJbP/7Dj+eLNo/ssv+ZgIrnxquITp0+mFmMwEdcEC1o99+aVZGiKpxcpKs49vZyf/rqkxo4DJarl6CiW2BgitrfxxylVJbyYYpCg691yGmvfcM3XrIF1nM1S7GTtXX00DU8Oge3FLi+nT4nbz8Usu4VXWLrv0rqbbigGAii71D9LVZBUoiimCy+ksjFO62CK0tSUXTaefzhnap54KfPMNH0ssms9H+O2xB0XV1Kn2///kE2777bfjt+Pzxc9OlFZziVGu3uImr8TWAKC9nVcvFRX55/q7gy1bOE6dcAJw6KHpxeG8efwhJnL00cBJJ3Hs27yZ65VieKeT+f0//Qk46CA+r7dH+xQKRS8l3czSAkYxHQ6zDKSxMf9egNXVZuF7sgLyCy5gSu+UU5hFkP2w2kLkI7hqa4FHHmFtrR3idP/00/E2Dk4n918iWs3NFI4VFeZjjY0UYz0d5VIF8v2cQIBfwNLSXjzz0ILfD/z4xxRHN92UxswPwNKlrC1IvHoZNgx45RX+EJubGdWKRnnV43bzquiVV7iNl19m1F+hUChyIgNj0UJjnexUV5c6+p+OSIRjbjoD1auuAh5+mKk/qaG1GogmtsjJhUcfBS691D4ipWnAL37Bi/HE/TQMiiq/n8+rqGDUS6J2oRAbZhe79ZoqkB+AhMO84vB4eqmXVgKGAdx+O81I58wxZ6EkIxjk7EO7H+VNN/E9t7aaBZMVFbwKKynh4HDVVXze6NHFeT8KhWKA0AO+ZS6XaVTa2JifppML0I6O1JGy3/8eOPhgRpkkwiQRLqeT42o2zavtOOkkCi67CVGGwRqyP/6RQtOqb0Vg1daa6c2WFgpIqTHryUlhSmz1U2Ixc6ZGsqm9vY2XXqKT8I03AkOHpt/na6+lL0siM2cC++9vGgG2t1Ng+Xzm7U9/ytD4wQfnd0WoUCgUPTWz1O3m+C7jfT6JqspK00A0GZrGC+JRoziGijATwSWzBPOtk9p7b1pP7LST/f8feYQtfr79tqunoniJiTeXpFrTXbwXGyW2+iEyGwOwbzzaG1m9moWYV11Fq4Z0+/zaa//f3p2HN1llfwD/3qRb2rRl38SCio64i4zLKOqMoqPOuDDjWhXccEFFUVkFRQURNwRHHUBAFBUXGNzX0WHUnzo4o7jgwozsKEvpnjZtcn9/nF6zvG/SJUmTNN/P8/Rp++ZtEkLanJxz7rkyjTjcwIGyKrG6Gr9swKp1INDq3Bm4/355p3PTTYlPKRNRBkjiytLcXPm7ZoZVt5XDIQFJfX30FYYOh4zjqakBJkwIBHjBb+xNWTEWJSXSo/W739lf/u678sb6f/+zD+7MFkXB2/skc6hpGrwMU2vt2iVPPtO8mOrq6oAzz5RlwCedJO/Wotm6VcqH4XJygDlz5Bequlqu1+wUbxom//lP4IUXgNmz06OHjYjSRBJXlublSSanrk7eYLZVQUFgP8FoWbLcXOCVV4DPP5eROYbTKX9XzZZAsQZchYXAokVStrTz+ecyGuKrr+wb9E0DvVmFzzIixY1pBiwuTo+9/bSWdyc9egDDhzef6m1oAK6+OrDMN9iECbLpaWWlnFdXJ7/sXbvKH4CyMmmunDkT2G+/9CitUpprw354RG1RUBDYuLqmpu3XU1wspbmIezE26dQJePNN4PnngaeeChzPygq8kTWzHWPhdMqq8Vtvtb983ToJuD79NPKG03l5LCNSHJnhdOaXLh3MmSMbR994o6wgbM6MGXJ+uCFD5N1PRYUEWia71amTrNRxOGQW1xlnAH/+c3pk/CjNxbAfHlFbFBdLYBHLsFGzhVl1dfOBUt++MiNr5kzgvfcCx03AZVYqxlq+U0reZD/8sH3lY8cOGRuxcmXzQWKyMNjqILxe+QXLzW1+XEKqWLlS+kdvv13q8801qr/xBvDYY9bjPXtKWbCyUlLJJoXtcslk4uxs4PHH5Zf+9tutfaxECdHc7KWWYGaMWslsGG3aSdrCvIZEa5Y39t9fGtZHjwa+/TZwPDtb7ovPJ/clHlOmzjpLfgXsslRVVcCoUcBbbzVfBk0GBlsdQPDKQ1MvT3WbNgHnnQdMniylv+ZSvOvXS/YrnNMpG1Tn5koKWWsJupxOoE8feZf3zTcSjM2ZI4EZUbuIcT88ZsaoLcw+ig6HvC60pYzndMrIBDOfqjlDhwLTp0t1Yfv2wPGcHMm2NTTEL+A6+miZ82VXCfF4ZJXiihXxu714YbCV5szKQ63TZ+Vhfb1Mhy8tBQYNklJftPtdVyevMXaNn+PHAwfp1rgxAAAgAElEQVQeKD0KjY3yS+3zSdDZpYv87LXXypY8RxyRHo8PdRCxzl6KR2aMMpJZGej3t30khNst19PShvuRI6VF47LLQkuYpnnfzH2MRwA0cKAEVHvuab2soQGYOFGGryZ7BWIwvvSkOTPTJF1WHgIS/PToIZucFhQ0X9abMkVWm4QbOhS49FL5Y2AaI30++eXu0UO+nzFDqi9XXZX6e0JSBxPr7KVYM2OU0UwZr6FBXidaS6nAZs/hMX8k994rFYUbbggNqlwuua76+thWSwbr21cyXAccYL1Ma5nDuGBB27N78cZgK41VV0uQUVSUPvOi5s4FPvhAMlI5OfLuKVrZ89ln7asmffvKkuOqKslqmd0yzEatubnSE/bSS8B998k7K6J2FevspSRMJaeOxazC83ja1jjucsnf6crKlmWIHA7p39q4UQZUB8vPl7/3Ho/83Y6Hbt1kNeSRR9pfPmuW9Pnu2JH8DakZbKUpM0/F5ZIncDr4+GNZvvvAA5LRMqteIlm9WtLB4bKz5TULkF9ap1MCLdNn4HbLu5kxYySzte++6dHHRh1QLLOXkjSVnDqWwkIJuswCotYqLg6s7m6JggKZ/r5smWSegrnd8hSuqYltPEWwoiIZPTF0qP3ljz4qqxjjsSoyFgy20lBjozxxsrPTY89DANi2TYaW3nmnvMH3+6MHiWVlspTX7o/D1KmBeVpayzuWgoLAvofZ2TJFfuhQuc10Ka8ShUjiVHLqWEybSVsmu5t9E01fbEv06QO8+KK0gKxeHXqZqcRUVUWei9VaLhcwb560pthZsEAyXMl8081gK82Yhkez4iSuT54ELTNvbJSVh8OGydYLZqp7pKGrPp/0dW3aZL3sz3+WjUrLy+V6/H755TXTgQsLJa28dq0Edukyb4zIVhKnklPHYdorgLY1zJtREK3ptzriCKlijBwpZbxgxcXyNzuWeWDhsrOBhx6K/Cvy9NPyupKs7BaDrTRTXi7BS5cucd5AOYHLzCdNkqu88kr57PdHH/Vw332y92G4gQOlglJeHmjYdLvlurxeeXezbZsEWQ88IH1dREQUGA1kKiOtYd7ItnQUhDF8uKw8v/LK0J4ppQLzwCoq5O93PDgc0it22WX2l8+fL+MpYt1GqC0YbKWRqqrAVjxxX1mXoGXmL74oTe7Tp8sva01NoNRn5623ZCZWuKIiGUwavPdXfr6UUc0vcUEBMHYscMEFwAkncMwDEVEwM/S6rq71DfMFBRKwtWTQabD77pOfnTw59LgJuJzOQBIhHpSSVpNRo+wvX7xYXo/aG1+O0kRdnQRbLleCSmMJWGb+7bcycsFkmWpqJLMVqVdr3TqZQhxOKWlw7NQpkALPy5Pvs7Ol7u9ySUPmli2yR2K6rM4kImpPbrf8vWxtw7wZBdHY2PJREIAEU88/D3z4IfDEE6GXORyBvuN4NrArJa8DN99svWzwYPvXmURjsJUGGhsl8k9oQ3ycl5lXVUmP1s03y+BSQH5B8/PtG9Y9nsiDS6+/HvjNb2Tz6cZGeRyKi+WPRnW1/GJVVwN33SV7dLVkj0Uiokxl3qi2dqPo4FEQren76txZxvDcf79sGB0sK0vuj9lHMV5T35WSXUeCizMHHSSbZydjFBCDrRRnJsQDCWiIDxbHZeZaA5dfDhxyiARcubkSfCkVOSs3ZQrw9dfW40OGyLuQ7dslM2YG9RUXS4BWVyd3c9IkaZ4fOpTlQyKiaEwJD2h9w3xRUetGQRj77y9jGEaNkt7aYMHb+rRlAGs011wjb8QHDJCRFF26xPf6W4ovSynO1LJNbTth4rjMfPZs4LvvZPxCQQGQ88IS7HVCfxxymAO9j+oP17LQpvulS2WlSLhevYBHHpF3OxUV8g6ouDjQp1VZKb+kb78N/PijzPCKNreLiIhEVlbbJsyb+YjV1a2fzH722cC550oAFN6jlZcXmDLf2r6w5lxyifQPm51FkoHBVgoLnhAfaUxCXMVhmflHH0nz4X33yVJj17Il6DJuJHJ/Wg+lNbI2r0fx2JG/BFzffBN5cOlf/yrvuHbulPivUyd5V6K1/HHo8sYSdB46GHde9zOe2HU6+rzPDXqJiFoqNzcwYb41Q0bNKIi2TIKfOVMCvbvvtl4WPGW+LRPvo2mX19AoOO4xRXm9krnJy0ufCfHbtsm7lvv++D6OHzECzi0bAIcDKuztj8NTi8IZk/DziaUYOdJ+zsqECTLqYdMmeefVtWtg3EVZGdDp1SXoe9dInFO3GCOwCEfteBm48l1AgbOIiIhaqLAwUCnIzm7ZSnenU6oW1dXyOdLqcjtZWdIwP2iQtJr88Y+hl7vdkvWqrpbb6SjVCma2UpBpFDSNg+nA55ORC38e+BVKl5yGrM2SyQoPtAzH5g24+WYp/4U7+WRgxAjgp5/k3VZxMdDvwyXYfUh/9NndgX1O6o/d7x+NBXUX4Afsjam4TX4wDqMqiIgyTadO0uvamhWBbrf8TFs2lu7ZU9pHJk4Evv/eerkZb1RZGb8ZXMnGYCsFlZXJE75z5/Rp9r7tNqm1T//qDDjqml8XPKf4Vrz6qvV4//6yYmXbNikVFhQA/T9agh63jvwlgMv9aT3W7OqJiZiOpTgXeQhavxzDqAoiokzkcEjlwLzRb+nPFBbK3/22TIE/5hhZGHXlldYSpmkbifcMrmSK+aVcKdVFKfW2UuqHps+dI5w3Uyn1tVJqjVJqtlLcGtiOieTN0tyYJWgLnmCvvgosWiS9Wnk/2aSqwnyaezTGVt9mOZ6fL831Xq9s75CbC3TvDvR8aBIcnkAA50EezsNS3INxGIhvQ6+kjaMqiIgymRmpU1/f8l4sM8qnLdktQMb6HHKItI2EC57BVV6e3E2k4yEeeZPxAN7VWu8N4N2m70MopX4D4GgABwE4AMCvARwXh9vuUMxU34KCONWpE7gFj7F+PXDppcC998oCRl8f+2BHO53QSmFH7wNxjvt1eH3WpZXjxgH77BNYFty9e9O7my2h2aoxeAAHYTVGYGHoFbRxVAUREcmf0Pz8wG4lzWnroNPgn3/8ceDzz+1flkwrjc8nAVe8ZnAlQzyCrTMAmLmwTwA40+YcDSAPQA6AXADZAH6Ow213GGa/quzswEqPmCVoCx7D65VNoS+/HDj8cPnFqBo/DX5X6Lwuvysf5bOewJaNfgw/dDXW77RujHj66cD55wObN8sveY8e0hRfWwt4ewYCuBcxDG/hJDyGq+Do2jUuoyqIiEgUF8vrUHl5y0Y75OVJf1VVVduCIbdbGuZnzLCftZiTI6+JXm/8R0K0p3gEWz211lsBoOmzZZKF1vr/ALwHYGvTx5ta6zVxuO0OQWsJtJSK8+DSBGzBE2zsWOkru/jiQCbOM6wU26fNRX2vftBKoXG3fqiYOReeYaVYtAh47TXr9QwYIDOytm+XX/CuXYFu3QKZvu03SgC3Dv1wNR7FszgPhfk+2eI9xlEVREQU0JaBp0VFEpi1ZnxEsEMPlcGjo0bZX4fLFdgIO94jIdpLi0Y/KKXeAWC3CUqLUiRKqQEABgLo23TobaXUsVrrlTbnjgQwEgBKMqT/prJSlt6a0QZxU1IidT674zF64QXgb3+TTaaDR1NoDfx8Qim2nViKrl0Dx7/4QjYHDWcqfw6HlA+LimSlSkOD/FK5XIDjwlLsyFU4f+yvMNY7E4ftvh3qbmaxiIgSwZTvysrk9am57W1yciTDVVUlf9PbsrDrqquAf/wDGD8emDPHenlBQXqPhGjRQ6K1PlFrfYDNxwoAPyulegNA0+dtNldxFoCPtdbVWutqAK8DODLCbc3VWg/WWg/u3r172/5VacQMk3O7E7B5chy34Am2di1w9dWyanC33UIzcR6P/EIEb8tTWSm/SA0N1usaMwb41a+ArVsldd2njwRsJtAyv+S3f3cBco86DJfsuA+ODesYaBERJZCZ8VhTI3/Xm1NUJH+72zLoFJDXkfnz5Y35U09Fvg0zEsLu9SSVxaOM+BKA4U1fDwewwuacDQCOU0plKaWyIc3xGV9GNBtM5+RIijTu4rgFj+HxyJYL110nqd/gTJzW8otp3uWYY2PH2lcu//AH4KyzJNDyeoG+feX6wgOtt98GVqwAHn44eftaERFlmsJC+XvekvELWVnyXr62tvXb+Bhut1RN7rnHvn/LjIQwM8HaejvJEI9gawaAoUqpHwAMbfoeSqnBSqn5Tee8AOC/AL4E8AWAL7TWL8fhttOW2WDa1McTNggjDlvwBLvhBqlCnnuuNRNnfsmCy4rPPAO8bPM/fSj+jSc//RXyli1BVZUEWjk5EqwFB1qbNgE33wzMmgXsu28CHyciIgoR/Pq0a1fz/VsmadDWURCAjIK44w4ZC2G3wtHhkPtktm1LlxWKMQdbWuudWusTtNZ7N30uazq+Smt9edPXPq31lVrrgVrr/bTWY2K93XRXUdFOG0wHi3Hm1jPPAO+8A0yebN1CyO8PZLXMdg/ffy/nhitEJZ7DOei07Xvsc+9I7P/FEhQUSNYsONDyeqX8eMklkgXL4uZSRETtyumUbJLZ0qe5c83f8ljKfNdcA+y9twRddkxPWWs30U6mNJlP3rF4PBKxFxa24+aYMc7c+v57eadx//3SwB6eYaqtlYDLvLPxeBBx38O/4koMwH8BAFneWgxYMAn19ZIpC27EnDZNfqHGj0+/Zkgioo6iNf1bsWzjYygFLFwI/P3v9ivYAXntLCqSIazpsEKRwVY7S3ifViQxzNyqq5N5WqNHAwcdZM3EmaxWXl5g6v2UKcAPP1iv6xIswPl4NuRY9k8bkJcXug/k66/Lx+zZgWXIRESUHC3t3wrexqe+PvJ5zenaVRrlJ0yQ+Yt28vPljXh1dcua+JOJwVY7Cp6n1e4BRAwzt8aMkT6ts8+2XzFZUyP/NlNaXLECePpp63n7OP+LObjOcryhV0lIoLVxo0yTf+ghYOBA9mkRESVba/q38vPlTXks2S0AOP54qZCMHh25GT5dVigy2GpH5slgNthsV5FmazUzc+u554A33rDv03ItW4Ieh/fHPgMdOOAP/VH40hJs2CCBUricHODOi761lE39efmonhgYRdHQIPX6yy4DTjstCY8TERHZCu7fijbiQSnJbjU0xJ5xmjpVqiezZ0e+LbNCMZX3UGSw1U7q6iQDVFCQgHlaLdGGmVtr18pE3/vuA3r1Cs0wuZYtQfHYkcjavB5Ka+RsXY+CW67Gdedts/0lHDkSyP/TaVg1ci5qu8t0eW/vfii/dy7qhgVWSN53nzxGY8cm6XEiIqKI8vLkb3R1dfT9E80m1W2du2VkZQFLl0oP1yef2J9jNq32+1N3hSLXd7UDs4lmXPc9bC0z8mHSJCkdlpRIoBVhFER9vYx3uO46WYobnmEqnDEJDk9oD9iMuhuwar1ltyYcdxxw4onSIrbuN6XwnVuK4mLryIuVK2WPrDff5DwtIqJUZfYqLC8HunePXIEoKpIRR7W11vf6rdGvn0yVHzNGKi12/c7m9bWiomVT79sbM1vtwNS3EzpPqyVaMXNr3DjJZp13nn2GybkltNfrIxyFOzDFcl6vXlIWrKmRAK5bN9gGWtu3ywyve+4B9t+/mccpxhEWRETUdqZ/y8y6iiTWTaqDnX8+cNRRwG23RT7H5QqMnrCb0ZVMDLYSrKpK3gF06pQ+c6JeeglYvlxWFAZvuxPM1yfQ61WBIpRiCXxhiVKlJGjz+eQxMPsehgdafr80QJ5+ujThR32cYhxhQUREscvKkjfO9fXRS4WFhbFtUh3s0UeBjz6yH5QdfHumYd7rjf0244XBVgJ5vYGNOdNlTtTGjcAVVwAzZ8o+hZEyTFuvmwZ/Xj40gKvxKNZhD8s5I0bIddTUSIq3Xz/77N7cufKLMXVqUKo5UvYqhhEWREQUP+a1zSQV7OTmykd1dezZreJiYPFiWbC1ZUvk80xyo7w8dbb0SZNcS/rx+6V8aKL/dNDYKJXFESOAwYMj1+G9XqBsaCmysoA37lyFZyousJxz8MHAH/8o+x7m5gL77CMlxPDd4L/4AvjLX2RcRM+eTQdN9soEVSZ7BcQ0woKIiOKrUyd5Tdi1S/q3wv/GA5Jt2rFDAq5Y50sefzwwfDhwyy3Ak0/a355pmN+5U3q4UmFWIzNbCWKWoCa9T6sV7rhDnqQjRkTPxFVXy3lfHliKaxsetFzudst+hlu2yDuZAQOkdyv8l6K2VlY7Tp4MHH540OXRsldtHGFBRETxZ/q3fD4JbOzk5Ej/VnV1fEYzTJsmjfcLF0Y+xyQ6vN7Y533FA4OtBKitlSWxhYWBieqp7r33gHnzgDvvjL5isr5enrxayzsLuybEcePkvLo6iYH22MM+S3b77ZIBu/TSwH6KAKJnr9owwoKIiBInJ0deN6I1phcVyetGPLbWycmRvXpnzQLWrIl8nhlTkQoN8wy24qyxUaL73FzrENBUtX07cNFFwPTp0lcVLRNn3pnMmwesXm29vBRP4caH+qPz60vQpw9w4IHyDsMMQO3d14Eeh/fHu7f9AytXyupDS3AXLXtVWipNXuaO9usn30dZWUlERInldksQVFFhv51PVpZUTGpq4tNHtd9+sohrzJjojfCmYT5eWbW2YrAVR8Hb8QRvP5PKtAYuuURWAg4ZEn0lYF2dZKxWr5b4Jlx//Ii/YBQKdqzHH18eieO3LEFOjnUA6rbNXtw8fyAePetN7LWXzQ01l71qxQgLIiJqH81t51NYGL/sFiBzIDt3lq3dounUSc6z6+9qLwy24qiqKonb8bTRww9LE/tVVzU/dK6mRhoOp061vjNxwIcncRGKIcXxbG8tuj8oKwSDB6D6oTAcT2AUHsaps38PZ26W/HYGrzhk9oqIKO04ndInFWk7n6wseZ2prY1PdsvhkNWJixcD//539POS3dLDYCtO6uslWk/adjxt8MUX0hQ/Y0bzE9s9Hnm38thj9i1V4zEDx+DDkGNm8GnwANRZuAG1yMdETIcCAr9x4fOymL0iIko7LpcEVNXV8roYzqxGjHUbH6OkREYV3XRT7PswJhKDrTgw+zFlZSVxO55WqqmR6fATJgB77918erWsTLbT+dvfrJcNyl6N2zDVctwMPjWfv8BBuBsT8BQuRBZs3ta0ZF4Wp8cTEaW04uLAnKvwPimnM5DdsuvtaotLL5VV7/fcE5/rSwQGW3FQUSEJmnQa83DjjcABB8gsrJCVgDaqq4EffwQeeMB6mSu7EXddsd6So/W78lE1XnqsqsZPgyevEy7EU7gfN2EPrIt8Y9HmZXF6PBFRyjN9y5HGQbjdck68sltKAY8/LsmADz9s/vxkYLAVo9paSV0WFSW/JtxSL7wAvPOOjGiw244nfOVgwxNLMHu2lBHD3atvQmNZJV7+41x4e/eDVgqNu/VDxcy58AyT0p9nWCnGHf0hBuRtwoV4MvqdizYvi9PjiYjSQk6OlAw9Hmt5z+kMjGSIV3arVy/ZrPqWW+IXxMUTJ8jHwETtOTnpM+ZhwwbZGPqRR4ImtgcxKwdNQ3vW5vX4eOY/8WGjtWfqVLyKaxpnw7/UCQf88PUpQfnsJ38JsoyPPwaWfrkf3v5kP6gvnwqdDh+suXlZnB5PRJQ2Cgulb8u8TgYvHHO7pZ2lqip+E97PPRdYtkzmRc6cGZ/rjBdmtmJgMj2psBVAS/h8wIUXApddBhx6qP2KyeCVgwCwDv1wY6P1WdsN2/E4LoMC4NQ+KK2RtXk9iseOhGtZoKzXsGQpbjpnI+Zv+yMO/GN/aYo3Kw2BwJ1oyYpDTo8nIkornTpJ10d5eehxh0MCLo9HVi/Gy6OPSuXmvffid53xwGCrjczGm+k05mHGDHnSX3RR5O14glcO+qEwAotQBWvX/1yMRC/8bDnu8NSicIaU9VzLlmDqhDqc6HsDf8QrUBuC9jhct07uTGOjfG7JikNOjyciSitm2xyzYj9YQYEEXfEs+3XpIgHXxInxm+cVDwy22sDMEHG5ou8hmEo++QSYPRt44Nhl2OekQD9WcBYKCKwcBICHMBr/wPGW67oYT+As2CxLbGICtvduex/v+4bgAYwJXBhLjxXnbxERpZ38fBmJZGZRGg6HBFx1dfHNbp11FnDEEan1PpzBViuZKfFmeFs6qKqSeGT6KStx2IMX/TLJ3a7sVzV+Gvx5+fgGAzEBd1uua3dswCyMhoaC32Gf0vP1KcGOHcCosjvwBIajEGFvL4J7rFo7yoHzt4iI0k6nTvIeubw8dLp8IrJbgGS33nwT+OCD+F5vWzHYaqWqKql8deqU3NH/rXH99cDhhwMXv31xSD8WEFr2A4CyU0rx/bj5uDBrKephnc66EJfA2bkTHrzfj60znoDfFVrW87vyUTluGsaPBy4oWIEhsHmmmx4ru1EOF14IdOvGcQ5ERB2IwyGvm+HT5ROV3eraVao548ZJI36ypUm4kBq83sCU+NzcZN+bZjRljJ5T5+LDp/6H2/dbiqyt9qv2TNmvoQGorATu33w+/tN4oOW80ZiF43I+xntDp2HQIECVlqJi5lw07hY68uFZZyl++AEYd3dx9B4ru1EOgOwJxPlZREQdSl5eYLp88ObRicpunXMOMGgQcLe1SNPulLbbLTJFDB48WK9atSrZdwOAJF62bZM0aPfuKT68tCljtKG2KwZjFV7FaTjM9Q10ngvOXTstpzfu1g8/f7IOO3cCX30FXHyxdd+qfbEGH3Y/Ex/+bgqqzyjFMcfYLwz4+WfgpJOAefNkYKrz2SUSVG3YIBmtadMCpT+Hw363UqNfPykVEhFRhxDptbSqSj66d4/vzMpt24ADD5Sh3Gef3fwQ71gppT7TWg8OP87MVguZKfGm7pzSJk2Cr7YOF2MxbsSD+DVWSflQw7bsVzV+GioqJMl0223WQMuJRizMGYlVp07BhiGlOPhg+0BLa0nZ/ulPwMknN50TrcequZEN69dzSx4iog5EKRmX1NgolRQjUdmtHj2AWbOAZ5+N7/W2FoOtFqirk0DE7U58VBwXGzbgAYyBHw6MRWBGlqOizLbsV3ZKKerqgEWLgLVrrVc3EdNxpPcDHLFiEvbfP/LCgBdflPjo1ltbuErTbpRDOG7JQ0TUoZhB4DU1gc2qE9W7BQDnnw8891xyX79ZRmyG3y9pSKdT+rZTPqsF4PM+p2Lo1ifwL/wa/bH+l+ONu/XDtk/XhZzb2CgtUmvWyPyt8E1DD8bn+BSHIwcN0Erhx7V+5Fn75rF1q2SzFiwA/vCHViweWLIEGD1a7kQ0LCkSEXUYWgPbt8vn7t0DXSU//yxBUZcuyb6HbcMyYhtVVMgTIC3Kh5BpvBeoZ3B/9viQQCt4Y2jDTPWtrwduH1NhCbSy4cUTGI4cyNuMhl4ltoGW1sDYscB55wFDh7ZylWZpKbBjB/DUU4Gp8na4JQ8RUYdhyonBm1UrlbjsVrIx2IrCbKDpdqfPJtPjxgG/OrwYJ07/naVcGL5nYWWlZLYWT/gGP/xsrQ1OwR04GKsBAL5ca7BmPPecZLYmToxhyKvp7YoUcHFLHiKiDiU7O7BZdV2dHHO7E9O7lWzciDoCv1+ibfNkSAdvvAEsXw688AKg+5Zi2wWRB36aQPK774DH3t/XcvlhWIVb1H3QWqG2WwnKx06D+rP1+n76CbjrLmDxYtl1PWbTplk3quaWPEREHZLbLYFWebk0s5veLTNtPl0SHc1hsBWBmXKbLptM79ghG0zfcw/Qu3f0kqdZBeLzyVQGHZbgzEG9lA+1F08+4cc++wC77269Hq2BCROkfPi738VpyKtZrRhpXAQREXUYSkmbzo4dkuDo3FmCrZoaCbjStXcrHIMtGyalWVQkm2imOq2BK6+UuVZHHRX9PmstT2ilgPnzgR9/tJ5zB6Zgf3yD6q790Ls30LOnffD20kvy8wsWxHmPyNJSBldERBkiO1syXGbP4by8QHarsTE9Xoebw56tMKZZzyxNTQdPPgl8+y1wzTX2QY9r2RL0ODyw+bT7pSX473+B+fP8lnOPwMe4CfejMScf3148Dd2720/L37kTmDJFMmlxKR8SEVHGMr3R5eXSxlNQIG/yO0rvVkzBllLqbKXU10opv1LKstQx6LzfK6W+U0qtVUqNj+U2Ey149WE6WLcOuOkm2Y7ALt3qWrYExWNH/rL5dPaW9eh553WYeG0F/Dr0vz8XdViIS+BwAKuunIvaM0vRtav97U6eDJx+etDwUiIiojYyqxNN9cX0bnk8kt1Kd7Fmtr4CMAzAykgnKKWcAP4C4BQA+wE4Xym1X4y3mxCmfFhYmB5pS78fGDECuPxy4IAD7HumCmdMsmw+fVf9zfj+J+vqw9txOwbiWyjtR8VppejRwz6QevNN4PPPZXhpczNJiYiIWiIrK7A60UwC6CjZrZiCLa31Gq31d82cdjiAtVrr/2mtvQCeBXBGLLebCGb1YTqVDx98UDbzvOgi2M6/AgKbTBufYRBmYqzlvMH4F27GfQAAT7cSFBdbV2G6li1BzuCDMPnSTVhQfQ76fcCp7kREFD+mnGhmb3WU7FZ79GztBmBj0Pebmo6lFLP6MF3Kh19+CcyYAdx5Z+TtcwDA1ycwn8qLbFyChfCFrYvIhhcLcCmy4IOGwv8un4YePUKb4k05ctzW0TgDK/C7nc/DcRW30SEiovgKLiea7FZ1dbLvVWyaDbaUUu8opb6y+WhpdspuCEHEPYKUUiOVUquUUqu2b9/ewpuITbqVD+vrJZt1yy3AXntFH/Ow65Zp8OVJrW8aJuFLHGQ551bchQPxVdN3Gg1nl1oyZYUzJuF9zxF4G0MxA01td7W1MqKBiIgoTrKyJMjyeKR6k58vLzc+X7LvWds1G1porU+M8TY2AQie0tQXwJYotzcXwFxA9kaM8babFTy8NF3Kh7ffDvTpA5xxRvSNNQaUZksAACAASURBVLUGtv62FDWTgbKHnsT0bRMt5xyMzzEBd//yfX3PfrZN8d7N23Al3sYjuAaFCHqLsX69ZLc4qoGIiOIkeNhp164SbFVVpU/1KVx7lBH/BWBvpdQeSqkcAOcBeKkdbrdFzOrDdBle+tFHwMKF0pzeXHBoZpQ0nlOKy/q8gUaEjuLNQgMW4hJkQ4rh/qwc7Lxpmm12b6r7PgzCv/EHvGq9cGSCy4lLlgD9+8sKgP79WbokIurgzLBTv18GnObnS6YrXbNbsY5+OEsptQnAUQBeVUq92XS8j1LqNQDQWjcCuBbAmwDWAHhOa/11bHc7PurqAise0qF8WFMDDB8uma3ddotePqyvl3cCBQUyh+vzz63n3JwzG4fgc2gA3qKuWDtpAWCzxc/XXwOP41I8mDfB/sYSWU5cskSCufXrJSpevz7xwR0RESWd2S6vtlZeo7WW18F0pLROeKWuzQYPHqxXrVqVsOv/+WdJlnTrFj1wSRWjRgHbtwPTp0cfueD3y9YHTqdsy3PiiYFNPo099pDr6dxZrsvrlaRR+FBUn08m0599NjCu7xJkjbjQ/kaVkhuOt/79JcAK16+fDBkjIqIOS2t53dNaAi6vV3Y1icv2cAmglPpMa22ZO5qid7d9dOsmwUY6BFpvvSXb49x8c/OzrUxptLAQGDfOGmgpBVx3nYyL6NRJLu/c2X76/IIFMkH+6quBrOGlEuTYKSmxPx6rDRtad5yIiDoMM+zU55PXtXTNbmV0sOV0pkf5cNcu2WT6rrua3xrH45ESotsNvPgi8OGH1nOGDQP69pUd1r1eabK3mz6/cSPw0EMyYuKXnrZp06zRXn6+HE+ESEFcooI7IiJKKWYBm9crwVdNjQRd6SSjg610cf31Ugo8+ujowWFjo5QNc3KkOX7qVOs5vXoBZ54pGS2XS7JaXbtaVzVqDUyYID1iRx0VlP0rLQXmzpUMl1Lyee7cxK1GbO/gjoiIUo4ZzeT3S5Yr3bJbDLZS3LJlwP/9n5T9opUPzQA4pWTI6YQJ9lscXH01UFQkWa2KCmmgtxuK+vLLwObNwNixNtPpS0ulX8rvl8/xCrTsVh22d3BHREQpx7y2KQU0NMiQ03TKbqVBES1zbdsGXHONlPK6d49+bk2NPAGLi4HXXpMer3Anngjsv79kt7xeyYT16WPd/7CyUlY8zp4tQVm7MKsOa5v2cTSrDgEJrBhcERFltNzcwIKu4BX36YCZrRSltQRaZ50FDB5svyG04fVKlO9yyRNw8mTrOcXFwAUXSPmwsFACquJi+yfqPfcAQ4YAp50W/XbjatKkQKBlcEI9EREFKSqSaovHI9WbdMluMbOVopYulflWS5farxI0tJbAyemUBsJbbpFlsuEuuURWX/buLRN5nU5pig9fifmf/wCvvAK8/347v2PgqkMiImqGwyFJAxNsFRU1v0I/FTCzlYJ++gkYPVo2mW5usr2ZEl9UBHzwAfDcc9ZzDjsM+M1vpHzo90sWzG7UQ2MjMH68BGz77BO/f0+LcNUhERG1QF6eVGbq6yV5kA4YbKUYraVV6dxzgUMPjV7GMzXr/HxZVXjrrdaUal6etDt17SoBVllZ4IkabuFCyY5dcYUstW1XXHVIREQtZNpgysqssyRTEYOtFPPkk8D//gdcfnn08qHfL+XDrCxpGnz4Yfm5cMOGAQMGyPY+VVXS39Wli3XUw5Yt0oh/111J2uiTqw6JiKiFnE6ZJO/3y2KyVMeerRSyaZNMiJ87137IaLDKSpk10qkT8MUXwLx51nMGDABOPlnKh06njHpwu6XkGG7yZGmgP/roJE7U56pDIiJqofx8yXCVlcmK/WgJimRjZitFmPLhhRcCBx4Yfd8nj0fSpgUFMvLhrrtk7EMwp1OCp5495WPXLnkH0KWLtTT57rvAmjWytY9lplZb2c3MIiIiiqM+fSRBsGVLsu9JdAy2UsSiRZLZuvTS5suHVVVSBtRatuT57DPreaecAgwcKHFOba38TGGhdYWhxyO9XrfdJk/auDAzs9avlztpZmYx4CIiojjKzg4M6a6uTva9iYzBVgrYtEkmtd95Z/P9UmaT6exsmfD+0EPWc3r3Bk49VfY/zMuTFGukUQ+PPALsuy/w5z9HacZvbZaKM7OIiKid9OgReE1M1blb7NlKMq2BK68ELroIOOCA5suH9fXSEF9bC8yZY7/stbRU+rRKSqS3y+ORGVvhGbMff5QViK+/Lr1ctpqb7G6HM7OIiKidOJ2SZNiwQVpmmut5TgZmtpJs8WJ5glxySfTyoc8npcCsLJmH9dlnwIoV1vOOPRY4+GBgjz3kvPJyyW6FN8VrLeXDSy8FDjkkSlN8W7JUnJlFRETtqHNnaZjfts3aw5wKGGwl0ebNMkC0JcNLTfnQ75fm+Lvvtp7jdgPnnCNZrO7d5Wfq66U0mZsbeu7rrwMbNwJjxlgvC9GaLJUpN65fb43eODOLiIgSxOmUcmJ9vbTOpBoGW0liyocXXNCy1Yder3zt9wPPPms/U+uCCyTICm6KLyiQxvhgtbXSED91qqxUjKqlWargpnjzDzQBF2dmERFRghUVSdKhvFxW6qcSBltJ8tRT0jPV3OpDn0/6rvx+iV+2bQMefdR63n77AccdJ71aBQXyZDNzuLLCOvNmzQIGDQJOP70FG023dLK7XblRawm01q1joEVERAmVlSX9Wo2NUtnx+ZJ9jwLYIJ8EW7cCN90E/PWvzTfyVVTIE0cpWW0xbZqkSYM5nTJx3u2WJsHqavlwu62N72vXAk8/Dbz1VpSm+GAmSJo0SUqHJSVyJ8KDJzbFExFRkrndUs2prZVERXMtOu2FwVY70xoYNUr2PjzooOjlw9paCazMqIf335fNpsOdcYaUDnv3lsi+rEyut7g49Pq1BqZMkfLlQQe1YlJ8Sya7l5QESojhx4mIiNpBdrYUXxoaAnsHR+1LbicsI7azF14Avvmm+b0PzerDujoJoBwOaaQP17MncN55ElgVFUmd2uORr8MHmL75pjTlX3+9dW/EmHEjaSIiSgFut6zCNyvyU2H2FoOtdrRjhwQ6d9zRsvJhba0ERYWFMrx0+3breSNHSqDVqZMEZJWVEtkXFYVmrjwe4PbbJbPVo0dc/1mCG0kTEVEKyMuT10GnUxIXqTBZnmXEdjR6tDSlH3ZY9MZ0jyewkiI/X1YeLlpkPe+oo2Tj6OLiwKDT+nr7AaaPPSbb95x5Zgua4tuKG0kTEVEKMKsSHQ4Jtlwu62Kx9sRgq528/DLw8cdSRmyufFheLgFXly6S1ZowQVYjBsvLk96r4mKJ4JWSsqPLZW1837gRmD8fePXVFjbFExERpTGXS14THY7A62q3bsm7PywjtoPycuDqq6V82Nx/dkWFlALdbgmknnkG+M9/rOedfz6w556BaL2uTp5Qbre1GXDqVODiiyWj1uKmeCIiojSllPQtNzQEEhzhSYv2xGCrHdx8M3DiicARRzRfPiwrkz6tzp0l8Joxw3peSYlsHN2liwRYWgfSpOEDTFeuBL78UkZNpMKKDCIiovaQny9Bl98viY5oq/8TjWXEBHv3XZlptXy5dbFeMJ9PGugbG2UKvMsFTJxov9H0qFFAnz7yM0oFpssXFkpJ0WhoACZPluvp0ye+/y4iIqJU5nBIdqu6WhaNJaxfuSX3JXk33fHV1MhqwdtukwAqml27AgPYioqATz8FnnvOet4JJ0iGrLBQAjO/XzJiBQXWfqxFi2Q0xAUXJLcxkIiIKBnMCKRkr0jkS3ACTZkCHHqobKMTLdiprZWxDgUFkur0+SQbFc7tBq64QrJUHo+c5/dL9O52h0btO3cCs2cDS5dK8EZERJRpnE6pFNXWSpIiWaVEBlsJ8q9/yf6Hf/tb9PKh3y/b9wCyr6HTCTz+OLBmjfXc4cOBvfaSnq6qKvnZujr7AaYzZwKnnSajIdgUT0REmaqwUF4j2bPVwXi9wGWXyciG5nqltm2TiLtPHxnnsH07cO+91vP23ltmZPXqJeXGujo5np0tWa3gJ9HXXwOvvw7885/Rx0wQERF1dKnQRsOerQSYOVN6pU45JbRhPVxNjQRXxcWBifJ33SVZq2BKAddeC/TtKysPPR757PNJtB6cOdNaesSuvRYYMCD+/zYiIiJqnRSI9zqWNWuAWbOkuT3aAFG/H9i0SYKxPn0koPr0Uxl6Gu6kk4Bf/1rKhVVVkglTSsqJbndomfC116Rf65progd6RERE1D6Y2Yojv182mL7+ehk4Gq1XautWKTfutpukOBsb7ZviCwsDTfFmnpbPJ5e5XKFlwro6GZw6eTLQtWt8/21ERETUNgy24uixxyRoOuccyTpFUlkpw0u7dg0MIV282L4pfsQI4Fe/kiyVxyPBllIyoDQ8czZ3rux/eMYZyZ0nQkRERAExBVtKqbOVUl8rpfxKqcERztldKfWeUmpN07mjY7nNVLVpk/RKTZkSvXzY0ABs3izBUq9ecmz7dunzCjdgAPCnPwX6uSoqJJhzOCSjlZcXOPennyTYmjyZ+x8SERGlklgzW18BGAZgZZRzGgHcpLUeCOBIAKOUUvvFeLspRWtpSC8tlcxSpOWlWkv50OeTZndz3vTp1qZ4ALjuOmD33eXrujoJtpSy32x6xgwJzH79a456ICIiSiUxNchrrdcAgIry6q613gpga9PXVUqpNQB2A/BNLLedSpYvlxLgHXeEZpvCmSnx3bsHVhD++9/2k+JPPhk49tjA9ZWXS1bL7ZZgK7hMuXo18N57wEcfRb99IiIian/tuhpRKdUfwKEAPmnP202k8nJpiJ85U7baiaSuTmZquVyBrXv8fin7hXO7gauukmnygDTS79olmbDc3NDNprUGpk6VzFr//nH7ZxEREVGcNBtsKaXeAdDL5qJJWusVLb0hpZQbwIsAbtBaV0Y5bySAkQBQUlLS0qtPmvHjgd/+Fjj88MhN6T4f8PPPEhj17h0oHz73HPD559bzL74Y2G+/wHllZRJwFRdLRix4QNubb8rlV1/NUQ9ERESpqNlgS2t9Yqw3opTKhgRaS7TWy5q5vbkA5gLA4MGDday3nUgffAC89FLzW/KUlUlPVo8egfMqKqRXK1z//tL7ZXqyGhtlbpbZ3ym4V8vrBe68U5ryOeqBiIgoNSV89IOShq7HAazRWj+Q6NtrL/X1wMiRMhurl13er0l1tQRbhYWBVYUA8MADEkSFu/56mb1l7NghQVVBgQRbwdmzRYuAkhJpjOeoByIiotQU6+iHs5RSmwAcBeBVpdSbTcf7KKVeazrtaAAXAfidUurzpo9TY7rXKeCeeyTQOemkyPsu1ddLQOVwSP+VOe+774CFC63nH3ccMHRooBzo80mglpUlGbHgrFZZGTBnDnDrraE9XERERJRaYl2NuBzAcpvjWwCc2vT1BwA61DCC774DZs+WnquCAvtz/H4pFdbVSYnPlA+1lrKfmQJv5OZKViu4yX7HDvn5zp2tO5Y/+CDw+98DxxzDUQ9ERESpjHsjtpLWslLwmmuAPfaIHOhUVMiYh/x82dPQnPfaa9LrFe7884FDDgmcZ7JaTqd1s+m1a2XcxPvvh27XQ0RERKmH2/W00uLFMobh3HMlG2WnthaoqZFAqbg4MBPL45GG9nC9e0v/V/CMLJPVcrutWa1p04DLLgP23Td+/y4iIiJKDGa2WmHHDmDsWODRRyWIstPQICsPvV4JlIL7rObOBTZutP7MqFEyUT74Onbtkq8LC0OzWh9/DHz9NTB/fvT9F4mIiCg1MLPVCjffDJx+OnDwwfZb8mgt5cP6eslSFRYGztu6VRrawx12GDBsWOhqwvJyyYKZYM2UFv1+mVJ/442SDSMiIqLUx8xWC/3978C778pMrUh9UpWVEmgpJcFW8HnTp0sAFczhkACuqChwrL5eAjZAjgdfx8svy9ytESMir4AkIiKi1MLMVgvU1UlT/K23BrbasTvH45HsU05OaJlx1Spgmc0o1zPPBI44IrTJvrJSypAFBaGN9fX1wN13y8T6aNsCERERUWphsNUCM2YAe+8N/O539hkln0+CJJ9PLne7A2VBvx+47TbrzxQVSTkwuMne45FAC5ASZHBWa9EiYM89pYxpV8IkIiKi1MRiVDO+/x54+GHghRcib8lTUSFBlcMhA0mDz3vhBfv9D6+4AujXL/C91hJoVVVJkBWcvSovl/vw7LMcYEpERJRumCOJQmvZ4PnqqyUwspupVVMjKw8dDrk8uPRXXS2lv3B77imjG4Kb4j0euS6/XwKq4DEQs2cDJ5wAHH00B5gSERGlG2a2onj6aWD7dhk4ajdTy4x5yM6Wr12u0HEMc+YA27ZZf+6mm0Kb4rWWwKy2Vm6nW7fAZRs2AEuXAu+8E32zayIiIkpNDLYi2LVLVgrOnh0aGBlmzIPTKV87HKElvg0bgHnzrD937LHAKaeEZqhqaqQBvqFBAq3gwG7mTKC0FDjggPj924iIiKj9MNiKYOJE4OSTgUGD7BvSKytlDIPLJSXA4mLrlPf6+tCfyc6W1YTBwZTfL8FWdbU01wdntb76Srb2+b//izytnoiIiFIbgy0bH38s87RWrLCfqWXGPLhcElDl5ISe9+mnwCuvWH/u/POtGarqagnaGhokYAvu1Zo+XUZOlJTE599FRERE7Y/BVpjGRglwxo0Deva0Xm7GPGRnS/nQNLQbfj9w++3Wn+vSBbjhhtCmeJ9PgjaPR8qKwTO8Vq4EfvxR+says+P2zyMiIqJ2xtWIYebMkQzTKafYBzkVFRJkuVyS4SooCD1v2TLgiy+sP3fNNUCPHqHHqqslODPXYxrg/X7Jat14o33AR0REROmDma0gmzdLr9VTT4VuIG3U1sqYh6IiyUY5naHn1dbaj3oYMAAYPjy0Kb6xUa6jrk6Ct+Cs1ssvy7GLLgrNhBEREVH6YWYryJgxsvJvn32s86waG2XMg2lUb2gI3SQaAB57DPjpJ+v1TphgHdtQVSUBVX29ZMlMKdLrBe65R8qY3JaHiIgo/TGz1eStt6Sx/W9/C21SBwJjHpSSoKiszNoUv3Ur8Mgj1usdMgQYOjT0mNcrQZbfL0Fbr16By55+Gth9d27LQ0RE1FEw2IKU8kaNkgxUly7Wy6urJSjq1EnGNGhtnb01Y4aUBYNlZcnm1eGlwOpq+VxbK4Gdua7qamDWLGDhQm7LQ0RE1FEwdwIZHLr33sBvf2sNjLxeCbBcLsk0eTxSEgzekPrLL2UPxHDnnAPsv3/osfp6uU5TQuzSJZDBmjsXOPJI4PjjuS0PERFRR5Hxma3//hd46CHgueesfVXBU+KLiqR8GN4UrzUwdar1eouLZVue8KCpulqO1dZKKdJktXbuBB5/XJrjuS0PERFRx5HRmS2tgWuvBa64QjaHDg+MKitlFlZxsWS07Jri335bJryHu/rq0F4sQMqVDQ3y8x6PlCXN2Ig5c4BTTwUOO4xZLSIioo4kozNby5cD69ZJGTF8OxwzJb6gQEqG5eXWpviGBuCuu6zXW1ICXHaZ9Xh1tZQM6+okyDJZrc2bgeefB/7+d/uJ9URERJS+MjqzBQBTpkiGKZjfH5gS73YHxjSEN8UvWSJlyHBjx1pLgR6PjI9wOKSEWFgYWPX44IPS3zVwYPz+XURERJQaMjqzdeaZwNq11qZ4MyW+uFiyV8EZLqOyErj/fut1DhokYxuCaS1ZLadTmuIdjsBqw7VrgTfeAD780DpygoiIiNJfxme2wnk8EhC53RJcVVVZm+IB4C9/kYb5cHajHjwe6f0yqxmDt+a5917gkkuAvfZKzL+HiIiIkovBVhCzyXROjgREkZriN28G5s2z/vyppwKHHx56zGS1srICzfEFBRJ4rV4tg1Svu05uk4iIiDoeBltBKirkc3Gx9G1VVVmb4gEZYFpfH3osJ0eGooavJKytletSShrjc3MDWa0ZM4CrrgJ22y0x/x4iIiJKvozu2QpmNpkuLpYyYGWlBEnhk9xXrwaWLbP+/EUXyfiIYFrLQNSsLGmO11oCt5wc4KOPpLn+6acD4x+IiIio42FmC4FNpk0Wq6FBgq/8/NBASGvgzjutP9+pE3DDDdbjNTWBrJbXK9eVny/XM2MGMHo00KNH4v5dRERElHwMtiBZLKUkqwVI4OVwWJvi33tPMlLhrrvOuqei3y/BVnZ2IKuVkyMrDv/+d7nN4cNDVzgSERFRx5PxL/VmY2lTPvR4AuVER1Ao6vMB06ZZf76kRFYTRrpeh0N+1umUQEtrGaI6erT9ptdERETUsWR0ZquxUYKi3FwpH5qVg9nZ1qb4F14Avv3Weh3jxlmnz/v9gb0PvV455nRKCfH11+Xy88+3joggIiKijiejg61du0LLh9XVkoUKb4r3eCQbFe7gg4EzzrAer66WwE2pwOecHPl8773AjTdap9YTERFRx5TRZUS3W7bgMaW+2lop9YXPvJo3D/jpJ+vPT5pkHfXg80lwlpsrWS1zeX4+sGKF3Oaf/xxaoiQiIqKOK6Nf8l2uQAmwslI+h2e1du6UafHhTjgBOPpo6/GaGvkcnNVyOuXj/vuBMWOseywSERFRxxVTsKWUOlsp9bVSyq+UGtzMuU6l1H+UUq/EcpuJUF8f2KInvI9q1iwpCwZzOiWrFc5kx3Jz5fqys6U/y+WSnq9evWTfRGa1iIiIMkesL/tfARgGYGULzh0NYE2Mt5cQZv9DM9ndWLcOWLzYev7ZZwO/+pX1eHW1ZLJMVssEVQ4H8OCDwE03WTNnRERE1LHFFGxprddorb9r7jylVF8ApwGYH8vtJUJtraxKLCy09l/NnCmXBcvPB8aOtV5PY6P0auXlBbblaWiQ75cuBQYMAE4+2XobRERE1LG1V0FrFoCxAPztdHstYgaPmmGjwVavlob2cJdfDvTsaT0entVyOgPT4+fMkV6t8CGpRERE1PE1G2wppd5RSn1l82Ez9MD25/8AYJvW+rMWnj9SKbVKKbVq+/btLfmRNquqkoDIrmF9+nTrsa5dgVGjrMcbGyWbFZzVamyU6fBLlwIHHSQN9cxqERERZZ5mRz9orU+M8TaOBnC6UupUAHkAipRST2mtL4xwe3MBzAWAwYMH6xhvOyqfT8qC4VvmrFwJ/POf1vOvv94+OxWc1fL7JdiqrJTs1iOPAE88Ye0HIyIiosyQ8DKi1nqC1rqv1ro/gPMA/D1SoNXeunSxBk9+v31Wq6RE9jIMZ7JaLldoVksp4PnngUGDgGOPZVaLiIgoU8U6+uEspdQmAEcBeFUp9WbT8T5KqdficQcTLTwIevll4MsvreeNHSujHMKFZ7Xy86VR3ucD/vpXmRbPrBYREVHmimmCvNZ6OYDlNse3ADjV5vj7AN6P5TYTyesF7rnHevyAA+y35WlokGxWQYEEWDk5EmRpLXO1fv1r4JhjmNUiIiLKZBm9XU+4p58G1q+3Hp840X4QaXW1HDdZLbdbmu69XmD+fOCZZ5jVIiIiynScZd6kuloGj4Y75hjguOOsxxsaZEq8yxXIapnjzz8PHHmkbOfDrBYREVFmY2arybx5wI4d1uO33mp/vslqOZ1SOiwqkqCrpkZWHy5dKoEYERERZTZmtgCUlQGPPWY9fvrpwIEHWo+brFZ+vgRX2dnyUVcnvVpHHw0cdRSzWkRERMTMFgCZ8B6+2XRWFjBunP35JqvlcEhWq7BQAq3KSuDJJ4EXX2RWi4iIiETGZ7a2bgUWLbIeP+88oH9/6/HgrFZtrWS08vLk6+efl5laRxzBrBYRERGJjM9sPfywrB4MlpcnexnaCc5qNTYCxcXy8+XlspqRWS0iIiIKltGZre++A5Ytsx6/9FL7zaaDs1oej5QaXS7Jaj33nKxcZFaLiIiIgmV0ZmvKFJmPFayoyH6zaSCQ1crKkq+Li+Xny8okq/X888xqERERUaiMzWx99pmsHAx3zTVAp07W4yarVVAgmSynU8qNdXUy5uHII7kCkYiIiKwyNrM1caL1WPfuwOWX258fnNWqqpIMmFIym+vppzlXi4iIiOxlZGbrvfeAt96yHr/xRvuAKTirVVMjQZfLJY3xzz4LDB7MrBYRERHZy7jMltbAhAnW4yUlwAUX2P+MyWplZ0tWq7AwkNV68klgyRLugUhERET2Mi6z9cEHwCefWI/fcosEU+HC52opJVktv1/Kh4ceCgwZwqwWERER2cu4YGvIECkjHnlk4Ni++wJnnml/vslq5eRIM3x+vny/axeweDFwww3MahEREVFkGRdsAcDxxwMffQQsWADsuaeUFR02j0T4XC2lpG8LAJ56CjjgAOC3v2VWi4iIiCLLuJ4tQyngwguBww4Duna1P6emRs7LzQV27gxktaqqgIULgUceYVaLiIiIosvIzJZhZmXZZaYaG6VsWFAgWS0gkNV6+mlgr72Ak09mVouIiIiiy+hgK5rqagmk8vIk2HK5JDjzeoF584CrrgLc7mTfSyIiIkp1DLZsmKxWfr581jqQ1Xr2WaBPH+APf2BWi4iIiJrHYMuGyWqZcQ+5uTI53ueTPq3LLwc6d072vSQiIqJ0wGArTHhWy+8PZLWWL5d9E08/3X71IhEREVE4hgxhzApEk9XKyZEPvx+YMwe45BKgR49k30siIiJKFwy2gvh80gyfny+N8D5fIKv1+utSSjzrLPlMRERE1BIMtoIE92rV1Mj2Pbm50iA/axYwfDjQq1ey7yURERGlEwZbTXw+6dFyuWRyfGNjYGDpu+/KJPkzz5RREEREREQtxWCrSU1NYMRDba2UCl0uOfbQQ8BFFwG9eyf7XhIREVG6YbAFaX43g0sbG6Vfy2S1Pv4Y2L5derUKC5N7P4mIiCj9MNhCaFarpkbGOrhcctns2UBpqfRqcdwDERERtVbGhw9+v5QN8/Ik4PJ6JehSCvjisZB2YgAACIxJREFUC+C774BzzgGKipJ9T4mIiCgdZXywVVsrQZbbHZixZbJac+YAF1wAdO/OxngiIiJqm4wOtoKzWkoFJsc7HMAPPwCffsqsFhEREcUmo4Ot8F4tINAY/5e/SKDVq1fgGBEREVFrZfQsdI9HhpY6nYHViE4nsHEj8PbbwCuvyApETownIiKitsrozFb37hJMmb4tk8F67DEZ9dCnD7NaREREFJuMztkoJf1ZtbWS4crOBrZtA5YvB1askF4uNsYTERFRLDI6swVI+dDvD2w4PX8+cMopQEmJZLWUSu79IyIiovQWU7CllDpbKfW1UsqvlBoc5bxOSqkXlFLfKqXWKKWOiuV248njAXJy5KOyEliyBLjsMsl0sYRIREREsYo1s/UVgGEAVjZz3kMA3tBa7wvgYABrYrzduPB4QjecfvJJYMgQYO+9paSYnZ3c+0dERETpL6aeLa31GgBQUWptSqkiAMcCGNH0M14A3lhuN16qq2WlYV6ezNiaNw9YsECOMatFRERE8dAePVt7AtgOYKFS6j9KqflKqYJIJyulRiqlVimlVm3fvj2hd8ztlg8AeP55YL/9gEGDQvdGJCIiIopFs8GWUuodpdRXNh9ntPA2sgAMAvCo1vpQADUAxkc6WWs9V2s9WGs9uHv37i28ibZxuaQ3y+cDHn0UuOoqaYjPy+Om00RERBQfzZYRtdYnxngbmwBs0lp/0vT9C4gSbCXDq68CXboAv/2tBF4sIRIREVG8JDx/o7X+CcBGpdSvmg6dAOCbRN9uS2ktW/NceaVMj3c6JdtFREREFA+xjn44Sym1CcBRAF5VSr3ZdLyPUuq1oFOvA7BEKbUawCEApsdyu/H00UdAfT0wbBjg9bJXi4iIiOIr1tWIywEstzm+BcCpQd9/DiDiHK5kmjsXuPxymbPV0MASIhEREcVXRreBf/opsGEDcNFFkt3KyeGm00RERBRfGR1svf02cMUVQHFx6HBTIiIionjJ6DzO5MmS0aqrk5EP7NciIiKieMvozBYgpUOPR2ZrcdNpIiIiireMD7bq6gC/nyVEIiIiSoyMD7Zqazlbi4iIiBIno4Mtn096tpjVIiIiokTJ6GCrtlY+M9giIiKiRMnoYMvjkfKh05nse0JEREQdVUaPfujSRfZGJCIiIkqUjA62OC2eiIiIEi2jy4hEREREicZgi4iIiCiBGGwRERERJRCDLSIiIqIEYrBFRERElEAMtoiIiIgSiMEWERERUQIx2CIiIiJKIAZbRERERAnEYIuIiIgogRhsERERESUQgy0iIiKiBGKwRURERJRADLaIiIiIEojBFhEREVECKa11su9DREqp7QDWt/D0bgB2JPDupCs+LpHxsbHHxyUyPjb2+LhExsfGXkd9XPpprbuHH0zpYKs1lFKrtNaDk30/Ug0fl8j42Njj4xIZHxt7fFwi42NjL9MeF5YRiYiIiBKIwRYRERFRAnWkYGtusu9AiuLjEhkfG3t8XCLjY2OPj0tkfGzsZdTj0mF6toiIiIhSUUfKbBERERGlHAZbRERERAmU1sGWUupspdTXSim/Umpw0PH+SimPUurzpo/Hknk/kyHSY9N02QSl1Fql1HdKqZOTdR+TTSl1u1Jqc9Dz5NRk36dkU0r9vul5sVYpNT7Z9ydVKKXWKaW+bHqerEr2/UkmpdQCpdQ2pdRXQce6KKXeVkr90PS5czLvYzJEeFwy/m+MUmp3pdR7Sqk1Ta9Jo5uOZ9RzJq2DLQBfARgGYKXNZf/VWh/S9HFVO9+vVGD72Cil9gNwHoD9AfwewCNKKWf7372U8WDQ8+S1ZN+ZZGp6HvwFwCkA9gNwftPzhcRvm54nGTMbKIJFkL8dwcYDeFdrvTeAd5u+zzSLYH1cAP6NaQRwk9Z6IIAjAYxq+ruSUc+ZtA62tNZrtNbfJft+pKIoj80ZAJ7VWtdrrX8EsBbA4e177yhFHQ5grdb6f1prL4BnIc8Xol9orVcCKAs7fAaAJ5q+fgLAme16p1JAhMcl42mtt2qt/930dRWANQB2Q4Y9Z9I62GrGHkqp/yil/qGUGpLsO5NCdgOwMej7TU3HMtW1SqnVTSWADp3GbgE+NyLTAN5SSn2mlBqZ7DuTgnpqrbcC8uIKoEeS708q4d+YJkqp/gAOBfAJMuw5k/LBllLqHaXUVzYf0d5xbwVQorU+FMAYAE8rpYra5x63nzY+NsrmWIed/9HMY/QogL0AHAJ5ztyf1DubfBn13Gilo7XWgyAl1lFKqWOTfYcoLfBvTBOllBvAiwBu0FpXJvv+tLesZN+B5mitT2zDz9QDqG/6+jOl1H8B7AOgQzW2tuWxgWQrdg/6vi+ALfG5R6mnpY+RUmoegFcSfHdSXUY9N1pDa72l6fM2pdRySMnVrlc0U/2slOqttd6qlOoNYFuy71Aq0Fr/bL7O5L8xSqlsSKC1RGu9rOlwRj1nUj6z1RZKqe6m6VsptSeAvQH8L7n3KmW8BOA8pVSuUmoPyGPzaZLvU1I0/YIbZ0EWFWSyfwHYWym1h1IqB7KQ4qUk36ekU0oVKKUKzdcATgKfK+FeAjC86evhAFYk8b6kDP6NAZRSCsDjANZorR8IuiijnjNpPUFeKXUWgDkAugMoB/C51vpkpdSfANwBWQXhA3Cb1vrl5N3T9hfpsWm6bBKASyGPzw1a69eTdkeTSCn1JCS9rwGsA3Cl6SHIVE1L02cBcAJYoLWeluS7lHRNb9iWN32bBeDpTH5clFLPADgeQDcAPwO4DcDfADwHoATABgBna60zqlk8wuNyPDL8b4xS6hgA/wTwJQB/0+GJkL6tjHnOpHWwRURERJTqOmQZkYiIiChVMNgiIiIiSiAGW0REREQJxGCLiIiIKIEYbBERERElEIMtIiIiogRisEVERESUQP8PZSKuqc8+zpkAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# all_preds = all_chain_preds[0]\n",
"all_preds = np.concatenate(all_chain_preds)\n",
"\n",
"pred_mean = all_preds.mean(axis=0)\n",
"pred_std = all_preds.std(axis=0)\n",
"pred_upper = pred_mean + pred_std\n",
"pred_lower = pred_mean - pred_std\n",
"\n",
"# plt.plot(x_ , all_preds[0, :, 0], '--k');\n",
"\n",
"plt.figure(figsize=(10,7))\n",
"plt.plot(x_ , all_preds.T[:, ::100], '-b',alpha=0.1);\n",
"plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
"# plt.plot(x_.data.numpy(), y_.data.numpy(), \"--b\")\n",
"plt.plot(x_.data.numpy(), pred_mean, \"-b\", lw=5)\n",
"plt.fill_between(x_.data.numpy(), pred_lower, pred_upper, color=\"b\", alpha=0.1)\n",
"plt.plot(x_.data.numpy(), pred_lower, \"-b\", lw=1)\n",
"plt.plot(x_.data.numpy(), pred_upper, \"-b\", lw=1)\n",
"# plt.ylim(-1., 3.5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "py38",
"language": "python",
"name": "py38"
},
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment