Skip to content

Instantly share code, notes, and snippets.

@chenyuntc
Last active March 27, 2019 10:16
Show Gist options
  • Save chenyuntc/554876374e4ccf70fe2d3fe7bec98743 to your computer and use it in GitHub Desktop.
Save chenyuntc/554876374e4ccf70fe2d3fe7bec98743 to your computer and use it in GitHub Desktop.

Revisions

  1. chenyuntc revised this gist Jan 31, 2018. 1 changed file with 0 additions and 459 deletions.
    459 changes: 0 additions & 459 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -1,459 +0,0 @@
    {
    "cells": [
    {
    "cell_type": "code",
    "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "\n",
    "import torch as t\n",
    "from torch.utils import data\n",
    "from torchvision import transforms as tsf\n",
    "\n",
    "TRAIN_PATH = '../train.pth'\n",
    "TEST_PATH = '../test.tph'\n",
    "%matplotlib inline"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Data Preprocessing\n",
    "Preprocess data and save it to disk"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
    "import os\n",
    "from pathlib import Path\n",
    "from PIL import Image\n",
    "from skimage import io\n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "import torch as t\n",
    "\n",
    "\n",
    "def process(file_path, has_mask=True):\n",
    " file_path = Path(file_path)\n",
    " files = sorted(list(Path(file_path).iterdir()))\n",
    " datas = []\n",
    "\n",
    " for file in tqdm(files):\n",
    " item = {}\n",
    " imgs = []\n",
    " for image in (file/'images').iterdir():\n",
    " img = io.imread(image)\n",
    " imgs.append(img)\n",
    " assert len(imgs)==1\n",
    " if img.shape[2]>3:\n",
    " assert(img[:,:,3]!=255).sum()==0\n",
    " img = img[:,:,:3]\n",
    "\n",
    " if has_mask:\n",
    " mask_files = list((file/'masks').iterdir())\n",
    " masks = None\n",
    " for ii,mask in enumerate(mask_files):\n",
    " mask = io.imread(mask)\n",
    " assert (mask[(mask!=0)]==255).all()\n",
    " if masks is None:\n",
    " H,W = mask.shape\n",
    " masks = np.zeros((len(mask_files),H,W))\n",
    " masks[ii] = mask\n",
    " tmp_mask = masks.sum(0)\n",
    " assert (tmp_mask[tmp_mask!=0] == 255).all()\n",
    " for ii,mask in enumerate(masks):\n",
    " masks[ii] = mask/255 * (ii+1)\n",
    " mask = masks.sum(0)\n",
    " item['mask'] = t.from_numpy(mask)\n",
    " item['name'] = str(file).split('/')[-1]\n",
    " item['img'] = t.from_numpy(img)\n",
    " datas.append(item)\n",
    " return datas\n",
    "\n",
    "# You can skip this if you have alreadly done it.\n",
    "# test = process('../input/stage1_test/',False)\n",
    "# t.save(test, TEST_PATH)\n",
    "# train_data = process('../input/stage1_train/')\n",
    "# t.save(train_data, TRAIN_PATH)"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Data Loader\n",
    "Wrap it with pytorch `Dataset` and `DataLoader` "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
    "import PIL\n",
    "class Dataset():\n",
    " def __init__(self,path,source_transform,target_transform):\n",
    " self.datas = t.load(path)\n",
    " self.s_transform = source_transform\n",
    " self.t_transform = target_transform\n",
    " def __getitem__(self, index):\n",
    " data = self.datas[index]\n",
    " img = data['img'].numpy()\n",
    " mask = data['mask'][:,:,None].byte().numpy()\n",
    " img = self.s_transform(img)\n",
    " mask = self.t_transform(mask)\n",
    " return img, mask\n",
    " def __len__(self):\n",
    " return len(self.datas)\n",
    "s_trans = tsf.Compose([\n",
    " tsf.ToPILImage(),\n",
    " tsf.Resize((128,128)),\n",
    " tsf.ToTensor(),\n",
    " tsf.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])\n",
    "]\n",
    ")\n",
    "t_trans = tsf.Compose([\n",
    " tsf.ToPILImage(),\n",
    " tsf.Resize((128,128),interpolation=PIL.Image.NEAREST),\n",
    " tsf.ToTensor(),]\n",
    ")\n",
    "dataset = Dataset(TRAIN_PATH,s_trans,t_trans)\n",
    "dataloader = t.utils.data.DataLoader(dataset,num_workers=2,batch_size=32)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 4,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "<matplotlib.image.AxesImage at 0x7f3dbf492e80>"
    ]
    },
    "execution_count": 4,
    "metadata": {},
    "output_type": "execute_result"
    },
    {
    "data": {
    "image/png": "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\n",
    "text/plain": [
    "<matplotlib.figure.Figure at 0x7f3eb801dd30>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "img,mask = dataset[12]\n",
    "plt.subplot(121)\n",
    "plt.imshow(img.permute(1,2,0).numpy()*0.5+0.5)\n",
    "plt.subplot(122)\n",
    "plt.imshow(mask[0].numpy())"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Model: UNet"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
    "# sub-parts of the U-Net model\n",
    "\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "\n",
    "class double_conv(nn.Module):\n",
    " '''(conv => BN => ReLU) * 2'''\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(double_conv, self).__init__()\n",
    " self.conv = nn.Sequential(\n",
    " nn.Conv2d(in_ch, out_ch, 3, padding=1),\n",
    " nn.BatchNorm2d(out_ch),\n",
    " nn.ReLU(inplace=True),\n",
    " nn.Conv2d(out_ch, out_ch, 3, padding=1),\n",
    " nn.BatchNorm2d(out_ch),\n",
    " nn.ReLU(inplace=True)\n",
    " )\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class inconv(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(inconv, self).__init__()\n",
    " self.conv = double_conv(in_ch, out_ch)\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class down(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(down, self).__init__()\n",
    " self.mpconv = nn.Sequential(\n",
    " nn.MaxPool2d(2),\n",
    " double_conv(in_ch, out_ch)\n",
    " )\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.mpconv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class up(nn.Module):\n",
    " def __init__(self, in_ch, out_ch, bilinear=True):\n",
    " super(up, self).__init__()\n",
    "\n",
    " # would be a nice idea if the upsampling could be learned too,\n",
    " # but my machine do not have enough memory to handle all those weights\n",
    " if bilinear:\n",
    " self.up = nn.Upsample(scale_factor=2)\n",
    " else:\n",
    " self.up = nn.ConvTranspose2d(in_ch, out_ch, 2, stride=2)\n",
    "\n",
    " self.conv = double_conv(in_ch, out_ch)\n",
    "\n",
    " def forward(self, x1, x2):\n",
    " x1 = self.up(x1)\n",
    " diffX = x1.size()[2] - x2.size()[2]\n",
    " diffY = x1.size()[3] - x2.size()[3]\n",
    " x2 = F.pad(x2, (diffX // 2, int(diffX / 2),\n",
    " diffY // 2, int(diffY / 2)))\n",
    " x = t.cat([x2, x1], dim=1)\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class outconv(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(outconv, self).__init__()\n",
    " self.conv = nn.Conv2d(in_ch, out_ch, 1)\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class UNet(nn.Module):\n",
    " def __init__(self, n_channels, n_classes):\n",
    " super(UNet, self).__init__()\n",
    " self.inc = inconv(n_channels, 64)\n",
    " self.down1 = down(64, 128)\n",
    " self.down2 = down(128, 256)\n",
    " self.down3 = down(256, 512)\n",
    " self.down4 = down(512, 512)\n",
    " self.up1 = up(1024, 256)\n",
    " self.up2 = up(512, 128)\n",
    " self.up3 = up(256, 64)\n",
    " self.up4 = up(128, 64)\n",
    " self.outc = outconv(64, n_classes)\n",
    "\n",
    " def forward(self, x):\n",
    " x1 = self.inc(x)\n",
    " x2 = self.down1(x1)\n",
    " x3 = self.down2(x2)\n",
    " x4 = self.down3(x3)\n",
    " x5 = self.down4(x4)\n",
    " x = self.up1(x5, x4)\n",
    " x = self.up2(x, x3)\n",
    " x = self.up3(x, x2)\n",
    " x = self.up4(x, x1)\n",
    " x = self.outc(x)\n",
    " x = t.nn.functional.sigmoid(x)\n",
    " return x"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Loss definition\n",
    "Use Soft Dice Loss"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
    "def soft_dice_loss(inputs, targets):\n",
    " num = targets.size(0)\n",
    " m1 = inputs.view(num,-1)\n",
    " m2 = targets.view(num,-1)\n",
    " intersection = (m1 * m2)\n",
    " score = 2. * (intersection.sum(1)+1) / (m1.sum(1) + m2.sum(1)+1)\n",
    " score = 1 - score.sum()/num\n",
    " return score"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Train\n",
    "Train it within **1 minutes** with GPU"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 7,
    "metadata": {},
    "outputs": [
    {
    "name": "stderr",
    "output_type": "stream",
    "text": [
    "100%|██████████| 21/21 [00:05<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.25it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.25it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.23it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.22it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n"
    ]
    }
    ],
    "source": [
    "model = UNet(3,1).cuda()\n",
    "optimizer = t.optim.Adam(model.parameters(),lr = 1e-3)\n",
    "\n",
    "for epoch in range(10):\n",
    " for x_train, y_train in tqdm(dataloader):\n",
    " x_train = t.autograd.Variable(x_train.cuda())\n",
    " y_train = t.autograd.Variable(y_train.cuda())\n",
    " optimizer.zero_grad()\n",
    " o = model(x_train)\n",
    " loss = soft_dice_loss(o, y_train)\n",
    " loss.backward()\n",
    " optimizer.step()\n"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Test"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
    "class TestDataset():\n",
    " def __init__(self,path,source_transform):\n",
    " self.datas = t.load(path)\n",
    " self.s_transform = source_transform\n",
    " def __getitem__(self, index):\n",
    " data = self.datas[index]\n",
    " img = data['img'].numpy()\n",
    " img = self.s_transform(img)\n",
    " return img\n",
    " def __len__(self):\n",
    " return len(self.datas)\n",
    "\n",
    "testset = TestDataset(TRAIN_PATH,s_trans)\n",
    "testdataloader = t.utils.data.DataLoader(testset,num_workers=2,batch_size=32)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
    "for data in testdataloader:\n",
    " data = t.autograd.Variable(data.cuda())\n",
    " o = model(data)\n",
    " break"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 10,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "<matplotlib.image.AxesImage at 0x7f3dbe4ff438>"
    ]
    },
    "execution_count": 10,
    "metadata": {},
    "output_type": "execute_result"
    },
    {
    "data": {
    "image/png": "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\n",
    "text/plain": [
    "<matplotlib.figure.Figure at 0x7f3da1bf87b8>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "tm=o[1][0].data.cpu().numpy()\n",
    "plt.subplot(121)\n",
    "plt.imshow(data[1].data.cpu().permute(1,2,0).numpy()*0.5+0.5)\n",
    "plt.subplot(122)\n",
    "plt.imshow(tm)"
    ]
    }
    ],
    "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.5.2"
    }
    },
    "nbformat": 4,
    "nbformat_minor": 2
    }
  2. chenyuntc created this gist Jan 31, 2018.
    459 changes: 459 additions & 0 deletions DSB2018.ipynb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,459 @@
    {
    "cells": [
    {
    "cell_type": "code",
    "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "\n",
    "import torch as t\n",
    "from torch.utils import data\n",
    "from torchvision import transforms as tsf\n",
    "\n",
    "TRAIN_PATH = '../train.pth'\n",
    "TEST_PATH = '../test.tph'\n",
    "%matplotlib inline"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Data Preprocessing\n",
    "Preprocess data and save it to disk"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
    "import os\n",
    "from pathlib import Path\n",
    "from PIL import Image\n",
    "from skimage import io\n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "import torch as t\n",
    "\n",
    "\n",
    "def process(file_path, has_mask=True):\n",
    " file_path = Path(file_path)\n",
    " files = sorted(list(Path(file_path).iterdir()))\n",
    " datas = []\n",
    "\n",
    " for file in tqdm(files):\n",
    " item = {}\n",
    " imgs = []\n",
    " for image in (file/'images').iterdir():\n",
    " img = io.imread(image)\n",
    " imgs.append(img)\n",
    " assert len(imgs)==1\n",
    " if img.shape[2]>3:\n",
    " assert(img[:,:,3]!=255).sum()==0\n",
    " img = img[:,:,:3]\n",
    "\n",
    " if has_mask:\n",
    " mask_files = list((file/'masks').iterdir())\n",
    " masks = None\n",
    " for ii,mask in enumerate(mask_files):\n",
    " mask = io.imread(mask)\n",
    " assert (mask[(mask!=0)]==255).all()\n",
    " if masks is None:\n",
    " H,W = mask.shape\n",
    " masks = np.zeros((len(mask_files),H,W))\n",
    " masks[ii] = mask\n",
    " tmp_mask = masks.sum(0)\n",
    " assert (tmp_mask[tmp_mask!=0] == 255).all()\n",
    " for ii,mask in enumerate(masks):\n",
    " masks[ii] = mask/255 * (ii+1)\n",
    " mask = masks.sum(0)\n",
    " item['mask'] = t.from_numpy(mask)\n",
    " item['name'] = str(file).split('/')[-1]\n",
    " item['img'] = t.from_numpy(img)\n",
    " datas.append(item)\n",
    " return datas\n",
    "\n",
    "# You can skip this if you have alreadly done it.\n",
    "# test = process('../input/stage1_test/',False)\n",
    "# t.save(test, TEST_PATH)\n",
    "# train_data = process('../input/stage1_train/')\n",
    "# t.save(train_data, TRAIN_PATH)"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Data Loader\n",
    "Wrap it with pytorch `Dataset` and `DataLoader` "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
    "import PIL\n",
    "class Dataset():\n",
    " def __init__(self,path,source_transform,target_transform):\n",
    " self.datas = t.load(path)\n",
    " self.s_transform = source_transform\n",
    " self.t_transform = target_transform\n",
    " def __getitem__(self, index):\n",
    " data = self.datas[index]\n",
    " img = data['img'].numpy()\n",
    " mask = data['mask'][:,:,None].byte().numpy()\n",
    " img = self.s_transform(img)\n",
    " mask = self.t_transform(mask)\n",
    " return img, mask\n",
    " def __len__(self):\n",
    " return len(self.datas)\n",
    "s_trans = tsf.Compose([\n",
    " tsf.ToPILImage(),\n",
    " tsf.Resize((128,128)),\n",
    " tsf.ToTensor(),\n",
    " tsf.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])\n",
    "]\n",
    ")\n",
    "t_trans = tsf.Compose([\n",
    " tsf.ToPILImage(),\n",
    " tsf.Resize((128,128),interpolation=PIL.Image.NEAREST),\n",
    " tsf.ToTensor(),]\n",
    ")\n",
    "dataset = Dataset(TRAIN_PATH,s_trans,t_trans)\n",
    "dataloader = t.utils.data.DataLoader(dataset,num_workers=2,batch_size=32)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 4,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "<matplotlib.image.AxesImage at 0x7f3dbf492e80>"
    ]
    },
    "execution_count": 4,
    "metadata": {},
    "output_type": "execute_result"
    },
    {
    "data": {
    "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAC7CAYAAABrY1U1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJztvWmwLMlVJvh57uvd3nu1l6pKpSpB\nsQmEdsxaIGaQaIYaMFogMI0ADTW00cAw04CgDQMzBkxttLUapjH1FINAYIAkGMkkGxY1qkaDIZWK\nkkD7Uou22uu9d5fc1+vzI+/n94Sne0Tkcm/GzRuf2bWbGREZ4R4Z+fnx7xw/R2mtkSJFihQp1heZ\nVTcgRYoUKVKcLFKiT5EiRYo1R0r0KVKkSLHmSIk+RYoUKdYcKdGnSJEixZojJfoUKVKkWHOcGNEr\npV6tlPqCUuoRpdSbTuo6KVKcJtLnOsVZhDqJOHqlVBbAQwD+OwCPA3gQwOu01p9d+sVSpDglpM91\nirOKk7LoXwzgEa31F7XWAwDvAHD3CV0rRYrTQvpcpziTOCmivxHAY+L940fbUqQ4y0if6xRnErlV\nXVgpdQ+Ae47evlApZfZJOUluXzWUUlBKIZPJIJOZjJFaa2itcXh4aF67kMvlzP9MJmM+MxqNAACH\nh4fmfIu0DwCy2ax5zevIa7iQzWYDn+Px4/E49HO+dmQymUAbZDts+Prs+u6VUqH3yLdPa31qD5J8\ntrPIvrCCjdO69MIYPa8UeJ97pBf5mTu/sePc/tAnK0tpk43+cybnLX7VfV0bxa91f/X9z833Wxs/\nr2heZx/pz3WOZaGHNga6H/lsnxTRPwHgZvH+pqNtBlrrewHcCwCZTEbn83nzI+V/3w/d3mcfJ88T\nNVDYxGB/1r5OLpdDPp83xA0Ao9HI/Mm2k+ByuRx2dnYAADfccAO2t7eRzWZxcHCAp59+GgCwt7eH\nfr9vBgxfm1z75AAEINC+8XiM4XBoXvMcsl+FQgFbW1u4cOECarWaOU+j0cDly5fRbDYxHA6nrp3J\nZJDP55HP502fDw8Pkc/nsb29jXq9bo7d39/H1atX0e12A4NaFMlnMhkUCgVsbm6a991uF51OJ3C/\n5fns/nEwXQIin+ujdphne0Pt6JeoVy3r+iePR633MYbH97//487t33XDCxZvjwucU8Ucum//45Jz\n+6Mvih7EXNj97TsD73e+56G5zkNkt7fN6/He3kyffUDfF+u4k5JuHgRwh1LqNqVUAcAPAXjfCV0r\nRYrTQvpcpziTOBGLXms9Ukr9GwDvB5AF8Dat9WeiPhdHpqG1Jq02pRSKxSIKhQK01hgMBgCA4XDo\ntJDta/qkIrmPr2kV00pmm6LkDVqVo9EIuVwOlUoFWmscHBwAAJrNpmm37Jurbb72sg3D4RDD4TAw\nq7BhW72ZTAa5XA7lchnZbBbAZAbQbrfR6/UCEg4/WywWUa1WUSxOprLZbBbj8RjZbBZbW1u4ePGi\n2V4qlYwU1O/3p/rh6g/btbGxgWuvvRYAUCqVsL+/j8uXL6PVamE8HjvPdRLRZPM+1+sOWu7vfzJo\n2fP9iVn2C+L2B0uhVv3XfmyaHj/3wunZ4e7/e+fcVr205vl+Vqs+Dk5Mo9da/xWAv5rxM4HXNqHb\n4PZisYh6vY5yuQylFLrdLgCg1WqZ1/YP3yUB8TgfMQITMj08PAyVleTxlDNIbp1OxwwShUIBhUIB\nAAy5yn7Hgeu48XgcKm25zjEajXB4eGjkGACoVqsol8vI5/Om/TxfNps1RF+tVgFMJCMSb7lcNn0r\nl8vI5XLo9/tot9um/67BUd43/pVKJVy4cAEAsLm5iUqlgsFgYKQu3304CczzXC+Kqz/xMvP6wu/d\nf5qXPrdwkTy3f+ipU27MErAyZ6wNm+SjjpWadKFQQLFYNIRCCxOAIVnXOXO5HAqFAnK5nNk/GAww\nHA6N5W5b0TYRu6xsV3tprTebTezu7iKbzRoLVyIOyctrhlntvrbZnzk8PMRwOES/38dwODQETYeq\n7avgOXK5HEqlEmq1GoDJgMvZjvRhZDIZ8/2USiW0Wq3Q/tnX4YwAALa2tpDJZHDlyhXs7e2Z++rq\n3zqCpJ9Ewv+uG14wZdUnAY++qIfbH3Tr9EnESVj1iSF6IGjNuZxqrmOBCZFks1nk83kUCgVjkdIR\nyf/yfCSfSqViiA2YEH2n00Gv15ty9rmuHadPSilD6J1OB1euXDFSTrvdBhDtMJTk5SNu37Wj2n14\neIjBYIB2u42DgwNjcQ8GA3S7XWPtu2Qse3sulzMDJ2dT3EfrexaJDpjcGynRZLNZM0D77lOcAfgs\n4+pPvCyU7A9+5KVT2zb/5CMn2SQAQbJPqmSzKF5x/Rfxoaeeu+pmzITEEH3cCBvXfpINrXzKIOVy\nGeVy2UnaJItSqYRKpWJIYzAYIJPJGBKzLW4bNvm5LF953X6/j4ODA/T7fWSz2QCphun8IWGD3u2u\nAcDVRs44ms0mtNZmRjQej9HpdJxt40yp3W6bgRWAIeDxeGyIvtlsYjweo9FoeGdXdrvkd9vpdLB3\nZOGUSiWMRiPjf5HHr7Mlvwwc/MhLT43skwaXVR+mz3/uhSOvfAMsHmlDjPf2pnT6k0Ca1CxFihQp\n1hyJsegBf2w8tXguNqJDlNYbo0yoq/P4bDaLXC43tRBInpcWPa3SQqGA8XiMXq8XsBp9UR2+GH6X\ntg/AWLrD4dAsnOL2uNaoS5bwWeph55BtY58PDw8DjuHhcGhmQ/b5hsNhQG8/PDw0TtjDw0Ozj7OC\nfr8fiKMPs8Cl/6Db7eKZZ54BAKPJS4mJ57JneOuOKPnGhdOy6pOIWePmo6z6ZYF6PC37MxV1swxQ\n861UJivhqtWqkTu63a6JBGHIXq/XQy6XC/zgw1ZjclCQi34AmFBNShBsi/xcXIL3XZdEHwWXpBEn\nLDHqnK5t1OJtXd8meXvQkqQ8GAxMKCWJvtVqYTAYGK3dllyifDGDwQC7u7sAJoNGJpMxjmOiVCqZ\nqKter4deb/KjXuJiqRPFw3/4QvP6jh/9WGDfhd+7PxB5I7enOFnIcEqSvivEchnwEfz/+ZUPmdc/\nfcsr5jp3ook+k8mgWq1ia2sLALCxsWFIpNls4urVqwBgnKeNRgPj8dg4VxlJ4gvjG4/HU9q97VyM\ncgZHEb5ruyTGKP/DLHBd20eivsFqlnQHPJakSqKnRU/rm7Mj16ARp09S75c+FK21+a43NzexsbGB\nQqGAdrttno1WqzXXvTwtSIKX2+KSvQ+bf/IRp0M2xfw4KYL3QRK83DYP2SeG6O0fP52qxWLRhO9d\nuHAB1WoVWmuUy2VDNKPRyDgGR6ORkR4AGEvSdk5qrc1nisViIB8MZaAwCWBe8giLCPE5pGeNtgk7\nJsrBHbe/crAi+v0+RqORIWXOhqLuZRRI9ryevVAOAGq1GjY3N1Gr1VAsFs3gw/9JhIvk7X2S8FML\nPsW8SATR21aej5xkMjEpt+RyOQwGg8CqS57XJRVw32g0QrvdNlIA91NDD8s7E6dPLp+DLf24LH1f\nSGQUsfss97D9Ue2WA6Tv/NKPIe+1HKB8M5047ZGfs8Nq5aKser2OSqWCw8NDMwBISe68gVq8tOzP\nqz5/3pFG3aRIkSLFmiMRFr0NKQv0ej2TDwYA6vU6MpkMOp2OscJzuRzq9bqxPLmd+nyYRs8oEMoN\nmUzGGae9rCgOV5x91PE+6cbeLxFlycd16sadBbheR7Un6p5GnUv6UJhm2UaS9fk7fvRjofIN0fpX\nLwEA1P78gbmuk1rxKRJB9L7FLnZUBxf1KKVMWmBgEhIpk2sx2uPg4ACtVsuZYlc6BqnLsy0yD7tP\nF4/j+IxDtpSimG4gKq/9MuFL7+A6RiKsn1HXch0fx9fg+4xMFjcajYwRIKNtkk72hEuXJ8nbr+cl\n/RTnE4kgesJFPNKyZty21OyBSf6TSqWCra2tgIOOMfeS7F3OSBkhIoncp8/PQkwuLZ7IZrMmdJT/\nu90uut1uYMm/1MjjWvVh5GbfgzghjlH9i0LY+WUbZoFMFtdqtVAoFJDNZrG/v2++z1Kp5EyVkETY\nkTZhaP2rl6Rkv+ZgdI0vvPLw214A/POHY50rkb8AmxxpnTErI//oiBuNRlBqkuUwn89Ppdmlc1We\nM8o56pJLbGve1277tX1+tr9SqZhUvhykWKCj0+mYPpyEdc+IJmDisGTk0jwLtwhXP2dBXLKX5yXR\n7+/vm9TMjP4BJlLfWSH6dcIjb5kO7Xzez52+hPT4L78cN/1mPDJMKuaNnZdI/C/AJZOQKPlj7vV6\naLfbaLfbqFarAYuf8ohNImGyik8TXwbh8lrM/b6xMSkzd+2116JUKqFUKmEwGBiLNCwsMWx7WHw+\n1ydcc801ACYL0Xq9Hq5cuYJGo2Hua9xBzd7mGySXBTm7YVtbrRb6/b6ZxcmIrDgL05KK2p8/EJBs\nzjIeectLT4XsH//ll0+9P+tkvyjm/gUopW5WSv2dUuqzSqnPKKV+9mj7jlLqb5VSDx/9P/mMPSlS\nLBHps51i3bCIqTMC8L9rre8C8FIAP6WUugvAmwDcp7W+A8B9R++XBqmfj8djk2Fxd3cXTz31FJ5+\n+mlcuXIFV65cwcHBQUCK8OnYszoWXe2xISUml4OTf0zrW6/XsbW1ha2tLVSrVbPddV77PGHHuJDL\n5bC5uYnrrrsO1113HW6++WbceuutuOGGG1Cr1aYiWGaZUURp/fZfFOKeazQaodfrodvtmmybLKQy\nx2xiJc+2D+ukxbskndOAbeWfN8wt3WitnwLw1NHrplLqcwBuBHA3gFceHfZ2AB8E8IuLNNKlfcvF\nOYPBwEgOrVbLTNX543etjLX6Eji/y+m6iAzhInqttUn0BUy05nw+b1YEn6TcwGRvspIU8/pQAgGO\nV7a6ME9I56z7ZonEkb4PRi8B8NYUiDjvqT3bcXHWyP55P/eRlZG6D+dZwlmKRq+UuhXANwN4AMC1\nRz8UAHgawLXLuIYLckUmHYmdTidgjdpx9C4nrM8K9Q0A88AerNhGOl0vX76MbreLTqcTyPAYFevu\nC/MMa4MsNAJMyJBJwWSUyqzRPlED4CzkHzUwu6KZ5LHU7judTmRNgYg234oVPNspUkQh8w8fB6rx\njl2Y6JVSNQD/D4D/VWvdsAhHK6WcrKOUugfAPYte/+g6hrzkVJ3WXRhBz+J49UXd+AYJn6ySy+VQ\nq9UChbibzaapccucPTyPTWY2yfngO47RSMwIydwwDEN1SVq+/saZ3bhIWUJ+Z3YKY5cTPeya3C8r\neM1L9Mt4tkuozHXts4wvv/MbAQA5TIyY0ZPH9+A0nLE3/eaHz49U0+pGH4MFiV4plcfkh/AnWut3\nH21+Ril1vdb6KaXU9QCedX1Wa30vgHsBIJPJLBzOQjJwVR3i/jiEb5OcL1LH/qxLnvG9ZglDWcZQ\nHYUFMo7eTq8bZrG7LGuXpS371O12DdEPh0NUKhUzANiLjeYNlbTB/PvcxxBPDnjMNgrA5C5yDcS+\nWYxL1uv1enMR/bKe7Q21c/Ir3xKO3A0d3PqDnzzVa1KikYS/Ctkmd/115vXoqadP/fqmHfN+UE1+\nVb8P4HNa6/8odr0PwBsAvPno/3vnOLd57ZMGojTisG2u/XEkiLDZQZiVL0mIso2scQscL/7qdDrO\nQUlq0FFtjkPMWutAzvZmswnguDi6fd5ZHLJhDmKljlcDl8tl7OzsYHt7G7VaDf1+H/v7+wCAq1ev\notVqOYuexPG1yNezpF4+Ov+JPdvnFV9+5zeeOtkDqyF3IEjw9rZVEP4iFv0rALwewKeUUiz9/suY\n/AjepZR6I4CvAHjtYk1MkeLUkT7bKdYKi0Td/AMAn9n4qlnPN480ECVhhF3HtnpdFvEiztewGQLz\n6GQymUC6BmCyZL9QKAQWTPF8UY7JqD4CE7mEK4i5jxW77BKNrnPa/Zvne2NfuTL4lltuwdbWFkaj\nEa5cuQJgslr3ySefRKvVclrkrpmGa9s8K4uX/WynmOC0rPrBq19kXhf+5sETv96syF1/3alb9Ylc\nGRtGVHE/y89zm8+x50NcacDXvrBIHqYbsEP/crmcKWEYFl7pcyDHcXqWSiVUq1WUSiXjCO52u2i1\nWuj1ek6ZJKw/9jE+WUl+nlE9lG6uvfZa7OzsAJiEegKTcFOGejL1RVifU6QAgiTP9ynZJzwfPTVp\nFhxxWa5xfuiSfORf1PG+9sS9tuu6zJTJ6JpOp2OKZ7Omqj2gxLVIo45VapIfiEU6NjY2sLGxYTTy\nqCId9r3jd8N7EfYnv0P7+2Sf8/m8SQNRq9VQrVZRKBSmrjELFpmVpZgPq9DigWmSj9p+npAYiz6b\nzU5N0bl4iBYgrWFbYvDJLFFyjOvzp2E5shJWo9Ew2yqVCrTWaLfbU7nwfYhjbduOYKUU8vk8yuWy\nua9MasZIFxnaKa9lv3cRLyNreA1iOBxOFQfv9XrY29tDvV5HNptFoVAwdQHYrmw26xzg4zrZU6wG\nt/7gJ02Ypdy2Lsh849eY14ef/PwKWxIPiSD6bDaLarUaWJFJsqhUKgHCGAwG6PV66Pf7UxkpwxBG\nFlFWsGvbHLpv4PVgMAiEAXY6HSilMBwODeHOen6fji7f894eHh4a6UZrbUI+ZTF1uw1Rgx0t73w+\nH5BjstmsSVMhk6Z1Oh1cvnwZWmt0Oh1TD5j75IrmsIHMhbMi6bzu80+a13/2NTessCXLx2kTe+Fv\nHgy16pcl4UiSl+8l4Y+eetoZebMqJFq6SZEiRYoUiyMRFn0ul8PFixdNXDc1a07/mcq3WCyagt6t\nVisQ+x3XAg6LtJH/XTKPdCpGxZfbn3OdR0o0vV4PmUzGJGqLkwIhjibvmkl0u10Ui0Xj8GVsf6FQ\nQD6fnyrCEgU7Rr5er+OGG24waZDr9Tr6/T4uX76Mxx57DJcvXwYw+d5YJKTZbKJWq5k29ft9NJtN\n56wiKtImSdj5ugFe92631S6tefl+3Sz7dYJtzdv7kmrVJ4boL126ZKQbpgOQ8g0A1Go1KKXMilL+\nuJvNZkAGkbAXGvmiclyfc0kfcSUB37E2SfMaLJ7iu3ZYxIurnfa1+H80GqHT6RgnJ3DsH5HpB/hf\nOk7tUE9XGxnZU6vVcOnSJQDAhQsXoJTChQsXUCqVzPHPPPOMkeC63S4ODg5Mm7SeLOiyB/E4Uk1S\nSR+IR+av+/yTKdnPiTD55jRgyzgysmaVq2QTQfS0AqnFM0Uvk27xh84l89ls1tSTBRCp10eRrv1a\nbosijVmdt/NE+4RdOyzk06fR93o9MzgCE6cnC6TL9AeM0OFKXu6jH8GVGZIDgqzTWygUUKlUDMlz\nJtZsNtHv99Hv981MQ4aVcnbjC9t0IckkL2Fb8779KeHPDhfZu/T5r/7adD6c5/zaclbS2tY9cEZT\nICwTLMYtFw0x7wun9QBMMjAgmAiLlmSY3OGSZlwIW3wUBpcjlERsDzRxHMF2RE1UHPssIZjD4TCQ\n7ItEPxwOA0nNZIhjPp83x5OUO50Oer3elKXf7XZx5coV811xcM7n8ygWiyaMk4u2GEHlm5HF6etZ\nIXiJP/uaGyIJP8V8iHK8ukhebl8W4ScFiSB6rohkuB+tS+ZdobVO2SGXyxlLkMcD/tWbfO3Syl2f\nc22TpB0H80R9SJlJts03W/ANbFHhliR1fj6bzZrtsgwffSSMsZdF2ovFInK5nJFY5Ll7vR6uXr1q\n2jAajdDtdlEul7G3txeYqcmBzF6V65Lc7DDZs0jwwLGlzv824aeW/Grx1V97uZPsDz/5+VCdPqlI\no25SpEiRYs2RGIv+8uXLgdJ51IEZAcJt3W7XaPS06O0FRmEatQ2fLEI5SH7W5YScRTKJAq9pZ7Uc\njUbOVbNhkk2Ur0Jaz3ZKZG5nPh4uWpPOW2By32WUDtvHSlX8Tvr9Pq5evYpyuRxIj8yUC+yLD3Y6\nCN+MJYnROLufKcSyzlML/uwgjlWftEVUiSD6w8NDNBqNQLgfZQRJbswRw9WX1Ix95eLiRGLYUoAk\n21KpZNokHZC2ljwrmbgIia9ZP1bq20wj3G63TT3UeeFz3srXvK/dbhfNZhNKqUCRlPF4bFa6ugZT\nFoGRpR6bzeaUE51E75JoGO1D2GGWYYO2b3+K1eNLv/myqW23/fL9K2hJOKI0ehK5TfhJI3giEUSv\n9aQUYFSkio9gfdr5PCtYAQTIlnr1cDg0ZBuWomARgiHRl0olbG9vA5jEoGut0Wg0cPXqVRwcHBii\nXORatu4tQVJlmgZq8rwX1PhHo5EZFNl+6VjlTOHw8NB8vxy8ud12NnMmw8RrwLHzl22apw5simP8\n8WMfmtr2+ptfsYKWTEDyP03CJ5EvGnkzD7H3/2UwIqj4lyefdC0RRA/MnrzL56QMC3MMk3LkcSRb\nlvsDJuTHKBFZ05WERvKKE0UT1i9gYs1KwmO4KfPQkEApXc07oEVJHbTKh8MhcrlcoBYvQ10ZmcPj\nO52OSaMg75E8v+1E5veZzWZRr9cBTGLvq9UqstmsWVgFTAqSsDjLIjObFEH88WMfWinZrwouUn/N\nZ/adx/71120tdC2b4O3tJ0n4y6gZmwXwUQBPaK2/Ryl1G4B3ALgA4GMAXq+1HoSdg4gbwhiX5F2f\ndV3LRXiZTAblchmbm5sAYKJRlJqU/ONnKEVQVvGtgo3bZ/oeaMGORiND9MxVT18G8+XMill0fQ5i\n0meRyWRQrVZRLBZRr9dNe0ajEfb393FwcBAo4UdphgnKSNBSBqM1T6Lf3NzE5uYmSqVSwE/TbrdN\n6mIJOZjIvswT/UQs89k+C/jjxz6ED/eC9c7fesfzTu36X/rNlyVSxiFe85n9ucneR/KnhWVE3fws\ngM+J9/8ewFu01s8DsAfgjUu4RooUq0D6bKdYCyxaHPwmAP8SwG8A+N/UxHz6DgA/fHTI2wH8GoC3\nxjjX1GvbGlvGVD3KAqaTdzgcBqzGfD5vJAo7XUG73Tb6Oa3PMIery2HIBWAs0L23t2eOp06/DH3a\npc37Vtj6+sG4+0KhENDS5X0BYGYlSilT8KRQKJj72mq1TJZKpSZZLzk7KJVKKJfLyOfzgVW2rrQO\ncrvd1nnv1TKf7aTh9Te/wqnTu/CvH35kqVb9bb98v9Mhy31Jh8uqf9fj7na/9iZ3P1eBRaWb/wTg\nFwDUj95fALCvtWa83uMAbow6iVwgBEw08nK5bMrsSU2aBCzDA+NII1FTeHkOLvBpNBrG0cg8O/l8\n3vwBMNE5Mp+7bHPY4iWXnETphpr0cDhEo9FANptFr9cLSCJx4boHUWQut7sik9jf4XBo/Bj5fB71\net30QUouxWIRW1tbJkEdABwcHARSF8uQ2VarZa7ZbrdN7n4ZzRPmUF6Cs3Ypz7YP3btfDAAov/cf\nF2jicmHLNsRJkD2xCkdsFP7667a8Ov0seNfj9xuyL/7lgyuVb+YmeqXU9wB4Vmv9MaXUK+f4/D0A\n7jl6HSD7YrGIzc1NbGxsGCckcFzyjmXv7PhvwhdDzmuFHQcc6+77+/vmGOZhsUMNuXq0Xq+j1WoZ\nK1au+nT0faoNkkxlCCJXAzOklNEuYe2X55b3NYzQffq2azBlFE2z2QzUni2VSkZrz+fzRtPnLITa\nPmcAtVoNxWIRSikzGyKha61xcHBgZjKdTsd8DzLkNuy7nhfLfLZLqEztJ8nbr4HTI36X4/VfP/zI\nqVxbIkkEfxKQZO9D0qNuXgHge5VS3w2gBGADwG8D2FJK5Y4sn5sAPOH6sNb6XgD3AkChUNDFYtGk\nOuAiHaYolrHsjUYDV65cwe7u7hSpxkGc4xgH3mw2Dam2Wi1T05UOUgBmIVE2mzX/genl+z6ZxDUQ\nyNkKo15cC53s8/gijuI4ucNmHjY44Mg00cCkShZnHtLyZlqETqeDbrdriL5arZqBrNfrmdKKwOS7\npkQ0Go3MsyFlnLD+LIilPdsbamemUad794tXZuW/9Y7nrYTsk4hZrPrX3vQyr3wjcRqE7sPcRK+1\n/iUAvwQAR1bPv9Va/4hS6s8B/AAm0QlvAPDeqHNls1lUKpVADhSuij08PDTEwILWJA0STFgyMxs+\ni97eTquVs4ler2dytss4ekoNMkkYzyfPKVeVksBkiKBN4PK1L5fPvIjSu+3jXJ8neWutzffQarVM\nlksuLgOOI4n29vYCyehYPpH3BECA0OX1XPcmDIto9Mt8tlOcXUgtnqS/aIjlqnASuW5+ERPn1SOY\n6Jq/fwLXSJFiFUif7RRnEktZMKW1/iCADx69/iKAF4cdb4Mx1rR6mSuFeV6YDqBcLhuHp4zr5jl8\nMes+q85l9UmphRIF26SUMpYqt7fbbRNbL2cAttUsF0BJJzNnBHRsuhYT2f3wRfHYfbD76TvfPGDc\nOiOBAJjvkBa/9CVordFqtUy/AZjvVdaHlZFVcSKBorDoLGjRZ9uF8nv/cUqbTwqk05UyTlxHbOf7\nXxJ4X3n3A8tr2IoRZclTh48j4awCagnRCQujVCrpS5cuGc2dC4+KxaIJswMmjk+tJ2lxGZoHwLsq\n1Z7yx4EvkoMDi0zyxTZxERDJ2r42UyoAk4VA5XIZuVzORPcAMPo1ncx2jneJRchr2d+3PaCESWOM\nWpJSXCaTMQXf7YiisMgg2/cR1q6j+7mSauEbake/RL3Ku39VzthlwiZ4F9aJ9OOAhH/SIZYP6PvQ\n0LuRz3YiUiBQD5eaLrdzWT2AQFItGcoY58dOzOKYdMWXU0vntaWWbOdTl+dkOCbTBtCpy0GsUqmg\n0WgYYg/Txxch/jBylNeIe26fru9y7nKGJJOdcZC0k8Wxn2HfYZzvfVl+jZPCWST2edD5/pecK7JP\nUgw9kCCil9actGYZdQIEpRbbSSktvFl/6GHE6SIrO9TQd5wEHZaUfpjWgDODTCaD4XBonMyyr/br\nOPJUWL+jyH5WcowKIZWDJqNogGM5TA5uNonPOgPhzEtG9ly5cmWmc6SYDSTwOJZ9isWhX/ZNx28+\nES8BW2KIXobNRU3LbURFZJykhefS921wIAOO66WWy2UUCgUzS5FZHe3z2phl8PKFXc5yf6PaYUcX\nycgitoUDsz3riRMxFWftgzy+sIqEAAAgAElEQVS2Wq3iwoULAICdnR1zz1OcLCrvfiAl+xNGgORn\nQFphKkWKFCnWHImw6AG/vg34Fwb5ok98x0vEiUpxvXedxzWTkG2U8lO73TaLhGQmSlr9YYVFZo0q\n8u3zzTzmgXTA5nI5VKtVbGxsmMgiAGZNRK/XQ7fbNfeCkTthur6rD76FaIzeqlQqJp//tddei0ce\nSRcBnRZ8Ms466PPZS5dC948vXz6llsyOxBC9DZ8zLs5gQNiavSQluYJVft63ytY1uMRth3Te0unc\n7/cDC4WoXdNZGUV+rv7NIsXIwWke0pf3kmGutVoN11xzjcklTzC6qNVqYW9vz6Q5YDoDVxui5Jqw\neyJDb2UO/RSnh3UgdokokucxSSX7RBG9L67d3h/1I3cdp7U2OeaB49A+kqVMnMZ4eJ+DcxaL2LY8\nZYlE4JgkpY5tzxCiBjdXe8LWCNjHLAKllJmVVCoV1Ot1bG5umiRwwKSPh4eHaLfbqFQq5vi9vT1z\nr8P67ZvF+QbVXq9nksJx7cN5wJPvuSt0/w3f99lTasn5BQeEpBF+ooh+Ecg6ryQSEgQrM2UyGbNI\nhwuXuMCHC5c6nQ6azeZU8iwfKUbNPFwhmkod12WNUws1DHEsfyJsgPS13Xdu2wHLbZlMxkQT8ZhC\noYBCoTAl6WSzWTQaDfR6vamqVLId9vXsWZrcfnh4GChA3u12zw3RR+HJ99yVkv0p4aQIX93/ibkc\nsokh+nkiQOSPPJfLoVarYWNjw6xC5QIn5loZjUZmX6VSMaXqAJhYfa7GtfPR222M0vJ9JMV9ccg0\nCnHuWZxzukIhw65jE63M+9PtdtHpdEypQWC6NCIjYsbjMTKZDJrNJrTWgYpZYZKUT8fnoDocDs0q\n3G63681yepbwfZ8NJ4z33BUtLaQ4fZyEnKPu/8TxG92N9Zk06iZFihQp1hyJsejjwGf1UjKwi1VT\nh6c002w2AykKgGPZQa5cZSHseRZbxdWSfdE6syBqNuBaQOZrK61uGdvP9rHilsxdIxeK8XW328XV\nq1cxHo/RbDaxtTXJD0JJhrH1XMxUr9dNRFKv1wusMpbt97Xd5W/g8WyrveJ2XfF9n72M99w1kWWi\ntPrzii++eXq16nPfFC83zfjy5VgO2aQiMUQfJyTSPk4ezz9qwcBkURJD7phDhguXWq0WhsMhisWi\nSa0LTCQcO/KF1503wsXVXttJG6fvYecJO8a3XUYglctlVKvVQFGVbDZrZC9Z/EMWR5ekz8Ihw+HQ\nFPEGYNIW5/P5qaIqYYVUZnkGlvXdnGVQ3nnPXZ9NyV7ARfD2vjiEf5bJPjFET8ubcFnEYZYp8+XI\nVApKqUDSseFwaBxz3W4X7XbbVELiNQaDQSDqZlbSiKO5u/rpC3eMipGPs07At4//6cSm34LaerFY\nNLmGer2eIXRayTKSiOCAKksJ9vt91Go15HI5k78IOE7kxtj6uJZ3nLULcaKWzhLec9elmXT61Ok6\nG+ISPvX2uISflOibxBC97QT0/Th9xDYej9Hr9XBwcGCibkajEYrFIkajERqNhommASYko7WeirNm\ngi1fJaO4TtNZwi/DPhdm/bs+H9XOsHZls9lAdkm5mGs8HgcsfVeRci6AoiObAy4tfRK9TAjHjJ82\n0ftmUPYgNcs9SZFiWZAE7iL9pBA8sRDRK6W2APzfAL4egAbw4wC+AOCdAG4F8GUAr9Va70WcB4VC\nwRkq56oP6ooKoaXYaDQMYXQ6HUMulB4oP3AFqu9cJJpZrexZEFeuilo/EDV7iGo7s4H2er1ArVdm\n2KSGHqdWrbTyablzEGYf+f0wft4VQ2+fzxdeKTGL7BWFZT3by4S02G3rPo268eO5b7o/VL7hMfMi\naaTuwqJRN78N4G+01l8D4JsAfA7AmwDcp7W+A8B9R+9TpDhrSJ/tFGuDuQuPKKU2AXwcwHO1OIlS\n6gsAXqm1fkopdT2AD2qtnx92rnw+ry9duhSoGEVrXhbzCNPNKf3I1L/MJaO1Ng5BuVDJZ0HOqu/O\nY0lGLVKKe42oa4d9hvebETfFYhHlctlIN5RqZJ4avndJN76+yW2u+2vLNGFtD9tuX4c4amvsRQrL\nfLajCo+kOF0sEnmTRJxG4ZHbAFwG8AdKqW8C8DEAPwvgWq31U0fHPA3g2qgTccWq1MuplbMQOHCc\nM8YXbUJCJ5mPRiMTJin/eE0p09iIq8VHkY6tr89K5FHXiaPRR2n1vG8kfkouPIYri7mdJM/BQoao\nyuLfMsQxrAqYr40rxNKe7dGlKp79wZc7913zu/FyiadYHs4yqS+CRYg+B+BbAPy01voBpdRvw5rK\naq21UsrJREqpewDcA0ycfjJ1wdFnjSUvCYbE7NJsSRoknlwuh3w+H9CdpUUvrfwoP4BPI44iqCgr\ndVanbdzjXe2z2y1nPsVi0cTQ81oyekY6VwkW+KhUKuY8HFjt6Bq7TKDs0zKwjHUJAkt7tvO17WW0\nx4tf/9KD5vWv3PaiE73WecT4ld8Suj/7wX86pZYshkWI/nEAj2utmabuLzD5MTyjlLpeTG+fdX1Y\na30vgHsBoFwua7lAida2nfjLF4FBcOEPwwMrlQqKxWIghJKOQIZbsk6rvZBKntPGrNZnHEvdDssM\nczy75Im4kUA8rlAomLw/lUrFSDasZQtMQlD39/eN49ruR6FQQL1eD5xHzgIYR897HZaKehZIUj+h\n2PmlPduVa24+kRAgSfC+bSnxA7mbb/LuGz32eOhno0j+LGFuotdaP62Uekwp9Xyt9RcAvArAZ4/+\n3gDgzUf/3xvnfDKhFbMdUp+3qxC5SI0/eoYIAhMikpWc5OAxHo9NsXGZ18bOke7pe+B9GMnGJSCf\nX2DJBGbuUaVSCRA0F0vl8/nACtV2ux3wncjz5PN5sxoZgMlYyXsqZ1j2OgmeY9b7I++177V9/BwD\n81Kf7RSnjzCCP49YNI7+pwH8iVKqAOCLAH4Mk0iedyml3gjgKwBeG3USprCVsgKX3ff7/UChChd8\nMgtJn4umbMnHlQt9XpLnbEKeyxWmOa90E9auWQcekjQTjVG2YQI4rh52yS32uVwyFoleWvR2jv04\n/fD1KWzA56Ain4F2u+09bwiW8mznLk9fO9XmU5w2FiJ6rfXHAXyrY1caZpDiTCN9tlOsExKxMvbw\n8BCtVmvKGqbDlJpxHI1Xlu3r9/tmwRSlG84KuAjI1p/jRLEAx9YkHb65XM5YxTxezkikb2ARuGYf\nLnnCFTUk33MhFF9zpTDvCwDjv/CFUtLHwYpR8nwyN45vsdW8spRrdkPnMmcndDRnMhnTn1XhJCz4\nX7ntRU6dXu5fJr7868GwxFt/5WxGr0Tp8hLZD/6TV6dfhRP25x753NS2n707XpriuePol4lsNqup\n8xIkZVdysTBQlgCOJYl8Pm9CN2W+Fi69Z1w4zx8l3UiHb7lcNn4AeR2tJ5WO2u02Wq2WiUCRg80s\niOMH8EUi2Z9lrnhW25IFWOQAwFqvXMFqO4ztlAmUyBihQ+lGniOs/bPcC3uAKxaLqFQqKJVKJgMp\n8eijj6Lb7a4kfvMsx9Hb5G7jLJC91OpnIfkkwUXwxM/e/Sge/lT0s50Ii15rPVUFSFptcYhAHkNd\nmZakjKXncXLG4Fs85QItR5JkvV5HuVxGsVg0mTDZnm63a9IvyFmJz5kcp4+uiJyoEE77eDq6ZcEQ\nnleGUdoL1OR5pYNcRkcxtFLmtJllYItyusptclBnUfJKpRJIp8EBKcX5xFkldyCc4GdFIogemCZA\nlxVvT9l9ZCBJiOd1kaEdzWO/tiEdfLL4dLFYRKlUChCMXCBkO2l9jtU4DtdZrF8f4bN9UsaSx4R9\nzm6rbanbg2ncfvE4+xr2dtv5K2dvtVrN1KSNWgGdIsV5QmKIHvATir3ftzjGZyn7rGj5OfvcPtmD\nFistdKY11loH8rRTv6YsJAcV3yBmX9/XVu6zC4v7BkT7WnY7wohYXs93f6MGyrgDh+saYe/tCCqp\nxcvV0WGRQylSJBVved7XAliOZZ+WEkyRIkWKNUeiLHofXKsfZ1kEQ6vUJw1FXdcGdXceMxqNkMvl\nApYxE7Lxz861HmYlu6xYrbXxDTD+XeZ3t5O/uSKJfBKIb2bEmHRKVVKWoiRi98v12r6m77quNkSt\na5CVwQ4PD42UI7+H81BK8CSwCmfrd3xqet3Bf/uG6qm3I0mwLXu+B4Bn9JOxznGmiF5KFXGO52cY\nAinzuJCsZE70KEiJRKYJGAwGAScscOzslaQ4D6RfoFKpYHt72ziCubKXET6tVgvAZDUrK0K5SNwV\nKipJmH3hilmmRuC5Op0OWq0Wer1eZISSqy+u97Psk5DFTcbjsRlwpQM21eiTDxfBy30nQfbqm7/O\nuV3/82eWfq1lQBL8rEgM0bscrZlMxqxsBSZkxzj5sKLPJIZ8Ph9Y3i9//Ey9y3J2MirG1R7bApaE\nPhqNpqxUO1olKhLGdx8IphIulUqm6LZM1tbr9UxIIaOJ7GLbYY5s+cckZRcvXsTOzg62trZQLBYN\nqV69ehVPPfVU6CAWd8bliiKK+3nbAU+CZ44jYHLf9vZOrTbIqSL7dzeE7h9/ezxr7yyAA8GyCN9H\n8knGj33hK1PbHv3+fqzPJobogekfOpNm0YKlVMHc6HS+yQU90pqrVqvY2dnB5uYmarWasYCBSUhh\nu93G/v4+AARSIcs2+GQPeYwrP07cSB4f4cv9doQLP8OBkAvCZH55n9zlI2U586nX6wCAzc1NXLhw\nATs7OyiVSgEH5+7u7pRcFQVfH125dMI+43PQszD8xsaG6UOhUMBjjz0Wq32njcZf3+7cvvGaRyM/\nG0XyPOaskP1/+4ZqqFV/3uEi+VmQWKKnBVsul7GxsQFgEkKnlDKWOFdkttvtQBItWraVSgX1eh0X\nL17E1tYWCoWCIatut4tSqWSiZWTZO4koEguz2uN8Xh4XFi1Dv0Cj0TDHUFJhXDwHK7t4tyRDl9Wc\nz+fNwq9yuYxqdWI1bWxsmMVQg8HA5Ixpt9tebT6qz3Igtknc1WZXBJLLxyFnPPV63cx6crncmYuj\nb/z17bHIPg5Ssgd+76v/4Ng62XbP3f9LYGtSZZtFkUbdpEiRIsWaI1EWPWHHblOj52IYLk6i1cdY\nabsoCeWIUqmEarWKfD4fWMjU6/WM5CGtzDiLe6K2x4lqsV+HgTMP4LgQi51+mZo8s06G+QGkZV0u\nl1Gr1VCv143zFZjMoA4PD9HtdjEcDo3Mtbu7i1arFVg3EHYvgGOZiSkKAASc45yVUI6TMzR7HYTr\nO5IzKpkSOazkYZJBWWdRy/6sWPPEaUfY3Pve/wsA8BPP+baFz5U5+t24cLhgvqU/eP4tC8k3iSR6\nACayRdYqJbFRaqBUkcvlTA574Nih2u/30ev10O/3AylzAZgcN/1+fyoEL04YZxS5h4VP+s4tU+za\nq3alfENC5yBFkpP9l05l2Rb5R6KXOWskEWcyGbPwq91u4+rVqwCA/f19I5e5chG5BpZcLod6vR6Q\ng+zBWvpM6OS2pRzf/dN6kkaj1Wohm82aASOTyRhHe4oUJ4Uwkuf+Rcl+ESxE9EqpnwPwPwPQAD6F\nSc7u6wG8A8AFTGptvl5rPfCe5AiuHzKzKsoygCyOwdhx0ZaABQhMLNv9/X1ks1n0+31DYMBEoz84\nOECz2TRk72uH6xrSWrfDE+0+uSKK7NeMEGKMPInKHogksY7H4wDRu9qbzWadeec5C+Bxw+HQDJyy\nZiwt7Xa7jWazCWDiuKbFHcfpTKLnzGFzcxPAMdFzdsXwSHnPwmZD9qxpOByi1WphOByaWSAHq1mx\nzGfbB2mt+xyzPoy//clYDtmkYO8NxwnStt++/Pj80QeeY17nvvOrgX3LsNaTgD94/i0Ago7ZK58u\n+g4PYO7slUqpGzHxaNylte4qpd4F4K8AfDeAd2ut36GU+i8APqG1fmvYuTKZjGbmQ2u7ySUDwEg2\njOkmITECxy4kImUbflYWwOZsgbHwQNAZ67JOAX+SLp/j0AUex4iijY0NbG5uGgcxY+IPDg7Qbre9\n1m1YJE0ul0OlUjHO7FqtZhZcUZIBgGaziW63awYGm2yZ5VMOPrJAuM/qlhJasVjE1tYWdnZ2THvY\njvF4jHa7jYODA+NgJ2HPInsxekhGIAFAo9HAaDSKvcJumc/2rNkr53HEugg/SZKNJHmJRQlfkrsP\nNumfFKIs+pOy5h/Q96Ghd088e2UOQFkpNQRQAfAUgO8A8MNH+98O4NcAhP4YADdJ0HqVcgtlGqXU\nVD4T+xyj0cjoy1wwRXKgNMC/WWLBw8jVfu06Vg5EjHDZ2dkxYYyHh4dG3qCEJbNBhrWLn8lkMiiX\nywFi3dzcRLVaNQMnif7pp5824ab8LMH7z9h8YDqrpYQreoizB1YR44DBAZspjXu9ntln+xhcEUT2\nwMrnRa5r4PY5sLRnexbMo8knidQlfAQv989L9nFInsedFtn7sErJhpg76kZr/QSA/wDgq5j8CA4w\nmc7ua60pij4O4MZFG5kixWkifbZTrBvmtuiVUtsA7gZwG4B9AH8O4NUzfP4eAPfIbS6nnrQcuSqW\nWrhLMrBfy4gUX/SJXN7P412yhE+j5z45Y7D32+3TWgdkEq4ZqFQqAQuUPgZfBI9sm+xXJpNBqVQK\nSDebm5uBXDm03CmbjUajqboAsr32/Y47C+L3xntLX4BvdgUcW/RhzmzfvfDNNuJimc92CZW525Hi\n7CAJVnsYFpFuvhPAl7TWlwFAKfVuAK8AsKWUyh1ZPjcBeML1Ya31vQDuBSYafZi+Lck1TjSL6xyc\n1pPcZNk5uWKWpMNkZHEqT9GPUCwWA05Ayh52WmNZ7Jyv6Wfg522fQRSBhfkCeE6uZKUMQz8A/Rts\nq0vqsB3NYdd1bSNxj0ajqZWwsm+uz7rSTEcRufQPhK289WBpz/aG2llZbOdD906XE7zzHn/5wTA8\n+lt+Geb2n09+panzjkWI/qsAXqqUqgDoYlI0+aMA/g7AD2ASnfAGAO9dtJESYVaea7tt6fJ9sVg0\nenWpVAokJWNYZ6vVMqtBaZHa+jNXZNbrddRqNaN/S/3ZdnzyfDILpnRCAsf6OatkuRKU2ffC1q/7\n/T5arVYg2iibzRpN/ODgwFyb15HOaM52uLqU17Irc7l8EGGEPU/FqThwGQG5XG5qlhIDK3m2lwkX\nycvtsxB+GMnL/TbhU3+P0urnQe47v5ooZ2zSMTfRa60fUEr9BYB/AjAC8M+YWDF/CeAdSqn/42jb\n78c5n2tBjI8wjq7vJXHbmpNSD/dRNqFcQjkDgCHmTCYTKIfnIzWSIROoAcd1WEmqMtpHFiMh0TOK\niFWqOAPgGoBZHYrMCXRwcGDO1Wg0zHoDxscDMJFHDNfkDIBx9Yx0kn1otVomNTAHSZ5bLmCzv7Mw\nxJ2lhR1vRw6Vy+WZiX7Zz3YS8dC9L5rbuvfh0d96mdO6lw7XRRywNmwSJ/HHIffmD73Uu6/+jo8s\n1rAEYqGoG631rwL4VWvzFwG8eNZzufRz13a53xWOSa0bmPzIZeKtwWBgyA04LhAuozRI0PwcyS1M\nIye5SekFwFRBctlutknWtx0Oh1MLpny55W3IQYySERchUR5i1IvUxHkf2I5CoWDi3GVYqgx/7XQ6\nxscgC6XncjmMRiM0m83AdW2/hrwXPv+K7EucAYADLnP1MANntVo1s6VZsMxne5kYfucLvfvyH/jY\nKbZkPpxEDD2xKMFLXPrwlnP75Zfvz9SmZePh33lJcMNP3xfrc2mumxQpUqRYcyQmBUKc2HTfNlre\nTEu8s7MDYLJAiJLMcDhEs9nE7u4uAJjCGVxhy+NouXIxlZRupGUtLU65qpRSDOP2ARj5Bgg6Pvl5\nnn88HkdG17jgizHndWi5+2rMcptSk1S/tIYZd0/Zhhb6YDAw6QyYOoHnlxk0ZYFu2S4brj7H0eal\nc71UKmFzcxPb29uB1NalUgkPPfRQ5LnOAsKsebk//4GPGVnGp9XPItvc/vP3R+r0PG4d4LPmuW8V\nVv2UJT8jEkP0Lu3bfi1/2HI7CWprawuXLl3CpUuXAEyIigUz+v0+SqXS1Gpa5ruReV8AmJBMErSv\n0IkkzfF4bKQh6R+ggxdAoGiKjCaJkmbi3jdX24iw1MKAP/cOMLlfMmd/pVJBNpsNOKBJ6M1m0xlq\n6mrfPPtkeznIXLhwAdvb21NEL30LZxlRJO/DsnT4dSHxKDz3Zz6/6iZMIYzk+zfHSwKXGKKXkDHp\nYaF48ngmOqvVaiYX+fb2NrLZrFlRK/PmAMdkPhgMpkhJlgKU17Vj++V7aZHbPgQ7zNPuxyKE5/rM\nLNvlfpl3XikVyH/DgYIOY0Yr8R71+310Op2pGrkSvgHcNdCH+Wc46JPQ6/W6mYGUSiXjKwmrRJbi\n/IGOVlurNw7Yn/Fb88DpavSLWvESiSJ6krAMfZTRMCQhOw0viYIORllHVCmFwWCARqOB/f19Y3Hb\nqY1doYu+7a73sxBylCzjIsN54JslhW1nRA0wuX8kTBl2mc/nUa1WTVoDmS203W6j3W5jMBgE7o3M\nQcPtUhaLCyn/SEOAkU92umMmYEsSHvuLr5/advMPfHoFLTm/8EXWXH75fmIdsS4UH4tXqCUxRM9I\nF2CS4OvixYvY3NxEpVIxssfe3p7RxO38NIz2uHLliiGOSqVitGUmzSKJMSukTehhOrFPY44KBY0D\ne0Yx67lc1w9b4OQamBitI3PCuwqy5/N5k1lUWvScHclFYcBxvvtqtYpCoWBmCQcHB4EC43Hvt2wv\nr9NqtUzUlVyIxvUBSYGL5Lk9jOzzH/hYpHxzFqJuzgJmJfTy/3eted39F88srR13/MwDAKYte24H\ngAcQD2dfvEyRIkWKFKFIjEUPHNd6ZQTFNddcg3K5HLAwG41GYBUr/3MB0P7+vrHm5OIj6scyOkZG\n0tiWtIx1l3BZ3PPKK761A3HPKds4j5bvgoztd1V24nZXhJBMo5DJZEw8/nXXXYeLFy+agt2MfHrs\nscewu7trrHrXDCMs1l5rbZ6Nvb09dLvdQMUtYPLM2HWAzyrCrPrUml8NpDUv35+EZb8IEkX00mHJ\nHOhyCbvUfSVIeHJFJCFXgXY6nUAaXF8B7TgIk0XCjrFX6LoWBoVFxMhCIgwFpVQi8/LM0m7bwWz3\nyf6MryKXHBhqtRpuueUWAMBznvMcXLx4ERsbGxgMBuY72t/fN4VfoqQn1z7q8bx2r9cL5BgK6/NZ\nw299mZrytLb887fGWwR0FqBe9A2B9/rBT62oJX7Y5O47ZplkvygSRfS0vDqdDq5evYrhcBgIiWSB\nDBKaHV7J6kVMQ1AoFExOejoaZcqBODp4GNmEHWtvi7PSl9ewSY9Ox1KpZOq6AhOiPzw8RLvdRqPR\nMI5m6XuIMyDFRdxQzXw+j42NDRPmypDXYrGIZrPpjbwJu6Y9ELscuq6+claXFNz8A5/26vQ+HJO8\nf/9ZJ3ub4OX2JJL9WUNiiF5Ot0nMjG+XUTSS6AlGdHDxjqxgxKIjXNREa5JpD2YhvTjHu2LR8/m8\nuS6TnXGmYYdv2uchWVerVRMnLomegyBr4wKYkqOiYMshYYOOfbwLdKzLNMiZTAbtdhtXrlwx0o1r\n0I6KSLLbKLf55LRFnOQngZOIsEkC2T/6py/A7T/88Zk/5yP5FMtDYogeOP5BMg6bU3q5itSuPMT/\nUhIhqTIWn3q8LZnEkUrmJQnG9lerVdRqNbPalCmRGfIpo4B81nw+nzfrAy5cuGCIXlZ9suPOfQTt\nIkA7ZNElY7l0cpePgZ/v9XqG0MvlMhqNBjqdDq5cuYJnn30WwHS5QN+9nsUit+/hOsTR//ytL420\n6leBR//0BaHb5iH9dUGSZBsgjbpJkSJFirVHYix623rk4ifXFN3+TC6XQ6FQQLFYNBkUCcbQM25e\nSiXyPHHkiTiyDduUz+exs7OD7e1tVCoVE3HC7Ji9Xg+XL18OZKl0pdOlk1mmI5Ax4pQ/4sgWYatv\n5f8oS97VRtl/rTXa7TaefvppABOJhjJTu902Ofnb7fZU/vtF/Cby/oetuj2LeH4+G3j/hWEwkui0\nZRuXNT8v9IOfcso3mYNJhFzSYqa6/+KZKYds0ix4G4khesD9Aw6TG2TOcZbIk1IPF+8wpzvJnueJ\nQwJxSYJtJBlXKhVsbW1ha2sLtVrN+A1KpZJJ/tXr9bC/P1mc0el0Am2X56WMxRwylG601sYHwD8A\nU2GjcXVvV59mGdzkufr9Pvb29kzfmKteOsRdhUuitPW4kpqMBDrrRP++J6bz1Uji/94b3YnLTgpx\nSZ7HxZFwSOouZO+8HeOHZi+afpJIOrHbiJRulFJvU0o9q5T6tNi2o5T6W6XUw0f/t4+2K6XU7yil\nHlFKfVIp9S2LNI4kIEvcSaInubGMHy1fHsuwSiYwo/PTVxlJXnMeS5DRMVyhWSwWUavVTKKter2O\nQqEQIL0494DJ0ricXyZEKxaLZsZQq9VMxk5ftI2vXyRs+RfWT1cUkbTo2b/BYIBOp4NmsxnIGMoB\nl2UY6bCVbfXdDzvzp90O+/iQfqzs2Y4LF8mfR2TvvB3ZO29fdTPOLOJY9H8I4D8D+COx7U0A7tNa\nv1kp9aaj978I4DUA7jj6ewmAtx79j4V5iJX/+cdiIsBx7pVWq4XBYOBMD8zXPqKI6wi0LU1Ze5XO\nSQCmQMne3h6azeZUbViXFc1Uw1yoRGmK5FitVpHJZMx2ZuXktX2zo1n76nK+yv8y+skmbtbh1Vqb\nBW8cpJRSZlCW1v48JQdncdziFJ/tk8JpW/OzYB2dsU//3Muntl33lg87j+2+/zbzuvxdXzqxNsVB\nJNFrrf9eKXWrtfluAK88ev12AB/E5MdwN4A/0pNf3UeUUltKqeu11k9FXcdOPyyJ047ZtmOoGXZ5\neHiIVqtljmea4W63a0mwTnwAABXTSURBVIheQkbqyG2zwiU3sCarUiqQNZM5YjgAcaWuK5pIQpK1\nHEA4g5DhqfLYOKGJcfvm2s7ZC3BcepC+EvaZpRmZAE3mu69UKtBao9vtYnd31wxW8rvyhZ3a7ZH9\njdPH03q2F8H33vgip1W/SoK//Yc/HinfrAvJu4g9DJLck4R5o26uFQ/40wDombgRwGPiuMePtqVI\ncVaQPtsp1g4LO2O11lopNbO3Syl1D4B7jl6b+q7Acfw7rVRO56lPH103IFXQagSOV23KVAp2ZIpo\nRyytNy5si55ZNWndsj/8k0v4w87J2Hs6bXk/gONZgu3kdPXV9drn8I76PFfr0tFcq9VMLnguDAOO\n10XQp0BnssxOuru7a4qXu+6nrx2u7ctyvi7j2S6hsnA7kijP+Kz6eS358UOPhmrwq3DGzmLNJ9WS\nJ+Yl+mc4bVVKXQ/g2aPtTwC4WRx309G2KWit7wVwLwAUi0W9s7NjiF6mxiV58b0siyelAeq/UtqQ\nTlzC5UT0wXVMVCSKJBumyJXVlmRBEzunvvxvn5O5XNTRAjDAXw1LylSyvT6ijxPp4pJKstksyuWy\nCR1legZKSZSlOECzcLccGAAYbd7nQwGOnwm7cpdLrvL1OSaW+myXbrhZP/YTfsK4+dfd+u5ZwLLl\nGRfZJy3axoWkkzwwP9G/D8AbALz56P97xfZ/o5R6ByaOqoM4GmY2m8XGxkbAopc/YpmfplAomD9p\nJfd6PUOs8kdPUnAhDhnYA4P933Z2ynP7HIq+6Bcf2fNYrvDl/ZADnawNa8emu1674LLsbYe3hOs9\nneH0jQAwEU+yrQBMiGmz2USj0UC/359KzMbwUZYrLBQKJoxUXkPO9uw+zYilPtuz4qaP1Ka2Pf7S\n1rIvk1gkidive8uHI636697yYeAt4WQf1xH7zM8cX+va31muARBJ9EqpP8PEOXVRKfU4gF/F5Efw\nLqXUGwF8BcBrjw7/KwDfDeARAB0APxanEZzSy2pSLGIxHo/NdqYSqFQqKBQKgTwve3t7JnWurDrE\nUEYSkLQYo6xzIGhJ5nI5I0uQ5CjFyDqwPL/8LxEV2sl74jrPYDBwJnWz5acwYnYNcFH3wTVgcCbF\nBVCcvXDxl8w6ym1ylqaUMnIUSV8OUiwVaBf7zufzGI/HaLVaziinuDiNZzsM0pp3EfxpQ+Wm6UAn\nqGjLKuCLqLFR/q4vOck+iuQludvbl0n2caJuXufZ9SrHsRrAT83aCP74pV7NhTXMYAlMasBubW2h\nWq1CKRXIRV4oFLCxsRGoVJXL5ZDNZo3sweyXAAKWf5jmy2szmoQWpYyiYc4aXxplV3/l/7BjZPs4\nOPE9Qxkp4chVtiyVGPca8jqu967zcHbBfUwTzOvbMwxuk6mk6UPhGgf2gYP/xsZGIGNnpVJBLpcz\nOXIoD0k5J64VfxrPtg8k+bgE//Dvhkdy3vFTi+Usd5E8t6+S7B/5428GADzv9f+8sjbExawhlD6S\nPwmkuW5SpEiRYs2RiBQI4/EYe3t7ActVSi20WBk9Q5mEFv1gMDCrULnKEoCRWVjEmjIOEG+qz+yT\nwMSSZMFyrsAFjh2JnCn4JBlfREhUxI+04BmzzlkG49V5f4jhcGh8FrZcJc+7aHSKnWrZngHYMxc6\njeW9cNXtZV+58IqrjIHjYiu8ftj9DNt2Wig81V7I4RpXn3/4d18ys1Xvs+JXCVrwYdvPgnWfNCTi\nmx6Px4GCFCRhm0CUUgFtVkaZkJSr1arRcyuVCrLZrAlxZDlBfiZsKb1SyiRL47k2NjZMegG5olUW\nvQhzqMaBLyook8mYwYxEXygUAguT5P0jIWp9XEBbSlVh0TVxUhHI/a7EZL7BzV60FiUtcWC37zfT\nKtjbXedIMkjktoQjCT5KtlkX+Ejeddy6k/2pO2NPA/poZaS9jWRByx2YWKu0YKkBHx4eolarYTwe\nm+pGAMyqS84OZAGQOBa2Hb5HXZ/L9YFJ1StpOcch+KhIGJdWns1mjSNa+g3kmgN5TUbASOetrz3y\nGvIeAce6uh0Kymu6ru0LGbUHAF87eCwdtVKLZ6jpYDAIFFvxraQ9K0hqZM1p6fNxSV4ef9bJnmRu\na/XLJnkgQUQvycgmAhmaZ8fVA8cRMdIxCBz/+GUeFUncUZkNWZWKYBy7TClMicROsRBGqK730tp2\nHUPJplKpBCJQGLNuSzSUl1zns53QXPhUq9VQLpfNQAJMpKlmsxlIKeyTvFwDgb3dvje+tgEwDtfh\ncBiYtUhLX7bJ5YidI47+3ECS+DpH3DzxJr/T88Y3r34dw0kQu41EED3hI0dJEAyhtPVgRtXIEM1C\noWC0/L29PbTb7cBUPyoEkgMMj+92u4boOTBxthAW4RK1klO+dhGfTBbGNQQATDF0qYEDxyGYnIHY\nFjVB8qzVatjZ2cHGxgY2NjbMQDIej9HpdPDss8+a/tvn8c1gwo6xj/dF90gfgEv/9+VAWjfc8VMP\nnLh8k4TImlkQ15oPI3nuTwLZnzQSRfQu2ERAcrMtRurw1G+BYNm+TqeDVqsVKKDNz9rXIyR5swiK\na0WmbzWni8jlAq44xCQHNbscokxolslkzGyn1+uh0+kYwpft4+dpxQOTsNVLly5hZ2cHW1tbxpnN\noi0cRF0pFmzZxvXfhj2jsN/bx8XR9aOuddYRRvaLhlamWH+k4ZUpUqRIseZIjEUf5aQDJlJMuVw2\nYYUEnY7D4RCNRsNY7TJ9LxdfyQgUlzVqt0WGY9rtdb0m7OgduYSfi4rYJp5DXkNq0pSLaKnLfufz\neeO7aLfbAGCscLliV56XbWKOmgsXLmBnZ8ckGeO9LRQKGI/HyGazgXw9cbT3MEva5YPwSS9xZwXr\ngod+/1untt35xo8CWF/L/Xmv/+eZ5Js4sk2UZHPekBiiB/xOOpIeiZ4hhnJ1KmuRspoUzyf/pPM1\nipTiTvl9AxQJmtkamcCrXC4jk8lgMBjg4OAArdYk2oLx5dTjOTDIdAuUp9g/roqlli0dxBxEJMkz\nhUM2m0WhUDBEzzKM3CfTO3DQsBOOxdXg42KZhC2/k7Mk3bhInttJ9knDC0I49+Me7s7edWfg/fiz\nDxny9hH+WY+wWTUSQ/S+H6drwRDj5Wl5MseKLB8IhDtc5yUAV14Zez//FwoF1Go1bG5uYnNzEwBM\n+oZOp4PRaGR0b/aBuV24UEs6lFnkXM5YJCnLtMW05KUWz6gazjA4+NCXQQc0z3NwcIDLly+j1WrF\nqrcb18oOc07Lc7gGY992+/1ZIvg4SCLZh5G8CzbBy+3jzz4EYH5Cz912S+D9Le+cJBb9yg+mJQOA\nBBE9ME0UdnSNzOEic9rQcmZIocxqSbgcf67XcSQkl9PQtcCJMxCm5wVgIlpowXNNAC35arWKra0t\nMzBQPuHiIFluj9e2o1D4P5PJoFKpYHt7GwCwsbGBSqViskHy/nERmlxMBkzWCBwcHJhZhE30sg32\n/fDdN1fElAuLOFeXseo3xelCkv0ssAnexi3vfMJL9uch2oZIDNHbESouMmBcOy1QWqpaTxZcjUYj\ns3RentPO/R51fb6Pa7GGDQx25AjbeXBwELCSgeNC2VLqyWazGAwGUwMegCkpyg6dLBaL2N7exs7O\nDgBga2vLZP7M5XImRLTRaGB/f99E6ciau3ZRctmnuJCrjF0JzWz/hO8eurbbz8lZ1uzvfONHvfJN\n0qz5JCCK5Ikb3/xho9mfJ3KXSKNuUqRIkWLNkQiLntILJReZdlc6ARldQmuYC4e4LP7w8NCkEwaO\nI1mkc9LnjJVyUZhzNmwlp719NBqh2+0GYtyB40Ip3W43sOpXzmRobQ8GA1NInKtv5f3wXZ+yzcbG\nRkC6kVa1XDlMZ7Ys/sEkcq4ZEe+ZL+JIa22+R85SyuWyySUPTKKD5CK2WZ3iYRLQWbXsabnTsrct\n+d0ff1ng/c7b7j+dhs0InyPWh1llm7jWPHGSlvzmP1yY2nbwbVdP7HrzIE7hkbcB+B4Az2qtv/5o\n228B+B8ADAA8CuDHtNb7R/t+CcAbAYwB/IzW+v1R18hkMtje3g5ILgyLlPlMGFlCp6vMO18qlVAo\nFMwKUp6XkSMHBweGsOJgnnA/SS5sI52u0p9Ax6nM/MiBodPpYH9/3+jlvAftdhvdbncqGZtLrmD0\nDu9LpTKpW1ooFMx1ZI3dRqNhiF6mcuBA4pJVonTwXC5n/BH1et0Ujcnn84GFV0wrEfc+2/fbdozP\nIt+cxrMNAJd/8mXO7Zf+i5+kowhebl8V2c9K5j7Mo80nBS6S5/YkkX0ci/4PAfxnAH8ktv0tgF/S\nWo+UUv8ewC8B+EWl1F0AfgjA1wG4AcAHlFJ3aq1D2TWbzWJzczNA0CQke4k/SVKSJ+uUMh8MtXvq\n0FpPkmIxkyUwXwx4lFVvf47WN1fVyuPt3CxKKWNZM3YdOB4wOCMJqzNrt0vWp2V7eO1Op4Pd3V0A\nE6JncXF7JS3PO0vUklIqUDScdWLpkB45ltvbg1bYQDJrZE0I8f8hTvjZHl2qevdd/smXhZI94SP5\ns4ZlEvroS1+JZdWPvvSVpV1TwkfwRJJIHohXYervlVK3Wtv+q3j7EQA/cPT6bgDv0Fr3AXxJKfUI\ngBcDCH2aM5lMIP0uLXFmhZRFw2X+cvl5pkbwZV+MCsObxaqMQzAkVMpKYcfJ67PPrnqwdlijTYw2\nSTJWn/eDkT7dbheNRsOUAGTEDUk+jjXtg1LKpIzmTIKvGVbKhV12QXCfk3sW56+8B/zvm8WdxrO9\nKNaF5E8bJ0XwQDTJJxHL0Oh/HMA7j17fiMmPg3j8aFsoGHMu9WnWHJXRHr6VmTLsUtYqZZy6JDEf\nfFpz2P4ozBKyyYFBFvmW4KBhSxX874pUoj+D/WbOf6b45cIr5sXxkbxPxrL7xjYwvl/6XDgraTab\nZpEYi7lHZcP0wSdZyRDbTCbjvJ8xsfCzvSh23nZ/KNknVaM/DZwkmc+LpFnyxEJRN0qpfwdgBOBP\n5vjsPUqpjyqlPrrADzFFihPB0p7tbnv5jUuRYkbMbdErpX4UE0fWq/Sx6fUEgJvFYTcdbZuC1vpe\nAPcCQK1W05lMxkSgdDod44SVUSBStpFTcnt1KZtD61ieJ44Wv0z4nIa+Y8PaFDXrsI9lamHeP1ad\nop+DM5+ooimuxWZh0FobC57Hc4YhU1T0+/1AdS5fH+P0mc5nlh2kXJXNZgMRT3GwzGf7+d9YmupQ\nHF1e4jxb7UnEwbddXWmkTeYodQkAqFY8W30uoldKvRrALwD4F1rrjtj1PgB/qpT6j5g4rO4A8I9R\n52PuFblQh1EmdLwCx85NKdkACETi0JELHBM9ZR1frhurb4H9ceQDF4lHnZ9YZLCx5Rr73NIZDCCQ\nA8iVu8bXpjAntO0b4EAiybXb7QauyeMLhUIgtHKee0GJplgsmoR3xWIxEHr77LPPxj7fsp9tAPhP\nv/BW8/o3nvuC2G1JkVysQqKRBD8r4oRX/hmAVwK4qJR6HMCvYhKJUATwt0c/2o9orX9Sa/0ZpdS7\nAHwWk2nvT0VFJRxdw+SqAWCW+tMadZGQJAbqvHQ2ymPsEEGfE9ZnpUYRt48EXU5B+zO+60rdO85M\nwLXPvgf2uZYxm/G1h6X+OBDTUc54epKwTOxmF0mJe32Z8K5UKhmyl6G6sgau9fkTf7ZTnA+8/BOD\nqW0f/qaC48j5sAjJA/Gibl7n2Pz7Icf/BoDfmLUhw+HQWJxcim8XfLaJSpJhSGSF1zq3LeIw+ML9\nbIua7+0skLNEsoSFFsY9h8+pGvbedXzUAOg7n/zustks6vW6yeFDEu50OsaB7oqMioIkcaa+yOfz\nAWKXid8c7T2VZzvFesNF8ty+TLJfBIlYGTsajbC7u2uiMeQKUBe524QQFU3Dz9hkav/Jz7jkDBdh\nyEiTfD5vQkSZZI3VrWQJQ1cf7JlIWF/kZ3zHuc4TJie5PhM2CPruh/ShkNDr9Tp2dnZw8eJFE0sP\nTCQ6RsjwPs5C9nK2Ql+MUpO8OjIkN+z5OC2sk2Tz5L+d5I254T+cz7wxEj6SXzYOm82FrPo0102K\nFClSrDkSZdHLaAxfJIhEXM2Z+2ytllan1HSZT8deherT4AGYBUL1et0s+y8Wi2ZxUiaTMYuTwmLV\nwxDlS/BZ73Es5Fkcz1HHSQct72m5XEalUkGpVILW2iyYkikXfBE+ruvJeyD9OupodXEulwtU6Fpl\n+O5Tn6qshTVPK97ellr1fixbtjk84hAJrePNVhNB9OPxGI1GI1A4w04RABxLDD4Jxwc7KgSAKchR\nrVaNzMK2cPWmJGUfweZyOVSrVezs7KBer5uEauVyGUopU9qQuWvsds/qfPTBRfRx/Q88ftbPRLVB\nkvZwOESr1TJ5e4AJ0cvFWnHb77pnJHOmqpaDehKkm7MMF8nLfSnZTyMp2jyhlhF9sXAjlLoMoA3g\nyqrbckq4iPPTV2D1/b1Fa31pFRdWSjUBfGEV114RVv1dnyaS0NdYz3YiiB4AlFIf1Vq7qy6sGc5T\nX4Hz11+J89b389Tfs9TX1BmbIkWKFGuOlOhTpEiRYs2RJKK/d9UNOEWcp74C56+/Euet7+epv2em\nr4nR6FOkSJEixckgSRZ9ihQpUqQ4Aayc6JVSr1ZKfUEp9YhS6k2rbs9JQCn1ZaXUp5RSH1dKffRo\n245S6m+VUg8f/d9edTvngVLqbUqpZ5VSnxbbnH1TE/zO0Xf9SaXUt6yu5SePdX+21/m5Btbr2V4p\n0SulsgB+F8BrANwF4HVqUptzHfHtWusXiHCsNwG4T2t9B4D7jt6fRfwhgFdb23x9ew0m6X3vAHAP\ngLdiTXGOnu11fa6BNXq2V23RvxjAI1rrL2qtBwDegUltzvOAuwG8/ej12wH8jytsy9zQWv89gF1r\ns69vdwP4Iz3BRwBsKaWuP52WnjrO67O9Fs81sF7P9qqJ/kYAj4n3p1KHcwXQAP6rUupjSql7jrZd\nq7V+6uj10wCuXU3TTgS+vp2X7xs4H309b881cEaf7UTkujkH+Dat9RNKqWswKWjxeblTa62VUmsZ\n/rTOfUtxfp9r4Gz1b9UWfew6nGcZWusnjv4/C+A9mEzrn+HU7uh//Hp3yYevb+fi+z7C2vf1HD7X\nwBl9tldN9A8CuEMpdZtSqgDghzCpzbk2UEpVlVJ1vgbw3wP4NCb9fMPRYW8A8N7VtPBE4Ovb+wD8\nT0cRCi8FcCCmweuGtX62z+lzDZzVZ1tWU1rFH4DvBvAQgEcB/LtVt+cE+vdcAJ84+vsM+wjgAiZe\n+4cBfADAzqrbOmf//gzAUwCGmOiSb/T1DYDCJBLlUQCfAvCtq27/Cd+btX221/25PurL2jzb6crY\nFClSpFhzrFq6SZEiRYoUJ4yU6FOkSJFizZESfYoUKVKsOVKiT5EiRYo1R0r0KVKkSLHmSIk+RYoU\nKdYcKdGnSJEixZojJfoUKVKkWHP8/5dnSY0tr9jmAAAAAElFTkSuQmCC\n",
    "text/plain": [
    "<matplotlib.figure.Figure at 0x7f3eb801dd30>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "img,mask = dataset[12]\n",
    "plt.subplot(121)\n",
    "plt.imshow(img.permute(1,2,0).numpy()*0.5+0.5)\n",
    "plt.subplot(122)\n",
    "plt.imshow(mask[0].numpy())"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Model: UNet"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
    "# sub-parts of the U-Net model\n",
    "\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "\n",
    "class double_conv(nn.Module):\n",
    " '''(conv => BN => ReLU) * 2'''\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(double_conv, self).__init__()\n",
    " self.conv = nn.Sequential(\n",
    " nn.Conv2d(in_ch, out_ch, 3, padding=1),\n",
    " nn.BatchNorm2d(out_ch),\n",
    " nn.ReLU(inplace=True),\n",
    " nn.Conv2d(out_ch, out_ch, 3, padding=1),\n",
    " nn.BatchNorm2d(out_ch),\n",
    " nn.ReLU(inplace=True)\n",
    " )\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class inconv(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(inconv, self).__init__()\n",
    " self.conv = double_conv(in_ch, out_ch)\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class down(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(down, self).__init__()\n",
    " self.mpconv = nn.Sequential(\n",
    " nn.MaxPool2d(2),\n",
    " double_conv(in_ch, out_ch)\n",
    " )\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.mpconv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class up(nn.Module):\n",
    " def __init__(self, in_ch, out_ch, bilinear=True):\n",
    " super(up, self).__init__()\n",
    "\n",
    " # would be a nice idea if the upsampling could be learned too,\n",
    " # but my machine do not have enough memory to handle all those weights\n",
    " if bilinear:\n",
    " self.up = nn.Upsample(scale_factor=2)\n",
    " else:\n",
    " self.up = nn.ConvTranspose2d(in_ch, out_ch, 2, stride=2)\n",
    "\n",
    " self.conv = double_conv(in_ch, out_ch)\n",
    "\n",
    " def forward(self, x1, x2):\n",
    " x1 = self.up(x1)\n",
    " diffX = x1.size()[2] - x2.size()[2]\n",
    " diffY = x1.size()[3] - x2.size()[3]\n",
    " x2 = F.pad(x2, (diffX // 2, int(diffX / 2),\n",
    " diffY // 2, int(diffY / 2)))\n",
    " x = t.cat([x2, x1], dim=1)\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class outconv(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(outconv, self).__init__()\n",
    " self.conv = nn.Conv2d(in_ch, out_ch, 1)\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class UNet(nn.Module):\n",
    " def __init__(self, n_channels, n_classes):\n",
    " super(UNet, self).__init__()\n",
    " self.inc = inconv(n_channels, 64)\n",
    " self.down1 = down(64, 128)\n",
    " self.down2 = down(128, 256)\n",
    " self.down3 = down(256, 512)\n",
    " self.down4 = down(512, 512)\n",
    " self.up1 = up(1024, 256)\n",
    " self.up2 = up(512, 128)\n",
    " self.up3 = up(256, 64)\n",
    " self.up4 = up(128, 64)\n",
    " self.outc = outconv(64, n_classes)\n",
    "\n",
    " def forward(self, x):\n",
    " x1 = self.inc(x)\n",
    " x2 = self.down1(x1)\n",
    " x3 = self.down2(x2)\n",
    " x4 = self.down3(x3)\n",
    " x5 = self.down4(x4)\n",
    " x = self.up1(x5, x4)\n",
    " x = self.up2(x, x3)\n",
    " x = self.up3(x, x2)\n",
    " x = self.up4(x, x1)\n",
    " x = self.outc(x)\n",
    " x = t.nn.functional.sigmoid(x)\n",
    " return x"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Loss definition\n",
    "Use Soft Dice Loss"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
    "def soft_dice_loss(inputs, targets):\n",
    " num = targets.size(0)\n",
    " m1 = inputs.view(num,-1)\n",
    " m2 = targets.view(num,-1)\n",
    " intersection = (m1 * m2)\n",
    " score = 2. * (intersection.sum(1)+1) / (m1.sum(1) + m2.sum(1)+1)\n",
    " score = 1 - score.sum()/num\n",
    " return score"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Train\n",
    "Train it within **1 minutes** with GPU"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 7,
    "metadata": {},
    "outputs": [
    {
    "name": "stderr",
    "output_type": "stream",
    "text": [
    "100%|██████████| 21/21 [00:05<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.25it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.25it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.23it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.22it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n"
    ]
    }
    ],
    "source": [
    "model = UNet(3,1).cuda()\n",
    "optimizer = t.optim.Adam(model.parameters(),lr = 1e-3)\n",
    "\n",
    "for epoch in range(10):\n",
    " for x_train, y_train in tqdm(dataloader):\n",
    " x_train = t.autograd.Variable(x_train.cuda())\n",
    " y_train = t.autograd.Variable(y_train.cuda())\n",
    " optimizer.zero_grad()\n",
    " o = model(x_train)\n",
    " loss = soft_dice_loss(o, y_train)\n",
    " loss.backward()\n",
    " optimizer.step()\n"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Test"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
    "class TestDataset():\n",
    " def __init__(self,path,source_transform):\n",
    " self.datas = t.load(path)\n",
    " self.s_transform = source_transform\n",
    " def __getitem__(self, index):\n",
    " data = self.datas[index]\n",
    " img = data['img'].numpy()\n",
    " img = self.s_transform(img)\n",
    " return img\n",
    " def __len__(self):\n",
    " return len(self.datas)\n",
    "\n",
    "testset = TestDataset(TRAIN_PATH,s_trans)\n",
    "testdataloader = t.utils.data.DataLoader(testset,num_workers=2,batch_size=32)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
    "for data in testdataloader:\n",
    " data = t.autograd.Variable(data.cuda())\n",
    " o = model(data)\n",
    " break"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 10,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "<matplotlib.image.AxesImage at 0x7f3dbe4ff438>"
    ]
    },
    "execution_count": 10,
    "metadata": {},
    "output_type": "execute_result"
    },
    {
    "data": {
    "image/png": "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\n",
    "text/plain": [
    "<matplotlib.figure.Figure at 0x7f3da1bf87b8>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "tm=o[1][0].data.cpu().numpy()\n",
    "plt.subplot(121)\n",
    "plt.imshow(data[1].data.cpu().permute(1,2,0).numpy()*0.5+0.5)\n",
    "plt.subplot(122)\n",
    "plt.imshow(tm)"
    ]
    }
    ],
    "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.5.2"
    }
    },
    "nbformat": 4,
    "nbformat_minor": 2
    }
    459 changes: 459 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,459 @@
    {
    "cells": [
    {
    "cell_type": "code",
    "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
    "import os\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "\n",
    "import torch as t\n",
    "from torch.utils import data\n",
    "from torchvision import transforms as tsf\n",
    "\n",
    "TRAIN_PATH = '../train.pth'\n",
    "TEST_PATH = '../test.tph'\n",
    "%matplotlib inline"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Data Preprocessing\n",
    "Preprocess data and save it to disk"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
    "import os\n",
    "from pathlib import Path\n",
    "from PIL import Image\n",
    "from skimage import io\n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "import torch as t\n",
    "\n",
    "\n",
    "def process(file_path, has_mask=True):\n",
    " file_path = Path(file_path)\n",
    " files = sorted(list(Path(file_path).iterdir()))\n",
    " datas = []\n",
    "\n",
    " for file in tqdm(files):\n",
    " item = {}\n",
    " imgs = []\n",
    " for image in (file/'images').iterdir():\n",
    " img = io.imread(image)\n",
    " imgs.append(img)\n",
    " assert len(imgs)==1\n",
    " if img.shape[2]>3:\n",
    " assert(img[:,:,3]!=255).sum()==0\n",
    " img = img[:,:,:3]\n",
    "\n",
    " if has_mask:\n",
    " mask_files = list((file/'masks').iterdir())\n",
    " masks = None\n",
    " for ii,mask in enumerate(mask_files):\n",
    " mask = io.imread(mask)\n",
    " assert (mask[(mask!=0)]==255).all()\n",
    " if masks is None:\n",
    " H,W = mask.shape\n",
    " masks = np.zeros((len(mask_files),H,W))\n",
    " masks[ii] = mask\n",
    " tmp_mask = masks.sum(0)\n",
    " assert (tmp_mask[tmp_mask!=0] == 255).all()\n",
    " for ii,mask in enumerate(masks):\n",
    " masks[ii] = mask/255 * (ii+1)\n",
    " mask = masks.sum(0)\n",
    " item['mask'] = t.from_numpy(mask)\n",
    " item['name'] = str(file).split('/')[-1]\n",
    " item['img'] = t.from_numpy(img)\n",
    " datas.append(item)\n",
    " return datas\n",
    "\n",
    "# You can skip this if you have alreadly done it.\n",
    "# test = process('../input/stage1_test/',False)\n",
    "# t.save(test, TEST_PATH)\n",
    "# train_data = process('../input/stage1_train/')\n",
    "# t.save(train_data, TRAIN_PATH)"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Data Loader\n",
    "Wrap it with pytorch `Dataset` and `DataLoader` "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
    "import PIL\n",
    "class Dataset():\n",
    " def __init__(self,path,source_transform,target_transform):\n",
    " self.datas = t.load(path)\n",
    " self.s_transform = source_transform\n",
    " self.t_transform = target_transform\n",
    " def __getitem__(self, index):\n",
    " data = self.datas[index]\n",
    " img = data['img'].numpy()\n",
    " mask = data['mask'][:,:,None].byte().numpy()\n",
    " img = self.s_transform(img)\n",
    " mask = self.t_transform(mask)\n",
    " return img, mask\n",
    " def __len__(self):\n",
    " return len(self.datas)\n",
    "s_trans = tsf.Compose([\n",
    " tsf.ToPILImage(),\n",
    " tsf.Resize((128,128)),\n",
    " tsf.ToTensor(),\n",
    " tsf.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])\n",
    "]\n",
    ")\n",
    "t_trans = tsf.Compose([\n",
    " tsf.ToPILImage(),\n",
    " tsf.Resize((128,128),interpolation=PIL.Image.NEAREST),\n",
    " tsf.ToTensor(),]\n",
    ")\n",
    "dataset = Dataset(TRAIN_PATH,s_trans,t_trans)\n",
    "dataloader = t.utils.data.DataLoader(dataset,num_workers=2,batch_size=32)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 4,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "<matplotlib.image.AxesImage at 0x7f3dbf492e80>"
    ]
    },
    "execution_count": 4,
    "metadata": {},
    "output_type": "execute_result"
    },
    {
    "data": {
    "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAC7CAYAAABrY1U1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJztvWmwLMlVJvh57uvd3nu1l6pKpSpB\nsQmEdsxaIGaQaIYaMFogMI0ADTW00cAw04CgDQMzBkxttLUapjH1FINAYIAkGMkkGxY1qkaDIZWK\nkkD7Uou22uu9d5fc1+vzI+/n94Sne0Tkcm/GzRuf2bWbGREZ4R4Z+fnx7xw/R2mtkSJFihQp1heZ\nVTcgRYoUKVKcLFKiT5EiRYo1R0r0KVKkSLHmSIk+RYoUKdYcKdGnSJEixZojJfoUKVKkWHOcGNEr\npV6tlPqCUuoRpdSbTuo6KVKcJtLnOsVZhDqJOHqlVBbAQwD+OwCPA3gQwOu01p9d+sVSpDglpM91\nirOKk7LoXwzgEa31F7XWAwDvAHD3CV0rRYrTQvpcpziTOCmivxHAY+L940fbUqQ4y0if6xRnErlV\nXVgpdQ+Ae47evlApZfZJOUluXzWUUlBKIZPJIJOZjJFaa2itcXh4aF67kMvlzP9MJmM+MxqNAACH\nh4fmfIu0DwCy2ax5zevIa7iQzWYDn+Px4/E49HO+dmQymUAbZDts+Prs+u6VUqH3yLdPa31qD5J8\ntrPIvrCCjdO69MIYPa8UeJ97pBf5mTu/sePc/tAnK0tpk43+cybnLX7VfV0bxa91f/X9z833Wxs/\nr2heZx/pz3WOZaGHNga6H/lsnxTRPwHgZvH+pqNtBlrrewHcCwCZTEbn83nzI+V/3w/d3mcfJ88T\nNVDYxGB/1r5OLpdDPp83xA0Ao9HI/Mm2k+ByuRx2dnYAADfccAO2t7eRzWZxcHCAp59+GgCwt7eH\nfr9vBgxfm1z75AAEINC+8XiM4XBoXvMcsl+FQgFbW1u4cOECarWaOU+j0cDly5fRbDYxHA6nrp3J\nZJDP55HP502fDw8Pkc/nsb29jXq9bo7d39/H1atX0e12A4NaFMlnMhkUCgVsbm6a991uF51OJ3C/\n5fns/nEwXQIin+ujdphne0Pt6JeoVy3r+iePR633MYbH97//487t33XDCxZvjwucU8Ucum//45Jz\n+6Mvih7EXNj97TsD73e+56G5zkNkt7fN6/He3kyffUDfF+u4k5JuHgRwh1LqNqVUAcAPAXjfCV0r\nRYrTQvpcpziTOBGLXms9Ukr9GwDvB5AF8Dat9WeiPhdHpqG1Jq02pRSKxSIKhQK01hgMBgCA4XDo\ntJDta/qkIrmPr2kV00pmm6LkDVqVo9EIuVwOlUoFWmscHBwAAJrNpmm37Jurbb72sg3D4RDD4TAw\nq7BhW72ZTAa5XA7lchnZbBbAZAbQbrfR6/UCEg4/WywWUa1WUSxOprLZbBbj8RjZbBZbW1u4ePGi\n2V4qlYwU1O/3p/rh6g/btbGxgWuvvRYAUCqVsL+/j8uXL6PVamE8HjvPdRLRZPM+1+sOWu7vfzJo\n2fP9iVn2C+L2B0uhVv3XfmyaHj/3wunZ4e7/e+fcVr205vl+Vqs+Dk5Mo9da/xWAv5rxM4HXNqHb\n4PZisYh6vY5yuQylFLrdLgCg1WqZ1/YP3yUB8TgfMQITMj08PAyVleTxlDNIbp1OxwwShUIBhUIB\nAAy5yn7Hgeu48XgcKm25zjEajXB4eGjkGACoVqsol8vI5/Om/TxfNps1RF+tVgFMJCMSb7lcNn0r\nl8vI5XLo9/tot9um/67BUd43/pVKJVy4cAEAsLm5iUqlgsFgYKQu3304CczzXC+Kqz/xMvP6wu/d\nf5qXPrdwkTy3f+ipU27MErAyZ6wNm+SjjpWadKFQQLFYNIRCCxOAIVnXOXO5HAqFAnK5nNk/GAww\nHA6N5W5b0TYRu6xsV3tprTebTezu7iKbzRoLVyIOyctrhlntvrbZnzk8PMRwOES/38dwODQETYeq\n7avgOXK5HEqlEmq1GoDJgMvZjvRhZDIZ8/2USiW0Wq3Q/tnX4YwAALa2tpDJZHDlyhXs7e2Z++rq\n3zqCpJ9Ewv+uG14wZdUnAY++qIfbH3Tr9EnESVj1iSF6IGjNuZxqrmOBCZFks1nk83kUCgVjkdIR\nyf/yfCSfSqViiA2YEH2n00Gv15ty9rmuHadPSilD6J1OB1euXDFSTrvdBhDtMJTk5SNu37Wj2n14\neIjBYIB2u42DgwNjcQ8GA3S7XWPtu2Qse3sulzMDJ2dT3EfrexaJDpjcGynRZLNZM0D77lOcAfgs\n4+pPvCyU7A9+5KVT2zb/5CMn2SQAQbJPqmSzKF5x/Rfxoaeeu+pmzITEEH3cCBvXfpINrXzKIOVy\nGeVy2UnaJItSqYRKpWJIYzAYIJPJGBKzLW4bNvm5LF953X6/j4ODA/T7fWSz2QCphun8IWGD3u2u\nAcDVRs44ms0mtNZmRjQej9HpdJxt40yp3W6bgRWAIeDxeGyIvtlsYjweo9FoeGdXdrvkd9vpdLB3\nZOGUSiWMRiPjf5HHr7Mlvwwc/MhLT43skwaXVR+mz3/uhSOvfAMsHmlDjPf2pnT6k0Ca1CxFihQp\n1hyJsegBf2w8tXguNqJDlNYbo0yoq/P4bDaLXC43tRBInpcWPa3SQqGA8XiMXq8XsBp9UR2+GH6X\ntg/AWLrD4dAsnOL2uNaoS5bwWeph55BtY58PDw8DjuHhcGhmQ/b5hsNhQG8/PDw0TtjDw0Ozj7OC\nfr8fiKMPs8Cl/6Db7eKZZ54BAKPJS4mJ57JneOuOKPnGhdOy6pOIWePmo6z6ZYF6PC37MxV1swxQ\n861UJivhqtWqkTu63a6JBGHIXq/XQy6XC/zgw1ZjclCQi34AmFBNShBsi/xcXIL3XZdEHwWXpBEn\nLDHqnK5t1OJtXd8meXvQkqQ8GAxMKCWJvtVqYTAYGK3dllyifDGDwQC7u7sAJoNGJpMxjmOiVCqZ\nqKter4deb/KjXuJiqRPFw3/4QvP6jh/9WGDfhd+7PxB5I7enOFnIcEqSvivEchnwEfz/+ZUPmdc/\nfcsr5jp3ook+k8mgWq1ia2sLALCxsWFIpNls4urVqwBgnKeNRgPj8dg4VxlJ4gvjG4/HU9q97VyM\ncgZHEb5ruyTGKP/DLHBd20eivsFqlnQHPJakSqKnRU/rm7Mj16ARp09S75c+FK21+a43NzexsbGB\nQqGAdrttno1WqzXXvTwtSIKX2+KSvQ+bf/IRp0M2xfw4KYL3QRK83DYP2SeG6O0fP52qxWLRhO9d\nuHAB1WoVWmuUy2VDNKPRyDgGR6ORkR4AGEvSdk5qrc1nisViIB8MZaAwCWBe8giLCPE5pGeNtgk7\nJsrBHbe/crAi+v0+RqORIWXOhqLuZRRI9ryevVAOAGq1GjY3N1Gr1VAsFs3gw/9JhIvk7X2S8FML\nPsW8SATR21aej5xkMjEpt+RyOQwGg8CqS57XJRVw32g0QrvdNlIA91NDD8s7E6dPLp+DLf24LH1f\nSGQUsfss97D9Ue2WA6Tv/NKPIe+1HKB8M5047ZGfs8Nq5aKser2OSqWCw8NDMwBISe68gVq8tOzP\nqz5/3pFG3aRIkSLFmiMRFr0NKQv0ej2TDwYA6vU6MpkMOp2OscJzuRzq9bqxPLmd+nyYRs8oEMoN\nmUzGGae9rCgOV5x91PE+6cbeLxFlycd16sadBbheR7Un6p5GnUv6UJhm2UaS9fk7fvRjofIN0fpX\nLwEA1P78gbmuk1rxKRJB9L7FLnZUBxf1KKVMWmBgEhIpk2sx2uPg4ACtVsuZYlc6BqnLsy0yD7tP\nF4/j+IxDtpSimG4gKq/9MuFL7+A6RiKsn1HXch0fx9fg+4xMFjcajYwRIKNtkk72hEuXJ8nbr+cl\n/RTnE4kgesJFPNKyZty21OyBSf6TSqWCra2tgIOOMfeS7F3OSBkhIoncp8/PQkwuLZ7IZrMmdJT/\nu90uut1uYMm/1MjjWvVh5GbfgzghjlH9i0LY+WUbZoFMFtdqtVAoFJDNZrG/v2++z1Kp5EyVkETY\nkTZhaP2rl6Rkv+ZgdI0vvPLw214A/POHY50rkb8AmxxpnTErI//oiBuNRlBqkuUwn89Ppdmlc1We\nM8o56pJLbGve1277tX1+tr9SqZhUvhykWKCj0+mYPpyEdc+IJmDisGTk0jwLtwhXP2dBXLKX5yXR\n7+/vm9TMjP4BJlLfWSH6dcIjb5kO7Xzez52+hPT4L78cN/1mPDJMKuaNnZdI/C/AJZOQKPlj7vV6\naLfbaLfbqFarAYuf8ohNImGyik8TXwbh8lrM/b6xMSkzd+2116JUKqFUKmEwGBiLNCwsMWx7WHw+\n1ydcc801ACYL0Xq9Hq5cuYJGo2Hua9xBzd7mGySXBTm7YVtbrRb6/b6ZxcmIrDgL05KK2p8/EJBs\nzjIeectLT4XsH//ll0+9P+tkvyjm/gUopW5WSv2dUuqzSqnPKKV+9mj7jlLqb5VSDx/9P/mMPSlS\nLBHps51i3bCIqTMC8L9rre8C8FIAP6WUugvAmwDcp7W+A8B9R++XBqmfj8djk2Fxd3cXTz31FJ5+\n+mlcuXIFV65cwcHBQUCK8OnYszoWXe2xISUml4OTf0zrW6/XsbW1ha2tLVSrVbPddV77PGHHuJDL\n5bC5uYnrrrsO1113HW6++WbceuutuOGGG1Cr1aYiWGaZUURp/fZfFOKeazQaodfrodvtmmybLKQy\nx2xiJc+2D+ukxbskndOAbeWfN8wt3WitnwLw1NHrplLqcwBuBHA3gFceHfZ2AB8E8IuLNNKlfcvF\nOYPBwEgOrVbLTNX543etjLX6Eji/y+m6iAzhInqttUn0BUy05nw+b1YEn6TcwGRvspIU8/pQAgGO\nV7a6ME9I56z7ZonEkb4PRi8B8NYUiDjvqT3bcXHWyP55P/eRlZG6D+dZwlmKRq+UuhXANwN4AMC1\nRz8UAHgawLXLuIYLckUmHYmdTidgjdpx9C4nrM8K9Q0A88AerNhGOl0vX76MbreLTqcTyPAYFevu\nC/MMa4MsNAJMyJBJwWSUyqzRPlED4CzkHzUwu6KZ5LHU7judTmRNgYg234oVPNspUkQh8w8fB6rx\njl2Y6JVSNQD/D4D/VWvdsAhHK6WcrKOUugfAPYte/+g6hrzkVJ3WXRhBz+J49UXd+AYJn6ySy+VQ\nq9UChbibzaapccucPTyPTWY2yfngO47RSMwIydwwDEN1SVq+/saZ3bhIWUJ+Z3YKY5cTPeya3C8r\neM1L9Mt4tkuozHXts4wvv/MbAQA5TIyY0ZPH9+A0nLE3/eaHz49U0+pGH4MFiV4plcfkh/AnWut3\nH21+Ril1vdb6KaXU9QCedX1Wa30vgHsBIJPJLBzOQjJwVR3i/jiEb5OcL1LH/qxLnvG9ZglDWcZQ\nHYUFMo7eTq8bZrG7LGuXpS371O12DdEPh0NUKhUzANiLjeYNlbTB/PvcxxBPDnjMNgrA5C5yDcS+\nWYxL1uv1enMR/bKe7Q21c/Ir3xKO3A0d3PqDnzzVa1KikYS/Ctkmd/115vXoqadP/fqmHfN+UE1+\nVb8P4HNa6/8odr0PwBsAvPno/3vnOLd57ZMGojTisG2u/XEkiLDZQZiVL0mIso2scQscL/7qdDrO\nQUlq0FFtjkPMWutAzvZmswnguDi6fd5ZHLJhDmKljlcDl8tl7OzsYHt7G7VaDf1+H/v7+wCAq1ev\notVqOYuexPG1yNezpF4+Ov+JPdvnFV9+5zeeOtkDqyF3IEjw9rZVEP4iFv0rALwewKeUUiz9/suY\n/AjepZR6I4CvAHjtYk1MkeLUkT7bKdYKi0Td/AMAn9n4qlnPN480ECVhhF3HtnpdFvEiztewGQLz\n6GQymUC6BmCyZL9QKAQWTPF8UY7JqD4CE7mEK4i5jxW77BKNrnPa/Zvne2NfuTL4lltuwdbWFkaj\nEa5cuQJgslr3ySefRKvVclrkrpmGa9s8K4uX/WynmOC0rPrBq19kXhf+5sETv96syF1/3alb9Ylc\nGRtGVHE/y89zm8+x50NcacDXvrBIHqYbsEP/crmcKWEYFl7pcyDHcXqWSiVUq1WUSiXjCO52u2i1\nWuj1ek6ZJKw/9jE+WUl+nlE9lG6uvfZa7OzsAJiEegKTcFOGejL1RVifU6QAgiTP9ynZJzwfPTVp\nFhxxWa5xfuiSfORf1PG+9sS9tuu6zJTJ6JpOp2OKZ7Omqj2gxLVIo45VapIfiEU6NjY2sLGxYTTy\nqCId9r3jd8N7EfYnv0P7+2Sf8/m8SQNRq9VQrVZRKBSmrjELFpmVpZgPq9DigWmSj9p+npAYiz6b\nzU5N0bl4iBYgrWFbYvDJLFFyjOvzp2E5shJWo9Ew2yqVCrTWaLfbU7nwfYhjbduOYKUU8vk8yuWy\nua9MasZIFxnaKa9lv3cRLyNreA1iOBxOFQfv9XrY29tDvV5HNptFoVAwdQHYrmw26xzg4zrZU6wG\nt/7gJ02Ypdy2Lsh849eY14ef/PwKWxIPiSD6bDaLarUaWJFJsqhUKgHCGAwG6PV66Pf7UxkpwxBG\nFlFWsGvbHLpv4PVgMAiEAXY6HSilMBwODeHOen6fji7f894eHh4a6UZrbUI+ZTF1uw1Rgx0t73w+\nH5BjstmsSVMhk6Z1Oh1cvnwZWmt0Oh1TD5j75IrmsIHMhbMi6bzu80+a13/2NTessCXLx2kTe+Fv\nHgy16pcl4UiSl+8l4Y+eetoZebMqJFq6SZEiRYoUiyMRFn0ul8PFixdNXDc1a07/mcq3WCyagt6t\nVisQ+x3XAg6LtJH/XTKPdCpGxZfbn3OdR0o0vV4PmUzGJGqLkwIhjibvmkl0u10Ui0Xj8GVsf6FQ\nQD6fnyrCEgU7Rr5er+OGG24waZDr9Tr6/T4uX76Mxx57DJcvXwYw+d5YJKTZbKJWq5k29ft9NJtN\n56wiKtImSdj5ugFe92631S6tefl+3Sz7dYJtzdv7kmrVJ4boL126ZKQbpgOQ8g0A1Go1KKXMilL+\nuJvNZkAGkbAXGvmiclyfc0kfcSUB37E2SfMaLJ7iu3ZYxIurnfa1+H80GqHT6RgnJ3DsH5HpB/hf\nOk7tUE9XGxnZU6vVcOnSJQDAhQsXoJTChQsXUCqVzPHPPPOMkeC63S4ODg5Mm7SeLOiyB/E4Uk1S\nSR+IR+av+/yTKdnPiTD55jRgyzgysmaVq2QTQfS0AqnFM0Uvk27xh84l89ls1tSTBRCp10eRrv1a\nbosijVmdt/NE+4RdOyzk06fR93o9MzgCE6cnC6TL9AeM0OFKXu6jH8GVGZIDgqzTWygUUKlUDMlz\nJtZsNtHv99Hv981MQ4aVcnbjC9t0IckkL2Fb8779KeHPDhfZu/T5r/7adD6c5/zaclbS2tY9cEZT\nICwTLMYtFw0x7wun9QBMMjAgmAiLlmSY3OGSZlwIW3wUBpcjlERsDzRxHMF2RE1UHPssIZjD4TCQ\n7ItEPxwOA0nNZIhjPp83x5OUO50Oer3elKXf7XZx5coV811xcM7n8ygWiyaMk4u2GEHlm5HF6etZ\nIXiJP/uaGyIJP8V8iHK8ukhebl8W4ScFiSB6rohkuB+tS+ZdobVO2SGXyxlLkMcD/tWbfO3Syl2f\nc22TpB0H80R9SJlJts03W/ANbFHhliR1fj6bzZrtsgwffSSMsZdF2ovFInK5nJFY5Ll7vR6uXr1q\n2jAajdDtdlEul7G3txeYqcmBzF6V65Lc7DDZs0jwwLGlzv824aeW/Grx1V97uZPsDz/5+VCdPqlI\no25SpEiRYs2RGIv+8uXLgdJ51IEZAcJt3W7XaPS06O0FRmEatQ2fLEI5SH7W5YScRTKJAq9pZ7Uc\njUbOVbNhkk2Ur0Jaz3ZKZG5nPh4uWpPOW2By32WUDtvHSlX8Tvr9Pq5evYpyuRxIj8yUC+yLD3Y6\nCN+MJYnROLufKcSyzlML/uwgjlWftEVUiSD6w8NDNBqNQLgfZQRJbswRw9WX1Ix95eLiRGLYUoAk\n21KpZNokHZC2ljwrmbgIia9ZP1bq20wj3G63TT3UeeFz3srXvK/dbhfNZhNKqUCRlPF4bFa6ugZT\nFoGRpR6bzeaUE51E75JoGO1D2GGWYYO2b3+K1eNLv/myqW23/fL9K2hJOKI0ehK5TfhJI3giEUSv\n9aQUYFSkio9gfdr5PCtYAQTIlnr1cDg0ZBuWomARgiHRl0olbG9vA5jEoGut0Wg0cPXqVRwcHBii\nXORatu4tQVJlmgZq8rwX1PhHo5EZFNl+6VjlTOHw8NB8vxy8ud12NnMmw8RrwLHzl22apw5simP8\n8WMfmtr2+ptfsYKWTEDyP03CJ5EvGnkzD7H3/2UwIqj4lyefdC0RRA/MnrzL56QMC3MMk3LkcSRb\nlvsDJuTHKBFZ05WERvKKE0UT1i9gYs1KwmO4KfPQkEApXc07oEVJHbTKh8MhcrlcoBYvQ10ZmcPj\nO52OSaMg75E8v+1E5veZzWZRr9cBTGLvq9UqstmsWVgFTAqSsDjLIjObFEH88WMfWinZrwouUn/N\nZ/adx/71120tdC2b4O3tJ0n4y6gZmwXwUQBPaK2/Ryl1G4B3ALgA4GMAXq+1HoSdg4gbwhiX5F2f\ndV3LRXiZTAblchmbm5sAYKJRlJqU/ONnKEVQVvGtgo3bZ/oeaMGORiND9MxVT18G8+XMill0fQ5i\n0meRyWRQrVZRLBZRr9dNe0ajEfb393FwcBAo4UdphgnKSNBSBqM1T6Lf3NzE5uYmSqVSwE/TbrdN\n6mIJOZjIvswT/UQs89k+C/jjxz6ED/eC9c7fesfzTu36X/rNlyVSxiFe85n9ucneR/KnhWVE3fws\ngM+J9/8ewFu01s8DsAfgjUu4RooUq0D6bKdYCyxaHPwmAP8SwG8A+N/UxHz6DgA/fHTI2wH8GoC3\nxjjX1GvbGlvGVD3KAqaTdzgcBqzGfD5vJAo7XUG73Tb6Oa3PMIery2HIBWAs0L23t2eOp06/DH3a\npc37Vtj6+sG4+0KhENDS5X0BYGYlSilT8KRQKJj72mq1TJZKpSZZLzk7KJVKKJfLyOfzgVW2rrQO\ncrvd1nnv1TKf7aTh9Te/wqnTu/CvH35kqVb9bb98v9Mhy31Jh8uqf9fj7na/9iZ3P1eBRaWb/wTg\nFwDUj95fALCvtWa83uMAbow6iVwgBEw08nK5bMrsSU2aBCzDA+NII1FTeHkOLvBpNBrG0cg8O/l8\n3vwBMNE5Mp+7bHPY4iWXnETphpr0cDhEo9FANptFr9cLSCJx4boHUWQut7sik9jf4XBo/Bj5fB71\net30QUouxWIRW1tbJkEdABwcHARSF8uQ2VarZa7ZbrdN7n4ZzRPmUF6Cs3Ypz7YP3btfDAAov/cf\nF2jicmHLNsRJkD2xCkdsFP7667a8Ov0seNfj9xuyL/7lgyuVb+YmeqXU9wB4Vmv9MaXUK+f4/D0A\n7jl6HSD7YrGIzc1NbGxsGCckcFzyjmXv7PhvwhdDzmuFHQcc6+77+/vmGOZhsUMNuXq0Xq+j1WoZ\nK1au+nT0faoNkkxlCCJXAzOklNEuYe2X55b3NYzQffq2azBlFE2z2QzUni2VSkZrz+fzRtPnLITa\nPmcAtVoNxWIRSikzGyKha61xcHBgZjKdTsd8DzLkNuy7nhfLfLZLqEztJ8nbr4HTI36X4/VfP/zI\nqVxbIkkEfxKQZO9D0qNuXgHge5VS3w2gBGADwG8D2FJK5Y4sn5sAPOH6sNb6XgD3AkChUNDFYtGk\nOuAiHaYolrHsjUYDV65cwe7u7hSpxkGc4xgH3mw2Dam2Wi1T05UOUgBmIVE2mzX/genl+z6ZxDUQ\nyNkKo15cC53s8/gijuI4ucNmHjY44Mg00cCkShZnHtLyZlqETqeDbrdriL5arZqBrNfrmdKKwOS7\npkQ0Go3MsyFlnLD+LIilPdsbamemUad794tXZuW/9Y7nrYTsk4hZrPrX3vQyr3wjcRqE7sPcRK+1\n/iUAvwQAR1bPv9Va/4hS6s8B/AAm0QlvAPDeqHNls1lUKpVADhSuij08PDTEwILWJA0STFgyMxs+\ni97eTquVs4ler2dytss4ekoNMkkYzyfPKVeVksBkiKBN4PK1L5fPvIjSu+3jXJ8neWutzffQarVM\nlksuLgOOI4n29vYCyehYPpH3BECA0OX1XPcmDIto9Mt8tlOcXUgtnqS/aIjlqnASuW5+ERPn1SOY\n6Jq/fwLXSJFiFUif7RRnEktZMKW1/iCADx69/iKAF4cdb4Mx1rR6mSuFeV6YDqBcLhuHp4zr5jl8\nMes+q85l9UmphRIF26SUMpYqt7fbbRNbL2cAttUsF0BJJzNnBHRsuhYT2f3wRfHYfbD76TvfPGDc\nOiOBAJjvkBa/9CVordFqtUy/AZjvVdaHlZFVcSKBorDoLGjRZ9uF8nv/cUqbTwqk05UyTlxHbOf7\nXxJ4X3n3A8tr2IoRZclTh48j4awCagnRCQujVCrpS5cuGc2dC4+KxaIJswMmjk+tJ2lxGZoHwLsq\n1Z7yx4EvkoMDi0zyxTZxERDJ2r42UyoAk4VA5XIZuVzORPcAMPo1ncx2jneJRchr2d+3PaCESWOM\nWpJSXCaTMQXf7YiisMgg2/cR1q6j+7mSauEbake/RL3Ku39VzthlwiZ4F9aJ9OOAhH/SIZYP6PvQ\n0LuRz3YiUiBQD5eaLrdzWT2AQFItGcoY58dOzOKYdMWXU0vntaWWbOdTl+dkOCbTBtCpy0GsUqmg\n0WgYYg/Txxch/jBylNeIe26fru9y7nKGJJOdcZC0k8Wxn2HfYZzvfVl+jZPCWST2edD5/pecK7JP\nUgw9kCCil9actGYZdQIEpRbbSSktvFl/6GHE6SIrO9TQd5wEHZaUfpjWgDODTCaD4XBonMyyr/br\nOPJUWL+jyH5WcowKIZWDJqNogGM5TA5uNonPOgPhzEtG9ly5cmWmc6SYDSTwOJZ9isWhX/ZNx28+\nES8BW2KIXobNRU3LbURFZJykhefS921wIAOO66WWy2UUCgUzS5FZHe3z2phl8PKFXc5yf6PaYUcX\nycgitoUDsz3riRMxFWftgzy+sIqEAAAgAElEQVS2Wq3iwoULAICdnR1zz1OcLCrvfiAl+xNGgORn\nQFphKkWKFCnWHImw6AG/vg34Fwb5ok98x0vEiUpxvXedxzWTkG2U8lO73TaLhGQmSlr9YYVFZo0q\n8u3zzTzmgXTA5nI5VKtVbGxsmMgiAGZNRK/XQ7fbNfeCkTthur6rD76FaIzeqlQqJp//tddei0ce\nSRcBnRZ8Ms466PPZS5dC948vXz6llsyOxBC9DZ8zLs5gQNiavSQluYJVft63ytY1uMRth3Te0unc\n7/cDC4WoXdNZGUV+rv7NIsXIwWke0pf3kmGutVoN11xzjcklTzC6qNVqYW9vz6Q5YDoDVxui5Jqw\neyJDb2UO/RSnh3UgdokokucxSSX7RBG9L67d3h/1I3cdp7U2OeaB49A+kqVMnMZ4eJ+DcxaL2LY8\nZYlE4JgkpY5tzxCiBjdXe8LWCNjHLAKllJmVVCoV1Ot1bG5umiRwwKSPh4eHaLfbqFQq5vi9vT1z\nr8P67ZvF+QbVXq9nksJx7cN5wJPvuSt0/w3f99lTasn5BQeEpBF+ooh+Ecg6ryQSEgQrM2UyGbNI\nhwuXuMCHC5c6nQ6azeZU8iwfKUbNPFwhmkod12WNUws1DHEsfyJsgPS13Xdu2wHLbZlMxkQT8ZhC\noYBCoTAl6WSzWTQaDfR6vamqVLId9vXsWZrcfnh4GChA3u12zw3RR+HJ99yVkv0p4aQIX93/ibkc\nsokh+nkiQOSPPJfLoVarYWNjw6xC5QIn5loZjUZmX6VSMaXqAJhYfa7GtfPR222M0vJ9JMV9ccg0\nCnHuWZxzukIhw65jE63M+9PtdtHpdEypQWC6NCIjYsbjMTKZDJrNJrTWgYpZYZKUT8fnoDocDs0q\n3G63681yepbwfZ8NJ4z33BUtLaQ4fZyEnKPu/8TxG92N9Zk06iZFihQp1hyJsejjwGf1UjKwi1VT\nh6c002w2AykKgGPZQa5cZSHseRZbxdWSfdE6syBqNuBaQOZrK61uGdvP9rHilsxdIxeK8XW328XV\nq1cxHo/RbDaxtTXJD0JJhrH1XMxUr9dNRFKv1wusMpbt97Xd5W/g8WyrveJ2XfF9n72M99w1kWWi\ntPrzii++eXq16nPfFC83zfjy5VgO2aQiMUQfJyTSPk4ezz9qwcBkURJD7phDhguXWq0WhsMhisWi\nSa0LTCQcO/KF1503wsXVXttJG6fvYecJO8a3XUYglctlVKvVQFGVbDZrZC9Z/EMWR5ekz8Ihw+HQ\nFPEGYNIW5/P5qaIqYYVUZnkGlvXdnGVQ3nnPXZ9NyV7ARfD2vjiEf5bJPjFET8ubcFnEYZYp8+XI\nVApKqUDSseFwaBxz3W4X7XbbVELiNQaDQSDqZlbSiKO5u/rpC3eMipGPs07At4//6cSm34LaerFY\nNLmGer2eIXRayTKSiOCAKksJ9vt91Go15HI5k78IOE7kxtj6uJZ3nLULcaKWzhLec9elmXT61Ok6\nG+ISPvX2uISflOibxBC97QT0/Th9xDYej9Hr9XBwcGCibkajEYrFIkajERqNhommASYko7WeirNm\ngi1fJaO4TtNZwi/DPhdm/bs+H9XOsHZls9lAdkm5mGs8HgcsfVeRci6AoiObAy4tfRK9TAjHjJ82\n0ftmUPYgNcs9SZFiWZAE7iL9pBA8sRDRK6W2APzfAL4egAbw4wC+AOCdAG4F8GUAr9Va70WcB4VC\nwRkq56oP6ooKoaXYaDQMYXQ6HUMulB4oP3AFqu9cJJpZrexZEFeuilo/EDV7iGo7s4H2er1ArVdm\n2KSGHqdWrbTyablzEGYf+f0wft4VQ2+fzxdeKTGL7BWFZT3by4S02G3rPo268eO5b7o/VL7hMfMi\naaTuwqJRN78N4G+01l8D4JsAfA7AmwDcp7W+A8B9R+9TpDhrSJ/tFGuDuQuPKKU2AXwcwHO1OIlS\n6gsAXqm1fkopdT2AD2qtnx92rnw+ry9duhSoGEVrXhbzCNPNKf3I1L/MJaO1Ng5BuVDJZ0HOqu/O\nY0lGLVKKe42oa4d9hvebETfFYhHlctlIN5RqZJ4avndJN76+yW2u+2vLNGFtD9tuX4c4amvsRQrL\nfLajCo+kOF0sEnmTRJxG4ZHbAFwG8AdKqW8C8DEAPwvgWq31U0fHPA3g2qgTccWq1MuplbMQOHCc\nM8YXbUJCJ5mPRiMTJin/eE0p09iIq8VHkY6tr89K5FHXiaPRR2n1vG8kfkouPIYri7mdJM/BQoao\nyuLfMsQxrAqYr40rxNKe7dGlKp79wZc7913zu/FyiadYHs4yqS+CRYg+B+BbAPy01voBpdRvw5rK\naq21UsrJREqpewDcA0ycfjJ1wdFnjSUvCYbE7NJsSRoknlwuh3w+H9CdpUUvrfwoP4BPI44iqCgr\ndVanbdzjXe2z2y1nPsVi0cTQ81oyekY6VwkW+KhUKuY8HFjt6Bq7TKDs0zKwjHUJAkt7tvO17WW0\nx4tf/9KD5vWv3PaiE73WecT4ld8Suj/7wX86pZYshkWI/nEAj2utmabuLzD5MTyjlLpeTG+fdX1Y\na30vgHsBoFwua7lAida2nfjLF4FBcOEPwwMrlQqKxWIghJKOQIZbsk6rvZBKntPGrNZnHEvdDssM\nczy75Im4kUA8rlAomLw/lUrFSDasZQtMQlD39/eN49ruR6FQQL1eD5xHzgIYR897HZaKehZIUj+h\n2PmlPduVa24+kRAgSfC+bSnxA7mbb/LuGz32eOhno0j+LGFuotdaP62Uekwp9Xyt9RcAvArAZ4/+\n3gDgzUf/3xvnfDKhFbMdUp+3qxC5SI0/eoYIAhMikpWc5OAxHo9NsXGZ18bOke7pe+B9GMnGJSCf\nX2DJBGbuUaVSCRA0F0vl8/nACtV2ux3wncjz5PN5sxoZgMlYyXsqZ1j2OgmeY9b7I++177V9/BwD\n81Kf7RSnjzCCP49YNI7+pwH8iVKqAOCLAH4Mk0iedyml3gjgKwBeG3USprCVsgKX3ff7/UChChd8\nMgtJn4umbMnHlQt9XpLnbEKeyxWmOa90E9auWQcekjQTjVG2YQI4rh52yS32uVwyFoleWvR2jv04\n/fD1KWzA56Ain4F2u+09bwiW8mznLk9fO9XmU5w2FiJ6rfXHAXyrY1caZpDiTCN9tlOsExKxMvbw\n8BCtVmvKGqbDlJpxHI1Xlu3r9/tmwRSlG84KuAjI1p/jRLEAx9YkHb65XM5YxTxezkikb2ARuGYf\nLnnCFTUk33MhFF9zpTDvCwDjv/CFUtLHwYpR8nwyN45vsdW8spRrdkPnMmcndDRnMhnTn1XhJCz4\nX7ntRU6dXu5fJr7868GwxFt/5WxGr0Tp8hLZD/6TV6dfhRP25x753NS2n707XpriuePol4lsNqup\n8xIkZVdysTBQlgCOJYl8Pm9CN2W+Fi69Z1w4zx8l3UiHb7lcNn4AeR2tJ5WO2u02Wq2WiUCRg80s\niOMH8EUi2Z9lrnhW25IFWOQAwFqvXMFqO4ztlAmUyBihQ+lGniOs/bPcC3uAKxaLqFQqKJVKJgMp\n8eijj6Lb7a4kfvMsx9Hb5G7jLJC91OpnIfkkwUXwxM/e/Sge/lT0s50Ii15rPVUFSFptcYhAHkNd\nmZakjKXncXLG4Fs85QItR5JkvV5HuVxGsVg0mTDZnm63a9IvyFmJz5kcp4+uiJyoEE77eDq6ZcEQ\nnleGUdoL1OR5pYNcRkcxtFLmtJllYItyusptclBnUfJKpRJIp8EBKcX5xFkldyCc4GdFIogemCZA\nlxVvT9l9ZCBJiOd1kaEdzWO/tiEdfLL4dLFYRKlUChCMXCBkO2l9jtU4DtdZrF8f4bN9UsaSx4R9\nzm6rbanbg2ncfvE4+xr2dtv5K2dvtVrN1KSNWgGdIsV5QmKIHvATir3ftzjGZyn7rGj5OfvcPtmD\nFistdKY11loH8rRTv6YsJAcV3yBmX9/XVu6zC4v7BkT7WnY7wohYXs93f6MGyrgDh+saYe/tCCqp\nxcvV0WGRQylSJBVved7XAliOZZ+WEkyRIkWKNUeiLHofXKsfZ1kEQ6vUJw1FXdcGdXceMxqNkMvl\nApYxE7Lxz861HmYlu6xYrbXxDTD+XeZ3t5O/uSKJfBKIb2bEmHRKVVKWoiRi98v12r6m77quNkSt\na5CVwQ4PD42UI7+H81BK8CSwCmfrd3xqet3Bf/uG6qm3I0mwLXu+B4Bn9JOxznGmiF5KFXGO52cY\nAinzuJCsZE70KEiJRKYJGAwGAScscOzslaQ4D6RfoFKpYHt72ziCubKXET6tVgvAZDUrK0K5SNwV\nKipJmH3hilmmRuC5Op0OWq0Wer1eZISSqy+u97Psk5DFTcbjsRlwpQM21eiTDxfBy30nQfbqm7/O\nuV3/82eWfq1lQBL8rEgM0bscrZlMxqxsBSZkxzj5sKLPJIZ8Ph9Y3i9//Ey9y3J2MirG1R7bApaE\nPhqNpqxUO1olKhLGdx8IphIulUqm6LZM1tbr9UxIIaOJ7GLbYY5s+cckZRcvXsTOzg62trZQLBYN\nqV69ehVPPfVU6CAWd8bliiKK+3nbAU+CZ44jYHLf9vZOrTbIqSL7dzeE7h9/ezxr7yyAA8GyCN9H\n8knGj33hK1PbHv3+fqzPJobogekfOpNm0YKlVMHc6HS+yQU90pqrVqvY2dnB5uYmarWasYCBSUhh\nu93G/v4+AARSIcs2+GQPeYwrP07cSB4f4cv9doQLP8OBkAvCZH55n9zlI2U586nX6wCAzc1NXLhw\nATs7OyiVSgEH5+7u7pRcFQVfH125dMI+43PQszD8xsaG6UOhUMBjjz0Wq32njcZf3+7cvvGaRyM/\nG0XyPOaskP1/+4ZqqFV/3uEi+VmQWKKnBVsul7GxsQFgEkKnlDKWOFdkttvtQBItWraVSgX1eh0X\nL17E1tYWCoWCIatut4tSqWSiZWTZO4koEguz2uN8Xh4XFi1Dv0Cj0TDHUFJhXDwHK7t4tyRDl9Wc\nz+fNwq9yuYxqdWI1bWxsmMVQg8HA5Ixpt9tebT6qz3Igtknc1WZXBJLLxyFnPPV63cx6crncmYuj\nb/z17bHIPg5Ssgd+76v/4Ng62XbP3f9LYGtSZZtFkUbdpEiRIsWaI1EWPWHHblOj52IYLk6i1cdY\nabsoCeWIUqmEarWKfD4fWMjU6/WM5CGtzDiLe6K2x4lqsV+HgTMP4LgQi51+mZo8s06G+QGkZV0u\nl1Gr1VCv143zFZjMoA4PD9HtdjEcDo3Mtbu7i1arFVg3EHYvgGOZiSkKAASc45yVUI6TMzR7HYTr\nO5IzKpkSOazkYZJBWWdRy/6sWPPEaUfY3Pve/wsA8BPP+baFz5U5+t24cLhgvqU/eP4tC8k3iSR6\nACayRdYqJbFRaqBUkcvlTA574Nih2u/30ev10O/3AylzAZgcN/1+fyoEL04YZxS5h4VP+s4tU+za\nq3alfENC5yBFkpP9l05l2Rb5R6KXOWskEWcyGbPwq91u4+rVqwCA/f19I5e5chG5BpZcLod6vR6Q\ng+zBWvpM6OS2pRzf/dN6kkaj1Wohm82aASOTyRhHe4oUJ4Uwkuf+Rcl+ESxE9EqpnwPwPwPQAD6F\nSc7u6wG8A8AFTGptvl5rPfCe5AiuHzKzKsoygCyOwdhx0ZaABQhMLNv9/X1ks1n0+31DYMBEoz84\nOECz2TRk72uH6xrSWrfDE+0+uSKK7NeMEGKMPInKHogksY7H4wDRu9qbzWadeec5C+Bxw+HQDJyy\nZiwt7Xa7jWazCWDiuKbFHcfpTKLnzGFzcxPAMdFzdsXwSHnPwmZD9qxpOByi1WphOByaWSAHq1mx\nzGfbB2mt+xyzPoy//clYDtmkYO8NxwnStt++/Pj80QeeY17nvvOrgX3LsNaTgD94/i0Ago7ZK58u\n+g4PYO7slUqpGzHxaNylte4qpd4F4K8AfDeAd2ut36GU+i8APqG1fmvYuTKZjGbmQ2u7ySUDwEg2\njOkmITECxy4kImUbflYWwOZsgbHwQNAZ67JOAX+SLp/j0AUex4iijY0NbG5uGgcxY+IPDg7Qbre9\n1m1YJE0ul0OlUjHO7FqtZhZcUZIBgGaziW63awYGm2yZ5VMOPrJAuM/qlhJasVjE1tYWdnZ2THvY\njvF4jHa7jYODA+NgJ2HPInsxekhGIAFAo9HAaDSKvcJumc/2rNkr53HEugg/SZKNJHmJRQlfkrsP\nNumfFKIs+pOy5h/Q96Ghd088e2UOQFkpNQRQAfAUgO8A8MNH+98O4NcAhP4YADdJ0HqVcgtlGqXU\nVD4T+xyj0cjoy1wwRXKgNMC/WWLBw8jVfu06Vg5EjHDZ2dkxYYyHh4dG3qCEJbNBhrWLn8lkMiiX\nywFi3dzcRLVaNQMnif7pp5824ab8LMH7z9h8YDqrpYQreoizB1YR44DBAZspjXu9ntln+xhcEUT2\nwMrnRa5r4PY5sLRnexbMo8knidQlfAQv989L9nFInsedFtn7sErJhpg76kZr/QSA/wDgq5j8CA4w\nmc7ua60pij4O4MZFG5kixWkifbZTrBvmtuiVUtsA7gZwG4B9AH8O4NUzfP4eAPfIbS6nnrQcuSqW\nWrhLMrBfy4gUX/SJXN7P412yhE+j5z45Y7D32+3TWgdkEq4ZqFQqAQuUPgZfBI9sm+xXJpNBqVQK\nSDebm5uBXDm03CmbjUajqboAsr32/Y47C+L3xntLX4BvdgUcW/RhzmzfvfDNNuJimc92CZW525Hi\n7CAJVnsYFpFuvhPAl7TWlwFAKfVuAK8AsKWUyh1ZPjcBeML1Ya31vQDuBSYafZi+Lck1TjSL6xyc\n1pPcZNk5uWKWpMNkZHEqT9GPUCwWA05Ayh52WmNZ7Jyv6Wfg522fQRSBhfkCeE6uZKUMQz8A/Rts\nq0vqsB3NYdd1bSNxj0ajqZWwsm+uz7rSTEcRufQPhK289WBpz/aG2llZbOdD906XE7zzHn/5wTA8\n+lt+Geb2n09+panzjkWI/qsAXqqUqgDoYlI0+aMA/g7AD2ASnfAGAO9dtJESYVaea7tt6fJ9sVg0\nenWpVAokJWNYZ6vVMqtBaZHa+jNXZNbrddRqNaN/S/3ZdnzyfDILpnRCAsf6OatkuRKU2ffC1q/7\n/T5arVYg2iibzRpN/ODgwFyb15HOaM52uLqU17Irc7l8EGGEPU/FqThwGQG5XG5qlhIDK3m2lwkX\nycvtsxB+GMnL/TbhU3+P0urnQe47v5ooZ2zSMTfRa60fUEr9BYB/AjAC8M+YWDF/CeAdSqn/42jb\n78c5n2tBjI8wjq7vJXHbmpNSD/dRNqFcQjkDgCHmTCYTKIfnIzWSIROoAcd1WEmqMtpHFiMh0TOK\niFWqOAPgGoBZHYrMCXRwcGDO1Wg0zHoDxscDMJFHDNfkDIBx9Yx0kn1otVomNTAHSZ5bLmCzv7Mw\nxJ2lhR1vRw6Vy+WZiX7Zz3YS8dC9L5rbuvfh0d96mdO6lw7XRRywNmwSJ/HHIffmD73Uu6/+jo8s\n1rAEYqGoG631rwL4VWvzFwG8eNZzufRz13a53xWOSa0bmPzIZeKtwWBgyA04LhAuozRI0PwcyS1M\nIye5SekFwFRBctlutknWtx0Oh1MLpny55W3IQYySERchUR5i1IvUxHkf2I5CoWDi3GVYqgx/7XQ6\nxscgC6XncjmMRiM0m83AdW2/hrwXPv+K7EucAYADLnP1MANntVo1s6VZsMxne5kYfucLvfvyH/jY\nKbZkPpxEDD2xKMFLXPrwlnP75Zfvz9SmZePh33lJcMNP3xfrc2mumxQpUqRYcyQmBUKc2HTfNlre\nTEu8s7MDYLJAiJLMcDhEs9nE7u4uAJjCGVxhy+NouXIxlZRupGUtLU65qpRSDOP2ARj5Bgg6Pvl5\nnn88HkdG17jgizHndWi5+2rMcptSk1S/tIYZd0/Zhhb6YDAw6QyYOoHnlxk0ZYFu2S4brj7H0eal\nc71UKmFzcxPb29uB1NalUgkPPfRQ5LnOAsKsebk//4GPGVnGp9XPItvc/vP3R+r0PG4d4LPmuW8V\nVv2UJT8jEkP0Lu3bfi1/2HI7CWprawuXLl3CpUuXAEyIigUz+v0+SqXS1Gpa5ruReV8AmJBMErSv\n0IkkzfF4bKQh6R+ggxdAoGiKjCaJkmbi3jdX24iw1MKAP/cOMLlfMmd/pVJBNpsNOKBJ6M1m0xlq\n6mrfPPtkeznIXLhwAdvb21NEL30LZxlRJO/DsnT4dSHxKDz3Zz6/6iZMIYzk+zfHSwKXGKKXkDHp\nYaF48ngmOqvVaiYX+fb2NrLZrFlRK/PmAMdkPhgMpkhJlgKU17Vj++V7aZHbPgQ7zNPuxyKE5/rM\nLNvlfpl3XikVyH/DgYIOY0Yr8R71+310Op2pGrkSvgHcNdCH+Wc46JPQ6/W6mYGUSiXjKwmrRJbi\n/IGOVlurNw7Yn/Fb88DpavSLWvESiSJ6krAMfZTRMCQhOw0viYIORllHVCmFwWCARqOB/f19Y3Hb\nqY1doYu+7a73sxBylCzjIsN54JslhW1nRA0wuX8kTBl2mc/nUa1WTVoDmS203W6j3W5jMBgE7o3M\nQcPtUhaLCyn/SEOAkU92umMmYEsSHvuLr5/advMPfHoFLTm/8EXWXH75fmIdsS4UH4tXqCUxRM9I\nF2CS4OvixYvY3NxEpVIxssfe3p7RxO38NIz2uHLliiGOSqVitGUmzSKJMSukTehhOrFPY44KBY0D\ne0Yx67lc1w9b4OQamBitI3PCuwqy5/N5k1lUWvScHclFYcBxvvtqtYpCoWBmCQcHB4EC43Hvt2wv\nr9NqtUzUlVyIxvUBSYGL5Lk9jOzzH/hYpHxzFqJuzgJmJfTy/3eted39F88srR13/MwDAKYte24H\ngAcQD2dfvEyRIkWKFKFIjEUPHNd6ZQTFNddcg3K5HLAwG41GYBUr/3MB0P7+vrHm5OIj6scyOkZG\n0tiWtIx1l3BZ3PPKK761A3HPKds4j5bvgoztd1V24nZXhJBMo5DJZEw8/nXXXYeLFy+agt2MfHrs\nscewu7trrHrXDCMs1l5rbZ6Nvb09dLvdQMUtYPLM2HWAzyrCrPrUml8NpDUv35+EZb8IEkX00mHJ\nHOhyCbvUfSVIeHJFJCFXgXY6nUAaXF8B7TgIk0XCjrFX6LoWBoVFxMhCIgwFpVQi8/LM0m7bwWz3\nyf6MryKXHBhqtRpuueUWAMBznvMcXLx4ERsbGxgMBuY72t/fN4VfoqQn1z7q8bx2r9cL5BgK6/NZ\nw299mZrytLb887fGWwR0FqBe9A2B9/rBT62oJX7Y5O47ZplkvygSRfS0vDqdDq5evYrhcBgIiWSB\nDBKaHV7J6kVMQ1AoFExOejoaZcqBODp4GNmEHWtvi7PSl9ewSY9Ox1KpZOq6AhOiPzw8RLvdRqPR\nMI5m6XuIMyDFRdxQzXw+j42NDRPmypDXYrGIZrPpjbwJu6Y9ELscuq6+claXFNz8A5/26vQ+HJO8\nf/9ZJ3ub4OX2JJL9WUNiiF5Ot0nMjG+XUTSS6AlGdHDxjqxgxKIjXNREa5JpD2YhvTjHu2LR8/m8\nuS6TnXGmYYdv2uchWVerVRMnLomegyBr4wKYkqOiYMshYYOOfbwLdKzLNMiZTAbtdhtXrlwx0o1r\n0I6KSLLbKLf55LRFnOQngZOIsEkC2T/6py/A7T/88Zk/5yP5FMtDYogeOP5BMg6bU3q5itSuPMT/\nUhIhqTIWn3q8LZnEkUrmJQnG9lerVdRqNbPalCmRGfIpo4B81nw+nzfrAy5cuGCIXlZ9suPOfQTt\nIkA7ZNElY7l0cpePgZ/v9XqG0MvlMhqNBjqdDq5cuYJnn30WwHS5QN+9nsUit+/hOsTR//ytL420\n6leBR//0BaHb5iH9dUGSZBsgjbpJkSJFirVHYix623rk4ifXFN3+TC6XQ6FQQLFYNBkUCcbQM25e\nSiXyPHHkiTiyDduUz+exs7OD7e1tVCoVE3HC7Ji9Xg+XL18OZKl0pdOlk1mmI5Ax4pQ/4sgWYatv\n5f8oS97VRtl/rTXa7TaefvppABOJhjJTu902Ofnb7fZU/vtF/Cby/oetuj2LeH4+G3j/hWEwkui0\nZRuXNT8v9IOfcso3mYNJhFzSYqa6/+KZKYds0ix4G4khesD9Aw6TG2TOcZbIk1IPF+8wpzvJnueJ\nQwJxSYJtJBlXKhVsbW1ha2sLtVrN+A1KpZJJ/tXr9bC/P1mc0el0Am2X56WMxRwylG601sYHwD8A\nU2GjcXVvV59mGdzkufr9Pvb29kzfmKteOsRdhUuitPW4kpqMBDrrRP++J6bz1Uji/94b3YnLTgpx\nSZ7HxZFwSOouZO+8HeOHZi+afpJIOrHbiJRulFJvU0o9q5T6tNi2o5T6W6XUw0f/t4+2K6XU7yil\nHlFKfVIp9S2LNI4kIEvcSaInubGMHy1fHsuwSiYwo/PTVxlJXnMeS5DRMVyhWSwWUavVTKKter2O\nQqEQIL0494DJ0ricXyZEKxaLZsZQq9VMxk5ftI2vXyRs+RfWT1cUkbTo2b/BYIBOp4NmsxnIGMoB\nl2UY6bCVbfXdDzvzp90O+/iQfqzs2Y4LF8mfR2TvvB3ZO29fdTPOLOJY9H8I4D8D+COx7U0A7tNa\nv1kp9aaj978I4DUA7jj6ewmAtx79j4V5iJX/+cdiIsBx7pVWq4XBYOBMD8zXPqKI6wi0LU1Ze5XO\nSQCmQMne3h6azeZUbViXFc1Uw1yoRGmK5FitVpHJZMx2ZuXktX2zo1n76nK+yv8y+skmbtbh1Vqb\nBW8cpJRSZlCW1v48JQdncdziFJ/tk8JpW/OzYB2dsU//3Muntl33lg87j+2+/zbzuvxdXzqxNsVB\nJNFrrf9eKXWrtfluAK88ev12AB/E5MdwN4A/0pNf3UeUUltKqeu11k9FXcdOPyyJ047ZtmOoGXZ5\neHiIVqtljmea4W63a0mwTnwAABXTSURBVIheQkbqyG2zwiU3sCarUiqQNZM5YjgAcaWuK5pIQpK1\nHEA4g5DhqfLYOKGJcfvm2s7ZC3BcepC+EvaZpRmZAE3mu69UKtBao9vtYnd31wxW8rvyhZ3a7ZH9\njdPH03q2F8H33vgip1W/SoK//Yc/HinfrAvJu4g9DJLck4R5o26uFQ/40wDombgRwGPiuMePtqVI\ncVaQPtsp1g4LO2O11lopNbO3Syl1D4B7jl6b+q7Acfw7rVRO56lPH103IFXQagSOV23KVAp2ZIpo\nRyytNy5si55ZNWndsj/8k0v4w87J2Hs6bXk/gONZgu3kdPXV9drn8I76PFfr0tFcq9VMLnguDAOO\n10XQp0BnssxOuru7a4qXu+6nrx2u7ctyvi7j2S6hsnA7kijP+Kz6eS358UOPhmrwq3DGzmLNJ9WS\nJ+Yl+mc4bVVKXQ/g2aPtTwC4WRx309G2KWit7wVwLwAUi0W9s7NjiF6mxiV58b0siyelAeq/UtqQ\nTlzC5UT0wXVMVCSKJBumyJXVlmRBEzunvvxvn5O5XNTRAjDAXw1LylSyvT6ijxPp4pJKstksyuWy\nCR1legZKSZSlOECzcLccGAAYbd7nQwGOnwm7cpdLrvL1OSaW+myXbrhZP/YTfsK4+dfd+u5ZwLLl\nGRfZJy3axoWkkzwwP9G/D8AbALz56P97xfZ/o5R6ByaOqoM4GmY2m8XGxkbAopc/YpmfplAomD9p\nJfd6PUOs8kdPUnAhDhnYA4P933Z2ynP7HIq+6Bcf2fNYrvDl/ZADnawNa8emu1674LLsbYe3hOs9\nneH0jQAwEU+yrQBMiGmz2USj0UC/359KzMbwUZYrLBQKJoxUXkPO9uw+zYilPtuz4qaP1Ka2Pf7S\n1rIvk1gkidive8uHI636697yYeAt4WQf1xH7zM8cX+va31muARBJ9EqpP8PEOXVRKfU4gF/F5Efw\nLqXUGwF8BcBrjw7/KwDfDeARAB0APxanEZzSy2pSLGIxHo/NdqYSqFQqKBQKgTwve3t7JnWurDrE\nUEYSkLQYo6xzIGhJ5nI5I0uQ5CjFyDqwPL/8LxEV2sl74jrPYDBwJnWz5acwYnYNcFH3wTVgcCbF\nBVCcvXDxl8w6ym1ylqaUMnIUSV8OUiwVaBf7zufzGI/HaLVaziinuDiNZzsM0pp3EfxpQ+Wm6UAn\nqGjLKuCLqLFR/q4vOck+iuQludvbl0n2caJuXufZ9SrHsRrAT83aCP74pV7NhTXMYAlMasBubW2h\nWq1CKRXIRV4oFLCxsRGoVJXL5ZDNZo3sweyXAAKWf5jmy2szmoQWpYyiYc4aXxplV3/l/7BjZPs4\nOPE9Qxkp4chVtiyVGPca8jqu967zcHbBfUwTzOvbMwxuk6mk6UPhGgf2gYP/xsZGIGNnpVJBLpcz\nOXIoD0k5J64VfxrPtg8k+bgE//Dvhkdy3vFTi+Usd5E8t6+S7B/5428GADzv9f+8sjbExawhlD6S\nPwmkuW5SpEiRYs2RiBQI4/EYe3t7ActVSi20WBk9Q5mEFv1gMDCrULnKEoCRWVjEmjIOEG+qz+yT\nwMSSZMFyrsAFjh2JnCn4JBlfREhUxI+04BmzzlkG49V5f4jhcGh8FrZcJc+7aHSKnWrZngHYMxc6\njeW9cNXtZV+58IqrjIHjYiu8ftj9DNt2Wig81V7I4RpXn3/4d18ys1Xvs+JXCVrwYdvPgnWfNCTi\nmx6Px4GCFCRhm0CUUgFtVkaZkJSr1arRcyuVCrLZrAlxZDlBfiZsKb1SyiRL47k2NjZMegG5olUW\nvQhzqMaBLyook8mYwYxEXygUAguT5P0jIWp9XEBbSlVh0TVxUhHI/a7EZL7BzV60FiUtcWC37zfT\nKtjbXedIMkjktoQjCT5KtlkX+Ejeddy6k/2pO2NPA/poZaS9jWRByx2YWKu0YKkBHx4eolarYTwe\nm+pGAMyqS84OZAGQOBa2Hb5HXZ/L9YFJ1StpOcch+KhIGJdWns1mjSNa+g3kmgN5TUbASOetrz3y\nGvIeAce6uh0Kymu6ru0LGbUHAF87eCwdtVKLZ6jpYDAIFFvxraQ9K0hqZM1p6fNxSV4ef9bJnmRu\na/XLJnkgQUQvycgmAhmaZ8fVA8cRMdIxCBz/+GUeFUncUZkNWZWKYBy7TClMicROsRBGqK730tp2\nHUPJplKpBCJQGLNuSzSUl1zns53QXPhUq9VQLpfNQAJMpKlmsxlIKeyTvFwDgb3dvje+tgEwDtfh\ncBiYtUhLX7bJ5YidI47+3ECS+DpH3DzxJr/T88Y3r34dw0kQu41EED3hI0dJEAyhtPVgRtXIEM1C\noWC0/L29PbTb7cBUPyoEkgMMj+92u4boOTBxthAW4RK1klO+dhGfTBbGNQQATDF0qYEDxyGYnIHY\nFjVB8qzVatjZ2cHGxgY2NjbMQDIej9HpdPDss8+a/tvn8c1gwo6xj/dF90gfgEv/9+VAWjfc8VMP\nnLh8k4TImlkQ15oPI3nuTwLZnzQSRfQu2ERAcrMtRurw1G+BYNm+TqeDVqsVKKDNz9rXIyR5swiK\na0WmbzWni8jlAq44xCQHNbscokxolslkzGyn1+uh0+kYwpft4+dpxQOTsNVLly5hZ2cHW1tbxpnN\noi0cRF0pFmzZxvXfhj2jsN/bx8XR9aOuddYRRvaLhlamWH+k4ZUpUqRIseZIjEUf5aQDJlJMuVw2\nYYUEnY7D4RCNRsNY7TJ9LxdfyQgUlzVqt0WGY9rtdb0m7OgduYSfi4rYJp5DXkNq0pSLaKnLfufz\neeO7aLfbAGCscLliV56XbWKOmgsXLmBnZ8ckGeO9LRQKGI/HyGazgXw9cbT3MEva5YPwSS9xZwXr\ngod+/1untt35xo8CWF/L/Xmv/+eZ5Js4sk2UZHPekBiiB/xOOpIeiZ4hhnJ1KmuRspoUzyf/pPM1\nipTiTvl9AxQJmtkamcCrXC4jk8lgMBjg4OAArdYk2oLx5dTjOTDIdAuUp9g/roqlli0dxBxEJMkz\nhUM2m0WhUDBEzzKM3CfTO3DQsBOOxdXg42KZhC2/k7Mk3bhInttJ9knDC0I49+Me7s7edWfg/fiz\nDxny9hH+WY+wWTUSQ/S+H6drwRDj5Wl5MseKLB8IhDtc5yUAV14Zez//FwoF1Go1bG5uYnNzEwBM\n+oZOp4PRaGR0b/aBuV24UEs6lFnkXM5YJCnLtMW05KUWz6gazjA4+NCXQQc0z3NwcIDLly+j1WrF\nqrcb18oOc07Lc7gGY992+/1ZIvg4SCLZh5G8CzbBy+3jzz4EYH5Cz912S+D9Le+cJBb9yg+mJQOA\nBBE9ME0UdnSNzOEic9rQcmZIocxqSbgcf67XcSQkl9PQtcCJMxCm5wVgIlpowXNNAC35arWKra0t\nMzBQPuHiIFluj9e2o1D4P5PJoFKpYHt7GwCwsbGBSqViskHy/nERmlxMBkzWCBwcHJhZhE30sg32\n/fDdN1fElAuLOFeXseo3xelCkv0ssAnexi3vfMJL9uch2oZIDNHbESouMmBcOy1QWqpaTxZcjUYj\ns3RentPO/R51fb6Pa7GGDQx25AjbeXBwELCSgeNC2VLqyWazGAwGUwMegCkpyg6dLBaL2N7exs7O\nDgBga2vLZP7M5XImRLTRaGB/f99E6ciau3ZRctmnuJCrjF0JzWz/hO8eurbbz8lZ1uzvfONHvfJN\n0qz5JCCK5Ikb3/xho9mfJ3KXSKNuUqRIkWLNkQiLntILJReZdlc6ARldQmuYC4e4LP7w8NCkEwaO\nI1mkc9LnjJVyUZhzNmwlp719NBqh2+0GYtyB40Ip3W43sOpXzmRobQ8GA1NInKtv5f3wXZ+yzcbG\nRkC6kVa1XDlMZ7Ys/sEkcq4ZEe+ZL+JIa22+R85SyuWyySUPTKKD5CK2WZ3iYRLQWbXsabnTsrct\n+d0ff1ng/c7b7j+dhs0InyPWh1llm7jWPHGSlvzmP1yY2nbwbVdP7HrzIE7hkbcB+B4Az2qtv/5o\n228B+B8ADAA8CuDHtNb7R/t+CcAbAYwB/IzW+v1R18hkMtje3g5ILgyLlPlMGFlCp6vMO18qlVAo\nFMwKUp6XkSMHBweGsOJgnnA/SS5sI52u0p9Ax6nM/MiBodPpYH9/3+jlvAftdhvdbncqGZtLrmD0\nDu9LpTKpW1ooFMx1ZI3dRqNhiF6mcuBA4pJVonTwXC5n/BH1et0Ujcnn84GFV0wrEfc+2/fbdozP\nIt+cxrMNAJd/8mXO7Zf+i5+kowhebl8V2c9K5j7Mo80nBS6S5/YkkX0ci/4PAfxnAH8ktv0tgF/S\nWo+UUv8ewC8B+EWl1F0AfgjA1wG4AcAHlFJ3aq1D2TWbzWJzczNA0CQke4k/SVKSJ+uUMh8MtXvq\n0FpPkmIxkyUwXwx4lFVvf47WN1fVyuPt3CxKKWNZM3YdOB4wOCMJqzNrt0vWp2V7eO1Op4Pd3V0A\nE6JncXF7JS3PO0vUklIqUDScdWLpkB45ltvbg1bYQDJrZE0I8f8hTvjZHl2qevdd/smXhZI94SP5\ns4ZlEvroS1+JZdWPvvSVpV1TwkfwRJJIHohXYervlVK3Wtv+q3j7EQA/cPT6bgDv0Fr3AXxJKfUI\ngBcDCH2aM5lMIP0uLXFmhZRFw2X+cvl5pkbwZV+MCsObxaqMQzAkVMpKYcfJ67PPrnqwdlijTYw2\nSTJWn/eDkT7dbheNRsOUAGTEDUk+jjXtg1LKpIzmTIKvGVbKhV12QXCfk3sW56+8B/zvm8WdxrO9\nKNaF5E8bJ0XwQDTJJxHL0Oh/HMA7j17fiMmPg3j8aFsoGHMu9WnWHJXRHr6VmTLsUtYqZZy6JDEf\nfFpz2P4ozBKyyYFBFvmW4KBhSxX874pUoj+D/WbOf6b45cIr5sXxkbxPxrL7xjYwvl/6XDgraTab\nZpEYi7lHZcP0wSdZyRDbTCbjvJ8xsfCzvSh23nZ/KNknVaM/DZwkmc+LpFnyxEJRN0qpfwdgBOBP\n5vjsPUqpjyqlPrrADzFFihPB0p7tbnv5jUuRYkbMbdErpX4UE0fWq/Sx6fUEgJvFYTcdbZuC1vpe\nAPcCQK1W05lMxkSgdDod44SVUSBStpFTcnt1KZtD61ieJ44Wv0z4nIa+Y8PaFDXrsI9lamHeP1ad\nop+DM5+ooimuxWZh0FobC57Hc4YhU1T0+/1AdS5fH+P0mc5nlh2kXJXNZgMRT3GwzGf7+d9YmupQ\nHF1e4jxb7UnEwbddXWmkTeYodQkAqFY8W30uoldKvRrALwD4F1rrjtj1PgB/qpT6j5g4rO4A8I9R\n52PuFblQh1EmdLwCx85NKdkACETi0JELHBM9ZR1frhurb4H9ceQDF4lHnZ9YZLCx5Rr73NIZDCCQ\nA8iVu8bXpjAntO0b4EAiybXb7QauyeMLhUIgtHKee0GJplgsmoR3xWIxEHr77LPPxj7fsp9tAPhP\nv/BW8/o3nvuC2G1JkVysQqKRBD8r4oRX/hmAVwK4qJR6HMCvYhKJUATwt0c/2o9orX9Sa/0ZpdS7\nAHwWk2nvT0VFJRxdw+SqAWCW+tMadZGQJAbqvHQ2ymPsEEGfE9ZnpUYRt48EXU5B+zO+60rdO85M\nwLXPvgf2uZYxm/G1h6X+OBDTUc54epKwTOxmF0mJe32Z8K5UKhmyl6G6sgau9fkTf7ZTnA+8/BOD\nqW0f/qaC48j5sAjJA/Gibl7n2Pz7Icf/BoDfmLUhw+HQWJxcim8XfLaJSpJhSGSF1zq3LeIw+ML9\nbIua7+0skLNEsoSFFsY9h8+pGvbedXzUAOg7n/zustks6vW6yeFDEu50OsaB7oqMioIkcaa+yOfz\nAWKXid8c7T2VZzvFesNF8ty+TLJfBIlYGTsajbC7u2uiMeQKUBe524QQFU3Dz9hkav/Jz7jkDBdh\nyEiTfD5vQkSZZI3VrWQJQ1cf7JlIWF/kZ3zHuc4TJie5PhM2CPruh/ShkNDr9Tp2dnZw8eJFE0sP\nTCQ6RsjwPs5C9nK2Ql+MUpO8OjIkN+z5OC2sk2Tz5L+d5I254T+cz7wxEj6SXzYOm82FrPo0102K\nFClSrDkSZdHLaAxfJIhEXM2Z+2ytllan1HSZT8deherT4AGYBUL1et0s+y8Wi2ZxUiaTMYuTwmLV\nwxDlS/BZ73Es5Fkcz1HHSQct72m5XEalUkGpVILW2iyYkikXfBE+ruvJeyD9OupodXEulwtU6Fpl\n+O5Tn6qshTVPK97ellr1fixbtjk84hAJrePNVhNB9OPxGI1GI1A4w04RABxLDD4Jxwc7KgSAKchR\nrVaNzMK2cPWmJGUfweZyOVSrVezs7KBer5uEauVyGUopU9qQuWvsds/qfPTBRfRx/Q88ftbPRLVB\nkvZwOESr1TJ5e4AJ0cvFWnHb77pnJHOmqpaDehKkm7MMF8nLfSnZTyMp2jyhlhF9sXAjlLoMoA3g\nyqrbckq4iPPTV2D1/b1Fa31pFRdWSjUBfGEV114RVv1dnyaS0NdYz3YiiB4AlFIf1Vq7qy6sGc5T\nX4Hz11+J89b389Tfs9TX1BmbIkWKFGuOlOhTpEiRYs2RJKK/d9UNOEWcp74C56+/Euet7+epv2em\nr4nR6FOkSJEixckgSRZ9ihQpUqQ4Aayc6JVSr1ZKfUEp9YhS6k2rbs9JQCn1ZaXUp5RSH1dKffRo\n245S6m+VUg8f/d9edTvngVLqbUqpZ5VSnxbbnH1TE/zO0Xf9SaXUt6yu5SePdX+21/m5Btbr2V4p\n0SulsgB+F8BrANwF4HVqUptzHfHtWusXiHCsNwG4T2t9B4D7jt6fRfwhgFdb23x9ew0m6X3vAHAP\ngLdiTXGOnu11fa6BNXq2V23RvxjAI1rrL2qtBwDegUltzvOAuwG8/ej12wH8jytsy9zQWv89gF1r\ns69vdwP4Iz3BRwBsKaWuP52WnjrO67O9Fs81sF7P9qqJ/kYAj4n3p1KHcwXQAP6rUupjSql7jrZd\nq7V+6uj10wCuXU3TTgS+vp2X7xs4H309b881cEaf7UTkujkH+Dat9RNKqWswKWjxeblTa62VUmsZ\n/rTOfUtxfp9r4Gz1b9UWfew6nGcZWusnjv4/C+A9mEzrn+HU7uh//Hp3yYevb+fi+z7C2vf1HD7X\nwBl9tldN9A8CuEMpdZtSqgDghzCpzbk2UEpVlVJ1vgbw3wP4NCb9fMPRYW8A8N7VtPBE4Ovb+wD8\nT0cRCi8FcCCmweuGtX62z+lzDZzVZ1tWU1rFH4DvBvAQgEcB/LtVt+cE+vdcAJ84+vsM+wjgAiZe\n+4cBfADAzqrbOmf//gzAUwCGmOiSb/T1DYDCJBLlUQCfAvCtq27/Cd+btX221/25PurL2jzb6crY\nFClSpFhzrFq6SZEiRYoUJ4yU6FOkSJFizZESfYoUKVKsOVKiT5EiRYo1R0r0KVKkSLHmSIk+RYoU\nKdYcKdGnSJEixZojJfoUKVKkWHP8/5dnSY0tr9jmAAAAAElFTkSuQmCC\n",
    "text/plain": [
    "<matplotlib.figure.Figure at 0x7f3eb801dd30>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "img,mask = dataset[12]\n",
    "plt.subplot(121)\n",
    "plt.imshow(img.permute(1,2,0).numpy()*0.5+0.5)\n",
    "plt.subplot(122)\n",
    "plt.imshow(mask[0].numpy())"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Model: UNet"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
    "# sub-parts of the U-Net model\n",
    "\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "\n",
    "class double_conv(nn.Module):\n",
    " '''(conv => BN => ReLU) * 2'''\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(double_conv, self).__init__()\n",
    " self.conv = nn.Sequential(\n",
    " nn.Conv2d(in_ch, out_ch, 3, padding=1),\n",
    " nn.BatchNorm2d(out_ch),\n",
    " nn.ReLU(inplace=True),\n",
    " nn.Conv2d(out_ch, out_ch, 3, padding=1),\n",
    " nn.BatchNorm2d(out_ch),\n",
    " nn.ReLU(inplace=True)\n",
    " )\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class inconv(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(inconv, self).__init__()\n",
    " self.conv = double_conv(in_ch, out_ch)\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class down(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(down, self).__init__()\n",
    " self.mpconv = nn.Sequential(\n",
    " nn.MaxPool2d(2),\n",
    " double_conv(in_ch, out_ch)\n",
    " )\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.mpconv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class up(nn.Module):\n",
    " def __init__(self, in_ch, out_ch, bilinear=True):\n",
    " super(up, self).__init__()\n",
    "\n",
    " # would be a nice idea if the upsampling could be learned too,\n",
    " # but my machine do not have enough memory to handle all those weights\n",
    " if bilinear:\n",
    " self.up = nn.Upsample(scale_factor=2)\n",
    " else:\n",
    " self.up = nn.ConvTranspose2d(in_ch, out_ch, 2, stride=2)\n",
    "\n",
    " self.conv = double_conv(in_ch, out_ch)\n",
    "\n",
    " def forward(self, x1, x2):\n",
    " x1 = self.up(x1)\n",
    " diffX = x1.size()[2] - x2.size()[2]\n",
    " diffY = x1.size()[3] - x2.size()[3]\n",
    " x2 = F.pad(x2, (diffX // 2, int(diffX / 2),\n",
    " diffY // 2, int(diffY / 2)))\n",
    " x = t.cat([x2, x1], dim=1)\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class outconv(nn.Module):\n",
    " def __init__(self, in_ch, out_ch):\n",
    " super(outconv, self).__init__()\n",
    " self.conv = nn.Conv2d(in_ch, out_ch, 1)\n",
    "\n",
    " def forward(self, x):\n",
    " x = self.conv(x)\n",
    " return x\n",
    "\n",
    "\n",
    "class UNet(nn.Module):\n",
    " def __init__(self, n_channels, n_classes):\n",
    " super(UNet, self).__init__()\n",
    " self.inc = inconv(n_channels, 64)\n",
    " self.down1 = down(64, 128)\n",
    " self.down2 = down(128, 256)\n",
    " self.down3 = down(256, 512)\n",
    " self.down4 = down(512, 512)\n",
    " self.up1 = up(1024, 256)\n",
    " self.up2 = up(512, 128)\n",
    " self.up3 = up(256, 64)\n",
    " self.up4 = up(128, 64)\n",
    " self.outc = outconv(64, n_classes)\n",
    "\n",
    " def forward(self, x):\n",
    " x1 = self.inc(x)\n",
    " x2 = self.down1(x1)\n",
    " x3 = self.down2(x2)\n",
    " x4 = self.down3(x3)\n",
    " x5 = self.down4(x4)\n",
    " x = self.up1(x5, x4)\n",
    " x = self.up2(x, x3)\n",
    " x = self.up3(x, x2)\n",
    " x = self.up4(x, x1)\n",
    " x = self.outc(x)\n",
    " x = t.nn.functional.sigmoid(x)\n",
    " return x"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Loss definition\n",
    "Use Soft Dice Loss"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
    "def soft_dice_loss(inputs, targets):\n",
    " num = targets.size(0)\n",
    " m1 = inputs.view(num,-1)\n",
    " m2 = targets.view(num,-1)\n",
    " intersection = (m1 * m2)\n",
    " score = 2. * (intersection.sum(1)+1) / (m1.sum(1) + m2.sum(1)+1)\n",
    " score = 1 - score.sum()/num\n",
    " return score"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Train\n",
    "Train it within **1 minutes** with GPU"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 7,
    "metadata": {},
    "outputs": [
    {
    "name": "stderr",
    "output_type": "stream",
    "text": [
    "100%|██████████| 21/21 [00:05<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.25it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.25it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.23it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.24it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.22it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n",
    "100%|██████████| 21/21 [00:04<00:00, 5.21it/s]\n"
    ]
    }
    ],
    "source": [
    "model = UNet(3,1).cuda()\n",
    "optimizer = t.optim.Adam(model.parameters(),lr = 1e-3)\n",
    "\n",
    "for epoch in range(10):\n",
    " for x_train, y_train in tqdm(dataloader):\n",
    " x_train = t.autograd.Variable(x_train.cuda())\n",
    " y_train = t.autograd.Variable(y_train.cuda())\n",
    " optimizer.zero_grad()\n",
    " o = model(x_train)\n",
    " loss = soft_dice_loss(o, y_train)\n",
    " loss.backward()\n",
    " optimizer.step()\n"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "## Test"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
    "class TestDataset():\n",
    " def __init__(self,path,source_transform):\n",
    " self.datas = t.load(path)\n",
    " self.s_transform = source_transform\n",
    " def __getitem__(self, index):\n",
    " data = self.datas[index]\n",
    " img = data['img'].numpy()\n",
    " img = self.s_transform(img)\n",
    " return img\n",
    " def __len__(self):\n",
    " return len(self.datas)\n",
    "\n",
    "testset = TestDataset(TRAIN_PATH,s_trans)\n",
    "testdataloader = t.utils.data.DataLoader(testset,num_workers=2,batch_size=32)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
    "for data in testdataloader:\n",
    " data = t.autograd.Variable(data.cuda())\n",
    " o = model(data)\n",
    " break"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 10,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "<matplotlib.image.AxesImage at 0x7f3dbe4ff438>"
    ]
    },
    "execution_count": 10,
    "metadata": {},
    "output_type": "execute_result"
    },
    {
    "data": {
    "image/png": "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\n",
    "text/plain": [
    "<matplotlib.figure.Figure at 0x7f3da1bf87b8>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "tm=o[1][0].data.cpu().numpy()\n",
    "plt.subplot(121)\n",
    "plt.imshow(data[1].data.cpu().permute(1,2,0).numpy()*0.5+0.5)\n",
    "plt.subplot(122)\n",
    "plt.imshow(tm)"
    ]
    }
    ],
    "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.5.2"
    }
    },
    "nbformat": 4,
    "nbformat_minor": 2
    }