{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we need to generate the energies at both baseline and target levels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Density fitting is not supported for CISD in pyscf and will be turned off automatically\n"
     ]
    }
   ],
   "source": [
    "import mlatom as ml\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# prepare H2 geometries with bond lengths ranging from 0.5 to 5.0 Å\n",
    "xyz = np.zeros((451, 2, 3))\n",
    "xyz[:, 1, 2] = np.arange(0.5, 5.01, 0.01)\n",
    "z = np.ones((451, 2)).astype(int)\n",
    "molDB = ml.molecular_database.from_numpy(coordinates=xyz, species=z)\n",
    "\n",
    "# calculate HF energies\n",
    "hf = ml.models.methods(method='HF/STO-3G', program='PySCF')\n",
    "hf.predict(molecular_database=molDB, calculate_energy=True)\n",
    "molDB.add_scalar_properties(molDB.get_properties('energy'), 'HF_energy') # save HF energy with a new name\n",
    "\n",
    "# calculate CISD energies\n",
    "cisd = ml.models.methods(method='CISD/cc-pVDZ', program='PySCF')\n",
    "cisd.predict(molecular_database=molDB, calculate_energy=True)\n",
    "molDB.add_scalar_properties(molDB.get_properties('energy'), 'FCI_energy')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we use HF/STO-3G as the baseline and CISD/cc-pVDZ (FCI in our case) as the target for the geometries with H--H bond lengths ranging from 0.5 to 5.0 Å."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We need to calculate the differences between the target and baseline:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "molDB.add_scalar_properties(molDB.get_properties('FCI_energy') - molDB.get_properties('HF_energy'), 'delta_energy')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can train the KREG model on the differences (basically, residual errors)just on the 12 training points (using 10 sub-training and 2 validation points)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized sigma: 0.35355339059327373\n",
      "Optimized lambda: 5.3947966093944364e-06\n",
      "Optimized validation loss: 0.000380824502657017\n"
     ]
    }
   ],
   "source": [
    "# use every 40th point of the data as the training set and split it into the sub-training and validation sets\n",
    "step = 40\n",
    "trainDB = molDB[::step]\n",
    "val = trainDB[::10]\n",
    "sub = ml.molecular_database([mol for mol in trainDB if mol not in val])\n",
    "# setup the KREG model\n",
    "kreg = ml.models.kreg(model_file='KREG.npz', ml_program='KREG_API')\n",
    "# optimize its hyperparameters\n",
    "kreg.hyperparameters['sigma'].minval = 2**-5 # modify the default lower bound of the hyperparameter sigma\n",
    "kreg.optimize_hyperparameters(subtraining_molecular_database=sub,       \n",
    "                                validation_molecular_database=val,\n",
    "                                optimization_algorithm='grid',\n",
    "                                hyperparameters=['lambda', 'sigma'],\n",
    "                                training_kwargs={'property_to_learn': 'delta_energy', 'prior': 0},\n",
    "                                prediction_kwargs={'property_to_predict': 'estimated_delta_energy'})\n",
    "lmbd = kreg.hyperparameters['lambda'].value ; sigma=kreg.hyperparameters['sigma'].value\n",
    "valloss = kreg.validation_loss\n",
    "print('Optimized sigma:', sigma)\n",
    "print('Optimized lambda:', lmbd)\n",
    "print('Optimized validation loss:', valloss)\n",
    "# Train the model with the optimized hyperparameters to dump it to disk.\n",
    "kreg.train(molecular_database=trainDB, property_to_learn='delta_energy')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After we trained the KREG model, we can use it to estimate the delta corrections for the entire PEC and add them to the baseline predictions to obtain the delta-learning model estimates of the FCI energies:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# predict the delta corrections with the trained KREG model\n",
    "kreg.predict(molecular_database=molDB, property_to_predict='KREG_delta_energy')\n",
    "# add them to the baseline values\n",
    "molDB.add_scalar_properties(molDB.get_properties('HF_energy') + molDB.get_properties('KREG_delta_energy'), 'FCI_energy_est')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, let's train the KREG model directly on the FCI data for comparison and use it for predicting the PEC."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized sigma: 3.9999999999999987\n",
      "Optimized lambda: 0.04819408829399811\n",
      "Optimized validation loss: 0.006956885379877326\n"
     ]
    }
   ],
   "source": [
    "# setup the KREG model\n",
    "kreg_fci = ml.models.kreg(model_file='KREG.npz', ml_program='KREG_API')\n",
    "# optimize its hyperparameters\n",
    "kreg_fci.hyperparameters['sigma'].minval = 2**-5 # modify the default lower bound of the hyperparameter sigma\n",
    "kreg_fci.optimize_hyperparameters(subtraining_molecular_database=sub,       \n",
    "                                validation_molecular_database=val,\n",
    "                                optimization_algorithm='grid',\n",
    "                                hyperparameters=['lambda', 'sigma'],\n",
    "                                training_kwargs={'property_to_learn': 'FCI_energy', 'prior': 0},\n",
    "                                prediction_kwargs={'property_to_predict': 'estimated_FCI_energy'})\n",
    "lmbd = kreg_fci.hyperparameters['lambda'].value ; sigma=kreg_fci.hyperparameters['sigma'].value\n",
    "valloss = kreg_fci.validation_loss\n",
    "print('Optimized sigma:', sigma)\n",
    "print('Optimized lambda:', lmbd)\n",
    "print('Optimized validation loss:', valloss)\n",
    "# Train the model with the optimized hyperparameters to dump it to disk.\n",
    "kreg_fci.train(molecular_database=trainDB, property_to_learn='FCI_energy')\n",
    "# predict with the direct KREG model\n",
    "kreg_fci.predict(molecular_database=molDB, property_to_predict='KREG_FCI_energy')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, let's check the results. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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rIveQWqChBDSTFbhnB2c2XrPVrtct6JkZWWh1WrZuXOnTXMSYPPFXJpjx45x22238dhjj/Hqq6/i4+PDP//8w+jRo8nPz8fFxcVm9NmVycvFWAC++OILmy99wBrbli1bGDFiBDNmzKBv3754enry448/FuoL5epa9DpRjo6ONq8VRSkxcSmqvHpxNr5rUNR5yxvb1cjKymLGjBnccccdhfZd7FtVEx1KyuDVP6LZGHsOAFedljHdG0h/ICFEIfKJUMEURcHFsfr+Jd2wYUNrX5K6desCBZ1wDx8+TI8ePQCIiorCbDaTnJxMt27dynRenU5n07EXYOfOnVgsFt566y00moK++j/99JNNmbCwsBLPGxgYSHBwMEePHmXEiBFFltm8eTOhoaG88MIL1m3Hjx8vU9wVzdPTk8DAQLZv30737t2BglqWK/tkVYTIyEhMJhNbt26lc+fOAJw/f56YmBiaNGliLbN1q21y/u+//9q8bt26NTExMaX+W9QU57IMvL3yMD9uS8CigqNW4d6OoTzRKww/N729wxNCVEOSDN1g3NzcGD16NM8++yy+vr4EBATwwgsvWJMVgEaNGjFixAhGjhzJW2+9RVRUFGfPnmX16tW0aNGCW2+9tdB569WrR3x8PHv27KFOnTq4u7sTFhaG0Wjkgw8+YODAgWzatKlQM1hZzJgxg3HjxuHp6Um/fv0wGAzs2LGD1NRUnnnmGcLDw0lISODHH3+kXbt2/PHHHyxatOia3qdr8eSTTzJ79mzCwsJo3LgxH3zwAampqRU+UV94eDiDBg1izJgxfPbZZ7i7uzN58mRq167NoEGDABg3bhxdunRhzpw5DBo0iL/++sumiQxg2rRp3HbbbdStW5f//e9/aDQa9u7dy/79+3nllVcqNObKZDCZmb/5GB+sPkKmoWAk3IDmQUzuF0ld3+r7B4oQwv5kaP0N6M0336Rbt24MHDiQPn360LVrV9q0aWNT5uuvv2bkyJFMmDCBiIgIBg8ezPbt2621SVe688476devH7169cLf358ffviBli1b8vbbb/P666/TrFkzFixYwOzZs8sd70MPPcTcuXP5+uuvad68OT169GDevHnUr18fgNtvv53x48czduxYWrVqxebNm5k6dWr535gKMmnSJO6++25GjhxJp06dcHNzo2/fvpXS5PT111/Tpk0bbrvtNjp16oSqqixfvtzavNaxY0e++OIL3nvvPVq2bMnff//Niy++aHOOvn37smzZMv7++2/atWtHx44deeeddwgNDa3weCuDqqr8fSCJW97ZwKzlh8g0mGhW24OFD3fk4xFtJBESQpRKUSuis8N1LCMjA09PT9LT0wv1acnLyyM+Pt5m3hohrmSxWIiMjOSuu+7i5Zdftnc4lcJevwsJ53N46fcDrDlU0Knc313Pc30juLN1HTQaWTJDiBtZSd/fV5JmMiEq2PHjx/n777/p0aMHBoOBDz/8kPj4eO655x57h3bdMJjMfL7+KB+uPYLBZMFRq/BQtwY80StMOkcLIcqtxjSTpaSkMGLECDw8PPDy8mL06NElzmR87Ngx62zIVz5+/vnnKoxc3Gg0Gg3z5s2jXbt2dOnShX379rFq1SoiIyPtHdp14Z/Yc/R/dyNvrTyMwWShc0Nf/nyqO5P6NZZESAhxVWrMJ8eIESNITExk5cqVGI1GHnjgAR5++GG+//77IsuHhITYLJEA8Pnnn/Pmm2/Sv3//qghZ3KBCQkLYtGmTvcO47pzLMjDz94Ms3XsaKGgSe/HWSG5vGSyryAshrkmNSIaio6NZsWIF27dvp23btgB88MEHDBgwgDlz5hAcHFzoGK1WW2iBzUWLFnHXXXeVa64cIYR9qarK0r2neWnpAVJzjGgUGNmpHs/c0ggPJ8fSTyCEEKWoEcnQli1b8PLysiZCAH369EGj0bB169ZCM+wWZefOnezZs4ePPvqoxHIGgwGDwWB9nZGRcfWBCyGuSWJ6Li8u2s/qCx2kI2t58MadLWhex7OUI4UQouxqRDKUlJREQECAzTYHBwd8fHxISkoq0zm+/PJLIiMjrZPTFWf27NnMmDHjqmMVQlw7VVX5YdsJZi+PJtNgQqfV8ORNYTzasyGO2hrT1VEIUUPY9VNl8uTJxXZyvvg4dOjQNV8nNzeX77//ntGjR5dadsqUKaSnp1sfJ06cuObrCyHK7lRaLiPmbuX5RfvINJhoFeLFH+O68mTvcEmEhBCVwq41QxMmTGDUqFEllmnQoAFBQUGFFs40mUykpKQU6hdUlF9++YWcnBxGjhxZalm9Xo9eL1P2C1HVVFVlyZ7TTF2yn8w8E06OGibeEsEDXeqjlTmDhBCVyK7JkL+/f5GriF+pU6dOpKWlsXPnTutMyWvWrMFisRRavLMoX375JbfffnuZriWEqHppOfm8sHg/f/xXMAI0qq4Xb9/Vivp+RS+uK4QQFalG1DlHRkbSr18/xowZw7Zt29i0aRNjx45l+PDh1pFkp06donHjxmzbts3m2CNHjrBhwwYeeughe4ReY/Ts2ZOnn37a+rpevXq8++67dotH3Dg2HD5L33c38Md/iThoFCbc3IifH+kkiZAQosrUiGQIYMGCBTRu3JjevXszYMAAunbtyueff27dbzQaiYmJIScnx+a4r776ijp16nDLLbdUdcg12vbt23n44Ycr9Rrz5s3Dy8vrqspFR0cTEhLC0KFDyc/PZ968edZ+ZhqNhlq1ajFs2DASEhJsjuvZs2eRfdMeffRRm3Jr167ltttuw9/fHycnJxo2bMiwYcPYsGHDtd62uCDPaOalpQcY+dU2zmQYaODvym+Pd+bJ3uE4SN8gIUQVqhGjyQB8fHyKnWARCmoyilpmbdasWcyaNasyQ7suldakaDQarYuBVrXt27fTv39/hgwZwmeffYZGU/DF6eHhQUxMDKqqEh8fz+OPP87QoUPZunWrzfFjxoxh5syZNttcXC4t5vnxxx8zduxY7rvvPhYuXEjDhg1JT09n7dq1jB8/np07d1b+TV7n4s9l88SCXRxMLJi6YlTnekzq1xhnndbOkQkhbkTy59cNKDs7m5EjR+Lm5katWrV46623CpW5splMURQ++eQTbr/9dlxdXXn11VcBWLJkCa1bt8bJyYkGDRowY8YMTCaT9bi0tDQeeeQRAgMDcXJyolmzZixbtox169bxwAMPkJ6ebq2deemll0qNfc2aNdx0002MHj2aL774wpoIXYwxKCiIWrVq0blzZ0aPHs22bdsKzRXl4uJCUFCQzePiIn4JCQk8/fTTPP3008yfP5+bbrqJ0NBQWrRowVNPPcWOHTvK81aLIizZc4rb3t/IwcQMfFx1fP1AO166vakkQkIIu6kxNUM1haqqqLm5VX5dxdm5zEsSPPvss6xfv54lS5YQEBDA888/z65du2jVqlWJx7300ku89tprvPvuuzg4OLBx40ZGjhzJ+++/T7du3YiLi7M2rU2fPh2LxUL//v3JzMzku+++o2HDhhw8eBCtVkvnzp159913mTZtGjExMQClzgy+aNEi7rnnHl566SUmTZpUYtnk5GQWLVqEVqtFqy37l+yvv/6K0WjkueeeK3K/LPtw9XLzC5rFFu4omK6iQ30f3r87ikCPqlvlXgghiiLJUAVTc3OJad2myq8bsWsnymVNPcXJysriyy+/5LvvvqN3794AzJ8/nzp16pR67D333MMDDzxgff3ggw8yefJk7r//fqBgGoSXX36Z5557junTp7Nq1Sq2bdtGdHQ0jRo1spa5yNPT01qbU5a4hw4dyvPPP19sIpSeno6bmxuqqlr7jo0bNw5XV9uOuB9//DFz58612fbZZ58xYsQIDh8+jIeHh01Mv/76q/UeoWBG9ObNm5cas7gk9kwmT3y/i8NnslAUePKmcMbdFCZ9g4QQ1YIkQzeYuLg48vPzbaYk8PHxISIiotRjL18OBWDv3r1s2rTJ2mQGYDabycvLIycnhz179lCnTh1rInQtnJ2d6dq1K1988QV33313kSvAu7u7s2vXLoxGI3/++ScLFiywie2iESNG8MILL9hsCwwMtD6/svanb9++7Nmzh1OnTtGzZ0/MZvM138+NZOne00z65T9yjWb83fW8N6wVncP87B2WEEJYSTJUwRRnZyJ2VX0HW8XZudKvcWUNS1ZWFjNmzOCOO+4oVNbJyQnnCoxJq9WyePFi7rjjDnr16sXatWsLJUQajYawsDCgYDqGuLg4HnvsMb799lubcp6entZyVwoPDyc9PZ2kpCRr7ZCbmxthYWE4OMivS3mYzBZeX3GILzbGA9AlzJd3h0Xh7y6Tmgohqhepo65giqKgcXGp8kdZ+7I0bNgQR0dHmxFWqampHD58uNz32rp1a2JiYggLCyv00Gg0tGjRgpMnTxZ7bp1OV65aFr1ez2+//Ua7du3o1asXBw8eLLH85MmTWbhwIbt27SrzNf73v//h6OjI66+/XuZjRGHnswzc9+U2ayL0WM+GfPNgB0mEhBDVkvype4Nxc3Nj9OjRPPvss/j6+hIQEMALL7xgMyqrrKZNm8Ztt91G3bp1+d///odGo2Hv3r3s37+fV155hR49etC9e3fuvPNO3n77bcLCwjh06BCKotCvXz/q1atHVlYWq1evpmXLlri4uNgMcS+KXq/n119/ZejQofTq1Ys1a9bQtGnTIsuGhIQwZMgQpk2bxrJly6zbc3JyCi3wq9fr8fb2pm7durz11ls89dRTpKSkMGrUKOrXr09KSgrfffcdQLk6ZN+I/juZxqPf7uR0eh4uOi1vDW1J/+a17B2WEEIUS2qGbkBvvvkm3bp1Y+DAgfTp04euXbtalzkpj759+7Js2TL+/vtv2rVrR8eOHXnnnXcIDQ21lvn1119p164dd999N02aNOG5556z1gZ17tyZRx99lGHDhuHv788bb7xRpuvqdDp++eUXOnfuTK9evdi/f3+xZcePH88ff/xhMzP5F198Qa1atWwed999t3X/k08+yd9//83Zs2f53//+R3h4OAMGDCA+Pp4VK1ZI5+kS/Lk/kf99uoXT6XnU93NlyRNdJBESQlR7ilrUTIXCKiMjA09PT9LT061z0VyUl5dHfHw89evXx8lJhgeLG1dubi57o2OZ8OdpTmWa6RMZyNvDWuLhZJ+JOYUQoqTv7ytJM5kQ4pqYLSqn03LJzCuYbPOp3uE81Tscjaw0L4SoISQZEkJctXyThWPns8k1mFAUeOHWJgxoVdfeYQkhRLlIMiSEuCo5+SaOnc/BZLag1Wjwd9MTER5g77CEEKLcJBkSQpRbek4+J1JzsagqTo5aglwdOZUt4zGEEDWTJENCiHI5m2kgMb1g/T13J0fq+jhjzM+3c1RCCHH1JBkSQpSJqqokZeRxNtMAgJ+bnlqeTiiKgtHOsQkhxLWQZEgIUSqLqnIqNZfUnIIaoCBPJ/zd9GWe+VwIIaozSYaEECUyW1SOn88my2BCQaGOtzPerjp7hyWEEBVGkiEhRLGM5gtD5/PNaBSFur4uMpGiEOK6I8M/RLnVq1ePd999164xrFu3DkVRSEtLK/Mxo0aNYvDgwZUWU0WaN28eXl5edo0h32Tm6NkscvPNOGg0NPB3lURICHFdkmSoGrBYVE7FpHJ4exKnYlKxWK6/FVKOHTuGoijs2bOnQs7XuXNnEhMT8fT0LPMx7733HvPmzauQ61e2YcOGcfjw4XId07NnT55++ukKub7BaCbubDYGkwWdg4aG/q646KQiWQhxfZJPNzuL253MxoWxZKcZrNtcvfR0GxZOw6gbbwK7/Px8dLrS+6PodDqCgoLKde7yJE725uzsjLOzs12unWc0c/RsNiaLBb2DlgZ+rjg6yN9NQojrl3zC2VHc7mRWfLbfJhECyE4zsOKz/cTtTq6U6/7yyy80b94cZ2dnfH196dOnD9nZ2UDRtQuDBw9m1KhRNtsyMzO5++67cXV1pXbt2nz00UclXrN+/foAREVFoSgKPXv2BC41Xb366qsEBwcTEREBwLfffkvbtm1xd3cnKCiIe+65h+TkS+/Hlc1kF5uV/vrrLyIjI3Fzc6Nfv34kJiZaj7mymaxnz56MGzeO5557Dh8fH4KCgnjppZds4j506BBdu3bFycmJJk2asGrVKhRFYfHixcXea8+ePRk7dixjx47F09MTPz8/pk6dyuVrIqempjJy5Ei8vb1xcXGhf//+xMbGWvdf2Uz20ksv0apVK7799lvq1auHp6cnw4cPJzMz03pv69ev57333kNRFBRF4dixY6SmpjJixAj8/f1xdnYmPDycr7/+utjYc/JNxJ3NwmSx4OSopYG/JEJCiOuffMrZicWisnFhbIll/vkptsKbzBITE7n77rt58MEHiY6OZt26ddxxxx02X9Rl8eabb9KyZUt2797N5MmTeeqpp1i5cmWx5bdt2wbAqlWrSExM5LfffrPuW716NTExMaxcuZJly5YBYDQaefnll9m7dy+LFy/m2LFjhRKyK+Xk5DBnzhy+/fZbNmzYQEJCAhMnTizxmPnz5+Pq6srWrVt54403mDlzpvU+zGYzgwcPxsXFha1bt/L555/zwgsvlOXtYf78+Tg4OLBt2zbee+893n77bebOnWvdP2rUKHbs2MHSpUvZsmULqqoyYMAAjMbiZ+yJi4tj8eLFLFu2jGXLlrF+/Xpee+01oKAJsFOnTowZM4bExEQSExMJCQlh6tSpHDx4kD///JPo6Gg++eQT/Pz8ijx/tsFE/NlszBYVF51DQY2QVj4ihBDXP2kms5PE2LRCNUJXyko1kBibRu0I74q7bmIiJpOJO+64g9DQUACaN29e7vN06dKFyZMnA9CoUSM2bdrEO++8w80331xkeX9/fwB8fX0LNW+5uroyd+5cm+axBx980Pq8QYMGvP/++7Rr146srCzc3NyKvIbRaOTTTz+lYcOGAIwdO5aZM2eWeB8tWrRg+vTpAISHh/Phhx+yevVqbr75ZlauXElcXBzr1q2zxvzqq68We4+XCwkJ4Z133kFRFCIiIti3bx/vvPMOY8aMITY2lqVLl7Jp0yY6d+4MwIIFCwgJCWHx4sUMHTq0yHNaLBbmzZuHu7s7APfddx+rV6/m1VdfxdPTE51Oh4uLi837m5CQQFRUFG3btgUKOr8XJSvPyLHzOVhUFVe9A/V8XdHKqvNCiBuE/NlnJ9kZJSdC5S1XVi1btqR37940b96coUOH8sUXX5Camlru83Tq1KnQ6+joaAAeffRR3NzcrI/SNG/evFA/oZ07dzJw4EDq1q2Lu7s7PXr0AAq+3Ivj4uJiTYQAatWqZdO0VpQWLVrYvL78mJiYGEJCQmySi/bt25d6PwAdO3a0mZCwU6dOxMbGYjabiY6OxsHBgQ4dOlj3+/r6EhERYX0Pi1KvXj1rIlTW+3vsscf48ccfadWqFc899xybN28uVCYzz0j8hUTI3cmR+pIICSFuMJIM2Ymrh75Cy5WVVqtl5cqV/PnnnzRp0oQPPviAiIgI4uPjAdBoNIWazEpquinKzJkz2bNnj/VRGldXV5vX2dnZ9O3bFw8PDxYsWMD27dtZtGgRUNDBujiOjrbDvhVFKbX5r6hjLBZLqTHbw9XE2r9/f44fP8748eM5ffo0vXv3tmk6zMozcvx8Dqqq4uHkSKivCxpJhIQQNxhJhuykVrgXrl4lJzpu3npqhXtV+LUVRaFLly7MmDGD3bt3o9PprMmGv7+/Tadjs9nM/v37C53j33//LfQ6MjISgICAAMLCwqwPwFrzYzabS43v0KFDnD9/ntdee41u3brRuHHjUmtAKkNERAQnTpzgzJkz1m3bt28v07Fbt261ef3vv/8SHh6OVqslMjISk8lkU+b8+fPExMTQpEmTq45Xp9MV+f76+/tz//3389133/Huu+/y+eefA7ZNYx5OjtT1dUEjy2sIIW5AkgzZiUaj0G1YeIllut4VXuF/pW/dupVZs2axY8cOEhIS+O233zh79qw1kbnpppv4448/+OOPPzh06BCPPfZYkRMbbtq0iTfeeIPDhw/z0Ucf8fPPP/PUU08Ve92AgACcnZ1ZsWIFZ86cIT09vdiydevWRafT8cEHH3D06FGWLl3Kyy+/fM33Xl4333wzDRs25P777+e///5j06ZNvPjiiwClrsmVkJDAM888Q0xMDD/88AMffPCB9f0JDw9n0KBBjBkzhn/++Ye9e/dy7733Urt2bQYNGnTV8darV4+tW7dy7Ngxzp07h8ViYdq0aSxZsoQjR45w4MABli1bRmRkJFkGkzURcpdESAhxg5NkyI4aRgXQ75FmhWqI3Lz19HukWaXMM+Th4cGGDRsYMGAAjRo14sUXX+Stt96if//+QEHH5fvvv5+RI0fSo0cPGjRoQK9evQqdZ8KECezYsYOoqCheeeUV3n77bfr27VvsdR0cHHj//ff57LPPCA4OLvFL39/fn3nz5vHzzz/TpEkTXnvtNebMmXPtN19OWq2WxYsXk5WVRbt27XjooYeso8mcnJxKPHbkyJHk5ubSvn17nnjiCZ566ikefvhh6/6vv/6aNm3acNttt9GpUydUVWX58uWFmsLKY+LEiWi1Wpo0aYK/vz8JCQnodDqmTJlCixYt6N69O1qtlq/mf8exc9nWRCjURxIhIcSNTVHLO6b6BpORkYGnpyfp6el4eHjY7MvLyyM+Pp769euX+uVYEotFLRhdlmHA1aOgaUz6bVRPmzZtomvXrhw5csSms/blevbsSatWrey+ZElRsg0m4i8kQm4XRo1VxP9rFfW7IIQQFaWk7+8rydD6akCjUSp0+LyoOIsWLcLNzY3w8HCOHDnCU089RZcuXYpNhKqz3HyTtUaoIhMhIYSo6SQZEqIEmZmZTJo0iYSEBPz8/OjTpw9vvfWWvcMqtzyjmfhzOZgvzCMUKomQEEJYSTIkRAlGjhzJyJEjy3XMunXrKieYq5RvshB/rmCtMWdHLfV8XWQeISGEuIx0oBbiOmY0FyRCRnPBoqv1/VzRauTXXgghLiefikJcp8wWC8fOZWMwmdFpNdT3c8VB1hoTQohC5JNRiOuQxaJy7HwOuUYzDpqCREgnq88LIUSR5NNRiOuMqqokpOSQbTChVRTq+7mgd9TaOywhhKi2JBkS4jqiqiqn0nLJyDOiURTq+bnirJNxEkIIURJJhoS4jiRnGkjJzkcB6vq44KqXREgIIUojyZC4KvXq1bOZYVlRFBYvXlxs+WPHjqEoSplWsS9JRZ2nKqxbtw5FUYpc260ypGbncyYjD4BgL2c8nK9+aQ8hhLiRyJ+N1YDFYuZU9AGy0lJx8/KmdmRTNJqa1ccjMTERb++KnUV71KhRpKWl2SRZISEhJCYm4ufnV6HXqgydO3cmMTERT0/PMh9T1D2XRWaekZOpuQD4u+vxddOXcoQQQoiLJBmys9itm1kz73OyUs5Zt7n5+HHTqIcJ79DZjpGVT1BQUJVcR6vVVtm1rpVOp6uSWHPzzSScz0FFxctZR5CHrA0mhBDlIc1kdhS7dTNL355lkwgBZKWcY+nbs4jdurnCr/n5558THByMxWKx2T5o0CAefPBBAOLi4hg0aBCBgYG4ubnRrl07Vq1aVeJ5r2wm27ZtG1FRUTg5OdG2bVt2795tU95sNjN69Gjq16+Ps7MzERERvPfee9b9L730EvPnz2fJkiUoioKiKKxbt67IZrL169fTvn179Ho9tWrVYvLkyZhMJuv+nj17Mm7cOJ577jl8fHwICgripZdeKvF+Ro0axeDBg5kxYwb+/v54eHjw6KOPkp+fby1jMBgYN24cAQEBODk50bVrV7Zv327df2Uz2bx58/Dy8uKvv/4iMjISNzc3+vXrR2JiYon3nJ+fz9ixY6lVqxZOTk6EhoYye/ZsoGB26WPns63LbNTxcUaRFeiFEKJcJBmyE4vFzJp5n5dYZu38z7FYzBV63aFDh3L+/HnWrl1r3ZaSksKKFSsYMWIEAFlZWQwYMIDVq1eze/du+vXrx8CBA0lISCjTNbKysrjtttto0qQJO3fu5KWXXmLixIk2ZSwWC3Xq1OHnn3/m4MGDTJs2jeeff56ffvoJgIkTJ3LXXXdZk4XExEQ6dy5cU3bq1CkGDBhAu3bt2Lt3L5988glffvklr7zyik25+fPn4+rqytatW3njjTeYOXMmK1euLPE+Vq9eTXR0NOvWreOHH37gt99+Y8aMGdb9zz33HL/++ivz589n165dhIWF0bdvX1JSUoo9Z05ODnPmzOHbb79lw4YNJCQkWN+b4u75/fffZ+nSpfz000/ExMSwYMEC6tWrVzCp4vmC2aWdHLSE+rqgkURICCHKrcYkQykpKYwYMQIPDw+8vLwYPXo0WVlZJR6TlJTEfffdR1BQEK6urrRu3Zpff/21iiIu2anoA4VqhK6Uef4cp6IPVOh1vb296d+/P99//7112y+//IKfnx+9evUCoGXLljzyyCM0a9aM8PBwXn75ZRo2bMjSpUvLdI3vv/8ei8XCl19+SdOmTbntttt49tlnbco4OjoyY8YM2rZtS/369RkxYgQPPPCANRlyc3PD2dkZvV5PUFAQQUFB6HS6Qtf6+OOPCQkJ4cMPP6Rx48bW2py33nrLpvarRYsWTJ8+nfDwcEaOHEnbtm1ZvXp1ifeh0+n46quvaNq0KbfeeiszZ87k/fffx2KxkJ2dzSeffMKbb75J//79adKkCV988QXOzs58+eWXxZ7TaDTy6aef0rZtW1q3bs3YsWOtcRR3zwkJCYSHh9O1a1dCQ0Pp2rUrw4cPJyEllzyjGUethnp+rjjIMhtCCHFVasyn54gRIzhw4AArV65k2bJlbNiwgYcffrjEY0aOHElMTAxLly5l37593HHHHdx1112FmmzsISsttULLlceIESP49ddfMRgMACxYsIDhw4ejufBlmpWVxcSJE4mMjMTLyws3Nzeio6PLXDMUHR1NixYtcHK61HelU6dOhcp99NFHtGnTBn9/f9zc3Pj888/LfI3Lr9WpUyebpqEuXbqQlZXFyZMnrdtatGhhc1ytWrVITk4u8dwtW7bExcXF5h6ysrI4ceIEcXFxGI1GunTpYt3v6OhI+/btiY6OLvacLi4uNGzYsFxxjBo1ij179hAREcG4ceP4+++/SUrPI/PCXEKhvi4yu7QQQlyDGvEJGh0dzYoVK5g7dy4dOnSga9eufPDBB/z444+cPn262OM2b97Mk08+Sfv27WnQoAEvvvgiXl5e7Ny5s9hjDAYDGRkZNo/K4OZVtpFXZS1XHgMHDkRVVf744w9OnDjBxo0brU1kUNBcs2jRImbNmsXGjRvZs2cPzZs3t+kvc61+/PFHJk6cyOjRo/n777/Zs2cPDzzwQIVe43KOjrbDzBVFKdRvqioUFYeqqiUe07p1a+Lj43n55ZfJzc1l6F13MXLEcADqeDvjIpMqCiHENakRydCWLVvw8vKibdu21m19+vRBo9GwdevWYo/r3LkzCxcuJCUlBYvFwo8//kheXh49e/Ys9pjZs2fj6elpfYSEhFTkrVjVjmyKm0/Jw8Pdff2oHdm0wq/t5OTEHXfcwYIFC/jhhx+IiIigdevW1v2bNm1i1KhRDBkyhObNmxMUFMSxY8fKfP7IyEj+++8/8vLyrNv+/fdfmzKbNm2ic+fOPP7440RFRREWFkZcXJxNGZ1Oh9lccp+pyMhItmzZYpNQbNq0CXd3d+rUqVPmmIuyd+9ecnNzbe7Bzc2NkJAQGjZsiE6nY9OmTdb9RqOR7du306RJk6u+ZnH37OHhwbBhw3jnw094/aOvWLV8KTpTDl4uhZsOhRBClE+NSIaSkpIICAiw2ebg4ICPjw9JSUnFHvfTTz9hNBrx9fVFr9fzyCOPsGjRIsLCwoo9ZsqUKaSnp1sfJ06cqLD7uJxGo+WmUSU38/W6/+FKm29oxIgR/PHHH3z11Vc2tUIA4eHh/Pbbb+zZs4e9e/dyzz33lKsW5Z577kFRFMaMGcPBgwdZvnw5c+bMKXSNHTt28Ndff3H48GGmTp1qMxILCiZ2/O+//4iJieHcuXMYjcZC13r88cc5ceIETz75JIcOHWLJkiVMnz6dZ555xtrsd7Xy8/MZPXq09R6mT5/O2LFj0Wg0uLq68thjj/Hss8+yYsUKDh48yJgxY8jJyWH06NFXfc2i7vntt9/mhx9+4L/9B9iw7T/+XrYY/4BAwkMCr+n+hBBCFLBrMjR58mTrEOLiHocOHbrq80+dOpW0tDRWrVrFjh07eOaZZ7jrrrvYt29fscfo9Xo8PDxsHpUlvENnbn/m+UI1RO6+ftz+zPOVOs/QTTfdhI+PDzExMdxzzz02+95++228vb3p3LkzAwcOpG/fvjY1R6Vxc3Pj999/Z9++fURFRfHCCy/w+uuv25R55JFHuOOOOxg2bBgdOnTg/PnzPP744zZlxowZQ0REBG3btsXf39+mFuai2rVrs3z5crZt20bLli159NFHGT16NC+++GI53o2i9e7dm/DwcLp3786wYcO4/fbbbYbkv/baa9x5553cd999tG7dmiNHjvDXX39d0+STRd2zu7s7b7zxBp06dGDYrT1JOnWCP5cvR6utWRNzCiFEdaWopXVYqERnz57l/PnzJZZp0KAB3333HRMmTCA19VJnYpPJhJOTEz///DNDhgwpdFxcXBxhYWHs37+fpk0vNTX16dOHsLAwPv300zLFmJGRgaenJ+np6YUSo7y8POLj46lfv75NZ+Hyuh5moL7eXO1M0JVBVVWOn88hI8+Io1ZDQ3+3atdhuqJ+F4QQoqKU9P19pXL3vIyPj2fjxo0cP36cnJwc/P39iYqKolOnTuX+EPT398ff37/Ucp06dSItLY2dO3fSpk0bANasWYPFYqFDhw5FHpOTkwNQqKlEq9XapeNsSTQaLSFNW5ReUNyQzmQYrKvQy8gxIYSoeGVOhhYsWMB7773Hjh07CAwMJDg4GGdnZ1JSUoiLi8PJyYkRI0YwadIkQkNDKzTIyMhI+vXrx5gxY/j0008xGo2MHTuW4cOHExwcDBRMvte7d2+++eYb2rdvT+PGjQkLC+ORRx5hzpw5+Pr6snjxYuvQfCFqgvRcI8mZBR3Ra8vIMSGEqBRl+mSNiopCp9MxatQofv3110IjrAwGA1u2bOHHH3+kbdu2fPzxxwwdOrRCA12wYAFjx46ld+/eaDQa7rzzTt5//33rfqPRSExMjLVGyNHRkeXLlzN58mQGDhxIVlYWYWFhzJ8/nwEDBlRobOL6M2/ePHuHQJ7RzMmUgv+f/dz0eMvIMSGEqBRl6jP0119/0bdv3zKd8Pz58xw7dszanFXTVUWfISGuZLaoxCVnkWcy46pzoL6/a7VeakN+F4QQ1U2F9xkqayIE4Ovri6+vb5nLXw/s2AddXIdUVeVkag55poKlNurWgDXH5HdACFGTXVVPzLi4OF588UXuvvtu61ICf/75JwcOVOw6WtXdxdmELzbNCVERzmYZSM81oigKdX1ccNRW/w7TlzdPCyFETVPu3pjr16+nf//+dOnShQ0bNvDqq68SEBDA3r17+fLLL/nll18qI85qSavV4uXlZU0IXVxcbNbIEqK8sg1GklJzUQF/dye0qom8PJO9wyqWqqrk5OSQnJyMl5eXzH0khKiRyp0MTZ48mVdeeYVnnnkGd3d36/abbrqJDz/8sEKDqwmCgoIASl1sU4jSmC0qyRl5mFVw1WlJy9WRZu+gysjLy8v6uyCEEDVNuZOhffv28f333xfaHhAQwLlz5yokqJpEURRq1apFQEBAkctFCFEWRrOFZxbu4WBiBuGBbrw3LAq9Y82oZXF0dJQaISFEjVbuZMjLy4vExETq169vs3337t3Url27wgKrabRarXwhiKv2zvJoVh5Oxd3JgZlDWuPp7mLvkIQQ4oZR7p6Zw4cPZ9KkSSQlJaEoChaLhU2bNjFx4kRGjhxZGTEKcV1bHX2GzzYcBeDN/7Wgrq8kQkIIUZXKnQzNmjWLxo0bExISQlZWFk2aNKF79+507ty5QhbHFOJGciotl2d+2gvAqM716Neslp0jEkKIG89VL9SakJDA/v37ycrKIioqivDw8IqOrVooz6RNQpRHvsnCsM+3sDshjZZ1PPn50c6y7pgQQlSQSl2o9aKgoCByc3Np2LAhDg6yXpIQ5fXmX4fYnZCGu5MDH97TWhIhIYSwk3J/+ubk5DB69GhcXFxo2rQpCQkJADz55JO89tprFR6gENejlQfP8MXGeADe/F9LQnykn5AQQthLuZOhKVOmsHfvXtatW2ezBlGfPn1YuHBhhQYnxPXoVFouE38u6Cf0YJf69Gsm8/MIIYQ9lbt9a/HixSxcuJCOHTvazLbctGlT4uLiKjQ4Ia43ZovK+B/3kJ5rpGUdTyb3b2zvkIQQ4oZX7pqhs2fPEhAQUGh7dna2LEUhRCk+WXeEbcdScNVpef/uKOknJIQQ1UC5P4nbtm3LH3/8YX19MQGaO3cunTp1qrjIhLjO7EpI5Z1VsQDMHNSMUF9XO0ckhBACrqKZbNasWfTv35+DBw9iMpl47733OHjwIJs3b2b9+vWVEaMQNV5mnpGnf9yD2aIysGUwd7S+cWdrF0KI6qbcNUNdu3Zl7969mEwmmjdvzt9//01AQABbtmyhTZs2lRGjEDXe9CUHSEjJobaXM68MbiZNykIIUY2Uq2bIaDTyyCOPMHXqVL744ovKikmI68qSPaf4bfcpNAq8N7wVns6O9g5JCCHEZcpVM+To6Mivv/5aWbEIcd05kZLDi4v2A/DkTeG0redj54iEEEJcqdzNZIMHD2bx4sWVEIoQ1xeT2cLTC/eQaTDRJtSbJ28Ks3dIQgghilDuDtTh4eHMnDmTTZs20aZNG1xdbUfEjBs3rsKCE6Im+3R9HDuPp+Kud+DdYa1w0MoweiGEqI7KvVBr/fr1iz+ZonD06NFrDqo6kYVaxdXYfyqdwR9twmRReWtoS+5sU8feIQkhxA2lUhdqjY+Pv+rAhLgR5BnNTPhpLyaLSt+mgTKMXgghqrly19vPnDmTnJycQttzc3OZOXNmhQQlRE32zsrDxJzJxM9Nx6whzWUYvRBCVHPlbibTarUkJiYWWpLj/PnzBAQEYDabKzRAe5NmMlEe24+lcNdnW1BV+Py+NtzSVBZhFUIIeyjP93e5a4ZUVS3yL929e/fi4yPDhsWNK9tgYsJPe1FV+F+bOpIICSFEDVHmPkPe3t4oioKiKDRq1MgmITKbzWRlZfHoo49WSpBC1ASvLo+2zjI9bWATe4cjhBCijMqcDL377ruoqsqDDz7IjBkz8PT0tO7T6XTUq1dPFmoVN6y1Mcl8vzUBgDeHtsDDSWaZFkKImqLMydD999+PyWRCURRuuukmQkJCKjMuIWqMtJx8Jv3yHwAPdKlH54Z+do5ICCFEeZSrz5CDgwOPPfYYFoulsuIRosaZuewgyZkGGvi7MqlfY3uHI4QQopzK3YG6ffv27N69uzJiEaLGWXsomd92nUJRYM7Qljg5au0dkhBCiHIq96SLjz/+OBMmTODkyZNFLsfRokWLCgtOiOosI8/I84v2ATC6S31a1/W2c0RCCCGuRrnnGdJoClcmKYpiHXIv8wyJG8WU3/7jh20nCPV1YcVT3XHWSa2QEEJUF7IchxCV7J/Yc/yw7QQAr9/ZQhIhIYSowcqdDIWGhlZGHELUGNkGE5N/Kxg9dl/HUDo28LVzREIIIa5FuZOhiw4ePEhCQgL5+fk222+//fZrDkqI6uzNv2I4mZpLbS9nJvWX0WNCCFHTlTsZOnr0KEOGDGHfvn3WvkKAdUbq663PkBCX2xafwrzNxwB47c7muOmv+u8JIYQQ1US5h9Y/9dRT1K9fn+TkZFxcXDhw4AAbNmygbdu2rFu3rhJCFKJ6yM0389wvewEY1jaEbuH+do5ICCFERSj3n7VbtmxhzZo1+Pn5odFo0Gg0dO3aldmzZzNu3DiZg0hct95ZdZhj53MI9NDz/K2R9g5HCCFEBSl3zZDZbMbd3R0APz8/Tp8+DRR0rI6JianY6ISoJvaeSGPuxqMAzBrSHE9nWXtMCCGuF+WuGWrWrBl79+6lfv36dOjQgTfeeAOdTsfnn39OgwYNKiNGIezKaLYw+bd9WFQY1CqY3pGB9g5JCCFEBSp3MvTiiy+SnZ0NwMyZM7ntttvo1q0bvr6+LFy4sMIDFMLevvonnujEDLxcHJl6WxN7hyOEEKKClTsZ6tu3r/V5WFgYhw4dIiUlBW9vb+uIMiGuFydScnhn1WEAnh8QiZ+b3s4RCSGEqGjl7jNUFB8fn0pPhFJSUhgxYgQeHh54eXkxevRosrKySjwmLi6OIUOG4O/vj4eHB3fddRdnzpyp1DjF9UNVVV5YvJ88o4WODXwY2qaOvUMSQghRCcqdDGVnZzN16lQ6d+5MWFgYDRo0sHlUlhEjRnDgwAFWrlzJsmXL2LBhAw8//HCJcd5yyy0oisKaNWvYtGkT+fn5DBw4EIvFUmlxiuvH0r2n2XD4LDqthleHNJeaTyGEuE6Vu5nsoYceYv369dx3333UqlWrSr4goqOjWbFiBdu3b6dt27YAfPDBBwwYMIA5c+YQHBxc6JhNmzZx7Ngxdu/ebV2gbf78+Xh7e7NmzRr69OlT6XGLmistJ5+Xlx0E4IleYTT0d7NzREIIISpLuZOhP//8kz/++IMuXbpURjxF2rJlC15eXtZECKBPnz5oNBq2bt3KkCFDCh1jMBhQFAW9/lIfDycnJzQaDf/880+xyZDBYMBgMFhfZ2RkVOCdiJpi9vJDnMvKJyzAjUd7yihJIYS4npW7mczb2xsfH5/KiKVYSUlJBAQE2GxzcHDAx8eHpKSkIo/p2LEjrq6uTJo0iZycHLKzs5k4cSJms5nExMRirzV79mw8PT2tj5CQkAq9F1H9bT16noU7Clakn31Hc/QOsiK9EEJcz8qdDL388stMmzaNnJyca7745MmTURSlxMehQ4eu6tz+/v78/PPP/P7777i5ueHp6UlaWhqtW7dGoyn+tqdMmUJ6err1ceLEiau9PVEDGUxmpizaB8Dd7UNoV69qE38hhBBVr0zNZFFRUTZ9g44cOUJgYCD16tXD0dF2Jt5du3aV+eITJkxg1KhRJZZp0KABQUFBJCcn22w3mUykpKQQFBRU7LG33HILcXFxnDt3DgcHB7y8vAgKCiqxo7der7dpWhM3lk/WxXH0bDZ+bnom95MlN4QQ4kZQpmRo8ODBlXJxf39//P1LX+yyU6dOpKWlsXPnTtq0aQPAmjVrsFgsdOjQodTj/fz8rMckJydz++23X1vg4roUdzaLj9fGATB9YBM8XWTJDSGEuBGUKRmaPn16ZcdRosjISPr168eYMWP49NNPMRqNjB07luHDh1tHkp06dYrevXvzzTff0L59ewC+/vprIiMj8ff3Z8uWLTz11FOMHz+eiIgIe96OqIZUVWXakv3kmy30jPDntha17B2SEEKIKlKmZEhVVbvPsbJgwQLGjh1L79690Wg03Hnnnbz//vvW/UajkZiYGJu+TDExMUyZMoWUlBTq1avHCy+8wPjx4+0Rvqjmlv2XyKYj59E5aJhxe1O7//8uhBCi6iiqqqqlFWrSpAnTpk3jjjvuQKfTFVsuNjaWt99+m9DQUCZPnlyhgdpLRkYGnp6epKenW+crEteXzDwjvd9aT3Kmgaf7hPN0n0b2DkkIIcQ1Ks/3d5lqhj744AMmTZrE448/zs0330zbtm0JDg7GycmJ1NRUDh48yD///MOBAwcYO3Ysjz32WIXciBBV4d1VsSRnGgj1deHRHg3tHY4QQogqVqZkqHfv3uzYsYN//vmHhQsXsmDBAo4fP05ubi5+fn5ERUUxcuRIRowYgbe3d2XHLESFOZSUwbzNxwCYcXtTnBxlTiEhhLjRlGsG6q5du9K1a9fKikWIKmWxqLy4aD9mi0r/ZkH0jAgo/SAhhBDXnQpZtV6ImujXXSfZcTwVF52Wqbc1sXc4Qggh7ESSIXFDSs8x8tqfBbObj+sdTrCXs50jEkIIYS+SDIkb0pt/H+J8dj7hAW482KW+vcMRQghhR5IMiRvOfyfTWLA1AYCZg5qhc5BfAyGEuJHJt4C4oZgtKi8u3o+qwpCo2nRq6GvvkIQQQthZuZOhHj168M0335Cbm1sZ8QhRqX7YlsB/J9Nx1zswZUBje4cjhBCiGih3MhQVFcXEiRMJCgpizJgx/Pvvv5URlxAV7nyWgTf/igFgYt8IAtyd7ByREEKI6qDcydC7777L6dOn+frrr0lOTqZ79+40adKEOXPmcObMmcqIUYgKMefvw6TnGmlSy4N7O4baOxwhhBDVxFX1GXJwcOCOO+5gyZIlnDx5knvuuYepU6cSEhLC4MGDWbNmTUXHKcQ12X8qnR+3F3SanjGoKVqNLMQqhBCiwDV1oN62bRvTp0/nrbfeIiAggClTpuDn58dtt93GxIkTKypGIa6JqqrM+P0Aqgq3twymXT0fe4ckhBCiGinXchwAycnJfPvtt3z99dfExsYycOBAfvjhB/r27YuiFPy1PWrUKPr168ecOXMqPGAhymvZf4lsP5aKs6NWOk0LIYQopNzJUJ06dWjYsCEPPvggo0aNwt/fv1CZFi1a0K5duwoJUIhrkZtvZvbyaAAe69mQWp4y07QQQghb5U6GVq9eTbdu3Uos4+Hhwdq1a686KCEqyifr4zidnkcdb2ce7t7A3uEIIYSohsrdZ6i0REiI6uJkag6frY8D4IUBkTg5au0ckRBCiOqo3DVDUVFR1r5Bl1MUBScnJ8LCwhg1ahS9evWqkACFuFqzlx/CYLLQsYEP/ZoF2TscIYQQ1VS5a4b69evH0aNHcXV1pVevXvTq1Qs3Nzfi4uJo164diYmJ9OnThyVLllRGvEKUyZa48/yxLxGNAtMHNi0ygRdCCCHgKmqGzp07x4QJE5g6darN9ldeeYXjx4/z999/M336dF5++WUGDRpUYYEKUVZmS8FQeoARHUKJrOVh54iEEEJUZ+WuGfrpp5+4++67C20fPnw4P/30EwB33303MTEx1x6dEFfhh20JHErKxNPZkWdubmTvcIQQQlRz5U6GnJyc2Lx5c6HtmzdvxsmpYK0ni8VifS5EVUrPMfLW3wWJ+DM3N8LbVWfniIQQQlR35W4me/LJJ3n00UfZuXOndS6h7du3M3fuXJ5//nkA/vrrL1q1alWhgQpRFu+sOkxqjpFGgW6M6FDX3uEIIYSoARRVVdXyHrRgwQI+/PBDa1NYREQETz75JPfccw8Aubm51tFlNV1GRgaenp6kp6fj4SF9T6qzw2cy6f/eRswWlQUPdaBLmJ+9QxJCCGEn5fn+LlfNkMlkYtasWTz44IOMGDGi2HLOzjLLr6haqqoy8/eDmC0qfZsGSiIkhBCizMrVZ8jBwYE33ngDk8lUWfEIcVX+PniGf46cQ+eg4YUBTewdjhBCiBqk3B2oe/fuzfr16ysjFiGuSp7RzKt/FKw/NqZbfer6utg5IiGEEDVJuTtQ9+/fn8mTJ7Nv3z7atGmDq6urzf7bb7+9woIToiy+/CeehJQcAj30PN4zzN7hCCGEqGHK3YFaoym+MklRFMxm8zUHVZ1IB+rqLSk9j5veWkdOvpl3hrVkSFQde4ckhBCiGqi0DtRQMIeQENXFGysOkZNvpnVdLwa3qm3vcIQQQtRA5e4zdLm8vLyKikOIctuVkMpvu08B8NLtsv6YEEKIq1PuZMhsNvPyyy9Tu3Zt3NzcOHr0KABTp07lyy+/rPAAhSiKxaIyY2nB+mND29ShRR0v+wYkhBCixip3MvTqq68yb9483njjDXS6S0sdNGvWjLlz51ZocEIU59ddJ9l7Mh03vQPP9ouwdzhCCCFqsHInQ9988w2ff/45I0aMQKvVWre3bNmSQ4cOVWhwQhQlM8/I6ysKZj8f1zuMAPeaP9O5EEII+yl3MnTq1CnCwgoPX7ZYLBiNxgoJSoiSfLjmCOeyDNT3c2VU5/r2DkcIIUQNV+5kqEmTJmzcuLHQ9l9++YWoqKgKCUqI4sSfy+arTfEATL0tEp3DNY0BEEIIIco/tH7atGncf//9nDp1CovFwm+//UZMTAzffPMNy5Ytq4wYhbB6ZdlBjGaVnhH+3NQ40N7hCCGEuA6U+8/qQYMG8fvvv7Nq1SpcXV2ZNm0a0dHR/P7779x8882VEaMQAKyLSWb1oWQcNAov3irrjwkhhKgY5a4ZAujWrRsrV66s6FiEKJbRbGHmsoMAjOpcj7AANztHJIQQ4npxVckQQH5+PsnJyYVmpK5bt+41ByXEleZvPsbRs9n4uuoY1yfc3uEIIYS4jpQ7GYqNjeXBBx9k8+bNNttVVb0u1yYT9ncuy8B7q2IBeLZvBB5OjnaOSAghxPWk3MnQqFGjcHBwYNmyZdSqVUuWQBCV7q2/Y8g0mGhW24OhbUPsHY4Q4hpZLCqJsWlkZxhw9dBTK9wLjab6fJdU//jMnIo+QFZaKm5e3tSObIpGoy39wCpS3d+/opQ7GdqzZw87d+6kcePGlRGPEDb2n0rnx+0nAJg+sCnaav4LJW4M1f3DvjrHF7c7mY0LY8lOM1i3uXrp6TYsnIZRAXaMrEB1jy9262bWzPucrJRz1m1uPn7cNOphwjt0tmNkBar7+1ccRVVVtTwHtGvXjnfeeYeuXbtWVkxFevXVV/njjz/Ys2cPOp2OtLS0Uo9RVZXp06fzxRdfkJaWRpcuXfjkk08IDy97n5OMjAw8PT1JT0/Hw8PjGu5AlJeqqgz9dAs7jqdye8tg3r9b5rES9lfdP+yrc3xxu5NZ8dn+Yvf3e6SZXWOs7vHFbt3M0rdnFbv/9meet2tCVN3ev/J8f5d7aP3rr7/Oc889x7p16zh//jwZGRk2j8qSn5/P0KFDeeyxx8p8zBtvvMH777/Pp59+ytatW3F1daVv377k5eVVWpyi4vz+XyI7jqfi7KhlygCpibyRWCwqp2JSObw9iVMxqVgs5fqbrdJc/LC/PNEAyE4zsOKz/cTtTrZTZAWqc3wWi8rGhbEllvnnp1i7/VtX//jMrJn3eYll1s7/HIvFPv12y/L+rV8Yw+mM05zIPEF8ejyxqbFEn49m39l9JGUnVVGkRSt3zZBGU5A/XdlXqKo6UM+bN4+nn3661JohVVUJDg5mwoQJTJw4EYD09HQCAwOZN28ew4cPL9P1pGbIPnLyTfR+az2J6Xk8c3MjxvWWEWQ3iupSs6GqKiaLiTxzHnmmPHKNufw9Kx5DenGfcSpaNwv+9ydhsuRhNOVhMudjNBsKflryMZqNmFQzqsWMRbVgUc0XHhYsFgsWLKgWM2bVgkW1oGLBbCn4eam8emGfChc/vlUVVIjY/AiOBncUCjeJqagY9ZnEdvoEFAuoBVsB29KXfSUogHJZGUW9fLvtPi7sV6yvVWscCuCUFor/vpGlvu9pzb/F6HX8smvYxme7/cIVLo9LKeI49crjijhfWl3Yf1+p8Tk2+w6NV4LtuVTb85b2/PLXFsCiqqjAhX/Vgm1XPDed12L417nU+PI7ZmH2NVPwfw3W81753AyYVRUzasFzCp6brM/BdGGbxfqcK8pc2uafHkb/g2NLjW9pkw847Xmk0PYxAZ0Z1/+zUo8vj/J8f5e7z9DatWuvOrCqFB8fT1JSEn369LFu8/T0pEOHDmzZsqXYZMhgMGAwXPoQrszaLlG8T9fFkZieRx1vZx7u3sDe4YgqUlw1+8WajZKq2Q1mA5mGDLJyz5Odc47s3HNk5aaQnZdKliGd7PxMso3ZZJlyyDHlkmXKI8dswGAxkmcxkacaMahm8lQzeVjIU1Usl31rBqeHcXv6kyVEr2DO0vL52t+K/LCvbMHpYTQ3FP+Br6CgM3gQl+xil/jC8urSp/Ri7MizcMR0ttLjuVKYoU6Z4vvTYOaI+Uylx3Ol+nku9KD0ZGhLXi7xak4VRGTL0ehepnIeBndSLRYcVHBERauqOABueZmVG2Apyp0M9ejRozLiqHBJSQVVboGBtks2BAYGWvcVZfbs2cyYMaNSYxMlO5GSw2cbjgLwwoBInByrzygJUXlKr2ZX+XPeFs4f+oR0UzbpljzSLCbSMZOuWMir6JGtl51Oo6p4Gcr2Yd8my4kmDjk4oMFRUXBAwVHRFvxEg1YBLRoURUGjaNCgQaMoaBUNChe2KUrBds3F/YUfiqIBNKDRAArZ6Y1IKUN8I7VNcXF3LrhB5bJ6CuXCfxQADSqgKhcqnZTL6oCUgjoflQsVMpe95sI2VVEuPb+w3YQ/eSW3ogBwi28wfX21XN5koV6oJbE+VPVC7Kr19eXXunRt1frz4jbUC9sv3LZ64bXW4ld6cEBrbx+aeTW97HqX/nvxXLaxqLaxXNyhqKgqF/6tFRRFgwYFDQUtLwXPFetzB6MJKD1h6BMYiUOAk/U46/9XKGhQ0ZhBY1ZxtCg4mEFrBgeLivbiawtozSoOFhWNCTQXXmtNKhqLitasojGrKNafFjRmlZRcf7aV4f2bsscF37y6qCYzqtmCajKD2YzXoBZlev8ry1VNurhx40Y+++wzjh49ys8//0zt2rX59ttvqV+/frk6Vk+ePJnXX3+9xDLR0dFVOnJtypQpPPPMM9bXGRkZhITIcO6qNPvPaAwmCx0b+NCvWZC9wxEVwWyEzERy046TlBJLYvoxzmYlcjbvHOcNaZwzZmJIDSEireSaF8Xgzuazzpz2PFWwSXNpH4CiqriqKq4WC24quKLBTdHiqjjgqtHhpjjiqtXhptXjotXjonXG2cEJvYMzegdnnHWu6B1ccNK54aRzQ69zx8nRFUcHZ06fcmBxXOn9DZ+440NqN/a9prfrapyKSWXxwd2lluvZZwK1I7yrICJbFovKN9GbC/Vnupybt577Rs6yy8g3i0Xlm5jS43ts1NslxqeqKqrRiJpvRDXmX/Yz/8L2In4Ws89y2T6zIZ8lDjvIMRmLvbazCn0XnQejqfC5jEYwFn9seakUNLVd5IqCvmMHDHqvC4lqoTcGvSEVp50byLFJWwuYDLoKi+1qlDsZ+vXXX7nvvvsYMWIEu3btsjYppaenM2vWLJYvX17mc02YMIFRo0aVWKZBg6trIgkKKvgSPXPmDLVq1bJuP3PmDK1atSr2OL1ej16vv6primu3Oe4cy/cloVEKhtLLPFaVo8KHXhuyIDWerHOHSTh/kFNp8SRmJ5KYl0KiKYtETCQ5aEnRFlPLp4Ew1YOIMlxqkGMzPANr4+XkjZeTD57Ovni6+OPlGoSrqz8avQfo3C7UmFScWvVUXP8o/cuyViOfCr1uWdUK98LVS196fOFeVRfUZTQahW7DwkscbdT1rvBr+v9QNZsLvvwNBiyGfNR8w2WvDagXtlmfGwyXXucbaemuY3NanQtnuzyOC32yEv/k+N3vFyQ4BsOF469IZCow4bhSY09XdoVeaO24/LPxQnVT5PEz5Kdnl++kjo4oFx8ODkX+xPHi62LK6hzBwYEoYzL/nvOiIFW64v1ToH07R4IHz7rsPJfO4VinTtHxVZFyJ0OvvPIKn376KSNHjuTHH3+0bu/SpQuvvPJKuc7l7++Pv79/eUMok/r16xMUFMTq1autyU9GRgZbt24t14g0UXVMZgszfy9Yf2xEh1Aia0mH9cpw1R2UjbmQcpSc5IMcT97L8ZTDJGSd5nh+CicwctzRsXCyowW0GuDSX30uqkKwRkeA1hU/vSd+Tj74uQTi6t2IxDI0owy66Rm71GxUxZf5tahu8akWS0ESkpeHmpeHJS+P2k559LrZla2bssm5rFuLi95MVN0UPLf+RvL6PNTcPCyGiz8NqHl5F5KWfJskxJJ/6bUlP/+aaz6cgGZ+LYkNG4rB6dL/Y/q8VMKP/ILnub2UeyyyVoui0xU8HB1RdAWJgEanA0dHNI6X77vsZxHb/Bwd8Ug7x7bY/eTk5Vov4erqTqdOPWgY0aTkc12R+ODgUKF/cNYCvIr4fHHzdqLrXfaf2qEk5U6GYmJi6N69e6Htnp6eZZr752olJCSQkpJCQkICZrOZPXv2ABAWFoabW8GinY0bN2b27NkMGTIERVF4+umneeWVVwgPD6d+/fpMnTqV4OBgBg8eXGlxiqv3w/YTHErKxNPZkWdubmTvcK5LZeqg3NIXUuIxJu3l6OltHDl3gCNZJzhizibW0ZFTjpd9bGgAJy0FWU8BXxyo7ehGsJMvtVyDqeURSi3fCGr5RFDLozbuju5FfgBbLCrfbC5DzYudajYAGkYF0O+RZkV82OurxYd9WeNTTSYsublYcnKw5OSg5uZeeH1hW+7FbXlY8nJR8wzWn6ohr2C74bKk5bL9F5Mf1VD0v6MCdEAhzSsMg84DfX4GXmlHUFCp0G7TGg2KkxManQ5Fr0fR69HodSiOl14reh0a3WXP9Xp8dHoa605wzpSJQdXj7KIhwF9B6zQcjf7+grK6C+e6Mmm5MhFxdEQprjb0KvkDUdV4BuqGUQHUb+lfbSf9LE65k6GgoCCOHDlCvXr1bLb/888/V92kVRbTpk1j/vz51tdRUQUT8K1du5aePXsCBYlaenq6tcxzzz1HdnY2Dz/8MGlpaXTt2pUVK1bg5ORUaXGKq5Oanc9bf8cA8MzNjfB2tW/78fWoLB2U//r6H45FTOawTuG4oyOmi0mLHrhsJIuP4kBdRy/qugUT6hVG3cAW1PWNpK57Xdx0blcVX3Wr2ShOVX3Yq6qKmpuLOSsLNSenIFmxJizZtgnMxeQlJwfnnFx65+Ry1uJGXr4GXV4aXsfjsGzJISY3FzUnp1KbcoqiODqiODmhOOnRODmjcdJTy8kJjV5BcQ5C4xSKondC4+xU5E9Fr0Pj5ISiu5S02CQlen1BAqLXX0p+HK56HXIAAksvYjcajZaQpvbtcFwSjUaxS+3ttSj3PEOzZ8/mu+++46uvvuLmm29m+fLlHD9+nPHjxzN16lSefLKkDpA1j8wzVDWmLt7Pt/8ep3GQO8ue7IqDtmL7e4gLHWzfKb2D7eXzgLijJdzJnzCvhoQFtiYsMIpw73C8nLwqLc6imvGqS81LaVSjEUt2NpbsbMzZ2Viysq2vrY8c29fmospkZ2PJyQGLpXID1mrRODujcXZGcXFG4+Jqfa1xcUZxci5IQpyd0Ogv+3khqVGc9AXH6i/76eRUcMxlPyu6dkSIsqjUeYYmT56MxWKhd+/e5OTk0L17d/R6PRMnTrzuEiFRNQ6ezmDB1uNAQadpSYQqUFYy2UfXsDduBTsPa9Bwb6mH3OE3gCbdGhHuE0GgS2CVd2K3RzW7qqqoeXmYMzOxXHiYM7OwZGYU/MzKxJxxYXtWJpaMCz+zsrFkZVkTGDU/v+KDUxQ0Li4FyYqzy4VExeVSAnP5NhdnFOfLtxVst25zuZD4ODujcXUtqLGRQQpClL9m6KL8/HyOHDlCVlYWTZo0sfbbud5IzVDlUlWVYZ//y7b4FG5tXouPRrS2d0g1m8lA7tF17Dz0C5vP7GCHmkOMzhGLohRMGniw9D9YBo+PqnFV3ACWvDzM6emY09Ixp6dhTk8vSFoyM7BcntBkXUh0MjIwZ2VdSHwywWSqsFgUnQ6Nq6vtw+3Sc+2V+1xd0bi6XfbcxVpOcXGRhEWIq1CpNUMX6XQ6mjRpcrWHCwHAsv8S2RafgpOjRtYfu0pqSjyH9//A5uOr2Zxzkl06R/I1yoUBXAV9r2prnGld3w3NcROW7OJ/7e3dQVm1WLBkZV2W1KRjySj4efk2c0YG5vQ0LJdtq5BaGY0Gjbs7Wje3gp/u7hd+uqFxc0fj4Y7WzR2NuxtaDw+bBEZ7WbKjODpeeyxCiCpzbT3MhLgGOfkmZi2PBuCxHmHU8Xaxc0Q1R37SAbbt+YI1pzayjhzOXuws6lSQ/AQperr4NqV9w1tpHdKdINeCebfi6pS8qnRFdlBWVRVLdg7mtFTMKSmYU1MxpaRiTk3FnJqCKTUV88XXKSnWJOea+sk4OKD18EDr6YnW07MgeXH3KEhe3D1sEhutR0Gio3G7kNi4uaNxlVoYIW5EkgwJu/nkwvpjtb2ceaSHrD9WmsyTO/hnzxesSdrKRq2RbI3mwm+wA86qQjvX2nQO6UWnxv+jvmf9Ir/Ur3VouCU7G9O5c5jOn8d09lxBUpOSgjk17VLCk3opwbna2hrF2dma0BQ8PNBYn3vZbLcmPp5ekswIIa6KJEPCLi5ff2zqbbL+WHEM6afYsPVt/ji5hg0aI0ZFAUcADf5o6eXTjJua3EO7en3Qacs2HcGVHZSdnRT8PY2oKafJXL0P09lzFxKec5jPncN07rw1AVJzyr8ApKLXo/XxQevthYO3D1pvb7Q+3jh4e6O98NrBxxutl5c14dHILPBCiCokyZCwi1f+OEi+yUKXMF/6NpX1xy5nzs9h+65P+ePwIlaZU8jSaC7MaahQHz29A9pwU/ORNK3dCY1S/Mg7NT8fY/JZTMnJmJLPYDpzBuOZZExnCp6bzp1DPXeOrKwsssoRn+LkhIOfHw5+fmh9fS8kMt6XEh6fCwmPtw8OPt4ozs5SWyOEqNYkGRJVbmPsWf46cAatRpH1xy5z+uRWftv6JovSo0m+OL2ARkOQqmGAXxQDWj9BRHC7gr44GRnkHz5yWZJzBtOFRMeYXPDTnFKWNcwLKDodWj9fHPz8cfD1LUh2/C8kO37+OPj5Xkh+/KQpSghx3ZFkSFQpo9nCjAvrj43sFEqjQHc7R2RfRlMe67d/wC+Hf2WzmoWqKCiKQmiahX7GYLp4dqGOWgvTjkSMv8/l6OmZGE+dLpiQrwwUR0ccAgJwCAzEITAAx4BA63MHf39roqNxL3qJDCGEuBFIMiSq1DdbjnMkOQsfVx1P97l+1x8raVV41Wzm/NG9rFo+m33xB3HKVGmVDn0yVGpnKHhmgmJWgZPAQs4Vcw2tl9elJCcwEIeAy58XJEBab29JcoQQohSSDIkqcy7LwLsrDwPwXN8IPJ2vz7lY4nYns/HHw2SnXxpJ5awx0NS0HY+jazEnnkFrVmkJtCx09IU5UB0ccAwMxLFWLRxrB+MQHFzwPLg2jsHBOAbXQiNr7AkhRIWQZEhUmdnLD5FpMNG8tidD24bYO5xrZjEYyD9+nPz4Y+THx5N/7BjHTyvscu5dUOCyGplcs44dShea5R0kwJyESQPpnuAc5E9Q067oQ+oVJDm1C5Ieh4AAWc9JCCGqiCRDokpsi0/h110nURSYOagpWjuvPF5WqqpiSk4uSHbi4zHEx1uTH+OpU3DZajYqCgc6vlzw4sqmKUVBRWVni6GkhscypOO9dGn/JIpWfgWFEMLe5JNYVDqj2cLUxQWzHg9vF0JU3eq37pWqqpgSEzHExl54HMFw5Aj58fEldlbWuLujq18fXb1Q0v2bYIgr/t4UFPQWbx4dsJLaET6VcRtCCCGugiRDotLN33yMmDOZeLs48lxf+64/pqoqprNnMcTGkn/kCHmxseRfSHws2dlFH6TVoqtTpyDpqV8fXf166C881/r6WjsoZ29PgriDpcaQnVEJK5sLIYS4apIM2cnO46msij5D67re3Nwk0N7hVJqk9DzeudBpenL/xni7lm2W5Iqgms3kx8eTFx1N3sFo8g5FY4g+hDktregDHB3R16uHPjwcfXgYurAw9A0boqtTB0VXctyxZ/czd/cHhDKs1LhcPWR2ZSGEqE4kGbKT9YfP8sm6OIZE1b6uk6GX/zhIdr6Z1nW9GNqm8jpNW/LyMBw+XJD0RF9IfGIOo+blFS6s0aCrW9ea9BT8DEcXGlru1caTs5J4b+0Efj+/F3QaRuhuwTXfC4Wi+0TZe1V4IYQQhUkyZCdtQgv6luxKSLVzJJXnn9hz/PFfIhoFXh7crOJWQzcaMcTGkvvfPnL/+4+8ffswHD0KZnOhsoqLC04REThFRuLUJBJ940j04WHXvPZVvjmf77a+yWeHF5KjqKAo3Gww071zJrvWFd9vqCJXhRdCCFExJBmyk1YhXgAcP5/DuSwDfm7XV9OJwWRm2pKCTtMjO9WjabDnVZ1HVVWMp06R999/5O79j9x9+8g7eLDIGh+tj4816XGKLEh8dKF1K3yI+sa45by+eQbHLTmgQAuDkUn1BtGi10vg6ExARPJVrwovhBCi6kkyZCeezo40CnTj8Jksdh1P5ZbrbLHSLzYc5ei5bPzd9TxzS9lnmrbk55O3bx85O3eRu2sXuf/9V+QaWxp3d5ybN8OpRQucmzfHqVmzgrl5KnG25dMZJ5m9aizrMuMA8DWZGe8SxsDBH6PxrGMtd+Wq8FfOQC2EEKJ6kWTIjlrX9ebwmSx2JlxfydCJlBw+XHsEgBdvjcTDqfh+OOaMDHJ37yZnx05ydu0ib98+1PwrRls5OuIUEYFzixY4tWiOc4uW6OqFomiKX7G9IpktZn7c+QHvHfiKXEXFQVUZYdLxSI+3cA+/pchjNBqF2hHVbwoBIYQQhUkyZEetQ735cfsJdh9Ps3coFUZVVV5YvJ88o4VODXy5vWWwzX7T2bNkb9tG7s6d5OzYiSE21mbiQgCtry8urVvj3KY1Lq1aoY+MvOY+Plcr9txBXlr1BP8ZzoECrQ1Gpje6lwbdJoH2+lxORAghbjSSDNlR6wuTD+49mYbRbMFRWzU1HZVpyZ7TbDh8Fp2DhleHNMOSmUnO9u1kb/mXnK3/Yog9UugYXWgozm3a4NKmNS5t2uAYGmr3xUWNZiOf/fMSX8YvxaSAq8XCM9pa/G/oXDTe9ewamxBCiIolyZAdNfBzxcvFkbQcIwdPZ9DyQqfqmiolO5/XFu8hKvkwD7udR3n8aw4fOAAWy6VCioK+cWNc27fDuXUbXFpH4eDvb7+gi3DkXDRT/n6YQ8Y0UKBnnokX2kwgqM3owstsCCGEqPEkGbIjjUYhKsSLtTFn2ZWQWiOTIVVVyY+PJ2vDBnb9vJzP4qPRWUwAXBzvpatfH5eOHXDt2AmX9u1w8K6efWksqoUF297i3ehvyFfA02zmRZcI+t75OYpb9UrYhBBCVBxJhuysTag3a2POsi0+hQe61Ld3OGViyc4me+tWsjZsIHvjPwULlgIXx1OpfgF4de2Ma6eOuHTogGNQ9e8cnpR5ihf/fICtuYmgQBeDiZfbv4B/q3vtHZoQQohKJsmQnXVq6AccZnPcecwWtVqu5q6qKvlxcWSt30DWxo3k7NwJRuOlAjodB/wb8o93OCH9evPM6Jvt3uenPFYd/IFp22aTqag4WSxMdKjNXcO/QfGo/kmcEEKIayfJkJ21rOOJu96B9Fwj+0+lV5umMtVsJnfXLjJXryFz9WqMJ07Y7HcMCcGtWzdcu3fjk1RPPt56mmBPJ165r0eNSYTyzfm8tXIs35/ZAgo0yzcxu9mj1Os4TvoGCSHEDUSSITtz0Gro2NCXlQfP8M+Rc3ZNhiy5uWRv2kTm6jVkrV1rs6CpotPh0qFDQQLUrSu6evVQFIX9p9L57KNNQMGSG276mvG/1ImUI0z8834OmjIAeMDszJNDFuDoF27nyIQQQlS1mvHNdZ3rFu7HyoNn2Bh7lid6hVXptU3nz5O1bh2Zq9eQvWkTquHSEhJaT0/cevbErfdNuHXpgsbV1eZYg8nMMz/twWxRua1FLXpH1owFZ//e9w3Td75J1oVO0rP8OtN9wMfgUPLK9EIIIa5PkgxVA13D/ADYdTyNnHwTLrrK/WfJP3asoPlrzRpyd+2ymfTQsXZt3Pv0xu2m3ri0aY3iUHws766K5fCZLPzcdMwc1KxSY64IJouJd1c8yvyzW0GBqHwzb3R6iaBmd9k7NCGEEHYkyZCdWCxmTkUfICstFVdPb2p76jmVbmBbfAo9Iyp2MU/VYiFv374LCdBq8o/E2ex3atIEtz69ce/dG32jRmXq87MrIZXP1hec55XBzfFxrd61KqlZZ3h2yVC2mlIBeED14MmhP+LoFWLnyIQQQtibJEN2ELt1M2vmfU5WyjnrtkHOHvzl3okNh+tXSDJkyc8n599/yVy1mqy1azGdPXtpp4MDru3b4da7N+433YRjrVrlOnee0czEn/diUWFwq2D6Naveo66ij6/n6bXjOK1YcLZYeCWgB7f0/wA0FbuavRBCiJpJkqEqFrt1M0vfnlVouzY3g/65f7Ftkw71tsirGpFlTk8na/36gv4/Gzdiycmx7tO4uuLavRvuvfvg1r0bWg+Pq76HOX/FcPRsNgHuembcXr2bx/7Y+jYvRX9FnqIQYrLwXptJhLcaae+whBBCVCOSDFUhi8XMmnmfl1imScJa9p+8i+Yhpc/SrKoqhsOHyf7nH7I2bCRnxw4wm637HQIDcbupF+439calQ3s0umtvytp69DxfbooH4PU7W+DpUj0XKzWZjby9bBTfpv0HikIXswOv3/oNnkHN7R2aEEKIakaSoSp0KvqATdPYlRTA3ZzFitWbaD7qtiLLGBMTydmxsyAB2rwJ81nb8+kbNcKt902439Qbp2ZNK3TOn7ScfJ5euAdVhbva1qFX44rt21RRcrLP8eyiIWwwpwEwxjGYJ4b9gtbJ3b6BCSGEqJYkGapCWWmpZSq39/AJLBYLlpQUDEeOYDh8mJzdu8ndvQdTUpJNWcXZGdf27XHt0gW3Xj3RhVROh2BVVZn0638kpudR38+V6QObVsp1rlXymf2MXX4v0RozeovKq3X607fPGzKJohBCiGJJMlSF3LzKtkDp4I2/ENNhHmRmFN6p1eLUuDGunTri2rUrzq1bV0jzV2kWbE3grwNncNQqfHB3FK52nlzRYlFJjE0jO8OAq4eeWuFexMYu5YlNL3BGq+BjtvB+28m0bHGfXeMUQghR/UkyVIVqRzbFzcev+KYyVcXJaKLJ2dMFrxUFx5AQ9GFhODdvhnNUa5xbNEfj4lJ1QQOHz2Ty8rKDAEzq15hmtT2r9PpXitudzMaFsWSnXZog0tEln5W1F3LGT6G+ReGjm+cSEtLJjlEKIYSoKSQZqkIajZabRj1c5GgyABSFwBbded7bBacAP76beicOrlWb+Fwpz2jmye93YzBZ6NHInwe71LdrPHG7k1nx2f5C2/NzHOkRO5oQ5TumPzQTTw+ZP0gIIUTZaOwdwI0mvENnbn/medx8fG22u/v6cfszz3PrC5OJq9uEf/Fhy+lsO0VZQFVVpi7eT8yZTPzc9MwZ2hKNxn59bywWlY0LY4vcp1AQV4vk0bi71anKsIQQQtRwkgzZQXiHzoz56Cv2dstjfauzNGmdxkMffkl4h84467QMiaoNwA/bEuwa5/fbEvh550k0Crw7rBX+7nq7xpMYm2bTNHYlBYXstHwSY9OqLighhBA1niRDdqLRaHENq0t8cA45DvFojLnWfcPb1QXg7wNnOJtZ/Jd/ZdqVkMpLSw8A8Fy/xnQN97NLHJfLzijbe1HWckIIIQRIMmRXtb0aAHDKQQundlq3Nwn2oFWIFyaLys87T1R5XMmZeTz23U6MZpX+zYJ4pHuDKo+hKK4eZauZKms5IYQQAmpQMvTqq6/SuXNnXFxc8PLyKtMxv/32G7fccgu+vr4oisKePXsqNcbyCnYLBuC0gwOc3Gazb0SHgtqhr/45Rm6+udCxlSUn38RD83dwJsNAWIAbbw5tWaETN16LpOzFZOtSUVGLLePmXTDMXgghhCirGpMM5efnM3ToUB577LEyH5OdnU3Xrl15/fXXKzGyqxfsejEZ0sKxTTb7BrWqTW0vZ85lGfi+ivoOmS0q437Yw38n0/F2cWTuyLa42Xk+oYuWb5jJmP/e4p96v5VYrutd4Xbt5C2EEKLmqR7fdGUwY8YMAObNm1fmY+67r2DCvWPHjlVCRNfOpmYo4V8w5oGjEwA6Bw1P9Arj+UX7+HR9HCM61MXJsXJXWX952UFWRZ9B56Bh7v1tqefnWqnXKwtVVfniz0f44OwWUBQa+B+nd5cGbF102qYztZu3nq53hdMwqnouESKEEKL6qjHJUFUxGAwYDJe+ZDMyipgFuoJcTIaStVqMplwcT26D+t2t+//Xpg4frT3CqbRcFmxNYHTXypvj58M1sczbfAyAd+5qRZtQn0q7VlkZzfm8vOh/LMouWBh2pFNdnrlzEVoHHRHt6hWagVpqhIQQQlyNGtNMVlVmz56Np6en9RFSSWt9Afg6+aLX6lEVhSQHBzi6zmb/xdohgHdXHuZMRl6lxPHJujjm/H0YgBdvjeTWFrUq5TrlkZmbyuM/9mFRdjwaVeV5n3Y8e9cytA4FS49oNAq1I7xp1C6I2hHekggJIYS4anZNhiZPnoyiKCU+Dh06VKUxTZkyhfT0dOvjxInKG82lKIq1duiUg7ZQMgQwrF0ILUO8yDSYmL7kQIXH8MWGo7y+ouA9frZvBA91s//IsdNpRxn58838a0rF2WLhg9DB3D3wK1lsVQghRKWwazPZhAkTGDVqVIllGjSo2i9nvV6PXl91Q7ODXYOJT48n0cEBTu+G3FRwvrSgq1aj8NodzRn4wT+sOJDEiv1J9GsWdM3XVVWVD9Yc4e2VBTVC4/s0stZC2dOBk5sZu+oxzikW/E1mPmr5NJFtH7Z3WEIIIa5jdk2G/P398ff3t2cIdmetGfIIhKyjcOwfiBxoUyaylgcPd2/Ax+vieO6XvTSp5UFd36tfs8xotvDiov0s3FFQ6zWudzhP9Qm/+puoIKujf2Ly1pfJUyDcaObjrq8T1Hhg6QcKIYQQ16DG9BlKSEhgz549JCQkYDab2bNnD3v27CErK8tapnHjxixatMj6OiUlhT179nDwYMGK6zExMezZs4ekpKQqj7841hFlHhdGQcWtKbLcU33CaRXiRUaeiVHztpGSnX9V1zudlsvwz/9l4Y4TaBR4eXAznrm50VWdq6KoqsrXW99g/NaZ5CnQJd/CN/3nSyIkhBCiStSYZGjatGlERUUxffp0srKyiIqKIioqih07dljLxMTEkJ6ebn29dOlSoqKiuPXWWwEYPnw4UVFRfPrpp1Uef3FquxWsQ3ZKXzCknpg/wWIpVE7voOXTe9sQ7OnE0bPZ3P35vySll71DtaqqLNlzilvf38jO46m4Oznwxci23NcxtELu42oZLUZmrBzL24e+RVUUhuVr+PDOZbjVbmfXuIQQQtw4FFVVi5/OV5CRkYGnpyfp6el4eHhU+Pn3nt3LvcvvJcglkJWxhyA/Ex5aDXXaFln+SHIW93zxL8mZBvzcdLx+Zwt6RwaWeI3dCanM+TuGTUfOA9Cstgcf39PmmpraKkJGfgYTlo/i3/RYFFXlObM7I4b9juJm/3XQhBBC1Gzl+f6WeYbs7OIs1Mm5ZzGG9cbx4GKI/r3YZCgswI1fH+vMmG92cCgpk9Hzd9CxgQ93t69Lxwa+BLjryc43k5iWyz9HzrF8XyLbj6UCBUP1n+wVxsM9GqB3qNwJHEtzMvMkT/xxL0cN53G2WHjDIYSe9/wKOvtP9CiEEOLGIsmQnfk6+6LT6Mi35HOmYTfqHFwMh/6Am2cUe0yIjwuLn+jCOysP8+U/8fx7NIV/j6YABaPPr6zrc9QqDGpVmydvCiPU1/7Jxq6knYxf+SgpljwCTCY+9GxL5JCvQOto79CEEELcgCQZsjONoiHYLZhjGcc47deQOlodnI+FszHgH1HscU6OWqYMiOT+zvX4fmsCq6LPcPhMJpYLiZCzo5bWoV50D/dnUKvaBHk6VdEdleznQz8xa+srmFCJNOTzQehgAm95TeYQEkIIYTeSDFUDF5OhU/lpUL8HHFkJ0UvB/9nSj/VyZmLfCCb2jcBgMpOea8RN74CLrnr90xrNRl7fOouFsb8A0Dcrm5lRT+PSeZydIxNCCHGjqzGjya5nF4fXJ2YnQpPbCzb+93Ph9q5S6B20BLg7VbtE6Hzuecb89SALY39BUVWeSs3gzW6vSyIkhBCiWpBkqBq4OLz+ZOZJaDIIHJzhXAyc2mXnyK5d9Plo7v79Lnae3YOrxcIHKVk8NHAeSouh9g5NCCGEACQZqhbquNcB4ETmCXDyvDQD9Z7v7BjVtVsRv4KRy+8lMTeZUKOR71Pz6TF8ETTsZe/QhBBCCCtJhqqBuu51AUjITCjYEDWi4Oe+X8FYOSvVVyazxcw7O9/h2Q3PkmfJp0tOLt/n6Ggw6i8IjrJ3eEIIIYQNSYaqgRD3EABS8lLINmZDve7gGQKGdDi0zM7RlU+6IZ0nVj/BV/u/AuCBtAw+0gTj8eAq8KnaRXeFEEKIspBkqBpw17nj4+QDXGgq02ig5d0FO7d/acfIyudw6mGGLxvOptObcLJYeCP5HM/4tkU7ajm4Bdg7PCGEEKJIkgxVExdrhxIyLjSVtX0ANI6QsBlO7rRjZGXz17G/uHf5vZzMOklto4nvEs/QP3wI3P0j6N3sHZ4QQghRLEmGqolC/YY8gqH5hRFXm9+3U1SlM1vMvLvzXSaun0iuKZeOubn8v717j6qqzP84/j5cBMHDQRGveEHFu6R4xelmNpaWgzpq4+TdVY2XlqZOjr8sY02m02jmrwvZ1ICZjvmzMDNNrca8pXnD1BTv4gUlBQ8gF4+c/fuD8SSDIiB4DpzPa62zYu/97Of5Hs5a8ul59tl72fkLtOj2AkS9q7tKi4iIy1MYchENAvJnhs5knPl1Z/fn8/97aBWknnRCVUVLv5bO+O/G89GB/KW8kVfSibl4mcA+8+CRl3RXaRERqRAUhlyEY2boxjIZQO3W0OxRMOyw9S3nFHYb5zLPMWzNMLae24qvAX9LucSUTBteTy2BTqOdXZ6IiEixKQy5iELLZDc8MDX/v3sW5z+vzAXs/2U/f/zqj5ywnqBWnp2PzyfTx7MGjP4aWvZxdnkiIiIlojDkIhoG5IehlKwUsq9n/3qgUSS0fBKMPNjwipOq+9U3p79h1LpRpOak0uKajSXnkmkVfB888x3UDXd2eSIiIiWmMOQiLD4WAqoEAP95LMfNHo0GDy848jWc+N4J1eVbnricyRsnk5uXywNZ2Sw6f4E6rQfAyK/AXNtpdYmIiNwNhSEXctulsprNfr0OZ/ULcO1qudditxucS0zjyM4LnEtMY9H+j/nr9r9iYDA4PYP/vXgJ/x4vwYB/gLdvudcjIiJSXlzr8eZurkFAAw5cPsCZ9DOFD/b4Hzi0GlKP5y+XPTGv3Oo4vjeFzZ8e5eqVXMe+zCr+hDYOp4fnZibleGIa+hk061luNYiIiNwrmhlyITdmhk5nnC58sGp16Pdu/s87P4SjG8qlhuN7U/h64YECQQjA/1ogjx0ZTd9rT2L602YFIRERqTQUhlxIY0tjAE5cOXHrBk0fgS7P5v+8YgykHCrT8e12g82fHr3lMRP59wzaevmP2M31y3RcERERZ1IYciFNLU0BOG49jmEYt270279Cw8j8h7h+MhDSk8ts/OSjVwrNCBVkIvPKNZKPXimzMUVERJxNYciFhFpCMWHCmmslNSf11o28feEPSyGoGaSfhdjH4dKxMhn/qrWoIHRTu/TitRMREakIFIZciK+XLyHmEABOWG+zVAbgVwOGfgbVG0PaKfjoUTj+XekHNgw4vAb/7/9crOb+AT6lH0tERMTFKAy5GMdS2ZXjRTes3hjGfAP1O0F2GizuD/FjIeNC8Qe7dhX2fgILH4RlQwjKXE2udxoGt1miA6pV96FuWGDxxxAREXFxCkMupklgEwCOXSnG0le1YBjxJXR5DjDBvqUwv03+xdU/r4LMXwq2z7sOKYchYSksHwFzW8AX4+HCT1ClGm+2e4iNoZ8XOeT9g8Pw8NADWEVEpPLQfYZcTNPA/JmhIpfJblbFD/q8Ae0GwfoZcGY7HFiR/wLw9s9fVrueA9lXwG4reH71UOg4gn/Xbsq/tr0EQdB4oBeXvvEqcDF1teo+3D84jKYdapXBuxQREXEdCkMuptjLZP+tQWcYsw7OJ0DCEji1BVJ+BttVsN50x2pvf6jdBpo8BM0fh3oRXMz+hZe//D0Aw1sP58nOD2F/xMj/dll6Lv4B+UtjmhESEZHKSGHIxYRaQgFIzUklLSeN6r7VS9ZBvfb5L4DcDMhMyZ8R8vYFXwuY64HHr6ujhmHw6g+vYs210jqoNZMiJgHg4WGifosSji0iIlIBKQy5GD9vP+pXq8+5zHOcsJ6go2/H0nfmY85/FWHV8VVsObeFKh5VmH3/bLw9vUs/noiISAWkC6hdUBNL/kXUJV4qK6GUrBT+tvNvAIxrP85x8baIiIg7URhyQTcuoi7WN8ruwtydc8m4lkGboDaMaDOiXMcSERFxVQpDLiisehgAiamJ5TbGzgs7WXtqLR4mD2ZGzsTLQyumIiLinhSGXFCrGq0ASExLxG7Yy7x/m93G6zteB2BQ80G0CmpV5mOIiIhUFApDLijUEoqPpw9XbVc5k3GmzPtfdngZx64cI9AnkOc7PF/m/YuIiFQkCkMuyMvDi+bVmwNwKPVQmfZ9KfsS7yW8B8CkiElYfCxl2r+IiEhFozDkolrWaAnAoctlG4be2fsOmbZM2ga1pX9Y/zLtW0REpCJSGHJRbYLaAHDg0oEy6/PElRPEH4sH4MUuL+Jh0scvIiKiv4YuKjw4HID9l/aTZ88rkz7n75mP3bDzSINH6FCrQ5n0KSIiUtEpDLmoJpYm+Hv7k309u0zuN7T74m42ntmIp8mTiR0n3n2BIiIilYTCkIvy9PCkXc12AOz7Zd9d9WUYBm/ufhOAAWEDHHe4FhEREYUhl3ZjqWxvyt676uebpG/46ZefqOpVlXHtx5VFaSIiIpWGwpAL61S7E5B/t2jDMErVh81uY8GeBQCMaDOCmlVrlll9IiIilUGFCUOzZs2ie/fu+Pn5ERgYeMf2NpuNadOm0a5dO/z9/alXrx7Dhw/n/Pnz5V9sGWlfqz3eHt5czLpIUkZSqfpYcWQFp9NPU8O3BiPbjCzbAkVERCqBChOGrl27xqBBgxg7dmyx2mdlZbFnzx5efvll9uzZw+eff05iYiK/+93vyrnSslPVqyr3Bd8HwI7kHSU+P+NaBjEJMQCMvW8s/t7+ZVqfiIhIZVBhns4ZHR0NQFxcXLHaWywWNmzYUGDfO++8Q5cuXUhKSqJhw4ZlXWK56FK3C7su7mLb+W0MbjG4ROd+uP9D0nLTCLWEMrD5wHKqUEREpGKrMDNDZcFqtWIymYpcZsvNzSU9Pb3Ay5keDHkQgG3nt5FzPafY553PPM8nP38CwJSOU/RUehERkdtwmzCUk5PDtGnTGDJkCAEBAbdtN3v2bCwWi+PVoEGDe1hlYa1rtKa2X22yr2eXaKlswZ4FXLNfo0udLo5AJSIiIoU5NQz95S9/wWQyFfk6fPjwXY9js9kYPHgwhmEQExNTZNvp06djtVodrzNnyv6p8SVhMpno0aAHABtOb7hD63z7f9nPmpNrMGFiaqepmEym8ixRRESkQnPq2smUKVMYOXJkkW2aNLm7GwTeCEKnT5/mu+++K3JWCMDHxwcfH5+7GrOsPR76OMsSl7H+9Hqmd51e5IXQNruN6B/yr6/q27QvrYJa3asyRUREKiSnhqHg4GCCg4PLrf8bQejo0aP8+9//JigoqNzGKk8RtSJoHNCYU+mnWHdqHQPCBty27aKDi0hMSyTQJ5ApnabcwypFREQqpgpzzVBSUhIJCQkkJSWRl5dHQkICCQkJZGZmOtq0bNmS+Pj8p7LbbDYGDhzIrl27WLJkCXl5eVy4cIELFy5w7do1Z72NUjGZTPQP6w/kh53bPbj1pPWk46v0L3Z+kRq+Ne5ZjSIiIhVVhQlDr7zyCh06dGDmzJlkZmbSoUMHOnTowK5duxxtEhMTsVqtAJw7d45Vq1Zx9uxZ2rdvT926dR2vbdu2OettlNqg5oMwVzFzwnqCtafWFjqefT2bKd9P4Zr9Gt3rdefJJk86oUoREZGKx2SU9jkPbiI9PR2LxYLVar3j9Ubl7YOfPuDtvW9Tw7cGn/3uM8ejNWx5NiZtnMSms5sI8g3i//r+H8F+5bf8KCIi4upK8ve7wswMSf6zxZpXb05qTirPbniWn375iYSUBMasH8Oms5vw9fRlfo/5CkIiIiIloJmhO3ClmSGAE9YTjFk3hkvZlwrsN3ubmfvwXLrX6+6kykRERFyHZoYqsSaWJizts5RejXrh4+mDv7c/vUN78+mTnyoIiYiIlIJmhu7A1WaGbmYYhm6oKCIicguaGXITCkIiIiJ3T2FIRERE3JrCkIiIiLg1hSERERFxawpDIiIi4tYUhkRERMStKQyJiIiIW1MYEhEREbemMCQiIiJuTWFIRERE3JrCkIiIiLg1hSERERFxawpDIiIi4tYUhkRERMSteTm7AFdnGAYA6enpTq5EREREiuvG3+0bf8eLojB0BxkZGQA0aNDAyZWIiIhISWVkZGCxWIpsYzKKE5ncmN1u5/z585jNZkwmk7PLcUnp6ek0aNCAM2fOEBAQ4Oxy3J4+D9eiz8O16PNwLeX5eRiGQUZGBvXq1cPDo+irgjQzdAceHh6EhIQ4u4wKISAgQP+4uBB9Hq5Fn4dr0efhWsrr87jTjNANuoBaRERE3JrCkIiIiLg1hSG5az4+PsycORMfHx9nlyLo83A1+jxciz4P1+Iqn4cuoBYRERG3ppkhERERcWsKQyIiIuLWFIZERETErSkMiYiIiFtTGJJS27RpE3379qVevXqYTCZWrlzp7JLc2uzZs+ncuTNms5latWrRr18/EhMTnV2W24qJiSE8PNxxM7nIyEjWrl3r7LLkP+bMmYPJZGLSpEnOLsUtvfrqq5hMpgKvli1bOq0ehSEptatXr3Lffffx7rvvOrsUAb7//nvGjx/P9u3b2bBhAzabjV69enH16lVnl+aWQkJCmDNnDrt372bXrl088sgjREVFcfDgQWeX5vZ27tzJwoULCQ8Pd3Ypbq1NmzYkJyc7Xlu2bHFaLXoch5Ra79696d27t7PLkP/4+uuvC2zHxcVRq1Ytdu/ezYMPPuikqtxX3759C2zPmjWLmJgYtm/fTps2bZxUlWRmZvL000/zj3/8g9dee83Z5bg1Ly8v6tSp4+wyAM0MiVRaVqsVgBo1aji5EsnLy2PZsmVcvXqVyMhIZ5fj1saPH88TTzzBo48+6uxS3N7Ro0epV68eTZo04emnnyYpKclptWhmSKQSstvtTJo0id/85je0bdvW2eW4rf379xMZGUlOTg7VqlUjPj6e1q1bO7sst7Vs2TL27NnDzp07nV2K2+vatStxcXG0aNGC5ORkoqOjeeCBBzhw4ABms/me16MwJFIJjR8/ngMHDjh1DV6gRYsWJCQkYLVaWbFiBSNGjOD7779XIHKCM2fOMHHiRDZs2ICvr6+zy3F7N19iER4eTteuXWnUqBHLly9nzJgx97wehSGRSmbChAmsXr2aTZs2ERIS4uxy3FqVKlVo1qwZAB07dmTnzp0sWLCAhQsXOrky97N7925SUlKIiIhw7MvLy2PTpk2888475Obm4unp6cQK3VtgYCDNmzfn2LFjThlfYUikkjAMg+eff574+Hg2btxIaGios0uS/2K328nNzXV2GW6pZ8+e7N+/v8C+UaNG0bJlS6ZNm6Yg5GSZmZkcP36cYcOGOWV8hSEptczMzAIp/uTJkyQkJFCjRg0aNmzoxMrc0/jx41m6dClffPEFZrOZCxcuAGCxWKhataqTq3M/06dPp3fv3jRs2JCMjAyWLl3Kxo0bWbdunbNLc0tms7nQ9XP+/v4EBQXpujonmDp1Kn379qVRo0acP3+emTNn4unpyZAhQ5xSj8KQlNquXbvo0aOHY3vy5MkAjBgxgri4OCdV5b5iYmIAePjhhwvsj42NZeTIkfe+IDeXkpLC8OHDSU5OxmKxEB4ezrp16/jtb3/r7NJEnO7s2bMMGTKEy5cvExwczP3338/27dsJDg52Sj0mwzAMp4wsIiIi4gJ0nyERERFxawpDIiIi4tYUhkRERMStKQyJiIiIW1MYEhEREbemMCQiIiJuTWFIRERE3JrCkIiIiLg1hSERkUru4sWL9OzZk5CQED0kVuQWdAdqEZFKbtq0adhsNgYNGsSAAQM4cuQIZrPZ2WWJuAzNDInIPfHwww8zadIkp4w9cuRI+vXrd9vjcXFxBAYG3rN67qRx48a89dZbJT7v8uXL1KpVi1OnThXYb7FYqF+/Ps2aNSMoKAhfX98Cx//whz8wb968u6hYpGJTGBJxM7cLBhs3bsRkMnHlypXbnltUaDCZTKxcubJManQXZR3CZs2aRVRUFI0bNy6wf/LkycyePZs6deowatQovL29CxyfMWMGs2bNwmq1llktIhWJwpCISCWQlZXFRx99xJgxYwodS0xMJCsriwkTJrBt27ZCx9u2bUvTpk355JNP7kWpIi5HYUhE7pnr168zYcIELBYLNWvW5OWXX+bmyxbT0tIYPnw41atXx8/Pj969e3P06FHH8RszKevWraNVq1ZUq1aNxx9/nOTkZEebvLw8Jk+eTGBgIEFBQbz44ouU5tLIL774goiICHx9fWnSpAnR0dFcv37dcdxkMvHhhx/Sv39//Pz8CAsLY9WqVQX6WLVqFWFhYfj6+tKjRw8WLVrkmH3buHEjo0aNwmq1YjKZMJlMvPrqq45zs7KyGD16NGazmYYNG/LBBx8UWe+aNWvw8fGhW7duhY7FxsYSFRXF2LFjWb16NZcuXSrUpm/fvixbtqyEvyWRykFhSETumUWLFuHl5cWPP/7IggULePPNN/nwww8dx0eOHMmuXbtYtWoVP/zwA4Zh0KdPH2w2m6NNVlYWc+fOZfHixWzatImkpCSmTp3qOD5v3jzi4uL45z//yZYtW0hNTSU+Pr5EdW7evJnhw4czceJEfv75ZxYuXEhcXByzZs0q0C46OprBgwfz008/0adPH55++mlSU1MBOHnyJAMHDqRfv37s27eP5557jpdeeslxbvfu3XnrrbcICAggOTmZ5OTkQu+jU6dO7N27l3HjxjF27FgSExOLrLljx46F9ttsNpYsWcLQoUNp2bIl7dq1Y8mSJYXadenShR9//JHc3NwS/a5EKgVDRNzKiBEjDE9PT8Pf37/Ay9fX1wCMtLS0254bGxtrAIXO9ff3NwAjPj7+tuc+9NBDRqtWrQy73e7YN23aNKNVq1aGYRjGkSNHDMDYunWr4/ilS5eMqlWrGsuXLy8w/rFjxxxt3n33XaN27dqO7bp16xpvvPGGY9tmsxkhISFGVFRUke/LYrE4tnv27Gm8/vrrBdosXrzYqFu3rmMbMGbMmOHYzszMNABj7dq1jvfWtm3bAn289NJLBX7H/z3uDY0aNTKGDh3q2Lbb7UatWrWMmJiY276HqKgoY/To0YX2f/bZZ0ZwcLBhs9kMwzCM+fPnG+3bty/Ubt++fQZgnDp16rZjiFRWXk5LYSLiND169CAmJqbAvh07djB06FDHdrVq1Rw/Dx06lPfffx8As9nMnj17CvUZFhZ2x3G7deuGyWRybEdGRjJv3jzy8vI4dOgQXl5edO3a1XE8KCiIFi1acOjQIcc+Pz8/mjZt6tiuW7cuKSkpAFitVpKTkwv04eXlRadOnUq0VLZv3z62bt1aYCYoLy+PnJwcsrKy8PPzAyA8PNxx3N/fn4CAAEctiYmJdO7cuUC/Xbp0KXYNN/dtMpmoU6eOo+9byc7OLvQtMchfInvqqafw8sr/537IkCFMnTqVhIQE2rdv72hXtWpVIH/mTcTdKAyJuCF/f3+aNWtWYN/Zs2cLbCckJDh+DggIcPzs4eFR6Nx76b+/CWUymUp1TVBRMjMziY6OZsCAAYWO3Rw4blWL3W4vkxpK2nfNmjVJS0srsO/ChQt8/fXX2O32AuE3Ly+P2NhYFixY4Nh3Y3kvODi4LMoXqVAUhkTklsoj8OzYsaPA9vbt2wkLC8PT05NWrVpx/fp1duzYQffu3YH8++YkJibSunXrYvVvsVioW7cuO3bs4MEHHwTyL9revXs3ERERxa4zIiKCxMTEu/odtGjRgjVr1hTYt3PnzgLbVapUIS8vr9Rj3KxDhw6Fvg22ePFiGjVqVOiWB99++y2vvfYac+fOdYSuAwcOEBISQs2aNcukHpGKRBdQi8g9k5SUxOTJk0lMTORf//oXb7/9NhMnTgTyl9mioqJ45pln2LJlC/v27WPo0KHUr1+fqKioYo8xceJE5syZw8qVKzl8+DDjxo0r8t5Jt/LKK6/w8ccfEx0dzcGDBzl06BDLli1jxowZxe7jueee4/Dhw0ybNo0jR46wfPly4uLiABxLhY0bNyYzM5Nvv/2WS5cu3dUS1WOPPcbBgwcLzA7FxsYycOBA2rZtW+A1evRoMjIy+PLLLx1tN2/eTK9evUo9vkhFpjAkIvfM8OHDyc7OpkuXLowfP56JEyfy7LPPOo7HxsbSsWNHnnzySSIjIzEMgzVr1hRaMirKlClTGDZsGCNGjCAyMhKz2Uz//v1LVOdjjz3G6tWrWb9+PZ07d6Zbt27Mnz+fRo0aFbuP0NBQVqxYweeff054eDgxMTGOb5P5+PgA+d8o+9Of/sRTTz1FcHAwb7zxRonqvFm7du2IiIhg+fLlQP4s3KFDh/j9739fqK3ZbKZXr17ExsYCkJOTw8qVK3nmmWdKPb5IRaZnk4mI3COzZs3i/fff58yZM+XS/1dffcWf//xnDhw4gIdH8f9fNyYmhvj4eNavX18udYm4Ol0zJCJSTt577z06d+5MUFAQW7du5e9//zsTJkwot/GeeOIJjh49yrlz52jQoEGxz/P29ubtt98ut7pEXJ1mhkREyskLL7zAp59+SmpqKg0bNmTYsGFMnz7d8TV3EXENCkMiIiLi1nQBtYiIiLg1hSERERFxawpDIiIi4tYUhkRERMStKQyJiIiIW1MYEhEREbemMCQiIiJuTWFIRERE3Nr/A/uhKGtBbJUgAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the energies\n",
    "plt.plot(xyz[:, 1, 2], molDB.get_properties('HF_energy'), label='HF/STO-3G')\n",
    "plt.plot(xyz[:, 1, 2], molDB.get_properties('FCI_energy'), label='FCI/cc-pVDZ')\n",
    "# plt.plot(xyz[:, 1, 2], molDB.get_properties('FCI_energy') - molDB.get_properties('HF_energy'), label='delta energy')\n",
    "# plt.plot(xyz[:, 1, 2], molDB.get_properties('KREG_delta_energy'), label='delta model')\n",
    "plt.plot(xyz[:, 1, 2], molDB.get_properties('FCI_energy_est'), label='delta-learning model')\n",
    "plt.plot(xyz[:, 1, 2], molDB.get_properties('KREG_FCI_energy'), label='direct KREG')\n",
    "plt.plot(sub.xyz_coordinates[:, 1, 2], sub.get_properties('FCI_energy'), 'o', label='sub-training points')\n",
    "plt.plot(val.xyz_coordinates[:, 1, 2], val.get_properties('FCI_energy'), 'o', label='validation points')\n",
    "plt.legend()\n",
    "plt.xlabel('H-H bond length (Å)')\n",
    "plt.ylabel('energy (hartree)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using delta-ML model in simulations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# first, define the baseline:\n",
    "baseline = ml.models.model_tree_node(name='baseline',\n",
    "                                     operator='predict',\n",
    "                                     model=hf)\n",
    "# second, define the correcting ML model, in this case the KREG model trained on the differences between full CI and HF\n",
    "delta_correction = ml.models.model_tree_node(name='delta_correction',\n",
    "                                             operator='predict',\n",
    "                                             model=kreg)\n",
    "# third, build the delta-model which would sum up the predictions by the baseline (HF) with the correction from ML\n",
    "delta_model = ml.models.model_tree_node(name='delta_model',\n",
    "                                        children=[baseline, delta_correction],\n",
    "                                        operator='sum')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# initial geometry\n",
    "initmol = ml.data.molecule.from_xyz_string('''2\n",
    "\n",
    "H             0.0000000000000           0.0000000000000           0.0000000000000\n",
    "H             0.0000000000000           0.0000000000000           0.8000000000000\n",
    "''')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized coordinates:\n",
      "2\n",
      "\n",
      "H             0.0000000000000           0.0000000000000           0.0682878578819\n",
      "H             0.0000000000000           0.0000000000000           0.7317121421438\n",
      "\n",
      "Number of optimization steps: 8\n"
     ]
    }
   ],
   "source": [
    "# Optimize the geometry with the delta-model as usual:\n",
    "geomopt = ml.optimize_geometry(model=delta_model, initial_molecule=initmol)\n",
    "\n",
    "# Get the final geometry approximately at the full CI level\n",
    "final_mol = geomopt.optimized_molecule\n",
    "print('Optimized coordinates:')\n",
    "print(final_mol.get_xyz_string())\n",
    "final_mol.write_file_with_xyz_coordinates(filename='final.xyz')\n",
    "\n",
    "# Let's check how many full CI calculations, our delta-model saved us\n",
    "print('Number of optimization steps:', len(geomopt.optimization_trajectory.steps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "H2 bond length is 0.6634242842618794 Angstrom\n"
     ]
    }
   ],
   "source": [
    "# let's see what is the final bond length of H2\n",
    "Rdelta = final_mol.internuclear_distance(0, 1)\n",
    "print(f'H2 bond length is {Rdelta} Angstrom')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
