Skip to content

Instantly share code, notes, and snippets.

Created January 4, 2018 09:55
Show Gist options
  • Save anonymous/dfd23c90a3bb69b650d76f690d6cd501 to your computer and use it in GitHub Desktop.
Save anonymous/dfd23c90a3bb69b650d76f690d6cd501 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Time-awareness examples from the paper: \"Time Limits in Reinforcement Learning\"\n",
"\n",
"https://openreview.net/forum?id=HyDAQl-AW"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true,
"scrolled": false
},
"outputs": [],
"source": [
"%matplotlib notebook\n",
"import baselines\n",
"from baselines.common import tf_util, set_global_seeds\n",
"from baselines.ppo1 import mlp_policy, pposgd_simple\n",
"import gym\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from baselines import logger\n",
"\n",
"def policy_fn(name, ob_space, ac_space):\n",
" return mlp_policy.MlpPolicy(name=name, ob_space=ob_space, ac_space=ac_space,\n",
" hid_size=64, num_hid_layers=2)\n",
"\n",
"def callback(locs, globs):\n",
" if locs['iters_so_far'] > 0:\n",
" ax.plot(locs['timesteps_so_far'], np.mean(locs['rewbuffer']), 'o', color=color)\n",
" fig.canvas.draw()\n",
"\n",
"def train():\n",
" if tf_util.get_session() is not None:\n",
" tf_util.get_session().__exit__(None, None, None)\n",
" tf_util.reset()\n",
" tf_util.make_session(num_cpu=1).__enter__()\n",
" set_global_seeds(seed)\n",
" env.seed(seed)\n",
" pposgd_simple.learn(\n",
" env, policy_fn, max_timesteps=max_timesteps, timesteps_per_actorbatch=2048,\n",
" clip_param=0.2, entcoeff=0.0, optim_epochs=10, optim_stepsize=3e-4,\n",
" optim_batchsize=64, gamma=gamma, lam=0.95, schedule='constant', callback=callback\n",
" )\n",
"\n",
"# environment wrapper to include the remaining time in the observations\n",
"class InputTime(gym.Wrapper):\n",
" def __init__(self, env):\n",
" super(InputTime, self).__init__(env)\n",
" self.observation_space.low = np.append(self.observation_space.low, 0)\n",
" self.observation_space.high = np.append(self.observation_space.high, 1)\n",
" def _step(self, action):\n",
" observation, reward, done, info = self.env.step(action)\n",
" t = self.env._elapsed_steps\n",
" t_max = self.env._max_episode_steps\n",
" rem_t = (t_max - t) / t_max\n",
" return np.append(observation, rem_t), reward, done, info\n",
" def _reset(self):\n",
" return np.append(self.env.reset(), 1)\n",
"\n",
"logger.configure(format_strs=['log'])\n",
"\n",
"seed = 0\n",
"gamma = 1\n",
"max_timesteps = 1e6"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hopper-v1"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[2018-01-03 09:22:50,641] Making new env: Hopper-v1\n"
]
},
{
"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",
" this.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 overriden (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",
" // select the cell after this one\n",
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
" IPython.notebook.select(index + 1);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\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,iVBORw0KGgoAAAANSUhEUgAABCAAAAMYCAYAAAAaYpYrAAAgAElEQVR4XuzdCXhV1b338d/JTAIBSXDWkCAitOqtyDw4oFhb6Xjf9+3FCk6ItlVbh1Y7im1v7WC1ta0DDoWqbZ/balulelFU5sGpagVBSEgdEEnCGDIn77PCiY0hwz7n7L3OXud8z/P0ud5m77X++/PfWM4ve68VER8EEEAAAQQQQAABBBBAAAEEEEAgYIFIwOMzPAIIIIAAAggggAACCCCAAAIIICACCG4CBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7gEEEEAAAQQQQAABBBBAAAEEEAhcgAAicGImQAABBBBAAAEEEEAAAQQQQAABAgjuAQQQQAABBBBAAAEEEEAAAQQQCFyAACJwYiZAAAEEEEAAAQQQQAABBBBAAAECCO4BBBBAAAEEEEAAAQQQQAABBBAIXIAAInBiJkAAAQQQQAABBBBAAAEEEEAAAQII7oHOAg2SMiXthAUBBBBAAAEEEEAAAQQQcETgEEktknIdqTdtyySASNvWd3vhzZFIJLOoqAgVBBBAAAEEEEAAAQQQQMAJgerqarW1tZkAIsuJgtO4SAKING5+N5e+o7i4uHjHjh2oIIAAAggggAACCCCAAAJOCAwZMkRVVVVVkoY4UXAaF0kAkcbNJ4Cg+QgggAACCCCAAAIIIOC6AAGEOx0kgHCnVzYq5QkIG8rMgQACCCCAAAIIIIAAAr4JEED4Rhn4QAQQgRM7NQEBhFPtolgEEEAAAQQQQAABBBAggHDnHiCAcKdXNiolgLChzBwIIIAAAggggAACCCDgmwABhG+UgQ9EABE4sVMTEEA41S6KRQABBBBAAAEEEEAAAQIId+4BAgh3emWjUgIIG8rMgQACCCCAAAIIIIAAAr4JEED4Rhn4QAQQgRM7NQEBhFPtolgEEEAAAQQQQAABBBAggHDnHiCAcKdXNiolgLChzBwIIIAAAggggAACCCDgmwABhG+UgQ9EABE4sVMTEEA41S6KRQABBBBAAAEEEEAAAQIId+4BAgh3emWjUgIIG8rMgQACCCCAAAIIIIAAAr4JEED4Rhn4QAQQgRM7NQEBhFPtolgEEEAAAQQQQAABBBAggHDnHiCAcKdXNiolgLChzBwIIIAAAggggAACCCDgmwABhG+UgQ9EABE4sVMTEEA41S6KRQABBBBAAAEEEEAAAQIId+4BAgh3emWjUgIIG8rMgQACCCCAAAIIIIAAAr4JEED4Rhn4QAQQgRM7NQEBhFPtolgEEEAAAQQQQAABBBAggHDnHiCAcKdXNiolgLChzBwIIIAAAggggAACCCDgmwABhG+UgQ9EABE4sVMTEEA41S6KRQABBBBAAAEEEEAAAQIId+4BAgh3emWjUgIIG8rMgQACCCCAAAIIIIAAAr4JEED4Rhn4QAQQgRM7NQEBhFPtolgEEEAAAQQQQACBdBdoa2vT6vJqvfLWLm18b48qqverqblFbYqosblVeVkZKszP0dCifM046UhNGFakSKT7r4EdY7369m7VNjSrIDdLJx09UBPKej4nDP4EEGHogrcaCCC8OaXLUQQQ6dJprhMBBBBAAAEEEEDAaQETLjy0tlILV29VRdV+z9eSEZEOG5Cr0iEFys6IqLlNylCb3t5Vr/d2N6iuqeWgscqGFOiC8SU6f1yJcrIyPM9l60ACCFvSic9DAJG4YSqNQACRSt3kWhBAAAEEEEAAAQcFXP0tfFfqIK9jT32T5i58sf3JB5ufksH5+uwpR6mltS1UT0cQQNi8CxKbiwAiMb9UO5sAItU6yvUggAACCCCAAAJJFjBfxFdtqdLjr25TZfWB39SXFOXrvBOPaH8V4NV3dmtffZO276nXP97apbd31qmuqfWgqgcXZOu8k47Utz4xUrnZmUm+qoOn77jOv/7jXa2rqNG7u+vbX4Ho+ul6HR3nPfbKu3rtnT3aW9ekjIyICvOy1D83S7WNzWpqaf3glYqcDKlyZ732Nx78pEIyUMLwdAQBRDI6H9+cBBDxuaXqWQQQqdpZrgsBBBBAAAEEELAs0NDUopsfX69HX37H1y/L5hWCKcOLdcnksvb/29N6BkFebud1Fza8u1vPV+7U+3sb258MiOVTkJPRHrbEeFosU1g71qwTcfes0SrMy7Y2Z8dEBBDWyeOekAAibrqUPJEAIiXbykUhgAACCCCAAAL2BMxv/e9bUa7bn96kBrPAQICfwwpzNXdqmb44fqiVtQniXXchQIJQDW1CiAUXj7XSi84XTgARqtug12IIINzplY1KCSBsKDMHAggggAACCCCQogJmbYI5C17Q2ooaq1dogohFV05W8YC8wOZN1roLgV1QQAPfNGOULpxUGtDo3Q9LAGGVO6HJCCAS4ku5kwkgUq6lXBACCCCAAAIIIBCsQMfrCC9V7tRvV25VVW1jsBP2MvoJh/VXTnZG+6sQhf28bT3ppVjz5MMF9621Hqx4qS1sx5g1IZZcc5rVV2MIIMJ2F/RcDwGEO72yUSkBhA1l5kAAAQQQQAABBFJAwHwpf3BNpe5ZtkXv7WkI9RUVFeToitOHadYE769qdF5U8qnXt2tnXVOorzFMxT08Z5wmDiu2VhIBhDXqhCcigEiYMKUGIIBIqXZyMQgggAACCCCAgP8C5ov5k/98V9f/6Z/a19Ds/wQBjnhqySDdf9HYHhdKNNe2/M0d+u2qrVq9pbrb3TgCLC9lhr7x3BM097Rh1q6HAMIadcITEUAkTJhSAxBApFQ7uRgEEEAAAQQQQMA/gY5dLf784luqD3hxSf+qPnikksH5WnTVFPXPy1Ln10cWv/6eNr2/T/XdbAEaZD2pOPZVZx6na6aPsHZpBBDWqBOeiAAiYcKUGoAAIqXaycUggAACCCCAQKoIdLwO8Pir27S1qlZ76puVlRlRaVGBRhw+QCcfM0hmBwI/t6Ts/ArCmi3V+tfOulTh1KB+We1mL2zdqdrGlpS5rrBcCE9AhKUT4auDACJ8PUlmRQQQydRnbgQQQAABBBBAoIuAWWdh4eqtuvO5LaruY3HHwwbk6uxRh6qpRfpXTa121zWpoblVuZkRKSND2ZkRDR2cr7zsTO3Y16C6hhbtaTg4yDjlmEH6/qINevTld7SfL+fck3EIsAZEHGhpcgoBRJo02uNlEkB4hOIwBBBAAAEEEEAgSAHz9MGSN7brpr+u19u7UufJgyDNGDscAkcMzNOqG8709Wmcvq6MVzD6EgrPzwkgwtOLMFRCABGGLlADAggggAACCKSNQMcaBK+8tUsb39ujLVW1en9Pvar3Naq5NW0YuNAUEvjejFG6aFKp1SsigLDKndBkBBAJ8aXcyQQQKddSLggBBBBAINUEOn9h3bR9r3bub9Kg/GyNOCyYdQDC6tfh8Orbu1Xb0KyC3CyddPRAT+sgdP3SX1G9X03NLWpTROaVh45XFrIypAG52e2vLgzMz1Ze1r9fXdhdf/DrDV7XY+jYaWHBqkqtKa9mDYKw3mTUFbPA0KJ8Lf7aacoxf3gsfgggLGInOBUBRIKAKXY6AUSKNZTLQQABBBBIHQHzxfihtZXt6wFUVO3v8cJKiws0a0KJzh9XYv1LgA1t4/DgmkrNX16ubbvrD5rShAVDBuRq9LGDlJ+T1b7WQX1jq9rUptzsDO3Z36SN2/cF/qX/8MI8XTa1VF8cP7Q9wFi1pUp//ce7WldRo7d37ufpBhs3C3PILP8hRdTS1ha4RmFelp697nQV9c8NfK6uExBAWCePe0ICiLjpUvJEAoiUbCsXhQACCCDgusCe+ibNXfiiVpdXe74UsyPC3bNGqzAv2/M5YT+wel+DPn/nKm2t7jmACds1mL9sZ0SkluC//4Xt0qkniQJ5WRn66tnH6+JJpR8EYIuiO6jsrGtqX6B0Z22T6syKpT58zJMPf75iYlLCB1M+AYQPTbQ0RLoGEIdLOlvSmOh//kNSnqSlkk7vw76/pBsk/aekEkn7JK2V9DNJz/Vx7hmSrpU0TpIZp1LS/0i6RVJtL+cmMmcstxIBRCxaHIsAAgggkPYCXV+HqKk17+23KTsjokEFOb68FmF+4z/7/nUxhQ8djTEhxIKLx8b1JETYXvUw4cMZP3uufftJPggg0L1AfnamPnfKUfrOeaOUm53ZK1PHn/HXOr3GdOLRAzW+dLBWbK7SwtWVWr2l91eEzJM+c6eW6vzxQ+P694xffSSA8Esy+HHSNYD4qqTbuuHtK4AolrRC0ghJDZLWm8BN0tGSTK79FUm/6aFtV0r6RfszUNLbknZIGiXJPKO0QdJkSTXdnJvInLHeQQQQsYpxPAIIIIBAygiYv4ybx+Qff3WbKqO/YS8pyteMk47U+LLBWlNRI7NQoFl3oWpfg96uqdM7u+rU6OFX250fx4/13egHVlZo3mPmrxzxfT52zCBdf84ITRhW5GlV+o5XHO5ZtkXv7TF/3en+c0h+tj561ECNKx3c/mpDc0tb+5aNsazF0HXk7tZmaG5pbR/TfEmqa2JVxvjuAvfOys2KaEj/XO1raNauOjdDJ/Pki9ka1bySsLW6VvsavD1tYF6bGNgvW0cf0k8D8rJV29jcvjaJ+bRvqxpdX8H8s9lS1Rzb8e8qr3/Ovd4RH6y1YhZJ3b5Xu9rXnMnRiMMHeF5zxetciRxHAJGInt1z0zWAuFjSf0l6Pvqfj0n6jocnIP4q6VOSXoz+33ejgcIcSXdLMv9WOVXSP7q0cbSkddFjL5c0PxpYHCnpb5LMzx+R9Plu2h/vnPHcSQQQ8ahxDgIIIICAVYGuiw/m52QqM0Mq37Ff/6rZL/PzfjmZOmxAngYX5Khmf2P7f1ff1KpddU0a2C/rQ4sJ7qpr1PY9Ddpd1xz4e9K9PabcOQDZWlUb/U1/qza+V9v+VEWiHy+/GfXzFYeczIiOHNRP40qL9On/OLLbAKTjmjvWRjCBTpOHQCdRC85PvsCh/XNUOqR/+xoFeebPa2Geivvnqn9ulsxv4c3TO5FIpP3P7vI3d+je5eVa9qb3V5CSeYWHDsjVDz/7UZ018rAPQr/OX+TfeG9P+2tEJlQw12jWCCkt7h+6L/XJNIx1bgKIWMWSd3y6BhBdxc2TC3f0EUCYkOIlSSZ+NE9AbO4yyEJJF/QQJPxF0qclmWNmdzlvuKQ3zOuBkk6W9GqnnycyZzx3FQFEPGqcgwACCCAQiEDnoGFffZPe39ugze/v1abt5jeJbv5G1ECZhdqeufY0bXp/X/sTFRve3a3nK3fq/b2NavEhaOirGebd8KvPGq5LJpd96JHpoF9xKCrI0RWnD9OsCUPbSzSLad753BZV1zb2VTI/TyGBzmsTxPo0UNXeen3yl8u1fW847xnzxMO104/XnCnDkvo6QgrdLp4vhQDCM1XSDySAONACLwHEDyV9U9LT0fUjujZvUvT1DLMcs3ltomNNB7N+Q1X0VQvzmsXKbrr+lKSzJP0g+iRGxyHxzhnvjUUAEa8c5yGAAAII+CbQsdvD79ZUqnxHb0sk+Tal9YHMFxULWUOv12Xe875n9qnti1Qa8+m3LbWyuOPHjh3UXtfL/9pl3Z0Jkyfg5QkcL9WZe/W+FeW67ak31dgSnldyDivM1aIrJ6t4gFlWjo9tAQII2+Lxz0cA4T2AWCLpTEnfk3RzN+Rmiem93QQNUyQti64ZMUBSUzfnflfSvG7CjXjnjPeOIICIV47zEEAAAQR8EYhntwdfJk7TQfplRVRSXKD399SrZr+7T5WkaftCfdnmS8axRfkaX1akT5/c/Ss4iVxAQ1OL/vvvG/TYq9tkFn9N1icsizAm6/rDMi8BRFg60XcdBBDeA4i3ootNni/p4R5o35R0nKRLJN0fPcb8872SzM+O7+E8M+aDkswcx3Y6Jt45++5890cQQMQrx3kIIIBACgr0tCBgYb8cmbUMzOKMfi54lshuDynIzyUh4KRAv+wMff6Uoz3twuDHBXbeyWFPXVN7IGHWggnyU1yQowsmlGhM6eAP1qoIcj7G7luAAKJvo7AcQQDhPYAwz4DmSzpX0pM9NNBsxzlW0nWSbo0ec72kn0S36hzfw3lmzL9Ht/Q0T0l0fOKds7f7y+y+0dOnqLi4OLJjR2+HhOXWpQ4EEEAAAb8EelprYeN7+1Tb2Puq7VkZEZ141EB99azhmnr8EE+7LPRUd6K7PfjlwTgIIBC7QP/cTP3sP0/SOR89IqF/D8Q+84fPCPIpqrIhBZo1vkQzx5WwxkOijfL5fAIIn0EDHI4AwnsAYf4GZhaKnCbpmR56Yl61MK9cmB01zHoO5mP+2byysVzS1B7OM692mNctzBxZnY6Jd04CiAD/0DA0AgggkCoCHdstzl9erm27zRJGiX0SCSNMCDLt1qUqr0rNNR8Sk+VsBMIrEMZXEMy/2x5eWykTalbW1MWMl5+doROOKNTwwwbI7GjRdWeOmAfkhMAFCCACJ/ZtAgII7wFEvE8jhO0JiF7DieLi4mKegPDtzxcDIYAAAqEUMF/2n/znu7r+T/8MbDcJs/3ll6I7HnhZ6X7VlirNnG8eJOSDAAJhFjhiYJ7GDh2skUcW6qRO22WGseaOLTwXrq7U6i3VvT7RVZCT2f5KmdmlZcrw4qQ+xRFGy7DXRAAR9g79uz4CCO8BxNuSjpIU6xoQl0qaH+caEPHOGe8dyBoQ8cpxHgIIIBBSgc7rOHRs9/je7ga1Wap3zNBDdN+FY9p3WujpY2q84c+v6o8vmP/Z44MAAl4EjjkkT4cV5mn9tr3a38OrUuYv+ofkZyk7M1M765radzuJ9+P6Lg8fvGr21i5t3L5Xu/Y3aVB+jkYcPiD0QUq8PUun8wgg3Ok2AYT3AMK8dnGGJLNjxfe7abH5m9U+STnR1zBWRI8xr10sje6CYbbk7G6J6Y5dMMxrGGY7zo5PvHPGewcSQMQrx3kIIIBAyAQ6trJcuHqrKqqCXZCtr0s/tH+OTh9xqBqaW7S1Zr+amlvUpojMKva1Dc2q2d+kphZbkUhf1fJzBMIr0N1v6c0Xa/ME0aJXt6my+sCfdbP7RNdFYjsv1mj+3BXkZunEowfqlGMG6UdPvNHjbhLmiYfLppTq/PFDWfcgvLdG2ldGAOHOLUAA4T2A+G9JN0paLOmcblo8SZIJHcxLtEOiYYQ5zCwqWRUNJiZKWt3NuU9FgwezboRZM6LjE++c8d6BBBDxynEeAgggECKB3XWN+q971mr9tj0hqopSEEDAq0BWhlTcP7f9CYeyIf2t/Ja+p4BiQlkRryN4bRzHJU2AACJp9DFPTADhPYA4RdKL0YUiR0ja0kV7oaQLJD0q6XNdfvY3STMk/VbSRV1+NlzSG9EFLv9D0iudfp7InDHfDJIIIOJR4xwEEEAgJALmqQfzxMPPFm9UfVP8j1qH5HIoAwGrAuZLf1FBjvrnZis3O6P9NaXddU3aWdukuqaDd4Mxxw/My1JGRoZ27GtMuFbWIEiYkAHSWIAAwp3mE0B4DyDMkY9JOk/SC5I+JWmbJGM4R9Ldkszf9sZIeqnLLWD+u46VtS6TdG/050dExxwt6S+SPtvNrRPvnPHchQQQ8ahxDgIIIBACgSC3ngvB5VECAoEImK0jx5f1vvCglycDzOtE3398vR55+Z0e12PofAEZEcnsHjHGkcUcA8FnUAR8FCCA8BEz4KHSNYA4RtLLnWzzJBVE12fY3em//4kk85+Oj3m1YqUk89RCg6TXo69bmPFMUH61pDt66NlXJf08Gli8ZZ42kPQRSbmSNkqaHH1Vo+vpicwZ6+1DABGrGMcjgAACIRAwTz5ccN9ara2oCUE1lIBAcgXGlw7Wl844Thu27WlfY8SsdfDRowoVUUSvvbP7g//OrH/g9+sFnddj2FpVq111TWpoblVedqYG9stWSTdrMyRXi9kRSA0BAgh3+piuAcRQSRUe2jRP0k1djjNrOtwg6T8llUgy23Oapxt+KunZPsacJulaSeOigUelpD9J+lGnNSO6GyKROT1c5geHEEDEosWxCCCAQAgETPhwxYMvaskb74egGkpIhkD/nAzl52bp/b2JvwaQjPr9nNMECnfPGt3rrit+zsdYCCAQDgECiHD0wUsV6RpAeLFJx2MIINKx61wzAgg4J9DxSPjqzVW6d3m56prZQSIZTczNjKhoQG77Vn6D+mWrvqlFL/1rl7VSCvOydOWZx2n2xFJlZ0a0urxaL1fu1AMrt6qqNr3CiLIhBZo1vkQzx5WwU4O1O5CJEAiPAAFEeHrRVyUEEH0JpdfPCSDSq99cLQIIOCRgQoflb+7QglWVWhWA0PYAACAASURBVFNerdrGgxfFc+hyQlWqWUzQBAiHFvbToPwDj8mfd6JZpkla9No2mUfpd9c3t3/JLy3ueUcCv1+FMesEHDYgV0OLC9oXQTRblXp5jN+sBzJnwQsp8UrO7Akl+t6MUVpTUaPX3t6tffVNqq5tbH/v1ewS0T+6laTfr1KE6galGAQQ6FOAAKJPotAcQAARmlaEohACiFC0gSIQQACBfwuYL7UPra3Ub1dWqLKmDpouAjmZEX32Y0fp0MK89i+jnd/17/pl1ewykJkZUUurtD+6NoDf6wCYL/+X/PZ5Pb91Z1y9ys2K6FMnH9V+TROGxb/9oblv7l9Rrtue3qQGn56QMYFIaw8P25jdIy6bWqYlG7ZrXZzX3hXMrOWw8JJxPNEQ153ESQiklwABhDv9JoBwp1c2KiWAsKHMHAgggIBHgd11jfqve9Zq/bY9Hs9Iv8NumjFKF04qDdWFd2yH+uvnNrdv4ej1c2rJIN1/0Vhf1y+IdXeG7mo1uzXMnVra/nrDC5U1WvTqNlVW728/9NguiyomGsB0zD9m6CG678Ixvlp47QPHIYCAewIEEO70jADCnV7ZqJQAwoYycyCAAAKdBDrWc3g1+nh51b4GvbenXhXv1+pfO+vaHzXn072Aeex+wcVjQ/sbctPbZZve1+1Pv6l/vrNHTT08PmCeHrji9GGaNWFoYNfS0+4Mueb9E7O1V3OrzD9HIpE+XzXp637sCGDuXLpF1ftiW4vChkVf9fNzBBBwT4AAwp2eEUC40ysblRJA2FBmDgQQSHuBji+mv1iyuX2rwLqm1rQ3iRVgXOlgzZ99qjO/Ie8cAPT09ECsBmE/3kvowfaUYe8i9SHghgABhBt9MlUSQLjTKxuVEkDYUGYOBBBIS4GO0OE289vwt3fLp9fyrVj2z83U+LKi9t/QTz6uqP23+nMffLn9t+bJ+Jw18lD95vzRgT0tkIxrYk4EEEAAgfgFCCDit7N9JgGEbfFwz0cAEe7+UB0CCDgo8MF6AM9u1s793tcDSNal5mRm6CNHFrYvgGh2XOhpkcYHVlZo3mPrrZc5dughevDS8YQP1uWZEAEEEAivAAFEeHvTtTICCHd6ZaNSAggbysyBAAJpI+DXgnxBg2VlRHTiUQP11bOGa+rxQ9rXAejrY4KV2fev0+ry6r4O9e3nZs2Hu2eNdua1C98unIEQQAABBHoVIIBw5wbp+28Y7lwLlSYuQACRuCEjIICAAwKdF36sjW7HeNLRA2W+4Hr58u3lEvfVN+uTv1wW6q0zDx2Qqx9+9qM6a+RhcV23CVjmLnwx8BCibEiBZo0vad+FISe6aKKXHnAMAggggEB6CBBAuNNnAgh3emWjUgIIG8rMgQACSRMwWxL+8O8b9Pir21RTe/Dq/OaL7gXjS3R+gl90zRfzT92xQlujWxUm7YJ7mDgvO0PXTR/hy64L5kmIh9dWasHqraqoOrA1Y1+f7AxpcEGO+udmKzf73zsvDC0qUL+czPbTi/vnqn9uVo+vgPQ1Bz9HAAEEEEgfAQIId3pNAOFOr2xUSgBhQ5k5EEDAuoD5knzv8vL27RAbW/peODHeR/3NkxXL39yhbz36T721s876dXqZcOThA/SHueM1sF+Ol8M9H/PBUyVv7dLG7Xu1a39T+xoSBAqeCTkQAQQQQCBOAQKIOOGScBoBRBLQQzwlAUSIm0NpCCAQm0DHF+LVm6t034oK7Y9xq0sTQiy4eKynR/5NwPHQ2kr9bk2lynfUxlaopaMzItK104/XnCnDPF2TpbKYBgEEEEAAgYQFCCASJrQ2AAGENWonJiKAcKJNFIkAAt0JmMBh1ZYq/fUf72pdRY3e2VWnppa2hLBumjFKF04q7XUMW+sgJHIhhw3I1aKrJqt4QF4iw3AuAggggAACoRQggAhlW7otigDCnV7ZqJQAwoYycyCAgK8CHdtc3vncFlV3s65DIpMNLcrXs9ed3uMCjcnYCSKW68nOjOias4/XJZPLeOohFjiORQABBBBwSoAAwp12EUC40ysblRJA2FBmDgQQ8E3AxjaXCy8eo6nHH9ptzQ+srNC8x9b7dj1+DTQoP1ufPvlIffMTI5WbfWBRRz4IIIAAAgikqgABhDudJYBwp1c2KiWAsKHMHAgg4IuAefrggvvWam1FjS/j9TTI6GMH6U9XTPzQUxAdr3tc+fDLqtnfFOj8Xgc3azycPmKILpxYqinDi+PaVtPrXByHAAIIIIBAmAQIIMLUjd5rIYBwp1c2KiWAsKHMHAggEJfAB7ssvL1be+qa9PSG7dq0fV9cY8V6knmV4ahB/XRqyWD1y8nQU+u36709DbEOE9jxo44o1O8vG+f7zhaBFczACCCAAAII+ChAAOEjZsBDEUAEDOzY8AQQjjWMchFIBwEXdphIVh9KivJ10cShmjmuhDUektUE5kUAAQQQSLoAAUTSW+C5AAIIz1RpcSABRFq0mYtEwA0B88TDkje26+bHNuhfNfvdKNpClQU5mZowrEizJgzlVQsL3kyBAAIIIBB+AQKI8Peoo0ICCHd6ZaNSAggbysyBAAK9CnQ88bBw9VZVVKV38GBe/Th0QG77qx8jjyzUSUcP1ISyItZ34M8QAggggAACnQQIINy5HQgg3OmVjUoJIGwoMwcCCHxIoGNBx8df3abN7+/V6+/u1f7GlrRTGlZcoFOHHqJDC/PUPzdLJxI2pN09wAUjgAACCMQnQAARn1syziKASIZ6eOckgAhvb6gMAacFOhaQfOWtXdq0fa927m/SgNxMvbWzThu27VVDc6vT15do8d8453hdccbwRIfhfAQQQAABBNJSgADCnbYTQLjTKxuVEkDYUGYOBNJIwLxO8eCaSt2zbEuodo0IUwtGHj5Af/3KZBaRDFNTqAUBBBBAwCkBAgh32kUA4U6vbFRKAGFDmTkQSBOB6n0N+vydq7S1Or3Xceit3XnZGVr7zWlsn5kmfya4TAQQQACBYAQIIIJxDWJUAoggVN0dkwDC3d5ROQKhEjDhwxk/e0576ptDVVfYivn2J0fq0illYSuLehBAAAEEEHBKgADCnXYRQLjTKxuVEkDYUGYOBFJcwLx2cfbPl6qSrTN77bTZzWLBxWN59SLF/zxweQgggAACwQsQQARv7NcMBBB+SabGOAQQqdFHrgKBpAr85tk39ZP/3ZTUGsI++agjCvWHueNVmJcd9lKpDwEEEEAAgdALEECEvkUfFEgA4U6vbFRKAGFDmTkQSGGBvXVNOvnmxWptC+dF5mRGNLS4QJu270tagUX9c7TqG2cqNzszaTUwMQIIIIAAAqkkQADhTjcJINzplY1KCSBsKDMHAikqsKe+qf3Vi+17GkJ5heapg0e/NFGRSEQX3LdWaytqklLnTTNG6cJJpUmZm0kRQAABBBBIRQECCHe6SgDhTq9sVEoAYUOZORBIQQGz7sOs+9ZqTZK+1PdFatZbuHvW6A9eeTBhySW/fV7Pb93Z16m+/px1H3zlZDAEEEAAAQTaBQgg3LkRCCDc6ZWNSgkgbCgzBwIpKHDv8nL9YNGG0F1ZaVGBZk8s0cxxJQct9mhCk4Wrt+rOpVtUva8x8Nq7hiCBT8gECCCAAAIIpIkAAYQ7jSaAcKdXNiolgLChzBwIpJhA1d56jf/RM2oO0cIPRw/K002f/qimnXBo+ysXvX3a2tq0akuV/vaPd7WuokZv76pTU4t/i1iUDSnQrPHdhyApditwOQgggAACCCRFgAAiKexxTUoAERdbyp5EAJGyreXCEAhGoHpfg6b8+Bntb2oNZoIYRy0qyNEVpw/TrAlD497e0gQSq8ur9epbu7T+3d16oXKntu9tVEsPAUt+dqY+d8pR+vYnR+qlt3bptbd3q7ahWQW5WTrx6IEyTz70FYLEeJkcjgACCCCAAAKdBAgg3LkdCCDc6ZWNSgkgbCgzBwIpIrCvvllTf/KMavY3Je2KzMMNxw7O1/iyIn365CM1YVgwX/Y7npJY9Oo2VVbvb7/eY4vyNeOk4OZMGioTI4AAAggg4JgAAYQ7DSOAcKdXNiolgLChzBwIpICAWcRxxi+Xq7KmLilXc0h+tj518pH65idGsp1lUjrApAgggAACCIRHgAAiPL3oqxICiL6E0uvnBBDp1W+uFoG4BMzijV+8d43WWd5Bol92hiYOK9bsiUM1ZXgxrzXE1T1OQgABBBBAIPUECCDc6SkBhDu9slEpAYQNZeZAwGEBEz5c8eCLWvLG+4FfRX52hk4+5hANLeZVh8CxmQABBBBAAAGHBQgg3GkeAYQ7vbJRKQGEDWXmQMBRAbPbxSd+sUzv7wt+zQe2rHT0JqFsBBBAAAEEkiBAAJEE9DinJICIEy5FTyOASNHGclkIxCtgFl9c/uYOzV9WruWbq+MdxvN5bFnpmYoDEUAAAQQQQCAqQADhzq1AAOFOr2xUSgBhQ5k5EHBAwLxq8eCaSt21dLPe39sYSMVmIcmLJpWquaWVLSsDEWZQBBBAAAEE0kOAAMKdPhNAuNMrG5USQNhQZg4E4hDo2Aby8U7bQJYEtA2kedXivDtW6L09DXFU6u2U7IyIXvjOWRrYL8fbCRyFAAIIIIAAAgj0IEAA4c6tQQDhTq9sVEoAYUOZORDwKGBCh2Wb3tdtT7+p19/Zo6bWtm7PzM/O1OdOOUrfOW9UQltSmqce7lm2RT9/apN6mMpj5X0f9u1PjtSlU8r6PpAjEEAAAQQQQACBPgQIINy5RQgg3OmVjUoJIGwoMwcCfQiYIGDh6q369bObtXO/9wUf87IydPVZw3XJ5DLlZGXE5Ly7rlFfuHuNNry3N6bz4jl4aFG+Fn/ttJhrjGcuzkEAAQQQQACB1BcggHCnxwQQ7vTKRqUEEDaUmQOBXgT21Dfpkt8+r+e37ozbaXzpYN0z+1QV5mW3j2GepFhdXq1X396t2obm9vUWTjp6oMxxKzZX6bertmrppiq1BP3Yg6TCvCw9e93pKuqfG/f1cSICCCCAAAIIINBZgADCnfuBAMKdXtmolADChjJzINCDgHny4YL71mptRU3CRkcOytMXxhyrHXvr9fSG97Vtd/1BY5r/Aej+pY6Ep+92gAF5WXqO8CEYXEZFAAEEEEAgjQUIINxpPgGEO72yUSkBhA1l5kCgB4F7l5frB4s2pKRPZkT6x3ena0C/A09l8EEAAQQQQAABBPwSIIDwSzL4cQgggjd2aQYCCJe6Ra0pI2BekXhq/TZd/ruX1ZoyV/XhC7nh4yN0+enHpejVcVkIIIAAAgggkEwBAohk6sc2NwFEbF6pfjQBRKp3mOsLlUDHYpO/eXazamJYbDJUF+GhmHGlg/W7S8ax6KQHKw5BAAEEEEAAgdgFCCBiN0vWGQQQyZIP57wEEOHsC1WloIAfi026wNJ1QUwXaqZGBBBAAAEEEHBLgADCnX4RQLjTKxuVEkDYUGaOtBfwc7HJsGJmRKRrpx+vOVOG8eRDWJtEXQgggAACCKSIAAGEO40kgHCnVzYqJYCwocwcaS+QyotNmuYeNiBXi66arOIBeWnfawAQQAABBBBAIHgBAojgjf2agQDCL8nUGIcAIjX6yFWEWGB3XaPG/vBpNTTb3ADTDoj5H5Rrpw/XZVOP46kHO+TMggACCCCAAAKSCCDcuQ0IINzplY1KCSBsKDNH2gqYVy8+8+uVWr9tT8oZHFaYq0VX8tRDyjWWC0IAAQQQQMABAQIIB5oULZEAwp1e2aiUAMKGMnOkrcADKys077H1KXX9Jni4fGqZzh8/lKceUqqzXAwCCCCAAALuCBBAuNMrAgh3emWjUgIIG8rMkZYCDU0tGv+jJdqZItttHjekQN+d8RFNGV6sSIT/KUnLm5qLRgABBBBAICQCBBAhaYSHMvhbowekNDqEACKNms2l2hOo2luvs3++VDvrmu1NGuBMY4ceogcvHc8TDwEaMzQCCCCAAAIIeBcggPBulewjCSCS3YFwzU8AEa5+UI3jAmbNh3uWbdHPn9qk1hRZc3JCWZHunjVahXnZjneH8hFAAAEEEEAgVQQIINzpJAGEO72yUSkBhA1l5kgLgT31TZqz4AWtrahJievNy87QddNHaNYE1npIiYZyEQgggAACCKSQAAGEO80kgHCnVzYqJYCwocwczgu0tbVp1ZYqPf7qNlVW72+/npKifM046UhNGFYk8+TDZ3+zKmV2uxh1RKF+f9k4DeyX43zvuAAEEEAAAQQQSD0BAgh3ekoA4U6vbFRKAGFDmTmcFTDBwsLVW3Xnc1tUXdvY7XVkZ0SUEZEaWoJ752J0yaD2uV+s3BWoZdmQAs0aX6KZ40pY7yFQaQZHAAEEEEAAgUQECCAS0bN7LgGEXe+wz0YAEfYOUV/gAp2fbthaVas99c3KyozoqIF5Wrd1p6r2dR88BF5YdIKONRjysjIPhCFLt6g6hprMhhVt3WQjA/IydfyhAzSurEgD+2XrxKMHyszFDhe2Oss8CCCAAAIIIBCvAAFEvHL2zyOAsG8e5hkJIMLcHWoLVMBsk3nz4+v16MvvaH9jS6BzxTN4aXGBZk84+GmEjsBkUfR1EPP/5+Vk6tABuWpobtWu/U0alJ+jEYcP0ElHD9T40sFaU1Gj197erdqGZhXkZhE2xNMQzkEAAQQQQACB0AgQQISmFX0WQgDRJ1FaHUAAkVbt5mKNgHmt4t7l5brtqU1qCulWFTecO0Jzpw7jaQRuWQQQQAABBBBAoBsBAgh3bgsCCHd6ZaNSAggbyswRGoGqvfX65C+Xa/ve5L5W0RvI0KJ8PXvd6YQPoblrKAQBBBBAAAEEwiZAABG2jvRcDwGEO72yUSkBhA1l5ki6gHnq4Z5lW/TzpzYppA89fGB004xRunBSadLNKAABBBBAAAEEEAirAAFEWDtzcF0EEO70ykalBBA2lJkjqQJ76ps0Z8ELWltRk9Q6vExuFoFccPFYdqDwgsUxCCCAAAIIIJC2AgQQ7rSeAMKdXtmolADChjJzJE3APPkw+/51Wl1enbQavE5sFou8Z/apKszL9noKxyGAAAIIIIAAAmkpQADhTtsJINzplY1KCSBsKDNH0gTMYpM/WLQhafN7mTgjIl07/XjNmTKMJx+8gHEMAggggAACCKS9AAGEO7cAAYQ7vbJRKQGEDWXmSIrA7rpGjfvvJapvak3K/F4mPWxArhZdNVnFA/K8HM4xCCCAAAIIIIAAApIIINy5DQgg3OmVjUoJIGwoM4d1AfPqxad/tUIb3ttrfW6vE379nON1KU89eOXiOAQQQAABBBBA4AMBAgh3bgYCCHd6ZaNSAggbysxhXeDO5zbrx09utD6v1wm/9YkTNGfqMK+HcxwCCCCAAAIIIIBAJwECCHduBwIId3plo1ICCBvKzGFVoKGpRSffvDi0r14MLcrX4q+dxnoPVu8KJkMAAQQQQACBVBIggHCnmwQQ7vTKRqUEEDaUmcOqwHf/+k8tXF1pdU6vkxXmZenZ605XUf9cr6dwHAIIIIAAAggggEAXAQIId24JAgh3emWjUgIIG8rMYU2gra1No7//lGr2N1mb0+tE5smHP18xkfDBKxjHIYAAAggggAACPQgQQLhzaxBAuNMrG5USQNhQZg5rAqu2VGnm/LXW5vMy0WGFubp8apnOHz+U1y68gHEMAggggAACCCDQhwABhDu3CAGEO72yUSkBhA1l5rAmcNfSLbrliTeszdfTRJkZ0tThQ3TRpFJNGV6sSIR/9Sa9KRSAAAIIIIAAAikjQADhTiv5W7A7vbJRKQGEDWXmsCZw6+KNuuOZzYHMl5edoZGHD9BHjhyoVeXVKt9Re9A8gwuyNeOkI/XNT4xUbnZmIHUwKAIIIIAAAgggkO4CBBDu3AEEEO70ykalBBA2lJnDmoAfT0BcP324Tjz6EG3Ytke1Dc0qyM3SiUcP1ISyog+eZDBrTawur9Zrb+/u8RhrF81ECCCAAAIIIIBAmgkQQLjTcAIId3plo1ICCBvKzGFN4OkN23Xpghfinu/8scfoh587Ke7zOREBBBBAAAEEEEAgeAECiOCN/ZqBAMIvydQYhwAiNfrIVUhqbG7VrPvWak1FTVwe5hWLV747nVcn4tLjJAQQQAABBBBAwJ4AAYQ960RnIoBIVDC1zieASK1+pvXVPLCyQvMeWx+3wQ0fH6HLTz8u7vM5EQEEEEAAAQQQQMCOAAGEHWc/ZiGA8EMxdcYggEidXqb1lZg1GU7/2XOqrN4fl8O40sH63SXj2CYzLj1OQgABBBBAAAEE7AoQQNj1TmQ2AohE9FLvXAKI1OtpWl7Rsk07NOv+dXFf+72zR+uskYfHfT4nIoAAAggggAACCNgTIICwZ53oTAQQiQqm1vkEEKnVz7S8GrP2w3l3LNem7fvivv4bzz1Bc08bFvf5nIgAAggggAACCCBgT4AAwp51ojMRQCQqmFrnE0CkVj/T5mo6tsFcV16t362pVHVtU0LXftWZx+ma6SMSGoOTEUAAAQQQQAABBOwIEEDYcfZjFgIIPxRTZwwCiNTpZVpciXna4aG1lVq4eqsqquJb76E7KJ6ASIvbh4tEAAEEEEAAgRQRIIBwp5EEEO70ykalBBA2lJnDF4E99U2au/BFrS6v9mW8zoM8PGecJg4r9n1cBkQAAQQQQAABBBDwX4AAwn/ToEYkgAhK1s1xCSDc7FvaVW2efJh9/7pAwodD8rP10nfOViTCvx7T7sbighFAAAEEEEDASQECCHfaxt+w3emVjUoJIGwoM0fCAg+srNC8x9YnPE53A5w98lDNnz0mkLEZFAEEEEAAAQQQQMB/AQII/02DGpEAIihZN8clgHCzb2lVtVlwctqtS1VeVRvIdS+8eIymHn9oIGMzKAIIIIAAAggggID/AgQQ/psGNSIBRFCybo5LAOFm39Kq6mWbdmjW/esCueZB+dl6mdcvArFlUAQQQAABBBBAICgBAoigZP0flwAidtMiSddKOk9SmaQcSe9LWiXpl5JW9DBkf0k3SPpPSSWS9klaK+lnkp7ro4wzonOOk2TGqZT0P5JukeTnr4EJIGK/HzjDooBZePK8X67Qv2r82/Gic/mnDS/WgkvMHzM+CCCAAAIIIIAAAq4IEEC40imJACK2Xg2XtFTSEZJaJW2VtEfSMEkDJLVFg4LbugxrltM3wcQISQ2SzMvrQyQdHT3nK5J+00MpV0r6hQ706m1JOySNkpQraYOkyZJqYruMHo8mgPAJkmH8FzALT866b63WVPh1ux9c49fPGaEvnXGc/8UzIgIIIIAAAggggEBgAgQQgdH6PjABRGykSySdKelNSZ+JBglmhDxJP4iGD83RgMAc0/H5q6RPSXox+n/fjQYKcyTdLalF0qmS/tGlnNGSzLPmpk+XS5ofDSyOlPQ3Sebnj0j6fGyXQQDhkxfDWBS487nN+vGTGwOdke03A+VlcAQQQAABBBBAIBABAohAWAMZlADCO6t5wmF3NAww4YMJFTp/jOUmSebXp+aphV9Ff/gxSS9Fn5gwT0Bs7nLeQkkX9BAk/EXSpyWZY2Z3Oc88jfGGpAxJJ0t61fulEED4YMUQFgUamlp08s2LVd9kHjwK5lM2pEBLrjmN7TeD4WVUBBBAAAEEEEAgMAECiMBofR+YAMI7qXmNwrz+YD4nSvpnN6c+KekcSddI6ngN44eSvinpaUlnd3POpOjrGfWSzBwdazqYtR6qoq9amNcsVnZz7lOSzoo+ffEd75dCAOGDFUNYFPj2o6/pwbX/CnTGm2aM0oWTSgOdg8ERQAABBBBAAAEE/BcggPDfNKgRCSBik30rum7DXEn3dDm1QNIWSYdF12XoCAw6Xtv4nqSbu5kuW9LeboKGKZKWRdeMME9fNHVz7nclzesl3Ijt6iTWgIhVjOMDF9hd16jR339aza1miZVgPhPKirTg4rHKyTIPFPFBAAEEEEAAAQQQcEmAAMKdbhFAxNar8yX9LhoYmJ0wHo8uQvlRST+Krg/xYPSVio6RO0ILc+7DPUxn1oswr25cIun+6DHmn++NrjdxfA/nmTHNfGaOY2O7lG6PJoDwAZEh/BMwC09+5tcrtX6bWes1mI8JH+6eNVqFeSYL5IMAAggggAACCCDgmgABhDsdI4CIvVdm+81vS+q6V9+26BMOZlHJzr+qNa9U5Es6V5J5RaO7j9mOc6yk6yTdGj3gekk/iW7VOb6H88yYf49u6WmekvDy6XiNpLtji4qLiyM7dvR2iJcpOAYBfwQeWFmheY+ZTWP8/5QWF2j2hBLNHFfCkw/+8zIiAggggAACCCBgTYAAwhp1whMRQMRO+FVJV0kqkWReSje/mjVPL5iQwQQJl3ZZH8LscGGe654m6ZkepjOvWphXLsw6DmY3DfMx/2xe2VguaWoP55kdOcwrHmaOLI+XQgDhEYrDkivQ1tamabcuVXlVx7Io/tRz7OB8fXfGKE074VAWnPSHlFEQQAABBBBAAIGkChBAJJU/pskJIGLi0q8lfUnS85K+GN31wozQL7oWg3lqwQQSJ0mqjA4dticgertiXsGI7X7g6AAFVm2p0sz5JtPz55OdGdE3PzFS5/PEgz+gjIIAAggggAACCIREgAAiJI3wUAYBhAek6CEmVPiHpGZJZgvMjoCh8whmpwvzpIN5DePy6A/elnSUpFjXgDBPUsxnDQjvDeLI1BK4a+kW3fKE2WnWn8/3zhupiyaX+TMYoyCAAAIIIIAAAgiERoAAIjSt6LMQAog+iT44wDz5YJ6AMC+kf6SH074u6ceSXpR0avQY89rFGZLMjhXf7+Y8s/LdPkk50dcwVkSPMa9dLI3ugmG25DTBR9dPxy4Y5jUMsx1noh+egEhUkPN9E7h18Ubd8cxmX8ZjlwtfGBkEAQQQQAABBBAIpQABRCjb0m1RBBDee/UNSbd4DCBel2R2xjCfMlvS/AAAIABJREFU/5Z0o6TFks7pZrpJkkzoUC9pSDSMMIeZRSWrosHEREmruzn3qWjwYNaNMGtGJPohgEhUkPN9E/j1s5v10//dmPB47HKRMCEDIIAAAggggAACoRYggAh1ez5UHAGE9159VtIjkpo8vIJhjvt8dOhTok9EmIUiR0ja0mXKhdFtOx+V9LkuP/ubpBmSfivpoi4/M6+BmOfTzQKX/yHpFe+X0uORBBA+IKbjEGbByNXl1Xr17d2qbWhWQW6WTjp6oMyX/0gk9n/N7Klv0v+9a7XeeG9v3Jw5mRn6+sdHaNaEoexyEbciJyKAAAIIIIAAAuEXIIAIf486Koz9m4E71+Z3pQWSyiUd2scilGbez0j6a6cCHpNktu98QdKnJJktO439nOh6Ea2Sxkh6qUvR5r/rWIXvMkn3Rn9+hCQz5mhJf5FkwhE/PgQQfiim0RiNza16aG2lfremUuU7Dt6tomxIgS4YXxLTwo8NTS367G9Waf02s55rfB+z4OTz35qmQfm58Q3AWQgggAACCCCAAALOCBBAONOq9i/BfLwLmHUWzBd+E0aY0MAsRGl+RduxDacZyawT8ZUuQ5pXK1ZGn5xokGRe0TD/3TGS2iRdLemOHsow237+PBpYvCXJbKNp1qAw36zM8+mTo69qeL+Kno8kgPBDMU3GME8pzF34YvuTD319xpcO1j2zT1VhnlnypPuPCR5++PcN+tOLb2t/o3lgKP7Ptz85UpdOYcHJ+AU5EwEEEEAAAQQQcEeAAMKdXhFAxN4r863ma9G1F0okZUUDgHXRXSsW9TCkWdPhBkn/KcmcZ35dbJ5u+KmkZ/sow+ysca2kcdHwwwQff5L0o05rRsR+JQefQQDhh2IajGGefJh9/zpP4UMHx9CifD1+5RT1zzN/ZP79MWPdt6Jcv1jypuqbTK6X+GfhxWM09XjzsBIfBBBAAAEEEEAAgVQXIIBwp8MEEO70ykalBBA2lB2fwwQGV/3+JT35+vaYr8SEEH+7cvIHT0KYpyjmLHhBaytqYh6rtxNuPPcEzT1tmK9jMhgCCCCAAAIIIIBAOAUIIMLZl+6qIoBwp1c2KiWAsKHs8BwmMLhswQtak0Bg0LElpmGI9SkKr3RXnXmcrplu1nzlgwACCCCAAAIIIJDqAgQQ7nSYAMKdXtmolADChrKjc8Tz2kVPl3rTjFHti5/Me2x9IBo8AREIK4MigAACCCCAAAKhFCCACGVbui2KAMKdXtmolADChrKjczywssK3wKC0OF+tbVJl9f5ANB6eM04ThxUHMjaDIoAAAggggAACCIRLgAAiXP3orRoCCHd6ZaNSAggbyg7O0dbWpmm3LlV51cFbbYbtcszWn0uuOU2RCP96C1tvqAcBBBBAAAEEEAhCgAAiCNVgxuRv6MG4ujoqAYSrnQu47lVbqjRzvtm0Jfwf83rHhZNKw18oFSKAAAIIIIAAAgj4IkAA4QujlUEIIKwwOzMJAYQzrbJb6F1Lt+iWJ96wO2kcs3UscJmTlRHH2ZyCAAIIIIAAAggg4KIAAYQ7XSOAcKdXNiolgLCh7OActy7eqDue2RzqykceMUB/nDvhgy0+Q10sxSGAAAIIIIAAAgj4JkAA4Rtl4AMRQARO7NQEBBBOtctesS48AfH1c0boS2ccZw+FmRBAAAEEEEAAAQRCIUAAEYo2eCqCAMITU9ocRACRNq2O7UKf2bBdFy94IbaTLB991ZnH6ZrpIyzPynQIIIAAAggggAACyRYggEh2B7zPTwDh3SodjiSASIcux3iNe+qbNOOXy1VZUxfjmXYPv/HcEzT3tGF2J2U2BBBAAAEEEEAAgaQLEEAkvQWeCyCA8EyVFgcSQKRFm71fZGNzq2bdt1ZrKmq8n5SkIx+eM04ThxUnaXamRQABBBBAAAEEEEiWAAFEsuRjn5cAInazVD6DACKVu9v52trapK3LpXdekhr3STn9paNOkYZOkSL//tfCAysrNO+x9aFXKRtSoCXXnKZIp9pDXzQFIoAAAggggAACCPgiQADhC6OVQQggrDA7MwkBhDOtirPQ5kbphful5++Vqt88eJCi4dKYS6VTL1ZbZram3bpU5VW1cU5m77SbZozShZNK7U3ITAgggAACCCCAAAKhESCACE0r+iyEAKJPorQ6gAAildtdv1v6w/kHnnzo61MyWatKv6yZT7b1dWTSfz6hrEgLLh6rnKyMpNdCAQgggAACCCCAAAL2BQgg7JvHOyMBRLxyqXkeAURq9lUyTz48+Dlv4YMk84bGN5su0e9bp4VaxIQPd88arcK87FDXSXEIIIAAAggggAACwQkQQARn6/fIBBB+i7o9HgGE2/3rufo1d0lPfqPPq2tsy9RDLWfpdy1nq7ztyD6PT9YBZs2HWeNLNHNcCU8+JKsJzIsAAggggAACCIREgAAiJI3wUAYBhAekNDqEACIVm20eZ7jjFKmmvNer29PWT3ObrtHq1o+ETmFwQbbOH1ei/rlZOvHogTJPPrDgZOjaREEIIIAAAggggEBSBAggksIe16QEEHGxpexJBBCp2NrNz0gPfrbXKzNPPsxuuiGU4YMpnEUmU/HG5JoQQAABBBBAAAF/BAgg/HG0MQoBhA1ld+YggHCnV94rfej/Sm/+b6/HP9B8juY1z/Y+psUjJ5QUasGcSbxqYdGcqRBAAAEEEEAAAZcECCDc6RYBhDu9slEpAYQNZZtz1O2SfjJMamvucVbzhsa0xp+Fcs2H8ZH1uuewR1T4laVSVo5NOeZCAAEEEEAAAQQQcESAAMKRRkkigHCnVzYqJYCwoWxrDrPzxfwzpe2v9TrjqpZRmtn0bd+qiqhVbUpsS8wsNeu6rD/q4swnlRNpkT7+Y2n85b7VyEAIIIAAAggggAACqSNAAOFOLwkg3OmVjUoJIGwo25rD484XdzWfp1uaZ9qqqs95DtFuLcu+WgMyG/99bOFR0tdelyL8K6tPQA5AAAEEEEAAAQTSTIAAwp2G87d5d3plo1ICCBvKNuYw71X86lSpenOfs93a9H90R0vvi1T2OUiXAw7RHu1UYaynKVcNWpfzJQ3MqDv43NmPSaVTYx6TExBAAAEEEEAAAQRSW4AAwp3+EkC40ysblRJA2FC2MYeHnS86ygjiCYipkVe0rO3kmK/025kLdWn2k92fd/bN0qSrYx6TExBAAAEEEEAAAQRSW4AAwp3+EkC40ysblRJA2FAOeo763dJdU6RdlZ5mWtbyUc1q+qanY70e9PXMP2h524kxbes5IeN1Lci+5cCaD919Jl4tTb/5wE/MEx5bl0vvvCQ17pNy+ktHnSINncJrGl6bxHEIIIAAAggggECKCBBAuNNIAgh3emWjUgIIG8pBzmEWnnzwcwe+nHv8zG88Vz9svcDj0d4Oezj7B/poRoXmNl3jKYQw4cPd2T9XYaSbVy86phw0VLpipfTyg9Lz90rVbx5cTNFwacyl0qkXs2uGt1ZxFAIIIIAAAggg4LwAAYQ7LSSAcKdXNiolgLChHOQcHhee7Chhd2s/jWv8jeqV61tVZZF3tSTnuvb1IhvbMvVwyzQtbJne7Taf5thZmYs1M3NJz08+dK7skFJpZ0XftR4yVPr4LdLxH+eJiL61OAIBBBBAAAEEEHBagADCnfYRQLjTKxuVEkDYUA5qjhgWnjQlmHDgM403a31bqa8V3ZT1W12YtfhDY5rSVreO0mttZapty1NBpF4nRso1IWN9sBtbFB0njZnDExG+dpjBEEAAAQQQQACBcAkQQISrH71VQwDhTq9sVEoAYUM5qDkqlkkLZrQvj2C+7L/SWqZNbcdop/prkPZpROQtnZzx7y/9DzSfo3nNs32tps91HHydLYbBzNoQX3hIyhsYw0kcigACCCCAAAIIIOCCAAGEC106UCMBhDu9slEpAYQN5YDmaFx2ux5avEoLm89WhY7scZbDVaU5GYu0sPUcVepw36rpcR2HfkVSv4FSTblvc8U1kAkhvvgIa0PEhcdJCCCAAAIIIIBAeAUIIMLbm66VEUC40ysblRJA2FAOYI499U2a+4s/a/XOAQGM3vuQeWrQdVl/1KzMpz68jkNGjnTGN6UJX5Yysw8sjPnuy9L6v0nvvGC9zvYJjxkrnfFtqXQqa0MkpwPMigACCCCAAAII+C5AAOE7aWADEkAERuvkwAQQDratsblVs+9fp9Xl1darL9F7+lvOtzQwo9PuFZEMafRF0jk/krK7Wdxyxe3S09+zXuuHJiwYIk36qjT2Mp6ISG4nmB0BBBBAAAEEEEhYgAAiYUJrAxBAWKN2YiICCCfa9OEiH1hZoXmPrbdeeZF2a1XOV5Sb0fLvubMLpKtekQYM6bme6FoV1gvubsJjJ0oz/8DaEKFoBkUggAACCCCAAALxCRBAxOeWjLMIIJKhHt45CSDC25tuK2tra9O0W5eqvKrWeuUH7XYxuEy6ZLFkni7o7WNWyfzpMGm//Sc2ui2rZLJ0waM8CWH9DmJCBBBAAAEEEEDAHwECCH8cbYxCAGFD2Z05CCDc6VV7pau2VGnm/LXWqx4V2aq/5HznwJoPhUdJE6+KbavLRddLz99jve4eJ/z4j6Xxl4enHipBAAEEEEAAAQQQ8CxAAOGZKukHEkAkvQWhKoAAIlTt6LuYu5Zu0S1PvNH3gT4ekRVp04unvaaBA/KlIz8mmd0lIjH+q6SpQfpxidTcae0IH2uMeaiMbGn696VTL+FJiJjxOAEBBBBAAAEEEEiuAAFEcv1jmT3Gbw2xDM2xDgoQQDjWtFufXK87nquwWvW0E4bovgvHJj7nitukp29KfBw/RzBhyhceYk0IP00ZCwEEEEAAAQQQCFiAACJgYB+HJ4DwETMFhiKAcKiJZveLy3/5Zz3zfr7VqhdePEZTjz808TmbG6VfjZF2bU18LD9HMCHEFx/hSQg/TRkLAQQQQAABBBAIUIAAIkBcn4cmgPAZ1PHhCCAcaeCe+ibNXfii9a03hxbl69nrTlck1lcuenLd+IT0+y+ET/3cn0jj5oavLipCAAEEEEAAAQQQOEiAAMKdm4IAwp1e2aiUAMKGcoJzmCcfZt+/znr4YMq+acYoXTipNMEr6HS62RHjjtFSzRb/xvRjpKLh0leej31tCz/mZgwEEEAAAQQQQACBmAQIIGLiSurBBBBJ5Q/d5AQQoWvJwQU9sLJC8x5bb73SksH5euqa05STleHv3Gvukp78hr9j+jHa7Mek0ql+jMQYCCCAAAIIIIAAAgEKEEAEiOvz0AQQPoM6PhwBRMgb2NbWpmm3LlV5Va31Su+dPVpnjTzc/3nNWhC/+4xUudL/sRMZcdp3pSnXJjIC5yKAAAIIIIAAAghYECCAsIDs0xQEED5BpsgwBBAhb+SqLVWaOX+t9SoPL8zV6hun+bf2Q9crqN8tPfz/pH+ttn5tPU44bJp0wSPhqYdKEEAAAQQQQAABBLoVIIBw58YggHCnVzYqJYCwoZzAHHct3aJbnngjgRHiO/XskYdq/uwx8Z3s9SzzJMTaO6Ul35dam7yeFdxx2fnSN7ZKWbnBzcHICCCAAAIIIIAAAgkLEEAkTGhtAAIIa9ROTEQAEfI2ff8vL+m+NdusV/nl04fp+o+fYGfeul3SgvOk916zM19vsxz6EeniJ6S8gcmvhQoQQAABBBBAAAEEuhUggHDnxiCAcKdXNiolgLChHOcc1bv3auKPlqhB2XGOEP9pN557guaeNiz+AWI90zwN8eID0rr5UvWbsZ7t7/Elk6ULHpWycvwdl9EQQAABBBBAAAEEfBEggPCF0cogBBBWmJ2ZhAAipK0yW29O/9HftLXWfvhgSB6eM04ThxXb1zHbdG5dLr37stSwT8opkNbdI+15x24tYy+Tzv0J23LaVWc2BBBAAAEEEEDAkwABhCemUBxEABGKNoSmCAKI0LTiw4Xcv7xcNy/akJTqyoYUaMk1pwW3AGWsV5WsbTsLj5ImXCmNuYSnIWLtGccjgAACCCCAAAIBChBABIjr89AEED6DOj4cAUQIG2i23pz4g79rm/2dN9s1bpoxShdOKg2PjHk948HPHXgyIhmfwWXSJYulgiHJmJ05EUAAAQQQQAABBLoIEEC4c0sQQLjTKxuVEkDYUI5xjmRtvWnKnFBWpAUXj1VOVkaMVQd8uNm28w/newshMrL931XDLEr5lZek/kl4LSVgWoZHAAEEEEAAAQRcEyCAcKdjBBDu9MpGpQQQNpRjnCNZW28OLcrX366crMK85Kw70SdTXwtVFg2Xxs6RWpqkxd/qc7iYDxg8TPrSGl7HiBmOExBAAAEEEEAAAX8FCCD89QxyNAKIIHXdG5sAIoQ9u3XxRt3xzOaEKouoVW3y/hSDCR8ev3KK+udlJTSvlZO7LlSZ21868mPS0CkHFo00QcWvx0g7t/pfzsd/LI2/3P9xGREBBBBAAAEEEEDAswABhGeqpB9IAJH0FoSqAAKIULXjQDG3P71Jtz+d2FaUv8q4TT/LvEhbmwb1eYXjSwfrntmnhvfJhz6voJsDNj4h/f4L8ZzZ+zlmYcqvvc7uGP7LMiICCCCAAAIIIOBZgADCM1XSDySASHoLQlUAAUSo2iGZ7Tc/c+sTWr8z/sKOUJVWDf+9mv7f7/XQK7t0z7Jybdtdf9CAZreLWeNLNHNcSfjWfIj/8g+caZ6SuGO0VLMl0ZEOPn/2Y1LpVP/HZUQEEEAAAQQQQAABTwIEEJ6YQnEQAUQo2hCaIgggQtOKA4U8sHyz5i3amFBV3xv0pC667tYP1iowu2qsLq/Wa2/vVm1Dswpys3Ti0QPbF5yMmFcWUvUT1Pad074rTbk2VdW4LgQQQAABBBBAIPQCBBChb9EHBabwtw13mhCiSgkgQtQMExRM+8FfVF6bE3dVQyPbtPiMbcqZ/p24x0iZE81aEL/7jFS50t9LGnisdMUKyeyMwQcBBBBAAAEEEEDAugABhHXyuCckgIibLiVPJIAIUVtXbdymmQ+8FHdF+arT8pyrVXTO16VJV8c9TkqdaLbvvP/j0vvr/b0ss+DlFx9hRwx/VRkNAQQQQAABBBDwJEAA4YkpFAcRQISiDaEpggAiNK2Q7rrrl7pl67C4K7oq40+6JucRiTUKPmzY1CDdepxUvydu225PPPcn0ri5/o7JaAgggAACCCCAAAJ9ChBA9EkUmgMIIELTilAUQgARijYcWDTxJ/Ou1m/qz4m7oqsyH9E1h78ifeV5dmnoqrj6Tul/b4jbttsTBx8nXfkC1v6qMhoCCCCAAAIIINCnAAFEn0ShOYAAIjStCEUhBBChaIOkimW6dP6zerr11LgrujHrYc2dMZXfyncnaNaD+M04qaY8bt9uT/yvP0gjzvV3TEZDAAEEEEAAAQQQ6FWAAMKdG4QAwp1e2aiUAMKGsoc52pbfromLDtE2FXs4uvtDHh58ryZe80fWJehJsHbHga05zboQfn0OKZW+vA5zvzwZBwEEEEAAAQQQ8CBAAOEBKSSHEECEpBEhKYMAIiSNWPWn2zXzheFxV3OEqrTqwiGKnPCJuMdIixP3VUn3T5dqtvh3uawF4Z8lIyGAAAIIIIAAAh4ECCA8IIXkEAKIkDQiJGUQQISkEbffv1C3byqKu5qzs1/V/JtvYD0CL4LmdYwX7peW/VTaX+XljN6PKRrOuhuJKzICAggggAACCCDgWYAAwjNV0g8kgEh6C0JVAAFECNrR2NyqM370hN6pjb+YLx+zVdd/+cvxD5COZ664XXr6e/5cOTuP+OPIKAgggAACCCCAgAcBAggPSCE5hAAiJI0ISRkEECFoxAPLN2veoo0JVXLjOcdp7hkjEhoj7U5+5gcHnoLw43P2zdKkq/0YiTEQQAABBBBAAAEE+hAggHDnFiGAcKdXNiolgLCh3MscbW1tmvbDv6p8X3ZClTw8Z5wmDot/AcuEJnf1ZD+fgJh8rXTWd12VoG4EEEAAAQQQQMApAQIId9pFAOFOr2xUSgBhQ7mXOVZtrtLMe9cmVEVZcb6WXHu6IhH+eMcEWbFMWjAjplN6PHjEJ6T/+r0/YzEKAggggAACCCCAQK8CBBDu3CB8Q3GnVzYqJYCwodzLHHc9+pRuWduYUBU3zRilCyeVJjRGWp7c1ib9aoxU/Wbil194lPS111kENHFJRkAAAQQQQAABBPoUIIDokyg0BxBAhKYVoSiEACLJbbj1voW64834d784ul+TnvnWp5STlZHkK3F0+jV3SU9+w5/iWYjSH0dGQQABBBBAAAEE+hAggHDnFiGAcKdXNiolgLCh3Mscd913j25586i4q/ha2bu6+rI5cZ+f9ieaLTkf/Jy0dXniFCxEmbghIyCAAAIIIIAAAh4ECCA8IIXkEAKIkDQiJGUQQCS5Eav+crdmrjk67ioenvCOJn76srjP50RJ9bulP5yfeAgx9evSmd+CFAEEEEAAAQQQQCBgAQKIgIF9HJ4AwkfMFBiKACLJTWx48zmdfF+N6pUbcyVlkXe1ZM7xipSdFvO5nNBFwDwJ8T+zpY1/j5/m9G9Kp/v0Okf8VXAmAggggAACCCCQ8gIEEO60mADCnV7ZqJQAwoZyL3M8sKJC8x5fH1cVNw38uy684VcsfBiXXjcnJborxmEfleY8K2Xl+FUR4yCAAAIIIIAAAgh0I0AA4c5tQQDhTq9sVEoAYUO5hzna2to07dalKq+qjbmKPDXolU/tUO7EuTGfywk9NiTxXTHOmidN/irECCCAAAIIIIAAAgEKEEAEiOvz0AQQPoM6PhwBRBIbuGpLlWbOXxt3BQ9fPFoTjz887vM5sRuBRHfFyOon3VApZcX+Sg39QAABBBBAAAEEEPAmQADhzSkMRxFAhKEL4amBACKJvbhr6Rbd8sQbcVdw47knaO5pw+I+nxO7ETBrQcw/U9r+Wvw8Yy+TPvHT+M/nTAQQQAABBBBAAIFeBQgg3LlBCCDc6ZWNSgkgbCj3MMetizfqjmc2x13BVWcep2umj4j7fE7sQeC5W6TnfhQ/T36xdP1m1uaIX5AzEUAAAQQQQAABAogUuQcIIFKkkT5dBgGET5DxDHP705t0+9NvxnNq+zk8ARE3Xe8nPvMDaVmCTzDMfkwqnRpQgQyLAAIIIIAAAgiktwBPQLjTfwIId3plo1ICCBvK3czR2Nyqz9z2v1pf3Rp3BQ+f108TJ58Z9/mc2IPAitulp7+XGM/ZN0uTrk5sDM5GAAEEEEAAAQQQ6FaAAMKdG4MAwp1e2aiUAMKGcjdzPLCyQvMei2/7TTNcWeRdLfnkfkUm8yXX9xYmuh2nKWji1dL0m30vjQERQAABBBBAAAEEJAIId+4CAgh3emWjUgIIG8pd5khk+82OoW7K+q0uPPM/pDO/lYQrSPEp29qknw6T9lfHf6GHlEpfXidl5cQ/BmcigAACCCCAAAIIdCtAAOHOjUEA4U6vbFRKAGFDucsciW6/OSqyVX/J+Y5ypn+Px/yD6t+i66Xn70ls9HN/Io2bm9gYnI0AAggggAACCCBwkAABhDs3BQGEO72yUSkBhA3lLnMkuv3m1zL/R1dnPyqx0GFw3WtqkH5cIjXXxT9H0XDpK8+zG0b8gpyJAAIIIIAAAgh0K0AA4c6NQQDhTq9sVEoAYUO5yxwJb7+Z+YiuOfwVvtwG3bsVt0lP35TYLIREiflxNgIIIIAAAggg0I0AAYQ7twUBhDu9slEpAYQN5S5z3PXcZt3y5Ma4Z74x62HNnTGVx/vjFvR4YnOj9Ksx0q6tHk/o5jB2w4jfjjMRQAABBBBAAIEeBAgg3Lk1CCDc6ZWNSgkgbCh3mWPVimc08/H4H+1/+LCHNfHKB1jg0EbvFn9H/5+9M4+vqrr69xMIAWRQJgdsxSQgCNa2CiLzKIiVVmzrC7QKVRHfqmhjVai+Cv5oRRTFohZFRRRBO1hbbXGAoIABRWmrdUJGrVMVHECGDNzfZyc3GCEh9+yzz7nn3HzPP/Lx7rX22s86Se75nr3Xoui39jP1vhwGX2tvL0sREAEREAEREAEREIH9CEiAiM9NIQEiPrkKI1IJEGFQ3meOxPKZDPh7UzYljvA8e3n7zSFbyRpwlWdbGVgQWDETFl9nYZg06XgajFpoby9LERABERABERABERABCRAxvgckQMQ4eQGELgEiAKi1uSxe/GuGLDnMSoBQ+83a6Dr+fOMymDfc3mmztlDwugpR2hOUpQiIgAiIgAiIgAhIgIjxPSABIsbJCyB0CRABQK3N5dwH5zLltUNrG7bf50dnfcDTOVeq/aZncj4MEgm4tQt88Z69k1EPQ8dh9vayFAEREAEREAEREAER+BoBHcGIzw0hASI+uQojUgkQYVCuMkcikWDQtEVs+Dzheeaj+YClDS8na+zjkNvXs70MLAksGAlrF1kaAy1y4aIXVbPDnqAsRUAEREAEREAEREACREzvAQkQMU1cQGFLgAgIbE1ui9Z/wug5L1jPuqD1XHpe/gdt6bcmaGG4eAqsuMXCsIrJsOnqWuKPoKxFQAREQAREQAREYC8B7YCIz80gAcI+V6cB5wMnA62AT4H1wFJgMlC6j+umwETgR0A7YDtgnjxvBp6tJYwBwOVAd8D42Qz8AZgGfGm/hP0sJUA4hJmKK98tOLt8xvizf5LKVBrjioDfQpQmjlYd4OLVEo5c5UR+REAEREAEREAE6jQBCRDxSb8ECO+5ygbmAj9Nmr4LfJgUIb4B5ADNkgJDpffWwAqgI7AbeB1oA5jxZu/9xcCdNYRyCXAbYHL1H+BjoDPQEHgD6A1s9b6Mai0kQDgCmaqbGb9/hllrilMdvt+4Cd+tT8H/nGptL0MLAn4LUVZOOUZHZyzoy0QEREAEREAEREAE9iMgASI+N4UECO+5mpPc+bAaGA/8o4qLg4DBgDkgXlLl//8F+D7wcvK/7ycFhXHAXUAYoRwfAAAgAElEQVQZ0BX45z7hnAi8mBx7IWDmNoJFW+CvgPn8UeCH3pchAcIRM19uZt8/j2lvGn3K7pp07CeMHzPGzlhWdgRMIcrbu8GWt+3sK61OuR56XerPh6xFQAREQAREQAREQASQABGfm0AChLdcmaMQhcAm4HhgWwrm3wXWAHuSOyDW7WPzAHB2DULCY8APADNm36fMDsCbQD3g28ArKcRS2xDtgKiNkOPPi/44k9EvmVTaXQu6rqPnj/QQa0fPh9Wq2fDkVT4cmL1Ll8Pga/35kLUIiIAIiIAIiIAIiIAEiBjdAxIgvCXrCeB7gDkWcXuKpr8GfgUsBk6pxqZX8njGLsC8Cq+s6WBqPXySPGphjlk8X43tM8kdF1OB/0sxngMNkwDhAKIXF4nlMxn49yZsTJhNLd6uvKz3WfK9HWT1lgDhjZyD0aXFcEc3+NRokZZXx9Ng1EJLY5mJgAiIgAiIgAiIgAhUEtAOiPjcCxIgUs9VI+ALoAFwbHLnwQXJegymroM5inFvskBkVa9LgIHAdcD11Uxn/JmdFKamQ1WhoQ+wLFkzwtSUqHqko9KNeX065QDiRuqrqxgpAcIrMZ/jv3j173x/wftsShzh2dPk7PsZe94lasHpmZwjg7cWwcKR9s6aHwm/eE2FKO0JylIEREAEREAEREAEyglIgIjPjSABIvVcmQ4Uq5LDjfBgdkCYgpNVLyNE/Ayo+lrTFKk0xSZNq4IFNUxnDpO3B84D7kuOMf++BzCfHVODnfE5HzBzHJX6UmocKQHCAcRUXRTv2sWY6fNYucPcHt6uHvVeY97hfyLnklV6gPWGzt1oUwvi1s7whSnpYnmpEKUlOJmJgAiIgAiIgAiIwFcEJEDE526QAJF6rs4A/pwcbnYjmLoO5ijGv5IP/+aoxVnJnQpGrKgsTmmOVJjilMOAJ2uYzrTjPAn4JTAjOeYKYHqyVadp9VndZXz+Pdlxw+ySSOUyXTRqulq1bt066+OPDzQklSk0JhUCcx+az5RXW6Qy9Gtjjs76gL/mXEPz06ZAd1MHVVfaCCwYCWtNzVnLq/+voL/PWhKWU8tMBERABERABERABDKFgASI+GRSAkTquTJtNx9MDv8cyAU+rWJuikGaLhffAf4E/Cj5melwYT4blCxgWd2M5qiFOXJh6jiYeg7mMv82RzaWA31rCNMc7TBHPMwcpj1oKpcEiFQoBTwmsWcPg659kA2l3jtg5PI+hR3/QtbZj0L2vptwAg5c7r9OYPEUWHGLPZWDj4JLXlYe7QnKUgREQAREQAREQAR0BCNG94AEiNSTZQSFPySH3wZcVo3pOcC8ZE2HQ5KdL6K2A+JAK9YRjNTvB18ji1YUMvqJndY+FpyaRc/+p1nby9ARgRUzYbEp7+LjGvob6HGRDwcyFQEREAEREAEREIG6TUA7IOKTfwkQqefK7GAwnSzMdSFwVzWm3YAXk///UFPUEfgPcKRFDYjzgTmqAZF6guI0cvb985j2pvfdD5VrnHTsJ4wfs29n1jgRyJBYNy6DecP9LSa7MVz+JjQ2mqUuERABERABERABERABrwQkQHgllr7xEiBSZ29EBCMmmOtcYG41pt8CXkn+/8OBj5LHLgYApmPF/6vGxnTB2J4saGmOYaxIjjHHLp5LdsEwLTlLq7Gt7IJhjmEMTn0pNY7UDggHEFNxMePue5m1wdwidteEvA8puMDUKdWVVgKmEOXt3WCLqRXr4zr8eDh/iY5i+EAoUxEQAREQAREQgbpLQAJEfHIvAcJbrjYB7ZJ1GkyNhn2vykKVuwBTFNKIBr8BJgFPA0OrsemVFB2MTZukGGGGGftPksJET2BlNbbPJIUHUzeiuni8rU5tOL3ysh4/e+5cpr1lNsnYXdoBYcctEKtVs+FJB4Ukh01XUdFAEiSnIiACIiACIiACmU5AAkR8MiwBwluubgSuBDYmW2Puuyvhr4DZj/0UcGrS9QnJ4pSmUGRHYP0+Uz4AnJ3ssHHmPp9V+rs/2d6z6scdgDeTBS5N4UvTjcPvpR0QfgmmaL/swd9wzmvfTnH0/sMWnN6Ynr1NDVJdaSdQWgyzToDPTTdcH1erDnDxarVV9YFQpiIgAiIgAiIgAnWTgASI+ORdAoS3XJkdCmav9cHJGhCmEKXZuWA4mpacpjhlAjBPhs9Wcf04cDrwEvB94IOkzbiknz2AqR9hWntWvcz/My06zXUBcE/y30cAxueJwGPACG/LqHG0BAhHIA/oJpHgvt9cxPXbvmc1W172xyy5/hyy6pnmKroiQeDZafDsDf5DGfM45NbU9Ma/e3kQAREQAREQAREQgUwkIAEiPlmVAOE9V6bWgtmZ0Bgw7TjXAt8AjChgxAezQ+Lmfdwa4eJ5wOxa2A28ljxu8c2kzaXArBpCMSKH6fNncmVesZrCll2AhsBbQO/kUQ3vK9nfQgKEC4q1+EhseI5Bc9ayIdHWarbr8t7mZxdU14TFyp2MXBBwUYzSxHHK9dDL/DrQJQIiIAIiIAIiIAIikCoBCRCpkkr/OAkQdjkwQsKvkvUXDksKEUVJocAUjqzuMjUdJgKmnaepI2Hac5rdDTcBS2sJw3TguBzoDjQBNgN/BMwrV1PA0tUlAcIVyQP4KXrsLkavMpqV3fVAt3fo+8P/tTOWVTAEXBWj7HslDLw6mBjlVQREQAREQAREQAQylIAEiPgkVgJEfHIVRqQSIEKgPPveu5n2tmmqYndN6vAe488zJ3J0RYqAi2KUg66FPkZr1CUCIiACIiACIiACIpAqAQkQqZJK/zgJEOnPQZQikAARQjZm3PsAs95uZT3ThA5bKTjP1C3VFSkCphjlnIHw0av2YZ10AZxmNkXpEgEREAEREAEREAERSJWABIhUSaV/nASI9OcgShFIgAghG7P//AzTXii2nmlS94aMH2FKkeiKHIGdn8HNHaHM1Ka1uNQJwwKaTERABERABERABOo6AQkQ8bkDJEDEJ1dhRCoBIgTKRa9vYvQDpg6p3bXg/O70bN/azlhWwRN4ogBeutd+HnXCsGcnSxEQAREQAREQgTpJQAJEfNIuASI+uQojUgkQQVMuLSbx4JkMWvsDqy4YeU1LWHL1D8jK0o9u0Kmy9r9sBhReb21O/19B/6vs7WUpAiIgAiIgAiIgAnWMgASI+CRcTzHxyVUYkUqACJpyslDh3NKhTCkd43m2yd/ryNg+7T3bySBEAoVTYZmPOg4HHwWXvAzZOSEGralEQAREQAREQAREIL4EJEDEJ3cSIOKTqzAilQARJOXyVo1dYcs6tu/J4fSSG9iUOCLlGXscfTDzzu9JTna9lG00MA0EVsyExdf5m3jYdOg+3p8PWYuACIiACIiACIhAHSEgASI+iZYAEZ9chRGpBIggKW9cBvOG80WiMeNLCli5p0vKs/Wo9xp3ndOd5p36pWyjgWkikMyzr9lb5MGENaCjNr4wylgEREAEREAERKBuEJAAEZ88S4CIT67CiFQCRJCUV8yk+JnrGVMy0ZP4cHTWBzzRYBJNh14DvS4NMkL5dkGgfKdLN9jytj9vP30U2g/y50PWIiACIiACIiACIlAHCEiAiE+SJUDEJ1dhRCoBIkjKhVOZW/iKXe2H7PsZO/A7MPDqICOUb1cEkrU+fLnreBqMWujLhYxFQAREQAREQAREoC4QkAARnyxLgIhPrsKIVAJEgJQTy2cy6O9N7LpfZL3Pku/tIKu3dkAEmCJ3rkuLYdYJ8Pm79j4bt4QrN+gYhj1BWYqACIiACIiACNQRAhIg4pNoCRDxyVUYkUqACJBy0YpCRj+x03qGBac3pmfvgdb2MgyZwLPT4Nkb/E065nHI7evPh6xFQAREQAREQAREIMMJSICIT4IlQMQnV2FEKgEiQMqzn13HtCffsp5h0rBOjO+Xb20vw5AJuChGecr1qvsRcto0nQiIgAiIgAiIQPwISICIT84kQMQnV2FEKgEiQMoznn6LWYXrrGeYMLA9BUM6WtvLMGQCphjl9DzYudV+4r5Xqu6HPT1ZioAIiIAIiIAI1BECEiDik2gJEPHJVRiRSoAIkPLs59YzbdGb1jNoB4Q1uvQZLhgJaxfZz9//V9D/Knt7WYqACIiACIiACIhAHSAgASI+SZYAEZ9chRGpBIgAKRet/4TRc16wnmHBuO70zG9tbS/DNBBYVwjzR9hPfPjxcP4SyM6x9yFLERABERABERABEchwAhIg4pNgCRDxyVUYkUqACJByIpFg0Ixn2fDJDs+z5LVpwpKCfmRl6UfWM7x0GphjGLNOhK3r7aMYNh26j7e3l6UIiIAIiIAIiIAIZDgBCRDxSbCeZuKTqzAilQARJOVdnzP3zmlM+W9vz7NMHt6Zsb1yPdvJIAIEVs2GJ30co2jVAS5erXacEUilQhABERABERABEYgmAQkQ0cxLdVFJgIhPrsKIVAJEUJRLi2H+mRRvLGJMyURW7umS8kw98lox79yTyMmul7KNBkaIgMn9nIHw0av2Qakdpz07WYqACIiACIiACGQ8AQkQ8UmxBIj45CqMSCVABEW5ylvwLxKNGV9SkJII0aP1Lu66+Ps0b9QgqMjkNwwCz06DZ2+wn0ntOO3ZyVIEREAEREAERCDjCUiAiE+KJUDEJ1dhRCoBIgjKpg7A7V1hS0ULzuJEfR4oHcLvyr7PFg6udsZWfM7/Zv+Fcw7dRM4lq7T9Poi8hOmzcCosu8l+RrXjtGcnSxEQAREQAREQgYwnIAEiPimWABGfXIURqQSIIChvXAbzhpd79rT7od5r3NXgFpqP/T3k9g0iMvkMi8CKmbD4OvvZtAPCnp0sRUAEREAEREAEMp6ABIj4pFgCRHxyFUakEiCCoJx8+DQ7HzzXf6j3GvOGNSSnz6VBRCafYRGoIkJZTTnqEeh4qpWpjERABERABERABEQg0wlIgIhPhiVAxCdXYUQqASIIysnt93NLhzKldIznGSZ3+g9jx6oNo2dwUTIoP4bTDba8bRdVy3y4YCk0qv7Ijp1TWYmACIiACIiACIhAZhCQABGfPEqAiE+uwohUAkQQlFfMJPHMdQwqvpkNibaeZ8hrUsySa84gK0s/rp7hRclg5e/gqYn2ER3dB376KGTn2PuQpQiIgAiIgAiIgAhkIAEJEPFJqp5o4pOrMCKVABEE5Y3LKLrvKkaXXGPtfcG47vTMb21tL8MIEFhXCPNH+Atk2HTort0w/iDKWgREQAREQAREINMISICIT0YlQMQnV2FEKgEiCMqJBLN/cynTtg219j5pWCfG98u3tpdhBAj4LURpltCqA1y8Wl1RIpBOhSACIiACIiACIhAdAhIgopOL2iKRAFEbobr1uQSIIPJdWsyMab9i1vYB1t4nDGxPwZCO1vYyjAABv604K5cw5nF1RYlAOhWCCIiACIiACIhAdAhIgIhOLmqLRAJEbYTq1ucSIILI96rZzH5iOdNKR1t71w4Ia3TRMXSxA8KsRi05o5NTRSICIiACIiACIhAJAhIgIpGGlIKQAJESpjozSAKE61SXdz/oyuL/NuX8kiutvasGhDW66Bj6bcVZuZLel8Pga6OzLkUiAiIgAiIgAiIgAmkmIAEizQnwML0ECA+w6sBQCRCuk7xxGcX3n8E5xRNZlehi5T2vTROWFPRTFwwrehEy8tuKs3Ipx5wKox+J0MIUigiIgAiIgAiIgAikl4AEiPTy9zK7BAgvtDJ/rAQI1zleMZO5TxYxpXSMtefJwzsztleutb0MI0Rg1Wx48ip/AdXPgV++DY0P8edH1iIgAiIgAiIgAiKQIQQkQMQnkRIg4pOrMCKVAOGYcmLJVAYtPowNibZWnnu02Ma8y88iJ7uelb2MIkagtBgeHAGbV/gL7PDj4fwlkJ3jz4+sRUAEREAEREAERCADCEiAiE8SJUDEJ1dhRCoBwjHlosfuYvSqb1h7vafb+wz+4ThrexlGkMCuz+G278DOrf6CGzYduo/350PWIiACIiACIiACIpABBCRAxCeJEiDik6swIpUA4Zjy7D8/w7QXiq29TurekPEjBlvbyzCiBJ6+Fopu8xdcizyYsAay9GvcH0hZi4AIiIAIiIAIxJ2ABIj4ZFDfXOOTqzAilQDhmPKMp95i1tJ11l4nDGxPwZCO1vYyjCgBVy05Rz0CHU+N6CIVlgiIgAiIgAiIgAiEQ0ACRDicXcwiAcIFxczxIQHCcS5nP7eeaYvetPY6aVgnxvfLt7aXYUQJuGrJeVArmPAPaHRwRBeqsERABERABERABEQgeAISIIJn7GoGCRCuSGaGHwkQjvNY9MZmRs/7t7XXBeO60zO/tbW9DCNKwFVLTrO8dr3g7MdUkDKiqVZYIiACESJgfvduWg7vrYHi7ZDTFI48AY7uo+NsEUqTQhEBGwISIGyopcdGAkR6uEd1VgkQLjNTWkziwTMZtPYHVl0w8to0YUlBP7J0xt9lVqLjy0VLzsrVDJ4CvS+LztoUiQiIgAhEiYDpQPTSfbD6Htjy9v6RteoA3c6HrudKzI1S3hSLCHggIAHCA6w0D5UAkeYERGx6CRAuE5J8wJxbOpQppWM8e548vDNje+V6tpNBTAiYL8RzBsJHr/oPOCsbJm6Chs38+5IHERABEcgkAqbz0MM/qdj5UNvVrjeMWqBjbbVx0uciEEECEiAimJQaQpIAEZ9chRGpBAhXlMu32HeFLesoTtRnTMlEVu7pkrL3HnmtmHfuSeRk10vZRgNjSGDnZzA9HxKl/oNv2LyiK0aTNv59yYMIiIAIZAIBI/TOPzM18aFyvS3zYPxyaNg0EwhoDSJQZwhIgIhPqiVAxCdXYUQqAcIV5X2KDH6RaMz4koKURIge9V7jrnO607xTP1fRyE+UCTx0Frz9lJsITTHKi9dAU9UNcQNUXkRABGJNwPaoW8t8uGCpdkLEOvkKvq4RkAARn4xLgIhPrsKIVAKEK8rVtFncvac+vyn9CY/v6cFW9u9akJf1PufUf5rR9ZeQM+Q66HWpq2jkJ8oE1hXC/BHuIjRfnH++SueY3RGVJxEQgTgSqLIT0Sp8U5jyp4/qd6kVPBmJQPgEJECEz9x2RgkQtuQy004ChKu8Fk6FZTeVezNHMB4qG8yDZadUW4yyJZ9zer1VXJ09n4b1yioi6HslDLzaVTTyE2UC5kvyrBNh63p3UZ56I5x8oTt/8iQCIiACcSPgot3xsOnQfXzcVq54RaBOEpAAEZ+0S4CIT67CiFQChCvKyR0Qno9eNLiF5lk74ZTrtQPCVS7i4Md2m3BNa2vWFgpeV1u5OOReMYqACARDoJqdiJ4nMt0xLl6t36WewclABMInIAEifOa2M0qAsCWXmXYSIFzldeMyiu8/w3vxyXqvMa/BNHLGPga5fV1FIz9RJ2AKpT04AjavcBfpqIeh4zB3/uRJBERABOJE4Olroeg2/xGPeVx/j/1TlAcRCJyABIjAETubQAKEM5QZ4UgChKs0JhLMnXYxUz4/zbPHyQf/nbETb9cbF8/kYm5gWsXd0R22feBmIS1y4aIXdX7ZDU15EQERiBMB8/v0tu/Azq3+o9aORP8M5UEEQiAgASIEyI6mkADhCGSGuJEA4SiRiUSCQb/+Cxu2N/DsMa9pCUuu/gFZWfrx9Awv7ga7tsH0XNhT4mYlOr/shqO8iIAIxIeA6x1lvS+HwdfGZ/2KVATqKAEJEPFJvJ5w4pOrMCKVAOGIctH6Txg95wVrbwvGdadnvlopWgOMs+GKW2HxZDcraJEHE9ZoN40bmvIiAiIQBwKua+p0PA1GLYzDyhWjCNRpAhIg4pN+CRDxyVUYkUqAcER59nPrmbboTWtvk4Z1Yny/fGt7GcaYgHl798AZ8M7zbhZh2si1H+TGl7yIgAiIQJQJ+G29Wd3aGjaHK9ZBdsMor1yxiUCdJyABIj63gASI+OQqjEglQDiiPOPpt5hVuM7a24SB7SkY0tHaXoYxJ2DOL9/VDz7d6H8henvnn6E8iIAIxIOAi9ab1a20TWc470lodHA8OChKEaiDBCRAxCfpEiDik6swIpUA4Yjy7KVrmfbU29betAPCGl3mGO7eDrcdDzu2+FtT45Zw5QYdw/BHUdYiIAJxIOCi9WZN6zwkF/53BTRsGgcSilEE6hwBCRDxSbkEiPjkKoxIJUA4olz0+FxGP3+otTfVgLBGl1mGX34Mtx4Hpbv8rUtt5Pzxk7UIiEA0CZgjF5uWw39ehv++DmYHxPYPg4v1oFZw0QvQpE1wc8izCIiAFQEJEFbY0mIkASIt2CM7qQQIF6lJJEjM6sqgDy5kQ6KtZ495bZqwpKCfumB4JpehBq8/Dr//qb/F9f8V9L/Knw9Zi4AIiEBUCJhaOS/dBy/Oga32xx2tlmOOYVy8BpqqULQVPxmJQEAEJEAEBDYAtxIgAoAaY5cSIFwkL3kGdW7pUKaUjvHscXKvhowdPtiznQwylIB5w2dac+781H6BBx8Fl7wM2Tn2PmQpAiIgAkETqNzR8N4aKN4OOU3hyBPg6D5fHSPb+RnMOx0+fDXoaGr23zIffr5Kv1PTlwHNLAL7EZAAEZ+bQgJEfHIVRqQSIFxQTp5BLU7U55ziSaxKdE7Za496rzFvWENy+lyaso0G1gECC0bC2kX+FjpsOnQf78+HrEVABEQgCAKVOxpW3wNbqqmf1KoDnDAGPn4L/vUQJPYEEYU3n6feCCdf6M1Go0VABAIjIAEiMLTOHUuAcI401g4lQLhIX+FUWHYTXyQac17xL1mdODYlr92y3uDenJtp3u8SGHh1SjYaVEcIrCuE+SP8LbZxK7j8DbWS80dR1iIgAq4JRGFHg82amh8Jv3hNBX5t2MlGBAIgIAEiAKgBuZQAERDYmLqVAOEicc9Oo3jpdMaUTGTlni4pe+ye9ToP5txAzpDroJd2QKQMri4MNNuSZ50IW9f7W+1hx8HP/q5Wcv4oyloERMAFAbPrYdWdYET7PSUuPIbvQwV+w2euGUWgBgISIOJza0iAiE+uwohUAoRfyuYL1ZyBzH2vrV39h+z7GXveJZDb128kss80Aqtmw5MOCkke1RPO+YvOLmfa/aH1iECcCOz6HBb8D7yzMk5R7x+rCvzGO3+KPqMISICITzolQMQnV2FEKgHCL+VVs0ksuopBxTfbdcDI/pgl159DVr16fiORfaYRMOLWrBPg83f9r+yYYXDWAxIh/JOUBxEQAa8EzO+yB8+Azc97tYzeeBX4jV5OFFGdJSABIj6plwARn1yFEakECD+UzTb527tS9N8cRpdcY+1pwbju9MxXey9rgJls+Ow0ePYGNyts1xtGLdBxDDc05UUERCBVAkW3w9MZVOdIBX5TzbzGiUCgBCRABIrXqXMJEE5xxt6ZBAg/KUy235xdejrTSkdbe5o0rBPj++Vb28swgwkk7zFnKzSt7X76qHZCOAMqRyIgAgckYApO3twRynZlDqiW7eGSl1SMMnMyqpXElIAEiPgkTgJEfHIVRqQSIPxQTrbfnFHyY2aV2XcsmDCwPQVDOvqJRLaZSsDsspmeBzu3uluh3t65YylPIiACNRNI1kjio1czj9Koh6HjsMxbl1YkAjEiIAEiPsmSABGfXIURqQQIP5ST7Te1A8IPRNnWSmDBSFi7qNZhKQ/Q27uUUWmgCIiADwKuCun6CCEw0xa5cNGL2k0WGGA5FoHaCUiAqJ1RVEZIgIhKJqIRhwQIP3lI7oAoKuusGhB+OMr2wATWFcJ8+x021TrX2zvddSIgAkESSNZIYsu6IGex8/2Nk+D9f/hvBardZHb8ZSUCjghIgHAEMgQ3EiBCgByjKSRA+ElW8ny++Z5l3QWjTROWFPQjK0s/mn5SkdG25gabdSJsXe9umXp7546lPImACOxPwHX9GleMK4vxmsKYy6b789qqA1y8WrUg/FGUtQhYE5AAYY0udEM95YSOPNITSoDwk56S3XBjOyjdyT0lw5hadrZnb5OHd2Zsr1zPdjKoYwSC2Mqst3d17CbSckUgRALJHYIhznjgqbIbQ/+JcPLPK45NuBJIxjwOuX0js0wFIgJ1iYAEiPhkWwJEfHIVRqQSIPxQTj4UfpFozLjiy3kh0dmTtx55rZh37knkZNfzZKfBdZCAKeY2/0zYtNzd4lvkwYQ1envnjqg8iYAIVBJI1khKO5AGTeDbI2HoDdCg4VfhlB8R6QZb3vYX4qBroc/l/nzIWgREwIqABAgrbGkxkgCRFuyRnVQChG1qkudbiz/ZyJiSiazc08WTp5OPPoS7x55E80YNPNlpcB0msOtzMAUp3ylyB8G05Gw/yJ0/eRIBERABQ2DZDCi8PjwWZofDwUeCERwaHwIt86DLiIrdCTUdcXSxsyxvAJzzWHjr1EwiIAJ7CUiAiM/NIAEiPrkKI1IJELaUk9s355YOZUrpGM9erumRw/k/OMWznQzqOAGzE+L357jritHxNBi1sI5D1fJFQAScEjC/p+adDu++4NRttc6M4DDwaug2zntHChPnHd3g0032cdZrAFesqxA9dImACIRKQAJEqLh9TSYBwhe+jDOWAGGb0hUzSTxznX3xySbFLLnmDBWftOVfl+3Ml+YHR8DmFf4pNG4JV27QMQz/JOVBBETAEDA7tR46C95dFTyPJofBZa9+/WiF11nfWgQLR3q1+vr4w4+H85d4F0D8zSprEajzBCRAxOcWkAARn1yFEakECFvKhVMpWvo3td+05Sc7fwTMl/yFo2Dz8/78GGsVUfPPUB5EQASgXBw9w83vpVR49rwUhvg85mGOU96UDzu2pDJjzWNU1NcfP1mLgAUBCRAW0NJkIgEiTeAjOq0ECNvErJjJ7CdXM610tK0HJg3rxPh++db2MqzjBMyX/b9fAWvu9wdCRdT88ZO1CIhABQEXNRW8sDzleuh1qReL6seaHWXrC/35UUtOf/xkLRbp0LIAACAASURBVAIWBCRAWEBLk4kEiDSBj+i0EiBsE/PWImY88CdmlY2w9cCEge0pGNLR2l6GIoB5ezc9F3Z+ag9DRdTs2clSBESggoD5XfTbE+DTDeERcbV7y1XBTFfxhEdQM4lArAlIgIhP+iRAxCdXYUQqAcKGcvIM/uz1h2gHhA0/2bglYDpjrF1k71NF1OzZyVIERKCCgItaCl5YutxxkCwq7WX6asf2uxIGXO3bjRyIgAikRkACRGqcojBKAkQUshCdGCRA2OQiuc20qKyzakDY8JONWwLrCmG+/U6c8mBURM1tTuRNBOoSASPK394NPvPRTcIrL5c1F8rbaneDLW97jeLr4xu1gF+uVTFKfxRlLQIpE5AAkTKqtA+UAJH2FEQqAAkQXtNR/kWlK2xZV77jdFDxzWxItPXqhbw2TVhS0E9dMDyTk8F+BMqPYeTBzq3+4Lj8Qu8vElmLgAjEicCKW2Hx5PAibtcbzv6z2wd9V/UrTr0RTr4wPBaaSQTqMAEJEPFJvgSI+OQqjEglQHilvM9WzbmlQ5lSOsarFyYP78zYXrme7WQgAtUScFFErWV7uOQlteTULSYCIpA6gZLdcGM7KN2Zuo2fkUf1hNEPQ6OD/XjZ39bs4pgzED561Z/fZm2h4HX9HvVHUdYikBIBCRApYYrEIAkQkUhDZIKQAOE1FStmwuLr9loVJ+pzTvEkViU6p+ypR14r5p17EjnZ9VK20UAROCABV0XURj0MHYcJtgiIgAikRuCJAnjp3tTG1jYqKxsSpdWPatIGev8Cuo1zu/Oh6mw7P6toybmnhhhqi7/yc/0eTZWUxomALwISIHzhC9VYAkSouCM/mQQIrykqnArLbtpr9UWiMecV/5LViWNT8tTtkO3ce9mZNG/UIKXxGiQCKRFwVUStRS5c9GJwX/BTWowGiYAIxIKAqwd2s9jsxlDwBnz4Crz2KGzdWIGgZR50GQG5fcPZVfDAD2DDs/7w6/eoP36yFoEUCUiASBFUBIZJgIhAEiIUggQIr8mosgPC7H4YUzKRlXu6pOyle8sdPFjwQ+1+SJmYBqZEwFURNTOZakGkhFyDRKBOE3B1ZKES4tDfQI+L0o/U1W6yqKwn/UQVgQgERkACRGBonTuWAOEcaawdSoDwmr4qb5pV/8ErPI0PlICrImou29sFumA5FwERSBsBV79vzAKCKCppC8bVbjKzo+PyN6HxIbaRyE4ERKAWAhIg4nOLSICIT67CiFQChFfKyTfNiU/eVgcMr+w0PlgCLt9Ijnm8YstzWJf5udq0HN5bA8XbIacpHHlCxYPJ5hXwn5fh4zdgx1Y4qCUc2rni86P7hLMtOywOmkcE4kCgSjco3+Ee2gXOXeS+qKRtYGZtt3aBL96z9fCVndob+2coDyJwAAISIOJze0iAiE+uwohUAoQN5RW3UvTU7xldco2NdbnNgnHd6Znf2tpehiJQLQFzJntGJ/8V6U+5HnpdGjxkI5q8dB+svge2vO19vlbtK4rSdT1XdSu805OFCNgRcLVLoMFBcNUmyG5oF0dQVit/B09NdONdR9rccJQXEaiGgASI+NwWEiDik6swIpUA4ZWyeWB68Axmr2/BtNLRXq33jp80rBPj++Vb28tQBGokUHQ7PH21P0C9L4fB1/rzUZv1rs/h4Z9U7Hzwe5mdECMfis5bVL/rkb0IRJmAqzoJJ10Ap31V1DkySzZ/5+/sDls3+A+pRR5MWKOdWv5JyoMI7EdAAkR8bgoJEPHJVRiRSoDwSjl57nVGyY+ZVTbCq/Xe8RMGtqdgSEdrexmKQI0EzJfnO7rBp5vsIXU8DUYttLevzbJcyBtRcbzC1WVEiJ8+qp0QrnjKjwhUR8D87P6uB2xZ54+PqZEwcXP0dj9UrurLj+HW46B0l791Gmvze6n9IP9+5EEEROBrBCRAxOeGkAARn1yFEakECC+Uq5x7nV16unZAeGGnseESeGsRLBxpP2fzI+EXrwX31m75rbBksn18NVlqu7N7pvJY9wjUVJPF1DRY8D/w7ir/TAZPgd6X+fcTpIfXH4ff/9T/DMecCqMf8e9HHkRABCRAxPQekAAR08QFFLYECC9gq5x7LSrrrBoQXthpbLgEygupdYYv3ref95y/Ql4/e/vqLM3b05V3BCM+mPmisN25poc3Fcx0ey/Jm3sCtdZkqQfs8T/vYcfBuKXR363kqthmVj24/C1oeqh/dvIgAiKwl4B2QMTnZpAAEZ9chRGpBAgvlFfMhMXXlVuY7yWDim9mQ6KtFw/lY/PaNGFJQT+ysvTj6BmeDFInsGAkrF2U+vh9R+Y0gwFXQ7fz3DwomJoP5u3pOyvtY0rFMl3bnUt3V9Te+PefYccn+0dqdpX0uMQdz1RYaIwIpErAZU2WA81ZrwFcsS4+7SldtRvNaQITXoGmKj6d6i2pcSJQGwEJELURis7neuKJTi6iEIkECC9ZKJwKy74qmHVPyTCmlp3txUP52MnDOzO2V65nOxmIgCcCi6fAils8mVQ7uGUenPc0NGlj58uodesL4YlfwGeb7Xx4sQp7u7MRHv5+BfxzAewpqT3SZkfA+GV6G1o7KY0Ii8Du7XBXX9i6PvgZ8wbAOY8FP4+rGVy2N26ZDz9f5UbQdbU++RGBGBOQABGf5EmAiE+uwohUAoQXylV2QHyRaMy44st5IdHZiwd65LVi3rknkZNttrLqEoEACVS5X33PYtrlmbd3zTyIEJXbuV+cA1t9FqzzsoB62XDF+uDfsFYeJ3l2GpR5LFRntmSb3SU9J+hhxEtuNdY9AbPz4e7+bjo+pBLdoGuhz+WpjIzOGNPeeHo+JEr9xzTk19DzYv9+5EEERAAJEPG5CSRAxCdXYUQqAcIL5WQNiOJEfcaUTGTlni5erDn5iPrcPX4QzRs18GSnwSJgRaBKzRIr+32NzEPzoMlw8v/W/tAc1nbumhZmiuWdv6T2OG3BmPUtHAWbn7f1UGHXrjeMWqD2of4oyjoVAmYnkvmd8O9H4dNke8nm36jYnbT9w1Q8uBkz5nHI7evGV5heHjoL3n7K/4z1c+CXbwcvkPqPVB5EIPIEJEBEPkV7A5QA4T9XpwF/S7ox+4mPrsFlU2Ai8CPzNRPYDrwA3Aw8W0sYAwDziqA7YPyYef4ATAO+9L+EvR4kQHiBWV6QqhtzP8pjSukYL5blY6/53rGc3yfPs50MRMCKQPJ+ZcvbVuY1Gh3VE0Y/XPNDcxAtNm1WEFRHDNfrU/tQm+zKJlUC5n598W4wO6J2fJyqVTDjWnWAi1cH110nmKgrvK4rhPn2rbe/FlrQAmmQHORbBCJEQAJEhJJRSygSIPzlyogBrwFHJd3UJECYKkOmwX1HYDfwOmD2Ln/D1C8EzP67O2sI5RLgNsDk6j+A+cZg9vk3BN4AegNb/S1DAoQtv8TK2Qz6a30Vn7QFKLtwCbgqoLZv1ObN/dl/rn6HQVAtNr2SC6ojxrKbofD/eY3mwOODEkvcRilvcSMQVuHXVLnE+T43gu6sE93VyYgzi1TzrXEiEDABCRABA3boXgKEP5i/BYxA8BfgB8mdCdXtgDCffx94Oflf0wvPsB8H3AWUAV2Bf+4TzonAi8mxFwJzkoKFabXwV8B8/ijwQ3/LkABhy69o7YeMvs+k1e5aMK47PfNVBduOnqw8EzBvP2edAJ+/69m0VoMju8Gg/6vYTm06ugTdYrPWgKoZ4Lojxvb/woyOkHDQirBquI1bweVvQLbRmXWJgAMC5Tt1zvB/TMhBKOUuMuGtv0tBN867QVzdE/IjAj4JSIDwCTBEcwkQ9rBPBsyB38cBU8J5bg0CxHeBNclm2WYHxL7V1x4ATOuE6oQE49cIG2bMvnv8OwBvAqZ64beBV+yXIgHClt3s59YzbZFJg901aVgnxvfLtzOWlQjYEDBFEp+9wcYyNRtToPIb3SvOlYfR5SK1qCpGueyIYR7objsetn3gJYLUxx52HPzs76oHkToxjayJgLlX/3gevGneW0Tgym4Ml78Z/7oHLjtimLTEtR5GBG4phSAChoAEiPjcBxIg7HJlqgYaUcHsdjgWGHwAAeLXwK+AxcAp1UzXK3k8w5RNN6/CK2s6mOMdpnm8eQVmjllUV93smeTcU4H/s1vK16xUA8IjxBlPv8WsQvuK/hMGtqdgiNGldIlASARcF6MMKWwn07jsiLHyd/CUKesT4NWuF5z9WHDFMwMMXa4jQqC8QOpo2GxOgUbkGvob6HFRRILxGYbpiHFTB9hT7NMREMeOIP5XLQ8i4IyABAhnKAN3JAHCDvG1wBTgF8BMYOwBBIglwEDgOuD6aqYzYsa2aoSGPsCyZM2IZkB1DeUr46hJ3PC6OgkQHonNXrqWaU/ZF/XTDgiPwDXcPwFzdvnWLvDFe/59xdGDi63fhuEtnWGbOU0X8DV4CvS+LOBJ5D4jCZg39PPPhE3Lo7O8A9WLiU6U3iJ5fhY8c403m+pG5w+Cs81mWF0iIAI2BCRA2FBLj40ECO/czY6HfySLT56UrN9wIAHCHLY2xSZ/AiyoYTrzBNseOA+4LznG/PsewHx2TA12xud8wMxRWQjT+4q+spAA4YXers8puvcKRr9rTsnYXaoBYcdNVj4JhPH23meIgZr7fQP71iJYODLQEPc6r9cArtoIDY0OrUsEPBAouh2evtqDQcBDj+oBox/JvGNFRui5sztsTbYztcVoar9cuT6eXUFs1yw7EXBIQAKEQ5gBu5IA4Q2w4WVeJfRItsR8KWl+IAHCHKk4CBgGPFnDdKYdpxEzfgnMSI65ApiebNVp6k1Udxmff0+29Ez12+mB+m61at26ddbHH6e5NZe3nKRndPLNUmLjcgYV36wuGOnJgma1JeDqC7Pt/NZ29ZOar7WDCkPzUF/wOjQ91Lsjw+6ObvDpJu+2thbN2sJFqzLvwc2Wh+xqJ2COBszoBKU7ax8bxohOp8OP5mbucaIvP4aZ34YSn53RRz0MHc1XO10iIAJeCUiA8EosfeMlQHhj/3PgDsB0v7i0iumBBAjT4cIUihwEFNYwnTlqYY5cmDoOpp6Ducy/zZENI3j0rcHOHO0wRzzMHNkpLkUCRIqgDjisSvXruaVDmVK6b43Q2ieZPLwzY3vl1j5QI0QgCALmC7NpI2fOiMfh+ubJ8JPfw5/GwdtP+Y84pwlMeAWaeuxCk663ykf3AdPFIzvH/9rlIbMJlBdHHAAf/Tsa68zEYxfVkd32MdxyjL+uOC1y4aIX9XMejTtXUcSMgASI+CRMAkTquToSeD1Zr8EcwzB1GyqvOO2AONCKdQQjlfvBnP++vStsqSg+uWVPUwYU38IXmLqhqV098lox79yTyMk22pQuEUgTge2fwH1D3PWyD2oZVd+eriuE+SPczNQyH36+KvUv++l+qzxsOnQf72bt8pK5BFbcCosnR2N9RnwYtaDu7N554Aew4Vl/7PVz7o+frOssAQkQ8Um9BIjUc2UqA5lvvT9MtsysankgAeI/gBEvvNaAOB+YoxoQqScotJFVuggUJ+ozpmQiK/d0SXn65jmw9MrBtGpqGpzoEoE0EzBvS1+6D8xDy/YP0xxMNdMf1QvOqdIJwgiAZufG1vVuYj31Rjj5wtp9ReGtcos8mLBGZ8Rrz1bdHVGyG25sl/6jF6bVZv+JcPLPUxf4MiFry2ZAYXX1xj0sTj/nHmBpqAh8RUACRHzuBgkQqefKHPhtB3xUjUljoDmwB6g84nAmUJQ8djEAMB0r/l81tqYLxnbA7Ks1xzAqe2WZYxfPJbtgmFfrpdXYVnbBMMcwTCtQv5d2QKRCcMVMWGyamoCOX6QCTGNiQcA82K99Cv58Iez6NBohH9UTRj+8/9vTKkegfAfa7AgoeKP2h/qovFUe9Qh0PNX3suUgQwn87QpYfXf6FndQKzjuh3DKVGhQB0V2V22OzXGr9ubkri4REIFUCUiASJVU+sdJgEg9B5UCRKoWRnQw+/B+A0wCngaGVmPcKyk67ALaJMUIM8wUlfwkKUz0BFZWY/tMUngwdSNMzQi/lwSIVAgWToVlN2Ge11SAMhVgGhMrAqYmxENnwbur0hd2k9bQuwC6jav+7Wn5boSB8NGrbmKs7aE+Km+VzWrNA96Ef9SdLe1uMlw3vJg/StPzYOfWYNdbvyH0vBQ+3ww7P4XGLeDQLnDkd8HUKsmqw18ty49odoMt9u25y5N3zKkVHUN0iYAIpExAAkTKqNI+sA7/lXDK/kBHME4AXk4WiuwI7Ltv+AHgbODPgNk1UfX6KzAcuB/42T6fdQDeTBa4/A7wLwcrkgCRCsTkDoiiss6MLrHv/a0WnKnA1pi0EDAP+H8YC2/9LdzpGzaHEXdVVIGv7SHGZT2G2h7qnyiAl+4Nl8WBZlNByujkIkqRhNEeNqs+XP6mXQeZKLEKMhYXO7TqZcMV66HxIUFGKt8ikFEEJEDEJ50SINzk6kAChJnhceB0wLTt/D7wAWDYjwPuSh7d6Aas2Scc8/9Mi05zXQDck/z3EUmfJwKPJWtTuFiJBIhUKCa3WM4uPZ1ppaNTsah2zKRhnRjfL9/aXoYiECiBsFt1mnPPFy6HhqkXc8VlR4qaHupdVLYPIlEqVBcE1fj6DKs97JBfQ8+L48spjMhd5eKw42Dc0rpVQyOM/GiOjCUgASI+qZUA4SZXtQkQ5mjF84DZtbAbeC153OKbQCLZ0nNWDaFcBtySFCzeTdaYMBUPzeHKt4DeyaMaLlYiASIVisnt2DN2ns6sMvtq/BMGtqdgiNkUo0sEIkogrFad3+wBP3nE+7EC10cx9n2oN+uf+W0o+dJ/glrkQ5sOsPZJ/76Mh1Yd4OLVte8UcTObvESdgIu37rWt0WvXmNr8ZfLnrnajDJ4Cvc3XQF0iIAK1EZAAURuh6HwuAcJNLmoTIMwspqbDROBHyWKW5hut2d1wE7C0ljBMJaLLge5AE2Az8Efghio1I1ysRAJEKhSTX/S0AyIVWBoTewJBtuqs1wAGXQvdL7R/y2eOYtzUAfYU+0fdsj1c8lLFQ/3u7XDb8bBji3+/xoMRN078GTxwBrxj9GgHlwrVOYAYQxemzsCm5fDeGti9DbZ/DK8/WvHvoK5GB8PFa6Bp66BmyCy/5fU4citqZPi5zO/IqzZCQ/MVUpcIiMCBCEiAiM/9IQEiPrkKI1IJELVRLi8w1RW2rEM1IGqDpc8zhkBlq87nb4Nt77tZVpvOcO4iN2ecn58Fz9jXY/nagkY9DO16wl394NONbtZ6+PFw/pIKkcUU+bztO24KBbY4GsYv875zxM2q5CVMAuZvz/pCePFu2Px8sGLDvutqmQfnPQ1NzGZOXSkTWDAS1i5KeXiNA5u1hYtW6efcP0l5yHACEiDik2AJEPHJVRiRSoCojXKVFlvqglEbLH2ecQQq37xuLoLV98KX//W+xINaQ58DdLjw7hGMQDKjo5uH+uZHwSFHwjvVNR6yCM68wbxi3deFFtPudMFZFs6qMVFBSjcco+hlr+gwBzavhN2fhRtl8yOh5wToeq79DqVwI47WbOsKYb79Mc2vLaZdLzj7MeUhWhlWNBEjIAEiYgk5QDgSIOKTqzAilQBRG+VkB4zKYXNLhzKldExtVvt9Pnl4Z8b2yvVsJwMRiAwB89D/8lx4cU7tLeeyG8MRx0Pfq6D9wGDqFrzxV3jENBSK2NX1PDjdlPGpcpkHy1knwtZ9myJZxq6ClJbgImpWuhuevhpe/ZMbUS2VZX53DLTOrzh6ZArBtlVLzVSwHXCM659z1YPwnRI5yGwCEiDik18JEPHJVRiRSoCojXLhVFhmynZUXNv35HB6yQ1sSpjGJKldPfJaMe/ck8jJrpeagUaJQJQJVO6KeP8fsGsb7Pi4omZuk9YV55bDepAp/7J/AmzdEB1aRniZuBmyTc3gfS6XRQNVkDI6ObeJpPJn6N0XYcNzFbtv9pTYeLKzOeToioKm5oiQLrcEXP6cH+j3iduo5U0EYklAAkR80iYBIj65CiNSCRC1Ua6yA+KLRGPGlxSwco9pSpLa1aPVDu665AyaN2qQmoFGiYAIpE7A5Zf91GeteeSB3liaHSQPjoDNK1zMBGMeh9y+bnzJSzgEKnc6/PvPsOOTcOasbhZT96TjsPTNn8kzu+7Uc9IFcNpXL0EyGZ3WJgJeCUiA8EosfeMlQKSPfRRnlgBRW1aSNSCKE/UZUzLRk/hwdNYHPDG2PU079q9tFn0uAiJgQ8D1Q71NDJU2hx0H45Ye+K2yKUg583jY5eBsv+km0sc0S9IVeQLmPl15Bzz7Gyhz0L3Fz4IbtajosmA6v+gKhkB5p5582FPq33/jVnDleuXLP0l5yEACEiDik1T9xYlPrsKIVAJEbZSTXTDmfpSv2g+1sdLnIpAOAuah/u7+6T2KUT8Hfvl2ah0+npsOS3/tn1TeADjnMf9+5CE4AubvxxuPw18nwC6f7RldRdnxNBi10JU3+amJwBMF8NK9bvhox4objvKScQQkQMQnpRIg4pOrMCKVAFEb5V2fk7irP4M+/DkbEm1rG73f53ltmrCkoB9ZetvkmZ0MRCBlAqaQ3sxvhVfAb9/Ahvwael6cWrhVOuukZlDDqOq6bfhyKOOUCFTWb3hvDRRvh5ymcOQJYLqTVP6erzxq8cofoyM8VC7up49C+0EpLVWDfBAo2Q03toPSnT6cJE1b5MJFL6pmh3+S8pBhBCRAxCehEiDik6swIpUAcSDKZtvs/DMpWr+F0SXXWOdjwbju9MxvbW0vQxEQgRQIvLUIFo5MYaDjIS3z4eerUn84KN9V1a32TiKphHn48XD+ktTnTsWnxuxPwORs3RJ47kb46FUoqeah0hxtaGW23ZdVjHGx/d51LlrkwYQ12s7vmmtN/lbcCosnu5lNnW/ccJSXjCIgASI+6ZQAEZ9chRGpBIgDUU4WuJtdejrTSkdb52PSsE6M75dvbS9DERCBFAiYh0Rz7nrHlhQGOxrS6GC4eA009SgwuiyeqQcTR8ncx02l6PDsDfD+PyHh4Dx/MJGm7lX3SuqsXIw0LzEeOAPeed6/N3W+8c9QHjKOgASI+KRUAkR8chVGpBIgaqKcrP3AlnXMKPkxs8pGWOdjwsD2FAzpaG0vQxEQgRQJ/O0KWH13ioN9DmvYvOJtcpM23h0ld1exabl3230t9FbbP8OqHkxuXrwblt8CO0MUs9yuYn9v2i0TNOHq/ZsaNXd0h20f+J9fnW/8M5SHjCIgASI+6ZQAEZ9chRGpBIiaKFc5p60dEGHcippDBBwQcHnu+kDhZGXDxE3QsJl90ObBZHYf+GyzvY9KS53r98/QeDA5WfA/8M5KN/6i4sVLkdSoxJxJcezaBtNzYU+Jv1Wp840/frLOOAISIOKTUgkQ8clVGJFKgKiJ8oqZsPi68k+LyjqrBkQYd6PmEAEXBFyeu64pnsFToPdl/qNdVwjz7XdX7Q3gmFNh9CP+46mrHsyOt7VPwZ8vjF7RSBc58VIk1cV88rE/ARe/l9T5RneWCHyNgASI+NwQEiDik6swIpUAURPlwqmw7KbyT81300HFN6sLRhh3pOYQAb8EzBb6B0fA5hV+PVVv364XnP2Ym8KPrgpSZtWDy9+CpocGs+ZM9GrYry+sOG6xcTmUfJmJqwSvRVIzk0L6V2V+L5nis59tso/F7Ly6cn1q7X7tZ5GlCMSGgASI2KQKCRDxyVUYkUqAqIlylR0QZsjvSk7nxjLvhSgnD+/M2F65YeRSc4iACFQSMFvpF46CzQ6Kv1Wlah7mLlgKpvikq8tVQUrTlvNHc+HY09Xl4EC5MQ+CL90HhvtnG11lMZp+bIukRnM18Y/KRaeeZm3h4tXQsGn8eWgFIuCTgAQInwBDNJcAESLsGEwlAaKmJFXZGl2cqM/ZxZN4IdHZU0pPzm3JA+d1Jye7nic7DRYBEXBAwDxoFv0Wlv4aEnv8OzyoNVz6L/df/E2ccwZWtG50ceU0g+NHwtBfQ4OGLjxmjg8jTD38E5wU/4w6lZZ5cN7TdkVSo762uMbnqlNPEEJoXJkq7jpNQAJEfNIvASI+uQojUgkQNVFe+Tt4amL5p3NLhzKldIznfEw8tSMX9m/v2U4GIiACDgls/xju6gvb3rd3ajpeXPIP7+02U51x52cwPd9xq8csOOw46HIGfPMkOLpP3d4ZEfTRnFRz7WKcEZnqZ8POT/f31vxI6DkBup7r5piQi3jl4ysC5niYOfrj9zI/z6b4bHaOX0+yF4HYEpAAEZ/USYCIT67CiFQCRHWUq7TgVP2HMG5DzSECAROo3HZvCsFt/9DbZGG9SX7oLHj7KW+xeRndvC30mADdzqt7Dy0m/78/G9Y+6YVYNMeaB8+RD4ERxUwb1/f/Abu3V+zMaftdCU3RzNpXUS2bAYXXu4ly2HToPt6NL3kRgRgSkAARn6RJgIhPrsKIVAJEdZSrtOBUB4wwbkPNIQIhEdhbeHBOxcNb8faaJzYP7D0vDe9NsquOGLWhNG/Pz7gTjh1eN3ZElLfWHAnvFNVGJtqfN2kDfa+AE39W9wSkaGfGW3RVvl94M6xmdIs8mLCmbvwc+4YlB5lIQAJEfLIqASI+uQojUgkQ1VGuUoBydunpTCv1Xnyy0u2kYZ0Y3y8/jFxqDhEQAS8EjBhhRIj31sB/X6/Yzt64BRzaBY5Mw5tkE8+sE2Hrei+r8DE2Cw5qBU0Pr3iAKdsN2Y0qKuybXR9dzoTcvsE93FTy/8/L8PEbsGMrHNQSDu0MR57g5k2+2fkw/8z413w47Ftw/hLV9PBxt0fG1FXnm8oFmWMY7QdFZnkKRATCJCABIkza/uaSAOGPX6ZZS4CoLqNVWnDOKPkxs8pGWOd9wsD2FAzpaG0vQxEQgTpEwFVHDFfITGeNI74D/SdB+4FuxIjK4zAvzoGt62qONKdp8sqFuwAAIABJREFUhQhx0gWQP8Bu7qjxtMlL5ZELl51XbOKQjTsCLu/LjqfBqIXuYpMnEYgRAQkQ8UmWBIj45CqMSCVAVEdZOyDCuPc0hwiIwL4EXHfEcEnY7JboXVAhCNgWvrPtQtHsiIrjMF7qV5Tshls7w45PXFJw76teNuwp3d9vqw5w0jgduXBPPP0eXf6cN2oBV220E+jST0IRiIAvAhIgfOEL1VgCRKi4Iz+ZBIjqUlTljObisu9wfsmV1olcMK47PfNbW9vLUAREoI4RMB0xbuoAe4qjufA2neHcRRVHNVK5Ko9avPsivHw/fP5uKlbVjzFCxPhl0PTQis+rHqMx9TzMrglzfKN1J7izO+zcaj9X0Jat2leIOSeMhf+8oGKSQfOOmn/zcz6jE5Tu9B/ZqIeh4zD/fuRBBGJGQAJEfBImASI+uQojUgkQ1VFOfjEoLinmnOKJrEp0scpFXpsmLCnoR5Y5X61LBERABFIl8PwseOaaVEeHP84czRj4f3Dy/1a/G2Jvsc+7YfPzsHubwxiz4Nuj4LAuFYLGlrcd+g7BVYtcOPUGOOZUvbUOAXekpyi6HZ6+2n+I5p666EX7nUn+I5AHEUgLAQkQacFuNamehKywZayRBIh9U1ulaNnc0qFMKR1jnfzJwzsztleutb0MRUAE6igB83vIvMHfuiHaABq3gkO+CXvKKh6m69Wv2JXwyTooOUCHkWivKpjodKQiGK5x9mp+zh8cAZtX+F+FWnL6ZygPsSMgASI+KZMAEZ9chRGpBIh9KSeLQ5nv0IOKb2ZDoq1VHnrktWLeuSeRk13Pyl5GIiACdZzAlx/Db0+A3V/UcRARW352Y+hzBbyysPrdF+ZMfptjoHVHaHYYNGwGbdPQVSVi2BRODQRMXZTbvuP/uJBacuoWq4MEJEDEJ+kSIOKTqzAilQBRlXJ5e6yusGUdRWWdGV1ivwX6njEnMvjYw8PIoeYQARHIVALbP4E7T4IdWzJ1hfFal2lPet7T0KTNV/Un3v8H7N4ODZtKaIhXNqMT7dqnYMFZ/uNRS07/DOUhVgQkQMQnXRIg4pOrMCKVAFGVcpXik7NLT2da6WjrHEwa1onx/fKt7WUoAiIgAuUEzMPtXX1h63oBSRcBU/yy12XQ9Vyds09XDjJ5XvPyY9aJ/n/GTV2R0Y9kMimtLR0Eair2a1oEp7nGmQSIdNwQdnNKgLDjlqlWEiCqZrZK+83pJWdxZ9kZ1nmfMLA9BUM6WtvLUAREQAT2ErBtXymEPgjUgw5DoPt4yB+Q9i/aPhYi0zgQSB7/9BWqael6xfrUO9T4mkzGoRGoFAD+8zJ8/Abs2AqNW4A5Dvblh1C8E8zTndmh1eVMyO3r5veVqVHy0n2w+p7qj5uZujbdzk+rMCsBIrS70PdEEiB8I8woBxIgqqazcCosu6n8/5xfXMDiPV2tk60dENboZCgCIlAdAfNl8OW5sPJ38NlGMQqSQNPDKroKpNpqNMhY5LtuEDA/33d0g083+Vvv4cfD+Uviv1On6kP3f1+HLeuhLNmauGw31G9Y8ZBdvwG0zK/oimNa8Ebgrby/BCatq3YS2rQCTJvhVK8GTeDbI2HoDdCgYapWXx9nusHNGw4fvlK7vWE+8iFodHDtYx2PkADhGGiA7iRABAg3hq4lQFRN2rIZUHh9eRH3nrt/ywe0tk7pgnHd6Zlvb289sQxFQAQym0DlF9MX7oINS7/6Up7Zqw53dTpLHy5vzVZB4K1FsHCkfxpR74hhfoeZI6//frTi2InZ4WV2b+Q0q/j35+9W/DdR6p1F/Rw4+JvQrhd860fudgN4j8S7RVXRYeNyKPnSu4+qFmaHRP+r4OSLUhOk9v5tmQ3rlkCiLPX5jQhhfm9m56Ru42CkBAgHEENyIQEiJNAxmUYCRNVE/e0KWH237wKURxzciKKJA8lK89m4mNyDClMERMCWgPnCaL4oLpsO7/8TzJtBXf4ImG3FF692s4XZXySyrmsEzM/z9FzY+am/lUepI0bVnQwfvgrvvADbP/D2cOuHRlZ9MDVcjjoZDv9WdHZJVOXy0b/hg1fgs83B/A5v1xtGLYCGzWHTcnhvTcWOipxk4Vyz+8b8DfngX/7mT4PwJQHCzw9HuLYSIMLlHfXZJEBUZqhKEaiZJSOYWfZj69ydcuyhzBnTzdpehiIgAiLgmUDl26uVd8L6QmCPZxcyANLwJVrcRWAvgQUjYe0i/0DSvYunvH7AvfD8b2Hb+/7X49KDefA2b+xPuiD8+i7p4mKOrJgrSJE6DeKtBAiXPxjB+pIAESzfuHmXAFGZsWQHjOJEfQbsvoX3aGOdy4v653PFqZ2s7WUoAiIgAr4IlO6GJyfBPxdC6Q5fruqUcZq2EdcpxlrsgQmsK4T5I/xTSmdHjO0fw119YNsH/tcRtIcwxQjTVvm+If67nQTNxI//MY9XHHsJ6ZIAERJoB9NIgHAAMYNcSICoTGayA8bc0qFMKR3jK8UqQOkLn4xFQARcEag8ovHctIojGntKXHnOPD9pLKSWeTC1ImsCrlpyBt0Ro2odh083UF48q0Ej2PZf+PBf1stPq2GQYsT2/8JvvwPFPus6pBVQCpOfcj30ujSFgW6GSIBwwzEMLxIgwqAcnzkkQFTm6un/I/H8bxlUfDMbEm19ZVAFKH3hk7EIiEAQBCofGF57FLZsqDhnXl5NvlHFeextH8LOLUHMHG2fpnVd9wvhxJ+FXkAt2mAUXdoIuGjJaYI/7DgYt9TtfV2+u2oi/OsR/0US0wY4hYkbt4TjfgRDptp3kqgUgJf+Gt5fk8KkGTCk75Uw8OrQFiIBIjTUvieSAOEbYUY5kABh0plsf1X0yUGMLrnGV4Lz2jRhSUE/FaD0RVHGIiACaSFgWq/dd2pFr/lMv/IHQY+Lwz8DnulctT7/BMx3kjkD4aNX/fsaPAV6X+bPz976MnfA+qV1rL5MPWg/sKKTRP6A6ovT7tvVY8dW2P4RmP/WtVo82gHh72ctg60lQGRwci2WJgHCQEu+bZhdejrTSkdbYPzKZPLwzoztlevLh4xFQAREIG0EzMPPH38Gbz4RfgjlbeMmwn/XwisPBTO/qYg/fhk0PTQY//IqAi4IGDFwer5dK8qq89drAFdthIbNvEdVWTDRHFHd/qF3+0yzMCwPag0Nm0K22Tm2p0JoMLvJvLSszDQuVdejGhCZnF1fa5MA4QtfxhlLgDDK9e1dYcs6ZpT8mFll9sWfvnFIYwp/2Z+c7HoZd6NoQSIgAnWIgHnwePAM2Px8eIs+7Fsw9glofEjFnJ+/V3FmuqzYTQxGeOh1GXQ91+2WdDfRyYsI7E/gobPg7af8k2nWFi5aBY0OTt1XnApJpr4qjQySgBFnrlgXagtjHcEIMqFufUuAcMsz7t4kQCS7X5hE+t0B8YvBHbh08DFxvycUvwiIgAjArs9hwf/AOyuDpWFat500rvoaDH6rxuc0g9w+0G2cjloEm0V5D4KAq44YJrajesI5f6ldfDPi4/O3galbQCKIVclnphIwbU1PuynU1UmACBW3r8kkQPjCl3HGEiCS3S9MZpeVHcc5Jb+yTrKKT1qjk6EIiEAUCZiHkdVzYPmtsOPjGiKsB6Z6vCloWV2PefNW7LgzYfD/g/dehPf/Abu3V2xjbvtdMN0nsg7w1aR8G/h9UPRb+OK9/WMwxzYO/xZ0/F6Fn2IPvqPIXDGJQCUBVx0xKv0dMwzOemB/EcLMs2k5bHgOVv0us4tL6u4KhoD5PTxxM2Q3DMZ/DV4lQISK29dkEiB84cs4YwkQi6fAilvKE3tfyVCuL7Nrwanikxn3s6EFiYAIVH0QMrvFTAeNrRsr/q/pHtFlREXPd/PgX/kQ41VgSJVy0P5TjUPjRCBMAq46YlTG3K43jHwIPnwF3nmhotbLf193d9QpTDaaKzoEXBQ7tViNBAgLaGkykQCRJvARnVYCxIKRsHZR+XdnPy04rxvemZ+p+GREb3OFJQIiIAIiIAIxJOCyI0YMl6+QY0CgXS84+7Haj/cEsBQJEAFADcilBIiAwMbUbd0WIIzqcEtn2PY+RWWdfbXgfODcbvQ9RlXVY/pzoLBFQAREQAREIJoETEeMm/JhT2k041NUdZeAOUJndtR4KXDqkJYECIcwA3YlASJgwDFzX7cFiLcWwcKR5SnzW4By0rBOjO+XH7P0K1wREAEREAEREIHIE3iiAF66N/JhKsA6QsAcwet+YfXFg0NEIAEiRNg+p5IA4RNghpnXXQHCbGu8vRt8tqk8pb8pGcXdZcOt0zthYHsKhnS0tpehCIiACIiACIiACFRLoGQ33NgOSnfWTUBZ9aHJoXBQq4pit8VfwpefwB5HbXrjQNUU+zU7Do7qUbEb5uX74fN3wovczG9q/kSoq5AEiPDS73cmCRB+CWaWfd0VIFbcCosnl2ezOFGfwcU38U7icOvsageENToZioAIiIAIiIAI1EagyveW2obG6nMjLjQ7HFrkVwgLuz6raAHaqBkc8d2KLjqVxW6rLqyyMO17a+CDV+DdF2Dbh5DIoKMqB3roN62SF46Czc8HlO4sOPw46DwCvtmt9o5FAUVxILcSINIA3XJKCRCW4DLUrG4KEPu8SZhbOpQppXbdLyrvC7XgzNCfEC1LBERABERABKJAwOzcfOAMeCeoB84QF9niaDi6L3zrR9WLC7ahGFHCdOx59Q+wuQg+fQcSJbbewrcz7Sw7nQaHfxuOTLFN8ao7YekNULbLTbwNm8PxI2HIVGgQbltNrwuQAOGVWPrGS4BIH/sozlw3BYi/XQGr7y7Ph9/uF8aHWnBG8dZWTCIgAiIgAiKQYQTMW+87usO2D+K5sGZHwPhl0DSkot3mS976QnhxToUwUfJldLl9swf85BG7go6lu+HJSfCvh2teo9lp0vwI+MbJ0LBpBQdzpGfnp9C4BRzaJTXRI0IEJUBEKBm1hCIBIj65CiPSuidAmD9G0/Ng59Zyvn67Xxgfk4d3ZqxacIZxv2oOERABERABEajbBHZtg+m5sCdGb/aN8NDrMuh6blraNe5941QpRmxaDsXbo3EfHdQa+hRU1FbIzvEXU+UOkNceha0bK3yZgpFdRrjdaeIvSmfWEiCcoQzckQSIwBHHaoK6J0BU6XxhMuW3+0W7lgfxTEE/crLrxSrxClYEREAEREAERCCmBOJQDyKnGeT2iVTRwr3ZrqwfYXZFrPpd+GJEvWxo+13oNwnaD4QsPZ7Z/CRKgLChlh4b3eHp4R7VWeuWAGHOT97RDT6t6HxhrhklP2ZW2Qjr/Izvm8uk0zpb28tQBERABERABERABDwRMN9nHhwBm1d4MgtkcNPD4djvV2zvL9lZsb3fPFybjg1xeLA2LF+6D4yos/3DQBCVO63XANp+R6KDQ8ISIBzCDNiVBIiAAcfMfd0SIFbNhiev+lqK7ij5PjeVjbROm7pfWKOToQiIgAiIgAiIgC0BUw9iwUh4p8jWgz+7/EHQ42LIHxAPoaG21VatF+HriEY9aNISmraFg1pk9BGI2pAG/bkEiKAJu/MvAcIdy0zwVHcECPOH5fausGXd1/J2bfEYHtgz1DqX6n5hjU6GIiACIiACIiACfgiYt/e/PwfWLvLjxZtt0yPgwhALSXqLzs3oqi0+P3oNtm4Aw9q0By3bDfUbffVv07mi8SESGtyQ9+RFAoQnXGkdLAEirfgjN3ndESDMOb95w7+WAPP3ZeDum9lIW6vEqPuFFTYZiYAIiIAIiIAIuCIQ1nGMejkw4FfQ4yL/xRJdrV1+6jQBCRDxSb8EiPjkKoxI644AsWwGFF7/NaZ+O2CM6dGOKT84Low8aQ4REAEREAEREAERqJ6AOY6xcBRsft49ocYt4Vs/glOmQoOG7v3LowhYEpAAYQkuDWYSINIAPcJT1h0BwhRrMu2XqlwzS0Yws+zH1um5cmhHfj6gvbW9DEVABERABERABETACQGzE2LVnbD0Bijb5c9l/YaQNwC6j8+cGg/+iMg6ggQkQEQwKTWEJAEiPrkKI9K6IUCYsxbT82Dn1r1MixP1GbD7Ft6jjTXnCQPbUzCko7W9DEVABERABERABETAKYHS3fDkJPjXw1DyZe2us+pD08OgVT60ag9dRkBu38woLFn76jUixgQkQMQneRIg4pOrMCKtGwLEW4tg4dc7XcwtHcqU0jG+GKsDhi98MhYBERABERABEQiKgHn5YupfvfYobNkAOz+tKKCooolBEZffkAlIgAgZuI/pJED4gJeBppkvQJgtibd3g8827U2f+Zs8qPhmNiTsik9WOlIHjAz8idCSREAEREAEREAEREAEIk9AAkTkU7Q3QAkQ8clVGJFmvgCx4lZYPPlrLP0WnzTO1AEjjNtTc4iACIiACIiACIiACIjA/gQkQMTnrpAAEZ9chRFpZgsQJbvhxnZQuvNrLGeXns600tG++E4e3pmxvXJ9+ZCxCIiACIiACIiACIiACIiAdwISILwzS5eFBIh0kY/mvJktQPztClh9937kp5ecxZ1lZ1hn5BuHNKbwl/3Jya5n7UOGIiACIiACIiACIiACIiACdgQkQNhxS4eVBIh0UI/unJkrQJhCDzflw44t+9E/v7iAxXu6WmflF4M7cOngY6ztZSgCIiACIiACIiACIiACImBPQAKEPbuwLSVAhE082vNlrgBhKj/PG74ffaNL9Nz9Wz6gtXVmVHzSGp0MRUAEREAEREAEREAERMA3AQkQvhGG5kACRGioYzFR5goQz06DZ2/YLwl+C1AecXAjiiYOJCtLP0qxuMMVpAiIgAiIgAiIgAiIQMYRkAARn5TqqSk+uQoj0swUIEzrzVknwOfv7sfQbwHKU449lDljuoWRG80hAiIgAiIgAiIgAiIgAiJQDQEJEPG5LSRAxCdXYUSamQLEqtnw5FXV8ptR8mNmlY2wZntR/3yuOLWTtb0MRUAEREAEREAEREAEREAE/BGQAOGPX5jWEiDCpB39uTJPgDBFHmadCFvXV0t/ZskIZpb92Dozk4Z1Yny/fGt7GYqACIiACIiACIiACIiACPgjIAHCH78wrSVAhEk7+nNlngDx1iJYOLJa8sWJ+pxRfD2vJ3KtM6MClNboZCgCIiACIiACIiACIiACTghIgHCCMRQnEiBCwRybSTJLgDC1H+7oBp9uqjYBc0uHMqV0jHVy8to0YUlBPxWgtCYoQxEQAREQAREQAREQARHwT0AChH+GYXmQABEW6XjMk1kCxAFqP5iTGYOKb2ZDoq11ZiYP78zYXva7J6wnlqEIiIAIiIAIiIAIiIAIiMBeAhIg4nMzSICIT67CiDRzBIiS3XDrsbBjS7Xc/Lbf7HxEcx67qBc52fXCyIvmEAEREAEREAEREAEREAERqIGABIj43BoSIOKTqzAizQwBYtfnMHcYfPRajcz8tt/8xeAOXDr4mDByojlEQAREQAREQAREQAREQAQOQEACRHxuDwkQ8clVGJHGX4AwdR/mnwmbltfIyxy/uLT45/w10dua6YSB7SkY0tHaXoYiIAIiIAIiIAIiIAIiIAJuCEiAcMMxDC8SIMKgHJ854i9AHKDug+l6Mb90MHPKvscHtPaVFbXf9IVPxiIgAiIgAiIgAiIgAiLgjIAECGcoA3ckASJwxLGaIN4ChNnacHtX2LJuP+hb9jTlhyVT2JQ4wklC1H7TCUY5EQEREAEREAEREAEREAHfBCRA+EYYmgMJEKGhjsVE8RYgNi6DecOrFR8GFN/CFzR1koQjDm5E0cSBar/phKaciIAIiIAIiIAIiIAIiIA/AhIg/PEL01oCRJi0oz9XvAWIZTOg8PqvUd6+J4e+xbexlYOd0T/l2EOZM6abM39yJAIiIAIiIAIiIAIiIAIiYE9AAoQ9u7AtJUCETTza88VbgHhwBKwv3Ev4i0Rjhu+eymbcHLuodHxR/3yuOLVTtDOp6ERABERABERABERABESgjhCQABGfREuAiE+uwog0vgKEqf9wUz7s2FLOyex8+F7xDc7FB+NbBSjDuBU1hwiIgAiIgAiIgAiIgAikRkACRGqcojBKAkQUshCdGOIrQFSp/2B2Pny/eKqzgpP7pkcFKKNzwyoSERABERABERABERABEZAAEZ97QAJEfHIVRqTxFSBWzITF12FabZ5TPJFViS6B8Mpr04QlBf1UgDIQunIqAiIgAiIgAiIgAiIgAt4JSIDwzixdFhIg0kU+mvPGV4AonArLbmJu6VCmlI4JjO7k4Z0Z2ys3MP9yLAIiIAIiIAIiIAIiIAIi4I2ABAhvvNI5WgJEOulHb+74ChArZpJ45joGFd/MhkTbQMh2PqI5j13Ui5zseoH4l1MREAEREAEREAEREAEREAHvBCRAeGeWLgsJEOkiH8154ytAvLWIovnXM7rkmkDI5tSvx+prBnFw45xA/MupCIiACIiACIiACIiACIiAHQEJEHbc0mElASId1KM7ZzwFiNJieHAEd6xryU1lIwOhe833juX8PnmB+JZTERABERABERABERABERABewISIOzZhW0pASJs4tGeL54CxKrZ8ORVnL37KpYnvu2c8NGtDuLpX/TT0QvnZOVQBERABERABERABERABPwTkADhn2FYHiRAhEU6HvPET4BIJOD2riQ+WceJu2ezleZOSTdvlM3SX/anVdOGTv3KmQiIgAiIgAiIgAiIgAiIgBsCEiDccAzDiwSIMCjHZ474CRAbl8G84RSVdXZe/8HsfPjT//aU+BCf+1eRioAIiIAIiIAIiIAI1EECEiDik3QJEPHJVRiRxk+AWDETFl/H7NLTmVY62gmjIw5uxAV9cvnJyUfr2IUTonIiAiIgAiIgAiIgAiIgAsERkAARHFvXniVApE7UsOoBfB/oDRwL5fv9PwP+AcyD/9/e3UDLVdV3H//eJARpKKhJ2kJthSRICu1TW8GYgKQkCo0aKWK7HmMlUcH49BHQUIUoBUJTSYXY2NA+QdAQ0NS1tFYBlQoJEGMCat+sICAkUPGtCVojvnBzk3nWn5xbrrf3ZebMnTN7z3zPWi6Ve/acvT//zcyd3z1nbzYCtWFe8lDgYuC1wPOBJ4F7gauBu0bpxqnAhcAsIF7nMeDjwCrgx/UPYdQz8wsgNq+ELVexeu8fsnbfmaMOcLgTDh7fw5/Mm8GJRz2X2dMm09PjvxqlMW2ogAIKKKCAAgoooECFAgYQFWI3eSm/ZdUPOB+4Y8DpO4AfAEcDzy3++WeAs4CnBr3sFGArcGzxs/uBqcDzisDibcDfDtOV84APAFGrx4FdwHFALErw9SIM+X79wxjxzPwCiC2rYfMVTd8BceHLX8B5848ZI0ZfRgEFFFBAAQUUUEABBaoSMICoSrr56xhA1G/4MuCDwBrgY8B/Dmj6BuC6IhR4H3DRoJf9dHHnxD8V//3tIlA4F7gW2AecAPzroHYvAr5UnPvW4hpxh8WRwM1A/PyTRehR/0iGPzO/AOIz74Qvf5A79r2Qc/a+q7TBxnNnMWd65EQeCiiggAIKKKCAAgookJOAAUQ+1TKAqL9W8bjFT4G9wzR5N/AXQNyNEHc37C/O+x3gn4v/H3dAPDyo/Y1ABBhDBQmfAs4A4pzFg9rFn+sfAMYBsffkV+sfyrBn5hVAxA4Ya19E7xOPcnbvxdxTO74UwbSpk9i0bK6PXZTSs5ECCiiggAIKKKCAAu0VMIBor38jVzeAaERr5HP7g4Y461eA7xWnRygR4UQ8vvHyIV7ipOLxjJ8B8Sf4/jUdYq2H3cVdFbHmxBeHaHs7EHdmrAT+bAyGklcAUeyAsb7vdFb0Dc5n6te4fOFxLDkpnqTxUEABBRRQQAEFFFBAgdwEDCDyqZgBxNjVas6AkOBwYE/x0puAecBlwBVDXO4g4EdDBA0vBbYUa0b84jB3XlwKrBgh3Gh0dHkFEFvXULv9Mub3Xs2OWjyV0vgRC05ueNOL3e2icTpbKKCAAgoooIACCiiQhIABRBJlqKsTBhB1MdV10logFpP8N+CFA1p8s1hs8vXFLhlDvdg3gBnAm4EPFyfE/74eiJ+9YJgexGt+BIhr/HpdvRz5pLwCiM0r2XbnZ1i095LSQ79+8Yt42W/EDSseCiiggAIKKKCAAgookKOAAUQ+VTOAGJtaxWKQ9wATgNcVi1T2v3I8UvELwALgtmEuF9txvhj4U2B1cc47gVjQMn72kmHaxWt+ttjSM+6SqOeIXTSGOyZPmTKlZ9eukU6p5xIVnbN1Detu+zKr+haVvuDyBTNZOnd66fY2VEABBRRQQAEFFFBAgfYKGEC017+RqxtANKI19Lm/XOxUEXcg/APwmkGnxQ4XsVBkbOO5eZjLxaMW8chFrOMQ6znEEf87Htn4AnDKMO3i0Y54xCOuEeFHPUfnBBA7t7D6+htZu+/MesY95Dnnz5vBstNibVAPBRRQQAEFFFBAAQUUyFHAACKfqhlANFerWOvhTiAWoIwtNiMQ6F/7of+VU7sDYqQR5/UIRq3G37x3GVf9KNbhLHd4B0Q5N1spoIACCiiggAIKKJCKgAFEKpUYvR8GEKMbDXdG7FIRu1DE4xH3AXOBJ4Y4+XHgV4FG14A4B7jONSBGLtCl136MG3fW+/TJ/3ytjefOYs702HzEQwEFFFBAAQUUUEABBXIUMIDIp2oGEOVqFWs6fK54NCIWiYxHJL47zEvFYxenArFjxZ8PcU7sgvEkMLF4DGNrcU685t3FLhgRdvQN0bZ/F4x4DKP8bQDPvHBWd0DUajXmXbWZnd+PHUwbP6ZNncSmZXPp6fFfg8b1bKGAAgoooIACCiigQBoCBhBp1KGeXvjNqx6lnz/nWcCtxZoOjxWhQexCMdzxXmA58Hng9CFOOgmI0CG+RU8twog4Lf6sv7sIJmKLz+1DtI07MCJ4iHUjYs2IZo+sAojvB9IRAAAgAElEQVRtX3+MRRu+VnrMi2c/nxVn/Gbp9jZUQAEFFFBAAQUUUECB9gsYQLS/BvX2wACiXqkD58XdCp8CXgF8q7jzYccoL/G7xfoQsVBkrHb4yKDzbwTeMMwCljcDC4EbgDcOancM8ECxwGVs+xnbfzZ75BNA9PWy7gNXsGrX7NJjftfpx/Inp8bupx4KKKCAAgoooIACCiiQq4ABRD6VM4Cov1bji+01X1s8bhFrPjxUZ/NbgFcBXwFeDXwHCPtzgWuB/cCJwD8Per34Z7ENZxxvAa4v/vcRQLxmbP8ZgUj5bSB+/oL5BBD3rGP1LV9xB4w6J6CnKaCAAgoooIACCijQqQIGEPlU1gCi/lq9DthYnP5ocQfEcK3PA/5lwA/j0YovAnHXwlPFopXxz34NqAEXAGuHebG3A+8vAot41CO20TweOBh4EDi5eFSj/pEMf2YeAUStBtecwLrvzWRV36LS43YHjNJ0NlRAAQUUUEABBRRQIBkBA4hkSjFqRwwgRiX67xOWAOvrPD0Wnbxr0LmxpsPFQNxB8XwgtueMuxuuKrbyHOml5wMXArOASUCsPfEJ4MoBa0bU2bURT8sjgNi5BTYsZNu+41i095LS43YHjNJ0NlRAAQUUUEABBRRQIBkBA4hkSjFqRwwgRiXqqhPyCCC2roE7LiNuhJjXezU7a0c2XCR3wGiYzAYKKKCAAgoooIACCiQpYACRZFmG7JQBRD61qqKneQQQm1fClqvYUzuEV/eu5NFaLInR2HH5wuNYctLRjTXybAUUUEABBRRQQAEFFEhOwAAiuZIM2yEDiHxqVUVP8wggtq6h9/YrWLz3Yrbvj+UwGjtmT/4JG95xFhMnjGusoWcroIACCiiggAIKKKBAcgIGEMmVxAAin5K0tad5BBA7t7D+Q9ewom9xw1hH9XyHmxcfw2EzYxMTDwUUUEABBRRQQAEFFMhdwAAinwp6B0Q+taqip1kEELX9+5l/6U3s6JvSsMnR43ex+c/Ppmecdz80jGcDBRRQQAEFFFBAAQUSFDCASLAow3TJACKfWlXR0ywCiG2P7GbRdbGBSLnD3S/KudlKAQUUUEABBRRQQIEUBQwgUqzK0H0ygMinVlX0NIsAYt3dj7Dqcw+U9li+YCZL504v3d6GCiiggAIKKKCAAgookI6AAUQ6tRitJwYQowl118+zCCBWf/5B1m5+uHRlzp83g2WnHVu6vQ0VUEABBRRQQAEFFFAgHQEDiHRqMVpPDCBGE+qun2cRQHgHRHdNSkergAIKKKCAAgoooMBIAgYQ+cwPA4h8alVFT7MIILY99F0WffifSnu4BkRpOhsqoIACCiiggAIKKJCcgAFEciUZtkMGEPnUqoqeZhFA1LavY/7N49lRO7Jhk2lTJ7Fp2Vx6epz6DePZQAEFFFBAAQUUUECBBAUMIBIsyjBd8ltYPrWqoqfpBxC1GlxzAuu/N50VfYsbNrl84XEsOenohtvZQAEFFFBAAQUUUEABBdIUMIBIsy5D9coAIp9aVdHT9AOInVtgw0J6a+NZvPditu8/vm6X2ePuY8ObZjFxxty623iiAgoooIACCiiggAIKpC1gAJF2fQb2zgAin1pV0dP0A4ita+COy562eGL/oZy1dwWP1o4Y1SbCh2sPej+HnbYcTrpg1PM9QQEFFFBAAQUUUEABBfIQMIDIo07RSwOIfGpVRU/TDyA2r4QtV7GndghL9y6r6w6Io3q+w98fdBmTxz0Jp7wL5r2nCkuvoYACCiiggAIKKKCAAhUIGEBUgDxGlzCAGCPIDnmZ9AOIrWvovf2Kco9fHLSKiadd5h0QHTJZHYYCCiiggAIKKKCAAiFgAJHPPDCAyKdWVfQ0/QBi5xbWf+iacgtQTriBJW8+D44+pQpLr6GAAgoooIACCiiggAIVCBhAVIA8RpcwgBgjyA55meQDiNr+/cy/9CZ29E1pmHzahF1suuJsesaNa7itDRRQQAEFFFBAAQUUUCBNAQOINOsyVK8MIPKpVRU9TT6A2PbIbhZdd29pi43nzmLO9MbDi9IXtKECCiiggAIKKKCAAgq0VMAAoqW8Y/riBhBjypn9iyUfQKy74z5W3fFoaejlC2aydO700u1tqIACCiiggAIKKKCAAmkJGECkVY+RemMAkU+tquhp2gFEXy+r/+pK1j5xQmmL8+fNYNlpx5Zub0MFFFBAAQUUUEABBRRIS8AAIq16GEDkU4929zTtAOKeday79Qus6ltU2sk7IErT2VABBRRQQAEFFFBAgSQFDCCSLMuQnfIOiHxqVUVP0w0gajW45gS2/edEFu29pLSFa0CUprOhAgoooIACCiiggAJJChhAJFkWA4h8ytK2nqYbQOzcAhsWEjnE/N6r2VE7smGkaVMnsWnZXHp6zN0axrOBAgoooIACCiiggAKJChhAJFqYIbrlN7F8alVFT9MNILaugTsue9rg+r0LWLnvDQ17XL7wOJacdHTD7WyggAIKKKCAAgoooIAC6QoYQKRbm8E9M4DIp1ZV9DTdAGLzSthyFXtqh3Bu74XcWzuuIY/Zz/kRGy78IyZOGNdQO09WQAEFFFBAAQUUUECBtAUMINKuz8DeGUDkU6sqeppuALF1Db23X8HivRezff/xDVm8pOd+Pnj6szjs985rqJ0nK6CAAgoooIACCiigQPoCBhDp16i/hwYQ+dSqip6mG0Ds3ML6D13Dir7FDTtcMv5Gzjnn/8LRpzTc1gYKKKCAAgoooIACCiiQtoABRNr1Gdg7A4h8alVFT5MNIGr79zP/0pvY0TelYYdpE3ax6Yqz6Rnn4xcN49lAAQUUUEABBRRQQIHEBQwgEi/QgO4ZQORTqyp6mmwAse2R3Sy67t7SBm6/WZrOhgoooIACCiiggAIKJC1gAJF0eX6ucwYQ+dSqip4mG0Csu/sRVn3ugdIGyxfMZOnc6aXb21ABBRRQQAEFFFBAAQXSFDCASLMuQ/XKACKfWlXR02QDiNW33c/au3aWNjh/3gyWnXZs6fY2VEABBRRQQAEFFFBAgTQFDCDSrIsBRD51aVdPkw0g1t30UVbd9+zSLt4BUZrOhgoooIACCiiggAIKJC1gAJF0eX6uc94BkU+tquhpmgFErca21X/Iot1vLG3gGhCl6WyogAIKKKCAAgoooEDSAgYQSZfHACKf8lTe0zQDiJ1bqN2wkPm9V7OjdmTDKNOePY5NF/0+PT3mbQ3j2UABBRRQQAEFFFBAgcQFDCASL9CA7vmNLJ9aVdHTNAOIrWvgjstY33c6K/oWN+xw+W/uYskfL2m4nQ0UUEABBRRQQAEFFFAgfQEDiPRr1N9DA4h8alVFT9MMIDavhC1X0Vsbz+K9F7N9//F1W8wedx8b5vUx8WXvrruNJyqggAIKKKCAAgoooEA+AgYQ+dTKACKfWlXR0zQDiOIOiADYUzuEpXuX1RVCRPhw7UHv57DTlsNJF1Th5zUUUEABBRRQQAEFFFCgYgEDiIrBm7icAUQTeB3YNM0AYucW2LDwae64C+LGvtP4f/tezRMcPmQJJvND/s+ET3P2+NuZ2LMPFt8CR5/SgeVySAoooIACCiiggAIKKGAAkc8cMIDIp1ZV9DTNAKJWg2tOZM/uxxu/+2HK8+BtXwYXoKxi/ngNBRRQQAEFFFBAAQUqFzCAqJy89AUNIErTdWTDNAOIuPNh2zoW37qnrkcv+ivz9PoPCw9n4uylHVksB6WAAgoooIACCiiggAJgAJHPLDCAyKdWVfQ02QBi/RceZsVnHmzY4PJXHsuSl85ouJ0NFFBAAQUUUEABBRRQIA8BA4g86hS9NIDIp1ZV9DTJAKJWqzF/9V3s2P2Thg2mTZ3EpmVz6fERjIbtbKCAAgoooIACCiigQA4CBhA5VOlAHw0g8qlVFT1NMoDY9vXHWLTha6XHv/HcWcyZPqV0exsqoIACCiiggAIKKKBAugIGEOnWZnDPDCDyqVUVPU0vgOjrZd0HrmDVrtmlx798wUyWzp1eur0NFVBAAQUUUEABBRRQIF0BA4h0a2MAkU9t2tHT9AKIe9ax+pavsHbfmaU9zp83g2WnHVu6vQ0VUEABBRRQQAEFFFAgXQEDiHRrYwCRT23a0dO0Aoint988gXXfm8mqvkWlPbwDojSdDRVQQAEFFFBAAQUUSF7AACL5Ev13B30EI59aVdHTtAKInVtgw0K27TuORXsvKT1+14AoTWdDBRRQQAEFFFBAAQWSFzCASL5EBhD5lKjSnqYVQGxdA3dcRtwIMb/3anbUjmwYw10wGiazgQIKKKCAAgoooIACWQkYQORTLu+AyKdWVfQ0rQBi80rYctXT417fdzor+hY3bHD5wuNYctLRDbezgQIKKKCAAgoooIACCuQhYACRR52ilwYQ+dSqip6mFUAUd0DEwHtr41m892K27z++bofZk3/ChnecxcQJ4+pu44kKKKCAAgoooIACCiiQl4ABRD71MoDIp1ZV9DStAKJYA6J/4Htqh7B077K6QojZ4+7j2rNncdjMuVW4eQ0FFFBAAQUUUEABBRRok4ABRJvgS1zWAKIEWgc3SSuAeHoXjBPhiW/8N/lT+8fz3r7Xc8v+2Xyfw/9HKab1fJuzx3+eRb/0H0w87x7ocYp38Hx1aAoooIACCiiggAIKYACRzyTw21k+taqip2kFEDHie9bBbRc9/QjGR/e9jJv2vXzIxSifyw951bh7eM+Ej3DwuH2w4H0wa2kVZl5DAQUUUEABBRRQQAEF2ihgANFG/AYvbQDRIFiHn55eANHXy54N/5ulj7yk/kcvpt/DYYs/BhMmdni5HJ4CCiiggAIKKKCAAgoYQOQzBwwg8qlVFT1NLoDo7dvP4uu3sf3RH9Y9/tlHHc6Gc+a4+GTdYp6ogAIKKKCAAgoooEC+AgYQ+dTOACKfWlXR0+QCiPVf3MmKW+5veOxuv9kwmQ0UUEABBRRQQAEFFMhSwAAin7IZQORTqyp6mlQAUavVmL/6bnbs/nHDY582dRKbls2lx0UoG7azgQIKKKCAAgoooIACOQkYQORTLQOIfGpVRU+TCiC2PbKbRdfdW3rcG8+dxZzpU0q3t6ECCiiggAIKKKCAAgqkL2AAkX6N+ntoAJFPraroaVIBxLo7H2LVPz6zBWejAMsXzGTp3OmNNvN8BRRQQAEFFFBAAQUUyEjAACKfYhlA5FOrKnqaVACx+sMbWfvQ4aXHff68GSw77djS7W2ogAIKKKCAAgoooIAC6QsYQKRfo/4eGkDkU6sqeppOAFGrse7Kt7Nqz2mlx+0dEKXpbKiAAgoooIACCiigQDYCBhDZlAoDiHxqVUVP0wkgdm5h24cvYtHeS0qP2zUgStPZUAEFFFBAAQUUUECBbAQMILIplQFEPqWqpKfpBBBb11C7/TLm917NjtqRDQ9+2qReNl3yB+6C0bCcDRRQQAEFFFBAAQUUyEvAACKfenkHRD61qqKn6QQQm1fClqtY33c6K/oWNzz2y2c+zpIlSxtuZwMFFFBAAQUUUEABBRTIS8AAIp96GUDkU6sqeppOALF1DdxxGU/sP5RTe9/PHg6te/yzx93HhgUHM/GlF9TdxhMVUEABBRRQQAEFFFAgTwEDiHzqZgCRT62q6Gk6AcTOLfTe8Acs3nsx2/cfX/fYD+NJ7py4jMlv/Ds4+pS623miAgoooIACCiiggAIK5ClgAJFP3Qwg8qlVFT1NJ4Co1Vi/6m2s+OErGh735Yd/liUXXwM9Tu+G8WyggAIKKKCAAgoooEBmAgYQ+RTMb2j51KqKniYTQNRqNeb/xafZ8eRBDY972qF72fSeM1yAsmE5GyiggAIKKKCAAgookJ+AAUQ+NTOAyKdWVfQ0mQBi2yO7WXTdvaXH7BacpelsqIACCiiggAIKKKBAVgIGEPmUywAin1pV0dNkAoh1dz/Cqs89UHrMyxfMZOnc6aXb21ABBRRQQAEFFFBAAQXyEDCAyKNO0UsDiHxqVUVPkwkgVn/+QdZufrj0mM+fN4Nlpx1bur0NFVBAAQUUUEABBRRQIA8BA4g86mQAkU+dquppMgGEd0BUVXKvo4ACCiiggAIKKKBA3gIGEPnUzzsg8qlVFT1NJoDY9vXHWLTha6XH7BoQpelsqIACCiiggAIKKKBAVgIGEPmUywAin1pV0dM0Aoi+Xmo3vYb5D53BjtqRDY972tRJbFo2110wGpazgQIKKKCAAgoooIAC+QkYQORTMwOIfGpVRU/TCCDuWQe3XcT6vtNZ0be44XFfvvA4lpx0dMPtbKCAAgoooIACCiiggAL5CRhA5FMzA4h8alVFT9sfQNRqcM0J8MTDPLl/Iq/aeyWP1o6oe+yzp01mw5tezMQJ4+pu44kKKKCAAgoooIACCiiQr4ABRD61M4DIp1ZV9LT9AcTOLbBhIXtqh7B07zK27z++7nHPHncf1549i8Nmzq27jScqoIACCiiggAIKKKBA3gIGEPnUzwAin1pV0dP2BxBb19B7+xUs3ntxQ+HDUT3f4daDlnPo6ZfASRdUYeU1FFBAAQUUUEABBRRQIAEBA4gEilBnFwwg6oTqktPaH0BsXsn6zV8tt/bDhBtYMu+FMO89XVIuh6mAAgoooIACCiiggAIGEPnMAQOIfGpVRU/bHkDUvrCG+Z+dVG73i55vs+mVP6HnZO+AqGKyeA0FFFBAAQUUUEABBVIQMIBIoQr19cEAoj6nbjmr7QHEtq2bWXTrT0t7b3zVIcw5eV7p9jZUQAEFFFBAAQUUUECBvAQMIPKplwFEPrWqoqdtDyDW3fUwq257sPRYly+YydK500u3t6ECCiiggAIKKKCAAgrkJWAAkU+9DCDyqVUVPW17ALH68w+ydvPDpcd6/rwZLDvt2NLtbaiAAgoooIACCiiggAJ5CRhA5FMvA4h8alVFT9seQKy78yFW/eM3So/VOyBK09lQAQUUUEABBRRQQIEsBQwg8imbAUQ+taqip20PIDb/w/W86d4jSo9147mzmDN9Sun2NlRAAQUUUEABBRRQQIG8BAwg8qmXAUQ+taqip20NIPb8YDcL//LTPMavlBrrtKmT2LRsLj09TutSgDZSQAEFFFBAAQUUUCBDAQOIfIrmN7V8alVFT9sWQPT+7Gec/d4PcU/vUaXHedmcibzx1S8v3d6GCiiggAIKKKCAAgookJ+AAUQ+NTOAyKdWVfS0bQHE+o9+hBX//pymxnjjrG9xyplvaeo1bKyAAgoooIACCiiggAJ5CRhA5FMvA4h8alVFT9sSQNT272f+pTexo6+5tRuWH/Mtlr7ZAKKKieI1FFBAAQUUUEABBRRIRcAAIpVKjN4PA4jRjbrpjLYEENu2bmbRrT9t2vn8Y77Psje/oenX8QUUUEABBRRQQAEFFFAgHwEDiHxqZQCRT62q6GlbAoh1N2xg1QPN3f0QOMtnHczSM19WhZPXUEABBRRQQAEFFFBAgUQEDCASKUQd3TCAqAMpkVNOBS4EZgGHAo8BHwdWAT8eoz62JYBY/cEPsXZHuZ0vBo574zmzmDOj+SBjjCx9GQUUUEABBRRQQAEFFKhAwACiAuQxuoQBxBhBtvhlzgM+AES9Hgd2AccBBwNfB04Gvj8GfWhLADEWd0BMO3Qvm95zhltwjsEk8CUUUEABBRRQQAEFFMhJwAAin2oZQKRfqxcBXyrCh7cC1wE14EjgZiB+/kngrDEYSlsCiLFYA+LyVx7LkpfOGAMCX0IBBRRQQAEFFFBAAQVyEjCAyKdaBhDp1+pTwBnAjcDiQd09BngAGAf8NvDVJofTlgDiwC4YN7Kjb2qp7s8+6jA2nHMSEycEg4cCCiiggAIKKKCAAgp0k4ABRD7VNoBIu1ax1sPu4lGLeMzii0N093YgVl5cCfxZk8NpSwARfV7/0Y+w4t+f03D3j5q0l5vf+UoOe9ZBDbe1gQIKKKCAAgoooIACCuQvYACRTw0NINKu1UuBLcBTwC8Ce4fo7qXACuAO4OVNDqdtAUTvz37G4vfdyPaf/GrdQzjqoP/i1ovO5NBDf6HuNp6ogAIKKKCAAgoooIACnSVgAJFPPQ0g0q7Vm4HrgW8ALximq68HPgJ8E/j1JofTtgAi+r3nv55g6V//fV0hxEsO+RYfvOAsDnv25CaHbHMFFFBAAQUUUEABBRTIWcAAIp/qGUCkXat3Au8D7gVeMkxXFwCfBZ4s7pIYbUSxg8Zwx+QpU6b07No10imjvXxzP487ITZ+8hPceH/fkGtCTJuwi7OPm8Ci17yWic96VnMXs7UCCiiggAIKKKCAAgpkL2AAkU8JDSDSrlWs6XAF8AXglGG6Og/YBOwDJtQxnKQDiP7+x8KU27fdxb8/8k1+/FQfkw6ewG9N/zVmz/k9esa52GQddfYUBRRQQAEFFFBAAQW6QsAAIp8yG0CkXatW3AEx0ojb+ghG2qWwdwoooIACCiiggAIKKJCigAFEilUZuk8GEGnX6hzgum5ZAyLtUtg7BRRQQAEFFFBAAQUUSFHAACLFqhhA5FOVZ3oaj13cXeyCEVty9g0xiP5dMOIxjNiOs5nDOyCa0bOtAgoooIACCiiggAIKVC5gAFE5eekLegdEabpKGsbWm7uBicAcYPsQV729CB5WArFmRDOHAUQzerZVQAEFFFBAAQUUUECBygUMIConL31BA4jSdJU1vBlYCNwAvHHQVY8BHgBiVcYXAv/WZK8MIJoEtLkCCiiggAIKKKCAAgpUK2AAUa13M1czgGhGr5q2JxbbcMbV3gJcX1z2COAW4EXAp4Azx6A7BhBjgOhLKKCAAgoooIACCiigQHUCBhDVWTd7JQOIZgWraf924P1A1OubQGyleTxwMPAgcHLxqEazvTGAaFbQ9goooIACCiiggAIKKFCpgAFEpdxNXcwAoim+ShvPBy4EZgGTgMeATwBXAk+OUU8MIMYI0pdRQAEFFFBAAQUUUECBagQMIKpxHourGECMhWLnvIYBROfU0pEooIACCiiggAIKKNAVAgYQ+ZTZACKfWlXRUwOIKpS9hgIKKKCAAgoooIACCoyZgAHEmFG2/IUMIFpOnNUFDCCyKpedVUABBRRQQAEFFFBAAQOIfOaAAUQ+taqipwYQVSh7DQUUUEABBRRQQAEFFBgzAQOIMaNs+QsZQLScOKsLGEBkVS47q4ACCiiggAIKKKCAAgYQ+cwBA4h8alVFTw0gqlD2GgoooIACCiiggAIKKDBmAgYQY0bZ8hcygGg5cVYXMIDIqlx2VgEFFFBAAQUUUEABBQwg8pkDBhD51KqKnhpAVKHsNRRQQAEFFFBAAQUUUGDMBAwgxoyy5S9kANFy4qwuYACRVbnsrAIKKKCAAgoooIACChhA5DMHDCDyqVUVPTWAqELZayiggAIKKKCAAgoooMCYCRhAjBlly1/IAKLlxFldoK+np2f85MmTs+q0nVVAAQUUUEABBRRQQIHuFXjiiSeo1Wr7gAndq5DHyA0g8qhTVb18ChgP/KCqC45ynf4k5IlE+mM38hdwTuVfw5RG4HxKqRqd0RfnVGfUMaVROKdSqkZn9CXVOfUcIAKIgzuDuXNHYQDRubXthJHtKgYxtRMG4xiSEHBOJVGGjumE86ljSpnMQJxTyZSiYzrinOqYUiYzEOdUMqXIsyMGEHnWrVt67Rtct1S6unE6p6qz7oYrOZ+6ocrVjtE5Va13N1zNOdUNVa52jM6par077moGEB1X0o4akG9wHVXOJAbjnEqiDB3TCedTx5QymYE4p5IpRcd0xDnVMaVMZiDOqWRKkWdHDCDyrFu39No3uG6pdHXjdE5VZ90NV3I+dUOVqx2jc6pa7264mnOqG6pc7RidU9V6d9zVDCA6rqQdNSDf4DqqnEkMxjmVRBk6phPOp44pZTIDcU4lU4qO6YhzqmNKmcxAnFPJlCLPjhhA5Fm3bum1b3DdUunqxumcqs66G67kfOqGKlc7RudUtd7dcDXnVDdUudoxOqeq9e64qxlAdFxJO2pAvsF1VDmTGIxzKokydEwnnE8dU8pkBuKcSqYUHdMR51THlDKZgTinkilFnh0xgMizbvZaAQUUUEABBRRQQAEFFFBAgawEDCCyKpedVUABBRRQQAEFFFBAAQUUUCBPAQOIPOtmrxVQQAEFFFBAAQUUUEABBRTISsAAIqty2VkFFFBAAQUUUEABBRRQQAEF8hQwgMizbvZaAQUUUEABBRRQQAEFFFBAgawEDCCyKpedVUABBRRQQAEFFFBAAQUUUCBPAQOIPOtmrxVQQAEFFFBAAQUUUEABBRTISsAAIqty2VkFFFBAAQUUUEABBRRQQAEF8hQwgMizbvZaAQUUUEABBRRQQAEFFFBAgawEDCCyKlfXdPZU4EJgFnAo8BjwcWAV8OOuUchvoPF+Mht4NXAy8BvAYcB/Af8CbAA2ArVhhha1vhh4LfB84EngXuBq4K5ROMrOmdyumd+sGPsevwL4TPGy8d5wlPOp9L83Y1+d/F4x5tM5wEuAycAPgEeAO4HLgb5BQ8rtPaMd7435zYLmexxzJ35veRUwDZgI/CewDfhrYKvvU75PDZoDvwK8HDix+M8LgWcBdwO/N8qU9H2odb8XNv9u4CuMKmAAMSqRJ1QscB7wASDm5uPALuA44GDg68UX2+9X3CcvV5/AfOCOAafuKH6ZPxp4bvHP44vjWcBTg15ySvEL2rHFz+4HpgLPKwKLtwF/O0w3ys6Z3K5ZXxU6+6z4pes+4NdHCSByq2075nBnz5TRRzcBWA/8cXHqN4HvFiFEvO/EF8hfLILQ/ldzXh0IkEd6Px5dvvPOOKb40ngEsB94FNgDTC/mUJhFOPFXfu49/dnfyOd7582WZ0b09iHmRPx0tADC96HR34fKfqZ28nxLamwGEEmVo+s78yLgS0X48FbguuLL55HAzUD8/D7i3IoAAA+7SURBVJPFF9iux0oQ4GXAB4E1wMeKv/70d/MNRT0jSHofcNGg/n+6uHPin4r//nYxD84FrgX2AScA/zqoXTNzJqdrJljutnQp/pIYv1hE7c4o7o4a6g6InGrbjjncluIldtH4fIk7H74MLC3u0urv4i8A8X72OWDvgH47r0Z+P06sxJV1ZxMwD/gG8AfFF+y4ePw1e2URPsSdNPHHlDin/3A+dfd8ehPwuuI9KN6Hfgf4szoCCOdN634vrOxNo9svZADR7TMgrfF/qvhScSOweFDX4i8MDwDjgN8GvppW1+1N8bjFTwf9wj4Q5t3AXwBxB0vc3RB/KYojPnT/ufj/cQfEw4M0Yz5EgDFU+FR2zuR2TSfYgVvkvwjcAkTd46/XQz2CkVtt2zGHu30+xWMJm4u/VP8v4Ed1gDivDiCN9H5cB2PHnRJ3yfywCMwjfIgvhwOP+D37IWBGEZ5e4+fez/k4n57hiDuL1o4SQPg+NPr7UNnP1I57c0p5QAYQKVenu/oWt1bvLh61iPUD4ovG4OP24q9S8ReFSIk98hLo/+CMXsezj98ruh+hRIQT8fhGPA85+DipeDzjZ0Dceti/Dkgzcyana+ZV5db09qAipIq7HWJtkfjr9HABRE61bcccbk2F8nrVW4FXDvpCONoInFcHhIZ7Px7Nr1N/Hp9J8ahoHL8FfG2Igd4GnA4sG3DLvfPJ+TR4qtQTQDhvRp43zXymdup7VJLjMoBIsixd2amXAluK5//jLwoDb3vtB7kUWDHCF9WuhMto0HMGBEuHF8/IRvf7b1+9DLhiiPHEl8/4C2U8vjEwnGpmzuR0zYxK3LKu9v+7/47iEZ8lIwQQOdW2HXO4ZUXK5IXjtvh4Pj/eVyLMirvq3lLcHh/Pp8eCuR8q7q4ZOCTn1QGN4d6PMyl/S7oZ64fEuiHxKE88hjjwmFQsavrLgz6/nE/OpzIBhPNm5HnTzGdqS94cfNGhBQwgnBmpCLwZuL54PvIFw3Tq9cBHgPiw71+ELpX+24/RBeLWwkj4/w2I1Z77j/5f3qK+sUvGUEc8Nxu3sMY8+XBxQjNzJqdrji7b2WfEl8T4UhiLT764WA9kpAAip9q2Yw539mwZfXSxu9I9xWkRPMQt8bHg5MAjgog3An/n+1Td78ejy3fuGfHZdVMRlMdik3GHTYRcvwlcWawPEb+7xKOEfu79z3kw1Od7586W4UdWzx0Qfr494zfWvxd245xr25gNINpG74UHCbyzWJwwtl2MZ72HOhYAny1WJY+7JDzyEYiF9uKX/lh5PhZdikUq+494pCIWfYv6xq2qQx0xL+LL558Cq4sTmpkzOV0znyqPfU/jM+oLxfau8cXxK8UlRgogcqptO+bw2Fcpr1eM5/T/oehy3GkX68/EwqYRjEawHbc4/1FxF17MuQi/4nBePVPnod6P85oFY9/b2H7zkmL78IGv/p3izr5YTHngFtTOJ+fT4FlYTwDhvBl53jTzmTr27wq+4rACBhBOjlQEYk2HuP0+vmycMkynYpXpuP0sdkSIL7IeeQjEraexu0n8ch+/+L9mULejnnEbdGzjGQvDDXXE4zlxa13Mk1gDJI5m5kxO18yjyq3p5Z8AfwPE7hcXDLjESAFETrVtxxxuTaXyedXYdjP+Wh1HLB4Y2wT/YED3470oduOJu7T+Hnht8TPn1TNIQ70f5zMDWtPT2FLxfOD5wH8Ud0DEXXsRrkdgEzuuDFwfwvnkfBo8E+sJIJw3I8+bZj5TW/PO4KsOKWAA4cRIRcDUMpVKjG0/Yq2HO4udLuKX+giR4tbUgYeJ/jMa/mXxGYtfLbazi/U/4jGMgTsVeAdE+b/Ij+2/4fm9WgQKHy+6/QEgvjgOPs4GNhRz7tnFDj2+T/k+Ndxsj5A0wtLYSjECrtj1Io5DinWr4veb+NyLHVdi5544nE/Op8HzqZ4Awnkz8rzxu0Qmn8kGEJkUqgu6GX8diH3Z45ku14DojILHasSxc0k8UhPP788FnhhiaI8D8WWz0TUgmpkzOV2zM2ZD46OIbVfPBM4qtmAd+AojBRA51bYdc7jxSnRWi7jTKnbcieOtHNhPfvBxYnHXVvzzXyp2OXBePaPkM/vPWESo8K9AHxDbhfcHDAPnVMy3mHcx12LOxeF8cj6VCSCcNyPPm2Y+Uzvrky7x0RhAJF6gLupePHZxd7ELRnxxjQ/zwUf/SvjxGEZsw+eRrkDcdvq54nGa+GU16vvdYbobj12cCkR9/3yIc2LV9SeLheLiMYytxTnNzJmcrplulVvbs0eL25n7t2sdeLX4y+JhxV+m+7fAi0d7thWP8TifDuxWMNS/N62tWvqvHmFn/BIfx5uK3VQG9zq2U/xq8Q/7twzO6T2jHe+N6Ve+NT3sf0zsfuD4YS7xLuAvi0d7TijOcT4dgPB96plJU88dEM6bkedNM+99rXmH8FWHFDCAcGKkIhCLSu4uvmTGdo3bh+hY/DU9godYAyCe8/JIUyC2uYtVwOMvPvHXoAgNYuXm4Y73AsuBzxd7pQ8+b+C+81OLL1VxTjNzJqdrplnl1veqP4Co90oROtwF5FTbdszhej07+bz+uTXcZ0n/QpU/K95nIhB3Xh2YEcO9H3fyfBlpbBcBq4rHxUYLIOJOwNgZIw7nk/Np8LyqJ4Bw3ow8b5r5TO3W97C2jNsAoi3sXnQYgZuBhcANxRZoA0+LWxsfKBYrjMXBYsVyj/QE4q8ZnwJeAXyruPNhxyjd/N3iL0OxuNKxxZ7pA5vcWGxfNtQClmXnTG7XTK/S7e3RSI9g5Fbbdszh9lav/VePv0bHX6V3Fo/8Db7jrr8m/wj8ftFd59UBiJHej9tf2ep7EI+JxeNisaPKaI9gxHnxSFkczifnU5kAwnkz+rwp+5la/btHF1/RAKKLi5/g0OO521iEL47Yn/364n8fAdwCxFaO8eU2PvA90hMYX2yvGYu8xeMWseZD/2Jco/U26hvbmMU2i68GYuuyeH86t3hudj8Q8yO2zBt4NDNncrrmaH7d9vORAoiwyKm27ZjD3TZfBo837qSKR8Nikdx4Lj8Wooy7HeI9J7bkjMUpY8vEWDQ37qrpP5xXB7yGez/uxnk1CYiQPdYKGWkRyrCJO2s+7Xyq+/O92+ZTPXdA+PnW2t8Lu23OtW28BhBto/fCwwjEL4LvL34RjNv24/nuuK3xYOBB4OTiUQ0B0xN4HbCx6Fbc4hx3QAx3xC/5/zLgh/GF4IvFX5CeKhatjH/2a8UXgdiCce0Yz5ncrplexdvXo9ECiNxqW/Z9r5lxtq96aVw5HueLv5TFeiKxHWeEpc8DIvCO8CHukLh6UFeb8W5HjdtxzTSqW20vYi7FH0cijIhwJh49jF17+rfhjN7EThnxBXPg4Xw68O/aSJ/v1Vay2qvF7zcDfw+Kx1djDsUdWfGe1H+8D4j/9B/Om9HnTdn3vmpnQBdfzQCii4uf8NBj7YALgVnFm3F8mH8CuHLA8/8Jd79ru9b/pbAegP7n9QeeG8/uXQzEHRSxl3psNxV3xFxVbOU50uuWnTO5XbMe2244Z7QAIgxyq2075nA3zJWRxhi3zL+7WFvol4tf+mMh0wjBY1HkoQ7n1YGtlT1+XmAa8I5iLsXn14TijyVfKnb4+ozzqfTne6fOtaOKx8BGG98K4PJBJ/k+NPr7UNnP1NHq4c/HQMAAYgwQfQkFFFBAAQUUUEABBRRQQAEFFBhZwADCGaKAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQUMIJwDCiiggAIKKKCAAgoooIACCijQcgEDiJYTewEFFFBAAQUUUEABBRRQQAEFFDCAcA4ooIACCiiggAIKKKCAAgoooEDLBQwgWk7sBRRQQAEFFFBAAQUUUEABBRRQwADCOaCAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQUMIJwDCiiggAIKKKCAAgoooIACCijQcgEDiJYTewEFFFBAAQUUUEABBRRQQAEFFDCAcA4ooIACCiiggAIKKKCAAgoooEDLBQwgWk7sBRRQQAEFFFBAAQUUUEABBRRQwADCOaCAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQUMIJwDCiiggAIKKKCAAgoooIACCijQcgEDiJYTewEFFFBAAQUUUEABBRRQQAEFFDCAcA4ooIACCiiggAIKKKCAAgoooEDLBQwgWk7sBRRQQAEFFFBAAQUUUEABBRRQwADCOaCAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQUMIJwDCiiggAIKKKCAAgoooIACCijQcgEDiJYTewEFFFBAAQUUUEABBRRQQAEFFDCAcA4ooIACCiiggAIKKKCAAgoooEDLBQwgWk7sBRRQQAEFFFBAAQUUUEABBRRQwADCOaCAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQUMIJwDCiiggAIKKKCAAgoooIACCijQcgEDiJYTewEFFFBAAQUUUEABBRRQQAEFFDCAcA4ooIACCiiggAIKKKCAAgoooEDLBQwgWk7sBRRQQAEFFFBAAQUUUEABBRRQwADCOaCAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQUMIJwDCiiggAIKKKCAAgoooIACCijQcgEDiJYTewEFFFBAAQUUUEABBRRQQAEFFDCAcA4ooIACCiiggAIKKKCAAgoooEDLBQwgWk7sBRRQQAEFFFBAAQUUUEABBRRQwADCOaCAAgoooIACCiiggAIKKKCAAi0XMIBoObEXUEABBRRQQAEFFFBAAQUUUEABAwjngAIKKKCAAgoooIACCiiggAIKtFzAAKLlxF5AAQUUUEABBRRQQAEFFFBAAQX+P2h4Fm+TkfmQAAAAAElFTkSuQmCC\" width=\"639.9999630089984\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"env = gym.make('Hopper-v1')\n",
"env._max_episode_steps = 300\n",
"fig, ax = plt.subplots()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time-unaware (orange)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"color = plt.cm.get_cmap('tab10')(1)\n",
"train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time-aware (blue)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"env = InputTime(env) # include the remaining time in the observations\n",
"color = plt.cm.get_cmap('tab10')(0)\n",
"train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reacher-v1"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[2018-01-03 09:59:23,275] Making new env: Reacher-v1\n"
]
},
{
"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",
" this.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 overriden (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",
" // select the cell after this one\n",
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
" IPython.notebook.select(index + 1);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\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,iVBORw0KGgoAAAANSUhEUgAABCAAAAMYCAYAAAAaYpYrAAAgAElEQVR4XuzdCXhV5YH/8V/2kIQASdhVCEFR3FqRXQEBbemU6Tb/mYoLFBdqF1TsZher1rHWFseWOqOiKGrRmWm1LbY6CCgou9q6gSiExR2SoGzZyf95c5NySe7NPfds9557v/d55rFDzrucz3uSe8/vvud9M8QLAQQQQAABBBBAAAEEEEAAAQQQ8Fggw+P6qR4BBBBAAAEEEEAAAQQQQAABBBAQAQQXAQIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5MQ0ggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAgh4LkAA4TkxDSCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCHguQADhOTENIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIeC5AAOE5sWsNnCfpOkmjJRVJ2iXpfyXdJumQa61QEQIIIIAAAggggAACCCCAAAIeCBBAeIDqQZXflvRrSWa83pW0V9JwSXmStkg6R1KNC+3WS8qStM+FuqgCAQQQQAABBBBAAAEEEPBDoJek5rb7Iz/aow2bAgQQNuF8LDZC0sa28OHrkhZKapE0QNKfJZmfPy7pKy70qSkjIyOrtLTUhaqoAgEEEEAAAQQQQAABBBDwXqC6ulotLS0mgMj2vjVacCJAAOFEz5+yf5T0BUkPSZrZockTJb0pKVPSmZJeddilvWVlZWV795oJFrwQQAABBBBAAAEEEEAAgeQX6N27t6qqqqok9U7+3qZ3Dwkgknv8zVoP5hfJPGphHrNYE6G7z0iaKukWST9xeDoEEA4BKY4AAggggAACCCCAAAL+ChBA+OvtpDUCCCd63pc9V9JqSWZthu6SGiM0eYOkmyQtl3S+wy4RQDgEpDgC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CBAgQIAAAQIECBAgQGC6gATEdGIVECBAgAABAgQIECBAgAABAhIQYoAAAQIECBAgQIAAAQIECBCYLiABMZ1YBQQIECBAgAABAgQIECBAgIAEhBggQIAAAQIECBAgQIAAAQIEpgtIQEwnVgEBAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgekCEhDTiVVAgAABAgQIECBAgAABAgQISECIAQIECBAgQIAAAQIECBAgQGC6gATEdGIVECBAgAABAgQIECBAgAABAhIQYoAAAQIECBAgQIAAAQIECBCYLiABMZ1YBQQIECBAgAABAgQIECBAgIAEhBggQIAAAQIECBAgQIAAAQIEpgtIQEwnVgEBAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgekCEhDTiVVAgAABAgQIECBAgAABAgQISECIAQIECBAgQIAAAQIECBAgQGC6gATEdGIVECBAgAABAgQIECBAgAABAhIQYoAAAQIECBAgQIAAAQIECBCYLiABMZ1YBQQIECBAgAABAgQIECBAgIAEhBggQIAAAQIECBAgQIAAAQIEpgtIQEwnVgEBAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgekCEhDTiVVAgAABAgQIECBAgAABAgQISECIAQIECBAgQIAAAQIECBAgQGC6gATEdGIVECBAgAABAgQIECBAgAABAhIQYoAAAQIECBAgQIAAAQIECBCYLiABMZ1YBQQIECBAgAABAgQIECBAgIAEhBggQIAAAQIECBAgQIAAAQIEpgtIQEwnVgEBAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgekCEhDTiVVAgAABAgQIECBAgAABAgQISECIAQIECBAgQIAAAQIECBAgQGC6gATEdGIVECBAgAABAgQIECBAgAABAhIQYoAAAQIECBAgQIAAAQIECBCYLiABMZ1YBQQIECBAgAABAgQIECBAgIAEhBggQIAAAQIECBAgQIAAAQIEpgtIQEwnVgEBAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgekCEhDTiVVAgAABAgQIECBAgAABAgQISECIAQIECBAgQIAAAQIECBAgQGC6gATEdGIVECBAgAABAgQIECBAgAABAhIQYoAAAQIECBAgQIAAAQIECBCYLiABMZ1YBQQIECBAgAABAgQIECBAgIAEhBggQIAAAQIECBAgQIAAAQIEpgtIQEwnVgEBAgQIECBAgAABAgQIECDw/xOaOiRM+v+5AAAAAElFTkSuQmCC\" width=\"639.9999630089984\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"env = gym.make('Reacher-v1')\n",
"env._max_episode_steps = 50\n",
"fig, ax = plt.subplots()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time-unaware (orange)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"color = plt.cm.get_cmap('tab10')(1)\n",
"train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time-aware (blue)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"env = InputTime(env) # include the remaining time in the observations\n",
"color = plt.cm.get_cmap('tab10')(0)\n",
"train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## InvertedPendulum-v1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[2018-01-03 10:35:41,244] Making new env: InvertedPendulum-v1\n"
]
},
{
"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",
" this.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 overriden (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",
" // select the cell after this one\n",
" var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
" IPython.notebook.select(index + 1);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\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,iVBORw0KGgoAAAANSUhEUgAABCAAAAMYCAYAAAAaYpYrAAAgAElEQVR4XuzdCZhU1Z3//0/1zq40uOAkrIqCk0QBEVBRQIjzk0TN5PknGG1UDNnGRDQRExPBYRKjYphBE1wiQgzJ/Gd+ajQLQUBBZHGbiYmoERpQ4waNQmTp6uqu33O6qrVpeqm7nbqn+l3P4xNC37Pc1/fS3fWpe89JiBcCCCCAAAIIIIAAAggggAACCCAQsUAi4v7pHgEEEEAAAQQQQAABBBBAAAEEEBABBBcBAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE1wACCCCAAAIIIIAAAggggAACCEQuQAAROTEDIIAAAggggAACCCCAAAIIIIAAAQTXAAIIIIAAAggggAACCCCAAAIIRC5AABE5MQMggAACCCCAAAIIIIAAAggggAABBNcAAggggAACCCCAAAIIIIAAAghELkAAETkxAyCAAAIIIIAAAggggAACCCCAAAEE10BzgVpJxZLegwUBBBBAAAEEEEAAAQQQcETgSEn1ksodmW+nnSYBRKctfasnnkokEsWVlZWoIIAAAggggAACCCCAAAJOCNTU1CidTpsAosSJCXfiSRJAdOLit3LqO/v06dNn586dqCCAAAIIIIAAAggggAACTgj07dtXu3bt2iWprxMT7sSTJIDoxMUngKD4CCCAAAIIIIAAAggg4LoAAYQ7FSSAcKdWNmbKHRA2lBkDAQQQQAABBBBAAAEEQhMggAiNMvKOCCAiJ3ZqAAIIp8rFZBFAAAEEEEAAAQQQQIAAwp1rgADCnVrZmCkBhA1lxkAAAQQQQAABBBBAAIHQBAggQqOMvCMCiMiJnRqAAMKpcjFZBBBAAAEEEEAAAQQQIIBw5xoggHCnVjZmSgBhQ5kxEEAAAQQQQAABBBBAIDQBAojQKCPviAAi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4npkkvrP4hI3u+PmomPfcSNgxqVJQMy480fc9No74IFJ7toG47qZ/2yShy+t/x9x9WdbtcVD4T4Ai/X6y5+ttXsPTlIzKOos9TpuqmbEfGc7ynPb9140Znorcx/bOXxmVwKiDHrr21PE8BxiZVsba8r8Q9reQrdpP/prI9NKgtemyOsucXV2tLLrdQXumOQBLZbq/nVNe1nyvHbC19PE04Xv71ONtTu0ZWC72vewJA9d+ZBxaPc4dNF76q7+8OeXICABcQmIvoIAAQIECBAgQIAAAQIECBDYLiABIUIIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAgIAEhBggQIECAAAECBAgQIECAAIHBBSQgBidWAAECBAgQIECAAAECBAgQICABIQYIECBAgAABAgQIECBAgACBwQUkIAYnVgABAgQIECBAgAABAgQIECAgASEGCBAgQIAAAQIECBAgQIAAgcEFJCAGJ1YAAQIECBAgQIAAAQIECBAg8L/y0lAG5Tt1zwAAAABJRU5ErkJggg==\" width=\"639.9999630089984\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"env = gym.make('InvertedPendulum-v1')\n",
"env._max_episode_steps = 1000\n",
"fig, ax = plt.subplots()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time-unaware (orange)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"color = plt.cm.get_cmap('tab10')(1)\n",
"train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time-aware (blue)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"env = InputTime(env) # include the remaining time in the observations\n",
"color = plt.cm.get_cmap('tab10')(0)\n",
"train()"
]
}
],
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment