diff --git a/W08_Generative_Vision/students/CIS_522_W8D1_Tutorial.ipynb b/W08_Generative_Vision/students/CIS_522_W8D1_Tutorial.ipynb
index dfbb5c5..50c01e3 100644
--- a/W08_Generative_Vision/students/CIS_522_W8D1_Tutorial.ipynb
+++ b/W08_Generative_Vision/students/CIS_522_W8D1_Tutorial.ipynb
@@ -1,9900 +1,9898 @@
{
- "cells": [
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ML2DwqwkVwfo"
+ },
+ "source": [
+ "# CIS-522 Week 8 Part 1\n",
+ "# AutoEncoders (AEs) and Variational AutoEncoders (VAEs)\n",
+ "\n",
+ "__Instructor:__ Konrad Kording\n",
+ "\n",
+ "__Content creators:__ Richard Lange, Arash Ash, Jordan Matelsky\n",
+ "\n",
+ "__Content reviewers:__ Ann-Katrin Reuel"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "exeRQO8LnRZB"
+ },
+ "source": [
+ "## Today's agenda\n",
+ "In the first tutorial of Week 8, we are going to\n",
+ "\n",
+ "1. Think about unsupervised learning and get a bird's eye view of why it is useful\n",
+ "2. See the connection between AutoEncoding and dimensionality reduction\n",
+ "3. Start thinking about neural networks as generative models\n",
+ "4. Put on our Bayesian hats and turn AEs into VAEs"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "cellView": "form",
+ "id": "NBdRadpsIQME"
+ },
+ "outputs": [],
+ "source": [
+ "#@markdown What is your Pennkey and pod? (text, not numbers, e.g. bfranklin)\n",
+ "my_pennkey = '' #@param {type:\"string\"}\n",
+ "my_pod = \"Select\" # @param [\"Factorial Ferrets\", \"Causal Crows\", \"Recursive Roosters\", \"Bayesian Bighorns\", \"Probabilistic Pronghorns\", \"Hashing Hares\", \"Multiplicative Mustangs\", \"Curiosity Capybaras\", \"Subspace Salamanders\"]\n",
+ "my_email = '' #@param {type:\"string\"}\n",
+ "tutorial = 'W8D1'\n",
+ "\n",
+ "# start timing\n",
+ "import time\n",
+ "try:t0;\n",
+ "except NameError: t0 = time.time()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "cellView": "form",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 320
+ },
+ "id": "vtPEm8gbshnH",
+ "outputId": "c9950faf-06cf-4bbc-93d7-9f4b10491058"
+ },
+ "outputs": [
{
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {
- "id": "ML2DwqwkVwfo"
- },
- "source": [
- "# CIS-522 Week 8 Part 1\n",
- "# AutoEncoders (AEs) and Variational AutoEncoders (VAEs)\n",
- "\n",
- "__Instructor:__ Konrad Kording\n",
- "\n",
- "__Content creators:__ Richard Lange, Arash Ash, Jordan Matelsky\n",
- "\n",
- "__Content reviewers:__ Ann-Katrin Reuel"
- ]
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/jordan/projects/.venv/lib/python3.10/site-packages/IPython/core/display.py:431: UserWarning: Consider using IPython.display.IFrame instead\n",
+ " warnings.warn(\"Consider using IPython.display.IFrame instead\")\n"
+ ]
},
{
- "cell_type": "markdown",
- "metadata": {
- "id": "exeRQO8LnRZB"
- },
- "source": [
- "## Today's agenda\n",
- "In the first tutorial of Week 8, we are going to\n",
- "\n",
- "1. Think about unsupervised learning and get a bird's eye view of why it is useful\n",
- "2. See the connection between AutoEncoding and dimensionality reduction\n",
- "3. Start thinking about neural networks as generative models\n",
- "4. Put on our Bayesian hats and turn AEs into VAEs"
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# @title Slides\n",
+ "from IPython.display import HTML\n",
+ "HTML('')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Y_mmmZQ0TIBi"
+ },
+ "source": [
+ "\n",
+ "## Recap the experience from last week"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "cellView": "form",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 518
},
+ "id": "xRPk6HG-Rj5N",
+ "outputId": "c91e5760-6742-4f43-b302-0b28bcf1364c"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "cellView": "form",
- "id": "NBdRadpsIQME"
- },
- "outputs": [],
- "source": [
- "#@markdown What is your Pennkey and pod? (text, not numbers, e.g. bfranklin)\n",
- "my_pennkey = '' #@param {type:\"string\"}\n",
- "my_pod = \"Select\" # @param [\"Factorial Ferrets\", \"Causal Crows\", \"Recursive Roosters\", \"Bayesian Bighorns\", \"Probabilistic Pronghorns\", \"Hashing Hares\", \"Multiplicative Mustangs\", \"Curiosity Capybaras\", \"Subspace Salamanders\"]\n",
- "my_email = '' #@param {type:\"string\"}\n",
- "tutorial = 'W8D1'\n",
- "\n",
- "# start timing\n",
- "import time\n",
- "try:t0;\n",
- "except NameError: t0 = time.time()"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Video available at https://youtube.com/watch?v=VHhtye5SwY0\n"
+ ]
},
{
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "cellView": "form",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 320
- },
- "id": "vtPEm8gbshnH",
- "outputId": "c9950faf-06cf-4bbc-93d7-9f4b10491058"
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/home/jordan/projects/.venv/lib/python3.10/site-packages/IPython/core/display.py:431: UserWarning: Consider using IPython.display.IFrame instead\n",
- " warnings.warn(\"Consider using IPython.display.IFrame instead\")\n"
- ]
- },
- {
- "data": {
- "text/html": [
- ""
- ],
- "text/plain": [
- ""
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
+ "data": {
+ "image/jpeg": "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E5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//Z",
+ "text/html": [
+ "\n",
+ " \n",
+ " "
],
- "source": [
- "# @title Slides\n",
- "from IPython.display import HTML\n",
- "HTML('')"
+ "text/plain": [
+ ""
]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#@title Video: Week 7 Recap\n",
+ "import time\n",
+ "try: t0;\n",
+ "except NameError: t0=time.time()\n",
+ "\n",
+ "from IPython.display import YouTubeVideo\n",
+ "video = YouTubeVideo(id=\"VHhtye5SwY0\", width=854, height=480, fs=1)\n",
+ "print(\"Video available at https://youtube.com/watch?v=\" + video.id)\n",
+ "\n",
+ "video"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "5x61BA1qPubi"
+ },
+ "source": [
+ "---\n",
+ "# Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "EuOTxAJdmhsl",
+ "outputId": "37725a62-5283-46a3-c89d-b607c09a1656"
+ },
+ "outputs": [],
+ "source": [
+ "# we need to first upgrade the Colab's TorchVision, mute output\n",
+ "!pip install --upgrade torchvision &> /dev/null"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "id": "uw7q7Z_ZPt66"
+ },
+ "outputs": [],
+ "source": [
+ "# imports\n",
+ "import matplotlib.pylab as plt\n",
+ "from tqdm.notebook import tqdm, trange\n",
+ "from math import sqrt\n",
+ "\n",
+ "import torch\n",
+ "import torch.nn as nn\n",
+ "import torch.nn.functional as F\n",
+ "import torch.optim as optim\n",
+ "import torchvision as tv\n",
+ "from torch.utils.data import DataLoader\n",
+ "\n",
+ "DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "cellView": "form",
+ "id": "LID483Ou-z53"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Figure Settings\n",
+ "%config InlineBackend.figure_format = 'retina'\n",
+ "%matplotlib inline \n",
+ "\n",
+ "fig_w, fig_h = (8, 6)\n",
+ "plt.rcParams.update({'figure.figsize': (fig_w, fig_h)})\n",
+ "\n",
+ "plt.style.use(\"https://raw.githubusercontent.com/NeuromatchAcademy/course-content/master/nma.mplstyle\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "cellView": "form",
+ "id": "rNg1RPFSH1Xc"
+ },
+ "outputs": [],
+ "source": [
+ "# @title Helper functions\n",
+ "\n",
+ "\n",
+ "def image_moments(image_batches, n_batches=None):\n",
+ " \"\"\"\n",
+ " Compute mean an covariance of all pixels from batches of images\n",
+ " \"\"\"\n",
+ " m1, m2 = torch.zeros((), device=DEVICE), torch.zeros((), device=DEVICE)\n",
+ " n = 0\n",
+ " for im in tqdm(\n",
+ " image_batches,\n",
+ " total=n_batches,\n",
+ " leave=False,\n",
+ " desc=\"Computing pixel mean and covariance...\",\n",
+ " ):\n",
+ " im = im.to(DEVICE)\n",
+ " b = im.size()[0]\n",
+ " im = im.view(b, -1)\n",
+ " m1 = m1 + im.sum(dim=0)\n",
+ " m2 = m2 + (im.view(b, -1, 1) * im.view(b, 1, -1)).sum(dim=0)\n",
+ " n += b\n",
+ " m1, m2 = m1 / n, m2 / n\n",
+ " cov = m2 - m1.view(-1, 1) * m1.view(1, -1)\n",
+ " return m1.cpu(), cov.cpu()\n",
+ "\n",
+ "\n",
+ "def pca_encoder_decoder(mu, cov, k):\n",
+ " \"\"\"\n",
+ " Compute encoder and decoder matrices for PCA dimensionality reduction\n",
+ " \"\"\"\n",
+ " mu = mu.view(1, -1)\n",
+ " u, s, v = torch.svd_lowrank(cov, q=k)\n",
+ " W_encode = v / torch.sqrt(s)\n",
+ " W_decode = u * torch.sqrt(s)\n",
+ "\n",
+ " def pca_encode(x):\n",
+ " # Encoder: subtract mean image and project onto top K eigenvectors of\n",
+ " # the data covariance\n",
+ " return (x.view(-1, mu.numel()) - mu) @ W_encode\n",
+ "\n",
+ " def pca_decode(h):\n",
+ " # Decoder: un-project then add back in the mean\n",
+ " return (h @ W_decode.T) + mu\n",
+ "\n",
+ " return pca_encode, pca_decode\n",
+ "\n",
+ "\n",
+ "# Helper for plotting images\n",
+ "def plot_torch_image(image, ax=None):\n",
+ " ax = ax if ax is not None else plt.gca()\n",
+ " c, h, w = image.size()\n",
+ " cm = \"gray\" if c == 1 else None\n",
+ " # Torch images have shape (channels, height, width) but matplotlib expects\n",
+ " # (height, width, channels) or just (height,width) when grayscale\n",
+ " ax.imshow(image.detach().cpu().permute(1, 2, 0).squeeze(), cmap=cm)\n",
+ " ax.set_xticks([])\n",
+ " ax.set_yticks([])\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "AeuJ4budZOas"
+ },
+ "source": [
+ "---\n",
+ "# Section 1: Supervised and unsupervised learning"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "cellView": "form",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 518
},
+ "id": "NMCMAipWKMeZ",
+ "outputId": "895ff690-ce79-48ea-9595-38b15b8b1035"
+ },
+ "outputs": [
{
- "cell_type": "markdown",
- "metadata": {
- "id": "Y_mmmZQ0TIBi"
- },
- "source": [
- "\n",
- "## Recap the experience from last week"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Video available at https://youtube.com/watch?v=Vw9MLfb4bi4\n"
+ ]
},
{
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "cellView": "form",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 518
- },
- "id": "xRPk6HG-Rj5N",
- "outputId": "c91e5760-6742-4f43-b302-0b28bcf1364c"
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Video available at https://youtube.com/watch?v=VHhtye5SwY0\n"
- ]
- },
- {
- "data": {
- "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDBoYFhsaGRodHRofIComIiAfIi4lKiIfLi41MTcqLS41RVBCNzhLPSstRWFFS1NWW11bMkJlbWRYbFBZW1cBERISGRYYLRoYLVc3NzdXV1dXV1dXV1ddV15XWFdXV1dXV1dXV1dXWldXV1dXV2NXV1dXV1djV1dXV1dXV1dXV//AABEIAWgB4AMBIgACEQEDEQH/xAAbAAEAAQUBAAAAAAAAAAAAAAAABwEDBAUGAv/EAEgQAAEDAgEHCgMFBQYFBQAAAAABAgMEERIFFCExUZLRBhMVFkFSU1RxoWGBkSIyorHSM3OywfAjNDVCcuFDYnSCkwckZJTx/8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAgEQEAAwABBQEBAQAAAAAAAAAAAQIREgMhMUFRFBME/9oADAMBAAIRAxEAPwCPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAX80dtQZo7agFgF/NHbUGaO2oBYBfzR21BmjtqAWAZUVC97mtRW3cqIl761WxueplT34d536QOcB0fUup78O879I6l1Pfh3nfpJq5LnAdH1Lqe/DvO/SOpdT34d536RpjnAdH1Lqe/DvO/SOpdT34d536RpjnAdH1Lqe/DvO/SOpdT34d536RqY5wHR9S6nvw7zv0jqXU9+Hed+kaOcB0fUup78O879I6mVPfh3nfpLo5wHRdTanvw7zv0lOp1T34d536Ro54HQLyQqe/DvO/SeV5J1Cf54d536SaMQAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXqL9tF+8b/EhINyP6L9vF+8b/ABISJhM2aq8XUXXYXEaesJG1rSLKXsIwhFmyiyl7CUkVGoqqtkQJq1ZdgsuwtyVzERFve9/Yp0gy9kv8TcUtPpiepWPa9Zdgsuw9skaupULljOZ5WJ3wsYV2DCuwvWFgqwrVPCtUyVQ8KgGO5imFJJpVDZKhrK1uF/rpA4kAGmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfof28X7xn8SEko0jag/bw/vGfxISYiGbNVURpVGntEKohGnjCVwnvCesIFlyWS5z+Uso9l7oi6jpVacjlGnRahyakR2o6UmI7uV6zbIhgvrV0o3V2fAvUePVr4m8yZk6O13NQ2iUUKaUREX4D9Er+WHMx1Kxvs5y4vy9TpIHI9qOTtQ0+WY29lkVPf0L2Q2pE1LyYklsrU7rrXVvqatfnWJYrThaYbbCUsXLCxzdFpWnhWl9WnlWgY6tMHKcf2EdsX2U2jmlipixMc3anuQRmADSAAAA9Rxue5GtarnLqa1FVV9EQ2icmK7DizZ9vVt/pe4GpB6ljcxyte1zXJra5FRU9UUrDE6R7WMarnuWzUTWqqB4BfrKKWB+CZisfa9ltq26PRSlJSSTPSOJivet7NS3Z6gWQe5onRvcx7Va9q2c1daKXaShlnVyRMV6tTEqJbQ3bpAxwAAAAAAAAbSDk3WyNRzaZ9l1YrNX6OVFMGqpJYH4Jo3Ru2OS1/Tb8gLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Qft4f3jP4kJOahGNB+3h/eM/iQlBpmzVXpEPViiHpCNAKlFA8SOs1VTSqIq22nET5WbKseGNUcifaVV+8q6VX6qp20z0axzl0oiKqomxEI1ieiT6NSuWyfA1Ce2xlyvKioqW9EVSs1bU41RyvZZdKJ2X06Sj1bjbdqNaiorlRbqqJpsbGuqWSv5yBzkfaztGtE230aP5mOzvk/WI6nlkw4nyIioq/aVdNradPqeeT8irUxsVdHOYrbXI1UM1sjnNVVcrnYbXX8kQck8jSY2VL7IxMVmrfFi0t1fU1WXHqRkussUsXsJ5wlYW7FFaXbFFaBZVpbc0yFQ8OaBEwAKgAAOrpZEybk1lQxEWqqvuuVL4I9ej5W+apsOfXK1Tjx5zNj135xfy1G9ynFnGR6OWPTmyLHIif5UsiKq7qfJTX5My9m8SR5tBLpVcUjbrp7AMfKmWZKtI+dSNXsS2NrbOd/qNlyQhax09ZIn2KaNVT4yKi6PW38SF7lHKyXJtJUJFHE6SR1+bbZLIjk/khsHZHw5MipVnhgfIqSy84tld2onys1P+0DXZVetdkyKqXTNA5Y5bdrVtp/h+qmPyI/xGP/AEv/ACN3yeyMyFZoX1dPLHUMwqxjtOLTpRPRV9jUckqd0OVUif8AeZzjV9URdIGXl6nZXxSVUCWngc5k8aa3Naqojk+SX9Lp2FjkJ+1qf3C/ma6jyo+jr5ZW6U52RHt77Ma3T17UOtyVktkVRNU06otLPTq5lv8AK6+lv9fFOwDjMj5IWpY97pGQwxImOV+lEvqRE7VMioyNDzb5Ketjm5tuJzHNWN2FO1LrpLeQ8sNp45IZokmp5bK5t7Kip2p7fQz+iaOrjkdRSSMljYr1hmS92prsv+6+4Gvpcjc7G1+dUjMX+WSZGuT1S2gu9X//AJtD/wDYTgWaVlAsbVlkqkkt9pGNYrflfSXeayZ4tZuRgag6XkzDHBTT5Qkaj1i+zE1dWNbafdE+pzR1OR2LU5JqqZmmWN6SI3tcmhdG6qfQDSVeWqqV+N9RJe+prlYieiIXarL809MlPMrZLOu2RyXeibEX+ew85JyrmuP+xilxW/atvhtfV9TfrWtq8lVkq08Mbo3Naixtt2tXX8wNHkrIbqiN8z5GQU7Fs6WTVfYiaLmTLyca+N8lHUsqebS72NbheibUS63L+Wr9E5Pwfs/tYreJ8fxFnkSrukY8OrC/F/otxwgazJeTpKuVIokRVVLqq6mt2qptm8m4Hu5qLKML59SMwqiOdsR1zJyRop8r8z9/Thw6+bu7V8jlW30YPvXTDbXi7LfOwGYzJcy1Oa4LTYsOFdSLrvfZbTfYbJ2QaZHLF0jEkyLZUWNUZivbDjvYzuVFc6mynBOyyyshYr0XUq3ciovyX8iwjsmVkmlstLNIutFR0avX/f0A0aUEi1GbtRHy41ZZq3RXJrsuzQptncn6djuakyhC2e9lajFVrXd1X3M7ktQLTZVmhkW72Qvwq3tW7Ful+2y/matejO3Pr9t+bvftv8QMDKWT5KWVYpUs5NKKmlHNXUqLsMU3OX8pQVDKZkKS/wBixWK6W11botq9FNMAAAAAAAAAAAAAAAABkZP/ALxD+9Z/EhJyEY5P/vEP71n8SEmopJaq9op6RxbuMRlpcxFFU8XCuKg5dGk42vyThjRzcKc1KrXqmvCrkVqr6IqHXPcaiWeJFq2SOSy6VRe6sbU1BGiq43RPc2yKqLb/AHLsDpUaqsa1Pipaq8ptqHIuBWq1tlW97oXKV7E+85V+Bl3rOw2WTI8UrGu1q7Tb4af5HXIcjk+RedR7U1LoQ6OPKUSrZVwr/wA2j3LVy6jNFjyxyKl0VFTah7uaYebHmxcPKhFtUPDkLynhUAiAAFAAAbDJGWZqN6uiVFa777HaWuTj8TZdO0K/aXJkfOa7YvsX9LfyOdAG2r8vyVM0T5Wt5qJyK2Fq4W6Oy/tcx8tZUdWVCzPajdCNa1FvhanZf1VV+ZggC5TTOikZIzQ5jkcnqim56yf+/StSnRHYcLmY9DltbFe2y3Z2GiAHueTHI99rY3udbZdVW3ubfInKSSjikiwJJG+9kV2HA5dapoXXsNKANlkrKjII3RS08c8T1RVR32XIqJa6OMp+XYYo5GUdKkDpG4XSOer3YV7EvqNGAAAAGRQ1slPKksLsL07exU7UVO1DHAHRu5Q0kqq+oydG6VdbmOtiXaqW4mJlTlC+eJII42U9On/Cj7e3Suj8jTgDa5Ky2sEboJYmz071usb1tZ21q6bf1qMqTlDHFG+Oipm06vSzpFcrn22IvZ9TQADMyTlKSklSWK17WVq6nN2KbZnKCkjdzsWTo2z60VXqrGu2o23A50AZ8eV5Uq86dhkkVVVUel2qipa1uzRoQ2DMs0TXJK3JzUlRbonOrgRyduG1vY0AAzXZVmWqzrFabFiumrZa2y2ixspcuUcrlkmye10y6VVkqta5dqp/+mgAGVlGtziXHzccSYUajI0siNTV6+pigAAAAAAAAAAAAAAAAAX6D9vD+8Z/EhJdyL43q1zXJraqKnqmk2nWWr8Ru43gJhYnHeYhc4PrLV+I3caOstX4jdxpMXXeXKOecJ1lq/EbuN4FubL1S9LOkS3waiDE119TlONt7LiX4cTmsrT885HI1qO1eqfE1rsoyrrcm6hbzp973T6IXE2WfTQNamm911qZLWMRb4k9zUZ4/an0QJWSbU+iE4rF5h09PVo1LtRVdtXQh5WVVuqrdV1nPdJS95Pog6Sl7yfRBEYxblby6OOZzfuuVvotjYUeWJGKiOXG3Y7X8lOM6Tm7yfRCvSk3eTdQrMVmEp087ZGo5q3Rfb4KXCMKblFVRXwSIl9f2WqX+ttd4rf/ABt4BuEjnlSOuttb4rf/ABt4DrZW+K3/AMbeAVpAAAAAGZR5NfNFPKio2OFqK5Xdqrqanx/22nnJ2TZqqTm4WK52tV1I1Nqr2G4yn/YZJo4k0LUOWZ/xRLWT8TfoX6uZaPJFMyFcMlV9uR6aFw2vZF+bU9LgWeqS3wZ5S874ePTfZt9jTZRybNSyc3MxWu1outHJtRe0txUMr24mQyPbtaxzkv6ohfyhLVKyNKjnsDEsznGqiJ6KqaQMIHQLkylpIo3VvOyTStxJDEqNwM2uXb/XYWqzJtPLTOqqNX4Y1RJYpLK5iLqciprT+uwDSA6DJ+RqZ9BnU8rorSq1yppu1OxrbfeVRkrJtJWVzoo+dbAkSuTEqI7GltKrp0aQOfB0mTaLJksrabFUPkdoSdLNar7f5W7NGi6KeG0WTqeXmKh800iOwvfH9lka39brbt1gc8DZ5byW2lrHQY/sXaqPcl7Md2rbXbT9DLV2SI3c2ucTW0LK1Uanq1van9aQNCDZ8oslpRyojH44nsSSNy68K9i/T3NrlbJWT6KfDK6eS7UVImKl0Ta52jX2ImwDlzMyrk19LKjHqjkc1HNe37rmqmtPyNhlvJtO2mhq6RX81I5WKx+lWvS/b/2rtL9YnP5GglX79PKsar/yLqT3Z9AOcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRcqPtUuTHJ93N1T5ojDJWBcoZKhSH7U9J9lzO10draPkjV+SoYsTs6yS6P8A4tG7GibYVvf6XX6IaSkq5IHpJE9zHp2tXs2LtT4KBmUeWaynbzMUj2Iir9hGJfEuvQqXN3yokmXJtEtTdZsaq5HIiKuhdaJ8LGH1zrLa4sXf5v7X529jS1lZLO9ZJnue9e1V1JsRNSJ6Addyqro2SRzLRwzxSxorJnqu7o0dvualuXLU86Q0EUccjebe9iusl0WyKtrX1mHk7L9RTMWNjmujX/hyNxtT02FMo5dqKlqMkc1saLfm424G3+KdvzA2K/4Cn/VHnkP/AH137iT82mo6QlzfNrpzWPHa2nF6jJ+UJKaRZIlRHK1W3VL/AGVtf8gMjkz/AH+l/eJ+SnnLX9+qP37/AOIxKSpdDIyWNUR7Fu1VS+n0FRUOkkdI5bve5XKtrfaVb6gOoy5Stny5FE/7j0YjviiNVbfO1vmYmV8uvinlp209O2CNysSJ0SLdqbfXXo2oaityjLPNz0jv7RLWc1MNsOpUsZ0nKepciK5IVkRLJKsTVkT5/wCwGVy5101m4UzZPs934Hnl1/iLv3TP5mpyjlKWqVqzOxK1uFFtZcPx2r8SmUcoSVMvOyqivsiXRLaE+HzA2tT/AIFT/wDVu/KQuU6WyDUX/wA9S23yVnBTSur5HU7Ka6c016valtONb9v/AHKbjlA5KelpaFF+2xOdmt2PddUb+JfYDngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGb0TUeGm+ziOiZ+4m+ziEYQM3omfuJvs4jomfuJvs4gYaKqXsqpdLLbtTYpQzeiZ+4m+ziOiZ+4m+ziBhAzeiZ+4m+ziOiZ+4m+ziBhAzeiZ+4m+ziOiZ+4m+ziBhAzeiZ+4m+ziOiZ+4m+ziBhAzeiZ+4m+ziOiZ+4m+ziBhAzeiZ+4m+ziOiZ+4m+ziBhAzeiZ+4m+ziOiZ+4m+ziBhFXOVVuqqq7VW5mdEz9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDCBm9Ez9xN9nEdEz9xN9nEDBwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAUwpsGFNhUAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo9dC+gFQY8fOO+7dS4sE2xfqg2GopafELgLfMzbF+qBIJti/VCbC/wA7fFwFvmZdnug5mXYv1QcoP53+LgLTopUS6otvkeYXqq6V7C6zNZjyvgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmT7q+h6PMn3V9AOr/8AT+GJ0320RXoy7EXvX+0vrq9ze8uIos3a9URJcaI1e1U7U9LEZU9U+NbscqL8OxdqbDrch17so001FK+9Q28kD3Kqqqpraqr/AFZfgZztj0R1I5Vt8ackLklFElExzETE6/OL24r6l9iMmTyXVHoiKiqipbUqa0L0OUJY783I5l9eBytv62UtOlby6dXr0vGa3fKmONlbIkSIiWRXImpHrr/kYOT2sdPEkv7NXtR3pft+BrlqHG35KQLLM+eeyU1MmN621uTSifz+SbTNulaO8t1/0U453SJlGCFaaRsjWpEjF7LI1ETWmyxDionOut/S6DMyryhqKqSRyvcjHOu1l1s1OxLar2t8zXQfeX0Ne3kmY44yAAVzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy/7q+h6PMn3V9AMQyMnVMkM8UkX7Rr0VvxXVb56vmY57ikVjmuTW1UVPVBCpJy3yOzl7543pHI9EVY1S7VfbTp7Lke1DlYuFUs5FVFTZbQqEjZE5aRVT2Quasc70VEVbKxXon10kcZSikZUStmS0qPdj/1XvdPgt7/M6c5iMZxvOTvJ99e5yo9GRstida6qq9iIbLlhSrQ0EFJFdY5Hq6WTUr3ppRFT+vuoV5DVq0lHVVE2imRUw7XSarN+qIavlbymSvVjGMVsTFVUxa1cvattQtbksRjmy7T6/kWi7T6/kc1ZAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5k+6voejzJ91fQDEAAV6jerXI5qqjmqioqdippRTscp5OdleKnrKZqc860VQ26Jhcn+Zfgn5KhxhJnITKtMlC2JZGMkjV2NrlRqrdVXFp16PyA5nljVMjWLJ8OiGmRMX/NKqa1+v1cpzJ0HLevhqK5XQKjmtY1qvTU5yKulF7daJf4HPgC7T/e+RaLtPr+QGQAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ9Xa3y0ntxHV2t8tJ7cSUQDEXdXa3y0ntxHV2t8tJ+HiSiAuIu6u1vlpPbiOrtb5aT8PElEAxF3V2t8s/wBuI6u1vln+3ElEBMRd1drfLSe3EdXa3y0ntxJRAMRd1drfLSe3EdXa3y0ntxJRAMRd1drfLP8Aw8R1drfLP9uJKIBiLurtb5Z/4eI6u1vln+3ElEAxF3V2t8s/24jq7W+Wk9uJKIBiLurtb5aT24jq7W+Wk/DxJRAMRd1drfLSe3EdXa3yz/w8SUQFRd1drfLSe3EdXa3yz/w8SUQExF3V2t8tJ7cQvJyt8s/24kogGIs6s1nlX/h4jqxWeVf7cSUwFRZ1Zq/Kv/DxHVir8q/8PElMARZ1Yq/Kv/DxHVmr8q/8PElMARZ1ZrPKv/DxKpyarE1Ur/w8SUgBF3V2t8tJ7cR1drfLSe3ElEBMRd1crfLP9uI6u1vln+3ElEAxF3V2t8s/24jq7W+Wf7cSUQDEXdXK3yz/AG4jq7W+Wf7cSUQDEXdXa3yz/biOrtb5Z/txJRAMRd1drfLSe3EdXa3y0ntxJRAMRd1drfLSe3EdXa3y0n4eJKIBiLurtb5aT24jq7W+Wf8Ah4kogKi7q7W+Wf8Ah4jq7W+Wf+HiSiAIu6u1vln/AIeI6u1vln/h4kogCLurtb5Z/wCHiOrtb5Z/4eJKIAi7q7W+Wf7cR1drfLP9uJKICYi7q7W+Wk9uI6u1vlpPbiSiAYqAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs53F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAE5Z3F4se+3iM7i8WPfbxINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//Z",
- "text/html": [
- "\n",
- " \n",
- " "
- ],
- "text/plain": [
- ""
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
+ "data": {
+ "image/jpeg": "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",
+ "text/html": [
+ "\n",
+ " \n",
+ " "
],
- "source": [
- "#@title Video: Week 7 Recap\n",
- "import time\n",
- "try: t0;\n",
- "except NameError: t0=time.time()\n",
- "\n",
- "from IPython.display import YouTubeVideo\n",
- "video = YouTubeVideo(id=\"VHhtye5SwY0\", width=854, height=480, fs=1)\n",
- "print(\"Video available at https://youtube.com/watch?v=\" + video.id)\n",
- "\n",
- "video"
+ "text/plain": [
+ ""
]
- },
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#@title Video: Datasets\n",
+ "\n",
+ "try: t1;\n",
+ "except NameError: t1=time.time()\n",
+ "\n",
+ "video = YouTubeVideo(id=\"Vw9MLfb4bi4\", width=854, height=480, fs=1)\n",
+ "print(\"Video available at https://youtube.com/watch?v=\" + video.id)\n",
+ "\n",
+ "video"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "cellView": "form",
+ "id": "Ev8xgKVBiwCB"
+ },
+ "outputs": [
{
- "cell_type": "markdown",
- "metadata": {
- "id": "5x61BA1qPubi"
- },
- "source": [
- "---\n",
- "# Setup"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./mnist/MNIST/raw/train-images-idx3-ubyte.gz\n"
+ ]
},
{
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "EuOTxAJdmhsl",
- "outputId": "37725a62-5283-46a3-c89d-b607c09a1656"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "782c4c71bc124eccaf8abacd8f1bd2ff",
+ "version_major": 2,
+ "version_minor": 0
},
- "outputs": [],
- "source": [
- "# we need to first upgrade the Colab's TorchVision, mute output\n",
- "!pip install --upgrade torchvision &> /dev/null"
+ "text/plain": [
+ " 0%| | 0/9912422 [00:00, ?it/s]"
]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "id": "uw7q7Z_ZPt66"
- },
- "outputs": [],
- "source": [
- "# imports\n",
- "import matplotlib.pylab as plt\n",
- "from tqdm.notebook import tqdm, trange\n",
- "from math import sqrt\n",
- "\n",
- "import torch\n",
- "import torch.nn as nn\n",
- "import torch.nn.functional as F\n",
- "import torch.optim as optim\n",
- "import torchvision as tv\n",
- "from torch.utils.data import DataLoader\n",
- "\n",
- "DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Extracting ./mnist/MNIST/raw/train-images-idx3-ubyte.gz to ./mnist/MNIST/raw\n",
+ "\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./mnist/MNIST/raw/train-labels-idx1-ubyte.gz\n"
+ ]
},
{
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "cellView": "form",
- "id": "LID483Ou-z53"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "c14d42a7d8c84317a82ce2a7ba0a7267",
+ "version_major": 2,
+ "version_minor": 0
},
- "outputs": [],
- "source": [
- "# @title Figure Settings\n",
- "%config InlineBackend.figure_format = 'retina'\n",
- "%matplotlib inline \n",
- "\n",
- "fig_w, fig_h = (8, 6)\n",
- "plt.rcParams.update({'figure.figsize': (fig_w, fig_h)})\n",
- "\n",
- "plt.style.use(\"https://raw.githubusercontent.com/NeuromatchAcademy/course-content/master/nma.mplstyle\")"
+ "text/plain": [
+ " 0%| | 0/28881 [00:00, ?it/s]"
]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "cellView": "form",
- "id": "rNg1RPFSH1Xc"
- },
- "outputs": [],
- "source": [
- "# @title Helper functions\n",
- "\n",
- "\n",
- "def image_moments(image_batches, n_batches=None):\n",
- " \"\"\"\n",
- " Compute mean an covariance of all pixels from batches of images\n",
- " \"\"\"\n",
- " m1, m2 = torch.zeros((), device=DEVICE), torch.zeros((), device=DEVICE)\n",
- " n = 0\n",
- " for im in tqdm(\n",
- " image_batches,\n",
- " total=n_batches,\n",
- " leave=False,\n",
- " desc=\"Computing pixel mean and covariance...\",\n",
- " ):\n",
- " im = im.to(DEVICE)\n",
- " b = im.size()[0]\n",
- " im = im.view(b, -1)\n",
- " m1 = m1 + im.sum(dim=0)\n",
- " m2 = m2 + (im.view(b, -1, 1) * im.view(b, 1, -1)).sum(dim=0)\n",
- " n += b\n",
- " m1, m2 = m1 / n, m2 / n\n",
- " cov = m2 - m1.view(-1, 1) * m1.view(1, -1)\n",
- " return m1.cpu(), cov.cpu()\n",
- "\n",
- "\n",
- "def pca_encoder_decoder(mu, cov, k):\n",
- " \"\"\"\n",
- " Compute encoder and decoder matrices for PCA dimensionality reduction\n",
- " \"\"\"\n",
- " mu = mu.view(1, -1)\n",
- " u, s, v = torch.svd_lowrank(cov, q=k)\n",
- " W_encode = v / torch.sqrt(s)\n",
- " W_decode = u * torch.sqrt(s)\n",
- "\n",
- " def pca_encode(x):\n",
- " # Encoder: subtract mean image and project onto top K eigenvectors of\n",
- " # the data covariance\n",
- " return (x.view(-1, mu.numel()) - mu) @ W_encode\n",
- "\n",
- " def pca_decode(h):\n",
- " # Decoder: un-project then add back in the mean\n",
- " return (h @ W_decode.T) + mu\n",
- "\n",
- " return pca_encode, pca_decode\n",
- "\n",
- "\n",
- "# Helper for plotting images\n",
- "def plot_torch_image(image, ax=None):\n",
- " ax = ax if ax is not None else plt.gca()\n",
- " c, h, w = image.size()\n",
- " cm = \"gray\" if c == 1 else None\n",
- " # Torch images have shape (channels, height, width) but matplotlib expects\n",
- " # (height, width, channels) or just (height,width) when grayscale\n",
- " ax.imshow(image.detach().cpu().permute(1, 2, 0).squeeze(), cmap=cm)\n",
- " ax.set_xticks([])\n",
- " ax.set_yticks([])\n"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Extracting ./mnist/MNIST/raw/train-labels-idx1-ubyte.gz to ./mnist/MNIST/raw\n",
+ "\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./mnist/MNIST/raw/t10k-images-idx3-ubyte.gz\n"
+ ]
},
{
- "cell_type": "markdown",
- "metadata": {
- "id": "AeuJ4budZOas"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "74890128d1374385a8508a6148941ad3",
+ "version_major": 2,
+ "version_minor": 0
},
- "source": [
- "---\n",
- "# Section 1: Supervised and unsupervised learning"
+ "text/plain": [
+ " 0%| | 0/1648877 [00:00, ?it/s]"
]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "cellView": "form",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 518
- },
- "id": "NMCMAipWKMeZ",
- "outputId": "895ff690-ce79-48ea-9595-38b15b8b1035"
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Video available at https://youtube.com/watch?v=Vw9MLfb4bi4\n"
- ]
- },
- {
- "data": {
- "image/jpeg": "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",
- "text/html": [
- "\n",
- " \n",
- " "
- ],
- "text/plain": [
- ""
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "#@title Video: Datasets\n",
- "\n",
- "try: t1;\n",
- "except NameError: t1=time.time()\n",
- "\n",
- "video = YouTubeVideo(id=\"Vw9MLfb4bi4\", width=854, height=480, fs=1)\n",
- "print(\"Video available at https://youtube.com/watch?v=\" + video.id)\n",
- "\n",
- "video"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Extracting ./mnist/MNIST/raw/t10k-images-idx3-ubyte.gz to ./mnist/MNIST/raw\n",
+ "\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n",
+ "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./mnist/MNIST/raw/t10k-labels-idx1-ubyte.gz\n"
+ ]
},
{
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "cellView": "form",
- "id": "Ev8xgKVBiwCB"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3860caa90dc84603b6ed4dc2851c78dc",
+ "version_major": 2,
+ "version_minor": 0
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n",
- "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./mnist/MNIST/raw/train-images-idx3-ubyte.gz\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "782c4c71bc124eccaf8abacd8f1bd2ff",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/9912422 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Extracting ./mnist/MNIST/raw/train-images-idx3-ubyte.gz to ./mnist/MNIST/raw\n",
- "\n",
- "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n",
- "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./mnist/MNIST/raw/train-labels-idx1-ubyte.gz\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "c14d42a7d8c84317a82ce2a7ba0a7267",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/28881 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Extracting ./mnist/MNIST/raw/train-labels-idx1-ubyte.gz to ./mnist/MNIST/raw\n",
- "\n",
- "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n",
- "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./mnist/MNIST/raw/t10k-images-idx3-ubyte.gz\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "74890128d1374385a8508a6148941ad3",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/1648877 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Extracting ./mnist/MNIST/raw/t10k-images-idx3-ubyte.gz to ./mnist/MNIST/raw\n",
- "\n",
- "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n",
- "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./mnist/MNIST/raw/t10k-labels-idx1-ubyte.gz\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "3860caa90dc84603b6ed4dc2851c78dc",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/4542 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Extracting ./mnist/MNIST/raw/t10k-labels-idx1-ubyte.gz to ./mnist/MNIST/raw\n",
- "\n",
- "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./cifar10/cifar-10-python.tar.gz\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "3ad87f1cc7e84bf6922cd57a7667a0fc",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/170498071 [00:00, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Extracting ./cifar10/cifar-10-python.tar.gz to ./cifar10/\n",
- "Files already downloaded and verified\n"
- ]
- }
- ],
- "source": [
- "#@title Download a few standard image datasets while the above video plays\n",
- "# See https://pytorch.org/docs/stable/torchvision/datasets.html\n",
- "\n",
- "# MNIST contains handwritten digets 0-9, in grayscale images of size (1,28,28)\n",
- "mnist = tv.datasets.MNIST('./mnist/', train=True, transform=tv.transforms.ToTensor(), download=True)\n",
- "mnist_val = tv.datasets.MNIST('./mnist/', train=False, transform=tv.transforms.ToTensor(), download=True)\n",
- "# CIFAR10 contains 10 object classes in color images of size (3,32,32)\n",
- "cifar10 = tv.datasets.CIFAR10('./cifar10/', train=True, transform=tv.transforms.ToTensor(), download=True)\n",
- "cifar10_val = tv.datasets.CIFAR10('./cifar10/', train=False, transform=tv.transforms.ToTensor(), download=True)"
+ "text/plain": [
+ " 0%| | 0/4542 [00:00, ?it/s]"
]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "cell_type": "markdown",
- "metadata": {
- "id": "DsczwVZsKzEE"
- },
- "source": [
- "Unsupervised and semi-supervised learning are broad concepts that can be applied in many different domains. In machine learning research, however, computer vision is by far the most common domain for studying these things. Using image datasets will also let us build on what you learned last week. But keep in mind that the techniques you learn this week are quite general!\n",
- "\n",
- "It's always a good idea to visualize your data. Let's look at some samples of images in each of the example datasets we've downloaded:"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Extracting ./mnist/MNIST/raw/t10k-labels-idx1-ubyte.gz to ./mnist/MNIST/raw\n",
+ "\n",
+ "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./cifar10/cifar-10-python.tar.gz\n"
+ ]
},
{
- "cell_type": "markdown",
- "metadata": {
- "id": "DICj-nphMuQo"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3ad87f1cc7e84bf6922cd57a7667a0fc",
+ "version_major": 2,
+ "version_minor": 0
},
- "source": [
- "### Visualize MNIST examples"
+ "text/plain": [
+ " 0%| | 0/170498071 [00:00, ?it/s]"
]
+ },
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 306
- },
- "id": "kQTwy7Y1MxqW",
- "outputId": "21bf0a2b-275c-4954-a222-884efc339ecf"
- },
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAB2MAAAL0CAYAAAAx/JzEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAB7CAAAewgFu0HU+AABh3klEQVR4nOz9eZzVdd0//j8Hh0XZRRSEERAVzVwBUxRFccfACjA1Usxyy9xyXyrzUnG99NK8tEuxwCVFC5VQk8QwFXcMU5NNkARRkE1QkfP94/Orn+OAvWY4rzkzw/1+u3W7XbzmcV6vJ+p13jPvxzlnygqFQiEAAAAAAAAAKKpGpR4AAAAAAAAAoCFSxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJBBeakHYP21YMGCmDx5crz//vuxYMGCKBQK0bZt29h6662jd+/e0bJly1KPCEAJLVq0KF599dWYNm1aLFq0KD799NNo3rx5bLLJJtG9e/fYfvvto3Xr1qUeE4BMPv3003jrrbfijTfeiA8++CAWL14cjRs3jrZt20b79u2jZ8+e0alTp1KPCUAJLFmyJF5++eWYNWtWfPTRR7Fs2bJo0aJFtGnTJrp06RI9e/aMVq1alXpMAGqRvoG6TBlLsokTJ8a+++777z936dIlZs2aVa09VqxYEbfcckv85je/ib/97W9RKBTWmGvcuHHsv//+cfrpp8eBBx5Y45m7du0a77zzzr///OSTT0a/fv1qvB8AlRXj2vBFy5cvj9/+9rfxm9/8Jl544YVYvXr1WrNlZWXRo0eP2HfffWPAgAExYMCApDP69esXTz311L//PHLkyDj22GNrPDMAldX02vDZZ5/FxIkTY8KECfHkk0/Gyy+/HKtWrfrKx3Tu3DmGDBkSJ510Umy99dY1ntnPDQB5FePnhsWLF8eoUaNi5MiR8corr6z1nlLE//tZYeedd47hw4fHsGHDok2bNtWe2bUBIC99A+sTH1NMrbn//vujW7ducdZZZ8Vrr732ld80f/bZZzF+/Pg46KCD4rDDDosFCxbU4qQAlMKdd94ZW221VZx88skxefLkryxiIyIKhUK8+eabccstt8SgQYNqaUoAiu21116LH/zgB7HZZpvFgQceGCNGjIjnn3/+PxaxERHvvvtuXH/99dGjR484/vjjY8mSJbUwMQC17d57741tttkmTj311Hj55Ze/8p5SxP/7WeGVV16Jn/zkJ7HNNtvE3XffXUuTAlBb9A3UJ8pYasUFF1wQQ4cOjfnz51f7sePGjYtevXrF9OnTM0wGQKmtWLEihgwZEsOHD4958+aVehwAatmDDz4Yd9xxRyxatKjGexQKhbj99ttjhx12iH/84x9FnA6AUjvvvPPiyCOPjPfff79Gj1+wYEEcffTRcfbZZxd5MgBKRd9AfeNjisnu8ssvjyuuuKLK+r8+GqB///6x+eabx2effRazZ8+ORx99NP76179Wys6ePTv233//ePHFF6Ndu3a1NToAmS1fvjwOOuigKs/7ERHNmzeP/v37x2677RabbrpptGnTJpYtWxbz58+Pv/3tb/H888/HtGnTSjA1ALWhadOm0bt37+jTp09svvnmsemmm8bnn38e7733XjzzzDMxfvz4+OSTTyo9Zvbs2bHffvvFpEmTolu3biWaHIBiueaaa2LEiBFr/Noee+wR/fv3jy233DJatmwZS5cujbfffjueeOKJeOGFF9a4V/v27eOcc87JPTYAGekbqI+UsWT1xBNPxMUXX1xlfc8994zbb789evToUeVrF110UUyaNCmOPfbYmDFjxr/XZ82aFcOHD4+HHnoo68wA1I7Vq1fH0KFDq3xD3KZNm7jkkkvipJNOimbNmn3lHv/4xz/i/vvvj5EjR+YcFYBaUl5eHoceemgMHz48Dj744K+8Drz33ntx9tlnx1133VVpfe7cuXHcccfFk08+mXtcADKaNWtWXHLJJVXWt91227jzzjvjG9/4xhofd/nll8fTTz8dw4cPr/LizZ/97GcxePDg2HLLLbPMDEBe+gbqKx9TTDaFQiF++tOfVvmdf/vtt1888cQTa3xi/Je+ffvG008/XeWb44cfftiTI0ADceWVV8Yf//jHSmtf+9rX4vXXX48zzjjjPxaxERHbbLNNXHjhhfH222/nGhOAWrDhhhvGGWecEXPmzImxY8fG4Ycf/h+vAx07dozRo0fHpZdeWuVrEydOjAceeCDXuADUgltuuSVWrFhRaa179+4xadKktRax/7LXXnvFpEmTomvXrpXWV65cGbfcckuxRwWgFugbqM+UsWTz0EMPxZQpUyqttW3bNkaPHp10g/1fN1fKysoqrf/85z8v5pgAlMDbb78dv/jFLyqtde/ePSZOnBibb755tff78rUCgPrj4IMPjhkzZsR1110XHTp0qPbjL7744jjssMOqrP/2t78txngAlMjvf//7KmvXXnttbLLJJkmP79ChQ1xzzTVV1seOHbvOswFQ+/QN1GfKWLJZ0yvRTzzxxOjYsWPyHnvssUcccsghldZeeeWVeOaZZ9Z5PgBK5/zzz49PP/200tptt90W7du3L9FEAJTK7rvvXqMS9ou+/AKfiIjHH3+8yrUGgPph1apVMX369EprrVq1igEDBlRrn4EDB0bLli0rrU2fPj0+//zzdZ4RgNqlb6A+U8aSzYQJE6qsfe9736v2PsOGDauyNnr06BrNBEDpvf3221Ve5f6tb30r9ttvvxJNBEB9t+uuu1YpdFeuXBnvvfdeiSYCYF188MEHVT6Gcquttory8vJq7dO4cePo3r17pbXVq1fHggUL1nlGAGqXvoH6TBlLFh9++GH885//rLTWpk2b2G677aq9V58+faqsjRs3rsazAVBad9xxR5UbK8cdd1yJpgGgoaioqKiyNm/evBJMAsC6atKkSdJaiqZNm1ZZS/k4SwDqDn0D9Z0ylizW9ArDioqKGv1Ov86dO1d53OzZs2PmzJk1ng+A0rn//vsr/blt27Zx8MEHl2gaABqKjz/+uMrahhtuWIJJAFhXbdu2jdatW1damzNnTo32+vLjNt5442jTpk1NRwOgBPQN1HfKWLJYuHBhlbVWrVrVaK9GjRqt8bEvvfRSjfYDoHRmzpxZ5Xc/9ezZs9ofNwYAX/T555+v8eZJdX5/FAB1R1lZWey7776V1ubOnRtTp06t1j5Tpkyp8k6q/v37r/N8ANQufQP1nTKWLNb0CvQVK1bUeL81vcr9jTfeqPF+AJTGX//61yprO++8c6U/v/baa3HuuefGN77xjdh4442jcePG0a5du9h2223jm9/8Ztxwww0xbdq0WpoYgPpg/PjxVX5m6NKlS7Rv375EEwGwrk4++eQqaxdccEEUCoWkxxcKhTj//POrrJ966qnrPBsAtUvfQH2njCWLdu3aVVlb00cJpPjoo4/is88+q7L+5XdWAVD3/e1vf6uytvXWW0fE/3uV41FHHRU77bRTXHXVVfH888/HokWLYtWqVbFw4cJ466234pFHHonTTz89evToEUcffbRSFoCIiLjtttuqrA0aNKgEkwBQLAcccEAMHTq00trDDz8cJ598cnzyySdf+dgVK1bE8ccfH+PHj6+0ftxxx0Xfvn2LPisAeekbqO/KCqkvJ4Nq+OSTT6Jly5ZVntTmz58fm266abX2euKJJ+KAAw6osn7wwQdX+aYagLptyJAhMWbMmEpr9957b3Tv3j0GDhwY7733XrX2a9myZdx9991x2GGHFXNMAOqRJ598Mvbbb79Ka2VlZfHqq6/GjjvuWKKpACiG5cuXx6GHHhp/+ctfKq137949TjzxxNhvv/2ie/fu0aJFi1i6dGlMmzYtJkyYEP/7v/8bs2bNqvSYww47LMaMGRNNmzatxb8BAMWgb6C+885YsmjatGn07t27yvojjzxS7b3W9pgPPvig2nsBUFprKlsXLFgQAwYMqPK1pk2bRteuXaNHjx7Rpk2bNe63dOnSGDRoUNxzzz05xgWgjlu8eHEcd9xxVdaPPvpoRSxAA9C8efP405/+FOedd16lEnX69Olx9tlnR8+ePaNNmzZRXl4ebdu2jd69e8d5551XqYht1apVjBgxIsaOHauIBain9A3Ud8pYsunfv3+VtRtvvDE+//zz5D0WLlwYd9555xq/tnz58pqOBkCJLFq0qMraOeecE++///6//7zHHnvEuHHjYvHixTFz5sx48803Y9GiRTFlypQ45ZRTory8vNLjV69eHccff3xMnTo1+/wA1B2FQiG+//3vV3nn0yabbBLXXHNNaYYCoOiaNGkSV1xxRUyfPj0uvfTS6NSpU9LjOnToEDfccEO88847cc4550SjRm6DAtRn+gbqM9+FkM0Pf/jDaNy4caW1KVOmxBVXXJH0+EKhECeccEIsXrx4jV//9NNP13lGAGrXmn6304oVK/79f59//vnxzDPPxKGHHlrlVes77rhj3HTTTfHkk09G69atK33t448/juOPPz7P0ADUSeeff3489NBDldbKysrijjvuiM0226xEUwGQw0cffRS//e1v46677oq5c+cmPWbevHnxy1/+Mn72s5/F7NmzM08IQG76BuozZSzZVFRUxLBhw6qsX3LJJXHVVVfFV/264pUrV8Zxxx1X5fcKflFZWVlR5gSg9nzVc//w4cPj8ssv/4977LXXXjFmzJgq14HJkyfHn//853WeEYC671e/+lWMGDGiyvoFF1wQ3/zmN0swEQC5/O53v4vu3bvHBRdcEG+99Valr5WXl0fnzp1j++23j4qKiiov6Pzggw/ixhtvjG233TZuvPHG2hwbgCLTN1CfKWPJ6pprrolu3bpVWisUCnHuuedG79694/bbb48ZM2bEihUrYunSpfH3v/89rr/++th2220rfVxAhw4dquzdrFmz3OMDUGRffgXjv7Ru3Tr++7//O3mf/fffP44++ugq67fddltNRwOgnrjrrrvi1FNPrbJ+zDHHxC9/+csSTARALpdffnl897vfjYULF1ZaHzRoUDz22GOxePHimDNnTkydOjVmz54dS5YsiUmTJsWwYcNigw02+Hd+xYoVcdppp8UZZ5xR238FAIpI30B9VVb4qpcLQBG8+uqr0b9//yrfOKfabrvt4rzzzotjjjmm0vpee+0VkyZNKsaIANSSnj17xssvv1xl/dRTT632K9UnT54cu+++e6W1Dh06xHvvvbdOMwJQdz344INxxBFHxKpVqyqtDx48OO69995KN94BqN/uu+++OOKIIyqtbbTRRjF69Oj41re+9R8fP2nSpBg8eHC8//77ldZ//etf+xUnAPWYvoH6yDtjyW7nnXeOyZMnx3bbbVftx/bs2TPGjx+/xpsqHTt2LMZ4ANSidu3arXH9wAMPrPZeu+22W7Rp06bS2rx582LatGk1GQ2AOu6RRx6J7373u1WK2IEDB8bdd9+tiAVoQJYtWxYnnXRSlfW77747qYiNiOjbt288/PDDVT6d58wzz4yPPvqoGGMCUAL6BuojZSy1YquttoqXX345rr/++jV+BMCXbbTRRnHxxRfHs88+G126dFnjL9Xecsstc4wKQEZr+8Z2l112qfZeZWVlsdNOO1VZ/+c//1ntvQCo2x577LEYPHhwfPbZZ5XWDznkkLj//vvX+jH4ANRPI0eOrPKOp29+85sxaNCgau2z2267xQknnFBpbenSpXHHHXes84wAlI6+gfqmvNQDsP5o1qxZnH766XHKKafEc889F0888US8+eab8cEHH8TixYujefPmsdVWW0Xfvn1j0KBB0bZt238/9o033qiy3w477FCb4wNQBGv7xnZt75j9T9b0uA8//LBGewFQNz3xxBNx+OGHxyeffFJp/YADDogHH3wwmjRpUqLJAMhl3LhxVda+/HGSqY455pi46aabKq099thjceaZZ9ZoPwDqBn0D9YkyllrXuHHj6Nu3b/Tt2zf5Ma+99lqVtT59+hRzLABqwdo+QqamN9KbNWtWZW3lypU12guAuufJJ5+MgQMHVnlu32+//WLs2LFrvA4AUP+t6T7Q7rvvXqO9dt1112jcuHGlT1dY0/4A1E/6BuoDH1NMnffJJ5/EK6+8UmmtW7du0a1btxJNBEBN9e7de43rS5YsqdF+a/pdTzV9ly0AdctTTz0Vhx12WKxYsaLS+j777BMPP/xwbLjhhiWaDIDc1vRpN+3bt6/RXo0aNaryM8KXPwIZgPWHvoFSUMZS5z3yyCOxdOnSSmtDhw4t0TQArItu3brFFltsUWV95syZNdpv1qxZVdZqepMGgLpj0qRJMWDAgPj4448rrfft2zfGjRsXG220UYkmA6A2rOmTD7784pzq+PL1xHUEYP2lb6AUlLHUeSNHjqz057Kyshg+fHiJpgFgXQ0YMKDK2jPPPFPtfRYtWlTld3w0a9ZsrR+FDED98Mwzz8Shhx4ay5cvr7S+5557xh//+Mdo3rx5iSYDoLas6QWWNX0B54cffljlk3i8gBNg/aVvoBSUsdRpjz32WIwbN67S2qBBg6JHjx4lmgiAdfW9732vytqoUaOqvc/o0aOjUChUWuvTp4/fHwhQj02ePDkOOeSQWLZsWaX1PfbYI8aPHx8tWrQo0WQA1Katt966ytof//jHGu21psdts802NdoLgPpN30CpKGOps+bPnx8nnXRSpbXGjRvHlVdeWaKJACiGPn36xK677lppbfLkydW6ubJ06dK45pprqqwPHjx4necDoDReeumlOOigg6q8e2m33XaLRx99NFq2bFmiyQCobQcddFCVtRtvvLHKi3X+k1WrVsUVV1yRtD8ADZu+gVJSxpLd559/Xu3HvPfee7HvvvtW+QiaCy+80KtUABqASy+9tMraD37wg5gxY8Z/fOznn38eP/jBD2L27NmV1jt37hzHHXdc0WYEoPZMmTIlDjzwwFi8eHGl9V69esXjjz8erVq1KtFkAJTCt771rWjcuHGltfnz58dRRx0Vq1atStqjUCjEj370oyq/2qRp06Zx+OGHF2tUAGqZvoH6SBlLdr169Ypzzz03Xnvttf+Y/eSTT+LGG2+Mr33ta1W+We7fv39cdNFFucYEoBYNGDAgvv3tb1damzdvXuy1117x6KOPrvVxs2fPjoEDB8b9999f5WsjRoyIpk2bFn1WAPL6+9//HgcccEAsXLiw0vquu+4af/rTn6J169YlmgyAUunSpUuceOKJVdYffvjh6Nu373+8x/T222/HwQcfXOX3AkZEnHLKKVFRUVG0WQGoXfoG6qOywpd/2RoUWefOnWPu3LkREbHFFltEnz59YocddoiOHTtGy5YtY8mSJTF//vx48cUX4/HHH1/jR8706tUrJkyY4BXxAA3IokWLolevXmt8N2zv3r1jwIAB0a1bt2jatGnMmzcvnnrqqRg/fnysXLmySv7UU0+NG2+8sTbGBqDIDjjggHjiiSeqrG+55Zbr/NHEl156aQwcOHCd9gCgNBYtWhR77bVX/P3vf1/j1/fcc8/o169fdO/ePVq2bBnLli2Ld955J/7yl7/ExIkTY/Xq1VUes8MOO8SkSZO80AegHtM3UB8pY8nui0+ONTFgwIC49957o0WLFkWcCoC6YObMmdG/f/8qHxNTHT/60Y/i5ptvjvLy8iJOBkBt6devXzz11FNZ9h45cmQce+yxWfYGIL+5c+dGv379Ytq0aeu8V48ePeLJJ5+Mjh07FmEyAEpF30B95GOKqbPatWsXN998czz88MOeGAEaqG7dusULL7xQo9/Z1LZt27j11lvj1ltvVcQCAEAD1KlTp3jllVfixBNPjLKyshrtUVZWFieffHK8/PLLiliA9Zi+gVJSxpLdqFGj4rTTTovtt98+GjX66v/kysrKYuedd45rr702ZsyYESeffHKNv9kGoH5o165d/P73v48///nPMXDgwGjSpMlX5nv06BG/+MUvYubMmfGjH/2olqYEAABKoUWLFnHLLbfEP/7xjzj77LOjS5cuSY/r2rVrnHPOOTFt2rS4+eabY6ONNso8KQC1Qd9AfeRjiqlVS5YsialTp8aMGTNiwYIFsXz58igvL482bdrElltuGbvssku0b9++1GMCUELLly+PF154Id56661YtGhRFAqFaNeuXWy66abRu3fv6NSp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AAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACCD8lIPwPprwYIFMXny5Hj//fdjwYIFUSgUom3btrH11ltH7969o2XLlqUeEQAAAIA6xj0lAKA+UcaSbOLEibHvvvv++89dunSJWbNmVWuPFStWxC233BK/+c1v4m9/+1sUCoU15ho3bhz7779/nH766XHggQfWeOauXbvGO++88+8/P/nkk9GvX78a7wcAAABA9binBMCXFePaUCgU4u23346XXnopXnzxxXjxxRfjlVdeiaVLl1bKHXPMMXHnnXeu88yuDdSUjymm1tx///3RrVu3OOuss+K1115b6zfNERGfffZZjB8/Pg466KA47LDDYsGCBbU4KQCpJk6cGGVlZf/+X9euXZMe98XHrOv/7r333mrN3LVr10qPnzhxYvX/4gCslWsDAMXmnhIA//Lggw/GOeecE/vtt1+0bds2evToEUcddVRcd9118Ze//KVKEQt1gXfGUisuuOCCuOKKK2r02HHjxkWvXr3iz3/+c3Tv3r3IkwEAAABQV7mnBMAXHXfccbF48eJSjwHVoowlu8svv3yN3zT/62Nj+vfvH5tvvnl89tlnMXv27Hj00Ufjr3/9a6Xs7NmzY//9948XX3wx2rVrV1ujAwAAAFAi7ikBAA2BMpasnnjiibj44ourrO+5555x++23R48ePap87aKLLopJkybFscceGzNmzPj3+qxZs2L48OHx0EMPZZ0ZgNq32WabRYcOHWr02LZt2xZ5GgDqAtcGgPWbe0oAVEe7du2iZ8+e0bZt2/jd735X6nGgEmUs2RQKhfjpT38aq1evrrS+3377xbhx46JZs2ZrfWzfvn3j6aefjr322qvSN88PP/xwPPTQQzFw4MBscwNQ+0488cT4+c9/XuoxAKhDXBsA1l/uKQHwVVq3bh277rpr9OrVK3r37h29evWKbt26RUTExIkTlbHUOcpYsnnooYdiypQpldbatm0bo0eP/spvmv+lY8eOMXr06Nhzzz2jUCj8e/3nP/+5b5wBAAAAGij3lABYm1deeSW6du0aZWVlpR4FkjUq9QA0XA888ECVtRNPPDE6duyYvMcee+wRhxxySKW1V155JZ555pl1ng8AAACAusc9JQDWplu3bopY6h1lLNlMmDChytr3vve9au8zbNiwKmujR4+u0UwAAAAA1G3uKQEADYkyliw+/PDD+Oc//1lprU2bNrHddttVe68+ffpUWRs3blyNZwMAAACgbnJPCQBoaJSxZLFgwYIqaxUVFTX6+IDOnTtXedzs2bNj5syZNZ4PAAAAgLrHPSUAoKFRxpLFwoULq6y1atWqRns1atRojY996aWXarQfAAAAAHWTe0oAQEOjjCWLDTfcsMraihUrarzfxx9/XGXtjTfeqPF+AAAAANQ97ikBAA1NeakHoGFq165dlbU1fcxMio8++ig+++yzKuvTp0+v0X4A1D2vvPJKnHHGGfHss8/GnDlz4sMPP4wmTZrExhtvHO3bt4+ePXvG3nvvHQcccEC0b9++1OMCUAtcGwDWT+4pAQANjTKWZP369YtCoZCU3WyzzaJx48aVvuGdM2dOvP/++7HppptW69wXX3xxjevz58//j4+dNWtWtc4CoDQeeuihKmuffPJJLF26NN5555148cUX49Zbb41mzZrFMcccE2effXZ07969BJMCUFtcGwAaDveUAPiy6lwb6grXBmrKxxSTRdOmTaN3795V1h955JFq77W2x3zwwQfV3guA4vrXN87/+l/ub0pXrlwZt956a+ywww5x++2312iPWbNmVZq5X79+xR0SYD3n2gDAunBPCQBoaJSxZNO/f/8qazfeeGN8/vnnyXssXLgw7rzzzjV+bfny5TUdDYA6qLy8PDp27BjbbrttbL311mv8eLJ/WbFiRRx//PFx6qmn1uKEANQ21waA9ZN7SgBAQ6KMJZsf/vCH0bhx40prU6ZMiSuuuCLp8YVCIU444YRYvHjxGr/+6aefrvOMAJRO06ZNY8CAAXHTTTfFlClTYvny5fHPf/4z3njjjfjHP/4RH3zwQcyfPz/uv//+OOCAA9a4x0033RQjRoyo5ckByMW1AYAI95QAgIZFGUs2FRUVMWzYsCrrl1xySVx11VVf+XnwK1eujOOOOy7GjBmz1kxZWVlR5gSg9l199dXx7rvvxiOPPBKnnHJK7LjjjtGkSZMquU033TQGDx4cjz/+eDz55JOx+eabV8mcf/75a/1dUADUH64NAPyLe0oAQENSVqhvvyGZemXRokXRs2fPmDlzZpWv9ezZM0466aTYd999o2PHjrFq1aqYM2dOPPbYY3HDDTfEO++88+9shw4dYt68eZUe//Wvfz3+9re/Zf87AFB3zJ07N3bfffd49913K633798/nnjiiRJNBUApuTYANEzuKQFQExMnTox999230toxxxyz1o+uh9qgjCW7V199Nfr37x8LFy6s0eO32267OO+88+KYY46ptL7XXnvFpEmTijEiAPXISy+9FLvttlusXr260vorr7wSO++8c2mGAqCkXBsAGib3lACoLmUsdZGPKSa7nXfeOSZPnhzbbbddtR/bs2fPGD9+fGywwQZVvtaxY8dijAdAPdOzZ8848sgjq6yPHz++BNMAUBe4NgA0TO4pAQANgTKWWrHVVlvFyy+/HNdff3106NDhP+Y32mijuPjii+PZZ5+NLl26xOLFi6tkttxyyxyjAlAPHHXUUVXWJkyYUIJJAKgrXBsAGib3lACA+q681AOw/mjWrFmcfvrpccopp8Rzzz0XTzzxRLz55pvxwQcfxOLFi6N58+ax1VZbRd++fWPQoEHRtm3bfz/2jTfeqLLfDjvsUJvjA1CH7LPPPlXWZs+eXYJJAKgrXBsAGi73lACA+kwZS61r3Lhx9O3bN/r27Zv8mNdee63KWp8+fYo5FgD1SPPmzaNVq1axZMmSf68tWLCghBMBUGquDQANn3tKAEB95GOKqfM++eSTeOWVVyqtdevWLbp161aiiQCoC5o3b17pzytWrCjRJADUFa4NAHyRe0oAQF2gjKXOe+SRR2Lp0qWV1oYOHVqiaQCoKz744INKf95kk01KNAkAdYVrAwBf5J4SAFAXKGOp80aOHFnpz2VlZTF8+PASTQNAXTBt2rT47LPPKq21b9++RNMAUBe4NgDwZe4pAQB1gTKWOu2xxx6LcePGVVobNGhQ9OjRo0QTAVAX/PGPf6yyttNOO5VgEgDqCtcGAL7IPSUAoK5QxlJnzZ8/P0466aRKa40bN44rr7yyRBMBUBd8+umncf3111dZP+SQQ0owDQB1gWsDAF/knhIAUJcoY8nu888/r/Zj3nvvvdh3331j5syZldYvvPBCr2AEWM9deOGFMWvWrEprLVq0iIMOOqg0AwFQcq4NAA2Te0oAQEOgjCW7Xr16xbnnnhuvvfbaf8x+8sknceONN8bXvva1eOONNyp9rX///nHRRRflGhOAWnDffffFc889V6PHFgqFuOyyy+Kaa66p8rWzzz472rRps47TAVAKrg0ArI17SgBAQ1BWKBQKpR6Chq1z584xd+7ciIjYYostok+fPrHDDjtEx44do2XLlrFkyZKYP39+vPjii/H444/HsmXLquzRq1evmDBhQrRq1aq2xwegiE4//fS44YYbYp999olhw4bFoEGDYpNNNvmPj3vuuefioosuigkTJlT5Wvfu3WPKlCnRvHnzHCMDkJlrAwBr454SAF/24osvxvHHH7/Wry9btiymT59eaa1t27axxRZbrPUxvXr1iv/7v/8r2ozwZcpYsvviN841MWDAgLj33nujRYsWRZwKgFL41w33f9lggw1ihx12iJ122im222672HjjjaN169bx+eefx8KFC+ONN96Ip556KqZOnbrG/TbddNN45plnonv37rX1VwCgyFwbAFgb95QA+LKJEyfGvvvuW9Q999lnn5g4cWJR94QvKi/1ALA27dq1i0svvTROOumkKCsrK/U4AGTw+eefx6uvvhqvvvpqtR+73XbbxX333edmO0AD49oAwLpyTwkAqEv8zliyGzVqVJx22mmx/fbbR6NGX/2fXFlZWey8885x7bXXxowZM+Lkk0/2TTMAlTRr1izOOOOMePnll+PrX/96qccBoA5wbQBomNxTAgAaAh9TTK1asmRJTJ06NWbMmBELFiyI5cuXR3l5ebRp0ya23HLL2GWXXaJ9+/alHhOATD788MP485//HBMnToznnnsuXn/99fjkk0/+4+MaN24cO++8cwwePDiOP/742HjjjWthWgBqg2sDACncUwIA6itlLABQMqtWrYrp06fHO++8E++++24sXrw4Pv7449hggw2idevW0bZt29hiiy1i1113jWbNmpV6XABqgWsDAAAADYkyFgAAAAAAACADvzMWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABkoYwEAAAAAAAAyUMYCAAAAAAAAZKCMBQAAAAAAAMhAGQsAAAAAAACQgTIWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABmUF2ujVatWxbx58yIiokOHDlFeXrStAainXBsA+DLXBgC+zLUBgC9zbQAakqK9M3bevHlRUVERFRUV/36SBGD95toAwJe5NgDwZa4NAHyZawPQkGR5OUlFRUWObQG+UqFQKPUIfAXXBqAUXBvqNtcGoBRcG+o21wagFFwb6jbXBqAUinlt8DtjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMyks9AABQ9+2+++5JuS222CJ5z8GDByflhgwZkpS77rrrks8+66yzkrMAAAAAEBGx6667JuWGDRuWlNtggw2Scj/5yU+SctRN3hkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkEF5qQcAAEpn9uzZSbmKiorMk6y7PfbYo9QjAAAAAFDPtGvXLjk7duzYpFynTp2Scq+//nry2dRf3hkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACCD8lIPAF/UsWPHpNxxxx2XvOfAgQOTcr169UreM0VZWVlydtq0aUm5oUOHJuVeffXV5LOB9VtFRUVR97v//vuTs2PGjEnKzZ49Oyn33HPPJZ8NAAAUX5MmTZJyffv2Td7zsMMOS8qdfvrpSbmxY8cmn33uuecm5d56663kPQGoe77//e8nZzt16lTUs3/xi18UdT/qJu+MBQAAAAAAAMhAGQsAAAAAAACQgTIWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABkoYwEAAAAAAAAyUMYCAAAAAAAAZKCMBQAAAAAAAMigvNQDUH/tvvvuydmzzz47Kbfbbrsl5Tp27Jh8dqpCoZCUmz59elKurKws+ewtt9wyKffnP/85Kfftb387+eyJEycmZwH+k6FDh5Z6BID1ysyZM5OzW2yxRVJugw02qOk4fMHgwYOTci1atMg8ydq9+uqrWbJAw7PVVlsl5W699dak3D777LMu46zR6tWrk3KHHXZY8p477rhjUu7AAw9Myk2bNi35bADWXUVFRVJu2LBhmSdhfeedsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZlJd6AGpPs2bNknLnnXdeUu6cc85JPrtJkyZJubKysqTcypUrk88eMWJEUu6WW25Jyq1YsSL57FRHHHFEUu7WW29Nyl188cXJZ0+cODE5CzQ8zz77bFJujz32yDwJwPqhvDztR7DOnTsn5Ro1Sn997erVq5NyXbt2TcptsskmSbmrrroqKZdD6s8XERGFQqGoZ/fu3Tspl/pzWkT6v+/Uf9fvvPNO8tmzZ89Oyt1+++1Jubvuuiv5bCCf7t27J+Uee+yxpFyXLl3WZZw1uu+++5JyN910U1Ju9OjRyWdvscUWSbmf/exnSblhw4Ylnw3Auttll12ScjvvvHPRz16+fHlSbtmyZUU/m7rHO2MBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGRQXuoBWHeXXHJJUu6ggw5Kyn3jG99Yl3HW6J///GdS7o477kjKPfroo8lnP/fcc8nZYmrevHly9uCDD844CcDavfvuu6UeAWC98uMf/zgpd/XVV2eeZO2mT5+elFu9enXmSdZdo0bprz+uD3+fYuvSpUvRswsXLkzK3XXXXclnA9VTUVGRnP3Tn/5U1D3vueeepNwjjzySlIuIuP/++5Nyqc/jr732WvLZW2yxRVKuf//+yXsCsH545plnknLV6Tqov7wzFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACCD8lIPsL456KCDknIXXnhh8p577rlnUq5QKCTlVqxYkZS7/PLLk3IRESNHjkzKzZs3L3nPum706NHJ2W9+85tJudR/N5dddlny2QDFNHTo0KLvOXjw4KLv+eyzzyblrr/++qKfDazfBg4cWNT9Pvroo+TslClTknKp37vfcMMNSbnWrVsn5dZXb775ZnL2/fffT8ql/uxXHeecc05S7h//+EfRzwb+n9Tn01//+tfJe26xxRZJuZtvvjkpd9pppyWfDQA19fWvfz0pd+utt2aeZO1+8pOflOxs6h7vjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIoLzUA9RlrVu3Ts6OHTs2Kde3b9+ajrNW8+fPT8o9//zzSbkjjzwyKbdixYqkXH3RvHnzpNzo0aOTcocffnjy2atXr07KzZkzJyn35JNPJp8NrN86d+5c1P1+97vfFXW/XIYMGZKUu+6665JyZ555ZlLu+uuvT8oB9ctee+2VnJ00aVJSLvXnhilTpiSfvf/++ydni+nOO+8sybnVdeWVVybl3n777aKe+9e//jU5O3369KKeDdQv3//+95Ny1Xm+f+edd5JyF198cfKeAFAT5eXpddUJJ5yQlNtss81qOs5a3XXXXUm51Gss6wfvjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIoLzUA9RlN910U3J2r732SsoVCoWk3PTp05PP/slPfpKUe+yxx5L3rOsqKiqSs/vuu29S7vTTT0/K7bjjjkm51atXJ+Ui0v+7uPfee5P3BNZvqc+Te+yxR+ZJ1u7MM89Myj377LNFP3uLLbZIyg0ePDgpd9111yXlqvPPe+jQoclZoLSOOeaY5Oxxxx1X1LM7duyYnD322GOLenaqH/7whyU5NyJi2rRpydkWLVok5ebNm5eUe/XVV5PPBkix6aabFn3PZ555Jim3ZMmSop8NAF/UuXPn5Owpp5yScZKvNnPmzKTcypUrM09CfeKdsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMigv9QClsPHGGyflevfuXfSz33nnnaTc/vvvn7znnDlzajpOrfn617+elJswYUJSrkmTJslnt2zZMjkL0FDsscceRd0v9VqzxRZbFPXcXJ577rmk3H333ZeUq6ioSMr99a9/TcpFRFx77bVJubPOOit5TyCP4447Ljm7evXqop69zTbbJGd//etfJ+UaNUp7zW6x/y45LFiwIDmb+jPGRx99lJSbPXt2Um7EiBFJuYiIxx57LDkLsL7Zdtttk3I77bRT0c8uL0+7xdqmTZukXOq1BoDiqM7PDVdddVXGSWiovDMWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABkoYwEAAAAAAAAyUMYCAAAAAAAAZKCMBQAAAAAAAMhAGQsAAAAAAACQgTIWAAAAAAAAIIPyUg9QCgsXLkzKvfDCC8l7brXVVkm5jTbaKCnXq1ev5LNXr16dlJs7d25SrkmTJkm5Pn36JOWqY5NNNknKFQqFop9dSlOmTEnKjRs3LvMkQENx3333JeUGDx6clBs6dOi6jNPgzZkzJym35557Ju85e/bspNzkyZOTcqn/TQDV94c//CE5O3DgwHyDUMVmm22WnE39uap169ZJuS5duiTl7rzzzqQcQA79+/dPyrVp0yYp99FHH9V8mHX02GOPJeU6depU9LM33njjpNzBBx+clLv33nvXZRyAeunHP/5xyc6+8cYbk7PLli3LOAkNlXfGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGRQVigUCsXY6N13342KiopibFVntGrVKjn7X//1X0m5k046qabjrNX8+fOTcgsXLkzKlZeXJ+W23nrrpFx1lJWVJeWK9J9tVkcddVRydty4cUm55cuX13Sc9UJ9+O9ifdMQrw1QW1Kf05599tmkXJ8+fdZlnHrLtaHuaYjXhhYtWiRne/TokZQbMWJETcdZZ6X8nvyNN95Iyl1zzTVJuTvuuCP57NS/T9euXZNyXbp0Scp9+OGHSbmIiFGjRiXlzj777OQ910euDXVPQ7w25NCpU6ek3J/+9KfkPbfZZpuk3IwZM5JyN998c/LZqY455pik3E477ZSUmz17dvLZG220UVKuXbt2Sbmrr746KXf++ecn5Sge14a6x7Wh4TjnnHOScj/84Q+T9+zevXtS7u23307KDRo0KPnsN998MzlL/VbMa4N3xgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyKCsUCgUirHRu+++GxUVFcXYqkHr1KlTUm7gwIHJe+6zzz5Jue233z55z1LZfPPNk3Jt2rTJO8hXuOyyy5JyP/vZzzJPwpcV6emMInJtgJor9nNaWVlZUferL1wb6h7XBuq71O/zL7rooqKfPWrUqKTccccdV/SzGxLXhrrHtaG4OnbsmJwdM2ZMUm633XZLyjVqVLr3fcyaNSspd8ABByTvud9++yXlbr311qTcq6++mpTbc889k3IREStXrkzOsnauDXWPa0PDsXjx4qRcy5Yti372ww8/nJQbNGhQ0c+m/ivmtcE7YwEAAAAAAAAyUMYCAAAAAAAAZKCMBQAAAAAAAMhAGQsAAAAAAACQgTIWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABkoYwEAAAAAAAAyKC/1AOubuXPnJuVuueWW5D2rk63r5syZk5Rr3bp10c9+4IEHknJXXXVV0c8GSHHttdcmZ88666yMk1Abnn322aTcHnvskXkSAL6orKwsKdeoUfFf+5x6NrB+e++995Kze+65Z1JuwIABSbnTTjst+exUv/nNb5Jyqd8/z5gxI/ns/fbbLylXKBSScjvttFNRcxERkydPTs4CrG/+93//t9QjQER4ZywAAAAAAABAFspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABuWlHoD6q0mTJsnZiRMnJuU233zzpFyhUEg++913303Kff/730/KffLJJ8lnAxTTmWeemZw966yzMk5Cbdhjjz1KPQLAeqW8PO3H41atWiXlVq9evS7jrFF1fg4CKKZx48YVNQcAteGll14q9QgQEd4ZCwAAAAAAAJCFMhYAAAAAAAAgA2UsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJBBeakHoO5p3bp1Uu73v/998p677bZbTcdZowULFiRnv/Od7yTlPvnkk5qOA1DnVFRUJOXmzJmTeRK+6Iwzzij6nvfff3/R9wRYH3Xu3Dkpd+qpp2aeZO3Gjh1bsrMB1kcvvvhiUu6zzz5LyjVu3Dgpd9JJJyXlIiImT56cnAUASsM7YwEAAAAAAAAyUMYCAAAAAAAAZKCMBQAAAAAAAMhAGQsAAAAAAACQgTIWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABkoYwEAAAAAAAAyUMYCAAAAAAAAZFBe6gGoe6666qqk3N577130sxctWpSUGzRoUPKeL730Uk3HAahTzjzzzOTstddem5QbOnRoTcfhCyoqKpJy1113XdHPPuuss4q+J0BD0aFDh+TsbbfdlnGStTvnnHOSs2PHjs04CQBf9uqrryblPvvss6Rc48aNk3LVuefWqlWrpNySJUuS9wSo68rKyko9AlSLd8YCAAAAAAAAZKCMBQAAAAAAAMhAGQsAAAAAAACQgTIWAAAAAAAAIANlLAAAAAAAAEAGylgAAAAAAACADJSxAAAAAAAAABkoYwEAAAAAAAAyUMYCAAAAAAAAZFBe6gFYdx07dkzKXXbZZUm5Y489dh2mWbNFixYl5fr165eUmzp16jpMA1A/XX/99cnZIUOGJOWGDh2alLvvvvuSz25IKioqknKzZ88u+tn3339/Um7OnDlFPxugoajO9WuPPfbIOMnaffjhhyU5F4DiSb3epN5z22KLLZLPbtq0aXIWoBQmTJiQlDv88MOT9ywUCkm5/v37J+Xuueee5LOhJrwzFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACCD8lIPwLq74IILknLHHHNMUq5QKKzLOGv03e9+Nyk3derUop8NsD464ogjknK/+93vknKDBw9Oyo0ZMyYpVx333XdfUm7o0KHJe6b+fYYMGZK8Z4rrrrsuOXvWWWcV9WygYZo5c2Zy9vHHH0/KnXDCCTUdZ52lPj//5Cc/Scr17ds3+ezVq1cnZ1OkXhOnT59e1HMBqH3vvvtuyc7+0Y9+lJT7r//6r8yTAKzZr371q6Tcfvvtl7xnq1atknKpvcQ999yTfDbUhHfGAgAAAAAAAGSgjAUAAAAAAADIQBkLAAAAAAAAkIEyFgAAAAAAACADZSwAAAAAAABABspYAAAAAAAAgAyUsQAAAAAAAAAZKGMBAAAAAAAAMlDGAgAAAAAAAGSgjAUAAAAAAADIoLzUA7Bme++9d3L2uOOOK+rZhUIhKXf11Vcn7zlx4sQaTgNATcyZMycp16dPn6Tc0KFDk3KDBw9OykVEDBkyJCn3u9/9LnnPYrv//vuTctddd11S7rnnnluXcQCqeP/995OzqT83bLPNNkm51J8bqqN3795JuWbNmiXlVq9enXz2p59+mpS7+eabk3IXXXRRUm7lypVJOQDqrltuuSUpl3ptqI7UayJAqTzxxBNJuR//+MfJe44aNaqm40BJeGcsAAAAAAAAQAbKWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAABkoIwFAAAAAAAAyEAZCwAAAAAAAJCBMhYAAAAAAAAgA2UsAAAAAAAAQAblpR6ANbv55puTs82aNUvKFQqFpNxrr72WlLvggguScgDUf/fdd19RcwAUxxFHHJGcHTNmTFJu7733TsqtXr06+ez6IPVnsJ/+9KeZJwEAgPXP6NGjs2ShLvDOWAAAAAAAAIAMlLEAAAAAAAAAGShjAQAAAAAAADJQxgIAAAAAAAD/Xzt3bNpYEIVhdAxCkVODE/WhDpwKF+Ie3IozqQQVoAYUCxwokHGiwBgHgrfhLmaDsZifmV3OiS+jBw/mBh9PBIixAAAAAAAAAAFiLAAAAAAAAECAGAsAAAAAAAAQIMYCAAAAAAAABIixAAAAAAAAAAGz3g/A363X6+rZ5+fnqrnD4VA1t1qtqn8bAADo5/X1tXr24eGham6z2VTNzefzqrnlclk1V0op5/O5au7p6alqbrfbVf/229tb9SwA/Onz87NqrnbH/sRPdh0A0IcvYwEAAAAAAAACxFgAAAAAAACAADEWAAAAAAAAIECMBQAAAAAAAAgQYwEAAAAAAAACxFgAAAAAAACAADEWAAAAAAAAIECMBQAAAAAAAAgQYwEAAAAAAAACbqZpmlocdDwey2KxaHEUwFUaXWc0ZDcAvdkN47Eb/h+3t7dVc4+Pj9Vnnk6nqrntdlt9JnxnN4zHbgB6sxvGYzcAvbXcDb6MBQAAAAAAAAgQYwEAAAAAAAACxFgAAAAAAACAADEWAAAAAAAAIECMBQAAAAAAAAgQYwEAAAAAAAACxFgAAAAAAACAADEWAAAAAAAAIECMBQAAAAAAAAgQYwEAAAAAAAACZr0fAAAAgH/Px8dH1dzLy0v4SQAAAGBcvowFAAAAAAAACBBjAQAAAAAAAALEWAAAAAAAAIAAMRYAAAAAAAAgQIwFAAAAAAAACBBjAQAAAAAAAALEWAAAAAAAAICAZjH2crm0OgrgKu6h8XgnQG/uofF4J0Bv7qHxeCdAb+6h8XgnQG8t76FmMfb9/b3VUQBXOZ1OvR+Bb+wGoDe7YTx2A9Cb3TAeuwHozW4Yj90A9NZyN/ibYgAAAAAAAICAm2maphYHfX19lf1+X0op5e7ursxmsxbHAlS7v7939wzGbgB6sxvGYzcAvdkN47EbgN7shvHYDUBvLXdDsxgLAAAAAAAAwG/+phgAAAAAAAAgQIwFAAAAAAAACBBjAQAAAAAAAALEWAAAAAAAAIAAMRYAAAAAAAAgQIwFAAAAAAAACBBjAQAAAAAAAALEWAAAAAAAAIAAMRYAAAAAAAAgQIwFAAAAAAAACBBjAQAAAAAAAALEWAAAAAAAAIAAMRYAAAAAAAAgQIwFAAAAAAAACBBjAQAAAAAAAALEWAAAAAAAAIAAMRYAAAAAAAAg4BcB4UF4Odp31AAAAABJRU5ErkJggg==",
- "text/plain": [
- "