summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2023-02-19 01:44:13 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2023-02-19 01:44:13 +0100
commit5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b (patch)
treeb549de68b6691f0fc1b27b4417f0f5c1697239d2
parentstore output in heap instead of on stack, which is too small for big torrents (diff)
downloadtravnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.tar
travnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.tar.gz
travnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.tar.bz2
travnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.tar.lz
travnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.tar.xz
travnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.tar.zst
travnik-5f9ab3d7eb557a9a7f54c628302f31af4dc1a84b.zip
-rw-r--r--.gitignore1
-rw-r--r--analiza/zvezek.ipynb2239
-rw-r--r--misc/analiza.txt3
-rw-r--r--src/dht.c2
-rw-r--r--src/main.c2
5 files changed, 2244 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 359a769..90df181 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ configfile.ben
doc/
possible_torrents.L
*.torrent
+.ipynb_checkpoints/
diff --git a/analiza/zvezek.ipynb b/analiza/zvezek.ipynb
new file mode 100644
index 0000000..dcf0e51
--- /dev/null
+++ b/analiza/zvezek.ipynb
@@ -0,0 +1,2239 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "7e32a042",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "......\n",
+ "31190 @ 59.71765779494308 s\n"
+ ]
+ }
+ ],
+ "source": [
+ "from bencodepy import decode\n",
+ "from enum import Enum\n",
+ "from hashlib import sha1, sha256\n",
+ "from os import scandir\n",
+ "from time import monotonic\n",
+ "class Type(Enum):\n",
+ " UNDEF = 0,\n",
+ " V1 = 1,\n",
+ " V2 = 2,\n",
+ " HYBRID = 3\n",
+ "class Torrent():\n",
+ " def __init__(self):\n",
+ " self.sha1 = b''\n",
+ " self.duplicates = [] # filenames of duplicated files\n",
+ " self.files = {}\n",
+ " self.type = Type.UNDEF\n",
+ " def file(self, f):\n",
+ " self.parse(open(f, \"rb\").read())\n",
+ " def parse(self, b):\n",
+ " infodict = b[b.find(b'4:info')+6:b.rfind(b'6:sourced2:ip')]\n",
+ " self.sha1 = sha1(infodict).digest()\n",
+ " self.sha256 = sha256(infodict).digest()\n",
+ " self.dict = decode(b)\n",
+ " if b'pieces' in self.dict.get(b'info'):\n",
+ " self.dict.get(b'info').pop(b'pieces')\n",
+ " if b'file tree' in self.dict.get(b'info').keys():\n",
+ " self.type = Type.V2\n",
+ " def filetree(names):\n",
+ " r = {}\n",
+ " for key in names.keys():\n",
+ " if key == b'':\n",
+ " return names.get(key).get(b'length')\n",
+ " r[key] = filetree(names.get(key))\n",
+ " return r\n",
+ " self.files = filetree(self.dict.get(b'info').get(b'file tree'))\n",
+ " self.dict.get(b'info').pop(b'file tree')\n",
+ " if b'files' in self.dict.get(b'info').keys():\n",
+ " if self.type is Type.V2:\n",
+ " self.type = Type.HYBRID\n",
+ " else:\n",
+ " for file in self.dict.get(b'info').get(b'files'):\n",
+ " def insert_file(d, path, length, self):\n",
+ " name = path.pop()\n",
+ " if not len(path):\n",
+ " d[name] = length\n",
+ " return\n",
+ " if name not in d.keys():\n",
+ " d[name] = {}\n",
+ " insert_file(d[name], path, length, self)\n",
+ " file.get(b'path').reverse()\n",
+ " insert_file(self.files, file.get(b'path'), file.get(b'length'), self)\n",
+ " self.type = Type.V1\n",
+ " self.dict.get(b'info').pop(b'files')\n",
+ " if not len(self.files):\n",
+ " self.type = Type.V1\n",
+ " self.files[self.dict.get(b'info').get(b'name')] = self.dict.get(b'info').get(b'length')\n",
+ " def paths(self):\n",
+ " def paths_r(d, path=None):\n",
+ " if path is None:\n",
+ " path = []\n",
+ " for f in d.keys():\n",
+ " if type(d[f]) is int:\n",
+ " z = path.copy()\n",
+ " z.append(f)\n",
+ " yield z, d[f]\n",
+ " else:\n",
+ " z = path.copy()\n",
+ " z.append(f)\n",
+ " for z, v in paths_r(d[f], z):\n",
+ " yield z, v\n",
+ " for z, v in paths_r(self.files):\n",
+ " yield z, v\n",
+ " def __repr__(self):\n",
+ " return str(self.__dict__)\n",
+ " def __hash__(self):\n",
+ " if len(self.sha1):\n",
+ " return int.from_bytes(self.sha1, byteorder=\"big\")\n",
+ " return id(self)\n",
+ "def glob(d):\n",
+ " r = {}\n",
+ " for f in scandir(d):\n",
+ " if f.name.endswith(\".torrent\") and f.is_file():\n",
+ " t = Torrent()\n",
+ " t.file(f.path)\n",
+ " r[t.sha1] = t\n",
+ " return r\n",
+ "print(\"......\")\n",
+ "start = monotonic()\n",
+ "torrents = glob(\"/root/projects/travnik\")\n",
+ "print(len(torrents), \"@\", monotonic()-start, \"s\")\n",
+ "# t = Torrent()\n",
+ "# t.file(\"/root/projects/travnik/449a38ef7e042bd2d75e8921aa02f6f244165d9d.torrent\")\n",
+ "# print(t.sha1.hex())\n",
+ "# for path, length in t.paths():\n",
+ "# print(path, length)\n",
+ "# print(t)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "b3e343fe",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "31190 @ 2.270925747929141 s 173.66823510221093 TiB\n"
+ ]
+ }
+ ],
+ "source": [
+ "s = monotonic()\n",
+ "siz = 0\n",
+ "for sha1, torrent in torrents.items():\n",
+ " for path, size in torrent.paths():\n",
+ " siz += size\n",
+ "print(len(v), \"@\", monotonic()-s, \"s\", siz/(1024*1024*1024*1024), \"TiB\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "30237511",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "31190 @ 2.0061122900806367 s 2199626\n"
+ ]
+ }
+ ],
+ "source": [
+ "s = monotonic()\n",
+ "files = 0\n",
+ "for sha1, torrent in torrents.items():\n",
+ " files += sum(1 for x in torrent.paths())\n",
+ "print(len(v), \"@\", monotonic()-s, \"s\", files)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "id": "e170de45",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "31190 @ 0.00032011792063713074 s 2199626\n"
+ ]
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "/* global mpl */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "mpl.get_websocket_type = function () {\n",
+ " if (typeof WebSocket !== 'undefined') {\n",
+ " return WebSocket;\n",
+ " } else if (typeof MozWebSocket !== 'undefined') {\n",
+ " return MozWebSocket;\n",
+ " } else {\n",
+ " alert(\n",
+ " 'Your browser does not have WebSocket support. ' +\n",
+ " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+ " 'Firefox 4 and 5 are also supported but you ' +\n",
+ " 'have to enable WebSockets in about:config.'\n",
+ " );\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
+ " this.id = figure_id;\n",
+ "\n",
+ " this.ws = websocket;\n",
+ "\n",
+ " this.supports_binary = this.ws.binaryType !== undefined;\n",
+ "\n",
+ " if (!this.supports_binary) {\n",
+ " var warnings = document.getElementById('mpl-warnings');\n",
+ " if (warnings) {\n",
+ " warnings.style.display = 'block';\n",
+ " warnings.textContent =\n",
+ " 'This browser does not support binary websocket messages. ' +\n",
+ " 'Performance may be slow.';\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " this.imageObj = new Image();\n",
+ "\n",
+ " this.context = undefined;\n",
+ " this.message = undefined;\n",
+ " this.canvas = undefined;\n",
+ " this.rubberband_canvas = undefined;\n",
+ " this.rubberband_context = undefined;\n",
+ " this.format_dropdown = undefined;\n",
+ "\n",
+ " this.image_mode = 'full';\n",
+ "\n",
+ " this.root = document.createElement('div');\n",
+ " this.root.setAttribute('style', 'display: inline-block');\n",
+ " this._root_extra_style(this.root);\n",
+ "\n",
+ " parent_element.appendChild(this.root);\n",
+ "\n",
+ " this._init_header(this);\n",
+ " this._init_canvas(this);\n",
+ " this._init_toolbar(this);\n",
+ "\n",
+ " var fig = this;\n",
+ "\n",
+ " this.waiting = false;\n",
+ "\n",
+ " this.ws.onopen = function () {\n",
+ " fig.send_message('supports_binary', { value: fig.supports_binary });\n",
+ " fig.send_message('send_image_mode', {});\n",
+ " if (fig.ratio !== 1) {\n",
+ " fig.send_message('set_device_pixel_ratio', {\n",
+ " device_pixel_ratio: fig.ratio,\n",
+ " });\n",
+ " }\n",
+ " fig.send_message('refresh', {});\n",
+ " };\n",
+ "\n",
+ " this.imageObj.onload = function () {\n",
+ " if (fig.image_mode === 'full') {\n",
+ " // Full images could contain transparency (where diff images\n",
+ " // almost always do), so we need to clear the canvas so that\n",
+ " // there is no ghosting.\n",
+ " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+ " }\n",
+ " fig.context.drawImage(fig.imageObj, 0, 0);\n",
+ " };\n",
+ "\n",
+ " this.imageObj.onunload = function () {\n",
+ " fig.ws.close();\n",
+ " };\n",
+ "\n",
+ " this.ws.onmessage = this._make_on_message_function(this);\n",
+ "\n",
+ " this.ondownload = ondownload;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._init_header = function () {\n",
+ " var titlebar = document.createElement('div');\n",
+ " titlebar.classList =\n",
+ " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
+ " var titletext = document.createElement('div');\n",
+ " titletext.classList = 'ui-dialog-title';\n",
+ " titletext.setAttribute(\n",
+ " 'style',\n",
+ " 'width: 100%; text-align: center; padding: 3px;'\n",
+ " );\n",
+ " titlebar.appendChild(titletext);\n",
+ " this.root.appendChild(titlebar);\n",
+ " this.header = titletext;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
+ "\n",
+ "mpl.figure.prototype._init_canvas = function () {\n",
+ " var fig = this;\n",
+ "\n",
+ " var canvas_div = (this.canvas_div = document.createElement('div'));\n",
+ " canvas_div.setAttribute('tabindex', '0');\n",
+ " canvas_div.setAttribute(\n",
+ " 'style',\n",
+ " 'border: 1px solid #ddd;' +\n",
+ " 'box-sizing: content-box;' +\n",
+ " 'clear: both;' +\n",
+ " 'min-height: 1px;' +\n",
+ " 'min-width: 1px;' +\n",
+ " 'outline: 0;' +\n",
+ " 'overflow: hidden;' +\n",
+ " 'position: relative;' +\n",
+ " 'resize: both;' +\n",
+ " 'z-index: 2;'\n",
+ " );\n",
+ "\n",
+ " function on_keyboard_event_closure(name) {\n",
+ " return function (event) {\n",
+ " return fig.key_event(event, name);\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " canvas_div.addEventListener(\n",
+ " 'keydown',\n",
+ " on_keyboard_event_closure('key_press')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'keyup',\n",
+ " on_keyboard_event_closure('key_release')\n",
+ " );\n",
+ "\n",
+ " this._canvas_extra_style(canvas_div);\n",
+ " this.root.appendChild(canvas_div);\n",
+ "\n",
+ " var canvas = (this.canvas = document.createElement('canvas'));\n",
+ " canvas.classList.add('mpl-canvas');\n",
+ " canvas.setAttribute(\n",
+ " 'style',\n",
+ " 'box-sizing: content-box;' +\n",
+ " 'pointer-events: none;' +\n",
+ " 'position: relative;' +\n",
+ " 'z-index: 0;'\n",
+ " );\n",
+ "\n",
+ " this.context = canvas.getContext('2d');\n",
+ "\n",
+ " var backingStore =\n",
+ " this.context.backingStorePixelRatio ||\n",
+ " this.context.webkitBackingStorePixelRatio ||\n",
+ " this.context.mozBackingStorePixelRatio ||\n",
+ " this.context.msBackingStorePixelRatio ||\n",
+ " this.context.oBackingStorePixelRatio ||\n",
+ " this.context.backingStorePixelRatio ||\n",
+ " 1;\n",
+ "\n",
+ " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+ "\n",
+ " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
+ " 'canvas'\n",
+ " ));\n",
+ " rubberband_canvas.setAttribute(\n",
+ " 'style',\n",
+ " 'box-sizing: content-box;' +\n",
+ " 'left: 0;' +\n",
+ " 'pointer-events: none;' +\n",
+ " 'position: absolute;' +\n",
+ " 'top: 0;' +\n",
+ " 'z-index: 1;'\n",
+ " );\n",
+ "\n",
+ " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
+ " if (this.ResizeObserver === undefined) {\n",
+ " if (window.ResizeObserver !== undefined) {\n",
+ " this.ResizeObserver = window.ResizeObserver;\n",
+ " } else {\n",
+ " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
+ " this.ResizeObserver = obs.ResizeObserver;\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
+ " var nentries = entries.length;\n",
+ " for (var i = 0; i < nentries; i++) {\n",
+ " var entry = entries[i];\n",
+ " var width, height;\n",
+ " if (entry.contentBoxSize) {\n",
+ " if (entry.contentBoxSize instanceof Array) {\n",
+ " // Chrome 84 implements new version of spec.\n",
+ " width = entry.contentBoxSize[0].inlineSize;\n",
+ " height = entry.contentBoxSize[0].blockSize;\n",
+ " } else {\n",
+ " // Firefox implements old version of spec.\n",
+ " width = entry.contentBoxSize.inlineSize;\n",
+ " height = entry.contentBoxSize.blockSize;\n",
+ " }\n",
+ " } else {\n",
+ " // Chrome <84 implements even older version of spec.\n",
+ " width = entry.contentRect.width;\n",
+ " height = entry.contentRect.height;\n",
+ " }\n",
+ "\n",
+ " // Keep the size of the canvas and rubber band canvas in sync with\n",
+ " // the canvas container.\n",
+ " if (entry.devicePixelContentBoxSize) {\n",
+ " // Chrome 84 implements new version of spec.\n",
+ " canvas.setAttribute(\n",
+ " 'width',\n",
+ " entry.devicePixelContentBoxSize[0].inlineSize\n",
+ " );\n",
+ " canvas.setAttribute(\n",
+ " 'height',\n",
+ " entry.devicePixelContentBoxSize[0].blockSize\n",
+ " );\n",
+ " } else {\n",
+ " canvas.setAttribute('width', width * fig.ratio);\n",
+ " canvas.setAttribute('height', height * fig.ratio);\n",
+ " }\n",
+ " /* This rescales the canvas back to display pixels, so that it\n",
+ " * appears correct on HiDPI screens. */\n",
+ " canvas.style.width = width + 'px';\n",
+ " canvas.style.height = height + 'px';\n",
+ "\n",
+ " rubberband_canvas.setAttribute('width', width);\n",
+ " rubberband_canvas.setAttribute('height', height);\n",
+ "\n",
+ " // And update the size in Python. We ignore the initial 0/0 size\n",
+ " // that occurs as the element is placed into the DOM, which should\n",
+ " // otherwise not happen due to the minimum size styling.\n",
+ " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
+ " fig.request_resize(width, height);\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " this.resizeObserverInstance.observe(canvas_div);\n",
+ "\n",
+ " function on_mouse_event_closure(name) {\n",
+ " /* User Agent sniffing is bad, but WebKit is busted:\n",
+ " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
+ " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
+ " * The worst that happens here is that they get an extra browser\n",
+ " * selection when dragging, if this check fails to catch them.\n",
+ " */\n",
+ " var UA = navigator.userAgent;\n",
+ " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
+ " if(isWebKit) {\n",
+ " return function (event) {\n",
+ " /* This prevents the web browser from automatically changing to\n",
+ " * the text insertion cursor when the button is pressed. We\n",
+ " * want to control all of the cursor setting manually through\n",
+ " * the 'cursor' event from matplotlib */\n",
+ " event.preventDefault()\n",
+ " return fig.mouse_event(event, name);\n",
+ " };\n",
+ " } else {\n",
+ " return function (event) {\n",
+ " return fig.mouse_event(event, name);\n",
+ " };\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " canvas_div.addEventListener(\n",
+ " 'mousedown',\n",
+ " on_mouse_event_closure('button_press')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'mouseup',\n",
+ " on_mouse_event_closure('button_release')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'dblclick',\n",
+ " on_mouse_event_closure('dblclick')\n",
+ " );\n",
+ " // Throttle sequential mouse events to 1 every 20ms.\n",
+ " canvas_div.addEventListener(\n",
+ " 'mousemove',\n",
+ " on_mouse_event_closure('motion_notify')\n",
+ " );\n",
+ "\n",
+ " canvas_div.addEventListener(\n",
+ " 'mouseenter',\n",
+ " on_mouse_event_closure('figure_enter')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'mouseleave',\n",
+ " on_mouse_event_closure('figure_leave')\n",
+ " );\n",
+ "\n",
+ " canvas_div.addEventListener('wheel', function (event) {\n",
+ " if (event.deltaY < 0) {\n",
+ " event.step = 1;\n",
+ " } else {\n",
+ " event.step = -1;\n",
+ " }\n",
+ " on_mouse_event_closure('scroll')(event);\n",
+ " });\n",
+ "\n",
+ " canvas_div.appendChild(canvas);\n",
+ " canvas_div.appendChild(rubberband_canvas);\n",
+ "\n",
+ " this.rubberband_context = rubberband_canvas.getContext('2d');\n",
+ " this.rubberband_context.strokeStyle = '#000000';\n",
+ "\n",
+ " this._resize_canvas = function (width, height, forward) {\n",
+ " if (forward) {\n",
+ " canvas_div.style.width = width + 'px';\n",
+ " canvas_div.style.height = height + 'px';\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " // Disable right mouse context menu.\n",
+ " canvas_div.addEventListener('contextmenu', function (_e) {\n",
+ " event.preventDefault();\n",
+ " return false;\n",
+ " });\n",
+ "\n",
+ " function set_focus() {\n",
+ " canvas.focus();\n",
+ " canvas_div.focus();\n",
+ " }\n",
+ "\n",
+ " window.setTimeout(set_focus, 100);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._init_toolbar = function () {\n",
+ " var fig = this;\n",
+ "\n",
+ " var toolbar = document.createElement('div');\n",
+ " toolbar.classList = 'mpl-toolbar';\n",
+ " this.root.appendChild(toolbar);\n",
+ "\n",
+ " function on_click_closure(name) {\n",
+ " return function (_event) {\n",
+ " return fig.toolbar_button_onclick(name);\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " function on_mouseover_closure(tooltip) {\n",
+ " return function (event) {\n",
+ " if (!event.currentTarget.disabled) {\n",
+ " return fig.toolbar_button_onmouseover(tooltip);\n",
+ " }\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " fig.buttons = {};\n",
+ " var buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'mpl-button-group';\n",
+ " for (var toolbar_ind in mpl.toolbar_items) {\n",
+ " var name = mpl.toolbar_items[toolbar_ind][0];\n",
+ " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+ " var image = mpl.toolbar_items[toolbar_ind][2];\n",
+ " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+ "\n",
+ " if (!name) {\n",
+ " /* Instead of a spacer, we start a new button group. */\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ " buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'mpl-button-group';\n",
+ " continue;\n",
+ " }\n",
+ "\n",
+ " var button = (fig.buttons[name] = document.createElement('button'));\n",
+ " button.classList = 'mpl-widget';\n",
+ " button.setAttribute('role', 'button');\n",
+ " button.setAttribute('aria-disabled', 'false');\n",
+ " button.addEventListener('click', on_click_closure(method_name));\n",
+ " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
+ "\n",
+ " var icon_img = document.createElement('img');\n",
+ " icon_img.src = '_images/' + image + '.png';\n",
+ " icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
+ " icon_img.alt = tooltip;\n",
+ " button.appendChild(icon_img);\n",
+ "\n",
+ " buttonGroup.appendChild(button);\n",
+ " }\n",
+ "\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ "\n",
+ " var fmt_picker = document.createElement('select');\n",
+ " fmt_picker.classList = 'mpl-widget';\n",
+ " toolbar.appendChild(fmt_picker);\n",
+ " this.format_dropdown = fmt_picker;\n",
+ "\n",
+ " for (var ind in mpl.extensions) {\n",
+ " var fmt = mpl.extensions[ind];\n",
+ " var option = document.createElement('option');\n",
+ " option.selected = fmt === mpl.default_extension;\n",
+ " option.innerHTML = fmt;\n",
+ " fmt_picker.appendChild(option);\n",
+ " }\n",
+ "\n",
+ " var status_bar = document.createElement('span');\n",
+ " status_bar.classList = 'mpl-message';\n",
+ " toolbar.appendChild(status_bar);\n",
+ " this.message = status_bar;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
+ " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+ " // which will in turn request a refresh of the image.\n",
+ " this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.send_message = function (type, properties) {\n",
+ " properties['type'] = type;\n",
+ " properties['figure_id'] = this.id;\n",
+ " this.ws.send(JSON.stringify(properties));\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.send_draw_message = function () {\n",
+ " if (!this.waiting) {\n",
+ " this.waiting = true;\n",
+ " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
+ " var format_dropdown = fig.format_dropdown;\n",
+ " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+ " fig.ondownload(fig, format);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
+ " var size = msg['size'];\n",
+ " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
+ " fig._resize_canvas(size[0], size[1], msg['forward']);\n",
+ " fig.send_message('refresh', {});\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
+ " var x0 = msg['x0'] / fig.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
+ " var x1 = msg['x1'] / fig.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
+ " x0 = Math.floor(x0) + 0.5;\n",
+ " y0 = Math.floor(y0) + 0.5;\n",
+ " x1 = Math.floor(x1) + 0.5;\n",
+ " y1 = Math.floor(y1) + 0.5;\n",
+ " var min_x = Math.min(x0, x1);\n",
+ " var min_y = Math.min(y0, y1);\n",
+ " var width = Math.abs(x1 - x0);\n",
+ " var height = Math.abs(y1 - y0);\n",
+ "\n",
+ " fig.rubberband_context.clearRect(\n",
+ " 0,\n",
+ " 0,\n",
+ " fig.canvas.width / fig.ratio,\n",
+ " fig.canvas.height / fig.ratio\n",
+ " );\n",
+ "\n",
+ " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
+ " fig.canvas_div.style.cursor = msg['cursor'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
+ " for (var key in msg) {\n",
+ " if (!(key in fig.buttons)) {\n",
+ " continue;\n",
+ " }\n",
+ " fig.buttons[key].disabled = !msg[key];\n",
+ " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
+ " if (msg['mode'] === 'PAN') {\n",
+ " fig.buttons['Pan'].classList.add('active');\n",
+ " fig.buttons['Zoom'].classList.remove('active');\n",
+ " } else if (msg['mode'] === 'ZOOM') {\n",
+ " fig.buttons['Pan'].classList.remove('active');\n",
+ " fig.buttons['Zoom'].classList.add('active');\n",
+ " } else {\n",
+ " fig.buttons['Pan'].classList.remove('active');\n",
+ " fig.buttons['Zoom'].classList.remove('active');\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.updated_canvas_event = function () {\n",
+ " // Called whenever the canvas gets updated.\n",
+ " this.send_message('ack', {});\n",
+ "};\n",
+ "\n",
+ "// A function to construct a web socket function for onmessage handling.\n",
+ "// Called in the figure constructor.\n",
+ "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
+ " return function socket_on_message(evt) {\n",
+ " if (evt.data instanceof Blob) {\n",
+ " var img = evt.data;\n",
+ " if (img.type !== 'image/png') {\n",
+ " /* FIXME: We get \"Resource interpreted as Image but\n",
+ " * transferred with MIME type text/plain:\" errors on\n",
+ " * Chrome. But how to set the MIME type? It doesn't seem\n",
+ " * to be part of the websocket stream */\n",
+ " img.type = 'image/png';\n",
+ " }\n",
+ "\n",
+ " /* Free the memory for the previous frames */\n",
+ " if (fig.imageObj.src) {\n",
+ " (window.URL || window.webkitURL).revokeObjectURL(\n",
+ " fig.imageObj.src\n",
+ " );\n",
+ " }\n",
+ "\n",
+ " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+ " img\n",
+ " );\n",
+ " fig.updated_canvas_event();\n",
+ " fig.waiting = false;\n",
+ " return;\n",
+ " } else if (\n",
+ " typeof evt.data === 'string' &&\n",
+ " evt.data.slice(0, 21) === 'data:image/png;base64'\n",
+ " ) {\n",
+ " fig.imageObj.src = evt.data;\n",
+ " fig.updated_canvas_event();\n",
+ " fig.waiting = false;\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " var msg = JSON.parse(evt.data);\n",
+ " var msg_type = msg['type'];\n",
+ "\n",
+ " // Call the \"handle_{type}\" callback, which takes\n",
+ " // the figure and JSON message as its only arguments.\n",
+ " try {\n",
+ " var callback = fig['handle_' + msg_type];\n",
+ " } catch (e) {\n",
+ " console.log(\n",
+ " \"No handler for the '\" + msg_type + \"' message type: \",\n",
+ " msg\n",
+ " );\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " if (callback) {\n",
+ " try {\n",
+ " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+ " callback(fig, msg);\n",
+ " } catch (e) {\n",
+ " console.log(\n",
+ " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
+ " e,\n",
+ " e.stack,\n",
+ " msg\n",
+ " );\n",
+ " }\n",
+ " }\n",
+ " };\n",
+ "};\n",
+ "\n",
+ "\n",
+ "/*\n",
+ " * return a copy of an object with only non-object keys\n",
+ " * we need this to avoid circular references\n",
+ " * https://stackoverflow.com/a/24161582/3208463\n",
+ " */\n",
+ "function simpleKeys(original) {\n",
+ " return Object.keys(original).reduce(function (obj, key) {\n",
+ " if (typeof original[key] !== 'object') {\n",
+ " obj[key] = original[key];\n",
+ " }\n",
+ " return obj;\n",
+ " }, {});\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.mouse_event = function (event, name) {\n",
+ " if (name === 'button_press') {\n",
+ " this.canvas.focus();\n",
+ " this.canvas_div.focus();\n",
+ " }\n",
+ "\n",
+ " // from https://stackoverflow.com/q/1114465\n",
+ " var boundingRect = this.canvas.getBoundingClientRect();\n",
+ " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
+ " var y = (event.clientY - boundingRect.top) * this.ratio;\n",
+ "\n",
+ " this.send_message(name, {\n",
+ " x: x,\n",
+ " y: y,\n",
+ " button: event.button,\n",
+ " step: event.step,\n",
+ " guiEvent: simpleKeys(event),\n",
+ " });\n",
+ "\n",
+ " return false;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.key_event = function (event, name) {\n",
+ " // Prevent repeat events\n",
+ " if (name === 'key_press') {\n",
+ " if (event.key === this._key) {\n",
+ " return;\n",
+ " } else {\n",
+ " this._key = event.key;\n",
+ " }\n",
+ " }\n",
+ " if (name === 'key_release') {\n",
+ " this._key = null;\n",
+ " }\n",
+ "\n",
+ " var value = '';\n",
+ " if (event.ctrlKey && event.key !== 'Control') {\n",
+ " value += 'ctrl+';\n",
+ " }\n",
+ " else if (event.altKey && event.key !== 'Alt') {\n",
+ " value += 'alt+';\n",
+ " }\n",
+ " else if (event.shiftKey && event.key !== 'Shift') {\n",
+ " value += 'shift+';\n",
+ " }\n",
+ "\n",
+ " value += 'k' + event.key;\n",
+ "\n",
+ " this._key_event_extra(event, name);\n",
+ "\n",
+ " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
+ " return false;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
+ " if (name === 'download') {\n",
+ " this.handle_save(this, null);\n",
+ " } else {\n",
+ " this.send_message('toolbar_button', { name: name });\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "\n",
+ "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
+ "// prettier-ignore\n",
+ "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
+ "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\n",
+ "\n",
+ "mpl.default_extension = \"png\";/* global mpl */\n",
+ "\n",
+ "var comm_websocket_adapter = function (comm) {\n",
+ " // Create a \"websocket\"-like object which calls the given IPython comm\n",
+ " // object with the appropriate methods. Currently this is a non binary\n",
+ " // socket, so there is still some room for performance tuning.\n",
+ " var ws = {};\n",
+ "\n",
+ " ws.binaryType = comm.kernel.ws.binaryType;\n",
+ " ws.readyState = comm.kernel.ws.readyState;\n",
+ " function updateReadyState(_event) {\n",
+ " if (comm.kernel.ws) {\n",
+ " ws.readyState = comm.kernel.ws.readyState;\n",
+ " } else {\n",
+ " ws.readyState = 3; // Closed state.\n",
+ " }\n",
+ " }\n",
+ " comm.kernel.ws.addEventListener('open', updateReadyState);\n",
+ " comm.kernel.ws.addEventListener('close', updateReadyState);\n",
+ " comm.kernel.ws.addEventListener('error', updateReadyState);\n",
+ "\n",
+ " ws.close = function () {\n",
+ " comm.close();\n",
+ " };\n",
+ " ws.send = function (m) {\n",
+ " //console.log('sending', m);\n",
+ " comm.send(m);\n",
+ " };\n",
+ " // Register the callback with on_msg.\n",
+ " comm.on_msg(function (msg) {\n",
+ " //console.log('receiving', msg['content']['data'], msg);\n",
+ " var data = msg['content']['data'];\n",
+ " if (data['blob'] !== undefined) {\n",
+ " data = {\n",
+ " data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
+ " };\n",
+ " }\n",
+ " // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
+ " ws.onmessage(data);\n",
+ " });\n",
+ " return ws;\n",
+ "};\n",
+ "\n",
+ "mpl.mpl_figure_comm = function (comm, msg) {\n",
+ " // This is the function which gets called when the mpl process\n",
+ " // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+ "\n",
+ " var id = msg.content.data.id;\n",
+ " // Get hold of the div created by the display call when the Comm\n",
+ " // socket was opened in Python.\n",
+ " var element = document.getElementById(id);\n",
+ " var ws_proxy = comm_websocket_adapter(comm);\n",
+ "\n",
+ " function ondownload(figure, _format) {\n",
+ " window.open(figure.canvas.toDataURL());\n",
+ " }\n",
+ "\n",
+ " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
+ "\n",
+ " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+ " // web socket which is closed, not our websocket->open comm proxy.\n",
+ " ws_proxy.onopen();\n",
+ "\n",
+ " fig.parent_element = element;\n",
+ " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+ " if (!fig.cell_info) {\n",
+ " console.error('Failed to find cell for figure', id, fig);\n",
+ " return;\n",
+ " }\n",
+ " fig.cell_info[0].output_area.element.on(\n",
+ " 'cleared',\n",
+ " { fig: fig },\n",
+ " fig._remove_fig_handler\n",
+ " );\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
+ " var width = fig.canvas.width / fig.ratio;\n",
+ " fig.cell_info[0].output_area.element.off(\n",
+ " 'cleared',\n",
+ " fig._remove_fig_handler\n",
+ " );\n",
+ " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
+ "\n",
+ " // Update the output cell to use the data from the current canvas.\n",
+ " fig.push_to_output();\n",
+ " var dataURL = fig.canvas.toDataURL();\n",
+ " // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+ " // the notebook keyboard shortcuts fail.\n",
+ " IPython.keyboard_manager.enable();\n",
+ " fig.parent_element.innerHTML =\n",
+ " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ " fig.close_ws(fig, msg);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width / this.ratio;\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] =\n",
+ " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.updated_canvas_event = function () {\n",
+ " // Tell IPython that the notebook contents must change.\n",
+ " IPython.notebook.set_dirty(true);\n",
+ " this.send_message('ack', {});\n",
+ " var fig = this;\n",
+ " // Wait a second, then push the new image to the DOM so\n",
+ " // that it is saved nicely (might be nice to debounce this).\n",
+ " setTimeout(function () {\n",
+ " fig.push_to_output();\n",
+ " }, 1000);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._init_toolbar = function () {\n",
+ " var fig = this;\n",
+ "\n",
+ " var toolbar = document.createElement('div');\n",
+ " toolbar.classList = 'btn-toolbar';\n",
+ " this.root.appendChild(toolbar);\n",
+ "\n",
+ " function on_click_closure(name) {\n",
+ " return function (_event) {\n",
+ " return fig.toolbar_button_onclick(name);\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " function on_mouseover_closure(tooltip) {\n",
+ " return function (event) {\n",
+ " if (!event.currentTarget.disabled) {\n",
+ " return fig.toolbar_button_onmouseover(tooltip);\n",
+ " }\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " fig.buttons = {};\n",
+ " var buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'btn-group';\n",
+ " var button;\n",
+ " for (var toolbar_ind in mpl.toolbar_items) {\n",
+ " var name = mpl.toolbar_items[toolbar_ind][0];\n",
+ " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+ " var image = mpl.toolbar_items[toolbar_ind][2];\n",
+ " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+ "\n",
+ " if (!name) {\n",
+ " /* Instead of a spacer, we start a new button group. */\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ " buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'btn-group';\n",
+ " continue;\n",
+ " }\n",
+ "\n",
+ " button = fig.buttons[name] = document.createElement('button');\n",
+ " button.classList = 'btn btn-default';\n",
+ " button.href = '#';\n",
+ " button.title = name;\n",
+ " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
+ " button.addEventListener('click', on_click_closure(method_name));\n",
+ " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
+ " buttonGroup.appendChild(button);\n",
+ " }\n",
+ "\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ "\n",
+ " // Add the status bar.\n",
+ " var status_bar = document.createElement('span');\n",
+ " status_bar.classList = 'mpl-message pull-right';\n",
+ " toolbar.appendChild(status_bar);\n",
+ " this.message = status_bar;\n",
+ "\n",
+ " // Add the close button to the window.\n",
+ " var buttongrp = document.createElement('div');\n",
+ " buttongrp.classList = 'btn-group inline pull-right';\n",
+ " button = document.createElement('button');\n",
+ " button.classList = 'btn btn-mini btn-primary';\n",
+ " button.href = '#';\n",
+ " button.title = 'Stop Interaction';\n",
+ " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
+ " button.addEventListener('click', function (_evt) {\n",
+ " fig.handle_close(fig, {});\n",
+ " });\n",
+ " button.addEventListener(\n",
+ " 'mouseover',\n",
+ " on_mouseover_closure('Stop Interaction')\n",
+ " );\n",
+ " buttongrp.appendChild(button);\n",
+ " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
+ " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
+ " var fig = event.data.fig;\n",
+ " if (event.target !== this) {\n",
+ " // Ignore bubbled events from children.\n",
+ " return;\n",
+ " }\n",
+ " fig.close_ws(fig, {});\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function (el) {\n",
+ " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
+ " // this is important to make the div 'focusable\n",
+ " el.setAttribute('tabindex', 0);\n",
+ " // reach out to IPython and tell the keyboard manager to turn it's self\n",
+ " // off when our div gets focus\n",
+ "\n",
+ " // location in version 3\n",
+ " if (IPython.notebook.keyboard_manager) {\n",
+ " IPython.notebook.keyboard_manager.register_events(el);\n",
+ " } else {\n",
+ " // location in version 2\n",
+ " IPython.keyboard_manager.register_events(el);\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
+ " // Check for shift+enter\n",
+ " if (event.shiftKey && event.which === 13) {\n",
+ " this.canvas_div.blur();\n",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "};\n",
+ "\n",
+ "mpl.find_output_cell = function (html_output) {\n",
+ " // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+ " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+ " // IPython event is triggered only after the cells have been serialised, which for\n",
+ " // our purposes (turning an active figure into a static one), is too late.\n",
+ " var cells = IPython.notebook.get_cells();\n",
+ " var ncells = cells.length;\n",
+ " for (var i = 0; i < ncells; i++) {\n",
+ " var cell = cells[i];\n",
+ " if (cell.cell_type === 'code') {\n",
+ " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
+ " var data = cell.output_area.outputs[j];\n",
+ " if (data.data) {\n",
+ " // IPython >= 3 moved mimebundle to data attribute of output\n",
+ " data = data.data;\n",
+ " }\n",
+ " if (data['text/html'] === html_output) {\n",
+ " return [cell, data, j];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "// Register the function which deals with the matplotlib target/channel.\n",
+ "// The kernel may be null if the page has been refreshed.\n",
+ "if (IPython.notebook.kernel !== null) {\n",
+ " IPython.notebook.kernel.comm_manager.register_target(\n",
+ " 'matplotlib',\n",
+ " mpl.mpl_figure_comm\n",
+ " );\n",
+ "}\n"
+ ],
+ "text/plain": [
+ "<IPython.core.display.Javascript object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3xb1dnGX++9Hccje5I9yCSEvQuEHUYYYW/KKi2llFJa2lJaKGWVjz3KhrI3IYRNEpIQMsjeiZ3E27Kt8b3Pka9jOx6yLNuS7nP6U23L957xPzfo8btOhEebsJEACZAACZAACZAACdiGQAQFoG32mgslARIgARIgARIgAUOAApAPAgmQAAmQAAmQAAnYjAAFoM02nMslARIgARIgARIgAQpAPgMkQAIkQAIkQAIkYDMCFIA223AulwRIgARIgARIgAQoAPkMkAAJkAAJkAAJkIDNCFAA2mzDuVwSIAESIAESIAESoADkM0ACJEACJEACJEACNiNAAWizDedySYAESIAESIAESIACkM8ACZAACZAACZAACdiMAAWgzTacyyUBEiABEiABEiABCkA+AyRAAiRAAiRAAiRgMwIUgDbbcC6XBEiABEiABEiABCgA+QyQAAmQAAmQAAmQgM0IUADabMO5XBIgARIgARIgARKgAOQzQAIkQAIkQAIkQAI2I0ABaLMN53JJgARIgARIgARIgAKQzwAJkAAJkAAJkAAJ2IwABaDNNpzLJQESIAESIAESIAEKQD4DJEACJEACJEACJGAzAhSANttwLpcESIAESIAESIAEKAD5DJAACZAACZAACZCAzQhQANpsw7lcEiABEiABEiABEqAA5DNAAiRAAiRAAiRAAjYjQAFosw3nckmABEiABEiABEiAApDPAAmQAAmQAAmQAAnYjAAFoM02nMslARIgARIgARIgAQpAPgMkQAIkQAIkQAIkYDMCFIA223AulwRIgARIgARIgAQoAPkMkAAJkAAJkAAJkIDNCFAA2mzDuVwSIAESIAESIAESoADkM0ACJEACJEACJEACNiNAAWizDedySYAESIAESIAESIACkM8ACZAACZAACZAACdiMAAWgzTacyyUBEiABEiABEiABCkA+AyRAAiRAAiRAAiRgMwIUgDbbcC6XBEiABEiABEiABCgA+QyQAAmQAAmQAAmQgM0IUADabMO5XBIgARIgARIgARKgAOQzQAIkQAIkQAIkQAI2I0ABaLMN53JJgARIgARIgARIgAKQzwAJkAAJkAAJkAAJ2IwABaDNNpzLJQESIAESIAESIAEKQD4DJEACJEACJEACJGAzAhSANttwLpcESIAESIAESIAEKAD5DJAACZAACZAACZCAzQhQANpsw7lcEiABEiABEiABEqAA5DNAAiRAAiRAAiRAAjYjQAFosw3nckmABEiABEiABEiAApDPAAmQAAmQAAmQAAnYjAAFoM02nMslARIgARIgARIgAQpAPgMkQAIkQAIkQAIkYDMCFIA223AulwRIgARIgARIgAQoAPkMkAAJkAAJkAAJkIDNCFAA2mzDuVwSIAESIAESIAESoADkM0ACJEACJEACJEACNiNAAWizDedySYAESIAESIAESIACkM8ACZAACZAACZAACdiMAAWgzTacyyUBEiABEiABEiABCkA+AyRAAiRAAiRAAiRgMwIUgDbbcC6XBEiABEiABEiABCgA+QyQAAmQAAmQAAmQgM0IUADabMO5XBIgARIgARIgARKgAOQzQAIkQAIkQAIkQAI2I0ABaLMN53JJgARIgARIgARIgAKQzwAJkAAJkAAJkAAJ2IwABaDNNpzLJQESIAESIAESIAEKQD4DJEACJEACJEACJGAzAhSANttwLpcESIAESIAESIAEKAD5DJAACZAACZAACZCAzQhQANpsw7lcEiABEiABEiABEqAA5DNAAiRAAiRAAiRAAjYjQAFosw3nckmABEiABEiABEiAApDPAAmQAAmQAAmQAAnYjAAFoM02nMslARIgARIgARIgAQpAPgMkQAIkQAIkQAIkYDMCFIA223AulwRIgARIgARIgAQoAPkMkAAJkAAJGAJz5syRgw8+WHbv3i3p6emkQgIkEMYEKADDeHO5NBIgARKwCBx00EHy2WefmR8jIiKkR48ecsABB8jf//536du3r3m/pqZGdu3aJT179jTXPPHEE/LLX/5SiouLG4Hs16+feR+vYG7nnXeemfvrr78ezNPk3EigWwhQAHYLdg5KAiRAAl1LAAJwyJAhcvvtt4vH45H169cbARcTEyOff/55s5PpbAEIwRkbG9tobJfLZcRnZGRkhwFRAHYYITsIYwIUgGG8uVwaCZCAfQhUVFTIZZddJq+++qqkpKTIDTfcIG+++aaMHTtW7rnnHoEAtL63qDz99NNy6aWXCu5Fa+gC/uGHH4w7uGH7/e9/b66xLInW7yAo0V555RW59dZbZdWqVZKXlydXXXWVXH/99fVdwHJ44YUXmt+/9tpr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r2Plyh3HyeLS5LBcIxcVngRW3nG0xGpNQDYSCBYCFIDBshOcR2AIFK0S+fe+gemLvQQtAU9Monybe5Zcvn5/2VkTE7Tz5MRIwCLw1W8Okby0BAIhgaAhQAEYNFvR8YnMmTNHDj649TiTxx9/XM4777yODxagHiIiIuS1116TE044ITA9rp0r8uRxgemLvQQ9AVdynryQep78du1I8Xgign6+nKB9Cbx11f4ysiDNvgC48qAjQAEYdFvi/4Rqampk165d9R1cc801UlpaKhB9VktLS5OEBN/+CvV4POJyuSQ6unEGJsaJjY31f6IN7gy4AFz0gshrFwdkbuwkdAhUZo+WO91ny9NbCkJn0pyprQg8df4kOWBID1utmYsNbgIUgMG9P83Orl+/fvLLX/7SvKw2duxYY0W77bbb6t+Dpa+4uFhef/118151dbXceOON8vzzzxthOGHCBPnnP/8pEydONL+3LIjvvfee/Pa3v5XFixfL+++/L3/4wx9k5MiRRvQ99dRTMmLECPnss8/kp59+khtuuEHmzp0rSUlJcsQRR5j+srO9RXwPOuggGT16tMTHx8v//d//mfsvvfTS+jliHevXr6+fb9++fWXdunUd25Ev/iXy4e861gfvDlkCWwqOkquLTpTvS1JCdg2ceHgSuGem/jd6HP9ACc/dDc1VUQCG4L75KwBhEXz55ZeNGIPY+tvf/iZvvPGGrFq1SjIzM+sFIETb3//+dxkwYICkp6fLySefLPPnz5fLLrtMLrjgAnW1eQSWRFx30UUXyTnnnCNVVVVy0003idPplE8++aReAC5cuFCuu+46OfPMM+Wrr74y7meIysMPP1wKCwslJyfHWCiPOuooiYqKkh49OvgX8id36Ckgd4XgrnLKgSLgiYqThflnyKUbDpYd1YwPDBRX9tMxAr87drhcsH//jnXCu0kggAQoAAMIs6u68kcAVlRUSEZGhjzxxBNGjKHV1taK1Rcsg5YFEBbDGTO0mHJdgyWvpKREIOasduutt8o333xjxJzVNm3aJL1795YVK1bIkCFDjAUQLuTPP/+8/ppJkybJIYccIn/5y1/MewF3Ab97k8g3D3XVVnCcICbgTuwhr2ecJzeuGSMuD7Mvg3irbDG1Kw4eKDceuY8t1spFhgYBCsDQ2KdGs/RHAMKdO2bMGONihfXPaieeeKIRho89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AT0JiADUk6bMJQSEgBAQAkJACAgBAxAQAWiAQxIThYAQEAJCQAgIASGgJwERgHrSlLmEgBAQAkJACAgBIWAAAiIADXBIYqIQEAJCQAgIASEgBPQkIAJQT5oylxAQAkJACAgBISAEDEBABKABDklMFAJCQAgIASEgBISAngREAOpJU+YSAkJACAgBISAEhIABCIgANMAhiYlCQAgIASEgBISAENCTgAhAPWnKXEJACAgBISAEhIAQMAABEYAGOCQxUQgIASEgBISAEBACehIQAagnTZlLCAgBISAEhIAQEAIGICAC0ACHJCYKASEgBISAEBACQkBPAiIA9aQpcwkBISAEhIAQEAJCwAAERAAa4JDERCEgBISAEBACQkAI6ElABKCeNGUuISAEhIAQEAJCQAgYgIAIQAMckpgoBISAEBACQkAICAE9CYgA1JOmzCUEhIAQEAJCQAgIAQMQEAFogEMSE4WAEBACQkAICAEhoCcBEYB60pS5hIAQEAJCQAgIASFgAAIiAA1wSGKiEBACQkAICAEhIAT0JCACUE+aMpcQEAJCQAgIASEgBAxAQASgAQ5JTBQCQkAICAEhIASEgJ4ERADqSVPmEgJCQAgIASEgBISAAQiIADTAIYmJQkAICAEhIASEgBDQk4AIQD1pylxCQAgIASEgBISAEDAAARGABjgkMVEICAEhIASEgBAQAnoSEAGoJ02ZSwgIASEgBISAEBACBiAgAtAAhyQmCgEhIASEgBAQAkJATwIiAPWkKXMJASEgBISAEBACQsAABEQAGuCQxEQhIASEgBAQAkJACOhJQASgnjRlLiEgBISAEBACQkAIGICACEADHJKYKASEgBAQAkJACAgBPQmIANSTpswlBISAEBACQkAICAEDEBABaIBDEhOFgBAQAkJACAgBIaAnARGAetKUuYSAEBACQkAICAEhYAACIgANcEhiohAQAkJACAgBISAE9CQgAlBPmjKXEBACQkAICAEhIAQMQEAEoAEOSUwUAkJACAgBISAEhICeBEQA6klT5hICQkAICAEhIASEgAEIiAA0wCGJiUJACAgBISAEhIAQ0JOACEA9acpcQkAICAEhIASEgBAwAAERgAY4JDFRCAgBISAEhIAQEAJ6EhABqCdNmUsICAEhIASEgBAQAgYgIALQAIckJgoBISAEhIAQEAJCQE8CIgD1pClzCQEhIASEgBAQAkLAAAREABrgkMREISAEhIAQEAJCQAjoSUAEoJ40ZS4hIASEgBAQAkJACBiAgAhAAxySmCgEhIAQEAJCQAgIAT0JiADUk6bMJQSEgBAQAkJACAgBAxAQAWiAQxIThYAQEAJCQAgIASGgJwERgHrSlLmEgBAQAkJACAgBIWAAAiIADXBIYqIQEAJCQAgIASEgBPQkIAJQT5oylxAQAkJACAgBISAEDEBABKABDklMFAJCQAgIASEgBISAngREAOpJU+YSAkJACAgBISAEhIABCIgANMAhiYlCQAgIASEgBISAENCTgAhAPWnKXEJACAgBISAEhIAQMAABEYAGOCQxUQgIASEgBISAEBACehIQAagnTZlLCAgBISAEhIAQEAIGICAC0ACHJCYKASEgBISAEBACQkBPAiIA9aQpcwkBISAEhIAQEAJCwAAERAAa4JDERCEgBISAEBACQkAI6Eng/wGE6BhOXm9FcwAAAABJRU5ErkJggg==\" width=\"640\">"
+ ],
+ "text/plain": [
+ "<IPython.core.display.HTML object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "s = monotonic()\n",
+ "def uas(normalize=True):\n",
+ " odjemalci = {}\n",
+ " for sha1, torrent in torrents.items():\n",
+ " odjemalec = torrent.dict.get(b'source').get(b'v')\n",
+ " if normalize and odjemalec is not None:\n",
+ " if b'/' in odjemalec:\n",
+ " odjemalec = odjemalec.split(b'/')[0]\n",
+ " elif b' (' in odjemalec:\n",
+ " odjemalec = odjemalec.split(b' (')[0]\n",
+ " else:\n",
+ " odjemalec = odjemalec.split(b' ')[0]\n",
+ " odjemalec = odjemalec.replace(b'\\xc2\\xb5', b'\\xce\\xbc').decode()\n",
+ " if odjemalec not in odjemalci.keys():\n",
+ " odjemalci[odjemalec] = 1\n",
+ " else:\n",
+ " odjemalci[odjemalec] += 1\n",
+ " odjemalci = [(v, k) for k, v in odjemalci.items()]\n",
+ " sorted(odjemalci, reverse=True)\n",
+ " return odjemalci\n",
+ "print(len(v), \"@\", monotonic()-s, \"s\", files)\n",
+ "odjemalci = sorted(uas(True), reverse=True)\n",
+ "from matplotlib import pyplot\n",
+ "%matplotlib notebook\n",
+ "fig, axes = pyplot.subplots()\n",
+ "axes.pie([sights for sights, name in odjemalci], labels=[name for sights, name in odjemalci])\n",
+ "fig.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 143,
+ "id": "52de34d6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "31190 @ 0.13778187101706862 s 36\n"
+ ]
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "/* Put everything inside the global mpl namespace */\n",
+ "/* global mpl */\n",
+ "window.mpl = {};\n",
+ "\n",
+ "mpl.get_websocket_type = function () {\n",
+ " if (typeof WebSocket !== 'undefined') {\n",
+ " return WebSocket;\n",
+ " } else if (typeof MozWebSocket !== 'undefined') {\n",
+ " return MozWebSocket;\n",
+ " } else {\n",
+ " alert(\n",
+ " 'Your browser does not have WebSocket support. ' +\n",
+ " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+ " 'Firefox 4 and 5 are also supported but you ' +\n",
+ " 'have to enable WebSockets in about:config.'\n",
+ " );\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
+ " this.id = figure_id;\n",
+ "\n",
+ " this.ws = websocket;\n",
+ "\n",
+ " this.supports_binary = this.ws.binaryType !== undefined;\n",
+ "\n",
+ " if (!this.supports_binary) {\n",
+ " var warnings = document.getElementById('mpl-warnings');\n",
+ " if (warnings) {\n",
+ " warnings.style.display = 'block';\n",
+ " warnings.textContent =\n",
+ " 'This browser does not support binary websocket messages. ' +\n",
+ " 'Performance may be slow.';\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " this.imageObj = new Image();\n",
+ "\n",
+ " this.context = undefined;\n",
+ " this.message = undefined;\n",
+ " this.canvas = undefined;\n",
+ " this.rubberband_canvas = undefined;\n",
+ " this.rubberband_context = undefined;\n",
+ " this.format_dropdown = undefined;\n",
+ "\n",
+ " this.image_mode = 'full';\n",
+ "\n",
+ " this.root = document.createElement('div');\n",
+ " this.root.setAttribute('style', 'display: inline-block');\n",
+ " this._root_extra_style(this.root);\n",
+ "\n",
+ " parent_element.appendChild(this.root);\n",
+ "\n",
+ " this._init_header(this);\n",
+ " this._init_canvas(this);\n",
+ " this._init_toolbar(this);\n",
+ "\n",
+ " var fig = this;\n",
+ "\n",
+ " this.waiting = false;\n",
+ "\n",
+ " this.ws.onopen = function () {\n",
+ " fig.send_message('supports_binary', { value: fig.supports_binary });\n",
+ " fig.send_message('send_image_mode', {});\n",
+ " if (fig.ratio !== 1) {\n",
+ " fig.send_message('set_device_pixel_ratio', {\n",
+ " device_pixel_ratio: fig.ratio,\n",
+ " });\n",
+ " }\n",
+ " fig.send_message('refresh', {});\n",
+ " };\n",
+ "\n",
+ " this.imageObj.onload = function () {\n",
+ " if (fig.image_mode === 'full') {\n",
+ " // Full images could contain transparency (where diff images\n",
+ " // almost always do), so we need to clear the canvas so that\n",
+ " // there is no ghosting.\n",
+ " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+ " }\n",
+ " fig.context.drawImage(fig.imageObj, 0, 0);\n",
+ " };\n",
+ "\n",
+ " this.imageObj.onunload = function () {\n",
+ " fig.ws.close();\n",
+ " };\n",
+ "\n",
+ " this.ws.onmessage = this._make_on_message_function(this);\n",
+ "\n",
+ " this.ondownload = ondownload;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._init_header = function () {\n",
+ " var titlebar = document.createElement('div');\n",
+ " titlebar.classList =\n",
+ " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
+ " var titletext = document.createElement('div');\n",
+ " titletext.classList = 'ui-dialog-title';\n",
+ " titletext.setAttribute(\n",
+ " 'style',\n",
+ " 'width: 100%; text-align: center; padding: 3px;'\n",
+ " );\n",
+ " titlebar.appendChild(titletext);\n",
+ " this.root.appendChild(titlebar);\n",
+ " this.header = titletext;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
+ "\n",
+ "mpl.figure.prototype._init_canvas = function () {\n",
+ " var fig = this;\n",
+ "\n",
+ " var canvas_div = (this.canvas_div = document.createElement('div'));\n",
+ " canvas_div.setAttribute('tabindex', '0');\n",
+ " canvas_div.setAttribute(\n",
+ " 'style',\n",
+ " 'border: 1px solid #ddd;' +\n",
+ " 'box-sizing: content-box;' +\n",
+ " 'clear: both;' +\n",
+ " 'min-height: 1px;' +\n",
+ " 'min-width: 1px;' +\n",
+ " 'outline: 0;' +\n",
+ " 'overflow: hidden;' +\n",
+ " 'position: relative;' +\n",
+ " 'resize: both;' +\n",
+ " 'z-index: 2;'\n",
+ " );\n",
+ "\n",
+ " function on_keyboard_event_closure(name) {\n",
+ " return function (event) {\n",
+ " return fig.key_event(event, name);\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " canvas_div.addEventListener(\n",
+ " 'keydown',\n",
+ " on_keyboard_event_closure('key_press')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'keyup',\n",
+ " on_keyboard_event_closure('key_release')\n",
+ " );\n",
+ "\n",
+ " this._canvas_extra_style(canvas_div);\n",
+ " this.root.appendChild(canvas_div);\n",
+ "\n",
+ " var canvas = (this.canvas = document.createElement('canvas'));\n",
+ " canvas.classList.add('mpl-canvas');\n",
+ " canvas.setAttribute(\n",
+ " 'style',\n",
+ " 'box-sizing: content-box;' +\n",
+ " 'pointer-events: none;' +\n",
+ " 'position: relative;' +\n",
+ " 'z-index: 0;'\n",
+ " );\n",
+ "\n",
+ " this.context = canvas.getContext('2d');\n",
+ "\n",
+ " var backingStore =\n",
+ " this.context.backingStorePixelRatio ||\n",
+ " this.context.webkitBackingStorePixelRatio ||\n",
+ " this.context.mozBackingStorePixelRatio ||\n",
+ " this.context.msBackingStorePixelRatio ||\n",
+ " this.context.oBackingStorePixelRatio ||\n",
+ " this.context.backingStorePixelRatio ||\n",
+ " 1;\n",
+ "\n",
+ " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+ "\n",
+ " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
+ " 'canvas'\n",
+ " ));\n",
+ " rubberband_canvas.setAttribute(\n",
+ " 'style',\n",
+ " 'box-sizing: content-box;' +\n",
+ " 'left: 0;' +\n",
+ " 'pointer-events: none;' +\n",
+ " 'position: absolute;' +\n",
+ " 'top: 0;' +\n",
+ " 'z-index: 1;'\n",
+ " );\n",
+ "\n",
+ " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
+ " if (this.ResizeObserver === undefined) {\n",
+ " if (window.ResizeObserver !== undefined) {\n",
+ " this.ResizeObserver = window.ResizeObserver;\n",
+ " } else {\n",
+ " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
+ " this.ResizeObserver = obs.ResizeObserver;\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
+ " var nentries = entries.length;\n",
+ " for (var i = 0; i < nentries; i++) {\n",
+ " var entry = entries[i];\n",
+ " var width, height;\n",
+ " if (entry.contentBoxSize) {\n",
+ " if (entry.contentBoxSize instanceof Array) {\n",
+ " // Chrome 84 implements new version of spec.\n",
+ " width = entry.contentBoxSize[0].inlineSize;\n",
+ " height = entry.contentBoxSize[0].blockSize;\n",
+ " } else {\n",
+ " // Firefox implements old version of spec.\n",
+ " width = entry.contentBoxSize.inlineSize;\n",
+ " height = entry.contentBoxSize.blockSize;\n",
+ " }\n",
+ " } else {\n",
+ " // Chrome <84 implements even older version of spec.\n",
+ " width = entry.contentRect.width;\n",
+ " height = entry.contentRect.height;\n",
+ " }\n",
+ "\n",
+ " // Keep the size of the canvas and rubber band canvas in sync with\n",
+ " // the canvas container.\n",
+ " if (entry.devicePixelContentBoxSize) {\n",
+ " // Chrome 84 implements new version of spec.\n",
+ " canvas.setAttribute(\n",
+ " 'width',\n",
+ " entry.devicePixelContentBoxSize[0].inlineSize\n",
+ " );\n",
+ " canvas.setAttribute(\n",
+ " 'height',\n",
+ " entry.devicePixelContentBoxSize[0].blockSize\n",
+ " );\n",
+ " } else {\n",
+ " canvas.setAttribute('width', width * fig.ratio);\n",
+ " canvas.setAttribute('height', height * fig.ratio);\n",
+ " }\n",
+ " /* This rescales the canvas back to display pixels, so that it\n",
+ " * appears correct on HiDPI screens. */\n",
+ " canvas.style.width = width + 'px';\n",
+ " canvas.style.height = height + 'px';\n",
+ "\n",
+ " rubberband_canvas.setAttribute('width', width);\n",
+ " rubberband_canvas.setAttribute('height', height);\n",
+ "\n",
+ " // And update the size in Python. We ignore the initial 0/0 size\n",
+ " // that occurs as the element is placed into the DOM, which should\n",
+ " // otherwise not happen due to the minimum size styling.\n",
+ " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
+ " fig.request_resize(width, height);\n",
+ " }\n",
+ " }\n",
+ " });\n",
+ " this.resizeObserverInstance.observe(canvas_div);\n",
+ "\n",
+ " function on_mouse_event_closure(name) {\n",
+ " /* User Agent sniffing is bad, but WebKit is busted:\n",
+ " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
+ " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
+ " * The worst that happens here is that they get an extra browser\n",
+ " * selection when dragging, if this check fails to catch them.\n",
+ " */\n",
+ " var UA = navigator.userAgent;\n",
+ " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
+ " if(isWebKit) {\n",
+ " return function (event) {\n",
+ " /* This prevents the web browser from automatically changing to\n",
+ " * the text insertion cursor when the button is pressed. We\n",
+ " * want to control all of the cursor setting manually through\n",
+ " * the 'cursor' event from matplotlib */\n",
+ " event.preventDefault()\n",
+ " return fig.mouse_event(event, name);\n",
+ " };\n",
+ " } else {\n",
+ " return function (event) {\n",
+ " return fig.mouse_event(event, name);\n",
+ " };\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " canvas_div.addEventListener(\n",
+ " 'mousedown',\n",
+ " on_mouse_event_closure('button_press')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'mouseup',\n",
+ " on_mouse_event_closure('button_release')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'dblclick',\n",
+ " on_mouse_event_closure('dblclick')\n",
+ " );\n",
+ " // Throttle sequential mouse events to 1 every 20ms.\n",
+ " canvas_div.addEventListener(\n",
+ " 'mousemove',\n",
+ " on_mouse_event_closure('motion_notify')\n",
+ " );\n",
+ "\n",
+ " canvas_div.addEventListener(\n",
+ " 'mouseenter',\n",
+ " on_mouse_event_closure('figure_enter')\n",
+ " );\n",
+ " canvas_div.addEventListener(\n",
+ " 'mouseleave',\n",
+ " on_mouse_event_closure('figure_leave')\n",
+ " );\n",
+ "\n",
+ " canvas_div.addEventListener('wheel', function (event) {\n",
+ " if (event.deltaY < 0) {\n",
+ " event.step = 1;\n",
+ " } else {\n",
+ " event.step = -1;\n",
+ " }\n",
+ " on_mouse_event_closure('scroll')(event);\n",
+ " });\n",
+ "\n",
+ " canvas_div.appendChild(canvas);\n",
+ " canvas_div.appendChild(rubberband_canvas);\n",
+ "\n",
+ " this.rubberband_context = rubberband_canvas.getContext('2d');\n",
+ " this.rubberband_context.strokeStyle = '#000000';\n",
+ "\n",
+ " this._resize_canvas = function (width, height, forward) {\n",
+ " if (forward) {\n",
+ " canvas_div.style.width = width + 'px';\n",
+ " canvas_div.style.height = height + 'px';\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " // Disable right mouse context menu.\n",
+ " canvas_div.addEventListener('contextmenu', function (_e) {\n",
+ " event.preventDefault();\n",
+ " return false;\n",
+ " });\n",
+ "\n",
+ " function set_focus() {\n",
+ " canvas.focus();\n",
+ " canvas_div.focus();\n",
+ " }\n",
+ "\n",
+ " window.setTimeout(set_focus, 100);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._init_toolbar = function () {\n",
+ " var fig = this;\n",
+ "\n",
+ " var toolbar = document.createElement('div');\n",
+ " toolbar.classList = 'mpl-toolbar';\n",
+ " this.root.appendChild(toolbar);\n",
+ "\n",
+ " function on_click_closure(name) {\n",
+ " return function (_event) {\n",
+ " return fig.toolbar_button_onclick(name);\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " function on_mouseover_closure(tooltip) {\n",
+ " return function (event) {\n",
+ " if (!event.currentTarget.disabled) {\n",
+ " return fig.toolbar_button_onmouseover(tooltip);\n",
+ " }\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " fig.buttons = {};\n",
+ " var buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'mpl-button-group';\n",
+ " for (var toolbar_ind in mpl.toolbar_items) {\n",
+ " var name = mpl.toolbar_items[toolbar_ind][0];\n",
+ " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+ " var image = mpl.toolbar_items[toolbar_ind][2];\n",
+ " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+ "\n",
+ " if (!name) {\n",
+ " /* Instead of a spacer, we start a new button group. */\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ " buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'mpl-button-group';\n",
+ " continue;\n",
+ " }\n",
+ "\n",
+ " var button = (fig.buttons[name] = document.createElement('button'));\n",
+ " button.classList = 'mpl-widget';\n",
+ " button.setAttribute('role', 'button');\n",
+ " button.setAttribute('aria-disabled', 'false');\n",
+ " button.addEventListener('click', on_click_closure(method_name));\n",
+ " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
+ "\n",
+ " var icon_img = document.createElement('img');\n",
+ " icon_img.src = '_images/' + image + '.png';\n",
+ " icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
+ " icon_img.alt = tooltip;\n",
+ " button.appendChild(icon_img);\n",
+ "\n",
+ " buttonGroup.appendChild(button);\n",
+ " }\n",
+ "\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ "\n",
+ " var fmt_picker = document.createElement('select');\n",
+ " fmt_picker.classList = 'mpl-widget';\n",
+ " toolbar.appendChild(fmt_picker);\n",
+ " this.format_dropdown = fmt_picker;\n",
+ "\n",
+ " for (var ind in mpl.extensions) {\n",
+ " var fmt = mpl.extensions[ind];\n",
+ " var option = document.createElement('option');\n",
+ " option.selected = fmt === mpl.default_extension;\n",
+ " option.innerHTML = fmt;\n",
+ " fmt_picker.appendChild(option);\n",
+ " }\n",
+ "\n",
+ " var status_bar = document.createElement('span');\n",
+ " status_bar.classList = 'mpl-message';\n",
+ " toolbar.appendChild(status_bar);\n",
+ " this.message = status_bar;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
+ " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+ " // which will in turn request a refresh of the image.\n",
+ " this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.send_message = function (type, properties) {\n",
+ " properties['type'] = type;\n",
+ " properties['figure_id'] = this.id;\n",
+ " this.ws.send(JSON.stringify(properties));\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.send_draw_message = function () {\n",
+ " if (!this.waiting) {\n",
+ " this.waiting = true;\n",
+ " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
+ " var format_dropdown = fig.format_dropdown;\n",
+ " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+ " fig.ondownload(fig, format);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
+ " var size = msg['size'];\n",
+ " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
+ " fig._resize_canvas(size[0], size[1], msg['forward']);\n",
+ " fig.send_message('refresh', {});\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
+ " var x0 = msg['x0'] / fig.ratio;\n",
+ " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
+ " var x1 = msg['x1'] / fig.ratio;\n",
+ " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
+ " x0 = Math.floor(x0) + 0.5;\n",
+ " y0 = Math.floor(y0) + 0.5;\n",
+ " x1 = Math.floor(x1) + 0.5;\n",
+ " y1 = Math.floor(y1) + 0.5;\n",
+ " var min_x = Math.min(x0, x1);\n",
+ " var min_y = Math.min(y0, y1);\n",
+ " var width = Math.abs(x1 - x0);\n",
+ " var height = Math.abs(y1 - y0);\n",
+ "\n",
+ " fig.rubberband_context.clearRect(\n",
+ " 0,\n",
+ " 0,\n",
+ " fig.canvas.width / fig.ratio,\n",
+ " fig.canvas.height / fig.ratio\n",
+ " );\n",
+ "\n",
+ " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
+ " // Updates the figure title.\n",
+ " fig.header.textContent = msg['label'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
+ " fig.canvas_div.style.cursor = msg['cursor'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
+ " fig.message.textContent = msg['message'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
+ " // Request the server to send over a new figure.\n",
+ " fig.send_draw_message();\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
+ " fig.image_mode = msg['mode'];\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
+ " for (var key in msg) {\n",
+ " if (!(key in fig.buttons)) {\n",
+ " continue;\n",
+ " }\n",
+ " fig.buttons[key].disabled = !msg[key];\n",
+ " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
+ " if (msg['mode'] === 'PAN') {\n",
+ " fig.buttons['Pan'].classList.add('active');\n",
+ " fig.buttons['Zoom'].classList.remove('active');\n",
+ " } else if (msg['mode'] === 'ZOOM') {\n",
+ " fig.buttons['Pan'].classList.remove('active');\n",
+ " fig.buttons['Zoom'].classList.add('active');\n",
+ " } else {\n",
+ " fig.buttons['Pan'].classList.remove('active');\n",
+ " fig.buttons['Zoom'].classList.remove('active');\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.updated_canvas_event = function () {\n",
+ " // Called whenever the canvas gets updated.\n",
+ " this.send_message('ack', {});\n",
+ "};\n",
+ "\n",
+ "// A function to construct a web socket function for onmessage handling.\n",
+ "// Called in the figure constructor.\n",
+ "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
+ " return function socket_on_message(evt) {\n",
+ " if (evt.data instanceof Blob) {\n",
+ " var img = evt.data;\n",
+ " if (img.type !== 'image/png') {\n",
+ " /* FIXME: We get \"Resource interpreted as Image but\n",
+ " * transferred with MIME type text/plain:\" errors on\n",
+ " * Chrome. But how to set the MIME type? It doesn't seem\n",
+ " * to be part of the websocket stream */\n",
+ " img.type = 'image/png';\n",
+ " }\n",
+ "\n",
+ " /* Free the memory for the previous frames */\n",
+ " if (fig.imageObj.src) {\n",
+ " (window.URL || window.webkitURL).revokeObjectURL(\n",
+ " fig.imageObj.src\n",
+ " );\n",
+ " }\n",
+ "\n",
+ " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+ " img\n",
+ " );\n",
+ " fig.updated_canvas_event();\n",
+ " fig.waiting = false;\n",
+ " return;\n",
+ " } else if (\n",
+ " typeof evt.data === 'string' &&\n",
+ " evt.data.slice(0, 21) === 'data:image/png;base64'\n",
+ " ) {\n",
+ " fig.imageObj.src = evt.data;\n",
+ " fig.updated_canvas_event();\n",
+ " fig.waiting = false;\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " var msg = JSON.parse(evt.data);\n",
+ " var msg_type = msg['type'];\n",
+ "\n",
+ " // Call the \"handle_{type}\" callback, which takes\n",
+ " // the figure and JSON message as its only arguments.\n",
+ " try {\n",
+ " var callback = fig['handle_' + msg_type];\n",
+ " } catch (e) {\n",
+ " console.log(\n",
+ " \"No handler for the '\" + msg_type + \"' message type: \",\n",
+ " msg\n",
+ " );\n",
+ " return;\n",
+ " }\n",
+ "\n",
+ " if (callback) {\n",
+ " try {\n",
+ " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+ " callback(fig, msg);\n",
+ " } catch (e) {\n",
+ " console.log(\n",
+ " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
+ " e,\n",
+ " e.stack,\n",
+ " msg\n",
+ " );\n",
+ " }\n",
+ " }\n",
+ " };\n",
+ "};\n",
+ "\n",
+ "\n",
+ "/*\n",
+ " * return a copy of an object with only non-object keys\n",
+ " * we need this to avoid circular references\n",
+ " * https://stackoverflow.com/a/24161582/3208463\n",
+ " */\n",
+ "function simpleKeys(original) {\n",
+ " return Object.keys(original).reduce(function (obj, key) {\n",
+ " if (typeof original[key] !== 'object') {\n",
+ " obj[key] = original[key];\n",
+ " }\n",
+ " return obj;\n",
+ " }, {});\n",
+ "}\n",
+ "\n",
+ "mpl.figure.prototype.mouse_event = function (event, name) {\n",
+ " if (name === 'button_press') {\n",
+ " this.canvas.focus();\n",
+ " this.canvas_div.focus();\n",
+ " }\n",
+ "\n",
+ " // from https://stackoverflow.com/q/1114465\n",
+ " var boundingRect = this.canvas.getBoundingClientRect();\n",
+ " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
+ " var y = (event.clientY - boundingRect.top) * this.ratio;\n",
+ "\n",
+ " this.send_message(name, {\n",
+ " x: x,\n",
+ " y: y,\n",
+ " button: event.button,\n",
+ " step: event.step,\n",
+ " guiEvent: simpleKeys(event),\n",
+ " });\n",
+ "\n",
+ " return false;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
+ " // Handle any extra behaviour associated with a key event\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.key_event = function (event, name) {\n",
+ " // Prevent repeat events\n",
+ " if (name === 'key_press') {\n",
+ " if (event.key === this._key) {\n",
+ " return;\n",
+ " } else {\n",
+ " this._key = event.key;\n",
+ " }\n",
+ " }\n",
+ " if (name === 'key_release') {\n",
+ " this._key = null;\n",
+ " }\n",
+ "\n",
+ " var value = '';\n",
+ " if (event.ctrlKey && event.key !== 'Control') {\n",
+ " value += 'ctrl+';\n",
+ " }\n",
+ " else if (event.altKey && event.key !== 'Alt') {\n",
+ " value += 'alt+';\n",
+ " }\n",
+ " else if (event.shiftKey && event.key !== 'Shift') {\n",
+ " value += 'shift+';\n",
+ " }\n",
+ "\n",
+ " value += 'k' + event.key;\n",
+ "\n",
+ " this._key_event_extra(event, name);\n",
+ "\n",
+ " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
+ " return false;\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
+ " if (name === 'download') {\n",
+ " this.handle_save(this, null);\n",
+ " } else {\n",
+ " this.send_message('toolbar_button', { name: name });\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
+ " this.message.textContent = tooltip;\n",
+ "};\n",
+ "\n",
+ "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
+ "// prettier-ignore\n",
+ "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
+ "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
+ "\n",
+ "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\n",
+ "\n",
+ "mpl.default_extension = \"png\";/* global mpl */\n",
+ "\n",
+ "var comm_websocket_adapter = function (comm) {\n",
+ " // Create a \"websocket\"-like object which calls the given IPython comm\n",
+ " // object with the appropriate methods. Currently this is a non binary\n",
+ " // socket, so there is still some room for performance tuning.\n",
+ " var ws = {};\n",
+ "\n",
+ " ws.binaryType = comm.kernel.ws.binaryType;\n",
+ " ws.readyState = comm.kernel.ws.readyState;\n",
+ " function updateReadyState(_event) {\n",
+ " if (comm.kernel.ws) {\n",
+ " ws.readyState = comm.kernel.ws.readyState;\n",
+ " } else {\n",
+ " ws.readyState = 3; // Closed state.\n",
+ " }\n",
+ " }\n",
+ " comm.kernel.ws.addEventListener('open', updateReadyState);\n",
+ " comm.kernel.ws.addEventListener('close', updateReadyState);\n",
+ " comm.kernel.ws.addEventListener('error', updateReadyState);\n",
+ "\n",
+ " ws.close = function () {\n",
+ " comm.close();\n",
+ " };\n",
+ " ws.send = function (m) {\n",
+ " //console.log('sending', m);\n",
+ " comm.send(m);\n",
+ " };\n",
+ " // Register the callback with on_msg.\n",
+ " comm.on_msg(function (msg) {\n",
+ " //console.log('receiving', msg['content']['data'], msg);\n",
+ " var data = msg['content']['data'];\n",
+ " if (data['blob'] !== undefined) {\n",
+ " data = {\n",
+ " data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
+ " };\n",
+ " }\n",
+ " // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
+ " ws.onmessage(data);\n",
+ " });\n",
+ " return ws;\n",
+ "};\n",
+ "\n",
+ "mpl.mpl_figure_comm = function (comm, msg) {\n",
+ " // This is the function which gets called when the mpl process\n",
+ " // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+ "\n",
+ " var id = msg.content.data.id;\n",
+ " // Get hold of the div created by the display call when the Comm\n",
+ " // socket was opened in Python.\n",
+ " var element = document.getElementById(id);\n",
+ " var ws_proxy = comm_websocket_adapter(comm);\n",
+ "\n",
+ " function ondownload(figure, _format) {\n",
+ " window.open(figure.canvas.toDataURL());\n",
+ " }\n",
+ "\n",
+ " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
+ "\n",
+ " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+ " // web socket which is closed, not our websocket->open comm proxy.\n",
+ " ws_proxy.onopen();\n",
+ "\n",
+ " fig.parent_element = element;\n",
+ " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+ " if (!fig.cell_info) {\n",
+ " console.error('Failed to find cell for figure', id, fig);\n",
+ " return;\n",
+ " }\n",
+ " fig.cell_info[0].output_area.element.on(\n",
+ " 'cleared',\n",
+ " { fig: fig },\n",
+ " fig._remove_fig_handler\n",
+ " );\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
+ " var width = fig.canvas.width / fig.ratio;\n",
+ " fig.cell_info[0].output_area.element.off(\n",
+ " 'cleared',\n",
+ " fig._remove_fig_handler\n",
+ " );\n",
+ " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
+ "\n",
+ " // Update the output cell to use the data from the current canvas.\n",
+ " fig.push_to_output();\n",
+ " var dataURL = fig.canvas.toDataURL();\n",
+ " // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+ " // the notebook keyboard shortcuts fail.\n",
+ " IPython.keyboard_manager.enable();\n",
+ " fig.parent_element.innerHTML =\n",
+ " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ " fig.close_ws(fig, msg);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
+ " fig.send_message('closing', msg);\n",
+ " // fig.ws.close()\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
+ " // Turn the data on the canvas into data in the output cell.\n",
+ " var width = this.canvas.width / this.ratio;\n",
+ " var dataURL = this.canvas.toDataURL();\n",
+ " this.cell_info[1]['text/html'] =\n",
+ " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.updated_canvas_event = function () {\n",
+ " // Tell IPython that the notebook contents must change.\n",
+ " IPython.notebook.set_dirty(true);\n",
+ " this.send_message('ack', {});\n",
+ " var fig = this;\n",
+ " // Wait a second, then push the new image to the DOM so\n",
+ " // that it is saved nicely (might be nice to debounce this).\n",
+ " setTimeout(function () {\n",
+ " fig.push_to_output();\n",
+ " }, 1000);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._init_toolbar = function () {\n",
+ " var fig = this;\n",
+ "\n",
+ " var toolbar = document.createElement('div');\n",
+ " toolbar.classList = 'btn-toolbar';\n",
+ " this.root.appendChild(toolbar);\n",
+ "\n",
+ " function on_click_closure(name) {\n",
+ " return function (_event) {\n",
+ " return fig.toolbar_button_onclick(name);\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " function on_mouseover_closure(tooltip) {\n",
+ " return function (event) {\n",
+ " if (!event.currentTarget.disabled) {\n",
+ " return fig.toolbar_button_onmouseover(tooltip);\n",
+ " }\n",
+ " };\n",
+ " }\n",
+ "\n",
+ " fig.buttons = {};\n",
+ " var buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'btn-group';\n",
+ " var button;\n",
+ " for (var toolbar_ind in mpl.toolbar_items) {\n",
+ " var name = mpl.toolbar_items[toolbar_ind][0];\n",
+ " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+ " var image = mpl.toolbar_items[toolbar_ind][2];\n",
+ " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+ "\n",
+ " if (!name) {\n",
+ " /* Instead of a spacer, we start a new button group. */\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ " buttonGroup = document.createElement('div');\n",
+ " buttonGroup.classList = 'btn-group';\n",
+ " continue;\n",
+ " }\n",
+ "\n",
+ " button = fig.buttons[name] = document.createElement('button');\n",
+ " button.classList = 'btn btn-default';\n",
+ " button.href = '#';\n",
+ " button.title = name;\n",
+ " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
+ " button.addEventListener('click', on_click_closure(method_name));\n",
+ " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
+ " buttonGroup.appendChild(button);\n",
+ " }\n",
+ "\n",
+ " if (buttonGroup.hasChildNodes()) {\n",
+ " toolbar.appendChild(buttonGroup);\n",
+ " }\n",
+ "\n",
+ " // Add the status bar.\n",
+ " var status_bar = document.createElement('span');\n",
+ " status_bar.classList = 'mpl-message pull-right';\n",
+ " toolbar.appendChild(status_bar);\n",
+ " this.message = status_bar;\n",
+ "\n",
+ " // Add the close button to the window.\n",
+ " var buttongrp = document.createElement('div');\n",
+ " buttongrp.classList = 'btn-group inline pull-right';\n",
+ " button = document.createElement('button');\n",
+ " button.classList = 'btn btn-mini btn-primary';\n",
+ " button.href = '#';\n",
+ " button.title = 'Stop Interaction';\n",
+ " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
+ " button.addEventListener('click', function (_evt) {\n",
+ " fig.handle_close(fig, {});\n",
+ " });\n",
+ " button.addEventListener(\n",
+ " 'mouseover',\n",
+ " on_mouseover_closure('Stop Interaction')\n",
+ " );\n",
+ " buttongrp.appendChild(button);\n",
+ " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
+ " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
+ " var fig = event.data.fig;\n",
+ " if (event.target !== this) {\n",
+ " // Ignore bubbled events from children.\n",
+ " return;\n",
+ " }\n",
+ " fig.close_ws(fig, {});\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._root_extra_style = function (el) {\n",
+ " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
+ " // this is important to make the div 'focusable\n",
+ " el.setAttribute('tabindex', 0);\n",
+ " // reach out to IPython and tell the keyboard manager to turn it's self\n",
+ " // off when our div gets focus\n",
+ "\n",
+ " // location in version 3\n",
+ " if (IPython.notebook.keyboard_manager) {\n",
+ " IPython.notebook.keyboard_manager.register_events(el);\n",
+ " } else {\n",
+ " // location in version 2\n",
+ " IPython.keyboard_manager.register_events(el);\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
+ " // Check for shift+enter\n",
+ " if (event.shiftKey && event.which === 13) {\n",
+ " this.canvas_div.blur();\n",
+ " // select the cell after this one\n",
+ " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+ " IPython.notebook.select(index + 1);\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
+ " fig.ondownload(fig, null);\n",
+ "};\n",
+ "\n",
+ "mpl.find_output_cell = function (html_output) {\n",
+ " // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+ " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+ " // IPython event is triggered only after the cells have been serialised, which for\n",
+ " // our purposes (turning an active figure into a static one), is too late.\n",
+ " var cells = IPython.notebook.get_cells();\n",
+ " var ncells = cells.length;\n",
+ " for (var i = 0; i < ncells; i++) {\n",
+ " var cell = cells[i];\n",
+ " if (cell.cell_type === 'code') {\n",
+ " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
+ " var data = cell.output_area.outputs[j];\n",
+ " if (data.data) {\n",
+ " // IPython >= 3 moved mimebundle to data attribute of output\n",
+ " data = data.data;\n",
+ " }\n",
+ " if (data['text/html'] === html_output) {\n",
+ " return [cell, data, j];\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ "};\n",
+ "\n",
+ "// Register the function which deals with the matplotlib target/channel.\n",
+ "// The kernel may be null if the page has been refreshed.\n",
+ "if (IPython.notebook.kernel !== null) {\n",
+ " IPython.notebook.kernel.comm_manager.register_target(\n",
+ " 'matplotlib',\n",
+ " mpl.mpl_figure_comm\n",
+ " );\n",
+ "}\n"
+ ],
+ "text/plain": [
+ "<IPython.core.display.Javascript object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABJcAAAIeCAYAAAAGZu7CAAAgAElEQVR4XuzdC5jWc/7/8beRjnRQSEyRTUqpsNHqsEiEpaJY2Uh0EEoqJSEddJBWKTpshHTAJn4VZUMpp5V2k0NC6aADql/ajuq/r/fv+t7/abqn+zt3c8/Mfc/zc11z0cz38Pk+Pt+5r2te1+fz/hx14L/NaAgggAACCCCAAAIIIIAAAggggAACCMQhcBThUhxqnIIAAggggAACCCCAAAIIIIAAAggg4AKES7wICCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgggAACCCCAAAIIIIAAAggggAAChEu8AwgggAACCCCAAAIIIIAAAggggAACcQsQLsVNx4kIIIAAAggggAACCCCAAAIIIIAAAoRLvAMIIIAAAggggAACCCCAAAIIIIAAAnELEC7FTceJCCCAAAIIIIAAAggggAACCCCAAAKES7wDCCCAAAIIIIAAAggggAACCCCAAAJxCxAuxU3HiQgg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Uzys0oyoefPmWcmSJUP1UQdRcyk0FQcigAACCCCQawKES7lGzY0QQAABBEIKEC6FhEqywwiX8vmAbd++3U444QQbP368/eUvfzmktw888IAvi/viiy8iP9OStsGDBx80cymYsaTlcp07dz7kOsFucYsWLbIrr7zSNDNq7ty5dtxxx4USIlwKxcRBCCCAAAII5KoA4VKucnMzBBBAAIEQAoRLIZCS8BDCpSQYtAcffNB3itOMIxXi1i/j4sWL7dhjj7WLL77YC3orMOrQoYN9+umnXtB7w4YNkXBJwZJ2h+vSpYvdc889kScuXLiwz3pSC8KlpUuX2q+//mpNmzY17VL35ptv+n1iNT4gYgnxcwQQQAABBBBAAAEEEEAAAf52TM13gHAph8dVgYxCHhXN3rJli5UqVcpuvfVW3+lNTQW4u3bt6l9hmkKfGTNmWLt27bxO0nfffWelS5e2c8891zRrqWHDhvY///M/XiNpzZo1Xp+pbdu2dtttt0XCJd1/0qRJh9yuUaNGvtzuqKOOshtuuMG++uorU7ikpoDp8ssvt6OPPtrmzJlzSM2nzBfjAyLMaHIMAggggAACCCCAAAIIIFCwBfjbMTXHn3Aph8dVQcy1117roU3lypUtLS3NihUrFlleFk+4pGVvQeiTw931yylcUoClIuDxNpbFxSvHeQgggAACCGQtwLI23g4EEEAAgVQTIFxKtRH9v+chXMrhcX3qqads2LBhtnr16qhXJlzKYXAuhwACCCCAQAoLEC6l8ODyaAgggEABFSBcSs2BJ1zKwXHNvPysUqVKvgyudu3aWS6L27Ztm/Xo0cOLcu/atcvOP/98GzFihNWqVct7FtRCUh2lvn37+lI31UNSge+g2LbqIg0YMMA+//xzX8ZWr149e/LJJ+2MM87wa6g4d7du3ezVV1/188uXL+9L91T42xPG/85c0vVmzZplb731lu9Kp/pO11xzTWgdZi6FpuJABBBAAAEEQgsQLoWm4kAEEEAAgSQRIFxKkoHKZjcJl7IJdrjDFRSNHDnSxo0bZ5988okHPS1btswyXFJ9pgYNGnhR7YceesjrM40dO9aee+45W7FihX9f4ZKCniZNmli/fv08HGrVqpXXVBo4cKB3R6GRAqKaNWvajh07/FqrVq3ypXRalvf44497vyZPnmwVK1b02kz6+vOf/xwJl0499VQbOnSo/f73v7dRo0bZxIkTffZVUPA7FhPhUiwhfo4AAggggED2BQiXsm/GGQgggAAC+VuAcCl/j0+8vSNcilcui/NUuFtfCnfU/vjHP2YZLs2fP9+aN29umzZtsiJFikSu+Lvf/c569uxp7du393BJy+y0+1swU0k/W7BggX344YdRe7F582Y78cQTbdmyZVajRg3fIW758uX29ttvewiVuel72pGuf//+/iMFVLrX7Nmz7Yorroh6j927d5u+gqYPiPT0dEvvOt3SihTPYVUuhwACCCCAQMEUIFwqmOPOUyOAAAKpLEC4lJqjS7iUw+OanXBJoVGvXr284HfGtnPnTuvevbsNGTLEw6WXX37Zw6GgadmcZhdp5zi1b7/91pfMKWz66aefbP/+/R4QaZnblVdeaUuWLLHLLrvMypYt62HR1Vdf7TOhgqZwafr06T7LKmgO4gDWAAAgAElEQVSaRaV7tGnTJqqQ+qWZVJkb4VIOv1BcDgEEEECgQAsQLhXo4efhEUAAgZQUIFxKyWGloHdOD2t2wiWFRwpwtLNc5la6dGkrV65cpOZSxt3iMt+jevXqPmtIM5oqVKjg4ZJmLGXcAU6/wNrJTrOXFFY1btzYXnnlFb9ttN3idH/dR3WkojVmLuX0m8P1EEAAAQQQOFSAcIm3AgEEEEAg1QQIl1JtRP/veZi5lMPjmp1wad68eV6ce+XKlV74O1oLCnpnFS79/PPPHkJpmZzqN6m9//77/v8Zw6WM11bRbs1g0rmqqRRPuJS5r9RcyuEXicshgAACCCDwXwHCJV4DBBBAAIFUEyBcSrURJVxKyIhmJ1xSQe+GDRva9u3bfQlc1apVbf369V7rqFmzZr5zXKxwSbOUVF9JIdXDDz9sP/zwgy+1U0HxIFzSMrqTTz7Zaz+pwLcKd2vJ3Lp16/zfhEsJeRW4KAIIIIAAAkcsQLh0xIRcAAEEEEAgnwkQLuWzAcmh7jBzKYcgg8tkJ1zSOQqW+vTp4zu+qRB3+fLlPXB67LHHfKlbrHBJ19BSNxXtVg0mBVTaGU6FxINwafz48TZmzBj75ptvfAc77Qinek916tTxbudkuKQd80qWLJnDqlwOAQQQQAABBBBAAAEEEEAgFQQIl1JhFA99BsKlFBxX1UnaunWrvfbaa7n2dHxA5Bo1N0IAAQQQQAABBBBAAAEEklaAvx2TdugO23HCpSg8mvWjJWSahZSMTbOHtORORblzq1FzKbekuQ8CCCCAQEESYFlcQRptnhUBBBAoGAKES6k5zoRLSRYu7d2714455ph89zYSLuW7IaFDCCCAAAIpIEC4lAKDyCMggAACCBwkQLiUmi9EUodLmmFUs2ZNryM0adIkK1y4sPXv399at25td911l73yyite7Pqpp57ygtdB++KLL6x79+6+w1qJEiWsSZMmpqLX2nVNS8p0rYzt+++/9/pH7du3t/nz59uGDRusYsWKduedd1qXLl2ivhkqtK1jHnzwQevYsWPkmCVLlth5551n3377rVWuXNk0y6hHjx6+hG3Xrl1exFt9qVWrlp8T1FxSTaUBAwbYqlWr7LfffvMaTf369fOd5ooXL+71k2bOnOnPk3lZ3O7du/0eU6dONf0iB/dQ7SW1d9991y6++GKv3XT//febfDRz69lnn/UaTmEa4VIYJY5BAAEEEEAgewKES9nz4mgEEEAAgfwvQLiU/8conh4mfbiksKZnz552ww032LRp03zHtMsvv9yaN2/uRa0V1EyfPt13UVMI8+OPP9o555xjd9xxh7Vp08Z27tzpgcq+ffs8OFLYoyCqRo0a9uijj7rpCSecYAqLFO5cffXVHkItXrzYwyYFMK1atYpqrwDro48+soULF0Z+ru/pXH1p6VqDBg3s+OOPt4ceeshKlSplY8eOteeee85WrFjh31e49Pjjj1v9+vW9yLeCNPVHwZV2fdNzqii47qHnOfbYYw8JlxSAKWibMGGCVapUyc97/fXXPZjSPYJw6YILLvBd63R9BWIKsRYtWhT12RRY6Sto+oBQAJfedbqlFSkez7vIOQgggAACCCCQSYBwiVcCAQQQQCDVBAiXUm1E/+95kj5cUgAShDf6fwU0LVq0sOeff94fULOMTj75ZPvggw/swgsv9BBHgc9bb70VGdG1a9d6MPL111/bmWee6aFUmJpLnTt3to0bN3pwE6199tlnPktJM58U6gSzmR544AGf9aQwS+HQpk2b/h97ZwElZdn+/8tFWAlpkFpSlE7pFJEQgy4FXkqkl+5GGqRDJJReWiQkpZHuDkUBaThI1//9Xu/vmf/u7OzO7OzM7Mwz3/ucPcrME/fzuWfnnP2c6/reEhgYaLnEu+++q8IM8gpyaciQIXLlyhWVPhhG9ROq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HDmkVq1aKnlsDUfkUoECBeSLL76Qfv36WS6xcuVKvS52u4sVK5ZWLmHHui5duliOyZs3r7b5oZ3u4MGD8vHHH0uyZMl057xPP/1UK5wiGqiSsjVnyqUo/w7yBBIgARLwWwKUS3679HxwEiABEiABPyZAuWTOxfd7uYT2tDx58tiUS8g8OnLkiGzevDmcXNq2bZugEigyuQR5hKoiVARB8IQeyGxC5VDBggVV5ERHLuXPn1+qVaumksgYK1asULEVWi4FBwcLfoyRL18+qVq1qrbTYeCXfO3atVq9BDGGCiu0z9karFwy5xcCn4oESIAEPEmAcsmTtHkvEiABEiABEvAOApRL3rEOrp6F38ulJ0+eSNKkSTVvyNVtcWfPnpX3339fDBFla/EaN24s586di7AtDtVDuMaECRMspzvaFocWvuPHj+t5qFyyJ5dCz+/XX3/VCqbbt28rH3uDmUv2CPF9EiABEiABawKUS/xMkAAJkAAJkID/EaBcMuea+71cwrKiamjcuHEyduxYKVGihOYXodoIYdbvvvuuFC9eXKt78DoEFCqWHA30/uqrrwS7wY0ePVpQYXTr1i2thMqdO7d88sknAgGF/2/atKlmH8WJE0fb8NDSljx5ct3NDaHfISEhukMdRA9kVejd4tDSVqhQIUugN3a2a9myZbhA78jkEsLMscscqpkCAgJkxIgRmtl05coV/be9QblkjxDfJwESIAESoFziZ4AESIAESIAESIByyZyfAcql/67rq1evZOjQobpjHIK6IVkgenr06KG7urVv314gbOLFi6cZRWPGjFHRgxFZWxzef/78uQwePFh++uknFTXINCpWrJgKLUglDOQ39ezZU7DrW9y4cTUDauHChZrtBPnUqFEjbc9Di9ulS5d097nQcgnXWLp0qbbFoQoK82/btq107tzZ8qm1V7mEZ8fucjgfLXyQVSNHjlQh5sjgF4QjlHgMCZAACZAACZAACZAACZAACfg3Af7taM71p1zy4XW1Flsx+Sj8gohJ+rw3CZAACZAACZAACZAACZAACfgGAf7t6BvrFNVZUi5FlZgXHe8quYTKrB07dmg+U/bs2bUNL6qDbXFRJcbjSYAESMD7CDADyfvWhDMiARIgARIgAbMRoFwy24r+73kol3x4XV0ll9q1a6eh4b///rscPXqUcsmHPxOcOgmQAAlE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Cp3ixYvLW2+9pVJq9OjRGq4NiYSB8G2EcWPHOQSCQxLdunVLXw8tlxDs/emnn+p1VqxYoTvDITy8X79+MnHiRMEuegg7x65xY8aM0dBvQy5BOuG+OAY7xmFXPOsByYUfY+ALIigoSNgW5+YPlB9fnnLJjxefj04CJEACJEACJEACJGAaApRLplnKMA9CueSBdbVuizMkEKTPF198EekMcubMqbvgtWnTRs6ePau7x23YsCFMNZNxAeO6p0+fVtmEneBQ4RQnThw9BIJq+PDhUq9ePcs9Bw8erFVNu3btssglZEO1b98+0nn1799fBgwYEO4YyiUPfKD89BaUS3668HxsEiABEiABEiABEiABUxGgXDLVcloehnLJA+sakVxCpVLatGktM0ArHITNL7/8IlevXpUXL14IWts6deqkrWwhISFSv359fc1WDpIhl9KlSyeFChWSxYsXS6xYsfT6N2/elJQpU0rcuHElICDAck/cI1GiRHL9+nWLXNqxY4eUKFEiUjKsXPLAB4e3CEOAcokfCBIgARIgARIgARIgARLwfQKUS76/hraegHLJA+sakVy6e/eutsMZA9lHyF5Cq9y7776rIgiZSTgf1USrVq2SatWq2ZVLLVq0kKVLl8rmzZsld+7cennIo1SpUsncuXOlSJEiYZ4aAipTpkwWuYR2OexuF5XBzKWo0OKxzhCgXHKGGs8hARIgARIgARIgARIgAe8iQLnkXevhqtlQLrmKZCTXqVChgrazTZgwQY+KaFc3iKDatWtrYDfGv//+K6hCQig45BIykZDPtH79+kjb4iCt0O72008/6b1y5Mih18O1IJ6M61tP2chcolzywIeCt4gyAcqlKCPjCSRAAiRAAiRAAiRAAiTgdQQol7xuSVwyIcoll2CM/CJff/21HD58WNvaEiRIoLvDffTRR2JduYSqJAge7OiGQG5IIMihJk2aqFzCwM5tmzZtkvHjx2ug959//qm7xkFKWUurDh06aOYSXs+WLZv88MMPujscdqBDyDha2/bv36/zwC51lEse+DDwFk4ToFxyGh1PJAESIAESIAESIAESIAGvIUC55DVL4dKJUC65FKftiyGIG7uxHTlyRFvaII8giazlEuQORBJ2jEuePLl069ZNc5PQombIpSdPnkjPnj1l4cKFcvv2bQ3pxr9xPVsVUZBJS5Ys0ffee+89mT9/vowcOVJOnjypO8ihWio4OFjb7Vwhl7A7XsKECT1AlbcgARIgARIgARIgARIgARIgARLwNQKUS762Yo7Nl3LJMU4RHhVRi1tkl0Wb27179wS7xXnjcEYy8QvCG1eScyIBEiABEiABEiABEiABEiAB7yLAvx29az1cNRvKpWiSpFz6H0AGekfzg2SS09m6ZpKF5GOQAAmQAAmQAAmQAAmQgJsIUC65CWwMX5ZyKZoLQLlEuRTNj5CpTqdcMtVy8mFIgARIgARIgARIgARIwOUEKJdcjtQrLui1cqls2bKSJ08eeeuttzSIOk6cOPLNN99I//79FRwCr6dPny6rV6+WX3/9VdKmTSujR4+Wzz//XN83pM+6deuke/fucvr0aSlWrJhmFR04cEADrK9cuSJVqlSRGTNmSLx48SJcEARfI1wb4dgIz0bOEa7ZtGnTcDlHmB/a3RDgbQzkJRm7veE1oy0uf/78MmnSJEGOUr169XQ3OTynvfHq1SvNTcLz//XXX/LOO+/oLnC9evXSU48dOybt27eX3bt363PVqFFDxowZo2HiGDgfu8l9//33cvPmTcmePbsMGzZMKlWqpO9Hpy0uKDhEAgIjZmnv2fi+bxOgXPLt9ePsSYAESIAESIAESIAESMDdBCiX3E04Zq7v1XLp0KFDKoHq16+vogRSBiLp448/VrmULl06GTFihBQqVEjFzMyZM3X3tKRJk1qkT9GiRWXUqFEqWbCjGiRUYGCgypR///1Xg6y7dOmi4dkRjTp16uj9x40bpzu0Xbp0SW7duiV43bpyyVG5tHTpUhVbkFaQOQjkbt68uXz77bd2PwmYK8TSd999JyVLlpRr166pPGvWrJk8evRIsmbNKnjuAQMGqAzD66VLl5bZs2frtXEe5jlt2jSB4AI3vHbixAk91xG5BOGGH2PgCyIoKEgol+wun6kPoFwy9fLy4UiABEiABEiABEiABEgg2gQol6KN0Csv4NVy6eXLl7J9+3YLuMKFC0u5cuVUDEEu9e7dWwYNGqTvP3z4UN5++21Zs2aNVuAY0mfjxo3y0Ucf6TE4r0ePHnLhwgXJnDmzvoZqKMgUVDjZGtjp7f3335cNGzZI+fLlwx3irFxatWqVVh0ZFVNTp05VyYXd1gICAiL8sDx48EBSpEghEydOVGlkPSCdIJ9wbewGhwEmn332mVy9elWrnCDYWrdurbvMGQNsIelQSeWIXIKcgryyHpRLXvl77rFJUS55DDVvRAIkQAIkQAIkQAIkQAI+SYByySeXze6kvVou5cyZU2WHMb744gtJliyZVtpALoWEhEitWrUs7ydKlEgrmBo2bGiRS6jcgYzBmDVrlrRp00ZFlDH69esnED0HDx6UefPmaXuZMdauXatVQaicevz4scSOHTscUGfl0uXLl2Xz5s2W6x05ckTy5cunYidDhgwRLtzevXulSJEicvHiRcmUKVO441DphYqvLVu2WN6DsEqcOLFs3bpV7wFOmHeZMmUsx3To0EEwB8zJEbnEyiW7v1t+eQDlkl8uOx+aBEiABEiABEiABEiABBwmQLnkMCqfOtCr5RJECLKKjFG1alWVJGjvglxavny54DVj4D0cj/Y5W0HbOC84OFju3btnOSd0Gxuqgq5fv255DxU+qHxC65yjcmngwIGCljeIGmMgH8moCMJrmF9Ecgltfch0imggTwlZVBHJpdCSyLiGIZe2bdumbX2QSxBNaJUzBrjg2ps2bXJILlnPj7vF+dTvvdsmS7nkNrS8MAmQAAmQAAmQAAmQAAmYggDlkimWMdxDUC7ZCOAOTQlVPGihW79+vUNtcVOmTNE8o3/++UcFGMaXX34pO3fuVGljyCVUS/39998SN25cfQ35R507d7bbFofwb2RKjR8/3uVtcWiNQ7udI5VLlEvm/EKI7lNRLkWXIM8nARIgARIgARIgARIgAXMToFwy5/pSLtmRS1h2hG2jogdCB5U/qC5Cux0Cwq0rpE6dOiVo5xs6dKjUrFlTs5wQ2p0wYcIwcgnVTchBQm4Urod74Afn2RvIOkK4OKq0SpQooTu+IYwbu9ch0Pvdd9+V4sWLq+TCe8hmKlWqlCXQG+ehHRC7xaE6DO2C2E0uKoHeEcklVEnhWTlIgARIgARIgARIgARIgARIgARIgH87+sdngHLJAbmEaiGEXy9cuFBu376tbWv4N2SQrfY7hHMPGTJE7ty5IzVq1NBAcIic0JVLaM2DqEK7HPKL6tatq1VD2MnO3nj16pVKKIR3I6Q7derUGkyOsHIMtLe1b99ed7hDYHiFChV07shigkzC+YMHD9Y5QZLlyJFDw84RhI4RncolyiV7q8f3SYAESIAESIAESIAESIAESMB/CbByyZxr77VyyZy4Y+apnJFFUZ0pM5eiSsw9x7MtzT1ceVUSIAESIAESIAESIAESIAHXEKBccg1Hb7sK5ZK3rYgb5kO55AaoXnpJyiUvXRhOiwRIgARIgARIgARIgARIQAlQLpnzg0C55GXril3k0KYW0Th58qTN3eSQ7YRWt+PHj0usWLGkWLFimsuUJUsWS5vbggULNDfq4MGD+jpa8sqWLWu5FTKXunbtKtu3b5fXr19rCx122MOx9gYrl+wR8sz7lEue4cy7kAAJkAAJkAAJkAAJkAAJOEeAcsk5bt5+FuWSl63QixcvLNlMtqaWMWNGefPNN8O9hYBw7E6XO3duefjwofTt21evc/jwYYGwypQpk6RLl05DwCGvEOC9aNEiuXTpkiRLlkyuXLkiefLkUdmE7CaEcmOHOwSDIzPK3qBcskfIM+9TLnmGM+9CAiRAAiRAAiRAAiRAAiTgHAHKJee4eftZlEvevkJOzg+7xKVMmVLDvRMkSKByCaHd3bp10ytCYuG1tm3barWSEVh+5swZiR07tt27IoQcP8bAF0RQUJAEBYdIQGA8u+fzAPcQoFxyD1delQRIgARIgARIgARIgARIwDUEKJdcw9HbrkK55G0r4uR8Lly4IH369JE9e/bIrVu3dEc4VDCtXr1aK5UgkrZu3SqlS5e23KFatWqSOHFimTVrlnzyySeSIkUK+fHHHx2aQf//7rI3YMCAcMdSLjmEz20HUS65DS0vTAIkQAIkQAIkQAIkQAIk4AIClEsugOiFl6Bc8sJFcWZKEEioHEIVUpo0aVQu5cqVS5YvX67ZSRHJpSRJksjMmTOlRo0aWuHkqFxi5ZIzq+T+cyiX3M+YdyABEiABEiABEiABEiABEnCeAOWS8+y8+UzKJW9eHQfndvv2bUmePLls27ZNSpUqpWft2LFD/z+0XBo+fLjKJwy0xWXOnFnatGmjr6EKCWLJ0bY466kxc8nBxXLzYZRLbgbMy5MACZAACZAACZAACZAACUSLAOVStPB57cmUS167NI5PDFVKyFeqXLmy9OvXTwO8u3fvLvv27Qsjl9KnT6+B3tmzZ5fvvvtO5s+fr4HeEFMQVAjuLlOmjAZ6J0qUSFvsChcuzEBvx5cixo+kXIrxJeAESIAESIAESIAESIAESIAEIiFAuWTOjwflkknWdePGjdKuXTu5ePGiyqDx48frzm+hK5cgk8aNGyeHDh2SLFmyyMSJE6VcuXIWAkePHpUuXbpo1VOsWLG0nW727Nla4WRv8AvCHiG+TwIkQAIkQAIkQAIkQAIkQAIkwL8dzfkZoFwy57p6/Kn4BeFx5LwhCZAACZAACZAACZAACZAACfgcAf7t6HNL5tCEKZccwsSD7BFg5pI9Qp55n21xnuHMu5AACZAACZAACZAACZAACThHgHLJOW7efhblkrevkI/Mj3LJOxaKcsk71oGzIAESIAESIAESIAESIAESsE2AcsmcnwzKJXOuq8efinLJ48ht3pByyTvWgbMgARIgARIgARIgARIgARKgXPKnzwDlkj+ttguf9enTp4IfY0AuBQUFSVBwiAQExnPhnXipqBCgXIoKLR5LAiRAAiRAAiRAAiRAAiTgaQKsXPI0cc/cj3LJM5xNd5f+/fvLgAEDwj0X5VLMLjXlUszy591JgARIgARIgARIgARIgAQiJ0C5ZM5PCOWSOdfV7U/FyiW3I3bqBpRLTmHjSSRAAiRAAiRAAiRAAiRAAh4iQLnkIdAevg3lkoeBm/V2zFzyjpWlXPKOdeAsSIAESIAESIAESIAESIAEbBOgXDLnJ4NyyZzr6vGnolzyOHKbN6Rc8o514CxIgARIgARIgARIgARIgAQol/zpM0C55E+r7cZnpX12I1xemgRIgARIgARIgARIgARIgARMQoB/O5pkIa0ew+/lEoKpV6xYIYcPH47WCr/xxhuyfPlyqVq1qs3r/PHHH5IpUyY5dOiQ5MuXL1r38saT+QXhjavCOZEACZAACZAACZAACZAACZCAdxHg347etR6umg3lkovk0j///CNJkiSRwMBAyqWECV31+eR1SIAESIAESIAESIAESIAESIAETESAcslEixnqUSiXXCSX7H08/KVyKSg4RAIC49nDEWPvM5MoxtDzxiRAAiRAAiRAAiRAAiRAAiQglEvm/BB4VC6tWrVKGjRoIHfu3JGAgABtRcufP7907txZRo4cqYRbtGihH7aNGzfK1KlTpUaNGvo6WsmuXr0qN27c0H/v3r1bSpcuLXfv3pV+/frJ2bNnBdfHGDt2rHTo0EF++eUXqVKlir72/vvvS8eOHfX6oYfRFteyZUsZPHiw3L59W8+ZPn26JE6cWA/dt2+f9OzZU1vanj9/rnP57rvvpECBApZLWbfF7d27V+916tQpyZUrl/Tq1UuqV69uaYubPXu2BAcHy7179yzXQHtetWrV5PXr1xF+2v7++2/ltX79enn69Klkz55dJk2aJEWKFNFzpkyZIqNGjZK//vpL2/B69+6tzI2BeYIrWG3evFkyZMggM2fOlBQpUkizZs30WfPkySNz586VLFmyOPyp95VAb8olh5eUB5IACZAACZAACZAACZAACZCAywlQLrkcqVdc0KNy6f79+5I0aVKBeClYsKCMGzdOhQ4kCF7DgASCGNqwYYOkSZNGJkyYoALpnXfekfjx48vOnTslR44cMnToUFm5cqXs2bNHRUloaQVBs2PHDmncuLGMGDFC0LKWOnVqFT3ZsmULAx5yCTIGcmb06NEqtpo2bSqFCxeWefPm6bGQMBBbmDMGjoO4OnfunLz99tv6Wmi59PDhQ32mcuXKSZ8+feTSpUvSvn17uXjxYrTk0r///it58+aVtGnTypAhQyRVqlRy8OBBCQoKkmLFimnmU506dVSulS9fXufYtWtXZfnhhx9a5onzx4wZo5KsW7duKvkyZ86sx6ZPn16aNGmiYm3t2rUOf0gplxxGxQNJgARIgARIgARIgARIgARIwG8JUC6Zc+k9KpeAEIKmfv360qlTJ63SKVSokAwYMEBu3bolkDKGBIIQ+f777+XYsWMqkSChID4++ugjadWqlVSsWFGrnoYNGyahpRWqiVCFg+qeZcuWqbRasGCBCitIJusBuYRro20tXbp0+va6deu0eunKlSsqcKzHy5cvNV9p/vz58umnn4aTS5h3jx49tHooXrz/tYihWgjVUUagtzOVS7gungtzhaSzHiVKlJCcOXMqN2PUrl1bua5evdoyT1QzDRo0SP8NOQfJrWN5AAAgAElEQVQxNWPGDJVKGAsXLlQx9/jx4wg/9aiawo8x8AUBycW2OHN+UfCpSIAESIAESIAESIAESIAESMAVBCiXXEHR+67hcbkEqYQWtp9//lkl0NatW6Vhw4YqeNAiZkggSCVU6aANDlU6sWLFUrmEiiRUFEHuhISESOXKlZWqIa0+/vhjrdo5c+aMiiFIKwgZXHvRokXhVgBy6aefftKqImNAVqFy57fffpMyZcroHPr27asVTNevXxfIpUePHsnEiRNVdGGErlzCMxw5ckSPNwb+jUqh6Mgl3OvEiRPKzNaAcEK7XqNGjSxvozoMP8bz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sxAEIAABCGQSga+//trmzp1rV199tX355Zc2f/58a9u2bSYh4Kz5ILB161Z78cUXrVu3brZt2zb717/+Zbfddls+ZuRRCEAAAhCAAAQgUHAEEJcKji0zQwACEIBABhPYv3+/NW7c2O69917r3bu3DR482M4666wCJTJy5Ejr3r27bdmyxa3z0EMP2YQJE2zx4sUFum6kyadNm+ZY/PTTT1aiRIlIw339PJlnK1SokI0fP95at24ddq+VK1d2ftCXLPTPvg7430EdO3a0s88+2z744AO74IIL7IYbbvD7aIGPi/VMBbGxP/3pT1a7dm176qmnYp4+ljlWrFhh119/vfv9OuWUU5L+exbz4XkQAhCAAAQgEAcCiEtxgMgUEIAABCAAgXAEvvjiCzv99NNd9smAAQOyh+iFVAKQhJ942m+//eayXEqXLu2mTaYAk/Ncu3btsh9//NHKlCljEmbiYdu3b7edO3dayZIl3XQFxTTcXqMVl3744Qc74ogjrGjRolEdXTFSq1Ytq169uk2ePDmqZwt6cCqJS4qtQw891I466qiYjx3LHFdddZVt2rTJ/vnPf9qRRx6ZHYsxb4IHIQABCEAAAmlMAHEpjZ3H1iEAAQhAID0JJEoISRVxKRFeShRTnSVacSkR50/0GqkgLkm0POywwxJ99Oz1zjzzTGvRooU9/PDDSdsDC0MAAhCAAARShQDiUqp4gn1AAAIQgECgCLzxxhvupXPVqlUuY6VOnTo2ceJEGzRo0EEvoyp7UlnOt99+a3feeaf95z//saysLDv33HPt6aefdmVV7777rrVq1co2bNhwQGmZ+vB88sknNn36dItUFrdv3z579NFHbdiwYaZsmlNPPdVlVF100UW5ste+atSo4X6uHkCFCxe2rl27Wp8+fbKzkFTudvvtt9tbb73lsonOO+88e+aZZ6xq1aruudCyuM2bN9stt9xiH374octoqlKlit13332uP5Vs6NCh9sgjj9jatWsdB8/+/Oc/29FHH22jRo06ICtLIlroC368mIYDEyouaa/PPvus85HKs/Iqi/vmm2/shBNOsI8//tiNlSlDSefy9qzvLVu2zO655x7HSCWWGiv/ipX6d4mX5ti9e7f72ZNPPumy5MKZn9gJ95y4Kivn+++/d1k5l19+ufOrLPSMa9assVtvvdWmTp3qfKaY+vvf/+6y1VauXOnKxj777DP3T8+eeOIJN5/6kyk2b7zxRnv//fddjFeqVMluvvlmF1eeeQJivXr13NwSlsQztKQtnPinckyVzWmOcBY6h86n/ej39/XXX3f+eeCBB9z3ZKEZeA8++KCLySVLlrg9z5kzx/3eX3bZZaZzKrMJgwAEIAABCASZAOJSkL3L2SAAAQhAICkE1q9f716OBw4caJdeeqkrVZNI0L59e7efTp062c8//+yaNMuOOeYY27NnjxMJGjZs6Hr1HHLIIU4IWrhwoX366adO1Clfvrz17dvXPS/bu3ev+57EDb30RhKXJEDoBVjijcQuCQf6noQMTwgKBaaXbu1Ba0pUWrBggVtLL+pdunRxwyV6qQRQ8xYrVsx69OjhmpgvX77clSuFiksS0V555RU7//zz3fh33nnH7rjjDps1a5ZJOJDgVK5cOfv3v/9tTZs2dWtIwCpbtqwTsNR/KGdWlkrkCoppuADyxAudW75SeeN7772XzTC/4pL4qBxO7Hv27OkYic0555xj1apVcwLMd999Z2eccYbb3uOPP25vv/2280G40jAvTvKKndBzShwV01dffdVOO+00J/hIxPR8nvOMEr+0F5X+KS4UyxKGtBf5XqYsn+bNmztR0jN9T77s16+fE8kU75dccomVKlXKZs+e7eJMvyNXXnmle0TC0NixY93vlGJM60r4LChxSb+32q/2KB7333+/+12RQCYeil+JaHfffbcTjySq6fdIfbIkdm7cuNE6d+5sjRo1cr+bGAQgAAEIQCDIBBCXguxdzgYBCEAAAkkhsGjRIveyrayK448//qA9hCvhktAjMUrZHV5WhMp+lHEh8UIvuMqIWLp0qcsOkSnDqWXLlu5FV5kVkcQlCVHq/6SsF8/UZLxu3bou8yac6cVdL8l6qfb2pSblb775phOPJGicfPLJ2eKH5lBmUsWKFV2G0RVXXHGQuBRuHZUXKZPqsccecz+WcCOR4R//+If7s7KtlB2ybt06J7SFlvwVFNNwexUHZbMoE01i25QpU6xChQrZQ/MrLsk/EnWU8SNxLpJJPJL/X375ZSfOhLNIsRP6jLJtJBYq3sLtIecZdX4JR8pAkt9lig2JUvPmzXPxJRFTTe0lOso+//xzJ5QprtRTKpwpVpU1JWFHJh+r95SypHKWwxWUuCShd/To0W5tCVkSNyUa3XTT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\" width=\"1175\">"
+ ],
+ "text/plain": [
+ "<IPython.core.display.HTML object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "s = monotonic()\n",
+ "keys = {}\n",
+ "for sha1, torrent in torrents.items():\n",
+ " for key in torrent.dict.get(b'info').keys():\n",
+ " if key.decode() not in keys.keys():\n",
+ " value = torrent.dict.get(b'info').get(key)\n",
+ " if type(value) is bytes:\n",
+ " try:\n",
+ " value = value.decode()\n",
+ " except UnicodeDecodeError:\n",
+ " pass\n",
+ " keys[key.decode()] = [1, value]\n",
+ " else:\n",
+ " keys[key.decode()][0] += 1\n",
+ "print(len(v), \"@\", monotonic()-s, \"s\", len(keys))\n",
+ "sort = sorted(keys, key=lambda x: keys[x][0])\n",
+ "%matplotlib notebook\n",
+ "fig, ax = pyplot.subplots();\n",
+ "ax.barh(sort, [keys[x][0] for x in sort])\n",
+ "pyplot.xscale(\"log\")\n",
+ "pyplot.xlabel(\"število pojavitev ključa v slovarju info\")\n",
+ "fig.show() ## TODO komentiraj"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "930e96ab",
+ "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.10.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/misc/analiza.txt b/misc/analiza.txt
index ca0f4f6..c0cca4d 100644
--- a/misc/analiza.txt
+++ b/misc/analiza.txt
@@ -1,7 +1,7 @@
cd www; find .. -maxdepth 1 -name *.torrent | parallel ./insert.php 'mysql:host=tranzistor:3306\;dbname=travnik\;charset=utf8' travnik $TRAVNIK_DB_PASSWORD {} | tee ../tmp/insert.txt; ocd
analizirati:
-- kateri nestandardni ključi so v info slovarjih
+- kateri nestandardni ključi so v info slovarjih [izdelal @ s/nestandardni //]
- encodingi
- končnice datotek
- kategoriziranje po imenih torrentov in datotek
@@ -18,6 +18,7 @@ analizirati:
- odjemalci: verzije, popularnost v državi
- porti odjemalcev -- distribucija
- koliko % torrentov ima google -- sear.c
+- https://pypi.org/project/parse-torrent-title/
citirati:
- bep
diff --git a/src/dht.c b/src/dht.c
index 4e57e5e..d97b80b 100644
--- a/src/dht.c
+++ b/src/dht.c
@@ -794,7 +794,7 @@ struct dht * dht_init (const struct bencoding * c) {
#pragma GCC diagnostic pop
goto e;
}
-#define TOOMUCH 32727
+#define TOOMUCH (32727*1)
unsigned pinged = 0;
if (c) {
const struct bencoding * id = bpath(c, "id");
diff --git a/src/main.c b/src/main.c
index de21f7a..199bfab 100644
--- a/src/main.c
+++ b/src/main.c
@@ -48,7 +48,7 @@ void found_torrent (struct dht * d __attribute__((unused)), const unsigned char
t->ttl = seconds()+256;
t->type |= info | peers;
} else {
- if (last_added + 1 > seconds()) {
+ if (last_added + 2 > seconds()) {
L(debug, d, "not adding a torrent this fast");
return;
}