{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## ThinkDSP\n", "\n", "This notebook contains solutions to exercises in Chapter 2: Harmonics\n", "\n", "Copyright 2015 Allen Downey\n", "\n", "License: [Creative Commons Attribution 4.0 International](http://creativecommons.org/licenses/by/4.0/)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "# Get thinkdsp.py\n", "\n", "import os\n", "\n", "if not os.path.exists('thinkdsp.py'):\n", " !wget https://github.com/AllenDowney/ThinkDSP/raw/master/code/thinkdsp.py" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from thinkdsp import decorate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1\n", "\n", "A sawtooth signal has a waveform that ramps up linearly from -1 to 1, then drops to -1 and repeats. See http://en.wikipedia.org/wiki/Sawtooth_wave\n", "\n", "Write a class called `SawtoothSignal` that extends `Signal` and provides `evaluate` to evaluate a sawtooth signal.\n", "\n", "Compute the spectrum of a sawtooth wave. How does the harmonic structure compare to triangle and square waves? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution\n", "\n", "My solution is basically a simplified version of TriangleSignal." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "from thinkdsp import Sinusoid\n", "from thinkdsp import normalize, unbias\n", "import numpy as np\n", "\n", "class SawtoothSignal(Sinusoid):\n", " \"\"\"Represents a sawtooth signal.\"\"\"\n", " \n", " def evaluate(self, ts):\n", " \"\"\"Evaluates the signal at the given times.\n", "\n", " ts: float array of times\n", " \n", " returns: float wave array\n", " \"\"\"\n", " cycles = self.freq * ts + self.offset / np.pi / 2\n", " frac, _ = np.modf(cycles)\n", " ys = normalize(unbias(frac), self.amp)\n", " return ys" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sawtooth = SawtoothSignal().make_wave(duration=0.5, framerate=40000)\n", "sawtooth.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what the spectrum looks like:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sawtooth.make_spectrum().plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compared to a square wave, the sawtooth drops off similarly, but it includes both even and odd harmonics. Notice that I had to cut the amplitude of the square wave to make them comparable." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from thinkdsp import SquareSignal\n", "\n", "sawtooth.make_spectrum().plot(color='gray')\n", "square = SquareSignal(amp=0.5).make_wave(duration=0.5, framerate=40000)\n", "square.make_spectrum().plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compared to a triangle wave, the sawtooth doesn't drop off as fast." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from thinkdsp import TriangleSignal\n", "\n", "sawtooth.make_spectrum().plot(color='gray')\n", "triangle = TriangleSignal(amp=0.79).make_wave(duration=0.5, framerate=40000)\n", "triangle.make_spectrum().plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specifically, the harmonics of the triangle wave drop off in proportion to $1/f^2$, while the sawtooth drops off like $1/f$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2\n", "\n", "Make a square signal at 1500 Hz and make a wave that samples it\n", "at 10000 frames per second. If you plot the spectrum, you can\n", "see that most of the harmonics are aliased.\n", "When you listen to the wave, can you hear the aliased harmonics? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution\n", "\n", "Here's the square wave:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "square = SquareSignal(1500).make_wave(duration=0.5, framerate=10000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the spectrum looks like:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "square.make_spectrum().plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see the fundamental at 1500 Hz and the first harmonic at 4500 Hz, but the second harmonic, which should be at 7500 Hz, is aliased to 2500 Hz.\n", "\n", "The third harmonic, which should be at 10500 Hz, would get aliased to -500 Hz, but that gets aliased again to 500 Hz.\n", "\n", "And the 4th harmonic, which should be at 13500 Hz, ends up at 3500 Hz.\n", "\n", "The 5th harmonic, which should be at 16500 Hz, ends up at 1500 Hz, so it contributes to the fundamental.\n", "\n", "The remaining harmonics overlap with the ones we've already seen.\n", "\n", "When you listen to the wave, the fundamental pitch you perceive is the alias at 500 Hz." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "square.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you compare it to this 500 Hz sine wave, you might hear what I mean." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from thinkdsp import SinSignal\n", "\n", "SinSignal(500).make_wave(duration=0.5, framerate=10000).make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3\n", "\n", "If you have a spectrum object, `spectrum`, and print the first few values of `spectrum.fs`, you’ll see that the frequencies start at zero. So `spectrum.hs[0]` is the magnitude of the component with frequency 0. But what does that mean?\n", "\n", "Try this experiment:\n", "\n", "1. Make a triangle signal with frequency 440 and make a Wave with duration 0.01 seconds. Plot the waveform.\n", "2. Make a Spectrum object and print `spectrum.hs[0]`. What is the amplitude and phase of this component?\n", "3. Set `spectrum.hs[0] = 100`. Make a Wave from the modified Spectrum and plot it. What effect does this operation have on the waveform?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution\n", "\n", "Here's the triangle wave:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "triangle = TriangleSignal().make_wave(duration=0.01)\n", "triangle.plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first element of the spectrum is a complex number close to zero." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "(1.0436096431476471e-14+0j)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spectrum = triangle.make_spectrum()\n", "spectrum.hs[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we add to the zero-frequency component, it has the effect of adding a vertical offset to the wave." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "spectrum.hs[0] = 100\n", "triangle.plot(color='gray')\n", "spectrum.make_wave().plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The zero-frequency component is the total of all the values in the signal, as we'll see when we get into the details of the DFT. If the signal is unbiased, the zero-frequency component is 0. In the context of electrical signals, the zero-frequency term is called the DC offset; that is, a direct current offset added to an AC signal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4\n", "\n", "Write a function that takes a Spectrum as a parameter and modifies it by dividing each element of hs by the corresponding frequency from fs. Test your function using one of the WAV files in the repository or any Wave object.\n", "\n", "1. Compute the Spectrum and plot it.\n", "2. Modify the Spectrum using your function and plot it again.\n", "3. Make a Wave from the modified Spectrum and listen to it. What effect does this operation have on the signal?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution\n", "\n", "Here's my version of the function:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def filter_spectrum(spectrum):\n", " \"\"\"Divides the spectrum through by the fs.\n", " \n", " spectrum: Spectrum object\n", " \"\"\"\n", " # avoid division by 0\n", " spectrum.hs[1:] /= spectrum.fs[1:]\n", " spectrum.hs[0] = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a triangle wave:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave = TriangleSignal(freq=440).make_wave(duration=0.5)\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the before and after look like. I scaled the after picture to make it visible on the same scale." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "spectrum = wave.make_spectrum()\n", "spectrum.plot(high=10000, color='gray')\n", "filter_spectrum(spectrum)\n", "spectrum.scale(440)\n", "spectrum.plot(high=10000)\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The filter clobbers the harmonics, so it acts like a low pass filter.\n", "\n", "Here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered = spectrum.make_wave()\n", "filtered.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The triangle wave now sounds almost like a sine wave." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 5\n", "\n", "The triangle and square waves have odd harmonics only; the sawtooth wave has both even and odd harmonics. The harmonics of the square and sawtooth waves drop off in proportion to $1/f$; the harmonics of the triangle wave drop off like $1/f^2$. Can you find a waveform that has even and odd harmonics that drop off like $1/f^2$?\n", "\n", "Hint: There are two ways you could approach this: you could\n", "construct the signal you want by adding up sinusoids, or you\n", "could start with a signal that is similar to what you want and\n", "modify it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solution\n", "\n", "One option is to start with a sawtooth wave, which has all of the harmonics we need:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "freq = 500\n", "signal = SawtoothSignal(freq=freq)\n", "wave = signal.make_wave(duration=0.5, framerate=20000)\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the spectrum looks like. The harmonics drop off like $1/f$." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "spectrum = wave.make_spectrum()\n", "spectrum.plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we apply the filter we wrote in the previous exercise, we can make the harmonics drop off like $1/f^2$." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "spectrum.plot(color='gray')\n", "filter_spectrum(spectrum)\n", "spectrum.scale(freq)\n", "spectrum.plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave = spectrum.make_wave()\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what the waveform looks like." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.segment(duration=0.01).plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's an interesting shape, but not easy to see what its functional form is.\n", "\n", "Another approach is to add up a series of cosine signals with the right frequencies and amplitudes." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from thinkdsp import CosSignal\n", "\n", "freqs = np.arange(500, 9500, 500)\n", "amps = 1 / freqs**2\n", "signal = sum(CosSignal(freq, amp) for freq, amp in zip(freqs, amps))\n", "signal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the spectrum looks like:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "spectrum = wave.make_spectrum()\n", "spectrum.plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it sounds like:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wave = signal.make_wave(duration=0.5, framerate=20000)\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what the waveform looks like." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO29e5RcV3ng+9v17qru6ne3WlJLlvWwkWyDbWHATkh425Bg8mBikntD1iWX5AaSyTCzBggzycBAJuRmhUwuIRMSMgvywDiEBAfMK9gQYhxsWca2ZFtPWy2pW/3u6qqurve+f5xzqsutqu56nHft31pa6q46Z5/z9T5nf4/97W8LKSUKhUKhULiNgNM3oFAoFApFPZSCUigUCoUrUQpKoVAoFK5EKSiFQqFQuBKloBQKhULhSkJO34BbGRkZkddcc43Tt6FQKBS+5vHHH1+QUo7W+04pqAZcc801HDt2zOnbUCgUCl8jhLjQ6DsV4lMoFAqFK1EKSqFQKBSuRCkohUKhULgSpaAUCoVC4UqUglIoFAqFK1EKSqFQKBSuRCkohUKhULgSpaAUCoVC4UqUgjKZZ2dWee/fHueFhTWnb8URvn5ihoeem3P6NhxhNVfk419/jnyp7PStOML9T07zvTPzTt+GIyytFfj9rz9HsVxx+lZ8hVJQJpMtlPjKUzO8sNidCuoT3zrDJx866/RtOMJ3Ts3zp985x/ELK07fiiP8wTdO8WffPe/0bTjCPz8zy6e+c44Tl1NO34qvUKWOTGasLwbA3Gre4Ttxhtl0jmyxOx+rudWc9n865/Cd2I+UktnVHLFwd9q8s9W+78733iq6cySxkLFkFNh4YLuJXLHMSrZItlBGSokQwulbspXqINWFxsnqeol8qcJsF8oOmmEGG0aKwhy609yxkGgoyGA8XH1gu4l53XoslCqk1osO3439GINzNxonxvOeWi+SK3bfHNxG33engrYKpaAsYDwZ68oHtXZg7sZQhxHam+1G2Wue9270II3nvRvDu1ZiioISQtwphDglhDgrhPhAne+jQogv6N//QAhxTc13H9Q/PyWEeNN2bQoh9ultnNHbjDRxjZuEEI8IIU4KIZ4WQsTMkLsRY8lYV7r6tUq5G72IuW72oGpk7sbogfG+d6NhaiUdKyghRBD4E+Au4DDwDiHE4U2HvQtYllIeAD4BfFw/9zBwD3AEuBP4lBAiuE2bHwc+IaU8CCzrbW91jRDw18CvSimPAD8OWBp/Gu+LduWD+qJBqovl70rjJF3b990lf6Uiqx5Ut8luNWZ4ULcBZ6WU56WUBeBe4O5Nx9wNfFb/+YvA64Q2g343cK+UMi+lfB44q7dXt039nNfqbaC3+bZtrvFG4Ckp5ZMAUspFKaWlQfLxZIz5TJ5yRVp5Gdcxm84RDGiJEd32ombyJdYKZUIBwexqHim7q+/nVvOEqn3fXcbJ4lqBckUSCoiuDG1biRkKahdwseb3S/pndY+RUpaAFDC8xbmNPh8GVvQ2Nl+r0TUOAVII8Q0hxHEhxH9uJIgQ4t1CiGNCiGPz8+0vOBxPRilXJItr3fWwzq/m2ZGMkYyFus6LMBTyofE+1otlMvnSNmf4i9nVHHuH40SCga6bh6nt+6W1Qtcu1LYCMxRUvVzizeZjo2PM+nyra4SAHwF+Qf//p4QQr6tzLFLKT0spj0opj46OjtY7pCnGkt25Fmo2nWM8Ge3KJBFjkLppd7/+e/fJv6M/xlgy2nXPvaGQjb6fV16UaZihoC4BkzW/7wamGx2jzwn1A0tbnNvo8wVgQG9j87W2usZ3pZQLUsos8ABwS5uyNsW4oaC6zpLMM56MaQqqy2Q3BuUb9UGq+zzIPON9et93oeyw0ffdZpxYiRkK6jHgoJ5dF0FLerh/0zH3A+/Uf/5Z4EGpBenvB+7RM/D2AQeBRxu1qZ/zkN4Geptf3uYa3wBuEkLEdcX1Y8AzJsjdkPHqYt3uelBnV3OMJ7vTiq56ULsGtN+7SEFLKZlP5xlLxhhPRrtQQWnyHtnZncaJlXRcSUJKWRJCvBdNEQSBv5RSnhRCfAQ4JqW8H/gM8FdCiLNoXs09+rknhRD3oSmMEvAeI4GhXpv6Jd8P3CuE+CjwhN42W1xjWQjxh2hKTwIPSCm/2qncWzHSG0WI7koUyBZKpHMlxpJReiJB5tK5rqomMZfOk4gE2TeaALrLOFnJFimUK4wno+SKZb53esHpW7KVuXSe4USE3YM91d8V5mBKqSMp5QNoobPaz3675ucc8PYG534M+Fgzbeqfn0fL8tv8+VbX+Gu0VHNbCAcDDCe6K9Xc8JjG+2LEw0WKZclytshQIuLwndmD4T32RkP0RkNdZZwY3uJ4MkauWCGdL7GWL5GIdkcltbnVHGPJGEPxiJ7F2T19bzWqkoRFjCejXeXqGy+lMQdV+1k3MLear9Zh7LYQp2GIaQky2t+gm7wIbe41SiAgGOuyNZAVi5fSKAVlEWN90a6ahzDK+4wlo11ZMHc2natWstcGqS6SXZd1rC9W/Rt0m/xjfdozP5qMdVVy1OceeYHr/svXWF4rWNK+UlAWMZSIspSxptPcyFJGU1BDiQhDCe1lXbLooXUjS5lCNZw5nIh2l+y6rFrfR170md+RUrK0Vqg+88OJCItd9N4vZ4vkSxX6YtaEc5WCsojBeJjlbPdU9F7Rq5cP9IQZjIcBukb+YlmbdxmMa4PzQDxc/Xt0A8vZApFggHgkyGBC6/uVLun7tUKZUkVWn/mBeLirKvmn1ov0xUKEgtaoEqWgLGIwEWG9WO6arQdWshsPajIWJiAgle0OS9IYkIzBeTAeYSVbsDw+7xZS2SID8TBCiKqSXu6SvjdCW4bcg/FI18gOWj8bsluBUlAWMaBbVN1iTdU+qIGAoL+nezzIFX1AGqjxoCoS0rnuKHdU2/excJBYOFD9m/gdw1M03vfBeJhsodw15Y6Ws8Wq92gFSkFZxEBPl1mSuhVtMNBFlqShiAd6jDBP9/V9f23f90S6xjgx+ngwYRgn2v/dEuJcyRaqMluBUlAWUZ2HWeuOBzW16UEdiIe75iW9Osyjz8N0ife8ki28yIrupr6vnXuFDU+qa+TfZJiajVJQFmEM1qn17rGiawepwXiElS6RvTpIxbvTg1rJFl80D2HMwXUDm8O7XTcHp+agvIkxYd5NoY7BTR5Ut3iPK5vCPFUPqgsGKSmlbkXXKKhEuHsG6LXNxkn39H2pXCGdKykPyot00xyU8aD297x4HqIbXlLQjJBQQJCIBIEaD6oLFHS2UKZQrrxokOrviXRNiGs5W6AvGiKsp1lveFD+l9+IHCgPyoP0RIJEQ4GueFGradYvCvGFWSuUKZQqTt2WbRgTxUZh3P6eMEJ0xxxUNUlgU9+vrBe7Ylfh1HqRgcSLQ9vQHXNQmzMYrUApKAsZjEcsKwHiJgxrcbCmMOxAwnhRu0D+tRfPvwUDgmQs3BWybwxSL56DKlck6S7YVXg5W6hGSwBi4QCRUHek2W+ef7MCpaAspFsqCtR7ULspk21l/eqJ4m6pJGIoqM3zjwArXRDi3Ly8Qlus3B1zcFXDVHlQ3qRbspnqPajVWHwXeJD1Um0Huqbv64X4umf+daVOFptWTaIblPOLl1dYgVJQFjLQNVa07kHVhDqMhIlukH85W6ijoLpjLZDR9/2b1kFBl3jPdSopDMTDpLqg7w0Z+5UH5U26xYquzkPUThZ3yRyUlFJfA1bPiva37FBbRaM2xNcdfV+uSFZzxavmYLqn7wuEAoI+CzemVArKQgZ1K9rv2Uz1HtRuqWi+XtQyFTcPUt3iQS1nC/RGQ0RCG0PJRhUVfw/SqfUiUl6dxdYtkRNj/s3IXrUCpaAsZDAeoVSRZHyezVTvQe0JB7VsJp9Xk1hpMFE8GI+QyZd8n2afqjP/1i3h3UZzMEbkxO+GqdV1+EApKEsxYrN+t6RT64UXLdIFLZtpoCfs+0yu5WoG49VWNPi/mn29+bdQMEBfLOR72RutAxqMhylVJGsFf1c0X8kWqzUIrUIpKAvplmwmbR3Q1ZZUN8Ti660Dqv3d7/Mw9ebfoFv6vrEHBf4PcS4rD8rbdMs8TKMHtRvmYRqFebql7xuFebphHdjG8oqrkyTA/5GTehmMZqMUlIV0ixXd6EHtBiu60WLFrvGeG/R9N2SwVpdXJK4O8UE39H3hRdVjrEApKAvphmwmLc366nkIMKpa+9yKXLt6HRB0R1Xrapp1nXmIbqimsJwtEKyTZt0N262sF8rkS5Wr5p7NRikoCxmIRwgIWPKxgsrqD+pIb/Sq74YTUZazBSoV/2YzLa4V6IuFiIaCL/p8OBGtfu9XlrMFpISRvjp93xtlKeNf2UF7r4cTkavSrEd6I9Xv/criWh6A0TrvvZkoBWUhwYBgKBFhwc8Pqj4IDddTUL1a0VA/Z3MtrhXqKueeSJBEJFj9+/iRat8n6vf9WqHMuo8z2RYyhbrPfTIWJhQQ3dH3vSrE52mGE1EWM3mnb8MyFnRLqt6Dary8hrXlRxYzeYYbxOGHe/3d94Zs9fp+JNG9fR8ICAYTEX/LXn3vlQflaYYSke6wpOq8qMZnCz6Xf6iBghpKRHwd4jMiA/X63vib+PrZXys09CCGExFfP/cLW7z3ZqIUlMUM9/p7kNqwouuHebRjfCz/Wr6hFTnS6+9Bqqm+97MXkSnUDW8CjPjee1YhPl8w0htlwc8P6hZW9LDPwzzlimRprVCdFN+M38O7i5kCAUHdLD5jXs6vCjpXLJPJlxp7UF1gmPaEg8Qj1hWKBaWgLGc4ESGdK5Ev+XOyeCGTpzcaIhYOXvXdYFzb+tyvg9RKtkBFNg5zDPdGWFrzbxbj4lqeoUSUQODqYqF+954N5bO1ceJP2WHr8KaZKAVlMUb4w68pp4uZxg9qKBhgMB7xrRdR9R4bhPiGe6OU9LVCfmQh09h7jEdC9ISD/u17I7zZIMQ33KsVC84V/WuYWp0gAUpBWY7/LcnGWWygeRd+lX1hiyw22LCu/epBLmbyW1rRfg5zbTcHM1Kdg/Ov/CMWJ0iAUlCWszFI+dWSrL8WxEAbpPwrO1B3HRTUzMH5te/XGicJgOZB+vW5N+Tq3r7f2jgxC6WgLMZ4UH0b4tsiSQD0tUA+lX1piwQR2LCu/dr3S1uEdwFGfOw9b4R3t+57P8ovpdzWMDULUxSUEOJOIcQpIcRZIcQH6nwfFUJ8Qf/+B0KIa2q++6D++SkhxJu2a1MIsU9v44zeZmS7a+jf7xFCZIQQ/8kMmZvFzw9qRc9i28qK9vUglclrWWwNthww+t6PlURyxTLpfKmhBwF+9563zmLbyGL0n/yr6yVKFWn5GigwQUEJIYLAnwB3AYeBdwghDm867F3AspTyAPAJ4OP6uYeBe4AjwJ3Ap4QQwW3a/DjwCSnlQWBZb7vhNWr4BPC1TuVtFWM77AUfvqip9SLlitxmHiJKar3oy51lF9a0RbrBOllsAENxwzjxX99v5z2CUUnDnzvLbpUcBLXrwPxnnBhj2VbGiVmY4UHdBpyVUp6XUhaAe4G7Nx1zN/BZ/ecvAq8TWoXFu4F7pZR5KeXzwFm9vbpt6ue8Vm8Dvc23bXMNhBBvA84DJ02QtyWEEL71Ipopd2K8qH6s7KyVumksu5bFGPZn329Rg9FgOBHRshjXS3bdlm0s6IViGxGPhIiFA740TuxapAvmKKhdwMWa3y/pn9U9RkpZAlLA8BbnNvp8GFjR29h8rbrXEEIkgPcDH25bwg7xa002Izttq2weYwD3Y6hjOysajDk4/8m+VQ1Gg2qYy4fyLzaRZu3XtVDbpdibiRkKql58Y7NP3+gYsz7f6hofRgsJZup8/+KbFOLdQohjQohj8/Pz2x3eNH5Nt23Gih7x8Ryctlhxu0HKn+WOqhmMW2bx+bjvM1t7UKCXuvLhe7+wzSJlMzFDQV0CJmt+3w1MNzpGCBEC+oGlLc5t9PkCMKC3sflaja7xCuD3hRAvAL8J/JYQ4r31BJFSflpKeVRKeXR0dLQZ2ZvCt5ZUE1a0nyuaL2xRydzArzXZtqpkbrCRweov+aXUk4O2M056o76THaju82X1brpgjoJ6DDioZ9dF0JIe7t90zP3AO/WffxZ4UGozp/cD9+gZePuAg8CjjdrUz3lIbwO9zS9vdQ0p5Y9KKa+RUl4D/BHwu1LKT5ogd9NoRUPzvpssXsgUEGJje/N6+NWKzpfKpHOlba1I33rPawVi4QDxyNUlrgz8ulA5nS9RKFe273sfzz0PxMOEg9avUuq40p+UsqR7JN8AgsBfSilPCiE+AhyTUt4PfAb4KyHEWTSv5h793JNCiPuAZ4AS8B4pZRmgXpv6Jd8P3CuE+CjwhN42ja7hBoZ7I+RLFdYKZXqj1hZXtJPFTJ6heOMsNoC+aIhIMOC7QWppmzJHBsOJKCvZIsVyxZYX2i4W9ASRzbvJ1jLo0y03mk0SqM1i3Orv5DWaCW+ahSmjpZTyAeCBTZ/9ds3POeDtDc79GPCxZtrUPz+PluW3+fOG16g55r9t9b1VDNWsKveXgmq8F5KBEELfE8tfoQ5jkNpO/iEji3GtwFgyZvl92UUzCSLhYID+nrDvwrvNJgmM9EYolCuk8yWSsasrvnuVhW2yV83EPyadixn2aaij2XInfgxzbZS62WYOyqebNm5Xg9FguNd/Ya6Fpj0on3qQNlUyB6WgbGHEp3W5mi134sc0+42dhLefKAf/JYk02/cjCf/V41tscqGqX+vxbVck2EyUgrIBv64qX8jkm6poPOLDVOtmMhhrv/eTFb1Ri607vWejL7dKDgJ/Rk5K5QrL2aIK8fkJY57CT0VDC6UKq7lSkx5UxFeyg2ZsREKBbecUq96zj+TPGFlsTQxSWojPfx5Ef0+YSGjr4XPEh97zUta+NVCgFJQtxMJB+qIhX4U6jNJFzVnRUdaLZbIF/5S8MfbD2S47K9kTIhQQvhqkWyl1M5yIspwtUir7pxbjdmWODAbj/vOem1mcbyZKQdmE3yaLF1oodzLsw3TjZkrdgJbF6Le+b6YGo4FhaS/5qBZjs3MwkVCAZCzkT+PEpjRzpaBswm812TY262tiDsqHWw+0ksk0nPBX3y+0MEhVk0T8pKAzW28xU8tIb9RX5Y5aMU7MQCkom/DbqvJWHlQ/Jgq0MkgN9/orSWS7nYRr8aX33Ipx4rM5uIUWDFMzUArKJrTtr330krYyD+GzyWIppZbB2ORLOuI771mTZbtFyuC/vtey2JrfTdZvdTgXM3lCAWHbwmOloGxipDfC0lqeSsUf9fgWMgUiwQB9TVTGGPbZYtW1Qpl8qdJCiM9v3nOBZCy0bRYb+K8e33K2iJTNexB+S7M3qscEtihvZiZKQdnEcCJCRcLKetHpWzEFY6K4mRpjsXCQ3mjIN4N0q/vhDPdGyRb8k8WoeY/NyZ6MhX2VxVgNbbfQ98vZgm+yGLXqMfbMP4FSULaxMVnslxe1tXInmiXpD9mbLXVj4Lc5uGYX6QIEAkYtRv/IDs33/UhvBCk1z8sPLGQKts0/gVJQtuG3VeXbbXe+GT+FuRYzzZW6Mahu2uiTUI9Wh6+FvvfRHFyzNRgNquWOfCJ/szUYzUIpKJvw26ryhRasaDCSRPwh++Jaix6Uz2qyteJBgbEfmk+Uc5M1GA386T2rEJ/vGPJRuq2UsmVLajjhn8niVrLYao/zQ9+XK5KlbGv7AQ0l/BPeXVzLEwwI+nuay2LbSBLxvvzrhTLZQrnp594MlIKyicF4BCH8YUVnC2VyxUpLlpRRj88PWYwLmQJ90RDRUOPdZGuphnd9MEgvZwtI2dpCzeFEtLpNuNdZWiswGG8+i22ouu299+XfqOKuFJTvCAYEQ/EI8z54UdspdzKciFKuSF9kMbaaIBKPhIhHgiykfdT3LSbIrPkki3E+3VqSwEBPmGBAMJ/2vnGy0GJ40wyUgrKR0b6oLx7UuXQOoKUdYseS2kPtC/lXc4z1tbY77lhflHkfeM/Vvm9B/rE+//T9fDrHaF/zA3QgIBjpjfhC9rlV471XCsqXaAoq5/RtdMyc/rKNthDmMY6d84H88+l8S4MUaH1vvOBeZm5V7/sW5DeOnfPDIN1u3/tEdmit7ztFKSgbGeuLda0lZXhbxgDnZdoZpPzS94YXONaC/Ia35XX5KxWtxFXr3rNP+j6dR4jml1eYgVJQNjKW1MI8Uno7UWBer8c1tM2OorVUwzweD3NlCyUy+VLLYQ7fhHdX8yQiQRJNlLgyMP5WXvcgV9aLFMuyJeUM2rPvFw9qKB4hHLRPbSgFZSNjfVGKZen5VeVzq1qpm1bqcSWiIRKRoOc9KEPJtGxFJ6Ok8yXWC2Urbss25tK5luYeAYbiEUIB4flBemPutXUFtbiW93y5o1bn38xAKSgbMQY1r8/DzKXzbU2UjiVjvpAdWgtxacf7p+9bHaS0RAHvexGGcdWqcTKajCGl9yuJaO99a7J3ilJQNlKdLPa4FzGXzrc8QIM/Jourg1QbVjR4P1GgnQQR0P5eXpe9fePEJ+/9anvvfScoBWUjfkm3bdfV98M8jOEBtZLBCP4xTubbNU56vd/3821msY1W51+96z0bCSIqxOdjqpPFHn5RS+UKi2sFRlsMc4C+FsjDsoM2SIUCgsEWEkSg1jjx7iBVTRBpp++T3l9iMZfOtZwgAv7woJazBUqV1hNEOkUpKBuJR0L0RkOenodYXNNK3bTzoI71xcjkS56uKGDMwbS6YdugDxIFNuZg2vGeYyyueXtfpHbnYPywDmyuzeSgTlEKyma8Pg/TySDlB0uy3fm3QEB4v+87WKg51hdFSm9vNzO/2l6IKxoKMhAPe9owrSooG6tIgFJQtjPaF2Xe0wN062WODPwQ4pxbzbUV3gTvr4dpN80aapNEvDxI59oOcY31Rb1tmBmL81WIz994vSZbJ1b0qA8GqXaz2MD75Y7aXQMGNYkCHlbQnfa9l997495VkoTPGeuLeXqQqtZia6PcSXUtkEctyaKeINKuFTnq8ZI3c+k84aBgMN7cXki1VEtdeVT+tXyJtUK57TkY7b33puygvbO90RDxSGsJIp2iFJTNjCWjrBXKrOW9mSgwn8kxGA8TCbX+6AzGw4SDwrOWpLHVRLtx+LG+KEvZAkWPJgrMreYZ7Y0iRGsJIlBTLNijg3S7a6AMjAxWr5Y5a3d5QacoBWUzG1W9PfqirrZeLNNACMFor3dj8e1sNVHLWFJLFPDqzrpzHZS6iYQCDHo4UaDTrSZG+6IUyhVSHt0PrZO+7wSloGzG64Uz2y1zZDDq4XJHnWQwaud5u9yRNgfTfprxWF/Mu4ZZh2nWXg9xOlHmCJSCsp3q1gMeDXPNp/NtzT8ZeLmiQKf74Xi9msR8p8aJhxdqt1tFwsB4Z7wsfyfvfbsoBWUzXl4LJKXUHtQOBikv12QzPJ9298Pxcj2+ThNEwNuVRDpJEIHaJRbe8561xfVl29dAgUkKSghxpxDilBDirBDiA3W+jwohvqB//wMhxDU1331Q//yUEOJN27UphNint3FGbzOy1TWEEG8QQjwuhHha//+1ZsjcLgN6ooAXB6mVbJFCudLRavKxvihLawUKJe8lCsyl8wwlIm0liMCGYvPiILVgQprxaNK7iQJz6VzbCSLgbcPUqTVQYIKCEkIEgT8B7gIOA+8QQhzedNi7gGUp5QHgE8DH9XMPA/cAR4A7gU8JIYLbtPlx4BNSyoPAst52w2sAC8BPSilvBN4J/FWnMndCNVHAg4NUO7upbsZQbotr3ntRO81kioQCDCUinvQi2t1qopaxvhiFcoUVD+6HpkUO2pe9NxqiJxz0pGHqVJkjMMeDug04K6U8L6UsAPcCd2865m7gs/rPXwReJzRT5G7gXillXkr5PHBWb69um/o5r9XbQG/zbVtdQ0r5hJRyWv/8JBATQthvCtQwmvTmephOkwRqz/WkJdnBQk0Dr1aT6DTNuvZcT8rf4VYTQgjPhredKnME5iioXcDFmt8v6Z/VPUZKWQJSwPAW5zb6fBhY0dvYfK1G16jlZ4AnpJR1nxIhxLuFEMeEEMfm5+e3ELkzvBqL76TMkYGXyx3Nr+Y6tiK9Wo9v3oRBysvbzcxnOl8HpL33HoycmGCctIsZCqpeUHZzkLnRMWZ9vu19CCGOoIX9fqXOcdrBUn5aSnlUSnl0dHS00WEd43UruqN5CI+WO5JSMm/CfjhaLUZvyQ6dJ4iAd/u+UKqwtFYwpe+9+d7niAQD9Pe0lyDSCWYoqEvAZM3vu4HpRscIIUJAP7C0xbmNPl8ABvQ2Nl+r0TUQQuwG/gH4RSnluTblNI1RjyYKzK3miUeC9La4H04tI71RhPBeiG85W6RY7nw/nLG+GPMZ7yUKGAki4WD7Q4ZX1wItZMyZgxnri3myULRRxb3dBJFOMENBPQYc1LPrImhJD/dvOuZ+tAQFgJ8FHpTaG3o/cI+egbcPOAg82qhN/ZyH9DbQ2/zyVtcQQgwAXwU+KKV82AR5O8Z40Bc8thaqk2rOBuFggKF4xHODVCeVvGsZ64tSLEuWPZYoYMZ231ott6DnjBMz5t9AM0zT+RLrhbIZt2UbZsy9tkvHCkqf73kv8A3gWeA+KeVJIcRHhBBv1Q/7DDAshDgLvA/4gH7uSeA+4Bng68B7pJTlRm3qbb0feJ/e1rDedsNr6O0cAP6rEOKH+r+xTuXuBK9OFmtZbJ1n8nhxwWYnlbxrMRSc9+Q3p9SNFt72Voiv0zJHBl7dcsQMw7RdTClNK6V8AHhg02e/XfNzDnh7g3M/BnysmTb1z8+jZflt/rzuNaSUHwU+uq0QNuLdQSrPS3YmO25nLBnz3GSxGRmM2vkb5Y6u29HX8X3ZxXw6z4Gxzu93zIMV3efNCvHpIc75dJ69w4mO78su5tN5bts35Mi1VSUJB/BqTbY5k8qdaOvAvDVImZEgUnu+l8JcRoKIGWnGXvSe51bzCAHDvZGO2vFioehCqcJytshor/1roEApKEcY7o14LlEgWyiRyZdMGaTG9IoClYp3EgXm0jkSkSCJDhJEwJvhXSNBxBTjxC2X120AACAASURBVIOZbHPpPEPxzhJEwJuFoqveowNroEApKEfwYqKAGZUEDMb6opQqkuWsd7adMKuacyIaIhEJesp7NitBxGhDq+3mnf3QzJp/G4pHCAW8VebMyTJHoBSUY4x6bNGeWZlMWhveSzc2Um3NYCzprW0nzDVOvLerslnGSSAgGPFYeNvJMkegFJRjjCdjzHroJZ01KZMJYFxvY9ZDoY5ZEzOZxvqingrzzJpoRXuy71fN6/vxZNRTspuVwdguSkE5xER/jJmUdx7UK/q9TvT3dNzWjv7Yi9p0O1JKZlI5dg50Ljt4t++NfuuECaPvPTJIF8sV5tJ5dpogO2h/Q6889wAzqRwh3fNzAqWgHGKiv4eFTJ58yRuL9qZT6yQiQZKxzlcmjCdjCAHTHnlRjaofEyYNUhMDPcyu5jyTJDKdyjGciBALBztua4du4EyveKPv59J5pNT6zAwm+ns8ZZzMpHKMJ2MEA/ZXkQCloBzDGOxmU94I811J5djRHzOl3Ek4GGC0N8qV1LoJd2Y9M1Xv0SQF1R+jWJYseGTLkZnUuineE2jVJPpiIc/0vXGfZsk/0R8jky+RznmjkshMat20574dlIJyiIkBrdNnPPKiTpsY4gLNIvWKJTljYniztp0Zj3gRV1I502QH2Nnf4xnv2fD0dprV9/o75KVn3yzvsR2UgnKI6iDllQd1xVxLamd/jOkVbyhnw4gwjIpOMf6OnjFOVtbZaZLsoP0dvSK72X1vzGV54dmvzr0qD6r7MAapaQ+8qMVyhflMvjp/YAY79EQBL1T1nknlCAcFIwlzJoo3FJT7jZO1fInVXMm0EBdo8nslUWAmpS3Q7utwgbaBlxKEjLlXM/u+VZSCcohENEQyFvLEgzq7mkNKTLWkdvb3kC2UWc25f8HmzMo648kYAZMmiocSESKhgCcUlHGPZoW4wEgQKngiQWhmRQtxmbXVhJcShMwObbeDUlAOMtHf44lsphkT04wNdngozDWdypka3hRCMOGREOeMyUkCtW15wTgzO0nASBCa8UDfG8+nSpLoUrwSi69a0SZOlu4c8E6Yy+wkAfBOmGvG5CSB2ra80PczJhsnoCVKeGEdmHGPZs2/tYNSUA4y0d/jkUHKfEvKK5lslYrUFJTJL+lOj6yHMe5xvN+8hZpeyWAtlLS5V7ONE68kCE2vmDv32g5KQTnIRH+MxbUCuaK7Y/EzqZy+fiVsWptjfVECAtevh1nKFiiUK0yYUIutlh39MWZXc5Rdvlh3JrXOSG+EaKjzRboGXkkSmUtrc69me1BeSRC6kjJ37rUdlIJykOpiXZe7+1Ys1gsFA4z1xVw/WWx4eGavBZkY6KFUkSxk3L1Yd8aC8GY8EqK/J+x677maJGBy33slQWg6lTM1tNsOSkE5iDGn4/ZECasW63lhDs5YBmD2i+qV9TBWVRLQ6hG6W3ajb8xeB+SVEOdMat3R+SdQCspRvJLJNpPKmR7iAm8UTTWzUGotXslkm1kxP0kAurvvvRDirFQks6m8o2ugQCkoR/FCNlOhVGEhk7fEkpro72Fmxd2x+OnUOpFggOFEZ9t9b8boezeHONO5Iul8ySLv2f1JIjOpHH0mz72CNxKEFte0uVcV4utieiJBBuJhV3tQG4t0LRik+mOsF8uk1t1bOHNmRSuSa/ZE8UA8TCwccPV6mI0tVsw3Tnb2x1hyeYLQ9Io1IS4jQcjN7321xJPyoLqbHcmYqy0pKxbpGnihHqFRxd1stMW6Pcy4OEFmuqqgzDdOjLJZbg5xXlnNmVrey8BIEHLzc++GKhKgFJTj7HR5qMOwpMwsFmrghcni6dS6ZcUyJ/pjLvegrLOiq0kibu77FesKpbo9Qai69lElSXQ3O1yezbThQVkT4qu9htuoVCSzFlnR4P7dVadXcgih1Y8zG7cniRhzr1YlCbg9SWRmNUckGGAobu7ca6soBeUwO/tjLGeLrBfcGYufWVmnLxai16RqzrWM9Wk7dbo1xLmwlqdYlpZ4j6DN682m865drKst0o0SCZk/TLg9vGusTbQqScDtCUJWzb22ilJQDmO8qG6tzWXlYr1gQDDeF3VtmKe6SNeqQWogRrkimUu7s++t3AuoJxJkMB527TqwaYtDXG5PEHJ6J10DpaAcphrmcumLalWSgIGbw1xmb/W+GbeHOGcs73v31qKsFkq1rO/d7UFaUSS3HZSCchhjjYlb18PMpMzdTXUzbl4PY3WqrZvXw0gp9V2Urcvi2tnv3lJX0zZ4z+DOBCFj7tXJrd4NlIJymInqZLH7HtR8qcxCpmD9ILWy7spY/EwqRyQUYMjkRboGGwu13df36XyJtULZYuPEvQlCM6l1krEQCQvmXqFmobYLjZOFjD73qjwoRSysx+JdaEnOprRCplaHefKlCitZ98XijTCHWbupbibZE6InHHSlB2l4dVZlMILmnay4NEHIiiK5tYz2RQkGhCtDnFZm7raKUlAuQMvocZ8laVWh1FrcvB5GC3FZp5yFEK71Ijb63kIPysW1KK0ulOrmBCG3VJEApaBcwc4Bd66JqJa6sXgOqvZabmLGhu0G3Lpx4UbfW+tB1V7LTVixi/JmJgbcmSRixQ7a7aIUlAvY4dIdNi/r97TDgoWaBoaV5jb5y9VFutZakW7t++mVdYTQ6sZZhdH3l10mf65ozL12b99HQgEG4+YWyW0HpaBcwORgnNVcyXVrIi4tZxlORCybKAYY1ReCXlx214s6k1qnVJFMDsUtvc7kYJzZ1bzriqZeXMqys7+HcNC6IWLnQA9C4Lq+v6Tfz+SQtR7E5GCcyyvrrluofXFpncnBHsvmXltBKSgXsEcfBC8uZR2+kxdzcWnd8gE6EBBMDva4UnbY6Bur2DOsDYJu8yIuLq9bPkBHQgF29vdwyW19v6zdj+V9PxSnWJau21H74nLWctmbxRQFJYS4UwhxSghxVgjxgTrfR4UQX9C//4EQ4pqa7z6of35KCPGm7doUQuzT2zijtxlp9xpuYdKlCmpqyZ4Hdc9QnCmXyW70hR2DFOA6+e3q+8mhHtfJbvS91caZG/teSsnUoo8UlBAiCPwJcBdwGHiHEOLwpsPeBSxLKQ8AnwA+rp97GLgHOALcCXxKCBHcps2PA5+QUh4ElvW2W75Gp3KbyZ5h9z2opXKFyyvr9imoxayr1kJNLWUJBoTl8xBuNE7WC2Xm0/muNU6mFrPEwgFGe62bfwN3KqjUurZJpdXKuVnM8KBuA85KKc9LKQvAvcDdm465G/is/vMXgdcJLcB5N3CvlDIvpXweOKu3V7dN/ZzX6m2gt/m2Nq/hGpKxMAPxsKse1JlUjnJF2mRFx0nn3TUHN7WUZddADyEL52BAm4OLhQNMLbqn740Qlx2D1J6hOHPpvKvWQhneo9VzMBMDWrFkNxknUzZFDprFjLdvF3Cx5vdL+md1j5FSloAUMLzFuY0+HwZW9DY2X6vVa1yFEOLdQohjQohj8/PzWwptNpOD7rIkjXvZbfE8BGwMhG6T3+o5GNDWQrmu7xftU1DGNS4tu0j+pSyTg9bLHg4GmOiPuavvbQpvNosZCqqembE5VtPoGLM+b+caV38o5aellEellEdHR0frHWIZe4biXWtJuTHUcdGmORhwX5jLzr53m3EipeTiUta2Adqtfe8nBXUJmKz5fTcw3egYIUQI6AeWtji30ecLwIDexuZrtXoNVzE55K6U04tLWUIBYcuWzxvzMO7IZFvLl1hcK9j2kk4Oxbm07J56hBeXs8QjQYYtqkFYi9syWJezRdYKZVuNE7c896C9g8OJiCX7v7WDGQrqMeCgnl0XQUtIuH/TMfcD79R//lngQam9jfcD9+gZePuAg8CjjdrUz3lIbwO9zS+3eQ1XYaScumVfqKmlLLsHewjasGFZbzTEcCLiGkvSrjRjgz1DcTL5EssuqUd40aY5GIDhRIR4JMiUSwZpu+dgJofiLGTyZAul7Q+2ATu9x2boWEHp8z3vBb4BPAvcJ6U8KYT4iBDirfphnwGGhRBngfcBH9DPPQncBzwDfB14j5Sy3KhNva33A+/T2xrW2275Gp3KbTbVMJdLJsvtflAnXRTiNPrATgUF7glzTdnY90IIV4W5qgpq2N6+d4sXZdfygmYxxY+TUj4APLDps9+u+TkHvL3BuR8DPtZMm/rn56mThdfONdxEbajjVfuHHb4b7UF9840Ttl1vz1CcH15cse16W2G3FV27zOBlkwO2XLMRUkqmlrL86EH75mAn9WUGbqC6BsqGJAl4sXFy3Y4+W67ZCGNpyVtfutPR+6hFVZJwCUbKqRssydVckeVs0VZLao8+B1cqV2y7ZiMuLmXpi4Xo77GnFpkxGLrBg5zP5MkVK7b3/dSSO9bBTS1mGe2L0hOxZ6mkm7xnO5eWNItSUC7BTSmndq2kr2VyqIdyRbqisreRZmxXLbKeSJCR3qgrvIiNvrevkvXkYA/reoFWp9H63j7ZB+JheqMhVxgndi4taRaloFyEW2LxdpX5qcVN6cZOxOH3uKTkjxMLNd1UScXuvhdCaCFOl8gO7lmkC0pBuYo9Q3FXLFg0Jmzt9KDckm5cqUguLa/bNklusGcoXs0edBKj73fbNAcDG33v9LNfLFeYSdlT3quWPUPuKJZs59KSZlEKykVoKacF1vLOppxOLWXp7wnbNgcD2uZ1IRfMwc1n8uRLFdtTbfcMxZleWafo8Bzc1FKW8WSUWNi+cpWGMnQ6xDm9sk5F2r9I1S1zcHYuLWkWpaBcRNWLcNiSdCLEFQwIdg86H+ZyKswxORSnIp3fuNGJvo+Fg4wno13b93uG4uRLFebTeVuvuxm3rYECpaBchVvWQtlZ5qcWN6yFsnsNlIFbsrmcGqTcMP9q9xooA7fMv7ptDRQoBeUq3PCglvU5GCcyedwwWTy1lEUI2Dlg7TYbm3FD3+eKZa6s5mxbA1TL5KALjJOlLJFggPG+7ut7Y2mJ8qAUDRl0Qcrp7GqOQtnedTAGe4biLGeLrOacK/lzcSnLRDJGNGTvlmHjyRiRYMDRQeryyjpSOpPFNTkUZ2Y1R77kXJGXi/ocTMDmOZhdAz0I4ayCciJztxmUgnIRbkg5dTLV1A2ZfHaW+anFmINzWnawP8QFWt9LCZeXnZuDc6rvY+EgO5LOroFUCkrRFHuGerjo4Evq5IPqhrpkF5edi8NPOlzZ+pKTfT9sJAg5+ezbn2JuMDkU55KTz70DS0uaQSkol2HsC1VxaNuNi0tZAgJ2DjgzB2XcgxPkimVmV+3Z6rweTicKTC1liYas3+q8Hk4niaSyRVLr9pb3qsUNfW/30pJmUArKZRgpp7NpZ0r+XFjKMtHfQ9jirc7rYbwgLyyu2X5tcKbEUy17huKk1ousZJ0p+XNh0Zk5GIDR3ijRUIALC870/cZGfc4sUt0zFOfKao5c0Zk5uAs27SDdKkpBuYx9I70APD/vzIt6fn6Na0cTjlwbYN9IgucdGqTO6X9zp+TfN6Jd97xD8p9fWOPa0V5Hrh0ICEf7/vxCBsAx+Y2+d0z++QzXjjgj+1YoBeUy9o9pD+q5+Yzt15ZScm4+w36HXlKA/aO9jsgOG39zpwap/WPadc/N2S9/qVzhwuJa9/b9XIaAgL0OJIgA1b+7E/KvF8pcXll3tO8boRSUy9iRjBGPBKvWvJ1cWc2RLZSrA6UT7B9LMLuaJ+1Aqvm5+Qw7kjHHtrueHOwhHBSO9P3F5XWKZcl+B73n/aMJppayjqSan5tfY89Q3PblBQb7RhIIAefm7O/75xfWkHLDOHYTSkG5DCGEY5ak8XI4OUgZYYbzDgzS5xwOb4aCAa4ZTjjU99o1nTVOeqlIbS7MbpyOHPREguwa6HGm7/VrKg9K0RT7RxOODNBGHP6Agw/qgTFjHsbeF1VKyXmHBynQBonzTg5SDs5DGH97u+UvVyTPL6w5qpxB73ubn3vQjEEhNubB3IRSUC5k/2gvl1fWyRbsrWp+bi5DXzTEaJ/9acYGe4YSBAPC9lDHfCZPOldy1HsELcxyYTFre1Xzc/MZRnqj9MedSzM2Bki7Q5zTK+vkSxXn+360l3Nza7YvMTk3n2H3YI+tFeybRSkoF2JYcnZ7Uefm17h2rNe2nWTrEQkF2DsUtz3UUQ1vusCKLlWk7Wtizs2vOT5AJ6IhdvbHbE8SOeuSENf+sQTrej1EO3E6vLkVSkG5EGMexO5043PzGfa7wM2/1oE5OLfE4Y0MQrsH6fPzGceyF2txpO/nnM3eNDDmX+2Uv1KR2tISF6aYg1JQruSaYSOjx74HNZMvMZPKOe5BgDYH98JClpKNYa5z8xl69JpoTmIYJ3aGuZbWCixni457UKD1/bn5NVs37zs3v8ZgPMxQImLbNetRXWJi43s/s5pjvVh2ZQYfKAXlSmLhIJOD8WrowQ6MhcHXusCD2j/aS6FcsbUu27n5NfaNJBypolBLMhZmrC/KWRsHKbd4j6CFWDP5ErOr9m3ed84l3uNob5S+WMjW977qPSoPStEKB8Z6OTtr34N6ejYNwMFx5x9Uw4s7o9+THZyZTbtCdtD7fs4+2Y2+P+AC79nIID1jk/xSSq3vXSC7EIIDY72c6dL3vh5KQbmUQ+N9nF/I2JbNdXouTSQYYO+w8x7UoXFjkLLnRV3NFZlJ5Tg03mfL9bbj0HgfZ+YytmVznZnNkNDX4TjNoR1aH5y2aZBeyGjhTbf0/XV639vFmdkMw4kIIw4UCG4GpaBcyqHxXoplyQWbCqeemc1w7WjCkSKxm+mLhdnZH6tad1ZjWKxuGaQOjfeR1cvP2MHp2TQHxvscD28CjPRGGUpEbPOejeu4pe8PjvextFZgIWNPiPP0nHsiB/VwfjRS1MV4YeyyJE/PpjnokpcUtBfVLtk3Bil3vKgbHqQ9g/Tp2QyHXBDiMjg41mubcXLapX1vh/xSSs7OZlyjnOuhFJRL2T/aixD2PKhr+RKXltddNUgdGtfSjcs2hLlOz2aIhQNMDrpjs7aDNhony7q17qZB6tB4H2dmM7Zk8p2ey9DfE3Z0cXotRj/YMQ81k8qRzpdcZZhuRikol9ITCbJnKG7Lg2pkjLnpQT043kehVLElxHlmLs2BsV5XhLhA2xdrPBm1xThx4yT5ofFe0vmSLQtWz8ymOTTu7OL0Wsb6oiRjIVv73k2G6WaUgnIxB8f67H1QXTVI2edFnJ5Nc2jMPcoZNrwIqzk95675N7DPg5RScno24yrDTAhhW9+7be61HkpBuZhD4708v7BGoWRtJt+ZuYxWYsgFGXwGB21KNU+tF5ldzbtqkALNODlrQybf6Stp+qIhJvqdXaBcS9U4uWJt38+l86TWi67zIA6O93FqNm15iPPUbJqR3iiDDi9Q3gqloFzMofE+SnqlZSs5PZtm/2gvQZeEuECry7ZroKdq4VuF2xIkDA6N97JeLHPJ4sXKWgafe0JcAEOJCCO9EcujB6ddlsFncGi8l9R6kfm0tZl8RnjTzSgF5WKu09eEPHdl1dLrnLqS5joXPqjX7+jjuRlrZX/uijsHKaPvn7Ww76WUnJpNc53LZAdN/ucs9qBOGX2/w13yb/S9dfKXK1p4023P/WaUgnIxB8Z6iQQDnJy2bpBayOSZSeW4YVe/ZddolyM7k5ybz7BesG6H1ZPTKfp7wuwedH6Rai3X70gSEFja95dX1lnJFjniyr7v59SVtKUL1U9cTrEjGXPdItUjE1p/nJxOWXaN5xcyrBfLrnzva1EKysWEgwGun+jjxGXrHlRjADyy030P6pFd/VSktV7Eicur3LAr6aoQF2hZnAfGejlpYd+fuKz9XW/YmbTsGu1yZGeSQrliabLAiWmt791GfzzM5FAPJy9b+9wDrpS/lo4UlBBiSAjxLSHEGf3/wQbHvVM/5owQ4p01n98qhHhaCHFWCPHHQh8lGrUrNP5YP/4pIcQtW11DCBEXQnxVCPGcEOKkEOL3OpHXCY7s7Ofk9KplE6aG8jvswkHKsO6s8iIKpQqnrqS5wYXKGeCGnf2csNCKfmY6RTAgeMmEm/veGvmzhRLn5zOuNMxA63srPaiT0ymioYCju2c3Q6ce1AeAb0spDwLf1n9/EUKIIeB3gFcAtwG/U6PI/hR4N3BQ/3fnNu3eVXPsu/Xzt7vGH0gprwduBu4QQtzVocy2cmRnktR60bLJ8pPTKfYMxenvcW4n1Ubs7I8xGA9b5kWcmUtTKFdcGeICzWiYXc1bNll+YnqV/aMJV+6kum84QTwStMw4eXYmTUVq75cbObIzyQuLWVZzRUvaP3F5let39BFyQWmzrej07u4GPqv//FngbXWOeRPwLSnlkpRyGfgWcKcQYgJISikfkZp78Lma8xu1ezfwOanxb8CA3k7da0gps1LKhwCklAXgOLC7Q5ltxWpL8qRLwxygrQm5YZd1XoQx+LkxxAXW9/2JyynXeo+BgODwRNKy8LbxN3XrHIxhND1jgYKWUnJiOuVaw6yWThXUuJRyBkD/f6zOMbuAizW/X9I/26X/vPnzrdrdqq16n1cRQgwAP4nmkXmG63f0EQyIaszYTFLrRS4sZl0b5oCNyXIr1oKdvJwiEQlyjYvWf9VihF2t8CLm0jnm0nlXD1I37OrnmZlVS8pdnbicYigRcdX6r1oMw8EKBX1xaZ10ruRa46SWbRWUEOKfhRAn6vy7u8lr1Jt9llt8bnpbQogQ8Hngj6WU5xs2LsS7hRDHhBDH5ufnt7kVe4iFgxwc67XEijasM7dakaBN4hbL0pLCqSemVzmys981JY42k4yFuWY4bskg5XbvEbQwV7ZQ5gULyl2dnF7lyE73JccYjPZFGU9GLfGgNrxH9/a9wbYKSkr5einlDXX+fRmY1UNs6P/P1WniEjBZ8/tuYFr/fHedz9mi3a3aqve5waeBM1LKP9pG1k9LKY9KKY+Ojo5udaitHNnZz9OXU6YnSjx9eUVv370PqmHlPXXJ3EG6VK7wzPQqR1z+kh7Z1W+67ABPX0ohhDuTYwwMw+mpSyumtpsrljk9m3a1YQbas/+kybIDPHU5RSggXL8GCjoP8d0PGFl57wS+XOeYbwBvFEIM6okLbwS+oYfu0kKIV+rZe79Yc36jdu8HflHP5nslkNLbqXsNACHER4F+4Dc7lNUxbt4zwEKmwMUlcxMljl9YYc9Q3HXrQGrZOxxnKBHhiallU9t97kqa9WKZm/fUTTx1DTdPDnB5ZZ1ZkwunHp9a5uBYL30x9yXHGBwa7yMRCfLElLmD9InLKYplyc2TA6a2azY37xng3Pwaqay5iRLHLyxzZGfSlckxm+lUQf0e8AYhxBngDfrvCCGOCiH+AkBKuQT8d+Ax/d9H9M8A/h/gL4CzwDnga1u1CzwAnNeP/3Pg17a6hhBiN/Ah4DBwXAjxQyHEL3cos+3cog+ij08tbXNk80gpeXxqmVv2uPslFUJw8+QAj18wV0Ed1xWe2+W/Za/W98dNlL9SkRy/sFx9rtxKMCB4qQV9b7Rn/G3ditE/xy+aJ3+xXOHJSyuuN8wMQp2cLKVcBF5X5/NjwC/X/P6XwF82OO6GFtqVwHsa3MtV15BSXqL+/JSnuG6HZkkev7DCT91sThLipeV15tN517+koA0k335ujpVsgYG4OYUtH7+wzFhf1BXbnG/FkZ1JIsEAx6eWuevGCVPaPL+QYTVX8kTf37p3kE995xzZQol4pKPhqsrxqWX2Drs7cgDw0skBAgKeuLDMa66rl3/WOs/NpMkVK9zqgb4HVUnCEwQDgpftGaha/Waw4UG4/0G9WfdynrhoXqjn+JTmQbh1ktwgGgpyw64kx00Mcx2/oLXlhb6/Zc8g5YrkyYvmzMNJKTk+teIJ2RPRENfvMLnvp7zhPRooBeURbtkzyHNX0qzlS6a098TUCj3hINe7rFBmPV66e4BgQPCESaGe+XSei0vrnrEib907yNOXU+RL5tQkPD61TH9PmGtH3JleX4thnJhlnFUjBy4P7RrcsneAH15cMS3V/vjUMuPJKDtdml6/GaWgPMIte3VL0qSsnscvLPPSyX7XryQHw5Ls43GTBqkNK9Ijg9SeQQqlimnroR6/oM09ujW9vpaBeIT9ownT5uC85kHcuneQTL5k2tYjj19Y5ta97o8cGLh/dFIAcMvkIELAsRc6f1HX8iWenVn1RJjD4Na9g/xwasWU6taPX1gmEgy4eoFyLcZgeuyFzpNkVrIFzs5nPNf3j08tm7J547EXlolHgq7cYqQet+4ZAszp+9nVHJeW1z3V90pBeYT+eJiX7EjyyLnFjtt69IUlShXJq/YPm3Bn9vDKa4dZK5RNWRP0/XML3LxnwBNptgDjyRjXjiRM6ft/O7+IlHiu71eyRVOq2n//3AK37RvyROQAYHKoh539MR4533nff//cAqD9Pb2CN3pJAcAdB4Z5fGqZXLGzuYjvn10gEgxwdO+QSXdmPa/SX6rvn13oqJ2VbIGT06vccWDEjNuyjdsPDPPo80sde5APn10kHgnyUpevAarl9v1aX33/bGeD9JVUjnPza9zuIeUshOBV+0d45Nxixx7kw2cXGYiHOezC6vWNUArKQ9y+f4RCqdLxupDvn1vk5j0D9ES84UEADCYiHJ5I8v0OvQjDg/DSIAVa32seZGdzkIYHEfaIBwGwoz/GtaOJqgfQLo+c1843FJ5XuOPAMMsdepBSSh45t8irrh32xNyjgXeeUoUWmggIHu7Ai1heK/DMjPc8CDDHg3z47CIJj3kQoHmQQmj33y6GB3GHxwZo0AyKTj1IL3oQYI4HeWExy+WVdc8ZZkpBeYhENMTLJgc68iIMD+KOA956UAFuP9C5B+lFDwJqPcj2jZOqB+HBvr+jQw/Sqx4EmONBGmPG7R4zTL31liq4ff8wT11aYXmt0Nb5/3JmgUQkfRowsAAADzpJREFUyE27veVBANx2jeZB/svp9irNX15Z1+cgvPWSGty+f5jjF1bItLkW7nunFxjUk228xit1D/K7p9sbpM8vrHnSgzC4ff8wP3h+qe3owffOzDOejHpi7VstSkF5jDcc3kFFwreemW353FK5wjdPXuHHrx/znAcBmgd5+4ERvnbiSluV3b/29AwAbzg8bvat2cIbDu+gUK7w7Wdb7/t8qcy3np3ldS8Z95wHAZoH+fK9Q3z9xExb5xt9/3oP9322UG7LOMsWSjx0ao43HB73zPonA++NUl3ODbuSTA718NWnW39RH31+icW1Am8xqaabE7zlxh1MLWXbWrT6wNMzHJ5Ico3HrEiDo3sHGeuL8kAbff/w2QXSuZKn+/7NN+7g9GyGs23sDfbVp69wy54BJvrdXXuxEbfvH2YgHm6r7x96bp5cscKbPdj3SkF5DCEEb75xgofPLrCSbS3M98CJGXrCQdMKTzrBGw/vIBgQLSvo6ZV1jk+t8JabvPeSGgQCgrtu2MF3Ts23XPLqq09dIRkLeTI5xuCuGycQAh54+kpL5z2/sMazM6ueHKANwsEAbzw8zj8/O9dymO+BEzOM9EZ4xT7vhTeVgvIgb7lxglJF8s0WwnzliuTrJ2Z57fVjnkov38xgIsLt+4d54OmZlsJ8XzuhDWp33bDDqluzhTffOEG+VOHB5+rtDVqfQqnCt565whsO7yAS8u4rP56McXTvYMtehHG8WdXgneLNN06QyZf43pnm5+HWC2UefHaONx3RDDuv4d2ntYu5cVc/k0M9fPmHl5s+5+GzCyxk8p62Ig3ecuMEFxaz/LCF6uZf/uFlXjKR5NrRXgvvzHqOXjPEWF+0pb5/6NQcq7kSb7nJ28oZtEH6uStpnp1pLsQrpeQfn7jMzXsGXL+1ynbcvn+EgXiYf2yh77/5zBXWi2XPhnaVgvIgQgjefuskD59d5MLiWlPn3PvYFIPxMK8/7N3wnsFbbpqgJxzk3kcvNnX8yekUT11K8e+OmrOXlpMEA4KfuXU3Dz43x5VUc7vs3vvoFOPJKK8+OGrx3VnP2162i0gwwBcea67vj08tc2Yuw88dnbT4zqwnEgrwUzfv4psnr7CYyTd1zr2PXmRyqMdT5Y1qUQrKo/y7o5MEBE29qPPpPN88OctP37KbaMi74T2DvliYt750J//01DTp3PbbYd/76MXqy+0H7nn5JBUJf3ds+76fXlnnu6fnefutk56pP7cVg4kId96wgy8dv9TUXMznH71IIhLkJ1+604a7s5533LaHYlnypePbe1HPL6zxyPlFfu7opCczN0EpKM+yoz/Ga68f4+8ev7Tt6vq/P36JUkXyjtu8b0Ua3HPbJNlCmfufnN7yuGyhxD8+cZm33Dhh2m68TrN3OMEdB4a597GL29Znu+/YRSTwcy/3T9+/47Y9rOZK285FreaKfOWpad76sl0koubsxus0h8b7uHXvIJ9/bGrbOdh7H5siGBC83cPeo1JQHubnX7GH+XSeex+danjMaq7IX/7r89y2b4gDY97YYqAZXjY5wEsmkvzZd8+zXmhsSf/vh18gnS/x86/YY+PdWc/P37aXyyvrfPH4pYbHLK8V+NwjF3j1wVEmh+I23p21vPLaIa4dTfCp75zbchPHP/+X8+SKFX7+Nr/1/R7Oz6/xlacaK+i51Rx/+4MpXv+SMcaT3ticsB5KQXmY11w3xo8eHOH3v36q4XzE73/9ORYyef7LW15i891ZixCC3/6Jw0wtZfnjB8/UPeaFhTX+57fP8OYbd/Dya7xTub0Z7rphBy+/ZpDffeBZFhrMR3zsgWdZXS/yW2/2X9//1584zNm5DH/23fN1jzk9m+Z/ffccP33zLm7c7Y19v5rlbTfv4qbd/Xz4n54hla0f4v7wV54hX6rwgbu83fdKQXkYIQQffdsNFMoVPvQPT18V7vn+uQX++t+m+KXb93mytNF2vGr/MG+/dTd//i/neXJTRl+pXOH9f/8U0WCA3/nJIw7doXUEAoL/8dM3spYv8dtfPnFVuOehU3N88fFLvPvV13LdDv94zgavuW6Mn7hpgk8+ePaqjL5CSev73miID/nMMAMtUeZ3f+pGlrMFPvxPJ6/q+6+fmOGrT83w6685wD6PLko3UArK4+wdTvDBu67n28/N8QffPFX9/IWFNX7tb46zfzTBf3zjIQfv0Fo+9JaXMJ6M8X9/7hgzqfXq5x/+p2f4wfNL/M5bj3g6xLEVB8b6eN8bruOBp6/wyQfPVj8/M5vmN/72Ca7f0cdvvO6gg3doLb/zk0cYTIT55c8eYz6teZFSSj70D0/zxNQK//1tNzDcG3X4Lq3hhl39vPc1B/jSE5f5zL8+X/385HSK9933JC/d3c+v/Nh+B+/QHEQ7Nc26gaNHj8pjx445fRtNIaXkt/7haT7/6EVu2JVkMB7hqUspAgL+8T13sHfY21bUdjx3ZZWf+dT3iYaDHNmZZD6d57krad796mt9F97ajJSS/3jfk3zpicvctLufZCzMk5dWiIaCfPm9d3h+7c92PH0pxdv/7Pv0RkMc3tnPbCrHqdk0v/G6g7zvDf41zAAqFcl7P3+cr524wk27B+iNBnnyYoq+WIgvv+cOxjximAkhHpdSHq37nVJQ9fGSggIolit86qFzHLuwxHK2wKHxPv6vO/Zxwy5/xd8b8fiFJf7qkQucmcsw0hvlFdcO8Suv3u/J1fOtki+V+ZMHz/L41DKr6yWu29HHu35kHy/x2L5H7fLIuUXufWyKM7MZxpJR7tg/wrt+ZJ9nU6tbYb1Q5v978AxPTK2wVihx/Y4+3v3qaz2VEKUUVBt4TUEpFAqFF9lKQak5KIVCoVC4EqWgFAqFQuFKlIJSKBQKhStRCkqhUCgUrkQpKIVCoVC4EqWgFAqFQuFKlIJSKBQKhStRCkqhUCgUrkQpKIVCoVC4ElVJogFCiHngQpunjwALJt6O1+hm+btZduhu+btZdmhf/r1SytF6XygFZQFCiGONSnd0A90sfzfLDt0tfzfLDtbIr0J8CoVCoXAlSkEpFAqFwpUoBWUNn3b6Bhymm+XvZtmhu+XvZtnBAvnVHJRCoVAoXInyoBQKhULhSpSCUigUCoUrUQqqCYQQdwohTgkhzgohPlDn+6gQ4gv69z8QQlxT890H9c9PCSHe1GybbsFs2YUQk0KIh4QQzwohTgoh/r190rSOFX2vfxcUQjwhhPiK9VK0h0XP/YAQ4otCiOf0Z+BV9kjTOhbJ/x/05/6EEOLzQoiYPdK0RruyCyGG9fc7I4T45KZzbhVCPK2f88dCCLHtjUgp1b8t/gFB4BxwLRABngQObzrm14D/pf98D/AF/efD+vFRYJ/eTrCZNt3wzyLZJ4Bb9GP6gNNulN0q+WvOex/wt8BXnJbTTtmBzwK/rP8cAQacltUu+YFdwPNAj37cfcAvOS2rybIngB8BfhX45KZzHgVeBQjga8Bd292L8qC25zbgrJTyvJSyANwL3L3pmLvRXjyALwKv062Du4F7pZR5KeXzwFm9vWbadAOmyy6lnJFSHgeQUqaBZ9FeXDdiRd8jhNgNvAX4CxtkaBfTZRdCJIFXA58BkFIWpJQrNsjSDpb0PRACeoQQISAOTFssRzu0LbuUck1K+a9ArvZgIcQEkJRSPiI1bfU54G3b3YhSUNuzC7hY8/slrh5Qq8dIKUtAChje4txm2nQDVsheRQ8L3Az8wMR7NhOr5P8j4D8DFfNv2TSskP1aYB7433p48y+EEAlrbr9jTJdfSnkZ+ANgCpgBUlLKb1py953RiexbtXlpmzavQimo7akXJ92cm9/omFY/dxtWyK6dJEQv8PfAb0opV9u+Q2sxXX4hxE8Ac1LKxzu9OYuxou9DwC3An0opbwbWALfOv1rR94Nonsc+YCeQEEL8Hx3dpTV0InsnbV6FUlDbcwmYrPl9N1e75dVjdNe9H1ja4txm2nQDVsiOECKMppz+Rkr5JUvu3ByskP8O4K1CiBfQQievFUL8tRU33yFWPfeXpJSGx/xFNIXlRqyQ//XA81LKeSllEfgScLsld98Znci+VZu7t2nzapyekHP7PzSr7zya1WNMGB7ZdMx7ePGE4X36z0d48WTpebQJyG3bdMM/i2QXaPHnP3JaPifk33Tuj+PeJAlLZAe+B1yn//zfgP/XaVntkh94BXASbe5JoM3h/LrTspope833v8TVSRKPAa9kI0nizdvei9N/DC/8A96Mlm12DviQ/tlHgLfqP8eAv0ObDH0UuLbm3A/p552iJmulXptu/Ge27GgZPhJ4Cvih/m/bB9Uv8m9q+8dxqYKySnbgZcAxvf//ERh0Wk6b5f8w8BxwAvgrIOq0nBbI/gKaN5VB85wO658f1eU+B3wSvZLRVv9UqSOFQqFQuBI1B6VQKBQKV6IUlEKhUChciVJQCoVCoXAlSkEpFAqFwpUoBaVQKBQKV6IUlELhEHrl5x/q/64IIS7X/P59i655sxCiYQ1AIcSoEOLrVlxboWiVkNM3oFB0K1LKRbR1QQgh/huQkVL+gcWX/S3go1vc07wQYkYIcYeU8mGL70Wh2BLlQSkULkQIkdH//3EhxHeFEPcJIU4LIX5PCPELQohH9b119uvHjQoh/l4I8Zj+7446bfYBN0kpn9R//7Eaj+0J/XvQFtD+gk2iKhQNUQpKoXA/LwX+PXAj8H8Ch6SUt6Ft1/Hr+jH/E/iElPLlwM9QfysPYyW/wX8C3iOlfBnwo8C6/vkx/XeFwlFUiE+hcD+PSSlnAIQQ5wBji4angdfoP78eOFyzSWlSCNEntT23DCbQtrsweBj4QyHE3wBfklIa2yHMoVXbVigcRSkohcL95Gt+rtT8XmHjHQ4Ar5JSrtOYdbQaagBIKX9PCPFVtLpr/yaEeL2U8jn9mK3aUShsQYX4FAp/8E3gvcYvQoiX1TnmWeBAzTH7pZRPSyk/jhbWu17/6hAvDgUqFI6gFJRC4Q9+AzgqhHhKCPEM8KubD9C9o/6aZIjfFEKcEEI8ieYxfU3//DXAV+24aYViK1Q1c4WiixBC/AcgLaXcai3UvwB3SymX7bszheJqlAelUHQXf8qL57RehBBiFPhDpZwUbkB5UAqFQqFwJcqDUigUCoUrUQpKoVAoFK5EKSiFQqFQuBKloBQKhULhSpSCUigUCoUr+f8BKLveGsxFBycAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.segment(duration=0.01).plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you think those like parabolas, you might be right. `thinkdsp` provides `ParabolicSignal`, which computes parabolic waveforms." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from thinkdsp import ParabolicSignal\n", "\n", "wave = ParabolicSignal(freq=500).make_wave(duration=0.5, framerate=20000)\n", "wave.make_audio()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the waveform looks like:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wave.segment(duration=0.01).plot()\n", "decorate(xlabel='Time (s)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A parabolic signal has even and odd harmonics which drop off like $1/f^2$:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "spectrum = wave.make_spectrum()\n", "spectrum.plot()\n", "decorate(xlabel='Frequency (Hz)')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 4 }