{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "70195b46-fa08-4ef0-9cbe-02fd9ebf9b23",
      "metadata": {},
      "source": [
        "# Discrete Green's Functions and Interaction Rank\n",
        "\n",
        "Copyright (C) 2026 Andreas Kloeckner\n",
        "\n",
        "<details>\n",
        "<summary>MIT License</summary>\n",
        "Permission is hereby granted, free of charge, to any person obtaining a copy\n",
        "of this software and associated documentation files (the \"Software\"), to deal\n",
        "in the Software without restriction, including without limitation the rights\n",
        "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n",
        "copies of the Software, and to permit persons to whom the Software is\n",
        "furnished to do so, subject to the following conditions:\n",
        "\n",
        "The above copyright notice and this permission notice shall be included in\n",
        "all copies or substantial portions of the Software.\n",
        "\n",
        "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n",
        "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n",
        "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n",
        "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n",
        "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n",
        "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n",
        "THE SOFTWARE.\n",
        "</details>"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {},
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import scipy.linalg as la\n",
        "\n",
        "import matplotlib.pyplot as pt"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d7ccce38-d1e2-483f-b811-ca580f36317e",
      "metadata": {},
      "source": [
        "Let's solve $u''=-30x^2$ with $u(0)=1$ and $u(1)=-1$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {},
      "outputs": [],
      "source": [
        "n = 50\n",
        "\n",
        "mesh = np.linspace(0, 1, n)\n",
        "h = mesh[1] - mesh[0]"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "972fef0b-fdf2-4709-b7bb-151573e1f583",
      "metadata": {},
      "source": [
        "Set up the system matrix `A` to carry out centered finite differences\n",
        "\n",
        "$$\n",
        "u''(x)\\approx \\frac{u(x+h) - 2u(x) + u(x-h)}{h^2}.\n",
        "$$\n",
        "\n",
        "Use `np.eye(n, k=...)`. What needs to be in the first and last row?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {},
      "outputs": [],
      "source": [
        "A = (np.eye(n, k=1) + -2*np.eye(n) + np.eye(n, k=-1))/h**2\n",
        "A[0] = 0\n",
        "A[-1] = 0\n",
        "A[0,0] = 1\n",
        "A[-1,-1] = 1"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "80bf4822-86e1-4948-b801-43ea6f5598f2",
      "metadata": {},
      "source": [
        "Next, fix the right hand side: "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {},
      "outputs": [],
      "source": [
        "b = -30*mesh**2\n",
        "b[0] = 1\n",
        "b[-1] = -1"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "de5fe2de-537e-42a3-9415-4998a11699d6",
      "metadata": {},
      "source": [
        "Compute a reference solution `x_true` to the linear system:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f723ca66a50>]"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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/w6YS6UBAADag/ICAAAshfICAAAshfICAAAshfICAAAshfICAAAshfICAAAshfICAAAshfICAAAsxWe3BzDL0Q2D3W63yUkAAEB7HX3fbs/G/0FXXioqKiRJWVlZJicBAAAdVVFRofj4+OMeE3T3NvJ6vSooKFBsbKxsNlun/tlut1tZWVnKz8/nvkk+xHn2D86zf3Ce/Ydz7R++Os+GYaiiokIZGRmy24+/qiXoRl7sdrsyMzN9+jXi4uL4i+EHnGf/4Dz7B+fZfzjX/uGL8/xdIy5HsWAXAABYCuUFAABYCuWlA1wul+bMmSOXy2V2lKDGefYPzrN/cJ79h3PtH4FwnoNuwS4AAAhujLwAAABLobwAAABLobwAAABLobwAAABLobx8w5NPPqns7GxFRERo7NixWr169XGPf+ONNzRgwABFRERo6NChWrhwoZ+SWltHzvNzzz2n0047TYmJiUpMTFROTs53/ndBk47+PB/16quvymazaerUqb4NGCQ6ep7Lysp00003KT09XS6XS/369eP/He3Q0fP82GOPqX///oqMjFRWVpZuu+021dbW+imtNS1fvlwXXHCBMjIyZLPZ9O67737na5YtW6aTTjpJLpdLffr00YsvvujznDLQ4tVXXzWcTqfxwgsvGJs2bTJmzpxpJCQkGEVFRW0ev2LFCsPhcBgPP/ywsXnzZuO3v/2tER4ebmzcuNHPya2lo+f5kksuMZ588klj3bp1xpYtW4wZM2YY8fHxxv79+/2c3Fo6ep6P2r17t9GtWzfjtNNOM6ZMmeKfsBbW0fNcV1dnjB492jj33HONTz75xNi9e7exbNkyIzc318/JraWj53n+/PmGy+Uy5s+fb+zevdv44IMPjPT0dOO2227zc3JrWbhwofGb3/zGePvttw1JxjvvvHPc4/Py8oyoqChj1qxZxubNm43HH3/ccDgcxqJFi3yak/LyNWPGjDFuuummll97PB4jIyPDmDt3bpvHX3TRRcZ5553X6rmxY8ca1113nU9zWl1Hz/M3NTY2GrGxsca8efN8FTEonMh5bmxsNMaPH2/87W9/M6644grKSzt09Dw//fTTRq9evYz6+np/RQwKHT3PN910k3HmmWe2em7WrFnGhAkTfJozmLSnvNxxxx3G4MGDWz03bdo0Y/LkyT5MZhhMGzWrr6/XmjVrlJOT0/Kc3W5XTk6OVq1a1eZrVq1a1ep4SZo8efIxj8eJnedvqq6uVkNDg7p06eKrmJZ3ouf5vvvuU0pKiq6++mp/xLS8EznP7733nsaNG6ebbrpJqampGjJkiB588EF5PB5/xbacEznP48eP15o1a1qmlvLy8rRw4UKde+65fskcKsx6Hwy6GzOeqNLSUnk8HqWmprZ6PjU1VVu3bm3zNYWFhW0eX1hY6LOcVnci5/mb7rzzTmVkZHzrLwy+ciLn+ZNPPtHzzz+v3NxcPyQMDidynvPy8vTxxx/r0ksv1cKFC7Vz507deOONamho0Jw5c/wR23JO5DxfcsklKi0t1amnnirDMNTY2Kjrr79ev/71r/0ROWQc633Q7XarpqZGkZGRPvm6jLzAUh566CG9+uqreueddxQREWF2nKBRUVGhyy+/XM8995ySkpLMjhPUvF6vUlJS9Oyzz2rUqFGaNm2afvOb3+iZZ54xO1pQWbZsmR588EE99dRTWrt2rd5++20tWLBA999/v9nR0AkYeWmWlJQkh8OhoqKiVs8XFRUpLS2tzdekpaV16Hic2Hk+6pFHHtFDDz2kjz76SMOGDfNlTMvr6HnetWuX9uzZowsuuKDlOa/XK0kKCwvTtm3b1Lt3b9+GtqAT+XlOT09XeHi4HA5Hy3MDBw5UYWGh6uvr5XQ6fZrZik7kPN999926/PLLdc0110iShg4dqqqqKl177bX6zW9+I7udf7t3hmO9D8bFxfls1EVi5KWF0+nUqFGjtGTJkpbnvF6vlixZonHjxrX5mnHjxrU6XpIWL158zONxYudZkh5++GHdf//9WrRokUaPHu2PqJbW0fM8YMAAbdy4Ubm5uS2PCy+8UGeccYZyc3OVlZXlz/iWcSI/zxMmTNDOnTtbyqEkbd++Xenp6RSXYziR81xdXf2tgnK0MBrc0q/TmPY+6NPlwBbz6quvGi6Xy3jxxReNzZs3G9dee62RkJBgFBYWGoZhGJdffrlx1113tRy/YsUKIywszHjkkUeMLVu2GHPmzOFS6Xbo6Hl+6KGHDKfTabz55pvGwYMHWx4VFRVmfQuW0NHz/E1cbdQ+HT3P+/btM2JjY42bb77Z2LZtm/H+++8bKSkpxgMPPGDWt2AJHT3Pc+bMMWJjY41XXnnFyMvLMz788EOjd+/exkUXXWTWt2AJFRUVxrp164x169YZkow//elPxrp164y9e/cahmEYd911l3H55Ze3HH/0Uulf/epXxpYtW4wnn3ySS6XN8Pjjjxvdu3c3nE6nMWbMGOPTTz9t+b2JEycaV1xxRavjX3/9daNfv36G0+k0Bg8ebCxYsMDPia2pI+e5R48ehqRvPebMmeP/4BbT0Z/nr6O8tF9Hz/PKlSuNsWPHGi6Xy+jVq5fx+9//3mhsbPRzauvpyHluaGgw7r33XqN3795GRESEkZWVZdx4443GkSNH/B/cQpYuXdrm/2+PntsrrrjCmDhx4rdeM2LECMPpdBq9evUy/v73v/s8p80wGD8DAADWwZoXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKZQXAABgKf8fWpLwtAD6EsYAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "x_true = la.solve(A, b)\n",
        "pt.plot(mesh, x_true)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2d3e09f9-f508-4752-b3f6-4847d3fd3ad8",
      "metadata": {},
      "source": [
        "Next, let's consider the influence of each individual RHS component:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {},
      "outputs": [],
      "source": [
        "b = np.zeros_like(mesh)\n",
        "\n",
        "# experiment with these set to zero/nonzero\n",
        "b[17] = 1\n",
        "b[0] = 0\n",
        "b[-1] = 0"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fd7b75e27b0>]"
            ]
          },
          "execution_count": 19,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGdCAYAAAD60sxaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVXRJREFUeJzt3Xlc1HX+B/DXHMxwgygwoiDgheQNqHhWUrZaW6uV5gnhVbhbWW1WbnZttW277dZWpimoaZZlh2aaeeGBcggeiKSCguBwiMxwzvn9/YHOb9kUQRm+c7yej8c89vGb+X6H13x/Aq8+zLw/EkEQBBARERE5EanYAYiIiIg6GgsQEREROR0WICIiInI6LEBERETkdFiAiIiIyOmwABEREZHTYQEiIiIip8MCRERERE5HLnYAW2U2m1FaWgovLy9IJBKx4xAREVErCIKAmpoaBAUFQSq98ToPC9ANlJaWIjg4WOwYREREdAuKi4vRvXv3Gz7OAnQDXl5eAJouoLe3t8hpiIiIqDW0Wi2Cg4Mtv8dvhAXoBq792cvb25sFiIiIyM7c7O0rfBM0EREROR0WICIiInI6LEBERETkdFiAiIiIyOmwABEREZHTYQEiIiIip8MCRERERE6HBYiIiIicDgsQEREROZ0OKUAfffQRQkND4erqiuHDhyM9Pb3F4zdt2oSIiAi4urpiwIAB2LZtW7PHBUHAK6+8gq5du8LNzQ1xcXE4c+ZMs2OqqqowY8YMeHt7w9fXF4mJiaitrW3310ZERET2x+oF6Msvv8TixYuxbNkyHD16FIMGDcKECRNQXl5+3eMPHTqExx57DImJicjOzsZDDz2Ehx56CCdPnrQc8+677+KDDz7A8uXLceTIEXh4eGDChAlobGy0HDNjxgzk5uZi586d2Lp1K1JTUzF//nxrv1wiIiKyAxJBEARrfoHhw4cjJiYG//nPfwAAZrMZwcHB+OMf/4glS5b85vipU6eirq4OW7dutdw3YsQIDB48GMuXL4cgCAgKCsKzzz6L5557DgCg0WgQGBiIlJQUTJs2DXl5eYiMjERGRgaio6MBANu3b8fEiRNx8eJFBAUF3TS3VquFj48PNBoN9wIjIiKyE639/W3VFSC9Xo+srCzExcX9/xeUShEXF4e0tLTrnpOWltbseACYMGGC5fjCwkKo1epmx/j4+GD48OGWY9LS0uDr62spPwAQFxcHqVSKI0eOXPfr6nQ6aLXaZjdrOHS2EvHJ6bikabDK8xMREdm6Q2crMXdNBmp1RtEyWLUAVVZWwmQyITAwsNn9gYGBUKvV1z1HrVa3ePy1/73ZMQEBAc0el8vl8PPzu+HXffvtt+Hj42O5BQcHt/JVts2/d53B3vwKrNpfaJXnJyIismX56hos+DwLv+SV4+M9Z0XLwU+BXfXiiy9Co9FYbsXFxVb5Ogvv7AkA2JBehOp6vVW+BhERkS0q0zYiITkdNY1GRPfohD+N7y1aFqsWoC5dukAmk6GsrKzZ/WVlZVCpVNc9R6VStXj8tf+92TH/+yZro9GIqqqqG35dpVIJb2/vZjdruLOPPyJUXqjXm7Au7YJVvgYREZGtqdUZEZ+cgVJNI8L9PbBydjRcXWSi5bFqAVIoFIiKisKuXbss95nNZuzatQuxsbHXPSc2NrbZ8QCwc+dOy/FhYWFQqVTNjtFqtThy5IjlmNjYWFRXVyMrK8tyzO7du2E2mzF8+PB2e323QiKR4Imrq0Aph86j0WASNQ8REZG1GUxmPLn+KPIuadHFU4GU+GHo5KEQNZPV/wS2ePFirFy5EmvWrEFeXh6eeOIJ1NXVISEhAQAwe/ZsvPjii5bjn3rqKWzfvh3/+Mc/cPr0abz66qvIzMzEokWLADQViKeffhpvvvkmfvjhB5w4cQKzZ89GUFAQHnroIQBAv379cN9992HevHlIT0/HwYMHsWjRIkybNq1VnwCztkkDuqJ7JzdcrtNjU6Z1/tRGRERkCwRBwMvfnkDqrxVwc5Fh1ZwYhHR2FzsW5Nb+AlOnTkVFRQVeeeUVqNVqDB48GNu3b7e8ibmoqAhS6f/3sJEjR2LDhg1YunQpXnrpJfTu3Rvfffcd+vfvbznmz3/+M+rq6jB//nxUV1dj9OjR2L59O1xdXS3HrF+/HosWLcL48eMhlUoxZcoUfPDBB9Z+ua0il0kxb0w4lv2QixX7C/DYsBDIZXw7FhEROZ4Pd5/FV5kXIZUAHz42BIOCfcWOBKAD5gDZK2vPAWrQmzDqb7tRVafHB48Nwe8Hib8yRURE1J6+zrqI5zYdAwC88VB/zBrRw+pf0ybmANGNuSlkmBMbCgD4ZO85sIcSEZEjOXCmEku+OQ4AWDiuZ4eUn7ZgARLR7NgecFfIkHdJi9QzlWLHISIiahd5l7RY+HkWjGYBDwwKwp8n9BU70m+wAImok4cC02JCAADL954TOQ0REdHtu6RpQEJy05Tn4WF+eO+RgZBKJWLH+g0WIJHNHRMGuVSCtILLOFZcLXYcIiKiW1bTaEBCcgbU2kb0CvDEilnRUMrFm/XTEhYgkQX5uuH3g5veAL18H1eBiIjIPhlMZjzx+VGcVtfA30uJlIQY+Li7iB3rhliAbMDCcU2DEbfnqlFQUStyGiIiorYRBAEvbj6BA2cr4a6QYfWcGHTvJP6sn5awANmAPoFeiOsXAEEAVqQWiB2HiIioTf71yxl8nXURMqkEH00figHdfcSOdFMsQDbi2irQ5qMlKNc2ipyGiIiodb7KLMa/d50BALzxYH/cFREgcqLWYQGyEdGhfoju0Ql6kxmrDhaKHYeIiOimUn+twEubTwAAku7qienDQ0RO1HosQDbk2irQhsNF0DYaRE5DRER0Y6dKtXhy/VEYzQIeGhyE5+61vVk/LWEBsiF3RwSgT6AnanRGrD9cJHYcIiKi6yqtbkBCSjpqdUbEhnfGuw8PgkRie7N+WsICZEOkUgkWjG1aBVp9sBCNBpPIiYiIiJrTXp31U6bVoU+gJ5bPioJCbn91wv4SO7jfDw5CkI8rKmp02Hy0ROw4REREFnqjGU98noX8shoEeCmRnDAMPm62O+unJSxANsZFJkXimHAAwIrUczCZuUkqERGJTxAELPnmOA6evQwPhQyr42PQzddN7Fi3jAXIBk2LCYaPmwvOX67Hjly12HGIiIjw/s5fsTm7BDKpBB/PjEL/brY/66clLEA2yEMpx5yRoQCatscQBK4CERGReDamF+GD3WcBAG/9oT/G9fEXOdHtYwGyUfEjQ+HqIsXxixqknbssdhwiInJSe/PL8fJ3JwEAf7q7F6bG2M+sn5awANkoPw8FpkYHAwA+4SapREQkgpMlGiStPwqTWcDkod3wzD19xI7UbliAbNjcMeGQSSXYf6YSJ0s0YschIiInUlLdgMdTMlCnN2FUr854Z/JAu5v10xIWIBsW7OeO+wd2BdD0XiAiIqKOoGkwIH51OsprdOgb6IVPZtrnrJ+WONarcUDXBiNuO3EJFy7XiZyGiIgcnc5owoJ1mThTXguVtyuSE2Lg7Wqfs35awgJk4yKDvHFnX3+YBWBFaoHYcYiIyIEJgoAXvj6OwwVV8FTKsTo+BkF2POunJSxAduDaJqmbsi6iokYnchoiInJU7/2cj+9ySiGXSvDJzKGIDPIWO5LVsADZgeFhfhgc7Au90YyUQ4VixyEiIge04UgRPtrT9H7TtycPwJje9j/rpyUsQHZAIpFYVoHWpV1Arc4ociIiInIke06X4y/fN836eTquNx65OobFkbEA2Yl7IwMR7u8BbaMRXxwpEjsOERE5iBMXNUja0DTr55Go7nhqfG+xI3UIFiA7IZVKsGBs0yapnx0ogM5oEjkRERHZu+Kqejy+JgP1ehPG9O6CtyYPcKhZPy1hAbIjDw3phkBvJcq0OnyfXSp2HCIismOaegMSUjJQUaNDhMoLH88YCheZ89QC53mlDkAplyFxdBgAYHnqOZjN3CSViIjaTmc0Yf66TJwtr0VXH1ekJAyDlwPO+mkJC5CdeWxYCLxc5SioqMPOvDKx4xARkZ0xmwU8t+k4jhRWwUspR3JCDFQ+rmLH6nAsQHbGy9UFs0b0AAB8svccBIGrQERE1Hp//zkfW441zfpZPisKESrHnfXTEhYgO5QwKgwKuRQ5xdU4UlgldhwiIrITnx++gE/2Ns36+duUgRjVq4vIicTDAmSH/L2UeDiqOwBukkpERK2zK68Mr1yd9bP4nj6YcvX3iLNiAbJTC8aGQyoB9uZXIO+SVuw4RERkw44VV2PRhmyYBWBqdDD+eHcvsSOJjgXITvXo7IHfDegKAPiUq0BERHQDxVX1SFyTgQaDCWP7+OPNP/R3mlk/LWEBsmNPXN0eY8vxSyiuqhc5DRER2Zrqej3mJKejslaPyK7eTjfrpyW8CnasfzcfjO7VBSazgM/2F4gdh4iIbEijwYR5azNRUFGHIB9XJCfEwFMpFzuWzWABsnPXNkn9MrMYl2t1IqchIiJbYDYLeHbTMWScvwIvVzlSHh+GQG/nm/XTEhYgOzeqV2cM6OaDRoMZa9IuiB2HiIhswN+2n8aPxy/BRSbBp7Oi0CfQS+xINocFyM5JJBLLKtDatPOo0xlFTkRERGJam3Yen6Y2vS3i7w8PwsiezjvrpyUsQA7gvv4qhHZ2R3W9ARszisWOQ0REIvk5V41Xf8gFADw/oS8eGtJN5ES2iwXIAcikEswbGw4AWLW/AAaTWeRERETU0bKLruBPG5tm/Tw2LARP3tlT7Eg2jQXIQUwZ2h1dPJUo1TTih5xSseMQEVEHunC5DnPXZKLRYMZdff3xxoN3cNbPTbAAOQhXFxkeHx0KAPg09RzMZm6SSkTkDKrq9IhPzsDlOj36d/PGf6YPhZyzfm6KV8iBzBjeA55KOX4tq8We/HKx4xARkZVdm/VTWFmHbr5uWB0fAw/O+mkVFiAH4uPmghnDQwDAstsvERE5JrNZwDNf5iDrwhV4u8qRkhCDAC/O+mktFiAH8/joMChkUmReuILM81VixyEiIiv567Y8/HRSDYVMihWzo9Gbs37ahAXIwQR6u+IPVz/2uJybpBIROaTVBwqx6kAhAODvjwzEiPDOIieyPyxADmj+uHBIJMAveeX4taxG7DhERNSOtp9U440fTwEAXrgvAg8O5qyfW8EC5IB6+ntiQqQKAPDpPm6SSkTkKLIuXMFTG7MhCMDMESFYOC5c7Eh2iwXIQS28OgDr+5wSlFQ3iJyGiIhuV2FlHeauyYDOaMb4iAC8+gBn/dwOFiAHNTjYFyPC/WA0C1i1v1DsOEREdBsu1+qQkJyOK/UGDOzugw+nD+Gsn9vEq+fArm2SujGjCNX1epHTEBHRrWjQmzB3bSbOX65H905uWDUnBu4Kzvq5XSxADmxcH3/06+qNer0Ja9MuiB2HiIjayGQW8PSX2cguqoaPmwtSEobB30spdiyHwALkwCQSieUNcimHzqNBbxI5ERERtZYgCHhj6ynsyC2DQi7FZ3Oi0SvAU+xYDoMFyMFNGtAVwX5uqKrTY1NWsdhxiIiolVYdKETKofMAgH8+OggxoX7iBnIwLEAOTi6TYt6YplWgFakFMJrMIiciIqKb2XbiEv66LQ8A8NLECNw/MEjkRI6HBcgJPBIVDD8PBS5eacCPJy6JHYeIiFqQeb4KT3+ZA0EAZsf2sPxHLLUvFiAn4KaQIWFkKABg+b4CCIIgbiAiIrqugopazF2bCb3RjLh+gVjGWT9WwwLkJGbF9oC7Qoa8S1rs+7VC7DhERPQ/Kmt1iE/OQHW9AYOCffHhY0Mgk7L8WAsLkJPwdVfgsWEhALhJKhGRranXG5G4JhNFVfUI8XPHqjnRcFPIxI7l0FiAnEji6DDIpRIcLqhCTnG12HGIiAhNs37+9EUOjhVXo5O7C1ISYtDFk7N+rM1qBaiqqgozZsyAt7c3fH19kZiYiNra2hbPaWxsRFJSEjp37gxPT09MmTIFZWVlzY4pKirCpEmT4O7ujoCAADz//PMwGo2Wxy9duoTp06ejT58+kEqlePrpp63x8uxSkK+bZdfg5Xu5CkREJDZBEPDallz8kvf/s37C/TnrpyNYrQDNmDEDubm52LlzJ7Zu3YrU1FTMnz+/xXOeeeYZbNmyBZs2bcK+fftQWlqKyZMnWx43mUyYNGkS9Ho9Dh06hDVr1iAlJQWvvPKK5RidTgd/f38sXboUgwYNstbLs1vXBiPuOKXGuYqWCykREVnXyv0FWJt2ARIJ8O+pgxHVg7N+OoxgBadOnRIACBkZGZb7fvrpJ0EikQglJSXXPae6ulpwcXERNm3aZLkvLy9PACCkpaUJgiAI27ZtE6RSqaBWqy3HfPLJJ4K3t7eg0+l+85zjxo0TnnrqqVt6DRqNRgAgaDSaWzrfliWmZAg9Xtgq/HnTMbGjEBE5rS3HSoQeL2wVerywVViZek7sOA6jtb+/rbIClJaWBl9fX0RHR1vui4uLg1QqxZEjR657TlZWFgwGA+Li4iz3RUREICQkBGlpaZbnHTBgAAIDAy3HTJgwAVqtFrm5ubeVWafTQavVNrs5qifubFoF+ja7BGXaRpHTEBE5n/TCKiz+8hgAIGFUKOZy1k+Hs0oBUqvVCAgIaHafXC6Hn58f1Gr1Dc9RKBTw9fVtdn9gYKDlHLVa3az8XHv82mO34+2334aPj4/lFhwcfFvPZ8uievghJrQT9CYzVh8oFDsOEZFTOVtei3lrM6E3mTHhjkAsnRQpdiSn1KYCtGTJEkgkkhZvp0+ftlZWq3rxxReh0Wgst+Jix943a+G4ngCA9UeKoGkwiJyGiMg5VNToEJ+cDk2DAUNCfPGvqZz1IxZ5Ww5+9tlnER8f3+Ix4eHhUKlUKC8vb3a/0WhEVVUVVCrVdc9TqVTQ6/Worq5utgpUVlZmOUelUiE9Pb3Zedc+JXaj520tpVIJpdJ5PnZ4V98A9A30Qn5ZDdYfuYAn7+wldiQiIofWNOsnAxevNCC0szs+m81ZP2Jq0wqQv78/IiIiWrwpFArExsaiuroaWVlZlnN3794Ns9mM4cOHX/e5o6Ki4OLigl27dlnuy8/PR1FREWJjYwEAsbGxOHHiRLNytXPnTnh7eyMykkuIbSGVSrDg6ifCVh84j0aDSeRERESOy2gy448bsnH8ogZ+HgqkJAxDZ876EZVV3gPUr18/3HfffZg3bx7S09Nx8OBBLFq0CNOmTUNQUNOOtiUlJYiIiLCs6Pj4+CAxMRGLFy/Gnj17kJWVhYSEBMTGxmLEiBEAgHvvvReRkZGYNWsWjh07hh07dmDp0qVISkpqtnqTk5ODnJwc1NbWoqKiAjk5OTh16pQ1Xqpde2BQELr5uqGyVodvjl4UOw4RkUMSBAGvbsnFrtPlUF6d9RPaxUPsWE7PanOA1q9fj4iICIwfPx4TJ07E6NGjsWLFCsvjBoMB+fn5qK+vt9z3/vvv4/7778eUKVMwduxYqFQqbN682fK4TCbD1q1bIZPJEBsbi5kzZ2L27Nl4/fXXm33tIUOGYMiQIcjKysKGDRswZMgQTJw40Vov1W65yKRIHB0GAFiZWgCTmZukEhG1t+X7CvD54aKmWT/ThmBoSCexIxEAiSBwa/Dr0Wq18PHxgUajgbe3t9hxrKZeb8TId3ajut6Aj6YPxaSBXcWORETkML7PKcFTG3MAAMseiETCqDBxAzmB1v7+5l5gTs5dIcfs2FAATZuksg8TEbWPwwWX8fym4wCa9mJk+bEtLECE+JGhcHWR4kSJBofOXRY7DhGR3TtbXoP5V2f9/K6/Ci9P7Cd2JPofLEAEPw8FpsWEAGhaBSIioltXrm3EnNUZ0DYaEdWjE96fOhhSzvqxOSxABKBpeVYmlWD/mUqcuKgROw4RkV2q0xnx+JoMlFQ3IKyLB1bOjoarC2f92CIWIAIABPu544Grb4BenspVICKitjKazFi04ShOlmjR2UOBlIQY+HkoxI5FN8ACRBYLrm6P8dOJS7hwuU7kNERE9kMQBPzl+1zsya+Aq0vTrJ8enTnrx5axAJFFv67euKuvP8wCsCK1QOw4RER24+O95/BFetOsnw+mDcEQzvqxeSxA1My1TVI3ZV1ERY1O5DRERLbvu+wS/H1HPgDg1QfuwL133N7elNQxWIComWFhfhgS4gu90Yzkg4VixyEismmHzlXi+a+PAQDmjw3HnJGh4gaiVmMBomYkEollFWjd4QuoaTSInIiIyDb9WlaDBeuyYDAJmDSwK5bcFyF2JGoDFiD6jXv6BaKnvwdqGo34Ir1I7DhERDanTNuI+NXpqGk0Iia0E/7xyCDO+rEzLED0G1KpxPKJsFUHCqEzmkRORERkO2p1RiQkZ6BU04hwf876sVcsQHRdDw3uBpW3K8q0OnyfXSp2HCIim2AwmfHk+qM4dUmLLp4KrEkYBl93zvqxRyxAdF0KuRSJo5s27lueeg5mMzdJJSLnJggCln57Eqm/VsDNRYbV8TEI9nMXOxbdIhYguqHHhofA21WOgoo6/HyqTOw4RESi+s/us/gysxhSCfDhY0MwsLuv2JHoNrAA0Q15KuWYFdsDQNMmqYLAVSAick7fZF3EP3b+CgB47cH+iIsMFDkR3S4WIGpR/MgwKOVS5BRX40hhldhxiIg63MGzlXjhm+MAmobFzhrRQ+RE1B5YgKhF/l5KPBLdHUDTKhARkTM5rdZi4bosGM0CHhgUhD9P6Ct2JGonLEB0U/PH9IRUAuzNr8CpUq3YcYiIOsQlTQMSkjNQozNieJgf3ntkIGf9OBAWILqpkM7umDigKwDg01SuAhGR46tpNCAhOQOXNI3oFeCJFbOioZRz1o8jYQGiVrm2PcbW45dQXFUvchoiIuu5NuvntLoG/l5KJMfHwMfdRexY1M5YgKhV+nfzwZjeXWAyC/hsf4HYcYiIrEIQBLy4+QT2n6mEu0KG1XM468dRsQBRqz1xdRXoy8xiXK7ViZyGiKj9/XvXGXyddREyqQQfTR+KAd19xI5EVsICRK0W27MzBnb3QaPBjDWHzosdh4ioXX2VWYx//XIGAPDGg/1xV0SAyInImliAqNUkEonlvUBr0i6gTmcUORERUfvYf6YCL20+AQBIuqsnpg8PETkRWRsLELXJhDtUCOviAU2DARszisWOQ0R0206VavHE50dhNAt4aHAQnruXs36cAQsQtYlMKsG8MeEAgFX7C6A3mkVORER060qrG5CQko5anREjwv3wt4cHQiLhrB9nwAJEbTZ5aDf4eylRqmnED8dKxY5DRHRLtFdn/ZRpdegd4IlPOevHqbAAUZu5usjw+KgwAMCn+87BbOYmqURkX/RGM574PAv5ZTUI8FIi5fFh8HHjrB9nwgJEt2TGiBB4KeU4U16L3afLxY5DRNRqgiBgyebjOHj2MjwUMqyOj0E3XzexY1EHYwGiW+Lt6oLpI5o+JcFNUonInry/81dsPloCmVSCj2dGoX83zvpxRixAdMsSR4VBIZMi88IVZJyvEjsOEdFNbUwvwge7zwIA3vpDf4zr4y9yIhILCxDdsgBvV0we2g0AsHwvV4GIyLbtzS/Hy9+dBAD86e5emBrDWT/OjAWIbsv8seGQSIBdp8uRr64ROw4R0XWdLNEgaf1RmMwCJg/thmfu6SN2JBIZCxDdlnB/T9x3hwoA8GkqV4GIyPaUVDfg8ZQM1OlNGNWrM96ZzFk/xAJE7eDa9hg/5JSipLpB5DRERP9P02BA/Op0lNfo0DfQC5/MjIJCzl99xAJE7WBQsC9iwzvDaBbw2f4CseMQEQEAdEYTFqzLxJnyWgR6K5GcEANvV876oSYsQNQuFt7ZtAq0Mb0YV+r0IqchImcnCAL+/PVxHC6ogqdSjuT4YQjirB/6LyxA1C7G9u6CyK7eaDCYsDbtgthxiMjJvfdzPr7PKYVcKsHHM4YiMshb7EhkY1iAqF1IJBLLKtCatPNo0JtETkREzmrDkSJ8tKfpQxlvTx6AsZz1Q9fBAkTtZmJ/FYL93FBVp8dXmcVixyEiJ7TndDmWfncCAPB0XG88Eh0sciKyVSxA1G7kMinmjwkHAKxILYDBZBY5ERE5kxMXNUjacBRmAXg4qjueGt9b7Ehkw1iAqF09Eh2Mzh4KlFQ34Mfjl8SOQ0ROoriqHgkpGajXmzCmdxe8PXkAZ/1Qi1iAqF25usgQPzIUQNMmqYIgiBuIiByept6A+OR0VNbqEKHywsczhsJFxl9v1DL+C6F2Nzs2FB4KGU6ra7D31wqx4xCRA9MZTZi3LhPnKurQ1ccVKQnD4MVZP9QKLEDU7nzcXfDYsKZNBrlJKhFZi9ks4LlNx5FeWAUvpRzJCTFQ+biKHYvsBAsQWUXimDC4yCQ4UliFo0VXxI5DRA7o3R352HKsadbP8llRiFBx1g+1HgsQWUVXHzc8OLgbAK4CEVH7W3f4Apbva/rZ8s6UgRjVq4vIicjesACR1Swc1/SR+J15ZThbXityGiJyFL+cKsOy708CABbf0wcPR3UXORHZIxYgsppeAV64JzIQggCsSOUqEBHdvmPF1fjjF9kwC8DU6GD88e5eYkciO8UCRFa1cFzT9hjfZpdArWkUOQ0R2bPiqnokrslAg8GEsX388eYf+nPWD90yFiCyqqgenTAs1A8Gk4BVBwrEjkNEdupKnR5zktNRWatHZFdvzvqh28Z/PWR1C+9sei/QhiNF0NQbRE5DRPam0WDC/HWZKKioQ5CPK5ITYuCplIsdi+wcCxBZ3V19A9A30At1ehM+P3JB7DhEZEfMZgHPbjqGjPNX4OUqR8rjwxDozVk/dPtYgMjqJBKJZRUo+WAhGg0mkRMRkb14Z/tp/Hj8ElxkEnw6Kwp9Ar3EjkQOggWIOsT9A4PQzdcNlbV6fJ11Uew4RGQH1hw6jxWpTe8d/PvDgzCyJ2f9UPthAaIO4SKTYu6YMADAitQCGE1mkRMRkS3beaoMr23JBQA8P6EvHhrSTeRE5GhYgKjDTI0JRid3FxRV1eOnk2qx4xCRjcouuoI/fnEUZgF4bFgwnryzp9iRyAGxAFGHcVfIMTs2FACwfN85CIIgbiAisjkXLtdh7ppMNBrMuKuvP954kLN+yDpYgKhDzRkZCjcXGXJLtThwtlLsOERkQ6rq9IhPzsDlOj36d/PGf6YPhZyzfshK+C+LOpSfhwJTY4IBwLKRIRFRo8GEeWszUVhZh26+blgdHwMPzvohK2IBog43d0wYZFIJDp69jOMXq8WOQ0QiM5sFPPNlDrIuXIG3qxwpCTEI8OKsH7IuqxagqqoqzJgxA97e3vD19UViYiJqa1veFbyxsRFJSUno3LkzPD09MWXKFJSVlTU7pqioCJMmTYK7uzsCAgLw/PPPw2g0Wh7fvHkz7rnnHvj7+8Pb2xuxsbHYsWOHVV4jtV33Tu74/aAgAFwFIiLgrW15+OmkGgqZFCtmR6M3Z/1QB7BqAZoxYwZyc3Oxc+dObN26FampqZg/f36L5zzzzDPYsmULNm3ahH379qG0tBSTJ0+2PG4ymTBp0iTo9XocOnQIa9asQUpKCl555RXLMampqbjnnnuwbds2ZGVl4a677sIDDzyA7Oxsq71WapsF45oGI/50Uo3CyjqR0xCRWJIPFuKzA4UAgL8/MhAjwjuLnIichmAlp06dEgAIGRkZlvt++uknQSKRCCUlJdc9p7q6WnBxcRE2bdpkuS8vL08AIKSlpQmCIAjbtm0TpFKpoFarLcd88skngre3t6DT6W6YJzIyUnjttddanV+j0QgABI1G0+pzqG0SktOFHi9sFZZ8c1zsKEQkgp9OXBJCl2wVerywVfh4z1mx45CDaO3vb6utAKWlpcHX1xfR0dGW++Li4iCVSnHkyJHrnpOVlQWDwYC4uDjLfREREQgJCUFaWprleQcMGIDAwEDLMRMmTIBWq0Vubu51n9dsNqOmpgZ+fn43zKvT6aDVapvdyLoWjmua7fHN0Ysor2kUOQ0RdaSsC1fw1MZsCAIwc0QIFl5dFSbqKFYrQGq1GgEBAc3uk8vl8PPzg1p9/SF4arUaCoUCvr6+ze4PDAy0nKNWq5uVn2uPX3vset577z3U1tbi0UcfvWHet99+Gz4+PpZbcHBwi6+Pbl9MaCcMDfGF3mhG8sHzYschog5yvrIO89ZmQmc0Y3xEAF594A7O+qEO1+YCtGTJEkgkkhZvp0+ftkbWW7Jhwwa89tpr+Oqrr35TyP7biy++CI1GY7kVFxd3YErnJJFILKtAnx++gJpGg8iJiMjaLtfqEJ+cjqo6PQZ298GH04dw1g+Jos1DFp599lnEx8e3eEx4eDhUKhXKy8ub3W80GlFVVQWVSnXd81QqFfR6Paqrq5utApWVlVnOUalUSE9Pb3betU+J/e/zbty4EXPnzsWmTZua/VntepRKJZRKZYvHUPuL6xeIXgGeOFteiw1HirBgHEfeEzmqBr0Jc9dm4vzlenTv5IZVc2LgruCsHxJHm2u3v78/IiIiWrwpFArExsaiuroaWVlZlnN3794Ns9mM4cOHX/e5o6Ki4OLigl27dlnuy8/PR1FREWJjYwEAsbGxOHHiRLNytXPnTnh7eyMyMtJy3xdffIGEhAR88cUXmDRpUltfJnUQqVSCBWOb/va/6kAhdEaTyImIyBpMZgFPf5mN7KJq+Li5ICVhGPy9+B+dJB6rrTv269cP9913H+bNm4f09HQcPHgQixYtwrRp0xAU1DQDpqSkBBEREZYVHR8fHyQmJmLx4sXYs2cPsrKykJCQgNjYWIwYMQIAcO+99yIyMhKzZs3CsWPHsGPHDixduhRJSUmWFZwNGzZg9uzZ+Mc//oHhw4dDrVZDrVZDo9FY6+XSbXhwcDd09XFFeY0O3x4tETsOEVnBmz+ewo7cMijkUqycHY1eAZ5iRyInZ9U/vK5fvx4REREYP348Jk6ciNGjR2PFihWWxw0GA/Lz81FfX2+57/3338f999+PKVOmYOzYsVCpVNi8ebPlcZlMhq1bt0ImkyE2NhYzZ87E7Nmz8frrr1uOWbFiBYxGI5KSktC1a1fL7amnnrLmy6VbpJBLkTg6DACwIrUAJjM3SSVyJJ/tL7B80OGfjw7CsLAbfyKXqKNIBIFbcl+PVquFj48PNBoNvL29xY7j8Gp1Rox8exe0jUYsnzkU9/XvKnYkImoH205cQtKGoxAE4KWJEZg/lu/zI+tq7e9vvvWebIKnUo7ZsaEAgE/2FYC9nMj+ZZ6vwtNf5kAQgDmxPTBvDGf9kO1gASKbET8qFEq5FMeKq3G4oErsOER0GwoqajF3bSb0RjPi+gXiFc76IRvDAkQ2o4unEo9GNw2g5CapRParslaH+OQMVNcbMCjYFx8+NgQyKcsP2RYWILIp88aEQyoB9v1agdxSfmqPyN7U641IXJOJoqp6hPi5Y9WcaLgpZGLHIvoNFiCyKSGd3TFpYNOYhE/3FYichojawmQW8KcvcnCsuBq+7i5ISYhBF0/O+iHbxAJENufaYMStx0tRXFV/k6OJyBYIgoDXtuTil7ymWT+fzY5GuD9n/ZDtYgEim9O/mw/G9vGHWQBW7ucqEJE9WLm/AGvTLkAiAf49dTCiQznrh2wbCxDZpIXjmlaBvsosxuVanchpiKglW4+X4q1tTZtgvzyxH343gHO8yPaxAJFNig3vjEHdfdBoMGPNofNixyGiG0gvrMLiL48BABJGhWIuZ/2QnWABIpskkUiw8OrO8GvSLqBOZxQ5ERH9r7PltZi3NhN6kxkT7gjE0kmRNz+JyEawAJHNuvcOFcK6eEDTYMAX6UVixyGi/1JRo0N8cjo0DQYMCfHFv6dx1g/ZFxYgslkyqQTzr34ibNWBQuiNZpETERFwbdZPBi5eaUBoZ3d8Njsari6c9UP2hQWIbNrkod0Q4KXEJU0jfjhWKnYcIqdnNJnxxw3ZOH5RAz8PBVIShqEzZ/2QHWIBIpumlMvw+OgwAMCn+87BbOYmqURiEQQBy37Ixa7T5VDKpfhsTjRCu3iIHYvolrAAkc2bPjwEXko5zpTXYtfpcrHjEDmt5fsKsP5IUdOsn2lDMDSkk9iRiG4ZCxDZPG9XF8wY0QMAN0klEsv3OSX42/amWT+v3B+J+/qrRE5EdHtYgMguPD4qFAqZFFkXriDjfJXYcYicyuGCy3h+03EAQOLoMCSMChM5EdHtYwEiuxDg7YopUd0BAMv3chWIqKOcKavB/Kuzfn7XX4WXJ/YTOxJRu2ABIrsxf2w4JBJg1+ly5KtrxI5D5PDKtY2IT86AttGIqB6d8P7UwZBy1g85CBYgshthXTzwu6vvO/iU7wUisqo6nRGPr8lASXUDwrp4cNYPORwWILIr17bH+OFYKUqqG0ROQ+SYjCYzFm04ipMlWnT2UCAlIQadPBRixyJqVyxAZFcGdvfFyJ6dYTQL+Gx/gdhxiByOIAj4y/cnsSe/Aq4uTbN+enTmrB9yPCxAZHeeuLNpFWhjejGu1OlFTkPkWD7eew5fpBdDKgE+mDYEQzjrhxwUCxDZndG9uuCOIG80GExYm3ZB7DhEDuO77BL8fUc+AODV39+Be+/grB9yXCxAZHckEonlvUAphwpRrzeKnIjI/h06V4nnvz4GoOkTl7NjQ8UNRGRlLEBkl37XX4UQP3dcqTfgq4xiseMQ2bVfy2qwYF0WDCYBkwZ2xZL7IsSORGR1LEBkl+QyKeaNDQcArNxfCIPJLHIiIvtUpm1E/Op01DQaERPaCf94ZBBn/ZBTYAEiu/VIVHd08VSgpLoBPx6/JHYcIrtTqzMiITkDpZpGhPt7YCVn/ZATYQEiu+XqIrPsSbR83zkIgiByIiL7YTCZ8eT6ozh1SYsungqsSRgGX3fO+iHnwQJEdm3m8B7wUMhwWl2DvfkVYschsguCIGDptyeR+msF3FxkWB0fg2A/d7FjEXUoFiCyaz7uLpg+PAQA8Am3xyBqlf/sPosvM5tm/Xz42BAM7O4rdiSiDscCRHYvcXQ4XGQSpBdW4WjRFbHjENm0b7Iu4h87fwUAvPZgf8RFBoqciEgcLEBk91Q+rnhocDcAwPK9XAUiupGDZyvxwjfHATTtqzdrRA+RExGJhwWIHMKCcU0fif/5VBnOlteInIbI9pxWa7FwXRaMZgEPDArCnyf0FTsSkahYgMgh9Arwwr1Xl/I/3cdNUon+2yVNAxKSM1CjM2J4mB/ee2QgZ/2Q02MBIoex8Oomqd/llOCSpkHkNES2oabRgITkDFzSNKJXgCdWzIqGUs5ZP0QsQOQwhoZ0wrAwPxhMAlYfKBQ7DpHors36Oa2ugb+XEsnxMfBxdxE7FpFNYAEih/LE1U1SNxwpgqbeIHIaIvEIgoAXN5/A/jOVcFfIsHoOZ/0Q/TcWIHIod/b1R4TKC3V6E9YdPi92HCLR/HvXGXyddRFSCfDR9KEY0N1H7EhENoUFiByKRCKxfCIs+eB5NBpMIici6nibMovxr1/OAADefGgA7ooIEDkRke1hASKHc//AIHTzdcPlOj02ZV0UOw5Rh0r9tQIvbj4BAEi6q6dlUjoRNccCRA7HRSbFvDFNm6SuTC2A0WQWORFRxzhVqsWT64/CaBbw0OAgPHcvZ/0Q3QgLEDmkR2OC0cndBUVV9dh2Ui12HCKrK61uQEJKOmp1RsSGd8a7Dw+CRMJZP0Q3wgJEDsldIceckaEAmrbHEARB3EBEVqS9OuunTKtD7wBPLJ8VBYWcP96JWsLvEHJYc2JD4eYiw6lLWuw/Uyl2HCKr0BvNeOLzLOSX1SDAS4mUx4fBx42zfohuhgWIHFYnDwWmxgQDAJbv4yap5HgEQcCSzcdx8OxleChkWB0fg26+bmLHIrILLEDk0OaOCYNMKsGhc5dxrLha7DhE7er9nb9i89ESyKQSfDRjKPp346wfotZiASKH1r2TOx4cFASAq0DkWDamF+GD3WcBAH99qD/u7MtZP0RtwQJEDm/B1e0xtueqUVBRK3Iaotu3N78cL393EgDwp7t7YdowzvohaisWIHJ4fVVeuDsiAIIArNxfIHYcottyskSDpPVHYTILmDy0G565p4/YkYjsEgsQOYWFV1eBvskqQbm2UeQ0RLempLoBj6dkoE5vwqhenfHO5IGc9UN0i1iAyCnEhHZCVI9O0JvMWH3wvNhxiNpM02BA/Op0lNfo0DfQC5/M5KwfotvB7x5yChKJxLIKtP7wBWgbDSInImo9ndGEBesycaa8FipvVyQnxMDblbN+iG4HCxA5jfERAegd4IkanRHrDxeJHYeoVQRBwAtfH8fhgip4KuVYHR+DIM76IbptLEDkNKRSCeaPDQcArD5YiEaDSeRERDf33s/5+C6nFHKpBJ/MHIrIIG+xIxE5BBYgcioPDu6Grj6uqKjR4dvsErHjELVow5EifLSnaX7V25MHYExvf5ETETkOFiByKgq5FImjwwAAK1ILYDJzk1SyTXtOl2PpdycAAE/H9cYj0cEiJyJyLCxA5HQeGxYCHzcXFFbWYUeuWuw4RL9x4qIGSRuOwiwAj0R1x1Pje4sdicjhsACR0/FQyjE7tgeApu0xBIGrQGQ7iqvqkZCSgXq9CWN6d8Fbkwdw1g+RFbAAkVOaMzIUSrkUxy9qkHbusthxiAAAmnoD4pPTUVmrQ4TKCx/PGAoXGX9ME1kDv7PIKXXxVOLRq++p+ISbpJIN0BlNmLcuE+cq6tDVxxUpCcPgxVk/RFZj1QJUVVWFGTNmwNvbG76+vkhMTERtbcubUTY2NiIpKQmdO3eGp6cnpkyZgrKysmbHFBUVYdKkSXB3d0dAQACef/55GI1Gy+MHDhzAqFGj0LlzZ7i5uSEiIgLvv/++VV4j2a/5Y8Mhk0qw/0wlTpZoxI5DTsxsFvDcpuNIL6yCl1KO5IQYqHxcxY5F5NCsWoBmzJiB3Nxc7Ny5E1u3bkVqairmz5/f4jnPPPMMtmzZgk2bNmHfvn0oLS3F5MmTLY+bTCZMmjQJer0ehw4dwpo1a5CSkoJXXnnFcoyHhwcWLVqE1NRU5OXlYenSpVi6dClWrFhhtddK9ifYzx2TBnQF0PReICKxvLsjH1uONc36WT4rChEqzvohsjaJYKV3gObl5SEyMhIZGRmIjo4GAGzfvh0TJ07ExYsXERQU9JtzNBoN/P39sWHDBjz88MMAgNOnT6Nfv35IS0vDiBEj8NNPP+H+++9HaWkpAgMDAQDLly/HCy+8gIqKCigUiuvmmTx5Mjw8PLBu3bpW5ddqtfDx8YFGo4G3N38YOarcUg0mfXAAUgmw57k70aOzh9iRyMmsO3wBf/nuJADgH48MwpSo7iInIrJvrf39bbUVoLS0NPj6+lrKDwDExcVBKpXiyJEj1z0nKysLBoMBcXFxlvsiIiIQEhKCtLQ0y/MOGDDAUn4AYMKECdBqtcjNzb3u82ZnZ+PQoUMYN27cDfPqdDpotdpmN3J8dwT5YGwff5gFYOX+ArHjkJPZlVeGZd83lZ/F9/Rh+SHqQFYrQGq1GgEBAc3uk8vl8PPzg1p9/dkrarUaCoUCvr6+ze4PDAy0nKNWq5uVn2uPX3vsv3Xv3h1KpRLR0dFISkrC3Llzb5j37bffho+Pj+UWHMyhY87iiaubpG7KvIjKWp3IachZHCuuxqIN2TALwNToYPzx7l5iRyJyKm0uQEuWLIFEImnxdvr0aWtkbbP9+/cjMzMTy5cvx7/+9S988cUXNzz2xRdfhEajsdyKi4s7MCmJaUS4HwYF+0JnNCPl4Hmx45ATKK6qR+KaDDQYTBjbxx9v/qE/Z/0QdTB5W0949tlnER8f3+Ix4eHhUKlUKC8vb3a/0WhEVVUVVCrVdc9TqVTQ6/Worq5utgpUVlZmOUelUiE9Pb3Zedc+Jfa/zxsW1rTlwYABA1BWVoZXX30Vjz322HW/tlKphFKpbPF1kWOSSCR4Ylw4Fn5+FGvTzmPhnT3hqWzztwZRq1TX6zEnOR2VtXpEdvXmrB8ikbT5u87f3x8REREt3hQKBWJjY1FdXY2srCzLubt374bZbMbw4cOv+9xRUVFwcXHBrl27LPfl5+ejqKgIsbGxAIDY2FicOHGiWbnauXMnvL29ERkZecPcZrMZOh3/vEHXd0+kCuFdPKBtNOKLI0VixyEH1WgwYd7aTBRU1CHIxxXJCTEs20Qisdp/dvTr1w/33Xcf5s2bh/T0dBw8eBCLFi3CtGnTLJ8AKykpQUREhGVFx8fHB4mJiVi8eDH27NmDrKwsJCQkIDY2FiNGjAAA3HvvvYiMjMSsWbNw7Ngx7NixA0uXLkVSUpJlBeejjz7Cli1bcObMGZw5cwarVq3Ce++9h5kzZ1rr5ZKdk0klmD82HACw6kAh9EazyInI0ZjNAp7ddAwZ56/Ay1WOlMeHIdCbs36IxGLV//RYv349Fi1ahPHjx0MqlWLKlCn44IMPLI8bDAbk5+ejvr7ect/7779vOVan02HChAn4+OOPLY/LZDJs3boVTzzxBGJjY+Hh4YE5c+bg9ddftxxjNpvx4osvorCwEHK5HD179sTf/vY3LFiwwJovl+zcH4Z2wz93/gq1thHf5ZRYJkUTtYe/bT+NH49fgotMgk9nRaFPoJfYkYicmtXmANk7zgFyTp/uO4e3fzqNnv4e2PnMOEilfGMq3b61aefxyvdNYzr+NXUwHhrSTeRERI5L9DlARPZo+vAQeLnKca6iDjvzym5+AtFN/Jyrxqs/NJWf5yf0ZfkhshEsQET/xcvVBTNH9ADQtD0GF0jpduQUV+NPG5tm/Tw2LBhP3tlT7EhEdBULENH/SBgVCoVciuyiaqQXVokdh+zUhct1SEzJQKPBjLv6+uONBznrh8iWsAAR/Y8AL1c8fHVLAm6SSreiqk6P+OQMXK7To383b/xn+lDIOeuHyKbwO5LoOuaPCW/aIDW/AnmXuC8ctd61WT+FlXXo5uuG1fEx8OCsHyKbwwJEdB2hXTzwu/5dATR9MoyoNcxmAYu/ykHWhSvwdpUjJSEGAV6c9UNki1iAiG5g4dVNUrccv4TiqvqbHE0EvLUtD9tOqKGQSbFidjR6c9YPkc1iASK6gQHdfTCqV2eYzAJWHSgUOw7ZuOSDhfjs6r+Tvz8yECPCO4uciIhawgJE1IInxvUCAGzMKEJVnV7kNGSrtp9U4/WtpwAAL9wXgQcHc9YPka1jASJqwahendG/mzcaDWasOXRe7Dhkg44WXcFTG7MhCMDMESFYOC5c7EhE1AosQEQtkEgklvcCrUk7j3q9UeREZEvOV9Zh7ppM6IxmjI8IwKsP3MFZP0R2ggWI6CZ+178renR2R3W9ARvTi8WOQzbicq0O8cnpqKrTY2B3H3w4fQhn/RDZEX63Et2ETCrBvDFNf9b4bH8BDCazyIlIbA16E+auzcT5y/Xo3skNq+bEwF3BWT9E9oQFiKgVHo7qji6eSpRqGrHlWKnYcUhEJrOAp7/MRnZRNXzcXJCSMAz+XkqxYxFRG7EAEbWCq4sMCaNCAQCf7ivgJqlO7M0fT2FHbhkUcilWzo5GrwBPsSMR0S1gASJqpZkjesBTKUd+WQ325JeLHYdE8Nn+AiQfPA8A+OejgzAszE/cQER0y1iAiFrJx80F04eHAACW7y0QOQ11tJ9OXMJft+UBAF6aGIH7BwaJnIiIbgcLEFEbPD4qDC4yCdLPVyHrQpXYcaiDZJ6vwlNf5kAQgNmxPSxviici+8UCRNQGKh9XTB7SHQDwCVeBnEJBRS3mrs2E3mhGXL9ALOOsHyKHwAJE1Ebzx4VDIgF+ySvDmbIaseOQFVXW6hCfnIHqegMGBfviw8eGQCZl+SFyBCxARG3U098T90YGAgA+TeUqkKOq1xuRuCYTRVX1CPFzx6o50XBTyMSORUTthAWI6BZc2x7j+5wSXNI0iJyG2pvJLOBPX+TgWHE1fN1dkJIQgy6enPVD5EhYgIhuwZCQThge5geDScCq/YVix6F2JAgCXtuSi1/ymmb9fDY7GuH+nPVD5GhYgIhu0cI7m1aBNqQXobpeL3Iaai8r9xdgbdoFSCTAv6cORnQoZ/0QOSIWIKJbdGcff0SovFCvN2Fd2gWx41A72Hq8FG9tOw0AeHliP/xuQFeRExGRtbAAEd0iiUSCJ66uAqUcOo9Gg0nkRHQ70gursPjLYwCAhFGhmMtZP0QOjQWI6DZMGtAV3Tu54XKdHpsyi8WOQ7fobHkt5q3NhN5kxoQ7ArF0UqTYkYjIyliAiG6DXCa1TAVesb8ARpNZ5ETUVhU1OsQnp0PTYMCQEF/8expn/RA5AxYgotv0aHQw/DwUKK5qwLaTarHjUBs0zfrJwMUrDQjt7I7PZkfD1YWzfoicAQsQ0W1yU8gQPzIUALB87zkIgiBuIGoVo8mMP27IxvGLGvh5KJCSMAydOeuHyGmwABG1g9mxPeCukOHUJS1Sz1SKHYduQhAEvLolF7tOl0Mpl+KzOdEI7eIhdiwi6kAsQETtwNddgWkxIQCaVoHIti3fV4DPDxc1zfqZNgRDQzqJHYmIOhgLEFE7mTsmDHKpBGkFl3GsuFrsOHQD3+eU4G/bm2b9vHJ/JO7rrxI5ERGJgQWIqJ0E+brh94ODAADL93EVyBYdLriM5zcdBwAkjg5DwqgwkRMRkVhYgIja0bVNUrfnqlFQUStyGvpvZ8pqMP/qrJ/f9Vfh5Yn9xI5ERCJiASJqR30CvRDXLwCC0LSnFNmGcm0j4pMzoG00IqpHJ7w/dTCknPVD5NRYgIja2bVVoG+ySlCubRQ5DdXpjHh8TQZKqhsQ1sUDKznrh4jAAkTU7qJD/RDdoxP0JjNWHSwUO45TM5rMSNpwFCdLtOjsoUBKQgz8PBRixyIiG8ACRGQF11aBNhwugrbRIHIa5yQIAv7y/Unsza+Aq0vTrJ8enTnrh4iasAARWcHdEQHoE+iJGp0R6w8XiR3HKX289xy+SC+GRAJ8MG0IhnDWDxH9FxYgIiuQSiVYMLZpFWjVgUI0GkwiJ3Iu32ZfxN935AMAXn3gDtx7B2f9EFFzLEBEVvL7wUEI8nFFZa0Om4+WiB3HaRw6V4k/f90062f+2HDMubpPGxHRf2MBIrISF5kUiWPCAQArUs/BZOYmqdaWr67BgnVZMJgETBrQFUvuixA7EhHZKBYgIiuaFhMMHzcXnL9cjx25arHjOLQybSMSktNR02hETGgn/OPRQZz1Q0Q3xAJEZEUeSrnlTzDL952DIHAVyBpqdUYkJGegVNOIcH/O+iGim2MBIrKy+JGhcHWR4vhFDQ6duyx2HIdjMJnx5PqjOHVJiy6eCqxJGAZfd876IaKWsQARWZmfhwJTo4MBcJPU9iYIApZ+exKpv1bAzUWG1fExCPZzFzsWEdkBFiCiDjB3TDhkUgn2n6nEyRKN2HEcxn92n8WXmcWQSoAPHxuCgd19xY5ERHaCBYioAwT7ueP+gV0BcBWovXyTdRH/2PkrAOC1B/sjLjJQ5EREZE9YgIg6yLXtMbaduIQLl+tETmPfDp6txAvfNM36WTAuHLNG9BA5ERHZGxYgog7Sr6s37uzrD7MArEgtEDuO3Tqt1mLhuiwYzQIeGBSEFyZw1g8RtR0LEFEHurYKtCnrIipqdCKnsT9qTSMSkjNQozNiWJgf3ntkIGf9ENEtYQEi6kDDw/wwONgXeqMZKYcKxY5jV2oaDYhPTsclTSN6BXhi5axoKOWc9UNEt4YFiKgDSSQSyyrQurQLqGk0iJzIPlyb9XNaXQN/LyWS42Pg4+4idiwismMsQEQd7N7IQIT7e0DbaMQX6UVix7F5giDgxc0nsP9MJdwVMqyew1k/RHT7WICIOphUKsHCsU2rQKsOFEJnNImcyLb9e9cZfJ11EVIJ8NH0oRjQ3UfsSETkAFiAiETw4JAgBHorUabV4fvsUrHj2KxNmcX41y9nAABvPjQAd0UEiJyIiBwFCxCRCJRyGRJHhwEAlqeeg9nMTVL/V+qvFXhx8wkAQNJdPTF9eIjIiYjIkbAAEYnksWEh8HKVo6CiDjvzysSOY1NOlWrx5PqjMJoFPDg4CM/d21fsSETkYFiAiETi5epimWD8yd5zEASuAgFAaXUDElLSUaszYkS4H959eCAkEs76IaL2xQJEJKKEUWFQyKXIKa7GkcIqseOITttoQEJyBsq0OvQO8MSnnPVDRFbCAkQkIn8vJR6J6g6Am6TqjWY88XkW8stqEOClRMrjw+Djxlk/RGQdVi1AVVVVmDFjBry9veHr64vExETU1ta2eE5jYyOSkpLQuXNneHp6YsqUKSgra/7+iKKiIkyaNAnu7u4ICAjA888/D6PReN3nO3jwIORyOQYPHtxeL4uoXc0fGw6pBNibX4G8S1qx44hCEAQs2XwcB89ehodChtXxMejm6yZ2LCJyYFYtQDNmzEBubi527tyJrVu3IjU1FfPnz2/xnGeeeQZbtmzBpk2bsG/fPpSWlmLy5MmWx00mEyZNmgS9Xo9Dhw5hzZo1SElJwSuvvPKb56qursbs2bMxfvz4dn9tRO2lR2cP/G5AVwDAp066CvT+zl+x+WgJZFIJPpoxFP27cdYPEVmXRLDSOy/z8vIQGRmJjIwMREdHAwC2b9+OiRMn4uLFiwgKCvrNORqNBv7+/tiwYQMefvhhAMDp06fRr18/pKWlYcSIEfjpp59w//33o7S0FIGBgQCA5cuX44UXXkBFRQUUCoXl+aZNm4bevXtDJpPhu+++Q05OTqvza7Va+Pj4QKPRwNvb+zauBNHNnSzR4P4PD0AmlWDvc3c61aTjLzOK8MI3TR93/9uUAZgaw4+7E9Gta+3vb6utAKWlpcHX19dSfgAgLi4OUqkUR44cue45WVlZMBgMiIuLs9wXERGBkJAQpKWlWZ53wIABlvIDABMmTIBWq0Vubq7lvuTkZBQUFGDZsmWtyqvT6aDVapvdiDpK/24+GN2rC0xmAZ/tLxA7TofZm1+Ol749CQD40929WH6IqMNYrQCp1WoEBDSf2iqXy+Hn5we1Wn3DcxQKBXx9fZvdHxgYaDlHrVY3Kz/XHr/2GACcOXMGS5Ysweeffw65XN6qvG+//TZ8fHwst+Dg4FadR9RenrizaXuMLzOLcblWJ3Ia6ztZokHS+qMwmQVMHtoNz9zTR+xIRORE2lyAlixZAolE0uLt9OnT1sjaKiaTCdOnT8drr72GPn1a/wP1xRdfhEajsdyKi4utmJLot0b27IwB3XzQaDBjTdoFseNYVUl1Ax5PyUCd3oRRvTrjncmc9UNEHat1yyP/5dlnn0V8fHyLx4SHh0OlUqG8vLzZ/UajEVVVVVCpVNc9T6VSQa/Xo7q6utkqUFlZmeUclUqF9PT0Zudd+5SYSqVCTU0NMjMzkZ2djUWLFgEAzGYzBEGAXC7Hzz//jLvvvvs3X1upVEKpVLb4uoisSSKRYOG4nkjacBRr085jwdhweCjb/C1q8zQNBsSvTkd5jQ59A73wycwoKOScyEFEHavNP139/f3h7+9/0+NiY2NRXV2NrKwsREVFAQB2794Ns9mM4cOHX/ecqKgouLi4YNeuXZgyZQoAID8/H0VFRYiNjbU871//+leUl5db/sS2c+dOeHt7IzIyEi4uLjhx4kSz5/3444+xe/dufP311wgLC2vrSybqMPf1VyG0szvOX67Hxoxiy35hjkJnNGHBukycKa+FytsVyQkx8HblrB8i6nhW+8+ufv364b777sO8efOQnp6OgwcPYtGiRZg2bZrlE2AlJSWIiIiwrOj4+PggMTERixcvxp49e5CVlYWEhATExsZixIgRAIB7770XkZGRmDVrFo4dO4YdO3Zg6dKlSEpKglKphFQqRf/+/ZvdAgIC4Orqiv79+8PDw8NaL5notsmkEswbGw4AWLW/AAaTWeRE7UcQBLzw9XEcLqiCp1KO1fExCOKsHyISiVXXndevX4+IiAiMHz8eEydOxOjRo7FixQrL4waDAfn5+aivr7fc9/777+P+++/HlClTMHbsWKhUKmzevNnyuEwmw9atWyGTyRAbG4uZM2di9uzZeP311635Uog6zJSh3dHFU4lSTSN+yCkVO067ee/nfHyXUwq5VIKPZwxFZBDHSxCReKw2B8jecQ4QienjvWfx7vZ89An0xPanxkIqte83CG84UoSXvm360/TfHx6IR6L5KUsisg7R5wAR0a2bMbwHPJVy/FpWiz355Tc/wYbtOV2Ov3zfNOvn6bjeLD9EZBNYgIhskI+bC2YMbxoK+Mle+90e48RFDZI2NM36eSSqO54a31vsSEREAFiAiGzW46PDoJBJkXnhCjLPV4kdp82Kq+qRkJKBer0JY3p3wVuTB3DWDxHZDBYgIhsV6O2KPwzpBgBYbmebpGrqDYhPTkdlrQ4RKi98PGMoXGT8cUNEtoM/kYhs2Pxx4ZBIgF/yyvFrWY3YcVpFZzRh3rpMnKuoQ1cfV6QkDIMXZ/0QkY1hASKyYT39PTEhsmkK+qf7bH+TVLNZwHObjiO9sApeSjmSE2Kg8nEVOxYR0W+wABHZuIVXN0n9PqcEJdUNIqdp2bs78rHlWNOsn+WzohCh4ggJIrJNLEBENm5wsC9GhPvBaBawan+h2HFuaN3hC5b3Kv1tykCM6tVF5ERERDfGAkRkBxaOa1oF2phRhOp6vchpfuuXU2VYdnXWz7P39MGUqO4iJyIiahkLEJEdGNfHH/26eqNeb8LatAtix2nmWHE1/vhFNswCMDU6GIvu7iV2JCKim2IBIrIDEokEC8c1bZKacug8GvQmkRM1Ka6qR+KaDDQYTBjbxx9v/qE/Z/0QkV1gASKyE5MGdEWwnxuq6vT4KrNY7Di4UqfHnOR0VNbqEdnVm7N+iMiu8KcVkZ2Qy6SYN6ZpFWjl/gIYTWbRsjQaTJi/LhMFFXUI8nFFckIMPJVy0fIQEbUVCxCRHXkkKhh+HgpcvNKAH09cEiWD2Szg2U3HkHH+Crxc5Uh5fBgCvTnrh4jsCwsQkR1xU8iQMDIUALB8XwEEQejwDH/bfho/Hr8EF5kEn86KQp9Arw7PQER0u1iAiOzMrNgecFfIkHdJi32/VnTo116bdh6fpjZNpP77w4Mwsidn/RCRfWIBIrIzvu4KPDYsBADwyd6O2yR156kyvPpDLgDg+Ql98dDVjVqJiOwRCxCRHUocHQa5VIIjhVXILrpi9a+XU1yNP35xFGYBeGxYMJ68uj0HEZG9YgEiskNBvm54cHDTCsy17Ses5cLlOiSmZKDRYMadff3xxoOc9UNE9o8FiMhOXRuM+POpMpyrqLXK16iq0yM+OQOX6/To380bH00fCjln/RCRA+BPMiI71TvQC3H9AiEIwIp9Be3+/I0GE+atzURhZR26+bph9ZwYeHDWDxE5CBYgIjv2xJ1Nq0Cbsy9CrWlst+c1mwUs/ioHWReuwNtVjpSEGARw1g8RORAWICI7FtXDDzGhnWAwCVh9sLDdnvetbXnYdkINhUyKFbOj0ZuzfojIwbAAEdm5heOaPpG14UgRNA2G236+5IOF+OxAU5n6+yMDMSK8820/JxGRrWEBIrJzd/UNQN9AL9TqjPj88IXbeq7tJ9V4fespAMAL90VYPmlGRORoWICI7JxUKsGCq58ISz54Ho0G0y09z9GiK3hqYzYEAZg5IsTyKTMiIkfEAkTkAB4YFIRuvm6orNXhm6MX23z++co6zF2TCZ3RjPERAXj1gTs464eIHBoLEJEDcJFJkTg6DACwIrUAJnPrN0m9XKtDfHI6qur0GNDNBx9OH8JZP0Tk8PhTjshBTBsWDF93F1y4XI+fTl5q1TkNehPmrs3E+cv16N7JDavio+Gu4KwfInJ8LEBEDsJdIcec2FAATdtjCELLq0Ams4Cnv8xGdlE1fNxckJIwDAFenPVDRM6BBYjIgcwZGQpXFylOlmhx8OzlFo9988dT2JFbBoVcipWzo9ErwLODUhIRiY8FiMiB+HkoMC0mBEDLm6R+tr8AyQfPAwD++eggDAvz64h4REQ2gwWIyMEkjg6DTCrBgbOVOHFR85vHt524hL9uywMAvDQxAvcPDOroiEREomMBInIwwX7ueGBgVwC/XQXKulCFp7/MgSAAs2N7YN4YzvohIufEAkTkgBZc3R7jp5OXcL6yDgBQUFGLuWsyoTeaEdcvEMs464eInBgLEJED6tfVG3f19YdZAFbsL0BlrQ7xyRm4Um/AoGBffPjYEMikLD9E5Lw48IPIQS0c1xN78ivwddZFHL9YjaKqeoT4uWPVnGi4KWRixyMiEhVXgIgc1LAwPwwJ8YXeaMbJEi183V2QkhCDLp5KsaMREYmOBYjIQUkkEjxx9b1ACrkUn82ORrg/Z/0QEQH8ExiRQ7snMhDvPTIIYV08ENWjk9hxiIhsBgsQkQOTSCR4OKq72DGIiGwO/wRGRERETocFiIiIiJwOCxARERE5HRYgIiIicjosQEREROR0WICIiIjI6bAAERERkdNhASIiIiKnwwJERERETocFiIiIiJwOCxARERE5HRYgIiIicjosQEREROR0uBv8DQiCAADQarUiJyEiIqLWuvZ7+9rv8RthAbqBmpoaAEBwcLDISYiIiKitampq4OPjc8PHJcLNKpKTMpvNKC0thZeXFyQSSbs9r1arRXBwMIqLi+Ht7d1uz0u/xWvdMXidOwavc8fgde4Y1rzOgiCgpqYGQUFBkEpv/E4frgDdgFQqRffu3a32/N7e3vzm6iC81h2D17lj8Dp3DF7njmGt69zSys81fBM0EREROR0WICIiInI6LEAdTKlUYtmyZVAqlWJHcXi81h2D17lj8Dp3DF7njmEL15lvgiYiIiKnwxUgIiIicjosQEREROR0WICIiIjI6bAAERERkdNhAbKCjz76CKGhoXB1dcXw4cORnp7e4vGbNm1CREQEXF1dMWDAAGzbtq2Dktq/tlzrlStXYsyYMejUqRM6deqEuLi4m/7/hpq09d/0NRs3boREIsFDDz1k3YAOoq3Xubq6GklJSejatSuUSiX69OnDnx+t0Nbr/K9//Qt9+/aFm5sbgoOD8cwzz6CxsbGD0tqn1NRUPPDAAwgKCoJEIsF3331303P27t2LoUOHQqlUolevXkhJSbFuSIHa1caNGwWFQiGsXr1ayM3NFebNmyf4+voKZWVl1z3+4MGDgkwmE959913h1KlTwtKlSwUXFxfhxIkTHZzc/rT1Wk+fPl346KOPhOzsbCEvL0+Ij48XfHx8hIsXL3ZwcvvS1ut8TWFhodCtWzdhzJgxwoMPPtgxYe1YW6+zTqcToqOjhYkTJwoHDhwQCgsLhb179wo5OTkdnNy+tPU6r1+/XlAqlcL69euFwsJCYceOHULXrl2FZ555poOT25dt27YJL7/8srB582YBgPDtt9+2eHxBQYHg7u4uLF68WDh16pTw4YcfCjKZTNi+fbvVMrIAtbNhw4YJSUlJlv/bZDIJQUFBwttvv33d4x999FFh0qRJze4bPny4sGDBAqvmdARtvdb/y2g0Cl5eXsKaNWusFdEh3Mp1NhqNwsiRI4XPPvtMmDNnDgtQK7T1On/yySdCeHi4oNfrOyqiQ2jrdU5KShLuvvvuZvctXrxYGDVqlFVzOpLWFKA///nPwh133NHsvqlTpwoTJkywWi7+Cawd6fV6ZGVlIS4uznKfVCpFXFwc0tLSrntOWlpas+MBYMKECTc8nprcyrX+X/X19TAYDPDz87NWTLt3q9f59ddfR0BAABITEzsipt27lev8ww8/IDY2FklJSQgMDET//v3x1ltvwWQydVRsu3Mr13nkyJHIysqy/JmsoKAA27Ztw8SJEzsks7MQ43chN0NtR5WVlTCZTAgMDGx2f2BgIE6fPn3dc9Rq9XWPV6vVVsvpCG7lWv+vF154AUFBQb/5pqP/dyvX+cCBA1i1ahVycnI6IKFjuJXrXFBQgN27d2PGjBnYtm0bzp49iyeffBIGgwHLli3riNh251au8/Tp01FZWYnRo0dDEAQYjUYsXLgQL730UkdEdho3+l2o1WrR0NAANze3dv+aXAEip/TOO+9g48aN+Pbbb+Hq6ip2HIdRU1ODWbNmYeXKlejSpYvYcRya2WxGQEAAVqxYgaioKEydOhUvv/wyli9fLnY0h7J371689dZb+Pjjj3H06FFs3rwZP/74I9544w2xo9Ft4gpQO+rSpQtkMhnKysqa3V9WVgaVSnXdc1QqVZuOpya3cq2vee+99/DOO+/gl19+wcCBA60Z0+619TqfO3cO58+fxwMPPGC5z2w2AwDkcjny8/PRs2dP64a2Q7fy77lr165wcXGBTCaz3NevXz+o1Wro9XooFAqrZrZHt3Kd//KXv2DWrFmYO3cuAGDAgAGoq6vD/Pnz8fLLL0Mq5TpCe7jR70Jvb2+rrP4AXAFqVwqFAlFRUdi1a5flPrPZjF27diE2Nva658TGxjY7HgB27tx5w+Opya1cawB499138cYbb2D79u2Ijo7uiKh2ra3XOSIiAidOnEBOTo7l9vvf/x533XUXcnJyEBwc3JHx7cat/HseNWoUzp49aymYAPDrr7+ia9euLD83cCvXub6+/jcl51rpFLiVZrsR5Xeh1d5e7aQ2btwoKJVKISUlRTh16pQwf/58wdfXV1Cr1YIgCMKsWbOEJUuWWI4/ePCgIJfLhffee0/Iy8sTli1bxo/Bt1Jbr/U777wjKBQK4euvvxYuXbpkudXU1Ij1EuxCW6/z/+KnwFqnrde5qKhI8PLyEhYtWiTk5+cLW7duFQICAoQ333xTrJdgF9p6nZctWyZ4eXkJX3zxhVBQUCD8/PPPQs+ePYVHH31UrJdgF2pqaoTs7GwhOztbACD885//FLKzs4ULFy4IgiAIS5YsEWbNmmU5/trH4J9//nkhLy9P+Oijj/gxeHv04YcfCiEhIYJCoRCGDRsmHD582PLYuHHjhDlz5jQ7/quvvhL69OkjKBQK4Y477hB+/PHHDk5sv9pyrXv06CEA+M1t2bJlHR/czrT13/R/YwFqvbZe50OHDgnDhw8XlEqlEB4eLvz1r38VjEZjB6e2P225zgaDQXj11VeFnj17Cq6urkJwcLDw5JNPCleuXOn44HZkz5491/15e+3azpkzRxg3btxvzhk8eLCgUCiE8PBwITk52aoZJYLANTwiIiJyLnwPEBERETkdFiAiIiJyOixARERE5HRYgIiIiMjpsAARERGR02EBIiIiIqfDAkREREROhwWIiIiInA4LEBERETkdFiAiIiJyOixARERE5HRYgIiIiMjp/B+0x4OTjdX3swAAAABJRU5ErkJggg==",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "x_true = la.solve(A, b)\n",
        "pt.plot(mesh, x_true)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<matplotlib.image.AxesImage at 0x7fd7b7494a50>"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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K2WHrhvn+ViUaEvTayXt0Dz55jjOqtVRV8oOXTfOStk+wdXrPddNXzNH8vgGBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMl1wdUiry9PIG+gWxC2yZY9OvE2SIiTm+ST2ibAbZywJcl1V8U6iHybbnge11DnyFW70WJb0AAACMEEADABAEEADBBAAEATBBAAAATBBAAwERqy7DzcsonVIIcha9ENZfC6tWkypbTajpt5WBZFhuVby5Cpe5Ry5pD7QKhsn+fONtAJMVXTp3UVg5Jvxf5BgQAMEEAAQBMEEAAABMEEADABAEEADBBAAEATBBAAAATqe0DKiYfWDK+4KnRD/YjuOI1775eH+92C5KymehV+r7nI1+PRKzel2S2TQj148TZIsLHokdIit4nFNoWIanejJm0VUPodY+zrcJMksuM/74odvuXMcsAABMEEADABAEEADBBAAEATBBAAAATBBAAwMSkAmj79u1asmSJqqurVV1draamJr3++uuj9w8NDam1tVXz5s3TrFmz1NLSot7e3kgDc86pMM5RigrKFD3yLus9EhuTyxY9QvLKFD2iXjN0Xd814yyPH2dMIXllix5xFFwm8hFVNuO8h09OBe/hv26h6BGSkyt6JMU33mymoJznmIkm9ZuwYMECbd26VV1dXTp69KhWrFih1atX68MPP5Qkbdq0Sfv27dOePXvU2dmp06dPa+3atYkMHABQ2ibViHr33XeP+fMvfvELbd++XYcOHdKCBQu0Y8cO7dq1SytWrJAk7dy5U9ddd50OHTqkW2+9depGDQAoeZH/LSCfz2v37t0aHBxUU1OTurq6NDIyoubm5tGfWbx4sRoaGnTw4MGi5xkeHlZ/f/+YAwAw/U06gI4fP65Zs2apsrJSDz74oPbu3avrr79ePT09qqioUG1t7Zifr6urU09PT9HztbW1qaamZvRYuHDhpJ8EAKD0TDqArr32Wh07dkyHDx/WQw89pHXr1umjjz6KPIAtW7aor69v9Oju7o58LgBA6Zj0YqQVFRW6+uqrJUmNjY06cuSInnvuOd1zzz06d+6czp49O+ZbUG9vr+rr64uer7KyUpWVlZMfOQCgpMVeDbtQKGh4eFiNjY0qLy9XR0eHWlpaJEknTpzQqVOn1NTUFHugo9czWqXWVzqbVfTVruOIulK25F8tOzTH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//hHrVu3Tp2dndbDSpXu7m49/PDD2r9/v6qqqqyHM62k9p/grrjiCuVyuYsqSXp7e1VfX280qnT7Yl6YswvWr1+v1157TW+//faYLT7q6+t17tw5nT17dszPz8R5qqio0NVXX63Gxka1tbVp6dKleu6555ij/9DV1aUzZ87opptuUllZmcrKytTZ2alt27aprKxMdXV1zFVEqQ2giooKNTY2qqOjY/S2QqGgjo4ONTU1GY4svRYtWqT6+voxc9bf36/Dhw/PqDlzzmn9+vXau3ev3nrrLS1atGjM/Y2NjSovLx8zTydOnNCpU6dm1DyNp1AoaHh4mDn6DytXrtTx48d17Nix0ePmm2/WvffeO/rfzFVE1lUQPrt373aVlZXu5Zdfdh999JF74IEHXG1trevp6bEempmBgQH33nvvuffee89Jck8//bR777333D//+U/nnHNbt251tbW17tVXX3Xvv/++W716tVu0aJH7/PPPjUd+6Tz00EOupqbGHThwwH3yySejx7///e/Rn3nwwQddQ0ODe+utt9zRo0ddU1OTa2pqMhz1pffII4+4zs5Od/LkSff++++7Rx55xGUyGfenP/3JOccc+fxnFZxzzFVUqQ4g55x7/vnnXUNDg6uoqHDLli1zhw4dsh6SqbfffttJuuhYt26dc+5CKfajjz7q6urqXGVlpVu5cqU7ceKE7aAvsfHmR5LbuXPn6M98/vnn7kc/+pGbM2eO+8pXvuK+853vuE8++cRu0AZ+8IMfuP/6r/9yFRUV7qtf/apbuXLlaPg4xxz5fDmAmKto2I4BAGAitf8PCAAwvRFAAAATBBAAwAQBBAAwQQABAEwQQAAAEwQQAMAEAQQAMEEAAQBMEEAAABMEEADABAEEADDx/wHfP2Cc1EUTcwAAAABJRU5ErkJggg==",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "pt.imshow(np.log10(1e-15+np.abs(la.inv(A))))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3 (ipykernel)",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.14.3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}