--- a +++ b/Code/All PennyLane QML Demos/35 Photon Quantum 0.0109 Loss kkawchak.ipynb @@ -0,0 +1,1572 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "id": "HWPs0TLnfWuf" + }, + "outputs": [], + "source": [ + "# This cell is added by sphinx-gallery\n", + "# It can be customized to whatever you like\n", + "%matplotlib inline\n", + "# !pip install pennylane\n", + "# !pip install pennylane-sf\n", + "# from google.colab import drive\n", + "# drive.mount('/content/drive')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nZNnZLAhfWuh" + }, + "source": [ + "Function fitting with a photonic quantum neural network {#quantum_neural_net}\n", + "=======================================================\n", + "\n", + "::: {.meta}\n", + ":property=\\\"og:description\\\": Fit to noisy data with a variational\n", + "quantum circuit. :property=\\\"og:image\\\":\n", + "<https://pennylane.ai/qml/_images/qnn_output_28_0.png>\n", + ":::\n", + "\n", + "::: {.related}\n", + "qonn Optimizing a quantum optical neural network pytorch\\_noise PyTorch\n", + "and noisy devices tutorial\\_noisy\\_circuit\\_optimization Optimizing\n", + "noisy circuits with Cirq\n", + ":::\n", + "\n", + "*Author: Maria Schuld --- Posted: 11 October 2019. Last updated: 25\n", + "January 2021.*\n", + "\n", + "::: {.warning}\n", + "::: {.title}\n", + "Warning\n", + ":::\n", + "\n", + "This demo is only compatible with PennyLane version `0.29` or below.\n", + ":::\n", + "\n", + "In this example we show how a variational circuit can be used to learn a\n", + "fit for a one-dimensional function when being trained with noisy samples\n", + "from that function.\n", + "\n", + "The variational circuit we use is the continuous-variable quantum neural\n", + "network model described in [Killoran et al.\n", + "(2018)](https://arxiv.org/abs/1806.06871).\n", + "\n", + "Imports\n", + "-------\n", + "\n", + "We import PennyLane, the wrapped version of NumPy provided by PennyLane,\n", + "and an optimizer.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "2k43lK0kfWui" + }, + "outputs": [], + "source": [ + "import pennylane as qml\n", + "from pennylane import numpy as np\n", + "from pennylane.optimize import AdamOptimizer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R-ZuYCWbfWuj" + }, + "source": [ + "The device we use is the Strawberry Fields simulator, this time with\n", + "only one quantum mode (or `wire`). You will need to have the Strawberry\n", + "Fields plugin for PennyLane installed.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "lGEobKa2fWuj" + }, + "outputs": [], + "source": [ + "dev = qml.device(\"strawberryfields.fock\", wires=1, cutoff_dim=15)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1dxF_9rMfWuj" + }, + "source": [ + "Quantum node\n", + "============\n", + "\n", + "For a single quantum mode, each layer of the variational circuit is\n", + "defined as:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "Rb5PxNmdfWuj" + }, + "outputs": [], + "source": [ + "def layer(v):\n", + " # Matrix multiplication of input layer\n", + " qml.Rotation(v[0], wires=0)\n", + " qml.Squeezing(v[1], 0.0, wires=0)\n", + " qml.Rotation(v[2], wires=0)\n", + "\n", + " # Bias\n", + " qml.Displacement(v[3], 0.0, wires=0)\n", + "\n", + " # Element-wise nonlinear transformation\n", + " qml.Kerr(v[4], wires=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LHdBo3oyfWuk" + }, + "source": [ + "The variational circuit in the quantum node first encodes the input into\n", + "the displacement of the mode, and then executes the layers. The output\n", + "is the expectation of the x-quadrature.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "-i9PCHTAfWuk" + }, + "outputs": [], + "source": [ + "@qml.qnode(dev)\n", + "def quantum_neural_net(var, x):\n", + " # Encode input x into quantum state\n", + " qml.Displacement(x, 0.0, wires=0)\n", + "\n", + " # \"layer\" subcircuits\n", + " for v in var:\n", + " layer(v)\n", + "\n", + " return qml.expval(qml.X(0))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "47Y8p6FMfWuk" + }, + "source": [ + "Objective\n", + "=========\n", + "\n", + "As an objective we take the square loss between target labels and model\n", + "predictions.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "GJyr7GRufWul" + }, + "outputs": [], + "source": [ + "def square_loss(labels, predictions):\n", + " loss = 0\n", + " for l, p in zip(labels, predictions):\n", + " loss = loss + (l - p) ** 2\n", + "\n", + " loss = loss / len(labels)\n", + " return loss" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-UglWd2IfWul" + }, + "source": [ + "In the cost function, we compute the outputs from the variational\n", + "circuit. Function fitting is a regression problem, and we interpret the\n", + "expectations from the quantum node as predictions (i.e., without\n", + "applying postprocessing such as thresholding).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "58rpUDRsfWul" + }, + "outputs": [], + "source": [ + "def cost(var, features, labels):\n", + " preds = [quantum_neural_net(var, x) for x in features]\n", + " return square_loss(labels, preds)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ct5KCMgbfWul" + }, + "source": [ + "Optimization\n", + "============\n", + "\n", + "We load noisy data samples of a sine function from the external file\n", + "`sine.txt`\n", + "(`<a href=\"https://raw.githubusercontent.com/XanaduAI/pennylane/v0.3.0/examples/data/sine.txt\"\n", + "download=\"sine.txt\" target=\"_blank\">download the file here</a>`{.interpreted-text\n", + "role=\"html\"}).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "id": "9N5Hbjb1fWul" + }, + "outputs": [], + "source": [ + "data = np.loadtxt(\"/content/drive/MyDrive/Colab Notebooks/data/sine.txt\")\n", + "X = np.array(data[:, 0], requires_grad=False)\n", + "Y = np.array(data[:, 1], requires_grad=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_ycy7HL0fWum" + }, + "source": [ + "Before training a model, let\\'s examine the data.\n", + "\n", + "*Note: For the next cell to work you need the matplotlib library.*\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 465 + }, + "id": "5L8I8Zw4fWum", + "outputId": "d8ac1c34-95fe-470a-d376-ab20606e74f2" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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hBTIfvCDH+iPf/yj6urq9NOf/lRbtmzRgAEDJElOp1NLly7VM888o6SkJK1fv169e/fWkiVLTOm4GZYuXaphw4bpvPPOU3Jysnr37q1HH3006MK1mzdv1rhx49S+fXslJiYqOztb99xzjw4fPmxyzwGEqrbO0Ozl273uG+k+Nnv5dtXWhfzcEwA0K+TCsG3atNGCBQt0yy23+Dzvs88+0/jx4/Xpp58qLi5O3333XbCXNM3kyZM1f/58tWrVSsOHD1dKSopWrVql48ePa/DgwXr33XeVlJTkd3t/+9vfNH78eH333Xfq37+/srOztWnTJn355Zdq37691q5dq4svvtjv9njKEgiv9buPafxzHzd73pLbLtfArm0j0CMALYElT1n26dNHJSUlTYYxSbr00ks9T2HW1dWFcklTvPnmm5o/f75SUlK0YcMG/eMf/9Drr7+uL774Qr169dLatWv14IMP+t3egQMHdNNNN+m7777TM888o+LiYs+TphMmTNChQ4eUn58vEyqMADDJ4crq5k8K4DwACEVIgezjjz/WJZdc4te5rVu31lNPPaXly5eHcklTzJkzR5I0ffp05ebmeo5nZGToT3/6kyRp4cKFqqio8Ku9//mf/9HJkyc1cuRI3X777Z7j8fHxWrRokZxOpzZu3Kh3333XxJ8CQCjapSY2f1IA5wFAKEIKZK1btw74PVdffXUolwzZ/v37tXHjRklSfn5+o9cHDx6sjh07qqamRitWrPCrzcLCQp/tpaSk6JprrpEkvfHGG8F2G4DJBmSnK8uZKF/FLRyqf9pyQHZ6JLsFwKZsV4diy5YtkqT09HRlZ2d7Padfv34Nzm1KZWWldu3a1eB9obQHIDLi4xyaNSZHkhqFMvf3s8bkUI8MQET4HciWLl1q+sX379+v9evXm95uU0pLSyVJnTp18nlOx44dG5zblK+++srzb19tBtIegMjJ65mlRRNylelsOC2Z6UzUogm51CEDEDF+B7IbbrhBffr0UWFhYciL0/fu3au7775bF198sf75z3+G1FagKisrJUnJyck+z0lJSZFU/6SEv+011aY/7dXU1MjlcjX4AhB+eT2ztHbacC257XLN/2kfLbntcq2dNpwwBiCi/K7Un5+fryVLlui//uu/lJmZqfHjx2v8+PHKzc2Vw9H8kP6RI0e0bNkyvfLKK/rwww9V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r1144YVmdBsBWrRokebPn29qm08++aSmTJkih8OhIUOGqH379lqzZo3mzJmj119/XWvXrlVGRkZgjRoAQnLttdcakowRI0YYVVVVnuNvv/22ER8fb8TFxRmffPJJQG0OHTrUkGS8//77JvcWTSksLDQkGSkpKcbmzZs9x48cOWL06tXLkGRMnTrV7/b2799vtGnTxpBkPPPMM57j3333nTFhwgRDktG/f3+jrq7O1J8DzTP7s37xxRcNScZNN90Uht4iFM8995xx//33G6+88orx2WefGTfeeKMhyXjooYeCaq+kpMRwOBxGfHy8sWLFCs/xqqoqY8SIEYYk4/rrrw+4XQIZEIJ//etfhiQjPj7e+Oqrrxq9fuuttxqSjJ/+9KcBtUsgs0b//v0NScbDDz/c6LU1a9YYkoyEhATj+PHjfrX361//2pBkjBw5stFrlZWVhtPpNCQZRUVFIfcdgTH7syaQxY6bbroppEA2btw4Q5Lxi1/8otFrX331lREXF2dIMj777LOA2mUNGRCCwsJCSdKgQYPUuXPnRq/n5+dLkpYvXx70+iNExv79+7Vx40ZJ//7czjR48GB17NhRNTU1WrFihV9tun8/vLWXkpKia665RpL0xhtvBNttBCEcnzXs4dSpU3r77bclef/d6dy5swYNGiTp33///iKQASHYsmWLJKlfv35eX3cfr6qq0hdffBFw+4WFhZo8ebLuuOMO/e53v1NRUZHq6uqC7zB8cn+W6enpys7O9nqO+/N0n9uUyspK7dq1q8H7QmkP5jH7sz7Trl279Nvf/la33367pkyZor/85S86evRoaB1G1Ni5c6dOnjwpyfy/axb1AyEoLS2VJHXq1Mnr62lpaUpLS5PL5VJpaalycnICav+pp55qdOySSy5RQUGB+vfvH3iH4VNzn6UkdezYscG5Tfnqq688//bVZiDtwTxmf9ZnWrdundatW9fgWGJion7/+99r2rRpAfYU0cb9+3DuuecqNTXV6znB/u4wQgaEoLKyUpKUnJzs85yUlBRJksvl8rvdIUOG6LnnntOOHTtUVVWlffv2qbCwUN/73ve0c+dOjRw5Up999llonUcDZn+W7vaaajOY3w2ELhx/t5mZmZo5c6Y2bNigI0eOyOVyaePGjZo4caJqamo0ffp0zZkzJ/TOw1Lh+m++xAgZbOw3v/mNli1b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\n" + }, + "metadata": {} + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure()\n", + "plt.scatter(X, Y)\n", + "plt.xlabel(\"x\", fontsize=18)\n", + "plt.ylabel(\"f(x)\", fontsize=18)\n", + "plt.tick_params(axis=\"both\", which=\"major\", labelsize=16)\n", + "plt.tick_params(axis=\"both\", which=\"minor\", labelsize=16)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T-YMfYB5fWum" + }, + "source": [ + "\n", + "\n", + "The network's weights (called `var` here) are initialized with values\n", + "sampled from a normal distribution. We use 4 layers; performance has\n", + "been found to plateau at around 6 layers.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 0 + }, + "id": "wvG1NxUafWum", + "outputId": "9e09b309-3432-47b5-b39a-93044836430f" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[ 0.08820262 0.02000786 0.0489369 0.11204466 0.0933779 ]\n", + " [-0.04886389 0.04750442 -0.00756786 -0.00516094 0.02052993]\n", + " [ 0.00720218 0.07271368 0.03805189 0.00608375 0.02219316]\n", + " [ 0.01668372 0.07470395 -0.01025791 0.01565339 -0.04270479]]\n" + ] + } + ], + "source": [ + "np.random.seed(0)\n", + "num_layers = 4\n", + "var_init = 0.05 * np.random.randn(num_layers, 5, requires_grad=True)\n", + "print(var_init)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ejdl930zfWun" + }, + "source": [ + "::: {.rst-class}\n", + "sphx-glr-script-out\n", + "\n", + "Out:\n", + "\n", + "``` {.none}\n", + "array([[ 0.08820262, 0.02000786, 0.0489369 , 0.11204466, 0.0933779 ],\n", + " [-0.04886389, 0.04750442, -0.00756786, -0.00516094, 0.02052993],\n", + " [ 0.00720218, 0.07271368, 0.03805189, 0.00608375, 0.02219316],\n", + " [ 0.01668372, 0.07470395, -0.01025791, 0.01565339, -0.04270479]])\n", + "```\n", + ":::\n", + "\n", + "Using the Adam optimizer, we update the weights for 500 steps (this\n", + "takes some time). More steps will lead to a better fit.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 0 + }, + "id": "Dsn2cESrfWun", + "outputId": "a81b88be-e277-46fc-c304-169350ea47fb" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Iter: 0 | Cost: 0.3008737 \n", + "Iter: 1 | Cost: 0.2104674 \n", + "Iter: 2 | Cost: 0.1591501 \n", + "Iter: 3 | Cost: 0.1547748 \n", + "Iter: 4 | Cost: 0.1703228 \n", + "Iter: 5 | Cost: 0.1728023 \n", + "Iter: 6 | Cost: 0.1618553 \n", + "Iter: 7 | Cost: 0.1470598 \n", + "Iter: 8 | Cost: 0.1356152 \n", + "Iter: 9 | Cost: 0.1296314 \n", + "Iter: 10 | Cost: 0.1269852 \n", + "Iter: 11 | Cost: 0.1240373 \n", + "Iter: 12 | Cost: 0.1181332 \n", + "Iter: 13 | Cost: 0.1087056 \n", + "Iter: 14 | Cost: 0.0973359 \n", + "Iter: 15 | Cost: 0.0870369 \n", + "Iter: 16 | Cost: 0.0806150 \n", + "Iter: 17 | Cost: 0.0786109 \n", + "Iter: 18 | Cost: 0.0786273 \n", + "Iter: 19 | Cost: 0.0773470 \n", + "Iter: 20 | Cost: 0.0732883 \n", + "Iter: 21 | Cost: 0.0674549 \n", + "Iter: 22 | Cost: 0.0619684 \n", + "Iter: 23 | Cost: 0.0583350 \n", + "Iter: 24 | Cost: 0.0565141 \n", + "Iter: 25 | Cost: 0.0552384 \n", + "Iter: 26 | Cost: 0.0532077 \n", + "Iter: 27 | Cost: 0.0501036 \n", + "Iter: 28 | Cost: 0.0466531 \n", + "Iter: 29 | Cost: 0.0438976 \n", + "Iter: 30 | Cost: 0.0423644 \n", + "Iter: 31 | Cost: 0.0417490 \n", + "Iter: 32 | Cost: 0.0412557 \n", + "Iter: 33 | Cost: 0.0402357 \n", + "Iter: 34 | Cost: 0.0385994 \n", + "Iter: 35 | Cost: 0.0367533 \n", + "Iter: 36 | Cost: 0.0352057 \n", + "Iter: 37 | Cost: 0.0341708 \n", + "Iter: 38 | Cost: 0.0334521 \n", + "Iter: 39 | Cost: 0.0326703 \n", + "Iter: 40 | Cost: 0.0316169 \n", + "Iter: 41 | Cost: 0.0304171 \n", + "Iter: 42 | Cost: 0.0293770 \n", + "Iter: 43 | Cost: 0.0286868 \n", + "Iter: 44 | Cost: 0.0282538 \n", + "Iter: 45 | Cost: 0.0278001 \n", + "Iter: 46 | Cost: 0.0271164 \n", + "Iter: 47 | Cost: 0.0262319 \n", + "Iter: 48 | Cost: 0.0253541 \n", + "Iter: 49 | Cost: 0.0246515 \n", + "Iter: 50 | Cost: 0.0240946 \n", + "Iter: 51 | Cost: 0.0235118 \n", + "Iter: 52 | Cost: 0.0227945 \n", + "Iter: 53 | Cost: 0.0220187 \n", + "Iter: 54 | Cost: 0.0213456 \n", + "Iter: 55 | Cost: 0.0208256 \n", + "Iter: 56 | Cost: 0.0203428 \n", + "Iter: 57 | Cost: 0.0197617 \n", + "Iter: 58 | Cost: 0.0190910 \n", + "Iter: 59 | Cost: 0.0184582 \n", + "Iter: 60 | Cost: 0.0179321 \n", + "Iter: 61 | Cost: 0.0174379 \n", + "Iter: 62 | Cost: 0.0168833 \n", + "Iter: 63 | Cost: 0.0163058 \n", + "Iter: 64 | Cost: 0.0158124 \n", + "Iter: 65 | Cost: 0.0154062 \n", + "Iter: 66 | Cost: 0.0149868 \n", + "Iter: 67 | Cost: 0.0145227 \n", + "Iter: 68 | Cost: 0.0140992 \n", + "Iter: 69 | Cost: 0.0137583 \n", + "Iter: 70 | Cost: 0.0134269 \n", + "Iter: 71 | Cost: 0.0130662 \n", + "Iter: 72 | Cost: 0.0127446 \n", + "Iter: 73 | Cost: 0.0124915 \n", + "Iter: 74 | Cost: 0.0122406 \n", + "Iter: 75 | Cost: 0.0119797 \n", + "Iter: 76 | Cost: 0.0117758 \n", + "Iter: 77 | Cost: 0.0116250 \n", + "Iter: 78 | Cost: 0.0114702 \n", + "Iter: 79 | Cost: 0.0113358 \n", + "Iter: 80 | Cost: 0.0112561 \n", + "Iter: 81 | Cost: 0.0111851 \n", + "Iter: 82 | Cost: 0.0111107 \n", + "Iter: 83 | Cost: 0.0110737 \n", + "Iter: 84 | Cost: 0.0110519 \n", + "Iter: 85 | Cost: 0.0110188 \n", + "Iter: 86 | Cost: 0.0110071 \n", + "Iter: 87 | Cost: 0.0110099 \n", + "Iter: 88 | Cost: 0.0110004 \n", + "Iter: 89 | Cost: 0.0110027 \n", + "Iter: 90 | Cost: 0.0110151 \n", + "Iter: 91 | Cost: 0.0110155 \n", + "Iter: 92 | Cost: 0.0110227 \n", + "Iter: 93 | Cost: 0.0110357 \n", + "Iter: 94 | Cost: 0.0110383 \n", + "Iter: 95 | Cost: 0.0110457 \n", + "Iter: 96 | Cost: 0.0110555 \n", + "Iter: 97 | Cost: 0.0110566 \n", + "Iter: 98 | Cost: 0.0110617 \n", + "Iter: 99 | Cost: 0.0110664 \n", + "Iter: 100 | Cost: 0.0110645 \n", + "Iter: 101 | Cost: 0.0110659 \n", + "Iter: 102 | Cost: 0.0110653 \n", + "Iter: 103 | Cost: 0.0110607 \n", + "Iter: 104 | Cost: 0.0110592 \n", + "Iter: 105 | Cost: 0.0110555 \n", + "Iter: 106 | Cost: 0.0110500 \n", + "Iter: 107 | Cost: 0.0110472 \n", + "Iter: 108 | Cost: 0.0110422 \n", + "Iter: 109 | Cost: 0.0110368 \n", + "Iter: 110 | Cost: 0.0110331 \n", + "Iter: 111 | Cost: 0.0110276 \n", + "Iter: 112 | Cost: 0.0110225 \n", + "Iter: 113 | Cost: 0.0110184 \n", + "Iter: 114 | Cost: 0.0110131 \n", + "Iter: 115 | Cost: 0.0110090 \n", + "Iter: 116 | Cost: 0.0110053 \n", + "Iter: 117 | Cost: 0.0110012 \n", + "Iter: 118 | Cost: 0.0109984 \n", + "Iter: 119 | Cost: 0.0109957 \n", + "Iter: 120 | Cost: 0.0109929 \n", + "Iter: 121 | Cost: 0.0109911 \n", + "Iter: 122 | Cost: 0.0109891 \n", + "Iter: 123 | Cost: 0.0109873 \n", + "Iter: 124 | Cost: 0.0109861 \n", + "Iter: 125 | Cost: 0.0109848 \n", + "Iter: 126 | Cost: 0.0109838 \n", + "Iter: 127 | Cost: 0.0109832 \n", + "Iter: 128 | Cost: 0.0109825 \n", + "Iter: 129 | Cost: 0.0109821 \n", + "Iter: 130 | Cost: 0.0109818 \n", + "Iter: 131 | Cost: 0.0109814 \n", + "Iter: 132 | Cost: 0.0109813 \n", + "Iter: 133 | Cost: 0.0109811 \n", + "Iter: 134 | Cost: 0.0109809 \n", + "Iter: 135 | Cost: 0.0109808 \n", + "Iter: 136 | Cost: 0.0109806 \n", + "Iter: 137 | Cost: 0.0109804 \n", + "Iter: 138 | Cost: 0.0109803 \n", + "Iter: 139 | Cost: 0.0109800 \n", + "Iter: 140 | Cost: 0.0109798 \n", + "Iter: 141 | Cost: 0.0109796 \n", + "Iter: 142 | Cost: 0.0109793 \n", + "Iter: 143 | Cost: 0.0109790 \n", + "Iter: 144 | Cost: 0.0109788 \n", + "Iter: 145 | Cost: 0.0109784 \n", + "Iter: 146 | Cost: 0.0109781 \n", + "Iter: 147 | Cost: 0.0109777 \n", + "Iter: 148 | Cost: 0.0109774 \n", + "Iter: 149 | Cost: 0.0109770 \n", + "Iter: 150 | Cost: 0.0109767 \n", + "Iter: 151 | Cost: 0.0109763 \n", + "Iter: 152 | Cost: 0.0109759 \n", + "Iter: 153 | Cost: 0.0109756 \n", + "Iter: 154 | Cost: 0.0109752 \n", + "Iter: 155 | Cost: 0.0109749 \n", + "Iter: 156 | Cost: 0.0109745 \n", + "Iter: 157 | Cost: 0.0109742 \n", + "Iter: 158 | Cost: 0.0109739 \n", + "Iter: 159 | Cost: 0.0109736 \n", + "Iter: 160 | Cost: 0.0109733 \n", + "Iter: 161 | Cost: 0.0109730 \n", + "Iter: 162 | Cost: 0.0109727 \n", + "Iter: 163 | Cost: 0.0109724 \n", + "Iter: 164 | Cost: 0.0109721 \n", + "Iter: 165 | Cost: 0.0109718 \n", + "Iter: 166 | Cost: 0.0109716 \n", + "Iter: 167 | Cost: 0.0109713 \n", + "Iter: 168 | Cost: 0.0109710 \n", + "Iter: 169 | Cost: 0.0109708 \n", + "Iter: 170 | Cost: 0.0109705 \n", + "Iter: 171 | Cost: 0.0109702 \n", + "Iter: 172 | Cost: 0.0109700 \n", + "Iter: 173 | Cost: 0.0109697 \n", + "Iter: 174 | Cost: 0.0109695 \n", + "Iter: 175 | Cost: 0.0109692 \n", + "Iter: 176 | Cost: 0.0109690 \n", + "Iter: 177 | Cost: 0.0109687 \n", + "Iter: 178 | Cost: 0.0109684 \n", + "Iter: 179 | Cost: 0.0109682 \n", + "Iter: 180 | Cost: 0.0109679 \n", + "Iter: 181 | Cost: 0.0109677 \n", + "Iter: 182 | Cost: 0.0109674 \n", + "Iter: 183 | Cost: 0.0109672 \n", + "Iter: 184 | Cost: 0.0109669 \n", + "Iter: 185 | Cost: 0.0109667 \n", + "Iter: 186 | Cost: 0.0109665 \n", + "Iter: 187 | Cost: 0.0109662 \n", + "Iter: 188 | Cost: 0.0109660 \n", + "Iter: 189 | Cost: 0.0109657 \n", + "Iter: 190 | Cost: 0.0109655 \n", + "Iter: 191 | Cost: 0.0109653 \n", + "Iter: 192 | Cost: 0.0109650 \n", + "Iter: 193 | Cost: 0.0109648 \n", + "Iter: 194 | Cost: 0.0109645 \n", + "Iter: 195 | Cost: 0.0109643 \n", + "Iter: 196 | Cost: 0.0109641 \n", + "Iter: 197 | Cost: 0.0109639 \n", + "Iter: 198 | Cost: 0.0109636 \n", + "Iter: 199 | Cost: 0.0109634 \n", + "Iter: 200 | Cost: 0.0109632 \n", + "Iter: 201 | Cost: 0.0109630 \n", + "Iter: 202 | Cost: 0.0109628 \n", + "Iter: 203 | Cost: 0.0109625 \n", + "Iter: 204 | Cost: 0.0109623 \n", + "Iter: 205 | Cost: 0.0109621 \n", + "Iter: 206 | Cost: 0.0109619 \n", + "Iter: 207 | Cost: 0.0109617 \n", + "Iter: 208 | Cost: 0.0109615 \n", + "Iter: 209 | Cost: 0.0109613 \n", + "Iter: 210 | Cost: 0.0109611 \n", + "Iter: 211 | Cost: 0.0109608 \n", + "Iter: 212 | Cost: 0.0109606 \n", + "Iter: 213 | Cost: 0.0109604 \n", + "Iter: 214 | Cost: 0.0109602 \n", + "Iter: 215 | Cost: 0.0109600 \n", + "Iter: 216 | Cost: 0.0109598 \n", + "Iter: 217 | Cost: 0.0109596 \n", + "Iter: 218 | Cost: 0.0109595 \n", + "Iter: 219 | Cost: 0.0109593 \n", + "Iter: 220 | Cost: 0.0109591 \n", + "Iter: 221 | Cost: 0.0109589 \n", + "Iter: 222 | Cost: 0.0109587 \n", + "Iter: 223 | Cost: 0.0109585 \n", + "Iter: 224 | Cost: 0.0109583 \n", + "Iter: 225 | Cost: 0.0109581 \n", + "Iter: 226 | Cost: 0.0109579 \n", + "Iter: 227 | Cost: 0.0109578 \n", + "Iter: 228 | Cost: 0.0109576 \n", + "Iter: 229 | Cost: 0.0109574 \n", + "Iter: 230 | Cost: 0.0109572 \n", + "Iter: 231 | Cost: 0.0109570 \n", + "Iter: 232 | Cost: 0.0109569 \n", + "Iter: 233 | Cost: 0.0109567 \n", + "Iter: 234 | Cost: 0.0109565 \n", + "Iter: 235 | Cost: 0.0109564 \n", + "Iter: 236 | Cost: 0.0109562 \n", + "Iter: 237 | Cost: 0.0109560 \n", + "Iter: 238 | Cost: 0.0109559 \n", + "Iter: 239 | Cost: 0.0109557 \n", + "Iter: 240 | Cost: 0.0109555 \n", + "Iter: 241 | Cost: 0.0109554 \n", + "Iter: 242 | Cost: 0.0109552 \n", + "Iter: 243 | Cost: 0.0109550 \n", + "Iter: 244 | Cost: 0.0109549 \n", + "Iter: 245 | Cost: 0.0109547 \n", + "Iter: 246 | Cost: 0.0109546 \n", + "Iter: 247 | Cost: 0.0109544 \n", + "Iter: 248 | Cost: 0.0109543 \n", + "Iter: 249 | Cost: 0.0109541 \n", + "Iter: 250 | Cost: 0.0109540 \n", + "Iter: 251 | Cost: 0.0109538 \n", + "Iter: 252 | Cost: 0.0109537 \n", + "Iter: 253 | Cost: 0.0109535 \n", + "Iter: 254 | Cost: 0.0109534 \n", + "Iter: 255 | Cost: 0.0109532 \n", + "Iter: 256 | Cost: 0.0109531 \n", + "Iter: 257 | Cost: 0.0109529 \n", + "Iter: 258 | Cost: 0.0109528 \n", + "Iter: 259 | Cost: 0.0109527 \n", + "Iter: 260 | Cost: 0.0109525 \n", + "Iter: 261 | Cost: 0.0109524 \n", + "Iter: 262 | Cost: 0.0109523 \n", + "Iter: 263 | Cost: 0.0109521 \n", + "Iter: 264 | Cost: 0.0109520 \n", + "Iter: 265 | Cost: 0.0109519 \n", + "Iter: 266 | Cost: 0.0109517 \n", + "Iter: 267 | Cost: 0.0109516 \n", + "Iter: 268 | Cost: 0.0109515 \n", + "Iter: 269 | Cost: 0.0109514 \n", + "Iter: 270 | Cost: 0.0109512 \n", + "Iter: 271 | Cost: 0.0109511 \n", + "Iter: 272 | Cost: 0.0109510 \n", + "Iter: 273 | Cost: 0.0109509 \n", + "Iter: 274 | Cost: 0.0109507 \n", + "Iter: 275 | Cost: 0.0109506 \n", + "Iter: 276 | Cost: 0.0109505 \n", + "Iter: 277 | Cost: 0.0109504 \n", + "Iter: 278 | Cost: 0.0109503 \n", + "Iter: 279 | Cost: 0.0109501 \n", + "Iter: 280 | Cost: 0.0109500 \n", + "Iter: 281 | Cost: 0.0109499 \n", + "Iter: 282 | Cost: 0.0109498 \n", + "Iter: 283 | Cost: 0.0109497 \n", + "Iter: 284 | Cost: 0.0109496 \n", + "Iter: 285 | Cost: 0.0109495 \n", + "Iter: 286 | Cost: 0.0109494 \n", + "Iter: 287 | Cost: 0.0109493 \n", + "Iter: 288 | Cost: 0.0109492 \n", + "Iter: 289 | Cost: 0.0109491 \n", + "Iter: 290 | Cost: 0.0109489 \n", + "Iter: 291 | Cost: 0.0109488 \n", + "Iter: 292 | Cost: 0.0109487 \n", + "Iter: 293 | Cost: 0.0109486 \n", + "Iter: 294 | Cost: 0.0109485 \n", + "Iter: 295 | Cost: 0.0109484 \n", + "Iter: 296 | Cost: 0.0109483 \n", + "Iter: 297 | Cost: 0.0109482 \n", + "Iter: 298 | Cost: 0.0109481 \n", + "Iter: 299 | Cost: 0.0109481 \n", + "Iter: 300 | Cost: 0.0109480 \n", + "Iter: 301 | Cost: 0.0109479 \n", + "Iter: 302 | Cost: 0.0109478 \n", + "Iter: 303 | Cost: 0.0109477 \n", + "Iter: 304 | Cost: 0.0109476 \n", + "Iter: 305 | Cost: 0.0109475 \n", + "Iter: 306 | Cost: 0.0109474 \n", + "Iter: 307 | Cost: 0.0109473 \n", + "Iter: 308 | Cost: 0.0109472 \n", + "Iter: 309 | Cost: 0.0109471 \n", + "Iter: 310 | Cost: 0.0109471 \n", + "Iter: 311 | Cost: 0.0109470 \n", + "Iter: 312 | Cost: 0.0109469 \n", + "Iter: 313 | Cost: 0.0109468 \n", + "Iter: 314 | Cost: 0.0109467 \n", + "Iter: 315 | Cost: 0.0109466 \n", + "Iter: 316 | Cost: 0.0109466 \n", + "Iter: 317 | Cost: 0.0109465 \n", + "Iter: 318 | Cost: 0.0109464 \n", + "Iter: 319 | Cost: 0.0109463 \n", + "Iter: 320 | Cost: 0.0109462 \n", + "Iter: 321 | Cost: 0.0109462 \n", + "Iter: 322 | Cost: 0.0109461 \n", + "Iter: 323 | Cost: 0.0109460 \n", + "Iter: 324 | Cost: 0.0109459 \n", + "Iter: 325 | Cost: 0.0109458 \n", + "Iter: 326 | Cost: 0.0109458 \n", + "Iter: 327 | Cost: 0.0109457 \n", + "Iter: 328 | Cost: 0.0109456 \n", + "Iter: 329 | Cost: 0.0109456 \n", + "Iter: 330 | Cost: 0.0109455 \n", + "Iter: 331 | Cost: 0.0109454 \n", + "Iter: 332 | Cost: 0.0109453 \n", + "Iter: 333 | Cost: 0.0109453 \n", + "Iter: 334 | Cost: 0.0109452 \n", + "Iter: 335 | Cost: 0.0109451 \n", + "Iter: 336 | Cost: 0.0109451 \n", + "Iter: 337 | Cost: 0.0109450 \n", + "Iter: 338 | Cost: 0.0109449 \n", + "Iter: 339 | Cost: 0.0109449 \n", + "Iter: 340 | Cost: 0.0109448 \n", + "Iter: 341 | Cost: 0.0109447 \n", + "Iter: 342 | Cost: 0.0109447 \n", + "Iter: 343 | Cost: 0.0109446 \n", + "Iter: 344 | Cost: 0.0109445 \n", + "Iter: 345 | Cost: 0.0109445 \n", + "Iter: 346 | Cost: 0.0109444 \n", + "Iter: 347 | Cost: 0.0109443 \n", + "Iter: 348 | Cost: 0.0109443 \n", + "Iter: 349 | Cost: 0.0109442 \n", + "Iter: 350 | Cost: 0.0109441 \n", + "Iter: 351 | Cost: 0.0109441 \n", + "Iter: 352 | Cost: 0.0109440 \n", + "Iter: 353 | Cost: 0.0109440 \n", + "Iter: 354 | Cost: 0.0109439 \n", + "Iter: 355 | Cost: 0.0109439 \n", + "Iter: 356 | Cost: 0.0109438 \n", + "Iter: 357 | Cost: 0.0109437 \n", + "Iter: 358 | Cost: 0.0109437 \n", + "Iter: 359 | Cost: 0.0109436 \n", + "Iter: 360 | Cost: 0.0109436 \n", + "Iter: 361 | Cost: 0.0109435 \n", + "Iter: 362 | Cost: 0.0109435 \n", + "Iter: 363 | Cost: 0.0109434 \n", + "Iter: 364 | Cost: 0.0109433 \n", + "Iter: 365 | Cost: 0.0109433 \n", + "Iter: 366 | Cost: 0.0109432 \n", + "Iter: 367 | Cost: 0.0109432 \n", + "Iter: 368 | Cost: 0.0109431 \n", + "Iter: 369 | Cost: 0.0109431 \n", + "Iter: 370 | Cost: 0.0109430 \n", + "Iter: 371 | Cost: 0.0109430 \n", + "Iter: 372 | Cost: 0.0109429 \n", + "Iter: 373 | Cost: 0.0109429 \n", + "Iter: 374 | Cost: 0.0109428 \n", + "Iter: 375 | Cost: 0.0109428 \n", + "Iter: 376 | Cost: 0.0109427 \n", + "Iter: 377 | Cost: 0.0109427 \n", + "Iter: 378 | Cost: 0.0109426 \n", + "Iter: 379 | Cost: 0.0109426 \n", + "Iter: 380 | Cost: 0.0109425 \n", + "Iter: 381 | Cost: 0.0109425 \n", + "Iter: 382 | Cost: 0.0109424 \n", + "Iter: 383 | Cost: 0.0109424 \n", + "Iter: 384 | Cost: 0.0109423 \n", + "Iter: 385 | Cost: 0.0109423 \n", + "Iter: 386 | Cost: 0.0109422 \n", + "Iter: 387 | Cost: 0.0109422 \n", + "Iter: 388 | Cost: 0.0109421 \n", + "Iter: 389 | Cost: 0.0109421 \n", + "Iter: 390 | Cost: 0.0109420 \n", + "Iter: 391 | Cost: 0.0109420 \n", + "Iter: 392 | Cost: 0.0109419 \n", + "Iter: 393 | Cost: 0.0109419 \n", + "Iter: 394 | Cost: 0.0109419 \n", + "Iter: 395 | Cost: 0.0109418 \n", + "Iter: 396 | Cost: 0.0109418 \n", + "Iter: 397 | Cost: 0.0109417 \n", + "Iter: 398 | Cost: 0.0109417 \n", + "Iter: 399 | Cost: 0.0109416 \n", + "Iter: 400 | Cost: 0.0109416 \n", + "Iter: 401 | Cost: 0.0109415 \n", + "Iter: 402 | Cost: 0.0109415 \n", + "Iter: 403 | Cost: 0.0109415 \n", + "Iter: 404 | Cost: 0.0109414 \n", + "Iter: 405 | Cost: 0.0109414 \n", + "Iter: 406 | Cost: 0.0109413 \n", + "Iter: 407 | Cost: 0.0109413 \n", + "Iter: 408 | Cost: 0.0109413 \n", + "Iter: 409 | Cost: 0.0109412 \n", + "Iter: 410 | Cost: 0.0109412 \n", + "Iter: 411 | Cost: 0.0109411 \n", + "Iter: 412 | Cost: 0.0109411 \n", + "Iter: 413 | Cost: 0.0109410 \n", + "Iter: 414 | Cost: 0.0109410 \n", + "Iter: 415 | Cost: 0.0109410 \n", + "Iter: 416 | Cost: 0.0109409 \n", + "Iter: 417 | Cost: 0.0109409 \n", + "Iter: 418 | Cost: 0.0109408 \n", + "Iter: 419 | Cost: 0.0109408 \n", + "Iter: 420 | Cost: 0.0109408 \n", + "Iter: 421 | Cost: 0.0109407 \n", + "Iter: 422 | Cost: 0.0109407 \n", + "Iter: 423 | Cost: 0.0109407 \n", + "Iter: 424 | Cost: 0.0109406 \n", + "Iter: 425 | Cost: 0.0109406 \n", + "Iter: 426 | Cost: 0.0109405 \n", + "Iter: 427 | Cost: 0.0109405 \n", + "Iter: 428 | Cost: 0.0109405 \n", + "Iter: 429 | Cost: 0.0109404 \n", + "Iter: 430 | Cost: 0.0109404 \n", + "Iter: 431 | Cost: 0.0109404 \n", + "Iter: 432 | Cost: 0.0109403 \n", + "Iter: 433 | Cost: 0.0109403 \n", + "Iter: 434 | Cost: 0.0109402 \n", + "Iter: 435 | Cost: 0.0109402 \n", + "Iter: 436 | Cost: 0.0109402 \n", + "Iter: 437 | Cost: 0.0109401 \n", + "Iter: 438 | Cost: 0.0109401 \n", + "Iter: 439 | Cost: 0.0109401 \n", + "Iter: 440 | Cost: 0.0109400 \n", + "Iter: 441 | Cost: 0.0109400 \n", + "Iter: 442 | Cost: 0.0109400 \n", + "Iter: 443 | Cost: 0.0109399 \n", + "Iter: 444 | Cost: 0.0109399 \n", + "Iter: 445 | Cost: 0.0109398 \n", + "Iter: 446 | Cost: 0.0109398 \n", + "Iter: 447 | Cost: 0.0109398 \n", + "Iter: 448 | Cost: 0.0109397 \n", + "Iter: 449 | Cost: 0.0109397 \n", + "Iter: 450 | Cost: 0.0109397 \n", + "Iter: 451 | Cost: 0.0109396 \n", + "Iter: 452 | Cost: 0.0109396 \n", + "Iter: 453 | Cost: 0.0109396 \n", + "Iter: 454 | Cost: 0.0109395 \n", + "Iter: 455 | Cost: 0.0109395 \n", + "Iter: 456 | Cost: 0.0109395 \n", + "Iter: 457 | Cost: 0.0109394 \n", + "Iter: 458 | Cost: 0.0109394 \n", + "Iter: 459 | Cost: 0.0109394 \n", + "Iter: 460 | Cost: 0.0109393 \n", + "Iter: 461 | Cost: 0.0109393 \n", + "Iter: 462 | Cost: 0.0109393 \n", + "Iter: 463 | Cost: 0.0109392 \n", + "Iter: 464 | Cost: 0.0109392 \n", + "Iter: 465 | Cost: 0.0109392 \n", + "Iter: 466 | Cost: 0.0109391 \n", + "Iter: 467 | Cost: 0.0109391 \n", + "Iter: 468 | Cost: 0.0109391 \n", + "Iter: 469 | Cost: 0.0109390 \n", + "Iter: 470 | Cost: 0.0109390 \n", + "Iter: 471 | Cost: 0.0109390 \n", + "Iter: 472 | Cost: 0.0109389 \n", + "Iter: 473 | Cost: 0.0109389 \n", + "Iter: 474 | Cost: 0.0109389 \n", + "Iter: 475 | Cost: 0.0109388 \n", + "Iter: 476 | Cost: 0.0109388 \n", + "Iter: 477 | Cost: 0.0109388 \n", + "Iter: 478 | Cost: 0.0109387 \n", + "Iter: 479 | Cost: 0.0109387 \n", + "Iter: 480 | Cost: 0.0109387 \n", + "Iter: 481 | Cost: 0.0109386 \n", + "Iter: 482 | Cost: 0.0109386 \n", + "Iter: 483 | Cost: 0.0109386 \n", + "Iter: 484 | Cost: 0.0109386 \n", + "Iter: 485 | Cost: 0.0109385 \n", + "Iter: 486 | Cost: 0.0109385 \n", + "Iter: 487 | Cost: 0.0109385 \n", + "Iter: 488 | Cost: 0.0109384 \n", + "Iter: 489 | Cost: 0.0109384 \n", + "Iter: 490 | Cost: 0.0109384 \n", + "Iter: 491 | Cost: 0.0109383 \n", + "Iter: 492 | Cost: 0.0109383 \n", + "Iter: 493 | Cost: 0.0109383 \n", + "Iter: 494 | Cost: 0.0109382 \n", + "Iter: 495 | Cost: 0.0109382 \n", + "Iter: 496 | Cost: 0.0109382 \n", + "Iter: 497 | Cost: 0.0109381 \n", + "Iter: 498 | Cost: 0.0109381 \n", + "Iter: 499 | Cost: 0.0109381 \n" + ] + } + ], + "source": [ + "opt = AdamOptimizer(0.01, beta1=0.9, beta2=0.999)\n", + "\n", + "var = var_init\n", + "for it in range(500):\n", + " (var, _, _), _cost = opt.step_and_cost(cost, var, X, Y)\n", + " print(\"Iter: {:5d} | Cost: {:0.7f} \".format(it, _cost.item()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_TpBOMX8fWun" + }, + "source": [ + "::: {.rst-class}\n", + "sphx-glr-script-out\n", + "\n", + "Out:\n", + "\n", + "``` {.none}\n", + "Iter: 0 | Cost: 0.3006065\n", + "Iter: 1 | Cost: 0.2689702\n", + "Iter: 2 | Cost: 0.2472125\n", + "Iter: 3 | Cost: 0.2300139\n", + "Iter: 4 | Cost: 0.2157100\n", + "Iter: 5 | Cost: 0.2035455\n", + "Iter: 6 | Cost: 0.1931103\n", + "Iter: 7 | Cost: 0.1841536\n", + "Iter: 8 | Cost: 0.1765061\n", + "Iter: 9 | Cost: 0.1700410\n", + "Iter: 10 | Cost: 0.1646527\n", + "Iter: 11 | Cost: 0.1602444\n", + "Iter: 12 | Cost: 0.1567201\n", + "Iter: 13 | Cost: 0.1539806\n", + "Iter: 14 | Cost: 0.1519220\n", + "Iter: 15 | Cost: 0.1504356\n", + "Iter: 16 | Cost: 0.1494099\n", + "Iter: 17 | Cost: 0.1487330\n", + "Iter: 18 | Cost: 0.1482962\n", + "Iter: 19 | Cost: 0.1479980\n", + "Iter: 20 | Cost: 0.1477470\n", + "Iter: 21 | Cost: 0.1474655\n", + "Iter: 22 | Cost: 0.1470914\n", + "Iter: 23 | Cost: 0.1465799\n", + "Iter: 24 | Cost: 0.1459034\n", + "Iter: 25 | Cost: 0.1450506\n", + "Iter: 26 | Cost: 0.1440251\n", + "Iter: 27 | Cost: 0.1428427\n", + "Iter: 28 | Cost: 0.1415282\n", + "Iter: 29 | Cost: 0.1401125\n", + "Iter: 30 | Cost: 0.1386296\n", + "Iter: 31 | Cost: 0.1371132\n", + "Iter: 32 | Cost: 0.1355946\n", + "Iter: 33 | Cost: 0.1341006\n", + "Iter: 34 | Cost: 0.1326526\n", + "Iter: 35 | Cost: 0.1312654\n", + "Iter: 36 | Cost: 0.1299478\n", + "Iter: 37 | Cost: 0.1287022\n", + "Iter: 38 | Cost: 0.1275259\n", + "Iter: 39 | Cost: 0.1264120\n", + "Iter: 40 | Cost: 0.1253502\n", + "Iter: 41 | Cost: 0.1243284\n", + "Iter: 42 | Cost: 0.1233333\n", + "Iter: 43 | Cost: 0.1223521\n", + "Iter: 44 | Cost: 0.1213726\n", + "Iter: 45 | Cost: 0.1203843\n", + "Iter: 46 | Cost: 0.1193790\n", + "Iter: 47 | Cost: 0.1183506\n", + "Iter: 48 | Cost: 0.1172959\n", + "Iter: 49 | Cost: 0.1162138\n", + "Iter: 50 | Cost: 0.1151057\n", + "Iter: 51 | Cost: 0.1139748\n", + "Iter: 52 | Cost: 0.1128259\n", + "Iter: 53 | Cost: 0.1116647\n", + "Iter: 54 | Cost: 0.1104972\n", + "Iter: 55 | Cost: 0.1093295\n", + "Iter: 56 | Cost: 0.1081673\n", + "Iter: 57 | Cost: 0.1070151\n", + "Iter: 58 | Cost: 0.1058764\n", + "Iter: 59 | Cost: 0.1047533\n", + "Iter: 60 | Cost: 0.1036464\n", + "Iter: 61 | Cost: 0.1025554\n", + "Iter: 62 | Cost: 0.1014787\n", + "Iter: 63 | Cost: 0.1004141\n", + "Iter: 64 | Cost: 0.0993591\n", + "Iter: 65 | Cost: 0.0983111\n", + "Iter: 66 | Cost: 0.0972679\n", + "Iter: 67 | Cost: 0.0962278\n", + "Iter: 68 | Cost: 0.0951896\n", + "Iter: 69 | Cost: 0.0941534\n", + "Iter: 70 | Cost: 0.0931195\n", + "Iter: 71 | Cost: 0.0920891\n", + "Iter: 72 | Cost: 0.0910638\n", + "Iter: 73 | Cost: 0.0900453\n", + "Iter: 74 | Cost: 0.0890357\n", + "Iter: 75 | Cost: 0.0880366\n", + "Iter: 76 | Cost: 0.0870493\n", + "Iter: 77 | Cost: 0.0860751\n", + "Iter: 78 | Cost: 0.0851144\n", + "Iter: 79 | Cost: 0.0841675\n", + "Iter: 80 | Cost: 0.0832342\n", + "Iter: 81 | Cost: 0.0823143\n", + "Iter: 82 | Cost: 0.0814072\n", + "Iter: 83 | Cost: 0.0805125\n", + "Iter: 84 | Cost: 0.0796296\n", + "Iter: 85 | Cost: 0.0787583\n", + "Iter: 86 | Cost: 0.0778983\n", + "Iter: 87 | Cost: 0.0770497\n", + "Iter: 88 | Cost: 0.0762127\n", + "Iter: 89 | Cost: 0.0753874\n", + "Iter: 90 | Cost: 0.0745742\n", + "Iter: 91 | Cost: 0.0737733\n", + "Iter: 92 | Cost: 0.0729849\n", + "Iter: 93 | Cost: 0.0722092\n", + "Iter: 94 | Cost: 0.0714462\n", + "Iter: 95 | Cost: 0.0706958\n", + "Iter: 96 | Cost: 0.0699578\n", + "Iter: 97 | Cost: 0.0692319\n", + "Iter: 98 | Cost: 0.0685177\n", + "Iter: 99 | Cost: 0.0678151\n", + "Iter: 100 | Cost: 0.0671236\n", + "Iter: 101 | Cost: 0.0664430\n", + "Iter: 102 | Cost: 0.0657732\n", + "Iter: 103 | Cost: 0.0651139\n", + "Iter: 104 | Cost: 0.0644650\n", + "Iter: 105 | Cost: 0.0638264\n", + "Iter: 106 | Cost: 0.0631981\n", + "Iter: 107 | Cost: 0.0625800\n", + "Iter: 108 | Cost: 0.0619719\n", + "Iter: 109 | Cost: 0.0613737\n", + "Iter: 110 | Cost: 0.0607853\n", + "Iter: 111 | Cost: 0.0602064\n", + "Iter: 112 | Cost: 0.0596368\n", + "Iter: 113 | Cost: 0.0590764\n", + "Iter: 114 | Cost: 0.0585249\n", + "Iter: 115 | Cost: 0.0579820\n", + "Iter: 116 | Cost: 0.0574476\n", + "Iter: 117 | Cost: 0.0569214\n", + "Iter: 118 | Cost: 0.0564033\n", + "Iter: 119 | Cost: 0.0558932\n", + "Iter: 120 | Cost: 0.0553908\n", + "Iter: 121 | Cost: 0.0548960\n", + "Iter: 122 | Cost: 0.0544086\n", + "Iter: 123 | Cost: 0.0539286\n", + "Iter: 124 | Cost: 0.0534557\n", + "Iter: 125 | Cost: 0.0529897\n", + "Iter: 126 | Cost: 0.0525306\n", + "Iter: 127 | Cost: 0.0520781\n", + "Iter: 128 | Cost: 0.0516320\n", + "Iter: 129 | Cost: 0.0511923\n", + "Iter: 130 | Cost: 0.0507587\n", + "Iter: 131 | Cost: 0.0503311\n", + "Iter: 132 | Cost: 0.0499094\n", + "Iter: 133 | Cost: 0.0494934\n", + "Iter: 134 | Cost: 0.0490830\n", + "Iter: 135 | Cost: 0.0486781\n", + "Iter: 136 | Cost: 0.0482785\n", + "Iter: 137 | Cost: 0.0478842\n", + "Iter: 138 | Cost: 0.0474949\n", + "Iter: 139 | Cost: 0.0471107\n", + "Iter: 140 | Cost: 0.0467313\n", + "Iter: 141 | Cost: 0.0463567\n", + "Iter: 142 | Cost: 0.0459868\n", + "Iter: 143 | Cost: 0.0456214\n", + "Iter: 144 | Cost: 0.0452604\n", + "Iter: 145 | Cost: 0.0449038\n", + "Iter: 146 | Cost: 0.0445514\n", + "Iter: 147 | Cost: 0.0442032\n", + "Iter: 148 | Cost: 0.0438590\n", + "Iter: 149 | Cost: 0.0435188\n", + "Iter: 150 | Cost: 0.0431825\n", + "Iter: 151 | Cost: 0.0428499\n", + "Iter: 152 | Cost: 0.0425211\n", + "Iter: 153 | Cost: 0.0421960\n", + "Iter: 154 | Cost: 0.0418744\n", + "Iter: 155 | Cost: 0.0415563\n", + "Iter: 156 | Cost: 0.0412416\n", + "Iter: 157 | Cost: 0.0409302\n", + "Iter: 158 | Cost: 0.0406222\n", + "Iter: 159 | Cost: 0.0403173\n", + "Iter: 160 | Cost: 0.0400156\n", + "Iter: 161 | Cost: 0.0397169\n", + "Iter: 162 | Cost: 0.0394213\n", + "Iter: 163 | Cost: 0.0391286\n", + "Iter: 164 | Cost: 0.0388389\n", + "Iter: 165 | Cost: 0.0385520\n", + "Iter: 166 | Cost: 0.0382679\n", + "Iter: 167 | Cost: 0.0379866\n", + "Iter: 168 | Cost: 0.0377079\n", + "Iter: 169 | Cost: 0.0374319\n", + "Iter: 170 | Cost: 0.0371585\n", + "Iter: 171 | Cost: 0.0368877\n", + "Iter: 172 | Cost: 0.0366194\n", + "Iter: 173 | Cost: 0.0363535\n", + "Iter: 174 | Cost: 0.0360901\n", + "Iter: 175 | Cost: 0.0358291\n", + "Iter: 176 | Cost: 0.0355704\n", + "Iter: 177 | Cost: 0.0353140\n", + "Iter: 178 | Cost: 0.0350599\n", + "Iter: 179 | Cost: 0.0348081\n", + "Iter: 180 | Cost: 0.0345585\n", + "Iter: 181 | Cost: 0.0343110\n", + "Iter: 182 | Cost: 0.0340658\n", + "Iter: 183 | Cost: 0.0338226\n", + "Iter: 184 | Cost: 0.0335815\n", + "Iter: 185 | Cost: 0.0333425\n", + "Iter: 186 | Cost: 0.0331056\n", + "Iter: 187 | Cost: 0.0328706\n", + "Iter: 188 | Cost: 0.0326377\n", + "Iter: 189 | Cost: 0.0324067\n", + "Iter: 190 | Cost: 0.0321777\n", + "Iter: 191 | Cost: 0.0319506\n", + "Iter: 192 | Cost: 0.0317255\n", + "Iter: 193 | Cost: 0.0315022\n", + "Iter: 194 | Cost: 0.0312808\n", + "Iter: 195 | Cost: 0.0310613\n", + "Iter: 196 | Cost: 0.0308436\n", + "Iter: 197 | Cost: 0.0306278\n", + "Iter: 198 | Cost: 0.0304138\n", + "Iter: 199 | Cost: 0.0302016\n", + "Iter: 200 | Cost: 0.0299912\n", + "Iter: 201 | Cost: 0.0297826\n", + "Iter: 202 | Cost: 0.0295757\n", + "Iter: 203 | Cost: 0.0293707\n", + "Iter: 204 | Cost: 0.0291674\n", + "Iter: 205 | Cost: 0.0289659\n", + "Iter: 206 | Cost: 0.0287661\n", + "Iter: 207 | Cost: 0.0285681\n", + "Iter: 208 | Cost: 0.0283718\n", + "Iter: 209 | Cost: 0.0281772\n", + "Iter: 210 | Cost: 0.0279844\n", + "Iter: 211 | Cost: 0.0277933\n", + "Iter: 212 | Cost: 0.0276039\n", + "Iter: 213 | Cost: 0.0274163\n", + "Iter: 214 | Cost: 0.0272304\n", + "Iter: 215 | Cost: 0.0270461\n", + "Iter: 216 | Cost: 0.0268636\n", + "Iter: 217 | Cost: 0.0266829\n", + "Iter: 218 | Cost: 0.0265038\n", + "Iter: 219 | Cost: 0.0263264\n", + "Iter: 220 | Cost: 0.0261508\n", + "Iter: 221 | Cost: 0.0259768\n", + "Iter: 222 | Cost: 0.0258046\n", + "Iter: 223 | Cost: 0.0256341\n", + "Iter: 224 | Cost: 0.0254652\n", + "Iter: 225 | Cost: 0.0252981\n", + "Iter: 226 | Cost: 0.0251327\n", + "Iter: 227 | Cost: 0.0249690\n", + "Iter: 228 | Cost: 0.0248070\n", + "Iter: 229 | Cost: 0.0246467\n", + "Iter: 230 | Cost: 0.0244881\n", + "Iter: 231 | Cost: 0.0243312\n", + "Iter: 232 | Cost: 0.0241760\n", + "Iter: 233 | Cost: 0.0240225\n", + "Iter: 234 | Cost: 0.0238707\n", + "Iter: 235 | Cost: 0.0237206\n", + "Iter: 236 | Cost: 0.0235721\n", + "Iter: 237 | Cost: 0.0234254\n", + "Iter: 238 | Cost: 0.0232803\n", + "Iter: 239 | Cost: 0.0231369\n", + "Iter: 240 | Cost: 0.0229952\n", + "Iter: 241 | Cost: 0.0228552\n", + "Iter: 242 | Cost: 0.0227168\n", + "Iter: 243 | Cost: 0.0225801\n", + "Iter: 244 | Cost: 0.0224450\n", + "Iter: 245 | Cost: 0.0223116\n", + "Iter: 246 | Cost: 0.0221798\n", + "Iter: 247 | Cost: 0.0220496\n", + "Iter: 248 | Cost: 0.0219211\n", + "Iter: 249 | Cost: 0.0217942\n", + "Iter: 250 | Cost: 0.0216688\n", + "Iter: 251 | Cost: 0.0215451\n", + "Iter: 252 | Cost: 0.0214230\n", + "Iter: 253 | Cost: 0.0213024\n", + "Iter: 254 | Cost: 0.0211835\n", + "Iter: 255 | Cost: 0.0210660\n", + "Iter: 256 | Cost: 0.0209502\n", + "Iter: 257 | Cost: 0.0208358\n", + "Iter: 258 | Cost: 0.0207230\n", + "Iter: 259 | Cost: 0.0206117\n", + "Iter: 260 | Cost: 0.0205019\n", + "Iter: 261 | Cost: 0.0203936\n", + "Iter: 262 | Cost: 0.0202867\n", + "Iter: 263 | Cost: 0.0201813\n", + "Iter: 264 | Cost: 0.0200773\n", + "Iter: 265 | Cost: 0.0199748\n", + "Iter: 266 | Cost: 0.0198737\n", + "Iter: 267 | Cost: 0.0197740\n", + "Iter: 268 | Cost: 0.0196757\n", + "Iter: 269 | Cost: 0.0195787\n", + "Iter: 270 | Cost: 0.0194831\n", + "Iter: 271 | Cost: 0.0193889\n", + "Iter: 272 | Cost: 0.0192959\n", + "Iter: 273 | Cost: 0.0192043\n", + "Iter: 274 | Cost: 0.0191140\n", + "Iter: 275 | Cost: 0.0190249\n", + "Iter: 276 | Cost: 0.0189371\n", + "Iter: 277 | Cost: 0.0188505\n", + "Iter: 278 | Cost: 0.0187651\n", + "Iter: 279 | Cost: 0.0186810\n", + "Iter: 280 | Cost: 0.0185980\n", + "Iter: 281 | Cost: 0.0185163\n", + "Iter: 282 | Cost: 0.0184356\n", + "Iter: 283 | Cost: 0.0183561\n", + "Iter: 284 | Cost: 0.0182777\n", + "Iter: 285 | Cost: 0.0182004\n", + "Iter: 286 | Cost: 0.0181242\n", + "Iter: 287 | Cost: 0.0180491\n", + "Iter: 288 | Cost: 0.0179750\n", + "Iter: 289 | Cost: 0.0179020\n", + "Iter: 290 | Cost: 0.0178299\n", + "Iter: 291 | Cost: 0.0177589\n", + "Iter: 292 | Cost: 0.0176888\n", + "Iter: 293 | Cost: 0.0176197\n", + "Iter: 294 | Cost: 0.0175515\n", + "Iter: 295 | Cost: 0.0174843\n", + "Iter: 296 | Cost: 0.0174180\n", + "Iter: 297 | Cost: 0.0173525\n", + "Iter: 298 | Cost: 0.0172880\n", + "Iter: 299 | Cost: 0.0172243\n", + "Iter: 300 | Cost: 0.0171614\n", + "Iter: 301 | Cost: 0.0170994\n", + "Iter: 302 | Cost: 0.0170382\n", + "Iter: 303 | Cost: 0.0169777\n", + "Iter: 304 | Cost: 0.0169181\n", + "Iter: 305 | Cost: 0.0168592\n", + "Iter: 306 | Cost: 0.0168010\n", + "Iter: 307 | Cost: 0.0167436\n", + "Iter: 308 | Cost: 0.0166869\n", + "Iter: 309 | Cost: 0.0166309\n", + "Iter: 310 | Cost: 0.0165756\n", + "Iter: 311 | Cost: 0.0165209\n", + "Iter: 312 | Cost: 0.0164669\n", + "Iter: 313 | Cost: 0.0164136\n", + "Iter: 314 | Cost: 0.0163608\n", + "Iter: 315 | Cost: 0.0163087\n", + "Iter: 316 | Cost: 0.0162572\n", + "Iter: 317 | Cost: 0.0162063\n", + "Iter: 318 | Cost: 0.0161559\n", + "Iter: 319 | Cost: 0.0161061\n", + "Iter: 320 | Cost: 0.0160568\n", + "Iter: 321 | Cost: 0.0160080\n", + "Iter: 322 | Cost: 0.0159598\n", + "Iter: 323 | Cost: 0.0159121\n", + "Iter: 324 | Cost: 0.0158649\n", + "Iter: 325 | Cost: 0.0158181\n", + "Iter: 326 | Cost: 0.0157719\n", + "Iter: 327 | Cost: 0.0157260\n", + "Iter: 328 | Cost: 0.0156807\n", + "Iter: 329 | Cost: 0.0156357\n", + "Iter: 330 | Cost: 0.0155912\n", + "Iter: 331 | Cost: 0.0155471\n", + "Iter: 332 | Cost: 0.0155034\n", + "Iter: 333 | Cost: 0.0154601\n", + "Iter: 334 | Cost: 0.0154172\n", + "Iter: 335 | Cost: 0.0153747\n", + "Iter: 336 | Cost: 0.0153325\n", + "Iter: 337 | Cost: 0.0152907\n", + "Iter: 338 | Cost: 0.0152492\n", + "Iter: 339 | Cost: 0.0152081\n", + "Iter: 340 | Cost: 0.0151673\n", + "Iter: 341 | Cost: 0.0151269\n", + "Iter: 342 | Cost: 0.0150867\n", + "Iter: 343 | Cost: 0.0150469\n", + "Iter: 344 | Cost: 0.0150073\n", + "Iter: 345 | Cost: 0.0149681\n", + "Iter: 346 | Cost: 0.0149291\n", + "Iter: 347 | Cost: 0.0148905\n", + "Iter: 348 | Cost: 0.0148521\n", + "Iter: 349 | Cost: 0.0148140\n", + "Iter: 350 | Cost: 0.0147761\n", + "Iter: 351 | Cost: 0.0147385\n", + "Iter: 352 | Cost: 0.0147012\n", + "Iter: 353 | Cost: 0.0146641\n", + "Iter: 354 | Cost: 0.0146273\n", + "Iter: 355 | Cost: 0.0145907\n", + "Iter: 356 | Cost: 0.0145543\n", + "Iter: 357 | Cost: 0.0145182\n", + "Iter: 358 | Cost: 0.0144824\n", + "Iter: 359 | Cost: 0.0144467\n", + "Iter: 360 | Cost: 0.0144113\n", + "Iter: 361 | Cost: 0.0143762\n", + "Iter: 362 | Cost: 0.0143412\n", + "Iter: 363 | Cost: 0.0143065\n", + "Iter: 364 | Cost: 0.0142720\n", + "Iter: 365 | Cost: 0.0142378\n", + "Iter: 366 | Cost: 0.0142037\n", + "Iter: 367 | Cost: 0.0141699\n", + "Iter: 368 | Cost: 0.0141363\n", + "Iter: 369 | Cost: 0.0141030\n", + "Iter: 370 | Cost: 0.0140699\n", + "Iter: 371 | Cost: 0.0140370\n", + "Iter: 372 | Cost: 0.0140043\n", + "Iter: 373 | Cost: 0.0139719\n", + "Iter: 374 | Cost: 0.0139397\n", + "Iter: 375 | Cost: 0.0139077\n", + "Iter: 376 | Cost: 0.0138760\n", + "Iter: 377 | Cost: 0.0138445\n", + "Iter: 378 | Cost: 0.0138132\n", + "Iter: 379 | Cost: 0.0137822\n", + "Iter: 380 | Cost: 0.0137515\n", + "Iter: 381 | Cost: 0.0137210\n", + "Iter: 382 | Cost: 0.0136907\n", + "Iter: 383 | Cost: 0.0136607\n", + "Iter: 384 | Cost: 0.0136310\n", + "Iter: 385 | Cost: 0.0136015\n", + "Iter: 386 | Cost: 0.0135723\n", + "Iter: 387 | Cost: 0.0135433\n", + "Iter: 388 | Cost: 0.0135146\n", + "Iter: 389 | Cost: 0.0134863\n", + "Iter: 390 | Cost: 0.0134581\n", + "Iter: 391 | Cost: 0.0134303\n", + "Iter: 392 | Cost: 0.0134027\n", + "Iter: 393 | Cost: 0.0133755\n", + "Iter: 394 | Cost: 0.0133485\n", + "Iter: 395 | Cost: 0.0133218\n", + "Iter: 396 | Cost: 0.0132954\n", + "Iter: 397 | Cost: 0.0132694\n", + "Iter: 398 | Cost: 0.0132436\n", + "Iter: 399 | Cost: 0.0132181\n", + "Iter: 400 | Cost: 0.0131929\n", + "Iter: 401 | Cost: 0.0131681\n", + "Iter: 402 | Cost: 0.0131435\n", + "Iter: 403 | Cost: 0.0131193\n", + "Iter: 404 | Cost: 0.0130953\n", + "Iter: 405 | Cost: 0.0130717\n", + "Iter: 406 | Cost: 0.0130484\n", + "Iter: 407 | Cost: 0.0130254\n", + "Iter: 408 | Cost: 0.0130028\n", + "Iter: 409 | Cost: 0.0129804\n", + "Iter: 410 | Cost: 0.0129584\n", + "Iter: 411 | Cost: 0.0129367\n", + "Iter: 412 | Cost: 0.0129153\n", + "Iter: 413 | Cost: 0.0128942\n", + "Iter: 414 | Cost: 0.0128735\n", + "Iter: 415 | Cost: 0.0128530\n", + "Iter: 416 | Cost: 0.0128329\n", + "Iter: 417 | Cost: 0.0128131\n", + "Iter: 418 | Cost: 0.0127935\n", + "Iter: 419 | Cost: 0.0127743\n", + "Iter: 420 | Cost: 0.0127554\n", + "Iter: 421 | Cost: 0.0127368\n", + "Iter: 422 | Cost: 0.0127185\n", + "Iter: 423 | Cost: 0.0127006\n", + "Iter: 424 | Cost: 0.0126829\n", + "Iter: 425 | Cost: 0.0126655\n", + "Iter: 426 | Cost: 0.0126483\n", + "Iter: 427 | Cost: 0.0126315\n", + "Iter: 428 | Cost: 0.0126150\n", + "Iter: 429 | Cost: 0.0125987\n", + "Iter: 430 | Cost: 0.0125827\n", + "Iter: 431 | Cost: 0.0125670\n", + "Iter: 432 | Cost: 0.0125516\n", + "Iter: 433 | Cost: 0.0125364\n", + "Iter: 434 | Cost: 0.0125215\n", + "Iter: 435 | Cost: 0.0125068\n", + "Iter: 436 | Cost: 0.0124924\n", + "Iter: 437 | Cost: 0.0124782\n", + "Iter: 438 | Cost: 0.0124643\n", + "Iter: 439 | Cost: 0.0124507\n", + "Iter: 440 | Cost: 0.0124372\n", + "Iter: 441 | Cost: 0.0124240\n", + "Iter: 442 | Cost: 0.0124110\n", + "Iter: 443 | Cost: 0.0123983\n", + "Iter: 444 | Cost: 0.0123857\n", + "Iter: 445 | Cost: 0.0123734\n", + "Iter: 446 | Cost: 0.0123613\n", + "Iter: 447 | Cost: 0.0123494\n", + "Iter: 448 | Cost: 0.0123377\n", + "Iter: 449 | Cost: 0.0123262\n", + "Iter: 450 | Cost: 0.0123149\n", + "Iter: 451 | Cost: 0.0123038\n", + "Iter: 452 | Cost: 0.0122929\n", + "Iter: 453 | Cost: 0.0122821\n", + "Iter: 454 | Cost: 0.0122715\n", + "Iter: 455 | Cost: 0.0122611\n", + "Iter: 456 | Cost: 0.0122509\n", + "Iter: 457 | Cost: 0.0122409\n", + "Iter: 458 | Cost: 0.0122310\n", + "Iter: 459 | Cost: 0.0122212\n", + "Iter: 460 | Cost: 0.0122116\n", + "Iter: 461 | Cost: 0.0122022\n", + "Iter: 462 | Cost: 0.0121929\n", + "Iter: 463 | Cost: 0.0121838\n", + "Iter: 464 | Cost: 0.0121748\n", + "Iter: 465 | Cost: 0.0121660\n", + "Iter: 466 | Cost: 0.0121572\n", + "Iter: 467 | Cost: 0.0121487\n", + "Iter: 468 | Cost: 0.0121402\n", + "Iter: 469 | Cost: 0.0121319\n", + "Iter: 470 | Cost: 0.0121237\n", + "Iter: 471 | Cost: 0.0121156\n", + "Iter: 472 | Cost: 0.0121076\n", + "Iter: 473 | Cost: 0.0120998\n", + "Iter: 474 | Cost: 0.0120921\n", + "Iter: 475 | Cost: 0.0120844\n", + "Iter: 476 | Cost: 0.0120769\n", + "Iter: 477 | Cost: 0.0120695\n", + "Iter: 478 | Cost: 0.0120622\n", + "Iter: 479 | Cost: 0.0120550\n", + "Iter: 480 | Cost: 0.0120479\n", + "Iter: 481 | Cost: 0.0120409\n", + "Iter: 482 | Cost: 0.0120340\n", + "Iter: 483 | Cost: 0.0120272\n", + "Iter: 484 | Cost: 0.0120205\n", + "Iter: 485 | Cost: 0.0120138\n", + "Iter: 486 | Cost: 0.0120073\n", + "Iter: 487 | Cost: 0.0120008\n", + "Iter: 488 | Cost: 0.0119944\n", + "Iter: 489 | Cost: 0.0119881\n", + "Iter: 490 | Cost: 0.0119819\n", + "Iter: 491 | Cost: 0.0119758\n", + "Iter: 492 | Cost: 0.0119697\n", + "Iter: 493 | Cost: 0.0119637\n", + "Iter: 494 | Cost: 0.0119578\n", + "Iter: 495 | Cost: 0.0119520\n", + "Iter: 496 | Cost: 0.0119462\n", + "Iter: 497 | Cost: 0.0119405\n", + "Iter: 498 | Cost: 0.0119349\n", + "Iter: 499 | Cost: 0.0119293\n", + "```\n", + ":::\n", + "\n", + "Finally, we collect the predictions of the trained model for 50 values\n", + "in the range $[-1,1]$:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "id": "Hdmj8HXwfWup" + }, + "outputs": [], + "source": [ + "x_pred = np.linspace(-1, 1, 50)\n", + "predictions = [quantum_neural_net(var, x_) for x_ in x_pred]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aVcaS0sJfWup" + }, + "source": [ + "and plot the shape of the function that the model has \"learned\" from the\n", + "noisy data (green dots).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 449 + }, + "id": "mERucZDLfWup", + "outputId": "49cfa92b-6266-417b-f318-f652e6ea362a" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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8dDr9bafo6yxsdHlvSQmJrodr+T3MZB8uUfZM888gyeffBIfffQRRo0a5XbsxRdfjPj4eOzZsyegb6LduT9Zr169MGbMGOzZswdAeL2GJ0+exPr16/Hoo496/D7Beg194er30GAwoHfv3tDr9d3+d+GRXzKNyC1vk6WfeeYZ2zWTyeQ0WfrLL7+0jfn3v/8dtGRpX+cxceJEh5NGrvzpT38S/fr183muvvLXz/rTTz8VAMRXX30lhDifLN35xMOLL74oDAaDaGtr898NeODr/ZlMJvGTn/xETJw4UZw8eVLR9wrEa5iRkSEWLFhg+9xisYhBgwa5TZb++c9/bndt/PjxDsnS7n4fA83bexRCiKeeekoYDAZRXl6u6HscOnRISJIk3nnnnW7P11u+3F9nZ8+eFampqeLee+8VQoTPayhEx/tIZGSkaGpq8vg9gvkadgaFydLp6el212655RaHZOnu/LvwOE+/PAs5deDAAbFjxw7bEfEdO3aIHTt22B0VT01NFSUlJbbPn3zySdG3b1/xzjvviK+//lrk5OQ4PT4/ZswY8fnnn4tPP/1UXHrppUE7Pu9uHocPHxapqani888/t3vcd999JyRJEu+//77Dc/7rX/8SL730kti1a5f47rvvxPPPPy+io6PFww8/3OP344y397hnzx7x6KOPii+//FLU1taKd955R1x88cXi6quvtj1GPj5/3XXXiZ07d4rS0lKRkJAQtOPz3tyfyWQS48aNEyNHjhR79uyxO6579uxZIUTwXsP169eLyMhIsWbNGlFdXS3mzp0r+vbtazud96tf/Uo8+OCDtvGfffaZuOCCC8QzzzwjampqREFBgdPj855+HwPJ23t88sknRUREhCguLrZ7reT/B7W0tIjf//73ory8XNTW1oqPPvpIjB07Vlx66aUBDcp9vb/CwkLx73//W+zdu1ds375d3HzzzSIqKkrs3r3bNkbtr6HsqquuEjfddJPD9VB7DVtaWmzvdQDEs88+K3bs2CEOHDgghBDiwQcfFL/61a9s4+Xj8/fff7+oqakRK1ascHp83t3PrLsYCPWg2bNnCwAOH1u2bLGNwbl6KzKr1SoeeughMWDAABEZGSmuueYa8e2339o97/fffy9uueUWceGFFwqDwSDuuOMOu+AqUDzNo7a21uF+hRBiyZIlIjk5WVgsFofnfP/998Xo0aPFhRdeKPr06SMuv/xy8cILLzgdGwje3uPBgwfF1VdfLeLi4kRkZKS45JJLxP33329XR0gIIfbv3y9+9rOfid69e4v4+Hhx33332R0/DxRv72/Lli1O/00DELW1tUKI4L6Gzz33nBg8eLCIiIgQGRkZ4r///a/taxMnThSzZ8+2G79hwwbxox/9SERERIgRI0aI9957z+7rSn4fA82bexwyZIjT16qgoEAIIURra6u47rrrREJCgujVq5cYMmSImDNnjt/eYHzhzf0tXLjQNnbAgAHi+uuvF5WVlXbPp/bXUAghvvnmGwFAfPDBBw7PFWqvoav/R8j3NHv2bDFx4kSHx4wePVpERESIiy++2O49UebuZ9ZdkhBBOJdMREREFAJYR4iIiIg0i4EQERERaRYDISIiItIsBkJERESkWQyEiIiISLMYCBEREZFmMRAiIiIizWIgRERERJrFQIiIiIg0i4EQERERaRYDISIiItIsBkJEpCnHjh1DYmIinnjiCdu1bdu2ISIiAps3bw7izIgoGNh0lYg0Z9OmTbjhhhuwbds2pKamYvTo0cjJycGzzz4b7KkRUYAxECIiTbr77rvx0Ucf4corr8SuXbvwxRdfIDIyMtjTIqIAYyBERJp06tQppKen49ChQ9i+fTtGjhwZ7CkRURAwR4iINGnv3r04cuQIrFYr9u/fH+zpEFGQcEWIiDTn9OnTyMjIwOjRo5Gamorly5dj165d6N+/f7CnRkQBxkCIiDTn/vvvR3FxMb766itceOGFmDhxImJjY/Huu+8Ge2pEFGDcGiMiTSkrK8Py5cvxj3/8AwaDATqdDv/4xz+wdetWrFy5MtjTI6IA44oQERERaRZXhIiIiEizGAgRERGRZjEQIiIiIs1iIERERESaxUCIiIiINIuBEBEREWkWAyEiIiLSLAZCREREpFkMhIiIiEizGAgRERGRZjEQIiIiIs36/4WHTNPaYSzJAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ], + "source": [ + "plt.figure()\n", + "plt.scatter(X, Y)\n", + "plt.scatter(x_pred, predictions, color=\"green\")\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"f(x)\")\n", + "plt.tick_params(axis=\"both\", which=\"major\")\n", + "plt.tick_params(axis=\"both\", which=\"minor\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IeCZDqxufWup" + }, + "source": [ + "\n", + "\n", + "The model has learned to smooth the noisy data.\n", + "\n", + "In fact, we can use PennyLane to look at typical functions that the\n", + "model produces without being trained at all. The shape of these\n", + "functions varies significantly with the variance hyperparameter for the\n", + "weight initialization.\n", + "\n", + "Setting this hyperparameter to a small value produces almost linear\n", + "functions, since all quantum gates in the variational circuit\n", + "approximately perform the identity transformation in that case. Larger\n", + "values produce smoothly oscillating functions with a period that depends\n", + "on the number of layers used (generically, the more layers, the smaller\n", + "the period).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 449 + }, + "id": "OpPoqtDOfWuq", + "outputId": "91dce62a-3067-462c-84c4-f347d87ca26b" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGwCAYAAABFFQqPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC9RElEQVR4nOyddVxU2fvHPwypSAgiKIpiIXYtFrus3bV2K3a7dq4da64dq9ita3e3iIKiCCoGIo2kNHOf3x/8OF9HUYk7c2eG83697oth4jzPnbj3c895QoeICBwOh8PhcDj5EJnUDnA4HA6Hw+FIBRdCHA6Hw+Fw8i1cCHE4HA6Hw8m3cCHE4XA4HA4n38KFEIfD4XA4nHwLF0IcDofD4XDyLVwIcTgcDofDybfoSe2AuiMIAoKDg2FiYgIdHR2p3eFwOBwOh5MNiAjx8fEoXrw4ZLLvz/twIfQTgoODUbJkSand4HA4HA6HkwsCAwNRokSJ7z7OhdBPMDExAZDxRpqamkrsDYfD4XA4nOwQFxeHkiVLsvP49+BC6CdkLoeZmppyIcThcDgcjobxs7AWHizN4XA4HA4n38KFEIfD4XA4nHwLF0IcDofD4XDyLVwIcTgcDofDybdwIcThcDgcDiffwoUQh8PhcDicfAsXQhwOh8PhcPItXAhxOBwOh8PJt3AhxOFwOBwOJ9/ChRCHw+FwOJx8CxdCHA6Hw+Fw8i1cCHE4HA6Hw8m38KarHA4nX5CSkoLw8HDo6upCX1//m+1njRk5HI52woUQh8PRGgRBQGBgIF69esW2ly9f4tWrVwgICIAgCN99baZAKlCgACpWrIgaNWqgZs2aqFGjBqpUqYICBQqocE84HI6q0CEiktoJdSYuLg5mZmaIjY2Fqamp1O5wOJwvSEpKwpUrV3Dy5Em4u7vD398fycnJ332+np4eBEH4oSDKCplMhooVKzJhVKNGDdSvXx/GxsZ53QUOh6Mksnv+5kLoJ3AhxOGoF1FRUTh79ixOnDiBCxcuIDExUeFxfX19lC1bFg4ODqhQoYLCZm1tDR0dHQiCgLS0tCy3+Ph4PH/+HE+ePMGTJ0/g5eWFiIiIb/wwNjZGx44d0bt3bzRt2hT6+vqqegs4HE424EJIJLgQ4nCk58OHDzh58iROnDiBmzdvQi6Xs8dKliyJjh07onnz5nB0dESpUqWgpyfeqj8RISQkREEYubu7IzAwkD3HysoK3bp1Q+/evVGvXj0eb8ThqAFcCIkEF0IcjjTI5XIcO3YMq1atgru7u8JjVatWRceOHdGxY0fUrFlT5cKDiODu7o59+/bh0KFDCjNG9vb26NWrF3r16oVKlSqp1C8Oh/M/uBASCS6EOBzVkpSUhF27dmHFihV48+YNgIwYHWdnZ3Ts2BEdOnRAmTJlJPbyf6Snp+PKlSvYv38/jh8/js+fP7PH6tevj7lz56JZs2aSzxJFRkbC09NTYSnxS5++vG1ra4uqVavCwMBApT5yOGLChZBIcCHE4aiGmJgYbNy4EWvWrEF4eDgAwMLCAmPGjMGIESNgbW0tsYc/JzExEadPn8a+fftw/vx5pKenAwCcnZ0xf/58NGrUSCV+pKWlwdvbGw8ePGCbv79/jsYwNDRErVq1ULduXbaVLl1ackHH4WQXLoREggshDke5BAUFYfXq1diyZQubTbGzs8PEiRMxaNAgjc3MCg0Nxd9//41NmzYhJSUFANCoUSMsWLAADRs2FNVWUlISzp8/j/v37+PBgwd49OhRltlzFSpUQJEiRQBkLO9l8uVtQRDw+vVrREdHf/N6KysrJopcXFzg7OzMhRFHbeFCSCS4EOJwlENwcDD++usv7N69G2lpaQCAKlWqYMqUKejRo4fWZGEFBQVh8eLF+Pfff9l+tmjRAvPnz4eTk1Oex96wYQO2bt2KT58+KTxWuHBh1KtXD3Xr1kW9evXg5OSEwoULZ2tcIoK/vz/c3d3Z9uTJE+Z/JhUrVsSIESPQr18/mJub52lfOByx4UJIJLgQ4nDEJS0tDevWrcOcOXPYDNCvv/6KqVOnonXr1lo7w/DhwwcsXLgQO3bsYEtmbdu2xfz581GzZs0cjeXu7o41a9bgyJEjbKxSpUqhdevWqFevHurVq4fy5cuL+l4mJyfjyZMncHd3x4MHD3DmzBn2+RUsWBC9evXCyJEjc7wvHI6yyPb5mzg/JDY2lgBQbGys1K5wOBrPrVu3qGrVqgSAAFDdunXpzp07UrulUt68eUMDBgwgmUxGAEgmk9GECRMoISHhh69LTU2lgwcPUr169dj7B4BcXFzov//+o/T0dBXtQQZxcXG0ceNGqlKlioI/9erVo127dlFSUpJK/eFwvia7528uhH4CF0IcTt4JDQ2lfv36sZOlhYUF/fvvvySXy6V2TTJevnxJ3bt3Z+9J2bJl6caNG988Lzo6mpYsWUK2trbsuQYGBjRgwADy8vJSveNfIQgC3b59m3r27En6+vrMR0tLS5oyZQpFRkZK7SInn5Ld8zdfGvsJfGlMXIgI3t7eOHDgAI4dO4a4uDiYmprCzMwMZmZmWd52dHREq1atIJPJpHafk0Pkcjk2b96MmTNnIjY2FgAwZMgQLFmyBJaWlhJ7px6cO3cOw4YNw8ePHwEAw4cPx99//w0TExMcO3YMo0ePRlhYGADA2toaI0aMwPDhw9Uyiy4sLAxubm7YvHkzPnz4ACAjVmnhwoUYOnSoqIUuOZyfwZfGRILPCImDv78/LViwgCpVqqQwjZ7drVKlSrRv3z5KS0uTelc42eTBgwdUq1Yt9hnWrFmTHjx4ILVbaklsbCwNGzaMvVfFihWj+vXrs/8dHBxo165dlJycLLWr2SI9PZ1OnjxJ1apVY/tQvXp1unnzptSucfIRfEZIJPiMUO4JCQnBoUOHcODAATx8+JDdb2BggDZt2qBnz55wcHBAXFwcYmNjERsby25n/o2OjsbZs2fZbEK5cuUwffp09O3bV2uyirSN1NRUzJgxA6tWrQIRwczMDIsWLcLw4cOhq6srtXtqzdWrV9GjRw9ERkYCyCgkOXHiRCxYsACGhoYSe5dz0tPTsXXrVsyaNYul4/fs2RPLli1DiRIlJPaOo+3wGSGR4DNCOcfb25uaNm1KOjo67GpQJpNRs2bNaMeOHRQTE5Oj8WJiYmjhwoVkaWnJxrOzs6ONGzfygEw149WrV1S7dm32OfXt25dCQ0Oldksj8PX1JWdn529mQ62trenYsWNSu5cnIiIiaNiwYeyYULBgQVq8eLHGzHBxNBMeLC0SXAhlH0EQaO3atWRoaMgO4vXr16d169aJcjKMj4+nFStWkLW1NRu/ePHitHr16p9m3HCUz+7du6lQoUIsGPrEiRNSu6QRpKSk0IIFC8jAwIAAkLGxMa1du5Zu375Njo6O7Ls+fPhwjRcOnp6e1LBhQ4UA8dOnT0vtFkdL4UJIJLgQyh5hYWHUunVrdoBr3bo1vXnzRim2EhMTad26dVSiRAmFq+bbt28rxR7nx8TFxVGfPn0U0rkDAwOldksjePjwoUL6eatWrej9+/fs8aSkJJo+fTqbSXFycqIPHz5I6HHeEQSB9uzZQ8WKFWP73bNnT36M5YgOF0IiwYXQzzl//jybpTE0NKR169aRIAhKt5uSkkJbt24le3t7AkBGRkZ05swZpdvl/I9Hjx5RuXLl2PLn/PnzVV7PRlPZvn07SzcvUqQI7d+//7u/m3PnzlHhwoXZc69cuaJib8UnLi6OpkyZQrq6umx2yMPDQ2q3OFoEF0IiwYXQ90lKSqLx48ezq7oqVaqQt7e3yv1ISEigNm3aEADS1dWlXbt2qdyH/IZcLqcVK1awE7mdnV2+K4yYW9LS0hR+N506daKIiIifvu7t27dUs2ZNJjqXLl2qkgsOZXPv3j0qVaoUASB9fX1auXJlvq4vxREPLoREgguhrPHx8VFIjR0zZgwlJiZK5k9qair17duX+bNy5UrJfNF2wsLCqGXLluy97ty5M0VFRUntlkYQFRVFzZo1Y+/d3Llzc3TST0xMpIEDByqIqJwmH6gjUVFR9McffygsrYeHh0vtFkfD4UJIJLgQUkQQBNq4cSMZGRkRALKyslKb5Si5XE5//vknO5hOmzZNK66Y1QkvLy8qWbIkW4rcvHkzf4+zia+vL5UvX55lTR09ejRX4wiCQFu3bmXB1eXLl6dnz56J7K3qyTy2ZCZbFC9enK5fvy61WxwNhgshkeBC6H8IgqBQ9K1ly5YUEhIitVsKCIJAS5YsYT4OHjyYF2EUiWPHjlHBggVZgb/nz59L7ZLGcP78eTIzM2PLiGK0xnj48CETpQULFqT9+/fn3VE14OnTp1SxYkUCQDo6OvTXX3/x3zAnV3AhJBJcCGUgCAKNGTOGxSesWrVKrdfx//33X9bUslOnTrzeUB4QBIEWLlzIxGXz5s0pOjpaarc0AkEQaOXKley72LBhQwoLCxNt/IiICGratKnWzYJ+/vyZXF1d2X79+uuvPBORk2O4EBIJLoQyDuaTJk1iV2iaEox87Ngxtnzw+++/5+vPMLckJiZSr1692Alp7Nix/Oo8myQnJ9OAAQPYe+fq6qqUOkDp6ek0ffp0hSKWKSkpotuRgn379rHaVNbW1vTw4UOpXeJoEFwIiQQXQkSzZs1iB9mtW7dK7U6OuHbtGpmYmLBeVzwAM/uEhIRQ3bp1CQDp6enR5s2bpXZJY4iKiqIGDRqwGdR//vlH6TM1bm5uLBW9adOmWnPMev36NVWtWpUAUIECBXIdW8XJf2itEFq/fj2VKlWKDA0NycnJidzd3b/73K1bt5KzszOZm5uTubk5NWnS5IfPz4r8LoQWLFjARNC6deukdidXPH78mKysrAgANWrUiNe5yQaenp6sYGXhwoXp2rVrUrukMURGRrI0dzMzM7p48aLKbJ87d46MjY0JANWoUYOCg4NVZluZxMXFKRRsXbJkiVYsAXKUi1YKoYMHD5KBgQG5ubmRj48PDRkyhMzNzb+75t6rVy/asGEDeXl5ka+vLw0YMIDMzMzo48eP2baZn4XQ8uXL2YFnxYoVUruTJ3x8fNgJYs6cOVK7o9Z8GRRdsWJFev36tdQuaQxhYWFs9sLKykqSuloeHh5UtGhRAkClSpUiX19flfugDNLS0mjs2LHsmDRw4ECtWQLkKAetFEJOTk40atQo9r9cLqfixYvTkiVLsvX69PR0MjEx+WGMS3JyMsXGxrItMDAwXwqhtWvXsgPOwoULpXZHFPbu3cvinLShMq/YCIJAixYtYp97ixYteFB0DggODma9wWxsbMjHx0cyX968ecNS9S0sLLSq2OW6detY8Pnvv/9Onz59ktoljpqidUIoJSWFdHV16fjx4wr39+vXj9q3b5+tMeLi4sjIyOiHTf7mzJnDTgRfbvlJCG3ZsoXt96xZs6R2R1QGDx7MAi/VLfVfSuRyOY0aNYoHReeSjx8/UoUKFQgA2dra0suXL6V2icLDw1mMl5GREf33339SuyQa586dY7F/FSpUoFevXkntEkcN0TohFBQURADo3r17CvdPnjyZnJycsjXGiBEjqEyZMj9Mpc7vM0I7d+5kDR4nTZqkdevwiYmJbOmCxwtlkJKSQt27d2ezZWvXrpXaJY0iICCAypYty2oE+fv7S+0SIyEhgdq1a8c+2w0bNkjtkmh4e3uTnZ0dm/W6efOm1C5x1AwuhL5iyZIlVLhwYXr69GmO7OanGKFDhw6xKecxY8ZonQjKxM/Pj8cL/T/x8fGs5YO+vj4dOHBAapc0irdv37I+Wfb29gqd49WFtLQ0hUKos2bN0prfdkhICDk5ObHv7+7du6V2iaNGaJ0QysvS2PLly8nMzCxXnY3zixDy8vJibTOGDh2qNQfK7/FlvNDly5eldkcSIiIi2EnE2NhYpdlN2sDr169ZZl358uXVuuDf10UxtWm2NzExkbp27cr2bdWqVVK7xFETtE4IEWUES48ePZr9L5fLydbW9ofB0n///TeZmprS/fv3c2UzPwihqKgosre3Z80O1blitJgMGTKEAFDRokW1Js04uwQEBJCDgwMBIEtLS3rw4IHULmkUvr6+VKxYMZZZpynfn/Xr1yvEgWmLGJLL5TRx4kStnPXi5B6tFEIHDx4kQ0ND2rlzJ7148YKGDh1K5ubmFBoaSkREffv2pWnTprHnL126lAwMDOjo0aMUEhLCtvj4+Gzb1HYhJJfLWX0Oe3v7fJWB8WW80O+//55v4oV8fHzYTEbJkiXpxYsXUrukUfj5+ZG1tTUBoCpVqrDjj6awdetWFgc4fPhwrbnwEQSBFi9ezMTQ6NGjtWbfOLlDK4UQUUbqpJ2dHRkYGJCTk5PClayLiwv179+f/Z+5dv/1lpO4EG0XQvPnz2dZJZ6enlK7o3K+jBf666+/pHZH6dy/f58sLCwIADk6OtKHDx+kdkmjCAwMZI1Oa9SoQREREVK7lCt27NjBxJCrq6tWXQRs3LiR7Vvv3r0pNTVVapc4EqG1QkjVaLMQOn/+PDtg7NixQ2p3JCO/xAudP3+eFUqsW7cuRUZGSu2SRhEZGcnqBDk4OGh8u5Z9+/ax5Ig+ffpoVbmE/fv3k56eHgGgdu3aUWJiotQucSSACyGR0FYh9O7dOzYzMGzYMKndkRxtjxc6duwYOzG0aNEiR8vDnIxu6PXq1WN1ggICAqR2SRQOHz7Mvhfdu3fXqtmTM2fOsAQQFxcXrTuGc34OF0IioY1CKCkpiWrVqkUA6JdfflFKR2xN48t4oTZt2kjtjqgcPHiQNePs3r07b0uQQ1JSUqhFixas75qUFaOVwYkTJ0hfX58AUKdOnbTq+3Hz5k0yNTUlAFS7dm2Nn8Xj5AwuhERCG4XQoEGDWLaQtlzZisGLFy/YCeHMmTNSuyMKu3fvZssf/fr106pYEFUgl8upZ8+eBIAKFiyY6+xTdefs2bNkaGhIAKht27Y/LDqraTx+/JiKFCnCMvzUucwBR1y4EBIJbRNC//77L4uHuXTpktTuqB2TJ09mdWE0/cp4+/btLAZs8ODBPIMmhwiCQGPGjCEApKenR+fPn5faJaVy8eJFtpTUsmVLrZop9vX1ZUHupUqVUqvq3xzlwYWQSGiTEHr06BG76lu0aJHU7qglsbGxLDV62bJlUruTazZt2sSyJEeOHMlFUC74sgDhvn37pHZHJVy7do0F1Ldv316rYoYCAgIU+sHx/mTaDxdCIqEtQigyMpKVE2jfvj0/Mf6AHTt2EAAyMTHRyMasa9asYSfw8ePH88JyuWDz5s3sPVyzZo3U7qiUq1evspmhrl27alU2WUhICMv8K1asGPn6+krtEkeJcCEkEtoghORyObVs2ZIAUNmyZSk6Olpql9QauVzOWk8MGDBAandyxPLly9kJfMqUKVwE5YIjR46wJcVZs2ZJ7Y4knD9/ngwMDFhqvTbFloWFhVGVKlUIAFlbW9Pz58+ldomjJLgQEgltEEKZZfWNjIxy3HQ2v/LgwQMmKNzd3aV2J1t8uZQze/ZsLoJywbVr15gAGDZsWL5+D0+cOMFS67UtxiwiIoKqV69OAMjKyoofF7UULoREQtOF0KtXr6hAgQIEgNauXSu1OxpF//79CQA5OTmp9UlAEAT666+/mAhasGCB1C5pJL6+vmRubk4AqHPnzlo1C5JbDh06xLIOR48erVXC8NOnT6yMiKWlJXl5eUntEkdkuBASCU0WQunp6VS/fn0CQI0bN1brk7k6EhwcTIUKFSIAtHPnTqnd+S6zZ89mIujvv/+W2h2NJDw8nDUebtCggValj+eVXbt2saXCyZMna5UYioqKol9++YXViHr06JHULnFEhAshkdBkIbRkyRICQKamprxeUC75+++/CQDZ2NhQXFyc1O58w9y5c5kIWrVqldTuaCRJSUnsgqFMmTK86F4WbNmyhX3PtK0nX0xMDPv8zczMFPpXcjQbLoREQllCyM/Pj27evEnu7u709OlTevnyJb1//55CQ0MpJiaGkpOT83Tl5e3tzYoD5uc+YnklOTmZypcvz4KP1YkFCxawk9PKlSuldkcjkcvl1L17dwJA5ubmPIvoB3yZjbhkyRKp3RGVuLg4cnZ2Ztmid+/eldoljghwISQSyhJCw4cPZweVH20FChSgmjVr0rBhw8jNzY2eP3/+0yWulJQUFgjYvn17rZrKloIzZ84QANLX11eb2iOLFy9m3xFNrnckNTNnzmQFE69duya1O2rP0qVL2fdu9erVUrsjKvHx8fT7778TACpUqBDdvn1bapc4eYQLIZFQlhD666+/qGLFilS6dGmysbEhc3NzVrvjZ5uJiQk1btyYpk2bRsePH6egoCCFsTMP7paWlhQaGiqq3/mVVq1asfYDUpO5XAeAFi9eLLU7Goubmxt7H/msafaZM2cOe9+2bdsmtTuikpCQQE2aNCEAZGxszMWQhsOFkEioOkZIEARKTk6mmJgYCgsLo9evX9ORI0do0qRJ9Ntvv7Gqr19vlStXpmXLltGZM2dYlseRI0dU4nN+wM/Pj6USnzt3TjI/VqxYwbPDRODatWvs85w5c6bU7mgUgiCwVjQymYyOHj0qtUuikpiYSE2bNmVi6NatW1K7xMklXAiJhLoFS6elpdHTp09p69atNHjwYKpatSoTPl9uDRs2pMTERKnd1SomTZpEAKhChQqS9CFbvXo1+3znzp2rcvvawpdp8t27d+fZlLlAEAQaPHgwASADAwOt61vIxZB2wIWQSKibEMqK6Oho2rp1KxUrVkxBDJmZmdHQoUPp7t27PE5IBL7sQ7ZixQqV2l67dq1CsURO7vgyTb5+/fo8TT4PpKenU9euXZlYuH//vtQuiUpiYiI1a9aM7d/NmzeldomTQ7gQEglNEEJEGVP9mSfKnj17kp2dnYIoKl++PC1dulQtU8A1icy4EjMzM4qJiVGJzQ0bNrDPccaMGVzU5pKkpCRq0KABASB7e3ueJi8CycnJ1Lx5c1aHx9vbW2qXRIWLIc2GCyGR0AQhFBsbyxqqDhs2jIgy0oKvXbtG/fr1I2NjY3YitbCwoMWLF3NBlEvkcjlVrlyZANDChQuVbu/L+i28d1juEQSBevbsydLkX7x4IbVLWsPnz59ZHR4bGxt68+aN1C6JSmJiIhN7XAxpFlwIiYQmCCFXV1dWDC4+Pv6bx+Pj48nNzY0cHBzYSdXS0pKWLFmS5fM5P2b//v3sPVTm+7djxw72eU2cOJGLoDyQWXNJT0+Prl69KrU7WkdUVBRVrVqVzbZ9ncmq6XAxpJlwISQS6i6ELly4QABIR0fnpwF96enptGfPHlYgEAAVKVKE/v77b/r8+bOKPNZ80tPT2XuorBo++/btY20Nxo4dy0VQHjh69Cj7vm/ZskVqd7SW4OBgKlu2LAGgKlWq0KdPn6R2SVQSExOpRYsWBIAKFizIxZAGwIWQSKizEPr8+TOVLl2aAND48eOz/bq0tDTavXs3lStXjp0grKysaPny5VwQZZPM2ZqiRYtSQkKCqGMfOXKEdHV12VInF0G5x9PTk5WcGDt2rNTuaD1v375lSRt169bVuhnnpKQkBTF048YNqV3i/AAuhERCnYXQxIkTCQCVKlUqVwectLQ02rlzJ7uKA0DW1ta0c+dOfvL9CampqUyE/vPPP6KNe+LECVbfZuDAgTy1Ow8EBwdTiRIlCAC1aNGC0tLSpHYpX/D8+XOysLAgANS0aVNKTk6W2iVR+VoM8Yrk6gsXQiKhrkLo8ePHrH5QXgv8paWl0Y4dO6hMmTJMEDk7O9PTp09F8lY7yQxkLl68uChp2OfOnWP94Xr37k3p6ekieJk/SUpKorp16xIAcnBwoOjoaKldylc8ePCAJWl07txZ677LSUlJ1LJlSwIy2iBduXJFapc4WcCFkEiooxBKS0ujmjVrslR5sUhJSaFly5axA5iuri6NHz9erfZdnUhOTmYzDhs3bszTWJcvXyZDQ0MCQF27duWzF3lAEATq1asXS+lWl/5w+Y3Lly+TgYEBAaChQ4dq3SxzUlIStW7dmgCQkZERXbx4UWqXOF/BhZBIqKMQWr58OTvIK6OX2IcPH6hLly5sdsjGxob27dundQcyMVi3bh0BIDs7u1xXm7558yYVKFCAAFCHDh0oNTVVZC/zF4sWLeIZYmrCkSNHWNC/NrYySU5Opnbt2hEAMjQ0pPPnz0vtEucLuBASCXUTQm/fvmUnTTc3N6XaunDhgkKGWaNGjcjHx0epNjWNxMREsrGxISB3DSjv3btHhQoVIgDUunVrrYunUDX//fcf+75u2rRJanc4RLR582b2mYgZT6cupKSkUIcOHVi7kbNnz0rtEuf/4UJIJNRJCAmCwGpZNGrUSCUzNMnJybRw4UIyMjJiV9mTJ0/m2WVfsHLlSlbHKSdLWg8fPiRTU1MWVMrbPeQNLy8vliE2evRoqd3hfMHChQuZGNqzZ4/U7ohOSkoKderUiYmh06dPS+0Sh7gQEg11EkJ79+5lU7Cqjnt49+4dtW/fnh3MypYtS3fu3FGpD+rK58+fqUiRIgSAdu/ena3XeHp6ssafLi4uoqfg5zdCQkKoZMmSBICaNWvGY6zUDEEQaNy4cexiShtnTVJTU1lIgb6+Pp04cUJql/I9XAiJhLoIoYiICHayXbRokWR+nD59mgUI6+jo0KRJk/hMBhEtXryYZSj9LEPm6dOnLL24QYMGvN1JHklKSmItHipUqEBRUVFSu8TJArlcTn369GGZVtp4IZWamkrdunVjgu+///6T2qV8DRdCIqEuQqh///4EgKpWrSp5MG10dDQNGDCAzQ45OjqSh4eHpD5JTWxsLBUuXJgA0MGDB7/7PB8fH7KysiIA5OTkJPn3StMRBIF69+7Neoi9fPlSapc4PyA1NZVlWpmbm2tdk1aijKzezL52enp6dOTIEaldyrdwISQS6iCELl++zGZgHjx4IJkfX3Pq1CmytrZmqfazZ8/OdeaUNjB37lzWXiCrQoh+fn7s/apVqxavbSMCPENM80hISKAGDRoQACpWrBi9fftWapdEJy0tjQl0mUyW7SVzjrhwISQSUguhhIQEVuhwzJgxkvjwIyIjI6lHjx5sdqhGjRr5thBjVFQUmZiYEIBvpsRfv35NxYsXJwBUvXp1revDJAVf9hDbvHmz1O5wckBUVBRVqVKFxRsqowyI1KSnp9PAgQPZRSz/jqoeLoREQmohNHXqVAJAJUqUUOtYkkOHDpGlpSULFFy8eHG+DFidMWMGAaCaNWuyrL53796xQN7KlStTeHi4xF5qPo8fP2ZlJHgPMc0kKCiItampUaMGxcTESO2S6Mjlcho9ejQT7KtWrZLapXwFF0IiIaUQevLkCWu+eerUKZXbzymhoaGsnkZmIPC7d++kdkulREREsMrcZ86coYCAAHawr1ixolZe+aqaoKAgsrW15T3EtIDXr19T0aJFCQD9+uuvWpk9KQgCu6AFQPPnz+fFaVUEF0IiIZUQksvlrFdSly5dVGo7LwiCQLt372b1cczMzOjw4cNSu6VSJk2axGaFMhvalitXjoKCgqR2TeNJSEigOnXqsCB9bZxFyG94eXmx40WbNm0kTwZRBoIg0IIFC5gYmjJlChdDKoALIZGQSght2rSJAJCpqalGnkDfvn1L9erVYz/8IUOGaOXVXlaEhISwvmEAyN7enj58+CC1WxqPXC5nqcmWlpbk7+8vtUsckbh16xYr2tq7d+8skw20gVWrVrHjwqhRo7R2P9UFLoREQgohFBoaSmZmZgSA1q1bpzK7YpOamkozZsxgvYYcHR3zRSB1aGgoK5ZYsGDBfLc8qCzmzJnDYtBu3rwptTsckTlz5gzp6emxxBBtnTHZsmULOyYOGDDgp3XHOLknu+dvHSIicL5LXFwczMzMEBsbC1NTU5XY7N27N/bv3486dergwYMH0NXVVYldZXH16lX07dsXISEhMDQ0xMqVKzFy5Ejo6OhI7ZrohIWFoVGjRvD19QUAyGQyvHv3DnZ2dhJ7ptkcPHgQPXv2BABs374drq6uEnvEUQb79u1Dnz59AABz5szB3LlzpXVISezduxcDBgyAXC5Ht27dsHfvXujr60vtlqjEx8fD398f4eHh3zyWleyoXLkySpYsKaoP2T5/q0KVaTKqnhHKrBkkk8no0aNHKrGpCsLDw6lNmzZsWrhDhw4UGRkptVuiEhoaSo6OjgSAbG1tWYzX1KlTpXZNo3F3d2fLJpMmTZLaHY6SWbduHTtOrFmzRmp3lMaxY8dIX1+fAFDbtm01MnQgPj6evLy86PDhw7Ro0SIaOHAgOTs7s3ppOdm2bNkiun98aUwkVCmEkpKSWLd3bUwJFgSB/vnnHzIwMGBiQVuWOL4WQa9fv6YTJ04QALKwsNDIg5w6EBAQQDY2NuxkwZcR8gfz5s1jJ0htbNKayfnz55nIb9CggdrXF5PL5XT37l2aNGkSlStX7qfixsrKiqpXr041a9b8ZqtVq5bCduzYMdH95UJIJFQphDJjIIoXL67VrRc8PT2pQoUKbOZr8eLFGh00GBIS8o0IIsooqJaZOv/vv/9K7KXmER0dTZUrV2atZdS5jhZHXARBoLFjx7Kq9drczf327dssptDR0VHtEitSUlLo4sWLNHz4cHZR8uVWpEgRqlevHvXt25fmz59PBw4coEePHqlFRicXQiKhKiHk5+fHZkryQ2+a+Ph46tevH/sxtW7dWiOXyr4ngjJZsWIFa7uhrcGfyiAlJYUaN27MLgzU7eTAUT5fNmk1MjLSmtnjrHj27BmrjWVra0vPnz+X1J/Pnz/TsWPHqE+fPkykZW6mpqbUq1cvOnLkiNrPYGmtEFq/fj2VKlWKDA0NycnJidzd3b/73OfPn9Mff/xBpUqVIgC0evXqHNtThRASBIEd9Fu1apVvTpiCIND27dvZ1HDJkiXp/v37UruVbX4mgogyZjUKFixIAOjatWsSeKl5CILAmgwXKlSIvLy8pHaJIxGpqanUrl07AkAmJiZa3dw5ICCAHU/Mzc3pzp07KvchOjqaZs2aRYUKFVIQP9bW1jR06FA6f/68RvWT1EohdPDgQTIwMCA3Nzfy8fGhIUOGkLm5OYWFhWX5/IcPH9KkSZPowIEDZGNjo7ZCaM+ePeyqRxsbEP6MJ0+esNgoPT09Wr16tdqLweyIoExGjBhBAKhjx44q9FBzyWxeq6urS+fOnZPaHY7EJCYm0u+//87i7Z49eya1S0rj06dPVL9+fXY+OHHihErsxsfH08KFCxVmf+zt7WnChAl0+/ZtjY3N00oh5OTkRKNGjWL/y+VyKl68OC1ZsuSnry1VqpRaCqGoqCiysrIiALR48WKl2NAEYmNjqWvXruxH+Mcff6jFGnNW5EQEERG9ePGCxUPlR6GbE3bu3KnULBKOZhIXF8eyMK2trenVq1dSu6Q0EhISqG3btuyYsXXrVqXZSkxMpJUrV1KRIkXY765y5cr033//qf3FaHbQOiGUkpJCurq6dPz4cYX7+/XrR+3bt//p67MrhJKTkyk2NpZtgYGBShVCQ4cOJQBUqVIljZpyVAaCINC6detYSmnZsmXJ09NTarcUCAoKypEIyqR58+YEgCZOnKhkDzWXK1eusIJ606ZNk9odjpoRFRVF1atXZ8vo79+/l9olpZGWlkaurq5MnIjdnywlJYU2bNhAxYoVYzbKly9P+/fv19jZn6zQOiEUFBREAOjevXsK90+ePJmcnJx++vrsCqHMzK2vN2UIobt377Lxb926Jfr4moq7uzuL6zI0NKQtW7aoxdXJ+/fvWe+wnIggooyquUBG77X4+HgleqmZPH/+nFVT79Gjh0ZnEXKUR1hYGFWsWJFdKAUHB0vtktIQBIFmzpzJzhEjRozIc4Ph9PR0cnNzY8dXAGRnZ0fbt2/XyubFXAh9hbrNCKWmplLVqlUJALm6uoo6tjbw6dMnNj0MgPr370+JiYmS+fP69WsqWbIkAaDSpUvTmzdvcvR6uVzO6m5s2rRJSV5qJsHBwWRnZ0cAyNnZmZKSkqR2iaPGfPz4kezt7dkyTkREhNQuKZV169axlhwtW7bMdchAUFAQi7UCQMWKFaMNGzZQcnKyyB6rD1onhFS1NPY1yooRWr58OQEZzSO1/YecW+RyOS1dupRkMhkBoBo1auRYgIiBj48Pm0KuUKFCrlO516xZw2qFqMMMlzoQHx9PtWrVYu+tJpZQ4Kiet2/fsnTzWrVqqW08oVgcO3aMChQowI4fOW04fObMGRYHZGxsTMuXL88XRV61TggRZQRLjx49mv0vl8vJ1tZWI4OlBw4cSABox44doo6rjVy9epUFlJubm6u0uJqnpyc7gFSpUoVCQ0NzPVZsbCxLS7106ZKIXmomaWlprO2KlZWVJCKXo7n4+vqy40KDBg3o8+fPUrukVB49ekTFixdnF9DZqauUnJxMf/75J5sFqlmzJr18+VIF3qoHWimEDh48SIaGhrRz50568eIFDR06lMzNzdnJqW/fvgpBlikpKeTl5UVeXl5UrFgxmjRpEnl5eeUotkOZWWN37tzhMwPZJDAwkOrVq8d+0LNmzVJ6UN+DBw9YOmnt2rVFma0YM2YMARntIvIzcrmcXQwYGRlpVP0ojvrg5eXFfqNNmjTR+mXVoKAgqlOnDgEgfX192r59+3ef+/r1a6pduzY7Zo4fP16rl8GyQiuFEFHGeqmdnR0ZGBiQk5MTPXjwgD3m4uJC/fv3Z/+/e/cuy8BnFxeXbNtTddNVzvdJSUmh0aNHs8+xefPmSltWvHHjBpu9adCggWhT7y9fviQApKOjkyNBrk0IgsCuUrNa7uZwcsL9+/fZb7Vt27Zan32bkJBA3bp1Y8fBSZMmfXNRuGfPHvaeWFpaanWLkh+htUJI1XAhpH7s3buXVWu2s7Ojhw8fijr+hQsX2Hp848aNRc/yat26NQGgcePGiTquprBgwQJ2EN+5c6fU7nC0gOvXr7MK9e3bt9d6MSQIgkKGc9u2bSkuLo7i4+NZVfbMi/6PHz9K7a5kcCEkElwIqSfe3t6sGrWBgYFoKfYnTpxgPd9at26tlEy1CxcuEJDRMiC/NRJdv349O0j/888/UrvD0SIuXryYr8QQEdGBAwfYPpcrV45l08lkMpo3b55W1QTKDVwIiQQXQupLTEwMderUiZ1YXV1d8xQjsHfvXlbQ748//lDagVQul5ODgwMBoHXr1inFhjqyd+9e9lnNmTNHanc4Wkh+FEPu7u5kaWnJfltFihThden+n+yev2XgcDQUMzMzHDt2DH///TdkMhnc3Nzg7OyMgICAHI+1cuVK9OnTB+np6ejduzcOHToEAwMDJXgNyGQyjB07FgCwdu1aCIKgFDvqxOnTp9G/f38AwJgxYzBnzhyJPeJoI82bN8fJkydhaGiIU6dOoVu3bkhNTZXaLaWSmJiIxMRE9n9UVBRu376dL44roqEiYaax8BkhzeDKlSvsqsjS0pIuX76crdfJ5XKaNGmSQmaFKqoax8fHk6mpKQGg8+fPK92elNy4cYNdpfft25dXjeYonYsXL5KhoSEBoA4dOmjtzNC5c+fYb6tRo0bUp08fdixr1apVvq/LxZfGRIILIc3h/fv3LF1UJpPR0qVLfxg3lJqaqnDg+Pvvv1VazmDcuHEEgDp16qQym6rm0aNHZGJiwpYqUlNTpXaJk0/QdjF07Ngx1pexXbt2LCxg+/btTByVLFkyX5em4EJIJLgQ0iySkpJYfRoA1Llz5ywDkuPj46lFixYshVuK7KXnz58TANLT06OQkBCV21c2vr6+rBhlo0aNtL7GC0f9uHDhAhNDHTt21BoxtGfPHtLV1SUA1L17928uMJ48ecKSSfT19emff/7JlzXruBASCS6ENA9BEGjz5s3saqlixYrk6+vLHg8PD6dffvmFAFDBggXp7Nmzkvlav359ApCt6uiaxPv376lEiRIEgOrUqZPvsuM46oO2iaEtW7aw3mMDBgz4bmZYbGwsdenShV0UdunSJd+dx7gQEgkuhDSX+/fvs35EhQoVomPHjtG7d+/YlZKFhYXk08Y7duwgAFSmTBmtiZ3x9/dnTVQdHR15Lz2O5Jw/f15BDGlqheVVq1YxYTNq1KifHjMEQaA1a9awi8Jy5crRkydPVOSt9HAhJBJcCGk2oaGh5OLiwg4emdVW7ezsFGaJpOLz588saPrKlStSu5Nn/Pz8mPisUKFCvi7mxlEvvhRDLVq00KjeZIIgKBQinTJlSo6Wuh48eMAuToyMjGjDhg35YqmMCyGR4EJI80lNTVWYIi5UqBA9e/ZMarcYI0eOJADUrVs3qV3JE8+fPydra2sCQJUqVdLKuCeOZnPp0iVWlb5hw4YUHR0ttUvZYtasWez4NX/+/FyJmMjISFbVHgA1a9aMPnz4oARv1QcuhESCCyHNZ8uWLaxQokwmIwBUunRp8vT0lNo1IspoHJkZ1BgeHi61O7niyZMnLDC6evXqGrsfHO3n7t27rFFrjRo1KCwsTGqXfsiWLVuYeFm5cmWexpLL5bR27VrWQsjU1JR27typtbNDXAiJBBdCmkt6ejqNHz+eHUR69uxJ7u7uVKZMGTZFvGfPHqndJCJiwdvLly+X2pUc4+HhQYULF2aB0Z8+fZLaJQ7nhzx58oSKFi3KlnDVdWbk8uXLLDts3rx5oo378uVLqlevHjs2dujQgUJDQ0UbX13gQkgkuBDSTGJjY6lVq1bsh75gwQJ21RMVFaXw2JgxYySvb7N161YCQA4ODhp1dXbv3j0W41S/fn2KiYmR2iUOJ1u8fPmSSpYsyWIGX758KbVLCvj4+JCZmRkBoD59+oh+XEhLS6PFixezQGpLS0s6cuSIqDakhgshkeBCSPN4+/YtVa5cmQBQgQIF6PDhw988Jz09nWbPns3E0K+//ippTEtcXBwL5L5586ZkfuSEmzdvMp9/++03niLP0TgCAgKoQoUKBICKFi2qNhlVYWFhVLp0aQJAzs7OSs1ye/r0KVWvXp0dC3v16qU1s7pcCIkEF0Kaxe3bt1msSvHixcnDw+OHzz9x4gSrfFy8eHG6d++eijz9liFDhhAA6t27t2Q+ZJcrV66wOIOmTZtSQkKC1C5xOLkiLCyMatSoQQDI3Nyc7t69K6k/iYmJbNmqbNmyKik/kZKSQjNnzmQxlMWKFaOTJ08q3a6y4UJIJLgQ0hx27dpFBgYGBIBq1aqV7dRtPz8/cnR0ZAHLmzdvlmR5ysPDgwCQoaGhWl+RnTlzhpXwb9WqFa8YzdF4oqOjqWHDhqzI6qVLlyTxQy6XU/fu3Zko8/PzU6n9Bw8esBmyzNYdb968UakPYsKFkEhwIaT+yOVymjZtmkJbjZzOUMTFxVHnzp3ZGK6urio/wQuCwK5M//nnH5Xazi7r169nV40dOnTQ2MJ0HM7XJCQksLY7BgYGdODAAZX7kLlcr6enR9euXVO5faKM92HKlCks09bQ0JDmzp1LiYmJoowfHx9Pz58/pzNnztD69etp0qRJ1LVrV7pz544o438JF0IiwYWQehMVFUVt27ZlAmbWrFm5rtAsCAItXbqUnejr1KlDAQEBInv8YzZs2EAAqHLlymoVNJ2ens6axAKggQMHSh5gzuGITUpKCnXt2pV9zxctWqSy3+GuXbuYXTc3N5XY/BEvXrygJk2aMJ/s7e3p9OnT332+IAj06dMn8vHxoatXr9L+/ftp1apVNHHiROrcuTPVrl2bLC0t2Xhfb+vXrxd9H7gQEgkuhNQXDw8PFlBoaGhIe/fuFWXcS5cusR9skSJF6OrVq6KMmx1iYmJY7I3UsQqZxMXFUZs2bdgBa8mSJWol0jgcMUlPT6eJEycqiH5l9ye7efMmy96aPn26Um3lhKSkJNq4cSMrNZBZLHX48OHk6upKbdq0oTp16lCJEiWY/9nZChcuTDVr1qSOHTvS+PHj6Z9//lFKkdvsnr91iIjA+S5xcXEwMzNDbGwsTE1NpXaHA4CIsHnzZowfPx6pqakoW7Ysjhw5gpo1a4pm4/379+jcuTM8PT0hk8nw999/Y+LEidDR0RHNxvcYOHAgdu7ciQEDBmDHjh1Kt/cjAgMD0a5dOzx9+hRGRkbYs2cPunTpIqlPHI4q2LRpE0aPHg1BENC4cWMcO3YM5ubmotvx9/dH3bp1ERUVhS5duuDQoUOQyWSi28mEiPDp0yeEhIQgJCQEoaGh7PaXW3h4OOLi4nI8fuHChWFjYwMbGxtYW1ujePHiKF26NEqVKsX+mpmZKWHPviXb52/RJZiWwWeE1Iv4+Hjq2bMnu7Lo2LGj0srkJyYmUv/+/Zmtbt26UXx8vFJsfcm9e/dY6r+ULQAePXpExYoVIwBkbW1N7u7ukvnC4UjB2bNnWYkIR0dHevfunajjx8XFseBkJycnUeJwMpeoHj16RIcPH6a///6bhg8fTs2bN6fy5cuzhJLsbnp6elSsWDGqVq0a1a9fn7XRwf/XHho3bhzdu3ePPnz4oHYxg3xpTCS4EFIfnj9/ThUrViQApKurSytXrlT6Eo0gCLRhwwYWOFi5cmV69eqV0m1m1kHasGGDUm19j//++48t0VWtWpXev38viR8cjtQ8efKENRIuWrSoqBcEffv2JQBUsmTJHNcxEwSB3r9/T6dPn6bFixdTz549qUaNGqzA6c82S0tLqlKlCjVr1oz69etHU6dOpX/++YcOHTpEN2/eJD8/P4qKivrmGCsIAh06dIi9JwCoYsWKdPjw4VzHZyoLLoREggsh9WDPnj2sWaKtra1SMgx+xN27d9nsiKmpKZ06dUqp9tasWUNARt8uVcbjCIJAy5YtIx0dHQJALVu25N99Tr7n48ePLKPTyMiIjh07lucx9+zZQ0BG/8OfHc/i4uLo1q1btGHDBho2bBg1aNDgp4LHxsaG6tevT7169aJZs2bR9u3b6dq1a/Tu3TtRZm4SEhJo+fLlZGFhwWzWrFmTzp49qzYxhFwIiQQXQtKSlJREQ4cOZT+0Zs2aSdbQMzg4mNUawf9nqKWnpyvF1qdPn8jQ0JAA0MOHD5Vi42sSEhJo4MCBbP9GjRpFaWlpKrHN4ag7XyYN6Ojo0IoVK3J9wvf392dLbl/3EMuc6dm3bx+NHDmSqlevzjJZv9709fWpatWq1KtXL1qyZAmdOnWKfHx8VFrgNDY2lubOncsK0wKghg0b0o0bN1Tmw49840JIBLgQkg5vb29W+l1HR4fmzJmjNOGRXVJSUmjMmDHsB9+8eXOKjIxUiq0+ffoQABoyZIhSxv+SJ0+esKKSMpmM1q5dq3SbHI6mkZaWRqNGjWK//wEDBuQ4riclJYU1Wf71118pKSmJPDw86J9//qGuXbsqLDl9udnZ2VHbtm1p+vTptH//fnr27JnSs9lyQmRkJE2ePJkVW828cJUytpALIZHgQkj1pKen09KlS1lQX5EiRejixYtSu6XAnj17WAxNqVKl6NGjR6LbuHnzJgEgY2NjpfXxEgSB1qxZw97rYsWK0ZUrV5Rii8PRBgRBoNWrV7NZmho1auSo+vLUqVMJyKhg3aJFC4WZlC8DlJ2cnOjPP/+kI0eOUHBwsBL3SFyCgoJo5MiRCun0v//+O506dUrlMURcCIkEF0Kq5fXr19SgQQP2A2rXrp2kzVB/xNOnT6ls2bIEZNQx2r59u6jjC4JADg4OBIC2bt0q6thEROHh4Qr1gdq1a6eSvkYcjjZw5coVsrKyIiCjHcaP4gZTUlLo2rVr1K1btyxne8zNzal169a0aNEiunHjhlb07nv79i0NGDCAJZoAoAoVKtCmTZtUtn9cCIkEF0KqQS6X0/r161lAtImJCbm5ualN0N33iI6Opnbt2rEf+pAhQ0RtzbF8+XICQPXr1xdtTKKMopE2NjZMxK1fv17t32sOR90IDAyk+vXrs9//jBkz2PJ9eHg4bd26lTp27Mjigb7c6tevT/PnzycPDw+1y7YSk8DAQJoyZQqZmZmxfbewsKCZM2cq/SKXCyGR4EJI+Xz48IGaNm3KfiSNGjXSqHRtuVxOCxcuZJlWYrbmCAkJIV1dXQJAvr6+eR4vJSWFJk+ezN7rypUrk7e3twiecjj5k6/jBh0dHcnFxYX9bjO3zOVnW1tb+vDhg9Ruq5z4+Hhas2YN2dvbK7wnAwYMUNoxiAshkeBCSHkIgkC7du1iVwoFChSgtWvXauzV0YULF1gqqYWFBR09elSUflyZvdSmTZuWp3FevXpFderUYQehESNGiNZIkcPJr0RFRZGbmxtVq1btm1mfWrVq0fz582nSpEls9vXp06dSuywp6enpdOzYMYUQiKyy58Qgu+dvPXA4EhAYGIixY8fixIkTAIC6deti9+7dqFChgrSOZYOYmBi8e/cOQUFBCAoKwsePH9ltS0tLxMbGsnL5AGBkZAQzMzOYmprC1NRU4XbRokXRoEED/Pbbb7C0tMzS3sCBA3HmzBns3r0bCxcuhK6ubo78TU5OxsqVK7F48WIkJibCwsIC27dvR8eOHfP6VnA4+ZL4+HgcP34chw8fxqVLl5CWlsYeMzQ0REpKCvT19eHq6gpnZ2fUrVsXALB8+XJUq1ZNKrdVSlxcHIKCghAeHo6oqCi2RUdHIyoqCra2tqhTpw78/f0RExOj1LYiP4MLIY5KSU1NxapVq7BgwQIkJiZCX18fc+fOxZQpU6Cnp35fRyLCu3fvcPfuXdy9exd37tyBj49PjsZITk5GcnIywsLCfvi8KlWq4LfffoOLiwt+++032NjYAADatm0LS0tLBAcH4/Lly2jZsmW2bZ85cwbjx4/HmzdvAACNGzfGrl27UKJEiRztA4eT3yEi3LlzB25ubjhy5AgSEhLYY1WrVkW3bt3QtWtXFCtWDK6urjh27BhGjx4NExMTpKSkoG3bthg9erSEeyAecXFxePPmDT58+PDNxWDmFh8fn6MxVdV/LCt409WfwJuuiselS5cwZswYvHr1CgDg7OyMDRs2qNUVUnp6Op4+fYo7d+4w4RMSEvLN84oWLYoSJUrA1tYWtra2Crcz/z98+DBGjx6NlJQU2NjYYO7cuShRogTi4uIQFxeH2NhYvHv3Drdu3cKLFy++sVGhQgW4uLjg999/x507d7Bp0yZ069YNhw4d+ul+vH79GuPHj8e5c+cAAMWLF8fy5cvRs2dPlTSO5XC0hY8fP2L37t3YsWMH/P392f3ly5dH79690bVrV1SqVEnhNUSE1atXY9KkSSAiyGQy7NmzB7169VK1+7kmOjoa/v7+WW7h4eHZGsPMzAw2NjawtLRE4cKFYWFhAQsLiyxvlytXDkWKFBF1H7J7/uZC6CdwIZR3Pnz4gAkTJuDYsWMAAGtrayxfvhx9+vRRi5NybGwszp07hxMnTuD8+fPfXMno6+ujVq1acHZ2RsOGDdGwYUMULVo0W2M/ffoUXbp0gb+/P/T19fHPP/9gxIgR3+x3REQEbt26hZs3b+LWrVvw9vbGlz9NExMTxMfHw8DAAKGhoShcuHCW9hISErBo0SKsXLkSqamp0NfXx4QJEzBz5kyYmJjk8J3hcPInKSkpOHXqFNzc3HDp0iUIggAAMDY2Rvfu3eHq6ooGDRr88Ph19uxZtG3bVuE+V1dXrF69Wq3OJZ8+fYKPjw+eP3+u8PfTp08/fJ2VlRVKlSr1wwvCQoUKqWgvsoZ3nxcJHiyde5KTk2nx4sUsJV4mk9G4ceMoJiZGatcoJCSENm/eTC1btlQo/AWAzMzMWE2Pmzdv5jmgOCYmhv744w82fs+ePX/axf7Tp0908uRJmjhxIqtVlLk5OTmRl5eXwvMFQaCDBw9SiRIl2PNatGhBfn5+efKdw8lPvHz5kv7880+F/ln4/wrQO3bs+OnvNpO4uDj2Wxw7dixNmDCBZZWWKlWKrl27puQ9+Zbk5GR6/Pgxbdu2jcaPH09NmzZlJTS+txUrVox+/fVXGjhwIC1atIgOHTpEjx8/VotjeHbgWWMiwYVQ7rh48SJVqFCB/aCcnZ0lz5Z4/fo1LVu2jBo0aMAOSplbxYoVadq0aeTu7q6UrDVBEGjlypUspdbR0ZF8fHyy9dr09HQ6fvw4lSlTRsHnRo0a0alTp+jatWvk4uLC7re3t6cTJ07wukAcTjZIS0uj48ePU7NmzRR+X7a2tjRjxgx69epVjsfMTKcvU6YMKx5448YNKl26NBt/3LhxSsvaTEpKoocPH9KmTZto8ODBVKtWrW8u+L7cSpcuTW3atKGpU6fSnj17yNPTkz5//qwU31QJF0IiwYVQznjw4IHCAcXa2pp2794t2Un548ePtHLlSqpVq9Y3P34nJydavHixKPV5ssvt27epePHiBGS0zti3b1+2XxseHs6E1NdCDsjoij1v3jyeEs/hZIPQ0FBauHAhlSxZkv2GdHR0qE2bNnTmzJlc9zW8f/8++31eunRJ4bG4uDiFJtIODg557sWVnp5O3t7etGXLFnJ1daXq1asrVHP+citcuDA1btyY/vzzT9q2bRs9ePBAae171AEuhESCC6Hs4eXlpVBhWU9PT7JlsOjoaNq2bRs1atRIQTDo6upS06ZNaf369RQYGKhyvzIJCwujJk2aML+GDh2abfGS+R5/WaU1cytVqhRdv35duc5zOBqMIAh069Yt6tGjh8IMSZEiRWjq1Kn09u3bPI2fkpJCVapUIQDUr1+/7z7v3LlzVKxYMXZcmj59erZnYKKjo+nChQs0Z84catasGZmammYpeiwtLal58+Y0ffp0OnLkCL19+zbfzRJzISQSXAj9mBcvXlDXrl3Zj08mk9HAgQPzfEDJKUlJSXTkyBHq1KkTq+CauTVs2JA2btxI4eHhKvXpR6Snp9OsWbOYUKtatSq9ePHiu8+PjY2l5cuXK8QumJub06RJk2jBggVslgnIaPMRHR2tup3hcNScpKQk2r59+zdFD+vXr0979uwRrS3OwoULmbD6Wd++T58+Uc+ePZkvJUuWpEOHDn0jVj58+EC7du2iIUOGUOXKlbOcDTY2NqbGjRvTzJkz6fjx4xQQEJDvRE9WcCEkElwIZY2/vz/17duXdWDW0dGhnj17qjQ4Ny0tjS5dukQDBgz45qqoSpUqtGTJEnr37p3K/MkNly5doqJFixKQ0Y16586dCo+/ffuWpk+frjADlPmeHzp0iD0vJiaGRowYoRDk+N9//6l6dzgctSIoKIhmzZrFmqNm/s6GDBlCnp6eotp6+fIlGRoaEgDau3dvtl93/PhxKlWqlII4W7JkCQ0aNOibRInMrWzZstSnTx/auHEjeXl5UVpamqj7oi1wISQSXAgp4u/vT0OGDFHoo9OpUyeV9asSBIHu379PY8eOJWtra4WDQ8mSJWnq1Kka1zsrJCREYamsa9eutGzZMqpXr57C/jk4OND27dtp7NixBID++OOPb8a6deuWQpB6586dld7YkMNRNzw8PKh3794Ky192dna0bNkyioqKEt2eXC5nCQstWrTI0WxMWFgY7dq1i2rXrp3lbI9MJiMnJyeaPHkyHT9+nEJDQ0X3X1vhQkgkuBDKEB9Xrlyhdu3aKfxQW7VqRR4eHirxwcfHh2bOnPlN5pSlpSUNHz6cbt26pbE9yoiIIiMjqVOnTlkeBJs0aULHjx9n++ft7U0ASF9fP8vp96SkJJoxYwYLmDQ3N6dt27bxqXKOVpOWlkaHDx/+poeVs7MzHT16VKmzJlu3bmWzTT+bhU5PT6f79+/T7NmzqXbt2lnO+GRupqamtGbNmlwHbud3uBASifwshBISEmjr1q0s+O9LAXTnzh2l2/f19aXFixdT9erVv1kP7927N509e1aUpqZSERcXR4cPH6aOHTt+E9eUGUS5dOnSLAVM5gF0zZo13x3/yZMnCgfaxo0bk7+/vzJ3icNROTExMbRixQqys7Nj33V9fX3q27cvPXr0SOn2g4OD2dL1ypUrs3xOeHg47dmzh3r16kWWlpbf/NarV69O48ePp5MnT1J0dDRduXKFKlWqxB6vXbs23b17V+n7om1wISQS+VEIffjwgaZNm6YQmGtsbEyjRo1SagyQXC6n+/fv09SpU8nBwUHhQKGnp0ft2rWjAwcOaGx9i5iYGDpz5gxNnjyZnJycFJYXAVClSpVo4cKF9PDhQ2rTpo3CUtnXwc/r1q0jAFSjRo0f2kxLS6MVK1ZQgQIF2BXm2bNnlbiXHI5qePv2LY0fP54KFSrEfitWVlY0e/ZsCg4OVpkfXbp0YWLly1mn58+f07x586hu3brfLHmZmZlRt27daMeOHd9duk5NTaXVq1crxD+2atWK7t+/r6pd03i0VgitX7+eSpUqRYaGhuTk5PTTGgyHDx8mBwcHMjQ0pCpVquT4JJBfhFB6ejpdvXqVunXrpnCCLl26NK1cuVJpWUgpKSl04cIFGjZs2DdVTvX19ally5a0ZcsWioyMVIp9ZRIdHU2nTp2iCRMmUO3atVmQ85dbmTJlaNq0afT06VOFmR+5XE4rVqxgy1t2dnZ08+ZN9nhkZCSbRfq6ynRW+Pv7k7OzMwts//vvv/lSGUcjuXfvHnXp0kXh91SpUiXatm2baNlf2eXkyZNs9tbT05O8vb1p9uzZ5OjomOWsz/Tp0+nWrVs5WqYLCwujwYMHKxyXmzdvrpJZeU1HK4XQwYMHycDAgNzc3MjHx4eGDBlC5ubmFBYWluXz7969S7q6urRs2TJ68eIFzZo1i/T19enZs2fZtqnNQkgQBHr8+DFNmDBBIf0aAP3+++90/Phx0demBUGgFy9e0MaNG6lr167fZHuZmJhQjx496ODBgxrznickJJCnpyft3buXZs6cSX/88QdVrFgxy8DHsmXLkqurK+3evZsCAgJ+OvaDBw9YXJSOjg5NmzaNUlJSiOh/V6Ljxo3Llp8pKSkKxdx69+7Niy9yNIK0tDQ6cuTINwkEzZs3pwsXLkgi6mNjY8nW1paAjEyvL5MUAJCBgQG1bduW/v33X/r48WOe7b1+/ZpcXV0ViiU2adJE4QJJEARKT0+nlJQUSkxMpPj4eIqJiaGoqCiKiIig0NBQCg4OpuDgYAoJCaGwsDAKDw+niIgIioyMpE+fPlF0dDTFxMRQXFwcJSQkUHJyMqWlpWnkhVN2z98a1XS1bt26+OWXX7B+/XoAgCAIKFmyJMaMGYNp06Z98/zu3bsjISEBZ86cYffVq1cPNWrUwObNm7NlU1lNV1u0aIFr165BV1eXbTKZDDo6OqyRX+ZtmUwGmUzGnvP1lvl6PT09he3r+/T19aGvr4/U1FR8/PgRb9++RWxsLPPJ0NAQVapUgbOzM+zt7WFoaAgjI6Nv/n65FShQAAUKFGC3DQwMFBoREhH8/Pxw48YNtn3dudjGxgYdOnRAx44d0ahRIxgaGor2PotBcnIywsLCEBoaitDQUISEhMDf3x++vr548eIFAgIC8L2f0Zcd5F1cXGBra5tj+/Hx8Rg/fjzc3NwAALVq1cK+ffvw9u1btGnTBkWKFEFQUBAMDAx+OhYRYdOmTRg7dizkcjl++eUXHD9+PFd+cTjKJi4uDm5ublizZg3ev38PADAwMECfPn0wfvx4VK1aVRK/fH190adPH3h6eircb2hoiJYtW6JLly5o164dzMzMsj0mESE+Ph7h4eEIDw9HWFiYwu3o6GgkJiYiMjISr1+/Rnh4ODvu6OnpQUdHB2lpaaLu59fo6OgonLMyzzFfnmu+vu/r533v/9GjR6NVq1ai+pvd87eeqFaVSGpqKh4/fozp06ez+2QyGZo2bYr79+9n+Zr79+9jwoQJCve1aNECJ06c+K6dlJQUpKSksP/j4uLy5vh38PDwQHp6OtLT05Uyfm5ISUnB48eP8fjx41yPoaOjAwMDA+jq6kIQBKSlpUEulys8RyaTwcrKCsWLF0eZMmVQqlQpFChQAI8ePcKzZ8++EVsGBgbQ19dXEHNf3tbX14euri6ICIIggDJmOr+5LQgCEhMTkZCQ8M3fzNufP39GREQEEz2hoaEKYvF7WFpaolKlSnB0dISjoyMqVaqEatWqwcbGJtfvZSYmJibYvn072rRpgyFDhsDT0xO1atXCsmXLUKxYMYSEhODs2bPo1KnTT8fS0dHByJEjUbFiRXTt2hUeHh5MDNWtWzfPvnI4YhAQEIC1a9di27Zt7BhcpEgRjBw5EiNHjoS1tbXKfYqLi8Phw4fh5uamcM7R19dH27Zt0bVrV7Rp0+aHJ1y5XI7379/Dz88Pvr6+8PPzg5+fHwIDAxEeHo7k5ORc+ZaT84hMJgMAdmzMCUSktPNWhw4dRB8zu2iMEIqMjIRcLv/mB2BtbQ0/P78sXxMaGprl80NDQ79rZ8mSJZg3b17eHf4JderUweXLl0UfVyaTwcTEBMbGxpDJZEhNTWUn+kx0dHRQsmRJVK1aFZUrV2bPS0tLY0IwOTn5m9tf/k1KSsLnz5+RnJyM1NRUNjYRKQjJrBAEAWFhYQgLC4OXl5fo74EyMDAwgI2NDaytrWFjY4PSpUsz4VOpUiVYWVkp3Yc//vgD9erVw4ABA3D58mWMGTMGZcqUAQDs3LkzW0Iok8aNG8PDwwPt27eHj48PXFxc8O+//6Jv377Kcp/D+Snu7u5YtWoVjh07xi6gKlasiD///BN9+/ZFgQIFVOoPEeH27dtwc3PDkSNHkJiYqPD4b7/9hrNnz6JQoULfvDY8PBy3bt3C8+fP4evrC19fX7x69eqnx0djY2NYW1ujaNGi7G/RokVhaWkJY2NjFCxYkG3GxsaIi4vD/v37cfToUXYstrKyQp8+feDq6ory5csrrChktY9fb5kXjnK5XGFLT0//5r4v7//e3+zcbtiwYR4+qbyhMUtjwcHBsLW1xb1791C/fn12/5QpU3Dz5k24u7t/8xoDAwPs2rULPXv2ZPdt3LgR8+bNQ1hYWJZ2spoRKlmypOhLYx8/fmRXAMnJyfj8+TPevn2LN2/e4N27d/jw4QOCgoIQFRX107FkMlmu1D2QMaWa+UPL/NFZWlrCxMQERkZGICJER0cjIiKCbUFBQQgJCfnumLa2tihbtiwqV66MKlWqoHTp0pDL5UhKSvpmy9z/TIH19Zb5eaSlpSE9PR1paWlZ3k5PT1dYWszqtkwmUziAfO+vlZUVEzyZm7m5ucKSn5QIgoB169Zh6tSp7Lsqk8kQHByc4yvl+Ph49OnTB6dOnQIATJo0CUuXLoWurq7ofnM4WZGeno4TJ05g9erVuHfvHru/adOmmDBhAlq0aJHlCVyZBAUFYffu3XBzc4O/vz+7v2LFiqhatSqOHDkCU1NTvHr1iv3mYmNjcfPmTVy7dg1Xr17F8+fPsxzb0NAQFSpUgKOjIypWrAhHR0eULl2aHX+NjY1z5XNwcDA2b96M7du3Izg4mN3ftGlTDBs2DB06dIC+vn6uxtZUsrs0pjFCKDU1FQULFsTRo0fRsWNHdn///v0RExODkydPfvMaOzs7TJgwAePHj2f3zZkzBydOnMDTp0+zZVdZMULZJTExEe/evcPbt2/Z9ubNG7x58wZv375VmI1RNba2tqhSpQoTPJUrV0alSpWyvDriiM+zZ8/Qu3dvPHv2DEBGDN3FixdzFJcAZAirv/76C4sWLQIAtGrVCkeOHMn1AZnDyQ6xsbFwc3PD2rVrFeJ/evXqhT///BPVqlVTqT9EhLt372LVqlU4efIkBEEAABQqVAg9evSAq6srKlWqBAcHB4SFhWHx4sX45ZdfcPXqVVy7dg2PHj1ir8mkWrVqqFOnDlsyr1ixIkqXLq3UC4309HScOXMGW7duxYULF9gFsrW1NVxdXTF48GA2k/zlvn/+/BnR0dGIjo5GTEwM4uPj8fnzZyQkJLC/X97+ckXg6y0lJYXdTk9PZz58+ffr+1asWIF+/fqJ+l5k+/yd97hs1eHk5ESjR49m/8vlcrK1taUlS5Zk+fxu3bpR27ZtFe6rX78+DRs2LNs21SVrLCIigs6ePUt//fUXtWzZUqHGT+Ymk8moVKlS1LBhQ2rTpg21adOG6tWrR+XLlycLCwsyMjJim6GhIRkYGJCBgQHp6emRnp4e6erqkp6eHhUoUIAKFCjwTZ2brzcrKytq0aIFzZgxg44dO0bv3r3TyMwCTSYpKUmhPUfx4sXpzJkzuRrr4MGDrN5Qw4YNKSYmRmRvORyiV69e0ejRoxXq/1haWtLs2bMlaQeTlpZGBw8eJCcnJ4Xj26+//ko7duyg+Ph49tzJkyez7NasiqCWL1+ehg0bRocOHZKsybNcLqeIiAh68eIFHTx4kDp37vxNdq6ZmRmVKFGC7OzsyNLS8qfHelVsW7ZsEf290MqssUOHDqF///7YsmULnJyc8M8//+Dw4cPw8/ODtbU1+vXrB1tbWyxZsgQAcO/ePbi4uGDp0qVo06YNDh48iMWLF8PT0xNVqlTJlk1VzwglJCTg1atXePnyJV6+fAlfX194eHjg7du33zzX0NAQNWvWRN26deHs7IymTZvC3NxcNF+ICGFhYfD398fr16/h7++vkC31dRA0kBE0XKtWLdSqVQu//fYbXFxc+MyCkomOjoa1tbVCxkjfvn2xevVqWFpa5misBw8eoGXLloiNjUWdOnVw8eJFWFhYiO0yJ59BRLhy5QrWrFmDc+fOsVmASpUqYdy4cZLE/8TFxWHbtm1Ys2YNPnz4ACDjmNq3b1+MHz8elStXZs8NDQ3FihUrsHLlSoUxihcvjiZNmqBJkyZo1KgR7OzslOZvcnIyQkJCvtmCg4PZ7dDQUHz69CnLY3N20NPTg4WFBQoXLgwTExMUKlQIxsbGCn8zb2eGExgYGHx3y0xs+TobOvPvl7eLFy8u+rFG65bGMlm/fj2WL1+O0NBQ1KhRA2vXrmXZLr///jtKly6NnTt3sucfOXIEs2bNwvv371G+fHksW7YMrVu3zrY9ZQmhoKAgPH/+nAmezO3jx4/ffY2DgwPq1q2LunXrwsnJCdWqVctWyrQySE5Ohre3Nx4/fgxPT088fvwYz58//yZ9U19fHw0bNkTz5s3RrFkz1KpVS+Xr/fmBbt264ciRI6hVqxaePHkCQRBQtGhRbNy4EZ07d87RWF5eXmjevDkiIyNRtWpVXL58WZIsHY7mk5iYiL1792Lt2rXw8fFh97dp0wbjx49HkyZNVB579+HDB6xduxb//vuvQkbaqFGjMGLECPZdl8vluHz5MrZu3YrTp0+zTCldXV0MGjQIQ4YMQe3atUXxPz4+Hh8/fvzhlp140S8xNzeHlZUVihYtqvDXwMAAb9++hbe3N7y9vRVEU4kSJdCxY0d07NgRv/76q2TnF7HQWiGkapQlhHr27ImDBw9m+ViRIkXg4ODAtpo1a+KXX34RdbZHGaSkpOD58+d4/PgxHj58iCtXriAgIEDhOZaWlmjSpAkTRsq8gspPnDlzBu3atYOVlRX+++8/DB06FL6+vgCALl26YP369TkSMy9evECTJk0QGhoKBwcHXLlyBSVKlFCW+xwt4/3799i0aRO2bdvGTuDGxsYYOHAgxowZgwoVKqjcJ39/f8ybNw8HDhxQyEibMGEC+vTpw2akwsPDWdBx5kxRJjKZDO7u7qhTp0627aakpCAoKAgfPnxAYGAgPnz4oHA7MDAw22VaDA0NUaxYse9umZmtRYoUyZaIiYmJwblz53D8+HGcP39eIbvYyMgITk5OcHZ2hrOzM+rXr6/256Cv0coYISlQVoxQ27ZtqUCBAmRvb08tW7akWbNm0bVr1+jTp0+i2pESQRDo1atXtGHDBurQocM369T4/7LzK1asUGlvIG0kNTWVihYtSgDo9OnTlJycTLNmzWJr/xYWFrRnz54cxXC9evWKSpYsSQDI3t6e3r59q8Q94Gg6crmcLly4QO3atVOoqq7sNj0/48OHDzRkyBCFOJjGjRvT2bNnSS6Xs+clJSXR0qVLycTEhD2vcOHCNHr0aCpbtmyWVdwFQaCoqCjy8vKiEydO0Nq1a2nixInUtWtXcnJy+qZt0I82c3NzqlKlCrVs2ZIGDx5Mc+fOpW3bttGFCxfo+fPnFBUVpdQYzKSkJDp9+jQNGjSIrKysvvFPR0eHqlatSsOHD6e9e/fS+/fv1T4mVCtbbEiBsoRQ9+7dswx2dnBwoO7du9PixYvp3LlzWiUQ0tLS6O7duzRnzhxq0KCBwoFJJpNRixYtaN++fZSQkCC1qxrJ+PHjCQB16dKF3efp6Uk1atRg73OrVq3o1atX2R7z/fv37CRga2ur1Ka7HM0kKiqKVq1aReXKlVM4njVt2lQpbXqyS2hoKI0bN04hqLlVq1bk4eGh8DxBEOjw4cNUunRp9rxatWrRnj17KD4+nhYsWEAAqFChQvTXX3/R8OHDqVWrVlS5cmWFgO8fbUZGRlS+fHlq0qQJDRw4kP766y/atm0bXbx4kXx9fRUCstUBQRDI19eXtm3bRgMGDPjms83cihQpQr/++isNHTqUVq9eTRcuXKCAgAAFgSklWhksLQXKWhrz9/eHh4cHnjx5gqdPn+LJkyffrW1UqlQpFnjs4uKCsmXLqk1Nm7wQFRWFI0eOYPfu3Qr1QwoVKoQuXbqgX79+cHFx4TFF2eTJkyeoWbMmDAwMEBoaisKFCwMA0tLSsGzZMsyfPx+pqakwMDDApEmTMGPGjGwFsgcHB6Np06bw9fVF0aJFcfnyZZWnNnPUj6dPn2LDhg3Yt28fKzRoamqKAQMGYOTIkXBwcJDEr+joaCxfvhxr1qxhfrm4uGDhwoVwdnZWeO6dO3cwfvx4Vk3fxMQE1apVg66uLlu2yk7gsZWVFUqVKgU7O7tv/trZ2aFIkSIaf8wOCwvD3bt3cffuXdy5cweenp7frTBtbGwMBwcHODo6onz58mzZLnOztrZWSSslHiMkEqrMGgsNDcXTp0+ZMHry5Alevnz5TW2KYsWKwcXFhYkjR0dHjf+R+fv7Y+/evdizZ49ChlzJkiUxYMAAjBkzRiXVmzWd6tWrw9vbG5s2bcLw4cMVHnv58iXGjh2LS5cuAcgIjFy1ahW6dOny0+9PREQEmjdvjidPnqBw4cK4dOlSjuIkONpBYmIijhw5gq1btypcvFSpUgWjRo1Cnz59JKsjFh8fjzVr1mDFihWsLU6tWrUwdOhQFCtWDB8+fEBAQAACAgLw+vVr+Pn5Zbulhb6+PurVq4fSpUsrCJ1SpUqhZMmSKFiwoDJ3TS1JTExkrUK+3F6/fp2tFhyFCxdWEEcDBw5Es2bNRPWRxwiJhNR1hOLj4+nSpUs0c+ZM+vXXX7OsXVGkSBHq2bMnHTp0SPJ6R3lFEAS6c+cODR06lMzNzdk+FixYkP78808KCgqS2kW1ZsWKFQSA6tWrl+XjgiDQ8ePHFZYBGjduTD4+Pj8dOyoqiurWrcvqqDx48EBs9zlqypMnT2jUqFFkZmbGvjd6enrUrVs3unnzpiSxIoIg0KdPn8jDw4NGjRqlsExlZGREBQsWzNayla6uLpUrV45atmxJw4YNo8WLF9PevXtp9+7dbPn+6tWrKt8/TSU1NZX8/Pzo+PHjtHjxYhoyZAi1b9+enJycyM7OLstzGAD6999/RfeFxwiJhNRC6GsSExPp+vXrNG/ePGrcuDErgJe5GRgYUMuWLWnz5s0aH1+UlJREhw4dojp16ijs34gRI+jdu3dSu6eWhISEkEwmIwD08uXL7z4vMTGR5s6dS0ZGRuykNmHChJ9+z+Pi4sjFxYUFd3p5eYm8Bxx1IT4+nrZt2/ZNoUF7e3tatGiRSo4vCQkJ9OzZMzp58iT9888/NG7cOOrQoQNVq1Yty+SLrDZLS0uqVasWNW7cWOHiqnr16nTp0qUsRZwgCNSsWTMCQH/88YfS9zM/kRlg/uLFC7p27Rrt37+fVq1ala2LsZzChZBIqJsQ+pqUlBS6ffs2TZ06lSpUqPDNQaBu3bq0ZMkS8vX1ldrVXCMIAl24cIGcnZ0VrkYHDBjww5N9fqVVq1YEgGbOnPnT5759+5Y6duzI3ldra2vauXPnDwNc4+PjqUGDBmw2UhkHMI40CIJAjx49omHDhilkT+np6VHXrl3p0qVLogfCRkZGkru7O+3fv58WLFhA/fv3J2dnZypWrFi2M65kMhlVr16dJk2aRBs3bqSzZ8+Sj48PC0LetWsXu2gsWbIkHTp06IezWCdPnmQXXm/evBF1fzmqgwshkVB3IfQ1vr6+tGTJEraE8eVWqVIlWr58OYWGhkrtZq65efMmu1LD/6d0du/enby9vaV2TW04ePAgASA7O7tsn7QuXLigIKQrVapEx44d++7JIiYmhmrXrk0AqFixYvT69Wsxd4GjYoKDg2nZsmVUuXJlhWNGuXLl6O+//87zMSMtLY1evnxJp06domXLlpGrqys1bNiQLC0tfypyzM3NqXbt2tS1a1eaOHEi9ezZU0Gk9erViz5+/Jil3aSkJBo2bJhC1tjPSpQkJyezTMnp06fnab850sKFkEhomhD6kqCgINq8eTO1bNmS9PX1Fa7uOnToQKdOnaK0tDSp3cwV7u7u1L59ewVBNGLECN4fizKWvTJjOa5du5bt16WkpNCyZcuocOHC7H2tXbs2nT9/PktBFBkZSVWqVGGi6/3792LuBkfJJCYm0oEDB6hly5ZsORUAGRoaUo8ePejatWs5jv2Ry+X06tUrOnLkCM2ePZs6depEjo6OCsefrDZbW1v67bffaODAgbRw4UI6cOAAPXz4UEG03Lt3j2rVqsVeU7VqVbp58+Z3fXn//j1bVtfR0aH58+dn68Jg2bJlTODHxcXlaP856gUXQiKhyULoS2JiYmjr1q1Ur149hQOQjY0NTZkyRWOXzp48eUJdu3ZV2J/Dhw+rfaEvZTNkyBACQP3798/xa6Ojo2n27NkKwafOzs5ZnnRCQkLYTFK5cuU0Pi5N2xEEgW7fvk2DBw/+JsamQYMGtGXLlmwXPoyNjaXbt2/Thg0baOjQoVS3bt0fBigXLFiQatasST169KC5c+fSwYMH6cmTJz+tGxYZGUkDBgxg45iamtKaNWt+eBF3/vx51pjawsKCLly4kK19+vTpE7uI2LlzZ7Zew1FfuBASCW0RQl/i4+NDEydO/KZ6aMOGDcnNzY2SkpKkdjHHXLt2TWFpp3Xr1vk6oPrOnTsEgIyNjenz58+5GiM8PJwmTpzIAqoBUPPmzenhw4cKzwsMDGRZaJUqVZKs6zYnawRBoKdPn9KMGTPYkk/mZmdnR7Nmzfppkc3U1FR6/Pgxbdiwgfr27Uvly5f/ruAxMjKiOnXq0KBBg+iff/6hixcv5rrI3vHjx8na2pqNPXDgwB8u08nlcpo7dy6rbP3LL7/kaKZy0qRJBICqVaumNkUBObmHCyGR0EYhlElqaiodP36c2rZtqzA1XrRoUVq4cKHGtftISkqiOXPmsPTMggUL0vLlyzV2+S8vCILATnq7d+/O01gfP36kESNGkJ6eHvuOdOjQge7cucNm3t68eUO2trYEgGrUqEFRUVFi7AYnD/j6+tLcuXPJ0dFRQagYGxtT//796dq1a9892QcHB9N///1HU6ZMoV9//fWb7NTMrUSJEtSmTRuaPn06HTx4kHx9fUX5vUVGRlKvXr2YHUdHR7p79+5PX9OyZUv2mhEjRlBycnK2bX748IEMDQ0JAJ09ezavu8BRA7gQEgltFkJfEhQUREuWLGG9pTIPmGPHjtW4mRVfX1/67bff2H5Ur16d3N3dpXZL5cybN4+AjFYHYvD27VsaMGCAgmiuU6cO7dmzh1JSUsjX15fNMtatW5fHV0iAv78/LVq0iKpVq6YgWAwMDKhDhw60f//+LNs5RERE0KFDh2jw4MFkb2+fpegxMzOjFi1a0Jw5c+j8+fMUGRmplH34chZIJpPR1KlTfzpL/e7dO+Z3gQIFciX+XV1dCQC5uLjk+6V1bYELIZHIL0Iok9TUVNq7dy9Vr16dHQB1dXWpR48e9PjxY6ndyzaCIJCbmxuLE9DR0aHRo0erXU8fZfL27Vu27x8+fBBtXF9fXxo8eLDCkpmNjQ3Nnz+frl27xoKtXVxceN84JSMIAj179owWLVrEsvi+TIpo3bo17dq165skgsTERLp06RJNmTKFatas+Y3okclkVK1aNRo6dCi5ubnRixcvlL5UlNUsUHaKdr5//55KlSpFAKhs2bK5yiD18fFhAv/+/fu5cZ+jhnAhJBL5TQhlIggCXbp0iZo2bapwgGzcuPF3s4jUkfDwcOrbty/zv1KlSjlqOqrpZM6MLV68WPSxIyIiaNGiRVS8eHH2/hoaGlLbtm3J2NiYgIx05ZSUFNFt52dSU1PpypUrNHbs2G9mb3R1dalZs2a0bdu2b5a2/fz8aOnSpdSkSRO2BPTlVrVqVfrzzz/p7NmzKj/e5WYWiIgoICCAvQcVKlTIdbB+hw4dCODFE7UNpQmhFy9e0F9//UWNGjWiMmXKkI2NDVWtWpX69etH+/bty9GarCaQX4XQl3h6elKvXr0UusXXrVs3R6nZUnP58mVWoM3U1JROnz4ttUsqYfv27QSAKlasqDTxmpKSQvv37/+mAnHmFXanTp0k60CuLURHR9P+/fupR48eCm0uMoOT27ZtS1u3blUIVBcEgby8vGj27NlUqVKlLON7BgwYQPv27aOQkBBJ9uvTp0/fzAJldxk7MDCQypQpQ0BGxuL3agn9jLt377Lvq6Zmz3KyRnQh9PjxY3Yl0bhxY5o2bRqtXbuW/v33X/r777+pb9++VLp0abKwsKClS5dqjSDiQuh/vH//nsaPH6+QItu8eXN69OiR1K5li+DgYGrYsCHzfc6cOVqfGRIbG8sCXVURJ3X//n3q3r27gmgGQKVLl6ZDhw7xpbJskpqaSnfu3KG5c+fSr7/+qhCoDoCsrKzI1dWVTpw4oZAVKJfL6d69ezRp0iQmEjI3fX19atmyJa1bt478/Pwkn9W9efMmlShRgomQadOmZTtj9ePHj1SuXDkCQGXKlKHAwMBc+SAIAqtYP3jw4FyNwVFfRBdCpUuXpg0bNvy0xsS9e/eoe/futGjRouwOrdZwIfQtISEhNGrUKIUiaV27diU/Pz+pXfspKSkpNGrUKOZ327Zts103RVPJvOIeNWqUymx++PCB5s2bp7BsBmRk8vXq1YtOnz7Nl8y+IDPFfdWqVdSmTRuFGk5fLutOmzaN7t27pzDDJggCPXjwgEaNGvXN+12gQAHq1KkT7d27V22+52lpafTXX3+xGcPy5cvnSKQHBwezUhn29vYUEBCQa19Onz7NZtVyO6PEUV9EF0Kpqak5ciCnz1dXuBD6Pm/evKE+ffqwmh26uro0ePDgXF+dqZKdO3eyOIny5cvT8+fPpXZJaVy8eJGAjMJyqp6pFQSB5syZk2UWkrm5OQ0aNIiOHz+ucaUa8kpaWhp5enrSpk2bqGfPnlS0aNFv3h9LS0vq1q0bbdmyJct+V2FhYbRixYpvlr1MTU2pV69edPTo0VzXkFIW79+/V5iVHTBgQI4SGEJCQsjBwYEAUKlSpfJUzTw9PZ1VRp86dWqux+GoL5IFS2vb1DcXQj/H29ub2rVrpxAwO2HCBKWl14rFo0ePyM7OjoCMUgGHDx+W2iWlkJ6ezmYK/vvvP0l8WLFiBft+NGrU6JuGmjo6OlSjRg0aP348nThxQqvqEAmCQAEBAXT48GGaOHEiOTs7Z1mXp2DBgtSyZUtavnw5eXl5Zblsm5aWRqdPn6aOHTsqLJcVKFCA+vTpQ2fPnlXbsITDhw+z+CZTU1Pav39/jl4fGhrKaiLZ2dnR27dv8+TPzp07mSDXpu8b538oVQg1btw4y2lEd3d3Kl++fG6GVFu4EMo+d+/eVajfY2FhQZs2bVLrQNnw8HBq3Lgx83nKlClaWYBxypQpBGQUQpSKWbNmMdGzZ88eun79Oo0cOfKbgn+Zz6lZsyb9+eefdPLkSQoNDZU8piU7JCcn0/Pnz+nIkSM0f/586tChA9nY2GQ5I2ZqakpNmzal2bNn082bN3+4VOjn50dTp079Zqy6devSli1b1LrH3ufPn2nw4MHM53r16uVYxISFhbGGsCVKlMhzR/ikpCR2EbRs2bI8jcVRX5QqhFq3bk0WFhZ08OBBIsoI0JszZw7p6+vTuHHjcjOk2sKFUM4QBIHOnz9PVatWZQe+mjVr0r1796R27bukpaWx0voAqH379mp7VZ1bnj9/TkBGbRmpWmAIgkCjR49my6inTp1ij4WEhNDBgwdp+PDhVLFixSyFQ+HChal+/frk6upKy5Yto1OnTtHr169VLlwFQaCIiAi6d+8eubm50eTJk6ldu3ZUrlw5hWKTX266urpUs2ZNGj58OO3YsSNbdXnkcjmdOXNGQahnBkpPnDhRI5Zznzx5wj5PHR0dmjFjRo7DJqKiotjxxNbWll6/fp1nv1atWsVEVWJiYp7H46gn2T1/6xARIRds2LABU6ZMQYcOHfD+/XsEBARgx44daN68eW6GU1vi4uJgZmaG2NhYmJqaSu2OxpCeno5NmzZh9uzZiI2NBQD0798fS5cuhY2NjcTeZc2hQ4cwYMAAJCcno3Xr1jh27BiMjIykdks06tSpg8ePH2PNmjUYO3asJD4IgoD+/ftj7969MDQ0xIULF/D7779/87yQkBDcvHkTN27cwI0bN/Dq1St871BlYGCA8uXLo0yZMihcuDAsLCxQuHDhLG+bmJhALpcjPT2dbWlpaQr/p6SkICIiAqGhoQgLC/vmb1hYGNLS0r67jyYmJnB0dETFihVRrVo11K1bF7Vq1ULBggWz9R4lJiZiz549WL16NV6+fAkA0NXVRevWreHq6oo2bdpAX18/W2NJBRFhw4YNmDhxIlJTU1G8eHHs2bMHjRs3ztE4crkcbdu2xYULF1CsWDHcvHkT5cuXz5NvsbGxKFOmDKKiorBt2zYMGjQoT+Nx1Jdsn7/zoramTZtGOjo6pK+v/9M+MJoKnxHKG2FhYTRo0CCF5YDVq1erbTD9lStXWPxG8+bNtepqcd26dWyGTkpSU1Opffv2BIAKFSr0TRPXrEhMTKSnT5/SwYMHae7cudSjRw+qXr26QnVrVW+2trbUtGlTGj16NK1fv56uXr1KQUFBuV7CCwkJoVmzZpGlpSWzYWZmRpMnTxa1MriyiY2Npa5duyrMsEZERORqrNmzZ7MYKC8vL1H8mzlzJgEZNYu0cRmc8z+UOiMUHR2NwYMH4+rVq1i+fDlu3ryJEydOYNmyZRg5cmROh1Nr+IyQODx8+BCjR4+Gh4cHAKBy5cpYt24dGjVqJLFn33Ljxg20adMGiYmJaNKkCU6dOpXtq3l15tOnTyhWrBjS0tLg7e2NqlWrSuZL5qzb9evXUbhwYVy/fh3Vq1fP8TiCICAgIAC+vr4ICgpCdHQ0oqKisvwbHR2N+Ph46OnpQV9fH3p6ellu+vr6sLKygo2NDaytrWFtbc1uZ/4tWrSoaLOFz549w+rVq7Fv3z6kpqYCAOzt7TF+/HgMHDgQJiYmothRBd7e3ujSpQtev34NPT09LF++HOPGjYOOjk6Oxzp16hQ6dOgAANizZw/69OmTZ/9CQkJQrlw5JCYm4vjx4+jYsWOex+SoL0qdESpevDg1bNhQIeDt4MGDZGFhQa1bt87NkGoLnxESD7lcTtu2baMiRYqwq8UePXpQWFiY1K59w61bt1gtl99//11repR16tSJANDEiROldoXi4uKoXr16BICKFClCPj4+UrukUh48eKDQLR0ANWjQgI4eParWCQbfY/v27WyGrmTJknnq2fXy5UsyNTUlADRmzBjRfBw+fDgBoPr162tE8D0nbyg1WHr+/PlZBvoFBgaK1ulaXeBCSHyioqJo9OjRLLDUwsKCdu3apXYHprt375KJiQkBIGdnZ63opn7ixAkCQNbW1mqxLBAdHc2ahdrY2NDLly+ldknpeHh4UOvWrZn4kclk1K1bN41t9pmQkEADBgxg+9OqVas8lc6Ij49ntZGcnZ1FK7z55s0bVnLg5s2boozJUW9401WR4EJIeTx+/Jhq1KjBDqDNmzend+/eSe2WAg8ePGC1T+rXr6/WacrZITU1laysrAgAnT17Vmp3iCij31S1atVY3E1eU6PVFU9PT4V6W7q6ujRw4ECN3l8/Pz9WlFAmk9GiRYvy1LZGEAQWX1SsWLFcN1HNikyx1qJFC9HG5Kg3oguhnJYx15Zy5VwIKZfU1FRaunQpm1I3Njamf/75R62WBjw8PKhw4cIEgJycnNSmVUFuGTduHAEZbVHUhfDwcDYLkNeKwerGkydPqGPHjgozQP369RMlDVxKDh48yJaPra2tRWnCnFl4U+wEnFevXrEZaFX03OOoB6ILoaJFi9LQoUN/mOERExNDW7dupcqVK9OaNWuy760aw4WQanj16hW5uLgoFIpTpzopnp6eLJundu3aGt0SwtPTkwCQgYGBWlXUDQkJYT2kypYtq/EXU8+ePaPOnTuz77SOjg717t1b45f/kpOTaeTIkWy/XFxcRJm5uXr1KhMrGzZsEMHT/9G7d28CMnoLcvIPoguhT58+0Z9//klmZmZkbW1NrVu3psGDB9Po0aOpd+/eVLNmTTIwMKB69eqpzZS7GHAhpDrkcjlt2bKFBUnq6+vTX3/9pTbFDZ8+fcoCvWvXrq12fZyyiyAIrEDdpk2bpHZHgcDAQNY13cHBgUJCQqR2KccEBQWRq6sr68Gno6NDPXr0oBcvXkjtWp559+4d1alTh4mgGTNmiBJr9uHDB/bb6t+/v6jxgj4+Puyz8PT0FG1cjvojuhB6+vQppaenU2JiIh09epTGjRtHHTt2pBYtWlDv3r1pxYoV9OzZszw7rm5wIaR6Pn78yOrMABldtz08PKR2i4gyKjRnHrA7deqUp3gIKVm5ciUBGe0O1I3379+z9geVK1fOdQ0aVfP582eaO3cuFSxYkH13O3furFYzm3nh9OnTbInYwsJCtAvepKQk+uWXX1iNK7Frd2XGHP3xxx+ijstRf0QXQjKZjJXmt7e3V/uGmmLBhZA0CIJAhw8fZl25dXV16a+//hItgyQv3LlzhwwMDAgATZs2TWp3ckVoaCjp6uoSAPLz85PanW/w9/dnjWJr1Kih1kuR6enp5ObmxvzNFJjq3FYmJ6SlpdG0adPYvjk5OYkaw5XZh8zCwkL0ZImnT5+yWTlvb29Rx+aoP6ILIQsLC3rw4AEREeno6EjWr0jVcCEkLZGRkdS9e3d2EK5Ro4ZaHND27NnDfNqxY4fU7uSKNm3aEACaPn261K5kiZ+fH1lbW7OlSHWcGbpy5QpVr16dfRfs7e3p0KFDalcKIrcEBwcrxO6NGTNG1IuRzA7wMpmMLl26JNq4mWQGqXfv3l30sTnqj+hCaMiQIWRoaEilS5cmmUxGdnZ2ZG9vn+WmTXAhpB4cOnSIBSvr6+vT4sWLJa+Dk1mqX19fXyPrkhw+fJiAjMaT6pSl9yXPnj1jS5EVK1ZUm1YTL168YEIS/98KY/ny5WoTzyYG169fZ0K0UKFCrMm2WAQFBbHSFAsXLhR1bCKiR48eMZHl6+sr+vgc9UcpdYTOnz9P69atIx0dHVqwYAH9888/WW7aBBdC6kNISIhC7FDdunUlXdaRy+XUpUsXAkCWlpbk7+8vmS+5ISkpiczNzQkAXb58WWp3vouvry+VKFGCAJCdnZ2kWVcxMTE0btw4tqyop6dHY8aMUcvZqtwil8tp8eLFLIOrSpUqov/OBEFgNZV++eUXpVzUZArVPn36iD42RzNQakHFAQMGaEWV3ezAhZB6IQgC7dy5k11JGhkZ0erVqyULWk5ISGBZNBUrVtS4GkMjRowgANS7d2+pXfkhAQEBLLXeysqKHj9+rFL7crmcdu7cyWLWAFCHDh00PhX+a8LDwxWqXvfv358SEhJEt7N//342m6qMJJv79++z2EJNr9fEyT28srRIcCGknnz48IGaNWumUMvky953qiQ4OJjNWDRr1oxSU1Ml8SM3PHjwgICM7t7q/h0PCwujWrVqEQAyNTVV2XKkl5cXNWjQgH3XHBwc6OLFiyqxrUquXr1KxYoVIwBkaGhI27ZtU0qsU3h4OFvunD9/vujjExE7Nri6uiplfI5mwIWQSHAhpL4IgkCbN28mY2NjFsewfft2SQJVvby8mB/Dhw/XmGBZQRDIwcGBAND27dulduenxMbGsuBdIyMjOn36tNJsRUVF0ahRo9gSkbGxMS1dulQtMhfFJDU1laZPn85q7VSsWJGePHmiNHuZyQ/VqlVTykXDrVu32LKlurXs4agWLoREggsh9efNmzfk7OzMrtjbt29PoaGhKvfjxIkT7GSiSZXVFy9eTADot99+k9qVbJGYmMjiS3R1dWnv3r2iji+Xy2nbtm1s1iIz6ygwMFBUO+rA27dvqW7dumw/hwwZotRCocePH2ef26NHj5Ri4/fffycANGzYMKWMz9EcuBASCS6ENIP09HT6+++/WX0fKysrOn78uMr9WL58OctUOXfunMrt54bAwEAm4DSlAWhqair17duXncDXrl0ryriPHz9WEAaVKlWiq1evijK2unHgwAFWxd3c3JyOHDmiVHtRUVFkY2Oj1PpbV69eJSCjfYy6ZBhypIMLIZHgQkizePr0KetknhnsqcqO8YIgkKurKwEgExMTjckky4ypmDNnjtSuZBu5XE5jx45ln/WcOXNyvSQZGxtLY8eOZctgJiYmtHLlSo2K98ou8fHxNHDgQPa+NWzYUCVNbjO7vzs4OFBSUpLo4wuCwGK5xowZI/r4HM2DCyGR4EJI80hOTqapU6eyWQ47OztROmNnl5SUFLZU5+TkpBEn071797KCgJrUNkQQBJo3bx47qXfq1ClHwlcQBDp06BALEgZAPXv2FKWJqDri6enJsu9kMhn99ddfKqnHdf78eVbhWcyu8lnZMDIy0trPj5MzuBASCS6ENJfbt2+zBp4A6M8//xS9j9H3CAgIYDV6Zs6cqRKbeSEhIYFMTEwIgEYWh9y6dStbFi1Xrly2gn39/f2pRYsW7PtRrlw5pVQ3VgdSUlJo/vz57D2ytbWlGzduqMR2bGwslSxZkgDQuHHjlGJDEATWr2zChAlKscHRPLROCH369Il69epFJiYmZGZmRq6urhQfH//D12zZsoVcXFzYAT43NV64ENJs4uLiaMiQIexkV7FiRXJ3d1eJ7czKzTo6Oio76eSFQYMGaXTK8cOHD1mzViMjo++2PklOTqYFCxaQkZERiyeZO3euUpZr1IEHDx5QlSpV2G+gY8eOKu0VmVmryt7eXmmB2GfOnCEAVLBgQQoLC1OKDY7moXVCqGXLllS9enV68OAB3b59m8qVK0c9e/b84WtWr15NS5YsoSVLlnAhlM85c+YMC9SUyWQ0Y8YMlbRDyIwXKlGihFo3DiX6X9pxoUKFlJo5pEwiIyOpVatW7KQ/ePBgBYFz9epVVi4AADVt2lTriiJmEh8fT+PGjWNLxFZWVnTgwAGVlna4fv06e6+VFXT+5WzQ5MmTlWKDo5lolRB68eIFASAPDw923/nz50lHR4eCgoJ++vrMH2N2hFBycjLFxsayLTAwkAshLSEyMpJ69uzJDszVqlUjLy8vpdqMj4+n8uXLEwDq0qWLWtcXEgSBypYtSwBo165dUruTa+RyOc2fP58JgJo1a5K7uzv17t2bffbW1ta0f/9+tf488sKFCxeoVKlSbH/79eun0lkgoozl1szv09ChQ5Vm59y5c3w2iJMlWiWEtm/fTubm5gr3paWlka6uLv33338/fX1OhNCcOXPYwePLjQsh7eHo0aOsRoyenh7Nnz9fqQHNHh4epKenRwBo27ZtSrMjBgsXLtSomkI/4tKlSwq1gDKXKUeNGqVxrVCyS0REhEJZgVKlStGFCxck8WXSpElsNlRZmZuCILByBxMnTlSKDY7molVCaNGiRVShQoVv7reysqKNGzf+9PV8RojzNWFhYdSpUyd2wqhduzY9f/5cafaWLl3KrlqlbBT7MwIDA1kK+atXr6R2J094eHgolFLILKegbZWhiTIEwf79+8nKyooJvvHjx/80jlJZvHr1ivT19QmAUqt/X7hwgYCMFjFSFFHlqDfZFUIySMi0adOgo6Pzw83Pz0+lPhkaGsLU1FRh42gfRYsWxbFjx7B3716Ym5vj8ePHqFWrFpYtWwa5XC66vcmTJ6Nx48ZITExEr169kJqaKroNMShRogRatGgBANi5c6e0zuSSmJgYjB49Gk5OTvD29oaJiQl+//13AMCuXbtQuXJlnDx5EkQkraMice3aNTg7O6NXr16IiIhAlSpVcP/+faxevRqFChWSxKfJkycjLS0NrVq1Qtu2bZVig4gwb948AMCIESNgbW2tFDucfIBKZNl3CA8PJ19f3x9uKSkpKl0a+xoeLK39BAUFKXTcdnJyoqdPn4pu5+PHj2RhYaH2QZ1HjhwhAFS8eHGV1JgRC0EQaO/evWRtbc0+y969e1NISAgRZWTxZQbMA6BGjRoptaeWsrl9+zZrJ4H/z5SbN2+e5DNe165dIyCjjYaPj4/S7Fy8eJHtd+ZnzOF8iVYtjWUGS3/Zm+bixYtKCZb+Gi6E8geCIND27dtZywE9PT2aPn266HWHMnstAaDLly+LOrZYpKSksNias2fPSu1OtvD19aXGjRuz99bBwSHLLKW4uDiaMWMGGRoasiWkwYMHa9SyysOHDxXqH+nr69OoUaOydSxUNunp6VS9enUCQCNHjlSanS+rSI8fP15pdjiajVYJIaKM9PnM7I87d+5Q+fLlFdLnP378SA4ODgo1YkJCQsjLy4v+/fdfAkC3bt0iLy+vHKUxcyGUv/j48aNC7FC5cuVEr0o9bNgwAkDFihWjiIgIUccWi/HjxxMA+uOPP6R25YfExMTQhAkTWDC6kZERLVq06KelEd69e8e6oAMZLTWWLFmi1rWEvLy8WLPZTLE+ZMgQCggIkNo1xrZt2wgAmZmZKfW7ffnyZfZ58yrSnO+hdULo06dP1LNnTypUqBCZmprSwIEDFQIB3717RwDo+vXr7L7vZYB9r9BaVnAhlD/577//qHjx4uw74+rqKlodoISEBKpYsSIBoA4dOqhlCre3tzc72YaHh0vtzjdkdogvWrQo+4zatm1Lb9++zdE4d+7cYTVoAFDp0qXp8OHDatNmRC6X0927d6lLly7MR5lMRv3791e7BrlxcXFsWXLFihVKsyMIAmthM3bsWKXZ4Wg+WieEpIILofxLTEwMq4oLgIoWLSpaQTpPT0/W7iAnwlyVZAqEVatWSe2KAnfu3KHatWsrLIOdP38+1+PJ5XLas2cP2drasjFLlChBEyZMIHd3d5ULVUEQ6OHDhzRx4kTWmiJzGa9Hjx7k6+urUn+yy8yZMwkAlS1bVqnFSjM7zBsaGqrFciBHfeFCSCS4EOLcuXOHHB0d2QmpTZs2onTrzkypt7S0VMslsk2bNhEAqly5slrMWgUGBlKvXr3Y52BqakqrVq0SrQbU58+fac6cOSxOLHOzt7enqVOnkqenp9LeB0EQyMvLi6ZNm6bQHw/IqPTdt29f8vb2VoptMQgICGAtS7KTwJIXfvvtNwJAo0ePVqodjubDhZBIcCHEIcqoLzV37lw2i2NkZESzZ8/OU52W1NRUVuemX79+InorDjExMezkpqr+bFmRlJRECxcupIIFCyoEOCurinBSUhIdP36cevToQcbGxgqipHz58jRr1ix69uxZnkRReno6BQQE0I0bN2j27NmsI3zmVrBgQerevTv9999/KmsUnBcyK7a7uLgoVTRnJr4YGBjQx48flWaHox1k9/ytQ6QlxTSURFxcHMzMzBAbG8trCnHg6+uLESNG4ObNmwCAYsWKYfHixejXrx9kspyX5XJ3d0f9+vVBRLhy5QqaNGkitst5om/fvti7dy+GDh2KLVu2qNS2XC7Hvn37MGfOHLx//x4A0KBBA6xduxa1a9dWiQ+JiYk4e/YsDh06hLNnzyI5OZk9ZmhoiOLFi6N48eIoVqwYu/3l/4mJiXj37h3evn2r8DcgIABpaWkKtoyMjNC6dWt0794dbdq0gbGxsUr2Ma88ePAA9evXh46ODh4/foyaNWsqzVajRo1w48YNjBo1CuvXr1eaHY52kO3ztypUmSbDZ4Q4XyMIAh09epTs7e0VKlPfunUrV+ONGjWKZaipW9ZSZk0YExMTSkhIUIlNQRDov//+o0qVKrH319bWlvbt2yfpEl1cXBzt37+fOnTowGYG87Lp6elR2bJlqWPHjrR3716Ki4uTbN9yiyAIVK9ePQJAAwcOVKqtGzdusNmgwMBApdriaAd8Rkgk+IwQ53ukpKRg7dq1WLBgAeLj4wEAnTt3xrJly1CmTJlsjxMbGwtHR0eEhIRg1qxZWLBggbJczjGCIKB8+fJ4+/Ytdu3ahX79+inNFv3/rNiMGTPw6NEjAEDhwoUxbdo0jB49GgULFlSa7ZySkpKCkJAQBAcHIzg4WOH2l5uRkRHKlCkDe3t79jfztq2tLXR1daXelTxx4MAB9OrVC8bGxnj9+jWKFSumNFuNGzfG9evXMWLECGzcuFFpdjjaA58REgk+I8T5GWFhYTRs2DDWo8vAwICmTJmSo0aTR48eZcXxlFmNNzcsWLCAxX8oi3v37ilUSTY2NqZZs2ZpbXNUbSAxMZFltS1YsECptm7dusV+H+pUN4mj3vBgaZHgQoiTXby9valp06bsZG5paUnz5s3LVv0hQRBYsTxnZ2e1qWNDlJGtpaOjQwDo9evXoo799OlThSKBBgYGNH78eKUFQnPEY+HChQSASpYsqfSA7iZNmhAAGjZsmFLtcLQLLoREggshTk4QBIFOnz5NDg4OCunPkyZN+mkF3ICAAJal9O+//6rI4+zRsmVLAkAzZszI81iCINDFixepVatWCkUCBw0axK/2NYTg4GD2Xd23b59Sbd25c4fNBolRtoKTf+BCSCS4EOLkhrS0NDpw4ABLj8+c7Rg6dCj5+/t/93WrVq0iAGRubq5W/a++bMSanp6eqzESExNp69atCkHQOjo61K1bN/Lz8xPZY44yGTRoEAGgunXrKj2AvXnz5gSAhgwZolQ7HO2DCyGR4EKIkxcEQaAzZ85Qw4YNFWY/evbsmWWH+7S0NKpVqxYBUOilJzXJyclkaWlJQM4bsQYHB9PMmTPZ6zNnycaOHftDUchRT3x9fVk83L1795Rq6/79+yzD7t27d0q1xdE+uBASCS6EOGJx69YttsSUubVu3ZqOHj2qkDb/6NEjdqK5cOGChB4rMm7cOAJAnTt3ztbzHz9+TH369CF9fX22v6VKlaKVK1fmKJCco15kFk9s37690m1l/l4GDRqkdFsc7YMLIZHgQogjNp6entS1a1cWgAxkdOseNGgQXb9+neRyOev+bm9vr7L6PT8jsxGrvr7+dxuxvnjxgubNm0dVqlRREHzOzs509OhRSktLU7HXHDF59uwZ+956eXkp1Za7uzsBIF1dXbVrMMvRDLgQEgkuhDjK4uXLlzRlyhQqUaKEgmgoUaIEjRs3jnXynjZtmtSuMurUqUOAYiPW58+f05w5cxRifzIFU+/evcnDw0NCjzli0qVLlxzNCuaFNm3aEAAaMGCA0m1xtBNeUFEkeEFFjrIRBAG3bt3C3r17cfToUcTGxio8LpPJsG/fPnTu3Bn6+voSeZnB5s2bMWLECJQrVw49e/bE0aNH4evryx7X19dH8+bN0aVLF3To0AGFCxeW0FuOmDx58gQ1a9aEjo4OvL29UaVKFaXZevToEX755RfIZDK8fPkS5cqVU5otjvaS3fM3F0I/gQshjipJTk7G2bNnsW/fPpw9exapqansMSMjIzg5OaFBgwZo0KAB6tevjyJFiijdp9DQUDx69AiPHj3C/fv3cenSJYXHDQwM0Lx5c3Tt2hXt27eHubm50n3iqJ6OHTvi5MmT6NGjBw4cOKBUWx06dMCpU6fQt29f7N69W6m2ONoLF0IiwYUQRyqio6OxZcsWzJw5E4IgZPmc8uXLo379+qhfvz7KlCkDKysrthkaGmbbVnp6OmJjYxETEwN/f388evQIHh4eePToEYKCgrJ8TcmSJbF48WK0a9cOZmZmudpHjmbw+PFj1KlTBzKZDD4+PqhYsaLSbHl5eaFWrVqQyWR48eIFHBwclGaLo91k9/ytp0KfOBxODsjssxUfH4/FixfDzs4OM2bMgIeHB+7fv48XL17g9evXeP36dZZXzYUKFVIQRlZWVhAEATExMYiJiUF0dDS7ndkrLSt0dHTg6OiIX375BXXq1IGBgQGGDRuGyMhItGnThougfMBff/0FAOjdu7dSRRAA1muvR48eXARxVAKfEfoJfEaIIzXx8fGoUKECQkNDsXLlSkyYMAFAxoyRu7s77t27h4cPHyI4OBgRERGIjIxEenp6rmwVKlQIxYoVQ506dZjwqVmzJgoVKsSeQ0SoXr06nj17hjVr1mDs2LGi7CdHPXnw4AHq168PXV1d+Pn5KTVex9vbG9WrV4eOjg58fHzg6OioNFsc7YcvjYkEF0IcdWD79u0YPHgwzMzM4O/v/8PYICJCbGwsIiIivtlkMhkKFy4Mc3NzmJubs9uFCxeGmZlZtoOxN23ahJEjR8LR0RE+Pj7Q0dERa1c5akbz5s1x+fJluLq6Yvv27Uq11aVLFxw7dkwlcUgc7YcLIZHgQoijDsjlctSpUwdPnjzB6NGjsW7dOkn9iYuLQ/HixZGQkIAbN27AxcVFUn84yuH27dv47bffoKenh1evXsHe3l5ptp4/f46qVatCR0cHz549Q+XKlZVmi5M/yO75W6ZCnzgcTi7R1dXFqlWrAGTMxnyZsi4Fpqam6NOnD/OHo51kxgYNGjRIqSII+F9sUJcuXbgI4qgUPiP0E/iMEEedyExhbt26Nc6ePSupL5l1ZfT19REYGAhra2tJ/eGIy/Xr19G4cWMYGBjA398fJUuWVJqtFy9eoEqVKiAieHt7o2rVqkqzxck/8BkhDkcLWb58OfT19XHu3Llv6vmomho1aqBevXpIS0uDm5ubpL5wxIWI2GzQ0KFDlSqCAGDhwoUgIvzxxx9cBHFUDhdCHI4GUb58eYwePRoAMGHChFxnh4nF8OHDAQBbt26FXC6X1BeOeFy+fBl37tyBkZERpk+frlRbfn5+OHjwIABg9uzZSrXF4WQFF0IcjoYxe/ZsWFpawsfHB9u2bZPUl27duqFw4cJ4//49Ll68KKkvHHH4cjZoxIgRKF68uFLtLVq0CESEDh06oEaNGkq1xeFkBRdCHI6GUbhwYcydOxdARjDr173JVEmBAgUwYMAAABl9yDiaz7lz5+Du7o4CBQpg6tSpSrX16tUr7N+/H8D/ArM5HFXDhRCHo4EMGzYMFStWREREBBYtWiS5LwBw9uxZfPjwQVJfOHnjy9mg0aNHKz0AfuHChRAEAW3btkWtWrWUaovD+R5cCHE4Goi+vj5WrFgBAFizZg3evn0rmS8ODg5o3LgxBEHAv//+K5kfnLxz7tw5eHp6wtjYGFOmTFGqrZcvX2Lfvn0AgDlz5ijVFofzI7gQ4nA0lNatW6NZs2ZITU1V+knrZ4wYMQIAsG3bNqSlpUnqCyd3EBGbXRw5cuQPq5eLwYIFCyAIAtq1a4c6deoo1RaH8yN4HaGfwOsIcdSZ58+fo3r16hAEATdv3sRvv/0miR9paWmws7NDaGgojhw5gi5dukjiByf33LhxA40aNYKhoSHev38PGxsbpdny9fVF5cqVQUTw9PREzZo1lWaLk3/hdYQ4nHxAlSpVMGTIEADApEmTINV1jb6+PgYPHgyAV5rWVBYvXgwgo4q0MkUQAMyfPx9EhI4dO3IRxJEcPiP0E/iMEEfdCQ8PR5kyZZCQkIBjx47hjz/+kMSPDx8+wN7eHoIgwM/PDw4ODpL4wck5Hh4ecHJygq6uLvz9/VG6dGml2fLx8UHVqlVBRHjy5AmqV6+uNFuc/A2fEeJw8glFixbFn3/+CQCYNWuWZEUW7ezs0KZNGwDAli1bJPGBkzsyZ4P69OmjVBEEAPPmzWNVpLkI4qgDfEboJ/AZIY4mEBsbizJlyiAqKgpubm4YOHCgJH6cO3cObdq0QeHChREUFIQCBQpI4gcn+3zZ9f3FixeoWLGi0mw9e/YM1apVAwA8ffqU3eZwlAGfEeJw8hFmZmasFcLcuXORnJwsiR8tWrRA6dKlER0djSNHjkjiAydnLF26FADQuXNnpYogIGM2CAC6du3KRRBHbeBCiMPREkaNGgVbW1t8+PBBsirPurq6GDp0KAAeNK0JvHnzBgcOHAAAzJgxQ6m2nj59imPHjkFHR4fXDeKoFVwIcThaQoECBdgJZtGiRYiPj5fED1dXV+jr6+PBgwd48uSJJD5wsseyZcsgCAJatWql9OytzLYw3bp1Q+XKlZVqi8PJCVwIcThaxMCBA1G+fHlERkZi9erVkvhgbW3NMtfWr18viQ+cnxMUFISdO3cCUP5skJeXF06cOAEdHR3eU4yjdnAhxOFoEXp6eli4cCEAYMWKFYiMjJTEj7FjxwIA9u7di/DwcEl84PyYlStXIjU1Fb/++iucnZ2VaitzNqhHjx6oVKmSUm1xODmFCyEOR8vo0qULatasifj4eCxZskQSH+rXr4+6desiJSWFxwqpIZGRkazEwcyZM5Vq6/Hjxzh16hRkMhmfDeKoJVwIcThahkwmYwJow4YNCAwMVLkPOjo6mDBhAvMhKSlJ5T5wvs+aNWuQmJiI2rVro3nz5kq1lRm31qtXL6VnpXE4uYELIQ5HC2nevDlcXFyQkpLCUpZVzR9//AE7OztERESwLuMc6YmNjcW6desAZMQG6ejoKM3Ww4cPcfbsWchkMsyePVtpdjicvMCFEIejhejo6LBZoR07dsDPz0/lPujp6WHcuHEAgFWrVknWB42jyKZNmxAbGwtHR0d07NhRqbYyY4P69OmDChUqKNUWh5NbNEYIRUVFoXfv3jA1NYW5uTkGDRqEz58///D5Y8aMgYODAwoUKAA7OzuMHTsWsbGxKvSaw5GO+vXro3379hAEQbKr8cGDB8PExAS+vr64ePGiJD5w/kdiYiJWrVoFAJg+fTpkMuWdAh48eIDz589DV1eXzwZx1BqNEUK9e/eGj48PLl++jDNnzuDWrVuscFtWBAcHIzg4GCtWrMDz58+xc+dOXLhwAYMGDVKh1xyOtCxatAg6Ojo4evQoHj16pHL7pqamGDJkCACwEzBHOrZv346IiAiULl0aPXr0UKqtzMDofv36oVy5ckq1xeHkCdIAXrx4QQDIw8OD3Xf+/HnS0dGhoKCgbI9z+PBhMjAwoLS0tGy/JjY2lgBQbGxsjnzmcNSFvn37EgBq1qyZJPbfv39PMpmMAJC3t7ckPnCIUlJSqGTJkgSANm3apFRbV69eJQCkr69Pb968UaotDud7ZPf8rREzQvfv34e5uTnq1KnD7mvatClkMhnc3d2zPU5m4zU9Pb3vPiclJQVxcXEKG4ejycybNw/6+vq4fPkyrl+/rnL7pUqVQpcuXQDwWSEp2bdvHwIDA2FjY4MBAwYozQ4Rsb53w4YNQ5kyZZRmi8MRA40QQqGhoShatKjCfXp6erCwsEBoaGi2xoiMjMSCBQt+uJwGAEuWLIGZmRnbSpYsmWu/ORx1wN7eHsOGDQOQERdCEgQtZ6bS79u3DyEhISq3n9+Ry+X4+++/AWR8FkZGRkqzdeLECTx8+BDGxsaYNWuW0uxwOGIhqRCaNm0adHR0friJke0SFxeHNm3aoFKlSiyL4XtMnz4dsbGxbJOiBguHIzazZs1CwYIF4e7ujrNnz6rcft26ddGgQQOkpaVh48aNKref3zl58iRevnwJc3NzJoqVQXp6OivQOH78eFhbWyvNFocjFpIKoYkTJ8LX1/eHW5kyZWBjY/NNmf709HRERUXBxsbmhzbi4+PRsmVLmJiY4Pjx49DX1//h8w0NDWFqaqqwcTiajrW1NcaMGQMAmD17NgRBULkPmbNCmzZtQmJiosrt51eICEuXLgUAjBo1SqnHtD179sDX1xcWFhaYPHmy0uxwOKKiioClvJIZLP3o0SN238WLF38aLB0bG0v16tUjFxcXSkhIyJVtHizN0RYiIyPJxMSEANDRo0dVbj89PZ3s7e0JAG3evFnl9vMrV65cIQBUoEABCg8PV5qdpKQksrOzIwC0fPlypdnhcLKLVgVLOzo6omXLlhgyZAgePnyIu3fvYvTo0ejRoweKFy8OIKOTcsWKFfHw4UMAGcthzZs3R0JCArZv3464uDiEhoYiNDQUcrlcyt3hcCTB0tISf/75J4CMtgeq/h3o6upi/PjxAIDVq1dLMiuVH8mcDRo0aBCsrKyUZmfz5s348OEDbG1tMWrUKKXZ4XBER0XCLM98+vSJevbsSYUKFSJTU1MaOHAgxcfHs8ffvXtHAOj69etERHT9+nUCkOX27t27bNvlM0IcbSI6OprMzc0JAO3bt0/l9uPi4sjMzIwA0OnTp1VuP7/h4eFBAEhXV5fev3+vNDuxsbFUpEgRAkBbt25Vmh0OJydo1YwQAFhYWGD//v2Ij49HbGws3NzcUKhQIfZ46dKlQUT4/fffAQC///47iCjLrXTp0tLsBIcjMebm5ix2Y+7cuUhPT1epfRMTE5a5yVPplU/mbFCvXr1QqlQppdlZtWoVIiMjUaFCBQwcOFBpdjgcZaBDxBsA/Yi4uDiYmZmxGkQcjqbz+fNn2NvbIzIyEm5ubio/cQUGBsLe3h5yuRyenp6oWbOmSu3nF16+fAlHR0cQEZ4/f47KlSsrxU5ERATKlCmDz58/4/Dhw+jatatS7HA4OSW752+NmRHicDjiUKhQIUybNg0AMH/+fKSmpqrUfsmSJdGtWzcAGbFCHOWwbNkyEBHat2+vNBEEAIsXL8bnz59Ru3ZtdO7cWWl2OBxlwWeEfgKfEeJoI4mJiShbtixCQ0OxadMmDB8+XKX2Hz16hF9++QV6enp4//49bG1tVWpf2/n48SPKlCmDtLQ03Lt3D/Xr11eKnYCAAFSoUAGpqam4ePEimjdvrhQ7HE5u4DNCHA7nuxQsWJAVvlu4cCGSk5NVar9OnTr49ddfkZ6ejvXr16vUdn5g1apVSEtLg4uLi9JEEJDRviU1NRWNGjVCs2bNlGaHw1EmXAhxOPmUIUOGoGTJkggKCsKWLVtUbn/ixIkAgA0bNiAqKkrl9rWVT58+YevWrQDAlkCVwYsXL7Br1y4AGa2JdHR0lGaLw1EmXAhxOPkUQ0NDzJ49G0DGiSwhIUGl9tu1a4fq1asjPj4eK1euVKltbWb9+vVISEhAjRo10KJFC6XZmTVrFgRBQKdOnVC3bl2l2eFwlA0XQhxOPmbAgAEoU6YMwsLCsGHDBpXalslkrPff2rVrERkZqVL72khCQgLWrl0L4H+9HJWBu7s7jh8/DplMhoULFyrFBoejKrgQ4nDyMfr6+pgzZw6AjCyjuLg4ldrv0KEDatasic+fP/NZIRHYtm0boqKiULZsWXTp0kUpNogI06dPBwD069cPlSpVUoodDkdVcCHE4eRzevfuDQcHB3z69Alr1qxRqW0dHR02K7Ru3TpERESo1L42kZqaihUrVgAApkyZAl1dXaXYOXnyJK5fvw5DQ0P22XH+r707j4uq+v8H/poRGEACAxcgzQ+4YBmJjoJoiSuQpaBmhWjmghuWJJVmC6mVG6WfFLcsaFFLU/SjfpSvErgBiogbgh9FFDfU1Nh3zu8Pfs5DU4GBmXuBeT0fj3k86nLvOe/jZZjX48y591JDxiBEZOCaNGmCuXPnAgC++eYb3Lt3T9L+hwwZArVajfz8fM0HOWlvw4YNuHr1Kuzs7DB27Fi99FFcXKxZ5B4cHKzXu1UTSYVBiIgwcuRIODs7Izs7W/JHXzw4K7RixQrcunVL0v4bg4qKCixatAgA8P7770OlUumln2XLluHixYuws7PTfD1G1NAxCBERlEol5s2bB6Dyw07qr6heffVV9OjRAwUFBVi8eLGkfTcG27dvR1paGpo1a4bJkyfrpY8bN25oFkYvWrTooWc9EjVkDEJEBKBy4bJarUZeXp5mdkEqD84KrVy5EllZWZL235AJITQBJTAwUG93wJ8zZw7y8vLg6uoKf39/vfRBJAcGISICUBlGvvrqKwCVX1Fdu3ZN0v5feeUVuLm5obCwkLNCWtizZw+OHz8Oc3NzBAUF6aWPxMREREREAAD+/e9/Q6nkRwc1HvxtJiINT09PvPzyyyguLpb8/jAPzgqtWrUKN27ckLT/hkgIgfnz5wMApk6diubNm+uljxkzZgAARo8ejZ49e+q8DyI5MQgRkcaDs0Lr1q3DxYsXJe3fy8sLPXv2RFFRkeRfzzVEMTExiI+Ph0qlwgcffKCXPjZu3Ij4+HiYm5tj4cKFeumDSE4MQkT0kJdffhne3t4oKyuT/D4xCoVCcyn/6tWrcf36dUn7b2juz9oFBATA1tZW5+3n5+dj1qxZACrXCD3zzDM674NIbgxCRPSI+x+wv/76K1JSUiTte9CgQejVqxeKi4s5A1GFw4cPIyYmBsbGxvjoo4/00sfixYtx9epVtG3bFjNnztRLH0RyYxAiokeo1WqMGDECQgh8/vnnkvb94KzQ2rVrJV+03VDcD6vvvPMO2rRpo/P2L1++rFm0HhoaCjMzM533QVQfMAgR0WPNmzcPSqUSW7duxbFjxyTte8CAAXjppZdQXFyMBQsWSNp3Q5CYmIg9e/agSZMmmD17tl76mDVrFoqKiuDh4YERI0bopQ+i+oBBiIge6/nnn8fo0aMBAJ9++qmkfT84K/T999/jypUrkvZf391f0O7v7w9HR0edt3/w4EH8/vvvUCgUWLZsmd6eYk9UHzAIEdETffHFFzA2NkZUVBQOHDggad/9+vWDh4cHSkpKOCv0gFOnTmH79u1QKBSYM2eOztsvLy/XXC4fEBAAFxcXnfdBVJ8wCBHREzk4OGDixIkAgE8++QRCCMn6/ues0NmzZyXruz67Pxv0xhtvwMnJSeftR0REIDk5GZaWlpp7FBE1ZgxCRFSlTz/9FKampjh06BD27Nkjad8eHh4YOnQoysrK8N5770kaxOqj1NRUbN68GUBlMNW1e/fuaWaZQkJC0LJlS533QVTfMAgRUZXs7e0xffp0AJUfvhUVFZL2v3TpUqhUKkRHR2PLli2S9l3fLFiwAEII+Pr6wtnZWeftBwcH49atW3ByctKcc6LGjkGIiKo1a9YsPPXUU0hOTsbWrVsl7dvR0VFzU7+ZM2ciPz9f0v7ri/T0dGzYsAGAfhavR0VFITw8HAqFAj/88ANMTEx03gdRfcQgRETVat68ueaGep999hnKy8sl7X/27Nn417/+hStXruDrr7+WtO/6YuHChSgvL8crr7wCtVqt07ZzcnIQEBAAAHj33XfRu3dvnbZPVJ8xCBFRjcycORPW1tZIS0vDr7/+KmnfZmZmWLp0KYDKm/udP39e0v7llpmZiZ9++glAZRDVtdmzZ+PKlStwcHAw2KBJhotBiIhqxNLSUnPzvi+++AIlJSWS9u/j4wMvLy+UlJRgxowZBrVwevHixSgtLUX//v3h7u6u07ZjY2OxatUqAJVX5zVt2lSn7RPVdwxCRFRjgYGBsLOzw6VLl7B69WpJ+1YoFPjuu+9gbGyM3bt3Y8eOHZL2L5cbN25g3bp1AHQ/G1RQUKC5PcKkSZMwYMAAnbZP1BAwCBFRjZmbm2ueSD937lzcu3dP0v47duyI4OBgAEBQUBAKCwsl7V8OS5YsQXFxMXr37g0PDw+dtv3ZZ58hPT0drVu31jxXjMjQMAgRkVbGjx+Pzp074+7du5qb+0npk08+QevWrZGRkYElS5ZI3r+UMjMzsXLlSgCVoUWXj7pISEjQrLtas2YNrKysdNY2UUPCIEREWjEyMkJoaCgAYPny5bh48aKk/VtYWOCbb74BUHlfnYyMDEn7l9IXX3yB4uJieHh4wNPTU2ftFhcXY/z48RBCYMyYMRg8eLDO2iZqaBiEiEhr3t7e8PT0RElJid6efl6VkSNHol+/figqKtJc1t/YnD17VnOl2MKFC3U6GzR//nykpqaiVatWWLZsmc7aJWqIGISIqFZCQ0OhVCqxefNmxMXFSdq3QqHA8uXLYWRkhG3btkn+6A8pzJkzBxUVFRg2bBh69uyps3aTk5OxcOFCAMDKlSthbW2ts7aJGiIGISKqFWdnZ4wfPx5A5aMZpL6cvXPnznjvvfcAAO+99x6Ki4sl7V+f4uLisH37diiVSp2uwyotLcW4ceNQXl6OkSNHYvjw4Tprm6ihYhAiolqbP38+mjZtioSEBGzatEny/kNCQtCqVSucP39es/C3oRNCaL5uHDduHJ577jmdtb1o0SKcPHkSNjY2WL58uc7aJWrIGISIqNZsbW01zwGbNWsWioqKJO3f0tJSc+XY/PnzG8Udp3fv3o2DBw/C1NRUc6sCXTh58iTmzZsHAPj3v/+NVq1a6axtooaMQYiI6iQ4OBjPPPMMLl++jO+++07y/kePHo1+/fqhoKAAb7zxhuRhTJcqKirw8ccfA6h85lfr1q110u7du3cxbNgwlJaWYsiQIRg1apRO2iVqDBiEiKhOzM3NNetYvvrqK9y+fVvS/hUKBX799Ve0aNECJ06caNBXkW3YsAGnTp2ClZWVzq7GKy8vx6hRo5CRkQEHBwdERETo9Ao0ooaOQYiI6mzMmDHo2rUrcnJyMHfuXMn7t7e3xy+//AIAWLVqlSzrleqquLhY8wiNWbNm6exqrpCQEERFRcHMzAyRkZG8SozoHxiEiKjOlEql5iaHq1evRlpamuQ1eHl5ab5WmjhxItLT0yWvoS7WrFmDS5cuwc7ODjNmzNBJm9u2bdPM1n3//ffo0qWLTtolakwYhIhIJ/r164chQ4agvLwcH330kSw1zJs3Dy+99BJyc3PxxhtvNJhL6nNzc/Hll18CqJzBMTc3r3ObaWlpePvttwEAM2bMgL+/f53bJGqMGISISGcWL16MJk2aYMeOHYiJiZG8fyMjI2zcuBE2NjY4fvw4PvjgA8lrqI1vvvkGt2/fRocOHTT3ZqqLnJwcDBs2DLm5ufDw8Gj0z2QjqosGE4Tu3r0Lf39/WFpaolmzZpgwYQLy8vKqPGby5Mlo164dzMzM0KJFC/j4+MgyZU9kKDp16oQpU6YAqLyarKKiQvIaWrdurVkvtGLFCmzZskXyGrRx69YtzdeKX331FYyNjevUXkVFBd555x2kpaXhmWeewe+//17nNokaswYThPz9/ZGSkoK9e/di586dOHDgACZNmlTlMWq1GuHh4UhNTUVUVBSEEPD09ER5eblEVRMZnpCQEFhaWiI5ORkRERGy1PDKK69ovp6bMGGC5A+G1caXX36JvLw8dO/eHa+//nqd21u4cCEiIyNhYmKCLVu28H5BRNURDcDZs2cFAJGYmKjZtnv3bqFQKMS1a9dq3M7JkycFAHHhwoUaH5OdnS0AiOzsbK1qJjJkS5YsEQCEtbW1uHnzpiw1lJSUiF69egkAonv37qKoqEiWOqqSnp4ujI2NBQCxb9++Ore3Z88eoVAoBACxdu1aHVRI1HDV9PO7QcwIxcfHo1mzZujevbtm28CBA6FUKnHkyJEatZGfn4/w8HA4ODigTZs2T9yvuLgYOTk5D72ISDszZsyAi4sL7t69q7MroLRlbGyMjRs34umnn8axY8c0d8CuTz7//HOUlpZi0KBBGDBgQJ3aunjxIvz8/CCEQEBAAAICAnRUJVHj1iCCUFZWFlq2bPnQNiMjI1hbWyMrK6vKY1euXAkLCwtYWFhg9+7d2Lt3L0xMTJ64/4IFC2BlZaV5VRWaiOjxjI2NsW7dOiiVSvz222/YuXOnLHU8++yz+OmnnwBUPlZi27ZtstTxOLGxsVi/fj2Ayr87dVFQUIDhw4fj3r17cHV15XPEiLQgaxCaPXs2FApFla+6Lm729/dHcnIy9u/fj44dO1Z7C/6PP/4Y2dnZmteVK1fq1D+RoVKr1QgODgYATJ06VbbZ1SFDhmjqGDduXL24YKKwsFCzxnHKlClQq9W1bis/Px++vr44efIkWrZsiS1btkClUumqVKJGTyGEEHJ1fvv2bdy5c6fKfRwdHfHrr78iODgY9+7d02wvKyuDqakpNm/ejGHDhtWov5KSEjz99NNYt24d/Pz8anRMTk4OrKyskJ2dDUtLyxodQ0SVCgoK8OKLLyI9PR3Tpk1DWFiYLHWUlpaiT58+SEhIQMuWLREdHY0XXnhBlloA4JNPPsHXX38NOzs7pKamwsrKqlbtZGdn47XXXsOhQ4fQtGlT7NmzBy+99JKOqyVqmGr8+S3FgqW6ur9Y+tixY5ptUVFRWi+WLioqEmZmZiI8PLzGx3CxNFHdREdHCwACgDh06JBsddy+fVu4uLgIAMLGxkYkJSXJUsfJkyeFkZGRACC2bNlS63b++usvoVarBQBhZWUl4uLidFglUcPXqBZLP/fcc/D29kZAQACOHj2Kw4cPY/r06Xjrrbdgb28PALh27Ro6deqEo0ePAqhcOLhgwQIkJSUhMzMTcXFxGDlyJMzMzDB48GA5h0NkUPr376+5SeDEiRNlezp88+bN8eeff6JHjx64c+cO+vfvX+OLLXSlvLwcAQEBKCsrg6+vL4YPH16rdrKystC3b18kJSWhefPmiImJgbu7u46rJTIMDSIIAcD69evRqVMnDBgwAIMHD8ZLL72EtWvXan5eWlqKc+fOoaCgAABgamqKgwcPYvDgwWjfvj3efPNNPPXUU4iLi3tk4TUR6VdoaChsbW2RlpaGr7/+WrY6nn76aezbtw+9e/dGdnY2Bg4ciIMHD0rWf1hYGI4ePQpLS0usWLGiVm1kZmbi5ZdfxpkzZ2BnZ4f9+/eja9euOq6UyHDIukaoIeAaISLd2LJlC15//XUYGRnh+PHjcHZ2lq2WvLw8DB06FDExMTA3N8d//vOfOl++Xp3MzEw8//zzyM/Px8qVKzF16lSt2zh//jwGDhyIzMxMtG3bFtHR0WjXrp0eqiVq+Gr6+d1gZoSIqGEbPnw4fH19UVZWhokTJ8p6h3cLCwvs2rUL3t7eKCgowKuvvordu3frrT8hBKZNm4b8/Hz07t0bkydP1rqNM2fOoE+fPsjMzETHjh1x8OBBhiAiHWAQIiJJKBQKhIWFwdLSEkePHpX9XjdmZmbYtm0bhg4diuLiYvj4+GD79u166WvTpk3YtWsXjI2NsXbtWiiV2v3pTUpKgoeHB7KysvDiiy/iwIEDvMcZkY4wCBGRZOzt7TVPQv/kk09w6dIlWetRqVT4448/MHLkSJSWluL111/Hpk2bdNrHvXv38N577wEA5syZg+eff16r4/fu3Yv+/fvj7t27cHV1RUxMDJ8fRqRDDEJEJKmJEyfCw8MDBQUFmDx5MuRepmhsbIwNGzZgzJgxKCsrg5+fH0JCQjQXXtTVhx9+iFu3bqFTp074+OOPa3zc9evXMWrUKHh6eiInJwd9+vTB3r17YW1trZO6iKgSgxARSUqpVGLt2rVQqVT4v//7P/z8889ylwQjIyNEREQgICAAFRUVmDdvHpycnLBx48Y6BbXY2Fj88MMPAIDvv/++Rnd8Li0txbfffqvpX6FQYNq0adi9ezcv2CDSAwYhIpJcx44d8cUXXwAApk2bhpMnT8pbECoD2po1a7Bp0ya0bdsWV69exahRo/Dyyy/j2LFjWrf34GM0Jk+eXKM7Pt+/FD44OBh5eXlwc3PDsWPHEBYWBnNzc61rIKLqMQgRkSw++OADDBo0CAUFBfDx8cHt27flLgkKhQIjR45Eamoq5s+fD3Nzcxw+fBiurq4YP358tQ95ftCXX36J8+fPw87ODosWLapy3xs3bmD06NHo27cvUlJSYGNjg3Xr1iEuLg7dunWr67CIqAoMQkQkCyMjI/z+++9o3749Ll++jNdffx0lJSVylwWg8oqyTz/9FP/73/8wevRoCCEQHh6ODh06YNGiRSguLq7y+JiYGCxevBgAsGLFiic+S6ysrAzLli2Dk5MT1q9fD4VCgalTp+J///sfJkyYoPXVZUSkPd5QsRq8oSKRfqWmpsLNzQ25ubmYMmUKVq1aJXdJj0hISEBQUJDmkRyOjo4YO3YsnJ2d4ezsDEdHR01oOXfuHNzd3XHv3j2MGjUK69ev17STm5uLxMREJCQkID4+HgkJCfjrr78AAK6urggLC0P37t2lHyBRI1TTz28GoWowCBHp365duzBkyBAIIWp912V9q6iowIYNGzBr1ixcv379oZ+Zm5ujc+fO6NixI/bs2YM7d+6gW7du+PHHH5GcnKwJPWfOnEFFRcVDx9rY2GDhwoUYP348Z4CIdIhBSEcYhIiksWjRIsyePRtGRkbYu3cv+vbtK3dJj5WXl4eIiAgkJibi9OnTOHv2bLVflT2obdu26NmzJ9zd3dGzZ0+4uLjU6GoyItIOg5COMAgRSUMIgdGjR2PDhg2wsbFBYmIiHBwc5C6rWmVlZTh//jymTJmCAwcOwMjICHZ2drh69SpUKhV69OihCT5ubm6wt7eXu2Qig1DTz28jCWsiInoihUKBdevW4dy5c0hKSoKPjw/i4uJgYWEhd2lVMjIywtatW3HgwAE0adIEO3fuhJeXFwoLC2FkZARjY2O5SySiKvALaSKqN+4//6tVq1Y4ffo03n777UfW1NQ3mzZtwqeffgoAWL58Oby8vABUjoUhiKj+YxAionqldevWiIyMhImJCSIjIzFv3jy5S3qihIQEvP322wCAoKCgernIm4iqxiBERPWOu7s7Vq9eDQCYO3cu/vjjD5kretSlS5fg4+OD4uJivPbaawgNDZW7JCKqBQYhIqqXxo0bh6CgIACAn58fVqxYIfsDWu/Lzs7Ga6+9hlu3bqFLly7YuHEjmjRpIndZRFQLDEJEVG8tWbIE/v7+KCsrw7vvvovx48ejqKhI1ppKSkrw5ptvIiUlBXZ2dtixY0e9X9BNRE/GIERE9ZaRkRF++eUXfPPNN1AqlYiIiECfPn1w9epVWepJTU1Fz549ERUVBXNzc+zYsQNt2rSRpRYi0g0GISKq1xQKBWbOnImoqChYW1sjMTERarUaBw8elKyG+3e87tatG5KTk2FjY4PIyEio1WrJaiAi/WAQIqIGYeDAgTh27Bi6dOmCW7duoX///ggLC9P7uqGbN29iyJAhCAwMRFFRETw9PXHq1Cl4enrqtV8ikgaDEBE1GA4ODoiLi4Ofnx/Kysowffp0TJgwQW/rhnbt2oUXX3wRu3btgkqlwrJly7B7927eHZqoEWEQIqIGxdzcHOvXr0doaCiUSiXCw8Ph4eGh03VDBQUFCAwM1FwZ5uzsjMTERMyYMYMPRiVqZPiOJqIGR6FQIDg4GHv27IG1tTWOHj2K559/Hn5+fti8eTPy8vJq3XZycjLUajVWrlwJAHj//fdx9OhRODs766p8IqpH+NDVavChq0T1W0ZGBkaMGIHk5GTNNpVKhUGDBmHYsGEYOnQomjdv/thjy8vLkZaWhuPHjyMpKQnHjx9HfHw8ysrKYGdnh59++gmDBg2SaihEpEN8+ryOMAgR1X8VFRU4evQoIiMjsXXrVly4cEHzM6VSiT59+mDYsGFwc3PD2bNnNaHnxIkTKCwsfKS94cOHY+3atbCxsZFyGESkQwxCOsIgRNSwCCGQkpKiCUUnTpyocv+mTZuia9euUKvV6NatG3r06IHnnntOmmKJSG8YhHSEQYioYcvIyMC2bdsQGRmJtLQ0dO7cGd26ddMEnw4dOvDxGESNEIOQjjAIERERNTw1/fzmVWNERERksBiEiIiIyGAxCBEREZHBYhAiIiIig8UgRERERAaLQYiIiIgMFoMQERERGSwGISIiIjJYDEJERERksBiEiIiIyGAxCBEREZHBYhAiIiIig8UgRERERAaLQYiIiIgMlpHcBdR3QggAQE5OjsyVEBERUU3d/9y+/zn+JAxC1cjNzQUAtGnTRuZKiIiISFu5ubmwsrJ64s8VorqoZOAqKipw/fp1PPXUU1AoFDprNycnB23atMGVK1dgaWmps3brk8Y+xsY+PqDxj5Hja/ga+xg5vtoTQiA3Nxf29vZQKp+8EogzQtVQKpVo3bq13tq3tLRslL/cD2rsY2zs4wMa/xg5voavsY+R46udqmaC7uNiaSIiIjJYDEJERERksBiEZKJSqRASEgKVSiV3KXrT2MfY2McHNP4xcnwNX2MfI8enf1wsTURERAaLM0JERERksBiEiIiIyGAxCBEREZHBYhAiIiIig8UgJJFLly5hwoQJcHBwgJmZGdq1a4eQkBCUlJRUeVxRURECAwNhY2MDCwsLjBgxAjdv3pSoau189dVX6NWrF8zNzdGsWbMaHfPOO+9AoVA89PL29tZvoXVQmzEKIfD555/Dzs4OZmZmGDhwIM6fP6/fQmvp7t278Pf3h6WlJZo1a4YJEyYgLy+vymP69u37yDmcMmWKRBVXLywsDP/6179gamoKNzc3HD16tMr9N2/ejE6dOsHU1BTOzs7473//K1GltaPN+CIiIh45V6amphJWq50DBw5gyJAhsLe3h0KhwLZt26o9JjY2Ft26dYNKpUL79u0RERGh9zrrQtsxxsbGPnIOFQoFsrKypClYCwsWLECPHj3w1FNPoWXLlvD19cW5c+eqPU7q9yCDkETS0tJQUVGBNWvWICUlBUuXLsXq1asxZ86cKo97//33sWPHDmzevBn79+/H9evXMXz4cImq1k5JSQlGjhyJqVOnanWct7c3bty4oXlt3LhRTxXWXW3GuHjxYnz33XdYvXo1jhw5gqZNm8LLywtFRUV6rLR2/P39kZKSgr1792Lnzp04cOAAJk2aVO1xAQEBD53DxYsXS1Bt9X7//XfMnDkTISEhOH78OLp06QIvLy/cunXrsfvHxcXBz88PEyZMQHJyMnx9feHr64szZ85IXHnNaDs+oPIOvg+eq8uXL0tYsXby8/PRpUsXhIWF1Wj/jIwMvPrqq+jXrx9OnDiBoKAgTJw4EVFRUXqutPa0HeN9586de+g8tmzZUk8V1t7+/fsRGBiIhIQE7N27F6WlpfD09ER+fv4Tj5HlPShINosXLxYODg5P/Pnff/8tjI2NxebNmzXbUlNTBQARHx8vRYm1Eh4eLqysrGq079ixY4WPj49e69GHmo6xoqJC2NraiiVLlmi2/f3330KlUomNGzfqsULtnT17VgAQiYmJmm27d+8WCoVCXLt27YnHeXh4iBkzZkhQofZcXV1FYGCg5v/Ly8uFvb29WLBgwWP3f+ONN8Srr7760DY3NzcxefJkvdZZW9qOT5v3Zn0DQERGRla5z0cffSQ6d+780LY333xTeHl56bEy3anJGGNiYgQAce/ePUlq0qVbt24JAGL//v1P3EeO9yBnhGSUnZ0Na2vrJ/48KSkJpaWlGDhwoGZbp06d8OyzzyI+Pl6KEiURGxuLli1bwsnJCVOnTsWdO3fkLklnMjIykJWV9dA5tLKygpubW707h/Hx8WjWrBm6d++u2TZw4EAolUocOXKkymPXr1+P5s2b44UXXsDHH3+MgoICfZdbrZKSEiQlJT30b69UKjFw4MAn/tvHx8c/tD8AeHl51btzBdRufACQl5eHtm3bok2bNvDx8UFKSooU5UqiIZ2/unJxcYGdnR0GDRqEw4cPy11OjWRnZwNAlZ97cpxDPnRVJhcuXMDy5csRGhr6xH2ysrJgYmLyyFqUVq1a1cvvg2vD29sbw4cPh4ODA9LT0zFnzhy88soriI+PR5MmTeQur87un6dWrVo9tL0+nsOsrKxHpteNjIxgbW1dZa2jRo1C27ZtYW9vj1OnTmHWrFk4d+4ctm7dqu+Sq/TXX3+hvLz8sf/2aWlpjz0mKyurQZwroHbjc3Jywo8//ogXX3wR2dnZCA0NRa9evZCSkqLXh0tL5UnnLycnB4WFhTAzM5OpMt2xs7PD6tWr0b17dxQXF2PdunXo27cvjhw5gm7dusld3hNVVFQgKCgIvXv3xgsvvPDE/eR4D3JGqI5mz5792IVrD77++Ufp2rVr8Pb2xsiRIxEQECBT5TVTm/Fp46233sLQoUPh7OwMX19f7Ny5E4mJiYiNjdXdIKqh7zHKTd/jmzRpEry8vODs7Ax/f3/8/PPPiIyMRHp6ug5HQbrg7u6Ot99+Gy4uLvDw8MDWrVvRokULrFmzRu7SqIacnJwwefJkqNVq9OrVCz/++CN69eqFpUuXyl1alQIDA3HmzBn89ttvcpfyCM4I1VFwcDDeeeedKvdxdHTU/Pf169fRr18/9OrVC2vXrq3yOFtbW5SUlODvv/9+aFbo5s2bsLW1rUvZNabt+OrK0dERzZs3x4ULFzBgwACdtVsVfY7x/nm6efMm7OzsNNtv3rwJFxeXWrWprZqOz9bW9pFFtmVlZbh7965Wv29ubm4AKmc927Vrp3W9utK8eXM0adLkkassq3r/2NraarW/nGozvn8yNjZG165dceHCBX2UKLknnT9LS8tGMRv0JK6urjh06JDcZTzR9OnTNRdfVDfzKMd7kEGojlq0aIEWLVrUaN9r166hX79+UKvVCA8Ph1JZ9YScWq2GsbExoqOjMWLECACVVwpkZmbC3d29zrXXhDbj04WrV6/izp07D4UGfdPnGB0cHGBra4vo6GhN8MnJycGRI0e0vrqutmo6Pnd3d/z9999ISkqCWq0GAPz555+oqKjQhJuaOHHiBABIeg4fx8TEBGq1GtHR0fD19QVQOT0fHR2N6dOnP/YYd3d3REdHIygoSLNt7969kr3ftFGb8f1TeXk5Tp8+jcGDB+uxUum4u7s/cql1fT1/unTixAnZ32+PI4TAu+++i8jISMTGxsLBwaHaY2R5D+ptGTY95OrVq6J9+/ZiwIAB4urVq+LGjRua14P7ODk5iSNHjmi2TZkyRTz77LPizz//FMeOHRPu7u7C3d1djiFU6/LlyyI5OVnMnTtXWFhYiOTkZJGcnCxyc3M1+zg5OYmtW7cKIYTIzc0VH3zwgYiPjxcZGRli3759olu3bqJDhw6iqKhIrmFUSdsxCiHEwoULRbNmzcT27dvFqVOnhI+Pj3BwcBCFhYVyDKFK3t7eomvXruLIkSPi0KFDokOHDsLPz0/z83/+jl64cEHMmzdPHDt2TGRkZIjt27cLR0dH0adPH7mG8JDffvtNqFQqERERIc6ePSsmTZokmjVrJrKysoQQQowZM0bMnj1bs//hw4eFkZGRCA0NFampqSIkJEQYGxuL06dPyzWEKmk7vrlz54qoqCiRnp4ukpKSxFtvvSVMTU1FSkqKXEOoUm5uruY9BkB8++23Ijk5WVy+fFkIIcTs2bPFmDFjNPtfvHhRmJubiw8//FCkpqaKsLAw0aRJE7Fnzx65hlAtbce4dOlSsW3bNnH+/Hlx+vRpMWPGDKFUKsW+ffvkGsITTZ06VVhZWYnY2NiHPvMKCgo0+9SH9yCDkETCw8MFgMe+7svIyBAARExMjGZbYWGhmDZtmnj66aeFubm5GDZs2EPhqT4ZO3bsY8f34HgAiPDwcCGEEAUFBcLT01O0aNFCGBsbi7Zt24qAgADNH/H6SNsxClF5Cf1nn30mWrVqJVQqlRgwYIA4d+6c9MXXwJ07d4Sfn5+wsLAQlpaWYty4cQ+FvH/+jmZmZoo+ffoIa2troVKpRPv27cWHH34osrOzZRrBo5YvXy6effZZYWJiIlxdXUVCQoLmZx4eHmLs2LEP7b9p0ybRsWNHYWJiIjp37ix27dolccXa0WZ8QUFBmn1btWolBg8eLI4fPy5D1TVz/1Lxf77uj2ns2LHCw8PjkWNcXFyEiYmJcHR0fOi9WB9pO8ZFixaJdu3aCVNTU2FtbS369u0r/vzzT3mKr8aTPvMePCf14T2o+P/FEhERERkcXjVGREREBotBiIiIiAwWgxAREREZLAYhIiIiMlgMQkRERGSwGISIiIjIYDEIERERkcFiECIiIiKDxSBEREREBotBiIiIiAwWgxAREREZLAYhIjIot2/fhq2tLb7++mvNtri4OJiYmCA6OlrGyohIDnzoKhEZnP/+97/w9fVFXFwcnJyc4OLiAh8fH3z77bdyl0ZEEmMQIiKDFBgYiH379qF79+44ffo0EhMToVKp5C6LiCTGIEREBqmwsBAvvPACrly5gqSkJDg7O8tdEhHJgGuEiMggpaen4/r166ioqMClS5fkLoeIZMIZISIyOCUlJXB1dYWLiwucnJywbNkynD59Gi1btpS7NCKSGIMQERmcDz/8EH/88QdOnjwJCwsLeHh4wMrKCjt37pS7NCKSGL8aIyKDEhsbi2XLluGXX36BpaUllEolfvnlFxw8eBCrVq2SuzwikhhnhIiIiMhgcUaIiIiIDBaDEBERERksBiEiIiIyWAxCREREZLAYhIiIiMhgMQgRERGRwWIQIiIiIoPFIEREREQGi0GIiIiIDBaDEBERERksBiEiIiIyWP8PkUsWjM4y9roAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ], + "source": [ + "variance = 1.0\n", + "\n", + "plt.figure()\n", + "x_pred = np.linspace(-2, 2, 50)\n", + "for i in range(7):\n", + " rnd_var = variance * np.random.randn(num_layers, 7)\n", + " predictions = [quantum_neural_net(rnd_var, x_) for x_ in x_pred]\n", + " plt.plot(x_pred, predictions, color=\"black\")\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"f(x)\")\n", + "plt.tick_params(axis=\"both\", which=\"major\")\n", + "plt.tick_params(axis=\"both\", which=\"minor\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I3YGFq3rfWuq" + }, + "source": [ + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V_KB0XdPfWuq" + }, + "source": [ + "About the author\n", + "================\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.17" + }, + "colab": { + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}