{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e279e88d",
   "metadata": {},
   "source": [
    "# Speck Analysis Notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d689cc8d",
   "metadata": {},
   "source": [
    "The following block initializes the chipwhisperer, as always"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0cccc556",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:ChipWhisperer Other:ChipWhisperer update available! See https://chipwhisperer.readthedocs.io/en/latest/installing.html for updating instructions\n"
     ]
    }
   ],
   "source": [
    "import chipwhisperer as cw\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "9dd8320a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Path to the Speck .hex file for reflashing\n",
    "PATH=\"/home/msc/documents/obsidian_notes/master-aits/subjects/implementation_attacks_and_countermeasures/praktikum/speck_cpa_cw/cw_firmware/simple-speck-CWLITEARM.hex\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 269,
   "id": "d7f94c82",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 269,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scope.dis()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7793787d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO: Found ChipWhispereršŸ˜\n"
     ]
    }
   ],
   "source": [
    "def flash(scope, prog):\n",
    "    cw.program_target(scope, prog, PATH)\n",
    "\n",
    "def reset_target(scope):\n",
    "    scope.io.nrst = 'low'\n",
    "    time.sleep(0.05)\n",
    "    scope.io.nrst = 'high_z'\n",
    "    time.sleep(0.05)\n",
    "\n",
    "try:\n",
    "    if not scope.connectStatus:\n",
    "        scope.con()\n",
    "except NameError:\n",
    "    scope = cw.scope()\n",
    "\n",
    "try:\n",
    "    target = cw.target(scope)\n",
    "except IOError:\n",
    "    print(\"INFO: Caught exception on reconnecting to target - attempting to reconnect to scope first.\")\n",
    "    print(\"INFO: This is a work-around when USB has died without Python knowing. Ignore errors above this line.\")\n",
    "    scope = cw.scope()\n",
    "    target = cw.target(scope)\n",
    "\n",
    "print(\"INFO: Found ChipWhispereršŸ˜\")\n",
    "\n",
    "prog = cw.programmers.STM32FProgrammer\n",
    "time.sleep(0.05)\n",
    "scope.default_setup()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfd1f6a6",
   "metadata": {},
   "source": [
    "**Reset the target if required:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4cc49970",
   "metadata": {},
   "outputs": [],
   "source": [
    "reset_target(scope)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe784f48",
   "metadata": {},
   "source": [
    "**Reflash the target if required:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "de6112ec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected known STMF32: STM32F302xB(C)/303xB(C)\n",
      "Extended erase (0x44), this can take ten seconds or more\n",
      "Attempting to program 5431 bytes at 0x8000000\n",
      "STM32F Programming flash...\n",
      "STM32F Reading flash...\n",
      "Verified flash OK, 5431 bytes\n"
     ]
    }
   ],
   "source": [
    "flash(scope, prog)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86a7ff43",
   "metadata": {},
   "source": [
    "**Set an encryption key:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "103040b9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 32 bytes of encryption key\n",
    "#encryption_key = b\"\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f\"\n",
    "\n",
    "# 8 byte encryption key\n",
    "encryption_key = b\"\\x11\\x22\\x33\\x44\\x55\\x66\\x77\\x88\"\n",
    "if len(encryption_key) == 8:\n",
    "    target.simpleserial_write(\"s\", encryption_key)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bfa204a",
   "metadata": {},
   "source": [
    "**Get the encryption key:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "bdfe5aba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CWbytearray(b'11 22 33 44 55 66 77 88')\n"
     ]
    }
   ],
   "source": [
    "target.simpleserial_write(\"k\", b'\\x00'*4)\n",
    "print(target.simpleserial_read(\"o\", 8))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "512daee1",
   "metadata": {},
   "source": [
    "**Encrypt a 4-byte block:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "180eb01b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CWbytearray(b'5d 7c 46 6d')\n"
     ]
    }
   ],
   "source": [
    "#pt = b\"\\x70\\x6f\\x6f\\x6e\\x65\\x72\\x2e\\x20\\x49\\x6e\\x20\\x74\\x68\\x6f\\x73\\x65\"\n",
    "pt = b\"\\x4c\\x69\\x74\\x65\"\n",
    "target.simpleserial_write(\"e\", pt)\n",
    "print(target.simpleserial_read(\"c\", 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95dbb710",
   "metadata": {},
   "source": [
    "## Capturing the Data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4c91b03",
   "metadata": {},
   "source": [
    "The following code snippet traces the encryption process with random plaintetext 2000 times"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a56a4fc2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "31b5b94c688d45bc9a4ab40e6b7e3fc2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Capturing traces:   0%|          | 0/2250 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from tqdm.notebook import trange\n",
    "import random\n",
    "import numpy as np\n",
    "\n",
    "ktp = cw.ktp.Basic()\n",
    "trace_array = []\n",
    "textin_array = []\n",
    "\n",
    "pt = b\"\\x4c\\x69\\x74\\x65\" \n",
    "random.seed(0x5222223) \n",
    "\n",
    "\n",
    "N = 2250\n",
    "for i in trange(N, desc='Capturing traces'):\n",
    "    pt = bytes([random.randint(0, 255) for i in range(4)])\n",
    "    scope.arm()\n",
    "    \n",
    "    \n",
    "    target.simpleserial_write('e', pt)\n",
    "    \n",
    "    ret = scope.capture()\n",
    "    if ret:\n",
    "        print(\"Target timed out!\")\n",
    "        continue\n",
    "    \n",
    "    response = target.simpleserial_read('c', 4)\n",
    "    \n",
    "    trace_array.append(scope.get_last_trace())\n",
    "    textin_array.append(pt)\n",
    "\n",
    "    \n",
    "trace_array = np.array(trace_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f647149a",
   "metadata": {},
   "source": [
    "## Plotting the Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "id": "e9c2b26b",
   "metadata": {},
   "outputs": [
    {
     "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(\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",
       "    );\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('style', 'box-sizing: content-box;');\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; position: absolute; left: 0; top: 0; 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",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\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",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.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",
       "    this.rubberband_canvas.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.rubberband_canvas.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",
       "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\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",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * 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",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\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 icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "import matplotlib.pylab as plt\n",
    "plt.figure()\n",
    "plt.plot(trace_array[2], 'r')\n",
    "#plt.plot(trace_array[4], 'g')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a304aae",
   "metadata": {},
   "source": [
    "# Hamming Weight and Speck Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8cfe5d98",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Hamming Weight\n",
    "HW = [bin(n).count(\"1\") for n in range(0, 256)]\n",
    "def popcount(x):\n",
    "    x -= (x >> 1) & 0x5555555555555555\n",
    "    x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333)\n",
    "    x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0f\n",
    "    return ((x * 0x0101010101010101) & 0xffffffffffffffff ) >> 56"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "335d65f4",
   "metadata": {},
   "source": [
    "### Further functions for Pearson"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "77c909cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "def mean(X):\n",
    "    return np.sum(X, axis=0)/len(X)\n",
    "\n",
    "def std_dev(X, X_bar):\n",
    "    return np.sqrt(np.sum((X-X_bar)**2, axis=0))\n",
    "\n",
    "def cov(X, X_bar, Y, Y_bar):\n",
    "    return np.sum((X-X_bar)*(Y-Y_bar), axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b1d60ab6",
   "metadata": {},
   "source": [
    "## The Speck Simulation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f60c1e5d",
   "metadata": {},
   "source": [
    "The following Code calculates the basic Speck encryption routine (one xor):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8de1fe36",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "\n",
    "NUM_ROUNDS = 22\n",
    "BLOCK_SIZE = 32\n",
    "KEY_SIZE = 64\n",
    "WORD_SIZE = 16\n",
    "\n",
    "\n",
    "# SHIFTs for SPECK\n",
    "ALPHA = 7\n",
    "BETA = 2\n",
    "\n",
    "mod_mask = (2 ** WORD_SIZE) -1\n",
    "mod_mask_sub = (2 ** WORD_SIZE)\n",
    "\n",
    "def ER16(x, y, k):\n",
    "\n",
    "    rs_x = ((x << (16 - ALPHA)) + (x >> ALPHA)) & mod_mask\n",
    "\n",
    "    add_sxy = (rs_x + y) & mod_mask\n",
    "\n",
    "    new_x = k ^ add_sxy\n",
    "\n",
    "    ls_y = ((y >> (16 - BETA)) + (y << BETA)) & mod_mask\n",
    "\n",
    "    new_y = new_x ^ ls_y\n",
    "\n",
    "    return new_x, new_y\n",
    "\n",
    "\n",
    "\n",
    "def simple_speck(plaintext, key):\n",
    "    Ct_0 = (int(plaintext[1]) << 8) + int(plaintext[0])\n",
    "    Ct_1 = (int(plaintext[3]) << 8) + int(plaintext[2])\n",
    "                                                \n",
    "    \n",
    "    Ct_1, Ct_0 = ER16(Ct_1, Ct_0, key)   # fixed 16 bit key of 0x55\n",
    "    return popcount((Ct_1 << 8) + Ct_0)\n",
    "\n",
    "def PowerRightHalfKey(plaintext, key):\n",
    "    pt2 = (int(plaintext[1]) << 8) + int(plaintext[0])\n",
    "    pt1 = (int(plaintext[3]) << 8) + int(plaintext[2])\n",
    "    \n",
    "    temp = ((pt1 << (16 - ALPHA)) + (pt1 >> ALPHA)) & mod_mask\n",
    "    p1 = (temp + pt2) & mod_mask\n",
    "    intermediate = ((p1 >> 8 )& 0xFF) ^ key\n",
    "    \n",
    "    return popcount(intermediate)\n",
    "\n",
    "\n",
    "def PowerLeftHalfKey(plaintext, key):\n",
    "    pt2 = (int(plaintext[1]) << 8) + int(plaintext[0])\n",
    "    pt1 = (int(plaintext[3]) << 8) + int(plaintext[2])\n",
    "    \n",
    "    temp = ((pt1 << (16 - ALPHA)) + (pt1 >> ALPHA)) & mod_mask\n",
    "    p1 = (temp + pt2) & mod_mask\n",
    "    \n",
    "    r1 = p1 ^ 0x2211\n",
    "    \n",
    "    temp = ((pt2 >> (16 - BETA)) + (pt2 << BETA)) & mod_mask\n",
    "    s1 = temp ^ r1\n",
    "    temp = ((r1 << (16 - ALPHA)) + (r1 >> ALPHA)) & mod_mask\n",
    "    p2 = (temp + s1) & mod_mask\n",
    "    intermediate = (p2 & 0xFF) ^ key\n",
    "    \n",
    "    return popcount(intermediate)\n",
    "    \n",
    "\n",
    "def simple_speck_partial(plaintext, key, knownkey):\n",
    "    Ct_0 = (int(plaintext[1]) << 8) + int(plaintext[0])\n",
    "    Ct_1 = (int(plaintext[3]) << 8) + int(plaintext[2])\n",
    "                                                \n",
    "    Ct_1, Ct_0 = ER16(Ct_1, Ct_0, knownkey)\n",
    "    \n",
    "\n",
    "    Ct_1, Ct_0 = ER16(Ct_1, Ct_0, key)   # fixed 16 bit key of 0x55\n",
    "    return popcount((Ct_1 << 8) + Ct_0)\n",
    "\n",
    "\n",
    "def speck_keyschedule(plaintext, key, known_keys):\n",
    "    Ct_0 = (int(plaintext[1]) << 8) + int(plaintext[0])\n",
    "    Ct_1 = (int(plaintext[3]) << 8) + int(plaintext[2])\n",
    "    \n",
    "    for known_key in known_keys:\n",
    "        Ct_1, Ct_0 = ER16(Ct_1, Ct_0, known_key)    \n",
    "\n",
    "    Ct_1, Ct_0 = ER16(Ct_1, Ct_0, key)   # fixed 16 bit key of 0x55\n",
    "    return popcount((Ct_1 << 8) + Ct_0)\n",
    "\n",
    "\n",
    "def speck_keyschedule_model(last_keybyte, key_guess):\n",
    "    D = 0x00\n",
    "    C = 0x00\n",
    "    B = 0x00\n",
    "    A = last_keybyte\n",
    "    '''\n",
    "    u16 i,D=K[3],C=K[2],B=K[1],A=K[0];\n",
    "\n",
    "    rk[i]=A; ER16(B,A,i++);\n",
    "    rk[i]=A; ER16(C,A,i++);\n",
    "    rk[i]=A; ER16(D,A,i++);\n",
    "    '''\n",
    "    key_guess, last_keybyte = ER16(key_guess, last_keybyte, key)\n",
    "    \n",
    "    return popcount((key_guess << 8) + last_keybyte)\n",
    "    \n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8b8b655b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simple_speck(b'\\xf5\\xf9\\xa97', 0x1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f288ecd4",
   "metadata": {},
   "source": [
    "## This Methods works for calculating the correct key from the Power-Trace"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93fb63b1",
   "metadata": {},
   "source": [
    "For the following C-Implementation, the function `calc_mean_from_trace()` seems to gather the correct key from the trace:\n",
    "\n",
    "```C\n",
    "u16 i;\n",
    "Ct[0]=Pt[0]; Ct[1]=Pt[1];\n",
    "\n",
    "for(i=0;i<22; i++) {\n",
    "    ER16(Ct[1],Ct[0],0x69);\n",
    "}\n",
    "\n",
    "```\n",
    "\n",
    "This also works for 2-byte keys:\n",
    "\n",
    "```C\n",
    "ER16(Ct[1],Ct[0],0xdead);\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8a54a633",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tqdm import tnrange\n",
    "\n",
    "\n",
    "def calc_mean_from_trace(traces, plaintexts):\n",
    "\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "\n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[simple_speck(textin, (key << 8) + 0x00) for textin in textin_array]]).transpose()\n",
    "        \n",
    "        # The following line works for a one byte key\n",
    "        #hws = np.array([[simple_speck(textin, key) for textin in textin_array]]).transpose()\n",
    "        \n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "    \n",
    "    plt.figure()\n",
    "    plt.plot(maxcpa, 'orange')\n",
    "    plt.show()\n",
    "    guess = np.argmax(maxcpa)\n",
    "    print(f\"Key guess: (xored with) = \", hex(guess))\n",
    "    return guess\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "4fd256ea",
   "metadata": {},
   "outputs": [
    {
     "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(\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",
       "    );\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('style', 'box-sizing: content-box;');\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; position: absolute; left: 0; top: 0; 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",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\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",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.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",
       "    this.rubberband_canvas.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.rubberband_canvas.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",
       "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\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",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * 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",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\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 icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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,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m2nVqlX03nvvUYcOHSg7O7vB19bV1dG1115LTzzxRIOv6d+/f0rHkUxuQM1m6W9Y0BU9Z6+ffz/Xr/sHlxc9xuV53+XHcR2DtxUAAECsgACMgAD0YgqYiOill1467Yjho48+Sj179mxwP0YAPST/xyzoit+w1y94kOtLTK/t/IfNqWKzfuyngrcVAABArIAAjIAAJGInkN69e9vqunbt2iQnkAEDBlCnTp0a3F9fX0833HADPfLII40+JhqQC8Tbd+NQe33BT7h+7etcnv9DLstI4JgLg7cVAABArED/HREBKGFghg4dSsXFxdS3b19q164dbd26lYiI+vXrRw8//LD1+rfffpsmTpxIpaWlVFpaSu+//z61b9+enntOTTe+8MILlJubS5s2baIVK1bQI488Qi1atKDFixc32i40IBeIU8e2cfb6hY9w/Zq/cHnut7m87LdmPMDzgrcVAABArED/HREBSMSBoDt16kStWrWibt260bx586x9vXr1oh49eljlt956i66++mpq27YttW/fnq6//np65513qK6uznpN3759qWPHjtSqVSu64IIL6I477khaZ3g60IBcMKkzC7pdc+31MtK3+iUuS2BocRoZ6S50DwAAAID+O0ICMB1BA3LBmE+woDtQZK9f/DjXr3qBy5IbeO2r/DiiXfC2AgAAiBXovyEAXYEG5ILR57Ggq1xrr7e8g5/ncm530yv4n2ZO4DbB2woAACBWoP+GAHQFGpALRn2cBV3VOnv9sj5cv+JZLk+5RqWGSxhE2S0CNxUAAEC8QP8NAeiKQBpQbY1/xw6Tke1NAegIvL38Ka4v/D2XJ17J5bKR/Jg4I3hbAQAAxAoIQAhAV/jegFb+mSinLdHB1f4cP0xGnM2C7vAme33hH7h++e+4PK4jlyummgLQIKqvSz4eAAAA0EggACEAXeF7AxIHiI3/8ef4YZJzlikAt9jri/7I9Uuf5PKYC7m8O08JwLiOigIAAAgECEAIQFf43oCmfSF1tow4MLw1n9uRMnu9lSP411weeS6X9y9XAvDkseDtBQAAEBsgACEAXeF7A5rURcXAixvDW/K5Hd1ur1/1Itcv/qX5OlMoVq1XAvDEoeDtBQAAEBsgACEAXeF7Axp3qTkd+oQ/xw+T7DP53I7tsNevHmimfnuUqL5eib6j29XzmgPh2AwAACAWQABC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MR0/frzap1N3FLu+Q4YMoauuusoZ06+//rrzGrm+8Vx55ZX0yCOP0PLly2nJkiV0zTXXUJ8+fejAgQPha2QMd54k11fGcP0gBmCdMWjQIBo6dKiz78ILL6Thw4fX6Iiyy4gRI+jiiy+OfC6Xy9FZZ51FI0eODPcdPnyYevXqRb/73e+qdYiZxjdQklzT9vZ2ampqopaWlvA1W7dupRNPPJGmTZtWvYPPAHEG4PXXXx/7Hrm+pbFr1y5SStGcOXOISMZwufGvL5GM4XpCDMA64siRI9SlSxcaP368s/+OO+6gyy67rEZHlV1GjBhBPXr0oLPPPpv69etHN954I61fv56IiNavX09KKVq8eLHzns9+9rP0ta99rRaHmzl8AyXJNZ05cyYppWjPnj3Oa97//vfTj3/848ofdIaIMwB79epFvXv3pve85z1066230s6dO8Pn5fqWxtq1a0kpRcuWLSMiGcPlxr++RDKG6wkxAOuIrVu3klKK5s+f7+y/99576YILLqjRUWWXqVOn0tixY2np0qU0ffp0Gjx4MJ155pm0e/dumj9/PimlaOvWrc57vvGNb9AVV1xRoyPOFr6BkuSaaq2pW7dueZ/16U9/mr75zW9W9oAzRpQB2NLSQlOmTKFly5bR448/ThdffDFddNFFYScFub7JyeVydN1119Gll14a7pMxXD6iri+RjOF6QgzAOgIG4IIFC5z999xzD/Xv379GR/XW4cCBA3TmmWfSr371q/BGv23bNuc1t956K1155ZU1OsJsEWcAFrqmcTf3yy+/nL71rW9V9oAzRpQB6LNt2zZqamqicePGEZFc31L49re/TX379nWKC2QMl4+o6xuFjOHaIQZgHSEh4Mpz+eWX09ChQyUEXAYkBFxZkhiARETnn39+mLMm1zcZt99+O5177rm0YcMGZ7+M4fIQd33jkDFcG8QArDMGDRpEt912m7NvwIABUgRSBg4fPkznnHMO3X333WGy9/333x8+f+TIESkCKYG4IpBC1xQJ3qNHjw5fs23bNknwjiCJAbh7927q3r07Pfroo0Qk17cYuVyOvvOd79A73/lOWrNmTeTzMoY7T7HrG4WM4dohBmCdARmYhx9+mFauXEl33nkn9ezZkzZt2lTrQ8scd911Fz3zzDO0YcMGev755+naa6+lU089NbyWI0eOpF69etH48eNp2bJl9OUvf1lkYIqwf/9+am1tpdbWVlJK0QMPPECtra2hTFGSazp06FA699xzacaMGbR48WL65Cc/KRIPAYWu7/79++muu+6iBQsW0MaNG2n27Nn00Y9+lM455xy5vgm57bbbqFevXvTMM884MiQHDx4MXyNjuPMUu74yhusLMQDrkAcffJD69u1L3bp1o4EDBzol9EJyoN/V1NRE73znO+kLX/gCrVixInwegq9nnXUWde/enS677DKnWk3IZ/bs2XkirkopGjJkCBElu6aHDh2i22+/nU4//XQ6+eST6dprr6UtW7bU4Gzqj0LX9+DBg3TFFVdQ7969qampifr06UNDhgzJu3ZyfeOJurZKKXrkkUfC18gY7jzFrq+M4fpCDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBkMMQEEQBEEQhAZDDEBBEARBEIQGQwxAQRAEQRCEBuP/A3xRUDiSWmprAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Key guess: (xored with) =  0x22\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "34"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "calc_mean_from_trace(trace_array, textin_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "34b48e29",
   "metadata": {},
   "outputs": [],
   "source": [
    "def calc_mean_from_trace_two_byte_key(traces, plaintexts):\n",
    "\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "    \n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[simple_speck(textin, (key << 8) + 0x00) for textin in textin_array]]).transpose()\n",
    "\n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "\n",
    "    rkey_byte = int(np.argmax(maxcpa))\n",
    "    # Reset the arrays\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "    print(f\"Key guess (RKey): (xored with) = \", hex(rkey_byte))\n",
    "    \n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[simple_speck(textin, (rkey_byte << 8) + key) for textin in textin_array]]).transpose()\n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "\n",
    "    lkey_byte = np.argmax(maxcpa)\n",
    "    print(f\"Key guess (RKey): (xored with) = \", hex(lkey_byte))\n",
    "    print(f\"Full Key = \", hex((rkey_byte << 8) +lkey_byte))\n",
    "   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "12cba76a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Key guess (RKey): (xored with) =  0x22\n",
      "Key guess (RKey): (xored with) =  0x11\n",
      "Full Key =  0x2211\n"
     ]
    }
   ],
   "source": [
    "calc_mean_from_trace_two_byte_key(trace_array, textin_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "id": "655bc82e",
   "metadata": {},
   "outputs": [
    {
     "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(\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",
       "    );\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('style', 'box-sizing: content-box;');\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; position: absolute; left: 0; top: 0; 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",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\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",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.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",
       "    this.rubberband_canvas.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.rubberband_canvas.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",
       "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\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",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * 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",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\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 icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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,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qBhiAFYpn30m+QnlRK5veZHrW37kGpcXub7lR65xZREDsEqRP4zyIte3vMj1LT9yjcuLXN/yI9e4sogBWKXIH0Z5ketbXuT6lh+5xuVFrm/5kWtcWcQArFKampqovr6empqaKn0qX0nk+pYXub7lR65xeZHrW37kGlcWMQAFQRAEQRBaGWIACoIgCIIgtDLEABQEQRAEQWhliAEoCIIgCILQyhADUBAEQRAEoZUhBmAVMm3aNNp9992pffv2NGDAAHryyScrfUq5pL6+vqjtT/fu3be+XygUqL6+nnr27EkdOnSgwYMH06uvvlrBM65+FixYQEOHDqWePXuSUor+/Oc/B973uaZNTU00duxY+trXvkadOnWik046qVW3Y+LEXd9Ro0YVzelDDjkksI9c33CuuuoqOvDAA6lLly7UrVs3GjZsGC1btiywj8zh0vG5vjKHqwcxAKuM2bNnU21tLd1yyy20dOlSuuiii6hz5870/vvvV/rUckd9fT3tu+++tHr16q1jzZo1W9+fPHkybbPNNjR37lxasmQJDR8+nHr27Emff/55Bc+6unnggQfoF7/4Bc2dO9dpoPhc09GjR9Muu+xCjz76KC1evJiOOuoo6t+/P23ZsqWlf5yqI+76jho1ioYMGRKY05988klgH7m+4Zxwwgl022230auvvkovvfQSfec736FevXrRF198sXUfmcOl43N9ZQ5XD2IAVhkHH3wwjR49OrBt7733pgkTJlTojPJLfX099e/f3/leoVCgHj160OTJk7dua2pqoq5du9LNN9/cUqeYa2wDxeeaNjY2Um1tLc2ePXvrPitXrqS2bdvSQw891HInnwPCDMBhw4aFfkaubzLWrFlDSilasGABEckczhr7+hLJHK4mxACsIjZu3Eg1NTU0b968wPYLL7yQjjzyyAqdVX6pr6+nTp06Uc+ePWn33Xen4cOH0zvvvENERO+88w4ppWjx4sWBz5x88sl05plnVuJ0c4dtoPhc0/nz55NSij799NPAPt/85jfp8ssvL/9J54gwA7Br167UrVs3+sY3vkHnnHMOffTRR1vfl+ubjLfeeouUUrRkyRIikjmcNfb1JZI5XE2IAVhFrFy5kpRStHDhwsD2SZMmUd++fSt0VvnlgQceoDlz5tArr7xCjz76KA0ePJi6d+9Oa9eupYULF5JSilauXBn4zLnnnkvHH398hc44X9gGis81nTVrFtXV1RUd67jjjqPzzjuvvCecM1wG4OzZs+lvf/sbLVmyhO677z7q378/7bvvvls7Kcj19adQKNBJJ51E3/72t7dukzmcHa7rSyRzuJoQA7CKgAG4aNGiwPaJEyfSXnvtVaGz+urwxRdfUPfu3em6667beqNftWpVYJ9zzjmHTjjhhAqdYb4IMwCjrmnYzf3YY4+l888/v7wnnDNcBqDNqlWrqLa2lubOnUtEcn2TcMEFF1Dv3r0DxQUyh7PDdX1dyByuHGIAVhESAi4/xx57LI0ePVpCwBkgIeDy4mMAEhH16dNna86aXF8/xo4dS7vuuistX748sF3mcDaEXd8wZA5XBjEAq4yDDz6YxowZE9jWr18/KQLJgKamJtpll13oiiuu2JrsffXVV299f+PGjVIEkoCwIpCoa4oE77vvvnvrPqtWrZIEbwc+BuDatWupffv2NGPGDCKS6xtHoVCgn/70p7TzzjvTm2++6Xxf5nDpxF1fFzKHK4cYgFUGZGCmT59OS5cupXHjxlHnzp3pvffeq/Sp5Y7x48fTE088QcuXL6dnnnmGhg4dSttss83Wazl58mTq2rUrzZs3j5YsWUIjRowQGZgY1q1bRw0NDdTQ0EBKKZo6dSo1NDRslSnyuaajR4+mXXfdlf7xj3/Q4sWL6eijjxaJh/8j6vquW7eOxo8fT4sWLaJ3332XHn/8cRo0aBDtsssucn09GTNmDHXt2pWeeOKJgAzJ+vXrt+4jc7h04q6vzOHqQgzAKmTatGnUu3dvqqurowEDBgRK6AV/oN9VW1tLO++8M33ve9+j1157bev7EHzt0aMHtW/fno488shAtZpQzOOPP14k4qqUolGjRhGR3zXdsGEDjR07lnbYYQfq2LEjDR06lD744IMK/DTVR9T1Xb9+PR1//PHUrVs3qq2tpV69etGoUaOKrp1c33Bc11YpRbfddtvWfWQOl07c9ZU5XF2IASgIgiAIgtDKEANQEARBEAShlSEGoCAIgiAIQitDDEBBEARBEIRWhhiAgiAIgiAIrQwxAAVBEARBEFoZYgAKgiAIgiC0MsQAFARBEARBaGWIASgIgiAIgtDKEANQEARBEAShlSEGoCAIgiAIQitDDEBBEARBEIRWhhiAgiAIgiAIrQwxAAVBEARBEFoZYgAKgiAIgiC0MsQAFARBEARBaGWIASgIgiAIgtDKEANQEARBEAShlSEGoCAIgiAIQitDDEBBEARBEIRWhhiAgiAIgiAIrQwxAAVBEARBEFoZYgAKgiAIgiC0MsQAFARBEARBaGWIASgIgiAIgtDKEANQEARBEAShlSEGoCAIgiAIQitDDEBBEARBEIRWhhiAgiAIgiAIrQwxAAVBEARBEFoZYgAKgiAIgiC0MsQAFARBEARBaGX8f0ALa8QgxrPbAAAAAElFTkSuQmCC\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "d48ec17d",
   "metadata": {},
   "source": [
    "## Testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "707816a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tqdm import tnrange\n",
    "\n",
    "\n",
    "def get_keybyte(traces):\n",
    "\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "\n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[PowerRightHalfKey(textin, key) for textin in textin_array]]).transpose()\n",
    "        \n",
    "        # The following line works for a one byte key\n",
    "        #hws = np.array([[simple_speck(textin, key) for textin in textin_array]]).transpose()\n",
    "        \n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "    \n",
    "    plt.figure()\n",
    "    plt.plot(maxcpa, 'orange')\n",
    "    plt.show()\n",
    "    guess = np.argmax(maxcpa)\n",
    "    print(f\"Key guess: (xored with) = \", hex(guess))\n",
    "    return guess\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "e5847cb2",
   "metadata": {},
   "outputs": [
    {
     "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(\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",
       "    );\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('style', 'box-sizing: content-box;');\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; position: absolute; left: 0; top: 0; 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",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\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",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.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",
       "    this.rubberband_canvas.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.rubberband_canvas.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",
       "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\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",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * 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",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\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 icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Key guess: (xored with) =  0x22\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "34"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_keybyte(trace_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "id": "5d269b9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tqdm import tnrange\n",
    "\n",
    "\n",
    "def get_keybytel(traces):\n",
    "\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "\n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[speck_keyschedule(textin, (0x00 << 8) + key, [0x2211, 0x00dd, 0xa8dc]) for textin in textin_array]]).transpose()\n",
    "        \n",
    "        # The following line works for a one byte key\n",
    "        #hws = np.array([[simple_speck(textin, key) for textin in textin_array]]).transpose()\n",
    "        \n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "    \n",
    "    plt.figure()\n",
    "    plt.plot(maxcpa, 'orange')\n",
    "    plt.show()\n",
    "    guess = np.argmax(maxcpa)\n",
    "    second = np.argsort(maxcpa, axis=0)[-2]\n",
    "    print(f\"Key guess: (xored with) = \", hex(guess))\n",
    "    return maxcpa\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "2f80bf9c",
   "metadata": {},
   "outputs": [
    {
     "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(\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",
       "    );\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('style', 'box-sizing: content-box;');\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; position: absolute; left: 0; top: 0; 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",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\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",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.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",
       "    this.rubberband_canvas.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.rubberband_canvas.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",
       "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\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",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * 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",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\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 icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Key guess: (xored with) =  0x9c\n"
     ]
    }
   ],
   "source": [
    "cpa2 = get_keybytel(trace_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b805e3bd",
   "metadata": {},
   "source": [
    "## The following functions receives a new roundkey each"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "61faac51",
   "metadata": {},
   "outputs": [],
   "source": [
    "def recv_roundkey(traces, roundkeys):\n",
    "\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "    \n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[speck_keyschedule(textin, (0x00 << 8) + key, roundkeys) for textin in textin_array]]).transpose()\n",
    "\n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "\n",
    "    rkey_byte = int(np.argmax(maxcpa))\n",
    "    # Reset the arrays\n",
    "    maxcpa = [0] * 256\n",
    "\n",
    "    t_bar = mean(traces) \n",
    "    o_t = std_dev(traces, t_bar)\n",
    "    print(f\"Key guess (RKey): (xored with) = \", hex(rkey_byte))\n",
    "    \n",
    "    for key in range(0, 256):\n",
    "        \n",
    "        hws = np.array([[speck_keyschedule(textin, (key << 8) + rkey_byte, roundkeys) for textin in textin_array]]).transpose()\n",
    "\n",
    "        hws_bar = mean(hws)\n",
    "        o_hws = std_dev(hws, hws_bar)\n",
    "        correlation = cov(traces, t_bar, hws, hws_bar)\n",
    "        cpaoutput = correlation/(o_t*o_hws)\n",
    "        maxcpa[key] = max(abs(cpaoutput))\n",
    "\n",
    "    lkey_byte = np.argmax(maxcpa)\n",
    "    print(f\"Key guess (RKey): (xored with) = \", hex(lkey_byte))\n",
    "    print(f\"Full Key = \", hex((lkey_byte << 8) +rkey_byte))\n",
    "    return int((lkey_byte << 8) +rkey_byte)\n",
    "   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "b10cb530",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def get_roundkey(firstkey):\n",
    "    initial_key = [firstkey]\n",
    "    \n",
    "    for i in range(4):\n",
    "        next_rk = recv_roundkey(trace_array, initial_key)\n",
    "        initial_key.append(next_rk)\n",
    "    print([hex(k) for k in initial_key])\n",
    "    return initial_key"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e095746f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Key guess (RKey): (xored with) =  0xdd\n",
      "Key guess (RKey): (xored with) =  0x1\n",
      "Full Key =  0x1dd\n",
      "Key guess (RKey): (xored with) =  0x25\n",
      "Key guess (RKey): (xored with) =  0x57\n",
      "Full Key =  0x5725\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_732912/2599222587.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mget_roundkey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0x2211\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m/tmp/ipykernel_732912/2422091008.py\u001b[0m in \u001b[0;36mget_roundkey\u001b[0;34m(firstkey)\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m         \u001b[0mnext_rk\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrecv_roundkey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrace_array\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m         \u001b[0minitial_key\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnext_rk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mhex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0minitial_key\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/tmp/ipykernel_732912/2509598962.py\u001b[0m in \u001b[0;36mrecv_roundkey\u001b[0;34m(traces, roundkeys)\u001b[0m\n\u001b[1;32m     13\u001b[0m         \u001b[0mhws_bar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhws\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m         \u001b[0mo_hws\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstd_dev\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhws\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhws_bar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m         \u001b[0mcorrelation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcov\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtraces\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt_bar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhws\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhws_bar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     16\u001b[0m         \u001b[0mcpaoutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcorrelation\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo_t\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mo_hws\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     17\u001b[0m         \u001b[0mmaxcpa\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcpaoutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/tmp/ipykernel_732912/1805922937.py\u001b[0m in \u001b[0;36mcov\u001b[0;34m(X, X_bar, Y, Y_bar)\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcov\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_bar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mY\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mY_bar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mX_bar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mY\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mY_bar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "get_roundkey(0x2211)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "id": "bb8cbe04",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_key_from_roundkey(roundkey):\n",
    "    if len(roundkey) != 5:\n",
    "        raise Exception(\"Wrong length of roundkey\")\n",
    "    key = [roundkey[0]]\n",
    "    for i in range(4):\n",
    "        for keybyte in range(2**16):\n",
    "            _, out = ER16(keybyte, known_keys[i], i)\n",
    "            if out == roundkey[i+1]:\n",
    "                key.append(keybyte)\n",
    "                print(f\"Found: {hex(keybyte)}\")\n",
    "    return [hex(k) for k in key]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "id": "4e03294a",
   "metadata": {},
   "outputs": [],
   "source": [
    "known_keys = [0x2211, 0x00dd, 0xa8dc, 0x349c, 0xb5de]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "id": "17125a64",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found: 0x4433\n",
      "Found: 0x6655\n",
      "Found: 0x8877\n",
      "Found: 0x8899\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['0x2211', '0x4433', '0x6655', '0x8877', '0x8899']"
      ]
     },
     "execution_count": 214,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_key_from_roundkey(known_keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "id": "f50a9b00",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found: 0x4433\n",
      "Found: 0x6655\n",
      "Found: 0x1be0\n",
      "Found: 0x933\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['0x2211', '0x4433', '0x6655', '0x1be0', '0x933']"
      ]
     },
     "execution_count": 246,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_key_from_roundkey([8721, 221, 43228, 51811, 18653])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "83d085f6",
   "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.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}