Skip to content

Instantly share code, notes, and snippets.

@jwhendy
Created December 26, 2017 23:28
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 jwhendy/a828e14d542562689add0d010d8e9d69 to your computer and use it in GitHub Desktop.
Save jwhendy/a828e14d542562689add0d010d8e9d69 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "### imports and functions\n\nThis code borrows heavily from [bokeh](https://github.com/bokeh/bokeh) after finding out that they have implemented the function [`export_png`](https://bokeh.pydata.org/en/latest/docs/user_guide/export.html) to, well, export `png` files from their web-based plots. This has been requested many times of `plotly` with no solution so I tried applying what `bokeh` does... and it seems to work!\n\n- requests/mentions via `plotly` github: [351](https://github.com/plotly/plotly.py/issues/351), [352](https://github.com/plotly/plotly.py/issues/352), [483](https://github.com/plotly/plotly.py/issues/483), [564](https://github.com/plotly/plotly.py/issues/564), [596](https://github.com/plotly/plotly.py/issues/596), [856](https://github.com/plotly/plotly.py/issues/856), [880](https://github.com/plotly/plotly.py/issues/880)\n- this [question](https://community.plot.ly/t/use-plotly-offline-to-save-chart-as-image-file/408) at the `plotly` community forums\n- [this](https://stackoverflow.com/questions/40243446/how-to-save-plotly-offline-graph-in-format-png) and [this](https://stackoverflow.com/questions/34957790/use-plotly-offline-to-generate-graphs-as-images) on StackOverflow"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import io\nimport pandas as pd\nimport plotly\nimport plotly.graph_objs as go\nimport selenium.webdriver\nimport shutil\nimport time\n\nfrom os.path import devnull\nfrom PIL import Image\nfrom subprocess import Popen, PIPE\n\n \n### from bokeh/util, slightly modified to avoid using bokeh's settings.py\n### - https://github.com/bokeh/bokeh/blob/master/bokeh/util/dependencies.py\ndef detect_phantomjs():\n '''Detect if PhantomJS is avaiable in PATH.'''\n try:\n phantomjs_path = shutil.which('phantomjs')\n # Python 2 relies on Environment variable in PATH - attempt to use as follows\n except AttributeError:\n phantomjs_path = \"phantomjs\"\n\n try:\n proc = Popen([phantomjs_path, \"--version\"], stdout=PIPE, stderr=PIPE)\n proc.wait()\n\n except OSError:\n raise RuntimeError('PhantomJS is not present in PATH. Try \"conda install phantomjs\" or \\\n \"npm install -g phantomjs-prebuilt\"')\n return phantomjs_path\n \n\n### from bokeh/io, slightly modified to avoid their import_required util\n### - https://github.com/bokeh/bokeh/blob/master/bokeh/io/export.py\ndef create_default_webdriver():\n '''Return phantomjs enabled webdriver'''\n phantomjs_path = detect_phantomjs()\n return webdriver.PhantomJS(executable_path=phantomjs_path, service_log_path=devnull)",
"execution_count": 34,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### create a plot\n\nHere we create some data and save the plot as an html file for reading in"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = pd.DataFrame(\n {'fruits': ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'],\n 'counts': [5, 3, 4, 2, 4, 6] })\n\ndata = [go.Bar(x=df['fruits'],\n y=df['counts'])]\n\nhtml_file = 'plotly-fruit-plot.html'\n\nplotly.offline.plot(data, filename=html_file)",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### the magic\n\nThis, again, is stolen entirely from how `bokeh` is doing this. I really don't entirely understand it, for example, how it knows the perimeter of the plot as it's cropped so nicely with no modification from their call. I find that calling `driver.maximize_window()` give a bigger output file, but I needed to wait just a hair or it would grab the screenshot before this too effect. I didn't see any difference between using or omitting the `driver.execute_script()` call, so I left it commented."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "### create webdrive, open file, maximize, and sleep\ndriver = create_default_webdriver()\ndriver.get(html_file)\ndriver.maximize_window()\n#driver.execute_script(\"document.body.style.width = '100%';\")\ntime.sleep(1)\n\nfname = 'plotly-fruit-plot.png'\n\n### original bokeh call gets byte data\n### - http://selenium-python.readthedocs.io/api.html\n# png = driver.get_screenshot_as_png()\n# image = Image.open(io.BytesIO(png))\n\n### I found this and seems simpler (could eliminate io import)\npng = driver.get_screenshot_as_file(fname)\nimage = Image.open(fname)\ndriver.quit()\n\nimage",
"execution_count": 46,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAA5dklEQVR4nO3deZzWdb3//+cwAww7\ng+xhooaSSyoezTIXNFNxyaVMrTRbjkaJHtOT5NGjlUc9mqWm5ZKCRWE/t2/lyQL1mJlkLpzi5JJr\nCso6MCAMMMz8/qDmiCz6jhkulPv9dvMmXJ+Lz7wu+FxzfeYx7+szCQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVQ9WZ3aGlpadkQgwAAAAAAbCyqqqrW2U47bKhBAAAA\nAADeKYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAA\nAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAU\nElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSs\nAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUA\nAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAA\nAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACg\nkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFh\nFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioA\nAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAA\nAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAA\nhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJ\nqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYB\nAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAA\nAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAA\nKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBI\nWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAK\nAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQKGaSg/w\nTvHwww/n5ptvzvTp07P77rtn7NixlR4JAAAAAGgnwmob+OMf/5jvf//7GTt2bN7znvdUehwAAAAA\noJ0Jq23glltuyec+97kMGzas0qMAAAAAABuAa6y2gWnTpuWVV17JSSedlJNPPjlTpkyp9EgAAAAA\nQDuyYnU9LVmyJIsXL878+fNz/fXX5/nnn89Xv/rVjBs3Lj179kx9fX2lRwQAAAAK/O8ri/LEzEWV\nHoNN0AHb9k2vLm2X6+rq6tpsX6xOWF1PLS0tSZJPfvKTqampybBhwzJ06ND85S9/ya677uoABgAA\ngLeZRx6dne9Mfq7SY7AJ2nu7Iamr61HpMXiLXApgPXXt2jU9evRYZWXqsmXL0rlz5wpOBQAAAAC0\nJ2G1DRx00EEZN25cGhsbM3Xq1MycOTNbb711pccCAAAAANqJsNoGTjjhhHTs2DHHH398rrzyynzt\na19Lly5dKj0WAAAAANBOXGO1DdTW1uass86q9BgAAAAAwAZixSoAAAAAQCFhFQAAAACgkLAKAAAA\nAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACg\nkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFh\nFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioA\nAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAA\nAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAA\nhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJ\nqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYB\nAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAA\nAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAA\nKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBI\nWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCNZUe4J1g3LhxmTBhQuvvDz/8\n8Jx66qkVnAgAAAAAaE/CahtYsGBBRo8enUMOOSRJUl1dXeGJAAAAAID25FIAbWD+/PkZNGhQOnXq\nlE6dOgmrAAAAAPAOZ8VqG1iyZEkuueSSNDc3Z+utt86Xv/zlbLXVVpUeCwAAAABoJ8JqG/j3f//3\ndOjQIc3NzZk4cWLOP//8jB8/PlVVVZUeDQAAAABoB8JqG+jSpUvrrz/zmc/k9ttvzyuvvJLBgwen\nvr6+zT7Oi/OW5Ct3PNVm+4O36phdBuaYEQMrPQYAAMAG0djYWOkR2EQ1NDSkvlNTm+2vrq6uzfbF\n6oTVNtbS0pLm5ubU1tYmadsDeNaymjw7Z3Gb7Q/eqiUt1T4ZAwAAm4za2tmVHoFNVM+ePVNX16PS\nY/AW+eFVbeA3v/lNli5dmmXLlmXChAkZOnRo+vTpU+mxAAAAAIB2YsVqG5g8eXK+9a1vpUOHDtlh\nhx1y7rnnVnokAAAAAKAdCatt4Otf/3qlRwAAAAAANiCXAgAAAAAAKCSsAgAAAAAUElYBAAAAAAoJ\nqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYB\nAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAA\nAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAA\nKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBI\nWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAK\nAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAA\nAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAA\nQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBC\nwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRV\nAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAA\nAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSstqF58+bliCOOyC9/\n+ctKjwIAAAAAtCNhtQ1dffXV6du3b6XHAAAAAADambDaRqZMmZLXXnst2267baVHAQAAAADambDa\nBpYsWZLrrrsup59+elasWFHpcQAAAACAdlZT6QHeCW666aaMGjUqAwcOXG1bfX19m32chobFbbYv\nKNHY2NimxzLQ/l6e35jpC5ZWegw2QTsO7p6uHasrPQZQ4I8zFmbJ8uZKj8EmpkvHDnnf4B6VHmOt\nGhsbKz0Cm6iGhobUd2pqs/3V1dW12b5YnbC6np566qk88cQTOeWUU9a4vS0P4J7L/HNRGbW1tT4Z\nw9vM+Eefzncm/6XSY7AJ+tW/7J131W28XygDq7tw3J/y9MyFlR6DTcw2A3rk1/+yd6XHWKva2tmV\nHoFNVM+ePVPnXOptQ6lbT7/61a/y/PPP5+Mf/3iSlZcF+N3vfpenn346p512WoWnAwAAAADag7C6\nnj772c/muOOOa/391Vdfne222y6jRo2q4FQAAAAAQHsSVtdT9+7d071799bf19bWpkePHqvcBgAA\nAAC8swirbezss8+u9AgAAAAAQDvrUOkBAAAAAADeboRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAK\nAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAA\nAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAA\nQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBC\nwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRV\nAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAA\nAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAA\nAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAU\nElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSs\nAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUA\nAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAA\nAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAArVVHqAt7vly5fn5ptvzj333JOFCxdm2223zRlnnJHB\ngwdXejQAAAAAoJ1YsbqeqqqqUlNTk8svvzx33HFHhg0blu9+97uVHgsAAAAAaEfC6nqqqanJiSee\nmIEDB6ampibvf//7M3PmzEqPBQAAAAC0I2G1DdXX1+e2227LAQccUOlRAAAAAIB25BqrbeTYY4/N\n3Llzs+eee+bQQw+t9DgAAAAAQDsSVtvIxIkT09jYmLvuuitjxozJDTfckA4dOqS+vr7NPkZDw+I2\n2xeUaGxsbNNjua39x6+fy6sNSys9BpuYgT0752sf2arSY6xVY2NjpUdgE9XQ0JD6Tk2VHgMosGLF\nikqPwCZoxYoVG/XXGM6lqJS2Ppeqq6trs32xOmG1DdXW1uaoo47K9ddfn7lz56Zfv35tegD3XOaf\ni8qora3dqD8Z/8+M1/L0zIWVHoNNzDYDemzUz4va2tmVHoFNVM+ePVNX16PSYwAFqqurKz0Cm6Dq\n6mrnUrAGzqXeXlxjdT3Nnj07f/7zn9PU1JSmpqbceeedqaurS9++fSs9GgAAAADQTiyBXE/Lly/P\ntddemxdeeCHV1dUZNmxYvvnNb6aqqqrSowEAAAAA7URYXU+DBw/OFVdcUekxAAAAAIANyKUAAAAA\nAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAA\nFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgk\nrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgF\nAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAA\nAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAA\noJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAh\nYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIq\nAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAA\nAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAA\nAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAK\nCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJW\nAQAAAAAK1VR6gHeCe++9NxMmTMisWbOy3Xbb5cwzz0y/fv0qPRYAAAAA0E6sWF1PLS0t+ctf/pKz\nzz47t99+ewYPHpwf/OAHlR4LAAAAAGhHwup6qqqqysknn5xhw4alY8eO+cAHPpDp06dXeiwAAAAA\noB0Jq23s6aefzrBhwyo9BgAAAADQjlxjtQ3NmDEjd911V7797W+33lZfX99m+29oWNxm+4ISjY2N\nbXost7UVK1ZUegQ2QStWrNionxeNjY2VHoFNVENDQ+o7NVV6jDVavqI5sxctr/QYbIJ6dK5Oj9qN\n90sv51JUgnMpWLO2Ppeqq6trs32xuo331f1tZtGiRTnvvPMyevToDBw4sPX2tjyAey7zz0Vl1NbW\nbtSfjKurqys9Apug6urqjfp5UVs7u9IjsInq2bNn6up6VHqMNXpq5sIc8v0plR6DTdDpHx6W0z+8\nTaXHWCvnUlSCcylYs435XIrVuRRAG1i2bFnOPffcHHzwwdlrr70qPQ4AAAAA0M4sgVxPLS0t+Y//\n+I8MHTo0Bx54YBYtWpQk6datW6qqqio8HQAAAADQHoTV9fTiiy/mwQcfTJL84he/aL39+uuvz9Ch\nQys0FQAAAADQnoTV9TR06NBMmjSp0mMAAAAAABuQa6wCAAAAABQSVgEAAAAACgmrAAAAAACFhFUA\nAAAAgELCKgAAAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQSVgEAAAAACgmrAAAA\nAACFhFUAAAAAgELCKgAAAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQSVgEAAAAA\nCgmrAAAAAACFhFUAAAAAgELCKgAAAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQS\nVgEAAAAACgmrAAAAAACFhFUAAAAAgELCKgAAAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwC\nAAAAABQSVgEAAAAACgmrAAAAAACFhFUAAAAAgELCKgAAAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAA\nAAAoJKwCAAAAABQSVgEAAAAACgmrAAAAAACFhFUAAAAAgELCKgAAAABAIWEVAAAAAKCQsAoAAAAA\nUEhYBQAAAAAoJKwCAAAAABQSVgEAAAAACgmrAAAAAACFhFUAAAAAgELCKgAAAABAIWEVAAAAAKCQ\nsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQSVgEAAAAACgmrAAAAAACFhFUAAAAAgELCKgAAAABAIWEV\nAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQSVgEAAAAACgmrAAAAAACFhFUAAAAAgELCKgAA\nAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQSVgEAAAAACgmrAAAAAACFhFUAAAAA\ngELCKgAAAABAIWEVAAAAAKCQsAoAAAAAUEhYBQAAAAAoJKwCAAAAABQSVtvIc889l0996lO5/fbb\nKz0KAAAAANDOaio9wDvB73//+1x99dUZNGhQpUcBAAAAADYAK1bbQJ8+fXLJJZdkyJAhlR4FAAAA\nANgArFhtA8OGDav0CAAAAADABiSstrP6+vo221dDw+I22xeUaGxsbNNjua2tWLGi0iOwCVqxYsVG\n/bxobGys9AhsohoaGlLfqanSY6yRcykqxbkUrM65FKxZW59L1dXVtdm+WJ2w2s7a8gDuucw/F5VR\nW1u7UX8yrq6urvQIbIKqq6s36udFbe3sSo/AJqpnz56pq+tR6THWyLkUleJcClbnXArWbGM+l2J1\nrrEKAAAAAFBIWAUAAAAAKCSsAgAAAAAUcqGpNnTaaadVegQAAAAAYAOwYhUAAAAAoJCwCgAAAABQ\nSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCw\nCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUA\nAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAA\nAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACA\nQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWE\nVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAAAAAKCasA\nAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAFBJWAQAA\nAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAA\nFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgk\nrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgF\nAAAAACgkrAIAAAAAFBJWAQAAAAAKCasAAAAAAIWEVQAAAACAQsIqAAAAAEAhYbUNzJs3L2eccUYO\nOeSQjB49Oi+//HKlRwIAAAAA2pGw2gauueaabLXVVrntttuyzz775LLLLqv0SAAAAABAOxJW11Nz\nc3OmTJmST3ziE6mtrc3RRx+dZ599NvPmzav0aAAAAABAOxFW19PChQvT3Nycfv36JUlqamoycODA\nzJw5s8KTAQAAAADtRVhdT6+99lo6d+68ym21tbVZuHBhhSYCAAAAANpb1ZvdoaWlpWVDDPJ21dDQ\nkGOPPTb/9V//1XrbF77whZx++unZfvvtc8ABB1RwOgAAAAA2VZMmTar0CG9rVVVV62ynNRtqkHeq\nHj16pHPnzpk9e3b69euXpqamzJw5MwMHDkziAAYAAACAdyKXAlhPVVVV2XvvvXPLLbeksbExt912\nW7bYYotsttlmlR4NAAAAAGgnwmob+OxnP5uXXnopRx11VO69996cccYZlR6Jt2Ds2LG55557Kj0G\nAG8zzz77bL7whS9UegxoU86LAFhfo0aNyuzZs9t8vy0tLTn++OP9kHA2Si4F0AZ69eqVSy65pNJj\nvOMtXrw4H//4x/PVr341e++9d6XHgY3Kgw8+mPPPPz/Jys9JO+20U0499dT07t27onNBW1i0aFGO\nPPLIfP7zn88nPvGJ1tu//vWvZ6+99srIkSOL99nc3Jzf/va3/9DryeDBg4VV3pa8VsCqXnjhhdx4\n443505/+lOXLl2fIkCE55ZRTsvPOO1d6NPiHLViwIJdffnkef/zxdOrUKTvttFPOPffcJMl99933\nD503VVpVVVVGjx6dvn37VnoUWI0Vq7xtPPjggxk8eHDuvffeSo8CG6Xtt98+v/71r/O9730vS5cu\nzfXXX1/pkaDNdO3aNRMnTsz8+fPbZH9Tp079h1fndenSJbvvvnubzAEbmtcKWGnOnDk5/fTT8+53\nvztXXXVVfvKTn+Tzn/983vWud1V6NFgvN910U2pra/PDH/4wV199dQ499NAkKxcqXXvtte3+8d/k\n5/z8wz70oQ+lurq6XfYN68OKVd427r333nzuc5/L5Zdfntdeey3dunVLsvKta8OHD88jjzyShQsX\nZr/99ssJJ5zwptteb+HChbnsssvypz/9KVtuuWXOPvvs9OvXL7Nnz85FF12U559/Pj169MiXv/xl\nX0yzUauqqkq/fv0ycuTI/PznP0+y9uN70aJFueiii/Lkk0+mqqoqxxxzTI455pgkK587Bx98cH74\nwx+md+/eueiii3L55Zfn4YcfTocOHXLEEUfk+OOPr+RDZRPTrVu37LHHHhk3blxOP/301ba3tLTk\nBz/4QSZNmpRu3bplzJgxrSuOnn/++VxxxRV55pln0r9///zrv/5rLr/88ixYsCAnnnhiTjvttHTv\n3j1XXHFFpk+fnl69emXMmDHZddddkyQf+9jHctZZZ+XSSy/NEUcckV133TUXX3xxxo8fnyeeeCLX\nXXddBg8enKeffjpJ8pWvfCXDhw9PsnJlyE033ZTly5fnYx/7WI4++ugkyW233ZZbb701jY2N2WGH\nHfKNb3yj/f8S4W/W9FrxejfddFOWLVuWk08+OUly8803Z9GiRRk9enQmTpyY6dOn59VXX83cuXMz\naNCgHHLIIfnxj3+choaG7LHHHhk9enQSxzkbt3HjxmXPPffM5z//+dbb/umf/qn11xMnTkxLS0v+\n/Oc/57HHHsvPf/7zTJ48ORMmTMj8+fOzxRZb5JxzzsmAAQNWey2ora3N2Wef3Rpp1/Ra0NTU5NyK\ndjFr1qx85CMfSa9evdKrV68MGDAgTU1NGTt2bObNm5cTTzwxBx54YHbZZZf8+Mc/zjbbbJOJEyfm\n4osvTufOndd4PnTmmWfmkEMOyciRI/OXv/wlo0ePztVXX51tttkm99xzTyZNmpSLL744SfLLX/4y\nP/vZz9K5c+d8+ctfzh577JEkee6553LZZZdl1qxZ+cAHPpAxY8akY8eOa3yunXPOOat8LXLppZdm\n1KhRGT9+fPr167fWfT3++OO56qqrUl9fn0GDBuX8889P//79K/nPwSbAilXeFhYsWJBnn302u+22\nW3bbbbc88MADq2yfNm1avvOd7+T73/9+7rnnnkybNu0tbfu7a6+9NgMGDMitt96anXfeOVdccUWS\n5I477sh2222XO+64I5dcckmGDRvWvg8U2sCcOXMyadKk7LDDDknWfnx37949hx12WG655ZZceuml\nuemmm9LQ0NC6nx/96EcZO3ZsLrzwwjz66KN55ZVXcsstt+QHP/hB9tprr4o8NjZdS5cuzYknnpjf\n/OY3ef7551fbPnny5PzP//xPxo0blzFjxuTCCy/M0qVL09TUlAsuuCD7779/brvttpx33nkZPnx4\nTjjhhIwYMSLjx4/PiBEj0rdv34wePTp33HFHjj766Fx33XWt+16yZEl+/etf57rrrlvlUgR/N23a\ntOy77765/vrrc/jhh2fcuHFJkldeeSXf/e53c/HFF+e73/1ufvrTn+bpp5/OkiVLMm7cuFx33XX5\n6U9/usZv+EF7e+NrRYmHHnoo//Zv/5Ybbrgh8+bNy/jx4/Otb30r3//+9zN58uS8+OKLjnM2eg8/\n/HD23Xffdd7n1ltvzUEHHZRbb701HTp0yJZbbpmLL744d955ZwYOHJjbbrut9b7Tpk3LAQcckOuv\nvz4HHXRQ6/nW2l4LnFvRXnbfffdMmDAhzz33XOttNTU1+drXvpauXbtm/PjxrRH/75fB+OlPf5rt\nt99+redDO+ywQ5566qkkyWOPPZZtt902jz/+eJLkySefzI477tj6sebNm5eJEyfmX//1X3PJJZdk\n8eLFaW5uzte//vUce+yx+clPfpLZs2fnzjvvbP0zb3yuJat+LfJ669rXDTfckC9+8Yu5/fbbc9pp\np6Vfv35t+5cLayCs8rZw//33Z4899kh1dXVGjhyZ++67b5Xte+21V6qrq1NbW5sPfvCD+cMf/vCW\ntv3dAw88kCOOOCIdOnTIgQcemEcffTQtLS0ZOHBgpk6dmpdeeimDBg1KXV1duz9W+Ef9+c9/zqhR\no/KlL30pW265ZT796U8nWfvxnSR77LFHampqsuWWW6ZXr16ZM2dO6/5GjhyZrbbaKp06dUr//v0z\nffr0TJ06NT169Mjmm29ekcfIpqu5uTm9evXKcccdt8a3sf3mN7/JqFGj0qVLl+y8886pra3NM888\nk6eeeiqNjY057LDD0rlz5wwdOnSN++/Tp0+23377VFVVZdddd82sWbNat7W0tOToo49Onz590rFj\nx9X+bI8ePbLbbrslSYYPH55XXnklycpL2Oy2224ZPHhwNttss+y222555JFH0rlz53Tr1i333HNP\nqqqqfNOODWptrxUldtxxx/Tq1SsdOnTIVlttlQ984APp3LlzunbtmiFDhuTVV191nLPRW7hwYTbb\nbLMkyYwZM3L00Ufn6KOPXuVnZwwbNix77rlnunTp0vr7QYMGpaqqKjvvvPMqrxW9evVqfafEyJEj\nM3Xq1DQ1Na31tcC5Fe3liCOOyOGHH56xY8dm7NixmT59+lrvu2LFipxwwgnp1q1bOnTosNbzodeH\n1UcffTRHHXVUpk6dmmRlWH39N+lGjRqV6urqvO9970u/fv3y5JNP5tlnn83SpUuz9957p2PHjtl/\n//3zyCOPtP6ZNz7XklW/Fnm9de1r4MCBuf/++7No0aJsu+227XZZAng9lwLgbeHee+/Ns88+mwcf\nfDAtLS157bXXMm/evPTp0ydJUltb23rfbt26rXKSs65tSdLY2JjFixfntNNOa/3EW1NTk0WLFuWw\nww5LU1NTzjzzzIwYMSJjxoxZ5ZM9bEy22267fOc731nltnUd3x06dMiNN96YZ555JtXV1WloaGgN\nrklW+Q7vlltumTPPPDPXXnttunTpkrPOOitDhgzZII8LkrQem0ceeWR+8Ytf5Pe//33rioZk5eqI\n6667LjfddFOSlStcFyxYkJaWltbXinV58cUXM378+MydOzfNzc2rPBeSrHPFQ/fu3Vt/3aFDh6xY\nsaJ1pt/+9retl9hYvnx5DjrooHTo0CGXXnpprr322tx666059dRT8/73v/8t/k3A+lnTa8WbeePz\n4fXHfHV1devlmZKVz4GmpibHORu9vn37tl63e8CAAa3vbnviiSda7/PGz/1TpkzJ7bffnmXLlqWh\noWGVGPr6rzm6du2aqqqqzJ8/f62vBc6taE+HHXZYDjrooNxyyy0566yzcvPNN6/xfnV1damp+b8s\ntLbzoe222y7PPfdclixZkpdffjn77LNPrrvuuixZsiQvvvhi6yWQkqRnz56tv+7Vq1fq6+uzfPny\n1NfXtz4PmpubM2jQoNb7rek8a23nXvPmzVvrvs4444zceOONOemkk3L00UfnuOOOe0t/X7A+hFU2\nerNmzcrLL7+cG2+8sfW2G2+8Mffff3+OPPLIJFnlh5m8Pri+2bZk5UlQ165dc80116zxk/dRRx2V\nUaNG5cILL8zEiRNz0kkntdEjg/a3ruP72muvTUNDQ771rW+lpqZmtbc4v/E7vLvvvnt22223TJgw\nIZdddlnxF+bQFmpqavKFL3wh1157bbbZZpvW2/v06ZOjjjoq+++//yr3nzZtWurr6990v5dcckkO\nOOCAHHnkkXnppZdy6qmnvuWZ1rYaok+fPtlvv/1yxhlnrLZt8803zze/+c1MnTo15513Xm655Rbf\nuGOjUV1d3foNgiSpr69fZcXQW10B5DhnYzZ8+PA8+OCDGTFiRKqrq9OvX79VvmmQrHqsL1y4MN/4\nxjdy5ZVXZuutt84vfvGLVd4Jt3DhwrS0tLQG1ZaWlvTu3XudrwXOrWhPHTt2zKc+9anccccdmTVr\n1hp/8NMbP5+v7Xyoa9euGTRoUCZNmpT3vve9qa6uztZbb53Jkydn6NCh6dy5c+s+GhoaMmDAgCQr\nvxbv06dPunfvngEDBmT8+PFrnHVNryvrOr9a2766deuWU089Ncccc0y+8pWvZNttt82IESPW8jcE\nbcOlANjo3XffffngBz+Yfv36tf43cuTI3Hvvva33mTx5chYsWJBZs2a1vt3mrWz7u3322ScTJkzI\n4sWLs3jx4jz55JNJkqeeeipLly5N586d079//zQ1NbX/A4Y2trbje+HChamrq0t1dXUeeuihdcan\nl156KfPnz09VVVU233xzzwUq6kMf+lB69+6dKVOmtN6277775s4778ysWbOyfPnyPPHEE1mxYkWG\nDx+empqa3HXXXVm6dGmee+65NDU1pWfPnnn11VdbV2MsXLgwffv2TUtLS+6+++42mXPPPffMlClT\n8uSTT6apqSkvv/xy5syZkwULFuSvf/1rkmTw4MFrXCELlTRw4MD88Y9/TGNjY2bMmJGHHnqoeB+O\nczZ2xx9/fO6+++78+Mc/zowZM1rf6bA2S5YsSXNzc+rq6rJ48eL893//9yrbFy9enLvvvjtNTU25\n8847s8suu6SmpmatrwXOrWgvU6ZMydy5c9PY2Jj7778/SdK/f//07NkzS5YsaQ3/a7Ku86Eddtgh\nkydPzi677JIk2WmnnfKrX/1qleurJsnPf/7zNDU15bHHHsucOXMyfPjwbLXVVqmurs6vfvWrLFu2\nLPPmzcsLL7zwDz2+de1r2rRpaW5uTu/evdOzZ0/PKzYIK1bZ6N1333357Gc/u8ptI0aMyEUXXZQZ\nM2YkSXbZZZeMGTMmixYtykc/+tFsv/32rfdd17a/O+WUU3LVVVflk5/8ZJqamnLwwQdn+PDhefjh\nh3POOeekubk522yzTb761a+274OFdrC24/uoo47KBRdckMmTJ2fkyJHrfIvm9OnTc+WVV2bJkiXp\n379/xowZswEfAazui1/8Yr70pS+1/n6//fbLzJkzM2bMmCxYsCDbbrttLrvsstTU1OS8887LFVdc\nkWuuuSaDBg3K1Vdf3fqTcI888sicffbZ+cxnPpNvf/vbueaaa3LiiSeutmrpHzFo0KCcccYZ+c//\n/M/MmDEjgwYNyrnnnptu3brlG9/4RubMmZOuXbvmi1/8Yrp27breHw/ayj777JP7778/xxxzTIYM\nGZJRo0bltddeK9pHY2Oj45yN2pZbbplvfvObufHGG/OjH/0oVVVVGTBgQA499NA13r9///459NBD\nc9JJJ6Vfv345+uijV/kG3xZbbJFp06ble9/7Xt797nfn7LPPTrL214JZs2Y5t6JdPPDAA7nkkkuy\nfPnybLHFFjn//PNTU1OTmpqaHHroofn0pz+dj370o9lzzz1X+7PrOh/acccd87Of/az1a+Kdd945\nN9xwQz75yU+23qd3797Zaqutcuyxx6a2tjZf/epXW9+pcMEFF+Tb3/52rrzyynTt2jUnn3zyWq99\nvy7V1dVr3deECRPy5JNPprq6OnvvvfcaF1VBW3vT9/G0+NYyG7mxY8fmwx/+8Gpv/3yzbQAAAOvr\niSeeyMUXX7zWtzkD8PZV9SbXQHIpAAAAAACAQsIqAAAAAEAhlwIAAAAAAHgDlwIAAAAAAGhjwioA\nAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAA\nAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJqwAAAAAA\nhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYBAAAAAAoJ\nqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAAAAAUElYB\nAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAAKCSsAgAA\nAAAUElYBAAAAAAoJqwAAAAAAhYRVAAAAAIBCwioAAAAAQCFhFQAAAACgkLAKAAAAAFBIWAUAAAAA\n2s21v5yTA855JtNebFzvfU158rUccM4zmXDfvDaYbP3UVHoAAAAAAHgne2n2snz2O39d5bbhm9fm\nqlOGbNA5Hn1mcRoWN2fk+7r/Q9s3hKYVLfnJ/fU5ZLde6dOjumJzvBXCKgAAAABsAEP6dsxu23RL\nkgys2/BZ7oZfzU3/XjVrDadvtn1D+MPTi3PzPfPywfd2E1YBAAAAgOQ9gzpn9CF9W3+/YPGKnHT5\nX9OhKrn5zC3y0BOv5eL/b2Y+MqJnvnxY3xx+wXP5yIiemTV/eZ56eWn2fV/3nPbRfqnuUJXm5uRH\n983L3Y82ZNnyluy5fbecMqpvunTqkGt/OSeTHluYLx3WN1f+v9k58cOb5U8vLMkzM5bmmRlLc8A5\nz+Q/Thyc3bbp2jrLN37y6hq3P/C/izJ+8rzMXtCU925emzEf7ZfBfTqu8riWLGte56xv9PzMZbnq\nZ7PzzIylGdSnJv98cN/s+p6u+dMLS3LZ7bOSJKd896U3XdX7vbvm5Pbfzc/YYwZkv516ZNLjC/Of\nt87MkR/ondGH9l3lvrPmN6V/75UpdPaCpvTrtf5Z1DVWAQAAAGADeOaVpbnmrjm55q45efDPr6VX\n1+p84aDNsmDxitz62/m5+Z556dW1OicfvFnrn5n0eEPet2WXbPfu2vzykYb8ZtprSZK7/rAgP7x3\nXgbWdczOW3fJf/2hIdffPbf1zy1YvCL/eeusDOzTMb27V+e9m9cmSbYa1DmnfbRfhg7otMpsa9r+\nwqxl+ebEV7N0eUs+vHOP/PGFJTn/R6+kuXnNj29ts77esqaWnHvzjDw9vTEHjOiRhUuac94PX8nM\n+U3p1rlDNu+3Mtoev29djt27bp1/n/vt1CNJ8ugzS5Ikjz+7OEmy946rrridcN+8fP6Kv2bW/Kb8\n4Ndz889X/TX1i1asc99vhbAKAAAAABvAy3OW547fzc8dv5uf/3l+ZQw8aNee2X6L2vzovnmZMW95\n/vngvunZ9f/eAj+0f6d8er8++exHVsbWqc+tjIf3/XFRqqqSr39qUP7t2IEZ0rdj7pm6cJWP98mR\ndfnelzbPvjt2zz5/i40De9fk0N17rbZic03b7//jojQ3J188pG9OPbxfDtilR56fuSzPvrJ0jY9v\nbbO+3p//2piZ85tyyG69cuph/fL5AzfLsqaWPDBtUbYa1Dnv7rcy+O69Q/fsuV23df59bjukc961\nWcc89szKj/P4s0uyWc+abP/u2lXu9+Gde6S5pSXf+X+z8pERPdK4rCVX/Wz2Ovf9VgirAAAAALAB\n7Ltj90y68D2ZdOF7Wi8JUFWVHLZ7r7S0JN1rO2S/nVZdbfn3yNqr68qMN/9vKy3nLmxK544d0r3L\nytv79qzJ4qXNWbjk/1Zi7ji0y3rNO3dhU+u+k7TG2Jnzl6/x/mubdX32+WZG7tQjcxqa8tv/XZQ5\nDU3Za/tuqXrD1QcG1HXMvu/rkT88vTjzF63IXtt3zwP/uyjPzFhzIH6rhFUAAAAAqJCmFS2ZcF99\nOnesyqLG5tz62/mrbJ+1oGmV//fuvjJe9u9Vk8ZlzWlYvDJezl7QlM4dq9Kjy/+tdn399U3//svm\nljXPsabt/f8WPWf9LXrO/tsM/Xqteo3VN5v19Vr3ueCN+1x5+9+j6OsvN7C8qSVNK9Y8+N9D9K0P\nzk+ycqXrG9UvWpHf/u+iDB9Sm/69avLQk69lpy27ZOtBnde4z7fKD68CAAAAgA3gLzOW5qqfr3wL\n+qC6jvnYh3pn4v31eWnOsvzLEf1z1x8W5Ef3zcu+7+ueXt1WRslX5i3PhRNfzYuzliVJdn3Pyh84\ntf/OPTL1uSX59x+9ks161mT63OU5+J96rvVj9+5enZrqqvzx+SW59r/m5EM7dF/lLfNr2r7v+3pk\nwn/X5/u/nJvHn12SSY8vzJC+HfOewZ3W+DHWNuvrvXfz2gzerGN++UhDmluSh554LTXVVdlr+5VB\ntN/fVrLeNHluth1SmxP265NPf+vFdO5YlfFnbLHa/jbv2ynDBnfOEy81pk+P6uywxeqrdH82ZUGW\nLm/JV47qnzseWpCWlpaccVT/1Va2lrJiFQAAAAA2gOlzl+dnUxbkZ1MW5P5pizJj7vL85P76vGuz\njjlw1x753IGbZenyllz5uut/br9FbeY0NGXm/KYcunuvfGi7lQHywBE9c+KH++SV+qY89syS7L9z\nj5x8cN+1fuzqDlX53IGbpaoq+fXjC7O8qeVNtw/p2zHnHjcwnWqqMunxhXnv5rW54FODVlkJ+3pr\nm/X1aqqr8o1PD8o276rNrx9bmK6dO+S84wZmUJ+Vq2AP/qeeGfauzpn63JLWt+r36NJhlevOvtF+\nO/VIc3Pyoe27rzGWnrB/n1x58pAMHdApXzhos3z7n4dkcJ81r7ot8aZdtqWlZS0LhAEAAACA9rBk\nWXMOv+C5jNi6ay757OBKj7NOlZ719t/Nz/fumpNvff5ded+W63dd2derqlr3mlaXAgAAAACAjVRL\n3j5rHjf0rM+9sjSTHl+Yux9tyND+ndb7h3WVcikAAAAAAOBtZ9aCptw5ZUEGbdYx5xw3cL2vmVrK\npQAAAAAAAN7gzS4FYMUqAAAAAEAhYRUAAAAAoJCwCgAAAABQSFgFAAAAACgkrAIAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Lbw/wM1OxDRWyvGAAAAAABJRU5E\nrkJggg==\n",
"text/plain": "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1366x768 at 0x7F7A8AA329E8>"
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.6.3",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment