{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/cbe30338-2021/04.02-State-Estimation.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [cbe30338-2021](https://jckantor.github.io/cbe30338-2021);\n", "content is available [on Github](https://github.com/jckantor/cbe30338-2021.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/cbe30338-2021/04.02-State-Estimation.html)", "section": "" } }, "source": [ "\n", "< [4.1 Data/Process/Operational Historian](https://jckantor.github.io/cbe30338-2021/04.01-Process-Historians.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [4.3 Lab Assignment 5: State Estimation](https://jckantor.github.io/cbe30338-2021/04.03-Lab-Assigment-State-Estimation.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[4.2 State Estimation](https://jckantor.github.io/cbe30338-2021/04.02-State-Estimation.html#4.2-State-Estimation)",
"section": "4.2 State Estimation"
}
},
"source": [
"# 4.2 State Estimation\n",
"\n",
"This notebook outlines state estimation using the TCLab hardware. "
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.2.1 Output Feedback Control ](https://jckantor.github.io/cbe30338-2021/04.02-State-Estimation.html#4.2.1-Output-Feedback-Control)",
"section": "4.2.1 Output Feedback Control "
}
},
"source": [
"## 4.2.1 Output Feedback Control \n",
"\n",
"Let's begin our investigations by considering the single loop control problem for a single heater/sensor assembly in the Temperature Control Lab. First we define a setpoint function that we'll be using throughout the notebook."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.2.1 Output Feedback Control ](https://jckantor.github.io/cbe30338-2021/04.02-State-Estimation.html#4.2.1-Output-Feedback-Control)",
"section": "4.2.1 Output Feedback Control "
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEWCAYAAABhffzLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAp30lEQVR4nO3de3hddZ3v8fc3SbvTNklL2+zQNoVyV0AopAUVUQqi3ORylJYZmFEfR0bHmYPjYUTGmTkyjw6OztEZnfGMio4eUdu0XISiAkIRdRSa0BYKpdxaSHq/t+kl1+/5Y62U3XQ3TXb22mvtvT+v59lP1l77sj7ZTb9Z+a31+y5zd0REpHxUxB1AREQKS4VfRKTMqPCLiJQZFX4RkTKjwi8iUmZU+EVEyowKv4gAYGYdZnZi3Dkkeir8krOwUPTf+sxsf8b9G+POlwszW2tm7y3g9iaY2ffNbKOZ7TGzl8zstiG+9gdm9sV8ZXH3Gnd/bYjbdjM7OV/blsKqijuAFC93r+lfNrO1wJ+5+6/iSzQ4M6ty956EbePrwDjgrcAu4FTgzCiyifTTHr/knZlVmNnnzOxVM9tmZs1mNjF8bEa4t/hRM2szsx1m9gkzm21mz5rZTjP794z3+oiZ/c7Mvmlmu8zsRTO7JOPx8Wb2PTPbYGbrzOyLZlY54LVfN7PtwBfM7CQzezzMtdXMfmxmE8Ln/wg4Dngw/Kvls2Z2kZm1D/j+Dv5VYGZfMLNFZna3me0GPjJYpixmAz9x9x3u3ufuL7r7ooxtvcXMHjWz7Wa22szmhutvBm4EPhtmfTAj2+1m9kL42f6XmVVnvN/HzeyV8P0eMLOpGY8d3IsP/5r4DzN7KPxL5CkzOyl87MnwJSvCbc8b6s+GJIS766bbiG/AWuC94fKngT8AjUAK+Dbw0/CxGYAD/wlUA+8DDgD3A2lgGrAZeE/4/I8APcBfA6OAeQR7xhPDx+8P339c+PqngT8f8Nq/IvjrdgxwMnBpmKseeBL412zfR3j/IqB9kO/1C0A3cC3BjtSYwTJl+dzuAp4HPgqcMuCxcUBb+FgVcC6wFTgjfPwHwBezZFsJTAcmAr/rfw5wcfj6c8Pv/5vAkxmvdeDkjPfeDpwXbvvHwPxsz9Wt+G6xB9CtNG4DiuEq4JKMx6aExbEqo/BPy3h8GzAv4/49wKfD5Y8A6wHLePxp4E+ABqATGJPx2B8BSzJe+8ZRcl8LLMv2fYT3h1L4M4vnoJmybH8M8LdAa/gZvQJcHj42D/jNgOd/G/jf4fKRCv8nMu5fAbwaLn8P+ErGYzXhNmeE9wcW/rsGvM+LGfdV+Iv4pjF+icLxwH1m1pexrpegKPbblLG8P8v9moz76zysNqHXganhdkYBG8ys/7EKgr3kfpnLmFka+AZwIVAbPn/HkL6rI8vcxlAyHeTu+4F/Av7JzOqAzwELzey48L3ON7OdGS+pAn40jDz9nxXh12cytt1hZtsI/spam+V9NmYs7+PQfxMpYhrjlyi0Eey1Tsi4Vbv7uhzfb5plVFGCcfj14XY6gckZ26lz9zMynjuw/eyd4bqz3L0OuAmwQZ6/Fxjbfyccq68f8JzM1wwlU1buvpvgl8A44ITwvX494HOscfdPHiFrv+kZy/2fFeHX4zO+l3HAJCDXfxcpUir8EoX/BL5kZscDmFm9mV0zgvdLA//TzEaZ2fUEZ8D83N03AI8A/8fM6sKDyieZ2XsGea9aoAPYaWbTgL8Z8PgmIPNc9peAajO70sxGAX9HMD6e1XAzmdnfhwe2R4cHYW8BdgKrgcXAqWb2J+H3Pip87luPkLXfp8ysMTyg/rfAgnD9T4CPmtlMM0sR/JJ5yt3XHun7GcSRti1FQIVfovBvwAPAI2a2h+BA7/kjeL+ngFMIDkx+CfiQu28LH/tTYDTwAsGQzSKCYwpHcgfBwc1dwEPAvQMevxP4u/DsolvdfRfwFwQHYdcR/AXQzuCGk8mB/wq/t/UEB56vdPcOd99DcPD7hvCxjcA/8+Yvnu8Bp4dZ7894z58Q/PJ5Lbx9EcDdHwP+nuAYygbgpPC9c/EF4Ifhtufm+B4SEzt06FQkWczsIwTzA94Vd5ZiYEUwn0Lipz1+EZEyo8IvIlJmNNQjIlJmtMcvIlJmimIC1+TJk33GjBk5vXbv3r2MGzcuv4HyQLmGR7mGR7mGJ6m5YGTZWltbt7r7wHknxdGyoampyXO1ZMmSnF8bJeUaHuUaHuUanqTmch9ZNqDFs9RUDfWIiJQZFX4RkTKjwi8iUmZU+EVEyowKv4hImYn0dM6wb8gegl7sPe4+K+wYuIDgghxrgbnuPtJ+6CIiMkSF2OOf4+4z3X1WeP9zwGPufgrwWHhfREQKJI4JXNcQXM4O4IfAE8BtUWzosVWb+NnLXTzTtTqKtx+Rta8nM9f+Ld0H/3FE8qmjs4cHXk3mz31S/z8CTO3uO/qThinSXj1mtoagH7kD33b375jZTnefkPGcHe5+TJbX3gzcDNDQ0NA0f/78YW//Ry908vgb3Rx6gaWkcJKWq/8n4duXjiVVmaxsHR0d1NQk78p/yjV0D73WxcKXuhP2U98vef8f+33yDOe86bn9W86ZM6c1Y7TlTdlmdeXrBkwNv6aBFcC7gZ0DnrPjaO+jmbuF0bz0DT/+tsX++ta9cUc5TBI/L3flGqq+vj6f89UlfumXfx53lKyS9nllKrqZu+6+Pvy6GbgPOA/YZGZTAMKvm6PMIENXXxtc2GlLx4GYk0ipaXl9B69t3cuF04qiPVjJi6zwm9k4M6vtXya4hNxKgkvyfTh82oeBn0WVQYYnXVsNwObdnTEnkVLTvLSNcaMrmX2sCn8SRPmv0ADcZ2b92/mJu//SzJYCzWb2MeAN4PoIM8gwpOv69/hV+CV/Ojp7eOi5DVx99lSqq7bHHUeIsPC7+2vA2VnWbwMuiWq7kruJY0dTYdrjl/x66Nn17Ovq5fpZ09mzRoU/CTRzVw6qqDDqRhub92iMX/JnwdI2Tk7XcO5xE+KOIiEVfjnEhJSxZY/2+CU/Xtm8h2fe2Mm8WdMJh30lAVT45RDjU8ZmFX7Jk+aWdqoqjOvOnRZ3FMmgwi+HUOGXfOnu7ePeZ9q55K1pJtek4o4jGVT45RDjU8a2jk56+6Kb0S3l4fEXN7O1o4u5s6bHHUUGUOGXQ0xIGX0O2/Zqr19GpnlpG+naFO859fBrfUu8VPjlEBNSwQE4ndIpI7Fp9wGWrN7MB5saqapUmUka/YvIIcaPDgq/JnHJSNzzTDt9joZ5EkqFXw4xPtzj36I9fsmRu7OwpZ3zZkzkhMnj4o4jWajwyyH6C78mcUmulq7dwZqte5k7W3v7SaXCL4cYXWnUVVdpEpfkrLmljZpUFVe87di4o8gRqPDLYdJ11TqXX3Ky50A3Dz27gQ+cPYWxo9WJM6lU+OUw9TUp7fFLTh56dgP7u4OGbJJcKvxymHRdSnv8kpMFLW2ckq7hnOkT4o4ig1Dhl8Oka1Ns3nOg/9KYIkPy8qY9LHtjJ/NmqyFb0qnwy2Hqa1Mc6O6jo7Mn7ihSRJpb2qiqMK49Rw3Zkk6FXw5z8BKMGu6RIerq6ePeZ9bx3rc2qCFbEVDhl8Okw4uuq22DDNXjL25m294u5s5ujDuKDIEKvxymvlbX3pXhaW5po6EuxbtPUUO2YqDCL4c5ONSzW7N35eg27T7AE6s388Fz1ZCtWOhfSQ5TN6aK0VUVOpdfhmRRqxqyFRsVfjmMmWkSlwxJ0JCtjfNOmMgMNWQrGir8kpUmcclQPL1mO2u37WOe9vaLigq/ZKU9fhmK5pZ2alJVXK6GbEVFhV+yCvb4dXBXjmzPgW5+/twGPnD2VDVkKzIq/JJVuraaHfu66erpizuKJNSDK4KGbPPUd7/oqPBLVv3n8m/VufxyBM0tbZzaUMPZjePjjiLDpMIvWR2cvatxfsnipU17WN62k7mz1JCtGKnwS1aaxCWDaV7axqhK4zo1ZCtKKvySldo2yJF09fRx77KgIdskNWQrSir8ktXkmtGYqVGbHO7xFzexfW+XZuoWscgLv5lVmtkyM1sc3p9pZn8ws+Vm1mJm50WdQYavqrKCSeNGa4xfDrNgaRvH1lXz7lPVkK1YFWKP/xZgVcb9rwB3uPtM4B/C+5JAkzWJSwbYuOsAv35pCx9smkZlhQ7qFqtIC7+ZNQJXAndlrHagLlweD6yPMoPkLl1XzRZN4pIM9zwTNGS7vknDPMXMoryuqpktAu4EaoFb3f0qM3sr8DBgBL943unur2d57c3AzQANDQ1N8+fPzylDR0cHNTU1OX4H0SmGXN99tpNV23v52kVjY05VHJ9XkkSRy9257Tf7OSZl3H7+mMTkyoek5oKRZZszZ06ru8867AF3j+QGXAV8K1y+CFgcLn8D+GC4PBf41dHeq6mpyXO1ZMmSnF8bpWLI9eVfrPKT//Yh7+3tiy9QqBg+rySJItfvX93qx9+22O9pbcv5Pcrp88qXkWQDWjxLTY1yqOcC4GozWwvMBy42s7uBDwP3hs9ZCOjgbkKla1N09zo793fHHUUSoLmljdpUFZefOSXuKDJCkRV+d7/d3RvdfQZwA/C4u99EMKb/nvBpFwMvR5VBRubgufw6wFv2dvc3ZJs5lTGjK+OOIyMUR0u9jwP/ZmZVwAHCcXxJnoOzd/cc4LRja2NOI3F6cMV6DnT3qe9+iShI4Xf3J4AnwuXfAk2F2K6MzMF+PZrEVfaaW9o5raGWs9SQrSRo5q4ckdo2CMDqjXtY0baTubPVkK1UqPDLEY1LVTFudKX2+Mtcc4saspUaFX4ZVLquWlfiKmNdPX3ct2wdl57ewMRxo+OOI3miwi+D0rV3y9tjq4KGbNfroG5JUeGXQdXXqfCXswUtYUO2U9SQrZSo8Mug6mtS6tBZpjbs2s+TL23hQ02NashWYlT4ZVDpuhQdnT3s6+qJO4oU2D2tYUO2WY1xR5E8U+GXQfVP4tJwT3np63OaW9p5+4kTOX7SuLjjSJ6p8Mug1LahPD21ZjtvbN/HvNk6qFuKVPhlUAdn76rwl5XmljZqq9WQrVSp8Mug3mzboHP5y0V/Q7arz55K9Sg1ZCtFKvwyqGPGjqaqwtS2oYw8sHw9nT19GuYpYSr8MqiKCmNyTUptG8rIwpY23nJsLW+bpoZspUqFX44qXadz+cvFixt3s6J9F3NnqSFbKVPhl6NS24by0by0nVGVxrVqyFbSVPjlqLTHXx46e3q5b1k77zv9WDVkK3Eq/HJU9TUptu3tpKe3L+4oEqHHVm1mx75uzdQtAyr8clT1ddW4w/a9XXFHkQgtWNrGlPHVXKiGbCVPhV+OSpO4St/6nft58mU1ZCsXKvxyVPUHC78mcZWqe1rbcYfrm3TufjlQ4ZejSqtfT0nr63OaW9t4x4mTOG7S2LjjSAGo8MtRHdzj1ySukvSHNdto275fM3XLiAq/HFWqqpLxY0apbUOJal4aNGS77Mxj444iBaLCL0OSrlXbhlK0a383v1i5kWtmqiFbOVHhlyEJJnHp4G6peWBF2JBt1nFxR5ECUuGXIamvSWmopwT1N2Q7c1pd3FGkgFT4ZUjSddVs3t2Ju8cdRfJk1YbdPNu+i3mz1ZCt3Kjwy5DU16To7Olj9wFddL1UNLe0MbqygmtnqiFbuVHhlyFJ1+lc/lISNGRbx6VnNHCMGrKVHRV+GRLN3i0tv3phMzv3dTN3ls7dL0eRF34zqzSzZWa2OGPdX5nZajN73sy+EnUGGTnN3i0tC1ramDq+mnedPDnuKBKDqgJs4xZgFVAHYGZzgGuAs9y908zSBcggI1RfWw2o8JeC9Tv385uXt/BXc05WQ7YyFekev5k1AlcCd2Ws/iTwZXfvBHD3zVFmkPyoq64iVVWhDp0lYFF/QzYN85Qti/L0PDNbBNwJ1AK3uvtVZrYc+BlwGXAgXL80y2tvBm4GaGhoaJo/f35OGTo6OqipqcntG4hQMea69df7OOWYCv78rOoCpyrOzytOR8rV585nn9xPeqzx2dljEpMrbknNBSPLNmfOnFZ3n3XYA+4eyQ24CvhWuHwRsDhcXgl8AzDgPGAN4S+gI92ampo8V0uWLMn5tVEqxlzX/cdv/Y+/+/vChclQjJ9XnI6U63cvb/Hjb1vs9y9rL2ygULF9XkkwkmxAi2epqVGO8V8AXG1mVwDVQJ2Z3Q20A/eGoZ42sz5gMrAlwiySB/W1KV7bsjfuGDICC1raqKuu4v1nqCFbOYtsjN/db3f3RnefAdwAPO7uNwH3AxcDmNmpwGhga1Q5JH/StdVq21DEdu3rb8g2TQ3ZylwhzuoZ6PvA981sJdAFfDjc+5eES9em2Lmvm86eXlJVKhzF5oEV6+jq6VPffSlM4Xf3J4AnwuUu4KZCbFfyqz7jXP7GY3SlpmLT3NLOW6fUccZUNWQrd5q5K0Omtg3F64X1u3lu3S7mzWpUQzY5cuE3s5PN7IIs6y80s5OijSVJlA4ncelc/uLT35DtGjVkEwbf4/9XYE+W9fvDx6TMvNmvR4W/mHT29HL/8nW8Tw3ZJDRY4Z/h7s8OXOnuLcCMyBJJYk0aNxozDfUUm0df2KSGbHKIwQr/YNMzCz/lT2JXVVnBpHEptqhDZ1FZsLSNaRPGcIEasklosMK/1Mw+PnClmX0MaI0ukiRZvS66XlTad+zjt69s5YNNjWrIJgcNdjrnp4H7zOxG3iz0swgmXF0XcS5JqHStrr1bTO5pXQfA9U2NMSeRJDli4Xf3TcA7wzbKZ4arH3L3xwuSTBKpvjbF6o3ZjvlL0vT1OQtb27jgpMlMn6h5F/Kmo07gcvclwJICZJEikK5NsbWjk74+p0JDB4n2+9e20b5jP3/z/tPijiIJowlcMizp2hQ9fc6OfV1xR5GjWLBUDdkkOxV+GZZ6TeIqCnu7nV8+v5Frz1FDNjmcCr8Mi9o2FIffr++hq6dP5+5LVkcd4zezPcDA7pm7gBbgf7n7a1EEk2RKa/ZuUfjNuh5On1LHmdPGxx1FEmgo3Tm/BqwHfkJw1awbgGOB1QQtli+KKpwkz5ttGzSJK6meX7+L13f3ccdF2tuX7IYy1HOZu3/b3fe4+253/w5whbsvAI6JOJ8kzNjRVdSkqjTUk2ALW9qpqoBrZk6NO4ok1FAKf5+ZzTWzivA2N+MxXUClDKVrUxrqSagD3b3ct2wdTelKJoxVQzbJbiiF/0bgT4DNwKZw+SYzGwP8ZYTZJKEm16bYorYNifToC5vYtb+bCxtHxR1FEmwoE7heAz5whId/m984UgzStSmeX7877hiSRXNL0JDt9EmaXCdHdtQ9fjM71cweC6+Ri5mdZWZ/F300SaqgUZsO7iZNf0O262c1UqGrbMkghjLU813gdqAbIOzRf0OUoSTZ0rXV7O3qZW9nT9xRJMOi1nYAPqSGbHIUQyn8Y9396QHr9D++jKVrNYkrafr6nIUt7bzr5Mk0HqOGbDK4oRT+reE1dh3AzD4EbIg0lSSaLsGYPP/96jbW7dzP9ZqpK0MwlAlcnwK+A7zFzNYBa4CbIk0liaa2DcmzoKWN8WNG8b7TG+KOIkVgqGf1vNfMxgEV7q5m7GUufbBRmw7wJsHOfV08/PxG/mj2dDVkkyE5YuE3s88cYT0A7v61iDJJwk0YM4qqCtNQT0L8bPn6oCHbbA3zyNAMtsdfG349DZgNPBDe/wDwZJShJNkqKoz62pSGehKiuaWNM6bWccZUNWSToRns0ot3AJjZI8C5/UM8ZvYFYGFB0kliqW1DMqxct4vn1+/mH685I+4oUkSGclbPcUDm5Za6gBmRpJGioUlcybCwpY3RVRVcc/a0uKNIERnKWT0/Ap42s/sITum8DvhhpKkk8eprq1netjPuGGXtQHcv9y9fz2VnHMv4serNI0M3lLN6vmRmvwAuDFd91N2XRRtLkq6+NsW2vV309PZRVakLucXh4ec3smt/N/N0UFeGaSh7/Lj7M8AzEWeRIpKuTeEOWzu6OHZ8ddxxytLClnYajxnDO06cFHcUKTKR76qZWaWZLTOzxQPW32pmbmaTo84g+ae2DfFq2x42ZGuaTkWFGrLJ8BTib/RbgFWZK8xsOnAp8EYBti8R0CUY47WotR0z+NAsNWST4Yu08JtZI3AlcNeAh74OfBZdwatopeuC4R3t8Rdeb5+zqDVoyDZtwpi440gRMvfoaq+ZLQLuJJgMdqu7X2VmVwOXuPstZrYWmOXuW7O89mbgZoCGhoam+fPn55Sho6ODmpqaXL+FyBR7ru4+5+OP7OO6k0dxzcnRX+Kv2D+vfFq5tZd/aTnAJ89Ocf6U7Ifp9HkNT1JzwciyzZkzp9XdZx32gLtHcgOuAr4VLl8ELAbGAk8B48P1a4HJR3uvpqYmz9WSJUtyfm2USiHX2Xc87J+/79nowmQohc8rXz7141Y/+46H/UB3zxGfo89reJKay31k2YAWz1JTh3RWT44uAK42syuAaqCOYE7ACcCKsOdPI/CMmZ3n7hsjzCIRSKttQ8Ht3NfFI89v4o/PP45UlRqySW4iK/zufjvBlbsws4sIhno+mPmcwYZ6JPnStdVq21Bg9y9bR1dvH3PVd19GQDNvJGdB2wYV/kJqbmnnzGl1nD61Lu4oUsQKUvjd/Ql3vyrL+hna2y9e6doUWzo6+4/pSMRWrtvFCxt2M097+zJC2uOXnNXXpujq6WP3fl2CuRCaw4ZsV6shm4yQCr/kTJO4CudAdy/3L1vH5WeqIZuMnAq/5Kz/Eow6syd6Dz+/kd0HejTMI3mhwi85e3OPX4U/as0tbUyfOIa3qyGb5IEKv+QsXadGbYXQtn0fv3tlmxqySd6o8EvOalNVVI+q0Bh/xBaGDdk+2KSGbJIfKvySM7Pgousa6olOb5+zqKWNC0+pV0M2yRsVfhmRdG21hnoi9LtXtrJ+1wHmqv2y5JEKv4xIWnv8kVrQ0saEsaO49PSGuKNICVHhlxEJ2jZojD8KO/Z28ejzm7h25jQ1ZJO8UuGXEUnXpth9oIcD3b1xRyk59y9XQzaJhgq/jEi9rr0bCXdnwdI23jZtvBqySd6p8MuI9M/e1Th/fq1ct5sXN+5h7mzt7Uv+qfDLiGiPPxoLWt4gVVXB1WdPjTuKlCAVfhmR9MHCrwO8+XKgu5efLV8fNGQbo4Zskn8q/DIik2pSVJiGevLplys3sudAj4Z5JDIq/DIilRXGpBpdezefDjZkO0EN2SQaKvwyYvU1msSVL29s28d/v7qNuWrIJhFS4ZcRS9dpjz9fFrW2qSGbRE6FX0Ys2OPXwd2R6u1zFra28+5T6pmqhmwSIRV+GbF0XYqtHV309umi6yPx21e2smHXAc3Ulcip8MuIpWur6e1zduzrijtKUWte2sYxY0fx3tPTcUeREqfCLyN28BKMuzXOn6vte7t45IWNXHuOGrJJ9FT4ZcTSB6+9q3H+XN2/bB3dvc48nbsvBaDCLyPW369HZ/bkxt1pbmnjrMbxvOVYNWST6Knwy4gdHOpR4c/Jc+t2BQ3ZdFBXCkSFX0ZszOhKalNV2uPP0YKlbUFDtplqyCaFocIveVGvSVw52d/VywPL13PF26ZQV62GbFIYKvySF5rElZtfPr+BPZ09GuaRglLhl7xI11Vrjz8HzUvbOW7iWM4/YWLcUaSMRF74zazSzJaZ2eLw/lfN7EUze9bM7jOzCVFnkOipUdvwvb5tL79/bRtzZzWqIZsUVCH2+G8BVmXcfxQ4093PAl4Cbi9ABolYui7Fvq5eOjp74o5SNBa1tlOhhmwSg0gLv5k1AlcCd/Wvc/dH3L2/OvwB0E99CUjrEozD0tvnLGpt592n1jNlvBqySWGZe3SNtcxsEXAnUAvc6u5XDXj8QWCBu9+d5bU3AzcDNDQ0NM2fPz+nDB0dHdTU1OT02iiVWq6VW3v5l5YD3H5eNadNzH/LgVL7vJ7d0sPXWjv51MwUs4+tSkyuqCnX8I0k25w5c1rdfdZhD7h7JDfgKuBb4fJFwOIBj38euI/wl89gt6amJs/VkiVLcn5tlEot14sbdvvxty32B5avy2+gUKl9Xp+8u8XP+cdHvLO7N7+BQqX2eUUtqbncR5YNaPEsNTXKoZ4LgKvNbC0wH7jYzO4GMLMPh78YbgzDSZHTUM/Qbd/bxaMvbOLamdMYXaUT66TwIvupc/fb3b3R3WcANwCPu/tNZnYZcBtwtbvvi2r7UlgTxo5iVKXpzJ4huE8N2SRmcexu/DvBmP+jZrbczP4zhgySZ2amSVxD4O40L23j7OkTOO3Y2rjjSJnK/1GlLNz9CeCJcPnkQmxTCq9ek7iO6tn2XazetIcvXXdm3FGkjGmAUfKmvkb9eo5mQUsb1aMq+MDZasgm8VHhl7xJ12n27mD2d/Xy4PL1XHGmGrJJvFT4JW/qa1Js39tFd29f3FES6Rcrw4ZsOqgrMVPhl7xJ1wWndG7t0F5/Ns0tbRw/SQ3ZJH4q/JI3ugTjkb2+bS9/eG07c2dNx0wN2SReKvySNwcvwbhbhX+ghS1hQ7Zz1ZpK4qfCL3mT1rV3s+pvyPaeU+s5dnx13HFEVPglfybXqG1DNk++vIWNuw/oKluSGCr8kjejqyo4Zuwozd4doHlpGxPHjeaStzbEHUUEUOGXPEvXVmuoJ8O2jk5+tWoT152jhmySHPpJlLxK12n2biY1ZJMkUuGXvFLbhje5O80tbcycPoFTG9SQTZJDhV/yqj7c49dlFmBF+y5e2tShg7qSOCr8klf1NSm6evvYtb877iixW7C0vyHblLijiBxChV/yKl0XnKde7gd493f18uCK9VzxtinUqiGbJIwKv+SVLsEY+PlzG+jo7GGehnkkgVT4Ja8Otm0o83P5m1vamDFpLOepIZskkAq/5FVa/XpYu3UvT63ZzvVqyCYJpcIveVWTqmLMqMqyHupZ2NqmhmySaCr8kldmRn1t+V6Jq6e3j0Wt7Vx0WloN2SSxVPgl79K1qbId4//Ny1vZtLuTubO0ty/JpcIveVfObRsWLG1j0rjRXPwWNWST5FLhl7yrrynPoZ6tYUO2/3GuGrJJsumnU/IuXVfNngM9HOjujTtKQd2/bB09fa4WDZJ4KvySd/VleEEWd2fB0jbOOW4Cp6ghmyScCr/kXX1d+U3iWt62k5c3qyGbFAcVfsm7cpzE1dzSxphRlVx1lhqySfKp8Eve9bdt2NJRHoV/X1cPD67YoIZsUjRU+CXvJo1LUWHls8f/8+c2Bg3ZdJUtKRIq/JJ3lRXG5DK6EldzSxsnTB7H7BnHxB1FZEhU+CUS9WUye3fj3j6eXrOd62c1qiGbFI3IC7+ZVZrZMjNbHN6faGaPmtnL4VftJpWgdJn06/ntuh41ZJOiU4g9/luAVRn3Pwc85u6nAI+F96XEpGurS36op6e3j9+u62HOaWka6tSQTYpHVZRvbmaNwJXAl4DPhKuvAS4Kl38IPAHcFmUOKbz+Dp2Xfu3XeXm/vfv2Me6Z/LxXvnT39rGz07le5+5LkTF3j+7NzRYBdwK1wK3ufpWZ7XT3CRnP2eHuhw33mNnNwM0ADQ0NTfPnz88pQ0dHBzU1NTm9Nkqlnqt9Tx8PvNpFX55+vHp7eqisinQ/JSdjK3r407eNo6oiWeP7pf7zlW9JzQUjyzZnzpxWd5912APuHskNuAr4Vrh8EbA4XN454Hk7jvZeTU1NnqslS5bk/NooKdfwKNfwKNfwJDWX+8iyAS2epaZGuQt1AXC1mV0BVAN1ZnY3sMnMprj7BjObAmyOMIOIiAwQ2cFdd7/d3RvdfQZwA/C4u98EPAB8OHzah4GfRZVBREQOF8d5/F8GLjWzl4FLw/siIlIgBTla5u5PEJy9g7tvAy4pxHZFRORwmrkrIlJmVPhFRMqMCr+ISJlR4RcRKTORztzNFzPbArye48snA1vzGCdflGt4lGt4lGt4kpoLRpbteHevH7iyKAr/SJhZi2ebshwz5Roe5Roe5RqepOaCaLJpqEdEpMyo8IuIlJlyKPzfiTvAESjX8CjX8CjX8CQ1F0SQreTH+EVE5FDlsMcvIiIZVPhFRMpMSRd+M7vMzFab2StmVtBr+5rZ981ss5mtzFh3xAvNm9ntYc7VZvb+iDJNN7MlZrbKzJ43s1sSkqvazJ42sxVhrjuSkCtjW5VmtszMFics11oze87MlptZS1KymdkEM1tkZi+GP2vviDuXmZ0Wfk79t91m9um4c4Xb+evw536lmf00/P8Qba5sV2cphRtQCbwKnAiMBlYApxdw++8GzgVWZqz7CvC5cPlzwD+Hy6eH+VLACWHuyggyTQHODZdrgZfCbcedy4CacHkU8BTw9rhzZeT7DPAT3ryKXFJyrQUmD1gXezaCa2n/Wbg8GpiQhFwZ+SqBjcDxcecCpgFrgDHh/WbgI1HniuzDjfsGvAN4OOP+7cDtBc4wg0ML/2pgSrg8BVidLRvwMPCOAuT7GcE1ERKTCxgLPAOcn4RcQCPwGHAxbxb+2HOF77+Wwwt/rNmAurCQWZJyDcjyPuB3SchFUPjbgIkEbfIXh/kizVXKQz39H2i/9nBdnBrcfQNA+DUdri94VjObAZxDsHcde65wOGU5waU4H3X3ROQC/hX4LNCXsS4JuQAceMTMWs3s5oRkOxHYAvxXODx2l5mNS0CuTDcAPw2XY83l7uuAfwHeADYAu9z9kahzlXLhtyzrknruakGzmlkNcA/waXffPdhTs6yLJJe797r7TII97PPM7My4c5nZVcBmd28d6kuyrIvyZ+4Cdz8XuBz4lJm9e5DnFipbFcEQ5/9193OAvQRDFXHnCjZmNhq4Glh4tKdmWRfFz9gxwDUEwzZTgXFmdlPUuUq58LcD0zPuNwLrY8rSb5MFF5jHDr3QfMGymtkogqL/Y3e/Nym5+rn7ToKrtV2WgFwXAFeb2VpgPnCxmd2dgFwAuPv68Otm4D7gvARkawfaw7/YABYR/CKIO1e/y4Fn3H1TeD/uXO8F1rj7FnfvBu4F3hl1rlIu/EuBU8zshPC3/A0EF3qP05EuNP8AcIOZpczsBOAU4Ol8b9zMDPgesMrdv5agXPVmNiFcHkPwn+HFuHO5++3u3ujuMwh+fh5395vizgVgZuPMrLZ/mWBceGXc2dx9I9BmZqeFqy4BXog7V4Y/4s1hnv7tx5nrDeDtZjY2/P95CbAq8lxRHkSJ+wZcQXDmyqvA5wu87Z8SjNl1E/yW/hgwieBA4cvh14kZz/98mHM1cHlEmd5F8Gfhs8Dy8HZFAnKdBSwLc60E/iFcH2uuARkv4s2Du7HnIhhLXxHenu//+U5ItplAS/jveT9wTEJyjQW2AeMz1iUh1x0EOzorgR8RnLETaS61bBARKTOlPNQjIiJZqPCLiJQZFX4RkTKjwi8iUmZU+EVEyowKvxSVsPPjX2Tcn2pmiyLa1igzG+qs3YIxsxmW0fVVZLhU+KXYTAAOFn53X+/uH4poW+8C/jui9xaJjQq/FJsvAyeFPdW/mrn3a2YfMbP7zexBM1tjZn9pZp8Jm4X9wcwmhs87ycx+GTY3+42ZveUI27oM+EXmirCZ3A/C3unPmdlfD/aeZtZgZvdZcK2BFWb2znD9Z8L3WGlmnw7XzbCgf/13w/7sj4QzmTGzpvD1vwc+lZHnDAuuZbDczJ41s1Py+FlLqYpqNppuukVx4/BW1wfvE/Qxf4XgWgP1wC7gE+FjXydoSgfBTMhTwuXzCVoxZNvW08DYAeuaCLqH9t+fMNh7AgsytlsJjA/f4zlgHFBDMPP2nPB76QFmhs9vBm4Kl58F3hMufzXje/4mcGO4PJqwr7tuug12qxrJLw2RBFri7nuAPWa2C3gwXP8ccFbYmfSdwMKgNQoQTJE/hJlNBba7+74BD70GnGhm3wQeImiLPNh7Xgz8KQQdSIFdZvYu4D533xtu617gQoI+LGvcfXn42lZghpmNJ/gF8+tw/Y8Imo0B/B74vJk1Ave6+8tD/JykjKnwS6npzFjuy7jfR/DzXgHs9KAF9GAuJ7jIxSHcfYeZnQ28n2DIZS7w6SG+Z79srXX7ZebvBcaEz8/aW8Xdf2JmTwFXAg+b2Z+5++NDzCFlSmP8Umz2EAzl5MSD6w+sMbPrIehYGhbygQ4b3w+fPxmocPd7gL8nuJTlYO/5GPDJcH2lmdUBTwLXhh0ZxwHXAb8ZJPNO3vxLAeDGjDwnAq+5+zcI/mI4a4gfhZQxFX4pKu6+DfhdeFD0qzm+zY3Ax8ysv7PlNZkPmlklwXj9i1leOw14woKrhf2A4FJ4g73nLcAcM3uOYOjmDHd/Jnzt0wRXQLvL3ZcdJfNHgf8ID+7uz1g/D1gZ5nkL8P+O8j4i6s4pMlC4Z32Tu38i7iwiUVDhFxEpMxrqEREpMyr8IiJlRoVfRKTMqPCLiJQZFX4RkTKjwi8iUmb+P1ZranksRRQ8AAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
}
],
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}