{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# PyTorch and Automatic Differentiation\n",
"\n",
"David I. Inouye\n",
"\n",
"## Main functionalities\n",
"\n",
"1. Automatic gradient calculations\n",
"2. GPU acceleration (probably won’t cover in class)\n",
"3. Neural network functions (simplify things a good deal)\n",
"\n",
"(PyTorch has a very nice tutorial that covers more basics:\n",
"https://pytorch.org/tutorials/beginner/basics/intro.html )"
],
"id": "50a2e3e9-6745-43f2-9f6b-b2e59227dd3a"
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"output-location": "default"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import torch # PyTorch library\n",
"import scipy.stats\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"# To visualize computation graphs\n",
"# See: https://github.com/szagoruyko/pytorchviz\n",
"# Uncomment the following line to install on Google colab\n",
"#%pip install -U git+https://github.com/szagoruyko/pytorchviz.git@master\n",
"from torchviz import make_dot, make_dot_from_trace\n",
"sns.set()\n",
"%matplotlib inline"
],
"id": "2623ebcb"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PyTorch: Some basics of converting between NumPy and Torch\n",
"\n",
"See link below for more information:\n",
"https://pytorch.org/tutorials/beginner/former_torchies/tensor_tutorial.html#numpy-bridge"
],
"id": "52478ef7-a840-4962-aebb-2fae146d1975"
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor([-5.0000, -3.8889, -2.7778, -1.6667, -0.5556, 0.5556, 1.6667, 2.7778,\n",
" 3.8889, 5.0000])\n",
"torch.float32\n",
"NOTE: x is float32 (torch default is float32)\n",
"tensor([-5.0000, -3.8889, -2.7778, -1.6667, -0.5556, 0.5556, 1.6667, 2.7778,\n",
" 3.8889, 5.0000], dtype=torch.float64)\n",
"torch.float64\n",
"NOTE: y is float64 (numpy default is float64)\n",
"torch.float32\n",
"NOTE: y can be converted to float32 via `float()`\n",
"[-5. -3.8888888 -2.7777777 -1.6666665 -0.55555534 0.55555534\n",
" 1.6666665 2.7777777 3.8888888 5. ]\n",
"[-5. -3.88888889 -2.77777778 -1.66666667 -0.55555556 0.55555556\n",
" 1.66666667 2.77777778 3.88888889 5. ]"
]
}
],
"source": [
"# Torch and numpy\n",
"x = torch.linspace(-5,5,10)\n",
"print(x)\n",
"print(x.dtype)\n",
"print('NOTE: x is float32 (torch default is float32)')\n",
"x_np = np.linspace(-5,5,10)\n",
"y = torch.from_numpy(x_np)\n",
"print(y)\n",
"print(y.dtype)\n",
"print('NOTE: y is float64 (numpy default is float64)')\n",
"print(y.float().dtype)\n",
"print('NOTE: y can be converted to float32 via `float()`')\n",
"print(x.numpy())\n",
"print(y.numpy())"
],
"id": "16ca8793"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Torch can be used to do simple computations just like numpy"
],
"id": "274b5bb0-eff4-47fc-96dd-83752e24e587"
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(5.) None\n",
"tensor(80.)"
]
}
],
"source": [
"# Explore gradient calculations\n",
"x = torch.tensor(5.0)\n",
"y = 3*x**2 + x\n",
"print(x, x.grad)\n",
"print(y)"
],
"id": "38c7922e"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PyTorch automatically creates a computation graph for computing gradients if `requires_grad=True`\n",
"\n",
"- IMPORTANT: You must set `requires_grad=True` for any torch tensor\n",
" for which you will want to compute the gradient (usually model\n",
" parameters)\n",
" - These are known as the “leaf nodes” or “input nodes” of a\n",
" gradient computation graph\n",
" - Note that some leaf nodes will not need gradient (e.g., constant\n",
" matrices like the training data)\n",
"\n",
"## Okay let’s compute and show the computation graph"
],
"id": "3be824d2-8b79-4443-a0cd-cef107cca305"
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(5., requires_grad=True) None\n",
"tensor(5.1232, grad_fn=<AddBackward0>)"
]
},
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/svg+xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh\nRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICJodHRwOi8vd3d3\nLnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8IS0tIEdlbmVyYXRlZCBi\neSBncmFwaHZpeiB2ZXJzaW9uIDE0LjAuMiAoMjAyNTEwMTkuMTcwNSkKIC0tPgo8IS0tIFBhZ2Vz\nOiAxIC0tPgo8c3ZnIHdpZHRoPSIyNjNwdCIgaGVpZ2h0PSI0NTNwdCIKIHZpZXdCb3g9IjAuMDAg\nMC4wMCAyNjMuMDAgNDUzLjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht\nbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGcgaWQ9ImdyYXBoMCIg\nY2xhc3M9ImdyYXBoIiB0cmFuc2Zvcm09InNjYWxlKDEgMSkgcm90YXRlKDApIHRyYW5zbGF0ZSg0\nIDQ0OC43NSkiPgo8cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJub25lIiBwb2ludHM9Ii00\nLDQgLTQsLTQ0OC43NSAyNTksLTQ0OC43NSAyNTksNCAtNCw0Ii8+CjwhLS0gNzE4NTk5NDU5MiAt\nLT4KPGcgaWQ9Im5vZGUxIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43MTg1OTk0NTkyPC90aXRsZT4K\nPHBvbHlnb24gZmlsbD0iI2NhZmY3MCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNTYsLTMzLjUg\nMTAyLC0zMy41IDEwMiwwIDE1NiwwIDE1NiwtMzMuNSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNl\ncnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMjkiIHk9Ii0yMCIgZm9udC1mYW1pbHk9Im1v\nbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+eTwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVz\nZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTI5IiB5PSItNy4yNSIgZm9udC1mYW1pbHk9\nIm1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ICgpPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk5\nMDY3MiAtLT4KPGcgaWQ9Im5vZGUyIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTc5OTkwNjcyPC90\naXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE3\nMywtMTE1Ljc1IDg1LC0xMTUuNzUgODUsLTY5LjUgMTczLC02OS41IDE3MywtMTE1Ljc1Ii8+Cjx0\nZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEyOSIgeT0i\nLTEwMi4yNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+QWRkQmFj\na3dhcmQwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlk\nZGxlIiB4PSIxMjkiIHk9Ii04OS41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9\nIjEwLjAwIj4mIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1\nOyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9y\nPSJtaWRkbGUiIHg9IjEyOSIgeT0iLTc2Ljc1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250\nLXNpemU9IjEwLjAwIj5hbHBoYTogMTwvdGV4dD4KPC9nPgo8IS0tIDQ1Nzk5OTA2NzImIzQ1OyZn\ndDs3MTg1OTk0NTkyIC0tPgo8ZyBpZD0iZWRnZTkiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1Nzk5\nOTA2NzImIzQ1OyZndDs3MTg1OTk0NTkyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tl\nPSJibGFjayIgZD0iTTEyOSwtNjkuMDZDMTI5LC02MS41MSAxMjksLTUzLjAxIDEyOSwtNDUuMTMi\nLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTMyLjUsLTQ1\nLjM3IDEyOSwtMzUuMzcgMTI1LjUsLTQ1LjM3IDEzMi41LC00NS4zNyIvPgo8L2c+CjwhLS0gNDU3\nOTk5MDUyOCAtLT4KPGcgaWQ9Im5vZGUzIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTc5OTkwNTI4\nPC90aXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9\nIjE3MywtMTk4IDg1LC0xOTggODUsLTE1MS43NSAxNzMsLTE1MS43NSAxNzMsLTE5OCIvPgo8dGV4\ndCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMjkiIHk9Ii0x\nODQuNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+QWRkQmFja3dh\ncmQwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxl\nIiB4PSIxMjkiIHk9Ii0xNzEuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0i\nMTAuMDAiPiYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7\nJiM0NTsmIzQ1OzwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9\nIm1pZGRsZSIgeD0iMTI5IiB5PSItMTU5IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNp\nemU9IjEwLjAwIj5hbHBoYTogMTwvdGV4dD4KPC9nPgo8IS0tIDQ1Nzk5OTA1MjgmIzQ1OyZndDs0\nNTc5OTkwNjcyIC0tPgo8ZyBpZD0iZWRnZTEiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1Nzk5OTA1\nMjgmIzQ1OyZndDs0NTc5OTkwNjcyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJi\nbGFjayIgZD0iTTEyOSwtMTUxLjUyQzEyOSwtMTQ0LjEgMTI5LC0xMzUuNjcgMTI5LC0xMjcuNTki\nLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTMyLjUsLTEy\nNy42NSAxMjksLTExNy42NSAxMjUuNSwtMTI3LjY1IDEzMi41LC0xMjcuNjUiLz4KPC9nPgo8IS0t\nIDQ1Nzk5OTAyNDAgLS0+CjxnIGlkPSJub2RlNCIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NDU3OTk5\nMDI0MDwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9p\nbnRzPSIxNDIsLTM2Mi41IDAsLTM2Mi41IDAsLTMwMy41IDE0MiwtMzAzLjUgMTQyLC0zNjIuNSIv\nPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI3MSIg\neT0iLTM0OSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+TXVsQmFj\na3dhcmQwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlk\nZGxlIiB4PSI3MSIgeT0iLTMzNi4yNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXpl\nPSIxMC4wMCI+JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0\nNTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7\nPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4\nPSI3MSIgeT0iLTMyMy41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAw\nIj5vdGhlcjogJiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7\nJiMxNjA7JiMxNjA7Tm9uZTwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1h\nbmNob3I9Im1pZGRsZSIgeD0iNzEiIHk9Ii0zMTAuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2Ui\nIGZvbnQtc2l6ZT0iMTAuMDAiPnNlbGYgOiBbc2F2ZWQgdGVuc29yXTwvdGV4dD4KPC9nPgo8IS0t\nIDQ1Nzk5OTAyNDAmIzQ1OyZndDs0NTc5OTkwNTI4IC0tPgo8ZyBpZD0iZWRnZTIiIGNsYXNzPSJl\nZGdlIj4KPHRpdGxlPjQ1Nzk5OTAyNDAmIzQ1OyZndDs0NTc5OTkwNTI4PC90aXRsZT4KPHBhdGgg\nZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTY2LjIzLC0zMDMuNDJDNjQuMTIsLTI4My4y\nNSA2My44NiwtMjU2IDczLC0yMzQgNzcuMjMsLTIyMy44MiA4NC4xNSwtMjE0LjQxIDkxLjcsLTIw\nNi4yNSIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI5NC4w\nNiwtMjA4Ljg1IDk4LjY1LC0xOTkuMyA4OS4xLC0yMDMuOSA5NC4wNiwtMjA4Ljg1Ii8+CjwvZz4K\nPCEtLSA3MTg2MDAyODMyIC0tPgo8ZyBpZD0ibm9kZTUiIGNsYXNzPSJub2RlIj4KPHRpdGxlPjcx\nODYwMDI4MzI8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJvcmFuZ2UiIHN0cm9rZT0iYmxhY2siIHBv\naW50cz0iMTM2LC0yNjcuNSA4MiwtMjY3LjUgODIsLTIzNCAxMzYsLTIzNCAxMzYsLTI2Ny41Ii8+\nCjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEwOSIg\neT0iLTI1NCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+c2VsZjwv\ndGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0i\nMTA5IiB5PSItMjQxLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAw\nIj4gKCk8L3RleHQ+CjwvZz4KPCEtLSA0NTc5OTkwMjQwJiM0NTsmZ3Q7NzE4NjAwMjgzMiAtLT4K\nPGcgaWQ9ImVkZ2UzIiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40NTc5OTkwMjQwJiM0NTsmZ3Q7NzE4\nNjAwMjgzMjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik04NC43\nMiwtMzAzLjAzQzkwLjMzLC0yOTEuMTggOTYuNjEsLTI3Ny45MSAxMDEuMzgsLTI2Ny44NSIvPgo8\nL2c+CjwhLS0gNzI0NDk3MzY4MCAtLT4KPGcgaWQ9Im5vZGU2IiBjbGFzcz0ibm9kZSI+Cjx0aXRs\nZT43MjQ0OTczNjgwPC90aXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJs\nYWNrIiBwb2ludHM9IjI1NSwtNDQ0Ljc1IDExOSwtNDQ0Ljc1IDExOSwtMzk4LjUgMjU1LC0zOTgu\nNSAyNTUsLTQ0NC43NSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0i\nbWlkZGxlIiB4PSIxODciIHk9Ii00MzEuMjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQt\nc2l6ZT0iMTAuMDAiPlNpbkJhY2t3YXJkMDwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2\nZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTg3IiB5PSItNDE4LjUiIGZvbnQtZmFtaWx5PSJt\nb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5j\naG9yPSJtaWRkbGUiIHg9IjE4NyIgeT0iLTQwNS43NSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIg\nZm9udC1zaXplPSIxMC4wMCI+c2VsZjogW3NhdmVkIHRlbnNvcl08L3RleHQ+CjwvZz4KPCEtLSA3\nMjQ0OTczNjgwJiM0NTsmZ3Q7NDU3OTk5MDI0MCAtLT4KPGcgaWQ9ImVkZ2U0IiBjbGFzcz0iZWRn\nZSI+Cjx0aXRsZT43MjQ0OTczNjgwJiM0NTsmZ3Q7NDU3OTk5MDI0MDwvdGl0bGU+CjxwYXRoIGZp\nbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xNTYuODMsLTM5OC4wOUMxNDUuMjcsLTM4OS40\nNiAxMzEuNzcsLTM3OS4zOCAxMTguOTYsLTM2OS44MSIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIg\nc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxMjEuMSwtMzY3LjA0IDExMC45OSwtMzYzLjg2IDExNi45\nMSwtMzcyLjY1IDEyMS4xLC0zNjcuMDQiLz4KPC9nPgo8IS0tIDQ1MjMyOTA3MzYgLS0+CjxnIGlk\nPSJub2RlNyIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NDUyMzI5MDczNjwvdGl0bGU+Cjxwb2x5Z29u\nIGZpbGw9ImxpZ2h0Ymx1ZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMTQsLTM0OS43NSAxNjAs\nLTM0OS43NSAxNjAsLTMxNi4yNSAyMTQsLTMxNi4yNSAyMTQsLTM0OS43NSIvPgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxODciIHk9Ii0zMzYuMjUi\nIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPng8L3RleHQ+Cjx0ZXh0\nIHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE4NyIgeT0iLTMy\nMy41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4gKCk8L3RleHQ+\nCjwvZz4KPCEtLSA3MjQ0OTczNjgwJiM0NTsmZ3Q7NDUyMzI5MDczNiAtLT4KPGcgaWQ9ImVkZ2U1\nIiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MjQ0OTczNjgwJiM0NTsmZ3Q7NDUyMzI5MDczNjwvdGl0\nbGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xODcsLTM5OC4zMkMxODcs\nLTM4My4yOCAxODcsLTM2My43OCAxODcsLTM1MC4yMSIvPgo8L2c+CjwhLS0gNDU3OTk5MDM4NCAt\nLT4KPGcgaWQ9Im5vZGU4IiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTc5OTkwMzg0PC90aXRsZT4K\nPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjI1NCwtMjYx\nLjEyIDE1NCwtMjYxLjEyIDE1NCwtMjQwLjM4IDI1NCwtMjQwLjM4IDI1NCwtMjYxLjEyIi8+Cjx0\nZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIwNCIgeT0i\nLTI0Ny42MiIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+QWNjdW11\nbGF0ZUdyYWQ8L3RleHQ+CjwvZz4KPCEtLSA0NTIzMjkwNzM2JiM0NTsmZ3Q7NDU3OTk5MDM4NCAt\nLT4KPGcgaWQ9ImVkZ2U3IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40NTIzMjkwNzM2JiM0NTsmZ3Q7\nNDU3OTk5MDM4NDwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0x\nOTAuNDQsLTMxNS43NkMxOTMuMDgsLTMwMy4yOCAxOTYuNzYsLTI4NS45NCAxOTkuNjEsLTI3Mi40\nNiIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMDIuOTks\nLTI3My40IDIwMS42NCwtMjYyLjkgMTk2LjE0LC0yNzEuOTUgMjAyLjk5LC0yNzMuNCIvPgo8L2c+\nCjwhLS0gNDU3OTk5MDM4NCYjNDU7Jmd0OzQ1Nzk5OTA1MjggLS0+CjxnIGlkPSJlZGdlOCIgY2xh\nc3M9ImVkZ2UiPgo8dGl0bGU+NDU3OTk5MDM4NCYjNDU7Jmd0OzQ1Nzk5OTA1Mjg8L3RpdGxlPgo8\ncGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMTk0LjIsLTI0MC4wOUMxODUuNCwt\nMjMxLjQzIDE3Mi4wMSwtMjE4LjI0IDE1OS42NiwtMjA2LjA3Ii8+Cjxwb2x5Z29uIGZpbGw9ImJs\nYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE2Mi40LC0yMDMuODYgMTUyLjgyLC0xOTkuMzQg\nMTU3LjQ5LC0yMDguODUgMTYyLjQsLTIwMy44NiIvPgo8L2c+CjwhLS0gNDU3OTk5MDM4NCYjNDU7\nJmd0OzcyNDQ5NzM2ODAgLS0+CjxnIGlkPSJlZGdlNiIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NDU3\nOTk5MDM4NCYjNDU7Jmd0OzcyNDQ5NzM2ODA8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJv\na2U9ImJsYWNrIiBkPSJNMjA4LjcxLC0yNjEuMzhDMjEzLjQsLTI3MS41NyAyMjAuMjksLTI4OC4y\nMyAyMjMsLTMwMy41IDIyNy41OSwtMzI5LjMyIDIzMC4xOCwtMzM3LjI4IDIyMywtMzYyLjUgMjIw\nLjQ2LC0zNzEuNDEgMjE2LjEzLC0zODAuMjkgMjExLjMzLC0zODguMzMiLz4KPHBvbHlnb24gZmls\nbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjA4LjM5LC0zODYuNDMgMjA1LjkxLC0z\nOTYuNzMgMjE0LjI3LC0zOTAuMjIgMjA4LjM5LC0zODYuNDMiLz4KPC9nPgo8L2c+Cjwvc3ZnPgo=\n"
}
}
],
"source": [
"# Explore gradient calculations\n",
"x = torch.tensor(5.0, requires_grad=True)\n",
"# A constant input tensor that does not require gradient\n",
"c = torch.tensor(3.0) \n",
"y = c*torch.sin(x) + x + c\n",
"print(x, x.grad)\n",
"print(y)\n",
"make_dot(\n",
" y, dict(x=x, c=c, y=y), \n",
" show_attrs=True, show_saved=True)"
],
"id": "8583bcdc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Okay let’s compute and show the computation graph"
],
"id": "57afdc2e-b5ea-402c-805f-72c098e903a9"
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(5., requires_grad=True) None\n",
"tensor(5.1232, grad_fn=<AddBackward0>)"
]
},
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/svg+xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh\nRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICJodHRwOi8vd3d3\nLnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8IS0tIEdlbmVyYXRlZCBi\neSBncmFwaHZpeiB2ZXJzaW9uIDE0LjAuMiAoMjAyNTEwMTkuMTcwNSkKIC0tPgo8IS0tIFBhZ2Vz\nOiAxIC0tPgo8c3ZnIHdpZHRoPSIzMjhwdCIgaGVpZ2h0PSI0NTNwdCIKIHZpZXdCb3g9IjAuMDAg\nMC4wMCAzMjguMDAgNDUzLjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht\nbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGcgaWQ9ImdyYXBoMCIg\nY2xhc3M9ImdyYXBoIiB0cmFuc2Zvcm09InNjYWxlKDEgMSkgcm90YXRlKDApIHRyYW5zbGF0ZSg0\nIDQ0OC43NSkiPgo8cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJub25lIiBwb2ludHM9Ii00\nLDQgLTQsLTQ0OC43NSAzMjQsLTQ0OC43NSAzMjQsNCAtNCw0Ii8+CjwhLS0gNzE4NTk4OTc5MiAt\nLT4KPGcgaWQ9Im5vZGUxIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43MTg1OTg5NzkyPC90aXRsZT4K\nPHBvbHlnb24gZmlsbD0iI2NhZmY3MCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMDksLTMzLjUg\nMTU1LC0zMy41IDE1NSwwIDIwOSwwIDIwOSwtMzMuNSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNl\ncnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxODIiIHk9Ii0yMCIgZm9udC1mYW1pbHk9Im1v\nbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+eTwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVz\nZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTgyIiB5PSItNy4yNSIgZm9udC1mYW1pbHk9\nIm1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ICgpPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk5\nMDgxNiAtLT4KPGcgaWQ9Im5vZGUyIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTc5OTkwODE2PC90\naXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjIy\nNiwtMTE1Ljc1IDEzOCwtMTE1Ljc1IDEzOCwtNjkuNSAyMjYsLTY5LjUgMjI2LC0xMTUuNzUiLz4K\nPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTgyIiB5\nPSItMTAyLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5BZGRC\nYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJt\naWRkbGUiIHg9IjE4MiIgeT0iLTg5LjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6\nZT0iMTAuMDAiPiYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYj\nNDU7JiM0NTsmIzQ1OzwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNo\nb3I9Im1pZGRsZSIgeD0iMTgyIiB5PSItNzYuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZv\nbnQtc2l6ZT0iMTAuMDAiPmFscGhhOiAxPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk5MDgxNiYjNDU7\nJmd0OzcxODU5ODk3OTIgLS0+CjxnIGlkPSJlZGdlMTMiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1\nNzk5OTA4MTYmIzQ1OyZndDs3MTg1OTg5NzkyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry\nb2tlPSJibGFjayIgZD0iTTE4MiwtNjkuMDZDMTgyLC02MS41MSAxODIsLTUzLjAxIDE4MiwtNDUu\nMTMiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTg1LjUs\nLTQ1LjM3IDE4MiwtMzUuMzcgMTc4LjUsLTQ1LjM3IDE4NS41LC00NS4zNyIvPgo8L2c+CjwhLS0g\nNDU3OTk5MTEwNCAtLT4KPGcgaWQ9Im5vZGUzIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTc5OTkx\nMTA0PC90aXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2lu\ndHM9IjI4MiwtMTk4IDE5NCwtMTk4IDE5NCwtMTUxLjc1IDI4MiwtMTUxLjc1IDI4MiwtMTk4Ii8+\nCjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIzOCIg\neT0iLTE4NC41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5BZGRC\nYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJt\naWRkbGUiIHg9IjIzOCIgeT0iLTE3MS43NSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1z\naXplPSIxMC4wMCI+JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7\nJiM0NTsmIzQ1OyYjNDU7PC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFu\nY2hvcj0ibWlkZGxlIiB4PSIyMzgiIHk9Ii0xNTkiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZv\nbnQtc2l6ZT0iMTAuMDAiPmFscGhhOiAxPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk5MTEwNCYjNDU7\nJmd0OzQ1Nzk5OTA4MTYgLS0+CjxnIGlkPSJlZGdlMSIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NDU3\nOTk5MTEwNCYjNDU7Jmd0OzQ1Nzk5OTA4MTY8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJv\na2U9ImJsYWNrIiBkPSJNMjIyLjQsLTE1MS41MkMyMTYuNzQsLTE0My40MSAyMTAuMjQsLTEzNC4x\nIDIwNC4xMywtMTI1LjM0Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBw\nb2ludHM9IjIwNy4xNywtMTIzLjU4IDE5OC41OCwtMTE3LjM4IDIwMS40MywtMTI3LjU4IDIwNy4x\nNywtMTIzLjU4Ii8+CjwvZz4KPCEtLSA0NTc5OTkxMjQ4IC0tPgo8ZyBpZD0ibm9kZTQiIGNsYXNz\nPSJub2RlIj4KPHRpdGxlPjQ1Nzk5OTEyNDg8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJsaWdodGdy\nZXkiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTk3LC0zNjIuNSA1NSwtMzYyLjUgNTUsLTMwMy41\nIDE5NywtMzAzLjUgMTk3LC0zNjIuNSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0\nLWFuY2hvcj0ibWlkZGxlIiB4PSIxMjYiIHk9Ii0zNDkiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2Ui\nIGZvbnQtc2l6ZT0iMTAuMDAiPk11bEJhY2t3YXJkMDwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJw\ncmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTI2IiB5PSItMzM2LjI1IiBmb250LWZh\nbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1OyYjNDU7JiM0NTsmIzQ1OyYj\nNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2Vy\ndmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEyNiIgeT0iLTMyMy41IiBmb250LWZhbWlseT0i\nbW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5vdGhlcjogW3NhdmVkIHRlbnNvcl08L3RleHQ+\nCjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEyNiIg\neT0iLTMxMC43NSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+c2Vs\nZiA6IFtzYXZlZCB0ZW5zb3JdPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk5MTI0OCYjNDU7Jmd0OzQ1\nNzk5OTExMDQgLS0+CjxnIGlkPSJlZGdlMiIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NDU3OTk5MTI0\nOCYjNDU7Jmd0OzQ1Nzk5OTExMDQ8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJs\nYWNrIiBkPSJNMTQ2LjU0LC0zMDMuMzZDMTY2LjA2LC0yNzYuMTYgMTk1LjM0LC0yMzUuMzQgMjE1\nLjQ4LC0yMDcuMjYiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50\ncz0iMjE4LjA3LC0yMDkuNjYgMjIxLjA2LC0xOTkuNDkgMjEyLjM4LC0yMDUuNTggMjE4LjA3LC0y\nMDkuNjYiLz4KPC9nPgo8IS0tIDcxODYwMDA4MzIgLS0+CjxnIGlkPSJub2RlNSIgY2xhc3M9Im5v\nZGUiPgo8dGl0bGU+NzE4NjAwMDgzMjwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9Im9yYW5nZSIgc3Ry\nb2tlPSJibGFjayIgcG9pbnRzPSI1NCwtMjY3LjUgMCwtMjY3LjUgMCwtMjM0IDU0LC0yMzQgNTQs\nLTI2Ny41Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUi\nIHg9IjI3IiB5PSItMjU0IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAw\nIj5vdGhlcjwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1p\nZGRsZSIgeD0iMjciIHk9Ii0yNDEuMjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6\nZT0iMTAuMDAiPiAoKTwvdGV4dD4KPC9nPgo8IS0tIDQ1Nzk5OTEyNDgmIzQ1OyZndDs3MTg2MDAw\nODMyIC0tPgo8ZyBpZD0iZWRnZTMiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1Nzk5OTEyNDgmIzQ1\nOyZndDs3MTg2MDAwODMyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIg\nZD0iTTkwLjI2LC0zMDMuMDNDNzUuNjQsLTI5MS4xOCA1OS4yOCwtMjc3LjkxIDQ2Ljg2LC0yNjcu\nODUiLz4KPC9nPgo8IS0tIDcxODU5OTAxMTIgLS0+CjxnIGlkPSJub2RlNiIgY2xhc3M9Im5vZGUi\nPgo8dGl0bGU+NzE4NTk5MDExMjwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9ImxpZ2h0Ymx1ZSIgc3Ry\nb2tlPSJibGFjayIgcG9pbnRzPSIxMjYsLTI2Ny41IDcyLC0yNjcuNSA3MiwtMjM0IDEyNiwtMjM0\nIDEyNiwtMjY3LjUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1p\nZGRsZSIgeD0iOTkiIHk9Ii0yNTQiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0i\nMTAuMDAiPmM8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJt\naWRkbGUiIHg9Ijk5IiB5PSItMjQxLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNp\nemU9IjEwLjAwIj4gKCk8L3RleHQ+CjwvZz4KPCEtLSA0NTc5OTkxMjQ4JiM0NTsmZ3Q7NzE4NTk5\nMDExMiAtLT4KPGcgaWQ9ImVkZ2U0IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40NTc5OTkxMjQ4JiM0\nNTsmZ3Q7NzE4NTk5MDExMjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2si\nIGQ9Ik0xMTYuMjUsLTMwMy4wM0MxMTIuMjYsLTI5MS4xOCAxMDcuOCwtMjc3LjkxIDEwNC40Miwt\nMjY3Ljg1Ii8+CjwvZz4KPCEtLSA0NTc5OTkxMTUyIC0tPgo8ZyBpZD0ibm9kZTciIGNsYXNzPSJu\nb2RlIj4KPHRpdGxlPjQ1Nzk5OTExNTI8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJsaWdodGdyZXki\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTc2LC0xODUuMjUgNzYsLTE4NS4yNSA3NiwtMTY0LjUg\nMTc2LC0xNjQuNSAxNzYsLTE4NS4yNSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0\nLWFuY2hvcj0ibWlkZGxlIiB4PSIxMjYiIHk9Ii0xNzEuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3Bh\nY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPkFjY3VtdWxhdGVHcmFkPC90ZXh0Pgo8L2c+CjwhLS0gNzE4\nNTk5MDExMiYjNDU7Jmd0OzQ1Nzk5OTExNTIgLS0+CjxnIGlkPSJlZGdlNiIgY2xhc3M9ImVkZ2Ui\nPgo8dGl0bGU+NzE4NTk5MDExMiYjNDU7Jmd0OzQ1Nzk5OTExNTI8L3RpdGxlPgo8cGF0aCBmaWxs\nPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMTA0Ljg2LC0yMzMuNzJDMTA4LjkxLC0yMjIuNjQg\nMTE0LjMyLC0yMDcuODMgMTE4LjY2LC0xOTUuOTYiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0\ncm9rZT0iYmxhY2siIHBvaW50cz0iMTIxLjg4LC0xOTcuMzUgMTIyLjAyLC0xODYuNzUgMTE1LjMs\nLTE5NC45NCAxMjEuODgsLTE5Ny4zNSIvPgo8L2c+CjwhLS0gNDU3OTk5MTE1MiYjNDU7Jmd0OzQ1\nNzk5OTA4MTYgLS0+CjxnIGlkPSJlZGdlMTIiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1Nzk5OTEx\nNTImIzQ1OyZndDs0NTc5OTkwODE2PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJi\nbGFjayIgZD0iTTEzMi44NywtMTY0LjAzQzEzOS42MSwtMTU0LjM4IDE1MC4yNSwtMTM5LjEyIDE1\nOS45MSwtMTI1LjI4Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2lu\ndHM9IjE2Mi42NiwtMTI3LjQ1IDE2NS41MiwtMTE3LjI1IDE1Ni45MiwtMTIzLjQ0IDE2Mi42Niwt\nMTI3LjQ1Ii8+CjwvZz4KPCEtLSA0NTc5OTkxMTUyJiM0NTsmZ3Q7NDU3OTk5MTI0OCAtLT4KPGcg\naWQ9ImVkZ2U1IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40NTc5OTkxMTUyJiM0NTsmZ3Q7NDU3OTk5\nMTI0ODwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xMjcuOTks\nLTE4NS42OUMxMzAuMjIsLTE5Ny4yMSAxMzMuNjgsLTIxNi45IDEzNSwtMjM0IDEzNi40NywtMjUz\nLjA1IDEzNC45MywtMjc0LjE2IDEzMi43NCwtMjkxLjkiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2si\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTI5LjI4LC0yOTEuNDEgMTMxLjM5LC0zMDEuNzkgMTM2\nLjIxLC0yOTIuMzUgMTI5LjI4LC0yOTEuNDEiLz4KPC9nPgo8IS0tIDQ1Nzk5ODY0OTYgLS0+Cjxn\nIGlkPSJub2RlOCIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NDU3OTk4NjQ5NjwvdGl0bGU+Cjxwb2x5\nZ29uIGZpbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzMTAsLTQ0NC43NSAx\nNzQsLTQ0NC43NSAxNzQsLTM5OC41IDMxMCwtMzk4LjUgMzEwLC00NDQuNzUiLz4KPHRleHQgeG1s\nOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjQyIiB5PSItNDMxLjI1\nIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5TaW5CYWNrd2FyZDA8\nL3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9\nIjI0MiIgeT0iLTQxOC41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAw\nIj4mIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7\nJiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7PC90ZXh0Pgo8dGV4\ndCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyNDIiIHk9Ii00\nMDUuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPnNlbGY6IFtz\nYXZlZCB0ZW5zb3JdPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk4NjQ5NiYjNDU7Jmd0OzQ1Nzk5OTEy\nNDggLS0+CjxnIGlkPSJlZGdlNyIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NDU3OTk4NjQ5NiYjNDU7\nJmd0OzQ1Nzk5OTEyNDg8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBk\nPSJNMjExLjgzLC0zOTguMDlDMjAwLjI3LC0zODkuNDYgMTg2Ljc3LC0zNzkuMzggMTczLjk2LC0z\nNjkuODEiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTc2\nLjEsLTM2Ny4wNCAxNjUuOTksLTM2My44NiAxNzEuOTEsLTM3Mi42NSAxNzYuMSwtMzY3LjA0Ii8+\nCjwvZz4KPCEtLSA0NTU2MjY4MjA4IC0tPgo8ZyBpZD0ibm9kZTkiIGNsYXNzPSJub2RlIj4KPHRp\ndGxlPjQ1NTYyNjgyMDg8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJsaWdodGJsdWUiIHN0cm9rZT0i\nYmxhY2siIHBvaW50cz0iMjY5LC0zNDkuNzUgMjE1LC0zNDkuNzUgMjE1LC0zMTYuMjUgMjY5LC0z\nMTYuMjUgMjY5LC0zNDkuNzUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNo\nb3I9Im1pZGRsZSIgeD0iMjQyIiB5PSItMzM2LjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBm\nb250LXNpemU9IjEwLjAwIj54PC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0\nLWFuY2hvcj0ibWlkZGxlIiB4PSIyNDIiIHk9Ii0zMjMuNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFj\nZSIgZm9udC1zaXplPSIxMC4wMCI+ICgpPC90ZXh0Pgo8L2c+CjwhLS0gNDU3OTk4NjQ5NiYjNDU7\nJmd0OzQ1NTYyNjgyMDggLS0+CjxnIGlkPSJlZGdlOCIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NDU3\nOTk4NjQ5NiYjNDU7Jmd0OzQ1NTYyNjgyMDg8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJv\na2U9ImJsYWNrIiBkPSJNMjQyLC0zOTguMzJDMjQyLC0zODMuMjggMjQyLC0zNjMuNzggMjQyLC0z\nNTAuMjEiLz4KPC9nPgo8IS0tIDQ1Nzk5OTEyOTYgLS0+CjxnIGlkPSJub2RlMTAiIGNsYXNzPSJu\nb2RlIj4KPHRpdGxlPjQ1Nzk5OTEyOTY8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJsaWdodGdyZXki\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzIwLC0yNjEuMTIgMjIwLC0yNjEuMTIgMjIwLC0yNDAu\nMzggMzIwLC0yNDAuMzggMzIwLC0yNjEuMTIiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIg\ndGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjcwIiB5PSItMjQ3LjYyIiBmb250LWZhbWlseT0ibW9u\nb3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5BY2N1bXVsYXRlR3JhZDwvdGV4dD4KPC9nPgo8IS0t\nIDQ1NTYyNjgyMDgmIzQ1OyZndDs0NTc5OTkxMjk2IC0tPgo8ZyBpZD0iZWRnZTEwIiBjbGFzcz0i\nZWRnZSI+Cjx0aXRsZT40NTU2MjY4MjA4JiM0NTsmZ3Q7NDU3OTk5MTI5NjwvdGl0bGU+CjxwYXRo\nIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yNDcuNjcsLTMxNS43NkMyNTIuMDcsLTMw\nMy4xNSAyNTguMTksLTI4NS41OSAyNjIuOTIsLTI3Mi4wNSIvPgo8cG9seWdvbiBmaWxsPSJibGFj\nayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyNjYuMTQsLTI3My40NCAyNjYuMTMsLTI2Mi44NCAy\nNTkuNTMsLTI3MS4xMyAyNjYuMTQsLTI3My40NCIvPgo8L2c+CjwhLS0gNDU3OTk5MTI5NiYjNDU7\nJmd0OzQ1Nzk5OTExMDQgLS0+CjxnIGlkPSJlZGdlMTEiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1\nNzk5OTEyOTYmIzQ1OyZndDs0NTc5OTkxMTA0PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry\nb2tlPSJibGFjayIgZD0iTTI2NS44MiwtMjQwLjA5QzI2Mi4zMSwtMjMyLjAxIDI1Ny4xMSwtMjE5\nLjk4IDI1Mi4xNCwtMjA4LjUyIi8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNr\nIiBwb2ludHM9IjI1NS40OSwtMjA3LjQ1IDI0OC4zLC0xOTkuNjYgMjQ5LjA3LC0yMTAuMjMgMjU1\nLjQ5LC0yMDcuNDUiLz4KPC9nPgo8IS0tIDQ1Nzk5OTEyOTYmIzQ1OyZndDs0NTc5OTg2NDk2IC0t\nPgo8ZyBpZD0iZWRnZTkiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1Nzk5OTEyOTYmIzQ1OyZndDs0\nNTc5OTg2NDk2PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI3\nMi45LC0yNjEuNDZDMjc4LjI2LC0yODEuMDEgMjg4LjI5LC0zMjYuMzQgMjc4LC0zNjIuNSAyNzUu\nNDYsLTM3MS40MSAyNzEuMTMsLTM4MC4yOSAyNjYuMzMsLTM4OC4zMyIvPgo8cG9seWdvbiBmaWxs\nPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyNjMuMzksLTM4Ni40MyAyNjAuOTEsLTM5\nNi43MyAyNjkuMjcsLTM5MC4yMiAyNjMuMzksLTM4Ni40MyIvPgo8L2c+CjwvZz4KPC9zdmc+Cg==\n"
}
}
],
"source": [
"# Explore gradient calculations\n",
"x = torch.tensor(5.0, requires_grad=True)\n",
"# Change to compute grad over this variable too\n",
"c = torch.tensor(3.0, requires_grad=True) \n",
"y = c*torch.sin(x) + x + c\n",
"print(x, x.grad)\n",
"print(y)\n",
"make_dot(\n",
" y, dict(x=x, c=c, y=y), \n",
" show_attrs=True, show_saved=True)"
],
"id": "31942f95"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## We can even do loops"
],
"id": "74a656af-6f8b-4bf9-b825-e9cd785e1803"
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(1., requires_grad=True) None\n",
"tensor(42., grad_fn=<MulBackward0>)"
]
},
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/svg+xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh\nRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICJodHRwOi8vd3d3\nLnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8IS0tIEdlbmVyYXRlZCBi\neSBncmFwaHZpeiB2ZXJzaW9uIDE0LjAuMiAoMjAyNTEwMTkuMTcwNSkKIC0tPgo8IS0tIFBhZ2Vz\nOiAxIC0tPgo8c3ZnIHdpZHRoPSIzODlwdCIgaGVpZ2h0PSI0OTFwdCIKIHZpZXdCb3g9IjAuMDAg\nMC4wMCAzODkuMDAgNDkxLjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht\nbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGcgaWQ9ImdyYXBoMCIg\nY2xhc3M9ImdyYXBoIiB0cmFuc2Zvcm09InNjYWxlKDEgMSkgcm90YXRlKDApIHRyYW5zbGF0ZSg0\nIDQ4NykiPgo8cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJub25lIiBwb2ludHM9Ii00LDQg\nLTQsLTQ4NyAzODUsLTQ4NyAzODUsNCAtNCw0Ii8+CjwhLS0gNDc3MTg4NzI0OCAtLT4KPGcgaWQ9\nIm5vZGUxIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NzcxODg3MjQ4PC90aXRsZT4KPHBvbHlnb24g\nZmlsbD0iI2NhZmY3MCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI1NCwtMzMuNSAwLC0zMy41IDAs\nMCA1NCwwIDU0LC0zMy41Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9y\nPSJtaWRkbGUiIHg9IjI3IiB5PSItMjAiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6\nZT0iMTAuMDAiPnk8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9y\nPSJtaWRkbGUiIHg9IjI3IiB5PSItNy4yNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1z\naXplPSIxMC4wMCI+ICgpPC90ZXh0Pgo8L2c+CjwhLS0gNDU4MDE0MDY3MiAtLT4KPGcgaWQ9Im5v\nZGUyIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTgwMTQwNjcyPC90aXRsZT4KPHBvbHlnb24gZmls\nbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE3MCwtMTI4LjUgMjgsLTEyOC41\nIDI4LC02OS41IDE3MCwtNjkuNSAxNzAsLTEyOC41Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2Vy\ndmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijk5IiB5PSItMTE1IiBmb250LWZhbWlseT0ibW9u\nb3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5NdWxCYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpz\ncGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijk5IiB5PSItMTAyLjI1IiBm\nb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0\nNTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0i\ncHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijk5IiB5PSItODkuNSIgZm9udC1mYW1p\nbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+b3RoZXI6IFtzYXZlZCB0ZW5zb3JdPC90\nZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI5\nOSIgeT0iLTc2Ljc1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5z\nZWxmIDogW3NhdmVkIHRlbnNvcl08L3RleHQ+CjwvZz4KPCEtLSA0NTgwMTQwNjcyJiM0NTsmZ3Q7\nNDc3MTg4NzI0OCAtLT4KPGcgaWQ9ImVkZ2UxNyIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NDU4MDE0\nMDY3MiYjNDU7Jmd0OzQ3NzE4ODcyNDg8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9\nImJsYWNrIiBkPSJNNzMuMDEsLTY5LjAzQzY1LjExLC02MC4yMyA1Ni41MiwtNTAuNjYgNDguOTMs\nLTQyLjE5Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjUx\nLjczLC00MC4wOCA0Mi40NSwtMzQuOTcgNDYuNTIsLTQ0Ljc1IDUxLjczLC00MC4wOCIvPgo8L2c+\nCjwhLS0gNDc3MTg4ODc2OCAtLT4KPGcgaWQ9Im5vZGUzIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40\nNzcxODg4NzY4PC90aXRsZT4KPHBvbHlnb24gZmlsbD0ib3JhbmdlIiBzdHJva2U9ImJsYWNrIiBw\nb2ludHM9IjEyNiwtMzMuNSA3MiwtMzMuNSA3MiwwIDEyNiwwIDEyNiwtMzMuNSIvPgo8dGV4dCB4\nbWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI5OSIgeT0iLTIwIiBm\nb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5vdGhlcjwvdGV4dD4KPHRl\neHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iOTkiIHk9Ii03\nLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4gKCk8L3RleHQ+\nCjwvZz4KPCEtLSA0NTgwMTQwNjcyJiM0NTsmZ3Q7NDc3MTg4ODc2OCAtLT4KPGcgaWQ9ImVkZ2Ux\nIiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40NTgwMTQwNjcyJiM0NTsmZ3Q7NDc3MTg4ODc2ODwvdGl0\nbGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik05OSwtNjkuMDNDOTksLTU3\nLjE4IDk5LC00My45MSA5OSwtMzMuODUiLz4KPC9nPgo8IS0tIDQ3NzE4ODYyMDggLS0+CjxnIGlk\nPSJub2RlNCIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NDc3MTg4NjIwODwvdGl0bGU+Cjxwb2x5Z29u\nIGZpbGw9Im9yYW5nZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxOTgsLTMzLjUgMTQ0LC0zMy41\nIDE0NCwwIDE5OCwwIDE5OCwtMzMuNSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0\nLWFuY2hvcj0ibWlkZGxlIiB4PSIxNzEiIHk9Ii0yMCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIg\nZm9udC1zaXplPSIxMC4wMCI+c2VsZjwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIg\ndGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTcxIiB5PSItNy4yNSIgZm9udC1mYW1pbHk9Im1vbm9z\ncGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ICgpPC90ZXh0Pgo8L2c+CjwhLS0gNDU4MDE0MDY3MiYj\nNDU7Jmd0OzQ3NzE4ODYyMDggLS0+CjxnIGlkPSJlZGdlMiIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+\nNDU4MDE0MDY3MiYjNDU7Jmd0OzQ3NzE4ODYyMDg8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBz\ndHJva2U9ImJsYWNrIiBkPSJNMTI0Ljk5LC02OS4wM0MxMzUuNjMsLTU3LjE4IDE0Ny41MywtNDMu\nOTEgMTU2LjU2LC0zMy44NSIvPgo8L2c+CjwhLS0gNDU4MDE0MTAwOCAtLT4KPGcgaWQ9Im5vZGU1\nIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NTgwMTQxMDA4PC90aXRsZT4KPHBvbHlnb24gZmlsbD0i\nbGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE1MywtMzA1Ljc1IDExLC0zMDUuNzUg\nMTEsLTI0Ni43NSAxNTMsLTI0Ni43NSAxNTMsLTMwNS43NSIvPgo8dGV4dCB4bWw6c3BhY2U9InBy\nZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI4MiIgeT0iLTI5Mi4yNSIgZm9udC1mYW1p\nbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+TXVsQmFja3dhcmQwPC90ZXh0Pgo8dGV4\ndCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI4MiIgeT0iLTI3\nOS41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1OyYjNDU7\nJiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYj\nNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpz\ncGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjgyIiB5PSItMjY2Ljc1IiBm\nb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5vdGhlcjogW3NhdmVkIHRl\nbnNvcl08L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRk\nbGUiIHg9IjgyIiB5PSItMjU0IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEw\nLjAwIj5zZWxmIDogW3NhdmVkIHRlbnNvcl08L3RleHQ+CjwvZz4KPCEtLSA0NTgwMTQxMDA4JiM0\nNTsmZ3Q7NDU4MDE0MDY3MiAtLT4KPGcgaWQ9ImVkZ2UzIiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40\nNTgwMTQxMDA4JiM0NTsmZ3Q7NDU4MDE0MDY3MjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0\ncm9rZT0iYmxhY2siIGQ9Ik0zOC4yMSwtMjQ2LjQ2QzI2Ljg5LC0yMzYuNjEgMTYuMTYsLTIyNC41\nNCAxMCwtMjEwLjc1IDEuNjIsLTE5MS45OCAwLjY2LC0xODIuODEgMTAsLTE2NC41IDE1LjU4LC0x\nNTMuNTcgMjMuOTcsLTE0NC4wNiAzMy40MSwtMTM1Ljk1Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNr\nIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjM1LjQ3LC0xMzguNzggNDEuMTQsLTEyOS44MyAzMS4x\nMywtMTMzLjI5IDM1LjQ3LC0xMzguNzgiLz4KPC9nPgo8IS0tIDcxODU5OTE0NzIgLS0+CjxnIGlk\nPSJub2RlNiIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NzE4NTk5MTQ3MjwvdGl0bGU+Cjxwb2x5Z29u\nIGZpbGw9Im9yYW5nZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI3MywtMjA0LjM4IDE5LC0yMDQu\nMzggMTksLTE3MC44OCA3MywtMTcwLjg4IDczLC0yMDQuMzgiLz4KPHRleHQgeG1sOnNwYWNlPSJw\ncmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDYiIHk9Ii0xOTAuODgiIGZvbnQtZmFt\naWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPm90aGVyPC90ZXh0Pgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0NiIgeT0iLTE3OC4xMiIg\nZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ICgpPC90ZXh0Pgo8L2c+\nCjwhLS0gNDU4MDE0MTAwOCYjNDU7Jmd0OzcxODU5OTE0NzIgLS0+CjxnIGlkPSJlZGdlNCIgY2xh\nc3M9ImVkZ2UiPgo8dGl0bGU+NDU4MDE0MTAwOCYjNDU7Jmd0OzcxODU5OTE0NzI8L3RpdGxlPgo8\ncGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNzAuMDEsLTI0Ni40MUM2NC4yLC0y\nMzIuNDMgNTcuNDUsLTIxNi4xOCA1Mi41OSwtMjA0LjQ4Ii8+CjwvZz4KPCEtLSA0NzcxODg1NDg4\nIC0tPgo8ZyBpZD0ibm9kZTciIGNsYXNzPSJub2RlIj4KPHRpdGxlPjQ3NzE4ODU0ODg8L3RpdGxl\nPgo8cG9seWdvbiBmaWxsPSJvcmFuZ2UiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTQ1LC0yMDQu\nMzggOTEsLTIwNC4zOCA5MSwtMTcwLjg4IDE0NSwtMTcwLjg4IDE0NSwtMjA0LjM4Ii8+Cjx0ZXh0\nIHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjExOCIgeT0iLTE5\nMC44OCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+c2VsZjwvdGV4\ndD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTE4\nIiB5PSItMTc4LjEyIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4g\nKCk8L3RleHQ+CjwvZz4KPCEtLSA0NTgwMTQxMDA4JiM0NTsmZ3Q7NDc3MTg4NTQ4OCAtLT4KPGcg\naWQ9ImVkZ2U1IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT40NTgwMTQxMDA4JiM0NTsmZ3Q7NDc3MTg4\nNTQ4ODwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik05My45OSwt\nMjQ2LjQxQzk5LjgsLTIzMi40MyAxMDYuNTUsLTIxNi4xOCAxMTEuNDEsLTIwNC40OCIvPgo8L2c+\nCjwhLS0gNzE4NTc4Nzc5MiAtLT4KPGcgaWQ9Im5vZGUxNCIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+\nNzE4NTc4Nzc5MjwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFj\nayIgcG9pbnRzPSIyNTEsLTIxMC43NSAxNjMsLTIxMC43NSAxNjMsLTE2NC41IDI1MSwtMTY0LjUg\nMjUxLC0yMTAuNzUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1p\nZGRsZSIgeD0iMjA3IiB5PSItMTk3LjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNp\nemU9IjEwLjAwIj5BZGRCYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUi\nIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIwNyIgeT0iLTE4NC41IiBmb250LWZhbWlseT0ibW9u\nb3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJl\nc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIwNyIgeT0iLTE3MS43NSIgZm9udC1mYW1p\nbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+YWxwaGE6IDE8L3RleHQ+CjwvZz4KPCEt\nLSA0NTgwMTQxMDA4JiM0NTsmZ3Q7NzE4NTc4Nzc5MiAtLT4KPGcgaWQ9ImVkZ2UxNiIgY2xhc3M9\nImVkZ2UiPgo8dGl0bGU+NDU4MDE0MTAwOCYjNDU7Jmd0OzcxODU3ODc3OTI8L3RpdGxlPgo8cGF0\naCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMTIzLjYyLC0yNDYuNDFDMTM3LC0yMzcu\nMTQgMTUxLjgxLC0yMjYuODcgMTY1LjIsLTIxNy42Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBz\ndHJva2U9ImJsYWNrIiBwb2ludHM9IjE2Ny4xOCwtMjIwLjQ4IDE3My40MSwtMjExLjkxIDE2My4x\nOSwtMjE0LjczIDE2Ny4xOCwtMjIwLjQ4Ii8+CjwvZz4KPCEtLSA3MTg1Nzc4NDMyIC0tPgo8ZyBp\nZD0ibm9kZTgiIGNsYXNzPSJub2RlIj4KPHRpdGxlPjcxODU3Nzg0MzI8L3RpdGxlPgo8cG9seWdv\nbiBmaWxsPSJsaWdodGdyZXkiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjk0LC00ODMgMTUyLC00\nODMgMTUyLC00MjQgMjk0LC00MjQgMjk0LC00ODMiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2\nZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjIzIiB5PSItNDY5LjUiIGZvbnQtZmFtaWx5PSJt\nb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPk11bEJhY2t3YXJkMDwvdGV4dD4KPHRleHQgeG1s\nOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjIzIiB5PSItNDU2Ljc1\nIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1OyYjNDU7JiM0\nNTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7\nJiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFj\nZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIyMyIgeT0iLTQ0NCIgZm9udC1m\nYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+b3RoZXI6IFtzYXZlZCB0ZW5zb3Jd\nPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4\nPSIyMjMiIHk9Ii00MzEuMjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAu\nMDAiPnNlbGYgOiBbc2F2ZWQgdGVuc29yXTwvdGV4dD4KPC9nPgo8IS0tIDcxODU3Nzg0MzImIzQ1\nOyZndDs0NTgwMTQxMDA4IC0tPgo8ZyBpZD0iZWRnZTYiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcx\nODU3Nzg0MzImIzQ1OyZndDs0NTgwMTQxMDA4PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ry\nb2tlPSJibGFjayIgZD0iTTE1MS43MywtNDQ0LjIyQzExNi4xLC00MzYuMDggNzYsLTQxOS45NCA1\nNCwtMzg4IDM5LjM3LC0zNjYuNzUgNDYuODMsLTMzOC41IDU3LjcyLC0zMTUuODUiLz4KPHBvbHln\nb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNjAuNywtMzE3LjcyIDYyLjIs\nLTMwNy4yMyA1NC40OCwtMzE0LjQ5IDYwLjcsLTMxNy43MiIvPgo8L2c+CjwhLS0gNDc3MTg4ODg0\nOCAtLT4KPGcgaWQ9Im5vZGU5IiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT40NzcxODg4ODQ4PC90aXRs\nZT4KPHBvbHlnb24gZmlsbD0ib3JhbmdlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjExNywtMzgx\nLjYyIDYzLC0zODEuNjIgNjMsLTM0OC4xMiAxMTcsLTM0OC4xMiAxMTcsLTM4MS42MiIvPgo8dGV4\ndCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI5MCIgeT0iLTM2\nOC4xMiIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+b3RoZXI8L3Rl\neHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijkw\nIiB5PSItMzU1LjM4IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4g\nKCk8L3RleHQ+CjwvZz4KPCEtLSA3MTg1Nzc4NDMyJiM0NTsmZ3Q7NDc3MTg4ODg0OCAtLT4KPGcg\naWQ9ImVkZ2U3IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1Nzc4NDMyJiM0NTsmZ3Q7NDc3MTg4\nODg0ODwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xNzguNzEs\nLTQyMy42NkMxNTcuNCwtNDA5Ljc4IDEzMi42NiwtMzkzLjY2IDExNC43MiwtMzgxLjk4Ii8+Cjwv\nZz4KPCEtLSA3MTg1OTg5ODcyIC0tPgo8ZyBpZD0ibm9kZTEwIiBjbGFzcz0ibm9kZSI+Cjx0aXRs\nZT43MTg1OTg5ODcyPC90aXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRibHVlIiBzdHJva2U9ImJs\nYWNrIiBwb2ludHM9IjI5NSwtMzgxLjYyIDI0MSwtMzgxLjYyIDI0MSwtMzQ4LjEyIDI5NSwtMzQ4\nLjEyIDI5NSwtMzgxLjYyIi8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9y\nPSJtaWRkbGUiIHg9IjI2OCIgeT0iLTM2OC4xMiIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9u\ndC1zaXplPSIxMC4wMCI+eDwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1h\nbmNob3I9Im1pZGRsZSIgeD0iMjY4IiB5PSItMzU1LjM4IiBmb250LWZhbWlseT0ibW9ub3NwYWNl\nIiBmb250LXNpemU9IjEwLjAwIj4gKCk8L3RleHQ+CjwvZz4KPCEtLSA3MTg1Nzc4NDMyJiM0NTsm\nZ3Q7NzE4NTk4OTg3MiAtLT4KPGcgaWQ9ImVkZ2U4IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1\nNzc4NDMyJiM0NTsmZ3Q7NzE4NTk4OTg3MjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9r\nZT0iYmxhY2siIGQ9Ik0yMzcuOTgsLTQyMy42NkMyNDUuMjUsLTQwOS42OCAyNTMuNjksLTM5My40\nMyAyNTkuNzYsLTM4MS43MyIvPgo8L2c+CjwhLS0gNzE4NTc3NzY2NCAtLT4KPGcgaWQ9Im5vZGUx\nMyIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NzE4NTc3NzY2NDwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9\nImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMjMsLTM4OCAxMzUsLTM4OCAxMzUs\nLTM0MS43NSAyMjMsLTM0MS43NSAyMjMsLTM4OCIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZl\nIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxNzkiIHk9Ii0zNzQuNSIgZm9udC1mYW1pbHk9Im1v\nbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+QWRkQmFja3dhcmQwPC90ZXh0Pgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxNzkiIHk9Ii0zNjEuNzUi\nIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiYjNDU7JiM0NTsmIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OzwvdGV4dD4KPHRl\neHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTc5IiB5PSIt\nMzQ5IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5hbHBoYTogMTwv\ndGV4dD4KPC9nPgo8IS0tIDcxODU3Nzg0MzImIzQ1OyZndDs3MTg1Nzc3NjY0IC0tPgo8ZyBpZD0i\nZWRnZTE0IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1Nzc4NDMyJiM0NTsmZ3Q7NzE4NTc3NzY2\nNDwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yMDguMzUsLTQy\nMy42NkMyMDQuMjQsLTQxNS41NiAxOTkuNzQsLTQwNi43IDE5NS41MiwtMzk4LjQiLz4KPHBvbHln\nb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTk4LjcyLC0zOTYuOTcgMTkx\nLjA3LC0zODkuNjQgMTkyLjQ4LC00MDAuMTQgMTk4LjcyLC0zOTYuOTciLz4KPC9nPgo8IS0tIDcx\nODU3ODAwNjQgLS0+CjxnIGlkPSJub2RlMTEiIGNsYXNzPSJub2RlIj4KPHRpdGxlPjcxODU3ODAw\nNjQ8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJsaWdodGdyZXkiIHN0cm9rZT0iYmxhY2siIHBvaW50\ncz0iMzMzLC0yODYuNjIgMjMzLC0yODYuNjIgMjMzLC0yNjUuODggMzMzLC0yNjUuODggMzMzLC0y\nODYuNjIiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIg\neD0iMjgzIiB5PSItMjczLjEyIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEw\nLjAwIj5BY2N1bXVsYXRlR3JhZDwvdGV4dD4KPC9nPgo8IS0tIDcxODU5ODk4NzImIzQ1OyZndDs3\nMTg1NzgwMDY0IC0tPgo8ZyBpZD0iZWRnZTEwIiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1OTg5\nODcyJiM0NTsmZ3Q7NzE4NTc4MDA2NDwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0i\nYmxhY2siIGQ9Ik0yNzAuNzUsLTM0Ny45OUMyNzMuMTgsLTMzMy45NiAyNzYuNzQsLTMxMy40MSAy\nNzkuNCwtMjk4LjA3Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2lu\ndHM9IjI4Mi43OCwtMjk5LjA1IDI4MS4wMywtMjg4LjYgMjc1Ljg4LC0yOTcuODYgMjgyLjc4LC0y\nOTkuMDUiLz4KPC9nPgo8IS0tIDcxODU3ODAwNjQmIzQ1OyZndDs3MTg1Nzc4NDMyIC0tPgo8ZyBp\nZD0iZWRnZTkiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcxODU3ODAwNjQmIzQ1OyZndDs3MTg1Nzc4\nNDMyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI4OC42Niwt\nMjg2Ljk2QzI5OS41LC0zMDYuODggMzIwLjY2LC0zNTMuNDUgMzA0LC0zODggMjk4Ljg1LC0zOTgu\nNjggMjkwLjk5LC00MDguMTMgMjgyLjE0LC00MTYuMjkiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2si\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjc5LjkyLC00MTMuNTggMjc0LjU3LC00MjIuNzIgMjg0\nLjQ1LC00MTguOTEgMjc5LjkyLC00MTMuNTgiLz4KPC9nPgo8IS0tIDcxODU3ODM5NTIgLS0+Cjxn\nIGlkPSJub2RlMTIiIGNsYXNzPSJub2RlIj4KPHRpdGxlPjcxODU3ODM5NTI8L3RpdGxlPgo8cG9s\neWdvbiBmaWxsPSJsaWdodGdyZXkiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzgxLC0yMTAuNzUg\nMjkzLC0yMTAuNzUgMjkzLC0xNjQuNSAzODEsLTE2NC41IDM4MSwtMjEwLjc1Ii8+Cjx0ZXh0IHht\nbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjMzNyIgeT0iLTE5Ny4y\nNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+QWRkQmFja3dhcmQw\nPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4\nPSIzMzciIHk9Ii0xODQuNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4w\nMCI+JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1\nOyYjNDU7PC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlk\nZGxlIiB4PSIzMzciIHk9Ii0xNzEuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6\nZT0iMTAuMDAiPmFscGhhOiAxPC90ZXh0Pgo8L2c+CjwhLS0gNzE4NTc4MDA2NCYjNDU7Jmd0Ozcx\nODU3ODM5NTIgLS0+CjxnIGlkPSJlZGdlMTIiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcxODU3ODAw\nNjQmIzQ1OyZndDs3MTg1NzgzOTUyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJi\nbGFjayIgZD0iTTI4OC45OSwtMjY1LjY1QzI5NS43MiwtMjU0Ljg1IDMwNy4wMSwtMjM2Ljc0IDMx\nNi45NSwtMjIwLjc5Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2lu\ndHM9IjMxOS43OSwtMjIyLjg0IDMyMi4xMSwtMjEyLjUxIDMxMy44NSwtMjE5LjE0IDMxOS43OSwt\nMjIyLjg0Ii8+CjwvZz4KPCEtLSA3MTg1NzgzOTUyJiM0NTsmZ3Q7NzE4NTc3ODQzMiAtLT4KPGcg\naWQ9ImVkZ2UxMSIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzE4NTc4Mzk1MiYjNDU7Jmd0OzcxODU3\nNzg0MzI8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzQyLjA1\nLC0yMTEuMTVDMzQ5LjYxLC0yNTAuOTIgMzU5LjIsLTMzNC40MiAzMjEsLTM4OCAzMTMuMDIsLTM5\nOS4xOSAzMDIuNDQsLTQwOC45NiAyOTEuMTksLTQxNy4yOCIvPgo8cG9seWdvbiBmaWxsPSJibGFj\nayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyODkuNSwtNDE0LjE5IDI4My4zLC00MjIuNzggMjkz\nLjUsLTQxOS45NCAyODkuNSwtNDE0LjE5Ii8+CjwvZz4KPCEtLSA3MTg1Nzc3NjY0JiM0NTsmZ3Q7\nNDU4MDE0MTAwOCAtLT4KPGcgaWQ9ImVkZ2UxMyIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzE4NTc3\nNzY2NCYjNDU7Jmd0OzQ1ODAxNDEwMDg8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9\nImJsYWNrIiBkPSJNMTUzLjc3LC0zNDEuMzRDMTQ0LjI5LC0zMzIuODggMTMzLjI2LC0zMjMuMDIg\nMTIyLjczLC0zMTMuNjIiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBv\naW50cz0iMTI1LjM1LC0zMTEuMjcgMTE1LjU2LC0zMDcuMjIgMTIwLjY4LC0zMTYuNDkgMTI1LjM1\nLC0zMTEuMjciLz4KPC9nPgo8IS0tIDcxODU3ODc3OTImIzQ1OyZndDs0NTgwMTQwNjcyIC0tPgo8\nZyBpZD0iZWRnZTE1IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1Nzg3NzkyJiM0NTsmZ3Q7NDU4\nMDE0MDY3MjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xNzgu\nOTEsLTE2NC4wOUMxNjguMjUsLTE1NS41NCAxNTUuODMsLTE0NS41OCAxNDQsLTEzNi4wOSIvPgo8\ncG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNDYuMjgsLTEzMy40\nMyAxMzYuMjksLTEyOS45MSAxNDEuOSwtMTM4Ljg5IDE0Ni4yOCwtMTMzLjQzIi8+CjwvZz4KPC9n\nPgo8L3N2Zz4K\n"
}
}
],
"source": [
"# We can even do loops\n",
"x = torch.tensor(1.0, requires_grad=True)\n",
"y = x\n",
"for i in range(3):\n",
" y = y*(y+1)\n",
"print(x, x.grad)\n",
"print(y)\n",
"make_dot(\n",
" y, dict(x=x, y=y), \n",
" show_attrs=True, show_saved=True)"
],
"id": "7b6db624"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Let’s do this for a more complex ML example\n",
"\n",
"Below is a simple linear regression error computation for a random model"
],
"id": "e04b81df-a444-4b88-b7b9-061c749503c9"
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/svg+xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh\nRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICJodHRwOi8vd3d3\nLnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8IS0tIEdlbmVyYXRlZCBi\neSBncmFwaHZpeiB2ZXJzaW9uIDE0LjAuMiAoMjAyNTEwMTkuMTcwNSkKIC0tPgo8IS0tIFBhZ2Vz\nOiAxIC0tPgo8c3ZnIHdpZHRoPSIyNzNwdCIgaGVpZ2h0PSI1MzVwdCIKIHZpZXdCb3g9IjAuMDAg\nMC4wMCAyNzMuMDAgNTM1LjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht\nbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGcgaWQ9ImdyYXBoMCIg\nY2xhc3M9ImdyYXBoIiB0cmFuc2Zvcm09InNjYWxlKDEgMSkgcm90YXRlKDApIHRyYW5zbGF0ZSg0\nIDUzMSkiPgo8cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJub25lIiBwb2ludHM9Ii00LDQg\nLTQsLTUzMSAyNjksLTUzMSAyNjksNCAtNCw0Ii8+CjwhLS0gNzI3NzgwMDA2NCAtLT4KPGcgaWQ9\nIm5vZGUxIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43Mjc3ODAwMDY0PC90aXRsZT4KPHBvbHlnb24g\nZmlsbD0iI2NhZmY3MCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxMDksLTMzLjUgMzksLTMzLjUg\nMzksMCAxMDksMCAxMDksLTMzLjUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1h\nbmNob3I9Im1pZGRsZSIgeD0iNzQiIHk9Ii0yMCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9u\ndC1zaXplPSIxMC4wMCI+bXNlX3RyYWluPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZl\nIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI3NCIgeT0iLTcuMjUiIGZvbnQtZmFtaWx5PSJtb25v\nc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiAoKTwvdGV4dD4KPC9nPgo8IS0tIDcyNzU1MDQ5OTIg\nLS0+CjxnIGlkPSJub2RlMiIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NzI3NTUwNDk5MjwvdGl0bGU+\nCjxwb2x5Z29uIGZpbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNDgsLTEy\nOC41IDAsLTEyOC41IDAsLTY5LjUgMTQ4LC02OS41IDE0OCwtMTI4LjUiLz4KPHRleHQgeG1sOnNw\nYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNzQiIHk9Ii0xMTUiIGZvbnQt\nZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPk1lYW5CYWNrd2FyZDA8L3RleHQ+\nCjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijc0IiB5\nPSItMTAyLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OzwvdGV4dD4K\nPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNzQiIHk9\nIi04OS41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5zZWxmX3N5\nbV9udW1lbDogJiMxNjA7JiMxNjA7JiMxNjA7MTAwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InBy\nZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI3NCIgeT0iLTc2Ljc1IiBmb250LWZhbWls\neT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5zZWxmX3N5bV9zaXplczogKDEwMCwpPC90\nZXh0Pgo8L2c+CjwhLS0gNzI3NTUwNDk5MiYjNDU7Jmd0OzcyNzc4MDAwNjQgLS0+CjxnIGlkPSJl\nZGdlOCIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzI3NTUwNDk5MiYjNDU7Jmd0OzcyNzc4MDAwNjQ8\nL3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNzQsLTY5LjAzQzc0\nLC02MS4yNSA3NCwtNTIuODYgNzQsLTQ1LjE3Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJv\na2U9ImJsYWNrIiBwb2ludHM9Ijc3LjUsLTQ1LjM2IDc0LC0zNS4zNiA3MC41LC00NS4zNiA3Ny41\nLC00NS4zNiIvPgo8L2c+CjwhLS0gNzE4NTYyODYwOCAtLT4KPGcgaWQ9Im5vZGUzIiBjbGFzcz0i\nbm9kZSI+Cjx0aXRsZT43MTg1NjI4NjA4PC90aXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5\nIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjIxMywtMjIzLjUgNTMsLTIyMy41IDUzLC0xNjQuNSAy\nMTMsLTE2NC41IDIxMywtMjIzLjUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1h\nbmNob3I9Im1pZGRsZSIgeD0iMTMzIiB5PSItMjEwIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBm\nb250LXNpemU9IjEwLjAwIj5Qb3dCYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJl\nc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEzMyIgeT0iLTE5Ny4yNSIgZm9udC1mYW1p\nbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7PC90ZXh0Pgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMzMiIHk9Ii0xODQuNSIg\nZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ZXhwb25lbnQ6ICYjMTYw\nOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYj\nMTYwOyYjMTYwOyYjMTYwOzI8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQt\nYW5jaG9yPSJtaWRkbGUiIHg9IjEzMyIgeT0iLTE3MS43NSIgZm9udC1mYW1pbHk9Im1vbm9zcGFj\nZSIgZm9udC1zaXplPSIxMC4wMCI+c2VsZiAmIzE2MDsmIzE2MDsmIzE2MDs6IFtzYXZlZCB0ZW5z\nb3JdPC90ZXh0Pgo8L2c+CjwhLS0gNzE4NTYyODYwOCYjNDU7Jmd0OzcyNzU1MDQ5OTIgLS0+Cjxn\nIGlkPSJlZGdlMSIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzE4NTYyODYwOCYjNDU7Jmd0OzcyNzU1\nMDQ5OTI8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMTE0LjY2\nLC0xNjQuMDhDMTA5LjQ5LC0xNTUuOTUgMTAzLjgsLTE0Ni45NyA5OC4zNSwtMTM4LjM4Ii8+Cjxw\nb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjEwMS40NiwtMTM2Ljc1\nIDkzLjE0LC0xMzAuMTggOTUuNTUsLTE0MC41IDEwMS40NiwtMTM2Ljc1Ii8+CjwvZz4KPCEtLSA3\nMjc3ODAwMjI0IC0tPgo8ZyBpZD0ibm9kZTQiIGNsYXNzPSJub2RlIj4KPHRpdGxlPjcyNzc4MDAy\nMjQ8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJvcmFuZ2UiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0i\nMjIwLC0xMTUuNzUgMTY2LC0xMTUuNzUgMTY2LC04Mi4yNSAyMjAsLTgyLjI1IDIyMCwtMTE1Ljc1\nIi8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE5\nMyIgeT0iLTEwMi4yNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+\nc2VsZjwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRs\nZSIgeD0iMTkzIiB5PSItODkuNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIx\nMC4wMCI+ICgxMDApPC90ZXh0Pgo8L2c+CjwhLS0gNzE4NTYyODYwOCYjNDU7Jmd0OzcyNzc4MDAy\nMjQgLS0+CjxnIGlkPSJlZGdlMiIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzE4NTYyODYwOCYjNDU7\nJmd0OzcyNzc4MDAyMjQ8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBk\nPSJNMTUxLjY2LC0xNjQuMDhDMTYxLjg0LC0xNDguMyAxNzQuMDcsLTEyOS4zNSAxODIuNTcsLTEx\nNi4xNyIvPgo8L2c+CjwhLS0gNzE2MjQ2Mzc2MCAtLT4KPGcgaWQ9Im5vZGU1IiBjbGFzcz0ibm9k\nZSI+Cjx0aXRsZT43MTYyNDYzNzYwPC90aXRsZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBz\ndHJva2U9ImJsYWNrIiBwb2ludHM9IjE3NywtMzA1Ljc1IDg5LC0zMDUuNzUgODksLTI1OS41IDE3\nNywtMjU5LjUgMTc3LC0zMDUuNzUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1h\nbmNob3I9Im1pZGRsZSIgeD0iMTMzIiB5PSItMjkyLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNl\nIiBmb250LXNpemU9IjEwLjAwIj5TdWJCYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0i\ncHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEzMyIgeT0iLTI3OS41IiBmb250LWZh\nbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1OyYjNDU7JiM0NTsmIzQ1OyYj\nNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTs8L3RleHQ+Cjx0ZXh0IHhtbDpz\ncGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEzMyIgeT0iLTI2Ni43NSIg\nZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+YWxwaGE6IDE8L3RleHQ+\nCjwvZz4KPCEtLSA3MTYyNDYzNzYwJiM0NTsmZ3Q7NzE4NTYyODYwOCAtLT4KPGcgaWQ9ImVkZ2Uz\nIiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTYyNDYzNzYwJiM0NTsmZ3Q7NzE4NTYyODYwODwvdGl0\nbGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xMzMsLTI1OS4zMkMxMzMs\nLTI1MS45NiAxMzMsLTI0My41MyAxMzMsLTIzNS4yNSIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIg\nc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxMzYuNSwtMjM1LjI5IDEzMywtMjI1LjI5IDEyOS41LC0y\nMzUuMjkgMTM2LjUsLTIzNS4yOSIvPgo8L2c+CjwhLS0gNzE4NTYyNzA3MiAtLT4KPGcgaWQ9Im5v\nZGU2IiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43MTg1NjI3MDcyPC90aXRsZT4KPHBvbHlnb24gZmls\nbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjI0OSwtNDAwLjc1IDExMywtNDAw\nLjc1IDExMywtMzQxLjc1IDI0OSwtMzQxLjc1IDI0OSwtNDAwLjc1Ii8+Cjx0ZXh0IHhtbDpzcGFj\nZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE4MSIgeT0iLTM4Ny4yNSIgZm9u\ndC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+TXZCYWNrd2FyZDA8L3RleHQ+\nCjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE4MSIg\neT0iLTM3NC41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7PC90ZXh0Pgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxODEiIHk9Ii0zNjEuNzUi\nIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPnNlbGY6IFtzYXZlZCB0\nZW5zb3JdPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlk\nZGxlIiB4PSIxODEiIHk9Ii0zNDkiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0i\nMTAuMDAiPnZlYyA6ICYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOyYj\nMTYwOyYjMTYwOyYjMTYwO05vbmU8L3RleHQ+CjwvZz4KPCEtLSA3MTg1NjI3MDcyJiM0NTsmZ3Q7\nNzE2MjQ2Mzc2MCAtLT4KPGcgaWQ9ImVkZ2U0IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1NjI3\nMDcyJiM0NTsmZ3Q7NzE2MjQ2Mzc2MDwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0i\nYmxhY2siIGQ9Ik0xNjUuMDIsLTM0MS40MUMxNjAuNDgsLTMzMy4yMiAxNTUuNTEsLTMyNC4yNSAx\nNTAuODcsLTMxNS44NyIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9p\nbnRzPSIxNTQuMDYsLTMxNC40MiAxNDYuMTYsLTMwNy4zNyAxNDcuOTQsLTMxNy44MSAxNTQuMDYs\nLTMxNC40MiIvPgo8L2c+CjwhLS0gNzE4NTk5MjUxMiAtLT4KPGcgaWQ9Im5vZGU3IiBjbGFzcz0i\nbm9kZSI+Cjx0aXRsZT43MTg1OTkyNTEyPC90aXRsZT4KPHBvbHlnb24gZmlsbD0ib3JhbmdlIiBz\ndHJva2U9ImJsYWNrIiBwb2ludHM9IjI2NSwtMjk5LjM4IDE5NSwtMjk5LjM4IDE5NSwtMjY1Ljg4\nIDI2NSwtMjY1Ljg4IDI2NSwtMjk5LjM4Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRl\neHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIzMCIgeT0iLTI4NS44OCIgZm9udC1mYW1pbHk9Im1vbm9z\ncGFjZSIgZm9udC1zaXplPSIxMC4wMCI+c2VsZjwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVz\nZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjMwIiB5PSItMjczLjEyIiBmb250LWZhbWls\neT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4gKDEwMCwgNSk8L3RleHQ+CjwvZz4KPCEt\nLSA3MTg1NjI3MDcyJiM0NTsmZ3Q7NzE4NTk5MjUxMiAtLT4KPGcgaWQ9ImVkZ2U1IiBjbGFzcz0i\nZWRnZSI+Cjx0aXRsZT43MTg1NjI3MDcyJiM0NTsmZ3Q7NzE4NTk5MjUxMjwvdGl0bGU+CjxwYXRo\nIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xOTcuMzIsLTM0MS40MUMyMDUuMjIsLTMy\nNy40MyAyMTQuNDEsLTMxMS4xOCAyMjEuMDMsLTI5OS40OCIvPgo8L2c+CjwhLS0gNzE4NTYyNTky\nMCAtLT4KPGcgaWQ9Im5vZGU4IiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43MTg1NjI1OTIwPC90aXRs\nZT4KPHBvbHlnb24gZmlsbD0ibGlnaHRncmV5IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjIzMSwt\nNDU3LjUgMTMxLC00NTcuNSAxMzEsLTQzNi43NSAyMzEsLTQzNi43NSAyMzEsLTQ1Ny41Ii8+Cjx0\nZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE4MSIgeT0i\nLTQ0NCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+QWNjdW11bGF0\nZUdyYWQ8L3RleHQ+CjwvZz4KPCEtLSA3MTg1NjI1OTIwJiM0NTsmZ3Q7NzE4NTYyNzA3MiAtLT4K\nPGcgaWQ9ImVkZ2U2IiBjbGFzcz0iZWRnZSI+Cjx0aXRsZT43MTg1NjI1OTIwJiM0NTsmZ3Q7NzE4\nNTYyNzA3MjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xODEs\nLTQzNi40N0MxODEsLTQzMC4xNCAxODEsLTQyMS40MSAxODEsLTQxMi40MSIvPgo8cG9seWdvbiBm\naWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxODQuNSwtNDEyLjU2IDE4MSwtNDAy\nLjU2IDE3Ny41LC00MTIuNTYgMTg0LjUsLTQxMi41NiIvPgo8L2c+CjwhLS0gNzE4NjA5MTYxNiAt\nLT4KPGcgaWQ9Im5vZGU5IiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43MTg2MDkxNjE2PC90aXRsZT4K\nPHBvbHlnb24gZmlsbD0ibGlnaHRibHVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjIwOCwtNTI3\nIDE1NCwtNTI3IDE1NCwtNDkzLjUgMjA4LC00OTMuNSAyMDgsLTUyNyIvPgo8dGV4dCB4bWw6c3Bh\nY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxODEiIHk9Ii01MTMuNSIgZm9u\ndC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+dGhldGE8L3RleHQ+Cjx0ZXh0\nIHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE4MSIgeT0iLTUw\nMC43NSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ICg1KTwvdGV4\ndD4KPC9nPgo8IS0tIDcxODYwOTE2MTYmIzQ1OyZndDs3MTg1NjI1OTIwIC0tPgo8ZyBpZD0iZWRn\nZTciIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcxODYwOTE2MTYmIzQ1OyZndDs3MTg1NjI1OTIwPC90\naXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTE4MSwtNDkzLjE5QzE4\nMSwtNDg1Ljg1IDE4MSwtNDc3LjA3IDE4MSwtNDY5LjIxIi8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNr\nIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE4NC41LC00NjkuNDggMTgxLC00NTkuNDggMTc3LjUs\nLTQ2OS40OCAxODQuNSwtNDY5LjQ4Ii8+CjwvZz4KPC9nPgo8L3N2Zz4K\n"
}
}
],
"source": [
"# Data\n",
"# A simple tensor example\n",
"rng = torch.manual_seed(42)\n",
"X_train = torch.randn(100, 5) #.requires_grad_(True)\n",
"y_train = torch.mean(X_train, axis=1) \n",
"\n",
"# Model\n",
"theta = torch.randn(5).requires_grad_(True)\n",
"y_pred = torch.matmul(X_train, theta)\n",
"\n",
"# Error\n",
"mse_train = torch.mean((y_train - y_pred)**2)\n",
"make_dot(\n",
" mse_train, \n",
" dict(X_train=X_train, mse_train=mse_train, theta=theta), \n",
" show_attrs=True, show_saved=True\n",
")"
],
"id": "a0d476fe"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## While only the parameters should “require_grad” in usual ML optimization, you could compute gradients for other inputs (e.g., creating adversarial examples via optimization)"
],
"id": "d0df2655-903f-4f41-9d06-8e13da039f03"
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/svg+xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh\nRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICJodHRwOi8vd3d3\nLnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8IS0tIEdlbmVyYXRlZCBi\neSBncmFwaHZpeiB2ZXJzaW9uIDE0LjAuMiAoMjAyNTEwMTkuMTcwNSkKIC0tPgo8IS0tIFBhZ2Vz\nOiAxIC0tPgo8c3ZnIHdpZHRoPSI0MDRwdCIgaGVpZ2h0PSI0OTFwdCIKIHZpZXdCb3g9IjAuMDAg\nMC4wMCA0MDQuMDAgNDkxLjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHht\nbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGcgaWQ9ImdyYXBoMCIg\nY2xhc3M9ImdyYXBoIiB0cmFuc2Zvcm09InNjYWxlKDEgMSkgcm90YXRlKDApIHRyYW5zbGF0ZSg0\nIDQ4NykiPgo8cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJub25lIiBwb2ludHM9Ii00LDQg\nLTQsLTQ4NyA0MDAsLTQ4NyA0MDAsNCAtNCw0Ii8+CjwhLS0gNzI3NzgwMjg2NCAtLT4KPGcgaWQ9\nIm5vZGUxIiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43Mjc3ODAyODY0PC90aXRsZT4KPHBvbHlnb24g\nZmlsbD0iI2NhZmY3MCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxMDksLTMzLjUgMzksLTMzLjUg\nMzksMCAxMDksMCAxMDksLTMzLjUiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1h\nbmNob3I9Im1pZGRsZSIgeD0iNzQiIHk9Ii0yMCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9u\ndC1zaXplPSIxMC4wMCI+bXNlX3RyYWluPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZl\nIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI3NCIgeT0iLTcuMjUiIGZvbnQtZmFtaWx5PSJtb25v\nc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiAoKTwvdGV4dD4KPC9nPgo8IS0tIDcyNzc0ODg4OTYg\nLS0+CjxnIGlkPSJub2RlMiIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NzI3NzQ4ODg5NjwvdGl0bGU+\nCjxwb2x5Z29uIGZpbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNDgsLTEy\nOC41IDAsLTEyOC41IDAsLTY5LjUgMTQ4LC02OS41IDE0OCwtMTI4LjUiLz4KPHRleHQgeG1sOnNw\nYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNzQiIHk9Ii0xMTUiIGZvbnQt\nZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPk1lYW5CYWNrd2FyZDA8L3RleHQ+\nCjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9Ijc0IiB5\nPSItMTAyLjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj4mIzQ1\nOyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OzwvdGV4dD4K\nPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNzQiIHk9\nIi04OS41IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5zZWxmX3N5\nbV9udW1lbDogJiMxNjA7JiMxNjA7JiMxNjA7MTAwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InBy\nZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI3NCIgeT0iLTc2Ljc1IiBmb250LWZhbWls\neT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5zZWxmX3N5bV9zaXplczogKDEwMCwpPC90\nZXh0Pgo8L2c+CjwhLS0gNzI3NzQ4ODg5NiYjNDU7Jmd0OzcyNzc4MDI4NjQgLS0+CjxnIGlkPSJl\nZGdlMTMiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcyNzc0ODg4OTYmIzQ1OyZndDs3Mjc3ODAyODY0\nPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTc0LC02OS4wM0M3\nNCwtNjEuMjUgNzQsLTUyLjg2IDc0LC00NS4xNyIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ry\nb2tlPSJibGFjayIgcG9pbnRzPSI3Ny41LC00NS4zNiA3NCwtMzUuMzYgNzAuNSwtNDUuMzYgNzcu\nNSwtNDUuMzYiLz4KPC9nPgo8IS0tIDcyNzc0ODg4NDggLS0+CjxnIGlkPSJub2RlMyIgY2xhc3M9\nIm5vZGUiPgo8dGl0bGU+NzI3NzQ4ODg0ODwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9ImxpZ2h0Z3Jl\neSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMTMsLTIyMy41IDUzLC0yMjMuNSA1MywtMTY0LjUg\nMjEzLC0xNjQuNSAyMTMsLTIyMy41Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQt\nYW5jaG9yPSJtaWRkbGUiIHg9IjEzMyIgeT0iLTIxMCIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIg\nZm9udC1zaXplPSIxMC4wMCI+UG93QmFja3dhcmQwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InBy\nZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMzMiIHk9Ii0xOTcuMjUiIGZvbnQtZmFt\naWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0\nNTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7\nJiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OzwvdGV4dD4KPHRleHQgeG1s\nOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTMzIiB5PSItMTg0LjUi\nIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPmV4cG9uZW50OiAmIzE2\nMDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsm\nIzE2MDsmIzE2MDsmIzE2MDsyPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0\nLWFuY2hvcj0ibWlkZGxlIiB4PSIxMzMiIHk9Ii0xNzEuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3Bh\nY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPnNlbGYgJiMxNjA7JiMxNjA7JiMxNjA7OiBbc2F2ZWQgdGVu\nc29yXTwvdGV4dD4KPC9nPgo8IS0tIDcyNzc0ODg4NDgmIzQ1OyZndDs3Mjc3NDg4ODk2IC0tPgo8\nZyBpZD0iZWRnZTEiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcyNzc0ODg4NDgmIzQ1OyZndDs3Mjc3\nNDg4ODk2PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTExNC42\nNiwtMTY0LjA4QzEwOS40OSwtMTU1Ljk1IDEwMy44LC0xNDYuOTcgOTguMzUsLTEzOC4zOCIvPgo8\ncG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxMDEuNDYsLTEzNi43\nNSA5My4xNCwtMTMwLjE4IDk1LjU1LC0xNDAuNSAxMDEuNDYsLTEzNi43NSIvPgo8L2c+CjwhLS0g\nNzI3NzgwMDc4NCAtLT4KPGcgaWQ9Im5vZGU0IiBjbGFzcz0ibm9kZSI+Cjx0aXRsZT43Mjc3ODAw\nNzg0PC90aXRsZT4KPHBvbHlnb24gZmlsbD0ib3JhbmdlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9\nIjIyMCwtMTE1Ljc1IDE2NiwtMTE1Ljc1IDE2NiwtODIuMjUgMjIwLC04Mi4yNSAyMjAsLTExNS43\nNSIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIx\nOTMiIHk9Ii0xMDIuMjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAi\nPnNlbGY8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRk\nbGUiIHg9IjE5MyIgeT0iLTg5LjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0i\nMTAuMDAiPiAoMTAwKTwvdGV4dD4KPC9nPgo8IS0tIDcyNzc0ODg4NDgmIzQ1OyZndDs3Mjc3ODAw\nNzg0IC0tPgo8ZyBpZD0iZWRnZTIiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcyNzc0ODg4NDgmIzQ1\nOyZndDs3Mjc3ODAwNzg0PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIg\nZD0iTTE1MS42NiwtMTY0LjA4QzE2MS44NCwtMTQ4LjMgMTc0LjA3LC0xMjkuMzUgMTgyLjU3LC0x\nMTYuMTciLz4KPC9nPgo8IS0tIDcyNzc0ODk0NzIgLS0+CjxnIGlkPSJub2RlNSIgY2xhc3M9Im5v\nZGUiPgo8dGl0bGU+NzI3NzQ4OTQ3MjwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9ImxpZ2h0Z3JleSIg\nc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNzcsLTMwNS43NSA4OSwtMzA1Ljc1IDg5LC0yNTkuNSAx\nNzcsLTI1OS41IDE3NywtMzA1Ljc1Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQt\nYW5jaG9yPSJtaWRkbGUiIHg9IjEzMyIgeT0iLTI5Mi4yNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFj\nZSIgZm9udC1zaXplPSIxMC4wMCI+U3ViQmFja3dhcmQwPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9\nInByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMzMiIHk9Ii0yNzkuNSIgZm9udC1m\nYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+JiM0NTsmIzQ1OyYjNDU7JiM0NTsm\nIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7PC90ZXh0Pgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMzMiIHk9Ii0yNjYuNzUi\nIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPmFscGhhOiAxPC90ZXh0\nPgo8L2c+CjwhLS0gNzI3NzQ4OTQ3MiYjNDU7Jmd0OzcyNzc0ODg4NDggLS0+CjxnIGlkPSJlZGdl\nMyIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzI3NzQ4OTQ3MiYjNDU7Jmd0OzcyNzc0ODg4NDg8L3Rp\ndGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMTMzLC0yNTkuMzJDMTMz\nLC0yNTEuOTYgMTMzLC0yNDMuNTMgMTMzLC0yMzUuMjUiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2si\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTM2LjUsLTIzNS4yOSAxMzMsLTIyNS4yOSAxMjkuNSwt\nMjM1LjI5IDEzNi41LC0yMzUuMjkiLz4KPC9nPgo8IS0tIDcyNzc0OTM2NDggLS0+CjxnIGlkPSJu\nb2RlNiIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NzI3NzQ5MzY0ODwvdGl0bGU+Cjxwb2x5Z29uIGZp\nbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxOTksLTQyNi4yNSAzOSwtNDI2\nLjI1IDM5LC0zNDEuNzUgMTk5LC0zNDEuNzUgMTk5LC00MjYuMjUiLz4KPHRleHQgeG1sOnNwYWNl\nPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTE5IiB5PSItNDEyLjc1IiBmb250\nLWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEwLjAwIj5NZWFuQmFja3dhcmQxPC90ZXh0\nPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMTki\nIHk9Ii00MDAiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiYjNDU7\nJiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYj\nNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1\nOzwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIg\neD0iMTE5IiB5PSItMzg3LjI1IiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjEw\nLjAwIj5kaW0gJiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7\nJiMxNjA7JiMxNjA7OiAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsoMSwpPC90ZXh0Pgo8dGV4dCB4\nbWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMTkiIHk9Ii0zNzQu\nNSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+a2VlcGRpbSAmIzE2\nMDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDs6ICYjMTYwOyYjMTYwOyYjMTYwO0ZhbHNl\nPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4\nPSIxMTkiIHk9Ii0zNjEuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAu\nMDAiPnNlbGZfc3ltX251bWVsOiAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDs1MDA8L3Rl\neHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEx\nOSIgeT0iLTM0OSIgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+c2Vs\nZl9zeW1fc2l6ZXM6ICgxMDAsIDUpPC90ZXh0Pgo8L2c+CjwhLS0gNzI3NzQ5MzY0OCYjNDU7Jmd0\nOzcyNzc0ODk0NzIgLS0+CjxnIGlkPSJlZGdlNCIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzI3NzQ5\nMzY0OCYjNDU7Jmd0OzcyNzc0ODk0NzI8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9\nImJsYWNrIiBkPSJNMTI0Ljg2LC0zNDEuNDNDMTI1Ljk5LC0zMzMuMzggMTI3LjE3LC0zMjUuMDMg\nMTI4LjI2LC0zMTcuMjciLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBv\naW50cz0iMTMxLjcsLTMxNy45NSAxMjkuNjMsLTMwNy41NiAxMjQuNzcsLTMxNi45NyAxMzEuNywt\nMzE3Ljk1Ii8+CjwvZz4KPCEtLSA3MjQzMjQxNjgwIC0tPgo8ZyBpZD0ibm9kZTciIGNsYXNzPSJu\nb2RlIj4KPHRpdGxlPjcyNDMyNDE2ODA8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJsaWdodGdyZXki\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjc3LC00ODMgMTc3LC00ODMgMTc3LC00NjIuMjUgMjc3\nLC00NjIuMjUgMjc3LC00ODMiLz4KPHRleHQgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgdGV4dC1hbmNo\nb3I9Im1pZGRsZSIgeD0iMjI3IiB5PSItNDY5LjUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZv\nbnQtc2l6ZT0iMTAuMDAiPkFjY3VtdWxhdGVHcmFkPC90ZXh0Pgo8L2c+CjwhLS0gNzI0MzI0MTY4\nMCYjNDU7Jmd0OzcyNzc0OTM2NDggLS0+CjxnIGlkPSJlZGdlNSIgY2xhc3M9ImVkZ2UiPgo8dGl0\nbGU+NzI0MzI0MTY4MCYjNDU7Jmd0OzcyNzc0OTM2NDg8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25l\nIiBzdHJva2U9ImJsYWNrIiBkPSJNMjE1LjAzLC00NjIuMDJDMjA2LjE1LC00NTQuOSAxOTMuMzIs\nLTQ0NC42MSAxNzkuOSwtNDMzLjg1Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJs\nYWNrIiBwb2ludHM9IjE4Mi4yMSwtNDMxLjIxIDE3Mi4yMSwtNDI3LjY4IDE3Ny44MywtNDM2LjY3\nIDE4Mi4yMSwtNDMxLjIxIi8+CjwvZz4KPCEtLSA3Mjc3NDg5MTM2IC0tPgo8ZyBpZD0ibm9kZTki\nIGNsYXNzPSJub2RlIj4KPHRpdGxlPjcyNzc0ODkxMzY8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJs\naWdodGdyZXkiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzkxLC00MTMuNSAyNTUsLTQxMy41IDI1\nNSwtMzU0LjUgMzkxLC0zNTQuNSAzOTEsLTQxMy41Ii8+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2Vy\ndmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjMyMyIgeT0iLTQwMCIgZm9udC1mYW1pbHk9Im1v\nbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+TXZCYWNrd2FyZDA8L3RleHQ+Cjx0ZXh0IHhtbDpz\ncGFjZT0icHJlc2VydmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjMyMyIgeT0iLTM4Ny4yNSIg\nZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+JiM0NTsmIzQ1OyYjNDU7\nJiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OyYj\nNDU7JiM0NTsmIzQ1OyYjNDU7JiM0NTsmIzQ1OzwvdGV4dD4KPHRleHQgeG1sOnNwYWNlPSJwcmVz\nZXJ2ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzIzIiB5PSItMzc0LjUiIGZvbnQtZmFtaWx5\nPSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPnNlbGY6IFtzYXZlZCB0ZW5zb3JdPC90ZXh0\nPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzMjMi\nIHk9Ii0zNjEuNzUiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPnZl\nYyA6IFtzYXZlZCB0ZW5zb3JdPC90ZXh0Pgo8L2c+CjwhLS0gNzI0MzI0MTY4MCYjNDU7Jmd0Ozcy\nNzc0ODkxMzYgLS0+CjxnIGlkPSJlZGdlMTAiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcyNDMyNDE2\nODAmIzQ1OyZndDs3Mjc3NDg5MTM2PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJi\nbGFjayIgZD0iTTIzNy42NCwtNDYyLjAyQzI0OC41MywtNDUyLjIgMjY2LjE0LC00MzYuMzEgMjgy\nLjU0LC00MjEuNTEiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50\ncz0iMjg0Ljc3LC00MjQuMjEgMjg5Ljg1LC00MTQuOTIgMjgwLjA4LC00MTkuMDIgMjg0Ljc3LC00\nMjQuMjEiLz4KPC9nPgo8IS0tIDcxODU4NTk5MjAgLS0+CjxnIGlkPSJub2RlOCIgY2xhc3M9Im5v\nZGUiPgo8dGl0bGU+NzE4NTg1OTkyMDwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9Im9yYW5nZSIgc3Ry\nb2tlPSJibGFjayIgcG9pbnRzPSIyNzAsLTI5OS4zOCAyMDAsLTI5OS4zOCAyMDAsLTI2NS44OCAy\nNzAsLTI2NS44OCAyNzAsLTI5OS4zOCIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0\nLWFuY2hvcj0ibWlkZGxlIiB4PSIyMzUiIHk9Ii0yODUuODgiIGZvbnQtZmFtaWx5PSJtb25vc3Bh\nY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPnNlbGY8L3RleHQ+Cjx0ZXh0IHhtbDpzcGFjZT0icHJlc2Vy\ndmUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIzNSIgeT0iLTI3My4xMiIgZm9udC1mYW1pbHk9\nIm1vbm9zcGFjZSIgZm9udC1zaXplPSIxMC4wMCI+ICgxMDAsIDUpPC90ZXh0Pgo8L2c+CjwhLS0g\nNzE4NTg1OTkyMCYjNDU7Jmd0OzcyNDMyNDE2ODAgLS0+CjxnIGlkPSJlZGdlNiIgY2xhc3M9ImVk\nZ2UiPgo8dGl0bGU+NzE4NTg1OTkyMCYjNDU7Jmd0OzcyNDMyNDE2ODA8L3RpdGxlPgo8cGF0aCBm\naWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMjM0LjMyLC0yOTkuNzFDMjMyLjg3LC0zMzMu\nNjggMjI5LjUxLC00MTIuNzMgMjI3Ljg5LC00NTAuNjMiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2si\nIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjI0LjQxLC00NTAuMTMgMjI3LjQ4LC00NjAuMjcgMjMx\nLjQxLC00NTAuNDMgMjI0LjQxLC00NTAuMTMiLz4KPC9nPgo8IS0tIDcyNzc0ODkxMzYmIzQ1OyZn\ndDs3Mjc3NDg5NDcyIC0tPgo8ZyBpZD0iZWRnZTciIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjcyNzc0\nODkxMzYmIzQ1OyZndDs3Mjc3NDg5NDcyPC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tl\nPSJibGFjayIgZD0iTTI2Ny43OSwtMzU0LjEyQzI0MS45NiwtMzQwLjYyIDIxMS4zNSwtMzI0LjYg\nMTg1LjgzLC0zMTEuMjYiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBv\naW50cz0iMTg3Ljc4LC0zMDguMzMgMTc3LjMsLTMwNi43OSAxODQuNTQsLTMxNC41MyAxODcuNzgs\nLTMwOC4zMyIvPgo8L2c+CjwhLS0gNzI3NzQ4OTEzNiYjNDU7Jmd0OzcxODU4NTk5MjAgLS0+Cjxn\nIGlkPSJlZGdlOCIgY2xhc3M9ImVkZ2UiPgo8dGl0bGU+NzI3NzQ4OTEzNiYjNDU7Jmd0OzcxODU4\nNTk5MjA8L3RpdGxlPgo8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMjk3LjU1\nLC0zNTQuMjZDMjgxLjgxLC0zMzYuNDkgMjYyLjIsLTMxNC4zNCAyNDkuMTgsLTI5OS42MyIvPgo8\nL2c+CjwhLS0gNDUyMzI4ODgxNiAtLT4KPGcgaWQ9Im5vZGUxMCIgY2xhc3M9Im5vZGUiPgo8dGl0\nbGU+NDUyMzI4ODgxNjwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9ImxpZ2h0Ymx1ZSIgc3Ryb2tlPSJi\nbGFjayIgcG9pbnRzPSIzNDYsLTI5OS4zOCAyOTIsLTI5OS4zOCAyOTIsLTI2NS44OCAzNDYsLTI2\nNS44OCAzNDYsLTI5OS4zOCIvPgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hv\ncj0ibWlkZGxlIiB4PSIzMTkiIHk9Ii0yODUuODgiIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZv\nbnQtc2l6ZT0iMTAuMDAiPnRoZXRhPC90ZXh0Pgo8dGV4dCB4bWw6c3BhY2U9InByZXNlcnZlIiB0\nZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzMTkiIHk9Ii0yNzMuMTIiIGZvbnQtZmFtaWx5PSJtb25v\nc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPiAoNSk8L3RleHQ+CjwvZz4KPCEtLSA3Mjc3NDg5MTM2\nJiM0NTsmZ3Q7NDUyMzI4ODgxNiAtLT4KPGcgaWQ9ImVkZ2U5IiBjbGFzcz0iZWRnZSI+Cjx0aXRs\nZT43Mjc3NDg5MTM2JiM0NTsmZ3Q7NDUyMzI4ODgxNjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUi\nIHN0cm9rZT0iYmxhY2siIGQ9Ik0zMjEuODQsLTM1NC4yNkMzMjEuMTMsLTMzNi40OSAzMjAuMjQs\nLTMxNC4zNCAzMTkuNjQsLTI5OS42MyIvPgo8L2c+CjwhLS0gNzI3NzQ4Nzk4NCAtLT4KPGcgaWQ9\nIm5vZGUxMSIgY2xhc3M9Im5vZGUiPgo8dGl0bGU+NzI3NzQ4Nzk4NDwvdGl0bGU+Cjxwb2x5Z29u\nIGZpbGw9ImxpZ2h0Z3JleSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzOTYsLTIwNC4zOCAyOTYs\nLTIwNC4zOCAyOTYsLTE4My42MiAzOTYsLTE4My42MiAzOTYsLTIwNC4zOCIvPgo8dGV4dCB4bWw6\nc3BhY2U9InByZXNlcnZlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNDYiIHk9Ii0xOTAuODgi\nIGZvbnQtZmFtaWx5PSJtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTAuMDAiPkFjY3VtdWxhdGVHcmFk\nPC90ZXh0Pgo8L2c+CjwhLS0gNDUyMzI4ODgxNiYjNDU7Jmd0OzcyNzc0ODc5ODQgLS0+CjxnIGlk\nPSJlZGdlMTIiIGNsYXNzPSJlZGdlIj4KPHRpdGxlPjQ1MjMyODg4MTYmIzQ1OyZndDs3Mjc3NDg3\nOTg0PC90aXRsZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTMyMy45NSwt\nMjY1Ljc0QzMyOC4zMiwtMjUxLjcxIDMzNC43MywtMjMxLjE2IDMzOS41MSwtMjE1LjgyIi8+Cjxw\nb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjM0Mi44NCwtMjE2Ljg5\nIDM0Mi40OCwtMjA2LjMgMzM2LjE2LC0yMTQuODEgMzQyLjg0LC0yMTYuODkiLz4KPC9nPgo8IS0t\nIDcyNzc0ODc5ODQmIzQ1OyZndDs3Mjc3NDg5MTM2IC0tPgo8ZyBpZD0iZWRnZTExIiBjbGFzcz0i\nZWRnZSI+Cjx0aXRsZT43Mjc3NDg3OTg0JiM0NTsmZ3Q7NzI3NzQ4OTEzNjwvdGl0bGU+CjxwYXRo\nIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zNDguNTQsLTIwNC41OEMzNTMuMjgsLTIy\nMy45MSAzNjIuMzQsLTI2OC44NiAzNTUsLTMwNS43NSAzNTIuNDYsLTMxOC41IDM0Ny43OCwtMzMx\nLjc5IDM0Mi43NywtMzQzLjY4Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNr\nIiBwb2ludHM9IjMzOS42LC0zNDIuMiAzMzguNzQsLTM1Mi43NiAzNDYsLTM0NS4wNCAzMzkuNiwt\nMzQyLjIiLz4KPC9nPgo8L2c+Cjwvc3ZnPgo=\n"
}
}
],
"source": [
"# A simple tensor example\n",
"# Data\n",
"rng = torch.manual_seed(42)\n",
"X_train = torch.randn(100, 5).requires_grad_(True)\n",
"y_train = torch.mean(X_train, axis=1) \n",
"\n",
"# Model\n",
"theta = torch.randn(5).requires_grad_(True)\n",
"y_pred = torch.matmul(X_train, theta)\n",
"\n",
"# Error\n",
"mse_train = torch.mean((y_train - y_pred)**2)\n",
"\n",
"make_dot(\n",
" mse_train, \n",
" dict(X_train=X_train, mse_train=mse_train, theta=theta), \n",
" show_attrs=True, show_saved=True\n",
")"
],
"id": "1c9b5de6"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Now we can automatically compute gradients via backward call\n",
"\n",
"### Note that tensor has grad_fn for doing the backwards computation"
],
"id": "503571f2-f458-4875-8cc2-eb471f536e64"
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(5., requires_grad=True) None\n",
"tensor(5.1232, grad_fn=<AddBackward0>)\n",
"tensor(5., requires_grad=True) tensor(1.8510)\n",
"tensor(5.1232, grad_fn=<AddBackward0>)"
]
}
],
"source": [
"x = torch.tensor(5.0, requires_grad=True)\n",
"# A constant input tensor that does not require gradient\n",
"c = torch.tensor(3.0)\n",
"y = c*torch.sin(x) + x + c\n",
"print(x, x.grad)\n",
"print(y)\n",
"\n",
"y.backward()\n",
"print(x, x.grad)\n",
"print(y)"
],
"id": "183f5fc3"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A call to `backward` will free up the **implicit** computation graph (i.e., removed saved tensors)"
],
"id": "42fbe7d2-8be7-4c5b-8377-525b92588be4"
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward."
]
}
],
"source": [
"try:\n",
" y.backward()\n",
" print(x, x.grad)\n",
" print(y)\n",
"except Exception as e:\n",
" print(e)"
],
"id": "2221c2c2"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Gradients accumulate, i.e., sum, from multiple backward calls"
],
"id": "aa865b00-4296-488e-9b02-6079f2170afe"
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(5., requires_grad=True) tensor(30.)\n",
"tensor(75., grad_fn=<MulBackward0>)\n",
"tensor(5., requires_grad=True) tensor(60.)\n",
"tensor(75., grad_fn=<MulBackward0>)"
]
}
],
"source": [
"x = torch.tensor(5.0, requires_grad=True)\n",
"for i in range(2):\n",
" y = 3*x**2\n",
" y.backward()\n",
" print(x, x.grad)\n",
" print(y)"
],
"id": "32782e4f"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Thus, must zero gradients before calling `backward()`"
],
"id": "7579da83-abb7-4844-abf1-457453e724ed"
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(5., requires_grad=True) tensor(0.)\n",
"tensor(5., requires_grad=True) tensor(30.)\n",
"tensor(75., grad_fn=<MulBackward0>)"
]
}
],
"source": [
"# Thus if before calling another gradient iteration, \n",
"# zero the gradients\n",
"x.grad.zero_()\n",
"print(x, x.grad)\n",
"\n",
"# Now that gradient is zero, we can do again\n",
"y = 3*x**2\n",
"y.backward()\n",
"print(x, x.grad)\n",
"print(y)"
],
"id": "bf0df351"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## More complicated gradients example"
],
"id": "0fe62a12-f163-4414-b729-03f391e322fb"
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(11.4877, grad_fn=<MeanBackward0>)\n",
"tensor([0., 1., 2., 3., 4.], requires_grad=True)\n",
"Grad tensor([1.0000, 1.2000, 1.1600, 1.1200, 1.0941])"
]
}
],
"source": [
"x = torch.arange(5, dtype=torch.float32).requires_grad_(True)\n",
"y = torch.mean(torch.log(x**2+1)+5*x)\n",
"y.backward()\n",
"print(y)\n",
"print(x)\n",
"print('Grad', x.grad)"
],
"id": "1ebd383d"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Now let’s optimize a non-convex function (pretty much all DNNs)"
],
"id": "761107bd-7e32-4337-88b3-4048b0d8b3f4"
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6wAAAFVCAYAAADrOWK8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAO\nxAAADsQBlSsOGwAAbkJJREFUeJzt3Xd4HOW5NvB7tmpVVr13q1u2ii33boMNpoZiTCgh4UtOEg45\nSSCQHBIIJSHJIYVA4IQTEopNBxsIxriCsXEvkizJ6t3qvW2f74+VBKYYWZrVzO7ev+vyJXslzTzy\nvprdZ97nfV5BFEURRERERERERAqjkjsAIiIiIiIioi/DhJWIiIiIiIgUiQkrERERERERKRITViIi\nIiIiIlIkJqxERERERESkSExYiYiIiIiISJGYsBIREREREZEiMWElIiIiIiIiRdLIHcD5iKIIu90h\ndxjkQmq1is8xKQLHIikBxyEpAcchKQXHomdTq1UQBOFrv07RCavd7kBPz7DcYZCLqNUqhIT4ob/f\nxIsRyYpjkZSA45CUgOOQlIJj0fMFB/tCo1F/7dexJJiIiIiIiIgUiQkrERERERERKRITViIiIiIi\nIlIkJqxERERERESkSExYiYiIiIiISJGYsBIREREREZEiMWElIiIiIiIiRWLCSkRERERERIrEhJWI\niIiIiIgUiQkrERERERERKRITViIiIhkMv/8nDL//J7nDICIiUjSN3AEQERF5I3tjkdwhEBERKR5n\nWImIiIiIiEiRmLASERERERGRIjFhJSIiIiIiIkViwkpERERERESKxISViIiIiIiIFIkJKxERERER\nESkSE1YiIiIiIiJSJCasREREREREpEhMWImIiIiIiEiRJpWwiqKI22+/Hc8+++yXfv7DDz9ERkYG\nmpqaphQcERERERERea8LTlhtNhvuv/9+7N+//0s/39vbi1/+8pdTDoyIiIiIiMhb2OwO9A1ZcLZz\nCBWNvag+2yd3SIqguZAvrqqqws9//nN0d3fDaDR+6dc8+OCDSE5ORkdHhyQBEhEREREReZJ9hWdx\nuLQNQyNWDJmsGDTZYLbYv/B1t12aieW5MTJEqBwXNMN69OhR5OXlYevWrQgICPjC57dt24bS0lL8\n13/9l2QBEhEREREReYqm9kG8sL0cZfU9aGgfRFe/GWaLHSpBQICvFlEhvkiMcuZar+yuRHe/SeaI\n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\nb9iwAb/97W9hNBqh0+nwwAMP4JprrkFQUJBUpyEiIiIiIiIvIVnCCgB33XUXrFYr7rzzTgiCgHXr\n1uG+++6T8hRERERERETkJSRNWHU6He6//37cf//9Uh6WiIiIiIiIvBA3NSIiIiIiIiJFYsJKRERE\nREREisSElYiIiIiIiBSJCSsREREREREpkqRNl4iIiGhi1PE5codARESkeExYiYiIZOB76U/lDoGI\niEjxWBJMREREREREisSElYiIiIiIiBSJCSsREREREREpEhNWIiIiIiIiUiQmrERERERERKRITFiJ\niIiIiIhIkZiwEhERERERkSIxYSUiIiIiIiJFYsJKREREREREisSElYiIiIiIiBSJCSsREREREREp\nkiCKoih3EF9FFEXY7Q65wyCXEaDRqGCzOQAodhiSV+BYJCXgOCQl4DgkpeBY9HRqtQqCIHzt1yk6\nYSUiIiIiIiLvxZJgIiIiIiIiUiQmrERERERERKRITFiJiIiIiIhIkZiwEhERERERkSIxYSUiIiIi\nIiJFYsJKREREREREisSElYiIiIiIiBSJCSsREREREREpEhNWIiIiIiIiUiQmrERERERERKRITFiJ\niIiIiIhIkZiwEhERERERkSIxYSVFsdvt2LBhA37+85/LHQp5oZMnT+Kmm27CnDlzsGrVKvz+97+H\nyWSSOyzycDabDY8++igWLVqEuXPn4pe//CWGh4flDou8UF9fH+6//34sW7YMBQUFuP3221FVVSV3\nWOTFNm3ahIyMDLnDIJkxYSVF+b//+z8UFhbKHQZ5oaamJtx+++2YNWsW3nzzTTz88MN4//338eij\nj8odGnm4v/zlL9i5cyeeeOIJPPPMMzh8+DAeeeQRucMiL3TvvfeisLAQjz/+OF599VUEBATgtttu\nQ39/v9yhkReqr6/HY489JncYpABMWEkxzpw5g+effx5ZWVlyh0Je6L333kNERAR+/vOfIzk5GUuX\nLsWPf/xjvP3223A4HHKHRx7KbDZj8+bNuPvuu1FQUIC5c+fioYcewtatW9Hd3S13eORF2tvbsXfv\nXvz617/GnDlzkJKSgj/84Q8YHBzE/v375Q6PvIzD4cC9996L2bNnyx0KKQATVlIEq9WKe++9F3fd\ndRciIyPlDoe80Lp16/C73/0OgiCMP6ZSqWAymWCxWGSMjDxZWVkZhoeHMX/+/PHHCgoKIIoiTp06\nJV9g5HV8fX3xzDPPIDs7e/yxseshZ1hpuj377LPQaDT45je/KXcopABMWEkRnnzySYSHh+O6666T\nOxTyUklJScjLyxv/t81mw/PPP4+CggL4+PjIFxh5tLa2NqjVaoSFhY0/ptVqERwcjNbWVhkjI2/j\n7++PFStWQKfTjT/20ksvwWw2Y/HixTJGRt6msrIS//jHP/Doo4+ecxOZvJdG7gDI85WVleHqq6/+\n0s/Nnz8fP/vZz/DKK6/g7bffnt7AyKt83Th88cUXx/8tiiLuv/9+VFRU4JVXXpmmCMkbjYyMnJMg\njNHpdJzZJ1nt378fjz32GL797W8jISFB7nDIS4xV3N15552Ij49HSUmJ3CGRAjBhJZdLSUnBtm3b\nvvRzBoMBt99+O+655x5ERUVNc2TkTb5uHI6xWCz4xS9+gQ8++AB//etfzymPI5Kaj48PrFbrFx63\nWCzw9fWVISIiYPv27fjZz36GtWvX4u6775Y7HPIiTz/9NPz8/HDTTTfJHQopiCCKoih3EOS9jhw5\ngltuueWcN2ZmsxmCIECn0+HkyZMyRkfeZmhoCHfccQdOnTqFJ554AsuWLZM7JPJwp06dwg033ICD\nBw8iJCQEgHOGITc3F08//TRWrFghc4TkbTZv3oxHHnkE1113HR588EGoVFw9RtNn9erV6OjogEbj\nnFOz2+0wm83w9fXFgw8+iCuvvFLmCEkOnGElWeXk5GDHjh3nPParX/0KgYGBvKtL08pms+GHP/wh\nSktL8a9//Qv5+flyh0ReIDMzE76+vjh27BjWrl0LADh+/DhUKhVyc3Nljo68zRtvvIGHHnoI3/ve\n93DXXXfJHQ55oRdffBE2m2383x9//DEefvhhbN26FaGhoTJGRnJiwkqy8vHxQWJi4jmPGQwG+Pn5\nfeFxIld67rnncPjwYTz++OOIi4tDR0fH+OfCwsLY+IFcwsfHBxs2bMBvf/tbGI1G6HQ6PPDAA7jm\nmmsQFBQkd3jkRVpaWvDQQw9h/fr1uPXWW8+5Bvr7+5+zdILIVWJjY8/5d1lZGQDwPaGXY8JKRARg\n27ZtEEURP/rRj77wuc+WaxJJ7a677oLVasWdd94JQRCwbt063HfffXKHRV5m9+7dMJvN2LZt2xfW\n+99zzz24/fbbZYqMiLwd17ASERERERGRInElPRERERERESkSE1YiIiIiIiJSJCasREREREREpEhM\nWImIiIiIiEiRmLASERERERGRIjFhJSIiIiIiIkViwkpERERERESKxISViIiIiIiIFIkJKxERERER\nESkSE1YiIiIiIiJSJCasREREREREpEj/H0INtiwUUKfPAAAAAElFTkSuQmCC\n"
}
}
],
"source": [
"def objective(theta):\n",
" return theta*torch.cos(4*theta) + 2*torch.abs(theta)\n",
"\n",
"theta = torch.linspace(-5, 5, steps=100)\n",
"y = objective(theta)\n",
"theta_true = float(theta[np.argmin(y)])\n",
"plt.figure(figsize=(12,4))\n",
"plt.plot(theta.numpy(), y.numpy())\n",
"plt.plot(theta_true * np.ones(2), plt.ylim())"
],
"id": "9c475036"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Let’s use simple gradient descent on this function"
],
"id": "3ee408a3-40cf-4d04-9350-cf73eb1059ff"
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"# Just a function for visualizing results\n",
"def visualize_results(theta_arr, obj_arr, objective, theta_true=None, vis_arr=None):\n",
" if vis_arr is None:\n",
" vis_arr = np.linspace(np.min(theta_arr), np.max(theta_arr))\n",
" fig = plt.figure(figsize=(12,4))\n",
" plt.plot(\n",
" vis_arr, \n",
" [\n",
" objective(torch.tensor(theta)).numpy() \n",
" for theta in vis_arr\n",
" ], \n",
" label='Objective') \n",
" plt.plot(theta_arr, obj_arr, 'o-', label='Gradient steps')\n",
" if theta_true is not None:\n",
" plt.plot(np.ones(2)*theta_true, plt.ylim(), \n",
" label='True theta')\n",
" plt.plot(np.ones(2)*theta_arr[-1], plt.ylim(), \n",
" label='Final theta')\n",
" plt.legend()\n",
" plt.show()"
],
"id": "1002e193"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Let’s use simple gradient descent on this function"
],
"id": "aa76ca1a-77d3-4e1e-81c7-fed376227de5"
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7kAAAFVCAYAAAAqvigQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAO\nxAAADsQBlSsOGwAAlDZJREFUeJzs3Xd4VGX2wPHvnZlk0nshpBASEkIg1NCbKE2wICIrdte2+hPX\nXcuuumtd17Vh72LHithBFKQjvSYQQnohvffJzNzfH0OCEZCSSabkfJ6HB3Jz596T5GUyZ97znldR\nVVVFCCGEEEIIIYRwAhpbByCEEEIIIYQQQliLJLlCCCGEEEIIIZyGJLlCCCGEEEIIIZyGJLlCCCGE\nEEIIIZyGJLlCCCGEEEIIIZyGJLlCCCGEEEIIIZyGJLlCCCGEEEIIIZyGJLlCCCGEEEIIIZyGztYB\nWJOqqphMZluHIbqYVquRn7OwORmHwh7IOBT2QMahsBcyFp2fVqtBUZRTnudUSa7JZKaqqtHWYYgu\npNVqCAjwpLa2WZ7EhM3IOBT2QMahsAcyDoW9kLHYM/j7e6DTaU95npQrCyGEEEIIIYRwGpLkCiGE\nEEIIIYRwGpLkCiGEEEIIIYRwGpLkCiGEEEIIIYRwGpLkCiGEEEIIIYRwGpLkCiGEEEIIIYRwGpLk\nCiGEEEIIIYRwGpLkCiGEEEIIIYRwGpLkCiGEEEIIIYRwGpLkCiGEEEIIIYRwGpLkCmFnCl9YROEL\ni2wdhhBCCCGEEA5JZ+sAhBAdNezfZ+sQhBBCCCGEcFgykyuEEEIIIYQQwmlIkiuEEEIIIYQQwmlI\nkiuEEEIIIYQQwmlIkiuEEEIIIYQQwmmcVZKrqio33HADixcvbj9WX19P//79j/uzZ8+ek15n7dq1\nzJ49m8GDBzN//nxSUlLOJhwhhBBCCCGEEAI4i+7KRqORRx55hI0bNzJu3Lj24+np6bi4uLB69Wo0\nmmO5s5+f3wmvk5aWxsKFC7nrrruYOHEi7777LjfeeCMrV67E19f3zL8SIYQQQgghhBA93hnN5GZk\nZHD55ZezadMmfHx8jvtcZGQkoaGhBAcHt/9xcXE54bU++OADxowZw3XXXUdsbCyPPvooHh4eLFu2\n7Oy/GiGEEEIIIYQQPdoZJbnbt29n6NChfP3113h7e3f4XHp6OjExMad9rV27djFy5MhjgWg0jBgx\ngl27dp1JSEIIIYQQQgghRLszKldesGDBST+XkZGB0WjkyiuvJCcnh9jYWO666y6GDBlywvNLSkoI\nCQnpcCwkJIRt27adSUjH0Wqll5Yz02qV3/zt3D9rGcv2qyeNQ2G/ZBwKeyDjUNgLGYs9hXJaZ53x\nmtyTycjIwN/fn/vvvx9PT08++eQTrr76ar755hv69u173PnNzc3o9foOx1xdXTEYDGcdg1arISDA\n86wfLxyHr6+HrUPocjKW7V9PGIfC/sk4FPZAxqGwFzIWBVgxyf3pp5/QaDS4ubkBkJSUxP79+/n8\n88/5xz/+cdz5bm5uxyW0BoMBd3f3s47BZDJTW9t81o8X9k+rVfD19aCmphGTSbV1OF2qsrLB1iGI\nk+hJ41DYLxmHwh7IOBT2QsZiz+Dj445Od+qZeqsluR4eHd81URSF2NhYiouLT3h+aGgoZWVlHY6V\nlZURGhraqThMJnOnHi/snWVQm0yq0/+snf3rc2w9ZxwK+/Hq3ncAuG3In48ekXEo7IGMQ2EvZCz2\nDKf3BoZVCtYrKipITk5m3bp17cdMJhNpaWnExsae8DHDhw9nx44d7R+bzWZ27NhBcnKyNUISQggh\nnEpqRRqpFWm2DkMIIYSwe1aZyQ0MDGTIkCE88cQTeHp64ufnx+LFi6muruaKK64ALGtw6+rqCAgI\nQKvVcuWVVzJ//nzeeustzj33XN5//32am5uZM2eONUISQgghhBBCCNEDWa312KJFixg5ciR33nkn\nl156KUVFRXz44YcEBAQAsHz5ciZMmEBRUREAAwcO5LnnnmPp0qVccsklpKen8/bbbx+3NZEQQggh\nhBBCCHG6znom95dffunwsa+vL4899thJz587dy5z587tcGz69OlMnz79bEMQQgghhBBCCCE6kE2k\nhBBCCCGEEEI4DUlyhRBCCCGEEEI4DUlyhRBCCCGEEEI4DUlyhRBCCCGEEEI4DUlyhRBCCCGEEEI4\nDavskyuEEEIIIYQQonupqkqzwURjsxGD0URogAcaRbF1WDYnSa4QQgghhBBC2LHC8gaW/5pDbYOB\nhmYjjS1GGpstf8yq2n7eucPDuWp6fxtGah8kyRVCCCGEEEIIO9VsMPLCF3spr2k+4ef1Llo83HTU\nNhj4ZVchidEBDI8P7uYo7YskuUIIIYQQQghhp75cm0V5TTNRIV7MOycWDzcXPNx0lj96HTqtpc3S\nz9vz+WT1Yd5dfpC+YT74e+ttHLntSOMpIYQQQgghhLBDh/KqWL2rAK1G4c+zBzAoJpCY3j70CvDA\nx8O1PcEFmJocQVJMIA3NRt76LhWzWf2DKzs3SXKFEEIIIYQQws60GEy8s/wgALPH9iEq1PsPz1cU\nSyLs4+FCWl41K7bmdkeYdkmSXCGEEEIIIYSwM1+uz6SsupmIYC8uGBd9Wo/x9XTlhgsSAfh6QzZZ\nR2q7MEL7JUmuEEIIIYQQQtiR9PxqVu8oQKMo3DB7QIey5FNJiglk+shITGaVN79NpanF2IWR2idJ\ncoUQQgghhBDCTrS0mnh3+UFUYNbYPvTp9cdlyidy6eRYIkO8KK1uYsnP6dYP0s5JkiuEEEIIIYQQ\nduKr9VmUVDURHuTJhadZpvx7LjoNt1w0EFedhs0pxWxJLbZukHZOklwhhBBCCCGEsAMZBTX8vD0f\nzdEmUi66s0/Xegd5cvnUOAA+/OkQZdVN1grT7kmSK4QQQgghhBA2Zmi1dFNWgZmjo+gb5tPpa04e\n0psR8cE0tZh487tUTGZz5wN1AJLkCiGEEEIIIYSNfbMxm+LKRsICPbh4QrRVrqkoCteen4C/t57M\nwlp+2NwzthWSJFcIIYQQQgghbCjzSA0/bstDUThapqy12rW93F24cfYAAFZuz8fQarLate2VJLlC\nCCGEEEIIYUOfrDqMqsKMUVHE9va1+vUHRAcQ3cubphYju9LLrH59eyNJrhBCCCGEEELYSGF5A1lH\nanHX67h4Qt8uu8/EwWEAbNhX1GX3sBeS5AohhBBCCCGEjWxOsSSdIxNC0LtYr0z590YnhuKi03Aw\nt4pyJ++0LEmuEEIIIYQQQtiA2ayyJbUEgHGDenXpvTzcXBjRPxiAjfudezZXklwhhBBCCCGEsIGD\neVVU1bUQ7OdGXIT11+L+3sQkS8nypv1FmFW1y+9nK5LkCiGEEEIIIYQNbN5fDMC4QWEoitLl9+vf\nx58gXzcqals4mFvV5fezFUlyhRBCCCGEEKKbNbUY2ZleCsDYLi5VbqNRFCYcnc3d6MQNqCTJFUII\nIYQQQohutiu9DEOrmbgIX0L83LvtvuOSeqEAOw+V0dDc2m337U5nleSqqsoNN9zA4sWL24+1tLTw\nzDPPcO655zJs2DAuv/xydu7c+YfXueSSS+jfv3+HP2+++ebZhCSEEEIIIYQQDmNzSlupcvfM4rYJ\n8nUnMdofo8nc3vTK2ejO9AFGo5FHHnmEjRs3Mm7cuPbjTz31FGvWrOGxxx6jd+/eLFmyhBtvvJFv\nv/2WyMjI465jNpvJysrilVdeYciQIe3HPT09z/JLEUIIIYQQQgj7V1HTTFpuFTqthpEJod1+/wmD\ne5OaU8XGfUWcNyKi2+/f1c5oJjcjI4PLL7+cTZs24ePj037caDSybNky/v73vzN+/Hj69u3LAw88\nQFBQECtWrDjhtfLy8mhubmbo0KEEBwe3//Hw8OjcVySEEEIIIYQQduzX1GJUYHh8EB5uZzzv2GnD\n44PwdNORW1JHXkldt9+/q51Rkrt9+3aGDh3K119/jbe3d/txs9nMyy+/zIQJE9qPKYqCoijU1Z34\nm3b48GF8fHwICgo6y9CFEEIIIYQQwrGoqmqzUuU2LjotYxIt93bGBlRn9LbBggULTnjc1dWV8ePH\ndzi2atUqcnNzjzve5vDhw3h5eXHHHXewa9cugoODueaaa7jkkkvOJKTjaLXSS8uZabXKb/527p+1\njGX71ZPGobA/bc8NMg6FPZBxKOyFI43FzMIaiisb8fV0ZXC/ILQa28Q7eVhvVu8q4NcDJVw+NR4X\nnX1/3yxOb5ulLpkbP3jwIPfddx8zZ85kzJgxJzwnMzOT+vp6pk2bxm233cbGjRv517/+haIozJkz\n56zuq9VqCAiQNb09ga+v85e1y1i2fz1hHAr78/vnBhmHwh7IOBT2whHG4mdrMgCYkhxJcJD3Kc7u\nOgEBnsT09iXrSA2Hi2qZMCTcZrFYm9WT3B07dnDrrbcyYMAAnnzyyZOe9+STT9LU1NRe9pyQkEBB\nQQEffPDBWSe5JpOZ2trms3qscAxarYKvrwc1NY2YTKqtw+lSlZUNtg5BnERPGofC/rQ9N8g4FPZA\nxqGwF44yFluNZtbtLgRgRFyQzV/vjRsUStaRGpZvzCYx0s+msZwOHx93dKcx42zVJPfnn39ubz71\nwgsvoNfrT35jna7Dul6AuLg4fv75507FYDKZO/V4Ye8sg9pkUp3+Z+3sX59j6znjUNifY2NOxqGw\nBzIOhb1wjLG4O72MhqZWIoK9CA/ytHmsowaE8unqw6RkVVBW1UiAj5tN4zm103sDw2qF1xs3buTO\nO+9k5syZvPzyy3+Y4ALMnz+fZ555psOx1NRUYmNjrRWSEEIIIYQQQtiNzSmWJk/jk2zTcOr3vNxd\nGBYXjAps2u88DaiskuQ2NjZy7733MmTIEO6++26qqqooKyujrKyM+vp6AJqbmykrK8NkMgEwdepU\nPvroI5YvX05ubi7vvfce3377Lbfeeqs1QhJCCCGEEEIIu1HXaGBfZgWKAmMSu39v3JOZOCQMgI37\nizCr9lvqfSasUq68detWKioqqKioYNKkSR0+d+WVV/Lggw+yfPly7rvvPlavXk1ERAQ33XQTAIsW\nLaKkpITo6Giee+45xo4da42QhBBCCCGEEMJubDtYismskhQTiK/XH1e9dqfEPgEE+Ogpq24mPa+a\nhD7+tg6p0846yf3ll1/a/z1lyhQOHTr0h+fPnTuXuXPntn+sKAo333wzN99889mGIIQQQgghhBAO\noa1U2VZ7456MRqMwflAY323OYcO+IqdIch1hMyQhhBBCCCGEcFhHyhvILqrDXa9lWFyQrcM5zvjB\nlpLlAzmVNo7EOrpkn1whhBBCCCGEEBabU4oBGJkQgquL1sbRHC/Ez52/XDwQRVFsHYpVSJIrHEqz\nwUhqVgUhPq62DkUIIYQQQohTMqsqv6Zaktxxg8JsHM3JjRpgP82wOkuSXOEwCssbePnLfZRUNRHo\n48aU4eFMGtIbL3cXW4cmhBBCCCHECeWX1FNV14K/t564CF9bh9MjSJIrHMLu9DLe/P4ALQYTrjoN\nFbXNLF2byTcbsxk7MJTzRkQSGeJl6zCFEEIIIYToYF9WBQBJMYFOUw5s7yTJFXbNrKp8tymHbzZm\nAzA6MZS7rkpmy95CftqeR0pWJev3FrF+bxH9I/2YmhzB0LggtBrpqSaEEEIIIWxvf+axJFd0D0ly\nhd1qajHy9vcH2H24HAW49JxYLhgXjbtex5B+QQzqG0BRRQO/7CxkY0oRh/KrOZRfTaCPnr/MGURs\nbykHEUIIIYQQtlPf1ErmkRq0GoXEaMffmsdRyHSXsEslVY3898Od7D5cjrtex53zhzBrTJ/jSjzC\nAj25cno8i/5vPAumxhHi705FbQtvfXsAQ6vJRtELIYQQQghh2ZJHVSEuwhd3vcwvdhdJcoXdScmu\n4LH3dlBY3kBYoAcPXpt8yvIOd72OacmR/OfG0YQHeVJa3cT3v+Z0T8BCCCGEEEKcQHupcqyUKncn\nSXKFXVmzu5DnPt9LY4uRof2C+Nc1yYQGeJz243VaDdfM7A/Aii15FJbVd1WoQgghhBBCnJRZVdmf\nXQnIetzuJkmusBvlNU18siodVYWLxkdz+6VJZ1XWERfhxzlDe2Myq7y/8hBmVe2CaIUQQgghhDi5\nvJI6ahsM+HvrCQ/ytHU4PYokucJufLspB6NJZUxiKHMmxqDpRIv1S8+JxcfTlYyCGjbsPWLFKIUQ\nQgghhDi1tlLlwbGydVB3kyRX2IWiigY27S9CoyhcPLFvp6/n6ebCgvPiAPhiTSY1DYZOX1MIIYQQ\nQojTtT9LSpVtRZJcYRe+3pCNqsLEIWGE+p/+Gtw/MmpACIP6BtDYYuSz1Yetck0hhBBCCCFO5bdb\nBw3oI1sHdTdJcoXN5RbXsT2tFJ1Ww0XjOz+L20ZRFK6e0R9XnYYtB0pIya6w2rWFEEIIIYQ4Gdk6\nyLYkyRU2t2x9FgDnjQjH31tv1WsH+7lz0QRL4vzhykO0yN65QgghhBCii+1rX48bZONIeiZJcoVN\npedXsz+rAr2rlllj+nTJPaaPjCQ82JOy6ma+35zTJfcQQgghhBACLFsHpWQd3R83JsDG0fRMkuQK\nm1FVlS/XZQIwY2Qk3h6uXXIfnVbDtTMTAPhxax4FsneuEEIIIYToInklddQ2thLgo6e3bB1kE5Lk\nCptJya7kcEENnm46ZoyK6tJ79Qv35Zxh4ZjMKh/8KHvnCiGEEEKIrtG2dVBSjGwdZCuS5AqbMP9m\nFnf22OhuWZA/b3IMvp6uZBTWsF72zhVCCCGEEF1Atg6yPUlyhU3sOlRGXkk9fl6unDs8vFvu6eHm\nwuVH985d/muuzOYKIYQQQgirkq2D7IMkuaLbmcxmvtpg6ah80fi+uLpou+3eIweEEOjjRnlNMwdy\nKrvtvkIIIYQQwvmlZlu2DoqP9JOtg2xIklzR7TanFFNU0UiwnxsTBod16701isKkob0BWLdHSpaF\nEEIIIYT17M86th5X2I4kuaJbtRrNfLsxG4A5E2PQabt/CE5ICkOjKOw5XE5NfUu3318IIYQQQjgf\n2TrIfkiSK7rVuj2FVNS2EB7syegBoTaJwd9bz5B+gZjMKhv3F9kkBiGEEEII4Vxk6yD7IUmu6Dat\nRhPf/5oLwNyJMWg0tmupPvloyfKGvUXSgEoIIYQQQnRa29ZBg2XrIJuTJFd0mz0ZFdQ2GIgI9mJo\nXJBNYxnUN5AAHz2l1U2k5VbZNBYhhBBCCOH49sl6XLshSa7oNpuOlgZPHBJm83e3NBqFSYOlAZUQ\nQgghhOi8+qZWso7UotUoJMjWQTZ3VkmuqqrccMMNLF68uMPxN998k4kTJzJs2DDuuOMOKiv/eIuW\ntWvXMnv2bAYPHsz8+fNJSUk5m3CEA6iubyElqxKtRmF0om3W4v7ehMFhKArsSi+jtsFg63CEEEII\nIYSDkq2D7MsZJ7lGo5EHH3yQjRs3djj+ySef8Pbbb/Poo4+yZMkSioqK+Nvf/nbS66SlpbFw4UIu\nu+wyvvrqK+Lj47nxxhupqak5869C2L0tqSWYVZXBsYH4eLjaOhwAAnzcGBIbhMmssilFGlAJIYQQ\nQoizI1sH2ZczSnIzMjK4/PLL2bRpEz4+Ph0+t3jxYm666SamTJlCYmIizz77LFu2bCE1NfWE1/rg\ngw8YM2YM1113HbGxsTz66KN4eHiwbNmys/9qhF1SVbW9VHlCUvfui3sqbXvmrt9zBFUaUAkhhBBC\niDPUYeugWEly7cEZJbnbt29n6NChfP3113h7e7cfLysrIz8/n1GjRrUfi4qKolevXuzateuE19q1\naxcjR448FohGw4gRI056vnBcuSV1FJY34OXuYnf/8ZNiAvD31lNS1cShvGpbhyOEEEIIIRxM29ZB\ngT56egd62DocAZxRwfiCBQtOeLykpASAkJCQDsdDQkIoLi4+6WNOdP62bdvOJKTjaLXSS8vebE6x\njIFxg3qhd+3cGgWtVvnN353/WWu1GiYN6c03G7NZv+8IA+2oxETGsv2y9jgU4ky0PTfIOBT2QMah\nsBe2HItpudUADIoJQqfTduu9e57Ta15rlVXRzc3NAOj1+g7HXV1dMRhO3NCnubn5jM4/HVqthoAA\n2XjZnrQaTWw9YHkTZPbEWKv9fHx9rfcu2UXn9OPbTdnsSCtD66rD10t/6gd1AxnL9s+a41CI0/X7\n5wYZh8IeyDgU9sIWYzG9wNJTaHRSmLx+sxNWSXLbktXfJ6gGgwEPjxMPNDc3txOe7+7uftZxmExm\namubz/rxwvp2pJVS19hKZIgXfu46KisbOnU9rVbB19eDmppGTCbrrKHVYdm0e29mBT9syGTm6D5W\nuW5ndfZ7JbpOV4xDIU5X23ODjENhD2QcCnthq7FoaDWRenQ9blSQh7x+62I+Pu7odKeeqbdKktur\nVy8ASktL2/8NlrW6vy9JbhMaGkpZWVmHY2VlZYSGdm57GZPJ3KnHC+vasNeyB+34Qb2s9LOxDGqT\nSbXqz3rSkN7szaxg7e5Cpo6IsPk+viBj2b51zTgU4nQcG3MyDoU9kHEo7IVtxmJaXhWtJjNRoV54\n6HXy/6DLnd4bGFYpWA8ODiYyMpKdO3e2H8vPz6eoqIjk5OQTPmb48OHs2LGj/WOz2cyOHTtOer5w\nPDUNBvZlVqBRFEYP7HXqB9jQ4H6B+Hq5UlTRyOEC2cZKCCGEEEKc2oGcSgAGRgfYOBLxW1ZblX3N\nNdfw6quvsmrVKg4cOMA999zDhAkT6N+/P2BZg1tWVobJZALgyiuvZMOGDbz11ltkZmby8MMP09zc\nzJw5c6wVkrCxranF7Xvj+nrax964J6PVaJg42LK90bo9hTaORgghhBBCOIIDOVUAJEqSa1esluRe\nffXVXHPNNTz44INcddVVhISE8PTTT7d/fvny5UyYMIGiIst+qQMHDuS5555j6dKlXHLJJaSnp/P2\n22932JpIOC5VVdl4dG/c8Un2PYvbZuLg3ijA9rQy6ptabR2OEEIIIYSwY/VNreQV16HTaoiL8LV1\nOOI3znpN7i+//NLhY0VRWLhwIQsXLjzh+XPnzmXu3Lkdjk2fPp3p06efbQjCjuWV1FNQ1oCnm47B\nsUG2Due0BPu5M7BvACnZlfyaUsy0kZG2DkkIIYQQ4qSaWozkFtcREeKFl7uLrcPpcQ7mVqECcRG+\nuLrI1kH2xCqNp4T4vU0pllncMYm9cDmNDmj2YvLQ3qRkV7J+3xFJcoUQQghhtw7kVPLO8oNU1rag\n1Sj0j/JjRHwww+KD8bOT7RCdXdt63MRofxtHIn5PklxhdUaTmS2plr1xxw92jFLlNkP6BeHl7kJh\nWQOF5Q2EB8leZ0IIIYSwHy0GE1+szeCXXZYeIgE+eqrrDBzIqeJAThUf/ZRObLgvw+ODGd4/mBC/\ns9+eU/yx1Oy2JFfW49obSXKF1e3LrKC+qZXwIE/6hDrWGmudVsOwuCA27CtiZ1op4RP62jokIYQQ\nQggADhdUs/j7g5RWN6HVKFw0oS+zxkTR1GJib0Y5Ow+VkZpTSUZhDRmFNXy+JoPIEC+umBpH/yiZ\nbbSm0uomymua8XTTOdzr3Z5AklxhdZvaG06F2cV+s2cqOSGEDfuK2HGolIskyRVCCCGEjbUaTXy1\nIZuVW/NQgYhgL268YABRR5MrL3cN45PCGJ8URrPBSEpWJTvTy9ibUU5+aT0vfbmfB69LJsTfw7Zf\niBNpK1VO6OOPRuN4r3ednSS5wqpqGy174yoKjBkYautwzsqAPv546HUUlDVQVNFAWKCULAshhBDC\nNrKLaln8w0GOlDegKDB7TB8uGt/3pD1P3Fx1JCeEkJwQQqvRzGtfp7Ano5yXl+3ngauT0btKgyRr\naNs6SPbHtU+O0xFIOIStqSWYzCpJMYEO2/SgrWQZYOehMhtHI4QQQoie6pddBTz+wU6OlDfQK8CD\n+68ewaWTY0+7qaeLTsONFyQSGuBBQVkD7644iKqqXRy18zObVQ5K0ym7JkmusKq2rsrjk8JsHEnn\njEgIAWDHoVIbRyKEEEKInqigrJ5PVh3GrKpMS47k4etHEtv7zPdi9XDTcfvcJPSuWrYdLOWn7fld\nEG3PkldaR0OzkSBfN4KlsZddkiRXWE1BaT15JfV46HUM7Rdo63A6ZWB0AG6uWvJK6imtarR1OEII\nIYToQcxmlfdXpGEyq5wzLJwFU+M6tQ9reJAnN8waAMAXazI5mFtlrVB7pLZS5cRof4fsP9MTSJIr\nrGbrQcu2QSMHhOCic+z1Hi46DUOPlizvkJJlIYQQQnSjNbsLyTxSi5+XK/Mmx1rlmskJIcwa0wez\nqvL6NylU1jZb5bo90bH9cWU9rr2SJFdYhaqqbE+zlPaOOlrq6+iS+x8tWU6TkmUhhBBCdI/K2maW\nrssE4Mpp/fFws16f2LmTYhjYN4C6xlZeXrafVqPJatfuKQytJtLzawBLs1JhnyTJFVZhKettwsfD\nhfgoP1uHYxWD+gagd9GSU1xHeXWTrcMRQgghhJNTVZWPfkqnxWBiRHwwI/oHW/X6Go3CLRcNJMjX\njZziOj78KV0aUZ2hw4U1GE1mokK98PZwtXU44iQkyRVW0TaLO6J/CFqNcwwrVxctQ46uLZaSZSGE\nEEJ0tR2HytiTUY67XscV0+K75B5e7i7cPjcJV52GjfuKWLvnSJfcx1m1lSrL1kH2zTmyEWFTllLl\no+txnaRUuU1byfJO6bIshBBCiC7U0NzKkp/TAbjsnFj8vbtuK8aoUG+unZkAwMc/p5NRWNNl93I2\nx5pOSZJrzyTJFZ2WW1JHWXUzvp6uxEf62Tocq0qKCcRVpyHzSK00aBBCCCFEl/liTQa1DQbiI3yZ\nNLR3l99v7KBeTB0Rgcmssvj7A5jM5i6/p6Orb2olr7gOnVZDXMSZb+ckuo8kuaLTth+0zHIm9w9B\no3GuNup6Vy1JsZaS5Z1SsiyEEEKILnAor4r1e4vQaRWuPT8BTTdtSzP/3H6E+LtTUtXEltSSbrmn\nIzuYW4UKxEX4dmpLJ9H1JMkVnfLbrsojBzhXqXKb9i7LUrIshBBCCCtrNZp478dDAFwwNpqwQM9u\nu7dOq+Gi8dEAfLspG6NJZnP/yLGtg6Srsr2TJFd0SnZRHeU1zfh6udLPScs2BscGotNqyCiooaqu\nxdbhCCGEEMKJfLc5h5LKRnoHeTJrbJ9uv//oxFBCAzwoq27m15Tibr+/I0nNlv1xHYUkuaJT2htO\n9Q/pttKa7uau15EUE4AK7EqXkmUhhBBCWEdBaT0rtuShANfNTECn7f6X5lrNsdnc7zbnyGzuSZRW\nN1Fe04ynm44+od62DkecgiS54qz1hFLlNskJ0mVZCCGEENajqirvr0zDZFY5Z3i4TSviRg8IJSzQ\ng/KaZjbLbO4JtZUqJ/Txd7oeNM5Iklxx1rKO1FJZ24K/t57YcOcsVW4zJDYInVbhUH41NQ0GW4cj\nhBBCCAd3ILeKzMJafDxcmDc51qaxaDQKF7bN5m6S2dwTads6SPbHdQyS5Iqz1jaLm+zEpcptPNx0\nDIwOQFWlZFkIIYQQnbdyax4A5yVH4q7X2TgaGJVgmc2tqG1m4/4iW4djV8xmlYPSdMqhSJIrzor5\nN6XKo5y8VLlNW8nyjjQpWRZCCCHE2SsoqycluxJXFw1ThoXbOhzAMpt78YS+AHy/OYdWo8zmtskr\nraOh2UiQrxvBfu62DkecBklyxVnJLLR0Gg700RPT28fW4XSLoXFBaDUKh/KqqW2UkmUhhBBCnJ2V\n2yyzuBOSwvByd7FxNMckJ4QQHuRJZW0LG/cdsXU4duNYV2V/FCevXnQWkuSKs7L94NFS5YSQHvOf\n3dPNhQHR/phVlT2Hy20djhBCCCEcUHV9C1tSS1CA6SMjbR1OBxpF4aK22dxfc2U296h9mRUAJMUE\n2TgScbokye0mW1KLeeCtLZRUNdo6lE4zqyrbj3YZHpkQauNouldyfylZFkIIIcTZW72zAJNZZXh8\nMCH+HrYO5zgj+gcTEexJVV0L6/fKbG5DcysZhTVoNYqsx3UgkuR2k7ySeooqGtm4z/EX8mcU1FBT\nbyDQx42+YT1rn7BhcUFoFIWDuVXUN7XaOhwhhBBCOJBmg5G1uwsBmDE6ysbRnJhGObY294dfc2g1\nmmwckW2lZleiqhAf6WcXDcLE6ZEkt5sM7GtpN743o8LGkXReW6nyyAE9p1S5jbeHK/2j/DCZVfZm\nSMmyEEIIIU7fxn1FNDQbiQ33oZ8db784LD6YyBAvqusNrNvTs2dzj5UqB9o4EnEmrJbkbt26lf79\n+5/wz8svv3zCx4waNeq4c3/44QdrhWRX4iP90LtoKSirp6Km2dbhnDWzWWXHoZ7VVfn3RvQPBmQr\nISGEEEKcPrNZ5aft+QDMHGWfs7htOs7m5mJo7ZmzuWZVZX+WJckdHCtJriOx2pz7sGHD2LhxY4dj\nH3/8MR9//DGXXnrpceeXlJRQU1PDsmXLCAk5liz5+Dhnp14XnYaBfQPYlV7GvqwKu2kXf6YOF1RT\n02Ag2M+NPqE9q1S5zbC4YD76KZ2U7EqaDUbcXKV0RQghhBB/bFd6GeU1zYT4uTMsLtjW4ZzSsLgg\nokK9yCupZ+2eI3bXJKs75BTVUdfYSpCvG2GB9rd+Wpyc1WZyXV1dCQ4Obv/T3NzMO++8w0MPPURY\nWNhx52dkZODu7k5iYmKHx+n1emuFZHeGHH0HyJHLXLcdPNZwqqeVKrfx99YTG+5Dq9FMSlalrcMR\nQgghhJ1TVZUfj24bNG1kJBqN/b+GUn4zm7t8S8/stLwv0/KaPSk2sMe+7nVUXbYmd9GiRQwePJhZ\ns2ad8POHDx8mOjq6Rw2YtjKHg7lVtDhg2YfJbGZne1flnlmq3GZEvOXr3ykly0IIIYQ4hYzCGrKO\n1OLppmNC0vGTP/ZqaL8gIoK9qG0wsD2txNbhdLv2UmVZj+twuqTOMjs7mxUrVvDRRx+d9JzDhw+j\nqio33HADaWlpREREcNtttzF58uRO3Vurtd9eWgG+7vQN8yG7qJb0/BqGxjnWXluH8qupbWwl1N+d\nvr19bPIGhVar/OZv2/2skweE8PmaDPZmlGNWLeXo1mbPY7mns5dxKHqmtucGGYfCHsg4PD1ta3HP\nHRGBh7uLjaM5M9NGRvLu8oOs3lnIxCH2u9zO2mOxpr6F7KI6XLQaBsYEyusyu3F6+UeXJLlLliwh\nKSmJ5OTkk56TmZlJdXU1d955J6GhoaxYsYJbbrmFDz74gFGjRp3VfbVaDQEBnmcbdrcYkxRGdlEt\nafnVnDu6j63DOSO7fk4HYNLwCAIDvWwai6+vbddFBAR40re3D9lHasmvaCR5gPX3C7b3sSxsPw5F\nz/T75wYZh8IeyDg8uSNl9exKL0On1XDZ1P74+7jZOqQzMmtiDEvXZpBdVEtZXQv9+wTYOqQ/ZK2x\nuOfoLG5SXBBhoc7ZM8iZWT3JNZvNLF++nNtvv/0Pz/vggw8wGAx4eVmSpcTERNLS0vjoo4/OOsk1\nmczU1tp35+L+R9vFb00t4k9TYh2mXLul1cSGPZZ93Yb3C6KyssEmcWi1Cr6+HtTUNGIyqTaJoc3Q\nfkFkH6llzfY8YkKtn/Tb6nssTs2exqHoedqeG2QcCnsg4/DUPv/5EKoK4wb1QjWaHPL3+8QhvVn+\nay5frj7MX+YMsnU4J2Ttsbh5r2XrpMQoP4f8mTkrHx93dKdRQWn1JHf//v1UVlYyderUPzzP1dUV\nV1fXDsfi4uLYsWNHp+5vMtn3oviIEE98PF2prG0ht7iOyBDbzoierh1pJTQbTPQN8yHU392G32fL\noDaZVJv/rIfFBfHV+ix2pZdxdasRrca6ZSy2/vrEH7GfcSh6nmNjTsahsAcyDv9IfVMrG44mS9OS\nIxz2e3TO0N6s2JLLtoMlzJ8Si6+XPTaKtd5YNJnN7D+6P+7AvgEO+3NzTqf3BobVi8t3795NdHR0\nh22Bfs9oNDJ58mQ+/vjjDsdTU1OJjY21dkh2RaMo7Q2o2jq2OYLNKcWA5V1IYREe5Emovzv1Ta0c\nzq+xdThCCCGEsDNrdhVgMJpJigkkPNgxJjZOJMjXnaH9gjCZVdbuOWLrcLpcZmEtjS1GQgM8CPWX\nUnxHZPUk99ChQ8TFxR13vKGhgbIySydanU7H5MmTeeWVV1i3bh3Z2dksWrSIXbt2ceONN1o7JLtz\nbCuhChtHcnqq61tIza5Eq1EYNaBnd1X+LUVRGN7fss/dLumybHVms0pJVSPV9S20Gh2vG7kQQoie\nrdVoYvXOAgBmjnL8PWanjogAYO3uQoxOPrMpXZUdn9XLlcvLywkNPb4JzzvvvMPLL7/MoUOHAHjg\ngQfw9vbmwQcfpLKykgEDBvDuu+86/UwuQGJ0AFqNQuaRGuoaDXh7uJ76QTa0JbUEVYXB/QLtPtbu\nNiI+hBVb8tiZXsaCqXEOs8ba3uWX1vPWdwcoKKtvP+aq0+Dp7oKHmw5PNxc83XT4eumZPjKSXgHy\nLqsQQgj7suNQGbWNrUSGeJHQx9/W4XRaQh9/woM8KSxvYMehUsYkOm91376jpcpt1ZfC8Vg9yX3r\nrbdOeHzhwoUsXLiw/WO9Xs8999zDPffcY+0Q7J67XkdClB+pOVWkZFUy1s5LgI+VKjvOvm7dJTrM\nG39vPVV1LeQU19E3TLrvdYbJbObHrXl8vSEbk1nF002HVqPQ0GzEYDRjqGuhqq6lw2O2HijmlosG\nMjjWsbbkEkII4dzWHy3rPWdYuFO8Ca4oCueOiODDlYdYvbPAaZPcqroW8kvr0btoiY/0s3U44ix1\nyRZC4tQGxwaRmlPF3sxyu05y80rqKCirx9NNJ+9mnYBGURgeH8zqnQXsPFQmSW4nlFQ28vb3B8g8\nUgvAlGHhXDYlFjdXHaqq0tJqoqHJSENzKw3NRhqaWtlyoIRd6WW88MU+5p0Ty8zRUU7xQkIIIYRj\nK65s5FB+Na4uGsYkWn+bQVsZN7AXS9dmkllYS3ZRrVO+7mkrVU6M9sflNLr4CvskPzkbGdLPkjCm\nZFXa9bqGtlnc0Ymh8h/9JEbEW9bl7jxUiqrK9glnyqyqrN5ZwEPvbCPzSC1+Xq78ff4Qrp7RHzdX\ny/twiqLg5qoj0NeNqFBvBvTxJzkhhNsuGcSciX1RgS/WZvLWdwcwtMr6XSGEELbVNos7akAo7nrn\nmVPSu2qZONhS2de23tjZtJUqJ8nkjkOTrMVGQvw96BXgQWOLkcxC++zMazKb2ZIqpcqnEhfpi5e7\nCyVVTRwpl33UzkRlbTOLPtvDkp/TMRjNjBkYymM3jmbQaTZ60CgKF43vy+1zk9C7atlyoIQnPtpF\npZ3vly2EEMJ5GU1mNqUUATB5aG8bR2N9546IQAG2HSyhtsFg63Csymgyk5pTCUjTKUcnSa4Ntc3m\n7s20zy7LqdmV1Da20ivAg75h3rYOx25pNRqGxVnWg+6ULsunbXtaKf9evJUDOVV4ubtw25xB3Hzh\nQDzdXM74WsPjg3ng6hEE+7mRW1LHo+/v4HBBtfWDFkIIIU5h9+Fy6hpbiQj2JMYJy3lD/NwZHBuI\n0aSybq9zbSd0OL+aFoOJiGBPAnzcbB2O6ARJcm2orVHO3gz73C/3t3vjyjrHPzbi6FZCqWn5mKuL\nUFtkRvePZBTU8Oa3qTS1mBjaL4jHbhxNckLntqeKCPbi39eOZEAff2obDDz18W7WO9kvXyGEEPZv\n3Z5CACYN6e20r5/OS3bO7YT2Sqmy03CeRQIOKC7CF3e9lqKKRkqrmwjxc7d1SO0am1vZlW5JvscO\ntN/GWPaiv38rN/msJdGYR8PngKKg7TMct9Hz0fg6T8MJa6hrNPDaNymYzCpTkyNYcJ71tl7ycnfh\n738awme/ZLBqRwHvrUijur6Fi8b3tcr1hRBCiD9SWt3EgZwqXHQau24s2lmJ0QH0CvCguLKR3YfL\nGdnJN6rtheyP6zxkJteGdFoNA/ta/hPts7PZ3B2HyjCazCRE+RHoK+Uaf8RcU4Lh28dI1OWjacvV\nVBVT7m4avnoEc02JTeOzJ2azypvfHaCqroV+4b7Mn9LP6u9yazUarpgaz/WzElAU+GZDNun51Va9\nhxBCCHEiG45WECX3Dzmr5TeOQqMonDfCMpu7eke+jaOxjtLqJooqGnHX64gN97V1OKKTJMm1sSFH\nyyH22dm63M37LQ0TpOHUqTVv/Rxam9Hwu87Kqhlamy2fFwB8vzmH1OxKvNxd+MvFA9Fpu+4paOLg\n3swe2wcVeOu7AzS1GLvsXkIIIYTRZGbjPudtOPV74wb1ws1VS3pBDXkldbYOp9P2H30tPrBvQJe+\nPhHdQ36CNpYUG4gCpOVV0WywjxfhpdVNpBfU4OqiaV9rKk5MbWnAlLvLktCe8AQzppxdtGZswVxX\n3qO3GErNqeSbjdkowM0XJXZLQ4eLxvelTy9vKmqb+fjn9C6/nxBCiJ5rX2YFNQ0GwgI9iItw/plA\nd72OCUmWyZBVTrCdkJQqOxdJcm3Mx8OVmN4+GE0qB3KqbB0OAL8ebTg1Ij7YqfZ26wpqUy2cMnFV\naf7ldRo+uZv6926j4Zv/0LzhPQypqzAWHeoRTaqq6lp489tUVODC8dEM6ts9v0B0Wg03XZCIi07D\nppRidqSVdst9hRBC9Dzrju6N68wNp37v3KMly1sPlFDX6LjbCRlaTRzMtbwOT4oJsHE0whokg7ED\ng/sFkXmkln2Z5QyPt+3MqaqqbE6RUuXTpbj7gKKcMtHV9IpHrS5Cba7DXJKBuSSj43U8/dEERKDx\nj2g/pppaUbSOv57HaDLz+jcp1DW2khjt3+1NoHoHeTJ/Sj+W/JzO+z+mERvui7+3vltjEEII4dwq\nappJyapAp1UY58QNp36vV4AHSTGB7M+qYN2eI1wwLtrWIZ2VtLxqWo1m+vTyxtdLXiM4A0ly7cCQ\n2EC+Wp/F3swKVFW16bt/GYU1lFU34+flyoA+/jaLw1Eoek+0fYZjyt194pJlRYO2zzA8pi8EwNxY\ng7myAHNlAabKAsxVBZgrC1EbqjA1VGHK39/+0Pp3bkHj28uS/B79ow2IQPEOQlEcpwhj2fosDhfU\n4Oflys0XDkSj6f7xfe7wcPZmlJOSXcm7yw/yt/lDesy77EIIIbrehn1HULHs2+7t4WrrcLrVtJER\n7M+qYPWuAmaOjnLI9ax7jjaAlVJl5yFJrh2IDPHC31tPVV0LeSX19OnlbbNY2vbGHTuwl02SEUfk\nNno+DUcOQmtzh0RXRYPi4obb6PntxzQevmg8fCFi4LHzzGbUulJL0ltZANu+PvoJFXP1EczVRyBr\n27Eburih8Q9H2yH5jURx8+rqL/WM7U4v48eteWgUhb9cPAgfT9v84lcUhetnDeDBxVtJya7kl12F\n7V0hhRBCiM4wm1U2tDWcGuL8Dad+b2B0AOFBnhSWN7D9YKnDbZ3UajSz/aBlJ4xkJ9kKSUiSaxcU\nRWFwbCDr9hxhZ3qpzZLcVqOJbQctaxZ7UqlNZ2l8Q/G85CGat35+tAmVillVyNb1ZfAlN59yn1xF\no0Hx7YXGtxf0TQa+BsDrz69jrjpybNa3sgBzZT5qUy3m0kzMpZkdr+Ph12HGVxMQgcavN4rONoll\naXUTb/9wEIBLz4khPtLPJnG08ffWc+3MBF79OoXP12QwoI8/vYM8bRqTEEIIx7c/q4KquhZC/Nzp\n3wOr4BRFYdrISN5bkcZP2/MZMzDUoaql9maU09BsJCrEi8gQ+5swEGdHklw7MSYxlHV7jrB29xFm\nj41G76Lt9hj2ZFTQ1GKkTy9vwoPlP/mZ0PiG4jF9IWpLA001Vfz7g1RqjS48jS9nW/ii6PRog/ui\nDe7Lb1fmmptq20uef1v2rDZWY2qsxlSQQmv7RRQ0PqFHk9/IYyXPPsFdWvJsNJl57esUmlqMDO0X\nxMxRUV12rzORnBDC+EG92JRSzFvfHeCBa0Y4ZFmVEEII+7H+6N64k4b2RuNAyZ01jUkMZenaTHJL\n6kjPr6Z/lOMk+5vats1Mkl40zkSSXDsRH+lHTG8fso7UsnFfUbeXUqqqyuqj7d/HDZRZ3LOl6D3x\nCPEkIa6abQdL2XKgmNljo616D427D5rwRAhPbD+mqmbUunJMlfkdEmBzTXH7H7J3HLuIzvV3Jc+W\nBFjj7tOp2NSWBtSmWtYdrCO3uI5AHzduuGCAXb2je8W0eA7lV5NbUsc3G7O5dHKsrUMSQgjhoKrq\nWtibUYFWozC+BydJri5apgwL57vNOfy0Pd9hktyaBgP7syrRahTGJP5x5Z1wLJLk2glFUTh/dBSv\nfJXCym15nDOsN1pN980wHcitIj2/Gk83HeOTJMntrLEDe7HtYCm/ppYwa0yfLk/yFEWD4hOCxicE\noke0H1eNBszVRUdnfI8lwGpjNeaybMxl2R2v4+7T3uX5WAIcjqL7406D5poSmrd+drQBl0qyCq5e\nUfiPvwJPN/vqEO2u13HjBYk8uWQXy7fkMjg2kLgIP1uHJYQQwgFt3F+EWVUZEReMr436TtiLc4eH\ns2JrLnsOl1Na1UiIv4etQzqlLanFmFWVobFBNusbIrqGJLl2ZFhcMKH+7pRUNbHzUBmjBnTPO0qq\nqvLV+iwAZo6OwsPOkhJHNLBvAN4eLhwpb7BpMzFF54o2qA/aoD4dSp7V5vrfrPMtwFR1NPltqsVU\neABT4YFjJc8oKD4hxze68glB0Wgw15TQ8NUjRxtvWbZS0igw2DUfze4XMUc/dMp1yd0tPtKP88f0\nYfmWXBb/cJD/3DhaypaFEEKcEbOqsuFoqfLkoT2v4dTv+XrpGT0glE0pxazaUcAV0+JtHdIpbdpv\nabgqEzzOR5JcO6LRKMwYHcUHPx5ixZY8RiaEdEuZ597MCrKO1OLt4SIdZ61Ep9UwakAoq3cWsDml\n2KYds09EcfNC1zsBeie0H1NVFbW+/HeNrgowVxej1pZgrC2BnJ3HLqJ1RePfG3NTHRiagI57BWtQ\nobWZ5q2ft2+hZE/mTOzL7sNlFFU0smZ3IdOSI20dkhBCCAdyIKeS8ppmAn3cSOwbYOtw7MK0kZFs\nSilmw/4i5kyMwcPNflONvJI6Csrq8XTTMTg2yNbhCCuTqQs7M35QL3w8XMgtqeNAblWX38+sqnx9\ndBZ39pg+uLna75ORo2nrUL31YAkm8wn20LUziqKg8Q5G12cY+mEX4n7erXhe9jhef34dj0sfw23K\nzbgOmYU2cjCKZwCYDJjLc6Chgt8nuO1UM6bc3agtDd35pZwWnVbDvHMs63G/25RDY7PRxhEJIYRw\nJOt2W2ZxJw4J67ENp34vKtSbhCg/WgwmNuw7Yutw/tDGow2nxiT2wkUnKZGzkZ+onXHRaZl6dEbp\nxy25XX6/nYfKyCutx99bz5Th4V1+v54kupc3oQEe1DYYOJDT9W9YdBVF64I2MBKXuHHoR8/H4/y/\n43XlIryufQX9ubec+gKqGbWptusDPQtD+wURH+FLfVMrK7Z2/f83IYQQzqGqroXdh8vRKAoTB0up\n8m9NH2nZUWHVjgK7fZPfaDKz9YBlb9xxUqrslCTJtUNThoejd9GSmlNFbnFdl93HbFb5eoNlFveC\ncdG46Lp/2yJnpigK4wZa1qL+mlJs42isT9F74hI5GE717rWiQelk1+auoigKl53bD4CftudTWdts\n44iEEEI4go37jmBWVYbFBeHv/cfNGXuawf0CCfV3p6K2md3p5bYO54T2Z1VQ19hK7yBPou1sSZmw\nDkly7ZCnm0t7A4Mft+V12X22HCimqKKRIF83Jg7uuW3vu9KYo9sx7Uovo6nF+cphFb0niv8fVAAo\nGrR9hqHoPbsvqDMU29uX5IQQWo1mvjr6po8QQghxMmazyrq2hlPDZBb39zSK0l6V+NP2fBtHc2Lt\nDacG9bKrbQ6F9UiSa6emJUei1ShsP1hKWXWT1a9vNJn5ZqNl+5iLxveVzrJdJNjPnbgIXwxGM7vS\ny2wdjtUZ8/dhrrTsr2xWf/dLQtGAixtuo+fbILIzc+nkGLQahc37i8kvrbd1OEIIIezY/qwKKmtb\nCPZzIzFaGk6dyPikXnjodWQU1pB1xL6WLNU3tbI3oxxFOTYZIZyPZDZ2KtDXjVEDQjGrape8C7Zp\nfxFl1c30CvBg7CD72t7F2Yw92oDq11TnKlk2VR+hadVrKMD65v4Ue8YdK10+OoPreYn9bR90IqH+\nHpwzLBwV+GJthq3DEUIIYcfW7i4EYPLQcGk4dRJurrr2qsSftnddVeLZ2HqgBJNZZWDfACk1d2KS\n5Nqx80dbFu5v2HuEukaD1a7bajTx7aYcwLKNilYjw6ArjUwIQadVOJhTRVVdi63DsQq1uZ6mH1+A\n1ib2GKL4SR1P+KX34HXNy3jOfwKva17CY/pCh0hw21w4Php3vZaUrEpScyptHY4QQgg7VFnbzL6s\nCrQahQlJstTrj5w3IgKNorAjrcyuel60dVUeP0h+fs5Mshs7FhHiRVJMIAajmTW7Cq123XV7jlBV\n10JEsCfJCSFWu644MU83F4bEBqFiWQft6FSzkaZVr6DWllCkBrKkfjyXTIrFy90FRe+Jxi/Mrtfg\nnoyPhyuzxvQB4Is1GZjVk2yLJIQQosdav/cIqgoj+gfj4+lq63DsWoCPG8kJwZhVldU7C2wdDgCF\nZfXkFtfhrtcxLE72xnVmkuTaubbZ3FU7C2hpNXX6ei2tJr7/1bJVyiUTY6TMppu0lyynlNg4ks5r\n2fwxpiMHadF68nrNOYSFBjBpiHM03piaHIm/t568kvr2rQWEEEIIAJPZzPqjDafOGSrbLp6OaSMt\nDajW7TlCs8H2DTg3Hd3tYtSAEFxdZFcRZ2bVJDctLY3+/fsf96es7MQNd7788kumTp3KkCFDuP76\n68nLs6+afXvQP8qPvmHe1De1snFfUaev98vOAmobDET38maovIPVbQbHBuLppqOgrN6hGxsZUlfT\neuAXVI2O12smU2325Mpp8Wg0zvFmid5Fy5yJfQFYti6LVmPn31gSQgjhHPZmVFBdb6BXgAf9o/xs\nHY5DiO3tS2y4D40tRtbstl5V4tkwmc3tWzpKqbLzs2qSe/jwYcLDw9m4cWOHP4GBgcedu27dOh55\n5BFuv/12vvjiC/R6PTfffDNGo+3f5bEniqJw/mhLCeXKbXmd2lS7qcXI8i2WWdy5k2KkZXo30mk1\njBzg2HvmGgsP0LJ5CQAbPaaRZQhi7MBe9IvwtXFk1jV+UBjhwZ5U1DazeqdtfyELIYSwH20Np84Z\n2lteQ52Bi8Zb3jz+fnMONQ3W6zFzplKzq6hpMBDq705suI/N4hDdw6pJbkZGBjExMQQHB3f4ozlB\nY6N33nmHuXPnMmfOHOLj43nmmWcoLi7ml19+sWZITmF4fDAh/u6U1zSzI+3st6FZsTWPhmYjcRG+\nDOwrLe+727ijbeq3HCjGbHas9Z7mmhKaVr0CqpnavueyNC8YVxcN886JtXVoVqfRKFx2Tj/A8gu5\nvqnVxhEJIYSwtdLqJlKzK9FpNYyThlNnJCkmkMGxgTS1mPhqfabN4ticYqmIHJcUJm9S9ABWTXLT\n09OJiYk55Xlms5m9e/cyatSo9mNeXl4kJiaya9cua4bkFDQahZmjLGtz31uRxoa9R1DPoCmOodXE\nBysP8f3mHEBmcW0lNtyHED93qusNHMyrsnU4p001NNK08nloaUAbNZS38uIBmD2mj9O23k+KCWBA\nH38aW4z88GuOrcMRQghhY+v3HEHFsmOCl7uLrcNxOH86tx9ajcKGvUXkFtd1+/0bmlvZlV6OwrFJ\nB+HcdNa8WEZGBqqqMnfuXEpLSxk0aBD33nvvcYlvTU0NTU1NhIR07OwbEhJCcXHnSjm1WufspTV5\nWDiHC2r4NbWYd1ekkZJdyfWzBuB5iifagrJ6XvtqPwVlDei0CgumxpPY9/jycUeh1Sq/+dvxftbj\nknrx9YZstqSWMDj2j9dE28NYVs0mGla/jrm6CE1ABLtD55C3J4tAHzdmjY22ixi7yuXnxfHQO9tY\nvbOAGaP6EOjr1v45Rx+HwrG1/b+TcSjsQU8Yh0aTuX3bmXNHRDj1776uEhHizdTkSFZuy+PTXw5z\n31UjrD7h8kdjceehMowmM4nR/oQEeFj1vqK7nd64sVqS29zcTEFBAb169eJf//oXiqLw+uuvc9VV\nV/H9998TEBDQ4VwAV9eOrdddXV2prz/7pjxarYaAAMfbuuR03Xf9KNbsLOD1ZfvYnlZKdlEtf79i\nBEn9jk+WVFXlp625vPl1CoZWE+HBntxzVTKxEX7dH3gX8PV1zCeo88fH8PWGbHYeKsXDczhu+pP/\nF7SHsVzx87sY8/eh8fAh4JJ7WfraPgBuuGgQvUKdez1LQIAnk4aGs35PISt35HP7ZUOPO8dRx6Fw\nbL9/bpBxKH6vsbmV7CO19Ar0IMDHrVuqt5x5HG7YU0htg4E+vbwZPVjW456t6y4axK+pxRzKq+Zg\nQQ0ThnRNh+rfj0WTyczaPZau2DPG9rWL11ei61ktyXVzc2P79u3o9XpcXCyziy+88AKTJ09m+fLl\nXHXVVe3n6vWWEkeDoePic4PBgLu7+1nHYDKZqbWjzaa7wtCYAB69YRSvf5NKZmEND7y2iVnjopk7\nKQbd0XcWG5pbeXf5QbYfLAVgwuAwrp7RHzdXHZWVDbYMv9O0WgVfXw9qahoxmRxrXSuAm1YhNtyX\nzMIaft6Sw/g/WNdj659Vy8F1NG37HhQNbmMW8NnaPGrqDcRF+JIY5Wvz+LrDrDFRbNhbyKpteUwd\nHk6Iv+UXp6OPQ+HY2v7vyTgUv9VqNLMvs5xfU4vZc7icVqOlUaW3hwuRId5EhXoRFepNZIgXvYM8\n218zdFZPGIffb7CsI504uDdVVY02jsaxzZ0Uw3sr0lj8TQr9enlbdRufk43F5VtyySmqJcjXjQGR\nPeP1izPz8XFHpzv185dVy5W9vLw6fOzm5kZkZORxJcj+/v64u7sft7VQWVkZQ4YM6VQMJtPZdx92\nFIE+bvzjimF8tymH73/N4YfNOaRmVXDLRQOpb2rljW9TKa9pRu+q5ZoZ/Rl7dO2Bc3xvLIPaZFId\n9usZn9SLzMIaftySy+gBISd9R9iWX5+x6BBN6961fKCaafzlDaaoEOgVRdSYa482znLOFzO/FeLn\nztiBvdicUszX67O44YLEo59x/HEoHNexMSfjsKczm1XS8qrYeqCEHYfKaGo5tkNFRLAXVXXN1DW2\nciCnkgM5le2f02kVegd5ct7wCCYM7mwTHuceh8WVjRzIqcLVRcOYxFCn/Bq704SkMFbtKKCgrJ7l\nv+Zw4dHOy9Zx/Fgsr25qb3Z11fR4dBpFfoYO7/Ref1otyU1JSeHqq6/miy++oF8/S2fS+vp6cnJy\nOszigmVbnCFDhrBz507OP//89nMPHDjADTfcYK2QnJpOq+GSSTEM7BvAW98dIKe4jofe3YbRqGJW\nVfr08uYvFw8k1N95y4cc1fhBvfhmYzZ5pfXszaiwu/2KzXVlNH33xHHHNQoMcc1DWf8k5uDH0PiG\n2iC67nfR+Gi2pJawObWYWWP7EBYoZU5CCNsqrW5i9Y4CtqWVUFN/rCouKtSLMYm9GDUghAAfN1RV\npaquhbySevJL68grtezVXlrVRF5JPe+uSGNnehnXnZ+An5dzNhLsrHV7LNsGjRoQioebVeeGeiSN\nRmHB1Die/mQ3P2zJZcLg3l3WxFJVVT746RCGVjOjBoScsheKcC5W+9+akJBAREQE//rXv/jXv/6F\nVqvlueeeIzAwkFmzZtHQ0EBjYyPBwcEAXH311dx5550MGDCApKQknn/+ecLCwpg8ebK1QuoR4iP9\neOTPI/nwp3S2HigBYPrISOadE2u1UiRhXS46LeeP7sOnqw/z7aZshvQLtJv1PaqhiYZP7jnp5xUA\no4HGtW/hdfG/ui0uWwrx92DC4F6s31vEt5tyuOWigbYOSQjRg6VkV/Da16nts7Yhfu6MTgxldGIo\nvYM6vgmnKAoBPm4E+Lh1eEO1qcXIrvQyPll1mH2ZFfz77a1cNb0/oxN7xpuXp6vVaGLjPkvDqSnD\numb9aE80oI8/I+KD2ZlextK1mdx0YeKpH3QWth0sJSWrEg+9jgXnxXXJPYT9sloWpNPpePPNN+nV\nqxc33HADV1xxBa6urrz33nu4urryzjvvMGHChPbzp06dyv33389LL73E/PnzaWlp4Y033kCrtV5t\nfk/h4ebCLRcN5G/zh3DfVcO5/Lw4SXDt3OShvfHxcCGnuI6U7MpTP6AbqKqZ5jVvnt65JRmoLT1n\nTcsF46LRahS2HSihoOzsm+MJIcTZUlWV1TsLeP7zfTS1GBnaL4h/XZPME7eM4ZJJMccluH/EXa9j\nfFIYj904mkExATQ0G3nj21Re+zqFukbDqS/QQ+w4VEZDs5GoUC+ie3nbOhynctm5/dBpNfyaWkxm\nYY3Vr9/Q3Monq9IBmDclFl+pVOhxrFp3ERYWxvPPP3/Czy1cuJCFCxd2OHbFFVdwxRVXWDOEHi0p\nxnG3Bupp9C5aZoyO4os1mXy7KZtBfQNsNpurqipqTTENn993Ro8zleWgi+gZs5pBvu5MGtqbNbsK\n+WZjNnfM61zvACGEOBNGk5mPVx1m7W5L6ewF4/owZ2IMmk7+3vD31vO3y4awbu8RPludwfa0Ug7l\nV3PdzAS7W0rT3VRVZeXWPADOGRZuNxVXziLEz50ZoyL54ddcPll9mPuvHtHp8fxbX6zJpLaxlbgI\nXyYN6W216wrHIdN9QtjIlGHheLm7kFlYy8Hcqm69t2popDV7B00/vUj9W9efcYIL9KiZXIALxkaj\n02rYeajMJhvZCyF6pvqmVp77fC9rdxei02q4+cJE5k6KtVpCoCgK5wwN55EbRhEf6Udtg4EXv9zH\n4h8O0NhsPPUFnNT+rArySuvx9XRl/KBetg7HKc0a0wdfT1eyjtSyJbX41A84TYfyqli/9whajcK1\nMxOsmjwLxyFJrhA24uaqY/rISAC+25TTpfdSzWZMpVm07PqG+o/vov6922j++WWMObvO+praYGt2\nRLR//t769jVZy452ahRCiK5UVNHAfz7YwcHcKnw8XfnHlcMYM7BrEq4QP3fuvWIYlx8tI920v5jH\nP9xBbQ8sX1ZVle835wIwY1QULjpZStcV3PU65p0TC8DStZk0Gzr/pkqr0cS7yw8CliT6TMr4hXOR\nJFcIGzpvRAQeeh2H8qs5lGfd2VxzQxWtaetpWvUq9W//mcavH8Ww4yvU+orOX1zvhcYnuPPXcTCz\nxvbB1UXDnsPlpFv55yWEEL+Vkl3Bfz7YSWlVE1EhXjx4bTKxvX279J4aRWH6qCgevn4kvYM8Kapo\n5NlP91Df1Nql97U36fnVZBTW4OmmY/JQKXXtSmMH9aJvmDfV9QbeXZ5Gq9HUqest/SWDoopGQgM8\nuGBcHytFKRyRJLlC2JC7Xse0ttnczTmdupZqNGAsSKH510+oX/J3Gpb8jeb172DM2maFSDtyP+9W\nq1/TEfh6unLe8AgAlvyYZuNohBDOas3uwvYGU8Pjg7nvqhEE+Lh12/17B3lyz+VDCQ3wIL+0nuc+\n39OjSpe//9Uyizs1ORJ3vWwb1JU0isJV0/ujd9GyPa2U/y3ZTVVdy1ldq6iigc+PNpu6dkZ/mYHv\n4STJFcLGpiZH4Oaq5UBOFZk5Raf9OFVVMVUWYtj3I40/PE39OzfTtPwZWvevRG3ouo7NruOv7jEN\np05k5ugo3Fy17DpUSnp+ta3DEUI4mW0HS/hw5SHMqsoF4/pw2yWD0Lt2/4t1Xy8991w+lCBfN7KL\n6nh+6V6rlJPau+yiWlKzK9G7ajlvRIStw+kR+ob58MDVI46OtVoefX87WUdqz+gaqqry3vKDGE1m\nJg4OI6GPfxdFKxyFJLlC2JinmwsXDvbgz15rCPrpWAOoujevw1xT0uFctbme1sxtNK9bTP3bN9C4\n9AFatnyKqTC1UzFo/MJwGTSNVv++mNSTN2jQhA9EP/C8Tt3L0Xl7uDJ9ZBQAy9bJ2lwhhPVkHall\n8Q+W9YSXTYm1aoOpsxHg48a9C4bh760no6CGl77cj6G1c+Wk9u6Ho7O4bc0hRfeICPHi39cm0z/S\nj5p6A/9bsovNKaf/xv+GfUWk5VXj4+nK5bInrsDKWwgJIc6cuaaECXmLUV2a+f1LmYbP/gGA6/CL\nMebuxlyRZ9V766JHoB+7AI13kKVZw7uruUotxE0xosH8mzMVcHXHfcI1Vr2/o5o5OorVO/M5mFvF\nwdwqBsg7xkKITqqoaebFL/fRajQzaUgYM0dF2TokAIL83Ll3wTD+t2QXB3OreOWrFG6fm4SLzvnm\nSQrLG9iVXoZOq2lvDCm6j7eHK3ddPrR9u6y3vz9IQVkD8ybHotEc/2ZPbaOBHWmlbDlQQkaBZa/d\nmy4ehJeHKyaT+bjzRc/ifM9QQjiYpo0fgLGZP3qz3rDrm84luIoGba94dNHD2w/pxyzAffpCNN6W\nvRC/XJdFaoWO9zWXoo0aSntAigZt9HA8L3kIjW/o2cfgRDzdXZhzTj8AvtqQhaqqNo5ICOHImlqM\nvLB0H7UNBhKi/Lhqen+72pc1NMCDuxcMw8vdhf1ZFbz+TQpGJ0wilv+aA8DEIWH4eeltG0wPpdNq\nuGZGf66eHo9Wo/Dj1jxeWLqPxmZL87OmFiObU4pY9Pke/v7SJj76KZ2MghpcdRpmjo5i8nApMRcW\nMpMrhA2pLQ2YO1lqfDKKTwi6iEFoIwah652AajTQ+NUjALj0n4hL0vT2cw/mVPLT9nw0isK8C8bi\n1XsGaksDalMtirsPil5a8P/eRRNj+HpdJhkFNezPqmBwbJCtQxJCOCCzWeWt7w5QUFZPaIAH/zc3\nCZ3W/uYgwoM8ufvyoTz18W52Hy7n7e8PcPOFA9E6SW+f0uomth4oRaMonG8ns+g92ZThEYQFevLq\n1ynsz7J0Go8I8WJvRjmtRssbLBpFYXBsIKMHhDI0LggvD1e7enNI2JYkuULY0O/X3HaKizu68AGW\npDZiEBqfkPZPqUYDTSufQW2oQtsrHv2Ea9p/ETQ2t7L46J5yF46PJqa3DwCK3lOS2z/g4ebCBeOi\n+Wz1Yb5Ym8mgvoEnLKcSQog/8sXaDPZklOPppuPOeYPxdLPfdaBRod78/U9DeebT3Ww7WIqrTsuN\nFybaOiyr+HFLLmZVZfygXgT5uds6HAEk9PHn39cm8+KX+ygsa6C4shGA+AhfRg/sRXL/YLw9XG0c\npbBXPS7JVVUzJpMJkPJCR2Q2a2hp0dHaasBstkWplIJWq0VR7OBddkVBE9wXXUQS2ohBaEP6omiO\n/y+tqirN69/FXJaF4hWI27TbwWjAXFeO4u7Dkp9zqKxtoW+YD7PHyp5yZ2JqcgSrtudTWNbAxv1F\nTBoi+ykKIU7fuj2FrNyWj1aj8H+XJBEa4GHrkE4pprcPd142hEWf72Hj/iKC/d3588VJtg6rU6rq\nWti4vwgFy37own4E+7nzwNUj+H5zLp7uOkYPCO3W7bSE4+oxSa6qqtTVVdHYWGfrUEQnlZdrbJTg\nHuPh4Y23t3+ny2LOeI2ruw8ufYaijUhC13sAipvXKR9i2PMDxoxfwcUN/YSrad7wHqbc3aCqqCgk\nGCLJcU3mpgvH2GWJnD1z1Wm5dHIMb353gK82ZDF6QKhNtvoQQjiegzmVfPSTZU/Pq2f0d6gtT+Ij\n/fjLxYN46ct9fLU+i5hIfwZHO078v7dyWx5Gk0py/2DCAqWCyd64ueqYd06srcMQDqbHJLltCa63\ndwCurvo/bPIj7JtWq7FZ1zxVBYOhhbo6yz60Pj4BnbqeovdEE5aAuSjt9B7QVIsxdw+minyMmVtR\nvALReAVY/va0/K24+7Qn3605uzBsXwoo6Ef/ieZf3oTWZssXAiioJLnkM8i9FF/taMD+ZxHszajE\nUFZuzye3uI6V2/O4aHxfW4ckhLBzxZWNvPJVCiazyszRUQ5ZBTK0XxCXnxvHJ6sP88Knu/nHlcOJ\nPbrcxZHUN7Wydk8hALPHRts2GCGE1fSIJFdVze0Jrqent63DEZ2k02lQFNvN5Lq4WNZ/1NVV4u3t\n1+nSZfdJ17dvFXRqCmpTLWpTLeay7BOfotWheAaCoRG12VK5oPiE0Hp489EEt+P3TquoYDbQvPVz\nPKYv7MRX0jNpFIU/TenHU5/sZsXWPCYPDcfXU9YICSFOrLHZyAtf7KWxxciwuCDmTXbcGaqpyRGU\nVjexemcBLy7dywPXJBPiYOtZV+3Ix9BqJikmkD695DWiEM6iRyS5ljW44Ooq7eCFdbSNJZPJhK6T\newVqfENxn3UPTcufPuk5ZhRcogajHzUfUKG1GXN9BWp9xdG/KzEf/TctDai1HRtaqbUlxx3reIIZ\nU+5u1JYGaTZ1FhL6+DMkNpC9mRV8szGba2b0t3VIQgg7pKoq7/2YRklVE5EhXtx0YaJDN6xTFIUr\np8dTVW9g16FSXvhiLw9cPQIPO26e9VtNLUZW7SgAkJ4UQjiZHpHktjWZkhJlYS3HxpJ1GpjpIgYe\nTXSfOe6aJtVyxJi3F1PeXlAUtH2G4zZ6PprY0cddS22up/6D2888CNVs2TJIktyzMm9KP/ZlVbB+\nzxGmJUfIui4hxHHW7T3CjrRS9K5abrtkEG6ujv8yTKvRcO/Vydz1wjoKyxp49esU7rxsiEP0eFiz\nu5DGFiPxkX7ER/rZOhwhhBXZ/zOQED2ELmIgnn/6X8eDioKiaFBQOZZXq5hyd9Pw1cMY8/djqi7G\nmLePll3f0vTTiydNcE+ZjisaFHfHW09lL8KDPJk0pDdmVeWLNZm2DkcIYWcKSuv5ZNVhAK6d0Z9Q\nf+fpgeDp7sLf5g/Fx8OFAzlVLPk5HVW1710syqub+H5zDgAXyCyuEE5HklwH09LSwgcfvMNVV83n\n3HPHcfHFM3jwwfs4fDi9/ZzHH3+Ye++986TXWL78O6ZNm2iVeEwmE1988Wn7x4sXv8HVV8+3yrV7\not92W/ac/wSaiMFoFND+vgpBNYOhiaYVz9L4+T9p+nERhh3LMObs+s1Jxx6kolBrdseknqScQdGg\n7TNMZnE7ac6EvuhdtOzJKOdQXpWtwxFC2IkWg4nXvkmh1WhmwuAwxgzsZeuQrC7Yz52Flw5Gp9Ww\nbs8Rftqeb+uQTsqsqryz/CDNBhMj4oMZ2LdzTSSFEPZHklwH0tLSzJ133sry5d9z/fU3smTJUv73\nv0V4enpyyy3Xs3HjutO6znnnTePzz7+xSkwbNqzlhReeaf94wYKrefnlN61y7Z5OcffBXLDvuEZR\np+/Yu+gKKl5KExpFhd83ylI04OKG22h5c6KzfL30zBwdBcDnazIw2/lMhhCie3yyOp2iikbCAj24\ncmq8rcPpMrHhvtx4wQAAPv8lg93pZTaO6MRW7yggLa8aHw8Xrp7Zv9PbAQoh7I/jLwbpQRYvfpPS\n0lLefXcJPj6+AISF9WbAgIH4+wfw3/8+yscff3nK6+j1buj11tlI+/flSB4eHsg2NNahNtW2b/Vj\nDZbZYAXcfaCpxnLtozO4bqPnn/meveKEZoyKZO3uQrKL6th+sJTRifJ9FaIn23qghPV7i9BpNdx6\n8SCn30t71IBQSqqa+Gp9Fm98l8rdlw+jX7ivrcNqV1TRwNJ1liUl185MwMdDuuEL4YxkJtdBmEwm\nvv32K/70pyvaE9zfuvbaGzAajaxevRIAg8HAf//7CFOnTuCSS2bx9ddL28/9fblydXU1jz76b2bO\nPIcLLpjGQw/dR0VFefvnDQYDr7zyAhdfPJNp0yZx5523kZeXw65dO/j3v/8JwIQJyezataNDufL/\n/d9NPPPMEx3i/PjjD1iwYG771/T2268zZ875TJs2idtvv5mDB1Ot9B1zfIq7Txd0S1OhqRbPPz2F\n5/wn8LrmJTymL5QE14rcXHXMmWjZK/fLdZm0Gm233ZUQwrZKqxp5/0fLPugLpsYREeJl44i6xwVj\n+zA+qReGVjPPfb6X3OI6W4cEgMls5u3vD9BqNDN+UC+GxQfbOiQhRBfp0TO5z3+xl32ZFd1+38Gx\ngdx52ZAzekx+fh719XUMGjT4hJ/X6/UMGpRESsp+dDodO3Zs46KLLmHx4o9ISdnHs8/+D29vX847\nb9pxj/3Xv+7F29ubl16ylBm/884b3HXXHSxe/CFarZZFi55k27Yt/POf/yY8PII333yVe+65kw8/\n/Jx//ONfPPnkf/jmmx/x8fFl9+6d7dedPv183nrrNe688x50OstQW7VqJTNmzALg3XffYu3a1fz7\n348SHBzCzz//yMKFt/DRR1/Qq1fYGX1/nJGi90TbZzim3N2dKFk+AdUMZiMaP/ked5UJg8P4eUcB\nR8ob+GVXATNGRdk6JCFENzOazLz+TSrNBhPJ/YM5Z2hvW4fUbRRF4brzE2huMbEzvYxnP9vDP64c\nTniQbfs+/PBrLtlFdQT46FngxGXjQgiZyXUYdXW1APj6+p30HF9fP2pqqgEID4/grrv+SZ8+0cye\nfRGzZl3I0qWfHveY3bt3kpq6n4cffpy4uHji4uJ5+OHHyc/PZdu2X2loqOfHH3/gttvuYOzY8URF\n9eGee+5jwoTJNDY24uVleVc6MDAIF5eO++Kde+40Ghsb2LVrBwB5eTkcPpzOtGkzaWlp4eOPP+Rv\nf7uXESNGEhXVhxtuuIWEhESWLfvcCt8x5+A2ej64uB2/jrYzpItyl9NqNFx2TiwA32/OoaG51cYR\nCSG629K1meQU1xHk68Z15yf0uHWfWo2GWy4eSFJMIPVNrTzz6W5KqxptFk9ucR3fbcoB4M+zBuDh\n1qPneYRwej36f/iZzqbakq+vpUS5oaH+pOfU19e1J8GJiYPQao+t+0lISGTVqpXHPSYrKxOj0cgF\nF3Sc4TUYDOTk5ODn54/RaGTAgIG/icWPhQv/dsqYvb29GTt2PKtWrWTUqDH8/PNKBg1KIjw8gqys\nTAyGFv7xj791+MVvMBjw8JAOv200vqF4XvIQzVs/x5S7q/NrdKWLcrcZHBtIQpQfaXnVfLk2k2tm\nJtg6JCFEN9mbUc5P2/PRahRuuWggHm4up36QE9JpNfzfJYN4/ou9pOVV8/Qne/jnlcMJ9LVOX5DT\n1Wo08fb3BzCZVc4bHkFitHRTFsLZ9egk15GEh0fi5+fPvn17iI8//sVya2srBw6kcP31N3HoUBoa\nTcd3jFVVRac7/pesyWQkICCQV15567jP+fj4UFJS0qm4Z8yYzX//+wj33HM/q1atZP78K9rvC/DU\nU88TEtJxPaher+/UPZ2NxjcUj+kLUVsaMJVm07TqFWhtOvMLSRflbqUoCldMjeeR97azds8RhsUH\nkxQTaOuwhBBdrKquhcU/HARg7qQYYu2o6ZItuLpoWXjpYBZ9tofMI7U88+lu/nnlcHy9uu93/Vcb\nsiksbyDU3515U2K77b5CCNuRcmUHodVqmTPnUj7++MP2kuTf+vjjDzCZzEydOhOgw765ACkp++jb\nN+a4x0VHx1BVVYmLiwsREZFERETi6+vHiy8uIi8vj/DwCLRaLenpae2PaWio58ILp3PgQMopy6/G\njh2PRqPhyy8/o6joCOeeOxWAiIgotFot5eXl7feNiIjk448/YOvWX8/029MjKHpPdJGD8Jz7MNrw\nQWf4YAVtn2F4XvKQNJnqRhEhXu1NqN5dfpD6JilbFsKZmcxm3vgmhfqmVgb1DWDGaFmPD+Cu13Hn\n/CFEhXhRUtXEM5/t6bbnw/T8alZuzUNR4MYLEtG7OHd3ayGEhSS5DuTaa28gIiKSW275M2vWrKK4\nuIjDhw/x/PNP8/777/DAAw/h5+cHQE5ONs8//zQ5Odl8/fVSVq5cztVXX3/cNZOTRxEX15+HHrqf\n1NQUsrIyeeyxf5OenkZ0dF88PDy45JJ5vPrqS+zYsY28vByeeOIxvLy8iI9PwN3dsl1QWtpBWlpa\njru+i4sL5547lcWL32TMmHHt5dTu7u7Mm/cnXnnleTZuXEdhYQFvvPEKP/zwLdHRfbvse+gMNL6h\neMy+G49LHkITPvA3n1HAw8/yN4CiQRM5BPfz78brmpeli7KNnD+6D7HhPlTXG1jyc/qpHyCEcFjf\nbMwhvaAGXy9XbrwgEU0PW4f7RzzdXPj75UMJC/SgsKyBZz/bQ2OzsUvv2WwwsviHA6jArDF9evys\nuhA9iVXLlWtqanj22WdZs2YNTU1NDBkyhPvuu49+/fqd8PxRo0ZRU1PT4diiRYuYPXu2NcNyGi4u\nLixa9DJLl37Ke++9TUFBPh4engwbNoI33niHuLj+7eeee+40qqoq+fOfryIwMJB77rmfUaPGHHdN\njUbDk08u4sUXF3HXXbdjNqskJQ3hhRdea28qdeutdwDw8MP3YzC0MmTIUJ555kV0Oh1JSUMYMmQY\nt976Zx566D8njHvGjFl8/fWXTJ8+q8Pxv/xlIVqtjmee+R+1tbVER0fzxBPPnrSDtOhIG9wXz9n3\noLY0oDbVorj7oOg9j/tY2JZGo3Dj7EQeencbWw+UMDw+mJEJIbYOSwhhZak5lfywOQdFgVsuHIiP\np+y/+ns+Hq7cffkw/rdkJ7nFdTy/dC93zhvSJU2gzGaVJT+nU1bdTGSIFxdPkDfQhehJFFXtbCeb\nY/7yl79QVFTEQw89hK+vLy+99BI7duxg+fLl+Ph07OZaUlLCpEmTWLZsGSEhx17w+fj4nPWaTKPR\nRNUJOvcZjQbKy4sICgpDp5NfOt999zWvvvoiK1b8YutQzopOp8Fo471Hu3JMpd94HQDxb79n1esK\n69FqNQQEeFJZ2YDJdHpj8ZddBXz0Uzpe7i48esMo/LpxPZo9M6sq9Y2tGE1m/L31Pa4D7Zn4v1/u\nBeCVc58Czm4ciq5RU9/CQ+9so7axlYsn9O1RCdXZjMPy6iaeWLKLqroW/L31XDuzP4Njg6wWU3lN\nE299d4DDBTVoNQoPXjeSyB6yR3FPJs+JPYO/vwc63amXHVjtrbPS0lLWrFnDp59+yrBhwwB46qmn\nGDVqFBs3bmTWrI6zeBkZGbi7u5OYmCgvarpRTk42e/bsPK7ZkxCia00ZFs7u9DJSc6p4b0Uaf503\nuMc89xVVNJBTVEdVfQvVdS2Wv4/+u7regMlsea/Vx8OFmN6+xIb70C/cl+gwH1k/J+ye2azy5ncH\nqG1sJSHKjwvHRds6JLsX5OfOP64YxhvfHiC7qJbnv9jHmIGhLDgvDm+Pzr1xvCW1mA9/OkRTiwlf\nT1duvDBRElwheiCrJbkeHh68+eabDBx4bI1g2wu42tra484/fPgw0dHRPeZFnr249947aWlp5q67\n7rN1KEL0KIqicP2sAfx78Tb2ZVawYV8Rk4b0tnVYXabZYGT7wVI27Csio7DmD8/1PFqqWNvYyp6M\ncvZklAOg1ShEhHjRr7cv/SJ8GRYXhKskvcLOfL85h4O5Vfh4uHDzRQOP291AnFiIvwcPXD2Cn7bn\n8/WGLLaklpCaXcmV0+IZmRByxq8PG5uNfPTTIbYcsOwKMSwuiOvOT+h00iyEcExWS3K9vLyYPHly\nh2Mff/wxLS0tjBs37rjzDx8+jKqq3HDDDaSlpREREcFtt9123DXOlFZ7fC8ts1n6a7X5/PNvbB1C\np7T9zlOUzm8Zaw0ajeaEY84auuq6ovO0WuU3f5/+zynY34OrZ/TnzW9T+XT1YQbFBBLs595FUXY/\nVVXJOlLLuj2FbD1QQrPBBICbq5akmEACfd3w99bj56W3/O2tx99Lj6uLFlVVKa1qIqOwhoyCGjIK\nq8kvrSe3uI7c4jpW7yrAz0vPnIl9mTikN7oe/P+j7bnhbMehsJ6DuZV8sykbBbjl4kEE+jrP/+fT\n1ZlxqNXC7HHRJCeE8M4PB0jLq+b1b1LZdrCUa2cm4Od9ess6DuVV8ea3qZTXNOPqouHKaf2ZPLS3\nTKT0MPKc2FOc3v/rLtsnd+PGjTzzzDNcf/31REUd30I/MzOT6upq7rzzTkJDQ1mxYgW33HILH3zw\nAaNGjTqre7bV4v9eS4uO8nJLMqLTyaB3BrZOAFVVg0ajwc/Po8v29T3RWBb2xdfX44wfc8GkWFJy\nKtm8r4j3fkzj8b+Md/iZn9oGA2t25vPT1lzyiuvajw+IDmD66CjGDwnHXX/qXzeBgV4M6Bfc/nFj\ncyuH86tJy61k094jZB+p5b0Vafy4LY8rZiQwaVgEWgf/3p2N3z83nM04FJ1XXdfCm9+moqpw2Xlx\nTEru2dsFdWYcBgR48uTCSazcmsu736WyK72MQ/nV3HjRQEYNDEPvqsVVpzkuaTWazHz60yG+WJ2O\nWYV+Eb7cfVUy4cFSntyTyXOiACs3nmrz448/cs899zB9+nSefvppNJrjExKDwYDBYGjv4Atw0003\n4e7uzosvvnhW9zUaTdTWNh93vLXVQGlpoTSecgKKYklwTSazTWdy2xpPhYSE4+Ji3TF18PprABjw\n7gdWva6wHq1WwdfXg5qaRkymMx+ItQ0GHnhrC7UNBhZMjWPm6D5dEGXXazGYWL4ll+VbcjC0Wpp8\neHu4MGFwbyYN6U3vIOu9UWNWVbYfLGXZukyKKy0NBsODPbl0cizD44N7xIzNX36+G4DXpz0DdH4c\nirNnVlWe/XQ3KVmVxEf68c+rhqM9wWudnsDa47Citpn3lx9kb2bFcZ9z0Wlw1Wlw0WnRu2hoNZqp\nrGtBwTIjfMmkmB5d5dHTyXNiz+Dj435ak5ZWn8ldsmQJ//nPf5g3bx6PPPLICRNcAFdXV1xdOyYH\ncXFx7Nixo1P3P1E3NbNZOqw5i7bE1h5KlcEytrqqg590BrRnluc1k0k9q5+Tp5uOa2f256Uv9/PF\nmkwSowMIt2JC2NXMqsqvKcUsW59FVZ1lf+xBfQOYPLQ3Q/oFtb/ItPYYTu4fzLC4QDanFPPtxmwK\nyxp4cek++ob5MHdyDIl9/HtEsnvs+9q5cSjO3g+/5pCSVYmXuws3X5gIak9+zrbuOPTzdOWOeYPZ\nklrCt5tzqG800NJqxmgy02q0/IFj++sG+Oi56YJE+kf5H42jp/4chDwn9hSnlwRYNcldunQpjz76\nKDfffDN33XXXSc8zGo2cd9553HLLLVxxxRXtx1NTU4mNjbVmSEIIYZeGxQUzISmMjfuLeOGLvdy7\nYBhBDrA+Nz2/mk9XHybnaFlyn1BvLj+vX/sLzK6m1WiYOLg3YxJ7sW5PId9vziG7qJZnP93DiPhg\nrpuVgKebS7fEInqm9PxqvlqfDcCNFwwgwMfNxhE5H0VRGDuoF2MH9Wo/ZlbV9iTX0GrCcPTfvQLc\ncTmN7USEED2L1ZLcoqIiHn30UWbNmsU111xDWVlZ++e8vLwwm800NjYSHByMTqdj8uTJvPLKK4SH\nhxMVFcVXX33Frl27ePDBB60VkhBC2LUFU+MoLK8nu6iOJ5bs4t4FwwgNsM+1RKXVTSxdk8GOQ5bn\ndj8vVy6dHMvYQb3Q2GD21EWnYWpyJBMH92bVznyWb8llZ3oZOcV13HLxQPqF+3Z7TML5lVY18vKy\n/ZhVlZmjoqy6t6v4YxpFQe+itWwr5i5vZAkh/pjVktzVq1fT0tLC8uXLWb58eYfP3XvvvTQ2NvLy\nyy9z6NAhAB544AG8vb158MEHqaysZMCAAbz77rsykyuE6DHc9TruvnwYz32xl4yCGv63ZBd3Lxhm\nV6XLTS1Gvtucw6od+RhNKq46DTNHR3H+6D7oXW0/e6J31TJ7bDQjB4TyxjcpZBfV8b+PdjF3cgwz\nR0fZJAEXzqmhuZXnv9hHfVMrg2ICuPScGFuHJIQQ4iS6pPGUrRiNJqqqGk9w3NIkyNEbTxmNRr76\naikrVy4nPz8Xk8lEdHQMs2ZdyJw5l550/fPZuvfeO/H19eOBBx5m+fLveO65p/j55w1WuXZLSzPL\nl3/PJZfMO+PH6nQa9u7dh8lkZPDgoVaJ50x15ZhKv/E6AOLffs+q1xXW09bJvbKywSrrfpoNRl76\ncj8Hc6vwcnfh7suHEhXqbYVIz55ZVdm0r4gv12VS29gKwNiBvbh0cozdlmcaTWa+XJfJym35gGWd\n8I0XJOLj6bjP+7/1f7/cC8Ar5z4FWH8cipMzmsws+mwPaXnVRAR7ct9VI06rY3hPIONQ2AsZiz2D\nv78HutNYoiAt6M6S2tKAuboItaWhW+5nNBr5+99v57PPlnDppfNZvPgj3nvvEy644GIWL36d5557\nukvvf95506y6x+6yZUtZsuT9s378nXfeRkFBvtXiEcKW3Fx1/HXeYJJiAqlvauWpj3eTdaTWZvFk\nFNTw2Ps7eHdFGrWNrcSG+/Dva5O56cJEu01wAXRaDX86N46/zhuMl7sLKdmVPPTONg7mVNo6NOHA\nVFXl/R/TSMurxtfTlb/OGyIJrhBC2Dl5lj5D5poSmrd+hil3t6XFr6Kg7TMct9Hz0fiGdtl9P/ro\nPQ4fTufDDz8jKOjYPpIREZFERETyt7/9H1dccTVhYb275P56vRt6vfVe3Ha+gMBpChCEAMDVRcvt\nc5N4/ZsUdh8u55lPd3PnZUOIj/Trthgqa5tZujaTLQdKAPD31nPZObGMTgx1qK7FQ/oF8fD1I3nz\nuwOk51fzzKd7uGBcNBdNiO6x27yIs/fDr7ls2l+Mq07DHfMGE+hrv2/0CCGEsJAk9wyYa0po+OoR\naG3usJeNKXc3DUcO4nnJQ12S6KqqyjffLOPyy6/skOC2SU4exSefLGtPcB9//GGMRiPFxUVkZ2fy\nj3/8i7FjJ/Daay+yfv1aKisr8PPzY+rUGdx221/Rai1T/p99toTPPvuY2toaZs68AKPR1H6P35cr\nV1dX8+KLz7J58wZ0OhdGjEjmjjvuIjDQ0oRj3rwLmT9/Ab/+uom9e/cQEBDA9dffxOzZF7F8+Xe8\n+uoLAEyYkMwXX3x7XHJeUVHO00//lz17dmEymRk2bDh//evdhIdHMGfObJqamvjvfx9h9+6dPPDA\nwxQWFvDCC8+ye/cOPD29GD9+Irfddgeenl7t97n77vv46qul5Ofn0b9/An//+73ExfUHYP/+vbz0\n0nNkZh7G3d2DyZOncMcdf7dqYi/EqbjoNNw6ZxBvf3+AbQdLWfT5Hu64dDCJ0QFdel9Dq4kft+Wx\nfEsuhlYzOq1l3e3sMfax7vZsBPi4cc+CoXy3KcfyZ3MOhwuque2SJLykaY04TdsOlrBsfRYKcPNF\nA+kb5mPrkIQQQpwGeUv7DDRv/fxogvu7On/VDK3Nls93gSNHCikrK2XEiJEnPSciIrLDxz///COz\nZl3Iq6++TXLyaF5++Xl2797JY489yaeffsWNN97KF198ysaN6wFYseJ73nzzVW6++TYWL/4Is9nE\ntm2/nvR+//rXvTQ1NfLSS2/y3HOvYDAYuOuuOzCZjiXGb731OtOnn8977y1hzJjxPPXU45SXl3Pe\nedO4/vqbCAkJ5ZtvfiQk5Pg3BhYtehKAN954jzfeeJeWlhb++99HAHj33Y9wc3Pjjjvu4q9/vZvW\n1lbuumshQUFBvP32h/znP0+RlZXBI4/8q8M1X3/9ZRYsuIp33vmIkJBQ7rzzNmprazCZTNx3392M\nHj2Wjz76gscff4rNmzfy4Yfv/fEPRoguoNNquPnCgYxP6oWh1czzX+xj64ESzF3QPqGx2cjqnQU8\n8NZWvt6QjaHVzIj+wfz3ptHMnRTjsAluG61Gw5yJMdy9YBi+nq6k5VXznw92UFTRPctMhGPLKKjh\n7e8PAjD/3H4Mjz/+TWYhhBD2qUfP5DauWIQpf591LqaaMeXspO7N6055qjZyMB7n//20L11VZVlP\n5uvr1+H4tGkTO3x8883/x2WXXQ5AWFhvLrxwTvvnBg1KYtasC0hMHATAhRfO4eOPPyA7O5PJk6ew\nbNkXXHDBxcycORuAu+76J9u3bzthPLt37yQ1dT8//rimfabz4YcfZ9as89i27VfGjp0AwDnnnMv5\n518AwF/+cjtff72UtLQDTJgwCXd3DzQaTfvM7+8VFBQQFxdPWFhvXF1duf/+hygtPVpC6e+Poih4\neXnh5eXFihXf09rayj333N9eUvngg//hsssuIjs7i759LR0w5837U/vXd999DzJ37mxWr/6Z886b\nRk1NNYGBQfTqFUZYWG+eeup59HrnaFYjHI9Go3D9rAG46rSs2V3IG9+m8tWGLM4bHsH4pDA83Dr3\n1J1dVMva3YVsPViCodXypl1EsCcLpsYzoE/37HfbnQb08eff1ybz4pf7yCup5/EPdnLrJYMY2MUz\n5MJxlVY38eKX+zCazJwzLJzpIyNP/SAhhBB2o0cnuY7Cx8ey32NtbcdGNO+++3H7vxcuvIXW1tb2\nj3v3Du9w7owZs9iyZROvvvoC+fn5ZGSkU1R0pH3mNTs7kzlzLm0/X6vVkpAw4ITxZGVlYjQaueCC\naR2OGwwGcnJy2pPc384ue3lZyoaNxlZOxzXX/JnHH3+Ydet+YdiwEYwbN4EZM2afNJ6yslKmT590\n3Odyc7Pbk9whQ4a2H3dzcyMmJpasrEwuuWQe8+cv4JlnnuCdd95k5MjRTJo0hcmTp5xWrEJ0BY2i\ncNX0eHoFevDTtjxKq5r4ZPVhlm3IYvygXpw3IoKwwNPfaqjFYGLrwRLW7C4kt7iu/XhClB/nDAtn\nRP9gp16vGuDjxn1XjuDN71LZfbic5z7by5XT45kyLPzUDxY9SkNzKy98sbd9q6Arp8U51Jp0IYQQ\nPTzJPZPZVLWlgfoPbj+2FvdEFA1e17yEorfuHpe9e4fj7x/A3r27GThwUPvx3yaRbetq2+j1+g4f\nP/nkf/j1143MmDGbKVPO49ZbF3LffXcdC11RjmsG5eJy4nVrJpORgIBAXnnlreM+5+NzbL2Si8vx\nM6Gn23DqvPOmMXLkKDZv3si2bVt4/fWX+eqrpbz55vvodO4dzjUajcTHJ/Dww48fd52AgGMzNVpt\nx+FuMhnRai0v6hcu/Dtz585n06YNbN36Kw8++E9mzbqIf/zjgdOKV4iuoCgK05IjOXd4OHsOl7N6\nZwFpedX8squQX3YVMrBvAOeNiGBwTCBGk5kmg4mmFiNNLUaaW4ztH2cX1fJrajFNLZY3tTzddIxP\nCmPy0N5nlCg7Or2rlv+bm8SydVks35LLhysPUVTRwJ/O7efUCb44fXWNBl5Yuo+iikYigj259eJB\nMjaEEMIB9egk90woek+0fYYf7ap8gr23FA3aPsOsnuAC6HQ65sy5lM8++4jzz5+Nv3/HEru6ujqa\nmo7fH7hNY2MDy5d/x5NPLmqfZW1ubm4v/wXo1y+e1NT9XHDBxYAlGU1PT2PAgIHHXS86Ooaqqkpc\nXFwIDe3VHsNjjz3INdf8mUGDkk75Nf3Ru+Imk4nXXnuJGTPOZ+bM2cycOZvMzAyuvfZyMjMPM3jw\nYODY46Oj+/Ljjz8QEBCIh4cHAPn5ebz00nP89a934eFh+ZmkpR1k+PDko9+TRrKzs7nggjkcOVLI\nxx9/wMKFf2f+/AXMn7+ApUs/5bXXXpIkV9gFrUbDiP4hjOgfQkFpPat3FfBrSjGp2ZWkZleiKH/8\n/lub2HAfzhkazsiEEFxdHHu97dnSKArzzomlV4AH7/+YxqodBZRUNvGXiwfKtjA9XGlVI899vpeS\nqiYCffSyVZAQQjgwefY+A26j59Nw5ODxzacUDbi44TZ6fpfd+9prbyA1NYUbbria66+/6WjprcLO\nndv58MN3MRqN9O+fcMLHurrqcXNzZ/36tfTp05fq6irefvsNmpqaMBgMAFx++VU89NB99O8/gOHD\nk/nmm2Xk5+edMMlNTh5FXFx/HnrofhYu/Dvu7u68/vpLpKcfIjq672l9Pe7u7tTV1ZKXl0vv3uHo\ndMeGolarJSMjnf379/K3v92Dt7cPP/zwDZ6enkRG9gHAw8OdnJxsamtrmD79fN5/fzGPPPIAN954\nKyaTiWef/R8Gg6FD1+aPPnqPiIhIIiOjWLz4dTw8PJgyZSqg8ssvqzAajVxxxTW0trayYcO6E37t\nQthaRIgX185M4NLJsWzcV8Qvuwoor2nGRafB3VWLm16Hu6sOd70Wt6N/+3rpGZMYSlSot63DtxsT\nBocR4u/Oy8v2sz+rgv9+uJM75g0m2M/91A8WTifrSC0vLN1LXWMrUaFe3HnZEPy89Kd+oBBCCLsk\nSe4Z0PiG4nnJQzRv/RxT7q6j++RaZnC7ep9cnU7HM8+8wPLl37J8+fe8+uqLtLS0EBERwYwZs5g3\n708nbeKk0+l45JHHeeWVF7jqqssICAhk8uQpBAUFceiQpXPk5MlTuOee+3n//cW8+OIiJkyYdDQB\nPMH3QaPhyScX8eKLi7jrrtsxm1WSkobwwguvta+9PZUJEyaxbNnnXHfdAl5++c32hlht/v3vR3nh\nhWe5666FNDU1079/As8++xLe3pYX6fPnX8G7775Ffn4uTzzxLIsWvczLLz/HbbfdgE7nQnLyKP76\n17vQ/KbM7MIL5/Dmm69SVFTIkCHDePHF19tnfp9++gVeeeV5brjhajQahVGjxvLXv96FEPbKy92F\nmaOjmDEqEpNZRaeVksozFR/px7+uTeaFL/ZSWN7AY+/v4Pa5Sd26N7GwvT2Hy3n9mxQMRjOD+gZw\n65xBMoMrhBAOTlFPd5GkAzAaTVRVHV+2azQaKC8vIigoDJ3OOh1z1ZYG1KZaFHefLilRFien02kw\nGk9QMv4HJkxI5rHH/nfSxP1MdcWYapN+43UAxL/9nlWvK6xHq9UQEOBJZWUDJtOZjUVhfxqbjbz+\nTQop2ZVoNQpXz+jPpCG9T/3AbvZ/v9wLwCvnPgXIOLSGNbsL+einQ6gqTEgK45qZ/eUNozMk41DY\nCxmLPYO/vwc63amXXMkz+VlS9J5o/MIkwRVCCAfn4abjr5cNZvpIy6z4eyvS+PjndExmeZHkrFRV\n5ct1mXy40pLgXjyhL9fPSpAEVwghnITU4wghhOjxtBoNl58XR3iQJx+sPMSqnQUUVTTwlzmD8HQ7\ncad54ZiMJjPvLj/Ir6klaBSFa2f2Z6IdztwLIYQ4e5Lkih5h48Ydtg5BCOEAJg7pTa9AD15Ztp/U\nnCr+8/4O7pg3uEdtteTMcoprWfJzOpmFtehdtdw2ZxBJMYG2DksIIYSVSV2OEEII8RtxEX78+9qR\nRIZ4UVLVxH8+2Mn+rApbhyU6oaKmmbe+S+XR93aQWViLr5cr/7xiuCS4QgjhpGQmVwghhPidQF83\n7r9qBG//cICdh8p4/ou9zJ/Sj+kjI/9wn29hXxqbjSzfkstP2/MxmszotArTkiOZPbYPHlKGLoQQ\nTkuSXCGEEOIE9K5abp0ziG83ZvPtphw++yWDQ3nVXDcrAR8P63ZVF9ZlNJlZt+cI32zMpr6pFYDR\niaFcOimGINkLWQghnJ4kuUIIIcRJaBSFORNjiAj24t0VaezJKOehxdv48+wBUupqhxqbjezPquDr\njdmUVFq2FIyP8GX+uXHE9PaxcXRCCCG6iyS5QgghxCkkJ4TQN8yHt74/QHp+Nc99vpepIyK4bEos\nLqexX5/oGi0GE4cLqjmYW0VaXhU5xXWoquVzof7uXDalH8PigqTEXAghehhJcoUQQojTEOjrxr0L\nhrFiay5fb8hm1c4CDuZVccuFA4kI8bJ1eF3OZDZTUNpAZV0zDU1GGptbqW+2/N3QbKShyfK3yWzG\nzUWLq6sWNxctelct+qN/Wz7W4aHX4eF2/N9ueh2aowmp0WTG0GrGYDRhaDVhaDXTYjTR2GzkcEEN\naXlVZB+pxWRW22PUahT6hvswekAok4f2ln1vhRCih5IkVwghhDhNGo3C7LHRJEYH8Oa3qRSWNfDo\n+zu47JxYzkuOaE/QnEFLq4mswhoOF9SQXlBNZmEtLa2mLr2nAri6aDGazB2S15Oer0DfMG8SovwZ\n0MeffhG+uLnKSxshhOjp5DeBA3j88YdZseL7k35+6NDhvPzym90SS2pqCiaTkcGDh1JUdITLLruI\nt9/+gISExLO6Xm1tLRs2rGX27IusGqcQQnSlvmE+PHz9KD5ZfZj1e4/wyerD7Muq4JoZ/Ql20MZG\nRpOZlOxKDuVVcbightziuuMSzRB/d3oFeODp5oKnu87yt5uu/WMPNxe0GgVDq4lmg4mWVhMtbX8f\nPdZsMNHUYqSx2Ujj0b+bWlppbDHS1GJqT6Q1ioLeVYOrTouriwZXFy2uOi16Fw2RId4M6ONPfKQf\nHm7yUkYIIURH8pvBAfz1r3fzl7/cDkBpaQk33XQtzz77Ev36xQHg4tJ92yDceedt/O1v9zB48FCr\nXG/x4tfJzMyQJFcI4XD0rlquOz+BpJhA3v8xjdTsSh54awtThkVwwbg+eDtIB+bymibW7TnChn1F\n1DYY2o8rCvQJ9SYu0pf4CD/iInzx9dJ3aSxms0pLqwkXnUZKjYUQQpw1SXIdgJeXF15elvVeBoPl\nBYivry+BgUE2iObU5WNndDXVutcTQojuNqJ/MDG9fVi6NoMtqSX8vCOfjfuPMGtMH6YmR6J3sb/G\nVGazyv6sCtbsLmR/ZkX7M3t4kCfD4oOJj/Qltrcv7vrufZmg0Sjdfk8hhBDOR36TOInFi98gNXU/\nOp0Le/bs4sYbb+Hw4XRqaqp56qnn28+7/fabiYmJ5e9//wcAO3Zs47XXXiI7O4vQ0FAuvngu8+df\ngUZz/Dvo8+ZdSFNTE//97yPs3r2TP//5ZgB27tzOE088Sn5+HtHRfbn77vtITBwEQHNzM6+88gJr\n1vyM0WgiKWkwd9xxF5GRUSxe/AbLln0BwIQJyWzcuIOqqipefvk5tm3bQm1tDUFBwcyZM4+rr76u\na7+BQgjRCf7eem66cCAzRkWxdG0mKdmVfLkui9U7C5gzMYbxSb3QnuB5tbvV1Lewfl8R6/cUUlHb\nAoBOq5CcEMI5Q8OJi/CVTsRCCCEcXo9Ocl/d+w6pFWndft+BgQncNuTPVr/utm1buP76m7j99jvx\n8PDg8OH0Pzw/Ly+Hf/zjb9x22x2MGTOe7OxMnnnmf5jNKldccfVx57/11gdcdtmF3Hzz/zFr1oXU\n1dUC8PXXy7jvvn8TEBDI00//l8cee5BPPlkGwNNP/5cjRwp58snn8fDw4IsvPuH222/m44+XsmDB\n1ZSUFJOXl8vjjz8FwOOPP4TBYGDRopfw8PBk1aqVvPHGy4wePYb4+AQrf8eEEMK6okK9+fufhnIg\np5Iv1mSSW1LHeyvSWLktj3mTYxlqo+1squpa+HZTNhv3FbWvsw32c+OcYeGMTwrDx0FKq4UQQojT\n0aOTXGej0+m49tob0OlO78f60Ufvc84553HppX8CIDw8gtraWl599cUTJrn+/v4oitJePt2W5N50\n060MH54MwPz5V/DAA/fQ3NxMVVUlP/20gk8//Yrw8AgA7rnnfrZvn8PKlSuYO/cy3Nzc0Ol07aXX\nY8aMY9SosURF9QHgmmv+zPvvv0NWVqYkuUIIh5EYHcC/r/Nn+8FSvlyXSVFFIy8t209YoAfjBvVi\n7MBeBPi4dXkcDc2tLN+Sy+odBRiMZhQFhsUFMWV4OInRAU7VDVoIIYRo06OT3K6YTbWlkJDQ005w\nAbKyMsnISGf9+jXtx8xmMy0tLdTUVOPr63da12lLYAG8vb0BaGlpJjs7C1VVue66BR3ONxgM5OZm\nn/Bac+bMY926NXz99VIKCvI5dCgNg6EFs9l82l+XEELYA42iMDoxlBH9g1m7u5Dvf82lqKKRL9dl\nsWxdFonR/oxLCmN4fLDV1+0aWk2s3lnA8i25NDQbARgRH8zcyTGEBXpa9V5CCCGEvbFqkms0Gnn6\n6af59ttvMRgMnH/++dx///14eHic8Pwvv/yS1157jbKyMoYPH84jjzxCVFSUNUPqUfT6U3e9NJmO\n7XFoNBq56KJLmD//iuPO8/T0Ou37ak/QAVNVLdfXaDS8/faHaLUdX8B5eh7/IktVVe6++w6Ki4s4\n77zpzJgxm7vu+icLFlx62rEIIYS90Wk1TE2O5Jxh4aRkV7J5fxF7MspJzakiNacKvauWkf1DGJ/U\ni7hIv07NrprMZjbuK+KbjdlU11saFSZE+THvnH7E9Pax1pckhBBC2DWrJrnPP/88P//8My+99BKK\novDPf/6T//znP/z3v/897tx169bxyCOP8Oijj5KYmMiiRYu4+eab+f77789oNlKcnE7nQn19ffvH\nZrOZI0cKiIuLByA6ui/5+XlERES2n/PLL6vYtGkdDzzwyEmuevovvqKj+2I2m6mtrSEpaQhgSbIf\neuh+Zs6czYQJkzqsTcvOzmLHjm18+OHn9O0bA0BxcREGQ4t0YRZCODydVsPQfkEM7RdEfVMr2w+W\nsCmlmKwjtWzcX8TG/UV4e7gQH+lH/0g/4iP9iAjxOmXSW1PfQnZRLXkldWzaX0xxZSMAUaFezDsn\nloHRAdJMSgghRI9itWyypaWFJUuW8Pjjj5OcbFmf+eijj3LDDTdw9913ExAQ0OH8d955h7lz5zJn\nzhwAnnnmGSZMmMAvv/zC9OnTrRVWjzZw4CC+//5rVq/+mYSEAXz++cfU1R1Leq+44mpuvPEa3nrr\nNWbOnE1BQT6LFv2Pc8+ddsLuygAeHu7k5GRTW1tzyvtHRfVh0qQpPPHEo9x11z8JCQnlww/fZdu2\nLdx660IA3N09KC8vp6joCN7e3mi1Wn755Wdmz76I4uIiXn75eQBaWw1/cCchhHAsXu4uTBkewZTh\nERRVNLA5pZgtqcVU1Law81AZOw+VAeDppiMuwpLwttmRVkpuSR35pfUUlNVTebRLcpsQP3cumRTD\nyAEhsuZWCCFEj2S1JPfgwYM0NjYyatSo9mPJycmoqsqePXs499xz24+bzWb27t3Ln/70p/ZjXl5e\nJCYmsmvXLklyrWTGjFmkpR3k6acfR1E0zJ59EVOnHvvexscn8MQTz7J48Rt8/PEH+Pn5M2vWRdx8\n820nveb8+Vfw7rtvkZ+fyx133HXKGO6//yFeeeUFHnroPpqbm4mPT2DRopfb1/FOnz6TVatWctVV\nl/H559/wz3/+m3feeYslSz4gJCSEmTNn4+Pjw6FD3d8FWwghukNYoCeXTo5l7qQYSquaOJRfzaG8\natLzq6iobWFPRjl7MspxP/rr9dWvUzo83s1VS1SIF1Gh3sSE+5DcPwTdCZaRCCGEED2FolqpDnTl\nypX87W9/48CBAx2Ojxs3jttvv50rrji27rOqqooxY8awZMmS9llfgDvvvBOwlD2fDaPRRG1t83HH\nW1sNlJYWEhQUhk4n2yQ4MkWxrAE2mczYsoLZaDRQXl5ESMj/t3fnwVHWCRrHnz5oks4dTg2X4gEl\nIQIRCzYUBSIo7FAuFWAGhAlGUUGUMYRwKFc4lKEcIKwsl4AchjKuRORQl3WrZFWUGNgZCQFEkgER\noiEqBDrpY/9g0k5MNIhJ3k6/308Vf/Tv7X77SfhVV55+3/f3xqlZs/qdUwUTxkuSum58tV73i/pj\ns1kUFeXUd9+Vy+PhVHo0nJKyKyosvqjC4jJ92vwVSdLt345VxzYR6nRzpLrd3kqhdot8rM0Hg/B5\niEDBXDSHyMhQ2e11f5Fbb0dyr1y5Ioej5h/7DodDFRXVTzW9evWqf9tPn/vP15D+WjabVbGxNRc0\ncrns+uYbq2w263X9UhD4alvsqjH5fFZZrVZFRzuva8GvG1HbXEZgiYqqfVE9oL7Exobpzluv3WJt\n1I5rJXfRpCQjIwG14vMQgYK5CKkeS25ISIgqKytrjFdUVNRYXbmqFPy0/FZUVCg0NPSGM3g83p89\nkuv1euXxeGWx8HV3UxYoR3I9Hq+8Xq/KysrVrJm7Qd6jtPRyg+wXvx3fFsNIVZ8NzEMEAuYhAgVz\n0Rwa/Uhu27Zt5Xa7VVpa6l9kqrKyUmVlZWrTpk2158bExCg0NFQlJSXVxktKSpSQkPCbcng8NUss\n91gNHlXFNlAWW6768qQhNNR+UR+ufbh6PD7+n9DofpxzzEMEAuYhAgVz0RyurwTU2zmfXbp0kdPp\n1KFDh/xjeXl5slqtNYqrxWJRQkKC8vLy/GOXLl3S0aNHq12jCwAAAADAr1GvpyuPGjVKixcvVmRk\npBwOh+bOnasRI0YoOjpaly9fVnl5uVq1aiVJGjdunKZOnaquXbsqPj5ey5cv10033aT+/fvXVyQA\nAAAAgMnUW8mVpLS0NFVWVmrKlCmyWCwaMmSIZs+eLenafXFXrVqlwsJCSdKgQYM0a9YsZWVlqays\nTL169dKaNWtks9nqMxIAAAAAwETq7RZCgcDt9ujixfJaxq/d7oVbCAUHu90qt9vYay0ack4dfzRF\nknTH+k31ul/Un6qV3EtLL3PdDxrN5P+eLkn694FLJTEPERiYhwgUzEVziIlxym6v+6Ao99MBAAAA\nAAQNSi4AAAAAIGhQcpuIp56aqKSkxFr/ffrpQUlSUlKi3n//v+rl/fbs2aX77+/3s9tLSi5o//53\n/Y+Tk3+n7du33PD7eTwevf569g2/HgAAAACkel54Cg1r6NDf6fHHJ9cYj4yMkiTl5u5TRERko2T5\n85+XKCoqSvfdN7he9vfBB/+jFSuWaeTI39fL/gAg2NzVoovREQAAaBIouU1ISEiIWrRo+bPbf2lb\n/avf9cqCaP0zAGgQkxIeMToCAABNAiU3iCQlJSoz8wUNGDBIixbNk8PhkM/n0/7978pqtenBB4dp\n8uSp/ts05eRk6803c/TVV2flcDjUs+c9Sk+fqdjYFr/4PosWzdOHHx6QJOXn5yknZ5ck6fz5c3r2\n2ad0+PBnio1toQkTHtOwYcP9r8vJydaOHa/p4sVv1anTrXrssSd177199Nlnh/T88zP8P8PKlf+h\nhIQe2rhxnd55Z69KSs4rLCxMffv207PPZigiIqwhfn0AAAAAgoCpS+7ZFS/p8l//r9HfNyy+u+Ke\nebbB32f37rc0cuQftG7dq8rPz9OyZUsUH5+gAQMGaf/+97RmzcuaOzdTt912h4qLi7R48Xy9+upG\nTZ067Rf3+8wz01RSckGRkVH605+m+8d37cpVevpMpaXN0Ouvv6alSxfpnnvuVevWbfT227naunWz\npk2boU6dbtXHH/+vZs5M06pVaxUfn6CMjOf04osLlZu7T5GRUcrO3qq3387VnDmZuvnmOBUWFmjh\nwrm67bbbNXbsuIb+1QEAAABookxdcpuat956U3v3vl1tbNy4CRo/vvZT2Fq1aq1Jk56WxWJRhw4d\ntXNnjv72t79qwIBBio2N1axZc5SU1F+S1LbtTerbN0lffvlFnTnCw8PlcDjUvHlzxcTE+MeHDBmq\nBx/8V0nSI488rpycHfriixNq3bqNNm/eoEcffcL/fsnJv1dh4TG99tpWZWa+oPDwcEk/nnLdsWMn\nzZ49Vz17Jvrz5eb+p06dqjsfAAAAAPMydcltjKOp9em+++7XhAkTq41FRv78QlNxce1ksVj8j8PC\nwuV2V0qSevTopRMnjuuVV9aquLhIX355SqdPn1J8fMIN54uLi6uRy+Vyqby8XOfOfaWXXlqqFSuW\n+Z/jdrvVvn2HWveVlNRfR47ka+3al1VcXKRTp07q738v1gMPDLvhfAAAAACCn6lLblMTFhaudu3a\nX/fzHQ5HjbGqBZ727dutpUsX6YEHhqlHj14aPXqMdu3aqeLiohvOZ7Xaan0/r9crSZo+fZa6dete\nbbvdXvsU3LRpvbZv36Jhw4arT59/UUrKo1q9OuuGswEAAAAwB0quSeXk7FBy8mhNmvSMf+zll1f+\nij1Y6n7KP4SHh6tFi5a6cOF8tZK+bt1qhYSEaty4lGpHnK/ly9YTTzylESNGSpK8Xq/OnCmudno0\nAAAAAPyU1egAMEZUVLTy8z/TqVMnVVR0WllZf1F+fp4qKiqu6/WhoaE6d+4rlZRcuK7nP/xwirZu\n3ax9+3br7NkzysnJ1pYtGxUX1+4f+3NKko4dK5DL5VJUVLQ+/vhDFRcX6eTJE1q0aK7Onj2jysrr\nywcAAADAnCi5JjV16jQ1b95cEyemaMqUx/X1119p0qSndfr0l3K5XHW+fvjwf1NR0WmlpPzBfzry\nL0lOHq0//vERbdiwRg8/PFJvvpmjmTPnaODAQZKk+PgEJST00JNPPqKPPjqg2bPn6dtvv1FKyhil\npz8jm82uMWPGq7Cw8Df/7AAAAACCl8VXdZFmEHC7Pbp4sbyW8Qp98805tWx5k+z2mtepommx261y\nu+su1g2pIefU8UdTJEl3rN9Ur/tF/bHZrIqNDVNp6WV5PMbORZgX8xCBgHmIQMFcNIeYGKfs9prr\nAP0UR3IBAAAAAEGDhaeAABMW373uJwEAAACoFSUXCDBN7f7NAAAAQCDhdGUAAAAAQNAwScm9dg/W\n4FliC0b7cS5d//2CAQAAADQ8U5Rcm+3aClwVFXXfGge4HlVzqWpuAQAAAAgMprgm12KxyumM0A8/\nlEqSHI7msnAArsny+ayGLQ3v810ruD/8UCqnM0IWiym+JwIAAACaDFOUXEmKiIiRJH/RRdNltVrl\n9Rp7/zOnM8I/pwAAAAAEDtOUXIvFosjIWEVERMvj8UjiAt2myGq1KjraqbKycoOKrkU2m40juAAA\nAECAMk3JrWKxWGW3U1CaKpvNqubNm6tZM7dhpywDAAAACFy0PQAAAABA0KDkAgAAAACCBiUXAAAA\nABA0KLkAAAAAgKBh8fl8QbPMsM/nYzGioGeR3W6V2+0VK2TDOMxDBALmIQIB8xCBgrloBjabVRaL\npc7nBVXJBQAAAACYG6crAwAAAACCBiUXAAAAABA0KLkAAAAAgKBByQUAAAAABA1KLgAAAAAgaFBy\nAQAAAABBg5ILAAAAAAgalFwAAAAAQNCg5AIAAAAAggYlFwAAAAAQNCi5AAAAAICgQckFAAAAAAQN\nSi6aNI/Ho1GjRmnGjBlGR4EJ5efna+zYserZs6cGDBigF198UVevXjU6FkzA7XZryZIl6tOnj3r1\n6qXnnntO5eXlRseCyXz33XeaM2eO+vXrp8TERKWmpurkyZNGx4KJbd26VXfeeafRMRAAKLlo0tat\nW6cjR44YHQMmdObMGaWmpqpbt2564403lJmZqb1792rJkiVGR4MJLF++XO+9956ysrK0du1aHTx4\nUAsXLjQ6FkwmIyNDR44c0YoVK7Rjxw5FREQoJSVF33//vdHRYEJFRUVatmyZ0TEQICi5aLKOHTum\nzZs3q2vXrkZHgQnt3r1brVu31owZM3TLLbcoKSlJU6dOVW5urrxer9HxEMRcLpe2bdumadOmKTEx\nUb169dKCBQu0c+dOlZaWGh0PJnHhwgW9//77mjdvnnr27KnOnTtr6dKlunTpkg4cOGB0PJiM1+tV\nRkaG4uPjjY6CAEHJRZNUWVmpjIwMpaWlqU2bNkbHgQkNGTJEL7zwgiwWi3/MarXq6tWrqqioMDAZ\ngl1BQYHKy8vVu3dv/1hiYqJ8Pp8OHz5sXDCYitPp1Nq1a3XXXXf5x6o+DzmSi8a2YcMG2e12jRkz\nxugoCBCUXDRJq1atUqtWrZScnGx0FJhUp06ddPfdd/sfu91ubd68WYmJiQoJCTEuGILe+fPnZbPZ\n1LJlS/9Ys2bNFBMTo6+//trAZDCT8PBw9e/fXw6Hwz+2fft2uVwu9e3b18BkMJsTJ05o/fr1WrJk\nSbUvnmFudqMDAD9VUFCghx56qNZtvXv3Vnp6urKzs5Wbm9u4wWAqdc3DLVu2+B/7fD7NmTNHx48f\nV3Z2diMlhFlduXKlWrGo4nA4OIsAhjlw4ICWLVumCRMmqEOHDkbHgUlUndk3ZcoUtW/fXp9//rnR\nkRAgKLkIOJ07d9aePXtq3RYaGqrU1FRNnz5dbdu2beRkMJO65mGViooKzZw5U++8845WrlxZ7dQ9\noCGEhISosrKyxnhFRYWcTqcBiWB2+/btU3p6ugYPHqxp06YZHQcmsnr1aoWFhWns2LFGR0GAsfh8\nPp/RIYDr9cknn2jcuHHV/pBzuVyyWCxyOBzKz883MB3M5vLly5o8ebIOHz6srKws9evXz+hIMIHD\nhw9r9OjR+uijjxQbGyvp2tGMhIQErV69Wv379zc4Icxk27ZtWrhwoZKTkzV//nxZrVwJh8YzcOBA\nlZSUyG6/dtzO4/HI5XLJ6XRq/vz5Gj58uMEJYRSO5KJJ6d69u959991qY88//7yioqL49hiNyu12\na9KkSTp69Kg2btyoHj16GB0JJtGlSxc5nU4dOnRIgwcPliTl5eXJarUqISHB4HQwk5ycHC1YsEAT\nJ05UWlqa0XFgQlu2bJHb7fY//uCDD5SZmamdO3eqRYsWBiaD0Si5aFJCQkLUsWPHamOhoaEKCwur\nMQ40pE2bNungwYNasWKF2rVrp5KSEv+2li1bsvgFGkxISIhGjRqlxYsXKzIyUg6HQ3PnztWIESMU\nHR1tdDyYxLlz57RgwQINHTpU48ePr/YZGB4eXu2yDqChxMXFVXtcUFAgSfxNCEouANyIPXv2yOfz\n6emnn66x7Z9PIwUaQlpamiorKzVlyhRZLBYNGTJEs2fPNjoWTGT//v1yuVzas2dPjfULpk+frtTU\nVIOSAQDX5AIAAAAAggirAwAAAAAAggYlFwAAAAAQNCi5AAAAAICgQckFAAAAAAQNSi4AAAAAIGhQ\ncgEAAAAAQYOSCwAAAAAIGpRcAAAAAEDQoOQCAAAAAIIGJRcAAAAAEDQouQAAAACAoPH/IYz5ueSf\n698AAAAASUVORK5CYII=\n"
}
},
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7kAAAFVCAYAAAAqvigQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAO\nxAAADsQBlSsOGwAAlL1JREFUeJzs3Xd4lFX2wPHv9PReCEkgJCSBQAiB0JsiAoIFUVlRsZddV1x3\nLbuW1VVX92fDvmvD3gs2BFFpUqTXhISQTkJ6rzOZmff3x5AgAgJhkik5n+fhCZnMvO9J5mYy573n\nnqtSFEVBCCGEEEIIIYRwA2pHByCEEEIIIYQQQtiLJLlCCCGEEEIIIdyGJLlCCCGEEEIIIdyGJLlC\nCCGEEEIIIdyGJLlCCCGEEEIIIdyGJLlCCCGEEEIIIdyGJLlCCCGEEEIIIdyGJLlCCCGEEEIIIdyG\n1tEB2JOiKFgsVkeHIbqZRqOW51k4nIxD4QxkHApnIONQOAsZi+5Po1GjUqlOej+3SnItFiu1tS2O\nDkN0I41GTVCQNw0NbfIiJhxGxqFwBjIOhTOQcSichYzF3iEw0AutVnPS+0m5shBCCCGEEEIItyFJ\nrhBCCCGEEEIItyFJrhBCCCGEEEIItyFJrhBCCCGEEEIItyFJrhBCCCGEEEIItyFJrhBCCCGEEEII\ntyFJrhBCCCGEEEIItyFJrhBCCCGEEEIItyFJrhBCCCGEEEIItyFJrhBCCCGEEEIItyFJrhBCuImS\n5xdR8vwiR4chhBBCCOFQWkcHIIQQwj6a9+5xdAhCCCGEEA4nM7lCCCGEEEIIIdyGJLlCCCGEEEII\nIdyGJLlCCCGEEEIIIdyGJLlCCCGEEEIIIdxGl5JcRVG44YYbWLx4cedtTU1NJCYmHvNv165dJzzO\nmjVrmD17NsOGDWPevHmkp6d3JRwhhBBCCCGEEALoQndls9nMww8/zPr16xk/fnzn7dnZ2eh0Olau\nXIlafSR3DggIOO5xsrKyWLhwIXfeeSeTJk3irbfe4sYbb2TFihX4+/uf/ncihBBCCCGEEKLXO62Z\n3JycHC6//HI2bNiAn5/fMV+Ljo4mPDyc0NDQzn86ne64x3r33XcZO3Ys1157LXFxcTzyyCN4eXmx\nZMmSrn83QgghhBBCCCF6tdNKcrdu3crw4cP56quv8PX1Pepr2dnZxMbGnvKxduzYwahRo44EolYz\n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\n"
}
},
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7kAAAFVCAYAAAAqvigQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAO\nxAAADsQBlSsOGwAAm7lJREFUeJzs3Xd8VGXWwPHfnZreCyEJpJAAofcuCoiIDVFZG5a17brqurZ9\nXV1ddd1dXXvbtaAuKjbsCDZ67y2BENJJCOm9TL3vH5ME6SGZZGaS8/18MGZy596T5MmdOfd57jmK\nqqoqQgghhBBCCCFEN6BxdQBCCCGEEEIIIYSzSJIrhBBCCCGEEKLbkCRXCCGEEEIIIUS3IUmuEEII\nIYQQQohuQ5JcIYQQQgghhBDdhiS5QgghhBBCCCG6DUlyhRBCCCGEEEJ0G5LkCiGEEEIIIYToNnSu\nDsCZVFXFZrO7OgzRybRajfyehcvJOBTuQMahcAcyDoW7kLHY/Wm1GhRFOeN23SrJtdnsVFY2uDoM\n0Ym0Wg0hIb7U1DTJSUy4jIxD4Q5kHAp3IONQuAsZiz1DcLAPOp32jNvJcmUhhBBCCCGEEN2GJLlC\nCCGEEEIIIboNSXKFEEIIIYQQQnQbkuQKIYQQQgghhOg2JMkVQgghhBBCCNFtSJIrhBBCCCGEEKLb\nkCRXCCGEEEIIIUS3IUmuEEIIIYQQQohuQ5JcIYQQQgghhBDdhiS5QgghhBBCCCG6DUlyhRBCiG6q\n8OUXKHz5BVeHIYQQQnQpnasDEEIIIUTnqN+7x9UhCCGEEF1OZnKFEEIIIYQQQnQbkuQKIYQQQggh\nhOg2JMkVQgghhBBCCNFtSJIrhBBCCCGEEKLbaFeSq6oqt9xyCwsWLGh9rK6ujv79+5/wb9euXafc\nz6pVq7jooosYOnQo8+bNIzU1tT3hCCGEEEIIIYQQQDuqK1utVp544gnWrVvHxIkTWx/PyMhAr9ez\nfPlyNJqjuXNQUNBJ95Oens7dd9/N/fffz5QpU3jvvfe49dZb+fHHHwkMDDz770QIIYQQQgghRI93\nVjO5mZmZXH311axfv56AgIATvhYbG0tkZCTh4eGt//R6/Un3tXDhQsaPH89NN91EYmIiTz75JD4+\nPnz55Zft/26EEEIIIYQQQvRoZ5Xkbt26leHDh/P111/j7+9/zNcyMjJISEho87527NjBmDFjjgai\n0TBq1Ch27NhxNiEJIYQQQgghhBCtzmq58jXXXHPKr2VmZmK1WrnuuuvIzc0lMTGR+++/n2HDhp10\n++LiYiIiIo55LCIigi1btpxNSCfQaqWWVnem1Sq/+ii/a+EaMg6FOzibcSivjaKzyPlQuAsZiz2F\n0qatzvqe3FPJzMwkODiYv/zlL/j6+vLxxx8zf/58vvnmG+Lj40/YvqmpCaPReMxjBoMBs9nc7hi0\nWg0hIb7tfr7wHIGBPq4OQQgZh8IttGUcymuj6GxyPhTuQsaiACcmuT/99BMajQYvLy8AhgwZwt69\ne/nss8/485//fML2Xl5eJyS0ZrMZb2/vdsdgs9mpqWlq9/OF+9NqFQIDfaiubsBmU10djuihZBwK\nd3A247Cior6LohI9jZwPhbuQsdgzBAR4o9OdeabeaUmuj8+xV00URSExMZEjR46cdPvIyEhKS0uP\neay0tJTIyMgOxWGz2Tv0fOHuHIPaZlPldy1cSMah6Hpv7H4XgDuH/bb5kbaPQxmnovPI+VC4CxmL\nPUPbLmA4ZcF6eXk5o0ePZvXq1a2P2Ww20tPTSUxMPOlzRo4cybZt21o/t9vtbNu2jdGjRzsjJCGE\nEKJbSStPJ6083dVhCCGEEG7PKTO5oaGhDBs2jH/+85/4+voSFBTEggULqKqq4tprrwUc9+DW1tYS\nEhKCVqvluuuuY968ebz99ttMmzaN//3vfzQ1NTFnzhxnhCSEEEIIIYQQogdyWumxF154gTFjxnDv\nvfdyxRVXUFRUxAcffEBISAgAS5cuZfLkyRQVFQEwaNAgXnzxRRYvXszll19ORkYG77zzzgmtiYQQ\nQgghhBBCiLZq90zuihUrjvk8MDCQp5566pTbz507l7lz5x7z2MyZM5k5c2Z7QxBCCCGEEEIIIY4h\nTaSEEEIIIYQQQnQbkuQKIYQQQgghhOg2JMkVQgghhBBCCNFtSJIrhBBCCCGEEKLbkCRXCCGEEEII\nIUS34ZQ+uUIIIYQQQgghupaqqjSZbTQ0WTFbbUSG+KBRFFeH5XKS5AohhBBCCCGEGyssq2fpxlxq\n6s3UN1lpMFlpaHL8s6tq63bTRkZz/cz+LozUPUiSK4QQQgghhBBuqsls5eXPd1NW3XTSrxv1Wny8\ndNTUm1mxo5CUuBBGJod3cZTuRZJcIYQQQgghhHBTX6zKpqy6iT4Rflx5biI+Xnp8vHSOf0YdOq2j\nzNLPWw/x8fKDvLd0P/FRAQT7G10cuetI4SkhhBBCCCGEcEMH8itZvqMArUbhtxcNZHBCKAm9A+gV\n4kOAj6E1wQWYMTqGIQmh1DdZefu7NOx29TR77t4kyRVCCCGEEEIIN2My23h36X4ALprQlz6R/qfd\nXlEciXCAj570/CqWbc7rijDdkiS5QgghhBBCCOFmvliTRWlVEzHhflw8Ma5Nzwn0NXDLxSkAfL02\nh+zDNZ0YofuSJFcIIYQQQggh3EjGoSqWbytAoyjcctHAY5Yln8mQhFBmjonFZld569s0Gk3WTozU\nPUmSK4QQQgghhBBuwmSx8d7S/ajA7Al96dvr9MuUT+aKqYnERvhRUtXIRz9nOD9INydJrhBCCCGE\nEEK4ia/WZFNc2Uh0mC+XtHGZ8vH0Og13XDoIg07DhtQjbEo74twg3ZwkuUIIIYQQQgjhBjILqvl5\n6yE0zUWk9Lr2p2u9w3y5ekYSAB/8dIDSqkZnhen2JMkVQgghhBBCCBczWxzVlFVg1rg+xEcFdHif\nU4f1ZlRyOI0mG299l4bNbu94oB5AklwhhBBCCCGEcLFv1uVwpKKBqFAfLpsc55R9KorCjRcOINjf\nSFZhDd9v6BlthSTJFUIIIYQQQggXyjpczQ9b8lEUmpcpa522bz9vPbdeNBCAH7cewmyxOW3f7kqS\nXCGEEEIIIYRwoY9/OYiqwgVj+5DYO9Dp+x8YF0JcL38aTVZ2ZJQ6ff/uRpJcIYQQQgghhHCRwrJ6\nsg/X4G3Ucdnk+E47zpShUQCs3VPUacdwF5LkCiGEEEIIIYSLbEh1JJ1jBkRg1DtvmfLxxqVEotdp\n2J9XSVk3r7QsSa4QQgghhBBCuIDdrrIprRiAiYN7deqxfLz0jOofDsC6vd17NleSXCGEEEIIIYRw\ngf35lVTWmggP8iIpxvn34h5vyhDHkuX1e4uwq2qnH89VJMkVQgghhBBCCBfYsPcIABMHR6EoSqcf\nr3/fYMICvSivMbE/r7LTj+cqkuQKIYQQQgghRBdrNFnZnlECwIROXqrcQqMoTG6ezV3XjQtQSZIr\nhBBCCCGEEF1sR0YpZoudpJhAIoK8u+y4E4f0QgG2HyilvsnSZcftSu1KclVV5ZZbbmHBggWtj5lM\nJp577jmmTZvGiBEjuPrqq9m+fftp93P55ZfTv3//Y/699dZb7QlJCCGEEEIIITzGhtSWpcpdM4vb\nIizQm5S4YKw2e2vRq+5Gd7ZPsFqtPPHEE6xbt46JEye2Pv7ss8+ycuVKnnrqKXr37s1HH33Erbfe\nyrfffktsbOwJ+7Hb7WRnZ/P6668zbNiw1sd9fX3b+a0IIYQQQgghhPsrr24iPa8SnVbDmAGRXX78\nyUN7k5Zbybo9RUwfFdPlx+9sZzWTm5mZydVXX8369esJCAhofdxqtfLll19y3333MWnSJOLj43nk\nkUcICwtj2bJlJ91Xfn4+TU1NDB8+nPDw8NZ/Pj4+HfuOhBBCCCGEEMKNbUw7ggqMTA7Dx+us5x07\nbGRyGL5eOvKKa8kvru3y43e2s0pyt27dyvDhw/n666/x9/dvfdxut/Paa68xefLk1scURUFRFGpr\nT/5DO3jwIAEBAYSFhbUzdCGEEEIIIYTwLKqqumypcgu9Tsv4FMexu2MBqrO6bHDNNdec9HGDwcCk\nSZOOeeyXX34hLy/vhMdbHDx4ED8/P+655x527NhBeHg4N9xwA5dffvnZhHQCrVZqaXVnWq3yq4/y\nuxauIeNQuFLL69zZjEN5bRSdRc6Hwl140ljMKqzmSEUDgb4GhvYLQ6txTbxTR/Rm+Y4CNu4r5uoZ\nyeh17v1zc2hbm6VOmRvfv38/Dz/8MLNmzWL8+PEn3SYrK4u6ujrOP/987rzzTtatW8ejjz6KoijM\nmTOnXcfVajWEhMg9vT1BYKAsaxeuJ+NQuMLxr3NtGYfy2ig6m5wPhbvwhLH46cpMAM4bHUt4mP8Z\ntu48ISG+JPQOJPtwNQeLapg8LNplsTib05Pcbdu28fvf/56BAwfyzDPPnHK7Z555hsbGxtZlzwMG\nDKCgoICFCxe2O8m12ezU1DS167nCM2i1CoGBPlRXN2Czqa4OR/RQMg6FK1VU1ANnNw5bniOEs8n5\nULgLTxmLFqud1TsLARiVFOby8/PEwZFkH65m6bocUmKDXBpLWwQEeKNrw4yzU5Pcn3/+ubX41Msv\nv4zRaDz1gXW6Y+7rBUhKSuLnn3/uUAw2m71DzxfuzjGobTZVftfChWQcCtc5OubaPg5lnIrOI+dD\n4S48YyzuzCilvtFCTLgf0WG+Lo917MBIPll+kNTsckorGwgJ8HJpPGfWtgsYTlt4vW7dOu69915m\nzZrFa6+9dtoEF2DevHk899xzxzyWlpZGYmKis0ISQgghhBBCCLexIdVR5GnSENcUnDqen7eeEUnh\nqMD6vd2nAJVTktyGhgYeeughhg0bxgMPPEBlZSWlpaWUlpZSV1cHQFNTE6WlpdhsNgBmzJjBhx9+\nyNKlS8nLy+P999/n22+/5fe//70zQhJCCCGEEEIIt1HbYGZPVjmKAuNTur437qlMGRYFwLq9RdhV\n913qfTacslx58+bNlJeXU15ezjnnnHPM16677joee+wxli5dysMPP8zy5cuJiYnhtttuA+CFF16g\nuLiYuLg4XnzxRSZMmOCMkIQQQgghhBDCbWzZX4LNrjIkIZRAv9Oveu1KKX1DCAkwUlrVREZ+FQP6\nBrs6pA5rd5K7YsWK1v8/77zzOHDgwGm3nzt3LnPnzm39XFEUbr/9dm6//fb2hiCEEEIIIYQQHqFl\nqbKreuOeikajMGlwFN9tyGXtnqJukeR6QjMkIYQQQgghhPBYh8vqySmqxduoZURSmKvDOcGkoY4l\ny/tyK1wciXN0Sp9cIYQQQgghhBAOG1KPADBmQAQGvdbF0ZwoIsib3102CEVRXB2KU0iSKzxKk9lK\nWnY5EQEGV4cihBBCCCHEGdlVlY1pjiR34uAoF0dzamMHuk8xrI6SJFd4jMKyel77Yg/FlY2EBnhx\n3shozhnWGz9vvatDE0IIIYQQ4qQOFddRWWsi2N9IUkygq8PpESTJFR5hZ0Ypby3Zh8lsw6DTUF7T\nxOJVWXyzLocJgyKZPiqW2Ag/V4cphBBCCCHEMfZklwMwJCG02ywHdneS5Aq3ZldVvlufyzfrcgAY\nlxLJ/dePZtPuQn7amk9qdgVrdhexZncR/WODmDE6huFJYWg1UlNNCCGEEEK43t6so0mu6BqS5Aq3\n1Wiy8s6Sfew8WIYCXHFuIhdPjMPbqGNYvzAGx4dQVF7Piu2FrEst4sChKg4cqiI0wMjv5gwmsbcs\nBxFCCCGEEK5T12gh63A1Wo1CSpznt+bxFDLdJdxScWUD//hgOzsPluFt1HHvvGHMHt/3hCUeUaG+\nXDczmRf+MIlrZiQREexNeY2Jt7/dh9lic1H0QgghhBBCOFryqCokxQTibZT5xa4iSa5wO6k55Tz1\n/jYKy+qJCvXhsRtHn3F5h7dRx/mjY/n7reOIDvOlpKqRJRtzuyZgIYQQQgghTqJ1qXKiLFXuSpLk\nCreycmchL362mwaTleH9wnj0htFEhvi0+fk6rYYbZvUHYNmmfApL6zorVCGEEEIIIU7JrqrszakA\n5H7criZJrnAbZdWNfPxLBqoKl06K464rhrRrWUdSTBDnDu+Nza7yvx8PYFfVTohWCCGEEEKIU8sv\nrqWm3kywv5HoMF9Xh9OjSJIr3Ma363Ox2lTGp0QyZ0oCmg6UWL/i3EQCfA1kFlSzdvdhJ0YphBBC\nCCHEmbUsVR6aKK2DupokucItFJXXs35vERpF4bIp8R3en6+XnmumJwHw+cosquvNHd6nEEIIIYQQ\nbbU3W5Yqu4okucItfL02B1WFKcOiiAxu+z24pzN2YASD40NoMFn5dPlBp+xTCCGEEEKIM/l166CB\nfaV1UFeTJFe4XN6RWraml6DTarh0UsdncVsoisL8C/pj0GnYtK+Y1Jxyp+1bCCGEEEKIU5HWQa4l\nSa5wuS/XZAMwfVQ0wf5Gp+47PMibSyc7EucPfjyASXrnCiGEEEKITran9X7cMBdH0jNJkitcKuNQ\nFXuzyzEatMwe37dTjjFzTCzR4b6UVjWxZENupxxDCCGEEEIIcLQOSs1u7o+bEOLiaHomSXKFy6iq\nyherswC4YEws/j6GTjmOTqvhxlkDAPhhcz4F0jtXCCGEEEJ0kvziWmoaLIQEGOktrYNcQpJc4TKp\nORUcLKjG10vHBWP7dOqx+kUHcu6IaGx2lYU/SO9cIYQQQgjROVpaBw1JkNZBriJJrnAJ+69mcS+a\nENclN+RfOTWBQF8DmYXVrJHeuUIIIYQQohNI6yDXkyRXuMSOA6XkF9cR5Gdg2sjoLjmmj5eeq5t7\n5y7dmCezuUIIIYQQwqmkdZB7kCRXdDmb3c5Xax0VlS+dFI9Br+2yY48ZGEFogBdl1U3sy63osuMK\nIYQQQojuLy3H0TooOTZIWge5kCS5osttSD1CUXkD4UFeTB4a1aXH1igK5wzvDcDqXbJkWQghhBBC\nOM/e7KP34wrXkSRXdCmL1c6363IAmDMlAZ2264fg5CFRaBSFXQfLqK4zdfnxhRBCCCFE9yOtg9yH\nJLmiS63eVUh5jYnocF/GDYx0SQzB/kaG9QvFZldZt7fIJTEIIYQQQojuRVoHuQ9JckWXsVhtLNmY\nB8DcKQloNK4rqT61ecny2t1FUoBKCCGEEEJ0WEvroKHSOsjlJMkVXWZXZjk19WZiwv0YnhTm0lgG\nx4cSEmCkpKqR9LxKl8YihBBCCCE83x65H9dtSJIrusz65qXBU4ZFufzqlkajcM5QKUAlhBBCCCE6\nrq7RQvbhGrQahQHSOsjl2pXkqqrKLbfcwoIFC455/K233mLKlCmMGDGCe+65h4qK07doWbVqFRdd\ndBFDhw5l3rx5pKamticc4QGq6kykZleg1SiMS3HNvbjHmzw0CkWBHRml1NSbXR2OEEIIIYTwUNI6\nyL2cdZJrtVp57LHHWLdu3TGPf/zxx7zzzjs8+eSTfPTRRxQVFfGnP/3plPtJT0/n7rvv5qqrruKr\nr74iOTmZW2+9lerq6rP/LoTb25RWjF1VGZoYSoCPwdXhABAS4MWwxDBsdpX1qVKASgghhBBCtI+0\nDnIvZ5XkZmZmcvXVV7N+/XoCAgKO+dqCBQu47bbbOO+880hJSeH5559n06ZNpKWlnXRfCxcuZPz4\n8dx0000kJiby5JNP4uPjw5dfftn+70a4JVVVW5cqTx7StX1xz6SlZ+6aXYdRpQCVEEIIIYQ4S8e0\nDkqUJNcdnFWSu3XrVoYPH87XX3+Nv79/6+OlpaUcOnSIsWPHtj7Wp08fevXqxY4dO066rx07djBm\nzJijgWg0jBo16pTbC8+VV1xLYVk9ft56t/vDH5IQQrC/keLKRg7kV7k6HCGEEEII4WFaWgeFBhjp\nHerj6nAEcFYLxq+55pqTPl5cXAxARETEMY9HRERw5MiRUz7nZNtv2bLlbEI6gVYrtbTczYZUxxiY\nOLgXRkPH7lHQapVffez471qr1XDOsN58sy6HNXsOM0iWmIg2cPY4FOJstLzOnc04lNdG0VnkfCjc\nhSvHYnpeFQCDE8LQ6bRdeuyep23Fa51yV3RTUxMARqPxmMcNBgNm88kL+jQ1NZ3V9m2h1WoICZHG\ny+7EYrWxeZ/jIshFUxKd9vsJDHTeVbJLz+3Ht+tz2JZeitagI9DPeOYnCYFzx6EQbXX8ebQt41Be\nG0Vnk/OhcBeuGIsZBY6aQuOGRMn51k04JcltSVaPT1DNZjM+PicfaF5eXifd3tvbu91x2Gx2amqa\n2v184Xzb0kuobbAQG+FHkLeOior6Du1Pq1UIDPShuroBm80599DqcDTt3p1Vzvdrs5g1rq9T9iu6\nr84Yh0K0Vct59GzGYUfPvUKcipwPhbtw1Vg0W2ykNd+P2yfMR863nSwgwBud7swz9U5Jcnv16gVA\nSUlJ6/+D417d45ckt4iMjKS0tPSYx0pLS4mM7Fh7GZvN3qHnC+dau9vRg3bS4F5O+t04BrXNpjr1\nd33OsN7szipn1c5CZoyKcXkfX+HuOmccCtEWR8dc28ehjFPReeR8KNyFa8Zien4lFpudPpF++Bh1\n8nfQ6dp2AcMpC9bDw8OJjY1l+/btrY8dOnSIoqIiRo8efdLnjBw5km3btrV+brfb2bZt2ym3F56n\nut7MnqxyNIrCuEG9zvwEFxraL5RAPwNF5Q0cLJA2VkIIIYQQ4sz25VYAMCguxMWRiF9z2l3ZN9xw\nA2+88Qa//PIL+/bt48EHH2Ty5Mn0798fcNyDW1pais1mA+C6665j7dq1vP3222RlZfG3v/2NpqYm\n5syZ46yQhIttTjvS2hs30Nc9euOeilajYcpQR3uj1bsKXRyNEEIIIYTwBPtyKwFIkSTXrTgtyZ0/\nfz433HADjz32GNdffz0RERH8+9//bv360qVLmTx5MkVFjn6pgwYN4sUXX2Tx4sVcfvnlZGRk8M47\n7xzTmkh4LlVVWdfcG3fSEPeexW0xZWhvFGBreil1jRZXhyOEEEIIIdxYXaOF/CO16LQakmICXR2O\n+JV235O7YsWKYz5XFIW7776bu++++6Tbz507l7lz5x7z2MyZM5k5c2Z7QxBuLL+4joLSeny9dAxN\nDHN1OG0SHuTNoPgQUnMq2Jh6hPPHxLo6JCGEEEKIU2o0Wck7UktMhB9+3npXh9Pj7M+rRAWSYgIx\n6KV1kDtxSuEpIY63PtUxizs+pRf6NlRAcxdTh/cmNaeCNXsOS5IrhBBCCLe1L7eCd5fup6LGhFaj\n0L9PEKOSwxmRHE6QtEPsEi3346bEBbs4EnE8SXKF01ltdjalOXrjThrqGUuVWwzrF4aft57C0noK\ny+qJDpNeZ0IIIYRwHyazjc9XZbJih6OGSEiAkapaM/tyK9mXW8mHP2WQGB3IyORwRvYPJyKo/e05\nxeml5bQkuXI/rruRJFc43Z6scuoaLUSH+dI30rPusdZpNYxICmPtniK2p5cQPTne1SEJIYQQQgBw\nsKCKBUv2U1LViFajcOnkeGaP70OjycbuzDK2HyglLbeCzMJqMgur+WxlJrERflw7I4n+fWS20ZlK\nqhopq27C10vnce93ewJJcoXTrW8tOBXlkf1mRw+IYO2eIrYdKOFSSXKFEEII4WIWq42v1ubw4+Z8\nVCAm3I9bLx5In+bkys9bw6QhUUwaEkWT2UpqdgXbM0rZnVnGoZI6Xv1iL4/dNJqIYB/XfiPdSMtS\n5QF9g9FoPO/9bncnSa5wqpoGR29cRYHxgyJdHU67DOwbjI9RR0FpPUXl9USFypJlIYQQQrhGTlEN\nC77fz+GyehQFLhrfl0snxZ+y5omXQcfoARGMHhCBxWrnP1+nsiuzjNe+3Msj80djNEiBJGdoaR0k\n/XHdk+dUBBIeYXNaMTa7ypCEUI8tetCyZBlg+4FSF0cjhBBCiJ5qxY4Cnl64ncNl9fQK8eEv80dx\nxdTENhf11Os03HpxCpEhPhSU1vPesv2oqtrJUXd/drvKfik65dYkyRVO1VJVedKQKBdH0jGjBkQA\nsO1AiYsjEUIIIURPVFBax8e/HMSuqpw/Opa/3TyGxN5n34vVx0vHXXOHYDRo2bK/hJ+2HuqEaHuW\n/JJa6pushAV6ES6FvdySJLnCaQpK6sgvrsPHqGN4v1BXh9Mhg+JC8DJoyS+uo6SywdXhCCGEEKIH\nsdtV/rcsHZtd5dwR0VwzI6lDfVijw3y5ZfZAAD5fmcX+vEpnhdojtSxVTokL9sj6Mz2BJLnCaTbv\nd7QNGjMwAr3Os+/30Os0DG9esrxNliwLIYQQogut3FlI1uEagvwMXDk10Sn7HD0ggtnj+2JXVf77\nTSoVNU1O2W9PdLQ/rtyP664kyRVOoaoqW9MdS3vHNi/19XSj+zcvWU6XJctCCCGE6BoVNU0sXp0F\nwHXn98fHy3l1Yueek8Cg+BBqGyy89uVeLFab0/bdU5gtNjIOVQOOYqXCPUmSK5zCsay3kQAfPcl9\nglwdjlMMjg/BqNeSe6SWsqpGV4cjhBBCiG5OVVU+/CkDk9nGqORwRvUPd+r+NRqFOy4dRFigF7lH\navngpwwpRHWWDhZWY7XZ6RPph7+PwdXhiFOQJFc4Rcss7qj+EWg13WNYGfRahjXfWyxLloUQQgjR\n2bYdKGVXZhneRh3Xnp/cKcfw89Zz19whGHQa1u0pYtWuw51ynO6qZamytA5yb90jGxEu5Viq3Hw/\nbjdZqtyiZcnydqmyLIQQQohOVN9k4aOfMwC46txEgv07rxVjn0h/bpw1AIBFP2eQWVjdacfqbo4W\nnZIk151Jkis6LK+4ltKqJgJ9DSTHBrk6HKcakhCKQach63CNFGgQQgghRKf5fGUmNfVmkmMCOWd4\n704/3oTBvZgxKgabXWXBkn3Y7PZOP6anq2u0kH+kFp1WQ1LM2bdzEl1HklzRYVv3O2Y5R/ePQKPp\nXmXUjQYtQxIdS5a3y5JlIYQQQnSCA/mVrNldhE6rcOOFA9B0UVuaedP6ERHsTXFlI5vSirvkmJ5s\nf14lKpAUE9ihlk6i80mSKzrk11WVxwzsXkuVW7RWWZYly0IIIYRwMovVxvs/HADg4glxRIX6dtmx\ndVoNl06KA+Db9TlYbTKbezpHWwdJVWV3J0mu6JCcolrKqpsI9DPQr5su2xiaGIpOqyGzoJrKWpOr\nwxFCCCFEN/LdhlyKKxroHebL7Al9u/z441IiiQzxobSqiY2pR7r8+J4kLUf643oKSXJFh7QWnOof\n0WVLa7qat1HHkIQQVGBHhixZFkIIIYRzFJTUsWxTPgpw06wB6LRd/9Zcqzk6m/vdhlyZzT2FkqpG\nyqqb8PXS0TfS39XhiDOQJFe0W09Yqtxi9ACpsiyEEEII51FVlf/9mI7NrnLuyGiXrogbNzCSqFAf\nyqqb2CCzuSfVslR5QN/gbleDpjuSJFe0W/bhGipqTAT7G0mM7p5LlVsMSwxDp1U4cKiK6nqzq8MR\nQgghhIfbl1dJVmENAT56rpya6NJYNBqFS1pmc9fLbO7JtLQOkv64nkGSXNFuLbO4o7vxUuUWPl46\nBsWFoKqyZFkIIYQQHffj5nwApo+Oxduoc3E0MHaAYza3vKaJdXuLXB2OW7HbVfZL0SmPIkmuaBf7\nr5Yqj+3mS5VbtCxZ3pYuS5aFEEII0X4FpXWk5lRg0Gs4b0S0q8MBHLO5l02OB2DJhlwsVpnNbZFf\nUkt9k5WwQC/Cg7xdHY5oA0lyRbtkFToqDYcGGEnoHeDqcLrE8KQwtBqFA/lV1DTIkmUhhBBCtM+P\nWxyzuJOHROHnrXdxNEeNHhBBdJgvFTUm1u057Opw3MbRqsrBKN189WJ3IUmuaJet+5uXKg+I6DF/\n7L5eegbGBWNXVXYdLHN1OEIIIYTwQFV1JjalFaMAM8fEujqcY2gUhUtbZnM35slsbrM9WeUADEkI\nc3Ekoq0kye0im9KO8MjbmyiubHB1KB1mV1W2NlcZHjMg0sXRdK3R/WXJshBCCCHab/n2Amx2lZHJ\n4UQE+7g6nBOM6h9OTLgvlbUm1uyW2dz6JguZhdVoNYrcj+tBJMntIvnFdRSVN7Buj+ffyJ9ZUE11\nnZnQAC/io3pWn7ARSWFoFIX9eZXUNVpcHY4QQgghPEiT2cqqnYUAXDCuj4ujOTmNcvTe3O835mKx\n2lwckWul5VSgqpAcG+QWBcJE20iS20UGxTvKje/OLHdxJB3XslR5zMCes1S5hb+Pgf59grDZVXZn\nypJlIYQQQrTduj1F1DdZSYwOoJ8bt18ckRxObIQfVXVmVu/q2bO5R5cqh7o4EnE2nJbkbt68mf79\n+5/032uvvXbS54wdO/aEbb///ntnheRWkmODMOq1FJTWUV7d5Opw2s1uV9l2oGdVVT7eqP7hgLQS\nEkIIIUTb2e0qP209BMCsse45i9vi2NncPMyWnjmba1dV9mY7ktyhiZLkehKnzbmPGDGCdevWHfPY\nokWLWLRoEVdcccUJ2xcXF1NdXc2XX35JRMTRZCkgoHtW6tXrNAyKD2FHRil7ssvdplz82TpYUEV1\nvZnwIC/6RvaspcotRiSF8+FPGaTmVNBktuJlkKUrQgghhDi9HRmllFU3ERHkzYikcFeHc0YjksLo\nE+lHfnEdq3YddrsiWV0ht6iW2gYLYYFeRIW63/3T4tScNpNrMBgIDw9v/dfU1MS7777L448/TlRU\n1AnbZ2Zm4u3tTUpKyjHPMxqNzgrJ7QxrvgLkyctct+w/WnCqpy1VbhHsbyQxOgCL1U5qdoWrwxFC\nCCGEm1NVlR+a2wadPyYWjcb930Mpv5rNXbqpZ1Za3pPleM8+JDG0x77v9VSddk/uCy+8wNChQ5k9\ne/ZJv37w4EHi4uJ61IBpWeawP68Skwcu+7DZ7WxvrarcM5cqtxiV7Pj+t8uSZSGEEEKcQWZhNdmH\na/D10jF5yImTP+5qeL8wYsL9qKk3szW92NXhdLnWpcpyP67H6ZR1ljk5OSxbtowPP/zwlNscPHgQ\nVVW55ZZbSE9PJyYmhjvvvJOpU6d26NharfvW0goJ9CY+KoCcohoyDlUzPMmzem0dOFRFTYOFyGBv\n4nsHuOQChVar/Oqj637XowdG8NnKTHZnlmFXHcvRRc/hLuNQ9Ewtr3NnMw7d+bVReDY5H7ZNy724\n00bF4OOtd3E0Z+f8MbG8t3Q/y7cXMmWY+95u5+yxWF1nIqeoFr1Ww6CEUDmPuo225R+dkuR+9NFH\nDBkyhNGjR59ym6ysLKqqqrj33nuJjIxk2bJl3HHHHSxcuJCxY8e267harYaQEN/2ht0lxg+JIqeo\nhvRDVUwb19fV4ZyVHT9nAHDOyBhCQ/1cGktgoGvviwgJ8SW+dwA5h2s4VN7A6IE9q1+wcHD1OBQ9\n0/Gvc20Zh+7+2ig8n5wPT+1waR07MkrRaTVcNaM/wQFerg7prMyeksDiVZnkFNVQWmuif98QV4d0\nWs4ai7uaZ3GHJIURFdk9awZ1Z05Pcu12O0uXLuWuu+467XYLFy7EbDbj5+dIllJSUkhPT+fDDz9s\nd5Jrs9mpqXHvysX9m8vFb04r4jfnJXrMcm2TxcbaXY6+biP7hVFRUe+SOLRahcBAH6qrG7DZVJfE\n0GJ4vzByDtewcms+CZGuTfpF13KncSh6npbz79mMQ1eds0X3J+fDM/vs5wOoKkwc3AvVavPIv8cp\nw3qzdGMeXyw/yO/mDHZ1OCfl7LG4YbejdVJKnyCP/J11VwEB3ujasILS6Unu3r17qaioYMaMGafd\nzmAwYDAYjnksKSmJbdu2dej4Npt73xQfE+FLgK+BihoTeUdqiY3wjORoW3oxTWYb8VEBRAZ7u/Dn\n7BjUNpvq8t/1iKQwvlqTzY6MUuZbrGg1soyl53CfcSh6nqNjru3jUMap6DxyPjydukYLa5uTpfNH\nx3jsz+jc4b1ZtimPLfuLmXdeIoF+7lgo1nlj0Wa3s7e5P+6g+BCP/b11T227gOH0d+U7d+4kLi7u\nmLZAx7NarUydOpVFixYd83haWhqJiYnODsmtaBSltQBVS8U2T7Ah9QjguAopHKLDfIkM9qau0cLB\nQ9WuDkcIIYQQbmbljgLMVjtDEkKJDveMiY2TCQv0Zni/MGx2lVW7Drs6nE6XVVhDg8lKZIgPkcGy\nFN8TOT3JPXDgAElJSSc8Xl9fT2mpoxKtTqdj6tSpvP7666xevZqcnBxeeOEFduzYwa233urskNzO\n0VZC5S6OpG2q6kyk5VSg1SiMHdizqyr/mqIojOzv6HO3Q6osO53drlJc2UBVnQmL1fOqkQshhOjZ\nLFYby7cXADBrrOf3mJ0xKgaAVTsLsXbzmU2pquz5nL5cuaysjMjIE4vwvPvuu7z22mscOHAAgEce\neQR/f38ee+wxKioqGDhwIO+99163n8kFSIkLQatRyDpcTW2DGX8fw5mf5EKb0opRVRjaL9TtY+1q\no5IjWLYpn+0ZpVwzI8lj7rF2d4dK6nj7u30UlNa1PmbQafD11uPjpcPXS4+vl45APyMzx8TSK0Su\nsgohhHAv2w6UUtNgITbCjwF9g10dTocN6BtMdJgvhWX1bDtQwviU7ru6b0/zUuWW1ZfC8zg9yX37\n7bdP+vjdd9/N3Xff3fq50WjkwQcf5MEHH3R2CG7P26hjQJ8g0nIrSc2uYIKbLwE+ulTZc/q6dZW4\nKH+C/Y1U1prIPVJLfJRU3+sIm93OD5vz+XptDja7iq+XDq1Gob7Jitlqx1xrorLWdMxzNu87wh2X\nDmJoome15BJCCNG9rWle1nvuiOhucRFcURSmjYrhgx8PsHx7QbdNcitrTRwqqcOo15IcG+TqcEQ7\ndUoLIXFmQxPDSMutZHdWmVsnufnFtRSU1uHrpZOrWSehURRGJoezfHsB2w+USpLbAcUVDbyzZB9Z\nh2sAOG9ENFedl4iXQYeqqpgsNuobrdQ3WahvslLfaGHTvmJ2ZJTy8ud7uPLcRGaN69Mt3kgIIYTw\nbEcqGjhwqAqDXsP4lO7TZnDioF4sXpVFVmENOUU13fJ9T8tS5ZS4YPRtqOIr3JP85lxkWD9Hwpia\nXeHW9zW0zOKOS4mUP/RTGJXsuC93+4ESVFXaJ5wtu6qyfHsBj7+7hazDNQT5Gbhv3jDmX9AfL4Pj\nOpyiKHgZdIQGetEn0p+BfYMZPSCCOy8fzJwp8ajA56uyePu7fZgtcv+uEEII12qZxR07MBJvY/eZ\nUzIatEwZ6ljZ13K/cXfTslR5iEzueDTJWlwkItiHXiE+NJisZBW6Z2Vem93OpjRZqnwmSbGB+Hnr\nKa5s5HCZ9FE7GxU1Tbzw6S4++jkDs9XO+EGRPHXrOAa3sdCDRlG4dFI8d80dgtGgZdO+Yv754Q4q\n3LxfthBCiO7LarOzPrUIgKnDe7s4GuebNioGBdiyv5iaerOrw3Eqq81OWm4FIEWnPJ0kuS7UMpu7\nO8s9qyyn5VRQ02ChV4gP8VH+rg7HbWk1GkYkOe4H3S5Vlttsa3oJf12wmX25lfh567lzzmBuv2QQ\nvl76s97XyORwHpk/ivAgL/KKa3nyf9s4WFDl/KCFEEKIM9h5sIzaBgsx4b4kdMPlvBFB3gxNDMVq\nU1m9u3u1Ezp4qAqT2UZMuC8hAV6uDkd0gCS5LtRSKGd3pnv2y/11b1y5z/H0RjW3EkpLP4S9qgjV\nJDO6p5NZUM1b36bRaLIxvF8YT906jtEDOtaeKibcj7/eOIaBfYOpqTfz7KKdrOlmL75CCCHc3+pd\nhQCcM6x3t33/NH1092wntFuWKncb3ecmAQ+UFBOIt1FLUXkDJVWNRAR5uzqkVg1NFnZkOJLvCYPc\ntzCWu+gfbOG2gFWkWPOp/wxQFLR9R+I1bh6awO5TcMIZahvM/OebVGx2lRmjY7hmuvNaL/l567nv\nN8P4dEUmv2wr4P1l6VTVmbh0UrxT9i+EEEKcTklVI/tyK9HrNG5dWLSjUuJC6BXiw5GKBnYeLGNM\nBy9Uuwvpj9t9yEyuC+m0GgbFO/6I9rjZbO62A6VYbXYG9AkiNFCWa5yOvboY87dPkaI7hKYlV1NV\nbHk7qf/qCezVxS6Nz53Y7SpvfbePyloT/aIDmXdeP6df5dZqNFw7I5mbZw9AUeCbtTlkHKpy6jGE\nEEKIk1nbvIJodP+Idt1+4yk0isL0UY7Z3OXbDrk4GucoqWqkqLwBb6OOxOhAV4cjOkiSXBcb1rwc\nYo+b3Ze7Ya+jYIIUnDqzps2fgaUJDcdVVlbtYGlyfF0AsGRDLmk5Ffh56/ndZYPQaTvvFDRlaG8u\nmtAXFXj7u300mqyddiwhhBDCarOzbk/3LTh1vImDe+Fl0JJRUE1+ca2rw+mwvc3vxQfFh3Tq+xPR\nNeQ36GJDEkNRgPT8SprM7vEmvKSqkYyCagx6Teu9puLkVFM9trwdjoT2pBvYseXtlHt0gbTcCr5Z\nl4MC3H5pSpcUdLh0Ujx9e/lTXtPEop8zOv14Qggheq49WeVU15uJCvUhKab7zwR6G3VMHuKYDPml\nG7QTkqXK3YskuS4W4GMgoXcAVpvKvtxKV4cDwMbmglOjksO7VW+3zqA21sCZeuOqdkw7vsVeU9I1\nQbmhyloTb32bhgpcMimOwfFd8wKi02q47eIU9DoN61OPsC295/4OhBBCdK7Vzb1xu3PBqeNNa16y\nvHlfMbUNnttOyGyxsT/P8T58SEKIi6MRziBJrhsY2s9RZXlPluvvy1VVlQ2pslS5rRTvAGjDC5ll\n74/Uf/IQ9V/+DdOupdhrek6rIavNzn+/SaW2wUJKXHCXF4HqHebLvPP6AfC/H9KprDV16fGFEEJ0\nf+XVTaRml6PTKkzsxgWnjtcrxIchCaFYrPbWJN8TpedXYbHa6dvLn0A/o6vDEU4gSa4baLkvd3dW\nOeqZZgU7WWZhNaVVTQT5GRjYN9ilsXgCxeiLtu9IUE7xp6Ro0EQkous3AfRe2MtyMW/5jPpPHqT+\nqycw716KvbZ7J7xfrsnmYEE1QX4Gbr9kEBpN11/dnjYymsHxIdQ3WXlv6X6X/50JIYToXtbuOYyK\no2+7v4/B1eF0qfPHNBeg2lHgse2EdjUXgJWlyt2HJLluIDbCj2B/I9V1ZvKL61waS0tv3AmDerkk\nGfFEXuPmgd7rhERXRQN6L7zPux3vaXfgN/8VvGbeg67feEfCW5qDafNn1H/8IPVfPYl5zzLsde5V\ngKyjdmaU8sPmfDSKwu8uG0yAr2te+BVF4ebZA/H10pGaU8GKHYUuiUMIIUT3Y7errG0pODWs+xec\nOt6guBCiw3yprjOzdb/n3RZksdrZut/RCWN0N2mFJCTJdQuKojC0eTZ3e4brTg4Wq40tzSennrTU\npqM0gZH4Xv442r4jWpcu21WFbG08vpc/3tonV9EZ0MeNxHva7xwJ7/l3o0scBzoj9tJsTJs+pX7R\n/dR//RTmPT96fMJbUtXIO9/vB+CKcxNIjg1yaTzB/kZunDUAgM9WZnK4TIqBCSGE6Li92eVU1pqI\nCPKmfw9cBacoCuePiQXgp62HPG611O7MMuqbrPSJ8CM2ws/V4QgnkapCbmJ8SiSrdx1m1c7DXDQh\nDqNe2+Ux7Mosp9FkpW8vf6LD5Y/8bGgCI/GZeTeqqZ7G6kr+ujCNGquefxPIyRa+KDoD+vhR6ONH\noVpNWA/txZq1BWv+LuwlWZhKsjBt+hhNZD/0CWPQxY9B4+c5hRCsNjv/+TqVRpOV4f3CmDW2j6tD\nAhxXaCcN7sX61CO8/d0+HrlhlLQJEEII0SFrmnvjnjO8N5oeUnDqeONTIlm8Kou84loyDlXRv4/n\nJPvrW9pmDpFaNN2JvLtzE8mxQST0DqCu0dLaY60rqarK8uby7xMHySxueylGX3wiYhiQFA3Apn1H\nzvwcnRF9/Gi8Z9yJ3/xX8ZrxB3QJY0BrwF6ciWnjx9Qvuo+Gb57GnPoz9nr3qMJ9Oit2FJJ3pJbQ\nAC9uuXigW1WZvPb8ZMICvcgrruWbdTmuDkcIIYQHq6w1sTuzHK1GYVIPTpIMei3njXC89/lp6yEX\nR9N21fVm9mZXoNUojE+JdHU4wokkyXUTiqJw4TjHbNePW/Kx2bv2xv19eZVkHKrC10vHpCGS5HbU\nhOYLBRvTis9q2Y6iN6JPGIP3jD/gd8OreE2/E138aNDqsRUfxLThI+o/uo+Gb/+BOfUX7A1VnfQd\ntF91vZlv1mUDcN35yfh66V0c0bG8jTpuvTgFBVi6KY+DBVWuDkkIIYSHWre3CLuqMrxfGIEuqjvh\nLqaNjEanVdh1sIySygZXh9Mmm9KOYFdVhiSEuqxuiOgckuS6kRFJ4UQGe1NW3cT2A11XcVdVVb5a\n40hKZo3rg4+bJSWeaFB8CP4+eg6X1be7mJiiN6JPHIv3+Xc5Et5pv0MXNwq0WmxHMjBt+JD6D/9E\nw3f/xJzmPgnvF6uyaDTZGJIQyrB+7lmlMDk2iAvH90VVYcH3+z22GqQQQgjXsasqa5uXKk8d3vMK\nTh0v0M/IuIGRqMAv2wpcHU6brN/rWHEnEzzdjyS5bkSjUbigeTZ32ab8Lrtxf3dWOdmHa/D30TO9\nuam36BidVsPYgY5lLy0VqztC0Xuh7zce75l3O5Y0T/sduriRjoS36ACm9S0J778w71uBvaG6w8ds\nj6zD1azbW4RWo3DNjCS3WqZ8vDlT4okK9aGkspGVO6XashBCiLOzL7eCsuomQgO8SIn3nLoZnaml\nANXavUU0NFldHM3p5RfXUlBah6+XjqGJYa4ORziZJLluZtLgXgT46MkrrmVfXuffe2lXVb5unsW9\naHxfvAxSi8xZWipUb95f7NTl54rBuznhvceR8J53O7q+I0CjxVaUjmndQuo/upeGJc9g3rcSe2ON\n0459OnZVZdHPGQDMHBtLrxCfLjlue+m0Gq48NxGA79bnuv2LsRBCCPeyeqdjFnfKsKgeW3DqeH0i\n/RnQJwiT2cbaPYddHc5prWsuODU+pRd6naRE3Y38Rt2MXqdlxmjHVbAfNuV1+vG2Hyglv6SOYH8j\n542M7vTj9SRxvfyJDPGhpt7MvtzOuWChGLzRJ03E+4I/4nfDK3idexvaPsNA0WA7vB/Tuv9R/+G9\nNHz/b8z7V2Fvqu2UOADW7Skip6iWID8Dl0yM67TjONPwfmEkxwRS12hh2ebO/3sTQgjRPVTWmth5\nsAyNojBlqCxV/rWZYxyrEn/ZVtDlNWbaymqzs3mfozfuRFmq3C1JkuuGzhsZjVGvJS23krwjnZeU\n2O0qX691zOJePDEOva7r2xZ1Z4qiMHGQY8nyRicsWT7j8Qw+6JMn4TPrT44+vOfeijZ2KKBgK0zD\ntPZ96j/4Iw1Ln8Ocvhq1qX33Cp9MQ5OFL1ZnATDvvH4esyJAURSumtYPcFSDrKhpcnFEQgghPMG6\nPYexqyojksII9je6Ohy3MrRfKJHB3pTXNLEzo8zV4ZzU3uxyahss9A7zJa6Xv6vDEZ1Aklw35Oul\nby1g8MOW/E47zqZ9RygqbyAs0IspQ3tu2fvONL65yvKOjFIaTV23HFYx+qJPnozPhfc5Znin3nI0\n4S1IxbTmPeqaE15L+poOJ7xfr82htsFCckwg4zysBH9i70BGD4jAYrXzVfNFHyGEEOJU7HaV1S0F\np0bILO7xNIrSuirRXdsJtRacGtzLreuHiPaTJNdNnT86Fq1GYev+EkqrGp2+f6vN3toj9NJJ8ei0\nMhQ6Q3iQN0kxgZitdnZkdF3F7F9TjL7o+09xJLzzX8brnN+ijRkMqNgKUmla864j4V32ApYDa1FN\n9We1/4LSOlbsKERRHD1oPfHF4oqpCWg1Chv2HuFQifNmuIUQQnQ/e7PLqagxER7kRUqcFJw6mUlD\neuFj1JFZWE324a6pDdJWdY0WdmeWoShHJyNE9yOZjZsKDfRi7MBI7KraKVfB1u8torSqiV4hPkwY\n7Fkzb55mwuCWnrmdv2T5TBQvP/QDzsFn9gP4zn8Z4zk3o40eBKjYDu2hafUC6j64h4YfXsSSsf6M\nCa/aXGzKrqqcOyKaPpGeueQnMtiHc0dEowKfr8p0dThCCCHc2KrmivxTh0dLwalT8DLoWlcl/rS1\n81YltsfmfcXY7CqD4kNkqXk3JkmuG7uwuZ3Q2t2HqW0wO22/FquNb9fnAo42KlqNDIPONGZABDqt\nwv7cSiprTa4Op5XGyx/DgKn4XPQgvte/hHHKTY6EV7Vjy99N06q3j014zSc2dt+aXkJ6fhV+3nou\nn5Lggu/CeS6ZFIe3UUtqdgVpuRWuDkcIIYQbqqhpYk92OVqNwuQhcqvX6UwfFYNGUdiWXupWNS9a\nqipPGiy/v+5Mshs3FhPhx5CEUMxWOyt3OK+P5+pdh6msNRET7svoARFO2684OV8vPcMSw1Bx3Aft\njjTeARgGntuc8L6McfKNaHsPPDbhXXgPjT++jOXgBlRzIyazjU9XOGY9556TgJ+33sXfRccE+BiY\nPb4vAJ+vzMTeRX2qhRBCeI41uw+jqjCqfzgBvgZXh+PWQgK8GD0gHLuqsnx7gavDAaCwtI68I7V4\nG3WMSJLeuN2ZJLlurmU295ftBZgstg7vz2SxsWSjo1XK5VMSZJlNF2ldspxa7OJIzkzjHYAh5Tx8\nLv4zvte9hHHyDWijBoDdhjVvJ00r36Lug7spWPws8aZ0+kUYOWdY9yi8MWN0LMH+RvKL61pbCwgh\nhBAANrudNc0Fp84dLm0X2+L8MY4CVKt3HabJ7Pp+9Oubu12MHRiBQS9dRbozpya56enp9O/f/4R/\npaUnL7jzxRdfMGPGDIYNG8bNN99Mfr57rdl3B/37BBEf5U9do4V1e4o6vL8V2wuoqTcT18uf4XIF\nq8sMTQzF10tHQWmdRxU20vgEYkiZhs8l/4fv9S9inHQ92qj+qDYbEXUHuNFvLXfZ38f0y2tYMjeh\nWtxnOVJ7GPVa5kyJB+DL1dlYrB2/sCSEEKJ72J1ZTlWdmV4hPvTvE+TqcDxCYu9AEqMDaDBZWbnT\neasS28Nmt7e2dJSlyt2fU5PcgwcPEh0dzbp16475FxoaesK2q1ev5oknnuCuu+7i888/x2g0cvvt\nt2O1uv4qjztRFIULxzmWUP64Jb9DTbUbTVaWbnLM4s49J8Ejq+B6Kp1Ww5iBXdcztzNofIIwDJqB\nzyUP83nI7SyuH0uJIQbFbsWau52mFf91LGn++TUsWVtQLe5z//HZmDQ4iuhwX8prmli+3bUvyEII\nIdxHS8Gpc4f3lvdQZ+HSSY6Lx0s25FJd77waM2crLaeS6nozkcHeJEYHuCwO0TWcmuRmZmaSkJBA\neHj4Mf80Jyls9O677zJ37lzmzJlDcnIyzz33HEeOHGHFihXODKlbGJkcTkSwN2XVTWxLb38bmmWb\n86lvspIUE8igeCl539UmNpep37TvCHa7597vuT+vkvWZjWy2pxByxV/xve4FjBOvQxuZBDYz1pxt\nNC1/g7qFd9P4y+tYsreiWj0n4dVoFK46tx/geEGua7S4OCIhhBCuVlLVSFpOBTqtholScOqsDEkI\nZWhiKI0mG1+tyXJZHBtSHSsiJw6JkosUPYBTk9yMjAwSEs5cYdVut7N7927Gjh3b+pifnx8pKSns\n2LHDmSF1CxqNwqyxjntz31+Wztrdh1HPoiiO2WJj4Y8HWLIhF5BZXFdJjA4gIsibqjoz+/MrXR1O\nu9jtKp8sPwjAReP7EuxvROMbjGHw+fhc9gi+176AccI1aCL7ORLe7K00/fJ6c8L7BpacbahW113F\nbashCSEM7BtMg8nK9xtzXR2OEEIIF1uz6zAqjo4Jnl5o0RV+M60fWo3C2t1F5B2p7fLj1zdZ2JFR\nhsLRSQfRvemcubPMzExUVWXu3LmUlJQwePBgHnrooRMS3+rqahobG4mIOLayb0REBEeOdGwpp1bb\nPWtpTR0RzcGCajamHeG9Zemk5lRw8+yB+J7hRFtQWsd/vtpLQWk9Oq3CNTOSSYk/cfm4p9BqlV99\n9Lzf9cQhvfh6bQ6b0ooZmuh590Sv3VPIoZI6QgO8mD0h7oS/N21gGPrhF+I9/ELstWWYs7diydyC\nrSQLa/YWrNlbQGdEHzcCfeJY9H2Goujcszrl1dOTePzdLSzfXsAFY/sSGujV+jVPH4fCs7X83Z3N\nOOyur43C9XrC+dBqs7e2nZk2Kkb+ntohJsKfGaNj+XFLPp+sOMjD149y+oTL6cbi9gOlWG12UuKC\niQjxcepxRVdr27hxWpLb1NREQUEBvXr14tFHH0VRFP773/9y/fXXs2TJEkJCQo7ZFsBgOPbNrcFg\noK6u/UV5tFoNISG+7X6+u3v45rGs3F7Af7/cw9b0EnKKarjv2lEM6XdisqSqKj9tzuOtr1MxW2xE\nh/vy4PWjSYwJ6vrAO0FgoGeeoC6clMDXa3PYfqAEH9+ReBmdep2pU9U3WviyeZnRLZcOplfkGe5n\nCfGFvn3hvCuxVJdQv38T9fs3YDp8EEvmJiyZm1AMXvgmjcF34ES8E4ejcaOENyTEl3OGR7NmVyE/\nbjvEXVcNP2EbTx2HwrMd/zrXlnHYnV8bxYkamizkHK6hV6gPIQFeXbJ6qzufD9fuKqSm3kzfXv6M\nGyr347bXTZcOZmPaEQ7kV7G/oJrJwzqnQvXxY9Fms7Nql6Mq9gUT4uV82EM47R22l5cXW7duxWg0\notc7Zhdffvllpk6dytKlS7n++utbtzUajQCYzccuWzSbzXh7e7c7BpvNTo0bNZvuDMMTQnjylrH8\n95s0sgqreeQ/65k9MY655ySga76yWN9k4b2l+9m6vwSAyUOjmH9Bf7wMOioq6l0ZfodptQqBgT5U\nVzdgs3nefa1eWoXE6ECyCqv5eVMukzzovp5Plx+kus5MUkwgKX0Cz3Is+ULydLyTp2OoKcWStQVL\n1hZspTnUpa2lLm0t6L3Qx4/EkDgOXexgFK3rl4PNHt+HtbsL+WVLPjNGRhMR7Hjh9PRxKDxby9/e\n2YxDTz/3izOzWO3sySpjY9oRdh0sw2J1FKr099ETG+FPn0g/+kT6ExvhR+8w39b3DB3VE86HS9Y6\nLvBOGdqbysoGF0fj2eaek8D7y9JZ8E0q/Xr5O7WNz6nG4tJNeeQW1RAW6MXA2LN9/yLcTUCANzrd\nmc9fTp1G8vPzO+ZzLy8vYmNjT1iCHBwcjLe39wmthUpLSxk2bFiHYrDZ2l992FOEBnjx52tH8N36\nXJZszOX7DbmkZZdzx6WDqGu08Oa3aZRVN2E0aLnhgv5MaL73oHv8bByD2mZTPfb7mTSkF1mF1fyw\nKY9xAyM84opwcWUDP25xtPi6enpSc+Gsdr6Z8Q1FP/RC9EMvxF5TgiV7K9bsLdjL8rBkbMCSsQH0\n3ujiRqBPGIs2ZpDLEt6IIG8mDOrFhtQjfL0mm1suTmn+iuePQ+G5jo65to9DGafdk92ukp5fyeZ9\nxWw7UEqj6WiHiphwPyprm6htsLAvt4J9uRWtX9NpFXqH+TJ9ZAyTh3a0CE/3Ph8eqWhgX24lBr2G\n8SmR3fJ77EqTh0Txy7YCCkrrWLoxl0uaKy87x4ljsayqsbXY1fUzk9FpFPkdery2vf90WpKbmprK\n/Pnz+fzzz+nXz1GZtK6ujtzc3GNmccHRFmfYsGFs376dCy+8sHXbffv2ccsttzgrpG5Np9Vw+TkJ\nDIoP4e3v9pF7pJbH39uC1apiV1X69vLnd5cNIjK4+y4f8lSTBvfim3U55JfUsTuz3CP6FX+2IhOb\nXWXSkF7ERzmv7L4mIALj8IswDr+oOeHdgjVrK/byPKwHN2A9uAEM3ujiRjoS3uhBKNquXeJ96aQ4\nNqUVsyHtCLMn9CUqVJY5CSFcq6SqkeXbCtiSXkx13dFVcX0i/Rif0ouxAyMICfBCVVUqa03kF9dx\nqKSW/BJHr/aSykbyi+t4b1k62zNKuenCAQT5GV34Hbmv1bscbYPGDozEx8tzbjFyVxqNwjUzkvj3\nxzv5flMek4f2Jti/c8aeqqos/OkAZoudsQMjPLIWimg/p/21DhgwgJiYGB599FEeffRRtFotL774\nIqGhocyePZv6+noaGhoIDw8HYP78+dx7770MHDiQIUOG8NJLLxEVFcXUqVOdFVKPkBwbxBO/HcMH\nP2WweV8xADPHxHLluYlOW4oknEuv03LhuL58svwg367PYVi/ULeezd2fW8HOg2UY9VrmnpPYacdx\nJLwXYxx+MfbqI0dneMsPYc1YjzVjPRh80MWNQp84Bm10Coqm899wRAT7MHloL9bsLuLb9bnccemg\nTj+mEEKcSmpOOf/5Oq111jYiyJtxKZGMS4mkd9ixF+EURSEkwIuQAK9jLqg2mqzsyCjl418Osier\nnL++s5nrZ/ZnXEpkl34v7s5itbFuj6Pg1HkjOuf+0Z5oYN9gRiWHsz2jlMWrsrjtkpQzP6kdtuwv\nITW7Ah+jjmumJ3XKMYT7cto7RJ1Ox1tvvcUzzzzDLbfcgtlsZtKkSbz//vsYDAbefPNNXnvtNQ4c\nOADAjBkz+Mtf/sKrr75KVVUVo0aN4s0330Srdd7a/J7Cx0vPHZcOYuLgXngZtCR1k+JS3dnU4b1Z\nujGX3CO1pOZUMCTBPSte2+0qH7e0DJrQt9Outh5PE9gL44hLMI64BHtV0dGEt6IAa8ZarBlrweiL\nPm4UusSxaHsP6NSE9+KJcazfe4Qt+4q5aEJf+vaSJvJCiK6lqiordhTy8S8Hsasqw/uFcfHEOOKj\n/M/6Qqm3UcekIVGkxIXw3rL9pGZX8Oa3aezIKOX6mcn4+7hPEUBX2naglPomK30i/Yjr5e/qcLqV\nq6b1Y3dWORvTjjBtZDSJ0YFO3X99k4WPf8kA4MrzEgmUlQo9jqKeTcNVN2e12qQgQDfXUkG7oqLe\n4++pWLY5j89XZpEYHcBfOqGUvjOs2lnIwh8PEBrgxdO3jXNqgYj2sFUextqS8FYWtj6uGP3QxY9E\nlzAWbe+BKBrnx/nBTwdYuaOQUf3DuefKYd1mHArP8YcVDwHw+rRngbadDzNuvQmA5Hfe74oQRSex\n2uws+uUgq3Y6znsXT+zLnCkJaJzwuqGqKqt3H+bT5ZmYLDYCfA3cNGtAm2+l6U6vy7+mqipPvLeV\n/JI6bpjVn3OHy0yus32xOovvN+aR0DuAv8wf1eHx/OuxuGDJPtbsPkxSTCB/vm6kU/5WhHsIDvZB\npzvz+zxZzyqEi5w3Iho/bz1ZhTXsz6t0dTgnaGiy8uWabADmTevn8gQXQBvcG+Ooy/C96ml8rnoa\nw6g5aIJ6o5rqsKSvoXHpc9R/eC9Na97HWrgP1W5z2rEvnhCHTqth+4FSlzSyF0L0THWNFl78bDer\ndhai02q4/ZIU5p6T6LQ37YqicO7waJ64ZSzJsUHU1Jt55Ys9LPh+Hw1N1jPvoJvam11Ofkkdgb4G\nJg3u5epwuqXZ4/sS6Gsg+3ANm9KOnPkJbXQgv5I1uw+j1SjcOGuAJLg9lCS5QriIl0HHzDGxAHy3\nPte1wZzEdxtyqGu0kBwTyOj+4a4O5wTa4GiMo+bgO+8f+Fz5NIaRl6EJ7IXaVIslfRWN3z/rSHjX\n/g/r4f2o9o7NMAT7G1vvyWrpFyyEEJ2pqLyevy/cxv68SgJ8Dfz5uhGMH9Q5CVdEkDcPXTuCq6f1\nQ6fVsH7vEZ7+YBs1DeYzP7mbUVWVJRvyALhgbB/0bZg1EmfP26jjynMdtT4Wr8qiydzxiyoWq433\nlu4HHEn08fepi55DklwhXGj6qBh8jDoOHKriQL77zOYWVzTwy7YCFODqGUluuZT617Qh0RhHX47P\nvH/ic+VTGEZcgtKS8O5fSeOSZ6j/6F6a1i3sUMI7e0JfDHoNuw6WkeFGvy8hRPeTmlPO3xdup6Sy\nkT4Rfjx242gSezv3vsXjaRSFmWP78Lebx9A7zJei8gae/2QXdY2WTj2uu8k4VEVmYTW+XjqmDu/t\n6nC6tQmDexEf5U9VnZn3lqZjsXZsBdbiFZkUlTcQGeLDxRP7OilK4YkkyRXChbyNOs5vmc3dkOva\nYJrZ7SrvLd3f3DIoijgPKrKkKArakFiMY67Ad94/8bniSQzDL0YJiERtrMGyb8WvEt4PsBYdOKuE\nN9DXwPSRMQB89EN6Z30bQogebuXOQl76bA+NJisjk8N5+PpRhAR4ddnxe4f58uDVw4kM8eFQSR0v\nfrarRy1dXrLRMYs7Y3Qs3kZpG9SZNIrC9TP7Y9Rr2Zpewr8+2kllrald+yoqr+ez5mJTN17QX2bg\nezhJcoVwsRmjY/AyaNmXW0lmYbWrw+HHLflkFFQT6Gdg3rR+rg6n3RRFQRvaB+PYK/H9zb/wmfuE\nI+H1D29OeJfT+N0/qV90H03rP8R6JANVPXPCO2tcH7wMWnYcKCHjUFXnfyNCiB5ly/5iPvjxAHZV\n5eKJfbnz8sEYDV3/Zj3Qz8iDVw8nLNCLnKJaXlq82ynLSd1dTlENaTkVGA1apo+KcXU4PUJ8VACP\nzB/VPNZqePJ/W8k+XHNW+1BVlfeX7sdqszNlaBQD+gZ3UrTCU0iSK4SL+XrpmTHa8ULq6ntz84tr\nW4tN/Xb2QPy89S6Nx1kURUEb1teR8F79LD5z/4Zh2GxHwttQhSXtFxq//Qf1H91H04aPsB45eMqE\n19/HwMwxfQD4crXcmyuEcJ7swzUs+N5xP+FV5yU6tcBUe4QEePHQNSMI9jeSWVDNq1/sxWxxXkE/\nd/R98yxuS3FI0TViIvz4642j6R8bRHWdmX99tIMNqUVtfv7aPUWk51cR4GvgaumJK5AkVwi3cP7o\nWIx6LXuzy8kpOrurl85isdp4+7t92Owq542MdtvevR3lSHjjMI6b50h4L38c/dALUfxCHQlv6s80\nfvs09Yvup2nDImzFmSckvLPG9cHXS8f+vEq3rIwthPA85dVNvPLFHixWO+cMi2LW2D6uDgmAsCBv\nHrpmBIG+BvbnVfL6V6lYrN2nVdCvFZbVsyOjFJ1W01oYUnQdfx8D9189nHNHRGO12XlnyX4+W5mJ\n3X7ybqc1DWZW7CjgHx9u5/1ljluIbrtsMH7S51kgSa4QbsHfx8C0kY7Kva6azf1idTaFZfVEhvgw\n71zPXaZ8NhRFQRsej9f43+B7zXP4zHkM/dBZjoS3vhJL6k80fPN36hc9QNPGj7GVZKGqKr7eeuY0\n/4y+WptNN2o3LoRwgUaTlZcX76Gm3syAPkFcP7O/WxX8iwzx4YFrRuDnrWdvdjn//SYVazfqidti\n6cZcAKYMiyLIz+jaYHoonVbDDRf0Z/7MZLQahR825/Py4j00NDmKnzWarGxILeKFz3Zx36vr+fCn\nDDILqjHoNMwa14epI2WJuXCQu+mFcBMXjO3D8u0F7MosI7+4lj6R/l127P25Ffy09RAaReG2i1Nc\ncv+XqymKgjYiAW1EAuq432AvzcaStQVr9lbU+gose3/EsvdHFL9QDIljuXDwZL5erSOzoJq92eUM\nTQxz9bcghPBAdrvK29/to6C0jsgQH/4wdwg6rfvNQUSH+fLA1cN5dtFOdh4s450l+7j9kkFou8nL\nRUlVI5v3laBRFC50k1n0nuy8kTFEhfryxtep7M12VBqPifBjd2ZZ60oCjaIwNDGUcQMjGZ4Uhp+P\nwa0uDgnXkiRXCDcR4Gvg3BHR/LT1EN9tyOUPlw/pkuM2NFlY0NxT7pJJcST09pxqyp3FkfAmoo1I\nRB3/G+wlzQlvzlbUunJMu5dh2r2MxwKDWEc0a1fWMyjuIrRu+MZUCOHePl+Vya7MMny9dNx75VB8\nvdz3PtA+kf7c95vhPPfJTrbsL8Gg03LrJSmuDsspftiUh11VmTS4F2FB3q4ORwAD+gbz1xtH88oX\neygsredIRQMAyTGBjBvUi9H9w/GXpcniFHpckquqdmw2GyDLCz2R3a7BZNJhsZixt7PXaccoaLVa\nFKVzkplZ4/qwYkch2w+UUlBaR0y4X6cc59c++jmDihoT8VEBXDRBesodT1E0aCP7oY3shzrhamzF\nWdhytmLL2YZXXQUzvKvAnkblhyvwHzABXeJYNKF95WqyEOKMVu8q5Mcth9BqFP5w+RAiQ3xcHdIZ\nJfQO4N6rhvHCZ7tYt7eI8GBvfntZ11yU7SyVtSbW7S1CwdEPXbiP8CBvHpk/iiUb8vD11jFuYGSX\nttMSnqvHJLmqqlJbW0lDQ62rQxEdVFamcVGCe5SPjz/+/sFOT2SC/IxMHdab5TsK+PiXg/xp3rBO\nXba2ZX8xG9OKMeg13HZJilsukXMniqJB1ysJY3R/gi+5jdJ9u8jbvBJd4U4CTZWYdy/FvHspSkAE\n+oSx6BLGoAntIwmvEOIE+3Mr+PAnR0/P+Rf096iWJ8mxQfzussG8+sUevlqTTUJsMEPjPCf+4/24\nJR+rTWV0/3CiQn1dHY44jpdBx5XnJro6DOFhekyS25Lg+vuHYDAYkfecnkur1WBzUcELVQWz2URt\nbQUAAQEhTj/G7Al92ZJezP68St5dup9bL07plBYSlbUmPvjxAAC/mZZELw+YQXAniqJBF9WfPhf3\n4+/vb0Fbns3cuApiGw+g1pRg3rUE864lKIGRRxPekFhJeIUQHKlo4PWvUrHZVWaN68M5w3q7OqSz\nNrxfGFdPS+Lj5Qd5+ZOd/Pm6kSR64O0udY0WVu0qBOCiCXGuDUYI4TQ9IslVVXtrguvr23XFfETn\n0Ok0KIrrZnL1esf9H7W1Ffj7Bzl96XKwv5F7rxrGsx/vZFNaMQE+Bn4zrZ9TkyO7qvLu9/uob7Iy\nJCGUc4d73hssd6FRFOZNS+bZj+t5Jb83/7rtFnxrc7Bmb8Wasw21uhjzzu8w7/wOJbAX+oQxjiXN\nwTGS8ArRAzU0WXn58900mKyMSArjyqmeO0M1Y3QMJVWNLN9ewCuLd/PIDaOJ8LD7WX/Zdgizxc6Q\nhFD69pL3iEJ0Fz1ibaLjHlwwGKQcvHCOlrHUMracLT4qgLvmDkGrUfhp6yGWbc532r5VVWXJ+lzS\ncivx89Zz8+wBkmx10IC+wQxLDMVktvHNhjx0vQfiNfkGfK97Ee+LHkI/8FwUL3/U6iOYd35Hw+K/\n0vD5XzBt+wpbRaGrwxdCdBFVVXn/h3SKKxuJjfDjtktS0Gg89/yrKArXzUxmZP8IahssjuS9udWL\nJ2g0WfllWwGA1KQQopvpEUluS5EpeR8vnOXoWOq8AmaD4kK47ZIUFGDxqizW7j7c4X2aLDbe/m4f\nX6/LAeDGWf2lF6CTXHlePxQF1uw6TFF5PQCKRosuOgWvKTfhe/1LjoR3wLkoRj/sVUWYd3xDw+JH\nqP/8L5i2f42tUhJeIbqz1bsPsy29BKNBy52XD8bL4PkL6rQaDQ/NH010uC9F5Q288bXn9NBdubOQ\nBpOV5NggkmODXB2OEMKJekiSK4RnGjswkmvPTwbg/R/S2XmwtN37Kqlq5OmF29m0rxijXsudcwYz\nqn+Es0Lt8aLDfDlnWG/sqsrnK7NO+HprwnvOTfjOfwnv2Q+gH3AOGH2xVx7GvP1rGj5/hPrPH8G0\n/RtsVR2/qCGEcB8FJXV8/MtBAG68oD+Rwd2nDoKvt54/zRtOgI+efbmVfPRzBqrq3l0syqoaWbIh\nF4CLZRZXiG5HklwPYzKZWLjwXa6/fh7Tpk3ksssu4LHHHubgwYzWbZ5++m889NC9p9zH0qXfcf75\nU5wSj81m4/PPP2n9fMGCN5k/f55T9i0cpo+K4ZKJcagq/PebNDIOVZ31PvZml/Pke1spKK0jMtib\nR28YxegBkuA625zJ8Rj1WnZllnEgv/KU2ykaHbqYwXid81v85r+M94X3o+8/pTnhLcS8/SsaPvsL\n9YsfxbTjW+xVR7rwuxBCOJvJbOM/36RisdqZPDSK8YN6uTokpwsP8ubuK4ai02pYveswP2095OqQ\nTsmuqry7dD9NZhujksMZFO/8IpJCCNeSJNeDmExN3Hvv71m6dAk333wrH320mH/96wV8fX25446b\nWbdudZv2M336+Xz22TdOiWnt2lW8/PJzrZ9fc818XnvtLafsWxw1Z0o8U4f3xmK18/LiPRSU1LXp\neXZV5bsNubz0maPIyfB+Yfz1xtFEd0H/3Z4o0M/IrHF9APhsZSb2NsxkKBodutgheE29Bb/rX8b7\nwvvQJU8Bgw/2igLM276k/rP/o/6Lv2La+R32akl4hfA0Hy/PoKi8gahQH66bkezqcDpNYnQgt148\nEIDPVmSyM6P9q4860/JtBaTnVxHgo2f+rP5Sl0KIbsjzbwbpQRYseIuSkhLee+8jAgICAYiK6s3A\ngYMIDg7hH/94kkWLvjjjfoxGL4xG5zTSPn45ko+PD9B9lmC5C0VRmD+zP3UNFrZnlPL8Z7t46JoR\n9ArxOeWLc6PJyjtL9rHzYBkKjlnGiyfFdUo7InHUBWNjWbWzkJyiWrbuL2FcSmSbn6todehih6KL\nHYpquxFbYRqW7C1Yc3dgLz+EufwQ5q1foAntiy5xDPqEsWgCZEZeCHe2eV8xa3YXodNq+P1lgzEa\ntK4OqVONHRhJcWUjX63J5s3v0njg6hH0iw50dVitisrrWbzacUvJjbMGEOBjcHFEQojOIEmuh7DZ\nbHz77Vf89re3tSa4v3bjjbewePGnLF/+IwBms5l//OMJVqz4GX//AG688bfMmXMl4Fiu/OKLz/Lz\nz2sBqKqq4pVXnmfDhrXodHpGjRrNPffcT2hoWOu+3n77P/z00zIaGhoYNGgw9933EGVlZfz1r/8H\nwOTJo3nllf+yc+d2Vq1azgcffMYf/nAb8fEJPPDAw61xLlq0kO+++5qPP/4Sm83Ge++9zZIl31Bf\nX0///gP4wx/+yMCBgzr1Z+mpNBqF2y9N4cXPdpOeX8Ujb29Gp1UI9DUQ5Gck0M9IkJ+BQD8j/j56\nftpyiCMVDXgbddx+SQrD+oW5+lvoEbwMOuZMied/Pxzgi9VZjEwOR687+0UzilaHrs8wdH2Godos\n2ApaEt6d2MvzMJfnYd6yGE1YX3QJY9EnjJGEVwg3U1LZwP9+SAfgmhlJxET0jFU0F0/oS0llA+v3\nHuHFz3bz0DUj3KI9j81u550l+7BY7Uwa3IsRyeGuDkkI0Ul6dJL70ue72ZNV3uXHHZoYyr1XDTur\n5xw6lE9dXS2DBw896deNRiODBw8hNXUvOp2Obdu2cOmll7NgwYekpu7h+ef/hb9/INOnn3/Ccx99\n9CH8/f159VXHMuN3332T+++/hwULPkCr1fLCC8+wZcsm/u///kp0dAxvvfUGDz54Lx988Bl//vOj\nPPPM3/nmmx8ICAhk587trfudOfNC3n77P9x774PodI6h9ssvP3LBBbMBeO+9t1m1ajl//euThIdH\n8PPPP3D33Xfw4Yef06tX1Fn9fHoKvU7LXXOH8s6SfWQcqqLBZKW8xkR5jemk20eH+3LX3CHdqsCJ\nJ5g8NIqftxVwuKyeFTsKuGBsnw7tT9Hq0fUdjq7vcFSr+WjCm7cTe1ke5rI8zFs+RxMe7+jDmzAG\njb+8eRPClaw2O//9Jo0ms43R/cN7VD9yRVG46cIBNJlsjtVHn+7iz9eNJDrM16Vxfb8xj5yiWkIC\njFzTjZeNCyF6eJLrSWprawAIDAw65TaBgUFUV1cRGhpGdHQM99//f2i1Wvr2jWP//jQWL/7khCR3\n587tpKXt5YcfVrYuYf7b355m9uzpbNmykaFDh/PDD9/z6KNPMGHCJAAefPBhFi58j4aGBvz8HFel\nW2Z9f23atPN5+eXn2LFjG2PHjic/P5eDBzN46qlnMJlMLFr0Af/+90uMGjUGgFtuuYOdO7fz5Zef\nceedf+zwz6y78vHScc+VjosdZouNqnozVbUmqps/VtWbqKo1E+xv5OKJfbtFiwpPo9VouOrcRF5e\nvIclG3KZPDQKXy+9U/at6Azo4kagixuBajVjLUjFmr0Fa94u7KU5mEpzMG3+DE14AvrEMejix6Dx\nl1l8Ibra4lVZ5B6pJSzQi5su7Hn9yLUaDXdcNohXv9jL3uxynvtkJw9fN5IIF110zTtSy3frcwH4\n7eyB+HjJa6MQ3VmP/gs/29lUVwoMdCxRrq8/dcGhurra1iQ4JWUwWu3R+34GDEjhl19+POE52dlZ\nWK1WLr742OTXbDaTm5tLUFAwVqv1mCXEgYFB3H33n84Ys7+/PxMmTOKXX35k7Njx/PzzjwwePITo\n6Biys7Mwm038+c9/OuaF32w24+Pj2iu9nsSg1xIR5E1EkLerQxHHGZoYyoA+QaTnV/HFqixumDXA\n6cdQdAb0cSPRx410JLyH9v4q4c3GVJqNadOnaCIS0CeMdczw+oU6PQ4hxLF2Z5bx09ZDaDUKd1w6\nCB8nXeTyNDqthj9cPpiXPnfcZvPvj3fxf9eNJDTQOXVB2spitfHOkn3Y7CrTR8aQEifVlIXo7np0\nkutJoqNjCQoKZs+eXSQnn/hm2WKxsG9fKjfffBsHDqSj0Rx7xVhVVXS6E19kbTYrISGhvP762yd8\nLSAggOLi4g7FfcEFF/GPfzzBgw/+hV9++ZF5865tPS7As8++RETEsYV5jEZjh44phDtQFIVrZyTz\nxPtbWbXrMCOSwxmS0HkJpqIzoI8fhT5+FKrVhDV/D9bsrVjzd2EvycZUko1p0ydoIvs5ljTHj0Hj\nJ2/0hHC2yloTC77fD8DccxJIdKOiS65g0Gu5+4qhvPDpLrIO1/DcJzv5v+tGEujXda/1X63NobCs\nnshgb648L7HLjiuEcB1pIeQhtFotc+ZcwaJFH1BdXXXC1xctWojNZmfGjFkAx/TNBUhN3UN8fMIJ\nz4uLS6CysgK9Xk9MTCwxMbEEBgbxyisvkJ+fT3R0DFqtloyM9Nbn1NfXccklM9m3L/WMy68mTJiE\nRqPhiy8+pajoMNOmzQAgJqYPWq2WsrKy1uPGxMSyaNFCNm/eeLY/HiHcUkyEH3OmxAPw3tL91DVa\nuuS4is6IPmEM3jPuxG/+q3jN+AO6hDGgNWAvzsS08WPqF91HwzdPY079GXv9qXv6CiHazma38+Y3\nqdQ1WhgcH8IF4zp2P3534W3Uce+8YfSJ8KO4spHnPt3VZefDjENV/Lg5H0WBWy9Owajv3tWthRAO\nkuR6kBtvvIWYmFjuuOO3rFz5C0eOFHHw4AFeeunf/O9/7/LII48TFBQEQG5uDi+99G9yc3P4+uvF\n/PjjUubPv/mEfY4ePZakpP48/vhfSEtLJTs7i6ee+isZGenExcXj4+PD5ZdfyRtvvMq2bVvIz8/l\nn/98Cj8/P5KTB+Dt7bi3Jj19PybTicWP9Ho906bNYMGCtxg/fmLrcmpvb2+uvPI3vP76S6xbt5rC\nwgLefPN1vv/+W+Li4jvtZyhEV7twXF8SowOoqjPz0c8ZZ36Ckyn6loT3D/jd8Cpe0+9EFz8atHps\nxQcxbfiI+o/uo+Hbf2BO/QV7Q1WXxyhEd/HNulwyCqoJ9DNw68Up0rLtV3y99Nx39XCiQn0oLK3n\n+U930dBk7dRjNpmtLPh+Hyowe3zfHj+rLkRP4tTlytXV1Tz//POsXLmSxsZGhg0bxsMPP0y/fv1O\nuv3YsWOprq4+5rEXXniBiy66yJlhdRt6vZ4XXniNxYs/4f3336Gg4BA+Pr6MGDGKN998l6Sk/q3b\nTpt2PpWVFfz2t9cTGhrKgw/+hbFjx5+wT41GwzPPvMArr7zA/fffhd2uMmTIMF5++T+tRaV+//t7\nAPjb3/6C2Wxh2LDhPPfcK+h0OoYMGcawYSP4/e9/y+OP//2kcV9wwWy+/voLZs6cfczjv/vd3Wi1\nOp577l/U1NQQFxfHP//5/CkrSAvhiTQahVsvSuHx97aweV8xI5PDGTPANa1+FL0RfeJY9IljUS1N\nWPN2OZY0H9qN7UgGtiMZmDZ8hDYqGV3CGHTxo9H4BLkkViE8TVpuBd9vyEVR4I5LBhHgK/1Xjxfg\nY+CBq0fwr4+2k3eklpcW7+beK4d1ShEou13lo58zKK1qIjbCj8smywV0IXoSRVVV1Vk7+93vfkdR\nURGPP/44gYGBvPrqq2zbto2lS5cSEBBwzLbFxcWcc845fPnll0REHH3DFxAQ0O57Mq1WG5WVDSd5\n3ExZWRFhYVHodPKi8913X/PGG6+wbNkKV4fSLjqdBqvV7tIYZEz1bFqthpAQXyoq6rHZ2jYWV+wo\n4MOfMvDz1vPkLWMJ6sL70c5ENTdizd+FNWsL1kN7wd4yu6KgjeqPLnEsurhRaHxOPwuimupRG2tQ\nvANQjG0rIGdXVeoaLFhtdoL9jWe8BaI9x+gu/rDiIQBen/Ys0LZxmHHrTQAkv/N+V4TYY1XXmXj8\n3S3UNFi4bHJ8j0qo2nM+LKtq5J8f7aCy1kSwv5EbZ/VnaKLzqsCXVTfy9nf7OFhQjVaj8NhNY4jt\nIT2Ke7L2jEXheYKDfdDpznzbgdMunZWUlLBy5Uo++eQTRowYAcCzzz7L2LFjWbduHbNnHzuLl5mZ\nibe3NykpKT2urL4r5ebmsGvX9hOKPQkhOtd5I6LZmVFKWm4l7y9L549XDnWbc59i8EbfbwL6fhMc\nCW/ezuYZ3r3YitKxFaVjWv8B2qgB6BLGoosfhcb76IVLe3UxTZs/xZa3E1QVFAVt35F4jZuHJjCS\novJ6cotqqawzUVVrcnxs/v+qOjM2u+Naa4CPnoTegSRGB9AvOpC4qIDW++fOdAwhXMVuV3nru33U\nNFgY0CeISybGuToktxcW5M2frx3Bm9/uI6eohpc+38P4QZFcMz0Jf5+OXTjelHaED346QKPJRqCv\ngVsvSZEEV4geyGlJro+PD2+99RaDBh1tNdPyBq6mpuaE7Q8ePEhcXJzbvMnrKR566F5Mpibuv/9h\nV4ciRI+iKAo3zx7IXxdsYU9WOWv3FHHOsN6uDusEisEbfdJE9EkTUc0NWHN3Ysnegq0gFdvh/dgO\n78e0fiHa3imOlkShfWhc+hxYmhzJJ4CqYsvbSfWhNBbprmJ70enP877NSxVrGizsyixjV2YZAFqN\nQkyEH8PCbZx75H20dvMJx6g/vB/fyx+XRFe4zJINuezPqyTAR8/tlw46obuBOLmIYB8emT+Kn7Ye\n4uu12WxKKyYtp4Lrzk9mzICIs35/2NBk5cOfDrBpn6MrxIikMG66cECHk2YhhGdyWpLr5+fH1KlT\nj3ls0aJFmEwmJk6ceML2Bw8eRFVVbrnlFtLT04mJieHOO+88YR9nS6s9sZaW3S71tVp89tk3rg6h\nQ1pe8xTl6HtdV9JoNCcdc6J702qVX31s++8/PNiH+Rf0561v0/hk+UEGJ4QS6m1HbahB8QlA427L\nb7390A2cgtfAKdhN9VhzdmDO2oK1IBVbYRq2wrRTP1e1o1hNDG1cTZphOkMSQgkN9CLY30iQn9Hx\n0d9IsJ8Rg16LqqqUVDaSWVhNZkE1mYVVFJbUUFJcTq+6NaA3gaKecAwsTZi2fIbfrD927s/CjbSc\nc85mHMp5qnPsz6vgm/U5KMAdlw0mNLDn9Sxv7/nQ8Ry4aGIcowdE8O73+0jPr+K/36SxZX8JN84a\nQJB/227rOJBfyVvfplFW3YRBr+G68/szdXhvmUjpYToyFoUnadvfdaf1yV23bh3PPfccN998M336\nnFhCPysri6qqKu69914iIyNZtmwZd9xxBwsXLmTs2LHtOmbLWvzjmUw6ysocyYhOJ4O+O3D1GzZV\n1aDRaAgK8pG+vj1YYKDPWT/n4nMSSc2tICP1AAWLn0VvzW5dfuuTPJbQafPRh0R1QrQd5QtRs2Di\nLGyNddSnb6Rm13LMhw+e8hlaRWWY4RCTp9ai1zVgtzShWkzYq8yoZSZUcxN2q5lGiwnV0oSvxcxQ\ni4nBFhOqzQTBtjOHpdqx5u4k0FtF690zliQe/zrXlnF4stdG0TFVtSbe+jYNVYWrpidxzuie3S6o\nPefDFiEhvjxz9zn8uDmP975LY0dGKQcOVXHrpYMYOygKo0GLQac5IWm12ux88tMBPl+egV2FfjGB\nPHD9aKLDe8a5QJxcR8ai6D46Jcn94YcfePDBB5k5cyYPPPDASbdZuHAhZrO5tYJvSkoK6enpfPjh\nh+1Ocm02OzU1TSc8brGYsdvt2Gx2FEVuRPdkiuJIcG02u0tncm02O3a7naqqBvT6zm2BINyPVqsQ\nGOhDdXUDNtvZD8SrRwfQcGgpBrPl6OykqtKQsZWGnL34X/kE2g4sv1XtdrCZUS0mVKsZrI6PqsUE\nVjOq1QTNXzv69eZtWx9v3va4fbR8/WhxqtNTUKnbuLh934iiAZ0eLCe2JzvuG6bi8BG0we54ccD5\nKirqgbMbhy3PEc5hV1We/2QnFTUmkmODuHBsbI/9GXf0fPhr4/qH0y9qPP9bup/dWeW8/OkuYFfr\n1/U6DQadBr1Oi1GvwWK1U1FrQgEunhjH5eckoNMqPfZ30dM5cywK9xUQ4N2mSUunJ7kfffQRf//7\n37nyyit54okn0GhOHoTBYMBgOPY+iaSkJLZt29ah45+smprdLoltd/Gr2/HcQsvFE9HTOM5rNpva\nrt+/ZteXeGmsKMcPZNUOlkbqf3od/YCpRxPL1qTzV5+3Jqy/Skibt8HmXhdedCnT0Xj5gc6AojOg\n6IzN/28EvRFFZzj6efM26I0oGh2qqZ66hXed9o/ejsK+YgsD/W09Ynni0THX9nEo5ynn+n5jLqnZ\nFfh567n9khRQe/LPuGPnw+MF+Rq458qhbEor5tsNudQ1mDFZ7FhtdixWxz84eo4LCTBy28Up9O8T\n3BxHT/09CGePReGu2pYEODXJXbx4MU8++SS33347999//ym3s1qtTJ8+nTvuuINrr7229fG0tDQS\nExOdGZIQQrgV1VSPLW/HiQlu6wYq9rJcTOtyO3AU5dhkUWcA3fEfT5JU/jr5bHm8eXtFZ8TeVEvF\nlu/xPrKr9Uh1+OBLI8rJXnQUDdq+I/CePL/934nRF23fkc1VlU/+pkVVVVZ89yMr48Zy0+wB+Hrp\n2308Ic4k41AVX63JAeDWiwcSEuDl4oi6H0VRmDC4FxMG92p9zK6qrUmu2WLD3Pz/vUK80behnYgQ\nomdxWpJbVFTEk08+yezZs7nhhhsoLS1t/Zqfnx92u52GhgbCw8PR6XRMnTqV119/nejoaPr06cNX\nX33Fjh07eOyxx5wVkhBCuB21saZDSxEUox+a0Fg0ITFoQ2LRBPcGow+K7miSilbfoRnN43vR2quL\nqd78NZrczXhjx67CPns8hhGXMmxAFI1fP9lcXflXSaiiAb0XXuPmtTuOFl7j5lF/eP/Jj6EoaO02\nbvRby7qCYp56t5JbLxtGv+jT9/QVoj1KKht47cu92FWVWWP7OLW3qzg9jaJg1GsdbcW85UKWEOL0\nnJbkLl++HJPJxNKlS1m6dOkxX3vooYdoaGjgtdde48CBAwA88sgj+Pv789hjj1FRUcHAgQN57733\nZCZXCNGtKd4BbSgPrqBNHAf1FdhrSlAbqlq/oprqWlv5WAAUBcUvFE1AJJqACDQBESiBEc2fhzsS\n3zY6oRctCvgEoTZUogPsqsJ2SwLmARcw9ZzRGA2O2RPfyx+nafNn2PJ2NBfRcszgOquHrSYw8pTH\nMI69Ctvh/TRt+IjJXhn0tZbx9qJKpk4ZzqxxfdD0gOXLomvUN1l46fM91DVaGJwQwhXnJrg6JCGE\nEKegqKq73N3YcVarjcrKhpM8bqasrIiwsCh0Os/tl2a1Wvnqq8X8+ONSDh3Kw2azEReXwOzZlzBn\nzhWnvP+5vR566F4CA4N45JG/sXTpd7z44rP8/PNap+zbZGpi6dIlXH75lWf9XJ1Ow+7de7DZrAwd\nOtwp8Zyt7jKmRPu0VHKvqKhv130/DT+9esrltzZVwdZ7KKGX/Kn1MdViwl5bgr26BLWmGHtNSes/\nta78tAmz4hOEJjASxT8CTWBEcyLcnAD/qmWRvbqY+q+eOHG2FMfud5n7UBhzARdMH3XK5ZnHzwB3\nhlMdw1aWS+PPr6PWltJo1/Nx/URsMSO49eIUAny7x9/oH1Y8BMDr054F2jYOM269CYDkd97vihC7\nLavNzguf7iI9v4qYcF8evn4U3sZOa1DhUTp6PhTCWWQs9gzBwT7o2nCLgpyh26kr3sz9mtVq5b77\n7uLw4UJuueUOhgwZBsC2bVt4++03yMnJ5v77/9xpx58+/XwmTJjktP19+eVivvji03YluQD33nsn\nf/rTgy5LcoXoiFMtv7WjYFL1vJGVxI2Ha0joHQCAojeiDYlFGxJ7wr5UmwW1tuyYxNde7UiE1dpS\n1IYqbA1VUHTghOcqRr/WWV9baS6YGzlZQQdVUUjpG8Q5l57+HKAYfTv9fHiqY2jD4vC94gmaVi3A\nO3c7v/VfzariEp58t5pbLhnCwLiQTo1LdF+qqvK/H9JJz68i0NfAH68cJgmuEEK4OTlLn6UTlvMp\nCtq+I522LO9UPvzwfQ4ezOCDDz4lLCy89fGYmFhiYmL505/+wLXXzicqqnenHN9o9MJodF5xjY4v\nIOg2CxBED3Sq5be6PsNZVj2MQ9k2nvtkJ/deNYzk2KDT7kvR6lGCotAEndg+R7XbUevLsdeUNie+\nxag1pdhrih2zwqY61JI67CXZp48XFWNxKqqpvksu6rWXYvDB6/y7sKT9QtOmTzjXaz9x1lLe/aya\nieMHc+nkOLROXvEiur/vN+axfu8RDDoN91w5lNBAKTQlhBDuTpLcs3Dscr6jvWxseTupP7wf38sf\n75REV1VVvvnmS66++rpjEtwWo0eP5eOPv2xNcJ9++m9YrVaOHCkiJyeLP//5USZMmMx//vMKa9as\noqKinKCgIGbMuIA77/wjWq1jyv/TTz/i008XUVNTzaxZF2O12lqPcfxy5aqqKl555Xk2bFiLTqdn\n1KjR3HPP/YSGOopwXHnlJcybdw0bN65n9+5dhISEcPPNt3HRRZeydOl3vPHGywBMnjyazz//9oTk\nvLy8jH//+x/s2rUDm83OiBEj+eMfHyA6OoY5cy6isbGRf/zjCXbu3M4jj/yNwsICXn75eXbu3Iav\nrx+TJk3hzjvvwdfXr/U4DzzwMF99tZhDh/Lp338A9933EElJ/QHYu3c3r776IllZB/H29mHq1PO4\n5577nJrYC/FrmsBIfGbefcKqkOttdpqW7GPL/hJe+GwX91wxlJTjZiHbupJE0WhQ/MPR+IdDdAqq\nqqLWlWErycZWnIUl9ae2B6zaHcd04yQXHFVZDYPPRxuRSOMvrxNXV8b9AUv4aGslzxdUceflQ/CT\nojWijbbsL+bLNdkowO2XDiI+KsDVIQkhhGgDuaR9Fpo2f3bS+9UcvS2bHF/vBIcPF1JaWsKoUWNO\nuU1MzLHLGH/++Qdmz76EN954h9Gjx/Haay+xc+d2nnrqGT755CtuvfX3fP75J6xbtwaAZcuW8NZb\nb3D77XeyYMGH2O02tmzZeMrjPfroQzQ2NvDqq2/x4ouvYzabuf/+e7DZjibGb7/9X2bOvJD33/+I\n8eMn8eyzT1NWVsb06edz8823ERERyTff/EBExIkXBl544RkA3nzzfd588z1MJhP/+McTALz33od4\neXlxzz3388c/PoDFYuH+++8mLCyMd975gL///VmyszN54olHj9nnf//7Gtdccz3vvvshERGR3Hvv\nndTUVGOz2Xj44QcYN24CH374OU8//SwbNqzjgw/eP/0vRggnUIy+aIKiWpNHnVbD7ZcMYtKQXpgt\ndl76fA+b9xVjV1Xs1cU0/PQKdQvvov6zh6lbeBcNP72Kvbr4hP2qpnpspTlYcrZj2vEtDT+8RP2H\nf6T+4wdpWv6fs0twARSNo2iWh9BGJOA79wm0fYbhqzFzu/9KkkuX84+Fmykqr3d1eMIDZBZU886S\n/QDMm9aPkcknXmQWQgjhnnr0TG7DshewHdrjnJ2pdmy526l966YzbqqNHYrPhfe1edeVlRUABAYG\nHfP4+edPOebz22//A1dddTUAUVG9ueSSOa1fGzx4CLNnX0xKymAALrlkDosWLSQnJ4upU8/jyy8/\n5+KLL2PWrIsAuP/+/2Pr1i0njWfnzu2kpe3lhx9Wts50/u1vTzN79nS2bNnIhAmTATj33GlceOHF\nAPzud3fx9deLSU/fx+TJ5+Dt7YNGo2md+T1eQUEBSUnJREX1xmAw8Je/PE5JieONfHBwMIqi4Ofn\nh5+fH8uWLcFisfDgg39pbZvy2GN/56qrLiUnJ5v4eEcFzCuv/E3r9/fww48xd+5FLF/+M9Onn091\ndRWhoWH06hVFVFRvnn32JYzG7lGsRngejUbh5tkDMei0rNxZyJvfprFq7U5u132Nzm4+6UoSn8se\nBZsFa95OzOlroL6iTcda09SfZY3DuTl4C0lKHsrJetE2VzJ291nc4ylefnhf8Ecse36gactipnun\nEW8p4dUParluzjgGyX264hRKqhp55Ys9WG12zh0RzcwxJ94PL4QQwn316CTXUwQEOPo91tTUHPP4\ne+8tav3/u+++A4vF0vp5797Rx2x7wQWz2bRpPW+88TKHDh0iMzODoqLDrTOvOTlZzJlzRev2Wq2W\nAQMGnjSe7OwsrFYrF198/jGPm81mcnNzW5PcX88u+/k5lg1brRba4oYbfsvTT/+N1atXMGLEKCZO\nnMwFF1x0ynhKS0uYOfOcE76Wl5fTmuQOGza89XEvLy8SEhLJzs7i8suvZN68a3juuX/y7rtvMWbM\nOM455zymTj2vTbEK0Rk0isL1M5PpFerDT1vymWhZhYIJlOPuR1ftYG6g4fNHaOu96vV2AyubUlhr\nGkBcbAQ3jIhmaK/hNH3zVKf2u3UFRdFgGDYbTWQSjb+8QUJDKXdrv+ajL8opmXYe542IPvNORI9S\n32Th5c93t7YKuu78pA71nRZCCNH1enSSezazqaqpnrqFd52+t6Wiwe+GV50+29G7dzTBwSHs3r2T\nQYMGtz7+6ySy5b7aFkbjsb0xn3nm72zcuI4LLriI886bzu9/fzcPP3z/0dAV5YRiUHr9ye9bs9ms\nhISE8vrrb5/wtYCAo8sZ9foTZ0LbWnBq+vTzGTNmLBs2rGPLlk3897+v8dVXi3nrrf+h03kfs63V\naiU5eQB/+9vTJ+wnJOToTI1We+xwt9msaLWOFft3330fc+fOY/36tWzevJHHHvs/Zs++lD//+ZE2\nxStEZ1AUhfNHx3LeoCAaPngH5bRJrNr631O9HbeoGpY2DmcngxgzpA9/Hd6bqNCj5yttJ/e7dSVd\nryRH9eWVb+FXkMptfr/w85piPi67iHnTk6UglQCgtsHMy4v3UFTeQEy4L7+/bLCMDSGE8EBy5m4j\nxeiLtu9Ix6zGSTfovOV8Op2OOXOu4NNPP2xduvxrtbW1NDae2B+4RUNDPUuXfsf//d9fufPOe5g5\n80IiIiJbl/8C9OuXTFra3tbPVVUlIyP9pPuLi0ugsrICvV7fWt05MDCIV155gfz8/DZ9T6e7Km6z\n2XjttZcoLj7CrFkX8dhjT/H66++QlZVJVtbBlj38Kp54CgsLCAkJbY1HVVVeeeUFKisrW7dLT9//\nq59JAzk5OSQl9efw4UKee+6fhIWFM2/eNTz//Cvcffef+OmnpW36XoTobBpT3RkS3KNON9+kVVT6\nTb2Yf/7hXK6ennRMggtHi2H53fAavvP+id8Nr+Iz826PT3BbaLwD8L7wPgyj56IoChd476V/xnu8\n/dlGGk1WV4cnXKyksoF/fLCd7MM1hAYYpVWQEEJ4MDl7n4VT9bbsiuV8N954C2lpqdxyy3xuvvm2\n5qW3Ctu3b+WDD97DarXSv/+Akz7XYDDi5eXNmjWr6Ns3nqqqSt55500aGxsxm80AXH319Tz++MP0\n7z+QkSNH8803X3LoUD4DBw46YX+jR48lKak/jz/+F+6++z68vb35739fJSPjAHFx8W36fry9vamt\nrSE/P4/evaPR6Y4ORa1WS2ZmBnv37uZPf3oQf/8Avv/+G3x9fYmN7QuAj483ubk51NRUM3Pmhfzv\nfwt44olHuPXW32Oz2Xj++X9hNpuPqdr84YfvExMTS2xsHxYs+C8+Pj6cd94MQGXFil+wWq1ce+0N\nWCwW1q5dfdLvXQhXULwDQFFOu5KkuaPZaWlQGRvvjUZ/+ibqXdHv1lUURYNx5KVoeyVR99MbJFFM\nZNUHfLjwCHOumk14kPeZdyK6nezDNby8eDe1DRb6RPpx71XDCPIznvmJQggh3JLM5J6Flt6W2r4j\njr6bbJ7B7az2QS10Oh3PPfcyv/3tbSxbtoQ77vgtN910LV999TkXXDCbRYu+OGX1ZZ1OxxNPPM3e\nvbu5/vqreOyxh4mPj2f27Es4cMAxuzl16nk8+OBfWLRoITfddC2lpSXNCeCJNBoNzzzzAhERkdx/\n/1387ne/xWaz8/LL/2m99/ZMJk8+h8jIXtx00zUnnTH+61+fJDKyF/fffzfz5/+G/fv38fzzr+Lv\n7w/AvHnX8uWXn/HPfz6Jt7c3L7zwGjabjTvvvIU//ekP9OoVxfPPv4LmV8vMLrlkDm+99Qa33jqf\nhoYGXnnFkej6+Pjy73+/TH5+HrfcMp8777yFgIDAky5/FsIV2rKSRNd32JmzXA+rkNyZdL0HEjDv\nKWwRyQRomphnX8K6j94mI79tBbtE97HrYBnPLtpBbYOFwfEh/PnakZLgCiGEh1PUtt4k6QGsVhuV\nlScu27VazZSVFREWFoVO55yKuW3tUymcT6fTYLWepALsaUyePJqnnvrXKRP3s9UZY0p4Dq1WQ0iI\nLxUV9dhsZzcW2+vYPt0nriTxbb2fdueJbc6at9P2HYHPzLu7JF5Podrt1G/5EvueJShAuqU3lnE3\nMXF0sqtDO8EfVjwEwOvTngXaNg4zbr0JgOR33u+KED3Oyp2FfPjTAVQVJg+J4oZZ/dFp5fr/2XDF\n+VCIk5Gx2DMEB/ug051+RRrITG67Hd/bUgghOlNbVpJ4jZsHeq8TZ3w9vEJyZ1I0GvzGX4nXrPsw\naXwYoD9M7LYX+eG7X7DZj75JUk312KuKUE3SY7c7UFWVL1Zn8cGPjgT3ssnx3Dx7gCS4QgjRTcg9\nuUII4SFaCkOdaiVJSyLcXSskdyZDn6GEXPM0xd++RFBtHuMPf8TKD3IYN2sW2t1fNc+QO2581vYd\nKT9PD2a12Xlv6X42phWjURRunNWfKcN6n/mJQgghPIYkuaJHWLdum6tDEMJpTlcY6kyJsDg1jW8w\nvX7zV46sWIRf9grGmdZj+3oDqkZBabmzR1Wx5e2k/vD+Tq/FIJwv90gNH/2cQVZhDUaDljvnDGZI\nQqirwxJCCOFkkuQKIUQ31J0rJHcmRaMjasYNVOwfgGbtf9Aq6olVrVU7WJpo2vyZ3OPsIcqrm/hy\nTRYb0xyt8wL9DNx75TD69vJ3cWRCCCE6gyS5QgghxHGCEwZRt/Y0G6h2bHk7UU31cjHBjTU0WVm6\nKY+fth7CarOj0yqcPzqWiyb0xcdL7+rwhBBCdBJJcoUQQojjqI01wBmaD6h2Gle8iS56IJqweLRh\nfVEM0mfXHVhtdlbvOsw363Koa7QAMC4lkivOSSBMeiELIUS3J0muEEIIcRzFO8BRxfoMXfZsh/Zg\nO7Sn5VlogqLQhMehDY9HGx6PJrQPirQZ6zINTVb2Zpfz9bociiscLQWTYwKZNy2JhN7SI1oIIXoK\nSXKFEEKI4yhGX7R9R56y77BNVajw7kPU6PNQynOxleZirziEveow9qrDWA9uaN6RBk1INNqw+Obk\nNwFNSAyKVl5+ncFktnGwoIr9eZWk51eSe6S29bpEZLA3V53XjxFJYSgtbbeEEEL0CPIqK4QQQpyE\n17h51B/eD5amYxJdOxpMqo7/HhmBcaM3d1xyJTFT/FBtFmxFGViPZGCvLkatLMBeWYi9/BD28kNw\nYI1jBxodmtBYx2xvWByaiHg0Qb1RNGdubu9KNrudgpJ6KmqbqG+00tBkoa7J8bG+yUp9o+OjzW7H\nS6/FYNDipddiNGgxNn90fK7Dx6jDx+vEj15GHZrmhNRqs2O22DFbbZgtNswWOyarjYYmKwcLqknP\nryTncA02+9HZdq1GIT46gHEDI5k6vLf0vRVCiB5KklwhhBDiJE7Vd1jfdwRVCbPRLi+hsLSeJ/+3\njesnBDG6Yc3RfrrHMYy50pHwluZgrz7i+Fiag6VlA60BTVifo8ucw+PQBPZCUVyXpJksNrILqzlY\nUE1GQRVZhTWYLLZOPaYCGPRarDb7McnrKbdXID7KnwF9ghnYN5h+MYF4GeStjRBC9HTySuABnn76\nbyxbtuSUXx8+fCSvvfZWl8SSlpaKzWZl6NDhFBUd5qqrLuWddxYyYEBKu/ZXU1PD2rWruOiiS50a\npxBCOMOp+g73Bf7WJ46Plx9k3950+qcuwqKxoDlFsSrz1sUA+P7mGRTvAGxludhLc7CV5mIrzUGt\nLcVenIm9OPNo4qv3csz0Ni9z7qgz9U622uyk5lRwIL+SgwXV5B2pPSHRjAj2pleID75eeny9dY6P\nXrrWz3289Gg1CmaLjSazDZPFhqnlY/NjTWYbjSYrDU1WGpo/NposNJisNJpsrYm0RlEwGjQYdFoM\neg0GvRaDTotRryE2wp+BfYNJjg3Cx0veygghhDiWvDJ4gD/+8QF+97u7ACgpKea2227k+edfpV+/\nJAD0+q5rg3DvvXfypz89yNChw52yvwUL/ktWVqYkuUIIt3ayvsNGg5abLhzA4cYlGEtPneD+Wv2n\nf8Z79oPoYgZB74Gtj6tNddjKHAmvvSXxra/AVpSOrSjdkfj2iwCgYelzaMPi0EUmYNUNRlWNZzxu\n3ddPoZZkNX8zCtq+I/EaNw9NYCRl1Y2s3nWYtXuKqKk3H/2eFegb6U9SbCDJMUEkxQQS6HfmY3WE\n3a5istjQ6zSy1FgIIUS7SZLrAfz8/PDz8wPAbHa8AQkMDCQ0NMwF0Zz5TdxZ7e0MlUuFEMKdqaZ6\n/MvTQGn7uaxx6b/RRA1E13sAik8gGp8gx8fgaLS9B6BoHC/N9oaq1oTXVpYLFAFgK0jFVpCKGcj/\nERTvwF9VdI5DExaPxicQS872o3G2JLgAqootbyc1Bfv4wudqNuTaWs/s0WG+jEgOJzk2kMTegXgb\nu/ZtgkajdPkxhRBCdD/yStJNLFjwJmlpe9Hp9OzatYNbb72DgwczqK6u4tlnX2rd7q67bichIZH7\n7vszANu2beE//3mVnJxsIiMjueyyucybdy0azYlX0K+88hIaGxv5xz+eYOfO7fz2t7cDsH37Vv75\nzyc5dCifuLh4HnjgYVJSBgPQ1NTE66+/zMqVP2O12hgyZCj33HM/sbF9WLDgTb788nMAJk8ezbp1\n26isrOS1115ky5ZN1NRUExYWzpw5VzJ//k2d+wP8//buPDzK8v73+PuZGSbJZA8QsGF1QRRjBFJE\nGkpBCginHEtZKogF0bSyiSbsSGSX5XBAqBwWQWQRa6zggiCC9Setiizh1woEEEhYAgTZCZnJLOeP\nlOEXE0igIZPMfF7XxXUx9zzP/Xwz3NdDvnPfz/cWEbkNnqsXS91mqCTunL04cvbe9BhTdBymmDqY\nwqpjiXsQcguTXGuL7ngun8Nz8STuM1m4r17Alb0bV/buWwjcDQX5NDqzmW/NbUlsHMuvHonjvjqR\nqkQsIiJVXkAnuW/sXsr3P+6r8Os2qd6YgQnPlnu/27Z9Q//+zzN48DBsNhsHDuy/6fHZ2UcYOfIl\nBg4cSsuWv+Dw4R+YNes13G4PvXv3LXb84sVv06PHb0hOHkTnzr/h0qWLAKxd+1dGj36FmJjqzJw5\nlUmTxvPOO38FYObMqZw4cZzp0+dgs9l47713GDw4mdWr03nqqb6cOnWS7OwspkyZAcCUKWk4HA5m\nz56HzRbK559vZOHC+Tz6aEsaNWpczp+YiMh/pqz76d4O97njuM8dv97w7+XKjm3p5dK/2fCQYD1K\nQp9HiIiOLpc+RUREKgM98OJHLBYLf/jDAOrVq0+NGjVLPX7lyuX86leP87vf9SIurg5JSW1ITh7I\n6tVvl3h8dHQ0hmEUWT4N8PzzL9CsWSINGjSkZ8/eHD2aTX5+Pjk5J/jss08ZN24CTZo8RMOGdzN8\n+Bis1iA2bvwUm81GcHAwFovFu/S6ZctWpKaO5r777icurg7PPPMsVmsQhw79UGJMIiK+dG0/3cK6\nwFWPgYcwI9/XYYiIiJSrgJ7JvROzqb4UG1sLi6Xs/6SHDv3AwYP7+a//+sLb5na7sdvtXLhwnsjI\nqDL1ExdXx/v38PBwAOz2fA4fPoTH46Ffv6eKHO9wOMjKOlxiX08+2Z0vv/yCtWvTOXbsKJmZ+3A4\n7Ljd7hKPFxHxNe9+uo48X4dy6wxT4Wy0iIiIHynXJNfpdDJz5kw+/PBDHA4HTzzxBGPGjMFms5V4\n/Pvvv8+CBQvIzc2lWbNmTJgwgXr16pVnSAElKKj0qpcu1/U9Dp1OJ127/paePXsXOy40NKxY242Y\nS6iA6fEU9m8ymViyZAVms/kn/RffvsLj8ZCaOpSTJ3N4/PEOdOzYhZSUUTz11O/KHIuISEW7tp/u\n1a1v4z7+/W31cdkUQUg1AzNOcNrB5SznKEtmrt+0xO2EREREqrJyTXLnzJnDpk2bmDdvHoZhMGrU\nKCZPnszUqVOLHfvll18yYcIEJk6cyIMPPsjs2bNJTk7m448/vqXZSLkxi6Ualy9f9r52u92cOHGM\n++5rBECDBg05ejSbOnXqeo/ZsuVz/v73Lxk7dsINei37krwGDRridru5ePEC8fEJQGGSnZY2hk6d\nupCU9MsiBU4OHz7E9u3bWLHiLzRsWLgn5MmTOTgcdlVhFpFKzRRZi9Auw3HlHibvgxvdP0vm9hhM\n/vEJrnqCCLdVo1HdKO6vE0Gjn4USF2PFcBXgcdph5xwAQjoPB6cDw1NAaJBB7ulznD91gqisv91a\n0FYbwY/2vLVzREREqoByeybXbrezatUqUlNTSUxMpHnz5kycOJG1a9dy9uzZYscvXbqUbt268eST\nT9KoUSNmzZrFyZMn2bJlS3mFFPCaNHmIf/5zN5s3b+L48WPMnTuLS5euJ729e/dlx47vWLx4AUeP\nZvP1139n9uzXCA0NK7G6MoDNFsKRI4e5ePFCqdevV68+v/xlW6ZNm8iOHd9x9Gg206dPZtu2b7xJ\nbEiIjTNnzpCTc4Lw8HDMZjNbtmzi5MkcMjJ2Mm5cYRXoggLHzS4lIlIpmGs2JDz5LWy/TSvbCYYJ\nd9zDtGvZiOoRQVzKK2BHZi6rN//Aqyv+m2ELM5i/4TibMq/P7GZcrsm6rAjmbQ9i8FoHL26w8FpG\nLdy38F2gUeteQn+bhimy1i3+hCIiIpVfuU2Z7t27l7y8PFq0aOFtS0xMxOPxkJGRQbt27bztbreb\n3bt306tXL29bWFgYDz74IDt37qRDhw7lFVZA69ixM/v27WXmzCkYhokuXbrSvv31z7ZRo8ZMm/Z/\nePPNhaxe/TZRUdF07tyV5OSBN+yzZ8/eLFu2mKNHsxg6NKXUGMaMSePPf55LWtpo8vPzadSoMbNn\nz/c+x9uhQyc+/3wjTz/dg7/8ZR2jRr3C0qWLWbXqbWJjY+nUqQsRERFkZlZ8FWwRkdt1Ldn12K/g\nPL6H/L8tAaeDInuNGyaoFkxk6978LrIW3X55N6fPXSXz6Hkys8+z/+g5frxoJ+PgGTIOniHk3/+9\nvrH2X0WuFWw1Uzc2llPcT+28/Rhl2M887H+PK8efVkREpHIxPOW0DnTjxo289NJL7Nmzp0h7q1at\nGDx4ML17X3/u89y5c7Rs2ZJVq1aRmJjobR82bBhQuOz5djidLi5eLF4lsqDAwenTx6lR4y4sFutt\n9S2Vg2EUPgPscrnvxI4dZeZ0OjhzJofY2DiqVdOYCjRms0FkpI0LF/JwubSUXkrnunCKq1+vwXlk\nZ2HRAsOEpUFTQh77PeabzKbmnr9KZvY5MrPP813QUgDu+7EP9WuF0+BnETx0X01CLAYed+E1LqWn\ngeMq15LpnG2F/dx1/ftnol4ouYK+yO3Q/VAqC43FwBAREYLFUvpi5HKbyb169SpWa/Ff9q1WKw5H\n0aWm+fn53vd+euz/fIb0VpnNJmJiihfQsNstnDljwmw2lelDkcqvpGJXFcnjMWEymYiKspWp4Jf4\np8jIkovqiRQTczc0HIPr6mVceRcw2yIxh5Re4C8mJpT77y7cYq3nu4VJ7pSBSTe8RtSAGfy4ZQV5\n+7f9ZO9eg7vHls/+uiIl0f1QKguNRYFyTHKDg4MpKCgo1u5wOIpVV76WFPw0+XU4HISEhNx2DC6X\n+4YzuW63G5fLjWFoK5qqrLLM5LpcbtxuN+fP51GtWsVUQZXKQ98Wy+0zwIiCq8DVK7fVw9mzheeV\nPA4jsLYbhOUX/fDkXSRnW2Fdg6gXlnvPEylPuh9KZaGxGBgqfCa3du3aOJ1Ozp49S0xMDAAFBQWc\nP3+eWrWKLsWKjo4mJCSE3NzcIu25ubkkJCT8R3G4XMWTWO2x6j+uJbaVpdjytS9PJNAU3lxdLo/+\n/aXCXR9zNxmHlhCICCnhHJHypvuhVBYai4GhbElAua35bNy4MTabje3bt3vbduzYgclkKpa4GoZB\nQkICO3bs8LZdvnyZPXv2FHlGV0RERERERORWlOty5Z49ezJ16lQiIiKwWq2kpaXRrVs3oqKiuHLl\nCnl5edSsWROAvn37MmzYMB544AHi4+OZM2cOd911F23atCmvkERERERERCTAlFuSC5CSkkJBQQFD\nhgzBMAw6duzI2LFjgcJ9cefPn09mZiYA7du3Z8yYMcybN4/z58/TvHlzFi5ciNlsLs+QRERERERE\nJICU2xZClYHT6eLcubwS2gu3e9EWQv7BYjHhdPr2WQuNqcB2rZL72bNX9NyPVJhBW0YA8Od2M4Cy\njcP9z/UDoNGStyoiRAlAuh9KZaGxGBiio21YLKVPimo/HREREREREfEbSnJFRERERETEbyjJrSIG\nD04mKSmxxD/fffctAElJiXzxxeflcr316z/i179ufcP3c3NPs3nzZ97X3bv/htWrV9z29VwuF++9\nt+a2zxcREREREYFyLjwld1bnzr/hj38cVKw9IiISgHXrNhAeHlEhscycOY3IyEgef7xDufT31Vd/\nY+7cWfTo8fty6U9ExN80qd7Y1yGIiIhUCUpyq5Dg4GCqV69xw/dv9l75K996ZX5U/0xE5I4YmPCs\nr0MQERGpEpTk+pGkpEQmTXqNtm3bM2XKq1itVjweD5s3f4bJZOaJJ7owaNAw7zZN6elr+OCDdE6c\nOI7VaqVZs58zfPhoYmKq3/Q6U6a8yj/+sRWAXbt2kJ7+EQCnTuXw8suDycjYSUxMdfr3f54uXbp6\nz0tPX8O7777DuXM/0qDB3Tz//As8+uhj7Ny5nVdeGeX9GV5//f+RkNCUZcsWs3Hjp+TmniI0NJRW\nrVrz8ssjCQ8PvRMfn4iIiIiI+IGATnKPz53NlX/+d4VfNzT+YeJefPmOX+eTTz6kR4+nWLz4bXbt\n2sGsWdOIj0+gbdv2bN68iYUL3yAtbRL33tuI7Owspk6dwNtvL2PYsNSb9vvii6nk5p4mIiKSl14a\n4W3/6KN1DB8+mpSUUbz33jvMmDGFn//8UWJja/Hxx+tYuXI5qamjaNDgbr755u+MHp3C/PmLiI9P\nYOTIcUyfPpl16zYQERHJmjUr+fjjdYwfP4mf/SyOzMy9TJ6cxr333kefPn3v9EcnIiIiIiJVVEAn\nuVXNhx9+wKefflykrW/f/jzzTMlL2GrWjGXgwKEYhkG9evVZuzadf/3rn7Rt256YmBjGjBlPUlIb\nAGrXvotWrZI4fPiHUuMICwvDarUSFBREdHS0t71jx8488cT/AuDZZ/9Ievq7/PDDAWJja7F8+Zs8\n99yfvNfr3v33ZGbu4513VjJp0muEhYUB15dc16/fgLFj02jWLNEb37p1f+XQodLjExERERGRwBXQ\nSW5FzKaWp8cf/zX9+ycXaYuIuHGhqbi4OhiG4X0dGhqG01kAQNOmzTlwYD9Lly4iOzuLw4cPceTI\nIeLjE247vri4uGJx2e128vLyyMk5wezZM5g7d5b3GKfTSd269UrsKympDbt372LRojfIzs7i0KGD\nHD2aTadOXW47PhERERER8X8BneRWNaGhYdSpU7fMx1ut1mJt1wo8bdjwCTNmTKFTpy40bdqcXr16\n89FHa8nOzrrt+Ewmc4nXc7vdAIwYMYaHHnq4yPsWS8lD8K23lrB69Qq6dOnKY4/9gn79nmPBgnm3\nHZuIiIiIiAQGJbkBKj39Xbp378XAgS9629544/Vb6MEo/ZB/CwsLo3r1Gpw+fapIkr548QKCg0Po\n27dfkRnnwvjW8Kc/DaZbtx4AuN1ujh3LLrI8WkRERERE5KdMvg5AfCMyMopdu3Zy6NBBsrKOMG/e\n/2XXrh04HI4ynR8SEkJOzglyc0+X6finn+7HypXL2bDhE44fP0Z6+hpWrFhGXFydf/dnA2Dfvr3Y\n7XYiI6P45pt/kJ2dxcGDB5gyJY3jx49RUFC2+EREREREJDApyQ1Qw4alEhQURHJyP4YM+SMnT55g\n4MChHDlyGLvdXur5Xbv+lqysI/Tr95R3OfLNdO/eiz/84VnefHMhTz/dgw8+SGf06PG0a9cegPj4\nBBISmvLCC8/y9ddbGTv2VX788Qz9+vVm+PAXMZst9O79DJmZmf/xzy4iIiIiIv7L8Fx7SNMPOJ0u\nzp3LK6HdwZkzOdSocRcWS/HnVKVqsVhMOJ2lJ9Z3ksZUYDObTcTEhHL27BVcLt+ORQlcZRmH+5/r\nB0CjJW9VXGASUHQ/lMpCYzEwREfbsFiK1wH6Kc3kioiIiIiIiN9Q4SkRERE/FRr/cOkHiYiI+Bkl\nuSIiIn6qqu0HLyIiUh60XFlERERERET8RoAkuYV7sPpPiS3xtetjqez7BYuIiIiIyJ0XEEmu2VxY\ngcvhKH1rHJGyuDaWro0tERERERGpHALimVzDMGGzhXPp0lkArNYgDE3AVVkej8lnpeE9nsIE99Kl\ns9hs4RhGQHxPJCIiIiJSZQREkgsQHh4N4E10peoymUy43b7d/8xmC/eOKRERERERqTwCJsk1DIOI\niBjCw6NwuVyAHtCtikwmE1FRNs6fz/NRomtgNps1gysiIiIiUkkFTJJ7jWGYsFiUoFRVZrOJoKAg\nqlVz+mzJsoiIiIiIVF7K9kRERERERMRvKMkVERERERERv6EkV0RERERERPyGklwRERERERHxG4bH\n4/GbMsMej0fFiPyegcViwul0owrZ4jsah1IZaBxKZaBxKJWFxmIgMJtNGIZR6nF+leSKiIiIiIhI\nYNNyZREREREREfEbSnJFRERERETEbyjJFREREREREb+hJFdERERERET8hpJcERERERER8RtKckVE\nRERERMRvKMkVERERERERv6EkV0RERERERPyGklwRERERERHxG0pyRURERERExG8oyRURERERERG/\noSRXRERERERE/IaSXKnSXC4XPXv2ZNSoUb4ORQLQrl276NOnD82aNaNt27ZMnz6d/Px8X4clAcDp\ndDJt2jQee+wxmjdvzrhx48jLy/N1WBJgLly4wPjx42ndujWJiYkMGDCAgwcP+josCWArV67k/vvv\n93UYUgkoyZUqbfHixezevdvXYUgAOnbsGAMGDOChhx7i/fffZ9KkSXz66adMmzbN16FJAJgzZw6b\nNm1i3rx5LFq0iG+//ZbJkyf7OiwJMCNHjmT37t3MnTuXd999l/DwcPr168fFixd9HZoEoKysLGbN\nmuXrMKSSUJIrVda+fftYvnw5DzzwgK9DkQD0ySefEBsby6hRo2jYsCFJSUkMGzaMdevW4Xa7fR2e\n+DG73c6qVatITU0lMTGR5s2bM3HiRNauXcvZs2d9HZ4EiNOnT/PFF1/w6quv0qxZM+655x5mzJjB\n5cuX2bp1q6/DkwDjdrsZOXIk8fHxvg5FKgkluVIlFRQUMHLkSFJSUqhVq5avw5EA1LFjR1577TUM\nw/C2mUwm8vPzcTgcPoxM/N3evXvJy8ujRYsW3rbExEQ8Hg8ZGRm+C0wCis1mY9GiRTRp0sTbdu1+\nqJlcqWhvvvkmFouF3r17+zoUqSSU5EqVNH/+fGrWrEn37t19HYoEqAYNGvDII494XzudTpYvX05i\nYiLBwcG+C0z83qlTpzCbzdSoUcPbVq1aNaKjozl58qQPI5NAEhYWRps2bbBard621atXY7fbadWq\nlQ8jk0Bz4MABlixZwrRp04p88SyBzeLrAER+au/evTz55JMlvteiRQuGDx/OmjVrWLduXcUGJgGl\ntHG4YsUK72uPx8P48ePZv38/a9asqaAIJVBdvXq1SGJxjdVq1SoC8ZmtW7cya9Ys+vfvT7169Xwd\njgSIayv7hgwZQt26dfn+++99HZJUEkpypdK55557WL9+fYnvhYSEMGDAAEaMGEHt2rUrODIJJKWN\nw2scDgejR49m48aNvP7660WW7oncCcHBwRQUFBRrdzgc2Gw2H0QkgW7Dhg0MHz6cDh06kJqa6utw\nJIAsWLCA0NBQ+vTp4+tQpJIxPB6Px9dBiJTVtm3b6Nu3b5Ff5Ox2O4ZhYLVa2bVrlw+jk0Bz5coV\nBg0aREZGBvPmzaN169a+DkkCQEZGBr169eLrr78mJiYGKJzNSEhIYMGCBbRp08bHEUogWbVqFZMn\nT6Z79+5MmDABk0lPwknFadeuHbm5uVgshfN2LpcLu92OzWZjwoQJdO3a1ccRiq9oJleqlIcffpjP\nPvusSNsrr7xCZGSkvj2WCuV0Ohk4cCB79uxh2bJlNG3a1NchSYBo3LgxNpuN7du306FDBwB27NiB\nyWQiISHBx9FJIElPT2fixIkkJyeTkpLi63AkAK1YsQKn0+l9/dVXXzFp0iTWrl1L9erVfRiZ+JqS\nXKlSgoODqV+/fpG2kJAQQkNDi7WL3ElvvfUW3377LXPnzqVOnTrk5uZ636tRo4aKX8gdExwcTM+e\nPZk6dSoRERFYrVbS0tLo1q0bUVFRvg5PAkROTg4TJ06kc+fOPPPMM0XugWFhYUUe6xC5U+Li4oq8\n3rt3L4B+JxQluSIit2P9+vV4PB6GDh1a7L3/uYxU5E5ISUmhoKCAIUOGYBgGHTt2ZOzYsb4OSwLI\n5s2bsdvtrF+/vlj9ghEjRjBgwAAfRSYiomdyRURERERExI+oOoCIiIiIiIj4DSW5IiIiIiIi4jeU\n5IqIiIiIiIjfUJIrIiIiIiIifkNJroiIiIiIiPgNJbkiIiIiIiLiN5TkioiIiIiIiN9QkisiIiIi\nIiJ+Q0muiIiIiIiI+A0luSIiIiIiIuI3lOSKiIiIiIiI3/j/FyS3qImZnUwAAAAASUVORK5CYII=\n"
}
}
],
"source": [
"def gradient_descent(objective, step_size=0.05,\n",
" max_iter=100, init=0):\n",
" # Initialize\n",
" theta_hat = torch.tensor(init, requires_grad=True)\n",
" theta_hat_arr = [theta_hat.detach().numpy().copy()]\n",
" obj_arr = [objective(theta_hat).detach().numpy()]\n",
" # Iterate\n",
" for i in range(max_iter):\n",
" # Compute gradient\n",
" if theta_hat.grad is not None:\n",
" theta_hat.grad.zero_()\n",
" out = objective(theta_hat)\n",
" out.backward()\n",
"\n",
" # Update theta in-place\n",
" with torch.no_grad():\n",
" theta_hat -= step_size * theta_hat.grad\n",
" theta_hat_arr.append(\n",
" theta_hat.detach().numpy().copy())\n",
" obj_arr.append(objective(theta_hat).detach().numpy())\n",
" return np.array(theta_hat_arr), np.array(obj_arr)\n",
" \n",
"# 0.05 doesn't escape, 0.07 does, 0.15 gets much closer\n",
"for step_size in [0.05, 0.07, 0.15]:\n",
" theta_hat_arr, obj_arr = gradient_descent(\n",
" objective, step_size=step_size, \n",
" init=-3.5, max_iter=100)\n",
" \n",
" visualize_results(theta_hat_arr, obj_arr, objective,\n",
" theta_true=theta_true, \n",
" vis_arr=np.linspace(-5, 5, num=100))"
],
"id": "12610431"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Putting it all together for ML models\n",
"\n",
"- PyTorch has many helper functions to handle much of stochastic\n",
" gradient descent or using other optimizers\n",
"- Example from\n",
" https://pytorch.org/tutorials/beginner/examples_nn/two_layer_net_optim.html\n",
"\n",
"## Putting it all together for ML models"
],
"id": "396682ea-9ed6-4899-b6eb-9271a642e125"
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"99 71.03107452392578\n",
"199 1.639991283416748\n",
"299 0.0156068941578269\n",
"399 6.425016181310639e-05\n",
"499 8.307362975301658e-08"
]
}
],
"source": [
"import torch\n",
"\n",
"# N is batch size; D_in is input dimension;\n",
"# H is hidden dimension; D_out is output dimension.\n",
"N, D_in, H, D_out = 64, 1000, 100, 10\n",
"\n",
"# Create random Tensors to hold inputs and outputs\n",
"x = torch.randn(N, D_in)\n",
"y = torch.randn(N, D_out)\n",
"\n",
"# Use the nn package to define our model and loss function.\n",
"model = torch.nn.Sequential(\n",
" torch.nn.Linear(D_in, H),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(H, D_out),\n",
")\n",
"loss_fn = torch.nn.MSELoss(reduction='sum')\n",
"\n",
"# Use the optim package to define an Optimizer that will update the weights of\n",
"# the model for us. Here we will use Adam; the optim package contains many other\n",
"# optimization algoriths. The first argument to the Adam constructor tells the\n",
"# optimizer which Tensors it should update.\n",
"learning_rate = 1e-4\n",
"optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
"for t in range(500):\n",
" # Forward pass: compute predicted y by passing x to the model.\n",
" y_pred = model(x)\n",
"\n",
" # Compute and print loss.\n",
" loss = loss_fn(y_pred, y)\n",
" if t % 100 == 99:\n",
" print(t, loss.item())\n",
"\n",
" # Before the backward pass, use the optimizer object to zero all of the\n",
" # gradients for the variables it will update (which are the learnable\n",
" # weights of the model). This is because by default, gradients are\n",
" # accumulated in buffers( i.e, not overwritten) whenever .backward()\n",
" # is called. Checkout docs of torch.autograd.backward for more details.\n",
" optimizer.zero_grad()\n",
"\n",
" # Backward pass: compute gradient of the loss with respect to model\n",
" # parameters\n",
" loss.backward()\n",
"\n",
" # Calling the step function on an Optimizer makes an update to its\n",
" # parameters\n",
" optimizer.step()"
],
"id": "e6c906ed"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A few more details `autograd` and `backward()` function\n",
"\n",
"See\n",
"https://pytorch.org/tutorials/beginner/basics/autogradqs_tutorial.html\n",
"for more details.\n",
"\n",
"- Jacobian $$ \\begin{split}J=\\left(\\begin{array}{ccc}\n",
" \\frac{\\partial y_{1}}{\\partial x_{1}} & \\cdots & \\frac{\\partial y_{1}}{\\partial x_{n}}\\\\\n",
" \\vdots & \\ddots & \\vdots\\\\\n",
" \\frac{\\partial y_{m}}{\\partial x_{1}} & \\cdots & \\frac{\\partial y_{m}}{\\partial x_{n}}\n",
" \\end{array}\\right)\\end{split}\n",
" $$\n",
"\n",
"## Backward computes Jacobian transpose vector product\n",
"\n",
"$$\n",
"\\begin{split}J^{T}\\cdot v=\\left(\\begin{array}{ccc}\n",
" \\frac{\\partial y_{1}}{\\partial x_{1}} & \\cdots & \\frac{\\partial y_{m}}{\\partial x_{1}}\\\\\n",
" \\vdots & \\ddots & \\vdots\\\\\n",
" \\frac{\\partial y_{1}}{\\partial x_{n}} & \\cdots & \\frac{\\partial y_{m}}{\\partial x_{n}}\n",
" \\end{array}\\right)\\left(\\begin{array}{c}\n",
" \\frac{\\partial l}{\\partial y_{1}}\\\\\n",
" \\vdots\\\\\n",
" \\frac{\\partial l}{\\partial y_{m}}\n",
" \\end{array}\\right)=\\left(\\begin{array}{c}\n",
" \\frac{\\partial l}{\\partial x_{1}}\\\\\n",
" \\vdots\\\\\n",
" \\frac{\\partial l}{\\partial x_{n}}\n",
" \\end{array}\\right)\\end{split}\n",
"$$\n",
"\n",
"## Simplification is when output is scalar than the derivative is assumed to be 1\n",
"\n",
"- Example: $y = b^T x, z = \\exp(y)$\n",
" - \\$J_z = \\[\\[\\]\\], v=\\[1\\], J_z^T v = \\$\n",
" - $J_y = \\begin{bmatrix} \\frac{dy}{dx_1} & \\frac{dy}{dx_2} & \\dots & \\frac{dy}{dx_5} \\end{bmatrix}^T, v= \\frac{dz}{dy}, J_y^T v = \\begin{bmatrix} \\frac{dz}{dx_1} & \\frac{dz}{dx_2} & \\dots & \\frac{dz}{dx_5} \\end{bmatrix}^T = \\nabla_x z(x)$\n",
"\n",
"## Simplification is when output is scalar than the derivative is assumed to be 1"
],
"id": "e9c65447-b8f7-485d-ad75-81eb155f4343"
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor(20., grad_fn=<DotBackward0>) tensor(0.0500)\n",
"tensor([2., 2., 2., 2., 2.], requires_grad=True) tensor([0.0000, 0.0500, 0.1000, 0.1500, 0.2000])"
]
}
],
"source": [
"x = (2.0 * torch.ones(5).float()).requires_grad_(True)\n",
"b = torch.arange(5).float()\n",
"y = torch.dot(b, x)\n",
"y.retain_grad()\n",
"z = torch.log(y)\n",
"z.retain_grad()\n",
"z.backward()\n",
"\n",
"def print_grad(a):\n",
" print(a, a.grad)\n",
"print_grad(y)\n",
"print_grad(x)"
],
"id": "af51f056"
}
],
"nbformat": 4,
"nbformat_minor": 5,
"metadata": {
"kernelspec": {
"name": "ai-curriculum",
"display_name": "AI Curriculum",
"language": "python"
}
}
}