Skip to content

Instantly share code, notes, and snippets.

@raidery
Created December 29, 2019 15:23
Show Gist options
  • Save raidery/f50cccf2750ce9500b86cce6202a5312 to your computer and use it in GitHub Desktop.
Save raidery/f50cccf2750ce9500b86cce6202a5312 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"https://www.bigdatauniversity.com\"><img src=\"https://ibm.box.com/shared/static/qo20b88v1hbjztubt06609ovs85q8fau.png\" width=\"400px\" align=\"center\"></a>\n",
"\n",
"<h1 align=\"center\"><font size=\"5\">RESTRICTED BOLTZMANN MACHINES</font></h1>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>Introduction</h3>\n",
"<b>Restricted Boltzmann Machine (RBM):</b> RBMs are shallow neural nets that learn to reconstruct data by themselves in an unsupervised fashion. \n",
"\n",
"\n",
"<h4>Why are RBMs important?</h4>\n",
"It can automatically extract <b>meaningful</b> features from a given input.\n",
"\n",
"\n",
"<h4>How does it work?</h4>\n",
"RBM is a 2 layer neural network. Simply, RBM takes the inputs and translates those into a set of binary values that represents them in the hidden layer. Then, these numbers can be translated back to reconstruct the inputs. Through several forward and backward passes, the RBM will be trained, and a trained RBM can reveal which features are the most important ones when detecting patterns. \n",
"\n",
"\n",
"<h4>What are the applications of RBM?</h4>\n",
"RBM is useful for <a href='http://www.cs.utoronto.ca/~hinton/absps/netflixICML.pdf'> Collaborative Filtering</a>, dimensionality reduction, classification, regression, feature learning, topic modeling and even <b>Deep Belief Networks</b>.\n",
"\n",
"\n",
"\n",
"<h4>Is RBM a generative or Discriminative model?</h4>\n",
"RBM is a generative model. Let me explain it by first, see what is different between discriminative and generative models: \n",
"\n",
"<b>Discriminative:</b> Consider a classification problem in which we want to learn to distinguish between Sedan cars (y = 1) and SUV cars (y = 0), based on some features of cars. Given a training set, an algorithm like logistic regression tries to find a straight line—that is, a decision boundary—that separates the suv and sedan. \n",
"<b>Generative:</b> looking at cars, we can build a model of what Sedan cars look like. Then, looking at SUVs, we can build a separate model of what SUV cars look like. Finally, to classify a new car, we can match the new car against the Sedan model, and match it against the SUV model, to see whether the new car looks more like the SUV or Sedan. \n",
"\n",
"Generative Models specify a probability distribution over a dataset of input vectors. We can do both supervise and unsupervised tasks with generative models:\n",
"<ul>\n",
" <li>In an unsupervised task, we try to form a model for P(x), where P is the probability given x as an input vector.</li>\n",
" <li>In the supervised task, we first form a model for P(x|y), where P is the probability of x given y(the label for x). For example, if y = 0 indicates whether a car is a SUV or y = 1 indicates indicate a car is a Sedan, then p(x|y = 0) models the distribution of SUVs’ features, and p(x|y = 1) models the distribution of Sedans’ features. If we manage to find P(x|y) and P(y), then we can use <code>Bayes rule</code> to estimate P(y|x), because: $$p(y|x) = \\frac{p(x|y)p(y)}{p(x)}$$</li>\n",
"</ul>\n",
"Now the question is, can we build a generative model, and then use it to create synthetic data by directly sampling from the modeled probability distributions? Lets see. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>Table of Contents</h2>\n",
"<ol>\n",
" <li><a href=\"#ref1\">Initialization</a></li>\n",
" <li><a href=\"#ref2\">RBM layers</a></li>\n",
" <li><a href=\"#ref3\">What RBM can do after training?</a></li>\n",
" <li><a href=\"#ref4\">How to train the model?</a></li>\n",
" <li><a href=\"#ref5\">Learned features</a></li>\n",
"</ol>\n",
"<p></p>\n",
"</div>\n",
"<br>\n",
"\n",
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a id=\"ref1\"></a>\n",
"<h3>Initialization</h3>\n",
"\n",
"First we have to load the utility file which contains different utility functions that are not connected\n",
"in any way to the networks presented in the tutorials, but rather help in\n",
"processing the outputs into a more understandable way."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import urllib.request\n",
"with urllib.request.urlopen(\"http://deeplearning.net/tutorial/code/utils.py\") as url:\n",
" response = url.read()\n",
"target = open('utils.py', 'w')\n",
"target.write(response.decode('utf-8'))\n",
"target.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we load in all the packages that we use to create the net including the TensorFlow package:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"FuelConsumption.csv\n",
"ML0120EN-1.1-Review-TensorFlow-Hello-World.ipynb\n",
"ML0120EN-1.2-Review-LinearRegressionwithTensorFlow.ipynb\n",
"ML0120EN-1.4-Review-LogisticRegressionwithTensorFlow.ipynb\n",
"ML0120EN-2.1-Review-Understanding_Convolutions.ipynb\n",
"ML0120EN-2.2-Review-CNN-MNIST-Dataset.ipynb\n",
"ML0120EN-3.1-Reveiw-LSTM-basics.ipynb\n",
"ML0120EN-3.2-Review-LSTM-LanguageModelling.ipynb\n",
"ML0120EN-4.1-Review-RBMMNIST.ipynb\n",
"MNIST_data\n",
"__pycache__\n",
"bird.jpg\n",
"num3.jpg\n",
"summary_logs\n",
"utils.py\n",
"utils1.py\n"
]
}
],
"source": [
"!ls"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import numpy as np\n",
"from tensorflow.examples.tutorials.mnist import input_data\n",
"#!pip install pillow\n",
"from PIL import Image\n",
"from utils import tile_raster_images\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a id=\"ref2\"></a>\n",
"<h3>RBM layers</h3>\n",
"\n",
"An RBM has two layers. The first layer of the RBM is called the <b>visible</b> (or input layer). Imagine that our toy example, has only vectors with 7 values, so the visible layer must have j=7 input nodes. \n",
"The second layer is the <b>hidden</b> layer, which possesses i neurons in our case. Each hidden node can have either 0 or 1 values (i.e., si = 1 or si = 0) with a probability that is a logistic function of the inputs it receives from the other j visible units, called for example, p(si = 1). For our toy sample, we'll use 2 nodes in the hidden layer, so i = 2.\n",
"\n",
"<center><img src=\"https://ibm.box.com/shared/static/eu26opvcefgls6vnwuo29uwp0nudmokh.png\" alt=\"RBM Model\" style=\"width: 400px;\"></center>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"Each node in the first layer also has a <b>bias</b>. We will denote the bias as “v_bias” for the visible units. The <b>v_bias</b> is shared among all visible units.\n",
"\n",
"Here we define the <b>bias</b> of second layer as well. We will denote the bias as “h_bias” for the hidden units. The <b>h_bias</b> is shared among all hidden units"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"v_bias = tf.placeholder(\"float\", [7])\n",
"h_bias = tf.placeholder(\"float\", [2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have to define weights among the input layer and hidden layer nodes. In the weight matrix, the number of rows are equal to the input nodes, and the number of columns are equal to the output nodes. Let <b>W</b> be the Tensor of 7x2 (7 - number of visible neurons, 2 - number of hidden neurons) that represents weights between neurons. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"W = tf.constant(np.random.normal(loc=0.0, scale=1.0, size=(7, 2)).astype(np.float32))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a id=\"ref3\"></a>\n",
"<h3>What RBM can do after training?</h3>\n",
"Think RBM as a model that has been trained based on images of a dataset of many SUV and Sedan cars. Also, imagine that the RBM network has only two hidden nodes, one for the weight and, and one for the size of cars, which in a sense, their different configurations represent different cars, one represent SUV cars and one for Sedan. In a training process, through many forward and backward passes, RBM adjust its weights to send a stronger signal to either the SUV node (0, 1) or the Sedan node (1, 0) in the hidden layer, given the pixels of images. Now, given a SUV in hidden layer, which distribution of pixels should we expect? RBM can give you 2 things. First, it encodes your images in hidden layer. Second, it gives you the probability of observing a case, given some hidden values.\n",
"\n",
"\n",
"<h3>How to inference?</h3>\n",
"\n",
"RBM has two phases:\n",
"<ul>\n",
" <li>Forward Pass</li> \n",
" <li>Backward Pass or Reconstruction</li>\n",
"</ul>\n",
"\n",
"<b>Phase 1) Forward pass:</b> Input one training sample (one image) <b>X</b> through all visible nodes, and pass it to all hidden nodes. Processing happens in each node in the hidden layer. This computation begins by making stochastic decisions about whether to transmit that input or not (i.e. to determine the state of each hidden layer). At the hidden layer's nodes, <b>X</b> is multiplied by a <b>$W_{ij}$</b> and added to <b>h_bias</b>. The result of those two operations is fed into the sigmoid function, which produces the node’s output, $p({h_j})$, where j is the unit number. \n",
"\n",
"\n",
"$p({h_j})= \\sigma(\\sum_i w_{ij} x_i)$, where $\\sigma()$ is the logistic function.\n",
"\n",
"\n",
"Now lets see what $p({h_j})$ represents. In fact, it is the probabilities of the hidden units. And, all values together are called <b>probability distribution</b>. That is, RBM uses inputs x to make predictions about hidden node activations. For example, imagine that the values of $h_p$ for the first training item is [0.51 0.84]. It tells you what is the conditional probability for each hidden neuron to be at Phase 1): \n",
"<ul>\n",
" <li>p($h_{1}$ = 1|V) = 0.51</li>\n",
" <li>($h_{2}$ = 1|V) = 0.84</li> \n",
"</ul>\n",
"\n",
"As a result, for each row in the training set, <b>a vector/tensor</b> is generated, which in our case it is of size [1x2], and totally n vectors ($p({h})$=[nx2]). \n",
"\n",
"We then turn unit $h_j$ on with probability $p(h_{j}|V)$, and turn it off with probability $1 - p(h_{j}|V)$.\n",
"\n",
"Therefore, the conditional probability of a configuration of h given v (for a training sample) is:\n",
"\n",
"$$p(\\mathbf{h} \\mid \\mathbf{v}) = \\prod_{j=0}^H p(h_j \\mid \\mathbf{v})$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, sample a hidden activation vector <b>h</b> from this probability distribution $p({h_j})$. That is, we sample the activation vector from the probability distribution of hidden layer values. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before we go further, let's look at a toy example for one case out of all input. Assume that we have a trained RBM, and a very simple input vector such as [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], lets see what would be the output of forward pass:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input: [[1. 0. 0. 1. 0. 0. 0.]]\n",
"hb: [0.1 0.1]\n",
"w: [[-0.0874574 -0.45373732]\n",
" [-0.45822284 0.64929986]\n",
" [ 0.4849262 0.228631 ]\n",
" [ 0.6104384 0.36003128]\n",
" [-0.02215557 -1.2187916 ]\n",
" [ 0.820069 -2.1434085 ]\n",
" [-1.7950305 1.8821483 ]]\n",
"p(h|v): [[0.65089625 0.5015735 ]]\n",
"h0 states: [[1. 0.]]\n"
]
}
],
"source": [
"sess = tf.Session()\n",
"X = tf.constant([[1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0]])\n",
"v_state = X\n",
"print (\"Input: \", sess.run(v_state))\n",
"\n",
"h_bias = tf.constant([0.1, 0.1])\n",
"print (\"hb: \", sess.run(h_bias))\n",
"print (\"w: \", sess.run(W))\n",
"\n",
"# Calculate the probabilities of turning the hidden units on:\n",
"h_prob = tf.nn.sigmoid(tf.matmul(v_state, W) + h_bias) #probabilities of the hidden units\n",
"print (\"p(h|v): \", sess.run(h_prob))\n",
"\n",
"# Draw samples from the distribution:\n",
"h_state = tf.nn.relu(tf.sign(h_prob - tf.random_uniform(tf.shape(h_prob)))) #states\n",
"print (\"h0 states:\", sess.run(h_state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>Phase 2) Backward Pass (Reconstruction):</b>\n",
"The RBM reconstructs data by making several forward and backward passes between the visible and hidden layers.\n",
"\n",
"So, in the second phase (i.e. reconstruction phase), the samples from the hidden layer (i.e. h) play the role of input. That is, <b>h</b> becomes the input in the backward pass. The same weight matrix and visible layer biases are used to go through the sigmoid function. The produced output is a reconstruction which is an approximation of the original input."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"b: [0.1 0.2 0.1 0.1 0.1 0.2 0.1]\n",
"p(vi∣h): [[0.5031356 0.43580064 0.6422001 0.670498 0.5194513 0.734986\n",
" 0.15511544]]\n",
"v probability states: [[0. 1. 0. 1. 0. 1. 0.]]\n"
]
}
],
"source": [
"vb = tf.constant([0.1, 0.2, 0.1, 0.1, 0.1, 0.2, 0.1])\n",
"print (\"b: \", sess.run(vb))\n",
"v_prob = sess.run(tf.nn.sigmoid(tf.matmul(h_state, tf.transpose(W)) + vb))\n",
"print (\"p(vi∣h): \", v_prob)\n",
"v_state = tf.nn.relu(tf.sign(v_prob - tf.random_uniform(tf.shape(v_prob))))\n",
"print (\"v probability states: \", sess.run(v_state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"RBM learns a probability distribution over the input, and then, after being trained, the RBM can generate new samples from the learned probability distribution. As you know, <b>probability distribution</b>, is a mathematical function that provides the probabilities of occurrence of different possible outcomes in an experiment.\n",
"\n",
"The (conditional) probability distribution over the visible units v is given by\n",
"\n",
"$p(\\mathbf{v} \\mid \\mathbf{h}) = \\prod_{i=0}^V p(v_i \\mid \\mathbf{h}),$\n",
"\n",
"\n",
"where,\n",
"\n",
"$p(v_i \\mid \\mathbf{h}) = \\sigma\\left( a_i + \\sum_{j=0}^H w_{ji} h_j \\right)$\n",
"\n",
"so, given current state of hidden units and weights, what is the probability of generating [1. 0. 0. 1. 0. 0. 0.] in reconstruction phase, based on the above <b>probability distribution</b> function?"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1. 0. 0. 1. 0. 0. 0.]]\n",
"[0.5031356 0.43580064 0.6422001 0.670498 0.5194513 0.734986\n",
" 0.15511544]\n"
]
},
{
"data": {
"text/plain": [
"0.007327552123952831"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inp = sess.run(X)\n",
"print(inp)\n",
"print(v_prob[0])\n",
"v_probability = 1\n",
"for elm, p in zip(inp[0],v_prob[0]) :\n",
" if elm ==1:\n",
" v_probability *= p\n",
" else:\n",
" v_probability *= (1-p)\n",
"v_probability"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How similar X and V vectors are? Of course, the reconstructed values most likely will not look anything like the input vector because our network has not trained yet. Our objective is to train the model in such a way that the input vector and reconstructed vector to be same. Therefore, based on how different the input values look to the ones that we just reconstructed, the weights are adjusted. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"<h2>MNIST</h2>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will be using the MNIST dataset to practice the usage of RBMs. The following cell loads the MNIST dataset."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-10-a0c1bc5755ed>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
"WARNING:tensorflow:From /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please write your own downloading logic.\n",
"WARNING:tensorflow:From /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use tf.data to implement this functionality.\n",
"Extracting MNIST_data/train-images-idx3-ubyte.gz\n",
"WARNING:tensorflow:From /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use tf.data to implement this functionality.\n",
"Extracting MNIST_data/train-labels-idx1-ubyte.gz\n",
"WARNING:tensorflow:From /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use tf.one_hot on tensors.\n",
"Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n",
"Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n",
"WARNING:tensorflow:From /home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
]
}
],
"source": [
"mnist = input_data.read_data_sets(\"MNIST_data/\", one_hot=True)\n",
"trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets look at the dimension of the images."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(784,)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trX[1].shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"MNIST images have 784 pixels, so the visible layer must have 784 input nodes. For our case, we'll use 50 nodes in the hidden layer, so i = 50."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"vb = tf.placeholder(\"float\", [784])\n",
"hb = tf.placeholder(\"float\", [50])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let <b>W</b> be the Tensor of 784x50 (784 - number of visible neurons, 50 - number of hidden neurons) that represents weights between the neurons. "
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"W = tf.placeholder(\"float\", [784, 50])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets define the visible layer:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"v0_state = tf.placeholder(\"float\", [None, 784])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can define hidden layer:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"h0_prob = tf.nn.sigmoid(tf.matmul(v0_state, W) + hb) #probabilities of the hidden units\n",
"h0_state = tf.nn.relu(tf.sign(h0_prob - tf.random_uniform(tf.shape(h0_prob)))) #sample_h_given_X"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we define reconstruction part:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"v1_prob = tf.nn.sigmoid(tf.matmul(h0_state, tf.transpose(W)) + vb) \n",
"v1_state = tf.nn.relu(tf.sign(v1_prob - tf.random_uniform(tf.shape(v1_prob)))) #sample_v_given_h"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h3>What is objective function?</h3>\n",
"\n",
"<b>Goal</b>: Maximize the likelihood of our data being drawn from that distribution\n",
"\n",
"<b>Calculate error:</b> \n",
"In each epoch, we compute the \"error\" as a sum of the squared difference between step 1 and step n,\n",
"e.g the error shows the difference between the data and its reconstruction.\n",
"\n",
"<b>Note:</b> tf.reduce_mean computes the mean of elements across dimensions of a tensor."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"err = tf.reduce_mean(tf.square(v0_state - v1_state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a id=\"ref4\"></a>\n",
"<h3>How to train the model?</h3>\n",
"<b>Warning!!</b> The following part discuss how to train the model which needs some algebra background. Still, you can skip this part and run the next cells.\n",
"\n",
"As mentioned, we want to give a high probability to the input data we train on. So, in order to train an RBM, we have to maximize the product of probabilities assigned to all rows v (images) in the training set V (a matrix, where each row of it is treated as a visible vector v):\n",
"\n",
"<img src=\"https://wikimedia.org/api/rest_v1/media/math/render/svg/d42e9f5aad5e1a62b11b119c9315236383c1864a\">\n",
"\n",
"\n",
"Which is equivalent, maximizing the expected log probability of V:\n",
"\n",
"\n",
"<img src=\"https://wikimedia.org/api/rest_v1/media/math/render/svg/ba0ceed99dca5ff1d21e5ace23f5f2223f19efc0\">\n",
"\n",
"\n",
"So, we have to update the weights wij to increase p(v) for all v in our training data during training. So we have to calculate the derivative:\n",
"\n",
"\n",
"$$\\frac{\\partial \\log p(\\mathbf v)}{\\partial w_{ij}}$$\n",
"\n",
"This cannot be easily done by typical <b>gradient descent (SGD)</b>, so we can use another approach, which has 2 steps:\n",
"<ol>\n",
" <li>Gibbs Sampling</li>\n",
" <li>Contrastive Divergence</li>\n",
"</ol> \n",
" \n",
"<h3>Gibbs Sampling</h3> \n",
"First, given an input vector v we are using p(h|v) for prediction of the hidden values h. \n",
"<ul>\n",
" <li>$p(h|v) = sigmoid(X \\otimes W + hb)$</li>\n",
" <li>h0 = sampleProb(h0)</li>\n",
"</ul>\n",
" \n",
"Then, knowing the hidden values, we use p(v|h) for reconstructing of new input values v. \n",
"<ul>\n",
" <li>$p(v|h) = sigmoid(h0 \\otimes transpose(W) + vb)$</li>\n",
" <li>$v1 = sampleProb(v1)$ (Sample v given h)</li>\n",
"</ul>\n",
" \n",
"This process is repeated k times. After k iterations we obtain an other input vector vk which was recreated from original input values v0 or X.\n",
"\n",
"Reconstruction steps:\n",
"<ul>\n",
" <li> Get one data point from data set, like <i>x</i>, and pass it through the net</li>\n",
" <li>Pass 0: (x) $\\Rightarrow$ (h0) $\\Rightarrow$ (v1) (v1 is reconstruction of the first pass)</li>\n",
" <li>Pass 1: (v1) $\\Rightarrow$ (h1) $\\Rightarrow$ (v2) (v2 is reconstruction of the second pass)</li>\n",
" <li>Pass 2: (v2) $\\Rightarrow$ (h2) $\\Rightarrow$ (v3) (v3 is reconstruction of the third pass)</li>\n",
" <li>Pass n: (vk) $\\Rightarrow$ (hk+1) $\\Rightarrow$ (vk+1)(vk is reconstruction of the nth pass)</li>\n",
"</ul>\n",
" \n",
"<h4>What is sampling here (sampleProb)?</h4>\n",
"\n",
"In forward pass: We randomly set the values of each hi to be 1 with probability $sigmoid(v \\otimes W + hb)$. \n",
"- To sample h given v means to sample from the conditional probability distribution P(h|v). It means that you are asking what are the probabilities of getting a specific set of values for the hidden neurons, given the values v for the visible neurons, and sampling from this probability distribution. \n",
"In reconstruction: We randomly set the values of each vi to be 1 with probability $ sigmoid(h \\otimes transpose(W) + vb)$.\n",
"\n",
"<h3>contrastive divergence (CD-k)</h3>\n",
"The update of the weight matrix is done during the Contrastive Divergence step. \n",
"\n",
"Vectors v0 and vk are used to calculate the activation probabilities for hidden values h0 and hk. The difference between the outer products of those probabilities with input vectors v0 and vk results in the update matrix:\n",
"\n",
"\n",
"$\\Delta W =v0 \\otimes h0 - vk \\otimes hk$ \n",
"\n",
"Contrastive Divergence is actually matrix of values that is computed and used to adjust values of the W matrix. Changing W incrementally leads to training of W values. Then on each step (epoch), W is updated to a new value W' through the equation below:\n",
"\n",
"$W' = W + alpha * \\Delta W$ \n",
"\n",
" \n",
"<b>What is Alpha?</b> \n",
"Here, alpha is some small step rate and is also known as the \"learning rate\".\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ok, lets assume that k=1, that is we just get one more step:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"h1_prob = tf.nn.sigmoid(tf.matmul(v1_state, W) + hb)\n",
"h1_state = tf.nn.relu(tf.sign(h1_prob - tf.random_uniform(tf.shape(h1_prob)))) #sample_h_given_X"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"alpha = 0.01\n",
"W_Delta = tf.matmul(tf.transpose(v0_state), h0_prob) - tf.matmul(tf.transpose(v1_state), h1_prob)\n",
"update_w = W + alpha * W_Delta\n",
"update_vb = vb + alpha * tf.reduce_mean(v0_state - v1_state, 0)\n",
"update_hb = hb + alpha * tf.reduce_mean(h0_state - h1_state, 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's start a session and initialize the variables:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"cur_w = np.zeros([784, 50], np.float32)\n",
"cur_vb = np.zeros([784], np.float32)\n",
"cur_hb = np.zeros([50], np.float32)\n",
"prv_w = np.zeros([784, 50], np.float32)\n",
"prv_vb = np.zeros([784], np.float32)\n",
"prv_hb = np.zeros([50], np.float32)\n",
"sess = tf.Session()\n",
"init = tf.global_variables_initializer()\n",
"sess.run(init)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets look at the error of the first run:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.4815421"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sess.run(err, feed_dict={v0_state: trX, W: prv_w, vb: prv_vb, hb: prv_hb})"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 0 reconstruction error: 0.099173\n",
"Epoch: 1 reconstruction error: 0.095754\n",
"Epoch: 2 reconstruction error: 0.093471\n",
"Epoch: 3 reconstruction error: 0.092173\n",
"Epoch: 4 reconstruction error: 0.091135\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#Parameters\n",
"epochs = 5\n",
"batchsize = 100\n",
"weights = []\n",
"errors = []\n",
"\n",
"for epoch in range(epochs):\n",
" for start, end in zip( range(0, len(trX), batchsize), range(batchsize, len(trX), batchsize)):\n",
" batch = trX[start:end]\n",
" cur_w = sess.run(update_w, feed_dict={ v0_state: batch, W: prv_w, vb: prv_vb, hb: prv_hb})\n",
" cur_vb = sess.run(update_vb, feed_dict={v0_state: batch, W: prv_w, vb: prv_vb, hb: prv_hb})\n",
" cur_hb = sess.run(update_hb, feed_dict={ v0_state: batch, W: prv_w, vb: prv_vb, hb: prv_hb})\n",
" prv_w = cur_w\n",
" prv_vb = cur_vb\n",
" prv_hb = cur_hb\n",
" if start % 10000 == 0:\n",
" errors.append(sess.run(err, feed_dict={v0_state: trX, W: cur_w, vb: cur_vb, hb: cur_hb}))\n",
" weights.append(cur_w)\n",
" print ('Epoch: %d' % epoch,'reconstruction error: %f' % errors[-1])\n",
"plt.plot(errors)\n",
"plt.xlabel(\"Batch Number\")\n",
"plt.ylabel(\"Error\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What is the final weight after training?"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-1.1634085 -1.2753986 -1.2005095 ... -1.2331337 -1.2638354\n",
" -1.2301917 ]\n",
" [-1.119033 -1.0385447 -1.1497291 ... -1.1500239 -1.1115321\n",
" -1.0415173 ]\n",
" [-0.28079224 -0.2849885 -0.2811861 ... -0.26885316 -0.27597892\n",
" -0.26900616]\n",
" ...\n",
" [-0.31457013 -0.29599422 -0.2964135 ... -0.2875892 -0.29161546\n",
" -0.27342165]\n",
" [-0.29064775 -0.28894693 -0.30075338 ... -0.27427268 -0.28281838\n",
" -0.31936294]\n",
" [-1.8031325 -1.6510723 -1.5959315 ... -1.791442 -1.7346625\n",
" -1.7567236 ]]\n"
]
}
],
"source": [
"uw = weights[-1].T\n",
"print (uw) # a weight matrix of shape (50,784)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a id=\"ref5\"></a>\n",
"<h3>Learned features</h3> "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can take each hidden unit and visualize the connections between that hidden unit and each element in the input vector. In our case, we have 50 hidden units. Lets visualize those."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's plot the current weights:\n",
"<b>tile_raster_images</b> helps in generating an easy to grasp image from a set of samples or weights. It transform the <b>uw</b> (with one flattened image per row of size 784), into an array (of size $25\\times20$) in which images are reshaped and laid out like tiles on a floor."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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d315Tro7FLp0xevXr5/KvhuNa9vv49rzOqQP+M44tunfEWyH7+vuHXGsJ/x7inun7c4YZN/s0q7zc+fvBvti2zLGer5oM/qH79LhXuY03tyDLrzwwqHuuOOOm8q+/4I+5ljPfvneIMZi77G33HLLVD7llFOGOp5ZfD8P48Cxxx471PGMyTumVnv/aghDIQiCIAiCIAiCIAiCpZE/KARBEARBEARBEARBsDS2C8nDysrK0+ib20CatOkgTLVlag/bM9WQdBp/jzANm3Srjhbo95HeZdotKUKmd5GaQvqJJQG0kSnn/Oz2PQaCVDan56FtnUKGdNAuDSZpqFUjDdY24vs9X3y/54s0N1KKu1RbfneXrqlLkUQakyl1tPsyVC++wz5GepxpiFwnnWzDfkVq6K233jqVvQ5pW7+bbTI9onHVVVcNn7kuTLE744wzpvJb3/rWoY6UNFO92G9S6KtGH/AYnAKIIN2PtvWcMwaYykjanuUW++6771Rm2kH309Tn2267bSo73eQ3v/nNqewYwHX4iU98Yqi75pprprJTH/32b//23DZJn7z++uuHOlIDSb13HOskJITXIdeJKb5co06z2EmI6EdOU0kJiaULlA15/VLexvVaNcaEm2++eSo7vnIfeNe73jXUnX766XP7vGXLlqnsGEopgfcB2s8+Rphay/Vs6i7nyLGQ68Z0zA0bNkzlJ598cqjjnkRZyFe+8pXhOdJbaZOqMdZ77/r93//9qeyYQ0mM38fxOcZQRmGZmuMvQV+1bQnXsS+eZ9LmGdfsf/No6/6e1xP3INuB77bdOSfuM+OK6cdce97vue59tmFfLKNgfOf7vJd06GQU3CO61NKeE47BduAe69jIOfEYGGe6VIBevxyf2+TnbqyUNVAOWDXGW8ccriH7X5fWm+cCU+gp1/IaJdXf+z3XnsfHZ/0++rvtx/ctmiLTdfRhyzLpK44/nBOvUbbZpb12XyxFIuir/k3DeWeqy6rxHNLJjjkGzyulfD5L81nbgXuSbcv389xW1Z973vOe90zlU089daijBOeBBx4Y6thvryHOs2PJImewMBSCIAiCIAiCIAiCIFga+YNCEARBEARBEARBEARLY7uQPPzUT/3UlC3AFLSOHkRaielcfNaUJlKHultWTZlh33ybOKlRlm+QhmNqGeljppzfcccdU5nUFNuI4+noW4veTFw12t02Io3ON5aSqmT6Mek0TzzxxFDHsZt2y++5L6QvmurK8bIvvrm1y+xBeq7pffxsChqpXqZUdbdvd3NE+rFp5fQr01npL6Yt0dampJGCfuSRR05lr0P6punapA47I8gFF1wwlU0PJ6XZt/By7THjQ9XoV/Yjfs80RK51jrtqlM4YN95441SmbzoecQ78btrPa4a0ysMOO2xunemlzJJw3nnnDXW8Nf7d7373UPe1r31tKnud8FZrr3veuk9aftXTx0Q4lm2Dx8PnupvSLRnhOnE/uqwznHNLpEgnpFShqurVr371VHa84FqwRIU+x6wpVeM6oV1MqzzooIOmsvcnzrn9m+OzvIi0W7fJdpytgegyifi2d86z4xH3Q2fX4D7qDCGUmpCuy6wbVaMkwTf8M76alsr4RElF1RgHuH6qxiwZviWe1H/Tf7kf+qzBz45BhPdR7hneA7neur2L/fT+RJq54yklOF7b9PdOgtDdiG/fZOyyT3MtdPJD25Z7G/vi8XQSCMaLTq7i/ZdnPs8P63y26G6QJ+wPtLttxM+dZMnrnnGGMchxmedEU7lpM8sFGB98Bu/OXF3WCtqv+x1hO9Cenufu904nv+D7uU787k4C2MkyGY8cqxizuzO490OOdZlsZ5QdeD11mSvYz3lS1aoxi5PPEyeccMJU9u/DG264YSo7PjDm7LPPPkPdtddeO5U9rxyrM2TxzOw9nWcD/9biHmj5T/cbrbPtNoShEARBEARBEARBEATB0sgfFIIgCIIgCIIgCIIgWBr5g0IQBEEQBEEQBEEQBEtju7hD4T/+4z8mPYp1StQROUUIdUPWuVLnZT0L9TqdVte6nnmpLQ3r0fjZ2qTHHntsKjsVFrVkHJ91x136lS5NTJeahXa3zovtUJtWNerBrZnq9L+cW2vHqPu3/aiTt3/wM7VJ1i9T52U9FX3HOn/CWq5Of8nxWWva3YGxxx57TGWPlVpQa52ojbP2vUszRt3cFVdcMZWtoeNn+wPTM5577rlDHbVjTPtWVbX33ntPZdvkiCOOmMpOgUddpfWxTInYaY89J9TU+c6GPffccypTu+g+0/923XXXoY66UK/R7v4B3mvBsVWNMeecc84Z6v76r/96KjsV5Xvf+96pTM161agBv+iii4Y6prc85JBDhjrqNh1TuX55x4B9jOvSGnnC6R/5PfsD44rvFmGqQesMuU7sf5dddtncfvJZahWrRq0k94SqqltuuWUqv+ENb5jK1mIyrnCNVI06cs85Y4n9qNMC06eZkstg3Koa58HrhGvPKQS7dHlsx/vOMcccM5U3btw4la0hPuuss6by3/3d3w11THfKdF1Vo3b2tNNOG+p4TwL7UTXuLR4bY7ZTWFIv67MGbeuUZ4Rt1KXNpeab/bK+nevEvsL3OQbw/gG/m3dZWMtPX/FYaZfuPhvrhLkWvEewzW6P7e4z6sBziPcBnnu8Zmhra7BpT9udNvO5m7b2eZPacfeTcB370t1HwHOpzys8Xzp9IdPx+Y4Gtu957cZA2P/4fp8ZOO/ed2g/39/A+0W6fvmcRR/nOaQ7E/ssPe+8XDX6tPfmbq/kXHqs9Eev++4czLOGz+SMSb6zi3fycI/13TaMVd7Dv/3tb6/aXtW4B3rOeReD7ym6/fbbp/KZZ545t8/2P56zfH7hHuE4TZt5LXCOPJfduWsbwlAIgiAIgiAIgiAIgmBp5A8KQRAEQRAEQRAEQRAsje1C8vCc5zznafTDbSAV0BQW0mVNLSPtx/Q00pNMFSF1qKNGdRRF02BJLTLVlfQTywD4ftrHNCbKIUyT4vgscegoVV16I9KRnJqPdvH7OCem0ZHCZWoe6VddmjHTwEgRIr3Pc06Kk6le9BVTJzk/tiX7Yto66X6mhnZ271IKcW3YtqRfWe7B93e+wz5/+ctfHp4jzdypvSh5MJ2aFOAu7au/x7HaDhwPaeRVo239PY69S61p0D/4nOnapG46JR192rGKFM9DDz10qCPV0HHlL//yL6cy041WjXY37fGb3/zmVPY6fOihh6ayqdaf/exnp7Lp1LSF/Z1+xVSApjySTuj0uoT3Ac6zbUvqqWmI7HNHv/R6Ik3QtHlKXTh3VaNPeA2ddNJJU5l7i8fKNj2vtLvHQ1p+J2/zfsh1YskhYaor45NTk9LfnRaOVFufF0g/JiW2apQp0Q4f//jHh+foV5ZpcJ3/6Z/+6VD3i7/4i1PZtFT25ZJLLpn7Pu9r9FXHEtrPtqWPOYUb4XnmOvQ8z5OIdj7mNrgOHXv52ZJDxrWuz5Y88LNTu3Kt2W/pR043yTZdt2hKbsdGoltrHLv3Sq7nLn2mz888lzgu8/xiWjnnxLGEdvF5gn7k9ctn6QM+y7CfpmBTmujUpF0K1S6+E17bXF9ug/PlvYXteG3z/OnzLGH/41qgzUx351nQc8458Vjp3x4rz1Vuk896X+MY3OYyaSQJ7sc+t3FtU0rgsxPHankH14ylpHy34wrfYSkpZXL2W/bFZ4bujEIfcPzjWrCd+dvS5yX78WoIQyEIgiAIgiAIgiAIgqXxjH9QmM1mfz2bzf5xNpt9B//387PZ7LLZbPbAU//+HOo+OJvNHpzNZltms9lJq7caBEEQBEEQBEEQBMFPMhZhKPxtVZ2s//udqrpiZWVlz6q64qnPNZvN9q2q06tqv6e+8+ez2Ww+hzsIgiAIgiAIgiAIgp9IPKPwa2VlZeNsNttV//36qjruqfJnquqqqvrAU///DysrK/+9qrbOZrMHq+qwqrqhGqysrEw6OmudqF209o66EWvvqHWxHo3aEOul+T3rUqh/cz+pfbHui/12GhymL7FGkH3ju52ShONzn7sUhYvq+ayLYj/dBrVC1oCx39YcUl9lfR11w75jgPNuHyCsUZ33btuImmjr3fi9Tq/a+VGXvsugrs16Jvq07cC5dKob2tNpmKhxe93rXjeVmQKnavRpzys10tSCuy9OZUffP/DAA4c63tnAND6G/a/T3nP9WnNmTTbBtdGl/WJ6MveLqScdOzg/N99881DHd1x33XVDHTV8TlO5adOmqXzQQQcNdUxLeNNNNw119HHHP96XwvFUjTpOr1+Ol2vB65Cxw3fUMIZa+8k5tz6RGkvPF33TfeZdN/apN73pTVOZ6R7dT8dUzhHTgVaN/k6No+9moe7fc3D11VdPZY+H/ugYQPi+CKamcgpLwnPZpcJiXHMs2X///aey7Ucf450QVaN2/Bvf+MZU9pwz3jG9pNt/y1veMtRRu21dN8fqdX/YYYdNZetq2WefC+jHPhPRH62z5h0oXcpo24X6bL7P2mOOz21wr3Sf2b79gfec+H4j+of1vqzjuKvGOxSss+7S43H/d/xjvzl2p0fszlys85mBbXo9sc73JPCzz7o82/jMQLt4T+IZxe/jPHuNct59DqHf0jdtB54nPD+cE9uIcc1z0M0J++Ln2Gef2/g925a+6bXdpW/l2P0+2p17pd9Nzbz18/xs/+Za9/fYT5/dGRM81s7ui56DfVcB9yjvZWyTa9l2nmfLqvG+HN43VTXGGY+Vc/e2t71tqNtvv/2mcndfV7e3OJ054Xjb3XdE+/lOvy419Das9Q6FF66srDxZVfXUv9tG9uKqehzPPfHU/wVBEARBEARBEARB8H8Rnu1LGVf7k9OqqQRms9lvzmazTbPZbJP/Kh0EQRAEQRAEQRAEwfaNtaaN/MFsNtthZWXlydlstkNVbeNGPFFVL8FzO1XV95727apaWVn5VFV9qqrq+c9//so2apj/uEA6iqkppIeYWkaqlOk7pOGQ9lU1pt3x9/h+U6pYZ7oLKeGmqpMitNdeew11pE0xdY8pR6SLmyba2W/RP+R0tKxODmG6Gr9nGh0pVabWdumNSEV1WhpS/Lq0S4RpWKRcun36kdPzdCm0+Nm27dJP0QdsB/rjunXrhjrStkzRZqo++zSpWOedd95UNnWXNrIdmGrrve9971BHSrgpuFyHlpqQZrlhw4ahjpRm0+/oc173XJdOiWg5BsGUlpxLShyqqvbee++5bZCaZ6o66dS2wzXXXDOVSaevqnrlK185lT/2sY8NdXwHn6sa6fVeo7T7V77ylaGO887Uf1WjrMIUQsYy+pH9lOvCaUQJp1bq9gH6vvtFf3Bcpm+uX79+qDv33HOnstcJ7WlqI+m7H/jAB4Y6pv2kzMDxnHHS9ObDDz98KpuqybXgOWebppCScukUj0Q3X06BzNjV7VfeWyiLMjWe9iMt1XKfL3zhC1OZdq4a1wlpr1Xj2ePoo48e6hjjnNqQNFXLcSi7cmykb3oP5/7VUVttW37u9m2uQ+9V/J5ptp3vc93b/7jWTJOnzMH79ubNm6ey5WBbtmyZyrYt5VSek06aQdkB7eIY0KXD47O2Lfd7zx33CPs+98AuRbr7xTq32cll2E/7ACU4Tm9JHyAsVeXZ0DIXxlBT/bk/uf9d2kjaxc8xrrmOZ0XvZbSn55l+1Nnd76PvcOw+e3JevR9yH7Ddub4WTW1eNa4Z251z4rNadw7m7ynbgf7XSS+53/tsxjYs5fvzP//zqWwfo10855Qjen9nanXL9Tg+r1/6u9fTpZdeOpUtjWT8tWSJMgfPidOPr4a1MhS+XlXveKr8jqr6Gv7/9Nls9l9ms9m6qtqzqm5e5ftBEARBEARBEARBEPwE4xkZCrPZ7PP1nxcwPn82mz1RVb9XVX9YVV+czWbvqqrHqurNVVUrKyt3z2azL1bVPVX1P6rqv62srMz/818QBEEQBEEQBEEQBD+RWCTLwxlzql415/mzq+rs/5VOBUEQBEEQBEEQBEGwfWOtdyj82OC7EKjzsW6NOiXXUTtk7Ql1Sl16kq5v/h71NNbxsp8eH9OJONUS9YTU51jLT+2TNXuE66x3Ivg+94ufXcc2uzQx7gs/e3ydDot6J9vW9wxsQ5ey0qm2qNNzmiyO3ePpUil2aXasOyQWndsurajHxzF5Lll34oknTmWnqKEumfrUqqqDDz54KjvdH/XT1sdSr+U7NXhfgO8O4Fza7rvtttvc71HfbB2v54jgs9SqUddaNerP7cPU6Vl7x3SCd99991BH7R91eFWj355zzjlDHTX09qkrr7xyKlt7R022UyJSz2cfoJbRWmdq1ekffjftYttSy7pM/KOW0PGcPjdP31v19DsATjjhhKl82223DXVMt2o94imnnDKVvU5uvfXWqcz16zaoubV/804Px1fGI94rUTXOT5c213eSEI5HXOtO/UYfc9qq7p4Efs+pmbnHcp0zbWPVeHcKtbJV41ivv/76oe41r3nNqs9VVd1ww//MmO30rYy3/l53Hwv3NduBmttOh+x1yJjktcB2WNfdEWJwfryeGC+sz+Z8eR9gnc9/nCPHKq57+y19s0sF2N0fQXjv6O6t4pz73bzfyHPOmOC42aUC5Ptsd/bb6767H4q29Z1MPocTPD+zDZ9XeK+F+8U+u18c3zKXwPM8ZhuxzjGO+4LvMuE6sX/Qx7zPdemX+b1uLXPO7UfU0887O1f1sd4+xvc75vAdXQpJg7a2Hdgm7xyrGsdO3/Hc0W+dDv7YY4+dyv69wTt4HLN5X4/v6GJ6bu/9vJvI91rw3ON+0u6OTTwH+04/vsPnVN9Zshqe7SwPQRAEQRAEQRAEQRD8P4D8QSEIgiAIgiAIgiAIgqWx3UgettEyTH0hrcgUDFPQCdLxTDkircOUI9KKTLEjldKUINK0TDftUhaSdmRKC2kspIQ5RQhhGg7pVU6DtKjcw7Qi2sjv62QApHV2c+l+sc6SANJ53E+OlxQ0pzZkv9w+aT62OymXlnfwe6bY8R2WGXQgZdD97Orotx1VzhRgUttIqb/qqquG5w444ICpbMo0U+6ZAs41Q9lEVdUxxxwzlV/xilcMdaT+WwZAO9i2nRyCc2QKnKmBBG208847T2WnyiPNzeuCvtml0zruuOOGul122WVuHzkGUuqqRlqv1y/91jIK2o9pCKtG6pxjHFMmWS7DZxmrOtq1+0U4xnEtmLLHuTNNnuvEsYr+bruTonjxxRcPdfvvv/9UfvGLXzzUMV1nR9FmOkGukaqql7/85VPZ64J29z5DG5m2Tjt4z6OPdXuSKbL87HST9Gm/j2vBaR0ph6A8q2rc/1//+tdPZa9DSks4V4bnjrb1euKz9mnazNIP7nn2MfbbEilS3p3WjOj2fp+J5sniOlq+YyjnzrGRccXSN1KTPSdMa3zXXXcNdVxDtgM/O1ZRImAZCutM56ctWGe6cUft7mjmnPNO1mBZAd/n1JA8B3ku6QNev4wRpkzT/7uU2E4dSj8mVd3j4dgdqzhWrwvusT4XeM0SXdrI7qzL93msHINlXYwX7ifnxOc42pZ+5Lmjv3sfYJv+Xvc7jPZzGkLaoUt1aZ/upL+WwRBsx/7utMfb4HXHvdi+cccdd0zlCy+8cKjj/usUwdzXfB7j2cNpI7mXHXHEEUMd984777xzqKMdHFMZ1yyV4Hhtr26dbEMYCkEQBEEQBEEQBEEQLI38QSEIgiAIgiAIgiAIgqWRPygEQRAEQRAEQRAEQbA0tps7FLbprbpUPdatUZ/jVETz0vhUjdoa62yoy7JGi5ofp4ZkPzuNvrWS1DFZz0eNJcdu/RT1Mk5jRv1ll3LR4DxYb87PtjO1T12aImukOD6PgZo66iarRl1ZlzaStrSvcJ59Lwf9w9pS2papyapGPZ/fRw2n9Z2d37Kf1uxxbq3fovbUvkN9lTXm9GPOAVPjVVVddtllU9ladPq+NXvUOfq+Et630K1t6xMJxwtqqZmqsWrUku27775DnbW0BO9eoI2sTSOsM+QdA13qWN8/sHXr1rnv42frUOnj559//lB3/PHHT2Wnx2NfmF7S33vLW94y1PFOGfst9YqcZ2tL6TvWd9KPvH75Psc/3mthfTbXiWM258/38zzyyCNT+eSTTx7qLr/88qn88MMPD3XcT+y3jGO8I8J3ktBm3teoabe+nbHR62n9+vVT2T7GNdSl63Ss5xz5fhm+wzGB97P4rha+33pS+i11od/61reG5zjn9j/e2eB0bhyPbcvx0derxlRimzdvHuro00zzVTX6jtc2fdN1TmVGdCmxaRfW2cdoB8fsLh0o9yDfT8E15DtDuP9aM9+lq6NdfGbgnudzCMfrMx73XO5Pbr+7Q4HPdmczxzH6vuecffE+xr3G544uPSjrfEbm/u/zBO3n73GPYCy0nYkuPbbrGIPst10aSc6X4zLf4fni+3yXBNeG/lby5wAAIABJREFUYxzPzH4f47Tb5Pe4Xrv7G4zO/2gHv3ve7xTXea+kH3uP8FmRoB/bb+lXPpMzzTZ/w/g5vtuximcu3sdTNZ6XfP/Axo0bV3131WgHnw2ZUtc+zbm0D3PN+ncL7cc9qGo8w3q/ctxZDWEoBEEQBEEQBEEQBEGwNPIHhSAIgiAIgiAIgiAIlsZ2IXlYWVlpaUfb0KWh6dLhmbJF6o0pYqTOdVQRU9VJJzQ1hBQr03W7fnYpuwjSpkynISXIdV0akI7ayL50bZhix++ZqsSxdjRiU5A6KQP7Rtu6X/Q9j5VULKfv4rvtf12KTH42vbSjRJpCOK8vpluRwsU0XFUjDYzp8KpGai1p35s2bRqe45yYJsqUj55X+oD7vOeee05lU68+//nPT2Wm46kaaWGWXzB+mArIeXDaV9P4CFKvuxSwHLtTG5IqbCkGYxDTUlZVffjDH57KBx988FDHtWB51h/+4R9O5YsuumioY1okpvysGiUXppwzjnYSKa8TUvpIffa66NK+Et0acTyn35oKynViOzBFoaULlFHcfPPNQx3jmNfCIYccMpUdx2g/UhLtD1y/XCNVVbvuuutUtu9TZuD54X7o/Yl7YLdGTCllvLVt+Q5T/RkvnDqM/mGJytlnnz2VuQd5XTB2OPXk1VdfPZXvvffeoe6UU06Zyt7fSZH1umeMcB1jkNOkMtY7bV8ntSM8z/ye9yDajDR572tcsz4fUTLicxztcNJJJw11pOTaj9im9x3GI8cLjq9Ln+k60ql9FuB4O7p2t793/SKl3Wcu7nOWxTHmWQ7GPruOvtPJyJwClHVe24zvXBdVY1yj79vOPI91qQZtZ7Zjer39kaC/W6bBOfH5nD5n/+P7utTq3kd5NrWPsW+dTJyxtzsH2370AduL/XL6YMZD24Hj87m7k/5ybds/2DdL9PgspQXeR3ne9P5OadP9998/1DEe0Z+rRpmwYxXny3NCH7M84YILLpjK3ZnSUgn6quM0/aiTRs5DGApBEARBEARBEARBECyN/EEhCIIgCIIgCIIgCIKlkT8oBEEQBEEQBEEQBEGwNLaLOxRms9lcDSY1TNb9dWlO2F6n87eGhBoca12oAbKWn7pU3wdBnbe1Sfzcpdeizsbasc5G1ORYC9fp+br7G7r0P+ynv0c9kPVhXXo3ao+tEWSKP+un+X7OiZ+jtsqpLqnXst2pc7TdWWd/6FJ0dZpO9tN2p9bLdw6wTetq6dNOE3jkkUdOZc65n7vxxhtX/U5V1Te+8Y2pTK1x1eh/xx577FBHLbp1mtTvW+fF9Gv2Ma5tf49a0+6uFoN+Sy2r9YLUk1ofyGetqWRcsZb6N37jN1Z9rmrUeZ911llDHdeX7cC0bU4/yjR7vOOiaoyVToVFraF1jbT1TTfdNJWpt60atZid5tWaSsY824/3VXhOaBevGerpjz766KGOvul1cu21107lo446aqi78MILp/Kpp5461DEmcZ1wjVSNGk7emeAxON0k17b3BPqV76BgzHP8I7x+6O++A4B7pfcrxnPHBGpiOT9VVa961aumMu/seOihh4bnzjjjjKnsmE2drdcF7y+hD7uuu8vpnnvuGep4l4n9j+vJPsBzT5fK0+lpGRNcx7XRnRmoG3aKSu5BvhuDa8H3+DBu+lzAuXTaSO7btgPjh/22S7u56JmSY/W5ttOGd+c4wuuCY/e66O6UYcz2nS58h/cyfrZv8m4T6/x5L43Pzxwvfcx24LutN2fstyaftvUZr0uH180z59L7KOHfEYyjth991b8HaIvuniJ+z75CHbzP5/QBr/MuPnDOu98YHg/bXCQl4TbQfl7bvH+Ddx1VjeOl3T133/zmN6ey79Lh+cipfq+44oqp/LrXvW6ou/jii6cy96Oq0adf85rXDHXca7y2eVeQ7X777bdPZd/rQ/juMsYrr73u3DU984xPBEEQBEEQBEEQBEEQCPmDQhAEQRAEQRAEQRAES2O7kDysrKxMNLEuNYUp56SqmGZLmodpS6RDmb5DmodpOF0qGH7Pqexe9KIXTWXTJUkxMTWFNBaOwan/SL1yvzoq0SIUFrfvNt0GaU2m77POlDR+9vtIi73zzjvnfs8UJ9L96Fe2c0dDpM95rKSymSJGSpVpbab7ER3VkalhKAPx+z0e0sIshyD233//4TNtRiqZKYPHH3/8VLYUY/369VN53bp1Qx3tctlllw11p59++lS2TZjuzXQ10mnvvvvuoY7zZ980VZ4gldyg/3E8jlW0pdNZbtiwYSqbVn7ooYdOZdPDOZ5zzjlnqPu1X/u1qfzxj398qCOt2Okfmd6IFP2qkQ5sih0p4abRMeaZWku6LmUUpssy5nQphp0+6dFHH53Kpnjys8ezxx57TGX7Cmns9k2uS3+PVEfPJeUXpoSzHcpOzjzzzOE57hFOichYxbFVVd11111T2VRavts+TdDOhqmu7JtTPJJm7rjJOscgxhbLGOk7n/vc56byaaedNjzHFKqOK5zzt73tbUMd+2m/5Vq33UnZ957O8dmPKAMwpZ7rqdvfOzq1wb2Ftuzkc6ajc9/xPkDZYjcev48UYK9txirHdj7rOtK3fabk9ywx47rh2Lv02Abb71J3eo+lf5gCzvfbRt1c8rPPkBy7fZMx6CUveclQx/jhOE3/53Ne5xyD4xHfvai0ZLV3EJxLz0knT+Ba6KTMnQTaa4g+1kkxOB7HlU6+yfdZ7kMf6Cj09hXGQ9fRfp0Ey+hkB1xfXdpXtmFJCn9HuA3KutzHedK6qnEt8Pdg1Xieufzyy4e6X/qlX5rKnjvKnF3HmOo0x/QdxwtLTYluj9+GMBSCIAiCIAiCIAiCIFga+YNCEARBEARBEARBEARLI39QCIIgCIIgCIIgCIJgaWwXdyjMZrNJO2S9EfU61oBR7+bvUVPSpTqyRobaK+tqqZfmu6tGjbQ1sNTidZpRj4E6QGo6rTOkJt/6YmqTulQ6Buu656xVY9+6lIhdCkb3k3o+a4+ZQss6IuqW+D77ETVFvsODvmP9N7/ndHicE+txaU/PV6dTppafvuHvdToo64upsXPqsquuumoqUwtMzXXVeN+B9Yg333zzVPZY6e/WlTGlm3X+HLvtTo2b26Tm1hpB6uhsoy6VJzW+9Df7IvV77hf9yr7JuTziiCOGus985jNT2fHoyiuvXPXdVeNc/sqv/MpQR03icccdN9R1qXFpB85B1bhm7ZvUbVLz7TsAuC47/Sjv+qga9w/qJqtG37fd6QPWUvMeF9+HQtsydVNV1Zve9Kap7Jh6yy23TGXPF32JY/A9KnvvvfdUtnaW/fT8cE+y3elX1o1zzXjvIuwrHIPvDOFacypA2sV7M9MU8t6WqqpPf/rTU5n706WXXjo8x/jg+2SYPsw24rzyHoaq0X6+34i+6rmkFtixiuvEexI1sd29MN5ju9SQnFuvE4Jr2WllmcbUqS67NNT0gQceeGCoox873joeEoxB1vLzc5fe13ZgHe3Xpd8z+KzPeFxDruOcu46x0muUdne84Lr0mYtz5LqddtppKvNeHbfp8wvni2XfA0K7e1/uUj/zs+ek299pT8ex7u4Frl8/x/d194x1d1e4Tc4zfdjrifuO/btL6+4YNK/NLk2p7w/hXLqus+199903t46/vby22Tfa0vfeMM54j+Ce537w/imfIfmszyhcMz5r8DzhlLo8F/vOBsZix1v+HvF5jOvZ+1W3x29DGApBEARBEARBEARBECyN/EEhCIIgCIIgCIIgCIKlsV1IHlZWViY6RZfuxRQMUjlM0elSs5AK47QZpMWYWkualt/HNk21IaXG9BrCND3SVNkv0jur+nRNXaq8jupFm3msi6aYcl+6tD78nueE1E2/m3II24UUNc6d096QTm2qFftl/+NnU0+7tJFs0xKLjlY0L0Wh23FaQo7JdHvO0W233TbU0XdIX7Q/kHraUeEpY6ga14mpV5QymFpGOpnbpI0sNaHd/T3WmY7ZpVoiXZySEaeIYxumy3Kspmpec801q76rqurDH/7wVD7//POHupNOOmkqO44xNvp99CunMCJN0LGKc0LqeNU4XtuSUh22Ybon/bSjQ5ry26XvInXdbXKduC9cJ5YukIbotU37OZaQmuq0m6Qjc8/zc5R/ORUWU0zZRowX3ivZpkEarCn0hOnUmzZtmsqUaVSNsZ80+aqRKmo/Mh2eeOtb3zqVb7jhhqlsaUQnt6APW/LF/cl2535vW1LCZulMl9qLMOWc3/P+S3jv79Kt0daMHV4X9HfTbEnldXxlP91nxlTva7S1fZp7i32TaWwdxxgPO3mCqeRcz13Kz06utejZyb7P8Tmec167dJOOY2zTcYzt+Hv0d8dUnrscZ+alhO3kN52E13If2s997vb37qzbyYnZ704mZBkZP/tMyRhuMMayz7ZDJ6ngGvW4+dnnZ7bZSZbsR7SLY1wnU2c/LRVjfHK6707iQ1Cm6zlgemf3kWu2kzk7VjGO+RzMM9GFF1441NHulv5yDTmWsC8PPvhgzYPnuVsn2xCGQhAEQRAEQRAEQRAESyN/UAiCIAiCIAiCIAiCYGnkDwpBEARBEARBEARBECyN7eIOhdlsNmmcrEuhJtuaDup6rEvhZ2v2qOXpUjJRa1c1anD8PrZpzRQ/W2vF71njOy9lTaezd7+ol+nStnTtWN/U6fn42SnB+D7r66i9suaHdfYBPmv9Kr9HrSTT+1X1NqLOzLpnajqtmeJY3Wfa03PZaceoIbbWiu34zoFO1/3Sl750KlvvSX0uNb7W3lGr9ra3vW2o410CHitTrO27775DHVMkOhVbl/aGfbEfUXvHVD1V4/0b9qMuFRLtwr5Yv0fbOq4w5vhdjF1ON/SRj3xkKt97771D3d///d9PZWvtmRLv6quvrnk444wzhs9MI/qtb31rqOPasD6RKY3sO1xvvFfFa4ZaSfqsYU0l70JwvGNax7322muoY+xyXxgvrH2nZtQxjn719re/fahz2ifiS1/60lQ+5JBDpvIxxxwzPPeVr3xl1XdVjT7nu2Z4b4bnjrHSPs13dGnFPCe8C8R3FbBN30NC/7dt6Vd33HHHUMeUnH/yJ38ylT/72c8Oz3Ffe/WrXz3U0fe9h/MeCNv2+uuvn8reI+hXtgPhuMx2fFcBddZOX010ZwHr/Bmf5pWrxtjlcwjH6vuTuCc5ZvPc4/PEvFSDVb1Gmv32ns5++mxDH/NexjY5Po+1u7eK8BzwzGDf577T3T3j+Ee9ucfDOt+Jw3OP7wSjD3R+a/+bd2eD74riGHxWol18TwLt4vXbzQk19PZp9sV1hPcP+pzfTbs7XtDH7JvsC+ekuy/MduBnzyv9z3PHNer5Yp3XAtu0b3b3JPG+HN8JxnlneueqcT+hHbrUsf7twztdnOKRa+3d7373UMc90HPHtMY+/3Ef+upXv1rz4JTYvB/K9+zssssuU9lriPeh+QzRpaPfhjAUgiAIgiAIgiAIgiBYGvmDQhAEQRAEQRAEQRAES2O7kTxsowyR8lM10khMtemoSqTvmD7GVCqmypG65DrSjy2jILXHqfNIVXIaEqaS6ihppAuZpsI602m6FD+mLBJdqqqOdtal7mHf3BdSkEy16ShInQ/we5xXf4f2cxof2s9zRxqdfYw26lKhdhILg/Q1UzXpc5Z0sN+miDF9ot+93377TWXShk29JwXS0gWOz3RgPus1c+mll05l08o5dvsR0xB6LkkHNs2NEghTxEz1Jhhn6FemDNI/mAqoaqQtk4bv7zk+kMbOFJJVVYceeuhUdmog0rdtW/rOrbfeOtQx3d9NN9001HUpwUgN/M53vjPUzUvXaQop6Yr2v3n9qBptbVov0xJ6bXOd2H6MQQcccMBQRxs9+uijQx2lJwcddNBQx3Vif6PMgT5mKRDnsksRxzVSNfq7U5OR5sjUsf6eZQ3z2qga7ec9iPPudcJ27H9cC6bLct/54he/OJUteyLd07alX5leeuONN05lp6NlilHT+RlvTZ/tUoDSRt4/KCfheAzbvdvT50myvF/4vESQguuxMva7zU7ywDVqGRklDz4zbN26dSqbzs+xem/h52VSMBJdGkLCsYo+7L2SNHPHP+4fti3PJbYRJThO18kxWOrEfa9L+egzGO3O9h2r6Kf2h06myza9j3YpbzspA+fEMYfr0HtL975Ofsu+2LY8E3HOfQ6h3TuZuH9HcM06HjGuOX0hz2D26UVT3Br8nuWctO26deuGOvo044XPJJwvyyspo+ikg04RzH7ZRpQ1OC5fcMEFU9nnUs65YwLXjf2de7x/D9AuXkNdisltCEMhCIIgCIIgCIIgCIKlkT8oBEEQBEEQBEEQBEGwNPIHhSAIgiAIgiAIgiAIlsZ2cYfCysrKpO+ydoeaH9+vQE2M9SyLpnGx7o+6Wtexb9aX8LP1LNQOWfNDLZ41U9SI8TlrS6lpsk6JY7WGzraeV2e9GzU5XWolg+Nxm9RFLXNXhu9pINi3Lo0o9Wi+74B98Vg55/aHrk3qqay37OaEun9rOLu7MqgVtn6PaXCsQ6WGfsOGDVPZ+j3qKD0f1ItZO9bp5mgHa7A5J74DgO+3rrFLRcQ1a//r0ixS88a7EJjaqGq8A8DjpmbPaZf23HPPqXzdddcNdQcffPBUtlaSWnHOXVXVYYcdNpWp/64a/fiTn/zkUEc/9t0BjGteC9QpOy3SvHRe1n8z5ljDTp2m78bgurAGkX5sPT3jhTWWnGdq5KtGW/teFeq6rT2mTtl7BOM7Y6H9lHpIpyHkOnF84FgdH2j3LsYdeOCBQx31lv4e44xTe3H/ddo0xw+C7/DdH+vXr5/KtLPvuKBPv/nNbx7qeAeA99/zzz9/Kluvyv3YsZ2xw/pU+o518Zwv3yfCPdY+xrs5rNXl525v5pz7vhzGB/sY16H7xfhuXXynweb5zGkiuQ84pe5dd901la0H5x7RnS3cl3lnItu5SwtN2H5c61731FL7jOwYRHAevO65R1lnzTHZB6g59zzTRu4nx8T47tjB+bIdaLMufXq3Ro3OfmzTa4Z3gvlOK47JdmCb7hf90f2alxLbftSd3Wkzr0PGPJ9fOCc+l3Lf6e5mcTrz7mzIsdp+PEv5LMB5oC0de/mcU7BzL7GPce9iakb3y/saz3yOR1yXPgdz/nxm4Dz7HhLa1uuruyeG9z55j92GMBSCIAiCIAiCIAiCIFga+YNCEARBEARBEARBEARLY7uRPGyjy3X0dtN3utSGpDaaYkKYgsu0T53koUsF6H6SLmT6otP/EfNSHXo8pEaZhkNKkG3bpTDi+EyvIlXJEgdSdEzZ4rOmAs5Lv1c12tPf4/hM0yLFivNseripPQTpQWuVQ9h+bMdtdlId0qGceos+1qV5sm1Jg7UkgFQp0sL8HOlqpohxvkyBJIXZMhT6ClNWegymgd1xxx1TmXKBqj6NGulxXTpVg/5Hmpkp9KTZOq6QUmoJB8dqqibHasovU/w5FSXlGE4T2KUSI/3YVHXaz1RDtklaYNUouenSsHLNdrIqUwbpH64jjd10TNratHLSJR1LaNuOVr558+bVB1BPpyhyjljn2MFUio699A+/e5999pnKnSzJ87poCjzPF/dY+y1tbQkW7ee1QLt4TyU9k2P1eLiveg+nzfxufraMgmvIZw3Gw45+7Hlm3xxLOO+L0rWrRtt2a4HPmZbcUbI7WRw/+2xDqrD3RtrWKYIps3JqSMZUU6278XVnlHmSkW4ODNq9S+vpuk5WQzq1/ZbwnDBuWvJAm1nywO953XP/dXyibbmWLR/mGa9L69mlKLQdut8cPBt2c9nJL7pn7X88xzn1YHc2ZBzgGnK/uJ46WY3P0pwH7xE8G3JP9Tu6VJ6er26s9GnKD6vGPd7pl5nKkxIBn5e5p/vMSml9d+b3Hsu14H2A8+zzBO3iVMn0Y7fJcwjTv1eNKZ4tseXas78vst+HoRAEQRAEQRAEQRAEwdLIHxSCIAiCIAiCIAiCIFga+YNCEARBEARBEARBEARLY7u4Q2E2m026MOuzuzQ71JdYg0N9ZJcuzroe6oOceot6Kver09dRi2JtUpcmkBo+js8aOuqNrIui/tJ97u6B4DuWSavDNq25oU7Pduf7rCHm+11H+3l81LdTm2udF/VN7jPnwNq7Re+Z8Fg5BrfZ6cNZ5zaZ6sbaz073RV2Zv8dnqQ2mPr9qTMtl29IuvtOAujzfHcCxWlfGOmssqem0HpdaULdJ7Z3Xl99BcB6oR7M2nDo2pyGk/teaVNrP4+F9LNbCXXLJJas+VzXGJ+vUOX9OycR27EfspzWW1PdZ307NLdv3WDnn9hXCc8X5sd8ynltvyRSTTlPZ6Wq3bt069328R8PvYzt77bXXUMd1ybLHyntIXMfPTH1VNfqf/YFz53SJjJXdfUaecz5rfXaX7o91u++++1DH8Xlf43pmm7ZRp+XnnSi+i4Nrz7GDZw+n5qO233Xc070n0Vd81qDfWhtMdGkPF73zx210cZLo7qjx+YXr3ns//ci+0unpu3ueOq092+xS4PF73bsNfq9r3/5NH+u06D5bzLujy226L7SD7wzhnmEdPPvt9cWY2qUf7c6s3R1nnNcuPhg8J/h8xPnqUoN7/XapG2l3r0PayHeG8O4q2tZj4/v8u4hz53llrPK7OUdrna9l0s9zHry3dGmH+RuAdd6D2Kb7z7ON71dgCmnfCca1wBTifp/HQzv43jQ+a3sx1blTSnKP990LvGPD6FJ5bkMYCkEQBEEQBEEQBEEQLI38QSEIgiAIgiAIgiAIgqUx69Kb/G/rxGz2f74TQRAEQRAEQRAEQRCshltXVlYO9X+GoRAEQRAEQRAEQRAEwdLIHxSCIAiCIAiCIAiCIFga+YNCEARBEARBEARBEARLY7tIG/nc5z53SqXh9DVMe+L0NUzH4pRFvBvCqXr4Dqd0mddGVZ/ikf3sUvB0aYT8PX5m+04RwjZsI77PKSuZ7mrLli1D3R/8wR9MZadPWivYju1OW/t9fLZL+eMUOWyHdZ5Xfnb7fHeXPqlLb2rwe12fP/ShDw11Rx555Nx+Ek7hxjE4FRHTxjgd3w477DCVmVLIPsz2mdqoahwf07JVjevC6XKYvsY2WtQfmJKwakzd4xQ489aaceWVVw6f/+iP/mgqMwbZx7o2uxStXNudbzp20B87H1tmHTL+2ccYW9zPLg0Y/ZFxzSnHujRSv/u7vzuV3//+9899zv3q9giOvUsf18WqLv2ox0fbei+jjegf3dx1aedcR9u6z7SZ+8y+2A7nnHPOVH7f+9431PH9Xbo113Vp9WgL92Xeft/tA93dUp3dje5cwO/5bLHo3VaeL37PfvQXf/EXU/moo45aqP3tCV0cWwZr3bfX0pfuuWuvvXaoO+uss9bUlx8HFrVRV9f5cDd33Vmtezc/L/M94mMf+9jwmWkIDcZN7x+MEU7bzDjq9Ix8n89j/J7b5HmJe7FTrTLtodMAd3vs8573vKnsdJN8R7e/Ow01bdalm9y8efNQ9573vGfVNqoWT2XMeNv12TGbMdXvpt/6nN3tsXxH9xvT/ezOwYT9vTvbdKlX+f4/+7M/W/VdYSgEQRAEQRAEQRAEQbA08geFIAiCIAiCIAiCIAiWxnYheSBMJyR1xPQMUjlMFSEtx7QVUlUsA/jpn/7pVZ+rGqkqpn/yfV0/TSsiLcffIyWJdR29xbQY9tO08o5e09FLO8p+JydZVD7QyVBcx/d19ONF0VGFl6FYdrTors2Ojvfd7353KlOqUFX1/Oc/f27dgw8+OJV32223oY7UOfsH6XEdFepnfuZnprJpZrSDJQ9cX6aI8R2m93HNdtKCxx9/fKh74QtfOJU7WrTBmGBwPXPuPI8drY19sR269UQbdRTwbmydVMLxr5tLopN3dLKuefKHqsXpfV0M6PaWzg4dJdLvo6/Yb/jZ88w1ZPtRnsM5sTyG+4VtxHXpdc42TZOnHVxHP16GFt35Zje3rPMaor908baTt3WyEMJ1tIvPE5yjbt2vldrdwT62KJ4tacGzgW4fXUsbVYvbr/veon3pfHEZdGeGTsJGPFsp4ruzYTe+zu7zpEidBKs7Q3bngmX8gbHXMskdd9xxbh3lxD5zUZ7g3xGMzd4DGUv+5V/+ZahjHGVf3Ab3IL/7kUcemco77bTTUMczmOPmv/7rv05l+yZtxHFXVf38z//8qv1frd9EtwcyFvvc6P1rGzpqv0H7devQ8o6u/S5Od9Kj7rcP9xrb0pKVeW06ltjWqyEMhSAIgiAIgiAIgiAIlkb+oBAEQRAEQRAEQRAEwdLIHxSCIAiCIAiCIAiCIFga290dCtazULdhTSo1JV2aDut9qR2y5pH6805zS81r1ahht/6Iz3aaH+vPmTaGmhxqlqqqHnjggbl1bHOtqak6dKlM1po6r7tXoEud132v0/11fez057Rn9+5l0rstOifW7FkXTey+++5T2f7BNI/uJ7VqHKvX4T//8z9PZevynnjiian8ohe9aKjrdPH777//VPbY+KxTKzG9UXcvgzWIP/dzPzeVeVdFVU0pbZ8J9BXfP8DPnd7Nc8BnrQGkr3Z3V9inqS20no7vt/aOcdTxj++zfpDtuJ+Mh11axW4dEt36tT90KaC6uWQ77ufP/uzPTmWn7OK+8Au/8AtDXXeHAtvkHHR34Dh9K/WxLFeNa4jrtapPvcW562Jqd19Jl/bQ36Pdu7sWurtGGDc9d50Gm/a0P9C/O52p+8yzh/vc7XndXQ/dPS4d1npX0I8b3V0m3d4/rw2jSx261vsOOjwb90B0dui+19UtY6NF17pjdnfnyrzzWXfeW+bekbWedbmeeUaoGmO2YzHju88T3B/XrVs31PEs5fPSvH5VVf3TP/3TVGbMfslLXjI8xz2Jv1m/IP6IAAAgAElEQVSqqvbdd9+p7DMX7ec9gum5fU8C++K7vbp74Xz/wTx4T2ebPr/Muz9nmbveuj52qSEXTWlqP+Ie4TruSbYf67pzTwePoTtvTN9ZqOUgCIIgCIIgCIIgCAIgf1AIgiAIgiAIgiAIgmBpbDeSh200ENMqOopTR0chVcS0XlJvTFshndGULdJpTDnvKJikjlh+QTqKqSmkWP3gBz9YtR9+zlQo9tPtd6lNOnT0nbWmZFo0PZTt3FGcaPd55ao+lQ7f16W869LVeax8dhlaZZfikbRo+krV6O/2AdOyCfoqJQKmTHGtmUZHuYBty3Z23XXXoY4p8PbZZ5+hjrTADRs2DHUPPfTQVDbFjjQwUwGZWtN96ej2nD/GrmXSqRK2bUdLJZ2wW08G56uTgxmsc5z+t3/7t1X7VdWnx5tnF9vBNPNFwT53FPoutZLHSoqn5T9s07bl+2kvf4/ptPx+xiPbkrGeFNiqcc2Ylso9w3bmXHZ7XLdGOl90m11qvkVjpZ/j3HYyK47dbdCP7N+d9I2fbduO8tvFEsJ2px8tQ/Pu9qR5dc9WGsdFn/X7utjY+WpHvV/r+WUtbXRtLpO2tOvXMs8SnayGPtelSe1SAXapZDnPXarVTi7V2WGZ+elkVmznnnvuGeoOOOCAuf188YtfPJV/+MMfDnW0p+M0z38+Q1BisfPOO6/a/6oxjSP3sapxfixr4NnJ4+lkcZTYvuxlLxvq7rzzzqns/bBL1c2zgfvC8XZ+y3OvfwNSNkt7VY0x3L+fuP/6dxjH53XBNn3+4jnEPk078Nzr9y+TBriL7925dfr+Mz0wm83+ejab/eNsNvsO/u//m81m981msztns9lXZ7PZf0XdB2ez2YOz2WzLbDY76Rl7EARBEARBEARBEATBTxwW+ZP/31bVyfq/y6pq/5WVlQOq6v6q+mBV1Ww227eqTq+q/Z76zp/PZrNn/rNGEARBEARBEARBEAQ/UXhGycPKysrG2Wy2q/7vW/h4Y1W96any66vqH1ZWVv57VW2dzWYPVtVhVXXDM7xjooGYokOahymDHZ2fn/090kpMdZ1Hj6waKTSmpZreSpDiYnoQqT1ug3Vd1gDSVEynIU3LN/x3t3Yumj3BWOttuuxnR1+0/UjFN9WftPnHH398KjPrQVXVUUcdNZVJVasa5ST2FdKY+C73yzeuk6q0zG3EvPXXlGa+z7cR0/+79eWMCaTR7bXXXlPZtCxS+Nz/733ve1P5lFNOGequueaaqXzooYcOdRdeeOFU9i3JpKjZhzl2ZyJ49NFHp7LpavyeaYi+iZng2uio/R0dk/Q0+1h3I/4OO+ywav+r5tPkuz5XPV3KRXz/+9+fyv/+7/8+97kuptr/OKbu1nvaYRk6cHfrfkefZV9Mv+T8OabSLvZNrkPHeq41Ui6rxrml/Ty2J598cio7i0kneeh8jJ89r92eRHTSgo5+2WUl6jJHeA/k9ziXlkQxrjhm87NlYoznlqJxrM7sQZlaR8+1/bjv+H1rldMtikWlEcaikhj7dCfx4fy5L1yXlk/Rryxve+ELXziVHasYG71/cE4WvUXdWKtUokO3Zmhb7+mULnKfqRpjl88MpP6bNk+beS1wXXay47VKoIllzrMHHXTQVGYMrRrPfHvvvfdQx7Vt36SvOMbdd999U/n1r3/9UMfzTJcpinsXZQVVoxziggsuGOoOOeSQqXzYYYcNdfy9433gsssum8pev1yHd99999w+015Vi0svjUWzW/E3QJcJwz7G3x/uB+3i7/Hsbp9mO13WrU5G4fMf9wX7bSdZ6n7HLvLb7tnYcd5ZVRc/VX5xVT2Ouiee+r8gCIIgCIIgCIIgCP4vwv/SpYyz2exDVfU/qupz2/5rlcdW/bPGbDb7zar6zarF8lsGQRAEQRAEQRAEQbD9YM2/5Gez2Tuq6tSqetXK/+RCPFFV5I/sVFXf83erqlZWVj5VVZ+qqnruc5+7Np58EARBEARBEARBEAT/R7CmPyjMZrOTq+oDVXXsysoKxWRfr6rzZrPZR6tqx6ras6pufqb2nvOc50zakWV0eNRdmeXQpUaj1sU6G+q8rF2kttX3MlDDYh0Mx9TVWSNDLR6fs/aTsB2+850pOcfT9NGd1o9j79LzWH/WpR3hs53O1fpE6pZ8VwH1QdbzMZUKdfFOE9Pd30DtrOeHdzb4bgdqqa3Hpe/YxzotMus6fazHR820+8m+UD9aVbXLLrtMZWoqX/rSlw7PbdmyZSofeOCBQx1tdPbZZw91xxxzzFS+6aabhjreZfHAAw8MdbzPwTrNE088cSr7ngmmhrSv8H4F349infw8cE7sK12KOMYjrxnGMd5VUdVr8ruY090TwzYdL/iOLqWf1y+/Z63fvLSltjnt2d2L0K0nj5Xxz/GcccBrhrHE920Q3R7hexloT9uP4+XdCL4LgZpK36HAGOR41MU/ap27lM5d6jCD4/H7OrZit1/RntZ6sk2uBetH6e++m4D2dB+7VGX83N1B4fXL/dHrkH2zT9OPunsLOiyaArk7q3XpM71GOa+dH3X+Z/vxvhfPJfdH+wrjWHf3x1rvSeiw6N1U3b1L3T0JXdo5+ybh/ZD28/sYu3xW4zscG+fd+dOlC+7ssNa0mwbPDLxPoarqrrvumvs93vtk23If8FmN90zttttuQx190/sO22GM27x58/Ac5+TMM88c6nhW4++GqnFe3/CGNwx1xx9//FT2/WTEl770pblter9aNHbZtvQX+zv9mHdJ2L9pP8cjxhzv4ZwD97+7b2hRf/S+zbsXHP/YF591GQ9tI469+606D8/4B4XZbPb5qjquqp4/m82eqKrfq//M6vBfquqyp4xx48rKyntWVlbuns1mX6yqe+o/pRD/bWVlZX5C4CAIgiAIgiAIgiAIfiKxSJaHM1b5779qnj+7qs6eVx8EQRAEQRAEQRAEwU8+trvbEDu6XQdTPkjX6FKJOf0ZKS5OO8e+marE973gBS8Y6ro0MaTouC+kBJHa01G9LIcgjb1Le2PwHV0KvC7Fo+fOFEKioziRmtellTL4fqalsY1IQTOVkXZn6smqkUrUST86Gu8yqb1IffX3SH8yTYt+6/RGTCt08MEHz3037W66HaUl9rGNGzdOZc8V29ljjz2GOj7LdHhVVZ/+9Ken8vve976h7uGHH57KlGlUjTazvINzxFSXq/V7Hrq55ByYgkufswSAMcgUtHmptlznfnEuOzmE1z3jkeeZdU6nxLE7PZRTJM7rFyUQnQTFa43jcewg5d20csbiLlWt4wV9zvsA6aAedzdflO5QmuN4RJo395yqcTymiXIvcwot2sy2pV2cYo/w97q9hX2zPKZLE9jJDrh+6aeeuy6dKufH/sD3mQbLftqnaZfObx1/+KzlMfTpLr3aMpiXLsxzwH52qWq913dpSzs52CJ9rHr6OYR+1Pn0MueXRc+p3R6x1pTbi0pQ7e8ca3dm8P7bpUDmfuX3McZ6n+P758ngqnpfIVzX0cq7dhjP77jjjqGO66tba7Yfzx4eK9MLOk5zrV911VVDHc/y73jHO6byscceOzxH2caOO+441HFvcYpvxjXLU5lWdP369UPdbbfdNpVPOOGEoY5nQ8cE/74i6HM+93CN+qyx5557rtpn/x7gXuI1z8/uM33YZzz6mL/HtdbJMv17lHPSSZ18XqIfef/gOnFq1/9daSODIAiCIAiCIAiCIPh/DPmDQhAEQRAEQRAEQRAESyN/UAiCIAiCIAiCIAiCYGlsF3corKysTJoP65moN7GGg7qlTg/puwmoTbK+hBoSa26pP7fme6eddlq1z1W9vpT9tu6G/WZfrK2iDtBaMWqRrM/pdEpsp0v/uEzqqO6eBNb5OY6902ZaB0i7UL/88pe/fHju8MMPn8pONUj/cPoVaqmdgozarmXuSeh0mtR92VdoI6f8YV88BqYitA6QGju2YT+ittApeJj6yHo3+p9TMl1//fVT2elyuPYuv/zyoe4DH/jAVLY+jOkmr7766qGOa3TdunVDndNWEvPmttPX2ceof+QcV40aS+v8+W7HGD7r+er0fF1K0+5+hU4j3d1nQ7Cf1jbTv7s44pjNsdoOtJH3D96j4XjLuOxUntTHum7XXXedytZ30i6+24YaXN4R4nXOOxVsh3n3yVT1+wDt5/XLui7tXJdK0X5LnWinpbZ/MHb5/giOne27DcZU1zGWeDx8t/cBfrYGluvC76M/et3TP7xG+b61avId07i2uza79KOLpvTzmWHRdIle27Sn/d3aYIJxuhur6+bdHdXppdeKZdrg+22/7v4u3pHj+MB16TMDdd32Ta6hTvPd3dvSpSVnXZcO1HXdfsKxezzs5yOPPDLU0Z4bNmwY6ri2jzvuuKGO9+74zhXeOeXU3byTh8+9/vWvH55jLPmrvxrv1ufdC+eee+5Q98Y3vnEq+5y9adOmqWx/YMy7/fbbhzqe6xw3nQ6coN27dc/7KKrG+4F4TvVdPdyTunO243KX7pRzbhtxXXqN0i72U7bj/Z7v8zmE+6NTT/P93d4yD2EoBEEQBEEQBEEQBEGwNPIHhSAIgiAIgiAIgiAIlsZ2IXmYzWYTVcU0C1IwTEslXcO0FVKOTOsgZdC0FVKOTBU59NBDp7Ip2qS4bN26dajr0vOQsmMqFsdA6k2XxtE0qS7FyjJyhUWf68bTgTQjU3voE6YLMeWLqcJMJUrq/amnnjo8RyqUJQGksv3gBz8Y6jiXpgN1qSJpo0VTElaN4zM1inRCU2s5D6Z77rPPPlO5o2iz/OUvf3l47pBDDpnKpkdSNuH1Szs4DSHrnOLx5ptvnsqvfe1rhzrKkrwOKV85+uij59bdfffdQx1lCI899ljNQye/4ficRqpLlcd+2ae4Zuz7XOtdqlVTBhk/Omqo/Y/jdQpffnZaPfaF9jNtnb6zaIq2ZWBqI8dq29JGni+uL0psqkaape3AeTbdk3784IMPzn3uu9/97lS2jfg+zytjqOvoY94/FoXbpO90lGnLIej/HaW0SynZUZ/5bu9BtJFjNvti3+/mnG163+FasHSLZ5aOet9JLZfBPNnBMvs75872YzuOVbSDYw5t7XMI58R7M7/XpYVzXzr5BcfH73XyDmNRWUi3njrJSLcu3Cbjr9NEM+Z5HTL+uS/c5zqZAeE+8/MyqSE7X+0kqZS1eo1SZuA2mKKQZ6eqqv33338q+4zCM78lbTvvvPNUPu2004Y67l+UQ1x55ZXDc9wXLrrooqGOc3LyyScPdZRp2h+4P/p3Efckp0pmXLOslOk6LRElvH65n/i3EJ/t0kmzzlIgxl77Qycz7STD/OwzMr/neM5nvQ4Zj7wn8dnuN6HXjKXHqyEMhSAIgiAIgiAIgiAIlkb+oBAEQRAEQRAEQRAEwdLIHxSCIAiCIAiCIAiCIFga28UdCoR1wr7jgOh0rt0dCmzT+jrq6Q877LCh7thjj53K1gNRW+0UMtTeWztGzXl3bwHt0qXI7Nro9GhGp/PvdHldChSOwd+jBtu6HmpNu5Rg1hhxjnhXwFFHHTU8d9ttt03lhx56aKijZtkaImoJ/e5On0gf6O5aMOgr1nzTj63RYppFf4+6XmvVqGNjaiCvJ9474jnnswcffPBQx2evu+66oY66Nq/td77znVP5zDPPHOqYvvX+++8f6niPgTV79D/PpVNhEtTbdfriTuPd6fk6DXuXXovrxH5LH+j8luvO73MMonbR92jwc5cOkmXrxtnn7g4Fj6fTBHbrkHPp+aJO2GPl/SXWzPN9jmOPPvroVGbMqaq69957pzLXqOe10xB3973Qtl5rTLnnu1nmaVIN73ndPsA56lKTeqys870MfP+8+xRc19mySwvtVJess2927+D68jx3d0l09iO8hubdZdL1s9vfDa7tzu6Of3yH0z/yfV0aQsdv1nX3EXR9sf04X929SF3sYl03B8ukoe7u0fA9P0QXE/g9x7junpVunudpzLs14rruHq61grHe5x7C+0B3Twfj+fr164e6LVu2TGWPj33hPVJVY4pEptJ2XObvlE9+8pNDHVN1O7U603F7/9hll12m8saNG4c6+gf3uKpxPfv3VOe39P/uLqduj+Wc8J6MqtF3fIcCf8sxtbT74j2I/s3zctV410O3xxqL7oduo0s3vugdQ/MQhkIQBEEQBEEQBEEQBEsjf1AIgiAIgiAIgiAIgmBpbBeSh5WVlYmWYaoSPzsNCKmApoiRsmV6LukhTCdYNaaGfM1rXjPUMW2L6TubN2+eyk73QsqYaXuklTgFGWlUHIPTtpDmY3ok21+GXm9KGsF2OmpZJ7HwfLGu66cpdaQ1mbrEud1vv/2msmlgpMZb8sAUf6a1cb7sm0RHPV2UXlpVdc8990xlU6pItXUb9AnTP5mujrS5qqqHH354Kh9zzDFT2XT0O++8cypTWlI10rft3xdeeOFUtk+TFug2STvjc1VV3//+96eyJRykLJq2xzXkte1Um8Sia6FL7cX2/S7KDkyV69JGcuxdSkn7reeI6NJisp+mfdPWlrDRl+iL9jG24TrCvr8ovdn+0NECScn19zxHBMdnO3TpIDkG2tlz10n56Jv2U8YS19HWnnP2q6NhL0PLp4/ZRp30rZP60U6kbbp9tuE+c6z2b9bZRrSt54R0Wu/btLv7yf2rk/gsI9tYJr3hWtDt6d165vc6irvPePQVyww6qj/PPV160E4O0dmy89OO3tydIfg+25nf87u7vYs2crpsSihtW1K2vYa6PZCf2a/Ob7qxrjVdp3HNNdfMfY5r2+uXZ0VLL3kG835x+OGHT2XT3zlHTvH9+c9/firfcMMNU/ktb3nL8Nw//MM/TOXdd999qDvwwAOnstN4n3TSSVP5lltuGep4ZmCayKrRLvYVjsf266QzrOukpR4Dn+X7upSp3me4T1s+zJjjczbP1t2a8brgXuN9hzHI0gyuX8dGrptO1tBJB+chDIUgCIIgCIIgCIIgCJZG/qAQBEEQBEEQBEEQBMHSyB8UgiAIgiAIgiAIgiBYGtvFHQqz2WzSlVjTQZ1Il67JWhfqJt0m70J42cteNtSdeuqpU9nabeqD7rrrrqHuxhtvnMpMzVI1amusw+80sUw9Q90LtbhVowaxs59t1GkJO50NP1sP1KUdWTS9peuombJWiNp7a4x22GGHqUx9mHX3vAPAunu2yfQ47lenqbQdurskOs0g/dEpjHh/hPVb/Gzf3H///ee+74UvfOFU/ta3vjWVrftjqtUuRdKnP/3poe7aa6+dykceeeRQt27durltnnjiiVOZqS2rqrZu3TqV7e9cv44lnCNrFzm+m266aaibl5bQa5l+ZM0w701gbKoadY72b47Bej7q5nxnCLVxHitjqnWNnAenEGI7ncbcujzGMo+BYJxxG4Q15ZyTTt9uX+nuBKDP+Q4e2sXrnnawLpn3XDgGMLUY/cr2YgyyjdimY1V3d0UHttmld+700l0KZK8h+rHrOF++q4Btsg3HlXkpYKv6/ZB96VJD2rb87Pt/6I/uJ9/neebnRdNQr/aOReA1wvd1qXG7d/l7XbrJbh/lPDj+8bP9j3PruezOS/PuE+nmwOjSRi56P0B3H4BBH+hSwvl+I65194XtOO0wz25dfOK5qvP9DsucubpUnnvvvfdU9vrl/us9j+cXa/n5vS618HHHHTfU8U6rHXfccaj76Ec/OpU/8YlPTGWmRK+qOuuss6ayz8FMFcnUk1VVGzZsmMqeE9rF88p9znfL8Vzl+Mc6g+vQMYFz6fliTGXKR++H9PdHHnlkqOP9RvbFfffdd26/eOeF/Y3xqLu3wPGH69C/Cdmm4x/9sUtv6bW9yNoLQyEIgiAIgiAIgiAIgqWRPygEQRAEQRAEQRAEQbA0tgvJw8rKykTtMBWPNAunEunkEKTlmBZNasrRRx891DG9oGmwd99991RmapaqkQpjuksneeD4TFUnbaujY5LC0tnIFNlF6XFdujX3hXQyU6M6GjHRUdBMFeaYOHdVI2Wf1OTPfe5zw3OWORD0Hc+dKZEEx2pKVZcKq6NIdnIS0uadJpAULtqkqqePsU361Wc+85nhuT333HMqe6yUWDgd3vHHHz+VTb1iO48//vhQ53VC0H733XffUEe/6tLTOrWrKYvEvBRXpoCThu3+Mw3XTjvtNNQxdpjK3aXtmyeXqhp92hILwj5GmY1txNRR3fq1VIe0RI7BsYPz2qUvMoWZcGzs2uH7LQvhHFn+wznq0prZP+gTz3ve84Y6r9ltMJWRffZYO8rvP/7jP05l+zo/rzXVr8HvdTJGg+/wc/RH25Z2J7XW9qPvmC7L+bE/dGlEuS5sW77D72Ob3iP4DtuhSw9KLEONJxal8y+TopAwrbfzK8Y4SyH5PUu36AOOVVw3XRxbVMrQyUI6LDM/nbxyUamE4yb9kamYq0bpoO1Oqj/nx+/v5CNEN/+dpLYb6zJzQn/w3sVUgKTQV42pp20H7umUaFaNEmynr2Zc+/jHPz7UkZpPeYJx/vnnT2XLCtiGU4j/zd/8zVT2+iWd37bkuY7nRD9Lv6nqz+Rcl50sqUuFSp/2bwrOiX2fe6zTbnayP/qj+8zfFfZb+qr3CJ7zbXfGPPst7eBzNyU43Rl5HsJQCIIgCIIgCIIgCIJgaeQPCkEQBEEQBEEQBEEQLI38QSEIgiAIgiAIgiAIgqWxXdyhwLSRnYbEmilqk6y5pfaJdyZUVR188MFT+ZBDDhnqqM958MEHhzreoeA0HdQRdZopa4+pn3EKGepi5mmN3WfrQtmGtTudXnVeG1WL6yEN9ru7O8B6PuqprCOiDsyaJupXr7zyyqm8ZcuW4Tnew+Cxcu7cZ9rPdmA7a9UXG7SLUzlRF2/NFNeGtXH0HWqpq0ZffcMb3jCVb7311uG5J598cirb9zk/J5xwwlDHtJ5Oz8N1ccABBwx1L33pS6fy1VdfXfNgnWany+N9ERxP1XjHgUGfoJ2tv+Vz1sjTTz0/1Gtbn821zvRWVaNtraen7t++SZ237cX3e56p2et03fZNrr3uDgWiWyNeo3x39z3HFa61XXfddaijnr67u6LTcDrW83veI3iHQndvED97Xru9kinPuvRxnW07zbf7SX/sUpo6FrMdryH6pueEcY37ttc52+/Sj/ouHY7HqfK68wvnobtbyXVdKkWupy696lqxTBrEed/zPTud7rkbA1MNf/WrXx3quD926Tqd7o/2dAzv0mLO0+wvcxfCovcnef12d1p1MY91jue0u+eLMdz3NXG/937F93V3KPC57r6DZca61jtDiO5OHKfj5n74yle+cqjr1uj1118/lf3bhGm2nWaRKc03btw4le3fp59++lS+//77hzreF+B7nng/AM9fVeNdc46b8/b3qtGevouDe57PhvRHr9EuPTI/c358t1x3lqGdeWasGm1m+3GPsB91+zbXidc9zygeK8fkO2S6e1XYpm27yBoKQyEIgiAIgiAIgiAIgqWRPygEQRAEQRAEQRAEQbA0tgvJQwfSZEzHJHXXtF5Sh/fZZ5+hjqlZKFWoGuk7ThtJWphpsIRpMqQddfIB0z/npTDyc6TFmHK5KOXXYD876ktH5zd9saPasG+mIJFiZx8gxY4076qqd77znVP5/e9//1R2qh7C9pvXx6qRHuQ5p/06qqvb7KjeTNdkihPbMUWffmypBFP5eAxMw8lUkZ4fUkhNaacU47d+67eGuttuu20qO+UOKb877rjjUMd1/4pXvGKo+/rXvz6VTRUmrc5UQKYOogShquqBBx6oeZhHP/a8ci1zbFVPp4YSXbohyyOIbq3zfaYDkx7ndIWcI4+B33MKLfqf55mxq7MD10VHDXbMWSbmEeyLYwJjnlMIksJq29Jmnku+z77JOMN3d6k13Qb3Lsde+rClfFxDjjl8X5cyy/PVSYM4VtOwGfvtK51Ugrbm2N1Gl06ro3uyfe+HHI/XDOfI55dOAsj429m9Q5cCtFtfnK9lZElcl6a7M3Z4/XLt2bbvete7pvJnP/vZoY5UfO9J3ZmSY18mLeazDduP/tfJLTo/dR3n0muNvunUuGzHZ2TKTr3/cr3ZB+b53zJ27uQQi9rI4JnLbfIcackhbeszFyUDTttMKRflD1Uj9f9Vr3rVUPeRj3xkKpNuf9ZZZw3PMVW354fn5wsuuGCoY8yxZJhpKu0PXLPeD/msfdr7EEE/6mR/XepQ1rkNts/za9V4tvY5kXPnMwPju8fKtdbJ0C1d4LO2bZdamHub1yF9x/F2kbNUGApBEARBEARBEARBECyN/EEhCIIgCIIgCIIgCIKlkT8oBEEQBEEQBEEQBEGwNLaLOxRWVlYm/VN3x4D1qtR9+Xvr1q2byrvttttQR62LdYDUlFh7Qj2NU3tRh2NdKLUn1jx29xFQd8PnfIcC3+d3Uy/TaYqMtaRI8ve69CjuJ/W5TiHDOmuDeZeF5/nkk0+eyrS77UctlOs67TY1sd09E9Zo8Vnr+bo7KTgGzwlt5FROHIN1X9RlWcfLeaBmzylxPv/5z0/lO+64Y6g788wzp7LvK/n2t789lX0fAFO2+nsPPfTQVLZev7MR9W/URlaNa9t6NMcdYp42s7tDweDcPfHEE0MdtYS2O9/d6VXt00w5xTSRVeNdEtbMM+bZRkwx+eijjw51fNaaPa4pjs/2YhxbNN1tVa8N57roUhu6L7S74zn3JOtAuZ5sv07/y7GzDWvDu9hB/7b9upTE9Gnrzfm9zr99H0Gni+7GwH67n939G9zvGXut9+V47A/sl3W13JM8d1x7tjvXk23C79mP6HM+vyya0tn7zqJa9UXvTei0zb4TgnPiWMu4Zvt99KMfncre85gS1O9jm7YDP3us3R05fLY7H601tWFX172P33Mb7EuXWti2Zc3LvbcAACAASURBVBzwHsH45HXPdei0h/PuTejun3KsWPR8u8x5lncH+OzJ86ZT0HKfc9p6prHdaaedhjqen3wvw7333juVvU4+9rGPTWXeJ2Ld/SWXXDKVfTcG53nTpk1DHe9T4tnM73Ac4VnA5ziOwSmq2Tef1bo7eIjufhnWuQ3e2eXUkJxzn8e49/v+KfqO/ag7z9Cejkdce91asK8wHnbnVMdwnyNXQxgKQRAEQRAEQRAEQRAsjfxBIQiCIAiCIAiCIAiCpbHdSB62UYScvqZLX0iqCOlUVSOtxCk8SI807ZFUGNOtSBc3jY50FFP2WddR7DoaHektfjepZaaZdfSgjqba0fuIjjrZUclM36HN3Cbnjyl3qsa0kabzk75NOpfp4aQEuV8cw6JSj9U+E136zI6mSoqVnyN91vRfUuw6qcnLX/7yoY72ZOrEyy+/fHiOaYM8P/x8yy23zO2XUzOedNJJU/m4444b6u67776pvHnz5qGOc2k6ZieH4Dw4JnhNzfse0aVlc7+YDqrzG1PXaIcuVW1HP+5obbvssstQ19GdaTPTFynj6NY2Y7/p9V2KVqLzb9dx7kwZpJzJ42ZfTAdmTDVFkNRQU1HZN8tQ+H7S390+bWZ6aSeZ42f7XyfJY3xwn+f1v2q0u/cyokvh6zY5BveT7XAtm5ZK2rLXBX3O+ybbtwyF89XJEb0u+H6Pp6PBMs50FNVlaPlrSZHYnRkcT7l3ed2zHY/1sssum8pOZcx45HjRxQ++o0sFvVZ0bTwbUollzmqd5IFnJK9D9tMSNu5JTpPK/cuSL9p9XrlqnBPvo51cqksb2c0Jz1JO8ch9jefQqvGs4fMEbevfCpTpuk3u6d4/rrnmmqnM30Jea5wDx2z6g9Nx81nPK1OP33nnnUMdn3Wf56VDrnp6akpirWfreSm4LUFg+kz7fpcaknVOYc+45rXWybE76XmXkrMDfdp7Es9gnq/ut8nUx4V7EQRBEARBEARBEARB8BTyB4UgCIIgCIIgCIIgCJZG/qAQBEEQBEEQBEEQBMHS2C7uUJjNZpPWxpop6k2sWenSSFFfYq3VD3/4w6lsPRDruhSPRpcWid+z/odj8NipvaI203oZ6mCsmaL2yVquter5ulRE856rmn8nRNU4f77jgKlbnBqSqXUuvvjioW5eOhvrNDkHvsNjXv+r+rQtRKdJtYZp0TQ49jFqr5j2pqpqn332mdtPpi2y3an/5X0Up5122vDcRRddNJW///3vD3WcA681+rTvQPnOd74zlW13+pU1y/RbzzOf3W+//YY69pv2qnq6TnQeGKv8Hc6X9b5MoeV0WoT1dZ0unjo5+wP1fY4X1G16/XL+On22x8d7Bpxul/PF9r1munUxr71nquvuR2E8d5zkOrQGlhpVayU5Jvtmt7b5DvqV2+AdK053xWe9f3CP8NwR1pSzX50/eO64nru7TGxbwu/rUinSx1nX+anngPctON0a23zssceGuscff3wq+24bjt3rkH3rUvN5jdJ+nZ7e6NKrzrsXyWumO09Qp+y7K7hOvD8xZlvDy7ou/bLXCf3RNupSX3bpnpdJyT0Pnf67u5tq0budunXouePYfW6kP3q/ot/a33l+t0+zb1zbjqFd7CC69LfLrAvGAd8NxDugDI7VZ1b6puPM7bffPpW3bt061PHOhvvvv3/u+zjWr33ta8Nzp59++lS+/vrrhzr60VVXXTXUMW0426ga74Dy3sJzlv2Iv7W6dLHd/Tz2fZ4hvF/x/fRN33fAvdMpgtlP95mpz/1blf7e3SXhdcF9wWuhWyf0Md8R0bXJWOkzbHfn3jaEoRAEQRAEQRAEQRAEwdLIHxSCIAiCIAiCIAiCIFga243kYRvlyRQW0jpMme4oGKRGmWpDKoypa6Q1mRLJ93cpeDwGUkfcZ9JdTIUhpY90p04WYpkGaVldaqoOHf3ObXQSiG6sHIOpRLvvvvtUNn2HuPrqq+fWcc5N7bdfEV06MsJ0wkVlDcuk6KJd/D1KNSw7oM0sLWBax4MOOmioe/jhh6cyqfCk5VWNfuo1s27dulWfqxp9x99jvyhrqar6zGc+s2r7VSNtmWngqkYfcF+4Rh999NGhrpPBzJsvr9F5qf/cT1OmSSml7MQwrffAAw+cyk4hyGdNjedYHauYJtDz1X2vo5iSesg58Jrk2usovh1NuXu2kzM5prHOfWGdaY9MO+Y1Sp+wT3H9kp5pv2SaT1M1O/8j9dRpMDknHk+3D8x7d9U4J91eafon9+ZOPtCdCziXHLf7aVr+AQccMJW91rg333PPPUMd17PH08UV7lHed/jZY11UGmR0+868efa7OZeeH/qjx821bpkLP3fnEPsY23Qs6fZ7ttnt9z8OdHKVTjbLui41bhfjutTCjhfcOx0TWGc7M46ZTs15XiYtMLGM3G1R7LXXXlPZPk0/Ni2fe6XP5OvXr5/KXkN834c+9KGh7pBDDpnKlhbwrPZ7v/d7U5lnpaqqO+64Yyrvu+++Qx1lFJZpcJ5ty056fu+9905lx1T+HrCPLSq9s/St+33A99OPKBX0Z8cqrjX/jmCbXVroLm2p18yi8dzfo418FqDN6KdVY0zwWcB+vBrCUAiCIAiCIAiCIAiCYGnkDwpBEARBEARBEARBECyN/EEhCIIgCIIgCIIgCIKlsd3cobBN8+E0KtR0WHdF/Ye1NNSAWc9CnY91ctTuWFfW6eKZDs0aN/bbdXyfNZ20RZdCi7DuhfdHWLvTadWITvPTPWudF+ehS+3lNC6cI2t+qFmlXqtqnD+26dR1i2rkrYHt9In8Xpdiyt/r9ObUbHktbNmyZSpbG8d32D+oXfMdFEcfffRUptZv48aNw3P8fPzxxw91X/3qV6fya1/72qGOvn/SSScNdbyzgfrAqlHf5/Fs2rRp1T5XjXPidFf0Aa/tRVOCdqkG7TsEY1f3busD2aZ9mv7ueyao0zS4Dq0Vpz3tp4xVvrNmGX39NnR68y6NZ6chdj/YZ8cqPuvYy3XoVGKcI6cCpA7Vmke26bHTl9im70NhPLcGlT7mdGTUPXusfJ/7xbjW3VvgtTBvzqv6lGrUcPoOFI7X/sHvsc5nBq4Lp47lGvLcbd68eSozhVrVaGvbj9pWr21+9vfom92dRWu9A8BtznuH54c+bG09dcmOKxyPz0CcZ9+t1O2V9Ee/r2ujS8Xb2ZN1XfrHRdGl7uz6vEwa7+6sxnNBl6LV88V7fhyLu1SAXFPdHTUcu9tfdOzLpI1kvPC9Nzx77L///nPb8BmF52DvHzzr/Pqv//rcdngXQlXV+973vqnM9WTdO+3MM1bVeI7bc8895/aZqcarxhTf9gfa+oYbbhjqeKeB41+3x3P/8L7DmGp/4JmI3/M+Tdj36XNeo4yH9lu+w3GE+7ZjFe3neMsx+GzTpa+mD7gvPLv592HSRgZBEARBEARBEARB8GNB/qAQBEEQBEEQBEEQBMHS2C4kDz/60Y8mOocpGB19jDQS0xA7OlcHfs+Uj47qz774faSKmMpDiompoGyHlBa3wc+m+ZAm0/XfINWmo+V36fFMt2LfTO3pqN2cB9Pcrr322qlsaiifZZsdddz+16X85Fg7G9lv15rai3QuU9460MecDohjd9pI+jSpjKaInXjiiVPZ9D62ucceewx1pLNeccUVQ93pp58+lW2vxx9/fCqbok3asm3UpRt6wQteUPPgVI7EvLWwTGpD+pWlC6YOE1zb9mmOx+ma+L4uTZFp8x0dnZRIx5mOKjwvVVq31jrKqtch320/ou/bHzg+pt51m/5el0KLNNIdd9xxqGP6Tvs02+ykVKQpd9Im02xZ55jNMdgfOinfvDb82X7UpdfifFlW06W+JL2aY3U6WlKyHSeZetUpzjhfpvzy2S59plOXcT15/TD+Os4sQkut6tMVu032e578pmpMq7dMqmTa6Hvf+95QR59zLKQMymcu9tnnOI7P67eTwy4qZVirzIHfWyYteSd54Jqx/3HsrqPNbHeuWccESi+9l/F99lP2k77iOVjU7p1UwuikErSD4zL3XO+j3DOOOOKIoY723LBhw1DH2Ox+/c7v/M5Ufte73jXU/fEf//FUZlyzvJGyU8pDq0aavH9jsJ3vfve7Qx2lBI6NXbylf/js7nVJdOdnxiT7H+eIsd57EOF+0Y88P+yz391JJehjPht2Zw32xf5H/7ekm5/9Pu6rndRuHsJQCIIgCIIgCIIgCIJgaeQPCkEQBEEQBEEQBEEQLI38QSEIgiAIgiAIgiAIgqWxXdyhQHQaEusmqdmzno+6FNdRG2J9XafjZV2XwsgaGWpfPD7qcPw96gKpbbXejW10OlePp9MpdZrlTsfbaRc5l9YYUdPkfr3oRS+ayk888cRQ9+CDD05l6+boH2zfOmFqirp7OjxW6qI6fWyn+epSqBlMSeY7KKhjczo5vsMaN2p377vvvqHu8ssvn8pMs8g0QVVVv/zLvzyV7Ss33XTTVHaqt3n9cF+ckon+4DapYXZ6I6Z94n0UVaNdbKNOOzZPG2xfYRteF9RUdqkAO60ffb1qTK/qOq7fLk2vYxx9wGk3qS+1D3B8HjvXJeOTtbNdak2iSxXa6YRdx7hpPWl3z0R3VwHvIfG9FtTjeuzsG+3sOEbdrsfD73VpzLp43vnfWjXl3pu7+4A60D9sF/ab/uH4wFSR1vtyPTl9HG3bpaz0euJnr1Ha3bGeNuv25u7uEp81uvMLwTbdL47Bmt7ubiXa0/eVzNM9uy/dXRKu4/ccLxbdt5dJPbgoutSQRLcuPHddGszu7ijGRvttd4cC78Do9iSn/2Zs5Bi6vbdLn2nQB5a5S4z3r+y8885DHf3Dd3jwThzfq8L387mqqiOPPHIqn3vuuUMdzwaXXnrpUMf9mGvoV3/1V4fneG/CK1/5yqGOY/C64Bp98sknhzqewbyv0efsYzzLd+kSDe5XvjuKtnW84DmEdV2s6lIXe867O1C4L3T3y/hcNe/dVePa8Fj5m8Z7LJ/1b2qOqUsTPQ9hKARBEARBEARBEARBsDTyB4UgCIIgCIIgCIIgCJbGdiN52EZVMSWWlBNSXapGqg3TOlWNlCpT3ro0hHyfaTekxnRp09xPUlNM4WKbpH25nS79FKlEpsx0VJsOHUWsS8/TpX/s5BCk6JgOR5t5fPxsSg6pPawzFY/v7lJMLVNHLEPd7ahe7LdTGNEfndaHPka5QNU4J9ddd93cNpk2yNQ1UrvdL9Z16Wso2agaaXtf//rXhzquC8pAqkaqnqULnK/7779/bp3TZHVzMi/dmimDlHR4zfB9ln6wHVNW+dl1pKma0kc/MkWb/uA4Rjqc55kwxa5Li8m6bg1xDrr5WFTGVdVTn7uYTd/pUlP5ffMkWP7s+Mc4yjnw/PB9nlfTFwnuC+4XYcrlounxOlp+JxXz97oUyxyf54ufmbqzkzw4rSdhH2OcMQ2WYzCtl/PqNhkbO39fNDY9ExaVObBsKnyXRo/tW6bGebUdaDPvo538gs/aRvye67ozUuebzwY6yRw/u4/d3HXfY4xwfOio411KXa5L7/fc452mmfs4zwyWZ/HdXWpI26+T6XZxjL8r7rrrrqGOZyLblm36PMa6K6+8cqijXc4+++yh7rzzzpvKJ5xwwlDH8XE92U+59iyboK39e4rnbMuOaU/v4dzzLI/hXHpv6dLf0n7+Hca+2G8Zn9gvn/f4bu8lHIOlLKyzT3V95mdKbKrGdel1zrOH+8kzmH2Ttvb3+P5O4jgPYSgEQRAEQRAEQRAEQbA08geFIAiCIAiCIAiCIAiWRv6gEARBEARBEARBEATB0thu7lDYpvWxNpIaIKdruv3226eytaz8bC0XNSVdii7rYKgjsp6FupSuztpWai6tv6Q+jZoYt0EtrTVT1AO5X532jnawBoc6Jduo01HyWaftW3S+urSO1uUxhQ216W6fffZYu/RTnT6RWFRrXNVrMx966KGp7DsHiM2bNw+fqRvuUn1Z/0Y91W233TaV7X/UP771rW8d6nbfffepbDt84QtfmMoHH3zwUPfqV796Kl9wwQVDHd9vOzz22GNT2Slx6B9OAfX4449PZd8P4HsNCK6TLo0ZfcX6xO6OC/qq9W7UuFl7zLXtddjFI37uUjf6ngTqELs7ZKyN5Gf6ou3HNrq41aWN7NIAd6lWrWtkXzxW6umtS2Z8t205dmvT6X+MM9YCc3z2fb7P8Y9z2aWdWyaOzXt3Va+Dpm27+xVsWz7re3aopaUtGZuqRh9wHGaffQcA67pUjY6vXJf2TT7bzVeXVu/ZAu3OPjsGdKlxu3sLqN3u4pjnnGcG66DZjm3b9aVL/fbjuDeBWHStdWnDfQ7hWG3b7s4f6sE9bs6tz930CWvYufYc4zh/PPcuc9/BomkjjW5emSLRezPPGl2qc8cE3pHje8YefvjhqcyU26771Kc+Nbcv69evn8pXX3318BzH+va3v32oY0rJiy++eKijPzg15L333juVbQeO3bGKvsP071XjfTYGx+A2mbb0Jf9/e+cXc1l5lfFnpVUTqxc1YG2ZCUMakICQEYY/SRNTLlqqF6IXGrgwNWmCFzRpL4xavbA3TRqj9U5DjcSaWAhBm5KQ1D+JSSGApQUGZgYGJgzTTiHFSS+0NzWtrxffmcNzHr695pzj6Dmn/H43s7/97rPPu9+93rXfs2c9ax08uNDmNuf2kPfH23Jd0D2DnHxG+JoycxO4/+vyK3R5JdIXO3lPfG2Qefv82Zm+ZJlnzQU9ZFXdV1VvVNWxfdp+t6pGVV1i+z5VVaeq6mRV3X7BHgAAAAAAAADAzrHMK9e/kfSR3FlVByV9SNI3bd81ku6UdO3sM39RVcuXFgAAAAAAAACAneCCkocxxler6tA+TX8u6fckfdn23SHpgTHG9yWdrqpTkm6W9MSFvmcqnMLDPDLUy8NKnnzyyYW2W265Zb6d4XD+d36vf0eGf3o4cH6uC2npZBQeTpuhmh5O6+Gy+d0e6pXhLd7nrnxXRxd2luFCfs5OfpGf8/ChDJf00JuUStx++5tBMBnm28k2HA/NWyWkzq+hCxVOvF+r3BPvZ3etl19++UKbz5Msh/byyy/Pt7Osz7XXXjvffvzxx+fbWQbJwwIzVM0lFmfOnFlou+mmm/btvyQ98sgj8+0MOfe5kPbuIYRZ1sevNWUHHh6X5SZPnz6tKbzfnQ37fe5sLNu68rdOll1ye0+bcl+VduT9TAlWV9bRfWreS/djXSnFrqzssnM5feOy5fAyBNfbssys20eOn9tjzm2fv9kv/74Ms5zyTzmW7uvz/B4SmeGRfv6URPk15Li7vXf+rrPNvF9dSWf/O+3D+5LzxK/PfWMnL0opkD/Tc9w7OY5/d0oX/BrSxlxakM9K/75OYnGx5BBTfqcrkdmtUXJs3eYynLoL5fXvS3u49NJL59sZmtzNIWeV8owXg27ttOwzI+ehX0NnY7lmdXlCd7+yze9DlpR0W81Qaw9Vd5/a2XC3Lu0kh9m2rIQuj+tKM/taPtdcLi3owtjdhqXFMpL++0ZalJ0+8cSbP7dyDXTo0KH59okTJxba/DdUyi3cdtI2fU2epTX92JTHuK24LFd6azlwp5P9+Vrj2LHFoHq/fy5/TR/g9p2SRn+W5XrZ/85yp52f6co9u/3n9/k8SfvzMUof6n47fWP3LFtG8rWWKKyqflXSt8cYR6PpMknfsr/PzvYBAAAAAAAAwI8QKydlrKqflPRHkj68X/M++/b9r4uqulvS3VL/lh0AAAAAAAAAto91IhTeL+kKSUer6lVJByQ9XVU/p72IBE+teUDSa285g6QxxufHGEfGGEd4oQAAAAAAAACwW6z8S36M8bykuQBl9lLhyBjjXFU9LOmLVfU5Se+TdKWkr13onFU113mkpqPTN7kGJ7VWXkYltR+uU+k0eqlncVbRJ/r3p7bG9bhZasTHwrW5OSZTpevy705LmHQ6pU7P7H3L8ns+Dqmv83uZOiy/D1mKyD+X2uOpEmR53Z0Gsct34Ofvzpn3q9OAd7hWLfVU586dm2/nGHl+gNRaHT9+fL6deQW8/OStt9463/YSktKi1i91f66NzFwIfl/TNv2+pq7WrzXP6WOdmlHXK3Z5TtIGrr/++vl25o/w8ex8lbd1eU4yf4Pr3bIsqms4u7JpiesC01bcNj1/g7So2cux9fuVekFvy/s8VfIs74/Ppy6XQ87DTnfvesic25lLYKotS4r6taf+0m0gx6jz4Y6Pe46lfy6fa24rXfnCTuvZ6bM7urJcq5Tb7TTSfk/Sbr085JEjR+bbhw8fXjjO/Uzef5+HXd6MVfJT+N/plzsb757p/rlubbMKPjfchnMcnLSVZcu+Zo4k/1xXbrLzK+uWO+00xP8X+RS6NVd3PcteazcPuzK23bOyK53nuZWkxWdb2ne3Bps6rrvWvD/rlo30e5I5V1566aX5dpav9vVZzhPPr5C5Ax599NH59g033LDQ5vmhHnrooYU2z6lw2223zbcfe+yxheN8rXHvvfcutPlcS9/oOS8yJ46v8XL9534z1xr+GyCfOwcOHJhv55po2d8fXgpcWvw94vfy6quvXjgu1zaO23v+vnG6uZZrM1+XdqXbM++Ik312m85+Lvu7b5VcI/PvvdABVXW/9pIq/nxVna2qj00dO8Y4LulBSSckfUXSPWOM6RUKAAAAAAAAAOwky1R5uOsC7Yfi789I+sz+RwMAAAAAAADAjwJbl7ygC5XLkEEPfcmSix7ykSFNHp6UbV5mpQs7zH56OEhXiiPDwPz7PJRbWgyb6cJSly2DlCEsXUhkF1bk/Urpx7JlxrpQpRxbD+fppCZ5L/08XUmmLsRuWboQxS50cpW+eOhXht95WNPZs2cX2jx8LPGwMA+pkxbD6L2MT4bn+t8nT55caPNrz3C4Z555Zr6dYcp+n7OEkdtmhsh6KaSrrrpqoc3nXoZxduUZVylTOIXf1/yM/50yK5f/pOTBxzPn8rJ2lH3xuZ0h+z4OaQN57FRfciynQqGznJYf18k58t5NyZ6yLzkO3pahmt63rrRhlsnqQg197nXhku5Du3Dj7vmUz9EurLyTfDnrPiuzzcc277P3O+e9n8dLo0nSjTfeON92yUOWc/NQ3rQHlyPmc9rDenNeuA9NWZKXkcyQVb+etIdOvudju27ZyK6Ucfcc7UJiu7D8bh3SyX86+19X5tCx7vUtS3eObo23bKnrPM7vX1eCsZN/dWOSvrGTgU49ry7WWm1ZyUjSlTz2ddVzzz230Ob+Kdc9nbzD52xKS12Smms6/34vj33q1KmF43zO5BrIfVxej0v70vc66VNffPHF+XbKdP2ZkdLBbm67XXXP9PQd/huxW0/4OquTJ+S88PHsSsznWsmlW/ls8bb0k9639PVduVMnn1c+7uvMvbXKRgIAAAAAAADA2xteKAAAAAAAAADAyvBCAQAAAAAAAABWZmtyKJzXeaRuo9NdeVuWxnAtSOpSjh49OnnOToPYlfXpdPGusex0Zakb9vO4Pie1QZ1W0nU3edyyOqVOO5PX48fm+f16ulwP3Rh1up7UO/l5uuvpShG5PaxSbnJZHWWXeyHx60utveuGs0yR50nI0qSuxcs55PZ45syZfT8jSceOHdv3u/IcWZ7HryFzi7jtZH4F1zqnDvCaa66Zb+e1upYxNXt+bNpYlx/A6fTFbn85L1w/3elcc854Xots87me3+d21OUySV136u2cTvPtdJrHzve63jLvudPldOnmZKcl7K4ndZRT+Q7yPF3uiu4afJyzz53Oustt09lDlzfBP7dKucnO37pPyHHvNLeen8BzE0iLJTNPnz49384SsH4N+SzuSru6bjjnTPbF8evp8g2lHS37LOtyjVwMVtHyr3Ncsu4zdl26HBGr5I9Yh1XWXH4fuhLVXR+7dVU37vm5rrRmN35Ta6lVfMe6+RU6O/JnTeYA8DxW11133UKb/8bI0tZ+bFcm0P2WtJgDwEt6S4s5eNxfZK4tL/GY5R/dd3W+N/2m5xjKdannI8hcRJ4fID+XZeWnyPHrSrn7Nfn3vfLKKwvH+Rh165WuL+mz/fu635VJt/bo1mNdfiifh2kD3fP+opSNBAAAAAAAAABIeKEAAAAAAAAAACtTF6Nk3v+6E1X/LumMpEsknbvA4QDbBnYLuwh2C7sGNgu7CHYLuwh2C/tx+Rjj0ty5FS8UzlNVXx9jHLnwkQDbA3YLuwh2C7sGNgu7CHYLuwh2C6uA5AEAAAAAAAAAVoYXCgAAAAAAAACwMtv2QuHzm+4AwBpgt7CLYLewa2CzsItgt7CLYLewNFuVQwEAAAAAAAAAdoNti1AAAAAAAAAAgB1ga14oVNVHqupkVZ2qqj/YdH8A9qOqXq2q56vq2ar6+mzfz1TVP1fVy7N/373pfsLbm6q6r6reqKpjtm/STqvqUzPfe7Kqbt9Mr+HtzoTdfrqqvj3zuc9W1a9YG3YLG6WqDlbVv1bVC1V1vKo+MduPv4WtpbFb/C2sxVZIHqrqHZJekvQhSWclPSXprjHGiY12DCCoqlclHRljnLN9fyLpu2OMz85ehr17jPH7m+ojQFX9kqTvSfrbMcYvzPbta6dVdY2k+yXdLOl9kv5F0lVjjB9uqPvwNmXCbj8t6XtjjD+NY7Fb2DhV9V5J7x1jPF1VPy3pG5J+TdJvC38LW0pjt78p/C2swbZEKNws6dQY45Uxxn9JekDSHRvuE8Cy3CHpC7PtL2jPKQNsjDHGVyV9N3ZP2ekdkh4YY3x/jHFa0int+WSA/1cm7HYK7BY2zhjj9THG07Pt/5T0gqTLhL+FLaax2ymwW2jZlhcKl0n6lv19Vr1hA2yKIemfquobVXX3bN97xhivS3tOWtLPbqx3ANNM2Sn+F7adj1fVczNJxPnQYw1c5gAAAidJREFUcewWtoqqOiTpFyX9m/C3sCOE3Ur4W1iDbXmhUPvs27wWA+CtfGCMcYOkX5Z0zyxEF2CXwf/CNvOXkt4v6bCk1yX92Ww/dgtbQ1X9lKS/l/TJMcZ/dIfusw+7hY2wj93ib2EttuWFwllJB+3vA5Je21BfACYZY7w2+/cNSV/SXsjXd2Z6tPO6tDc210OASabsFP8LW8sY4ztjjB+OMf5b0l/pzTBb7Ba2gqr6Me39KPu7McY/zHbjb2Gr2c9u8bewLtvyQuEpSVdW1RVV9eOS7pT08Ib7BLBAVb1rlrxGVfUuSR+WdEx7tvrR2WEflfTlzfQQoGXKTh+WdGdV/URVXSHpSklf20D/AN7C+R9lM35dez5Xwm5hC6iqkvTXkl4YY3zOmvC3sLVM2S3+FtblnZvugCSNMX5QVR+X9I+S3iHpvjHG8Q13CyB5j6Qv7flhvVPSF8cYX6mqpyQ9WFUfk/RNSb+xwT4CqKrul/RBSZdU1VlJfyzps9rHTscYx6vqQUknJP1A0j1kboZNMGG3H6yqw9oLr31V0u9I2C1sDR+Q9FuSnq+qZ2f7/lD4W9hupuz2LvwtrMNWlI0EAAAAAAAAgN1iWyQPAAAAAAAAALBD8EIBAAAAAAAAAFaGFwoAAAAAAAAAsDK8UAAAAAAAAACAleGFAgAAAAAAAACsDC8UAAAAAAAAAGBleKEAAAAAAAAAACvDCwUAAAAAAAAAWJn/ASglztK7kPPwAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 1296x1296 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"tile_raster_images(X=cur_w.T, img_shape=(28, 28), tile_shape=(5, 10), tile_spacing=(1, 1))\n",
"import matplotlib.pyplot as plt\n",
"from PIL import Image\n",
"%matplotlib inline\n",
"image = Image.fromarray(tile_raster_images(X=cur_w.T, img_shape=(28, 28) ,tile_shape=(5, 10), tile_spacing=(1, 1)))\n",
"### Plot image\n",
"plt.rcParams['figure.figsize'] = (18.0, 18.0)\n",
"imgplot = plt.imshow(image)\n",
"imgplot.set_cmap('gray') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each tile in the above visualization corresponds to a vector of connections between a hidden unit and visible layer's units. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's look at one of the learned weights corresponding to one of hidden units for example. In this particular square, the gray color represents weight = 0, and the whiter it is, the more positive the weights are (closer to 1). Conversely, the darker pixels are, the more negative the weights. The positive pixels will increase the probability of activation in hidden units (after multiplying by input/visible pixels), and negative pixels will decrease the probability of a unit hidden to be 1 (activated). So, why is this important? So we can see that this specific square (hidden unit) can detect a feature (e.g. a \"/\" shape) and if it exists in the input."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from PIL import Image\n",
"image = Image.fromarray(tile_raster_images(X =cur_w.T[10:11], img_shape=(28, 28),tile_shape=(1, 1), tile_spacing=(1, 1)))\n",
"### Plot image\n",
"plt.rcParams['figure.figsize'] = (4.0, 4.0)\n",
"imgplot = plt.imshow(image)\n",
"imgplot.set_cmap('gray') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's look at the reconstruction of an image now. Imagine that we have a destructed image of figure 3. Lets see if our trained network can fix it:\n",
"\n",
"First we plot the image:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2019-12-29 14:48:03-- https://ibm.box.com/shared/static/vvm1b63uvuxq88vbw9znpwu5ol380mco.jpg\n",
"Resolving ibm.box.com (ibm.box.com)... 107.152.26.197, 107.152.27.197\n",
"Connecting to ibm.box.com (ibm.box.com)|107.152.26.197|:443... connected.\n",
"HTTP request sent, awaiting response... 301 Moved Permanently\n",
"Location: /public/static/vvm1b63uvuxq88vbw9znpwu5ol380mco.jpg [following]\n",
"--2019-12-29 14:48:03-- https://ibm.box.com/public/static/vvm1b63uvuxq88vbw9znpwu5ol380mco.jpg\n",
"Reusing existing connection to ibm.box.com:443.\n",
"HTTP request sent, awaiting response... 301 Moved Permanently\n",
"Location: https://ibm.ent.box.com/public/static/vvm1b63uvuxq88vbw9znpwu5ol380mco.jpg [following]\n",
"--2019-12-29 14:48:03-- https://ibm.ent.box.com/public/static/vvm1b63uvuxq88vbw9znpwu5ol380mco.jpg\n",
"Resolving ibm.ent.box.com (ibm.ent.box.com)... 107.152.27.211, 107.152.26.211\n",
"Connecting to ibm.ent.box.com (ibm.ent.box.com)|107.152.27.211|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://public.boxcloud.com/d/1/b1!ZegRC3L_tWG3udcbnfMP5L5EcCbuBid1Oc72Xq5axhOwrVgPYzhsMLAlYpWMF_JKMvnFnQCaCnVre1KEsr_JMBULbCWpoMEhon2u4CK0SAlsSAh0pD5zBNyWNwUZepo6N0kEoBSjNggk-iBx3JE5gzI8MCyVPBP_xA21O0Ov_kWpfoswW3I9FaMZyzu9RyZvcLuWtTsqIuMrx64Aw2bjrfkLjYc2gQ8FBxTROfdgJf_dvrYgUH7YXsY-jNZhRP3H83crw9AntCaUNZVkQHiW4m-TL-mPVQOzAjQUHT358zZIdfS-QIrkg_UG6YQuMTEQAKzrWznJKsGRrzNmffGRe_RQb-mFKMGvakrNM-_784COdXOppqjhIhds6yBFu2MhMGqMFzCtLdq1f2OlDd9HhrSazUtHumoLDsQEAggpYgYxu35uqdPW-zAm5Q9rTTrYJVDWBS5fdabc0QTWO-QIkQX499bXeb9xWs0PHVBeMzHwwUSU13sFqHN2_9Us9GxieWP-gPFyKELVwCb8vNEDM7L3z-0lhhiRF227f6mGqiO7wBgLnUoogmLjc5C9lRb3XWx5nzKLM3hJ4zS8faWYz0cBCWSCBT_va1l8kJV8tOVgaL-J8ln-AvfBKDJJ8ZJgDshXa7yYhgTnEGV6t3vhgYkqmAm9mRZ2IdhgF9r6C4S2apTXVDgNxnlB0nkfeNpTLJzvewNmjlrBbTz_WE2-3ScV1N37A60Iz0ocbjdetkF_80A3mZIit0X7dtS174DiInXbQY_kLAPjKkYY4ghWsBLomneQOwNwn8ZwaaM-rOnqg--XswU0Zxj_YY_If2xFi9ibsB7mIhjlJzZwDOJKynzYV6YI21fj6unn5_VU-63QpFLkwoSYiTiWJoOfBpT3YmBTCWcYs9kMRig6FmluNluZZYBKoRqVGlpU2QnvgK8MPk9UAOrbMeVhUAA4S-8YYtEhZyAeY8ul525lH4U0zJPdZHwoY1c3FovtrhlLulMl3HWgcjuwA4ph1XHv2fyYs_M596q7rJ-PtZUXql1x1WqMv-Qy1ZjQUwIwIJ-54bMZkuLrF6224dTtZaC-bHkGZTT1Z15l6HpCwY6dOQ2MwswTOufCQ7UYhpE3MfmKKtTye474PFPr61sLCnJPsMXfXvOgxj91yF37olckaOJk-dcdZQeE3v3TfsMzwohcar5lvgVjjHhtYAortUMF-yFCoNrUQ06KlaBivup_J_CFr-mjhIVe20gVMZ_yet0q4gM6oVIdEjtFefp-26nd5iRp2HWu9o3Cv3SJkbSkGd_TkOf4x1XaFCs0Wu215CpEz7OHWrDNYTZap-6enTg9dBdrQU_-fjtUQLnq7yJVb4ZPUYTgrZSASpCp_2-s9W-kADMW/download [following]\n",
"--2019-12-29 14:48:04-- https://public.boxcloud.com/d/1/b1!ZegRC3L_tWG3udcbnfMP5L5EcCbuBid1Oc72Xq5axhOwrVgPYzhsMLAlYpWMF_JKMvnFnQCaCnVre1KEsr_JMBULbCWpoMEhon2u4CK0SAlsSAh0pD5zBNyWNwUZepo6N0kEoBSjNggk-iBx3JE5gzI8MCyVPBP_xA21O0Ov_kWpfoswW3I9FaMZyzu9RyZvcLuWtTsqIuMrx64Aw2bjrfkLjYc2gQ8FBxTROfdgJf_dvrYgUH7YXsY-jNZhRP3H83crw9AntCaUNZVkQHiW4m-TL-mPVQOzAjQUHT358zZIdfS-QIrkg_UG6YQuMTEQAKzrWznJKsGRrzNmffGRe_RQb-mFKMGvakrNM-_784COdXOppqjhIhds6yBFu2MhMGqMFzCtLdq1f2OlDd9HhrSazUtHumoLDsQEAggpYgYxu35uqdPW-zAm5Q9rTTrYJVDWBS5fdabc0QTWO-QIkQX499bXeb9xWs0PHVBeMzHwwUSU13sFqHN2_9Us9GxieWP-gPFyKELVwCb8vNEDM7L3z-0lhhiRF227f6mGqiO7wBgLnUoogmLjc5C9lRb3XWx5nzKLM3hJ4zS8faWYz0cBCWSCBT_va1l8kJV8tOVgaL-J8ln-AvfBKDJJ8ZJgDshXa7yYhgTnEGV6t3vhgYkqmAm9mRZ2IdhgF9r6C4S2apTXVDgNxnlB0nkfeNpTLJzvewNmjlrBbTz_WE2-3ScV1N37A60Iz0ocbjdetkF_80A3mZIit0X7dtS174DiInXbQY_kLAPjKkYY4ghWsBLomneQOwNwn8ZwaaM-rOnqg--XswU0Zxj_YY_If2xFi9ibsB7mIhjlJzZwDOJKynzYV6YI21fj6unn5_VU-63QpFLkwoSYiTiWJoOfBpT3YmBTCWcYs9kMRig6FmluNluZZYBKoRqVGlpU2QnvgK8MPk9UAOrbMeVhUAA4S-8YYtEhZyAeY8ul525lH4U0zJPdZHwoY1c3FovtrhlLulMl3HWgcjuwA4ph1XHv2fyYs_M596q7rJ-PtZUXql1x1WqMv-Qy1ZjQUwIwIJ-54bMZkuLrF6224dTtZaC-bHkGZTT1Z15l6HpCwY6dOQ2MwswTOufCQ7UYhpE3MfmKKtTye474PFPr61sLCnJPsMXfXvOgxj91yF37olckaOJk-dcdZQeE3v3TfsMzwohcar5lvgVjjHhtYAortUMF-yFCoNrUQ06KlaBivup_J_CFr-mjhIVe20gVMZ_yet0q4gM6oVIdEjtFefp-26nd5iRp2HWu9o3Cv3SJkbSkGd_TkOf4x1XaFCs0Wu215CpEz7OHWrDNYTZap-6enTg9dBdrQU_-fjtUQLnq7yJVb4ZPUYTgrZSASpCp_2-s9W-kADMW/download\n",
"Resolving public.boxcloud.com (public.boxcloud.com)... 107.152.24.200\n",
"Connecting to public.boxcloud.com (public.boxcloud.com)|107.152.24.200|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 24383 (24K) [image/jpeg]\n",
"Saving to: ‘destructed3.jpg’\n",
"\n",
"destructed3.jpg 100%[===================>] 23.81K --.-KB/s in 0.06s \n",
"\n",
"2019-12-29 14:48:04 (417 KB/s) - ‘destructed3.jpg’ saved [24383/24383]\n",
"\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=181x181 at 0x7FAB178B7EB8>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"!wget -O destructed3.jpg https://ibm.box.com/shared/static/vvm1b63uvuxq88vbw9znpwu5ol380mco.jpg\n",
"img = Image.open('destructed3.jpg')\n",
"img"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's pass this image through the net:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# convert the image to a 1d numpy array\n",
"sample_case = np.array(img.convert('I').resize((28,28))).ravel().reshape((1, -1))/255.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feed the sample case into the network and reconstruct the output:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"hh0_p = tf.nn.sigmoid(tf.matmul(v0_state, W) + hb)\n",
"#hh0_s = tf.nn.relu(tf.sign(hh0_p - tf.random_uniform(tf.shape(hh0_p)))) \n",
"hh0_s = tf.round(hh0_p)\n",
"hh0_p_val,hh0_s_val = sess.run((hh0_p, hh0_s), feed_dict={ v0_state: sample_case, W: prv_w, hb: prv_hb})\n",
"print(\"Probability nodes in hidden layer:\" ,hh0_p_val)\n",
"print(\"activated nodes in hidden layer:\" ,hh0_s_val)\n",
"\n",
"# reconstruct\n",
"vv1_p = tf.nn.sigmoid(tf.matmul(hh0_s_val, tf.transpose(W)) + vb)\n",
"rec_prob = sess.run(vv1_p, feed_dict={ hh0_s: hh0_s_val, W: prv_w, vb: prv_vb})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we plot the reconstructed image:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"img = Image.fromarray(tile_raster_images(X=rec_prob, img_shape=(28, 28),tile_shape=(1, 1), tile_spacing=(1, 1)))\n",
"plt.rcParams['figure.figsize'] = (4.0, 4.0)\n",
"imgplot = plt.imshow(img)\n",
"imgplot.set_cmap('gray') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr>\n",
"\n",
"## Want to learn more?\n",
"\n",
"Running deep learning programs usually needs a high performance platform. __PowerAI__ speeds up deep learning and AI. Built on IBM’s Power Systems, __PowerAI__ is a scalable software platform that accelerates deep learning and AI with blazing performance for individual users or enterprises. The __PowerAI__ platform supports popular machine learning libraries and dependencies including TensorFlow, Caffe, Torch, and Theano. You can use [PowerAI on IMB Cloud](https://cocl.us/ML0120EN_PAI).\n",
"\n",
"Also, you can use __Watson Studio__ to run these notebooks faster with bigger datasets.__Watson Studio__ is IBM’s leading cloud solution for data scientists, built by data scientists. With Jupyter notebooks, RStudio, Apache Spark and popular libraries pre-packaged in the cloud, __Watson Studio__ enables data scientists to collaborate on their projects without having to install anything. Join the fast-growing community of __Watson Studio__ users today with a free account at [Watson Studio](https://cocl.us/ML0120EN_DSX).This is the end of this lesson. Thank you for reading this notebook, and good luck on your studies."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Thanks for completing this lesson!\n",
"\n",
"Notebook created by: <a href = \"https://ca.linkedin.com/in/saeedaghabozorgi\">Saeed Aghabozorgi</a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### References:\n",
"https://en.wikipedia.org/wiki/Restricted_Boltzmann_machine \n",
"http://deeplearning.net/tutorial/rbm.html \n",
"http://www.cs.utoronto.ca/~hinton/absps/netflixICML.pdf<br>\n",
"http://imonad.com/rbm/restricted-boltzmann-machine/ \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr>\n",
"\n",
"Copyright &copy; 2018 [Cognitive Class](https://cocl.us/DX0108EN_CC). This notebook and its source code are released under the terms of the [MIT License](https://bigdatauniversity.com/mit-license/)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python",
"language": "python",
"name": "conda-env-python-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment