{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Conda, Anaconda, Miniconda, etc\n", "\n", "\n", "There are many options for configuring a working environmant for scientific computing and data science. \n", "\n", "**Care must be taken to manage large collections of interconnected software packages.**\n", "\n", "* Compatible versions of code libraries, compilers, languages, operating system libraries are required to build a working installation of your software tool chain. \n", "* All of these are under constant development, therefore care much be taken to maintain any working environment against creeping incompatibilities if some parts of the environment are updated." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "[![https://xkcd.com/1987/](https://imgs.xkcd.com/comics/python_environment.png \"https://xkcd.com/1987/\")](https://xkcd.com/1987/)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## So, how is all this managed?\n", "\n", "One option is to use the tools in your **distribution**. A GNU/Linux distribution (eg Ubuntu, Fedora, CentOS, SUSE, Arch, ...) is a collection of compatable packages combined with a Linux kernel. Distributions manage 1000's of packages to maintain compatability across updates. This is very convenient and is the typical way that many systems are managed.\n", " * Some distributions are managed for long term stability. So updates are primarily released as bug fixes and security enhancements.\n", " * Others are updated frequenty to also keep up with the latest software feature improvements.\n", " * Typically major upgrades (eg things like major version changes for the kernel, compilers, big tools) are only occur with new distribution versions.\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Distribution upgrades work very well, but they can't include every imaginable software package. \n", "\n", "A very popular option for adding PYTHON modules to your system is `pip`, the *package installer for Python*. \n", "\n", "`pip` can access huge collection of packages, but it works less well for those that have complex dependencies on binary modules and that describes a *lot* of scientific software. \n", "\n", "Similarly, even if a pip install works flawlessly, a system manager (that may be you for your laptop!) could upgrade a dependency in the future and your user-installed packages can stop working unless you carefully control your working environment. \n", "\n", "**Pip can be a significant problem for maintining a stable software enfironment, it is strongly suggested to work in a Python [venv](https://docs.python.org/3/library/venv.html) instead to ensure stability.**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "It is important make sure that you maintain compatibility with any software you add to your system. \n", "\n", "You may also need to install software that is not even compatible with the current packages in your distribution. \n", "\n", "For example, it's entirely possible that you'll eventually need some important software for your work that turns out to be incompatible with the bleeding edge compiler installed on your laptop or with the default and somewhat ancient compiler installed on the large computer cluster you will use. \n", "\n", "In cases like this it can be very difficult to manage the full set of dependencies which typically include alternate copies of libraries, compilers, etc. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "This problem can be solved in a variety of ways, including:\n", "* the use of virtual machines and various containiers which package up a whole OS or parts of one to define your computing environment. \n", "* another option is to use alternate *root* environments maybe even on a distributed filesystem to provide collections of programs and libraries which can be used to ensure a consistent configuration. \n", "\n", "However, some these options may not be available to use on systems that you can't personally manage and even if you do have [root access](https://xkcd.com/149/), the learning curve and time involved may be [discouraging](https://xkcd.com/349/). Fortunately, numerous solutions exist for this common problem." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "One tool for managing alternative environments, independent of the default system environment is to use [conda](https://anaconda.org/anaconda/conda). The basics of this tool are easy to learn." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**conda is a package manager** \n", "\n", "By default conda pulls packages from a repository called the [AnacondaCloud](https://anaconda.org/)\\*, which aims to support the data science community by maintaining a large variety of [PYTHON](https://www.python.org/) and [R](https://www.r-project.org/) packages. \n", "\n", "Packages are provided in different versions and compiled to be compatible with different operating systems. Conda is used to create working environments that contain compatible collections of tools.\n", "\n", "\\*Other repositories can be added as well. We will use the [conda-forge](https://conda-forge.org/) repository, which includes many packages used in physics and other areas of science." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "For example, you can easily use conda to install several differnet versions of python and even compiler collections along with the the supporting libraries needed to make each environment complete. Then a simple command can be used to switch between environments." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**anaconda is a large collection of packages** including python and many data analysis/science tools.
\n", "Installing anaconda may bring in a lot of packages you don't need." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**miniconda is a minimal collection of packages** including python.\n", "\n", "Starting from miniconda, you'll have to install some packages by hand. But you'll do this anyway if you want to use a certain scientific software packages. So miniconda is often preferred by \"power users\"." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "![miniconda_vs_anaconda](https://galaxyproject.github.io/training-material/topics/dev/images/miniconda_vs_anaconda.png \"Image from https://planemo.readthedocs.io/en/latest/writing_advanced.html\")" ] }, { "attachments": { "a96b50a8-20f9-4c16-a835-b73034bf8f15.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAFlCAYAAAAnCtjuAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7snQeYXFX5h78NIb3vpgFp1FBCSYAAofcqHYIiTUUFFUHBAoqgAqJ/REFAqvQSQKRpAGkJhJIQOkEglISQnk02lZDs/3nPvefmztk7M7fNtnzv88yzye7MnTtn7j3nd74qoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoiiKoijK2kvV2vvRFaXVwf08WEQ2FJH+ItJXRNYXkT4i0s75tPUiMk9E5vqPOSLygYi8JyJLWt3IVIb2IrK5iGzqj3W1iNT4jzbOW34lIrNFZIaIzPQfH4vIRyKyujKnpyitDxUtitJyYcHcTUS2FZGtRWSYiHTL+HEQM5+IyLsiMlFEnhaRl0Tky4zHbem0FZHtRWRvEdlBRLb0xeE6GT8YAvEdEXlDRN4UkfH+TxUyiqIoSoumq4h8XURu93fsCIzGeLCw/kdEfiIiA1r0CCYDC9WZIvKwiCxspLHm+8TqdZ+IfEtEeiU7ZUVp3ailRVGaN7h1jhCR0SJykIh0iHu6bdpUSZs268g66+Cp8G71qqoqqaoSqa+vl1WrVsvq1d6D/8cEC8A4EblTRO4XkQUxX9dS6OKPN+JwPxFjYSkL49qmTRvzYLz5P6xebce13oy1HfMErBSR/4rIPSIyRkSWJnitorQ6VLQoSvMEi8Z3/d12v1Kn2LZtW1l3XR7rSrt2baVt23ULFs44sKB+9dVXsnKlfayUL79cWU7MrPDFy5/8WJiWzCAROUdEThMxwiUSxEi7duuasWbM7dgjVuJiBaM33iv9Mfd+lgGBeIuIXOfHHynKWoeKFkVpXmwkIheIyInFdvlt264j7du3lw4d2kv79u0SLZhJYHFFuKxYsUKWL19h/l0ErC+Pisgf/ZiMlsQ2InKuiBxfbLwRKHasGW9rRckbrDKM9YoVX5rxRtQUgfF+QER+KyJvFXmOorRKVLQoSvNgAxG5WES+GbV4rrPOOtKpUwfp2LGj2ek3BV99tUqWLl0my5YtM9aBIjzhx768XeTvzYUhInKZiBwb+M5CIAw7depoxhuLSlPAGDPWS5cuLyZgEC8Pisj5IvK/pjhHRWlsVLQoStNCjApuiV+KSGf3VNjhd+7cSTp2jB3K0ihgdVm8eIkRMRGsEpGbROTXIjIr4u9NSXd/kf+RiElZLoBx7tKls7GoNCewvCxZslSWLVsedVpkdl0pIr8TkbqoJyhKa0FFi6I0HXuJyA0ixiVUALv8rl27NNkuPy6rVq2SurolZkGNCOadLyJnicgdcY9XYQ4RketFZL3w++DuYbwRK01lVYkL1q66usWydCnj3eBV1ID5gYj8s8FfFKWVoKJFURqfjiJyiYjZ7RdEcLLT79ata7NfPF0I5F24sM6IlwhIGf6eiHwR8bfGoIeI/FlETnHfDLHSvXtX435rTiBI/ASkSDzxwnhHWrpu868t0rQVpVWhokVRGheKkpG6SmG4ALJQevbsZgJsWzIrV66U2to6E1DqQPXdb4jIWPcPFWZHf7wHht+HuKAePbpJu3bNyw2UFNx0tbULo4Kkp/nBxROSHlNRmjPNa3uhKK2bY/wsG0rrG3BNYFnp1aunES4tHSwWnTt3NJ+FLJiQy6iTiJzgl6ynzktjQMo4Rdoor29gvBErPXv2aHbWlTR4493J1ONhvEMQu0NQN20aqGysKK0CtbQoSuXhPvu9iPw8nKlC/ESvXj1MSm1j0LVrN/OeXbp0NZYGrAwE0y5atFCWLFlirCR5QrzLggULTRCpA+4iirdVqscRA0otE2quBPCZGe9KiMNOnTr5j87mJ9/pwoULTfbPsmVLZfHixe4Y5A4p0vPnY3Vp0HGBoOjvi5hCdYrSolHRoiiVBfMJi8ZJ4bchI4gdfyVqfrBo7rDDjrL99tvLhhtuJEOGDJHBgwcb0VKKRYsWydSpH8lHH/H4UCZOnCiTJk2MWgQTgTCqrV3kvuZlERMYi9soT8jAwv1G9eAAgpqJXckKReSGDh0qO++8iwwbtrUMHjxEBg0aJDU19EkszvLly+Xjjz+Wjz+ean5OmvSqvPTSy1JX12BcMkNsEcG6Dv/207srJRQVpVFQ0aIolQOXCO4JFmeDdU8gWvKkX79+cswxx8pee+0t2203vMB6M3fuHLNQTps2za/7sdRYVbCEdOhAim8X6dq1q/Tr11822mgj6dmzZ3BqLLavvvqKPPnkE/Lggw8Y60EaiHGZN6/WBOyGmCIiB4jIZ2mOGQF9eh4TkZ3s3xhvrCtZUsY5xo47jpTjjx8t++23v/ToQVyvx4IFC2TatM/k008/NaJvyZLFJkj2yy9XmLFFKHbu3Fn69OljBE7//v0Docr4v/32WzJ27Fi5//775Isv8otTJjV6/vxaN6OLxpeHVkAoKkqjoaJFUSoDhVUeEZF97eHZpVdX98ytBgiL6b777isnnHCi7L333ia+AXfExImvygsvjJcJEybI//73fmLXBKJl0003M9aEUaNGyfDhI4wrCeHx738/LrfeeouxwiSFxXzevPluYToEy+4i8mnS4zkQt/KM3+nawHjU1PRM7X7DjXTcccfLGWecKYMGDTbHnDLlPRk3bpy89NIEM87z55PVHR+EDGM7cuROsssuu8hOO+1k3HUImHHjnpcbb7xBnnvu2fgHLAHF6ebOnW+OHWKy36m6tsRLFaXZoqJFUfKHmArKrB9mD00TvZqaXqkXUJddd91VfvnLC4yLAusFIuXuu++SsWP/k9md44Kl4NBDD5PRo79uXE6A5eWyyy41oigJnCsLqdMS4ENfuKQ1NeD3ekpEdrDnguDo3btX6mDb/fc/wIwvliesS2PG3GesIe+8806Sj1sWssV4L8TRbrvtbs4XQXTZZZfIpEmTyr6+HAiWOXPmuxV1cc3RDFIL0SktDhUtipIv3FN3++mmBhai3r2rTWn4rAwYMFAuvfQy2WOPPeWrr1bKXXfdKddee61Mn06Ga+XZbLOh8tOfnisHHniQWRBvvfUfcsklv4tKcS4KPXawuDjZLpT93zOF6wI/G/EaWGsMBBvX1FT73a2TQdn+3/zmYvn6179hCrjddNON8ve/X5vaLZYErDk/+clP5fDDjzBWuTvvvEMuvvg35jyygFBEuDiB1lilDhQx1XQVpcWgokVR8oUmdjQ8NGBh8QRL9nRmFjMEC+6ERx99RC6//DL55JNP8j37mIwYMUIuvPAiEz+Dy+TMM89IZHUhFRqLiyNcnvfdaXGzXJi/iBkildxA1g4WliRdly3rr7++3H77nbLJJpsaa8dZZ/1QZsygyGzjMnTo5nLJJZfJDjvsIFOnTpUf/vBMefPNNzKdxKpVCJd5rsXlZr+LuKK0GLJv/RRFsVCHhB4wZjPAwolgKVcavlz1Uxbiyy//k5x33s9MfMqZZ35frrrqr1Jb23RhCQSN4jIRqZeDDjpERo8+wYgXso/iQDwOVg3SoUPBuYNEpLcfTBuHX4nImfaJ1qKFUEzKwIGDZMyYB0yW1RVX/J+cd95PTWBtUzB37ly5//4xxnp10EEHybHHHifvvfeuETBpadOG8e5gAquxdPlsJyKkGWkBOqXFoKJFUfJha79wnCm6wqJMDEucjsylyrWzsN94480mpmT8+PFy4oknyFtvvZnPGWcEsTFhwosm4Bd30THHHGMsP++/T1JQeTzh0t5kuoSK0BE0Q5PFcpG+h4vIta5ATOOCI/Pqn/982GT2/OIXP5MbbrjezbppdBiPV155xcQq8d0zttOnTzfiJS2IaGJoCNYO9S3aR0TGi8jHaY+rKI2JuocUJTvEVbwqIlvYQ/Xs2T1zWjPpsv/4x60m3faBB+6Xn/70HNe832wgI+buu++R6uoaOeecH5v06LiQ5TJnztywBYA4C9KWyXSJAosM/hKqvgYCMU1n5rZt1zUWFgKMzznnbBkz5t6o92tSGNs777zbpE1/73unmwyuLGDdwjUX4nMR2davnqsozZrkdlRFUVz+LyxYunTplFmwsJjeeONNRrCQYowQoOJpc4UsoqOPPlLmzJkjf/zj/5lYl7jgPuvRw+gPCw2BbhcxaeMuzFn/sIIFKBqXRrDABRf8yggWUo2bo2ABxvaYY44yNWGuvPKvMmzYMHdMEtGhQ3vTOiIEbSVuTHQQRWkiVLQoSjb29zsYG1iAu3cvXXk2DhdddJHssssokx10wQXnu0XZmiW4hr797dOMa+OGG26SPn36xj5Pui07BfdoLHlpxAF+4mcZGYjT6NKFIrjJIdD1tNO+ZWrO/P73v0t+gEbk008/ke9851smlfvmm28tW4G3HN26dXGFHu62k8u9TlGaGo1pUZT0YAl4VMRUYvXdFKTaZrutvvGNE+UnPzlXXnnlZTnjjO+1CMFimTVrpnz++eemOu/mm2+eyE2EBcAJzB3p11+x+dyb+iX6TSqWVzyuV1BhNgnEd9xyy22muu1JJ51oqgY3d2bM+FxmzvxCjj76GBMw/MgjtHBKD+O9dCnxLUFg7igRk1G0LP1RFaWyZJtdFWXt5kIROcIOAW6KLOXigWJmN954i8ycOVNOOOH4xNVsmwMEi9KP56CDDjYWgvfeey/WaRGYi5snVJeEmDsyXHBdsLLeJiKb24NRXThts0mCW0855VS56aYb5KGH/hnr/JoDFLdDDDK2H374QaI0cxeEm1dFebn9EyYrKgtnU0OKUkE0EFdR0kEwKOVg2/Ny3EJ9+vQumQlUDhaR++9/ULbffgcZPfo4efHFF8q9pNnSq1cveeaZ580ufrfdRiVqDLhw4SKpqyvo63eGiLG20BbBgDuJnkJpeeKJ/xprxS67jDQpxi2Jmpre8vzz42TRojrZa6/dTTZQFqjfEqqXgziksnD2cryKUgE0pkVR0oGVxQgWIJC0VOpyHGjIR3fmO+64vUULFqAnz5/+dLlUV1fLqaeeFufjBxAk6rjYCDj5i30C4i5L3BCxLFgrCLxtaYIFcGVdeeWVphjet7717URjGwWZbli5fPjH76OepyjNAbW0KEpycFG8RVgFL8UlhKsiCzTSGzfuRVNHY9SonRNZJporuG6ef/4F00V6551HyuLF8VvdULtl3rwFkR+tR49uqYNv4Yor/izHHnu8HHDAvvLuu+nrnjQljO348RPM9YK1KGup/9raRbJ4cYF1ay8Ryadzo6LkiFpaFCU5lOkP4sGc9NFUYI2gyNnVV1/VKgQL0Ovmb3+7ygS7jh49OtG4IASjCvNhgXGyjBJBKvn++x9oxEpLFSx2bK+77hpjyaIacVa6du3iBjRjSVSUZoeKFkVJxgYicqx9CbEV5cr0l4OF9Nvf/o7MmjXL1GRpTVBkDgsLrq+kRIlBUnVDrozEjBw5Urp37y5jx9JjsWVz7733mFYDJ554UqYxAVofOKnjNK8kCFpRmhUqWhQlGT8g7ta+pGvXdDVCwhxyyCGmpsntt9+WqFtySwC3xUMPPWSaAG67bbI1kJTcsLUFKwsiMQujRu1qXv70009nOUyzgLFFFG6yySYmFiorXMuOIDw76zEVJW9UtChKfAi8/Y59Ootq2pTbMCeffIpxpVBIrjXy4IP3m4918MGHlP14oZ44hrC1JauVBXbaaSdZsmSJvP02IUktHxorAr2fskKAsyMKjxeRPlmPqyh5oqJFUeJzqC0kB2krsYYhA4QU5yeffELmzJkd/0xaEK+99prMmzdP9tmH3nylcTOwPGHYNmpBTQyWmq233kYmT57crFsiJOHNN98wbsX996cwc3ZoQRGCdgrJ/XqKUkFUtChKfE60T2UBZEHNCtYHTPKPPhqUIGl1rFq1Sp555mnT+G+DDQYk/nxkHyEQs8SyAHVZyLaZMiVesbuWAHVw/vvfp2TQoMGyySYUDM4GlkPHeviNbEdUlHxR0aIo8SCn+WD71E6donr5JYfKpsuXL5enn/5v8hcngE7KlGyvq1ssCxfWyaJFi2Xx4qV+2fygjHvFsIXyCIRNCmPtWABSgWgCGhDmDeKBAm1Lliw1Y8sYM9aMOa6/SvLUU0+Yw++33365vE3nzgVxQwTLZFdDipITpoeHoihlOUDEmMsNWQNCvWN0ku22205eeOEFE2eRN3SFRphQMXXVqtUlD0/5/E6d6E6dLdC1GLhkAPfMAw94MS5xwcKS1coCtoHj9OnT4751Wagng1BZsWJFg3icMMSLeM0dO7mWjMyMGzfOCN8999xLrrnmb5mP17FjR1O3JcRhIqaTuaI0OSpaFCUeB9qn4RrKIwCXjA/SnSdMeDHeGcRk9erVviUlvhDCSsAD60AePZRcPvroQ5Oei2hpKnr3rjFvPW9e9rL9iJTa2rrYVhS+E8QND8QLFX3bts2n9RuChZ5Ew4YNM+Iu1AAxFaQ/k7X15ZeBhYhrX0WL0ixQ95CilIfK0UGkYx6xLGBdJRMmTCh/BjGhS/LMmbPd6qZhVojIZ1SDjzok1hkq0fLIuviF4Vjvv/++DB3quWiagl696AWIaJmX+u35HAsWLJQ5c+aXEiyU8v20WLdkrDOzZs0xrqO8ePfdt6VLl64yYMDAXA5JheYQuxN3nsuBFSUjKloUpTystP3t0/ISLVtuuZURCXml39JkcO7c+bK6MEblKxF5UES+KSL9RITViGaPvf1/0xyPXjNTw8PAwjp79jwTRJsXn3zysVlYaabYFNTU1BjRMW/e/FRvj7WE8cVa4jBDRP4kIrvR1cHPMBuMF9HvmnyciJDPjmA0cB7z59ea2Jc8ePvtt81httxyyzwO517juEV3yuXAipIRFS2KUp7tw08h/iMPNt98C5k69SP58ssvMx+O2BW6Izs8TBiJiBwtIneIyCzn7yyiE0VMW4KhInKmiMyxzyGAFIsCi3UefPopxgfJzRqQFETLwoUL5auvkgfGIjIQLKFuyMCA/1xENhaRc0VkvIgsd84LhUQxFTLPEL98DwG44+jWnBXcQ5CXaME95MQRjch6joqSBxrT0rqhXGtX/9FNRLqH/s/v+V0P/3dBlVcffl+qoSYpJ7XO8NkOd/yevy8UEVY8+5NF0t2mur9jd8p7M/nzWo7Fahfpzmgkhtv3IZ6FoMqsdOvWTfr37y+vvvpK1kOZhdQRLJhHzheRPyQ4OCv5NSLyLxF5SMQTaliCsAjU1GS3jnz+uRcAO2DAAHnjjdcTnFo+dOjQMXVjQVxCoRgP+EhEviYiSTouch1j8XpUROjXYKKeyTZq27ZtpuBu0rj5rrbYYqt8Bouyz+sS1xII6mTljPOHgCQshMxhzFvchIhG5hOE9hcisjj/t1WaGypaWiYIDApecBPzwBS9vl+9kgqWuDL4WZlUkKaBymvYwKm/TlGTNxvxNIJdZlQTvzQMHOjFHmBpyYLnZiiIP0HoUcn0gZTH/VxE9hAR8mhHcQziZHA9ZW1ZsGCBp2lpoNg01LvWg1gQe+LEn1DohX4A6fxMIvf6iyxjbIr9IIqoIUMQbBoIDJ458wsZMIDWWPngBeMGoiUQ7o0EndQp5khFQqyFgXu2BESefygiH/g//ycipK1hhkpuXlOaJSpamjfsLnBSY7rnsYVvYmZmyif1ICXt2rWTjh3b5+aTjwEibG//8TsR+UREbhSRvzeCFSaIHs3aHNGy3npoTJEvvmCDmB7cC046M66etILFwu71CBF5WUQ25Je8D+nQWaxMVrTQsLClgCh04k4QKodnECyW50XkdBG5lV/wPriJevZMPzYzZ86SjTbaKLehxfoTYog/5+QX5NQQ1OwpIvI9f54rCRlY9fVeppwPlmXS09wUNay5bHIm+Q/GHkGjtEBUtDQfuGGJnSAwkp888kkFiMDWvmjThhoYbQrKp/P/MJRWt/5tG+TZuXMnU/Trq69WBVkUTLzew5uE7f8rBNYlxAtukNtF5Lcikl8BjjVgrQr6rzgTeWr69fM2jllEC7EmWEBCIDIuS31SheCOoznk4/zavhfp0GlZuNDzJnbtinW/8eF6TFrvhaBbJxj5p/5OPg9u8+ONcDOZ98KalfYamzVrpowYMcJYbLC8ZMVJyWatWE9EpmU9bgRszn7pi7jYHUgR0Xw3uNfKgDWLeZWHhc9BRUf7yLZ7UBoNFS1NBzM3qYTWejDM99MmBpNymzbr+D/bmLgL73f8HkFSFYgTT6TkU6wL4uwMXfFihU0Y+xzOj3OmcZ73u9WmmisPYgoiJmNEBTtWAh1ZsMniyC+X1BOOQWwPY5sHtmbI7NlubGx8cFkwRiF+4ccS5cW/ReQpEdmXA7Ko0sDQ7Q8UFxsTQvGypgDhldT9QoBzCLosIjTy5Dy/0rKZi5csWZZaGNKDiHudInrTppHVno2Iax2XdJ6iBTHxExEzBpEmJiy6BL5j4UTMMTcwR4C1+vXuXW3ECxZH4nq8B/8vaRTis2DV4QHEJnG9E9NF4aSSL1aaDhUtjQum9mN80zuqP/b4c8N6Ny6ChBt4HfNgYkm6e2xsrFUnHYWF3Fh4iLFgMXGybgjgvVhEThORk0WMCTgPiBkKyKsgWOfOXtkL3C5pIS05BObvZ9IeqwQE5xrRwtgz5mmzp2zWThYXUxYYa1Ku44JQZgEMcV0FFjN6CrDbp+Ky+U7TWrNsw83evXtXUrTkBfMfwcgNcrQJAKZtA0X4yl0r/L3Y9YhVmAw4xLL96XyfYXC980BEEdhL5h1u1idFTNkApZkQe9FUUoOTmU6ppJ2WjcBngScAjgc3rxUrzV2YNBZMUpTQ58FkxELkLN64jQjWvcQXMVknHOqZBJSbRONCE0BYsiSdaMHC4mSzkPFTCcb6litjHsHSVWyRKIeNvUlrqclKbe0CY+WJ6z5xRDEmLXbhlYDjGtHCoso4JbUIAe0aIC9LlrVohPCq82UDU+Vv/FTxgvWH76Vbty6pry8Xzp9rNXy9MrZcw14F6BXGvR0B9/y3/AcC5j4RuUtEqAJZ+UZdSklUtFQGbkwi379PH7NSbh8mJ25WRIpnBnUzj5ViMGbV1T3NBFRbu9DsjH0Y/1/5rrejREzmUVpolGjIZjEqpHNnz3W/dKmbAR4PJlvHNUSNkErACRLASLZMeIwT45r1GxtqtADZS7hSyhG6noDie2RWVYICqyAWqXXWSd5B3F5LefTFsiDSQ3V64pupokH03O3PiQFYkAmqzatoYymYb+2mB7iPEDFYb3k49xQgYKhfxINUv5tF5B8ipqCg0gSoaMkXbmqCF4l+jwyiZZeJn5YblEcePWzWdhB7ffv2NgF5TqEuUnbZHR0iIlNSjlOQn5uXlQVsvICzMMYmwl9fiSBkS7BYl2u8WAoaMgK9cpqCNSnXPWOJFmeMKyVYoGABTDvGdlypR5MXOYoWYvZwuWAJDejatYuxrjSVJdlzs9MotJMRLAgXLLc8IgQMVnOqR1/kx79c7weq51N9UYmFipZ8YFuEUCGTpcCdYGFhReHH8dMq6WDy69ChncybVxtecIgjekFEjkwZ5xKIljwnVrt7ZedXGDYRlwZWalvYz4XMDGJSEHDUviATCjMPFhSa8FBzhKwj3EDFMiiCwn4RE3lsrNuiEh2t41Bb62Uv9ewZGM9K4nzWUjVZOCD1RLBGERfR1+/Vg7+G1zHGr/pjHBXIyneHmdDMx2nH2Fpa8nIPgePKS2tp4dqjtlIw8Ij26uoeZgOXAXsTlCqCGRvub+ZnHmUEDN8Tna95YIG72rfAeKY8paKoaEkPecGbiMhevn+2IGATuDFR8KTmRUTiKxWASbBv3xrT8C9Ucp1yrv/xJxmCHpMQpGDmKVrswpTWeuOmpfs9bmaGPhgLKEGFWJlK+RwpJIfgZrdIsbO/+GMVJhDiEXEOsbGWlsUJuk/nyYwZnrFkgw3iFWBzvm+vRXQhlCUgBZqaNqX8OfQkIsONRZZg6av8+Bi76BLgFMzFaa8Jgk0hoxBwKNADpT5jMQ722xh4ZjYGqn076dWrZ6q4nVInlydhAUNAL/FCZM85cWTApugK3/pCzR26YVNDSqkQKlriwZ2LaZBJiuqo/KRCZGTBCWItunTpbBR7ngudEg8mfcrOU2U0VMkUmznmaSbR5+IdyRDcI3l+l1lFS8TCxkpM5U/M7+z8ECtApCGWFKxN7PgJLKS4i23mh/WFZng7i8iB/oPxIR6L5wP1OQwR7xub7t09o1Xa4OOsfPaZlwYctxOyEwwbjIE/Hog7guuZGxB8xP0QV0TqLDFURFhzzSGYKQxJtgxC0pY4oH8DYpGKrUEdoCxjbOu7WPGSB46lJalFg87o/0RH2XPB2tyzZw/3uKmpr5fVVHAo03IkEwh1b/PZyYwtaenMK05PLhsa8F2/vxSJAFTnVXJGRUs0VH+0Bd4QKTzK1h73Asq6um3dlSYAgdGrVw+zyNqd/fbbb9+pvr7+8UmTJpGpETdwNSRa8vsga0z5nVK5SyJSrymxe6yI3OT3kmK3x46ewntBE8QSUCfj635MFtaX10Tkx37FYWpaGCLeNzak4sLcuU3TRmr6dM8zE7fUPaUFQiBauAIO8hclXB2YbhCI7LCLudbCYFGhxQJxbzv6YpKial4gPaOwAAAgAElEQVSLZp80mUNgRUuJtN6sJLkDEMF0Fw8ECxu5Hj0i93mpoQSV/2KsVknOLxXEIPbosa5JS0e4MLc4cWlYNU/1e0zd48fApI2nUyJQ0eKJkV1EzMNWo03UHY6JnIAy1HhTgUm4urra+O1t6qNCpog3SeJOGTt2rCxatKjT8OHDH16wYMHImJVNg3skbaxBFLY6LFkTc+fG0RSFIMpY3EJBmwgOdvG0DP6hiAkSTNI+Gn/8tb5Ioanf5SKmLgktDAIrQ9pqrVBT44mWOJk7lWD+/PmyePHi2JYWR6B18F1BFDAkkpiCaIjCJFHFWF8QlWSgIDBxK/xRRF6yn5fvNe0YV8LSUli7MBAI5aBX0GN+7JSBeDMKE1aQKqKBGkThVAi+J2t98epGLTE/QzBvUPCS+5Iu31TvLhCnSjrWRtGCm4fAMEQKPwmci92ljIUCte3VUqFS47qpd0ZZIeDulFNOlcMPP7KgJf2nn34ijz76qFx//XVmol7bQbiQEn3hhRfKVVddJX/5y196nnTSSbiK2A26naobhUWLaFDLZB5ZCDQWLFKrVgW6hEBQ3EAshlHBnnHB1YHlgPL9pHaeHX5h2gUVrKUlSxXgrEybNi2BaGkwPdI1myJ+FIjMYvrHKkDtD2KI6J+Fm8mQxZJlMxHztLQ4Qj1OzSPmV4K6g6BbLCyVFCxkeeGqsX3BiDvBhbNixRo9yabFVtv2KoavKc7JmGdxe9pMUCwuWF6cStWsLVjXjvNdZWQeNWaz11ZHg7uyFYIooVYKJfMRKv3ifkYu5HChN/7dXAJqt9lmW7n++htlvfXCrnaPQYMGy5ln/kBOOukkOfvsH8vYscSgrt306NFdbr75JjnssMPkm9/8ptx5551Dx44dS7ddYj9KTcZBSwBn15mJhQutaElvLmeRCgUbc564dbI3nfHA/ENPHC4eUxEXsjSM5FplEZw9O0vZnGx8+OEHcuihh5n+R3V13ndQDD4rO+rQwk2TPeaQdMV1GoJgtiLTdNDMUgLBBuA6RfGKEscu4YiW0gMmxv3FZiCYY4lhcV1CCF8EbJa+WwgVAmOXLVsRxPC0bbtOFZZLYgmZq7/6qrNJA+ceYUxWriyemexZuBpWG0fQMOfHETVcL7Q1wapE0UuEU2j8cF1RM4pmm1QCprFp+WJBSgNiWxhaEPgUKeyGCZYdJ8GJV/oXTFHBYqsn4uahYFm/fn1kvfX6moBOdgncCM1FsGy99TYyZswDkYIlDBMzwoZJWvH6JP3gB2ca99mf//xnFggCBf9cZmxCfYwapBmnZt48L66jT5+CGMxEMDGHIOjTK7ObHwTxvmEPF3fyLsbgwYNl5syZuQaKJuW99941C9TQocTGlscRacT55CVYwgQZalksWTbQ2RbRK0ecysSOaMH1WAwWZRZjNokGLBAE3YYh3fy22+6UO+64K1XsH1YkMgO/+GK2qcsUDjqmUBx/mzlzjrF48Pmw8jCf9+1b+j7jc2IpQeTw2traReZYs2bNlRkzZsmMGTPNv/kdf+M51HLh/W0TWQv3CZukfv16GxeSM84Uvvy275r+OcNUMEBKWVqTpYWAEoLaiMgvW24aBW2bcfEzyw6yMenQoYP8/e83xK7FwA7hiiuulMmTX5PPP69kfazmD4vV4sWL5IorrpDzzz9fTj/9dPnb3/5GUCSZHASsRlERS8uMGV49sf79G1rK4hKxKyeWIO/+QxzT4IikRDD2AwcOMtdhU/Lee15C1BZbbCmvvsrXXhrGOJTmSoG0vKFsQrCyZ5mHqPQLth5NPhQI9VKWFlK/cZsZGDfEQnjBXn/99eXee8cYS/A999ztZt+UhcKRdDUvEVtGvZt3vvrqq2m1tYvm1tYuWtqhQ4e+HTq0X3+ddUymJy491gYy7ciyiy3yESarV3s9jKJgnkWssK5Y6wwCFNHEA5GDZSgEAT6Xiphso5/5cS/57YpaMa1FtJDpg4+YrJ9IbAwKNQIQKWkj9Juab37zpFJ1JijU0KAmB7EvZ511tpx3HvPK2g0Ty403Xi/f/e535dxzz5Xrr7+e3RIZIKQEUyjKJc+O0QG2ZkiUey8uEe6LbSopWrIsqH379jXX4dSpUUPceGBpgc03J9O7PI4wxDxDrZK8XHBAunlAlhorVrTEtbTEwXGJFhMtxFOxABtYwD3BsiaZh87Td999nxGuv/71BXLLLRjC40G8ilN3yYK/h7pLNDakGzll9gvAclKiAjOR4YiXqAdrSezSwpwjj2Lp5owJDydNGnhv3NQ/8uPHKEKolKA1uIeofcAFWyBYECWY5rh5cPP06VNjfKuem6flfuzDD6eOVQNYCRgHTI2YZ4NsBMvBBx8ibds20DNrJfR2uemmG2XQoEFy3HHEx5ld2J1Fum6HLC35bYTmzJljziOLaAFHSJRtyJmQ/n51V/+90l8/G25IfKbIxx9/nPAU8gVrI4t6XNHSrl3Bvo7/NOhKnBFSnw1egGj6ual7dy+om8aQeYBFI4Z7CJc7/YRwexgoNRAOKKa32q233m7cgxdccH5iwTJ37vxw7BYgVrCMktmGi/fvUYIlBsRtIRLI7iGLi/5CxLjxHWO557MhKk8QkV/470OQMZ25EwlXK2pKQFIIgfS3iZj7TilC+jukecBF+6iIqTFhwKJCHEr//n1NUFRrKpuPUt9yy62iRv5bVVVVL1RVVa2uqqrC/k02QkFwKRMak4bicdddd5haKeecc44dEianCyPGJxAtEbuk1HAsFlB2nllwLAGkcedJwfEi3FGxsSLho4+yJN3kw7vvviObb75FLBEf8ZnzHuPA0pLF/QbEi3BNxw3ELUfE9R5laUEwBBWTif9zGx/++tcXylZbbSVXXnmF3HYbCWnxoSWHU4WWHlsEnJ+UMYMrDgTKIiSot0KqO6EHFGDE4oYVhuBpxMY3/MBaMsHYQHORJyk3YME0RbkB5vCzimyi1npasmjBH0nxokCwdOnSyVhU3JumtdCtW7eoQD22/zQFDKiqqiJgokEpaeq4KB6kgj/66CMyfPjwcFAmuykmoTAFlpYS/vTEfPjhh8baE7EwxsZZ6Db1K7DmRWAFQDBnScdFJMA77zR9qYrXXnvNuKq22CKIGS1KRN2UYExyAMtoEDOU5TqAvn37yZw5+WVmRTRudANxT/EzzAzMu2TOhNl99z3kpJNOkfHjx8uVV5aLeS+EDBw6MIfAt0coQNzCkJWEeZd59kURucsvIvcdP1OVOCVEDUUZaeGAwPq1nxxCzBnmRq/nQjSsaSSPYAUiW00J0ZJFCz7UYNahvw8R260ZCmNFdPdFnRPLEFBfX486adBl2na5VTweeYTsTJHjj6eMggETN0XZwl3cKHkf4GYKZIH0W4L1hgyhfUk6HNHCtZCnJSA3KwACYd68eSZ7qKmZNGmiOYURIyh0XR5njPMcX04g8LlltbTgaswz2D7C0hKuacSCzMJqQNRi2Q6Du+tXv/q1ydY7++wfRR2vKMxzZAeFIIuA4oktJU0YFxZWIQQWrqzfisi3/M/ADY+owfS9p4gRf9RvoT4SLTToN0Hm3rb+6ylIGNX7aq2kpYoWJo4z7DfGDqW1CxYg3e/993GnNuDG+vr6jfltfX09plriMwrap9JZl6JzyhrY/SHkRo8eHR4WhDDVTi0FW9eIiTw1//sfZT9ENtmEjVk6uPadJoZ5LarMDcGqnmVBRZhtuulm8u67XhBsU0MGExazESPYtJfHCY7FJV22pUdMCqw2WcaYIFwaUtqstDyIsLR4KW9euXwW0kClEC/oloQ48sijZOjQzeWGG/6eWKwiWEJWTawaWCtaimCJA6LkU1+kIFZ+44sXRAw+Y0QNgWDUSCJJgOq6gRtubaalihZKjJtzJ0CdwC/MuGsDuDQiIBXzg/r6enYj9ECht04BTzwx1jW1rvUQCMu4ULPDEQ7nixhXCxRMlPX1xQtUJQX3ELCgZ6FCcS2It6DyXZasls0228wEY777btO7hoDeR59++mlsS0v79gUByMw78dROeQJLFsIOa0VaSCeGL76wuiI7q1ezrgbgGqLVA2AxoGCngbhBisi5nHTSyWazdO21dIeIDxsD25vL5yEReTr+EVoFuI9IsOBzk2qFVSt5v49WSPq7pOmw1W0NnTt3djMoWjWkCpZoOEfRjyCK30IaHkFwSkNeeskLB9p//6DoKxBrwEyLEi4QLXlaWqZMec+YwYcNy1b+gzT+ECyEedzXBRabLFaAESNo6SUmlqS58MorL8sGGwwwj3IgCp1NUV7WrOA4zneYmPXXp/SIVNI9hKsDKM9PB2MDQivKyk3g9XbbDTcu2MWL3VCY0nhl8AuegxVCUQx5TG6NzcX2DTGLu4FfrR0mgO9+9ztF6wFEceGFv2ry+hjNlVdf9coijBy5k7tbxH9Osax54UysCJN5athNEtdCheMsOFYQXBfWSpSFYEHNagWwsSMTJ3qxJM2BF17wYjl33ZVKAeWpQFwLJVqD1LEsohAqkVJOhdkQtjIlsReBm8JzCzVcRvbfnyQbkTFjKJ+VDCrNhpisvXqUMA2vtuYNVpbApErJ/Swm1ZYKu8RTTz25bBEpUh9/9rNz5fbbSf1Xovjss0+NCRv3EH1LnOuJNEd8A4FZNiIQOhNvvPGGKbzWr1/RDhNliVjwaASZleA+c9wjidlhhx3MODdlo0QX4plg1Ki4oqWBNSurPzoYX8jifoMhQ7wyVXmmlDvXOpYWTILft2OJdSjKLeSN6ygTgJu0AjJxLE6K8/32/RQFWppoCW4YzLUUj1tbee65Z2WPPXY1QW6zZhXGp1E867777pW9995T7rqLmFylGEySVGndeOONTUFCx3JHlD+VKoMBztPSAm++6TV8zWJt8dKRC4qgkWaZBVwAQRG1LAtq7959TFflSZMmZTmf3EFAffDBBzJq1CjX9ROJIwyxNGQLRAplefH9Zak2DBtuuKER33k2o4ywtJBZF1xobiNECwG5w4ePkIkTX01kEQb6/zhlBZpDerPSjGhJoqWXiASd/xAsa6OVJQwppBdffJHssMNwGTlyezn44ANl1113kW23HSY/+cnZmi0Uk+nTp0l1dY2JXSBGymlaRz+rwE6et6Xl9dexfpN+my2201lU6WieBWrVBHNDhCUnNrvs4pWZwDrY3Bg/fpwRVXGq40bEnGQVhsF3lGV8LRtttJGpNpxXHSGO48RvHRy2clMTq1hdGfppEXiNKEwKGZIhiGxpPj5FpVnQkkQL9TKC8Kwsha5aG0wwpDq+9dabRqg4N36rgWaRf/rTFbLjjnnFQXpQaA7LXc+evUw2Wvfu9DILIEYkSP3N29JCsTXilIipyYKzqJIq6aWTpCNYkIkbK7Y4xWG33by1edy4cXGe3qg89dST5v32269Bsl0DcrZmYSIO0p2zWLKAvj6IL9tXKQ8cKwsELSIYCyrfFoOCiTBtGuVGkuG8L27ZSnTVVlowLUm0UBoxKFKCGVFZeyCl88EH/yXHHz/aNI3Mk0WLvOrkdiImhbPYQpK3pQWBSYDqNttsbaw8acnZEhCIlmLjEBfcL9OnT2+WVr8JE140BRv33bcgc6wozhhnsbRgfgqCZDp0KIiXSYyt7Et7grxYtar4/NqlS+lYwl69MIqL6a+VFMe6s3a3pVciaUmiBd6wn6JYN02l9bHLLqPkscf+Y/qXXH31VXLWWT/M9UOumSjXxFZibSHGhUDDcLorz83LBG8h7ZpmlllcRLi0nOJeaRdVCm4ElqUIMRQb+iqRUowbpjnCHEJs2DbbbBsrENoRcFQzLZ8vHQ29cwxcW1ksWcB9AW+/nV8dnJUrCzKHCnCKGTbAfp40c7RzbxWUxFUUaMGipfhOQGkd0Gvpoot+K3fffa/pFXPGGd+TP/zhUnc3lhthccJijeWFwoVuL6u83W8TJni1YnbeOVubEUdgpI1rwfcWbP2ziJbdd/dOwaYXN0dwEfG97733PmVPL2Is4qUeNYSqpwaOmbUw5hZbbGkW+3KWliRNyktd48uXF6QkN2CddbxY3TRWSUe0JOqkrKwdtFjRwsWtLqLWy+GHHyHPPvu8nHbat0wWwiGHHFSsGnBmrFvILYKFlQXLyvLlhXNnhL8/E2QQ1dUtkj32CDbgqXAsAWT/pOmQGVhosloB9t57X7NwjRv3fKrP0xg8/fR/zTnuu+/+Zd+OOLocrFlYsrxqe75oyQqihfgR6+YsRpKi4VFzKxlOiKwVK750xUUBXMvApiMj2fxmSqukxYoWSGN+VJo3O+ywo9xzz31y9dXXSLt27eW8834qxxxzlCnCVil69fLWdgJyw7BoI1hcd1DeooV2AgSqbrXVMBNUmRbHEoCvK40lIBTP0qASbGwImqZw2+TJk02WW3OF75wGirvttpux5pXDGeM0LjjMae3t+5BlkwX6DVGjJU/XEERZWnCZ8r1yP7hCPoxNu6b+UFIc11P6IC+l1dLSRAv1MoI2sVG7AaVlQtzKfffdLw8++JBxkzzwwP2y5567y91339VANORN//79TW2bFSsaWqOj0upLBSmm5ZlnnjYiKYu1hZ2wc75JTTcU0gsK00W4Q2LD94kIePrpp2K/pql48sknzWJsM51K4YwJ1qyk3XdzjWfZcsstzXf+zjv5BeFiXXTbVRCnwhh17OiJrFIuolmzvCk6jQB3rt/0FReVVktLEy2gwbitBCbCgw8+xAiVe+8dY1KZ//nPB2WfffaSH//4RzJ3bvLsgzRstNHGMnXqR5EvJZ7FLfxVCbH87LPPGHG21150D0iPs6jGS4tZA3nXXex/s1gBbEaOTStuzjz++GNm7L/2tcPLnqbjgsOalfQLc+JZyr5lSbbf3vM0vflmMC1mJsqCbYsuEvDNY9myhgLfgqWF8VxvPVqhJcNxv3EA+oApSkBBGc0WAnenKawQdXMpzR8KYR133Gg57rjjpaamxuzq6F79pz9dLh99FC0eKgUm7O7duwcdl6OgXcT8+bXBnyohWmbOnCnvvfee2e2zKESZ5+OAaAn1biGtpL/f+TsOQTQqVp+0Rc947T777GdSnflMzR1aDFBufr/99jdp51SWLYa1ZoUsEQjDuA128D8F9VmyWLIsuFOJycmzr9OXXxYmOXA9UgbAwr/r6hab2Jaoz8C8zH2cpsqzU38LSTdQRP5X7PtQ1j5atKWFQl+uGVNpnuCCOemkU0ytlWefHSdnnHGmLF26RP74x8tlp512kO9//7uNLljAphm//vrrRQeOgNzwDjDKfJ4HTz31hPTo0UN22il9oTnHOsKkXz4tZg309jIgWNJmtdDdl132E0+MzWNYZMmSpWaRrCQPP/wvEx+CcCmHs1AHYxaDXONZ+H6wtCAM3SDyLLibwa5dC0NL4riIJk+eZO75pD21bOZRCK+pkqL4tGjRAk5zLaUZsemmmxlx8tBDj9S//PJE+f3vL5FtttnGWFVOO+1k2X33XeWvf71SvvjiiyY7a2tenzjxlZLn4DaGYyHNG9wUgMssLVgCHBN7XBcRJU5DWS3pA0QPPpiK7yKPPfZo2o8RgFhZsGChLFxYJ7W1XlZKJXjkkUeMxYKstXI4KfDUa6ECcRwK4lnSWrIsm2yyqfTs2TP3Fgk0Wg3j1pHBRUbsSSkX0WuvvWYOYe+vuDjXLmwe97XK2kFLdA9RFZdCAcZeidk+qpaG0vjQdHCnnXY2Jel33XXX1TU1va0oXiAi/37sscc+Oe+8n5xfLjWzMSGGhOyWKVOmlHxb111TV7dEunTpnNoaEQXBlLRhOOCAA+WCC85PbUXEErB06TL7FlgCsLgELTCKsJff0dqQtkoru39EFw0JSVXPAiJi0aI1FpbFi5dI584dGyyiLtQjSZLeC5wv9XL23HNPU9HVzSQLExHrgzCM49csiGfJysiRXjuLvPs6ufVcFi2qk5oar8qtBRcRwh2rjCtqwNbm2WeffROVKuB7Q3iHXLD59uxQWjwt0dKCwzWYDTHVz507XxYuXNTgZlMqBzUYRo3aVU4//XtyzTXXyeuvv7X6mWeel0sv/YMcccSRUlPTG3F5uYgpctanqqrqxEMPPfTXixbVfVZfX3YBbRQGDx5shBYZLqXcjLgh3WwJnh8SBrnx738/brIuslTHdSwBBDPG2a0GFhmvPku6EhnDhm1tujrzOUqNaRxYFN1088WLy1u4kgoWy4MP3m8qEx955FElT4+4Cyf2Io41y4lnSW/JsnD/MT4vv/xSyfNNAvFQblE40ptdl5G1PC5dGl1ojuaN778/xYgWxjQJTrBzEAOkKNASRQsc6ga/sfOdM2du7jU01nbYRWGGPuigg+WHP/yRXHfd9TJhwsv177wzxdRT+dWvfi2HHfa1r6qrqyeJyF9E5HgR2aCqqmqLqqqqn1VVVY2rqqqyNcFX19dX3VpVFaqX34QccgiXkcgTTzxR8iyWLVsWKYi55vLm8ccfN4fM4iKKCI6ME3cRLLxYEtIu/Icd5jVif+wxz9WVhSVLAmtRAEIxqxgqBu4sYkOOP/6EYk8JcKwtxA2tU+ZFuIZC9VnSiUILwbGIFuJZ5s6dW+at41NMiLu/5xrDleP+Psyjjz5q3Ff7718+TiiM4zbbkE1P/E+gtHZaonsIcG6zOP5XRK6yZceJb5k9e4707NmjINpdKQ0TCw0J11tvfdlggw3MY8iQDWXjjTeRgQMH1rcprPiEAPlYRN4UEYTKC1i+qqqqym+Byaft8tUtS5a0ucB3WTQp7KhxVVEjpRTOxBy4JnEZcc1ljU0I8/rrk02Mz4EHHiQXX/ybBpaGOLCYOBlICBIEZTHoCB1YY9K6htghH3vs8SZrKKvLgt29u+MHLAtYAzp3plFyvixdutSIRrLaNttsqLEUFINFOxTX1NPvgjyx2PNF5ED7N26nrNfMXnvtZYK2b7nlphJvmQzEoFM0DtVoKu5hUenevbDCLS4iXHbF7oF77rlLfvSjs+Tb3z49iNeKQ0STTqy198d5rdL6aamixXK9iEwWkXtFvCjzs876sRx11FHmBly2zPO51tXVmQXG+7nSpDRSSAyTPxMV/6b0NDtqfocPl3+vWMG/Kxf8VwlYrEjb7N69h5nY6cjKv/HTk95bXV1j0oz79Oljfg4cOKi+ffv2UdUiECfT6MMmIlSu4ue7PKqqqqJtwjF4//1ZHw8Y0P/5+vr63ZNHHuQHnXFZmO655+6gqFxULATVb51g74tF5EK7a+Y6yboAhWFR/s9//i2nnnqacbWkrb+Bi2jx4iB1lV0+NvqVRUawwBITEbMRi0MPPUyqq6vl0kt/Hyk4khBK2wZioijasyn/qZRogX/96yEjWg4//HC5/PLiosXtRyVihGEs0ZJ2fMMgDrlWxowZU/D7LDCujjvuNyLyB46JgHRTnK1oQdRH3QOk8ZOVdfTRx8jw4SPktdfY45QnIq38IBUtiqWlixYgvmW4iNwiIkcQa0GVyO7du69o06ZNdsexCIta/cqVK+sROytXfllVV7e4itLr3v+/Mqm7+Hz5vw3Y9H5XWO/A+3uxdWMN3bp1LwjwpNtwly4kd3h07drVCBPvgSjpJp07dyHOpH7dddeNEiBR4NsgbWe6iHzqW08+EQken1dVVVWkK2VVVf0t9fVVSau1JgLRGlXN1mLjFihmZ4lyiThWltUicquICQ40lciidqBZsaIFa0ta0YIlgF2wDxcPedTF2i0HadFca24xvbh8/evfMPfBvffeE/clkSAeHdHyiIjMEJGf8wI2GeW+37S8+OILJgj3wAMPlssvN+t1JFxbuE5DsR6Ilssin+xtqDazf4sQPIno2rWbiRXBmkXPobxwrnUCZa4WkV+LeOX0+XvY9WhdRHxXPXpE9xm68cbrjWhBhMcVLcAYhc4HK1WcYHJlLaA1iBag8td3WEguuuiiqosuuojf/UhErq+vr8eOjHjhrsLvjCmXz81Ezu/5O1VA+Xd33xxKZlIP/3ed27dv37V9+/btu3TpwjHs8TgOx4u+WxsHrCF1vrtsofMTExE7VMaGutrsVHmYf1dVVTUMGGgkVqyov3/ddauYECkAEVdklcSziHxpdoOetal4HxkWnMMPP1JmzZpVNogRS0oIJnIWT1ZlI1rYgZIiGmHSTg2BlWQ0EXNz+eXF1sHSROzmsaZEiZaCWi4Rr4sFwbdUNCYAN2uvIStKQjwkIp9b0eKJmhUmkyhv2HRQxRdrC0UQSxU7xI0WEi2j/Lkj6r4KXEOQdowtBx54oLneHn744dw+vrWkhOAax+VLwNeR/B5x0rMnU+QarLXFtcJY6IlE4Tuu5Ysu+k3sKteOaCGYfEQZS5ayltBaRAsQjfahiGzif3cUXLjej7Xg5mMBrxj19fUswETXEdxs72wrcFwQScVC6nG9uBMfW2aKJ9i/fVlVVZV/FGgjMWvWrCUDBvS7r76+6rS0b4lIYaJkgeMnky4ZDXRsdjI7GkBaNoWvrrvumsCNUcw15FS/tWYZCpAEsS3Uq8hTtPBZWDiPP360CYL+4IPkBUGJm2AnzNj4YAlg1+xiq+Ya0loBRo8ebayDY8bELQ5bHMfKwr3Awsk9jHAh/saIyUqIFhg79j9GtJB6fs01fyt6ovTiCQVjs9GhQeWTES/AvWHwyuCXi9ktDUHaXCO2ro9L1LVcDmfMSY9/wH/NP61owbrlihPuOSx6vD4iANxw223/kL/+9WpzjVx9NSGI5Ym4DomOLuV+U9YSWmr2UDEwI1uYKJL2BUkNIqKqqmpBVVXVvKqqqqn+4+2qqqpJEY/nqqqqniryGB/x/Cn+8Wb479FiBYtl3XXb4c6LDSKFwEfq8nzxxWyZOXO2LFhQa0zIuDP69q0x9XrKCRY46qijzc9yriE3zZmX+CdM8ZBn7MmX6nibFlxEkCWLyJn4KRyH9dCloM6NEJQAACAASURBVGJuxGJRFixXRx99rNlF00MpK854UlaX652FFIuLgcXTTYfOi+eff87Euu2/f4GBpAFekbUCQ2FU6jMbGWrgGNKMbxjc33vssaepKVOsN1eUm7MczpgTfILbGJhTA+Xr3hPEsnDPORbJAigmybmeeOJJUcXjIuGacsZqdAvOdlVypLWJFmR8OEiUKLWgyqfSfJg69bPxIlXUcoksekbwKzu4QpGy0IgUm1XCotG7d7UpfBVV4CoKTPOkb2O9ePdd4oqL41T8JOB7aujZ/7L/xkWAqMoTFk7Sb4lrSQuWgBBYVaNyT73ytcZt4VU6TcqoUaNM9hlBoW4RvqQwlk7WkBWKEIgWBEvIipQrLMzjxj0v2223XclOxYgDx9UTjGUIMl+CJpRZRQvXA9f6I48El19mIsYyvPnDvfysfZMogU43b2oZFfs++E7vuecec43svXf8rhJOFWpcREFxPmXtpbWJFgJJfxv6OinjSErun0XWBMIpzYP6+nqCWqtsqiVZW3PmzJPPP58ps2fPNWXbwyLFgmWlurqn9OlTXdQkXYx9993P7FYfeKB0BiUTuVPOfE3ErgcLKIG5hqjJPAu89zPPPCNbbbWViRdJA+PkWJ68IiprwI0ZBESnXVCPOeY4c8T77iOJLxuOUEQJeoVrPJ6jCLZ9h7zHPMzYsWPNbn/vvUsbax1hiKttY2cEAnMN7rNiLpS4YHlDGFpLXB4wjo7Vyg2WCYQj7lJXoHfq5IljJ5C3gDvvvN2I0W9+86TYp0y8TGG1BYn/YqXV0tpEC1zqp0BbiB35sYiQv0i2DFWvfici3xAxDczogqs0DsT4bC8ixLJcMXv2XGNGYCL0Js7SZn/qjxAI2Ldv79R1eHANMUH/61+ld6oRE7n7glki4jVYMaIldRZ4UQhqBSxDaXEWVQ4UjmNj/IMqZ85zY4GlgeJhBFx++OEHsV5TCkeIIFLCldNIvQuq1lVizC24ubhOdt11t1KnGyX03MZRgWhBFKZtQgl8PxSUmzRpYsk2A0lxxpwyB284x+DaDwn0wmsdyw+xOk5cTAHU7hk/fpxxbcVtoshYYcUJcYyfQKGsxbRG0YK7AUHyf+EbzacfYQIicr6I3OFbYcgGIciPWiRMiFRrIv3oDBH5mp/eSvBfscBZpSFYuBAnbMEZS4L6WNHIdCJFnTE+e+XKlbsxYbL7JGWSbrKk3BaD52QpKta9e3fZc8+9THbO9OnMzcVxFkQyrqhT4/KU/UUlYiyefvq/JtA4m2gpyPrneyHLxRJYXhCEaVKdGU/S8R9/PHtzRCxujnXL3fFD8Ebs+J1A6dyYM2e2EWGIhFJCg+vVqVHCnGGhrsyW9j9pLVkWzgXhUq4YYlIc0fKfCJctm71AyERZuLC2RBSnKwDrps3ci4tzv5PscGzc1yqtk9aUPRQGs/JPfYsLGRPsdkp9VuT8Fv6jFLbIFbs/HvP8NOLZ/r9tijF+YFKQ+cmjNcEqSFntDfyfA0RMp1vKbdNGnkdhXmQJcAnZ7J/ly1fUrV69+mURk1rMz5NFzO7KLBxZJ/3DDvuaiYMJB+AWw5mYyV6Jir0hU8TUDrFxAVnPMQx1fYitIA6AwoCkaCcFQcjYhcz/CBUsGIjwIGAm7XlbQZVHR+eIxTAqE4cq2Oz6jbrlNWnEVhzGjx9v6osMHTrUlMsvBkIiVIAQ0wzlEJgLChZY3B1ZoAouIGbzIiKGqNjB+S62432tQA+LOT4bzS2xthS7lnBpEadF3Za///3aWB/BBvqGXFJE0d8c68VKq6TUQt4aYFfPJI2FhYA4cv15bCMiNSk+IJMRD1OZMwFWvFghQxonVgce2Fqj/o0p3AoeovdtxpBNfwb+HrWYloPPANSq4RpAtLGLIbvEPngO/0aAsEMnEI5xTDNuURB/9PaXX67k8ZaIvO678KwZmkXpBvtCJsVSO944IFqYpMstsN5EHljDoVhzovH+98LYmQW02ISdFlxExOEccMBBJnU0KVbshUz3WL/OFTF1W+x1kGpBxS2Aa4gFferUcIxyOhzRggU0KlKajQJB0dzH5jVY6CoB7gxECy6iUqLFW7C5hQ2IQcotkB0XiJa0Qc5hEK8zZswoeS5Jccaci75YTwtEy3kcP0qgcy0gHm2huah7lQwj2yaBAqB0NY8DLqK6uqDbN5G8zFvBgCtrF61dtFgw71NAIlxEgqJwWAWwEFgrARGPLMy4g7Am5DU+VgisjWCRQpTgXuHBv5mtyvVHoOos34XBySRITE1Nbxk5cid57rlnZeFCtGNxli8PMjwBUVhsIueJFGwzcQu4cvLmySefMIGX7LLTiBZg7EKiBcsY1XHp3WXAxZFGbBGfQHXWRx+9LpeP7SygUVYWC245I1pwJ7GIRi2SWSGtmOBR3DI33EDHkGhYrHmEXFXUFEHQsjkyZLWy0AeMgOw77rg9+iRS4lzrbBwoQBkFnyfoRcS17l4z1tqCJcb9mwUXETVwiC2LK1pwPYVEC5Ze7rf8+hcoLYq8FuWWCIsmflo36MzCTr+vI2IQMlga7KNaRHr7j6asjNuUYBGybQBopOg+ik2C5WC3asAPnjXrAjcGcRt0ni2HIz5oDIlPvxgsrka0sGixyPE+cYhTBGzBggWm/Pkuu4wyri0n5iMWLCCMITEHPrjdTEVfcIIdY3PwwV6AcLEiZ0nAuhU6PwjihSLgbz/j91G7/rygH9lbb71pxG7btusKrTuKgTBcuDDY/JNyRExcQFbRYlOF83QNMXbO9VRqzLEII1xMnyrETnfHCcwYeC6iZUVFy4QJL5rWA4iWSy+9JFaKvA30DaXTc+2qaFlLWZtFSzmY4VmseGCOLgdZGJjbuZXtw/7fulns73HH8Dt+2n/j8Ca7hucUj0atPNYtZV1a/MQkT9yOHQ8sV5jvCbLg95UgWFRZdLPupA899FCz6Dz5JLXKPKJEg10EQ5Ta8UPB39llxrUKxS0C9uyzz5oS+SNGbG8m/aQwdh07tpclS4JCy7S8CK6xuOcbhkV8v/0OkClT3sspa6iBdatYbAU4u/7iO/usENey7bbbyXbbbSuvvoq3ORpHtKBaaSNiIMMqrpAtxl577W0EBr2R8sJaqUKUEi3AtW5Ei3WhhgPnySDyXEQrpEePaOsX99dDD/1TfvjDs2S33XaPHVTM9VtXF7RCI0OrVANQpRWjoiU/mHVZxJNHSzbE9kRCyNicv3DpfxuLwI0bFK6KCSsXuybECY5ixBn+EnwbCJTmUG13aLiuTjFTc1zoZs1umYJttbVr4qKjRAMBlaGgVSgnWnB5IeZM6jwujjQioBTPPvu0nHfez2T33fdIJVoAa0pItASChYUmqkNvOSgo16NHD7n5ZhLBihMlDKNwrFu4D0tZtwp2/d5r1zQUzRPiWn7wgx/KLrvsWlK0IEqctgnBGGdtN0Bj1JEjR5rvnuDsvHBcQ3ZMS+EI9IbXOteZF1yP+yg68Pj++8cY0UJAbtxMKI4VapnAho/6QuVEltIKUdHSPEFA5B8g0XIwDdoAYZFVtFBFlEWlXAAuOHEVcSZyYl6wCpzI6ysR10INFMqg77HHHvKHP1CGKDmMIWPgVJtNvaASHAxPPEGGbHGihKFLCusWBLt+hGaluj7jmsMtMXw4jeRLg1h1q8JSHC2rawgLGy6SF17AwJQfzrWKCcfteeaCKx0rq4k14/WuQPdcRHWm+3kx0ULQ9htvvC777be/eU6cejsIQqw6VN71wRKromUtpCndEIpSjMA1hGmdeIwsHHroYcY1RCO8cjgTOasENXzKEexAmVTzrh3Cov7cc8/JlltuJdXVhFGlo0uXwiwbxjVt3Rvqs8yePatsK4Q4RFi3SrmGLA3ccpWAjBcyh4YPH1HWRcmC7fa+YnyzujZp8AkvvUQlgHzwauIUxOjEGXMEeqjnVoFLz8DnR2AhRByLZQFkxXXq1MkEc8fFEUFsbHLpEK+0LLKtBoqSPwQ/B/2iiu3W4sIij2uI2ISwayiKiIk87k6OBTRIPa+EtYUKrYiMchVaS4FosQHNLKRUF04jCIcMGSKDBw82bQZKLUy4huLgjBcrIXVkysGuP4incixkuTJ58iTjCuNzl8Ib0x6BSGHxput4VnbaaSfTwPHNN4kJzwfXIhTDDWoJCfRVkYG0WJZWry7dG8pWe07SW8uxuJLhWd78pbQ6VLQozQ12UMF1SQBeFghgJG4jTq+WiIm8WH0WF+IvgqITEcfJDLEVCATiWtKCq6amptr0bOrXL30rBKwsUK6jcxzXEDixFZgTgqIcJShIRa+EULRMnuzF4W+3Xfk1ElHYr18f08iTcc5qZUG0b7PNtqZ0f6nspaQ440U/pzjJBlBg4YoSi9YdVqqsPy6i99+fYlxEBHXHISIgP7DIKmsPKlqU5kYwEREgmjXrglRRFvs4qaKO2KC+TLF0+CiCybwSomXu3LmmM3UW0QIICVKns4wrooU4DwKbs8J3s3JlgZshjpvCEohKKqa6jfzyYvJkr8UU4iEOxF7YSsRZ4T35vvJ0DYFzjeLyidumfLqIBOWBo651r1Fn27KxKlhbaK2x886e+6scCECnq3ZQFkFZe1DRojQnyIQKnNxZXUNYWFjkiUn44otSySgezgRMQbmCsrhlCFxJuJlICc2bF1980TSb23TTzfI+dGwY0x133FHefvstWbSoXH3A8jDmjhupYCdfhgL3XZoaNnH4+OOPTdbOFlvQ6aNxId0aXn89riGkPN71GaQPQ1w3qCV4fpRoASykxHeV+k6eeMIrP2CDuuPgWF6HicgmcV6ntB5UtCjNCeovBHmSWV1DBE+yk4tjZYkQGknNCATtBrvVYpN5FmyNDrKImgqCgWmQ+NJLE3I5BWecUEHFi6E0hK6XH9lfV2LMgWsDV8bmm2+R2d2TlG222cZYo958M4nRrzQR45TEugXB8yMEkGGNi6h4EiRZcTSmtO7GOERkYgVNP5W1AxUtSnMicA3hviCQMQtJqohGTORJRQsLbhApGXG8zCAUWCR23nmXzMdKi81kocR9HjjjRNptgQkgBrRRMFRizC1Y67p16ybrr0/8Z+Ox3XbbySeffFI2iDwJzjiRwkwH9iQw5oEVMsqagkuLIO9S6cyIMQonbrjhhjJoED1Xy8MxOXYIjWtZy1DRojQXUCimHD5E7KgSQxAuGUM2JqEUzkROYGLxtr7Fed7+qRILKCX933///Vjpt5WCTCxqvZSqDhsXL56lwI0WCJAEBGNOnI1bh6YUcbOb4N13vd6NWFsai169eskGGwzI1coCzrUZjF8CuD+CZpbFrnUCZ21ri2LY4nK2g3UcHAvsKL+NirKWoKJFaS4QyxLqOpwta6h///6y+eabm2DRUM+SojgTL1aWJPEslmDRxSIS532TMnHiqyaNm91pY8Mul3iWd999x/TlyUpEfZY0C2jBa4otoFHEzW6C997z1uihQzePOlRF2GorQjZE3ngjP9cQqchOvFUaoQghgR7tArIpylEZRhZ7f7LBiIuzoaFlAm5lZS1BRYvSXAjMvFQRbdcum2hhEiTboJHiWSxM5KF6LQ2Lb2WFCq2w/fZBKZtGgzolxAhNnDgxl/d00m6pxprmwMS0ENtiSCJakkAwLgwZEs+NkQebbeYFXNPfKS8iXDlpRUvwOgJuowR6HNFCx/XXX3/db0oZr0A7weA8QmgW0VqEihalOYBCOc6eCFlDSXbBURDch7WjXC0RiJjI0+z4gY7W79vzqcQCakXLDjvsGPWxK8rWW29jjp9XUKgzPtRnid6ylyeob1+JMQfaKJBBFDf2Ig822WRTcxhS3fPCGR96jtE7Kw0FMV9R4+7Fn1Add0XJIoQvv/yS6a9EkHdcHBcRbuWauK9VWjYqWpTmADul3vZEOnWKbrQWFywsxF4QPDlvHg2qS7NiRUFcBRN5ltKjwQ40Qgxlhh3//PnzTYBmY2NFSx7uCuJZcA+FSLvjh4K4FsRqJfjss89k4MBBlTh0JIiWxYvrZNasPHqwejjioiDjLSHUEPjQviZKtADWlojYpQJeffUV8386mcfF6XnEpufkuK9VWjYqWpTmwHfsSZA1lLU+y2abDTVBjHHTch1xweIZt9BWFMHiS7GzJIGhcWABoGbHRhttbHq3NCak32JtmDo1yDJODXEVfJYQaa1bkDquJQmffvqJ9O3bN/P1GZdNNtlE3n//f+44pSZCPGQRilBWoNtMn2KiBl555RVzn9DJOi5kFjrdyb8d97VKy0ZFi9LU9BcRry68pO86HIZeLRAlWtyMkYgdP2m3WShYCBxrQi7gnkHcEWjcWPB+mO8pKpeHEHOsW5hcsnQDJOiDCsaGSow5IFqw4g0YMLDiw444In4oT9dQhFDMTbR4Ar2hhcurDFw61oigbrLicHkmaXvgNPscqr2I1g5UtChNzVHhXkNuq/s04BpCjFizcxg3VoaUTGfHn1W0fCIiM+x7VsJFZNNvhw3bOs3wpMJadt56661Ur3dxxoXo4iXucxKAyeZF+/xKjDl8+umn5uegQZV3EW28sVfo9YMPkpZQKY4jFJeLmHHPgiPQGwaeI0KwipT7TohrwTpqP3ccyCJyRM4xcV6ntGxUtChNDaLFwOTmZAWkgsyaDz/8MGY8S8FEy44/60QOnpPeZLPkX87/nXe83oyNKVo23dQLCrWCKSuONSQQHBkILDURqdS5MHu211S6pqbyMZ/rrbeeOefp04PEqMw4woGGSmkDny34CQk+NxSzcNEviFTrYn8Hu8EYPrx8U0oLgb62a7mPipa1ABUtSlNCr6Fd7QnkUVCuT5++pj/P6697Te7K4UzkFMRYWu41MXjZPifCJJ+ZadM+MyZ1mxLbGAwZ4tWF+fjj7PEsuJccF1MwXhkISvR6sRtJC+uWZ948zwPVOKLFq7wbp2dWXBzRkMeYY+EKjlPMmmKFRbG/A25HSJJBBM6cgXmq8QsYKY2KihalKdldRIKa3LauQxa23dbrxPvGG/ESgJyJNJ/a9KH4jIjgx8xwzClTphhTepIYgCxQowVsvZIsRARl5rGA0rMoUCqlFsi02Ey0Xr2q0x4iNghvmDHj89ivKUWFhCKEREuD4GoDXZ8BV2wxcL2laUoZMWfsU+w9lNaBihalKQkmGFvTIStkuECcWiIRwYNZgkHDFCyglXAREbhIbQvrRqg0WFooBBYnhbwczo6f1FkvWCQbxMQEATelXBFpsZ+disSVBtFCwba5c4P44kxEjEceQhHKWrgI4l5nnTZR5xBAmjpCPGlTSo7tuJRVtLRyVLQoTUmQ4+j4plNDLRFcMpSaL4dTzhzyiK0AFtCgaFfE+2TGWjySBC5mgbYBH388NcshAhwrSBD/kwOB6Iyw5mSmrq7OfJeNIVr691/PxNDkkakFzpgTnEPAeB4g0IMSAcUsXMSrIcKcoPcCuGe9ppQbJDqvDh0KGih6qYNKq0VFi9JU0DPE8+XgI2qXraOzZdNNNzN1RJwS8ZE4u0+63eY1kUNBYGjeWAGx8cYb533oBpB6S2bH1KnZRUtEvEle1i0Idv2eO6RhCm4WOPfa2gXSo0ePLIeJRZ8+vWXWLC7JfHCu9TyFIk2oguaJERYdA6KF8Ysq92+x/Z223HLLRB/a6fpMaldQqFJpfahoUZoKGqt0tm/OpJaVLl26mkaJcdNEnQk2Td+bUrADNZTbYabhk088fUUX4ErTt68XX5FHUGhEinlebgooEECVsHAhhsmGqTRcy4sXL87tbZyxyFMoFox7MdFiNyWl4lpwDwFF9ZIQMXfET0FSWhwqWpSmomBmssF6WWCyIzD1ww/j1bZwJvI8Up3DvB7+T7HJPC0UOiMOYIMNkpnS02CzZWz2TBacMccUEoi7HKCsfNB+uhKihe+xbdvsArsUxGl07NgxN9GCaCblOESeYw6B4C8m0PlMQBxZMciKg/UTuoeYO5yA9MqbH5UmQ0WL0lRQCTfATmpZsLVE/ve/8g3mmDydHjXxcqTjQ0xLUAQm7wWU2AFERNIJPg1WtMyZE5TkSI0zDqjL/MwJXodt0tYNeQtF+OqrlbkI7FIQYA15WVoirBsFgjoHCo4Xda23beuJllWrimcQEcPDdZ1GiBPIH8IzDSqtEhUtSlMRTCx5CBaw8R1xLC0RE+vknAcCwUJ5eUMlFtBZs2anmuCTYgNP88kcKli08l48IfgeI77jzBDg265dZd1DXbpQvkhk6dIsRYLX4IwDgTJelbz8IGsrlG7eUJggKrCGlLK0sImYMWNGKpcn2UkhVLS0YlS0KE1FSLTkcxmu5xfksuXWS+GICPJK8ys9uoZgUa7EAjp79iwTFJqX6CtG795eXGMF3EOBVSRHgjGPsKZlxrO0VNY91KmTtbTkI1qca70SY75MRALzZrFrHWtLKdEC06ZNM0I8af0hx9JSYMVVWhf5rBaKkpwgwt+ZcFJDbQsqxS5dWr6orTOx5u0asoRES+l0zzTMmjXLTO5k91QSe/wFCxZkepuIeId4FQCT4bgqGu76s0BNkLzSkIth7wfHfZkaxz1UCdECwbgXsyoirsuN3eefTzddtJOmlTvCXbOHWjEqWpSmoqd947xEC5lDM2fOivV5nB1fPl0AG1KwQJSbsJNi3TWVTsG1gacRsRGJiHh9JRZQCvSEYonyFS0dO3aKJYqzgDUH8ghOR/g4112lrvWQhSt6zO19XqpWy/z5881nT3pNt2lTFR7yyuekK02GihalqchVtGBxIDV35sx4tS2ciZysk0pQ0KinnGk8Kdai1KNHMJQVwS6edjFNiyNaWJ2mpz1WCRAsH9u/lwr8TANBspSbryT2OllnHa/8fRYi6qJUSrQE1Ry9eiwNs4Ssy6eUaLHBx6R8J6GqqmApU9HSilHRojQV3ewbO7ukVFBJkyJTxHmUg0XBmTizdwGMhkU56KSbv2jxFk8+eyWxi2fW83cW0DwL+bkEx856zi6kIi9bVt79mAUrDvMouBjx+b284vwpaMUQIZYC0eKkXxeAexe6dk0mWhxrbWX9pUqToqJFaSpCtbcLTLupsGmiixYFZTqKEjGhVkq0UIcktICu9Oz+OWF3/Hm4EUphe7tktbQ41q18OgFGE1haIhbtTHTqVHn3kLVI5WNpKbB4oLayBSYVp0C0RLlC7eakvr54pWJraUkqWqoKp5DKRkorTYqKFqWpyK5UQtiMi+XLl5f9PM6Eygxaqd0nBAvo8uVf5lmTJPisbdp4NTAqhTXrZw0MdV5fSdESCMWoxTMtpCJjzaNxZCWxqc5JF+4oGnHMuba9gBSaEUW2UPBu+fqCOneF2E1Hxs+u61orRr9cpanIVbTY2hbLl5N9WRpn0mQrGh05mA/BCbVtu06uwSfWApJXIHMxbB8nsjqy4Ix7bZZjxaVU/ERS+vXzMmlnzKik3hJjQWPM6feUFefzV/I6h8DMGTXu9nel3MFWZCZP428wnVRWyStNhooWpakIrA6lzMVxsQtqHEuLM2liSj4t7vskhIlzZ/uavMWFPV7yCT4ZdudvXXBpccZ9w7THKUONiPykEmPev79XWihusHcWyKLp2TO7aHHGnH5fO2Y5rxJQES/oKRElTKzVp1QNlrRWPWcOYaPQMBJYaRWoaFGaiiBiNtqUnAy7QytW2CqMtVCEuF5Ezkz2jmXpJCJ3iuRf+ddiP0ecjtZZWLLECzzt3Nmr1JoWx411hIiMTHusImwkIs+KrMlMs+Xj82DgQBoIewXQKg0dnknhz4pzrWOOeFJE9s16XIe+/rgH6U4R95i5RxElpUS2FeJJ5wTn+V+4J6i0HlS0KE1FkJucNVYCrFjp0KFj2c8TEbhKDMTVIvKP8IKXga1E5EUROT58jDyyQcLYbsNxgo+zYHsO9enTJ8thpF27ghReLFzPichZIrnMQ8eKyCs0CRaRefZEoxbPtGy8sdfj86OPKpUhvwYqw1Jgzbo90xIhWupE5D8i8mtKwaQ9boh9RExxxm3Dv4zovGwC4EsJFiA7C+K4ecM4sUvx6h4oLRIVLUpTEUwsSXdVUaxc6dUTI7ujHOz2nEmVRY6J/GQReVdETheRNA1m8B/8nz+JD/N3tQF5ixZbNdSmiVYKdv2QVbRYkeXDrp+4litFZIKIWfzSMFxEHhWR+3zxc56I2fkb2rcPJallhC7iiOM4bSKyYt9j4MCBmQ7FNee4Y54WMbVaLhIxxf0OSykaNxWRu0TkKWrBhTs9Yy1xLVxsTMjkitgwFNCtm5etnFSIOxsfFS2tGBUtSlMREi3Z3c/WRRI37qJTpwKLzA4icoGI/F7ExET8XUSmisjlfgxAqSpfNIrB1XG7n958jp9Wyu+IITCweJbbZSaluppTlcQTfFJsDMd6662X9KUFsIA6cT2YLB72x5jFj2aHP6L3ZZk3QhwiLFmAJ4nIISLyqh8/FLicWKw7dswWPBxmq62GmQ7iESnzuWObfg4dunmmY0eMwaEi8jURuVVEODjjj1D/hYhsWebNCLI5UUQe8ZuBniAiU0TkSBEZYV/r3FsGGk2CI1wb0KNHOtHipLaraGnFlJqMFaWSBB2QbanxLIu6Ld/fpYvXbK4cTKzs5vyMFnb9fxWRXUXkfhH5k7/zP1fEPAjsY3dK2gh1LjCrkwnE4orPwGYqUEgONxOm9x+ISLBN7ty5vAUoKVhaGDvrvqkUU6ei39Z00U4LC2iXLp1k0aIgBnuUiBwuIneIyKW+i+EvIuZBzBOLKR2JyTGmgh4qjYV2/dA58LzL/HEnyHS0/RuCpVTQZxIGDRpsxvvf/348yctS8/bbb5vXbrnllvLggw+kPg507txRli4Nkti4bn8uIqf4lhLGbjsRucR/YP2iuu0M3xLGDcVrhorIkNCJ8Lw/+vfKPSJr1pKoa335cq/GYjnLF/3DYM6c+I2ovQq8T6bLPgAAIABJREFUBYlRXDdKK0VFi9JUFDS2o8lax47psxQXL64zD9vpuRy0skfg1NUFJdl3ETGuhT/4gYosgKeKyFF4RspkXWBmZ2W5QcTs8nBZnG/PgbiCPHf8lgEDBsoXX3xR8UDcuXPnSG1trWy0UTkDSHnsmIdSYgmC3sa3SuGqYDElUBQXT+DmccA0R8AtiyXBzqzI1X5Mksl9Rax0756sqmopRozwDAmvvVap3pqFEDdDJtywYVuXOq1YYN3gEQrY/q7vUvu378I8wLegYIHB1YOYjIKaRsRq4Yoj/ov4mG/6lhYD17nrAuK7XrZsubkP3L+5bLDBAFPEkOs6LhE9rQrmFqV1oaJFaSoIfsVqYWqXECuQdWFnohs0yMvwiAMFrNiBhmJq2O1Tep+FkKBOHmQVYU0h0BD/CCZyKtuy0/zA724bnmHx9bMYBDExPXt2z23Hb8EqtfHGG8vEiRPjfNTMvP/+FLOAsvBkcY/gHurevZvU1gYF2hAmZLTsLSIP+Q98OsQEEdCMYOQa4QVzfbcEi1K4UB/WgAf978nQtWvnTJY7l91338P8asIE1uzKwxi/9tokGTFie1dwpKJHj24ye/Yca1lkd4Dw2MuPRSGeiwcWxC1EBKXE98K4kzpG0bj3ffdduKLugSJyoz0h0px5HxesLFgE+U7KQYbWjBkz3MDakjgZg5Suq1R/JaUZoKJFaSqYXN4UEbMaROyWEoNoGTVqV9OVOE7JeSbZnj17yNy5QSFPdum3+W6f34qYnSUPJmwe5WDHyuuDNBssC+VM4mkYMGCAqU3zySdBwd2KMmnSJBk5cifZfPMt5K23+NrSg4sIK4J1GfgCZZzv2sFqRVljYlR4lIN6L//0F1oD4921a7b07DBYbfbYYw/56KOPZPr0aeXOJzdeeOEF2WWXUbL99jvICy+Mz3RcLBz0qFq4MKj/xgBhrfqOiNztHxwxzvjH6b6NmMeNGkQ6I0ajXLx1dYvNGEbFuoQhc2jIkCHy9NOEKsUHK20IWnKU7+WhtFg0EFdpSgIzAabrUuW94zBlyntm0hw8eHCcpxs6dGhvLCEhuCd+I2IWUW97XR7MO7g5CHgIBAuWo6idZx4QFApvvNE4lvCJEz39sOOO+dQm69Wrh5tNRczEyyJGLOLqKQeLLsHTBO8GPhQsQdXVPXO1bOEaqqnpLc88k2wxzcr48VyCIvvskzaxqhAsHU7MF6YPMoCwujD+ccBPhiWR2K0gyrlbty5FY1kQFQiWKEEThqBjnvP228lEsVOnqHFMj0qToaJFaUqesG9O59cvv/QyDNKCNQB22IFkoPgQOEjWgtN0jRgXdqK4iIhP4f9U/MSEjjBBNbBLZZf/P//fwf2EYGFhrhTswOHll1+q1FsUwPtgvdprL7w42cFNVFPTyxUuuNQQIrgOycb6hp/RwkDidyC75Rg/noIGfQicwB9BGnvv3r3cDKXMHHEEyTEiDz/8r8zHSsLrr082mVsHHXRIbiIMEY2ly4EaN0T+jhWRH/qBuUTEcq1T4Y4b6qci8oxv/cItFIBVq1u3hvFDxLLU1i4y546oKQcWJUhiycON5mQO8RmUVoy6h5SmhOJixCaYGQ13QRZXio3v2GmnneXuu9lAxoeJnOJn8+bVuv50ZtJEKogJOmoSz5PddttdZs+eJR9/3DjuITKtXnnlFdl5511MWrntMJ0FhEvv3tWycCFB1EFANHA9kFrLIxbs5CsRO0SDxEMP/Zp88sknRkQ0JsSBPP74Y3Laad8y1p684pcQ6HyuBQsWhgOiiXPZ33/EwrpXi8WiEeSOqOBeKGdlgd133908f8KE+EI85GIEXM4qWlo5amlRmhLyINm9GZwJKDEs4tOmfWZiL9LARN63b40RHWlSZZm8+/btXXHBgt8fF9i4cZ77oLF48sknzBgdeOBBub0l48zuH/GSRrBS+4XXYtVK852V42tfO9ykOt97792RTQArzf33jzFv8Y1vkKSTH4i8fv16R7p0ysE4I/K51osJFuqyLFpUZ9x1cQJwKQrJfTt58msmCzAuzpyBqoyfdqS0SFS0KE0NWQsGsgCyBuQ+9dRTsv7668vWW5NFmxx2/+wM+/fvYxZTUkUdt1EBuCQwjzOBE0tRLqUzD445Bmu+yEMP4ZlqPHg/XETHHVfQnSAXECyIjz59KF3f2S0/XwC7dhZNXEF9+tSkEjtxOe20b5ug4bvuIqGs8cFVwkJ+2GFfCyog5wXjiHUK8cI1X65iM4KV5/F8rDXFrCeU1J8/v9aIm+rqeGJyv/32N4G4//lPMB2Uhaw/J56lcYroKE2KuoeUpob6JpRyN31Qli5darIQ0vLAA/fLqaeeJscff7y8+WacJIhoEC8snjy84lWrzGSMyR6zOM3/KFXuVHitOLzf0Ucfa2qn2EDNxmLu3LlGFB5wwIGyySabygcfEMqTLyyMPIDxZmGyfWVYJKmvU2yxzJv99z9Ahg0bJnfccbvputxU3HLLzfLXv14tp5/+Pbn0Uoo25wvWEM+l2SUo9Mi4e9c6482jbWTnZhdi08jG4ztDEEX1IIriqKOONq/517/iC3HKFTjB+xSGVFo5amlRmhoqmj5mT2LJEiYiXNPpIJvmww8/lMMPP7JsyfC4sGPEgkKmEWZ1Uo0jStI3CuxIsSRRJTVLvZS03HjjDWY8zjyTgr+VBXHCOOOC4MG/G0uwIA7PPfc8s5O/6ioK9DYdBABzTZ988ilSU+O1bqgUfG6Expprvb35P0K9HIicuXPnGWspFpmoyrhRbLjhhrLnnnvJ888/J7NmBc3fy2K7j/sQMJ9+l6K0GFS0KM2Bm+xJMPFljW257757pHv37hVxYzQlLCjnnPNTs5Befz3tkRofsoheeeVlOfzwI0xxu9bKSSedbFJwb7vtH6bYWVOCBeKKK/5kAqB/+UuSq5ofZPDMnj3PpDcTwxInW8iCBYlr+/rrr4v9wYiZcUR7MIcorRsVLUpzgLoPVKI1hErrp+K22241vUvOPvuc2A0UWwKHHHKobLHFFnLnnXck2pHmzeWX/8FYPC6++Hd5H7pZ0L9/f/nZz35u0o2vuOKKZnFOjz76iCkwRzwTGVylyGCoTAUl+mfPnutnCnVJ5N7daKONjCsXC+n48fEL6DnZZqSe0dJBWQtI3+xFUfIDfxCFHigrbnaWxDXga08DAb34u8n84N8TJkxIc5hmRc+ePeWWW26V1atXyZlnnpEp5RhrFgtb2mybzz+fLhtuuJGJbfnss0/lvfdaT386XCH/+MftMnjwEPnxj3+U6rMxtnxPecc7kXI9evTXZe+995EHH3zQxH9FUSpwPE+4jkibJkuIa4kMrrgNSy1XXvlX09PqBz84w1xXccD9RP2XEHSs1niWtQS1tCjNBQIH6OdjCHUCTgV1Wii7fsYZP5CttqKFTcvmt7/9vfTu3Ucuuug3JrU7C4wtpdWzcPHFF5lg4EsuucwE5bYWGOftt99ebr75Jhk7Nn4mSxhq2DiLai4Q1/LLX/5C+vbtK9dcc20sUV8JqwvBtlw/M2fOMZsDMuwoFVAs/bkYp5xyqhFgxOwkKZKISApBDX86VStrCWppUZoL1GyhVKcpnZ/V2sIu8I033pATTjhBdtttDxkzZkzmirtp8CwaaV65Bnz+p5/+XVNG/ne/uzjTwYgDWLCgNiitntYasHTpEnn77bdN3NCuu+4qY8bc5zaua3GcfPKp8uMfn22aIp511o/MNZQUXkOBQix8LOZkmOXJu+++Y0TLwQcfItXVvcr26cnT6sJnwnWLdYW4M64dMoQoDZD0OqL55rXX/l3+v707gZOrqvIHfu59Vd2dFQJJurbuNDEJQRQjEQzK5iAOIChKwqYgyKAwjoPjIIqOK39RUNQRHFdmRlBc0BmVVZBdEAaCKCIhhCzdVb2QnaTTner37v1/fq+rYqVSy1tubd3n+/n0p5Puqrfcrqp33r3nnjsw0E8XXHB+8dTlskr0svxXbr0vNkmYfUcxFg6y/y/Jr2mCD6gSJcc9GxwccMfbkTR62GGH0R133L5n+my9hL1orFhxJn3xi1fT2rVr6cIL30cjIyOhDh31M/JlzxEYVlvErhIU8kNQhhoir3/94XTnnbcXJ0e2DEyTR45OJpOh9773HNq5M1hPFHoBkCQKCBC9zqDxA7NssIzDySef4va+IZgNM+OulPFp/rZ7Ljt37nIXWkTAgkRb5DPtt98MN2CpVtullK6ubrrpph/R9OnT6fzz30sbNmBFBm8QcBeU7UcvC4oG7emhZRMfBy2smWB1XyzCdjwOKl8nIl+3I4inn15JiUTSTWLF3V0jApegzjhjOX3lK9fRxo0b6ayzlodOvkUAVzgshItqmNwhePLJ/6NEIkGnnHIKHXHEkW7ZedyRt5IPf/gy+rd/+4ybn3PWWSvcBNwgEGQjKMxDrRPU8wlyYa8EwSYSc7FWD3pcUqkU3XfffYF6hgphu0NDm9zXCIIvTCnGawZ/TyFkbqmEmW6iLc4pSE5Ud/c8uvXWX7qvmU984gq6777fVTrVvWAoqihJ/z9za1SxSYSDFtZsUG/hXCKahQPDnd60aVN8dz8X+t3v7qWuri43cDnmmGPooYceDHwnXQ9IQP70pz/rTm/dvHkTnXvu2aHXGMKd86ZNW/e5I8edM3oDglyAANtF+86dO9e9gKIH4JFHHqYdO7yXYm+U6dNn0DXXfIUuvvgDtHr1C3TmmSvc4YqgtmzZuk9PXtj2LQeBBAKX179+KZ188sl03HHH0aOPPkrbt28v95Sq8LccGdntDmnl6+OgpxO9KvhCzkqYOjmve90SuvnmH+dmZ32MfvYz7xN+xofd9nr9otrfu1GPsuqJsQmFgxbWbHCb/mJuhV9X2GGM/IUVdS5OPfU0ete7zqA1a16kdevWNtu5u1NAv/Od77kzn9BLdM45Z/nqPi8HixIWlTx35fM2UEwsKLQv7pgRBKB9V6w4y11g8MUX8WdsTliA8JZbfuJOH8YaThdccJ4bIAaFKbhFxc5c48Ms4YbhykFP2W23/ZpmzJjhDhVh6vDAwAA9//zz5Z5SEfJSEKQgiB0vopgvLBduvgYC4ksu+Ue6/vob3Pfgx30GLIDhqfywW84/E5H3OdJswuCghTUjXO0OzX25H8756qhB4eLx0EMPucEKegSQQIrhomeeeYa2b2/8kPjMmTPp4x+/kr7+9W+4XehY6+bSSz8Y6s45D0mTRbNZniGirUQ0B4/JZrNGkkbRg7Vq1fNu+XvUE5k3b567dk4z9bogifWTn/wUXXXV1TRt2nS6+uov0qc+dWWoXCG8PpF8WwDjS+gxPAg/w+/Re+a1pL0fCOgffPAB+stfnqUTTjjRLYd/3HHHu0FjOu1tCnEtoXfl+uu/Reee+x5Kp/vovPPeS/fff5+vXZZ4/T5KRB/2tRE2YYSc18BYzSSICAVA9sMecLeGxfRMfPCjDD6GXzBchAUAb7/9drc8PQpc1RtKmOMD/ayzzqH999/fnZHz+c9/lh5/3ExtGfSkDA1tdPMrcjBL6wgimkLkfvi7xXAwJIDFB/3OAikF7fu1r33DHSpCQIRifzfc8E3avHlzqYfXBVZqvuSSS+mCC97vLsOAdamuuOJyeu6550LtH8Hwxo3jlWALvIOIniaivxDR/vg5yuDPnTvH+GyiQnPndtLll3/MDcgR5CNBF+sWIXEXwU09oZowijuiBwhthDXBPvOZT/tawRnyeTYFM7mQ5bw017ZsEuKghTWzMwqLRuFudfzCauZli6m6l132L7Rs2VFuGzz77LNubY577rk7cBe7FwsWLHSHJd7+9vEcEARkGzasp2996wZ3nD/IVNtSMLMHa8EUdatfWVDXAiVtP5V/LoaIZs8+oNSmAjnxxBPpiis+4V7AMDR1zz2/pV/84la3R6YeF1EEuG95y9+5M7BOOOGt7v9R6+SrX73WTRjGxTQsTP8tGhbCFNz357Z7XuF0XOwfgXfQ/CGv8Pq68spPuj1egMRiBA2/+c2vaNWqVcZeX8UQGGKmHnrZ0IsJ+Ft/+ctXu8G4X2UCwsuI6Jt+t8UmDjOf/ozVDorOYfzahWTAAw90c3SNQfG5Cy+8iE466WR3mAZQwO1Pf/qze0eO2hjo2sYaNNu2eR9Kmjp1KvX09NC8eT3u90MPfQ0dddRR7h0xoJfnnnvucVcRRol2U8FKHoaEisqd30tEJyGVJfcY9LI8QERH558zYwbKsKM4sRnouTn99HfR+edf4OaRAJZYuP/++92CYk888YQ7a8cEBAO4YC9btoyOPPKNdOyxx9EBBxzgXvywXhIKDv7qV/9rLGDCVOBt2/ZKfEXP4BuJqHC+NKq1np8/v1q8fstBftSZZ57tzkLDsBhs3brV7cVDLRoM3WEYCat3+4UbCMzKwyrYaOs3vnEZHXLIIe7fG5V677rrTneIE+0eFNoWbVwAVW9XBN0emxg4aGHNro2IHiGiI/MHimTB/fd3R40MExSPx9w7xVNPfQctWrRon6qjqJOyY8crNDo66t5hI/BAkiCGV5BkOHXqNGpvb6OZM/fbEwAVwp3+Y4/9nh577DF67LFH3YtILZS4oPYR0eFEVHyFwjDcH4lobv44UH+jFvVFcBFdvvxMOv300ymV6tpz2kgeffHF1W7CcW9vrxvEoF1QK2VkZJfbUzQ8vNNN9EUgiGnamHZ74IGz3fwf5M50d3fTokUHu0FKHrZ52223ub0MpgKjPORZbN68pbDiLAIVBCzFaxqgYCLG+sa7HojcxQSxCnK9YKgIARxyXTBkt3jx4r16e3bu3EHr1q2noaFBN+BADhJ+htd6W1u7O5yGQnkI6GfNOoC6u7vcgKVwmY0tW7a4Acq9997j9mIFrXOTh6rNRZVv1xDRG5CTW692Y82JgxbWCnpyiY1u4ijU44N/ypQpbi8M7t5RVwIXWtyxIvckEom6F/bxD3SUliG3fDtyOBDU4AN/aGjIvRCvX7/O/Y4k4CB3tX6hnkVhvRAiQkU61L5BcmgpqEJ8D5EbILpmz57lnlutoC3RI4KhucMPP9ztjQpTjwcXSfQarFz5JD3++OPuF5YZqAVMY0YeS8HwEnquUOSs3Po3C4nocSLaE1GhiqzfdXpMQWCH3pGFCxe6aywddNBBbuCHQnXVhq4wzJcPLLHm1L333usObSJoMTHcBrgZwLBbASyIiN7A+iedsabDQQtrFUgevZ+IpucPGL0tYSrmTkTjPQB71bPABRVd6v9T5XyRf4GhDPczARcv5Leg16geMKwQi8XcnhNUTMUCkdg3elcQPCKgQS8AgsJXXkEZ+VG3N2a8d2ZDXYJBQH2UjRu3FA/lfZyIrq3STscQucNze+aWY4HBMBWJawE9WegtRK8helbQzghUMMMObR+2InM1KGa3efNevY8ogYDE5mALQbEJh4MW1kpOJKLbC3sEMEwwY8a0VjqHmsEHPnpYiu54/4WIvuFxp/9GRFflH4vABflDYWq4TCToYdm0aZ+A5dtE9I8ez/NsIvoxJhPlH1+robhWhB5ClOkvyI9GpjTygX7UiufDaoPrtLBWgmpwGNtGJUw34MZdIC7Sk/3COjy8z5AQfJaIrvHxB344NxV6T2IuAqFoFDVG3JnRkxbyapDDghWOC9xERB9EDTmPDYMpNANEdGr+9YueMZTIr1ePVrNCwnjRkBBcTkTfbdZjZo3BQQtrNfjg78198Lt3rLgDxiJqyMEIu0BhK0LCIpKBi2A68+eKf+gBFoNBlvP4PHAkxIyMur0uk/XCihyLEj1YPyOi9xXMxPIK9VuGiOjthYE3gqHJGnijWnNR0i2CQEzF/4rXRmWTBwctrBUhIQ8rQp9ORFGcABarw90wPvhNFEhrBehhwsW0qE4IPvAxzPOFEOfw29wF1V24EtC2qK2C9q2WrDmR4IKKryLfI6KLUPus+BcePZULvBG47Am8d+8eoylTJk/75tcTwrBQAbQpeq+4FgsriYMW1qpeIHKHM96VWxnavajiAxBFvAqnY05ESAhFfkVR4TgkLf4DEV1v4JwfzE2PRoUy98KKwBCJmZMhMMRrCQmhRRdUQA/WR30MCZWDwBu9LnsCb+wTvVpYrDDMwoStYHwG1pbiFcGxyjtmYd3SCufAGoMTcVmrey0R/YqI5heeCIqkYVr0ROwVwPg/7v6LEm5RI/+c3AwVk04mop/kl1MAtCmm7NailkszQOCA/IqiYn+4oF5cg6RQzIr7JRH9rXBNnab0N8qOHcPucFDR6xdDZpjlhppMjJXFQQubCLC+y3/mel32QG/LrFkz3cJYEwF6OlAltKh3BXDXjuTkdTU6z4NzgeHiwu0jxwWzXyZKrxbWZ0L7ImgpgsJ8yyvUuQkLhf2QI7NnOA7QY4j2Rc/LRIDeFbQvvhd5KBdwI0mZsYp4eIhNBLjK/DxXLfPviMZf17hTRvc+knRR5wOL1rUi3JGiQiimg+JcCiB/5Tu5LvXaVFIbh16c/yYi1IJHVV0XhjMwawmTZ9C+rdqrhfbNJ9ti2K3I/xLRKblZa7WC4mn5qdBvzg/H4fWL48L3Vm5fJBmjZxC9VwULdwJev18ioguJaJ9McsZKac1PccbKQyn1HxDRawofggsqKpCipkurJOrmL6YIWEqsS4S7UiSD3lW+KWoCXfg3FJb9B8uSbml6FCdrpRlcCGoxVFEUDAIuoh8jcpNu6wmztm4molcV7hQB9/Tp093Xb6sEh3j9YigTw0ElXr/rcwm3qMTMmGfc08ImmkwuaMFKa2/Kzy4CVPTEmjzNXtcFd6b5O38MVRSN/aPC7feJ3BWwn23AHw9r62Al4xgRvS6/fxwjao4gCEDQgqGNZr244ljzSx2M92TsU2YFBQzRu4LFJOstTUQ35noLEYC7n9EouDa+BtP4AoKom9Os7QsIVpDIjNdE0esXXVnXEdGZRLSq3o3LWh/3tLCJDMm56BVAMukemJkRj+9ZH7BpIGcFF1F8FX3Q52Gq7Idz69g0A6xZ9NXcQnZ7QW8WStQjWbdZCtOhNwVLAWBIC0NbJeAi+gki+nWJ3zXCq3NTf08o3jkCFrQvlrFAgNhsSqwwDo8S0aUNCrbZBMFBC5sMcHFFoTU30RGJjbNm7b/nYoq1ZJBUihoZ9b4AjE/THnXv/EvkU+ThYvrp3CyTfboFGgyfIZi1hKnAB5U6FrQ3LrAo/ofVsOsJORSYpo32LZHAnDeYq2uDHiy7nsfn0VuJ6IuFK50XQiI02nfqVLRvfSsX27ZNIyPjPWwHHLCf+/5BcIiVosfznVwrc+8/9GAxFgoHLWwyQdCC4AVBjJvciGBlx46de9oAvTCoQ4KvWtTLwNg+Zk+g2xxf+NCv4I+5rvSfhihkVi+4WqLGxhVEdFi5neKi1tHRtqftTecXoYcKwQmGAtG+JWaqFHop11OEJON9pgw1GXxWn5YrbY/FF0tCUIjXLmbM4fWNXCOTKr1+8xV90e45qEOD9xuClWYLtlmL4qCFTUZLc0ms5xbWHykFF1UEL7jYYpgD/0dgM/699AUBH+z4wl0+ghL0pmDoBz0pJRI+i2WJ6I5cgbhG5FSEhc8UFKRDTRNcZCuOXaBnIL+2Ef6NtsWFFt/L5WwgMEHbKuW43//WtmjjikEgICcIyZ9I1kZ9n5LjRE0OM7guy+WFdFQ6VrTj+Ot3vG3H21i6r99yAWP+tTv+3XFfw9ns+Ou3zLBaISTd/CLXvr/nYIUxxsyZmltF9j4UfM19wOKO0POXEEJLKd0v/NvPcwseiwvp47l8ldnmTq/hkDiE6rE4N5yj7/Yx1L7YL3qtsLzBXkXcWhzWiLogF4QhWgvVvuOvYf/byAV+jxHRJdVuAhhjjJmBCwAKiGHmRn+QC4DP56D2Ce700SMRN3MKTS2Ru6jhnDf5bCu/bYvHbyeiO4noX8rl2kwwc4joPUT0w9xK0kHazM9z8DdEuX3scyIF2qzJ8fAQY/vC+2IBES0hotfnvmN6Ly68QSDRE1OFn8+tN/OH3HRPXCQmI7QvZsagkBryX/BvLMcQ9OK3lYiey31hGjjaFwtqtuLQjwlo34VE7jAovjCchLovyfwUap9QuBDticrL+EKvFdb+mqztyxqIgxbGvGvLFVXDhz+qw2L4Az+bkes52Jb7jovoy0TueiqoG/O3TF9WyTQiSuXaFu07M3eRxTIN+KxCu+JCicJvuNNHMIi6Jvssw8xKwmu1O9fG6FlE++ILw6TomQIE0njt4gs9jngNN3uSMmOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMdaSREseNWOMTSLz5s07avfu3amwp5xMJu9YuXLlrrDbYaxRIo3aMWOMMW+y2ey/CiHO8Pbo8rZu3TqPiHrLP4Kx5iab+/AYY4wxxsZx0MIYY4yxlsBBC2OMMcZaAgctjDHGGGsJHLQwxhhjrCXw7KEWsHjx4gN37tz5DyYO1bZte3Bw8GtEpE1sz4+enp4e27bP8vOcKr6ZTqdHqjyGMcbYBMFBSwvYtm3bkUKIL5s4VCEEajU8nclkHjCxPT/GxsY+opS6zM9zKuno6LiLiP5c6TGMMcYmDh4eag2HmjxMpdSFJrfnRSqVmqK1Ps/LY70aGRk52OtjGWOMtT4OWlqAZVlGgxYhxPIlS5bsX89Tt217hdb6AJP7tCxrkcntMcYYa24ctLQApZTRoEVrPWXTpk3L63nqUsoPmt6fUoqDFsYYm0Q4aGl++Bu92vRh1nOIaN68eYdord9k+hyklBy0MMbYJMJBS5Pr7u7uIaJppg8TQURPT89i09stZffu3ZcBbSpBAAAfqElEQVSW+nlYWmvOaWGMsUmEg5YmZ9u20aGhQtls9n21Pn0k4Eop31uL/WitZ8VisTm12DZjjLHmw0FLk5NS1ixoUUqdT0RWLZtAa30Wgota7aOtrY2HiBhjbJLgoKXJOY5Ts6BFCJGIxWJvq3ETGE/ALWTbNg8RMcbYJMFBS5MTQrymlodoWVbNarYcdNBBhymlltXy+IloYY23zxhjrElw0NLcMHRT054ErfU7Fy1aNLsWzZDNZmvay5JT0/ZhjDHWPDhoaWLz589/FWqq1PIQtdZtu3btOtv0PpYuXTpVa32u6e0W01pzTgtjjE0SHLQ0sZGRkZrlsxSqRc2WoaGhc7TWNa+6K4RYUOtkYsYYY82Bg5YmprWuaT5Lntb68GQy+TqTTeE4Tj2GhnDs7d3d3fNMHjtjjLHmxEFLc6tLT0vOBaaaIhcAHWFqe9VwOX/GGJscOGhpYkKIugUtWIF5wYIF7SaaQyl1iYnteOU4DifjMsbYJMBBS/OKCiHqlmSqtT5wdHT07WGbY86cOdOJqOYJuIUsy+Jpz4wxNglw0NKkYrHYQszsqefhaa1D12yJRCLnENHMeh63Uop7WhhjbBLgoKVJWZZVlyTcQkqpk2bPnh0P2SR1ScAtUrceKcYYY43DQUuTqmc+S4FIW1tb4MUNe3p6lhDR0no3qda6q7Oz0/hK2IwxxpoLBy1NqpZrDlVxUZXfl5XNZv+x7C9rS0QiEdRrYYwxNoFx0NKkar3mUDla64M7OzvfWO735SABV2ttvLKuV47j8BARY4xNcJEJfn4tCVOPh4eHX9Wog5dSIiH3CT/7x7CSUmqGn+eYZFlWUyXjHn/88R0vvfTSaxzHWaCUWmhZ1n5oH611VEq5Q0q5zXGcTCQSebq9vf3ZNWvW7DbZHoyFIDs7O1+NvDop5SFa6/0cx5khpXSklFki2qyU2iCEWLdr166nt27duj3Evhot2tPTc+jo6OhCIQTep7Mcx5mJ9ykR7RRCbNda97e3tz8ze/bsP61cuXJXow94suOgpQmNjIwsJmrc30ZKefbSpUs/6ucNqrW+uJFNicCgkfuHnp6exaOjo2dKKd+6evXqI7TWHfi5EALH5z4G/9Zao2fI/b9t2/h3Nh6P/04I8csZM2bc+sILL+xo9Lk0SiqVShLRcY7jLNVaLxBC4P9TpZS21nqH1nobEa2yLOuvkUjk0fXr168yfaw9PT09tm2fQESL8brSWieEEFZuWYqtQohdWuudRNSrtX4xGo0+OXfu3Kf8vF+akEgkEidorc8nopOIaE7h67T4dQv4fUdHh4rH4y9IKe+xbfs3Q0NDD+Nl3YTnt0fu73u2bdtvFUIs27179zScH+Tfl/n/A/6dzWapv7/fSSaTDzmO84tIJPKzdDq9pZnPc6Ia/0uxppJKpc51HOfHjTwoy7Lek06nb/FyDKlU6kjHcXz1zJgmpXwik8ksM73datArtmvXrvcQ0T9prV9f7fHVCCG2aq3/IxqNXtfb27u18PHJZPJxpZTvobtiAwMDWD18PIryIJFIPKy1PsbDQyuyLGtqOp0eKX7QwQcfPGN4ePgCx3GQBH5k8e8r0VqvkVL+QgjxrUwmk6702EoWL1584LZt2z4kpcSaWbhp8EUIMSKEuE9r/aP+/v5fmr5wx+PxXxDRGb4OqoQpU6bMW7t2bW/BrxCsnElEnwty3sWEEBml1Pdt2/7epk2bBop/30CRZDL5bq31ZVrroxCLhDyWnVLKH2Sz2Ws2btw4WLitRCLxK631O0NuH+Ujkn19ff1htzPRcE5LE9Ja160Sbjl+FlFUSn2g3HbqBbk49dpXjpVMJi8ZGRlZp7W+0UTAAlrrWUT0qbGxsVWxWOx9dT6nusIQWiwW+/SOHTvWO47zTb8BC2DBTK31J4hobSKR+MGiRYtm+zkJBCvJZPIb27dvx3DH54NeuLEau1LqVK31TxOJxNrc3y7shbGm0DOYTCYfwzEHPe9iWuukEOJzbW1tL8VisWu6u7vxem4kgZvAeDy+Win1M631mwwELDBdKfWRtra2ValU6p+J+FpaLxy0NCHHcepeo6WY1vqEzs7Og4p/Xgx3yVpr3Kk1FLruY7HYnHocRDweX5pIJFYqpb6tlApb16acuUKI/47FYj/JVRmeUOLx+DGrV6/+kxDiC1rrA8KenFIqqrW+aOfOnc8nk8nzvGwvmUyeuX379r8qpS4jImNT5jEFH3+7eDz+4Jw5c2JejqXeEonE+7PZ7NNKqZr0TiKIE0JcMTY29kIqlQrdQxREIpE4OJFIPJLrta76WRaEUgr5Pv+eSCTu9Bsws2A4aGlClmU1vKdl/CZWVK3Zsn37dlwgGpaAW6itra3WvS0iFotdLoTA3anRVbHLEUKc3dbWdm8T3LEak0gkPkRE92utjc/40lrPVkrdhN6TCnfUIplMXo07byKaa+zE9nUs8l1SqdRr9/1VY2it0fNwba53cEodjmIOckDi8fhN6Fmrw/5cCMq01iu11m+uxz611n+/Y8eOh7u6uhL12N9kxkFLk1m6dOlUpVRN7gr8EkJgFlHFLm4p5T/43W6t2LZt/CJYIBKLxW4UQnyl3ssr4G7Ytm1c5Bvd1R5aLBb7stb6hlonmqP3JJlM/leJ1y9yOL6nlLoy9Ml4oLVO2bZ99/z587s9PLzmRkdHr3Mc52M139G+znvxxRcfmDt3bue+vzJqT1BmsvfMo0OUUsj/QvI4qxEOWppMf3//IU00PnpQLBY7tlwTJZPJZaZyOUxQStUqaIkkEolbc0FcQ2itl9SiZ6KetNZXCiE+Xq99KqXeF4/H9wpOkskk8lbqGmgLIRK7du26bcWKFXVdS6yMhgzVAILvSCTySA2HzNyAtEFBWf4cUariDWXanhnAQUuTaYYk3EKWZVVaRLER6wyVJaWsRdCCIaHvaq1PL7tj5olS6tOeHmjWF7q6utzAO5FInNagY0DgctgjjzyChOFJTWu9MBqN3r1kyZL9TTdEKpW6pt4BKas/Dlqaj5F8FiHE71FPIuzpKaWWI9m2eDuzZs3az1QCrtb6vuLtB1GLGUSpVOrjQoj3Bzke1hQspdQNSJJUSn2nkUckpbyyhr0MLQP5YBs3brzZZI9yrkxEI4a9WJ1x0NJkTJXvF0I8obVGvYiwpg0PD+8zO2jatGnna62nht14rs7G98NuBzD9lYhQg8QIzHBxHOcqIxtjDaOUeu0rr7zyBwzTNOwgxqezd0QiESQhT3qYHh6Px430PHV3dx+K2jCTvlEnCQ5amo+RnhYiQqXO75k4vVI1WxzHMVKbRQhxg1JqrYnjRIJsd3f3PBPbQtE4IQQ+CLlq9ASQC2gbzkty+yTy+WQyGXYWnsxms983cQPFWgMHLU0kV4/D1CyD1b29vb8nor+EPUVMG0Qhqvx2uru7MY0wdC0ZDF9Fo9GbZs6cuS7sMeZls1kj055HR0c/WYvhJja5YWZJV1fX0sndCntEUP05zDBRLBb7oBACFW7ZJMFBSxORUqKXpeIUY6+EEKvxWMuyjHSbjo2NYU0S19jYmJFeFq31zShVv3r16k1EZGS9HSFE6GRcTMtUSl3uta0Z80MpFXpJhIkCFWqTyeTyIOeD8hCovhvkuax1cdDSRKLRaOjei5zhdDrtrlkxe/bsm0wk5OYWUrOQ9S+ECPQhU6yjowN3WS4p5fri3wdhYgZRW1vbv3J3c31orf8spfwPrfVnc183SCkfRwpIfY7gb4QQm4nor0IILMJoJIguRSl1eKmfT1ZKqc8G6W0ZHBy8pMbFAVkT4vH6JuI4jpF8FiHEi/kP/WeeeWZbbrG1PT0lQaBbO5VKnTg0NIThl9AJuET08Lp16/6cPxbHcdYLIUJXDg1bywRDdI7j4MOwZqSUA1rrB6WUGSLChfJAx3HmCyGO01ofWLMdN5cNlmVdkE6nHyx1WLFY7NVSyn/XWr+11O9NkVKOKaVutCzrP9Lp9LMF25XJZPJIpRRmpLzb1P5ACDHf5PZMEULsVkr9HjcQQoh+x3FsKeWBuckBx2CpBFP7KvLqrq6u0/r6+n5d/IsKsOr2Ryv8PjQhxCYhxANKqT7Lsjbatj3LsqwepRSm0Dfl8gyTAQctTUQIcSiWew8rPzSUJ4RAnZFQQQtorVGzxUhgJaX8VuF5Simx8GDYU4dQOS1tbW3LlVL7TPE2AKsq/8qyrGvS6fT/ldleNBaLnSil/GeUBS/zmJaHoNpxnKMHBgZeLncyg4ODfyWik+PxOCqbhn7tljFoWdbyTCbzaInfq0wmgx6fM+Lx+MVE9F1TQ7fNVjEVPUtSyqumTZt22wsvvFCyhymVSmF9KBSm+yQR9ZRor1DGxsYuIiLPQQtuoBzHqUnlWSHEb5VSXxoYGHikzGroWCz1WKUUZoI1rFjfZMXDQ83FSECglEJPyx79/f2PSSkL7yIDQc0WE0ELehoymcz/Fh6E1tpIMi7Kpnd2dgZe/A5VVAM1TmUIyJYNDAycUSFggbHBwcE7+/v7TxJCvIOIhipvtvVgqLKjo+PtQ0NDZQOWAva0adM+IIR4wfSZSim3d3R0/H1vb2+pgGUvAwMD35dSfs3gMZjoqTTB0Vpf3t/f/9p0On1LuYAF0un0FrSDZVnoAfuS6eE7IcTJfmrY2LZdi/fpUDQafSvef4ODgw+VCVjAyWQyDwwMDCy3LOstRGTks4t5w0FLk0CuiKk7MK21m4RbKDd9NywjrxchBKZijxUeTCQSMfXGF5FIBPVafMtV6TSaJCmE+J1lWW8YHBx80s8B9ff33yaEOEII8Yyf5zU7KeVX1q5du1dQXcmaNWt2E9G1lR4T0EcKhyerGRkZ+QIR7az2OI/qsVBhRQgepZTvHBwcvI6I7IoPLpBOp0cymcwnhRDn+nmeB5H29vZTPTwOIkKIUzw+1qsnLcta2tvb66vQJYY3Z8yYcSSGu73uiIVj5CLEwtuyZYupJFzMGNonaBkeHjaSkGsAPiD3mdGklDKSiJsTaIho8+bNx5ksTieE+KPjOKfjLjVIu/X39/cppd6Wy1FqeciZmDp1KhZL9MVxnNsr3PX6JoR4OpPJ/NDPE7ds2fIKEe3VOxiUlLI96HNNUUpdmslk7gi6vf7+/p9almU0p8S2bU/5S52dnZgyPjPosZewdsaMGaek02nkmPmG2Y+2bb+diJ7y/WTmGwctTcJUEi4U57TA1q1btwshft7o05VS/k+pD4fp06cbKTCXE2jas1IKXb1GYCYKhniGhoaGw2xwcHBwY1tb25lCiGyY7TQDLNeQm97uS24oaaWvJ1UghLg+yPCGqeUmlFJGyhoEJaX84eDg4E1Bn5+XTqevl1Ia+0yRUp7gJW8oGo2afJ+OtLW1nRrkdVlo48aNO9vb21cQEYJbVkMctDQJU0ELMt7L3dlHIhEjFXLDKE7AzcN4uhAiUI9EsaCrPSulwlbn3EMIcXUmk0kXH1sQ69evxxCRr56BZmRZVuAudK116CKJOY4Q4jdB2icSiTwf5HnNRAgxqrU2tnBlNBrF2lwYwgtNaz27q6srXm1Dtm0be59KKW/YsGGDkb/r+vXr12PGW7XjZ+Fw0NIkLMsyNTy0z9BQ3oYNG7D+SiNzJJ7r6+tDRn5JppJxg9ZqCTtdOg+JxgsXLtxTg8aEtra2qzE918S2GshzLkuxSCTSV/yzIIQQa8sF9dVMnz79pWqPaXZYowfDjqaOExdqIsLih0YIIQ6ptqGg7+8Sdk6fPv2aEj8PzLKsr3NvS21x0NIklFJGZg6VGhoq8oPiH9SLlLJat7yRZNwg5fexkrWpBfUcx/nlgw8+OGqyXXFxUEr9weQ2600I0Rt0n47jGOm1IqLngh7DqlWrUFOn5JTgVmFZ1i2mj9WyrFtNbTObzVYb2hWmbi6I6O7c39QYVPiWUt5tbINsHxy0NIFFixbNNlXZsXi6c7GRkZEfEVGoPIsgMMXUtm3suyzLsowk42qt9+/s7Jxbdkcl7Nq1y9fjK4lGo7dV+n1QWuv7gz63GYyMjARKdAQhhJFgQQixIUxbSClNzSCqOyFEOpPJPGF6x8uWLUOBQCN/H8uyKhZX7OzsxHTx6SbOQWtdk/cpEbX0+7TZcdDSBHbt2mVqaAhvxLLDQ4CEXK31zxpw2v9dLSnVtm0jPS3Q3t5e7Y5tL5ZlGSsop7UOfDdfiZQS5eVbViqVGgl68FJKU4nIu4IeAyiljPag1RkK9hmp4Fjo1ltvzZoa2nUcp+L70GThRyFETd6njuO09Pu02XHQ0hyMBS1TpkypGLSA1rreCblaa/1tD01tLGhRSvma9qyUMnL3huZNp9M1KQoXiUSwsGTLymQynuuBFNNaG0n2NDALK3Dg1QQCD89Vg16cao/xotrNQ3t7u6n3KfY16OWY/Gpra2vp92mz46ClCZiaOYQL5gEHHLCm2ikNDQ09gRoi1R5nihDi3v7+/qpVTTs6OowFLbZt++pp2b17d5uh8xVz5szpMLStvYyNjbX0shvt7e1O0HZRSgUOeEwyEPQ0Us2K2hlsl4rBqW3bpt6nUJP2cBynpd+nzY6DliaANYdMHIYQom/lypWeur+VUvVMyN1rnaFyenp6kNNipPva7wyDSCTiqd28mDFjRsLL4/zSWnf6fQ5jeVrrrlq1BpbPMLTtirkxWmtjPV2mEu+LSSn5fVpDHLQ0h1cbOoyqQ0N5++23H6YpVvyAMAEzRvr7+z1V3szNuDEytOJ3hkFbW5uxoGVkZOQIE21XTAixpPhnjHklhDhsxYoVJnsqXMcffzx6Fhd7PY5KHMepWJxNa23sfTo2NlaT96nWmt+nNcRBS4PNnj07rrWumDHvlYfpznvkirkZq2ZZjpQS9Uo8DwuYSugTQmD9Ic/dtDt37vSygJ8nUkosdmgaqqi+y/RG2eSBWXWPPPKIp1L5fqxevfpEUzN6qq1B9vLLL2PauZGhwtyipMY5joOFZVmNcNDSYFOnTjWWhFttunMxpdR3i39mEipljo2N/ZefbUopjeS1aK3burq65nnd98aNG4ewiJzXx1eitT7Vz4q1XsRisWOJqMfLYxkrRwhxYbnfBSWE+GDQ5xaLRqPVChAiYDFVHO/N8+bNq1rMzo9EIoEJADXpwWHjOGhpsLGxMSP5LFBtunMxrDyMxeOKf26KEOKnuXVjPDPV0wJjY2N+knG1EMJIxVOt9dS2tjZjpdKJSFqWZbRyJ5u0zpg3b95Rps4+lUodr5TCYoGhoeLz2NhYtaAFnytVJxt4ZGWz2f/n8bGeCCG+6umBLDAOWhrMVBIuRCIRzzkteUKIfVZcNsVxHE8JuIVMFZgDIYSvac9a6/8zde5EdHEsFsOq0aElk8mPKKXeGHpDjBGJbDZ7fS4PJZTu7u5ZhntrV6bT6aqJtobfp+9KpVLvDtUQOfF4/D1KqVNNbIuVx0FLgxks359Np9O+K8pms1lUqTWekIseHPTk+G1eU8ND4HcGERE95vd4y1FKRaWUv0ylUsitCayrq+udSqlrA2+AsX0tfeGFF5CIH+bzP2Lb9k/9JrxX4jjOQ5V+n6e1NvY+RRCnlLo5Ho8v9bLvcuLx+DFCiHrOyJy0wrxoWXjCsixTM4fWBklQw5LqGMYJfyp7U0p9M+A2jeS0gOM4foaHEMDd5SdpuBokWGO9oEQiESj5MR6Pf0AphXVdrGr7Ysyn5YlE4qY5c+b4LtaWSqUOSCQSd2qt3+Zzn9Xg/VdVMpnEsgHGliLBcC4RPRCLxQIl0CaTyTOFEHdrrWtSn4ntjYOWBkokEiml1H4mDkEp5XtoKM+yLKMVcoUQmxYvXhxoqYDe3l4k2XmebVSJ356WTZs2DRDRo5W26ZfWerbW+q5kMvmN3BpTVR100EHzYrHYT4jou+ixqfoExgLQWr8nGo0+lUqlTvL69K6urrdheEZrjRlDxqDG1ODgYNkV4AuhFpWU8k5jOx+HBVN/HovFbkylUkkv2547d25nPB7/jlIKPU4IfFgdcNDSQEopYzOHguSz5PX19T1FRCtNNYVS6sYQqxyPEZGRkuAoeOX3TtKyrJtMtUOBiFLqsuHh4TWpVOqGrq4uzAQqfu9Furu7T4jH49/evXv3KiHE2TU4Dsb2ghXRHce5KxaLPYaevVKz3hBsp1Kpc+Px+EO2bf9WKfUq082olEKQrnxs94c+HuuVEEK8H7MwE4nEDxCglSibILu7u98cj8evsywLScOYOYVyBKxOPNexYDVhbOaQ4zhVs+6rQG+LiSnQSmsddjvIzfE8XbkCMW3atAUbN258psJj9tLR0fGj4eFhzCiIeX2OV7letQ8R0YcSiQTKlWPF4Y1ENIeIusbGxtyy4lobKQrMmGdCCMwoOioSiXwnmUwOKqXSUkpHa53YsWMHqt0WB9nGYNZQe3u7r6T9TCZzZzwexwKQpobX99Ba4314kW3bFyUSiSx6gbTWg1rrA3LvU99Dasycmr0QWXWWZRkLWizLCjw8BLZt30JEFatReqG1vn1oaChUXorJZFyf055pzZo1u7XW13k51zC01u1IYtRavzn3vSbroDDmExJT46g1opRaprXurmXAkvPjtWvX+l3MUUspv+zz3HxDvSf0LOF9SkSo6cIBS4Nx0NJAJoeH/FTDLQUJuUQUOiE3Go36umMqxXGcUEFPIcdxfE17hmOOOeabYduTMVadEGJUShmoVkomk/mRlPLx6nthEwkHLY2DtjdVjXFnX18fkkhDyZXcD0xrvaavr+93gTfwN76nbpcjhPA1gwhuvfXWrJTyMlOLNzLGSpNSXtvX1xe0qCN6Wz4cZNYka10ctDRId3c3SrJPM7H7XK9A6ESITCbzJyJCUm4gQogbfCbTlSSEMNbTQkS+gxZIp9N3W5aFdZMYYzWQ+9wKNcSDSQRSys/X4PBYk+KgpUFs2zaWzxJmunMJgaY/Y92eaDRqZOaNyZwWKaXv4aG8BQsWXC6E+GOJNmKMhYBhISI620sF3GoymcyXtNb3VXscmxg4aGkQrXVTTHcuZts2ph76TsjVWt/c29u7tXh7QWQymX4sthjkucUwY6ezs3Nu8c+9wLRty7JOxewBL49njHkjpfyn/v5+UzcETjabfbeU8llve2etjIOWBjG55hARhZ3uvEcuIRcziXzp6OgwOZSCeg1+ZxOUFaa3pa+vr7+9vR2By+ayO2CMeaa1/kw6nb7R8xM82LJlyyu2bb+TbzAmPg5aGsfY8BARhZruXKyjo+PbxT+rRAjxyLp16/5c6TEBGMtrsSwrUF5LHs7NcZzjpZShk52D0lr3E7lLNTAWhqf1fWpFSnnd4ODgVbXYPkottLe3H4MJAbXYvhdCiG1E9Bcvj2XBcNDSGFhLJnCuRTEppbGeFsgFIH4WOww9zbmY1trYDCLbtkMFLTA0NPQXIcSxDfpAHG5vbz9NSolCdIwFFolELhJC3BN4A8Fpy7I+n8lkLg++ierWrVu3wbbtY4UQngtKmoIieZFIZLkQIuhsKOYBBy0NMH/+fBQrMlVM7GVTuSSFLMvyVNUWvQ/9/f3/Y7oZLcsy1tMSZnioUDqdXrN79+43EJHx8y0Hd25KqXds2LDh6XKPYcyraDQ6Njo6uoKIHvb6nLCwFhlew+l0+nNht+UF1hCTUr6pnqsuCyFGsPRGb28vJwTXGActDZDNZo0l4daqCFpnZ+dPcl2dFQkhMNsI6wUZpZQyFrSg4qypg9u6dev2gYGB5VLKS4UQRhKPy5FSvhSJRI4eGhq6v9xjGPML+R9HH300FjwMNFPQDynlHVLKJUNDQ7f7eV5YmJXU399/sRDiHCIaDLu9SnDjJoT4u3Q6XbebmcmMg5YGaOLpzntgJVUhRLWEXJuIvl+LJnQcx9jwkBACC7yZXGdLZzIZrO56cO5uDu1gko2xf9u2X9fb2/ucyQ0zBiigODAw8EGt9ZlCCCMLlBZ5Til1WiaTOTWdTmeKf1kv/f39Px0dHV1MRF/PTbM2SeP9j+VYMpkMV+atE5Mf5MyjSCSSVUqZqByLYZQHPO7WN9u2v10lifWpWn0gzZo1a80rr7xipI1g7ty5B7788stDvhuhgsHBQeSYXDx//vyrRkZGLhNCXJBbVC0QfKhqrW+aMmXKV9euXbtPnpLjOE9KKXcE2vjefBUi1Fo/ZWIKekdHh59VfPcSiUQ2O44T+vVg23aoZGat9RMY7gj5N3D8Pl9r/Wcp5X5+n1dseHgY9VH2GBwcvHXOnDl3tbW1oQL0h3LrDgVlCyHucxznhqGhoTuapaI0ekeJ6KNz5869JhqN4hwvDrMgKnJXtNY/b29vv7bUBAQp5Z+UUqELh06bNs1I2YeJhpfUZsycaHd39/HZbPY0rJorpXydUipaZfPrhBB/QDf6rl27bkfXfZXHM1YTK1asaHv88cdPcRznVK31CUSEqt2VaK31S0KIx4QQD02fPv03q1evDhvQ1YPs6uo6Gnk2juO8SUp5OBYwrbRj9EZprR8XQtw1c+bMX69atYpLIDQIBy2M1ciCBQvalVLd2Ww2adv2nGg0GhkbG7O11iNTpkxJK6U21CKJmjETlixZsv/WrVvna61nZbPZWVLKiNZ6dzQafUVKmYlEIuuwKrqJfTUYbja6tNapsbGxuVFkK4+NYYh2t2VZ/VOmTFnfIsEYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjNXJ/wetubLVr3hAtwAAAABJRU5ErkJggg==" } }, "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Mamba\n", "\n", "\n", "\n", "[Mamba](https://mamba.readthedocs.io/en/latest/installation/mamba-installation.html) is effectively the same tool as conda, but implement in C++ instead of Python. Complex envirenments require a great deal of compatibility checking across thousands of installed files. \n", "\n", "Mamba:\n", " * implements highly efficient algorithms for dependency resolution and package installation\n", " * utilizes C++ code for critical operations\n", " * utilizes parallel computing, distributing tasks across multiple CPU cores\n", "\n", "We'll use mamba below. " ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Setting up your environment on Rivanna\n", "\n", "Here we will go though the exercise to setup your own personal conda environment called **phys56xx** on Rivanna for use in this class. \n", "\n", "The following instructions can reasonably be expected to work on any modern Linux system to give you a compatible working environment to the one on Rivanna. \n", "\n", "They *should* work on recent MacOS systems and will not work on Windows. Go ahead and explore whay you can do natively on MacOS and Windows, but these will not be 'officially supported' in the class.\n", "* MacOS note: While the instructions are known to work on Intel-based Macs, we have no information at this time about the new ARM-based Mac systems.\n", "* Windows note: The Linux installation is known to work using WLSv2 (and, for example, a receent Ubuntu installation). You will also need to install the Xming and Xming-fonts pakages for full functionality." ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "Follow the instructions below from your Rivanna account to setup an environment. The steps are very simple and at the end you'll have a stable environment that's safe from future system upgrades!\n" ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "1) Download latest version of [Miniforge3](https://github.com/conda-forge/miniforge)
\n", "this provides a version of python along with the tools needed to create, install, and manage your own customized environments.\n", "\n", "After downloading the setup file:\n", "\n", "```bash\n", "chmod +x Miniforge3-Linux-x86_64.sh\n", "./Miniforge3-Linux-x86_64.sh\n", "```\n", "Follow the instructions printed by the script and it's OK to accept the default choices.
\n", "(Btw graphical installers are also available...humbug!)\n", "\n", "Executing the script creates a directory ```miniforge3``` by default in your home area and modifies your ```.bashrc``` file to include the conda tools in your path.\n", "You can delete the miniconda script when you are finished.\n" ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "2) For changes above to take effect, close and re-open your current shell, logout and back in or ```source ~/.bashrc``` again\n", "\n", "A personal preference: If you'd prefer that conda's base environment not be activated on startup, set the auto_activate_base parameter to false. \n", "\n", "```bash\n", "conda config --set auto_activate_base false\n", "```" ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "3) Make sure the conda installer is up to data\n", "```bash\n", "conda update -n base -c defaults conda\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "4) Add the conda-forge repository\n", "```bash\n", "conda config --add channels conda-forge\n", "conda config --show channels\n", "conda config --set channel_priority strict\n", "```\n", "The last command above gives conda-forge priority for ensuring that all packages are installed compatibly. This essentially forces compatibility with the most recent package versions in conda-forge." ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "5) Create an environment, based on a specific python version, eg\n", "```bash\n", "mamba create -n phys56xx python=3.9\n", "```" ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "6) List your environments and actiate phys56xx\n", "```bash\n", "mamba env list\n", "mamba activate phys56xx\n", "```\n", "```bash\n", "# to deactivate the environment use\n", "mamba deactivate\n", "```\n", "\n", "Note: you will need to execute `mamba activate phys56xx` each time you log in or open a new shell to start working. Do not place `mamba activate phys56xx` at the end of your `.bashrc` file on Rivanna. This can cause problems with the initializing the default system tools." ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "7) Install the packages for PHYS56xx (this step will take a couple minutes with a fast internet connection)\n", "\n", "**Make sure that your phys56xx environment is active before you enter the following commands**\n", "```bash\n", "# install some common python packages\n", "mamba install --yes scipy matplotlib seaborn sympy scikit-learn\n", "# install a jit python compiler, the ROOT analysis framework, and gnu scientific library\n", "# n.b. installing ROOT also brings in a compatible C++ compiler and libs\n", "mamba install --yes numba root gsl\n", "# optionally\n", "mamba install --yes jupyterlab ffmpeg\n", "```" ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "Looking over your environment\n", "----\n", "With the envirnment set up, your prompt should like something like
\n", "`(phys56xx) [rjh2j ~]$`
\n", "Within this environment your paths will be defined to access the programs and libraries you installed above. Try the following commands to see that you are not using your installed packages and are not relying on the Rivanna defaults:\n", "* `printenv | grep miniconda3`\n", "* `which python`\n", "* `which g++`\n", "\n", "To see everything you just installed, type `conda list`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Install git\n", "Finally, make sure [ git](https://en.wikipedia.org/wiki/Git) is installed.
\n", "We will use git throughout the semester to distribute examples and to facilitate teamwork on the exercises.\n", "\n", "Type `which git` on your command line. If the `git` command is not found, you can install either by:\n", "* Using the packaging tools for your OS distrinution. For example, see this [guide](https://gist.github.com/derhuerst/1b15ff4652a867391f03)\n", "* Just add it to your conda environment using `conda install git`" ] } ], "metadata": { "celltoolbar": "Slideshow", "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.13.2" } }, "nbformat": 4, "nbformat_minor": 4 }