\n",
" \n",
" Qiskit and its elements (Source)\n",
"

\n",
" \n",
"\n",
"\n",
"\n",
"As of version `0.12`, Qiskit is composed of other 3 main modules:\n",
"\n",
"**Aer** is a simulator framework for the stack - it allows us to:\n",
"- simulate the execution of a quantum circuit under ideal (ie noiseless) conditions;\n",
"- obtain the complete mathematical description of a given quantum state or quantum operator;\n",
"- construct highly configurable models for realistic noisy simulations of the errors that occur during execution on real devices;\n",
"\n",
"\n",
"Note that these simulations are performed on classical computers, and so are limited by classical resources.\n",
"

\n",
"\n",
"**Ignis** is a framework for understanding and mitigating noise in quantum circuits and systems. The experiments provided in Ignis are grouped into the topics of:\n",
"- characterization of quantum system parameters such as noise (T1 and T2), and control errors in the gates;\n",
"- verification of quantum operation and ciruit performance, using for example process tomography or randomized benchmarking;\n",
"- error mitigation routines generated by execution of calibration circuits;\n",
"\n",
"**Aqua** provides higher-level functionality by use of a library of quantum algorithms upon which applications of near term quantum computing can be built. Aqua specifically identifies four domains that stand to benefit from the development of quantum computation:\n",
"- Chemistry;\n",
"- Artificial Intelligence (AI);\n",
"- Optimization;\n",
"- Finance.\n",
"\n",
"In March 2021, Qiskit launched **[Qiskit Metal](https://qiskit.org/metal/)** the first open-ource project to design superconducting quantum devices.\n",
"\n",
"Qiskit is still under an intense development cycle, which means that new updates and features are added several times a year. You can find more information abou Qiskit elements in [here](https://qiskit.org/documentation/the_elements.html)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"## 1.3 The quantum bit\n",
"\n",
" \n",
"\n",
"### A physical qubit\n",
"\n",
"Any quantum system with two orthogonal states can be used to represent a quantum bit, or *qubit* for short.\n",
"\n",
"\n",
"\n",
"Consider a simplified representation of the electron of a Hydrogen atom, orbiting around the nucleus, with two possible energy states. As this is a quantum particle, these energy states are quantized, that is, they take only discrete values. The energy state of the electron can be considered a quantum bit.\n",
"\n",
"How can we represent quantum states and associated operations?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"### Bra-ket notation\n",
"\n",
"In quantum mechanics, wave functions and other quantum states can be represented as vectors in an abstract vector space.\n",
"\n",
"The bra–ket notation is a standard notation for describing quantum states. It uses angle brackets (the $\\rangle$ and $\\langle$ symbols) with a vertical bar (the $|$ symbol) to denote labelled vectors.\n",
"\n",
"- A *ket* $|u\\rangle$ is typically written as a column vector, while a *bra* $\\langle v |$ is typically written as a row vector.\n",
"\n",
"- A *bra* and a *ket* with the same label are [Hermitian conjugates](https://en.wikipedia.org/wiki/Conjugate_transpose) of each other. \n",
"\n",
"This notation simplifies the representation of the scalar product of vectors, as well as the action of a linear operator on a vector and other operations over a complex vector space.\n",
"\n",
"\n",
" \n",
"**Example 1.1 - Inner product with bra-ket**\n",
"\n",
"Consider the ket vector $|u\\rangle$ and $|v\\rangle$ on a two-dimensional space:\n",
"\n",
"$$\n",
"|u\\rangle = \n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"0\n",
"\\end{pmatrix};\n",
"\\;\\;\n",
"|v\\rangle = \n",
"\\begin{pmatrix}\n",
"0 \\\\\n",
"i\n",
"\\end{pmatrix};\n",
"$$\n",
"\n",
" \n",
"\n",
"Their respective hermitian conjugates, $\\langle u|$ and $\\langle v|$, can be represented as row vectors:\n",
"\n",
" \n",
"\n",
"$$\n",
"\\langle u| = \n",
"\\begin{pmatrix}\n",
"1 & 0\n",
"\\end{pmatrix};\n",
"\\;\\;\n",
"\\langle v | = \n",
"\\begin{pmatrix}\n",
"0 & -i\n",
"\\end{pmatrix};\n",
"$$\n",
"\n",
" \n",
"\n",
"The inner product between $\\langle v|$ and $|u\\rangle$ is represented as $\\langle v | u \\rangle$:\n",
"\n",
" \n",
"\n",
"$$\n",
"\\langle v | u \\rangle =\n",
"\\begin{pmatrix}\n",
"0 & -i\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"0\n",
"\\end{pmatrix} = 0 \\, ;\n",
"$$\n",
"\n",
" \n",
"\n",
"A null inner product means that these vectors are orthogonal, thereby forming a basis in a two-dimensional space.\n",
"

"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"# 2. Single qubit states\n",
"\n",
" \n",
"\n",
"A single qubit quantum state $|\\psi\\rangle$ can be written as a complex superposition of its basis states, which by convention are generally named $|0\\rangle$ and $|1\\rangle$.\n",
"\n",
"$$|\\psi\\rangle = \\alpha|0\\rangle + \\beta |1\\rangle$$\n",
"\n",
"Here, $\\alpha$ and $\\beta$ are probability amplitudes generally described by complex numbers. When the qubit is measured, the quantum system \"collapses\" to the state $|0\\rangle$ with probability $|\\alpha|^2$, or to the state $|1\\rangle$ with probability $|\\beta|^2$.\n",
"\n",
"\n",
"The basis states represent the quantum analogue to the classical bit states $0$ and $1$:\n",
"\n",
"$$\n",
"|0\\rangle = \n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"0\n",
"\\end{pmatrix};\n",
"\\;\\;\\;\n",
"|1\\rangle = \n",
"\\begin{pmatrix}\n",
"0 \\\\\n",
"1\n",
"\\end{pmatrix};\n",
"$$\n",
"\n",
"Which allows for the column representation of $|\\psi\\rangle$:\n",
"\n",
"$$\n",
"|\\psi\\rangle = \n",
"\\begin{pmatrix}\n",
"\\alpha \\\\\n",
"\\beta\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"where $|\\alpha|^2 + |\\beta^2| = 1$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"**Exercise 1.1 - Orthogonality**\n",
"\n",
"Another well known example of a basis in a two-dimensional space is formed by the $|+\\rangle$ and $|-\\rangle$ states:\n",
"\n",
" \n",
"\n",
"$$\n",
"|+\\rangle = \\frac{1}{\\sqrt{2}}\n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"1\n",
"\\end{pmatrix};\n",
"\\;\\;\\;\n",
"|-\\rangle = \\frac{1}{\\sqrt{2}}\n",
"\\begin{pmatrix}\n",
"1 \\\\\n",
"-1\n",
"\\end{pmatrix};\n",
"$$\n",
"\n",
" \n",
"\n",
"- Verify that these states are orthogonal by calculating the inner product $\\langle + | - \\rangle$.\n",
"\n",
"

"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"### Bloch sphere\n",
"\n",
"The absolute squares of the probability amplitudes, $|\\alpha|^2$ and $|\\beta|^2$, represent the probability of the corresponding measurement outcome. A basic rule for probability is that the probabilities of all possible outcomes must add up to $1$, so it follows that $\\alpha$ and $\\beta$ must be constrained by the equation:\n",
"\n",
"$$|\\alpha|^2+ |\\beta|^2 = 1$$\n",
"\n",
"Ignoring the global phase of a qubit, i.e.\n",
"\n",
"$$|\\psi\\rangle := e^{i\\delta} |\\psi\\rangle$$\n",
"\n",
"only two real numbers are required to describe a single qubit quantum state. A convenient representation is\n",
"\n",
"$$|\\psi\\rangle = \\cos(\\theta/2)|0\\rangle + \\sin(\\theta/2)e^{i\\phi}|1\\rangle$$\n",
"\n",
"where $0\\leq \\phi < 2\\pi$, and $0\\leq \\theta \\leq \\pi$. \n",
"\n",
"It is then possible to create a one-to-one correspondence between a qubit state ($\\mathbb{C}^2$) and the points on the surface of a unit sphere ($\\mathbb{R}^3$). This is called the Bloch sphere representation of a qubit state.\n",
"\n",
"\n",
"\n",
"By contrast, a representation of a classical bit over the Bloch sphere would only require the two points of the sphere intersecting the Z axis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"## 2.1 Single-Qubit Gates\n",
"\n",
" \n",
"\n",
"Quantum gates/operations are usually represented as matrices. A gate acting on a single qubit is represented by a $2\\times 2$ unitary matrix $U$ with complex entries. The action of the quantum gate on the qubit is determined by multiplying the matrix representing the gate with the vector which represents the quantum state.\n",
"\n",
"$$|\\psi'\\rangle = U|\\psi\\rangle$$\n",
"\n",
"Some of the single-qubit gates available are:\n",
"- Measurement gates\n",
"- Pauli gates\n",
"- Hadamard gate\n",
"- Generalized unitary gates (with constraints)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"**Importing Qiskit**\n",
"\n",
" \n",
"\n",
"The following sections will make use of Qiskit to design and visualize circuits and quantum operations. \n",
"\n",
"**The execution of the code cells in this notebook requires that the relevant Qiskit modules be imported first.**\n",
" \n",
"To execute a code block, select a code cell and press `SHIFT + ENTER`. Consecutive cells can be executed by repeating this command.\n",
"\n",
"If the below cells output an error, it probably means Qiskit hasn't been installed properly. Refer to [this webpage](https://qiskit.org/documentation/install.html) for installation details.\n",
"

"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Qiskit Software | Version |
---|---|

Qiskit | 0.24.0 |

Terra | 0.16.4 |

Aer | 0.7.6 |

Ignis | 0.5.2 |

Aqua | 0.8.2 |

IBM Q Provider | 0.12.1 |

System information | |

Python | 3.9.2 (default, Mar 3 2021, 15:03:14) [MSC v.1916 64 bit (AMD64)] |

OS | Windows |

CPUs | 4 |

Memory (Gb) | 15.885398864746094 |

Thu Mar 25 14:20:16 2021 Hora padrão de GMT |

\n",
" \n",
"**Building your first quantum circuit!**\n",
"\n",
" \n",
"\n",
"In Qiskit, before building a quantum circuit, we first neet to define a `QuantumRegister(n)` object, with `n` being the desired number of qubits. \n",
"\n",
"To perform measurements, a `ClassicalRegister(m)` is also required, where `m` is the number of bits to contain the results of the measurement. \n",
"\n",
"Lastly, a `QuantumCircuit` object needs to be defined, containing a list of quantum and classical registers. Quantum operations may then be called on this object.\n",
"\n",
" \n",
"\n",
"The measurement operation `measure(qr[i], cr[j])` is called on a circuit object by specifying the quantum register `qr`and qubit `i` to be measured, and the classical register `cr` and bit `j` which is to store the measurement value. A measurement can also be called over the complete register, provided that registers `qr` and `cr` are the same size: `measure(qr, cr)`.\n",
"\n",
" \n",
"\n",
"A complete circuit can be visualized graphically by calling the `draw` method.\n",
"\n",
"

"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# Create quantum register with 2 qubits\n",
"#qr = \n",
"\n",
"# Create a classical register with 2 bits\n",
"#cr = \n",
"\n",
"# Quantum circuit\n",
"#qc_ground = \n",
"\n",
"#Measurement operation\n",
"\n",
"# Draw circuit (using matplotlib)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pauli gates\n",
"\n",
"#### Gate $X$: bit-flip gate \n",
"\n",
"The X-gate is also known as NOT gate or “bit-flip”, since it changes a state $| 0 \\rangle $ to $| 1 \\rangle $ and vice versa. **This is the quantum analogue to a classical NOT gate.**\n",
"\n",
"On the Bloch sphere representation, this operation corresponds to a rotation of the state around the X-axis by $\\pi$ radians.\n",
"\n",
"\n",
" \n",
" (Source)\n",
"

\n",
"\n",
"\n",
"\n",
"The $X$ gate can be represented by a $2 \\times 2$ matrix:\n",
"$$\n",
"X = \n",
"\\begin{pmatrix}\n",
"0 & 1\\\\\n",
"1 & 0\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"\n",
"#### $Y$: bit-and-phase-flip gate\n",
"\n",
"The $Y$ gate is defined by the matrix:\n",
"\n",
"$$\n",
"Y = \n",
"\\begin{pmatrix}\n",
"0 & -i\\\\\n",
"i & 0\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"It is equivalent to a rotation around Y-axis of the Bloch sphere by $\\pi$ radians.\n",
"This gate maps $| 0 \\rangle $ to $i | 1 \\rangle $, and $| 1 \\rangle$ to $ - i | 0 \\rangle$\n",
"\n",
"#### $Z$: phase-flip gate\n",
"\n",
"The phase flip gate $Z$ is defined by:\n",
"\n",
"$$\n",
"Z = \n",
"\\begin{pmatrix}\n",
"1 & 0\\\\\n",
"0 & -1\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"It leaves the basis state $|0 \\rangle $ unchanged, while mapping $| 1 \\rangle$ to $- | 1 \\rangle $."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# Create registers\n",
"#qr = \n",
"\n",
"# Quantum circuit\n",
"#qc_pauli = \n",
"\n",
"# Perform X gate on qubit 0\n",
"\n",
"# Perform Y gate on qubit 1\n",
"\n",
"# Perform Z gate on qubit 2\n",
"\n",
"# Draw circuit\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hadamard gate\n",
"\n",
"The Hadamard gate may be used to create superposition. It maps the basis state $| 0 \\rangle$ to $| + \\rangle =\\frac{| 0 \\rangle + | 1 \\rangle }{\\sqrt{2}}$, and $| 1 \\rangle $ to $ | - \\rangle =\\frac{ |0 \\rangle - |1 \\rangle }{\\sqrt{2}}$. On the Bloch sphere, $| + \\rangle$ and $| - \\rangle $ are represented by points on the X axis. \n",
"\n",
"When measured, these states have equal probability of becoming $| 1\\rangle $ or $| 0 \\rangle $, since the square modulus of the probability amplitude for each of the basis states has equal value.\n",
"\n",
"\n",
" \n",
" (Source)\n",
"

\n",
"\n",
"In fact, $|+\\rangle $ and $| - \\rangle $ are indistinguishable when measured on the computational basis. However, the states can be identified by measuring the qubit on the superposition basis, i.e. along the X-axis. A way to achieve this is by simply applying an Hadamard gate before performing the measurement.\n",
"\n",
"The Hadamard gate is defined by:\n",
"\n",
"$$\n",
"H = \\frac{1}{\\sqrt{2}}\n",
"\\begin{pmatrix}\n",
"1 & 1\\\\\n",
"1 & -1\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
" \n",
"\n",
"**Note**: The Hadamard gate, along with the X, Y and Z gates, is self-inverse: $H.H = I$."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"#qr = \n",
"\n",
"# Quantum circuit\n",
"#q_hadamard = \n",
"\n",
"# Perform the operation\n",
"\n",
"# Draw the circuit\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"**Exercise 1.2 - Gates and basis**\n",
"\n",
" \n",
"\n",
"- Simulate the circuits `qc_a`, `qc_b` and `qc_c`, below, and examine the results.\n",
"\n",
" \n",
"\n",
"**Note**: in Qiskit (and by convention), every qubit is initialized in the state $|0\\rangle$.\n",
"

"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAALoAAAB7CAYAAADDuprgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAALV0lEQVR4nO3dfUxT5x4H8C/QAhe0wGSgIBbEKkENBhly0ZRScSBcRemuNy4uNOpenF7HlllMcOA2dRpJHLqxmwVyIXeCOtgua+Lkkm3tIGZbIWI0bDrvHTAQJ9NmKEUt9Nw/2LpVpG+09OX5fZKTHJ6e8zy/hi8nzzmc9vhwHMeBEC/n6+oCCJkOFHTCBAo6YQIFnTCBgk6YQEEnTKCgEyZQ0AkTKOiECRR0wgQKOmECBZ0wgYJOmEBBJ0ygoBMmUNAJEyjohAkUdMIECjphAgWdMIGCTphAQSdMoKATJlDQCRMo6IQJFHTCBJ6rC/B2H7UD/VrXjB0dBhSk2LdvUVEROjs7HVqPNZYtW4a3337b4f1S0J2sXwv896arq7BdZ2cn1Gq1q8twGJq6ECZQ0AkTKOiECRR0wgQKOmECBZ0wgYJOXIbH4yEoKGh6xpqWUYhXCw4OxsaNG5GWloakpCSEhIRAr9fj2rVr6OjogFKpxLfffmuyD4/Hw+nTpzFr1izk5eVheHjYqTVS0IndBAIB9u/fj23btkEgEEx4PTk5GZs2bcKRI0fwxRdfYN++fTh//rwx5AUFBdBqtYiLi8Ply5edWqvbTV0+/vhjLFmyBAEBAVi4cCGqqqogl8sRGxtr3Ean06GkpAQikQgBAQGIjIzEunXr0NPTY/U477zzDlauXInw8HAIBAIsX74cJ0+edMI7sl3DAQm++fcBq9tdQSqV4vLly3j55ZchEAjQ1tYGhUKBrKwsJCUlITU1FXK5HNXV1bh79y4yMzPR2tqKY8eO4cyZM8aQr1mzxukhB9zsiH7u3DnIZDJkZWXh0KFDGB4eRllZGUZGRuDn5wcA0Ov1yM7OhkajgUKhwKpVq3D37l18/vnnGBwchFAotGqs7u5uyOVyxMXFgeM4qFQqFBYWQqfT4dlnn3Xm2/R4BQUFOHXqFPh8Pr7++mvs2LEDFy5cmLCdRqNBbW0tXnnlFRQXF0OhUKCoqAgAjCHv6OiYlprdKuilpaWIjY3F2bNnweONl5aeng6RSISoqCgAwMmTJ9HW1oa6ujps3rzZuG9BQYFNY5WXlxvXDQYDMjMz8dNPP+Hdd9+loJuxYsUK1NfXg8/no7y8HHv37sXY2JjZfYaGhlBWVob09HRIJBIAwJdffjltIQfcaOoyPDyM9vZ2yGQyY8gBQCgUIj093fhzc3MzQkJCTEJuj87OTmzcuBFz5swBj8cDn89HdXU1rly5MqV+vVlgYCBqamrg7++PEydOYM+ePRZDDvx+4imRSDA0NIR79+4hPz8fubm501D1OLcJularBcdxmD179oTX/tj2888/Izo6ekpj9ff3QyqV4vr16zh27Bja2tqg0WiwdetW3Lt3z+p+fHx8LC5qtcquGr9pOoj3ngs1Wa5fbbOpD7VaZVWNj6574p2LO3fuREJCArq6urBnzx6ranj4xFMqlaKkpAQAcPz4cfj4+DxUs9qmOq3lNlOXsLAw+Pj44MaNGxNe+2NbeHg4NBrNlMb69NNPodVq0dDQgJiYGGP7gwcPptSvI6XmlyB1wz6TtoYDEtcUg/E/6hdffBEAUFxcjPv371vc5+GQ/zYnv3DhAnbt2oX4+HhkZ2fj3Llzzi7ffY7owcHBSElJQWNjI0ZHR43tPT09OH/+vPHnnJwc/PLLLzh9+rTdY+l0OgAAn883tt26dQuffPKJTf1wHGdxyciQ2F3nVGVkSKyq8dF1Z5j0lZqaivnz56Onpwdnz561OPZkIQfGz4nef/99AJgwBc3IyLCpTmu5TdAB4I033kB3dzdyc3OhVCpRX1+PJ598EpGRkcZtnn76aaxatQpyuRz79+9HS0sLmpqasHv3brS3t1s1TlZWFng8HrZs2YLm5mbU19dDLBbj8ccfd9Zb83gpKeMfVfrss89gMBjMbmsu5L9paWkx6dfZ3CroOTk5aGhoQH9/P2QyGUpLS6FQKLB69WrjNnw+H83NzXjppZdQW1uLvLw8PP/88+jt7UVERIRV4yQmJuLUqVMYGBhAfn4+SktLsWPHDmzZssVZb83jLV68GABw8eJFs9tZE3IAuHTpEgwGAxISEoyXjp3Jh7Pl+O8icrkcKpUK3d3dri7FZidaXPdRuvgI4O9r7NtXIpGYnJCuW7cOTzzxBJqamsxeFnz11Vdx9OhRq66Tv/766xgdHcXhw4eh1+sBjE9dVCqVfUWb4TYno8S9KZVKKJVKi9tVVFRg6dKlOH78uMXr5GVlZY4qzyKvC/rY2JjZkxRfX1/4+rrVjM2r6PV6FBYWurqMCTziN15TU2P1tCU+Ph58Pn/SZevWrc4tlrglrzuiK5VKs9d4w8PDp7Ea4i68LuhLly51dQnEDXnE1IWQqaKgEyZQ0AkTKOiECRR0wgSvu+ribqLDPHPsZcuW2bzP/3oHAADz580xWXf2uNbwiHtdiGfYe2T81tvDxc+ZrLsDmroQJlDQCRMo6IQJFHTCBAo6YQIFnTCBgk6YQEEnTKCgEyZQ0AkTKOiECRR0wgQKOmECBZ0wgYJO3IZKpcLixYuxYMECbN++3aqHDFiLgk7cgsFgwPbt2/Hhhx/i2rVrGBoawgcffOCw/inoxC1oNBpERUUhMTERALBt2zY0NjY6rH8KOnELfX19Jk8fmTdvHn788UeH9U+fGSV204+O4l8f/Qd3hkdM2iv+2fjI9bWSFVgYN/eRfTn7E510RCd24/N4SF++BAM3b2Hg5i1j+8PrAzdvIWRmMESxkz9kLSYmxuQI3tvbi7lzH/1HYQ8KOpmShPh5SE1KMLtN0J8CIMsRm32KXEpKCvr6+tDV1QUAqK6utvnZseZQ0MmU5Un/jFmhgklfL8gWY+aMILN9+Pn5oaqqCk899RTi4+MxY8YMPPPMMw6rkb7ugjhET98N/KNOOWGunbxEhE15mS6q6nd0RCcOIZw7G5K0JJO2UMEMrM9a6aKKTHls0C9dugSZTIbw8HAEBgZCJBIZn0hsyeDgIF544QUsWrQIwcHBiI6OxoYNG3D16lUnV+3dVq9cjqjIWQAAHwB/zZMgMMDftUX9yiMvL3Z0dEAsFiMmJgZHjx6FUCjEDz/8YPLgXXNu374Nf39/HDx4EBERERgcHERlZSXS0tLw3XffWf0YR2KK5+eHv/1FihM1HyEtORHx86JcXZKRR87RJRIJurq68P333yMkJGTK/Y2NjeH+/fuIiIjAgQMHUFRUZNV+v33tGnEda7/yzuOmLjqdDq2trdi8efOUQl5VVYXk5GQIBALweDwEBwdjeHgYV65ccWC1xF143NRFq9XCYDBM6Z8JlZWV2LlzJ3bv3o1Dhw7hscceg6+vL3JzczEyMmK5g1+5yxdoEss8LuhhYWHw9fVFf3+/3X3U1dVBKpWioqLC2PbgwQPcvn3bpn5o6uJ6Xjt1CQoKglgsRn19PYaGhuzqQ6fTgc/nm7TV1tY69P5n4l487ogOAOXl5RCLxUhLS4NCoYBQKERvby9aW1tRVVVlcf+1a9firbfewptvvon09HR89dVXqKysRGhoqE110NTFg3Ae6uLFi9z69eu50NBQLjAwkBOJRNxrr71m1b4jIyPcrl27uMjISC4oKIiTSCRcZ2cnJxQKucLCQucWTlzCIy8vEmIrj5ujE2IPj5yjT4bjOIsnlH5+fmZvFyXeyauO6Gq1Gnw+3+yiVqtdXSZxAa+ao9+5c8fifzYXLVqEmTNnTlNFxF14VdAJmYxXTV0ImQwFnTCBgk6YQEEnTKCgEyZQ0AkTKOiECRR0wgQKOmECBZ0wgYJOmEBBJ0ygoBMmUNAJEyjohAkUdMIECjphAgWdMIGCTphAQSdMoKATJlDQCRMo6IQJFHTChP8DYWqststctrsAAAAASUVORK5CYII=\n",
"text/plain": [
"