From 1d27133e3f924f6f1781f0652be914337ff8a877 Mon Sep 17 00:00:00 2001 From: QuantumNovice <43876848+QuantumNovice@users.noreply.github.com> Date: Fri, 7 Jun 2019 19:18:41 +0500 Subject: [PATCH] Random Number Generator in Range (a,b) (#650) * Create QRandom.ipynb * Create README.md * Update README.md * Update README.md --- Cryptography/QRandom.ipynb | 150 +++++++++++++++++++++++++++++++++++++ Cryptography/README.md | 5 ++ 2 files changed, 155 insertions(+) create mode 100644 Cryptography/QRandom.ipynb create mode 100644 Cryptography/README.md diff --git a/Cryptography/QRandom.ipynb b/Cryptography/QRandom.ipynb new file mode 100644 index 0000000..992888e --- /dev/null +++ b/Cryptography/QRandom.ipynb @@ -0,0 +1,150 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "# Importing standard Qiskit libraries and configuring account\n", + "from qiskit import QuantumRegister, ClassicalRegister, execute\n", + "from qiskit import QuantumCircuit, execute, Aer, IBMQ\n", + "from qiskit.compiler import transpile, assemble\n", + "from qiskit.tools.jupyter import *\n", + "from qiskit.visualization import plot_state_city\n", + "import matplotlib.pyplot as plt\n", + "# Loading your IBM Q account(s)\n", + "IBMQ.load_accounts()\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def real_map(value, leftMin, leftMax, rightMin, rightMax):\n", + " # Maps one range to another\n", + " # Figure out how 'wide' each range is\n", + " leftSpan = leftMax - leftMin\n", + " rightSpan = rightMax - rightMin\n", + "\n", + " # Convert the left range into a 0-1 range (float)\n", + " valueScaled = float(value - leftMin) / float(leftSpan)\n", + "\n", + " # Convert the 0-1 range into a value in the right range.\n", + " return rightMin + (valueScaled * rightSpan)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def QRandom(a, b, qubits=2):\n", + " # Quantum Random Number generator\n", + " q = QuantumRegister(qubits, 'q')\n", + " circ = QuantumCircuit(q)\n", + " c0 = ClassicalRegister(2, 'c0')\n", + " circ.add_register(c0)\n", + "\n", + " for i in range(qubits):\n", + " circ.h(q[i])\n", + "\n", + "\n", + " for i in range(qubits):\n", + " circ.measure(q[i], c0)\n", + "\n", + " #circ.draw(output='mpl')\n", + "\n", + "\n", + " backend = Aer.get_backend('statevector_simulator')\n", + " job = execute(circ, backend)\n", + " #print(job.status())\n", + " result = job.result()\n", + " output = result.get_statevector(circ, decimals=5)\n", + "\n", + " n1 = 0\n", + " n2 = 0\n", + " n3 = 0\n", + " for i in range( output.size ):\n", + " if abs(output[i]) != 0:\n", + " #print(i, output[i])\n", + " n1 = i\n", + " n2 = np.real(output[i])\n", + " n3 = np.imag(output[i])\n", + " \n", + " y = real_map(n1+n2+n3, -qubits, len(output)-1+qubits, a, b) \n", + " plot_state_city(output)\n", + " return y" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJztvWtwI9l15/m/ADIBJAiCJMB6dRXJfrDUelhqS2VZsrrZtmR5/FpL6w07PBv2tjcUoZkJe9bz2LDl2djx7IY/ODZmHTNfdjY0ttc99qwdHj9GWnvssLa9Frutl6tbrVa31C72g2TXqwsAC3wgAWQi8+6HzJtIgkggE8jHBXB/ERUsggR5CWSePPm/5/wPoZRCIBAIBNNPKukFCAQCgSAcREAXCASCGUEEdIFAIJgRREAXCASCGUEEdIFAIJgRREAXCASCGUEEdIFAIJgRREAXCASCGUEEdIFAIJgRMnH+skqlQjc2NuL8lQKBQDD1PP/88zVK6eqo74s1oG9sbOD69etx/kqBQCCYegghe36+T0guAoFAMCOIgC4QCAQzggjoAoFAMCOIgC4QCAQzggjoAoFAMCOIgC4QCAQzggjoAoFAMCPEWoc+i+zXVbxWPcZHHz0/1vO/8K238eiFIq6sKCGvjG/uHLbwyq0jfP+7xnvdkuTlW4dQNQMffHAl6aUIQuLVu0f4Ly/dGfo9P/DuC3jPA6WYVjQeIqBPyG9/aRdPf3kXL/7Lj6OYkwI991DV8Q9+5zr+2+9ew69+8juiWSCn/Pbf7OK3/uZN3PjVHwIhJOnlBOKX//ibaHa6+Kv/8XuTXoogJP7t/7uDP3/5LrwORUqBG2+f4P/8mQ/Eu7CAiIA+IScdHYZJ8aXX6/h7774Q6LnPvVaDSYG9uhrR6vjl7aM2dIOi0zWRk9JJL8c39ZMOXr59iEyKwDAp0qnpuhgJBvNmrYmPPnoOv/Wz3zXw6z/+f/wNTjrdmFcVHKGhT0hLNwEA2zeqgZ/LnjOPAb160gEAtHUj4ZUE47nXaqAU0A2K241W0ssRhAClFPsHKtbL3rJnIZtBUxMBfeZpaVZAenanFuh5lFI8u2MF9FuNFnTDDH1tPFM71gAArSkL6Ns3eu/zPF6IZ5HqSQeqZmB9yD6WIqedc51nRECfEJZh7h+o2K01fT/v9eoJbh+28f61JRgmxa3785XtsQx9Gk4SBrsIv39tCQCwd+D//Rbwy759YV4vFzy/pyCLDH0uaOkGLi/nAQDbO/5lly/amd7PfHgdALB3MD/Znm6YuK9OX4b+6t1j3Dvu4CevXYGcSTmBQDDd7DkBfUiGnk1D7fB/rIqAPiEtzcCjFxaxtqIE0tG3b1Tx0GoBH3m4AgDYq89PtnfQ1ECp9f9p0tDZ+/vkO1axtqJgd47es1lmr95EigCXl4dJLiJDnwvauoG8nMbW1Qq+/HodWne0Ft7WDXz1zTq2NlexWswiL6XnSo+tHnec/7e06dk7eHanhqvnF3CxlMf6ijJX79kss3eg4mIpDznjHQ4VOY22bsIwaYwrC44I6BPS0g3kpRS2NlfR1Ay8sH9/5HOu795HWzexdbUCQgjWVpS5ytCZfg5Mj+TS0gx8bfcAT2xaQ2PWygr2D1RQyvcJLhjNbl3FRmV4Y19Btiq8eT9eRUCfECugp/Hhh8vIpIgv2WV7pwo5ncKHHioDsLS7ecr2TmXonJ8gjK+8ad19bV21AvpGuQBVM05dnATTyX69ibUV7w1RwNLQAUDlvBZdBPQJUTUDOTmNYk7C+9eWfW2Mbt+o4trGMhT7qr9uZ3sm57dzYVFzZ+hToEsC1nuWzaTw3Xa7/5q9gSY2Rqebw5aO+6qOjSEbooAluQBAk/OqLBHQJ8AwKbSuibzd6bh1tYKXbx2hPiRru3fUxqt3j51MDwDWygV0uibePm5HvmYeOK2h832CMLZvVPHBB1ecrlZWszxPd1azyL6PChcATvLVFBn67MIqNHoB3QrSz73m3WS0bTcgPbFZcR5j2cG8BIfaiYYLizkAvU5bnrnVaOH1ahNPui7Cl5cVpMh8VSfNIqyXYJTkwjR0lfMERAT0CWD6L7sde/elEpYVCV8coqNv36iispDFOy8sOo+t2wfTvNy+V4/beMCu3Z8GDf1Z+/1kG6IAIGdSuLSUn6v+gVnETw064NLQOZcIfQV0Qsg/JYS8Qgh5mRDye4SQHCFkhRDyBULIjv1xOerF8gaTC9hteDpF8PjmKp7dqQ2sfjBNiudeq2Frs4KUy9Tp0lIOmRSZm7rm6nEH5+xyzWmoQ9/eqeLCYg5Xzy+ceny9rGB3Ti7Cs8pevYnKQhaF7HCfwpnJ0AkhDwD4HwBco5S+B0AawE8B+AyAZyilmwCesT+fKxzJRe65BW5tVlA97uDVu8dnvv+V20c4aGqn9HMAyKRTuLw8P9le7USz6u+nwB+ja5h4bqeGJzYrZ2x+18sF7M/JRXhW2asPN+ViOJuiM6KhZwDkCSEZAAqA2wA+AeBp++tPA/hk+Mvjm1afhg70dPRB5YusAuZxl37OWCsX5kKP7XQNHLZ0VBasDJ13yeWlW4c4anfPXIQBa2P0vqrjsKUnsDJBGAQN6FOfoVNKbwH41wD2AdwBcEgp/UsA5ymld+zvuQPg3KDnE0I+TQi5Tgi5Xq0Gt5jlGZZdugP6+cUc3nG+OLB88Ys3qnj3pUVUFrJnvrZh16LPeqNK/cTycFktZpGTUtwH9O0bVRACPP7I2YswM3Oal72PWaOtG7h71Hb2sIbBJJmpD+i2Nv4JAA8CuASgQAj5ab+/gFL6WUrpNUrptdXVs1nONMOCUU4+PaBh62oFf/vm/VMbKMdtHS/s3R+Y6QHA2oqC43YXDXW2sz1WslhZsCSXNucnyPaNKt77QAnLBfnM11hmJ1wXp5O3bIlzVJcoAGQzKaTIbGyKfj+ANymlVUqpDuCPAXwPgLcJIRcBwP54L7pl8smgDB2wZBfNMPHVNw+cx77yxgG6Jj1Vruhmw872Zn1jlDUVrRazUKQM1xnPoarjxbcaQy/CwPyUm84abEN7zcc8X0KIZaHLueOin4C+D+BDhBCFWLtCHwPwbQCfB/CU/T1PAfhcNEvkl0EaOgB818YKspnUKR19+0YVipzGtfXBg4VZtrc/4xujLENfLWaRk/nW0L/0ujUi0CugF7IZrBazc7H3MYuw922YD7qbvJzmPkMfOVOUUvpVQsgfAngBQBfA1wF8FsACgD8ghHwKVtD/iSgXyiOtAVUugFXG+N0PlU8H9J0qPvxQ2dPR7cqcZHssoJcLMvJSCveO+A3o2ztVFLMZPHZlyfN7hOvi9LJ/oKKYy2BZ8Tfc3RpDx+/xCviscqGU/gql9FFK6XsopT9DKe1QSuuU0o9RSjftjwejf9Js4Ugu8tkhx1ubFbxebeJWo4W9ehN7ddUz0wOsi8DFUm4uJJfFXAY5Kc11lQulFNs3avjww2VIae/ThLkuCqaPXbvCpb8c1QtrDB3fGbroFJ2A/tZ/N6xN/Nkb1YHt/oNYW1FmvmKietJBpWhV+fBch84uxsMuwoC193HnsD0VDVKC0+zXm74qXBizoqELPGjpBjIpMjCDe+TcAi4s5rC9U8X2jSouL+fxYGX4wTMPnYe1Yw2rdtlmjuMMnQ3wfnJEQGd7H2+JLH2q6Bombt5v+apBZyhZ/jV0EdAnoKWZA7NzwNoV37pawXM7NXz59Tq2rq6OvLVbLxdQO+lw3402CdWTDlZZhs5x6//2jSoerBScvQ0vWIXErF+IZ43bjTa6Jg0W0OX0bGjogsG0dONMDbqbraurOGp3cdLpYmtzdA3+PFS6VI87TmNVXkpDNyh0gy/HxU7XwFfeOBgpkQG9clNR6TJd+HVZdKPIGTHgYpZp29OKvPjIwxUQYpl2fc8j5ZE/b9qCw5u1ZqChHC3NwEmn28vQ7Yshb1n69d37aOmGr4vwkiKhmMvM9EU4LI7aOu5x4vnP7qj8NBUxCnIaKmfHaj8ioE+AqnWHBvTlgozv2ljBdz+4gsXc6NKotSnyRa8ed/D9v/5F/Nk37/h+jtNU5NLQAf4sdJ/fs+bCfujh0RdhQgg2ygUhufjgf/1/voX/7je/lvQyAFgbonImhfPFnO/nKNkMVM43RUfWoQu8aenmUMkFAP79z1wD/FVFYTEnYVmRpsJ1sd7swDApXr17hP/qfZd8Pafq6hIFeoZHvFW6HLd1KHIaCyMsVRlrZQWv3DqMeFXTz6t3j/DavRN0DROZIaWgcbBXV7G+opyysR6FIqWhGSa0runZT5I0fK5qSmhrBvLS8JewpEgo5f01LgDWxug0SC6sfCtIZuruEgV65Z68ZehNzXBGjvlhfUXBzfstdDnbC+AJSin2aiq6JsXtRvKyi1+XRTeKfYHnLQFxIwL6BLT0YCe+H9bL09F5yMq3gtTNM8mFbYrmOM3Q1U4XhezwOy83G+UCN4GKV+6rOo7tDcWkzcwopdg7aAbaEAUsDR0AmhyXLoqAPgGtEZui47BeLuB2owWty3e2x0y1dutN35a/Ttv/guVcyGuGrmrB3tc14bo4EncHdNL7DfeOO2jrZqANUaCXofNsKCcC+gS0NMPZ2AuL9RUFJgVu3uc7S2cZehDL3+pxB8uK5DRisaDJW5WLqhkjR5K5WZ+izeykcN/JJT3laS+Ay6KbgjPkQmToM0lbN5CXw30Jex7bfAcHdwu037XWXE1FQK9ssaXxdTfS1LrOhq0fzhdzyGZSU7H3kRR7dRWEWEE06QtfUJdFRt4ZQ8dXAuJGBPQJiEpyAYC9Gt/BwZ2l+A1k1eO+gM6r5NIxnKHAfkilCBeBimf26k1cXMzh6vli4q/TXl1FOkXwwFI+0PN6g6JFhj5zUEojCeiVBRmKnJ6uDN3nCVo70U6N3+O1Dr2pdaEE2BQFrDsr0Vzkzd6BirWy4rxOSY5a3DtQcWkpF7j0kG2U89z+LwL6mHS6Jig9O35uUgiZjmyPXcwuLOZ8rZVSamXoC2clF97G0LU0I5DkArBy09mfCTsuVt13AetlBS3dcDbIk2C/3nS6soPAKtp4ttAVAX1MvMbPhcHGFNSiN+3SvrWy4mutTc1ASzcc61yg99rxVjXQ1LqBJBcAXAQqXjnpdFE76WC9ojiSYpKVLrt1NfCGKNCTXISGPoN4jZ8Lg/WygrcOWjAC+KTEjWo336yvKL7kodrx6bZ/wPK4kTMpriQXw6Ro62bg/gIeAhWvsAqX9ZUC1p3JXMkkLA1Vw2FLD9xUBPTuKIWGPoN4jZ8Lg/VyAZph4u4Rv40qzY5VCbJRKaB63Bl5kPe3/TN4s9Blf0eQxiIAiQcqnulVlSh4YDmPdIokJimy3xu0wgUA5EwKUpoIDX0WiVJy6dU18xscVFtnXvM5C5Vl6O5NUcB6/XjqFFWHjBUcBgtUYmP0LOwObr2sQEqn8MBSPrFNf/daxkGRM1wdr/2IgD4m7QgzdBYkeR5Hp2pdFLIZl+Xv8LV6ZugyX1OLWEAPqqGzQCUkl7Ps1VWsFGQUbcfR9bKSWHMR+73jaOiA1VzE8wAaEdDHJEoN/dJSHlKacB0cnAzd591E9biDFAFWCvKpx3kbQ8dO1qBVLkCygYpn9urNUxlxkqMWd+sqzhWzY3swKdkMd5v4bkRAHxN22xV26z9gbRZeWVawz7E3CKsEKeUlLPmw/K2ddLBSyCLdZ1eal1Kcaeh2hh6g9Z+x5nODeN5gVrWM9ZUCDls6GqoW+1r2x3BZdGONoRMZ+swR5aYoYBk+7db4DQ5qx3Cab9bLhZHyUH+XKCMv86Whs5N1nAx9o1xAQ9Vx6NPbZh7odA3cOWxhzbUJmeQgl916c6wNUYYip7keciEC+phEuSkKWMEh6Y66YVh+J1YWu76inHLTG0T1RENlQT7zeJ4zyYWdrOPckgvXxbPcvN+CSYENV1bs7LvEfDfT0gzcO+6culsISkHOQNVFhj5zRKmhA9bt+0mni4Nm/Lelo+jVarMMXRlp+VvzyNBz3FW5TKahA8J10Y1Tg+4K6L1N/3gvfKwCaW0SyYXzMXQioI9J1JIL82rmcWOU/e2sEmS9XIBJgVuN1sDvp5SienK67Z+h8FrlMqaGDvBdbho3uwOcDfNyGucXs7Ef22wt47T9MxRJaOgzSVszQAiQjWi2IJumwuPGqMoqQbK9DB2Ap+xy1O5C65qDNXTOJJdJNHRFzuBcMSsydBd7dRUFOY1yX3XT+srofZewGXS3EBQlO+UaOiHkHYSQF13/jggh/4QQskII+QIhZMf+uBzHgnmBmVMR4n/IbBCurORBCJ+3702tP0MfXjdf9WgqAixzM64kl46BdIqMfaHesE26BBb7ByrWyoUz58laWYl9r2HvoInFXAZLytm9HL8U5AyaWpfbva2RRy2l9O8opY9RSh8D8AEAKoA/AfAZAM9QSjcBPGN/PjdEYZ3rJptJ41Ipz2VwYDozk5tWF7KW5a/HWmseTUWAlaF3uiZMTnxrVM2AMsGFOolAxTO79eapDVHGRlnB20edWC/me3UVG5Xx5RbAytBNarmt8kjQNORjAF6nlO4B+ASAp+3HnwbwyTAXxjstzYykBt2NZaPLX3Do76bsWf4OXivL0L0COgC0u3xk6eoYXuhu1lfiD1S8YpgUNw9aAzchWRljnFYJe2O6LLrpDbng8/0NGtB/CsDv2f8/Tym9AwD2x3NhLox3rPFz0Qb0jQqfvujNPg0dsGQXrzI0lqEPklx6Y+j4OEGaWrBpRf2sV+IPVLxy96gNzTCxvnI2K2alg6PKXcNCN0zcarQm2hAF3GPo+NwY9R3QCSEygB8D8J+C/AJCyKcJIdcJIder1WrQ9XFL1JILYG2M1psaTjg7eAb5nazbdfODpJPqcQeZFMFSXjrzNd6mFqmdyTN0QFS6AL0xioMlF/vCF1PCcuu+ZUc9SckiMFsZ+g8BeIFS+rb9+duEkIsAYH+8N+hJlNLPUkqvUUqvra6ujrVISinqJ3wNDlC1buQBPQzXRa1rotM1PP+Ns7kzyO9kbUWB1h1s+Vs97qC8ICOVOqtLO5ILJwHd3TA1Ds4GscjQnTu2QUG0pEgo5aXY9hscl8UJJRfFGUPHV5LFCHLk/n305BYA+DyApwD8mv3xcyGu6xT/4k9exhf/7h7+5jMfjayqJCgt3URpQMYZJm7XxXdfKgV+/u98ZQ//839+eej3/Pj7H8Cv/+RjgX4uy6bdAd3tunipb/hu7WRwUxHA39SilmZguTB+FcSSIqOUl2KTEnhmt96EnE7hYmnwMOaNcnyS4t6AevhxKDhj6Pg4XvvxFdAJIQqAjwP4B66Hfw3AHxBCPgVgH8BPhL88i+94oITf+9o+Xq+e4JFzxah+TSDamoELi4ODVFics4Ngfcxu0W/dPsJCNoN/9L0PD/z6n3z9Fv7u7nHgn8tGcLmbb9x3Ex9+uHzq+72aigA+NfTLy+Nn6IC9n8Dh3kfc7NdVXF7JnzFkY6yVC/jGW41Y1rJXV5GTUjg/4TmrcK6h+zpyKaUqgHLfY3VYVS+Rs3W1AgD44o0aNwG9pRsT3Zr7YdG+AzhsjWf2dNjScKGUw8993yMDv77z9jG+PsYJpWpdpPqaqi6WcpDSZODGaO1YwzsvLA78WU5A50RyUe1JTJOwtqLgm7cOQ1rR9NLvstjP+oqC//LNO9ANE1I62h5HVuEy6R0+OzZ4uaPsZyo6RS8vK3hotYDtG/xsqrZ0I/KyxZyURk5KjR3QG6o+VBZayGVw0g6eaTQ7ViWI++TIpFO4vKyc2eQyTepLcuFHQzfGavt3s1Eu4Ob9FnSDz1rlOKCU2j7o3hLHelmBYVLcuj/YMiJMRq3FL+zY4FVDn4qADgBbm6v46pt1bk78thZ9lQsALOXlsX2jD1v6wMoSxkJWwvEYAV3VugNLNtcGuC4etnR0TTqwZBHoBXRuMnQthAzdDlS3Pbxt5oF6U0NTM4a22a/H5LpomhT7B8PvFvziZOictv9PT0C/WkFbN3F9937SSwFgly3K0b98S4qExpj+2g1VR0nxDujFXAaaYVXBBEH1yGI3ylaG7q6c8Ro9x+hp6Mlns1rXhG7QiQM62yDm0VgtLtgewrC677hm59477qDTNZ0egUlQZqhsMVE+9FAZUppgeyd52UU3THRNGkuGvpiXJtDQh0suxZx1cAaVXbyy2LVyAcedLu67LkDDukQBvurQ2cbspHsjPW+b+a10YUF6WN33uWIWOSkV+Qay4/gYQoaeThHkpJRjf8EbUxPQFTmDa+srXOjoLPhEraEDwNKYAV03TJx0uljKe5fgLdhZdtDGJaah9zOo+29YlyjAl4bOdNHCBI1FQHyBimf26ioIAS4vDy5ZBCzLiPWV6M3MwnBZdKPYBl08MjUBHQC2rq7i1bvHuDegeSVOnGlFEbf+A+NLLkf2RWBpiOTCAnpQHd3L74R5uLs3Rkdl6FKaIJ0iXJQt9oZbTJahs0A135JLE5dKeWQzw88Rq8Qz2juZ3XoTmRTBA0veF5cg8DyGbsoCulW+uL1TS3QdUY+fc1MaM0Nv2M8ZVeUCjJGha8ZAyeXysgJCTmfo1ZMO5HQKi7nBQZIQgryU5kKT7NXXT/6+rpX5HvIdNXsH/oYxr5cVT8uIMNfywHIemZBKIwsiQw+Hd15YRGUhm7jsEvX4OTdLioyWbgSWJFhWP3RTNGt9LWiG3tIG1+DnpDQuLubOZOirxezQ+t8cJ0MuVOdCPXl/wfqK1VzEiy1w3OzX/QX0tXIBna6Je8fRWXvsh+Cy6EbJ8pGADGKqAnoqRfDEZgXPvVZL9ESJevycG5ZhHwXM0h3JxVeGHuxnN7UuCh5/+1qf62L1uIOKh9zCUOQ0Fxq6GpKGDliui1EHKl45buuoNzVfdd8bI6ZdTQql1PZkn7zChaHIIqCHxtbVCg6aGl65fZTYGtoxSy5A8G7RRks79fxBOJuiQTX0jgHFo/nG2uRyb4pqWF0Y7o2S52RQdDOkKhdgvl0X2Sann6oSZq0bletiQ9Vx3O6GtiEK2JuinLb+T11Af2LTcmxMsnwxzgydbWo2ggZ0lW2KegdTVrZ4HODg1LomNMP0zNDXKwpqJz3LXya5DCPHyaBoNis1jAzdbVY2bzCnST8Z+qWlHDIpElmGvhdgLX4piAw9PCoLWbz70iK+mKCOHquGbpcdBq10YRm912YkYHmxSGkSKEPvVfh4Z+iAlXEZJsVBs+NZssjISykuArqToYegobNANY/j6HZ91KAzLMuIfGTdoj2XxTA19IwI6GHyxOYqXti7j+P2eA03k8KCWhx16GNLLqqOYi4zdGefEIKFbCZQlYuq21msV4bu6v47aGowqXfJIiMv8aGht/pmpU5CJp3CA8t8zoSNmv26isqC7Eh6o1grFyKTXNjrH+amqJWhC8klNLauVtA1Kb7yxkEiv78d56Yok1wC+rmM6hJlBDXoYqV9Xho6y8r2DtTecOhRGbrMj4Yup1OQM+GcFuvl6JtmeGQ3oBHWRtnyABpn2IqftVxYzIWafOVlK0PnsYJpKgP6B9aXocjpxMoX1Rg3RYvZDFIkeIZ+2NKHNhUxFrISjgIEdKcSxONitpiTsFKQsVdXnaaiUVUu3JQtTjh+rp/1legCFc/sj7DN7WdtRcFxuzu2Z9GotUw6dq6fAmeWz26mMqBnM2l86KFyYhujcbb+p1IEi/ng3aINVRva9s8oZjOByhadDH1IJQjr/nO6REdq6HxILpMOiO5nvRxdoOKVtm7gzlE7UBCN0nVxLySXRTcKxxa6UxnQAWBrs4K9uppIWVhLNyBnUp6TWMJmHD+Xhk/JpZgLqKFrZ+eJ9sOaahwfFx8aOg+bTF62wOMSlz0sT9y8r4LS4S6L/WxE5LrY7HRRPe5gIwSXRTcFzqZsuZnegH6VlS/GbwPQ9mh9j4qSIgcuWzxqDbfOZQTV0FngHVbat1Yu4PZhC7cbLeSltKc8w8jbZYtJSxOqZoxcaxDisoflCWcTMkCGfsWp2Q/3wsfKJ8PcEAV6d6dNDv1cpjagP1gp4PJyPhEdvaXHM9yCUcpLOAywKUopRUMdPtyCEbjKxYeB1UZZAaXA199qjGz7B6yATinQ6Sbria52wh0ruBZRoOIZPz7o/eSkNC4s5kKvRd8L2WWR0RtDJySX0CCE4InNVXz59Xrso75auhlrQA8quTQ1A12T+q5yCeLl4hhYjdDQAeCV20eojOgSBfix0G1q3VCaihgsUM1XQG+imM1g2cfdoZv18tnxhWGsBej1RoQFO0aaQnIJlyevVnDS6eKFvXinGLW06OeJullSpECSy6EP61xGMZtBp2tC85kdqz5qtdfsE8gw6cgadICfMXSqh+nYJKzFYA/LE3sHVlVJ0GHM630eQGGtZUmRfEmPQXCmFnHY/j/VAf17HqkgnSJ4NmYdva0bsdSgM5iFrt+6V1azXvJR5RJ0yEVTMyClydBa7cqC7GjRo7pEAfcYuoQz9M7k80T72YggUPHMXl0dywhrvVxA9bgTqkeK5fgYbnYO9O5OedjI72eqA/piTsJ3XlmKvXwxCQ2dUv+eK4fqaC90xkLO+h6/G6Ne1rluCCFYs08kPxk6L2Po/PxtQWGBike9NWwMk+Lm/fHqvp2xfSFe/HbrzdBLFoFeAsLjezrVAR2wbAC+eesQB81gnZSToMYuuViZ9qHPeuZAkotj0OXvZzc73ta5blgpWhDJJUkNnVIauoYOuCtdZj9Lv91oQTeo894HgencYclTWtfE7UYr9A1RQGjokbJ1tQJKgWdjzNLjllxYtQqzxB1FI6CGDvjP0FXN2zrXDcvSgkkuyVW5dLomTBqOda6bXqCa/YDe800JLnOshXzhu3lfhUnDdVlk5DJpEMKnhh7u0ZsA7728hFJewrM7NXzisQcCP7/Z6eIX/+gl/IsffqfvmYMtzUBeiu9ayDZ1/Fa6NAJJLkE1dH86MwtkQTL0sG5h27qBX/qjl/Dz3/cINs8XfT2nGaJ1rpu1KapFN0yKn/+/X8DtRmus59+3j7txsuJSXsKyIoW239CzzQ0/Q0+lCBQpzWWGPvX7KYpIAAAgAElEQVQBPZ0ieOzKEl69O97Ai2/cbODPXrqDj77jHP6bD1z29ZyWHr7WOgwnQ/cpuTRaGuR0ypfOH3RT1KrVHv1zP/6u8/jWnUO86+LiyO8NW0P/8ht1fO7F23jsypLvgB6VP0/YgSpKqscd/PnLd/HohSIulHKBn79ckLF1tYKLYzwXAM4v5nDvKJwJT/sBhmyMA68WulMf0AHrKvzC3n1QSgOXS7FbvCBlgS09Xg29FHDIBesS9fNasAzdr0GXqndxvjj6hF0tZvGrn/wOXz+TSS5haeis2SyIh0qvAzb8UyJKe9gwYZLeP/7oJn7kvRdj//1LihR41KIXu/Um8lLa1x3iOCicWuj60g0IIUuEkD8khLxKCPk2IeTDhJAVQsgXCCE79sflqBfrxXq5gONO17nlCwIL6H7lDMOk0LrxNhYFnSvqt0sU6A2K9q2hDxk/Ny6KFG7ZIgvowZqxRnvUjAtzXeSdQ9X/3ksULOVl3/tEo2BDqoMmeH6xxtDxl6H7FYL/LYC/oJQ+CuB9AL4N4DMAnqGUbgJ4xv48Edht1TgnDdM2/bbW97zQ49PQs5k08lLatyd6Q/VnzAUAOckyGfPruDhsQPS4OJui+uSborcaLbxetd/TAAFd7USXoW+UFdxutHw3byUFuwP0e+yEzZIS3FXUi70DNRL9nMHrkIuRUYkQsghgC8BvAgClVKOUNgB8AsDT9rc9DeCTUS1yFE4N6xi3tUEllzjHz7kJcrD79UIHrJrxYgCDLrUTfoVP1m5SCkNDf9bOzou5TKChIFFm6GvlAkxqVV7wTJD+hSgojeEqOgjTpNg/iKapiKFkM1xuivpJMx8CUAXwfxFCvk4I+Q1CSAHAeUrpHQCwP56LcJ1DubKigJDgJU+UUqeRwW+wjHP8nJtS3n/7vzWtaHSXKGMhm/HVtEQphaqH6xkOWBeVsDzRt3equLCYw/suLwXaF/FjOjYujj0s5xujTO5ISnIpKRI6XXPi4+DuURta1wzdZdFNQU47Iwt5wk9AzwB4P4B/Ryn9TgBNBJBXCCGfJoRcJ4Rcr1ajqRXvmSAFk1zqzd50er+ZQSvG8XNugmQvDVULlGUtZP1l6J2uCcOkoU71YYQxhq5rmHhup4YnNitYUoJle86maCQZ+vh3kHFy2NKRThHfs0DDZtyB6P2M4/gYlLycnloN/SaAm5TSr9qf/yGsAP82IeQiANgf7w16MqX0s5TSa5TSa6urq2GseSDjmPuwN76YzfgP6DGOn3OzpEi+OkV1w0RTMwJlWUWfjou9oBf+CZ8PYQzdS7cOcdTuYuvqqm05HFxDD3vDF7AmNilymvuNUbb3EtVG4ijGHYjej+OyGKmGnplODZ1SehfAW4SQd9gPfQzAtwB8HsBT9mNPAfhcJCv0yfpKIXCGvn9gff93XC751luT0tAtyWX0GoO0/TP8eqKz5psodOaclJo4Q9++UQUhwOOPVByHSr9DM5iGHsX7SgjB2kr49rBh02j5r46KgqUxB6L3s3egIpMiY9fD+0HJTndj0T8G8B8JITKANwD897AuBn9ACPkUgH0APxHNEv2xVlZQO7EkFL+3jLs1FYQA73mghK+8UYdpUqRGjJVLSnJZUmRfmUuQLlHGQk7Cro9gwzL0KHRmNrVoErZvVPHey0tYLshYysswTIqmZvg6Hix/nujGCq6XFaf6hlf8TrmKilI+WL+FF3v1Jq6sKMiko6tEK8gZaF0TXcOM9PcExddKKKUv2rLJeymln6SU3qeU1imlH6OUbtofD6Je7DCYXhYkC9o/UHFxMYdzxSxMCpz4uIVqa8lp6G199IbR4RilZ/4lFztDj0JDlybT0A9VHS++1cDWZgWAKzj4zPZUrRuJlMRYLxewf6D6tkBOgiD9C1EQnuSiRrohCrimFnEw3NwNP5eWCRlnfuNevYn1cqF3IPnQXJOUXIDRB/uhU6ngv8qlmM34qkOPVEOXMxNl6F96vQaT9mbNOt21PnV0q2Equvd0vaxA65q4e9SO7HdMSqMVbDM9bJjkEmTvox9KKfbr6liOj0HoDbkQAT0S1sYoDduzu8mCZAZJ1qEDo9c4luSSzaCtmyNH+UWpoeel1ETlats7VRSzGTx2ZQlAz//Gb3dtM+oM3TYr43lj9FDVAyUCYbOQzSCdIhN1ix40NRx3uo4ff1T0LHT52hidmYC+mJOwUpB916Ift3XUmxrWywXnIPaTzTl16HFr6D5LupxN0UAaOptiPvzgjNLvZJIqF0optm/U8D2PlCHZemZQ/xtr/Fy0GTrAb+miYVIctbuJZuiEkImbixyXxcglF5GhR87aiv/5je6J4M7uuo/MoJ2w5DJKE2YBfzFghg5gpI4eZTflJHXor1ebuNVo4YnNXlls0Jpma/xcdBn6paU8pDThtrnoKOG2f8ZSfrL2f3bB3KhEG9ALnE4tmqmAvlFWfGforEN0bSWY5KJqBjIp4mSCceFXcjls6VjMZQJVazhTi0YE9JZT5RJF2eL4GTobbvLkVVdAD+ghH3WGnk4RXF7md2D0OOWuUVAK2BDWz269CUKAy8vRBvTeGDqRoUfGWrmA24ctdLqjX2R3ht7Lfv1p6HFn54D/IReHY5SeLTDHxRGSC+uMi6RscYLW/+0bVTxYKeCK6zY7J6UhZ1K+9VhVMyKRktysB0g44ibIlKsoKYWQoV9YzEVuzcGOFaGhR8j6igJKgZv3R09c2as3US7IKOYk5KQ0clLKV2bQ1o3Y9XPAqkRJp8jIg72hao7c4PtnO1OLhv9sVetGVqudl9LQDTpyY7afTtfAV944cMoV3SwF6BZVfU5imoT1FSug+212ihMm5fEguUyqoUfZIcpwyhaFhh4dTDfzs/G0Vz89ndxvq3gr4ltzLwghWMyNtihoBHBaZCz4lFyirATpWegGO0Gu795HSzdO6eeMIH4uzU70GfpauYCTTjfWgeZ+6fUvJFflAljltpN0iu7Vm05FUZSw80Bk6BGyFqA0bP9APWXe49dcPynJBbAPdj8aesAsq+hzDF0U1rkMdovcDqhJbu9UIaUJPvxw+czXlvKyr9t306SxvK88uy7yoqEv5iUctbswxmjAOul0UTvRTiVqUcF6FoSGHiGVBRkFOT1Sp+x0Ddw+bJ3qJiv59Btv6Wbs1rkMS18cftE5HKPbzxkUPSJDV7XwrXMZ+THnim7fqOED68sDs+tFn5bD7HeGPSC6n3Ga3+JinP6FKGDH7nF7nOlj1usapcsiQ05b0qOocokQQog1v3FEBvTWQQuUni5t8qvdtbXkMvRRNbqU0rEkl7yURor4k1yi6qZUxpBc7h238e07R053aD+WQ+Xou65mhF7obi4vj+fbHwcNVUdBTsdevdXPUsAOXzf7rkKHqCGEQOHQQnemAjrgb34jc1lcc2ltfhsaWnp0ssMoRmnCJx3rVjVolkUI8eW4GGWGzjaag9SiP3ujBgDYGqCfA/4v0r3xc9G+rzkpjYuLOS4DujXlKln9HHAF9DE2RpmUFYfkAvBpoTt7Ab2i4OZBa6gGt1s7eyX3O+ItUQ19RElXr0s0+IlZzEmjM/ROdJUg40guz+5UUS7IeNfFxYFfL+UlNDVj5CzPuDJ0wAo2PEouhwn7uDAmMejaqzexUpCxmIvn7+DRQnf2AvpKAZph4s6hd+ni/oGKhWwG5UIv8C0pMlq6MbKGvaUZiWroR23d07HP0UHH2Ngq5kYbdEXZfMMCut9adNOkeNaeTuRleey3uUiNsGGqnw0fkmASBBksHiUlp8M3eKVLHC6LbgpyZmIP/7CZuYC+4cMzY6/exNqKcmoyy6LPzMCSXJJ52UqKDEq9te5xrHMZfiWXKCb6AK6yRc1fHfq37hyh3tQ89XPAer2AIAE9ngyd+fbzRJDB4lEStMPXzV4MLoturDF0fL2PMxfQ/bguMpdFN2x3fVQteivBTVG2Rq/yyklKzxZyo+eKWp7h0WbofjXJL96w2v0fH9BQxOjdvg/P9lT7pIxaQwd6rou8yS7jbKZHQRArazdO5VoMFS6MgpwWZYtRc7FkmSB5bYwaJsVb91Ws973xfjZjKLXrlWPI5AYxyqKAPT6Ohr6QHT7kwjSpLblEtCkaUHJ5dqeKd15cxLmi95ixJZ+WDs0Ifd77idp18cW3Gs7Fzi+UUhyqwfsXokBKp1CQ04E3RW/etyrXonZZdKNkM6KxKGrSKYIrQ+Y33m60oBv0TIbuJzPo2JtryTUWDb8dbTjDLcbT0I+H3D6yzcrINPSAZYuv3DrCd20sD/0e/xp6dC6S/Ty0WkAmRfDSrcNIfv6vfP4V/MrnXg70nLZuQjPMsRKBKLC6RYMF9Fu23cfl5XwUSxpIQU6L1v84sEoXBwd0tiF1VnKxN2OGnPxsAyQvJfOyjbqLOGzpkDOpsTZtF7LDJRenEiQiDT2XsV5TPxp6SzNw3Oni/OLwIcB+TdeiNB3rR5EzeP/aMrYDZtF+uN/U8NLNBqrHnUDPmyQRiILFMfxcaifW33xuxDERJoooW4yH9XIB+/XmQBOknsviacmlN7LMW29NakA0w9m49VjjOF2ijGJOQks30PUwx2o5skQ0f3smnYKcTvnK0NnJu7qQHfp9xZwEQkbXNLe0LggBcjFdqLeuVvDK7SPn7wiL516rgVJLQgoSaHjpEmVY/QPBqlzYRWy1OPyYCBPF1tB5Mlub0YCuoKkZqA8wQdqrNyGnU7jQdyUvZjMgZPjIMhZskixbBIZILur4G1tsyIVX51scWWxe9mehWz3xd/KmUwSLOWnkGLqm3TDlrnqKElaZ89xOLdSf6876a8f+A+I4U66ixG9PiJvqcQc5KRVZwjGIQjaDrkmhBXQIjZKZDejA4EqCvbqKKyv5MxawqZQ1/sqf5JJMQM9m0lDktOfBftgav5bYcVz0qEVnGV+UlSB5yd/UoiDZmB//mzisc928+1IJy4oUquxCqVWXzy7o1RP/w6gn6V+IglHn4SBqJx2sFrOxXZQBPi10ZzSgs9Kwszq65Zc8uLRpVCdm0pILMPxgb7T0se1PRzkuNmNovsnL/qYWMamiMkJyAexsb1SGHoN1rpt0iuDxzVVs79Q8m8SCsnPvBHeP2vix910CAFQDZeh8eKEz2NSiIFJG9aTj63gIEx4tdGcyoF9ezg80QaKUOk1Fgxjl55J0hg4Mn+hyqGrjSy4jPNFZrXaUkovfMXQsQy8vjL54+fHoUbVu7O/p1mYFtZMOXr17HMrPY9n+j7//MoCeLOUHp9yVAy8XwCpQ0Lom2rp/KaN2rI3cUwmb/Bj+Q1EzkwE9m0njUil/RnKpnWhQNcOzm6w0wm88aQ0dsDJOL014IsklO9xCV42hVjsvpfxp6McdLCuSL2dAP4NLrPFzMQd0W0ff3glHdvnijSoeObeA91xaBCEIVOly2NKRSZFY9edhlEY00A2ietJBJcYNUaAnP/Lk5zKTAR2w5zf2dYsyl8Vhksswu9V2xLXYfrAkl7Nr1LommpoxQZUL09C9AjorW4xWcvHTecf0Uj/4klwibJjy4vxiDu84XwxFR2/rBr725gGe2Kwgk05hRZEDVdCwLtE49edhBG3/1w0TB834M3R2zKgctf/PdkDvk1wGuSy6GXXyO5JLggHdawrPpBNnirZDnVeGHkc3ZZBNUb966VJeHqnHqp1u7Bk6YJUvXt+9P3Et89fePECnazpZ/2oxGyxD56RLlOG3w5fBRvrFWbIIuDV0kaFHznq5gIOmdmryyd6BihSxBg0MopS35AyvjSpnUzRhyWVQ5sIeG/fEdCQXryqXTvS12jnJX9li7UQLlKEbJh1qhqVqBvJS/HYOW1dXoRkmvvrGwUQ/Z/tGFXImhQ89aI3hqyxkA2Xoh63x+xeiYDFgQGcXr7g3RXtj6KYsQyeE7BJCvkkIeZEQct1+bIUQ8gVCyI79cXgfdswwTwd3lr5Xb+JiKQ85M/jPLuUlmNRbduBBQy8pEjpd80zgO3S6/cbb2FLkNAgZnqErUjrS2/J8gE1Rv7fXfoJDU0smQ/+ujRVkM6nA3iv9bO9U8cGNFefOMWiG3mhp3GyIAr27zFH9Awy/fQlh45QtTmmG/n2U0scopdfszz8D4BlK6SaAZ+zPucFxXTwV0NVTY+f6YQe11yZaWzNACJD1uCDEgVc7e8+Ya7xMi00tOhqyKRpV2z9D8VG22Ox00dIN3xtgSyOasQBEajo2jJyUxnc/VJ5oY/TuYRs33j7BEy7XycqCpaH7LfvjxQudwc5Dv5uiTl9CQho6Txa6k0SmTwB42v7/0wA+OflywsOpRT/oVbrsH6inxs71M6oTk00rSnLziHnO9K+xV3o2/olZHOKJHqV1LiMnj9bQg568SyM80XXDhNY1E6vw2Nqs4I1qEzfvj+e+yC4Gbl/41WIWbd307bk+SXVUFBTkNDIp4ltycfoSivHeZUxzhk4B/CUh5HlCyKftx85TSu8AgP3x3KAnEkI+TQi5Tgi5Xq2Gb0jkxUI2g8qC7LguHrV1HDS1oQNke+ZXgzMDNUEvdMaSh+fMJMMtGMM80Zud6LPYvJRGp2sObbapOievv4A+yqDLGW4RY2ORmyftQPzsmDYA2zeqOFfM4tELRecxpiX7kV26honjdpcbYy7Aulv0O+MXsP7OhWwm9rssKZ2CnElNZWPRRyil7wfwQwB+jhCy5fcXUEo/Sym9Rim9trrqPV0mCtbLBccXnQX2YRNNRu2ut/Tkxs8xejW6fRl6SwchvWqVcSjmpKEZetTlms4YuiFjAGuBM/RRF+n4rHMH8ci5BVws5cYqXzRMiudeq+GJzdVTd41MS66djJYsmMTGU4YOWHtFftv/raqnZPYACj7uKuPEV0CnlN62P94D8CcAPgjgbULIRQCwP96LapHjsu7yRWda+iSSS1s3Ei1ZBLzXeKhqWMxJZzxqgrCQ9fZEj0ND99N5F3QDbNR72jMdS+Z9JYTgic0Knnut5ul06cXLtw7RUHVsXT09tYm9Nn4y9EnLXaNiyUdDGCNIX0LYKHLG09AuCUYGdEJIgRBSZP8H8AMAXgbweQBP2d/2FIDPRbXIcVkrK7hz1EZbN5xMfZjkMmquaCvCIcl+cZou+g72MHRQS3LxNueKXEOXRmuSteMOUgRYKfjLyHJSGtlMyjM4tGKorx/F1tVVHLe7+MbNYEMvtm9UQQjw+COnAzqTXPyULjLpjpfhFoygkkvcJYsMy0J3uiSX8wCeI4R8A8DXAPwZpfQvAPwagI8TQnYAfNz+nCs2ygVQCty8r2K/rqKykB1qwpST0shLaU93Ph4kl4VsBukUOSMhhDETctimaFwaOjB8DF31pIOVQjbQncgwO9ZmDB2wo3j8kQpSBIFll+2dKt5zqYRyXzBbVmSkU8RXht6YsH8hKpYU2XeVS5C+hLCxxtDxk6GPPEMppW8AeN+Ax+sAPhbFosLCXbq4d9Acmp0zhmUGLd1MvAHDa8MojNKzYXNF1RhqtVlAH1a6OI5eyrpFB+HYAieYoS8pMt57eQnbO1X8049f9fWco7aOF/Yb+IdPPnTma+kUwUrBX/v/YQjVUVEwzITOTadr4LClx16yyLDG0E1Xhj61bNili7t1FXt11VdAH5bNtTmocgEG2/wehSS5qJoBY0CVSVOLfv/An4YePBvz8r8BktfQGVubFXzjrYZv3fjLr9dhmBRPbA4uNFhd8NdcxNtwC0YpL+G43R14LLphG79xG3MxrDF0/GToMx3QlxUJxWwGN+4e485hG+tDNkQZw/zGWxxsigKDZy6GIbkseHiid51a7Wiz2JyPDL12HHwDrDTkIq1GPCvVL1tXV2FS4G9e91e+uH2jioKcxvvXBjdorxazvix02evCn+Tir1s0aNVT2Eyjhj61EEKwVlbw3GvWSeJXcvE6iHjQ0IGzdxGUUtuPY7KNrUVm0NUX0NWYXCbZz/fS0CmlqJ74b/tnLA15T3u2wMm+r49dWUIxl/Glo1NKsb1TxYcfrnjaWFQWsk6wG0ajpWEhm/FlRRwnowaiMxwfl4Qy9EI2zZWGzte7GAEb5QJuNVoA/AX0YZJLiyPJxZ2hn3SsW9MwJBfgrJ8LG7EV9VSfURr6UbsLrWuOKbmMaCxKUEMHrCHZH3m4gu0b1ZEt+7t1FW8dtPBkX7mim9ViFrUTbeTP4q1LlNFrCBu+MVpLyMeFocgZoaHHyZoriHv5oLvx2l2nlNqSS/IvWf+czLBmQno5LjZjar7paeiD67GDjJ5zs6RIUDUDnQENS81OF1KaeGa6cfLE1QpuH7bxevXsLFw3z9rt/l76OWD5uWiGiaPW8GBzOMFg8SgpeVhc9NNzWkyusUjVjUDj8qIk+aM4YlhnaDGXwbKPA7eUl9DWz7oZ6gaFYVIuMvSSIuPItWEU1saW1xg6tRNPFjtKQw8yHNpNaYifCw92DowtO0CPkl22b1SxtqJgo+KdoDjNRSOGRTc4zdD9DrmonXSwmMsgm0nmPczLGVCKQOPyomTmAzrrDF0vK75MtdjB3a+59gZEJ3trDvQCN/N673X7TZalsEHRZwK6U9oXU9mixybT2AHd4z0FWDlm8u8pAFxZUfBQpTDUfVHrmvjy6/Uz3aH9rDp+LsMli8MQNtOjYJQHD6OaYJco4B5Dx4fswseRHCFMN/dT4QKc3ow5t5hzHm9zMNyC4T7Yl5TeBKPQNPT+TdGYDKykNEE6RTwz9LEllyHBoclB96+braur+P2/3cdfvHwXg/KPvXoTTc1wsnkvehn68I1Rq3+Bry5RYLRlAyPJLlHAPYbOABYSW4bDzAf0C4s5VBZkvPuBRV/fzypF+k/+3vi55G9q+isAGs5wi5A09L4MvRlThk4IscfQDb59rR53kEmRwNJSz6FyQIbe4SdDB4CPvfMcfvtLu/iHv/u85/fkpTQ+/HB56M/x4+diVUdpXEouUjqFhWxmZIZeO9Hw7kv+zu0oYOeEyNBjIpUieOaffa/v1m6vzICH8XOMfn0xDOtcwOqWJOTsxCamocdRg58bMrWodtJBeUFGKqAB2bBsj7cM/fFHKnjmnz851P6gXMiOdNUs5SVIaTK0W7SlG9ANyqXkAgxvCGMknqHbyQAvtegzH9CBYNUfXn7jPIyfY5ScuwhrjYeqjmwmNfHaUimCBfmsJ3ozxvb4vJzyDGbVMZqKANddl4eGfq6YO/N4UhBC8PDq5PfuhBBURnSLTjrlKmqG9YQA1l3zSaebqIbO25CL5PUDzih57K63NX4y9P6MsxFi6dlCLnOmbLGnoUf/t1uSi0dAH6OpCLAqnAixLIb7UTnL0MNk1LDosPZeomJYTwiQfA060AvovFjoioDex4KcQYqcDeiqFp/sMAonoKs9DT0s+9NBBl2q1kUmRSDH0E2YlzPeksuxNtbtdSrlPQFH7RiJGnNFyahh0UzOmLR/ISqWRgy5uJdw2z/Qu2vlRXIRAb0PdvKf2RTlSEOXMykU5LRzsIfZ7Wdl6H2SS8fKYuOYpZqXUgMDumnSiQYZeHWLNrVuota5UVJZkIcG9COnf4G/KhdgtCc6Fxm6U7YoMnRusbpFBwd0HjR04LS9aEPVQ8uyvDL0uFrj81J6oIZ+2NLRNenYG2CDHCoppTMtuawWs6g3Nc8ZrWF1GEdFKS/jUNU9uzB7XaLJZ+hevRNxIwL6AAa5GbZjMqjyS0mRcWjfMlvGXOGclIsD5oo2NSO2LDYvpwduMAUdPdeP9Xqdfk87XROGSRP3cYmK1YUsDJPivocfSiOkDuOoWFIkaIY5si+hnFDbP9C7YxcaOsdY8wz7qlw40tCB0wZdoUou2bNVLi0tPp0557EpWpswGxt0+97ixGkxKiojhkUftnRIacJNktLPqOai6nEHKwU5UafIVMrqnRAaOscM2oxxJJeEPCP6YZJLp2tA1YyQq1z6NfRubCe9l+QyaYa+1GdoBrjHz81uhg54NxexLtE49kbGYViHLzDe9Koo4MlCVwT0AQzM5nQD2UwqcFNLVLCLjtNUNKGPC2PBnivq1l1VzYitmzLv0Vg0ro8LY0mx3tP+vwtIdvxclPQy9MEB3eoS5fdvLw3p8AUw0SZ5mPBkoSsC+gCYnOE++dsxjGALQskOUIchN4cUmZ+L6xayqXVj+9vzshXQ+zfCqicdyOkUFnPjBaBSXoJJ+/6uTjy2wEkxqv3fMuZKPsP1oie5DJaMqifJdokyFI99nyQQAX0AJUUGpaddB1s6PzargHWwa10Td4/azudhMMjPxarVjudvz0lpUGptWLphXaLjygP9tfuAe7gFP+9rmBSzGciZlKdBV0MNbzM9CpaG2B5TSlE71hKtQWeIgM45jnbnygxauslVQGe1w3t11fo8RA0dOO24GGfZotcYutqJNpFeyoJDY0BA58mcK0wIIVgdMorO0tA5DugjXDJbusGF5FLIZrgx5xIBfQCDdtdbWpebGnSgF8D3D+yAHlJzCDN9YncnrFa7EFfZoseQi3F9XBiD3lM1pklMSTJsWPRRK7z+hShQ5DQyKTKwIWzSqqcwUeS0Y2CXNCKgD2CQ3ao1fo6fE58FqN1a89Tnk9IbQ2cFO80w0Y2xVrs3hi7cgN6zHO7ddTVjmpWaJF4GXbph4rjT5bZLFLDuMNhmdj+TVj2FSUEWGTrXDJo43uKso5AF8P0DFYT0NjMnpdg3KLo3fi4+DR047V5nmBQHzck2wAbdvrMMnacLddhYw6LPBnTW9s9zlQtgV5wNkFx46BJl5GVvQ7m4EQF9AIuDJBfd5FJy2aurKOWl0MopF5wxdNbfHqd1LtCTXNwa+kFTg0kny8YGvacsQ1c4el/DZnVBxkFTc+bPMsIaWxg1Xp7oPPi4MISGzjm9iojegdTmsMoFsKSgMDe2+jdFWzFa5wIuycUV0McdPecmJ6WRk9zZEp0AABEaSURBVFKnNXS9i2wmhUyCnYZRs1rMwqRAvXk6S2+0+PZxYSwNsGwArAw9RYCVQvIXJEVOo62bZy6aSeD7SCaEpAkhXyeE/Kn9+Qoh5AuEkB3743J0y4yXbCYNRU6f1tA5mg4PWJl02s7Kwyw9Y5k42xRtxtx80xsU3QvokzYVMZby8qluUbUTX8NUUnjVoh9y7oXOGGSqBlgX+ZVC1jkHkoQnC90gqckvAPi26/PPAHiGUroJ4Bn785mhv1uUt01RQnqzNcPqEgWAdIo43aIAnA64uDX0QRn6pDXH/e9pU4vP0iAp2F1Nv5+LM4eW84C+OERD50FuAXp3rzzUovsK6ISQywB+BMBvuB7+BICn7f8/DeCT4S4tWfr9s1u6wZWGDvSyq7CzLLdBV9Npvom3ysWtoTsbYBOewKW+CThqh6+N7igYlaHzrqEvKRKOO110jbONZjz4uAB8jaHzm6H/GwC/CMD9qp6nlN4BAPvjuZDXlihLSi8zMEwKrctXYxHQ0z/DzrLcBl1OrXbcdeh9kkteSk/crbo0MEOfbcmll6EP1tDHtVKIC3ZsH/U5gNZONH4ydPsYanLg5zIyoBNCfhTAPUrp8+P8AkLIpwkh1wkh16vV6jg/IhHct+fOtCKZr80zdrCHPbV9IZvBsRPQ49XQFWdTtJc71E46qBQndwXsr2luxdgwlRSFbAaKnD6ToTdUHcVshvsN4dKAoe2UUkty4aBkEXBr6NORoX8EwI8RQnYB/D6AjxJCfhfA24SQiwBgf7w36MmU0s9SSq9RSq+trq6GtOzoWcrLjs7oeKFzlqGz2+WwJZdiLtMrW+zEm6FnM9Yh6dbQxx0O3U//aMGmZsx8hg4MHhbNe5cogzU+uS/ER+0uNMPkJ0N3xtBNQYZOKf1lSullSukGgJ8C8FeU0p8G8HkAT9nf9hSAz0W2ygRwTxxvOxk6Xyd/HBq6Y2AV08WMEHLGE712HM7t9ZIio6Ub6HStn61q3ZkdbuFm0LDoRksP/c4uCkoDmvzCqnoKCydD56D9f5L7rV8D8HFCyA6Aj9ufzwyLeQmdrom2bnA1INpNyZFcwt0ccle5NLUu5Jhrta0xdL1sJyyb1H4/l2bH4O4iHQWrA9r/G6rGfcki0JMV3ZUuYfQlhElvUzT5DD3Q0Uwp/WsAf23/vw7gY+EviQ9Y9nLY0l3j5/jSG9kaw860ijnJydCt8XPxXsjyUhotzdLQdcPEfTWcDN1toXuumJubDL1SlPHVN/uqXFo6LpbyCa3IP4NM1XjL0KexymXuYNpdQ9V74+c4y9BZhlIOuVtuIZfBiWZNLWp24teZc1LKkVwOmhooDScbc3v0mCZFSzdmdvycm9WFHO6rOnRX6d/hlGjoLKC79z548nEBeuZuXpOV4kQEdA9OZeicSi5/790X8Fs/ew0PrS6E+nOL2QwoBVTdsLLYmCtB2NQiINxszH2RbncNUDq7A6LdVIrW3123m4sopdx7oTMy6RSK2cwpP5faSQeZFOGmKSonpXH1/AL+dvcg6aWIgO5FLzPQ0HYkF75OfjmTwkcfPR/6z2V+LsdtHU0tfp3ZklzsgB6iXuq+fW/G7CKZJP3DolXNQNek3ATEUfR3i1pNRVlu5vsCwNbmKr62e5C466II6B44AZ3jDD0q3GPo1E78OnNOOpuhnwtDQ3fVNPeGW8y+5MI6bKsn1rjChuO0OB0Bvb9/gPUl8MTW1VVoXRNfebOe6DpEQPfAkVxU3dnsmJuAzjL0ThdqArXa7rLFMCsaitkMUuR0hj7rjUVAL0OvHVuyBWvSmQbJBbBLiN2boiH1JYTJBx9cQTaTwvaNZJsnRUD3gLkZHrZ0J7jk5uD2HLACH2Bn6Alo6Eqfhr6QzYQid6VSxLp9b+lo6fOToTt+LvbFsee0yFeW64XVENbT0JnkwhM5KY0PPriCZ3dqia5DBHQPCCGOuT6vnaJRweaKnnS6iXRTuifAhO2qx+xY5ylDz0lpFLMZR746nDLJpZSXcdiyLsCmSVHnyMfFzZNXV/HavRPcbrQSW4MI6ENgJ39LNyClCSTOfS/CYiF3WkOPe+Mw59oUrZ2E66pXUmQ0Wnpv/Jw0+xk6cHpY9HRq6JpVndPS0TUpdxk6YOnoABKVXeYjQo1J7/acP+vcKGGbokdtHaqeUGORHk2GzkzX5ilDB2w/FztDb0zJcAtGKS9BNyhUzeBq9Fw/m+cWcGExh+0dEdC5hO2u8zZ+LmpYQK+edEApYm++yUtpdE0K3TAtm9QQs7GlvIRDVYOqx+vznjTuDP2wpUNOp6bmmF5ylZvy1iXqhhCCJzYreG6nltg4OhHQh+BILhpf04qiJp0iUOQ07h1ZJ0/sGbr9+w5bOg5beqi316xigk1imp8MXXZp6BpKijSxHXFcOB2+qs6dj0s/W1dXcdTu4hs3G4n8fhHQh1BySS7Tks2ExUI2g7ePrLrl+Fv/rdf65n1rcylsyeWopeOk0wUhQC4zH+/rajGL43YXbd2Ymi5RxqLTE6JxnaEDwOOPVEBIcjq6COhDKCkyjtqW3jpPGjpgeaL3Anr8GjoA7B+oAMLNxkp5CSYF3j5qIy+lueo2jBIWAGsnHRy29KnpEgV6lg1HtuQip1PcTlpaLsh47wMlEdB5ZCkvgVLg3nF7/jL0nORILrFr6PYF5C07oIdatmhbDd85bM+Nfg6cHhbdUKfDC53hllyqJ9YmOc9y0dbVVbz4VuNUd2tciIA+BHZbeuewPVcaOmA1F7ExdElp6FEEdPae3m605kY/B04Piz5s6Y6MMQ24bTiqx52Jh4VHzdbVVZgU+NJr8TcZiYA+BJYZHLe7cxfQF1xZeRKt/0BPcimHWIfO3tPbjXnN0JnkMh1dooAl+Ulpq2vbqnrie+2PXVlCMZtJpHxRBPQhuG9L509y6QW72O1zXQG9lJeQDXHjkmnHrQTq65OEXRTvNFo46XSnSnKxurZlS3IJuS8hCqR0Ch9+uIztGzVQGm/5ogjoQ3BXAsxdQHdl6HHfnbDfd7vRCrVLFMCpoQ7zdNeVzaSxpEh4rXoCYHqaihhLioSDZgcHTf58XAaxdXUVtxotvFFrxvp7RUAfgtu8aJ5OfsCqcmEUEpJcTBp+eZo7kMX9dyVNZSGL1+5ZAX2aMnTAet/erDUjOSai4MmEbABEQB+C++Sfx7JFRtx3J+7XerWYC/VnZzNp5+9R5mhTFLBsdN+0M8apy9DtgA6AO+vcQVxZUfBgpSACOk/ImZSjs86f5GKd8Iocf622+24obMkF6GWnc5ehF7PQDUvTZeWb00JJkZy1817lwnhis4KvvHGATje+KUYioI+AZTJ5ab5eKrYpmkQlSC7Te62juL1m7+k8ZuiMacvQ3eudhgwdsMbStXQDz+/ej+13zleUGoOSncnMnYaeZQE9/r87k05Btq2Ko9gAcwL6nFjnMtxj26apUxTAqTLLacnQP/xwGVKa4Isxli+KgD4CduDPm4bey9CT+btz9h1RFBm6I7nMcYY+TY1FQO89y0vpqSk3LWQz+MD6MrZvxNdgJAL6CHqSy3QcRGHByhYLMbf9M5jUE8XttZOhz5mGzi6OxZw1XnGaYO8Z723//TyxuYpv3znCveN2LL9PBPQRsMxg3k7+YsIZOpO4osnQrdv3ecvQmXw1bSWLQK9/IIpN8ihh5YvPxTRrVAT0EbADKS/P10tVzCZbCZKT0iAEWCmEfwLPa4Z+zr44TlPbP2PJlaFPE++6uIhyQY6tfHG+otQYlOZUQ2fZa2IZupTCsiJHMse1F9Dn6z1dKcggZPoqXIDemqehS9RNKmVNMXp2pwYzhilGI88WQkiOEPI1Qsg3CCGvEEL+F/vxFULIFwghO/bH5chXmwAsm5m3gJ6xR5QlVdqXl9OR3V47G2xzFtAz6RRWFHkqAzqTyaYtoAOWjl5vavjWnaPIf5efe84OgI9SSk8IIRKA5wghfw7gxwE8Qyn9NULIZwB8BsAvRbjWRPj+d53DzfsPY6NcSHopsfPLP/wo3nd5KZHf/anHH0RLMyP52U9sruLTWw/hPZdKkfx8nvmlH3wUa2Ul6WUEZlmR8M8/fhU/+r5LSS8lME9creCjj56DGYNRFwniBkYIUQA8B+AfAfgPAL6XUnqHEHIRwF9TSt8x7PnXrl2j169fn2S9AoFAMHcQQp6nlF4b9X2+BEpCSJoQ8iKAewC+QCn9KoDzlNI7AGB/PDfJggUCgUAwGb4COqXUoJQ+BuAygA8SQt7j9xcQQj5NCLlOCLlerSYzZ08gEAjmgUAlBJTSBoC/BvCDAN62pRbYH+95POezlNJrlNJrq6urEy5XIBAIBF74qXJZJYQs2f/PA/h+AK8C+DyAp+xvewrA56JapEAgEAhG46fK5SKApwkhaVgXgD+glP4pIeTLAP6AEPIpAPsAfiLCdQoEAoFgBCMDOqX0JQDfOeDxOoCPRbEogUAgEARHdIoKBALBjCACukAgEMwIgRqLJv5lhFQB7I359AqA+IyFgyHWNh5ibeMh1jYe07y2dUrpyDLBWAP6JBBCrvvplEoCsbbxEGsbD7G28ZiHtQnJRSAQCGYEEdAFAoFgRpimgP7ZpBcwBLG28RBrGw+xtvGY+bVNjYYuEAgEguFMU4YuEAgEgiFMRUAnhPwgIeTvCCGv2cM0uIEQsksI+SYh5EVCSKJm74SQ3yKE3COEvOx6jIvJUh5r+1eEkFv2a/ciIeSHE1rbFULI/0cI+bY9lesX7McTf+2GrC3x147naWZD1pb462avI00I+Toh5E/tz0N5zbiXXGwPmRsAPg7gJoC/BfD3KaXfSnRhNoSQXQDXKKWJ17cSQrYAnAD4D5TS99iP/W8ADlyTpZYppbFPlvJY278CcEIp/ddxr6dvbRcBXKSUvkAIKQJ4HsAnAfwsEn7thqztJ5Hwa0cIIQAK7mlmAH4B1jSzpF83r7X9IPg45v4ZgGsAFimlPxrWeToNGfoHAbxGKX2DUqoB+H0An0h4TVxCKd0GcND38CcAPG3//2lYwSB2PNbGBZTSO5TSF+z/HwP4NoAHwMFrN2RtiUMtTuxPJfsfBR+vm9faEocQchnAjwD4DdfDobxm0xDQHwDwluvzm+DkgLahAP6SEPI8IeTTSS9mALxPlvp5QshLtiST+KBxQsgGLDM67qZy9a0N4OC1IxxPM/NYG5D86/ZvAPwiAPfQ3FBes2kI6GTAY1xcaW0+Qil9P4AfAvBztrQg8Me/A/AwgMcA3AHwvye5GELIAoA/AvBPKKXRj2gPwIC1cfHaTTLNLGo81pbo60YI+VEA9yilz0fx86choN8EcMX1+WUAtxNayxkopbftj/cA/AksiYgnfE2WSgJK6dv2SWcC+PdI8LWzddY/AvAfKaV/bD/MxWs3aG08vXb2egJPM4sL99o4eN0+AuDH7L233wfwUULI7yKk12waAvrfAtgkhDxICJEB/BSsaUmJQwgp2BtVIIQUAPwAgJeHPyt2uJ0sxQ5gm/8aCb129gbabwL4NqX0111fSvy181obD68d4Xiamdfakn7dKKW/TCm9TCndgBXL/opS+tMI6zWjlHL/D8APw6p0eR3A/5T0elzregjAN+x/ryS9NgC/B+s2Uod1Z/MpAGUAzwDYsT+ucLS23wHwTQAv2Qf0xYTW9jgsGe8lAC/a/36Yh9duyNoSf+0AvBfA1+01vAzgX9qP8/C6ea0t8dfNtcbvBfCnYb5m3JctCgQCgcAf0yC5CAQCgcAHIqALBALBjCACukAgEMwIIqALBALBjCACukAgEMwIIqALBALBjCACukAgEMwIIqALBALBjPD/A4OM5Y587+kXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = []\n", + "for i in range(40):\n", + " x.append( QRandom(0, 100,3) )\n", + "\n", + "plt.plot(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Cryptography/README.md b/Cryptography/README.md new file mode 100644 index 0000000..ef11412 --- /dev/null +++ b/Cryptography/README.md @@ -0,0 +1,5 @@ +# Quantum Cryptography +## QRandom --> Generates random numbers. +The random number is directly generated from a Hadamard gate using Qiskit Terra. It is similar to rolling an `n`-faced dice, where `n` is the number of qubits. It is the worst way to generate random numbers using a quantum computer but the sequence developed is truly random. + +For a more detailed example of generating random variates from various distributions using Qiskit aqua, take a look at [this tutorial](https://github.com/Qiskit/qiskit-tutorials/blob/master/qiskit/aqua/generating_random_variates.ipynb).