|
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hVZbb48e8+/aR3EgIEEiD0FjooUgWlCEhRQVGwje3O6Nzpo+N1fjNXrzqjoiKoIxYQlK6iNOmdAAklQAIESEhCej9t//6IOaSTkJ6sz/P4aE72Puc98ZS13/ddaymqqqoIIYQQQghxmzSNPQAhhBBCCNG8SUAphBBCCCFqRQJKIYQQQghRKxJQCiGEEEKIWpGAUgghhBBC1IoElEIIIYQQolYkoBRCCCGEELUiAaUQQgghhKgVCSiFEEIIIUStSEAphBBCCCFqRQJKIYQQQghRKxJQCiGEEEKIWpGAUgghhBBC1IoElEIIIYQQolYkoBRCCCGEELUiAaUQQgghhKgVCSiFEEIIIUStSEAphBBCCCFqRQJKIYQQQghRKxJQCiGEEEKIWpGAUgghhBBC1IoElEIIIYQQolYkoBRCCCGEELUiAaUQQgghhKgVCSiFEEIIIUStSEAphBBCCCFqRQJKIYQQQghRKxJQCiGEEEKIWpGAUgghhBBC1IoElEIIIYQQolYkoBRCCCGEELUiAaUQQgghhKgVCSiFEEIIIUStSEAphBBCCCFqRQJKIYQQQghRKxJQCiGEEEKIWpGAUgghhBBC1IoElEIIIYQQolYkoBRCCCGEELUiAaUQQgghhKgVCSiFEEIIIUStSEAphBBCCCFqRdfYAxBCCCGaAlVVyberWOwqBq2CWaugKEpjD0uIZkECSiGEEK1agc1BVFohR1PyybA4nLd7GTRE+Jvp7WPEpJMFPSGqoqiqqjb2IIQQQojGEJdlYe3FLKyOyo/Ra2B6Jw9CPQwNNzAhmhkJKIUQQrRKcVkWVsdmUZ0vQQWYFSZBpRCVkYBSCCFEq1Ngc7D4VBqFNgff/u150q5cQkVlxl/+xbGNKzi2aRX9Js3knl//zXmOXgPP9PSR5W8hKiB7KIUQQrQ6UWmFWB2QGBOFzWLhyU82cfHYfvZ88QHjn/4dXYaNIWbPllLnWB0QnVbIwABzI41aiKZLLrOEEEK0KqqqcjQlHwDPNm1BVYsyvLMzcfXywd2vTaXZ3UdS8pGFPSHKkxlKIYQQrUq+XXVmc7t4+aLR6XlrxjBshYU89el3VZ6bYXFQYFcx66SckBAlyQylEEKIVsVivznDeH7/DrRaLS+uPcBD//cp373111ueX2iXGUohypKAUgghRKti0JacXVRx8fIBwNXLh4KcrFueb9TK7KQQZUmWtxBCiFZFVVWWnE4nw+LAbrPx9Z+eIic1GZvFwr0vvsrVU5Ec27SKvIw0OvQdxAP/+Mh5rpdBw5M9vKWDjhBlSEAphBCi1TmcnM+2a7k1Pm9csKtkeQtRAVnyFkII0er09jGir8E3oEJRHcpePsZ6G5MQzZkElEIIIVodk07D9E4eKADVXKib0clDipoLUQl5ZwghhGiVQj0M9HMkodqtVR6n18DsMA86SdtFISoldSiFEEK0Sg6Hg/P7d9AxsC1d7pzEkZR8Z31KKErAGehvppevEZNW5l+EqIoElEIIIVqlmJgYUlNTue+++2gXYCbC30SBXaXQrmLUKpi0imRzC1FNElAKIYRodVRVZd++fYSEhNCuXTsAFEXBrFMwyzejEDUmc/hCCCFanStXrnD16lWGDx/e2EMRokWQgFIIIUSrs3fvXvz9/enSpUtjD0WIFkECSiGEEK1KSkoK586dY/jw4bJHUog6IgGlEEKIVmXfvn24u7vTu3fvxh6KEC2GBJRCCCFajaysLE6ePMnQoUPRarWNPRwhWgwJKIUQQrQaBw8eRK/XExER0dhDEaJFkYBSCCFEq1BQUMCRI0cYOHAgRqP05BaiLklAKYQQolU4evQodrudIUOGNPZQhGhxpHyrEEKIFklVVfLtKha7ika1c+DgQfr06YO7u3tjD02IFkcCSiGEEC1Kgc1BVFohR8v05nYMnoZ7Ww8KbA5MOlmgE6IuKaqqqo09CCGEEKIuxGVZWHsxC6ujgl+qKigKeg1M7+RBqIehwccnREslAaUQQogWIS7LwurYLKrzpaYAs8IkqBSirkhAKYQQotkrsDlYfCqN5KvxLJ43gYCwcAAefP1j1v39JfIy0rBaCrnnhZfpFFHUv1uvgWd6+sjytxB1QPZQCiGEaPai0gqdy9ydIobx0BufOn839x8fodMbSE+I59tXf82iXwJKqwOi0woZGGBujCEL0aLIZZkQQohmTVVVjqbkO3++fOIQSx6bzI/vvoaqquj0Rcvahbk5tAnrVurcIyn5yEKdELUnAaUQQohmLd+uOrO53f3a8NL6Qzzx8UZy0m9wavsmAJYsnMLHv7qf8JHjSp2bYXFQYJeAUojakoBSCCFEs2YpERDqDEYMZlcURaHnmHtJPHcKgCc/3sgzy39i8zuvlju/UAJKIWpNAkohhBDNmkGrOP+7MDfH+d+XIg/g064jdqu16DgXV4xm13LnG0ucL4S4PZKUI4QQolkzaxW8DBoyLA4uHT/AT4v/gcFkxjs4hNELf83Hv7ofANVuZ8Kzfyp1rpdBg0kCSiFqTcoGCSGEaPYOJ+ez7Vpujc8bF+wqWd5C1AFZ8hZCCNHs9fYxoq/BN5pCUR3KXj7GehuTEK2JBJRCCCGaPZNOw/ROHihQ1GKxGmZ08pCi5kLUEXknCSGEaBFCPQzc4ZKLardCFQ0Y9RqYHeZBJ2m7KESdkaQcIYQQLcalo3vxzM1n0LQHOJpS4KxPCUUJOAP9zfTyNWLSynyKEHVJAkohhBAtQkpKCufPn+e+++6jb4ALA/3NFNhVCu0qRq2CSaugKJLRLUR9kIBSCCFEi3DgwAHc3Nzo1asXAIqiYNYpmOWbToh6J3P+Qgghmr3c3FxOnDjB4MGD0Wq1jT0cIVodCSiFEEI0e0eOHEGj0TBw4MDGHooQrZIElEIIIZo1m83G4cOH6du3L2azFCkXojFIQCmEEKJZi4qKIjc3l6FDhzb2UIRotSSgFEII0Wypqsr+/fsJDw/H19e3sYcjRKslAaUQQohmKzY2lpSUFJmdFKKRSUAphBCi2Tpw4ABBQUGEhIQ09lCEaNUkoBRCCNEsJScnExsby7Bhw6RguRCNTAJKIYQQzdL+/ftxd3enR48ejT0UIVo9CSiFEEI0Ozk5OURFRTFkyBApZC5EEyABpRBCiGbn8OHDaDQaBgwY0NhDEUIgAaUQQohmxmq1cvjwYfr37y+FzIVoIiSgFEII0aycPHmS/Px8hgwZ0thDEUL8QgJKIYQQzYaqqhw4cIDu3bvj4+PT2MMRQvxCAkohhBDNxoULF7hx44YUMheiiZGAUgghRLOxf/9+goODad++fWMPRQhRggSUQgghmoXr169z8eJFhg4dKoXMhWhiJKAUQgjRLBw4cABPT08pZC5EE6Rr7AEIIYSoW6qqkm9XsdhVDFoFs1ZpdjN6ZZ+DLa+okPnYsWPRaGQuRIimRgJKIYRoIQpsDqLSCjmakk+GxeG83cugIcLfTG8fIyZd0w7GKnsORnshurC+9OjbvxFHJ4SojKKqqtrYgxBCCFE7cVkW1l7Mwuqo/Bi9BqZ38iDUw9BwA6uBKp/DL19Veq3SpJ+DEK2VBJRCCNHMxWVZWB2bRXU+zBVgVljTC8hawnMQojVr2msfQgghqlRgc7D2YvUCMQAVWHsxiwJbFVOZDawlPAchWjvZQymEEM1YVFqhc4k4PSGexfMmEBAWDsDs/3mf1X99Fofdhkar4/5X3sG7bXusDohOK2RgQNPog13yOTgcDr792/OkXbmEisqMv/yLvIxUfvj3qygahfv+8AaBXXo0uecgRGsnAaUQQjRTqqpyNCW/1G2dIobx0BufAmAtLGDO3z/Awz+Qc/u2s2v5e0z7/f8CcCQlnwh/U6Nnf5d9DokxUdgsFp78ZBMXj+1nzxcfcOPyBRa88xWFuTms/X8v8ei7K4Gm8xyEEBJQCiFEs5VvV0tlQgNcPnGIJY9NpmP/oUx49k94+AcCoNUbUEqU28mwODh6Mho9DlRVbbR/rIqWjHZDnOPybNMWfvldfnYmBrMLikaL2cMLs4cX+ZkZpZ5DgV3FrJOAUojGJgGlEEI0UxZ76V2H7n5teGn9IfQmF9b8z685tX0TvcZOwWa1sG3J68z469uljv/uxy2Qn13ufhVFabB/HEYXaHfzsV28fNHo9Lw1Yxi2wkKe/HgjG9/4o/P3Gp0Wm9WCTl+UkFNoVzHLN5kQjU7ehkII0UwZtKVn5nQGI2AEoOeYe7kSdZReY6ew9rXfMHTWo/h1CCt1/G+efxYXvdYZ3AENvnycZ3PwTlSa8+fz+3eg1Wp5ce0Brp4+zndv/5WCnJtBr8NmdwaTAEatzE4K0RRIlrcQQjRDqqqSfPUKems+qlq07F2Ym+P8/aXIA/i278TWJW/gE9yRPndPL3W+l0GDm1GPVqtFo9GUCiobklmr4GUo+VWk4uLlA4Crlw+FuTk47DbyszPJuH4Ns6eX80gvgwaTBJRCNAlSh1IIIZqRvLw8Tpw4wdGjR0lNTcW911AsnQaAohCzdys/Lf4HBpMZ7+AQJjzzR96YEkFIv6I9ih36DGTic38BYFywa5PJkD6cnM+2a7kA2G02vv7TU+SkJmOzWLj3xVdx2Gxsfvc1FAWm/eF1grr2AprWcxCitZOAUgghmjhVVbl06RLHjh3jzJkzqKpKjx49GDBgAIHtOvD+6fQqO+SUpAA6DTzT06fJtGEssDlYfCqtWT8HIVo7CSiFEKKJys3N5fjx4xw7doy0tDR8fX0ZMGAAffv2xdXV1XlcTbvMzA7zoFMT6zJT7eegOlAUTZN8DkK0ZhJQCiFEE6KqKhcvXnTORiqK4pyNDAkJqXSfY3V7ec/o1HQDser08sZuw+/qcRbeN1HqTwrRhEhAKYQQTUBOTo5zNjI9PR0/Pz8iIiLo06cPLi4u1bqPApuD6LRCjqTkl6pP6WXQMNDfTC9fIyZt014iruw5uCp2Mk/uY0y3dmz54XsmTpzIkCFDqrgnIURDkoBSCCEaiaqqxMXFcfToUWJiYlAUhZ49exIREUH79u1vewZOVVUK7CqFdhWjVsGkbZwM7too+xwMiso777xDWFgYer2eY8eO8cQTT+Dv79/YQxVCIAGlEEI0uOzsbOdsZEZGBv7+/s7ZSLNZspYrs2vXLnbv3s1zzz3H559/jk6nY9GiRWi12sYemhCtngSUQgjRABwOB7GxsRw7doyYmBi0Wi29evViwIABtGvXrtnNIDaGnJwc3n77bcaNG0fHjh1ZtmwZw4YNY9y4cY09NCFaPemUI4p65tpVLHYVg1bB3AyXx4RoqrKysoiMjCQyMpLMzEzatGnDxIkT6dOnDyaTqbGH16y4ubnRo0cPjhw5wtChQxk9ejTbtm2jS5cuhISENPbwhGjVJKBsxQpsDqLSCjlawQb+CH8zvX2MUuNNtEq1vchyOBxcuHCBY8eOce7cOXQ6Hb169SIiIoK2bdvKBVstDBo0iE8//ZS4uDiGDx/O+fPnWbt2LU899ZQE6EI0IlnybqWqW2JkeicPQptoiREh6lptL7IyMzOds5FZWVkEBgYSERFB7969MRqNDfEUWjxVVVmyZAleXl7MnTuXjIwMPvjgA7p168b06dOdx8iqixANSwLKVqimRZBnhUlQKVq+273IcjgcnD9/nqNHj3LhwgV0Oh29e/cmIiKCoKAgCWTqwZEjR/j+++954YUX8PT05MSJE6xbt45pM2dhDegkqy5CNAIJKFuZmrY4g6IvUWlxJlqy27nI8nHkcezYMY4fP052djZt27ZlwIAB9OrVS2Yj65nFYuGtt95i0KBBjB07FlVVWf79dhIDeoBOX+l5suoiRP2RPZStTFRaYalg8vjmNWx6/Y/8eftZ9n/9Mcc2fQ3AqAXP0WvsFACsDohOK2RggJQzES1Pgc3B2otFwWR6QjyL500gICwcgAdf/5jv33qZc3u3MeaJlxg+dxEqKqvPp1Gw+VMMGkrNRoqGYTAY6Nu3L5GRkYwaNYr4PAfX2/a92U2nElYHrI7NklUXIeqBBJStiKqqHE3Jd/7ssNuJ3rIBz8C2ABxY/SnPr/wZu9XCkoVTnAElwJGUfCL8TbJ8J1qcshdZnSKG8dAbnzp/nvj8XwgbNJLCvNxfblFQFS19Js3k3l4dMRgkMGkMAwcO5NChQ5w8fZYdamDR7LKilLpIjtqynj1fLkFvNDHr1ffwbNMWFVh7MUtWXYSoY/JuakXy7WqpfUUnNq+h1/ipKErRy8AnOARbYQGFeTmY3T1LnZthcVBgl90RomUpe5EFcPnEIZY8Npkf330NVVXx8A8sf6KikGT0Q6+vfHlV1C9/f386duzIvsspzguCkhfJdpuN3V98yONL1zHu6d+xfembznOLV12EEHVHAspWxFIiIHTY7URtWU+fCfc5b+t2x3jemjmcdx8Yzcj5T5c7v1ACStHClL3Icvdrw0vrD/HExxvJSb/Bqe2bKj1XLrIa38CBg8jy7gC/7H4teZGcGh9HQKcu6PQGOvYbQuL506XOPZKSj6QQCFF3JKBsRawFec7/jvx+Nb3HT0OjKXoJFORkc2D1f3hp3UF+8+1+trz/z3IftkatLHeLlsVSJiDUGYwYzK5FPbXH3EviuVNVni8XWY2rQ+cuaFw9AaXcRXJ+dgZGV3fnsarDXupcuSAQom7JHsomor7qpqWlpXH27FnOnj3LlStXMIydh+LiQXLcORJiooj8fjU3rsSx6f/+hN5oQmc0odHpsdusqKqKoiioqgMlP4ctP+ynW3g4nTp1kqU+0SIYylwkFebmYHR1A+BS5AECOnWt8ny5yGpc9hJzImUvkk3unhTmZjt/r2jK9/sutKuY5VtQiDohb6VGVtfdalRVJTk5mTNnznD27FmSkpLQ6XSEhYUxbdo08vz92JVsZdILf3We895D47j/lXfY+Z93+eCRSaiqg2GzH3N+MCuKQrA9g0sXLxJ57Bh6vZ6wsDDCw8Pp0qULrq6udfcHEaIBmbUKXgaN87136fgBflr8DwwmM97BIYx/+g9sfvd/OLPzR1SHnbSrl5j80mtA0XvUJAFloyp5QVD2Inn/ymUkXzyPzWrh2unjBHXpUe58uSAQou5IHcpGVFfdalRV5erVq84gMj09HaPRSNeuXenWrRudO3d2ZqLWtA6lAuh+qUNp1CrcuHGDmJgYzp07x5UrVwBo37494eHhhIeH4+vrW6eZ4NLxQtS3fdcy2ZVkgRq+rsYFu0oprUamqipLTqeTUWgv9f/vvYfG8eyXWzn541r2rliKzmBk1qvv4RUY7DzGy6DhyR7e8nkiRB2RgLKR1LZbjd1u59KlS5w5c4aYmBhycnJwdXUlPDyc7t2706lTJ7Ta8ks8t/PYs8M86FRBQJubm8u5c+eIiYkhNjYWm82Gj4+PM7hs3769c5azpqTPuGgISUlJrFj9LQVDpoNOR9ErvmolL7LkNdj4Difns+1aDtX5f1eSXBAIUbckoGwEt9ut5vGu7ly7FMfZs2eJiYmhsLAQLy8vunXrRvfu3WnXrl21A7jqzo7O6FRxMFmW1Wrl4sWLztnLnJwczGYzXbt2pWvXroSFhVW7e4j0GRcN4fTp06xbtw4fHx9GTJ3N90mOWl9kiYbn/Dy1q9WaZZYLAiHqhwSUjaDoirqoSHLckb1sX/omqupg+NzHsVoK2ffVR+iMRqb94XXahBZ17EBVcZzehzX2OAEBAc4gsk2bNre9ZFNgcxCdVsiRCmYBB/qb6eVrxKSt+QeuqqokJCQQExNDTEwMycnJaLVaOnXqRNeuXQkPD8fDw6PCc6XPuKhvqqry888/s2vXLnr27MnUqVMxGAx1fpElGk5cloVVFzJRUZ11dSsjFwRC1A8JKBuYc8+PxYG1IJ+vfreIh/7vU3R6Aw67ncXzx/Orz34kJ/0GG/75O+a/tbz4REyqlfkdjfj6+tb5mArsKoV2FaNWwVTH+xTT09OdM5eXLl1CVVWCgoKcezyLg2LpMy7qW2FhIWvWrOHcuXOMGTOGkSNHlnqt19dFlqh/Mam5rInLQtHqKp2plAsCIeqPZHk3sJKFlONPHkFvMrH8hYfQm12Y/OJrePgHodXr8QwIIuXS+ZsnKgoFigEXT+86H5OiKJh1Sr2Vz/D29mbo0KEMHTqU/Px8Lly4wLlz5zhw4AA7d+7Ew8OD8PBwNB17Y3UU7Wm6fOIwP75XlE2blXKdbiPH067XgHKzt9JnXFRXamoqK1euJDs7mwceeICuXcuXBDLpNAwMMBPhb6rXiyxR98J9Xel5cDdns+149BomFwRCNDAJKBtYyULK2WkppF65yNOfbebCwZ3s+PhtMpOuUZCdRWZyAqlXLmK3WtGWqPnY3Oummc1mevfuTe/evbHb7Vy+fJmYmBjOxsSQ7xGO4lLULzyk7yCeWLoegNUvP0uP0ZP47s2/VDh7K33Gxa1cuHCBb775Bjc3NxYtWoSfn1+Vx9f3RZaoH0MHDiDygw+4p2dHTl44i1WF2TOmywWBEA1APi4bWMm6aWZ3D0L6DkanN9B58J3s/OTf3P3cX1j+m/l4BbWjfa8BpYJJaFl107RaLaGhoYSGhnLnuAm8G51e7hib1cLV6EgmPv/XSmdviztemHUt528j6oaqquzbt4+tW7fSpUsXZsyYgclkauxhiXoSEBBASEgIR44cxmw2o9psmGU7jBANQt5pDay4kDJAux79Sb54viiJJSYa73YhhI8YyxNL1zN64W9o07l0Id6WXEi5sn2TFw7uJGzwHbh6+zlnb5Nizzpnb4tJCzxRltVqZc2aNWzdupWRI0cyd+5cCSZbgYEDB3L58mUKCwsbeyhCtCoyQ9nAFEUhwt/Mtmu5uHr70nP0PXy0aCqKojDz5X+z8Y0/cf38aVw8vbjvj/9X6tyB/uYWu2xTtgVesegtG4iY+gAajabK2duWNHMrai8zM5OVK1eSmprK/fffT8+ePRt7SKKBdO/eHTc3NzIyMvDx9SXP5pDGCEI0AMnybgS16VbTUrOZS2a/F7Nbrbz74Bie/3pnqfqaKZdj2fPFB0z/U1HALR0vREmXL19m1apVGAwG5syZQ2BgYGMPSTSwLT/v5NDVdAyd+2M33mwNK40RhKg/MkPZCEw6DdM7eVS73iIUlbpoyR+AJWdui104tJPQQSOdwWTFs7dqi565FdWnqipHjhxh8+bNdOjQgVmzZuHi4tLYwxINLC7Lwgmvnmg8VOxlfpdhcbDtWi67EnOlMYIQdUxmKBvRzULKKqpacUHe1lQ3rcZ1KFUV1W5jQPZZxt55BzqdXB+1Vjabje+//57IyEgGDx7MhAkTKm09KlouaYwgROORgLKRFdgcfL3nGNcNvqhmd+ftrbVuWk2/ELrnXebkjh/w9vZm6tSptG/fvr6HKJqYnJwcVq1aRUJCAvfeey/9+/dv7CGJRpCUms6gUWNJiovh6c82E9i5O1Fb1rPnyyXojSZmvfoenm3asva1F0m5fAGAK9HHiL9ylSD/um0WIURrJAFlE/DBBx/QNjiYCfdMlkLK1LzPeEpKCuvXr+fatWsMHTqUMWPGoC9Tbkm0TNeuXePrr79GVVXmzJlDu3btGntIopHsv5bFdzEJ/PCvV7hj/jP4d+zCkoVTeGLZeq6eiiRy0yqm//lN5/HpCfF888oLfP3dT9IYQYg60Hqmvpqo/Px8kpOT6RgSglmnwcuoxazTtNpgEiDUw8AzPX0YF+zqLLFUzMugYVywK8/08nFuA/D39+exxx5jwoQJHDlyhA8++ICLFy82xtBFAzpx4gSffvopnp6ePPHEExJMtmKqqnIiw4ab982C9anxcQR06oJOb6BjvyEknj9d6pyoLRvoPX4qR1LykXkVIWpPNp01svj4eAA6dOjQyCNpWmraAk+j0TBs2DC6du3Kxo0bWb58OREREYwfPx6j0dgIz0DUF4fDwU8//cTBgwfp168f9957r+yfbeVKtrR13padgdH15jYi1VE6RSd6+3c8/PZyaYwgRB2RT+FGFh8fj7u7O15eXo09lCappi3wfH19eeSRRzh8+DBbt27l/PnzTJkyhc6dO9fvQEWDyMvL45tvvuHSpUtMmjSJQYMGterZfFHEUkFjA5O7J4W52c6fFc3NJK30hHgMJjNuPv5A829pK0RTIG+hRhYfH09ISIh8KdYhRVEYPHiwc7byyy+/pF+/fkyYMAGzWfZKNVdJSUmsXLmSwsJC5s+fT6dOnRp7SKKJqKgxgl/7UJIvnsdmtXDt9HGCutzsPBa1dSO9x091/iyNEYSoPQkoG5HVaiUhIYE+ffo09lBaJC8vL+bNm0dkZCQ//fQTFy5c4N5776Vbt26NPTRRQ2fOnGHt2rX4+PjwyCOPyIy+KKW4pe3bT84mMSaalEuxDJn5MCMffIKlj9+HzmBk1qvvOY8/tf075r+9HGjZLW2FaEiS5d2ILl68yPLly3nqqado06ZNYw+nRcvKyuK7777j3Llz9OrVi4kTJ+Lq6nrrE0WjUlWVn3/+mV27dtGzZ0+mTp2KwSB1A0V5h5PzSzVGqK5xwa6S5S1EHZAs70YUHx+PyWQiICCgsYfS4nl4eDB37lxmzJhBbGws77//PtHR0ZLd2YQVFhby9ddfs2vXLsaMGcPMmTMlmBSV6u1jRF+DbzSFovJjvXwkaU+IuiAzlI3o888/R6fT8cADDzT2UFqVnJwcfvjhB06fPk23bt245557cHd3v/WJosGkpqaycuVKsrOzmTFjBl27dm3sIYlmoKgxQiaOSjqPlaQAs8NaRxcyIRqCzFA2EofDwZUrV6RcUCNwc3Nj1qxZzJo1iytXrvD+++9z/Phxma1sAKqqkmdzkFFoJ8/mqPBvfuHCBZYtW4aqqixatEiCSVFtIa5aDNE/o3E4QFWL/qmAXiPBpBB1TZJyGkliYiJWq1UCykbUo0cPOnbsyI8//sj69es5deoUkydPxtPTs7GH1uIU2BxEpRVyNCW/VL1AL4OGCH8zvX2MGLUK+/btY9u2bXTu3JkZM2ZgMpkacdSiuTl48CDZF8/w6PhR/BQdS5pbEHbjzb3SbhoHQ4PcW11LWyEaggSUDUhVVfLtKha7Smz8VXQ6HW3btm3sYbVqLi4uTJ8+nZ49e7Jp0ybef/99xo8fT0REhJRyqiNVtdLMsDjYdi2XXYm5+F87ycXDuxk5ciSjR49Go5EvfFF9ubm57Nq1i4iICNoHBuC9bw+aq2eZO+9h8ixWPnj3HQaNHsXAgMGNPVQhWiQJKBtAhbMzpjAMYwM5lmqht48Rk06+PBtT165d+dWvfsWWLVv47rvvOHXqFFOmTMHHx6exh9asFe1py+JWmwmsdpVrgb24c0Z7Rvfu0iBjEy3Ljh07UBSF0aNHo6oqdq0eu96MCviYDQT6epNw7VpjD1OIFkuScupZVbMzqCooCnoNTO/kQajs52kS4uLi2LhxI7m5uYwZM4bBgwfLbNltKLA5WHwqjeSr8SyeN4GAsHAAHnz9Yy4e2cueL5egN5qY9ep7eLZpC6joNQrP9PSRCyxRI0lJSSxZsoTREyZiCu1d4dYKlxuXyDh1iOd/9VQjjlSIlksCynpU3dkZKMo4nBUmQWVTYbFY2LZtG4cOHaJ9+/ZMnToVPz+/So8vuZ3BoFUwV9JzvDUprguYnhDP92+/zENvfAqA3WZjycIpPLFsPVdPRRK5aRXT//ym8zypCyhqQlVVli9fTrrWFXvvuyq+eC86EtVmZXpHd7r5S1UHIeqaTAPUkwKbg7UXqxdMAqjA2otZFNgq/TQUDchgMDBp0iQWLFhAbm4uH374IXv27MHhKP3/p8Dm4HByPktOp/NOVBof/vLvJafTOZyc32r/f6qqytGUfOfPl08cYsljk/nx3ddIjY8joFMXdHoDHfsNIfH86VLnHknJl4x7UW0xMTFczrVT2HNUFcEkgAJaHeuvFhCXZWmo4QnRakhAWU+i0grJzsxi8fwJvDwihOsXzlCYm8PSJ6azZOEUlj4xnfSEK87jHQ4Hr08fwV/f+FfjDVqUExISwlNPPcWQIUPYvn07y5YtIykpCSiagV58Ko1t13JLLa/BzWSTxafSWuWXV75ddf5N3P3a8NL6Qzzx8UZy0m9wavsmjK43Z4hUh73UuRkWBwV2CShbg+qUkarqeKvVyrpN37N08bv8dURHrl84A0DUlvV8sOAelj05g8ykBABslkLW/f23fPTEDKZOm9ZqL/aEqC+SlFMPimdn9CYzj7zzFT/86xUANDodc/7+AR7+gZzbt51dy99j2u//F4ATm9fgGRhMfI4VVVVb/XJpU6LX6xk/fjw9evRg/fr1fPTRR/QePYkY1463TjZxwOrYrFa3ncFSIiDUGYxAUTeSnmPu5djGlRjMN0u5KBptufML7Spm+XRqsapTRqrkPtrKjjc5LFi6DuWRdyfxw7/+BhRtqdj9xYfOLRXbl77J9D+/yb6VywgfOY7pd00CIDqtULZWCFGHZIayHhTPzmj1ety8b+670xtNePgHAqDVG1B+SfRw2O1Eb91An/HTyLOpMjvTRAUHB/PEE08w9I47OWMMds6mHN+8htfGdANg9+fv8+Gj9/DJr2aRlXIdaJ3bGQzamxdEhbk5zv++FHmA8JHjSb54HpvVwuUThwjq0qPc+UatXFC1VDWd2a/q+HxFj6FdF9y8/Z23Vbal4ty+7VyKPMhHj0/j4DefydYKIeqYBJT1wHKLgNBmtbBtyesMn7sIgOM/fEOvcVOdAWahBJRNlk6nw6vHYBSdDhSl6GJgywY8A9uSfSOJs7u38OQn3zH+V39g+7K3nOdZHUUzIq2FWavgZSh6PV86foB3HxzLkscmk5V8nX6T7mfkg0+w9PH7+GnxPxi96DelzvUyaDBJQNkiFScqVr3X8ebM/r7reVUerygKlFnNyc/OqHBLRWbSNdr36s/CD77lxOZvuXzlqly8C1GHZFGpHhhu8WW49rXfMHTWo/h1CMNht3Pyp/U8/PbnRH63CpDZmdqqz4zrm8kmRfd3YvMaeo2fyp7P3yc98SptwsJRFIW23frw7av/VercIyn5RPibWsV2BkVRiPA3s+1aLuEjxhE+Ylyp3/e5ezp97p5e4bkD/c2t4m/U2txOouKuxLwaP47J3ZPC3Gznz8VbKkzunoQOugOtTkeHvoNIuXSBQntP2VohRB2RGcp6UHJ2pqytS97AJ7ij88s0OzWZnNRk/vP8A+z+4gMOf/MpJ48ebsjhthgNkXFdMtnEYbcTtWU9fSbcB4Bvu45cPX0Cm6WQCwd3kp+ZXurc1pZs0tvHiF5Dpf2Uy1Io6rHcy8dYr+MSjSMqrbDUTGPJrSJfvLSAjxZNZfHDd3Px6L4Kzy95/Kq/PMNrY7qxb+Wycsf5tQ+tcEtFSN/BJMZEA5B47hQ+wR3k4l2IOiTXZvWg5OzMp8/NJTEmmpRLsYSPHMeOZW8S0m8IsYd306HPQCY+9xee/XIrAEc3rKCTwcqQIUMa+Rk0P9Vt71fbAvIltzNEfr+a3uOnOYueu3r7MnTWAj751SyCwnvh37F8x5fWlGxi1Cr4XzvJtcBev8zn3vrLe0YnDylq3gKVLSNVcqsIwNx/fIRObyA9IZ5vX/01iyKGF59YbmsJwMTn/0LYoJEU5uUClPqcHTLzYeeWCp3ByKxX3wNg1ILn+Obl59j64T/pPGQUoaGhsrVCiDrUSr7aGl5vHyO7EnN59N2VpW4f+/iLFR6vAEPve4Bnekqrv5qqdnu/Osi4LrmdITnuHAkxUUR+v5obV+LY8PofmPrf/2DA5DnEHdmLi5dvufNb04zI/v37uXh4N3fOaM8xh3eV++b0mqJgslMryoRvTUrO7EPprSIAOn3R//fC3BzahHW7eaJSfmsJ4ExuLFb2cxYot6XC3TeAR9/7GigKcAf4GmVrhRB1SALKemLSaZjeyaOanXJUQJHZmdtQvC/r0onD/PjeawBkpVyn28jx2G1Wki6cwVKQz6gFz9F73FRnxvXttvcr3s6QYXEw6YW/Om9/76FxTP3vf7Di94+Tk3YD76B2TP2lJFSx1pRsEhsby9atWxkxYgSje3dhmM1BdFohRyooEzPQ30wvXyMmrbz2W6qSM/vFW0XmvbXcGSACLFk4hRvxscx6dXGpcys7/vapYLfiZ0kHXG95tBCieiSgrEehHgZmhXlU3ssbipZ0HDZmhnnJ7MxtKN6XFdJ3EE8sXQ/A6pefpcfoSXToMwid3kBhbg5LFk6m97ipwM2M69upQVdyO0NJxdsWHvjn0krPbS3JJmlpaXzzzTeEhYUxZswYoOgCa2CAmQh/EwV2lUK7ilGrYJIWla1CyZn9sltFij358UYyEq+y/Dfz6Tps9C2Pv10KCvajP5HSvzuhHdrVyX0KISQpp96Fehh4pqcP44JdyyXqeBk0DPNRsG5ZzvVTRxtphM1X2X1ZUFSS6Wp0JB37D3Muo1kK8ggIDS91XG1q0DmTTWqgtSSbWCwWVq5ciYuLCzNnziwXBCiKglmnwcuoxazTSDDZSpRMVEyOO8ex71bxyTOzi7aK/O/vsVutABhcXDGaS88aljv+9T/c9jj0Gpgd5kEbnY1r167d/hMSQpQjM5QN4FazM/n9+7J792769euHm5tbYw+32Si7LwvgwsGdhA2+wxnIrPj948Qd2cvEEsvTcDPj2qyreUBTo+0Mqgqo3BNkavHbGVRVZd26dWRmZrJo0SJMJlNjD0k0ESVn9stuFZn0X6/w8a/uB0C125nw7J9KnVvR1pLN7/4PZ3b+iOqwk3b1EpNfes15TFdPA8n5tiq3VgQHB3P+/Pn6erpCtEqKKq0CGl1+fj7vvPMOPXr0YMqUKY09nGYjo9DOh6dLl+b55uXniJj6AJ2Ks0SB/KwMFj98N79Zs7/UjNlTPbzxMpZv+1ddVWWWF9MpoEZuwcOSxSOPPNKig6xdu3axY8cO5syZQ7du3W59gmhVCmwOFp9Ku2VR83J+yfS+FQXQaeCZnj4YtQo3MrN5/6NlzJg2hV5dO5eaDY+KimLNmjX89re/xcXFpYYDEkJUpGVPmTQTZrOZUaNGERkZSVJSUmMPp9koW0DebrVy9fRxQvoPBcBmKepMozeZMbq4lVt+rW3G9a22M4wLduXZ3j48fM8YMjIyWLFiBdZflvZampiYGHbs2MGoUaMkmBQVKp7Zr+67TgGC8xJ/2ZpSvXmP4sRGRVHwdDFBfjZYCsptrQgODgaQZW8h6pAElE3EoEGD8Pb25qeffpL+stVUtoD8hUM7CR00stRy90ePT2PpE9MZvfDXJc5U6yzjung7w5M9vHmhtw9P/fLvJ3t4MzDAjEmroU2bNjz44IMkJibyzTffYLfba/24TcmNGzdYs2YN3bp1Y9SoUY09HNGEFScq6lCrDBT1GhhmyCRu6xp6W66h11T9Xi3eG1kysVGv16MoCgUFBeWO9/b2xsXFhatXr9bq+QghbpI9lE2EVqtl/PjxfP3111y4cIEuXcoXxRallc24Ltvib/5byys8T1XBFneCRO9w2rZtW2djMeuUSouWt2/fntmzZ7NixQo2bNjAfffd1yISUgoKCli5ciWenp4t5jmJ+hXqYaBLwhHO5YJ7zyEV7nUMVnL5z7JVdO/enXuH9mOcXa1x2SlFUTCZTBQWFpYbg6IoBAcHywylEHVIAsomJDw8nI4dO/LTTz8RGhqKVnv7+/tai94+RnYm5GJzOEC59YS7AmgVUBIusPTYLvr168fYsWMbJBmqc+fOTJ8+nW+//RaTycTEiRObdQCmqipr1qwhNzeXxx9/HKOx5Wexi9qz2WycjT7JwIEDGdPDu1yiotVqZdmyVXh4eDBt2rSiwFCn3FbZKaPRWOEMJRQtex84cABVVZv1+1CIpkKWvJsQRVGYMGECN27c4NixY409nGZBsVsxnNpZo3PuD/Pk6ccXcs899xATE8O7777Lnj17sNls9TTKm3r16sW9997LoUOH2LVrV70/Xn3asWMH58+fZ+bMmfj4SIcnUT3nzp2joKCAPn36lCsjBbBhwwYyMzOZPXt2uYuUmpadMhqNFc5QQlFAWVBQQFpaWt08MSFaOQkom5igoCD69evHzz//XOmVtShSXKYmN/4cd/srt6wNWXKflUajYdCgQTz33HP079+fHTt2sHjxYs6cOVPve1gHDhzImDFj+Pnnnzl48GC9PlZ9OX36NLt372bs2LF07ty5sYcjmpGTJ0/Stm1b/P39y/3uwIEDnDp1imnTplX4+5qqbMkbJDFHiLomAWUTNGbMGKxWa7Ofwapvu3bt4uzZs8yYMYP+7f1vmXH9TC+fct2IzGYzEydO5Omnn8bPz49Vq1axfPlyrl+/Xq9jHzlyJMOGDWPz5s2cPHmyXh+rriUlJbFu3Tp69uzJiBEjGns4ohnJy8vj/Pnz9OnTp9zvLl++zJYtWxg2bBg9evSok8erasnbbDbj6+sriTlC1BHZQ9kEubu7M2LECHbv3s3AgQNlObECMTEx/Pzzz9x1112Ehxd1walNez8/Pz8eeughzp8/z08//cRHH31E//79GTNmDK6uVff7VVWVfLuKxa5i0CqYq/F4iqIwfvx48vPzWbduHSaTia5du9bsj9AI8vPz+frrr/Hx8WHq1Kmy90zUSHR0NFC09aOk7OxsVq9eTUhICOPGjavo1NtiMpnIyMio9PeSmCNE3ZGAsokaPnw4R48eZdu2bcyaNauxh9MoKgvUbty4wdq1a+nWrRt33nlnufNulXFdlS5duhAaGsrhw4fZuXMnp06d4s4772TIkCHlkqQKbA6i0go5WkHmaYS/md4+xiq74yiKwpQpUygoKGD16tXMmzePkJCQmg+6gTgcDr755hsKCgp4+OGHMRik97yomRMnTtClS5dSF2l2u53Vq1ej0WgqbNdZG1XNUEJRQBkdHY3NZkOnk69DIWpD3kFNlF6vZ+zYsaxbt474+Hg6dOjQ2ENqMFUFan29dRxZ/y0eHh71VqZGq9UydOhQ+vTpw44dO9i6dStHjx5lwoQJdO3aFUVRquySk2FxsO1aLrsSc5neyYNQj8oDr+Iv0a+++ooVK1awYMECAgMD6/w51YWtW7dy8eJF5s+fj5eXV2MPRzQzN27cICEhodwF8o8//si1a9d49NFH67zaQlVJOQDt2rXD4XBwKeE6fm2Cqr3CIIQoT/ZQNmF9+vShbdu2/Pjjj62m2HlcloXFp9LYdi23XJ/uDIuDndcLyR04leFTy2eA1jUXFxfuvfdennrqKby8vFi5ciVffPEFx+KTWR1bdctFAKsDVsdmEZdlqfI4nU7HnDlz8PX15YsvviA1NbUOn0XdOHnyJPv372fChAl06tSpsYcjmqETJ06U29px8uRJDh8+zMSJE2nXrl2dP6bJZKp0hrLA5uCq1hPD2Hl8k2riw9PpvBOVxpLT6RxOzqfAVtMekUK0bhJQNmHFZYQSEhKIiopq7OHUu7gsy60DNUUBnY4fU7hloFZXAgICmDdvHnPnziU9O5cfk+zVDvBVYO3FrFt+ORmNRh566CHMZjOff/45WVlZdTDyupGYmMjGjRvp27cvQ4YMaezhiGZIVVWioqLo2bOnc2n5+vXrztfVwIED6+Vxi2coy75fiy9ctyfko7h4lPpd8QrD4lNpDfYZI0RLIEveTVxISAjdu3dn27ZtdO/eHb1e39hDqhcFNgdrL2ahAnFH9rJ96ZuoqoPhcx/n6MaVFORkoTocXL9whpd3XnAGas/09Klyn2JdURSF8PBwMjzbsSMhDxSFK9HH2PjGn9DqdHgEBDHjz2+x/NfzcdhtaLQ67n/lHbzbtsfqgOi0QgYGmKt8DBcXF+bPn88nn3zCF198wYIFC3Bxcan351aV3NxcVq5cSUBAAJMnT5alQHFbLl++TGZmpjO7Oz8/n1WrVuHn58e9995bb68rk8kEgMVica5oFF+4OkPMSh67eIVhVljV21aEEEVkhrIZGDduHLm5uezbtw8outrPsznIKLSTZ3O0iOXwqLRCrA6wFuSz+/P3WfDeSh7/aB09x9zLw29/zhNL1zP+6d/T865JznOKA7WGoqoqkamFzi8gzzZteXzJGp78eCPebdtz+ucfmPP3D3jy442MWvAcu5a/5zz3SEp+tf4/eXh4MH/+fHJzc/nqq6+q3P9V34qTJex2O3PmzJGkBXHbTpw4gbe3N+3bt3fWj83Pz2f27Nn1epFcHEQWv49KXrhWR3VXGIQQElA2Cz4+PgwePJi9Bw+z50o6S37Z69NS9vyoqsrRlHwA4k8eQW8ysfyFh/j8xUfIvpHkPC5qy3p6T5hW6tzqBmp1Id+ultrX6eEfiN5UNOuo1RnQm8x4+Bcl1Gj1BpQS2aoZFgcF9uqN09fXl3nz5nHjxg2+/vrrBungU5Eff/yRK1euMHv2bDw8PG59ghAVsFqtnD592tkZZ9euXZw7d44ZM2bg7e1dr49dPENZvI9y/6Vk/vXQBF4eEcL1C2cAWPWXZ3htTDf2rVzmPC/28B7ef2QSSx6bzLnD+xr0wlWI5koCymaiw4DhaEY/xJ4UW4XJKs15z0/JQC07LYXUKxd5+N9fMmj6PLYueQMoKlkTd2QvnQePKnVuTQK12rJU8jjpCVc4f+Bnut95NwA2q4VtS15n+NxFpY4rrME4g4KCeOCBB7hy5Qpr1qzB4WjYi4XIyEgOHz7MpEmTWlWFAVE3Sq6inDwTg8VioU+fPpw/f56ff/6ZUaNG0aVLl3ofR8kZSlVVOZ2j8Mg7X9Fr3BTnMROf/wuT/uvlUuf9+N7fefS9lTy6+Gu2fPi/DXrhKkRzJQFlMxCXZWH9lQLQ6ird7wPVzypuakoGamZ3D0L6DkanN9B58J0kx54F4FLkftr3jkBbwfJYTQK12jBoy//tC3KyWfWXXzHrb+86x7b2td8wdNaj+HUIK3WssYLzqxISEsL999/P2bNn2bRpU4N9oV29epXvvvuOiIiIekuWEC1Tgc3B4eT8UqsoW+yBmO9eQHS2yrcbNtGlSxdGjRp16zurAyVnKPPtKtmqFjdvv1LHFK8qlOSw2zC7e2Iwu+Kw27iWlNJgF65CNFcSUDZxSanp3DV8KH8dEcL1X4KrqC3r+WDBPSx7cgaZSQkAbF/2JksWTuHdeeN58f+92ayWv0sGau169Cf54nlUVSUhJhrvdkWFvqO2bKD3+GkVnl/TQO12mbVKqbaOdpuNFX94nLFP/Bb/jkX9rLcueQOf4I70uXt6qXO9DBpMtzHO8PBw7rvvPiIjI9m6dWvtnkA1ZGdn8/XXX9O2bVsmTZp06xOE+EVVJb8cBhf2pTpg1FwGjJ/SYMldJWcoK1thqIjOYCAj8SrZqckkXThLfnZGg124CtFcyS77Ji6uQMvD73zFD/96BSgKYnZ/8SFPLFvP1VORbF/6JtP//CZ3PvIcYxa9iN1m4505ozjxwnMMCarbIsH1pThQy7A4cPX2pefoe/hoUVFbv5kv/xuHw8HFo/uY/NLfy517u4Ha7VAUhQh/M9uu5QJwYvMarkQfY/uyN9m+7E0ipj7AjmVvEtJvCLGHd9Ohz0AmPvcXAAb6m2/7S7RPnz7k5+ezefNmzGYzI0eOrLPnVJLNZmPVqlUoisLs2bPLdQYSojLlMqfLKn7ta3Wsv1qIwWhskMxpg8GAoigUFBRUuMJQmSkv/T++eeV5zB6eBHbujrtvmwa7cBWiuZKAsglTVZUTGbZSSzSp8XEEdOqCTm+gY78hfP/2KwDo9EUfznZrIT7tOhKZZmFwoNosyryUDdSGzVnIsDkLSx3zX6t3V3hubQK129Hbx8iuxFysDhgweTYDJs8u9fuIKXNLn6Cq6LUKvXxqV4R9yJAh5Ofns23bNsxmMxEREbW6v7JUVeX7778nMTGxXjqWiJarZpnTSoOW/FIUxVmLsuSF660E9+jLoiVryE1PZf0//5s23h4NduEqRHMlAWUTVjarGCA/OwOjq7vzZ9Vhd/73xjf+RNSW9Qyb/ZgzWcWsax4fgiUDtepQAJ2GWgdqNWXSaZjeyaPq2ZhiqoqqqnTJicek87vV0bc0atQo8vLy+O677zCbzfTo0aPW91nsyJEjREZGMm3aNIKDg+vsfkXLV1zy6/KJw/z43msAZKVcp9vI8aRdu1yuhixQ7dqsdaG4n3fxheu8GVNIjIkm5VIsQ2Y+TMrlC5zZ+SOqw07a1UtMfuk1fv7035zfvwO9yczU//5Hg1+4CtEcSUDZhFW058fk7klhbrbzZ0Vzc1lyym//zsTn/8KSxyYTMe1BCu3emJvJ/+EaBWq/mNHJo0GKmpcV6mFgVphHpb28i+m1Cl1y4oncuok2Olutu8woisKkSZMoKCjg22+/xWg0EhYWdusTb+Hy5cts3ryZwYMH069fv1rfn2g9Spb8Cuk7iCeWrgdg9cvP0mP0JEIjRgBFzQqObVxZ6twjKflE+JvqPVAzmUzOOpS9fYw8sXhlufdt8daUYnc9+gJ3PfpCo124CtEcSVJOE1bRnh+/9qEkXzyPzWrh8olDBHUpmqWyWYo+MHUGI3qTGb3R1Oz2/BQHavpKX5VFoaZeA/d0cKONi67RSnmEehh4pqcP44JdSyXqQNG+znHBrjzTy4cpwwcwbNgwNm/ezPHjx2v9uIqiMG3aNMLCwvj666+5evVqre4vMzOTVatW0aFDByZMmFDr8YnWpaJVFJvVwtXoSDr2H+a8raIasg1V8qt4yRtuXrjW5JOxsS5chWhumsn8VetUvOfn7Sdnl1qiGfngEyx9/D50BiOzXi3qxrLxjT+Rcuk8dquVfvfcT5CfT7Pc81McqEWnFXIkJb/Ul5UeBzqtjny7ynfxOUBR8Bbhb6a3j7FeP/RVVSXfrmKxqxi0CmatgkmnYWCAmQh/EwV2lUK7ilGrYNIqpWZdxo8fT2FhIRs2bMBgMNR6qVqr1TJr1iy++OILvvzySx599FECAgJqfD9Wq5Wvv/4avV7PrFmzJAlH1FhFqygXDu4kbPAdaH4p7F9cQ7aipLpCu1rvqygmk8lZ2BzKrjAUbUtRlPKfHXpNUTDZSdouClEtiirVWpu0w8n5zmSVmhgX7Nog+5Pqk6qqFNhVLmRa+O5iOmgqr8Op18D0TnXfc7fA5iAqrZCjZYLbmgayDoeDtWvXcvr0aR544AE6d+5c+7EVFPDZZ5+Rk5PDY489VqOuI8Xt706fPs3ChQsJDCxfi0+IyuTn53Px4kViLl4mpu2gUr/75uXniJj6AJ0ihgMQd3QvxzZ+zf2vvFPufl7o7YO5nmf/1qxZQ1ZWFgsWLCh1e4HNwZoDUcQr7uBysxOUhw4Gt3Gll68Rk1ZmJoWoLnm3NHG9fYxVLAGXp1AUXLWEPT+KopCYZ+P7+Jwqg0mon6LuVdXVq2l3Io1Gw3333Ufnzp35+uuvuXz5cq3HZzKZeOihhzAYDHz++efk5OSU+n1VPd8PHDjAyZMnmTZtmgST4pbsdjuXLl1i+/btLFu2jDfeeIPVq1dz9WIsBlsBxdtR7FYrV08fJ6T/UOe5ldWQbaiSXwajscL3gUmnIffMITpfj+SF3j48EKxQ+MMyJpgzGRhglmBSiBqSJe8mrjklq9S14nIk+dlZfPyr+0mOi+HpzzYT2Lk7+7/+mGObvgZg1ILn6DV2Sp2WI7llXb1fFAeys8JuPTuq1Wq5//77+eqrr1ixYgWPPPIIQUFBtRqnm5sb8+fP55NPPuGLL74omoXRGaqcVXXPTmTLli0MHz6cXr161erxRcukqio3btwgNjaWuLg4Ll26hNVqxWw2ExoayoABAwgLC8PT07PUKsqFQzsJHTSy1HJ3ZTVk6ztzunh14XybfhS2NfLh6XTg5vugs9lBQkICgwYNwqzT0MHfB51qJyUlmc6da5/sJkRrI0vezURcluXWWcUtbM9P8ReV3WolPyeTH/71CnfMf4bAzt15+/6RPL/yZ+xWC0sWTuG5r7Y5z6vtcn+BzcHiU2nVLmEERX/76gayhYWFfP7556Snp7NgwQL8/f1ve6zFUlJS+PTTT3Hv1J28rsOqHrvNit/VEzw2bYLzi1+I3Nxc4uLiiIuLIzY2luzsbLRaLR06dCA0NJTQ0FCCgoLKBYE1fb8UZ07XZx3KUp+Xqlrh6oYWB/n7N/Ff8+7Hw6Noyfujjz6iTZs2TJtWcVcuIUTlZIaymagqWcXLoGGgv7lF7fkpWY5Eq9eX67/rExyCrbAAS0EeZnfPUr+rbTmS4rp6DoeDb//2PGlXLqGiMuMv/yKgUxcK83J4Y/JAZr7yDt3vLMqMrkldPaPRyEMPPcR//vMfPv/8cx599NEa7X+siL+/P6Pvn8fWDB2KveIvUCetjtSOA7mUY2uQbiXi9lSUCFaXM3pWq5X4+HhnEHn9+nUAAgIC6NmzJ2FhYYSEhKD/pUd9ZWpamxVFqddVlHKrC5X8zeyqgmHoZG5gongHZUBAACkpKfUyLiFaOgkom5HqZhW3BBWVIymp2x3jeWvmcFSHnRl//Vep32VYHGzcvAUXvQaDwVDqH71eX+624n+0Wm2pQDYxJgqbxcKTn2zi4rH97PniA2b85S32rVhK2+59yo2pJoGs2Wxm3rx5pYJKd3f3W55XmQKbg13ZBhRFhVsVRVEatluJqJm6SgQrS1VVkpKSnMvY8fHx2Gw23NzcCA0NZejQoYSGht7W67C6tVmx23CLPUhwz3tq/BjVUbZrz/HNa9j0+h/58/az/N+0wXgEFG0xGb3w13QZeheopd8H/v7+nDlz5pfM75b1mSpEfZOAshlSFAWzTmk2RctvR0XlSIoV5GRzYPV/eGndQexWK0ufnE74iHGlvgCuJF7HnpOBxWLBYrFgtVpv+ZgajQa9qzuMngeAZ5u2zm43+dmZuHr5UJCTzfULZ+jQe2C582vancjd3Z358+fz6aef8vnnn7NgwQJcXFyqdW5Z+y8l86+H7im1zzRqy3r2fLkEvdHErFffK3o+FM28/nvWHQyZ9SijXnyh2VcDaEmq2tpSnAi2KzG32hUNsrKynDOQcXFx5ObmotPp6NixI2PGjCE0NJSAgIA6CZ6qs4rib83gyy2nWbu2kNmzZ9d50Fa8ugDgsNuJ3rIBz8Ci173JzcNZeN1JUUqtLgQEBGCxWMjMzMTLy6tOxyZES9eCQxLRnFVU1L2YolHQG03ojCY0Oj12m7XcjMJjD88rVY5EVVWsVqszwCz5T8nbs6wODv9yjouXLxqdnrdmDMNWWMhTn37H3hUfMWzOQi4c2Fnh2GpaV8/Ly8sZVH755Zc8/PDDGI01y9BXVZXTOQqPvPMVP/zrFQDsNhu7v/iQJ5at5+qpSLYvfZPpf34TgBOb1+AZWNResaG6lYhbq4tEMIvFwqVLl5wBZPHybVBQEP369SMsLIz27duj09XPR3/ZVZQft23n6uVLPPn4wl9eY2ZmzpzJypUr2bp1K+PHj6+zxy65ugBFr/Ne46ey5/P3AbDk5/LRoql4BAQx9Xf/xMXz5jaT4vdB8X7mlJQUCSiFqCEJKEWTVFzUvXiW49Pn5pYq7t5zzL188MgkVNXBsNmPlUouqagciaIozqXtquTZHByOSgPg/P4daLVaXlx7gKunj7Ph9T+g0WgY+/iLlQaUt9OdyM/Pj/nz5/Of//yHFStW8NBDD91y31pJ+XaVbFVbap9panwcAZ26oNMb6NhvCN+//Qrwy6zN1g30GT8NS0F+s+v53lIVL9VmpSbzxYsL0Op0KBotc/7+AXFH97Hvq4/QGY1M+8PrtAkNd25ZeLqHF+nJN5exr1y5gsPhwNPTk9DQUO68805CQ0Nve+b7dhWvonTw9+HkwX3YbDbnazo8PJy7776bH3/8EV9fXwYMGFAnj1lym4zDbidqy3rmvbXcGVA++cl3uHr5cGzT12z98H+Z+rt/Os8tfh94enpiMBhITk6mS5cudTIuIVoLCShFk6QoChH+Zmc5kkffXVnumFELnqvw3NqUIykdyKq4ePkAFC13Z2diLSjgk2dmk3rlImd2/Uhg5+54t20PqorRYcGSm43Z07PqB6lAYGAgDz30EJ9//jmrVq1i7ty51e5cU9H2gPzsDIyuN/fCqQ47AMd/+IZe46bisN3cAtAQ3UpE1YqXal29fHnyk01oNBqObljBoTWfc2bnD/zqsx/JSb/Bhn/+jvlvLQfAald555sfKDx3DIPBQKdOnbj77rsJCwvDx8enScw6BwYGoqoqycnJBAcHO28fMmQIqampfPfdd3h5eREaGlrrxyr5Poj8fjW9x08rdaHp+st7udfYKRxe+0W584veB0X7KCUxR4iak68R0WT19jGyKzG3xuVIalPUvWQg23nIXRzdsJKPFk3FZrFw74uvEtJ3MABbP3yd4B79ioLJX+THHOHf35+gS5cuRERE0Llz5xqV5Wnfvj1z5sxhxYoVrFmzhpkzZ1br/Iq2B5jcPSnMzb75vDRaHHY7J39az8Nvf07kd6ucv2tuPd9bmpJLtZoSFxGFeTkEdOzMtdNBaPV6PAOCSLl0vtS5xi4DeGB4X9q1C26SrTP9/f1RFIXr16+XCigVRWHSpEmkp6ezatUqFi5cWOvyWSXfB8lx50iIiSLy+9XcuBLHun/8N5Nf/B90BiOXIg/g275TufOL3wf+/v4kJSXVaixCtEYSUIomq7GKuhcHsuh0PPi/yyo8ZtxT/+38bwXQaRUWTb+bC2facfToUVasWIGHhwf9+/enf//+eFZz1jIsLIyZM2eyevVqNm3axJQpU24501R2ewCAX/tQki+ex2a1cO30cYK69CA7NZmc1GT+8/wDZKVcR7Xb6dE/AlO/cdUam6gfZSsaJMREsfbvL1GQnclji1fz86f/piA7i8zkBFKvXMRutaLV60FRKNQaCQj2QdtEy4Xp9Xr8/PycJYlK0mg03H///XzyySesWLGChQsX4urqetuPVfJ9MOmFvzpvf++hcYx94iU+WHAPBrMLOoORmS//u9S5JbfJBAQEEB0dLZneQtSQFDYXTV51ihTXdVH36iZIQFFAOTus9GMnJCRw9OhRoqOjsVqtdOnShQEDBtClS5dqzTqeOHGCdevWMXToUCZMmHDLL7bDyfnMmzGFxJhovILaM2Tmw+iNJvauWIrOYGTWq+/hFXhzhujohhUU5uXyV8nybnQZhXZnF5eSTv60jtjDe+hx1yR2/ucdvILakXblIk99+n2p457q4Y2XsenNThZbu3YtaWlpLFy4sMLfZ2RksGzZMnx8fHj44YdrlTBUsmtPTZRshhAbG8sXX3zBc889h4+Pz22PRYjWRmYoRZNXshzJ/oQsctWbX571VdS9unX1Kgtk27ZtS9u2bZkwYQLR0dEcPXqUlStXVnvWsm/fvhQWFvLDDz9gNBq56667qhxvbx8jTyxeWW6sfe6eXuHxA6c+UOvtAaJulFyqtVkt6PRFryWTmwd6k5nwEWMJHzGWlMux7Pnig3LnN/UtC23atOHMmTM4HI4KL6a8vLyYO3cun332GRs2bGD69Om3PTNYF9tkipfek5OTJaAUogYkoBTNQnE5kq4mK2+/9z7oDMy8byo9u4TV27JUXXQnMhqNREREEBERQUJCAseOHWP//v3s2rWLzp07ExERUems5eDBgyksLGT79u2YTCaGDh3q/F1FXVRaa8/35s6sVfDUK2RaHCTGRPP92y+j0WqdS7Mb3/gT18+fxsXTi/v++H+lzq2ookFTExgYiNVqJT09HV9f3wqPadeuHffddx/ffPMNPj4+pS6gatIxqC62ybi7u2M0mUhISSOwk71euhQJ0RLJkrdodt58801ycnKYOnUq/fv3b5DHVFW1zroTWSwWoqKiOHbsGAkJCbi7u9O/f38GDBhQbtZSVVW2bdvG3r17mTp1Kt17962yi4q7XmHDxUzsaCodX0vr+d6cqarKiRMn+PHMVdTwIVW3zKxAbfvWN4S8vDzeeOMNZs6cSa9evao8dvfu3Wzfvp3p06fTtUev2+4YdHObjPrLXsgSx/2ybaai90Fxl6Idcck4jDf3c9a2S5EQrYEElKLZ+fKrr4iLv8bQkXcwYujgZj17kJiYyNGjR4mKisJqtVY4a6mqKt9//z3H4pMxDb0XO5V/oekVsBzbQocu3cn26dDie743Z2lpaWzatImLFy/Ss19/LocMx1rNT+Pipdrm0jrz7bffpnfv3owbV3UCmKqqrF+/nlPXMzAOuRdbFW1E9Rqq7BhUYHPwY3Qcp3IUNK43L9SM9kLu6OBT7n1Q3b3a1e1SJERrIwGlaDaKZw/2xKdRqL2556klzB5YLBbnXsuKZi1jMwt/WcYrM9tS1i+tIqe2M9IjwIMCu0pc/FW+WfkVTy18jDZtAhruSYkKORwO9u/fz88//4ybmxv33nsvnTt3rnUiWFO2YsUKHA4HDz300C2PvZBRwDdxWUU/VPVap+jvUFHHoGLbt28n8vhxfvX8f3EtKYUvP/uUeXNmExZWuu5lTf/2VT2mEK2V7KEUzUKp2QNt6Q/y2+lx3NQYDAYGDBjAgAEDnLOWBw4cYNeuXQS1D+G1t94h6RZ9ute+9iLXL5xBdTi49Mzv+feiGZh1Gjq28QVrIampNySgbGQJCQls3LiRpKQkhg4dyl133eXs3lTbRLCmLDAwkGPHjt3yuAKbg/WXc24ZSBYr7hhU2UxtWloafr6+mHUaki/HolPthIR0KPeYay9Wf8/lrR5TiNZK3g2iySuePbj5JVvxMlhxj+O4LEuDja0+BAUFMXnyZF588UWmTJlCrmdb5v/7S3qNmwLc7NP9+NJ1jHv6d2xfWtSje9SC53j6P9/z6Hsr+f69/0d0WiEALi4umEwmbty40WjPqbWzWCz89NNPLFtWVNd00aJFTJgwoVwr0OJEsHHBrngZSn88exk0jAt25ZlePs0qmISigDInJ4ecnJwqjyvuGFTs+OY1vDamm/Pn9IQr/HlIMNcvnHHeZnXgfK2XlZqa6szUjouLIyQkpFxZosoeszA3h6VPTGfJwiksfWI66QlXqvWYQrRWMkMpmrTWPHtgMBjo378/h4zpuFvsztsr69Pt064jAFq9ARSFIyn5RPibUBQFPz8/UlNTG+FZiNjYWDZt2kROTg5jxoxh2LBhVXa1Ka5oEOFvqrNEsMYWGBgIwPXr1+ncuXOFx5TsGAS/9J3fsgHPwLbO23Z99q6zW1VJJV/rJe8vNTWVPn36YLVauXz5MmPGjKn2Y2p0Oub8/QM8/AM5t287u5a/x7Tf/2+VjylEa9a8v3FFi7f/UjL/emgCL48I4fqFM5XOGmxf9iZLFk7hvXnj2fnV0hYze3Czi8rNL63K+nQX+/G91xg+ZxEZFgcFv/Q39vPzkxnKBpaXl8fatWv54osv8Pb25umnn2bkyJHVbpGoKApmnQYvoxazrvKs/ebAy8sLo9FYYcecYmU7Bp3YvIZe46c69wynXbsMioJXUHC5c0u+1otlZ2djtVrx9fUlPj4em81GWFhYtR9TbzTh4V8UCGv1BpQypb0qekwhWjMJKEWTpaoqp3MUHnnnK+dyb/GswZMfb2TUgufYtfw9AO585Dme/HgjT//nBw6u/g+HrufQEvLNLBV8YVXUp7vYkXVf4rDZ6H/vLAAKfznf19eXGzdutIi/SVOnqionT55k8eLFnDt3jmnTpjF//vxWXSRbURTatGlTZUBZ8rXusNuJ2rKePhPuc9628z/vcufDz1R6fmGZ90rxjLyvry+xsbG4u7uX6xd+q8eEomLz25a8zvC5i275mEK0ZrLkLZqsfLtKtqrFzdvPeZveaEJfwaxBcXcRu7UQn3YdybIrFNhVzLrmO6sDpbuoFKuoTzfAhYM7id6+iflvfe48triLip+fHxaLhZycHNzd3cvdp6gbGRkZbNq0idjYWHr16sXdd9+Nm5tbYw+rSQgMDCQ2NrbS35d8rUd+v5re46c5S2elXrkIgHfbDhWeC+U7BqWmpqIoCl5eXsTGxhIWVr4JQlWPWWzta79h6KxH8etQenazoscUojWTgFI0WRXNzhUrnjWY8de3nbdtfONPRG1Zz7DZjwFFswfmZv4KN2sVvAwa3n5yNokx0aRcimXIzIcZ+eATLH38PmefboC1f38Jk5sHHz89E73RxK8/Wu3souLnVxSU37hxQwLKeuBwODh48CA7duzAbDbzwAMP0LVr18YeVpMSGBjIoUOHsFgs5ZKR4OZrPcPiIDnuHAkxUUR+v5obV+L44sUFmNzc+eSZ2SRdOEPqlYss/OBb9EYTUHHHoNTUVLy9vcnLyyM5OZmRI0fW6DE3vP4HXDx98AnuWGEL0+bQpUiIhtTMv25FS1bR7FyximYNpvz270x8/i8seWwyEdMexKht/kuMiqIQ4W/m0XdXlvtd2S+53244XOInlYH+ZueMjLe3NxqNhhs3btCpU6f6HHKrc/36dTZu3EhCQgKDBw9mzJgxGI3SI72s4sScpKQk2rdvX+73xa/1bddymfTCX523v/fQOJ79cqvz59UvP8sd859xBpNAqdc6FG07SM7IwjMwmLOxlwAIDS1de/JWj3nnw8/yxpQIQvoNIfbwbjr0GcjE5/5S6WMK0dpJQCmarJKzByVtXfJGuVkDm6UQncGIzmBEbzLj6+bSYmYPevsY2ZWYW2VtwlJUFdVuw3L5NKr/ABRFQavV4u3tLZnedchqtbJz50727duHv78/CxcupF27do09rCbL398fjUZD/PVk3APaVtgju6LXeslgEmDW395z/ndxx6BePkUBfHHzg6Mp+WR0HQ1AggrmCY9wOldDb6OjXPWHqh7z74fL7/ks+5hCiCISUIomq3j2YN6MKc7l3vCR49ix7M1yswYb3/gTKZfOY7da6XfP/YzqHNRiZg9MOg3TO3lUv5OHohCaFceWPVtJSbjKvffei06nk0zvOnTx4kU2bdpEZmYmd911FyNGjKh29nZrVBToWTGOm89unRu7T6cD5btc1fS1DkVF3k06TenmB2U4jK6VNj8o9ZiVtFys7DGFEDdJ60XRpBXYHCw+lVbt2bnm1uO4Jqr6wixWsovKiRMn2LRpEwEBAcyePZtDhw5x+vRpXnjhhYYbdAuTn5/PTz/9xPHjxwkJCWHy5MnO/amiYrfTI7vq17oKKKVe63XROvGbHfs579YRRaev9Nzm2KVIiIYiAaVo8lpyj+OaKrA5iE4r5OD1HLLtN7+YvQwaBvqb6eVrxKS9GUgnJiby9ddfY7Va6devH/v27eOPf/wjen3lX5qiPFVVOXXqFJs3b8ZmszF+/HgGDBjQYmbB60ttAr3i1/qRlPxS214MtgLuDPF1vtbLXnTGHdnL9qVvoqoOhs99HFdvX37496soGoX7/vAGgV16oC9z0ZmcnMySJUsYMWo0Ht0iyj1mZe8vIcRNElCKZuGWs3OqiqI6mN3Fu8UGkyWtWbuWS1cTWLDoccx6XZVdVPLy8vjmm2+4eLGo9MqTTz7pTJAQt5aZmcl3333H+fPn6d69O5MmTZJM+Wqo6eoCUC7Qg6Jgvrhj0I6tP5Fw+SLP/OpXzt8fTs5n27VcAKwF+Xz1u0U89H+fOkuJfbRoKvPfWk5hbg5r/99LzgS3ccGuDAwwo6oqn332GdnZ2Tz99NPodLpSj9ncuxQJ0VDkUks0C7fqcdxVTaNg8ye4FmQ0zgAbUHp6OtFRUYwYPBAfs+GWXVRcXFyYN28eAwcOBOD777/HarU21HCbHFVVybM5yCi0k2dzVFrsvbgU0Pvvv8/169eZM2cOs2fPlmCymop7ZKcnxPPamG589Pg0Pnp8GjnpN9j/9ccsnj+BxfMnEL1to/Ocinpkl+wYFNY+mBspKeTl5QHlWyfGnzyC3mRi+QsP8fmLj5CVch1Fo8Xs4YVXUDvyMzOcxx5JyUdVVaKiorh8+TL33HOPs893S+pSJERDkaQc0WxU1ePY4fDkyh4XduzYwZw5cxp7qPVq3759mM1mBgwYUO1zNBoN9957LydPnuTatWt88sknzJkzBy8vr/obaBNTKgO4zHJmycQQKFoC3bBhA9euXWPgwIGMHTsWk8lU2V2LMsoGep0ihvHQG586fz6w+lOeX/kzdquFJQun0GvsFOfvquqRHRISAkB8fDzdunUr1zoxOy2F1CsXefqzzVw4uJOtH76Oye3mBYBGp8VmtaDTG8iwOMjILWDLli306NGjXFvG1kxVVfLtKha7WmE2vhAVkYBSNDtFswdKqaLlWq2Wu+66i3Xr1nHt2jWCg8v3+20JcnJyiIyM5M4777ytfZCBgYEYDAZSU1P56KOPuP/++yusz9fSVLVlIsPicGYAT+3gypXI/ezduxcfHx8effRROnSovDuLqFjZQO/yiUMseWwyHfsPZcKzf8InOARbYQGWgjzM7p6lzi3ukV1RlytPT088PT25fPky3bp1K9f8wOzuQUjfwej0BjoPvpOtH76O0eVmpyKHze5cCgfYtW8/hYWFTJgwoa6eerNWk4suIcqSV4ZoMXr37o2/vz87duxo7KHUmwMHDqDVahk8ePBtne/r60tubi6PP/44bdu25YsvvmDv3r0tusd3cWLIrfbyWR0q317MZt+5eO644w6efPJJCSZvU8lAz92vDS+tP8QTH28kJ/0Gp7Zvotsd43lr5nDefWA0I+c/Xe78qnpkh4SEcPnyZaB884N2PfqTfPE8qqqSEBNNQGhXHHYb+dmZZFy/htnTq9TxJ44eZtSoUXh6lg5qW6O4LAuLT6Wx7Vpuudq/xRddi0+lEZdlaaQRNj3V3T7TWsgMpWgxNBoNd911F6tXr+by5cvO5bGWoqCggMOHDzNo0KDbXn718/MjOjoak8nEgw8+yI4dO9i6dSuJiYlMnTq1wpZ4zVlSajp3jRpLUlwMT3+2mcDO3Vn1l2c4t3cbY554ieFzFwFFhfE3vv5HbsTHYXJ146Wt36Fr5jMxjblsWTLQ0xmMQFER8J5j7uXCwV3EHtrNS+sOYrdaWfrkdMJHjCs1tqp6ZHfo0IGoqCgKCwsxGwylmh+4evvSc/Q9fLRoKoqiMPPlf5OVnMh/nnsARYFpf3jdeT+awlx8PNwYOnRoHT/75qe62fhWB6yOzaqw7FJrIjO5FZOAUrQo3bt3JygoiO3bt7NgwYIWte/n0KFD2O32Wn0B+vr6YrVayc7OxsPDg7FjxxIUFMS6dev4+OOPmTNnDj4+zb9lZbG4Ai0Pv/MVP/zrFedtE5//C2GDRlKYl+u8bd/KZYSPHMf0uyYBRYkhAwPMDT3cOtEUvuxKdrkqzM3B6Fq07Hwp8gBtw3sRf+IwOqMJjU6P3WZFVVXne/VWPbJDQkJQVZUrV67QuXNnZ+vEYsPmLGTYnIXOn33bd+Lp/3xf5l5ULOeOMeuee1p9QfoCm4O1F4uCycsnDvPje68BkJVynW4jxzP5pdcozMvhjckDmfnKO3S/cwJrL2a1yFq/1VHd7TNlC+i3Bq3v1SBaNEVRGD16NPHx8cTGxjb2cOqM1Wrl4MGD9O/fHzc3t1ufUIniItwlO+b06NGDRYsWYbPZWLp0KefPn6/1eJsCVVU5kWHDzbt04XEP//Ilk87t286lyIN89Pg0Dn7zmTMDuLlpKsuWxV2uAC4dP8C7D45lyWOTyUq+Tt+JM+k55l4+eGQSHz56D8NmP4ZGc/Or6FY9sn19fXF1dXUue/f2MaKv6TeZzUZXd0X62nMzGx8gpO8gnli6nieWriek7yB6jC66wNq3Yiltu/dxnlNRNn5rUP3tM0Uzua1te4DMUIoWp3PnzrRv357t27cTFhbWImYpjx07Rn5+PsOHD6/V/Xh7e6PRaLhx40apZJyAgAAef/xx1q5dy1dffcWYMWMYOXJks/7blU0MqUpm0jWGzHyYu5/7Mx8/NYNud4znuHodL1czrq6uuLi44OLiUirwaWqa2rJlcY/s8BHjCB8xrtTvRi14jlELnit1W3V7ZCuKQkhICPHx8UDZ1qTqL/dUBVVFjdzCpAem1/Qp1ZvG2p5QNhu/mM1q4Wp0JDNffoeCnGyuXzhDh94DSx1TVTZ+Y6jvv2HZ7TPeQe1Z/uv5OOw2NFod97/yDt5t25faPvO5mxtHtnzXamZyJaAULY6iKIwZM4bPPvuMM2fO0KNHj8YeUq3Y7Xb27dtH79698fb2rtV9aTQafHx8KuzpbTKZmDt3Ljt37mT79u0kJCRw3333YTRW/QXfVJXNAK6Kyd2T0EF3oNXp6NB3ECmXLrDh5CXIzy59nMnkDDBLBpplbyv+d3Fdw/pWctmyOlSo92XL2vTlvpUOHTqwZcsWbDYbOp2OUA8DMzu58c2FdND88jevIJjQKSp5+zcyvn/3JlFPtLG3J1R20XXh4E7CBt+BRqNh74qPGDZnIRcO7Cx1TFXZ+A2pof6GZbfPaHQ65vz9Azz8Azm3bzu7lr/HtN//b4vaPlNTElCKFqljx46EhoayY8cOunXr1qRnlm4lKiqKrKwsRowYUSf35+fnR2pqaoW/UxSFu+66i6CgINasWcOyZcuYM2dOs+lXraoqiYmJnD17ljOxF2HgtGqdF9J3MIkx0XQecieJ504xePp8np83CUdhHnl5eeTm5pb6d/E/iYmJztttNlu5+zUYDBUGmpUFoXq9/rZmVYqXLbNTk/nixQVodToUjZY5f/+A+JOH+fnTd1A0GvrfM8uZiFS8bFmfX3ahHgZmhXnUqAd9dYSEhGC327l27Zoz+S4z9hSFP/6EoVNPzOEDKVBu3ldRcGEictMqXJXC266SUJcaYy9eYWEhSUlJXL9+nevXr5OQng197i53XPSWDURMfYCC7Cyun4tm7OMvlgsooSgb39yIUURD/Q0r2j6jN5rQ/7J9Rqs3oPzyHXNu33ZyUlPY8+WH9L17Bl4PPtqkZnLrkwSUosUaM2YMy5YtIyoqir59+zb2cG6Lqqrs3buX8PBwAgIC6uQ+fX19iYqKqvKY8PBwHn/8cb7++muWLVvG9OnTCQ8Pr5PHr2t2u534+HjOnj3L2bNnycrKwmQy0TU8nCuKncXPPkRiTDQpl2IZMvNhUi5f4MzOH1EddtKuXmLyS68xasFzfPPyc2z98J90HnIXoaGheLmaUNzM+Pr6VmscFoulwuCzZBB648YN58+FheX3oOl0unIBZ1UzoMXZ/sXLlq5evjz5ySY0Gg1HN6zgyPovOf3zZhZ9uAaDiyvvzh3N0BJ7Fhti2bK4y1VFfblvt0d2QEAARqPRWc3BZrOxe/duwsM6ERMTybR+XejUNbxU84PIyEgSr1xmwYIFjZ6IU9/bE1RVJTMz0xk4FgeRGRkZQNFKRUBAAH5BwWSUOddutXL19HFmvPxvrp6KJDMpkU+emU3qlYuc2fUjgZ274922PVB1Nn59a8gtHlkFlkq3z9isFrYteZ0Zf30bqHj7TEG4V6PP5DYECShFixUcHEx4eDg7d+6kV69ejf4lcjvOnj3LjRs3mDatejNt1eHn50dWVhYWi6XKMkF+fn4sWrSIdevWsXLlSkaNGsWoUaOaxJW2xWIhNjaWs2fPcu7cOQoKCvDw8KBbt25069aNDh06oNVqOZycT94vvZtLmvjcX0r97O4bwKPvfe38+VaJIRUxGAwYDIZqdx+y2WzOQLOyIDQzM5PExERyc3PJzy+/102j0WD29MZ2x9yin0u8xgvzcmgT2o2UixcozM1Go9WiM5lKzdY31LJl2S5XB49Gsufn7Tzx2xdva/VAo9HQoUMHZ2JOZGQkmZmZjB49mpiYGPz8fDHrNM7Zs7y8PLZu3UqfPn0avZxYXW9PsNlsJCcnO4PG4n8XX7CYzWYCAwPp1q0bgYGBBAYG4ufnh1arRVVVlpxOLxUsXTi0k9BBI4v+xr0j+NXyzQBs/fB1gnv0cwaTt8rGr08l/4ZxR/ayfembqKqD4XMfR1Ud5Wbkb/U3VFWVvLw80tLSSE9PL/dPtg2M4x+ucCxrX/sNQ2c9il+Hok5LFW2fKbT3bNSZ3IbSCp6iaM1Gjx7Nhx9+SGRkpLOXdXOhqiq7d++mY8eOtGvXrs7ut3j5OjU1laCgoCqPNRqNzJ49mz179rB9+3YSExOZPn16o7QhzM3N5dy5c8TExBAbG4vNZiMgIIBBgwbRvXt3AgMDywWBxYkht8rKLFbdxJC6oNPp8PDwwMPDo1rHOxwO8vPzywWdqXkWjpc4LiEmirV/f4mC7EweW7wajVbH4vkT0Gi1jF74m3L325DLlsVdrtp6u2MvyCM7O/u2i4qHhISwc+dOLBYLu3fvpnfv3tjtdoBypa+2bduGw+Fg/PjxtX4OtVUyq/pK9DE2vvEntDodHgFBzH51MVq9nvSEK7w5fSjPfrmVwM7dndsTurs6ys063rhxw1mRwNfXlzZt2jBixAjatGlDYGAg7u7ulV4cFWfjlyy7VFESFcC4p/671M+3c9FVV4r/htaCfHZ//j4L3lvp7ID03rzxFc7IWx1w8GoawbYMZ+CYkXHzv61Wq/P+XV1d8fb2xtvbm44dO+Lq5cv2Csaxdckb+AR3pM/dNxO8Kto+05gzuQ1JAkrRorVp04ZevXqxa9cu+vXr12BJErejbJZiwqWLJCYmMm/evDp9nJoElFD0pXPHHXcQGBjImjVrWLp0KXPnzsXf379Ox1WR9PR0YmJiOHv2LPHx8aiqSocOHRg9ejTdunW7Zc3M+kwMaWgajQZXV1dcXV1L3Z5nc3A8Ks35c9vw3jyz/EdO/rSOnz/9N5ciD/DCql0YXVxZ9tQM+kyYhtnDy3n86agThLZrS0BAQIPtNS5OLktPT7/tgLJDhw5YrVZ+/vlncnJyGDVqFMeOHcPLy6vU+/zatWscO3aMiRMn1qrkVl0om1Xt2aYtjy9Zg95kZvO7/8PpnT/Qe9xUdn32LiF9B5c8ka3nE/lu6+cA6PV62rRpQ4cOHRg8eDCBgYEEBATcVmOCpnzRVZGSf8P4k0fQm0wsf+Eh9GYX7vvD6/iHdK5wRl5VHey9mo1125doNBq8vLzw8fGhQ4cO9O3bFx8fH7y9vfHy8iqXiKiqKsdOp/P2k7Od22fCR45jx7I3Cek3hNjDu+nQZyATn/tLhdtnGmsmt6E13W9XIerIXXfdxeLFizl8+DDDhg1r7OGUU1mWorZQh3e/kbTt0LFOH684U7miTO+qdOnSpdS+yvvuu4/u3bvX6dhUVSUpKcm5HzIpKQmtVktoaCiTJ0+ma9euNQ4K6isxpKkoWUTcZrU4Z2pMbh7oTWa0ej1GVzd0egMarQ5rYQFmAFVFU5jL1i2bUFUVg8FAcHAw7dq1o3379rRr1w6zuX4SdkoGlB07dryt+2jbti06nY6jR4/St29ffH19SUtLK7Xn1eFw8N133xEYGMigQYPqYui1UjarumRNVK3OgKJoSLt2GRQFr6DgmycqCrh4MHXmLDoEtcHHx6fOZgeb20VXyb9hdloKqVcu8vRnm7lwcCdbl7xBnwn3VTgjrygaFFdPnnruBfy9PGp08VQ8k/vouysoWZZq7OMvlju2LrbPNFcSUIoWz9fXl379+rFnzx4iIiKaVHvBqrIUbQYz9g59eP90ep13Xagq07sqPj4+LFy4kA0bNrBq1SpGjhzJ6NGjazWz5XA4nEk1MTExZGRkYDQa6dq1K3feeSdhYWG1Ll1UH4khTUXJZcvEmGi+f/vlotkZg5GZL/+btuG9WfLYZBSNli5DR90MYhSFMWFt6BPxexISErh69SpXr17l6NGj7N69Gyh6nZQMMP39/evky1Gn0+Hu7k56evpt34dWq8XDw4O0tDTuvPNOoGjWvWSAevToURITE3nssceaRKUHi63iK5r0hCucP/AzYxb9hg2v/4G7Hn2erUteL3dcpy7heBnrfi94c7roKlkOzOzuQUjfwej0BjoPvpOdn9x6Rt7o6n5brwUl4TyqzR9Fq6uwJFW542ncmdzGIAGlaBVGjRrFyZMnOXDggPPLp7HdKktRUYo+9OqjELWvry8JCQm3da7BYGDmzJkEBQWxbds2EhMTmTlzZo1ms6xWK3Fxcc4gMj8/H3d3d8LDw+nWrRsdO3as8ySqsokhJTOAm/sMQvGyZfteA3jy442lfjdg8mwGTJ5d6raSX3YGnYaOHTs6AzFVVUlPT+fKlStcvXqVK1eucOLECVRVxWg00q5dO2eQGRwcfNv7aX18fGoVUFosFrKzs9FqtXh5eeFwOEhLSyMiIgIo2nO7fft2+vXrR/v27W/7cWojLy+Pa9euce3ataKgPfkGjHqw1DEFOdms+suvmPW3d8m4fhUA77YdKry/+tyL1xwuujIzMzl6MhrciipOtOvRn92ff4CqqiTEROPdLoTC87kVz8j/ouzf8FYF0VVV5eeff2bXrl10GTaaK/49msVMbmOQgFK0Cp6enkRERLBv3z4GDRpUb0t51dXYhaj9/Pw4efJkqR7KNaEoCiNGjCAwMJBvv/2WpUuXMmfOHNq0aVPpOfn5+Zw7d46zZ88SGxuL1WrFz8+PiIgIunXrRtu2bRsksCtODGlJWZd1uWypKAo+Pj74+Pg4y20VFhaSkJDgDDIPHTrEzp1FdQkDAgJKBZm+vr7V+v/o7e1NSkpKtZ9jWYcOHcJmsxX19b6eAloddq0eH5+iJe+tW7cCMG5c+QST+mC1WklMTHQGj9euXXMGzGazmeDgYAb27c0pxU6uWnSxZLfZWPGHxxn7xG/x79iZ6G2bSI49yyfPzCbpwhlSr1xk4QffojeaGiSruiledFmtVs6cOcOJEyeIi4tDr9djHNcBq96Eq7cvPUffw0eLpqIoCjNf/jeXTxyueEae0pnp1SmIrsPB+vXriY6OZty4cQwfPpyL2dZmMZPbGBS1OTasFeI25OTk8M477zBkyBDGjh3bqGM5nJxfKrPy+OY1bHr9j/x5+1kykxJY/4//pjAvh479hzH+6d85jxsX7FonhajPnz/PV199xX/913/ddlJEsfT0dFatWkVqaipTp06lV69ezt9lZmY690NevnwZVVVp164d3bp1Izw8vNkUTG8uqtpCUawuvuxUVSU1NdU5g3n16lWSk5OBouCp7CxmRdtMdu3axcGDB/ntb39b48cvLCzkX4s/IKDfCK4bfFBcb76GPXTQ2WBh/zefce/d4+uluoPD4eDGjRvO2cdr166RlJSEqqrodDqCgoJo27YtwcHBBAcH4+3t7QzISr73j21axaY3/0xg56K9yEPvX+DMGF798rPcMf8Z5+/q6r3fHKiqypUrVzh+/DinTp3CYrEQEhJC37596dGjByczHaU+P6ur+G9YrfeJAi7n9pF2Porp06eX6rhWYHM06ZncxiIBpWhVtm7dyqFDh3j++ecbLeOzbO03h93OV/+9kPTEeJ77ajsr/vAE9/z6b3gGlM/A9jJoeLKHd61nC9LT03nnnXeYN28eYWFhtbovKJpF2Lhxo7OIvJeXF+fOnSMxMRGNRkNoaCjh4eGEh4c3iZZ3LVljfdkVFBRw7do1Z4B59epVCgsLURSFgIAA5z7M9u3b4+3tTXR0NGvWrOH3v/99jffIrt97lNOGtig6Pahq+T1tqgoOO7M6exHmVbsSV6qqkpWVVSp4TEhIcJaZCQgIKBU8BgQEVLldo8DmYPGptBpnVddnm8ymIjMzkxMnTnDixAnS0tLw8vKiT58+zizsYrX5Gybk2ao3k6+qgMpYLxuDQttWcojaZGZym4IWtOgjxK2NGDGCI0eOsGfPHiZOnNgoYyib6Xli8xp6jZ/Kns/fx261kp5whe/f+is5aTeY8MwfSpUPqatC1J6enmi1Wm7cuFHrgNLhcJCYmIirqytms5kTJ06gKArh4eEMHz6cLl26NNt+4M1RYy1bmkwmwsLCnK8nVVVJSUlxzmJeunSJI0eOAODi4uKcnT516hS9e/dGr9dX63HO3sjhjLk9SnG2bUXPSVFAq+WbiznMCtPUaO9xfn6+c8m6+J/c3KLZME9PT4KDgxk1ahTBwcEEBQXV+LXd3LKq65vFYnEuaV+8eBG9Xk+PHj2YMmUKISEhFb5mb/dvCFR/q5GiAAq7sg30tjkq3R7S0rbP1Ib8GUSrYjabGTZsGLt372bYsGG1Xu69HSWzFB12O1Fb1jPvreXs+fx9cjNSSTwXzYP/XIpWr+ez/5rHs19sKXV+XRSi1mg0+Pr61rh0UDGbzVYqqSYvLw83Nzd69OiBt7c3e/fuJTExkTvvvLPSL9xbbYYXtdPYX3bFM5MBAQEMGDAAKArWimcvL126BMDGjRvZtGkTgYGBzhnM9u3b4+npWe71UGBzsCE+F5XqvFaUanWZuX79eqngMS2tqKanyWQiODiYAQMGOGcf62pVozllVdcHVVWJj4/n+PHjnD59GovFQseOHZk2bRo9evSoViWO2/kb7rhwnX89dA/JcTE8/dlmvIPas/zX83HYbWi0Ou5/5R2827bnUuQBvnv7ZTQaLZ0ihjHqn/9sNdsNakMCStHqDB06lEOHDrFr1y6mTJnS4I9vKLGxPvL71fQeP81ZxsLs7olv+054BRV1xtHq9NhtNrQlCjXfKtOzuoGar69vjUoHFRQUODvVnD9/HqvVio+PD/369aNbt260a9fO+Ti9evVi1apVfPLJJ0yePLlUL/XqbIZvqbMxrZ3ZbKZLly506dIFVVX5xz/+QUREBL6+vly9epXY2FgOHz4MgJubW6m9mG3btuVYUh52NCiKwuUTh/nxvdcAyEq5TreR49EZDBzbtIp+k2Zyz6//BuDsMhPhb6pw36PD4UCr1RIUFETnzp2dwWNd1nqsSHPIqoa6vfDLyMhwLmmnp6fj5eXFsGHD6Nu3r7M2aU3U5G+oqiqncxQeeecrfvjXKwBodDrm/P0DPPwDObdvO7uWv8e03/8vuz57j9mvLsa/Y2eWPTmDrafiiPDvIRe8tyABpWh1jEYjI0aMYOvWrYwYMeKW3VbqWslC1Mlx50iIiSLy+9XcuBLHD++8iounN/nZmWh1OmyWwlLBZFWZnjUN1Pz8/Dh+/HiVY83KynJ2qrl06RIOh4Pg4GDuuOMOunXrhp+fX4Ufsp6enjz66KN89913rFu3joSEBCZMmMDlXHulMwoZlqKN9rsSc+u87qZoeoqzya1WKwMHDnQmz+Tm5jpnMa9evcrOnTuxWq1oNBr0Yx4Cc9Ee3JC+g3hi6XqgKIGlx+hJ+Id0psuwMcTsKTGrr6rsiEtmy8dfYbFYgJv1Nfv3709wcDBt2rSp8zJV1dEUs6qL1dWFX/GS9vHjx7l06RJ6vZ6ePXsybdo0OnToUOvnWd2/Yb5dJVvV4uZ9MxFQbzSh/yULXKs3oPxyYR8Q2pX87EzsNhsOh518ralBet43dxJQilZp0KBBHDhwgJ9//pkZM2Y06PJryULUk174q/P29x4ax9T//geXTxxi+QsPYbNZGffU70qdW1nXhaqyFisL1Pz8/MjOzqawsNC5LK2qKjdu3HBmZickJKDRFNUpnDhxIuHh4dXuPa3T6Zg6dSpt27Zl8+bNxOc5yAgdcsv9S/VRd1M0Td7e3mRkZJS6zdXV1ZnABUV7dJOSkjgbe4mDLh6UffXbrBauRkcy8+V30Gg0pFy6UPoARcFudGXoHaPoGBxEUFBQo/Sir0pjb08o63Y+T0pSVZXLly9z4sSJoiVtNLQL6cQ902bQp3vXetlTXdXfMC8vjwvXrgMVf3bZrBa2LXmdGX99G4CeYybzxUsL0BmM9Bk/DbO7Z4P2vG+u5M8jWiW9Xs8dd9zB9z9txTsumZh8XYMuv1bUP/fZL4vq5oX0HcyTn2wqdXxVXRduVSC9WNlArbhF3Y0bN3A4HM79kKmpqej1erp06cLQoUPp0qXLbX8BK4rCoEGD8PZvwzcplWTkVqCu626Kpsnb25uzZ89WeYxGoyEoKIgjp2LAtfzvLxzcSdjgO27Z/aT/oCH10mWmpbndzxMoqh5RvKSdkZOHW/gATOMfRtEaSQG2qXD0Qi4R/o56+2zNzs4mMTGRxMRErl+/TmJiIpmZmWAwYZy4sMJz1r72G4bOehS/DkUJZd+9+WeeWLoe7+AQvnxpAUlxMRh7N722vU2NBJSi1fLu0huj0o6DGQoopS/F63v5ta4yPW+3QPqT3TzIysoC4PPPP6ewsBAXFxfCw8OZMGECoaGh6HR19/GQ7uIPulwKsrP4+Ff3OzfFB3buzu7P3+fU9k0YzK7c/7d3nYWIi/e+yWb4lsvb25vMzEwcDkeVAWFOTg4njx1FO75Xud9Fb9lAxNQHbvlYxXuPJRmscrf1eRKXxZ3qNU6fLFrSNhgMdBgwHGtAD6zl5pPr7rO1uJxTcfBY/E9OTg5QlFTVtm1bevbsSVBQEIGBgXyTpCk1cQCwdckb+AR3dNb/BEBRMHt4odFoMLl7oC/Mqfei8i2BBJSiVYrLsvDtxRzQ6qCCD71i9bn8WpyluCY2E6tz4q78WKrK9IxKK8TqgOzUZL54cQFanQ5Fo2XO3z9AbzKz7v/9lpzUFPw6hDL9z28WPSe7yrvfbsZyPhJFUfDz82PChAm0a9euXvodq6rK0ZT8oudiMpfaFJ99I4mzu7fw5CffcfVUJNuXvcV9f7jZw/hISj4R/ib5wm+hvL29cTgcZGVl4eXlVelxe/bsQeuw4qlXyLTeDHfsVitXTx9nxsv/rvJxvAwaUFUOJ+dLMlgV9l9KrlYW9OqXnyUpNgaD2YXwkePIH9CPDorC9OnTMbXrzNrLeXW6taW4HWjZ4DE/v+hzxdXVlaCgIPr3709QUNG2hoqqBEQ48pk3YwqJMdGkXIolfOQ4dix7k5B+Q4g9vJsOfQYy8bm/MObxl/j0ublodTr8O3Zh1tg75DOoGiSgFK1O6avwog+J9IR4Fs+bQEBY0b6tB1//2Ll5uz6XX0M9DHS+dpgL+QpuPYbUKNOzZKDm6uXLk59sQqPRcHTDCo6s/5Lc9FRGPfIsbbv1KXeuKXwgj40dyubNP+Di4kKHDhX3Dq4LJetuavX6Upvi0xOv0iYsHEVRaNutD9+++l+lzq2rupuiaSpOiCsuYl2RrKwsjhw5wh133IFLgEupDikXDu0kdNBI54XQ3q+WcGzTKvIy0shMTuSBf3wEQCd3Pe+fTpdksCrUJAsa4P5X3inq4qOqeOgV5vfypdCusvhUGmkVfJ7aLZZyHcAq+mx1OBykpqaWChyvX79OYWEhAB4eHgQFBTFkyBBn8Ojm5latgK+3j5EnFq8s9ToY+/iL5Y7rOmw0XYeNdm416u3btPbcNlUSUIpWp3hWr6xOEcN46I1PKzynvpZfbTYbZ6NPMnjwYEb38K5RpmfJQE1TIkO1MC+HNqHd2PPlh1gL8rkRH8eIB5+k5+h7ig5QFAoVAx6+Pvj6+RGfmERGob3elv9K1t0sy7ddR66ePoHNUkjs4T3kZ6aXO0Y2w7dcxbNIxT2vK7Jnzx70ej1DhgwBnaHU3uPwEeMIH3GzV/eIB59kxINP3jxZdaA6HESmqlS1EgGNmwzWFJbha5IFraCw5n9+g9HFlXt+/Qp07UWBXSW6xGdr2c/TFX94gml/fKNcBzCrQ2VzVCyGxPNcv36d69evO7sQeXt7ExQUxIgRI5zBo6trBRtpq0mKytcv+ZgWrUrJWb2yLp84xJLHJtOx/1AmPPunch/o9bH8GhMTQ2FhIX379q1xpmfZQC0hJoq1f3+JguxMHlu8mivRx7jnN68S0KkLHy2aStfhY9Abb15pH07O50JgfwraGvjwdNEXen0s/xmq2Hvk6u3L0FkL+ORXswgK74V/xy7ljrlV3U3RfGm1Wjw9PSsNKDMzMzl27BijRo1yJobVKCBQNGgUFYeqkpF4pdysWeSmVeX27zZkMlhTqsla1YVf2SzoSb/+G65ePiRfPM/ql5/lmeU/UmhzlPpsLfl5Ou6p31XaAUxVVU7nafC4eJG2QUF069bNuefRbK77/dOtvah8fZKAUrQqZdseFnP3a8NL6w+hN7mw5n9+zantm+g1tnTR8/pYfj1x4gTt2rVzZlzXRNlArW14b55Z/iMnf1rHz5/+G882bWnfsz8AfiGdyUpOxLd9J+fx+5LyQVO63V19LP+VrLtZkQGT5zBg8hzijuzFxav036GqupuiZfD29q40oNy1axdGo5HBg2+2Hy279xhUFKV80KXXQC9vI5Gphc65yZKzZpXt322oZLDaluapa1Vd+JXNgnb1KtqqENCpCwoKDrudKwkJZFhcgPKfpye3rK+0A5iiaFBcPVn45NOYGyh4bi5F5ZsbCShFq1LZVbjOYASKSvL0HHMvV6KOlgsooW6XX3Nycrhw4QL33HNPjc/NyMjg8JEjYA5FNbtht9nQ6Yu+dExuHuhNZoK69uRGfBw+wSGkXb2Eu1+bCu6p4i+Rulz+K1l3E+DT5+Y6N8UPmfkw5/ZtJyftBt5B7Zj6y/6sYpXV3RQth5eXF9evXy93e3p6OsePH2fMmDHl6haGehgIOr+Taw4ztnbdUFxvtlAtDgh6+hj4LCaz1HklZ8263zWp0v279Z0MVpvSPPXFUZCH0V5Ioab041SUBV2Qk43JzZ2ctBTsVgsU5LDmm/UYxz8MlP88jTu895YdwBp6a0tTLirfXElAKVqVyq7CC3NzMLoW9em9FHmAgE5dKzyuLpdfo6Oj0Wg09OzZs1rHq6rqbE137tw5jEYjwcN8uKZ4kBgTzfdvv4xGq0VnMDLz5X9TmJvD2td+g7WggEHT52Mwu5S6v+Ob17Dp9T/yu+8j+fS5uQBYC/Kx26w8v2JHnSYjlay7+ei7K0v9rsKSL6qKXqNUWHdTtCw+Pj6cOXOm3O27du3CbDYzaNCgcr9LTk7mwplTBAUFoZxNZN6Cxzh4NJI9P2/nid++iEajIc/mKDXzVHbWLCMhvtL9u/WZDJaUms5do8aSdItM6rWvvUjK5aIi7X+OPkb8lasE+dd8JQOKPjssFgs5OTnk5uaW+ndaWhpXr14lIyMDbac+fP7R4ltmQa/689PkZaXjsDu459evMMDXSI/58/jql+uCsp+ngV26c/V0ZKUdwKDxtrY0taLyzZn8CUWrUtny66XjB/hp8T8wmMx4B4cw/uk/lDu3rpdfT5w4QdeuXW+5Tyg/P5/jx49z5MgR0tLSaNOmDZMnT6Z37944NDoWn0qjfa8BPPnxxtIn+sPjH62r8D4ddjvRWzbgGdgWvcnsbGF3dMMK0hOvOo+rq+W/mm2GVwEVXfRO8kPGYrqNHr+i+fD29qagoID8/HzneyEtLY0TJ04wYcIEDIbyM3P79u3D3d2dtLQ0hg0bhlmnIdDTFXtBHvn5+bi6upZbjahoFaKq/bv1NWMWV6Dl4WpkUheX+UpPiOebV17gmupCyXSWioLEigLG4n/bbLZS49BoNGg0Gmw2GxqNhsDAQILbuGF45yscikLx6kVFWdAP/+sL4GbDhbu6+GDUKnilpZNhcVT4eerbvlOlHcBka0vLIAGlaFXKLr8WK5stWpG6XH5NSkri+vXr3HXXXZUek5iYyOHDh4mKisLhcNCjRw+mTZtG+/btS42jplmLACc2r6HX+Kns+fz9UrdHbd3APf/1t1K31dXyX/U3wyuM81XYtTeRpUuXMnfu3HotayQal5eXNxhMXLmRTrsgI2atws6dO3F1dSUiIqLc8RkZGURFRREREcHhw4fp0qUoECxuCZqVlYXJZCLxSjzg7jyvolWIqvbv1seMmaqqnMiwVSuTuljUlg30HjeFnZdSOb99D7m3CBJdXV1xc3PD1dUVf39/Onbs6PzZzc2N7OxsTp48SWxsLG5ubgwfPpz+/fs7A/ce1VyOL1YyC7r4s7Wiz9OKOoAVk60tLYMElKLVqajtYVWqant4u06cOIGLiwudO3cudbvNZuPMmTMcOnSIq1ev4uHhwR133MGAAQNwc3Or8L6qG6gVc9jtRG1Zz7y3lpcKKPOzM8m+kUxAaOnl/rpc/qvJZviuixaxatUqli9fzpQpU+jbt2+tH180HcUZzkfSjRgnLmTNDeBGGu5aSM9RGH3HKPR6fbnz9u/fj9FoRKvVOgtaA84s8B9//JGkpCQKCgowjX8Y1eQGilLhrNmK3z9e4f7dup4xK55JvJGV40xcKatsJnWx6O3f8fDby7HqTdgULf7+/nTq1KlU4Ojm5oabmxsmU8UXfqqqcuHCBX7++Wfi4+Px8/Nj2rRp9O7dG622dDvK2mRBN4XPVtF4JKAUrU5Nll9V1YGiKMzo5Fln5TscDgdRUVH06tXL+WGemZnJkSNHiIyMJDc3l06dOjF79mzCw8Or1b3mVoFaT28je5OKSnpEfr+a3uOnlbvf0z//QI+7JlV4/3W5/FfdzfBms5l58+axadMm1q1bR2pqKqNHj5aZjBagqgznbJuKrucIDmgVgrIspZJRcnNzOXbsGCNGjODMmTN07NiRyMhIzp49S2xsLFC0XD548GC6devGVa0n267lARWvQjzwz6UVjq86M2ZWq7XUUnNFy8zF/xTXVcTs7kxcKatsJjUULXcbTGbcfPwBmHLfjBr1I3c4HJw6dYq9e/eSlJREcHAwc+bMITw8vMrnd7tZ0FLnsXWTgFK0StW9ClccDjRRO/ANuxeomyzLuLg4cnJy6NOnD3FxcRw+fJiYmBj0ej19+/Zl0KBB+Pv71/h+qwrU8u2qM6BMjjtHQkwUkd+v5saVODa8/gem/vc/iNqygXt+/bcK77s+lv+qsxleq9UydepU/Pz82Lp1K6mpqdx3330VzlyJ5uGWGc6/BDoVZTgfOnQIKNpXnJycTHJyMqdPn6ZDhw6MGzeOAwcO0Lt3b0aPHg2At83BrsS8Gs2YaRXws6Rz7tyVKoPF4s4tN4et4Orq6pwx9PHxoX379s7ZQzc3N7QmV2fiSkkV9pMGorZupPf4qc6fq/s+tNlsHD9+nH379pGenk5YWBgTJ04kJCSk2hdkt5sFLXUeWy9FVdWabL0SokUpsDmqvArvZLSx/JNluLm5sWDBgjoJZFatWkV8fDwmk4nU1FT8/f0ZNGgQffr0KVcepa6oqsqS0+nlkpHee2gcz365lYLsLJY9NYNnv9xa7lwvg4Yne3g3+szg2bNnWbNmDf7+/jzwwAOVbgEQTVeBzcHiU2lYHXD5xGF+fO81ALJSrtNt5Hg69h/Cz5++g6LR0P+eWQyfu6go8PApJOZ0NIciT6BqdGgcdhyFedxzzz307NkTF5eiZeRPP/0ULy8vpk+/GZjFZhTwzcUcVG7RLUd1oKpgPbgJNeWK82YXFxdnQFjRMnPxP2az+ZarCcXvw7efnE1iTDReQe0JHzmO7R+9QUi/IQDOTGqADxbcw/y3l+Pm7Vet92FBQQFHjhzhwIED5OXl0aNHD2eXmYZ2q89WqfPY8khAKQRFH/SVXYUnJCTw6aef0qNHD+67777bDqySkpI4cOAAx48fR1EUunfvzqBBg2o0a1Abh5PzyyUjVce4YNd6L/JcXYmJiaxYsQJFUXjggQcIDAxs7CGJGqjsNbj65WeJmPoA37/9Cos+XIPBxZV3547muZU70CgK9sQ4NJ5+pepNagpyGBjgQpCajSW3aBYxMjKSgoIC2rRp45xZzMvLQ/Fvj37QRNDqKVcI/ZevQA0qA5RUQtx0pQLI6mw5qYu/wa1U9T7MycnhwIEDHDlyBJvNRt++fRk+fPhtNUyoa1V9toqWRZa8haDq5de2bdsybdo0vv32WwICAhgxYkS179dut3PmzBkOHz5MfHy8cwZy0aJFtG3btq6GXy0tYcN8UFAQixYtYuXKlXz66afMnDmTrl0rrhkqmpbK2p7arBauRkcy8+V38A/pTGFudlE9VZOpKJhTVbRBob/MMN5kN7pwMFMBuxnr4Z0YspJRFAWbzYbJZMLPz6/UTKLBBa44tJzKpvSMmVFbYsYsoN7/DnX5PkxPT2ffvn1ERkai1WoZOHAgQ4cOxd3dvfwdNRKp89h6yP9iIaqhV69eJCUlsXXrVgICApylSiqTlZXF0aNHOXbsGDk5OYSEhHD//fdz6NAhdDpdgweT0HI2zHt4eLBgwQLWrl3LihUrmDBhAkOHDpVZjyausranFw7uJGzwHWg0GvpMuI/F8yeg0WoZvfA3RQf88v9VKbNc7Zxl1BkwDpvKrDAPUs5EsmXLFu6///4KXw8dgZGNPGNWF+/DpKQk9u7dS3R0NGazmTvvvJNBgwbVS+9rIapLAkohqmnMmDEkJyfz7bffsnDhwnKJM6qqcvnyZQ4fPsyZM2fQ6XTOJJuAgADS09OJj48vtb+robWUDfMGg4HZs2ezbds2fvrpJ1JTU5k0aVK5Eiii6ais7Wn0lg3Obkmb3/0fXli1C6OLK8uemoFv+4789P4/0ep0eAQEMfvVxaz4w+PkZaRhtRRyzwsv0yliuLOr03h3T+x2O3l5ebi6ulb4eE1hxux234eXL19m7969nD9/Hk9PTyZOnEj//v0lSU00CRJQClFNiqIwY8YMPv74Y1auXMmiRYswm80UFhZy8uRJDh8+TEpKCn5+fkycOJG+ffuWSrI5efIkBoOBbt26NeKzuP2SIE2NoiiMGzcOX19fNm3aRHp6OrNmzXLWIxRNS0VtT+1WK1dPH2fGy/8GQKvXY3R1Q6c3oNHqcPH04fEla9CbzGx+9384vfMH5v7jI3R6A+kJ8Xz76q9ZFDEcKMoKTzF4AUUrBJUFlI1FVVXy7SoWu4pBq9DJXV+t96FRo3Du3Dn27NnDlStX8Pf3Z/r06fTs2VMuoESTIgGlEDVgNBqZO3cuy5Yt46uvviIwMJCTJ09itVrp1q0bkyZNomPHjuWW0FRV5eTJk/To0aPCVnINrWxJkMioaLb88D0Lf/tis5vt6N+/P/+fvbMOj+pM+/B9RuJOXIiHAEmwBHd311IoFKvvttv17Xbbr/12u/vV222RUsfdNUjRhgSIYSEJJBBIQtxHzvdHmGEmmShRmPu6uNrMOe8575wzM+d5H/k99vb2bNq0iW+++YZ58+bh4ODQ2tMyUgVDbU+Tfj2BX8RAbeHLwPkvsvL5iQgSKYF9h+AeHKrdVyozQRAkyOSV35/y4iJc/PUXZ9fKKj+7BQUFrVLZbAiNgHu0AaOxl5M5oQ6mBqV5RFEkPj6e06dPk5mZiZeXF/PmzSMwMNCY3mGkTWI0KI0YaQBqtZp79+5hY2NDeno69+/fp2/fvoSHh2tbvxkiPT2dnJwcJk6c2IKzrRtN+M/NzhoU5RQUFLSJytCG4uPjw5IlS1i3bh1r1qxhzpw5eHt7t/a0jOggCAK+0hIuiqbavMiqYuM9J86m58TZ1cbm3k3jxrnjDF9amVe5cskksm/fZNa7X+rtV6AQkZiaU1BQ0IzvpP7UJuCeV6Hm6J1iTmYUM823UmvTXFYpmB4VdZGzZ8+Sl5dHYGAg48ePp2PHjkZD0kibxmhQGjFSD4qKioiOjiY6OprCwkK8vLzo1q0bly9fxt7evlZjEipbLdra2uLj49MyE24gdnZ2QGWf5PZoUAJ06NCBpTrtGidPnmxs19hGUCqVREZGci4qGtMxi0Fa/0dPWVEhm956iVnvfI70ofd8xTe7yctI54c3FhDUb5je/lZ2DuTn5zfp/BtDnQLuD9EIuE/xMiPrykXOnTtHaWkpXbt2Zc6cOUZpLCPtBqNBacRIDYiiSFpaGlFRUSQmJiKVSgkNDSUiIgJXV1dEUUQqlbJ3714cHR3x8vIyeBylUklCQgIRERFt1sNgY2ODIAjk5eW19lQeC027xr1797Jjxw6ys7MZPnx4m73uTwOZmZls27aNrKwseo2axBWZjBrqc6qhUipZ/+dljFj+e5x8AhBFEbVSiVQux8TCElPz6nmSNhZmFBYWNvG7aBhlSjXbU+pfxS2KIttTClGdPkv3kEoxcnt7+2adoxEjTY3RoDRipAoVFRXExcURFRXF/fv3cXBwYNSoUXTv3l2v4EMQBMaPH092djYbN25k2bJl2NraVjvetWvXKCsrIywsrCXfRoOQSqVYW1u3e4MSKt/LpEmTcHR05PDhw+Tk5BjbNbYCoihy/vx5jhw5goODA+MXLudIjpQ6W2mIjxQnLx/YRlp8DJFrPiRyzYf0mjyP6F3rK3dTqRj9yl/1htqZSLC1NG91D2VcTjkKNahVKjb//RUKsjKwd+/ItL99xJn1q0iI3IOJuSUz3/kcGydXEAQEqYxhzy5ngKddq87diJHGYuyUY8TIQx48eEBUVBSXLl2ioqKCoKAgIiIi8PPzq9XDVVxczOrVq7GwsGDx4sXVDJf169dTXFzM0qVLm/stPBbffvsttra2TJ8+vbWn0mTotmucO3dumxJ8fpIpKChgx44dpKSk0KdPHwYOG87Kq7VL5OiieSw11LM80sOS3MunuHLlCq+99lpDp90k6LY5jTuyi4zrCYx+6c+c+O5zrB2did61gaUrt5GecJHo3RuY+ud/a8e2lTanRow0BqOH8imnqpSFeTtri/W481er1Vy/fp2oqCiSk5OxsLAgPDyc8PBwbV5hXVhaWjJ37lzWrl3Lzp07mTFjhnYOxcXF3Lhxg3HjxjXm7bUodnZ25ObmtvY0mpTg4GAWL17M+vXrWbNmjbFdYwuQkJDAnj17kMvlLFiwAD8/P6IyS7XGZFlhAd+8NJPM5Gu8+P0BXAM6839TemPjXFmVPWzJ6wT2HUpDfB263WQu29hQUFCAKIpN/lumUqlQKBRUVFSgUCgM/n+xQkWepDL9JSc9FfdOIQB4dA7jlx//i4t/JwRBwD04jK3v/lbv+HkVaspUIuay9vMbbMSIBqNB+ZRSHymLttYhRZfHnX9xcTExMTFER0eTn5+Ph4cHU6dOpWvXrshkDf9auLq6MnXqVDZv3oyLiwuDBg0CIC4uDkEQCAkJafibbGHs7OxISUlp7Wk0ObrtGteuXcuMGTPo1KlTa0/riaOsrIz9+/dr5bEmTpyIubl5tZaLcjNznvtsHfs/+Yf2NTMrG5av3lnliCJQf8Nquq8NckHE3NwclUrFnTt3kMlktRp/uv+vVCrr3FetroeL1dwa01ELAXD27cT1M0cJGTGJpPMnECQS0hMvo6wo52bUKUrzqy/gylWisU2hkXaJ8WP7FNJQKYu2RmPnL4oid+7cISoqioSEBK2hFxER0SStELt06cLgwYOJjIzE2dmZTp06cfnyZTp16tQuWqLZ2dlRWFiIUqlslFHdltG0a9yxYwcbNmwwtmtsYm7dusX27dspLS1l6tSphIWFaa9t1ZaLUrkcK3tHvfEVpcWsWjoZG2c3Jv/xX1jY2mtbK0rUKtSaNou690vjwVQpES8d4ac9qXoG3zfffFPjfOVyOXK5HBMTk2r/b2Zmho2NDTKZzOD2uv6/Agmfx1caisGDR5McfZrVy6fh4t8JJ59A3IK6svalWbh1CsHJp3oLV1MDAvBGjLQHnqynhpE6aaiUxSz/tmVUNmb+XuYC8fHxREVFkZGRgb29PcOHD6d79+5YWFg06fyGDh2qrWqdOnUq9+7dY8iQIU16juZCU1BUUFDwRAqDm5iYMGvWLG27xuzsbMaPH2/sNtIAqqaYmKDm+PHjnD59mo4dO7Jo0aJqqSI1tVzUZcXavVjaORCzZyNHvv6AyX/8l3abWewhcHCn3CUAlemjqm4TVTkuZdm4qAqw6OqPvHswcrkctVrN7t27GTZsGAEBAVpjT2PwyWSyZl1IyERRK+AuCAIT3ngXgCNf/xv/iIH49upPz4lzSL5wGgs7fYkuOxMJZkaD0kg7xWhQPkU0WMqCyv64L3d1aBPh7/sPchk6ZAT3dXKvNr31MtdPH2X48jfpP7ey6GXz269w/+Y1TMwtODlwBIO87CkvKiAwMJBnnnmGgICAZnugCILAtGnT+Oabb9i5cyfm5uYEBlb3QrRFdLUon0SDEmpu19gePMitSU0pJpKyIhT3ihgyYhSD+/fVdrzRJft+BlB7O0xLu8rPW8iISURt/0lv29ihgwny9UYUxWrdZATBs9qxRFFk7969mJubN0nkoaEIgkAvJ3OO3immMPs+G/6yAkGQ4N97EL69+rP+T8soysnG3s2TyX/6QG9suJO50WtupN1iNCifIjRSFgDJF04TufpDRFFN/7nLSIuPJmbPJrqPm8H419/RjlGoIT6nnHDn1n/gJpdJWVgl92rsa2/hHzGQ8pJivX1n/uMzXAM6gyjiWZzO+K7eLWYkmZiYMGfOHD7//PM6Bc/bEhoP5ZMgHVQXVds1PvPMM0+sEf241JZioja1RNp1ANESgY5FSr1oRmpqKgcPHuTevXvIRzyLYGGtDWProlRUgCgiMzEl9eI5Onj5arcJpYUk3LpMkK+3tqtTXfmFgiBg87Awp7UIdTDlZEYx1o4uLFu1Q2/bvH+trra/blGRESPtFaNB+ZSgmxivKCvllx//y6IvNmj74nYMCyew33CunTpcbeyFrFJ6OZm16spZFEUu5ymr5V7ZOFWv2BUQ2PY/b2BqYcn41/+BXUhYi4sE5+TkAFBYWMihQ4faRZW3VCrFxsbmqTAo4VG7Rk0FuLFdY3XqTDF5+JugSTGZ6WtF1tVLnDlzRisubmtri5uslBThkUbrt6/OJeNaPFmpN+k6bByxh3ZiYm6BzMSUGW9/qt3PR1JMYkIC48aO1dOArYvWNijNZBKm+drUKz1Hw3RfmzYRCTJipLEYDcqnBN3E+NuxF5CbmfHDb+YjN7dg6p//jbWjC1mpSQbH5lWo2Xf4KFK1ElEUq/3TJMLr/m1ov6pjGrKPSiqnKGJqvd7ruNffwdLOgcyUG2x++xVe/uFgi0txxMbG4ujoSO/evdm3bx/Ozs706tWrxc7fWOzs7J4agxIq2zUuWbJE265x0qRJdO/evbWn1SZoTLeXTTdyqTh6DIlaSXBwMEOHDsXFxYUypZovE3K0Xs7Fn2/QGztkkWHNyE4dPbmmUhEXF0dERES9597aBiWAn40Js/xtavTugogoghSRWQF2+LahXHUjRhqD0aB8StBNjC/MyeJBWgovfn+ApPMnOLLyP0z76//VOj75dhrSilIEoVLnUSKRaP+/tn9V96tpnOZ1wOC+FVJTrtTzvWrysZx9AxEQUKtULSrFUV5ezpUrVxgyZAgRERFkZmayb98+HB0d27wH7GkzKEG/XePOnTt58OCBsV0jj1Jkbl2O4uAX7wFQkHWP4IGjeJCWQmlhHgCT//BP3IPDtN1eOo+czMyIznr5lGYyCRM6WrMjtWEtEY9mKfEP7kJMTAzh4eH1vic2NjbcuXOnQedqDvxsTHi5qwPxOeVcqCZxJsUq5xa3zhzBzncpYDQojbRvjAblE44oijx48IDEpGQw9QPA3NoG7269kclNCOg9mBNrP63jKLB00XOYt2I4pkSp5kpcTr32LSsqxMzKmqKcLFTKCiRSaYtKcSQmJqJUKrWtFseOHUt2djabNm1i2bJl9RZMbw1sbW1JTU1t7Wm0OFXbNT548IBp06Y9te0aH6XIiHh3i9BqRG5++xW6DBuHnYsHDp4+ZKUmsfejv7Pos3WVAwWBHCs3g4Zf4UM3XVp8DLv/81ekMhk2zm7MfvdLEo/v49TPK5GbmjHr3S+wdaksplGowb5rBElbvuPu3QzsXVzr1cTAphnFzRuKmUxCuLM5vZzMqhUVKRRW/Df6BHv37mX+/PmtPlcjRh4Ho0H5BKJQKEhJSSEpKYkbN26Ql5eHVCrFdOQCVCYWeHbpwS8/foUoity9Fo+9Z+1es7YgZWEuFbAzkfDxitna3Ks+MxaSdSuJKycOIqpV5KSnMvHN99j0txcpKchFrVIz/rfvtPj8L1++jJ+fn7YgRyqVMmvWLFavXs2GDRt4/vnnMTFpm94IOzs7CgoKUKlUT52cjiAI9O/fHwcHB7Zt28Z333331LZrLKpQPvSmPfreKBUVpMdfZMbbn2m9j1K5vFplt6FuL7o53LYu7ixbuQ25mTkHPv8fEk/s55efvmb5mp2kJ1wkcvWHTPvbh9qxt7DGvHMEG++qqch8tKisrYmBjY0NKpWK0tLSJpcGayyGiopMTEwYP34869evJyEhoV00QDBipCaMBmUL0lxtDkVRJCcnhxs3bpCUlERqaioqlQo7OzsCAwMJCAjA19eXS7lKjt4pxtK+A12HjWfV0skIgsCMtz/l9LqVxOzZREleDvmZGcz75yrt8duClIVGiqNq7hXA2Fff0vt74Sf6siMtOf+8vDxu3brF1KlT9V63sLBg7ty5WjmhmTNntvo1NYTGe5qfn//UVj0/7e0as7Oz2bznAHQbq/d60vkT+PcepGdA7vv4bQYteKnaMaqmmOjmcOsW0kllJmSnJuHsG4hMboJP9z7s+/gfesfKr1BDQATl6PfNqa2JgWYxl5+f32YMypoICgqic+fOHDhwgICAgAYVHxkx0pYwGpQtQHO0OdT1QiYlJZGbm4tUKsXHx4eRI0cSEBBAhw4d9IyWUAcpJzOKUaih35wl9JuzRLttwDMrGPDMCr1ztDUpC40Uh0Il6nfMqIGWmH/VRcLl2FjkcjmdO3eutq+LiwvTp09n48aNnDx5sk0Knj8NWpT1wc3NjWXLlrF+/fpa2zU21yKxITTVHJRKJYcOHeLChQuIclNMu+lvjz+8i16T52n/PvzVB3QMDce3V/9qx6qaYmJI3Dz3bho3zh1n7Gt/oyj3waP3o1ZVn5wg1NiE0VATBo1BWVBQgJubWw0j2w5jx47lyy+/5MiRI0ycOLG1p2PESKMwGpTNTFO1OazNCxkQEEBgYCA+Pj61hlLbu5SFmUxCuDSPM0qbyodLPR6azTX/mhYJgswL1z4jUUsMf7WCg4MZNmwYx44dw9nZWWt4tgXDBB49iJ+2whxDWFtbs3jxYrZv386GDRsYNWoU/fr1QxCEZlkkNpSmmIMoiqSlpRETE0NsbCyiKFZ6IBXlqIvzkVjYgCCgUihIT7zE9IeSPtG71lOQeVdP4kf3/FVTTEyq/F1WVMimt15i1jufo1arKC9+VKwjSPRTLcoKC/jmpZlk6jQ0gEqD9MNpfXnl5yO4BnTWa8JgZWWFRCJp9Urv+mJjY8OIESPYv38/3bp1w8vLq7WnZMRIgzEalM3I47Y5VCgUpKamao1IjRfS29ubESNGEBgYWM0LWRd1S1lUIpdUGmNtScri3r17nN61CY9ufcj27NZq869V6NnMkkxzK75MyKlxkTBo0CDu37/P9u3bsbRz4L7UplUNE11kMhnW1tZGg/IhcrmcWbNmERkZqS3W6TxoFDtvFT32IrGh6C46MkoU7L1VhNLAj0t95nD//n3i4uKIjY3V6kVq8PDwoEuXLijc7Tn9oPJNJv16Ar+IgUgkEtQqFdvf+x2eXbuzatkUHNw7MvOdz7XjDaWYaHKg8yrUqJRK1v95GSOW/x4nnwBUCgWZKTdQKiq4k3gJt8AuemPlZuY8V6WhAcDJ7z/Hu1tv7d+6TRgEQcDa2rrdGJQA4eHhXL58mT179rB8+fKnLofZSPvHaFA2E7oaboUPMvnpd4uQymQIEilz3v+K7e/9rprsxvaUAua5w+2blWHsW7duoVQqG+SFrA+1S1lICHcyJ6SDKWbStuGZBCgqKmL9+vU4OjryzOjBqARpq8y/rkWCphNIbb3QBUFgypQprNq2j3V31CAtrnac5jRM6sLOzo78/PwWO19bRxAERowYUdmu8dwlEpIL6/SO13b/G0pNnsi6qDqH3Nxc4uPjuXz5Mg8ePEAQBESx8pNsYWFB//79CQsL0xYhlSnV/JpbqR3ZacBIOg0YCYBEKuW9X+9WO19tKSa67QgvH9hGWnwMkWs+JHLNh/SduYiBzyxn9bKpyExMmfXuF3pjpXJ5tYYGOXdugSBg5+ah97puEwZbW9t2ZVBKJBImTZrEqlWrOHv2LAMHDmztKRkx0iCMBmUzodvm0NKuAyvW7kEikRC9az0Xdv7MpN+/X012Q6ESWbv/FNxOwNvbm+HDhzfKC1kfapOyaGvFIkqlkk2bNqFWq5k7dy5yuRw5tPj8m7IXenoZFHcaCGLtBkJTGib15WnUoqwPwSFhHBE9UIoi1JjR94ja7n99qckbrlap2Pz3VyjIysDevSPT/vYRv279npg9GwEYsuhVQkZMQgS2JuVhFbOHzDtpWiNSEASkUimiKDJixAj69u1b7XvT1CkyoQ6mnLxbTM8Js+g5cXa17WFjptXzLHDiu88Zuvg1jqz8t97ruhXmbUHcvKG4urrSt29fTpw4QdeuXVu8w5cRI49D23FBPUHoSmRA5YpeUxlZXlKEi18wDp4+QHXZDduw/vz+979nwYIF9OvXD0dHx2Y18CqlLCTYmUoxl0nanDEpiiJ79+7l7t27zJkzp1pv7Jac/9nUTD6ZP5q3B3hzL6lSZn3TWy/z3vBgzmxYo90v9eI5vlw4hq8WjWf3p/9DfE653nE0hqlKpWLj315m9fKpbPnHa6iUSv5vSm9WLZvCqmVTuHHueOU1oNIwKVPW3zv1OBgNSsOcTc3k0wVjeHugr/b+xx3eyVeLxrNmxXTy71d67U6vX8UHE3ry8+8Xa8OwjUHjDTcUWk84thd7j44sW7UDJ59AEiL3cG7zt7zw7T6WrdrBsW8+0e6rROCBiT0SiYSAgACCg4MRRREXFxdefPFFbV6oITQpMvI6nhRyCcz2rz3FRC6I2KREUfmJrq+JWp0HaSkA2Lt3NLi9/GEBUHsLeWsYOnQolpaW7Nu3T+tBNmKkPWA0KJsBXYkMDXevxfHlwjGc3fhNZVeJh+jJbggCxaIUtfTpFFM2xLlz57h06RKTJ0/G09Oz1eYhiiKJRQLPfbaOkJGTtK+Pfe0txv32bb19T37/BbPf/ZIXv9tHevxFjiQk6z0YNN5rQ0aBmZUNy1fvZPnqnQT2Haod8ziGSUOxs7OjsLAQlcpAte1TiqH7r1Iq+eWnr1m2egcjX/wjkasrtRO7jZnG0q+3asdeyCptsGGgWXTcjo/hv8+NY+WSSaz/83JUCgWb3nqZzX9/lcLs+wB4dA4jJeYsDh7eKMvLKC8pwtz6Ud9sAbAJ7ceSJUspKSnh2rVrDBkyhOeff54OHTrUORdNisxID0vsTPQfGXYmEkZ6WPJyiEOtxqQoiuzbt4978RcYbFWGXNL4hV/G9QQyb15l7cuzSTp3gh3/+yaK8jLtdk2FuSbk3d6MMo02ZVJSEomJia09HSNG6o0x5N0MGJLIcO8Uyss/HCT20A6Of/sp0/76fzXKbrRkm8C2zI0bNzh8+DADBgzQdp1pbmqqti5ViRSK0mq5XLqaehqc/YIoLcxHpVSiVqsolZppw3C63uuc9FTcO1UKGXt0DiPh2D4qSotZtXQyNs5uTP7jv7CwfRTy0s0Pa07s7OwQRZGCggJjyO0hhu7/g9vJBvUTrRycUJQ9ilDkVajJLijCwcqi3oUWmkWHIRHwsa+9hbmNHXevXgYq9SFLC/MJHjSKj2b0R1SrmP73Tx4dTBAoQcZ3P3+PtZkJzz//fIMXZ4+bInP27FliYmKYPHkyPYI60lOprjEHupeTGRcyS8lXPPod/fbVuXoNDVas3QNUdu4ZtOBl5KZm2vGaCnMbGxuUSmWbEjevL7ralP7+/kZtSiPtAqPZ0gxUlchQKiqQyStX72ZWNsjNzGuV3WjJNoFtlezsbLZu3UpgYCDDhw9v9vPVJcHS0ar+X5Wuwyfy05uLkJmYEjZqCubWttpFgq732tm3E9fPHCVkxCStUbBi7V4s7RyI2bORI19/wOQ//kt7XEMdSJoDXS1Ko0FZiaFFYmlhHqaWj7roGNRPfMh/V66G0kJMTEwwNzfHwsICc3PzGv5ZcL7MDpBUEwEXhMrX3IJCuJeUyOrl03Dx74SVvSPnNn/HmzvOo1IoWL1iGp0GjNQz9jp1DWXSyKGPVdRnqNtLXVy5coXDhw8zcOBAevToAdTHQBU4eudRsZqhhgYAs97RL+DRrTBvT+LmhtBoUx49epQJEya09nSMGKkTo0HZDOhKZABkXItn38dvI5FKkZmYMv3vn/Cfib0Mym60hTaHrU1paSnr16/HxsaG6dOnV2vt1tTURyu0rhwyXfZ++DeWr96JvYc3P7+5iPvJ15B16c3du/e5kX4P5JW5X8GDR5McfVprFFh3cMbSrlJMPGTEJKK2/1Tt2C3hvTZqUVan6iIRwMzatlb9RF2mTZ6IqrSY0tJSvX8lJSU8ePCAkpISSktLUSgUYGKG6dgleuM1IuDDl75ReS4Bug6bQP+5Szny9b/xjxjI7dgLyEzNkMjkqJSKan2sx48eiUkLa8reuXOHbdu20bVrV4MLw5oMVG0Tg3qmDRuqMG9v4uZV0dWmDAsLM2pTGmnzGA3KZkBXIgPAK6QnK77ZrbePIdkNaBttDlsTlUrF5s2bKS0tZdmyZZiaNm+XnnprhT70UIn1KSYQBMxt7JBIJJhZ2VCRm8kn//mgsj+2mSWy0Yse7iYw4Y13AbRGgbKiHJmJKakXz9HBy7faoVvCe23UoqxO1UUigKOXX636iQCiqMZEWY5dB3O8OgXW+d1WKpXcLyjhx1sV2td0RcClcvnD1wo4u2kticf24d97EL69+tN1+AS+em4coqim3+znHy3ERBFzlMhR05Jp83l5eaxfvx5XV1emTp3aoN+1pqgwb2/i5oYwalMaaU8YDcpmoilW2E8jBw8e5NatWyxYsKDZw60NkgESBBBFvnvtGb1crqxbSVw5cRBRrSInPZWJb77H8GVv8u2rc5HKZDh5B9KjoyshIW54enri4uLCN9cLyatQU5h9nw1/WYEgSPDvPQhHnwC+WjQeE3MLZCamVdIhROxMpC3mvTZWeuujWSQ+O32S3v03pJ94+eB2zm5cw4PbKXzz4kxW/O5PfLs/CldXVyIiIggNDUUuN1x4V1JSws1rV8DMH6CaCLgGMysb+s9dRv+5S7WvDVn0KkMWvWrwuIUJ5/jyl9sMGTKEsLCwZvf6l5WVsW7dOkxMTJg7dy4yWcMfNY/bhKE9iptXRSKRMHHiRFavXs25c+cYMGBAa0/JiJEaEcT2VgLXjqiv9wsqDcq6ZDeedC5cuMDevXuZMGEC4eHhzX6+qMxSrRf51uUoDn7xHgAFWfcIHjiKESt+z47//T1FD7Jw7OjHtL992OBzyCVU0yHUPW99EUURj8LbzOkb0uxeW4Bt27aRn5/P4sWLm/1c7YUypZovE3IavEh8qYs96anJREVFcePGDczMzOjWrRsRERF06NCBkpISEhMTiY+P59atW0ilUsxGLURpYk7Mns3s+fBv2naDfWcu4u71eO0iJqj/CCa++V6dc5jjKnLmxDGuXLmCo6Mjw4cPJzg4uFmiISqVinXr1nH37l2WLFmCo6Nj3YNqoayWAp66mhisXbsWe3t7pk2rv8ZlW+TgwYNcuHCBl156yZjXbKTNYjQomxltfp4mqd/AD3hbbHPY0qSmpvLjjz/Sq1cvxo8f3+znE0WRlYm5BjuPbH77FXpNnkdC5F56TZqrJ/OEqAl6i9quOIaPr0ZAYLa/DX62+gZgYwwTQVSjPPID5nIpEydOJDAwsH6DG8nRo0eJjY3l9ddfb9bztDced5GYm5vLhQsXuHjxorb6uLS0UlbI39+fkJAQgoODiSsQG7zoqM8c7ty5w7Fjx7h58yZubm6MGDECPz+/Og3L+vaaF0WR3bt3c/nyZZ599ll8faunbTQWURQ5dOwEideTeGHp8/WqMN+6dStFRUU899xzTTaP1qCiooIvv/wSZ2dnnnnmGa1AfX3uiREjLYUx5N3M+NmY8Jy3CV/vOop1aF9KeRTqaqttDlua3NxcNm3ahLe3N2PGjGmRcxrSCoXKivz0+IvMePszDv/3XyjKSsm+ncyAZ1bQddh4EIRKrw8CylqOLxMESs/u5k5xIH6DBulta0x+2KwAO+z9lrJnzx7WrVtHSEgIY8eOxdLSst7vuSHoalEa87Ye8ThhWKVSyb1798jLy6OiokL7miiK2NjY4OPjQ2BgIGZmZoTK1A1KmanvHDw8PHj22WdJTU0lMjKSn376CW9vb0aMGGGw6KMu9YOqvebPnDnDxYsXmTJlSpMak1AZwpaoFEgrSjCvZ3GRtbU1d+8azldvT2i0KTds2MDlhCsonH3rfU+MGGkpjAZlC3Dz2hXEW/EsnzUW5KZtus1hS1NeXs769esxNzdn1qxZLWK83L9/n7OX4sC5e7VtSedP4N97EBKJhLT4GMa/8S7OvoGsWjqZoP7DtXp3CzrZklakrDUMdzbPl8jISFxdXat5FBtnmJgwf/584uLiOHDgAF9++SVjxowhLCysyT9HRi3KmtEIfdcnDKtWq0lJSSE+Pp4rV65QXl6Oq6srw4YNo2vXrtjZ2XHnzh2ioqI4fvw4x48fp2vXrkRERDDVx4ktyYV1LzpEUS/yUZ+Fqo+PD4sXL+bGjRtERkaydu1arUSXq2ulVFF91A90e80nJiZy5MgRBg0aRPfu3Rt4VeuHKIoNyv/UFTdv77+1nTp1wrvXAA6U2oMB77Whe2LESEtiNChbgMTERPz9/TE3NwcwipY/RK1Ws23bNgoKCliyZIn2+jQHCoWCxMREoqOjSUtLw9K+g0GDMv7wLnpNngdUikp7da3UzXP0DqAgM0NbeW1jIiXcWV6r0PPQoUO5d+8e27ZtY9myZTg4OOidqyGGiQZBEAgLC8Pf35+DBw+yY8cOYmNjmThxYpMafk+TFmVjQoe6OorRsfHsPXiY1199GWuzyod4Wloa8fHxJCYmUlxcjIODA3369CE0NLRaTqGHhwceHh6MHj2aixcvcuHCBWJjY3Fzc6NnxCBiJU6GFx2iCALIpQITOlrjaiFr0EJVEASCgoIIDAwkISGBY8eOsXLlSkJCQvDvM4SDWXU3SNT0mh9mW8Hh7dsJCQlh2LBhdZ67sTTUMLS2tkEpkXG/oBgbS4t2HRZOLqjgvkf3h+k0NaO5J7P8jUalkZbFaNo0M4WFhdy+fZspU6a09lTaHJGRkdy4cYN58+bh5OTULOfIzs4mOjqaS5cuUVZWhp+fH7NmzSIoKIg11wr0jDiVQkF64iWmP6yudgvqSvbtZBw8vMlJT8Xa0QXQ1wqtTehZEASmTZvGmjVr2LBhA0uWLKlWUNPYDiSWlpZMnz6d0NBQ9u7dy1dffcWwYcPo06dPk1Tw2tpWtu57kiu9GxrONYQgCFjIpVBaSG7mPc5fv05CQgL5+flYW1sTFhZGSEgIbm5udRoyFhYWDBgwgH79+pGUlERUVBRndm3CzNoWz4gh5Nt6Uqh6dAwbuUBvF8vHTpkRBIGQkBC6dOnCpUuXOH76DNczFAhSGWVFhXzz0kwyk6/x4vcHsHfz4ofXF6BWKZFIZcz8x2fYu3sR+UDAxdOLKVOmNKvBplar63V8zb09r+iA6dglfJdcBpS127CwriJFbbnbGkRge0pBtYJAI0aaE6NB2cxcuXIFiURCp06dWnsqbYrY2FhOnz7NqFGjmrzARKVSceXKFaKjo0lNTcXCwoKePXvSq1cvPS+hrlYoQNKvJ/CLGKg1yMa88je2v/cGirIyIqYtwMS8sttGQ7RCzczMmDNnDmvWrGHnzp3MmjXL4NjGdCABCAwM5KWXXiIyMpJDhw4RHx/PpEmTtGHLxvKka1E2NJxbEw8ePODq1asAfPfdd5ibm9OlSxdCQ0Pp2LFjo4wriURCUFAQQUFB5OTkcOHCBWJOH6S8vBzBxIyQ7j0ZM2IYFnJpkxpvEomEnj17onDvxLG7JSAIyM3Mee6zdez/5B+V+8hkzHn/K2ycXLl+JpKTP3zBlD99AFIZXUZMaZQ8UEOoT8hb/97q79tew8KaVpxlhQV6Br5rQGd+enMRJXk5KCrKGf+bt7WtfBVqiM8pJ9y5+SI/RozoYjQom5nExET8/PyaNZzb3khPT2fXrl10796dfv36Ndlxc3NziY6O5uLFi5SUlODt7c306dPp3LmzwQddVa3QTgNG0mnASO12J58Alq3aof27sVqhTk5OTJs2jY0bN3Lq1CkGVSnSeVxMTEwYO3YsISEh7N69m1WrVjFgwAAGDx5co95hfbC1tSU/P78JZ9o2qLeYfQ2hw4KCAuLj44mPjycjI0P72Zo0aRLdunVr0jxgOzs7zM3NqaiowMbGBlNTU+J+PUPa9UTCw8Pp0aNHk7YVFEWRiw/KtTmZUrlcr3+53NQM+cN2kFK5CYLGuBMEYvNV9PNo3lzFukLej3tv2yKiKBKdVdkbvqqBDzD3n6uQyU3IvXubre++ztKHBiXAhaxSejmZtdswv5H2hdGgbEaKioq4desWkydPbu2ptBkKCgrYuHEj7u7uTJgw4bF/6FQqFdevXyc6OpqbN29qNf569epVZxi9Kbpx1Jfg4GAGDx5cY5FOU+Dp6cny5cs5ffo0J0+eJDExkUmTJuHj49Oo4z2J4uYNErPnUejweT9zbl67oqcVGRQUxMCBAzE3N+eHH37A09OzXsZkfXM28/Ly2L59O7dv32bgwIEMHToUiUSiLeI5duwYx48fJyQkhIiICNzd3Rt2MQxQk/pBVZSKCo6u/DfT//7xo/k2c695URSpQILa1JISpbradbv/IJehQ0Zwv47wfGbKDba/9wZqlYqUl//EJ89PbdNhYd17UtXAB5DJKw3i8uIiXPyD9bY19z0xYkQXo0HZjGjC3cHBwXXv/BSgUCjYsGEDEomE2bNnP1Z4LD8/n5iYGGJiYigqKsLT05MpU6bQtWvXBnnlHrcbR0PQFOls3bqV5cuXVyvSaQqkUimDBw+mS5cu7N69m++//56ePXsyatQozMzMGnQsOzs70tLSmnyOrUltocO4wzs59fNK5KZmzHr3C2xdKg00hUrkvzsOo0qJxc/PjylTphAcHKy9nvfu3QMqJYBqo745m6IoEhsby759+zA3N2fRokV4e3tr9/f09MTT05PRo0cTExOjzRH28PAgIiKCrl27Nvq7VaGqn6m9/b036DtrMY4d/fVev5l6m6CO7piYNJ3XT++6uUeAO3wWl1PtuiWXSVlYj/D8oS/eZ8bbn2Dl4Mx3r84hfuq4Nh0Wrs89WblkEtm3bzLr3S+rbStXicZCUCMtgvFj1owkJibi6+trDHdT6V3YsXMn2fmFzJo3H4mZRYMrNtVqNUlJSURHR3Pjxg3kcjlhYWH06tXrsXIGG1Nt3RjqU6TTVDg6OrJo0SKio6M5fPgw169fZ/z48XTu3Lnex7Czs6OgoOCJ0aKsLXSoUir55aevWb5mJ+kJF4lc/aFeZySrrn1YMm0kVlZW1Y6rMd4UCkWN565vzuYEd1Pijh8gMTGRbt26MXbs2BoXApaWlgwaNIgBAwZw48YNoqKi2LFjB4cOHaJHjx6Eh4drq/Xri0k9WnseWfkfHDx8CBtTvfvM1k0bEJQVuLi44OnpiZeXF15eXtjZ2TUqGlHf6zbVx5rLecp6hecLsu5pDWFzG3uOX0+nl1NAmw0L1+eerPhmN3kZ6fzwxgKC+ulX2Zu2ULtWI0aMBmUTohvKUpSVcOvWLSZOnNja02p1ypRqdkQlkuzaA4n/ULZmAVnVPQw1UVhYyMWLF4mJiSE/Px83NzcmTJhAaGhok3lCGltt3eDz1LNIpykQBIHw8HCCgoLYt28fmzZtIjg4mPHjx2NtbV3n+CdNi7K20OGD28k4+wYik5vg070P+z7+x6OBgkApcqRmhnMVNQZlTR7K+uf1iexIK4X8cmbOnEnXrl3r9b40RX+dOnXiwYMHREVFceHCBU6fPk1QUBARERH4+/vXT0pIFDGXCpTqeMW+fXWutn95p4EjObbmQ7y79+Fm1C90DAtn7KtvAZWLr+lLl5CenkZaWhopKSlcuHABACsrK7y8vLRGppubW51e1AblQyYX1ri9anheFB9Zp2ZWNmRk57TpsLC5VMDORGIwFUEURdRKJVK5HBMLS0zN9Rsd6CpSGDHS3BgNyiagplCWfPh8ylwcKVOq23SOTnOSXFDB1pv5KE1dqHoFaqu4FEWR5ORkoqOjuXr1KjKZjJCQEMLDw5skV6wmGltt3RCau0inKjY2NsyZM4crV66wb98+vvzyS0aNGkXPnj1rNTI03q38/PwnwqCsLXRYWpiHqeUjI1tUq6rtU1PosDaDUpOzWfAgk59+twipTIYgkTLn/a/Y8b+/p6yoAFGt5l7SFd4+kVR5vPCx+HdqXDpEhw4dGDt2LMOHDycuLo6oqCh+/vlnHBwcCA8Pp3v37jVGTGryBi7+fIPe3yOW/c7g+HAnc5ydzXF2dqJnz54AlJSUkJ6eTlpapZF57NgxlEolUqkUd3d3PS+mrve3obmutVE1PK8ru1NWVICFjV2bDgsLgqCnSKFr4PeaNIfLB7cDIKpUjH7lr3pjG6JIYcTI49JGv0Lth9pCMoKFDSczFZzNzmlXEhVNRaWHIR+1WHvfa92KSxepgkuXLhEdHU1ubi7Ozs6MHTuWsLCwBucAtmVaokhHF0EQ6NKlC76+vhw+fJg9e/YQFxfHxIkTqwlta3jStChrCx2aWdtSXvzIyyVIqof4awodanJ2DYW8NTmblnYdWLF2DxKJhOhd67mw82cWfvwjAMkXThOz+6HRJggoxceXezExMaFXr1707NmTtLQ0oqKiOHLkCJGRkYSGhhIREYGbm5t2/4b0KK9KbeoHFhYWWgkkqCyiu3//PmlpaaSnp5OYmMjZs2cBsLe313oxCx06olBLUatUbP77KxRkZWDv3pFJv/9fvv/tfAAUZaWolApeW3+sxrkZCs9bO7nwIC0FKwcnSgtysbTv0ObDwrqKFFUN/D4zF1Xbv7GKFEaMPA5Gg/IxqPNH+OHKsD1JVDQVZUo125MLEEVIT7jE7v/8FalMho2zG7Pf/ZKPZw7AxrnygTZsyesE9h3C5hu5VBz6DkGloGvXrkybNg1PT88ndoWtW6SzbNkyOnTo0OznNDc3Z/LkyYSGhrJ7926+/vprhgwZQv/+/avlScpkMiytrMjKLySvXFXvLjJtjfLychITE7kcG4vafyCChXW1BY6jlx+ZKTdQKiq4k3gJt8AuettrCx3W5KHUzdmU6Fzb8pIiXPweFerFHd5J6Gj9xgdNJfciCAIdO3akY8eOjBkzRlvEc/HiRTw9PYmIiMCvU/BjewPrq36g8Uy6u7vTp08foFL5QePBTE9PJz4+HumwZxAsbEg4thd7j47Mef8rTnz3OddOH2H56p0ARO9aT25Gut7x6xOeH/3yX9jy9quo1WpGvvCHdhEWbklFCiNGGosgimJTRBWeOsqUar5MyEGhhrT4GD2DafrfPjK4ipZLeGo6F5y/V6wVRy7Iuoe5tS1yM3MOfP4/eHTuxolvP+OVn4/oDxJF/JVZTAjxaVJtvbZMWVkZa9asQSKRNGuRjiEUCgUnTpzgzJkzODk5MXnyZDw8PCrn9TCN49jN+6jNHoUi20unEZVKxc2bN4mNjeXatWsolUp8fX2xCe3PVeyAR8aHnZsXfWYsRG5qxun1q5GZmDLr3S+wc/XQHm+kh2WNHkNRFPmf//kfxo8fT3h4uPb1EqWaz+JytH/fvRbH9vffpKwwn+e/3Iy9uxdqtZpPZw3itQ3HkVZRJ/hNqAPmzXCN1Wo1165dIyoqipSUFPDqzJqP/lVnxbuu3M6oF/9EQJ/BTaJ+UJX80nK+ulrpLT7x3Wd08PIlZMQkks6fIOHYvkohdeC71+Yx/rfv4OwX9Fjnq+3etjVqi4hpaI57YsRIfTB6KBuJJpQFlT2fl63cpjWYrp+NNLiKflo6F6jVak7dzkGUmSEANk6PKrClMhMEQUJFaTGrlk7GxtmNyX/8Fxa29iAIPLB0faqq4s3MzJg7dy6rV69u9iKdqsjlckaOHEnXrl3ZvXs333zzDX369ME3YhC700oqP9+m+kn+bbnTiCiK3L17l9jYWOLj4ykpKcHJyYkhQ4YQGhqKra0tZUo1Nx8uBKuGDoFqlcv1CR0KgoBMJqsW8q6as+neKZSXfzhI7KEdHP/2U6b99f9IvXgWr9Be1YxJaD65F4lEQufOnencuTNZWdl8l1TIc5/+zP5P3wFqrnivKrcT2n8Iy7vYYS5rWgUAUfLoTTv7duL6maNag7K0sFJov7Qwn8LsTMPGpChqo0O10R7Dwi2lSGHESGMwGpSNQDeUBYYNJg1xR3Yx/rfvaP9+UjoX1CbOfOp8FAozf6q+w9y7adw4d5zhS9/At1d/LO0ciNmzkSNff8DkP/4LeDqFeB0dHbVFOr/88guDBw9u0fO7ubmxdOlSzp07x7G4G1x0Knr4QBZqfDC3pTSOvLw8YmNjiY2N5cGDB1hZWREWFka3bt1wcXHR+641V+hQLpdXC3nr5mwqFRVaAWozKxvkZpWLprjDuwgdpR/u1tASeX2W9g6ozMDK7FFBUk0V71XldrKzs4GmL9bSvW7Bg0eTHH2a1cun4eLfCesOzgAkHt9Pl6HjDI4XBOq8t6JY2RN8uq9tm/a0G0JXkSKnqIQvvlrJ1InjCevcqd0/V4y0b4wGZSOoqZuErsEEhlfR7d1gqkuc2TL/LsdPncFkpL7gcVlRIZveeolZ73yOVC7H0q6yijVkxCSitv+kt29brrhsLjRFOseOHcPNza3Zi3SqIpFI6Nm7L2csglCqRai2HKiOpotMa6RxlJWVkZCQQGxsLLdv30Yul9O5c2fGjh2Ln59frf2em0PMXiaTVTMotXIv5SoyrsWz7+O3kUilyExMmfH2p6jValKizzDxzferHa+l8voMVb7XVPFeVW6npCCvWb6rujI5giAw4Y13ATjy9b/xjxgIVBri419/R2+cKKqRK8robwdnyyxqvbcStRpZ/HFcOk0G2o6XvSEIgoCDlQXSihLKCvONxqSRVucpe2w3DYZ+hKsaTFDzKrq9Gkz1ERlGaYFbcBgPdLaplErW/3kZI5b/HiefAJSKChBFZCampF48RwcvX71jtfWKy+aiNYp0dDmbmsmnz47Xy6Xb9NbLXD99lOHL36T/3KUAbH/vd2TdqpS4SYuPoUfsTYYHNZ+UkwaVSsWNGzeIi4vj2rVrqNVqfH19mTp1Kp07d26QJmlThw4NhbwzMzOpSIpH9ArDK6QnK77ZXW3cbzf/YvB4LSX3YqjyvaaKd0NyO83xXdWVySnMvs+Gv6xAECT49x6Eb6/+lBUWUPQgE2df/UWXgIA0/SqHD5ylg4sbPr0Gk2nuRL7i0e+15t56yyv4NvI2O3fuZO7cue3WGBMEAWtrawoLa9bhNGKkpWiHZk3rU/VHuKrBpMHQKhrap8FUb1kRqYwcz27IVBUoJDIEQcLlA9tIi48hcs2HRK75kL4zF3Hi+y8wMbfQems0tIeKy+ZCt5POxo0bW7RIRxRFEosEve4xAGNfewv/iIGUlxRrX9N0kMm9e5st//gN1xVmDGtg16OGzOvOnTtcvnyZhIQESktLcXFxYfjw4YSGhtZLoL0mmlLMXjfkrVKp+OWXX/jll19wcHZF3jGM2psyPqKl8/oMiWbXVPFeVW7Hw8Wp2b6rGpkca0cXlq3aobfNzNqmWkGfAMikAi9MHsH9XkFERUWReGAzUqmU4LDuhHbrgaebi869NWfq1KmsX7+ec+fO0a9fv2Z5Hy2B0aA00lYwGpSNoOqPsCGDKaj/CIOr6PZoMDVIZFgQUItqREGK8DBs2nPibHpOnK23m6G2bWAU4m2tIp1SlUihKNXrHgP6+cFVqcz/m6yXxlFbbm1DyMnJITY2lri4OHJycrC2tqZHjx6EhYXh4uLS4OPVRlOI2WtC3nfv3mXnzp1kZ2czcOBABg0axO0SdZuVe9F4A5+dPkkrt9NnxkIGPrOc1cumaivegWpyO835XW1srqu5XIqPjw8+Pj4UFhYSExNDTEwMcdFReHh4EB4eTteuXZHL5QQFBdGvXz+OHDmi1b9sjxgNSiNtBaNsUCOJyizVdi5oCO1JokLDsaR7LJxadygU0Mqg9Jm1mIHzlqKu56dL45l5WmSV6uLatWts2LCBYcOGtUiRTl65iq8TcwHY/PYrDFrwMq4BlX2/o3etp7ykWO8+A/z3uXEs/PgHrBycWNzJlttFyhpza+sjM1RaWqrNi0xLS8PExITOnTsTFhaGj49PrXmRrc23335LaWkp2dnZuLi4MGXKFL3+8m1Z7kVXAq2+tJQEWq3X7WE1d13XTa1Wc/36dS5cuMDNmzcxNzene/fuhIeHY2try3fffUdhYSErVqxolwoTBw4c4ObNm7z88sutPRUjTzlGD2Uj0e1cUC9ENahUWBVmgLNfs86tKWlIKBQqvbW2D/X7zKUCxcr6r1eMQryP6NSpE0OGDOHYsWO4urpqO400F7V1kTFE7t3bmJiZY+XgBMBPN/Jrza2tSWZIqVRy48YNYmNjuX79OqIo4u/vz/Tp0+nUqVOT9WpvTtLS0sjIyECpVDJs2DCDIvFtWe6lQd5AUQRERnaQtMh3tdbrZiqt13WTSCQEBwcTHBzMgwcPiI6O5tKlS5w9exZ/f3+6d+/OkSNH2LVrF7Nnz26Q17WpPPKPg7W1NQUFBS16TiNGDGE0KBtJQ0MygiChQ3o0m/ZHVRNAbss0JBSqVqmIP7KLsFFTqCgrpVgpMsXHin23i9qkZ6atM2TIEO7du8e2bduavUjHUC5dbcQd2U3oqMkPvUSgUNf+ENWVGfK1lpOWlkZsbCwJCQmUlZXh5ubGqFGjCAkJ0evp3JapqKggMjKS8+fPY2ZmhpubW6192ZsyZ7OpqW/lu0wiII8/weHIVNwWLsTZ2bnZ52YmkxBiIxC/fzfKe5mMmzSFLkEBjbpuHTp0YPTo0QwbNoyEhAQuXLjAnj17MDc35+rVq/WW7apL7aIlhf9tbGyoqKigvLy8RRsjGDFSFaNB+Rg0VH7Eu9sYDprB3r17ycrKYsyYMW06jAeGK9pr4tL+LYSMnIxa+aja1c1C3mY9M20dTZHO6tWrm71IRxAEQm0kPD9vtl4uXdatJK6cOIioVpGTnsrEN98DICFyLws+/gEAlVLFlrdf1fZbnva3j5DKZOTeTePDaX155ecjuAZ0RgS2JOVicmYr+Q+ysLGxoVevXnTr1g0nJ6dmeV/NRUpKCrt376awsJBRo0eTlpFJUVk5JUp1nV6qpsjZbA7q60VVBY7jxx9/5Pvvv+fZZ5/V6wneHBQWFvLzzz+Tn5/Pwnnz6Nix42MfUy6X0717d7p3705GRgZRUVFcunSJY8eOkZqayuDBg/H29jZ4H+ujdtGSwv+awrTCwkKjQWmkVTHmUDYBZUp1gwymqKgo9u/fj7+/PzNmzMDMzKw1pl0jhYWF2t66tzMyedCtUvqottw6tUrFD68vYOHHP3Jx7ybt67rt40RRbHOemfZAdnY2q1evxs/Pr8EhufqSnJzM1l17UA2YBTIZ9dGhRFQDAnFHd5NxPYHRL/2ZE999jr27F2Gjp7Lzn38gM+UGk/7wv9rPDKKIS24Kw/yda3xgt2XKy8s5fPgw0dHRePn64z9oLFdKJK3upWpq6vqulpaW8tNPP5GTk8P8+fObraAlOzubn376CVEUmT9/frN6RIuKili9ejVFRUWo1WocHR0JDw+nW7du2t/oeqtdUPkNagnh/wcPHvDFF1+wcOFCfH196x5gxEgz0cbWyO2ThoayIiIicHBwYPPmzaxdu5Z58+Zhb9/0HSfqg0ql4t69e6Snp5OWlkZ6ejr5+ZXtzWxtbXF0ckIoK0JtWntv7cIHmRQ9yOS71+ZRkHUPUaWiS49emHUfqd2nrXpm2jqOjo5Mnz6dDRs2VAvJPW4Ol1qt5vjx4/zyyy/4+fnRs6MFe+4q6lnRLwFRJCc9FfdOIQB4dA4j4dg+PLv2AEHAzs2jyhiBctcAvL3t250xmZSUxO7duyktLaXPhBkkyF05mweg76pqy+0p60td31Vzc3MWLFjAunXr+PHHH3nmmWfw9vZu0jmkp6ezbt06rKysmD9/Pra2tk16/KpYWVnx3HPPsWrVKtzc3DA3N+fQoUMcPXqU0NBQwnqGsz1bXu+q85YS/tf1UBox0poYPZStSFZWNus2b6VcpWbqxPEE+nRs9odscXGx1vuYnp7O3bt3USqVSKVS3N3d8fT0xNPTEysrKy5cuEBcXBzWIX1Z+fF/yLgWj52bV7VQaFD/EdpQKDzyXP79d79pdxXtbZnjx49z4sQJ5s2bR0e/gMfO4SooKGDbtm3cvn2boUOHMmjQIARBqFdFskwATb3VlRMHuX7mKFP+/G8OfPYueffvYmphxdDFr3Fk5b/1vNoadD3XbZ3S0lIOHTrEpUuX8PPzo/uICey7r25TXqrWoqKigvXr13Pnzh3mzp2Ln1/TFBzeuHGDzZs34+rqyrx581q0+johIYEtW7YwceJEgoKCiImJITo6mhJHX2QhA0EQKCss4JuXZtZL+aIllD3+9a9/MWjQIAYMGNCs5zFipDaMBmUrUFNCtzkK+nvYNVmoTK1Wc//+fdLT07UeyNzcSmkYa2trrfaal5cXrq6uyGQyCgsLOXHiBBcvXsTS0pIhQ4YQHBrG11cMV/EawigB1DyIosjGjRtJLVQgixhHbQX0cgm1esdu3LjB9u3bkclkzJgxo5p3qa40Di9rGd9ezdfOa9/Hb3P3ahwu/p3Iz8zAysGJaX/9v2ppEhpe6GKPnal+JXRb5OrVq+zduxeFQsGYMWMIDgnjv4m5KNSV36+t77xGTloqIiLT3/qEsxvXcD/pChVlpQxZ9CqhIye3mMROa6FQKNi0aRMpKSnMmTPnsduGXrp0iV27dhEUFMSMGTOQP+w81pLs2bOHy5cvs3TpUlxcXFCpVPw3LptitQQEAZVCQWlRPvs/+Yf2812QdY8bZ49Vk9iyM5GwokvzeuT/+9//4uvry7hxhvubGzHSEhiDjy1Mbd6fElHK0fSiRofKSkpK9ELXd+7cQaFQIJFItNIzGgOyaviotLSUY8eO8euvvyKTyRg+fDi9e/fW/pg3RmT4SX2AthaCINBj1CRSbxVX9tuu5QGlW1Wt+zlSqVRERkZy5swZAgMDmTp1KhYW1dMZ6krjKFE++gBX7bdsae9I0rnjrH15NveTrvAgLYUlX21FbvooV7itd4sqLi7mwIEDxMfHExQUxIQJE7CxsSEqs1T73c24FoeyooIVa/eQEnOWUz99xeQ//QuZ3ITy4iJWLplI6MjJKNQQn1P+xHrr5XI5c+bMYcuWLWzYsIGZM2fSuXPnugdWQRRFTp06RWRkJD179mTChAmtVrQ4duxY0tPT2bx5M8uXL0cpkVEsSrWpxVK5vN5NAHSF/5sLa2trioqKmu34RozUB6NB2YLUldCt6ZWrUIkGjQFdRFEkKytLazympaXx4EFlB21LS0u8vLwYMmQIXl5euLm51bjKr6io4Pz585w+fRq1Wk2/fv3o379/tUKhuivaRUQRpIjMCrAzSgA1A2VKNXvSSytzF+tB1RyuvLw8tm7dyt27dxk1ahT9+vWr02tSUy6drsxQ1X7Lw5a8zojlbwKPCrl0jcm23C1KFEUSEhLYv38/oigyffp0QkJCEITKLkDRWaXafW1d3EEUK/NYC/OxtHNAJq/83FeUleDs10m774WsUno5mbW7vNH6IpPJmDVrFtu3b2fz5s1MmzaN0NDQeo9Xq9UcPHiQX3/9lSFDhjBkyJBWvVYymYyZM2eyatUq9u7dy7Bxkx7reOUqsVlzx62trbW//0aMtBZGg7KF0G1fmHzhNJGrP0QU1fSfu4wLO9dRWpgHwOQ//BP34DBEUWRbcgGvhFQaA2VlZXqh6zt37lBeXo4gCLi4uODn58fgwYPx8vLCzs6uzh9jlUpFdHQ0J0+epLS0lPDwcAYNGlSrBmDtsiJSzLOSybhwAudOLwBGg7Kpicspr2bMFz7I5KffLUIqkyFIpMx5/ys9T4nGO2aVc4udO3diamrK4sWLH7sqV9Oy7+gdw/2WNcx65wv9F0SRbvayNmlYFRYWsm/fPq5evUqXLl0YN26c3vehVCXqfeYt7Dogkcn5aHo/lOXlvPDtXgDW/2kZyRdOM/Y3f9fu2xJeqtZGKpUyffp0ZDIZ27ZtQ6lU0qNHjzrHKZVKtm/fzpUrV5gwYUKb0eh1dHRk4sSJbN++HQ8ff8C90cdqbo+8tbU1qampzXoOI0bqwmhQthAaY0BRVsovP/6XRV9s0Hoz3IK64uDpQ1ZqEns/+juLPlsHgoBSLfLDkbMoky+TlZUFVFZXenl50X/AAJzdvejg4oqlmUm9q3vVajVxcXEcP36c/Px8wsLCGDp0KHZ2dvV6H7WFQktLu/DZuSMcO3aMiRMnNvpaGalOVe+YBku7DqxYuweJREL0rvVc2Pkzw5f+Tm+fk7ceULhvI8HBwUyePLnJChwa3i1KBJWSc1s34Tl1Ml5eXk0yj8dFFEViY2M5cOAAUqmUWbNm0aVLl2r7VdVkvXH2GFKplN9tP0d64iX2fvR3nvlgDfP+tZrSgjy+XDiGHhNma8O2ze2lagtIJBKmTJmCTCZj165dKJVKIiIiaty/rKyMjRs3kpaWxuzZswkODm7B2dZNWFgYKSkpHNm/B9uJyyhUNdAwFEXMUYKiHGTNl/Kg6ectimKbXKwZeTp4wn/e2ga6xsDt2AvIzcz44TfzkZtbMPXP/8bB0weozMvRzRkSEcm2csXD6ib9+/fHy8sLCxs74nMriM4q5UyBGgoq82bqqu4VRZFr164RGRlJVlYWwcHBPPPMM40WlDYUCrWwsGDIkCEcPnyYiIgIXFxcGnVsI9Wp6h3TINFp8VdeUoSLX/UHcoXMjBFjxzOgd3iTPmwa2rJPFEW8sq9SbmHGt99+y9ChQxk4cGCrivvn5+ezZ88ekpKSCAsLY8yYMQZzSsFQe0oRCzsHACztHCgrKkBZUY7MxBS5mTmmFlZ6762t5402FYIgMGHCBGQyGfv27UOpVNKvX79q++kJli9c2CSC5c3B+PHjKyNCSZfA95HH9dtX59arCUBhwjk+PnCF0NBQIiIi9Hq8NxXW1tao1WpKSkqwtLRs8uMbMVIfjAZlC6BrDBTmZPEgLYUXvz9A0vkTHFn5H6b99f8A2Pfx2wxa8JJ2nCBIECxtSU2/i3fHjlj7dua7hxWmValN+y4lJYXIyEjS09Px9fVlypQpeHh4VD9IE9C7d2+io6M5ePAgCxYsMK6Wm4jaOhbdvRbH9vffpKwwn+e/3Gxwn5DuPZvlXmhya7ck5aGiZi+5XCrQpTyDmJgz2Nra0r17d44dO0ZKSgrTpk3DxsamyedWG6IoEhMTw6FDhzA1NWXevHl19kuv2p4yoM9QondtYNXSySgrKpjwu3dZ/6dllBbmo1IoGLbkde3Ytpw32hwIgsCYMWOQy+UcOnQIhUKhp5+qK1i+ePHiFmnh2FjkcjkzZ85k9bffI/MOQ5RULuIWf76h2r5jX31L+/8CIJMKLJ00goTLDkRHRxMTE4Onpyfh4eF07doVmaxpHsGa709hYaHRoDTSahhlg1qAvHIVXydWyvVcO32Ea6eOMPmP/0JZUc43L8xgxdo9HP7qA0wtLBn83CvVxvcsusG5uCuY9J1Ua2WvBo32nVlRNpGRkdy8eRN3d3dGjBjRZDpxtXH9+nXWr1/PnDlz2lwIq71SolTzWVxOrfvEHtrBzahT2gWKLs2p+yiKIp9/tRLLoO4o3IJq7RaVlZXF9u3buX//PmFhYdy8eROlUsmUKVPo1KlTLWdpOnJzc9m9ezcpKSn06NGD0aNH17tbVVRmKUfvFDf4nC2hRdgWMCS0/8svv3Ds2DEGDhzI8OHDuXPnDuvWrcPS0pJnn3222QXLm4qLFy+y++xFTPpNoj6dpARgtr+NtkBRrVZz7do1Lly4QHJyMubm5nTv3p3w8HAcHBwea24FBQV8/PHH9VoYGTHSXBg9lM2MUqnkVvJNoAMAnl168MuPXyGKInevxWPv6U30rvUUZN5lxtufGjxGREQEl638UYoiQj1+yERg840cyg58j6OdjTY3qaW8hYGBgfj7+3Po0CECAgKabBX+NFPVO6ZBqajQ5uKaWdkgN6tutDS3dywlJYXcrPtMmeBGx472tXaLcnJyYsmSJZw4cYJTp07h6uqKmZkZGzZsoHfv3owaNarZPi+iKPLrr79y9OhRLCwsePbZZ/H392/QMRqaN6rRZA1xeLJ7LNekrWtnIqFXcATDZCYcO3yQrKwskpOTW0Ww/HHp3r07qampXL1wAHk9dGCn+9roqV1IJBI6d+5M586defDgARcuXODixYucPXsWf39/IiIiCAwMbFQKiJWVFYIg8KCwmLxyVaO6Zhkx8rgYPZTNgFqt5tatW8TFxXHlyhXKysowH/0calNLEATObvyG2EM7EASBGW9/ysczBuDZtTsSmRwH947MfOdz7bHsTCQEmZTz3LQJel0Z4g7v5NTPK5GbmjHr3S+wdXEn9eI59n78NhKJFN+e/fjta68wuZt/q+SoZWZm8vXXXzNy5Ej69+/f4ud/EjHkHUuLj2Hfx28jkUqRmZgy4+1Pq+nhNbd3bPPmzWRlZfHiiy826AF2+/ZtduzYQWFhIcHBwVy5cgVHR0dmzJjR6NzemsjOzmbXrl2kpaURERHByJEjMTFpnBJBQ/s563qpnkTq01lJLgHnu3Ek/3oSW1tbXnrppUZf/9akoqKCVatWITE1J3zSXGIelNfqka8LhUJBQkICUVFR3L17FxsbG3r16kXPnj1rVdzQRWPMH72RARaPUkeehJ7yRtoXT71B+bi9kHWPk5GRQVxcHPHx8RQVFWFnZ0doaCghISHcwrpRobIRHhb8ereQjJxcbVcGJ59AVi6ZxPI1O0lPuMjFPZuY9rcP+eG3zzLut//AySeANSums/SDr/jj0C6ttkrdt28fsbGxvPrqq8a8niagTKnmy4Sc+ldVIyKXCM3apaWwsJBPPvmE0aNH06dPnwaPLy8v5+DBg1y8eBFvb28KCwspKChg3Lhx9OjR47E/u2q1mrNnz3Ls2DFsbW2ZPHlyk/Scrt2IEgHBoJfqSaPexvXDoiyH1CjuxV+ge/fuTJo0qVULshrLvXv3WLNmDT169GD8+PG1euQbwt27d4mKiiI+Ph61Wk3nzp0JDw/H29u7xmPqfQ5Fw80O6uqaZcRIU/HUxiJrDdHUUS2ta4AW5+aQkBBPXFwcOTk5WFpa0rVrV0JDQ/Hw8ND+ENgo1Y0KlQXYmnD0jlSvK8OD28k4+wYik5vg070P+z7+BwDOfkGVBQFKJWq1ilKpWatq3w0dOpS4uDijjFAT0dCqahAZYqNsVu/ExYsXkUgkdOvWrVHjTU1NmTx5MkFBQezevRtRFPH29mb37t3cvHmTSZMm1Tu/sSqZmZns3LmTjIwM+vbty7Bhw5qsjV9tmqxmagUDvezr7aVqr+hq69aJUJmsUxTQh0mB3uzZsQ2FQsG0adOQStt+C05dXF1dGTt2LHv37sXHx4euXbs2iRyUu7s7U6ZMYfTo0Vy+fJkLFy7w/fff4+TkRHh4OGFhYXrfhWrGfA1GZ01ds4wYaWqeSoOyNu9CTdXSNRmg6uJ8hLsFdPL2Zfz48fj6+hpcdTfIGHjIdF8bgzmTpYV5mFpaa/8W1SoAug6fyE9vLkJmYkrYqCmYW9u2qvadRkbo0KFDRhmhJsLPxoSZftZsS85HKT78dBj0SghYXD/LkeREXJ999rGFzA2hVquJiYkhJCSk0UafhuDgYDw9Pdm9ezfXr1/H19eX5ORkvv76a2bMmNEgzUqVSsWpU6c4efIkDg4OPP/8883y/g1psm78+SecHWwJ7zW1yc/X1tAV2q/arMEvYiA7/vf3FD3IwrGjH9P+9iEIQmUPdA9/Zs6cydatW1GpVMyYMaPd5Vn36tWL1NRUdu/ejZub22MX1ehibm5O37596dOnD6mpqURFRXHgwAGOHDmilR6yc3SuvzFP9a5ZRow0B+3rW9wE1DdEo7uqA9ieXIBC/XCUzgNcYmkDnfuTIoHuTja1hnDqbl9YiRSRTiW3iTpwk4zsXOg3Q2+7mbUt5cWF2r+FhzIWez/8G8tX78Tew5uf31zE/eRrmIZW139rSSIiIrhw4QIHDhxg4cKFxiTxx6S8vJzLR/dScuUaHfuNoMwlgPwacriEzmP4+edsfvzxR+bPn9/kOn83b94kPz+/yTqbWFlZMXfuXGJiYjh48CDm5uaYmpo2SLMyIyODnTt3kpmZycCBAxk8eHCzGyu6mqzuTg7cuXOnWc/XFtDV1jXUrGH3f/7CkOdewT04rNrYC1mlrOjSmTlz5rBp0yY2btzI7Nmzm8x73BIIgsCkSZNYuXIlW7Zs4fnnn2/yz5kgCPj6+uLr60tBQQExMTHafw49BqPwCkGtUrP5769QkJWBvXtHpv3tI4oeZLLzn3+gvKQInx79GPXiHwGe+J7yRlqfp8qg1IRoCgy0qzv2zcfcT7pCRVkpQxa9SujIyYjAlpv5qMVKkXHBYA/lSgOpvmEFTags7kEZv94voVCls7GkAOXNy5SnXeWKTIKrqyud/H24jpISHoWFHL38yEy5gVJRwZ3ES7gFPuzqIQiY29ghkUgws7ZBXl7U6tp3UqmU0aNHs379eq5du2aUEXoM7t27x5YtWygsLGT65ImEhoYiimLNOVxSU5599lnWrVvHTz/9xPz585skf1DDhQsXcHV1xd298S3pqiIIAr169cLX15ft27eTnp6Ol5dXnZqVSqWSEydOcPr0aZydnVm2bBlubm5NNq/64uLiwqVLl1CpVO0ulNsQdLV1DTVruHs1DkVZKdm3kxnwzAq6DhuvHatpQxkUFMQzzzzD+vXrWb9+PXPnzm1XhTqmpqbMnDmTtWvXcuTIEcaOHQs0XV6+LjY2NgwdOpTBgwdz9eo19hZYIIqQcGwv9h4dmfP+V5z47nMSIveQcGwfU/7yH2ydq3/+n/Se8kZal6eqKEdTJatWqUAQtO3q8jPvMvi5V5HJTSgvLmLlkom8tuE4UPnjkB4fw+7/+xtSmQwbZzdmv/slv277gZg9GwEYsuhVQkZMAioToKuGFRQKBZmZmdy7d0/77/79+ygUCpCbYm3vgEuHDrg5OeDu5oarqyu2trbaL31UZinPTp9ExrV47Ny86DNjIXJTM06vX43MxJRZ736BnasH188e4/BX/0Iqk+HkE8h/v15FhIvhrh8tiSiK/Pzzz+Tk5PDSSy+1u/BWayOKItHR0Rw4cAAnJydmzpxJhw4d6j2+oqKCDRs2kJ6ezrx58/D19X3sOeXn5/Ppp58yfvz4Zuu9rFar+eWXXzhx4gT29vaUl5ejVquraVamp6ezc+dOcnJyGDJkCAMGDGg1Y+727dt8++23rFixolk6orQVdLV1Lx3Yxi8/fKFt1nDlxEGid61nxdo9OPsGsmrpZF74dh9y00dpES90scfOtPIe3bp1i3Xr1uHi4sL8+fMxNW1fEkvnz5/nwIEDTJs9l/IOHRucl99QdDVpT3z3GR28fAkZMYmk8ydIiNzLnatx2Lt5UpSTzeiX/4x3t95645tTk9bI081T82TXDdEYalenCdVUlJXg7PfoYSUIArauHixbuQ25mTkHPv8fEk/s59zmb3ltw3FUigpWLpmkNSgVajh+4y42ube1xmN2dra2x6qjoyOurq507twZV1dXXF1da2z1piHUwZTlX26oFiYPGzNN7++gfsMI6jdMW9AT2uHx8tqaCk3XjK+++orz588zYMCA1p5Su6GsrIzdu3eTmJhIeHg4Y8aMabBBbmJiwrx589i4cSPr1q1j7ty5DdZfrEpMTAxyuZzQ0NDHOk5tSCQShgwZQkBAANu3b6esrIwOHTqwYcMGIiIiGDZsGCdPnuTcuXO4u7uzYsWKVu+4oskTvn///hNtUOq2oTS3tsG7W29kchMCeg/mxNpPsXVxx6trZZtCR+8ACjIz6OD1aCGj24bS29ubBQsW8PPPP/PDDz/w7LPPVtOnbA6vX1PRu3dvEjML2FdkA2XVlTxq62LWGHS7Zjn7duL6maNagzIrNYmM6/E886/VSOVyvv/ts7zy02G98U9DT3kjrcNT87Gq2gvZULu69X9aRvKF04z9zd/1xurq+kllJgiCBAcPb5TlZVSUlWBu/ajTgyiqiXlQjnjiGK6urnTs2JE+ffrg6uqKs7Nzo/KEGlvQ05aSrzWViidPnqRbt2711lh7mrl79y5btmyhpKSEWbNm0aVLl0YfSy6XM3fuXDZt2qTtYhQYGNioY6lUKmJiYggNDW0Rb5KHhwcrVqzg8OHDREVF4ejoqG1jBzBq1Cj69u1rML+ypQ0RU1NT7O3tuXfvXqMr39syarWalJQUYuPiEB1DwcLaYLMGSwdHsm8n4+DhTU56KtaOjwryDAnte3p6snDhQn788Ue+//57FixYgKWlZaPVOFqSlEIFmZ49Hior1ExTVVvrGvPBg0eTHH2a1cun4eLfCbdOIRTlZmPnVlmEJpXJUSmVSHUWoU9LT3kjLc9TY1BW7YXs3imUl384SOyhHRz/9lOm/fX/mPev1ZQW5PHlwjH0mDC72gMq924aN84dZ/jSNyjOzeajGf0R1Sqm//0T7T6a/tuv/v6PWJo03eWts6DnoQZZW9a+05URmjRpUmtPp80iiiLnz5/n8OHDuLq6smDBAuzt7R/7uDKZjNmzZ7NlyxY2btzIrFmzGtXu8Pr16xQVFTVbqNsQcrlcq6Kwfft21Gq1NqxtampazUhsTUPE1dWV+/fvN8uxWwONxm5sbCwJCQkUFRXRoUMHfF38SRVssbTvQNdh41m1dLK2WYNapWL7e2+gKCsjYtoCTMwfRWHCncwNGvVubm4sWrSIH374ge+++46hM57lwH1Fg9Q4Who96SRBqFbtfnr9KkSVCkEqJXzKfHpOnP3Y1da6XbMEQWDCG+8CcOTrf+MfMZA7Vy5TWpiPVCZDWVGuZ0w+bT3ljbQsT41BqbuqM9SuTllRjszEFLmZOaYWVtWMybKiQja99RKz3vkcRXkZ5zZ/x5s7zqNSKFi9YhqdBozU+5FUiE3/pa1N+04sKWCYnzPdXSzbrPadhYUFQ4cO5cCBA0RERDzRIcHGUlpays6dO7l27Rp9+/Zl5MiRTZoPKJPJmDVrFlu3bmXTpk3MnDmTzp071zqmqpfvQnQ0Hh4eLX7/bt68ycGDB4HK0PL9+/dxcHBgz549JCcnM3HiRMzNzRslC9aUuLi4cP78eW2aS3slNzeXuLg44uLiyM7OxtLSkpCQEMLCwnBzc6NcJWqF9vvNWUK/OUv0xi9btUPv7/q0oXR2dmbx4sV8t/swu++Wg8FCyEe0tsairnSSoWr30+tXseiLDZhaPIrIPG61tSAI9HIy5+idYgqz77PhLysQBAn+vQfh26s/Y175Kz/8Zj5KpYKRL/xRb2xNxrwRI03BU2NQ6q7qMq7FV2tXt/5PyypFwRUKhi15XW+sSqlk/Z+XMWL573HyCaC8pAi5qRkyUzMkMjkqpaLaw6O5wgqGtO9KCvJY/d+fsHeai5l7wz1OLUl4eDgXLlzg4MGDRhmhKqSlpbF161bKy8uZO3duo7yH9UEqlTJjxgy2b9/O5s2bmTFjBl27dq22X43aqz796GIpUqZUt0i4saysjIMHD3Lp0iV8fX157rnnsLOzIzY2lv3792NhYUFSUhIrV66k36RZHC8wbZAsWFMbIq6urpSWllJYWGiwIr0tU1JSQkJCAnFxcaSlpSGXy+ncuTNjxozBz89Pb6FtJhOaJRXH0tYesftIUNfvqK2lsaiblw+Gq90FQcJ3r87D3NqWSX/4J/bulXqqj1ttrekpb+3oUs1w9+7WmxVr9+i99rT0lDfSujw1BqXuqs4rpCcrvtmtt33BRz/UOPbygW2kxccQueZDItd8SN+Zi+g6fAJfPTcOUVTTb/bzej+0LRFW0NW+s3PqgJ2dHTdv3mw2I6Sp0MgIrVu3jqtXr9bpHWvP1Dd/TxRFzpw5w9GjR/Hw8GDx4sXY2toaOGLTIZVKmT59OhKJhK1bt6JWq/UKbGrz8kksbLiKwM2EnGYPN16/fp09e/ZQXl7OxIkT6dmzp/YaduvWDW9vb3bs2MGtW7cwsbQiMkeCIDXcgq4qzWWIaApz7t271y4MSoVCwbVr14iLiyMpKQlRFAkICGD69Ol06tSpVimf+mrrNiQVJy6nHKUIalFk6z9eJSctFRGR6W99wv5P/kFpYR4Ak//wT63OZWtoLFbNyy/MyeJBWoq22v3Iyv/wzL+/wdLOgeTo0+z+959Z+MlPwCPppMZ2MXsS8uqNPHk8NQYlPFrV1b8XciU9J86m58TZ1V4fsuhVg/u3RljBz8+P5OTkFj1nYwkMDCQgIIDDhw8TGBj4xMkINSR/r7i4mB07dpCUlMSAAQMYNmxYi0neSCQSpk6dikQi0eYlduvWrW7xf6Fh2quNoaSkhAMHDhAXF0dAQAATJ040aGTb2dmxcOHCyn7dyVnIpLJqxuSlA9vY8++/8LfIq9XGK9QQl1NGhHPTyWvZ2tpiZmbGvXv3CAoKarLjNiVqtZrU1FTi4uJITEykoqICDw8PRo8eTUhICJaWlvU+Vm2pOLpC+/VJxdH1+mVci0NZUcGKtXtIiTnLqZ++YtLv38fB04es1CT2fvR3Fn22Tju2pTUWq+blG6p2t7Sr7KDj12sA+z56W2//x622bg5j3oiRx+HJepLXQUNXdQIgEUBVzyVga4YV/P39iYmJIT8/v9m9W03B6NGjn0gZoYbk70lzM7Tt5+bPn09AQECLz1cikTBlyhQkEgk7duygXC3yi8RT7/uhVqvZ+s5rep4iZ9/KCvHm8PIlJiayb98+VCoVU6dOJSwsrFYjQSKR0L9/fy5ZZ1Oo1N+mVqmIP7wLW9eaxdeP3SlBFCGsg1mTvAdBELQ5nm0JURS5d+8esbGxxMfHU1RUhIODA/369SM0NLRB2qZVMZSKU01ovx7oev1sXdxBFCs9/YX5WNo54ODpA4BULq+W5/64Xr+GYlK1Ut1AtXtZUSFmVtbcT76GuY2d3v5NkRbVlMa8ESOPy1NlUELDV3UitIuwgq+vL4IgcPPmTXr27Nni528oTk5OREREPFEyQg1p67kpKR/F+Ui8HByYMWMG1tbWdYxqPjRt5CQSCYfiUpCFeOh5+Qx5iqa/9ZF2e03hxoZK9hQVFbFv3z6uXLlCcHAwEyZMqPfnolQlUqgSNI2rtFw+sI2QUZM59eN/axyrBiLvlvDLvZImC+G7urpy48aNxzpGU0ke5eXlaYtrsrKysLCw0BbXuLu7N6lHTzcVpzHoev0s7Dogkcn5aHo/lOXlvPDtXu22fR+/zaAFL1Ub35Iai7p5+YDBavc1K6ZpBd0n/+kD7dimTIuqasx/8fUquoV0YdSQQcYcdSMtylNnUELDV3XtIaxgbm6Ou7s7ycnJ7cKgBBgyZAixsbFERkYyefLk1p7OY6EnH1IPRERM+4xndmgHLOSt/zUUBIHx48dzPfou5ejbZYY8RVXRDTc2VLJHFEXi4uI4cOAAgiAwc+ZMunTp0qCHYdXwI1R6J+MO7+TZj36o1aDU0JQhfE2ld35JGaJU3iCDsCkkj0pLS7XFNbdv30YulxMcHMyoUaPw8/Nrs20hdb1+N84eQyqV8rvt50hPvMTej/7OMx+s4fBXH9AxNBzfXv2rjW9JjUXdvHwNVavdX/n5iMGxzZEWpTHmna3NKcjONBqTRlqc1n+StRINCdG0l7CCn58f0dHR7UauRFdGqHfv3ri6urbpjhi1oZEPSYuPYfd//qrXprMoJ4ud//wD5SVF+PTox6gX/4ggSFADibkKwp3bxtewTA0VMrOqTr5aPUUaNOHGjBJFgyR7CgoK2LNnDzdu3CAkJISxY8c2KH9PQ9XwI8DFfZsJHTXFoOB5TahFNZuuP8Dr5ikcbKywt7fX/rOzs6tXr+kypZoca3fkI57lq2tF2tfrYxA+juSRUqnk+vXrxMbGcuPGDURRxM/Pj2nTphEcHNwu+mTre/1ELB4uXiztHCgrKiB613oKMu8y4+1Pq41tDY3Fhublt0RaVIcOHUhLS2u24xsxUhNPVS/vpkAUxcfKEWpOUlNT+f7771m+fDlubm6tPZ16oVKp+PrrrzG3tiV07HSis8rabEeMmhBFkZWJueRVqCnIuoe5ta22TadH527EH93D+Nffwda5+j2xM5Gwoot9m/gM6fZn1uXa6aPEHdrBzHc+Jz3xEie//4JnPlhTbb8JHa3Yd7uo3vnJPcRMYg7tQi6XM2HCBIKDgxs9d917oGH/p+9y91ocgiBwO+4CPSfOYfIf/mnQ6JfqdrASRezvX0OZfJm8vDyUykeJmZaWlnoGpq7BaW1tTWqRUmsQiqIawYCOolyCQYOwvikTUHn9Zvnb4GstJzU1ldjYWK5cuUJ5eTnu7u6EhoYSEhLSLlNJojJLOXqnGJVSyca/vkDRg0yUFRWMf+Md1iyfhmfX7khkchzcOzLznc+140Z6WLZolbeGht632f7NG8nSNEX4y1/+0qDFlBEjj0vbcI20Ix43R6g58fLyQi6Xc/PmzXZjUEqlUrqNmMAvhSZk3immahJcW+mIURu6hQRV23SKKhW5d9PY99HfKcrJZvTLf8a7W2/tPi1dSFAbhrx8lVT3FBniUHr9jEl4WM2rsqNTlxDGjRpRrXdzQzEUfhyn00L1i/kjmfyHfwKVIfxlK7dpjf7EE/sJHTlZ92CIHbvw0tjKYrGioiJyc3O1//Ly8sjNzSU1NZXCwkLtMKmLN7Le4wEBBMGgMQmGQ+v3H+QydMgI7idf48XvD2Dv5sUPry9ArVIikcqY+Y/PsHf3Yvt7v+Ne0hVEtZobL/6Bzsr7FOXmYG9vT58+fQgNDcXR0fGxrmVro/H6IZNVW7i89+vdavuLohqJqCbAonV8I3Xn5YuIIsgEmOlv2+xpUY6OjqhUKvLy8nBwqJ6eYsRIc9EGzSIjjUUqleLj40NycjIDBw5s7enUi+SCCk6XWlVqB1YLtj6itTti1Iah/D1Nm86Iac+S8Y/XeOZfq5HK5Xz/22d55afDevu2ZCFBbVQtMtAQ0Gco0bs2sGrpZJQVFUz43bvVB5cU8smKGWQ+NIhcAzqz6a2XuX76KMOXv0n/uUuBys4hp376Gs8u3Zj/n7V07Pv4xqSG2sKPurlsVY1+Q4bfI0NfgrW1NdbW1nTs2LHafkqlkry8PO7n5LGvyAbVQ2OyLkRRZGtSHhNtCnFxsOdmqYSFn61j/yf/AEAikzHn/a+wcXLl+plITv7wBVP+9AFDFr2Kg6cPpQV5rH15NoO/WM1sf2c8PT3bhJe7KWioGodEEBBjjvDdL9nMmjULDw+PZp9jVWpPi5KiSLqEeW46Pt0XNPtcNAuK7Oxso0FppEVpA48xI02Jn58fR44cQaFQINcN47VBqnplajJCItd8yI2zxytbXk6azfr3/timwt9VPXu6bTot7Rzo4OWLnZsnAFKZHJVSqddftyULCWrDkJcPQGrAU1QVEzNzntMxiADGvvYW/hEDKS95dLxuY6YRPHAUBz57FxCaVDuwoYaIxugfvvQNg9vrY+jLZDIcHR1JUVuiKi6mrLCAb16aqTWsO3j68O2rc4HK1nwqpYLX1h8DQUApwtYzsahSYjEZ8SxWdo9ke+SmZsgfGr5SuQnCw9DlI9kcExAESpx88fRsGykTTUnD1DhssfedyJYtW1i7di0jR46kb9++LX5NasvLTzLxYt26X0hJScHPz69Z52FjY4NcLic7O7vN6qAaeTJpO09lI02Cv78/KpWKW7dutfZU6iS5TMrCz9YRMnKS9rWxr73FuN/qCwAPfu5VVnyzmxe/28+ZTd9xOaukpadaKxrPHlRv0yk3M8fC1p7SwnwqSotRVpTrGZOtUUhQG6EOpsgb8KsgUBnKq5DIsLLXD7XqegI1WDk4IdGpMNZ4ApsKjSFS13vQNfqlNSy86mvo64pxyx8a1prPtNzMnOWrd7J89U76zlpMl6HjteMEAay69iGkVwSCpa1Bz6ZSUcHRlf/WLq40HPziPfrPWdrk168tofH6jfSw1H6/NNiZSBjpYcnLIQ742phgZ2fH4sWL6dOnD4cOHWLjxo2UlpbWcOTmpTItSoKdqRRzmQRBEAgICMDd3Z0TJ07Q3GULgiDg6OhIdnZ2s57HiJGqGA3KJwxHR0esra25efNma0+lVkRR5HKesl5GiExeGeJWKcpx8PThYk5Fs/8oNwSNZw9EvTadq5ZNIfbgdsa88ld++M18Vq+YzsgX/qg3tjW6KtWGxstXnxmJYmUl7livxyv8KG9ig0hjiIzwsDD4A1fV6DdEQwx93RxaqVxe7TOtIe7ILsJGTdF5RaBMYsKN23dqPPb2996g76zFOHb01752YcfPqJVKekyYBTT99WtLaLx+K7rY85tQB154+N8VXewJdzbXU9bQtHWdO3cut27dYuXKlaSnp7fi7B8hCAJDhgzh9u3bpKamNvv5nJycjAalkRbHGPJ+whAEAX9//zbfhrFqH9y62P2fvxJ3eCf9Zj/fpgpZoDKP7l70SUTHUHpOmGWwTeeKtXv0/m7Nrkp1UVe4URTVCAhI1Gpk8cdx9h1ffacG0BwhfzOZhAhnC0SxUrRcF12jP3LNh/SduYiwMdP09mmIoW8oh7YqpYX5FGZn4uxXPQT53HOL+P56frXXj6z8Dw4ePnpzSzp/gvjIPSz46Efta20lZaI5aUgxZKdOnXjhhRfYsmUL3377bauFwKsSGBio9VL6+vo267k6dOjA9evX242EnJEnA6NB+QTi5+fHpUuXKCoqarOyIfV5COsy6ffvM/a1t1j5/ER6TXmGcpV9myhkefDgAVu2bCErK4vwsR5cFlzbfFel+lBbkYEFKgrjz+GszOf+nTRWfv4p0mHPILGwafB5mjvkH9bBjF/ulegZxj0nzjZo9MNDY1mtxkNSAtSvWKjm6vhHJB7fT5eh4wxuszWRYGci4eMVs8m4Fk9W6k06DRzJsTUf4t29DzejfqFjWDhjX32L7e+/iZmVDd+8OAO5qRmvr9rcplIm2gq2trYsWrSIo0ePcujQIW7dusWUKVOarACsMQiCwODBg9mwYQOpqan4+Pg027mcnJwoKyujpKSkUbquRow0hjbwSDbS1GiSvpOTkwkLC2vl2RimPg9hDcqKcmQmpshMTJGbmSM3NWsTXpm4uDj27NmDtbU1S5cuxdXVlaBahKk1tHZXpfqiW2RQXKEkNe0Ot1NuknLjGqqsLDIAU1NTysvL8ZeW8c5rK7QGUZ8ZC8m6lcSVEwcR1Spy0lOZ+OZ7XD64nbMb1/DgdgprXpjBup37mtWD0piKYZPEk3x3+CYTJkyo1/enpup4XeIO72L86+9Ue93ORIK5rFJrdfHnG/S2jVj2u2r7/35XlN7fbS1loi2hCYH7+PiwY8cOVq5cycyZM/H09Gy1OQUFBeHm5saJEyea1aDUVHpnZWUZDUojLYZR2PwJZeXKlTg7OzNt2rS6d24F1Go1X1zO5MtXnyXjWjx2bl7VjJCg/iOY+OZ7bH//TbJSb6BSKOg+bgZ9Js7E5foJQkNC6Nq1a4v/YCoUCvbv38/FixcJDQ1lwoQJmJo+Cl2XKdVtvqtSfSgoKODGjRskJSWRnJxMRUUFVlZWBAQEEBgYSHFxMfv378fapzNlnQciyOqvKqAJ+b/c1aFFvLS1daDRoDH03U1F9u3bR2xsLN26dWPcuHF699cQGjFugG9fnav3me46bAJrXphusA2fRoy7TKnmy4ScBndcaanr197Jz89ny5Yt3L17lxEjRtCvX79WM8SvXr3Kxo0bee6555rNqFSpVLz//vuMHz+e8PDwZjmHESNVMRqUTyiHDx8mNjaWN954o815MLKysti/fz+3sUYWMrBeun26dJHkU5Rwnps3b2rby4WEhNC5c+c6H/yPS2ZmJlu2bCEvL49x48bRvXv3Gq9vW+6qZAiVSkV6ejo3btzgxo0bZGZW9gP29PTUGpGurq567yHy8jXOK+0fannX37BpiY4hVWmooX/58mX27duHlZUVM2bMwN3dvdZjP65B2NY6rjxpqFQqIiMjOXPmDEFBQUyZMgULC4sWn4coiqxatQozMzOee+65ZjvPF198QUBAAGPHjm22cxgxoovRoHxCuXnzJj/99BMvvvgizs7OrT0dAMrLyzl58iTnzp3D1taWEWPHc6DUrtEP4ZKSEhITE4mPj+fWrVvIZDKCgoIICQkhMDAQmazpMjpEUeTixYvs378fBwcHZs6ciZOTU5Mdv7UoLCwkKSmJpKQkbt68SXl5OZaWlgQEBBAQEIC/v3+NeWcaI6pcoWTz31+lICsDe/eOTPvbR6z/01JK8nJQVJQz/jdv49urv3Zca4f8G2Lo5+TksHXrVu7du1enZ6spDMKGeFKNxmTjuH79Ojt27EAulzNz5ky8vLxafA4aL+WiRYvw9vZulnNs2LABpVLJs88+2yzHN2KkKkaD8glFoVDwwQcfaB+CrYkoiiQkJHDo0CFKS0sZNGgQ/fv3RyaTNZlXJj8/n4SEBOLi4rh37x6mpqZ07tyZ0NBQfHx8HqunbXl5OXv27CE+Pp6ePXsyduzYNi8aXxNqtVrrhUxKSuLevXsAel5INze3enlSNWHeuCO7yLiewOiX/syJ7z7H3t2LLsPGI5ObkHv3NlvffZ2lX2/VjhvqZkFf15b3DDUWXc+Wv78/U6dOrbHYrSkMwiclZaItk5+fz9atW7lz5w7Dhw+nf//+LRo9EEWRlStXYmFhwcKFC5vlHEeOHCE+Pp7f/va3zXJ8I0aqYizKeUKRy+V4e3uTnJzcqgalJrydkpJCcHAwY8aMwc7OTru9YR0xan4I29ra0r9/f/r37092djZxcXHEx8dz6dIlrKys6NKlC6GhoXh4eDTowZGRkcGWLVsoKipixowZhISE1HtsW6GoqEjPC1lWVoa5uTkBAQH069ePgICABof+dMW8c9JTce9UeV08OoeRcGwfYaOnAlBeXISLf7De2EsPyujj0n6KSaRSKaNGjcLPz4/t27fz9ddfM3XqVAICqmtY1t6Cr34GYW0dV9rLNWvr2Nra8txzzxEZGcmRI0e4desWU6dOrfF7IIoipSqRCpWIiVTA/DHvhUaXctOmTdy+fdtgW8/HxdHRkfz8fCoqKjAxMXqzjTQ/Rg/lE8zp06c5fvw4f/zjH5s0/FsfysvLOXHiBOfPn8fOzo5x48YZfABraA6vjCiK3L17l7i4OBISEigqKsLe3p6QkBBCQ0NrDVmLosivv/7K4cOHcXZ2ZubMme2mL65arebu3bvaXMiMjAwA3N3dtV5Id3f3x/LalijVfBaXA8CVEwe5fuYoU/78bw589i559+8y9/2vWblkEtm3bzLr3S8J6jdMb/xvQh0wb4fFJEVFRezcuZOkpCT69evHiBEjkOp0/tGlveXQPq3cuHGD7du3GwyBlynVxOWUE23gd6mXkzmhDqaNLooSRZGvv/4aKysrFixo+h7fd+7cYc2aNSxfvhw3N7cmP74RI1UxGpRPMPfu3WPlypUsWLAQ147eTba6ro3awtv1Hd8cD2G1Ws2tW7eIi4vjypUrlJWV4eLiQmhoKCEhIdja2mr3LS0tZdeuXVy9epXevXszatSoFjfIG0pxcTE3b97UeiJLS0sxMzPTy4VsSk3SvHIVXyfmApX3bN/Hb3P3ahwu/p2Qyk2Y8Ma7lftlpPPDGwsq+1fr8EIXe+xMDRtibR1RFDl37hxHjhzBxcWFGTNm0KFDh7oHGmmzaELg6enpjBgxgv79+5NSqKhX5GSarw1+jcxnTUxMZPPmzTz//PNNnstZVlbGBx98wLRp09qsfJyRJwujQfkEU6pQ8dnWA5gEdKdc+qj6ub6r64aGeTIzM9m/fz+pqakGw9ttBaVSSVJSEvHx8Vy7dg2lUknHjh0JCQnB3t6ePXv2UF5ezpQpUwgODq77gAZo6hCZoeNrvJBJSUncuVPZvs/NzU3rhfTw8HgsL2Rt6HoodTny9b/xixiAd1hvpHI5Jfm5/Pj6gmqdgtqrh1KXu3fvsnXrVgoLC5kwYQLdunVr7SkZeQxUKhXHjh3j9OnTeHbvS3bHXvXO7Z7l3zijUuOltLa2bpbimY8++oju3bszfPjwJj+2ESNVMRqUTyja4gBNRxoDxkxNq+uGhnkaGt5uS5SXl3Pt2jXi4uK0MkRmZmYMGTKEHj16NFiGqDlDZCUlJXpeyJKSEkxNTfH399d6Iq2trRt17IYiiiJfJ+SQX6Gm8EEmG/6yAkGQ4N97EAOffZFvX5lTuZ9KxehX/opvz36agVhJRV4Oc3oiwr8VFRXs27ePy5cvG9QkNdL+SLiexO58S5DK6i1pJn8MTdCEhAS2bNnCkiVLmlx0/YcffsDMzIzZsw13hjJipCkxGpRPIA2tnNZdXde3SnWarw2+1nLi4+M5dOgQZWVlDB48mH79+rX58HBViouL2bFjB0lJSfj5+aFQKEhLS0Mmk9GpUydCQkIICAio83015NrVx5shiiL37t3T5kLeuXMHURRxcXHReiE9PT1rzOFrbr45co4sB/+G6YiKIsr4U/jJShk2bNgTk9ul6ZpkaWnJjBkz8PDwaO0pGWkkGvWCssICvnlpJpnJ13jx+wO4BnQm//5ddv7zD5SXFOHTox+jXvyjdpxGpL6hiKLIV199ha2tLfPnz2/Kt8K+fftITU3lpZdeatLjGjFiCKNB+YTRUIFleLS6vluibIAhKmKX/Cv34i/QuXNnxowZo5eH2F5ITU1l27ZtqFQqpk2bpvWs5uXlaWWI7t+/j5mZmVaGyNvbu1oo+XGMeF3Kysq0XsgbN25QXFyMiYmJnhfSxqbhPbObmvj4eLbu3I3F+CWoqJ9XRqMjOkKayanjkTx48IDOnTszdOjQNqOV+jjk5uaydetWMjIyWkWKxsjjI4oiKxNzyatQo1IoKC3KZ/8n/2DQgpdxDejM+j8vZ/zr72DrXH0hZGciYUUX+0bd8/j4eLZu3crSpUubdDHy66+/cvDgQf761782W/qLESMa2pcryUidnE3N5JP54/VW1Zveepnrp48yfPmb9J+7FIDMlBtsf+8N1CoVo178ExddxnLmfkm9DCIAJ33E1QAALshJREFUtSiS692T2d2C6Rzg33xvqJlQq9WcPHmSkydP4u3tzfTp0/XCxXZ2dgwYMIABAwaQlZWllSG6ePEiVlZWhISEEBISgru7O+Uqke0p9TMmAURge0oBL3d1wFQqcP/+fW0uZFpaGqIo4uTkRLdu3QgMDMTLy6vVvJCGyM/PZ+/evXTtFEgPP1u2JBfW+71XSj85EtYlmNjYWE6cOMFXX31FWFgYQ4YMaTeV9Iawt7dn8eLFHDt2jCNHjpCcnMzUqVNbLA3ByONTqhK1qSpSuRwre0ftNpVCQe7dNPZ99HeKcrIZ/fKf8e7WW7s9r0JNmUrEXNZwg7JLly6cOHGCEydO8MwzzzRZDrajoyNqtZrc3Fxj4ZiRZsdoUD5BiKJIYpHAc5+tY/8n/9C+Pva1t/CPGEh5SbH2tUNfvM+Mtz/BysGZ716dQ2j/ISjUkBYfw+7//BWpTIaNsxuz3/2SMxtWkxC5BxNzS2a+8zk2Tq6VbfakEoptam5H11YpLCxk27Zt3Lp1iyFDhjBo0KBaV+9OTk4MHz6cYcOGcefOHeLi4oiLi+PcuXM4ODhgEdSTT373ap1G/Pb3fse9pCuIajWjXvoj6x94k3vpFIWFhcjlcvz8/Bg/fjyBgYFt1tsriiI7duzAxMSECRMmYG5uyix/ocE6ohKJhO7duxMaGkpMTAy//PILcXFx9OjRg8GDB7fZ918XUqmUkSNHVtOsDAwMbO2pGakHFaqal0bFeQ/IuB7PM/9ajVQu5/vfPssrPx3W26dcJWLeiKeqRCJh8ODBbNu1hyM37pFUYdIkOdgaabQ7WQ+QWtk1u8qHkacbo0H5BFGqEikUpXqragAbJ9dq+xZk3cOxY6Vn0dzGnuzsbCztO2Dr4s6ylduQm5lz4PP/IfbQDq7+cpgVa/eSnnCRyDUfMfXP/9Ye50JWKb2czNrND1RSUhLbt29HIpGwcOFCfHx86j1W09fa09OTMWPGkJqaSmxcHAlmHVj46c8c+PQd7b6GjPghi17FwdOH0oI81r48i6BV2+jWtStBgYF07NixXeSenjt3jtTUVBYsWKBtyfg4Yt5SqZSIiAi6d+/OhQsXOHXqFJcvX6ZXr14MGjSoSaWOWhI/Pz9eeOEFdu7cybp16+jbty8jRoxoF/f4acZEWvPvmLm1LR28fLFzqyyckcrkqJRKpDr39Ep8LEE+HXFwcGjwb6KFVyCmYxZxoVAKgv7qLK9CzdE7xZzMKK53DnaZUs3VUikmI55lX6ktPJT5aooCQSNGDGH8dXuCqG11XRVRfPSDZWZlQ0lBHpb2HfSMT6nMhIKsDFz8OyEIAu7BYWx997d6x3mcME9LoisJEhAQwNSpU7G0tGz08SQSCX5+frh29OFqXA5Vg5qGjHgHTx8ApHITECSI5tYM6T2q3cjn3L9/n6NHj9K3b1/8/Pz0tj1udxe5XE6/fv3o2bMn58+f58yZM1y8eJHevXszYMCAGvuJt2UsLS2ZN28e58+f58iRI6SmpjJjxgwcHR3rHmykVTCXCtiZSPQWRRrkZuZY2NpTWpiPVCZDWVH+yJgURSTlxRw+vJtDooiVlRU+Pj54e3vj4+NDhw4dav0eJBdUsCWlqLKynJr3U6hh882COmWKdAsEBQv9nOvGGKdGjNQHo0H5BFHb6roqgvDIiCkrKsDCxk5ve+7dNG6cO87CT37kh98uQFlRzs2oU5Tm51Y7VmPDPC1FXl4eW7du5e7du4wcObJJiyUaYsRrOPjFe/SfUxkGb+vXToNSqWTbtm106NCBESNG1LifIAiYy4RGvydTU1MGDx5MREQEZ8+e5dy5c1y4cIF+/frRt2/fdifJIwgCffv2xdvbm61bt7Jq1SrGjRtH9+7d241X/2lCEAR6OZlz9E5lZOHbV+eScS2erNSb9JmxkDGv/JUffjMfpVLByBf+qDuQ4f4uhPb8I7dv3+bWrVukpqaSkJCAKIpYWlrqGZiOjo7a+1+mVOvkYNf9mdDNwTbkYaxWIFjD56y+xqkRI/WlHTzKjNQX7eq6XFXnvtZOLjxIS8HKwYnSglws7R8lbJcVFbLprZeY9c7nWNk70nfWIta+NAu3TiE4+VTPBTNtgCHb0ly9epWdO3diamrKokWLmrwbRUOMeIALO35GrVTSY8IsoG1fO12OHj3KgwcPWLZsWYuEbc3NzRk+fDh9+vTh1KlT/PLLL5w/f54BAwbQu3dv5HJ5s8+hKXFzc2P58uXs37+fXbt2kZyczIQJEzAzM2vtqRmpQqiDKSczilGoYfHnG6ptryrSr1EvCHEwxVQmITAwUJszW15eTlpaGqmpqdy6dYsDBw6gVquxtLTUGpf3TBz4ZP4sbQ62vZsXP7y+ALVKiUQqY+Y/PsPe3YvT61dx6qev8ezSjfn/+Zb4nPJqMkX6xmklapWKzX9/hYKsDOzdOzLtbx9pPat1GadGjDQEo0H5hCCKItevX6f4SirffvIfvVV11q0krpw4iKhWkZOeysQ332P0y39hy9uvolarGfnCHzCVVHrLVCoV6/+8jBHLf4+TT6WETs+Jc+g5cQ7JF05jYadfKWhnIsGsDRpFSqWSw4cP8+uvvxIcHMzkyZObJWxaW4isKknnTxAfuYcFH/0ItN1rV5Xk5GTOnTvH6NGjcXFxadFzW1paMmbMGPr168fJkyeJjIzk3LlzDBo0iJ49e7arnEQTExOmTJmCv78/e/bsYeXKlcyYMaPJxayNPB5mMgnTfG3qLQMGlQVnhgwyU1NTrdwXVArhVzUwGTSL5z79mf0Pc7AlMhlz3v8KGydXrp+J5OQPXzDlTx/Qbcw0ggeO4sBnlW1NDeWvx+WUVyuOSzi2F3uPjsx5/ytOfPc5CZF7CBs9VbtdocagcWrESENpP7/GRmokKyuLgwcPcvPmTXwDO7Hsi/UoRX1DZeyrb+n97eLXiRVr92hX131cLDiZUcLlA9tIi48hcs2HRK75kL4zF5FwbB9FOdnYu3ky+U8f6B0n3Mm8zYXucnJy2LJlC5mZmYwdO5bevXs32xw1IbJnp0+q04jf/v6bmFnZ8M2LM5CbmvHz9j1t7tpVpbS0lB07duDr60vfvn1bbR42NjZMnDiRAQMGcOLECQ4cOMCZM2cYPHgw3bt3b1caeyEhIXh4eLBt2zbWrl3LsGHDGDBgQLt6D086fjYmzPK3abB6QV1oNGX9/SsLIvNLyvjqWhG6/na5qRnyhznYUrkJwsPPhZWDE4qyUu1+VfPXRVEkOquUquSkp+LeKQQAj85hJBzbp2dQQvsrrjTSNjEalO2Y0tJSTpw4wa+//oqdnR1z584lKCiIlEJFg1fXbhYyzt4voefE2fScqN+mK2zMtGpjRFGNoFZx98IJEn064uvr22yFEw3RZIuPj2f37t1YWVmxZMmSFunEEupgyrLP16MQRb3c1KpG/O93RQH6IbK2jCiK7N27F4VCwdSpU9vEw8be3p6pU6dqDcvdu3dz+vRphg4dSkhISJuYY32wt7dn0aJFnDhxgsjISFJSUpg2bZpRs7IN8TjqBfVFlNacuqFUVHB05b+Z/vePa9xHNwdbV0NTF2ffTlw/c5SQEZNIOn+C0sL8avu0l+JKI20bo0HZDlGr1cTExHDs2DGUSiUjRoygT58+2vBfY1fXDQnzSAQB77yb3Lp5g4tR5wFwd3fH19cXPz+/JpHBaUhfbIVCwYEDB4iJiSEkJISJEye2WAFHQU42qpjDCD1G1XtMTSGytkRcXBwJCQnMmDGjTXTn0cXJyYmZM2cycOBAjh07xrZt2zh16hRDhw4lODi4XoZlU4lHNxapVMrw4cPx9fVl+/btfPXVV0ydOpWgoKA2Od+nkcdVL6iL2nKwt7/3Bn1nLdbKuxlCNwe7pgLB4MGjSY4+zerl03Dx74R1B8NdqdpLgaCRtovx49POuHXrFvv37+f+/ft0796d4cOHG/RqNGZ13TBD1BbfHgNh5EDy8vJISUkhJSWFS5cucfr0aaRSKR07dsTPz69SXsfVtUEhvdr6YleVvbAuz2fz5s3k5uYyadIkevTo0WIP2tzcXH766SdsLSwY6mXO3rvVc5h0aWiIrLXIy8tj3759hIWFERIS0trTqRFXV1fmzZtHeno6x44dY9OmTbi7uzNs2DD8/f0Nfg4aslBpCXx9fbWalevXr6d3796MGjVKuyBra/N9Gnlc9YKaqCkH+8jK/+Dg4WMwOqShag52TcapIAhMeKMy7/LI1//GP2Kgwf3aS4GgkbaLsZd3OyEvL48jR46QkJCAh4cH48aNq3fPV1EUG7S6LlOqGx3mEUWRzMxMkpOTSUlJITU1FYVCgZmZGb6+vloPZm3Cvw3piw0iql/3Ya8qZubMmS3aE7qoqIi1a9cC8Pzzz2NlZfVY166toFar+eGHH8jLy+OFF15oV5XIqampREZGkpaWRseOHRk+fDje3t7a7bUtVDTIJbSKPp8oikRFRXHo0CEcHR2ZMWMGhaa2bXa+RpqGqMxSbQ62nZsXnQaOJHLVf/Du3geAjmHhjH31LS4f3M7ZjWt4cDsFl4DOrNu5j96uj7R0dfuQ61KYfZ8Nf1mBIEjw7z2IYUterzaHx+lDbsSIBqNB2cZRKBScPn2a06dPY2ZmxsiRIwkLC2uRL35DDVFDqFQq7ty5Q3JyMsnJyaSnpyOKIra2tlrj0tfXV9sRpUyp5suEnFofoPpzVCMRRV7sYoeNecvlJJaWlvL9999TUlLC4sWLsbe3rzKvx792rcWpU6c4evQozz33XIM6CbUVRFEkKSmJY8eOkZGRgZ+fH8OHD6fc2qneCxUBWk2f7969e2zdupV8uTWS8HE16gjq0przNfJ4NPQ3T5ODbUjqJyqzVKuh2RBGelgaq7yNPDZGg7KFaGj+kyiKJCQkcPjwYYqLi+nXrx8DBw5sd8LOVSkvL+fWrVtaD2ZmZiYAzs7O+Pn5UWDrwRtLF+r1xY47vJNTP69EbmrGrHe/wNbFnZtRpzj4xftIpVJGv/wXlk0e1WI/iBUVFfz44488ePCARYsWtahXtLnJyMhgzZo19OvXj5EjR7b2dB4LURS5evUqx44dIys3H7OxixElUuojHg2Vnr/W0ucrKC3nq8Q8lGo1W95+TashOOn3/2tQo7C152vk8ah/VEZEQGC2v+G0mTKlmi/jc1CoxXovRGoyTo0YaShGg7KZaUz+U0ZGBgcOHOD27dt06tSJ0aNH4+Dg0NJTbxEKCwu1+Zc3k5Mp7jGOMpXIgU/fYdCCl3HyCWTlkkksX7OT9ISLXNyziWl/+5D/PjeOxV9sQCqT8d1rz/CH73e3SMhGqVSyYcMG0tLSWLhwYb3TDtoDCoWCVatWIZPJWLp0KVKptLWn1CSo1Wp2x6ZwRW2j95C9dTmKg1+8B1T2tg8eOIqJb76nN7a1PDcaT1PckV1kXE9g9Et/5sR3n2Pt6ExAnyFajcIrJw8yRUfKy+hpar/UmY4hiqBWMt3PliAHixp2Efn5wHHSXLo+/C2s/fdQgBqNUyNGGopxSdKMJBdU8GVCDkfvFFfLa9EUlnyZkENyQQUAxcXF7N69m1WrVlFSUsKzzz7L3Llzn1hjEsDa2pqwsDCmTJnCildeQ27riLWDk3b7g9vJOPsGIpOb4NO9Dxk3EgFQq5SYW9tiYm6JWqXkzv0syhrRBrEhqNVqtm/fTmpqKnPnzm23xqQoipQo1eSVqyhRqtGsKY8cOUJeXh7Tp09/YoxJqCxKyJDbV/PYeHeLYPnqnSxfvRPvbhF0GTau2tgLWaW09JpbV0+wqoZgWnyMtk+8rkZha87XSNOgKaQc6WGJnYn+fbUzkdDfQYI68ieun4ms8RjR0dHc/PUkfaS5yCW1G5NyidGYNNK0GKu8m4n6hjA0/VRDK+4Se2wfgiAwduxYwsPDn6iHen0wtDIvLczD1PJRFbuormwrKTMxIS8jHamJCfeTrlJamNessheiKLJnzx6uXLnC7Nmz8fX1bZ4TNSO1ecu9hSJ+jbnE2JEjcXJyquUo7Y+a9Pk0KBUVpMdfZMbbn1Xblleh5udNW5GoKhBFUe8fUO21+m6vbZtaZoJi4BygZg3BmjQKjXqC7Zu6ZIrMhw1l3759BAcHa7vvaLhz5w4HDhwgPDyc4d060f8JKBA00r4wGpTNgKF+qrUhiiKXJU50Ce3GyKGDsbS0rHvQE4gh2Qsza1vKiwu1fwuSSiN70pv/y5Z/vIa5jS2uAZ2x7uDSrLIXR44c4eLFi0yZMoXg4OBmO09zUZcMU55ojtmYxTgG2lffoZ1Tkz6fhqTzJ/DvPahGWStRKkMiKhEEocZ/QK1/13ebIAiUS+RcenjumjQEa9MoNOoJtn9qkikKDw/n6tWr7Nq1i5deekmrwFBSUsLmzZtxdXVlzJgxQPNraBoxUhXjz04zoOmnqlar2frOa+SkpSIiMv2tT9jxv28iqlQIUinhU+ZXdqURBASZDI+IoVhaPr35T4Y02Ry9/MhMuYFSUcGdxEu4BXYBwKNLN5au3EZx7gN2/usPuNjbNFtf7FOnTnHmzBnGjBlD9+7dm+UczUm9vOWCgCiVsSW5kFn+whNVLVybeDRA/OFd9Jo8r8btM6dOxrwFCxZKlGouxeUAhjUE69IojLsYTdeggCc6VeZpRRAEJk+ezFdffcX+/fuZNm0aoiiyfft2KioqmDVrVrWGEs2loWnESFWMH7EmRjf/KeNaHMqKClas3UNKzFlO/fQVAIu+2ICphVWVkcJT30+1pr7YA59ZzuplU5GZmDLr3S8AOP7tp9w4ewy5mTmT//DPZuspfuHCBY4ePcrgwYNbtZd1Y2mwtxzYnlLwRFV91iQeDaBSKEhPvMT0tz81OLaqeHRLoDvfqhqC9h7eHHthOt7d+3Az6hetRiEAoohUUcqJI4eIPLgfR0dHAgMD6dSpE15eXsZe4U8Itra2jB07lp07dxIcHExmZiZJSUnMnz8fW1vb1p6ekacYY5V3E1OiVPPZQ+9CUU4Wu//9F+b+cxVXTh4kLfYCt+OitQUlk/7wT63kh4bfhDq0qDekrdGUmmyPS3x8PFu3bqV3796MHTu2XRr6urp0yRdOE7n6Q0RRTf+5y+g6fALlJUX8Z2I4M/7xGZ0Hj9aOe9KqhWvS57t2+gjXTh9l8h/+aXBca1d5N5SRHpaE2UlJTk7m+vXrXL9+neLiYszMzAgICCAoKIiAgADMzZ+ce/s0IooiGzduJDU1lfLycoYMGcLQoUNbe1pGnnKMHsomRjdfy8KuAxKZnI+m90NZXs4L3+5l4IKXsLRzIDn6NLv//f/t3XlYU3e+BvD3JCQkLDFArY4oFhC1VKgKdRkdrVarVoqKdV+qdZuZTqd3pn3maefemd7pnc7cOvN0mba3Wq11FPdarbgU97XuSwsuKOCCBRVB9iRkOfcPSpqQBIIJCQnv53l4ZDkn+akh5z2/7fsmZn+QbnV+W5//pAiQ/FRTXGx8LzVRNEEQBKRFt3N7mMzNzcWWLVuQmJjos2HSsrdcr9XgyOr/w5yP1yNA9tNw9rfrlqHT44k25/pbb3lCeCAOF1Xb3Kj0GDQCPQbZ7rdZf6PSK9w7+746aq8jlu2VB0jQs2dP9OzZE6IoorCw0Bwus7OzIQgCoqKi0L17d3Tv3h0RERF+8//cVgiCgCFDhiAnJwfBwcEYMmSIt5tExEDpbpbzta4dPwCpVIrXtpzA7UsXsOO9P2P6u8sBADFJg7Dzvbdszmc91brtM+Iq85Gj7AIhIACO9lKTiCaI5/YiLDoFgPvm/N26dQsbNmxAt27dkJqa6rMXW8vVzbe+PwOZQoFVr86ATBmE8W8uhkwRhDu5lxGVkGxzrr+tFra6UXHynLRoldeG/d3VXkEQEBkZicjISAwbNgwVFRW4evUqrl27hgMHDmDPnj0IDw83h8uoqKg2t7uELzIajdi5cyeCgoJQXV2N7OxsJCba3hgSeRIDpZtZz9cSEaSumxgfrA6HtqoC2qpKKEJCcTc/B0qV2upcb8zXao0KCwuRffAbDH56OFQ9kxxue9EtSMS/j5Zg06ZNmDt3rs1k9Idx584drF27FpGRkXjhhRd8+uJq2VteWVqMkoLr+NW/v0HuyUPYu/QfUD36MwycMg+5Jw7ZPd/festjVHJMilU5VRs7Ldr7+/O1RHtVKhWSk5ORnJwMvV6P69evIycnBxcvXsSJEycQGBiIbt26IS4uDnFxcQgKsr+BNnlXZmYmioqK8NJLL+HkyZPYtWsXHnvsMahUKm83jdowP7pctA71C0v2/VCNbv2fxtlt6/HZ/FQYamsx9rW3sXzRBMgC67Z6SLWocAGgxRaW+BKj0Yht27ahQ4cOGDpoIKRSaaPbXkyaNAkrVqxAZmYmxo4d69Jzl5SUID09HeHh4Zg2bRpkMpk7/kpeY9lbrgxVoeuT/RAgk6NbvyHY/cnfENH5MTyz4DWHgdIfe8vrN4/2lf35WrK9MpnM3DMpiiLu3LljHhrfunUrBEFA586dzce0b9++zb8/tQbZ2dk4ffo0nnvuOURGRmLMmDG4fv06MjIyMH36dP4fkddwUU4LaE0LS3zNwYMHceTIESxYsAAdO3Z06pwzZ85gx44dSEtLQ0JCwkM9b0VFBVasWAGZTIY5c+b4xV6goihi6aUHKKs1ofpBCda9uRDzPv0SBdnnsG/pYmgqyqEIVaGk4DoUISrM/OdK8yIxtVzikVKW3iSKok/tz+fJ9lZWVuLatWu4evUq8vPzodfroVarzeGya9eubhkRoOYpLi7GsmXL0LNnT0yYMMH8/3/t2jWsXbsWKSkpSEpK8nIrqa3iO0IL8LX5Wq3F3bt3ceTIEQwaNMjpMAkASUlJuHXrFjIyMtCxY8dmV3qpqanB6tWrAQAzZ870izAJWPaWVyE4LAJPDHsOn82vmxM68a0PEdGlrtrP3iWLERnf22rHgbbQW+5r+/N5sr2hoaHo27cv+vbtC4PBgBs3biAnJwdXrlzBqVOnIJfLERsbi+7duyMuLs5vfmdaM51Oh40bN0KtViMlJcXq9zMuLg59+vRBZmYmYmJiEBYWBlEUoTGKqDWKkEsFKFv5DRP5PvZQtqDGqpPUay3ztbzNZDJh+fLlMBgMWLhwYbN7P2pra7F8ed2Cp/nz50Mud+7fU6fTYdWqVSgvL8fcuXMRERHR7La3VqIoYv/hozgVFAtBKmt0xXw99pZTY0RRxL1798xD47dv3wYAdO7cGXFxcejevTs6dOjgtuDCUFRHFEVs3rwZ165dw4IFC/DII4/YHKPT6bBkyRKEhkUgYXQazhZrbaZIJLVXIiE8kL/b1CIYKFuYlvVUnXL06FHs378f8+bNQ2Rk5EM9hr3hoMYuSAaDAWvWrEFRURHmzJnTrF7R1k6v12Pr1q24dOkSej8zFleCH3Oqt1wAMDmWNzjknOrqavPQeF5eHmpra6FSqcxD49HR0Q81NN5Y3fm2GIpOnjyJb775BpMmTUJ8fLzD445fK8DBMmmjN5AyCTAhWuVX1bCodWCg9BBfm6/lScXFxVi6dCn69++PkSNHuvRYWVlZ+Oqrr/Ds2OcREPW4wwtSvDoAGV9tRl5eHmbNmoWoqChX/xqtRnl5OdavX4+SkhKMHz8e8fHx7C2nFmcwGHDz5k1z72VZWRlkMhliYmLMQ+OhoaFNPo6zr9W2EooKCgqwcuVK9OvXz1yn2x5zidUm9u8F6m4cJ8W2jX8/8hwGSvIqk8mEL774AhqNBosWLXLLyur1e4/iervYRvewFExG6E/vwpRnBiEuLs7l52wtCgoKsGHDBgQEBGDq1KlWva7sLSdPEUUR9+/fN4fLgoICiKKITp06mctBduzY0eam2qm68z9qC6GouroaS5cuhVqtxosvvuhwGzN7C0G1lRX4/Ncv4F5+Dn7172/QsdvjVufIOLWF3IyBkrzq+PHj2L17N+bOneuWXkJn79JF0QSJIGBSbDu/uSBduHAB27dvR6dOnTBlyhSHCyXYW06eVlNTg9zcXFy9ehW5ubnQ6XQIDQ01z7uMiYmBUZDa3R3DXsnQev4QihxNyzGZTEhPT8e9e/ewcOHCRveYtFeq06jXQ1NVjl0f/Dd+Metlm0AJ+F+JVfIuH1nfSP6otLQU+/fvR//+/d0SJrUGE7Zc/7F3o6khH0ECEcCW6xU+f0EymUzYu3cvjh8/jt69e2Ps2LGNzlvztdXN5PuCgoKQmJiIxMREGI1G3Lp1y9x7ee7cOQQEBCCi71DoO/Sw+t11VDLU/HMTkF2q88lQ1NQ80QcXT+LGjRuYNWtWo2HSssSqJalMhpAw28U7lvytxCp5Fy8p5BWiKGLbtm0ICQnB8OHD3fKYWaU6c+9Gw16N3FOHcTf3Mmq1Ggyd8woSRqQC8O0LEgBotVps3lw3F3TUqFHo378/Lw7UqkmlUkRHRyM6OhqjRo1CSUkJruTk4FtJJERYT1KxVzI09JEOVo/ni6GosXmiZbUm7PuhCmJId/QeoUJ0dHSjj2VZYrW5/K3EKnkXAyV5xZkzZ3Dz5k3Mnj3b6S1+GmN5l26vV6PHL0YiQCaHrroKS+elmAMl4JsXJKCuss+6detQXV2NGTNmIDY21ttNImq2iIgI9Ok3AEeySm1mPNsrGTrhP/9pdUxZrQmFxSUICwmCQqGARNK6RxucmycqQJDKcDkgCr0qah1OyxFFEXeKS+Borrgz/K3EKnkPX0bkcWVlZdizZw+SkpKavPt2luVdemO9GrXaGjwa08O6PT54l56Xl4cvv/wSwcHBmD9/vl/tn0ltj2XdeUsNS4YeWvGh3eOWr1wFaCoBAIGBgVAqlQgKCoJSqYRSqYRCoTB/bvl9yw9PBFGraTlNEQSbaTmiKOLu3bu4efOm+aPGYELg6HkP3SZ/LLFK3sFASR4liiIyMjKgVCpd3iLIkuUFyVGvxro3FiD/zDGMfvXPNuf7yl26KIo4deoUMjMzERsbi4kTJ0KhUHi7WUQukTsINZ3j++DI6k8hiiIKc7IR1rmr3eOmTZoIk04Djabuo6amBhqNBlqtFtXV1bh//775e3q93u5j1AfR5n44Wnltj+W0HJPRiE1//g0qiosQ1ikKE/7rPWz+y6u4emwfhi98HT+fOh8AoDeJyDh7BYb873Dr1i1otVpIpVJERkYiKSkJUVFdsUcroFxvG1O/eGUqinKyUXwjD/0nzkZS6jSrn6vlEigYKMlNfOASSr7K3urF8+fPIz8/HzNmzEBgYKDbnsvyguSoV2Pa/y6DpqIMn8wehT5jJ1v1SBhFEaIotuphb6PRiB07duD8+fMYMGAARo4c2eqH94icoZQKUMslNnMB7ZUMbUgtlyDusSinf3cNBgO0Wq1V8LT3UVNTg5KSEvPXtbW1dh9PLpc7FTwVCiVOVQShfnj64oEdCIuMwpR3PsWhlR/h4v7tGP3bPyH2qcHQ1fy0YlsUReTqA9FJr8eAAQPQtWtXREZGWm2x9sDOKm8AmPvR+kb/LdpCiVXyHAZKcjtHqxdVAUDFlR+Q0CcJ3bp1c+tzWl6Q7PVqGGp1CJAHQqZQIjAoxCaILbtc1qqrcFRXV2Pjxo344YcfMG7cOPTu3dvbTSJym5/qztuGooFT5mHgFMdDus0NRQEBAQgJCUFISEiz2mg0Gh2Gz4YfDx48MH+u0+nqHkCusBqaLr19A5169AIARD6eiIsHdiLx2fE2zysIEiC4HSZPnwmlg/elhPBAHC6qbnQzeKvHRF2J1V7h7rupJ2KgJLdqbPVihV4Eeg7AdYmA/EYmmj8MywuSvV6NdW8sgKayHEa9HsPm/c7uY9StrqzG4aLqVlWF486dO1i/fj0MBgNefPFFdOnSxdtNInK71h6KpFLpQwdRrVaLe5UabCj66fuPRvfA1W/3odczzyP35CFoKssbfZzGpuUoAiSYEK1yelN4oK4qVmu7cSbfxo3NyW28XeVCazDho+/vw4Af7+pd4IkqHI3VGa93+fJlbNmyBREREZg6dSratWvXYu0h8rbmvof4Ut35GoMJ/8oqNX8tiiJ2vv8WCq9koUNsD0hlcoz9/ds4u20ddDXV5jmU9V5NCHfYQ1mPJVbJm9hDSW5Rv3qxouQe0l+bA2lAAASJFFPe+RSlt29g14dvQ5AIGP/mP9AxLr5FNhX/7uxpaM5ehHzA8w6PqbTTvm/XfYZz2zei95iJeO53fwGAFt30vKkNjRPCAxEoFXD48GEcPHgQ8fHxGDdunFu2VyJqzWJUckyKVfllKGo4T1QQBIz9/dsAgL1LFiP2qcEOz3V28UyMSo6XnwhniVXyCvZQklvUl/4yGY2AIEAikeDstnUov1eI3BOHMOu9VdBVV2HL3163mijurtJf9SUcBw4ciNj+Q7H1RqXdC5K99j01fibuXb+GnKN7zIHS3e2r52wPwiO3v8ONM0fx9NNPY8iQIZw4T22Kv9adtyyRWHn/Ltb/cREEQYLYfr/AsHm/wzcf/Q8uH8qEaDKi+8+fQcrrfwXwcO9DLLFKnsYeSnKZ5abiEostNHQ1VQjvHA1BchRKlRpKlRqa8jKrc92xqfjRo0exb98+DB48GMOHD4cgCHj5CZndC1LD9nWI6YnQRzqg+Eau3cd256bnzg7n6Y0iCn+WgKETu2JoL/cuXiLyBYoACZIfVSKpvcKvQpHlPNHQRzpgwWdbrX4++pU/YfQrfzJ/LYomBAjCQ80TZYlV8jS+1MhlDUt/FeZkYcs7r0NbWY6XPtmErN1bzT+TBEhh0NeaK9i4uqn4oUOHcPDgQQwdOhRDhw41X2wsL0ilOiOWXS5z2L7GlNWacD77EiJUIQgNDUVISMhDDT03NiVg/R8XQTQaIUilSB43A31TJkMAcNaoxgCDiRPnqc3yt1DU3MUzAgToTmxHnrwfnnjiiRZvH5Er/OTXlLypYZWLTj0S8PKqTHy/eysOfP4+tFWV5p+ZDEZzmKz3MJuKi6KIAwcO4MiRIxg2bBiGDBli9zhBECBt0KNh2b6DX3xoU8qtoYxdmeYqHEDdvnOhoaHmgBkSEmL1df3ncrncHHDrNzQOVkdg0Yrt5iH3M1+vAQDM+Xg9AoMsV48KPl9nnIhsNWee6Liuofj+Rjt8+eWX0Gg0SE5O9lxDiZqJgZJcZrmpuGXvoyJEBXlQMExGAzSV5dBVV0HZTm1zfnNLf4miiH379uHYsWMYMWIEBg0a9NDtkymaDmu//fWvYNBUoaqqCpWVlTZ/FhUVobKy0mbjY5lMVhc4Q0NR+sQzQIDS7pB73qmjWPnKNChD2+H5P/wdYZ1+2hbIV+uME5FjzVk8EzthApRKJXbs2AGNRoPBgwfz/YBaJQZKcpnl6sWinGzsfP8tSKRSBMgDMfGtD1FyKx8rX5kGQQDGvbnY6tzmlv4SRRG7d+/GiRMnMGrUKAwYMMDl9h1buxTntm9ETVkpyu8VYdrfP7NqnzpYASFEifbt2zf6PLW1taisrLQJnWXVGtyTBZmPazjkPn3x5whWhyP/7DFkLH4Tsz9INx/ri3XGiahpzs4TFQQBo0ePRlBQEPbv34+amho8++yzDJXU6nCVN7nFaQelv5rSnNWLoihi165dOH36NMaMGYN+/fq1qvY5UqYzYsmlBzbf/373VuSdPmo15P7xjBH4zZq9Vsf9Mj4M6kDn6wUTkX86deoUdu3ahSeffBKpqaksvUqtCl+N5BYJ4YGQNePVJKBujpCzqxdFUcSOHTtw+vRppKSkNCtMeqJ9jWk45F6vfsi9fo7p3fwcKFVqm/ObOyWAiPxTv379kJaWhqysLGzcuBF6vd7bTSIy45A3uUWzVi+KIiAITpf+MplMyMjIwIULF5Camoo+ffq0bPt+5K7SZE0NuS9fNAGyQAUAIPWNd63Obe6UACLybwkJCVAqldiwYQPWrFmDqVOnQqFQeLtZRBzyJvdqcuNuUYRoNGBsZCASO4U3WX7QZDLh66+/RlZWFsaPH4/ExMSWbR9apgqHN4fcicj/FBQUYO3atVCr1Zg5cyaCg4O93SRq4xgoye0aq3LRO0yG45tXQa1Wo9eoCThbrHVYflAuAbZs2YKLFy8iLS0NvXr1avH2tVQVDq3BhE8uljYaZC0JAAIkaJHSj0TkH+7evYv09HTI5XLMmjULarXa202iNoyBklqMo9Jf3+bcxKEKGQSpDHCwUlEmASIKLqDg/HFMnDgR8fHxHmtfS3G2Ug5QFygnx/pWrWIi8rwHDx5g9erVMBgMmDlzJh599FFvN4naKAZK8ihzqPpxHqVDoghRFDFIWYUh8TGea2AL89aQOxH5r6qqKqSnp6OiogLTp09H586dbY5panoRkasYKMljmjvsC4iQSQS/G/b1xpA7Efk3rVaLdevWoaioCFOmTEFsbGzd9w0mZJXqcNbO+0399CJ/en8l72GgJI+xXJhSaaemtap9R+hqqvCPlGRM/O9/4fEhzwLw34Upnh5yJyL/ptfrsWnTJuTl5SEtLQ3KLnFOjYhMiFYhhiMi5CIGSvIIURSx9NID8x2yyWgEBMFc07r8XiGGz38NBz5/H9fPHcfAKfPNgVItl2BRfBjDFhFRE4xGI7Zt24asogeQD3i+8alFPxIATIplqCTXsJ+bPEJjFK2GWyRSqbnKQ31Na21VJe7kXkZUQrLVufXlB4mIqHFSqRSjU1Kh6D8WopO77ooAtlyvgNbg9HwkIhvc2Jw8otZOIGxY0/rYus8wcMo85J44ZHOszihCyVcrEVGTsh/UwiSR4tZ3p5H58V8BABXFd9Bz8EgU5mRBNBohSKVIHjcDfVMmAwD0JiC7VOeX04vIM3iJJo+Q26n20qlHAl5elYnvd2/FvqWLoaupwjMLXrMbKFl+kIioaaIo4myxBgDQ9cmnsHDZ1wCATW/9BvHDxqAwJwtzPl6PwKAQm3PPFGuQ1F7B6UX0UDjkTR5RX36wXsOa1g+KClB+twgrXp6M8zs3Ye+Sd/GgsAAAyw8SETmr4fQioO799nb2eTzWZyAEQYKVr0zDqv+YaX6PrcfpReQK9lCSRwiCgKT2SvMq74Y1rae8swSq9h0BAHuXLEZkfG+EdeoCAEhur+QdMxGRE+xNL8o9eQix/X4BiUSC6Ys/R7A6HPlnjyFj8ZuY/UG61bGcXkQPiy8b8piE8EAcLqqG3gR06dUXiz7PsHvciF/+AcBP5Qd7hQd6sJVERL7L3vSi7D3bkJQ6DQAQrA4HAMQkDcLO996yOZbTi+hhccibPEYRIMGEaBWa83aVFq3iprtERE5qOL3IqNfj9qUL6NpnAABAW1UJALibnwOlSm11LqcXkSvYQ0keFaOSY1KsiuUHiYhaQMPpRbmnDiHmqcHmbdqWL5oAWaACAJD6xrtW53J6EbmCG5uTV7D8IBFRy2humdv66UX+VuaWPIuBkryK5QeJiNwvv6IWm/IqnNraXAAwOZYjQuQaBkoiIiI/lF9Ry+lF5DEMlERERH6K04vIUxgoiYiI/BynF1FLY6AkIiIiIpewn5uIiIiIXMJASUREREQuYaAkIiIiIpcwUBIRERGRSxgoiYiIiMglDJRERERE5BIGSiIiIiJyCQMlEREREbmEgZKIiIiIXMJASUREREQuYaAkIiIiIpcwUBIRERGRSxgoiYiIiMglDJRERERE5BIGSiIiIiJyCQMlEREREbmEgZKIiIiIXMJASUREREQuYaAkIiIiIpcwUBIRERGRSxgoiYiIiMglDJRERERE5BIGSiIiIiJyCQMlEREREbmEgZKIiIiIXMJASUREREQuYaAkIiIiIpcwUBIRERGRSxgoiYiIiMglDJRERERE5BIGSiIiIiJyCQMlEREREbmEgZKIiIiIXMJASUREREQuYaAkIiIiIpcwUBIRERGRSxgoiYiIiMglDJRERERE5BIGSiIiIiJyCQMlEREREbmEgZKIiIiIXMJASUREREQu+X9rkW7GjzNm+wAAAABJRU5ErkJggg==",
- "text/plain": [
- "<Figure size 640x480 with 1 Axes>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "import re\n",
- "import networkx as nx\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "G = nx.Graph()\n",
- "f = open(\"Text1.txt\")\n",
- "lines = f.readlines()\n",
- "lines = [l.strip() for l in lines]\n",
- "for line in lines:\n",
- " if len(line)==0 or line.startswith(\"!\"):\n",
- " continue\n",
- " matches = re.findall(r\"\\((\\d+)\\)\", line)\n",
- " G.add_edge(matches[0], matches[1])\n",
- "\n",
- "node_types = {}\n",
- "for i in range(1,71):\n",
- " node_types[i] = 'valve'\n",
- "for i in range(71,91):\n",
- " node_types[i] = 'source'\n",
- "for i in range(91,129):\n",
- " node_types[i] = 'relation'\n",
- "\n",
- "\n",
- "\n",
- "pos = nx.spring_layout(G, seed=30)\n",
- "nx.draw(G, pos, node_size=100, node_color='skyblue', edge_color='gray')\n",
- "nx.draw_networkx_labels(G, pos, font_size=6, font_family='sans-serif')\n",
- "\n",
- "plt.show()\n"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Make makefile"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 72,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\tCSharp/OperationScenarios/Common/COperationScenariosVariables.f90 /\n",
- "\tTorqueDrag/TD_Modules/TD_WellGeometry.f90 /\n",
- "\tTorqueDrag/TD_Modules/TD_WellElements.f90 /\n",
- "\tTorqueDrag/TD_Modules/TD_StringConnectionData.f90 /\n",
- "\tTorqueDrag/TD_Modules/GeoElements_FluidModule.f90 /\n",
- "\tRop/sROP_Variables.f90 /\n",
- "\tRop/sROP_Other_Variables.f90 /\n",
- "\tFluidFlow/Flow_Startup_VARIABLES.f90 /\n",
- "\tCSharp/DownHole/CDownHoleTypes.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_VARIABLES.f90 /\n",
- "\tEquipments/ChokeControl/CHOKE_VARIABLES.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_VARIABLES.f90 /\n",
- "\tEquipments/RotaryTable/RTable_VARIABLES.f90 /\n",
- "\tEquipments/Pumps/Pumps_VARIABLES.f90 /\n",
- "\tCSharp/Warnings/CWarningsVariables.f90 /\n",
- "\tCSharp/StudentStation/CStudentStationVariables.f90 /\n",
- "\tCSharp/OperationScenarios/SoftwareInputsVariables.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/PermissionsVariables.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/NotificationVariables.f90 /\n",
- "\tCSharp/Equipments/Tanks/CTanksVariables.f90 /\n",
- "\tCSharp/Equipments/DrillWatch/CDrillWatchVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CTopDrivePanelVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CStandPipeManifoldVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CHookVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CDrillingConsoleVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CChokeManifoldVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CChokeControlPanelVariables.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CBopControlPanelVariables.f90 /\n",
- "\tCSharp/BasicInputs/WellProfile/CWellSurveyDataVariables.f90 /\n",
- "\tCSharp/BasicInputs/WellProfile/CPathGenerationVariables.f90 /\n",
- "\tCSharp/BasicInputs/WellProfile/CCasingLinerChokeVariables.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CRigSizeVariables.f90 /\n",
- "\tCSharp/Common/CIActionReference.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CPowerVariables.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CHoistingVariables.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CBopStackVariables.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CAccumulatorVariables.f90 /\n",
- "\tCSharp/BasicInputs/Geology/CShoeVariables.f90 /\n",
- "\tCSharp/BasicInputs/Geology/CReservoirVariables.f90 /\n",
- "\tCSharp/BasicInputs/Geology/CFormationVariables.f90 /\n",
- "\tCSharp/BasicInputs/Bha/CStringConfigurationVariables.f90 /\n",
- "\tSimulation/Constants.f90 /\n",
- "\tCSharp/Equipments/MudPathFinding/CArrangement.f90 /\n",
- "\tCSharp/OperationScenarios/Unity/CUnityInputs.f90 /\n",
- "\tCSharp/Common/CCommonVariables.f90 /\n",
- "\tCommon/DynamicIntegerArray.f90 /\n",
- "\tRop/RopMain.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CEquipmentsConstants.f90 /\n",
- "\tCommon/DynamicRealArray.f90 /\n",
- "\tCSharp/Common/CTimerLegacy.f90 /\n",
- "\tCommon/DynamicDoubleArray.f90 /\n",
- "\tCSharp/Equipments/MudPathFinding/CPathChangeEvents.f90 /\n",
- "\tCommon/DynamicLogicalArray.f90 /\n",
- "\tCSharp/Common/CScaleRange.f90 /\n",
- "\tCSharp/Common/CTimer.f90 /\n",
- "\tCSharp/Common/CQuery.f90 /\n",
- "\tFluidFlow/FluidFlowMain.f90 /\n",
- "\tTorqueDrag/TD_Modules/TD_GeneralData.f90 /\n",
- "\tCSharp/BasicInputs/WellProfile/CWellSurveyData.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CDataDisplayConsoleVariables.f90 /\n",
- "\tCSharp/ErrorLog/CLog4.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CPumpsVariables.f90 /\n",
- "\tCSharp/ErrorLog/CLog1.f90 /\n",
- "\tCSharp/BasicInputs/CMudPropertiesVariables.f90 /\n",
- "\tCSharp/ErrorLog/CLog5.f90 /\n",
- "\tCSharp/ErrorLog/CError.f90 /\n",
- "\tCSharp/ErrorLog/CLog2.f90 /\n",
- "\tCSharp/ErrorLog/CLog3.f90 /\n",
- "\tSimulation/CSounds.f90 /\n",
- "\tCSharp/Common/CCommon.f90 /\n",
- "\tFluidFlow/Pressure_Display_VARIABLES.f90 /\n",
- "\tEquipments/BopStack/VARIABLES.f90 /\n",
- "\tFluidFlow/kick/Kick_VARIABLES.f90 /\n",
- "\tCSharp/OperationScenarios/Unity/CUnityOutputs.f90 /\n",
- "\tCSharp/DownHole/CDownHoleVariables.f90 /\n",
- "\tGeo/GeoMain.f90 /\n",
- "\tCSharp/Equipments/MudPathFinding/CPath.f90 /\n",
- "\tCSharp/Problems/CProblemDifinition.f90 /\n",
- "\tFluidFlow/Pressure_Distribution_VARIABLES.f90 /\n",
- "\tEquipments/MudSystem/MudSystem_Variables.f90 /\n",
- "\tTorqueDrag/TD_Modules/TD_DrillStem.f90 /\n",
- "\tCSharp/Equipments/MudPathFinding/CStack.f90 /\n",
- "\tCSharp/Problems/CDrillStemProblemsVariables.f90 /\n",
- "\tCSharp/Problems/COtherProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CLostProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CGaugesProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CBitProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CKickProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CHoistingProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CChokeProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CPumpProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CRotaryProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CMudTreatmentProblemsVariables.f90 /\n",
- "\tCSharp/Problems/CBopProblemsVariables.f90 /\n",
- "\tSimulation/SimulationVariables.f90 /\n",
- "\tCSharp/Problems/CMudTreatmentProblems.f90 /\n",
- "\tCSharp/Problems/CChokeProblems.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CHook.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CRigSize.f90 /\n",
- "\tEquipments/BopStack/PipeRams1Main.f90 /\n",
- "\tCSharp/Problems/COtherProblems.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CAccumulator.f90 /\n",
- "\tCSharp/Problems/CRotaryProblems.f90 /\n",
- "\tCSharp/Problems/CDrillStemProblems.f90 /\n",
- "\tCSharp/BasicInputs/MudProperties.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CPower.f90 /\n",
- "\tEquipments/RotaryTable/RotaryTableMain.f90 /\n",
- "\tCSharp/Equipments/MudPathFinding/CManifolds.f90 /\n",
- "\tCSharp/Problems/CBopProblems.f90 /\n",
- "\tCSharp/DownHole/DownHole.f90 /\n",
- "\tCSharp/Problems/CHoistingProblems.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CHoisting.f90 /\n",
- "\tEquipments/Drawworks/DrawworksMain.f90 /\n",
- "\tCSharp/Problems/CLostProblems.f90 /\n",
- "\tCSharp/Problems/CBitProblems.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CBopStack.f90 /\n",
- "\tEquipments/BopStack/ChokeLineMain.f90 /\n",
- "\tEquipments/Pumps/PumpsMain.f90 /\n",
- "\tEquipments/BopStack/AnnularMain.f90 /\n",
- "\tCSharp/BasicInputs/WellProfile/CPathGeneration.f90 /\n",
- "\tCSharp/BasicInputs/Geology/CReservoir.f90 /\n",
- "\tCSharp/BasicInputs/Bha/CStringConfiguration.f90 /\n",
- "\tEquipments/BopStack/PipeRams2Main.f90 /\n",
- "\tEquipments/BopStack/BlindRamsMain.f90 /\n",
- "\tCSharp/Problems/CKickProblems.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/Permissions.f90 /\n",
- "\tCSharp/BasicInputs/Geology/CFormation.f90 /\n",
- "\tEquipments/BopStack/KillLineMain.f90 /\n",
- "\tCSharp/Problems/CGaugesProblems.f90 /\n",
- "\tCSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90 /\n",
- "\tCSharp/BasicInputs/Geology/CShoe.f90 /\n",
- "\tCSharp/Problems/CPumpProblems.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CDataDisplayConsole.f90 /\n",
- "\tCSharp/OperationScenarios/SoftwareInputs.f90 /\n",
- "\tTorqueDrag/TD_ReadDataSubroutines/TD_DrillStemReadData.f90 /\n",
- "\tEquipments/Pumps/Pump_OffMode_Solver.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceDownDRot.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceDownD.f90 /\n",
- "\tFluidFlow/kick/Formation_Information.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_WellElementsConfiguration.f90 /\n",
- "\tEquipments/MudSystem/Elements_Creation.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_StartUp.f90 /\n",
- "\tTorqueDrag/TD_ReadDataSubroutines/TD_PipePropertiesReadData.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_CombinedMotionData.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TVD_Calculator.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceUpSRot.f90 /\n",
- "\tRop/Bit_Specification.f90 /\n",
- "\tEquipments/Pumps/Pump3_MainSolver.f90 /\n",
- "\tEquipments/MudSystem/Kick_Expansion_and_Contraction.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_ForceCalculation.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceDownB.f90 /\n",
- "\tEquipments/Pumps/Pumps_TotalSolver.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_StrainCalculation.f90 /\n",
- "\tFluidFlow/Flow_Startup.f90 /\n",
- "\tEquipments/DrillingConsole_ScrLEDs.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_ViscousDragForce/TD_ViscousDragForce.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceUpS.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceDownS.f90 /\n",
- "\tEquipments/RotaryTable/RTable_StartUp.f90 /\n",
- "\tEquipments/MudSystem/Utube2_and_Trip_In.f90 /\n",
- "\tEquipments/MudSystem/Kick_Migration.f90 /\n",
- "\tTorqueDrag/TD_ReadDataSubroutines/TD_ForceReadData.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_StaticHookLoadCalculation.f90 /\n",
- "\tEquipments/MudSystem/Pump_and_Trip_In.f90 /\n",
- "\tEquipments/MudSystem/Deallocate_Normal_Circulation.f90 /\n",
- "\tEquipments/RotaryTable/RTable_OnModeSolver.f90 /\n",
- "\tEquipments/Pumps/Pump_OnMode_Solver.f90 /\n",
- "\tTorqueDrag/TD_ReadDataSubroutines/TD_WellElementsReadData.f90 /\n",
- "\tTorqueDrag/TD_ReadDataSubroutines/TD_MudPropertiesReadData.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceUpDRot.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_StartUp.f90 /\n",
- "\tEquipments/MudSystem/FillingWell_By_BellNipple.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceUpBRot.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_TorqueCalculation.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceDownBRot.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_MainSolver.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceUpD.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceUpB.f90 /\n",
- "\tEquipments/RotaryTable/RTable_OffModeSolver.f90 /\n",
- "\tTorqueDrag/TD_StartUp/TD_DrillStemStartUp.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceDownSRot.f90 /\n",
- "\tRop/JetImpactForce.f90 /\n",
- "\tTorqueDrag/TD_ReadDataSubroutines/TD_WellReadData.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_BouyancyFactor.f90 /\n",
- "\tFluidFlow/Frictional_Press_Drop_Calc.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_Outputs.f90 /\n",
- "\tEquipments/Drawworks/DWFixModeMotion.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CBopControlPanel.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/UnitySignals.f90 /\n",
- "\tCSharp/BasicInputs/RigSpecifications/CPumps.f90 /\n",
- "\tCSharp/Equipments/ControlPanels/CChokeManifold.f90 /\n",
- "\tCSharp/Equipments/Tanks/CTanks.f90 /\n",
- "\tCSharp/Warnings/CWarnings.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_BOPDiamCalculation.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_Direction.f90 /\n",
- "\tEquipments/RotaryTable/RTable_Outputs.f90 /\n",
- "\tEquipments/Drawworks/DWMalfunction_MotorFailure.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_WeightOnBitCalculation.f90 /\n",
- "\tFluidFlow/String_Property_Calculator.f90 /\n",
- "\tFluidFlow/Annulus_Property_Calculator.f90 /\n",
- "\tEquipments/MudSystem/Trip_Out_andPump.f90 /\n",
- "\tEquipments/MudSystem/Utube1_and_Trip_In.f90 /\n",
- "\tEquipments/Pumps/Pump2_MainSolver.f90 /\n",
- "\tEquipments/Pumps/Pump1_MainSolver.f90 /\n",
- "\tFluidFlow/Utube.f90 /\n",
- "\tEquipments/BopStack/BOP.f90 /\n",
- "\tEquipments/BopStack/SHEAR_RAM.f90 /\n",
- "\tEquipments/BopStack/PIPE_RAM2.f90 /\n",
- "\tEquipments/BopStack/LOSS_INPUTS.f90 /\n",
- "\tEquipments/BopStack/ANNULAR.f90 /\n",
- "\tEquipments/BopStack/CHOKE_LINE.f90 /\n",
- "\tEquipments/BopStack/KILL_LINE.f90 /\n",
- "\tEquipments/BopStack/PIPE_RAM1.f90 /\n",
- "\tEquipments/BopStack/BOPstartup.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/Notofications.f90 /\n",
- "\tTorqueDrag/TD_StartUp/TD_StartUp.f90 /\n",
- "\tTorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_Inputs.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_Solver.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/Notifications.f90 /\n",
- "\tTorqueDrag/TorqueDragMain.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/MeshGeneration_FluidModule.f90 /\n",
- "\tEquipments/Pumps/Pumps_StartUp.f90 /\n",
- "\tEquipments/ChokeControl/CHOKE.f90 /\n",
- "\tEquipments/ChokeControl/AirPump_Choke_Subs.f90 /\n",
- "\tEquipments/MudSystem/MudSystemStartup.f90 /\n",
- "\tEquipments/TopDrive/TopDriveMain.f90 /\n",
- "\tEquipments/MudSystem/MudSystem.f90 /\n",
- "\tRop/ROP_MainCalculation.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_Outputs.f90 /\n",
- "\tEquipments/RotaryTable/RTable_Inputs.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_OffMode.f90 /\n",
- "\tEquipments/TopDrive/TopDrive_MainSolver.f90 /\n",
- "\tCSharp/OperationScenarios/Common/OperationScenarios.f90 /\n",
- "\tEquipments/ChokeControl/ChokeControlMain.f90 /\n",
- "\tEquipments/ChokeControl/ChokeStartup.f90 /\n",
- "\tEquipments/MudSystem/MudSystemMain.f90 /\n",
- "\tEquipments/Pumps/Pumps_Inputs.f90 /\n",
- "\tEquipments/Pumps/Pumps_Outputs.f90 /\n",
- "\tFluidFlow/Annulus_and_Openhole_Pressure_Distribution.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_WellGeoConfiguration.f90 /\n",
- "\tEquipments/RotaryTable/RTable_MainSolver.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CSlipsEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CTdsTorqueWrenchLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CInstallMudBucketPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CFillupHeadPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/COpenKellyCockLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CTdsPowerLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CSwingLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CSwingTiltPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CIrSafetyValvePermission.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CSwingOffPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CCloseSafetyValveLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CMouseHoleEnum.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CFlowPipeDisconnectEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CCloseKellyCockLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Enums/CElevatorConnectionEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CIrSafetyValveLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CFlowKellyDisconnectEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/COpenSafetyValveLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CTdsBackupClamp.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CTdsTongEnum.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CElevatorEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CTongNotification.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CSafetyValveEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CRemoveMudBucketPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CInstallFillupHeadPermission.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CSwingEnum.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CKellyEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CSwingDrillPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CIrIbopPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Permissions/CRemoveFillupHeadPermission.f90 /\n",
- "\tCSharp/OperationScenarios/Common/COperationScenariosSettings.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CTdsSwingEnum.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CIbopEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CFillMouseHoleLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/UnitySignals/CTongEnum.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CIrIBopLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CTdsIbopLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CLatchLedNotification.f90 /\n",
- "\tCSharp/OperationScenarios/Notifications/CSlipsNotification.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_DrillStemConfiguration.f90 /\n",
- "\tEquipments/MudSystem/Kick_Influx.f90 /\n",
- "\tEquipments/MudSystem/Disconnecting_Pipe.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_Solver_OffMode.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_RemoveComponents.f90 /\n",
- "\tFluidFlow/Horizontal_and_String_Pressure_Distribution.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_INPUTS.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_AddComponents.f90 /\n",
- "\tEquipments/Drawworks/Drawworks_Solver.f90 /\n",
- "\tEquipments/Pumps/Pumps_MainSolver.f90 /\n",
- "\tCSharp/OperationScenarios/Common/COperationScenariosMain.f90 /\n",
- "\tEquipments/MudSystem/Circulation_Code_Select.f90 /\n",
- "\tTorqueDrag/TD_DrillingSubs/TD_StringConnectionModes.f90 /\n",
- "\tFluidFlow/kick/Gas_Kick_Calculator.f90 /\n",
- "\tSimulator.f90 /\n",
- "\tTorqueDrag/TD_MainCalculations.f90 /\n",
- "\tFluidFlow/Well_Pressure_Data_Transfer.f90 /\n",
- "\tSimulationCore2.f90 /\n",
- "\tEquipments/MudSystem/Plot_Final_Mud_Elements.f90 /\n",
- "\tFluidFlow/Fluid_Flow_Solver.f90 /\n"
- ]
- }
- ],
- "source": [
- "import re\n",
- "current_dir = 'C:\\\\Projects\\\\VSIM\\\\SimulationCore2\\\\'\n",
- "target_dir = 'x64\\\\Debug\\\\'\n",
- "depfilename = 'x64\\Debug\\SimulationCore2.dep'\n",
- "depfile = open(depfilename,'r')\n",
- "content = depfile.read()\n",
- "deptexts = content.split('\\n\\n')\n",
- "dependencies = {}\n",
- "moddeps = {}\n",
- "external_deps = []\n",
- "deptexts = [dt for dt in deptexts if dt!='']\n",
- "\n",
- "for depno,dept in enumerate(deptexts):\n",
- " headt,tailt = dept.split(': \\\\')\n",
- " headt,tailt = headt.strip(),tailt.strip()\n",
- " if headt.endswith('.mod'):\n",
- " ffile = tailt.replace(current_dir,'')\n",
- " mfiles = re.split(r' | \\\\\\n',headt)\n",
- " for mfile in mfiles:\n",
- " moddeps[mfile.strip()] = ffile\n",
- "for depno,dept in enumerate(deptexts):\n",
- " headt,tailt = dept.split(': \\\\')\n",
- " headt,tailt = headt.strip(),tailt.strip()\n",
- " if headt.endswith('.obj'):\n",
- " tails = re.split(r' \\\\\\n| ',tailt)\n",
- " tails = [t for t in tails if t!='']\n",
- " head = tails[0].replace(current_dir,'')\n",
- " deps = []\n",
- " for t in tails[1:]:\n",
- " mfile = t.replace(target_dir,'')\n",
- " # if 'json_' in mfile:\n",
- " # continue\n",
- " if mfile.strip() == '':\n",
- " print(f\"!!! t = '{t}', \")\n",
- " \n",
- " if mfile in moddeps:\n",
- " deps.append(moddeps[mfile])\n",
- " else:\n",
- " external_deps.append(mfile)\n",
- " # print(f\"{mfile} is not located\")\n",
- " if head in deps:\n",
- " deps.remove(head)\n",
- " # print(f\"making deps for {head}\")\n",
- " dependencies[head]=deps\n",
- "\n",
- "f = open('dependencies.txt','w')\n",
- "f.write(str(dependencies))\n",
- "f.close()\n",
- "\n",
- "from graphlib import TopologicalSorter\n",
- "ts = TopologicalSorter(dependencies)\n",
- "files = tuple(ts.static_order())\n",
- "for file in files:\n",
- " print(\"\\t\"+file.replace(\"\\\\\",\"/\")+\" /\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "CSharp/Equipments/ControlPanels/CBopControlPanel.f90\n",
- "CSharp/Equipments/ControlPanels/CChokeControlPanel.f90\n",
- "CSharp/Equipments/ControlPanels/CChokeManifold.f90\n",
- "CSharp/Equipments/ControlPanels/CDataDisplayConsole.f90\n",
- "CSharp/Equipments/ControlPanels/CDrillingConsole.f90\n",
- "CSharp/Equipments/ControlPanels/CEquipmentsConstants.f90\n",
- "CSharp/Equipments/ControlPanels/CHook.f90\n",
- "CSharp/Equipments/ControlPanels/CHookActions.f90\n",
- "CSharp/Equipments/ControlPanels/CStandPipeManifold.f90\n",
- "CSharp/Equipments/ControlPanels/CTopDrivePanel.f90\n"
- ]
- }
- ],
- "source": [
- "dir = 'CSharp/Equipments/ControlPanels'\n",
- "import os\n",
- "os.listdir(dir)\n",
- "for f in os.listdir(dir):\n",
- " if f.endswith('Variables.f90'):\n",
- " continue\n",
- " print(dir+'/'+f)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 54,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['FluidFlow\\\\Well_Pressure_Data_Transfer.f90',\n",
- " 'FluidFlow\\\\Well_Pressure_Data_Transfer.f90',\n",
- " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\MudProperties.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsole.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog1.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarnings.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Unity\\\\CUnityOutputs.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumps.f90',\n",
- " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CArrangement.f90',\n",
- " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CStack.f90',\n",
- " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CManifolds.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
- " 'Rop\\\\sROP_Variables.f90',\n",
- " 'Rop\\\\sROP_Other_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
- " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
- " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
- " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
- " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
- " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
- " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
- " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
- " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
- " 'Simulation\\\\Constants.f90',\n",
- " 'Simulation\\\\SimulationVariables.f90',\n",
- " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem.f90',\n",
- " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
- " 'FluidFlow\\\\kick\\\\Gas_Kick_Calculator.f90',\n",
- " 'FluidFlow\\\\Well_Pressure_Data_Transfer.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
- " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
- " 'Rop\\\\sROP_Variables.f90',\n",
- " 'Rop\\\\sROP_Other_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
- " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
- " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
- " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
- " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
- " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
- " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
- " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
- " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
- " 'Simulation\\\\Constants.f90',\n",
- " 'Simulation\\\\SimulationVariables.f90',\n",
- " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
- " 'Rop\\\\sROP_Variables.f90',\n",
- " 'Rop\\\\sROP_Other_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
- " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
- " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
- " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
- " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
- " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
- " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
- " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
- " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
- " 'Simulation\\\\Constants.f90',\n",
- " 'Simulation\\\\SimulationVariables.f90',\n",
- " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
- " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
- " 'Rop\\\\sROP_Variables.f90',\n",
- " 'Rop\\\\sROP_Other_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
- " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
- " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
- " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
- " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
- " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
- " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
- " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
- " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
- " 'Simulation\\\\Constants.f90',\n",
- " 'Simulation\\\\SimulationVariables.f90',\n",
- " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
- " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
- " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
- " 'Rop\\\\sROP_Variables.f90',\n",
- " 'Rop\\\\sROP_Other_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
- " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
- " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
- " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
- " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
- " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
- " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
- " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
- " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
- " 'Simulation\\\\Constants.f90',\n",
- " 'Simulation\\\\SimulationVariables.f90',\n",
- " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
- " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\MudProperties.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsole.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog1.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarnings.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Unity\\\\CUnityOutputs.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumps.f90',\n",
- " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CArrangement.f90',\n",
- " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CStack.f90',\n",
- " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CManifolds.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
- " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
- " 'Rop\\\\sROP_Variables.f90',\n",
- " 'Rop\\\\sROP_Other_Variables.f90',\n",
- " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
- " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
- " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
- " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
- " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
- " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
- " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
- " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
- " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
- " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
- " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
- " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
- " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
- " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
- " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
- " 'Simulation\\\\Constants.f90',\n",
- " 'Simulation\\\\SimulationVariables.f90',\n",
- " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
- " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
- " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
- " 'Equipments\\\\MudSystem\\\\MudSystem.f90',\n",
- " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90']"
- ]
- },
- "execution_count": 54,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "dependencies['FluidFlow\\\\Well_Pressure_Data_Transfer.f90']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "assets={'USDT': {'Total': '5858.36917324', 'Free': 3879.35}, 'BUSD': {'Total': '-156.01984572', 'Free': 3877.23}}\n"
- ]
- }
- ],
- "source": []
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# FromJson"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- " call jsonfile%get('UnityInputs.ElevatorConnectionPossible',data%Equipments%UnityInputs%ElevatorConnectionPossible,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%ElevatorConnectionPossible\")\n",
- " call jsonfile%get('UnityInputs.JointConnectionPossible',data%Equipments%UnityInputs%JointConnectionPossible,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%JointConnectionPossible\")\n",
- " call jsonfile%get('UnityInputs.IsKellyBushingSetInTable',data%Equipments%UnityInputs%IsKellyBushingSetInTable,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%IsKellyBushingSetInTable\")\n",
- " call jsonfile%get('UnityInputs.ElevatorPickup',data%Equipments%UnityInputs%ElevatorPickup,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%ElevatorPickup\")\n",
- " call jsonfile%get('UnityInputs.NearFloorPosition',data%Equipments%UnityInputs%NearFloorPosition,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%NearFloorPosition\")\n",
- " call jsonfile%get('UnityInputs.SingleSetInMouseHole',data%Equipments%UnityInputs%SingleSetInMouseHole,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%SingleSetInMouseHole\")\n",
- " call jsonfile%get('UnityInputs.TdsConnectionPossible',data%Equipments%UnityInputs%TdsConnectionPossible,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%TdsConnectionPossible\")\n",
- " call jsonfile%get('UnityInputs.TdsStemIn',data%Equipments%UnityInputs%TdsStemIn,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%TdsStemIn\")\n"
- ]
- }
- ],
- "source": [
- "# pattern=\"\"\"\t\tcall json%get(pitem,data%Configuration%Pumps%@@@)\n",
- "# call json%get(p,\"@@@\",pitem)\"\"\"\n",
- "\n",
- "# pattern=\"\"\"\t\tcall json%get('Equipments.Drilling.@@@',data%Equipments%DrillingConsole%@@@,found)\n",
- "# \t\tif ( .not. found ) print *,\"Not found: @@@\" \"\"\"\n",
- "pattern=\"\"\" call jsonfile%get('UnityInputs.@@@',data%Equipments%UnityInputs%@@@,found)\n",
- " if ( .not. found ) call logg(4,\"Not found: UnityInputs%@@@\")\"\"\"\n",
- "input = open(\"Text1.txt\")\n",
- "lines = input.readlines()\n",
- "for line in lines:\n",
- "\tif '::' not in line:\n",
- "\t\tcontinue\n",
- "\tparts = line.split(\"::\")\n",
- "\tif len(parts)!=2:\n",
- "\t\tcontinue\n",
- "\tname = parts[1].split(' ')[1].strip()\n",
- "\tnames = name.split(',')\n",
- "\tfor name in names:\n",
- "\t\tnewline = pattern.replace(\"@@@\",name)\n",
- "\t\tprint(newline)\n"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# ToJson"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "{\"MudBucket\":0,\n",
- "\"Elevator\":0,\n",
- "\"FillupHead\":0,\n",
- "\"Ibop\":0,\n",
- "\"Kelly\":0,\n",
- "\"MouseHole\":0,\n",
- "\"OperationCondition\":0,\n",
- "\"SafetyValve\":0,\n",
- "\"operation\":0,\n",
- "\"Slips\":0,\n",
- "\"Slips_S\":0,\n",
- "\"Swing\":0,\n",
- "\"Swing_S\":0,\n",
- "\"TdsBackupClamp\":0,\n",
- "\"TdsSpine\":0,\n",
- "\"TdsSwing\":0,\n",
- "\"TdsTong\":0,\n",
- "\"Tong\":0,\n",
- "\"Tong_S\":0,\n",
- "\"TdsConnectionModes\":0,\n",
- "\"TdsElevatorModes\":0,\n",
- "}\n"
- ]
- }
- ],
- "source": [
- "#Artifical JSon\n",
- "input = open(\"Text1.txt\")\n",
- "output = \"{\"\n",
- "lines = input.readlines()\n",
- "for line in lines:\n",
- " name = line.split(\"::\")[-1].strip()\n",
- " name = name.split(' ')[0]\n",
- " type = line.split(\"::\")[0].strip()\n",
- " output += f\"\\\"{name}\\\":0,\\n\" \n",
- " # name = line.split(\"%\")[-1][:-1]\n",
- " # print(name)\n",
- "print(output+\"}\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "call json%add(p,\"MudBucket\",data%State%unitySignals%MudBucket)\n",
- "call json%add(p,\"Elevator\",data%State%unitySignals%Elevator)\n",
- "call json%add(p,\"FillupHead\",data%State%unitySignals%FillupHead)\n",
- "call json%add(p,\"Ibop\",data%State%unitySignals%Ibop)\n",
- "call json%add(p,\"Kelly\",data%State%unitySignals%Kelly)\n",
- "call json%add(p,\"MouseHole\",data%State%unitySignals%MouseHole)\n",
- "call json%add(p,\"OperationCondition\",data%State%unitySignals%OperationCondition)\n",
- "call json%add(p,\"SafetyValve\",data%State%unitySignals%SafetyValve)\n",
- "call json%add(p,\"operation\",data%State%unitySignals%operation)\n",
- "call json%add(p,\"Slips\",data%State%unitySignals%Slips)\n",
- "call json%add(p,\"Slips_S\",data%State%unitySignals%Slips_S)\n",
- "call json%add(p,\"Swing\",data%State%unitySignals%Swing)\n",
- "call json%add(p,\"Swing_S\",data%State%unitySignals%Swing_S)\n",
- "call json%add(p,\"TdsBackupClamp\",data%State%unitySignals%TdsBackupClamp)\n",
- "call json%add(p,\"TdsSpine\",data%State%unitySignals%TdsSpine)\n",
- "call json%add(p,\"TdsSwing\",data%State%unitySignals%TdsSwing)\n",
- "call json%add(p,\"TdsTong\",data%State%unitySignals%TdsTong)\n",
- "call json%add(p,\"Tong\",data%State%unitySignals%Tong)\n",
- "call json%add(p,\"Tong_S\",data%State%unitySignals%Tong_S)\n",
- "call json%add(p,\"TdsConnectionModes\",data%State%unitySignals%TdsConnectionModes)\n",
- "call json%add(p,\"TdsElevatorModes\",data%State%unitySignals%TdsElevatorModes)\n"
- ]
- }
- ],
- "source": [
- "precode = \"\"\"call json%add(p,\"\",data%State%unitySignals%\"\"\"\n",
- "input = open(\"Text1.txt\")\n",
- "lines = input.readlines()\n",
- "for line in lines:\n",
- " name = line.split(\"::\")[-1].strip()\n",
- " name = name.split(' ')[0]\n",
- " icoute = precode.index(\"\\\"\")+1\n",
- " # name = line.split(\"%\")[-1][:-1]\n",
- " # print(name)\n",
- " newline = precode[:icoute]+name+precode[icoute:]+name+\")\"\n",
- " print(newline)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "call BopControlPanelToJson(p)\n",
- "call ChokeControlPanelToJson(p)\n",
- "call ChokeManifoldToJson(p)\n",
- "call DataDisplayConsoleToJson(p)\n",
- "call DrillingConsoleToJson(p)\n",
- "call HookToJson(p)\n",
- "call StandPipeManifoldToJson(p)\n",
- "call TopDrivePanelToJson(p)\n",
- "call ! Drill WatchToJson(p)\n",
- "call DrillingWatchToJson(p)\n",
- "call TankToJson(p)\n"
- ]
- }
- ],
- "source": [
- "precode = \"\"\"call \"\"\"\n",
- "postcode = \"\"\"ToJson(p)\"\"\"\n",
- "input = open(\"Text1.txt\")\n",
- "lines = input.readlines()\n",
- "for line in lines:\n",
- " name = line.split(\"::\")[-1].strip()\n",
- " # icoute = precode.index(\"\\\"\")+1\n",
- " # name = line.split(\"::\")[-1][:-1].strip()\n",
- " # print(name)\n",
- " newline = precode+name+postcode\n",
- " print(newline)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\tGeo/GeoMain.f90 \\\n",
- "\n"
- ]
- }
- ],
- "source": [
- "##Replace space with _ in filenames and list them for put them in makefile\n",
- "import os\n",
- "dir = 'Geo'\n",
- "files = os.listdir(dir)\n",
- "fstring = ''\n",
- "for f in files:\n",
- " if f.endswith('90'):\n",
- " newf = f.replace(' ','_')\n",
- " os.rename(os.path.join(dir,f),os.path.join(dir,newf))\n",
- " if newf.lower().endswith('variables.f90'):\n",
- " fstring = '\\t'+os.path.join(dir,newf).replace('\\\\','/') +' \\\\\\n' + fstring\n",
- " else:\n",
- " fstring = fstring + '\\t'+os.path.join(dir,newf).replace('\\\\','/') +' \\\\\\n'\n",
- "\n",
- "print(fstring)"
- ]
- },
- {
- "attachments": {},
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Extract variable names from definition lines"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "# %pwd\n",
- "lines = input(\"Enter lines:\").split(\" \")\n",
- "lines = [l.strip() for l in lines if len(l.strip())>0]\n",
- "vars = []\n",
- "for l in lines:\n",
- " if '::' in l:\n",
- " vars.append(l.split('::')[1].strip())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import string\n",
- "string.ascii_letters"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "var: AnnularRegulatorSetControl\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AirMasterValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: ByePassValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AnnularValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: UpperRamsValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: MiddleRamsValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: KillLineValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: ChokeLineValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: LowerRamsValve\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: ManifoldPressureGauge\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AirSupplyPressureGauge\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AccumulatorPressureGauge\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AnnularPressureGauge\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AnnularOpenLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AnnularCloseLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: UpperRamsOpenLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: UpperRamsCloseLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: MiddleRamsOpenLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: MiddleRamsCloseLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: KillLineOpenLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: KillLineCloseLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: ChokeLineOpenLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: ChokeLineCloseLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: LowerRamsOpenLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: LowerRamsCloseLED\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: AnnularStatus\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: UpperRamsStatus\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: MiddleRamsStatus\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n",
- "var: LowerRamsStatus\n",
- "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
- "Char before: \n",
- "Char after: \n",
- "\n"
- ]
- }
- ],
- "source": [
- "import os\n",
- "import sys\n",
- "import re\n",
- "dir = '.'\n",
- "varNameChars = string.ascii_letters + '_'\n",
- "log = open(os.path.join(dir,'ReplaceVars.log',),'a')\n",
- "end=False\n",
- "for dir,subdirs,files in os.walk(dir):\n",
- " for filename in files:\n",
- " if filename.lower().endswith('.f90'):\n",
- " # print(filename)\n",
- " file = open(os.path.join(dir,filename))\n",
- " code = file.read()\n",
- " for var in vars:\n",
- " if var not in code:\n",
- " continue\n",
- " occurs = [m.start() for m in re.finditer(var, code)]\n",
- " for occurance in occurs:\n",
- " if code[occurs[0]-1] in varNameChars or code[occurs[0]+len(var)] in varNameChars:\n",
- " continue\n",
- " print(f\"var: {var}\")\n",
- " print(f\"file = {os.path.join(dir,filename)}\")\n",
- " print(f\"Char before: {code[occurs[0]-1]}\")\n",
- " print(f\"Char after: {code[occurs[0]+len(var)]}\")\n",
- " end = True\n",
- " if end:\n",
- " break"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "State\n",
- "Hoisting\n",
- "OperationScenario\n",
- "notifications\n",
- "permissions\n",
- "unitySignals\n",
- "StudentStation\n",
- "BopStackInput\n",
- "BopStackAcc\n",
- "RamLine\n",
- "AnnularComputational\n",
- "Annular\n",
- "PipeRam1\n",
- "ShearRam\n",
- "PipeRam2\n",
- "ChokeLine\n",
- "KillLine\n",
- "Pumps\n",
- "RAM\n",
- "RAMS\n",
- "Choke\n",
- "AirDrivenPump\n",
- "AirPumpLine\n",
- "CHOOKE\n",
- "Drawworks\n",
- "MudSystem\n",
- "MUD\n",
- "PUMP\n",
- "RTable\n",
- "TDS\n",
- "GasType(3)\n",
- "PressureDisplay\n",
- "ObservationPoint(:)\n",
- "FricPressDrop\n",
- "ROP_Spec\n",
- "ROP_Bit\n",
- "TDGeo\n",
- "F_String(:)\n",
- "F_Counts\n",
- "F_Interval(:)\n",
- "OD_Annulus(4)\n",
- "TD_DrillStem\n",
- "TD_DrillStems\n",
- "TD_String\n",
- "TD_Count\n",
- "G_StringElement\n",
- "TD_Vol\n",
- "TD_General\n",
- "TD_BOP\n",
- "TD_BOPElement(4)\n",
- "TD_StConn\n",
- "TD_Load\n",
- "TD_WellEl\n",
- "TD_Casing\n",
- "data%State%TD_Liner\n",
- "TD_OpenHole\n",
- "TD_ROPHole\n",
- "TD_WellGeneral\n",
- "TD_WellGeo(:)\n",
- "EquipmentControl\n",
- "BopControlPanel\n",
- "ChokeControlPanel\n",
- "ChokeManifold\n",
- "DataDisplayConsole\n",
- "DrillingConsole\n",
- "Hook\n",
- "StandPipeManifold\n",
- "TopDrivePanel\n",
- "DrillingWatch\n",
- "Tank\n",
- "Configuration\n",
- "StringConfiguration\n",
- "Formation\n",
- "Reservoir\n",
- "Shoe\n",
- "Accumulator\n",
- "BopStackSpecification\n",
- "Hoisting\n",
- "Power\n",
- "PumpsSpecification\n",
- "RigSize\n",
- "CasingLinerChoke\n",
- "PathGeneration\n",
- "WellSurveyData\n",
- "MudProperties\n",
- "problems\n",
- "BitProblems\n",
- "BopProblems\n",
- "ChokeProblems\n",
- "DrillStemProblems\n",
- "GaugesProblems\n",
- "HoistingProblems\n",
- "KickProblems\n",
- "LostProblems\n",
- "MudTreatmentProblems\n",
- "OtherProblems\n",
- "PumpProblems\n",
- "RotaryProblems\n"
- ]
- },
- {
- "ename": "IndexError",
- "evalue": "list index out of range",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
- "\u001b[1;32mc:\\Projects\\VSIM\\SimulationCore2\\helper.ipynb Cell 6\u001b[0m in \u001b[0;36m<cell line: 3>\u001b[1;34m()\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Projects/VSIM/SimulationCore2/helper.ipynb#W5sZmlsZQ%3D%3D?line=5'>6</a>\u001b[0m nsp\u001b[39m+\u001b[39m\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Projects/VSIM/SimulationCore2/helper.ipynb#W5sZmlsZQ%3D%3D?line=6'>7</a>\u001b[0m splits \u001b[39m=\u001b[39m line\u001b[39m.\u001b[39msplit(\u001b[39m\"\u001b[39m\u001b[39m::\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/Projects/VSIM/SimulationCore2/helper.ipynb#W5sZmlsZQ%3D%3D?line=7'>8</a>\u001b[0m \u001b[39mprint\u001b[39m(splits[\u001b[39m1\u001b[39;49m]\u001b[39m.\u001b[39mstrip())\n",
- "\u001b[1;31mIndexError\u001b[0m: list index out of range"
- ]
- }
- ],
- "source": [
- "f = open(\"hier.txt\")\n",
- "lines = f.readlines()\n",
- "for line in lines[1:]:\n",
- " nsp=0\n",
- " while line[nsp]==' ':\n",
- " nsp+=1\n",
- " splits = line.split(\"::\")\n",
- " print(splits[1].strip())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'type SimulationDataType type(SimulationStateType)::State Type(HoistingType)::Hoisting type(OperationScenarioType)::OperationScenario type(NotificationType)::notifications type(PermissionsType):: permissions type(UnitySignalsType):: unitySignals type(StudentStationType)::StudentStation type(BopStackInputType)::BopStackInput type(BopStackAccType)::BopStackAcc type(RamLineType)::RamLine type(AnnularComputationalType)::AnnularComputational type(AnnularType)::Annular type(PipeRams1Type)::PipeRam1 type(ShearRamType)::ShearRam type(PipeRam2Type)::PipeRam2 type(ChokeLineType)::ChokeLine type(KillLineType)::KillLine type(PumpsType)::Pumps TYPE(BOP_TypeVars), DIMENSION(1:6) :: RAM TYPE(BOP_TypeVars2D) :: RAMS type(ChokeType)::Choke type(AirDrivenPumpType)::AirDrivenPump type(AirPumpLineType)::AirPumpLine TYPE(CHOKE_TypeVars), DIMENSION(1:2) :: CHOOKE TYPE(Drawworks_Var) :: Drawworks type(MudSystemType)::MudSystem TYPE(MUD_TypeVars), DIMENSION(1:10) :: MUD TYPE(Pump_Var), DIMENSION(1:3) :: PUMP TYPE(RTable_Var) :: RTable TYPE(TDS_Var) :: TDS TYPE(GasData) :: GasType(3) ! 1 = methane , 2 = Hydrogen sulfide , 3 = Carbon dioxid TYPE(PressureDisplayVARIABLESTYPE) :: PressureDisplay TYPE(ObservationAndGaugePointsInformations) , ALLOCATABLE :: ObservationPoint(:) TYPE(FricPressDropVarsTYPE) :: FricPressDrop TYPE(ROPSpecificationInfo) :: ROP_Spec TYPE(ROPInfo) :: ROP_Bit TYPE(Geo_Data) :: TDGeo TYPE(F_StringData) , Allocatable :: F_String(:) TYPE(F_IntervalsCountsData):: F_Counts TYPE(F_IntervalData) , Allocatable :: F_Interval(:) TYPE(OD_AnnulusData) :: OD_Annulus(4) TYPE(TD_DrillStemInfo), ALLOCATABLE, DIMENSION(:) :: TD_DrillStem TYPE(TD_SeparatedDrillStemInfo), ALLOCATABLE, DIMENSION(:) :: TD_DrillStems TYPE(TD_StringInfo) :: TD_String TYPE(TD_AddRemoveInfo) :: TD_Count TYPE(CStringComponents), ALLOCATABLE, DIMENSION(:) :: G_StringElement TYPE(TD_RemovedVolumeInfo) :: TD_Vol TYPE(TD_GeneralInfo) :: TD_General TYPE(TD_BOPInfo) :: TD_BOP TYPE(CBopElement) :: TD_BOPElement(4) TYPE(TD_StringconnectionInfo) :: TD_StConn TYPE(TD_LoadInfo) :: TD_Load TYPE(TD_WellElementsInfo) :: TD_WellEl TYPE(TD_CasingInfo), ALLOCATABLE, DIMENSION(:) :: TD_Casing TYPE(TD_LinerInfo), ALLOCATABLE, DIMENSION(:) :: data%State%TD_Liner TYPE(TD_OpenHoleInfo), ALLOCATABLE, DIMENSION(:) :: TD_OpenHole TYPE(TD_ROPHoleInfo), ALLOCATABLE, DIMENSION(:) :: TD_ROPHole TYPE(TD_WellGeneralInfo) :: TD_WellGeneral TYPE(TD_WellGeometryData), Allocatable :: TD_WellGeo(:) type(EquipmentControlType)::EquipmentControl type(BopControlPanelType) :: BopControlPanel Type(ChokeControlPanelType)::ChokeControlPanel Type(ChokeManifoldType)::ChokeManifold Type(DataDisplayConsoleType) :: DataDisplayConsole TYPE(DrillingConsoleType) :: DrillingConsole Type(HookType)::Hook type(StandPipeManifoldType)::StandPipeManifold Type(TopDrivePanelType)::TopDrivePanel Type(DrillingWatchType)::DrillingWatch Type(TankType)::Tank type(ConfigurationType)::Configuration Type(StringConfigurationType)::StringConfiguration Type(FormationType) :: Formation Type(ReservoirType)::Reservoir Type(ShoeType)::Shoe Type(AccumulatorType)::Accumulator Type(BopStackSpecificationType)::BopStackSpecification Type(HoistingType)::Hoisting Type(PowerType)::Power Type(PumpSpecificationType)::PumpsSpecification Type(RigSizeType)::RigSize Type(CasingLinerChokeType)::CasingLinerChoke Type(PathGenerationType)::PathGeneration Type(WellSurveyDataType)::WellSurveyData Type(MudPropertiesType)::MudProperties type(ProblemsType)::problems type(BitProblemsType)::BitProblems type(BopProblemsType)::BopProblems type(ChokeProblemsType)::ChokeProblems type(DrillStemProblemsType)::DrillStemProblems type(GaugesProblemsType)::GaugesProblems type(HoistingProblemsType):: HoistingProblems type(KickProblemsType)::KickProblems type(LostProblemsType)::LostProblems type(MudTreatmentProblemsType)::MudTreatmentProblems type(OtherProblemsType)::OtherProblems type(PumpProblemsType)::PumpProblems type(RotaryProblemsType)::RotaryProblems end type SimulationDataType'"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "line"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "for fn in modules:\n",
- " f = open(fn)\n",
- " lines = f.readlines()\n",
- " module_filenames = {}\n",
- " used_modules = []\n",
- " mod_count = 0\n",
- " for l in lines:\n",
- " l = l.strip().lower()\n",
- " if l.startswith('module ') and not l.startswith('module procedure '):\n",
- " mod_name = l.split(' ')[1]\n",
- " module_filenames[mod_name] = fn\n",
- " mod_count +=1\n",
- " if l.startswith('use'):\n",
- " used_modules.append(l.split(' ')[1])\n",
- " if mod_count !=1:\n",
- " print(f\"{fn} has {mod_count} modules\")\n",
- " module_filenames,used_modules"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Redis"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "ename": "KeyboardInterrupt",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[2], line 17\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 16\u001b[0m r\u001b[38;5;241m.\u001b[39mpublish(channelName, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtest\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 17\u001b[0m \u001b[43mtime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msleep\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;66;03m# r.publish(channelName, \"Hello from Server 2!\") \u001b[39;00m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;66;03m# r.publish(channelName, \"Hello from Server 3!\") \u001b[39;00m\n\u001b[1;32m 20\u001b[0m \u001b[38;5;66;03m# r.publish(channelName, \"Hello from Server 4!\")\u001b[39;00m\n",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
- ]
- }
- ],
- "source": [
- "import redis \n",
- "import time \n",
- " \n",
- "# Define the connection parameters \n",
- "redis_host = \"127.0.0.1\"\n",
- "redis_port = 6379 \n",
- "redis_password = \"1qazxsw2$$\" \n",
- "channelName = \"f7e58e26-f9c0-44e7-8954-08dc093dd85d.ch\" \n",
- "streamKey = \"sampleStream\" \n",
- " \n",
- "# Connect to the Redis server \n",
- "r = redis.Redis(host=redis_host, port=redis_port, password=redis_password) \n",
- " \n",
- "# Publish messages to the channel\n",
- "while True:\n",
- " r.publish(channelName, \"test\")\n",
- " time.sleep(1)\n",
- "# r.publish(channelName, \"Hello from Server 2!\") \n",
- "# r.publish(channelName, \"Hello from Server 3!\") \n",
- "# r.publish(channelName, \"Hello from Server 4!\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Received: 1\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n",
- "Received: b'Hello from FORTRAN!'\n"
- ]
- },
- {
- "ename": "KeyboardInterrupt",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[2], line 13\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Listen for messages\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m---> 13\u001b[0m message \u001b[38;5;241m=\u001b[39m \u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m message:\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mReceived: \u001b[39m\u001b[38;5;124m'\u001b[39m, message[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m'\u001b[39m])\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:1013\u001b[0m, in \u001b[0;36mPubSub.get_message\u001b[0;34m(self, ignore_subscribe_messages, timeout)\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1009\u001b[0m \u001b[38;5;66;03m# The connection isn't subscribed to any channels or patterns,\u001b[39;00m\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;66;03m# so no messages are available\u001b[39;00m\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m-> 1013\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparse_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mis\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1014\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m response:\n\u001b[1;32m 1015\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandle_message(response, ignore_subscribe_messages)\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:824\u001b[0m, in \u001b[0;36mPubSub.parse_response\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 821\u001b[0m conn\u001b[38;5;241m.\u001b[39mconnect()\n\u001b[1;32m 822\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mread_response(disconnect_on_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, push_request\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m--> 824\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtry_read\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 826\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_health_check_response(response):\n\u001b[1;32m 827\u001b[0m \u001b[38;5;66;03m# ignore the health check message as user might not expect it\u001b[39;00m\n\u001b[1;32m 828\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhealth_check_response_counter \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:800\u001b[0m, in \u001b[0;36mPubSub._execute\u001b[0;34m(self, conn, command, *args, **kwargs)\u001b[0m\n\u001b[1;32m 792\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_execute\u001b[39m(\u001b[38;5;28mself\u001b[39m, conn, command, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 793\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 794\u001b[0m \u001b[38;5;124;03m Connect manually upon disconnection. If the Redis server is down,\u001b[39;00m\n\u001b[1;32m 795\u001b[0m \u001b[38;5;124;03m this will fail and raise a ConnectionError as desired.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 798\u001b[0m \u001b[38;5;124;03m patterns we were previously listening to\u001b[39;00m\n\u001b[1;32m 799\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_with_retry\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 801\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mcommand\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_disconnect_raise_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 803\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/retry.py:46\u001b[0m, in \u001b[0;36mRetry.call_with_retry\u001b[0;34m(self, do, fail)\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 46\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_supported_errors \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 48\u001b[0m failures \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:801\u001b[0m, in \u001b[0;36mPubSub._execute.<locals>.<lambda>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 792\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_execute\u001b[39m(\u001b[38;5;28mself\u001b[39m, conn, command, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 793\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 794\u001b[0m \u001b[38;5;124;03m Connect manually upon disconnection. If the Redis server is down,\u001b[39;00m\n\u001b[1;32m 795\u001b[0m \u001b[38;5;124;03m this will fail and raise a ConnectionError as desired.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 798\u001b[0m \u001b[38;5;124;03m patterns we were previously listening to\u001b[39;00m\n\u001b[1;32m 799\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mretry\u001b[38;5;241m.\u001b[39mcall_with_retry(\n\u001b[0;32m--> 801\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m: \u001b[43mcommand\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 802\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m error: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_disconnect_raise_connect(conn, error),\n\u001b[1;32m 803\u001b[0m )\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:818\u001b[0m, in \u001b[0;36mPubSub.parse_response.<locals>.try_read\u001b[0;34m()\u001b[0m\n\u001b[1;32m 816\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtry_read\u001b[39m():\n\u001b[1;32m 817\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m block:\n\u001b[0;32m--> 818\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcan_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 819\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 820\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/connection.py:478\u001b[0m, in \u001b[0;36mAbstractConnection.can_read\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 475\u001b[0m host_error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_host_error()\n\u001b[1;32m 477\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 478\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_parser\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcan_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 479\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 480\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdisconnect()\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/_parsers/base.py:128\u001b[0m, in \u001b[0;36m_RESPBase.can_read\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 127\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcan_read\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout):\n\u001b[0;32m--> 128\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_buffer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcan_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/_parsers/socket.py:95\u001b[0m, in \u001b[0;36mSocketBuffer.can_read\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcan_read\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout: \u001b[38;5;28mfloat\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mbool\u001b[39m:\n\u001b[0;32m---> 95\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mbool\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43munread_bytes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_from_socket(\n\u001b[1;32m 96\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout, raise_on_timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 97\u001b[0m )\n",
- "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/_parsers/socket.py:42\u001b[0m, in \u001b[0;36mSocketBuffer.unread_bytes\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21munread_bytes\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mint\u001b[39m:\n\u001b[1;32m 39\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124;03m Remaining unread length of buffer\u001b[39;00m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 42\u001b[0m pos \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_buffer\u001b[49m\u001b[38;5;241m.\u001b[39mtell()\n\u001b[1;32m 43\u001b[0m end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer\u001b[38;5;241m.\u001b[39mseek(\u001b[38;5;241m0\u001b[39m, SEEK_END)\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer\u001b[38;5;241m.\u001b[39mseek(pos)\n",
- "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
- ]
- }
- ],
- "source": [
- "import redis\n",
- "\n",
- "r = redis.Redis(host='localhost', port=6379,password='1qazxsw2$$')\n",
- "\n",
- "# Create a pubsub instance\n",
- "p = r.pubsub()\n",
- "\n",
- "# Subscribe to a channel\n",
- "p.subscribe('37364875-c9cf-43a3-de45-08dc0c6103c9.ch_out')\n",
- "\n",
- "# Listen for messages\n",
- "while True:\n",
- " message = p.get_message()\n",
- " if message:\n",
- " print('Received: ', message['data'])"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "base",
- "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.10"
- },
- "orig_nbformat": 4,
- "vscode": {
- "interpreter": {
- "hash": "1ef4a26de7183d96d6da1045a38581e0a15b2215d0c1b98c7b273c6e514c6c7e"
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
|