{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Azimuthal averaging in log-scaled bins\n",
    "\n",
    "PyFAI has been optimized for histogramming data on uniform bins. \n",
    "Neverthless one can perform this histogramming in a different space. \n",
    "This cookbook explains how to choose the proper radial unit. \n",
    "\n",
    "First of all we will generate an image with some realistic noise and integrate it. \n",
    "Then we will observe the effects of the output space and finally we will create our own output space.\n",
    "\n",
    "## Guinier-like scatterer image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib nbagg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#import ipympl\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/users/kieffer/VirtualEnvs/py3/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import pyFAI, pyFAI.azimuthalIntegrator\n",
    "from pyFAI.gui import jupyter\n",
    "det = pyFAI.detector_factory(\"Pilatus100k\")\n",
    "ai = pyFAI.azimuthalIntegrator.AzimuthalIntegrator(dist=1, detector=det)\n",
    "ai.wavelength=1e-10\n",
    "q = ai.array_from_unit(unit=\"q_nm^-1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Guinier-like scatterer\n",
    "I = 1e6*numpy.exp(-q**2/2)\n",
    "#Add some noise to make it look real\n",
    "Y = numpy.random.poisson(I)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://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",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\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",
       " * http://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",
       "    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",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\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",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "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\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(2)\n",
    "jupyter.display(I, ax=ax[0], label=\"Synthetic\")\n",
    "jupyter.display(I, ax=ax[1], label=\"Poissonian \")\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://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",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\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",
       " * http://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",
       "    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",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\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",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "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\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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iYlRcnKyDRM5E6FrvTvvvFNxcXF2j+EYNTU1Ki8v19tvv624uDj9+c9/tnskx8jMzFRUVJRKSkoI3QCqD92ePXsqLCxMl156qebNm8e1+wgoQjfItGvXTmlpaX77+/btq3HjxtkwkTMRutbavn27QkNDNX/+fLtHcYwOHTp438xz9913c9lCgJSVlalXr15aunSpJBG6AZSdna0ZM2YoJydH2dnZGj9+vEJCQvTII4/YPRochNANMoRuyyB0rXPgwAHFxMRo6NChxFgAffDBB9q+fbvmz5+vHj166He/+53dIznCww8/rKuvvtr7KiOha63x48erY8eOOnHihN2jwCEI3SDDpQstg9C1RlFRkfr166f+/furuLjY7nEca+3atTIMQ7t27bJ7lKC2b98+tW/fXhs2bFBRUZGKioq0bt06GYaht956S6WlpXaP6DibNm2SYRgpaY//AAAOHElEQVR677337B4FDkHoBpn4+HiNHj3aZ19xcTFvRgswQjfwysvLNWTIEPXq1UsFBQV2j+NoBw4ckGEYWrZsmd2jBLX6V2/NNv4ZEXj1ofv+++/bPQocgtANMqmpqYqIiPB5l+qSJUu4vViAEbqBVV1drREjRuiCCy7Q7t277R7H8ZYvXy7DMLRz5067RwlqRUVF2rp1q882b948GYahJUuWcPmCBcaNG8elCwgoQjfI1H9gRGJionJycpSenq7IyEg+MCIAysrKlJmZqczMTA0ePFh9+vTxfl1YWGj3eEFt3LhxMgxDc+fO9bkx/I4dO/gEr3N08803Ky0tTRs3btSmTZs0a9YsdenSRTfddJPdozkS1+gGzqhRo5SamqoNGzZow4YNuueee2QYhlJSUuweDQ5C6AahvLw8DR06VJ06dVLPnj01adIkPgI4APbu3Wv6vyi3bt1q93hBLS4uzvTc7t271+7xgtojjzyifv366fzzz5fL5dKAAQOUlpamiooKu0dzJEI3cKZMmaLLLrtM4eHh6tChgwYMGKDnnnvO7rHgMIQuAAAAHInQBQAAgCMRugAAAHAkQhcAAACOROgCAADAkQhdAAAAOBKhCwAAAEcidAEAAOBIhC4AAAAcidAFAACAIxG6AAAAcCRCFwDQ5owfP14xMTEyDP41CDgZf4cDANqcbdu26dChQ4Qu4HD8HQ5AkvTiiy9q0KBBioiIkMvlUt++ffXHP/5RpaWlAf05y5YtU0ZGRpP3n4ukpCQNGDAgoM/ZWlhxvgKttrZWV111lRYtWmT3KKYaC917771Xv/vd72yYBkCgEboANGfOHIWGhmrSpEnKzs7Whg0blJqaqiuuuEIHDhwI6M8aOXKkEhMTm7z/XHzxxRf65JNPAvqcrYUV5yvQVq1apejoaFVWVto9iqnGQveLL75Q+/bt9fnnn9swEYBAInQBKDY2VuPGjWv0e7W1tQH9WS0Ruh6Pp1XHVSAEw/lKSEjQgw8+GPDnPZOBAweqW7duftvNN9/sd6zZpQs33nij7rvvPqtHBWAxQheAwsPDlZKScsbj3n77bQ0dOlSdO3dWRESEhgwZorfffluS9O6772rEiBH6wQ9+oPPPP18DBw5UZmamz+OTkpJkGIbP5na7TffX2759u2644QaFh4crMjJSSUlJOnbsmM/zDhgwQOvWrVO/fv3Url07vf76636XLtR/nZOTo759++r8889XQkKC/v3vf/v9rgsWLNCFF16o8PBwDR8+XNu3b5dhGFqzZk2j5yYjI0Pt2rXTkSNHfPZ/9dVXCgkJ8TkXZ/p9znS+z3S+MjMz1b9/f7Vv316xsbF66KGHdPLkyTOeLzPHjx/Xn/70J3Xr1k0RERG69957tWDBAkVGRpo+5ssvv1RISIjef/99n/21tbVyuVx6+umnNX36dF100UXq3Lmz7rzzTlVVVfkc27VrV82ZM0cPPvigoqKi5HK5NGXKFEnS6tWrNWDAAIWHh2vYsGH69ttvTWc5HbPQXbhwobp3767q6uqzel4ArQOhC0Dx8fHq1q2bli5dqsOHDzd6zLZt23Teeefphhtu0MqVK5Wdna3p06dr+fLlkuquGZ0zZ442btyozZs3a+rUqQoNDdVrr73mfY4vvvhCCQkJGjhwoHbs2KEdO3bowIEDpvuluthr3769Ro8erfXr1+vll19WXFycz6tzSUlJuuCCC3TppZfqxRdf1ObNm7Vv375GQ7d79+668sortWLFCq1Zs0ZxcXEaPHiwz++6evVqGYahe++9Vzk5OZo+fbouvvji04ZucXGxOnTooMWLF/vsT0tLU0REhMrLy5v8+5zpfJ/ufOXk5MgwDI0dO1avv/665syZo/bt2+uee+454/lqTHV1tYYMGaLLL79cr7zyijZu3Khrr71W0dHRSkhIaPQxkrRkyRJ17NjRLxS//PJLGYahSy65RBMnTlROTo7mzp2rkJAQLVmyxHvc/v37ZRiGLrroIj3wwAPatGmT7rnnHhmGoQkTJighIUFZWVnKyMhQhw4d9PDDD5vOcjpmofvRRx/JMAzt2rXrrJ4XQOtA6ALQv/71L1166aXeVwd79+6tSZMm6dChQ95jfvKTn6h///6qqak54/N5PB5VV1frtttu06233urzveZeunD99df7BdV7770nwzD0zjvvSGp4pfj7UdJY6IaGhvpce/n888/LMAyfa5Gvvvpq3XTTTT7P9cADD5w2dOt/hxtvvNFn36BBg/Sb3/ymWb+PdObzbXa+rr32Wl1//fU+++bMmaOQkBBvzJqdr8Y8/vjjioyMVGFhoXffxx9/LMMwNHHiRNPHjR8/XldeeaXf/qysLBmGodTUVJ/9V1xxhSZPnuz9et26dTIMQ3PmzPHuO3LkiAzD0KBBg3xeoR4+fLhGjx59xt/lVElJSYqNjZVhGIqNjdXYsWN9vl9dXa2wsDAtXLiwWc8LoHUhdAFIkqqqqrRhwwbdd999uvLKK2UYhnr27KkDBw7oxIkTCg0N1dy5c00ff/ToUU2YMEG9evVSWFiYN5ovu+wyn+OaE7plZWUKCwvTggULVF1d7bO5XC499dRTkuqiJSoqyu85GwvduLg4n2PqI3PHjh2SGgLnmWee8TnurbfeOmPoLlu2TKGhofrmm28kSfn5+TIMQ+vWrWvW79OU893Y+aqpqdF5552np59+2mf/vn37ZBiGXnnlFe95aOx8fZ/H41FUVJT3coF6paWlMgxDf/vb30wfe+utt2rYsGF++2fMmKHOnTuroqLCZ39UVJSefPJJ79ePPfaYIiIifK4dPnDggAzD0IoVK3wee/311+sPf/jDGX+f5urWrVuTLukB0HoRugAalZ2drbCwMN1///3ewFi2bJnp8SNGjFDPnj31zDPPaMuWLcrNzdWYMWP8wrI5oVtQUOB3Leqp2wMPPCCpLtx+/OMf+z2n2TW6p/rwww9lGIa2bt0qSfrmm28ajanPPvvsjKF74sQJhYeHa/78+ZKkmTNnqmvXrt5XH5v6+zTlfDd2vurvC1t/OUm9iooKGYbhjXez8/V99a/c1p+benv27JFhGMrNzTV97M9//nP94he/8Ns/ZswYv8s0CgsLZRiGcnJyvPt+/etf65ZbbvE5buPGjTIMw+866MjISL+4D4SYmBhb3kwHIHAIXQCmrrrqKt1yyy1nfIWxoqJCoaGhfq+C/upXvzqn0D1x4oRCQkKUkpKi3Nxcv+2rr76SZH6/3LMJ3XN5RVeqC7QhQ4ZIkvr27etzbWxTf59zfUW3PrTrNfaKblPuL1wflvn5+T77FyxYoLCwML9XZc3Ow6kuu+wyv3h84403ZBiGz6Uyl19+uR566CGf42bPnq0LL7yw0d/tH//4xxl/n+YKDw/X448/HvDnBdByCF0APoFRr7y8XD169NBvf/tbSXXXjA4YMEAej8fv2KKiIhmGob/+9a/efUeOHFHnzp39QnfMmDG69tpr/Z7DbP9Pf/pT3XbbbaedP5ChK9Vdo/vzn//c57i//OUvTQrdNWvWKCQkxBuJb7zxRrN/H+n051syP1/XXXed3zXATzzxhEJDQ32u0W1K6NZf1rFp0ybvvqKiIvXq1UtXXHHFaR+bkpKimJgYn33l5eUKCwvzBne9J5980udSioqKCoWFhfm9on377bf7vUr82muvyTCMRu9acS7qX2VevXp1QJ8XQMsidAGoR48e+v3vf68VK1borbfe0vLlyzVkyBCdd9552rlzp6SGuwD87Gc/U2ZmpjZt2qTHHnvM+7/JBw0apIsvvlirVq3Sq6++qoEDB+riiy/2C91p06YpPDxca9asUW5urg4ePHja/e+88446dOigO+64Q2vWrNGWLVv0wgsv6I477vC+mSrQofvqq6/63HVhxowZiouLk2EYWrt27WnPZWVlpbp06aKYmBhFRUX5vZmsKb9PU8632fmqv+tCUlKSsrOzlZaWpg4dOvjddaEpoVtZWakLL7xQ/fr107p165SZmalBgwapZ8+euv3220/72Po56q9XlqTc3FwZhqHdu3f7HHvXXXf5vPlv165dMgxDeXl5PsddccUVftcLz5o1SxdddNEZf5fmqv8Plcb+IxBA8CB0AejZZ5/VzTffrJiYGLVr105du3bVLbfcou3bt/sct23bNiUkJKhTp05yuVy6/vrr9e6770qSPv/8c++9YePi4vT000/rvvvu8wvdw4cPa+TIkYqMjPS5/6vZfkl6//33NXz4cLlcLnXq1EmXXXaZJk6c6L0VWqBDV5Lmz5+v2NhYdezYUcOGDdPatWub/L/I6+9qMGHChEa/f6bfp97pzvfpztfKlSvVv39/nXfeeYqJiVFycnKj99Ftip07d+rKK69Ux44dNWjQIG3atEkXXnihZs+efdrHVVVVqVu3bkpPT/fuS09PV8eOHf3i/8c//rEmTZp02uPqX+X9/vXHt912m0aMGNGk36U5Jk6cqPj4+IA/L4CWRegCQBPMmzdPYWFhfm+Eamvqb/G1cePGMx57//33+10CEgxqamoUHR2t559/3u5RAJwjQhcAvqewsFD333+/1q5dq82bN2vmzJkKDw9XUlKS3aPZrv6NY/WXSpxOQUGBwsPD9emnn7bAZIHz0ksv6Yc//CGfigY4AKELAN9TXFys4cOHq3v37mrXrp1iY2P1l7/85bR3GWgr0tLS1L179yYfv2LFCr355psWThR4L730krZt22b3GAACgNAFAACAIxG6AAAAcCRCFwAAAI5E6AIAAMCRCF0AAAA4EqELAAAARyJ0AQAA4Ej/H6ugeihXkYIUAAAAAElFTkSuQmCC\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "jupyter.plot1d(ai.integrate1d(I, 500),ax=ax, label=\"Synthetic\")\n",
    "ax.plot(*ai.integrate1d(Y, 500), label=\"Poissonian\")\n",
    "ax.legend()\n",
    "ax.semilogy()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Selection of the log-space rebinning\n",
    "\n",
    "In this section we see how to switch to log-scale at the integration level (and revert back to q_nm^-1 for plotting).\n",
    "\n",
    "PyFAI does not like negative radial units. Hence log(q) has to be prohibited. I would recommend the $arcsinh$ functions which is a well behaved function from R -> R with a slope at the origin of 1 and a log-scale behaviour."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://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",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\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",
       " * http://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",
       "    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",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\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",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "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\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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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Nm38Qnfx4sW1/oPbkKFbXFys9u3b69FHH5Uk5eXlqXXr1urZs2e1595222365z//GfDznPQ7BtB8uT1exafkaHhUQo03bLipf5RenRqvmRtSdSSfb22bI0LXHKFrkTMKXXeFlLPf3oc78L+Or8mpoRsaGqqf/exnysvL8/35+vXr5XK5NG3aNElSRESEXC6X1q5d63tOVlaWzj//fL/QHT58uC655JKAnx0odN1utyorK32Pl156SS+99JLfz9xu/7Mc161bp3POOUeTJk1Sz549dfXVVys3N7fGv+a77ror4NoIXQB2Kat0a0nCUb07Z5t+OWRRtbj95ZBFei98m2J3HVFJOWfaNneErjlC1yJnFLo5+6WwlvY+cvbX+6/11NB98MEH1aNHj2rPadeunV5//XVJUlhYmH7+859Xe85DDz3kF7r/+te/dMMNNwT87ECh261bN7lcroCPml7bt29fnXfeeXK5XIqKiqrxvf/zn//ommuuCbg2QhdAYyqtcCt21xG9NXOLOg+MqRa3D45ZpuFRCYpPyZHbwwkJTkLomiN0LRKsoduhQwf9/e9/r/acX/3qV3r22WclSX/729908803V3vOCy+84Be6vXr1UqdOnQJ+dqDQ3bNnj+Lj432Pxx57TI899pjfz/bs2VPtdbt27ZLL5dINN9zgd+Hbqfr27asrrrgi4NoIXQBWKyl3K3rnYf3zuy3qWMPFZD0+Xa3PlicrOavQ7qXCQoSuOULXIsG6deHBBx/U008/Xe05Z/KNbmhoqFq3bh3wsxv61AW32627775bHTt21LnnnqsxY8bU+Lw33nhDHTp0CPhehC4AKxSXVypi+2G9MX1ztfNt2/WO0HOfrdWU1QfYbxtECF1zhK5FgvVitN69e+tnP/uZ3w0VNm7cWOMe3TVr1vieU9Me3cmTJ+unP/2pSkpKTD+7oUN32LBhOv/885WYmKgRI0bo/PPPV0JCQrXnPfroo3riiScCvpeTfscA7FXh9mhJwlH967st1eL22t4R+tMXazVtbQpHgDVV5UVSzgHL3p7QNUfoWiRYQ/fkqQt33323FixYoOnTp6tNmzbq2LFjtVMX2rZtq+nTp2vBggW688471bp1a91+++2+901KSpLL5dK6dev8Pq+4uFjh4eEKDw9X165d1bFjR99/zsrKCrjOQKG7bds2nXvuuRo3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\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/users/kieffer/VirtualEnvs/py3/lib/python3.5/site-packages/ipykernel_launcher.py:4: RuntimeWarning: invalid value encountered in log1p\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "x = numpy.linspace(-10, 10, 1000)\n",
    "fig, ax = plt.subplots()\n",
    "ax.plot(x, numpy.arcsinh(x), label=\"arcsinh\")\n",
    "ax.plot(x, numpy.log1p(x), label=\"log(1+x)\")\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://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",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\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",
       " * http://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",
       "    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",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\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",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "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\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAILCAYAAAAHaz/JAAAgAElEQVR4nOzdeVxN+f8H8FMMKsrY9xjGVrbsY7QQBs0QY5lhxGRfBj/rMCNrlCXbJBqiQqlkUEolayhkbZVW2letd3v9/rjfrk733pbr3pbr/Xw8zuMxnc4953Ovj+nl0/vz+TAghBBCCCFECTG13QBCCCGEEEIUgYIuIYQQQghRShR0CSGEEEKIUqKgSwghhBBClBIFXUIIIYQQopQo6BJCCCGEEKVEQZcQQgghhCglCrqEEEIIIUQpUdAlhBBCCCFKiYIuIYQQQghRShR0CSGEEEKIUqKgSwghhBBClBIFXUIIIYQQopQo6BJCCCGEEKVEQZcQQgghhCglCrqEEEIIIUQpUdAlhBBCCCFKiYIuIYQQQghRShR0CSGEEEKIUqKgSwghhBBClBIFXUIIIYQQopQo6BJCCCGEEKVEQZcQQgghhCglCrqEEEIIIUQpUdAlhBBCCCFKiYIuIYQQQghRShR0CSGEEEKIUqKgSwghhBBClBIFXUIIIYQQopQo6BJCCCGEEKVEQZcQQgghhCglCrqEEEIIIUQpUdAlhBBCCCFKiYIuIYQQQghRShR0CSGEEEKIUqKgSwghhBBClBIFXUIIIYQQopQo6BJCCCGEEKVEQZcQQspgGAZmZma13Yw6iz4fQkh9QkGXEFLnWFpaYvr06dDW1gbDMOjVq5fUaw0MDMAwjOho0qQJ2rVrB0NDQ2zbtg2xsbHVevbnBrnAwEBYWFggOztb5nvUpuzsbFhYWCAwMFDi9ynoEkLqEwq6hJA6h2EYtGzZEuPHj0fTpk0rDbpfffUVnJyc4OTkhDNnzsDKygqmpqZo1KgRGjdujCNHjlT52UVFReBwODK33cLCAgzDVDtg1xWxsbFgGAYWFhYSv/+5nw8hhNQkCrqEkDonJiZG9N/a2tqVBt3GjRtLvU+fPn3AMAwuXbok93ZKUpeCbm5ubrVfU1nQJYSQ+oSCLiGkTvucoAsAYWFhUFVVRY8ePar0PEm/mi89FxQUBH19fairq6NFixYwNzfHx48fWW0pW0ZRepQNjTk5Odi4cSO6d++ORo0aoVWrVpg9ezYr3JdKSEjAzJkzoaWlhaZNm8LY2BihoaEwMDCAtrY261ptbW0YGBggNDQUP/zwA7S0tNC8eXMAQF5eHrZu3Yphw4ahZcuWaNSoEbp3745NmzahoKBAdA8HBweJ7S/7LGmlCw4ODhg8eDDU1NTQtGlTGBoawtfXV+y60naGh4dj0qRJaNq0KTQ1NTF9+nQkJydX8CdDCCHVR0GXEFKnfW7QBQB9fX0wDIOIiIhKnyct6A4YMAAtWrTAunXrYGdnh9mzZ4NhGCxatEh03c2bN2FqagqGYWBjYyMqp3jx4gUAYcjt27cvNDQ0sGrVKtjZ2WH79u1o27YtWrVqhbi4ONG9srKy0KVLFzRo0ABLly6Fra0tFi5ciK+//ho9evSQGHS7deuG5s2bw9zcHHZ2drC0tAQAhIeHo23btli+fDkOHz6M48ePY8aMGVBRUcH48eNF94iJiYGNjQ0YhoGpqamo/Z6enhV+Pn/++ScYhsHgwYNx4MAB7N69G926dYOKigqcnZ3F2tmjRw+0bdsWS5cuxYkTJ7B06VKoqKhg3Lhxlf75EEJIdVDQJYTUafIIuqtWrQLDMLh69Wqlz5MWdFVUVPDo0SPW+UmTJqFhw4asUd2KShf++OMPNG7cGE+fPmWdj4uLQ7NmzVjP3bRpExiGwenTp1nXHjlyRGyUFYBo4p69vb3Yc0tKSiTW1f71119gGAaPHz8WnausdKH85xMZGQkVFRUMHz4cxcXFovMZGRlo164dvv76a+Tn54u109XVlXXf5cuXV/kfI4QQUlUUdAkhdZo8gu7WrVvBMIzY6KIk0oLud999J3btgQMHwDAMXr16JTonLegKBAK0bNkSY8aMQXp6utgxbtw4tG/fXnR979690bp1a/B4PNZ9SkpKoKmpKTHotmjRQuz68rhcLrKyspCeno7bt2+DYRgcPXpU9P3qBl1ra2swDAMPDw+xa3fu3AmGYXDt2jVWOzt06CB2rbu7u9i1hBDyuSjoEkLqtLoyojt37lyxa0trWm/fvi06Jy3opqamSqx/LXuoqqqKrm/cuDFGjhwpsY0DBw6UGHSHDh0q9X3Z2dmhf//+aNCggdhzd+zYIbquukF36dKlUkdiPT09wTAMa9ULbW1tfP/992LXBgYGgmEYnD17Vup7IISQ6qKgSwip0+RZoxsZGVnp8yqajFZeadAtu+astKCbkpIChmFgZGQEPz8/qUcpWYKugYGBxOtL627Hjx8Pe3t7eHl5wc/PD2fPnhULtTURdCW1szToOjg4SHwuIYTIgoIuIaROk9eqCz179qzS8z436G7fvl1i0OXz+WjevDn09PSq1A5ZShekBd1Bgwaha9eu4PP5rPM3btwQC7VxcXFyK13YtWsXGIbB9evXK20nBV1CiCJQ0CWE1GnyWkfX3d29Ss/73KBbWrdbfsIZAKxYsQIMw8DFxUXis1NTU0X/vXHjxmpPRpMWdAcPHoxu3bqxQjOXyxUth1Y21GZkZIBhGKxatUrivcp/FlFRUVBRUcHIkSNRUlIiOp+ZmYn27dtLnIxGQZcQUlMo6BJC6hxHR0fs2rULu3btQvPmzdGqVSvR18eOHWNdK2lnNGtra0ybNk20M1r511Tkc4Pu/fv3wTAMjI2N4eDggIsXL4omq+Xk5GDgwIFQUVHBjBkzYGNjA1tbW2zcuBG6urqsZ2RkZKBz585o0KABli1bBltbWyxatAgtWrRAjx490LVrV1ZbKgq6e/fuBcMwGDduHE6cOAErKysMGDAAQ4YMkTh626NHD7Ru3RqHDx/GxYsXWbXNFS0vNmTIEBw8eBB79uzBN998I3V5MQq6hJCaQkGXEFLnSNt4QdJIZvlrGzdujLZt28LAwADbtm2r9g5lnxt0AcDKygrdunVDw4YNxYJkQUEBdu7cCV1dXTRp0gRNmzZF7969sXDhQrHly+Li4jBjxgxoampCQ0MDxsbGeP78OfT09NCnTx/WtRUFXR6PB0tLS9EmFV26dMGGDRsQFhYmMeg+fvwY3333HdTV1au8YcSZM2egp6eHJk2aQENDAwYGBvDx8RG7joIuIaQmUdAlhJB6hMvlonnz5pgwYUJtN4UQQuo8CrqEEFJHld2et1Rpje7BgwdroUWEEFK/UNAlhJA6ysDAAHPnzoWNjQ2OHj2KWbNmgWEY9OzZk7UbGyGEEMko6BJCSB114MABDBgwAFpaWvjqq6/QpUsXLF++HGlpabXdNEIIqRco6BJCCCGEEKVEQZcQQgghhCglCrqEEEIIIUQpUdAlhBBCCCFKiYKugpSUlCAkJATx8fFISkqigw466KCDDjroUMgRHx+PkJAQ1jbcRIiCrpzt378fbdu2xddffy11Zyc66KCDDjrooIMOeR8hISG1HYPqHAq6ChIfHy/qdLX9Lz066KCDDjrooEN5j5CQEDAMg/j4+NqOP3UOBV0FSUpKAsMwSEpKqu2mEEIIIUSJUeaQjoKuglCnI4QQQkhNoMwhHQVdBaFORwghhJCaQJlDOgq6CkKdjhBCCCE1gTKHdBR0FYQ6HSGEEEJqAmUO6SjoSpCamooBAwaIjo4dO2LgwIHVugd1OkIIkUwgECAtLQ0JCQmIi4ujgw46KjgSEhKQlpYGgUAg9e8UZQ7pKOhWwa+//op9+/ZV6zXU6QghRJxAIEBiYiLCwsLw9u1bxMbG1nqQoIOOunrExsbi7du3CAsLQ2JiotSwS5lDOqUKutHR0Vi8eDH69esHVVVVGBgYSLwuPDwcxsbGUFdXR9u2bbFhwwapu4nk5eWhadOm1e481OkIIURcWloawsLCkJGRUdtNIaTeyMjIQFhYGNLS0iR+nzKHdEoVdK9cuYLOnTtjxowZ6Nmzp8Sgm5WVhfbt20NfXx8+Pj44ffo0tLS0sGLFCon3PHPmDMaNG1fttlCnI4QQcQkJCXj79m1tN4OQeuft27dISEiQ+D3KHNIpVdDl8/mi/54yZYrEoGtpaYmmTZsiMzNTdO7kyZNo0KAB3r9/L3a9oaEhnJ2dq90W6nSEECKu9NexhJDqKS3zkYQyh3RKFXTLkhZ0R48eDVNTU9a57OxsqKiowMHBgXU+Pj4eWlpaKCgoqPbzqdMRQoi40tpDQkj1VPR3hzKHdF9c0G3dujW2bt0qdr5Dhw7YtGkT69zu3bvx+++/V+l5ubm5Evedpk5HCCGfUNAlRDYUdGXzxQXdhg0bYv/+/WLndXR0sGjRIta5Xr164fbt21V6noWFBRiGETuo0xFCyCcUdGtPdnY2duzYAXt7+2q/1sXFBaampmjXrh0YhhH7DShRPAq6sqGg+z+Sgm510IguIYRUjoJu7SguLoaBgQGaNGkChmEk/hysyM8//ww9PT38/vvvFHRrCQVd2XxxQbc6pQuy2L9/P9q2bYtWrVpRpyOEkHIo6NY8gUCAmTNnonnz5ggODoaVlRVUVFRw4cKFKt+jdLJ3dnY2Bd1aQkFXNl9c0B09ejSmTZvGOpeTkyNxMtrnqIlOl7xrNz5s347kHTuRvGs3kvfsQYrlXqTss0KKtTVSbWyQfuIEMk6fQaazM7Ld3ZFz9RpyfX3x8c4d5D98hIJnz1AUFoaS2Fhw09PBLy5WWHsJIUTZgq6dnR06d+4MNTU1TJgwAXfu3AHDMPD09Kz0tQ4ODmAYBs+ePcPYsWOhrq6OPn36wMvLi3WdtrY2Vq9eDWtra3To0AHNmjXDkiVLwOVyce/ePejp6UFDQwOGhoYSl59au3YtWrRogadPn4rOHTp0CI0aNUJAQEC13i8F3dpDQVc2X1zQtbS0RLNmzZCdnS06Z29vL3V5MVnVRKcL79cfYb16y/0I1+2HyJHfIXr8eLybNh1xZvORuHIVPvy9Dak2Nsg8dw45V6/i4737KHrzBpzkZPClbLhBCCFlKVPQvXbtGhiGgbm5OXx8fLB9+3Z06dKl2kFXR0cHx44dg6+vL8aNGwd1dXWkp6eLrtPW1kbHjh1hYmICb29vHDhwAKqqqli5ciV0dXVx4cIFeHp6onPnzhg/fjzrGQcPHkSrVq3w/PlzsecfO3YMWlpaEr8nDQXd2kNBVzZKFXQLCgrg5uYGNzc3DB06FH379hV9XbqbSOmGEQYGBvD19cWZM2fQvHlzqRtGVFdNli4krl6DhOUrkLB0GRIWL0H8okWIN1+I+AW/I85sPmJ/nYN3039GjIkJoseNR5S+ASKHj0D4wEEI691H7gE5YpAe3o6fgLjf5iFpwwakHjiITCdn5Pn5ofDlS3BSUyHg8RT2eRBC6j5JP6w5PD7iMvJr9eDw+FJaLN3w4cNhZGTEOrdmzZpqB92yk8Pi4uLAMAycnJxE57S1taGtrQ0OhyM6N27cODAMg5CQENG5EydOgGEY5OXlVfu9VBUF3dpDQVc2ShV0Y2NjJa58wDAMAgMDRdeFhYVh7NixUFNTQ5s2bbB+/XqpWwDLqq53OoFAAAGHA97Hj+Cmp6MkIQFFb94g/9Fj5Pn7I9vTE5mOTki3tUXKPiu837oVCctXIHb2L3g74QdEDBsuWyDW0UWUoRFiZ/+CpPUbkHr4MLLd3ZH/8BE4SUkUhAlRcpJ+WMdl5EN70/VaPeIy8qv1Png8Hho2bIijR4+yzt+9e7faQbf8BhpqamrYu3ev6GttbW2YmZmxrlm2bBm0tLRY5wICAsAwDMLDw6v1Xsricrmigyfh/8cUdGsPBV3ZKFXQrQu+pMloAg4H3PR0FEVGIv/hI+R6eyPz3DmkWFkj6f/WIXbOHESPNUa4br9qBeFo43GIN1+I5N17kHn+PPIfPADnwwcIBILafsuEkM+kLEE3OTkZDMPAxcWFdT4iIqLaQbdsKR0AaGlpwcLCQvR1aY1uWatXr4a2tjbr3L1798AwDEJDQ6v1XkqVHywqf3+Agm5toqArGwq6CkKd7hOBQABuZiaK3rxB3q1byLp4EakHDyFp7f/h3cyZiBz5XdVqhwcOQsxUUyStXYu0I0eRc+06iiIjISjz6zxCSN2mLKUL8hzRrStBt6SkBCEhIaLj5cuXYtdQ0K09FHRlQ0FXQajTVQ8/Px9FkZHIC7iFzHPnkLxjB+Lmz0eUgWHlIVi3H2J+moKkDRuQYW+Pj3fvgpOSQiPAhNRByjQZbdiwYXKp0a0rQbcqKOjWHgq6sqGgK2dfUulCTeEXFKDozRvkenkh7fhxJK1bj3fTpgsn1VU0OW7YcMTN/Q0plnuRc/UqimPeQcCv/oQTQoj8KFPQ/e+//+Sy6kJ9CLpv3ryBm5sbzp07B4ZhsGLFCri5ucHb21vuzyKSUdCVDQVdBaFOp3gCPh8lcXHIvXkTaceOI3HVH3g74YcKV5SI0BssDL979yHn2nUUv6PwS0hNUqagCwC2trbo1KkTmjRpAmNjY9y+fVspg660be4l1fESxaCgKxsKugpCna728AsLUfjyFbLdPZC8Zw9if51T4ehvxOAhiDObj1QbG+QFBoKblVXbb4EQpaVsQbe80gldVQm6hFQHBV3ZUNBVEOp0dYuAx0NxdDSyPT2RvHsPYmf/gvABA6WG37c/TMT7zX8iy9VVOOGNRn0JkQsKuoTIhoKubCjoyhnV6NYfAi4XRZGRyHb3wIdtFoj5aYrUsoeIIUORsHgJMv49jcKXLyHgcmu7+YTUS19K0PXw8GCtSVv+oMmypLoo6MqGgq6CUKern3gfPyL/wQOk/fMP4hcuQsTQYVJrfeMXL0aGvT0KX7yg4EtIFSl70C0lraa19KBVC0h1UdCVDQVdBaFOpxwEfD6Ko6OR5eqKpPUbEKVvIHX74/hFi5B+6pRwxJd2eCNEoi8l6L5//561Jm35IyMjo7abSOoZCrqyoaCrIIrudK/SX2HkhZH4/uL30HfRh5GrEcZeGotxbuMwwX0CJnlMgsllE0zxnIJp/03Dr16/wtzHHCv8V2Dd7XXYem8rdj3chf3B+3Hs2THYv7SHc5gzLkddhn+cPx5/eIywjDAkfUxCbkku+AKqUQWEm1+UxMUh280NSRs2SF3nN3L4CCStXYtsd3dwkpNru9mE1BlfStAlRN4o6MqGgq6c1VSN7rPUZ9A9q1tjR7+z/TDywkhMcJ+A2ddmY4X/Clg8sMCRp0dwPuw8fGJ98CTlCWJzYpFXkvfF1J8JBAKUJCQg290d7zduRJShkeTJbZMnI8XSEh/v3gW/sLC2m01IraGgS4hsKOjKhoKugii602UWZcL7nTeuxVzD1bdX4RntCY8oD1yKvASXcBdcCL8A5zBnnHt9DqdfnYZtqC0OPjmIPY/24O/7f2PD7Q1YFbAKi3wX4Tfv3zDj6gyYXDaBkasRhjgN+exgPNhpMMa7jcev13/FHwF/YN/jfXB84wj/OH+EZYQhpzhHKcOwQCBAccw7ZDo6IWHxEonLmoXr9kPc/PnIPHsWJfQDn3xhKOgSIhsKurKhoKsg9b3TlfBKkF6YjpicGDxPe467iXfhFeOFi+EXYRtqi51BO7H61mrM8ZqDH9x/wFDnodUOw8PPD4fpf6ZY4b8Cex7tgcMrB/jG+uJNxhvkc/Jr+yOQC35JCfIfPUbqwUN4ZzpN8mjvxElIsbZGQXAwTWojSo+CLiGyoaArGwq6CvIldroCTgESchPwLPUZ/OL8cDH8Io6HHsff9/+Gua85JnlMwkDHgVUOwgYuBpjnPQ9/3f8Lp16cgl+cH97lvAOXX3/DIDczEznXriNpwwZEDhsuXts7bDiS1m9AzvXr4OXm1nZzCZE7CrqEyIaCrmwo6CoIdTrJ+AI+UgtSEZoaCq8YL9i/tMeOoB1YcnMJfvT8EYOdBlcagAc5DsK0/6Zhw+0NsHtuB/84/3oZgAU8HgqePEHq/v14O3my+GhvXx1hicP58+CkptZ2cwmRCwq6hMiGgq5sKOgqCHU62QgEAqTkpyA4ORhukW44+OQgVt9ajalXpmKQ46AKA7Ceo54wAN/ZgDOvziDofRCyi7Irf2gdURIfj8xzjohfsABhuv3Yobd3H8T+8isyHBzAoT5F6jEKuoTIhoKubCjoyhntjKY4XD4XMTkx8Ivzw4nnJ7D+9npMvTK10nKIcW7jsCpgFWxDbRGYEIjk/OQ6PxGO9/Ejcr29kbR2LSIG6YmN9r6b/jPST55CSWxsbTeVkGpRpqBrZmaGAQMGKOz+pqam2Lx5s+jr6OhoLF68GP369YOqqioMDAwU9uy6YsmSJViwYEG1X1e6McedO3dY5+vzFs0UdGVDQVdBqNPVHA6fg5icGNyMuwnb57ZYG7gWEz0mVhh+R18cjaV+S2H73BYPkh4grySvtt+GVPziYuQF3ML7TZsRIaGuN+bHn5B+wg4liYm13VRCKkVBt2qePHkCNTU1pJYpW7py5Qo6d+6MGTNmoGfPnl9E0H379i0aNWqEyMjIar2uNOiOGzeOdZ6C7peHgq6CUKerfXkleQhODobjG0dsubcFU69MxYBzA6SuEzzFcwr+vv833CPdEZUVVSc3yRBwOPh47z4+/L0Nkd+NEgu9sbNmI9PRCdz09NpuKiESUdCtmnnz5mHmzJmsc3z+p/8nTZkypcpB18zMDGZmZnJsXc0yMjLC6tWrq/UahmFgZGQEhmHw+PFj0XkKul8eCroKQp2ubiriFuFV+iu4Rrjir/t/4SfPn6SO+o44PwILfRfi6LOjuJt4Fx9LPtZ281kEPB7yHz9G8o4diBwxkh16+/RF/O/myPa4DF5e3R2tJl8eZQ66z58/h7GxMdTV1dG8eXPMnj0byeV2RoyPj8cPP/yAJk2aoEuXLjhx4oTYffLz86GhoYFLly5Jfba8g+6bN2/w/fffo3Hjxvj222/h6uoKAwMDTJkypcLXaWtrY/Xq1Th48CA6dOiAr7/+Gr/99hs+fvz0/0sHBwcwDIOQkBAYGRlBTU0Nffv2xb1791BSUoI//vgDLVq0QIcOHXDo0CGxZ9ja2qJVq1bgVmP5RYZhcOjQIfTv3x8mJiai85KCLo/Hw/bt29GlSxc0atQIffr0gaOjI+t+pX9Gvr6+0NHRgYaGBvT19REVFcW6rqioCBs3bkTnzp3RqFEj6Ojo4PLly1Vud0Uo6MqGgq6CUKerP3JLcnE/6T5sQ22xxG8JRl4YKTH49j/XH7OvzcbBkIO4k3inTgVfAYeDj3fu4P3GjWI1veH9+iNx1R/I9fUFv7i4tptKvnASf1jzOEBmTO0ePE6130vZgJqWlgYtLS0MHToUnp6ecHJyQseOHaGjo4Pi//29EwgEGDBgADp16gRnZ2d4enpiyJAh6NSpEyvo+vn5VfrzQ55Bt6ioCJ06dUKfPn3g7u6OixcvokePHmjbtm2Vgm6nTp1gYmICLy8v/PPPP2jcuDE2bNgguqY06Pbp0wfHjx/HjRs3MGLECLRp0wYLFizAypUrcfPmTaxatQoMwyAoKIj1jOfPn4NhGDx58qRK7xcQBl0bGxtcunQJDMMgNDQUgOSgu2XLFjRs2BA7d+6Ej48PFi1aBIZh4OTkxPoMW7VqhYEDB8LV1RWenp7Q1tbG0KFDWc+dPHkyWrZsiWPHjuHmzZtYtmwZVFVV8eDBgyq3XRoKurKhoKsg1OnqL76Aj5icGHhGe2JH0A5M+28a+p3tJzH4zro2CwdCDuBO4p06U+fLLyxErrc3EpavQHi51RsiBg/B+61bUfDkSZ2fkEeUk8Qf1pkxgIVm7R6ZMdV+L2WD7qZNm9CsWTNkZ39a6eXRo0dgGEY0Onj9+nWxIJeWloYmTZqwgq6lpSWaN29e4bMrCro8Hg9cLld0zJs3D/PmzWOd4/F4outPnDiBBg0a4N27d6JzpeGyKkG3a9eurNHW+fPno3v37qKvS4PuqVOnROcePHgAhmEwefJk0Tk+n4/27dtj3bp1rGdwuVw0aNAAtra2FbalrNKgy+fz0adPH0yfPh2AeNDNzMyEuro6/vrrL9brJ06ciG+++Ub0tZmZGVRVVVm1wmfPngXDMEj83/wIf39/MAyDgIAAsXuVrxWWBQVd2VDQVRCFd7qCTCDaH4gJBN7dBeIeAPGPgIRgIOkJ8D4USH4JpLwB0iKB7AThaziFAAWcasspzsGt+FuwCrbCjKszpAbfmddmYn/wftxPuo8iblFtNxu8nBxku7khzmw+wnr3Ye/INn4C0k/YgVPuV6uEKJKyBl0jIyOYmpqKXdO1a1csXrwYAGBhYYFWrVqJXTNmzBhW0F21ahV69OhR4bMrCroGBgaiyVjSjrKvnT9/PvT09MTu880331Qp6JYfLbayskLjxo1FX5cG3dgyq8SkpqaKwmhZo0ePxqxZs8Se07JlS2zbtq3CtpRV9t6Ojo5QUVFBWFiYWNC9c+cOGIbBixcvWK8vDbEfPnwAIPyz1tbWZl3z+PFjMAyDhw8fAgA2b96M1q1bs/5BweVyceDAgUr/4VIVFHRlQ0FXQRTe6d4GfN7/1He3A6y6AYd0gGNDALvRwOkJgONU4NJ84NpawH8nEHQcCD0PRHgD8Q+BtAjgYyrALVHM+6oncopzEJgQCOtga6nBV89RD4t8F+Hs67OIyoqq9RFUTkoqMk6fQYzJj+L1vOYLkevlRaUNROGUtXShd+/eWLp0qdg1w4cPx88//wxAuFRWnz59xK6ZPXs2K+guWrQIOjo6FT67oqAbERGBkJAQ0WFiYgITExPWuYiICNH1EyZMwA8//CB2nxEjRlS5RrcsGxsbMMyneFEadMuOdmdnZ4NhGDg4OLBeO3bsWInP7NChAzZu3FhhW8oqG3R5PB66d++OOXPmiAVdFxcXMAyDlJQU1utv3LgBhmHw+vVrAJInHoaGhoJhGAQGBgIAFi5cWOE/LsrWLcuCgq5sKFPQ0QIAACAASURBVOjKWY2toxvtV/sjIHs6Aod0ATt9wHkGcGWFMBw/Ogm8uSIMxllxX0Qozi3JRWBCIPYH78fPV3+WWOM7xnUMtt7bCu933sgqyqq1tgoEAhS+eo3kHTvFliuLGDoMH7ZvR+HLl7UezIlyUtbJaEZGRpg2bZrYNbKM6G7atAkdO3as8NnyrNH93BHdmgi66urq2LdvX4VtKav8aLG9vT0aNGggqn8uP6L78uVL1usljehWFnQ3btyIdu3asf5BUfYoWy4iCwq6sqGgqyA10ukEAoDHBbjFQEkBUJwHFOUISxTy04G8FCD3vTBspkUA758JSxyi/YCwq8ALV+CJA/DQFrh7AAjYBdzYDFxeCpyfBfw7Hjg2FLDuAexo8RmhWAvY/y1w0gC4+KvwGQ9tgXAvIOW1sN1KJr0wHVffXsXmu5uh76IvcTmzX67/ArvndojIjKi1UMkvLkbujRuIX7QIYX36stfnnWqKrIsu4H3Mr5W2EeWkrEF38+bNaNasGXJyckTfDw4OllijW3ZikqQa3TNnzqBhw4YoLCyU+mx5Bl1bW9vPqtFVdNBNS0sDwzDVWr2gfNDlcDjo0qULxowZI7FG9++//2a9ftKkSWI1upUF3Zs3b0JFRUU0CixvFHRlQ0FXQZSu0wkEwkCaHQ98eC6sDX59GQj+F7htBVz/P8BlDvDvOOBwf2BX2+qF4X1dhUHY9TfA9y8g5Iyw9jgvud7XFPMFfIRnhuP0q9Mw9zGXuJXxOLdx2P1wN+4n3UcJr3ZGwDkpqUg/dQpvf5jIHuUdpIcP2yxQ9OZNrbSLKBdlDbqlqy6MGDECV65cgbOzMzp16oS+ffuKrbrQuXNnODs748qVKxgyZAg6duyIQYMGie4bGRnJqv0sVVBQADc3N7i5uWHo0KHo27ev6Ou0tLQK21lR0C0sLESHDh3Qt29fuLu7w8XFReKqC+fOnUODBg1Yf341EXS9vb0llhdURFL97/Hjx0VlBJJWXdi9ezd8fX2xZMkSiasuVBZ0AeDHH39Ex44dceTIEdy6dQv//fcfdu/ejVWrVlW57dJQ0JUNBV0F+eI7nUAAFOUKR5LfBgDPnISB+L+VwLmfgMMDqj5KbNlJGILdFwrv8codSH4lHMmuhwo4BbidcBs7gnZgzKUxYqF3mPMwrLm1Bp7Rnsgsyqzx9gkEAhSEhCBp3XqxVRvezZiJbHd38AsKarxdRDkoa9AFhMFn7NixUFNTg5aWFmbNmiX61XepuLg4TJgwAU2aNEHHjh1x+PBhmJqawtDQkHWdrq6u2OSr0vpSSUfZsCWpnZWto/vq1SuMGjUKjRs3Rvfu3XHx4kWxdXQlTSqriaC7atUqjB49usL2lycp6BYVFaF9+/ZS19Ht3LkzvvrqK/Tu3Rvnzp1jvbaqQbekpATbt29Hjx498NVXX6FNmzYwNjaGm5tbtdovCQVd2VDQVRDqdFXA5wlXg4i9L5zwdssSuLwEOP2DsNShsgC8/WvhRDrX34Svfe0pXGGCV/VFxWubQCDAm4w3sA21xcxrMyWWOMzzngenN05Izq/51RG4WVnI+Pc0osePZ4/yDhmK5J27UFTNbTkJUaagKw8FBQVo37491qxZwzp/+PBh9OzZs5ZaJVSVDSMUjcfjoX379jh79myttqMuoKArGwq6CkKdTg6KcoRLpT13AQJ2A5fMANtRlZdF7GwtHAH+bxUQbC9ccq2kfoxApuSnwDXCFcv9l2Ow02Cx4Pvr9V/h8MoBiXmJNdouAZ+P/KAgJP6xGmE6uuxth+fMQa6PLwTV2LWIfLm+9KB74sQJ2NnZ4datW3Bzc8Po0aPRuHFjhIeHs64rKChAu3bt4OXlVUstrRtB19nZGd27d6/WrmjKioKubCjoSlFYWIiFCxfi22+/Rd++fcUK1StDnU6B+HzhBLuIG8C9Q4DHIuDEKGHAlTr621w4sc7dHLh/GIi9BxTXnZ3NJCngFMA/3h9/3v0TI8+L79Y24+oMnHpxCrE5sTXaLm5aGtJP2CHaaAwr8EYZGSHj33/BKzMZh5DyvvSg6+DggN69e0NNTQ1qamr4/vvvcefOHYnX+vr6wsPDo4Zb+EldCbplPx+BQCC2Tm3Zg8/n12JrFYuCrmwo6EqxfPly1k4p1SmCB6jT1QoeV1i68MoD8LMAHE0B6+4Vh1/b74Qjv0/PCTfX4H/e8i+KUsIrwZ3EO/j7/t8YdXGUWOidemUqTr44iYS8hBprk4DHQ15gIOJ/N2dvOTxwED5ss0BxdHSNtYXUH1960CWfJzAwsMK1aiurRa7PKOjKRqmCbnR0NBYvXox+/fpBVVVV6tIr4eHhMDY2hrq6Otq2bYsNGzagpOTTTPePHz+iTZs2opmysqBOV4fkJQORvsAda8BlLmDTr+K1gR0mC4Ny2DXgo/SZzLWFw+cg6H0QdgTtkLh02a/Xf4XTGyekFdRc24ujo/HBwgLhAwexQm/8gt+RFxgIgRKPspDqoaBLPkdeXp7UdWpDQkJYE+WUDQVd2ShV0L1y5Qo6d+6MGTNmoGfPnhKDblZWFtq3bw99fX34+Pjg9OnT0NLSwooVK0TXPH/+HLq6uli5ciX09PQwfvx4se0BK0Odro7LTxeWPgTsAs5NASw7Sw+/x4YAV/8AXlwSrktch/D4PAQnB2PXw10YfXG02JbE5r7m8IjyQE5xzZQT8HJyhJPXypU1RI8fj8xzjrQmL6GgS4iMKOjKRqmCbtnaHGmLaVtaWqJp06bIzPy0bNPJkyfRoEEDvH8vDDFPnjwBwzC4cuUKAGGdVLdu3arVFup09QyfLyx7CD0v3P7YbrT05c8O9wc8lwPPnIGs2Dqzzi+Hz8G9pHvYcm8LhjkPY4XeQY6DsDZwLQITAsHhV3+r0+oScLnI9fVF3Jy57NUaBg9BirU1ONUsBSLKg4IuIbKhoCsbpQq6ZUkLuqNHj4apqSnrXHZ2NlRUVETr+aWlpUFdXZ11TevWrZGenl7l51OnUwIlBUDMbeHSZQ6TgV1tJAffg32Fa/w+cQDSo+tE8C3iFsE31hdrbq2BnqMeK/Tqu+hj3+N9eJPxpkZ2ZCsKC8P7P7cgvF//T6FXtx/eb/4TxVFRCn8+qVso6BIiGwq6svnigm7r1q2xdetWsfMdOnTApk2bRF+PGTMG9+7dAwCEhISgU6dO1QoFNdHpLP57jc0eL7DZ4yW2XH6JrZ4v8feVV9h25RV2XH2DfTfCYeMXiX8Co/HvvXdwehiHSyEJuBKahBuvknErIhUP3qYjNCEb0akfkZpbhMISXq1tR1vncYuBuCBhra/jVGB3e8nB95COcGOM157C7ZhrWV5JHjyiPGB2w0ziJLbTr07XSD0vNyMDaUeOInLYcNYob8LiJSgIDqZ+94WgoEuIbCjoyuaLC7oNGzbE/v37xc7r6Ohg0aJFoq+joqLw/fffo1+/fhg+fLjYVozl5ebmIikpSXSEhIQovNPpbPOB9qbrcj+6/+mFgTt88b1VACYevouZdkEwPxuCdZeew9I7DCfvvIXbk0TcCk/Fi8RsJGYVoLCkbq5WoFA8DpD4RLhcmfMMyXW+25sDp8YI1wGOCxK+phYl5iXC9rktJnpMZAXeAecGYGXASgQmBILLV+x6lfyCAmQ6OSN6rLHYrmu5Pr4Q8L7AvvQFoaBLiGwo6MqGgu7/lA+61WVhYSFxqRNFdrq1LqFY6vQEix1DsOhcCMzPhsD8bDAWOARj7r+PMNMuCFP/uY+Jh+9izIFAjNoXgKG7/dB/uy96/eWNrpvlG5B7/3UDo/YFYLrtA6w4/xR7vMJw+t473Hj1AaEJ2UjNLQKfr8SjdnyecIOLO9bAmYmSa3wtOwEXfxVuZJEdX2tNFQgECE0NxY6gHWJr9Bq5GuHw08OIz1Vs+wRcLnK9vPBu2nSxiWtZF13AL7MSClEeFHQJkQ0FXdl8cUG3qqUL1VUbI7qfSyAQoITLR3ZBCRIyC/DmfS4exWTA700KLj9LhGNQLI7fisZe73BsufwSy5yfYKZdEIwP3obezpvoJkNQ7v6nF77bKwzDKy88g6VXGJwexuFeVDoSMgvAU6YgXJwHRHgDXuuBo3qSyxxsvwP8dwKJIcIJcbWgkFuIq2+vYv6N+WKlDQt8FuBazDUUcYsU9nyBQID8hw8Rb76QvQGFvgEyz54Fv7BQYc8mNY+CLiGyoaArmy8u6I4ePRrTpk1jncvJyWFNRvsc+/fvR9u2bdGqVSul73Q8vgAZH4sRlZKHhzEZ8Hr5AY5BsbD2Ccdal1DMPvkQBta30HOrd5WDcI8tXjA6EIgFDsHYfvU1zj6IRWBEKt6l54PDq+drsWbFAiFnhGv5SipzsO4BXFkBhF8HSmpnGa643DjYPLGBoashK/B+d+E7WAdbIy5XsQGlKDwcSevWI6xPX1HgjRz5HdJPngLvY93eyY5UDQVd+dDW1sbq1aur9ZrY2FgwDANPT89KrxUIBNDT04OdnZ2sTawxCQkJUFdXR0xMTLVeV/qbWCMjI7HvmZmZYcCAAfJqolxQ0JXNFxd0LS0t0axZM2RnZ4vO2dvbs5YXkwfqdJ8IBAJk5pfg9fsc+L1JgePDOFjdEIbhGXZBGL7Hv8qjwWMP3sZy56ew8YuE18sPiE7Nq58BmMcRruhwYzNweIB46N3ZGnD+GQj+t1bW7uXwOQiID8BK/5Xof64/K/Qu8l0E/zh/hdbylsTF4cNffyFMt9+npcmGDkPakSPgZmUp7LlE8SjoysezZ8+q/TlWJ+i6u7ujffv2n7VxUk0yMzPDb7/9Vq3XlC05DAoKErsfBV3loFRBt6CgAG5ubnBzc8PQoUPRt29f0ddpacJZ5aUbRhgYGMDX1xdnzpxB8+bNWRtGfI4vaURXngpLeIhIzoPP62ScuhODLZdfYo79I4zaF1BpiUSPLV4Yf+gOVl54hqP+UbjxKhmx6fn1px5YIABSw4F7h4B/xwsnsJUPvvZjgQdHgayaDwgp+SmwDbXFGNcxrMA75tIY2D63VeiKDZz375G8cxfC+w/4tMXwID2kHjhIgbee+tKDbmEtluJUJ+jq6+tj48aNNdAq+bhz5w6++uor0c/6qrCwsICWlhb09PQwceJE1vco6CoPpQq6pX+JJR2BgYGi68LCwjB27FioqamhTZs2WL9+PWsLYHmgTic/xVwe3qZ9xM03KTh+KxqrLz7DD4fv4ttKSiJ0tvlghl0Qtl99DfcniYhIzgO3Poz+5mcAoReEJQ57OoiH3pOGwD0bIPNdjTaLw+fgZtxNmPuaswLvwHMDsTZwLR59eKSwJcK4aWlIsbZG+CC9TyO8g/SQevgweDk1s+sbkQ9lCrpBQUEwMTFBu3btoKGhgUGDBsHNzU30fQcHBzAMg0ePHmHMmDFQU1MTzQUpKirC5s2b0bVrVzRq1AhdunTBypUrRa+9f/8+Ro8eDU1NTTRt2hT9+vXD2bNnRd8vX7pQGsx8fX2ho6MDDQ0N6OvrI6rMWtWlPyPPnz+PhQsXQlNTE506dcKePXtY7+vdu3dQUVFBcHCw2HvesWMH2rRpAw0NDcyaNQseHh5gGAahoaFSP6fSz+HZs2cYO3Ys1NXV0adPH3h5ebGuK31P1tbW6NChA5o1a4YlS5aAy+Xi3r170NPTg4aGBgwNDZGQkMB6LZ/PR7t27XD48GGp7SivNOiWvocnT56IfZ5lPX/+HMbGxlBXV0fz5s0xe/ZsJCcni75f1c8XAO7duwdDQ0PRvczMzJBVyT/eKejKRqmCbl1CnU7xuDw+YtI+4sarZBzxj8KK808x/tAd9NjiJTX89tzqjZ+O38eWyy/hEhyPyJS8uj3yyy0Gom4Kd2Lb20U89J74Hrh7AMh4W6PNepfzDvse78PICyPF1uV1j3RX2OQ1blYWUm1sEFE28A4egrSjx8DLzVXIM4l8SfphzeFzkJCbUKuHLDsGXrx4EVZWVvD29oa/vz+2bt0KVVVVXL16FcCngNetWzdYWVnh1q1bCAkJgUAgwIQJE6Curg5LS0v4+/vD2dkZc+fOBSCc3KylpYXJkyfD29sbfn5+OHLkCCvESQq6rVq1wsCBA+Hq6gpPT09oa2tj6NChomtKg1iXLl2wbt063Lx5E2vWrAHDMKzQaW9vjyZNmoDLZZcnHTt2DCoqKti0aRN8fHywatUqdOzYscpBV0dHB8eOHYOvry/GjRsHdXV11kZM2tra6NixI0xMTODt7Y0DBw5AVVUVK1euhK6uLi5cuABPT0907twZ48ePF3vO1KlTYWJiUtU/PlHQFQgE0NXVxdSpU1mfZ9mgm5aWBi0tLQwdOhSenp5wcnJCx44doaOjIyrvqOrne//+fTRq1AjTpk3D9evXcf78eWhra2PChAkVtpeCrmwo6MoZlS7UPg6Pj/DkXLg/ScT2q68x40RQhWsO627zwRz7RzjgG4Fb4anIyq+jy1rxOEC0P/DfKsCqm+QVHO5Y1+hIbyG3EJejLmPWtVmswDv64mgce3YM6YVV302wOrhZWUg9cADhAwexanjTbW1p0lodJ+mHdUJugtiKHzV9JOQmSGlx1fD5fHC5XMycORM//vgjgE8B78CBA6xrfX19wTAMLl26JPFepav2vHz5UurzJAVdVVVVREZGis6dPXsWDMMgMTERwKcgNmfOHNE1AoEA3bp1g7m5uejc4sWLMXDgQNbzeDweOnTogAULFrDOT506tcpB197eXnQuLi4ODMPAycmJ9Z60tbXB4Xz6R8e4cePAMAxCQkJE506cOAGGYZCXl8d6joWFBdq0aSO1HeWVBl0AuHDhAlRUVESfefmgu2nTJrH5PY8ePQLDMHB0dARQ9c/3+++/h76+Pqstjx8/BsMwePDggdT2UtCVDQVdBaFOV7fw+QK8S8/H1efvsdc7HHPsH0HXQnr4NdwfiLUuoXB8GIdXSTl1r+SBxxVOZru2BrDuLqGm1xh4dBL4qPgdz0q9SHuB9bfXY8C5AaLwMMhxELbc24KIzAiFPJObkYEUK2uEDxj4aZWGYcORbncS/PzaWbmCVEyZgm5mZiZWrFiBzp07o0GDBqJSuV69egH4FPDCw8NZr9u4cSM0NTWl3jcrKwuampoYNWoUXF1dJdadSgq62trarGtKw1PphkelQaz8CkMTJ05kjSb++OOPMDY2Zl1TGkxLR6tLOTo6VjnoxsbGss6rqalh7969rPdkZmbGumbZsmWiMFoqICBA4ud67NgxqKqqglfFTWfKBl0+n49vv/0Ws2bNAiAedI2MjGBqaip2j65du2Lx4sUAqvb5FhQUoEGDBjh27Bi4XC7r0NTUrLD0goKubCjoKgh1urqPzxcgOjUPriEJ2OzxEhNs7kjdRENnmw/mnX6MfwKj8SQuq26t9MDnAbH3gOvrAKtvyu3M9jXgNA14flG4rm8N+PDxAw6GHBTbiOJ3n98RmBAIvkD+nx03LQ0plpasSWuRI0Yi499/wS8okPvziOyUqXTBxMQEbdq0wfHjx0VlCTNmzBAFztKAV7720tzcXBSGpXn8+DF++OEHNGrUCKqqqjA0NMTr169F35dWo1tWaGgoa46KtMlo5VcpGjduHCZPnsy65uHDh6J647J8fHyqHHTLjoYCgJaWFiwsLKS+JwBYvXq1WIC/d++exGeeOnUKDMNUecJf2aBb2k5VVVVERESIfZ69e/fG0qVLxe4xfPhw/PzzzwCq9vmWZgNpx7p166S2l4KubCjoyhmVLtRvH4u5eBCdjuO3ovG7QzAG7bwpdRe4OfaPcCwgCsGxmSjm1pFta3kcIMoP8FgE7G7PDr272gKX5gtrfvmKb28BpwDnw85jksckVuCdfHkyLoRfQAFH/gGUk5KK5F27EV5mWbLI70Yh08kZAtpprU5QlsloRUVFUFVVxfHjx1nnp06dKhZ0ywe8ykZ0yyosLISXlxf69OmDnj17is4rMujOmjULo0aNYl0jjxFdRQdda2trqKmpSW1HeeWDLpfLRdeuXTFv3jyJI7rl1+AHJI/oVvT55ufnQ0VFBdu2bUNISIjYUX6SXVkUdGVDQVdBqNMpB4FAgNj0fLgGJ2Ctayi+2xsgdZLb7JMPcdQ/CqEJ2XVjh7eSfOClG3B+pvh2xAd6AX4WQHpUZXf5bHwBH7fib2GBzwJW4B15YSRsntgopI6Xk5yM5B07WOvwRo81Rs7VqxDU0g50REhZgm52djYYhsGpU6dE5zIyMtC0adNKg25pja67u3uVn3f06FGoqqqK6lcVGXS3bduGDh06sK7h8Xho3779Z9XoKjroLl++HP3795fajvLKB10AsLOzQ8OGDaGvr8/6PDdv3oxmzZohp8wqL8HBwRJrdCv7fL/77jvMnDmzyu0sRUFXNhR0FYQ6nfJKzCqA+5NErL/0HKOtbkkMvv23+2Kp0xOcfxSPhMw68Kvzgkzh5hP2xpLreUPOAEWKX6YrPDMcW+5twUDHgaLAq+eohx1BOxCfGy/353GSkvB+85+sndZifpqCvMBAhS2FRiqmLEEXAAYPHoyuXbvC3d0dHh4eGDRoELp27Vpp0C1ddUFDQwN79+6Fv78/Ll68iHnz5gEArl+/DlNTUzg6OuL27dtwcXHBt99+C0NDQ9E9FBl0S4N42aWzAODIkSOiVRd8fX2lrrrQvXt3/P7776KvayroDhs2DMuWLUNVSQq6JSUlovckadWFESNG4MqVK3B2dkanTp3Qt29fsVUXKvt8Hzx4gMaNG+OXX36Bp6cnbt26hXPnzuGXX35hLXFWHgVd2VDQlTMqXfjyfMgphOezJGxyfyF1xFff+ha2XH6JG6+SkVdU/VpAuUqPEo7mHuhVrrShDeBuDry9BSh41DO9MB1Hnh5hLU/W/1x/rL+9HmEZYXJ/XnFUFBJWrBCF3bBevRH76xwUVPBDhSiGMgXdyMhI0Vqo2traOHLkCCuYSQt4gLAkYcOGDejUqZNoHd0//vgDABAREYHp06eLvtehQwf8/vvvSE1NFb1ekUG3pKQELVu2xJkzZ1jXCQQCWFhYoHXr1tDQ0MD06dMlrqNbflJZTQTd1NRUNGjQAAEBAagqSUEXEAb68kEXEH6epWvwa2lpYdasWfjw4YPo+1X9fAHhaPDEiROhqakJNTU19OrVC6tWrWL9GZdHQVc2FHQVhDrdl0kgEK7u4BgUi4XnQqArYVmzHlu88Kv9Q9jfjcG79FpcGYDPE9bzXjIDdrZih95DOsBtKyD3Q6W3+Rz5nHycfX1WbNe1xTcX4/GHx3IfdS149gxxc+ayAm/CsuUojqnZzTe+ZMoUdJXZmjVrMG7cuEqvCwwMrLR0oSb8888/+Oabb5T6NzUUdGVDQVdBqNMRQLipxZO4TBy6GYlptg/wzZ/im1kY7g/EzmtvcD86HSXcWqofLcgEHp8S7rpWftWGi78KA7ECR3lLeCXwiPKAyWUTVuD95fovCIgPkOsPL4FAgI937yJmqumnwNtXB8k7doKbmSm35xDJKOjWD0lJSVBXV2et9CBJXQi6fD4fvXr1EhuBVjYUdGVDQVdBqNMRSXIKOLj6/D3WuIRi4A5ficuYLXV6gkshCcisrY0rUt4A3huBvZ3ZoddGF7izH8hLUdijeXwe/OL8xDagmP7fdPjF+cl1aTIBn4+cq1cRZWjE2mUtw94e/P/V3BH5o6Bbf7i6ulZaClAXgm5SUhJ2797NWj+Xx+OJrVNb9qiPKOjKhoKuglCnI5Xh8QV4EpcJa59wTLC5IxZ6v/nTC7+ceohzQbFIzlHMlroVKikAQs+LT2Db0QJwmSus5VXQrwkFAgEefXgEcx9zsS2Gb8TeAE+Oy6Pxi4qQbncSEXqDP63QYDQGOdevK/WvQWsLBV1SEwwMDCpcr7b85hX1AQVd2VDQlTOajEZklZRdCKeHcfjdIRg9t3qLBd+p/9yH3e23iMuohbrelNeA13rAstwo77EhwpKHYsVtu/s05SkW31zMCrw/ef6E6zHX5Rp4uRkZ+LB9O8L66ogC77uZM1Hw9KncnkEo6JKaERERIXGd2tKjpB6uq01BVzYUdBWEOh35HPnFXHi9/IBVF55BR8KEth8O38VhvyhEJOfV7KhjST7wzAk4NYYdeC07Ad6bgIy3Cnv087TnWOa3jBV4TS6b4L+3/4HLl9+vIoujo5GweAlrwlriqj9QEi//5c++RBR0CZENBV3ZUNBVEOp0RF6KuTzcCk/FRrcXEut6jQ/exlH/KMTW9AoOSU+By0vKrdigBTj/DEQrbvLa6/TXWBmwkhV4J3pMhGe0p1wDb/6DB4iZMvVT4NXthxTLveDlKH69YWVGQZcQ2VDQlQ0FXQWhTkcUgcvjI+htBiz+e43he/zFQu9Px+7B/m5Mzdb0fkwDbluLr8t7VA94dBIozlPIY8MywrDm1hpW4P3R80f4xPrIbdKagMdDtrsHor4f/WnC2rDhyHR2hqCeTmipbRR0CZENBV3ZUNBVEOp0RNH4fAFCYjOx7corDN51kxV4u26+jpl2QXB6GFdzqzfwOMArd+Df8ezAu6ejsKwhSzHhJjIrEmsD17IC789Xf8adxDtyK+vgFxQg7dhxhA8c9GmHtSlTURASIpf7f0ko6BIiGwq6sqGgK2c0GY3UBi6Pj7tRadjg9hy6Fuya3u5/emH+mcf47/l7FHHkN3mrQu9DAc9lwM7WZdbkbQ64zgMSFRMO32S8wVK/pazAO8drDh5/eCy3Z3BSUpG0YQOrfjfp/9aBk6K4JdeUDQVdQmRDQVc2FHQVhDodqS3FXB58Xydj5YVn6P3XDVbo1d3mg03uL/D4XWbNTGLLTxeWNVj3YI/y/jseCLsq3J1Nzp6mPIXZDTNW4DX3NceLtBdye0bB06esDSfCB+kh/dQp8OvhTO6aRkGXENlQ0JUNBV0FoU5H6oKCEi6u/fhwlgAAIABJREFUhCbB7MxjdNvMruf93ioAh25G1sxyZdxi4WoNx4ezA+/hAUCwPcCRb02xQCDAg6QHYhtPrPRfiYjMCPk8g8dD1sWLiBw2XBR4346fgI937sjl/sqKgq58aGtrY/Xq1dV6TWxsLBiGgaenZ6XXCgQC6Onpwc7OTtYmSrR48WIwDAMbGxux7+Xn56Nly5a4U82/Qw4ODmAYBt9++y1r0wgAsLCwgJaW1me1ua6goCsbCroKQp2O1DWpeUWwvxsjcXOKn088gPuTRMWXNggEwhUZzk1hB9793wL3bICiXDk/TgD/eH9MvTKVFXg3392MpI/y+bvJzcoSrr/bp68o8CYsXUbLkUlBQVc+nj17Vu3PsTpB193dHe3bt0exHHcJ5HA4aNGiBRiGwdChQyVeY2FhgdGjR1frvqVBl2EYnD9/Xux+FHS/bBR0FYQ6HanL3rzPxc5rb8Qmsela+GDblVcI+yDfwClR8ivAYxGw/etPgXdvZ8B/p7DkQY54fB6ux1zHJI9JorA7yHEQrIOtkVMsn+XCit68Qewvv34qZ+jXH6k2NuAXFMjl/sriSw+6hYWFtfbs6gRdfX19bNy4Ua7Pv3btGhiGgbGxMRiGQXR0tNg1cXFx1d5SuDToGhkZQUdHh1WWRUGXUNBVEOp0pD7g8vjwD0vBonMh+OZPL/ZSZcfvwyU4HvnFCl5GKysWuP5/7Ilru9oCXhuA7AS5PorD58Al3AX6LvqiwDvywkicfnUaRdzPL58QCATIuXqVtRxZlJER8gIC5NB65aBMQTcoKAgmJiZo164dNDQ0MGjQILi5uYm+XxrAHj16hDFjxkBNTQ2bNm0CABQVFWHz5s3o2rUrGjVqhC5dumDlypWi196/fx+jR4+GpqYmmjZtin79+uHs2bOi75cvXTAzM8OAAQPg6+sLHR0daGhoQF9fH1FRUaJrSoPu+fPnsXDhQmhqaqJTp07Ys2cP6329e/cOKioqCA4OFnvPO3bsQJs2baChoYFZs2bBw8OjysH0l19+QatWrRAbGwtVVVXs3LlT4nXDhg3DmjVrKr1fqdLPOSAgAAzDwN3dXfQ9SUE3NjYWU6dORbNmzaChoYFJkyYhMjKSdQ3DMDhw4AA2b96Mli1bok2bNlizZg04HA7rutevX8PExER0rylTpiAhQb7/3ypFQVc2FHQVhDodqW9Scotw/FY0Ru0LYAVenW0++PPyS7xMVPBGCR9TAT8L4S5rpYF3Rwvh6g1pkZW9ulryOfn4J/QfDHUeKgq8Yy+NhWe0p1y2FeZ9zEeKtTXCdPt9KmdYsQKcDx/k0Pr6TZmC7sWLF2FlZQVvb2/4+/tj69atUFVVxdWrVwF8CmDdunWDlZUVbt26hZCQEAgEAkyYMAHq6uqwtLSEv78/nJ2dMXfuXABAbm4utLS0MHnyZHh7e8PPzw9HjhzB4cOHRc+WFHRbtWqFgQMHwtXVFZ6entDW1maVCJQG3S5dumDdunW4efMm1qxZA4Zh4OXlJbrO3t4eTZo0AbfcWtHHjh2DiooKNm3aBB8fH6xatQodO3asUtDNz8+HhoYGli5dCgAwMDBAnz59JF67Zs0a6OrqVuWPAMCnzzk7OxuTJk3CoEGDRN8rH3SLi4vRrVs39OjRAy4uLnB3d4eOjg7atm2L9PRPv0liGAadOnXC/Pnz4ePjgz179kBFRQX//POP6Jro6GhoamrCwMAAnp6euHz5Mvr374++ffuK1QrLAwVd2VDQVRDqdKS+4vMFuBuVhuXOT9FjC3uUd/LRu3B6GIe8Ik7lN5JVYTZwZz9g9Q17xzWXOcD7Z3J9VHphOnY93IUB5waIAq/pf6a4m3hXLqtSFL99i7i5v7FWZ8g44/BFbzYh6Ye1gMNBSXx8rR4Czuf1aT6fDy6Xi5kzZ+LHH38E8CmAHThwgHWtr68vGIbBpUuXJN4rJCQEDMPg5cuXUp8nKeiqqqqyRibPnj0LhmGQmJgI4FPQnTNnjugagUCAbt26wdzcXHRu8eLFGDhwIOt5PB4PHTp0wIIFC1jnp06dWqWge+HCBTAMg7t37wIATp48CYZh8OyZ+N9pBwcHqKioID+/ahNlywbdoKAgMAyDa9euARAPuidOnICqqiprpDsxMRFfffUVa4SZYRiMGjWK9RxDQ0OMHTtW9PXcuXPRo0cPVh1zQkICGjVqJFYrLA8UdGVDQVfOaB1dokzSPxbD7vZbGO4PZAXe3n/dwCb3F4qt5S0pEO6sdkiHPXHt/Cy5B97YnFixTSeW3FyC6CzxGsLqEggEyPa4jMjhIz5tNjHVFIUv5LfcWX0i6Yd1SXw8a23i2jhkmTyYmZmJFStWoHPnzmjQoIFoQlSvXr0AfApg4eHhrNdt3LgRmpqaUu+blZUFTU1NjBo1Cq6urkhLSxO7RlLQ1dbWZl3z+PFjMAyDhw8fAvgUdB0cHFjXTZw4ERMmTBB9/eOPP8LY2Jh1TWntbOlodSlHR8cqBV0TExN07txZ9A/IzMxMfPXVV9iwYYPYtaW1vO/evavwnqXKBl0AGDNmDEaMGAFAPOguWLCANeJbytDQEOPHjxd9zTAMLCwsWNcsW7ZM9GcLAO3atcP69evB5XJZR//+/atVelFVFHRlQ0FXQajTEWUiEAgQ9DYDf1x8hm+3erNC70y7IHi//AAuTz7b7orhcYD/Z+++o6K61v6BA8l77xtjrqbpNb/rS25yo6iDYENNBOyaaGKLxuQmxmg0xXQ1KKJYsaAm1thQsCt26SKI2AAVFRx6732AGYYp53x/f0w4wwQOc2aYUcrzWWvWuoyzzzmTtS/5Zrv388QeB3YMbCTwCj+wIsSD4geYFTCLC7t2PnZYc3sNyuRlzb62qrwcea6u2nBl0wsFq1ZBXWWeFsktVVsKuhMnTkSXLl2wc+dOblvC9OnTucBZF8DKy8t1xs2dO1cnMDUmKioK48ePx9/+9jdYWVlh+PDhiI+P5/6cb49ufbGxsbCwsEB4eDgA/sNokyZNgrOzM/fzmDFjMGHCBJ3P3L59m9tvXF9QUJDeoFsXahcsWICKigruNWbMGJ3wWyckJAQWFhYQi8X8/4Dq+WvQDQ8Ph4WFBa5cudIg6I4fPx7jx49vcI2PPvoIAwcO5H5urATajz/+qPMfE88++yz3Hzd/fU2bNk3QsxuCgq5xKOiaCU060laVSxXYfz0NjhvDdALvUI9Q7ApPMV/LYUYNPPJtGHiPzzRp4GVZFiGZIRh3Zpz2wNqxofCO94ZS3fwtG7LoaKS+N4ELWEnDhkHi5/dkGni0AG1l64JcLoeVlRV27typ8/7kyZMbBN26AFZH34pufTU1NfD390evXr3Qo0cP7n1zBt2PPvqowV/bN2dFt26bAt/rr3VzT58+DQsLCxQK7DjY2D/nd955B05OTo2u6Pbv37/BNRpb0dUXdLt06YIvv/wSMTExDV6pqamCnt0QFHSNQ0HXTGjSkbaOYVhcTSjEpwfu6ATeHssCsNj3AeLzzHR4jTfwfgzkPzDZbWrVtfCK88LgY4O5wPve2fdwNetqs0Mpq1CgZM9eJPS14wJv1py57aL2bls5jFZRUQELCwvs27ePe6+0tBQdO3bUG3Tr9ujWrw6gz/bt22FlZcWd+jdn0F2xYgVee+01nc+o1Wp069bNqD26zs7OePPNNxEeHq7zunr1Kl544QXugFqdTZs2oXPnzoL/f9bYP+e6leaRI0fqBN09e/bAyspKp7RZbm4u/va3vzXYo6sv6H7yyScYMmQIGMZMf5v1FxR0jUNB10xo0pH2JKWoGssvxKH3ct2Ww9P/uAW/h2ba1sCogYenge0DdAPviU+AfNPtfy2pKcHKWyvR16cvF3jnBM0xSYc1RXY2sr6cpz2s1tcOJXv2NvtgVEvWVoIuAAwYMACvv/46zpw5g7Nnz6Jfv354/fXX9QbduqoLzz//PNavX4/Q0FCcOHECs2bNAgD4+flhypQpOHz4MK5du4aTJ0/irbfewvDhw7lrmDPo1gXxgoICnc9t27aNq7oQHBzMW3XhzTffxJw5cwBo/l3YVCmxumoR9Ss8zJgxA++++26jn28M3z/nQYMGwcLCotGqCz169MCpU6dw5swZ2NraNlp1QV/QTUlJQefOnTF27FicPn0a165dw/Hjx/Hll182WPk2BQq6xqGgayY06Uh7VClXwisyHc6bdLc1DPEIxe7wVEhqzBDgGDXw8BSwvb9u4D31GVCSrH+8QIlliZgbNJcLu7betlhze02zG06wLIvKgAAkDRumc1hN/vixiZ68ZWlLQTcpKQnDhw9Hhw4dYG1tjW3btumEIb4ABmi2JCxevBj/+te/uDq6P/zwAwAgMTER06ZN4/7stddew5w5c1BUVMSNN2fQVSgUePnll3Hw4EGdz7EsC3d3d7z66qt4/vnnMW3atEbr6FpbW+Pzzz8HAGzevBmWlpbIyMho9J9haGgoLCws4OfnB0DbPc3Ly6vRzzeG75/zxYsXGwRdQFMnePLkyejYsWOTdXT1BV1AMwemT5+Ol156CX//+9/xxhtvYM6cObR1oQWhoGsmNOlIe8YwLMISijDLK6pBTd61fo+RLzFDd6jGAu/KF4GL3wOVeSa5BcuyCMsK0+mwNuzEMJxOOt3s+rvqqirku7trD0j17oOizVvAyJvfyKIlaUtBty376aefMGbMGL2fqzv4ZUgns6b4+/vjhRdeQFU7O6QpBAVd41DQbYK1tTV69eoFOzs72NnZ4bEBKyw06QjRSC2uhtv5OPR001ZreHOpP34+GYuEAjOUJ1OrgPtHgC2963Va6wKELAdqyvWPF0CpVsIrzkun4cSMyzPwoLj5e4SlUVFIHTuOC7yp48ZDFhNjgqduGSjotg65ubno0KGDTqWHxpg66I4ePRorVqwwybXaGgq6xqGg2wRra2vev27RhyYdIbpKq2uxNSQJ9quCdVZ5Z3lF4WZKiemrDijlwM0dwAZrbeBd3x24vkVTo9cECqWFWByxWKf+rtsNN5TWlDbruoxcjqLNmyHu3YcLvAWrVkFdXW2S536aKOi2HqdOncJVPe2rTRl0pVIpVq5cicpK7X8A1zXi4Hu1l2olAAVdY7W5oJuSkoL58+fD1tYWVlZWOvuO6ktISMDo0aPRoUMHdO3aFYsXL4ZCoVsWiYIuIaZXo1Dj8K2MBuXJJm6PxKUHeaY/uCaXAFfXAGv/qQ28nj2AGC9NjV4TiC6IxuQLk3XKkR0VH4WKaV4HtJq4eKRNmsyF3eThI1B97ZpJnvlpoaBLDPH55583WZqsbv9xe0BB1zhtLuheuHAB3bt3x/Tp09GjR49Gg255eTm6desGJycnBAUFwcvLC506dcKCBQt0PmdtbQ17e3v07dsXS5Ys4cq6CEGTjpCmqRkWfg/z8cGOSJ3AO2zjVRy+lQG50sS94quLAL+FwKqXtIF3Wz8g7ixggvJASkaJI4+PYMixITrthKMLopt1XVapRMkfe5AgsuUCb+7ixVCVm2YbxpNGQZcYIiMjo9E6tXWv9rSXl4Kucdpc0K1fz+6vJ0nreHh4oGPHjigr03Y72rt3L5555hnk5WkPrdT1B6+ursbkyZOxdu1awc9Bk44QYViWxe20UnxxKFon8A5cewV7I1IhrW3eqmgDZenAmbm6FRr2OAGpTf8VrVAlNSVYFrlMZzvD4ojFKJQKK37PpzYtDRkzP9Y2mhj6NiqDgk3yzE8SBV1CjENB1zhtLujWxxd0HR0dMWXKFJ33KioqYGlp2aAHeJ3Lly9j4sSJgu9Nk44QwyUVVuHnk7F4Y6k/F3jtVgXj9yvJqJCZuONa/kPgyDTdwOvzAVAQZ5LLxxbFYvql6VzYdTjqgMOPDzerOgPLMCg7chQJ/frrrO6qK81wqM9MMjMzjd4SRkh7lpGRQUHXCO0y6L766qtYtmxZg/dfe+01uLi4ANBsiq/bEK9SqTB79my4urry3quyshK5ubncKyYmhiYdIUbKKpXB9dwjvOWqrdTQe3kgPALEKKmuNe3NMiKB/aPqBd5OwIUFQFWB/rF6qBk1TiWewjsn3tGpziAuFTfruoqcXGTO+ly7d9d5OKpv3Gj28z4J2dnZZqkxSkhbl5qaiuzs7Eb/jIIuv3YZdJ999ll4eno2eL9Pnz6YN28eACAtLQ12dnawtbVFr169MHfuXMhk/Ce13d3dG90oT5OOEOMVVsqx1u8xetXruGbjpgm8ZVITrvCyLPD4IvC7nTbwru0GXNtkkgoN5fJyne0MfX36YlP0JsiUxl+bZRiU+fjotBEuWLUaTBO/p1qC4uJiiMVilJY2rzIFIe1JaWkpxGIxiouLG/1zCrr8KOjWUz/oGopWdAkxn3KpAluCEyFaEaSzwrsxMAHlpgy8KgVwa5emDFld4N3SC3hw0iQH1u7k38GEcxO4wDvWdywiciKadc3atDSkT/uQC7spY8dCdv9+s5/VXFiWRU5ODsRiMVJTU7m/jqUXvejV8JWRkYHU1FSIxWLk5OTwllOjoMuvXQZdIVsXjOXp6YmuXbvilVdeoUlHiIlJZEpsCU5En3qBt8+KIGwOToREZsL2wrIyIMBFt0LDXmcg82azL12rrsX2+9thf9ieC7wLry1ESU2J0ddklUoU79wJcR+RJvD26o2iLVvBKky8r9lEWJZFcXExsrOzn3qQoBe9WvorOzsbxcXFTdYMpqDLr10GXUdHR0ydOlXnPYlE0uRhNEPRpCPEfMqlCmwKStDZ0iBaEYStIUmQ1Jgw8JakACc+0T2wdvK/QHnzqwakVqTis4DPdGrvnko8BYY1fuW4Ji4eqe9N4FZ30yZNhjwxsdnPSghp2Shz8GuXQdfDwwMvvPACKioquPf279/foLyYMWhFl5Anp7S6Fh4BYti4aQOvrXsQtoUmo0puwsCbfh34Y5huS+Ewj2bv32VYBqcST2HosaFc4P0s4DOklKcYf025HIXrN0Bs00sTeEW2KNm3D6zaxHWJCSEtBgVdfm0u6MpkMvj6+sLX1xeDBg1C7969uZ/rNnHXNYxwdnZGcHAwDh48iM6dOzdoGNEcNOkIeXJKqmux1u8xeroF6JQl2xmWgmpT1eFlGOD+UWDTf7SBd2sf4PEFzWG2ZiiWFWPhtYVc2LU/bI/t97ejVm18hQlpVBRSRo7iVnczZn4MRSbVryWkLaLMwa/NBd2MjAxBrQLFYjFGjRqF5557Dl26dMGiRYsatABuDpp0hDx5RVVyrLr0GD2WaQOv/apg7L+eZrpOa3IJEOSqu3/X+32gqHklwwAgIicCY33HcoF3wrkJuJN/x+jrqaulyHdz48Jugn0/lB8/3uReP0JI60OZg1+bC7pPG21dIOTpK6yUw/1ivE4d3rfXX8XpmGyoGROFvOJEwGeSNuyufBEIXALUVOgf2wSZUgbPaE/09enLBV73m+6oUhjf6rQqLAxJ7wzjAm/W3C+hLGxepzZCSMtBQZcfBV0zoUlHyNOXL6nBkrMPdTqtjd5yDcHxBaZZ1WRZQHwZ+E2kDbyb3gTuHW52OTJxqRgzLs/gwu7I0yObVYpMVV6OnB9+5MJu4iAHSC5dptVdQtoAyhz8KOiaCU06QlqOlKJqfHP0Lhd2rV38MHnXDdxOM1HTAmUNEL5Bc0iNK0c2HMi526zLqhgVvOK80P9wfy7wLr2+FJJaiVHXY1kWkkuXkTjIgQu8OT/+BHVF81ahCSFPF2UOfhR0TYy2LhDScj3IrsAn+2/rBN7PD0YhqdD4bQE6KrKAU5/pthO+/HOztzOkS9Lxqf+nXNh1PumMkMwQo6+nLCxE1py52hbCw0dAFhPTrGckhDw9FHT5UdA1E5p0hLRckcklmLg9kgu7/17ih6XnHqG4yvgqBzrSwoEdg3S3Mzw42azqDGpGjaPioxh0dJBOo4lyeblR12NZFmVHjyLBti/XZKJ4+w6wKhNVqSCEPDGUOfhR0DUTmnSEtGwsy+LywzwM23hVp63wzrAU01RoUCmA61uANV21gffQBKA4qVmXza7KxtyguTqru2FZYUZfT56YhLSJE7VlyD7+BEr6vUVIq0KZgx8FXTOhSUdI61CrUmNfRBpE7tq2wkM9QnHufg4YU1RoKM8Ejs3Qht1VLwOhqzX7eo3EsixOJZ7SWd11jXRFpaLSqOsxcjnyV67UHlQbOAiVgYFGPx8h5MmizMGPgq6J0R5dQlqnMqkC7hfj8Wa9Cg3v74hEVHpZ8y9eV51hS29t4P3NFkgKbtZlsyuzMStglk5lhhu5N4y+XtWVK0h0GMwF3nw3NzCy5nV/I4SYHwVdfhR0zYQmHSGtU1pxNb70idE5sDb/cAzSS6TNv3htNRDsptts4uR/AYnxvycYloFPvA8GHBnABd6Vt1ZCqjTueZUFBcj89DMu7Ka++x7kCQlGPx8hxPwoc/CjoGsmNOkIad1upZbivW3XubD75lJ/rLwUjwqZCTooFj4GvMZpw+66/wdE7WtW7d00SRo+9vuYC7vjzoxDdEG0Uddi1WqU7N4Nce8+mo5qIluU+fhQzV1CWijKHPwo6JoJTTpCWj+GYXHmbg4GrwvlAq+texAORKZDqW5eQwgwDHD/CLDBWht4D4wBioxfPVUxKux/tB/2h+25wLshagNqVMbtB5bdu4+UESO51d3s+V9BVWaCrRyEEJOizMGPgq6J0R5dQtqeGoUa20KT0Wt5oE6HtZspJc2/eHUxcGau7mG1MA9AZXyps8SyRHx46UMu7E44NwGxRbFGXUtdWYncn3/mwm7SsGGQ3rxp9LMRQkyPgi4/CrpmQpOOkLanqFKORacf6Ozf/eboXeRWGF9BgZMcAmztow28OwYBmbeMvpxSrcTO2J2w87GDyFuEvj598fu936FklAZfi2VZVJw5gwT7fprAa9NLU3NXbYIybISQZqPMwY+CrpnQpCOk7bqfVY4PdmgbTvR0C8C20OTm19+trQYClwArO2sD7+WfALlxLX8BIL4kHpPOT+JWdz/2+xhZlVnGPV5aOtImTeZWd7O++AKqUhO1USaEGI0yBz8KumZCk46Qto1hWJyMzkL/1SFc4B228SpCHhc2/9BWzl1g11Bt2N3cE0gMMPpytepabIjawIVdh6MOuJBywajnZORy5Lst17YPdnSC7O5do5+NENJ8lDn4UdA1E5p0hLQPkhol3C/G44169XdneUUhrbi6eRdWK4Hrm4HVr2oD79n5QI1xLX8BIDI3Ek4nnbjAu/jaYqObTEguXNBuZejdB6UHvKgqAyFPCWUOfhR0zYQmHSHtS2JBFT7ae4sLu/9x9YdHgBjVtarmXbgkRbcUmWePZq3ultSU4OsrX3Nhd6zvWNwrvGfUtWqTk5H67nvaqgzfLoC60rjgTAgxHmUOfhR0TYyqLhDSfrEsi8sP8zDEQ1uObIhHKALjCpq32smogdu7gTVdTbK6y7IsjoqPov/h/txBtV2xu6BiDA/ljFSK3F8WcmE3ZdRo1MTFG/VchBDjUNDlR0HXTGjSEdJ+yRQqbA5OxFuuAVzgnesdjZzyZrbTLU016epuYlmizkG1T/0/RW614b+zWJZF+fHjSBDZcg0myk+coK0MhDwhlDn4UdA1E5p0hJC04mp8vO82F3Zt3AKxNyK1ec0mGKaR1d15gMy4Rg5ylRxrbq/hwu6QY0Pgn+Zv1LVq4uKRMmo0t7qbu3ARGKkJWicTQppEmYMfBV0zoUlHCAE0q53n7ufoVGcY91sE7mUZf6gMQCOru281a3U3LCsMw04M4wKva6QrpErDQ6paIkH2N99yYTf1vQmoTUkx+rkIIfpR5uBHQddMaNIRQuqrkCmw5OxDLuy+vsQPruceQVJjeAMHjolXd4tkRfgy+Esu7I4/Mx4Pix8afB2WZVF6wAvi3n00Wxns+0Fy6ZJRz0QI0Y8yBz8KumZCk44Q0pjojDKM2XqNC7wD1lzBhdjc5u1nLU0FvMabZHWXYRl4x3vD/rA9RN4i2PnYYd/DfVAzhjfDkN29i2RHJ251N3/lSjAKhVHPRQjhR5mDHwVdM6FJRwjho1Ax2BWegp5u2sNqnx64g8zSZuxnbWx19/y3mm5rRnhc+hgTz03kVndnB85GgbTA4OuoSkuROXs2F3bTP5wOZV6eUc9ECGkcZQ5+FHTNhCYdIUSf7DIZPj8YxYXdHssCsD00GQpVMw6r/XV1d5u9ptOaEWRKGdxvunNh9+3jb+NK5hWDr8Oq1Sj67Tcu7CYNHgLpzZtGPRMhpCHKHPwo6JoY1dElhBiCZVn4PczHoLVXuMA7Zuu15h1WY9RA5G/Aqpc0YXfli0DEJs37RgjJDMHbx9/mAu+6O+ugUBu+BaEqLAyJgxw0gbdXb5Ts20clyAgxAQq6/CjomglNOkKIISrlSqy4EIfXl2gPq628FA9pczqr5d0HtvfXru56jQcqsoy6VIG0ALMCZnFhd8blGciuzDb4OoqsLKS9/wG3upvz409UgoyQZqLMwY+CrpnQpCOEGONuZjlGb9EeVnt7/VVEJBUbf0GFFLj0gzbsenQHHvkadSkVo8Lv937XqbkblBFk8HUYmUynm1raxIlQZGQY9UyEEMocTaGgayY06QghxqpVqbE1JAn/cfXnAu/Pp2JRLm1GxQLxZWDD67othOWVRl3qRu4NOJ104gLvmttrUKuuNegaLMui9NAhrgRZ4sBBqAoPN+p5CGnvKHPwo6BrJjTpCCHNlVhQhUk7b9QrRRaCgEf5xl+wMh/w+UAbdn+zBbLuGHWpIlkRZgfO5sLu9EvTkVOVY/B1pLfvIGnIUM3qrk0vFO/cCZZpxmE8Qtohyhz8KOiaCU06QogpqBkWXpHpsHEL5ALvd8fvG7+6yzDAzR3A6le0B9XC1wNqw/cCqxgVdtzfAVtvW4i8RRh6fCjCs8MNvo4yLw/pU6fUT5sRAAAgAElEQVRxWxmyv10AdbVxZdEIaY8oc/CjoKvHl19+CQsLw/8x0aQjhJhSdpkMM/fe1mk0EfK40PgL5j8EdgzSru7uHw2UpRt1qcjcSJ32wVvvboWKMSw4M3I58pYs1bYOfvc91KYb9zyEtDeUOfhR0G3ClStX8Pnnn1PQJYS0CAzDwudWhs7q7s8nYyGRGdlGWCED/H7Rht11/w94cAIwouRXfnU+PvH7RKfBRElNiUHXYFkWZUePQtxHpNm3O2Ag7dslRADKHPzaVNBNSUnB/PnzYWtrCysrKzg7Ozf6uYSEBIwePRodOnRA165dsXjxYij+0pZSKpXCwcEBpaWlFHQJIS1KZqkU0/+4xYVdh3VXEJZQZPwFEwOBjW9oA6/vF0BNhcGXUaqVWB+1ngu7w08NR3RBtMHXkUVHI2no29y+3ZI/9lC9XUKaQJmDX5sKuhcuXED37t0xffp09OjRo9GgW15ejm7dusHJyQlBQUHw8vJCp06dsGDBAp3Pff/99zh27BgAUNAlhLQ4DMPiQGQ6eizTthFe7PsAlXIjV3erCoEjU7Vhd2sfINO47mWBGYFwOOoAkbcIfX364sCjA2BYww6YKfPzdfbt5v6yEIxcbtTzENLWUebg16aCLlPvpO6kSZMaDboeHh7o2LEjysrKuPf27t2LZ555Bnl/9l+/ceMG3nvvPe7PKegSQlqqtOJqTNmlrcww1CMU15ONrLvLMMDtP4DVr/55UK0zELoaUBsentMkaZh8YTK3uvvd1e8gqZUY9jhyOXIXLuLCbvqH06EsbMbKNSFtFGUOfm0q6NbHF3QdHR0xZcoUnfcqKipgaWmJQ4cOAQDWr1+Pbt26wdraGtbW1rCwsIC1tTUKCgoE358mHSHkSVEzLPZGpOKtequ7S889QrWxXdUK44FdQ7Sru3uHA6WpBl9GppRhyfUlXNgdd2YcHpc+NugaLMui5I89XNhNdnRCzaM4g5+FkLaMMge/dhd0X331VSxbtqzB+6+99hpcXFwavZaQFd3Kykrk5uZyr5iYGJp0hJAnKrmwCh/siOTC7jsbruJmqmEHwjhKORDwqzbsru0G3D9i8EE1lmVxOuk0+h3uB5G3CP0P98fppNMG77mtDAlBQr/+EPe0QYKdPSoDAgwaT0hbRkGXX7sLus8++yw8PT0bvN+nTx/Mmzev0WsJCbru7u6wsLBo8KJJRwh5klRqBjvDUnS6qq24EAeZwsjV3eQQYNN/tIH31GdATbnBl4kvjce4M+O41d1lkcsM7qYmT0hA8vAR3Opu8fYd1FyCEFDQbQoF3T81FXSFoBVdQkhLklBQife2XefCrtOmMNzPMjygAgCqi4FjM+p1VBMBufcMvoykVoLvQr/jwu7MyzNRIBW+JQwAVCUlyPhoJhd2c378CUxNjcHPQkhbQkGXX7sLusZsXTCEp6cnunbtildeeYUmHSHkqVKqGfx+JRlvLtWs7r6x1B87riZDzRhRqotlgah92o5qq1/R/GzgFgSGZbD7wW4u7DqddMLdwruGXUOhQN6vLtpDalOmQmnAGQpC2hoKuvzaXdB1dHTE1KlTdd6TSCQ6h9FMgSYdIaSliMuVYMTmcG51d/qeW8itMHIVNC8W+L2vbs3d2iqDLxOeHY4hx4ZA5C2CvY89jiccN2jfLsuyKD1wAGKbXppDasMcUfPokcHPQUhbQJmDX7sLuh4eHnjhhRdQUaEthr5//36d8mKmQJOOENKSyBQqLDn7kAu7tu5B8HuYb9zFaiqAE59ow+72/ppKDQZKl6Tj/fPvN2vfbtXVMCTWHVLr1x/VN24Y/ByEtHaUOfi1qaArk8ng6+sLX19fDBo0CL179+Z+Li7W1JWsaxjh7OyM4OBgHDx4EJ07d27QMMJYtHWBENKSBcblo+/KYC7wLjr9AFJjypCxLHBrJ7DqJU3YXdNVU5XBQNWKanx3Vbtv96PLHxm8b1eemIRkRydtJ7Xdu6mTGmlXKOjya1NBNyMjo9HKBxYWFgiv1y9dLBZj1KhReO6559ClSxcsWrSoQQvg5qJJRwhpqfIlNZi59zYXdod7huNhjuEtfwEA2VHAll7a1d3z3wAKmUGXaGzfrqGtgxU5OUj7YBK3bzfPZQlYE/9eJ6SloszBr00F3ZaAVnQJIa2BmmGxOzyVO6j25lJ/7ApPMe6gmrRUt33wriFASbLBl6m/b9fOxw5HHh8xaGWWqa3V6aSW+dksqCWGdWMjpDWioMuPgq6Z0KQjhLQGD7Ir4LwpjFvdnbn3NvIlRhxUYxggwlPTNtj9H8C614C4MwZfJkOSgQ/Of8Ct7rpcd4FcJRc8nmVZFG/bxoXd1HffgyI72+DnIKQ1oczBj4KumdCkI4S0FtJaFRb7PuDCbt+VwQiMM/KgWnqEboMJv18AlWEHzKRKKX4K+0ln326RrMiga1ScPQdxHxHEPW2QNPRt1MTGGjSekNaEMgc/CromRlsXCCGtld/DfNi6B3GBd8nZh8Z1VKsqBA5N0IbdPU5AeYZBl2BZFvse7oOtty1E3iKMPDUS8SWGVXaQ3r6NxIGDNBUZ+tqh0t/foPGEtBYUdPlR0DUTmnSEkNYot6IG0/fc4sLuiM3hiMs1Yp+rWgWErtaG3fX/p2knbKCrWVcx6OggiLxFGHhkIAIzAg0aX5uaipSRo7itDIUbN1HbYNLmUObgR0HXTGjSEUJaKzXDYsfVZLzx50G1/7j6Y19EGhhjDqolh2hCrvs/APdOQJiHZj+vARLLEjHGdwy3lWFX7C6DDqmpSkqQ+d9PubCb+/PPYKgiA2lDKHPwo6BrJjTpCCGt3b2scjhu1B5Um3MoGuVSIwJieaZm+0Ld6u7RD4GacoMuUVJTgk/9P+XC7sJrC1GjEn5ojlUqke/mpq3I8OlnUFdWGvpNCGmRKHPwo6BrYrRHlxDSllTJlfjxxH0u7A71CMXdzDLDL6SUAxe/04bd3+0M7qamUCvgGunKhd3pl6Yb1FyCZVkU79jJhd20iROhzDfy0B0hLQgFXX4UdM2EJh0hpK1gWRYno7PQY1kArF388MZSf+y5lmrcVoa7h4DVr2jC7tp/GlyCjGVZHIw7yB1SG3FqBB4VPzLoGhW+vhD37gNxTxskOzpBnpho0HhCWhrKHPwo6JoJTTpCSFuTUFCJkZvDudXdL4zdypAdDWy20a7uBrlqDq8ZIDw7HA5HHSDyFmHAkQHwTzOsokJ1RAQS+vWHuKcNEgcMhPTWLYPGE9KSUObgR0HXTGjSEULaImmtCj+djOXC7hBjtzJUFwEH39WGXe+Jmg5rBkguT8a4M+O4rQw77u8Awwo/6FYTF4+kd4ZptjKIbCG5eNHQb0FIi0CZgx8FXROjPbqEkLaOZVmcis7W2crwhzFbGdRKIMBFG3a39gHyDGvsUCYvw6yAWVzY/SX8F4MOqSlycpA6/l1u327Jnr0GVXQgpCWgoMuPgq6Z0KQjhLR1f93KMPtgFMqM2crw4CSwposm7K7pAsQeN2j4Xw+pzbw8E8WyYsHjVeXlyJj5MRd281euBKtWG/otCHlqKHPwo6BrJjTpCCHtQWNbGWIyjNjKkP8A2CrSru76L9Ks+ArEsiy84ry4Q2qjfUcjsUz4ITNGLkfOd99zYTf7m2/B1AhfGSbkaaLMwY+CrpnQpCOEtBd1Wxl6ujVzK4O0FPD5QBt2vcZr2gkbIDQzlOuk5nDUARE5EcK/h1qNgrXruLCbPmMGVGVGhHZCnjDKHPzMGnRra2vNefkWjSYdIaS9SSyoalCVoUJm4FYGtQoIWa4Nu5t7Arl3DbpEfGk8RpwaAZG3CH19+uKY+JjgsSzLotTrIBd2U8aOhSIry7DvQMgTRpmDn1mDbqdOnfDNN98gJibGnLdpkWjSEULaI2mtCj/X28rwzoareJhTYfiF4s4Ca7tp9+0aWG+3QFqAaRencft2Pe54QM0I33cr8fNDgsgW4p42SBr6NmoePjT0GxDyxFDm4GfWoLtp0yb07t0bVlZWEIlE2Lp1K4qLhR8QaI2o6gIhpL1jWRYnorLw1p9VGd5yDcDRO5mGVzMoiNPdt3t1LcAILx8mVUrxbei3XNj9LvQ7yJQy4eOjopA4yAHinjZIsLNH1dUww56fkCeEgi6/J7JH986dO/jqq6/QuXNn/O1vf8OUKVNw+fJlMAb8wmptaNIRQtq7uFwJhm28yq3u/nwqFjUKA6sZVBcDB8Zqw+7JTwGFVPBwNaPG+qj1XNidcXmGQRUZapOTkTx8hGYrQ+8+qDh/3rDnJ+QJoMzB74keRpPL5Th+/DgGDx4MKysrdOvWDS4uLsjMzHySj/FE0KQjhBBAIlNirnc0F3bH/RaB9BLhQRUAoKoFzn+jDbt/DAMkhv1uPfL4CFeRYYzvGKSUpwgeqywsQtrE97l9u2U+hw17fkLMjDIHvycadENCQjBz5kz87//+L7p06YLZs2fj//7v//D3v/8dBw8efJKPYnY06QghRINhWOwMS8G/l2jCbp8VQQiKLzDsIiwL3NwOuHfShF3PHgYfUgvNCsXAIwMh8hZh6LGhuJN/R/BYdUUFMmZ8xIXd4u07qLEEaTEoc/Aze9BNT0/H8uXLYW1tDSsrK4wdOxa+vr5QKjX1ERmGwcKFC9G1a1dzP8oTRZOOEEJ03UwtwYA1Idzq7m9XkgwvQZYYCKx7rd4htbMGDX9U/AhOJ50g8hbB/rA9LqYKb/vLSKXI+mIOF3YLVq8B24a34JHWgzIHP7MG3eHDh+OZZ55B9+7dsWLFCt4tCtHR0bC0tDTnozxxNOkIIaShAokck3be4MLu/MMxqK5VGXaRwnjdQ2rhGzQrvgJlV2Vj4rmJ3L7d3bG7Ba/OMgoFcn78iQu7ub8sBKsU3tiCEHOgzMHPrEF36tSpCAgI0PsLRKlUtrl9ujTpCCGkcXKlGgtPP+DC7ugt15BWXG3YRaqLgQNjtGHX9wtAKbyTmaRWgtmBs7mwu+LmCqgYYYGbVauRv3wFF3az5s+nLmrkqaLMwc+sQTciIgLV1Y3/8qqurkZEhPCONa0NTTpCCOHHsiy8ItPxxlJ/WLv4QbQiCFceG9YFDUo5cHaeNuzuGwFUCd/7q1ArsDhiMRd2vw39VnD5MZZlUbRlKxd2Mz75L9SVlYY9PyEmQpmDn1mDrpWVFaKiohr9s7t378LKysqct38qqI4uIYQIdyu1FP1Xa/btvr7EDzvDUgw75MWywPXN2rC7pReQ/0DwcIZl4BntyYXdT/w+QZlceNvf0gNeXNhN+2ASVG28VjxpmSjo8jNr0LW0tOQNuteuXUPHjh3NefuniiYdIYQIk1dRg4nbI7mtDN8evQeZwsB9u48vAmv/qQm7a/8JiC8bNNwn3ocLuxPOTUBOVY7gsRVnzkLcq7emZfCYsVDkCB9LiClQ5uBn8qAbERGBVatWYdWqVbC0tMS8efO4n+teS5cuRd++fTFkyBBT377FoElHCCHCyZVq/HjiPhd2x/9+HdllwruYAQDyYoHNNn+u7nYCbv9h0PCA9AD0O9wPIm8RnE8643HpY8FjK0NCuJbBycMcIU9KMuzZCWkGyhz8TB50N2zYgM6dO6Nz586wsrLCCy+8wP1c9+rSpQucnJwQExNj6tu3GDTpCCHEMCzLYm9EKldvt9/qENxOKzXsIlUFwF5n7VaGABdALXx1OCo/CkOODYHIWwSHow64mXdT8Fjp7dtI7Ncf4p42SHQYDNn9+4Y9OyFGoszBz6xbF15//XXExsaa8xYtFk06QggxTnhiEUTuQbB28cObS/1x+FaGYft2a6uBox9qw+6hCYBM+L7bxLJEjDg1QlNr18cel1IvCR5b8+gRkgYPgbinDRL69Yfs3j3hz02IkShz8HuindHaE5p0hBBivLTiaozcHM5tZVhy9hEUKgOaM6hVQOBSbdjdPgAozxA8PK86D++ff5/bt+sV5yU4bNempSHZyVmzstuvP6rCw4U/NyFGoMzBz+RB9+LFi5BIJNz/1vdqq2jSEUJI81TJlZhzKJoLu9N230RxVa1hF3lwAlj1sibsbnoTyBW+wlohr8Cn/p9yYXd91HqoGbWgsbXp6Uh2dNJUZOjVG2Xe3oY9NyEGoMzBz+RBt36lBUtLyyZfLbW8GMMwGDJkCOzs7CASifDhhx+i0sD6iDTpCCGk+RiGhWdQIhd2h3iE4lGOxLCLpF0DPP6lrciQFCR4qFwlx/dXv+fC7qJri6BQKwSNVRYUIG3yFK78WNFvvxm2BYMQgShz8DN50M3MzIRCoeD+t75XS1U/2P78889wc3MzaDxNOkIIMZ3LD/Ng4xYIaxc/9FgWgAuxBv5uLXysqbHr/g9gZWcg5qDgoWpGjVW3VnFh98vgLyFVSgWNZWQyZH/1NRd2Cz08KOwSk6PMwa9N7dFNSUnB/PnzYWtrCysrKzg7Ozf6uYSEBIwePRodOnRA165dsXjxYi6c/xXDMJg/fz6WL19u0LPQpCOEENOKz5Pg7fVXudVdjwAx1IwBobEyD9j9tnbfbugqTcMJAViWxa7YXVzYnXF5BkprhFWEYJVK5Pz4Exd285evAMsYsN+YED0oc/Aza9C9e/curly5wv1cUVGBr7/+Gs7OzlizZo3J/6v2woUL6N69O6ZPn44ePXo0GnTLy8vRrVs3ODk5ISgoCF5eXujUqRMWLFjQ4LOjRo3Cyy+/DGdnZ95Wxnxo0hFCiOmVVtdixp5bXNidcyga0loDmkvIKwGfD7Rh9+w8QCVsKwIAnEg4AVtvW4MbS7AqFfJ+deHCbt6yZRR2iclQ5uBn1qDr6OgId3d37ufZs2fjH//4B6ZNm4bnn38ea9euNen9mHq/NCZNmtRo0PXw8EDHjh1RVqYtNbN3714888wzyMvLa/B5tVqNhQsXYuPGjQY9C006QggxD6Wagdv5OC7svvv7deRLaoRfQKUAzn2tDbve7wNy4ft+gzKCuMYSI06NQGJZoqBxLMMg3225dmXXzY3CLjEJyhz8zBp0X375Zfj7+wMAampq0KFDBxw8qNkXtXPnTvTo0cNs9+YLuo6OjpgyZYrOexUVFbC0tMShQ4cavVZcXBz69Olj0P1p0hFCiHkdupHONZcYtPaKYYfUWBYIW6cNu7uGAhLhv6/v5N+Bw1EHiLxFGHpsKO4W3hV2W4ZBvpubdmX311/Bqgxsd0zIX1Dm4GfWoPvcc8/h2rVrAIArV67gmWee4VZSr1+/jueee85s9+YLuq+++iqWLVvW4P3XXnsNLi4uAICSkhKUlJQA0OzLcnd3x0cffdTk/SorK5Gbm8u9YmJiaNIRQoiZhSUUofdyzSE1G7dABMUXGHaBez7Ayhc1YXezDVAQJ3hofGk8nE46QeQtQv/D/XE166qgcSzDIH/5Ci7s5nz/A1iecyKECEFBl59Zg26fPn248Dh79mw4ODhwf3bmzBl07drVbPfmC7rPPvssPD09G33WefPmAQDi4+PRv39/2NraQiQS4aOPPkJRUVGT93N3d4eFhUWDF006QggxL3F+JYZ6hMLaxQ+vL/HD3ohUw86AJIcAa7tpwq7Hv4C0cMFDMyszMe7MOIi8Rejr0xdnk88KGseyLAo91nNhN2vePDByufBnJqQeCrr8zBp0vby8YGlpiVdeeQVWVlY4duwY92ffffcdRo8ebbZ7NyfoGoNWdAkh5OkpqpTjgx2R3L5dlzMPoVQbsP81LxbwfEsTdle9BMQeFzy0WFaMaRencRUZ9j/aLyhosyyL4m3bubCb+dksqKuFlS0jpD4KuvzMXl4sIiICmzdvRlhYmM777u7u8PPzM9t9m7N1oTk8PT3RtWtXvPLKKzTpCCHkCapRqPH1kbtc2P1k/21IZErhFyjPBHYM0u7bvbISEHhYrEpRhc8DP+fC7oaoDYJXlUsPHODCbvqMGVBLDGyIQdo9Crr82lQd3fqaOow2depUnfckEkmTh9GMQZOOEEKePIZhsSEwgQu7IzeHI7PUgFXSmnLg4HvasHviE0AprKJDrboWP1z9gQu7G6M3Cg67ZceOcWE3bdJkqEqF1eglBKDM0RSzB12VSoWbN2/i1KlT8PHx0XkdPnzYbPdtqrzYCy+8gIqKCu69/fv385YXMxSt6BJCyNN3KiYbby71h7WLH/qtDkFMRpn+QXVUCuDSj9qwe/BdweXHVIwKS64v4cLulpgtgsNuxbnzEPfqDXFPG6S++x6UhYXCn5m0axR0+Zk16EZHR6N79+6wsrKCpaVlg5eVlZVJ7yeTyeDr6wtfX18MGjQIvXv35n4uLi4GoG0Y4ezsjODgYBw8eBCdO3dutGFEc9CkI4SQp+tmagn6rgyGtYsf3nINwPn7Bvw+Zlkgcqs27P7xDlDd9KHkOipGhV/Cf+HCrmukK5SMsC0UlYFBEItsIe5pg5RRo6HIoX+HEP0oc/Aza9AdOHAg+vfvj4iICBQXF0MikTR4mVJGRkajlQ8sLCwQHh7OfU4sFmPUqFF47rnn0KVLFyxatIi3BbCxaNIRQsjTl1pcDadNYdxWhq0hSYZVZLjrDazsrAm72+yB8gxBw5SMEkuvL+XC7lchX0GqFLaFovraNST0tasXdoV1XyPtF2UOfmYNus8//zyCgoLMeYsWh7YuEEJIy1ImVWD6H9q2wd8fvw+5Ui38Ao8vAqtf0YRdzx5AYbygYSzL4vd7v3Nhd/ql6SipKRE0VnrrFhJs+0Lc0wZJQ4ZCLhYLf17S7lDQ5WfWoDt48GD4+PiY8xYtFk06QghpOWpVavx8KpYLu1N330SZ1IC/yUu7Bqx7TRN213cHsm4LHno84ThsvW0h8hbhg/MfGBR2EwcOgrinDZKdh0NpgnMkpG2izMHPrEH3/v37sLe3R1hYGJh21s+bJh0hhLQsLMtix9VkLuwO9wxHVqlM+AXy7gMb/60Ju2u6AknBgoeGZIbA3sceIm8R3j//vuCwWxMfjwT7fhD3tEGiw2BIb98R/ryk3aDMwc+sQbdz58547rnnYGVlhf/5n//Biy++2ODV1tDWBUIIadkuPsjDW64BsHbxw4A1IXiYU6F/UJ2SFGBrH21jiYenBA8NzQzVCbvFsmJB46qvX0fiIAeIe9ogoa8dqq9HCn9e0i5Q0OVn1qDr7u6OlStXNvlqq2jSEUJIy3UztQSiFUGwdvFDr+WBCEsQVlEBACDJBXY6aCsy3P5D8NDQLG3YnXhuIgqkBYLGKbKzkTJylCbsimxRHREh/HlJm0eZg1+bbRjxtNGkI4SQli2hoBKD14XC2sUPbyz1x4moLOGDZWXA/lHasBu6WlOSTICrWVdhf1gTdkf7jka6JF3QOGV+PlLGjtWEXTt7yGJihD8vadMoc/B7IkFXLpfj0aNH8Pf3R2Vl5ZO45VNDWxcIIaT1yJfUYOzWCG7f7hZDyo8ppMDhKdqwe2EBoFYJGhqZG4mBRwZC5C2C4wlHxJcKq+SgLCxEyoiRmj27AwZC/vixsGclbRoFXX5mD7obN27ESy+9xDWIuHfvHgBg3Lhx8PDwMPftnxqadIQQ0jpUypWYufc2F3Z/9X0IlVrgAWqVAjgzVxt2j30EKIQdcIstisXQ40Mh8hZh8LHBiMqPEjROkZmJpHeGaUqPDX0btWnCVoRJ20WZg59Zg+6aNWvQoUMHbNq0CTExMbC0tOSC7s6dO+Hg4GDO2z9VNOkIIaT1UKgY/HDiPhd25xyKRo1CYK1dhgGCXLVhd/9ooEbYAbek8iSMODUCIm8RBhwZgJu5NwWNkycmcgfUkoePoNJj7RxlDn5mDbrdu3fH1q1bAQBqtVon6IaEhLTJqgt1aNIRQkjrwjAs1vo95sLu5F03UG5Ird2b27Vhd4+TZh+vADlVORh3ZhxE3iL0P9wf13OuCxonu3efKz2WMnoMtQtuxyhz8DNr0P373/+O0NBQAA2DbnBwMDp06GDO2z9VNOkIIaR12heRxoXdEZvDkVNuQK3d+0cA906asLv7HUAqrF5ufnU+3j37LkTeIvQ73A/Xsq8JGlcdeYProJboMBjSW7eEPytpMyhz8DNr0BWJRHB1dQXQMOi6urq2ya0LdBiNEEJavwuxufiPqz+sXfwwaO0ViPMNOEj94CSwsrMm7O4cDFQVChpWIC3AhHMTIPIWwf6wPa5mXRU0TnrzJreNIXHAQNSmpQl/VtImUNDlZ9ag6+Xlhf/5n//BypUrER8fD0tLS/j5+WHPnj3o0KEDTp48ac7bP1U06QghpHW7nlyM3ssDYe3iB5F7EG6nlQofHHcGWPmiJuz+3hcoTRU0rEhWhInnJmrCro89rmReETROkZ2NpLff0ezZdXSCPDFJ+LOSVo8yBz+zV13YtGkTOnbsCCsrK1haWsLS0hIdO3bEli1bzH3rp4omHSGEtH5xuRIMWBMCaxc/vOUaAP9H+cIHiy8Dq1/VhN2N/wZy7goaVlJTgknnJ0HkLYKdjx0CMwIFjZPdu4eEfv011RiGDaMDau0IZQ5+T6SOblVVFYKDg3Hs2DEEBgZCIpE8ids+VTTpCCGkbcgslcJ5UxisXfzw+hI/eN/MMGDwTWB9d03YXftPIDlE0LDSmlJMvjAZIm8R+vr0hV+an6BxNY/ikNh/AMQ9bZA28X2oq6uFPytptShz8DNr0PXx8UFpaeN/1VNWVgYfHx9z3v6poklHCCFtR0l1Ld7fEckdUtsUlCC8sUSRGNjSSxN2V70MJAgLreXycky7OI0Lu8fExwSNq74eCXHvPhD3tEHGx59AVSLsQBxpvShz8DNr0LWyskJUVOMFsO/evQsrKytz3v6poMNohBDSNklrVfjMK4oLuwtPP4BSaGMJSQ6wfYDBYbdCXoHpl6ZD5C2CyFuEtbfXQs3or+9bfuIkxD1tNHt2nYej5lGcsOckrRIFXX5mDbqWlpa8QTc4OBidO+yB6VAAACAASURBVHc25+2fKpp0hBDS9ihUDH46GcuF3dkHoyBTCGv7i6oCYMdAg8OuVCnFgtAFXNhdcXMFGFZ/wJZc9kOCnb2mGkO//pDdvy/sOUmrQ5mDn8mD7oULF/DFF1/giy++gKWlJSZOnMj9XPf6+OOP8a9//QujR4829e1bDJp0hBDSNjEMC48AMRd2J+28AYlMKWxwVWG9sPsSEHdW0DA1o8bqW6t1VnaFbJ2QJyQgeZij5oCaw2Ao6d9JbRJlDn4mD7p79uyBvb097O3tYWlpiR49enA/170cHBwwa9YspKYKK7fSGtGkI4SQtu1AZDoXdt/9/TpKq2uFDawqBHYM+rOLWicger+gYQzLYMXNFVzY3RyzWVDYrU1LR6LDYO6AmiIzU9hzklaDMgc/s25dGD58OMRisTlv0WLRpCOEkLbP924O/r3kzy5qnuFILqwSNlBaAux11rYMDt8ACAitakaNXyN+5cLurthdgm5XFR4OsU0vrs4uVWNoWyhz8Hsi5cXaI5p0hBDSPlx6kIc3l2q6qPVdGYy4XIElNGurAO/3tWE34FdBYVfFqPBT2E9c2D3w6ICg21VH3kBCXzuIe9qgcMNGYc9IWgXKHPzMHnTFYjHWrVuHb775psFe3Tlz5pj79k8NTTpCCGk/YjLK0G+1prFEnxVBCEsoEjZQVQuc/FQbdv1+ARj9B82UaiW+ufINF3aPio8Kul3xtm1cNYbinTvBSKXCnpO0aJQ5+Jk16B48eBDPPPMMOnbsiN69ezfYq9uvXz9z3v6poklHCCHty+O8SgxYcwXWLn74j6s/ricXCxvIqIFzX2nD7qUfBYXdWnUt5gbP5cLu6aTT+m9VU4P0GTN0So/Rnt3WjzIHP7MG3TfffBOffvopampqzHmbFoXq6BJCSPuVV1GDEZ7hsHbxQ6/lgbiXVS5sIKMGzn+rDbsXvxMUdmVKGWYFzILIWwRbb1tcSr2k/1YyGfLd3LimEikjRkJdWSnsOUmLREGXn1mD7vPPP4/Q0FBz3qLFoklHCCHtU065DEM8QrmwGxRfIGwgw2gCbl3YPf+tJgDrUa2oxsd+H3Md1IIyggTdThYdze3ZzXdzE/aMpEWizMHPrEF32rRp8PDwMOctWiyadIQQ0n6lFFXBYd0VrvzYnmsCy2kyjGbrQl3YPfeVoLArqZXgw0sfQuQtgr2PPcKzwwXdrnT/fu2e3W3bhLc1Ji0KZQ5+Zg26oaGheOutt7BixQpERETg4cOHDV5tFU06Qghp3wor5fhgRyQXdreEJAkLkgyjOZRWF3ZPfw6o9TekKJOXYdL5SRB5i9DvcD/czLupdwyrUiHrizkUdls5yhz8zN4CuO5lZWWl86p7r62iSUcIIUSuVOOLQ9Fc2PUIEAsLkiwLBLhow+6xjwClXO+wYlkx3jv7HkTeIgw8MhDRBdH6b6VQIOf7H7iwm++2HKxKYFtj0iJQ5uBn1qAbHh6Oa9euNflqq2jSEUIIAQCFisH8wzFc2F1xIQ4MIzDshq7Whl3v9wGF/nJg+dX5GOs7FiJvEfof7o/A9ED9t1IokP3tAi7sFm3ZKuSrkRaCMgc/ahhhJjTpCCGE1FGqGXx3/D4Xdn859QAqtf6qCgCA65u1YffAWECuvyFFdlU2xp8Zz5UeOxR3SO8YlmGQ77acC7tVV68Kez7y1FHm4GfyoNu5c2e8+OKLgl4vvfSSqW9vMqWlpRg/fjx69OgBkUiEL774ArW1AvuYgyYdIYQQXWqGhcuZh1zY/erwXdSq9B80AwDc/kMbdvc4ArIyvUPK5GX4r/9/ubB7MuGk3jGsQsHV2U2w74eyo0fBCihzRp4uyhz8TB503d3dsXLlSsGvlqqsrAwREREAAIZhMHPmTGzevFnweJp0hBBC/oplWay5/JgLu58euAOZQuB+2Hs+gHsnbditqdA7RK6SY07QHK7Orn+av94xyvx8JA0ZStsYWhHKHPza3NaFlJQUzJ8/H7a2trCysoKzs3Ojn0tISMDo0aPRoUMHdO3aFYsXL4ZCoeC97ubNm/HDDz8Ifg6adIQQQhrDsiy2hSZzYXfq7puQ1OivqgAAeHhKG3b3jQRqq/QOkSqlmHl5JleN4V7hPb1jFJmZyPpyHhd2y3x8qBpDC0aZg1+bC7oXLlxA9+7dMX36dPTo0aPRoFteXo5u3brByckJQUFB8PLyQqdOnbBgwYJGrymXyyESiRAYqH9Dfx2adIQQQpriFZnOhd1xv0WgQKK/qgIA4P4R7TYGr/GCDqhVyCu4agyOJxyRU5WjdwyjUCB9urZdcL67O21jaKEoc/Brc0GXqfd/wkmTJjUadD08PNCxY0eUlWn3OO3duxfPPPMM8vLyGlxvxowZ+P777w16Dpp0hBBC9Dkdk403lvrD2sUPY7ZeQ6Vc4MpujFe9agwTAWWN3iFpkjQMPTYUIm8RxvqORWqF/iYW6upq5Hz3PRd2S3bvFvZ85ImizMGvzQXd+viCrqOjI6ZMmaLzXkVFBSwtLXHo0CGd97/++mvMnDlTJ0ALQZOOEEKIECGPC7mwO3F7JPIl+kMrAOD2bm3YPTIVUOk/MH07/zYGHBkAkbcIQ48PRUxBjN4xrFqNvF9/1RxQE9mi+nqksOcjTwxlDn7tMui++uqrWLZsWYP3X3vtNbi4uHA/L168GBMmTIBSqf+/sCsrK5Gbm8u9YmJiaNIRQggR5GR0Fl5fotnGMGJzOCpk/GdGdET+pg27x2cK6qD2oPgBHE84QuQtwqCjgxBXEqd3jLq6GsnDHLmV3dK/LAqRp4uCLr92GXSfffZZeHp6Nni/T58+mDdvHgAgPj4eFhYWsLGxgZ2dHezs7LBo0SLee7m7u8PCwqLBiyYdIYQQIUIeF+I/rpqVXedNYUgs0H/QDABwbaM27J76DFDrr+KQVZmFkadGcnt20yRpesfUPHiAlLFjNSu7tn1Rm6Z/DHkyKOjyo6BbT/2gayha0SWEENJcF2JzubA7aO0V5FYI2MbAskDoKm3YPTMXYPTX500uT8bbx9+GyFuE0b6jUSAt0DtGXV2NZOfhEPe0Qeq48VCVlwv5WsTMKOjya5dBV+jWBWN4enqia9eueOWVV2jSEUIIMdjdzHL0Xh4Iaxc/DPUIRXKhgJVdlgWCXLVh98K3gICzJbFFsRh0dBBE3iJ8cP4DVMj11+aV3omCWGQLcU8bpH84HYxUf9UHYl4UdPm1y6Dr6OiIqVOn6rwnkUgaPYxmLJp0hBBCjHU9uRg93QJg7eIHW/cgxGbrD6BgWcBvoTbsXv5Z854ekbmRsPexh8hbhOmXpkNSq7/FcKW/P8Q2vSDuaYOsOXPBNlGHnpgfZQ5+7TLoenh44IUXXkBFhfYXx/79+xstL2YoWtElhBBiCvezytFvdQi3jSFPyDYGhgEufqcNuwEugsKuf5o/bL1tIfIWYerFqSiTC2gxfPgIdzgt+6uvoa4SuKeYmBwFXX5tLujKZDL4+vrC19cXgwYNQu/evbmfi4uLAWgbRjg7OyM4OBgHDx5E586deRtGGIMmHSGEkOZKKqxCrz+3MYjcgxAqLtQ/iGGAs/O1Ydd3DqDU34zCL80PfX36cmG3SqE/uBb99hsXdjM+/gSsgCpFxPQoc/Brc0E3IyOj0eoHFhYWCA8P5z4nFosxatQoPPfcc+jSpQsWLVrUZAtgQ9GkI4QQYgqh4kKI3INg7eKH/7j6IyyhSP8gtQo495U27B4YI6hdcFBGEBd2ZwfORq266dq8LMvqrOwWbdkq9GsRE6LMwa/NBd2njbYuEEIIMbUCiRwjPMNh7eKHt5YFICKpWP8glgWubfpLBzX9K7tnks5A5C2CyFuE765+B4Va/yJQwbp1mrDbqzdqHj0S8pWICVHQ5UdB10xo0hFCCDGlAokcTpvCYO3ihx7LAnAzpUTYwKh92rB74hNBdXb3PtzLhd2vrnyFGlXT+4OZ2lqkvvsexD1tkOzohJrYWGHPRkyCMgc/CrpmQpOOEEKIqeVW1OCdDVdh7eIHG7dA3EkrFTaw/sruua/0lh5jWRa7H+zmwu7coLmQq5peDa55+BAJ9v0g7mmDxEEOUObnC/1apJkoc/CjoGtitHWBEEKIOWWXyTDUIxTWLn7otTwQ97MENG34a51d/8WCqjEcjDuoXdkN+Urvnl15UhISHQZD3NMGmZ/NAqvW37iCNB8FXX4UdM2EJh0hhBBzySiRwmHdFVi7+GHAmhBkl8n0D2JZTSOJurAbtk7QveqH3QWhC6BUN11ZoTIwiDucVvLHH4LuQZqHMgc/CrpmQpOOEEKIOSUVVkG0QlON4e31V5FaXK1/EKMGTn2mDbs3fhd0rz0P9nBh96ewn6Bkmg67eUtdubCbu3gxNZQwM8oc/CjomglNOkIIIeZ2M7WE66AmWhGEqHT9jR6gqgUOT9GG3cjfBN1rx/0dXNj9NeJXMCz/Pl91tRSZs2drG0osWABWpf8QHDEOZQ5+FHRNjPboEkIIeZJiMsrQ/88Oan1WBOFhjoB2wQoZ4POBNuze2aN3CMuy2HJ3Cxd2d8fubvrzDIOi33/nwm6eqysYqVTo1yIGoKDLj4KumdCkI4QQ8qRklEgxcK1mz67dqmAkFghox6usAQ5P/jPsdgLEl/QOYVkWrpGuXNgNyQzR+/mCteu4sJsyYiRUZQJWnYlBKHPwo6BrJjTpCCGEPEmJBVWwWxUMaxc/DFx7BRklAlZPa6uBPU6asLumC5B6Vf8QdS0+8f8EIm8RBh4ZiHuF95r8PKtW64TdgnXCDsER4Shz8KOgayY06QghhDxpD3Mq0KfeAbW8iqYbPQAAqgqB30SasLv6FSAxQO+QkpoSjPEdA5G3CEOPDUVCWYLeMcW7dkHc0wYJIltUnD8v5OsQgShz8KOga2K0R5cQQsjTFJVexh1QG+EZjgKJ/ra/qMgCfrfThN1VLwEZN/QOyazMhNNJJ4i8RXA66YTc6qb/fcdIpUgZMZJb2a0MaXrbAxGOgi4/CrpmQpOOEELI0xKRVIy3XDVhd4hHKMT5lfoHVRUA2/ppwu7Gf2vCrx6JZYkYemwoRN4iTL4wGdWKpkucqYqLkTHjI02rYOfhdDjNRChz8KOgayY06QghhDxNYQlFsHEL5Kox3M0UcAisJBnw6K4JuzsdgMo8vUNu5t2EnY8dRN4ifBv6LdRM093QatPSkSCyhbinDUr37xf6dUgTKHPwo6BrJjTpCCGEPG2PciRcNQaRexCSCwVUY0i5Aqx8URN2t/QGisR6h5xIOMFVYvCM9tT7+YJVqyHuaYOkYcNQcf48chcugjwpSchXIo2gzMGPgq6Z0KQjhBDSEqQWV3N1dod7hqOkulb/oMRAYO0/NWHXozuQfl3vkLW313Jh92zy2SY/q8jJgbh3H26/rrinDRL7D0DNo0dCvxaphzIHPwq6ZkKTjhBCSEtxN7MM/3H1h7WLHxw3hgkLu7l3gY1vaKsxxDddKUHFqPBl8JcQeYtg72OP6ILoJj9fsmevTtAV97RB1hdfGPK1yJ8oc/CjoGtiVHWBEEJISxTwKB9vLdMcUFt6TuDKaVma9oDa6leBvNgmP16pqMTEcxMh8hbhnRPvILsyu8nP1zx8iLJjxyC5dIkLu/LERKFfifyJgi4/CrpmQpOOEEJIS7MvIg3WLn54Y6k/fruShOpalf5B0hJtnd2tIkDW9KG2rMosvH38bYi8RXj//PuQ1Er03oJVq5EyeoxmVffLeWBZVuhXIqDM0RQKumZCk44QQkhLU6tSY+TmcFi7+MHaxQ8O664gpajpkmAANCu5a7powq7XOEAha/LjUflRsPexh8hbhOmXpqNCXqH3FpJLl7VbGOZ+CWVBgdCv1e5R5uBHQddMaNIRQghpiSpkCqz1e8zV2XXcGAaJTKl/4IMTmqDr/g/g8GRA1fQ+30upl9DXpy9E3iJMuTgFJTUlTX6eZVnkfPc9F3bTZ8yglV2BKHPwo6BrJjTpCCGEtGR3M8u4Pbu/nHogbNCtXdqwe+ITQN301oeA9ACuxu77599Hkayoyc+zCgUKN23iwm719UihX6ddo8zBj4KumdCkI4QQ0tLtv57GbWPYGJggbAU1fIM27J6dDzBMkx8PzQyF/WHNNoZ3z76L/Or8Jj/PsiwyZn4McU8bpE2eAlYlYB9xO0eZgx8FXTOhSUcIIaSlUzMsPj8YxYXdDULCLssCQa7asHv5Z817TYjIiUD/w/25VsFSZdOtf2UxMdyqbvHOnYZ+rXaHMgc/CrpmQpOOEEJIa6BQMVhw7B4Xdn/1fQg1IyDsXvpBG3avuOu9T2RuJLeN4fur34Nhm14JzndbzoXdfDc3KAsLhX+pdoYyBz8KuiZGdXQJIYS0Nko1g6+P3OXC7vILcfpXdhk1cGauNuxG7dN7n6Pio1z3tF2xu5q+/P9v787DoqoaP4BfwFJJ0XIhIZveFjeG1Mw2BTLJ5c0yfV+tzKLlJ1bma5Y67uRGKppr5oZQmRsmLoCACynumJoaiKiIgAuyyjrAzPf3x8TF23BnAOeyjN/P89znbc49d+bc+5zXvh3PPSc/H1c/+kgMuwm9PaErKKjKbd03GHTlMegqhJ2OiIjqE51OjynBZ8Wwu+NMqvmLSouB9UMMQXdGCyA5xmR1vV4Pn8M+4u5p8Znxptuk1eL2ihVi2L31/aKq3NJ9g5lDHoOuQtjpiIiovinV6TF87TGoNCF4alIolu69aH5ktzAbWNLFEHYXdgRy00xXLylEv639oA5U44OwD8xOYQCAWwsWSLYKvjr8A+iKKrGN8X2CmUMeg65C2OmIiKg+up5dgOdmRooju/7RV8xfdOMcMMvREHZXeQBFpjehiE6JFqcwzDwyE0tPLcXuK7tl6+vy83Hx1V6SsMvR3XLMHPIYdBXCTkdERPVV2p0ifOhvWI3hiYkh+HbneZSUmhl5PR8M+DQzhN1f/mN2jd2vo74Ww27ZcTj1sGz9O3v3SoJurIuau6f9jZlDHoOuQtjpiIioPsspLEa/xQfFkd0vN5wyP43h6I/lL6dFTDVZNS0/DcNCh2HAtgHw2OQBdaAaA7YNQHGp/C5t+SdOoDA2FvEvvMilx+7CzCGPQdcEb29vODk5QRCq/pjY6YiIqL7Tlujgs+O8GHZ/PZZk/qLQ8eVh96/tlfqd8+nn4RroCnWgGmvPrjVb/6avr2FUt5ML8v84VanfsGbMHPIYdE04cOAAbt68yaBLRET3Lb1ej8/XG5Ye6zhtN45fyTB9QYkWWNvHEHTnOAGJldvGd9bRWVAHqtF9fXdczblqsm5RQgJiO3Q0hN0OHVGUkFDZ27FKzBzyrC7oJiQkwNvbG66urrC1tYWHh0eF9eLi4uDp6Ql7e3s4Ojpi/Pjx0Gq1FdZl0CUiovvZ7dwivDBnD1SaEDw5KRS+YbGmpzHkXAf82hnC7sxWlRrZzS7Khvsmd3Gr4PSCdJP1c3aHl++etnRZVW/JqjBzyLO6oLt9+3a0bdsWQ4YMQbt27SoMupmZmWjTpg3c3d0RHh4Of39/NGvWDKNGjarwOxl0iYjofnc5LRevfLdPnMZw9LLpIIr0S8Dizn9PY2hWqQ0lTt48ia4/d4U6UI13d72L/OJ8k/VvzJ6D2PYdcPnNt6pyK1aHmUOe1QVdna78rdCBAwdWGHR9fX3RpEkTZGSU//XLqlWrYGdnh9RU4wWyGXSJiIiAwuJS9FoQBZUmBK8tiML1bDM7leXeAla6l8/Z3Tfb7G+EJ4aLqzD4HPYxWTfv+PHytXU/+gglmZlVuBvrwcwhz+qC7t3kgq6bmxsGDRokKcvKyoKNjQ0CAgKM6jPoEhERGYSevS6O6nadGYkb2YWmLyi6A/z8dnnYPb3B7G+s+nOVGHYPJh+UracvLUVCb08x7CZ/Odr8yhBWiJlD3n0ZdFu1aoUpU6YYlTs5OUGj0RiVVybo5uTkICUlRTxiYmLY6YiIyOro9XqsiLqEpyaFQqUJwXurj0JbYmaN3RJtedid/SiQdsFk9VJdKYaFDoM6UI1em3shuyhb/qszM3Fjxkwx7GZu3Fid26rXGHTl3ZdBt0GDBvDz8zMqd3FxwYgRI8TPXl5ecHZ2hiAIcHZ2xvDhw2V/y8fHB4IgGB3sdEREZI22n04RR3Y/9D+O7AL59W8BGLYGLntB7YeXgGLTI8GJ2Yl4/pfnoQ5UY+SekSbX19Xr9bg28jNxybFbixZBJ/OCuTVi0JXHoHuXfwbdquCILhER3W++j4wXw26f7w+gsLjU9AVXDgLfNjeE3T0+Zr9/84XN4hSGsVFjUaKT322t9M4dXB4wQBzZvf7tt9CXlCDv8GHo8vKqdmP1DIOuvPsy6FZ16kJV+Pn5wdHRES1btmSnIyIiq7f+2FU8+fc0Bt+wWPMXREwxBN1vmwPJJ81WX356uRh2Pw3/FDE3YmTn4ZZmZyPlm3HSrYLbd0DqxElVva16hUFX3n0ZdN3c3DB48GBJWXZ2tuzLaNXBTkdERPeLubvjoNKE4F8TQ3AqyczKB8UFwNJuhrD7vRqIDwdMvECm1+vhd8JPDLvqQDU+2/MZinUVT2XQabW41KevUdjVFZhZIaIeY+aQd18GXV9fXzRt2hRZWVli2Zo1a2SXF6sOdjoiIrpfFBaXovfC36HShOAl3704kWhm97RrJ4AZLcpXYlj/X+DODdnqer0eEYkRGLprqBh2151bJ9+e+HgkDn1HEnRzIiKqe3t1HjOHPKsLuvn5+QgKCkJQUBC6d++OTp06iZ/T0tIAlG8Y4eHhgYiICKxbtw7NmzeX3TCiKjh1gYiI7kenr2XhmSlhUGlC0GnablzLML3ZA1JPAf79ysPuvH8BF/eYvESv18PnsI+4VXBqrvzglF6vR+mdO7j6odffS499WZ3bqhcYdOVZXdBNTEyscPUDQRAQFRUl1ouNjUXv3r3RuHFjtG7dGuPGjZPdArg62OmIiOh+E3cjB8/NjIRKE4IhK49ApzOzpq1eD5zZBMxx/nu74JbAjXMmL7l7q+Av935pdt3crN+2iaO6+X/8UdVbqheYOeRZXdCtbRzRJSKi+9nuczfElRiW7btYuQ0cMq4Y5utWcumxnZd2ilMY9ibtNVlXX1qKy28NRGz7Dkh8//2q3Eq9waArj0FXIex0RER0vxq7+bQYdj9ff9L8smMAcPVI+dJjYaZXQNLr9fgk/BOoA9XovaU38otNT5O4s3+/OKqrvXq1KrdSLzBzyGPQVQg7HRER3a/uFBbjo3XHxbA7bM1RlJSa2T0NAPbOLJ+zm2B6pPZK9hV0/bkr1IFq+J0wXhv/bvqSEsT36CnO1dVb2WYSzBzyGHQtjFMXiIiIDKOuP/5+SQy744PO4E6hmd3TSouBVa8agq7fM0Beusnqy04tgzpQjc4/dcZf6X+ZrHvzu7niqG7iMOuawsCgK49BVyHsdERERMCU4LNi2O2/+CAKtGamMdxOAGY/agi7G94FdPIjwYUlhej/W39xCsONPPklyopTUxHfs6cYdnMPHsStRYuQuWVLdW+tzmDmkMegqxB2OiIiIkBbosPc3XF4YqIh7P5v4ynzL6idDCifwrB/jsmq526fQ/f13aEOVGNg8EBkF2XL1tUXFyOu63NGm0lok5KqcWd1BzOHPAZdhbDTERERlVsRVT6NYd2hK6Yr6/VA8OflYfdskMnq0SnR6PJTF6gD1RgWMgy52lzZuslffmkUdO/sNT0fuK5j5pDHoGthnKNLRERkTK/X47NfTkKlCcFTk0Jx/IqZ3dNKigD/vn+vr9sKSI4xWf3uJcc+CPtAdiWGjPXrjYLu7dWrq3tbdQKDrjwGXYWw0xEREUnlFpXgtQVRUGlC0HPePhSVmJmvm3cbWKQufzktO9lk9aD4IDHsvhX8FtaeXWu0e1ppdjauDBmKlK+/wbUvRiG2fQekTpx0r7dWq5g55DHoKoSdjoiIyFjs9Rz86+/5uv7RZqYwAMDNv4A5Toawu6A9EDkNyEyUrb4xbqMYdsu2Co5Nj62w7q2F3xtWYRj6jlh2Z/9+JP9vDEpu367qrdUaZg55DLoKYacjIiKq2PigM1BpQtBp2m4EnUxGv8UHseG4iRfC4sOBbx8un7P7XVsg57ps9T9u/gGfwz54+deXxa2CK5IVHCxOX0gZPx5JH39c/nns2Hu9zRrDzCGPQdfCOEeXiIjItNu5Reg2K1J8Oa3sOJciv2IC0i4Ae3wA38cMYXeLl9nfCb0cKo7sxmXEGZ0v+PNPo/m6ZUd8j57Vvr+axqArj0FXIex0RERE8qIv3ka7KWGSoPvfHw+bv/Dupccu7jFZtVRXije2vQF1oBpjo4xHaEtz8xDXuUvFQfflV8wvg1ZHMHPIY9BVCDsdERGRafE372Bq8DnM2x1XuVFdwLCBxBpPQ9Bd/CxQXGCyenBCMNSBargGuuJS1iWj8wWnTyMnMhL5p04Zhd3Ed95FTkTEvdxijWDmkMegqxB2OiIiosrR6fTo5WdYjeHjgBPQ6cyMpN44Wz5nd99sk1WLdcXou7Uv1IFq/G/f/2Tr6fV6XBkytMLR3Yyff6nObdUYZg55DLoKYacjIiKqvC0x18RR3eFrjyE1y/RILcInG4LujBZAWrzJqjsu7RDn6h5OkZ8eUZKZiYKz5xDn+qwk6F4e+HaV7qU0Nw939uyBLi+vStdVFzOHPAZdhbDTERERVZ5er8eEoD/FsDt4xWHTc2SLcoGFHQ1hN+ANQCe/Jq9Or8Ow0GFQB6oxYNsAFJcWm2xLxs+/IP6ll3F96jRD2O3QEaXZZqZU3OX6tOmG9XknTKj0NfeCmUMeg66FcdUFIiKi6tHp9Fi856IYdo9dTjd9Qeyu8hfTQr4xbB0s43z6ebgGukIdqMbc43ORo80x+dV6vR6ld+4gtmMncbmx4kr+O/3uxXziQwAAIABJREFU0eCawKArj0FXIex0REREVafX6/HvJQeh0oSg3+KDKNCa2D1NrzcE3LKwe8DP5Hf7HPYRpzB0+6UbFsQsgE6vM3nN5UGDyl9Oe//9SrX/7qCbFRyMhD59kPTxJ2avrS5mDnkMugphpyMiIqqeQwm3xd3TxgedMV1ZVwpsGl4edk/JvziWq83F1ENT0e2XbmLgPZB8wOTX35w7TxJc9aXywTtt+XJceOFFSf3UKVMQ274DLvXpa/o+7gEzhzwGXYWw0xEREVXf8v0J4hSG91YfxcWbd+QrFxcC6/obgu63Dxt2UjMhR5sjztmV2zWtTEl6Oq59/oUYXG+vXo3CCxW//FbRig2X/v2G4YW2N98ye8/Vxcwhj0FXIex0RERE1Veq0+Ot5YfEsPvCnD24lVMof0FBFvDDS4awO8sRuGp684mQyyFQB6rx7E/P4kbeDZN19cXFiFO7lm8m0bPiXdPkdlmLbd8BV4YMNXvP1cXMIY9BVyHsdERERPfmenYBJm87K4bdrzebmcaQkwp872IIu3OcgZSTslW1pVr03NgT6kA1lp9ebrYtlwe+LQmupbnGS4eZCrpX3x9u9jeqi5lDHoOuQtjpiIiILMM/+ooYdl/1i4JvaCwKi2XmyqZfAvyeMYTd2Y8CW7yAC7srrOp3wg/qQDVe2/waSnQlJtuQ/OVoSXAtunJFcv6fL6H980j65NPq3HqlMHPIY9BVCDsdERGRZWTla8WgW3ZM235O/oJbccC8J8tfUPNxAC6EGVVLzE4UX0obGzUWJ2+elF27t2xt3LIj79hxyXldfr7JoHvt8y/u6RmYwswhj0HXwriOLhERkeV9vfmMJOiqfcLlR3UBIO82cGINsOx5Q9D171dhtTH7x4hhVx2oRp+gPph3Yh4uZFyQ1NMmpyCht6cYXLN37pKcL751y2TQTf7qq3t+BnIYdOUx6CqEnY6IiMhy8opKsP/CLVzLyMeTk0Kh0oRgS8w18xfGR5SP6l43nuNbWFKITXGb8J8d/5EE3s4/dca2i9uM6l8eMACx7Tsgfe1aSXnR5Ssmg26qZmK1790cZg55DLoKYacjIiJSxqeBMYZR3enhOJdiZmtenQ5Y+pwh6AZ/LltNr9cjNj0WS08tRZ+gPmLgXXF6hWQ6Q9LHnyC2fQfc9PWVXF9w9qwk2Mb37Cn5fH26z73csknMHPIYdBXCTkdERKSMlKwCdJu1BypNCDpM3Y3T17JMX3BslSHozmwJ5KaZ/f4cbQ4+2v2RGHZ/u/ibeC5VM7HCqQh5R46IoTYnPAJZW7dKgu6NOXOqda+Vwcwhj0FXIex0REREyjmXko0X5hjC7v82njJduegO4PuYIezurtwUAm2pFt6R3lAHqjFg2wBxq+BbC783bAc8rHw74Ns//igG2rguXQEAORERkqB7a8GC6t1oJTBzyGPQVQg7HRERkbLW/r3sWNeZkdDpKl4tQRQ11xB0ZzwCpF0wXfdv59PPi6O6v1/7HQCQ8ct6xLbvgATP18V6/5yyoC3VImrz95LytGXm1+qtLmYOeQy6CmGnIyIiUlbCrTviKgwdpu5GvMltgguA79WGsPvTQCDjMnA7AZBZTqxM2RSGT8MN6+DmREYaRm6f7Qy9Xg+9Vivd8rdvPwScC8DQGZ0k5bdXr7bkrUswc8hj0JURGxuL559/Hs888wx69eqF69evV+l6djoiIiJl6fV6vPLdPjHs/vfHw7Lr4AIAzgdL19b1cQCOrTT5G/uT9oujunEZcSi8EC+G14Kz51CSmSnd6vc//8XIPSPx9hwXSXnGTz9Z+O7LMXPIY9CV4e7uju3btwMAFi9ejA8//LBK17PTERERKW/76RTJ+ro7z6TKV9brgZ8HSYPuildMfr9Or8O/f/s31IFqTDo4CXq9HgmerxtWXpg3H9qkJOlWv15eeHnDy/j3fGnQzdy4ycJ3Xo6ZQ55VBd2EhAR4e3vD1dUVtra28PDwqLBeXFwcPD09YW9vD0dHR4wfPx5arVY8f/PmTbRp00b8nJubi6ZNm1apLex0RERENUOv12PIyiNQaULwr4khGB90BrlFMlv6FhcAySeBP7eUh930Sya/f2PcRnFt3cTsRPGFtIu9eqHg3HlJoL3g/THUgWp4fi8NulnbghW4cwNmDnlWFXS3b9+Otm3bYsiQIWjXrl2FQTczMxNt2rSBu7s7wsPD4e/vj2bNmmHUqFFinZMnT+KFF16QXNeqVSukp6dXui3sdERERDXnVk4hXlsQJY7sTgk+a/oCXWn5NsHRi0xWLSotQu8tvaEOVGPCgQkoOHuuPMAGB0sC7dHP34M6UA33pdKgmxNmvAWxpTBzyLOqoKvT6cR/HjhwYIVB19fXF02aNEFGRoZYtmrVKtjZ2SE11fDXHQy6RERE9c+dwmJ8ueGUGHbHbj6NL9b/gWX7LqKopILtgnd8aQi6q3uZ/e4t8VugDlTDNdAV8Yl/lC8b9v0iSaAN/bQ/1IFqvLRCGnTv7NunwB0bMHPIs6qgeze5oOvm5oZBgwZJyrKysmBjY4OAgAAAnLpARERUX+VrS9BtVqRk3q5KE4JNJ5KMK1/cUz59ITvZ5PcW64rRb2s/qAPVGLv/K8SqXQ0bR/xvjCTQbvlPd6gD1XhujTTo5kYfUuiOmTlMue+CbqtWrTBlyhSjcicnJ2g0GvGzm5ub5GW0Dz74wOTv5eTkICUlRTxiYmLY6YiIiGrB2eRsfOB/HL0X/i4Z3TVSoi3fSGL9f4FDiw0rM6SeMkxt+Icdl3aUr8DgZtji9/LAtyWBdnPfjoaR3wBp0M0/cUKx+2XQlXffBd0GDRrAz8/PqNzFxQUjRowQP58/fx7dunXD008/jVdffVWc1iDHx8cHgiAYHex0REREtWf5/gSoNCHwmL+/4gq/eRsvOebjAKx0M9ouuERXgq4/d4U6UI0zb7wurqd7d6Bd8o4h6L69XRqAC86amTN8Dxh05THo/u2fQbeqOKJLRERU9xy5lC6O6qbnFhlXyLlu2BZ4/X+BZd2BWY7lYXf5C8CdG5Lqg3YMgjpQjeh3+0mCbGz7Doh+/9945QcXDNg2AON+Hyc5V3ghXrF7ZNCVd98F3cpOXaguPz8/ODo6omXLlux0REREtSxfW4InJ4VCpQlB8KlK/DtZrwfO/WbYKtjHAfjhJaC0WDw97vdxUAeqsePj1yVB9tqoUfhi7xdQB6oxOXoy5h6fKzmvTUxU7B4ZdOXdd0HXzc0NgwcPlpRlZ2dLXkazBHY6IiKiuuED/+NQaULw4py9yM4vNn8BAMSFAD7NDGH3ZIBYvOL0CqgD1Vj5WU9JkE3RaNBjYw+oA9XYfGEz/M/5S84XV3GH1apg5pB33wVdX19fNG3aFFlZWWLZmjVrJMuL3QuO6BIREdUtl9Ny8cyUMKg0IXhzWTTytTKbSfzT1k8NQXdhR6C4EAAQnhhu2CVt9LOSIHt28lfii2pJOUnYeWmn5HzJXcuaWhqDrjyrCrr5+fkICgpCUFAQunfvjk6dOomf09IME8rLNozw8PBAREQE1q1bh+bNm0s2jLAEdjoiIqK6Y+vJZDwx0TBXd230FZSU6swH3tsJwLcPG8LusZUAgITMBKgD1fCe0EkSZHdphkEdqMaAbQMAAEevRErO6/LyFLs3Zg55VhV0ExMTK1z5QBAEREVFifViY2PRu3dvNG7cGK1bt8a4ceMkWwBbAjsdERFR3fLNljNQaULQb/FBDF5xGC7Tw3Hyaqbpi7Z/YQi6858GtPkoLi1G5586450Z0qC78Gt3qAPVmH9iPpCTiksLnpKc15dUchS5Gpg55FlV0K0LOHWBiIiobrp7BYayo8uMCOQVmQihmVeBGS0MYffojwCAN4PfRN8F0nVyx4zpBHWgGsevHwf2+CB7RjPJeSUx6Mpj0FUIOx0REVHdotPp8apflFHYDTtr5kWxslHdhR2BEi3G7B+D59a44M9ny8PuiAmd8NKvL6G4MAeYq4Lex4FBtw5g0FUIOx0REVHdcy4lGx2m7pYE3SV7L5q+KP0S8G3zv1dgCMSSP5YYVl4Y5SEG2Q+ndMLXUV8DMevEdXgZdGsfg66FceoCERFR3RZ/8w7Cz9/AF7/+AZUmBKM3nDJ/UdDHhgC7uDNCEnZCHaiGm//zuOjpiTMuHdBzuQu2JwQbNplg0K0zGHQVwk5HRERUty3aEw+VJgT9Fx80X/nmeTHAxp0OFJcSm7l3El780QWuga5Ijw8t31Vt8bMMunUAg65C2OmIiIjqtl1/pkKlCUH7qWGYtesvTAk+i+z8YlxOy0WBttT4ghWvAD4OKNwzHa6BrmLYVQeqMengJODAfEPIXdoNCNMw6NYBDLoWxqkLRERE9UPcjRyjF9PKjq4zI3H40m2cvla+wRR2fWUIsgFvoN/WfmLI9Y70hrZUC2wcZji/9f+AQ0tw+rl2DLq1jEFXIex0REREdVtRSam4Y5qpIzWrwHDBmU2GIDv7UYz/fRzUgWq8H/o+8ovzDee/VxvOH1kOnA1CmMYZ+1/sgGljn1f0Ppg55DHoKoSdjoiIqO7beSYV88PjcCopE09PDq0w6G6JuWaonHFFnIObnvg7dl7aWR5y8zPK5+cmRuPMoTAcmtsa6kA1XANdUawrVuwemDnkMegqhJ2OiIiofjl2OR0hf17H2M2nJUF3YWS8oYJeb9gh7a4tgUWX9otBd//pBPSYGIALs1uI0xtu5N1QrN3MHPIYdBXCTkdERFQ/rY2+Igm63j/HlJ8sm4cb9LH0ouhFhvIlXTDkxyN4WrMdGTOai0H33O1zirWXmUMeg66F8WU0IiKi+u1Qwm1J0HWfv7/85OGlhkD7vYv0oi1ehvItH+GV7/ZBpQnBzemPYemittgQORZp+WmKtZdBVx6DrkLY6YiIiOqn7IJio3m6URduGU5eO14+Fzf7rn/HL+liKItehCcmGq45O+1ZQ9nv8xRtLzOHPAZdhbDTERER1V/nUrIRfv4GnppkeEHtyUmhiLuRA5QUATNbGgLsud8MlQuzxfBbenGfGI4jp/YCfBywY9YQDPnxiGJtZeaQx6CrEHY6IiKi+u/o5XR0mREBlSYEH607bihcbQiw2DvT8DkxWgy6V65dE4PuT1P+A/g4YO9UD7wwZ49ibWTmkMegqxB2OiIiIuuw80yqGF4PxKchf9P/GYLtpuGGCkeWGz4vUiPkz+ti3XmTDfX+muYKj7vn+VoYM4c8Bl2FsNMRERFZh1KdHi7Tw8UAu8jnM0OwXf6CocK2kYbPG4fBNyxWrDd20gTAxwEZ053Qd9EBxdrHzCGPQdfCuOoCERGR9fFad1wMsCMm+RiC7YwWQGkJsKKH4XPUd3hv9VGx3ruT5olTGoYu36dY2xh05THoKoSdjoiIyHos358gBtjXJq4qX3nhVqwh8Po4QPfXDqh9ykd+X524Rqz31YqtirWNmUMeg65C2OmIiIisx/ErGWKAfUqzHbpvHzGE2APzxTCblHBerPPkpFB00GwVz83/cbVibWPmkMegqxB2OiIiIuuh1+vhF35BDLJZ8zsbQuwPLxv+d44zVuy/CJUmBC7TwzF4xWGoNCHInv4o4OOAgB/nKtY2Zg55DLoKYacjIiKyPmUB9uKSN8unL/g4QL/2dXFHtKnB5/BxwAmoNCEYOHExPCauwcRNxxVrEzOHPAZdhbDTERERWR/vn2MMO6Ut/1wSdG/8+rk42ptw6w6+3HBKsrPatO3nFGsTM4c8Bl2FsNMRERFZn0nbzkKlCYH/stmSoPv7r3Oh0oSgl18UAGDib2clQdc3NFaxNjFzyGPQVQg7HRERkfVZGBkPlSYE4xf7S4Lu/LW/QKUJwahf/wAAzA75SxJ0F+2JV6xNzBzyGHQtjOvoEhERWa+fjiRCpQlB37k77wq6zdBv/m6oNCFYEXUJALB4z0VJ0F35+yXF2sSgK49BVyHsdERERNYn9Kxhi9+O03YDfu0M6+cu7irZIhgA1kZfkQTdn44kKtYmZg55DLoKYacjIiKyPscup4vhtcT/34CPA9L9h4pl6blFAIBNJ5IkQXdzzDXF2sTMIY9BVyHsdERERNbndm4R/jXREF6Ph/gDS7pi3c/rDNMZFh0Q65WN/JYdO8+kKtYmZg55DLoKYacjIiKyTl7rjkOlCcHwtcdQUqrDczMjodKEYPn+BLHO3TupqTQh2Bt7U7H2MHPIY9BVCDsdERGRdQr50zBa+8REw5zcsjCbeDtPrHPldp4k6B5OuK1Ye5g55DHomuDt7Q0nJycIQtUfEzsdERGRdbqeXSAG2LLVFZ6ZEiapc6ewWBJ0/0jKVKw9zBzyGHRNOHDgAG7evMmgS0RERKJSnR5PTQqFShOCz345CZUmBN1m7ZHU0ev1kqAbez1HsfYwc8irV0E3ISEB3t7ecHV1ha2tLTw8PCqsFxcXB09PT9jb28PR0RHjx4+HVqut9u8y6BIREdHdeszdB5UmBB7z90OlCcFrC6KM6twddO+e1mBpzBzy6lXQ3b59O9q2bYshQ4agXbt2FQbdzMxMtGnTBu7u7ggPD4e/vz+aNWuGUaNGVft3GXSJiIjobkNXHpEE2bd/OGRUp+O03eL5WzmFirWFmUNevQq6Op1O/OeBAwdWGHR9fX3RpEkTZGRkiGWrVq2CnZ0dUlPLl/bo2rUrWrRoYXT07dvX6DsZdImIiOhuYzedlgTdD/2PG9V5fvYe8XxOYbFibWHmkFevgu7d5IKum5sbBg0aJCnLysqCjY0NAgICqvVbDLpERER0twURFyRBd/SGU0Z1evlFieeLS3UVfItlMHPIs7qg26pVK0yZMsWo3MnJCRqNplq/VZmgm5OTg5SUFPGIiYlhpyMiIrJSG49Ldz6bEnzWqM6by6LF80pi0JVndUG3QYMG8PPzMyp3cXHBiBEjqvQbXl5ecHZ2hiAIcHZ2xvDhw2Xr+vj4QBAEo4OdjoiIyPocvJgmCbrzdscZ1Xlv9VEG3VrGoGshHNElIiK6f/xzQ4iVv18yqnPhxh08NSm0wvm7lsSgK8/qgq4SUxeqws/PD46OjmjZsiU7HRERkZXSlujwr4nlQXfD8aQK62Xla1Gq0yvaFgZdeVYXdN3c3DB48GBJWXZ29j29jFYd7HRERETWrWwtXZUmBCF/Xq+1djBzyLO6oOvr64umTZsiKytLLFuzZo3R8mJKY6cjIiKybnevpRt98XattYOZQ169Crr5+fkICgpCUFAQunfvjk6dOomf09LSAJRvGOHh4YGIiAisW7cOzZs3v6cNI6qCUxeIiIjuD2Xb/6o0IfgzOcv8BQph0JVXr4JuYmJihSsbCIKAqKgosV5sbCx69+6Nxo0bo3Xr1hg3btw9bQFcHex0RERE1m3ib2drZItfc5g55NWroFsfcESXiIjo/jBvd5wYdDPyanZA7W4MuvIYdBXCTkdERGTdbuYUov3UMLzqFwWdwisrmMLMIY9BVyHsdERERNYvM0+LAm1prbaBmUMeg66FceoCERER1SQGXXkMugphpyMiIqKawMwhj0FXIex0REREVBOYOeQx6CqEnY6IiIhqAjOHPAZdC+McXSIiIqpJDLryGHQVwk5HRERENYGZQx6DrkLY6YiIiKgmMHPIY9BVCDsdERER1QRmDnkMuhbGObpERERUkxh05THoKoSdjoiIiGoCM4c8Bl2FsNMRERFRTWDmkMegqxB2OiIiIqoJzBzyGHQVwk5HRERENYGZQx6DrkLY6YiIiKgmMHPIY9C1MK66QERERDWJQVceg65CkpKSIAgCYmJikJKSwoMHDx48ePDgocgRExMDQRCQlJRU2/GnzmHQVUhZp+PBgwcPHjx48KiJIyYmprbjT53DoKsQrVaLmJgYJCUlKf5fcBw15rOtTwefLZ9tfTz4bPls6/KRlJSEmJgYaLXa2o4/dQ6Dbj2WksI5OUrhs1UOn61y+GyVw2erHD5bUhKDbj3GPxyUw2erHD5b5fDZKofPVjl8tqQkBt16jH84KIfPVjl8tsrhs1UOn61y+GxJSQy69VhOTg58fHyQk5NT202xOny2yuGzVQ6frXL4bJXDZ0tKYtAlIiIiIqvEoEtEREREVolBl4iIiIisEoMuEREREVklBl0iIiIiskoMuvVQXFwcPD09YW9vD0dHR4wfP567oVhIQkICvL294erqCltbW3h4eNR2k6zCli1b8NZbb8HZ2Rn29vbo3LkzAgICoNfra7tp9V5QUBBefvllPPLII2jYsCHatWuHmTNnoqioqLabZnVyc3Ph7OwMQRBw+vTp2m5OvRcQEFDhNrbfffddbTeNrAiDbj2TmZmJNm3awN3dHeHh4fD390ezZs0watSo2m6aVdi+fTvatm2LIUOGoF27dgy6FvLSSy/h3XffxaZNm7Bv3z5MnDgRtra2mD17dm03rd5buXIlpkyZgm3btmH//v2YO3cuGjVqhJEjR9Z206zOhAkT4OjoyKBrIWVBd8+ePTh69Kh4pKam1nbTyIow6NYzvr6+aNKkCTIyMsSyVatWwc7Ojn84WIBOpxP/eeDAgQy6FnL79m2jshEjRuDhhx+uhdZYv8mTJ6NJkyaS/kz3Ji4uDg899BBWrlzJoGshZUE3KyurtptCVoxBt55xc3PDoEGDJGVZWVmwsbFBQEBA7TTKSjHoKmvFihUQBAEFBQW13RSrs3DhQjRs2BClpaW13RSr4enpiW+++QZRUVEMuhbCoEs1gUG3nmnVqhWmTJliVO7k5ASNRlMLLbJeDLrKGjZsGFQqVW03w2qUlpaioKAAhw4dgkqlwtixY2u7SVYjKCgIjo6OyMnJYdC1oLKg27p1a9jZ2eHpp5/GokWLOHefLIpBt55p0KAB/Pz8jMpdXFwwYsSIWmiR9WLQVU50dDRsbW2xdOnS2m6K1WjYsKH4Ms+HH37IaQsWkp+fj7Zt28Lf3x8AGHQtKDw8HDNnzkRERATCw8Ph7e0NGxsbTJ06tbabRlaEQbeeYdCtOQy6ykhOToaTkxN69+7NMGZBf/zxB6Kjo7F06VK0atUKH3/8cW03ySpMmjQJzz//vDjKyKCrLG9vbzRq1Ah5eXm13RSyEgy69QynLtQcBl3Ly8rKglqthqurK7Kzs2u7OVZrx44dEAQBJ0+erO2m1GtXr17Fgw8+iNDQUGRlZSErKwu7du2CIAg4ePAgcnNza7uJVicyMhKCIOD48eO13RSyEgy69YybmxsGDx4sKcvOzubLaApg0LWsgoIC9OjRA23btkVKSkptN8eqJScnQxAEbNy4sbabUq+Vjd7KHfzzwfLKgu6JEydquylkJRh06xlfX180bdpU8pbqmjVruLyYAhh0LaekpAQDBgzAI488gr/++qu2m2P1Nm3aBEEQcOzYsdpuSr2WlZWFqKgoybFo0SIIgoA1a9Zw+oICRowYwakLZFEMuvVM2YYRHh4eiIiIwLp169C8eXNuGGEh+fn5CAoKQlBQELp3745OnTqJn9PS0mq7efXWiBEjIAgCFi5cKFkY/ujRo9zB6x717dsXfn5+CAsLQ2RkJGbPno1mzZqhT58+td00q8Q5upYzaNAg+Pr6IjQ0FKGhofj0008hCAKmT59e200jK8KgWw/Fxsaid+/eaNy4MVq3bo1x48ZxC2ALSUxMlP1ryqioqNpuXr2lUqlkn2tiYmJtN69emzp1KtRqNR566CE4ODigc+fO8PPzQ2FhYW03zSox6FrO5MmT0b59e9jb26Nhw4bo3Lkzfvzxx9puFlkZBl0iIiIiskoMukRERERklRh0iYiIiMgqMegSERERkVVi0CUiIiIiq8SgS0RERERWiUGXiIiIiKwSgy4RERERWSUGXSIiIiKySgy6RERERGSVGHSJiIiIyCox6BIR0X3H29sbTk5OEAT+a5DImvH/4UREdN85cOAAbt68yaBLZOX4/3AiAgD8/PPP6NatG5o2bQoHBwe4uLjgs88+Q25urkV/Z+PGjQgICKh0+b3w8vJC586dLfqddYUSz8vS9Ho9nnvuOaxcubK2myKroqA7cuRIfPzxx7XQGiKyNAZdIsK8efNga2uLcePGITw8HKGhofD19UXHjh2RnJxs0d8aOHAgPDw8Kl1+Ly5duoSzZ89a9DvrCiWel6Vt3boVbdq0QVFRUW03RVZFQffSpUt48MEHER8fXwstIiJLYtAlIjg7O2PEiBEVntPr9Rb9rZoIujqdrk6HK0uoD8/L3d0dEyZMsPj3mtO1a1e0aNHC6Ojbt69RXbmpC7169cKYMWOUbioRKYxBl4hgb2+P6dOnm6136NAh9O7dG02aNEHTpk3Ro0cPHDp0CABw5MgRDBgwAI8++igeeughdO3aFUFBQZLrvby8IAiC5PDx8ZEtLxMdHY1XX30V9vb2aN68Oby8vJCZmSn53s6dO2PXrl1Qq9Vo0KABdu/ebTR1oexzREQEXFxc8NBDD8Hd3R0XL140utdly5bhscceg729Pfr374/o6GgIgoDg4OAKn01AQAAaNGiA9PR0Sfm1a9dgY2MjeRbm7sfc8zb3vIKCguDq6ooHH3wQzs7OmDhxIoqLi80+Lzl37tzBF198gRYtWqBp06YYOXIkli1bhubNm8tec+XKFdjY2ODEiROScr1eDwcHByxZsgQzZszA448/jiZNmmDYsGHQarWSug8//DDmzZuHCRMmwNHREQ4ODpg8eTIAYNu2bejcuTPs7e3h6emJ27dvy7bFFLmgu2LFCrRs2RIlJSXV+l4iqhsYdIkIbm5uaNGiBfz9/XHr1q0K6xw4cAAPPPAAXn31VWzZsgXh4eGYMWMGNm3aBMAwZ3TevHkICwvD3r17MWXKFNja2mLnzp3id1y6dAnu7u7o2rUrjh49iqNHjyI5OVm2HDCEvQcffBCDBw9GSEgIfv31V6hUKsl/0x25AAAI7klEQVTonJeXFx555BE8/fTT+Pnnn7F3715cvXq1wqDbsmVLdOnSBZs3b0ZwcDBUKhW6d+8uuddt27ZBEASMHDkSERERmDFjBp544gmTQTc7OxsNGzbEqlWrJOV+fn5o2rQpCgoKKn0/5p63qecVEREBQRAwfPhw7N69G/PmzcODDz6ITz/91OzzqkhJSQl69OiBDh06YMOGDQgLC8OLL76INm3awN3dvcJrAGDNmjVo1KiRUVC8cuUKBEHAk08+idGjRyMiIgILFy6EjY0N1qxZI9ZLSkqCIAh4/PHH8c033yAyMhKffvopBEHAqFGj4O7uju3btyMgIAANGzbEpEmTZNtiilzQPXPmDARBwMmTJ6v1vURUNzDoEhHOnTuHp59+WhwdbNeuHcaNG4ebN2+KdV5++WW4urqitLTU7PfpdDqUlJRg6NChePPNNyXnqjp1oWfPnkaB6vjx4xAEAYcPHwZQPlL8z1BSUdC1tbWVzL0MDAyEIAiSucjPP/88+vTpI/mub775xmTQLbuHXr16Scq6deuG999/v0r3A5h/3nLP68UXX0TPnj0lZfPmzYONjY0YZuWeV0Xmzp2L5s2bIy0tTSz7888/IQgCRo8eLXudt7c3unTpYlS+fft2CIIAX19fSXnHjh0xfvx48fOuXbsgCALmzZsnlqWnp0MQBHTr1k0yQt2/f38MHjzY7L3czcvLC87OzhAEAc7Ozhg+fLjkfElJCezs7LBixYoqfS8R1S0MukQEANBqtQgNDcWYMWPQpUsXCIKA1q1bIzk5GXl5ebC1tcXChQtlr8/IyMCoUaPQtm1b2NnZiaG5ffv2knpVCbr5+fmws7PDsmXLUFJSIjkcHBywePFiAIbQ4ujoaPSdFQVdlUolqVMWMo8ePQqgPOAsX75cUu/gwYNmg+7GjRtha2uLGzduAAASEhIgCAJ27dpVpfupzPOu6HmVlpbigQcewJIlSyTlV69ehSAI2LBhg/gcKnpe/6TT6eDo6ChOFyiTm5sLQRCwdu1a2WvffPNNeHp6GpXPnDkTTZo0QWFhoaTc0dERCxYsED/PmTMHTZs2lcwdTk5OhiAI2Lx5s+Tanj174v/+7//M3k9VtWjRolJTeoio7mLQJaIKhYeHw87ODl999ZUYMDZu3Chbf8CAAWjdujWWL1+O/fv3IyYmBkOGDDEKllUJuikpKUZzUe8+vvnmGwCG4Pbss88afafcHN27nT59GoIgICoqCgBw48aNCsPUhQsXzAbdvLw82NvbY+nSpQCAWbNm4eGHHxZHHyt7P5V53hU9r7J1Ycumk5QpLCyEIAhieJd7Xv9UNnJb9mzKxMXFQRAExMTEyF77+uuv44033jAqHzJkiNE0jbS0NAiCgIiICLHsnXfeQb9+/ST1wsLCIAiC0Tzo5s2bG4V7S3BycqqVl+mIyHIYdIlI1nPPPYd+/fqZHWEsLCyEra2t0Sjo22+/fU9BNy8vDzY2Npg+fTpiYmKMjmvXrgGQXy+3OkH3XkZ0AUNA69GjBwDAxcVFMje2svdzryO6ZUG7TEUjupVZX7gsWCYkJEjKly1bBjs7O6NRWbnncLf27dsbhcc9e/ZAEATJVJkOHTpg4sSJknrfffcdHnvssQrv7ffffzd7P1Vlb2+PuXPnWvx7iajmMOgSkSRglCkoKECrVq3w0UcfATDMGe3cuTN0Op1R3aysLAiCgNWrV4tl6enpaNKkiVHQHTJkCF588UWj75Arf+WVVzB06FCT7bdk0AUMc3Rff/11Sb2vv/66UkE3ODgYNjY2Ykjcs2dPle8HMP28Afnn9dJLLxnNAZ4/fz5sbW0lc3QrE3TLpnVERkaKZVlZWWjbti06duxo8trp06fDyclJUlZQUAA7OzsxcJdZsGCBZCpFYWEh7OzsjEa03333XaNR4p07d0IQhApXrbgXZaPM27Zts+j3ElHNYtAlIrRq1QqffPIJNm/ejIMHD2LTpk3o0aMHHnjgARw7dgxA+SoAr732GoKCghAZGYk5c+aIf03erVs3PPHEE9i6dSt+++03dO3aFU888YRR0J02bRrs7e0RHByMmJgYpKammiw/fPgwGjZsiPfeew/BwcHYv38/fvrpJ7z33nviy1SWDrq//fabZNWFmTNnQqVSQRAE7Nixw+SzLCoqQrNmzeDk5ARHR0ejl8kqcz+Ved5yz6ts1QUvLy+Eh4fDz88PDRs2NFp1oTJBt6ioCI899hjUajV27dqFoKAgdOvWDa1bt8a7775r8tqydpTNVwaAmJgYCIKAv/76S1L3gw8+kLz8d/LkSQiCgNjYWEm9jh07Gs0Xnj17Nh5//HGz91JVZf+hUtF/BBJR/cGgS0T44Ycf0LdvXzg5OaFBgwZ4+OGH0a9fP0RHR0vqHThwAO7u7mjcuDEcHBzQs2dPHDlyBAAQHx8vrg2rUqmwZMkSjBkzxijo3rp1CwMHDkTz5s0l67/KlQPAiRMn0L9/fzg4OKBx48Zo3749Ro8eLS6FZumgCwBLly6Fs7MzGjVqBE9PT+zYsaPSf0VetqrBqFGjKjxv7n7KmHrepp7Xli1b4OrqigceeABOTk7QaDQVrqNbGceOHUOXLl3QqFEjdOvWDZGRkXjsscfw3XffmbxOq9WiRYsWWLdunVi2bt06NGrUyCj8P/vssxg3bpzJemWjvP+cfzx06FAMGDCgUvdSFaNHj4abm5vFv5eIahaDLhFRJSxatAh2dnZGL0Ldb8qW+AoLCzNb96uvvjKaAlIflJaWok2bNggMDKztphDRPWLQJSL6h7S0NHz11VfYsWMH9u7di1mzZsHe3h5eXl613bRaV/biWNlUCVNSUlJgb2+P8+fP10DLLGf9+vV46qmnuCsakRVg0CUi+ofs7Gz0798fLVu2RIMGDeDs7Iyvv/7a5CoD9ws/Pz+0bNmy0vU3b96Mffv2Kdgiy1u/fj0OHDhQ280gIgtg0CUiIiIiq8SgS0RERERWiUGXiIiIiKwSgy4RERERWSUGXSIiIiKySgy6RERERGSVGHSJiIiIyCr9P4EtEtichM9lAAAAAElFTkSuQmCC\" width=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.geometry:No fast path for space: log(1+q.nm)\n",
      "WARNING:pyFAI.geometry:No fast path for space: arcsinh(q.nm)\n",
      "WARNING:pyFAI.geometry:No fast path for space: arcsinh(q.A)\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "method=\"splitpixel\"\n",
    "jupyter.plot1d(ai.integrate1d(Y, 500, method=method),ax=ax, label=\"q_nm^-1\")\n",
    "ax.semilogy()\n",
    "x,y = ai.integrate1d(Y, 500, unit=\"log(1+q.nm)_None\", method=method)\n",
    "ax.plot(numpy.exp(x)-1,y*2, label=\"log(1+q.nm)_None\")\n",
    "x,y = ai.integrate1d(Y, 500, unit=\"arcsinh(q.nm)_None\", method=method)\n",
    "ax.plot(numpy.sinh(x), y*4, label=\"arcsinh(q.nm)_None\")\n",
    "x,y = ai.integrate1d(Y, 500, unit=\"arcsinh(q.A)_None\", method=method)\n",
    "ax.plot(numpy.sinh(x)*10, y*8, label=\"arcsinh(q.A)_None\")\n",
    "\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Going to log-scale helps to reduce the noise at high $q$ as on can see in the log(1+q.nm) or arcsinh(q.nm). \n",
    "The maximum value for $q$ is only 0.56${A}$, so after taking the log scale this remain in the linear part of the curve.\n",
    "On the opposite, one would like to histogram on bins with larger numerical values. This is what we will see now. \n",
    "\n",
    "## Creation of a new radial unit\n",
    "\n",
    "Let's create the $arcsinh(q.µm)$ unit. \n",
    "$q$ in inverse micrometer has numerical values 1000 times larger than in inverse nanometer, and should emphathize the curvature."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyFAI.units import eq_q, register_radial_unit\n",
    "\n",
    "register_radial_unit(\"arcsinh(q.µm)_None\",\n",
    "                     scale=1.0,\n",
    "                     label=r\"arcsinh($q$.µm)\",\n",
    "                     equation=lambda x, y, z, wavelength: numpy.arcsinh(1000*eq_q(x, y, z, wavelength))) \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://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",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\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",
       " * http://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",
       "    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",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\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",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "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\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:pyFAI.geometry:No fast path for space: arcsinh(q.µm)\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "method=\"splitpixel\"\n",
    "jupyter.plot1d(ai.integrate1d(Y, 500, method=method),ax=ax, label=\"q_nm^-1\")\n",
    "ax.semilogy()\n",
    "x,y = ai.integrate1d(Y, 500, unit=\"arcsinh(q.nm)_None\", method=method)\n",
    "ax.plot(numpy.sinh(x), y, label=\"arcsinh(q.nm)_None\")\n",
    "x,y = ai.integrate1d(Y, 500, unit=\"arcsinh(q.A)_None\", method=method)\n",
    "ax.plot(numpy.sinh(x)*10, y, label=\"arcsinh(q.A)_None\")\n",
    "x,y = ai.integrate1d(Y, 500, unit=\"arcsinh(q.µm)_None\", method=method)\n",
    "ax.plot(numpy.sinh(x)/1000, y, \".\", label=\"arcsinh(q.µm)_None\")\n",
    "\n",
    "ax.legend()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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('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",
       "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 = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(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 (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\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 = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\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 nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\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",
       "\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",
       "\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]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.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, 0, fig.canvas.width, fig.canvas.height);\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",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = 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.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",
       "            /* 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",
       "            evt.data.type = \"image/png\";\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",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\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(\"No handler for the '\" + msg_type + \"' message type: \", msg);\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(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://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",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\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",
       " * http://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",
       "    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",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\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",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             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",
       "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\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";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.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",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['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 = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\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.get(0);\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",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\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).html('<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/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<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 () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('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",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\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('matplotlib', mpl.mpl_figure_comm);\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=\"639.8333142648146\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(numpy.sinh(x)/1000)\n",
    "ax.semilogy()\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Nota:* Expressing q in $µm^{-1}$ heavily distorts the curve in the low $q$ region, causing an oversampling near $q=0$. A factor 10 to 100 would have been better than the 1000 used in this example.\n",
    "\n",
    "## Conclusion\n",
    "\n",
    "We have seen how to perform azimuthal integration with variable bin-size in pyFAI, especially in the context of SAXS where it is desirable to have larger bins at large $q$ values to reduce the noise in this region."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
