{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Hosting Capacity\n", "\n", "The term PV hosting capacity is defined as the maximum PV capacity which can be connected to a specific grid, while still complying with relevant grid codes and grid planning principles. \n", "\n", "Here we will introduce a basic algorithm to calculate PV hosting capacity with pandapower.\n", "\n", "The basic idea of calculating hosting capacity is to increase PV installation until a violation of any planning principle or constraint occurs. To analyse hosting capacity, we need three basic building blocks:\n", "1. Evaluting constraint violations\n", "2. Chosing connection points for new PV plants\n", "3. Defining the installed power of new PV plants " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Evaluation of constraint violations\n", "\n", "Our example function that evaluates constraint violation is defined as:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandapower as pp\n", "\n", "def violations(net):\n", " pp.runpp(net)\n", " if net.res_line.loading_percent.max() > 50:\n", " return (True, \"Line \\n Overloading\")\n", " elif net.res_trafo.loading_percent.max() > 50:\n", " return (True, \"Transformer \\n Overloading\")\n", " elif net.res_bus.vm_pu.max() > 1.04:\n", " return (True, \"Voltage \\n Violation\")\n", " else:\n", " return (False, None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function runs a power flow and then checks for line loading and transformer loading (both of which have to be below 50%) and for voltage rise (which has to be below 1.04 pu). The function returns a boolean flag to signal if any constraint is violated as well as a string that indicates the type of constraint violation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Chosing a connection bus\n", "\n", "If new PV plants are installed, a connection bus has to be chosen. Here, we chose one random bus of each of the buses that have a load connection:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from numpy.random import choice\n", "\n", "def chose_bus(net):\n", " return choice(net.load.bus.values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Chosing a PV plant size\n", "\n", "The function that returns a plant size is given as:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from numpy.random import normal\n", "\n", "def get_plant_size_kw():\n", " return normal(loc=0.5, scale=0.05)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function returns a random value from a normal distribution with a mean of 0.5 MW and a standard deviation of 0.005 MW. Depending on the existing information, it would also possible to use other probability distributions, such as a Weibull distribution, or to draw values from existing plant sizes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluating Hosting Capacity\n", "\n", "We now use these building blocks to evaluate hosting capacity in a generic network. We use the MV Oberrhein network from the pandapower networks package as an example:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import pandapower.networks as nw\n", "def load_network():\n", " return nw.mv_oberrhein(scenario=\"generation\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The hosting capacity is then evaluated like this:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "iterations = 50\n", "results = pd.DataFrame(columns=[\"installed\", \"violation\"])\n", "\n", "for i in range(iterations):\n", " net = load_network()\n", " installed_kw = 0\n", " while 1:\n", " violated, violation_type = violations(net)\n", " if violated:\n", " results.loc[i] = [installed_kw, violation_type]\n", " break\n", " else:\n", " plant_size = get_plant_size_kw()\n", " pp.create_sgen(net, chose_bus(net), p_mw=plant_size, q_mvar=0)\n", " installed_kw += plant_size" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This algorithm adds new PV plants until a violation of any constraint occurs. Then, it saves the installed PV capacity. This is carried out for a number of iteration (here: 50) to get a distribution of hosting capacity values depending on connection points and plant sizes.\n", "\n", "The results can be visualized using pandas/matplotlib:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArYAAAFPCAYAAAC4do2gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd0VNXax/HvzKRACIQWQgi9d4ghQECkCBZECF2kiaIooOBV5EXhqly9CCJIF0TlUoUIooQqndBCQiC00AkplPReppz3j5jRMW0CSWYSns9aLphz9jnnSYjwmz27qBRFURBCCCGEEKKUU1u6ACGEEEIIIYqCBFshhBBCCFEmSLAVQgghhBBlggRbIYQQQghRJkiwFUIIIYQQZUKZDbaBgYGWLkEIIYQQQpSgMhtshRBCCCHEk0WCrRBCCCGEKBMk2AohhBBCiDJBgq0QQgghhCgTJNgKIYQQQogyQYKtEEIIIYQoE6wu2M6cOZPRo0fn2yYkJITWrVuzZMmSEqpKCCGEEEJYO6sKtj4+Pvj4+OTbRqfTMWPGDLRabQlVJYQQQgghSgMbSxcAoNfrWbFiBUuXLi2w7cqVK7l+/XoJVCWEEEIIIUoTi/fYZmRkMHDgQJYsWcKAAQNwcXHJs+3Vq1dZsWIFEydOLMEKhRBCCCFEaWAVwTY5OZmFCxcyd+5cbGxy70TOHoLQpUsX+vfvX8JVCiGEEEIIa2fxoQiOjo7s27cvz0Cb7fvvvyc0NJTly5ej0+lKqDohhBBCCFFaWLzHVq1WFxhqr1+/zrJly5g+fTo1a9YsocqEEEIIIURpYvEe24Lo9XpmzJiBh4cHw4YNs3Q5ogjt3buXXbt25TgeFxcHQJUqVUyO9+3bl+eff75EahNCCCFE6WP1wfaHH34gJCSEjRs3EhsbC0BiYiIAaWlpxMbGUrlyZdRqi3c+iyISExMD5Ay2QgghhBD5USmKoli6iL/r1asXbm5urFu3DoDRo0fj7++f7zUHDhygdu3aJscCAwPx8PAotjpF8ZkyZQoAixYtsnAlQgghhChNrL7Hdvr06cYe2mzR0dFMmzaNAQMG4O3tjbOzs4WqE0IIIYQQ1sLqg23r1q1zHAsPDwegTp06dOnSpaRLEkIIIYQQVkgGpgohhBBCiDJBgq0QQgghhCgTrG4owsGDBwtsU7t2ba5evVoC1QghhBBCiNJCemyFEEIIIUSZIMFWCCGEEEKUCRJshRBCCCFEmSDBVgghhBBClAkSbIUQQgghRJkgwVYIIYQQQpQJEmyFEEIIIUSZIMFWCCGEEEKUCRJshRBCCCFEmSDBVgghhBBClAkSbIUQQgghRJkgwVYIIYQQQpQJEmyFEEIIIUSZIMFWCCGEEEKUCRJshRBCCCFEmSDBVgghhBBClAkSbIUQQgghRJkgwVYIIYQQQpQJEmyFEEIIIUSZIMFWCCGEEEKUCRJshRBCCCFEmSDBVgghhBBClAkSbIUQQgghRJkgwVYIIYQQQpQJEmyFEEIIIUSZIMFWCCGEEEKUCRJshRBCCCFEmWB1wXbmzJmMHj06x/GTJ08yYsQI3N3d6datG19++SUpKSkWqFAIIYQQQlgjqwq2Pj4++Pj45Dh+6tQpXn/9dbRaLR9++CEDBgxg8+bNjB8/HoPBYIFKhRBCCCGEtbGxdAEAer2eFStWsHTp0lzPz5s3D1dXV9avX0+5cuUAcHV1Zfbs2Rw7dozu3buXZLlCCCGEEMIKWbzHNiMjg4EDB7JkyRIGDBiAi4tLjvNVqlRh2LBhxlAL0LFjRwCuXr1aovUKIYQQQgjrZPEe24yMDJKTk1m4cCF9+/alV69eJuft7e354Ycfclx35coVAGrVqlUidQohhBBCCOtm8WDr6OjIvn37sLExr5SIiAhOnz7N3Llzadq0KX369CnmCoUQQgghRGlg8WCrVqtRq80bEREfH2/s0S1fvjwzZ87E3t6+OMsTQgghhBClhMXH2BaGSqVi4cKFzJ07l0aNGjFu3Dj27Nlj6bKEEEIIIYQVKFXB1snJib59++Lt7c2GDRuoVasWX331laXLEkIIIYQQVqBUBdu/K1euHD169ODevXvExsZauhwhhBBCCGFheY6xPXDgQJE95Nlnn33ka2/evMmbb77JG2+8wciRI03OpaSkoFKpsLOze9wShRBCCCFEKZdnsJ00aRIqleqxH6BSqbh8+fIjX1+vXj2SkpL4+eefGTp0qDHERkREsG/fPjw9PXF0dHzsOoUQQgghROmW76oInp6exo0QHsXp06cJCAh45OsBbGxsmDlzJh999BGjR4+mf//+xMXFsWHDBlQqFbNmzXqs+wshhBBCiLIh32DbsWNHJk+e/FgPeNxgCzBgwABsbW1ZvXo1c+bMwcHBgc6dO/P+++/ToEGDx76/EEIIYU0URSEhTUuaVk+G1kC67s9ftXoydFm/6gwK5W01OJazoYKdDY72NlSw11DB3oZythpLfwlCWESewXbgwIG0aNHisW7evHlzvL29C3XNwYMHcz3et29f+vbt+1j1CCGEENZAURTCYtO4E5PC3dhUwmJTCY9L435iOvcT0olKyiBTb3jk+9uoVVQqb4tb5fLUreZAvaoO1KvmQJ2qDtSrVgHXSuVQqx9/uKEQ1ibPYKvVaomPjycyMvKRt63t3bs3vXv3fuTihBBCiLIgLDaV8+HxXAhP4Hx4PJciEknK0BXb83QGhdiUTGJTMrkQkZDjvJ2NmrpVHWhdqxJta1emXR0nWtVykp5eUerlGWx9fX3ZuXMnAHXq1KFz5854eXnRqVMnqlatWmIFCiGEEKWJ3qAQdDeOo9eiCAqL52JEAnGpWkuXZSJTZ+DGw2RuPExm+7lIAGw1KlrVcqJjg6p0rF8Vz/pVcXKwtXClQhSOSlEUJbcTAQEBBAYGEhAQwPnz50lMTESlUqFSqWjatCleXl507twZT09PHBwcSrruAgUGBuLh4WHpMsQjmDJlCgCLFi2ycCVCCGGehFQth6895GDIQ45ciyLeyoLso9CoVXSoV4XnWtXk+VYu1K5iff/WC/FPeQbbv1MUhevXrxuDblBQEJGRkahUKjQaDW3btsXLywsvLy/at2+PjU2+c9JKhATb0kuCrRCiNLgVlczeSw84FPKQwLtx6A0F/nNaqrV0rcTzrWryXCsXWrhWsnQ5QuTKrGCbmwcPHhAYGMjZs2c5d+4c165dQ6vVUq5cOYKCgoq6zkKTYFt6SbAVQlir1EwdvufvsTkgjMDQOEuXYzF1qzrQr60rIzrWpU5V6ckV1uORu1YrV65M1apVqVatGrVq1SIuLo6IiAjS0tKKsj4hhBDC4oLuxrElIIwd5++RXIyTvkqLu7GpLD98k++O3KR7U2dGda5Hz2Y1ZKUFYXFmB1uDwcD58+c5fvw4J0+eJDg4GJ1Oh6IouLi44OXlxbvvvkuXLl2Ks14hhBCiRCSla/EJCGdLQBgh95MsXY5VMihw6GoUh65G4Va5PK92qsuwDnVwrmhv6dLEEyrfYHvnzh2OHz/OiRMn8Pf3Jzk5GUVRqFSpEt27dzeOq23YsGFJ1SuEEEIUq+jkDH7wu836U6EkpUvvrLki4tP4eu9Vvt1/jRdauzKpZyOa15SxuKJk5Rlse/Xqxb179wCws7PD3d2dLl260LlzZ1q3bo1arS6xIoUQQojidj8hneWHb7D5TBgZukffHOFJp9Ur7DgfiW9wJC+1cWVq76Y0ruFo6bLEEyLPYBsZGYlGo+G5555jwoQJNG/evCTrEkIIIUrEw8R0lh++yUb/u2RKoC0yigK+wffYffE+A9rVYkrvJtSrVsHSZYkyLs9g+9xzz3H69Gl2797Nnj17qFmzpnHogZeXF9WrVy/JOoUQQogilZqpY+nBG/x4/DbpWgm0xUVvUNgWFMHv5yMZ/FRt3n22sayJK4pNnsF28eLFKIrCxYsXjeNsd+zYwbZt21CpVDRu3JguXbrg5eVFx44drXKTBiGEECI3O4Pv8eXOy0QmpFu6lCeGzqCwOSCMX4MiGPd0faY82wQHO8uvey/KlkKtY5uens7p06c5ceIEJ06c4Pr16wDY2NjQtm1bY9C1hvVjZR3b0kvWsRVCFJcbD5P57PdL+N2ItnQpT7xaTuWY2a8lfdu4WroUUYY88gYNANHR0Zw6dYrAwEBOnTrFnTt3UKlUXL58uShrfCQSbEsvCbZCiKKWmqlj0YHr/Oh3G62+bO8QVtp0b+rMlwNby/AEUSQe6TMARVG4du0a586d4+LFi1y6dImwsDAURaFCBRkYLoQQwnocDHnAJ79e5J4MO7BKR65F8fzCo3z4fDPGetWXTR7EYzEr2MbFxXH+/HmCgoI4f/48wcHBpKWloSgKDg4OeHh4MHXqVDp16kSrVq2Ku2YhhBCiQOlaPf/ddYW1J0MtXYooQEqmns93XGbH+Ui+He5O3WrSeyseTZ7BduPGjZw7d47z589z9+5dIKuntnz58jz11FN06tSJjh070qZNGzQaTYkVLIQQQhTk2oMk3tsUJDuGlTJn78bz0pJjzBvclhdl7K14BHkG29mzZwNgb29vDLGdOnWiXbt22NjILEYhhBDWad3JO3yx84psslBKJaXreGfDWcZ41eOTl1pgbyOdZ8J8eSbUyZMnG4OsnZ1dSdYkhBBCFFpcSibTfglm/5UHli5FFIG1J0M5ezeOZa8+JRs7CLPluS/u5MmT8fT0NIZac1Y6ePDgARMnTiy66oQQQggzXIxI4MVFxyTUljEXIxLpt9gP3+BIS5ciSok8g+0/vfbaa1y4cCHXc4qisHbtWvr27cuhQ4eKrDghhBCiIPsvP2DYypPcT5RVD8qipAwdkzcG8R/fyxgMslSbyJ/ZwVZRFF5//XWCgoJMjoeEhDB06FDmzJmDwWDggw8+KPIihRBCiNz86Hebt9YFkJqpt3Qpopj94HebdzcFkaGTP2uRN7OD7bp167Czs+ONN97gzJkzpKenM2/ePIYMGcLFixfp3bs3u3fvZvz48cVZrxBCCIHeoPDpbxeZ7XsZ6cR7cuy8cI/RP/iTkKa1dCnCSpm9vEHz5s3ZuHEj48aN46233qJKlSpERkZSt25dZs6cyTPPPFOcdQohhBAApGTomLzxLIeuRlm6FGEB/rdjGfrdCdaM60ityuUtXY6wMmb32ALUq1ePTZs2UatWLSIjI+nRowe+vr4SaoUQQpSI6OQMhn53UkLtE+7ag2QGLT9ByP1ES5cirEyePbYhISF5XjRz5kymT5+On58fO3fupEWLFibnmzdvXnQVCiGEEMDDpHRe/f40Nx4mW7oUYQXuJ6Yz9LuTrB7TgU4Nq1m6HGEl8gy23t7eqFR579esKFmDmj7++OMc565cuVIEpQkhhBBZHiSmM+L7U9yKSrF0KcKKJKXreH3NGdaN78RTdatYuhxhBR452AohhBAl4WFSOiNWneJWtIRakVNKpp7XfvRn01udaVXLydLlCAvLM9h+9dVXJVmH0cyZMwkNDWXdunUmx48dO8aKFSu4dOkSarWadu3aMXXqVNq3b2+ROoUQQhS/2JRMRq0+LaFW5CsxXceYH/zZPMGLxjUcLV2OsKA8J4/NmDGDAwcOPNbN9+/fz4wZM8xu7+Pjg4+PT47j/v7+vPnmmyQlJfH+++8zadIk7t69y6hRowgODn6sGoUQQlinxHQtY348zbUHMqZWFCzmzzdBYbGpli5FWFCewfbXX3997LGyISEhbN++vcB2er2epUuXMmvWrFzP//e//8XV1ZUtW7bw2muvMX78eLZs2YKDgwMLFy58rBqFEEJYn0ydgfFrArgYIbPehfnuJ6bz6upT3E+QXeieVPmuY+vn50dSUtIj3/zcuXMFtsnIyGDo0KFcvXoVb29vTp48aXI+ISGBkJAQxo0bR/nyf61XV716dTw9PTl+/Pgj1yeEsH7/93//x6+//lpgu4EDB1psCFV+1qxZw+rVq0lMTGTMmDF8+OGHli6pVPj41wv434m1dBmiFAqLTWPk6lNsfacLlR3sLF2OKGH5Bttz586ZFU7zU9AEtIyMDJKTk1m4cCF9+/alV69eJucdHR3Zs2ePSajNFhcXh0ajeaz6hBDWbfjw4Xh5eRlfBwYGsnnzZoYPH46Hh4fxeN26dS1RXr6uXr3KnDlzaN++PVOmTJGlEM206uhNfgkMt3QZohS7GZXCpI1n+d+4jthoCrVkvyjl8gy2a9euLZECHB0d2bdvHzY2uZei0WioX79+juMhISGcPXuWp59+upgrFEJYkru7O+7u7sbXer2ezZs30759ewYMGGDBygp27do1ACZMmJDjTbvI3cGQB3y1O+911IUw1/EbMfzH9zKfD2ht6VJECcoz2Hbs2LFEClCr1ajVhXs3lZKSwvTp0wF46623iqMsIYR4bFpt1n72FSpUsHAlpcO1B0m8t+kcBsXSlYiy4n8nQ2lWsxKvdrK+T3RE8ch3KII1SktL45133iEkJIQJEyaUWAAXQpQOvXr1okuXLhgMBnbs2EGVKlXYvn07VapU4eeff2br1q3cvHkTnU6Hm5sbgwYN4s033zQOm+rVqxdPP/00Hh4erFq1irt37+Lq6srYsWMZOXKk8TkJCQnMmTOHU6dOER0dTc2aNXnxxReZPHky9vb2jB49Gn9/fwDGjBkDZA1NyP510aJF+Pv7k5mZSfPmzXnrrbfo3bu38f6jR4/Gzs6O1q1bs3btWsqVK8eaNWv44osvcHBwYOjQoSxevJjbt29Tt25dPvroIzw8PJg3bx579uxBo9HQp08fPv74Y8qVK2e8b1BQEIsXLzYOM3N3d2fq1Km0bdu2wO9h1apVi+lPLWtZrzf+d4bkDF2xPUM8mT77/RIta1WifZ3Kli5FlIBSFWwTExOZMGECZ8+eZfDgwbz//vuWLkkIYYV27txJgwYN+OSTT4iOjqZq1aosXLiQ7777joEDBzJs2DBSUlLYvn0733zzDc7OzgwcONB4/bFjx9izZw+jRo2ievXqbN68mdmzZ1O7dm26d+8OwNSpU7l8+TJjxoyhRo0aBAUFsWrVKuLj4/nPf/7D22+/TYMGDdi8eTNvv/02DRs2BCA4OJgxY8bg6OjIuHHjqFChAr/99huTJk3i3//+t0l4Pnv2LKGhoUybNo3w8HAaN24MwKVLlwgKCmLMmDFUrFiRlStXMnXqVFq0aEH58uV5//33CQgIYPPmzdSoUYPJkycDcPz4cSZMmEDz5s2ZMmUKmZmZbNu2jZEjR/LTTz/RoUOHfL+HxcVgUJi4IZCw2LRie4Z4cmXqDUxcH4jve92oWkEmk5V1pSbYxsTE8MYbb3DlyhWGDx/O559/LjujCSFylZ6ezrfffmucUKbValm/fj0vvfSSycoJQ4cOxcvLi71795oE23v37rF9+3bjZK8+ffrQrVs3fv/9d7p3705MTAwnTpzgo48+4o033jDeS1EUwsLCAOjatSsPHjxg8+bNdOnShU6dOgHwxRdfoFKp+OWXX6hZsyYAI0aMYMSIEcybN48XX3zRGCJTU1P57rvvjNdmi4qK4rvvvqNnz54A2NjYMHv2bPR6PT/88AMAr7zyCgEBAfj5+TF58mQMBgOffvopbdq0Yf369caJt6NGjcLb25svvvjCZHnGf34Pi9OKIzc5dUtWQBDFJzIhnfc2BbH29Y6o1ZIdyrJSMVUwOTnZGGpfe+01Zs+eLaFWCJGnunXrmgQyW1tbTpw4wezZs03axcXF4ejoSGqq6YLuDRo0MFnBwNnZmerVqxMdHQ1AxYoVcXBwYOPGjezdu9d4/Zw5c1izZk2edUVHR3P+/HkGDBhgDLUA9vb2vPHGG6Snp3PixAnj8XLlyuHp6ZnjPvb29nTr1s2kXoBnn33WeEylUuHm5kZUVBQAly9fJiwsjN69e5OQkEBsbCyxsbGkp6fTs2dPrly5wv379/P8HhaXixEJfLv/WrE/Rwi/G9Gs9rtl6TJEMSsVPbazZ8/mypUrjBkzplA7mQkhnkzVqlXLcczW1pbDhw9z4MABbt++TWhoKAkJCQAoiulspdw+drezs8NgMBh/P3v2bGbNmsV7772HnZ0dHTt25LnnnsPb2xt7e/tc64qIiAD+CqJ/16hRIwAiIyONxypXrpzr5NrKlSubrCST3fv6z69bo9EYv7a7d+8CMG/ePObNm5drfffu3TMG7ty+h0UtXavn/c3n0OpltpgoGd/su0av5i6y7W4ZZnawXbRoEQMGDMh16a3idPPmTX777TcqVqxIixYt+O2333K0sfYlf4QQJeuf61srisK0adPw9fXFw8MDd3d3hg8fjqenJ2PHjs1xvTkrtbz88st069aN/fv3c+TIEU6cOIGfnx8bN27Ex8cHO7ucY/n+GaD/Ljs029ra5vl1ZMtrecT8PsnKvv+UKVNo3759rm2yxwHn9+yiNHdPCNcfyna5ouRk6Ax86HOere90QSNDEsoks4PtihUr+O6772jbti39+/enb9++VKlSpThrAzDOKk5KSsqzt1aCrRAiPwEBAfj6+jJx4kSmTJliPK7T6YiPj6dOnTqFul9KSgpXrlyhSZMmDBkyhCFDhpCZmcnXX3/N2rVr8fPzy3XdWjc3NwBu3cr5cejt27cBTIYoFKXsZzs4ONClSxeTc8HBwSQkJJisnlDc/K5Hs+bEnRJ7nhDZzoXFs+roLd7p0cjSpYhiYPYY23Xr1jFkyBDu3LnDf/7zH7p168bEiRPZt28fmZmZRVbQwYMHWbdunfH1iBEjuHr1ar7/CSFEfuLj4wGMqwpk27JlC2lpaeh0hVti6vr164wcOZJffvnFeMzOzo6WLVsCefd2Ojs707p1a37//XeT8ayZmZn89NNP2NnZ0bVr10LVYq7WrVvj7OzMunXrSElJMR5PTk5m6tSpzJgxo8R2ckxI1fKhz3ny6cAWolgt3H+N6w+SLF2GKAZm99h6enri6enJv//9bw4fPsyOHTs4fPgwBw8epFKlSrzwwgv079/fZLkYIYSwBu7u7jg6OjJnzhwiIyOpVKkSp0+fZteuXdjb25sEPXO0a9eODh06sHDhQu7du0ezZs24d+8e69evp2HDhiZbAP/TzJkzGTt2LEOGDGHEiBFUqFCB33//nUuXLjFz5kwqVar0uF9urmxtbZk1axZTp05l0KBBDBkyBHt7e3x8fIiMjGT+/Pl5DnEoav/ddYX7iekl8iwhcpOpM/CBz3m2vdNFttwtYwr9t5itrS19+vShT58+JCcns3//fg4fPszu3bvx8fGhVq1aeHt7M2jQIONHX0IIYUnVq1dn1apVzJ8/n+XLl2NnZ0eDBg1YsGABwcHBrF27lujoaKpXr27W/VQqFcuWLWPp0qUcOnSIzZs34+TkxHPPPceUKVNyHV+bzd3dnU2bNrF48WJ+/PFHDAYDzZs3Z9myZSYbNBSH559/nh9//JEVK1awfPly1Go1TZo0YcWKFcalw4rbhfAEfALDSuRZQuQnODyBVcduMbFH44Ibi1JDpeQ3m6EAqampHDp0iIMHD3Ls2DESExOpUKECKSkpaDQaBg0axMcff0z58uWLsmazBAYG4uHhUeLPFY8vewzkokWLLFyJEKKoDVlxgoDQOEuXIQQAFew0HJ7WE+eKua9kIkqfQvfYarVajhw5gq+vL4cPHyYjIwNbW1t69uzJwIED6datG6GhoSxfvpxffvmF1NRUvvnmm+KoXQghRCny27kICbXCqqRk6lnwxzXmDGpj6VJEETE72J48eRJfX1/++OMPkpKSUBSF9u3bM3DgQPr27UvFihWNbRs2bMj8+fM5c+YMBw8eLJbChRBClB5pmXrm7g6xdBlC5LAlIIxxXevT1KViwY2F1TM72I4bNw7IWjImewvGgnalqVixYoks8i2EEMK6rThyk8gEmTAmrI/eoPDfXVdYM66jpUsRRcDsYDt48GC8vb1z3d4xL7/++qvJYuNCCCGePBHxaaw6etPSZQiRp8NXo/C7Hs3TTcybQCqsl9lrXLi6uhbY5tChQ8yaNcv4WkKtEEKIBfuuka41WLoMIfL15a4rGAyyuHJpZ3awXbp0qXEXsLwcOXIk1y1vhRBCPJnCYlP57VyEpcsQokBX7iXya5D8rJZ2eQ5F2LBhg8muOgCbNm1i//79ubbXarXcunWL2rVrF22FQghRgMzMTDZs2MDOnTu5desWKpWKunXr8tJLLzF8+HCTya0lpVevXri5uZnspGiJ544ePZqIiAiLTeRdfvgGOukFE6XEiiM3GfSUGyqVytKliEeUZ7AdMGAAy5YtIzY2FshakDw6Opro6Ojcb2Rjg6urK5988knxVCqEELl48OAB48eP5/r16/Tu3ZuBAweiKApBQUEsXLiQzZs3s3LlSho2bGjpUi3i7bffJi0tzSLPjoxPY2ug9ICJ0uPGw2QOX42iZ/Mali5FPKI8g62joyMnTpwwvm7evDmTJ09m8uTJJVKYEEIUJDMzk3feeYfw8HB++uknk61sR40axZgxY3jrrbd488038fX1tchmMZbWtWtXiz179bHbZOplbK0oXb4/dkuCbSlm9hjbtWvXMnDgwOKsRQghCmX79u1cunSJ6dOnm4TabO3atePjjz8mPDycH374wQIVPrkS0rRsPnPX0mUIUWgnbsZwKTLB0mWIR5RnsE1OTiYzM9P4umXLljg5OZGcnFzgf0IIURK2b9+Og4NDvm+6+/fvj7OzMzt27ADg008/pWXLlsZhVtnS0tJo3749M2bMMB4LCgpi3LhxuLu74+7uzuuvv05wcLDJdb169WLmzJl8/PHHtGnThmeeeSbHvbMFBATw2muvGe83ZswYzpw5Y9JGURQ2bdrEkCFDcHd3p02bNrzwwgusWrWKf+6AvmvXLgYMGEDbtm3p168fp06dyvHM0aNH06tXL5PXb7zxBkePHmXQoEG0adOGHj16sGTJEgwG097V8+fPM2bMGNzd3enWrRtLlixh6dKlNGvWLK9vt9HG03dJydQX2E4Ia7T62G1LlyAeUZ5DETw9PZk0aZJx6EGHDh3MGkytUqm4fPly0VUohBC50OslZi17AAAgAElEQVT1XLhwgbZt22Jvn/c+7yqVik6dOuHr60tUVBQvv/wyP//8M3v37mXEiBHGdocOHSItLY3+/fsDcPz4cSZMmEDz5s2ZMmUKmZmZbNu2jZEjR/LTTz/RoUMH47U7d+6kQYMGfPLJJ0RHR1O1atUcdRw4cIDJkydTt25d3nnnHQB8fHx47bXXWLx4Mc8++ywA3377Ld999x0DBw5k2LBhpKSksH37dr755hucnZ2NIX7btm3MmDEDd3d3pk2bRmhoKG+//TYGgwE3N7d8v3fXrl1j6tSpDB8+nOHDh+Pr68vSpUupWrUqI0eOBODixYuMGTOG6tWrM2nSJNLS0li7di1qdcEf9OkNCv87cafAdkJYK9/gSKa/0JyaTuUsXYoopDyDbYcOHUxWOCjMxgxCCFHcEhISyMzMxNnZucC2NWpkjZd7+PAhHh4euLm5sWfPHpNgu2vXLpydnenUqRMGg4FPP/2UNm3asH79ejQaDYBx18UvvviC7du3G69NT0/n22+/zXM3Rp1Ox+zZs3FxcWHr1q04OjoC8Morr9CvXz8+//xznnnmGQDWr1/PSy+9xFdffWW8fujQoXh5ebF3714GDhyIXq9n/vz5tGnThnXr1hnXDG/ZsqVJj3NeHj58yIoVK4w9ud7e3nTr1o0dO3YYg+3XX3+NnZ0dPj4+xqD+7LPPMnjw4ALvf/RaFPcTZZcxUXpp9Qo/nbjNjBdbWLoUUUh5Btt/LlFT0kvWCCFEfrI/ls8OnfmxsbExXqNSqejXrx+rV68mJiaGatWqkZyczNGjR3n11VdRq9VcvHiRsLAwRowYQUKC6Vi7nj17smbNGu7fv0/NmjUBqFu3br5bjF++fJn79+/z4YcfGkMtQKVKlRg1ahTffPMNFy9exN3dnRMnTqDVak2uj4uLw9HRkdTUVAAuXbpETEwMkydPNtkIZ8CAASaBOC/ly5enR48extf29vY0aNDAuOpNQkIC/v7+jBw50qT3uWXLlnTt2pVjx47le/9fzoYXWIMQ1m7zmTA+6NMMOxuzpyMJK1DoP60rV65w86bp1ogrV67k4sWLRVaUEEIUpGrVqtja2hITE1Ng24cPHwJ/9dy+/PLL6PV69u3bB8D+/fvJyMjg5ZdfBuDu3axJT/PmzcPLy8vkvzVr1gBw79494/2rVauW7/PDw7OCXoMGDXKcy16GLDIyEsjasfH48eN89NFHDB06lI4dO9K7d29iY2ONYT4iImsJrX+GaY1GQ7169Qr8flSuXDnHkAI7OzvjGNuwsDAMBkOu9ypo2bSENC1/XH5QYA1CWLv4VC0HQx5augxRSHn22P6TTqdj5syZ/PbbbyZjbzMyMvj222/59ttvGTt2LP/3f/9XbMUKIUQ2lUqFu7s7Fy5cICMjI89xtoqiEBgYSJ06dYzBtkmTJjRr1ozdu3czYsQIdu/eTYMGDWjVqhWAMeBNmTKF9u3b53rfvwe8gnqN/znpK7dztra2KIrCtGnT8PX1xcPDA3d3d4YPH46npydjx441+doh6+/ff/rnBLDcFDROVqfTAVlh95/yG88MWWMTM3WyxJcoG7adDeeF1jUtXYYoBLOD7bp169i+fTtPP/20cZIDZP3Ft379er7//nv+97//UatWLcaMGVMsxQohxN8NGDAAf39/Nm/enOffOwcOHCAsLIyJEyeaHH/55ZdZuHAhYWFhHD9+3DihCzBOvnJwcKBLly4m1wUHB5OQkEC5cuZPKsm+361bt3Kcu307a/Z1zZo1CQgIwNfXl4kTJzJlyhRjG51OR3x8PHXq1AEw/nrnzh2TeymKQkREBE2aNDG7ttzkdX+A0NDQfK/dGlhEwxAyUrC5shv1vYuQkQLlK6F3a4+++fNgkzNwq8MC0dw8iirxPtiUw1CtAfqWfVEqmrEeaXoiNmc3o466jlK+MvomPTE0yLl8nM2ZdaiSo9D2/FdRfIWiFDh8NYq4lEyqVMj5Myesk9lDEbZu3UqbNm1YvXo1LVr8NZhapVLh4eHBihUraN68OT///HOxFCqEEP80aNAg3N3d+eabb/Dz88tx/sqVK8yaNYvatWszfvx4k3P9+vXDYDDw5ZdfotVqjcMQAFq3bo2zszPr1q0jJSXFeDw5OZmpU6cyY8YMs8b2ZmvVqhXOzs5s2rTJZEnE5ORkNm7ciLOzM61btyY+Ph6Axo0bm1y/ZcsW0tLSjD2pLVu2xM3NjU2bNpnsKrZz507i4uLMrisv1apVw93dHV9fX5MxxmFhYRw9ejTP625FJXP2bvxjPx9dBrZHl6C5fQLFsQb6Rt1Qyjlhc/0Qtse/A4PpMmKay7uwDdgAmenoG3TF4NwY9b2L2B5ZBCm5L732dzZBPqijb2Co3wkqVMX2nA/q+6ar+6gSIlGHn0Pf4sXH//pEqZGpN7D74n1LlyEKwewe2/DwcONs2dyoVCo6d+7M+vXri6QwIYQoiFqtZunSpbzzzjuMHz+e5557jk6dOqHRaDh//jw7duzA1dWV5cuXU6FCBZNrXV1d8fT05NChQ7Rv395kvKqtrS2zZs1i6tSpDBo0iCFDhmBvb4+Pjw+RkZHMnz/fOCHNHH+/3+DBgxkyZAgAv/zyCw8fPmTx4sWo1Wrc3d1xdHRkzpw5REZGUqlSJU6fPs2uXbuwt7c3hmyVSsWsWbOYNGkSw4cPZ/DgwTx48IANGzZQuXLlIvjOwvTp0xk9ejRDhgzhlVdeITMzk3Xr1uU7rGLb2aLZPldz+yTq5IfoGnVD3zZreTO9omATuAFN2FnUYWcx1MtaqUcVdxfN1QMYqjdC2+VN0GT1rKlrtcXW/3/YhOxD5/FK3g/LSEJz/xK6Vi+hb/osKAq2++eivn0CQ82Wf9V0eTdK1XoYasos+SfNzguRvNop78mhwrqY3WPr5OSU68dofxcREUHFihUfuyghhDBX9erV2bBhA7NnzzaGxK+//pqQkBCmTJnCtm3b8vxoPruXtl+/fjnOPf/88/z444+4uLiwfPlyFi1aRIUKFVixYkWu7QuSfb8aNWqwbNkyVq5cSe3atVm7di29e/c2fi2rVq2iTp06LF++nAULFhAZGcmCBQt49dVXuXHjhnHlgp49e7Jy5UrKlSvHggUL2L9/P19++WWBk7vM5e7uzurVq6latSrffvstGzduZPTo0fTp0yfXsbcAuy7cy/V4YanisibvGep1+ttBFfp6nQFQx/01HEJzM6unXtd+qDHUAhjc2qGv3xnFMf+Jfao/e3QNTrWMz1GcahmPA6hiQ7PCb8u+j/5FiVLr1K1YYpJzjmcX1kml5Pf2+28++eQTfv31VxYvXmz8S/jv/Pz8mDBhAi+++CLz588v8kILKzAwEA8PD0uXIYAlS5Zw48YNs9tnt/3nx7F5ady4Me++++4j1SaEyF1UVFSuawS//fbbhISEcPjwYZPjYbGpdJt3qEiebXNuK5rbx9F2fgODayvjcXVYILYBG9A164O+ZdaQALud/0YpVxHts9Me6Vmq5Cjs/piDtuNYDG7tsp5/YhUqbTra7u8BYOv3HaCgffqdfO4kyrIvB7ZmZKeCVxwRlmf2Z2kTJ05k//79vPfee3Tp0oX27dvj6OhIcnIyFy5cwM/PD0dHR957773irFeUQjdu3ODcxSvoHXLuxpQblT7rxzLwVsFLBmlSCx4/J4QovGHDhtGwYUN++OEH47Ho6GhOnz5Nt27dcrQ/ej2qyJ6tr9cRdegpbC5sR2vngOLkhiruLjYXfVFsy6HP7snNSEKVmYyhRhNUSQ/QXNqFOvo6KGCo0Qxd635QIf8eW8WhKop9RTS3/DBUb4QqOQp11A30jbK+RlX0DdRR18jsLv+2PcmOXouSYFtKmB1s3dzcWLduHZ9//jl+fn45Jmq0b9+e2bNn57tIuXhy6R2qkta86D/GKx+yq8jvKYSA/v3789133/HBBx/QqVMnEhMT2bJlCwaDgUmTJuVof/Ra0QVbpUodtF3fxvbMOuyOLvnrePkqaJ95DypkvUlWpSX++WsCtoe/RalQHX3dTqiSH6KJPI865iaZPaZCfm+q1Rp0bQZgE7gR+13/BsDgWAN906xd2Wwu7Ubv0hKlav2/FaiAGVvMi7Lj9O1YDAYFtVr+3K2d+bMfgKZNm7JhwwYePHhASEgIiYmJODg40LRpU+PyMEIIIUq/KVOmUL16dbZs2cKBAwewt7fnqaeeYvHixTRr1sykrU5v4MSNgjfKMFtGEjaXdkF6EvqarVAcnVHHh6GOvolNkA9ar/FgVx70mQCoY26hr9Mha5KYKmvqiOHmMWyDf8UmeDu6zq/n+zhDnafQOrmifngdxb4CBtc2YGOH+v5lVLF30PV8HxQDmuDtaEL9AQVDHQ90bQeBplD/jIpSKj5Vy+V7ibR2c7J0KaIAj/R/pIuLCy4uLkVdCwAzZ84kNDQ03y18Z8yYwb1794w7AAkhhChaarWa0aNHM3r06ALbBoXFk5ShK7Jn255Zjzr2NlrPMRhqZ22QoQc0N45gc+E3bM5tQddxLJDVe6ao1OjaDjCGWgBDw64oN4+ivn8FdJm5rn37d0olV/SVXP92QEFzZQ+GWm1RKtdGfes4mtsn0bX1BttyWeOA7Ssax/qKsu/4jWgJtqVAoYJtdHQ0hw4dIiYmBr1eb7Lsi1arJT4+Hj8/Pw4cOPBIxfj4+ODj40PHjh3zbLN582a2bduGl1fOxbOFEEKUvKIchkBaPOqo6xiqNTSG2mz6xt1R3zmFOiIYtOlg++cmGQ5VwM50OTdUagyVXNGkxKBKi0OpWLjOGHVkMKr4CHQerwKguXMKg2tLDA27ZtUSF47m9gkJtk+QEzdjmNC9kaXLEAUwO9iGhIQwatQoUlJSUBTFuKVjdrhVqVQoivJIayjq9XpWrFjB0qVL822zbNkyli9fXuj7CyGEKD5FGWxVqVkbPOQVRJWKNVEnPUCVnoBSoRqKSp1jwwajP7cXVjSF3DVKMWT11tZ5CqVS1naqqpRoDDX+GoKhVHRGlZkCmWlZwyJEmXfmTixavQFbjdkrpQoLMDvYLlmyhOTkZEaMGEHHjh2ZN28erVu35sUXX+TmzZusW7cOOzs7du/eXagCMjIyGDp0KFevXsXb25uTJ0/maJOWlsawYcO4du0agwYN4tixY4V6hhBCiOKRrtVzKTKxyO6nlMtaC12VnHtYVqVEoaBCsXcEjW3WMIG4u6iSo1Ac/7Y8mUGPOjESxa4ClC/cx8fqsMCsrXM7v2FyPxTDX3XotX/+RiYTPSlSM/WcC4vHs755K/wIyzD7bcfZs2fx9PTk008/5cUXX6Rz585ERUXRt29f3n33XdauXUtiYiKrVq0qVAEZGRkkJyezcOFC5s6dm+tuPmlpaaSmprJ48WLmzJmDWi3vloQQwhpcvZ+EzmDWcujmqVANQ+XaqKJvoo68aHJKfecU6oRIFJdmxqEH+vpZw9I0wb+a9NxqbhxGlRaPvk4Hk7G3BTLosQnZh6FeR3CsbjysVKyBOvavjSFUsaEo9hX/Gg4hnginbhbhJElRLMzusU1KSqJt27bG102bNmX37t3GYQnNmzenR48eHD16lA8++MDsAhwdHdm3b1++21NWrlyZffv2FWpvdiGEEMXv8r2i663NpntqOLbHlmNz+icMrn+uipB4D/WDEJRyldC2G2xsa6jXEf39S2juXUR1cD4GlxZZa9o+uILB0Rl9i+cK9Wx16GlIS0DXrI/JcX29TlmrLJz6EWzs0USck53InkBX7hf9z7soWmYH24oVK5KZmWl8XadOHTIyMrh9+7ZxC8f69evnOpQgP2q1usAeWOmhFUII63S5CIchZFOc3Mjs8T42IftQP7wK9y+DfUX09Tuja/EClKv0V2OVCl3HsSi3/FDfOYXmlh/YOaBv0AVdixfBthDjX/VabEL+QF+/c9aEtL8xNHwaXUYymlvHAQO6Rt3QN+lZNF+wKDWu3k+ydAmiAGYH21atWnH06FE+/PBD7O3tady4MYqicPbsWWOwvXv3rvSqCiHEE+RSZELx3NixOroOr5rXVq1B37g7+sbdH++ZGlsyX/w093MqFfqWL8oqCE+40JhUMnUG7Gykw81amf0nM3LkSEJDQxk4cCCBgYHUr1+fli1bMn/+fDZt2sSSJUvYv38/rVq1KvhmQgghSj2DQZEeLPFE0RkUbkYlW7oMkQ+zg23Pnj2ZOXMmDx8+JCoqa7bqjBkzyMjIYPbs2SxbtgwHB4dCja8VQghRet2JSSElM4+ltoQoo649kDdz1qxQGzSMGjWKYcOGYfhzbUBPT0927tzJ/v37sbe3p0ePHsW2I5kQQgjrUhwTx4SwdhJsrVuht9S1szNd6LpWrVqMGTOmyAoSQghROtyOSrF0CUKUuKv3ZSiCNSt0sN2+fTs7duwgJCSEpKQkqlSpQrt27Rg8eDDduz/mwH0hhBClRmRCmqVLEKLEyRhb62Z2sM3MzGTChAmcOnUKRVFwcnKibt26JCYmsm/fPv744w+8vb2ZM2dOcdYrhBDCSkTEp1u6BCFK3MNE+bm3ZmYH2+XLl3Py5En69OnDRx99RJ06dYznIiIi+Oqrr9i+fTutWrVi1KhRj1zQwYMHC2xz9OjRR76/EEKIonEvXnpsxZMnJVNPulZPOVtZ3tQamb0qwo4dO2jZsiWLFi0yCbUAbm5uLFy4kCZNmvDzzz8XeZFCCCGszwPpuRJPqJiUzIIbCYswO9hGR0fTuXPnPHcBs7GxwcvLi/Dw8CIrTgghhHXK1BlITNdZugwhLCImOcPSJYg8mB1smzRpwsWLF/Ntc+PGDerXr/+4NQkhhLByMSnyD7t4csUkS4+ttTI72E6bNo2goCC++OILkpJyruH2/fff4+/vz8cff1ykBQohhLA+8g+7eJLJUATrZfbksa1bt1K/fn02bNjAr7/+SrNmzXBxcSE9PZ1Lly4RFRVFhQoVcqyKoFKp2LZtW5EXLoQQwnKSM2QYgnhymTMUYfTo0QQEBHD06FGcnZ1zbZOQkEDXrl3p2bMnS5YsMfv5zzzzDA0bNmTNmjXGY1FRUTg6OlK+fHmz71MWmR1sf//9d+PvU1JSOHv2bI42ycnJXLlyxeSYSqV6jPKEEEJYI71BsXQJQlhMbGrBPbb9+/fH39+fffv2MXLkyFzb7Nu3D61WS//+/R+rnkOHDjFt2jR8fX0l2JrbMCQkpDjrEEIIUYpo9QZLlyCExWRoC/75f+GFF5g9ezZ79+7NM9ju2rULJyenx97g6ty5c7kOE30SmT3GVgghhMgmPbbiSWZQCv75r1ixIj179iQgIICYmJgc52NiYjh9+jQvvPACdnZ2xVHmE6nQW+qGhoYSExODwWBA+fMPVlEUdDod8fHxHDlyhLlz5xZ5oUIIIayHVi/BVjwazYXfsblxmMynJ6I4Ny74gvREbM5uRh11HaV8ZfRNemJo4JWjmc2ZdaiSo9D2/FcxVG1KZ+Ybu5dffpm9e/fyxx9/8Morr5ic27NnD3q9PscwBH9/f5YtW0ZwcDAA7dq1Y/LkyXTo0CHXZ3z44Yfs2LEDgO7du+Pl5WUce7tr1y42bNhASEgIGRkZuLi40LdvX959912TMB0UFMSCBQu4ePEiFStWZNiwYej1elauXMnly5eN7SIjI1mwYAF+fn6kpKTQuHFjxo8fz0svvWTW96MkmB1sY2NjmTBhQoFLfgESbIUQooyTHlvLquOQTrM6McRrSteQkNSI+9y8eQSAZvUf4ljPvsBr7mz5jeSYu1Rxb0VmbBzJ53yo1zSTSk0aGtukP4zmengQ9Yd7U7FxWLHVn61KlXJmtevevTtOTk7s2bMnR7DdtWsXbm5ueHh4GI/t27ePKVOmUK9ePSZOnIiiKGzevJmxY8eybNkyevTokeMZr776KqmpqRw4cICZM2fSuHHWm4VNmzbx2Wef0bt3b6ZNm0ZmZiZ79+5l1apVODg48M477wAQHBzM2LFjcXFxYfLkyaSkpLBmzRo0GtOd1e7fv8+wYcNQq9WMGTOGihUrsn//fv71r38RFRXFa6+9VojvYPExO9guWrSICxcu0LRpUzw8PNixYweNGjWiRYsW3Lx5kzNnzlC9enVWr15dnPUKIYSwAjpD6QpUZU1kmh3btLtJSrvL6RoN8bdTcyYlnITMREuXlidFr6DbqYM/P+0NU7ajVvIfEamkKGiva9H01JDsdSXrk+JVcPfs79g2tjW20x7WoqqtIrLRLiiB91yt7QYDzxbYzs7Ojueff56tW7cSGxtL1apVAXjw4AGBgYFMmDDBOMleq9Uye/ZsXF1d2bp1KxUqVABg2LBh9OvXj88//5ynn34aGxvT6PbUU0/RpEkTDhw4QJ8+fahZsyYAP/30Ex06dGDZsmXGtiNGjKBnz57s27fPGGznzZtH+fLl2bJlC1WqVAGgZ8+eDB061GRTrvnz56PT6fD19aV69eoAjBo1ivfff58FCxbQv39/49dnSWaPsT127BgNGjRg+/btfPrpp3Tp0gUnJyc+++wz1q1bx1dffUV0dDTnzp0rznqFEEJYAZ0MRbAovaLmpYixuOk0jLi4j4Vn93Ds6iV80hz50LElz1RugaNtBUuXaUJ/XI8Sq6Cqb/5qSUpC1s+ZqkbWNSqVCnUNNcT/1cYQaUC5rqDprsntFsVCozL/WS+//DJ6vZ4DBw4Yj+3evRtFUUyGIVy4cIGoqChGjx5tDLUAlStX5tVXXyUyMtJkWEBBfH19WbFihcmx2NhYnJycSE1NNb4OCAjA29vbGGoB2rRpg5fXX8M9suvv2LEjarWa2NhYYmNjiYuL47nnniMjI4NTp06ZXVtxMrvH9uHDh7zyyivG9N6iRQuT9dO8vb3ZunUr27dvz9HdLoQQomyxtZG5x5b2MMOW0anv83P5T1CnxaBCofn9yzS/f5mxgF6l4ZJbK/yruXFareVcUijpesvsGGd4aMBwwoC6ixoyQLlj3hsjVbk/Q/DfVtdSMhX420gA/WE9qvoq1PVK7mdSrTL/WZ6entSqVYs9e/YwdOhQAHbu3EmrVq1o1KiRsV14eDgADRo0yHGP7HaRkZG0bdvWrOfa2dnh7+/Prl27uHXrFnfv3jVOYqtbty4AYWFhKIpCvXr1clzfsGFDTp8+DUB0dDSpqans3buXvXv35vq8yMhIs+oqbmYH23LlymFv/9dYmLp165KYmMiDBw9wcXEBoG3btmzfvr3oqxRCCGFVnMrbFtxIFDv/+Ep8Xuv/+CzjY1QGrck5jaKnbXgwbcODGQ9oNXacd2uDfxUX/FUZBCfdQfuPa4qDYlDQ++pRVVWh6apBf1Bv/sVOQAXQB+pR1VOhxCoodxTUnlnB0hBqQLmjYDO20HPhH0uFQvSGq1QqXnrpJX766Sfi4+NJTk4mODiYGTNmmLRT8llpwfDn0B9bW/P/v5s7dy4//vgjrVq1on379nh7e+Pu7s6nn35qDLhabdaff26rMvz9WPbz+/btawzn/5Qdli3N7J+ERo0acf78eePrBg0aoCgKly9fNgbb5ORk0tLSir5KIYQQVkWCrfX4X6Qb7RpNZVDE1/m2s9Vn0uFuIB3uwkQgzc6BILfW+Fd25owhhUtJoeiVQoROMxlOG1AeKNiMtkGlKdymTSqNCk1vDfoderTf/hnCq4HGK2sogP6IHlVjFWq3v3pQFUUp9s2hKtpVLFT7/v378/3333Po0CFiY2PRaDQ5VhJwc3MD4NatWzkmid2+fRsAV1dXs54XFhbGjz/+yKBBg3LsCBsVFWX89L1OnToA3LlzJ8c9QkNDjb+vXr069vb26PV6unTpYtIuIiKCK1euWM3GEGb3pfft25eAgACmT59OeHg4zZo1o0aNGixevJibN29y+vRpdu7cSf369YuxXCGEENZAgq11+ddNdy7XGVGoa8pnptLltj9Tg3ay4fxh/CJjWKquzejKbWhesR4qHj8cKjEK+mN61E+pUdd+tKECmlYabF63QdNbg6a/BtvXbVGVV2G4YUAJV9A8o8ladnSfjsyvM9F+rUW3S4eiK75x4IUNtk2bNqVZs2YcPnyYQ4cO4eXllWOb3bZt21K9enXWr19PSkqK8XhSUhKbNm2iZs2atGjRItf7Z69gkN2zGhcXB2BcISHbwYMHCQ8PR6/PegPj4uJC27Zt8fX1JTHxr4mHoaGh+Pn5GV/b2trSrVs3Dh48yLVr10zu+eWXXzJp0iTi4+OxBmb32I4cOZLAwEB+++03vLy88Pb2ZuLEiXz22Wf069cPyHqX9OabbxZbsUIIIayDBFvrM+BmP/zr3qXK/eOPdL1jeiLdb54gew+seIeqnKnditOOlTijjeNWcnih7qcof66C4ACano83sUtdQw01TO+tP6pH1VyFuqYafaAew1kDmj4asAf9Xj1UAJvuxTNEoZJdpUJf079/f5YvX056ejr//e9/c5y3s7Pjk08+4YMPPmDw4MEMGTIEg8GAj48PsbGxLFmyJM+e6OzVCL7//nu6detG165dqVmzJitWrCAtLQ0XFxfOnz/Pr7/+ir29vUlwnj59Oq+99hpDhw5l+PDhpKens27dOlQqlcnzPvzwQ/z9/Xn11VcZOXIkrq6uHDx4kCNHjjBy5EiT8cKWZPafuI2NDYsXL+b8+fPGpSReeeUVnJyc2LlzJ/b29vTv3/+xt4UTQghh/SqVK9kxjaJgWoOKfvfHc6jyPezibz32/SqnxtLn2jH6/Pk6uqILp91acMahAqczoghPvZ/v9YbArB5Vm2E2qOyKdmiAEqKgPFCwfTnrDZbhnAFVExUaj6wArdxXMJw1QDFFksL22AL069ePb775Bnt7e/r06ZNrm759++Lk5MTy5ctZunQpNjY2tGvXjq+++spkvdvc7v3HH3/g4+NDQEAAvXr1YtWqVYIyCFYAACAASURBVMydO9c40b9u3brMmjWLtLQ0vvrqK0JCQmjevDkdOnTg+++/Z8GCBSxcuJAqVaowbtw4rly5wuHDh43PaNCgAT4+PixatIiff/6Z9PR06tSpw8cff8yoUaMK/f0oLiolv9HKpVhgYGC+PwSi5EyZMoXAWw9Ia963yO9dPmQXHg1dWLRoUZHfWwiRv9af7iU5Q2fpMsQ/PFM1nv/pZ6DKSCjW50RWqctp1yacKVeO02n3eJgebXJeu16LcrfgiGE70RZV5UIsAaYoaFdpUbuqsemf9QYrc34mag81Nj2zXuvP6tHv0WP7L9u/VlYoQhv7bqSNc5siv68lREdHG9el/bvx48dz+/Ztk2XKSgOz3nLfunWLKlWqmKxxlm3x4sV07dpVQqQQQjxhnMrbSrC1QkdjKzOvznQ+ip6Fqhgmg2WrFXeXgXF3Gfjn6zvVG+Lv0gh/exvOpEYQ1TYGpW7OYKvcUlAiFdRt1FmrHpi3iZeR4aIB4kAz7G/DGwx//pct+8eymOaQOTs4F9yolBg4cCAtW7Zk5cqVxmMPHz4kICCAnj17WrCyR5NvsM3MzGT69Ons3buX//73v3h7e5ucj4qKYvny5axYsYJevXoxd+5cHB0di7VgIYQQ1qFGJXsi4mUlHGu0Iqw+bRtP5sXwkvs0q370LepH32IYoKD6//buO6zq8v/j+POcAxy2yh7iHiigIm5zoTlyYG5THGXuVVqOtL6lLb+ZiqMyTb+aaWrunbPUcpBbcYSDpbJE9jrn9wc/TyGgBwQO4PtxXV55PuP+vA+Vvs597sHNGrU47VCF08YKzibcIz49AYCM1IysYFtPme+1Z7WZ/z8ZrZ4SRYV/UqvCRoE27J8QrQ3TggUo1IWfbI0URjiYOzz/wlLCz8+P77//nqlTp9KkSRMePXrExo0bARg3bpyBq8u/PINtZmYmI0aM4PTp07i4uOTaW2tmZsbUqVPZtGkThw4dYvTo0boBx0IIIcq2anaWnLtXMmZCi5zG3GrKwZq9qRHyS7E/W4GWWg+uU+vBdQYDGoWSa851OW3nxo/qEEKJem4budFc0EA8qF7JPhlNWV9J5q+ZpG9OR2GiQHNNU2Q7kTmYO+Rrg4aS7p133sHe3p7Nmzdz8OBB1Gq1bivep1dVKA3yDLYbNmzg9OnT9OjRg88++yzH3sQAlpaWjBgxgsGDBzNlyhQOHz7M5s2b81y8VwghRNlRzb5kbdkqcuoe3JNTFUOwfnDaoHUotRo8wi/jEX6Z8IdWrMGCGZnWJFpX4bQijQsJd0l9zq5o2gwtmScyUXorUVhn70BTNlKiTcqaMKbVZG3goGxeNOGzolXFImnXUFQqFUOHDmXo0KGGLqVQ5Blsd+7ciYuLC59++mmuofbfTE1N+fLLL+nYsSPbtm2TYCuEEC+B6hJsS7zkTBU9I0dzwDoCo8chhi4HgA984vnAJx64DxeuMgpINTLlfEVPTpd35LQ2icsJd8nQZB+/rTBSYDIh5w5ZkLW7l1EboyJbBeHf3Kzciv4hosDyTKw3b96ka9euem/fZmlpScuWLTly5EihFSeEEKLkqmYvcypKg+AkU8aaT+M7k+ko0hIMXU6u1BkpNL1zlqb//zpJbUlgRS/OWNtwKjOeoIR7aLSaZ7ZRXMpaj21Zk2c/fWZmJlZW+VunzdHRkYwMmSErhBAvg8q25ihlSkWpcCDKhiUVpqEtJWNDzVMTaPX3H7x7bjc/X/yN3yNiWWRUmUHlvahh6VYou6IVVK0KtQp8r7+/P3Xq1CEyMjLPa+Li4vD09GTChAm6e3x9fQv0rILcB5CQkEBMTIzu9eLFi6lduzahofnbpMMQ8vwv3NnZmXv37uWrsXv37uHo6PjCRQkhhCj51EYqKlYwN3QZQk/z71bnWMXRhi6jQKyT4/C9+TvTz+1m66UTHIlM4r8mVelbwYvKFs7FWksdm9y3tdVHjx490Gg0HDhwIM9rDhw4QHp6Oj169ABg9OjRzJw5s8DPzK/Lly/TpUsXbt68qTv26quvMm/ePN0OZyVZnsG2cePG/Pbbb8/8VPFvkZGRHD16lNq1axdacUIIIUq2qnYyzrY0GXbzFe5V7G7oMl6YbUIkna8f48O/drPr8il+jc3kM9Ma+FXwxNms6NaYtTW1faE1bDt37oyJiQn79+/P85o9e/ZQrlw53U6uLVu2pEOHDgV+Zn7duHGDhw8fZjvm7u6On58f5uYl/4NsnsF2wIABpKWlMXHiRBISnj0mJyEhgQkTJpCens6AAQNeqKBZs2bh7++f43hISAjjx4+nSZMmNGnShPfffz9bN7kQQojiV8fZ2tAliHzqeqcvifYNDF1GoXJ6FEb3a4eZ+9ceDlwNZM9jBf8xr0WXCp7YqQuvl9Hdxv2F7reysqJdu3acPXuW6OjoHOejo6M5deqULgCL/Msz2NatW5fRo0dz7tw5OnfuzDfffMPFixeJj49Ho9EQGxvLhQsXWLp0KR07duT8+fP06tWLFi1aFLiYTZs2sWnTphzHY2NjGTp0KOfPn2fEiBEMHz6cw4cPM3z4cNLS0gr8PCGEEC+mYaXyhi5B5FN8hhG9Y8eTaeli6FKKjFv0XXpfOci8v/ZwJOg82xPVzLRwp0OFupQzKfiHsRcNtgDdu3cnMzOTX3/9Nce5ffv2kZmZqRuGALmPlb1+/Tpjx46lUaNG1KtXj379+nHw4MHnPnvfvn0MHjwYHx8fPD098fX1Zd68ebostXjxYmbMmAHAkCFDdM/NbYxtbGws//nPf2jVqhWenp506tSJ5cuXk5n5z253ixcvxsvLizt37jBq1Ci8vb1p3Lgx06ZNIzY2Nh8/Nf09cx2viRMnYmxszLJlywgICCAgICDHNVqtFmNjY95++23eeeedAhWRmZnJN998w5IlS3I9v3r1au7fv8/OnTupXr06APXr12f48OFs27aNfv36Fei5QgghXkzDyjk37xElX1CCOe9avM9C45ko0pMMXU6Rq/bwJtUe3mQgWbuiXXeuwym7Spw20hKYcJfEDP1+BnVsCz6+9ok2bdpQrlw59u3bl+Nb7j179uDq6oqPj0+e91+8eJEhQ4ZgaWnJ8OHDsbCwYPv27YwbN44PP/yQQYMG5Xrfpk2bmDVrFr6+vkydOpX09HR+/fVXVq5cibm5OePHj+fVV18lMjKSn3/+mdGjR+Pl5ZVrW3FxcQwYMICwsDAGDBhA1apVOXHiBPPnz+fq1assXLhQd61Go2HIkCE0atSIadOmcenSJTZv3kxKSgqLFhX+znjPDLYKhYKxY8fy2muvsXXrVn7//XcePHjA48ePKV++PG5ubrRq1Ypu3brh5lawdd1SU1Pp27cv169fp2fPnvzxxx85rtm9ezdNmjTRhVqAFi1aULVqVXbv3i3BVgghDMTOUk1lW3PuRpf9cFTWbH/gQL2qU3kr4hNDl1KsFGhxj7iKe8RVhgIZSiOuunhw2taFU8p0zsffJSWPzSIaOjR84eebmJjQqVMnfvnlF2JiYnQTsh48eEBgYCCjRo165g6uc+fORaFQsHnzZpycnAAYOHAgAwcOZN68eXTp0iXXSV4//PAD3t7eLFu2TNf+G2+8Qfv27dm/fz/jx4/H3d2dBg0a8PPPP9OiRQuaNm2aox2A77//njt37rB06VLd+N9Bgwbx8ccf89NPP/H666/rxghnZGTw2muvMX36dCBrqOuDBw84ePAgycnJmJmZFfAnmTu91v2oUqUK77zzDlu2bOHEiRNcunSJ33//nZ9++okxY8YUONRCVrBNSEhgwYIFfPnllzk2g4iLiyMkJAQPD48c93p4eHD58uUCP1sIIcSLa1yl5M+UFrmbc9udU24j8nXPgyQlPpsdWB2U90SibbdN6bnXlgYbHWi9zZ7P/7IiMV2/JboS0xVMOVkO700OtNtuzzdXLNBoc143/7wlrbfZk5qZ81x+GGkyqBd6gREX9vL9uYOcvH2XVRp7xlh70rBcDYyVWev5V7au/EITx/7tyXCEQ4cO6Y7t3bsXrVabbRjC06Kiorhw4QJ+fn66UAugVqt56623SElJ4eTJk7neu2PHDpYvX54tNEdHR2NtbU1SUv4+mB4+fJjq1avnmNQ2duxYgGzvC6BLly7ZXtepU4eMjAwePSr8LbmfvaVYMbC0tOTAgQN57m724MEDgFyXEbO3tychIYH4+Ph8r7krhBCicDSvZsvmwJK/vqXI3YBb7fij2j2cwvJeguqJxHQFE46XJyE9736x765Y8PVFK2qXT2dwrSRuxBmx+roFF6KNWeMbg4nq2c9YcNGSvfdM8auSTGKGkoUXrbA21jKo1j/hKypZyY83zXmvQTzq57SXX8aZaTS6G0ijuzAWSDYx55yrF0nO7QrtGY0bN8bFxYV9+/bpdmvdvXs3Hh4e2b6dflpYWBgAVatWzXHuyX3h4eG53mtsbMyZM2fYtWsXwcHB3Lt3TzeBzdXVNV/1h4aG0qpVqxzH7e3tsba21tX5xNM9yE8mxv17PG5hMfhKzUql8plb9iYmJgLk2lWtVqsB8v1JQwghROFpXt3W0CWIF6DVKuhybzDJtjm/Gf23sEQl/odsuBCd92z98EQlAZcs8bZL45dO0UxtkMDyNo8Y65HAuSgTNv797OWitFr4JdiMvtWT+bzZYwJeecQrTqlsuJU9A3x71YIKag19qyfr/0YLyCwtiRa3T9HBskqhtalQKOjatSt//vknjx49IjQ0lIsXLz6ztxay5jXlRaPJ2pktrx1j58+fz/Dhw7l27Rp16tRhwoQJbN++nUaNGuW7/ufV8XQNzxpaUdgMHmyf58m/qGdRKkv82xBCiDLLpbwZVWxL/vqWIm+x6UYMjJ+EJo+v2lcHmdN9jx1Bj4xo5pj7+FOAn2+Zk6FVMKpuIsb/+qt5tEcClsYaNv397PGUMalKkjKUuJdP1x2rUyGd0MR/umUjEpX8fMuc8Z7Zn1GkFEqoVng9tpC1WUNGRgZHjhxh//79qFQqunbt+sx7nvSsBgcH5zh3+/ZtgGxDFJ4ICwtj+fLl+Pn5sXXrVj766CMGDhyIu7s7UVFR+a7d1dU11xoiIyNJSEjA2bl4N834txKfCC0sshb/Tk3N+T/Sk2NPrhFCCGEY7dwdDF2CeEHnH1syUz0drUqd49yaGxa4WmTyY/sY/Kqk5NnGmcis3tzGDtmX4lSroIFtOkGPjIlPy7v3zspYg1KhJSnjn2sS0pVYGv/TQ7j0iiWuFpn4VSn63lodp3pgXrhjyWvVqkXt2rU5evQoR44coXnz5tjbP3sMr729PZ6enuzYsYP79+/rjqelpbFq1SpMTExo2bJljvvi4uIAqFGjRrbjx44d486dO2RkZOiOPeksfFbHYrt27QgODs6xxNjy5csBaNu27TPfR1Ey+Bjb53FxyVpnL7cd0B4+fIi1tXWp2AlDCCHKste8nFl14o6hyxAvaEOEM/WrvcvA8M+zHf+4cRwtHNNQKeFOfN7R4V6CCjvTzGxB9AlXy6zxlLfjVdSzzchxHsBEBXXKZ7Al2IzXKqWQmKHgQIhaF5TvxqvYGmzGvOZxqIqza65W5yJptkePHixbtoyUlBQ+++wzve6ZNWsWQ4cOpU+fPgwcOBALCwt27NjBlStXmDVrFtbWOdfprVGjBi4uLnz77bekpqbi5OTExYsX2bp1K2q1WjfsE/4ZD7t+/XqioqLo3j3nTnWjRo3iwIEDTJ48mYEDB1KlShX+/PNPDhw4QMeOHXUrIhhCie+xtba2pmLFily5ciXHuatXr+Lp6WmAqoQQQvxbo8oVcLTO2dMnSp8ZwV5ccMu+A2gr5zS9guSjVCVWuYRayOqNBZ458Qxgmnc84Ukq2u5woOsee1RKeLd+1g6oAZcsqWadwWuV/uk1zm3FhELn2atImu3WrRvJycmYmJjw6quv6nWPt7c369evx8PDgx9++IFFixahVqtZunRprju3QtZkreXLl+Pt7c2aNWv48ssvuXLlCjNnzmTq1KkkJCToVplq3rw5Xbp04dixY8yZMyfXb8zLly/Pzz//TM+ePdmzZw9ffPEFf//9N++//362NWwNQaF91ghgA/D19cXV1ZW1a9fqjn355ZesWbOGHTt26Gb9nTx5kuHDhzN37lzdjMJ/CwwMfOYCx6L4TJo0icDgByS7v1bobZsF7cGnmmORLPIshMif/+y4wuqTdwxdhigEKoWGU1VXYBd+NMe5LcFmzDhVjhnejxnmnn3ytvt6R2qVz2BHl5zbxS66aMmyK5Z82zqWdq55j9MFCElQ8VuECWoltK+YQgW1lhuPjPDbZ8viVx7RoWIq316xYOU1C5IzFfi6pjK3SRzWJkUQaRw8YGzuS2iJkifP7xPq1CnY7hoKhYKrV68WuKDcvP3222zfvp1hw4bx5ptvkpqayooVK/Dw8MDPz69QnyWEEKJgXvNylmBbRmRqlbwWNpzfbcJRx97Q+z5TlZZ0Te5jaNP+f8immdHzw6ebZSaDamYfQ7vokiUeFdLpUDGVY+EmLLhoxSSveGqVz+CTs9bMDbRmXvM4vWvVWxH11oqikWewrVWrVo7lGSIiIoiLi8PKygoPDw/KlStHUlIS165dIyoqChcXlwIH4mexsbHhxx9/5PPPPycgIABTU1M6dOjA+++/r1sLTQghhGE1qlwBBys1D+Of3RsnSoeHqcYMS3mHdWYfoEyO0eseaxMt8XlsxBD//0MQngxJyI9L0UYcDDVlRdusOjb9bY5HhXTGemaNDQ1PTOTzc1Z82OhxruN7X4hn78JtTxSpPIPt9u3bs70+e/Ysb775JiNGjGDixInZAqVGo2HFihUEBATw4YcfvlBBhw8fzvV4tWrV+P7771+obSGEEEVHqVTQxdOJ//1x19CliELyR2w55rpOY3bqLBSa9OdeX8UqgzORJqRkgOlTCSMsQYVSoaWyVf4X5V940Qof+zRaOf8ziaxGuX8moFWxykCjVRCaoMK9Qu4T0wrExRtscm6GIEouvSeP/fe//6VevXpMnTo1Ry+pUqlk5MiRNG3a1OCDhoUQQhhO13ouhi5BFLIfwtzY7jJJr2t97NPRaBWcjcyeE1Iz4Xy0MTWsM/Ldo3rmoTHH76t5p1687liGVkGm9p+e4bQ8hj+8MOmtLXX0DrZBQUF4eXk985oaNWroFggWQgjx8mlS1YaaDpaGLkMUssm3GhLk1v+513WvkoxKoWXJZUvS/tUx++0VSxLSlfSvkf+1ZxdctKKlUyqNHf7pMa5qlcGlaGMy/39Uw/koY4wUWipaFuIWrUoj8OxTeO2JYqH3Ora2trb89ddfeZ7PyMjgjz/+MOhuE6JkiomJQZUUjVnQnkJvW5UUTUxM7tsHCiEMY0iLKszedtnQZYhC5vd3d05VCoHgc3leU806kzfdE/n+miU999nRzjWFW3FGHA03paFdGv2qJ+V5b25+CzchMNKETR2zr7LQp3oyY34zZdiRClS1zuSXv83oVS25cMfX1ukB1pJpShu9e2y7devGhQsXmD17NjEx2QeR379/nylTpnDz5s1cl94SQgjx8ujd0BXrpwdYilIvVaOk2/23yTSze+Z1U+on8KHPYxRoWXPdgptxxgyrncjyNrGYqJ55aw4LL1nRzjWFerbZx/f6uqbyoc9jbscbseO2Ka9VTmGad3werRRQszGF254oFnqvY5uamsqIESM4c+YMSqUSZ2dnLCwsSEhIICIiAq1WS+fOnVmwYEGO1RQMQdaxLTlkHVshXj5zd11lxXEZmlYWtbWJZVXmDBSpjw1dStFxaQgjjxi6ClEAevfYqtVq1qxZw6effkqzZs1ISUkhODiY1NRUWrVqxYIFC1i4cGGJCLVCCCEMa0jzKijlr4My6WhMBeZbT0eryGf3a2nSdLTut9OnT6d27dqEhoY+85Yn1wnDytd3RQqFgt69e9O7t8wSFEIIkbdKtub4ujtw8NpDQ5ciisCSkCrUqzGOjqEBhi6l8Fk6gsfr+b6tf//+NG/evAgKEvmhd4/tExkZGRw7dozvvvuOefPmAXD9+nVCQkIKvTghhBCl17AWsv5nWTbyVjOCK+Y/AJZ4jd4Co/xv/uTt7S27oZYA+Qq2p06dokOHDowePZoFCxawatUqAPbu3Uvnzp1ZuXJlkRQphBCi9Hmlph1eruUMXYYoQt1v9ybeoZGhyyg8JpbQ+C1DVyFegN7B9tq1a4wcOZLk5GRGjRpFx44ddefq16+PnZ0dX331VZ47hwkhhHj5vNdJxhyWZYmZSnpGjSHDqqKhSykczcaCxbNXfcjL02Nsp0+fTufOnbl48SKDBw+mfv36tGjRgrlz55KSkpLt3vv37/P+++/TrFkzvLy86NmzJzt27Hiht/Ky0jvYBgQEoFar2bJlC5MnT6ZWrVq6c+3atWPTpk2UK1dO14srhBBCtK5lT4vqtoYuQxShv5PMmMD7aE0sDF3KizGzgRYTCrXJmJgY3nrrLapVq8YHH3xAw4YNWbt2LQEB/4xNfvDgAX379uXkyZP4+/szbdo0KlSowHvvvceKFSsKtZ6Xgd7BNjAwkM6dO+Pq6prreQcHB7p06cLNmzcLrTghhBCl37TO7oYuQRSxvZF2fFPhfbSU4qUwWr0LptaF2mRcXBwTJ07kk08+oV+/fixZsoTq1auzc+dO3TULFiwgLS2NLVu2MG7cOAYPHsyqVavo1q0bixYtIjo6+hlPEE/TO9impqZibm7+zGtUKhWpqakvXJQQQoiyo75beTp7OBm6DFHE5t2tyXG3UYYuo2CsXaHx20XSdJcuXbK9dnd314VVjUbDwYMHadSoEUZGRsTExOh+dezYkbS0NE6cOFEkdZVVei/3Vb16dU6cOIFGo0GpzJmH09PTOX78OFWryixYIYQQ2U3tVJtfrz0gU1OIW56KEsf/ZmuO1wihYuhuQ5eSP22mgbFpkTRtY2OT7bWJiQmZmZkAxMbGEh8fz8GDBzl48GCu90dERBRJXWWV3sG2b9++fPzxx0yfPp0ZM2ZkOxcdHc0nn3zC3bt3+eCDDwq9SCGEEKVbDQdLejd0ZePZZy9yL0q/Lnf6c8opFPOoC4YuRT+2NcB7cJE1n1tn4BNPAm6nTp0YMGBArte4ubkVSV1lld7BduDAgZw7d44dO3awc+dO1Go1AL6+vty/fx+NRkOHDh0YNGhQkRUrhBCi9Hr31drsvhhBYlqmoUsRRSg+w4i+cePZYTEbVeJ9Q5fzfF2+BKVhdlGzsbHBzMyMjIwMWrRoke1ceHg4V69exczMzCC1lVb5Wsd23rx5LFiwgBYtWmBmZoZKpSIhIQEfHx8+++wzlixZIlvqCiGEyJVTOVPe7SjLf70MrsRb8L7RNLRGJTyU1e0JNToY7PFGRka0bt2aY8eOERQUlO3cF198wbhx44iNjTVQdaVTvrbUhaxB0E8PhBZCCCH0MaxFFbadC+NSWJyhSxFF7JcHjnhWncrwiDmGLiV3amvo/IXely9YsAALi5xLmnXp0uWFttKdOnUqp06dYtCgQQwaNAgXFxeOHj3KkSNH6N+/PzVr1ixw2y+jfAdbIYQQoqBUSgWfve5Fz2UnZCLZS+Dj23XwrPkmjUN+MHQpObX/EKyd9b58165duR6vVq3aCwXbSpUqsXHjRgICAti4cSNJSUm4ubkxY8YM/P39C9zuy0qh1Wpz/ZPl9dcLtv+zQqFgy5YtL1RUYQgMDMTHx8fQZQhg0qRJBAY/INn9tUJv2yxoDz7VHFm0aFGhty2EKDpf7A3i22N/G7oMUQwUCi1/VF2NU/ivhi7lH5VbwrDdIMMny5w8e2yvXbtWoAZljK0QQojneefVmhy89oBbDxMMXYooYlqtgq6hgzlhH4Zp9FVDlwNGZtBjsYTaMirPYPv0IGYhhBCisKiNVHzVtz69vzkpQxJeAtFpxryRMJnN5jNRJkUZtpgOH4FtdcPWIIpMvlZFEEIIIQpLA7fyTPSViTEvi7/iLJmtno5WZWK4Ity7QbMxhnu+KHJ59tgeOnSowI22b9++wPcKIYR4eUxsX4NzIbEcvR5p6FJEMVgX4UK9au/SP1z/1QgKTfnK4Le0+J8rilWewXbcuHH5Hi+r1WpRKBQFHp8rhBDi5aJQKFjYvwFdA44T9ijZ0OWIYjAtuB51aw3G696PxfdQlQn0XQVm5YvvmcIgCjXYCiGEEPlV3tyEbwY3pM+3f5CWoTF0OaIY9LrVhT8rh2Abcax4HvjqHHCVlZJeBnkG2wkTJhRnHUIIIV5i9SqW58NudZm17bKhSxHFIF2joFv4cI7ZhGMSe7NoH1anOzQbXSRNp6WlsW7dOnbv3k1wcDAKhYJKlSrRtWtX+vfvj5WVVZE891l8fX1xdXVl7dq1Bn2uv78/YWFhHD58uFjrKPTJY3/++WdhNymEEOIlMLhZZXo1dDV0GaKYRKSaMDzlXTSmFYruIXa1i2xc7YMHD+jduzdffvklTk5OTJkyhXfeeYdq1aqxYMECevXqRXBwcJE8uzQYPXo0M2fOLPbn5mvnsXXr1rFr1y5iYmLIzMzkyd4OWq2WjIwM4uPjSUlJKbIxtmfPnmXBggVcvnwZa2trOnTowIQJE7CxsSmS5wkhhChen73uxY0H8VwOe2zoUkQxOBFbjs8qTueDtA9QaDIKt3FLJxi8GUzLFW67ZPXUjhkzhtDQUFatWpVt57HBgwczZMgQRo4cydtvv82uXbswMzMr9BpKupYtWxrkuXr32G7YsIE5c+Zw7tw5Hjx4QFhYGFFRUURFRREeHs7Dhw8xMTFhyJAhRVLoqVOnGDZsGLdv32bUqFEMHjyY/fv3M2jQIOLiZM9xIYQoC0yNVawe3oQqtuaGLkUUkxWhbuxymVS4jZpYwqCNUL5S4bb7/7Zt28aVK1eY/Dq3MwAAGZBJREFUNm1artvp1q9fn5kzZxIaGsrKlSuLpAaRO72D7caNGzEzM2PTpk2cP3+eBg0a0KNHDy5cuMDBgwdp06YNiYmJdO/evUgKnTt3LiqVig0bNjB27FhGjRrF2rVrCQkJ4dtvvy2SZwohhCh+dpZq1r7VFAcrtaFLEcVkwi0frrv1K5zGlEbQ73/gXL9w2svFtm3bMDc35/XXX8/zmh49emBvb8/OnTsB+Oijj6hbty4xMTHZrktOTqZBgwbMmDFDd+zcuXMMHz4cb29vvL29efPNN7l48WK2+3x9fZk1axYzZ87Ey8uL1q1b52j7ibNnzzJs2DBde0OGDOHMmTPZrtFqtaxfv54+ffrg7e2Nl5cXnTt3Zvny5bpv6J/Ys2cPfn5+1KtXj27duuU6DNXf3x9fX99sr9966y1+++03evXqhZeXF23btmXx4sVoNNknjV64cIEhQ4bg7e1Nq1atWLx4MUuWLKF27dp5/bh19A62t2/fplOnTnh5eQHQoEED3RupWLEiAQEB2NnZsXz5cn2b1FtoaCg3btzAz8+PSpX++fRVvXp12rVrx9atWwv9mUIIIQzHzcacNW81wdo0XyPmRCnW4+8exDk2e/GGui+CGh1evJ08ZGZmcunSJerWrYtanfeHL4VCQdOmTblz5w6RkZF0796dzMxM9u/fn+26I0eOkJycTI8ePQA4ceIE/v7+xMfHM2nSJMaMGUN4eDiDBg3i7Nmz2e7dvXs3QUFBfPDBB/Tr1y/XoZmHDh3C39+fiIgIxowZw5gxY4iIiGDYsGHZ9ixYuHAh//nPf6hRowYzZszg3XffRa1WM3/+fLZt26a7bsuWLbzzzjuYmZnx3nvv0axZM0aPHk1U1PN3lLtx4waTJ0+madOmzJo1Czc3N5YsWcL69et111y+fJkhQ4YQFhbGuHHj6NevH2vWrNF7Mpzef2JkZmbi6Oioe121alXCwsJISkrC3NwctVpNu3btOH78uL5N6u3BgwcA1KpVK8e5SpUqceDAASIiInB2di70ZwshhDAMdydrVg5rjP/KU6SkyzJgZV2qRkn3hyM5VO4+xnF3CtZI2xngPbhQ63paXFwcaWlp2NvbP/daBwcHAB4+fIiPjw+urq7s27ePgQMH6q7Zs2cP9vb2NG3aFI1Gw0cffYSXlxc//vgjKpUKyBq327NnT+bOnZstZKakpLBw4cJsnX7/lpGRwSeffIKjoyO//PILlpaWAAwYMIBu3brx8ccf07p1awB+/PFHunbtyhdf/LN5Rt++fWnevDn79+/n9ddfJzMzk6+++govLy/Wrl2LsbExAHXr1s3W45yXhw8f8s033+h6cnv27EmrVq3YuXMngwYNAuC///0vJiYmbNq0SRfU27dvT+/evZ/bPuQj2Do6OhIREaF7XalSJbRaLTdu3KBBgwYAmJubExlZ+LvHmJtnjbVKTEzMce7Ro0cAREZGSrAtwVRJMZgF7dHrWkV61iLtWuPnD7ZXJcUAjs+9TghROjWuYsPSNxoyam0gGRrt828Qpdq9ZFNGmb/HSvV0FKnx+bu55WRoO71oCvuXJ1/LPwmdz2JkZKS7R6FQ0K1bN1asWEF0dDS2trYkJCTw22+/8cYbb6BUKrl8+TIhISEMHDgwx/yhdu3asXr1au7fv4+TkxOQlcXyCrUAV69e5f79+0ydOlUXagGsra0ZPHgw8+fP5/Lly3h7e3Py5EnS09Oz3R8bG4ulpSVJSUkAXLlyhejoaMaPH68LtQB+fn7ZAnFezMzMaNu2re61Wq2matWqut7euLg4Tp8+zaBBg7L1PtetW5eWLVvy+++/P/cZegfbFi1asGPHDv7880+aNWtGnTp1UKlU7NixgwYNGpCens6JEyewtbXVt0m9Va9eHUtLS/bv38/IkSN1G0ekpqbqeojT0tIK/bmicNSoUSNf19+6dSvrvmr6BFbHfLcvhChd2tdx5Ku+9Zmy6QKZEm7LvMPRFfi60nTejZyNQqtnT32b6dDu+T2GhcHGxgZjY2Oio6Ofe+3Dhw+Bf3puu3fvznfffceBAwcYOHAgBw8eJDU1VTc/6d69ewDMmzePefPm5dpmRESELtg+L3OFhoYCWd+yP61atWoAhIeH4+3tjbGxMUePHuXQoUPcvn2bu3fv6sL1kzAfFhYGkCNMq1QqKleu/MxaAMqXL49SmX0UrImJiW6MbUhICBqNJte2qlWrVrjBdtSoUezfv5/hw4fz6aef0qtXL7p168b69eu5dOkSjx8/5t69ewwdOlTfJvVmYmLC8OHDWbx4MVOnTmXkyJFoNBoWLlxIcnJW754+n5yEYeR3s49Jk7Jmxy5atKgoyhFClEI9vV0xN1ExYf05UmV3sjJv8b2q1K8xlg6hS55/cfsPodWUoi/q/ykUCry9vbl06RKpqal5jrPVarUEBgbi5uamC7Y1a9akdu3a7N27l4EDB7J3716qVq2Kh4cHgC7gTZo0Sfdt+NOeBFJ4fvZ5etJXbueMjY3RarW899577Nq1Cx8fH7y9venfvz+NGzfOluv+3bH4tKcngOXm6VD7tIyMrCXfTExMcpx71njmbM/Q6yrAxcWFzZs3069fP6pUqQLAzJkzadWqFZcuXSIkJISOHTsyfvx4fZvMl7FjxzJ06FD27NlDjx496NmzJwqFghEjRgBQrlzhr1MnhBCi5Ojo4cTq4U2wUsuEspfBiFstuF2x57Mv6vR5sYbaJ/z8/EhISODnn3/O85pDhw4REhKSY7Wo7t27c/bsWUJCQjhx4kS2866uWRuUmJub06JFi2y/LC0tyczMxNTUVO86n7SX20YRt2/fBsDJyYmzZ8+ya9cuxo4dy08//cTMmTPp06cPrq6uuiGfAG5ubgDcuXMnW1tarVbXm/si8mof4O7du3q1ka+dxypWrMjHH39Mw4YNgawxGsuXL+fMmTP89ddfLFq0KNsYjsKkVCqZOXMmv//+O+vWrePw4cN8++23JCYmolKpdP/yhBBClF3Nq9uyfmQz7Cxz9uiIsqfb7T4kOPjkckYBXedD87HFXhNAr1698Pb2Zv78+blOmr927RqzZ8+mYsWKug64J7p164ZGo+HTTz8lPT09W7D19PTE3t6etWvXZptXlJCQwOTJk5kxY0a+vqH28PDA3t6e9evXk5CQkK29n376CXt7ezw9PXXh9emhfRs3biQ5OVnXk1q3bl1cXV1Zv3697htzyFqdITY2Vu+68mJra4u3tze7du3KNsY4JCSE3377Ta829P7YO2TIEHr16kXPnjk/PT3ZC3nt2rWsW7eOffv26dus3nbt2qWbNWhnZ6c7fubMGTw8PPTuohZCCFG6ebqWY9PoFgxecYqwR8nPv0GUWomZSl6PHsteqw8xiv//HkGVGvyWQL1CWve2AJRKJUuWLGHMmDGMGDGCjh070rRpU1QqFRcuXGDnzp04OzuzbNkyLCwsst3r7OxM48aNOXLkCA0aNMg2XtXY2JjZs2czefJkevXqRZ8+fVCr1WzatInw8HC++uor3YQ0ffy7vd69e9OnTx8ANm/ezMOHDwkICECpVOLt7Y2lpSWff/454eHhWFtbc+rUKfbs2YNardaFbIVCwezZsxk3bhz9+/end+/ePHjwgHXr1lG+fPlC+MnCtGnT8Pf3p0+fPgwYMIC0tDTWrl37zGEV/5Znj21KSgoJCQkkJCQQHx/P6dOnuX37tu7Y079iYmI4ceIE4eHhhfLGnrZ69WrmzJmj+9QAcPToUQIDA3VLRAghhHg5VLWzYMvYFtRyLJpvCUXJcTPRjMlMQ2tsAea2MGS7QUPtE3Z2dqxbt45PPvlEFxL/+9//EhQUxKRJk9iyZQs1a9bM9d4nvbTdunXLca5Tp0788MMPODo6smzZMhYtWoSFhQXffPNNrtc/z5P2HBwcWLp0Kd999x0VK1ZkzZo1dOjQQfdeli9fjpubG8uWLePrr78mPDycr7/+mjfeeINbt27pVi5o164d3333Haampnz99dccPHiQTz/9NNvY3xfh7e3NihUrsLGxYeHChfz000/4+/vz6quv5jr29mkKbR4ReN26dcydO1f3+slSFc9Tv359NmzYkI+3oJ/9+/czceJEXnnlFTp27EhYWBirVq2iSZMmLF++PEfXfGBgID4+uX19IUo6mTwmhNDX45R0Jm84z+Ggh4YuRRSxz7zu80aXdmBTOAFKlEyRkZG5rhE8evRogoKCOHr06DPvz7M/e+DAgZw5c0a3nMXZs2dxdnbOdSyrQqHA2NgYBwcHxowZk8+3oJ9OnTrx9ddfs3z5cj7//HNsbW156623GDVqlKyIIIQQLylrU2NWDm3Egl9vsPjILfT8tlKUMh3qONK9d0cwNX7+xaJU69evH9WqVWPlypW6Y1FRUZw6dYpWrVo99/48g61SqWThwoW61+7u7vTq1avIVj3QR9euXenatavBni+EEKLkUSgUvNuxNp6u5Ziy6QLxKRnPv0mUCgoFTPStyeQONfX61liUfj169ODbb79lypQpNG3alMePH7Nx40Y0Gg3jxo177v16j0AOCgp6oUKFEEKIotTRw4ndTtaM++kvLoXFPf8GUaLZW6mZ17se7dwdDF2KKEaTJk3Czs6OjRs3cujQIdRqNQ0bNiQgIIDatWs/9/58LQaYmZnJ8ePHadOmDZC129fixYs5e/Ysrq6ujBw5klq1ahXsnQghhBAvqJKtOZvHNOfT3ddY84d+616KkqezhxOf9fLCxkKWdXvZKJVK/P398ff3L9D9egfbqKgohgwZwu3btzl+/Di2trbMnTuXTZs2odVqOXfuHEeOHGHjxo1Ur169QMUIIYQQL0ptpOITP0/auTswa+tlWRKsFLFSG/GfHh709qlo6FJEKaX3Bg1Lly4lODiYN954A7VazePHj9m6dSsuLi4cPXqUH3/8EY1Gw9KlS4uyXiGEEEIv7Wo7sP+d1vg3q4wMzyz5mla1Ye/kVhJqxQvRu8f22LFjtG3bltmzZwOwc+dO0tPT6dWrF05OTjg5OdGlSxeOHTtWZMUKIYQQ+WGpNmJOT096NHBh2i8XCY5MfP5NolipjZRM7Vibt16pilIpn0DEi9G7xzYyMjLboN3ffvsNhUKRbekFW1vbbFu2CSGEECVB4yo27J3UirFtq2Mk4anE6FrPmUNT2vB262oSakWh0LvH1t7enocPsxbA1mg0HD9+nHLlyuHl5aW75vr16zg5ORV+lUIIIcQLUhupeL+zO13rOTN31zX+CI42dEkvLU9Xaz7s5kGTqjaGLkWUMXoHWy8vL/bt20fTpk05d+4csbGx9OnTB4VCQWJiIhs2bOD3339n4MCBRVmvEEII8UI8XMqxfmQzjt2IZN6+IK6EPzZ0SS8NO0s173WqRV8fN+mhFUVC72A7ZcoULl68yIwZM9BqtZQvX163y9hXX33F+vXrqVSpEqNHjy6yYoUQQojC0qaWPa1r2rHzYgTzD1znbnSSoUsqs0yMlAxvUYXxvjWwkt3DRBHSO9hWqlSJX375hb1796LRaOjUqRMODlmLJrdq1QpXV1f69euHtbV1kRUrhBBCFCaFQkGP+i508XRi/el7BBy6RVRCqqHLKjOs1EYMalaZN1+pgoOVqaHLES8BhVZbNnfWDgwMxMfHx9BliAKYNGkSAIsWLTJwJUKIl01SWgY/nwlhzR93uR0lKygUlJ2lmjdfqcLgZpWxlh5aUYzytfMYQEhICHfv3iUtLY28MnH79u1fuDAhhBCiuJmbGDG8ZVWGtajC0euRrDp5h99vRlI2u4AKX2Vbc95uVY0+PhUxNVYZuhzxEtI72MbGxjJlyhT++OOPPK/RarUoFAquXbtWKMUJIYQQhqBQKGjn7kA7dwduPUzgfyfvsOWvUBLTMg1dWomjVMArNe0Z0NiNTh5OqGRSmDAgvYPt119/zcmTJ6lZsybNmzfHysoKhWzlIoQQooyr4WDJnJ6evNe5NlsCQ9l2PpzzIY8MXZbBVbY1p3fDivTxqYhLeTNDlyMEkI9ge+jQIerWrcumTZtQqeTrBSGEEC8Xa1NjhrWsyrCWVbkbncjOC+HsuhhB0P14Q5dWbOws1XSr54xfAxe8K1UwdDlC5KB3sE1MTKRly5YSaoUQQrz0KttaMN63JuN9a3InKpF9V+6z/8p9zoc8KlPjcZUK8KpYnjY17WhVy56GlSrIUANRoukdbGvVqkVwcHBR1iKEEEKUOlXsLBjdpjqj21TnUVIap2/HZP26E8OV8MdkakpX0nUuZ0rrmva0rmVPyxq2lDc3MXRJQuhN72A7ZswYJkyYwIEDB+jYsWNR1iSEEEKUSuXNTejo4URHj6zt5RNSMwi8G8vp29Gcvp0VdJNK0AQ0a1Mj6jhbU9fFmrrO1nhXKk8NBytDlyVEgekdbK9evUrt2rWZNGkSbm5uVKlSBROTnJ/iFAoFixcvLtQihRBCiNLIUm1Em1r2tKllD2StHnT/cQp/P0wkOCqBvx8mEByVyN8PE4h4nFIkwxiUCrCxUONoraZiBTPqOFtnhVlna9xszAv/gUIYkN7BdsmSJbrf37t3j3v37uV6nayUIIQQQuROoVDgXM4M53JmvFLTLtu5pLQMHjxO5VFSGo+S04lLSicuOZ1HSek8Sk4jLjmdlPSs3l4FWX/XqpQKTIyUqI2UmBgpsVIbYW9tiqOVGkdrUxytTbGzNMFIpSz29yqEIeRrVQQhhBBCFA1zEyOq2hkBFoYuRYhSS+9g6+rqWpR1CCGEEEII8ULkuwkhhBBCCFEm5NljO2TIkAI1qFAo+N///lfggoQQQgghhCiIPIPt6dOnC9SgTB4TQgghhBCGkGewlcliQgghhBCiNMkz2MpkMSGEEEIIUZqUqsljly9fZvjw4TRo0ICGDRsyevRo2eZXCCGEEEIA+Vjuy9CCg4Px9/fHzMyMsWPHArBq1SreeOMNtm/fjqOjo4ErFEIIIYQQhlRqgu3//vc/kpKSWLduHXXr1gWgWbNm9O3bl9WrVzNt2jQDVyiEEEIIIQyp1AxFCA0NpUKFCrpQC1CvXj3Kly/PjRs3DFiZEEIIIYQoCUpNsK1cuTJxcXHExMTojj169Ij4+HgcHBwMWJkQQgghhCgJSk2wHTFiBE5OTrz77rsEBQVx/fp1pkyZgrGxMf7+/oYuTwghhBBCGFipGWPr4uLCqFGjmDNnDn5+fgCoVCoCAgKyDU8QQgghhBAvp1ITbBcuXMg333xDkyZN6NevH5mZmWzYsIHJkycTEBCAr6+voUsUQgghhBAGVCqC7ePHj1m5ciWenp6sXr0alUoFQNeuXenTpw+zZ8/mlVdewcTExMCVCiGEEEIIQykVY2zv3LlDWloa3bp104VaAGNjY7p3705UVJRs1CCEEEII8ZIrFcH2SU9sZmZmjnMajSbbP4UQQgghxMupVATbmjVr4uDgwNatW0lNTdUdT01NZdu2bVSoUIGaNWsasEIhhBBCCGFopWKMrUql4sMPP2TixIn06dOHPn36oNFo+OWXXwgODmbevHkYGxsbukwhhBBCCGFApSLYArz66qv88MMPLFu2jAULFgBQt25dli9fTuvWrQ1cnRBCCCGEMLRSE2wBmjdvTvPmzQ1dhhBCCCGEKIFKxRhbIYQQQgghnkeCrRBCCCGEKBMk2AohhBBCiDJBgq0QQgghhCgTJNgKIYQQQogyQYKtEEIIIYQoEyTYCiGEEEKIMkGCrRBCCCGEKBMk2AohhBBCiDJBgq0QQgghhCgTJNgKIYQQQogyQYKtEEIIIYQoEyTYCiGEEEKIMkGCrRBCCCGEKBMk2AohhBBCiDJBgq0QQgghhCgTJNgKIYQQQogyQYKtEEIIIYQoEyTYCiGEEEKIMkGCrRBCCCGEKBMk2AohhBBCiDJBgq0QQgghhCgTJNgKIYQQQogyQYKtEEIIIYQoEyTYCiGEEEKIMsHI0AWIl9f+/fvZs2dPjuO3bt0CYNKkSdmOv/baa3Tq1KlYahNCCCFE6SPBVpQ4tra2hi5BCCGEEKWQQqvVag1dRFEIDAzEx8fH0GUIIYQQQohiUip6bENDQ2nfvv0zr1mzZg1NmzYtpoqEEEIIIURJUyqCrY2NDfPmzctxPDU1lTlz5mBra4u7u7sBKhNCCCGEECVFqQi25ubm+Pn55Tj+6aefkpGRwVdffUW5cuUMUJkQQgghhCgpSu1yX9evX+fHH3/k9ddfp1GjRoYuRwghhBBCGFipDbYLFizA1NSUyZMnG7oUIYQQQghRApTKYBsUFMSRI0cYMGAADg4Ohi5HCCGEEEKUAKUy2K5fvx6VSsXgwYMNXYoQQgghhCghSl2wTUlJYceOHfj6+uLq6mrocoQQQgghRAlR6oLtqVOnSEpKonPnzoYuRQghhBBClCClLtgeO3YMY2Nj2rZta+hShBBCCCFECVLqgu1ff/2Fl5cXlpaWhi5FCCGEEEKUIKUq2Kanp3Pr1i3q1q1r6FKEEEIIIUQJUyp2HnsiIiKC9PR0nJ2d9bo+MDCwiCsSQuTFx8fH0CUIIYR4yZSqYPvo0SMAvYYhyF+qQgghhBAvF4VWq9UaugghhBBCCCFeVKkaYyuEEEIIIUReJNgKIYQQQogyQYKtEEIIIYQoEyTYCiGEEEKIMkGCrRBCCCGEKBMk2AohhBBCiDJBgq0QQgghhCgTJNgKIYQQQogyQYKtEEIIIYQoE/4PV36LHGPjr64AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.rc('xtick', labelsize=18) # fontsize of the tick labels\n", "plt.rc('ytick', labelsize=18) # fontsize of the tick labels\n", "plt.rc('legend', fontsize=18) # fontsize of the tick labels\n", "plt.rc('axes', labelsize=20) # fontsize of the tick labels\n", "plt.rcParams['font.size'] = 20\n", "\n", "import seaborn as sns\n", "sns.set_style(\"whitegrid\", {'axes.grid' : False})\n", "\n", "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10,5))\n", "ax = axes[0]\n", "sns.boxplot(results.installed, width=.1, ax=ax, orient=\"v\")\n", "ax.set_xticklabels([\"\"])\n", "ax.set_ylabel(\"Installed Capacity [kW]\")\n", "\n", "ax = axes[1]\n", "ax.axis(\"equal\")\n", "results.violation.value_counts().plot(kind=\"pie\", ax=ax, autopct=lambda x:\"%.0f %%\"%x)\n", "ax.set_ylabel(\"\")\n", "ax.set_xlabel(\"\")\n", "sns.despine()\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Note that this is only an example for a basic algorithm in order to demonstrate how such problems can be tackled with pandapower. Algorithms applied in real case studies might include Q-control of PV plants, transformer tap controllers, more sophisticated distribution of PV plants, probability distribution different buses, binary search for the hosting capacity evaluation etc." ] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }