{ "metadata": { "name": "", "signature": "sha256:97bfc8cd2186b905845a200ee3ca9a08693982349943b78df611359d0519a232" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pandas Time Series Basics\n", "\n", "- **Author:** [Chris Albon](http://www.chrisalbon.com/), [@ChrisAlbon](https://twitter.com/chrisalbon)\n", "- **Date:** -\n", "- **Repo:** [Python 3 code snippets for data science](https://github.com/chrisalbon/code_py)\n", "- **Note:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import modules" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from datetime import datetime\n", "import pandas as pd\n", "%matplotlib inline\n", "import matplotlib.pyplot as pyplot" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 113 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a dataframe" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = {'date': ['2014-05-01 18:47:05.069722', '2014-05-01 18:47:05.119994', '2014-05-02 18:47:05.178768', '2014-05-02 18:47:05.230071', '2014-05-02 18:47:05.230071', '2014-05-02 18:47:05.280592', '2014-05-03 18:47:05.332662', '2014-05-03 18:47:05.385109', '2014-05-04 18:47:05.436523', '2014-05-04 18:47:05.486877'], \n", " 'battle_deaths': [34, 25, 26, 15, 15, 14, 26, 25, 62, 41]}\n", "df = pd.DataFrame(data, columns = ['date', 'battle_deaths'])\n", "print(df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " date battle_deaths\n", "0 2014-05-01 18:47:05.069722 34\n", "1 2014-05-01 18:47:05.119994 25\n", "2 2014-05-02 18:47:05.178768 26\n", "3 2014-05-02 18:47:05.230071 15\n", "4 2014-05-02 18:47:05.230071 15\n", "5 2014-05-02 18:47:05.280592 14\n", "6 2014-05-03 18:47:05.332662 26\n", "7 2014-05-03 18:47:05.385109 25\n", "8 2014-05-04 18:47:05.436523 62\n", "9 2014-05-04 18:47:05.486877 41\n", "\n", "[10 rows x 2 columns]\n" ] } ], "prompt_number": 114 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Convert df['date'] from string to datetime" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df['date'] = pd.to_datetime(df['date'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 115 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set df['date'] as the index and delete the column" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.index = df['date']\n", "del df['date']\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 18:47:05.069722 34
2014-05-01 18:47:05.119994 25
2014-05-02 18:47:05.178768 26
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.280592 14
2014-05-03 18:47:05.332662 26
2014-05-03 18:47:05.385109 25
2014-05-04 18:47:05.436523 62
2014-05-04 18:47:05.486877 41
\n", "

10 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 116, "text": [ " battle_deaths\n", "date \n", "2014-05-01 18:47:05.069722 34\n", "2014-05-01 18:47:05.119994 25\n", "2014-05-02 18:47:05.178768 26\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.280592 14\n", "2014-05-03 18:47:05.332662 26\n", "2014-05-03 18:47:05.385109 25\n", "2014-05-04 18:47:05.436523 62\n", "2014-05-04 18:47:05.486877 41\n", "\n", "[10 rows x 1 columns]" ] } ], "prompt_number": 116 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### View all observations that occured in 2014" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df['2014']" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 18:47:05.069722 34
2014-05-01 18:47:05.119994 25
2014-05-02 18:47:05.178768 26
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.280592 14
2014-05-03 18:47:05.332662 26
2014-05-03 18:47:05.385109 25
2014-05-04 18:47:05.436523 62
2014-05-04 18:47:05.486877 41
\n", "

10 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 117, "text": [ " battle_deaths\n", "date \n", "2014-05-01 18:47:05.069722 34\n", "2014-05-01 18:47:05.119994 25\n", "2014-05-02 18:47:05.178768 26\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.280592 14\n", "2014-05-03 18:47:05.332662 26\n", "2014-05-03 18:47:05.385109 25\n", "2014-05-04 18:47:05.436523 62\n", "2014-05-04 18:47:05.486877 41\n", "\n", "[10 rows x 1 columns]" ] } ], "prompt_number": 117 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### View all observations that occured in May 2014" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df['2014-05']" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 18:47:05.069722 34
2014-05-01 18:47:05.119994 25
2014-05-02 18:47:05.178768 26
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.280592 14
2014-05-03 18:47:05.332662 26
2014-05-03 18:47:05.385109 25
2014-05-04 18:47:05.436523 62
2014-05-04 18:47:05.486877 41
\n", "

10 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 118, "text": [ " battle_deaths\n", "date \n", "2014-05-01 18:47:05.069722 34\n", "2014-05-01 18:47:05.119994 25\n", "2014-05-02 18:47:05.178768 26\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.280592 14\n", "2014-05-03 18:47:05.332662 26\n", "2014-05-03 18:47:05.385109 25\n", "2014-05-04 18:47:05.436523 62\n", "2014-05-04 18:47:05.486877 41\n", "\n", "[10 rows x 1 columns]" ] } ], "prompt_number": 118 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observations after May 3rd, 2014" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[datetime(2014, 5, 3):]" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-03 18:47:05.332662 26
2014-05-03 18:47:05.385109 25
2014-05-04 18:47:05.436523 62
2014-05-04 18:47:05.486877 41
\n", "

4 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 119, "text": [ " battle_deaths\n", "date \n", "2014-05-03 18:47:05.332662 26\n", "2014-05-03 18:47:05.385109 25\n", "2014-05-04 18:47:05.436523 62\n", "2014-05-04 18:47:05.486877 41\n", "\n", "[4 rows x 1 columns]" ] } ], "prompt_number": 119 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observations between May 3rd and May 4th" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df['5/3/2014':'5/4/2014']" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-03 18:47:05.332662 26
2014-05-03 18:47:05.385109 25
2014-05-04 18:47:05.436523 62
2014-05-04 18:47:05.486877 41
\n", "

4 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 120, "text": [ " battle_deaths\n", "date \n", "2014-05-03 18:47:05.332662 26\n", "2014-05-03 18:47:05.385109 25\n", "2014-05-04 18:47:05.436523 62\n", "2014-05-04 18:47:05.486877 41\n", "\n", "[4 rows x 1 columns]" ] } ], "prompt_number": 120 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Truncation observations after May 2nd 2014" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.truncate(after='5/3/2014')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 18:47:05.069722 34
2014-05-01 18:47:05.119994 25
2014-05-02 18:47:05.178768 26
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.280592 14
\n", "

6 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 121, "text": [ " battle_deaths\n", "date \n", "2014-05-01 18:47:05.069722 34\n", "2014-05-01 18:47:05.119994 25\n", "2014-05-02 18:47:05.178768 26\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.280592 14\n", "\n", "[6 rows x 1 columns]" ] } ], "prompt_number": 121 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observations of May 2014" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.ix['5-2014']" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 18:47:05.069722 34
2014-05-01 18:47:05.119994 25
2014-05-02 18:47:05.178768 26
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.230071 15
2014-05-02 18:47:05.280592 14
2014-05-03 18:47:05.332662 26
2014-05-03 18:47:05.385109 25
2014-05-04 18:47:05.436523 62
2014-05-04 18:47:05.486877 41
\n", "

10 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 122, "text": [ " battle_deaths\n", "date \n", "2014-05-01 18:47:05.069722 34\n", "2014-05-01 18:47:05.119994 25\n", "2014-05-02 18:47:05.178768 26\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.230071 15\n", "2014-05-02 18:47:05.280592 14\n", "2014-05-03 18:47:05.332662 26\n", "2014-05-03 18:47:05.385109 25\n", "2014-05-04 18:47:05.436523 62\n", "2014-05-04 18:47:05.486877 41\n", "\n", "[10 rows x 1 columns]" ] } ], "prompt_number": 122 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Count the number of observations per timestamp" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.groupby(level=0).count()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 18:47:05.069722 1
2014-05-01 18:47:05.119994 1
2014-05-02 18:47:05.178768 1
2014-05-02 18:47:05.230071 2
2014-05-02 18:47:05.280592 1
2014-05-03 18:47:05.332662 1
2014-05-03 18:47:05.385109 1
2014-05-04 18:47:05.436523 1
2014-05-04 18:47:05.486877 1
\n", "

9 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 123, "text": [ " battle_deaths\n", "date \n", "2014-05-01 18:47:05.069722 1\n", "2014-05-01 18:47:05.119994 1\n", "2014-05-02 18:47:05.178768 1\n", "2014-05-02 18:47:05.230071 2\n", "2014-05-02 18:47:05.280592 1\n", "2014-05-03 18:47:05.332662 1\n", "2014-05-03 18:47:05.385109 1\n", "2014-05-04 18:47:05.436523 1\n", "2014-05-04 18:47:05.486877 1\n", "\n", "[9 rows x 1 columns]" ] } ], "prompt_number": 123 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mean value of battle_deaths per day" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.resample('D', how='mean')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 29.5
2014-05-02 17.5
2014-05-03 25.5
2014-05-04 51.5
\n", "

4 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 124, "text": [ " battle_deaths\n", "date \n", "2014-05-01 29.5\n", "2014-05-02 17.5\n", "2014-05-03 25.5\n", "2014-05-04 51.5\n", "\n", "[4 rows x 1 columns]" ] } ], "prompt_number": 124 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Total value of battle_deaths per day" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.resample('D', how='sum')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
battle_deaths
date
2014-05-01 59
2014-05-02 70
2014-05-03 51
2014-05-04 103
\n", "

4 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ " battle_deaths\n", "date \n", "2014-05-01 59\n", "2014-05-02 70\n", "2014-05-03 51\n", "2014-05-04 103\n", "\n", "[4 rows x 1 columns]" ] } ], "prompt_number": 125 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot of the total battle deaths per day" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.resample('D', how='sum').plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEmCAYAAABoGYshAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlclWX+//EXLo1aCFh6TFAPriihiO2NCRrWWDqWRlmu\nlW2T4zKT5lf7llMKlrlU1s8yR1y+lWlpNaa2eMxmhtzNNKIUQ1HRBFQSBfH+/XFPTCggHM4591ne\nz8ejh92Hc677Y3d8uLiWzxVkGIaBiIj4nVpWByAiIu6hBC8i4qeU4EVE/JQSvIiIn1KCFxHxU0rw\nIiJ+qtIE/8ADD2Cz2YiJiSl97b333iM6OpratWuzdevWMu9PTk6mbdu2REVFsXbtWvdELCIiVVJp\ngh8+fDirV68u81pMTAwffPABN998c5nXd+/ezbvvvsvu3btZvXo1jz/+OOfOnXN9xCIiUiWVJvhu\n3boRFhZW5rWoqCjatWt3wXtXrlzJwIEDqVu3Lna7nTZt2rBx40bXRisiIlXmsjH4gwcPEhERUXod\nERFBdna2q5oXEZFqquPOxoOCgi547YorruDYsWPuvK2IiN9p1qxZtTvNLkvw4eHh7N+/v/T6wIED\nhIeHX/C+Y8eOofI3vuvZZ5/l2WeftToMcZKen+8qr8N8MTUaovltou7bty/vvPMORUVFZGZm8sMP\nP3DttdfWpHnxQvHx8VaHIDWg5xdYgiqrJjlw4EDWr1/Pzz//jM1mY/LkyTRq1IiRI0fy888/ExIS\nQpcuXfjkk08AmDp1KvPnz6dOnTrMnj2bW2+99cIbBgWpBy8iUk3O5M5KE7w7KMGLiFSfM7lTO1lF\nRPyUW1fRiEjNNWrUiLy8PKvDEA8JCwsjNzfXJW1piEbEy+l7JrBU9Lw1RCMiIqWU4EVE/JQSvIiI\nn1KCFxHxU0rwIiJ+SgleRJxmt9v5/PPP3dK2w+GgefPmXt+mJ9p2lhK8iDgtKCjIqSJY8fHxvPXW\nW2Veq1WrFnv37nVVaG7nC/EqwYuIx1X0Q8HX1vt7e7xK8CJSIxs3biQ6OppGjRrxwAMPcObMGfLy\n8rjjjjto0qQJjRo1ok+fPqW1zCdOnMiGDRt44oknCA4OZuTIkXTv3h2Azp07ExwczHvvvXfBfQ4e\nPEj//v1p0qQJrVq14pVXXrlobIWFhQwbNoxGjRoRHR3Npk2bqtzmxo0bueGGGwgLC6NZs2aMHDmS\n4uJigNIjS8uLd8aMGdhsNpo1a8aCBQtKX1+1ahXR0dE0bNiQiIgIXnrppSr+F64Bw8MsuKWIT6vK\n9wzU/B9ntGzZ0oiJiTEOHDhg5ObmGjfddJMxadIk49ixY8b7779vFBYWGidPnjTuvvtuo1+/fqWf\ni4+PN956660ybQUFBRl79uwpvV63bp0RERFhGIZhlJSUGHFxccZzzz1nFBcXG3v37jVatWplrFmz\nptL4xo8fb9x8881GXl6esX//fiM6Otpo3rx5ldrcsmWL8fXXXxslJSXGvn37jA4dOhizZs2qNN46\ndeoYzzzzjHH27Flj1apVRoMGDYz8/HzDMAyjadOmxldffWUYhmHk5+cbW7duLTfmip63M7lTCV7E\ny3nz94zdbjfmzp1ber1q1SqjdevWF7xv27ZtRlhYWOl1fHy8MW/evDLvqSzBp6WlGS1atCjz/qlT\npxrDhw+vNL7zfwi88cYbTrc5c+ZM484776w03vr16xslJSWlrzVp0sT4+uuvDcMwjBYtWhhz5841\njh8/XmnMrkzwKjYmIjXy25UjLVq04ODBgxQWFjJ69GjWrFlTWiitoKAAwzBKx9+rMzn7008/cfDg\nQcLCwkpfKykpKR0qqcjBgwcviK+qbWZkZDB27Fi2bNnCqVOnOHv2LFdffXWl97v88supVeu/I98N\nGjSgoKAAgOXLl/P888/z1FNP0alTJ1JSUrj++uur8Ld3nsbgRaRGsrKyyvx7s2bNeOmll8jIyGDj\nxo0cP36c9evXY5gjBkD1j59r3rw5kZGR5OXllf5z4sQJPv7440o/d+WVV14QX1XbfOyxx+jYsSM/\n/vgjx48fZ8qUKZw7d65acf/W1VdfzYoVKzh69Cj9+vUjKSnJ6baqSgleRJxmGAZz5swhOzub3Nxc\npkyZwr333svJkyepX78+ISEh5ObmMnny5DKfs9ls7Nmz56Kv/eraa68lODiYF154gcLCQkpKSvj2\n22/ZvHlzpfElJSWRnJxMfn4+Bw4cKDOJerE2CwoKCA4OpkGDBqSnp/P6669XOd7zFRcXs2TJEo4f\nP07t2rUJDg6mdu3aVfpsTSjBi4jTgoKCuP/+++nVqxetW7embdu2TJo0idGjR1NYWMgVV1zBjTfe\nyB/+8IcyvfZRo0axbNkyGjVqxOjRowHzQPChQ4cSFhbGsmXLyqyxr127Nh9//DHbt2+nVatWNG7c\nmIcffpgTJ05UGt8zzzxDy5YtiYyM5LbbbmPIkCFVbnP69On83//9Hw0bNuThhx/m3nvvLfN3qCze\n8ixevJjIyEhCQkJ44403WLJkiXP/0atB9eBFvJy+ZwKL6sGLiMhFKcGLiE/7wx/+QHBw8AX/pKSk\nWB2ayzg7t6tlkiLi0z755BOrQ3C7xYud+5zG4EW8nL5nAsv5z7ugANq3h4MHNQYvIuJXkpOhRw/n\nPqsevIiXa9SoUeluUPF/YWFh5ObmApCZCVdfDd98AxER1c+dSvAiIl5qwACIjYVJk5zLnZpkFRHx\nQuvWwebNsGiR821oDF5ExMuUlMDo0fDii1C/vvPtVJrgH3jgAWw2GzExMaWv5ebmkpiYSLt27ejV\nqxf5+fmlX0tOTqZt27ZERUWxdu1a56MSEQlg8+ZBaKg5RFMTlSb44cOHs3r16jKvpaSkkJiYSEZG\nBj179izdTLB7927effdddu/ezerVq3n88cdrVHlNRCQQ5eXB//4vzJ4NThx3W0alCb5bt25laiUD\nfPjhhwwdOhSAoUOHsmLFCgBWrlzJwIEDqVu3Lna7nTZt2rBx48aaRSciEmD+9jfo18+cXK2pak+y\n5uTkYLPZALNcZk5ODmAW1v9t8fqIiIjSMxhFROTi0tPNXau7drmmvRpNsl6sPGZ1i/qLiASysWNh\nwgRo0sQ17VW7B2+z2Th8+DBNmzbl0KFDNPlPJOHh4ezfv7/0fQcOHCA8PLzcNoYNG4bdbgcgNDSU\n2NhY4uPjAXA4HAC61rWudR1Q16tWwc6dDsaMAYjH4XCwYMECgNJ8WV0X3ei0b98++vTpw86dOwEY\nN24cl19+OePHjyclJYX8/HxSUlLYvXs39913Hxs3biQ7O5tbbrmFH3/88YJevDY6iYiUVVQEMTEw\nYwbcfnv573H5RqeBAweyfv16fv75Z5o3b87f/vY3nnrqKZKSknjrrbew2+0sXboUgI4dO5KUlETH\njh2pU6cOr732moZoRESqYM4caNUKevd2bbsqVSAiYqEjRyA6Gr78Ejp0qPh9zuROJXgREQs98oi5\nW3XWrMrfp1o0IiI+ZPt2WLHCXB7pDqpFIyJiAcMw681Mngzn7Sd1GSV4ERELLF8Oubnw0EPuu4fG\n4EVEPKywEDp2hLfeqvppTc7kTvXgRUQ8bMYMiItz/ii+qlIPXkTEg7KzoVMn2LTJXPteVVomKSLi\n5YYMgYgImDq1ep/TMkkRES+Wlgaff+6+ZZHn0xi8iIgHnDsHo0ZBcjIEB3vmnkrwIiIesHix+eeg\nQZ67p8bgRUTcrKAA2reHZcvghhuca0PLJEVEvFBysrkk0tnk7iz14EVE3CgzE66+Gr75Bio4A6lK\n1IMXEfEyTz4JY8bULLk7S8skRUTcZN062LwZFi2y5v7qwYuIuEFJiVktcvp0s967FZTgRUTcYN48\nCA2F/v2ti0GTrCIiLpaXB1FRsGYNxMa6pk3VohER8QJjxsCpUzB3ruvaVIIXEbFYejp06wa7dkGT\nJq5rV8skRUQsNnYsTJjg2uTuLC2TFBFxkVWrYM8e8yBtb6AevIiICxQVmb33GTPgkkusjsakBC8i\n4gJz5kBkJPTubXUk/6VJVhGRGjpyBKKj4csvoUMH99xDq2hERCzwyCPmbtVZs9x3Dx3ZJyLiYdu3\nm5OqnjqGrzo0Bi8i4iTDMOvNTJ4MYWFWR3MhpxP87NmziYmJ4aqrrmL27NkA5ObmkpiYSLt27ejV\nqxf5+fkuC1RExNssX26WJRgxwupIyudUgv/222+ZN28emzZtYseOHXz88cfs2bOHlJQUEhMTycjI\noGfPnqSkpLg6XhERr1BYaNZ6nzULate2OpryOZXg09PTue6666hXrx61a9eme/fuLF++nA8//JCh\nQ4cCMHToUFZ4y2p/EREXmzED4uIgIcHqSCrmVIK/6qqr2LBhA7m5uZw6dYpVq1Zx4MABcnJysNls\nANhsNnJyclwarIiIN8jONhP8iy9aHUnlnFpFExUVxfjx4+nVqxeXXnopsbGx1D7vd5SgoCCCgoLK\n/fywYcOw2+0AhIaGEhsbS3x8PAAOhwNA17rWta699nr+/HgeeQSyshxkZbnnfg6HgwULFgCU5svq\ncsk6+IkTJxIREcHs2bNxOBw0bdqUQ4cOkZCQQPp5a4e0Dl5EfFlamnmIR3o6BAd77r4erSZ55MgR\nALKysnj//fe577776Nu3L6mpqQCkpqbSr18/Z5sXEfE6587BqFGQnOzZ5O4sp3vwN998M8eOHaNu\n3brMnDmThIQEcnNzSUpKIisrC7vdztKlSwkNDS17Q/XgRcRHLVoEr74K//431PLwLiKVKhARcZOC\nAmjfHpYtgxtu8Pz9deCHiIibJCdDjx7WJHdnqQcvInIRmZlwzTWwYweEh1sTg3rwIiJu8OSTZs0Z\nq5K7s1RNUkSkEuvWwebN5gSrr1EPXkSkAiUlZs99+nSz3ruvUYIXEanAvHkQGmpubPJFmmQVESlH\nXh5ERcGaNRAba3U0WgcvIuIyY8bAqVMwd67VkZiU4EVEXCA9Hbp1g127oEkTq6MxaZmkiIgLjB0L\nEyZ4T3J3lpZJioj8xqpVsGePeZC2r1MPXkTkP4qKzN77jBlwySVWR1NzSvAiIv8xZw5ERkLv3lZH\n4hqaZBURAY4cgeho+PJL6NDB6mgupFU0IiJOeuQRaNAAZs60OpLyOZM7NckqIgFv+3ZzUvW8E0Z9\nnsbgRSSgGYZZb2byZAgLszoa11KCF5GAtny5WZZgxAirI3E9jcGLSMAqLISOHWH+fEhIsDqaymkn\nq4hINcyYAXFx3p/cnaUevIgEpOxs6NQJNm2CVq2sjubitExSRKSKhgyBiAiYOtXqSKpGyyRFRKog\nLQ0+/9z/lkWeT2PwIhJQzp2DUaMgORmCg62Oxr2U4EUkoCxZYv45aJC1cXiCxuBFJGAUFED79uba\n9+uvtzqa6tEySRGRSiQnQ48evpfcnaUevIgEhMxMuOYa2LEDwsOtjqb6PNqDT05OJjo6mpiYGO67\n7z7OnDlDbm4uiYmJtGvXjl69epGfn+9s8yIiLvXkk2bNGV9M7s5yKsHv27ePN998k61bt7Jz505K\nSkp45513SElJITExkYyMDHr27ElKSoqr4xURqbZ162DzZvjLX6yOxLOcSvANGzakbt26nDp1irNn\nz3Lq1CmaNWvGhx9+yNChQwEYOnQoK/zhUEMR8WklJWbPffp0qF/f6mg8y6kE36hRI/7yl7/QokUL\nmjVrRmhoKImJieTk5GCz2QCw2Wzk5OS4NFgRkeqaNw9CQ6F/f6sj8TyndrLu2bOHWbNmsW/fPkJC\nQrj77rtZvHhxmfcEBQURFBRU7ueHDRuG3W4HIDQ0lNjYWOLj4wFwOBwAuta1rnVd4+uPPnLw1FOw\nbl08QUHWx1Oda4fDwYIFCwBK82V1ObWK5t133+XTTz9l3rx5ACxatIi0tDS++OIL1q1bR9OmTTl0\n6BAJCQmkn7cXWKtoRMRTxoyBU6dg7lyrI6k5j62iiYqKIi0tjcLCQgzD4LPPPqNjx4706dOH1NRU\nAFJTU+nXr58zzYuI1Fh6OixeDM89Z3Uk1nF6HfwLL7xAamoqtWrVIi4ujnnz5nHy5EmSkpLIysrC\nbrezdOlSQkNDy95QPXgR8YDeveGWW2DsWKsjcQ2VCxYRAVatModndu6ESy6xOhrXUKkCEQl4RUVm\nr33mTP9J7s5SghcRvzJnDkRGmkM0gU5DNCLiN44cgeho+PJL6NDB6mhcS2PwIhLQHnkEGjQwh2f8\njY7sE5GAtX07rFjh/8fwVYfG4EXE5xmGWW9m8mQIC7M6Gu+hBC8iPm/5csjLgxEjrI7Eu2gMXkR8\nWmEhdOwI8+dDQoLV0biP1sGLSMCZMQPi4vw7uTtLPXgR8VnZ2dCpE2zaBK1aWR2Ne2mZpIgElCFD\nICICpk61OhL30zJJEQkYaWnw+edaFlkZjcGLiM85dw5GjYLkZAgOtjoa76UELyI+Z8kS889Bg6yN\nw9tpDF5EfEpBAbRvb659v/56q6PxHC2TFBG/l5wMPXoEVnJ3lnrwIuIzMjPhmmtgxw4ID7c6Gs9S\nD15E/NqTT5o1ZwItuTtLyyRFxCesWwebN8OiRVZH4jvUgxcRr1dSYvbcp0+H+vWtjsZ3KMGLiNeb\nNw9CQ6F/f6sj8S2aZBURr5aXB1FRsGYNxMZaHY11VItGRPzOmDFw6hTMnWt1JNZSghcRv5KeDt26\nwe7d0Lix1dFYS8skRcSvjB0LEyYouTtLyyRFxCutWgV79pgHaYtz1IMXEa9TVGT23mfOhEsusToa\n36UELyJeZ84ciIyE3r2tjsS3OZXgv//+e7p06VL6T0hICC+//DK5ubkkJibSrl07evXqRX5+vqvj\nFRE/d/SoeULTjBlWR+L7aryK5ty5c4SHh7Nx40ZeeeUVrrjiCsaNG8e0adPIy8sjJSWl7A21ikZE\nKvHoo+Zu1ZkzrY7Eu1iyTHLt2rU899xzbNiwgaioKNavX4/NZuPw4cPEx8eTft55WkrwIlKR7dvh\n1lvN5ZFhYVZH410sWSb5zjvvMHDgQABycnKw2WwA2Gw2cnJyatq8eJG9eyEry+ooxF8ZhllvZvJk\nJXdXqdEyyaKiIj766COmTZt2wdeCgoIICgoq93PDhg3DbrcDEBoaSmxsLPHx8QA4HA4AXXvJ9Ucf\nOVi3DjZujCcjA86ccZCUBK+9Fk/dutbHp2v/uV6+HPbvd9C2LYD18Vh97XA4WLBgAUBpvqyuGg3R\nrFy5ktdff53Vq1cDEBUVhcPhoGnTphw6dIiEhAQN0fig4mJYvRoWLoS1a81fmQcPhttug+xsePxx\n2L8f3nxTp+qIaxQWQseOMH8+JCRYHY138vgQzdtvv106PAPQt29fUlNTAUhNTaVfv341aV48yDBg\nyxbzpPrwcJg2DRITYd8+WLoU+vSBunXBbod//AMmToQ774SRI+HECaujF183YwbExSm5u5rTPfhf\nfvmFli1bkpmZSXBwMAC5ubkkJSWRlZWF3W5n6dKlhIaGlr2hevBe5cAB84T6hQvh9Gmzpz54MLRu\nffHP5ubCuHFmlb9XX4U//tH98Yr/yc6GTp1g0yZo1crqaLyXio1JlRQUwPvvm0l92zYYMACGDIEb\nb4QKpk0q5XDAI4/AVVfBK69As2YuD1n82JAh0Lw5TJlidSTeTcXGpEIlJfDZZ+Y3U0QEvPeemZSz\ns80yrDfd5FxyB4iPNw9Bjo6Gzp3h9dfh3DmXhi9+Ki0NPv/cLCgmrqcevJ/btcvsqS9ZAjabmeAH\nDoQmTdx3v4cfNv/9jTfMpC9SnnPn4IYb4E9/Mv+/lMqpBy8AHDkCs2dD167mCpigIHOc/NdJVHcl\ndzAT+oYNMGiQ2bP/3/81x/ZFzrdkifnnoEHWxuHP1IP3E6dPw0cfmb31DRugb1+zV5SQALVrWxNT\ndjb8+c9mr37uXOje3Zo4xPsUFED79rB8uZbaVpUmWQOMYcA//wmLFsGyZeYysyFDzOWLl11mdXT/\ntWKFuZzyttvghRe0S1HMZbZZWeb/u1I1SvABYs8e8xtj0SL43e9g6FC4/35z8tRbnThhflMvX24W\nkUpKcn5SV3xbZiZcc405MR8ebnU0vkMJ3o/l5ZkrXxYuhIwMc6J0yBCz1+5LiTItDUaMgBYt4LXX\noGVLqyMSTxswAGJjYdIkqyPxLZpk9TPFxea4+t13mztIP/sMxo83x7Z/nUT1peQO5njrli3mssyu\nXc3e/NmzVkclnrJuHWzeDH/5i9WRBAb14L2MYcDWrWZP/e23oV07s6d+993+N3b9ww9m7e/jx826\nNl26WB2RuFNJifkb59NPm714qR5ncqcO3fYS5ZUM+Pe/q1YywFe1bWv+VpKaak7ADh0KzzwDl15q\ndWTiDvPmmZ2U/v2tjiRwqAdvIVeXDPBlR46Yhyz/61/mTthbb7U6InGlvDyIijL3Y8TGWh2Nb9Ik\nqw8oKTHHIRcuhA8/hG7dzKTepw/Uq2d1dNZbvRoee8wco58xw72bssRzxoyBU6fM/RDiHCV4L7Zr\nl7mscfFiz5QM8GW//ALPPmv+EJw2zRy6CbTfaPxJerrZkdm9Gxo3tjoa36UE72WOHDEnShcuhJwc\nc0v24MGqz1JV27aZSypDQsyeX5s2VkckzujdG265xRyCE+dpmaQXOH3aXK/ep4+5AmbLFrMX+tNP\nkJKi5F4dXbqY6+bvuMNcXpmcbC4dFd+xapW5Me+JJ6yOJDCpB+8CvlIywJft26ejAn1NUZF5kMeM\nGWYvXmpGyyQ9rLySATt2eHfJAF/161GB775r/uAcMMA8IKJhQ6sjk4rMmQORkUruVlIPvpr8pWSA\nL9NRgd7v6FHzEO0vv4QOHayOxj9oktVNiovN5XsLF8Knn0KvXuZk6W23mQdRizV+PSowJgZefllH\nBXqTRx+F+vXNUhTiGkrwLhRIJQN82enTMHWquTnquefM06RqaemApbZvNzeqpafre8WVlOBdoLyS\nAYMH+3fJAH+gowK9g2GYh8zce6/ZixfX0TJJJxUUmAn9llvMQ6P37jWTxI8/mhtulNy9n44K9A7L\nl5vzVCNGWB2JQAD34FUywH8dPGieIKWjAj2rsNCcWJ0/3+zFi2tpiKYKVDIgcOioQM+aMsWct1q+\n3OpI/JOGaCpw5Mh/D8j4tUrhmjXmLtNRo5Tc/VW/fuYP9Hr1zCGcd981x4jF9bKzzQ1NL75odSTy\nW37bgz992jwNaeFCc2y2b1+zt56QALVru/324mV0VKB7DRkCzZubvXhxj4AfolHJAKlMURFMn272\nNCdONIdv6mgvd42lpZmHeHz/vb7P3ClgE3x5JQPuv18lA6R8OirQdc6dgxtugD/9yexMift4dAw+\nPz+fAQMG0KFDBzp27MjXX39Nbm4uiYmJtGvXjl69epGfn+9s8xeVl2cuZfz9783/wfLyYOlSc8x1\n/Hgld6nYr0cFPvGEOQE7bpx5GIVU35Il5p+DBlkbh5TP6QQ/atQoevfuzXfffcc333xDVFQUKSkp\nJCYmkpGRQc+ePUlJSXFlrBQXw8cfQ1KSWcTos8/MZJ6d/d9JVNWDkaoICoJhw2DnTnNZ5VVXmRPv\nUnUFBfDUU+b3nnYPeyenhmiOHz9Oly5d2Lt3b5nXo6KiWL9+PTabjcOHDxMfH096enrZG1bz14zf\nlgx45x2z96WSAeJqOiqw+iZOhKwsc2hU3M9jQzSZmZk0btyY4cOHExcXx4gRI/jll1/IycnBZrMB\nYLPZyMnJcaZ5wCwZMG2a2bNKSjKT+b/+BV99ZW5JV3IXV7rtNvj2W7jySrN42YIFWlJZmcxMcxOZ\ni39JFxdzag3B2bNn2bp1K6+++irXXHMNo0ePvmA4JigoiKAKxkuGDRuG3W4HIDQ0lNjYWOLj4yko\ngClTHKxdC/v2xTNgADz6qIOrroKEhHgAHA4HAPHxuta1a68vvRRuv91Bu3bw6qvxLFoEDzzgIDzc\nO+LzputXX41nzBj44QcHP/xgfTz+eO1wOFiwYAFAab6sNsMJhw4dMux2e+n1hg0bjN69extRUVHG\noUOHDMMwjIMHDxrt27e/4LPn3/LsWcP49FPDGDzYMEJCDOOOOwxj6VLDKCx0JjIR1yguNowZMwzj\n8ssNY+pUwygqsjoi7/HFF4ZhtxvGqVNWRxJYnEnXTg3RNG3alObNm5ORkQHAZ599RnR0NH369CE1\nNRWA1NRU+vXrV2Ebu3aZEzQtW5oTpV27mgdofPSROb6uejBipTp1YMwY2LzZ3CgXF2eu9w50JSUw\nerS5Y7V+faujkYtxeh38jh07eOihhygqKqJ169b8/e9/p6SkhKSkJLKysrDb7SxdupTQ0NCyNwwK\nomtXg8OHzaVVgwertKt4N8Mwl+COGWNu6AnkowLnzjXPR1i3TivWPM1nNjp9+qmhkgHic3Jzzd82\nV68OzKMC8/IgKspcThoba3U0gcdnEryHbyniUoF6VOCYMeaGsLlzrY4kMKmapIgHxMfDjh1m7fPO\nneH//T9zy74/S083S2w//7zVkUh1qAcvUgOBclRg797miWdjx1odSeBSD17EwwLhqMBVq8yCfk88\nYXUkUl1K8CI1VKuWWeZgxw6zRx8bC+vXWx2VaxQVmb32mTPhkkusjkaqSwlexEWaNTOPq0tJMXv0\nI0aYK0982Zw5ZmG/3r2tjkScoQQv4mL+clTg0aMwdapZfE18kyZZRdzIl48KfPRRc7fqzJlWRyKg\nSVYRr3P99ebh7jfdZJbjmDkTzp61OqqL274dVqwwJ43Fd6kHL+IhvnJUoGGYh9Pfe68Zr3gH9eBF\nvJivHBW4fLk5OTxihNWRSE0pwYt4kLcfFVhYCE8+CbNmqVaUP9AQjYiF1qwx19DfeKN3HBU4ZYp5\nROby5dbGIRfSEI2Ij7n1VrM336yZ9UcFZmebP2RefNGa+4vrqQcv4iW2bTPHvUNCzIqNbdp49v5D\nhkDz5mYvXryPevAiPqxLF3Pd/B13mMsrk5OhuNgz905Lg88/hwkTPHM/8QwleBEvcv5RgV27uv+o\nwHPnYNRO3veoAAALrElEQVQo8wfKZZe5917iWUrwIl7Ibod//AMmToS77oKRI+HECffca8kS889B\ng9zTvlhHCV7ESwUFwT33wLffmiWIo6Nh5UrX3qOgAJ56CmbPNqtiin/RJKuIj3DHUYETJ0JWFixa\nVPO2xL00ySrix1x9VGBmprlaJyXFZSGKl1EPXsQHueKowAEDzJU7Eye6NjZxD/XgRQJETY8KXLfO\nrHKpM1b9mxK8iI9y9qjAkhIYPdrcsVq/vvvjFOsowYv4uOoeFThvHoSFQf/+notRrKEEL+InqnJU\nYF6eOZwza5a5DFP8myZZRfxQRUcFjhlj1qCfO9fa+KT6nMmdSvAifqqoCKZPNytETpwIvXqZE7K7\nd0PjxlZHJ9Xl0QRvt9tp2LAhtWvXpm7dumzcuJHc3FzuuecefvrpJ+x2O0uXLiU0NLTGQYqI8349\nKvCf/4SpU7Vyxld5NMFHRkayZcsWGjVqVPrauHHjuOKKKxg3bhzTpk0jLy+PlPN2USjBi3ieYZjV\nIrt3h7p1rY5GnOHxBL9582Yuv/zy0teioqJYv349NpuNw4cPEx8fT3p6eo2DFBEJdB7d6BQUFMQt\nt9zC1VdfzZtvvglATk4ONpsNAJvNRk5OjrPNi5dyOBxWhyA1oOcXWOo4+8F//vOfXHnllRw9epTE\nxESioqLKfD0oKIggrcPyOw6Hg/j4eKvDECfp+QUWl6yimTx5MpdddhlvvvkmDoeDpk2bcujQIRIS\nEi4YogkPD+fgwYM1vaWISEBp1qwZ2dnZ1fqMUwn+1KlTlJSUEBwczC+//EKvXr145pln+Oyzz7j8\n8ssZP348KSkp5OfnXzDJKiIinuFUgs/MzOTOO+8E4OzZs9x///1MmDCB3NxckpKSyMrKqnCZpIiI\neIbHNzqJiIhnuL0WzerVq4mKiqJt27ZMmzYNgPfee4/o6Ghq167N1q1b3R2COKm8Z/fkk0/SoUMH\nOnfuzF133cXx48ctjlIqUt7ze/rpp+ncuTOxsbH07NmT/fv3WxylVKS85/erl156iVq1apGbm1t5\nI4YbnT171mjdurWRmZlpFBUVGZ07dzZ2795tfPfdd8b3339vxMfHG1u2bHFnCOKkip7d2rVrjZKS\nEsMwDGP8+PHG+PHjLY5UylPR8ztx4kTpe15++WXjwQcftDBKqUhFz88wDCMrK8u49dZbDbvdbhw7\ndqzSdtzag9+4cSNt2rTBbrdTt25d7r33XlauXElUVBTt2rVz562lhip6domJidT6z+nM1113HQcO\nHLA4UilPRc8vODi49D0FBQVcccUVFkYpFano+QGMHTuWF154oUrtuDXBZ2dn07x589LriIiIai/z\nEWtU5dnNnz+f3r17ezo0qYLKnt/EiRNp0aIFqampPPXUU1aFKJWo6PmtXLmSiIgIOnXqVKV23Jrg\ntdHJd13s2U2ZMoVLLrmE++67z0MRSXVU9vymTJlCVlYWw4YNY8yYMR6MSqqqvOd36tQpkpOTmTx5\nculrxkXWyLg1wYeHh5eZxNm/fz8RERHuvKW4SGXPbsGCBaxatYolS5ZYFZ5cRFW+9+677z42bdrk\n6dCkCsp7fpGRkWRmZtK5c2ciIyM5cOAAXbt25ciRIxU35M6JguLiYqNVq1ZGZmamcebMmTITBYZh\nGPHx8cbmzZvdGYI4qaJn98knnxgdO3Y0jh49anWIUomKnl9GRkbpe15++WVj0KBBFkYpFblY7jQM\no0qTrE7XoqmKOnXq8Oqrr3LrrbdSUlLCgw8+SIcOHfjggw/485//zM8//8ztt99Oly5d+OSTT9wZ\nilRTRc+ub9++FBUVkZiYCMANN9zAa6+9ZnG0cr6Knt+AAQP4/vvvqV27Nq1bt+b111+3OlQpR0XP\n77eqMgSujU4iIn5Kh26LiPgpJXgRET+lBC8i4qdcmuBr1arF4MGDS6/Pnj1L48aN6dOnjytvIyIi\nVeDSBH/ppZeya9cuTp8+DcCnn35KRESENjyJiFjA5UM0vXv35h//+AcAb7/9NgMHDizdbbVx40Zu\nvPFG4uLiuOmmm8jIyACge/fu7Nixo7SN3//+9+zcudPVoYmIBBSXJ/h77rmHd955hzNnzrBz506u\nu+660q916NCBDRs2sHXrViZPnsz//M//APDggw+yYMECADIyMjhz5gwxMTGuDk1EJKC4PMHHxMSw\nb98+3n77bW6//fYyX8vPz2fAgAHExMQwduxYdu3aBcCAAQP4+OOPOXv2LPPnz2f48OGuDktEJOC4\nZSdr3759+etf/8r69es5evRo6etPP/00PXv25IMPPuCnn34qPd29QYMGJCYmsmLFCt577z0dAiIi\n4gJuSfAPPPAAYWFhREdH43A4Sl8/ceIEzZo1A+Dvf/97mc889NBD3HHHHXTv3p2QkBB3hCUiElBc\nOkTz62qZ8PBwnnjiidLXfn193LhxTJgwgbi4OEpKSsqsromLiyMkJETDMyIiLuI1tWgOHjxIQkIC\n33//vdWhiIj4Ba/Yybpw4UKuv/56pk6danUoIiJ+w2t68CIi4lpe0YMXERHXq3GC379/PwkJCURH\nR3PVVVfx8ssvA5Cbm0tiYiLt2rWjV69e5Ofnl76ekJBAcHAwI0eOLLfNvn37aqOTiEgN1TjB161b\nl5kzZ7Jr1y7S0tKYM2cO3333HSkpKSQmJpKRkUHPnj1JSUkBoF69ejz//PNMnz693Pbef/99goOD\nVb9GRKSGapzgmzZtSmxsLACXXXYZHTp0IDs7mw8//JChQ4cCMHToUFasWAGYm5puuukmfve7313Q\nVkFBATNnzmTSpEkXPS1cREQq59Ix+H379rFt2zauu+46cnJysNlsANhsNnJycsq8t7we+tNPP81f\n//pXGjRo4MqwREQCkssSfEFBAf3792f27NkEBweX+dpvNztVZPv27ezdu5c//vGP6r2LiLiASxJ8\ncXEx/fv3Z/DgwfTr1w8we+2HDx8G4NChQzRp0qTSNtLS0ti8eTORkZF069aNjIwMevTo4YrwREQC\nUo0TvGEYPPjgg3Ts2JHRo0eXvt63b19SU1MBSE1NLU38v/3cbz366KNkZ2eTmZnJV199Rbt27fji\niy9qGp6ISMCq8Uanr776iptvvplOnTqVDsMkJydz7bXXkpSURFZWFna7naVLlxIaGgqA3W7n5MmT\nFBUVERYWxtq1a4mKiiptc9++ffTt25dvvvmmJqGJiAQ07WQVEfFT2skqIuKnlOBFRPyUEryIiJ9S\nghcR8VNK8CIifkoJXkTETynBS8B59tlneemllyr8+sqVK/nuu+88GJGIeyjBS8C5WF2kDz74gN27\nd3soGhH30UYnCQhTpkxh4cKFNGnShObNm9O1a1dCQkJ44403KCoqok2bNixatIht27bRp08fQkJC\nCAkJ4f333+fcuXM88cQTHD16lAYNGvDmm2/Svn17q/9KIhdniPi5zZs3GzExMUZhYaFx4sQJo02b\nNsZLL71kHDt2rPQ9kyZNMl555RXDMAxj2LBhxvLly0u/1qNHD+OHH34wDMMw0tLSjB49enj2LyDi\npDpW/4ARcbcNGzZw1113Ua9ePerVq0ffvn0xDIOdO3cyadIkjh8/TkFBAbfddlvpZ4z//GJbUFDA\nv//9b+6+++7SrxUVFXn87yDiDCV48XtBQUHlnjEwfPhwVq5cSUxMDKmpqTgcjjKfATh37hyhoaFs\n27bNU+GKuIwmWcXv3XzzzaxYsYLTp09z8uRJPvroIwBOnjxJ06ZNKS4uZvHixaVJPTg4mBMnTgDQ\nsGFDIiMjWbZsGWD27FXlVHyFJlklIEydOpXU1FSaNGlCy5YtiYuLo0GDBrzwwgs0btyY6667joKC\nAubPn8+//vUvRowYQb169Vi2bBlBQUE89thjHDp0iOLiYgYOHMikSZOs/iuJXJQSvIiIn9IQjYiI\nn1KCFxHxU0rwIiJ+SgleRMRPKcGLiPgpJXgRET+lBC8i4qf+P1Is6rJECbIMAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 128 } ], "metadata": {} } ] }