Skip to content

Instantly share code, notes, and snippets.

@kemusiro
Created January 16, 2022 05:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kemusiro/e6477374ddfdbdf608b1063677180365 to your computer and use it in GitHub Desktop.
Save kemusiro/e6477374ddfdbdf608b1063677180365 to your computer and use it in GitHub Desktop.
fourier_series.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "fourier_series.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyPwRu/H/M3t32+qX97vvKSk",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/kemusiro/e6477374ddfdbdf608b1063677180365/fourier_series.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 517
},
"id": "vgTfQInkanPV",
"outputId": "e60c78b9-5610-4512-c8a5-302075bd0589"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"n=1のとき\n"
]
},
{
"output_type": "display_data",
"data": {
"text/latex": "$\\displaystyle 2 \\sin{\\left(x \\right)}$",
"text/plain": [
"2*sin(x)"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"n=5のとき\n"
]
},
{
"output_type": "display_data",
"data": {
"text/latex": "$\\displaystyle 2 \\sin{\\left(x \\right)} - \\sin{\\left(2 x \\right)} + \\frac{2 \\sin{\\left(3 x \\right)}}{3} - \\frac{\\sin{\\left(4 x \\right)}}{2} + \\frac{2 \\sin{\\left(5 x \\right)}}{5}$",
"text/plain": [
"2*sin(x) - sin(2*x) + 2*sin(3*x)/3 - sin(4*x)/2 + 2*sin(5*x)/5"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"n=31のとき\n"
]
},
{
"output_type": "display_data",
"data": {
"text/latex": "$\\displaystyle 2 \\sin{\\left(x \\right)} - \\sin{\\left(2 x \\right)} + \\frac{2 \\sin{\\left(3 x \\right)}}{3} - \\frac{\\sin{\\left(4 x \\right)}}{2} + \\frac{2 \\sin{\\left(5 x \\right)}}{5} - \\frac{\\sin{\\left(6 x \\right)}}{3} + \\frac{2 \\sin{\\left(7 x \\right)}}{7} - \\frac{\\sin{\\left(8 x \\right)}}{4} + \\frac{2 \\sin{\\left(9 x \\right)}}{9} - \\frac{\\sin{\\left(10 x \\right)}}{5} + \\frac{2 \\sin{\\left(11 x \\right)}}{11} - \\frac{\\sin{\\left(12 x \\right)}}{6} + \\frac{2 \\sin{\\left(13 x \\right)}}{13} - \\frac{\\sin{\\left(14 x \\right)}}{7} + \\frac{2 \\sin{\\left(15 x \\right)}}{15} - \\frac{\\sin{\\left(16 x \\right)}}{8} + \\frac{2 \\sin{\\left(17 x \\right)}}{17} - \\frac{\\sin{\\left(18 x \\right)}}{9} + \\frac{2 \\sin{\\left(19 x \\right)}}{19} - \\frac{\\sin{\\left(20 x \\right)}}{10} + \\frac{2 \\sin{\\left(21 x \\right)}}{21} - \\frac{\\sin{\\left(22 x \\right)}}{11} + \\frac{2 \\sin{\\left(23 x \\right)}}{23} - \\frac{\\sin{\\left(24 x \\right)}}{12} + \\frac{2 \\sin{\\left(25 x \\right)}}{25} - \\frac{\\sin{\\left(26 x \\right)}}{13} + \\frac{2 \\sin{\\left(27 x \\right)}}{27} - \\frac{\\sin{\\left(28 x \\right)}}{14} + \\frac{2 \\sin{\\left(29 x \\right)}}{29} - \\frac{\\sin{\\left(30 x \\right)}}{15} + \\frac{2 \\sin{\\left(31 x \\right)}}{31}$",
"text/plain": [
"2*sin(x) - sin(2*x) + 2*sin(3*x)/3 - sin(4*x)/2 + 2*sin(5*x)/5 - sin(6*x)/3 + 2*sin(7*x)/7 - sin(8*x)/4 + 2*sin(9*x)/9 - sin(10*x)/5 + 2*sin(11*x)/11 - sin(12*x)/6 + 2*sin(13*x)/13 - sin(14*x)/7 + 2*sin(15*x)/15 - sin(16*x)/8 + 2*sin(17*x)/17 - sin(18*x)/9 + 2*sin(19*x)/19 - sin(20*x)/10 + 2*sin(21*x)/21 - sin(22*x)/11 + 2*sin(23*x)/23 - sin(24*x)/12 + 2*sin(25*x)/25 - sin(26*x)/13 + 2*sin(27*x)/27 - sin(28*x)/14 + 2*sin(29*x)/29 - sin(30*x)/15 + 2*sin(31*x)/31"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3RU1fbA8e+dnslk0isBUmgphECAUARFRRQRCwjSERRUfPrs5Yf68NnBZ/chiAVEUFCfihobYkEgdAiEhJaQhIT0Npk+9/dHIIJJqMlMgPNZy7Ukc+fefQPJnnPOvvtIsiwjCIIgCG2NwtMBCIIgCEJTRIISBEEQ2iSRoARBEIQ2SSQoQRAEoU0SCUoQBEFok0SCEgRBENokkaAEQRCENkkkKEEQBKFNUnk6AEE4V5IkhQADgQjADGQAm2RZdnk0MEEQzokkOkkI5ytJkoYAjwIBwFagGNABXYBYYCXwsizL1R4LUhCEsyYSlHDekiRpLvCGLMuHmnhNBYwAlLIsf+b24ARBOGciQQmCIAhtkiiSEM57kiQtkSTJ97g/R0mS9LMnYxIE4dyJBCVcCP4ANkiSNFySpNuBH4BXPRyTIAjn6FRTfGL+Tzgv/PHHHwwZMoSgoCC2bt1KWFiY22O4+uqrSUtLc/t1BeE8JZ3qADGCEs57S5YsYdq0aSxevJipU6cyfPhwtm/f7vY4SktL3X5NQbiQieeghPPeZ599xh9//EFISAjjxo3jxhtvZOrUqWzdutXToQmCcA7EFJ9wQbLZbGg0Grdes3fv3mzatMmt1xSE85iY4hMuXM888wzl5eVNvqbRaFi9ejWrVq1yc1SCILQUMcUnnLe6d+/Oddddh06no1evXgQHB2OxWNi7dy/btm3jyiuv5PHHH/d0mIKA3W4nPz8fi8Xi6VDcTqfTERkZiVqtPuP3igQlnLdWrlzJ2rVreemllwgJCaGwsBCj0cjEiRNZsGABXl5eng5READIz8/Hx8eHqKgoJOmUM1sXDFmWKSsrIz8/n+jo6DN+v0hQwnlr8+bNHD58mKVLl/LLL7+c8JrZbBYJSmgzLBbLRZecACRJIjAwkJKSkrN6v0hQwnnrjjvu4IorruDAgQP07t274euyLCNJEgcOHPBgdIJwoostOR1zLvctiiSE89Y999xDZmYm06ZN48CBAw3/HTx4UCQnQbgAiAQlnPf++9//ejoEQbigtJUm4iJBCYIgCA2qzXZKqi04nJ7f71MkKEEQhIvAxo0bSUpKwmKxYDKZSEhIICMj44RjZFmmtNZKUY2VKovdQ5H+RRRJCIIguNlll13Woudbs2bNKY/p06cPI0eOZPbs2ZjNZiZOnEhiYuIJx1jsTmqtDgBcnh9AiQQlCIJwsXjyySfp06cPOp2O119/vdHrdXYnCknCJcu42sA6lEhQgiAIbnY6I57WUFZWRm1tLXa7HYvFgre39wmv2xwuZGhIUp4m1qAEQRAuEjNnzuTf//43EyZM4JFHHmn0utXuQqtS1Ccol+cTlBhBCYIgXAQWL16MWq1m/PjxOJ1OBgwYwOrVq7n88ssbjrE6XOjUClwuJ20gP4kEJQiCcDGYPHkykydPBkCpVLJhw4YTXpdlGZvDha+XCqvDJab4BEEQhLahfv1JRqNSopAknG1gCCUSlCAIgoDVUV9XXr8GRZuY4hMJShAEQfhbghJVfIIgCEIbYXO6UCokVEoFSoVIUIIgCEIbYbU78VIrAeqn+NpAJwmRoARBEARsDhcqZX1KUIgRlCAIgnA6HE4XFSYbR6rMFFaZKamxYLI6WmxbDJcsY3e60BxLUEfXoI5t2T5kyBAMBgN33313i1zvdInnoARBENooWZYpN9motjiQAIUCJCSsdhcmqxONSkGwQYtadW5jjWMtjrSqvxIU1CcunU7H7NmzWbduHYcPHz7HOzozYgQlCILQBjldLvIrzJTX2dAoJUKNWjoEeNM+QE/7AC98dCosdif5lWYsducpz5eTk0NcXBy33347CQkJXHXVVZjNZqA+QQFoGhJU/XusNjulpaX4+vridDpxOBytc7PNECMoQWiCxWJh8ODBWK1WHA4Ho0ePZs6cOZ4OS7hAjH1n3SmPsdidyDKoVRIqRdNjCZcsY3W4mHdzD6IDvZsdSblcLmRZZu/evSxbtoyFCxcyZswYPvvsMwoLC/lwyUc4nC60aiUS4HTJdO/dj4fuvRuXw0ZISAiRkZGUlJScy22fMZGgBKEJWq2W1atXYzAYsNvtXHLJJVxzzTX069fP06EJFwGrw4nTJaNTK1EeG840QSFJaFUKlJJEfkUdUUHeSNKJx9da7FTW2SitsRIdHU1ycjIAKSkp5OTkMHv2bCbcfjflJhsJEUZKS0spq67DpvVFZ6uiQ0QoOp0OpVLZqvfcFJGgBKEJkiRhMBgAsNvt2O32Rj/4gnC2PpnZv9nX8ivqqLE4CDPq8PfWnNb5KutsFFZZKDPZCDJoG77udMmUmWxYHQ7q7E5U6r/Op1QqMZvNzJ07l/c/XIIsy8hOOy6XC6VKRc9+g1jw37fQaT2XJkSCEoRmOJ1OUlJS2LdvH7NmzSI1NbXRMQsWLGDBggUAbp/+EC48lXU2ai0O/PTq005OAH56DdVmO0VVFow6FRpV/Win2mLHYncR6e9NyWEFDlf9RoSK4z5s3XXXXVw9dhpOmxmluYLIyEi0eh/2ldR6fMsNUSQhCM1QKpVs27aN/Px80tPTycjIaHTMjBkz2LRpE5s2bSI4ONgDUQoXCrvDRUGlGbVKQZhRd8bvD/fzQq1UUFRlafhauckGgLdWhY+XCgmoO7qlu8PhoKKigszMTGRJiY/ei4SEBPz9/VEo/qriA4iKiuL+++/ngw8+IDIykt27d5/j3Z4eMYIShFPw8/NjyJAhpKWlkZiY6OlwhAuQLMsUVJqRZYj08zqr6WS1UoGvl4riGivBNidqZf2zTL5eagASunTis5/XUWW2U1l6hKFDh+Ll5YXB6Esl4OdrQKFoXGYO9RWAniBGUILQhJKSEiorKwEwm838+OOPdOvWzcNRCReqyjo71RY7YUYdWvXZFyMEGbQoFRJHqi3UWh2YbU6MXvXjEAkZNU7KqkwUFRUREBBAbGws/kEhAGiVf6WDY3UZnm53JEZQgtCEwsJCpkyZgtPpxOVyMWbMGEaMGOHpsIQLkN3p4nCVGW+NikDD6a87NUWlVBBk0FJrdVBZZ0elkPBSKykvL6egoACHygulTxBdusVhNHgDUFtrBWhYtwIaTfF5ikhQgtCEpKQktm7d6ukwhIvAkWoLOrXyrKf2/i7QW0NxtQVJktCrJPbs2YPJZMLLy4vI0GAK62QckrrheJvThSRJqJV/XVshSUiShFMkKEEQhItTnc1BuclGiI/2jKf2XC5Xw5rR8VRKBTq1ArPdRW1lKdjtdOzYkaCgIABKrTXUWOwEHK0StDnqe/D9PTm2hU0LRYISBEHwAFmWKayyoFIoCPbRnvoNR9kcTspMNpxOFz46Nb76v6YF7XY7hYWFmKyg8DLiYzDQoVPUCQ/ZGrQqqi12ZFlGkiSsDldDD77jKSXJ42XmIkEJgiB4QI3FgcnqIMLPC2UzrYz+TpZljlRbcTjrWxeV19lQKiX0aiVHjhyhqKgIp9OJV2g0LkDl5dOoA4SPTkVFnY06mxOdWonV4cLPS93oWm1hV11RxScIguBmx0ZPWpWyYartdFSZ7dRaHQR4a4gKMuCS4VCpid27MykoKMBgMNAtLh6npESnVlJltjcaBRmOdoaor/Kr37JDp2k8vVi/J1R9ibmXlxfJyckkJydzxx13nNvNnwExghIEQXCzcpMNq8NJx0DvE7o6nIwsyxTXWNGoFBi91NTU1GCpKMWpD0Br8KNjxw74+PgcfTjXRoBBQ0GFmWqLHb/jpgFVSgUB3hpMRx/Y9dao8G4qQUngcskogdjYWLZt29YSt35GxAhKEATBjZyu+mk6b40Ko+70xwh1tvotNQwq2LdvH9nZ2TgtteiUMhqDL3rv+t6RJqsDH52aAL0GtVJBRZ0dOHG7jaEDezP55pEUlVWhVSuanGJUiCo+QRCEi0tJrZWHV27HS6M87dET1G+/4XTJuOxmJCQ0Gg0ajR2XnMm/rkugpMaC0UuNxe7EX69BkiT89GpKa2zYnfVP3B7bbmPBggXcMGo0v//wDdUVJXy6fFmj6/XsO4BHnn4BgIMHD9KzZ0+MRiPPPPMMgwYNaplvximIBCUIguAmdqeL0horKqV0BslJxmqz45QVSLILjVqDRqNpKAtXSBLBPvUP59ZY7OjUKvz09UUP/noNJTVWqo6Ooo7fbqN/3z5UFBfwxBNP8PijjzS6an5FHdVmB+Hh4Rw6dIjAwEA2b97MDTfcwK5duzAajef+DTkFkaAEQRDc5EiVBZn67Ta0x3VusDtcmO0O1EoFXpr6X8uyLFNSUkJhYSFOtR6VMZiO/lp8vb0andcly6iUUn3puZca1dG2RTq1Ei+1kgqzDTX1+5wdo1KpsFgszJ07l6VLlzY6Z0rqAO578nm0Wm3D+1JSUoiNjSU7O5vevXu34HemaSJBCYIguIHF7qTG6iDQW3NCcnIcbXXkcLpQKRV4a52onRby8vKwWCwYDAZkYwjeWlWTyQnqR1EB3k0/S+Wn11BYZcbVzLbwDz30EA899FCjrxdVWyiutlBcXExgYCBKpZIDBw6wd+9eYmJizuI7cOZEghIEQXCDoioLsgwhf3sot7DKQrXFQYRRg8lip7DChqO2HINWS7t27ZC03pTV2vDVN35W6XT46dUUVZmpNjvO6H3HOh/9+utv/OtfT6FWq1EoFMyfP5+AgICziuVMiQQlCILQyqwOJ3aLnTBfXcP0G9Rvx15RZyNQr6KqpJDy8nLU/uEofQLx99Vh8FKTX2lGqZAw6s4uQamVCgw6NergcHbu3Nnw9QcffPCk7zu2RnbDTTdx882jz+ra50okKEEQhFYkyzJVZgchQQqCjpuGc7lk8ivNKHBRlJMNskx4eDihoaEcrrJSY3FQabajUSoI8tGeUyNZP72a8loZs92JXnN6v/YbOpq7ZDj7HUDOiUhQgiAIrei7jCLUDhehRt1xv/RdHCwqx+ZS4SgvIsDfn3bt2qHR1D9QGxmgpNpsx+F0YdCq0J1mUmmOj1ZFXnkdNRbH6ScoyfNbbogHdQVBEFqJ3eli7vdZqJUS/np1ff+88nIyMrMwOZUoHRa6dYoiOjq6ITlBfXLw02sI8tGdc3KC+u4RXmoltdbTX4dq2LTQg8/qihGUIAhCC3M4XGzPL+erbUUcLDXh6xVEbW0t+fn5mEwmtEHtkRQSXSJCUCvdM04waFWUmmy4XHLDSO5kjo2gPNlNQiQoQRCEFlRttvHGz3vZV1zDb9ll+GolqqurycrKQq1WE9I+mkq7kgg/L7clJwBvrYqSWit1NgeG0yi4UB6/BuUhYopPEAShhciyzLwfssk4XE1tTRVOoPjgHmwKLQERUbSL6YzJpcZboyJAf27bu58pb60KCem0p/nawhSfSFCCIAgt5Ovth1m8LhdH/k7SD9VSl/0nI31yMGhVKLVe1FpcGHUqIv1bZnv3M6FUSHhplNRam35g9++OTfFt2pjesNVGjx49+OKLLxqOmTZtGiEhISQmJrZKzCJBCYIgtIDyWguPrNiC6+AGVq/fiqTSsOzRW3jnrdfx02sINeoI8tESatSd8fbuLcWgVWG2OXG6XKc89liC6tItnk2bNrFt2zbS0tKYOXMmDkf9KGzq1KmkpaW1WrxiDUoQBOEc/fDDDzzxxXbqfLriX3MAdco4xqV24Iq+3RuO0amV4KHEBPXbbQy7+moSe6Wye9tG2kdG8uWXX+Ll1XT7JEkCCQmdlxcqVX2qsFgsJ4z8Bg8eTE5OTqvFLBKUIAjCWdq+fTsPP/wwv2zNJmLMU1wZ4UKbdB9rsku454rOzb5v7DvrWjSOT2b2P63j9u/bxzOvL2Rg3/n8c8YUPvvsMwoLC5tsFjt48GBmPvpvXDJs2LCBadOmkZuby5IlSxoSVmsTCUoQBOEUnE4X6/eXcLiqjsgAH9ppzDz15JN8+OGH+AUE0f/ONwgKb8fYwZ14etVuHhjahRAfnafDbiQ6OpqUnj0xWR2kpKSQk5PD7Nmzm2wWC5BZWI3LJZOamsquXbvIzMxkypQpXHPNNeh0rX9/IkEJgiCchNnm5PWfsthfWktljZn0vFocFYcx7Srn5gceJTLlBopqXYxP7cALaXtQKiUm9Ot40nOe7oinpWm1WgxaFUXVFiRJgcPhaHa7jcGDBzPr8WdPeA4qLi4Og8FARkaG2G5DEDwlLy+PyZMnc+TIESRJYsaMGdx7772eDkvwgBe+28Ouw5X4lu8l/f1nKdFEED1sGu2uuxNduBGbU8m4PpHsPVLLgVITi6f1rV9vaqO8tfW/9m2O+mq+5rbbANhbXENuTg7tfLuiUqnIzc1lz549REVFuSVWkaAEoQkqlYqXX36ZXr16UVNTQ0pKCkOHDiU+Pt7ToQlu9OPuIj5cl4Mi6ycO/u9Vpk2bxp133klKSgp7j9RwuMJE51AjVqfM/Z9u57oeEQzuEuzpsE/q2FbzVofrlD1gFZJE+vo/uXPymIbtNt5++22CgoIAGDduHGvWrKG0tJTIyEjmzJnD9OnTWyxWkaAEoQnh4eGEh4cD4OPjQ1xcHAUFBSJBuUlpjYXcsjr2l5ooqbFSUGkGGfaV1OLnpUYhwf4SE51DDeSWmTDqNHQONeBwuQgy6Ij09yIqUE90kIFgn6Y38juVH39bx8z/HcJWUYwx60e++uorRowY0VDF1iXMSJcwIy6XzN0fb0GrVvDEiLiW/Da0qKioKDIyMoD6UdTEGf+ga5jPSd+jlCSuH30LD866vcnXly1b1uJxHk8kKEE4hZycHLZu3Upqamqj1xYsWMCCBQsAKCkpcXdoFwSzzcmWQxVkFFSx7kAZGQXVhPhoqbU6OFReR3SQniqzg4RwIwC+Xmo0KgUKhUSgtxaL3UWdzUG5ycbeI7VkF9cgy5DS0Z/NuRUEemu4OjGMAG8NvTr6k9LBH6NX861+Dhw4wKOPPcYvtlj0nVK5s5c3jy3c1mzl2rt/HODH3Ud4eUxymyyMaIpBq6LQYsbucKFWNf84rEKSRLNYQWiramtrGTVqFK+++ipGo7HR6zNmzGDGjBkAblk0vhDIskz2kVp+3nOEgyUm/retALtTRqOU6BTiw6VdgunVwY92/l7EBBkINWrP6MFWm8NFYZWZ/Aoze4pqyCqqpqzWxrL0Q7hk8NeriQ7yZmh8KIM6B5MQYUSSJMrLy3nmmWfYvn07W6t0xAztwcTLOvPPYdc3e61teZW8lJbF0PhQrusR3hLfHrcwaOu/n7U2B/6q5lsuKRSe3W5DJChBaIbdbmfUqFFMmDCBm266ydPhnPeyi6r5ekch3+w4THmdnco6O6nRAUy/JIbUmABSOvqf9a6xx9OoFHQM9KZjoDcDOwU1fN1kdbA1r5INB8r4JauYj9fn8GJaFgY1+Lmq2fPVfCp2/8HwO5+ib8wldIvw5x9Xdmv2OtUWO/cs20qoUccLNyWdsnWRLMtub2/UHJ1aiVIhUWtx4H+SnoAKSTrnZrHyOSQ4kaAEoQmyLDN9+nTi4uK4//77PR3OeavW4uCr7Yf5ZOMhdGolG3PKGRAbxF1DIrikUzBhvu6bEvPWqrikUxC9OvhRYbJxsLQGp6mSwyUV1BjDMFz7MMEjHsYapKdPVAAPXx2Psplu47IsM/uLDAoqzXw6sx+++pMnVp1OR1lZGYGBgW0iSUmShEGrwmQ7eeNYhSThlOWzTq6yLFNWVnbWz0xJp8huHpx9FATP+eOPPxg0aBDdu3dHoaj/JfXcc88xfPjwZt/Tu3dvNm3a5K4Q27RDZXV88GcO3+8qorjGQkyQgfGpHRjePfysixZagizL/OurXXy9JRfLxuVkfvcRycnJ/OOJF8l0hLAm6zAlJpnuET4kRvpx68BouoQ2LiT475r9fL4ln1v6tGf6oJhTXtdut5Ofn4/FYmmN2zortVYH1WY7oUZdw9Yaf1djsVNldtDOT3fWiVWn0xEZGYla3SiJn/KEYgQlCE245JJLzmlq4mKVUVDF51vyef/PHJSSxIikcKYMiCK5vV+bGDnM+98GPtxQRvnqRfgVbWLx4sVMmDCh4UMIJJNRUMmS9Yf4fEsB2UW1GL1U3H15J1I6BgDwv60FLPrjAANig5h2SfRpXVetVhMdfXrHusvm3HKmL1/HgkkpXBUX1uQxi9fl8ORXu9g0+0qCDO7/YCESlCAI5yyjoIr//JjN6j3FhPhouevSWCYPiCLU2Daq2oqKirh/zjxW14ahc5p5/KZU7r13aZONUhPb+fHiKD8evbobKzbnMf/XA4z67zpu6dOeCD8vXvt5L1cnhPLS6FOvO7Vl8eG+KBUSO/KruCqh6QSlP7rdfJ3VCQZ3RldPJChBEM7awVIT877P4tudhSREGHloWFcm9e/YIsUOzakx2yk3WbE6XWiUSvz0any91E0mC5PJxLx585j7yuv4jn4G34hQvr6rP106nrrizt9bw4zBsUzs15FlGw7x9pr9lJlshBq13D4opk13izgdXholXUJ92J5f2ewx3pr6ezzVWlVrEQlKEIQzVm6y8f7ag7y9Zj9alYJ7rujMbYOi8WmFxFRUZWZNdgmZhdXkldVhtrs4XFmHSqnAT69BrZBQKCQCvDUoFS6S2vlzWZcg1qxayYsvvsjenDx6TXuWdt268uiIJLp0DDr1RY+jkCTyK8z4eqkJ8NZgd7oY/+4GbuzZjgev6oq/t3t3xm1JPSJ9SdtV1GwRhP5oW6Q6kaAEQWjrnC6Zj9MPMe/7LPz1asb1bc+9V3RplcKHHXmVrNyST/aRGpwu8NeriAryJirIG6NOhVqpwCVDldnO/uIa1u4rJbvYxLfbjvDvb8Beq0N9/fMMDdARHhLEqJRIBnQ6s+T0e3YJi9flUlJj4boeEdxzRWdqLXZe+WkvS9bnsmpHIQ9e1YXxqR2bLTRoy5Ii/Vi+MY+8cjMdAvWNXj/2vJTpNHfhbWkiQQmCcFq251Xw3Ld72HCwnP4xgcy5PqHJCrdzlVdex3/X7GdHfiWSBFd0C2FEjwg6hTR9rfJaK7O/LEWHFZ+cNRzYv4/ghIEEtutKtVNBdhXk1pSiVSsx2Zz07uhPbLABRXOVa2Ybv2aV8OOeYgoqzQR5a3l0eBz9YgIB8NVr+NfIBMb17cC/vtrFE1/u4uP0POaMTKBvdECLfz9aU1KkLwDb8yubTFDH1qBMVjGCEgShDbI6nLz2017e+e0AgzoH8eb4nlzbPbzFCwRkWWbphly+3VlEjcXByOQIxvftgOEk04Z2p4t7PtrAzqz9ZH32Hwx1hTz/5JPccccdaDQaqi12/txXxq/ZJfyWXUKl2c5jn++kf0wg7fx1BHhr0aoUqBQSJpuT0loLpTU2JAm0KgU39WzHTb0im1xv6hrmw8e3p/LtziKe/WY3z32bSVy4kf+7Ng6D9vz41do1zAeNSsGO/Equ6xHR6HXvYwnKJkZQgiC0MdvzKnlwxXb2Ftdyc0oks0fE43uSPnZnq9pi5+EVOyivs6FRSrw9oRftAxp/oj9eVVUVY59fxh6zkZrfl/HP8dfy6KOP4ufn13CMUafm6sQwrk4MQ5ZlcstMbMqt5EBJLdVmO8XVFsx2JwpJQqtS4K/XkBBmpEd7f3p19G92lHWMJElcmxTOkG7BvPXLft5es4/f95Ywd3QP+scGtsj3pjWplQriw41sz69q8nX90Sk+sQYlCEKbYXU4ef3nvcz/9QBBBg3vT+3DkG4hrXKtvPI6Hlm5g8yiau66rBO3DYo+6ejMZrMxf/58nn3/S3RX3kOEK4c1ny845R5FkiQRFWQgKqjl66X1GhUPDevKkK7BPLBiO+MWrufWgVE8PKwbXpq2Xe3XI9KXFZvzcbrkRutoDSMosQYlCEJbsLuwin8u30b2kVpGp0TyRCuNmqD++am7lm6hymxn/sRe9I9tvohBlmU+++wzHnvsMQ6ZlMTccC89Oxp4b+bdbabku3dUAN/dO4gXv9vD+2tz+DWrhHljetCrg7+nQ2tWUqQfH67L5UBJLZ3/tqaoUyuQJDGCEgTBw2RZ5qP1ubyUtoeYYEOrjpoANuaUc+v7G0lu78ec6xOIDT5xZGOy2vk18wgFlWZy8vL45ouV7N6yjnZxl3PlZSMJCw3mxVE92kxyOkavUTHn+kSuSgjj4ZU7uHPJZiYPiOLOS2NPOWXoCX8VSlQ1SlCSJOGtUYkRlCAInlNrdfDY5zv5evthLusazCtjklv1+Z6NOeW89tNeQoxa5t6cRLjviR0dsouqWfjbAfJKysnckcERkxVdl2u5LGkInWKjiAry5tZLYgnyYF+/UxnYKYi0fw7i5R+ymft9FhsOlvPq2GQC2thzUzHBBrw1SnbkVzI6JbLR63qNUoygBEHwjKyiGu5cupmcUhMPDeva6p/0dx2uYtoHGwkyaFh2ez/C/pacDpaaeObrHWRlZbF9xZuoyvby0EMPM3ZaX6wuFX7eKjoGtXx5e2vw0al56rp4uob58NRXu7j29d95a0KvNjXlp1RIJLbzbbZQwlurElV8giC43+db8nn8i50YtGo+ui2VASdZA2oJB0pqmbwoHR+tio9ua5yciitqmPbq1+yvclG07F9MG30t//rXd4SFNd0r7nwgSRLj+nageztf7ly6mbHvrOPx4XFMHRDVZnr59Wjvxwdrc7A5XGj+tsOuXqOkTjwHJQiCu1jsTuZ8vYtl6XmkRgfwxriehLRyY9fDlWYmLUoHYMltqbTz+ys5uVwuln68jNmrsqF9L2KLvyHtt++Jj49v1ZjcKbGdL6vuHsQDK7Yz5+vdbMqp4IVR3VulPdSZSor0xeZ0kVVUQ/eja1LHeGtOvW9Ua2l+M3pBEC5IR6ot3P/JNlZuzmfWkFiW3pba6smp2mJnzte7sDtdfDit7wkFET/99BO9UlJ46ZsdSGFxTEvS88snCy6o5HSMr17Nwv1/TfQAACAASURBVMkpPHpNN/7cX8rMJZvJK6/zdFj0iKx/dmxHQePGsXqtkjoPTfGJBCUIF5Fdh6u4/s21rMkuYf7EFB4a1g1VM7vGthSH08WspVv4ObOYV8cm0znIG4vdQUZGBsOHD2fo8OupiOiPT9cB3DeiF09OvLJV4/E0SZK449JY3hrfi12Hq7nhrbVszi33aEyR/l7469XsyGu8DlVfxSem+ARBaEU/7T7CPcu34uulZuUdA4iPMLrluk+v2s3ve0v55+Wd+H1vMR/8todf9hRjdcg4Aocw+MEJdOnaidSYYKYNPPlDuheSAZ2C+OKuAUz7YCPjFm5g7ugkrk9u55FYJEmie6Rfk1tveGuVosxcEITWIcsy763N4ZlvdpMY4cuiKb1bfUrvmA//zGHxulyuSQxl26Ey9u/LpihzE+XlFSSnDmTQTVcQG+pPSscA4tv5nvqEF5iYYANf3DWQmR9t5t7l2zhYauLeKzp7JEn3iPTl7TWlmG3OE7pf6D24BiUSlCBcwBxOF//6ehcfrT/EsIRQXhmb3NChurWtySpmzte76BPlx8+7CrEcOUj+8ie4+bqref7D54mJiXFLHG2dv7eGJdP78vjnGbz6014Olpp4cVSS2x9ATor0w+mS2XW4it5Rf3Vl9z66BtXcnlGtSSQoQbhAVVvszFq6hd/3ljLz0hgeGdbNbZ0Mso/UcPfHWwnWyWzck4fDaqZD7nes+OUHUlNT3RLD+USrUjLv5iRigr2Z+30W+RVmFkxKIdDgvgeRj3WU2JF/YoLSa1Q4XTJWh8vtSVMUSQjCBai42sKdSzaz90gtL47qzmPXxLktOZXWWpm0YC3muhrycnNAoWT2IH/W/vStSE4nIUkSs4Z04u0Jvai12pn0XrpbK/xCjTpCjVp2/G0d6ti2756o5BMjKEG4wOSWmZi0KJ3SWivzJ6YwuEuw266dte8Ao9/6jZLSMlROC5GdEnhlYn8Gdgl1Wwznu+Hdwwnx0TL9w02Mnv8ni6el0jXMPZ0zkiL92PG3jhLHtn03WR1ub9MkEpQgXEAyC6uZ/F46dqeLpbel0rOVW+ocqapjw4EyCkprSPvhe9YXyXi160pEOw0JMVHccXkXBp7hNutCfVf0T2f2Z9KiDYx5Zx3vTe1DSsfWb4/UI9KXH3cfocpsb+hgf2zLDU+MoMQUnyA0Y9q0aYSEhJCYmOjpUE7LxpxyxryzDqUksWJm/1ZPTt/sOMy/v97NK5//zmuffs9mUwBe7boSG6Bm3GW9mHNDkkhO56BrmA+f3TkAf72aie9uYE1WcatfM+noA7sZBX+Noo5tWuiJSj6RoAShGVOnTiUtLc3TYZyW1XuOMGnRBoINWlbe2b/Rtgktben6XO5btoVV//uU3954hHZyKSpjEDckh7Hqnst46OpuxIS0/MaAF5v2AXpW3DGA6CBvbvtwE19uK2jV6x1fKHFMwwjKA89CiQQlCM0YPHgwAQEBpz7Qw9IyCpmxeDOdQgx8ekd/Iv1PvlX6uZr7yWr+74udVO7diHHfj7wyfyG5IQMZ1DmIuTf3xEvXtraTON8F+2hZPrMfKR39ee7bTJanH2q1a/npNXQI0J9QKKHXiBGUIJyXFixYQO/evenduzclJSVuv/7KzfncuXQLN/Zsx7Lb+xHUimXJWVlZXDHxH7y5qRpX8V6eGR7Niu/WsHCPREywN29N6IW6ldsmXayMOjUfTuvLwNggHv18J++vPdhq10qK9D1xBKU9tgYlEpQgnFdmzJjBpk2b2LRpE8HB7quWA1iWfoiHVm5nYGwQT1+f2GpdsYuLi7nrrrvoedUYDoRfTpDazsaXp3P9qFu4fckWtCol703tg7ENdOW+kOnUSl4YlcTVCWHM+Xo37/y6v1Wu0yPSj4JKM6W1VuCvMnNPtDsSCUoQzkOL1+Xw2Oc7ubRLMO9O6X1Ca5qWYLc7qaiu4dlnnyW2WyJL1uUQN/o+hiWE8f3jI9FodUx5P51wXx3vTund6tOKQj2NSsEb43tyXY8Inv9uD2/8vLfFr5EU6YuXWsHuw/WjKE+OoESZuSCcZ979/QDPfJPJlXGhvDWhJ1pVyyQnl0vmh12F/LGvlK27stmZfRBzrYWOY2bTo3sCPWIjmH5JDGqVggkLN3Cg1MR7U/qQ3N6vRa4vnB61UsGrY5NRKyRe/jEbu9PFfUO7tFgbovgII1aHi+15VQzuEoLX0e4RtR4YQYkEJQjNGDduHGvWrKG0tJTIyEjmzJnD9OnTPRrTgt/289y3e7gmMYzXbunZaPfTs2WxO3np+z2s35XDkZxssjf9SscO7Zl8w/X0iOtCtwgfEiP8qLU6uO3DTewpquadSSlc0lmUkXuCUiEx9+YeqJUKXl+9D71WxczBMS2SpHx0aiL99WQWVQOgUEge21VXJChBaMayZcs8HcIJFvy2n8+35HNTz3a8NDqpxfZxcjhdTF+whk1Zhyj4fQUd7Id494knGDNmzAm/8Mpqrdz6wUYUksRrtyRzeTfRHcKTlAqJ52/qTohRywvf7aHW4uCBq1pmJBUfbiSzsKbhz/UdzcUIShCEJry/9iDPfbuHEUnhLZqc8vLyGDPvSwq9ojFv/o5/Tx7KXXfdhVZ7YjVgfkUdk99Lp6DCzNsTenFFnEhObYFCIXHflV0oqbHy5i/7UCkl/nlll3M+b1y4ke93F1Fnc6DXqI52NBcjKEEQ/mbJ+lzmfL2baxLDeGVscoskp+rqat566y1e/nEvhr6jiHflsHTVO/j7N+4+sTm3gsc/34ksw5LpqfSNbvvPhl1MFAqJ527sjsMl8+pPe1ErFcwa0umczhkX7oMsw56iGnp18K8fQYkqPkEQjrc8/RBP/C+DK+NCee2Wnuf8nJHdbuftt9+mU+duPP/1VsJ7X8Xo7gF88+JdjZKTLMssTz/EuIXrsTiczJ+YIpJTG6VQSLw4Kokbe7Zj7vdZ51yCHhdev9vy7sP161DeGjGCEgThOCs35/PYFzu5rGswb004+4KI3QWV7CqsZG36dr785juKy8roMPwfxCWlMLRnDDMHxzZatyipsfLct5l8sbWASf068MBVXfHTiw4RbZlSITHv5h44XDLPf7cHpULitkFntylkpL8XPjoVmYX1CUqvVVFltrdkuKdFJChBaIO+3FbAQyu3c0mnIOZPTDmrUnKrw8nz3+4h40Ae+/YdpOBwAYbwBK6+LJreCVFc2jWMAbEnVuHZnS4+2ZjH3O+ziArSM/vaOKYNjHbbXlLCuVEqJF4Z0wOny8Uz32SiViqYMiDqjM8jSRJxYcaGBOWtUVJYaW7haE9NJChBaGN+2l3E/Z9uJzU6gAWTep/VLqa1VgeTF/zOloI6yn9dgj4/nbn/fpKJEyeiUjX+sbc6nPxvawFpu4r4ZU8Jt/Rpz+2DY4gNFg1fzzcqpYLXbumJw7mZb3cWolUpuKVvhzM+T3yEkU835eFyyeg1KrFhoSBc7H7ZU8wdH23mhuR2PH194ll1iNiff4RRr6+mAm9qfp7PfSP68OCDC/HxObHDuc3hYlteBb/sKebTTfm0D9AT4K1h0ZTeXN4tpMUe/BTcT61U8Ma4XsxYspnHvtiJt1bFdT0izugcceE+1NmcHCqvw1ur9EizWJGgBKGNWH+gjDs+2ky3cCNPjUxoaDFzPKfTRaXZTmmtlVqrE7PNCci4ZLDbbXzyxSpWlxuxK3R0tezisXdfxxgQwI4jVmoO1VJaY2PvkRpMNgd55WZMNgdGnZrrekQwLCGUfjGBIjFdILRqJfMnpjDlvXTu+2Qb3lrlGT27dqxQIrOwun4EJTpJCMLFaUd+Jbd9uIn2AXoWT0ttaLxaWGVmw4Fydh2uIqOgimqzg12F1fTs4AcybM2rpGd7Xw4Xl3HEqgIiQQPRfmqyK5OY93shOaX7MNmc9OrgR53NSX6FmaviQxjQKZC4cB8GxAZjaCIZCuc/L42SRVN7M37hBu78aAsf3NqX/rGBp/XeLqE+KCTYXViNQavE5nRhc7harHvJ6RD/KgXBw7KP1DD5vXT89Go+mp6KRqXg0415/JJVzJFqCyqFhJdGRaS/nrCOOm7uHUmYrw61QiJz1w7efOc1DptVBPQfjbeXjsevTaR9gB6bw4VSISFJ4KVW4qdXE+itJcBbjUIhnjC5WPgc3apj7DvruO3DjSy9vd9p9U/UqZXEBBvILKxuKKapsznQqNxXzSkSlCB40KGyOia+uwGNUsH8ib34ensBf+wrpdbqJNxXx4ge4QyMCaJLmA+SJFFYZebLLQWsWJvF1l17KCguQxOSxIC4eHrEdeLuyzvTPkB0FhdOFOCt4aPbUrl5/jqmvJfOpzP70zXs1Lsux4Ub2ZJbwdD4+qlBk82Jnxv/eYkEJQgeUlRlYfy767E6nNw+KIYn/reLPUXVDO8ezj1XdKRXB78T1oM25pTz6ve72JO5hwNb16K013DjyBFcOWQwsSF+JLf3R+XG6Rfh/BJq1LH0tlRGz/+TiYs2sGJmf6KCvE/6nvhwI19vPwzU/zt0d8NYkaAEwQPKaq1MXrSBshor0cEG3vplH4M6B/PsjQOJjzA2Ov63zAKmfbgZU24GFT/NZ8a4G3jiiblu3yRROL+1D9Cz9LZUxryznqe/3sWzN3Un3Ner2ePjwutHWWWm+s0L3d0wViQoQXCzWquDW99Px+6UccgyQT4aZl6axMgeEY0q6JxOJ0+/vYQPc43Yq4rp49zNy3/+TOfOnT0UvXC+6xTiw+JpfRi/cAOTF9VP9/l7N72uFH+0kq+oygK4fwQl5gMEwY2sDie3L97IzoJqzA4HAzsFMe/mHlyf3O6E5CTLMt9++y2Jg6/l/QN6dNh455YEvvr0I5GchHOW2M6Pdyb1Jre8jls/2IipmcQT7KMl0FvD4Yr6LhLuHkGJBCUIbuJ0ycxauoV1+8uRgVG9InlvSh9CfHQnHLdt2zaGDh3KTbNmY44bQZCPFz//30hGXDHIM4ELF6T+sYG8Ma4nO/IrueOjzdgcrkbHSJJEXLiR3HIT4P5t38UUnyC4gSzL3Lt8Kz9lFtfvhjo6iZt6RQJQXWcj/UA5Ow8WsOL73zh8cB82fTKpk/rQO6EzDwzrRoQ7S6eEi8awhDBeuCmJhz/bwf2fbuO1W3qi/FvfxfgIIxsOlgG4fcsNkaAEwQ0e+3wnq3YU0s5Px+vjepLSsX7bilU7DvPt1jy2Zu7iwL5ctO0T6Njdl8EpSfSJDWNYYhheGvFjKrSeMX3aU1Fn4/nv9uCv1/D09QknTDfHhftgd8qAGEEJwgXnuW92s3xjHl5qJYun9SU2xAdZlnn5+0xWrd9N9pb1lG76mpuvTOX5+6bTocOZN/YUhHMx89JYyk023vntAEEGDfcetyvvsZZHIEZQgnBBefWnLBb+fhBvjZJV9wwiOsgbWZaZ+caX/LCzAE1dCXF125n3zXJ69uzp6XCFi9ij13TDYnfy2ZYCArw1TOofBUBssAGNUoFTlt0+ghJFEoLQSj78M4dXf9qH0UvF1/+4hOggb/788096jH2AHw6rUdWV8p/xffjpxx9EchI8TpIknhgRT5dQH578aherdhwG6jujdwoxoJBwe0dzkaAEoRWs2nGYp77ahUohsWJmf5yVhYwePZphdz9HdcwVxBvM7P7g/xhx7bWie7jQZqiUCt4c35PeHf2575NtrN1XCtRP8zldstun+ESCEoQW9uf+Ev6xbCsAL46M5YXn5jB61v/xa1UgCcMmMLZXOF8+dhMatZhhF9oenVrJu5P7EBNkYMbiTezMryI+wohLhgqTza2xiAQlCC1oZ0EF4xemI8sQJtXwj1c/ZVWBF+r4K7j+lkn8Y2R/nh2VjFopfvSEtstXr2bx9L746TVMfT8df3399i8ltVa3xiF+SgShGWlpaXTt2pVOnTrxwgsvnPJ4q8PFyDf+BGRcRVns/GE50eoqnrr1Ol656wZeHteXCf2jUInkJJwHQo06Fk/viwzM+yELgIo6946gxByDIDTB6XQya9YsfvzxRyIjI+nTpw8jR44kPj6+yeOLqy1kH6khXJYxZa+nQ14ai1+ex2WXXebewAWhBcUGG3h/ah/GLVyPBFSbL7AiCVmWySioYnn6oda+lCC0mPT0dDp16kRMTAwajYZbbrmFL7/8suljt2wn9d9p9X84ks1rN8ezMT1dJCfhgtCjvR/zJ6YgAw5n43ZIrUmSZbnZF6+++mq5tLT0nC+ys6AKgKhAb3x0TQ/aSkpKLpqtA8S9tn0VFRVUV1fTsWNHAMrKyjCZTCc8RGu329l/4AA2fQiSQoG99BA9kxIviqq88/Xv9WyIe61nsTvRqZUtdq3Nmzd/L8vy1Sc75qQJCjjpi6cr5rFvUEgSaqWCpben0quDf6NjevfuzaZNm1ricm2euNe2b+XKlaSlpfHuu+8CsGTJEjZs2MCbb75JTU0N8+bN4+W3F+J3y1xU3n6089Ww7ZkbMJlMHo7cPc7Xv9ezIe611Zzyk5xbVms1KgUyEOyjYdoHG9lXXOOOywrCWWvXrh15eXlA/TT1xgOlVPh1Y/zzH9Pt5gdYkmEmZNIrqLz9CDPq+P2RKzwcsSBceNySoLw1Kpwumedv6o5KoWD6BxsprDK749KCcFb69OnD3r172bZ7L3O+2slXmTWsPVjJz9tzMEZ0JqTHpbg0BkKNan5/eAgKhajME4SW5pafKt+jNfRVZgcf3NqHYB8dkxelU3lcyeKMGTPcEUqbIO617VOpVDw97w2uf+M33vtlN8W71iJt+YR3boln0qgRFNWBv17Nz/cPQa2q/zEKCgrycNTuc77+vZ4Nca+e45Y1qNH//ZNNuRX84/JOPHBVV9btL2PKe+kktjOy9LZ+eGlabuFNEFrCr1uzuH3pdixOMGz5iFljhjFjxgzeXZvLi2lZ6DVKfn3oMoKP22zwYlqrEIQW0DbWoHx0KrQqBZmF1UD9To6vj0tmW14ldy3djN3NpYuC0JyKigqmP/Q0kz7Ygtlm51qvvaz7agmzZs1iyYY8XkzLQqdWsOqeS05IToIgtDz3rEFpVaiVCjIL/yqOuDoxnGdu6M4vWSU8vHIHLleLDNYE4axYrVYWLFhAl0HX8aMzDr1Gyacz+vHf5/4PX19fFq/L4elVmagUEp/fOYCYIIOnQxaEC57biiQACirNJ6w7jU/twANDu/DF1gJeTNvD7NlPkJSURHJyMldddRWHDx92R3ge8dBDD9GtWzeSkpK48cYbqays9HRIrWbFihUkJCSgUCja3BSYxebg5fdX0G34rTz+xS4Mwx8iKtjImtkj6Z8YC8DS9bk8+eUulBIsn9GP+AjfE85xrCVSRkbGabVEOp9NmzaNkJAQEhMTPR1Kq8rLy2PIkCHEx8eTkJDAa6+95umQWo3FYqFv37706NGDhIQEnnrqKU+H1MBtIyiHq34a7/hRFMDdl3di5uAY0nYVEXjJLezYsYNt27YxYsQInn76aXeE5xFDhw4lIyODHTt20KVLF55//nlPh9RqEhMT+fzzzxk8eLCnQwHq2xIt+v0gA5/5jm6zv+ONLD1ynwkE9rqKB6+J56t7hxDmq0OWZf7zQxb/978M9Bol707pQ++ogBPOdawl0nfffUdCQgLLli1j9+7dHrqz1jd16lTS0tI8HUarU6lUvPzyy+zevZv169fz1ltvXbB/r1qtltWrV7N9+3a2bdtGWloa69ev93RYgJt68Rm0Sqz2Ywmqmv6xgQ2vSZLEI1d3o6jawmtrcgj192F8agdMJtMF/UT+VVdd1fD//fr1Y+XKlR6MpnXFxcV5OoQGB0tNjJv/B+VlpVQeykJrLuGWqwcxc+wIYoJ9UCjq/83ZnS4e+2wnK7fkAzB3dHeGdAtpdL7jWyJJktTQEqm5nn3nu8GDB5OTk+PpMFpdeHg44eHhAPj4+BAXF0dBQcEF+fcqSRIGQ/2Utd1ux263t5nfvW5JUHqtChkI9FY3FEocT6GQmHdzD6rNdh7/YgeP3PcPfKv388svv7gjPI977733GDt2rKfDuOD9tvMgty3Zis1up/ab/3DflJu4776X0ev1JxxXXG3h3uXb2FFQP+364qjuXJvUrslzFhQU0L59+4Y/R0ZGsmHDhta7CcHtcnJy2Lp1K6mpqZ4OpdU4nU5SUlLYt28fs2bNajP36pYE5a2tv0ynEB+++m0z382Z0OiYZ599lrcnjGDSog1sHzKTS7X7efPNN5kzZ447QmwVV155JUVFRY2+/uyzz3L99dc3/L9KpWLChMbfk/PJ6dyrp9TV1fHg3IWsqorAZanlCkUmL/3+LaGhoY2O/WVPMR+uyyE9pxynS+bx4d0Y26dD45MKF4Xa2lpGjRrFq6++itFo9HQ4rUapVLJt2zYqKyu58cYbycjIaBPrjG6b4gOIDvJmqzGcrdt3NLth26KpfRj7zjpWl3aCNd9yHucnfvrpp5O+/sEHH7Bq1Sp+/vnnNjOkPlunuldPcDqdrFixgode/xjFgGno5RoW3daXgb1ubXRsea2V57/LZEd+NSU1FpwumTsvi2XG4NiTXuP4lkgA+fn5tGvX9GhLOL/Y7XZGjRrFhAkTuOmmmzwdjlv4+fkxZMgQ0tLS2kSCckuRhP5oFV+kvxc2p4sDJU031Ny7dy++XvU7OWplK7Z+08kuujD79qWlpfHSSy/x1VdfNZpiEs7dDz/8QHKvXtzxn09QDppBl2Ad658dy8BeCSccZ7E7+XhDLqPnr+P7XUeI9NdRa3Uwrm97Hh7W9ZTXOdYS6eDBg8iyzPLlyxk5cmRr3ZbgJrIsM336dOLi4rj//vs9HU6rKikpaagiNpvN/Pjjj3Tr1s3DUdVzS4IyHJ3iCzPWP9jY1DoUwKOPPkpiYiJXDuxLaOanpMSEMHHRBg6V1bkjTLe6++67qampYejQoSQnJ3PHHXd4OqRW88UXXxAZGcm6deu49tprGTZsWItfI7+8jhUbc/m/j34lefpzjHn2Y2q6jaT/DVMY3j2cr+4bip9e03B8hcnGwt/2c+Pba5n3fRYdA/VMGxjFz3tKGNunA8/c0P20RrUqlYo333yTYcOGkZGRwZgxY0hISDjl+85X48aNo3///mRlZREZGcmiRYs8HVKrWLt2LUuWLGH16tUkJyeTnJzMt99+6+mwWkVhYSFDhgwhKSmJPn36MHToUEaMGOHpsAA3tTrallfJDW+tZeHkFGYt3cqtA6N4bPipK7uyj9Qw9p11eGtVrLxjAGG+4sl94UQul8zSDbn8uOMQGZmZVJaWYFN60T06lMG9e9A7JojLu4WhkOBQeR3pB8vZcqiCnNI6XLJMdJA31/WIoLTWyj8/2calXYJZMKk3GtWZf3YTrY4E4Yyc8hOge4okjvbas9hddA41sLuZEdTfdQn14cNpfRm/cAMTF23gkxn9CDRoWzNUoQ1xOF3kVdRxqNxMpcmGxe7E5pSpttiB+uH/mj2F7M4tojQnm7rcrYwYejlDhgxBp9NTY7XzfcYRFv2Rg4SEwyXjcsloVAp6R/lzbfdwuoUb+Wn3ER74dDt9owKYPzHlrJKTIAgtz61VfCarg/hwI79kFZ/2e5Mi/Vg0pTeT30tnyvvpfHx7P4w6dWuFKniQyyWz5VAFm3MryDpSw6accg6Vm9GoFET46ggyaJGBzbkVR98hAxL2qlq0UclEJvRmrclB4eYjBPtocThl8ivrSIzwJT7CSPsAPcmRvnQO9WmYvvtzXyl3fbyFhAgj707p3aI7hgqCcG7cm6BsTuLCjazYnE9xjYWQ02y2mRoTyPxJKcxYvIk5X+3i3zckNhReCOe/0hoLH60/xK7CairqbFjtLsKNOoYlhNEl1IeoQG+CfTQYdRo0Konvvv2Ghz/4CYtfLO31Tp6fcAlJyT1xuFxISCgVEjq1AoNWddJ1pC2HKrht8SaiA7354Na++IgPPoLQprh1is9kddDnaKuYzMKa005QAEO6hvDfCSnM/GgzhVUW3pvaR3zaPc+V11pZ9MdBPliXQ3SgN7HBBkb2j2JIt5CGwprjbdiwgQcefJDtZn+Ckq9kUFwMy/45HGUzjyyczO7DVUx9L50QHy1LpvfF31tz6jcJguBWbklQKqUCrUrRMMUH9ZV8l3YJPqPzXBkfyrybk7j/0+3MWLKZhZNT0KpEkjrfyLLMF1sLeO+Pg2QX1zJ1QEdu6d2BmJATO4TbHU4OV1o4kHuI//znZXZm52EL7Uny5ZdyVe+uPHJN3Fklp+wjNUxatIG+0QH8a2QCIUZRfCMIbZHb5skMWhUmmwNfvZoIXx27D59eocTf3dgzErtD5uHPdjBr6RbeniAWtc8nxTUWHlm5g9yyOkKMWr6cNYC48BO7g5usdlZsyiN9XzFbdmaQW1QO9vZ0G3Y5Cd06cVlcODf1jGzom3cm9pfUMn7hBpQKBf93bTyR/uIZNEFoq9yWoPRaJSarE4C4cGOzz0KdjjF92mN1unjifxncu3wrb4zrieosPkkL7rU5p5yZH22mS6gPt14SzcTUDo3WiIqrLTzzdQbbdmeTtXENtfnZXH7pICaOH0dMu1Di2xnx1p7dWlFOqYnxC+u7NH98ez+ig7zP+Z4EQWg9bktQ3hoVtVYHAPERRtZkl2CxO896HWlSv45Y7U6e+SaT+z/dzitjk1GexSdqwT0+25zPY5/v4JLOwTx6TTe6hPo0OqbCZGXkf36gtOQI+d+8zeXx4bz06Zst0nIlr7yO8QvXY3fKLJ/Rj04hYsNBQXC3jRs3Mn36dNLT0/Hy8vIG/r+9Ow+rstoeOP49HOYZZJ5UBBFBQMVwSMu5MtMstaQsfxlaeW20vLfJTDNtvre0tNmcytTM0kozNSckEVRmkElA5nnmvL8/UNIARYVzUNfneXoizvuedx30abH3XnvtcGCqoignWrpeuBJ8tgAAIABJREFUq1N8lbWNCcrX2ZIGjULimXL6uFld4s7WzRzqSW2Dho9+T2LxTzG8OK63JKlORlEUPvw9iXd+S2Bwjy68NzUIK5PmI6Bfdu7miY1x1Jk706v8BJ989jYjR45slxhOF1dx38pDVNY1sHbmwBaToxCi4w0YMIC77rqLl156CWAZ8E1ryQm0OsWnT0lV4wZL3/MKJa4mQQE8fqsXBnp6LP45luLKOt6aHChJqpPQaBQ+3J3Eu78lMKmvK2/eE9BsvTAmJoZ58/9NhHF/jLv15f6uFbyx7D309NpnyjazqJIFW09SWVvPN4+E0Nvl+u1ILcS14JVXXmHAgAEAwcDci12rxRGUmqziKgC62ppiaqhuc0eJS3l0mCfVdQ2881sCGkXh7cmBsialY4qisHBbDF8eSOWZ0T351wivC9abcnJyePXVV/nzrxMUuAzGycuP58b15sEhF+8efjnSCyq5f9UhyqrrWDMzBH/Xq/tlSAhx9QoKCigvLwewAIyBlruHo+U1qMqza1B6eip8nCzaLUEB/GukN3p6Kt76JZ4GBd6bIklKl975NYEvD6TyyM3d+dcIL0qr6tgdd4aEnBL27D9ExLFoamsUeo0KI8Tbi/F9Pbi7n/ul37iNTp0tiKiqa2DtowMlOQnRScyaNYvXX3+d0NDQNcBSYE5r12ovQRn9XSQBENzVlpOnS1AUpd3OQnpiuBd6KhVLd8ShURTenxrU6rlTouMs/yOJD3cncf9N7rw0zpe/0or4+sAp4pJTOXEsgpqqalw9fbmlvx/+3ZwZ7e+Ep337rQsl5ZYzbdUh6jUKa2cOvOxpve+++44FCxYQGxtLeHg4wcHB7RabEDeyr7/+GgMDA6ZNm0ZoaOibwAGVSjVCUZTfW7peiwlKTUVtQ1NC6mFvxqp9KaQVVNKtHct9H7u1B2o9eOPnOCyM9Fk4wV/2SWnRVwdSWbYjnglBLiya2IdDKQW8+u1hkmKi0ET/jJeVHm+++SaDBw/ukOfH55QR+ukhQMX6sCsriPD392fTpk3MmjWr/QMU4gY2ffp0pk+fDoCiKA3ARc+W116RhKE+DRqFmnoNxgbqpuKIqMzidk1QAGHDemCsr+a9nQmcKa1mxQP9pS2SFvx8PJtXt55kdG9H3p4cyJbd4Ty3/TTlCYexTN7BOwtfYdKkSR12enBMVikPfHYYfT0Vax+98lJyX99LHwUjhOh4WhtamJ/X0Rwaj9Iw0tcjOrOkQ543fXA35o3txR8JeTz0eThlZ49oEB3jYHIBc9dFMiXYjReG2vH4M/N5clM8DdXlPDXcg9jII9xzzz0dlpyi0ov5v6+OYKSvx4ZZg7S2z2nlypUEBwcTHBxMXl6eVp4pxI1Cawnq7yM3GrtJGKj18HOxJDqzuMOeOS3Eg/enBvFXWhEPfHqYooraDnvWjSwlr5zZ3/yFh40xdUc2EBA8mN/re+JmoWLj3JG8+PQTGBp2XDPWPxPzmfbpIXwcLdgQNqhNHSJGjRqFv79/s39++OGHy3p2WFgYERERREREYG9/eb0lhRAXp8UqvrMdzWv/LpQIcLNmw5EM6hs0HVZxNyHIFTNDfR5fe5T7Vh5i9SM3SXPQdlJT18Dx08XMWRtJdXU1J7d+xKFaDb6hL+Hbuydzx/pzU3fbDo3hp+hsntoQSQ97c5bdG4BjG/9sd+7c2aFxCSGung5GUH8nqEB3K6rqGkjKK+/QZ4/q7ciXMwaQWVTJE2uPklbQatm9aANFUdh27DTzN0XxwMoD5JTWUKOoMRk9l/GPzuPOkTfzysSgDk9Oqw+lMWfdUYLcrdkwa1Cbk5MQ4tqg9QR1fql5gJs1ANEZHbMOdb7BPez4ZmYIpVX1TFp+gKiMjptavJ4pisLKvSl8vPM4m/dGUq3RQz95D4/5wWcPBbNoSgivjvenp1PHdWxQFIUPdiby8pYTjPBx4Ov/C2mxfdKV2rx5M25ubhw8eJBx48YxduzYdntvIUTbabXMHKCytqHpe927mGFhpE9UZjFTBrTfJs3W9PWwYfkD/Xjo83DuW3mID6f1ZaSvY4c/93ryxuYjrDp8hspTkRjbOjPSrpxVi95AX187f5U0GoXXfjzJVwfTuKefG2/e06fd97rdfffd3H333e36nkKIy6e9EZRh8xGUnp6KPm5WHVbJ15Ie9uZsenwwPRzMePTrCNaFp2vt2dey/Px8Jj/9BqvC86jLjsfUsx93DA7ks2emaC05Vdc1sOBscgob5snbkwNkI7YQ1zGdlZmfE+BmTVxOKTX1DS3d1iEcLIzZEDaIod72/HvTcd79NR5FUbT2/GtJVVUVS5cuZcIjT3GwyhGL+hIsPHoT4GbNe/f1v6JDA69EfnkN01YdYvPRTBaM781/7vDtsJJ1IUTnoLUEZdrCFB9AoJsVdQ0Ksdll2goFaFwT+/ShYCb3d+O/vyfx+rZYaus1Wo2hM9NoNKxevRofHx9eXb6Wim5D8fPywNTGAWtTI1ZND8bEUDubn+Nzypj40X5isktZem8gDw/prpXnCiF0S2trUEb6agzUqgum+AAC3BsLJY5nFhN09mttMVDrsezeALrbmbFybwrHTxez4oH+2JkbaTWOzqCmroGfT2QRe7qUxNQ09h8MJyctEYch07kteAg93JyIO1NGaUkl383WXsXcH/G5zFkbiYmhmg1hgwjU8t8RIYTuaC1BQeOo5Z9TfC5WxtiZGxKVWcKD2gzmLJVKxePDvXC3NWXexigmfLifldP74+dy43S/zi+r5u1f4kg8nc+puOOcijuOlZM7I8dNItDXi55OlsRklxGTXcaK0H5a6wz+9cFUFmw9iY+TJZ89FIyLtYlWniuE6By0m6AM9Zs6SZyjUqno42rVoR0l2mJ8oAvdupgRtjqCe1cc5J0pgdzRx1mnMWlDRU09T6wOJyEpibitn2BckMCSJUt4+OGHMTY2RlEUFmw9yTeHM1g0wZ/b/Dv+Z1Jbr+G93+L5eG8KI3wc+O/9fZu2KQghbhxaLYEyM1I3G0FBY6FEUm55i69pUx83K36YMwRfZwseX3OU935LQKO5fosnSkrLuO219RxKLSFp2yc8dtcQkpKSmD17NsbGjVN4H+xK5KuDacy8uTuhAz06PKbskiqmrjzIij0pPD/Wh5XTgyU5CXGD0v4UX23zJBToboVGgROnSwjx7KLNkJpxsDBmXdhAXtp8nD/iczmWUcx7U4OwNeu4XnLaVl9fz2effcaKgzkUOwXTrfAwv29fS48eF55m+9WBVN7fmci9/d14cVzHV80dSMrnX+siqa5rYHlovxtiBCuEaJ12R1CGzdeg4LyOElrcD3UxRvpqlt0byJQB7hxMLuCOD/YRkVqo67CumqIobNu2jYCAAJ5bsZlip2DGehqz59OFzZLTD8dONx2d8eakPh2anBRFYcUfyTzw2WFszAz5Yc7NkpyEENoeQanJK6tp9n07cyNcrU2I0vE61PlUKhWhIV0JdLPm8TVHmbryEC/c5sOjQz2vmf03ZZW1RGUUUVxTT25mKp++v5SDBw/TdegE+g8eT7CPK29OCmh2367YMzz7bRQh3W353/19O6yRLzTub3rnl3jWHclgXIAzy+4JkCk9IQSggym+f5aZnxOg5Y4SbeXvasW2uTfzwsZo3vg5jtSCSp4e1RN7i85din4oOZ/vjmSQW1TKidhY8guL0dj2Z/jT99PTywtfF0vChnk1Sz7bj2ez7Jd4BvXowvLQfh160OOu2DO88H00pVX1LLsngMnBbtdM8hdCdDytV/FVtrAGBY3TfNtP5FBUUYtNJ1vvsTQ2YHloPzb+lcmLW06w40QOb9ytnYq2K7E3IY/3fo2hIC2RIxtXQEk2s5+Zz82j78XEyISeThZ4tdDMdc3hNF7acoJ+Hjb87/6+WBi3XwPW81XU1LPop1jWhafTy8mCNTMH4uN0+UezCyGubzrYB9VyS6PAs0fAR58u4Zaene/gN5VKxeRgd4LcrXnm2yhmf3OUSX1defUuv3btpH214rOK+NdX+8lPOUHOljeZft9kXn/9B9zc3Fq9p0Gj8N9dCazcd4rhPg58NK1fh3WJOJpexDMbjpFWWMmsYZ48M6YnRvra6UghhLi2aDVBmRupqW3QUFuvwVD/wqkl/3MJKqO4Uyaoc7wdLdj0+GA+/D2JD3cncSilgKX3BjDU++piLq+uo6KmHj09FZbGBhhd5tSaoih8s/5bXt5TgsrMBp+yY/x8aD+BgYEXvS+3rJql2+P4/uhp5gz34slR3h3SgLW2XsOKP5L47+9JOFkas+7RgQzUccWmEKJz02qCMj3b0byyth5D/Qun8SyNDfC0NyOqE65D/ZOBWo+nR/dkRC8HFm47yRNrjnKrjwMvjfNt82m9mUWV7InP42RWCRlFVdTWa9BTgUaBugYN5kb6uNmYYmtmwE3dbbmpe5dW14P27dvHs889R6J5AFZBY5nT34xn39l40ecrisL2Ezm8uPk4xgZqlt7Th6kDOmafU/ipQl7cfBxrUwMmBLqwYIIflh00fSiEuH5oeQT195Eb1qbN15kC3aw5kJyvzZCuSqC7NWtmDuTjPcks/yOZ3+NyeWZ0T6YP6tpq5VtSbjnrwtOIySqlqq6BLmZG+LtYYm9hjLmRGgUVRRU1FFTUklFURfipQj7cnYyRvh4DPbswxNOG/p7W9HXrQmJiIvPnz2fLli24jvo/3ELG8/hIXx4b7n3RuI9lFPHFn6n8dDyL4T4OvHB7L7wc2n8NqKiiliXbY/k2IhNXaxNeuM2HUb2d2v05Qojrk9bXoIBW16EC3KzYHHmaM6XV18zx3cYGap4a1ZOJQa68uvUkC7fF8N1fmSya6E//rjZN19XUN/DJH8msDU/HQK3HpH5u3NvfDXdb04u+f2VNPeGphfwed4ZtUVnsScgDQK3UUVeUDS6TuHX+RBy7eTHIy57Zt3q1+D4F5TXsS8hjV3wuiWfKMTdS8+p4P+6/yaPdy8jrGzSsC0/nt9gz7E8qYNYtnjw50rtpBC2EEG2h3Sm+s0dutNRNAhoTFEBURjFj/K6t37S72Znx5YwB/HIyh9d+jGH+99H0drHkuTE+qPVULNkey5nSGu7u68rMoZ50aWPHdFMjfYZ627MvIRd/V0vSE+M4GR+PoV13DGxdUKn0OaVAQ3EVMVmlLNsRj5mRGgO1HrX1DRRV1pFTWk18TmNScrYyITTEg0l93TAzbt8/fkVR2B2fyxs/x5GUW85wH3u2/WsIvs43TuNdIUT70ckUX2s993o7W6HWUxGdWXLNJShorPS7zd+Zod72fH0wlQ92JfJTdBaOlsbU1GtYPNGfsVdQmv7JniQ2hyeT9+cGMv9Yx8SJE3nzuRn08PImMi2fxLxq0grKySyqIuFMGTX1GmobGrAwMsBAT4WtuREPDuxK/67W+Ltadcheo4jUQlbtS2FXbC7utqasmh7MKF8H2dckhLhiWt8HBa0nKBNDNT0dLTpVR4krYWakz2O3euHnYsXzG6PILa0GFRxJLaKvh02bCykA/rvhF94NL6fk2A56Viazdu9ehg4d2vT6AE8HBnh2xKdom/BThXy0O4k9CXnYmRuyZFIfJgS5NqvSFEKIy6X1VkfQ+hoUNO6H2nEyB0VRrunfvpPzynl6wzEM1So+n3ETmyNP88WBVCLTi/F2NGfGkO4X3ZwaHR3N0/9+hYTu92JJJYseHU3o1JWd4mfSoFHYHZfLij3J/JVWxLCe9vz79l48OKirrDMJIdqNbookWlmDgsaOEuuPZJBeWEnXLmbaCq1dFVfW8vzGKFxtTHh/ahCe9uYM9bZn7ghvvo3I4PP9p1h/JIObvbrwwMCujPR1bNp7lJmZycsvv8xXX6/G6a5nMTG3Yt3jtxPgofs9QwXlNWz8K5NvDqfhbGlCTkk1C8b3ZsoAd0lMQoh2p7My89Y0FUpkllyTCapBo/Dk+mNEZ5awPmwQnvbmTa91szPj+dt68ehQT9aGp7MvIZfZ3xzF3EhNkKsl5SmRRB3aTWF+PsOeXUGJmQcLJ/bRaXKqrdewOz6XzUdPU1RZy+FThYR0t+Whwd0Y3duxQzb1CiEEaDlBGenroaeCyotM8fk4WTCoRxeSc8u1GFn7eX9nAnsS8pqVmZ/PxsyQod52HM8owspEn5Kqev5MKQK6wcAZ2AAO3az5v0AXxge6aDN8oPEXiL0JeeyMOUNuWTV/JhVgZ27E5P6uLJzgL33zhBBaodUEpVKpLtrRHBq7NKhVKn45mcPTo3tqMbqrty8xj93xuUwJdiM0pPWuDLml1cxdF4mlpoyyn//L6fgT9Bt8C0OnzCapwoCKmgbCU4tJyK0gMq2E/t1s6N/Vhp6OFqj12n8NqrK2nujMEg6lFHAopYD88lqScsuxNjVgcj83HhnqyVAvuw49dqMzmTdvHj/++COGhob06NGDL774Amtra12HJcQNR+sLB+ZGLR9aeL4hXnYs3RFHXllNpz/W4pzS6jqe3xiNmaGaBXf5tVrMoCgKz63ex5msHA6ueRnPLiZsWr2KO++8s+mewopa9iXmsSchj/yyGl7acgKAPq6WGBuoGeRph62ZAZ725jhZGeNoaYyFkRo9vdYTSH2DhoKKGnJKasgsruRMaQ1RGcWUV9ezOz6X/l1tiEgrws/Fknv6udLXw4bgrjY3TFI63+jRo1myZAn6+vq88MILLFmyhKVLl+o6LCFuOFpPUKaGaiprW5/iAxji1bjmciA5nwlBrtoI66ot+TmWM6XVfP/Y4FYLBlJSUpi5+FNS7IdQF7mdVW8vZNq0aejrX3i9rZkhE4JcmRDkiqIopBdWcjS9iPSCSvYm5hORVsiB5AK8HcyxMTUkPLUQR0sjfBwtSM6roKejOVnF1VTXN+BpZ0Zsdik5pTUEd7MhIrUID1tTLI31KaqsY6SvA3NGeNO/qzVB7jadqjO7rowZM6bp64EDB7Jx48X7GgohOoZORlAXm+ID8HOxwsrEgP1J10aC2puQx7rwDGbd4klfj+brToWFhSxatIjlX6zFYfr7OKlK+W3rx1hZNj+T6Z9UKhVdu5g1FYw8OaoniqKQX15LWkEF+eU1jPFzpKSqDrVKhb2FMZYm+lieTTRu1iZ0tzPDwtgANxsTwoZ64m5rioetqZxc2waff/45U6dObfX1lStXsnLlSgDy8vK0FZYQNwQdjKAuPcWn1lMxyLML+5MKOv1+qPLqOv696Tg97M2YO9yLP+JyOF1YhbO1Cf09LFj18QoWL15MaVk5QXM/xsHNkY8eHICVpfml37wVKpUKewuja2b6szMaNWoUOTk5zb6/ePFiJkyY0PS1vr4+oaGhrb5PWFgYYWFhAAQHB3dMsELcoLSeoMyM9DldXHXJ64Z4dWHHyRzSCirpZtd5y80/2p2Ei7Uxz4zuyYo9ycTnlFJdXcOZvHwyMjJI+/NnAm6+i74THian1pAZg7tdUHoudGPnzp0Xff3LL79k27Zt7Nq1q1P/giTE9UwHU3zqS46goLFQAmB/cn6nTVAZhZV89mcqdwW5cDilkF2xZ+hrUc5Pny4gLrcW92FTuP3hZ7Gxt8PQUJ8H+zpw1zUwZXmj27FjB8uWLWPPnj2Yml6827wQouNof4qvDVV8AN3tzHC2MmZ/Uj6hIV21ENnle3NHHGo9FaN8HVi4NZrapEMs+WIB7u7urFq0iNDQUOJySiksq8PL0RxnG/mf3bVgzpw51NTUMHr0aKCxUOLjjz/WcVRC3Hh0U2Z+kVZH56hUKoZ42bEz9gwajYJeB+z/uRp/pRXxU3Q2M25y4vU1OzmVnkXljg9ZsmQJTz75JCYmJgD4uba8WVd0XklJSboOQQgBaH2Ti5mhPtV1GuobNJe8dohXF4or64jJLtVCZG2nKAoLt57AhDr+9+4yTiu2jHBTkRQXw/z585uSkxBCiCun/QTVdGjhxfdCAQzpcXYdKkl3x8BHpRWwMfwU4cl5KIpCQ0MDz76/hqjTpWT+9gW2IRMJcjbhmzfnYW9vr7M4hRDieqOTKj5obK9zqU2hDpbGeDuYsz+5gFm39NBGeBf47kgGO2OyKCqvwtLMlBU/hZP+2xfEu96Okf4Zxj30BMllKt6ZdpNUegkhRDvTwQjq4ocW/tMQLzvCTxVQU3/pEVd7+iutkHVH0nGwNGGGj4Zj29ew/UgsqT3uRt/aiWF9e6MxNOfZMT70kLJxIYRodzpYg2qc4iu/SEfz8w3xsqO6TkNkuvZO2a1v0PDylpPU1daQsuU9xo0ZRequNTzQxxLF2BprI7AwUTOxrwtTg921FpcQQtxIdDaCqmzjCCrE0xa1nkqr61Df7E8kNTuXvStf5fsN63j++edJSkrC1GcwCvDulH4suNOfaSHdZGpPCCE6iE7KzOHihxaez9LYgAA3K/Yn5fPsGJ+ODI3a2lo++vgT3kuwxFip5a7g7izesQYPDw9S8srZFp1N6EAPRvg5d2gcQgghdDCCMjU8V8XXtgQFjdV8UZkllFXXXdWzNRoN245msmxbNGsOnWoaxSmKwsaNG/Hz8+PVr3eiZ27Hv+/0Z/XXX+Ph0Xiu07Id8RioVTw50vuqYhBCCNE2Wk9Q5k1FEm0vehjiZUeDRuFwSuFVPfu7vzLYFJXJ0bRidsXmsujnGPb8eYChQ4cyefJkDE0t8Lg9jME9ujDj9kFN9x3LKGbHyRzuv8kDewvjq4pBCCFE23T6Kj6Afl2tMTbQY1/ila9D5ZZWs+loFg4WJqx97GYGO+uz8c9YJi1ai4WlJatWreKRt9ZSXgfPjf17KlFRFJZuj6OLmSEzh3pe8fOFEEJcHq0nKBODs1N8l5GgjPTVTOrnyu74XBRFuaLnbjiSQURaEfcFdeGpp57isfEDKdi3Fu++gwl46DXynUI4llHCY7d40u+8M532JuZzMKWAOSO8mkZ/QgghOp7WE5SengozQ3WbOkmcr7+HLemFlURmXH65eUVNPR/vSaanfj639Pdj+fLlPPLII5zc+gnP3XMzlfUKqfkV+DqZ89h5G4I1msbRk5uNCdNCPC77uUIIIa6cToYEZm3saH6+0X6OGG7W48eorAtGONujs4g8lYezjTn3D+qKscGFH0mj0fCfjzdRUWtG1pHN3HLLLSxduhRfX18A7nWCwZ52FFRU4+tshb6+uuneH6OziMku5b2pgRid930hhBAdT+sjKGhMUG0tMz/H0tiA4T72/BSdTYOmcZovOrOYjUczCD9VxJ6kPD7Zk3LBPbt27aJ/cDDfRmajLsvh/ZfmsnXr1qbkdI6LrSl93G0vSE619Rre+TWBXk4WTAiUM5yEEELbdJSg1FS2MsUXlVHMy1tOkJJX3uy18YEu5JbVEH6qsZpvXXg6p4urWT1rMF27mHP4VCExWSUcP36cO+64g1GjRlGEBUZOXrwSOoLhw4e3OcYNR9JJL6zkhdt6dbqjPoQQ4kagmwRl2PoIasORdFYfSuPLA6nNXhvRywFTQzU/RmdRVFHLtxGZjOjliIWJIc+M9iE5t5RHl37FzJkzOXDgAG+99RaTnn8PU0M1k/q5tTm+ipp6PtiVxE3dbLnVRzqUCyGELuhsiq+1Naj0wipsTA34LiKT4sraC14zNdRnlK8j249n80tMDg0ahdv9nSkvL+fdpYtI3vEFmUbd8B58O0lJSTw8aw7J+ZVMCHLBwvjindPP9/mfp8gvr+GF23tJKyMhhNARnSWolqb4FEUhJruUkO62VNU1sOZwerNrxge6UFJVx/rwDFysjNm/bT1eXl4sXLiQW11V9HE2p8RzJGaWVny5P5X0wkrChrV9/1JBeQ0r96Ywurcj/bvKabhCCKErOklQ5kbqFqf4zpTWUFhRy2AvO27pac8X+1ObHbMxzNuObl1MiTldRF1qBI89Nhtvb28OHTrExvVrmX9nALZmhty3Yi8nskp4/FZPutu1/TiM93cm4udqybwxPa/6cwohhLhyOklQpoYtT/HFZJcA4OtsSdgwT/LLa/ghMuuCa45HRXIm7i9qNSoa8lLYvHkze/fuJSQkBICbve14ZEg3bu5hx+29HXlocPc2x3XidAlrDqfRy8mSnk6WV/EJhRBCXC2dTvFpNBd2hYjNLgOgl5MFg3t0obezJSv3paDRKKSmphIaGsqAAQMoLswHFO548AkmTpzYbJ1omI8j8+4MZOrAbhi2cf+SRqPwyg8nsDUz5OnRMnoSQghd09kUH0Bl3YXTdzFZpXTtYoqFsQEqlYqwYZ4k5ZYz/YU3ue+++9i0aRP/+c9/6BEyGkdLY7Ycy77qDufnfH80k6PpxbxwW69LHkUvhBCi4+lsig+a9+OLyS7F9+zUWk1NDUm7v0VTns/OTIVBgwaRmJhI2DP/Ib2omgmBLpTX1PNdROZVx1NUWcv7OxPp52HNPZdRji6EEKLj6GgE1TxBVdTUk1pQga+zBRs2bMDX15d5zz6DY3Esxl0D+b9nF+Dm5sbehDwA7g/pyr393NgWnUV13eX19fun13+MQVEUFk30l025gpdffpmAgACCgoIYM2YMWVlZl75JCNHudLYGBReeCRWXU4aiwNqPlnLfffdhbm7Ojh07+P3T17Ew0mfVvsY2RjHZpfi5WNKtiymT+rtyNL24xU29bfXLiWw2RZ5mcrA7vV2srupzievDvHnziI6O5tixY9x5550sXLhQ1yEJcUPSUSeJxjWoc6Xm8fHxPLngLQBsVJV8/vnnREZGMnbsWCyMDZgW4sFPx7M5mVXM5sjThHTvgkqlYnAPO4b72LPmUBp5ZTWXHUdmUSVv/ZLA7f5OzBnh1X4fUFzTLC3/ruCsqKiQzdpC6IhOR1BZeQU88cQT+Pn5kZRfhRH1fL/6U2bMmIFa/Xf13cNDuqECFv4Yi5mhPpOD/14neulOXypq6nntx5OXFUN1XQOPrzlwYAUSAAAEUUlEQVTKmdJqnr+tFwZqnfwoRCf14osv4u7uzpo1ay46glq5ciXBwcEEBweTl5enxQiFuP6pLnEA4JWdDngJx9PyGL8inIqdH1J07DdmzZpFqvdkLE2NWRc2sMV7nl4fyU/Hs3ggpCuv3OV/wWv/25XIR7uTeGtyIOMDXS75fI1G4bmNUcTnlDF3pDdj/Zza5XOJa8eoUaPIyclp9v3FixczYcKEpv9esmQJ1dXVvPbaa5d8z+DgYCIiIto1TiGuY5ecmtBqgmpoaGD16tW89Mbb6E9aSp/qE7w1ewLePX3we3UHoSFdefnO3i3em1taTXpBOS5WJrjYml3wWl2DhrnrItkdn8v6sIEEubfeoqihQcO7OxP4aHcyL9zmw2O3ytSeaF16ejp33HEHJ06cuOS1kqCEuCyXTFBam9f69ddf6devHzNmzMDZzhaACfdMplevXpzKr6C6ToOvc+vdGxwsjQnubtcsOQEYqPVYOMGfIV52vLLlJBGphS2+R2lVLQt+PMnhlEL+c4cvs887PVeIcxITE5u+/uGHH+jVq5cOoxHixqWVBLV8+XLGjh1LWVkZ69ev58De3cDfRRIx2aUA9L5IgroUewsjXh7XG1NDNf/blcjy3YmcymtsnZRXWsW3Eek8+10Uv8flcnc/Vx4d2l0Wv0WL5s+fj7+/PwEBAfz666988MEHug5JiBuSVo58nzJlCnV1dcyePRsjIyMAjA30mvZBxWSVYqBW4eXQ9qauLelmZ8bHD/TniwOniMooISq9GA0KigIaRcHZ2pS5D3jRx026lIvWff/997oOQQiBlhKUnZ0dTz755AXfMzfSp+LskRsx2aV4O1hgqH/1AzprM0OeHu1Den4FkRmFFJfXYWasppezFX6uVjJqEkKIa4RWElRLzu9oHptdyjDv9j251sPODA+75utVQgghrg062/xz7lTd3LJq8spq6O0ix1sIIYT4m84SlLmRmoqahqYjNq6mQEIIIcT1R2cJytRQn4raemKyrr6CTwghxPVHhyMofcpr6onNLsXV2gQrUzmDSQghxN90uAalprKmofEMKBk9CSGE+AedTvGVV9eRklcuBRJCCCGa0VmZ+bl9UArQ29lCV2EIIYTopHRaZn6uE21vZzkoUAghxIV0ugZ17t9uNia6CkMIIUQnpbsEZdg4u9jD3hw9PWk/JIQQ4kI6S1AmZ49997A11VUIQgghOjGdJaiq2sY+fDK9J4QQoiU6q+IbF+BCoLs1XcwMdRWCEEKITkxnCcrYQI2Xg5SXCyGEaJnOpviEEEKIi5EEJYQQolOSBCWEEKJTkgQlhBCiU5IEJYQQolOSBCWEEKJTkgQlhBCiU5IEJYQQolOSBCWEEKJTkgQlhBCiU1IpinLpq4QQl6RSqXYoinKbruMQ4nohCUoIIUSnJFN8QgghOiVJUEIIITolSVBCCCE6JUlQQgghOiVJUEIIITql/wdGXPXilxyOJQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"from sympy import *\n",
"# 式中で使用する文字を定義する。\n",
"x = symbols('x')\n",
"# フーリエ級数展開したい関数f(x)を定義する。\n",
"f = x\n",
"# フーリエ級数展開を求める。\n",
"s = fourier_series(f, (x, -pi, pi))\n",
"# 取得する項数を指定して具体的な級数展開を求める。\n",
"terms = (1, 5, 31)\n",
"ss = [s.truncate(n) for n in terms]\n",
"# 級数展開した式を表示する。\n",
"for n, exp in zip(range(len(terms)), ss):\n",
" print(f'n={terms[n]}のとき')\n",
" display(exp)\n",
"# SymPyのプロット関数を使ってグラフを描画する。\n",
"p = plot(f, *ss, (x, -pi, pi), show=False, legend=True)\n",
"p[0].line_color=(0, 0, 0)\n",
"p[0].label = 'x'\n",
"for i in range(len(terms)):\n",
" p[i+1].label = f'n={terms[i]}'\n",
"p.show()"
]
},
{
"cell_type": "code",
"source": [
""
],
"metadata": {
"id": "Dm6jrImmat0h"
},
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment