diff --git a/challenges/QOSF challenge/QOSF_challenge.ipynb b/challenges/QOSF challenge/QOSF_challenge.ipynb new file mode 100644 index 0000000..3269810 --- /dev/null +++ b/challenges/QOSF challenge/QOSF_challenge.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "fa0fec16-beb8-48f4-963a-0ea91728748c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit import execute, transpile, assemble, BasicAer, Aer\n", + "from qiskit.visualization import plot_histogram\n", + "from qiskit.tools.monitor import job_monitor" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "eb33393f-7162-423f-81b7-165a1f35549c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "l_player_1 = [0, 7, 8] #list of qbits cell numbers inicialized to 0('O')\n", + "l_player_2 = [3, 6] #list of qbits cell numbers inicialized to 1('X')\n", + "l_entangled = [(1,4),(4,5),(2,1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e98a8f56-c486-4222-b8ee-a13518350e5d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This the initial table state inputed by the user:\n", + "0 corresponds to player 1, 1 corresponds to player 2,\n", + " e1,e2,e3... corresponds to entangled tiles\n", + "-----\n", + "1|0|0\n", + "-----\n", + "1|e2|e2\n", + "-----\n", + "0|e3|e3\n", + "-----\n" + ] + } + ], + "source": [ + "#translate from lists to initial state matrix\n", + "l_initial_ordered = [0,0,0,0,0,0,0,0,0]\n", + "for inx in range(len(l_player_1)):\n", + " l_initial_ordered[l_player_1[inx]]=0\n", + "for inx in range(len(l_player_2)):\n", + " l_initial_ordered[l_player_2[inx]]=1\n", + "entg_num = 1 \n", + "for inx in range(len(l_entangled)):\n", + " l_initial_ordered[l_entangled[inx][0]]='e'+str(entg_num ) \n", + " l_initial_ordered[l_entangled[inx][1]]='e'+str(entg_num )\n", + " entg_num +=1\n", + "\n", + "print('This the initial table state inputed by the user:\\n0 corresponds to player 1, 1 corresponds to player 2,\\n e1,e2,e3... corresponds to entangled tiles')\n", + "print('-----\\n'+str(l_initial_ordered[6])+'|'+str(l_initial_ordered[7])+'|'+str(l_initial_ordered[8]))\n", + "print('-----\\n'+str(l_initial_ordered[3])+'|'+str(l_initial_ordered[4])+'|'+str(l_initial_ordered[5]))\n", + "print('-----\\n'+str(l_initial_ordered[0])+'|'+str(l_initial_ordered[1])+'|'+str(l_initial_ordered[2]))\n", + "print('-----')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "35007e5c-4e85-4241-847c-fbd0438c78c5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 0, 0, 1, 0, 1, 1, 0, 0]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvQAAAKxCAYAAAA8STjJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACDcklEQVR4nOzdeVxU9f7H8feZYZ0B3BUU3EHFBc0lLXO7UpraqqWpLdfKbnnTMu22XdvNsizTfpllda3Mri3Xq22WVl7Lci1TU6NQQajIBQFRmJnfH8QkAsoMA8MZXs/Hg4fMWb7nc3TA93zP93yP4XK5XAIAAABgShZ/FwAAAADAewR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACYW5O8CgLK4XC7l5eX5uwyP2Gw2GYbh7zIAAEAtQ6BHjZSXl6eIiAh/l+GRnJwc2e12f5cBAABqGYbcAAAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPVFBCQoK/SwAAACglyN8FAFXFMAx1795dPXr0UPfu3dWuXTvZbDY5nU5lZ2dr27Zt2rRpk7766iulpKSctq2rr75aixYt0q233qrnnnuums4AAADgzAyXy+XydxHAqXJzcxUREeHVvnXr1tW1116rv/3tbxXuVf/iiy/03HPP6Z133lFBQUGJdVdffbVefvllWSxFF7T69euntWvXlmojJydHdrvdq5oBAAC8VSuG3GRlZWn69Olq27atwsLCFBcXp8mTJys3N1cTJkyQYRiaN2+ev8tEJRmGoZtuukn79u3TnDlzygzzhYWFcjqdpZb369dPb775pn744QcNGDDAvfzUMD937twywzwAAIC/BPyQm61bt2ro0KHKzMyU3W5XYmKiDhw4oLlz5yolJUUHDx6UJHXt2tW/haJS4uLi9PLLL+svf/lLieWffvqp/vOf/2jTpk369ttvlZubK0lq2LChzjrrLPXs2VNXXXWVEhMTJUmtW7fWmjVrNH/+fG3dulULFiwoEeYnT55cvScGAABwBgE95CYrK0vdunVTWlqapk6dqhkzZigyMlKS9Pjjj+vOO+9UUFCQHA6HDh8+rKioKD9XjGKeDLlp3769Vq1apdjYWPeyRYsW6fHHH9euXbsq1Eb//v31wAMPqH///u5lLpdLhmFIqliYZ8gNAADwh4AO9FdddZWWLFmiSZMm6dlnny21vmvXrvr222/VqlUr/fTTT36oEOWpaKBv06aN1q5dq5iYGEnSvn37NGHCBH3yySceH9MwDN1yyy2aPXu2QkND3cufe+453XLLLWfcn0APAAD8IWDH0O/cuVNLly5Vw4YNNXPmzDK36d69uyQpKSmpxPKff/5ZF110kSIjI1WvXj1dffXV+v3336u8ZngmJCRE7733njvMb968Wd27d/cqzEtFPfLZ2dkKDg4usfzkcA8AAFDTBGygX7JkiZxOp8aOHVtuT294eLikkoH+6NGjGjhwoNLS0rRkyRK98MILWrt2rYYPH17mzZTwnxkzZqhTp06SpB07dig5OVlZWVlet3fqDbAnTpyQJE2YMEFDhgypfMEAAABVIGBvil29erUkaeDAgeVuk5aWJqlkoH/hhReUnp6uL774Qs2bN5ckxcbG6pxzztHy5ct1ySWXVF3RqLCuXbvqzjvvlFQUvEePHu2+wdkbZc1ms23bNi1cuFCStHDhQrVv3959Uy0AAEBNEbCBfu/evZKkFi1alLm+sLBQ69atk1Qy0K9YsUJ9+/Z1h3lJ6tOnj1q3bq3//ve/XgX6Hj16KDMz0+P9arMzXQ2ZOnWqrFarJOmhhx7Stm3bvD5WWWG++AbYkSNH6oILLlBsbKyuuuoqd8AvS3x8vLsNAAAAT0RHR2vjxo3e7ewKUPXq1XNJcn355Zdlrn/ttddcklyRkZEup9PpXt64cWPXLbfcUmr7ESNGuHr37u1VLc2aNXNJ4stHX40aNXLl5+e7XC6X67fffnOFhoZ63dbVV1/tcjgc7n+rZ555psT6bt26uddt3brV7+fOF1988cUXX3wF5lezZs28ypkul8sVsD300dHROnTokDZv3qw+ffqUWJeRkaFp06ZJkrp06eKemlCSDh06pLp165Zqr379+hWeArGsWuAZp9OpjIyMMteNHz/efaPqSy+9pOPHj3t1jNP1zBfbsmWLvvrqK/Xp00dJSUnq0aNHuZ+eY2Ji6KEHAABeqUxeDNhAP3jwYO3cuVOzZs1ScnKy+6mhGzZs0Pjx4903T1bHA6W8vnxSi51u2sq+ffu6v//Xv/7lVfsVCfPFXn31VfeHwr59+5b777lnzx6mrQQAANUuYLsTp0+frgYNGmj//v3q2LGjOnfurPj4ePXq1UutW7fWoEGDJJWesrJevXo6fPhwqfYOHjyo+vXrV0fpOIPi6Uazs7O1c+dOj/f3JMxL0jfffFPq2AAAADVFwAb62NhYrV27VsOGDVNYWJhSU1NVv359LViwQCtXrtTu3bsllQ70HTp00I4dO0q1t2PHDnXo0KFaakf56tWr575hecuWLXJ5+Fw0T8O8JH3//ffuYT3VcUUHAADAEwE75EYqCucrVqwotTwnJ0epqamyWCzuecyLDR8+XHfffbfS0tIUGxsrSfr666+VkpKiJ554olrqRvlOvr8hPT3do329CfOSVFBQoN9++02xsbFl3l8BAADgT4bL0y7OAPD111+rd+/eateunX744YcS67Kzs9W5c2c1bNhQDzzwgPLz8zV9+nQ1atRIX331FTc9VpPyxtCHhISoY8eOCg8P16FDhyo85MYwDK1evVoDBgyQVPEwX6x3796Sij4Mfv/992Vuk5OTwxh6AABQ7QK6h748xXOWnzrcRpKioqK0evVqTZ48WaNHj1ZQUJCGDx+uOXPmEOZrgBMnTmjLli0e7+dyuTR8+HB98MEH2rJli0dhXpLWr1/v8TEBAACqA4G+DG3atClzqA7MLTc3V+eff77y8/P9XQoAAIDP1Mou5zMFegQuwjwAAAg0tXIMPWq+081DX1Mxhh4AAPhDreyhBwAAAAIFgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGKGy+Vy+bsI4FQul0t5eXk+a++JBW8qOzdPUXabpk0cXeq1L9hsNhmG4ZO2AAAAKirI3wUAZTEMQ3a73WfthYSGKaTAoZDQMNnt9lKvAQAAzIohNwAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJBfm7AJTN5ZJOOPxdRcWFWCXD8HcVCCQul0t5ThP9EEiyWawy+EGAj7hcLuXl5fm7DI/YbDZ+BgA/INDXUCcc0p1L/V1Fxc26Ugrl3QQfynM6VG/1Kn+X4ZFDg5Jlt/KDAN/Iy8tTRESEv8vwSE5Ojux2u7/LAGodhtwAAAAAJkagBwAAAEyMQA8AAACYGIEeAAAAMDECPQAAAGBiTMcAAAEs97i073cp7aCUcVg6Xli0PCRIiqkjxdaXmjeQIsL8WiYAoBII9AAQYJwuaVeGtG6PtD296LkWZdnyx5+GpPZNpb7xUoemkoVrtwBgKgR6AAggP/8mLf1ayjxS8X1cknYeKPpqFCldebbUtkmVlQgA8DECPQAEgAKH9P630mc/lN8jXxG/HZXmfSKd104a3pUHxgGAGfCrGgBMLr9AevFz6cdffNfm2l1FY+8nDpBsob5rFwDge4yUBAATO1EovbDGt2G+2N4s6f9WF31gAADUXPTQA4CJLf1a+um3qmt//0HptS+lCf0kw6i646BqRUZGqlu3boqPj1d4eLgcDocOHTqkrVu3avfu3XI6nWdsIzExUc8995xGjx6tzMzMaqgaQEUR6AHApL7bL21K9Wyf24dIUeFS9jHpqQ8rts/3aUXH6dHK0wrhT3Fxcbrxxhs1cuRItW/fvtztcnJy9NVXX2nhwoV69913VVhYWGqbxMRErVmzRo0bN9aaNWs0cOBAQj1Qg9SKITdZWVmaPn262rZtq7CwMMXFxWny5MnKzc3VhAkTZBiG5s2b5+8yAaDC8o5L//7G8/2iwqW6tqI/PfHORunoMc+Ph+rXunVrvf322/r555917733njbMS1JERISSk5P11ltvad++fZo6daqsVqt7/clhXpKOHj2qY8d4MwA1ScD30G/dulVDhw5VZmam7Ha7EhMTdeDAAc2dO1cpKSk6ePCgJKlr167+LbSKpO34TG8/OlB9xzyh7sPuKHObZ8YZatl1mC6+Y0U1V4fqUOCQtuyVvtxT9GChQqdkD5G6xEnnJkgxdf1dYdVyLHpFzjffkvX2KbIMOb/EOpfLJce0f8i1c6eC5s2V0aqlf4r0wvoU6Wh+9R0v74T0vz3S0C7Vd0x4xjAM3XLLLXrsscdkt9vdywsKCrRlyxZt2rRJ3333nY4ePSqr1apmzZqpe/fu6tWrl+Li4iRJMTExmj17tkaNGqXrrrtOhmGUCPMbNmxQcnKyjhzxYF5UAFUuoAN9VlaWRowYoczMTE2dOlUzZsxQZGSkJOnxxx/XnXfeqaCgIBmGoS5d+F8KgSflF+nltVLO8ZLLs/OLwtn/9khntZDG9JGCrWW3YXaW8WPlXP+1HAsWyuh+loxGDd3rnO+8J9d322T567WmCvNOV9FDo6rbVz9K53eSrLXi2q65hIeHa+nSpRoxYoR72YEDB/T8889r4cKFZxweM3DgQN1888269NJLZbVadfbZZ2vr1q06duyY6tSpI4kwD9RkAf1r+dZbb1VaWpomTZqk2bNnu8O8JE2fPl1JSUkqLCxUy5YtFRUV5cdKAd/b84v03OrSYf5Um/cWTXnoOPM9caZkBAcraNpUKT9fjqeedi937U+T85V/yWjfTpZRl/uvQC/szpR+z6n+42YfK3ryLGqWsLAwrVixokSYnz9/vhISEvTQQw9VaKz7mjVrNGrUKJ177rn64YcfJEkhISGEecAkAjbQ79y5U0uXLlXDhg01c+bMMrfp3r27JCkpKcm9rPgDQK9evRQaGiqDaR1gQscLpJe/qHhI35Uhrfq+amvyJyO+rSyjr5Br02Y5V34gl8Mhx+OzJZdL1mlTZVjNdXkipQqmqKyoqpgeE5WzePFiDRo0SJKUnZ2t5ORkTZo0Sbm5uR639fXXX+uqq64qMUbe5XLpwQcfJMwDNVjABvolS5bI6XRq7NixioiIKHOb8PCiu8JODvQ//vij3n77bUVHR6tnz57VUmt1KDyRp2NHs8r8QuDZ+HPRmGdPrNsjFTqqpp6awDJ2jNS6tRwLX5Rz/vNy7doty7VXy4iL9XdpHtt/0H/HTvPjsVHa+PHjNXLkSElFN6smJyfrk08+8bq9xMREffjhh+7/HyW5J444+So3gJolYMfQr169WlLRuMDypKWlSSoZ6Pv166eMjAxJ0v33369169ZVYZXVZ/3bM7T+7Rn+LgPVxJvx1Ufzi6ZBPKulz8upEYygIAVNu12Ff58i54qVMjp1lOWyS/xdllf8GarTDkkuF3PS1wQxMTF65pln3K/Hjx+vb77xYuqjP5w6m82GDRt07Ngx9evXTy1atNATTzyhm266qdJ1A/C9gA30e/fulSS1aNGizPWFhYXusH5yoLdYfH/RokePHh7P12sNDtelD/vurrdOA29U/Nmjylz37mPJlW4/IT5ejoKaO43ZpddNkT0iShmZGYqNjS31OqAYFo18bJ9Xu9798Dx9/+FjPi7IO66QEGnBfN82ardLwcFSYaGMnj1k+PjnPSE+QcYJDy+NeOHymXtlWMoeJlQ8z3x5osL+/PP+S8vfrrx56k8USi1atZGz8Aw3Z6DSzvSwp3vuuUf16tWTJL322mv6z3/+4/WxygrzycnJqlevnrZt26aIiAhNnDhRTz31lHbv3l1uO/Hx8VXy/yhQG0RHR2vjxo1e7Ruwgb547GB5c+UuXbpUWVlZioyMVKtWVfu0lMzMTKWne3YnWVCozac11I2OV/NOg33a5skOZBxQ4fG8Kmu/spwOh/vP9PT0Uq8DSWXeO8eOF9acv4+wUAX7sDmXyyXHk3OkwgKpeZycb7wpS/9+MprG+OwYBzIOSPlVHHQNo9wwL/05z/yZWCwV264smb/8qoJ8P9yVC7eIiAhdffXVkor+v5syZYrXbZUX5o8cOaIjR47owQcf1OOPPy5Juummm3T77beX21bxFW4A1StgA310dLQOHTqkzZs3q0+fPiXWZWRkaNq0aZKkLl26VPmNr9HR0R7vYw328KkvftY0pmmN7qG3/HHTo+WPuZdPfR1onIUnZAkK8Xi/UKuzxvx9uEJC9JsP23O+t1yub7+T5bprZOnTW4W3/F2OJ+fIOnuWz34HNI1pWi099Kf7980+w49hVFhRmHc6i6YvLc/p2mnSqIFczjoVqBSV4XQ6yw3I48aNc49pf+211/T77797dYzThfliL774oh544AGFh4fruuuu07333qu8vLI7cGJiYuihB7zkTV4sFrCBfvDgwdq5c6dmzZql5ORkJSQkSCr6ZTV+/HhlZRXdDFodD5Ty5vLJ8ULpzqVVUEwV2b1nj0Jr8Lvp0fmvKzsnVzHRMUpLSyv1OtAs+qJoPLynXnrqdsXVL7/3rTrlOgpVb/Uqn7TlSk+Xc9ErMtolyHLFSBlWqyzjxsr58qtyvrdc1ksv9slxdu/ZLbu16n8QHlku/Xa07HVlDZM52f2XFvXMZ+dL97/r+bHrhEv796V6viM8lpubW+6kDsOGDXN///zzz3vVfkXCvCQdOnRIS5cu1bXXXqu6devqnHPOKffG2z179pR4qBWA6hGwH6OnT5+uBg0aaP/+/erYsaM6d+6s+Ph49erVS61bt3ZP8XXy+HkgUPRN8HyfFg2kuPq+r8XfXE6nHE88JTmdsk673T1FpeWKkTIS4uVc9IpcB8w1TCDWj/9OcQ38d2z8qXja5YMHD2rr1q0e71/RMF+seKKJk48NoOYI2EAfGxurtWvXatiwYQoLC1Nqaqrq16+vBQsWaOXKle6begj0CETxTaTWjSq+vSHpgs5VVo5fOZe9I9eOnbJcM05G8+bu5YbVKusdt0tOhxxPzpHL5fJjlZ5p7sdQ7c8PEyjStGlTxcQU3fuxadMmj/f3NMyfehwCPVDzBGygl6QOHTpoxYoVOnr0qI4ePaqvv/5aN954o3Jzc5WamiqLxaJOnTr5u0zA5wxDmtBfalq3Yttf3lNKrBlD533KtW+fnK8ultGhvSyXX1ZqvdGyhSzjxsq17Xs531vuhwq909GP/1adAvB9YjZxcXHu73fu3OnRvt6EeUnup8dKUvOTPhgDqBlq8KjnqrN9+3a5XC4lJCTIZis9zcOyZcskSTt27CjxumXLlurRo0f1FeoDsYkDNPm10/c8nmk9zMkeKt16vrR8c9GDpk6U8dComLrShV2kznGl1wUCo3lzBa88/VR+1jFXyjrmymqqyDcaR0ntoqVdns2GW2mtGtJDXxP89ttvmj9/vsLDw/Xll19WeL+wsDB99NFHHod5qegG3UWLFqmwsFApKSle1w6gatTKQL9t2zZJ5Q+3GTVqVJmvr7nmGr3yyitVWhvgS2HB0hVnS8O7FYX6FVuKgn2IVbppkNSqEQ8IMqtzE6o/0J/rxb0Z8L2ffvpJkyZN8ni//Px83XLLLVq2bJm2bt1a4TBfbMKECR4fE0D1INCXwUxjaYGKsIVI/dpJn26XThyTwkOk1o39XRUqo1Ns0b0Se36pnuO1aCidVfZz+mAiy5cv15AhQ7Rp0yaPwjyAmi2gx9CX50yBHgBqOoshje4thVRDt0yQRbqqd9H89TC/1atXE+aBAFMre+hPnn4LAMyqQYR0eQ9pyfqK71P8wKgzPYDqZBefJTXhOVIAUGPVykAPAIHi7DbS0XxpxdaKbX+mB0+d6vxO0nntPC4LAFCNCPQAYHKDO0rBVum9zZKvbgEyJA3rWtQ2AKBmI9ADQADo377oxtUlX0m/ZFeurYaRRWPmuXEaAMyBQA8AAaJlQ+mOC6VPd0j/2y3l5Hu2vz1UOqetlNypem62BQD4Br+yASCABFulIZ2lwYnSd/ulb36S9v0u5Z0oe/vwECmuvtSzldS1RdH+AABzIdADQAAKskpntSz6crmkg7lSxmHp9S+lYwVFzya4fUjRTDk8XAwAzI1ADwABzjCKgnuDiKKhNMcKinriG0b6uzIAgC/wmBAAAADAxAj0AAAAgIkR6AEAAAATI9ADAAAAJsZNsTVUiFWadaW/q6i4EKa6g4/ZLFYdGpTs7zI8YrPwgwDfsdlsysnJ8Vl7Tyx4U9m5eYqy2zRt4uhSr33BZrP5pB0AniHQ11CGIYXyr4NazDAM2a38EKD2MgxDdrvdZ+2FhIYppMChkNAw2e32Uq8BmBdDbgAAAAATI9ADAAAAJkagBwAAAEyMQA8AAACYGIEeAAAAMDECPQAAAGBiBHoAAADAxAj0AAAAgIkR6AEAAAATI9ADAAAAJkagBwAAAEyMQA8AAACYGIEeAAAAMDECPQAAAGBiBHoAAADAxAj0AAAAgIkR6AEAAAATI9ADAAAAJhbk7wJQNpdLOuHwdxUVF2KVDMPfVQAAAoXL5VJeXp6/y/CIzWaTwX+G8AMCfQ11wiHdudTfVVTcrCulUN5NAAAfycvLU0REhL/L8EhOTo7sdru/y0AtxJAbAAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAECtERoaqvDwcBmG4fG+w4YNU3R0dBVUBVROkL8LAAAAqAo2m02XXXaZzjnnHHXv3l1dunRRWFiYe/2ePXu0adMmbdy4UcuWLdPevXvLbWvUqFF64403tGfPHg0aNEiZmZnVcQpAhdBDDwAAAkrr1q01Z84cpaena/Hixfrb3/6mXr16lQjzkhQfH6/Ro0dr9uzZ+umnn7R8+XKdf/75pdorDvNBQUHq0KGDJk6cWF2nAlRIrQj0WVlZmj59utq2bauwsDDFxcVp8uTJys3N1YQJE2QYhubNm+fvMqtE2o7P9Mw4Q5tWzi53m2fGGfrP7OHVWBWA6nY4T/pku3TsRNHr/ALpUK5/awJ8zWKx6I477tD27ds1ZcoU1a1b173O6XRq165dWrNmjVavXq2NGzfq2LFjJfYdMWKEPvroIy1btkyNGzeWVDLMS9KLL76oBx98sFrPCziTgB9ys3XrVg0dOlSZmZmy2+1KTEzUgQMHNHfuXKWkpOjgwYOSpK5du/q3UACoAllHpf9ukbalSU7Xn8uPF0oP/kfq2Ewa0U1qEuW/GgFfiI2N1VtvvaU+ffq4lx07dkxLlizRa6+9po0bN+ro0aMl9rFarUpMTNRFF12kG2+8Uc2bN5ckXX755erfv79efPFF3XHHHSXC/I033iiXyyWgJgnoHvqsrCyNGDFCmZmZmjp1qjIyMrR582ZlZmZq1qxZWrlypTZs2CDDMNSlSxd/lwsAPnXgkPT0R9K3+0uG+WIul/R9WtE2+36v/voAX2ndurX+97//ucO80+nUk08+qWbNmmnChAlas2ZNqTAvSQ6HQ9u2bdMjjzyi1q1ba+zYsfrtt98kSQ0bNtSdd95JmIcpBHSgv/XWW5WWlqZJkyZp9uzZioyMdK+bPn26kpKSVFhYqJYtWyoqiu4pAIHjaL60YI2Uc/zM2x47Ib2wpmhYDmA2MTEx+vTTT9WiRQtJ0k8//aS+ffvqjjvu0KFDhyrcjsPh0BtvvKHExER98803kuSeCWfVqlWEedRoARvod+7cqaVLl6phw4aaOXNmmdt0795dkpSUlORetmzZMl1++eVq0aKFbDab2rdvr3vuuUc5OTnVUndVKTyRp2NHs8r8AhB4vtwjHTl25u2K5RyX1u6qunqAqvLKK6+oZcuWkqTvv/9e55xzjr766iuv2xs4cKDOOuusEst69eqlZs2aVaZMoEoF7Bj6JUuWyOl0auzYsYqIiChzm/DwcEklA/3s2bPVvHlzPfroo4qNjdXWrVv1wAMP6PPPP9cXX3whi8Wcn4HWvz1D69+e4e8yAFQDh7Mo0HtqfYo0tIsUZPV9TUBVuOGGG9yz0qSlpSk5OVm//PKL1+2degNsSkqK2rRpozp16mjhwoUaOnSoT+oGfC1gA/3q1aslFX3SLk9aWpqkkoH+v//9rxo1auR+3b9/fzVq1Ehjx47V//73P/Xr16+KKq5anQbeqPizR5W57t3Hkqu5GgBVKe2gZ73zxXKPSz/9JiXw3ByYQIMGDTR79p8zuE2YMKFSc8OXNZvNtGnTtG3bNsXGxmrIkCEaPXq03nzzzUrXDvhawAb64odDFI+pO1VhYaHWrVsnqWSgPznMF+vRo4ckKT093ataevTo4fEvGWtwuC592IsutnLUjY5X806DfdbeqRLi4+Uo8CJBVJNLr5sie0SUMjIzFBsbW+p1bXHh3RtkqxPzx3n39Hc5qCJNEgbovAmvebXv+OsmKn3bSh9XhJrAbL8HnU7naddfd9117vvfXn75ZX388cdeH6usMF88Zn7ixIlaubLoZ2Ly5MmnDfTx8fGmvZIP/4uOjtbGjRu92jdgA31ubtEEyyfPMXuypUuXKisrS5GRkWrVqtVp21qzZo0kqUOHDl7VkpmZ6fGHgaBQm1fH8pcDGQdUeLzm3lHndDjcf6anp5d6XVs4/jhvRy0771onKs3rXX/NTOO9EaAC6fegYRj629/+5n796KOPet3W6cK8JL3//vvaunWrunbtqt69e+uss87S5s2by2wrIyPD6zqAygjYQB8dHa1Dhw5p8+bNJeaklYp+4KZNmyZJ6tKli/su9rKkp6frvvvu05AhQ7yeqz462vPr19bgcK+O5S9NY5rW6B56i9Xq/rNZs2alXtcW1j/O21rLzru2CXUeltNRIIs12KP9XE6ngguyeG8EKLP9HnQ6neUG5HPPPVetW7eWJH300Uf68ccfvTrGmcJ8seeee04vvPCCJGn8+PHlBvqYmBh66OE1b/JisYAN9IMHD9bOnTs1a9YsJScnKyEhQZK0YcMGjR8/XllZRbO7nC6k5+Tk6OKLL1ZISIgWLVrkdS3eXD45XijdudTrQ1a73Xv2KLQGv5senf+6snNyFRMdo7S0tFKva4sZ7xSNra5t510bvbJW2rrPs306xVn0zPdfV01B8Duz/R7Mzc0td1KLnj3/HDK4bNkyr9qvaJgvPkZxoO/Vq1e5be7Zs0d2u92reoDKCNiPkdOnT1eDBg20f/9+dezYUZ07d1Z8fLx69eql1q1ba9CgQZJKjp8/2bFjxzRixAj9/PPP+vjjjxUTE1Od5QNApZzXzvN9+ib4vg6gKhRPOy0VddR5ypMwL0mHDh1SSkqKpKKOwOKrnUBNEbCBPjY2VmvXrtWwYcMUFham1NRU1a9fXwsWLNDKlSu1e/duSWUH+oKCAo0cOVIbN27UBx98oMTExOouHwAqpU1jaYgHD8AelCh1aFp19QC+1LFjR0nSiRMntH37do/29TTMF9uyZYskyWazuee9B2qKGjxIovI6dOigFStWlFqek5Oj1NRUWSwWderUqcS64rnrP/30U73//vunvbRmBrGJAzT5tdP/kjrTegDmdEEnKcQqrdgqOcv5MTeMou0u6FytpQGVYhiGCgsLlZ2drcLCwgrv522Yl6Tff/9dkpSXl+d+jg1QUwR0oC/P9u3b5XK5lJCQIJut5Gwyt9xyi/7973/rH//4h2w2m9avX+9e16ZNmzKntQSAmsgwinrez2opffWj9M1P0uE8SS6pjk3q2Uo6J16qx5BfmEzx/W+eDn05fvy4O7x7Eualonxw0003eXQ8oLrUykC/bds2SWUPt/nggw8kSY899pgee+yxEutefvllXXvttVVeHwD4Ul1b0RNgh3b5s6feUv7kXoBpFE/FW1HLly/XyJEjNWTIEN1yyy0VDvPeHAuoTgT6U6SmplZzNQBQfQjyqO2WL1+u5cuX+7sMwKcC9qbY0zldoAcAAADMpFb20K9evdrfJQAAAAA+USt76AEAAIBAQaAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJhYkL8LQNlCrNKsK/1dRcWFWP1dAQAgkNhsNuXk5PisvScWvKns3DxF2W2aNnF0qde+YLPZfNIO4CkCfQ1lGFIo/zoAgFrKMAzZ7XaftRcSGqaQAodCQsNkt9tLvQbMjCE3AAAAgIkR6AEAAAATI9ADAAAAJkagBwAAAEyMQA8AAACYGIEeAAAAMDECPQAAAGBiBHoAAADAxAj0AAAAgIkR6AEAAAATI9ADAAAAJkagBwAAAEyMQA8AAACYGIEeAAAAMDECPQAAAGBiBHoAAADAxAj0AAAAgIkF+bsAlM3lcinP6fB3GRVms1hlGIa/y0AAcblcysvL83cZHrHZbPwcAACqHYG+hspzOlRv9Sp/l1FhhwYly27l7QTfycvLU0REhL/L8EhOTo7sdru/ywAA1DIMuQEAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAqqE6dOv4uAQCAUoL8XQAAVKXY2Fh1795dPXr0UIsWLRQaGqqCggJlZWVp8+bN2rRpk3744Qc5HI7TtjNt2jRNnjxZAwYM0I8//lhN1QMAcGYEegABx26366qrrtLNN9+srl27nnH7X375RQsXLtQLL7yg/fv3l1o/bdo0Pf7445Kkzz77TJ06ddLhw4d9XDUAAN6pFUNusrKyNH36dLVt21ZhYWGKi4vT5MmTlZubqwkTJsgwDM2bN8/fZQKoJMMwNGnSJKWnp+uFF16oUJiXpCZNmujee+/Vzz//rIULF5YYWnNymJekefPmEeYBADVKwPfQb926VUOHDlVmZqbsdrsSExN14MABzZ07VykpKTp48KAkVfg/frNxLHpFzjffkvX2KbIMOb/EOpfLJce0f8i1c6eC5s2V0aqlf4oEfKB169ZatGiR+vfvX2L5119/rU8++USbNm3Szp07lZeXp+DgYLVs2VLdu3fXOeecowsvvFDBwcGyWq26/vrrNWTIEF1//fXq0qVLiTB/11136bHHHqvuUwMA4LQCOtBnZWVpxIgRyszM1NSpUzVjxgxFRkZKkh5//HHdeeedCgoKkmEY6tKli5+rrRqW8WPlXP+1HAsWyuh+loxGDd3rnO+8J9d322T567WEeZhaz5499eGHH6p+/fruZf/617/09NNPa8uWLWXuk5KSok8//VSSFBMToxtuuEFTp05VVFSUYmNj9eGHH5bYnjAPAKipAnrIza233qq0tDRNmjRJs2fPdod5SZo+fbqSkpJUWFioli1bKioqyo+VVh0jOFhB06ZK+flyPPW0e7lrf5qcr/xLRvt2soy63H8FApXUvXt3ffLJJ+4w//PPP2vQoEG65ppryg3zp8rIyNCDDz6oTp066eOPPy61njAPAKjJAjbQ79y5U0uXLlXDhg01c+bMMrfp3r27JCkpKcm9bO3atRo8eLBiYmIUGhqq2NhYXXnlldq5c2e11F0VjPi2soy+Qq5Nm+Vc+YFcDoccj8+WXC5Zp02VYbX6u0TAK40aNdL777/v/kC+Zs0aJSUlac2aNV61t3//fn3yySelllf0gwEAAP4QsENulixZIqfTqbFjxyoiIqLMbcLDwyWVDPSHDh1S586dNXHiRDVu3FhpaWmaOXOm+vTpo++//16xsbHVUr+vWcaOkfOrr+VY+KIsKT/JtWu3LDdeLyPOnOcDSNL8+fPVuHFjSdIXX3yhYcOG6dixY163d+oNsMVefPFFderUSUeOHPG6bQAAqkrA9tCvXr1akjRw4MByt0lLS5NUMtBfdNFFmjNnjkaNGqX+/ftr7Nixeuedd3TkyBG9/fbbVVt0FTKCghQ07XbpRIGcK1bK6NRRlssu8XdZgNcuv/xyjRo1SlLR/TKjRo3yaZi/66679NFHH0kqmsv+ySefrFzBAABUkYDtod+7d68kqUWLFmWuLyws1Lp16ySVDPRladCggSQpKMi7v64ePXooMzPTo31cISHSgvleHa9cdrsUHCwVFsro2UOGxXef5xLiE2ScOOGz9nzt0uumyB4RpYzMDMXGxpZ6XVtcePcG2erE/HHePf1dzmk5nc7Trp8xY4b7+0mTJunXX3/1+lhlhfnHHntMr7/+ur7//ntFRUXp2muv1QMPPFDmPPXF4uPjZfHhzxXgS7X992BtP3/UfNHR0dq4caNX+wZsoM/NzZWkcnvsli5dqqysLEVGRqpVq1al1jscDjmdTu3du1d33XWXoqOjdcUVV3hVS2ZmptLT0z3bKSxUwV4drWwul0uOJ+dIhQVS8zg533hTlv79ZDSN8Un7BzIOSPnHfdJWVXD+8RRQp8Oh9PT0Uq9ri+KnoTpMft7nnnuuOnfuLEn68ssvtXTpUq/bKi/MS0Vj6mfPnq0HH3xQVqtVN954o+67775y28rIyPC6DqCq1fbfg7X9/BHYAjbQR0dH69ChQ9q8ebP69OlTYl1GRoamTZsmSerSpYsMwyi1f//+/d09+G3bttXq1avVqFEjr2vxlCskRL95dbSyOd9bLte338ly3TWy9Omtwlv+LseTc2SdPavM8/dU05imNbqH3vLHjb8Wq1XNmjUr9bq2sP5x3lYTnLfT6Sw3IN90003u7+fP9/5K1unCfLGFCxfqvvvuU3BwsG644Qbdf//97g9Gp4qJiaGHHjVWbf89WNvPHzWfN3mxWMAG+sGDB2vnzp2aNWuWkpOTlZCQIEnasGGDxo8fr6ysLEnlP1DqpZde0uHDh/Xzzz/riSee0Pnnn69169apefPmHtfizeWTXEeh6q1e5fF+ZXGlp8u56BUZ7RJkuWKkDKtVlnFj5Xz5VTnfWy7rpRdX+hi79+yW3Vpz306Pzn9d2Tm5iomOUVpaWqnXtcWMd6Qjx2SK887NzS33hvYBAwZIkrKzs7Vs2TKv2q9ImJeKrrCtXLlSl1xyiZo0aaL27dtr+/btZba5Z88e2e12r+oBqlpt/z1Y288fgS1gu5KmT5+uBg0aaP/+/erYsaM6d+6s+Ph49erVS61bt9agQYMklT9+vl27djr77LM1evRoffrppzp69GiZs1/UdC6nU44nnpKcTlmn3e6eotJyxUgZCfFyLnpFrgMME4B5NGnSxD3edePGjTrhxZWhiob5Yl9++aX7+x49enh8PAAAqlLABvrY2FitXbtWw4YNU1hYmFJTU1W/fn0tWLBAK1eu1O7duyWd+YZYSapbt67atm2rH3/8sarL9jnnsnfk2rFTlmvGyTjp6oJhtcp6x+2S0yHHk3Pkcrn8WCVQcWeddZb7+02bNnm8v6dh/tTjnHx8AABqgpo7RsIHOnTooBUrVpRanpOTo9TUVFksFnXq1OmM7fz666/atWuXzj777Koos8q49u2T89XFMjq0l+Xyy0qtN1q28PnQG6CqNWzY0P39zz//7NG+3oT5U49z8vEBAKgJAjrQl2f79u1yuVxKSEiQzWYrsW7cuHFq27atunbtqrp162rPnj2aM2eOgoKCdNttt/mpYu8YzZsreOV/TruNdcyVso65spoqAipv7dq1GjNmjMLCwrR+/foK79e0aVP985//dL+uaJiXij7UX3/99Tp27Jh++uknj2sGAKAq1cpAv23bNkllD7fp3bu3/vWvf+mZZ55Rfn6+4uLiNHDgQN19993lzmkPoPqkpqYqNTXV4/0OHDigoUOH6oMPPtAjjzxS4TAvFd2g+9JLL3l8TAAAqgOB/hSTJk3SpEmTqrskANXgf//7n9q3b8+c0wCAgBKwN8WezukCPYDARpgHAASaWtlDv3r1an+XAAAAAPhEreyhBwAAAAIFgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGJB/i4AZbNZrDo0KNnfZVSYzWL1dwkIMDabTTk5OT5r74kFbyo7N09RdpumTRxd6rUv2Gw2n7QDAIAnCPQ1lGEYslv550HtZRiG7Ha7z9oLCQ1TSIFDIaFhstvtpV4DAGBWDLkBAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJhYkL8LQNlcLpfynA5/l1FhNotVhmH4uwwgYLhc0gnz/AqQJIVYJX4NAL7jcrmUl5fn7zIqzGazkQX8hEBfQ+U5Haq3epW/y6iwQ4OSZbfydgJ85YRDunOpv6vwzKwrpVB+DQA+k5eXp4iICH+XUWE5OTmy2+3+LqNWYsgNAAAAYGIEegAAAMDECPQAAACAiRHoAQAAABPj9iUgwB09Ju0/KKUfko4VFC3LL5C++lGKqy9F15GCrP6tEQAAeI9ADwSg3OPS1ylFof23o6XXHy+Uln5d9L3VInWKlfrGS22bMO0gAABmQ6AHAsjxAmnlt9KXe6RCZ8X2cTilb/cVfTWJki7vKSVEV22dAADAdwj0QIDY84v05nrp9xzv2/glW3ruU+mceOmiblJYsO/qAwAAVYNADwSA/+2W3t4guXzU3pd7pJ9+lf42SKpj81GjAACgSjDLDWByn/8gLfNhmC+WeUR69hMp+5iPGwYAAD5FDz1gYt+nSe9uqrr2s45KL3wmTTmfmXAAwMwMw1BCQoKaNm2q0NBQnThxQr/88ot++OEHORyOCrXRp08fDRs2TPfee28VVwtPEegBk8o9/udMNRV1+xApKryo1/2pDyu2T9pB6ZPt0pAuntcIAPCfRo0aacKECRoyZIi6deumqKioUtvk5eVp69atWrVqlRYuXKj09PQy2+rTp48++ugjRUZGKjw8XFOnTq3q8uEBhtwAJvXORulovmf7RIVLdW1Ff3ri4++Lgj0AoOaLj4/Xa6+9prS0NM2cOVP9+/cvM8xLks1m0znnnKMZM2YoNTVVb7/9tpKSkkpsc3KYl6SOHTsqOJhZE2qSgA/0WVlZmj59utq2bauwsDDFxcVp8uTJys3N1YQJE2QYhubNm+fvMquMY9ErKjj/Qjk//LjUOpfLpcI77lTBsIvk+jm1+ouD1zKPSJtSq+94TldRqIf5pO34TM+MM7Rp5exyt3lmnKH/zB5ejVVVv4zD0rJvpCc/kGb+V5rzkfTBd9LhPH9XBviOxWLRlClT9O2332rs2LEKCQlxr9u3b5/effddPfbYY5oxY4YeffRRvfXWW0pJSXFvExQUpMsuu0wbNmzQjBkzFBwcXCrMf/TRR7rkkktUUFBQ7eeH8gX0kJutW7dq6NChyszMlN1uV2Jiog4cOKC5c+cqJSVFBw8WdTl27drVv4VWIcv4sXKu/1qOBQtldD9LRqOG7nXOd96T67ttsvz1WhmtWvqvSHhs3e7qP+a2tKLwU5dZb2AiR/Ol176UdmWUXrc3S1r1vdSrtTSyJ/eJwNzq1Kmjd999VwMHDnQvy8rK0ksvvaQXXnhBP/30U7n7Nm3aVNdff71uvPFGNWvWTMHBwbr//vs1evRoxcbGKiIiQtKfYT4/38PLw6hyAdtDn5WVpREjRigzM1NTp05VRkaGNm/erMzMTM2aNUsrV67Uhg0bZBiGunQJ3MHBRnCwgqZNlfLz5Xjqafdy1/40OV/5l4z27WQZdbn/CoTHjhdK35T/e7nKuFxF01kCZnH0mPTMR2WH+WJOl7Q+RVr4mVRYsfsCgRqnbt26WrNmjTvMO51OPf3002rRooX+8Y9/nDbMS9KBAwf04IMPqlWrVnrggQfcve/t27cnzJtEwAb6W2+9VWlpaZo0aZJmz57tvlQkSdOnT1dSUpIKCwvVsmXLcseVBQojvq0so6+Qa9NmOVd+IJfDIcfjsyWXS9ZpU2VY6ZYyk31ZRaHeH3Zn+ue4gDde+Z+UVcEHre3KlP67tUrLAapEcHCwVq5cqW7dukmSfv31Vw0YMEC33Xab8vI8G1NWUFCg+++/XzfccIOczj8fN56Tk6Nx48YR5muwgAz0O3fu1NKlS9WwYUPNnDmzzG26d+8uSaVu/DjZ0KFDZRiG7r///qoos1pZxo6RWreWY+GLcs5/Xq5du2W59moZcbH+Lg0e2u/Hm1PTD0kO55m3Q81TeCJPx45mlfkViPb9LqX86tk+X/0oHTtRNfUAVeXee+/VOeecI0nKzMxUv379tHbtWq/b69Onj5599llZLH9GxIiICD300EOVrhVVJyDH0C9ZskROp1Njx451Xyo6VXh40TQf5QX6t956S1u3bq2qEqudERSkoGm3q/DvU+RcsVJGp46yXHaJv8uCF/wZ6Asc0i9HpKb1/FcDvLP+7Rla//YMf5dRbf7nxX0mJwqlDT9L/dr5vh6gKpx11lm6++67JRX1rg8fPly7du3yur1Tb4Bdu3atunXrpoiICN100016++239cknn/ikdvhWQAb61atXS1KJG0NOlZaWJqnsQJ+dna0pU6Zo9uzZGjduXKXr6dGjhzIzPRur4AoJkRbMr/SxS7DbpeBgqbBQRs8eMiy+u0CTEJ8g40TN7dq69LopskdEKSMzQ7GxsaVem0m/G99S4zbnlLmueJ758kSF/fnn/Zee/jjlzVU//NLR+vXH/1Ww2prDbO8Ba3C4Ln3YdzctdBp4o+LPHlXmuncfS/bJMRLi4+UoqBmPFh4y7X+KaNjS4/2eeWm5rnrjZt8XVAOY7WfA18x4/icPeynLnDlzFBRUFOUeeeQRbdrk/ZMGy5vN5rrrrtNzzz0nSXr22WfVoUOHctuIj48v0bMPz0RHR2vjxo1e7RuQgX7v3r2SpBYtWpS5vrCwUOvWrZNUdqC/5557lJCQoLFjx/ok0GdmZpb7oIZyhYXKlzO8ulwuOZ6cIxUWSM3j5HzjTVn695PRNMYn7R/IOCDlH/dJW1XB+cdT8JwOh9LT00u9NpNCh6vcdcXzzJ+JxeL9bDWHDmeb7u9MMt97ICjUt9MJ1Y2OV/NOg33a5qkOZBxQ4fGaMQ+kERTm1X6FLmuNfD/4gtl+Bnwt0M6/c+fO6tevnyTphx9+0KOPPup1W+WF+fz8fD3//PMaN26czjnnHLVv316DBg1yd5yeKiPjNHego0oFZKDPzc2VJB07VnZP0dKlS5WVlaXIyEi1atWqxLqNGzdq4cKFlfqUe6ro6GiP93GFhOg3n1UgOd9bLte338ly3TWy9Omtwlv+LseTc2SdPUuGYVS6/aYxTWt0D73ljxt/LVarmjVrVuq1mQSdpvMj+wydo1FhRWHe6ZSyz3BvU3lt1asTqQKT/Z1J5nsPWIM9fPpXDdA0pmmN6aF3Fnj3wSLIKKyR7wdfMNvPgK+Z8fydTme5Iflvf/ub+/tnn33W63nhTxfmpaIOwTlz5rjH6d98883lBvqYmBh66CvBm7xYLCADfXR0tA4dOqTNmzerT58+JdZlZGRo2rRpkqQuXbqUCLMOh0MTJ07UpEmT1LFjR5/V483lk1xHoeqtXuWT47vS0+Vc9IqMdgmyXDFShtUqy7ixcr78qpzvLZf10osrfYzde3bLbq25b6dH57+u7JxcxUTHKC0trdRrM1m8rvyHSpU1ROZk919a1DOfnS/d/653x39/+VJF1/FuX38y23vgeKF051J/V+GZ3Xv2KLSG/Bp462vpyx893++OGy9Wn8cr/zuxJjLbz4CvmfH8c3Nzy70X8LLLLpNUNAPN4sWLvWr/TGG+2HvvvacDBw6oadOmGjFihEJCQnSijE68PXv2yG63e1ULKicgP0YNHlx0WXnWrFnavfvPO6M2bNiggQMHKiuraFaHUx8oNW/ePP3yyy8BMatNMZfTKccTT0lOp6zTbndPUWm5YqSMhHg5F70i1wEukZlJXH3/HTskSGoceebtAH87N8HzfcKCpbNa+rwUwOdiY2PVpEkTSdK6det09OhRj9uoaJiXioYqf/rpp5KkkJAQderUqRLVoyoEZKCfPn26GjRooP3796tjx47q3Lmz4uPj1atXL7Vu3VqDBg2SVHL8fFZWlu677z7985//VGFhoQ4fPqzDhw9LkvLz83X48OEz3pxSEzmXvSPXjp2yXDNORvPm7uWG1SrrHbdLToccT86Ry1X+uGzULP4M9LH1iobsADVds3pSew9vETovQTXmCgNwOsVTb0vyaoiwJ2G+rOOcfHzUDAH5X3NsbKzWrl2rYcOGKSwsTKmpqapfv74WLFiglStXunvtTw70aWlpOnr0qCZOnKh69eq5v6Sinv569epp3759fjkfb7n27ZPz1cUyOrSX5fLLSq03WraQZdxYubZ9L+d7y/1QIbwR10Cyhfjn2O2b+ue4gDeuPleKqVuxbbvESUMD96HhCDBt27Z1f79t2zaP9vUmzJ96nJOPj5ohYPsiOnTooBUrVpRanpOTo9TUVFkslhKXjNq2bas1a9aU2n7gwIG65pprdO2111bqZgV/MJo3V/DK/5x2G+uYK2Udc2U1VQRfCAmSzm4jrdlZvce1WqTebar3mKi82MQBmvza6a/AnWm9WdlCpb8nF42n/3a/VNaFyGCr1DdBGt6Vq08wj/3792vVqlUKDw/3aPx/hw4dvArzUtGMfevWrdOxY8eUkpLide2oGgEb6Muzfft2uVwuJSQkyGb7c1q4iIgIDRgwoMx9WrZsWe46wB/Oia/+QN8l7vRz3AM1kS1EuvY86VCu9OWeop+bQmfRbFEjukk9W/vvihfgrbfeektvvfWWx/vt3r1bK1as0JgxYzwK85K0Y8cO9e3b1+NjonrUuv6I4ktG5T0hFjCDRpFSn2q84hlkkYZ0rr7jAb5Wzy4N6yrZQ4te20Ol/u0J86hdHA6Hxo8fr+nTp3sU5lHz1boeek8DPTeLoqa6+Cxp5wHpcDU8x+fCJKmJCaeqBACU5HA49MQTT/i7DPgYPfSASYUFS2N6S548Fyz7WNEHgDM9gOpkrRtJA9p7Xh8AAKgeta6HvrynmwFm1C5GGn22tGR9xbY/04OnThVTV5rQn5sFAQCoyWpdoAcCzdltimageeMryenDEWLNG0gTB/455hgAANRMBHogAPRoVTTG/Y2vpIzDlWvLMKS/JBbdBBtk9Ul5AACgChHogQARV1+aOkRatV36/Acpv8DzNlo2lC7rUdQ7DwAAzIFADwSQIGvR0y4HJUpbUqUvf5T2Hyz7gTrFbCFSUnPp3Hgptn61lQoAAHyEQA8EoNAgqXfboq8ThVL6oaKvYyckh7Mo+DeMLOrVr2/3bKYcAABQsxDogQAXEiS1alT0BQAAAg+T0QEAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMW6KraFsFqsODUr2dxkVZrPwBCLAl0Ks0qwr/V2FZ0L4NQD4lM1mU05Ojk/aemLBm8rOzVOU3aZpE0eXu6wybDZbpduAdwj0NZRhGLJb+ecBaivDKJp+FEDtZRiG7Ha7T9oKCQ1TSIFDIaFh7jbLWgZzYsgNAAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDEgvxdAMrmcrmU53T4u4wKs1msMgzD32UAAIAA4XK5lJeX5+8yPGKz2fyShwj0NVSe06F6q1f5u4wKOzQoWXYrbycAAOAbeXl5ioiI8HcZHsnJyZHdbq/24zLkBgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBALVC7nHJ4Sz63uGUjhf4tx4A8BWmJQEABKRjJ6SNP0t7fpH2/y4dOmn2u5zj0j/ekhpFSc3rSx2aSUlxUpDVf/UCgLcI9ACAgJJ1VPp0h7TpZ+nEaR7n4ZL0a3bR18ZU6d0wqU8baUAHyR5aXdUCQOUR6AEAAcHpktbuklZslQq8eC5fTr60arv0dYp0xdlSp1iflwgAVYJADwAwvdzj0qIvpJRfK99Wdr704ufS2W2kK3pJVu42A1DDEegBAKZ2NF+a/4mUecS37X6dUtRrf915jK0HULPR7wAAMK3jBdLzq30f5ottT5de/0pyuaqmfQDmcu655/q7hDLRQw8AMK3/bpHSD1V8+9uHSFHhUvYx6akPK7bPlr1Su2ipd1vvagTgPyEhIfrLX/6inj17qnv37urQoYPsdrtcLpeys7O1bds2bdq0SevXr9fatWvlOs2n95tvvlnz58/XU089palTp1bjWZwZgR4AYEq7M6X/7fFsn6hwqa7N82O9t1lqFyPVs3u+L4DqFxcXp4kTJ+r6669XkyZNytymWbNm6tChg6644gpJUkpKip5//nktWrRIBw8eLLFtcZiXpNtvv12rVq3Shx9WsFegGtSKITdZWVmaPn262rZtq7CwMMXFxWny5MnKzc3VhAkTZBiG5s2b5+8yq4Rj0SsqOP9COT/8uNQ6l8ulwjvuVMGwi+T6ObX6iwMALzld0rIN1Xe8/AJp+ZbqOx4A71itVt1999368ccfdc8995QK80ePHtX+/fuVlpamY8eOlVjXpk0bPfHEE0pJSdE111zjXn5ymJekhx9+uEaFeakW9NBv3bpVQ4cOVWZmpux2uxITE3XgwAHNnTtXKSkp7k9gXbt29W+hVcQyfqyc67+WY8FCGd3PktGooXud85335Ppumyx/vVZGq5b+KxIAPLQro2j++Or07T7pSJ5Ux4sefgBVLz4+Xm+88YZ69OjhXlZQUKB33nlH77zzjjZt2qSUlBT3OqvVqvbt26tHjx4aM2aMLrjgAklS3bp19corr2jUqFFau3atHnvsMfc+Dz/8sO67777qO6kKCuge+qysLI0YMUKZmZmaOnWqMjIytHnzZmVmZmrWrFlauXKlNmzYIMMw1KVLF3+XWyWM4GAFTZsq5efL8dTT7uWu/WlyvvIvGe3byTLqcv8VCABeWOfhUBtfcLqkr1LOvB2A6te1a1etW7fOHeYdDoeefPJJNW/eXKNHj9Zbb71VIswXb7N9+3a9+uqrGjJkiOLj4/Xaa6+51w8bNswUYV4K8EB/6623Ki0tTZMmTdLs2bMVGRnpXjd9+nQlJSWpsLBQLVu2VFRUlB8rrVpGfFtZRl8h16bNcq78QC6HQ47HZ0sul6zTpsqwMh8bAPM4XlA0+4w/bEn1z3EBlK9Dhw5atWqVGjVqJEn64YcfdM455+iOO+5QZmZmhdv58ccfNX78eF100UXKzi55CfCpp56qsWFeCuBAv3PnTi1dulQNGzbUzJkzy9yme/fukqSkpCT3ss8++0yGYZT6MvuQHMvYMVLr1nIsfFHO+c/LtWu3LNdeLSOORyECMJf0Q/6bRvLX7KLx9ABqhrCwML3zzjtq2LBoSPG6devUu3dvffPNN163GRcXV6qjNzExsVJ1VrWAHUO/ZMkSOZ1OjR07VhEREWVuEx4eLqlkoC82f/58nXXWWe7Xdru5pzYwgoIUNO12Ff59ipwrVsro1FGWyy7xd1kA4LH9B8+8TVVxqegDRZvG/qsBwJ8efPBBtW/fXpK0ZcsWDR06VEePHvW6vVNvgD169KgiIyM1ZMgQTZgwQS+99FKla64KARvoV69eLUkaOHBgudukpaVJKjvQJyYmqnfv3lVTnL/Y7VJwsFRYKKNnDxmWgL1AAyCAVffNsGUdn0AP+F+3bt10++23S5KOHz+usWPH+jTMP/zww1q3bp0++OADSUXDbv773//q119/rVzhVSBgA/3evXslSS1atChzfWFhodatWyep7EDvSz169PBoDJckuUJCpAXzz7xhRdtzueR4co5UWCA1j5PzjTdl6d9PRtMYn7SfEJ8g48QJn7RVFS69borsEVHKyMxQbGxsqdcIfLwHAkePUU+qZY8ry1xX/OCo8kSF/fnn/Zee/jjlPXzqrrv/qR+/XFTBamuO2v4zwPmXPt+a/nfgdDpPu/62226T9Y/7AGfMmKGdO3d6fayywnzxmPlFixbpr3/9q6KionTDDTfokUceKbed+Ph4WbzsMI2OjtbGjRu92jdgA31ubq4klZpjtNjSpUuVlZWlyMhItWrVqtT6K6+8UllZWWrQoIEuuugiPfbYY+7xWZ7KzMxUerqHd3CFhSrYq6OVzfnecrm+/U6W666RpU9vFd7ydzmenCPr7FkyDKPS7R/IOCDlH/dBpVXD6XC4/0xPTy/1GoGP90Dg6JCTU+66ij44ymLx7gFTknTo0O+mfM/U9p8Bzr/0+Zr576Bhw4buB0L9/vvvevrpp71u63RhXpIeeOABXXPNNbJarZo4caIee+wxOf74uztVRkaG13VURsAG+ujoaB06dEibN29Wnz59SqzLyMjQtGnTJEldunQpEWjr1KmjadOmqV+/foqIiNBXX32lmTNnav369dq4caPCwsK8qsVTrpAQ/ebxXuW0lZ4u56JXZLRLkOWKkTKsVlnGjZXz5VflfG+5rJdeXOljNI1pWqN76C1/fIK3WK1q1qxZqdcIfLwHAkewtez/SKWiXvXTiQorCvNOp5Sdf/pty2vLHhZkyvdMbf8Z4PxLn29N/ztwOp3lBuSxY8cqNDRUUlEP+vHj3nUqninMS9K+ffu0cuVKXXTRRYqLi1NycnK5D5aKiYmpVA+9twI20A8ePFg7d+7UrFmzlJycrISEBEnShg0bNH78eGVlZUkq/UCpbt26qVu3bu7XAwYMUKdOnXTRRRdpyZIluu666zyuxZvLJ7mOQtVbvcrj/U7lcjrleOIpyemUddrt7ikqLVeMlGvdl3IuekWWs3tVeujN7j27ZbfW3LfTo/NfV3ZOrmKiY5SWllbqNQIf74HA8XWKtGR92evKGiJzsvsvLeqZz86X7n/Xu+Mv+9czalrvGe929qPa/jPA+Zc+35r+d5Cbm1vuxCYnd9a+/vrrXrVfkTB/8jEuuugiSVLv3r3LDfR79uzxy0QqAXtX5PTp09WgQQPt379fHTt2VOfOnRUfH69evXqpdevWGjRokKSKjZ8fPny47Ha71+Oa/Mm57B25duyU5ZpxMpo3dy83rFZZ77hdcjrkeHKOXP6aAw4APBRX33/HDrZKTer47/gAihRPPX7s2DF9//33Hu/vSZiXVGIazOJj1yQBG+hjY2O1du1aDRs2TGFhYUpNTVX9+vW1YMECrVy5Urt375bk2Q2xvhhrXp1c+/bJ+epiGR3ay3L5ZaXWGy1byDJurFzbvpfzveV+qBAAPNekjhTmy5uMPNC8gWQN2P85AXOw2Wxq27atJOnbb78tdzx7eTwN85KUmpqqgweL5syt6slUvFFzx0j4QIcOHbRixYpSy3NycpSamiqLxaJOnTqdsZ3ly5crNzdXvXr1qooyq4zRvLmCV/7ntNtYx1wp65iyZ4sAgJrIapF6tZa+2FX9xz67TfUfE0BJkZGR7u89nUXQmzBf7JdfflH9+vVLPXSqJgjoQF+e7du3y+VyKSEhQTZbyWkOxo0bp9atW+uss85y3xT7+OOPq2vXrho9erSfKgYAnOzc+OoP9LYQqVvZMyEDqEa//fabmjZtqrCwMJ3wcEKOc8891/29J2FekoYNGyaXy1XuDIr+VCsD/bZt2ySVfcmkY8eOeuONN/T000/r2LFjio2N1Q033KAZM2YoJCSkuksFAJShSR2pYzNpezXOtHdeu6Ix9AD863Sz35zJ1VdfLcMwlJKS4lGYl6Sff/7Zq2NWBwL9Ke666y7ddddd1V0SAMBDo3pJKSuk/IKqP1ZMHSm5Y9UfB0DVcjgcGjdu3BkfWmU2tfLWntMFegCAOdS1SZd4ONlE9jHpcN6Z56s/mcWQxvSRguidBwJCoIV5qZb20K9evdrfJQAAfODs1lLa79L/9lRs+zPNU1+WUb2KZrcBgJqqVvbQAwACg2FIl/WU+rStmvZHVmHbAOArtbKHHgAQOCyGdEUvqVGk9P63UqEPrqbbQ6Urz5a6xFW+LQCoagR6AIDpGYY0KFFKbCa98ZW073fv20pqXtQzHxnmu/oAoCoR6AEAASO6jjTlfGlnhrRut7TzgOSqwH5BlqI55s9NkFo2rPIyAcCnCPQAgIBisRTNUd+xmfR7jpTyq7T/dyntoHT0uORwFM1YU88uxdaXmteX2jaRIuiRB2BSBHoAQMBqEFH01au1vysBgKrDLDcAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYs9zUUDaLVYcGJfu7jAqzWaz+LgEAAAQQm82mnJwcn7X3xII3lZ2bpyi7TdMmji712hdsNptP2vEUgb6GMgxDdiv/PAAAoHYyDEN2u91n7YWEhimkwKGQ0DDZ7fZSr82MITcAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiQX5uwCUzeVyKc/p8HcZFWazWGUYhr/LAAKGy+VSXl6ev8vwiM1m4/cAAPgBgb6GynM6VG/1Kn+XUWGHBiXLbuXtBPhKXl6eIiIi/F2GR3JycmS32/1dBgDUOgy5AQAAAEyMQA8AAACYGIEeAAAAMDECPQAAAGBiBHoAAADAxAj0AAAAgIkR6AEAAAATI9ADAAAAJkagBwAAAEyMQA8AAACYGIEeAFAhFgv/ZQBATRTk7wIAAFUrOjpa3bt3V6dOnWS322UYhnJzc7V9+3Zt2rRJBw4cqFAbH374oe69916tWLGiGqoGAFQUgR4AAlBsbKxuvPFGXXPNNWrevPlpt01PT9fixYu1YMECpaamllofHR2tNWvWqH379nr77bd10UUX6aOPPqqiygEAngr466dZWVmaPn262rZtq7CwMMXFxWny5MnKzc3VhAkTZBiG5s2b5+8yAcAnYmJi9Oabbyo1NVX33XffGcO8JDVr1kz/+Mc/lJKSorfffltxcXHudSeHeako/P/www9VVj8AwHMB3UO/detWDR06VJmZmbLb7UpMTNSBAwc0d+5cpaSk6ODBg5Kkrl27+rfQKuRY9Iqcb74l6+1TZBlyfol1LpdLjmn/kGvnTgXNmyujVUv/FAnAJ8aNG6e5c+eqXr167mUFBQVau3atNm7cqC1btui3336TJDVo0EDdunVTjx491K9fP4WEhMhiseiyyy7T4MGDdfvtt2vlypUlwvzPP/+sgQMHau/evX45PwBA2QI20GdlZWnEiBHKzMzU1KlTNWPGDEVGRkqSHn/8cd15550KCgqSYRjq0qWLn6utOpbxY+Vc/7UcCxbK6H6WjEYN3euc77wn13fbZPnrtYR5wMQsFouee+45TZw40b3s119/1bx58/Tiiy8qIyOjzP3eeustSVLjxo01YcIETZo0SU2bNlVUVJRefPFFHTlyRHXq1JFEmAeAmixgh9zceuutSktL06RJkzR79mx3mJek6dOnKykpSYWFhWrZsqWioqL8WGnVMoKDFTRtqpSfL8dTT7uXu/anyfnKv2S0byfLqMv9VyCASjEMQy+99FKJMP/666+rQ4cOeuihh8oN8yf79ddfNXPmTCUmJuqll15yLyfMA4A5BGSg37lzp5YuXaqGDRtq5syZZW7TvXt3SVJSUlKpde+++67OOecc2e121alTR+eee662b99epTVXJSO+rSyjr5Br02Y5V34gl8Mhx+OzJZdL1mlTZVit/i4RgJfuv/9+XXvttZKKhteMGzdO48aNcw8p9MSRI0d07733Kj09vcTyTz/9lDAPADVYQAb6JUuWyOl0auzYsYqIiChzm/DwcEmlA/3cuXN1xRVXqG/fvlq+fLmWLFmiwYMH69ixY1Ved1WyjB0jtW4tx8IX5Zz/vFy7dsty7dUy4mL9XRoAL/Xo0UP33HOPJMnhcOjKK6/U66+/7nV7xTfANmvW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b6958+bphhtuqNL6AQBAxQX8kJusrCxNnz5dbdu2VVhYmOLi4jR58mTl5uZqwoQJMgxD8+bN83eZgE/Ex8dr7dq1+uKLLzRmzJhyw/yp2rRpoyeeeEL79+/XHXfcIYul6FfDyWFekn7++Wc9/PDDVVY/AADwXED30G/dulVDhw5VZmam7Ha7EhMTdeDAAc2dO1cpKSk6ePCgJKlr167+LRTwgSlTpujRRx9VeHi4e9mvv/6qJUuWaP369dq0aZP2798vh8OhiIgIderUSd27d9fQoUN1/vnnS5LCw8P1xBNP6LLLLtMdd9yhl156qUSYHzhwoPbu3euX8wMAAGUL2ECflZWlESNGKDMzU1OnTtWMGTMUGRkpSXr88cd15513KigoSIZhqEuXLn6uFvCexWLRggULdP3117uX/fjjj5oxY4aWLVumEydOlNrn0KFDWrt2rdauXaunn35abdu21W233aabbrpJFotFffr00RdffCGr1SqJMA8AQE0WsENubr31VqWlpWnSpEmaPXu2O8xL0vTp05WUlKTCwkK1bNlSUVFRfqwUqJwXXnihRJh/5plnlJSUpDfeeKPMMF+WH3/8UbfccovOO+88paSkSJI7zKenpxPmAQCowQIy0O/cuVNLly5Vw4YNNXPmzDK36d69uyQpKSmpxPK1a9fqL3/5ixo2bKi6deuqd+/eeuedd6q8ZsAbt912myZMmCBJOnHihEaNGqUpU6YoLy/Pq/Z++uknORyOEsuCgoKUnZ1d6VoBAEDVCMhAv2TJEjmdTo0dO1YRERFlblM8zvjkQP/tt98qOTlZVqtVr7zyipYuXaq4uDiNHDlSK1asqJbagYpKSEjQI488Iknu9/uyZcu8bq/4BtiEhARJUn5+viSpSZMmevrppytdLwAAqBoBGehXr14tSRo4cGC526SlpUkqGeiXLl0qwzD03nvvafjw4brgggv05ptvKi4uTq+//nrVFg146KWXXnJ/MJ07d65PwvzJN8D2799fhw8fliRdffXVGjp0aKVrBgAAvheQN8UWj/Vt0aJFmesLCwu1bt06SSUD/YkTJxQSElJilhCr1arIyEg5nU6v6+nRo4cyMzO93r+yLr1uiuwRUcrIzFBsbGy5ywLZqedb08//TO+38847T3379pVUNP797rvv9vpYZYX54jHzU6ZM0SuvvCJJuuuuu/TBBx+U2058fLx7usuayGzvAV+r7ecP3gOcP1mgpr8HoqOjtXHjRq/2DchAn5ubK0k6duxYmeuXLl2qrKwsRUZGqlWrVu7l48eP1/z58zV16lT3LDgLFizQnj179Nxzz3ldT2ZmptLT073ev7Kcf4yJdjoc7jrKWhbITj1fs5//zTff7P5+xowZ5b7Xz+R0YV6SXn31VU2bNk0dO3bUeeedp86dO2vbtm1ltpWRkeFVDdUl0N4Dnqrt5w/eA5w/WSCQ3wMBGeijo6N16NAhbd68WX369CmxLiMjQ9OmTZMkdenSRYZhuNclJSXp008/1WWXXaY5c+ZIkux2u/7973+rX79+larHnyx/zFZisVrVrFmzcpcFslPPt6afv9PpLDcgN2jQQJdffrmkonnmvR1qc6YwX+y5557T/PnzJUk33HCDbr311jLbi4mJqdE99GZ7D/habT9/8B7g/MkCNf09UJm8GJCBfvDgwdq5c6dmzZql5ORk901+GzZs0Pjx45WVlSWp9AOl9uzZoyuvvFI9e/bUzTffLKvVqtdff12jR4/WihUrNGjQIK/q8fbyia88Ov91ZefkKiY6xn3vQFnLAtmp51vTzz83N7fcG7rPPvtsBQcHS5JHU1OerKJhXpIWL16suXPnymq16rzzziu3zT179shut3tcS3Ux23vA12r7+YP3AOdPFgjk90DN7U6rhOnTp6tBgwbav3+/OnbsqM6dOys+Pl69evVS69at3cH81Ckr7777btlsNr377rvup2e++uqrOvvsszV16lR/nApQSvGUq5K0fv16j/f3JMxL0tGjR7Vjxw5JUseOHRUWFuZF1QAAoKoEZKCPjY3V2rVrNWzYMIWFhSk1NVX169fXggULtHLlSu3evVtS6UC/bds2JSUlKSio5IWLHj16aOfOndVWP3A63bp1c3+/adMmj/b1NMwXK77KFBwcrE6dOnlYMQAAqEoBOeRGkjp06FDm3PE5OTlKTU2VxWIpFUyio6O1detWFRYWlgj1GzZsqBFjqwBJql+/vvv7ffv2VXg/b8O8JO3fv9/9fb169TyoFgAAVLWADfTl2b59u1wulxISEmSz2Uqsu+WWW3TFFVfo0ksv1cSJE2W1WvXGG2/o888/1zPPPOOnioGSbr31VjVs2FBhYWEejZ+/6KKLvArzkvTaa6/pyy+/1LFjx/Tdd995VTcAAKgatS7QF0+5d+pwG0kaNWqU/vvf/2rWrFm65ppr5HA4lJCQoNdff11XXXVVdZcKlMnbQP3CCy+oQYMGuuGGGzwK81LRDa979uzx6rgAAKBqEehPMXz4cA0fPrw6SwKqzcyZMzVv3jwdPXrU36UAAAAfCcibYk/nTIEeCHSEeQAAAkut66FfvXq1v0sAAAAAfKbW9dADAAAAgYRADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwsSB/FwCgNJvNppycHJ+198SCN5Wdm6cou03TJo4u9doXbDabT9oBAACeIdADNZBhGLLb7T5rLyQ0TCEFDoWEhslut5d6DQAAzIshNwAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBHgAAADAxAj0AAABgYgR6AAAAwMQI9AAAAICJEegBAAAAEyPQAwAAACZGoAcAAABMjEAPAAAAmBiBvobIzc3VP/7xD7Vu3VphYWHq3Lmzli1b5u+yytWyZUsZhlHqq2PHjv4urdq8//776tq1q0JDQ9WyZUs99dRT/i6p2jidTj344INq27atwsPD1bx5c916663Kzc31d2nVZvHixerevbvq1aun8PBwdejQQU899ZRcLpe/S6s2WVlZ+tvf/qamTZsqNDRUrVq10sKFC/1dFqrJF198oYsvvlgtWrSQYRh6+OGH/V1StXriiSfUp08f1atXT3Xr1lXfvn314Ycf+rssv1m9erWsVqvatm3r71Kqzf33319mFvrxxx+rvZagaj8iynTjjTdq/fr1WrBggVq3bq33339fY8aMUVRUlM4//3x/l1fKhg0b5HA43K9zcnLUpUsXjR492o9VVZ+NGzfq4osv1h133KElS5bo66+/1k033SSbzaabbrrJ3+VVuSeffFKzZ8/Wyy+/rO7du2vXrl267rrrdPz4cS1YsMDf5VWLxo0b67777lO7du0UGhqqtWvX6uabb5bVatXkyZP9XV6Vy8nJUb9+/dSsWTMtWbJELVq0UEZGRonfCwhsOTk5SkxM1FVXXaUpU6b4u5xqt3r1av31r39Vz549ZbPZ9OKLL2r48OH6/PPPde655/q7vGqVmZmpa665Rueff7727Nnj73KqVcuWLfXVV1+VWNaoUaNqr4NAXwPk5+frrbfe0uLFi5WcnCxJ+vvf/65PPvlEjzzySI0M9Ke+WRcuXKiCggJdf/31fqqoej311FPq2bOnZs6cKUnq0KGDtm/frscee6xWBPp169YpOTlZl19+uaSiX2hjxozR6tWr/VxZ9bngggtKvG7durXee+89ffbZZ7Ui0D/xxBPKy8vTihUrFBoaKqnofYDa48ILL9SFF14oSbrzzjv9XE31++CDD0q8fvzxx/Xhhx/qnXfeqVWB3ul0aty4cbrllluUn59f6wK91WpVdHS0v8tgyE1NUFBQIIfDobCwsBLLw8PDtX79ehUUFPipsopbsGCBRowYoZiYGH+XUi3WrVunIUOGlFg2ZMgQ7d27V2lpaX6qqvr07dtX69at03fffSdJ+umnn/T+++9r2LBhfq7MP1wul7755hutW7dOAwcO9Hc51eLtt99W3759ddtttykmJkbt27fXtGnTlJeX5+/SAL9wOp3Kzs6W3W73dynV6qGHHpJhGLXyQ50kpaWlKTY2VrGxsRo6dKi+/PJLv9RBD30NEBkZqXPPPVePPPKIunbtqubNm+ujjz7Sf/7zH504cUJZWVkVDsr7Dvyq/OMnSiwr/OMSeKHDod0/p5W7TJLCQkPUvGljj+rfuHGjNm3apEceecSj/arCkewc/fL74VLLTz3f8s5fklo2a6KQkODTHicjI6PUJ/Li1xkZGYqNjfX2FCrF6XQqZe8BnTqK25Pzr1cnQo3q1z3tcaZOnar8/HydddZZMgxDhYWFuuGGG/TQQw/56lS8lvnbQWXnlA6VFf07sFosat08RoZhnPFYR44cUbNmzXTixAk5nU7NmDFDt956q4/OxDt5x/KVlplVarkn74GmTRoowhZ+2uOkpKToxx9/1MiRI/Xf//5XBw4c0KRJk3TgwAG9/vrrPjobeOP3Q9n6/XB2qeWevAfaNG8qq9WcfX4FhYX6eX9mqeWenH+j+nVUr06kR8d99NFHdfjwYd14441eVu47aRm/KS//eIllnmSB0OAgtYg9c6/zmjVr9Pzzz2vLli0V+p1ZXbJz8pT528FSyz15DzRv2lhhoSGnPU6vXr308ssvKzExUdnZ2VqwYIHOO+88ffjhh+4RF9XFcNWmO7hqsL179+r666/Xp59+KovFonbt2mnQoEGaN2+eMjMz1aRJkwq1893OFL2x/FOv67jq4sHq0r61R/vccMMN+vTTT5WSkuL3H+i8/ON6+qVlys7x7ubMdq3jdO3IIWc8j5CQEM2bN6/EL+7t27erU6dO+uabb9SzZ0+vju8L/1m1Tl9t3u7VvsHBQZp83eVqWK/Oabf797//rcmTJ2vWrFnq2rWrdu3apdtuu01XX3213z/Y7T/wq/7vtf/I6eWvtgv69dTAPt0qtK3T6dRPP/2kvLw8ffnll7rrrrs0e/ZsTZgwwatj+4LD4dRzr72n9DJCfUU0aVhPk665VMFBp+/vCQ0NVYMGDbR3714FBxd9AF62bJlGjRql33//XfXr1/fq+Ki8w9k5enrRslKdOxXVvXOCRl04wKN9WrZsqeuvv1733nuvV8f0JZfLpdff+0Tf7/7Zq/3ttjDd9tdRirCf/kPtyZ577jndcccdWr58uQYPHuzVcX3ph5R9emWZ9zfojhzaXz26tDvtNllZWUpKStJLL73kvmJ9//3367XXXvPLTaEnO378hJ555W0dPHzUq/1bxcXohtHDZLF4/qF2wIABCgkJ0ccff+zVsb1lzo/fAahFixZatWqVcnJytG/fPm3fvl3h4eGKiory6OaKLh3aqGuid3eYd01s63GYz87O1pIlS3TjjTf6PcxLki0sVKOG9fd638uH9q/QecTExCgzs2QP0C+//OJe509DB5ytRvVPH8jLM3xQ7zOGeamoh37y5MkaP368OnfurJEjR+rRRx/V448/rvz8fK+O7StxTRtr4DkVC+SnatGsifqfnVTh7S0Wi9q2basuXbropptu0vTp03XPPfd4dWxfsVotunL4IAUFWT3f12LRlcMHnjHMS0Xv84SEBHeYl+Se5Wrv3r0eHxu+UzcqQhcnezeGu16dSI34yzk+rqh6GYahSy84z6NAfrLLh/TzaN/Zs2dr2rRpNSbMS1L7Ns3VK6m9V/smxrdU984JZ9zu+++/14EDBzR8+HAFBQUpKChIDz74oFJSUhQUFKQ33njDq+P7QmhoiK4YNtCrXBIaEqwrhg3wKsxLUp8+fZSamurVvpVBoK9hbDabmjZtqhMnTmjZsmW65JJLPH5TXZx8rupEejaGr06k3av/AF577TWdOHFC1113ncf7VpX4lrE6p3snj/e79ILzFBVhq9C25557rj766KMSyz788EO1aNHCb8NtioUEB+mK4QNl8fAXWbvWceqV1KFC2+bm5pZ6X1qtVrlcrhoxbeOgPmcpNtqzWQZCgoN0xbCBXv8Sl4p67P39gUaSGjeoq6EDzvZ4v+Tzeqhpk4YV2va8887Tjz/+qMLCQveyXbt2SeLm2Jqga2JbdW7nWQeNIemKYQPOOMzADOy2MI0c6nnnTo8u7ZQY37LC2//zn//UAw88oPfff7/GhPliwwb1UYO6UR7tE2EL12VDzqtQEO7Zs6e2bdumrVu3ur9uuukmxcXFaevWrX6/p6plbLRHHTTFLhp8rsfDrU62efNmxcXFeb2/twj0NcSqVau0cuVK/fTTT/r888+VnJysY8eO6dFHH/W4rfCwUI8vl466cIDCw0I9PtaCBQt0ySWXVHhIUHUZ2r/XGceBn6xbx3h19uDqxG233aZvvvlG99xzj3744Qe9+uqrevbZZ/WPf/zDi2p9Ly6msQadc1aFt7eFh2pkBa9OSNIll1yi2bNn691331Vqaqo++ugj3XvvvRo6dKjCw73rFfOlol7qgQr2oJd6+KA+alCv4v/5zZgxQ5988ol++ukn7dq1SwsXLtSsWbN0zTXXeFOyz/U5q6PatmhW4e1bNGuifr26VHj7O+64Q7/99ptuvvlm/fDDD1qzZo3uuOMOXX311apXr543JcOHDMPQJRf0VWQFOykkqd/ZSWoVV/ErjDk5Oe4gd+LECWVmZmrr1q1+H25RrH2b5jq7a8U6KSSpfp1IjRjUp8LbT5kyRU888YQWL16sdu3aKTMzU5mZmTpy5Ig35fpcaEiwrhjuWS/1ZUP7nfH+mWJ2u12dOnUq8dW4cWOFhISoU6dOqlPHuyvFvjS4b3fFNG5Q4e07JrTUWZ3iK7z97bffrtWrV+unn37S1q1bdcstt2jVqlV+mcaVQF9DZGdna8qUKerQoYMuu+wyNWvWTOvXr1ezZhX/D/lkbVs207kV7KU+t0cntW3p+XHWr1+v7777ThMnTvR436oWHBykK4cPlMVy5l9k3lyd6Nmzp9577z2tWLFCSUlJ+uc//6lHHnmkRk1ZObBPN8XFVKyX+rIL+nn0H//cuXN19dVXa+rUqWrfvr1uuOEGDRkyRK+++qq35fpcIw96qdu3aa6eHl6ezs7O1k033aSOHTuqd+/eev755zVz5swa84Axi2Fo1IX9K9TbGvLHf/yeXJ1ISkrS+++/ry1btqhr16667rrrdOmll+r//u//KlM2fMgeXvFe6uhG9ZXct4dH7W/cuFHdunVTt27dlJGRofnz56tbt241avriCwf2rtAHdUPSFcMHKtSDqxPPPPOM8vPzdemllyomJsb9VZOmrW3RrIkG9O5aoW17dmmvxLYtqragahZkterK4QMVZD1z506EPVyXXlCxqxPFMjIydPXVV6tDhw46//zztWvXLn3yyScaMWJEZcr2CjfFBrCCgkI9++o7+rWMWV+KNW5QV3+/5jIFBwfmhEefrtusVf/beNptbhg9XG1aNK2miqrXbwcPa+7Lb6ugsPyH/ZzVKV5XDAvMqRadLpdefusD7UktfypRe3iYpkwYqUh7xT/QmMnWHT/qzf+e/vkAlw/p5/EHGpjHex//T+u37Ch3vdVq0aSrL/WoJ9NM9qX/ov97fflphwP2PzvJq2FqZlDocOi5xe/pwC+/l7tN/bqRmnzt5R59oDGTtd98p5Vr1p92m2tHDlH7Ns2rqSLfo4feZPZn/FpqKqryFPVSDyq3l9piMXTl8EEBG+YlaUCfroqLKX8azr49OgdsmJekRvXr6sKBvctdXzcqQhcNDtwHoFgMQyMv7H/a4WSXDjkvYMO8VDSWOqlDm3LXd2jb/IyzWcDcLhxw9mlvdj//vJ4BG+YlqXmzJhp4ml7qmMYNPL46YSZFvdSDyu2lNgxDVwzz7OqE2Zzbs7NaNy////peSe1NHeYlAr2pFDoceu3dVZr1f29oX/ovFdqnWXRDDT63e5nrBp/bXc2iK3YDnFm5Z+0o40NL4wb1dEF//00vWV16d0tUQqvSN+oakkYFyA1wp1Mn0q5Lzu9b5rrunRLUKaFVNVdU/S5OPrfMG77ttjBdNqRfjZihClXHPaSqjH/nVnExOq9nZz9UVb3+cm53NSvjhu/i+228mRXKTJo0rKch/XuVua7/2UlqWYE5583MYhi6YtgAhZbxjJkGdaM0zIN7J2oqAv0pHA6HFi9erPPPP1+NGjVSaGiomjdvriFDhujFF1+Uw1H+0IWqtmnbLh05mquQkGCPelP69+5a6mFRzZs2Uf8Kjqszu4b162jYKb3UVotFV46o2PR8ZmcYhkYOLd1L3bdnF7U5TY9FIEnq0KZUL3XdqAiNGGzu6fkqyhYeVuaN8pcN6RfQVyfwp+ZNG5d6vkJoSLBGVWJ6PjOxWi26oozgfkG/XopuVDuemXBOj06lrkjHNG6gwX3L7vQLNGVN52qcJuibTeD/FHsgOztbycnJuvrqq7Vq1SqFhIQoKSlJTqdTH3/8sW644QYdPerdQwoqq9Dh0Oovt0iSBpzd1aNhMlZL0S+y4n2KpjUcIGst+CVe7OyuHdSu9Z/TSA3uW3ZvTaCKirTr0pN6qZs0rKfz+wXuJeayXHx+X0VFFE3nWnwDXKBfnThZfKtY9Tmro/t1j87t1NGD6flgfoPOKTmd64jB56h+JabnM5tTe6lbxcWoby24OlGs6Eb5P6/KenLDaKDo1jG+xFXZAb2TKvREXDOoPYmuAiZMmKA1a9YoNjZWq1evVnp6ur755hulpaUpIyNDjzzySImHqFSn4t75yAibVw+LaFivjoYPKuqlHjaoT4UeHhRIDMPQ5UP7yxYW6vHDgwJF8UPHPHl4UCA5+aFj5/XqotYeTM8XKIofOlavTqSG/8X8l5jhmZN7qRPjW6p7pzM/PCjQnNO9k9q2aPbnw4Nq2XCzk3upL+jXs9ZcnShW/NCxSHu4mjZpoL+UMyTZjJjl5g+bNm1Sjx49FBQUpC1btqhTJ88fTFSeZ199R0dzjlWiBZeO5h6Ty+VSWGiIQrz8UOFyuXSioFAhwUG1dsxsQWGhrBZLrbjEXBaXy6WCwkKv30OB4ERBgYKDau/PgMPhkEuqVb1yKOlEQaGCgqy1LswWczqdcjidta5ToxhZQCosLJRhsdS4kQqREeH6+zWXebVv7Xw3l+G9996TJA0bNsynYV6SjuYcU3ZOrk/ayj9+QvnHT1SqjeMnKrc/zK+y7yGzq+3nD6hik6UFtGO1/C+BLBBYCPR/2LGjaI7ePn18fxk6MqIyT870Te88AAAAaq7K5EUC/R+ys7MlqUoeVezt5RNJ+nrrTr370VpFRtg0/cbRAT1nPAAAADxHOvxDVFTRo6GPHDni87a9H0Nf1DsvFT319YkXlvq2MAAAANQIjKH3gY4dO+qdd97RV1995fO2fTGG3hdj5wEAABB4CPR/uPTSS/XQQw/p/fff144dO5SYmOiztr0bE8XYeQAAgNqiMmPombbyJFdeeaXeeustNW/eXP/617/Uv39/97pffvlFixYt0q233iq73V7ltTB2HgAAABVBoD9Jdna2Lr74Yn322WeSpGbNmqlp06bKyMhQenq6XC6XDh06pLp161ZpHYUOh2a/sFSHs3M04i/n6Nwevp1GEwAAAIGjZs2o72dRUVH65JNP9NJLL2nAgAHKy8vTt99+K4vFogsuuEAvvfSSIiOr/jHZm7bt1uHsHK+fCgsAAIDagx76GmjL9j364LNv1P/sJHrnAQAAcFoE+hqqoLBQhgwFBfF4dgAAAJSPQA8AAACYGGPoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHAAAATIxADwAAAJgYgR4AAAAwMQI9AAAAYGIEegAAAMDECPQAAACAiRHoAQAAABMj0AMAAAAmRqAHgP9vtw5IAAAAAAT9f92OQFcIAGNCDwAAY0IPAABjQg8AAGNCDwAAY0IPAABjQg8AAGNCDwAAY0IPAABjQg8AAGNCDwAAY0IPAABjQg8AAGMBe01ROoOrUE8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_qubits = 9\n", + "circuit = QuantumCircuit(num_qubits, num_qubits)\n", + "circuit.name = \"Tic toc toe\"\n", + "\n", + "for inx in range(len(l_player_2)):\n", + " circuit.x(l_player_2[inx])\n", + "\n", + "for inx in range(len(l_entangled)):\n", + " circuit.h(l_entangled[inx][0]) #hardamard gate\n", + " circuit.x(l_entangled[inx][1]) #x gate\n", + " circuit.cx(l_entangled[inx][0],l_entangled[inx][1]) #controlled-x gate\n", + " \n", + "circuit.measure(list(range(9)), list(range(9)))\n", + "# Simulator\n", + "job = execute(circuit, BasicAer.get_backend('qasm_simulator'), shots=1)\n", + "result = job.result()\n", + "l_final_ordered=list(map(lambda x: int(x),list(list(result.get_counts().keys())[0][::-1])))\n", + "print(l_final_ordered)\n", + "\n", + "#draw circuit\n", + "circuit.draw(output='mpl', filename='circuit.png')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.8" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/challenges/xanadu challenge/variational_circuit.py b/challenges/xanadu challenge/variational_circuit.py new file mode 100644 index 0000000..ff6b94b --- /dev/null +++ b/challenges/xanadu challenge/variational_circuit.py @@ -0,0 +1,68 @@ +### DO NOT CHANGE ANYTHING BELOW THIS LINE + +import pennylane as qml +from pennylane import numpy as np + +WIRES = 2 +LAYERS = 5 +NUM_PARAMETERS = LAYERS * WIRES * 3 + +def variational_circuit(params,hamiltonian): + """ + This is a template variational quantum circuit containing a fixed layout of gates with variable + parameters. To be used as a QNode, it must either be wrapped with the @qml.qnode decorator or + converted using the qml.QNode function. + + The output of this circuit is the expectation value of a Hamiltonian, somehow encoded in + the hamiltonian argument + + Args: + - params (np.ndarray): An array of optimizable parameters of shape (30,) + - hamiltonian (np.ndarray): An array of real parameters encoding the Hamiltonian + whose expectation value is returned. + + Returns: + (float): The expectation value of the Hamiltonian + """ + parameters = params.reshape((LAYERS, WIRES, 3)) + qml.templates.StronglyEntanglingLayers(parameters, wires=range(WIRES)) + return qml.expval(qml.Hermitian(hamiltonian, wires = [0,1])) + +def optimize_circuit(hamiltonian): + """Minimize the variational circuit and return its minimum value. + You should create a device and convert the variational_circuit function + into an executable QNode. + Next, you should minimize the variational circuit using gradient-based + optimization to update the input params. + Return the optimized value of the QNode as a single floating-point number. + + Args: + - params (np.ndarray): Input parameters to be optimized, of dimension 30 + - hamiltonian (np.ndarray): An array of real parameters encoding the Hamiltonian + whose expectation value you should minimize. + Returns: + float: the value of the optimized QNode + """ + + hamiltonian = np.array(hamiltonian, requires_grad = False) + + hamiltonian = np.array(hamiltonian,float).reshape((2 ** WIRES), (2 ** WIRES)) + + ### WRITE YOUR CODE BELOW THIS LINE + + ### Solution Template + dev = qml.device('default.qubit', wires=WIRES) # Initialize the device. + circuit = qml.QNode(variational_circuit, dev) # Instantiate the QNode from variational_circuit. + + def objective(params): + return circuit(params, hamiltonian) + + # Write your code to minimize the circuit + opt = qml.NesterovMomentumOptimizer(stepsize=0.9) + params = np.random.rand(NUM_PARAMETERS) + steps = 100 + + for _ in range(steps): + params = opt.step(objective, params) + + return round(float(circuit(params, hamiltonian)), 8) \ No newline at end of file