AI-For-Beginners/4-ComputerVision/09-Autoencoders/AutoEncodersPyTorch.ipynb

1802 lines
359 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "u2U7TIRdKNGu"
},
"source": [
"# [Autoencoders](https://arxiv.org/abs/2201.03898)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "it5nmu_-c5-E"
},
"source": [
"When training CNNs, one of the problems is that we need a lot of labeled data. In the case of image classification, we need to separate images into different classes, which is a manual effort.\n",
"\n",
"However, we might want to use raw (unlabeled) data for training CNN feature extractors, which is called **self-supervised learning**. Instead of labels, we will use training images as both network input and output. The main idea of **autoencoder** is that we will have an **encoder network** that converts input image into some **latent space** (normally it is just a vector of some smaller size), the then **decoder network**, whose goal would be to reconstruct the original image.\n",
"\n",
"Since we are training autoencoder to capture as much of the information from the original image as possible for accurate reconstruction, the network tries to find the best **embedding** of input images to capture the meaning.\n",
"\n",
"![AutoEncoder Diagram](images/autoencoder_schema.jpg)\n",
"\n",
"> Image from [Keras blog](https://blog.keras.io/building-autoencoders-in-keras.html)\n",
"\n",
"Let's create simplest autoencoder for MNIST!"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:39.262403Z",
"iopub.status.busy": "2022-04-08T00:15:39.262149Z",
"iopub.status.idle": "2022-04-08T00:15:39.268143Z",
"shell.execute_reply": "2022-04-08T00:15:39.267475Z",
"shell.execute_reply.started": "2022-04-08T00:15:39.262376Z"
},
"id": "6n8fzzN-2T1h",
"trusted": true
},
"outputs": [],
"source": [
"import torch\n",
"import torchvision\n",
"import matplotlib.pyplot as plt\n",
"from torchvision import transforms\n",
"from torch import nn\n",
"from torch import optim\n",
"from tqdm import tqdm\n",
"import numpy as np\n",
"import torch.nn.functional as F\n",
"torch.manual_seed(42)\n",
"np.random.seed(42)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wlAVPG-Ild19"
},
"source": [
"Define training parameters and check if the GPU is available:"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:39.530041Z",
"iopub.status.busy": "2022-04-08T00:15:39.529522Z",
"iopub.status.idle": "2022-04-08T00:15:39.534247Z",
"shell.execute_reply": "2022-04-08T00:15:39.533327Z",
"shell.execute_reply.started": "2022-04-08T00:15:39.530006Z"
},
"id": "bjL-jOgi3gmG",
"trusted": true
},
"outputs": [],
"source": [
"device = 'cuda:0' if torch.cuda.is_available() else 'cpu'\n",
"train_size = 0.9\n",
"lr = 1e-3\n",
"eps = 1e-8\n",
"batch_size = 256\n",
"epochs = 30"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jvsOL_ckld1-"
},
"source": [
"The following function will load the MNIST dataset and apply specified transforms to it. It will also split it into train/test datasets."
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:39.893727Z",
"iopub.status.busy": "2022-04-08T00:15:39.893160Z",
"iopub.status.idle": "2022-04-08T00:15:39.899407Z",
"shell.execute_reply": "2022-04-08T00:15:39.898565Z",
"shell.execute_reply.started": "2022-04-08T00:15:39.893688Z"
},
"id": "g2Eo43713Sxb",
"trusted": true
},
"outputs": [],
"source": [
"def mnist(train_part, transform=None):\n",
" dataset = torchvision.datasets.MNIST('.', download=True, transform=transform)\n",
" train_part = int(train_part * len(dataset))\n",
" train_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_part, len(dataset) - train_part])\n",
" return train_dataset, test_dataset"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "h86jOpd9ld1_"
},
"source": [
"Now let's load the dataset and define dataloaders for train and test:"
]
},
{
"cell_type": "code",
"source": [
"class CustomDataset(torch.utils.data.Dataset):\n",
" def __init__(self, raw_dataset, image_transform=None):\n",
" self.raw_dataset = raw_dataset\n",
" self.transform = image_transform\n",
"\n",
" def __len__(self):\n",
" return len(self.raw_dataset)\n",
"\n",
" def __getitem__(self, idx):\n",
" raw = self.raw_dataset[idx][0]\n",
" target = raw.clone()\n",
" if self.transform is not None:\n",
" image = self.transform(raw.clone())\n",
" else:\n",
" image = raw.clone()\n",
" return image, target"
],
"metadata": {
"id": "MwBPD-rxmnAY"
},
"execution_count": 101,
"outputs": []
},
{
"cell_type": "code",
"source": [
"transform = transforms.Compose([transforms.ToTensor()])\n",
"\n",
"raw_train_dataset, raw_test_dataset = mnist(train_size, transform)\n",
"train_dataset, test_dataset = CustomDataset(raw_train_dataset), CustomDataset(raw_test_dataset)"
],
"metadata": {
"id": "NNxiWHDDlstZ"
},
"execution_count": 102,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:41.292476Z",
"iopub.status.busy": "2022-04-08T00:15:41.292238Z",
"iopub.status.idle": "2022-04-08T00:15:41.299801Z",
"shell.execute_reply": "2022-04-08T00:15:41.298897Z",
"shell.execute_reply.started": "2022-04-08T00:15:41.292449Z"
},
"id": "jAI3uK86_zHM",
"trusted": true
},
"outputs": [],
"source": [
"train_dataloader = torch.utils.data.DataLoader(train_dataset, drop_last=True, batch_size=batch_size, shuffle=True)\n",
"test_dataloader = torch.utils.data.DataLoader(test_dataset, batch_size=1, shuffle=False)\n",
"dataloaders = (train_dataloader, test_dataloader)"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:41.692950Z",
"iopub.status.busy": "2022-04-08T00:15:41.692376Z",
"iopub.status.idle": "2022-04-08T00:15:41.700707Z",
"shell.execute_reply": "2022-04-08T00:15:41.699723Z",
"shell.execute_reply.started": "2022-04-08T00:15:41.692909Z"
},
"id": "LdyQz4092fRV",
"trusted": true
},
"outputs": [],
"source": [
"def plotn(n, data):\n",
" fig, ax = plt.subplots(1, n)\n",
" for i, z in enumerate(data):\n",
" if i == n:\n",
" break\n",
" preprocess = z[0].reshape(1, 28, 28) if z[0].shape[1] == 28 else z[0].reshape(1, 14, 14) if z[0].shape[1] == 14 else z[0]\n",
" ax[i].imshow(preprocess[0])\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:42.470833Z",
"iopub.status.busy": "2022-04-08T00:15:42.470589Z",
"iopub.status.idle": "2022-04-08T00:15:42.855919Z",
"shell.execute_reply": "2022-04-08T00:15:42.853605Z",
"shell.execute_reply.started": "2022-04-08T00:15:42.470808Z"
},
"id": "NeWJoiFC4A6J",
"outputId": "e03b6437-3f38-49a2-c7bc-599322c04577",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 109
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"plotn(5, train_dataset)"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:42.857823Z",
"iopub.status.busy": "2022-04-08T00:15:42.857536Z",
"iopub.status.idle": "2022-04-08T00:15:42.866008Z",
"shell.execute_reply": "2022-04-08T00:15:42.865357Z",
"shell.execute_reply.started": "2022-04-08T00:15:42.857787Z"
},
"id": "NnI2YvOg4DbT",
"trusted": true
},
"outputs": [],
"source": [
"class Encoder(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.conv1 = nn.Conv2d(1, 16, kernel_size=(3, 3), padding='same')\n",
" self.maxpool1 = nn.MaxPool2d(kernel_size=(2, 2))\n",
" self.conv2 = nn.Conv2d(16, 8, kernel_size=(3, 3), padding='same')\n",
" self.maxpool2 = nn.MaxPool2d(kernel_size=(2, 2))\n",
" self.conv3 = nn.Conv2d(8, 8, kernel_size=(3, 3), padding='same')\n",
" self.maxpool3 = nn.MaxPool2d(kernel_size=(2, 2), padding=(1, 1))\n",
" self.relu = nn.ReLU()\n",
"\n",
" def forward(self, input):\n",
" hidden1 = self.maxpool1(self.relu(self.conv1(input)))\n",
" hidden2 = self.maxpool2(self.relu(self.conv2(hidden1)))\n",
" encoded = self.maxpool3(self.relu(self.conv3(hidden2)))\n",
" return encoded"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:43.169659Z",
"iopub.status.busy": "2022-04-08T00:15:43.169239Z",
"iopub.status.idle": "2022-04-08T00:15:43.178700Z",
"shell.execute_reply": "2022-04-08T00:15:43.178010Z",
"shell.execute_reply.started": "2022-04-08T00:15:43.169622Z"
},
"id": "mZGB4Vr47478",
"trusted": true
},
"outputs": [],
"source": [
"class Decoder(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.conv1 = nn.Conv2d(8, 8, kernel_size=(3, 3), padding='same')\n",
" self.upsample1 = nn.Upsample(scale_factor=(2, 2))\n",
" self.conv2 = nn.Conv2d(8, 8, kernel_size=(3, 3), padding='same')\n",
" self.upsample2 = nn.Upsample(scale_factor=(2, 2))\n",
" self.conv3 = nn.Conv2d(8, 16, kernel_size=(3, 3))\n",
" self.upsample3 = nn.Upsample(scale_factor=(2, 2))\n",
" self.conv4 = nn.Conv2d(16, 1, kernel_size=(3, 3), padding='same')\n",
" self.relu = nn.ReLU()\n",
" self.sigmoid = nn.Sigmoid()\n",
"\n",
" def forward(self, input):\n",
" hidden1 = self.upsample1(self.relu(self.conv1(input)))\n",
" hidden2 = self.upsample2(self.relu(self.conv2(hidden1)))\n",
" hidden3 = self.upsample3(self.relu(self.conv3(hidden2)))\n",
" decoded = self.sigmoid(self.conv4(hidden3))\n",
" return decoded"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:43.593770Z",
"iopub.status.busy": "2022-04-08T00:15:43.593178Z",
"iopub.status.idle": "2022-04-08T00:15:43.600152Z",
"shell.execute_reply": "2022-04-08T00:15:43.599205Z",
"shell.execute_reply.started": "2022-04-08T00:15:43.593731Z"
},
"id": "SDGiAPhbBBLY",
"trusted": true
},
"outputs": [],
"source": [
"class AutoEncoder(nn.Module):\n",
" def __init__(self, super_resolution=False):\n",
" super().__init__()\n",
" if not super_resolution:\n",
" self.encoder = Encoder()\n",
" else:\n",
" self.encoder = SuperResolutionEncoder()\n",
" self.decoder = Decoder()\n",
"\n",
" def forward(self, input):\n",
" encoded = self.encoder(input)\n",
" decoded = self.decoder(encoded)\n",
" return decoded"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:44.069329Z",
"iopub.status.busy": "2022-04-08T00:15:44.068875Z",
"iopub.status.idle": "2022-04-08T00:15:44.079486Z",
"shell.execute_reply": "2022-04-08T00:15:44.078748Z",
"shell.execute_reply.started": "2022-04-08T00:15:44.069289Z"
},
"id": "nZyG_mNu_Pnc",
"trusted": true
},
"outputs": [],
"source": [
"model = AutoEncoder().to(device)\n",
"optimizer = optim.Adam(model.parameters(), lr=lr, eps=eps)\n",
"loss_fn = nn.BCELoss()"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T01:25:58.828126Z",
"iopub.status.busy": "2022-04-08T01:25:58.827634Z",
"iopub.status.idle": "2022-04-08T01:25:58.844248Z",
"shell.execute_reply": "2022-04-08T01:25:58.843270Z",
"shell.execute_reply.started": "2022-04-08T01:25:58.828092Z"
},
"id": "iiIy87v2_rUr",
"trusted": true
},
"outputs": [],
"source": [
"def train(dataloaders, model, loss_fn, optimizer, epochs, device):\n",
" tqdm_iter = tqdm(range(epochs))\n",
" train_dataloader, test_dataloader = dataloaders[0], dataloaders[1]\n",
"\n",
" for epoch in tqdm_iter:\n",
" model.train()\n",
" train_loss = 0.0\n",
" test_loss = 0.0\n",
"\n",
" for batch in train_dataloader:\n",
" imgs, labels = batch\n",
" imgs = imgs.to(device)\n",
" labels = labels.to(device)\n",
"\n",
" preds = model(imgs)\n",
" loss = loss_fn(preds, labels)\n",
"\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" train_loss += loss.item()\n",
"\n",
" model.eval()\n",
" with torch.no_grad():\n",
" for batch in test_dataloader:\n",
" imgs, labels = batch\n",
" imgs = imgs.to(device)\n",
" labels = labels.to(device)\n",
"\n",
" preds = model(imgs)\n",
" loss = loss_fn(preds, labels)\n",
"\n",
" test_loss += loss.item()\n",
"\n",
" train_loss /= len(train_dataloader)\n",
" test_loss /= len(test_dataloader)\n",
"\n",
" tqdm_dct = {'train loss:': train_loss, 'test loss:': test_loss}\n",
" tqdm_iter.set_postfix(tqdm_dct, refresh=True)\n",
" tqdm_iter.refresh()"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:15:44.969616Z",
"iopub.status.busy": "2022-04-08T00:15:44.969345Z",
"iopub.status.idle": "2022-04-08T00:22:34.533469Z",
"shell.execute_reply": "2022-04-08T00:22:34.532667Z",
"shell.execute_reply.started": "2022-04-08T00:15:44.969587Z"
},
"id": "PMqO8eOxCemz",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e419b7c6-1966-4d8e-ec31-db1e888d4884"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"100%|██████████| 30/30 [14:48<00:00, 29.61s/it, train loss:=0.104, test loss:=0.104]\n"
]
}
],
"source": [
"train(dataloaders, model, loss_fn, optimizer, epochs, device)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:22:34.535491Z",
"iopub.status.busy": "2022-04-08T00:22:34.535154Z",
"iopub.status.idle": "2022-04-08T00:22:35.701465Z",
"shell.execute_reply": "2022-04-08T00:22:35.700797Z",
"shell.execute_reply.started": "2022-04-08T00:22:34.535452Z"
},
"id": "kR3n0EnjOts0",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 201
},
"outputId": "403019d2-b278-4804-c386-157bf908a50a"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model.eval()\n",
"predictions = []\n",
"plots = 5\n",
"for i, data in enumerate(test_dataset):\n",
" if i == plots:\n",
" break\n",
" predictions.append(model(data[0].to(device).unsqueeze(0)).detach().cpu())\n",
"plotn(plots, test_dataset)\n",
"plotn(plots, predictions)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1JUmf9i1dg2i"
},
"source": [
"> **Task 1**: Try to train autoencoder with very small latent vector size, eg. 2, and plot the dots corresponding to different digits. *Hint: Use fully-connected dense layer after the convoluitonal part to reduce the vector size to the required value.*\n",
"\n",
"> **Task 2**: Starting from different digits, obtain their latent space representations, and see what effect adding some noise to the latent space has on the resulting digits."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tjdFt03rULX-"
},
"source": [
"## Denoising\n",
"\n",
"Autoencoders can be effectively used to remove noise from images. In order to train denoiser, we will start with noise-free images, and add artificial noise to them. Then, we will feed autoencoder with noisy images as input, and noise-free images as output.\n",
"\n",
"Let's see how this works for MNIST:"
]
},
{
"cell_type": "code",
"source": [
"def noisy_transform(x):\n",
" return np.clip(x + torch.FloatTensor(np.random.normal(loc=0.5, scale=0.3, size=x.shape)), 0.0, 1.0)"
],
"metadata": {
"id": "wQ66Jr6QqOSl"
},
"execution_count": 131,
"outputs": []
},
{
"cell_type": "code",
"source": [
"transform = transforms.Compose([transforms.ToTensor()])\n",
"\n",
"raw_train_dataset, raw_test_dataset = mnist(train_size, transform)\n",
"train_dataset, test_dataset = CustomDataset(raw_train_dataset, image_transform=noisy_transform), CustomDataset(raw_test_dataset, image_transform=noisy_transform)"
],
"metadata": {
"id": "YkBqWagdqB3w"
},
"execution_count": 132,
"outputs": []
},
{
"cell_type": "code",
"source": [
"train_dataloader = torch.utils.data.DataLoader(train_dataset, drop_last=True, batch_size=batch_size, shuffle=True)\n",
"test_dataloader = torch.utils.data.DataLoader(test_dataset, batch_size=1, shuffle=False)\n",
"dataloaders = (train_dataloader, test_dataloader)"
],
"metadata": {
"id": "gmimJVV0txQz"
},
"execution_count": 133,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T01:26:06.259333Z",
"iopub.status.busy": "2022-04-08T01:26:06.259061Z",
"iopub.status.idle": "2022-04-08T01:26:06.799264Z",
"shell.execute_reply": "2022-04-08T01:26:06.798609Z",
"shell.execute_reply.started": "2022-04-08T01:26:06.259303Z"
},
"id": "1Yj9ZRDmUPxX",
"outputId": "5267bef1-e30a-47d3-f62f-b4594a3e26b7",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 109
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"plotn(5, train_dataset)"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T01:55:45.901599Z",
"iopub.status.busy": "2022-04-08T01:55:45.901279Z",
"iopub.status.idle": "2022-04-08T01:55:45.910993Z",
"shell.execute_reply": "2022-04-08T01:55:45.909858Z",
"shell.execute_reply.started": "2022-04-08T01:55:45.901533Z"
},
"id": "qxo8NDLLUvut",
"trusted": true
},
"outputs": [],
"source": [
"model = AutoEncoder().to(device)\n",
"optimizer = optim.Adam(model.parameters(), lr=lr, eps=eps)\n",
"loss_fn = nn.BCELoss()\n",
"epochs = 100"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T01:55:47.956516Z",
"iopub.status.busy": "2022-04-08T01:55:47.956250Z",
"iopub.status.idle": "2022-04-08T02:18:17.428958Z",
"shell.execute_reply": "2022-04-08T02:18:17.428239Z",
"shell.execute_reply.started": "2022-04-08T01:55:47.956489Z"
},
"id": "JAYzgfoTUBHM",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a7d2d89e-f35c-45de-b2c3-f0ca8e81031a"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"100%|██████████| 100/100 [1:19:55<00:00, 47.96s/it, train loss:=0.112, test loss:=0.113]\n"
]
}
],
"source": [
"train(dataloaders, model, loss_fn, optimizer, epochs, device)"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T02:18:17.430982Z",
"iopub.status.busy": "2022-04-08T02:18:17.430570Z",
"iopub.status.idle": "2022-04-08T02:18:18.235054Z",
"shell.execute_reply": "2022-04-08T02:18:18.234364Z",
"shell.execute_reply.started": "2022-04-08T02:18:17.430943Z"
},
"id": "IaPfyJ0SV7XY",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 201
},
"outputId": "87afb9b8-fbde-4223-dfcc-72dd0e2b6b56"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAABcCAYAAABz9T77AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9d5RlV33n+9n75JvvrZw6d5e61a1WAEWQECAQmOCAA2lsA8Y2OGAPHmyvec9+4/G8Z08wTuOxsfHYGA9OYGzAIDJCKLXU6m51qo6V0626+dwT935/nEYYwxPd4Mcs1qrvWrVWhXvO2ed79v7tX/j+TgmtNVvYwha2sIXvXMj/3QPYwha2sIUtfGvYMuRb2MIWtvAdji1DvoUtbGEL3+HYMuRb2MIWtvAdji1DvoUtbGEL3+HYMuRb2MIWtvAdjm/JkAsh7hdCnBVCnBdC/OK/1qC+k7HFydfHFi9fiy1OvhZbnHxzEN+sjlwIYQAzwH3AAvA48Fqt9al/veF9Z2GLk6+PLV6+FlucfC22OPnm8a145LcC57XWF7XWEfAB4NX/OsP6jsUWJ18fW7x8LbY4+VpscfJNwvwWjp0A5v/ZzwvAbc92gG3ltZOvEhUFWIpBr0deBuSkwkQS6ZQYyVJUIYgsBr0uY2bA+bBE0HGwCjHTbpO11GbVLwIgpUYpAakARHYhQ1F2AwA6kYNSEhKBUCBDECr7qJZQGPSZtLqcbA1htQXKAmWA1dOItv+Vwec9opLMzpFk5xBKo0xB4gFSYw7WUEGAEGJdaz10NZyYbl67Xg2jG4LWRIMu2gSrq5GRgihGpynCc1GWRIYJOoxQ1TxxUYMSyAR0TjGV26SnHJqRRxoZmL5AS0gdEJZiMtdAI1gOyqSpgEQiUnA2E0hSou0mo16bpV4ZEcqMI/HlewU0CA0iBZlk964sULamnO8TKYN+aIPQ2GZKqgVpYGLWaiSbm8HVzhWjkNfmYBXTStGA6pkIBW4lYNDq4ooEUwhWkxydxMU1YmyR0ow9ksC8MkiQocDsaZQtSF0QCVg9hUh1xmvOwZwIKRkBZSOkoyzW56vIbohWKUJIwhEPPIVOBCiB5cUUrZDNXh7ZF1i+gm4f4bkkOQMtQRugLLC9mCg0sTchdQWFQR8NtH0Pc6BGsnH1nABYdl67XhVlfuW5YmT3JRQo88oSuHL/hqVwjAS/b2P0BUaokX6EytnERYEGkGA4CdO5DSSCFE1fS5bCClFo4tSzczlTAQUZsrpexQg17nifbVaXlcSjl9oMWx1KUrOpDDqpS8XwKUvNcuJS7+eRUmMbKUHfxtlUKFsSF7J1IwyNTgV2qUbcbf3zW/6GnOSrts6PFWn1PEQq0EaWYbC6AhkqRJyA0gSTNjuL66RakiLxRIwnJCdagzizPhQ8oqJEG4ChEbHA7mi0AGVnXH15zRu9GNAoz0YbAmVmz9wsxZTMgI0gj44l+XzAgNllrj2A1RYIpREalCHQBqQ2aFdDIpAxKEezp7SGr22WemVIJEY/u66/uVC/YlO+Lr4VQ35VEEK8FXgrgO1V2P/Kn6N+M+jhkLfe+EXuyJ8jLyIsodhMc7SVy2/PvphLi4M8b995XjN4hF89/UqCRwcQN7f45Rs+zAPNg3zq/DTSUHhOjB/YRA03u56XYLkJ06NrKC24tFEjCi2SjoUIDMozErut0QYkLtz+5qP85tjnOPy5n6TyBZckL0hcGDoek3vsMmgFQO/23SzeKzF7gtxyZsyNEMKKoHUgAVvhHzlO/8QMvS8cmb1aTqxilb0/+HMMPdlBxClzL68SVTVjX0rJX+4i15voXg+9Y4Jw0MNdbMNKneZLplm9PTNWRihI9vr88MGHebI1xZMXtiM3LErnBakt6I9q4lrC/bc8hSVSPru4l27PRS162E3J1AMdjFafy7/u8pbrvsTvPvQiChcslHnFOMAzeySA3QZnUxNWs3OrqYDXH3yMS/4AX7q0C60EhpmSxgasO/hPHmftfX/evVpOjIEKY7/2draNbQKw/PgYZlew9/4LfO/IE4yaLfIy5J/ahznTGcGWKVJojq+N0Vkugpvi5CPSiwWGn9QEFUF3G7jrgtGHO0g/RnZ9ugdHGful89xVucBeZ4VHe7v5+G/cTeXpJsIPwTK5+NpBoh0hom5jBILioQ3uGJ3loycOkT9rUzubUDy+hr93kOZem8SDuKgJRxNuuu4yRy9sY+f7ob3DZvKNF0m05NTJbfQfPc7an73vWTn5mvWTq3LwZT8HZEZg86AgLqWYbQOZQOpplK3RtgJLMzrW4EB1lc88fR3lYzblywmFk2u0D4+weptEmdnnqzsb/NONf4qF4GJiciYa44/nnsfcSo2Jv7XQUmC+bYU9pTpH3neY/ErKzb/4JP/P6EP8H6u383h9O2/a/hAvz1/iL1qH+NzGPl4zcoTXF9f4D/VDvO/o7Ug7JZcL8c+XmfxMSnfMZOPOGOmkGIYi9i3SfzjNysf/5htR8lWc5Efz3P6Hr+XYye2YXYM0p0DB8GOCwmKEvdpFBBGn/t0wb3nep1iNSzRjj7vLM9zjzfL8T/8UB35tg9ZNIyzfJVCuQuRSjBWbkccV2hD0RrLEhelr7J6mcrQOStE+PERYlCR5QZyHoRcvcvfwef7XqeeQrHk855Zz/ODw4/zCA69l6uMakWpkqgmqJv1BSTAIwVSECA3MtoSdPf7ktj/hRDDFbx5/CXHdo/K0xAjgyff+22e1Kd+KIV8Epv7Zz5NXfvdV0Fr/EfBHAPm9Y7r7fR3ETAmx7DL4nA47zC6vPvoWWvNl7GGfYi6k1fHQqeTYXx1k7uw0XkFi5jTO6QK/97s/wOpzXAZetErZCZjItVjoVTjXH6FS6/Kr+/+RBzvTPPBnd2Q76L0tdo3U2bFng17i8HhnP2iB5WuMCOphnvU04bUHj/Do2A7mHp5k6ClFd9xk40f3Zt5nDO1bAt595wd4sDPNh8/egGUnTFWblOyAPfl1VsMSn1zI0f1Ck2vhZPRATd/xY0/y1MYEncAh6PRRPYt+zUCGedKdRZQJueUQd7mLv7OCf9sgaBh8Elp7BOJAh3Td43/9xYvILWumjzbo7S5lG08HRh5TmL7m9Puuxx938d60xnChy8Kx7bgbmsV7i6Rekajf50/O3sHA4yYDT3cx2gEiiFh8xTjtWwJu3jXHG0Yf4en+JMfbE4y6bQ7klpiyNzhs1zmVr5Iog0cu7GT770mSvMHc/SAmCgD2s/HyVfNk35jePbnO6ycexRUxv9J4Jf6my2KnzPuT2zm3OAwdi1fd/gS/NvUPvPqRn6Dw+Tz+LnB3dLl96jI/OfIZ/mn6MB8+cIjGaonCjEV+VWGcW4DhAZbvn6A3CVNC8WBjD7/z0MsxQkhe0af7/ZIoKpImBnpVY806FOfAbmtWvRoPKYnpJvSmIb45ov8WmyD2CYMY00rJOxF3DS3x86Of5Jf099Axp8itp5z7xG6UBW4CUP2GnPxLXrw943rppQl7/zjGXG/T2j1GPKRwp7t4dsz6ahnRM3BrASPlDveMnOOu/AxnJ4dZq4+Qeib92hj+mCCuxSA1SHCthHOxx5lwnN8+ey9aCybKLfZPrRD+jMlyq0TxT8e4sDaIPgDrhyXDdoflNOIj5w8iTxf4rf6LODJxkY+f249x0eMv7zR4wZ6/4lx3GGPNJrcsqJ61sCYFs68UVCc2+YMDf8+ZcIw/Ov08lCeIbnRRn0ivaf14o1P6/Md2w46EpJrgzluYPvjD0B90MfsOMobqMfjzU/dTWErxVkI+/5Ibef/zZxkfazD3X3Psrl3mR4ePMROM8uj6DjoDNqvbcgAYZkocmshlF9OXhKUhENCc1ig3xakbCCXoRTaX/AEQGu0oGmGOx3q7sDcM3HqXYMilM2rSmxD0d0TIjok3axPu6/Mf7/sgsTb5VOcgjSTH/tFVFvNlWu0BjED8Swq+Bt+KIX8c2CuE2HmF7B8CXvdsB+StiOuGVjl+toTsC+aiAS7aazTXiuQWDXzbRQhIQhMiSXEhJffIeaLDOwn2OTizMdZjZyiO3kAQmwSGRSdxaEcOum/gBzYKSS91yK0rtIDQSCk7fQyhSfRXSgLKyMKhILVYVw4jVpv95RUueRNoKYjzgqCWhWkCqFR7jJotymYfaSjybsTh6iKujHFEQtcMqR0cZ+336gC2EMK+Kk6MkDtK5xl1WtTjAg8t76Jh5IjzOeKCJM5JlAleXYJS9AdMOjsEbh28dYWWUMn3CZfyFOcUuZUIsbiKNZxH5TQ6MPHWQsyGD6t1iuEEHaBghegrqZOwqklKKSQSv+VR6mUhuOj10UGYbYiGZtxrcZuzQk6ESDTbnTqHnEUMNC1l0FEepkzRscS+vIpZK6KNMs70GIB7tXPFEIqy3admdLFFiuvERLZNEJtskoOmhdWS9FOLilTEXZviQkp3ymCg2GPMaVEUMYNWh2quT9PJg7ayk5sm2rMJq4KkoPATi80gT25FIFKwbvbZW11HIQgSi2Pt7YiOiYw0ZqAw+gY938nG6SZsG2xw28BlTrVHObcxhGWkuFaCKVMCbQAQ5yUy1XirGmVDXBR4o1PXxAlAzoqpDbcRqYPo9Z9JEZa8gLITsJ5WMPxsjhfskJyMsEVKyQlYKipEIpGRIC5qpJcgDY1ppRTtkJ5yWI3LdDbyIDW61KZkBeyq1DluTtBbcXEvrqMOTxKXFY04x4lolKjhUmpCp5njbHEY1XDwmoLldolT0QAL3QpmV2A3Ne5aH3+oiCzGjBY77LI2aasskpZCU7thkNU44Vo4kQk4DU1/TKKEQsZgRJB42fqOiwItILeiyddTCpd7yPk1Cvt3M7M0QrHQZ3u1wWSuiStjcjIiZ0VYRkrJDZFCY8mUzX6OesNGpJK4kKW2VDFBuglpx0DGmn5kseqX0EqC1Gz0cpw0xpAxpK5JVJDERUFU1uSqffwoj9mTBFpwyF5mKS3yUHsvYWoy4rXpJTYtAVyFHuWbVq0ACCFeDrwbMID3aq1//dk+P3Kgpu96zw9y8lP7cDYhLmahu1AZ6eXb1rh95DIffuxmSmdMamdjvPN1Lr1ujOe+7Gm++NgBtn08JawY9Iey/K4RapyWoni+i7Yk4aBLXDBob5cEg5r7XniUfmpx4j0HKc1GpJ5B4go2DxiEAykje+vsrazz9PoY7U4OKRXSUCSzBQpzAn9Cw44e6XKO0jmJ21QU5kNau1027wtII4l72SEcTPnFF/8jjYfO88tvXgrJJuI35MTdM673/Le3MF5qU3N87h84gStj3vWF7yd30cZb09hdneU3Y838DyT8n7d+hPfO3sXCzDCUY6rVLs3zNYYfz/JvqQvBgKC3L8KZt9n9nlmwTDbuGqM3KrHu3qDsBcyv1UgDA2KZTZYrG7+zamL1ICprkpzGbknMHnR3JYzu2KDZzRG0HEqDPZ4/cZGHV7bTe3IQLTVpTmM3JCNHYoKawforAor5gOOv+o/nya7yDedKaXpE3/6Hr6VkB/iJzcnTU5htAz0ZkM8H5JwIx0ixjBRDKC4+to2B45qNV/b5i9v/mF+9/GrOP7wdb01QvpzQGzZoXqcx+4LckgCR5ZcTD/qTCQiN0TUQV+ooygRvT4uBvI/SglhJ6ieGcdcEwZAmKaeIWCBSAQMhtWqPjctVymeMbHM0svqLsiD1IBxKsRqSkSMpqS3ZOChIbbj4rn971ZwAbDtY0i967/dx/A8PkV9JWL7TJBpKcQf6mGaK89EytVM+l1+Vo3KoTqoESkmKbkjF7XNybgznrEd/ImHPvmWmS2u8qvokhlCkWvJQbx9//vgdIGB0vIEhNK2+S993cE94GAG0pxNkIYZ1B7MvsFsCGYI/oUlqMUbLxOxKUleTuprCrKR2JqY3atLZATIWmD6ENY19oIVSgn7HBanJFULO/+TvEK80zl0tJ86OST32zncw8JTE8jWdbZLEBXcTRKpxXrXG67Yd4Q9OP5/ocgGrm+WdvXVNbi3FiBRGP0VZktSRNKYt0rtbGDJLqY4WO/zA+BGe6O7g8x+6GWdT420olCWoHxYkxRShBCiQkUAoQVJOEI4if8qhMK9o7Zb0J5Jn1ldhpMvhkSW+NLOb2hdt/FFBeqiLlBqtYaDU44emnuAT6wfo/JcpvNU+n3zsV57QWj/n/4uHbylHrrX+GPCxaz1OKDAijTunQYM/IomL4Fkxg1b3K4UGCaqSJ6op7qnM8OjoDrrjecxAU5xPMUKF1UswG3306YsIrfBMk9zu7azfWCMdiRix21zuD1A708d46hzpjXvRQzbK1Ghb0/ZdZvQwrVYO1bEoTrTZP7jKw409CGWhJXhuTNgTDJ7sY270YXaRst5N/WYHI5RXPC3JDc48N73M4pfh6Wcj/as4jAw6y0U2rYScGbHPXmXE6OOUQuKihVvPJmTiCdKSZHy4zqvzlzkxOMnSRhnHiTFkxhVA6oI/LEgKGbciBR0ECDNPf0ASVTQqNulKh3w+IHElfsODWCLirKCXFBRJHvRoSLnk0z1ZIz8PSc5kRQwgEoGMBF3XZc6vsrlWYvSMInEF/phERhDUDIKqxPMi8k4E0LpaTpQWdCKH5XaJILQwWwZmIAhjSaokOSsrOF5q1Oh2XZyeILXAcWPGjZC6n6dyFnJrMbnzGyhziM28InYkvpIYocDqZTUOq2mgLE3qKUQqyM8boKA35CGFZqrSxDViVgoDpB0TNMi+zGoTEUSGzYYW2BsG3rpCaEBrjFhjBJrWDpN0OiDWblaUNDTaEGhTXxMnAAKNZ8TEBUFcNLji8KOUIEkMyg2FNVfHbmyn2c4RByaEBuZkkxtqS5xzh7J5YikG3B57cqvc6wXU0z5fCsZpxDlIJAiNFBoN9DouOjAIq1fmUy5BGBpvWeKta5SlUSYYfYHqmsg4s1ZWR+BsCtwNjemnpI5JOBVhrtvkF7O76azlM92cAkxNFBnInIfWm/uumhNDo4sJZmBhd1K0lCgnK8QLIdhd3uClhVP8feUwF/M5lKchhdyqJH+2jvADVLuDME0wTVJvFyuBhWUnmZACwYDZxZZJNl/8zHYBV5QAZDUJJbDXDMw+dPMSWYyx2prCQkhjv8vgVJNu3yEKTEpewKDTRVoKocDqQbiYQ9tZSqZpKHxl008sTD9FdoNnJ4FvQ7Hzn0MKjS1TlKWJ84LmdRrlKrxFidWFxSfGea83ht2U9IegO2WRuibOhuDdf/K9qCFN4wUB+aMeU38zRzpYprOngOMYeK0RVDnP5uEqne2C73nZl5i0GxzvTnKmMYwcd8jrPWxe55HkBGNfirFbEfUbSrRGBHo4RZYyo+MZMXcdOkdyUHJsaYL+TIVkMGXpZyL00Ro7/nADI0jwlnP0x1Oe+6bjjDstzkRjXIhT4FnrEl8Fq6MZ/pJBo5Kj6IS8e/k+EiWJlvN4bYGWmjgv2TyokRM+Tt/lJcd+hGY7R9qxcIs+94yd5+/qRURqY/U0uVWIuwKhLKweJHsnEVpTnk3w6pJWVKbl6iw0B4wsU0B+QWD1NN1tmTeu+yZNlccJBQhN6aKmdlqy9ALFL77sH5kLBzjTGcEphrR32iR5TTwVoPsGqWcRFzX7a5sMOV0evoZ5EvsWG4+OMnw0YbCT4g9r4gJEFYuehsYDJdTlhELJwHUzjrQB6rEK91x6JzIWyH3gj1p4oyN0twlq4w0210vkFyVC62fCYxlm3pQyZVbADsDsa5wHbbRhc3Z3haSYUj5tkltX9Eay8Lh8QVGc7RNVbYKKTViFxnUSuwn5VUViCOLclRu6lMNSUD8kEBqsNlh847znv8RKt8zHHrmRsVWF2VckRYE36DNRbWHJlIXtRezWKKOPBogvSbqTFsGApNGr8bnIIlrIU6pDVDHxE5v4yk5wIqryG+deyvpymcHHDPwRweue/zh5GfIbnZcSRJlxFAkYyw4yzTZBLaF2qo+53mH5JSNE1czAl+ZTVm6VTNy8zGqryPqGhzvQ5bbxRZ7KTxCsF+mPKu46dI7L7Robj4wiQ5CJjehdmyJa+BJ70Sb3pkWGvC6zp3cheiZjz11mZ2mDx5e28dLTP8vgQxb7TvXYPJCnu01g9VJEqmjfNsX6YYNwPGb/nkX8boNkpYxSgomhJp3Q4Rcefw1Jz8JzwR8RBAMmcQH233GRXYU6Dy7totnMU74oKcwFdK6zuHPnRdgJhtCUYwc/sakvVCidMVmatlgqtJBGSm9CkLoabWlEJLA3TdRCmfc9fh9RWTP1y4sU3B7c9ew8/G9p0dcStAkMhuRHeqRetsM5GyJbaArikiYYTVDbAowQhp4KsTqCieEmiQeq2ULEKVFREpYNVDlPNJinOynob4v5N9WHeXnhJL3Ephs4xHlJOOAQVkXm/c93kE+cobiQ4q6DCAXiinQp1pIDhWVeN/wIlYKP3RCIXMKbpx+mvzuEShFtSuwOIODtw5/lDZXH2EwKnA9GrokLI1QUliKS2CBMTGY2hji9NvJMgSN1sny9Go44ML5CGFhsXKySrruIwEBrwaCV7e6Q5QztrsbuaMxuJmuKajZR2cboK5y2upJfz8JiqyuQaRYlOU1Nbj3NvCpTQyrQgXHF0IHlK/KLAUj44dIsdxTOZTlEKyUuauKSolz2caoBYVWRlFJyZrYxXgtkCt4qFI8sYj98Gm8jwezrzOiGBpXzEe5DZyjNtMkvRVg9BRpyq5ra0wK7KYiLiqiiCQYFcUnhWVkKxfJBRlfSHwZomcnrRAoizfLkMoLCckJpLsGtC+xNA6epcRrJM0Vybz3GnFkgN7NBZaaH1dHEBU2Sg9QWJI4gcTOPzW5nEUw4oIjKGrOfFU6vFSIWuKsGMsk2Lu0oCl7IiNdhItciHND4oxb2WhfjkZMU5wLstsbsSvyug9nLNmojEldSRiahjllJytTrRax1i9x6iunDdc4Sh5wFLCtBmBplK5SV5Z8NX4DOHFKz4aMXlpGRBgMsX+OthmhLc+/IDHdOXWLP3mVumZjnhuIi1aKPMiHNKQ6X5hnOdTB7WZ47t6KR1zZVMklpV/DGyUf4lYmP4FUCtKN42dhJfmrk0/R7NvkZm+rZPvLkJbyNNJMga9CORXfMwDzU4pU3PcVf7/0gr995JIsQNHhmTJQYsOBhrZukniYqaaIyRBXFLZU5nl+coZbrIw2N5SusTR8MzTavwY+PfI53Tz7AvQNnKVghIroSobQM1vsFAKJSlr7UVjYfjL7A3YDa6QRnQ/Druz7EX+/69Dfk4dvqkfuJzbnGEG5d4DQ16pRHVHSZuHWJw7VFzrRGaIUuu8sbjLkt/vbYzXjHPKKS5vKrTaympvVPYxgWzL7jEFFJw3hA2rFo7KthRNmESF2LD7VvYthq4yc2QmQRgIwlSR5SR9PdW8at7GfhRZKBfeuIMwPknsixNuCxVB7iS/0DX6kWFzSVSo8XF05RuD3gL3//VmYvOUx+IsUIJN9T/sns75MzlI3+NXESFwzWbnIwrR690Ka5WEJGkulbZ7mxsoCvbCJl8rnZPRx/egf2hiTfzsJ6GWni+QH+9KkXY6WC5p6sqDP4VJu44pLaNklOsHynSeJp5GhAEhqUn8we++j981xfWeZ0c5T1Xp5weQDLF0RlhVkLiPsWRJJgKibYqWgaGmnCnpFl3r15gPP+MIvdMr22S66VCfP9wMZxYqr712n7Lk8+OI2MAN5/1ZwoT9E6kDJ0dBAz57J6i01/LMXwBdamwaUfUlhv2clwpUvN22T9o7uYfKDJwksqmHdt0p8tUz5r4DQV+ZWIqGTiz4xQLAg2r7+SDsilmKWI75p+ms0ox8MPXo/dyLz0qCzYOGygSgm7diww4PY4EU8jE5POdojGI3IrNt7FIvgBstFisFmmMlOkfmOOzfv7pOsu1ZOC1BGEFU2aUxiDIcm6y/ATfcyGz7FrmilQqfR4/quO8tmDe4n7FvlygCEVd1dnuNGdZfsrNzhz7yhHPrWfwWNVll4It994hrwZkTdD/qFzC/mVlPZui+niKq3U4z+t38pCUKFY7tN3EubKLrgR/3n2fgpWyJ5aHVWV9BMLITT7SmsoLfnEZ2+mMCdYvncQxCDN6xOKYx38pSq5dRst4II/iNKSAbfHdYUVXlg4xd9ENzHxuR6N/Tke2HeA1U4h25RM8cymei3QZlaL+LXHvwvHi4kjE6sSsBhWeFDuw/Fi/Ambc2+0wZxG9CRmX7N8p2DpBTUq2zb4/u0n2IjzvOHCq5FCcdvBCzSCHHObVbQGub1H3gt50eQMy0GZx76wH6st+bOjd2C6MUlkghIsfE8CFCASvP+RO/hL77kYlqJa7jGY6zG+b53edpt0tkzrg+PIMVC7A1w3oprvs94qkPTzhIOa6N4euwc32G72s3N+A3xbDXmiJR3fId/XWD1FflkS+oIXDJ/jFweP8ZHiAGeDMe4pnGav1edDzmFyK5r+iGZy3xorR0epnY6oH7Ixb2lQc0PGCy3W/CJzuRqibjO4KrDbcKozRsPN0U8stM5E+6ktskVsa/o1SWq75He2+L5tT/GeUy+mOJdm8qKOgbemya+mdKYMOjug4ERMGYrp0ixvvn6BHy68kJUP7ML0DfqnPJojDr1R55oNubKhP6owpCZKDKyWgYwELx46w09XzwEQ6pg7F3fiLRpYnaxZyAyyL9Yyz6g3ZtDerXBaEmOjA4AR2sQliCdDiuU+r9zxNBd7g5w8vh8t4c2TX+QV+WV+3z7EE61tnPQGUJZAOZqcF5GEJlqDXQoZLHfZWdrkQGGZlajEo40dNMIcncBB902MAAxbEEUGjhOzt7LOjB4mvgjONXqftpliD/tEFReh8/THU3ITXaKZEqYvuPG6S7xt7LNMW21qhsOh6s8gFlZJchXesOsJ/rBxN15d4G7EOAstbMskP2/S2lugc32C4Sa4VspkrcnbBj/PuXiAR5LrMfuZl566kNvZZnpwjRcPnKZmdnmiupc4J4grispAl7BcQxVcpN8n3diEzSbiAhjX3crzdl3gYXMHaqZ4peCp0Z6ikA9oNRysuTrJ4vI1cQIwYnT4meHPUDIDFvsVFroVlBbssNY5bNIT9gcAACAASURBVMPhgRMEtaPcOr2NdqvAgesv8QfbP8alWHI5GeDD3o2YfopQNlXLZyUs83RjjERJck5EwQ2xam3C1ODS+gCWlXL31AUqpo8UmpyMeEPlCVwh+GjtEMmaTX9UkRZTKqMdxkptzpUqhEUDbWg2wzw5M6JohpSNPuNmnygxME9fppTbw3KrRBBYOFcKw/qbyA98WXllX/BITRe1I6CQi2nGHvOihmWmBKWE5+65zD21Gd574Q4aF2u4E11uGFviYHGJuwtn+NvN53JifpzRwRav2/Y4x7uTnFsYRlqKycEmu0t13jbwIGfjAR6xrsNqC6x5G23ZUFBoN+UFB2e4Lr/C/3jkBeTmTNAmQsP6PpP8VMT1tWX255f57cWXMPiUz5qZRxzuU8n1mSo0SLVg3c6T1mLePP0w0+4SOWkQ6/Qb8vAtqVauFbm9Y3rXf/0xOitFzLbBxOcSrHZM/RcCfnzvg9STIn5qs89bYdRs8cnW9RxvThAmJrGSrK6XMZYckuGYXdvWWGqUSS4WSKoJh6bnubgxgPnZMlpCd4dCGxrDl1g9weijEUY/Ze4lLtFQivQlMs4MOxLKZwWFpZTWLpPeuEblFNpLsdYs8gsCf0ST7AwYHWzxqokTvOfEXUz/+ya96SHin92gaIcsNCukqWTmNc9eYf7ncLZN6fF3vgMtAENDKca0EwbKPQp2RD+2CBOT3qODVGYU7kaM3QxJCjZxwWTjoEl8U9ZXopUg2XApXDRIPAjGU0QkcOpZl2ZczIp6zpjPaKXN7+39AGWZct+jP0k0n0dGWZolP58Z3839gmgspnDWpnwppX7IgP0dpNTPdNSmqSTacClcNLG6mlw9k32mjiAsSVr7U7StmHvru66ek52TevSXf4bSaQsj1LT3aNK8wuhmz+zLypAbbjvPvxl7mJ/74g8y8EUbf0wQjKbPFGOTQopZiZAXPKY+HRIXTFo7TcIqxNN9VCKwZx3slmDoqZDUlsy+WmCWIpzjOeyWpjcBSf4rnqIRCER8xfBYmvKMoHYqIBiy8Ydk1u1qQ1DL5ovetKmezCxU4mWpLrehECk8+oF3XjUnAM6uCT3x628nDQ2klfKag0fZ7a7xO6fvpbeWyQbRUHvCpHI+YvWnAh587nv4T+t38eGZQ7huTMkNaQcO3ZYHXQtnzUBGWZNXXIDezgS7GvDG/Y8B8OG5GxBC8/N7PsUBZ5k9psQQgt9vTHO6N8aI06Zs+oxbTSpGj4c6+zjTGaER5mgHDmFsEUUGaWKgAgNn0WbkSEJ7m0n0whauHWMZirbvkpwrsvA7v0WwOH/VfnlhYErvf+XP0dqTPae0kmB4CduHNylaIcdOb8deNzD2d7hhbImlbplm3yWKTJLY5Dk7ZnnH2Cf5fO86/mn5egp2yLZ8g3PtIc6fG8OuBvzS4Y9z0p/gww/cDsB1d1yiYvscXZmk37dJ+yYIOLR7gV2FOkoLEm2w0i/SCHNcvjyMs2QRTkSMjDdZOz9A9WlJMCjwpxJwFG4xJOja2Es2qauxt3exzBTHSgB44uX/9/9/qpVvBpaRMr6jzmYnj/1hA+vCMs3l7XxxaC8lK8CWCatxmUBZvLLyFD879AX+pHEbH5u/nmq1iyr7FN2QquNzORigdhZae0xuum0epQWXc2WsHpTOZUUtmYDZV7izTdAaoV1wUoxKgBBgP1WgsKixuwoZaVIb0mJKbaKZdfAdvQH3mIHVESSLLms7XD5rh+g1F13fhP1D/PD2RwiVxX+beSlG9xrdCqHRRibZ01JQ2tFlrNjm6UsTrDUtZJAt/uolRX4lxFrpQH0Ta3KE1C3QH1H8wqFP83RvkiPrU3TshE7Ow3BSBso9NupF8ifsLMecQm/U4AV3nea+8tNMmrCaCuK5PKULmdFNCgljX5Lkn5jDH9lNPKWpXEjJfegxZPJclnIFlKfQ+Uy9IA2dya9kZvxLn7+I9n2U7yNuPEByn2ZnbZO5a+EkFcieQX8kK8iKWGC2jWc6EWsnBLnVhKeGpzhQWiFfDmhcb+HWBdXjMpO57elyy8Qibxv7DO8sfz/pQxWMIKVyUdMdM9ncLRAbNjv/toFca6CDAD05RmUMdtfqrPzdbkrH1gh21AirJit3CdypDunTZQrzmo1bE27Zf4knrd2YfZfuhMDfGVM8YzHxqU1Wnldj+oWzHBHbKS6YGP2shhGVTTYOGCjn2h0ooyfJP+6R5CCqaG66dZbnefP8lzOvZvJxhTIFCEHxUhdjrYnfHibQiqcakxhnCgzctcgDBz7I2xbu5qEnDmO1s8Ks1VN4K32CYZckbxLlTH6g/AS+MvmfrTtQqWBq/wY32O4zY/n52kWoXfyaMX5X7jiMwP+1foAPzNxC0LURHRN33aA4q0ktTWunSTCoMYCSG/LysadZDKt8uHP4y2qeq4aMFN56QnOvmXEaS1Jt0vA9YsfAbBm4m4J202U2X6VgR+yqbnJqeQRWHFaGSkihGDQ7bCtuEimTJb/Mpu8hQolhKF6cu8hsOMjOv+8RFyxe891HuC93mXfxci60Blmpl1GxpBM5tGKPHx/+HM91BCeimJl4mHdd/AGqZxSt2GZVVJBK4I9nqSR70yC1DYJQIoNM5y9SiGYLRBqCUFyVjvzbasi/vM22fA+t4dwbbUS6g8pYi8VemYcu7MNqGhSv3+CusUv83fLNrLSLhIFFEprsnFzn+8ef4EIwzPHGBMLQ+COC1FUcbU7RDDz8yRRtaXbsXqXVdwm/OEBqCWa/dxgEVGYUxtMWK3dYiOEQkyykC0sSXZbERY1wUzpdjy8s7sKtBqy/wiSNJIQG+eEez6nN0Zp2WXzTQYIBzWc2r8NP7KwAZFwjJ6ZG1iLi2EEbcPfYeQ7kljj55A6KFyXdHYpoMKGV2IRlD2uni9kfxGmlWO0IGefIyTDrDP3iMDKGcghREepTFiIS+KNZAXD4yS5CeUw4DQ5YdXLCoyj65He3aOaLWUSQChafb2I+ZzfB9ohSxWf9cJWqcxtxXpBfENgdidsw2bzOwLitQadt4TQ0YUkw/yN7cZqaocdbtPcWefmOR7g1f5GPXgMnRh+qJwVmkL2bIs59+X0WEi2hPwzdCQtz0eQD63fBeMDE9avMLw6QeBZxJcWTmpmNIX7FfzUbmwX6N1jIKOs76E7B9x06SqwNPjG1nygcz9714cW8Y+9nGLVa/NqP1Fis17AXs/eU5LY3OTyyxCkrobnX44W7zvPqgSd5orADuwNWz0D2snet9CeLaBOOLkySdixaO02iEqibOhhGQNiz0eraVSuqoOjcHJA76WI3BOtJiVhDPBaxeZ3zzOc2ri+i7ALmMtzz/l8gKSj0toi5k2Pc8NBPEw6lVJ67QRibrHSvHCcsvLzPHRNz7M2tMWJIYpnwYzd8kVRLdpk+V5Or/TJeVjpG+YDPA2sHOH1xnDiQBDWB2dd4dQVIWhs5Ljc9/vuFF2EUY15y/Sk+UuhdEyepI+lsM1EOiEgweETitAT9wRqtgiA9HFI43MBTmXR1rl4l7lvYczalOZiXo/wH+1UZv1pweaNGfKGYGStH09/weNkTb0Upgf9jNk4xZNRscSwa4MHj09hrJtIGIWFxZZxFMc7JQ6McHlziybUJms08RtukvUPQ3x1y0+45jp7bjnMhe99NMKiy/obzZqZv31TEnqA7Ja9pU/u2e+RaC4LAwjAUP/28T3HAXeSPl5/PuY0hyidNqudiLpcqLJQrnJ8Zo3jeRJZAlBTlXX1+orLIX3e7PLq+Ayk0UUWjHc1Cq4zWAmu4z1i1zfum38/ZuMzbn3oraIFzxwaG1JQ+52GcuEhj3yGCWiYH0xKSXNakkeQV0k6J+xZx02F0xwav23aEC8EQxzYn2FXc4KbcLMa44oP3OJhKcLY+TBibCCWuOc9nGIpioU+zY4Ghuad0hhudNf5zR1CaT2jvkZQGe7RTQZI3EQnIRFA9Y+AuhYg0hytj1poFJp6MEUnm+fWHLJRjoGwIBxRCSczFTTxriCGzw04rW5SukNw+fpnT3iiLaxVU36R6qM54oU2kDFIlubDHZa3skFsQFBcUpfNd9JGnSX/oduQ9IR1RxG5rupMS95469bUSXr1Id1zyqvKT3OVeGylmoKjOBBh+BAqiARflSLQQKEuweqskGQ8pHnUpX05Z+G6D7544xt9zmPloCJHLwtFmM0/zcgVk1swk+xK7IYnHQn528EEmzQKMHfm6Y7jnxv/JSgqvP/6jNJbK3Da8wh2VCxwqLhIoi5eVjnGrY/FOL8b0wfQlRj97GVJ/0My6Clc9ZCrwRzXJjoDP3vYHdJTBL81+D5v93DWIVDPU3B63777E08f2Y/qazSSPAmqDHTaDrKEJDWP71jk8sMQXP3AzU381y8JrtuPct0n01BAjv/sw9bfezuvveRwpFH7qMGh1uNGdpSIjdpsehpCAB8C7Bs5dufrVG3GAWx2LW53LhMpiZnmYNG8QFw1kLHAaCcoUGG0DIxCULkJnu8lb7/w8R81rrDFZ0B8WKFshQ8Hg45ukp2YojY+hBsusvEDzm/v+lveu3c1T6+NETQe7blKYg8r5kNR1OVmYxCpEDFU79Os5Ro9pwrKgNQ1Gy0TMVAhHNb/13e9j2lrD1yYP+vsozlgUFhSdbZLUhtJlhd1TrKhBPj1ewrnsUFrPHI/+WMr2iQ1eNXyMEwsTOE2L1BUoTyHbJsV5hdVNcVd9oqpLWHOymp7NVRWAv62GPNWCKDGZHGxScfocdOepGD5PnNlJYcbCSjSdKRNkynKvhLdoUjsd09qZ3fTRkzvZt/jDTAw2uX/sFI2hHJcmByhbAdcXlgDopC5jdpOKNNlltjjwgvP0YoeXjpxCCsXvvf1eVPMAB66/xK5CnU8sPIfCgqa9C6LRmJHxJvtrq5zeHGGtXmJ9s8Tvtu5h+1CDV46dYC6s8T/m76FoBdy//TT1qMDjS9sI+xZGJ9MiXwvKVp8bRxZ56HQVoy/4ePMGlvLzmD2BDDW5ZUkvKVM9JyispNQPmvR3RQSrNtrKUj5/v34zKjXY3G+RuFnYbfYFueVML93dldIfgZWXT9EfFExZG89cv6kUDxw7SO6ShXvFAehdHmJGDpEc7HJwfBnHjfDzJlFF4IeS5t4S4RtuR+VT3E4es2ngtBJSR7B+qYrZl/RGAQFveOAnwFbA1f+PgDgnWb/Rw2m6CKUJBrKFYkRXZJINsDouqQuNfSZapzywtp9eZGGVM21Zmkp0YGC3r2wigqxQeccqB2srFOWzh045aTFExBt2Pc75sWHGnSZKS6bdZWpGlykjBCxee+AIH3jTLVSLTW4ub9IIctT9HJ3LVcYevKKCKUBHuPxF8xYAljslgvjal95ms8hTH9tPdV4hlObPP3037xu5jQOTy1x/4wpHPnqQ2umUlXCEB/e4dHcnXPix7SQFRXu+iluF5htvxx8RvOf0XewfWeHtE59hQPqMGDExcDKOyIuEbaaHJb5xeNlIfXpaUZM2OWl/zd+323V2j9RZyRVpu3n6U4LmQYHZhuJlibKgvVsTDST82cZdLCfX3F+IEULteJaSWL5nAHXfHcRFSHKaqfwiD3QO8Zlj+ymdthhZV7iNhPUbLVovVIwNLHPP4DybUY5Vv4RwU4KqSepkPQWGL3DrGhkJ/t2R72NqqMGv7/oQd+bO8dGXz7PWKTBe7GAZKUvtEp3Y5ObRZaa8Bhd2DVLvF9jpdRlwfJ5busTN7hwv3HOWB+69nspAl5eNX+Zsa5iLEyO48xaTn7VBiuythwnoKCvmfiN8Ww25VoI4NjhYXWZPbpUDdoNYQ/G0xfjnW6zfUqI3ljWfNDo5ioua/LFF4vwU/pikcsKkckEx+4pRXrvv/RSlwBqWWBhfZxK5FCR8cM8nv+q377j3T5/5vpH6fKRwS9ahN5xwy/Rl7qxe5Dm5i7xf3sGDvkuwlCc3azD//zL33nGWXdWd73fvk2++t27lqq7q6q6OUre6W62MAkE0IBNkDMYGexxgjJkZ+2G/Scb22I/neWPjgPHYGIPBgDEGRLARMCAJlJBaqZM6p8q5bk4n7vnjlFoR1MV8Pvq89fn0X9196tQ+Z6+z9lq/cK3iHeNH+VT5Gs6fGiA7VOX/G/k6h90BHpkaJWrrWHWx7kRe0FrcljvJY9UrcZYVBxc2UCok1piHEck5hVGT9ByswtNn0TZfzeBAidL5PpShoTfhyZlholBQGw8w8i77N0zx2MQo3YcN2nmNxo4QkfWoFAXZbIsBrQ7EbJVqZJA7ZND7WI3WYILQkiRn2mgNlzPFHKkRl7Tj4iUN/JxEhBqDN85w745/4X+sjvPxx24hURWYlVi7JXXRiJE4vWDUYfyzLlrTW1ePPHIU1R0B1rKGCCVuMW6XaY2YlZm+GA8MV3dqdAYCUIKzsz3YCY+uXIOma9JuWQhXYtZiwo+IwCtG/PctX2NEr5ESiR97D5YwsDSDDxYuEKpzfKed4ILby1Zjie1mgmcq1D/oPs4fdB9/0f/fq95J5j/PIBIJvCuGUZrFd+Z3YOkB1bpDGK4fomGt+ox+eZGwkCTSJRv/ReLlDEY/tMqHen/AGxd3kvzaExRS17CqZ+jbtsztN57ii6f2YT6dwi1ErB7oEJUsnENpTu6Ba8eapKQNWCyFTU55vSSlS79Wu6xEvhwpSqGDbXRI8OJEPmqscF3xIjPJPBeSXQwmq1yfO8+nzt1A5oEM7S6d5v42Sdvn+9PjlNwf/1xeKrQOFJ+MZ2CnP5hk76ZJ+uw6juYx287x6MpGCk/p9H1vDlUqE1aqdG6/jvO3fubSNb7TsvjE3M0Yjo+bsxAqHmwbTUisBDglgeYlmNmQwBvTuNnS+N72f133vYLN+7rvZ+s1i+x2JnmNE3Kmp8m3+nfyqTM3EByMf3+9reIkfpmt2le2R+5JwukEj6U2cM4p8tWZPTRcE6VDdWsau6KwyxHlyKDjS6xahOp0SM52CE0HNytY3G9C2uWvVm5md3KKO1Mzl164pbDJfa0h0lqb2+wamhCc8wNCBFsNDUsYz7ufhDTYu/cch4vD6NM2p+7eQuN2i7dtOkrOaKNpEdmRKsamkGuLc5zzMxyrDeDManSWCxyY/iCEIqYjR7GecGS91G/+o2MxSPPF+Wsu6c1UTxc4mMzh5GBll4X0QIaK0q4McsdegiTMTnXBBp8z/8ZG2C4GIDVFaEWEoeTp5T6iikloCsymoushk9AWdLqh3GdQv/LZdShoPvUb2zSH07EEqgRrNYneTqK0kEcnNuJXLbSGRGVCoq1tBpMVDrsuj5TGsCdN9DbUxhJ08pLmhojIjMCOcNsaCySRXhIOX/6aSD3CLrbpaHas8jhYxTF8pi92IwKN2maoIfELPnrKJ2gYqLpFq27Q0hIIJ8RJuvh1h65jPuUtBuq2Mjf2zDOs18hJudY+uLzQhGTcWCUnW7FIlwqRiOdd46TX4il3mKR0KWgNlBIEe7cQWpLGkEmkC5Ye7SeyFH4m/ImoeKFjUN9ZRHMjlBQ0ezWCpOBb9+/jX5N7KIbgv/oq6qMC1eWyuJzlc0vXQsMgSir0gRav33SSJTfNzOYcN/ZewBIG5bDFCd8GHDYZyyREgCEsQhVRi2J6eEbGg87zQZu5IM3vnH0rC8tZugoNiokmb+o9xnXOeUZ0n6KWvHTPCenTY9Ri+j9wvtrFsaV+6lMZ0lLhJ2FT7woRgvOnBojc9Q2ZIltRGw/JTKURAYwMLnJb12m+OreHlUaSW4bOcWP+HB8/kOHU9j6slQHMKqicy3+Y28+16Qu8PjHFic4Yp5Z68WoWtgHCixm4CFi50sBPKeTWBqOFMsNag/W2mp4bvZrH1YkLDK5dpyBhv3OBR3vGOLl9G0EC/F0Ngo5B6qiF9vIM/Vc2kWsdyJwTLCfyLJtZcodMrEqEuwHK2wRD97lYp2ZRciPVUMNe7RA1muhnZuiaSzL3piHyNy1Q71h8/cRuJkcLvDM9fymRTwcGn5m9gaLdZP/w3RhK8Gh7jBDJgHYWS3t+IreEwVc23UN1Y5tX/flvMfDRxzi95So2bktRNOroMuLNo8f4veIxjvse9ze3cnqlh8xERGrWRfvhcbSeItXrh+nkJdXx2GRhPVFrOZw8OURqTXC+eEgBkuWrI9ytLvYJB2cZVvcozMEm/lSS1FmDvgPTfGfbN/iz8jifPH4jUkYIRxG4Go3pDGZZEpqKxFJA5l+eRqTT1G4Zo+zqVMIEEFPoejWLP7vmn5nbk2fez1ENHKaa+Rgjfq4X7WQSq02crK91edf2J7FEwA9aWzkx10f3qQg3I6hslniFiNymEknTJ2N1cEOdxcEUQSThLy9/TRzDZ2ffPPPpDAK4c+gwBb3Bh1ffiGrapMfLjOVXKbsJWr7BQrULe1kiQhkjc4Ykdr6BLAvs7x1CG93P1/f+Hf2agyF+sg24xUiyxQBXWbSUR0KYPDflPOUO88mpm+iym2xKrRAqwdI+B6WBlwGrBKPfrOOnTeZutgic9aNWggSs7tRITcfs5+o4RFbE+D824NhZyu/Yy+wtJsHGNgPFKkuHe8mdhMawoD0YcOPwFH/ef/AFHzGNhRDurl7FoFXmlzLnScg46brKZy6Mz/UJGWOZD7sDHKxvIvqHHrY9NMPigWHOjRX58j4Td8Dg1cmTFJ+zMEkRMGiUmddzKCVYWslgn3DIVkFpAV5G8Ia+pznX6mVhcviyktZzI2132LRjjsWLw2ge/OLAEX4mfYqPLr8aJhP0jdX4QG6aD1z7BcJrIr7TTvBIY5xvTe3gmw/v4+QVfewcm+NYYxB3OoW+BkmWrsAuKTpdAn9Pg009K3xi05fiucr/QRIHGNJTDOlcuk5RS1LUYKJ4hINXjpHvrnPPVZ/iwc4gv3/x5y+L7frKtlYEhI5Ay3kYRgjKRPPiKtZPKWojFmltKK4k6+CndIztmyhvz1DbKHF3tnlz/2kagcWyl2J/ZhKJxFU+1cjjlLeB8wvdTOgFPmzeyqBVudTTtH/MMdFAo9WniPbvJJWPXYEW3CzVcpLv21uwRMCMm+d8rYhSgsXrFZVlh2LXHkJT0BiM1QOzpxUyFEysY02EptCyPkFCjyVluyRKQHIGxIRDfVOIe4VHT6FGb6LBkdUREJJzZ/u5LfhplqopvLJNorvJdYOTPL4wTHAhj72iSE+6hI7G8s/vITJjHLNbUCSlSysKeMy1WQh6ONkZoBFYOJpPVm9T9/tZaSRjOFQQJxAvG6vTGSLkcG2Ik8u9RDMJQK2RaGI3lVo9gWv7GFpIueXQPp1bY3ZefrihzlIrzUi6jBSKz5y7lk7HoJhrYBcrVNs2p5Z7GcpV2JYvkzI9VgcTtA51UXwiQGvrVKICWl4x+8FrcPc0SQuJvEzaoK9CjnsBNWVxpdEiryVYCpvUI0VBShLSeNG1xs0FXtd7ioTmktNanO8qcmg0S2RHpHobNNsmF3pTiAhCO1o3gxFi3Hp7IEBv6Whu7FYjPUF9LIWT2omfitUFWbGY7RQwFLR7Y8mKsbFFrs5OvORJJCcjrkldICdbz2un+CrkvN/FcpDhs+U+2qGBo/lU/Pj05Y12I0IwKzHlf8Aok5AB8Oyx9LA7wD8uXMvZ1W6aUxmUGdHZ0aZdMYkMHT+teKi0GS/SaWzzCBPr+8AFSlLt2LGgVUPxydM38kBxnGDJwWoJvjO/A01EWNLHECETnWLskBVJlBVxbqKXO2ffjz5n0XUqHp76SYHeUjgrIV5GZ8/QDNdkJ152rvJ/GsPGKmMjSzi6z6cqV3O4OoRcmwu9XLyyiVyLSQcjPSWShseMSqG3FYGjUF0ele0WzQELe1VhlyLaXRrN3iyN1zf4xNWfY1BrMKo/v4emCY1y6HLKT3KwPoZ2zkH6grtn9kGPy103fpyrLAuwX/qmAE0InM1VZm/NsbvnJAAXm10YsyazpV7+bqIYY5tdiTNS5/+5/SscbQ3ztR27YqKDLzHnTIa/PE24tLyuNbENn+GeElPL/UhHYG+posuIwl8msQ5fpPS5Avfv/icOuZLzfg8n5ntRMkX3Ixr6V7vIDBg0hgX2oM/Hhu7jfdHtnJ3IkZ5x0R49TnjbLq77taeQIuJfj+6OrcqkR0OF/P3Sa5lu5FFKoMmIa7smKOhtVhpJGstJzGaMYW/3RmjdHUbyZSzpc3h6iNT9CZy16ikyBEEyAqkIVyyajkHd8qiUkww/GGJWPM6tY00CX2OxkuZnhp4C4PgXdtA/GbDz987w//bdx61P/gru2QzmdavcUTjClf3zbNRttp/9APY3HyexcyvOSo6F2z0OvudjpKSF8TI98eeGq3y+Wb+KOTdHV/f3yciIs77DtN/FtfY0+Rec7CBGaewzT9JQLqUwRHZH1K+0GU2v8ivdD2CLkM71Go+3x/jIo69HtNafFGzbZ3BshYVWTyzH6sXkqJUrASz0lkBvgzEtEZFJu0fRGAvYv+MCHxq6m265RiF/QfTrKd6qP2NW9Ox9tVTIodYox+v9PPnEOFpH0H3VIt1Ok9aAYjWy0duQnI+T7zZzgcILvhPfr27n6OObcBYkQ2cDFvdr/Nat3+TJ+gjfNa4E4KkLG0hmOrz36gf5u3SV9YQfalTqDrmGwlkNCb+T4XwiS3pNlnnuaB8fnyginBDdCDGtAMf08QMNLe2TfsRh4K4LKM9DtTuIwT4aO4to7Qh7vkF9KM9/Hvg2V5oGmnDWdW/rjW1Gkw+OfpdHGuN8+sj1qLJJphmrn75cvKKJPEpERFfWyZptIiVpDMeC63obxGzMsNM6sdZFp0tgVmPvTF2PGNYaL+ptzgQNDnYGOOeO8+DqZqYquRhvLJ+Rmbz8ewsCDcODIwsD/El2E0/P9WNVBdIX+GFsARVlA5SCu1d2IYXimg1TzDazTFzsifvb1w6it/vhm5evwQB/cwAAIABJREFUK9L2DKYWCkRWRGRzSTZ1KZfFTiRYnCrwW903cbrWw0ojCReTOEsKGSi8jIafEgQJhRfofLtV5ORqD4lGhJ/ScX9qD5VNGm6ks9xJYU+a+CmDemQyorvsz0ziaD7fe3wXRlkyMdpFIunSvpDBKccaymqTi1QCpQQNz2K6U8AwA1oDoLfiZxTYoLcFijU4Z0ey7OfR2pLqRonmafDg5T8Lx/LY1LPCF6auptay0Sxo9GssdVI82CnS7hgIBUvNFI81x7hreR/LnRTJKYmWzRBZ2qUqJiGNyxraPTcMobHdnqPHqJGVIZqQdGtNYBVbxJXqP9V7+X5lOz1WnX6zQiu0aIQWp+q9nFrqJfA1Ak/jvFHk8YUNOKZPb6LOSjuFqOto7vpL8o6nM7+cJcoFhGmBbGuIkEvkouScJLEU0ezXcHPx/5EtSaQEBRmQeEFFedTrcFd1H5usRd6VXmQ+bPP5yj40EbHZWqQS9vHQyibmqxn0ukAGgrTpMppa5emNA1QTFvnjgsRK7M9a0Hxs8fyUkjNahNkA14sFqrxCSI9e44rkHJNbCizW01SnszTC2CfUXycRw9F9Bgo1GnoyRialYlE8Px0RWQplR6BHqIZO6Jk0zYimrjDSHvlsk0aXgz/aS5A26OR19E6EVfbx0gZL1+epbFdkpY8mXn74Fa7ZQj6To77bMni6M8yrkye5yrIohy2WI4UtFAkhsIVGStq4yqcUukyHFic6g5yq98KyhQzXbCS1/58l8h3pZb5y7d/w0ZVbmWrm6dqzRLXpYD6YIT0TXTIyXd4H5kgD90iGxIpCyugS7vm5cbAzwB+eeBO15RSZEzFaIuyLqfkogRCxdO7lhNs2SJUVzUNZPj79OhJzkuRshJcWaFlBaxAGB0qs1pMcfHwrmY0VvrXnk3yvNcp/O/F2IkOxcKeLpkXwzctfE60pSRx1aF7RIV9ocHvPCdKyw1/1j5Pqy9PzQ40HT+/DKimSzYh8zUdv+DSGHepDGp2u2I8zapt85PzrqJ4p0LXYprQ9QeIdC4xYHRY7aU7O9rHhIZd2t8HsW/LcaFf5tdwFHranOXHPLtL3Hqd9w1baXRZdpRDN83H/7zJ3X/GP/Pvp1/PgyS2sNJIcl/3kkm3aVwVUKknceQvpKcxKbMrwjHqgXZa4WUnt+ja248HHL39Nxqwq/2H4Xv7TX/0KhcmQ5augMRYhqwX+2r8Nv2phRLC0lOU73nb4QZ6+H9bp96sw2EeYMhGRujzc1kuEJQzemqwQUb7UU99iJNmkR7jKpBG5fPjQm8h+NxHbdg0EaE0NoyEonIwY+fZx1OYNLF2XwKwrsmdCgnSKi9v7CC1wXgzuuKyQTYl90iHzqkUGU1VOLPbhdgySSRelBJm7E9j3HaXz7r10tkToTYlVlniRvtbbfX7cVd3HF//1ZtSmFj9109/wYHuEv//ubQBktpRRSlCdyMU+tcsxz2IkVeJA9hj9u6pcaBd57NweEjNNKpFkw0v8jM32IoNDJVazSco5h77RVQb0MrvNBX4le5ZPVcf5myfeRGRIDg8M0grXtzhFo86bB47yOXuASBe0exVhr8cVG2fZkChzeHWQUiNBOJsmOQtK6igJ1b0R126e5NvjSRYrSepjEbuuusixJzey7a/KNPf30f3OKe7omqBbu7w06aqAiAgHkwjFn07ewdkTg8zfmOWqvkOcDQwOtjbTrdcYNlbp01qkJJRClyNeFyc6g9yzuJ2LS12kL0raPYrf+6mvssuaZd/L/OxXNJEvBw6frVxDyUsQKI3VSgq/ZmKIuH9rNiKMuiI1YdBpphESylskm/Pl511nPmhwws9yf20rtdUksqkR2LEAlTIUyg7JFJv0pBvMBVkiVaMSxceiPVaTrHz2iOQqn3rkYVgBbt7Gy0WonE87NAgNieaB3gJrRWPWLCL82Oy4WknwZyuvYtFNo3XHPYZ0qo0m19fji9baTaqlUybFfZltJHQPNweVrck1PKvCKYVYKy6dXovGQAIvLQgSMTnIKOkEHY0FV8OpxFR/s6GYOdODyHlsHVqMq+hem05ekpQuEFeeOdmm0a+RHB9GiViGNLQlQVIyt5jjd4s38/jMCFpZp+knmOw8q6StgjURfzPWudDbAnsldigqb42HRqps0q6ub3Oe6+T4g7N30BpQeFkNP7OmmyMjTC1ET/v4SkBbo97MkFbQHnBQMsZtB5YgcASa7SJ/QqVmTUhQEY+5sczrnJ+nHtn4kR5XjZMJMlMeSjcJbQ0ZxDhmNyMI9m6m02USOAKjAVqpQZAqUB2P20/OnIZ8eR2kF4eMv00L0wWWkxmymSaFVItQCVxfpzGgY+/aQrtHQCbATwr8SDCWWgHid72jgktw3U3WImpTiy39SxhCUgkT2CvxjKbtmrGEbZeLn5FUcxpIWGxn+H59OxutZfalJ/nu7ivw01luLB56yVs2RIhj+CgFWkuyMJvn/xLvJGH4dNsNLtYKsYyrhOVqCjdYX0oyiBgyV2kOKSJdA6VQLY2mb9IODVqegecaCBPcfEyYEgpoazyyMAIKGiMRKhFyvtSF3haE2SRuTrA3P80uZ/pFJ7oXilgZQsNVPv9U38CZTh+JtaHQmXP9ZC5o3DuyhS8mJ+goA0ME1CKH814PmrnIJgMed3v4H+cPUO9YNGoOqhHrnSPhExM3U3BawF/92HV4RRP5SjnDP959C917F0kZHtrJJKml2DSgMRjbg1mTJRJPNMB1ufBbV3DTG4/wU4XnvyQPdgb5ywuvYW4xR+KcGeOWB8KY0mpF5It1PrPrH0iKgM9XrmHOzXK81I8uI/50/Evse84paTl0KUU6/fkak5tsCsMVruqeo+rbNHyLM8eH6DkoSM0pzB+GtPoMyltBv2Dz3cPX0xyMeM/rHsCWPgfLo3TCF/dPf2w4Ed5oB/u8jebqnJ7aGCfGjR7u1hDrlENiSZGYqqNOnKf+b6/GvbVGu2KjlQ2cJUH+tMJPCLyMFcsDmxrpyRa5pxrUdnfjv1+jN1tnek+aMB3QrdWB+D4Lmk/thjbt3iyFE7EoV2XcxM0Jco9IDt5zNUkzlgsNLYPQNAjtOHFLWxGlQsyMy3jvMmcWuhELKdxexXvv+C5HasOc/Ift2GW1LhajuBCR+YMk2/7iad7W9ST/8dBP45YckqZHt9VADs5T77GYeWSQ3BloDsLcTZLIjh3kZVNDb0B3vr6+Z/GCaCuPP565g6fn+/FnkpjV2HkeCUP3+xgPHKPQ3g5RAj8DXhbKOxWV2yBsh2gVEbecFlfwr+jmr9/0aSa8Ih/94lsw1sdEB2JN+NBRDNyjoaRG8f3zvL33Cb61uouZeo7Z/SHV8RRipMlIscL23CJbEgvckDgLGFQjj4nApE9z2SBN3pVe5I03/fWlI/68lyN3NiQ0BYvbDJy8xxu2nmDAqrA3MUEzsvjdo2/myLlhPnzT13h7aoG3vvEv6ChFUZrwEjjypHTJmm0ueEUS85LkUzqZYyZIm+VUF2yw8W+L2wf6ZDLWv19HmEJynT3LlusnuLDShTydxpnVmS1mAaiUk1AzUAWfqD8kaukIV2KtaPjni0TbfG694TgPT2yEH+ZI1hWNsRT1jfDewg8Z0h2M58CWQxXRiFx8FBLQEGSkTTXy+PBDP0X6pEFkAAJGjvgkzi8yG/XyX0t3smvjDD/X/yjnOn2cavbi53T2W3N8cu5mzD8vkDckxoCGlxU0R0O0ukR8opt66+Wnna84RR8gjCSBkgQpheuL2GRCxYJCejGNHkaoKCRIRexLTzCoV3jmJQlVxKRXZG4xh1g10TsQhRBVZOwSY0nKYYY/njsAwGOTI4ShJJNuU0i2XnQvEbGRRM5qM5P1CUKNs9VuCnaL4WSFc4UeWr0OmgudnMTLCUInAheI4r7hRLuLUAmOz/cT+Ot7EYVQ6GZIZMbiU6ETa1cXe2sUnBbnlofQXElpdw5zbA+1TRFj+SoXOsYlK7pYnjeeuAcOuHmd0JZYEOvMLBWA2LDhpQpBFca97VaPxM2aNAfAz0QECYHeiqtKvaXQIxXDw+qgViC0JX5SEqR1jtcs9JKOWVO4eYEbGXiRhvRB+uuE2hkGbt5iuZPinNtHOuESBBoX54pcVEWkHpdVibLAqgc00QmTsVWbbGkoU+H1hAymqpeFVHGVz2k/JFKCXs1HE4ILvs2E38+R6SHUrIPmQ6THz0j4EDgSZ6ifRr9Nqy9eP+nGJBK/qSN8iQhiPXK1dYROVuPLK/tZdlNo7k+wJgC6ws/HGHIZKObrGY5nhphrZKm2bWTSJ9AjBvJ1hlNlLtS7OLI6QLU/QTr7BCBIioBn0pIhtOdhvtNah04uZltaCR9di3hieZi01cPI0App2WYwX6VkefTpFSxh0PMSg1+AhzsRDzW38nBpEydm+4jaOu2+CKVJjFY29srsRASWwEi7RJFEb5mIdZ5UBIKEEGxOL9MODGbDNHob2kEsL6FaOmZFQkUCRkywkc/4a4K0A3anp3lUG8VZin0LVnZpqA0tWkpjJWyjCUE9Uhz3eqiECc67vRgi5I70EQqaz1kvZNrvhzWbO62zRkDLajBeiE/ckWC2nuXb1i5MGVAwWySlS4QiZ7ZY6DNiL1lbEFpAMiDQNOqDOpr78qfKVxa1ooNfCPHDWMAmv3MF19epz2bQ65LyFo36UIr0tIO9nMcarfMLmYuXjjbPHA0fXt1M9qCNDBUiUjFF92RIpMduOpqnsfgPo2htn/HFFcLeHBf/o8n1AxOkpc9zKwdfga80dmTmiYYEx84P4U7nqe4uc2DL07hjGoeTg1imT9bqUHVtOtUkXsNEhPHy/eDprciGTvfjYLTV+uCHQmE7HvVuEyJB94YyQ+kKHxi8j3Gjyi9GP89EppvbfvYI7+76IRe8Hqb9Ap+pXEfUdogMaA7E7Qw/qXDzsV8maCANRADJh5Og1qRX0eioZzdfRwnkkoW9BLUb2mzoLTFoutiaz8bkKr1GjY899FqKBzWMRqwj78w2keen4wtoGmgSYRiopENYSIFIce/iVlabCexo/TrTnaLG1AENdXKY49Yg1289j1P0OfVnV5B7cILW7mHaRY3EkodRcRFb0siUjz5pk56E1T0Rb9h7jBszZy+L+LMYuvzR7JtpBSZ39j6FLXw+euHVLC5l6b7XIjXjMfNqk2BjB5YtjLqgvEWnPjhI5cqA7dsmOHl6iMIhDbsEakqPXYIScZV+7l0p9CYc/dsrkQEkL3Nu88LIOG3Gt82yeGoDdimifLrAlxavRnQ0CCG1ocbQUJXbuk9zpT3Dv/vGL7Hx6y6fv+MW5m7Lclv2FD+dWvmRH7eN1hKl3RHKUNw4OM18K0P1nwcpR/DZn7ue1/ae5E/GvsKAHpCXNvCji5bfPPGzqK93YbQUg/WI+es13nLgUUpekvO1IjMrOeyjCdy8YvfgHDP1HN6is26oKkBamtyZf4IN1hifdIdwVhSNIH7u9rxO9nxE7kQdOTVPZ89GqmMmQRL8BPR1V/nV7Ck+pd9A16Ey028s8Jn3fAyAJzvDAJgi5On2EP/41LVoZZ30hTWDmp+X3JI6xUemX89kOQ8CWv2KxIJAayoWrwNjoIMQHRyhWJ3Ic/DRInJvlT+68mts0Mv4SvDGwjGOv72PWj1BtGgTORGDfWVSpktxVxNDhhz+2x+/Bq98Ra6g2bYIQo207aLJiHZdYi/FUDcRxkfIIGVgm60XUe81BN12g1O98Vf1Gf2NTl7HaClScwFaJ0LrBCAE7uZeWn0mA4V5NjrLJJ6ziUIVUY8MlsI0q36Smmsj2hp6C/wgfkmH7Apet05S80gbHaaaeapNBz+MrdL8FIi0hychSKyzrQKEoUa9nEB4EqUp+lJ1xtPLTPtdVMIkXXaTZr/J7uQ0Y7rHBQ9m3TytikN+UREkBH4SvGyE7O3g1w1koMcCYIUA0ZGItcpY82IrOF9phMpHE5JQiTUPRgUrFlMUyGWb5JwOfXaN0BAIO8TL6rGNXF0R5Cz0rSOx87itY1Q7yKklAPyMSWTASiOJ6+qoosBPrvOUYkTI7g5hxUS0NA7PDwJQdCOwTNycRrtbIkI9NtkNQZUspBcP5DAjus06aXn5AkymDOhgMOfl0UREEGrPG5aKUKACCboitNe0MJRCr2mcWywC0BhaQ/LU4nmNn1EEyQi9u4NbNzErBpobr/XlYINfGEGk0Q4M3AIoXaK1FSI0LnmWZmyX0VSJI7VhHimNYZbXktmK4N6z26iOOgwb9zCgtV4SPNCj1UkO15FCMehUiJRgvi+WONiRqNGt1xnQA3qeU8U/E9WoTT0KcRV0lEbLNXBi0ygiQ6A3BffPb6aYaLK/OImhhVws2oSpiFZg0vIMjJ9gbhASsRy6HOuMcbIZM2e9TNwLb3pmXOWaAun6hKsl/Mw4jQ2xS1hkRzQ6Fn+0fA2tpkXlCovmhoDtpoerIhbCDp3IoKMMIiUwkx6euwb7lII5N8uUVbhkXmMWOoRZid9MrOnmK8JAi8FzSlwy7G6UHL6xupcNTomrkxd4qLaF0nIGANntxvrsHYu2rxMqiXYZL8srm8gj0KsaYTVF01CYW0uYekD/wyHJRy8SjfTiZy28rE67qJG2nv95toSBJQw+2Ps99v3MBIcaG3hwahPD+Qof2HAfH7nwepLvVxBFrN40QG1E8jPvuJ+bU6fYalRJS+15GhsRiqPuIEeaG3hgcjPufAJ7OU7k9bbBvJ/jmtQFfrP4CAuhxoRf4EGxldPLPRhljcF7yqzsy/G77/4KHWXwIeet+C0DPn/5S6LXBF0Pm3E7Iq+4tesMr06e5J2PvZdwJsHbbjvIH234BtNBhntaQ3xm9gbOzPTS/aBB8RunaN40ztyNGt1bV/j0js/yNyu38O17riYa7PD7++9mzstz1+RuSitpCo+aGA3BapiioRZIYRERv2B2JWTL31eRjQ7zt/czPQoX+7pJZttoZkh9T4fglI1VF8xca9NzXZkrCvO8KX+Y//r02+j66xHcrEZ5m0ZoK4KJDJETkb5lBdsIXm5W87wo2E0OjJ/kWyd3Ihct+v/GwpqrUdmdYvbNQ4jXlLh9+DTfOL0LNZ0gNQFD90VUxyS18YhcdwNLBJiXeU7PSo07uo4w43XxwOo4dd+iN1Un57SZGRsmcEy0DhizJl4xQHW5yKUEmYmArqcDtEbI+Xdq/ME7vsinZ25k4tFhvGLA1vE5+hM19qanCBGUr01yqDLM2fvG0H+CHnmrbTE9UaS4f4VIgflAEXtF0RiRuPmIq7unuDP/BO//5K8z8uUF8nsi5m9w6DoRkPriMudft5VffO0Gbtt0lo8PPfii08r1tsu/7P0ELaWxEKYI05LkL92LIUJGdY+E0HB+BJb6/nYXh1qjnG32sNhOE0WS1asDZFtDa0myZxXd/95n8mdG+Ytf/zJnM118TLyGUjvB6ZleVMWksIb9XteaRJJvNbfwkYcOoJd1gv4AbzREhYKVxQwyG1HbJMifSSCEYPY2+Oodf8F5v5tpv8DHvneAw/9lK9bbHT70h3/PqF4mKx1CFXG7U2Ix9LivtZlN9hJ/e/Xneby9kb9ffD1aB46sDFL1HSwtYKxrlV8eeIhRfZWf1X+V9pkUzqJEziQIkhDYsR9pYEP2qMmJe6/gsWHJZ7bcQPKsyfavL7F0czfv/s17ON4Y5IF7dhE2BEsd4v7vy8Qrrkcug7hqiQyBpQcUnSaL6R6SuTTt/gTtrrh6UyI2oXipSMqIPqOKo/mEoaTpmywEOUIl8HszyCAicGJ36kGzzLBeo1uzXqS1IhHY0sfRfDo1i8S8tib4FBsmnG70ktXajBvL+EqSkR0SmoeUitBWtDak6RQElTCBJhTD3WWanrkugSgl4pZHuDZQPNnsR4oIr2xjVyXznSwLYZITnSGm3AIXlrrQZ6y4gi7mCRzJM4cMW0QESkPvCDp1g8fqY0gUG3MlANrdRfy0whYx5zdC4SuJ1gGzHiJCtYb8iKsJUTFoNnVE1iOZ6dDqNqk1dNyegKFUhV6zRlJ4JCwPL50htNZ2YUQsqUpcJSaN9Z2Xbekz5ixjWAG+uQYlDMLYai0FkWdwut6L3zCx1khJgS0RIegNQWUlxXed7dAHr3NOvmx7xUBjUC/jK51mYFJ3LTakYqTUtBxCPFcITYvNpkMb/NQzpx0NpcX3nbdbnM1Fsaa9Z5HQbVqRiSV9+o0Kc3aOU7a6tD7rCgUoganHN+Qp0Hx1aT9pRHTL2NwY4j683o7NFwgCjKYiWrU4WejlwaLOgF5ni5HEVT6LYazZs0FP4KqAkCYais2GvrZvfvRpM1QR59w+DlWGma1nqTVtvKqFVoutzmJPTlBGfGOVyGQ1SFH3LOotG1YsdFfQ6olnPeuJ1SDF1xeuwlzSMRqCIB9r9YQtE+GJ+CSlgZs3SY1uQBmKpTBFiCAhvdh0u1xDhN0MalUKa3AiTUgSwiSpfAwRYEufYb3GlF6FCKQP1abDnJbFCzWEUDxcH+eC2YOUik42QoTxSTjS1XN0mBTSl1iVmMxFEO9fZeiIEI43BpltZS+t2SWUzcvEK1uRqziJ58/Ek/Fr3zzBL3c9zC+86xc5eWsXr919nFtzp/jQA3eSO2Lg6C8tMnDWz/KV5at5YmYY8/EUzU6Kv2u+BS8nmPslHwJB+nysXPbHh27nC8Vr+J9b/omd5vPfEk1I3phYZL81y9fOv4rRz01y4kODfPp1n+S/nX8zTz24lYNdm/h873729Mzy3p77SWkdbCNgZM8kbztwiGOtIX7/obdipj0+uu+fGdHLXLGOJQnTEbWbOli2h/A1Hr1rN4dKu0h2xX3vRx7bxsPOOETxS9nzqKDw2BLzr+3l1IdyiFVwFgWL03k+XDjAD86O03sywnxccfYL21jek+CDH/gSff1VHtkwTlrrcJ29TELERISFMEv+bIhzdJq5OzfR2KCQGxsUM01a/6uXnifbXHibxZ7rzzM0WmH0DSv8oLSVp2aHeKSxic+Vb8aoSRLFZ2cV7YKktCdEOAGVlkNDW5+SWFb6vCH1ND/o28JFs8DkgSxGvY/QUgil6P2sg38xx3Z3FRFGzLxlgKU3u6QedRj7UnlN7dDk07/wan7rPU+jvQwEMSFN9pgeaTnLajNBo2XxhvGjbNBLPFW6kq5jdWZek8brCtGcECEUnfEOc4M6GCAMHc1o8ztH30Iu2ea6q87wxPQwje/0Ucr0cWR8CCfpMda1SqXjEGSiZz966whhRBi5TuxI42oktZhOnj8TIAKYviXPiK6z/bVnOTQ8Sv+9goF/Pkfr6hGm3j0GxDZ+K6U+fvn0+xjatsh3dv4zT/uCP5t7MyOJEr/b/SgpabPViPfeC4ufl4oIxRcn91F9qojmCowAek8GpA/P0Nrex+pOg9qYovSqDHaixn8693ZmV3KYh5M4NUXPdEh1o8673vc9Pv319TGjvWkL//d66S2E+AmJn9IJWhrOsoyBEHrc3lncrzN/4wDWEvzG596Lu9Fly4YFwmTE/NvG8DOK9x5/Dzf2X+BP+g5emstZQrLJXMJXOgthgjOdfpJzCrsSsdCfZDrlYC1p6E3B40cLmFWP9nssrtw1yemFHhoVi3Rvg/FchZzZJme0qfgOJTdB91qGnu7LcXo4i7UiOPGnV9LslTivKWPqIeVqkih8+XfllU3kYg3rLQAFi26G6SBHIdGm02WwKzXDldYswgoBg6ZvMh80SEt9TWozjmZkUfEcwkBDX/tqmc24X6wlA0I3ZvaJIEZk+JEk/BFntpYKqSsdvQnhwiKIAXaYdZqeSWJW4HYMykGW43rIqVw/K34aXQvJGB12WrOUwiR4ksDXSEiXnFxf81MIsGyPpO3RlgZ6I5Zo9dPx6cCoCVTz2cekeQoMHT8NPd01FsMcYc1EBJJDS4OwYmE0I/RmiF7roLcdTBHSpTW5OnkBW/ikhHEJ+wrxXEKFEX4Ggq4AR4twfR2rojBny2huP5YMGbTKXGVP8qQxgu/qiIaGtSrjqsMQaK7CrAREuoHWkoToVEms3xkd4pYPCini048I48rumepEhCHC88H1UBISyQ6R6YAQCN9HuB7Sh44K0NFetipPSJO0aKCt+ZH2aPXYLDgLbtEmdBSYEUKouB/q+ERWQCrhknU6zK7k6EylWe7T2ZJbRoh4XfUOeCsWzZbOpIwuzV7W6yQFIGWEZQU06haiIwlt8NKCzKTCqPsstdIshh6RkggjQkQaqtUmtCRul0L4oK2hNYyaYLmW4oyvmPC76QQG7dCgHgUYwn/ZBL4UNmlGil7NxBAa4RqCS2+D3lRYJZ9opYTmdqOkQegoeoo1mq7JxEwRrWRg1lSMs/ciZKAwRHjZBL5nQngBxnwFt9BNaMaor8gJEVF80hRGnMw73RFRLsCeMnEWFX7KZDqdAyOiPqoRZEIa7diqLSLimUGugUZaevgqwFcahgjjuZQnLzHIn/lYOHMNxOQc5uoOllvJeI/4Es/TafompgxwNB8pIlKGS7Q2g7GMgJoVEekS6cesbWSEto5c8oomcumEsLPOUiKF3hQc+eoOjoU7aPXG5rofdW/jb+2bsM7b6E3FhfO9/Ib9Fu7sfoqfTT9LCoqQtAODrQOL9G+qUfVtZhtZaitZ0gcd9KbCroY0+jXed9VDvCF9jM36izeyq3x+d/61PDwzRnY+QqbTWAsGvzN3O60fFhn92iRhd45OX4LaSDd/uONtkPPZOLDCyZVe3nX0/ciUz6v2nCKle3xp9dq1K18+RV95kvZcCgYa6FpE5SqfWkvDWoktzy6ZDUtAwtxrAmrv0vC9BsuraQrdNbZvW+Lhk5sxvlygrxNvivIWi8rNimSqwleW9pE32+xMzTJglPGJdTUcYdKt1amNapi1DYQWCFdiPJTBXI4oHC4RzS1pasZqAAAgAElEQVRglQY4XelholHgbnklM9W4IhRrhs5aW6wNUxX2VAVrwcCspkGCWDs6rgdHvhwk+NuVmzk+209YjmngZl2xukvgFwPyvz3FFdk5vnD/jRSOidhM43yWaDTk1K+nwIzQrJC9G84wGQi6ZYv+l2AdvjBsAeP5ZSpJh5xs0685/Pd3f5bTb+/n7rkrWKykiUKJ7+lk0i26ki3G0itsT87zseMH2PrxFUpXF/nBLdvQkgHydatUFzN0HdQBHT+dR5pgZNRP5Bhv6wF9mTqTJ7PoLUFwRQPdCgjPpXDO1zj/dB+/Kn+O0leH2Hb/Kn4xQevW7VTGNPxcQLqvzvUDE5yrdTOx0IXwdN7x6PsYLFb4jdF7SYiYYZiTLfZYPzqZN6IOvz3zBk6Vevn9rf/KAafFHRuOc6+xldVH+8heiPCyBv7NOyhtN2hsj1tri/Mx72Pr92p4OSjtsGj3QKs/BjR8+jMHmFw6sa41CVMmpet6WbkKoh6Xf7vnQTZaS/yXu9+FVYlNuGUAUSqkr7/MUrUbsyxJzgCzWYxrm3zkzi9wsjPIwfIo25ILzyORWUJnqxESKgWEpLNP8vidI6y2E+xMNEnoHlek56iHNvesXk8PMPaVKuoum3QiIjJ93FyCVipFQ4dJI97LSgpa/YpoUxumHIYfCSlvEQz/9hnmWxlmnxjAqAuyqwoRvPz+eWXhhyquKoJ8sEZaEVi1iNDS8JD4hknT1Ui1QXcVWl3jXKnIZLZII5rHWqskDRGQNDy6rCbbk/P4SmNz0uEBNtPAQSgIbEGQhD3OxPNMY58boVIstjM0qzZpHegugFDMtzMxDCoMkR0Ps6pj1TSMqsQzdSIl8ILY2DUQ4Gg+ughZcVMEP8EOFYHA93SEFWDlOgQpDVVKoHngG/EpRnrxHy0VsLt3jou1AkulDDmnw6bkMg+rzaRnYid4P63h5QR9xSqmFrsttQKT7cl5NBTaWokcrYnRBE6M4Y9MhdLj6ld3FUoIRDIBCtq+QduPN3anY0AoIIrRATKI2aciBGXH/8asevHfecFlDWueG+3I4Eyth6AZV/ZGS2G0I8RaNTueXuK16ePcNXAVzXIaIjCqks6wz8DwKnm7zWCiwvbkPJESXIYKKACGEAw6FZK6hyVCDGHx1mQDN3GCY/VBlqopolAQ+Rody6BhxOxBX2mIAITno/lAIND0kG1dSzzRstA7GqgYIxytgWF+QvUAIhWjdEQEju2TT7RxnQzKMjFrksnFLganAsKT51C37KY+pBGsfcMsPWTAqtJMWJQzDq2OiVuz6OR0xo24pXHe71qDp7o/8h5CFBUvQb1lsxqkaKgyeb3JQKrKot0bo85sSaQL3C5FrqtBveEQrViYNdAWKxgyj5IWkR6/35oLmakI7Uf/2JdeDx1avZIw45NMuex2phgzSihzbXL6zFpLhSbid1RzY1N26UMb2GstUY8cDjJKKzKZCdrYIrZBfCakEGSlQ6/W5NXF06z48aIaMmTILFEJE3g5gVdMYC00kI0WIkwiEia6+ex1hFIEliSwwawJmisWTjXmBYQmvKZwkoe0cVbKg5gVhVWNIdYvF69oIteXJZmvpOHtdQbGalwMBrFWNayKwl6F8s0+44NLzB0bIT3ZodWToJzIcrd1BZb02etMcLMN+61VcsPf4l+qe/mfh26hkG/ya5seYMvoAqX3paiHNlPtAgWzyVVWBXgxXApiQsT1a07gx94wwNL+bnq2LbEvP0XwRsm5/T14JRtrScft8xnbtEjTM5ldzdKTa/ALb/k+95W28dDX9uBnFG8/8DCb7CXuWseaSCvEGGziLSYIFOzYNUW33eDxo1eSWIyYP+Czc+McF//XRopHPUq+wyNL29i8a4Y/vPZz3FXazxdP7cOeMpFei8pmi8brGrgVG/mdPgIHWiMB9b46N42eZkz3cISDq/43b28eZ9dV3fl+95nPnYeaJ5WqVJplDZY8yAaPGNtgHAIhSSdACAmP5L2EPBL6deeRzuv+dHeS9xoSMpGQAIGExECA2IAZbWwMtmXJsgZrlko1T7fuvXXnM+/+45SNDQZL79Mf1j/SR6rPqVOr7l5777V+g89xD452NhLp4GQV/GGXzYMrTFxbIqe3+cwzN5A6X6A5FiAClaTpkTFc2q6OL2P4ZWoakisBqeeX6Ux0c+HteRQf0tPxAnLz8WLi6JXnpNW2OH9yOBYt8+IhmFNQMKtgVnW+953rOdQ+gHOP5MCd5zj2xGZ6D0fM9ygc6J5hV2KOg/YkaSUip2joVyB4BJBVLN5bfAJPKmzQfrA0QimpuAncpom2omPVBUbNIGqkOdbVy6H8DhhzGHhglXF1gZvVWDLVUnzm8jkqgyncguS1t5wA4MjS8IstlquJVttk8mIf9AZ4AlhNUpcp1H2Cyo48egPMQzZmpYVaLDB/vUXu1iWqU10kpjVas108cPhWwq0tfm/Pt0gqLmmlQ4/aYKMWv8+AuooiBOZPUPpLCZP/MvIgK4MploIsn65t5bHVLczUcmjjTZZHVKKyiVEVpK4p86c7PscHL7yZxpP9RDpcfucIIgS9BeaaxFyLbyhO/uqHnSIbEN1UQz+bwV/O8NfF29iSXoZA4KcFgR17BKg1jYV2N32HIX9ontb2XtY26UQLNm869m5q9QSsmDyX2Mjnu/aSTXbYWVgCoBPqjNgVPtD1NFnF4m2ZE7zA5zrnF3nfZ3+VzCXwxiSXf1ajazRiJNNhspqg0VToL5bZkK5yZG6YYCaJubHB/WMn+ZenbmDL37VYujnLxH86TV9g8pFzt9FYSDN4KURIaA6oLw6vf1L8dFsrHY/shSZ1IG+2uZgJ8QOBuRbvjkIh7h3pILX4uq41VcrNBOfbfXFbQFbIKga7DY/H1Q5RQ6ed0ClqTUa1MjvSGr4MOe/H/dXsK/gIvjSGjApbMklaAwbL6RTj2TJ5rcW+/CwbUhWesTZQd3OYeYcduUXO13tYWcmiqyH3Jc+z6OW4uLoFxRe0I4PwKrU9VCXCNAKidb/PhObRb8ZSnkogSWQcDuSnucxGzLKDvaoR2ApuqLFFr2EoAV5bx44gSGq4ecHO/kWOB0Mkl1QCS+BlVdppC4OIhNBRhYIbBTQim3ZkEtox9lYzAmzN587cKfaZSzw2MsFiswesCN/XcJUIVw0JQwURClQnhi2aFQ+5Vge6YcDB9xQ6bROpENu0XYUbOMSzDWNNibWYJfiZeFMw12KGafZMA2VuBfG6Ma7NzvCcuhm9GaK4Gl6koYqItBLhS1gIQ9IioF/TX1SZg1i6WF+nV6tCeVE/Y/wV8NUAmhIhFBlj7h1IrIQkFl2MhkmnrtDaGvA/Br/NQiA56fVTCjLMuEUgljMIsiEHsxfxpcpkoxhjnK8yRCDQ11SCARdViwirJsITRN0eUovQTtvozViiga4cTnfEjT2X+cJKDs3RUNzYQmx1ROdaa4pe1VsX01onkAGmfOkGFlGOYix+XrFeHACqQmGPaeJLh39pZJlyirQCgzBSSFguejJi2VWJWgbdyRY3miEZ06HTljjdgs6Yh1LXMC4qqC6YtZDQEnS6tatuOVlaQG+mwVIji9aGyXIRL1RjdUkZ+3aGySi+2XUERj1AVtZA9uIn49ZldSmDWo/nPaGl4LgpOimLMIpfxg9UKpkEF3I6w2qHfjXx4sylFtWxlwS5Cx1qExZq3uVNwye5J32CR/PbON/qY096hh3mPF50G4ebG7l2YJb3dz3FZzPXolyaRRzM8v7eb/FkZ4zDlzeg1VW0ThDLQydiRNurxU+3tRKEKLMrpB4c52xXFq1PxsawN3toekC0mOTE9ATagTrJe0tcvDCMPW3QXrM5k+nFUAIyykmGtTU26wY/n32WodvLFLUmB8wyplDQhYqCYNM65E37IfZZO/JihTIRD2lut6fZY85R8ZKUWwnagc6sU+BLJ/eSfs4ktRjRO9lk/tYMc305Sq0k1DVm9QIfLr4GXYTc/N7DnFrr55tfvI7vtAG+e8U58QOV+kKa0cd99GbA4YGNLAxl6fRGhJaKpYVcaPWgriP4FD9261l5fIDbj3yA5I4qf3Twizx9zTjfvW4cGWicmBskqBvURxW0FnQdj2gv2vxu78+xrzDLB7q/R1Gx2W3UGdZOsnhXllO1fqYeGWXh60n+/eYx/EKIvqZitgRRUydSdby6oF6TaFlBmJckFiXZZ+bpbOtj+ne3IkKBfRycomTT6yaxVJ+qmyCIlKuCZCJiwoZXjMWM7tp5ig1WhX88dx31sk1lbxLEKHq2wz9f2h8jD240yJ6TnH50F0+P7OW/bQSzIkjNRiy/JuLYGz/CvzY28t8evT+GdGU9+rprfHb7p8kpGk86aSIUbrTWXiaqBnGf9PeHv8pUXxefnLuJS0vdSM1G9QzcjEKQEDgVi3+/cDtlN8liK8PCbJHCEQ0vK3DHApS2wl995M1EhqC+KVy/+l9dqC6kpqCaV5EpidKJkUwTGxY5UJjmzGgfZSfJwloGp50mlalxqDSKpofUJ2KFRqMuyHc3GNMCEsrLbyrNyOG0r2KJkG26zgkv5Oe++1vIUOFTt/49r/0xkv6aEvELA4fp09f47a/8CqMP+YxLCdLlfGKI72/QsVSfta0Q9LjcuHmSIzMjWIdsNFfGMg+2wEtf/RC4VbMofW2IoScaKG2fpbDATDbLwPEAo+Zz+Tck79zxDJ8+cT3qpM3izRrylh34hQC7UEeECmqgQk3DKseOQNIOEW2VxqFupApBKqIR5XnnY+/D7Qr55zf8NTes52KTLrn/1x7ncGUDyc+Pkv+Oxj9ffzsfH3oN126/zD1dz3O8Ncw3Sjs4NduPvqwzM1TAkZKR3grln9lBY1TyteZOsmqbP9j/VR4e3cWZyhakgNaYv25e/pPjpww/lMhmi9z5FlbFwi2qBGbExr5Veu0Ghy5vIzkvGL5plT/f+AXeXP9VOpe7wFdouiZz7RxH9VEce56CskRBUfjF9DIACvHi82VIRISzfsLSRUggQxwZ4MsIX8YLSFdVVBT6tRQ9MqJgtNDUiEgqdCIDZVWncM7Hnq0Tnb9Mcus+ap5NxzVQ2wqBoXOiOsjO3AIf7HmcT5rX8NCZARJzbZ6/mpxEArWlYs/VELUmWmWEcjZJlApx7IisHtD04wUX6eqLJ5bkgsSsRyxtsHlLapWtxhIjZoUnq2M8e34UEQq8XKwNYpd8hNSZLeWxNZ9WUdKjKnSpSbJKyC/kD/GsPcpHq6MUjtdR3TROQSO04tOAuo55Ti5KUnMejWGD0BbonQjZaOCnBknsqrK2kib7hEZgCV7XdYas2uLpxiY6oX4VW9t6KCCTAYmMw5sLR9ltlDnSO8J5tYfRQiVuPy2MUC+lQJW43SHF58F8+Ah92zdjl/OkZlpw6CRe+gZq94acbA9ROBYnsN1ns9DRmNts46sdLnh9RFJht1EmJaKXoVxUoXDDektvsvsCgVSYLQzipZX4xLQ+JH6uNITjazgdA3NBp+t4k/rGBK3tIcqaSu/TNcKEjpdJElylEw7EKBijKSEURKFAC2LWZa/dYG9imm3WAp5UmespUg0SnFwbYKGeQVEj1KxPqElcVWU42Vo323i5G1AjCpj1e0gqLhu0NeaDItZ5C9WHkzcMs10/S/YlJ3MFgbHeQrrWmmaHoaG1BMbh84iEjbBMzNVhLnk9RFIQZEOSWYctqWWet/vQ2yZKIHEz8c0xMrhqhJPqQWY6RFuoxP6+S1nUjoK93EFpuSQSKrelT/OAdS1E4Pb79PatkTZjMa+VdppyM4Gjmih+jOhBkygNQXJBEunQ6Y5vDvnzMYCifE8SiAkMKcXiP3ef4nzuGX7J+T2s4zMUMhupt3TmR7Lo3QErbprpap6oqWM4grav04gU8mab5WFBmPGZd3MkbJfXJS9SyaU4ltuMkKClfbQroLz+dAlBlgkTG2Kj3oKCP+zQXWygKyF13yLIB7QijU6g83BzCzf2TTNzVx1NhGhKxOFTY0wfmuCLajzkWNse8Wu3PMaQUWazsUw9sjjnDvD9tXGOf2MrkS65/s5TZDSXrz67G6WjMLF7ll25BX618H22vQRXvtlaYrWYosts0qU32HfDBS5MdDN7vkDXsTydLoXSiQHMqkLxcoST17gQDHK5q0BGc/jm4lYykw3E3PJVJgXCvM/k24ooXhHFl/gzSbbtm2FffhZVRPiRyoldQ8wmkzhDPumeGuXZDIk5Fcv2eM6L+OjynTx+eDtK0eWmbRdpBzqLrQwrqxmqbRunCG/bdpTrkpdepq/clh4PVA9ycm2AxliEn8qSvRyRv+CxdL1BZ8yl0NVgOFPj+LkROmdN9KYkfyaiukXB/aVehjNTvKXrHB+PDpKetZDC5KGla9CVkHPzvUT+VbabHEhNCdaKgihS+MDJt8S08WyN7T1L1FybC2vd+GcyFCdZFwwTaG0fbXSEIGmgehHCDZFAainkl8+8ndn5IoOViE6XQrSrQUKN+MVvvxc0SV9/laIdi6ptMEoctEovE5SCuKDfnDpHl97gWHaFyeuKzNeyNNdsCBRKM3l6N1R4/9ZHeHzjFh4b2oK6BuljJoEN5349jVZTGH7ERWt4XLq6TwqBDbVxBX1NIKoqZkUgAnjiiZ08lt3KjTtio+G06pBQXVppE0MNOTXbjzZtYWxp8K6DT7HPnnpZEb/sN3mwuZNZp8DRyjCaEjGRKdEJdeSeBs26yd984j4+qt7H//HOB3lvbv7FfBy0Z9llLjCkxTOnt9/3HR7as4vyhSKZCwpePuKT0wdZuNRN9zMKzZEsD+k7aU1mGby8hl9IsLxfJ7BjyvzVtlaClGT+TsniTcNITTKxfZ4tyTWent9Au55GO2/wvx37zXUEGLiKZCBVY39uhptT52hHJvXI4qH+vXw/uyke4Ptx29CsRTh5BWfIR8+4ZO8psTtZYZ+xyg87LRUUqN7h0BzatE7Cgs7Xevkwb6O+z+W6icvUszWaG01szecPZt/EuVIPXk6iZzyKeotnG6N8+MQdBGWb/FR8O2lJmytR9n3VLxFCDAOfBnqJIb4fk1J+RAhRAD4LjAJTwNuklNUf9xwAqSp4BRsnp+DmIJ3pMJCq44QaDc9EWCFBRqHj65zt9LMpscxrs2e56PQx7RQwl3S6HzoHQYD0A6z7dvHkrjHGUhmMdEg5THG4voGjM8OMPVwntDQOb92AbXp0P6Vi1iPOZfpxRzR+Jvfsi++lCoVurc6QXSWrdkgoLm/sOo7V4/MR8w4qrT4UD5LzCmZVol4uMf2Nf8WJmkgN/vXnNtO5MUuiMs+x1X8D2CmE+NaV5AQhUawQubWJHyool2z0usKu3ALvyD/NMXeABT9Pb+8aSzLH8ECFawoLPBpM4LbSZHSfWb/IqXIf2XMqtW0m1+++jC9VphJFjilDlIo2blfIbenT7DbqL6NZ+zLiTL2P6XKBsODTslWylxWMcofQ0unuqXNL/0XuyJzmvzv3srjWhzolSC45LB00eXrvp3BlxNEZmPvDc0yfc4gOK6SVPRTvu4HoUkTp0/9wVTlRgphwQSSIIkFnMoPwBe7+FpszK5SdJHXHxFoVZKZdgpQaMzsjSdiVIUzEYmFCSiRgrAVcmuzGLMW9R6kojHWXWW0nMU7EcqfL+3O0cwbnkn04UmOfufKK7zaqNUmKKa61plC7JJ+p3sCj2gSVUgZjRUOMSt6ammGrsUhac/jqM/1Mf+ZBvKCJkfGwbrse69J2OlOXACaEEBe40vWjxzcPc0VFc0BvxLRvdRJCS2dyqMje7AyWCLCET05r41sqz0cD6HVBOtnhA4Uf3T4qkcGR2iiL7QyzKwWEkJRbCWzDZ1vvEpf0Lvof6aCuNTn85o28KzuFQuyB+sNmEh/sOssHu87yjsJr+b7cTmRHLJayWIsq2akOkWaxfDai+hcfpTRfBUPDKN5A+p6DhDUHv1TianKiGwHDG0vkrA5Fs8X/2fctxjT4Sr6f59obePhfDtL7jENz0MDNK6BIimabnfbseqvIBVxUjjI/kqXUSNFaSSICEXM2ACvvsK13ib8a/dI6jPVH5yi6UDg4doljyUGcMznsJUHhrIc1W6M53EXfrjpjiVUSqseR6gaeX+zH6+hgR9iWT1Zrs+ykUU+nsOtg1qIY/WMryP9Fw84A+F0p5VEhRBp4dn1B/grwiJTyj4UQ/wH4D8D/9ZMeJPwAc7lJtMsktCRu0+Kc3wOn0pgVsNKxie+C7ObBxfyLJ8ELq120V5IkHKjdtonamIpzTYfQDVg6voGz3b2ktrm4kcaqkyKd6nDxFwsgQbouTt2kSwEEZE4YLM4NcnRgIzdZMTozlFE8nOoUeH61n0o1STLt0J1qsTBXINUEe1WSmXLxshprGy0Km+8nuqkHIVpc+uBf0j++i6Mjp9E27YdHvvo88MgV5cRTUOYtvHQImkQb76BbPm6k8Y3mdo42RlhoZVk+3016RmF1sp9vWX2xbk0oaLYtJr1uepJNTl0TExz+8vlbUBSJqka0qjaZGiBVPjTzevbk5vidrqdeFD6qRZJTZ4dJTWok1DhHpb2SpRvS2KN1+lINBs0qBbVJX7LObL6LTken1rawSoJ9j/0m3YUGB43nuP33VGaLu1HdNmd++5Oo1w3TfvAS+ewEHS5ccU78pKC6RUGrCsKaiurEV96pkwNMWn0kelrkkh0qBxtM79MQKzpGVaEzoJDqD2lPJ8meEyhBEnsqA05A+qKFCKE5oOEnBWdn+5CBglWMWxbqikHdU9i5eY7XJC5SeIUheSgj/rV+DY+VN5PSXJKax3cubsY4Y1NckmQve5QqvdzkvouedJMduUX2j8xz7j/dRG5LD1bQ4LF3/SulTdtYbZdgmYaUcuJK1093qsFbDj7Dly/upLlqM/iIwF71mLnTwhvwqM/n+eu52xGugvAFxnCLiZ4S+8emMTaF3FV45aZfiMCLVHQlpJBrstaw6Rwt0pGw2NON0hGEGReUFN/97gDXbBjj+pEptiaXeXPmObYZP+qHmtM7ROkAxQqxbI/2kM7CTTZSAXPZoueu+0kUh3ASHRb+9n8wclcXs989i5IwCDrOFefED1Rm54tUzhtcDuCt146Ry7RpPt1NYkmiWlDaa+FlILAl44Ml7s6fZEJfBRK0I4+m9DnR2cHUXBdCkWgZD1eVLKsaXk/A+7Y/wXZznsIrMJRDGTEVtGlEOm/tOsItufP8ObdRz6dp7JUoRpJwLeSr3z5A2OfS37tGx9MRL7SQIrANn9ckLqB2R/zF7iLNtkGjbiB8geLI/zUUfSnlIrC4/veGEOIMMAjcD9y6/mWfAh57taQThIh6C6kV4+twR8PpaAycjkhfblHelaLTI1AdFamqVFwVx9NxZtOkZ2O98bVNKuJAjUf3/y0fnL+X45/bSduxWRyLT1Zt3yBtevRfO03LN5ia7UapazGeVIHsVIBfUphyirwUZt+ILKpugtXFLPaUTqvLpFmw0cqxYp1dDjHPLcDWAYJdWSikSXfVEEB5sAdZq+FePs6uP30rTzxy5Tl5wYUcqRImI0bHy4ymKniRxpl2P+fXuinXkyQWFdIz4Yu/1HaXglsAz1NZ8TJkdIe+4Qqlahp5OYmvgpMOURsqWluCEJxf6KXtG7y78CQ96zdrR6pYCxrZSyFeSon1zHc47B6ew1IDTDUgp7ZJioC80UZL+vhZlU6Xgt4A63sW5Y0WkzdsYv+eaf6x8BlWI483bDJRalWa559n9/73sMDDV5wTaUjcPh9rQUfxYr16KSA5KxChQjNlkMjVuXbjWUatMp+5vJ/qVJ4D11zivw4/xG9lfp65lRHcikoimUT4IYnlWH/Hzcd6z0rJQIoYUfIC01EKjVFjlR3GK0PvIiRH6yOcmunHtH1s00OZtshdiEjNdtDOzdLNRhbtPBdHk+zYu8jNG1f5TzvPcsHv5qMzt6IPdtMwWyy3zgOU1x99RXnp1Rze1/UEl1tFTsoB9KaBvtTAzxkMDlZYPt5LYlFgrkk0R7KsJGnk6tzaf55fzp4kIVReyYQ8kgpBpKAISd7qUGvapKckqitpdlSIILDjUpE/De5CiieDcRb7suxPTLLN+FGkfkp1URMBhhFgGT5hoUNbN1ErOqlaBncgg7etRT7dIRxP0e3Mcf7IGYzsi8XyympKJFArGr2HXfS6x5yappZJsPErNcT5KVZ+6RpqozI2HdEjtmRW2GMu0KXGC8AnpBFJFpwcakUnTEbY2Qah6eMmDEZ7Kvxy5tR6m+1HsZEBIUthgrUowQ1WiZRY4+n+GY6IYX5m9AS3pU/zzu/8Gl3fU1jrWCypWVQ1+kHfWwoMNWSTphDZkxwaHKPmWax2UjQck7X5zBXp8lxVj1wIMQrsBQ4BvetFHmCJuPXyE8Mv2sz8/AjegSbFdJuVlSzSUVk+ICjtTcXFlhjihQQ96zLRtcq0FlLLJ8jlW2wulsjqHf6mfJBnF4axmzEG9Z7CCU51hnjs2DYQkuHRVfxIQalp6PX1a7chqI2peBnJ06VRfluq/Grxe+wydNqhSSswMLMOnVHAF4g1A8WPh1nVCY3axjGkGvfajJpCayqL11zFmVzCmhjCq7Yhl33hx72inESmpD0SYFRUREvB1nwKRounVjZSbiZol5JodZX8TERquk35mhSNDTHVWvEgauocrQxzeb6LxGkLQ4MwIVEiUKqxaI+fFrg5yab+FXblFkgrP/hgZJUQubPBciJF9zFJcilg7aCgz27w3Oog5VqS87luHkrspubZFHNNVjwVr2XEfc1sAKHgxPOjnEgP8uTwGMFylcunvsToe8bx3K/ijRfgO1eeE8URpC7qsSlFAPZqhOpJfFvEQzFHo+PrpFSXIaPMjX3TnLJcjs0Ncvfx96NXFaw2NIYVau8YpdMXMbR1GUtI9KFOV9YAACAASURBVFCl7Ro4NRvZ0rBnNCIVvB1tBoo1BrQar1TsXogz5R6MSzZeyqSTiLBcgVOA8s4E/ntHoaFhlCXCUfn+4hjf9rbw4crrSOQ7vDn1KE/OzaJeP4r/RBN4kat0RXk53Spy6/f+d1JPJcg2JAs3Q3B3F9IKmV/Moyrg5dYldwVYy4JZf4C/nO/iX7r2c//ICT7YdfZHnnvMGeHEM+Mxi1iFMBER/GyFpqcjjsbkuLlbNSJLJTJDUGNyzVwlx9/ot/Jwssq/KzzFdeYPCt2t6TP4W9UYDeYmadgmVcum6mYxGipON9w2fp7OYp0vnq2yf1s/staga+TFTfSKciKCGLkzdZ9OZKp0j5Qw1JDypV7y1iaMpiQ9qdAalPh5iaaEdKnqiybRCWHQpXr8XPEZ7Fs8MprDkFHBlxrtyGDIqJB+hdtZLerw2cY459p9PHh2N2FT49bdZ9mfmeLa9BR70jMcqm3ksZX7wVNojMSUfrFooXRAaQkKFUlyMWTe6+Xy1hBTSH6+6xlOOkM8cPlaGi0LvRav4VeLKy7kQogU8AXgd6SUdSF+UAyklFKIV74ACCHeA7wHQO3KEt1Y4y1jJ0moHp+s3AiBRmH7Kj3JJmfn+whrOmonvhpmUh22ZxbptppUCzb3dD3Pu7NLPNDI85HJ22kvJ0m3Y+ut11jzVIIUiRmNSIPOoE4YxTrIepOYWWcIWkMhouCxVMrytUqG66+dZJdRwpUabqCRS3XwbZfKUha9IlD8mKTgFiPEgENYNUlNqihNEHWfxQf+ieI770Gx48XvhupV5cToyZDoaRGWMiiewFJ9ClqL5bU0/oqNVVIxGpBcdNEWq/gH08hNLbwFG3tRQW0pzFeyGFMW/U93aPWblHcIlEjEbj4CgkSsjb0vP8s1iVnMlyAykkLhNRsmedYaQn0mhz21hgyzFPQWlXqSaC7BQsViwSyQLrYYzVeppyyctIbW7XDt8BzHZoewDyUJTZWzs70s/M0X6PvVu/FEGgQ4XeLqcpLIkZmOcNNxSyU91UatdWiP5nBzKsJT8EKVhOrRp9W4MXORMbvEX56+i40P+rgFjU5RoT4GvbuXub/3Iv+55zmqkcNRt8DR9igPTO6j4ScxqxI/Jdg5Mstr8hfp+zGKmwAREdVqisKsxMvF7khKAF5GUNi/zFO7v8DvLu7jy9+8HsUVrK5k0Fd0Bo9ErI5bfOkrT/OuD27kW2WLlybhSvOip/IUvmnT/fVLoKp07s/x9vGjfOLYQdQlE6lKvIxEdWL9G6sssUvgz5u0kibf1Le9YiG/0OmlcFKguZLAFNQ2KfzdG/6RcpjkfSd+HdWF3j3LbMmtsNjJ0PYN5lZzOHWT4+4Qp/R+tl+zwHXmwovP3GeuMVz4PsfdQZ5sbKIRWGSNDtVSGr0d+8rebR7m9/7jDOO/eTsiYaERklvXkL/SnGiZPCKCG687y/7sFAN6lUZo8/9ufDN620brSDKNAC+jEWQFphK8DF6qC5WssLkr4XNX4vCP+c3/6Em8EYV8vbSDM8t9ZL5nYVUk301sorbB4neGvsWNZsiXl65h+lwfIhR0eiO0lsCsCOySJDXvYy80kacvkeu/ltkgx4Re5nV2B0tc5lP+DYRtDaMpYrbwq8QVFXIhhE5cxD8jpfzi+j8vCyH6pZSLQoh+4BWnQ1LKjwEfAzBHhmW7lOSpzEYMJUSZszDqgkavRd7qkM20cCydds1GdFQMLcSNNL43M0Z0LsWzA6M8sGGZyYUuzLM2NlDfCIorOfjw+1EchUQQT3sr1SQyEphezCx0C7Exr+ILwrbG7i0z7M7NscecQxU2d6RP0a+v8YnLB6nO5FEyHtbOJq6n0XF0ZEtDn7JRdGiMB+BGlP7qk6T27iPZdwDnskSk0syfVl/I2RXlJNE9LI1Hs9THI6JEyJFjmzisjNO9oUpf3wrlToK2azA5lsVcHUEEoJ9IYpckidUAJdSoJ2yUTMTM6yy8YsjgxlVMLW6LzK7l8E/k0BuCB07u59Guzezb8Smy67VcEYKk5lJMtrn4+gzqwS6MRJtHFjcTLCRIrCg0J0IGByvsKc5zY+Yif1S+m+w5lWA2yfGLm9HWe9h4IaVPfIrU3n0kDuykU9PRzTTJE9WrykkqPyRFJIn0eAMIEjoilATreGOjLFiVBR5wr+WJ7CZ6E3V6zQYyGVAbN6hNQNeuFQ5kKrw2f56t5iIKgpTQmdDLpFMdGINjXUM8W58gskJuKZzngD1J6sfoiywGTRZCA23OpHC6zdLBJM6IR7LQYSi3xnByjT+rjhKiMHb9DG3foNq2aWkWy3s0Fv7pkwzfeiMntl6HM+2j5FJEK45+VZ+V3mEZmtDePYwSSJTHTP7pxO2oE21y28uszubQqypWWZIohbR6VTrdIibdVKHWeeWbhqZEhGas/+GnBFKVfGFtPyEKzkBAsKYSPt7HM0FfTKk3Qd/RYGNvmYlMiV6jznXWZeAHPeRzvs2T7QkKaot7cyf4k8t3U/r2IAk1nsF4BYff/vU6xdt34+48wNEZFSdR5FxFu6rPijk6JP18yKEntvG0tpVrDlyi22qSmoPMhQaKE4CU1Ea76ISw6qa47DcpqOqP8AWuJiKIORK+SnMYnKKCrBkcmxrmm5ldGJlj9CfqLA/XcA8X6Ho+wMmqeBlIrIYkLlUQ9SZBGGLWJJ9YuplSJ8XUxV60ukpqVpBMgbe7hWa/ugz0laBWBPBx4IyU8sMv+a+HgHcCf7z+54Ov+qwAjJLKTLIQszgXBEZdsrpFx8up9KcbaCLiouiirViYaogb6QSXUox+y6E5aLI4MkxxSZI732Jtc4LSzT7WjMH4X9YJsxbLBxKxtnfFjD35/Beo4rGLivAFoqPyM73P8SuZFVjHn7/WgpvMWT4BJKdV/P0B79x0iEUvy6KT5ckLY2SOqjRGoGdnibN//HW04R6yt9xCaibW8E6P78T52rEXftwryom22mLgoRnW/qCfVHcL68tZ7EpI5nea/P7wV4F4GHV40xhTThcPf+MAg4/7GDUPtdom0oq4eRV3wGfLvjm2pJd5Q/Y4vWqTzbrFPzb6+KPTb0GvC6yjFpVek6WtSTa/pF6lVJdeu8Ebbj5JQW3ykQu3szRTILWokFiStHaEvLb3IndkTnGHHfLHQlI85SDWrfacLoP6kMriNz+Lme+lcMOtBH4b0VbpTW2m9syLKPIr+5zIWEsk0uPNN0ioCKnjJ+JCblbAqKm4axkuptIsjta4pmcRLRHQ2KAzdu0sD2996IcUD2N96XHFYFSL2Guc5EjqHL+zqQtTD3hd8iyb9VeWcghlxGxoctbtJzULypEzcHA/g0MVfnnkEO/NzfPxWh9/d/lmruuZ5s/HP8fTnQ08sHgd7aTG6X/4BtbGAsH4/cycjegerxDeMsr851eLV5MXiG+V1c0GmiMZ/NoyouMy+eE879h4iD9dvRN1UcOqhiTm2jT70zjdEcl5BbsSsdoxCGX0I0qQuggJTUGkgb9OyvnO0gQJ3Sc/UKNqpBn/bCe29xvqw+tNsbIn4E19J7g3dWqdDfvyQeBZd4BHVrZyX98J7k64vL+WZuNnpqnePIzz78rM/umXkd3DtG+6F79ioJc1+s1tLC9e3frRjQA95zD4JQOj5nGse5iRvgrpmQBx6hKhFx9njeuKiEhQ9WwmgyyqqL14mPn/E6GEpmsSBgoMuviRQF80UEsWhwZH6dXrDFpr2AM+T6/msf/tGRIHdlHZkcJadgnP/wA9ZFZ8jkxuwJy02P7xGfB9sEzq+/q54W0nuCF1ibe9yvtcyYn8JuDtwEkhxAtZ/n3iAv45IcS7iaeGr/a9AGLz2iULhKTTExv1Jk9ZlE8MMjsQEWZClKaK5gpmKNJwDayKQKu5WLaGbwucgmDqTQkiXSJcFbcr5OLb80SmRBYcdDNgINuk42vUogKKJwiSUUwVVwAzZMHLc8ydZaMevbgzq0Jhc77E98fy9KXbVIIkX5/eRnA8R6oei+3YJcHMl9vUHjuJ0dfP3JkPIULoueVeuq67g/kvfRpgJ7B2JTkRpok/XERpq7QaFuGAwClqNOsZ/nblVmaaeVqewabcKv1WjWDAo7THxE/r+BkbraWg1wVaWeekOsjlXIHlvjTL7QyXlroJGzqWGxfEyIBIl6hEsC4lEEnJmp+g1ElxhFEAmseL9JwHxY9i0XtfoR0ZNCKbWhSLKwUJFb0RoNYcLCmpVRdZO3MEo6ef1kc+hFQhf+89JN/1eub+5dOweuU5iTSBm1FQgngQaVY91IaDmdXWtWzjwXVrWGKPNGhUkjw5vTVWYQwEgVReVqyqYZvJQEMXEd1KgCUUEorOsNrk/g0nsRSfwk9Y1BGSJ9sTPL02Rn1covzKtSge1L7dx/83cB8f7u/Qk2+wr3uOVmDy/8y9kaPzQ+hH0jQWJyk/cgq9v5/2cx9CCvDfeRup+26Fzx/JrEPtrmj9yPU2WZAAIQUrr+1BCcCpBHzs/E2oSwZam/gkXkhT3Rewd8sUJ/oGcbptuvMNjnnBS6j5cdycOs/Dr9tO2zHwOjpmwue1fZdwI42HSzsQHZXyngz6lu2s7hb43T7v2HiCffZlssorD+KG9TK7cgscqY9y7/IuvKkU/gaNVq9CbuYMlUefx+jrp/XsR5G6JH/3vYxtuY2F+UNcTU6CSMFvGUhVEJmxwYOuhszv00l3740Fs0RsstFzCM4N96AOSh5tjzHtdnFj8gJ3Ja5UVi3e1JvSpRIZBKGC9BTUmobiitir05FcPNfP39YyKOsytJoAdfM4K3tSlA8EuPkkvWI3CEGkK6xNGJh2E6dfZeG+EYSMTaC9vOTw6gYuNHp4NbGiK0GtfI8fz7e644ozQPwUEUJqViCFoH6Nh2KGDH9UojxzGueu3dQ2vMQY2DGp1jV6FiKUagNTCCDB/ITGb973Nb5d2sbZIxtQhtp89EAsHXvSGUZFssEoMe1182e12/FbGlraR9VCFEWiaSELbo4n1M2kU6detjPfnLtAfZtFSnOp+Em857Ns+rspwr48jbEUWgdScpSBd32I5mDMRgvNeEBrlAVjb/4Nnv+z9z8vpbzzSlIS2irNERutKfAVnc4GH7QIUUnx2OoWrCkDow7HbzEYHysxMbzMTDLP27cc5j8WT3P/hTcw+28b0RxBtGriZQ2eqCSwJw02f3aRsCvN/C2p+D3VeLiqvqRDGyJZ9ZKsthMsNtK4rs7gd330bz2L2Led9nASAoVOqLMWJlgNY2MFPxmjVpTyGkrTYCBVIP/GP2HxRg0RgVETdLolP/f67zP+9j7es/XiFeck0mKxLb0p0ToSrdSAyhpm1kYE8QaDEJQyktdvOMOXz1/PwOMBzUGNdh/44ct53kshfLu5g7zW4hpzloLqMK6obNRT/GH3C7Kpr3wah7g3/t3yBCdmhyhsK1PY16b0wAgDnzqFyGaQ6QQX39HLm976Vf5+8TUce2YT+VOC4meeRR3oo/cdH8JLr8uWmhAUfJxY0e68lHL/leQEWL+dgNsbgBnibYqQkcCYNuFijlQHRCBpbgC/K+CXDjzNf+05yce7+/h837UMJ9d4vLWV3fY0Q9oPZgF3J1zu3v9Zznht/mzlDjKaw6/kn+SC38WD9b1oTYXy3giZCvnIa/6ZNySa6xul8mPzNqqvcWvmDB889TPIRwpkHUl91KI9IPn51/o0vvx/k/yHHJ2iEou8NUxERcVOdNOoz01ccU4CBaWhEelRjKwRcUsxeeMqnQOx0BuA+vEukl88wsr1B2APfL28k2cujrK8PcNdiaev9NsRIVkNQ0phDi9QwVewlxWMWgwU0FohIjTwclm8rCSwIS0ErS1FyteGvO+mb/Gxws0skyHSYiCF0x3Rk+yQS7UJhxQSus9Qao2Km+DM5ADTV0Co++mKZvmQnJckyiFSCIKkQZCUNIcktrWL6iYdp0tirwjMmgRFoHZUOkVYev1QzPoS4OdCfBkb0aodgb9q86GZ12MoIRGCIFJo+wYtzyByVNAkg11rWJrPxaVuOg2TuXyOpObS+iG0/XZrHqdL53y7j8lGEb0lkK0WYaqX2piKkPHPobiQnYxws4K1HREhIAKVK7SJfDH8lKC0L6Za6w0FazI2xajt8UgXWsizBsmliMWlFE9mxpgt53DXLI7Vhvh+6ix+qOJ0x5rgLwx1FTOkMxww/bb+9cUv4000Yt3qKs1isEKXase9PidBrZFAu2hjVQWtPon+lutoDKp4+djE4ZELW3kuN8TD2V005zKkAS+rI7cOoHgRStsnsBX8fITwBXozNpr9ztIEx6wh4HtXnBOpglOQdLpBdRXMtSJmJUVzyMRLx+JKflqSyNa53Cqi1wRm1aW6Wacz7rJSS3HTiZ9lc67EnfnTWCLDTnuWtOLQq3ZI/phT5EujHXn4hKgIHBkbHihKxGo5TSnIMliJkJ6HP9bN6k4bPxvw2dXrOL3ch7GmEOmS4MYduJaKkOtiW55ASAmr+lVT0WEdljnkkS62SJoew+k1FCE5XNmM1o7RM1IViEiilzUOlUf5QmKap+vjrDRTDCZqbDKX6FZbvBIyp6hKXps9jyV8iqrEp8LebVNUnCSW5lMw24zrZdRXUEY84TlM+QW2GiU2aAaHnRG+vLqb2myWgYUQrR1h1Hz8lM1nLuynvZqAHoXIEESTKVQVlm6UeE9fXWLUtiB3RtDuVgkSgkKuRq/VIIgUnEAnZ3ZQRMS5iV6MO/ciFck/lg7S9E36e9dYdZP8YWkHuggxFZ/j9WEOz46QSjjs65mn22iwIzFPTm0xplWYDbJ88NwvUK6kMC7aJDzo9Ea0B+L1bysCp0vgFmJDFKlHREZsEo4RMqBXsU0PT4dOT4Q11kCu2dSe6SHSJX4mJsLNO/2EqYjRzUtkDedVtYp+ujK2nYjiySbaQgWkxKj34+Y1KltUVg7oRN0OuhUQraWwKiFWBRCwcJPK+HUzzFZztEtJcv113Ein4ZoYdYFRV5laGo1V/LoChK+QnI51ScRgCDmfO/vOklU7fPjSXeirGpfzBTQlpJF9ObQo7pVP8l+CJI+uTpCsSsJaHTev4+1pEUUKYUcledFg4KFZ3Ile1g6Cpoe4uom4Aluml0Zvtsab7jjEv333OuxZhcGvLkG1Ru2ajezpnedkM0/mXIPGUJaLSh9qXcNsC06kB/mMeSOdQCfY4BAumZiVeOe2Ex6bhhd4752Pcag1zj88cxPCUWL6sRky6fWQURzSSptQSlbbCaKSxYavNFFOTTL1gd3Y+9boSbZJah4nn9tI9rsWTtLm+UQ32SpASKdLZW1Cw6xIcuclXkoh0V/H6RhEyzZqR7B6soeSenW6IlKXeIM+he46UgpKQRGzquEWwU9Jdt14gTd0n+TLK7s5v9qDXZJo8xW8fIq37j7KF75/HfZHdZ7d18eJW/t5zcAkf9L31LpRwqsbTIQyohJ5tKVAR+LIGGOtahFiMkFiQZCaqhM5Dqu7bHp/dpqgluWxE1sxShqp5ditavZOE60lSM3FDEzFA9UV2E2uSGP6h8O2PK7dPMWGRIUeo8HbMs9hCbj58m8RVW2cAR817aNdSJCYh4u5fv4ivJ1SI0m7buF2aRwwV0grr7zse9Qkv5R+AdqepEeFz49/40XdegXxikU8lBFfa+zi8dUJ3tZ/hELyMl9e3c0zz06QP6WQOVNBrDUIFhbpXdvMklJASQmaoxK9Dr3PRNRHVN7znq/w1//wyozaHxd6uUPfN+a5+O5B/BGHO7rn2ZxcwlZ9WqFBl9EkoXqc29/DVH8KqUkePbad4Y0l3jR4kq8u7OTI0U1x29WIyJw0GPv747BphCfv3Y1bjMhvrdCbavDGnhM8WRvH+liezVMNpO7jFi3Kv9Hi+v4Zvre2GxEptIdCzL42SiSIQoXAjpF0mhWwWV+hkOgwb4I9Xudze/+eXzj2bgb/e5konaC6M4PZCEkfmaexf5Dfe/03uNtu82oCiD9d9UNV4HZb+Ll+Ik1Q3qnjJ8EugV0SVBIaatLDKUpqG7XYgFSN7bIuHh0GQJWCNSPF183tlFYyZN34ehIk42Gm0lYRQUz6iHSQqRBdD3lw5hpUJUJPeQRmSKNuc6w9xMniMDuNiyTW1RAh7pWfqvcTXUwRWIL2m6+jOqEiFIewpWIuxCSh5t5BWn0qmh5rdGh19eVGvVcQJSfF1y5vJ8r5NDWN1tYuzNU0alXn0MwockQyn8oSJEAva7GwTxhvHANmjUmti8hXMNsCuxIRmQr1qs3zTj9/0LifjrduAqEQO3v4Cl9f3sERa5R/M5t0Qp1qNRWL7A/YJOQYwofqcoZaKx9jupcEeisiUmMoplTATyo0hwXetjbOJZvMdKybbGgB3nqhkAqEdnTVMrZI4ncGNDXC6Q1jxEomQuoRz53fwHMXNqCXdPRajLKo3jREpEm+NrUdEQgqW028DLTWkizksz/5+/1QqEIhKRR8GfG5+l7Ot3o5sTCAW7HRVHCKsLo7TbLvOtwsXFrqJqgZGGUVa1Vgl0NahorXFRIkFJRAidtFXRGqI0gs8iL9+2qi4+k8v9hPdsRBUyL+YP6NrHk2kaPipyOUlopsqaTmJKn5gPpmlS67SRApCBGbUjzpDDCqr3KNEXLRd3m0vYVhvcw9icbL9FdemotXEiR8qdWbKTQutnuYLBX5inYNpSDNQjOLNKNY6E0VBBu68XYP4mZVAjtGOZmr6+2zVojiq3RrdfSrdCGRloG7sSteF1WD71zczFP2KFu7l8kbHb4xs5XmWgLZUVEigTWv8j/bO/NYya76zn/OPXervV69fenl9d7t3XjBCwHCMjYBMjAsIcwQokkmI0BhNEqkUTQKGYFgNBMiRaOETCyWgYGJFScMgUAsRzaO7QA2Xrrbdtu9L2/pt9Wr/dZdzj3zxymaZuwYP2i33c79SCX1K7XurfutW+ee8/v9zvfnNeBsfYI/W6jh5GKGZtdJlCRRFtGQi5gap7u5RG+naY7SeHqYdavGU+UZrJ5kwoP+RMFYLBclWgvaiYcMTMtJKxJoDZNDLUZyHR5f3kG4apF0HD638gYsNOLqJleMLbKkilhCE09XSaXJC0UFi9U3bqY7Jbhr9Xp+mFsDjr+gDhd1IFeuoLHdIRgzS4ibr3uamtvliU9eQ/G+Z+hNXo49pUhme7RmJK4fk/NixL01tv2vRbp7x6jvdVB1l9W5cQpdgd3VKF8Qj8cQWeTmbbSAaChF5VNGx5uEsU143wgyhE3/co6rh+b45j03kp8X3Lt5D6/LH2XGjqicN9t44swMW/4+YvEWj/xH50kij0Ynj113GHtU0RuRnLlNQCGilIvodn3ySwIZbEwTWZfk7y4x+f55tpXWuK9/JbmlAsXToOeK1N4+z7+e+QGfuu+dDD8miYvGPCnvR9xafJaDrSlEz8arC8pH29j9PHHRxWm7FI44WDWb3g0p2jFOiCKQHH10M8eVWZaKFBzPJIHX9tms7yphB1A54DDx/Tbi4BHYs41guoC2hFkKOxCMCsTVTR654Q4+OPkeet+bRnmCkhcRxoOdtDZYNWNRvCG0MS5KU4ucEzG2Y410sAMuTGxyd1Qp3PMkpOZHv/ib19J8bwt1vEzhnjLhVojf2iRcz+Oc8TlSHkVt1RsKZwzJPDFd7jh4C87hvPE2UdCdSUmn+4grY1I3pn+6SuGJPHYX3JYmV4/JnWrTHxpiYssaYWyzXi4h3JSR4TYry2XyD1i49f7GNAFkx8J+tMTccJWucjl01x6Kcwr5WkE6FpF7xie3pBl9ZB196Djy1tdwffUUi/kKq2GRvrL5/PytvH7kCLuHDvKtzhX86UO/yMTmOq+/4n//xP3/QsRa8URY5WxS4Q35k0xKycG1SfThIo8tbefR4hYsJ8WphMRFB+05rFxdIH5zk17Lx5lz8eqC2rMJsq9wOjEycpiwm7jP8zB5wc9Slixd72P3wG1Z5B7xAI8j7025ZfoE1r1D7Ppem6UbS3Q2a8Yej8ndexBruIauFDny4WH+5D1f5HA0zvfbO7g72Evz6lHql0k+cfNd/J/5G0i/PIqz0ISlVcRQhbO3zdDe5OI2jTtikkgWOhVT9rkUIgMflUhun3yKD1Qe533tD9NcH8Ndsbn3u1ez/brT/ODGz/N0LHmwu9uE7K7IYfc0bjulvUky9fZT5BKHf/jHy3goFJgiwX+aizqQpzaEVROz1a6mFfukWtCZknjXbAcN7dXCoBcWxIPmpn4K2rFxWjGlM5LOlEUwmSKUxAk0qicgskwlzFSCiCy8uoXTtlgLh9GWxh7WaBvGLUU9LuA2BPmVlGPrwzwysgU/d5yKZXZsNVOFCmxkP8Zb9zgyN4aXjxkudVm0C/jLIcr1QQFdm856xbRDG9/4LMuKUgpnFXNrVdNouKgIlTSDrIa1bp576vvwz9oUF2O64ybett7Kc197H3PtKiSCcAiWbiiTOoOSSws6kzZJTmB3rHP5BWCQMDQNPbSAYHOCUw7ptT1EaFE4LbFbmqji4u3aiso7yL6pNe4Pa2RoapODjsed7Z2s9gqoTTbBGGzxe1hCc3q6iB5UEFjWxnSxXEVhokuzmaeZFnDzEbadEg6aF5eClLTXw56ZJq2WzIOl42HHphZa9qGzUkAEEisBtcG+akqnzKseJ5MiaEFqa2xlrhlLY7uKYCVP3JQU6gJvzfygw6ogqjg0t9Roz2quLTVYD/O0cnkcN2Gi2AZg8aZR7MAx+6M3QOpCWNMcPjIFGooO9MYk/jKkdR+Rmv0Sq68Zwt19DfF4TDPJ8cOVzcwv1JB+Qi4XcT8ml/j1M1dRPOJwlhon9liMyA6uEKwpwd3dfSxHZZ5uTRKlkprXo+oE3D60n6rV487VGzndHWJ1vMxufwGVWsQljT0aMFVrkXci8nbEYyvb+DnQUgAAFXpJREFU6WzJEw5D2Q8J+87ADAp6oxI7tEg9c3/+4ZnbOBO/+H63YO5f5YDbNoUU3SnTlNpKLZ5tjiESSB0Lr5GSSguvHpKGIaJSpLutCsBfrl8PQM6KsCxNaguUq9nkrFFy+7TiFFyH+JrtxEVj06xcaG8ZNJOPJSutInJEsI5vogGJRX/Q7qiW67E8otBeivAVncjj0ys3EKY2rSRHP3KwcqA8QTAqiYY09SCPtFLcTV3S9AJv0f950a6mvzkyTXktzeGlUaRMCW4KWb/Wxj8D5YMucRFUTqNyksh3yaUQj5dxVjuU9x8jfvfljOxb5PjhCfzvp6BtnLokHou5/dqDPFmfpP+1CfLLCf5KQDiSI/jtNW4ZP86RzhgHViapHFNUnlrn8PU1vpq/kdrmDtudHs/GNk+HW7CaNlYYMPxUn8Kiw9KNHm/6F4/x5RMj2E+doBRtYvXKMk5HMPED465W+41T7Cit8CcbEaUXUHxsDnnVVo5O+djVCHs0IUksUiUJj1fY/8QQUw+GePtPYL1mG8pzCE/m+FpyPbprm4qV3R3e+s4DfOfUXuR9Q8Ql6Fwdojs21adt0BCVTahK2yZeW1xQKFfwumsO8NHR+/hO53IOdSd5cPUqyic19X0e0Ws9hg6nlI53CKsecm+L/mKBwmmJe9Lnv7XebkInN8aUa12uqZ4hRbBQWWE9ynFkbZREbaxgd1t+ld/ddzefvvN95M9qWttcwpICS5t+mL0ILEn7umnqe0xXGf+wGcjiInh1KM4Zc6yoDGm6sfOHOuGbnb0825vAkoqopnCbNnZPo6WmXOgjvlNg+K+eREyOEY+Xqe/1ae1UVLc2+Hc7HjQxdVKeCSZZ7RQo+SGvHTrB1Pg6N19+Al9oZj+zoY9Fqdxj/Kolcp8q486v8+xHptBX9pn9vMA9cJK5D++hfVnE7p0neX3tCMf6oxzvjbD68Di7vt1lfU+B+uU+h3WFI+kWysdg89+eZPUXt/Ctm65i1lthWHa4r72X//vtm8jPCybvOYvo9VnaMcuJcY/7P7Cdy8bO8tj9uyksCP7H1eOMTjZRqaCytcGv7fg+v145dK4v7MedN3N/eDlqOGTSjWh7MUHOJ/U1/TGQgSC37CAjWPzSLJ3lf7p66HkZlNU6A6sO67Y1rh2b5/4T2zl+ZIKqgGDCp3QqZOhAgFhcQ2lN8/IaC29MsULN39xzI2JLj3ft2Y+0FVqa9nC7nSZTuSZNa4ZgpsSpD2gsN8Y95KAlzN5ymsl8i+/u34No5oguC0hzMarlQyBZiUqsKJe95bO0dvrsrK5wRXGeP3/6Fr79t7fSm9I4u1r0mjm8IkQ1xfZ9CzSCHKvHa1jDIV+76Q522jEjP0WGi+tHnph656SWgExJEolKJJbUpJ4y2V1HcH63NC00VqyRnQjt2ojNUwTjgpuHFlgcK9PeXCLxBVgaEUjuPbGTqOdSGBUozwaRQ/kWS6drfKudJ2q7iL6kOmKhrqnBZJ+txTpVaeLcJRFTkx10Laa9rWjqU6UpMazIACyNThKsIMZbN6GJ9iaPsCo4vDjGmUZ1o6qALVE5DTmFsH4yRujVLXLLGtlPEK5Lv2YTjAviWkKpHBB6DnHexkotvnX8Mvo9F71dGa3nzaaoYEybOtdljfIEjcsTsDRWbG7IHfklJiSMO01W3SJJThMVBv0TBzXb2jamZY6t6Guwe+ahoAILlU8RjvH+PtYbIdUW9TBPkDhoQGywQsMRUJZ93CYUllKSvCTu2OfaxvUmPcqX76Q7LokqGqclcLqYRhiemZlpYXIkSV5THJg6hTpmRYXE2uzM8wRMyjyBjrg3qNFLPaqyR6TznOyPsBqaGTkWJAXzXYlU0GjlGQKsSpl4uEgw5hIOCXQpQVqaZ4JJ6lGe0+0a0kqZLLcoOiFNlSOvQmJt4bDB8iaMIdxyo0h5Tw5vysfpCNRpH7vTASHoD2ump+oMe13ayudwa4yTazVkXxANkvpuwyJ19UArgZoYIi5AM8lxQG1i//o0c43qYEWoicfLyG7O7OOQFuvKIidjkoJpDyic1MSIOzmSUPJwY5at7ird1KOtfA6sTuG0LVRe0osdtBZob5A+dVMS1yLu2ySxCb2mG+wQJJTpmPUjM7SJXJ+CHZpVoDB7DcKapHjaJ79sk09SZBia9mmW+V34dUGn6nGqV8OyNO1NFqqY8O3uLp5qTJIWHeKihe0HSGkaOAsFy50iobKN26QCLxdTK/aYb/hYXcnDy5uB13GkNUo3dDnWHGEtLBC2PHzMQ6y3VMBpSAoLGiuWzE8aUy13vMdEtU3hRSbdLupA7jZTph5QzL1Zoj2F6puZIoOld1zSpkuINq/UM5lkt23Bk0eIfuEKFm/28K9f4z+P3c/1xRP8kfcmuu08asUntyDZ9KWUYErS+o06vhdx5pkx/GWL3Xc0kctNdLlAUs1x/COCt+1+kvfUHuEqNyAvXECyy/HZ5jT5V1c+xtfdq1ANF7cu8aY6jDtN03ZJSsR6i9H9JRrbXdL3r9FpFpi608VrCJ5+AQ3+f4Rto8aqqNmAvZPLHF8ZJgwc0sSCyKL2jKL8VJ007xLPjrNytWD3a0+wo7TCvvyPvS0+8923s/XTq8y9ZzN3/PYf8zuH30fxY4Lu7hGGfvcUx+rDjH4iJa7leedv/oC3lg7ypateRzdxeUvhEEXLY1h2mHSbqMmQduhh98DpDELWRQflgiM0ds+iuKjoKouoAqSm32q34/NAfRcogQgttK3JjfSw7Y0NWjYWFinVYwmlh09TPDZEUvY5fZuxa1281WH5uiGSikL4Cm/dozSnaG2RBOPpYDIg6Nc06Uyf7UOrSCFYSEK+0bmcjvJpK59Jt8GvVw5xNJZ8/MEPYDUdGAlxvYRKIUBaqdm5Z2n6W0LTs3PVxT6cJy7C2hs20Z2w6I9p1FjIpsk6Z9dLfPOB68gtWowciDl7jcPv/dqddFOPv1m6ikNiguWoTF5GwLc2pAt1m/w/FnnrRx9k2lvnq//llxh68DR4LunMOKPXLvGVvV/mU4u38dUj1xE/W6Z0EqIKLNzq4NcFlWMpnU0W4UxEy5fExQrBlKIeFfj+/BZGP59nRMDq5dCbhMY+D9nNsf0vW7jLXQp+yrWl0yxdWWKlW2TC72OLlObBYUaOwGNn9vC9iR3YDRu3IfDXNKNnE9Z32qxWSwhhbGJtR1EpBASRQ8vPI6SmWu1ifWNj+RTZ1xTnUpbfEjE22mI816YZ53AcRVKOeMf1B7i5dJT/evg2Tp8YYvixYYbzLnFeIPqmOUf5hEILm0eKW8gXQqbefJqVboHP3Pd2nIakPG2M5wDiWFLomfMGjw7TdTVuItC2ZqTUZXd1mYVnxyjMWfTnRvkHRumPaOKqorcmaa4JcgXoTmu8hmD0B5LifIT/w6PoLVMsNodo7VF85fbPMSF7nEnKzCcSWHhBHS5ujNyx6I1KGOlTKQW0j5onfzSqELkEXY5JtIC+hYgtE9NNLFJHIEdqdMs2SV7T7uT476u3sBoWKbgxoR/TdVxEaiGXm/jS4vRqkaAUkpYT+tgEkwU816Y/5hFWJKO1ZXbmlvFFTC9VrOqAvpY4IkWiqUcF0kiCNIlZD/heaweia2MV8uhahfaMS39YIBOJ6kuctsJubCyJpR1JXHZRDclJt4bnJnhuQms9j4gtky5wJEnZM/G5smLcb7MaFvn7YC++jCnbIXZTotttrBBiLXGkIq1WUL5gqVek1/XQboyWgqdak3giYf/qFGFsc091L2f9MygENbuDDiTeusBpGztU5QlaW12Ur+l0fWRo3PWUL4iHEhAa1R5s5EoHu3cjc3OX831yzovfOQcQaWU6t2y2saJNJHkL5QnjdNcyrogIY7egkeahb4tzeQBLmTi5djTTow1yMubrnTHOJhUebszSVza9xGXer7LNXeZQfxrnrIvbEEQ9n9jTrE7YOG5C2jYmbqqqEU6K0zK2BVpAVBIDjxLNj/yF455LYdEiv6Tx1vpYkcOE3aCdmkRipCSLYQVbbKw6A8BSGruniQeNLWWs0f0+wpaQpqx38uyPJgiUg+ckJKmZrUYV44+S2uZjasvkIVJPkBTNA3epX6Lfc7F7CqE1XsNGaEE4ZpoXh6N57G7C6qLNnfZrWGkWSSLJWlpEKwu/bxoFp46ZCae2Hmz7N6tWGUHScsFJz83iGzqHSqQpixVml+ZGs0zaFoRVM1YEkcPjCzNoDYVcyPBIj6sKp7naW2C00GE1VybJSVTBGTzsTd4nrFokBY3rmYfISrdAGNuIvCJRgqgqUS7EbQ8RWfh1jYxMI2lgkGsSOFKxJWfKN2XfhDBT2/RYsMox1CVO1+zaTMoKLSWpLZCxgy8sRJJi9zQiFPgiQSF4LNhKW/nAoRfU4eJWrdQU3vuX+NyOb9JOc3z2a7/K0MMLHP23U4hdAdfNnGFnYZn7lnaxUC8Tr/s4DUlvXLB8+yzhkAA0lXtzHPzkTtauHyF4dwMAUUhQno3u9ZDPtNj1P7fQ2Vog+lCd2V1rLO8rEQvNu6f2s8mpsxAP0VY+93f3INEc7Eyz2CtT9QJKdsi9B/dSfcKhs0WT39WgVS9wz93XUlkQxLMTrF2ZZ8sHjzLXrtJ9aJShukakISq/se7oSUHS2O6y6W5Fkisy9dGjvGvscX7/4XdiNy2zyWNfle64RVyG4mSDca/FXzx0E9P3QjBk0R8V1BY06fYZAD558h2s93K03l9ABgL/78Ypx1C/zAcBq3ft4li8i9EnuohU82dvu51oS8gnX/sNXpc7RfGIw8zX59DdAJKEU/9+LxNvmmPt1Bj+M3ncNkRFi/ZsyodvepBvnLoCffcwyofeZDqIw2usQsy7Nu1n0lnfUM/ONVXgaDjOB3/rblJtMR9WWQgqNP9uF2MPQ5IzYR/lSrRtNjp1J0z/TOPvDtVjMa1dFl/c8xX+eOWNfOKuXzH3oD8YKjQcseGh0g5EVzL1aIpXT3DaEaljsXhzgaiiqS4K7EDT3O0QDwlGDijK3ztJ4xdmqe+xTBndmkXgOtRLefzTLtP3dxCJGai1hG12k2bao+oG1MM8B1YmNxy3B7MysgPNXY+/BstTTArQ02OItRbW8jru/dv5j2c/yOyeRd6x5Um+PHcLWpr9FNoyJmRRURAXNH4uoq9B+RKhBM/MT6DrHsGoxmsqxh9YIxnKc3IoR1JMWbjFxuk67PxSD3tJk5uWJDmb3JkWohtw+r0ztG4MqFR6jBU72FaKayU8/vQsTlci+5ryIZukAP2RFCsSOGsCaYOomAdjb9Uxq/SNaFJVhG9owUKB8KTHzL0hdjfG/cMWfzp7F1XLxhEeeTs6FyILRlyTL8op+rMJ0c6U4VqHmydOcM/J3eh7hunvSPn9t/01R/vjfLV4A9a6Q+Wgg19PGb7/DNp3WbphjLScsPk7Cc5SC/uXIz5U/SFfsF6P10pp7LQIJ2L27prnl8YP8tn0LXDKI65oxrfWuXZ0jg8NP8RHnvxVkpObST2TnLd7ggd6u+gony8euIk0sHlFVa04UrG5tM52Z52zKjS1yat1rGQahOkqMuPWKbohjqOIMT/M1IYkbzLFYBrQqmeOkput0h38IMQgJoZSpGGIvdLCHfLAThjzOlScPjkZ8Yb8s8zYCd9OXZoqR095pAjWwgKNfg6tBYlrIULLNGQYdPBopeC0BTLUaNuYN+0srdBLXPp9M/MxH2RjmhgPFIHbSpChxJcJ0/b6OTuDVJrrTj0zCPlS4VgKa9BgFu2ROhZ2X5O65utsRx5aC1RZIVIbp2N2FqYD/byGxgk0zmIDEoXbLBK1HZQW+MJUZ+h6gzToo5MYLWFzcZ0T9ggyGsSgLdBuyoxbx7UVSajRlokh68F3IaRmyO4ybHc2pEmiLWItuSl3hJLV5xlnkmPOOIf0LpzAnGegHmkqziVwf5RbESlYoYn3zNgeltCmeYeAKP3xd2QmtqZhsB0kyCDBanSxHBs7KKB8gd03qxKhBGiBHaSo9QZCabStEZGZcQpl2tKJGGQ7RAuB9owvjCPAESmOZUJMsZKoDSaAf4TQIAJJOqiz187ANjlJcLoau2WRajHI53DOawQGxWCDnfWWpREW53pkprGx5NXSrLZEN0C6NkKZlYTKaSwlsFc7qOOncRwbWfTh7Aqq2UKkM3i5mKIXUXRCSk5IQUY87ilSaXZEy1CTusY/3IrMbyZ1BvkHy2j4YrrhnI9tmRBNqIrIvsBd7iBaXWyhzvnJxIOduTC4b6U4p4N0Uzw/Mu6rdoDWArdtasG3Oqv0UwfpKVLbRvY1Tk+j222ELhrbH1sjgxgabSwsSgOPH6FAS43wUmpej2lnHWn/6OGuyTkxM94613uCiVKbyCuQSnHOMC5MHdrKJ+3ZiOCnJw6E1hsvmftZEUKsAF1g9aKd9KVlhOe/li1a69EXc4BXoSbw/LpkmvwcmsCrUpdMk+fyM40pF3UgBxBC/HAjRkGvZC7UtbyaNIELcz2ZJi/tcV4JZJo8l5/1Wn4OR96MjIyMjFcC2UCekZGRcYnzcgzkf/4ynPOl4kJdy6tJE7gw15Np8tIe55VApslz+Zmu5aLHyDMyMjIyLixZaCUjIyPjEueiDeRCiNuEEM8KIY4KIf7TxTrvhUIIsUkIcZ8Q4mkhxFNCiI8P3v8DIcS8EOKJwettGzzuJatLpslzyTR5fl4KXTJNzkNr/ZK/AAkcA7YBLrAf2Hcxzn0Br2ESuHbw7xJwGNgH/AHwO/8cdck0yTR5uXTJNPnJ18Wakd8AHNVaH9daR8BfAL98kc59QdBaL2qtHxv8u40xP5j+OQ97SeuSafJcMk2en5dAl0yT87hYA/k0cOa8v+f4+W/ulw0hxFbgGn7cGuBjQogDQogvCCGGNnCoV40umSbPJdPk+blAumSanEeW7NwgQogi8FfAf9Bat4DPAduBq4FF4LMv48d7Wcg0eS6ZJs9PpstzuRCaXKyBfB7YdN7fM4P3LimEEA5G8K9qrf8aQGu9pLVWWusUuAOz5HuxXPK6ZJo8l0yT5+cC65Jpch4XayB/BNgphJgVQrjAr/DTfBlfYQghBPB54JDW+o/Oe3/yvP/2LuDJDRz2ktYl0+S5ZJo8Py+BLpkm53FRbGy11okQ4mPA3Zhs8xe01k9djHNfQG4B/g1wUAjxxOC93wM+IIS4GtPX6CTwWy/2gK8CXTJNnkumyfNzQXXJNPlJsp2dGRkZGZc4WbIzIyMj4xInG8gzMjIyLnGygTwjIyPjEicbyDMyMjIucbKBPCMjI+MSJxvIMzIyMi5xsoE8IyMj4xInG8gzMjIyLnH+HwHSPIV+B9i5AAAAAElFTkSuQmCC\n"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model.eval()\n",
"predictions = []\n",
"plots = 5\n",
"for i, data in enumerate(test_dataset):\n",
" if i == plots:\n",
" break\n",
" predictions.append(model(data[0].to(device).unsqueeze(0)).detach().cpu())\n",
"plotn(plots, test_dataset)\n",
"plotn(plots, predictions)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MyvmZEHzdoJT"
},
"source": [
"> **Exercise:** See how denoiser trained on MNIST digits works for different images. As an example, you can take [Fashion MNIST](https://pytorch.org/vision/stable/generated/torchvision.datasets.FashionMNIST.html#torchvision.datasets.FashionMNIST) dataset, which has the same image size. Note that denoiser works well only on the same image type that is was trained on (i.e. for the same probability distribution of input data)."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yxFKm_OxdqfO"
},
"source": [
"## Super-Resolution\n",
"\n",
"Similarly to denoiser, we can train autoencoders to increase the resolution of the image. To train super-resolution network, we will start with high-res images, and automatically downscale them to produce network inputs. We will then feed autoencoder with small images as inputs and high-res images as outputs.\n",
"\n",
"For that let's downscale image to 14x14 at train."
]
},
{
"cell_type": "code",
"source": [
"transform = transforms.Compose([transforms.ToTensor()])\n",
"\n",
"raw_train_dataset, raw_test_dataset = mnist(train_size, transform)\n",
"\n",
"super_res_transform = transforms.Resize((14, 14))\n",
"train_dataset, test_dataset = CustomDataset(raw_train_dataset, image_transform=super_res_transform), CustomDataset(raw_test_dataset, image_transform=super_res_transform)"
],
"metadata": {
"id": "9tmwSp-frz8X"
},
"execution_count": 138,
"outputs": []
},
{
"cell_type": "code",
"source": [
"train_dataloader = torch.utils.data.DataLoader(train_dataset, drop_last=True, batch_size=batch_size, shuffle=True)\n",
"test_dataloader = torch.utils.data.DataLoader(test_dataset, batch_size=1, shuffle=False)\n",
"dataloaders = (train_dataloader, test_dataloader)"
],
"metadata": {
"id": "p5NrDP5Jt0M7"
},
"execution_count": 139,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:31:45.310634Z",
"iopub.status.busy": "2022-04-08T00:31:45.310384Z",
"iopub.status.idle": "2022-04-08T00:31:45.688313Z",
"shell.execute_reply": "2022-04-08T00:31:45.687614Z",
"shell.execute_reply.started": "2022-04-08T00:31:45.310597Z"
},
"id": "trida5guu9js",
"outputId": "62ba84e5-ff3d-4f56-a576-21e21e322e68",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 108
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"plotn(5, train_dataset)"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:31:45.690022Z",
"iopub.status.busy": "2022-04-08T00:31:45.689620Z",
"iopub.status.idle": "2022-04-08T00:31:45.698351Z",
"shell.execute_reply": "2022-04-08T00:31:45.697586Z",
"shell.execute_reply.started": "2022-04-08T00:31:45.689984Z"
},
"id": "9vC57e-rei4p",
"trusted": true
},
"outputs": [],
"source": [
"class SuperResolutionEncoder(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.conv1 = nn.Conv2d(1, 16, kernel_size=(3, 3), padding='same')\n",
" self.maxpool1 = nn.MaxPool2d(kernel_size=(2, 2))\n",
" self.conv2 = nn.Conv2d(16, 8, kernel_size=(3, 3), padding='same')\n",
" self.maxpool2 = nn.MaxPool2d(kernel_size=(2, 2), padding=(1, 1))\n",
" self.relu = nn.ReLU()\n",
"\n",
" def forward(self, input):\n",
" hidden1 = self.maxpool1(self.relu(self.conv1(input)))\n",
" encoded = self.maxpool2(self.relu(self.conv2(hidden1)))\n",
" return encoded"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:31:45.699896Z",
"iopub.status.busy": "2022-04-08T00:31:45.699576Z",
"iopub.status.idle": "2022-04-08T00:31:45.714684Z",
"shell.execute_reply": "2022-04-08T00:31:45.713859Z",
"shell.execute_reply.started": "2022-04-08T00:31:45.699857Z"
},
"id": "d78J288qe5qJ",
"trusted": true
},
"outputs": [],
"source": [
"model = AutoEncoder(super_resolution=True).to(device)\n",
"optimizer = optim.Adam(model.parameters(), lr=lr, eps=eps)\n",
"loss_fn = nn.BCELoss()\n",
"epochs = 30"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:31:45.718432Z",
"iopub.status.busy": "2022-04-08T00:31:45.718047Z",
"iopub.status.idle": "2022-04-08T00:38:29.683824Z",
"shell.execute_reply": "2022-04-08T00:38:29.683115Z",
"shell.execute_reply.started": "2022-04-08T00:31:45.718402Z"
},
"id": "CJ_zcN5Je6I-",
"outputId": "943bcc64-f818-4c71-f1e1-ce70883b29a2",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"100%|██████████| 30/30 [15:12<00:00, 30.43s/it, train loss:=0.104, test loss:=0.104]\n"
]
}
],
"source": [
"train(dataloaders, model, loss_fn, optimizer, epochs, device)"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:29.687844Z",
"iopub.status.busy": "2022-04-08T00:38:29.687353Z",
"iopub.status.idle": "2022-04-08T00:38:30.585026Z",
"shell.execute_reply": "2022-04-08T00:38:30.584352Z",
"shell.execute_reply.started": "2022-04-08T00:38:29.687803Z"
},
"id": "YsVfcCKKfjv1",
"outputId": "b31eeeaf-97fd-452d-ace6-6b6bd24156d4",
"trusted": true,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 200
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"model.eval()\n",
"predictions = []\n",
"plots = 5\n",
"for i, data in enumerate(test_dataset):\n",
" if i == plots:\n",
" break\n",
" predictions.append(model(data[0].to(device).unsqueeze(0)).detach().cpu())\n",
"plotn(plots, test_dataset)\n",
"plotn(plots, predictions)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-aZqFJthfu9-"
},
"source": [
"> **Exercise**: Try to train super-resolution network on [CIFAR-10](https://pytorch.org/vision/stable/generated/torchvision.datasets.CIFAR10.html) for 2x and 4x upscaling. Use noise as input to 4x upscaling model and observe the result."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "A3DOJU1-gTJV"
},
"source": [
"# [Variational Auto-Encoders (VAE)](https://arxiv.org/abs/1906.02691)\n",
"\n",
"Traditional autoencoders reduce the dimension of the input data somehow, figuring out the important features of input images. However, latent vectors ofter do not make much sense. In other words, taking MNIST dataset as an example, figuring out which digits correspond to different latent vectors is not an easy task, because close latent vectors would not necessarily correspond to the same digits. \n",
"\n",
"On the other hand, to train *generative* models it is better to have some understanding of the latent space. This idea leads us to **variational autoencoder** (VAE).\n",
"\n",
"VAE is the autoencoder that learns to predict *statistical distribution* of the latent parameters, so-called **latent distribution**. For example, we can assume that latent vectors would be distributed as $N(\\mathrm{z\\_mean},e^{\\mathrm{z\\_log}})$, where $\\mathrm{z\\_mean}, \\mathrm{z\\_log} \\in\\mathbb{R}^d$. Encoder in VAE learns to predict those parameters, and then decoder takes a random vector from this distribution to reconstruct the object.\n",
"\n",
"To summarize:\n",
"\n",
" * From input vector, we predict `z_mean` and `z_log` (instead of predicting the standard deviation itself, we predict it's logarithm)\n",
" * We sample a vector `sample(z_val in code)` from the distribution $N(\\mathrm{z\\_mean},e^{\\mathrm{z\\_log\\_sigma}})$\n",
" * Decoder tries to decode the original image using `sample` as an input vector\n",
"\n",
" <img src=\"images/vae.png\" width=\"50%\">\n",
"\n",
" > Image from [this blog post](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) by Isaak Dykeman"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.586882Z",
"iopub.status.busy": "2022-04-08T00:38:30.586394Z",
"iopub.status.idle": "2022-04-08T00:38:30.595011Z",
"shell.execute_reply": "2022-04-08T00:38:30.594391Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.586844Z"
},
"id": "aT_GEWeU409I",
"trusted": true
},
"outputs": [],
"source": [
"class VAEEncoder(nn.Module):\n",
" def __init__(self, device):\n",
" super().__init__()\n",
" self.intermediate_dim = 512\n",
" self.latent_dim = 2\n",
" self.linear = nn.Linear(784, self.intermediate_dim)\n",
" self.z_mean = nn.Linear(self.intermediate_dim, self.latent_dim)\n",
" self.z_log = nn.Linear(self.intermediate_dim, self.latent_dim)\n",
" self.relu = nn.ReLU()\n",
" self.device = device\n",
"\n",
" def forward(self, input):\n",
" bs = input.shape[0]\n",
"\n",
" hidden = self.relu(self.linear(input))\n",
" z_mean = self.z_mean(hidden)\n",
" z_log = self.z_log(hidden)\n",
"\n",
" eps = torch.FloatTensor(np.random.normal(size=(bs, self.latent_dim))).to(device)\n",
" z_val = z_mean + torch.exp(z_log) * eps\n",
" return z_mean, z_log, z_val"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.596177Z",
"iopub.status.busy": "2022-04-08T00:38:30.595932Z",
"iopub.status.idle": "2022-04-08T00:38:30.606805Z",
"shell.execute_reply": "2022-04-08T00:38:30.606054Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.596144Z"
},
"id": "XWi4oCcq409p",
"trusted": true
},
"outputs": [],
"source": [
"class VAEDecoder(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.intermediate_dim = 512\n",
" self.latent_dim = 2\n",
" self.linear = nn.Linear(self.latent_dim, self.intermediate_dim)\n",
" self.output = nn.Linear(self.intermediate_dim, 784)\n",
" self.relu = nn.ReLU()\n",
" self.sigmoid = nn.Sigmoid()\n",
"\n",
" def forward(self, input):\n",
" hidden = self.relu(self.linear(input))\n",
" decoded = self.sigmoid(self.output(hidden))\n",
" return decoded"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.608150Z",
"iopub.status.busy": "2022-04-08T00:38:30.607836Z",
"iopub.status.idle": "2022-04-08T00:38:30.618464Z",
"shell.execute_reply": "2022-04-08T00:38:30.617740Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.608114Z"
},
"id": "WukDYQ9f409p",
"trusted": true
},
"outputs": [],
"source": [
"class VAEAutoEncoder(nn.Module):\n",
" def __init__(self, device):\n",
" super().__init__()\n",
" self.encoder = VAEEncoder(device)\n",
" self.decoder = VAEDecoder()\n",
" self.z_vals = None\n",
"\n",
" def forward(self, input):\n",
" bs, c, h, w = input.shape[0], input.shape[1], input.shape[2], input.shape[3]\n",
" input = input.view(bs, -1)\n",
" encoded = self.encoder(input)\n",
" self.z_vals = encoded\n",
" decoded = self.decoder(encoded[2])\n",
" return decoded\n",
" \n",
" def get_zvals(self):\n",
" return self.z_vals"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EiNMancEld2J"
},
"source": [
"Variational auto-encoders use complex loss function that consists of two parts:\n",
"* **Reconstruction loss** is the loss function that shows how close reconstructed image is to the target (can be MSE). It is the same loss function as in normal autoencoders.\n",
"* **KL loss**, which ensures that latent variable distributions stays close to normal distribution. It is based on the notion of [Kullback-Leibler divergence](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) - a metric to estimate how similar two statistical distributions are."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.620121Z",
"iopub.status.busy": "2022-04-08T00:38:30.619868Z",
"iopub.status.idle": "2022-04-08T00:38:30.627984Z",
"shell.execute_reply": "2022-04-08T00:38:30.627265Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.620089Z"
},
"trusted": true,
"id": "ZBojFRTPld2J"
},
"outputs": [],
"source": [
"def vae_loss(preds, targets, z_vals):\n",
" mse = nn.MSELoss()\n",
" reconstruction_loss = mse(preds, targets.view(targets.shape[0], -1)) * 784.0\n",
" temp = 1.0 + z_vals[1] - torch.square(z_vals[0]) - torch.exp(z_vals[1])\n",
" kl_loss = -0.5 * torch.sum(temp, axis=-1)\n",
" return torch.mean(reconstruction_loss + kl_loss)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.629709Z",
"iopub.status.busy": "2022-04-08T00:38:30.629192Z",
"iopub.status.idle": "2022-04-08T00:38:30.648407Z",
"shell.execute_reply": "2022-04-08T00:38:30.647801Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.629671Z"
},
"trusted": true,
"id": "0-iAt8R-ld2K"
},
"outputs": [],
"source": [
"model = VAEAutoEncoder(device).to(device)\n",
"optimizer = optim.RMSprop(model.parameters(), lr=lr, eps=eps)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.649871Z",
"iopub.status.busy": "2022-04-08T00:38:30.649560Z",
"iopub.status.idle": "2022-04-08T00:38:30.659437Z",
"shell.execute_reply": "2022-04-08T00:38:30.658769Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.649835Z"
},
"trusted": true,
"id": "3z4fkBdKld2K"
},
"outputs": [],
"source": [
"def train_vae(dataloaders, model, optimizer, epochs, device):\n",
" tqdm_iter = tqdm(range(epochs))\n",
" train_dataloader, test_dataloader = dataloaders[0], dataloaders[1]\n",
"\n",
" for epoch in tqdm_iter:\n",
" model.train()\n",
" train_loss = 0.0\n",
" test_loss = 0.0\n",
"\n",
" for batch in train_dataloader:\n",
" imgs, labels = batch\n",
" imgs = imgs.to(device)\n",
" labels = labels.to(device)\n",
"\n",
" preds = model(imgs)\n",
" z_vals = model.get_zvals()\n",
" loss = vae_loss(preds, imgs, z_vals)\n",
"\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" train_loss += loss.item()\n",
"\n",
" model.eval()\n",
" with torch.no_grad():\n",
" for batch in test_dataloader:\n",
" imgs, labels = batch\n",
" imgs = imgs.to(device)\n",
" labels = labels.to(device)\n",
"\n",
" preds = model(imgs)\n",
" z_vals = model.get_zvals()\n",
" loss = vae_loss(preds, imgs, z_vals)\n",
"\n",
" test_loss += loss.item()\n",
"\n",
" train_loss /= len(train_dataloader)\n",
" test_loss /= len(test_dataloader)\n",
"\n",
" tqdm_dct = {'train loss:': train_loss, 'test loss:': test_loss}\n",
" tqdm_iter.set_postfix(tqdm_dct, refresh=True)\n",
" tqdm_iter.refresh()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:38:30.661256Z",
"iopub.status.busy": "2022-04-08T00:38:30.660812Z",
"iopub.status.idle": "2022-04-08T00:43:25.674280Z",
"shell.execute_reply": "2022-04-08T00:43:25.673608Z",
"shell.execute_reply.started": "2022-04-08T00:38:30.661216Z"
},
"trusted": true,
"id": "XaA3HRDlld2K",
"outputId": "e91b9a6d-e15c-4b89-fc0e-6f126c42252c"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 30/30 [04:54<00:00, 9.83s/it, train loss:=35.1, test loss:=35.6]\n"
]
}
],
"source": [
"train_vae(dataloaders, model, optimizer, epochs, device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:25.676045Z",
"iopub.status.busy": "2022-04-08T00:43:25.675634Z",
"iopub.status.idle": "2022-04-08T00:43:26.429255Z",
"shell.execute_reply": "2022-04-08T00:43:26.428437Z",
"shell.execute_reply.started": "2022-04-08T00:43:25.676007Z"
},
"trusted": true,
"id": "xCTlw0PJld2K",
"outputId": "db0f2905-78b2-491a-e4bc-c4c2ef2103a0"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 5 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"model.eval()\n",
"predictions = []\n",
"plots = 5\n",
"for i, data in enumerate(test_dataset):\n",
" if i == plots:\n",
" break\n",
" predictions.append(model(data[0].to(device).unsqueeze(0)).view(1, 28, 28).detach().cpu())\n",
"plotn(plots, test_dataset)\n",
"plotn(plots, predictions)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CgGF6hjZld2L"
},
"source": [
"> **Task**: In our sample, we have trained fully-connected VAE. Now take the CNN from traditional auto-encoder above and create CNN-based VAE."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KydrDl8Ild2L"
},
"source": [
"# [Adversarial Auto-Encoders (AAE)](https://arxiv.org/abs/1511.05644)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VFspsM54ld2L"
},
"source": [
"Adversarial Auto-Encoders is a **combination** of Generative Adversarial Networks and Variational Auto-Encoders. \n",
"\n",
"Encoder will be the generator, discriminator will learn to distinguish the real images encoder output from generated ones. Encoder output is a distribution, from this output decoder will try decode image.\n",
"\n",
"In this approach we have **three loss functions**: generator loss, discriminator loss from GAN's and reconstruction loss from VAE.\n",
"\n",
" <img src=\"images/aae.png\" width=\"50%\">\n",
"\n",
" > Image from [this blog post](https://blog.paperspace.com/adversarial-autoencoders-with-pytorch/) by Felipe Ducau"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.430881Z",
"iopub.status.busy": "2022-04-08T00:43:26.430435Z",
"iopub.status.idle": "2022-04-08T00:43:26.437703Z",
"shell.execute_reply": "2022-04-08T00:43:26.437030Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.430837Z"
},
"trusted": true,
"id": "bCktg2nEld2L"
},
"outputs": [],
"source": [
"class AAEEncoder(nn.Module):\n",
" def __init__(self, input_dim, inter_dim, latent_dim):\n",
" super().__init__()\n",
" self.linear1 = nn.Linear(input_dim, inter_dim)\n",
" self.linear2 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear3 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear4 = nn.Linear(inter_dim, latent_dim)\n",
" self.relu = nn.ReLU()\n",
" \n",
" def forward(self, input):\n",
" hidden1 = self.relu(self.linear1(input))\n",
" hidden2 = self.relu(self.linear2(hidden1))\n",
" hidden3 = self.relu(self.linear3(hidden2))\n",
" encoded = self.linear4(hidden3)\n",
" return encoded"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.439383Z",
"iopub.status.busy": "2022-04-08T00:43:26.438973Z",
"iopub.status.idle": "2022-04-08T00:43:26.450914Z",
"shell.execute_reply": "2022-04-08T00:43:26.450120Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.439339Z"
},
"trusted": true,
"id": "ygqUQvqhld2L"
},
"outputs": [],
"source": [
"class AAEDecoder(nn.Module):\n",
" def __init__(self, latent_dim, inter_dim, output_dim):\n",
" super().__init__()\n",
" self.linear1 = nn.Linear(latent_dim, inter_dim)\n",
" self.linear2 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear3 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear4 = nn.Linear(inter_dim, output_dim)\n",
" self.relu = nn.ReLU()\n",
" self.sigmoid = nn.Sigmoid()\n",
" \n",
" def forward(self, input):\n",
" hidden1 = self.relu(self.linear1(input))\n",
" hidden2 = self.relu(self.linear2(hidden1))\n",
" hidden3 = self.relu(self.linear3(hidden2))\n",
" decoded = self.sigmoid(self.linear4(hidden3))\n",
" return decoded"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.453838Z",
"iopub.status.busy": "2022-04-08T00:43:26.453577Z",
"iopub.status.idle": "2022-04-08T00:43:26.462584Z",
"shell.execute_reply": "2022-04-08T00:43:26.461884Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.453814Z"
},
"trusted": true,
"id": "cZhHZeCsld2L"
},
"outputs": [],
"source": [
"class AAEDiscriminator(nn.Module):\n",
" def __init__(self, latent_dim, inter_dim):\n",
" super().__init__()\n",
" self.latent_dim = latent_dim\n",
" self.inter_dim = inter_dim\n",
" self.linear1 = nn.Linear(latent_dim, inter_dim)\n",
" self.linear2 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear3 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear4 = nn.Linear(inter_dim, inter_dim)\n",
" self.linear5 = nn.Linear(inter_dim, 1)\n",
" self.relu = nn.ReLU()\n",
" self.sigmoid = nn.Sigmoid()\n",
" \n",
" def forward(self, input):\n",
" hidden1 = self.relu(self.linear1(input))\n",
" hidden2 = self.relu(self.linear2(hidden1))\n",
" hidden3 = self.relu(self.linear3(hidden2))\n",
" hidden4 = self.relu(self.linear4(hidden3))\n",
" decoded = self.sigmoid(self.linear4(hidden4))\n",
" return decoded\n",
" \n",
" def get_dims(self):\n",
" return self.latent_dim, self.inter_dim\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.464666Z",
"iopub.status.busy": "2022-04-08T00:43:26.464215Z",
"iopub.status.idle": "2022-04-08T00:43:26.474821Z",
"shell.execute_reply": "2022-04-08T00:43:26.474117Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.464628Z"
},
"trusted": true,
"id": "xb3KXNK8ld2M"
},
"outputs": [],
"source": [
"input_dims = 784\n",
"inter_dims = 1000\n",
"latent_dims = 150"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.477879Z",
"iopub.status.busy": "2022-04-08T00:43:26.477199Z",
"iopub.status.idle": "2022-04-08T00:43:26.537720Z",
"shell.execute_reply": "2022-04-08T00:43:26.537052Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.477797Z"
},
"trusted": true,
"id": "vdZInPOQld2M"
},
"outputs": [],
"source": [
"aae_encoder = AAEEncoder(input_dims, inter_dims, latent_dims).to(device)\n",
"aae_decoder = AAEDecoder(latent_dims, inter_dims, input_dims).to(device)\n",
"aae_discriminator = AAEDiscriminator(latent_dims, int(inter_dims / 2)).to(device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.539592Z",
"iopub.status.busy": "2022-04-08T00:43:26.539109Z",
"iopub.status.idle": "2022-04-08T00:43:26.543949Z",
"shell.execute_reply": "2022-04-08T00:43:26.543156Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.539555Z"
},
"trusted": true,
"id": "qYhyBPDqld2M"
},
"outputs": [],
"source": [
"lr = 1e-4\n",
"regularization_lr = 5e-5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.545858Z",
"iopub.status.busy": "2022-04-08T00:43:26.545404Z",
"iopub.status.idle": "2022-04-08T00:43:26.553377Z",
"shell.execute_reply": "2022-04-08T00:43:26.552700Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.545825Z"
},
"trusted": true,
"id": "Di0y1zVOld2M"
},
"outputs": [],
"source": [
"optim_encoder = optim.Adam(aae_encoder.parameters(), lr=lr)\n",
"optim_encoder_regularization = optim.Adam(aae_encoder.parameters(), lr=regularization_lr)\n",
"optim_decoder = optim.Adam(aae_decoder.parameters(), lr=lr)\n",
"optim_discriminator = optim.Adam(aae_discriminator.parameters(), lr=regularization_lr)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.555945Z",
"iopub.status.busy": "2022-04-08T00:43:26.555659Z",
"iopub.status.idle": "2022-04-08T00:43:26.576630Z",
"shell.execute_reply": "2022-04-08T00:43:26.575929Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.555908Z"
},
"trusted": true,
"id": "_1ClSDv1ld2M"
},
"outputs": [],
"source": [
"def train_aae(dataloaders, models, optimizers, epochs, device):\n",
" tqdm_iter = tqdm(range(epochs))\n",
" train_dataloader, test_dataloader = dataloaders[0], dataloaders[1]\n",
" \n",
" enc, dec, disc = models[0], models[1], models[2]\n",
" optim_enc, optim_enc_reg, optim_dec, optim_disc = optimizers[0], optimizers[1], optimizers[2], optimizers[3]\n",
" \n",
" eps = 1e-9\n",
"\n",
" for epoch in tqdm_iter:\n",
" enc.train()\n",
" dec.train()\n",
" disc.train()\n",
"\n",
" train_reconst_loss = 0.0\n",
" train_disc_loss = 0.0\n",
" train_enc_loss = 0.0\n",
" \n",
" test_reconst_loss = 0.0\n",
" test_disc_loss = 0.0\n",
" test_enc_loss = 0.0\n",
"\n",
" for batch in train_dataloader:\n",
" imgs, labels = batch\n",
" imgs = imgs.view(imgs.shape[0], -1).to(device)\n",
" labels = labels.to(device)\n",
" \n",
" enc.zero_grad()\n",
" dec.zero_grad()\n",
" disc.zero_grad()\n",
" \n",
" encoded = enc(imgs)\n",
" decoded = dec(encoded)\n",
" \n",
" reconstruction_loss = F.binary_cross_entropy(decoded, imgs)\n",
" reconstruction_loss.backward()\n",
" \n",
" optim_enc.step()\n",
" optim_dec.step()\n",
" enc.eval()\n",
"\n",
" latent_dim, disc_inter_dim = disc.get_dims()\n",
" real = torch.randn(imgs.shape[0], latent_dim).to(device)\n",
" \n",
" disc_real = disc(real)\n",
" disc_fake = disc(enc(imgs))\n",
" \n",
" disc_loss = -torch.mean(torch.log(disc_real + eps) + torch.log(1.0 - disc_fake + eps))\n",
" disc_loss.backward()\n",
" \n",
" optim_dec.step()\n",
" enc.train()\n",
" \n",
" disc_fake = disc(enc(imgs))\n",
" enc_loss = -torch.mean(torch.log(disc_fake + eps))\n",
" enc_loss.backward()\n",
" \n",
" optim_enc_reg.step()\n",
"\n",
" train_reconst_loss += reconstruction_loss.item()\n",
" train_disc_loss += disc_loss.item()\n",
" train_enc_loss += enc_loss.item()\n",
"\n",
" enc.eval()\n",
" dec.eval()\n",
" disc.eval()\n",
"\n",
" with torch.no_grad():\n",
" for batch in test_dataloader:\n",
" imgs, labels = batch\n",
" imgs = imgs.view(imgs.shape[0], -1).to(device)\n",
" labels = labels.to(device)\n",
"\n",
" encoded = enc(imgs)\n",
" decoded = dec(encoded)\n",
"\n",
" reconstruction_loss = F.binary_cross_entropy(decoded, imgs)\n",
"\n",
" latent_dim, disc_inter_dim = disc.get_dims()\n",
" real = torch.randn(imgs.shape[0], latent_dim).to(device)\n",
"\n",
" disc_real = disc(real)\n",
" disc_fake = disc(enc(imgs))\n",
" disc_loss = -torch.mean(torch.log(disc_real + eps) + torch.log(1.0 - disc_fake + eps))\n",
"\n",
" disc_fake = disc(enc(imgs))\n",
" enc_loss = -torch.mean(torch.log(disc_fake + eps))\n",
"\n",
" test_reconst_loss += reconstruction_loss.item()\n",
" test_disc_loss += disc_loss.item()\n",
" test_enc_loss += enc_loss.item()\n",
"\n",
" train_reconst_loss /= len(train_dataloader)\n",
" train_disc_loss /= len(train_dataloader)\n",
" train_enc_loss /= len(train_dataloader)\n",
" \n",
" test_reconst_loss /= len(test_dataloader)\n",
" test_disc_loss /= len(test_dataloader)\n",
" test_enc_loss /= len(test_dataloader)\n",
"\n",
" tqdm_dct = {'train reconst loss:': train_reconst_loss, 'train disc loss:': train_disc_loss, 'train enc loss': train_enc_loss, \\\n",
" 'test reconst loss:': test_reconst_loss, 'test disc loss:': test_disc_loss, 'test enc loss': test_enc_loss}\n",
" tqdm_iter.set_postfix(tqdm_dct, refresh=True)\n",
" tqdm_iter.refresh()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.578419Z",
"iopub.status.busy": "2022-04-08T00:43:26.577933Z",
"iopub.status.idle": "2022-04-08T00:43:26.589197Z",
"shell.execute_reply": "2022-04-08T00:43:26.588532Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.578373Z"
},
"trusted": true,
"id": "0Z7Qt2R_ld2M"
},
"outputs": [],
"source": [
"models = (aae_encoder, aae_decoder, aae_discriminator)\n",
"optimizers = (optim_encoder, optim_encoder_regularization, optim_decoder, optim_discriminator)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:43:26.592138Z",
"iopub.status.busy": "2022-04-08T00:43:26.590197Z",
"iopub.status.idle": "2022-04-08T00:52:49.002321Z",
"shell.execute_reply": "2022-04-08T00:52:49.001592Z",
"shell.execute_reply.started": "2022-04-08T00:43:26.592099Z"
},
"trusted": true,
"id": "MeWnsKPSld2N",
"outputId": "20be03ca-d9b1-44c6-c10e-f069b0d9b441"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 30/30 [09:22<00:00, 18.75s/it, train reconst loss:=0.0919, train disc loss:=1.39, train enc loss=0.692, test reconst loss:=0.0945, test disc loss:=1.39, test enc loss=0.692]\n"
]
}
],
"source": [
"train_aae(dataloaders, models, optimizers, epochs, device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"execution": {
"iopub.execute_input": "2022-04-08T00:52:49.004318Z",
"iopub.status.busy": "2022-04-08T00:52:49.003842Z",
"iopub.status.idle": "2022-04-08T00:52:50.737055Z",
"shell.execute_reply": "2022-04-08T00:52:50.736379Z",
"shell.execute_reply.started": "2022-04-08T00:52:49.004280Z"
},
"trusted": true,
"id": "Ddt97NZYld2N",
"outputId": "0d104380-98a2-4249-a2a3-875143825db2"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"aae_encoder.eval()\n",
"aae_decoder.eval()\n",
"predictions = []\n",
"plots = 10\n",
"for i, data in enumerate(test_dataset):\n",
" if i == plots:\n",
" break\n",
" pred = aae_decoder(aae_encoder(data[0].to(device).unsqueeze(0).view(1, 784)))\n",
" predictions.append(pred.view(1, 28, 28).detach().cpu())\n",
"plotn(plots, test_dataset)\n",
"plotn(plots, predictions)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "owD_X5aPld2N"
},
"source": [
"## Additional Materials\n",
"\n",
"* [Blog post on NeuroHive](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/)\n",
"* [Variational Autoencoders Explained](https://kvfrans.com/variational-autoencoders-explained/)"
]
}
],
"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.7.12"
},
"colab": {
"name": "AutoEncodersPyTorch.ipynb",
"provenance": [],
"collapsed_sections": [
"yxFKm_OxdqfO",
"A3DOJU1-gTJV",
"KydrDl8Ild2L",
"owD_X5aPld2N"
]
},
"accelerator": "GPU"
},
"nbformat": 4,
"nbformat_minor": 0
}